diff --git a/source/data/localization/deu.loc.json b/source/data/localization/deu.loc.json index dfc7be8..957d735 100644 --- a/source/data/localization/deu.loc.json +++ b/source/data/localization/deu.loc.json @@ -50,6 +50,7 @@ "widget.weekview.controls.week": "Woche", "widget.weekview.controls.count": "Anzahl", "widget.weekview.controls.apply": "Laden", + "widget.calendar_edit.actions.add": "anlegen", "widget.calendar_edit.actions.change": "ändern", "widget.calendar_edit.actions.remove": "löschen", "widget.event_edit.actions.add": "anlegen", diff --git a/source/data/localization/eng.loc.json b/source/data/localization/eng.loc.json index 4daaa92..ab7151c 100644 --- a/source/data/localization/eng.loc.json +++ b/source/data/localization/eng.loc.json @@ -50,6 +50,7 @@ "widget.weekview.controls.week": "Week", "widget.weekview.controls.count": "Count", "widget.weekview.controls.apply": "Load", + "widget.calendar_edit.actions.add": "add", "widget.calendar_edit.actions.change": "change", "widget.calendar_edit.actions.remove": "delete", "widget.event_edit.actions.add": "add", diff --git a/source/main.ts b/source/main.ts index 6998722..df3090d 100644 --- a/source/main.ts +++ b/source/main.ts @@ -82,23 +82,11 @@ namespace _dali "label": lib_plankton.translate.get("page.overview.title"), "groups": ["logged_out", "logged_in"], }, - { - "location": {"name": "calendar_add", "parameters": {}}, - "label": lib_plankton.translate.get("page.calendar_add.title"), - "groups": ["logged_in"], - }, { "location": {"name": "caldav", "parameters": {}}, "label": lib_plankton.translate.get("page.caldav.title"), "groups": ["logged_in"], }, - /* - { - "location": {"name": "event_add", "parameters": {}}, - "label": lib_plankton.translate.get("page.event_add.title"), - "groups": ["logged_in"], - } - */ { "location": {"name": "logout", "parameters": {}}, "label": lib_plankton.translate.get("page.logout.title"), diff --git a/source/pages/calendar_add/logic.ts b/source/pages/calendar_add/logic.ts deleted file mode 100644 index 7438bb4..0000000 --- a/source/pages/calendar_add/logic.ts +++ /dev/null @@ -1,228 +0,0 @@ -namespace _dali.pages -{ - - /** - */ - lib_plankton.zoo_page.register( - "calendar_add", - async (parameters, target_element) => { - target_element.innerHTML = ""; - target_element.innerHTML = await _dali.helpers.template_coin( - "calendar_add", - "default", - { - "label": lib_plankton.translate.get("page.calendar_add.title") - } - ); - const form : lib_plankton.zoo_form.class_form< - { - name : string; - access : { - public : boolean; - default_level : _dali.type.enum_access_level; - attributed : lib_plankton.map.type_map< - _dali.type.user_id, - _dali.type.enum_access_level - >; - }; - resource_kind : string; - hue : (null | float); - }, - { - name : string; - access : { - public : boolean; - default_level : _dali.type.enum_access_level; - attributed : lib_plankton.map.type_map< - _dali.type.user_id, - _dali.type.enum_access_level - >; - }; - resource_kind : string; - hue : (null | float); - } - > = new lib_plankton.zoo_form.class_form< - { - name : string; - access : { - public : boolean; - default_level : _dali.type.enum_access_level; - attributed : lib_plankton.map.type_map< - _dali.type.user_id, - _dali.type.enum_access_level - >; - }; - resource_kind : string; - hue : (null | float); - }, - { - name : string; - access : { - public : boolean; - default_level : _dali.type.enum_access_level; - attributed : lib_plankton.map.type_map< - _dali.type.user_id, - _dali.type.enum_access_level - >; - }; - resource_kind : string; - hue : (null | float); - } - >( - (value) => value, - (raw) => raw, - new lib_plankton.zoo_input.class_input_group( - [ - { - "name": "name", - "input": new lib_plankton.zoo_input.class_input_text(), - "label": lib_plankton.translate.get("calendar.name") - }, - { - "name": "hue", - "input": new lib_plankton.zoo_input.class_input_hue( - ), - "label": lib_plankton.translate.get("calendar.hue"), - }, - { - "name": "access", - "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", - "input": _dali.helpers.input_access_level(), - "label": lib_plankton.translate.get("calendar.access.default_level"), - }, - { - "name": "attributed", - "input": await _dali.helpers.input_attributed_access(), - "label": lib_plankton.translate.get("calendar.access.attributed"), - }, - ] - ), - "label": lib_plankton.translate.get("calendar.access.access"), - }, - { - "name": "resource_kind", - "input": new lib_plankton.zoo_input.class_input_selection( - [ - { - "value": "local", - "label": lib_plankton.translate.get("resource.kinds.local.title") - }, - { - "value": "caldav", - "label": lib_plankton.translate.get("resource.kinds.caldav.title") - }, - ] - ), - "label": lib_plankton.translate.get("resource.kind") - }, - ] - ), - [ - { - "label": lib_plankton.translate.get("page.calendar_add.actions.do"), - "procedure": async (get_value, get_representation) => { - const value : any = await get_value(); - const calendar_object : _dali.type.calendar_object = { - "name": value.name, - "access": { - "public": value.access.public, - "default_level": value.access.default_level, - "attributed": value.access.attributed, - }, - "resource": (() => { - switch (value.resource_kind) { - case "local": - { - return { - "kind": "local", - "data": { - "events": [], - } - }; - break; - } - case "caldav": - { - return { - "kind": "caldav", - "data": { - "url": "", // TODO - "read_only": true, // TODO - } - }; - break; - } - default: - { - throw (new Error("invalid resource kind: " + value.resource_kind)); - break; - } - } - }) (), - "hue": value.hue, - }; - try - { - await _dali.backend.calendar_add( - calendar_object - ); - lib_plankton.zoo_page.set( - { - "name": "overview", - "parameters": {} - } - ); - } - catch (error) - { - // do nothing - /* - lib_plankton.zoo_page.set( - { - "name": "event_add", - "parameters": { - } - } - ); - */ - } - } - }, - ] - ); - await form.setup(document.querySelector("#calendar_add_form")); - await form.input_write( - { - "name": "", - "access": { - "public": false, - "default_level": _dali.type.enum_access_level.view, - "attributed": lib_plankton.map.hashmap.implementation_map< - _dali.type.user_id, - _dali.type.enum_access_level - >( - lib_plankton.map.hashmap.make< - _dali.type.user_id, - _dali.type.enum_access_level - >( - user_id => user_id.toFixed(0), - ) - ), - }, - "resource_kind": "local", - "hue": lib_plankton.random.generate_unit(), - } - ); - return Promise.resolve(undefined); - } - ); - -} diff --git a/source/pages/calendar_add/templates/default.html.tpl b/source/pages/calendar_add/templates/default.html.tpl deleted file mode 100644 index 3b573e7..0000000 --- a/source/pages/calendar_add/templates/default.html.tpl +++ /dev/null @@ -1,5 +0,0 @@ -
-

{{label}}

-
-
-
diff --git a/source/pages/calendar_edit/logic.ts b/source/pages/calendar_edit/logic.ts deleted file mode 100644 index 8221f13..0000000 --- a/source/pages/calendar_edit/logic.ts +++ /dev/null @@ -1,68 +0,0 @@ -namespace _dali.pages -{ - - /** - */ - lib_plankton.zoo_page.register( - "calendar_edit", - async (parameters, target_element) => { - const read_only : boolean = ((parameters["read_only"] ?? "yes") === "yes"); - const calendar_id : int = parseInt(parameters["calendar_id"]); - target_element.innerHTML = ""; - target_element.innerHTML = await _dali.helpers.template_coin( - "calendar_edit", - "default", - { - "label": lib_plankton.translate.get("page.calendar_edit.title.regular") - } - ); - const calendar_object : _dali.type.calendar_object = await _dali.backend.calendar_get( - calendar_id - ); - const widget = new _dali.widgets.calendar_edit.class_widget_calendar_edit( - { - "read_only": read_only, - "action_change": (data) => { - _dali.backend.calendar_change( - calendar_id, - data - ) - .then( - () => { - lib_plankton.zoo_page.set( - { - "name": "overview", - "parameters": {} - } - ); - } - ); - }, - "action_remove": (data) => { - _dali.backend.calendar_remove( - calendar_id - ) - .then( - () => { - lib_plankton.zoo_page.set( - { - "name": "overview", - "parameters": {} - } - ); - } - ); - }, - "initial_value": { - "name": calendar_object.name, - "hue": calendar_object.hue, - "access": calendar_object.access, - }, - } - ); - await widget.load(document.querySelector("#calendar_edit_form")); - return Promise.resolve(undefined); - } - ); - -} diff --git a/source/pages/calendar_edit/templates/default.html.tpl b/source/pages/calendar_edit/templates/default.html.tpl deleted file mode 100644 index 62d2f1a..0000000 --- a/source/pages/calendar_edit/templates/default.html.tpl +++ /dev/null @@ -1,5 +0,0 @@ -
-

{{label}}

-
-
-
diff --git a/source/pages/overview/logic.ts b/source/pages/overview/logic.ts index 7a6aa6c..d2f2b15 100644 --- a/source/pages/overview/logic.ts +++ b/source/pages/overview/logic.ts @@ -83,6 +83,51 @@ namespace _dali.pages.overview widget_sources = new _dali.widgets.sources.class_widget_sources( _dali.backend.calendar_list, { + "action_create": () => { + (async () => { + const widget = new _dali.widgets.calendar_edit.class_widget_calendar_edit( + { + "read_only": false, + "action_cancel": () => { + _dali.overlay.toggle({"mode": false}); + }, + "action_add": (data) => { + _dali.backend.calendar_add( + { + "name": data.name, + "hue": data.hue, + "access": data.access, + "resource": { + "kind": "local", + "data": { + "events": [], + } + } + } + ) + .then( + () => { + update(); + _dali.overlay.toggle({"mode": false}); + } + ) + .catch( + (reason) => { + lib_plankton.log.warning( + "dali.overview.calendar_add_error", + {"details": String(reason)} + ); + } + ); + }, + "initial_value": null, + } + ); + _dali.overlay.clear(); + _dali.overlay.toggle({"mode": true}); + await widget.load(_dali.overlay.get_content_element()); + }) (); + }, "action_open": (entry) => { let read_only : boolean; switch (entry.access_level) @@ -154,9 +199,6 @@ namespace _dali.pages.overview widget_weekview.toggle_visibility(entry.id); widget_listview.toggle_visibility(entry.id); }, - "action_create": () => { - console.warn("not implemented: calendar_add widget"); - }, } ); await widget_sources.load(target_element.querySelector("#overview-pane-left")); diff --git a/source/widgets/calendar_edit/logic.ts b/source/widgets/calendar_edit/logic.ts index ac45f84..f4327eb 100644 --- a/source/widgets/calendar_edit/logic.ts +++ b/source/widgets/calendar_edit/logic.ts @@ -33,6 +33,11 @@ namespace _dali.widgets.calendar_edit private action_cancel ?: (null | (() => void)); + /** + */ + private action_add ?: (null | ((value : type_value) => void)); + + /** */ private action_change ?: (null | ((value : type_value) => void)); @@ -54,6 +59,7 @@ namespace _dali.widgets.calendar_edit { "read_only": read_only = false, "action_cancel": action_cancel = null, + "action_add": action_add = null, "action_change": action_change = null, "action_remove": action_remove = null, "initial_value": initial_value = null, @@ -62,6 +68,7 @@ namespace _dali.widgets.calendar_edit { read_only ?: boolean; action_cancel ?: (null | (() => void)); + action_add ?: (null | ((value : type_value) => void)) action_change ?: (null | ((value : type_value) => void)); action_remove ?: (null | ((value : type_value) => void)); initial_value ?: (null | type_value); @@ -73,6 +80,7 @@ namespace _dali.widgets.calendar_edit { this.read_only = read_only; this.action_cancel = action_cancel; + this.action_add = action_add; this.action_change = action_change; this.action_remove = action_remove; this.initial_value = initial_value; @@ -150,6 +158,22 @@ namespace _dali.widgets.calendar_edit : [] ) + // add + .concat( + ((! this.read_only) && (! (this.action_add === null))) + ? + [ + { + "label": lib_plankton.translate.get("widget.calendar_edit.actions.add"), + "procedure": async (get_value, get_representation) => { + const value : type_value = await get_value(); + this.action_add(value); + } + }, + ] + : + [] + ) // change .concat( ((! this.read_only) && (! (this.action_change === null))) diff --git a/tools/makefile b/tools/makefile index 9788fe7..2ca4fa3 100644 --- a/tools/makefile +++ b/tools/makefile @@ -39,8 +39,6 @@ templates: \ templates-widgets-calendar_edit \ templates-widgets-event_edit \ templates-pages-caldav \ - templates-pages-calendar_add \ - templates-pages-calendar_edit \ templates-pages-overview \ templates-pages-login @@ -93,20 +91,6 @@ templates-pages-caldav: \ @ ${cmd_mkdir} ${dir_build}/templates/caldav @ ${cmd_cp} -r -u -v ${dir_source}/pages/caldav/templates/* ${dir_build}/templates/caldav/ -.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-overview templates-pages-overview: \ $(wildcard ${dir_source}/pages/overview/templates/*) @@ -150,8 +134,6 @@ ${dir_temp}/logic-unlinked.js: \ ${dir_source}/pages/logout/logic.ts \ ${dir_source}/pages/caldav/logic.ts \ ${dir_source}/pages/oidc_finish/logic.ts \ - ${dir_source}/pages/calendar_add/logic.ts \ - ${dir_source}/pages/calendar_edit/logic.ts \ ${dir_source}/pages/overview/logic.ts \ ${dir_source}/main.ts @ ${cmd_log} "logic | compile …"