diff --git a/source/data/localization/deu.loc.json b/source/data/localization/deu.loc.json index ca6d96b..23a4617 100644 --- a/source/data/localization/deu.loc.json +++ b/source/data/localization/deu.loc.json @@ -26,6 +26,7 @@ "calendar.name": "Name", "calendar.resource": "Resource", "calendar.access.access": "Zugriff", + "calendar.access.public": "öffentlich", "calendar.access.default_level": "Standard", "calendar.access.attributed": "Zuweisungen", "widget.weekview.controls.year": "Jahr", @@ -50,6 +51,7 @@ "page.event_edit.title.read_only": "Termin-Details", "page.event_edit.actions.change": "ändern", "page.event_edit.actions.remove": "löschen", - "page.overview.title": "Übersicht" + "page.overview.title": "Übersicht", + "page.overview.login_hint": "anmelden um nicht-öffentliche Termine zu sehen" } } diff --git a/source/data/localization/eng.loc.json b/source/data/localization/eng.loc.json index 1dfd733..334909e 100644 --- a/source/data/localization/eng.loc.json +++ b/source/data/localization/eng.loc.json @@ -26,6 +26,7 @@ "calendar.name": "name", "calendar.resource": "resource", "calendar.access.access": "access", + "calendar.access.public": "public", "calendar.access.default_level": "default", "calendar.access.attributed": "attributed", "widget.weekview.controls.year": "Year", @@ -50,6 +51,7 @@ "page.event_edit.title.read_only": "Event details", "page.event_edit.actions.change": "change", "page.event_edit.actions.remove": "delete", - "page.overview.title": "Overview" + "page.overview.title": "Overview", + "page.overview.login_hint": "log in to view non-public events" } } diff --git a/source/logic/backend.ts b/source/logic/backend.ts index 9c67e9f..4ba763a 100644 --- a/source/logic/backend.ts +++ b/source/logic/backend.ts @@ -308,6 +308,7 @@ namespace _zeitbild.frontend_web.backend { "name": raw.name, "access": { + "public": raw.access.public, "default_level": access_level_decode(raw.access.default_level), "attributed": lib_plankton.map.hashmap.implementation_map( lib_plankton.map.hashmap.make( @@ -359,6 +360,7 @@ namespace _zeitbild.frontend_web.backend { "name": calendar_object.name, "access": { + "public": calendar_object.access.public, "default_level": access_level_encode(calendar_object.access.default_level), "attributed": ( lib_plankton.map.dump(calendar_object.access.attributed) @@ -396,6 +398,7 @@ namespace _zeitbild.frontend_web.backend { "name": calendar_object.name, "access": { + "public": calendar_object.access.public, "default_level": access_level_encode(calendar_object.access.default_level), "attributed": ( lib_plankton.map.dump(calendar_object.access.attributed) diff --git a/source/logic/main.ts b/source/logic/main.ts index 0e4e36e..e123e0c 100644 --- a/source/logic/main.ts +++ b/source/logic/main.ts @@ -37,7 +37,7 @@ namespace _zeitbild.frontend_web document.querySelector("main"), { "fallback": { - "name": "login", + "name": "overview", "parameters": {} } } diff --git a/source/logic/types.ts b/source/logic/types.ts index 0656131..a2f5121 100644 --- a/source/logic/types.ts +++ b/source/logic/types.ts @@ -96,6 +96,7 @@ namespace _zeitbild.frontend_web.type export type calendar_object = { name : string; access : { + public : boolean; default_level : enum_access_level; attributed : lib_plankton.map.type_map< user_id, diff --git a/source/pages/calendar_add/logic.ts b/source/pages/calendar_add/logic.ts index a0f92eb..b71f78e 100644 --- a/source/pages/calendar_add/logic.ts +++ b/source/pages/calendar_add/logic.ts @@ -19,6 +19,7 @@ namespace _zeitbild.frontend_web.pages { name : string; access : { + public : boolean; default_level : _zeitbild.frontend_web.type.enum_access_level; attributed : lib_plankton.map.type_map< _zeitbild.frontend_web.type.user_id, @@ -32,6 +33,7 @@ namespace _zeitbild.frontend_web.pages { name : string; access : { + public : boolean; default_level : _zeitbild.frontend_web.type.enum_access_level; attributed : lib_plankton.map.type_map< _zeitbild.frontend_web.type.user_id, @@ -88,6 +90,11 @@ namespace _zeitbild.frontend_web.pages "name": "access", "input": new lib_plankton.zoo_input.class_input_group( [ + { + "name": "public", + "input": new lib_plankton.zoo_input.class_input_checkbox(), + "label": lib_plankton.translate.get("calendar.access.public"), + }, { "name": "default_level", "input": _zeitbild.frontend_web.helpers.input_access_level(), diff --git a/source/pages/calendar_edit/logic.ts b/source/pages/calendar_edit/logic.ts index b717a19..6fb20f0 100644 --- a/source/pages/calendar_edit/logic.ts +++ b/source/pages/calendar_edit/logic.ts @@ -21,6 +21,7 @@ namespace _zeitbild.frontend_web.pages { name : string; access : { + public : boolean; default_level : _zeitbild.frontend_web.type.enum_access_level; attributed : lib_plankton.map.type_map< _zeitbild.frontend_web.type.user_id, @@ -33,6 +34,7 @@ namespace _zeitbild.frontend_web.pages { name : string; access : { + public : boolean; default_level : _zeitbild.frontend_web.type.enum_access_level; attributed : lib_plankton.map.type_map< _zeitbild.frontend_web.type.user_id, @@ -66,6 +68,11 @@ namespace _zeitbild.frontend_web.pages "name": "access", "input": new lib_plankton.zoo_input.class_input_group( [ + { + "name": "public", + "input": new lib_plankton.zoo_input.class_input_checkbox(), + "label": lib_plankton.translate.get("calendar.access.public"), + }, { "name": "default_level", "input": _zeitbild.frontend_web.helpers.input_access_level(), diff --git a/source/pages/logout/logic.ts b/source/pages/logout/logic.ts index 11e25af..d9d0644 100644 --- a/source/pages/logout/logic.ts +++ b/source/pages/logout/logic.ts @@ -11,7 +11,7 @@ namespace _zeitbild.frontend_web.pages ); lib_plankton.zoo_page.set( { - "name": "login", + "name": "overview", "parameters": { } } diff --git a/source/pages/overview/logic.ts b/source/pages/overview/logic.ts index d5ab647..8486100 100644 --- a/source/pages/overview/logic.ts +++ b/source/pages/overview/logic.ts @@ -31,6 +31,15 @@ namespace _zeitbild.frontend_web.pages.overview } ); target_element.querySelector("#overview").classList.toggle("compact", compact); + // hint + { + if (! await _zeitbild.frontend_web.backend.is_logged_in()) { + target_element.querySelector("#overview-head").textContent = lib_plankton.translate.get("page.overview.login_hint"); + } + else { + // do nothing + } + } // sources { const data : Array< diff --git a/source/pages/overview/templates/default.html.tpl b/source/pages/overview/templates/default.html.tpl index c2b1ca7..2076f57 100644 --- a/source/pages/overview/templates/default.html.tpl +++ b/source/pages/overview/templates/default.html.tpl @@ -1,6 +1,10 @@
-
+
-
+
+
+
+
+
diff --git a/source/style/pages.css b/source/style/pages.css index bfd3801..c957ddd 100644 --- a/source/style/pages.css +++ b/source/style/pages.css @@ -25,29 +25,36 @@ flex-wrap: wrap; } -#overview +#overview-head +{ + text-align: center; + font-weight: bold; + margin-bottom: 12px; +} + +#overview-body { display: flex; flex-direction: row; flex-wrap: wrap; } -#overview:not(.compact) #overview-pane-left +#overview-body:not(.compact) #overview-pane-left { flex-basis: 12.5%; } -#overview:not(.compact) #overview-pane-right +#overview-body:not(.compact) #overview-pane-right { flex-basis: 87.5%; } -#overview.compact #overview-pane-left +#overview-body.compact #overview-pane-left { flex-basis: 0%; } -#overview.compact #overview-pane-right +#overview-body.compact #overview-pane-right { flex-basis: 100%; } diff --git a/source/style/plankton.css b/source/style/plankton.css index e101aa2..d59c33e 100644 --- a/source/style/plankton.css +++ b/source/style/plankton.css @@ -23,3 +23,13 @@ .plankton_input_group { margin-left: 24px; } + +.plankton_input_list_element > * +{ + display: inline-block; +} + +.plankton_input_list_element > .plankton_input_list_element_input > .plankton_input_group > * +{ + display: inline-block; +} diff --git a/source/style/widgets.css b/source/style/widgets.css index 7158e93..a067deb 100644 --- a/source/style/widgets.css +++ b/source/style/widgets.css @@ -19,6 +19,11 @@ text-align: center; } +.weekview-control +{ + margin: 0 12px; +} + .weekview-table table { width: 100%; diff --git a/source/widgets/weekview/logic.ts b/source/widgets/weekview/logic.ts index 277e811..6f7aaef 100644 --- a/source/widgets/weekview/logic.ts +++ b/source/widgets/weekview/logic.ts @@ -772,63 +772,73 @@ namespace _zeitbild.frontend_web.widgets.weekview ); // cells { - context.querySelectorAll(".calendar-cell-regular").forEach( - (element) => { - element.addEventListener( - "click", - (event) => { - if (! (element === event.target)) { - // do nothing + if (! await _zeitbild.frontend_web.backend.is_logged_in()) { + // do nothing + } + else { + context.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 date : lib_plankton.pit.type_date = { + "year": parseInt(parts[0]), + "month": parseInt(parts[1]), + "day": parseInt(parts[2]), + }; + this.action_select_day(date); + } } - else { - const rel : string = element.getAttribute("rel"); - const parts : Array = rel.split("-"); - const date : lib_plankton.pit.type_date = { - "year": parseInt(parts[0]), - "month": parseInt(parts[1]), - "day": parseInt(parts[2]), - }; - this.action_select_day(date); - } - } - ); - } - ); + ); + } + ); + } } // events { - context.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; - } - }) (); - this.action_select_event( - calendar_id, - access_level, - event_id - ); - } - ); - } - ); + if (! await _zeitbild.frontend_web.backend.is_logged_in()) { + // do nothing + } + else { + context.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; + } + }) (); + this.action_select_event( + calendar_id, + access_level, + event_id + ); + } + ); + } + ); + } } } return Promise.resolve(undefined); diff --git a/source/widgets/weekview/templates/main.html.tpl b/source/widgets/weekview/templates/main.html.tpl index 6357ffc..efae0ac 100644 --- a/source/widgets/weekview/templates/main.html.tpl +++ b/source/widgets/weekview/templates/main.html.tpl @@ -1,18 +1,18 @@
-