Revision 4b59dced
Added by koszko about 2 years ago
| html/import_frame.js | ||
|---|---|---|
| 9 | 9 |
* IMPORTS_START |
| 10 | 10 |
* IMPORT get_remote_storage |
| 11 | 11 |
* IMPORT by_id |
| 12 |
* IMPORT get_template
|
|
| 12 |
* IMPORT clone_template
|
|
| 13 | 13 |
* IMPORT nice_name |
| 14 | 14 |
* IMPORT make_once |
| 15 | 15 |
* IMPORTS_END |
| ... | ... | |
| 17 | 17 |
|
| 18 | 18 |
let storage; |
| 19 | 19 |
|
| 20 |
const import_li_template = get_template("import_li");
|
|
| 21 |
import_li_template.removeAttribute("id");
|
|
| 22 |
|
|
| 23 |
function import_li_id(prefix, item) |
|
| 24 |
{
|
|
| 25 |
return `ili_${prefix}_${item}`;
|
|
| 26 |
} |
|
| 27 |
|
|
| 28 |
let import_ul = by_id("import_ul");
|
|
| 20 |
let import_list = by_id("import_list");
|
|
| 29 | 21 |
let import_chbxs_colliding = undefined; |
| 22 |
let entry_objects = undefined; |
|
| 30 | 23 |
let settings_import_map = undefined; |
| 31 | 24 |
|
| 32 |
function add_import_li(prefix, name)
|
|
| 25 |
function add_import_entry(prefix, name)
|
|
| 33 | 26 |
{
|
| 34 |
let li = import_li_template.cloneNode(true); |
|
| 35 |
let name_span = li.firstElementChild; |
|
| 36 |
let chbx = name_span.nextElementSibling; |
|
| 37 |
let warning_span = chbx.nextElementSibling; |
|
| 27 |
const cloned_template = clone_template("import_entry");
|
|
| 28 |
Object.assign(cloned_template, {prefix, name});
|
|
| 38 | 29 |
|
| 39 |
li.setAttribute("data-prefix", prefix);
|
|
| 40 |
li.setAttribute("data-name", name);
|
|
| 41 |
li.id = import_li_id(prefix, name); |
|
| 42 |
name_span.textContent = nice_name(prefix, name); |
|
| 30 |
cloned_template.name_span.textContent = nice_name(prefix, name); |
|
| 43 | 31 |
|
| 44 | 32 |
if (storage.get(prefix, name) !== undefined) {
|
| 45 |
import_chbxs_colliding.push(chbx); |
|
| 46 |
warning_span.textContent = "(will overwrite existing setting!)";
|
|
| 33 |
import_chbxs_colliding.push(cloned_template.chbx);
|
|
| 34 |
cloned_template.warning.textContent = "!";
|
|
| 47 | 35 |
} |
| 48 | 36 |
|
| 49 |
import_ul.appendChild(li); |
|
| 37 |
import_list.appendChild(cloned_template.entry); |
|
| 38 |
|
|
| 39 |
return cloned_template; |
|
| 50 | 40 |
} |
| 51 | 41 |
|
| 52 | 42 |
function check_all_imports() |
| 53 | 43 |
{
|
| 54 |
for (let li of import_ul.children)
|
|
| 55 |
li.firstElementChild.nextElementSibling.checked = true;
|
|
| 44 |
for (const entry_object of entry_objects)
|
|
| 45 |
entry_object.chbx.checked = true;
|
|
| 56 | 46 |
} |
| 57 | 47 |
|
| 58 | 48 |
function uncheck_all_imports() |
| 59 | 49 |
{
|
| 60 |
for (let li of import_ul.children)
|
|
| 61 |
li.firstElementChild.nextElementSibling.checked = false;
|
|
| 50 |
for (const entry_object of entry_objects)
|
|
| 51 |
entry_object.chbx.checked = false;
|
|
| 62 | 52 |
} |
| 63 | 53 |
|
| 64 | 54 |
function uncheck_colliding_imports() |
| ... | ... | |
| 69 | 59 |
|
| 70 | 60 |
function commit_import() |
| 71 | 61 |
{
|
| 72 |
for (let li of import_ul.children) {
|
|
| 73 |
let chbx = li.firstElementChild.nextElementSibling; |
|
| 74 |
|
|
| 75 |
if (!chbx.checked) |
|
| 62 |
for (const entry_object of entry_objects) {
|
|
| 63 |
if (!entry_object.chbx.checked) |
|
| 76 | 64 |
continue; |
| 77 | 65 |
|
| 78 |
let prefix = li.getAttribute("data-prefix");
|
|
| 79 |
let name = li.getAttribute("data-name");
|
|
| 80 |
let key = prefix + name; |
|
| 81 |
let value = settings_import_map.get(key); |
|
| 82 |
storage.set(prefix, name, value); |
|
| 66 |
const key = entry_object.prefix + entry_object.name; |
|
| 67 |
const value = settings_import_map.get(key); |
|
| 68 |
storage.set(entry_object.prefix, entry_object.name, value); |
|
| 83 | 69 |
} |
| 84 | 70 |
|
| 85 | 71 |
deactivate(); |
| ... | ... | |
| 106 | 92 |
} |
| 107 | 93 |
|
| 108 | 94 |
const import_selection_radio = by_id("import_selection_radio");
|
| 95 |
const existing_settings_note = by_id("existing_settings_note");
|
|
| 109 | 96 |
|
| 110 | 97 |
function show_selection(settings) |
| 111 | 98 |
{
|
| 112 | 99 |
import_selection_radio.checked = true; |
| 113 | 100 |
|
| 114 |
let old_children = import_ul.children;
|
|
| 101 |
let old_children = import_list.children;
|
|
| 115 | 102 |
while (old_children[0] !== undefined) |
| 116 |
import_ul.removeChild(old_children[0]);
|
|
| 103 |
import_list.removeChild(old_children[0]);
|
|
| 117 | 104 |
|
| 118 | 105 |
import_chbxs_colliding = []; |
| 106 |
entry_objects = []; |
|
| 119 | 107 |
settings_import_map = new Map(); |
| 120 | 108 |
|
| 121 | 109 |
for (let setting of settings) {
|
| 122 | 110 |
let [key, value] = Object.entries(setting)[0]; |
| 123 | 111 |
let prefix = key[0]; |
| 124 | 112 |
let name = key.substring(1); |
| 125 |
add_import_li(prefix, name);
|
|
| 113 |
entry_objects.push(add_import_entry(prefix, name));
|
|
| 126 | 114 |
settings_import_map.set(key, value); |
| 127 | 115 |
} |
| 116 |
|
|
| 117 |
const op = import_chbxs_colliding.length > 0 ? "remove" : "add"; |
|
| 118 |
existing_settings_note.classList[op]("hide");
|
|
| 128 | 119 |
} |
| 129 | 120 |
|
| 130 | 121 |
function deactivate() |
| 131 | 122 |
{
|
| 132 | 123 |
/* Let GC free some memory */ |
| 133 | 124 |
import_chbxs_colliding = undefined; |
| 125 |
entry_objects = undefined; |
|
| 134 | 126 |
settings_import_map = undefined; |
| 135 | 127 |
|
| 136 | 128 |
if (exports.onclose) |
| 137 | 129 |
exports.onclose(); |
| 138 | 130 |
} |
| 139 | 131 |
|
| 140 |
const exports = {show_loading, show_error, show_selection, deactivate};
|
|
| 132 |
const wrapper = by_id("import_table_wrapper");
|
|
| 133 |
const style_table = (...cls) => cls.forEach(c => wrapper.classList.add(c)); |
|
| 134 |
|
|
| 135 |
const exports = |
|
| 136 |
{show_loading, show_error, show_selection, deactivate, style_table};
|
|
| 141 | 137 |
|
| 142 | 138 |
async function init() |
| 143 | 139 |
{
|
Also available in: Unified diff
add styling to settings install(import) dialog