CreationDate/JoinedAtDate now use patching instead of observing

This commit is contained in:
Mirco Wittrien 2018-12-30 12:01:01 +01:00
parent c6ca915e00
commit 9e0d200b9b
3 changed files with 129 additions and 159 deletions

File diff suppressed because one or more lines are too long

View File

@ -4,14 +4,20 @@ class CreationDate {
initConstructor () { initConstructor () {
this.labels = {}; this.labels = {};
this.languages; this.patchModules = {
"UserPopout":"componentDidMount",
"UserProfile":"componentDidMount"
};
this.creationDateMarkup = `<div class="creationDate ${BDFDB.disCN.textrow}"></div>`; this.languages;
this.css = ` this.css = `
${BDFDB.dotCNS.userpopout + BDFDB.dotCN.nametag} { ${BDFDB.dotCNS.userpopout + BDFDB.dotCN.nametag} {
margin-bottom: 4px; margin-bottom: 4px;
} }
${BDFDB.dotCN.userprofile} .creationDate {
max-width: 200px;
}
${BDFDB.dotCNS.themelight + BDFDB.dotCN.userpopoutheadernormal} .creationDate { ${BDFDB.dotCNS.themelight + BDFDB.dotCN.userpopoutheadernormal} .creationDate {
color: #b9bbbe; color: #b9bbbe;
} }
@ -45,15 +51,15 @@ class CreationDate {
getDescription () {return "Displays the Creation Date of an Account in the UserPopout and UserModal.";} getDescription () {return "Displays the Creation Date of an Account in the UserPopout and UserModal.";}
getVersion () {return "1.2.1";} getVersion () {return "1.2.2";}
getAuthor () {return "DevilBro";} getAuthor () {return "DevilBro";}
getSettingsPanel () { getSettingsPanel () {
if (!this.started || typeof BDFDB !== "object") return; if (!this.started || typeof BDFDB !== "object") return;
var settings = BDFDB.getAllData(this, "settings"); let settings = BDFDB.getAllData(this, "settings");
var choices = BDFDB.getAllData(this, "choices"); let choices = BDFDB.getAllData(this, "choices");
var settingshtml = `<div class="${this.getName()}-settings DevilBro-settings"><div class="${BDFDB.disCNS.titledefault + BDFDB.disCNS.title + BDFDB.disCNS.size18 + BDFDB.disCNS.height24 + BDFDB.disCNS.weightnormal + BDFDB.disCN.marginbottom8}">${this.getName()}</div><div class="DevilBro-settings-inner">`; let settingshtml = `<div class="${this.getName()}-settings DevilBro-settings"><div class="${BDFDB.disCNS.titledefault + BDFDB.disCNS.title + BDFDB.disCNS.size18 + BDFDB.disCNS.height24 + BDFDB.disCNS.weightnormal + BDFDB.disCN.marginbottom8}">${this.getName()}</div><div class="DevilBro-settings-inner">`;
for (let key in settings) { for (let key in settings) {
settingshtml += `<div class="${BDFDB.disCNS.flex + BDFDB.disCNS.flex2 + BDFDB.disCNS.horizontal + BDFDB.disCNS.horizontal2 + BDFDB.disCNS.directionrow + BDFDB.disCNS.justifystart + BDFDB.disCNS.aligncenter + BDFDB.disCNS.nowrap + BDFDB.disCN.marginbottom8}" style="flex: 1 1 auto;"><h3 class="${BDFDB.disCNS.titledefault + BDFDB.disCNS.title + BDFDB.disCNS.marginreset + BDFDB.disCNS.weightmedium + BDFDB.disCNS.size16 + BDFDB.disCNS.height24 + BDFDB.disCN.flexchild}" style="flex: 1 1 auto;">${this.defaults.settings[key].description}</h3><div class="${BDFDB.disCNS.flexchild + BDFDB.disCNS.switchenabled + BDFDB.disCNS.switch + BDFDB.disCNS.switchvalue + BDFDB.disCNS.switchsizedefault + BDFDB.disCNS.switchsize + BDFDB.disCN.switchthemedefault}" style="flex: 0 0 auto;"><input type="checkbox" value="${key}" class="${BDFDB.disCNS.switchinnerenabled + BDFDB.disCN.switchinner}"${settings[key] ? " checked" : ""}></div></div>`; settingshtml += `<div class="${BDFDB.disCNS.flex + BDFDB.disCNS.flex2 + BDFDB.disCNS.horizontal + BDFDB.disCNS.horizontal2 + BDFDB.disCNS.directionrow + BDFDB.disCNS.justifystart + BDFDB.disCNS.aligncenter + BDFDB.disCNS.nowrap + BDFDB.disCN.marginbottom8}" style="flex: 1 1 auto;"><h3 class="${BDFDB.disCNS.titledefault + BDFDB.disCNS.title + BDFDB.disCNS.marginreset + BDFDB.disCNS.weightmedium + BDFDB.disCNS.size16 + BDFDB.disCNS.height24 + BDFDB.disCN.flexchild}" style="flex: 1 1 auto;">${this.defaults.settings[key].description}</h3><div class="${BDFDB.disCNS.flexchild + BDFDB.disCNS.switchenabled + BDFDB.disCNS.switch + BDFDB.disCNS.switchvalue + BDFDB.disCNS.switchsizedefault + BDFDB.disCNS.switchsize + BDFDB.disCN.switchthemedefault}" style="flex: 0 0 auto;"><input type="checkbox" value="${key}" class="${BDFDB.disCNS.switchinnerenabled + BDFDB.disCN.switchinner}"${settings[key] ? " checked" : ""}></div></div>`;
} }
@ -62,14 +68,14 @@ class CreationDate {
} }
settingshtml += `</div></div>`; settingshtml += `</div></div>`;
var settingspanel = $(settingshtml)[0]; let settingspanel = $(settingshtml)[0];
BDFDB.initElements(settingspanel); BDFDB.initElements(settingspanel);
$(settingspanel) $(settingspanel)
.on("click", BDFDB.dotCN.switchinner, () => { .on("click", BDFDB.dotCN.switchinner, () => {
this.updateSettings(settingspanel); this.updateSettings(settingspanel);
var choices = BDFDB.getAllData(this, "choices"); let choices = BDFDB.getAllData(this, "choices");
for (let key in choices) { for (let key in choices) {
settingspanel.querySelector(`${BDFDB.dotCN.select}[type='${key}'] .languageTimestamp`).innerText = this.getCreationTime(this.languages[choices[key]].id); settingspanel.querySelector(`${BDFDB.dotCN.select}[type='${key}'] .languageTimestamp`).innerText = this.getCreationTime(this.languages[choices[key]].id);
} }
@ -82,7 +88,7 @@ class CreationDate {
load () {} load () {}
start () { start () {
var libraryScript = null; let libraryScript = null;
if (typeof BDFDB !== "object" || BDFDB.isLibraryOutdated()) { if (typeof BDFDB !== "object" || BDFDB.isLibraryOutdated()) {
if (typeof BDFDB === "object") BDFDB = ""; if (typeof BDFDB === "object") BDFDB = "";
libraryScript = document.querySelector('head script[src="https://mwittrien.github.io/BetterDiscordAddons/Plugins/BDFDB.js"]'); libraryScript = document.querySelector('head script[src="https://mwittrien.github.io/BetterDiscordAddons/Plugins/BDFDB.js"]');
@ -101,39 +107,9 @@ class CreationDate {
if (typeof BDFDB === "object") { if (typeof BDFDB === "object") {
BDFDB.loadMessage(this); BDFDB.loadMessage(this);
var observer = null;
observer = new MutationObserver((changes, _) => {
changes.forEach(
(change, i) => {
if (change.addedNodes) {
change.addedNodes.forEach((node) => {
if (node.tagName && node.querySelector(BDFDB.dotCN.userpopout)) {
if (BDFDB.getData("addInUserPopout", this, "settings")) this.addCreationDate(node.querySelector(BDFDB.dotCN.userpopoutheadertext), node);
}
});
}
}
);
});
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.tagName && node.querySelector(BDFDB.dotCN.userprofile)) {
if (BDFDB.getData("addInUserProfil", this, "settings")) this.addCreationDate(node.querySelector(BDFDB.dotCN.userprofileheaderinfo), null);
}
});
}
}
);
});
BDFDB.addObserver(this, BDFDB.dotCN.app + " ~ [class^='theme-']:not([class*='popouts'])", {name:"userProfilModalObserver",instance:observer}, {childList: true});
this.languages = Object.assign({},BDFDB.languages); this.languages = Object.assign({},BDFDB.languages);
BDFDB.WebModules.forceAllUpdates(this);
} }
else { else {
console.error(this.getName() + ": Fatal Error: Could not load BD functions!"); console.error(this.getName() + ": Fatal Error: Could not load BD functions!");
@ -142,7 +118,8 @@ class CreationDate {
stop () { stop () {
if (typeof BDFDB === "object") { if (typeof BDFDB === "object") {
BDFDB.removeEles(".creationDate");
BDFDB.unloadMessage(this); BDFDB.unloadMessage(this);
} }
} }
@ -151,28 +128,28 @@ class CreationDate {
// begin of own functions // begin of own functions
updateSettings (settingspanel) { updateSettings (settingspanel) {
var settings = {}; let settings = {};
for (var input of settingspanel.querySelectorAll(BDFDB.dotCN.switchinner)) { for (let input of settingspanel.querySelectorAll(BDFDB.dotCN.switchinner)) {
settings[input.value] = input.checked; settings[input.value] = input.checked;
} }
BDFDB.saveAllData(settings, this, "settings"); BDFDB.saveAllData(settings, this, "settings");
} }
openDropdownMenu (e) { openDropdownMenu (e) {
var selectControl = e.currentTarget; let selectControl = e.currentTarget;
var selectWrap = selectControl.parentElement; let selectWrap = selectControl.parentElement;
if (selectWrap.classList.contains(BDFDB.disCN.selectisopen)) return; if (selectWrap.classList.contains(BDFDB.disCN.selectisopen)) return;
selectWrap.classList.add(BDFDB.disCN.selectisopen); selectWrap.classList.add(BDFDB.disCN.selectisopen);
$("li").has(selectWrap).css("overflow", "visible"); $("li").has(selectWrap).css("overflow", "visible");
var type = selectWrap.getAttribute("type"); let type = selectWrap.getAttribute("type");
var selectMenu = this.createDropdownMenu(selectWrap.getAttribute("value"), type); let selectMenu = this.createDropdownMenu(selectWrap.getAttribute("value"), type);
selectWrap.appendChild(selectMenu); selectWrap.appendChild(selectMenu);
$(selectMenu).on("mousedown." + this.getName(), BDFDB.dotCN.selectoption, (e2) => { $(selectMenu).on("mousedown." + this.getName(), BDFDB.dotCN.selectoption, (e2) => {
var language = e2.currentTarget.getAttribute("value"); let language = e2.currentTarget.getAttribute("value");
selectWrap.setAttribute("value", language); selectWrap.setAttribute("value", language);
selectControl.querySelector(".languageName").innerText = this.languages[language].name; selectControl.querySelector(".languageName").innerText = this.languages[language].name;
selectControl.querySelector(".languageTimestamp").innerText = this.getCreationTime(language); selectControl.querySelector(".languageTimestamp").innerText = this.getCreationTime(language);
@ -188,47 +165,55 @@ class CreationDate {
} }
createDropdownMenu (choice, type) { createDropdownMenu (choice, type) {
var menuhtml = `<div class="${BDFDB.disCN.selectmenuouter}"><div class="${BDFDB.disCN.selectmenu}">`; let menuhtml = `<div class="${BDFDB.disCN.selectmenuouter}"><div class="${BDFDB.disCN.selectmenu}">`;
for (var key in this.languages) { for (let key in this.languages) {
var isSelected = key == choice ? ` ${BDFDB.disCN.selectselected}` : ``; let isSelected = key == choice ? ` ${BDFDB.disCN.selectselected}` : ``;
menuhtml += `<div value="${key}" class="${BDFDB.disCNS.flex + BDFDB.disCNS.flex2 + BDFDB.disCNS.horizontal + BDFDB.disCNS.horizontal2 + BDFDB.disCNS.directionrow + BDFDB.disCNS.justifystart + BDFDB.disCNS.alignbaseline + BDFDB.disCNS.nowrap + BDFDB.disCN.selectoption + isSelected}" style="flex: 1 1 auto; display:flex;"><div class="${BDFDB.disCNS.title + BDFDB.disCNS.medium + BDFDB.disCNS.size16 + BDFDB.disCNS.height20 + BDFDB.disCNS.primary + BDFDB.disCN.weightnormal}" style="flex: 1 1 42%;">${this.languages[key].name}</div><div class="${BDFDB.disCNS.title + BDFDB.disCNS.medium + BDFDB.disCNS.size16 + BDFDB.disCNS.height20 + BDFDB.disCNS.primary + BDFDB.disCN.weightnormal}" style="flex: 1 1 58%;">${this.getCreationTime(this.languages[key].id)}</div></div>` menuhtml += `<div value="${key}" class="${BDFDB.disCNS.flex + BDFDB.disCNS.flex2 + BDFDB.disCNS.horizontal + BDFDB.disCNS.horizontal2 + BDFDB.disCNS.directionrow + BDFDB.disCNS.justifystart + BDFDB.disCNS.alignbaseline + BDFDB.disCNS.nowrap + BDFDB.disCN.selectoption + isSelected}" style="flex: 1 1 auto; display:flex;"><div class="${BDFDB.disCNS.title + BDFDB.disCNS.medium + BDFDB.disCNS.size16 + BDFDB.disCNS.height20 + BDFDB.disCNS.primary + BDFDB.disCN.weightnormal}" style="flex: 1 1 42%;">${this.languages[key].name}</div><div class="${BDFDB.disCNS.title + BDFDB.disCNS.medium + BDFDB.disCNS.size16 + BDFDB.disCNS.height20 + BDFDB.disCNS.primary + BDFDB.disCN.weightnormal}" style="flex: 1 1 58%;">${this.getCreationTime(this.languages[key].id)}</div></div>`
} }
menuhtml += `</div></div>`; menuhtml += `</div></div>`;
return $(menuhtml)[0]; return $(menuhtml)[0];
} }
addCreationDate (container, popout) { processUserPopout (instance, wrapper) {
if (!container) return; if (instance.props && instance.props.user && BDFDB.getData("addInUserPopout", this, "settings")) {
var info = BDFDB.getKeyInformation({"node":container,"key":"user"}); this.addCreationDate(instance.props.user, wrapper.querySelector(BDFDB.dotCN.userpopoutheadertext), wrapper.parentElement);
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)); processUserProfile (instance, wrapper) {
var nametag = container.querySelector(BDFDB.dotCN.nametag); if (instance.props && instance.props.user && BDFDB.getData("addInUserProfil", this, "settings")) {
var joinedAtDate = container.querySelector(".joinedAtDate"); this.addCreationDate(instance.props.user, wrapper.querySelector(BDFDB.dotCN.userprofileheaderinfo), null);
container.insertBefore(creationDate[0], joinedAtDate ? joinedAtDate.nextSibling : (nametag ? nametag.nextSibling : null)); }
if (popout && popout.style.transform.indexOf("translateY(-1") == -1) { }
var arect = document.querySelector(BDFDB.dotCN.appmount).getBoundingClientRect();
var prect = popout.getBoundingClientRect(); addCreationDate (info, container, popout) {
popout.style.setProperty("top", (prect.y + prect.height > arect.height ? (arect.height - prect.height) : prect.y) + "px"); if (!info || !container) return;
} let creationDate = $(this.creationDateMarkup);
let choice = BDFDB.getData("creationDateLang", this, "choices");
let nametag = container.querySelector(BDFDB.dotCN.nametag);
let joinedAtDate = container.querySelector(".joinedAtDate");
container.insertBefore($(`<div class="creationDate DevilBro-textscrollwrapper ${BDFDB.disCN.textrow}"><div class="DevilBro-textscroll">${this.labels.createdat_text + " " + this.getCreationTime(this.languages[choice].id, info.createdAt)}</div></div>`)[0], joinedAtDate ? joinedAtDate.nextSibling : (nametag ? nametag.nextSibling : null));
BDFDB.initElements(container.parentElement);
if (popout && popout.style.transform.indexOf("translateY(-1") == -1) {
let arect = document.querySelector(BDFDB.dotCN.appmount).getBoundingClientRect();
let prect = popout.getBoundingClientRect();
popout.style.setProperty("top", (prect.y + prect.height > arect.height ? (arect.height - prect.height) : prect.y) + "px");
} }
} }
getCreationTime (languageid, timestamp = new Date()) { getCreationTime (languageid, timestamp = new Date()) {
var settings = BDFDB.getAllData(this, "settings"); let settings = BDFDB.getAllData(this, "settings");
var timestring = settings.addCreationTime ? timestamp.toLocaleString(languageid) : timestamp.toLocaleDateString(languageid); let timestring = settings.addCreationTime ? timestamp.toLocaleString(languageid) : timestamp.toLocaleDateString(languageid);
if (timestring && settings.forceZeros) timestring = this.addLeadingZeros(timestring); if (timestring && settings.forceZeros) timestring = this.addLeadingZeros(timestring);
return timestring; return timestring;
} }
addLeadingZeros (timestring) { addLeadingZeros (timestring) {
var chararray = timestring.split(""); let chararray = timestring.split("");
var numreg = /[0-9]/; let numreg = /[0-9]/;
for (var i = 0; i < chararray.length; i++) { for (let 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]; if (!numreg.test(chararray[i-1]) && numreg.test(chararray[i]) && !numreg.test(chararray[i+1])) chararray[i] = "0" + chararray[i];
} }
return chararray.join(""); return chararray.join("");
} }

View File

@ -4,16 +4,22 @@ class JoinedAtDate {
initConstructor () { initConstructor () {
this.labels = {}; this.labels = {};
this.patchModules = {
"UserPopout":"componentDidMount",
"UserProfile":"componentDidMount"
};
this.languages; this.languages;
this.loadedusers = {}; this.loadedusers = {};
this.joinedAtDateMarkup = `<div class="joinedAtDate ${BDFDB.disCN.textrow}"></div>`;
this.css = ` this.css = `
${BDFDB.dotCNS.userpopout + BDFDB.dotCN.nametag} { ${BDFDB.dotCNS.userpopout + BDFDB.dotCN.nametag} {
margin-bottom: 4px; margin-bottom: 4px;
} }
${BDFDB.dotCN.userprofile} .joinedAtDate {
max-width: 200px;
}
${BDFDB.dotCNS.themelight + BDFDB.dotCN.userpopoutheadernormal} .joinedAtDate { ${BDFDB.dotCNS.themelight + BDFDB.dotCN.userpopoutheadernormal} .joinedAtDate {
color: #b9bbbe; color: #b9bbbe;
} }
@ -47,15 +53,15 @@ class JoinedAtDate {
getDescription () {return "Displays the Joined At Date of the current Server for a Member in the UserPopout and UserModal.";} getDescription () {return "Displays the Joined At Date of the current Server for a Member in the UserPopout and UserModal.";}
getVersion () {return "1.0.2";} getVersion () {return "1.0.3";}
getAuthor () {return "DevilBro";} getAuthor () {return "DevilBro";}
getSettingsPanel () { getSettingsPanel () {
if (!this.started || typeof BDFDB !== "object") return; if (!this.started || typeof BDFDB !== "object") return;
var settings = BDFDB.getAllData(this, "settings"); let settings = BDFDB.getAllData(this, "settings");
var choices = BDFDB.getAllData(this, "choices"); let choices = BDFDB.getAllData(this, "choices");
var settingshtml = `<div class="${this.getName()}-settings DevilBro-settings"><div class="${BDFDB.disCNS.titledefault + BDFDB.disCNS.title + BDFDB.disCNS.size18 + BDFDB.disCNS.height24 + BDFDB.disCNS.weightnormal + BDFDB.disCN.marginbottom8}">${this.getName()}</div><div class="DevilBro-settings-inner">`; let settingshtml = `<div class="${this.getName()}-settings DevilBro-settings"><div class="${BDFDB.disCNS.titledefault + BDFDB.disCNS.title + BDFDB.disCNS.size18 + BDFDB.disCNS.height24 + BDFDB.disCNS.weightnormal + BDFDB.disCN.marginbottom8}">${this.getName()}</div><div class="DevilBro-settings-inner">`;
for (let key in settings) { for (let key in settings) {
settingshtml += `<div class="${BDFDB.disCNS.flex + BDFDB.disCNS.flex2 + BDFDB.disCNS.horizontal + BDFDB.disCNS.horizontal2 + BDFDB.disCNS.directionrow + BDFDB.disCNS.justifystart + BDFDB.disCNS.aligncenter + BDFDB.disCNS.nowrap + BDFDB.disCN.marginbottom8}" style="flex: 1 1 auto;"><h3 class="${BDFDB.disCNS.titledefault + BDFDB.disCNS.title + BDFDB.disCNS.marginreset + BDFDB.disCNS.weightmedium + BDFDB.disCNS.size16 + BDFDB.disCNS.height24 + BDFDB.disCN.flexchild}" style="flex: 1 1 auto;">${this.defaults.settings[key].description}</h3><div class="${BDFDB.disCNS.flexchild + BDFDB.disCNS.switchenabled + BDFDB.disCNS.switch + BDFDB.disCNS.switchvalue + BDFDB.disCNS.switchsizedefault + BDFDB.disCNS.switchsize + BDFDB.disCN.switchthemedefault}" style="flex: 0 0 auto;"><input type="checkbox" value="${key}" class="${BDFDB.disCNS.switchinnerenabled + BDFDB.disCN.switchinner}"${settings[key] ? " checked" : ""}></div></div>`; settingshtml += `<div class="${BDFDB.disCNS.flex + BDFDB.disCNS.flex2 + BDFDB.disCNS.horizontal + BDFDB.disCNS.horizontal2 + BDFDB.disCNS.directionrow + BDFDB.disCNS.justifystart + BDFDB.disCNS.aligncenter + BDFDB.disCNS.nowrap + BDFDB.disCN.marginbottom8}" style="flex: 1 1 auto;"><h3 class="${BDFDB.disCNS.titledefault + BDFDB.disCNS.title + BDFDB.disCNS.marginreset + BDFDB.disCNS.weightmedium + BDFDB.disCNS.size16 + BDFDB.disCNS.height24 + BDFDB.disCN.flexchild}" style="flex: 1 1 auto;">${this.defaults.settings[key].description}</h3><div class="${BDFDB.disCNS.flexchild + BDFDB.disCNS.switchenabled + BDFDB.disCNS.switch + BDFDB.disCNS.switchvalue + BDFDB.disCNS.switchsizedefault + BDFDB.disCNS.switchsize + BDFDB.disCN.switchthemedefault}" style="flex: 0 0 auto;"><input type="checkbox" value="${key}" class="${BDFDB.disCNS.switchinnerenabled + BDFDB.disCN.switchinner}"${settings[key] ? " checked" : ""}></div></div>`;
} }
@ -64,14 +70,14 @@ class JoinedAtDate {
} }
settingshtml += `</div></div>`; settingshtml += `</div></div>`;
var settingspanel = $(settingshtml)[0]; let settingspanel = $(settingshtml)[0];
BDFDB.initElements(settingspanel); BDFDB.initElements(settingspanel);
$(settingspanel) $(settingspanel)
.on("click", BDFDB.dotCN.switchinner, () => { .on("click", BDFDB.dotCN.switchinner, () => {
this.updateSettings(settingspanel); this.updateSettings(settingspanel);
var choices = BDFDB.getAllData(this, "choices"); let choices = BDFDB.getAllData(this, "choices");
for (let key in choices) { for (let key in choices) {
settingspanel.querySelector(`${BDFDB.dotCN.select}[type='${key}'] .languageTimestamp`).innerText = this.getJoinedTime(this.languages[choices[key]].id); settingspanel.querySelector(`${BDFDB.dotCN.select}[type='${key}'] .languageTimestamp`).innerText = this.getJoinedTime(this.languages[choices[key]].id);
} }
@ -84,7 +90,7 @@ class JoinedAtDate {
load () {} load () {}
start () { start () {
var libraryScript = null; let libraryScript = null;
if (typeof BDFDB !== "object" || BDFDB.isLibraryOutdated()) { if (typeof BDFDB !== "object" || BDFDB.isLibraryOutdated()) {
if (typeof BDFDB === "object") BDFDB = ""; if (typeof BDFDB === "object") BDFDB = "";
libraryScript = document.querySelector('head script[src="https://mwittrien.github.io/BetterDiscordAddons/Plugins/BDFDB.js"]'); libraryScript = document.querySelector('head script[src="https://mwittrien.github.io/BetterDiscordAddons/Plugins/BDFDB.js"]');
@ -107,39 +113,9 @@ class JoinedAtDate {
this.APIModule = BDFDB.WebModules.findByProperties("getAPIBaseURL"); this.APIModule = BDFDB.WebModules.findByProperties("getAPIBaseURL");
this.DiscordConstants = BDFDB.WebModules.findByProperties("Permissions", "ActivityTypes", "StatusTypes"); this.DiscordConstants = BDFDB.WebModules.findByProperties("Permissions", "ActivityTypes", "StatusTypes");
var observer = null;
observer = new MutationObserver((changes, _) => {
changes.forEach(
(change, i) => {
if (change.addedNodes) {
change.addedNodes.forEach((node) => {
if (node.tagName && node.querySelector(BDFDB.dotCN.userpopout)) {
if (BDFDB.getData("addInUserPopout", this, "settings")) this.addJoinedAtDate(node.querySelector(BDFDB.dotCN.userpopoutheadertext), node);
}
});
}
}
);
});
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.tagName && node.querySelector(BDFDB.dotCN.userprofile)) {
if (BDFDB.getData("addInUserProfil", this, "settings")) this.addJoinedAtDate(node.querySelector(BDFDB.dotCN.userprofileheaderinfo), null);
}
});
}
}
);
});
BDFDB.addObserver(this, BDFDB.dotCN.app + " ~ [class^='theme-']:not([class*='popouts'])", {name:"userProfilModalObserver",instance:observer}, {childList: true});
this.languages = Object.assign({},BDFDB.languages); this.languages = Object.assign({},BDFDB.languages);
BDFDB.WebModules.forceAllUpdates(this);
} }
else { else {
console.error(this.getName() + ": Fatal Error: Could not load BD functions!"); console.error(this.getName() + ": Fatal Error: Could not load BD functions!");
@ -148,7 +124,8 @@ class JoinedAtDate {
stop () { stop () {
if (typeof BDFDB === "object") { if (typeof BDFDB === "object") {
BDFDB.removeEles(".joinedAtDate");
BDFDB.unloadMessage(this); BDFDB.unloadMessage(this);
} }
} }
@ -157,28 +134,28 @@ class JoinedAtDate {
// begin of own functions // begin of own functions
updateSettings (settingspanel) { updateSettings (settingspanel) {
var settings = {}; let settings = {};
for (var input of settingspanel.querySelectorAll(BDFDB.dotCN.switchinner)) { for (let input of settingspanel.querySelectorAll(BDFDB.dotCN.switchinner)) {
settings[input.value] = input.checked; settings[input.value] = input.checked;
} }
BDFDB.saveAllData(settings, this, "settings"); BDFDB.saveAllData(settings, this, "settings");
} }
openDropdownMenu (e) { openDropdownMenu (e) {
var selectControl = e.currentTarget; let selectControl = e.currentTarget;
var selectWrap = selectControl.parentElement; let selectWrap = selectControl.parentElement;
if (selectWrap.classList.contains(BDFDB.disCN.selectisopen)) return; if (selectWrap.classList.contains(BDFDB.disCN.selectisopen)) return;
selectWrap.classList.add(BDFDB.disCN.selectisopen); selectWrap.classList.add(BDFDB.disCN.selectisopen);
$("li").has(selectWrap).css("overflow", "visible"); $("li").has(selectWrap).css("overflow", "visible");
var type = selectWrap.getAttribute("type"); let type = selectWrap.getAttribute("type");
var selectMenu = this.createDropdownMenu(selectWrap.getAttribute("value"), type); let selectMenu = this.createDropdownMenu(selectWrap.getAttribute("value"), type);
selectWrap.appendChild(selectMenu); selectWrap.appendChild(selectMenu);
$(selectMenu).on("mousedown." + this.getName(), BDFDB.dotCN.selectoption, (e2) => { $(selectMenu).on("mousedown." + this.getName(), BDFDB.dotCN.selectoption, (e2) => {
var language = e2.currentTarget.getAttribute("value"); let language = e2.currentTarget.getAttribute("value");
selectWrap.setAttribute("value", language); selectWrap.setAttribute("value", language);
selectControl.querySelector(".languageName").innerText = this.languages[language].name; selectControl.querySelector(".languageName").innerText = this.languages[language].name;
selectControl.querySelector(".languageTimestamp").innerText = this.getJoinedTime(language); selectControl.querySelector(".languageTimestamp").innerText = this.getJoinedTime(language);
@ -194,58 +171,66 @@ class JoinedAtDate {
} }
createDropdownMenu (choice, type) { createDropdownMenu (choice, type) {
var menuhtml = `<div class="${BDFDB.disCN.selectmenuouter}"><div class="${BDFDB.disCN.selectmenu}">`; let menuhtml = `<div class="${BDFDB.disCN.selectmenuouter}"><div class="${BDFDB.disCN.selectmenu}">`;
for (var key in this.languages) { for (let key in this.languages) {
var isSelected = key == choice ? ` ${BDFDB.disCN.selectselected}` : ``; let isSelected = key == choice ? ` ${BDFDB.disCN.selectselected}` : ``;
menuhtml += `<div value="${key}" class="${BDFDB.disCNS.flex + BDFDB.disCNS.flex2 + BDFDB.disCNS.horizontal + BDFDB.disCNS.horizontal2 + BDFDB.disCNS.directionrow + BDFDB.disCNS.justifystart + BDFDB.disCNS.alignbaseline + BDFDB.disCNS.nowrap + BDFDB.disCN.selectoption + isSelected}" style="flex: 1 1 auto; display:flex;"><div class="${BDFDB.disCNS.title + BDFDB.disCNS.medium + BDFDB.disCNS.size16 + BDFDB.disCNS.height20 + BDFDB.disCNS.primary + BDFDB.disCN.weightnormal}" style="flex: 1 1 42%;">${this.languages[key].name}</div><div class="${BDFDB.disCNS.title + BDFDB.disCNS.medium + BDFDB.disCNS.size16 + BDFDB.disCNS.height20 + BDFDB.disCNS.primary + BDFDB.disCN.weightnormal}" style="flex: 1 1 58%;">${this.getJoinedTime(this.languages[key].id)}</div></div>` menuhtml += `<div value="${key}" class="${BDFDB.disCNS.flex + BDFDB.disCNS.flex2 + BDFDB.disCNS.horizontal + BDFDB.disCNS.horizontal2 + BDFDB.disCNS.directionrow + BDFDB.disCNS.justifystart + BDFDB.disCNS.alignbaseline + BDFDB.disCNS.nowrap + BDFDB.disCN.selectoption + isSelected}" style="flex: 1 1 auto; display:flex;"><div class="${BDFDB.disCNS.title + BDFDB.disCNS.medium + BDFDB.disCNS.size16 + BDFDB.disCNS.height20 + BDFDB.disCNS.primary + BDFDB.disCN.weightnormal}" style="flex: 1 1 42%;">${this.languages[key].name}</div><div class="${BDFDB.disCNS.title + BDFDB.disCNS.medium + BDFDB.disCNS.size16 + BDFDB.disCNS.height20 + BDFDB.disCNS.primary + BDFDB.disCN.weightnormal}" style="flex: 1 1 58%;">${this.getJoinedTime(this.languages[key].id)}</div></div>`
} }
menuhtml += `</div></div>`; menuhtml += `</div></div>`;
return $(menuhtml)[0]; return $(menuhtml)[0];
} }
addJoinedAtDate (container, popout) { processUserPopout (instance, wrapper) {
if (!container) return; if (instance.props && instance.props.user && BDFDB.getData("addInUserPopout", this, "settings")) {
var guildid = this.CurrentGuildStore.getGuildId(); this.addJoinedAtDate(instance.props.user, wrapper.querySelector(BDFDB.dotCN.userpopoutheadertext), wrapper.parentElement);
}
}
processUserProfile (instance, wrapper) {
if (instance.props && instance.props.user && BDFDB.getData("addInUserProfil", this, "settings")) {
this.addJoinedAtDate(instance.props.user, wrapper.querySelector(BDFDB.dotCN.userprofileheaderinfo), null);
}
}
addJoinedAtDate (info, container, popout) {
if (!info || !container) return;
let guildid = this.CurrentGuildStore.getGuildId();
if (guildid) { if (guildid) {
var info = BDFDB.getKeyInformation({"node":container,"key":"user"}); if (!this.loadedusers[guildid]) this.loadedusers[guildid] = {};
if (info) { let timestamp, addTimestamp = (timestamp) => {
if (!this.loadedusers[guildid]) this.loadedusers[guildid] = {}; let choice = BDFDB.getData("joinedAtDateLang", this, "choices");
let timestamp, addTimestamp = (timestamp) => { let nametag = container.querySelector(BDFDB.dotCN.nametag);
var joinedAtDate = $(this.joinedAtDateMarkup); let creationDate = container.querySelector(".creationDate");
var choice = BDFDB.getData("joinedAtDateLang", this, "choices"); container.insertBefore($(`<div class="joinedAtDate DevilBro-textscrollwrapper ${BDFDB.disCN.textrow}"><div class="DevilBro-textscroll">${this.labels.joinedat_text + " " + this.getJoinedTime(this.languages[choice].id, timestamp)}</div></div>`)[0], creationDate ? creationDate : (nametag ? nametag.nextSibling : null));
joinedAtDate.text(this.labels.joinedat_text + " " + this.getJoinedTime(this.languages[choice].id, timestamp)); BDFDB.initElements(container.parentElement);
var nametag = container.querySelector(BDFDB.dotCN.nametag); if (popout && popout.style.transform.indexOf("translateY(-1") == -1) {
var creationDate = container.querySelector(".creationDate"); let arect = document.querySelector(BDFDB.dotCN.appmount).getBoundingClientRect();
container.insertBefore(joinedAtDate[0], creationDate ? creationDate : (nametag ? nametag.nextSibling : null)); let prect = popout.getBoundingClientRect();
if (popout && popout.style.transform.indexOf("translateY(-1") == -1) { popout.style.setProperty("top", (prect.y + prect.height > arect.height ? (arect.height - prect.height) : prect.y) + "px");
var arect = document.querySelector(BDFDB.dotCN.appmount).getBoundingClientRect(); }
var prect = popout.getBoundingClientRect(); };
popout.style.setProperty("top", (prect.y + prect.height > arect.height ? (arect.height - prect.height) : prect.y) + "px"); if (this.loadedusers[guildid][info.id]) addTimestamp(this.loadedusers[guildid][info.id]);
} else this.APIModule.get(this.DiscordConstants.Endpoints.GUILD_MEMBER(guildid,info.id)).then(result => {
}; if (result && result.body) {
if (this.loadedusers[guildid][info.id]) addTimestamp(this.loadedusers[guildid][info.id]); timestamp = new Date(result.body.joined_at);
else this.APIModule.get(this.DiscordConstants.Endpoints.GUILD_MEMBER(guildid,info.id)).then(result => { this.loadedusers[guildid][info.id] = timestamp;
if (result && result.body) { addTimestamp(timestamp);
timestamp = new Date(result.body.joined_at); }
this.loadedusers[guildid][info.id] = timestamp; });
addTimestamp(timestamp);
}
});
}
} }
} }
getJoinedTime (languageid, timestamp = new Date()) { getJoinedTime (languageid, timestamp = new Date()) {
var settings = BDFDB.getAllData(this, "settings"); let settings = BDFDB.getAllData(this, "settings");
var timestring = settings.addJoinedAtTime ? timestamp.toLocaleString(languageid) : timestamp.toLocaleDateString(languageid); let timestring = settings.addJoinedAtTime ? timestamp.toLocaleString(languageid) : timestamp.toLocaleDateString(languageid);
if (timestring && settings.forceZeros) timestring = this.addLeadingZeros(timestring); if (timestring && settings.forceZeros) timestring = this.addLeadingZeros(timestring);
return timestring; return timestring;
} }
addLeadingZeros (timestring) { addLeadingZeros (timestring) {
var chararray = timestring.split(""); let chararray = timestring.split("");
var numreg = /[0-9]/; let numreg = /[0-9]/;
for (var i = 0; i < chararray.length; i++) { for (let 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]; if (!numreg.test(chararray[i-1]) && numreg.test(chararray[i]) && !numreg.test(chararray[i+1])) chararray[i] = "0" + chararray[i];
} }