2019-09-20 22:32:52 +02: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-09-24 09:30:27 +02:00
getVersion ( ) { return "1.5.9" ; }
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
2019-09-04 12:34:02 +02:00
constructor ( ) {
2019-03-06 11:30:31 +01:00
this . changelog = {
2019-09-24 09:30:27 +02:00
"fixed" : [ [ "Activity Page" , "Fixed the issue where no icosn woud be added on the activity page" ] ]
2019-03-06 11:30:31 +01:00
} ;
2019-09-04 12:34:02 +02:00
2019-01-05 11:30:37 +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-05 11:30:37 +01:00
} ;
2019-09-04 12:34:02 +02:00
}
2019-01-26 22:45:19 +01:00
2019-09-04 12:34:02 +02:00
initConstructor ( ) {
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-09-04 12:34:02 +02:00
2019-05-29 16:25:12 +02:00
. hidden - by - OTB . platform - osx $ { BDFDB . dotCN . guildswrapper } {
margin - top : 0 ;
}
2019-09-04 12:34:02 +02:00
2019-09-11 12:14:43 +02:00
. hidden - by - OTB . platform - osx $ { BDFDB . dotCN . guildsscroller } {
2019-05-29 16:25:12 +02:00
padding - top : 10 px ;
}
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 : 10 px ;
- webkit - app - region : drag ;
} ` ;
2019-01-26 22:45:19 +01:00
2019-01-05 11:30:37 +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-24 08:08:33 +02:00
` <div class=" ${ BDFDB . disCNS . channelheadericonwrapper + BDFDB . disCN . channelheadericonclickable } buttonOTB reloadButtonOTB">
2019-04-23 12:39:10 +02:00
< 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" / >
< / s v g >
< / d i v > ` ;
2019-01-26 22:45:19 +01:00
2018-10-11 10:21:26 +02:00
this . minButtonMarkup =
2019-04-24 08:08:33 +02:00
` <div class=" ${ BDFDB . disCNS . channelheadericonwrapper + BDFDB . disCN . channelheadericonclickable } buttonOTB minButtonOTB">
2019-04-23 12:39:10 +02:00
< 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" / >
< / s v g >
< / d i v > ` ;
2019-01-26 22:45:19 +01:00
2019-01-17 13:46:11 +01:00
this . maxButtonMarkup =
2019-04-24 08:08:33 +02:00
` <div class=" ${ BDFDB . disCNS . channelheadericonwrapper + BDFDB . disCN . channelheadericonclickable } buttonOTB maxButtonOTB">
2019-04-23 12:39:10 +02:00
< svg class = "${BDFDB.disCN.channelheadericon}" xmlns = "http://www.w3.org/2000/svg" width = "26" height = "26" > < g > < / g > < / s v g >
< / d i v > ` ;
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-24 08:08:33 +02:00
` <div class=" ${ BDFDB . disCNS . channelheadericonwrapper + BDFDB . disCN . channelheadericonclickable } buttonOTB closeButtonOTB">
2019-04-23 12:39:10 +02:00
< 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" / >
< / s v g >
< / d i v > ` ;
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 ;
2019-10-22 23:04:35 +02:00
let settings = BDFDB . DataUtils . get ( this , "settings" ) ;
2019-10-09 14:18:28 +02:00
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"> ` ;
2018-10-11 10:21:26 +02:00
for ( let key in settings ) {
2019-10-09 14:18:28 +02:00
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> ` ;
2018-10-11 10:21:26 +02:00
}
settingshtml += ` </div></div> ` ;
2019-01-26 22:45:19 +01:00
2019-10-23 11:10:01 +02:00
let settingspanel = BDFDB . DOMUtils . create ( 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-10-22 18:55:25 +02:00
BDFDB . ListenerUtils . add ( this , settingspanel , "click" , ".nativetitlebar-switch" , e => {
2019-01-17 23:48:29 +01:00
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 ) {
2019-10-22 18:55:25 +02:00
notifybar = BDFDB . NotificationUtils . notice ( "Changed nativebar settings, relaunch to see changes:" , { type : "danger" , btn : "Relaunch" , id : "OldTitleBarNotifyBar" } ) ;
2019-01-17 23:48:29 +01:00
notifybar . querySelector ( BDFDB . dotCN . noticebutton ) . addEventListener ( "click" , ( ) => {
2019-09-11 12:14:43 +02:00
BDFDB . LibraryRequires . electron . remote . app . relaunch ( ) ;
BDFDB . LibraryRequires . electron . remote . app . quit ( ) ;
2019-01-17 23:48:29 +01:00
} ) ;
}
}
} ) ;
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-05-26 13:55:26 +02:00
var libraryScript = document . querySelector ( 'head script#BDFDBLibraryScript' ) ;
if ( ! libraryScript || ( performance . now ( ) - libraryScript . getAttribute ( "date" ) ) > 600000 ) {
2018-10-11 10:21:26 +02:00
if ( libraryScript ) libraryScript . remove ( ) ;
libraryScript = document . createElement ( "script" ) ;
2019-05-26 13:55:26 +02:00
libraryScript . setAttribute ( "id" , "BDFDBLibraryScript" ) ;
2018-10-11 10:21:26 +02:00
libraryScript . setAttribute ( "type" , "text/javascript" ) ;
2019-10-18 10:56:41 +02:00
libraryScript . setAttribute ( "src" , "https://mwittrien.github.io/BetterDiscordAddons/Plugins/BDFDB.min.js" ) ;
2019-01-17 23:48:29 +01:00
libraryScript . setAttribute ( "date" , performance . now ( ) ) ;
2019-05-26 13:55:26 +02:00
libraryScript . addEventListener ( "load" , ( ) => { 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 ;
2019-10-22 18:55:25 +02:00
BDFDB . PluginUtils . init ( this ) ;
2019-01-26 22:45:19 +01:00
2019-10-22 18:55:25 +02:00
BDFDB . ListenerUtils . add ( this , window , "resize" , e => {
2019-03-06 11:30:31 +01:00
this . changeMaximizeButtons ( ) ;
} ) ;
2019-01-26 22:45:19 +01:00
2019-09-11 12:14:43 +02:00
this . window = BDFDB . LibraryRequires . electron . remote . getCurrentWindow ( ) ;
2019-01-26 22:45:19 +01:00
2019-10-22 23:04:35 +02:00
this . patchMainScreen ( BDFDB . DataUtils . get ( this , "settings" , "displayNative" ) ) ;
2019-01-26 22:45:19 +01:00
2019-10-23 11:10:01 +02:00
BDFDB . DOMUtils . addClass ( [ document . body , document . querySelector ( BDFDB . dotCN . titlebar ) ] , "hidden-by-OTB" ) ;
2019-01-26 22:45:19 +01:00
2019-10-22 18:55:25 +02:00
BDFDB . ModuleUtils . forceAllUpdates ( this ) ;
2018-10-11 10:21:26 +02:00
}
2019-11-01 10:14:50 +01:00
else 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 ) {
2019-10-22 11:37:23 +02:00
this . stopping = true ;
2019-10-23 11:10:01 +02:00
BDFDB . DOMUtils . remove ( ".headerbarOTB" , ".settingsTitlebarOTB" ) ;
2019-01-26 22:45:19 +01:00
2019-10-23 11:10:01 +02:00
BDFDB . DOMUtils . removeClassFromDOM ( "hidden-by-OTB" , "settingsTitlebarOTB-added" ) ;
2019-01-26 22:45:19 +01:00
2019-10-22 18:55:25 +02:00
BDFDB . PluginUtils . clear ( this ) ;
2018-10-11 10:21:26 +02:00
}
}
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
2019-09-11 12:14:43 +02:00
processHeaderBar ( instance , wrapper , returnvalue ) {
2019-01-05 11:30:37 +01:00
this . addTitleBar ( ) ;
}
2019-01-26 22:45:19 +01:00
2019-09-11 12:14:43 +02:00
processHeaderBarContainer ( instance , wrapper , returnvalue ) {
2019-04-23 12:59:14 +02:00
this . addTitleBar ( ) ;
}
2019-09-11 12:14:43 +02:00
processStandardSidebarView ( instance , wrapper , returnvalue , methodnames ) {
this . processAuthWrapper ( instance , wrapper , returnvalue , methodnames ) ;
2019-01-05 20:24:38 +01:00
}
2019-01-26 22:45:19 +01:00
2019-09-11 12:14:43 +02:00
processAuthWrapper ( instance , wrapper , returnvalue , methodnames ) {
2019-01-05 11:30:37 +01:00
if ( methodnames . includes ( "componentDidMount" ) ) {
this . addSettingsTitleBar ( wrapper ) ;
}
else if ( methodnames . includes ( "componentWillUnmount" ) ) {
2019-10-23 11:10:01 +02:00
BDFDB . DOMUtils . remove ( ".settingsTitlebarOTB" ) ;
BDFDB . DOMUtils . removeClass ( document . body , "settingsTitlebarOTB-added" ) ;
2019-01-05 11:30:37 +01:00
this . addTitleBar ( ) ;
}
}
2019-01-26 22:45:19 +01:00
2018-10-11 10:21:26 +02:00
addTitleBar ( ) {
2019-10-23 11:10:01 +02:00
BDFDB . DOMUtils . remove ( ".headerbarOTB" ) ;
2019-10-22 23:04:35 +02:00
let settings = BDFDB . DataUtils . get ( this , "settings" ) ;
2019-10-22 20:16:05 +02:00
if ( BDFDB . DataUtils . get ( this , "settings" , "addOldBar" ) ) {
2019-10-23 11:10:01 +02:00
var headerbar = BDFDB . DOMUtils . create ( ` <span class="headerbarOTB ${ BDFDB . disCNS . flex2 + BDFDB . disCNS . horizontal + BDFDB . disCNS . justifystart + BDFDB . disCNS . aligncenter + BDFDB . disCN . nowrap } "></span> ` ) ;
2019-01-05 11:30:37 +01:00
this . createButtons ( headerbar ) ;
2019-09-24 09:30:27 +02:00
let headerbaricon = document . querySelector ( BDFDB . dotCN . channelheaderchildren ) ;
2019-01-17 13:46:11 +01:00
if ( headerbaricon ) headerbaricon . parentElement . appendChild ( headerbar ) ;
this . changeMaximizeButtons ( ) ;
2019-01-05 11:30:37 +01:00
}
}
2019-01-26 22:45:19 +01:00
2019-01-05 11:30:37 +01:00
addSettingsTitleBar ( settingspane ) {
2019-10-23 11:10:01 +02:00
BDFDB . DOMUtils . remove ( ".settingsTitlebarOTB" ) ;
2019-10-22 20:16:05 +02:00
if ( BDFDB . DataUtils . get ( this , "settings" , "addToSettings" ) ) {
2019-10-23 11:10:01 +02:00
BDFDB . DOMUtils . addClass ( document . body , "settingsTitlebarOTB-added" ) ;
var settingsbar = BDFDB . DOMUtils . create ( ` <div class="settingsTitlebarOTB ${ BDFDB . disCNS . flex2 + BDFDB . disCNS . horizontal + BDFDB . disCNS . justifyend + BDFDB . disCNS . aligncenter + BDFDB . disCN . nowrap } "></div> ` ) ;
2019-01-05 11:30:37 +01:00
this . createButtons ( settingsbar ) ;
settingspane . parentElement . appendChild ( settingsbar ) ;
2019-01-17 13:46:11 +01:00
this . changeMaximizeButtons ( ) ;
2019-01-05 11:30:37 +01:00
}
}
2019-01-26 22:45:19 +01:00
2019-01-05 11:30:37 +01:00
createButtons ( bar ) {
2019-10-22 20:16:05 +02:00
if ( BDFDB . DataUtils . get ( this , "settings" , "reloadButton" ) ) {
2019-10-23 11:10:01 +02:00
bar . appendChild ( BDFDB . DOMUtils . create ( this . dividerMarkup ) ) ;
var reloadbutton = BDFDB . DOMUtils . create ( this . reloadButtonMarkup ) ;
2019-01-17 13:46:11 +01:00
bar . appendChild ( reloadbutton ) ;
var reloadbuttonicon = reloadbutton . querySelector ( BDFDB . dotCN . channelheadericon ) ;
reloadbuttonicon . addEventListener ( "click" , ( ) => { this . window . reload ( ) ; } ) ;
reloadbuttonicon . addEventListener ( "mouseenter" , e => {
2019-10-22 18:55:25 +02:00
BDFDB . TooltipUtils . create ( reloadbuttonicon , "Reload" , { type : "bottom" , selector : "reload-button-tooltip" } ) ;
2018-10-11 10:21:26 +02:00
} ) ;
2019-01-17 13:46:11 +01:00
}
2019-10-23 11:10:01 +02:00
bar . appendChild ( BDFDB . DOMUtils . create ( this . dividerMarkup ) ) ;
var minbutton = BDFDB . DOMUtils . create ( this . minButtonMarkup ) ;
2019-01-17 13:46:11 +01:00
bar . appendChild ( minbutton ) ;
minbutton . querySelector ( BDFDB . dotCN . channelheadericon ) . addEventListener ( "click" , ( ) => { this . window . minimize ( ) ; } ) ;
2019-10-23 11:10:01 +02:00
var maxbutton = BDFDB . DOMUtils . create ( this . maxButtonMarkup ) ;
2019-01-17 13:46:11 +01:00
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 ( ) ;
} ) ;
2019-10-23 11:10:01 +02:00
var closebutton = BDFDB . DOMUtils . create ( this . closeButtonMarkup ) ;
2019-01-17 13:46:11 +01:00
bar . appendChild ( closebutton ) ;
closebutton . querySelector ( BDFDB . dotCN . channelheadericon ) . addEventListener ( "click" , ( ) => { this . window . close ( ) ; } ) ;
2019-10-23 11:10:01 +02:00
if ( BDFDB . DOMUtils . containsClass ( bar , "settingsTitlebarOTB" ) ) BDFDB . DOMUtils . remove ( bar . querySelector ( ".dividerOTB" ) ) ;
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-09-04 12:34:02 +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 ;
}
}