refactor: openmenuoptions function

This commit is contained in:
sethburkart123
2024-06-09 16:33:24 +10:00
parent 5169deafe6
commit 693f63021f
4 changed files with 246 additions and 265 deletions
+55 -79
View File
@@ -62,16 +62,14 @@ async function init() {
enableCurrentTheme() enableCurrentTheme()
try { try {
const items = await browser.storage.local.get() as SettingsState if (settingsState.onoff) {
if (items.onoff) {
const injectedStyle = document.createElement('style') const injectedStyle = document.createElement('style')
injectedStyle.textContent = injectedCSS injectedStyle.textContent = injectedCSS
document.head.appendChild(injectedStyle) document.head.appendChild(injectedStyle)
} }
main(items) main()
} catch (error: any) { } catch (error: any) {
onError(error) onError(error)
} }
@@ -97,10 +95,8 @@ export function enableAnimatedBackground() {
export async function HideMenuItems(): Promise<void> { export async function HideMenuItems(): Promise<void> {
try { try {
const result = await browser.storage.local.get() as SettingsState
let stylesheetInnerText: string = '' let stylesheetInnerText: string = ''
for (const [menuItem, { toggle }] of Object.entries(result.menuitems)) { for (const [menuItem, { toggle }] of Object.entries(settingsState.menuitems)) {
if (!toggle) { if (!toggle) {
stylesheetInnerText += SetDisplayNone(menuItem) stylesheetInnerText += SetDisplayNone(menuItem)
console.log(`[BetterSEQTA+] Hiding ${menuItem} menu item`) console.log(`[BetterSEQTA+] Hiding ${menuItem} menu item`)
@@ -312,14 +308,9 @@ async function finishLoad() {
console.error("Error during loading cleanup:", err); console.error("Error during loading cleanup:", err);
} }
try { if (settingsState.justupdated && !document.getElementById('whatsnewbk')) {
const { justupdated } = await browser.storage.local.get('justupdated');
if (justupdated && !document.getElementById('whatsnewbk')) {
OpenWhatsNewPopup(); OpenWhatsNewPopup();
} }
} catch (error) {
console.error("Error retrieving 'justupdated' from storage:", error);
}
} }
async function DeleteWhatsNew() { async function DeleteWhatsNew() {
@@ -441,8 +432,7 @@ async function updateIframesWithDarkMode(): Promise<void> {
if (node.nodeName === 'IFRAME') { if (node.nodeName === 'IFRAME') {
const iframe = node as HTMLIFrameElement const iframe = node as HTMLIFrameElement
try { try {
const settings = await browser.storage.local.get('DarkMode') as SettingsState applyDarkModeToIframe(iframe, cssLink, settingsState.DarkMode);
applyDarkModeToIframe(iframe, cssLink, settings.DarkMode);
} catch (error) { } catch (error) {
console.error('Error applying dark mode:', error) console.error('Error applying dark mode:', error)
} }
@@ -514,7 +504,7 @@ function SortMessagePageItems(messagesParentElement: any) {
} }
async function LoadPageElements(): Promise<void> { async function LoadPageElements(): Promise<void> {
await AddBetterSEQTAElements(true) await AddBetterSEQTAElements()
const sublink: string | undefined = window.location.href.split('/')[4] const sublink: string | undefined = window.location.href.split('/')[4]
const observer = new MutationObserver(function (mutations_list) { const observer = new MutationObserver(function (mutations_list) {
@@ -597,11 +587,9 @@ async function LoadPageElements(): Promise<void> {
async function handleNewsPage(): Promise<void> { async function handleNewsPage(): Promise<void> {
console.log('[BetterSEQTA+] Started Init') console.log('[BetterSEQTA+] Started Init')
const settings: SettingsState = await browser.storage.local.get() as SettingsState if (settingsState.onoff) {
if (settings.onoff) {
SendNewsPage() SendNewsPage()
const notificationSettings: SettingsState = await browser.storage.local.get() as SettingsState if (settingsState.notificationcollector) {
if (notificationSettings.notificationcollector) {
enableNotificationCollector() enableNotificationCollector()
} }
finishLoad() finishLoad()
@@ -610,8 +598,7 @@ async function LoadPageElements(): Promise<void> {
async function handleDefault(): Promise<void> { async function handleDefault(): Promise<void> {
finishLoad() finishLoad()
const settings: SettingsState = await browser.storage.local.get() as SettingsState if (settingsState.notificationcollector) {
if (settings.notificationcollector) {
enableNotificationCollector() enableNotificationCollector()
} }
} }
@@ -718,10 +705,9 @@ function ChangeMenuItemPositions(storage: any) {
} }
export async function ObserveMenuItemPosition() { export async function ObserveMenuItemPosition() {
const result = browser.storage.local.get() let menuorder = settingsState.menuorder
function open (result: any) { if (!(menuorder && settingsState.onoff)) return;
let menuorder = result.menuorder
if (menuorder && result.onoff) {
const observer = new MutationObserver(function (mutations_list) { const observer = new MutationObserver(function (mutations_list) {
mutations_list.forEach(function (mutation) { mutations_list.forEach(function (mutation) {
mutation.addedNodes.forEach(function (added_node) { mutation.addedNodes.forEach(function (added_node) {
@@ -760,13 +746,10 @@ export async function ObserveMenuItemPosition() {
subtree: true, subtree: true,
childList: true, childList: true,
}) })
}
}
result.then(open, onError)
} }
function main(storedSetting: SettingsState) { function main() {
if (typeof storedSetting.onoff === 'undefined') { if (typeof settingsState.onoff === 'undefined') {
browser.runtime.sendMessage({ type: 'setDefaultStorage' }) browser.runtime.sendMessage({ type: 'setDefaultStorage' })
} }
@@ -774,7 +757,7 @@ function main(storedSetting: SettingsState) {
waitForElm('.code').then(AppendElementsToDisabledPage) waitForElm('.code').then(AppendElementsToDisabledPage)
} }
if (storedSetting.onoff) { if (settingsState.onoff) {
console.log('[BetterSEQTA+] Enabled') console.log('[BetterSEQTA+] Enabled')
if (settingsState.DarkMode) document.documentElement.classList.add('dark') if (settingsState.DarkMode) document.documentElement.classList.add('dark')
@@ -787,7 +770,6 @@ function main(storedSetting: SettingsState) {
loading() loading()
InjectCustomIcons() InjectCustomIcons()
HideMenuItems() HideMenuItems()
tryLoad()
window.addEventListener('load', tryLoad) window.addEventListener('load', tryLoad)
} else { } else {
@@ -813,7 +795,7 @@ function InjectCustomIcons() {
export function AppendElementsToDisabledPage() { export function AppendElementsToDisabledPage() {
console.log("[BetterSEQTA+] Appending elements to disabled page") console.log("[BetterSEQTA+] Appending elements to disabled page")
AddBetterSEQTAElements(false) AddBetterSEQTAElements()
let settingsStyle = document.createElement('style') let settingsStyle = document.createElement('style')
settingsStyle.innerHTML = /* css */` settingsStyle.innerHTML = /* css */`
@@ -910,49 +892,51 @@ export function addExtensionSettings() {
} }
export function OpenMenuOptions() { export function OpenMenuOptions() {
const result = browser.storage.local.get()
function open (result: any) {
var container = document.getElementById('container') var container = document.getElementById('container')
var menu = document.getElementById('menu') var menu = document.getElementById('menu')
if (result.defaultmenuorder.length == '0') { if (settingsState.defaultmenuorder.length == 0) {
let childnodes = menu!.firstChild!.childNodes let childnodes = menu!.firstChild!.childNodes
let newdefaultmenuorder = [] let newdefaultmenuorder = []
for (let i = 0; i < childnodes.length; i++) { for (let i = 0; i < childnodes.length; i++) {
const element = childnodes[i] const element = childnodes[i]
newdefaultmenuorder.push((element as HTMLElement).dataset.key) newdefaultmenuorder.push((element as HTMLElement).dataset.key)
browser.storage.local.set({ defaultmenuorder: newdefaultmenuorder }) browser.storage.local.set({
defaultmenuorder: newdefaultmenuorder
})
} }
} }
let childnodes = menu!.firstChild!.childNodes let childnodes = menu!.firstChild!.childNodes
if (result.defaultmenuorder.length != childnodes.length) { if (settingsState.defaultmenuorder.length != childnodes.length) {
for (let i = 0; i < childnodes.length; i++) { for (let i = 0; i < childnodes.length; i++) {
const element = childnodes[i] const element = childnodes[i]
if (!result.defaultmenuorder.indexOf((element as HTMLElement).dataset.key)) { if (!settingsState.defaultmenuorder.indexOf((element as HTMLElement).dataset.key)) {
let newdefaultmenuorder = result.defaultmenuorder let newdefaultmenuorder = settingsState.defaultmenuorder
newdefaultmenuorder.push((element as HTMLElement).dataset.key) newdefaultmenuorder.push((element as HTMLElement).dataset.key)
browser.storage.local.set({ defaultmenuorder: newdefaultmenuorder }) browser.storage.local.set({
defaultmenuorder: newdefaultmenuorder
})
} }
} }
} }
MenuOptionsOpen = true MenuOptionsOpen = true
let cover = document.createElement('div') var cover = document.createElement('div')
cover.classList.add('notMenuCover') cover.classList.add('notMenuCover')
menu!.style.zIndex = '20' menu!.style.zIndex = '20'
menu!.style.setProperty('--menuHidden', 'flex') menu!.style.setProperty('--menuHidden', 'flex')
container!.append(cover) container!.append(cover)
let menusettings = document.createElement('div') var menusettings = document.createElement('div')
menusettings.classList.add('editmenuoption-container') menusettings.classList.add('editmenuoption-container')
let defaultbutton = document.createElement('div') var defaultbutton = document.createElement('div')
defaultbutton.classList.add('editmenuoption') defaultbutton.classList.add('editmenuoption')
defaultbutton.innerText = 'Restore Default' defaultbutton.innerText = 'Restore Default'
defaultbutton.id = 'restoredefaultoption' defaultbutton.id = 'restoredefaultoption'
let savebutton = document.createElement('div') var savebutton = document.createElement('div')
savebutton.classList.add('editmenuoption') savebutton.classList.add('editmenuoption')
savebutton.innerText = 'Save' savebutton.innerText = 'Save'
savebutton.id = 'restoredefaultoption' savebutton.id = 'restoredefaultoption'
@@ -962,7 +946,7 @@ export function OpenMenuOptions() {
menu!.appendChild(menusettings) menu!.appendChild(menusettings)
let ListItems = menu!.firstChild!.childNodes var ListItems = menu!.firstChild!.childNodes
for (let i = 0; i < ListItems.length; i++) { for (let i = 0; i < ListItems.length; i++) {
const element1 = ListItems[i] const element1 = ListItems[i]
const element = element1 as HTMLElement const element = element1 as HTMLElement
@@ -987,34 +971,31 @@ export function OpenMenuOptions() {
} }
} }
if (Object.keys(result.menuitems).length == 0) { if (Object.keys(settingsState.menuitems).length == 0) {
menubuttons = menu!.firstChild!.childNodes menubuttons = menu!.firstChild!.childNodes
var menuItems = {} let menuItems = {} as any
for (var i = 0; i < menubuttons.length; i++) { for (var i = 0; i < menubuttons.length; i++) {
var id = (menubuttons[i] as HTMLElement).dataset.key var id = (menubuttons[i] as HTMLElement).dataset.key
const element: any = {} const element: any = {}
element.toggle = true; element.toggle = true;
(menuItems[id as keyof typeof menuItems] as any) = element; (menuItems[id as keyof typeof menuItems] as any) = element;
} }
browser.storage.local.set({ menuitems: menuItems }) settingsState.menuitems = menuItems
} }
var menubuttons: any = document.getElementsByClassName('menuitem') var menubuttons: any = document.getElementsByClassName('menuitem')
const result1 = browser.storage.local.get(['menuitems'])
function open (result: any) { let menuItems = settingsState.menuitems as any
var menuItems = result.menuitems
let buttons = document.getElementsByClassName('menuitem') let buttons = document.getElementsByClassName('menuitem')
for (var i = 0; i < buttons.length; i++) { for (let i = 0; i < buttons.length; i++) {
var id = buttons[i].id let id = buttons[i].id as string | undefined
if (menuItems[id]) { if (menuItems[id as keyof typeof menuItems]) {
(buttons[i] as HTMLInputElement).checked = menuItems[id].toggle (buttons[i] as HTMLInputElement).checked = menuItems[id as keyof typeof menuItems].toggle
} } else {
if (!menuItems[id]) {
(buttons[i] as HTMLInputElement).checked = true (buttons[i] as HTMLInputElement).checked = true
} }
(buttons[i] as HTMLInputElement).checked = true
} }
}
result1.then(open, onError)
try { try {
var el = document.querySelector('#menu > ul') var el = document.querySelector('#menu > ul')
@@ -1023,7 +1004,7 @@ export function OpenMenuOptions() {
dataIdAttr: 'data-key', dataIdAttr: 'data-key',
animation: 150, animation: 150,
easing: "cubic-bezier(.5,0,.5,1)", easing: "cubic-bezier(.5,0,.5,1)",
onEnd: function () { onEnd: function() {
saveNewOrder(sortable) saveNewOrder(sortable)
}, },
}); });
@@ -1045,8 +1026,9 @@ export function OpenMenuOptions() {
} }
function StoreMenuSettings() { function StoreMenuSettings() {
let menu = document.getElementById('menu')
const menuItems: any = {} const menuItems: any = {}
const menubuttons = menu!.firstChild!.childNodes let menubuttons = menu!.firstChild!.childNodes
const button = document.getElementsByClassName('menuitem') const button = document.getElementsByClassName('menuitem')
for (let i = 0; i < menubuttons.length; i++) { for (let i = 0; i < menubuttons.length; i++) {
const id = (menubuttons[i] as HTMLElement).dataset.key const id = (menubuttons[i] as HTMLElement).dataset.key
@@ -1055,7 +1037,7 @@ export function OpenMenuOptions() {
menuItems[id as keyof typeof menuItems] = element menuItems[id as keyof typeof menuItems] = element
} }
browser.storage.local.set({ menuitems: menuItems }) settingsState.menuitems = menuItems
} }
for (let i = 0; i < menubuttons.length; i++) { for (let i = 0; i < menubuttons.length; i++) {
@@ -1069,9 +1051,8 @@ export function OpenMenuOptions() {
function closeAll() { function closeAll() {
console.log("Closing!") console.log("Closing!")
ListItems = menu!.firstChild!.childNodes menusettings?.remove()
menusettings.remove() cover?.remove()
cover.remove()
MenuOptionsOpen = false MenuOptionsOpen = false
menu!.style.setProperty('--menuHidden', 'none') menu!.style.setProperty('--menuHidden', 'none')
@@ -1095,17 +1076,16 @@ export function OpenMenuOptions() {
for (let i = 0; i < switches.length; i++) { for (let i = 0; i < switches.length; i++) {
switches[i].remove() switches[i].remove()
} }
} }
cover.addEventListener('click', closeAll) cover?.addEventListener('click', closeAll)
savebutton.addEventListener('click', closeAll) savebutton?.addEventListener('click', closeAll)
defaultbutton.addEventListener('click', function () { defaultbutton?.addEventListener('click', function() {
const result = browser.storage.local.get() const options = settingsState.defaultmenuorder
function open (response: any) { browser.storage.local.set({
const options = response.defaultmenuorder menuorder: options
browser.storage.local.set({ menuorder: options }) })
ChangeMenuItemPositions(options) ChangeMenuItemPositions(options)
for (let i = 0; i < menubuttons.length; i++) { for (let i = 0; i < menubuttons.length; i++) {
@@ -1118,11 +1098,7 @@ export function OpenMenuOptions() {
) )
} }
saveNewOrder(sortable) saveNewOrder(sortable)
}
result.then(open, onError)
}) })
}
result.then(open, onError)
} }
function saveNewOrder(sortable: any) { function saveNewOrder(sortable: any) {
+1
View File
@@ -6,6 +6,7 @@ import { settingsState } from "../utils/listeners/SettingsState";
import { updateAllColors } from "./colors/Manager"; import { updateAllColors } from "./colors/Manager";
export async function AddBetterSEQTAElements() { export async function AddBetterSEQTAElements() {
console.log('AddBetterSEQTAElements');
if (settingsState.onoff) { if (settingsState.onoff) {
initializeSettings(); initializeSettings();
if (settingsState.DarkMode) { if (settingsState.DarkMode) {
+13 -10
View File
@@ -6,19 +6,21 @@ import { settingsState } from "../utils/listeners/SettingsState";
* @param {number} [minDuration=1] - The minimum animation duration in seconds. * @param {number} [minDuration=1] - The minimum animation duration in seconds.
* @param {number} [maxDuration=10] - The maximum animation duration in seconds. * @param {number} [maxDuration=10] - The maximum animation duration in seconds.
*/ */
export function updateBgDurations(minDuration: number = 0.5, maxDuration: number = 10) { export function updateBgDurations() {
// Class names to look for // Class names to look for
const bgClasses = ['bg', 'bg2', 'bg3']; const bgClasses = ['bg', 'bg2', 'bg3'];
let reversedValue: any;
// Reverse the slider direction to align with the animation
reversedValue = 150 - parseInt(settingsState.bksliderinput);
// Range of possible animation durations
const durationRange = maxDuration - minDuration;
// Function to calculate animation duration // Function to calculate animation duration
const calcDuration = (baseValue: number, offset = 0) => minDuration + ((baseValue / 200) + offset) * durationRange; const calcDuration = (
baseValue: number,
offset = 0,
minBase = 50,
maxBase = 150,
) => {
const scaledValue = 2 + ((maxBase - baseValue) / (maxBase - minBase)) ** 4;
console.log(scaledValue);
return scaledValue + offset;
};
// Iterate through each class name to update its animation duration // Iterate through each class name to update its animation duration
bgClasses.forEach((className, index) => { bgClasses.forEach((className, index) => {
@@ -29,7 +31,8 @@ export function updateBgDurations(minDuration: number = 0.5, maxDuration: number
} }
const offset = index * 0.05; const offset = index * 0.05;
const duration = calcDuration(reversedValue, offset); const duration = calcDuration(parseInt(settingsState.bksliderinput), offset);
(elements[0] as HTMLElement).style.animationDuration = `${duration}s`; (elements[0] as HTMLElement).style.animationDuration = `${duration}s`;
(elements[0] as HTMLElement).style.animationDelay = `${offset * 5}s`;
}); });
} }
+1
View File
@@ -32,6 +32,7 @@ export interface SettingsState {
shortcuts: Shortcut[]; shortcuts: Shortcut[];
subjectfilters: Record<string, any>; subjectfilters: Record<string, any>;
transparencyEffects: boolean; transparencyEffects: boolean;
justupdated?: boolean | null;
} }
interface ToggleItem { interface ToggleItem {