diff --git a/Plugins/ThemeSettings/ThemeSettings.plugin.js b/Plugins/ThemeSettings/ThemeSettings.plugin.js index bd4610ae46..2e96f10cdd 100644 --- a/Plugins/ThemeSettings/ThemeSettings.plugin.js +++ b/Plugins/ThemeSettings/ThemeSettings.plugin.js @@ -1,16 +1,19 @@ //META{"name":"ThemeSettings"}*// class ThemeSettings { - initConstructor () {} + initConstructor () { + this.patchModules = { + "V2C_ThemeCard":"componentDidMount" + }; + } getName () {return "ThemeSettings";} getDescription () {return "Allows you to change Theme Variables within BetterDiscord. Adds a Settings button (similar to Plugins) to customizable Themes in your Themes Page.";} - getVersion () {return "1.0.5";} + getVersion () {return "1.0.6";} getAuthor () {return "DevilBro";} - //legacy load () {} @@ -38,49 +41,7 @@ class ThemeSettings { this.path = require("path"); this.dir = BDFDB.getThemesFolder(); - var observer = null; - observer = new MutationObserver((changes, _) => { - changes.forEach( - (change, j) => { - if (change.addedNodes) { - change.addedNodes.forEach((node) => { - if (this.isThemesPage() && node.tagName) { - if (node.classList && node.classList.contains(BDFDB.disCN.scrollerwrap)) { - for (let li of node.querySelectorAll(".bda-slist > li")) this.addSettingsButton(li); - } - else if (node.tagName == "LI" && node.querySelector(".ui-switch")) { - this.addSettingsButton(node); - } - } - }); - } - } - ); - }); - BDFDB.addObserver(this, BDFDB.dotCN.layer + "[layer-id='user-settings']", {name:"innerSettingsWindowObserver",instance:observer}, {childList:true,subtree:true}); - - observer = new MutationObserver((changes, _) => { - changes.forEach( - (change, i) => { - if (change.addedNodes) { - change.addedNodes.forEach((node) => { - setImmediate(() => { - if (node.tagName && node.getAttribute("layer-id") == "user-settings") { - BDFDB.addObserver(this, node, {name:"innerSettingsWindowObserver"}, {childList:true,subtree:true}); - if (this.isThemesPage(node)) for (let li of node.querySelectorAll(".bda-slist > li")) this.addSettingsButton(li); - } - }); - }); - } - } - ); - }); - BDFDB.addObserver(this, BDFDB.dotCN.layers, {name:"settingsWindowObserver",instance:observer}, {childList:true}); - - var settingswindow = document.querySelector(BDFDB.dotCN.layer + "[layer-id='user-settings']"); - if (settingswindow && this.isThemesPage(settingswindow)) { - for (let li of settingswindow.querySelectorAll(".bda-slist > li")) this.addSettingsButton(li); - } + BDFDB.WebModules.forceAllUpdates(this); } else { console.error(this.getName() + ": Fatal Error: Could not load BD functions!"); @@ -89,67 +50,46 @@ class ThemeSettings { stop () { if (typeof BDFDB === "object") { - $(".themes-settings-button, .themes-settings-footer").remove(); - + BDFDB.removeEles(".themes-settings-button",".themes-settings-footer"); BDFDB.unloadMessage(this); } } + // begin of own functions - isThemesPage (container) { - if (typeof container === "undefined") container = document.querySelector(BDFDB.dotCN.layer + "[layer-id='user-settings']"); - if (container && container.tagName) { - var folderbutton = container.querySelector(".bd-pfbtn"); - if (folderbutton) { - var buttonbar = folderbutton.parentElement; - if (buttonbar && buttonbar.tagName) { - var header = buttonbar.querySelector("h2"); - if (header) { - return BDFDB.getInnerText(header).toLowerCase() === "themes"; - } + processV2CThemeCard (instance, wrapper) { + if (instance.props && instance.props.theme && !wrapper.querySelector(BDFDB.dotCN._reposettingsbutton + ".themes-settings-button")) { + let vars = this.getThemeVars(instance.props.theme.css); + if (vars.length) { + let footer = wrapper.querySelector(BDFDB.dotCN._repofooter); + if (!footer) { + footer = document.createElement("div"); + footer.className = BDFDB.disCNS._repofooter + "themes-settings-footer"; + wrapper.appendChild(footer); } - } - } - return false; - } - - addSettingsButton (li) { - if (li && li.tagName && li.tagName == "LI" && !li.querySelector(".bda-settings-button.themes-settings-button")) { - let nameele = li.querySelector(".bda-name"); - let name = nameele ? nameele.textContent : null; - if (name && bdthemes[name]) { - let vars = this.getThemeVars(bdthemes[name].css); - if (vars.length) { - let footer = li.querySelector(".bda-footer"); - if (!footer) { - footer = document.createElement("div"); - footer.className = "bda-footer themes-settings-footer"; - li.appendChild(footer); + let button = document.createElement("button"); + button.className = BDFDB.disCNS._reposettingsbutton + "themes-settings-button"; + button.innerText = "Settings"; + footer.appendChild(button); + button.addEventListener("click", () => { + wrapper.classList.add(BDFDB.disCN._reposettingsopen); + wrapper.classList.remove(BDFDB.disCN._reposettingsclosed); + let children = []; + while (wrapper.childElementCount) { + children.push(wrapper.firstChild); + wrapper.firstChild.remove(); } - let button = document.createElement("button"); - button.className = "bda-settings-button themes-settings-button"; - button.innerText = "Settings"; - footer.appendChild(button); - button.addEventListener("click", () => { - li.classList.remove("settings-closed"); - li.classList.add("settings-open"); - let children = []; - while (li.childElementCount) { - children.push(li.firstChild); - li.firstChild.remove(); - } - let closebutton = $(`
`)[0]; - li.appendChild(closebutton); - closebutton.addEventListener("click", () => { - li.classList.remove("settings-open"); - li.classList.add("settings-closed"); - while (li.childElementCount) li.firstChild.remove(); - while (children.length) li.appendChild(children.shift()); - }) - li.appendChild(this.createThemeSettings(name, vars)); - }); - } + let closebutton = $(`
`)[0]; + wrapper.appendChild(closebutton); + closebutton.addEventListener("click", () => { + wrapper.classList.remove(BDFDB.disCN._reposettingsopen); + wrapper.classList.add(BDFDB.disCN._reposettingsclosed); + while (wrapper.childElementCount) wrapper.firstChild.remove(); + while (children.length) wrapper.appendChild(children.shift()); + }) + wrapper.appendChild(this.createThemeSettings(instance.props.theme, vars)); + }); } } } @@ -167,9 +107,9 @@ class ThemeSettings { return []; } - createThemeSettings (name, vars) { + createThemeSettings (theme, vars) { if (!this.started || typeof BDFDB !== "object") return; - var settingshtml = `
${BDFDB.encodeToHTML(name)}

Update all variables

`; + var settingshtml = `
${BDFDB.encodeToHTML(theme.name)}

Update all variables

`; var settingspanel = $(settingshtml)[0]; var settingspanelinner = settingspanel.querySelector(".DevilBro-settings-inner"); @@ -196,7 +136,7 @@ class ThemeSettings { $(settingspanel) .on("click", ".update-button", () => { - let path = this.path.join(this.dir, bdthemes[name].filename); + let path = this.path.join(this.dir, theme.filename); let css = this.fs.readFileSync(path).toString(); if (css) { let amount = 0; @@ -211,12 +151,12 @@ class ThemeSettings { } if (amount > 0) { this.fs.writeFileSync(path, css); - BDFDB.showToast(`Updated ${amount} variable${amount == 1 ? "" : "s"} in ${bdthemes[name].filename}`, {type:"success"}); + BDFDB.showToast(`Updated ${amount} variable${amount == 1 ? "" : "s"} in ${theme.filename}`, {type:"success"}); } - else BDFDB.showToast(`There are no changed variables to be updated in ${bdthemes[name].filename}`, {type:"warning"}); + else BDFDB.showToast(`There are no changed variables to be updated in ${theme.filename}`, {type:"warning"}); } - else BDFDB.showToast(`Could not find themefile: ${bdthemes[name].filename}`, {type:"error"}); + else BDFDB.showToast(`Could not find themefile: ${theme.filename}`, {type:"error"}); }); return settingspanel; } -} +} \ No newline at end of file