[mod] widget:listview [mod] page:overview

This commit is contained in:
Fenris Wolf 2024-10-02 18:26:33 +02:00
parent 9f292aee88
commit b6d27b9f15
6 changed files with 175 additions and 20 deletions

View file

@ -75,6 +75,80 @@ namespace _zeitbild.frontend_web.helpers
} }
/**
* @todo timezone
*/
export function datetime_format(
datetime : (null | lib_plankton.pit.type_datetime)
) : string
{
if (datetime === null) {
return "-";
}
else {
return lib_plankton.string.coin(
"{{date}}{{macro_time}}",
{
"date": lib_plankton.string.coin(
"{{year}}-{{month}}-{{day}}",
{
"year": datetime.date.year.toFixed(0).padStart(4, "0"),
"month": datetime.date.month.toFixed(0).padStart(2, "0"),
"day": datetime.date.day.toFixed(0).padStart(2, "0"),
}
),
"macro_time": (
(datetime.time === null)
?
""
:
lib_plankton.string.coin(
",{{time}}",
{
"time": lib_plankton.string.coin(
"{{hour}}:{{minute}}",
{
"hour": datetime.time.hour.toFixed(0).padStart(2, "0"),
"minute": datetime.time.minute.toFixed(0).padStart(2, "0"),
"second": datetime.time.second.toFixed(0).padStart(2, "0"),
}
),
}
)
),
}
);
}
}
/**
*/
export function timespan_format(
from : lib_plankton.pit.type_datetime,
to : (null | lib_plankton.pit.type_datetime)
) : string
{
return lib_plankton.string.coin(
"{{from}}{{macro_to}}",
{
"from": datetime_format(from),
"macro_to": (
(to === null)
?
""
:
lib_plankton.string.coin(
" - {{to}}",
{
"to": datetime_format(to),
}
)
),
}
);
}
/** /**
*/ */
export function input_access_level( export function input_access_level(
@ -156,5 +230,5 @@ namespace _zeitbild.frontend_web.helpers
) )
); );
} }
} }

View file

@ -7,7 +7,21 @@ namespace _zeitbild.frontend_web.pages.overview
"overview", "overview",
async (parameters, target_element) => { async (parameters, target_element) => {
// params // params
const mode : ("list" | "week") = (parameters["mode"] ?? "week"); const compact : boolean = (
(
parameters["compact"]
??
(
(window.innerWidth >= 800)
?
"no"
:
"yes"
)
)
===
"yes"
);
// exec // exec
target_element.innerHTML = await _zeitbild.frontend_web.helpers.template_coin( target_element.innerHTML = await _zeitbild.frontend_web.helpers.template_coin(
@ -16,6 +30,7 @@ namespace _zeitbild.frontend_web.pages.overview
{ {
} }
); );
target_element.querySelector("#overview").classList.toggle("compact", compact);
// sources // sources
{ {
const data : Array< const data : Array<
@ -64,7 +79,12 @@ namespace _zeitbild.frontend_web.pages.overview
}, },
} }
); );
await widget_sources.load(target_element.querySelector("#overview-pane-left")); if (compact) {
// do nothing
}
else {
await widget_sources.load(target_element.querySelector("#overview-pane-left"));
}
} }
// view // view
{ {
@ -110,9 +130,11 @@ namespace _zeitbild.frontend_web.pages.overview
} }
} }
}; };
switch (mode) { const widget = (
case "list": { compact
const widget_listview = new _zeitbild.frontend_web.widgets.listview.class_widget_listview( ?
(
new _zeitbild.frontend_web.widgets.listview.class_widget_listview(
get_entries, get_entries,
{ {
"action_select_event": action_select_event, "action_select_event": action_select_event,
@ -130,12 +152,11 @@ namespace _zeitbild.frontend_web.pages.overview
); );
}, },
} }
); )
await widget_listview.load(target_element.querySelector("#overview-pane-right")); )
break; :
} (
case "week": { new _zeitbild.frontend_web.widgets.weekview.class_widget_weekview(
const widget_weekview = new _zeitbild.frontend_web.widgets.weekview.class_widget_weekview(
get_entries, get_entries,
{ {
"action_select_event": action_select_event, "action_select_event": action_select_event,
@ -153,11 +174,10 @@ namespace _zeitbild.frontend_web.pages.overview
); );
}, },
} }
); )
await widget_weekview.load(target_element.querySelector("#overview-pane-right")); )
break; );
} await widget.load(target_element.querySelector("#overview-pane-right"));
}
} }
return Promise.resolve<void>(undefined); return Promise.resolve<void>(undefined);
}, },

View file

@ -32,12 +32,22 @@
flex-wrap: wrap; flex-wrap: wrap;
} }
#overview-pane-left #overview:not(.compact) #overview-pane-left
{ {
flex-basis: 12.5%; flex-basis: 12.5%;
} }
#overview-pane-right #overview:not(.compact) #overview-pane-right
{ {
flex-basis: 87.5%; flex-basis: 87.5%;
} }
#overview.compact #overview-pane-left
{
flex-basis: 0%;
}
#overview.compact #overview-pane-right
{
flex-basis: 100%;
}

View file

@ -46,3 +46,23 @@
font-weight: bold; font-weight: bold;
font-size: 1.25em; font-size: 1.25em;
} }
.listview-entry-label
{
font-weight: bold;
}
.listview-entry-label::before
{
content: "[";
}
.listview-entry-label::after
{
content: "] ";
}
.listview-entry-field:not(:last-child)
{
margin-bottom: 16px;
}

View file

@ -134,6 +134,24 @@ namespace _zeitbild.frontend_web.widgets.listview
"entry", "entry",
{ {
"name": entry.event_object.name, "name": entry.event_object.name,
"calendar": entry.calendar_name,
"when": _zeitbild.frontend_web.helpers.timespan_format(entry.event_object.begin, entry.event_object.end),
"label_location": lib_plankton.translate.get("event.location"),
"location": (
(entry.event_object.location === null)
?
"?"
:
entry.event_object.location
),
"label_description": lib_plankton.translate.get("event.description"),
"description": (
(entry.event_object.description === null)
?
"?"
:
entry.event_object.description
),
"raw": JSON.stringify(entry), "raw": JSON.stringify(entry),
"color": lib_plankton.color.output_hex( "color": lib_plankton.color.output_hex(
lib_plankton.color.give_generic( lib_plankton.color.give_generic(

View file

@ -1,4 +1,17 @@
<li class="listview-entry" style="background-color: {{color}}" rel="{{rel}}"> <li class="listview-entry" style="background-color: {{color}}" rel="{{rel}}">
<span class="listview-entry-name">{{name}}</span> <span class="listview-entry-name">{{name}}</span> (<span class="listview-entry-calendar">{{calendar}}</span>)
<div class="listview-entry-field listview-entry-when">
<span class="listview-entry-value">{{when}}</span>
</div>
<div class="listview-entry-field listview-entry-location">
<span class="listview-entry-label">{{label_location}}</span>
<span class="listview-entry-value">{{location}}</span>
</div>
<!--
<div class="listview-entry-field listview-entry-description">
<span class="listview-entry-label">{{label_description}}</span>
<span class="listview-entry-value">{{description}}</span>
</div>
<div class="listview-entry-raw">{{raw}}</div> <div class="listview-entry-raw">{{raw}}</div>
-->
</li> </li>