module.exports = (Plugin, Api, Vendor) => { if (typeof BDFDB !== "object") global.BDFDB = {$: Vendor.$, BDv2Api: Api}; const {$} = Vendor; return class extends Plugin { initConstructor () { this.labels = {}; this.languages; this.creationDateMarkup = `
`; this.css = ` ${BDFDB.dotCNS.themelight + BDFDB.dotCN.userpopoutheadernormal} .creationDate { color: #b9bbbe; } ${BDFDB.dotCNS.themelight + BDFDB.dotCN.userpopoutheader}:not(${BDFDB.dotCN.userpopoutheadernormal}) .creationDate, ${BDFDB.dotCNS.themedark + BDFDB.dotCN.userpopoutheader} .creationDate { color: hsla(0,0%,100%,.6); } ${BDFDB.dotCNS.themelight + BDFDB.dotCN.userprofiletopsectionnormal} .creationDate { color: hsla(216,4%,74%,.6); } ${BDFDB.dotCN.themelight} [class*='topSection']:not(${BDFDB.dotCN.userprofiletopsectionnormal}) .creationDate, ${BDFDB.dotCN.themedark} [class*='topSection'] .creationDate { color: hsla(0,0%,100%,.6); }`; this.defaults = { settings: { addInUserPopout: {value:true, description:"Add in User Popouts:"}, addInUserProfil: {value:true, description:"Add in User Profil Modal:"}, addCreationTime: {value:true, description:"Display the Time of Creation:"}, forceZeros: {value:false, description:"Force leading Zeros:"} }, choices: { creationDateLang: {value:"$discord", description:"Creation Date Format:"} } }; } onStart () { var libraryScript = null; if (typeof BDFDB !== "object" || typeof BDFDB.isLibraryOutdated !== "function" || BDFDB.isLibraryOutdated()) { libraryScript = document.querySelector('head script[src="https://mwittrien.github.io/BetterDiscordAddons/Plugins/BDFDB.js"]'); if (libraryScript) libraryScript.remove(); libraryScript = document.createElement("script"); libraryScript.setAttribute("type", "text/javascript"); libraryScript.setAttribute("src", "https://mwittrien.github.io/BetterDiscordAddons/Plugins/BDFDB.js"); document.head.appendChild(libraryScript); } this.startTimeout = setTimeout(() => {this.initialize();}, 30000); if (typeof BDFDB === "object" && typeof BDFDB.isLibraryOutdated === "function") this.initialize(); else libraryScript.addEventListener("load", () => {this.initialize();}); return true; } initialize () { if (typeof BDFDB === "object") { BDFDB.loadMessage(this); var observer = null; observer = new MutationObserver((changes, _) => { changes.forEach( (change, i) => { if (change.addedNodes) { change.addedNodes.forEach((node) => { if (node && node.tagName && node.querySelector(BDFDB.dotCN.userpopout)) { if (BDFDB.getData("addInUserPopout", this, "settings")) this.addCreationDate(node.querySelector(BDFDB.dotCN.userpopoutheadertext)); } }); } } ); }); BDFDB.addObserver(this, BDFDB.dotCN.popouts, {name:"userPopoutObserver",instance:observer}, {childList: true}); observer = new MutationObserver((changes, _) => { changes.forEach( (change, i) => { if (change.addedNodes) { change.addedNodes.forEach((node) => { if (node && node.tagName && node.querySelector(BDFDB.dotCN.userprofile)) { if (BDFDB.getData("addInUserProfil", this, "settings")) this.addCreationDate(node.querySelector(BDFDB.dotCN.userprofileheaderinfo)); } }); } } ); }); BDFDB.addObserver(this, BDFDB.dotCN.app + " ~ [class^='theme-']:not([class*='popouts'])", {name:"userProfilModalObserver",instance:observer}, {childList: true}); this.languages = Object.assign({},BDFDB.languages); return true; } else { console.error(this.name + ": Fatal Error: Could not load BD functions!"); return false; } } onStop () { if (typeof BDFDB === "object") { BDFDB.unloadMessage(this); return true; } else { return false; } } // begin of own functions updateSettings (settingspanel) { var settings = {}; for (var input of settingspanel.querySelectorAll(BDFDB.dotCN.switchinner)) { settings[input.value] = input.checked; } BDFDB.saveAllData(settings, this, "settings"); } openDropdownMenu (e) { var selectControl = e.currentTarget; var selectWrap = selectControl.parentElement; if (selectWrap.classList.contains(BDFDB.disCN.selectisopen)) return; selectWrap.classList.add(BDFDB.disCN.selectisopen); $("li").has(selectWrap).css("overflow", "visible"); var type = selectWrap.getAttribute("type"); var selectMenu = this.createDropdownMenu(selectWrap.getAttribute("value"), type); selectWrap.appendChild(selectMenu); $(selectMenu).on("mousedown." + this.name, BDFDB.dotCN.selectoption, (e2) => { var language = e2.currentTarget.getAttribute("value"); selectWrap.setAttribute("value", language); selectControl.querySelector(".languageName").innerText = this.languages[language].name; selectControl.querySelector(".languageTimestamp").innerText = this.getCreationTime(language); BDFDB.saveData(type, language, this, "choices"); }); $(document).on("mousedown.select" + this.name, (e2) => { if (e2.target.parentElement == selectMenu) return; $(document).off("mousedown.select" + this.name); selectMenu.remove(); $("li").has(selectWrap).css("overflow", "auto"); setTimeout(() => {selectWrap.classList.remove(BDFDB.disCN.selectisopen);},100); }); } createDropdownMenu (choice, type) { var menuhtml = ` `; return $(menuhtml)[0]; } addCreationDate (container) { if (!container) return; var info = BDFDB.getKeyInformation({"node":container,"key":"user"}); if (info) { var creationDate = $(this.creationDateMarkup); var choice = BDFDB.getData("creationDateLang", this, "choices"); creationDate.text(this.labels.createdat_text + " " + this.getCreationTime(this.languages[choice].id, info.createdAt)); var nametag = container.querySelector(BDFDB.dotCN.nametag); container.insertBefore(creationDate[0], nametag ? nametag.nextSibling : null); } } getCreationTime (languageid, timestamp = new Date()) { var settings = BDFDB.getAllData(this, "settings"); var timestring = settings.addCreationTime ? timestamp.toLocaleString(languageid) : timestamp.toLocaleDateString(languageid); if (timestring && settings.forceZeros) timestring = this.addLeadingZeros(timestring); return timestring; } addLeadingZeros (timestring) { var chararray = timestring.split(""); var numreg = /[0-9]/; for (var i = 0; i < chararray.length; i++) { if (!numreg.test(chararray[i-1]) && numreg.test(chararray[i]) && !numreg.test(chararray[i+1])) chararray[i] = "0" + chararray[i]; } return chararray.join(""); } getSettingsPanel () { var settings = BDFDB.getAllData(this, "settings"); var choices = BDFDB.getAllData(this, "choices"); var settingshtml = `