[mod] weekview:Korrekter Jahresübergang

This commit is contained in:
fenris 2025-12-25 16:43:53 +01:00
parent 45f0135056
commit f1a5e37feb
4 changed files with 111 additions and 14 deletions

View file

@ -145,4 +145,37 @@ namespace _dali
}
}
/**
*/
export var general_cache : lib_plankton.cache.type_subject<unknown> = lib_plankton.cache.make<unknown>(
/*
lib_plankton.storage.memory.implementation_chest(
{
}
)
*/
);
/**
*/
export async function number_of_weeks(
year : int
) : Promise<int>
{
const value_raw : unknown = await lib_plankton.cache.get<unknown>(
_dali.general_cache,
lib_plankton.string.coin(
"number_of_weeks_{{year}}",
{
"year": year.toFixed(0),
}
),
null,
() => Promise.resolve<int>(lib_plankton.pit.number_of_weeks(year))
);
return (value_raw as int);
}
}

View file

@ -80,6 +80,8 @@ namespace _dali
await _dali.backend.initialize(
_dali.conf.get()["backend"]
);
// init:general cache
lib_plankton.cache.init(_dali.general_cache);
// init:model
await _dali.model.initialize(
);

View file

@ -52,6 +52,11 @@ namespace _dali.widgets
private value : int;
/**
*/
private dom_root : (null | HTMLElement);
/**
*/
public constructor(
@ -80,6 +85,19 @@ namespace _dali.widgets
this.maximum = maximum;
this.value = initial_value;
this.action_change = action_change;
this.dom_root = null;
}
/**
*/
public set_value(
value : int
) : void
{
this.value = value;
const dom_input : HTMLInputElement = (this.dom_root.querySelector(".widget-special_number_input-input") as HTMLInputElement);
dom_input.value = value.toFixed(0);
}
@ -160,6 +178,7 @@ namespace _dali.widgets
}
target_element.appendChild(dom_root);
this.dom_root = dom_root;
}
}

View file

@ -713,7 +713,17 @@ namespace _dali.widgets
const dom_th = document.createElement("th");
dom_th.classList.add("weekview-cell");
dom_th.classList.add("weekview-cell-day");
dom_th.textContent = (this.week + offset).toFixed(0).padStart(2, "0");
// const week : int = (this.week + offset);
const week : int = lib_plankton.call.convey(
this.week,
[
x => lib_plankton.pit.from_ywd({"year": this.year, "week": x, "day": 2}),
x => lib_plankton.pit.shift_week(x, offset),
lib_plankton.pit.to_ywd,
x => x.week
]
)
dom_th.textContent = week.toFixed(0).padStart(2, "0");
dom_tr.appendChild(dom_th);
}
);
@ -878,42 +888,75 @@ namespace _dali.widgets
{
}
);
let input_year : _dali.widgets.class_widget_special_number_input;
let input_week : _dali.widgets.class_widget_special_number_input;
// control:year
{
const widget : lib_plankton.zoo_widget.interface_widget = new _dali.widgets.class_widget_special_number_input(
input_year = new _dali.widgets.class_widget_special_number_input(
{
"label": lib_plankton.translate.get("widget.weekview.controls.year"),
"minimum": 1900,
"maximum": 2500,
"initial_value": this.year,
"action_change": async (value) => {
this.year = value;
"action_change": async (year_raw) => {
// model
const number_of_weeks : int = await _dali.number_of_weeks(year_raw);
if (this.week > number_of_weeks)
{
this.year = year_raw;
this.week = number_of_weeks;
}
else
{
this.year = year_raw;
// this.week = this.week;
}
// view
input_week.set_value(this.week);
await this.update_table();
await this.update_entries();
},
}
);
await widget.load(target_element.querySelector(".weekview-controls"));
await input_year.load(target_element.querySelector(".weekview-controls"));
}
// control:week
{
const widget : lib_plankton.zoo_widget.interface_widget = new _dali.widgets.class_widget_special_number_input(
input_week = new _dali.widgets.class_widget_special_number_input(
{
"label": lib_plankton.translate.get("widget.weekview.controls.week"),
"minimum": 1,
/**
* @todo correct
*/
"maximum": 53,
"initial_value": this.week,
"action_change": async (value) => {
this.week = value;
"action_change": async (week_raw) => {
// model
if (week_raw < 1)
{
this.year = (this.year - 1);
this.week = await _dali.number_of_weeks(this.year);
}
else
{
if (week_raw > await _dali.number_of_weeks(this.year))
{
this.year = (this.year + 1);
this.week = 1;
}
else
{
// this.year = this.year;
this.week = week_raw;
}
}
// view
input_year.set_value(this.year);
input_week.set_value(this.week);
await this.update_table();
await this.update_entries();
},
}
);
await widget.load(target_element.querySelector(".weekview-controls"));
await input_week.load(target_element.querySelector(".weekview-controls"));
}
// control:count
/*