Merge branch 'dev-publicity_calendars'

This commit is contained in:
Fenris Wolf 2024-10-12 12:06:38 +02:00
commit 93d35f5cc0
15 changed files with 135 additions and 68 deletions

View file

@ -26,6 +26,7 @@
"calendar.name": "Name", "calendar.name": "Name",
"calendar.resource": "Resource", "calendar.resource": "Resource",
"calendar.access.access": "Zugriff", "calendar.access.access": "Zugriff",
"calendar.access.public": "öffentlich",
"calendar.access.default_level": "Standard", "calendar.access.default_level": "Standard",
"calendar.access.attributed": "Zuweisungen", "calendar.access.attributed": "Zuweisungen",
"widget.weekview.controls.year": "Jahr", "widget.weekview.controls.year": "Jahr",
@ -50,6 +51,7 @@
"page.event_edit.title.read_only": "Termin-Details", "page.event_edit.title.read_only": "Termin-Details",
"page.event_edit.actions.change": "ändern", "page.event_edit.actions.change": "ändern",
"page.event_edit.actions.remove": "löschen", "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"
} }
} }

View file

@ -26,6 +26,7 @@
"calendar.name": "name", "calendar.name": "name",
"calendar.resource": "resource", "calendar.resource": "resource",
"calendar.access.access": "access", "calendar.access.access": "access",
"calendar.access.public": "public",
"calendar.access.default_level": "default", "calendar.access.default_level": "default",
"calendar.access.attributed": "attributed", "calendar.access.attributed": "attributed",
"widget.weekview.controls.year": "Year", "widget.weekview.controls.year": "Year",
@ -50,6 +51,7 @@
"page.event_edit.title.read_only": "Event details", "page.event_edit.title.read_only": "Event details",
"page.event_edit.actions.change": "change", "page.event_edit.actions.change": "change",
"page.event_edit.actions.remove": "delete", "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"
} }
} }

View file

@ -308,6 +308,7 @@ namespace _zeitbild.frontend_web.backend
{ {
"name": raw.name, "name": raw.name,
"access": { "access": {
"public": raw.access.public,
"default_level": access_level_decode(raw.access.default_level), "default_level": access_level_decode(raw.access.default_level),
"attributed": lib_plankton.map.hashmap.implementation_map( "attributed": lib_plankton.map.hashmap.implementation_map(
lib_plankton.map.hashmap.make( lib_plankton.map.hashmap.make(
@ -359,6 +360,7 @@ namespace _zeitbild.frontend_web.backend
{ {
"name": calendar_object.name, "name": calendar_object.name,
"access": { "access": {
"public": calendar_object.access.public,
"default_level": access_level_encode(calendar_object.access.default_level), "default_level": access_level_encode(calendar_object.access.default_level),
"attributed": ( "attributed": (
lib_plankton.map.dump(calendar_object.access.attributed) lib_plankton.map.dump(calendar_object.access.attributed)
@ -396,6 +398,7 @@ namespace _zeitbild.frontend_web.backend
{ {
"name": calendar_object.name, "name": calendar_object.name,
"access": { "access": {
"public": calendar_object.access.public,
"default_level": access_level_encode(calendar_object.access.default_level), "default_level": access_level_encode(calendar_object.access.default_level),
"attributed": ( "attributed": (
lib_plankton.map.dump(calendar_object.access.attributed) lib_plankton.map.dump(calendar_object.access.attributed)

View file

@ -37,7 +37,7 @@ namespace _zeitbild.frontend_web
document.querySelector("main"), document.querySelector("main"),
{ {
"fallback": { "fallback": {
"name": "login", "name": "overview",
"parameters": {} "parameters": {}
} }
} }

View file

@ -96,6 +96,7 @@ namespace _zeitbild.frontend_web.type
export type calendar_object = { export type calendar_object = {
name : string; name : string;
access : { access : {
public : boolean;
default_level : enum_access_level; default_level : enum_access_level;
attributed : lib_plankton.map.type_map< attributed : lib_plankton.map.type_map<
user_id, user_id,

View file

@ -19,6 +19,7 @@ namespace _zeitbild.frontend_web.pages
{ {
name : string; name : string;
access : { access : {
public : boolean;
default_level : _zeitbild.frontend_web.type.enum_access_level; default_level : _zeitbild.frontend_web.type.enum_access_level;
attributed : lib_plankton.map.type_map< attributed : lib_plankton.map.type_map<
_zeitbild.frontend_web.type.user_id, _zeitbild.frontend_web.type.user_id,
@ -32,6 +33,7 @@ namespace _zeitbild.frontend_web.pages
{ {
name : string; name : string;
access : { access : {
public : boolean;
default_level : _zeitbild.frontend_web.type.enum_access_level; default_level : _zeitbild.frontend_web.type.enum_access_level;
attributed : lib_plankton.map.type_map< attributed : lib_plankton.map.type_map<
_zeitbild.frontend_web.type.user_id, _zeitbild.frontend_web.type.user_id,
@ -88,6 +90,11 @@ namespace _zeitbild.frontend_web.pages
"name": "access", "name": "access",
"input": new lib_plankton.zoo_input.class_input_group( "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", "name": "default_level",
"input": _zeitbild.frontend_web.helpers.input_access_level(), "input": _zeitbild.frontend_web.helpers.input_access_level(),

View file

@ -21,6 +21,7 @@ namespace _zeitbild.frontend_web.pages
{ {
name : string; name : string;
access : { access : {
public : boolean;
default_level : _zeitbild.frontend_web.type.enum_access_level; default_level : _zeitbild.frontend_web.type.enum_access_level;
attributed : lib_plankton.map.type_map< attributed : lib_plankton.map.type_map<
_zeitbild.frontend_web.type.user_id, _zeitbild.frontend_web.type.user_id,
@ -33,6 +34,7 @@ namespace _zeitbild.frontend_web.pages
{ {
name : string; name : string;
access : { access : {
public : boolean;
default_level : _zeitbild.frontend_web.type.enum_access_level; default_level : _zeitbild.frontend_web.type.enum_access_level;
attributed : lib_plankton.map.type_map< attributed : lib_plankton.map.type_map<
_zeitbild.frontend_web.type.user_id, _zeitbild.frontend_web.type.user_id,
@ -66,6 +68,11 @@ namespace _zeitbild.frontend_web.pages
"name": "access", "name": "access",
"input": new lib_plankton.zoo_input.class_input_group( "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", "name": "default_level",
"input": _zeitbild.frontend_web.helpers.input_access_level(), "input": _zeitbild.frontend_web.helpers.input_access_level(),

View file

@ -11,7 +11,7 @@ namespace _zeitbild.frontend_web.pages
); );
lib_plankton.zoo_page.set( lib_plankton.zoo_page.set(
{ {
"name": "login", "name": "overview",
"parameters": { "parameters": {
} }
} }

View file

@ -31,6 +31,15 @@ namespace _zeitbild.frontend_web.pages.overview
} }
); );
target_element.querySelector("#overview").classList.toggle("compact", compact); 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 // sources
{ {
const data : Array< const data : Array<

View file

@ -1,6 +1,10 @@
<div id="overview"> <div id="overview">
<div id="overview-pane-left"> <div id="overview-head">
</div> </div>
<div id="overview-pane-right"> <div id="overview-body">
<div id="overview-pane-left">
</div>
<div id="overview-pane-right">
</div>
</div> </div>
</div> </div>

View file

@ -25,29 +25,36 @@
flex-wrap: wrap; flex-wrap: wrap;
} }
#overview #overview-head
{
text-align: center;
font-weight: bold;
margin-bottom: 12px;
}
#overview-body
{ {
display: flex; display: flex;
flex-direction: row; flex-direction: row;
flex-wrap: wrap; flex-wrap: wrap;
} }
#overview:not(.compact) #overview-pane-left #overview-body:not(.compact) #overview-pane-left
{ {
flex-basis: 12.5%; flex-basis: 12.5%;
} }
#overview:not(.compact) #overview-pane-right #overview-body:not(.compact) #overview-pane-right
{ {
flex-basis: 87.5%; flex-basis: 87.5%;
} }
#overview.compact #overview-pane-left #overview-body.compact #overview-pane-left
{ {
flex-basis: 0%; flex-basis: 0%;
} }
#overview.compact #overview-pane-right #overview-body.compact #overview-pane-right
{ {
flex-basis: 100%; flex-basis: 100%;
} }

View file

@ -23,3 +23,13 @@
.plankton_input_group { .plankton_input_group {
margin-left: 24px; 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;
}

View file

@ -19,6 +19,11 @@
text-align: center; text-align: center;
} }
.weekview-control
{
margin: 0 12px;
}
.weekview-table table .weekview-table table
{ {
width: 100%; width: 100%;

View file

@ -772,63 +772,73 @@ namespace _zeitbild.frontend_web.widgets.weekview
); );
// cells // cells
{ {
context.querySelectorAll(".calendar-cell-regular").forEach( if (! await _zeitbild.frontend_web.backend.is_logged_in()) {
(element) => { // do nothing
element.addEventListener( }
"click", else {
(event) => { context.querySelectorAll(".calendar-cell-regular").forEach(
if (! (element === event.target)) { (element) => {
// do nothing element.addEventListener(
"click",
(event) => {
if (! (element === event.target)) {
// do nothing
}
else {
const rel : string = element.getAttribute("rel");
const parts : Array<string> = 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<string> = 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 // events
{ {
context.querySelectorAll(".calendar-event_entry").forEach( if (! await _zeitbild.frontend_web.backend.is_logged_in()) {
(element) => { // do nothing
element.addEventListener( }
"click", else {
() => { context.querySelectorAll(".calendar-event_entry").forEach(
const rel : string = element.getAttribute("rel"); (element) => {
const parts : Array<string> = rel.split("/"); element.addEventListener(
const calendar_id : _zeitbild.frontend_web.type.calendar_id = parseInt(parts[0]); "click",
const event_id : (null | _zeitbild.frontend_web.type.local_resource_event_id) = ( () => {
(parts[1] === "-") const rel : string = element.getAttribute("rel");
? const parts : Array<string> = rel.split("/");
null const calendar_id : _zeitbild.frontend_web.type.calendar_id = parseInt(parts[0]);
: const event_id : (null | _zeitbild.frontend_web.type.local_resource_event_id) = (
parseInt(parts[1]) (parts[1] === "-")
); ?
const access_level : _zeitbild.frontend_web.type.enum_access_level = (() => { null
switch (parts[2]) { :
case "none": return _zeitbild.frontend_web.type.enum_access_level.none; parseInt(parts[1])
case "view": return _zeitbild.frontend_web.type.enum_access_level.view; );
case "edit": return _zeitbild.frontend_web.type.enum_access_level.edit; const access_level : _zeitbild.frontend_web.type.enum_access_level = (() => {
case "admin": return _zeitbild.frontend_web.type.enum_access_level.admin; 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;
this.action_select_event( case "edit": return _zeitbild.frontend_web.type.enum_access_level.edit;
calendar_id, case "admin": return _zeitbild.frontend_web.type.enum_access_level.admin;
access_level, }
event_id }) ();
); this.action_select_event(
} calendar_id,
); access_level,
} event_id
); );
}
);
}
);
}
} }
} }
return Promise.resolve<void>(undefined); return Promise.resolve<void>(undefined);

View file

@ -1,18 +1,18 @@
<div class="weekview"> <div class="weekview">
<div class="weekview-controls"> <div class="weekview-controls">
<label class="weekview-control-year"> <label class="weekview-control weekview-control-year">
<span>{{label_control_year}}</span> <span>{{label_control_year}}</span>
<input type="number"/> <input type="number"/>
</label> </label>
<label class="weekview-control-week"> <label class="weekview-control weekview-control-week">
<span>{{label_control_week}}</span> <span>{{label_control_week}}</span>
<input type="number"/> <input type="number"/>
</label> </label>
<label class="weekview-control-count"> <label class="weekview-control weekview-control-count">
<span>{{label_control_count}}</span> <span>{{label_control_count}}</span>
<input type="number"/> <input type="number"/>
</label> </label>
<input type="submit" class="weekview-control-apply" value="{{label_control_apply}}"/> <input type="submit" class="weekview-control weekview-control-apply" value="{{label_control_apply}}"/>
</div> </div>
<div class="weekview-table"> <div class="weekview-table">
<table> <table>