From f0af1abacbfa972d59eec163b398ae8c6f746ac9 Mon Sep 17 00:00:00 2001 From: Fenris Wolf Date: Mon, 30 Sep 2024 14:04:23 +0200 Subject: [PATCH] =?UTF-8?q?[mod]=20page:events:rudiment=C3=A4re=20Kontroll?= =?UTF-8?q?en?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/data/localization/deu.loc.json | 6 +- source/data/localization/eng.loc.json | 6 +- source/pages/event_add/logic.ts | 2 +- source/pages/event_edit/logic.ts | 2 +- source/pages/events/logic.ts | 239 +++++++++++++++----------- source/style/main.css | 4 + source/templates/events.html.tpl | 19 ++ 7 files changed, 175 insertions(+), 103 deletions(-) create mode 100644 source/templates/events.html.tpl diff --git a/source/data/localization/deu.loc.json b/source/data/localization/deu.loc.json index e75f68e..c58f56f 100644 --- a/source/data/localization/deu.loc.json +++ b/source/data/localization/deu.loc.json @@ -42,6 +42,10 @@ "page.event_edit.title.regular": "Termin ändern", "page.event_edit.title.read_only": "Termin-Details", "page.event_edit.actions.change": "ändern", - "page.event_edit.actions.remove": "löschen" + "page.event_edit.actions.remove": "löschen", + "page.events.controls.year": "Jahr", + "page.events.controls.week": "Woche", + "page.events.controls.count": "Anzahl", + "page.events.controls.apply": "Laden" } } diff --git a/source/data/localization/eng.loc.json b/source/data/localization/eng.loc.json index 4b0c2ed..a63ea3e 100644 --- a/source/data/localization/eng.loc.json +++ b/source/data/localization/eng.loc.json @@ -42,6 +42,10 @@ "page.event_edit.title.regular": "Change event", "page.event_edit.title.read_only": "Event details", "page.event_edit.actions.change": "change", - "page.event_edit.actions.remove": "delete" + "page.event_edit.actions.remove": "delete", + "page.events.controls.year": "Year", + "page.events.controls.week": "Week", + "page.events.controls.count": "Count", + "page.events.controls.apply": "Load" } } diff --git a/source/pages/event_add/logic.ts b/source/pages/event_add/logic.ts index 4c91ca7..774cbe6 100644 --- a/source/pages/event_add/logic.ts +++ b/source/pages/event_add/logic.ts @@ -162,7 +162,7 @@ namespace _zeitbild.frontend_web.pages { "name": "description", "input": new lib_plankton.zoo_input.class_input_soft( - new lib_plankton.zoo_input.class_input_text( + new lib_plankton.zoo_input.class_input_textarea( ) ), "label": lib_plankton.translate.get("event.description") diff --git a/source/pages/event_edit/logic.ts b/source/pages/event_edit/logic.ts index 1c9d595..ab0231a 100644 --- a/source/pages/event_edit/logic.ts +++ b/source/pages/event_edit/logic.ts @@ -98,7 +98,7 @@ namespace _zeitbild.frontend_web.pages { "name": "description", "input": new lib_plankton.zoo_input.class_input_soft( - new lib_plankton.zoo_input.class_input_text( + new lib_plankton.zoo_input.class_input_textarea( ) ), "label": lib_plankton.translate.get("event.description") diff --git a/source/pages/events/logic.ts b/source/pages/events/logic.ts index ef2819e..6f7eb6a 100644 --- a/source/pages/events/logic.ts +++ b/source/pages/events/logic.ts @@ -6,114 +6,155 @@ namespace _zeitbild.frontend_web.pages lib_plankton.zoo_page.register( "events", async (parameters, target_element) => { - target_element.innerHTML = ""; - const content : string = await _zeitbild.frontend_web.view.calendar_view_table_html( + const load = async function (year, week, count) { + // controls { - "calendar_ids": null, - // TODO - "from": { - "year": 2024, - "week": 37 - }, - // TODO - "to": { - "year": 2024, - "week": 43 - }, - "timezone_shift": /*conf.timezone_shift*/0, + (target_element.querySelector("#events_control_year > input") as HTMLInputElement).value = year.toFixed(0); + (target_element.querySelector("#events_control_week > input") as HTMLInputElement).value = week.toFixed(0); + (target_element.querySelector("#events_control_count > input") as HTMLInputElement).value = count.toFixed(0); } - ); - target_element.innerHTML = content; - target_element.querySelectorAll(".calendar-cell-regular").forEach( - (element) => { - element.addEventListener( - "click", - (event) => { - if (! (element === event.target)) { - // do nothing - } - else { - const rel : string = element.getAttribute("rel"); - const parts : Array = rel.split("-"); - const year : int = parseInt(parts[0]); - const month : int = parseInt(parts[1]); - const day : int = parseInt(parts[2]); - lib_plankton.zoo_page.set( - { - "name": "event_add", - "parameters": { - "calendar_id": null, - "year": year, - "month": month, - "day": day, + // table + { + target_element.querySelector("#events_table").innerHTML = await _zeitbild.frontend_web.view.calendar_view_table_html( + { + "calendar_ids": null, + // TODO + "from": { + "year": year, + "week": week + }, + // TODO + "to": { + "year": year, + "week": (week + count) + }, + "timezone_shift": /*conf.timezone_shift*/0, + } + ); + target_element.querySelectorAll(".calendar-cell-regular").forEach( + (element) => { + element.addEventListener( + "click", + (event) => { + if (! (element === event.target)) { + // do nothing + } + else { + const rel : string = element.getAttribute("rel"); + const parts : Array = rel.split("-"); + const year : int = parseInt(parts[0]); + const month : int = parseInt(parts[1]); + const day : int = parseInt(parts[2]); + lib_plankton.zoo_page.set( + { + "name": "event_add", + "parameters": { + "calendar_id": null, + "year": year, + "month": month, + "day": day, + } + } + ); + } + } + ); + } + ); + target_element.querySelectorAll(".calendar-event_entry").forEach( + (element) => { + element.addEventListener( + "click", + () => { + const rel : string = element.getAttribute("rel"); + const parts : Array = rel.split("/"); + const calendar_id : _zeitbild.frontend_web.type.calendar_id = parseInt(parts[0]); + const event_id : (null | _zeitbild.frontend_web.type.local_resource_event_id) = ( + (parts[1] === "-") + ? + null + : + parseInt(parts[1]) + ); + const access_level : _zeitbild.frontend_web.type.enum_access_level = (() => { + switch (parts[2]) { + case "none": return _zeitbild.frontend_web.type.enum_access_level.none; + case "view": return _zeitbild.frontend_web.type.enum_access_level.view; + case "edit": return _zeitbild.frontend_web.type.enum_access_level.edit; + case "admin": return _zeitbild.frontend_web.type.enum_access_level.admin; + } + }) (); + switch (access_level) { + case _zeitbild.frontend_web.type.enum_access_level.none: { + throw (new Error("this event should not be visible")); + break; + } + case _zeitbild.frontend_web.type.enum_access_level.view: { + lib_plankton.zoo_page.set( + { + "name": "event_edit", + "parameters": { + "read_only": "yes", + "calendar_id": calendar_id, + "event_id": event_id, + } + } + ); + break; + } + case _zeitbild.frontend_web.type.enum_access_level.edit: + case _zeitbild.frontend_web.type.enum_access_level.admin: { + lib_plankton.zoo_page.set( + { + "name": "event_edit", + "parameters": { + "read_only": "no", + "calendar_id": calendar_id, + "event_id": event_id, + } + } + ); + break; } } - ); - } - } - ); - } - ); - target_element.querySelectorAll(".calendar-event_entry").forEach( - (element) => { - element.addEventListener( - "click", - () => { - const rel : string = element.getAttribute("rel"); - const parts : Array = rel.split("/"); - const calendar_id : _zeitbild.frontend_web.type.calendar_id = parseInt(parts[0]); - const event_id : (null | _zeitbild.frontend_web.type.local_resource_event_id) = ( - (parts[1] === "-") - ? - null - : - parseInt(parts[1]) + } ); - const access_level : _zeitbild.frontend_web.type.enum_access_level = (() => { - switch (parts[2]) { - case "none": return _zeitbild.frontend_web.type.enum_access_level.none; - case "view": return _zeitbild.frontend_web.type.enum_access_level.view; - case "edit": return _zeitbild.frontend_web.type.enum_access_level.edit; - case "admin": return _zeitbild.frontend_web.type.enum_access_level.admin; - } - }) (); - switch (access_level) { - case _zeitbild.frontend_web.type.enum_access_level.none: { - throw (new Error("this event should not be visible")); - break; - } - case _zeitbild.frontend_web.type.enum_access_level.view: { - lib_plankton.zoo_page.set( - { - "name": "event_edit", - "parameters": { - "read_only": "yes", - "calendar_id": calendar_id, - "event_id": event_id, - } - } - ); - break; - } - case _zeitbild.frontend_web.type.enum_access_level.edit: - case _zeitbild.frontend_web.type.enum_access_level.admin: { - lib_plankton.zoo_page.set( - { - "name": "event_edit", - "parameters": { - "read_only": "no", - "calendar_id": calendar_id, - "event_id": event_id, - } - } - ); - break; - } - } } ); } + }; + + target_element.innerHTML = ""; + target_element.innerHTML = await _zeitbild.frontend_web.helpers.template_coin( + "events", + { + "label_control_year": lib_plankton.translate.get("page.events.controls.year"), + "label_control_week": lib_plankton.translate.get("page.events.controls.week"), + "label_control_count": lib_plankton.translate.get("page.events.controls.count"), + "label_control_apply": lib_plankton.translate.get("page.events.controls.apply"), + } ); + // controls + { + target_element.querySelector("#events_control_apply").addEventListener( + "click", + (event) => { + event.preventDefault(); + const year : int = parseInt((target_element.querySelector("#events_control_year > input") as HTMLInputElement).value); + const week : int = parseInt((target_element.querySelector("#events_control_week > input") as HTMLInputElement).value); + const count : int = parseInt((target_element.querySelector("#events_control_count > input") as HTMLInputElement).value); + load(year, week, count); + } + ); + } + // table + { + const ywd_now : lib_plankton.pit.type_ywd = lib_plankton.pit.to_ywd(lib_plankton.pit.now()); + let year : int = ywd_now.year; + let week : int = Math.max(0, (ywd_now.week - 1)); + let count : int = 5; + load(year, week, count); + } return Promise.resolve(undefined); }, ); diff --git a/source/style/main.css b/source/style/main.css index c201d63..3e25762 100644 --- a/source/style/main.css +++ b/source/style/main.css @@ -159,3 +159,7 @@ a:hover { .plankton_input_group { margin-left: 48px; } + +#events_controls { + margin-bottom: 8px; +} diff --git a/source/templates/events.html.tpl b/source/templates/events.html.tpl new file mode 100644 index 0000000..7ef6a8d --- /dev/null +++ b/source/templates/events.html.tpl @@ -0,0 +1,19 @@ +
+
+ + + + +
+
+
+