CreationDate/JoinedAtDate now use patching instead of observing
This commit is contained in:
parent
c6ca915e00
commit
9e0d200b9b
File diff suppressed because one or more lines are too long
|
@ -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("");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue