From f279253e7759a234d7a59f12f899ec0ae164c9bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Fra=C3=9F?= Date: Thu, 25 Apr 2024 23:30:16 +0200 Subject: [PATCH] [int] --- lib/plankton/plankton.d.ts | 20 +++-- lib/plankton/plankton.js | 8 ++ source/logic/conf.ts | 24 +++++- source/logic/pages/index.ts | 5 -- .../pages/create.ts => pages/create/logic.ts} | 0 source/pages/create/structure.html | 0 source/pages/create/style.css | 0 .../pages/login.ts => pages/login/logic.ts} | 0 source/pages/login/structure.html | 7 ++ source/pages/login/style.css | 0 .../pages/logout.ts => pages/logout/logic.ts} | 0 source/pages/logout/structure.html | 0 source/pages/logout/style.css | 0 .../members.ts => pages/members/logic.ts} | 0 source/pages/members/structure.html | 8 ++ source/pages/members/style.css | 8 ++ .../register.ts => pages/register/logic.ts} | 81 +++++++++++++++++++ source/pages/register/structure.html | 35 ++++++++ source/pages/register/style.css | 16 ++++ .../pages/view.ts => pages/view/logic.ts} | 0 source/pages/view/structure.html | 7 ++ source/pages/view/style.css | 0 source/structure/index.html.tpl | 32 +------- source/style/style.css | 21 ----- tools/make-index | 45 +++++++++++ tools/makefile | 41 ++++++---- 26 files changed, 278 insertions(+), 80 deletions(-) delete mode 100644 source/logic/pages/index.ts rename source/{logic/pages/create.ts => pages/create/logic.ts} (100%) create mode 100644 source/pages/create/structure.html create mode 100644 source/pages/create/style.css rename source/{logic/pages/login.ts => pages/login/logic.ts} (100%) create mode 100644 source/pages/login/structure.html create mode 100644 source/pages/login/style.css rename source/{logic/pages/logout.ts => pages/logout/logic.ts} (100%) create mode 100644 source/pages/logout/structure.html create mode 100644 source/pages/logout/style.css rename source/{logic/pages/members.ts => pages/members/logic.ts} (100%) create mode 100644 source/pages/members/structure.html create mode 100644 source/pages/members/style.css rename source/{logic/pages/register.ts => pages/register/logic.ts} (65%) create mode 100644 source/pages/register/structure.html create mode 100644 source/pages/register/style.css rename source/{logic/pages/view.ts => pages/view/logic.ts} (100%) create mode 100644 source/pages/view/structure.html create mode 100644 source/pages/view/style.css create mode 100755 tools/make-index diff --git a/lib/plankton/plankton.d.ts b/lib/plankton/plankton.d.ts index 154ed8e..c3ef37c 100644 --- a/lib/plankton/plankton.d.ts +++ b/lib/plankton/plankton.d.ts @@ -1,15 +1,15 @@ /** * @author fenris */ -type int = number; +declare type int = number; /** * @author fenris */ -type float = number; +declare type float = number; /** * @author fenris */ -type type_date = { +declare type type_date = { year: int; month: int; day: int; @@ -17,7 +17,7 @@ type type_date = { /** * @author fenris */ -type type_time = { +declare type type_time = { hour: int; minute: int; second: int; @@ -25,7 +25,7 @@ type type_time = { /** * @author fenris */ -type type_datetimeobject = { +declare type type_datetimeobject = { date: type_date; time: type_time; }; @@ -42,7 +42,7 @@ declare namespace lib_plankton.base { /** * @author fenris */ -type type_pseudopointer = { +declare type type_pseudopointer = { value: type_value; }; /** @@ -1513,7 +1513,7 @@ declare namespace lib_plankton.storage.memory { clear(): Promise; write(key: any, value: any): Promise; delete(key: any): Promise; - read(key: any): Promise>; + read(key: any): Promise; search(term: any): Promise<{ key: string; preview: string; @@ -1820,11 +1820,15 @@ declare namespace lib_plankton.zoo_input { private read_only; /** */ - private dom_input; + dom_input: (null | HTMLInputElement); + /** + */ + private hooks_change; /** */ constructor(options?: { read_only?: boolean; + hooks_change?: Array<((value: boolean) => void)>; }); /** * [implementation] diff --git a/lib/plankton/plankton.js b/lib/plankton/plankton.js index c54c988..ed06d62 100644 --- a/lib/plankton/plankton.js +++ b/lib/plankton/plankton.js @@ -4616,9 +4616,11 @@ var lib_plankton; constructor(options = {}) { options = Object.assign({ "read_only": false, + "hooks_change": [], }, options); this.read_only = options.read_only; this.dom_input = null; + this.hooks_change = options.hooks_change; } /** * [implementation] @@ -4634,6 +4636,12 @@ var lib_plankton; // do nothing } } + this.dom_input.addEventListener("change", (event) => { + const value = event.target.checked; + this.hooks_change.forEach(procedure => { + procedure(value); + }); + }); // this.dom_input.style.display = "initial"; // n3o!!! parent.appendChild(this.dom_input); return Promise.resolve(undefined); diff --git a/source/logic/conf.ts b/source/logic/conf.ts index 0e89ad2..3bafa38 100644 --- a/source/logic/conf.ts +++ b/source/logic/conf.ts @@ -26,7 +26,29 @@ namespace _espe.conf export async function load( ) : Promise { - _data = lib_plankton.json.decode(await lib_plankton.file.read("conf.json")); + let data_raw; + try { + data_raw = lib_plankton.json.decode(await lib_plankton.file.read("conf.json")); + } + catch (error) { + data_raw = {}; + console.warn("could not read configuration file"); + } + _data = { + "backend": ( + (node_backend => ({ + "scheme": (node_backend["scheme"] ?? "http"), + "host": (node_backend["host"] ?? "localhost"), + "port": (node_backend["port"] ?? 7979), + "path_base": (node_backend["path_base"] ?? ""), + })) (data_raw["backend"] ?? {}) + ), + "settings": ( + (node_settings => ({ + "title": (node_settings["title"] ?? "Espe"), + })) (data_raw["settings"] ?? {}) + ), + }; } diff --git a/source/logic/pages/index.ts b/source/logic/pages/index.ts deleted file mode 100644 index a6ff0d0..0000000 --- a/source/logic/pages/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -lib_plankton.zoo_page.register( - "index", - (parameters, target_element) => { - } -); diff --git a/source/logic/pages/create.ts b/source/pages/create/logic.ts similarity index 100% rename from source/logic/pages/create.ts rename to source/pages/create/logic.ts diff --git a/source/pages/create/structure.html b/source/pages/create/structure.html new file mode 100644 index 0000000..e69de29 diff --git a/source/pages/create/style.css b/source/pages/create/style.css new file mode 100644 index 0000000..e69de29 diff --git a/source/logic/pages/login.ts b/source/pages/login/logic.ts similarity index 100% rename from source/logic/pages/login.ts rename to source/pages/login/logic.ts diff --git a/source/pages/login/structure.html b/source/pages/login/structure.html new file mode 100644 index 0000000..b3f019f --- /dev/null +++ b/source/pages/login/structure.html @@ -0,0 +1,7 @@ + diff --git a/source/pages/login/style.css b/source/pages/login/style.css new file mode 100644 index 0000000..e69de29 diff --git a/source/logic/pages/logout.ts b/source/pages/logout/logic.ts similarity index 100% rename from source/logic/pages/logout.ts rename to source/pages/logout/logic.ts diff --git a/source/pages/logout/structure.html b/source/pages/logout/structure.html new file mode 100644 index 0000000..e69de29 diff --git a/source/pages/logout/style.css b/source/pages/logout/style.css new file mode 100644 index 0000000..e69de29 diff --git a/source/logic/pages/members.ts b/source/pages/members/logic.ts similarity index 100% rename from source/logic/pages/members.ts rename to source/pages/members/logic.ts diff --git a/source/pages/members/structure.html b/source/pages/members/structure.html new file mode 100644 index 0000000..99ef674 --- /dev/null +++ b/source/pages/members/structure.html @@ -0,0 +1,8 @@ + diff --git a/source/pages/members/style.css b/source/pages/members/style.css new file mode 100644 index 0000000..930a4b4 --- /dev/null +++ b/source/pages/members/style.css @@ -0,0 +1,8 @@ +.members-result:not([href]) +{ + display: none; +} + +.members:not([rel]) .members-extras {display: none;} +.members[rel="poor"] .members-extras {display: none;} +.members[rel="rich"] .members-extras {} diff --git a/source/logic/pages/register.ts b/source/pages/register/logic.ts similarity index 65% rename from source/logic/pages/register.ts rename to source/pages/register/logic.ts index 4a2d3b3..51f1ad7 100644 --- a/source/logic/pages/register.ts +++ b/source/pages/register/logic.ts @@ -1,3 +1,5 @@ +var foobar; + lib_plankton.zoo_page.register( "register", async (parameters, target_element) => { @@ -129,5 +131,84 @@ lib_plankton.zoo_page.register( } ); set_state("fill"); + + // --- + + { + let dom_service_data_container : HTMLElement = document.createElement("div"); + dom_service_data_container.classList.add("register-services_data"); + + const input_service_use = new lib_plankton.zoo_input.class_input_group( + [ + { + "name": "use", + "input": new lib_plankton.zoo_input.class_input_checkbox( + { + "hooks_change": [ + (value) => {dom_service_data_container.classList.toggle("show", value);} + ] + } + ), + "label": "Netz-Dienste nutzen", + } + ] + ); + const input_service_data = new lib_plankton.zoo_input.class_input_group( + [ + { + "name": "name_display", + "input": new lib_plankton.zoo_input.class_input_text( + { + } + ), + "label": "Anzeigename", + "help": "So wirst du bei Online-Diensten anderen angezeigt.", + }, + { + "name": "name_login", + "input": new lib_plankton.zoo_input.class_input_text( + { + "pattern": "^[0-9a-zA-Z_]+$", + } + ), + "label": "Anmeldename", + "help": "Dieser Wert ist der Nutzername für die Anmeldung bei den Online-Diensten. Hierfür solltest du etwas kurzes und prägnantes wählen. Diesen Namen bekommt für gewöhnlich niemand zu sehen. Bitte beachte, dass der Name noch verfügbar sein muss!", + }, + { + "name": "password", + "input": new lib_plankton.zoo_input.class_input_password( + ), + "label": "Passwort", + "help": "Das Passwort für die Anmeldung bei den Online-Diensten", + }, + { + "name": "password_confirmation", + "input": new lib_plankton.zoo_input.class_input_password( + ), + "label": "Passwort wiederholen", + }, + ] + ); + await input_service_use.setup(target_element as HTMLElement); + target_element.appendChild(dom_service_data_container); + await input_service_data.setup(dom_service_data_container); +foobar = input_service_use; + + await input_service_use.write(true); + + /* + const element_use_services : HTMLInputElement = (target_element.querySelector(".register-field-use_services") as HTMLInputElement); + function update_service_data_visibility(show : (null | boolean) = null) : void + { +console.info({show}); + show = (show ?? element_use_services.checked); +console.info({show}); + target_element.querySelector(".register-services_data").classList.toggle("show", show); + } + element_use_services.addEventListener("change", (event) => {update_service_data_visibility(event.target["checked"]);}); + element_use_services.checked = true; + update_service_data_visibility(true); + */ + } }, ); diff --git a/source/pages/register/structure.html b/source/pages/register/structure.html new file mode 100644 index 0000000..15b7aac --- /dev/null +++ b/source/pages/register/structure.html @@ -0,0 +1,35 @@ + diff --git a/source/pages/register/style.css b/source/pages/register/style.css new file mode 100644 index 0000000..7becee1 --- /dev/null +++ b/source/pages/register/style.css @@ -0,0 +1,16 @@ +.register:not([rel]) .register-message {display: none;} +.register:not([rel]) .register-form {display: none;} + +.register[rel="fill"] .register-message {} +.register[rel="fill"] .register-form {} + +.register[rel="wait"] .register-message {} +.register[rel="wait"] .register-form {display: none;} + +.register[rel="done"] .register-message {} +.register[rel="done"] .register-form {display: none;} + +.register-services_data:not(.show) +{ + display: none; +} diff --git a/source/logic/pages/view.ts b/source/pages/view/logic.ts similarity index 100% rename from source/logic/pages/view.ts rename to source/pages/view/logic.ts diff --git a/source/pages/view/structure.html b/source/pages/view/structure.html new file mode 100644 index 0000000..0d34d96 --- /dev/null +++ b/source/pages/view/structure.html @@ -0,0 +1,7 @@ + diff --git a/source/pages/view/style.css b/source/pages/view/style.css new file mode 100644 index 0000000..e69de29 diff --git a/source/structure/index.html.tpl b/source/structure/index.html.tpl index 1c91c08..07c2532 100644 --- a/source/structure/index.html.tpl +++ b/source/structure/index.html.tpl @@ -6,37 +6,7 @@ - - - - + {{templates}}
diff --git a/source/style/style.css b/source/style/style.css index 039ba20..5623909 100644 --- a/source/style/style.css +++ b/source/style/style.css @@ -190,24 +190,3 @@ nav > ul > li:hover::after text-transform: uppercase; margin: 8px; } - -.members-result:not([href]) -{ - display: none; -} - -.register:not([rel]) .register-message {display: none;} -.register:not([rel]) .register-form {display: none;} - -.register[rel="fill"] .register-message {} -.register[rel="fill"] .register-form {} - -.register[rel="wait"] .register-message {} -.register[rel="wait"] .register-form {display: none;} - -.register[rel="done"] .register-message {} -.register[rel="done"] .register-form {display: none;} - -.members:not([rel]) .members-extras {display: none;} -.members[rel="poor"] .members-extras {display: none;} -.members[rel="rich"] .members-extras {} diff --git a/tools/make-index b/tools/make-index new file mode 100755 index 0000000..d017ec9 --- /dev/null +++ b/tools/make-index @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 + +import sys as _sys + +def string_coin( + template, + arguments +): + result = template + for (key, value, ) in arguments.items(): + result = result.replace("{{%s}}" % key, value) + return result + + +def file_read(path): + handle = open(path, "r") + content = handle.read() + handle.close() + return content + + +def file_write(path, content): + handle = open(path, "w") + handle.write(content) + handle.close() + + +def main(args): + ## args + path_main = args.pop(0) + paths_templates = args + args = [] + + ## exec + _sys.stdout.write( + string_coin( + file_read(path_main), + { + "templates": "\n".join(map(lambda path: file_read(path), paths_templates)) + } + ) + ) + + +main(_sys.argv[1:]) diff --git a/tools/makefile b/tools/makefile index fc38b03..a79caff 100644 --- a/tools/makefile +++ b/tools/makefile @@ -15,24 +15,18 @@ cmd_cp := cp ## rules .PHONY: default -default: ${dir_build}/index.html ${dir_build}/logic.js ${dir_build}/style.css - -${dir_build}/index.html: ${dir_source}/structure/index.html.tpl - @ ${cmd_log} "structure …" - @ ${cmd_mkdir} $(dir $@) - @ ${cmd_cat} $^ > $@ +default: ${dir_build}/logic.js ${dir_build}/style.css ${dir_build}/index.html ${dir_temp}/logic-unlinked.js: \ ${dir_lib}/plankton/plankton.d.ts \ ${dir_source}/logic/backend.ts \ ${dir_source}/logic/conf.ts \ - ${dir_source}/logic/pages/index.ts \ - ${dir_source}/logic/pages/login.ts \ - ${dir_source}/logic/pages/logout.ts \ - ${dir_source}/logic/pages/members.ts \ - ${dir_source}/logic/pages/create.ts \ - ${dir_source}/logic/pages/view.ts \ - ${dir_source}/logic/pages/register.ts \ + ${dir_source}/pages/login/logic.ts \ + ${dir_source}/pages/logout/logic.ts \ + ${dir_source}/pages/members/logic.ts \ + ${dir_source}/pages/create/logic.ts \ + ${dir_source}/pages/view/logic.ts \ + ${dir_source}/pages/register/logic.ts \ ${dir_source}/logic/main.ts @ ${cmd_log} "logic | compile …" @ ${cmd_mkdir} $(dir $@) @@ -44,7 +38,26 @@ ${dir_build}/logic.js: ${dir_lib}/plankton/plankton.js ${dir_temp}/logic-unlinke @ ${cmd_cat} $^ > $@ @ ${cmd_chmod} +x $@ -${dir_build}/style.css: ${dir_source}/style/style.css +${dir_build}/style.css: \ + ${dir_source}/style/style.css \ + ${dir_source}/pages/login/style.css \ + ${dir_source}/pages/logout/style.css \ + ${dir_source}/pages/members/style.css \ + ${dir_source}/pages/create/style.css \ + ${dir_source}/pages/view/style.css \ + ${dir_source}/pages/register/style.css @ ${cmd_log} "style …" @ ${cmd_mkdir} $(dir $@) @ ${cmd_cat} $^ > $@ + +${dir_build}/index.html: \ + ${dir_source}/structure/index.html.tpl \ + ${dir_source}/pages/login/structure.html \ + ${dir_source}/pages/logout/structure.html \ + ${dir_source}/pages/members/structure.html \ + ${dir_source}/pages/create/structure.html \ + ${dir_source}/pages/view/structure.html \ + ${dir_source}/pages/register/structure.html + @ ${cmd_log} "structure …" + @ ${cmd_mkdir} $(dir $@) + @ tools/make-index $^ > $@