|
|
class TabsExtensionConfigs { |
|
|
#settings = {}; |
|
|
|
|
|
get container() { return this.#settings.container; } |
|
|
get forge() { return this.#settings.forge; } |
|
|
get open() { return this.#settings.open; } |
|
|
get sort() { return this.#settings.sort; } |
|
|
get toggle() { return this.#settings.toggle; } |
|
|
get scripts_toggle() { return this.#settings.scripts_toggle; } |
|
|
get rmb() { return this.#settings.rmb; } |
|
|
get version() { return this.#settings.version; } |
|
|
|
|
|
constructor() { |
|
|
const settingsIDs = [ |
|
|
['container', 'checkbox'], |
|
|
['forge', 'checkbox'], |
|
|
['open', 'checkbox'], |
|
|
['sort', 'checkbox'], |
|
|
['toggle', 'checkbox'], |
|
|
['scripts_toggle', 'checkbox'], |
|
|
['rmb', 'checkbox'], |
|
|
['version', 'checkbox'] |
|
|
]; |
|
|
|
|
|
for (const [key, type] of settingsIDs) { |
|
|
const wrapper = document.getElementById(`setting_tabs_ex_${key}`); |
|
|
const element = wrapper?.querySelector(`input[type=${type}]`); |
|
|
this.#settings[key] = (type === 'checkbox') ? !!element?.checked : (element?.value ?? ""); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
#validateMode(name, mode) { |
|
|
const availableModes = (name === "tabs") |
|
|
? ["left", "right"] |
|
|
: ["left", "right", "above", "below", "hide", "keep"]; |
|
|
return availableModes.includes(mode) ? mode : availableModes[0]; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
parseConfigs() { |
|
|
try { |
|
|
const config = { "txt": {}, "img": {} }; |
|
|
const holder = document.getElementById('TABSEX_LBL'); |
|
|
const textarea = holder?.querySelector('textarea'); |
|
|
const raw = textarea?.value ?? ""; |
|
|
|
|
|
const lines = raw.trim().split('\n').slice(1).filter(Boolean); |
|
|
for (const line of lines) { |
|
|
const [ext, t, i] = line.split(',').map(col => (col ?? '').trim()); |
|
|
if (!ext) continue; |
|
|
config["txt"][ext] = this.#validateMode(ext, t); |
|
|
config["img"][ext] = this.#validateMode(ext, i); |
|
|
} |
|
|
|
|
|
|
|
|
if (Object.keys(config.txt ?? {}).length === 0) { |
|
|
return { |
|
|
"txt": { 'tabs': 'left', 'default': 'left' }, |
|
|
"img": { 'tabs': 'right', 'default': 'right' } |
|
|
}; |
|
|
} |
|
|
return config; |
|
|
} catch (_e) { |
|
|
alert(`[Tabs Extension]: Something went wrong while parsing the configs... Using defaults.`); |
|
|
return { |
|
|
"txt": { 'tabs': 'left', 'default': 'left' }, |
|
|
"img": { 'tabs': 'right', 'default': 'right' } |
|
|
}; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
saveConfigs(config) { |
|
|
const holder = document.getElementById('TABSEX_LBL'); |
|
|
const textarea = holder?.querySelector('textarea'); |
|
|
if (!textarea) return; |
|
|
|
|
|
const data = [",txt,img"]; |
|
|
|
|
|
const keys = Array.from(new Set([ |
|
|
...Object.keys(config["txt"] || {}), |
|
|
...Object.keys(config["img"] || {}) |
|
|
])).sort((a, b) => { |
|
|
const aHead = (a === 'tabs' || a === 'default'); |
|
|
const bHead = (b === 'tabs' || b === 'default'); |
|
|
if (aHead && !bHead) return -1; |
|
|
if (!aHead && bHead) return 1; |
|
|
return a.localeCompare(b); |
|
|
}); |
|
|
|
|
|
for (const key of keys) { |
|
|
data.push([key, config["txt"][key] ?? "", config["img"][key] ?? ""].join(",")); |
|
|
} |
|
|
|
|
|
textarea.value = data.join("\n"); |
|
|
if (typeof updateInput === 'function') updateInput(textarea); |
|
|
|
|
|
const btn = document.getElementById('TABSEX_BTN'); |
|
|
btn?.click(); |
|
|
} |
|
|
} |
|
|
|