/** * @name OldTitleBar * @author DevilBro * @authorId 278543574059057154 * @version 1.8.2 * @description Allows you to switch to Discord's old Titlebar * @invite Jx3TjNS * @donate https://www.paypal.me/MircoWittrien * @patreon https://www.patreon.com/MircoWittrien * @website https://mwittrien.github.io/ * @source https://github.com/mwittrien/BetterDiscordAddons/tree/master/Plugins/OldTitleBar/ * @updateUrl https://mwittrien.github.io/BetterDiscordAddons/Plugins/OldTitleBar/OldTitleBar.plugin.js */ module.exports = (_ => { const changeLog = { }; return !window.BDFDB_Global || (!window.BDFDB_Global.loaded && !window.BDFDB_Global.started) ? class { constructor (meta) {for (let key in meta) this[key] = meta[key];} getName () {return this.name;} getAuthor () {return this.author;} getVersion () {return this.version;} getDescription () {return `The Library Plugin needed for ${this.name} is missing. Open the Plugin Settings to download it. \n\n${this.description}`;} downloadLibrary () { BdApi.Net.fetch("https://mwittrien.github.io/BetterDiscordAddons/Library/0BDFDB.plugin.js").then(r => { if (!r || r.status != 200) throw new Error(); else return r.text(); }).then(b => { if (!b) throw new Error(); else return require("fs").writeFile(require("path").join(BdApi.Plugins.folder, "0BDFDB.plugin.js"), b, _ => BdApi.showToast("Finished downloading BDFDB Library", {type: "success"})); }).catch(error => { BdApi.alert("Error", "Could not download BDFDB Library Plugin. Try again later or download it manually from GitHub: https://mwittrien.github.io/downloader/?library"); }); } load () { if (!window.BDFDB_Global || !Array.isArray(window.BDFDB_Global.pluginQueue)) window.BDFDB_Global = Object.assign({}, window.BDFDB_Global, {pluginQueue: []}); if (!window.BDFDB_Global.downloadModal) { window.BDFDB_Global.downloadModal = true; BdApi.showConfirmationModal("Library Missing", `The Library Plugin needed for ${this.name} is missing. Please click "Download Now" to install it.`, { confirmText: "Download Now", cancelText: "Cancel", onCancel: _ => {delete window.BDFDB_Global.downloadModal;}, onConfirm: _ => { delete window.BDFDB_Global.downloadModal; this.downloadLibrary(); } }); } if (!window.BDFDB_Global.pluginQueue.includes(this.name)) window.BDFDB_Global.pluginQueue.push(this.name); } start () {this.load();} stop () {} getSettingsPanel () { let template = document.createElement("template"); template.innerHTML = `
The Library Plugin needed for ${this.name} is missing.\nPlease click Download Now to install it.
`; template.content.firstElementChild.querySelector("a").addEventListener("click", this.downloadLibrary); return template.content.firstElementChild; } } : (([Plugin, BDFDB]) => { var _this; var patched, lastWindowRects; var toolbars = []; const OldTitleBarToolbarComponent = class OldTitleBarToolbar extends BdApi.React.Component { componentDidMount() { if (toolbars.indexOf(this) == -1) toolbars.push(this); } componentWillUnmount() { BDFDB.ArrayUtils.remove(toolbars, this, true); } render() { let children = []; if (this.props.addFirstDivider) children.push(BDFDB.ReactUtils.createElement("div", {className: BDFDB.disCN.channelheaderdivider})) if (_this.settings.general.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: _ => location.reload(), children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SvgIcon, { className: BDFDB.disCN.channelheadericon, iconSVG: `` }) }) })); 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: _ => BDFDB.LibraryModules.WindowUtils.minimize(), children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SvgIcon, { className: BDFDB.disCN.channelheadericon, iconSVG: `` }) })); children.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Clickable, { className: BDFDB.disCNS.channelheadericonwrapper + BDFDB.disCN.channelheadericonclickable, onClick: _ => _this.maximize(), children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SvgIcon, { className: BDFDB.disCN.channelheadericon, iconSVG: _this.isMaximized() ? `` : `` }) })); children.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Clickable, { className: BDFDB.disCNS.channelheadericonwrapper + BDFDB.disCN.channelheadericonclickable, onClick: _ => BDFDB.LibraryModules.WindowUtils.close(), children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SvgIcon, { className: BDFDB.disCN.channelheadericon, iconSVG: `` }) })); return BDFDB.ReactUtils.createElement("div", { className: BDFDB.disCN._oldtitlebartoolbar, children: children }); } }; return class OldTitleBar extends Plugin { onLoad () { _this = this; this.defaults = { general: { addToSettings: {value: true, description: "Adds a Titlebar to Settings Windows"}, reloadButton: {value: true, description: "Adds a Reload Button to the Titlebar"} } }; this.modulePatches = { before: [ "HeaderBar" ], after: [ "AuthWrapper", "SettingsView" ] }; this.css = ` ${BDFDB.dotCNS._oldtitlebarenabled + BDFDB.dotCN.titlebar}, ${BDFDB.dotCNS._oldtitlebarenabled + BDFDB.dotCN.authboxcharacterbackground}:before, ${BDFDB.dotCNS._oldtitlebarenabled + BDFDB.dotCN.authboxsplashbackground}:before { display: none !important; } ${BDFDB.dotCNS._oldtitlebarenabled + BDFDB.dotCN.guildswrapper} { margin-top: 0; padding-top: 0; } ${BDFDB.dotCNS._oldtitlebarenabled + BDFDB.dotCN.guildsscroller} { padding-top: 4px; } ${BDFDB.dotCNS._oldtitlebarenabled + BDFDB.dotCN.settingswindowstandardsidebarview}:before { display: none; } ${BDFDB.dotCN._oldtitlebartoolbar} { display: flex; flex: 1 0 auto; justify-content: flex-end; } ${BDFDB.dotCNS.chatthreadsidebaropen} > *:first-child ${BDFDB.dotCN._oldtitlebartoolbar}, ${BDFDB.dotCNS.callcurrentchatsidebaropen} > *:first-child ${BDFDB.dotCN._oldtitlebartoolbar} { display: none !important; } ${BDFDB.dotCN.callscreensharevideocontrols}:has(${BDFDB.dotCNS.callscreensharetopcontrols + BDFDB.dotCN._oldtitlebartoolbar}) ~ div ${BDFDB.dotCN.callscreensharechatbutton} { margin-right: 137px; } ${BDFDB.dotCN.callscreensharevideocontrols}:has(${BDFDB.dotCNS.callscreensharetopcontrols + BDFDB.dotCN._oldtitlebartoolbar} div:nth-child(6)) ~ div ${BDFDB.dotCN.callscreensharechatbutton} { margin-right: 194px; } ${BDFDB.dotCN._oldtitlebarsettingstoolbar} { display: flex; position: absolute; top: 0; right: 0; padding: 10px; z-index: 103; -webkit-app-region: drag !important; } .platform-win ${BDFDB.dotCN._oldtitlebarsettingstoolbar} { top: 22px; } ${BDFDB.dotCNS._oldtitlebarenabled + BDFDB.dotCNS.authboxcharacterbackground + BDFDB.dotCN._oldtitlebarsettingstoolbar}, ${BDFDB.dotCNS._oldtitlebarenabled + BDFDB.dotCNS.authboxsplashbackground + BDFDB.dotCN._oldtitlebarsettingstoolbar} { background: rgba(0, 0, 0, 0.3); border-radius: 0 0 0 5px; top: 0; } ${BDFDB.dotCN.channelheaderheaderbar}, ${BDFDB.dotCNS.channelheaderheaderbar + BDFDB.dotCN.channelheaderchildren}, ${BDFDB.dotCNS.channelheaderheaderbar + BDFDB.dotCN.channelheadertoolbar} { -webkit-app-region: drag !important; } ${BDFDB.dotCNS.stopanimations + BDFDB.dotCN.channelheaderheaderbar}, ${BDFDB.dotCN.channelheaderheaderbar} * { -webkit-app-region: no-drag !important; } `; } onStart () { BDFDB.ListenerUtils.add(this, window, "resize", e => { BDFDB.ReactUtils.forceUpdate(toolbars); }); BDFDB.DOMUtils.addClass(document.body, BDFDB.disCN._oldtitlebarenabled); BDFDB.DiscordUtils.rerenderAll(); } onStop () { BDFDB.DiscordUtils.rerenderAll(); BDFDB.DOMUtils.removeClassFromDOM(BDFDB.disCN._oldtitlebarenabled); } getSettingsPanel (collapseStates = {}) { let settingsPanel; return settingsPanel = BDFDB.PluginUtils.createSettingsPanel(this, { collapseStates: collapseStates, children: _ => { let settingsItems = []; for (let key in this.defaults.general) settingsItems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsSaveItem, { type: "Switch", plugin: this, keys: ["general", key], label: this.defaults.general[key].description, value: this.settings.general[key], })); return settingsItems; } }); } onSettingsClosed () { if (this.SettingsUpdated) { delete this.SettingsUpdated; BDFDB.DiscordUtils.rerenderAll(); } } processHeaderBar (e) { let wrapper = BDFDB.ReactUtils.findChild(e.instance, {props: ["toolbar", "children"]}); if (!wrapper) return; let children = BDFDB.ArrayUtils.is(wrapper.props.toolbar) ? wrapper.props.toolbar : BDFDB.ObjectUtils.get(wrapper, "props.toolbar.props.children"); if (!children) { children = []; wrapper.props.toolbar = [ wrapper.props.toolbar, BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Flex, {children}) ]; } this.injectButtons(children, true); } 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); } processSettingsView (e) { if (!BDFDB.ArrayUtils.is(e.returnvalue.props.children)) e.returnvalue.props.children = [e.returnvalue.props.children]; this.injectSettingsToolbar(e.returnvalue.props.children); } injectSettingsToolbar (children, fixed) { if (!this.settings.general.addToSettings) return; let toolbar = BDFDB.ReactUtils.createElement("div", { className: BDFDB.disCN._oldtitlebarsettingstoolbar, children: [], style: fixed ? {position: "fixed"} : null }); this.injectButtons(toolbar.props.children); children.push(toolbar); } injectButtons (children, addFirstDivider) { children.push(BDFDB.ReactUtils.createElement(OldTitleBarToolbarComponent, {addFirstDivider: addFirstDivider})); } isMaximized () { let rects = this.getWindowRects(); return rects.x == 0 && rects.y == 0 && this.isScreenSize(rects); } isScreenSize (rects) { return screen.availWidth - rects.width == 0 && screen.availHeight - rects.height == 0; } maximize () { if (!this.isMaximized()) { lastWindowRects = this.getWindowRects(); BDFDB.LibraryModules.WindowUtils.maximize(); } else { BDFDB.LibraryModules.WindowUtils.maximize(); BDFDB.TimeUtils.timeout(_ => { if (!this.isMaximized()) return; if (!lastWindowRects || this.isScreenSize(lastWindowRects)) { let rects = this.getWindowRects(); window.resizeTo(rects.width/2, rects.height/2); window.moveTo(rects.width/4, rects.height/4); } else { window.resizeTo(lastWindowRects.width, lastWindowRects.height); window.moveTo(lastWindowRects.x, lastWindowRects.y); } }, 100); } } getWindowRects () { return {x: window.screenX, y: window.screenY, width: window.outerWidth, height: window.outerHeight}; } }; })(window.BDFDB_Global.PluginUtils.buildPlugin(changeLog)); })();