aboutsummaryrefslogtreecommitdiff
path: root/html/import_frame.js
diff options
context:
space:
mode:
Diffstat (limited to 'html/import_frame.js')
-rw-r--r--html/import_frame.js185
1 files changed, 0 insertions, 185 deletions
diff --git a/html/import_frame.js b/html/import_frame.js
deleted file mode 100644
index 659d420..0000000
--- a/html/import_frame.js
+++ /dev/null
@@ -1,185 +0,0 @@
-/**
- * This file is part of Haketilo.
- *
- * Function: Logic for the settings import frame.
- *
- * Copyright (C) 2021 Wojtek Kosior
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * As additional permission under GNU GPL version 3 section 7, you
- * may distribute forms of that code without the copy of the GNU
- * GPL normally required by section 4, provided you include this
- * license notice and, in case of non-source distribution, a URL
- * through which recipients can access the Corresponding Source.
- * If you modify file(s) with this exception, you may extend this
- * exception to your version of the file(s), but you are not
- * obligated to do so. If you do not wish to do so, delete this
- * exception statement from your version.
- *
- * As a special exception to the GPL, any HTML file which merely
- * makes function calls to this code, and for that purpose
- * includes it by reference shall be deemed a separate work for
- * copyright law purposes. If you modify this code, you may extend
- * this exception to your version of the code, but you are not
- * obligated to do so. If you do not wish to do so, delete this
- * exception statement from your version.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <https://www.gnu.org/licenses/>.
- *
- * I, Wojtek Kosior, thereby promise not to sue for violation of this file's
- * license. Although I request that you do not make use of this code in a
- * proprietary program, I am not going to enforce this in court.
- */
-
-#FROM common/storage_client.js IMPORT get_remote_storage
-#FROM html/DOM_helpers.js IMPORT by_id, clone_template
-#FROM common/misc.js IMPORT nice_name
-#FROM common/once.js IMPORT make_once
-
-let storage;
-
-let import_list = by_id("import_list");
-let import_chbxs_colliding = undefined;
-let entry_objects = undefined;
-let settings_import_map = undefined;
-
-function add_import_entry(prefix, name)
-{
- const cloned_template = clone_template("import_entry");
- Object.assign(cloned_template, {prefix, name});
-
- cloned_template.name_span.textContent = nice_name(prefix, name);
-
- if (storage.get(prefix, name) !== undefined) {
- import_chbxs_colliding.push(cloned_template.chbx);
- cloned_template.warning.textContent = "!";
- }
-
- import_list.appendChild(cloned_template.entry);
-
- return cloned_template;
-}
-
-function check_all_imports()
-{
- for (const entry_object of entry_objects)
- entry_object.chbx.checked = true;
-}
-
-function uncheck_all_imports()
-{
- for (const entry_object of entry_objects)
- entry_object.chbx.checked = false;
-}
-
-function uncheck_colliding_imports()
-{
- for (let chbx of import_chbxs_colliding)
- chbx.checked = false;
-}
-
-function commit_import()
-{
- for (const entry_object of entry_objects) {
- if (!entry_object.chbx.checked)
- continue;
-
- const key = entry_object.prefix + entry_object.name;
- const value = settings_import_map.get(key);
- storage.set(entry_object.prefix, entry_object.name, value);
- }
-
- deactivate();
-}
-
-const import_loading_radio = by_id("import_loading_radio");
-
-function show_loading()
-{
- import_loading_radio.checked = true;
-}
-
-const import_failed_radio = by_id("import_failed_radio");
-const import_errormsg = by_id("import_errormsg");
-const import_errordetail_chbx = by_id("import_errordetail_chbx");
-const import_errordetail = by_id("import_errordetail");
-
-function show_error(errormsg, errordetail)
-{
- import_failed_radio.checked = true;
- import_errormsg.textContent = errormsg;
- import_errordetail_chbx.checked = errordetail;
- import_errordetail.textContent = errordetail;
-}
-
-const import_selection_radio = by_id("import_selection_radio");
-const existing_settings_note = by_id("existing_settings_note");
-
-function show_selection(settings)
-{
- import_selection_radio.checked = true;
-
- let old_children = import_list.children;
- while (old_children[0] !== undefined)
- import_list.removeChild(old_children[0]);
-
- import_chbxs_colliding = [];
- entry_objects = [];
- settings_import_map = new Map();
-
- for (let setting of settings) {
- let [key, value] = Object.entries(setting)[0];
- let prefix = key[0];
- let name = key.substring(1);
- entry_objects.push(add_import_entry(prefix, name));
- settings_import_map.set(key, value);
- }
-
- const op = import_chbxs_colliding.length > 0 ? "remove" : "add";
- existing_settings_note.classList[op]("hide");
-}
-
-function deactivate()
-{
- /* Let GC free some memory */
- import_chbxs_colliding = undefined;
- entry_objects = undefined;
- settings_import_map = undefined;
-
- if (exports.onclose)
- exports.onclose();
-}
-
-const wrapper = by_id("import_table_wrapper");
-const style_table = (...cls) => cls.forEach(c => wrapper.classList.add(c));
-
-const exports =
- {show_loading, show_error, show_selection, deactivate, style_table};
-
-async function init()
-{
- storage = await get_remote_storage();
-
- by_id("commit_import_but").addEventListener("click", commit_import);
- by_id("check_all_import_but").addEventListener("click", check_all_imports);
- by_id("uncheck_all_import_but")
- .addEventListener("click", uncheck_all_imports);
- by_id("uncheck_colliding_import_but")
- .addEventListener("click", uncheck_colliding_imports);
- by_id("cancel_import_but").addEventListener("click", deactivate);
- by_id("import_failok_but").addEventListener("click", deactivate);
-
- return exports;
-}
-
-#EXPORT make_once(init) AS get_import_frame