update window management
This commit is contained in:
parent
504d40ab03
commit
c784faecf3
1 changed files with 153 additions and 0 deletions
|
@ -45,7 +45,160 @@ class windowman {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function storage() {
|
||||||
|
(async () => {
|
||||||
|
// Import the module.
|
||||||
|
const secretariat = await import(chrome.runtime.getURL("scripts/secretariat.js"));
|
||||||
|
|
||||||
|
let input_elements = document.querySelectorAll("[data-store]");
|
||||||
|
|
||||||
|
input_elements.forEach((input_element) => {
|
||||||
|
// Gather data about the element.
|
||||||
|
// Get the corresponding storage data.
|
||||||
|
let data = {};
|
||||||
|
data[`source`] = input_element.getAttribute(`data-store`);
|
||||||
|
data[`value`] = secretariat.read(data[`source`], -1);
|
||||||
|
|
||||||
|
data[`value`].then((value) => {
|
||||||
|
switch (input_element.getAttribute(`type`).toLowerCase()) {
|
||||||
|
case `checkbox`:
|
||||||
|
input_element.checked = value;
|
||||||
|
break;
|
||||||
|
case `progress`:
|
||||||
|
case `range`:
|
||||||
|
// Ensure that it is a positive floating-point number.
|
||||||
|
value = (!value) ? 0 : Math.abs(parseFloat(value));
|
||||||
|
if (value > 100) {value = value / 100};
|
||||||
|
|
||||||
|
// Set the attribute of the progress bar.
|
||||||
|
input_element.setAttribute(`value`, value);
|
||||||
|
input_element.setAttribute(`max`, 1);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
input_element.value = value;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
}
|
||||||
|
|
||||||
text();
|
text();
|
||||||
|
storage();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Add click events. */
|
||||||
|
static events() {
|
||||||
|
|
||||||
|
/* Add events related to storage. */
|
||||||
|
function storage() {
|
||||||
|
(async () => {
|
||||||
|
// Import the module.
|
||||||
|
const secretariat = await import(chrome.runtime.getURL("scripts/secretariat.js"));
|
||||||
|
|
||||||
|
let input_elements = document.querySelectorAll("[data-store]");
|
||||||
|
|
||||||
|
input_elements.forEach((input_element) => {
|
||||||
|
// Gather data about the element.
|
||||||
|
// Get the corresponding storage data.
|
||||||
|
|
||||||
|
let element = {};
|
||||||
|
element[`type`] = input_element.getAttribute(`type`).toLowerCase();
|
||||||
|
element[`event`] = function() {};
|
||||||
|
|
||||||
|
switch (element[`type`]) {
|
||||||
|
case `checkbox`:
|
||||||
|
element[`event`] = function() {
|
||||||
|
let UI_item = {};
|
||||||
|
UI_item[`source`] = this.getAttribute(`data-store`);
|
||||||
|
UI_item[`value`] = this.checked;
|
||||||
|
secretariat.write(UI_item[`source`], UI_item[`value`]);
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
case `range`:
|
||||||
|
/*// Ensure that it is a positive floating-point number.
|
||||||
|
value = (!value) ? 0 : Math.abs(parseFloat(value));
|
||||||
|
if (value > 100) {value = value / 100};
|
||||||
|
|
||||||
|
// Set the attribute of the progress bar.
|
||||||
|
input_element.setAttribute(`value`, value);
|
||||||
|
input_element.setAttribute(`max`, 1);*/
|
||||||
|
default:
|
||||||
|
element[`event`] = function() {
|
||||||
|
secretariat.write(data[`source`][`root`], data[`source`][`target`], this.value);
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
input_element.addEventListener('change', element[`event`]);
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Make it feel more like a native window. */
|
||||||
|
function functionality() {
|
||||||
|
/* Adjust the interface based on events. */
|
||||||
|
function changeUI() {
|
||||||
|
function tabs() {
|
||||||
|
let menus = (document.querySelectorAll("menu[role=tablist]"))
|
||||||
|
|
||||||
|
if (menus) {
|
||||||
|
menus.forEach((menu) => {
|
||||||
|
let buttons = menu.querySelectorAll("button, a");
|
||||||
|
|
||||||
|
if (buttons) {
|
||||||
|
buttons.forEach((button) => {
|
||||||
|
let event = function() {
|
||||||
|
// Prevent selection.
|
||||||
|
let MENU = this.parentElement;
|
||||||
|
let BUTTONS = MENU.querySelectorAll("button, a");
|
||||||
|
|
||||||
|
BUTTONS.forEach((BUTTON) => {
|
||||||
|
BUTTON.setAttribute(`aria-selected`, String(BUTTON.getAttribute(`for`) == this.getAttribute(`for`)));
|
||||||
|
});
|
||||||
|
|
||||||
|
let CONTAINER = document.getElementById(MENU.getAttribute(`for`));
|
||||||
|
let SECTIONS = CONTAINER.querySelectorAll(`#${CONTAINER.id} > section`);
|
||||||
|
|
||||||
|
SECTIONS.forEach((SECTION) => {
|
||||||
|
// SECTION.setAttribute(`hidden`, true);
|
||||||
|
|
||||||
|
if (!(this.getAttribute(`for`)).includes(SECTION.id)) {
|
||||||
|
SECTION.setAttribute(`hidden`, ((this.getAttribute(`for`)).includes(SECTION.id)));
|
||||||
|
} else {
|
||||||
|
SECTION.removeAttribute(`hidden`);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Save.
|
||||||
|
(async () => {
|
||||||
|
const secretariat = await import(chrome.runtime.getURL("scripts/secretariat.js"));
|
||||||
|
|
||||||
|
// Write the data.
|
||||||
|
secretariat.write([`view`, window.location.href], this.getAttribute(`for`), 1);
|
||||||
|
})();
|
||||||
|
};
|
||||||
|
|
||||||
|
button.addEventListener('click', event);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tabs();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
document.addEventListener('contextmenu', event => event.preventDefault());
|
||||||
|
|
||||||
|
changeUI();
|
||||||
|
}
|
||||||
|
|
||||||
|
storage();
|
||||||
|
functionality();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue