diff --git a/source/base.ts b/source/base.ts index dab47b3..e216fbd 100644 --- a/source/base.ts +++ b/source/base.ts @@ -145,4 +145,37 @@ namespace _dali } } + + /** + */ + export var general_cache : lib_plankton.cache.type_subject = lib_plankton.cache.make( + /* + lib_plankton.storage.memory.implementation_chest( + { + } + ) + */ + ); + + + /** + */ + export async function number_of_weeks( + year : int + ) : Promise + { + const value_raw : unknown = await lib_plankton.cache.get( + _dali.general_cache, + lib_plankton.string.coin( + "number_of_weeks_{{year}}", + { + "year": year.toFixed(0), + } + ), + null, + () => Promise.resolve(lib_plankton.pit.number_of_weeks(year)) + ); + return (value_raw as int); + } + } diff --git a/source/main.ts b/source/main.ts index af55d02..3de64e9 100644 --- a/source/main.ts +++ b/source/main.ts @@ -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( ); diff --git a/source/widgets/special_number_input/logic.ts b/source/widgets/special_number_input/logic.ts index 738fd99..66b19ee 100644 --- a/source/widgets/special_number_input/logic.ts +++ b/source/widgets/special_number_input/logic.ts @@ -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; } } diff --git a/source/widgets/weekview/logic.ts b/source/widgets/weekview/logic.ts index d506cc7..f9660cf 100644 --- a/source/widgets/weekview/logic.ts +++ b/source/widgets/weekview/logic.ts @@ -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 /*