[mod] template handling

This commit is contained in:
Fenris Wolf 2024-10-01 18:28:04 +02:00
parent a2a8c27e5e
commit e471e1f252
31 changed files with 183 additions and 68 deletions

View file

@ -22,6 +22,7 @@ document.addEventListener(
);
</script>
{{templates}}
</head>
<body>
<header>

View file

@ -10,21 +10,29 @@ namespace _zeitbild.frontend_web.helpers
/**
* @todo caching
*/
export async function template_coin(
group : string,
name : string,
data : Record<string, string>
) : Promise<string>
{
let content : string;
if (! (name in _template_cache)) {
const key : string = lib_plankton.string.coin(
"{{group}}/{{name}}",
{
"group": group,
"name": name,
}
);
if (! (key in _template_cache)) {
content = (
(
await lib_plankton.file.read(
lib_plankton.string.coin(
"templates/{{name}}.html.tpl",
"templates/{{group}}/{{name}}.html.tpl",
{
"group": group,
"name": name,
}
)
@ -32,10 +40,10 @@ namespace _zeitbild.frontend_web.helpers
)
.toString()
);
_template_cache[name] = content;
_template_cache[key] = content;
}
else {
content = _template_cache[name];
content = _template_cache[key];
}
return Promise.resolve<string>(
lib_plankton.string.coin(

View file

@ -495,6 +495,7 @@ namespace _zeitbild.frontend_web.view
)
);
return _zeitbild.frontend_web.helpers.template_coin(
"events",
"tableview",
{
"sources": (
@ -502,6 +503,7 @@ namespace _zeitbild.frontend_web.view
lib_plankton.map.dump(sources)
.map(
({"key": calendar_id, "value": data}) => async () => _zeitbild.frontend_web.helpers.template_coin(
"events",
"tableview-sources-entry",
{
"name": data.name,
@ -518,6 +520,7 @@ namespace _zeitbild.frontend_web.view
stuff.rows
.map(
(row) => async () => _zeitbild.frontend_web.helpers.template_coin(
"events",
"tableview-row",
{
"week": row.week.toFixed(0).padStart(2, "0"),
@ -526,6 +529,7 @@ namespace _zeitbild.frontend_web.view
row.data
.map(
(cell) => async () => _zeitbild.frontend_web.helpers.template_coin(
"events",
"tableview-cell",
{
"extra_classes": (
@ -580,6 +584,7 @@ namespace _zeitbild.frontend_web.view
cell.entries
.map(
(entry) => () => _zeitbild.frontend_web.helpers.template_coin(
"events",
"tableview-cell-entry",
{
"color": lib_plankton.color.output_hex(

View file

@ -9,6 +9,7 @@ namespace _zeitbild.frontend_web.pages
target_element.innerHTML = "";
target_element.innerHTML = await _zeitbild.frontend_web.helpers.template_coin(
"calendar_add",
"default",
{
"label": lib_plankton.translate.get("page.calendar_add.title")
}

View file

@ -11,6 +11,7 @@ namespace _zeitbild.frontend_web.pages
target_element.innerHTML = "";
target_element.innerHTML = await _zeitbild.frontend_web.helpers.template_coin(
"calendar_edit",
"default",
{
"label": lib_plankton.translate.get("page.calendar_edit.title.regular")
}

View file

@ -54,6 +54,7 @@ namespace _zeitbild.frontend_web.pages
target_element.innerHTML = "";
target_element.innerHTML = await _zeitbild.frontend_web.helpers.template_coin(
"event_add",
"default",
{
"label": lib_plankton.translate.get("page.event_add.title")
}

View file

@ -12,6 +12,7 @@ namespace _zeitbild.frontend_web.pages
target_element.innerHTML = "";
target_element.innerHTML = await _zeitbild.frontend_web.helpers.template_coin(
"event_edit",
"default",
{
"label": (
read_only

View file

@ -154,6 +154,7 @@ namespace _zeitbild.frontend_web.pages
target_element.innerHTML = "";
target_element.innerHTML = await _zeitbild.frontend_web.helpers.template_coin(
"events",
"events",
{
"label_control_year": lib_plankton.translate.get("page.events.controls.year"),

View file

@ -0,0 +1,19 @@
<div id="events">
<div id="events_controls">
<label id="events_control_year">
<span>{{label_control_year}}</span>
<input type="number"/>
</label>
<label id="events_control_week">
<span>{{label_control_week}}</span>
<input type="number"/>
</label>
<label id="events_control_count">
<span>{{label_control_count}}</span>
<input type="number"/>
</label>
<input type="submit" id="events_control_apply" value="{{label_control_apply}}"/>
</div>
<div id="events_table">
</div>
</div>

View file

@ -0,0 +1,26 @@
<div class="calendar">
<div class="calendar-pane calendar-pane-left">
<ul class="tableview-sources">
{{sources}}
</ul>
</div>
<div class="calendar-pane calendar-pane-right">
<table>
<thead>
<tr>
<th class="calendar-cell"></th>
<th class="calendar-cell calendar-cell-day">Mo</th>
<th class="calendar-cell calendar-cell-day">Di</th>
<th class="calendar-cell calendar-cell-day">Mi</th>
<th class="calendar-cell calendar-cell-day">Do</th>
<th class="calendar-cell calendar-cell-day">Fr</th>
<th class="calendar-cell calendar-cell-day">Sa</th>
<th class="calendar-cell calendar-cell-day">So</th>
</tr>
</thead>
<tbody>
{{rows}}
</tbody>
</table>
</div>
</div>

View file

@ -16,6 +16,7 @@ namespace _zeitbild.frontend_web.pages
case "internal": {
target_element.innerHTML = await _zeitbild.frontend_web.helpers.template_coin(
"login",
"default",
{
}
);

View file

@ -1,19 +0,0 @@
<div id="events">
<div id="events_controls">
<label id="events_control_year">
<span>{{label_control_year}}</span>
<input type="number"/>
</label>
<label id="events_control_week">
<span>{{label_control_week}}</span>
<input type="number"/>
</label>
<label id="events_control_count">
<span>{{label_control_count}}</span>
<input type="number"/>
</label>
<input type="submit" id="events_control_apply" value="{{label_control_apply}}"/>
</div>
<div id="events_table">
</div>
</div>

View file

@ -1,9 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<link rel="stylesheet" type="text/css" href="style.css"/>
</head>
<body>
</body>
</html>

View file

@ -1,27 +0,0 @@
<div class="calendar">
<div class="calendar-pane calendar-pane-left">
<ul class="tableview-sources">
{{sources}}
</ul>
</div>
<div class="calendar-pane calendar-pane-right">
<table>
<thead>
<tr>
<th class="calendar-cell"></th>
<th class="calendar-cell calendar-cell-day">Mo</th>
<th class="calendar-cell calendar-cell-day">Di</th>
<th class="calendar-cell calendar-cell-day">Mi</th>
<th class="calendar-cell calendar-cell-day">Do</th>
<th class="calendar-cell calendar-cell-day">Fr</th>
<th class="calendar-cell calendar-cell-day">Sa</th>
<th class="calendar-cell calendar-cell-day">So</th>
</tr>
</thead>
<tbody>
{{rows}}
</tbody>
</table>
</div>
</div>

61
tools/make-index Executable file
View file

@ -0,0 +1,61 @@
#!/usr/bin/env python3
import sys as _sys
import argparse as _argparse
def file_read(
path
):
handle = open(path, "r")
content = handle.read()
handle.close()
return content
def string_coin(
template,
arguments
):
result = template
for (key, value, ) in arguments.items():
result = result.replace("{{%s}}" % key, value)
return result
def main(
):
## args
argument_parser = _argparse.ArgumentParser()
argument_parser.add_argument(
dest = "index_template_path",
type = str,
)
argument_parser.add_argument(
"-t",
"--template",
dest = "template_paths",
type = str,
action = "append",
default = []
)
args = argument_parser.parse_args()
## exec
_sys.stdout.write(
string_coin(
file_read(args.index_template_path),
{
"templates": "".join(
map(
file_read,
args.template_paths
)
),
}
)
)
main()

View file

@ -23,17 +23,63 @@ default: index templates style logic data
index: ${dir_build}/index.html
${dir_build}/index.html: \
${dir_source}/index.html
${dir_source}/index.html.tpl
@ ${cmd_log} "index …"
@ ${cmd_mkdir} $(dir $@)
@ ${cmd_cp} -u -v $^ $@
@ tools/make-index \
${dir_source}/index.html.tpl \
> $@
.PHONY: templates
templates: \
$(wildcard ${dir_source}/templates/*)
@ ${cmd_log} "templates …"
@ ${cmd_mkdir} ${dir_build}/templates
@ ${cmd_cp} -r -u -v ${dir_source}/templates/* ${dir_build}/templates/
templates-pages-calendar_add \
templates-pages-calendar_edit \
templates-pages-event_add \
templates-pages-event_edit \
templates-pages-events \
templates-pages-login
.PHONY: templates-pages-calendar_add
templates-pages-calendar_add: \
$(wildcard ${dir_source}/pages/calendar_add/templates/*)
@ ${cmd_log} "templates:calendar_add …"
@ ${cmd_mkdir} ${dir_build}/templates/calendar_add
@ ${cmd_cp} -r -u -v ${dir_source}/pages/calendar_add/templates/* ${dir_build}/templates/calendar_add/
.PHONY: templates-pages-calendar_edit
templates-pages-calendar_edit: \
$(wildcard ${dir_source}/pages/calendar_edit/templates/*)
@ ${cmd_log} "templates:calendar_edit …"
@ ${cmd_mkdir} ${dir_build}/templates/calendar_edit
@ ${cmd_cp} -r -u -v ${dir_source}/pages/calendar_edit/templates/* ${dir_build}/templates/calendar_edit/
.PHONY: templates-pages-event_add
templates-pages-event_add: \
$(wildcard ${dir_source}/pages/event_add/templates/*)
@ ${cmd_log} "templates:event_add …"
@ ${cmd_mkdir} ${dir_build}/templates/event_add
@ ${cmd_cp} -r -u -v ${dir_source}/pages/event_add/templates/* ${dir_build}/templates/event_add/
.PHONY: templates-pages-event_edit
templates-pages-event_edit: \
$(wildcard ${dir_source}/pages/event_edit/templates/*)
@ ${cmd_log} "templates:event_edit …"
@ ${cmd_mkdir} ${dir_build}/templates/event_edit
@ ${cmd_cp} -r -u -v ${dir_source}/pages/event_edit/templates/* ${dir_build}/templates/event_edit/
.PHONY: templates-pages-events
templates-pages-events: \
$(wildcard ${dir_source}/pages/events/templates/*)
@ ${cmd_log} "templates:events …"
@ ${cmd_mkdir} ${dir_build}/templates/events
@ ${cmd_cp} -r -u -v ${dir_source}/pages/events/templates/* ${dir_build}/templates/events/
.PHONY: templates-pages-login
templates-pages-login: \
$(wildcard ${dir_source}/pages/login/templates/*)
@ ${cmd_log} "templates:login …"
@ ${cmd_mkdir} ${dir_build}/templates/login
@ ${cmd_cp} -r -u -v ${dir_source}/pages/login/templates/* ${dir_build}/templates/login/
.PHONY: style
style: \