namespace _zeitbild.frontend_web.pages { /** */ lib_plankton.zoo_page.register( "events", async (parameters, target_element) => { const load = async function (year, week, count) { // controls { (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); } // 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, } ); // sources { target_element.querySelectorAll(".tableview-sources-entry").forEach( (element) => { element.addEventListener( "click", (event) => { const calendar_id : _zeitbild.frontend_web.type.calendar_id = parseInt(element.getAttribute("rel")); lib_plankton.zoo_page.set( { "name": "calendar_edit", "parameters": { "read_only": false, // TODO "calendar_id": calendar_id, } } ); } ); } ); } // cells { 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, } } ); } } ); } ); } // events { 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); }, ); }