This commit is contained in:
Mirco Wittrien 2019-11-05 21:16:39 +01:00
parent df7c3638cd
commit 66828148db
5 changed files with 178 additions and 175 deletions

View File

@ -15,9 +15,9 @@ class BadgesEverywhere {
}; };
this.patchModules = { this.patchModules = {
"MemberListItem":"render", MemberListItem: "render",
"MessageUsername":"render", MessageUsername: "render",
"UserPopout":"render" UserPopout: "render"
}; };
} }
@ -129,23 +129,26 @@ class BadgesEverywhere {
let indicators = BDFDB.DataUtils.get(this, "indicators"); let indicators = BDFDB.DataUtils.get(this, "indicators");
let settingsitems = [], inneritems = []; let settingsitems = [], inneritems = [];
for (let key in settings) settingsitems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsSwitch, { for (let key in settings) settingsitems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsSaveItem, {
className: BDFDB.disCN.marginbottom8, className: BDFDB.disCN.marginbottom8,
type: "Switch",
plugin: this, plugin: this,
keys: ["settings", key], keys: ["settings", key],
label: this.defaults.settings[key].description, label: this.defaults.settings[key].description,
value: settings[key] value: settings[key]
})); }));
for (let flag in badges) inneritems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsSwitch, { for (let flag in badges) inneritems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsSaveItem, {
className: BDFDB.disCN.marginbottom8, className: BDFDB.disCN.marginbottom8,
type: "Switch",
plugin: this, plugin: this,
keys: ["badges", flag], keys: ["badges", flag],
label: this.defaults.badges[flag].name, label: this.defaults.badges[flag].name,
value: badges[flag], value: badges[flag],
labelchildren: this.createSettingsBadges(flag) labelchildren: this.createSettingsBadges(flag)
})); }));
for (let flag in indicators) inneritems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsSwitch, { for (let flag in indicators) inneritems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsSaveItem, {
className: BDFDB.disCN.marginbottom8, className: BDFDB.disCN.marginbottom8,
type: "Switch",
plugin: this, plugin: this,
keys: ["indicators", flag], keys: ["indicators", flag],
label: this.defaults.indicators[flag].name, label: this.defaults.indicators[flag].name,
@ -217,55 +220,56 @@ class BadgesEverywhere {
} }
processMemberListItem (e) { processMemberListItem (e) {
if (!BDFDB.DataUtils.get(this, "settings", "showInMemberList")) return; if (e.instance.props.user && BDFDB.DataUtils.get(this, "settings", "showInMemberList")) {
if (e.instance.props.user) this.injectBadges(e.instance, BDFDB.ReactUtils.getValue(e.returnvalue, "props.decorators.props.children"), e.instance.props.user, "list"); this.injectBadges(e.instance, BDFDB.ReactUtils.getValue(e.returnvalue, "props.decorators.props.children"), e.instance.props.user, "list");
}
} }
processMessageUsername (e) { processMessageUsername (e) {
if (!BDFDB.DataUtils.get(this, "settings", "showInChat")) return;
let user = BDFDB.ReactUtils.getValue(e.instance, "props.message.author"); let user = BDFDB.ReactUtils.getValue(e.instance, "props.message.author");
if (user) this.injectBadges(e.instance, BDFDB.ReactUtils.getValue(e.returnvalue, "props.children.props.children"), user, "chat"); if (user && BDFDB.DataUtils.get(this, "settings", "showInChat")) {
this.injectBadges(e.instance, BDFDB.ReactUtils.getValue(e.returnvalue, "props.children.props.children"), user, "chat");
}
} }
processUserPopout (e) { processUserPopout (e) {
if (!BDFDB.DataUtils.get(this, "settings", "showInPopout")) return; if (e.instance.props.user && BDFDB.DataUtils.get(this, "settings", "showInPopout")) {
if (e.instance.props.user) {
let [children, index] = BDFDB.ReactUtils.findChildren(e.returnvalue, {name: "CustomStatus"}); let [children, index] = BDFDB.ReactUtils.findChildren(e.returnvalue, {name: "CustomStatus"});
if (index > -1) this.injectBadges(e.instance, children, e.instance.props.user, "popout", e.instance.props.activity && e.instance.props.activity.type != BDFDB.DiscordConstants.ActivityTypes.CUSTOM_STATUS); if (index > -1) this.injectBadges(e.instance, children, e.instance.props.user, "popout", e.instance.props.activity && e.instance.props.activity.type != BDFDB.DiscordConstants.ActivityTypes.CUSTOM_STATUS);
} }
} }
injectBadges (instance, children, info, type, colored) { injectBadges (instance, children, user, type, colored) {
if (!BDFDB.ArrayUtils.is(children) || !info || info.bot) return; if (!BDFDB.ArrayUtils.is(children) || !user || user.bot) return;
if (!BDFDB.ArrayUtils.is(this.requestedusers[info.id])) { if (!BDFDB.ArrayUtils.is(this.requestedusers[user.id])) {
this.requestedusers[info.id] = [instance]; this.requestedusers[user.id] = [instance];
BDFDB.LibraryModules.APIUtils.get(BDFDB.DiscordConstants.Endpoints.USER_PROFILE(info.id)).then(result => { BDFDB.LibraryModules.APIUtils.get(BDFDB.DiscordConstants.Endpoints.USER_PROFILE(user.id)).then(result => {
let usercopy = Object.assign({}, result.body.user); let usercopy = Object.assign({}, result.body.user);
if (result.body.premium_since) usercopy.flags += this.nitroflag; if (result.body.premium_since) usercopy.flags += this.nitroflag;
usercopy.premium_since = result.body.premium_since; usercopy.premium_since = result.body.premium_since;
if (result.body.premium_guild_since) usercopy.flags += this.boostflag; if (result.body.premium_guild_since) usercopy.flags += this.boostflag;
usercopy.premium_guild_since = result.body.premium_guild_since; usercopy.premium_guild_since = result.body.premium_guild_since;
this.loadedusers[info.id] = usercopy; this.loadedusers[user.id] = usercopy;
for (let queredinstance of this.requestedusers[info.id]) BDFDB.ReactUtils.forceUpdate(queredinstance); for (let queredinstance of this.requestedusers[user.id]) BDFDB.ReactUtils.forceUpdate(queredinstance);
}); });
} }
else if (!this.loadedusers[info.id]) this.requestedusers[info.id].push(instance); else if (!this.loadedusers[user.id]) this.requestedusers[user.id].push(instance);
else children.push(this.createBadges(info, type, colored)); else children.push(this.createBadges(user, type, colored));
} }
createBadges (info, type, uncolored) { createBadges (user, type, uncolored) {
let badges = BDFDB.DataUtils.get(this, "badges"); let badges = BDFDB.DataUtils.get(this, "badges");
let indicators = BDFDB.DataUtils.get(this, "indicators"); let indicators = BDFDB.DataUtils.get(this, "indicators");
let settings = BDFDB.DataUtils.get(this, "settings"); let settings = BDFDB.DataUtils.get(this, "settings");
if (uncolored == undefined) uncolored = !settings.useColoredVersion; if (uncolored == undefined) uncolored = !settings.useColoredVersion;
let badgewrapper = BDFDB.ReactUtils.elementToReact(BDFDB.DOMUtils.create(`<span class="BE-badges BE-badges-${type} ${uncolored ? BDFDB.disCN.userprofiletopsectionplaying : BDFDB.disCN.userprofiletopsectionnormal}" style="all: unset !important;"></span>`)); let badgewrapper = BDFDB.ReactUtils.elementToReact(BDFDB.DOMUtils.create(`<span class="BE-badges BE-badges-${type} ${uncolored ? BDFDB.disCN.userprofiletopsectionplaying : BDFDB.disCN.userprofiletopsectionnormal}" style="all: unset !important;"></span>`));
badgewrapper.props.children = []; badgewrapper.props.children = [];
for (let flag in badges) if ((this.loadedusers[info.id].flags | flag) == this.loadedusers[info.id].flags && badges[flag]) { for (let flag in badges) if ((this.loadedusers[user.id].flags | flag) == this.loadedusers[user.id].flags && badges[flag]) {
badgewrapper.props.children.push(this.createBadge(settings.showNitroDate ? this.getTimeString(info.id, flag) : null, type, flag, flag == this.boostflag ? BDFDB.LibraryModules.GuildBoostUtils.getUserLevel(this.loadedusers[info.id].premium_guild_since) : null)); badgewrapper.props.children.push(this.createBadge(settings.showNitroDate ? this.getTimeString(user.id, flag) : null, type, flag, flag == this.boostflag ? BDFDB.LibraryModules.GuildBoostUtils.getUserLevel(this.loadedusers[user.id].premium_guild_since) : null));
} }
let member = BDFDB.LibraryModules.MemberStore.getMember(BDFDB.LibraryModules.LastGuildStore.getGuildId(), info.id); let member = BDFDB.LibraryModules.MemberStore.getMember(BDFDB.LibraryModules.LastGuildStore.getGuildId(), user.id);
if (indicators.CURRENT_GUILD_BOOST && member && member.premiumSince) { if (indicators.CURRENT_GUILD_BOOST && member && member.premiumSince) {
badgewrapper.props.children.push(this.createBadge(settings.showNitroDate ? this.getTimeString(info.id, "CURRENT_GUILD_BOOST") : null, type, "CURRENT_GUILD_BOOST")); badgewrapper.props.children.push(this.createBadge(settings.showNitroDate ? this.getTimeString(user.id, "CURRENT_GUILD_BOOST") : null, type, "CURRENT_GUILD_BOOST"));
} }
return badgewrapper.props.children.length ? badgewrapper : null; return badgewrapper.props.children.length ? badgewrapper : null;
} }

View File

@ -622,7 +622,7 @@ class EditServers {
updateGuildSidebar() { updateGuildSidebar() {
if (document.querySelector(BDFDB.dotCN.guildheader)) { if (document.querySelector(BDFDB.dotCN.guildheader)) {
var ins = BDFDB.ReactUtils.findOwner(document.querySelector(BDFDB.dotCN.app), {name: ["GuildSidebar", "GuildHeader"], all: true, noCopies: true, depth: 99999999, time: 99999999}); var ins = BDFDB.ReactUtils.findOwner(document.querySelector(BDFDB.dotCN.app), {name: ["GuildSidebar", "GuildHeader"], all: true, noCopies: true, depth: 99999999, time: 99999999});
if (ins) for (let i in ins) ins[i].updater.enqueueForceUpdate(ins[i]); if (ins) for (let i in ins) ins[i].updater.enqueueForceUpdate(ins[i])
} }
} }

View File

@ -94,8 +94,9 @@ class GoogleTranslateOption {
settingsitems = settingsitems.concat(this.createSelects(false)); settingsitems = settingsitems.concat(this.createSelects(false));
for (let key in settings) settingsitems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsSwitch, { for (let key in settings) settingsitems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsSaveItem, {
className: BDFDB.disCN.marginbottom8, className: BDFDB.disCN.marginbottom8,
type: "Switch",
plugin: this, plugin: this,
keys: ["settings", key], keys: ["settings", key],
label: this.defaults.settings[key].description, label: this.defaults.settings[key].description,
@ -297,7 +298,7 @@ class GoogleTranslateOption {
className: BDFDB.disCN.textareapickerbuttoncontainer, className: BDFDB.disCN.textareapickerbuttoncontainer,
children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.ChannelTextAreaButton, { children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.ChannelTextAreaButton, {
className: ["translate-button", this.translating ? "translating-active" : null, BDFDB.disCN.textareapickerbutton].filter(n => n).join(" "), className: ["translate-button", this.translating ? "translating-active" : null, BDFDB.disCN.textareapickerbutton].filter(n => n).join(" "),
iconSVG: `<svg version="1.1" xmlns="http://www.w3.org/2000/svg" class="${BDFDB.disCN.textareaicon}" viewBox="0 0 22 22" fill="currentColor"><path d="M 19.794, 3.299 H 9.765 L 8.797, 0 h -6.598 C 0.99, 0, 0, 0.99, 0, 2.199 V 16.495 c 0, 1.21, 0.99, 2.199, 2.199, 2.199 H 9.897 l 1.1, 3.299 H 19.794 c 1.21, 0, 2.199 -0.99, 2.199 -2.199 V 5.498 C 21.993, 4.289, 21.003, 3.299, 19.794, 3.299 z M 5.68, 13.839 c -2.48, 0 -4.492 -2.018 -4.492 -4.492 s 2.018 -4.492, 4.492 -4.492 c 1.144, 0, 2.183, 0.407, 3.008, 1.171 l 0.071, 0.071 l -1.342, 1.298 l -0.066 -0.06 c -0.313 -0.297 -0.858 -0.643 -1.671 -0.643 c -1.441, 0 -2.612, 1.193 -2.612, 2.661 c 0, 1.468, 1.171, 2.661, 2.612, 2.661 c 1.507, 0, 2.161 -0.962, 2.337 -1.606 h -2.43 v -1.704 h 4.344 l 0.016, 0.077 c 0.044, 0.231, 0.06, 0.434, 0.06, 0.665 C 10.001, 12.036, 8.225, 13.839, 5.68, 13.839 z M 11.739, 9.979 h 4.393 c 0, 0 -0.374, 1.446 -1.715, 3.008 c -0.588 -0.676 -0.995 -1.336 -1.254 -1.864 h -1.089 L 11.739, 9.979 z M 13.625, 13.839 l -0.588, 0.583 l -0.72 -2.452 C 12.685, 12.63, 13.13, 13.262, 13.625, 13.839 z M 20.893, 19.794 c 0, 0.605 -0.495, 1.1 -1.1, 1.1 H 12.096 l 2.199 -2.199 l -0.896 -3.041 l 1.012 -1.012 l 2.953, 2.953 l 0.803 -0.803 l -2.975 -2.953 c 0.99 -1.138, 1.759 -2.474, 2.106 -3.854 h 1.397 V 8.841 H 14.697 v -1.144 h -1.144 v 1.144 H 11.398 l -1.309 -4.443 H 19.794 c 0.605, 0, 1.1, 0.495, 1.1, 1.1 V 19.794 z"/></svg>` iconSVG: `<svg x="0" y="0" class="${BDFDB.disCN.textareaicon}" aria-hidden="false" width="22" height="22" viewBox="0 0 22 22" fill="currentColor"><path d="M 19.794, 3.299 H 9.765 L 8.797, 0 h -6.598 C 0.99, 0, 0, 0.99, 0, 2.199 V 16.495 c 0, 1.21, 0.99, 2.199, 2.199, 2.199 H 9.897 l 1.1, 3.299 H 19.794 c 1.21, 0, 2.199 -0.99, 2.199 -2.199 V 5.498 C 21.993, 4.289, 21.003, 3.299, 19.794, 3.299 z M 5.68, 13.839 c -2.48, 0 -4.492 -2.018 -4.492 -4.492 s 2.018 -4.492, 4.492 -4.492 c 1.144, 0, 2.183, 0.407, 3.008, 1.171 l 0.071, 0.071 l -1.342, 1.298 l -0.066 -0.06 c -0.313 -0.297 -0.858 -0.643 -1.671 -0.643 c -1.441, 0 -2.612, 1.193 -2.612, 2.661 c 0, 1.468, 1.171, 2.661, 2.612, 2.661 c 1.507, 0, 2.161 -0.962, 2.337 -1.606 h -2.43 v -1.704 h 4.344 l 0.016, 0.077 c 0.044, 0.231, 0.06, 0.434, 0.06, 0.665 C 10.001, 12.036, 8.225, 13.839, 5.68, 13.839 z M 11.739, 9.979 h 4.393 c 0, 0 -0.374, 1.446 -1.715, 3.008 c -0.588 -0.676 -0.995 -1.336 -1.254 -1.864 h -1.089 L 11.739, 9.979 z M 13.625, 13.839 l -0.588, 0.583 l -0.72 -2.452 C 12.685, 12.63, 13.13, 13.262, 13.625, 13.839 z M 20.893, 19.794 c 0, 0.605 -0.495, 1.1 -1.1, 1.1 H 12.096 l 2.199 -2.199 l -0.896 -3.041 l 1.012 -1.012 l 2.953, 2.953 l 0.803 -0.803 l -2.975 -2.953 c 0.99 -1.138, 1.759 -2.474, 2.106 -3.854 h 1.397 V 8.841 H 14.697 v -1.144 h -1.144 v 1.144 H 11.398 l -1.309 -4.443 H 19.794 c 0.605, 0, 1.1, 0.495, 1.1, 1.1 V 19.794 z"/></svg>`
}), }),
width: 400, width: 400,
padding: 10, padding: 10,

View File

@ -3,7 +3,7 @@
class OldTitleBar { class OldTitleBar {
getName () {return "OldTitleBar";} getName () {return "OldTitleBar";}
getVersion () {return "1.5.9";} getVersion () {return "1.6.0";}
getAuthor () {return "DevilBro";} getAuthor () {return "DevilBro";}
@ -11,14 +11,14 @@ class OldTitleBar {
constructor () { constructor () {
this.changelog = { this.changelog = {
"fixed":[["Activity Page","Fixed the issue where no icosn woud be added on the activity page"]] "improved":[["New Library Structure & React","Restructured my Library and switched to React rendering instead of DOM manipulation"]]
}; };
this.patchModules = { this.patchModules = {
"HeaderBar":["componentDidMount","componentDidUpdate"], App: "render",
"HeaderBarContainer":["componentDidMount","componentDidUpdate"], HeaderBarContainer: "render",
"StandardSidebarView":["componentDidMount","componentWillUnmount"], StandardSidebarView: "render",
"AuthWrapper":["componentDidMount","componentWillUnmount"] AuthWrapper: "render"
}; };
} }
@ -26,65 +26,45 @@ class OldTitleBar {
this.patched = false; this.patched = false;
this.css = ` this.css = `
.hidden-by-OTB ${BDFDB.dotCN.titlebar}, .OTB-enabled ${BDFDB.dotCN.splashbackground}:before {
.hidden-by-OTB ${BDFDB.dotCN.titlebar} + ${BDFDB.dotCNS.app + BDFDB.dotCN.splashbackground}:before {
display: none !important; display: none !important;
} }
.platform-osx.OTB-enabled ${BDFDB.dotCN.guildswrapper} {
.hidden-by-OTB .platform-osx ${BDFDB.dotCN.guildswrapper} {
margin-top: 0; margin-top: 0;
} }
.hidden-by-OTB .platform-osx ${BDFDB.dotCN.guildsscroller} { .platform-osx.OTB-enabled ${BDFDB.dotCN.guildsscroller} {
padding-top: 10px; padding-top: 10px;
} }
body:not(.settingsTitlebarOTB-added) ${BDFDB.dotCN.channelheaderheaderbar} { .OTB-toolbar {
flex: 1 1 auto;
justify-content: flex-end;
}
.OTB-settingsToolbar {
position: absolute;
top: 0;
right: 0;
padding: 10px;
z-index: 2;
-webkit-app-region: drag !important;
}
.OTB-enabled ${BDFDB.dotCN.splashbackground} .OTB-settingsToolbar {
background: rgba(0, 0, 0, 0.3);
border-radius: 0 0 0 5px;
}
${BDFDB.dotCN.channelheaderheaderbar} {
-webkit-app-region: drag !important; -webkit-app-region: drag !important;
} }
${BDFDB.dotCN.channelheaderheaderbar} *, ${BDFDB.dotCN.channelheaderheaderbar} *,
${BDFDB.dotCN.contextmenu} * { ${BDFDB.dotCN.contextmenu} * {
-webkit-app-region: no-drag !important; -webkit-app-region: no-drag !important;
}
.settingsTitlebarOTB {
position: relative;
z-index: 1000;
padding: 10px;
-webkit-app-region: drag;
}`; }`;
this.dividerMarkup = `<div class="buttonOTB dividerOTB ${BDFDB.disCN.channelheaderdivider}"></div>`;
this.reloadButtonMarkup =
`<div class="${BDFDB.disCNS.channelheadericonwrapper + BDFDB.disCN.channelheadericonclickable} buttonOTB reloadButtonOTB">
<svg class="${BDFDB.disCN.channelheadericon}" xmlns="http://www.w3.org/2000/svg">
<path fill="currentColor" stroke="none" transform="translate(4,4)" d="M17.061,7.467V0l-2.507,2.507C13.013,0.96,10.885,0,8.528,0C3.813,0,0.005,3.819,0.005,8.533s3.808,8.533,8.523,8.533c3.973,0,7.301-2.72,8.245-6.4h-2.219c-0.88,2.485-3.237,4.267-6.027,4.267c-3.536,0-6.4-2.864-6.4-6.4s2.864-6.4,6.4-6.4c1.765,0,3.349,0.736,4.507,1.893l-3.44,3.44H17.061z"/>
</svg>
</div>`;
this.minButtonMarkup =
`<div class="${BDFDB.disCNS.channelheadericonwrapper + BDFDB.disCN.channelheadericonclickable} buttonOTB minButtonOTB">
<svg class="${BDFDB.disCN.channelheadericon}" xmlns="http://www.w3.org/2000/svg" width="26" height="26">
<path stroke-width="2" stroke="currentColor" fill="none" d="M6 18 l13 0"/>
</svg>
</div>`;
this.maxButtonMarkup =
`<div class="${BDFDB.disCNS.channelheadericonwrapper + BDFDB.disCN.channelheadericonclickable} buttonOTB maxButtonOTB">
<svg class="${BDFDB.disCN.channelheadericon}" xmlns="http://www.w3.org/2000/svg" width="26" height="26"><g></g></svg>
</div>`;
this.maxButtonInnerMin = `<path stroke-width="2" stroke="currentColor" fill="none" d="M6 6 l13 0 l0 13 l-13 0 l0 -13"/>`;
this.maxButtonInnerMax = `<path stroke-width="2" stroke="currentColor" fill="none" d="M6 9 l10 0 l0 10 l-10 0 l0 -10 m3 -3 l10 0 l0 10"/>`;
this.closeButtonMarkup =
`<div class="${BDFDB.disCNS.channelheadericonwrapper + BDFDB.disCN.channelheadericonclickable} buttonOTB closeButtonOTB">
<svg class="${BDFDB.disCN.channelheadericon}" xmlns="http://www.w3.org/2000/svg" width="26" height="26">
<path stroke-width="2" stroke="currentColor" fill="none" d="M6 6 l13 13 m0 -13 l-13 13"/>
</svg>
</div>`;
this.defaults = { this.defaults = {
settings: { settings: {
displayNative: {value:!!document.querySelector(".platform-linux"), description:"Displays the native Title Bar."}, displayNative: {value:!!document.querySelector(".platform-linux"), description:"Displays the native Title Bar."},
@ -98,32 +78,32 @@ class OldTitleBar {
getSettingsPanel () { getSettingsPanel () {
if (!global.BDFDB || typeof BDFDB != "object" || !BDFDB.loaded || !this.started) return; if (!global.BDFDB || typeof BDFDB != "object" || !BDFDB.loaded || !this.started) return;
let settings = BDFDB.DataUtils.get(this, "settings"); let settings = BDFDB.DataUtils.get(this, "settings");
var settingshtml = `<div class="${this.name}-settings BDFDB-settings"><div class="${BDFDB.disCNS.titledefault + BDFDB.disCNS.titlesize18 + BDFDB.disCNS.height24 + BDFDB.disCNS.weightnormal + BDFDB.disCN.marginbottom8}">${this.name}</div><div class="BDFDB-settings-inner">`; let settingsitems = [];
for (let key in settings) {
settingshtml += `<div class="${BDFDB.disCNS.flex + BDFDB.disCNS.horizontal + BDFDB.disCNS.justifystart + BDFDB.disCNS.aligncenter + BDFDB.disCNS.nowrap + BDFDB.disCN.marginbottom8}" style="flex: 1 1 auto;"><h3 class="${BDFDB.disCNS.titledefault + BDFDB.disCNS.marginreset + BDFDB.disCNS.weightmedium + BDFDB.disCNS.titlesize16 + 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="settings ${key}" class="${BDFDB.disCNS.switchinnerenabled + BDFDB.disCN.switchinner} settings-switch${key == "displayNative" ? " nativetitlebar-switch" : ""}"${settings[key] ? " checked" : ""}></div></div>`;
}
settingshtml += `</div></div>`;
let settingspanel = BDFDB.DOMUtils.create(settingshtml); for (let key in settings) settingsitems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsSaveItem, {
className: BDFDB.disCN.marginbottom8,
BDFDB.initElements(settingspanel, this); type: "Switch",
plugin: this,
BDFDB.ListenerUtils.add(this, settingspanel, "click", ".nativetitlebar-switch", e => { keys: ["settings", key],
if (this.patchMainScreen(e.currentTarget.checked)) { label: this.defaults.settings[key].description,
this.patched = !this.patched; value: settings[key],
let notifybar = document.querySelector("#OldTitleBarNotifyBar"); onChange: key == "displayNative" ? value => {
if (notifybar) notifybar.querySelector(BDFDB.dotCN.noticedismiss).click(); if (this.patchMainScreen(value)) {
if (this.patched) { this.patched = !this.patched;
notifybar = BDFDB.NotificationUtils.notice("Changed nativebar settings, relaunch to see changes:", {type:"danger",btn:"Relaunch",id:"OldTitleBarNotifyBar"}); let notifybar = document.querySelector("#OldTitleBarNotifyBar");
notifybar.querySelector(BDFDB.dotCN.noticebutton).addEventListener("click", () => { if (notifybar) notifybar.querySelector(BDFDB.dotCN.noticedismiss).click();
BDFDB.LibraryRequires.electron.remote.app.relaunch(); if (this.patched) {
BDFDB.LibraryRequires.electron.remote.app.quit(); notifybar = BDFDB.NotificationUtils.notice("Changed nativebar settings, relaunch to see changes:", {type:"danger",btn:"Relaunch",id:"OldTitleBarNotifyBar"});
}); notifybar.querySelector(BDFDB.dotCN.noticebutton).addEventListener("click", () => {
BDFDB.LibraryRequires.electron.remote.app.relaunch();
BDFDB.LibraryRequires.electron.remote.app.quit();
});
}
} }
} } : null
}); }));
return settingspanel; return BDFDB.PluginUtils.createSettingsPanel(this, settingsitems);
} }
//legacy //legacy
@ -156,14 +136,14 @@ class OldTitleBar {
BDFDB.PluginUtils.init(this); BDFDB.PluginUtils.init(this);
BDFDB.ListenerUtils.add(this, window, "resize", e => { BDFDB.ListenerUtils.add(this, window, "resize", e => {
this.changeMaximizeButtons(); BDFDB.ModuleUtils.forceAllUpdates(this, ["HeaderBarContainer", "StandardSidebarView"]);
}); });
this.window = BDFDB.LibraryRequires.electron.remote.getCurrentWindow(); this.window = BDFDB.LibraryRequires.electron.remote.getCurrentWindow();
this.patchMainScreen(BDFDB.DataUtils.get(this, "settings", "displayNative")); this.patchMainScreen(BDFDB.DataUtils.get(this, "settings", "displayNative"));
BDFDB.DOMUtils.addClass([document.body,document.querySelector(BDFDB.dotCN.titlebar)], "hidden-by-OTB"); BDFDB.DOMUtils.addClass(document.documentElement, "OTB-enabled");
BDFDB.ModuleUtils.forceAllUpdates(this); BDFDB.ModuleUtils.forceAllUpdates(this);
} }
@ -175,9 +155,9 @@ class OldTitleBar {
if (global.BDFDB && typeof BDFDB === "object" && BDFDB.loaded) { if (global.BDFDB && typeof BDFDB === "object" && BDFDB.loaded) {
this.stopping = true; this.stopping = true;
BDFDB.DOMUtils.remove(".headerbarOTB", ".settingsTitlebarOTB"); BDFDB.ModuleUtils.forceAllUpdates(this);
BDFDB.DOMUtils.removeClassFromDOM("hidden-by-OTB", "settingsTitlebarOTB-added"); BDFDB.DOMUtils.removeClassFromDOM("OTB-enabled");
BDFDB.PluginUtils.clear(this); BDFDB.PluginUtils.clear(this);
} }
@ -186,82 +166,99 @@ class OldTitleBar {
// begin of own functions // begin of own functions
processHeaderBar (instance, wrapper, returnvalue) { onSettingsClosed () {
this.addTitleBar(); if (this.SettingsUpdated) {
} delete this.SettingsUpdated;
BDFDB.ModuleUtils.forceAllUpdates(this, ["HeaderBarContainer", "StandardSidebarView"]);
processHeaderBarContainer (instance, wrapper, returnvalue) {
this.addTitleBar();
}
processStandardSidebarView (instance, wrapper, returnvalue, methodnames) {
this.processAuthWrapper(instance, wrapper, returnvalue, methodnames);
}
processAuthWrapper (instance, wrapper, returnvalue, methodnames) {
if (methodnames.includes("componentDidMount")) {
this.addSettingsTitleBar(wrapper);
}
else if (methodnames.includes("componentWillUnmount")) {
BDFDB.DOMUtils.remove(".settingsTitlebarOTB");
BDFDB.DOMUtils.removeClass(document.body, "settingsTitlebarOTB-added");
this.addTitleBar();
} }
} }
addTitleBar () { processApp (e) {
BDFDB.DOMUtils.remove(".headerbarOTB"); let [children, index] = BDFDB.ReactUtils.findChildren(e.returnvalue, {props:[["type",["WINDOWS", "MACOS"]]]});
let settings = BDFDB.DataUtils.get(this, "settings"); if (index > -1) children[index] = null;
if (BDFDB.DataUtils.get(this, "settings", "addOldBar")) {
var headerbar = BDFDB.DOMUtils.create(`<span class="headerbarOTB ${BDFDB.disCNS.flex2 + BDFDB.disCNS.horizontal + BDFDB.disCNS.justifystart + BDFDB.disCNS.aligncenter + BDFDB.disCN.nowrap}"></span>`);
this.createButtons(headerbar);
let headerbaricon = document.querySelector(BDFDB.dotCN.channelheaderchildren);
if (headerbaricon) headerbaricon.parentElement.appendChild(headerbar);
this.changeMaximizeButtons();
}
} }
addSettingsTitleBar (settingspane) { processHeaderBarContainer (e) {
BDFDB.DOMUtils.remove(".settingsTitlebarOTB"); if (!BDFDB.DataUtils.get(this, "settings", "addOldBar")) return;
if (BDFDB.DataUtils.get(this, "settings", "addToSettings")) { let children = BDFDB.ReactUtils.getValue(e.returnvalue, "props.toolbar.props.children");
BDFDB.DOMUtils.addClass(document.body, "settingsTitlebarOTB-added"); if (!children) {
var settingsbar = BDFDB.DOMUtils.create(`<div class="settingsTitlebarOTB ${BDFDB.disCNS.flex2 + BDFDB.disCNS.horizontal + BDFDB.disCNS.justifyend + BDFDB.disCNS.aligncenter + BDFDB.disCN.nowrap}"></div>`); let [oldToolbarParent, oldToolbarIndex] = BDFDB.ReactUtils.findChildren(e.returnvalue, {props:[["className", "OTB-toolbar"]]});
this.createButtons(settingsbar); if (oldToolbarIndex > -1) oldToolbarParent.splice(oldToolbarIndex, 1);
settingspane.parentElement.appendChild(settingsbar); let toolbar = BDFDB.ReactUtils.createElement("div", {
this.changeMaximizeButtons(); className: BDFDB.disCNS.channelheadertoolbar + "OTB-toolbar",
} children: []
}
createButtons (bar) {
if (BDFDB.DataUtils.get(this, "settings", "reloadButton")) {
bar.appendChild(BDFDB.DOMUtils.create(this.dividerMarkup));
var reloadbutton = BDFDB.DOMUtils.create(this.reloadButtonMarkup);
bar.appendChild(reloadbutton);
var reloadbuttonicon = reloadbutton.querySelector(BDFDB.dotCN.channelheadericon);
reloadbuttonicon.addEventListener("click", () => {this.window.reload();});
reloadbuttonicon.addEventListener("mouseenter", e => {
BDFDB.TooltipUtils.create(reloadbuttonicon, "Reload", {type:"bottom",selector:"reload-button-tooltip"});
}); });
e.returnvalue.props.children.push(toolbar);
children = toolbar.props.children;
} }
bar.appendChild(BDFDB.DOMUtils.create(this.dividerMarkup)); this.injectButtons(children, true);
var minbutton = BDFDB.DOMUtils.create(this.minButtonMarkup);
bar.appendChild(minbutton);
minbutton.querySelector(BDFDB.dotCN.channelheadericon).addEventListener("click", () => {this.window.minimize();});
var maxbutton = BDFDB.DOMUtils.create(this.maxButtonMarkup);
bar.appendChild(maxbutton);
maxbutton.querySelector(BDFDB.dotCN.channelheadericon).addEventListener("click", () => {
if (this.isMaximized()) this.window.unmaximize();
else this.window.maximize();
});
var closebutton = BDFDB.DOMUtils.create(this.closeButtonMarkup);
bar.appendChild(closebutton);
closebutton.querySelector(BDFDB.dotCN.channelheadericon).addEventListener("click", () => {this.window.close();});
if (BDFDB.DOMUtils.containsClass(bar, "settingsTitlebarOTB")) BDFDB.DOMUtils.remove(bar.querySelector(".dividerOTB"));
} }
changeMaximizeButtons () { processStandardSidebarView (e) {
var innerHTML = this.isMaximized() ? this.maxButtonInnerMax : this.maxButtonInnerMin; if (!BDFDB.ArrayUtils.is(e.returnvalue.props.children)) e.returnvalue.props.children = [e.returnvalue.props.children];
document.querySelectorAll(".maxButtonOTB g").forEach(g => {g.innerHTML = innerHTML;}); this.injectSettingsToolbar(e.returnvalue.props.children);
}
processAuthWrapper (e) {
if (!BDFDB.ArrayUtils.is(e.returnvalue.props.children)) e.returnvalue.props.children = [e.returnvalue.props.children];
this.injectSettingsToolbar(e.returnvalue.props.children, true);
}
injectSettingsToolbar (children, fixed) {
if (!BDFDB.DataUtils.get(this, "settings", "addToSettings")) return;
let toolbar = BDFDB.ReactUtils.createElement("div", {
className: BDFDB.disCNS.channelheadertoolbar + "OTB-settingsToolbar",
children: [],
style: fixed ? {position: "fixed"} : null
});
this.injectButtons(toolbar.props.children);
children.push(toolbar);
}
injectButtons (children, addFirstDivider) {
if (addFirstDivider) children.push(BDFDB.ReactUtils.createElement("div", {className: BDFDB.disCN.channelheaderdivider}))
if (BDFDB.DataUtils.get(this, "settings", "reloadButton")) {
children.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.TooltipContainer, {
text: BDFDB.LanguageUtils.LanguageStrings.ERRORS_RELOAD,
tooltipConfig: {type: "bottom"},
children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Clickable, {
className: BDFDB.disCNS.channelheadericonwrapper + BDFDB.disCN.channelheadericonclickable,
onClick: _ => {this.window.reload();},
children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SvgIcon, {
className: BDFDB.disCNS.channelheadericon + "OTB-reloadButton",
iconSVG: `<svg><path fill="currentColor" stroke="none" transform="translate(3,4)" d="M 17.061, 7.467 V 0 l -2.507, 2.507 C 13.013, 0.96, 10.885, 0, 8.528, 0 C 3.813, 0, 0.005, 3.819, 0.005, 8.533 s 3.808, 8.533, 8.523, 8.533 c 3.973, 0, 7.301 -2.72, 8.245 -6.4 h -2.219 c -0.88, 2.485 -3.237, 4.267 -6.027, 4.267 c -3.536, 0 -6.4 -2.864 -6.4 -6.4 s 2.864 -6.4, 6.4 -6.4 c 1.765, 0, 3.349, 0.736, 4.507, 1.893 l -3.44, 3.44 H 17.061 z"/></svg>`
})
})
}));
children.push(BDFDB.ReactUtils.createElement("div", {className: BDFDB.disCN.channelheaderdivider}));
};
children.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Clickable, {
className: BDFDB.disCNS.channelheadericonwrapper + BDFDB.disCN.channelheadericonclickable,
onClick: _ => {this.window.minimize();},
children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SvgIcon, {
className: BDFDB.disCNS.channelheadericon + "OTB-minButton",
iconSVG: `<svg width="26" height="26"><path stroke-width="2" stroke="currentColor" fill="none" d="M6 18 l13 0"/></svg>`
})
}));
children.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Clickable, {
className: BDFDB.disCNS.channelheadericonwrapper + BDFDB.disCN.channelheadericonclickable,
onClick: _ => {
if (this.isMaximized()) this.window.unmaximize();
else this.window.maximize();
},
children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SvgIcon, {
className: BDFDB.disCNS.channelheadericon + "OTB-maxButton",
iconSVG: this.isMaximized() ? `<svg width="26" height="26"><path stroke-width="2" stroke="currentColor" fill="none" d="M6 9 l10 0 l0 10 l-10 0 l0 -10 m3 -3 l10 0 l0 10"/></svg>` : `<svg width="26" height="26"><path stroke-width="2" stroke="currentColor" fill="none" d="M6 6 l13 0 l0 13 l-13 0 l0 -13"/></svg>`
})
}));
children.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Clickable, {
className: BDFDB.disCNS.channelheadericonwrapper + BDFDB.disCN.channelheadericonclickable,
onClick: _ => {this.window.close();},
children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SvgIcon, {
className: BDFDB.disCNS.channelheadericon + "OTB-closeButton",
iconSVG: `<svg width="26" height="26"><path stroke-width="2" stroke="currentColor" fill="none" d="M6 6 l13 13 m0 -13 l-13 13"/></svg>`
})
}));
} }
isMaximized () { isMaximized () {

View File

@ -65,8 +65,9 @@ class OwnerTag {
settingsitems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.FormComponents.FormDivider, { settingsitems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.FormComponents.FormDivider, {
className: BDFDB.disCN.marginbottom8 className: BDFDB.disCN.marginbottom8
})); }));
for (let key in settings) (!this.defaults.settings[key].inner ? settingsitems : inneritems).push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsSwitch, { for (let key in settings) (!this.defaults.settings[key].inner ? settingsitems : inneritems).push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsSaveItem, {
className: BDFDB.disCN.marginbottom8, className: BDFDB.disCN.marginbottom8,
type: "Switch",
plugin: this, plugin: this,
keys: ["settings", key], keys: ["settings", key],
label: this.defaults.settings[key].description, label: this.defaults.settings[key].description,