BetterDiscordAddons/Plugins/OldTitleBar/OldTitleBar.plugin.js

291 lines
14 KiB
JavaScript
Raw Normal View History

2019-01-31 17:06:48 +01:00
//META{"name":"OldTitleBar","website":"https://github.com/mwittrien/BetterDiscordAddons/tree/master/Plugins/OldTitleBar","source":"https://raw.githubusercontent.com/mwittrien/BetterDiscordAddons/master/Plugins/OldTitleBar/OldTitleBar.plugin.js"}*//
2019-03-22 20:54:11 +01:00
2018-10-11 10:21:26 +02:00
class OldTitleBar {
2019-01-17 13:46:11 +01:00
getName () {return "OldTitleBar";}
2019-04-23 12:39:10 +02:00
getVersion () {return "1.5.6";}
2019-01-17 13:46:11 +01:00
getAuthor () {return "DevilBro";}
getDescription () {return "Reverts the title bar back to its former self.";}
2019-01-26 22:45:19 +01:00
2018-10-11 10:21:26 +02:00
initConstructor () {
2019-03-06 11:30:31 +01:00
this.changelog = {
2019-04-23 12:39:10 +02:00
"fixed":[["Canary/PTB","Fixed the plugin for canary and ptb"]]
2019-03-06 11:30:31 +01:00
};
this.patchModules = {
"HeaderBar":["componentDidMount","componentDidUpdate"],
2019-04-23 12:59:14 +02:00
"HeaderBarContainer":["componentDidMount","componentDidUpdate"],
2019-01-05 20:24:38 +01:00
"StandardSidebarView":["componentDidMount","componentWillUnmount"],
"AuthWrapper":["componentDidMount","componentWillUnmount"]
};
2019-01-26 22:45:19 +01:00
2018-10-11 10:21:26 +02:00
this.patched = false;
2019-01-26 22:45:19 +01:00
2018-10-11 10:21:26 +02:00
this.css = `
2018-11-02 21:01:04 +01:00
.hidden-by-OTB ${BDFDB.dotCN.titlebar},
.hidden-by-OTB ${BDFDB.dotCN.titlebar} + ${BDFDB.dotCNS.app + BDFDB.dotCN.splashbackground}:before {
display: none !important;
2018-10-11 10:21:26 +02:00
}
2019-01-26 22:45:19 +01:00
2019-04-23 12:39:10 +02:00
body:not(.settingsTitlebarOTB-added) ${BDFDB.dotCN.channelheaderheaderbar} {
2018-10-11 10:21:26 +02:00
-webkit-app-region: drag !important;
}
2019-01-26 22:45:19 +01:00
2019-04-23 12:39:10 +02:00
${BDFDB.dotCN.channelheaderheaderbar} *,
2018-10-11 10:21:26 +02:00
${BDFDB.dotCN.contextmenu} * {
-webkit-app-region: no-drag !important;
}
2019-01-26 22:45:19 +01:00
2018-10-11 10:21:26 +02:00
.settingsTitlebarOTB {
position: relative;
z-index: 1000;
padding: 10px;
-webkit-app-region: drag;
}`;
2019-01-26 22:45:19 +01:00
this.dividerMarkup = `<div class="buttonOTB dividerOTB ${BDFDB.disCN.channelheaderdivider}"></div>`;
2019-01-26 22:45:19 +01:00
2018-10-11 10:21:26 +02:00
this.reloadButtonMarkup =
2019-04-23 12:39:10 +02:00
BDFDB.DiscordClassModules.HeaderBar.iconMargin ? `<span class="${BDFDB.disCN.channelheadericonmargin} buttonOTB reloadButtonOTB">
2018-10-11 10:21:26 +02:00
<svg class="${BDFDB.disCNS.channelheadericoninactive + BDFDB.disCN.channelheadericon}" xmlns="http://www.w3.org/2000/svg">
<g fill="none" class="${BDFDB.disCN.channelheadericonforeground}" fill-rule="evenodd">
<path fill="currentColor" 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"/>
</g>
</svg>
2019-04-23 12:39:10 +02:00
</span>`
: `<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>`;
2019-01-26 22:45:19 +01:00
2018-10-11 10:21:26 +02:00
this.minButtonMarkup =
2019-04-23 12:39:10 +02:00
BDFDB.DiscordClassModules.HeaderBar.iconMargin ? `<span class="${BDFDB.disCN.channelheadericonmargin} buttonOTB minButtonOTB">
2018-10-11 10:21:26 +02:00
<svg class="${BDFDB.disCNS.channelheadericoninactive + BDFDB.disCN.channelheadericon}" xmlns="http://www.w3.org/2000/svg" width="26" height="26">
<g fill="none" class="${BDFDB.disCN.channelheadericonforeground}" fill-rule="evenodd">
2019-04-23 12:39:10 +02:00
<path stroke-width="2" stroke="currentColor" fill="none" d="M6 18 l13 0"/>
2018-10-11 10:21:26 +02:00
</g>
</svg>
2019-04-23 12:39:10 +02:00
</span>`
: `<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>`;
2019-01-26 22:45:19 +01:00
2019-01-17 13:46:11 +01:00
this.maxButtonMarkup =
2019-04-23 12:39:10 +02:00
BDFDB.DiscordClassModules.HeaderBar.iconMargin ? `<span class="${BDFDB.disCN.channelheadericonmargin} buttonOTB maxButtonOTB">
2018-10-11 10:21:26 +02:00
<svg class="${BDFDB.disCNS.channelheadericoninactive + BDFDB.disCN.channelheadericon}" xmlns="http://www.w3.org/2000/svg" width="26" height="26">
2019-01-17 13:46:11 +01:00
<g fill="none" class="${BDFDB.disCN.channelheadericonforeground}" fill-rule="evenodd"></g>
2018-10-11 10:21:26 +02:00
</svg>
2019-04-23 12:39:10 +02:00
</span>`
: `<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"/>`;
2019-01-26 22:45:19 +01:00
2018-10-11 10:21:26 +02:00
this.closeButtonMarkup =
2019-04-23 12:39:10 +02:00
BDFDB.DiscordClassModules.HeaderBar.iconMargin ? `<span class="${BDFDB.disCN.channelheadericonmargin} buttonOTB closeButtonOTB">
2018-10-11 10:21:26 +02:00
<svg class="${BDFDB.disCNS.channelheadericoninactive + BDFDB.disCN.channelheadericon}" xmlns="http://www.w3.org/2000/svg" width="26" height="26">
<g fill="none" class="${BDFDB.disCN.channelheadericonforeground}" fill-rule="evenodd">
<path stroke-width="2" stroke="currentColor" d="M6 6 l13 13 m0 -13 l-13 13"/>
</g>
</svg>
2019-04-23 12:39:10 +02:00
</span>`
: `<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>`;
2019-01-26 22:45:19 +01:00
2018-10-11 10:21:26 +02:00
this.defaults = {
settings: {
2018-12-14 18:58:35 +01:00
displayNative: {value:!!document.querySelector(".platform-linux"), description:"Displays the native Title Bar."},
addOldBar: {value:true, description:"Displays the Title Bar in the old fashion."},
2018-11-08 09:49:46 +01:00
addToSettings: {value:true, description:"Adds a Title Bar to Settings Windows."},
reloadButton: {value:false, description:"Adds a Reload Button to the Title Bar."}
2018-10-11 10:21:26 +02:00
}
};
}
getSettingsPanel () {
2019-01-22 11:28:32 +01:00
if (!global.BDFDB || typeof BDFDB != "object" || !BDFDB.loaded || !this.started) return;
2018-10-11 10:21:26 +02:00
var settings = BDFDB.getAllData(this, "settings");
2019-04-18 09:28:20 +02:00
var settingshtml = `<div class="${this.name}-settings BDFDB-settings"><div class="${BDFDB.disCNS.titledefault + BDFDB.disCNS.title + BDFDB.disCNS.size18 + BDFDB.disCNS.height24 + BDFDB.disCNS.weightnormal + BDFDB.disCN.marginbottom8}">${this.name}</div><div class="BDFDB-settings-inner">`;
2018-10-11 10:21:26 +02:00
for (let key in settings) {
2019-01-17 23:48:29 +01:00
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="settings ${key}" class="${BDFDB.disCNS.switchinnerenabled + BDFDB.disCN.switchinner} settings-switch${key == "displayNative" ? " nativetitlebar-switch" : ""}"${settings[key] ? " checked" : ""}></div></div>`;
2018-10-11 10:21:26 +02:00
}
settingshtml += `</div></div>`;
2019-01-26 22:45:19 +01:00
2019-01-17 13:46:11 +01:00
let settingspanel = BDFDB.htmlToElement(settingshtml);
2018-10-11 10:21:26 +02:00
2019-01-17 13:46:11 +01:00
BDFDB.initElements(settingspanel, this);
2018-10-11 10:21:26 +02:00
2019-01-17 23:48:29 +01:00
BDFDB.addEventListener(this, settingspanel, "click", ".nativetitlebar-switch", e => {
if (this.patchMainScreen(e.currentTarget.checked)) {
this.patched = !this.patched;
let notifybar = document.querySelector("#OldTitleBarNotifyBar");
if (notifybar) notifybar.querySelector(BDFDB.dotCN.noticedismiss).click();
if (this.patched) {
notifybar = BDFDB.createNotificationsBar("Changed nativebar settings, relaunch to see changes:", {type:"danger",btn:"Relaunch",id:"OldTitleBarNotifyBar"});
notifybar.querySelector(BDFDB.dotCN.noticebutton).addEventListener("click", () => {
let app = require("electron").remote.app;
app.relaunch();
app.quit();
});
}
}
});
2019-01-26 22:45:19 +01:00
2018-10-11 10:21:26 +02:00
return settingspanel;
}
//legacy
load () {}
start () {
2019-02-04 09:13:15 +01:00
if (!global.BDFDB) global.BDFDB = {myPlugins:{}};
if (global.BDFDB && global.BDFDB.myPlugins && typeof global.BDFDB.myPlugins == "object") global.BDFDB.myPlugins[this.getName()] = this;
2019-01-17 23:48:29 +01:00
var libraryScript = document.querySelector('head script[src="https://mwittrien.github.io/BetterDiscordAddons/Plugins/BDFDB.js"]');
if (!libraryScript || performance.now() - libraryScript.getAttribute("date") > 600000) {
2018-10-11 10:21:26 +02:00
if (libraryScript) libraryScript.remove();
libraryScript = document.createElement("script");
libraryScript.setAttribute("type", "text/javascript");
libraryScript.setAttribute("src", "https://mwittrien.github.io/BetterDiscordAddons/Plugins/BDFDB.js");
2019-01-17 23:48:29 +01:00
libraryScript.setAttribute("date", performance.now());
2019-01-30 21:23:49 +01:00
libraryScript.addEventListener("load", () => {if (global.BDFDB && typeof BDFDB === "object" && BDFDB.loaded) this.initialize();});
2018-10-11 10:21:26 +02:00
document.head.appendChild(libraryScript);
}
2019-01-17 23:48:29 +01:00
else if (global.BDFDB && typeof BDFDB === "object" && BDFDB.loaded) this.initialize();
2018-10-11 10:21:26 +02:00
this.startTimeout = setTimeout(() => {this.initialize();}, 30000);
}
initialize () {
2019-01-17 13:46:11 +01:00
if (global.BDFDB && typeof BDFDB === "object" && BDFDB.loaded) {
2019-01-22 11:05:54 +01:00
if (this.started) return;
2018-10-11 10:21:26 +02:00
BDFDB.loadMessage(this);
2019-01-26 22:45:19 +01:00
2019-03-06 11:30:31 +01:00
BDFDB.addEventListener(this, window, "resize", e => {
this.changeMaximizeButtons();
});
2019-01-26 22:45:19 +01:00
2019-01-17 13:46:11 +01:00
this.window = require("electron").remote.getCurrentWindow();
2019-01-26 22:45:19 +01:00
2018-10-11 10:21:26 +02:00
this.patchMainScreen(BDFDB.getData("displayNative", this, "settings"));
2019-01-26 22:45:19 +01:00
2019-01-17 13:46:11 +01:00
BDFDB.addClass([document.body,document.querySelector(BDFDB.dotCN.titlebar)], "hidden-by-OTB");
2019-01-26 22:45:19 +01:00
BDFDB.WebModules.forceAllUpdates(this);
2018-10-11 10:21:26 +02:00
}
else {
2019-02-12 21:56:34 +01:00
console.error(`%c[${this.getName()}]%c`, 'color: #3a71c1; font-weight: 700;', '', 'Fatal Error: Could not load BD functions!');
2018-10-11 10:21:26 +02:00
}
}
stop () {
2019-01-17 13:46:11 +01:00
if (global.BDFDB && typeof BDFDB === "object" && BDFDB.loaded) {
BDFDB.removeEles(".headerbarOTB", ".settingsTitlebarOTB");
2019-01-26 22:45:19 +01:00
2019-01-17 13:46:11 +01:00
BDFDB.removeClasses("hidden-by-OTB", "settingsTitlebarOTB-added");
2019-01-26 22:45:19 +01:00
2018-10-11 10:21:26 +02:00
BDFDB.unloadMessage(this);
}
}
2019-01-26 22:45:19 +01:00
2018-10-11 10:21:26 +02:00
// begin of own functions
2019-01-26 22:45:19 +01:00
processHeaderBar (instance, wrapper) {
this.addTitleBar();
}
2019-01-26 22:45:19 +01:00
2019-04-23 12:59:14 +02:00
processHeaderBarContainer (instance, wrapper) {
this.addTitleBar();
}
processStandardSidebarView (instance, wrapper, methodnames) {
2019-01-05 20:24:38 +01:00
this.processAuthWrapper(instance, wrapper, methodnames);
}
2019-01-26 22:45:19 +01:00
2019-01-05 20:24:38 +01:00
processAuthWrapper (instance, wrapper, methodnames) {
if (methodnames.includes("componentDidMount")) {
this.addSettingsTitleBar(wrapper);
}
else if (methodnames.includes("componentWillUnmount")) {
2019-01-05 20:24:38 +01:00
BDFDB.removeEles(".settingsTitlebarOTB");
2019-01-17 13:46:11 +01:00
BDFDB.removeClass(document.body, "settingsTitlebarOTB-added");
this.addTitleBar();
}
}
2019-01-26 22:45:19 +01:00
2018-10-11 10:21:26 +02:00
addTitleBar () {
BDFDB.removeEles(".headerbarOTB");
2018-10-11 10:21:26 +02:00
var settings = BDFDB.getAllData(this, "settings");
if (BDFDB.getData("addOldBar", this, "settings")) {
2019-01-17 13:46:11 +01:00
var headerbar = BDFDB.htmlToElement(`<span class="headerbarOTB ${BDFDB.disCNS.flex + BDFDB.disCNS.horizontal + BDFDB.disCNS.horizontal2 + BDFDB.disCNS.directionrow + BDFDB.disCNS.justifystart + BDFDB.disCNS.aligncenter + BDFDB.disCN.nowrap}"></span>`);
this.createButtons(headerbar);
2019-04-23 12:39:10 +02:00
let headerbaricon = BDFDB.DiscordClassModules.HeaderBar.toolbar ? document.querySelector(BDFDB.dotCN.channelheadertoolbar + " > " + BDFDB.dotCN.channelheadericonwrapper) : document.querySelector(BDFDB.dotCN.channelheadertoolbar2 + " > " + BDFDB.dotCN.channelheadericonmargin);
2019-01-17 13:46:11 +01:00
if (headerbaricon) headerbaricon.parentElement.appendChild(headerbar);
this.changeMaximizeButtons();
}
}
2019-01-26 22:45:19 +01:00
addSettingsTitleBar (settingspane) {
BDFDB.removeEles(".settingsTitlebarOTB");
if (BDFDB.getData("addToSettings", this, "settings")) {
2019-01-17 13:46:11 +01:00
BDFDB.addClass(document.body, "settingsTitlebarOTB-added");
2019-04-23 12:39:10 +02:00
var settingsbar = BDFDB.htmlToElement(`<div class="settingsTitlebarOTB ${BDFDB.disCNS.flex + BDFDB.disCNS.horizontal + BDFDB.disCNS.horizontal2 + BDFDB.disCNS.directionrow + BDFDB.disCNS.justifyend + BDFDB.disCNS.aligncenter + BDFDB.disCN.nowrap}"></div>`);
this.createButtons(settingsbar);
settingspane.parentElement.appendChild(settingsbar);
2019-01-17 13:46:11 +01:00
this.changeMaximizeButtons();
}
}
2019-01-26 22:45:19 +01:00
createButtons (bar) {
if (BDFDB.getData("reloadButton", this, "settings")) {
2019-04-23 12:39:10 +02:00
bar.appendChild(BDFDB.htmlToElement(this.dividerMarkup));
2019-01-17 13:46:11 +01:00
var reloadbutton = BDFDB.htmlToElement(this.reloadButtonMarkup);
bar.appendChild(reloadbutton);
var reloadbuttonicon = reloadbutton.querySelector(BDFDB.dotCN.channelheadericon);
reloadbuttonicon.addEventListener("click", () => {this.window.reload();});
reloadbuttonicon.addEventListener("mouseenter", e => {
BDFDB.createTooltip("Reload", reloadbuttonicon, {type:"bottom",selector:"reload-button-tooltip"});
2018-10-11 10:21:26 +02:00
});
2019-01-17 13:46:11 +01:00
}
2019-04-23 12:39:10 +02:00
bar.appendChild(BDFDB.htmlToElement(this.dividerMarkup));
2019-01-17 13:46:11 +01:00
var minbutton = BDFDB.htmlToElement(this.minButtonMarkup);
bar.appendChild(minbutton);
minbutton.querySelector(BDFDB.dotCN.channelheadericon).addEventListener("click", () => {this.window.minimize();});
var maxbutton = BDFDB.htmlToElement(this.maxButtonMarkup);
bar.appendChild(maxbutton);
maxbutton.querySelector(BDFDB.dotCN.channelheadericon).addEventListener("click", () => {
2019-03-06 11:30:31 +01:00
if (this.isMaximized()) this.window.unmaximize();
2019-01-17 13:46:11 +01:00
else this.window.maximize();
});
var closebutton = BDFDB.htmlToElement(this.closeButtonMarkup);
bar.appendChild(closebutton);
closebutton.querySelector(BDFDB.dotCN.channelheadericon).addEventListener("click", () => {this.window.close();});
2018-10-11 10:21:26 +02:00
}
2019-01-26 22:45:19 +01:00
2019-01-17 13:46:11 +01:00
changeMaximizeButtons () {
2019-03-06 11:30:31 +01:00
var innerHTML = this.isMaximized() ? this.maxButtonInnerMax : this.maxButtonInnerMin;
2019-01-17 13:46:11 +01:00
document.querySelectorAll(".maxButtonOTB g").forEach(g => {g.innerHTML = innerHTML;});
2018-10-11 10:21:26 +02:00
}
2019-03-06 11:30:31 +01:00
isMaximized () {
return window.screen.availWidth == window.outerWidth && window.screen.availHeight == window.outerHeight && window.screenX == 0 && window.screenY == 0;
}
2019-01-26 22:45:19 +01:00
2018-10-11 10:21:26 +02:00
patchMainScreen (enable) {
2018-10-19 11:40:39 +02:00
if (BdApi.getWindowPreference("frame") != enable) {
BdApi.setWindowPreference("frame", enable);
2018-10-11 10:21:26 +02:00
return true;
}
return false;
}
}