2019-10-18 10:56:41 +02:00
if ( window . BDFDB && BDFDB . ListenerUtils && typeof BDFDB . ListenerUtils . remove == "function" ) BDFDB . ListenerUtils . remove ( BDFDB ) ;
if ( window . BDFDB && BDFDB . WebModules && typeof BDFDB . WebModules . unpatchall == "function" ) BDFDB . WebModules . unpatchall ( BDFDB ) ;
if ( window . BDFDB && BDFDB . ObserverUtils && typeof BDFDB . ObserverUtils . disconnect == "function" ) BDFDB . ObserverUtils . disconnect ( BDFDB ) ;
var BDFDB = { myPlugins : BDFDB && BDFDB . myPlugins ? BDFDB . myPlugins : { } , BDv2Api : BDFDB && BDFDB . BDv2Api ? BDFDB . BDv2Api : undefined , creationTime : performance . now ( ) , cachedData : { } , pressedKeys : [ ] , mousePosition : { pageX : 0 , pageY : 0 } , name : "$BDFDB" } ;
( ( ) => {
var id = Math . round ( Math . random ( ) * 10000000000000000 ) , InternalBDFDB = { } ;
BDFDB . id = id ;
console . log ( ` %c[BDFDB]%c ` , "color: #3a71c1; font-weight: 700;" , "" , "loading library." ) ;
BDFDB . isLibraryOutdated = function ( ) {
return performance . now ( ) - BDFDB . creationTime > 600000 ;
} ;
BDFDB . PluginUtils = { } ;
BDFDB . PluginUtils . init = function ( plugin ) {
InternalBDFDB . clearStartTimeout ( plugin ) ;
plugin . name = plugin . name || ( typeof plugin . getName == "function" ? plugin . getName ( ) : null ) ;
plugin . version = plugin . version || ( typeof plugin . getVersion == "function" ? plugin . getVersion ( ) : null ) ;
plugin . author = plugin . author || ( typeof plugin . getAuthor == "function" ? plugin . getAuthor ( ) : null ) ;
plugin . description = plugin . description || ( typeof plugin . getDescription == "function" ? plugin . getDescription ( ) : null ) ;
var loadmessage = BDFDB . getLibraryStrings ( ) . toast _plugin _started . replace ( "{{oldversion}}" , "v" + plugin . version ) ;
console . log ( ` %c[ ${ plugin . name } ]%c ` , "color: #3a71c1; font-weight: 700;" , "" , loadmessage ) ;
if ( ! ( window . settingsCookie [ "fork-ps-2" ] && window . settingsCookie [ "fork-ps-2" ] === true ) ) BDFDB . NotificationUtils . toast ( plugin . name + " " + loadmessage , { nopointer : true , selector : "plugin-started-toast" } ) ;
var url = typeof plugin . getRawUrl == "function" && typeof plugin . getRawUrl ( ) == "string" ? plugin . getRawUrl ( ) : ` https://mwittrien.github.io/BetterDiscordAddons/Plugins/ ${ plugin . name } / ${ plugin . name } .plugin.js ` ;
BDFDB . PluginUtils . checkUpdate ( plugin . name , url ) ;
if ( typeof plugin . initConstructor === "function" ) {
try { plugin . initConstructor ( ) ; }
catch ( err ) { console . error ( ` %c[ ${ plugin . name } ]%c ` , "color: #3a71c1; font-weight: 700;" , "" , "Fatal Error: Could not initiate constructor! " + err ) ; }
}
if ( typeof plugin . css === "string" ) BDFDB . appendLocalStyle ( plugin . name , plugin . css ) ;
BDFDB . WebModules . patchModules ( plugin ) ;
InternalBDFDB . addContextListeners ( plugin ) ;
BDFDB . PluginUtils . translate ( plugin ) ;
BDFDB . PluginUtils . checkChangeLog ( plugin ) ;
if ( ! window . PluginUpdates || typeof window . PluginUpdates !== "object" ) window . PluginUpdates = { plugins : { } } ;
window . PluginUpdates . plugins [ url ] = { name : plugin . name , raw : url , version : plugin . version } ;
if ( typeof window . PluginUpdates . interval === "undefined" ) window . PluginUpdates . interval = setInterval ( ( ) => { BDFDB . PluginUtils . checkAllUpdates ( ) ; } , 1000 * 60 * 60 * 2 ) ;
plugin . started = true ;
for ( let name in BDFDB . myPlugins ) if ( ! BDFDB . myPlugins [ name ] . started && typeof BDFDB . myPlugins [ name ] . initialize == "function" ) BDFDB . myPlugins [ name ] . initialize ( ) ;
} ;
BDFDB . PluginUtils . clear = function ( plugin ) {
InternalBDFDB . clearStartTimeout ( plugin ) ;
delete BDFDB . myPlugins [ plugin . name ] ;
var unloadmessage = BDFDB . getLibraryStrings ( ) . toast _plugin _stopped . replace ( "{{oldversion}}" , "v" + plugin . version ) ;
console . log ( ` %c[ ${ plugin . name } ]%c ` , "color: #3a71c1; font-weight: 700;" , "" , unloadmessage ) ;
if ( ! ( window . settingsCookie [ "fork-ps-2" ] && window . settingsCookie [ "fork-ps-2" ] === true ) ) BDFDB . NotificationUtils . toast ( plugin . name + " " + unloadmessage , { nopointer : true , selector : "plugin-stopped-toast" } ) ;
var url = typeof plugin . getRawUrl == "function" && typeof plugin . getRawUrl ( ) == "string" ? plugin . getRawUrl ( ) : ` https://mwittrien.github.io/BetterDiscordAddons/Plugins/ ${ plugin . name } / ${ plugin . name } .plugin.js ` ;
if ( typeof plugin . css === "string" ) BDFDB . removeLocalStyle ( plugin . name ) ;
BDFDB . WebModules . unpatchall ( plugin ) ;
BDFDB . removeOnSwitchListener ( plugin ) ;
BDFDB . removeSettingsButtonListener ( plugin ) ;
BDFDB . ListenerUtils . remove ( plugin ) ;
for ( let modal of document . querySelectorAll ( ` . ${ plugin . name } -modal, . ${ plugin . name . toLowerCase ( ) } -modal, . ${ plugin . name } -settingsmodal, . ${ plugin . name . toLowerCase ( ) } -settingsmodal ` ) ) {
let closebutton = modal . querySelector ( BDFDB . dotCN . modalclose ) ;
if ( closebutton ) closebutton . click ( ) ;
}
BDFDB . ObserverUtils . disconnect ( plugin ) ;
delete window . PluginUpdates . plugins [ url ] ;
if ( BDFDB . ObjectUtils . isEmpty ( window . PluginUpdates . plugins ) ) BDFDB . removeEles ( "#bd-settingspane-container .bd-updatebtn" + BDFDB . dotCN . _repofolderbutton ) ;
delete plugin . started ;
} ;
BDFDB . PluginUtils . translate = function ( plugin ) {
if ( typeof plugin . setLabelsByLanguage === "function" || typeof plugin . changeLanguageStrings === "function" ) {
if ( document . querySelector ( "html" ) . lang ) translate ( ) ;
else {
var translateinterval = setInterval ( ( ) => {
if ( document . querySelector ( "html" ) . lang ) {
clearInterval ( translateinterval ) ;
translate ( ) ;
}
} , 100 ) ;
}
function translate ( ) {
var language = BDFDB . DiscordUtils . getLanguage ( ) ;
if ( typeof plugin . setLabelsByLanguage === "function" ) plugin . labels = plugin . setLabelsByLanguage ( language . id ) ;
if ( typeof plugin . changeLanguageStrings === "function" ) plugin . changeLanguageStrings ( ) ;
var translatemessage = BDFDB . getLibraryStrings ( ) . toast _plugin _translated . replace ( "{{ownlang}}" , language . ownlang ) ;
console . log ( ` %c[ ${ plugin . name } ]%c ` , "color: #3a71c1; font-weight: 700;" , "" , translatemessage ) ;
}
}
} ;
BDFDB . PluginUtils . checkUpdate = function ( pluginname , url ) {
if ( BDFDB . BdUtils . isBDv2 ( ) || ! pluginname || ! url ) return ;
LibraryRequires . request ( url , ( error , response , result ) => {
if ( error ) return ;
var newversion = result . match ( /['"][0-9]+\.[0-9]+\.[0-9]+['"]/i ) ;
if ( ! newversion ) return ;
if ( BDFDB . checkVersionDifference ( newversion [ 0 ] , window . PluginUpdates . plugins [ url ] . version ) > 0.2 ) {
BDFDB . NotificationUtils . toast ( ` ${ pluginname } will be force updated, because your version is heavily outdated. ` , { type : "warn" , nopointer : true , selector : "plugin-forceupdate-toast" } ) ;
BDFDB . PluginUtils . downloadUpdate ( pluginname , url ) ;
}
else if ( BDFDB . checkVersions ( newversion [ 0 ] , window . PluginUpdates . plugins [ url ] . version ) ) BDFDB . PluginUtils . showUpdateNotice ( pluginname , url ) ;
else BDFDB . PluginUtils . removeUpdateNotice ( pluginname ) ;
} ) ;
} ;
BDFDB . PluginUtils . checkAllUpdates = function ( ) {
for ( let url in window . PluginUpdates . plugins ) {
var plugin = window . PluginUpdates . plugins [ url ] ;
BDFDB . PluginUtils . checkUpdate ( plugin . name , plugin . raw ) ;
}
} ;
BDFDB . PluginUtils . showUpdateNotice = function ( pluginname , url ) {
if ( ! pluginname || ! url ) return ;
var updatenotice = document . querySelector ( "#pluginNotice" ) ;
if ( ! updatenotice ) {
updatenotice = BDFDB . NotificationUtils . notice ( ` The following plugins need to be updated: <strong id="outdatedPlugins"></strong> ` , { html : true , id : "pluginNotice" , type : "info" , btn : ! BDFDB . BdUtils . isAutoLoadEnabled ( ) ? "Reload" : "" , customicon : ` <svg height="100%" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="100%" version="1.1" viewBox="0 0 2000 2000"><metadata /><defs><filter id="shadow1"><feDropShadow dx="20" dy="0" stdDeviation="20" flood-color="rgba(0,0,0,0.35)"/></filter><filter id="shadow2"><feDropShadow dx="15" dy="0" stdDeviation="20" flood-color="rgba(255,255,255,0.15)"/></filter><filter id="shadow3"><feDropShadow dx="10" dy="0" stdDeviation="20" flood-color="rgba(0,0,0,0.35)"/></filter></defs><g><path style="filter: url(#shadow3)" d="M1195.44+135.442L1195.44+135.442L997.6+136.442C1024.2+149.742+1170.34+163.542+1193.64+179.742C1264.34+228.842+1319.74+291.242+1358.24+365.042C1398.14+441.642+1419.74+530.642+1422.54+629.642L1422.54+630.842L1422.54+632.042C1422.54+773.142+1422.54+1228.14+1422.54+1369.14L1422.54+1370.34L1422.54+1371.54C1419.84+1470.54+1398.24+1559.54+1358.24+1636.14C1319.74+1709.94+1264.44+1772.34+1193.64+1821.44C1171.04+1837.14+1025.7+1850.54+1000+1863.54L1193.54+1864.54C1539.74+1866.44+1864.54+1693.34+1864.54+1296.64L1864.54+716.942C1866.44+312.442+1541.64+135.442+1195.44+135.442Z" fill="#171717" opacity="1"/><path style="filter: url(#shadow2)" d="M1695.54+631.442C1685.84+278.042+1409.34+135.442+1052.94+135.442L361.74+136.442L803.74+490.442L1060.74+490.442C1335.24+490.442+1335.24+835.342+1060.74+835.342L1060.74+1164.84C1150.22+1164.84+1210.53+1201.48+1241.68+1250.87C1306.07+1353+1245.76+1509.64+1060.74+1509.64L361.74+1863.54L1052.94+1864.54C1409.24+1864.54+1685.74+1721.94+1695.54+1368.54C1695.54+1205.94+1651.04+1084.44+1572.64+999.942C1651.04+915.542+1695.54+794.042+1695.54+631.442Z" fill="#3E82E5" opacity="1"/><path style="filter: url(#shadow1)" d="M1469.25+631.442C1459.55+278.042+1183.05+135.442+826.65+135.442L135.45+135.442L135.45+1004C135.45+1004+135.427+1255.21+355.626+1255.21C575.825+1255.21+575.848+1004+575.848+1004L577.45+490.442L834.45+490.442C1108.95+490.442+1108.95+835.342+834.45+835.342L664.65+835.342L664.65+1164.84L834.45+1164.84C923.932+1164.84+984.244+1201.48+1015.39+1250.87C1079.78+1353+1019.47+1509.64+834.45+1509.64L135.45+1509.64L135.45+1864.54L826.65+1864.54C1182.95+1864.54+1459.45+1721.94+1469.25+1368.54C1469.25+1205.94+1424.75+1084.44+1346.35+999.942C1424.75+915.542+1469.25+794.042+1469.25+631.442Z" fill="#FFFFFF" opacity="1"/></g></svg> ` } ) ;
updatenotice . style . setProperty ( "display" , "block" , "important" ) ;
updatenotice . style . setProperty ( "visibility" , "visible" , "important" ) ;
updatenotice . style . setProperty ( "opacity" , "1" , "important" ) ;
updatenotice . querySelector ( BDFDB . dotCN . noticedismiss ) . addEventListener ( "click" , ( ) => {
BDFDB . removeEles ( ".update-clickme-tooltip" ) ;
} ) ;
var reloadbutton = updatenotice . querySelector ( BDFDB . dotCN . noticebutton ) ;
if ( reloadbutton ) {
BDFDB . toggleEles ( reloadbutton , true ) ;
reloadbutton . addEventListener ( "click" , ( ) => {
window . location . reload ( false ) ;
} ) ;
reloadbutton . addEventListener ( "mouseenter" , ( ) => {
if ( window . PluginUpdates . downloaded ) BDFDB . TooltipUtils . create ( reloadbutton , window . PluginUpdates . downloaded . join ( ", " ) , { type : "bottom" , selector : "update-notice-tooltip" , style : "max-width: 420px" } ) ;
} ) ;
}
}
if ( updatenotice ) {
var updatenoticelist = updatenotice . querySelector ( "#outdatedPlugins" ) ;
if ( updatenoticelist && ! updatenoticelist . querySelector ( ` # ${ pluginname } -notice ` ) ) {
if ( updatenoticelist . querySelector ( "span" ) ) updatenoticelist . appendChild ( BDFDB . htmlToElement ( ` <span class="separator">, </span> ` ) ) ;
var updateentry = BDFDB . htmlToElement ( ` <span id=" ${ pluginname } -notice"> ${ pluginname } </span> ` ) ;
updateentry . addEventListener ( "click" , ( ) => { BDFDB . PluginUtils . downloadUpdate ( pluginname , url ) ; } ) ;
updatenoticelist . appendChild ( updateentry ) ;
if ( ! document . querySelector ( ".update-clickme-tooltip" ) ) BDFDB . TooltipUtils . create ( updatenoticelist , "Click us!" , { type : "bottom" , selector : "update-clickme-tooltip" , delay : 500 } ) ;
}
}
} ;
BDFDB . PluginUtils . removeUpdateNotice = function ( pluginname , updatenotice = document . querySelector ( "#pluginNotice" ) ) {
if ( ! pluginname || ! updatenotice ) return ;
var updatenoticelist = updatenotice . querySelector ( "#outdatedPlugins" ) ;
if ( updatenoticelist ) {
var noticeentry = updatenoticelist . querySelector ( ` # ${ pluginname } -notice ` ) ;
if ( noticeentry ) {
var nextsibling = noticeentry . nextSibling ;
var prevsibling = noticeentry . prevSibling ;
if ( nextsibling && BDFDB . containsClass ( nextsibling , "separator" ) ) nextsibling . remove ( ) ;
else if ( prevsibling && BDFDB . containsClass ( prevsibling , "separator" ) ) prevsibling . remove ( ) ;
noticeentry . remove ( ) ;
}
if ( ! updatenoticelist . querySelector ( "span" ) ) {
var reloadbutton = updatenotice . querySelector ( BDFDB . dotCN . noticebutton ) ;
if ( reloadbutton ) {
updatenotice . querySelector ( ".notice-message" ) . innerText = "To finish updating you need to reload." ;
BDFDB . toggleEles ( reloadbutton , false ) ;
}
else updatenotice . querySelector ( BDFDB . dotCN . noticedismiss ) . click ( ) ;
}
}
} ;
BDFDB . PluginUtils . downloadUpdate = function ( pluginname , url ) {
if ( ! pluginname || ! url ) return ;
LibraryRequires . request ( url , ( error , response , result ) => {
if ( error ) return console . warn ( ` %c[BDFDB]%c ` , "color:#3a71c1; font-weight:700;" , "" , "Unable to get update for " + pluginname ) ;
BDFDB . creationTime = 0 ;
var newversion = result . match ( /['"][0-9]+\.[0-9]+\.[0-9]+['"]/i ) ;
newversion = newversion . toString ( ) . replace ( /['"]/g , "" ) ;
LibraryRequires . fs . writeFileSync ( LibraryRequires . path . join ( BDFDB . BdUtils . getPluginsFolder ( ) , url . split ( "/" ) . slice ( - 1 ) [ 0 ] ) , result ) ;
BDFDB . NotificationUtils . toast ( ` ${ pluginname } v ${ window . PluginUpdates . plugins [ url ] . version } has been replaced by ${ pluginname } v ${ newversion } . ` , { nopointer : true , selector : "plugin-updated-toast" } ) ;
var updatenotice = document . querySelector ( "#pluginNotice" ) ;
if ( updatenotice ) {
if ( updatenotice . querySelector ( BDFDB . dotCN . noticebutton ) ) {
window . PluginUpdates . plugins [ url ] . version = newversion ;
if ( ! window . PluginUpdates . downloaded ) window . PluginUpdates . downloaded = [ ] ;
if ( ! window . PluginUpdates . downloaded . includes ( pluginname ) ) window . PluginUpdates . downloaded . push ( pluginname ) ;
}
BDFDB . PluginUtils . removeUpdateNotice ( pluginname , updatenotice ) ;
}
} ) ;
} ;
BDFDB . PluginUtils . checkChangeLog = function ( plugin ) {
if ( ! BDFDB . ObjectUtils . is ( plugin ) || ! plugin . changelog ) return ;
var changelog = BDFDB . loadAllData ( plugin , "changelog" ) ;
if ( ! changelog . currentversion || BDFDB . checkVersions ( plugin . version , changelog . currentversion ) ) {
changelog . currentversion = plugin . version ;
BDFDB . saveAllData ( changelog , plugin , "changelog" ) ;
BDFDB . PluginUtils . openChangeLog ( plugin ) ;
}
} ;
BDFDB . PluginUtils . openChangeLog = function ( plugin ) {
if ( ! BDFDB . ObjectUtils . is ( plugin ) || ! plugin . changelog ) return ;
var changeLogHTML = ` <div class=" ${ BDFDB . disCN . modalminicontent } "> ` , logs = false , headers = {
added : "New Features" ,
fixed : "Bug Fixes" ,
improved : "Improvements" ,
progress : "Progress"
} ;
for ( let type in plugin . changelog ) {
type = type . toLowerCase ( ) ;
var classname = BDFDB . disCN [ "changelog" + type ] ;
if ( classname ) {
logs = true ;
changeLogHTML += ` <h1 class=" ${ classname + " " + BDFDB . disCN . margintop20 } " ${ changeLogHTML . indexOf ( "<h1" ) == - 1 ? ` style="margin-top: 0px !important;" ` : "" } > ${ headers [ type ] } </h1><ul> ` ;
for ( let log of plugin . changelog [ type ] ) changeLogHTML += ` <li><strong> ${ log [ 0 ] } </strong> ${ log [ 1 ] ? ( ": " + log [ 1 ] + "." ) : "" } </li> ` ;
changeLogHTML += ` </ul> `
}
}
changeLogHTML += ` </div> `
if ( logs ) BDFDB . openModal ( plugin , { header : BDFDB . LanguageStrings . CHANGE _LOG , children : BDFDB . React . elementToReact ( BDFDB . htmlToElement ( changeLogHTML ) ) , selector : "BDFDB-changelogmodal" } ) ;
} ;
BDFDB . PluginUtils . createSettingsPanel = function ( plugin , children ) {
if ( ! BDFDB . ObjectUtils . is ( plugin ) || ! children || ( ! BDFDB . React . isValidElement ( children ) && ! Array . isArray ( children ) ) || ( Array . isArray ( children ) && ! children . length ) ) return ;
var settingspanel = BDFDB . htmlToElement ( ` <div class=" ${ plugin . name } -settings BDFDB-settings"></div> ` ) ;
BDFDB . React . render ( BDFDB . React . createElement ( LibraryComponents . SettingsPanel , {
title : plugin . name ,
children
} ) , settingspanel ) ;
return settingspanel ;
} ;
InternalBDFDB . clearStartTimeout = function ( plugin ) {
if ( ! BDFDB . ObjectUtils . is ( plugin ) ) return ;
clearTimeout ( plugin . startTimeout ) ;
delete plugin . startTimeout ;
clearTimeout ( plugin . libLoadTimeout ) ;
delete plugin . libLoadTimeout ;
} ;
BDFDB . ObserverUtils = { } ;
BDFDB . ObserverUtils . connect = function ( plugin , eleOrSelec , observer , config = { childList : true } ) {
if ( ! BDFDB . ObjectUtils . is ( plugin ) || ! eleOrSelec || ! observer ) return ;
if ( BDFDB . ObjectUtils . isEmpty ( plugin . observers ) ) plugin . observers = { } ;
if ( ! Array . isArray ( plugin . observers [ observer . name ] ) ) plugin . observers [ observer . name ] = [ ] ;
if ( ! observer . multi ) for ( let subinstance of plugin . observers [ observer . name ] ) subinstance . disconnect ( ) ;
if ( observer . instance ) plugin . observers [ observer . name ] . push ( observer . instance ) ;
var instance = plugin . observers [ observer . name ] [ plugin . observers [ observer . name ] . length - 1 ] ;
if ( instance ) {
var node = Node . prototype . isPrototypeOf ( eleOrSelec ) ? eleOrSelec : typeof eleOrSelec === "string" ? document . querySelector ( eleOrSelec ) : null ;
if ( node ) instance . observe ( node , config ) ;
}
} ;
BDFDB . ObserverUtils . disconnect = function ( plugin , observer ) {
if ( BDFDB . ObjectUtils . is ( plugin ) && ! BDFDB . ObjectUtils . isEmpty ( plugin . observers ) ) {
let observername = typeof observer == "string" ? observer : ( BDFDB . ObjectUtils . is ( observer ) ? observer . name : null ) ;
if ( ! observername ) {
for ( let observer in plugin . observers ) for ( let instance of plugin . observers [ observer ] ) instance . disconnect ( ) ;
delete plugin . observers ;
}
else if ( ! Array . isArray ( plugin . observers [ observername ] ) ) {
for ( let instance of plugin . observers [ observername ] ) instance . disconnect ( ) ;
delete plugin . observers [ observername ] ;
}
}
} ;
BDFDB . ListenerUtils = { } ;
BDFDB . ListenerUtils . add = function ( plugin , ele , actions , selectorOrCallback , callbackOrNothing ) {
if ( ! BDFDB . ObjectUtils . is ( plugin ) || ( ! Node . prototype . isPrototypeOf ( ele ) && ele !== window ) || ! actions ) return ;
var callbackIs4th = typeof selectorOrCallback == "function" ;
var selector = callbackIs4th ? undefined : selectorOrCallback ;
var callback = callbackIs4th ? selectorOrCallback : callbackOrNothing ;
if ( typeof callback != "function" ) return ;
BDFDB . ListenerUtils . remove ( plugin , ele , actions , selector ) ;
for ( var action of actions . split ( " " ) ) {
action = action . split ( "." ) ;
var eventname = action . shift ( ) . toLowerCase ( ) ;
if ( ! eventname ) return ;
var origeventname = eventname ;
eventname = eventname == "mouseenter" || eventname == "mouseleave" ? "mouseover" : eventname ;
var namespace = ( action . join ( "." ) || "" ) + plugin . name ;
if ( ! Array . isArray ( plugin . listeners ) ) plugin . listeners = [ ] ;
var eventcallback = null ;
if ( selector ) {
if ( origeventname == "mouseenter" || origeventname == "mouseleave" ) {
eventcallback = e => {
for ( let child of e . path ) if ( typeof child . matches == "function" && child . matches ( selector ) && ! child [ namespace + "BDFDB" + origeventname ] ) {
child [ namespace + "BDFDB" + origeventname ] = true ;
if ( origeventname == "mouseenter" ) callback ( BDFDB . ListenerUtils . copyEvent ( e , child ) ) ;
let mouseout = e2 => {
if ( e2 . target . contains ( child ) || e2 . target == child || ! child . contains ( e2 . target ) ) {
if ( origeventname == "mouseleave" ) callback ( BDFDB . ListenerUtils . copyEvent ( e , child ) ) ;
delete child [ namespace + "BDFDB" + origeventname ] ;
document . removeEventListener ( "mouseout" , mouseout ) ;
}
} ;
document . addEventListener ( "mouseout" , mouseout ) ;
break ;
}
} ;
}
else {
eventcallback = e => {
for ( let child of e . path ) if ( typeof child . matches == "function" && child . matches ( selector ) ) {
callback ( BDFDB . ListenerUtils . copyEvent ( e , child ) ) ;
break ;
}
} ;
}
}
else eventcallback = e => { callback ( BDFDB . ListenerUtils . copyEvent ( e , ele ) ) ; } ;
plugin . listeners . push ( { ele , eventname , origeventname , namespace , selector , eventcallback } ) ;
ele . addEventListener ( eventname , eventcallback , true ) ;
}
} ;
BDFDB . ListenerUtils . remove = function ( plugin , ele , actions = "" , selector ) {
if ( ! BDFDB . ObjectUtils . is ( plugin ) || ! Array . isArray ( plugin . listeners ) ) return ;
if ( Node . prototype . isPrototypeOf ( ele ) || ele === window ) {
for ( var action of actions . split ( " " ) ) {
action = action . split ( "." ) ;
var eventname = action . shift ( ) . toLowerCase ( ) ;
var namespace = ( action . join ( "." ) || "" ) + plugin . name ;
for ( let listener of plugin . listeners ) {
let removedlisteners = [ ] ;
if ( listener . ele == ele && ( ! eventname || listener . origeventname == eventname ) && listener . namespace == namespace && ( selector === undefined || listener . selector == selector ) ) {
ele . removeEventListener ( listener . eventname , listener . eventcallback , true ) ;
removedlisteners . push ( listener ) ;
}
if ( removedlisteners . length ) plugin . listeners = plugin . listeners . filter ( listener => { return removedlisteners . indexOf ( listener ) < 0 ; } ) ;
}
}
}
else if ( ! ele ) {
for ( let listener of plugin . listeners ) listener . ele . removeEventListener ( listener . eventname , listener . eventcallback , true ) ;
plugin . listeners = [ ] ;
}
} ;
BDFDB . ListenerUtils . addToChildren = function ( node , actions , selector , callback ) {
if ( ! Node . prototype . isPrototypeOf ( node ) || ! actions || ! selector || ! selector . trim ( ) || typeof callback != "function" ) return ;
for ( var action of actions . trim ( ) . split ( " " ) ) if ( action ) {
var eventcallback = callback ;
if ( action == "mouseenter" || action == "mouseleave" ) eventcallback = e => { if ( e . target . matches ( selector ) ) callback ( e ) ; } ;
node . querySelectorAll ( selector . trim ( ) ) . forEach ( child => { child . addEventListener ( action , eventcallback , true ) ; } ) ;
}
} ;
BDFDB . ListenerUtils . copyEvent = function ( e , ele ) {
if ( ! e || ! e . constructor || ! e . type ) return e ;
var ecopy = new e . constructor ( e . type , e ) ;
Object . defineProperty ( ecopy , "originalEvent" , { value : e } ) ;
Object . defineProperty ( ecopy , "which" , { value : e . which } ) ;
Object . defineProperty ( ecopy , "keyCode" , { value : e . keyCode } ) ;
Object . defineProperty ( ecopy , "path" , { value : e . path } ) ;
Object . defineProperty ( ecopy , "relatedTarget" , { value : e . relatedTarget } ) ;
Object . defineProperty ( ecopy , "srcElement" , { value : e . srcElement } ) ;
Object . defineProperty ( ecopy , "target" , { value : e . target } ) ;
Object . defineProperty ( ecopy , "toElement" , { value : e . toElement } ) ;
if ( ele ) Object . defineProperty ( ecopy , "currentTarget" , { value : ele } ) ;
return ecopy ;
} ;
BDFDB . ListenerUtils . stopEvent = function ( e ) {
if ( BDFDB . ObjectUtils . is ( e ) ) {
if ( typeof e . preventDefault == "function" ) e . preventDefault ( ) ;
if ( typeof e . stopPropagation == "function" ) e . stopPropagation ( ) ;
if ( typeof e . stopImmediatePropagation == "function" ) e . stopImmediatePropagation ( ) ;
if ( BDFDB . ObjectUtils . is ( e . originalEvent ) ) {
if ( typeof e . originalEvent . preventDefault == "function" ) e . originalEvent . preventDefault ( ) ;
if ( typeof e . originalEvent . stopPropagation == "function" ) e . originalEvent . stopPropagation ( ) ;
if ( typeof e . originalEvent . stopImmediatePropagation == "function" ) e . originalEvent . stopImmediatePropagation ( ) ;
}
}
} ;
var NotificationBars , DesktopNotificationQueue = { queue : [ ] , running : false } ;
BDFDB . NotificationUtils = { } ;
BDFDB . NotificationUtils . toast = function ( text , options = { } ) {
var toasts = document . querySelector ( ".toasts, .bd-toasts" ) ;
if ( ! toasts ) {
var channels = document . querySelector ( BDFDB . dotCN . channels + " + div" ) ;
var channelrects = channels ? BDFDB . getRects ( channels ) : null ;
var members = channels ? channels . querySelector ( BDFDB . dotCN . memberswrap ) : null ;
var left = channelrects ? channelrects . left : 310 ;
var width = channelrects ? ( members ? channelrects . width - BDFDB . getRects ( members ) . width : channelrects . width ) : window . outerWidth - 0 ;
var form = channels ? channels . querySelector ( "form" ) : null ;
var bottom = form ? BDFDB . getRects ( form ) . height : 80 ;
toasts = BDFDB . htmlToElement ( ` <div class="toasts bd-toasts" style="width: ${ width } px; left: ${ left } px; bottom: ${ bottom } px;"></div> ` ) ;
document . querySelector ( BDFDB . dotCN . app ) . appendChild ( toasts ) ;
}
const { type = "" , icon = true , timeout = 3000 , html = false , selector = "" , nopointer = false , color = "" } = options ;
var toast = BDFDB . htmlToElement ( ` <div class="toast bd-toast"> ${ html === true ? text : BDFDB . encodeToHTML ( text ) } </div> ` ) ;
if ( type ) {
BDFDB . addClass ( toast , "toast-" + type ) ;
if ( icon ) BDFDB . addClass ( toast , "icon" ) ;
}
else if ( color ) {
var rgbcolor = BDFDB . colorCONVERT ( color , "RGB" ) ;
if ( rgbcolor ) toast . style . setProperty ( "background-color" , rgbcolor ) ;
}
BDFDB . addClass ( toast , selector ) ;
toasts . appendChild ( toast ) ;
toast . close = ( ) => {
if ( document . contains ( toast ) ) {
BDFDB . addClass ( toast , "closing" ) ;
toast . style . setProperty ( "pointer-events" , "none" , "important" ) ;
setTimeout ( ( ) => {
toast . remove ( ) ;
if ( ! toasts . querySelectorAll ( ".toast, .bd-toast" ) . length ) toasts . remove ( ) ;
} , 3000 ) ;
}
} ;
if ( nopointer ) toast . style . setProperty ( "pointer-events" , "none" , "important" ) ;
else toast . addEventListener ( "click" , toast . close ) ;
setTimeout ( ( ) => { toast . close ( ) ; } , timeout > 0 ? timeout : 600000 ) ;
return toast ;
} ;
BDFDB . NotificationUtils . desktop = function ( parsedcontent , parsedoptions = { } ) {
var queue = ( ) => {
DesktopNotificationQueue . queue . push ( { parsedcontent , parsedoptions } ) ;
runqueue ( ) ;
} ;
var runqueue = ( ) => {
if ( ! DesktopNotificationQueue . running ) {
var notification = DesktopNotificationQueue . queue . shift ( ) ;
if ( notification ) notify ( notification . parsedcontent , notification . parsedoptions ) ;
}
} ;
var notify = ( content , options ) => {
DesktopNotificationQueue . running = true ;
var muted = options . silent ;
options . silent = options . silent || options . sound ? true : false ;
var notification = new Notification ( content , options ) ;
var audio = new Audio ( ) ;
var timeout = setTimeout ( ( ) => { close ( ) ; } , options . timeout ? options . timeout : 3000 ) ;
if ( typeof options . click == "function" ) notification . onclick = ( ) => {
clearTimeout ( timeout ) ;
close ( ) ;
options . click ( ) ;
} ;
if ( ! muted && options . sound ) {
audio . src = options . sound ;
audio . play ( ) ;
}
var close = ( ) => {
audio . pause ( ) ;
notification . close ( ) ;
DesktopNotificationQueue . running = false ;
setTimeout ( ( ) => { runqueue ( ) ; } , 1000 ) ;
} ;
} ;
if ( ! ( "Notification" in window ) ) { }
else if ( Notification . permission === "granted" ) queue ( ) ;
else if ( Notification . permission !== "denied" ) Notification . requestPermission ( function ( response ) { if ( response === "granted" ) queue ( ) ; } ) ;
} ;
BDFDB . NotificationUtils . notice = function ( text , options = { } ) {
if ( ! text ) return ;
var layers = document . querySelector ( BDFDB . dotCN . layers ) ;
if ( ! layers ) return ;
var id = BDFDB . generateID ( NotificationBars ) ;
var notice = BDFDB . htmlToElement ( ` <div class=" ${ BDFDB . disCN . notice } BDFDB-notice notice- ${ id } "><div class=" ${ BDFDB . disCN . noticedismiss } " style="height:36px !important; position: absolute !important; top: 0 !important; right: 0 !important; left: unset !important;"></div><span class="notice-message"></span></div> ` ) ;
layers . parentElement . insertBefore ( notice , layers ) ;
var noticemessage = notice . querySelector ( ".notice-message" ) ;
if ( options . platform ) for ( let platform of options . platform . split ( " " ) ) if ( DiscordClasses [ "noticeicon" + platform ] ) {
let icon = BDFDB . htmlToElement ( ` <i class=" ${ BDFDB . disCN [ "noticeicon" + platform ] } "></i> ` ) ;
BDFDB . addClass ( icon , BDFDB . disCN . noticeplatformicon ) ;
BDFDB . removeClass ( icon , BDFDB . disCN . noticeicon ) ;
notice . insertBefore ( icon , noticemessage ) ;
}
if ( options . customicon ) {
let iconinner = BDFDB . htmlToElement ( options . customicon )
let icon = BDFDB . htmlToElement ( ` <i></i> ` ) ;
if ( iconinner . tagName == "span" && ! iconinner . firstElementChild ) icon . style . setProperty ( "background" , ` url( ${ options . customicon } ) center/cover no-repeat ` ) ;
else icon . appendChild ( iconinner ) ;
BDFDB . addClass ( icon , BDFDB . disCN . noticeplatformicon ) ;
BDFDB . removeClass ( icon , BDFDB . disCN . noticeicon ) ;
notice . insertBefore ( icon , noticemessage ) ;
}
if ( options . btn || options . button ) notice . appendChild ( BDFDB . htmlToElement ( ` <button class=" ${ BDFDB . disCNS . noticebutton + BDFDB . disCNS . titlesize14 + BDFDB . disCN . weightmedium } "> ${ options . btn || options . button } </button> ` ) ) ;
if ( options . id ) notice . id = options . id . split ( " " ) . join ( "" ) ;
if ( options . selector ) BDFDB . addClass ( notice , options . selector ) ;
if ( options . css ) BDFDB . appendLocalStyle ( "BDFDBcustomnotificationbar" + id , options . css ) ;
if ( options . style ) notice . style = options . style ;
if ( options . html === true ) noticemessage . innerHTML = text ;
else {
var link = document . createElement ( "a" ) ;
var newtext = [ ] ;
for ( let word of text . split ( " " ) ) {
var encodedword = BDFDB . encodeToHTML ( word ) ;
link . href = word ;
newtext . push ( link . host && link . host !== window . location . host ? ` <label class=" ${ BDFDB . disCN . textlink } "> ${ encodedword } </label> ` : encodedword ) ;
}
noticemessage . innerHTML = newtext . join ( " " ) ;
}
var type = null ;
if ( options . type && ! document . querySelector ( BDFDB . dotCNS . chatbase + BDFDB . dotCN . noticestreamer ) ) {
if ( type = BDFDB . disCN [ "notice" + options . type ] ) BDFDB . addClass ( notice , type ) ;
if ( options . type == "premium" ) {
var noticebutton = notice . querySelector ( BDFDB . dotCN . noticebutton ) ;
if ( noticebutton ) BDFDB . addClass ( noticebutton , BDFDB . disCN . noticepremiumaction ) ;
BDFDB . addClass ( noticemessage , BDFDB . disCN . noticepremiumtext ) ;
notice . insertBefore ( BDFDB . htmlToElement ( ` <i class=" ${ BDFDB . disCN . noticepremiumlogo } "></i> ` ) , noticemessage ) ;
}
}
if ( ! type ) {
var comp = BDFDB . colorCONVERT ( options . color , "RGBCOMP" ) ;
if ( comp ) {
var fontcolor = comp [ 0 ] > 180 && comp [ 1 ] > 180 && comp [ 2 ] > 180 ? "#000" : "#FFF" ;
var backgroundcolor = BDFDB . colorCONVERT ( comp , "HEX" ) ;
var filter = comp [ 0 ] > 180 && comp [ 1 ] > 180 && comp [ 2 ] > 180 ? "brightness(0%)" : "brightness(100%)" ;
BDFDB . appendLocalStyle ( "BDFDBcustomnotificationbarColorCorrection" + id , ` .BDFDB-notice.notice- ${ id } {background-color: ${ backgroundcolor } !important;}.BDFDB-notice.notice- ${ id } .notice-message {color: ${ fontcolor } !important;}.BDFDB-notice.notice- ${ id } ${ BDFDB . dotCN . noticebutton } {color: ${ fontcolor } !important;border-color: ${ BDFDB . colorSETALPHA ( fontcolor , 0.25 , "RGBA" ) } !important;}.BDFDB-notice.notice- ${ id } ${ BDFDB . dotCN . noticebutton } :hover {color: ${ backgroundcolor } !important;background-color: ${ fontcolor } !important;}.BDFDB-notice.notice- ${ id } ${ BDFDB . dotCN . noticedismiss } {filter: ${ filter } !important;} ` ) ;
}
else BDFDB . addClass ( notice , BDFDB . disCN . noticedefault ) ;
}
notice . style . setProperty ( "height" , "36px" , "important" ) ;
notice . style . setProperty ( "min-width" , "70vw" , "important" ) ;
notice . style . setProperty ( "left" , "unset" , "important" ) ;
notice . style . setProperty ( "right" , "unset" , "important" ) ;
let sidemargin = ( ( BDFDB . getTotalWidth ( document . body . firstElementChild ) - BDFDB . getTotalWidth ( notice ) ) / 2 ) ;
notice . style . setProperty ( "left" , sidemargin + "px" , "important" ) ;
notice . style . setProperty ( "right" , sidemargin + "px" , "important" ) ;
notice . style . setProperty ( "min-width" , "unset" , "important" ) ;
notice . style . setProperty ( "width" , "unset" , "important" ) ;
notice . style . setProperty ( "max-width" , "calc(100vw - " + ( sidemargin * 2 ) + "px)" , "important" ) ;
notice . querySelector ( BDFDB . dotCN . noticedismiss ) . addEventListener ( "click" , ( ) => {
notice . style . setProperty ( "overflow" , "hidden" , "important" ) ;
notice . style . setProperty ( "height" , "0px" , "important" ) ;
setTimeout ( ( ) => {
BDFDB . ArrayUtils . remove ( NotificationBars , id ) ;
BDFDB . removeLocalStyle ( "BDFDBcustomnotificationbar" + id ) ;
BDFDB . removeLocalStyle ( "BDFDBcustomnotificationbarColorCorrection" + id ) ;
notice . remove ( ) ;
} , 500 ) ;
} ) ;
return notice ;
} ;
BDFDB . NotificationUtils . alert = function ( header , body ) {
if ( typeof header == "string" && typeof header == "string" && window . BdApi && typeof BdApi . alert == "function" ) BdApi . alert ( header , body ) ;
} ;
var Tooltips = [ ] ;
BDFDB . TooltipUtils = { } ;
BDFDB . TooltipUtils . create = function ( anker , text , options = { } ) {
var itemlayercontainernative = document . querySelector ( BDFDB . dotCN . itemlayercontainer ) ;
if ( ! itemlayercontainernative || typeof text != "string" || ! Node . prototype . isPrototypeOf ( anker ) || ! document . contains ( anker ) ) return null ;
var itemlayercontainer = document . querySelector ( ".BDFDB-itemlayercontainer" ) ;
if ( ! itemlayercontainer ) {
itemlayercontainer = itemlayercontainernative . cloneNode ( ) ;
BDFDB . addClass ( itemlayercontainer , "BDFDB-itemlayercontainer" ) ;
itemlayercontainernative . parentElement . insertBefore ( itemlayercontainer , itemlayercontainernative . nextSibling ) ;
}
var id = BDFDB . generateID ( Tooltips ) ;
var itemlayer = BDFDB . htmlToElement ( ` <div class=" ${ BDFDB . disCN . itemlayer } BDFDB-itemlayer itemlayer- ${ id } "><div class=" ${ BDFDB . disCN . tooltip } "></div></div> ` ) ;
itemlayer . appendChild ( node ) ;
itemlayercontainer . appendChild ( itemlayer ) ;
var tooltip = itemlayer . firstElementChild ;
if ( options . id ) tooltip . id = options . id . split ( " " ) . join ( "" ) ;
if ( options . selector ) BDFDB . addClass ( tooltip , options . selector ) ;
if ( options . style ) tooltip . style = options . style ;
if ( options . html === true ) tooltip . innerHTML = text ;
else tooltip . innerText = text ;
if ( options . type && BDFDB . disCN [ "tooltip" + options . type . toLowerCase ( ) ] ) {
BDFDB . addClass ( tooltip , BDFDB . disCN [ "tooltip" + options . type . toLowerCase ( ) ] ) ;
tooltip . appendChild ( BDFDB . htmlToElement ( ` <div class=" ${ BDFDB . disCN . tooltippointer } "></div> ` ) ) ;
}
if ( tooltip . style . getPropertyValue ( "border-color" ) && ( tooltip . style . getPropertyValue ( "background-color" ) || tooltip . style . getPropertyValue ( "background-image" ) ) ) BDFDB . addClass ( tooltip , "tooltip-customcolor" ) ;
else if ( options . color && BDFDB . disCN [ "tooltip" + options . color . toLowerCase ( ) ] ) BDFDB . addClass ( tooltip , BDFDB . disCN [ "tooltip" + options . color . toLowerCase ( ) ] ) ;
else BDFDB . addClass ( tooltip , BDFDB . disCN . tooltipblack ) ;
if ( ! options . position || options . type ) options . position = options . type ;
if ( ! options . position || ! [ "top" , "bottom" , "left" , "right" ] . includes ( options . position . toLowerCase ( ) ) ) options . position = "right" ;
tooltip . position = options . position . toLowerCase ( ) ;
tooltip . anker = anker ;
if ( options . css ) BDFDB . appendLocalStyle ( "BDFDBcustomItemLayer" + id , options . css , itemlayercontainer ) ;
var mouseleave = ( ) => {
BDFDB . removeEles ( itemlayer ) ;
} ;
anker . addEventListener ( "mouseleave" , mouseleave ) ;
var observer = new MutationObserver ( changes => {
changes . forEach ( change => {
var nodes = Array . from ( change . removedNodes ) ;
var ownmatch = nodes . indexOf ( itemlayer ) > - 1 ;
var ankermatch = nodes . indexOf ( anker ) > - 1 ;
var parentmatch = nodes . some ( n => n . contains ( anker ) ) ;
if ( ownmatch || ankermatch || parentmatch ) {
BDFDB . ArrayUtils . remove ( Tooltips , id ) ;
observer . disconnect ( ) ;
BDFDB . removeEles ( itemlayer ) ;
BDFDB . removeLocalStyle ( "BDFDBcustomItemLayer" + id , itemlayercontainer ) ;
if ( ! itemlayercontainer . firstElementChild ) BDFDB . removeEles ( itemlayercontainer ) ;
anker . removeEventListener ( "mouseleave" , mouseleave ) ;
}
} ) ;
} ) ;
observer . observe ( document . body , { subtree : true , childList : true } ) ;
BDFDB . TooltipUtils . update ( tooltip ) ;
if ( options . delay ) {
BDFDB . toggleEles ( tooltip ) ;
setTimeout ( ( ) => { BDFDB . toggleEles ( tooltip ) ; } , options . delay ) ;
}
return tooltip ;
} ;
BDFDB . TooltipUtils . update = function ( tooltip ) {
if ( ! Node . prototype . isPrototypeOf ( tooltip ) ) return ;
let itemlayer = BDFDB . getParentEle ( BDFDB . dotCN . itemlayer , tooltip ) ;
if ( ! Node . prototype . isPrototypeOf ( itemlayer ) ) return ;
tooltip = itemlayer . querySelector ( BDFDB . dotCN . tooltip ) ;
if ( ! Node . prototype . isPrototypeOf ( tooltip ) || ! Node . prototype . isPrototypeOf ( tooltip . anker ) || ! tooltip . position ) return ;
var pointer = tooltip . querySelector ( BDFDB . dotCN . tooltippointer ) ;
var left , top , trects = BDFDB . getRects ( tooltip . anker ) , irects = BDFDB . getRects ( itemlayer ) , arects = BDFDB . getRects ( document . querySelector ( BDFDB . dotCN . appmount ) ) , positionoffsets = { height : pointer ? 10 : 0 , width : pointer ? 10 : 0 } ;
switch ( tooltip . position ) {
case "top" :
top = trects . top - irects . height - positionoffsets . height + 2 ;
left = trects . left + ( trects . width - irects . width ) / 2 ;
break ;
case "bottom" :
top = trects . top + trects . height + positionoffsets . height - 2 ;
left = trects . left + ( trects . width - irects . width ) / 2 ;
break ;
case "left" :
top = trects . top + ( trects . height - irects . height ) / 2 ;
left = trects . left - irects . width - positionoffsets . width + 2 ;
break ;
case "right" :
top = trects . top + ( trects . height - irects . height ) / 2 ;
left = trects . left + trects . width + positionoffsets . width - 2 ;
break ;
}
itemlayer . style . setProperty ( "top" , top + "px" ) ;
itemlayer . style . setProperty ( "left" , left + "px" ) ;
pointer . style . removeProperty ( "margin-left" ) ;
pointer . style . removeProperty ( "margin-top" ) ;
if ( tooltip . position == "top" || tooltip . position == "bottom" ) {
if ( left < 0 ) {
itemlayer . style . setProperty ( "left" , "5px" ) ;
pointer . style . setProperty ( "margin-left" , ` ${ left - 10 } px ` ) ;
}
else {
var rightmargin = arects . width - ( left + irects . width ) ;
if ( rightmargin < 0 ) {
itemlayer . style . setProperty ( "left" , arects . width - irects . width - 5 + "px" ) ;
pointer . style . setProperty ( "margin-left" , ` ${ - 1 * rightmargin } px ` ) ;
}
}
}
else if ( tooltip . position == "left" || tooltip . position == "right" ) {
if ( top < 0 ) {
itemlayer . style . setProperty ( "top" , "5px" ) ;
pointer . style . setProperty ( "margin-top" , ` ${ top - 10 } px ` ) ;
}
else {
var bottommargin = arects . height - ( top + irects . height ) ;
if ( bottommargin < 0 ) {
itemlayer . style . setProperty ( "top" , arects . height - irects . height - 5 + "px" ) ;
pointer . style . setProperty ( "margin-top" , ` ${ - 1 * bottommargin } px ` ) ;
}
}
}
} ;
BDFDB . ObjectUtils = { } ;
BDFDB . ObjectUtils . is = function ( obj ) {
return obj && Object . prototype . isPrototypeOf ( obj ) && ! Array . prototype . isPrototypeOf ( obj ) ;
} ;
BDFDB . ObjectUtils . sort = function ( obj , sort , except ) {
if ( ! BDFDB . ObjectUtils . is ( obj ) ) return { } ;
var newobj = { } ;
if ( sort === undefined || ! sort ) for ( let key of Object . keys ( obj ) . sort ( ) ) newobj [ key ] = obj [ key ] ;
else {
let values = [ ] ;
for ( let key in obj ) values . push ( obj [ key ] ) ;
values = BDFDB . ArrayUtils . keySort ( values , sort , except ) ;
for ( let value of values ) for ( let key in obj ) if ( BDFDB . equals ( value , obj [ key ] ) ) {
newobj [ key ] = value ;
break ;
}
}
return newobj ;
} ;
BDFDB . ObjectUtils . reverse = function ( obj , sort ) {
if ( ! BDFDB . ObjectUtils . is ( obj ) ) return { } ;
var newobj = { } ;
for ( let key of ( sort === undefined || ! sort ) ? Object . keys ( obj ) . reverse ( ) : Object . keys ( obj ) . sort ( ) . reverse ( ) ) newobj [ key ] = obj [ key ] ;
return newobj ;
} ;
BDFDB . ObjectUtils . filter = function ( obj , filter , bykey = false ) {
if ( ! BDFDB . ObjectUtils . is ( obj ) ) return { } ;
if ( typeof filter != "function" ) return obj ;
return Object . keys ( obj ) . filter ( key => filter ( bykey ? key : obj [ key ] ) ) . reduce ( ( newobj , key ) => ( redobj [ key ] = obj [ key ] , newobj ) , { } ) ;
} ;
BDFDB . ObjectUtils . push = function ( obj , value ) {
if ( BDFDB . ObjectUtils . is ( obj ) ) obj [ Object . keys ( obj ) . length ] = value ;
} ;
BDFDB . ObjectUtils . pop = function ( obj , value ) {
if ( BDFDB . ObjectUtils . is ( obj ) ) {
let keys = Object . keys ( obj ) ;
if ( ! keys . length ) return ;
let value = obj [ keys [ keys . length - 1 ] ] ;
delete obj [ keys [ keys . length - 1 ] ] ;
return value ;
}
} ;
BDFDB . ObjectUtils . map = function ( obj , keyname ) {
if ( ! BDFDB . ObjectUtils . is ( obj ) ) return { } ;
if ( typeof keyname != "string" ) return obj ;
var newobj = { } ;
for ( let key in obj ) if ( BDFDB . ObjectUtils . is ( obj [ key ] ) ) newobj [ key ] = obj [ key ] [ keyname ] ;
return newobj ;
} ;
BDFDB . ObjectUtils . deepAssign = function ( obj , ... objs ) {
if ( ! objs . length ) return obj ;
var nextobj = objs . shift ( ) ;
if ( BDFDB . ObjectUtils . is ( obj ) && BDFDB . ObjectUtils . is ( nextobj ) ) {
for ( var key in nextobj ) {
if ( BDFDB . ObjectUtils . is ( nextobj [ key ] ) ) {
if ( ! obj [ key ] ) Object . assign ( obj , { [ key ] : { } } ) ;
BDFDB . ObjectUtils . deepAssign ( obj [ key ] , nextobj [ key ] ) ;
}
else Object . assign ( obj , { [ key ] : nextobj [ key ] } ) ;
}
}
return BDFDB . ObjectUtils . deepAssign ( obj , ... objs ) ;
} ;
BDFDB . ObjectUtils . isEmpty = function ( obj ) {
return ! BDFDB . ObjectUtils . is ( obj ) || Object . getOwnPropertyNames ( obj ) . length == 0 ;
} ;
BDFDB . ArrayUtils = { } ;
BDFDB . ArrayUtils . is = function ( array ) {
return array && Array . isArray ( array ) ;
} ;
BDFDB . ArrayUtils . keySort = function ( array , key , except ) {
if ( ! BDFDB . ArrayUtils . is ( array ) ) return [ ] ;
if ( key == null ) return array ;
if ( except === undefined ) except = null ;
return array . sort ( function ( x , y ) {
var xvalue = x [ key ] , yvalue = y [ key ] ;
if ( xvalue !== except ) return xvalue < yvalue ? - 1 : xvalue > yvalue ? 1 : 0 ;
} ) ;
} ;
BDFDB . ArrayUtils . numSort = function ( array ) {
return array . sort ( function ( x , y ) { return x < y ? - 1 : x > y ? 1 : 0 ; } ) ;
} ;
BDFDB . ArrayUtils . remove = function ( array , value , all = false ) {
if ( ! BDFDB . ArrayUtils . is ( array ) ) return [ ] ;
if ( ! array . includes ( value ) ) return array ;
if ( ! all ) array . splice ( array . indexOf ( value ) , 1 ) ;
else while ( array . indexOf ( value ) > - 1 ) array . splice ( array . indexOf ( value ) , 1 ) ;
return array ;
} ;
BDFDB . ArrayUtils . getAllIndexes = function ( array , value ) {
if ( ! BDFDB . ArrayUtils . is ( array ) ) return [ ] ;
var indexes = [ ] , index = - 1 ;
while ( ( index = array . indexOf ( value , index + 1 ) ) !== - 1 ) indexes . push ( index ) ;
return indexes ;
} ;
BDFDB . ArrayUtils . removeCopies = function ( array ) {
if ( ! BDFDB . ArrayUtils . is ( array ) ) return [ ] ;
return [ ... new Set ( array ) ] ;
} ;
BDFDB . highlightText = function ( text , searchstring ) {
if ( ! searchstring || searchstring . length < 1 ) return text ;
var offset = 0 , original = text , prefix = ` <span class=" ${ BDFDB . disCN . highlight } "> ` , suffix = ` </span> ` ;
BDFDB . ArrayUtils . getAllIndexes ( text . toUpperCase ( ) , searchstring . toUpperCase ( ) ) . forEach ( index => {
var d1 = offset * ( prefix . length + suffix . length ) ;
index = index + d1 ;
var d2 = index + searchstring . length ;
var d3 = [ - 1 ] . concat ( BDFDB . ArrayUtils . getAllIndexes ( text . substring ( 0 , index ) , "<" ) ) ;
var d4 = [ - 1 ] . concat ( BDFDB . ArrayUtils . getAllIndexes ( text . substring ( 0 , index ) , ">" ) ) ;
if ( d3 [ d3 . length - 1 ] > d4 [ d4 . length - 1 ] ) return ;
text = text . substring ( 0 , index ) + prefix + text . substring ( index , d2 ) + suffix + text . substring ( d2 ) ;
offset ++ ;
} ) ;
return text ? text : original ;
} ;
BDFDB . languages = {
"$discord" : { name : "Discord (English (US))" , id : "en-US" , ownlang : "English (US)" , integrated : false , dic : false } ,
"af" : { name : "Afrikaans" , id : "af" , ownlang : "Afrikaans" , integrated : false , dic : true } ,
"sq" : { name : "Albanian" , id : "sq" , ownlang : "Shqiptar" , integrated : false , dic : false } ,
"am" : { name : "Amharic" , id : "am" , ownlang : "አማርኛ" , integrated : false , dic : false } ,
"ar" : { name : "Arabic" , id : "ar" , ownlang : "اللغة العربية" , integrated : false , dic : false } ,
"hy" : { name : "Armenian" , id : "hy" , ownlang : "Հայերեն" , integrated : false , dic : false } ,
"az" : { name : "Azerbaijani" , id : "az" , ownlang : "آذربایجان دیلی" , integrated : false , dic : false } ,
"eu" : { name : "Basque" , id : "eu" , ownlang : "Euskara" , integrated : false , dic : false } ,
"be" : { name : "Belarusian" , id : "be" , ownlang : "Беларуская" , integrated : false , dic : false } ,
"bn" : { name : "Bengali" , id : "bn" , ownlang : "বাংলা" , integrated : false , dic : false } ,
"bs" : { name : "Bosnian" , id : "bs" , ownlang : "Босански" , integrated : false , dic : false } ,
"bg" : { name : "Bulgarian" , id : "bg" , ownlang : "български" , integrated : true , dic : false } ,
"my" : { name : "Burmese" , id : "my" , ownlang : "မြန်မာစာ" , integrated : false , dic : false } ,
"ca" : { name : "Catalan" , id : "ca" , ownlang : "Català" , integrated : false , dic : false } ,
"ceb" : { name : "Cebuano" , id : "ceb" , ownlang : "Bisaya" , integrated : false , dic : false } ,
"ny" : { name : "Chewa" , id : "ny" , ownlang : "Nyanja" , integrated : false , dic : false } ,
"zh-HK" : { name : "Chinese (Hong Kong)" , id : "zh-HK" , ownlang : "香港中文" , integrated : false , dic : false } ,
"zh-CN" : { name : "Chinese (Simplified)" , id : "zh-CN" , ownlang : "简体中文" , integrated : false , dic : false } ,
"zh-TW" : { name : "Chinese (Traditional)" , id : "zh-TW" , ownlang : "繁體中文" , integrated : true , dic : false } ,
"co" : { name : "Corsican" , id : "co" , ownlang : "Corsu" , integrated : false , dic : false } ,
"hr" : { name : "Croatian" , id : "hr" , ownlang : "Hrvatski" , integrated : true , dic : false } ,
"cs" : { name : "Czech" , id : "cs" , ownlang : "Čeština" , integrated : true , dic : false } ,
"da" : { name : "Danish" , id : "da" , ownlang : "Dansk" , integrated : true , dic : true } ,
"nl" : { name : "Dutch" , id : "nl" , ownlang : "Nederlands" , integrated : true , dic : true } ,
"en" : { name : "English" , id : "en" , ownlang : "English" , integrated : false , dic : true } ,
"en-GB" : { name : "English (UK)" , id : "en-GB" , ownlang : "English (UK)" , integrated : true , dic : true } ,
"en-US" : { name : "English (US)" , id : "en-US" , ownlang : "English (US)" , integrated : true , dic : true } ,
"eo" : { name : "Esperanto" , id : "eo" , ownlang : "Esperanto" , integrated : false , dic : false } ,
"et" : { name : "Estonian" , id : "et" , ownlang : "Eesti" , integrated : false , dic : false } ,
"fil" : { name : "Filipino" , id : "fil" , ownlang : "Wikang Filipino" , integrated : false , dic : false } ,
"fi" : { name : "Finnish" , id : "fi" , ownlang : "Suomi" , integrated : true , dic : false } ,
"fr" : { name : "French" , id : "fr" , ownlang : "Français" , integrated : true , dic : true } ,
"fr-CA" : { name : "French (Canadian)" , id : "fr-CA" , ownlang : "Français Canadien" , integrated : false , dic : false } ,
"fy" : { name : "Frisian" , id : "fy" , ownlang : "Frysk" , integrated : false , dic : false } ,
"gl" : { name : "Galician" , id : "gl" , ownlang : "Galego" , integrated : false , dic : false } ,
"ka" : { name : "Georgian" , id : "ka" , ownlang : "ქართული" , integrated : false , dic : false } ,
"de" : { name : "German" , id : "de" , ownlang : "Deutsch" , integrated : true , dic : true } ,
"de-AT" : { name : "German (Austria)" , id : "de-AT" , ownlang : "Österreichisch Deutsch" , integrated : false , dic : false } ,
"de-CH" : { name : "German (Switzerland)" , id : "de-CH" , ownlang : "Schweizerdeutsch" , integrated : false , dic : false } ,
"el" : { name : "Greek" , id : "el" , ownlang : "Ελληνικά" , integrated : false , dic : false } ,
"gu" : { name : "Gujarati" , id : "gu" , ownlang : "ગુજરાતી" , integrated : false , dic : false } ,
"ht" : { name : "Haitian Creole" , id : "ht" , ownlang : "Kreyòl Ayisyen" , integrated : false , dic : false } ,
"ha" : { name : "Hausa" , id : "ha" , ownlang : "حَوْسَ" , integrated : false , dic : false } ,
"haw" : { name : "Hawaiian" , id : "haw" , ownlang : "ʻ Ōlelo Hawaiʻ i" , integrated : false , dic : false } ,
"iw" : { name : "Hebrew" , id : "iw" , ownlang : "עברית" , integrated : false , dic : false } ,
"hi" : { name : "Hindi" , id : "hi" , ownlang : "हिन्दी" , integrated : false , dic : false } ,
"hmn" : { name : "Hmong" , id : "hmn" , ownlang : "lol Hmongb" , integrated : false , dic : false } ,
"hu" : { name : "Hungarain" , id : "hu" , ownlang : "Magyar" , integrated : false , dic : false } ,
"is" : { name : "Icelandic" , id : "is" , ownlang : "Íslenska" , integrated : false , dic : false } ,
"ig" : { name : "Igbo" , id : "ig" , ownlang : "Asụsụ Igbo" , integrated : false , dic : false } ,
"id" : { name : "Indonesian" , id : "id" , ownlang : "Bahasa Indonesia" , integrated : false , dic : false } ,
"ga" : { name : "Irish" , id : "ga" , ownlang : "Gaeilge" , integrated : false , dic : false } ,
"it" : { name : "Italian" , id : "it" , ownlang : "Italiano" , integrated : true , dic : true } ,
"ja" : { name : "Japanese" , id : "ja" , ownlang : "日本語" , integrated : true , dic : false } ,
"jv" : { name : "Javanese" , id : "jv" , ownlang : "ꦧꦱꦗꦮ" , integrated : false , dic : false } ,
"kn" : { name : "Kannada" , id : "kn" , ownlang : "ಕನ್ನಡ" , integrated : false , dic : false } ,
"kk" : { name : "Kazakh" , id : "kk" , ownlang : "Қазақ Tі лі " , integrated : false , dic : false } ,
"km" : { name : "Khmer" , id : "km" , ownlang : "ភាសាខ្មែរ" , integrated : false , dic : false } ,
"ko" : { name : "Korean" , id : "ko" , ownlang : "한국어" , integrated : true , dic : false } ,
"ku" : { name : "Kurdish" , id : "ku" , ownlang : "کوردی" , integrated : false , dic : false } ,
"ky" : { name : "Kyrgyz" , id : "ky" , ownlang : "кыргызча" , integrated : false , dic : false } ,
"lo" : { name : "Lao" , id : "lo" , ownlang : "ພາສາລາວ" , integrated : false , dic : false } ,
"la" : { name : "Latin" , id : "la" , ownlang : "Latina" , integrated : false , dic : false } ,
"lv" : { name : "Latvian" , id : "lv" , ownlang : "Latviešu" , integrated : false , dic : false } ,
"lt" : { name : "Lithuanian" , id : "lt" , ownlang : "Lietuvių" , integrated : false , dic : false } ,
"lb" : { name : "Luxembourgish" , id : "lb" , ownlang : "Lëtzebuergesch" , integrated : false , dic : false } ,
"mk" : { name : "Macedonian" , id : "mk" , ownlang : "Mа ке до нс ки" , integrated : false , dic : false } ,
"mg" : { name : "Malagasy" , id : "mg" , ownlang : "Malagasy" , integrated : false , dic : false } ,
"ms" : { name : "Malay" , id : "ms" , ownlang : "بهاس ملايو" , integrated : false , dic : false } ,
"ml" : { name : "Malayalam" , id : "ml" , ownlang : "മലയാളം" , integrated : false , dic : false } ,
"mt" : { name : "Maltese" , id : "mt" , ownlang : "Malti" , integrated : false , dic : false } ,
"mi" : { name : "Maori" , id : "mi" , ownlang : "te Reo Māori" , integrated : false , dic : false } ,
"mr" : { name : "Marathi" , id : "mr" , ownlang : "मराठी" , integrated : false , dic : false } ,
"mn" : { name : "Mongolian" , id : "mn" , ownlang : "Монгол Хэл" , integrated : false , dic : false } ,
"ne" : { name : "Nepali" , id : "ne" , ownlang : "नेपाली" , integrated : false , dic : false } ,
"no" : { name : "Norwegian" , id : "no" , ownlang : "Norsk" , integrated : true , dic : false } ,
"ps" : { name : "Pashto" , id : "ps" , ownlang : "پښتو" , integrated : false , dic : false } ,
"fa" : { name : "Persian" , id : "fa" , ownlang : "فارسی" , integrated : false , dic : false } ,
"pl" : { name : "Polish" , id : "pl" , ownlang : "Polski" , integrated : true , dic : false } ,
"pt" : { name : "Portuguese" , id : "pt" , ownlang : "Português" , integrated : false , dic : true } ,
"pt-BR" : { name : "Portuguese (Brazil)" , id : "pt-BR" , ownlang : "Português do Brasil" , integrated : true , dic : true } ,
"pt-PT" : { name : "Portuguese (Portugal)" , id : "pt-PT" , ownlang : "Português do Portugal" , integrated : false , dic : false } ,
"pa" : { name : "Punjabi" , id : "pa" , ownlang : "पंजाबी" , integrated : false , dic : false } ,
"ro" : { name : "Romanian" , id : "ro" , ownlang : "Română" , integrated : false , dic : false } ,
"ru" : { name : "Russian" , id : "ru" , ownlang : "Pу с с кий" , integrated : true , dic : true } ,
"sm" : { name : "Samoan" , id : "sm" , ownlang : "Gagana Sāmoa" , integrated : false , dic : false } ,
"gd" : { name : "Scottish Gaelic" , id : "gd" , ownlang : "Gàidhlig" , integrated : false , dic : false } ,
"sr" : { name : "Serbian" , id : "sr" , ownlang : "Српски" , integrated : false , dic : false } ,
"st" : { name : "Sotho" , id : "st" , ownlang : "Sesotho" , integrated : false , dic : false } ,
"sn" : { name : "Shona" , id : "sn" , ownlang : "Shona" , integrated : false , dic : false } ,
"sd" : { name : "Sindhi" , id : "sd" , ownlang : "سنڌي" , integrated : false , dic : false } ,
"si" : { name : "Sinhala" , id : "si" , ownlang : "සිංහල" , integrated : false , dic : false } ,
"sk" : { name : "Slovak" , id : "sk" , ownlang : "Slovenčina" , integrated : false , dic : false } ,
"sl" : { name : "Slovenian" , id : "sl" , ownlang : "Slovenščina" , integrated : false , dic : false } ,
"es" : { name : "Spanish" , id : "es" , ownlang : "Español" , integrated : true , dic : true } ,
"es-419" : { name : "Spanish (Latin America)" , id : "es-419" , ownlang : "Español latinoamericano" , integrated : false , dic : false } ,
"sw" : { name : "Swahili" , id : "sw" , ownlang : "Kiswahili" , integrated : false , dic : false } ,
"sv" : { name : "Swedish" , id : "sv" , ownlang : "Svenska" , integrated : true , dic : true } ,
"tg" : { name : "Tajik" , id : "tg" , ownlang : "тоҷикӣ" , integrated : false , dic : false } ,
"ta" : { name : "Tamil" , id : "ta" , ownlang : "தமிழ்" , integrated : false , dic : false } ,
"te" : { name : "Telugu" , id : "te" , ownlang : "తెలుగు" , integrated : false , dic : false } ,
"th" : { name : "Thai" , id : "th" , ownlang : "ภาษาไทย" , integrated : false , dic : false } ,
"tr" : { name : "Turkish" , id : "tr" , ownlang : "Türkçe" , integrated : true , dic : false } ,
"uk" : { name : "Ukrainian" , id : "uk" , ownlang : "Yкр а їнс ький" , integrated : true , dic : false } ,
"ur" : { name : "Urdu" , id : "ur" , ownlang : "اُردُو" , integrated : false , dic : false } ,
"uz" : { name : "Uzbek" , id : "uz" , ownlang : "اوزبیک" , integrated : false , dic : false } ,
"vi" : { name : "Vietnamese" , id : "vi" , ownlang : "Tiếng Việt Nam" , integrated : false , dic : false } ,
"cy" : { name : "Welsh" , id : "cy" , ownlang : "Cymraeg" , integrated : false , dic : false } ,
"xh" : { name : "Xhosa" , id : "xh" , ownlang : "Xhosa" , integrated : false , dic : false } ,
"yi" : { name : "Yiddish" , id : "yi" , ownlang : "ייִדיש ייִדיש" , integrated : false , dic : false } ,
"yo" : { name : "Yoruba" , id : "yo" , ownlang : "Èdè Yorùbá" , integrated : false , dic : false } ,
"zu" : { name : "Zulu" , id : "zu" , ownlang : "Zulu" , integrated : false , dic : false }
} ;
var initDiscordLanguageInterval = setInterval ( ( ) => {
if ( document . querySelector ( "html" ) . lang ) {
clearInterval ( initDiscordLanguageInterval ) ;
var language = BDFDB . DiscordUtils . getLanguage ( ) ;
BDFDB . languages . $discord . name = ` Discord ( ${ language . name } ) ` ;
BDFDB . languages . $discord . id = language . id ;
BDFDB . languages . $discord . ownlang = language . ownlang ;
}
} , 100 ) ;
BDFDB . getReactInstance = function ( node ) {
if ( ! BDFDB . ObjectUtils . is ( node ) ) return null ;
return node [ Object . keys ( node ) . find ( key => key . startsWith ( "__reactInternalInstance" ) ) ] ;
} ;
BDFDB . getReactValue = function ( nodeOrInstance , valuepath ) {
if ( ! nodeOrInstance || ! valuepath ) return null ;
let instance = Node . prototype . isPrototypeOf ( nodeOrInstance ) ? BDFDB . getReactInstance ( nodeOrInstance ) : nodeOrInstance ;
if ( ! BDFDB . ObjectUtils . is ( instance ) ) return null ;
let found = instance , values = valuepath . split ( "." ) . filter ( n => n ) ;
for ( let i = 0 ; i < values . length ; i ++ ) {
if ( ! found ) return null ;
found = found [ values [ i ] ] ;
}
return found ;
} ;
BDFDB . setReactValue = function ( nodeOrInstance , valuepath , value ) {
if ( ! nodeOrInstance || ! valuepath || ! value ) return false ;
let instance = Node . prototype . isPrototypeOf ( nodeOrInstance ) ? BDFDB . getReactInstance ( nodeOrInstance ) : nodeOrInstance ;
if ( ! BDFDB . ObjectUtils . is ( instance ) ) return false ;
let found = instance , values = valuepath . split ( "." ) . filter ( n => n ) ;
for ( let i = 0 ; i < values . length ; i ++ ) {
found = found [ values [ i ] ] ;
if ( found === undefined && i < values . length - 1 ) return false ;
}
found = value ;
return true ;
} ;
BDFDB . getOwnerInstance = function ( config ) {
if ( config === undefined ) return null ;
if ( ! config . node && ! config . instance || ! config . name && ( ! config . props || ! Array . isArray ( config . props ) ) ) return null ;
var instance = config . instance || BDFDB . getReactInstance ( config . node ) ;
if ( ! instance ) return null ;
config . name = config . name && ! Array . isArray ( config . name ) ? Array . of ( config . name ) : config . name ;
var depth = - 1 ;
var maxdepth = config . depth === undefined ? 15 : config . depth ;
var up = config . up === undefined ? false : config . up ;
var start = performance . now ( ) ;
var maxtime = config . time === undefined ? 150 : config . time ;
var whitelist = up ? { return : true , sibling : true , _reactInternalFiber : true } : { child : true , sibling : true , _reactInternalFiber : true } ;
var foundinstances = { } ;
var singleinstance = getInstance ( instance ) ;
if ( config . all ) {
for ( let type in foundinstances ) {
if ( config . group ) for ( let instance in foundinstances [ type ] ) delete foundinstances [ type ] [ instance ] . BDFDBreactSearch ;
else delete foundinstances [ type ] . BDFDBreactSearch ;
}
return foundinstances ;
}
else return singleinstance ;
function getInstance ( instance ) {
depth ++ ;
if ( ! instance || Node . prototype . isPrototypeOf ( instance ) || BDFDB . getReactInstance ( instance ) || depth > maxdepth || performance . now ( ) - start > maxtime ) return null ;
else {
var keys = Object . getOwnPropertyNames ( instance ) ;
var result = null ;
for ( let i = 0 ; result == null && i < keys . length ; i ++ ) {
var key = keys [ i ] ;
var value = instance [ key ] ;
var statenode = instance . stateNode ? instance . stateNode : ( instance . return ? instance . return . stateNode : null ) ;
if ( statenode && ! Node . prototype . isPrototypeOf ( statenode ) && ( instance . type && config . name && config . name . some ( name => instance . type . displayName === name . split ( " _ _ " ) [ 0 ] || instance . type . name === name . split ( " _ _ " ) [ 0 ] ) || config . props && config . props . every ( prop => statenode [ prop ] !== undefined ) || config . defaultProps && config . defaultProps . every ( prop => statenode [ prop ] !== undefined ) ) ) {
if ( config . all === undefined || ! config . all ) result = statenode ;
else if ( config . all ) {
if ( config . noCopies === undefined || ! config . noCopies || config . noCopies && ! statenode . BDFDBreactSearch ) {
statenode . BDFDBreactSearch = true ;
if ( config . group ) {
if ( config . name && instance . type && ( instance . type . displayName || instance . type . name ) ) {
var group = "Default" ;
for ( let name of config . name ) if ( instance . type . displayName === name . split ( " _ _ " ) [ 0 ] || instance . type . name === name . split ( " _ _ " ) [ 0 ] ) {
group = name ;
break ;
}
if ( typeof foundinstances [ group ] == "undefined" ) foundinstances [ group ] = { } ;
BDFDB . ObjectUtils . push ( foundinstances [ group ] , statenode ) ;
}
}
else BDFDB . ObjectUtils . push ( foundinstances , statenode ) ;
}
}
}
if ( result == null && ( typeof value === "object" || typeof value === "function" ) && whitelist [ key ] ) result = getInstance ( value ) ;
}
}
depth -- ;
return result ;
}
} ;
BDFDB . getKeyInformation = function ( config ) {
if ( config === undefined ) return null ;
if ( ! config . node && ! config . instance || ! config . key ) return null ;
var instance = config . instance || BDFDB . getReactInstance ( config . node ) ;
if ( ! instance ) return null ;
var depth = - 1 ;
var maxdepth = config . depth === undefined ? 15 : config . depth ;
var start = performance . now ( ) ;
var maxtime = config . time === undefined ? 150 : config . time ;
var whitelist = {
props : true ,
state : true ,
stateNode : true ,
refs : true ,
updater : true ,
prototype : true ,
type : true ,
children : config . up ? false : true ,
type : true ,
memoizedProps : true ,
memoizedState : true ,
child : config . up ? false : true ,
return : config . up ? true : false ,
sibling : config . up ? false : true ,
firstEffect : true
} ;
var blacklist = {
contextSection : true
} ;
if ( typeof config . whitelist === "object" ) Object . assign ( whitelist , config . whiteList ) ;
if ( typeof config . blacklist === "object" ) Object . assign ( blacklist , config . blacklist ) ;
var foundkeys = [ ] ;
var singlekey = getKey ( instance ) ;
if ( config . all ) return foundkeys ;
else return singlekey ;
function getKey ( instance ) {
depth ++ ;
if ( ! instance || Node . prototype . isPrototypeOf ( instance ) || BDFDB . getReactInstance ( instance ) || depth > maxdepth || performance . now ( ) - start > maxtime ) result = null ;
else {
var keys = Object . getOwnPropertyNames ( instance ) ;
var result = null ;
for ( let i = 0 ; result == null && i < keys . length ; i ++ ) {
var key = keys [ i ] ;
if ( key && ! blacklist [ key ] ) {
var value = instance [ key ] ;
if ( config . key === key && ( config . value === undefined || config . value === value ) ) {
if ( config . all === undefined || ! config . all ) result = value ;
else if ( config . all ) {
if ( config . noCopies === undefined || ! config . noCopies ) foundkeys . push ( value ) ;
else if ( config . noCopies ) {
var copy = false ;
for ( let foundkey of foundkeys ) if ( BDFDB . equals ( value , foundkey ) ) {
copy = true ;
break ;
}
if ( ! copy ) foundkeys . push ( value ) ;
}
}
}
else if ( ( typeof value === "object" || typeof value === "function" ) && ( whitelist [ key ] || key [ 0 ] == "." || ! isNaN ( key [ 0 ] ) ) ) result = getKey ( value ) ;
}
}
}
depth -- ;
return result ;
}
} ;
var getWebModuleReq = ( ) => {
if ( ! getWebModuleReq . req ) {
const id = "BDFDB-WebModules" ;
const req = typeof ( window . webpackJsonp ) == "function" ? window . webpackJsonp ( [ ] , { [ id ] : ( module , exports , req ) => exports . default = req } , [ id ] ) . default : window . webpackJsonp . push ( [ [ ] , { [ id ] : ( module , exports , req ) => module . exports = req } , [ [ id ] ] ] ) ;
delete req . m [ id ] ;
delete req . c [ id ] ;
getWebModuleReq . req = req ;
}
return getWebModuleReq . req ;
} ;
BDFDB . WebModules = { } ;
BDFDB . WebModules . find = function ( filter ) {
var req = getWebModuleReq ( ) ;
for ( let i in req . c ) if ( req . c . hasOwnProperty ( i ) ) {
var m = req . c [ i ] . exports ;
if ( m && ( typeof m == "object" || typeof m == "function" ) && filter ( m ) ) return m ;
if ( m && m . _ _esModule ) for ( let j in m ) if ( m [ j ] && ( typeof m [ j ] == "object" || typeof m [ j ] == "function" ) && filter ( m [ j ] ) ) return m [ j ] ;
}
} ;
BDFDB . WebModules . cachedData = { prop : { } , name : { } , string : { } , proto : { } } ;
BDFDB . WebModules . findByProperties = function ( properties ) {
properties = Array . isArray ( properties ) ? properties : Array . from ( arguments ) ;
var cachestring = JSON . stringify ( properties ) ;
if ( BDFDB . WebModules . cachedData . prop [ cachestring ] ) return BDFDB . WebModules . cachedData . prop [ cachestring ] ;
else {
var m = BDFDB . WebModules . find ( m => properties . every ( prop => m [ prop ] !== undefined ) ) ;
if ( m ) {
BDFDB . WebModules . cachedData . prop [ cachestring ] = m ;
return m ;
}
else console . warn ( ` %c[BDFDB]%c ` , "color:#3a71c1; font-weight:700;" , "" , cachestring + " [properties] not found in WebModules" ) ;
}
} ;
BDFDB . WebModules . findByName = function ( name ) {
var cachestring = JSON . stringify ( name ) ;
if ( BDFDB . WebModules . cachedData . name [ cachestring ] ) return BDFDB . WebModules . cachedData . name [ cachestring ] ;
else {
var m = BDFDB . WebModules . find ( m => m . displayName === name ) ;
if ( m ) {
BDFDB . WebModules . cachedData . name [ cachestring ] = m ;
return m ;
}
else console . warn ( ` %c[BDFDB]%c ` , "color:#3a71c1; font-weight:700;" , "" , cachestring + " [name] not found in WebModules" ) ;
}
} ;
BDFDB . WebModules . findByString = function ( strings ) {
strings = Array . isArray ( strings ) ? strings : Array . from ( arguments ) ;
var cachestring = JSON . stringify ( strings ) ;
if ( BDFDB . WebModules . cachedData . string [ cachestring ] ) return BDFDB . WebModules . cachedData . string [ cachestring ] ;
else {
var m = BDFDB . WebModules . find ( m => strings . every ( string => typeof m == "function" && m . toString ( ) . indexOf ( string ) > - 1 ) ) ;
if ( m ) {
BDFDB . WebModules . cachedData . string [ cachestring ] = m ;
return m ;
}
else console . warn ( ` %c[BDFDB]%c ` , "color:#3a71c1; font-weight:700;" , "" , cachestring + " [string] not found in WebModules" ) ;
}
} ;
BDFDB . WebModules . findByPrototypes = function ( protoprops ) {
protoprops = Array . isArray ( protoprops ) ? protoprops : Array . from ( arguments ) ;
var cachestring = JSON . stringify ( protoprops ) ;
if ( BDFDB . WebModules . cachedData . proto [ cachestring ] ) return BDFDB . WebModules . cachedData . proto [ cachestring ] ;
else {
var m = BDFDB . WebModules . find ( m => m . prototype && protoprops . every ( prop => m . prototype [ prop ] !== undefined ) ) ;
if ( m ) {
BDFDB . WebModules . cachedData . proto [ cachestring ] = m ;
return m ;
}
else console . warn ( ` %c[BDFDB]%c ` , "color:#3a71c1; font-weight:700;" , "" , cachestring + " [prototypes] not found in WebModules" ) ;
}
} ;
BDFDB . DiscordConstants = BDFDB . WebModules . findByProperties ( "Permissions" , "ActivityTypes" ) ;
var LibraryRequires = { } ;
for ( let name of [ "child_process" , "electron" , "fs" , "path" , "process" , "request" ] ) {
try { LibraryRequires [ name ] = require ( name ) ; } catch ( err ) { }
}
BDFDB . LibraryRequires = Object . assign ( { } , LibraryRequires ) ;
var LibraryModules = { } ;
LibraryModules . AckUtils = BDFDB . WebModules . findByProperties ( "localAck" , "bulkAck" ) ;
LibraryModules . APIUtils = BDFDB . WebModules . findByProperties ( "getAPIBaseURL" ) ;
LibraryModules . AnimationUtils = BDFDB . WebModules . findByProperties ( "spring" , "decay" ) ;
LibraryModules . BadgeUtils = BDFDB . WebModules . findByProperties ( "getBadgeCountString" , "getBadgeWidthForValue" ) ;
LibraryModules . ChannelStore = BDFDB . WebModules . findByProperties ( "getChannel" , "getChannels" ) ;
LibraryModules . ColorUtils = BDFDB . WebModules . findByProperties ( "hex2int" , "hex2rgb" ) ;
LibraryModules . ContextMenuUtils = BDFDB . WebModules . findByProperties ( "closeContextMenu" , "openContextMenu" ) ;
LibraryModules . CurrentUserStore = BDFDB . WebModules . findByProperties ( "getCurrentUser" ) ;
LibraryModules . DirectMessageUtils = BDFDB . WebModules . findByProperties ( "addRecipient" , "openPrivateChannel" ) ;
LibraryModules . FriendUtils = BDFDB . WebModules . findByProperties ( "getFriendIDs" , "getRelationships" ) ;
LibraryModules . FolderStore = BDFDB . WebModules . findByProperties ( "getGuildFolderById" , "getFlattenedGuilds" ) ;
LibraryModules . FolderUtils = BDFDB . WebModules . findByProperties ( "isFolderExpanded" , "getExpandedFolders" ) ;
LibraryModules . GuildBoostUtils = BDFDB . WebModules . findByProperties ( "getTierName" , "getUserLevel" ) ;
LibraryModules . GuildChannelStore = BDFDB . WebModules . findByProperties ( "getChannels" , "getDefaultChannel" ) ;
LibraryModules . GuildEmojiStore = BDFDB . WebModules . findByProperties ( "getGuildEmoji" , "getDisambiguatedEmojiContext" ) ;
LibraryModules . GuildSettingsUtils = BDFDB . WebModules . findByProperties ( "updateChannelOverrideSettings" , "updateNotificationSettings" ) ;
LibraryModules . GuildStore = BDFDB . WebModules . findByProperties ( "getGuild" , "getGuilds" ) ;
LibraryModules . GuildUtils = BDFDB . WebModules . findByProperties ( "transitionToGuildSync" ) ;
LibraryModules . HistoryUtils = BDFDB . WebModules . findByProperties ( "transitionTo" , "replaceWith" , "getHistory" ) ; ;
LibraryModules . IconUtils = BDFDB . WebModules . findByProperties ( "getGuildIconURL" , "getGuildBannerURL" ) ;
LibraryModules . InviteUtils = BDFDB . WebModules . findByProperties ( "acceptInvite" , "createInvite" ) ;
LibraryModules . LanguageStore = BDFDB . WebModules . findByProperties ( "getLanguages" , "Messages" ) ;
LibraryModules . LastChannelStore = BDFDB . WebModules . findByProperties ( "getLastSelectedChannelId" ) ;
LibraryModules . LastGuildStore = BDFDB . WebModules . findByProperties ( "getLastSelectedGuildId" ) ;
LibraryModules . LoginUtils = BDFDB . WebModules . findByProperties ( "login" , "logout" ) ;
LibraryModules . MemberStore = BDFDB . WebModules . findByProperties ( "getMember" , "getMembers" ) ;
LibraryModules . MentionUtils = BDFDB . WebModules . findByProperties ( "getMentionCount" , "getMentionCounts" ) ;
LibraryModules . MessageStore = BDFDB . WebModules . findByProperties ( "getMessage" , "getMessages" ) ;
LibraryModules . MessageCreationUtils = BDFDB . WebModules . findByProperties ( "parse" , "isMentioned" ) ;
LibraryModules . MessagePinUtils = BDFDB . WebModules . findByProperties ( "pinMessage" , "unpinMessage" ) ;
LibraryModules . MessageUtils = BDFDB . WebModules . findByProperties ( "receiveMessage" , "editMessage" ) ;
LibraryModules . ModalUtils = BDFDB . WebModules . findByProperties ( "openModal" , "registerModalDispatch" ) ;
LibraryModules . MutedUtils = BDFDB . WebModules . findByProperties ( "isGuildOrCategoryOrChannelMuted" ) ;
LibraryModules . NotificationSettingsUtils = BDFDB . WebModules . findByProperties ( "setDesktopType" , "setTTSType" ) ;
LibraryModules . NotificationSettingsStore = BDFDB . WebModules . findByProperties ( "getDesktopType" , "getTTSType" ) ;
LibraryModules . PermissionUtils = BDFDB . WebModules . findByProperties ( "getChannelPermissions" , "canUser" ) ;
LibraryModules . PermissionRoleUtils = BDFDB . WebModules . findByProperties ( "getHighestRole" , "can" ) ;
LibraryModules . ReactionUtils = BDFDB . WebModules . findByProperties ( "addReaction" , "removeReaction" ) ;
LibraryModules . SearchPageUtils = BDFDB . WebModules . findByProperties ( "searchNextPage" , "searchPreviousPage" ) ;
LibraryModules . SelectChannelUtils = BDFDB . WebModules . findByProperties ( "selectChannel" , "selectPrivateChannel" ) ;
LibraryModules . SettingsUtils = BDFDB . WebModules . findByProperties ( "updateRemoteSettings" , "updateLocalSettings" ) ;
LibraryModules . SoundUtils = BDFDB . WebModules . findByProperties ( "playSound" , "createSound" ) ;
LibraryModules . SpellCheckUtils = BDFDB . WebModules . findByProperties ( "learnWord" , "toggleSpellcheck" ) ;
LibraryModules . StatusMetaUtils = BDFDB . WebModules . findByProperties ( "getApplicationActivity" , "getStatus" ) ;
LibraryModules . StreamingUtils = BDFDB . WebModules . findByProperties ( "isStreaming" ) ;
LibraryModules . UnreadGuildUtils = BDFDB . WebModules . findByProperties ( "hasUnread" , "getUnreadGuilds" ) ;
LibraryModules . UnreadChannelUtils = BDFDB . WebModules . findByProperties ( "getUnreadCount" , "getOldestUnreadMessageId" ) ;
LibraryModules . UploadUtils = BDFDB . WebModules . findByProperties ( "upload" , "instantBatchUpload" ) ;
LibraryModules . UserStore = BDFDB . WebModules . findByProperties ( "getUser" , "getUsers" ) ;
LibraryModules . VoiceUtils = BDFDB . WebModules . findByProperties ( "getAllVoiceStates" , "getVoiceStatesForChannel" ) ;
LibraryModules . ZoomUtils = BDFDB . WebModules . findByProperties ( "setZoom" , "setFontSize" ) ;
BDFDB . LibraryModules = Object . assign ( { } , LibraryModules ) ;
LibraryModules . React = BDFDB . WebModules . findByProperties ( "createElement" , "cloneElement" ) ;
LibraryModules . ReactDOM = BDFDB . WebModules . findByProperties ( "render" , "findDOMNode" ) ;
if ( LibraryModules . React && LibraryModules . ReactDOM ) {
BDFDB . React = Object . assign ( { } , LibraryModules . React , LibraryModules . ReactDOM ) ;
BDFDB . React . createElement = function ( ... arguments ) {
try { return LibraryModules . React . createElement ( ... arguments ) || null ; }
catch ( err ) { console . error ( ` %c[BDFDB]%c ` , "color: #3a71c1; font-weight: 700;" , "" , "Fatal Error: Could not create react element! " + err ) ; }
return null ;
} ;
BDFDB . React . elementToReact = function ( node ) {
if ( BDFDB . React . isValidElement ( node ) ) return node ;
else if ( ! Node . prototype . isPrototypeOf ( node ) ) return null ;
else if ( node . nodeType == Node . TEXT _NODE ) return node . nodeValue ;
let attributes = { } , importantstyleprops = { } ;
for ( let attr of node . attributes ) attributes [ attr . name ] = attr . value ;
if ( node . attributes . style ) attributes . style = BDFDB . ObjectUtils . filter ( node . style , n => node . style [ n ] && isNaN ( parseInt ( n ) ) , true ) ;
attributes . children = [ ] ;
if ( node . style && node . style . cssText ) for ( let propstr of node . style . cssText . split ( ";" ) ) if ( propstr . endsWith ( "!important" ) ) {
let importantprop = propstr . split ( ":" ) [ 0 ] ;
let camelprop = importantprop . replace ( /-([a-z]?)/g , ( m , g ) => g . toUpperCase ( ) ) ;
if ( attributes . style [ camelprop ] != null ) importantstyleprops [ importantprop ] = attributes . style [ camelprop ] ;
}
if ( Object . keys ( importantstyleprops ) . length ) attributes . ref = instance => {
let ele = BDFDB . React . findDOMNode ( instance ) ;
if ( ele ) for ( let importantprop in importantstyleprops ) ele . style . setProperty ( importantprop , importantstyleprops [ importantprop ] , "important" ) ;
}
for ( let child of node . childNodes ) attributes . children . push ( BDFDB . React . elementToReact ( child ) ) ;
return BDFDB . React . createElement ( node . tagName , attributes ) ;
} ;
BDFDB . React . findDOMNode = function ( instance ) {
if ( Node . prototype . isPrototypeOf ( instance ) ) return instance ;
if ( ! instance || ! instance . updater || typeof instance . updater . isMounted !== "function" || ! instance . updater . isMounted ( instance ) ) return null ;
var node = LibraryModules . ReactDOM . findDOMNode ( instance ) || BDFDB . getReactValue ( instance , "child.stateNode" ) ;
return Node . prototype . isPrototypeOf ( node ) ? node : null ;
} ;
} ;
var myDataUser = LibraryModules . CurrentUserStore && typeof LibraryModules . CurrentUserStore . getCurrentUser == "function" ? LibraryModules . CurrentUserStore . getCurrentUser ( ) : null ;
BDFDB . myData = new Proxy ( myDataUser || { } , {
get : function ( list , item ) {
if ( ! myDataUser ) myDataUser = LibraryModules . CurrentUserStore . getCurrentUser ( ) ;
return myDataUser ? myDataUser [ item ] : null ;
}
} ) ;
var webModulesPatchtypes = [ "before" , "instead" , "after" ] ;
var webModulesPatchmap = {
Account : "FluxContainer(Account)" ,
BannedCard : "BannedUser" ,
InvitationCard : "InviteRow" ,
InviteCard : "InviteRow" ,
PopoutContainer : "Popout" ,
MemberCard : "Member" ,
MessageDeveloperModeGroup : "FluxContainer(MessageDeveloperModeGroup)" ,
Note : "FluxContainer(Note)" ,
WebhookCard : "Webhook"
} ;
var webModulesNotFindableModules = {
AuthWrapper : "loginscreen" ,
BannedCard : "guildsettingsbannedcard" ,
ChannelMember : "member" ,
EmojiPicker : "emojipicker" ,
FriendRow : "friendsrow" ,
Guild : "guildouter" ,
InstantInviteModal : "invitemodalwrapper" ,
InvitationCard : "invitemodalinviterow" ,
InviteCard : "guildsettingsinvitecard" ,
PopoutContainer : "popout" ,
PrivateChannelCall : "callcurrentcontainer" ,
MemberCard : "guildsettingsmembercard" ,
NameTag : "nametag" ,
SearchResults : "searchresultswrap" ,
TypingUsers : "typing" ,
UserPopout : "userpopout" ,
V2C _List : "_repolist" ,
V2C _PluginCard : "_repoheader" ,
V2C _ThemeCard : "_repoheader"
} ;
BDFDB . WebModules . patch = function ( module , modulefunctions , plugin , patchfunctions ) {
if ( ! module || ! modulefunctions || ! plugin || ! Object . keys ( patchfunctions ) . some ( type => webModulesPatchtypes . includes ( type ) ) ) return null ;
const pluginname = ( typeof plugin === "string" ? plugin : plugin . name ) . toLowerCase ( ) ;
const surpressErrors = ( callback , errorstring ) => ( ... args ) => {
try { return callback ( ... args ) ; }
catch ( err ) { console . error ( "Error occurred in " + errorstring , err ) ; }
} ;
if ( ! module . BDFDBpatch ) module . BDFDBpatch = { } ;
modulefunctions = Array . isArray ( modulefunctions ) ? modulefunctions : Array . of ( modulefunctions ) ;
for ( let modulefunction of modulefunctions ) {
if ( ! module [ modulefunction ] ) module [ modulefunction ] = _ => { } ;
const originalfunction = module [ modulefunction ] ;
if ( ! module . BDFDBpatch [ modulefunction ] ) {
module . BDFDBpatch [ modulefunction ] = { } ;
for ( let type of webModulesPatchtypes ) module . BDFDBpatch [ modulefunction ] [ type ] = { } ;
module . BDFDBpatch [ modulefunction ] . originalMethod = originalfunction ;
module [ modulefunction ] = function ( ) {
const data = {
thisObject : this ,
methodArguments : arguments ,
originalMethod : originalfunction ,
originalMethodName : modulefunction ,
callOriginalMethod : ( ) => data . returnValue = data . originalMethod . apply ( data . thisObject , data . methodArguments )
} ;
if ( window . BDFDB && typeof BDFDB === "object" && BDFDB . loaded && module . BDFDBpatch [ modulefunction ] ) {
if ( ! BDFDB . ObjectUtils . isEmpty ( module . BDFDBpatch [ modulefunction ] . before ) ) for ( let id in BDFDB . ObjectUtils . sort ( module . BDFDBpatch [ modulefunction ] . before ) ) {
surpressErrors ( module . BDFDBpatch [ modulefunction ] . before [ id ] , "`before` callback of " + module [ modulefunction ] . displayName ) ( data ) ;
}
if ( BDFDB . ObjectUtils . isEmpty ( module . BDFDBpatch [ modulefunction ] . instead ) ) data . callOriginalMethod ( ) ;
else for ( let id in BDFDB . ObjectUtils . sort ( module . BDFDBpatch [ modulefunction ] . instead ) ) {
const tempreturn = surpressErrors ( module . BDFDBpatch [ modulefunction ] . instead [ id ] , "`instead` callback of " + module [ modulefunction ] . displayName ) ( data ) ;
if ( tempreturn !== undefined ) data . returnValue = tempreturn ;
}
if ( ! BDFDB . ObjectUtils . isEmpty ( module . BDFDBpatch [ modulefunction ] . after ) ) for ( let id in BDFDB . ObjectUtils . sort ( module . BDFDBpatch [ modulefunction ] . after ) ) {
const tempreturn = surpressErrors ( module . BDFDBpatch [ modulefunction ] . after [ id ] , "`after` callback of " + module [ modulefunction ] . displayName ) ( data ) ;
if ( tempreturn !== undefined ) data . returnValue = tempreturn ;
}
}
else data . callOriginalMethod ( ) ;
return data . returnValue ;
} ;
}
for ( let type of webModulesPatchtypes ) if ( typeof patchfunctions [ type ] == "function" ) module . BDFDBpatch [ modulefunction ] [ type ] [ pluginname ] = patchfunctions [ type ] ;
}
const cancel = ( ) => { BDFDB . WebModules . unpatch ( module , modulefunctions , plugin ) ; } ;
if ( plugin && typeof plugin == "object" ) {
if ( ! Array . isArray ( plugin . patchCancels ) ) plugin . patchCancels = [ ] ;
plugin . patchCancels . push ( cancel ) ;
}
return cancel ;
} ;
BDFDB . WebModules . unpatch = function ( module , modulefunctions , plugin ) {
if ( ! module || ! module . BDFDBpatch ) return ;
const pluginname = ! plugin ? null : ( typeof plugin === "string" ? plugin : plugin . name ) . toLowerCase ( ) ;
modulefunctions = Array . isArray ( modulefunctions ) ? modulefunctions : Array . of ( modulefunctions ) ;
for ( let modulefunction of modulefunctions ) {
if ( module [ modulefunction ] && module . BDFDBpatch [ modulefunction ] ) {
for ( let type of webModulesPatchtypes ) {
if ( pluginname ) delete module . BDFDBpatch [ modulefunction ] [ type ] [ pluginname ] ;
else delete module . BDFDBpatch [ modulefunction ] [ type ] ;
}
var empty = true ;
for ( let type of webModulesPatchtypes ) if ( ! BDFDB . ObjectUtils . isEmpty ( module . BDFDBpatch [ modulefunction ] [ type ] ) ) empty = false ;
if ( empty ) {
module [ modulefunction ] = module . BDFDBpatch [ modulefunction ] . originalMethod ;
delete module . BDFDBpatch [ modulefunction ] ;
if ( BDFDB . ObjectUtils . isEmpty ( module . BDFDBpatch ) ) delete module . BDFDBpatch ;
}
}
}
} ;
BDFDB . WebModules . unpatchall = function ( plugin ) {
if ( BDFDB . ObjectUtils . is ( plugin ) && Array . isArray ( plugin . patchCancels ) ) for ( let cancel of plugin . patchCancels ) cancel ( ) ;
} ;
BDFDB . WebModules . forceAllUpdates = function ( plugin , selectedtype ) {
selectedtype = selectedtype && webModulesPatchmap [ selectedtype ] ? webModulesPatchmap [ selectedtype ] + " _ _ " + selectedtype : selectedtype ;
if ( BDFDB . ObjectUtils . is ( plugin ) && BDFDB . ObjectUtils . is ( plugin . patchModules ) && ( ! selectedtype || plugin . patchModules [ selectedtype ] ) ) {
const app = document . querySelector ( BDFDB . dotCN . app ) ;
const bdsettings = document . querySelector ( "#bd-settingspane-container " + BDFDB . dotCN . scrollerwrap ) ;
if ( app ) {
var filteredmodules = [ ] ;
for ( let type in plugin . patchModules ) {
var methodnames = Array . isArray ( plugin . patchModules [ type ] ) ? plugin . patchModules [ type ] : Array . of ( plugin . patchModules [ type ] ) ;
if ( methodnames . includes ( "componentDidUpdate" ) || methodnames . includes ( "componentDidUpdate" ) || methodnames . includes ( "render" ) ) filteredmodules . push ( type ) ;
}
filteredmodules = selectedtype ? filteredmodules . filter ( type => type == selectedtype ) : filteredmodules ;
if ( filteredmodules . length ) {
try {
const appins = BDFDB . getOwnerInstance ( { node : app , name : filteredmodules , all : true , noCopies : true , group : true , depth : 99999999 , time : 99999999 } ) ;
for ( let type in appins ) for ( let i in appins [ type ] ) {
var methodnames = Array . isArray ( plugin . patchModules [ type ] ) ? plugin . patchModules [ type ] : Array . of ( plugin . patchModules [ type ] ) ;
if ( methodnames . includes ( "componentDidMount" ) ) BDFDB . WebModules . initiateProcess ( plugin , appins [ type ] [ i ] , null , type , [ "componentDidMount" ] ) ;
if ( methodnames . includes ( "componentDidUpdate" ) || methodnames . includes ( "render" ) ) appins [ type ] [ i ] . forceUpdate ( ) ;
}
if ( bdsettings ) {
const bdsettingsins = BDFDB . getOwnerInstance ( { node : bdsettings , name : filteredmodules , all : true , noCopies : true , group : true , depth : 99999999 , time : 99999999 } ) ;
for ( let type in bdsettingsins ) for ( let i in bdsettingsins [ type ] ) {
var methodnames = Array . isArray ( plugin . patchModules [ type ] ) ? plugin . patchModules [ type ] : Array . of ( plugin . patchModules [ type ] ) ;
if ( methodnames . includes ( "componentDidMount" ) ) BDFDB . WebModules . initiateProcess ( plugin , bdsettingsins [ type ] [ i ] , null , type , [ "componentDidMount" ] ) ;
if ( methodnames . includes ( "componentDidUpdate" ) || methodnames . includes ( "render" ) ) bdsettingsins [ type ] [ i ] . forceUpdate ( ) ;
}
}
}
catch ( err ) { console . error ( ` %c[ ${ plugin . name } ]%c ` , "color: #3a71c1; font-weight: 700;" , "" , "Fatal Error: Could not force update components! " + err ) ; }
}
}
}
} ;
BDFDB . WebModules . patchModules = function ( plugin ) {
if ( BDFDB . ObjectUtils . is ( plugin ) && BDFDB . ObjectUtils . is ( plugin . patchModules ) ) {
for ( let type in plugin . patchModules ) {
var mapped = webModulesPatchmap [ type ] ;
var classname = webModulesNotFindableModules [ type . split ( " _ _ " ) [ 1 ] || type ] ;
var patchtype = mapped ? mapped + " _ _ " + type : type ;
if ( mapped ) {
plugin . patchModules [ patchtype ] = plugin . patchModules [ type ] ;
delete plugin . patchModules [ type ] ;
}
if ( ! classname ) patchInstance ( BDFDB . WebModules . findByName ( patchtype . split ( " _ _ " ) [ 0 ] ) , patchtype ) ;
else if ( DiscordClasses [ classname ] ) checkForInstance ( classname , patchtype ) ;
}
function patchInstance ( instance , type ) {
if ( instance ) {
var name = type . split ( " _ _ " ) [ 0 ] ;
instance = instance . _reactInternalFiber && instance . _reactInternalFiber . type ? instance . _reactInternalFiber . type : instance ;
instance = instance . displayName == name ? instance : BDFDB . getOwnerInstance ( { instance , name , up : true } ) ;
if ( instance ) {
instance = instance . _reactInternalFiber && instance . _reactInternalFiber . type ? instance . _reactInternalFiber . type : instance ;
BDFDB . WebModules . patch ( instance . prototype , plugin . patchModules [ type ] , plugin , { after : e => {
if ( window . BDFDB && typeof BDFDB === "object" && BDFDB . loaded ) BDFDB . WebModules . initiateProcess ( plugin , e . thisObject , e . returnValue , type , [ e . originalMethodName ] ) ;
} } ) ;
}
}
}
function checkForInstance ( classname , type ) {
const app = document . querySelector ( BDFDB . dotCN . app ) , bdsettings = document . querySelector ( "#bd-settingspane-container " + BDFDB . dotCN . scrollerwrap ) ;
var instancefound = false ;
if ( app ) {
var appins = BDFDB . getOwnerInstance ( { node : app , name : type , depth : 99999999 , time : 99999999 } ) ;
if ( appins ) {
instancefound = true ;
patchInstance ( appins , type ) ;
}
}
if ( ! instancefound && bdsettings ) {
var bdsettingsins = BDFDB . getOwnerInstance ( { node : bdsettings , name : type , depth : 99999999 , time : 99999999 } ) ;
if ( bdsettingsins ) {
instancefound = true ;
patchInstance ( bdsettingsins , type ) ;
}
}
if ( ! instancefound ) {
var found = false , instanceobserver = new MutationObserver ( cs => { cs . forEach ( c => { c . addedNodes . forEach ( n => {
if ( found || ! n || ! n . tagName ) return ;
var ele = null ;
if ( ( ele = BDFDB . containsClass ( n , BDFDB . disCN [ classname ] ) ? n : n . querySelector ( BDFDB . dotCN [ classname ] ) ) != null ) {
var ins = BDFDB . getReactInstance ( ele ) ;
if ( isCorrectInstance ( ins , type ) ) {
found = true ;
instanceobserver . disconnect ( ) ;
patchInstance ( ins , type ) ;
BDFDB . WebModules . forceAllUpdates ( plugin , type ) ;
}
}
} ) ; } ) ; } ) ;
BDFDB . ObserverUtils . connect ( plugin , BDFDB . dotCN . appmount , { name : "checkForInstanceObserver" , instance : instanceobserver , multi : true
} , { childList : true , subtree : true } ) ;
}
}
function isCorrectInstance ( instance , type ) {
if ( ! instance ) return false ;
instance = instance . _reactInternalFiber && instance . _reactInternalFiber . type ? instance . _reactInternalFiber . type : instance ;
instance = instance . displayName == type ? instance : BDFDB . getOwnerInstance ( { instance : instance , name : type , up : true } ) ;
return instance && ( type != "V2C_PluginCard" && type != "V2C_ThemeCard" || type == "V2C_PluginCard" && BDFDB . checkWhichRepoPage ( ) == "plugins" || type == "V2C_ThemeCard" && BDFDB . checkWhichRepoPage ( ) == "themes" ) ;
}
}
} ;
BDFDB . WebModules . initiateProcess = function ( plugin , instance , returnvalue , type , methodnames ) {
if ( BDFDB . ObjectUtils . is ( plugin ) && instance ) {
if ( plugin . name == "$BDFDB" ) plugin = BDFDBprocessFunctions ;
type = ( type . split ( " _ _ " ) [ 1 ] || type ) . replace ( /[^A-z0-9]|_/g , "" ) ;
type = type [ 0 ] . toUpperCase ( ) + type . slice ( 1 ) ;
if ( typeof plugin [ "process" + type ] == "function" ) {
var wrapper = BDFDB . React . findDOMNode ( instance ) ;
if ( wrapper || methodnames . includes ( "render" ) ) plugin [ "process" + type ] ( instance , wrapper || document . createElement ( "div" ) , returnvalue , methodnames ) ;
else setImmediate ( ( ) => {
wrapper = BDFDB . React . findDOMNode ( instance ) ;
if ( wrapper ) plugin [ "process" + type ] ( instance , wrapper , returnvalue , methodnames ) ;
} ) ;
}
}
} ;
BDFDB . addOnSwitchListener = function ( plugin ) {
if ( typeof plugin . onSwitch === "function" ) {
BDFDB . removeOnSwitchListener ( plugin ) ;
var spacer = document . querySelector ( ` ${ BDFDB . dotCN . guildswrapper } ~ * > ${ BDFDB . dotCN . chatspacer } ` ) ;
if ( spacer ) {
var nochannelobserver = new MutationObserver ( changes => { changes . forEach ( change => {
if ( change . target && BDFDB . containsClass ( change . target , BDFDB . disCN . nochannel ) ) plugin . onSwitch ( ) ;
} ) ; } ) ;
var nochannel = spacer . querySelector ( BDFDB . dotCNC . chat + BDFDB . dotCN . nochannel ) ;
if ( nochannel ) nochannelobserver . observe ( nochannel , { attributes : true } ) ;
plugin . onSwitchFix = new MutationObserver ( changes => { changes . forEach ( change => { if ( change . addedNodes ) { change . addedNodes . forEach ( node => {
if ( BDFDB . containsClass ( node , BDFDB . disCN . chat , BDFDB . disCN . nochannel , false ) ) nochannelobserver . observe ( node , { attributes : true } ) ;
} ) ; } } ) ; } ) ;
plugin . onSwitchFix . observe ( spacer , { childList : true } ) ;
}
}
} ;
BDFDB . removeOnSwitchListener = function ( plugin ) {
if ( typeof plugin . onSwitch === "function" && BDFDB . ObjectUtils . is ( plugin . onSwitchFix ) ) {
plugin . onSwitchFix . disconnect ( ) ;
delete plugin . onSwitchFix ;
}
} ;
var NoFluxContextMenus = [ "ChannelContextMenu" , "DeveloperContextMenu" , "GuildContextMenu" , "GuildRoleContextMenu" , "LfgContextMenu" , "MessageContextMenu" , "NativeContextMenu" , "ScreenshareContextMenu" , "UserContextMenu" , "UserSettingsCogContextMenu" ] ;
var NoFluxPopouts = [ "MessageOptionPopout" ] ;
var FluxContextMenus = [ "ApplicationContextMenu" , "GroupDMContextMenu" ] ;
var PatchMenuQueries = { } ;
for ( let type of FluxContextMenus ) PatchMenuQueries [ type ] = { query : [ ] , module : null } ;
InternalBDFDB . addContextListeners = ( plugin ) => {
if ( ! BDFDB . ObjectUtils . is ( plugin ) ) return ;
for ( let type of NoFluxContextMenus ) if ( typeof plugin [ ` on ${ type } ` ] === "function" ) InternalBDFDB . patchContextMenuPlugin ( plugin , type , BDFDB . WebModules . findByName ( type ) ) ;
for ( let type of NoFluxPopouts ) if ( typeof plugin [ ` on ${ type } ` ] === "function" ) InternalBDFDB . patchPopoutPlugin ( plugin , type , BDFDB . WebModules . findByName ( type ) ) ;
for ( let type of FluxContextMenus ) if ( typeof plugin [ ` on ${ type } ` ] === "function" ) {
if ( PatchMenuQueries [ type ] . module ) InternalBDFDB . patchContextMenuPlugin ( plugin , type , PatchMenuQueries [ type ] . module ) ;
else PatchMenuQueries [ type ] . query . push ( plugin ) ;
}
} ;
InternalBDFDB . patchContextMenuPlugin = ( plugin , type , module ) => {
if ( module && module . prototype ) BDFDB . WebModules . patch ( module . prototype , "render" , plugin , { after : e => {
let instance = e . thisObject , menu = BDFDB . React . findDOMNode ( e . thisObject ) , returnvalue = e . returnValue ;
if ( instance && menu && returnvalue && typeof plugin [ ` on ${ type } ` ] === "function" ) {
plugin [ ` on ${ type } ` ] ( instance , menu , returnvalue ) ;
}
} } ) ;
} ;
InternalBDFDB . patchPopoutPlugin = ( plugin , type , module ) => {
if ( module && module . prototype ) BDFDB . WebModules . patch ( module . prototype , "render" , plugin , { after : e => {
let instance = e . thisObject , popout = BDFDB . React . findDOMNode ( e . thisObject ) , returnvalue = e . returnValue ;
if ( instance && popout && returnvalue && typeof plugin [ ` on ${ type } ` ] === "function" ) {
plugin [ ` on ${ type } ` ] ( instance , popout , returnvalue ) ;
if ( ! instance . BDFDBforceUpdateTimeout && typeof instance . forceUpdate == "function" ) instance . forceUpdate ( ) ;
}
} } ) ;
} ;
InternalBDFDB . patchContextMenuLib = ( module , repatch ) => {
if ( module && module . prototype ) {
BDFDB . WebModules . patch ( module . prototype , "componentDidMount" , BDFDB , { after : e => {
if ( ! e . thisObject . BDFDBforceRenderTimeout && typeof e . thisObject . render == "function" ) e . thisObject . render ( ) ;
} } ) ;
BDFDB . WebModules . patch ( module . prototype , "componentDidUpdate" , BDFDB , { after : e => {
var menu = BDFDB . React . findDOMNode ( e . thisObject ) ;
if ( menu ) {
const updater = BDFDB . getReactValue ( e , "thisObject._reactInternalFiber.stateNode.props.onHeightUpdate" ) ;
const mrects = BDFDB . getRects ( menu ) , arects = BDFDB . getRects ( document . querySelector ( BDFDB . dotCN . appmount ) ) ;
if ( updater && ( mrects . top + mrects . height > arects . height ) ) updater ( ) ;
}
} } ) ;
BDFDB . WebModules . patch ( module . prototype , "render" , BDFDB , { after : e => {
if ( e . thisObject . props . BDFDBcontextMenu && e . thisObject . props . children && e . returnValue && e . returnValue . props ) {
e . returnValue . props . children = e . thisObject . props . children ;
delete e . thisObject . props . value ;
delete e . thisObject . props . children ;
delete e . thisObject . props . BDFDBcontextMenu ;
}
if ( BDFDB . React . findDOMNode ( e . thisObject ) ) {
e . thisObject . BDFDBforceRenderTimeout = true ;
setTimeout ( ( ) => { delete e . thisObject . BDFDBforceRenderTimeout ; } , 1000 ) ;
}
if ( repatch ) {
let newmodule = BDFDB . getReactValue ( e , "thisObject._reactInternalFiber.child.type" ) ;
if ( newmodule && newmodule . displayName && PatchMenuQueries [ newmodule . displayName ] && ! PatchMenuQueries [ newmodule . displayName ] . module ) {
PatchMenuQueries [ newmodule . displayName ] . module = newmodule ;
InternalBDFDB . patchContextMenuLib ( newmodule , false ) ;
while ( PatchMenuQueries [ newmodule . displayName ] . query . length ) {
InternalBDFDB . patchContextMenuPlugin ( PatchMenuQueries [ newmodule . displayName ] . query . pop ( ) , newmodule . displayName , newmodule ) ;
}
}
}
} } ) ;
}
} ;
InternalBDFDB . patchPopoutLib = ( module , repatch ) => {
if ( module && module . prototype ) {
BDFDB . WebModules . patch ( module . prototype , "componentDidMount" , BDFDB , { after : e => {
if ( ! e . thisObject . BDFDBforceRenderTimeout && ! e . thisObject . BDFDBforceUpdateTimeout && typeof e . thisObject . render == "function" ) e . thisObject . render ( ) ;
} } ) ;
BDFDB . WebModules . patch ( module . prototype , "componentDidUpdate" , BDFDB , { after : e => {
const updater = BDFDB . getReactValue ( e , "thisObject._reactInternalFiber.return.return.return.stateNode.updateOffsets" ) ;
if ( updater ) updater ( ) ;
e . thisObject . BDFDBforceUpdateTimeout = true ;
setTimeout ( ( ) => { delete e . thisObject . BDFDBforceUpdateTimeout ; } , 1000 ) ;
} } ) ;
BDFDB . WebModules . patch ( module . prototype , "render" , BDFDB , { after : e => {
if ( BDFDB . React . findDOMNode ( e . thisObject ) ) {
e . thisObject . BDFDBforceRenderTimeout = true ;
setTimeout ( ( ) => { delete e . thisObject . BDFDBforceRenderTimeout ; } , 1000 ) ;
}
if ( e . thisObject . props . message && ! e . thisObject . props . target ) {
const messageswrap = document . querySelector ( BDFDB . dotCN . messages ) ;
if ( messageswrap ) {
var messages = BDFDB . getOwnerInstance ( { node : messageswrap , name : "Message" , all : true , noCopies : true , depth : 99999999 , time : 99999999 } ) ;
for ( let i in messages ) if ( e . thisObject . props . message . id == messages [ i ] . props . message . id ) {
target = BDFDB . React . findDOMNode ( messages [ i ] ) ;
if ( target ) e . thisObject . props . target = target
break ;
}
}
}
} } ) ;
}
} ;
for ( let type of NoFluxContextMenus ) InternalBDFDB . patchContextMenuLib ( BDFDB . WebModules . findByName ( type ) , false ) ;
for ( let type of NoFluxPopouts ) InternalBDFDB . patchPopoutLib ( BDFDB . WebModules . findByName ( type ) , false ) ;
for ( let type of FluxContextMenus ) InternalBDFDB . patchContextMenuLib ( BDFDB . WebModules . findByName ( ` FluxContainer( ${ type } ) ` ) , true ) ;
var LanguageStringsVars = { } , LanguageStrings = LibraryModules . LanguageStore && LibraryModules . LanguageStore . _proxyContext ? Object . assign ( { } , LibraryModules . LanguageStore . _proxyContext . defaultMessages ) : { } ;
BDFDB . LanguageStrings = new Proxy ( LanguageStrings , {
get : function ( list , item ) {
var stringobj = LibraryModules . LanguageStore . Messages [ item ] ;
if ( ! stringobj ) console . warn ( ` %c[BDFDB]%c ` , "color:#3a71c1; font-weight:700;" , "" , item + " not found in BDFDB.LanguageStrings" ) ;
else {
var string = typeof stringobj == "object" ? stringobj . format ( Object . assign ( { } , LanguageStringsVars ) ) : stringobj ;
if ( typeof string == "string" ) return string ;
else if ( Array . isArray ( string ) ) {
var newstring = "" ;
for ( let ele of string ) {
if ( typeof ele == "string" ) newstring += BDFDB . encodeToHTML ( ele ) ;
else if ( BDFDB . ObjectUtils . is ( ele ) && ele . props ) newstring += ` < ${ ele . type } > ${ BDFDB . encodeToHTML ( ele . props . children [ 0 ] . toString ( ) ) } </ ${ ele . type } > `
}
return newstring ;
}
else console . warn ( ` %c[BDFDB]%c ` , "color:#3a71c1; font-weight:700;" , "" , item + " could not be parsed from BDFDB.LanguageStrings" ) ;
}
return "" ;
}
} ) ;
BDFDB . LanguageStringsCheck = new Proxy ( LanguageStrings , {
get : function ( list , item ) {
return LibraryModules . LanguageStore . Messages [ item ] ;
}
} ) ;
BDFDB . LanguageStringsFormat = function ( item , value ) {
if ( item && value ) {
var stringobj = LibraryModules . LanguageStore . Messages [ item ] ;
if ( stringobj && typeof stringobj == "object" && typeof stringobj . format == "function" ) {
try {
var valueobject = { } ;
for ( let key in LanguageStringsVars ) valueobject [ key ] = value ;
var string = stringobj . format ( valueobject ) ;
if ( typeof string == "string" ) return string ;
else if ( Array . isArray ( string ) ) {
var newstring = "" ;
for ( let ele of string ) {
if ( typeof ele == "string" ) newstring += BDFDB . encodeToHTML ( ele ) ;
else if ( BDFDB . ObjectUtils . is ( ele ) && ele . props ) newstring += ` < ${ ele . type } > ${ BDFDB . encodeToHTML ( ele . props . children [ 0 ] . toString ( ) ) } </ ${ ele . type } > `
}
return newstring ;
}
}
catch ( err ) { console . warn ( ` %c[BDFDB]%c ` , "color:#3a71c1; font-weight:700;" , "" , item + " failed to format string in BDFDB.LanguageStrings" ) ; }
}
else console . warn ( ` %c[BDFDB]%c ` , "color:#3a71c1; font-weight:700;" , "" , item + " is not a formatable string in BDFDB.LanguageStrings" ) ;
}
else console . warn ( ` %c[BDFDB]%c ` , "color:#3a71c1; font-weight:700;" , "" , item + " enter a valid key and value to format the string" ) ;
return "" ;
} ;
if ( LibraryModules . LanguageStore ) for ( let string in LanguageStrings ) {
try { BDFDB . LanguageStrings [ string ] ; }
catch ( err ) {
let strvar = err . toString ( ) . split ( "for: " ) [ 1 ] ;
if ( strvar && typeof strvar == "string" && ! LanguageStringsVars [ strvar ] ) LanguageStringsVars [ strvar ] = ` {{ ${ strvar . toLowerCase ( ) } }} ` ;
}
} ;
BDFDB . equals = function ( mainA , mainB , sorted ) {
var i = - 1 ;
if ( sorted === undefined || typeof sorted !== "boolean" ) sorted = false ;
return equal ( mainA , mainB ) ;
function equal ( a , b ) {
i ++ ;
var result = true ;
if ( i > 1000 ) result = null ;
else {
if ( typeof a !== typeof b ) result = false ;
else if ( typeof a === "undefined" ) result = true ;
else if ( typeof a === "symbol" ) result = true ;
else if ( typeof a === "boolean" ) result = a == b ;
else if ( typeof a === "string" ) result = a == b ;
else if ( typeof a === "number" ) {
if ( isNaN ( a ) || isNaN ( b ) ) result = isNaN ( a ) == isNaN ( b ) ;
else result = a == b ;
}
else if ( ! a && ! b ) result = true ;
else if ( ! a || ! b ) result = false ;
else if ( typeof a === "function" || typeof a === "object" ) {
var keysA = Object . getOwnPropertyNames ( a ) ;
var keysB = Object . getOwnPropertyNames ( b ) ;
if ( keysA . length !== keysB . length ) result = false ;
else for ( let j = 0 ; result === true && j < keysA . length ; j ++ ) {
if ( sorted ) result = equal ( a [ keysA [ j ] ] , b [ keysB [ j ] ] ) ;
else result = equal ( a [ keysA [ j ] ] , b [ keysA [ j ] ] ) ;
}
}
}
i -- ;
return result ;
}
} ;
BDFDB . getGuildIcon = function ( id ) {
var guild = LibraryModules . GuildStore . getGuild ( typeof id == "number" ? id . toFixed ( ) : id ) ;
if ( ! guild || ! guild . icon ) return null ;
return LibraryModules . IconUtils . getGuildIconURL ( guild ) . split ( "?" ) [ 0 ] ;
} ;
BDFDB . getGuildBanner = function ( id ) {
var guild = LibraryModules . GuildStore . getGuild ( typeof id == "number" ? id . toFixed ( ) : id ) ;
if ( ! guild || ! guild . banner ) return null ;
return LibraryModules . IconUtils . getGuildBannerURL ( guild ) . split ( "?" ) [ 0 ] ;
} ;
BDFDB . getUserStatus = function ( id = BDFDB . myData . id ) {
id = typeof id == "number" ? id . toFixed ( ) : id ;
return LibraryModules . StreamingUtils . isStreaming ( LibraryModules . StatusMetaUtils . getApplicationActivity ( id ) ) ? "streaming" : LibraryModules . StatusMetaUtils . getStatus ( id ) ;
} ;
BDFDB . getUserStatusColor = function ( status ) {
status = typeof status == "string" ? status . toLowerCase ( ) : null ;
switch ( status ) {
case "online" : return "#43b581" ;
case "mobile" : return "#43b581" ;
case "idle" : return "#faa61a" ;
case "dnd" : return "#f04747" ;
case "playing" : return "#7289da" ;
case "listening" : return "#1db954" ;
case "streaming" : return "#593695" ;
default : return "#747f8d" ;
}
} ;
BDFDB . getUserAvatar = function ( id = BDFDB . myData . id ) {
var user = LibraryModules . UserStore . getUser ( typeof id == "number" ? id . toFixed ( ) : id ) ;
if ( ! user ) return "https://discordapp.com/assets/322c936a8c8be1b803cd94861bdfa868.png" ;
else return ( ( user . avatar ? "" : "https://discordapp.com" ) + LibraryModules . IconUtils . getUserAvatarURL ( user ) ) . split ( "?" ) [ 0 ] ;
} ;
BDFDB . isUserAllowedTo = function ( permission , id = BDFDB . myData . id , channelid = LibraryModules . LastChannelStore . getChannelId ( ) ) {
if ( ! BDFDB . DiscordConstants . Permissions [ permission ] ) console . warn ( ` %c[BDFDB]%c ` , "color:#3a71c1; font-weight:700;" , "" , permission + " not found in Permissions" ) ;
else {
var channel = LibraryModules . ChannelStore . getChannel ( channelid ) ;
if ( channel ) return LibraryModules . PermissionUtils . canUser ( id , BDFDB . DiscordConstants . Permissions [ permission ] , channel ) ;
}
return false ;
} ;
BDFDB . getChannelIcon = function ( id ) {
var channel = LibraryModules . ChannelStore . getChannel ( id = typeof id == "number" ? id . toFixed ( ) : id ) ;
if ( ! channel ) return null ;
if ( ! channel . icon ) return channel . type == 1 ? BDFDB . getUserAvatar ( channel . recipients [ 0 ] ) : ( channel . type == 3 ? "https://discordapp.com/assets/f046e2247d730629309457e902d5c5b3.svg" : null ) ;
return LibraryModules . IconUtils . getChannelIconURL ( channel ) . split ( "?" ) [ 0 ] ;
} ;
BDFDB . getParsedLength = function ( string , channelid = LibraryModules . LastChannelStore . getChannelId ( ) ) {
if ( ! string ) return 0 ;
var channel = LibraryModules . ChannelStore . getChannel ( channelid ) ;
var length = ( string . indexOf ( "/" ) == 0 || string . indexOf ( "s/" ) == 0 || string . indexOf ( "+:" ) == 0 ) ? string . length : LibraryModules . MessageCreationUtils . parse ( channel , string ) . content . length ;
return length > string . length ? length : string . length ;
} ;
BDFDB . readServerList = function ( ) {
var found = [ ] , ins = BDFDB . getOwnerInstance ( { node : document . querySelector ( BDFDB . dotCN . guilds ) , name : [ "Guild" , "GuildIcon" ] , all : true , noCopies : true , depth : 99999999 , time : 99999999 } ) ;
for ( let info in ins ) if ( ins [ info ] . props && ins [ info ] . props . guild ) found . push ( Object . assign ( new ins [ info ] . props . guild . constructor ( ins [ info ] . props . guild ) , { div : ins [ info ] . handleContextMenu ? BDFDB . React . findDOMNode ( ins [ info ] ) : BDFDB . createServerDivCopy ( ins [ info ] . props . guild ) , instance : ins [ info ] } ) ) ;
return found ;
} ;
BDFDB . readUnreadServerList = function ( servers ) {
var found = [ ] ;
for ( let eleOrInfoOrId of servers === undefined || ! Array . isArray ( servers ) ? BDFDB . readServerList ( ) : servers ) {
if ( ! eleOrInfoOrId ) return null ;
let id = Node . prototype . isPrototypeOf ( eleOrInfoOrId ) ? BDFDB . getServerID ( eleOrInfoOrId ) : typeof eleOrInfoOrId == "object" ? eleOrInfoOrId . id : eleOrInfoOrId ;
id = typeof id == "number" ? id . toFixed ( ) : id ;
if ( id && ( LibraryModules . UnreadGuildUtils . hasUnread ( id ) || LibraryModules . MentionUtils . getMentionCount ( id ) > 0 ) ) found . push ( eleOrInfoOrId ) ;
}
return found ;
} ;
BDFDB . readMutedServerList = function ( servers ) {
var found = [ ] ;
for ( let eleOrInfoOrId of servers === undefined || ! Array . isArray ( servers ) ? BDFDB . readServerList ( ) : servers ) {
if ( ! eleOrInfoOrId ) return null ;
let id = Node . prototype . isPrototypeOf ( eleOrInfoOrId ) ? BDFDB . getServerID ( eleOrInfoOrId ) : typeof eleOrInfoOrId == "object" ? eleOrInfoOrId . id : eleOrInfoOrId ;
id = typeof id == "number" ? id . toFixed ( ) : id ;
if ( id && LibraryModules . MutedUtils . isGuildOrCategoryOrChannelMuted ( id ) ) found . push ( eleOrInfoOrId ) ;
}
return found ;
} ;
BDFDB . getSelectedServer = function ( ) {
var info = LibraryModules . GuildStore . getGuild ( LibraryModules . LastGuildStore . getGuildId ( ) ) ;
if ( info ) return BDFDB . getServerData ( info . id ) || Object . assign ( new info . constructor ( info ) , { div : null , instance : null } ) ;
else return null ;
} ;
BDFDB . getServerID = function ( div ) {
if ( ! Node . prototype . isPrototypeOf ( div ) || ! BDFDB . getReactInstance ( div ) ) return ;
let guilddiv = BDFDB . getParentEle ( BDFDB . dotCN . guildouter , div ) ;
if ( ! guilddiv ) return ;
var iconwrap = guilddiv . querySelector ( BDFDB . dotCN . guildiconwrapper ) ;
var id = iconwrap && iconwrap . href ? iconwrap . href . split ( "/" ) . slice ( - 2 ) [ 0 ] : null ;
return id && ! isNaN ( parseInt ( id ) ) ? id . toString ( ) : null ;
} ;
BDFDB . getServerDiv = function ( eleOrInfoOrId ) {
if ( ! eleOrInfoOrId ) return null ;
if ( Node . prototype . isPrototypeOf ( eleOrInfoOrId ) ) return BDFDB . getParentEle ( BDFDB . dotCN . guildouter , eleOrInfoOrId ) ;
else {
let id = typeof eleOrInfoOrId == "object" ? eleOrInfoOrId . id : eleOrInfoOrId ;
if ( id ) return BDFDB . getParentEle ( BDFDB . dotCN . guildouter , document . querySelector ( ` ${ BDFDB . dotCNS . guilds + BDFDB . dotCN . guildiconwrapper } [href*="/channels/ ${ id } "] ` ) ) || BDFDB . createServerDivCopy ( id , { pill : true , hover : true , click : true , menu : true } ) ;
}
return null ;
} ;
BDFDB . getServerData = function ( eleOrInfoOrId ) {
if ( ! eleOrInfoOrId ) return null ;
let id = Node . prototype . isPrototypeOf ( eleOrInfoOrId ) ? BDFDB . getServerID ( eleOrInfoOrId ) : typeof eleOrInfoOrId == "object" ? eleOrInfoOrId . id : eleOrInfoOrId ;
id = typeof id == "number" ? id . toFixed ( ) : id ;
for ( let info of BDFDB . readServerList ( ) ) if ( info && info . id == id ) return info ;
return null ;
} ;
BDFDB . createServerDivCopy = function ( infoOrId , functionality = { pill : false , hover : false , click : false , menu : false , size : null } ) {
let id = typeof infoOrId == "object" ? infoOrId . id : infoOrId ;
let guild = id ? LibraryModules . GuildStore . getGuild ( id ) : null ;
if ( guild ) {
let selected = LibraryModules . LastGuildStore . getGuildId ( ) == guild . id ;
let unread = LibraryModules . UnreadGuildUtils . hasUnread ( guild . id ) ;
let div = BDFDB . htmlToElement ( ` <div class=" ${ BDFDB . disCNS . guildouter + BDFDB . disCN . _bdguild } "><div class=" ${ BDFDB . disCNS . guildpill + BDFDB . disCN . guildpillwrapper } "><span class=" ${ BDFDB . disCN . guildpillitem } " style="opacity: 0; height: 8px; transform: translate3d(0px, 0px, 0px);"></span></div><div class=" ${ BDFDB . disCN . guildcontainer } " draggable="false" style="border-radius: 50%; overflow: hidden;"><div class=" ${ BDFDB . disCN . guildinner } "><svg width="48" height="48" viewBox="0 0 48 48" class=" ${ BDFDB . disCN . guildsvg } "><mask id="" fill="black" x="0" y="0" width="48" height="48"><path d="M48 24C48 37.2548 37.2548 48 24 48C10.7452 48 0 37.2548 0 24C0 10.7452 10.7452 0 24 0C37.2548 0 48 10.7452 48 24Z" fill="white"></path><rect x="28" y="-4" width="24" height="24" rx="12" ry="12" transform="translate(20 -20)" fill="black"></rect><rect x="28" y="28" width="24" height="24" rx="12" ry="12" transform="translate(20 20)" fill="black"></rect></mask><foreignObject mask="" x="0" y="0" width="48" height="48"><a class=" ${ BDFDB . disCN . guildiconwrapper } ${ selected ? ( " " + BDFDB . disCN . guildiconselected ) : "" } " aria-label=" ${ guild . name } " ${ functionality . click ? ` href="channels/ ${ guild . id } / ${ LibraryModules . LastChannelStore . getChannelId ( guild . id ) } " ` : ` ` } draggable="false"> ${ guild . icon ? ` <img class=" ${ BDFDB . disCN . guildicon } " src=" ${ BDFDB . getGuildIcon ( guild . id ) } ?size=128" alt="" width="48" height="48" draggable="false" aria-hidden="true"></img> ` : ` <div class=" ${ BDFDB . disCNS . guildiconchildwrapper + BDFDB . disCN . guildiconacronym } " aria-hidden="true" style="font-size: ${ guild . acronym . length > 5 ? 10 : ( guild . acronym . length > 4 ? 12 : ( guild . acronym . length > 3 ? 14 : ( guild . acronym . length > 1 ? 16 : 18 ) ) ) } px;"> ${ guild . acronym } </div> ` } </a></foreignObject></svg></div></div><div class=" ${ BDFDB . disCN . guildedgewrapper } " aria-hidden="true"><span class=" ${ BDFDB . disCN . guildedge } "></span><span class=" ${ BDFDB . disCN . guildedgemiddle } "></span><span class=" ${ BDFDB . disCN . guildedge } "></span></div></div> ` ) ;
let divinner = div . querySelector ( BDFDB . dotCN . guildcontainer ) ;
let divpillitem = div . querySelector ( BDFDB . dotCN . guildpillitem ) ;
BDFDB . toggleEles ( divpillitem . parentElement , functionality . pill ) ;
if ( functionality . pill ) {
divpillitem . style . setProperty ( "opacity" , selected ? 1 : ( unread ? 0.7 : 0 ) ) ;
divpillitem . style . setProperty ( "height" , selected ? "40px" : "8px" ) ;
divpillitem . style . setProperty ( "transform" , "translate3d(0px, 0px, 0px)" ) ;
BDFDB . toggleClass ( div , BDFDB . disCN . _bdguildselected , selected ) ;
BDFDB . toggleClass ( div , BDFDB . disCN . _bdguildunread , unread ) ;
BDFDB . toggleClass ( divpillitem , BDFDB . disCN . _bdguildunread , unread ) ;
}
if ( functionality . hover ) {
let diviconwrapper = div . querySelector ( BDFDB . dotCN . guildiconwrapper ) ;
let pillvisible = divpillitem . style . getPropertyValue ( "opacity" ) != 0 ;
let borderRadius = new LibraryModules . AnimationUtils . Value ( 0 ) ;
borderRadius
. interpolate ( { inputRange : [ 0 , 1 ] , outputRange : [ 50 , 30 ] } )
. addListener ( ( value ) => { divinner . style . setProperty ( "border-radius" , ` ${ value . value } % ` ) ; } ) ;
let pillHeight = new LibraryModules . AnimationUtils . Value ( 0 ) ;
pillHeight
. interpolate ( { inputRange : [ 0 , 1 ] , outputRange : [ 8 , 20 ] } )
. addListener ( ( value ) => { divpillitem . style . setProperty ( "height" , ` ${ value . value } px ` ) ; } ) ;
let pillOpacity = new LibraryModules . AnimationUtils . Value ( 0 ) ;
pillOpacity
. interpolate ( { inputRange : [ 0 , 1 ] , outputRange : [ 0 , 0.7 ] } )
. addListener ( ( value ) => { divpillitem . style . setProperty ( "opacity" , ` ${ value . value } ` ) ; } ) ;
let animate = ( v ) => {
LibraryModules . AnimationUtils . parallel ( [
LibraryModules . AnimationUtils . timing ( borderRadius , { toValue : v , duration : 200 } ) ,
LibraryModules . AnimationUtils . spring ( pillHeight , { toValue : v , friction : 5 } )
] ) . start ( ) ;
} ;
let animate2 = ( v ) => {
LibraryModules . AnimationUtils . parallel ( [
LibraryModules . AnimationUtils . timing ( pillOpacity , { toValue : v , duration : 200 } ) ,
] ) . start ( ) ;
} ;
divinner . addEventListener ( "mouseenter" , ( ) => {
pillvisible = divpillitem . style . getPropertyValue ( "opacity" ) != 0 ;
if ( LibraryModules . LastGuildStore . getGuildId ( ) != guild . id ) {
animate ( 1 ) ;
if ( ! pillvisible ) animate2 ( 1 ) ;
}
} )
divinner . addEventListener ( "mouseleave" , ( ) => {
if ( LibraryModules . LastGuildStore . getGuildId ( ) != guild . id ) {
animate ( 0 ) ;
if ( ! pillvisible ) animate2 ( 0 ) ;
}
} ) ;
}
if ( functionality . click ) divinner . addEventListener ( "click" , e => {
BDFDB . ListenerUtils . stopEvent ( e ) ;
LibraryModules . GuildUtils . transitionToGuildSync ( guild . id ) ;
if ( typeof functionality . click == "function" ) functionality . click ( ) ;
} ) ;
if ( functionality . menu ) divinner . addEventListener ( "contextmenu" , e => {
BDFDB . openGuildContextMenu ( guild . id , e ) ;
if ( typeof functionality . menu == "function" ) functionality . menu ( ) ;
} ) ;
if ( functionality . size ) {
div . style . setProperty ( "margin" , "0" , "important" ) ;
div . style . setProperty ( "width" , functionality . size + "px" , "important" ) ;
div . style . setProperty ( "height" , functionality . size + "px" , "important" ) ;
}
return div ;
}
else return null ;
} ;
BDFDB . openGuildContextMenu = function ( eleOrInfoOrId , e = BDFDB . mousePosition ) {
let id = Node . prototype . isPrototypeOf ( eleOrInfoOrId ) ? BDFDB . getServerID ( eleOrInfoOrId ) : typeof eleOrInfoOrId == "object" ? eleOrInfoOrId . id : eleOrInfoOrId ;
let guild = LibraryModules . GuildStore . getGuild ( id ) ;
if ( guild ) LibraryModules . ContextMenuUtils . openContextMenu ( e , function ( e ) {
return BDFDB . React . createElement ( BDFDB . WebModules . findByName ( "GuildContextMenu" ) , Object . assign ( { } , e , {
type : BDFDB . DiscordConstants . ContextMenuTypes . GUILD _ICON _BAR ,
guild : guild ,
badge : LibraryModules . MentionUtils . getMentionCount ( guild . id ) ,
link : BDFDB . DiscordConstants . Routes . CHANNEL ( guild . id , LibraryModules . LastChannelStore . getChannelId ( guild . id ) ) ,
selected : guild . id == LibraryModules . LastGuildStore . getGuildId ( )
} ) ) ;
} ) ;
} ;
BDFDB . readFolderList = function ( ) {
var found = [ ] , ins = BDFDB . getOwnerInstance ( { node : document . querySelector ( BDFDB . dotCN . guildswrapper ) , name : "GuildFolder" , all : true , noCopies : true , depth : 99999999 , time : 99999999 } ) ;
for ( let info in ins ) if ( ins [ info ] . props && ins [ info ] . props . folderId ) {
found . push ( Object . assign ( { } , ins [ info ] . props , { div : BDFDB . React . findDOMNode ( ins [ info ] ) , instance : ins [ info ] } ) ) ;
}
return found ;
} ;
BDFDB . getFolderID = function ( div ) {
if ( ! Node . prototype . isPrototypeOf ( div ) || ! BDFDB . getReactInstance ( div ) ) return ;
div = BDFDB . getParentEle ( BDFDB . dotCN . guildfolderwrapper , div ) ;
if ( ! div ) return ;
return BDFDB . getReactValue ( div , "return.stateNode.props.folderId" ) ;
} ;
BDFDB . getFolderDiv = function ( eleOrInfoOrId ) {
if ( ! eleOrInfoOrId ) return null ;
let info = BDFDB . getFolderData ( eleOrInfoOrId ) ;
return info ? info . div : null ;
} ;
BDFDB . getFolderData = function ( eleOrInfoOrId ) {
if ( ! eleOrInfoOrId ) return null ;
let id = Node . prototype . isPrototypeOf ( eleOrInfoOrId ) ? BDFDB . getChannelID ( eleOrInfoOrId ) : typeof eleOrInfoOrId == "object" ? eleOrInfoOrId . id : eleOrInfoOrId ;
id = typeof id == "number" ? id . toFixed ( ) : id ;
for ( let info of BDFDB . readFolderList ( ) ) if ( info && info . folderId == id ) return info ;
return null ;
} ;
BDFDB . readChannelList = function ( ) {
var found = [ ] , ins = BDFDB . getOwnerInstance ( { node : document . querySelector ( BDFDB . dotCN . channels ) , name : [ "ChannelCategoryItem" , "ChannelItem" , "PrivateChannel" ] , all : true , noCopies : true , depth : 99999999 , time : 99999999 } ) ;
for ( let info in ins ) if ( ins [ info ] . props && ! ins [ info ] . props . ispin && ins [ info ] . props . channel && ins [ info ] . _reactInternalFiber . return ) {
var div = BDFDB . React . findDOMNode ( ins [ info ] ) ;
div = div && BDFDB . containsClass ( div . parentElement , BDFDB . disCN . categorycontainerdefault , BDFDB . disCN . channelcontainerdefault , false ) ? div . parentElement : div ;
found . push ( Object . assign ( new ins [ info ] . props . channel . constructor ( ins [ info ] . props . channel ) , { div , instance : ins [ info ] } ) ) ;
}
return found ;
} ;
BDFDB . getSelectedChannel = function ( ) {
var info = LibraryModules . ChannelStore . getChannel ( LibraryModules . LastChannelStore . getChannelId ( ) ) ;
if ( info ) return BDFDB . getChannelData ( info . id ) || Object . assign ( new info . constructor ( info ) , { div : null , instance : null } ) ;
else return null ;
} ;
BDFDB . getChannelID = function ( div ) {
if ( ! Node . prototype . isPrototypeOf ( div ) || ! BDFDB . getReactInstance ( div ) ) return ;
div = BDFDB . getParentEle ( BDFDB . dotCNC . categorycontainerdefault + BDFDB . dotCNC . channelcontainerdefault + BDFDB . dotCN . dmchannel , div ) ;
if ( ! div ) return ;
var info = BDFDB . getKeyInformation ( { node : div , key : "channel" } ) ;
return info ? info . id . toString ( ) : null ;
} ;
BDFDB . getChannelDiv = function ( eleOrInfoOrId ) {
if ( ! eleOrInfoOrId ) return null ;
let info = BDFDB . getChannelData ( eleOrInfoOrId ) ;
return info ? info . div : null ;
} ;
BDFDB . getChannelData = function ( eleOrInfoOrId ) {
if ( ! eleOrInfoOrId ) return null ;
let id = Node . prototype . isPrototypeOf ( eleOrInfoOrId ) ? BDFDB . getChannelID ( eleOrInfoOrId ) : typeof eleOrInfoOrId == "object" ? eleOrInfoOrId . id : eleOrInfoOrId ;
id = typeof id == "number" ? id . toFixed ( ) : id ;
for ( let info of BDFDB . readChannelList ( ) ) if ( info && info . id == id ) return info ;
return null ;
} ;
BDFDB . openChannelContextMenu = function ( eleOrInfoOrId , e = BDFDB . mousePosition ) {
let id = Node . prototype . isPrototypeOf ( eleOrInfoOrId ) ? BDFDB . getChannelID ( eleOrInfoOrId ) : typeof eleOrInfoOrId == "object" ? eleOrInfoOrId . id : eleOrInfoOrId ;
let channel = LibraryModules . ChannelStore . getChannel ( id ) ;
if ( channel ) {
let type = null ;
for ( let t in BDFDB . DiscordConstants . ChannelTypes ) if ( BDFDB . DiscordConstants . ChannelTypes [ t ] == channel . type ) {
type = BDFDB . DiscordConstants . ContextMenuTypes [ ( t == "GUILD_CATEGORY" ? "CHANNEL_" : "CHANNEL_LIST_" ) + t . replace ( "GUILD_" , "" ) ] ;
break ;
}
if ( type ) LibraryModules . ContextMenuUtils . openContextMenu ( e , function ( e ) {
return BDFDB . React . createElement ( BDFDB . WebModules . findByName ( "ChannelContextMenu" ) , Object . assign ( { } , e , {
type ,
channel ,
guild : LibraryModules . GuildStore . getGuild ( channel . guild _id ) ,
selected : channel . id == LibraryModules . LastChannelStore . getChannelId ( )
} ) ) ;
} ) ;
}
} ;
BDFDB . readDmList = function ( ) {
var found = [ ] , ins = BDFDB . getOwnerInstance ( { node : document . querySelector ( BDFDB . dotCN . guilds ) , name : "DirectMessage" , all : true , noCopies : true , depth : 99999999 , time : 99999999 } ) ;
for ( let info in ins ) if ( ins [ info ] . props && ins [ info ] . props . channel && ins [ info ] . _reactInternalFiber . child ) found . push ( Object . assign ( new ins [ info ] . props . channel . constructor ( ins [ info ] . props . channel ) , { div : BDFDB . React . findDOMNode ( ins [ info ] ) , instance : ins [ info ] } ) ) ;
return found ;
} ;
BDFDB . getDmID = function ( div ) {
if ( ! Node . prototype . isPrototypeOf ( div ) || ! BDFDB . getReactInstance ( div ) ) return ;
let dmdiv = BDFDB . getParentEle ( BDFDB . dotCN . guildouter , div ) ;
if ( ! dmdiv ) return ;
var iconwrap = dmdiv . querySelector ( BDFDB . dotCN . guildiconwrapper ) ;
var id = iconwrap && iconwrap . href ? iconwrap . href . split ( "/" ) . slice ( - 1 ) [ 0 ] : null ;
return id && ! isNaN ( parseInt ( id ) ) ? id . toString ( ) : null ;
} ;
BDFDB . getDmDiv = function ( eleOrInfoOrId ) {
if ( ! eleOrInfoOrId ) return null ;
if ( Node . prototype . isPrototypeOf ( eleOrInfoOrId ) ) {
var div = BDFDB . getParentEle ( BDFDB . dotCN . guildouter , eleOrInfoOrId ) ;
return div ? div . parentElement : div ;
}
else {
let id = typeof eleOrInfoOrId == "object" ? eleOrInfoOrId . id : eleOrInfoOrId ;
if ( id ) {
var div = BDFDB . getParentEle ( BDFDB . dotCN . guildouter , document . querySelector ( ` ${ BDFDB . dotCNS . guilds + BDFDB . dotCN . dmpill + " + * " + BDFDB . dotCN . guildiconwrapper } [href*="/channels/@me/ ${ id } "] ` ) ) ;
return div && BDFDB ? div . parentElement : div ;
}
}
return null ;
} ;
BDFDB . getDmData = function ( eleOrInfoOrId ) {
if ( ! eleOrInfoOrId ) return null ;
let id = Node . prototype . isPrototypeOf ( eleOrInfoOrId ) ? BDFDB . getDmID ( eleOrInfoOrId ) : typeof eleOrInfoOrId == "object" ? eleOrInfoOrId . id : eleOrInfoOrId ;
id = typeof id == "number" ? id . toFixed ( ) : id ;
for ( let info of BDFDB . readDmList ( ) ) if ( info && info . id == id ) return info ;
return null ;
} ;
BDFDB . markChannelAsRead = function ( channels ) {
if ( ! channels ) return ;
var unreadchannels = [ ] ;
for ( let cha of channels = Array . isArray ( channels ) ? channels : ( typeof channels == "string" || typeof channels == "number" ? Array . of ( channels ) : Array . from ( channels ) ) ) {
let id = Node . prototype . isPrototypeOf ( cha ) ? ( BDFDB . getChannelID ( cha ) || BDFDB . getDmID ( cha ) ) : cha && typeof cha == "object" ? cha . id : cha ;
if ( id ) unreadchannels . push ( id ) ;
}
if ( unreadchannels . length ) LibraryModules . AckUtils . bulkAck ( unreadchannels ) ;
} ;
BDFDB . markGuildAsRead = function ( servers ) {
if ( ! servers ) return ;
var unreadchannels = [ ] ;
for ( let server of Array . isArray ( servers ) ? servers : ( typeof servers == "string" || typeof servers == "number" ? Array . of ( servers ) : Array . from ( servers ) ) ) {
let id = Node . prototype . isPrototypeOf ( server ) ? BDFDB . getServerID ( server ) : server && typeof server == "object" ? server . id : server ;
let channels = id ? LibraryModules . GuildChannelStore . getChannels ( id ) : null ;
if ( channels ) for ( let type in channels ) if ( Array . isArray ( channels [ type ] ) ) for ( let channelobj of channels [ type ] ) unreadchannels . push ( channelobj . channel . id ) ;
}
if ( unreadchannels . length ) LibraryModules . AckUtils . bulkAck ( unreadchannels ) ;
} ;
BDFDB . saveAllData = function ( data , plugin , key ) {
var configpath , pluginname ;
if ( ! BDFDB . BdUtils . isBDv2 ( ) ) {
pluginname = typeof plugin === "string" ? plugin : plugin . name ;
configpath = LibraryRequires . path . join ( BDFDB . BdUtils . getPluginsFolder ( ) , pluginname + ".config.json" ) ;
}
else {
pluginname = typeof plugin === "string" ? plugin . toLowerCase ( ) : null ;
var contentpath = pluginname ? BDFDB . Plugins [ pluginname ] ? BDFDB . Plugins [ pluginname ] . contentPath : null : plugin . contentPath ;
if ( ! contentpath ) return ;
configpath = LibraryRequires . path . join ( contentpath , "settings.json" ) ;
}
var exists = LibraryRequires . fs . existsSync ( configpath ) ;
var config = ! exists ? { } : typeof BDFDB . cachedData [ pluginname ] !== "undefined" ? BDFDB . cachedData [ pluginname ] : BDFDB . readConfig ( configpath ) ;
config [ key ] = BDFDB . ObjectUtils . is ( data ) ? BDFDB . ObjectUtils . sort ( data ) : data ;
if ( BDFDB . ObjectUtils . isEmpty ( config [ key ] ) ) delete config [ key ] ;
if ( BDFDB . ObjectUtils . isEmpty ( config ) ) {
delete BDFDB . cachedData [ pluginname ] ;
if ( exists ) LibraryRequires . fs . unlinkSync ( configpath ) ;
}
else {
config = BDFDB . ObjectUtils . sort ( config ) ;
BDFDB . cachedData [ pluginname ] = BDFDB . ObjectUtils . deepAssign ( { } , config ) ;
LibraryRequires . fs . writeFileSync ( configpath , JSON . stringify ( config , null , " " ) ) ;
}
} ;
BDFDB . loadAllData = function ( plugin , key ) {
var configpath , pluginname ;
if ( ! BDFDB . BdUtils . isBDv2 ( ) ) {
pluginname = typeof plugin === "string" ? plugin : plugin . name ;
configpath = LibraryRequires . path . join ( BDFDB . BdUtils . getPluginsFolder ( ) , pluginname + ".config.json" ) ;
}
else {
pluginname = typeof plugin === "string" ? plugin . toLowerCase ( ) : null ;
var contentpath = pluginname ? BDFDB . Plugins [ pluginname ] ? BDFDB . Plugins [ pluginname ] . contentPath : null : plugin . contentPath ;
if ( ! contentpath ) return { } ;
configpath = LibraryRequires . path . join ( contentpath , "settings.json" ) ;
}
if ( ! LibraryRequires . fs . existsSync ( configpath ) ) {
delete BDFDB . cachedData [ pluginname ] ;
return { } ;
}
var config = typeof BDFDB . cachedData [ pluginname ] !== "undefined" && typeof BDFDB . cachedData [ pluginname ] [ key ] !== "undefined" ? BDFDB . cachedData [ pluginname ] : BDFDB . readConfig ( configpath ) ;
BDFDB . cachedData [ pluginname ] = BDFDB . ObjectUtils . deepAssign ( { } , config ) ;
return BDFDB . ObjectUtils . deepAssign ( { } , config && typeof config [ key ] !== "undefined" ? config [ key ] : { } ) ;
} ;
BDFDB . removeAllData = function ( plugin , key ) {
var configpath , pluginname ;
if ( ! BDFDB . BdUtils . isBDv2 ( ) ) {
pluginname = typeof plugin === "string" ? plugin : plugin . name ;
configpath = LibraryRequires . path . join ( BDFDB . BdUtils . getPluginsFolder ( ) , pluginname + ".config.json" ) ;
}
else {
pluginname = typeof plugin === "string" ? plugin . toLowerCase ( ) : null ;
var contentpath = pluginname ? BDFDB . Plugins [ pluginname ] ? BDFDB . Plugins [ pluginname ] . contentPath : null : plugin . contentPath ;
if ( ! contentpath ) return ;
configpath = LibraryRequires . path . join ( contentpath , "settings.json" ) ;
}
var exists = LibraryRequires . fs . existsSync ( configpath ) ;
var config = ! exists ? { } : typeof BDFDB . cachedData [ pluginname ] !== "undefined" ? BDFDB . cachedData [ pluginname ] : BDFDB . readConfig ( configpath ) ;
delete config [ key ] ;
if ( BDFDB . ObjectUtils . isEmpty ( config ) ) {
delete BDFDB . cachedData [ pluginname ] ;
if ( exists ) LibraryRequires . fs . unlinkSync ( configpath ) ;
}
else {
BDFDB . cachedData [ pluginname ] = config ;
LibraryRequires . fs . writeFileSync ( configpath , JSON . stringify ( config , null , " " ) ) ;
}
} ;
BDFDB . getAllData = function ( plugin , key ) {
plugin = typeof plugin == "string" && BDFDB . ObjectUtils . is ( window . BdApi ) ? window . BdApi . getPlugin ( plugin ) : plugin ;
if ( ! BDFDB . ObjectUtils . is ( plugin ) || ! plugin . defaults || ! plugin . defaults [ key ] ) return { } ;
var oldconfig = BDFDB . loadAllData ( plugin , key ) , newconfig = { } , update = false ;
for ( let k in plugin . defaults [ key ] ) {
if ( oldconfig [ k ] == null ) {
newconfig [ k ] = BDFDB . ObjectUtils . is ( plugin . defaults [ key ] [ k ] . value ) ? BDFDB . ObjectUtils . deepAssign ( { } , plugin . defaults [ key ] [ k ] . value ) : plugin . defaults [ key ] [ k ] . value ;
update = true ;
}
else newconfig [ k ] = oldconfig [ k ] ;
}
if ( update ) BDFDB . saveAllData ( newconfig , plugin , key ) ;
return newconfig ;
} ;
BDFDB . readConfig = function ( path ) {
try { return JSON . parse ( LibraryRequires . fs . readFileSync ( path ) ) ; }
catch ( err ) { return { } ; }
} ;
BDFDB . saveData = function ( id , data , plugin , key ) {
var config = BDFDB . loadAllData ( plugin , key ) ;
config [ id ] = BDFDB . ObjectUtils . is ( data ) ? BDFDB . ObjectUtils . sort ( data ) : data ;
BDFDB . saveAllData ( config , plugin , key ) ;
} ;
BDFDB . loadData = function ( id , plugin , key ) {
var config = BDFDB . loadAllData ( plugin , key ) ;
var data = config [ id ] ;
return data === undefined ? null : data ;
} ;
BDFDB . removeData = function ( id , plugin , key ) {
var config = BDFDB . loadAllData ( plugin , key ) ;
delete config [ id ] ;
BDFDB . saveAllData ( config , plugin , key ) ;
} ;
BDFDB . getData = function ( id , plugin , key ) {
var config = BDFDB . getAllData ( plugin , key ) ;
var data = config [ id ] ;
return data === undefined ? null : data ;
} ;
BDFDB . appendWebScript = function ( path , container ) {
if ( ! container && ! document . head . querySelector ( "bd-head bd-scripts" ) ) document . head . appendChild ( BDFDB . htmlToElement ( ` <bd-head><bd-scripts></bd-scripts></bd-head> ` ) ) ;
container = container || document . head . querySelector ( "bd-head bd-scripts" ) || document . head ;
container = Node . prototype . isPrototypeOf ( container ) ? container : document . head ;
BDFDB . removeWebScript ( path , container ) ;
container . appendChild ( BDFDB . htmlToElement ( ` <script src=" ${ path } "></script> ` ) ) ;
} ;
BDFDB . removeWebScript = function ( path , container ) {
container = container || document . head . querySelector ( "bd-head bd-scripts" ) || document . head ;
container = Node . prototype . isPrototypeOf ( container ) ? container : document . head ;
BDFDB . removeEles ( container . querySelectorAll ( ` script[src=" ${ path } "] ` ) ) ;
} ;
BDFDB . appendWebStyle = function ( path , container ) {
if ( ! container && ! document . head . querySelector ( "bd-head bd-styles" ) ) document . head . appendChild ( BDFDB . htmlToElement ( ` <bd-head><bd-styles></bd-styles></bd-head> ` ) ) ;
container = container || document . head . querySelector ( "bd-head bd-styles" ) || document . head ;
container = Node . prototype . isPrototypeOf ( container ) ? container : document . head ;
BDFDB . removeWebStyle ( path , container ) ;
container . appendChild ( BDFDB . htmlToElement ( ` <link type="text/css" rel="Stylesheet" href=" ${ path } "></link> ` ) ) ;
} ;
BDFDB . removeWebStyle = function ( path , container ) {
container = container || document . head . querySelector ( "bd-head bd-styles" ) || document . head ;
container = Node . prototype . isPrototypeOf ( container ) ? container : document . head ;
BDFDB . removeEles ( container . querySelectorAll ( ` link[href=" ${ path } "] ` ) ) ;
} ;
BDFDB . appendLocalStyle = function ( id , css , container ) {
if ( ! container && ! document . head . querySelector ( "bd-head bd-styles" ) ) document . head . appendChild ( BDFDB . htmlToElement ( ` <bd-head><bd-styles></bd-styles></bd-head> ` ) ) ;
container = container || document . head . querySelector ( "bd-head bd-styles" ) || document . head ;
container = Node . prototype . isPrototypeOf ( container ) ? container : document . head ;
BDFDB . removeLocalStyle ( id , container ) ;
container . appendChild ( BDFDB . htmlToElement ( ` <style id=" ${ id } CSS"> ${ css . replace ( /\t|\r|\n/g , "" ) } </style> ` ) ) ;
} ;
BDFDB . removeLocalStyle = function ( id , container ) {
container = container || document . head . querySelector ( "bd-head bd-styles" ) || document . head ;
container = Node . prototype . isPrototypeOf ( container ) ? container : document . head ;
BDFDB . removeEles ( container . querySelectorAll ( ` style[id=" ${ id } CSS"] ` ) ) ;
} ;
BDFDB . formatBytes = function ( bytes , sigdigits ) {
bytes = parseInt ( bytes ) ;
if ( isNaN ( bytes ) || bytes < 0 ) return "0 Bytes" ;
if ( bytes == 1 ) return "1 Byte" ;
var size = Math . floor ( Math . log ( bytes ) / Math . log ( 1024 ) ) ;
return parseFloat ( ( bytes / Math . pow ( 1024 , size ) ) . toFixed ( sigdigits < 1 ? 0 : sigdigits > 20 ? 20 : sigdigits || 2 ) ) + " " + [ "Bytes" , "KB" , "MB" , "GB" , "TB" , "PB" , "EB" , "ZB" , "YB" ] [ size ] ;
} ;
BDFDB . colorCONVERT = function ( color , conv , type ) {
if ( color == null ) return null ;
conv = conv === undefined || ! conv ? conv = "RGBCOMP" : conv . toUpperCase ( ) ;
type = type === undefined || ! type || ! [ "RGB" , "RGBA" , "RGBCOMP" , "HSL" , "HSLA" , "HSLCOMP" , "HEX" , "HEXA" , "INT" ] . includes ( type . toUpperCase ( ) ) ? BDFDB . colorTYPE ( color ) : type . toUpperCase ( ) ;
if ( conv == "RGBCOMP" ) {
switch ( type ) {
case "RGBCOMP" :
if ( color . length == 3 ) return processRGB ( color ) ;
else if ( color . length == 4 ) {
let a = processA ( color . pop ( ) ) ;
return processRGB ( color ) . concat ( a ) ;
}
break ;
case "RGB" :
return processRGB ( color . replace ( /\s/g , "" ) . slice ( 4 , - 1 ) . split ( "," ) ) ;
case "RGBA" :
let comp = color . replace ( /\s/g , "" ) . slice ( 5 , - 1 ) . split ( "," ) ;
let a = processA ( comp . pop ( ) ) ;
return processRGB ( comp ) . concat ( a ) ;
case "HSLCOMP" :
if ( color . length == 3 ) return BDFDB . colorCONVERT ( ` hsl( ${ processHSL ( color ) . join ( "," ) } ) ` , "RGBCOMP" ) ;
else if ( color . length == 4 ) {
let a = processA ( color . pop ( ) ) ;
return BDFDB . colorCONVERT ( ` hsl( ${ processHSL ( color ) . join ( "," ) } ) ` , "RGBCOMP" ) . concat ( a ) ;
}
break ;
case "HSL" :
var hslcomp = processHSL ( color . replace ( /\s/g , "" ) . slice ( 4 , - 1 ) . split ( "," ) ) ;
var r , g , b , m , c , x , p , q ;
var h = hslcomp [ 0 ] / 360 , l = parseInt ( hslcomp [ 1 ] ) / 100 , s = parseInt ( hslcomp [ 2 ] ) / 100 ; m = Math . floor ( h * 6 ) ; c = h * 6 - m ; x = s * ( 1 - l ) ; p = s * ( 1 - c * l ) ; q = s * ( 1 - ( 1 - c ) * l ) ;
switch ( m % 6 ) {
case 0 : r = s , g = q , b = x ; break ;
case 1 : r = p , g = s , b = x ; break ;
case 2 : r = x , g = s , b = q ; break ;
case 3 : r = x , g = p , b = s ; break ;
case 4 : r = q , g = x , b = s ; break ;
case 5 : r = s , g = x , b = p ; break ;
}
return [ Math . round ( r * 255 ) , Math . round ( g * 255 ) , Math . round ( b * 255 ) ] ;
case "HSLA" :
var hslcomp = color . replace ( /\s/g , "" ) . slice ( 5 , - 1 ) . split ( "," ) ;
return BDFDB . colorCONVERT ( ` hsl( ${ hslcomp . join ( "," ) } ) ` , "RGBCOMP" ) . concat ( processA ( hslcomp . pop ( ) ) ) ;
case "HEX" :
var hex = /^#([a-f\d]{1})([a-f\d]{1})([a-f\d]{1})$|^#([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i . exec ( color ) ;
return [ parseInt ( hex [ 1 ] + hex [ 1 ] || hex [ 4 ] , 16 ) . toString ( ) , parseInt ( hex [ 2 ] + hex [ 2 ] || hex [ 5 ] , 16 ) . toString ( ) , parseInt ( hex [ 3 ] + hex [ 3 ] || hex [ 6 ] , 16 ) . toString ( ) ] ;
case "HEXA" :
var hex = /^#([a-f\d]{1})([a-f\d]{1})([a-f\d]{1})([a-f\d]{1})$|^#([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i . exec ( color ) ;
return [ parseInt ( hex [ 1 ] + hex [ 1 ] || hex [ 5 ] , 16 ) . toString ( ) , parseInt ( hex [ 2 ] + hex [ 2 ] || hex [ 6 ] , 16 ) . toString ( ) , parseInt ( hex [ 3 ] + hex [ 3 ] || hex [ 7 ] , 16 ) . toString ( ) , Math . floor ( BDFDB . mapRange ( [ 0 , 255 ] , [ 0 , 100 ] , parseInt ( hex [ 4 ] + hex [ 4 ] || hex [ 8 ] , 16 ) . toString ( ) ) ) / 100 ] ;
case "INT" :
color = processINT ( color ) ;
return [ ( color >> 16 & 255 ) . toString ( ) , ( color >> 8 & 255 ) . toString ( ) , ( color & 255 ) . toString ( ) ] ;
default :
return null ;
}
}
else {
var rgbcomp = type == "RGBCOMP" ? color : BDFDB . colorCONVERT ( color , "RGBCOMP" , type ) ;
if ( rgbcomp ) switch ( conv ) {
case "RGB" :
return ` rgb( ${ processRGB ( rgbcomp . slice ( 0 , 3 ) ) . join ( "," ) } ) ` ;
case "RGBA" :
rgbcomp = rgbcomp . slice ( 0 , 4 ) ;
var a = rgbcomp . length == 4 ? processA ( rgbcomp . pop ( ) ) : 1 ;
return ` rgba( ${ processRGB ( rgbcomp ) . concat ( a ) . join ( "," ) } ) ` ;
case "HSLCOMP" :
var a = rgbcomp . length == 4 ? processA ( rgbcomp . pop ( ) ) : null ;
var hslcomp = processHSL ( BDFDB . colorCONVERT ( rgbcomp , "HSL" ) . replace ( /\s/g , "" ) . split ( "," ) ) ;
return a != null ? hslcomp . concat ( a ) : hslcomp ;
case "HSL" :
var r = processC ( rgbcomp [ 0 ] ) , g = processC ( rgbcomp [ 1 ] ) , b = processC ( rgbcomp [ 2 ] ) ;
var max = Math . max ( r , g , b ) , min = Math . min ( r , g , b ) , dif = max - min , h , l = max === 0 ? 0 : dif / max , s = max / 255 ;
switch ( max ) {
case min : h = 0 ; break ;
case r : h = g - b + dif * ( g < b ? 6 : 0 ) ; h /= 6 * dif ; break ;
case g : h = b - r + dif * 2 ; h /= 6 * dif ; break ;
case b : h = r - g + dif * 4 ; h /= 6 * dif ; break ;
}
return ` hsl( ${ processHSL ( [ Math . round ( h * 360 ) , l * 100 , s * 100 ] ) . join ( "," ) } ) ` ;
case "HSLA" :
var j0 = rgbcomp . length == 4 ? processA ( rgbcomp . pop ( ) ) : 1 ;
return ` hsla( ${ BDFDB . colorCONVERT ( rgbcomp , "HSL" ) . slice ( 4 , - 1 ) . split ( "," ) . concat ( j0 ) . join ( "," ) } ) ` ;
case "HEX" :
return ( "#" + ( 0x1000000 + ( rgbcomp [ 2 ] | rgbcomp [ 1 ] << 8 | rgbcomp [ 0 ] << 16 ) ) . toString ( 16 ) . slice ( 1 ) ) . toUpperCase ( ) ;
case "HEXA" :
return ( "#" + ( 0x1000000 + ( rgbcomp [ 2 ] | rgbcomp [ 1 ] << 8 | rgbcomp [ 0 ] << 16 ) ) . toString ( 16 ) . slice ( 1 ) + ( 0x100 + Math . round ( BDFDB . mapRange ( [ 0 , 100 ] , [ 0 , 255 ] , processA ( rgbcomp [ 3 ] ) * 100 ) ) ) . toString ( 16 ) . slice ( 1 ) ) . toUpperCase ( ) ;
case "INT" :
return processINT ( rgbcomp [ 2 ] | rgbcomp [ 1 ] << 8 | rgbcomp [ 0 ] << 16 ) ;
default :
return null ;
}
}
function processC ( c ) { if ( c == null ) { return 255 ; } else { c = parseInt ( c . toString ( ) . replace ( /[^0-9\-]/g , "" ) ) ; return isNaN ( c ) || c > 255 ? 255 : c < 0 ? 0 : c ; } } ;
function processRGB ( comp ) { return comp . map ( c => { return processC ( c ) ; } ) ; } ;
function processA ( a ) { if ( a == null ) { return 1 ; } else { a = a . toString ( ) ; a = ( a . indexOf ( "%" ) > - 1 ? 0.01 : 1 ) * parseFloat ( a . replace ( /[^0-9\.\-]/g , "" ) ) ; return isNaN ( a ) || a > 1 ? 1 : a < 0 ? 0 : a ; } } ;
function processSL ( sl ) { if ( sl == null ) { return "100%" ; } else { sl = parseFloat ( sl . toString ( ) . replace ( /[^0-9\.\-]/g , "" ) ) ; return ( isNaN ( sl ) || sl > 100 ? 100 : sl < 0 ? 0 : sl ) + "%" ; } } ;
function processHSL ( comp ) { let h = parseFloat ( comp . shift ( ) . toString ( ) . replace ( /[^0-9\.\-]/g , "" ) ) ; h = isNaN ( h ) || h > 360 ? 360 : h < 0 ? 0 : h ; return [ h ] . concat ( comp . map ( sl => { return processSL ( sl ) ; } ) ) ; } ;
function processINT ( c ) { if ( c == null ) { return 16777215 ; } else { c = parseInt ( c . toString ( ) . replace ( /[^0-9]/g , "" ) ) ; return isNaN ( c ) || c > 16777215 ? 16777215 : c < 0 ? 0 : c ; } } ;
} ;
var setAlpha = ( color , a , conv ) => {
var comp = BDFDB . colorCONVERT ( color , "RGBCOMP" ) ;
if ( comp ) {
a = a . toString ( ) ;
a = ( a . indexOf ( "%" ) > - 1 ? 0.01 : 1 ) * parseFloat ( a . replace ( /[^0-9\.\-]/g , "" ) ) ;
a = isNaN ( a ) || a > 1 ? 1 : a < 0 ? 0 : a ;
comp [ 3 ] = a ;
conv = ( conv || BDFDB . colorTYPE ( color ) ) . toUpperCase ( ) ;
conv = conv == "RGB" || conv == "HSL" || conv == "HEX" ? conv + "A" : conv ;
return BDFDB . colorCONVERT ( comp , conv ) ;
}
return null ;
} ;
BDFDB . colorSETALPHA = function ( color , a , conv ) {
if ( BDFDB . ObjectUtils . is ( color ) ) {
var newcolor = { } ;
for ( let pos in color ) newcolor [ pos ] = setAlpha ( color [ pos ] , a , conv ) ;
return newcolor ;
}
else return setAlpha ( color , a , conv ) ;
} ;
BDFDB . colorGETALPHA = function ( color ) {
var comp = BDFDB . colorCONVERT ( color , "RGBCOMP" ) ;
if ( comp ) {
if ( comp . length == 3 ) return 1 ;
else if ( comp . length == 4 ) {
let a = comp [ 3 ] . toString ( ) ;
a = ( a . indexOf ( "%" ) > - 1 ? 0.01 : 1 ) * parseFloat ( a . replace ( /[^0-9\.\-]/g , "" ) ) ;
return isNaN ( a ) || a > 1 ? 1 : a < 0 ? 0 : a ;
}
}
else return null ;
} ;
var colorChange = ( color , value , conv ) => {
var comp = BDFDB . colorCONVERT ( color , "RGBCOMP" ) ;
if ( comp ) {
if ( parseInt ( value ) !== value ) {
value = value . toString ( ) ;
value = ( value . indexOf ( "%" ) > - 1 ? 0.01 : 1 ) * parseFloat ( value . replace ( /[^0-9\.\-]/g , "" ) ) ;
value = isNaN ( value ) ? 0 : value ;
return BDFDB . colorCONVERT ( [ Math . round ( comp [ 0 ] * ( 1 + value ) ) , Math . round ( comp [ 1 ] * ( 1 + value ) ) , Math . round ( comp [ 2 ] * ( 1 + value ) ) ] , conv || BDFDB . colorTYPE ( color ) ) ;
}
else return BDFDB . colorCONVERT ( [ Math . round ( comp [ 0 ] + value ) , Math . round ( comp [ 1 ] + value ) , Math . round ( comp [ 2 ] + value ) ] , conv || BDFDB . colorTYPE ( color ) ) ;
}
return null ;
} ;
BDFDB . colorCHANGE = function ( color , value , conv ) {
value = parseFloat ( value ) ;
if ( color != null && typeof value == "number" && ! isNaN ( value ) ) {
if ( BDFDB . ObjectUtils . is ( color ) ) {
var newcolor = { } ;
for ( let pos in color ) newcolor [ pos ] = colorChange ( color [ pos ] , value , conv ) ;
return newcolor ;
}
else return colorChange ( color , value , conv ) ;
}
return null ;
} ;
BDFDB . colorINV = function ( color , conv ) {
if ( color != null ) {
var comp = BDFDB . colorCONVERT ( color , "RGBCOMP" ) ;
if ( comp ) return BDFDB . colorCONVERT ( [ 255 - comp [ 0 ] , 255 - comp [ 1 ] , 255 - comp [ 2 ] ] , conv || BDFDB . colorTYPE ( color ) ) ;
}
return null ;
} ;
BDFDB . colorCOMPARE = function ( color1 , color2 ) {
if ( color1 && color2 ) {
color1 = BDFDB . colorCONVERT ( color1 , "RGBA" ) ;
color2 = BDFDB . colorCONVERT ( color2 , "RGBA" ) ;
if ( color1 && color2 ) return BDFDB . equals ( color1 , color2 ) ;
}
return null ;
} ;
BDFDB . colorISBRIGHT = function ( color , compare = 160 ) {
color = BDFDB . colorCONVERT ( color , "RGBCOMP" ) ;
if ( ! color ) return false ;
return parseInt ( compare ) < Math . sqrt ( 0.299 * color [ 0 ] * * 2 + 0.587 * color [ 1 ] * * 2 + 0.144 * color [ 2 ] * * 2 ) ;
} ;
BDFDB . colorTYPE = function ( color ) {
if ( color != null ) {
if ( typeof color === "object" && ( color . length == 3 || color . length == 4 ) ) {
if ( isRGB ( color ) ) return "RGBCOMP" ;
else if ( isHSL ( color ) ) return "HSLCOMP" ;
}
else if ( typeof color === "string" ) {
if ( /^#[a-f\d]{3}$|^#[a-f\d]{6}$/i . test ( color ) ) return "HEX" ;
else if ( /^#[a-f\d]{4}$|^#[a-f\d]{8}$/i . test ( color ) ) return "HEXA" ;
else {
color = color . toUpperCase ( ) ;
var comp = color . replace ( /[^0-9\.\-\,\%]/g , "" ) . split ( "," ) ;
if ( color . indexOf ( "RGB(" ) == 0 && comp . length == 3 && isRGB ( comp ) ) return "RGB" ;
else if ( color . indexOf ( "RGBA(" ) == 0 && comp . length == 4 && isRGB ( comp ) ) return "RGBA" ;
else if ( color . indexOf ( "HSL(" ) == 0 && comp . length == 3 && isHSL ( comp ) ) return "HSL" ;
else if ( color . indexOf ( "HSLA(" ) == 0 && comp . length == 4 && isHSL ( comp ) ) return "HSLA" ;
}
}
else if ( typeof color === "number" && parseInt ( color ) == color && color > - 1 && color < 16777216 ) return "INT" ;
}
return null ;
function isRGB ( comp ) { return comp . slice ( 0 , 3 ) . every ( rgb => rgb . toString ( ) . indexOf ( "%" ) == - 1 && parseFloat ( rgb ) == parseInt ( rgb ) ) ; } ;
function isHSL ( comp ) { return comp . slice ( 1 , 3 ) . every ( hsl => hsl . toString ( ) . indexOf ( "%" ) == hsl . length - 1 ) ; } ;
} ;
BDFDB . colorGRADIENT = function ( colorobj , direction = "to right" ) {
var sortedgradient = { } ;
var gradientstring = "linear-gradient(" + direction ;
for ( let pos of Object . keys ( colorobj ) . sort ( ) ) gradientstring += ` , ${ colorobj [ pos ] } ${ pos * 100 } % `
return gradientstring += ")" ;
} ;
BDFDB . setInnerText = function ( node , stringOrNode ) {
if ( ! node || ! Node . prototype . isPrototypeOf ( node ) ) return ;
var textnode = node . nodeType == Node . TEXT _NODE ? node : null ;
if ( ! textnode ) for ( let child of node . childNodes ) if ( child . nodeType == Node . TEXT _NODE || BDFDB . containsClass ( child , "BDFDB-textnode" ) ) {
textnode = child ;
break ;
}
if ( textnode ) {
if ( Node . prototype . isPrototypeOf ( stringOrNode ) && stringOrNode . nodeType != Node . TEXT _NODE ) {
BDFDB . addClass ( stringOrNode , "BDFDB-textnode" ) ;
node . replaceChild ( stringOrNode , textnode ) ;
}
else if ( Node . prototype . isPrototypeOf ( textnode ) && textnode . nodeType != Node . TEXT _NODE ) node . replaceChild ( document . createTextNode ( stringOrNode ) , textnode ) ;
else textnode . textContent = stringOrNode ;
}
else node . appendChild ( Node . prototype . isPrototypeOf ( stringOrNode ) ? stringOrNode : document . createTextNode ( stringOrNode ) ) ;
} ;
BDFDB . getInnerText = function ( node ) {
if ( ! node || ! Node . prototype . isPrototypeOf ( node ) ) return ;
for ( let child of node . childNodes ) if ( child . nodeType == Node . TEXT _NODE ) return child . textContent ;
} ;
BDFDB . getParentEle = function ( listOrSelector , node ) {
var parent = null ;
if ( Node . prototype . isPrototypeOf ( node ) && listOrSelector ) {
var list = NodeList . prototype . isPrototypeOf ( listOrSelector ) ? listOrSelector : typeof listOrSelector == "string" ? document . querySelectorAll ( listOrSelector ) : null ;
if ( list ) for ( let listnode of list ) if ( listnode . contains ( node ) ) {
parent = listnode ;
break ;
}
}
return parent ;
} ;
BDFDB . getRects = function ( node ) {
var rects = { } ;
if ( Node . prototype . isPrototypeOf ( node ) && node . nodeType != Node . TEXT _NODE ) {
var hidenode = node ;
while ( hidenode ) {
var hidden = BDFDB . isEleHidden ( hidenode ) ;
if ( hidden ) {
BDFDB . toggleEles ( hidenode , true ) ;
hidenode . BDFDBgetRectsHidden = true ;
}
hidenode = hidenode . parentElement ;
}
rects = node . getBoundingClientRect ( ) ;
hidenode = node ;
while ( hidenode ) {
if ( hidenode . BDFDBgetRectsHidden ) {
BDFDB . toggleEles ( hidenode , false ) ;
delete hidenode . BDFDBgetRectsHidden ;
}
hidenode = hidenode . parentElement ;
}
}
return rects ;
} ;
BDFDB . getTotalHeight = function ( node ) {
if ( Node . prototype . isPrototypeOf ( node ) && node . nodeType != Node . TEXT _NODE ) {
var rects = BDFDB . getRects ( node ) ;
var style = getComputedStyle ( node ) ;
return rects . height + parseInt ( style . marginTop ) + parseInt ( style . marginBottom ) ;
}
return 0 ;
} ;
BDFDB . getTotalWidth = function ( node ) {
if ( Node . prototype . isPrototypeOf ( node ) && node . nodeType != Node . TEXT _NODE ) {
var rects = BDFDB . getRects ( node ) ;
var style = getComputedStyle ( node ) ;
return rects . width + parseInt ( style . marginLeft ) + parseInt ( style . marginRight ) ;
}
return 0 ;
} ;
BDFDB . isEleHidden = function ( node ) {
if ( Node . prototype . isPrototypeOf ( node ) && node . nodeType != Node . TEXT _NODE ) return getComputedStyle ( node , null ) . getPropertyValue ( "display" ) == "none" ;
} ;
BDFDB . toggleEles = function ( ... eles ) {
if ( ! eles ) return ;
var force = eles . pop ( ) ;
if ( typeof force != "boolean" ) {
eles . push ( force ) ;
force = undefined ;
}
if ( ! eles . length ) return ;
for ( let ele of eles ) for ( let e of Array . isArray ( ele ) ? ele : Array . of ( ele ) ) {
if ( ! e ) { }
else if ( Node . prototype . isPrototypeOf ( e ) ) toggle ( e ) ;
else if ( NodeList . prototype . isPrototypeOf ( e ) ) for ( let n of e ) toggle ( n ) ;
else if ( typeof e == "string" ) for ( let c of e . split ( "," ) ) if ( c && ( c = c . trim ( ) ) ) for ( let n of document . querySelectorAll ( c ) ) toggle ( n ) ;
}
function toggle ( node ) {
if ( ! node || ! Node . prototype . isPrototypeOf ( node ) ) return ;
var hidden = force === undefined ? ! BDFDB . isEleHidden ( node ) : ! force ;
if ( hidden ) node . style . setProperty ( "display" , "none" , "important" ) ;
else node . style . removeProperty ( "display" ) ;
}
} ;
BDFDB . removeEles = function ( ... eles ) {
for ( let ele of eles ) for ( let e of Array . isArray ( ele ) ? ele : Array . of ( ele ) ) {
if ( ! e ) { }
else if ( Node . prototype . isPrototypeOf ( e ) ) e . remove ( ) ;
else if ( NodeList . prototype . isPrototypeOf ( e ) ) {
e = Array . from ( e ) ;
while ( e . length ) e . shift ( ) . remove ( ) ;
}
else if ( typeof e == "string" ) for ( let c of e . split ( "," ) ) if ( c && ( c = c . trim ( ) ) ) {
let n = Array . from ( document . querySelectorAll ( c ) ) ;
while ( n . length ) n . shift ( ) . remove ( ) ;
}
}
} ;
BDFDB . addClass = function ( eles , ... classes ) {
if ( ! eles || ! classes ) return ;
for ( let ele of Array . isArray ( eles ) ? eles : Array . of ( eles ) ) {
if ( ! ele ) { }
else if ( Node . prototype . isPrototypeOf ( ele ) ) add ( ele ) ;
else if ( NodeList . prototype . isPrototypeOf ( ele ) ) for ( let e of ele ) add ( e ) ;
else if ( typeof ele == "string" ) for ( let e of ele . split ( "," ) ) if ( e && ( e = e . trim ( ) ) ) for ( let n of document . querySelectorAll ( e ) ) add ( n ) ;
}
function add ( node ) {
if ( node && node . classList ) for ( let cla of classes ) for ( let cl of Array . isArray ( cla ) ? cla : Array . of ( cla ) ) if ( typeof cl == "string" ) for ( let c of cl . split ( " " ) ) if ( c ) node . classList . add ( c ) ;
}
} ;
BDFDB . removeClass = function ( eles , ... classes ) {
if ( ! eles || ! classes ) return ;
for ( let ele of Array . isArray ( eles ) ? eles : Array . of ( eles ) ) {
if ( ! ele ) { }
else if ( Node . prototype . isPrototypeOf ( ele ) ) remove ( ele ) ;
else if ( NodeList . prototype . isPrototypeOf ( ele ) ) for ( let e of ele ) remove ( e ) ;
else if ( typeof ele == "string" ) for ( let e of ele . split ( "," ) ) if ( e && ( e = e . trim ( ) ) ) for ( let n of document . querySelectorAll ( e ) ) remove ( n ) ;
}
function remove ( node ) {
if ( node && node . classList ) for ( let cla of classes ) for ( let cl of Array . isArray ( cla ) ? cla : Array . of ( cla ) ) if ( typeof cl == "string" ) for ( let c of cl . split ( " " ) ) if ( c ) node . classList . remove ( c ) ;
}
} ;
BDFDB . toggleClass = function ( eles , ... classes ) {
if ( ! eles || ! classes ) return ;
var force = classes . pop ( ) ;
if ( typeof force != "boolean" ) {
classes . push ( force ) ;
force = undefined ;
}
if ( ! classes . length ) return ;
for ( let ele of Array . isArray ( eles ) ? eles : Array . of ( eles ) ) {
if ( ! ele ) { }
else if ( Node . prototype . isPrototypeOf ( ele ) ) toggle ( ele ) ;
else if ( NodeList . prototype . isPrototypeOf ( ele ) ) for ( let e of ele ) toggle ( e ) ;
else if ( typeof ele == "string" ) for ( let e of ele . split ( "," ) ) if ( e && ( e = e . trim ( ) ) ) for ( let n of document . querySelectorAll ( e ) ) toggle ( n ) ;
}
function toggle ( node ) {
if ( node && node . classList ) for ( let cla of classes ) for ( let cl of Array . isArray ( cla ) ? cla : Array . of ( cla ) ) if ( typeof cl == "string" ) for ( let c of cl . split ( " " ) ) if ( c ) node . classList . toggle ( c , force ) ;
}
} ;
BDFDB . containsClass = function ( eles , ... classes ) {
if ( ! eles || ! classes ) return ;
var all = classes . pop ( ) ;
if ( typeof all != "boolean" ) {
classes . push ( all ) ;
all = true ;
}
if ( ! classes . length ) return ;
var contained = undefined ;
for ( let ele of Array . isArray ( eles ) ? eles : Array . of ( eles ) ) {
if ( ! ele ) { }
else if ( Node . prototype . isPrototypeOf ( ele ) ) contains ( ele ) ;
else if ( NodeList . prototype . isPrototypeOf ( ele ) ) for ( let e of ele ) contains ( e ) ;
else if ( typeof ele == "string" ) for ( let c of ele . split ( "," ) ) if ( c && ( c = c . trim ( ) ) ) for ( let n of document . querySelectorAll ( c ) ) contains ( n ) ;
}
return contained ;
function contains ( node ) {
if ( node && node . classList ) for ( let cla of classes ) if ( typeof cla == "string" ) for ( let c of cla . split ( " " ) ) if ( c ) {
if ( contained === undefined ) contained = all ;
if ( all && ! node . classList . contains ( c ) ) contained = false ;
if ( ! all && node . classList . contains ( c ) ) contained = true ;
}
}
} ;
BDFDB . replaceClass = function ( eles , oldclass , newclass ) {
if ( ! eles || typeof oldclass != "string" || typeof newclass != "string" ) return ;
for ( let ele of Array . isArray ( eles ) ? eles : Array . of ( eles ) ) {
if ( ! ele ) { }
else if ( Node . prototype . isPrototypeOf ( ele ) ) replace ( ele ) ;
else if ( NodeList . prototype . isPrototypeOf ( ele ) ) for ( let e of ele ) replace ( e ) ;
else if ( typeof ele == "string" ) for ( let e of ele . split ( "," ) ) if ( e && ( e = e . trim ( ) ) ) for ( let n of document . querySelectorAll ( e ) ) replace ( n ) ;
}
function replace ( node ) {
if ( node && node . tagName && node . className ) node . className = node . className . replace ( new RegExp ( oldclass , "g" ) , newclass ) . trim ( ) ;
}
} ;
BDFDB . removeClasses = function ( ... classes ) {
for ( let cla of classes ) for ( let c of Array . isArray ( cla ) ? cla : Array . of ( cla ) ) {
if ( ! c ) { }
else if ( typeof c == "string" ) for ( let a of c . split ( "," ) ) if ( a && ( a = a . replace ( /\.|\s/g , "" ) ) ) BDFDB . removeClass ( document . querySelectorAll ( "." + a ) , a ) ;
}
} ;
BDFDB . htmlToElement = function ( html ) {
if ( ! html || ! html . trim ( ) ) return null ;
let template = document . createElement ( "template" ) ;
try { template . innerHTML = html . replace ( /(?<!pre)>[\t\r\n]+<(?!pre)/g , "><" ) ; }
catch ( err ) { template . innerHTML = html . replace ( />[\t\r\n]+<(?!pre)/g , "><" ) ; }
if ( template . content . childElementCount == 1 ) return template . content . firstElementChild ;
else {
var wrapper = document . createElement ( "span" ) ;
var nodes = Array . from ( template . content . childNodes ) ;
while ( nodes . length ) wrapper . appendChild ( nodes . shift ( ) ) ;
return wrapper ;
}
} ;
BDFDB . encodeToHTML = function ( string ) {
var ele = document . createElement ( "div" ) ;
ele . innerText = string ;
return ele . innerHTML ;
} ;
BDFDB . regEscape = function ( string ) {
return string . replace ( /([\-\/\\\^\$\*\+\?\.\(\)\|\[\]\{\}])/g , "\\$1" ) ;
} ;
BDFDB . insertNRST = function ( string ) {
return string . replace ( /\\r/g , "\r" ) . replace ( /\\n/g , "\n" ) . replace ( /\\t/g , "\t" ) . replace ( /\\s/g , " " ) ;
} ;
BDFDB . triggerSend = function ( textarea ) {
if ( ! textarea ) return ;
setImmediate ( ( ) => {
var e = new KeyboardEvent ( "keypress" , { key : "Enter" , code : "Enter" , which : 13 , keyCode : 13 , bubbles : true } ) ;
Object . defineProperty ( e , "keyCode" , { value : 13 } ) ;
Object . defineProperty ( e , "which" , { value : 13 } ) ;
textarea . dispatchEvent ( e ) ;
} ) ;
} ;
BDFDB . initElements = function ( container , plugin ) {
if ( ! Node . prototype . isPrototypeOf ( container ) ) return ;
var islighttheme = BDFDB . DiscordUtils . getTheme ( ) == BDFDB . disCN . themelight ;
var languagestrings = BDFDB . getLibraryStrings ( ) ;
container . querySelectorAll ( ".BDFDB-containertext" ) . forEach ( ele => {
if ( BDFDB . containsClass ( ele . nextElementSibling , "BDFDB-collapsecontainer" ) ) {
if ( BDFDB . containsClass ( ele . firstElementChild , "closed" ) ) BDFDB . toggleEles ( ele . nextElementSibling , false ) ;
ele . BDFDBupdateElement = ( ) => {
BDFDB . toggleEles ( ele . nextElementSibling , BDFDB . containsClass ( ele . firstElementChild , "closed" ) ) ;
BDFDB . toggleClass ( ele . firstElementChild , "closed" ) ;
} ;
addInitEventListener ( ele , "click" , ele . BDFDBupdateElement ) ;
}
} ) ;
container . querySelectorAll ( BDFDB . dotCN . switchinner ) . forEach ( ele => {
setSwitch ( ele , false ) ;
ele . BDFDBupdateElement = ( ) => {
setSwitch ( ele , true ) ;
} ;
addInitEventListener ( ele , "click" , ele . BDFDBupdateElement ) ;
} ) ;
container . querySelectorAll ( BDFDB . dotCNS . checkboxwrapper + BDFDB . dotCN . checkboxinput ) . forEach ( ele => {
setCheckbox ( ele ) ;
ele . BDFDBupdateElement = ( ) => {
setCheckbox ( ele ) ;
} ;
addInitEventListener ( ele , "click" , ele . BDFDBupdateElement ) ;
} ) ;
container . querySelectorAll ( BDFDB . dotCN . giffavoritebutton ) . forEach ( ele => {
setGifFavButton ( ele ) ;
ele . BDFDBupdateElement = ( ) => {
BDFDB . toggleClass ( ele , BDFDB . disCN . giffavoriteselected ) ;
setGifFavButton ( ele ) ;
} ;
addInitEventListener ( ele , "click" , ele . BDFDBupdateElement ) ;
var id = "FAV_s" + Math . round ( Math . random ( ) * 10000000000000000 ) ;
addInitEventListener ( ele , "mouseenter" , ( ) => {
BDFDB . removeEles ( ` # ${ id } _tooltip ` ) ;
BDFDB . TooltipUtils . create ( ele , BDFDB . LanguageStrings [ ` GIF_TOOLTIP_ ${ BDFDB . containsClass ( ele , BDFDB . disCN . giffavoriteselected ) ? "REMOVE_FROM" : "ADD_TO" } _FAVORITES ` ] , { type : "top" , id : id + "_tooltip" } ) ;
} ) ;
} ) ;
container . querySelectorAll ( ".file-navigator" ) . forEach ( ele => {
ele . BDFDBupdateElement = ( ) => {
var input = ele . querySelector ( ` input[type="file"] ` ) ;
if ( input ) input . click ( ) ;
} ;
addInitEventListener ( ele , "click" , ele . BDFDBupdateElement ) ;
} ) ;
container . querySelectorAll ( ` input[type="file"] ` ) . forEach ( ele => {
addInitEventListener ( ele , "change" , e => {
var input = ele . parentElement . parentElement . querySelector ( ` input[type="text"] ` ) ;
var file = ele . files [ 0 ] ;
if ( input && file ) input . value = file . path ;
} ) ;
} ) ;
container . querySelectorAll ( BDFDB . dotCN . input ) . forEach ( ele => {
addInitEventListener ( ele , "keydown" , e => {
e . stopPropagation ( ) ;
} ) ;
} ) ;
container . querySelectorAll ( BDFDB . dotCNS . searchbar + BDFDB . dotCN . searchbarinput ) . forEach ( ele => {
ele . setAttribute ( "placeholder" , languagestrings . search _placeholder ) ;
addInitEventListener ( ele , "keyup" , e => {
let icons = ele . parentElement . querySelectorAll ( BDFDB . dotCN . searchbaricon ) ;
BDFDB . toggleClass ( icons [ 0 ] , BDFDB . disCN . searchbarvisible , ele . value . length == 0 ) ;
BDFDB . toggleClass ( icons [ 1 ] , BDFDB . disCN . searchbarvisible , ele . value . length ) ;
} ) ;
} ) ;
container . querySelectorAll ( BDFDB . dotCNS . searchbar + BDFDB . dotCN . searchbarclear ) . forEach ( ele => {
addInitEventListener ( ele , "click" , e => {
if ( BDFDB . containsClass ( ele , BDFDB . disCN . searchbarvisible ) ) {
var input = BDFDB . getParentEle ( BDFDB . dotCN . searchbar , ele ) . querySelector ( BDFDB . dotCN . searchbarinput ) ;
input . value = "" ;
input . dispatchEvent ( new Event ( "change" ) ) ;
input . dispatchEvent ( new Event ( "input" ) ) ;
input . dispatchEvent ( new Event ( "keydown" ) ) ;
input . dispatchEvent ( new Event ( "keyup" ) ) ;
input . dispatchEvent ( new Event ( "keypressed" ) ) ;
BDFDB . addClass ( ele . parentElement . querySelectorAll ( BDFDB . dotCN . searchbaricon ) [ 0 ] , BDFDB . disCN . searchbarvisible ) ;
BDFDB . removeClass ( ele , BDFDB . disCN . searchbarvisible ) ;
}
} ) ;
} ) ;
container . querySelectorAll ( ".numberinput-button-up" ) . forEach ( ele => {
addInitEventListener ( ele , "click" , e => {
var input = ele . parentElement . parentElement . querySelector ( "input" ) ;
var min = parseInt ( input . getAttribute ( "min" ) ) ;
var max = parseInt ( input . getAttribute ( "max" ) ) ;
var newv = parseInt ( input . value ) + 1 ;
if ( isNaN ( max ) || ! isNaN ( max ) && newv <= max ) {
BDFDB . addClass ( ele . parentElement , "pressed" ) ;
clearTimeout ( ele . parentElement . pressedTimeout ) ;
input . value = isNaN ( min ) || ! isNaN ( min ) && newv >= min ? newv : min ;
input . dispatchEvent ( new Event ( "change" ) ) ;
input . dispatchEvent ( new Event ( "input" ) ) ;
input . dispatchEvent ( new Event ( "keydown" ) ) ;
input . dispatchEvent ( new Event ( "keyup" ) ) ;
input . dispatchEvent ( new Event ( "keypressed" ) ) ;
ele . parentElement . pressedTimeout = setTimeout ( ( ) => { BDFDB . removeClass ( ele . parentElement , "pressed" ) ; } , 3000 ) ;
}
} ) ;
} ) ;
container . querySelectorAll ( ".numberinput-button-down" ) . forEach ( ele => {
addInitEventListener ( ele , "click" , e => {
var input = ele . parentElement . parentElement . querySelector ( "input" ) ;
var min = parseInt ( input . getAttribute ( "min" ) ) ;
var max = parseInt ( input . getAttribute ( "max" ) ) ;
var newv = parseInt ( input . value ) - 1 ;
if ( isNaN ( min ) || ! isNaN ( min ) && newv >= min ) {
BDFDB . addClass ( ele . parentElement , "pressed" ) ;
clearTimeout ( ele . parentElement . pressedTimeout ) ;
input . value = isNaN ( max ) || ! isNaN ( max ) && newv <= max ? newv : max ;
input . dispatchEvent ( new Event ( "change" ) ) ;
input . dispatchEvent ( new Event ( "input" ) ) ;
input . dispatchEvent ( new Event ( "keydown" ) ) ;
input . dispatchEvent ( new Event ( "keyup" ) ) ;
input . dispatchEvent ( new Event ( "keypressed" ) ) ;
ele . parentElement . pressedTimeout = setTimeout ( ( ) => { BDFDB . removeClass ( ele . parentElement , "pressed" ) ; } , 3000 ) ;
}
} ) ;
} ) ;
container . querySelectorAll ( ".amount-input" ) . forEach ( ele => {
addInitEventListener ( ele , "input" , e => {
if ( BDFDB . ObjectUtils . is ( plugin ) ) {
var option = ele . getAttribute ( "option" ) ;
var newv = parseInt ( ele . value ) ;
var min = parseInt ( ele . getAttribute ( "min" ) ) ;
var max = parseInt ( ele . getAttribute ( "max" ) ) ;
if ( option && ! isNaN ( newv ) && ( isNaN ( min ) || ! isNaN ( min ) && newv >= min ) && ( isNaN ( max ) || ! isNaN ( max ) && newv <= max ) ) {
BDFDB . saveData ( option , newv , plugin , "amounts" ) ;
plugin . SettingsUpdated = true ;
}
}
} ) ;
} ) ;
container . querySelectorAll ( BDFDB . dotCNC . tabbaritem + BDFDB . dotCN . tabbarheaderitem ) . forEach ( ele => {
setTabitem ( ele , ele . parentElement . querySelector ( BDFDB . dotCNC . tabbaritem + BDFDB . dotCN . tabbarheaderitem ) == ele ? 2 : 0 ) ;
addInitEventListener ( ele , "click" , e => {
BDFDB . removeClass ( container . querySelectorAll ( BDFDB . dotCN . modaltabcontent + BDFDB . dotCN . modaltabcontentopen ) , BDFDB . disCN . modaltabcontentopen ) ;
ele . parentElement . querySelectorAll ( BDFDB . dotCNC . tabbaritem + BDFDB . dotCN . tabbarheaderitem ) . forEach ( ele => { setTabitem ( ele , 0 ) ; } ) ;
var tab = container . querySelector ( ` ${ BDFDB . dotCN . modaltabcontent } [tab=" ${ ele . getAttribute ( "tab" ) } "] ` ) ;
if ( tab ) BDFDB . addClass ( tab , BDFDB . disCN . modaltabcontentopen ) ;
setTabitem ( ele , 2 ) ;
} ) ;
addInitEventListener ( ele , "mouseenter" , e => {
if ( ! BDFDB . containsClass ( ele , BDFDB . disCN . settingsitemselected ) ) setTabitem ( ele , 1 ) ;
} ) ;
addInitEventListener ( ele , "mouseleave" , e => {
if ( ! BDFDB . containsClass ( ele , BDFDB . disCN . settingsitemselected ) ) setTabitem ( ele , 0 ) ;
} ) ;
} ) ;
container . querySelectorAll ( ".BDFDB-contextMenuItem " + BDFDB . dotCN . contextmenulabel ) . forEach ( ele => {
BDFDB . addClass ( ele , "BDFDB-textscrollwrapper" ) ;
ele . setAttribute ( "speed" , 3 ) ;
ele . innerHTML = ` <div class="BDFDB-textscroll"> ${ BDFDB . encodeToHTML ( ele . innerText ) } </div> ` ;
} ) ;
container . querySelectorAll ( ".BDFDB-contextMenuItemHint, .BDFDB-contextMenuItem " + BDFDB . dotCN . contextmenuhint ) . forEach ( ele => {
if ( ele . innerText ) {
ele . innerHTML = ` <div class="BDFDB-textscrollwrapper" speed=3><div class="BDFDB-textscroll"> ${ BDFDB . encodeToHTML ( ele . innerText ) } </div></div> ` ;
ele . style . setProperty ( "top" , getComputedStyle ( ele . parentElement ) . paddingTop , "important" ) ;
ele . style . setProperty ( "right" , getComputedStyle ( ele . parentElement ) . paddingRight , "important" ) ;
ele . style . setProperty ( "width" , "42px" , "important" ) ;
ele . style . setProperty ( "max-width" , "42px" , "important" ) ;
ele . style . setProperty ( "margin-left" , "8px" , "important" ) ;
}
} ) ;
container . querySelectorAll ( ".BDFDB-textscrollwrapper" ) . forEach ( ele => {
var inner = ele . querySelector ( ".BDFDB-textscroll" ) ;
if ( inner ) {
if ( BDFDB . containsClass ( ele . parentElement , BDFDB . disCN . contextmenuitemsubmenu ) ) ele . style . setProperty ( "margin-right" , "10px" ) ;
if ( BDFDB . getRects ( ele ) . width > 100 ) ele . style . setProperty ( "text-overflow" , "ellipsis" , "important" ) ;
ele . style . setProperty ( "position" , "relative" , "important" ) ;
ele . style . setProperty ( "display" , "block" , "important" ) ;
ele . style . setProperty ( "overflow" , "hidden" , "important" ) ;
inner . style . setProperty ( "left" , "0px" , "important" ) ;
inner . style . setProperty ( "position" , "relative" , "important" ) ;
inner . style . setProperty ( "white-space" , "nowrap" , "important" ) ;
inner . style . setProperty ( "display" , "inline" , "important" ) ;
var animate , Animation ;
addInitEventListener ( ele , "mouseenter" , e => {
if ( BDFDB . getRects ( ele ) . width < BDFDB . getRects ( inner ) . width ) {
BDFDB . addClass ( ele , "scrolling" ) ;
if ( ! Animation || ! animate ) initAnimation ( ) ;
animate ( 1 ) ;
inner . style . setProperty ( "display" , "block" , "important" ) ;
}
} ) ;
addInitEventListener ( ele , "mouseleave" , e => {
if ( BDFDB . containsClass ( ele , "scrolling" ) ) {
BDFDB . removeClass ( ele , "scrolling" ) ;
inner . style . setProperty ( "display" , "inline" , "important" ) ;
if ( ! Animation || ! animate ) initAnimation ( ) ;
animate ( 0 ) ;
}
} ) ;
function initAnimation ( ) {
Animation = new LibraryModules . AnimationUtils . Value ( 0 ) ;
Animation
. interpolate ( { inputRange : [ 0 , 1 ] , outputRange : [ 0 , ( BDFDB . getRects ( inner ) . width - BDFDB . getRects ( ele ) . width ) * - 1 ] } )
. addListener ( v => { inner . style . setProperty ( "left" , v . value + "px" , "important" ) ; } ) ;
animate = p => {
var w = p + parseFloat ( inner . style . getPropertyValue ( "left" ) ) / ( BDFDB . getRects ( inner ) . width - BDFDB . getRects ( ele ) . width ) ;
w = isNaN ( w ) || ! isFinite ( w ) ? p : w ;
w *= BDFDB . getRects ( inner ) . width / ( BDFDB . getRects ( ele ) . width * 2 ) ;
LibraryModules . AnimationUtils . parallel ( [ LibraryModules . AnimationUtils . timing ( Animation , { toValue : p , duration : Math . sqrt ( w * * 2 ) * 4000 / ( ele . getAttribute ( "speed" ) || 1 ) } ) ] ) . start ( ) ;
} ;
}
}
} ) ;
BDFDB . removeClass ( container . querySelectorAll ( BDFDB . dotCN . modaltabcontent ) , BDFDB . disCN . modaltabcontentopen ) ;
BDFDB . addClass ( container . querySelector ( BDFDB . dotCN . modaltabcontent ) , BDFDB . disCN . modaltabcontentopen ) ;
container . querySelectorAll ( ".btn-add " + BDFDB . dotCN . buttoncontents ) . forEach ( ele => { ele . innerText = BDFDB . LanguageStrings . ADD ; } ) ;
container . querySelectorAll ( ".btn-all " + BDFDB . dotCN . buttoncontents ) . forEach ( ele => { ele . innerText = languagestrings . btn _all _text ; } ) ;
container . querySelectorAll ( ".btn-cancel " + BDFDB . dotCN . buttoncontents ) . forEach ( ele => { ele . innerText = BDFDB . LanguageStrings . CANCEL ; } ) ;
container . querySelectorAll ( ".btn-done " + BDFDB . dotCN . buttoncontents ) . forEach ( ele => { ele . innerText = BDFDB . LanguageStrings . DONE ; } ) ;
container . querySelectorAll ( ".btn-download " + BDFDB . dotCN . buttoncontents ) . forEach ( ele => { ele . innerText = BDFDB . LanguageStrings . DOWNLOAD ; } ) ;
container . querySelectorAll ( ".btn-ok " + BDFDB . dotCN . buttoncontents ) . forEach ( ele => { ele . innerText = BDFDB . LanguageStrings . OKAY ; } ) ;
container . querySelectorAll ( ".btn-save " + BDFDB . dotCN . buttoncontents ) . forEach ( ele => { ele . innerText = BDFDB . LanguageStrings . SAVE ; } ) ;
container . querySelectorAll ( ".btn-send " + BDFDB . dotCN . buttoncontents ) . forEach ( ele => { ele . innerText = BDFDB . LanguageStrings . SEND ; } ) ;
container . querySelectorAll ( ".file-navigator " + BDFDB . dotCN . buttoncontents ) . forEach ( ele => { ele . innerText = languagestrings . file _navigator _text ; } ) ;
if ( islighttheme ) {
BDFDB . replaceClass ( container . querySelectorAll ( BDFDB . dotCN . selectcontroldark ) , BDFDB . disCN . selectcontroldark , BDFDB . disCN . selectcontrollight ) ;
BDFDB . replaceClass ( container . querySelectorAll ( BDFDB . dotCN . selectsingledark ) , BDFDB . disCN . selectsingledark , BDFDB . disCN . selectsinglelight ) ;
BDFDB . replaceClass ( container . querySelectorAll ( BDFDB . dotCN . selectarrowcontainerdark ) , BDFDB . disCN . selectarrowcontainerdark , BDFDB . disCN . selectarrowcontainerlight ) ;
}
else {
BDFDB . replaceClass ( container . querySelectorAll ( BDFDB . dotCN . selectcontrollight ) , BDFDB . disCN . selectcontrollight , BDFDB . disCN . selectcontroldark ) ;
BDFDB . replaceClass ( container . querySelectorAll ( BDFDB . dotCN . selectsinglelight ) , BDFDB . disCN . selectsinglelight , BDFDB . disCN . selectsingledark ) ;
BDFDB . replaceClass ( container . querySelectorAll ( BDFDB . dotCN . selectarrowcontainerlight ) , BDFDB . disCN . selectarrowcontainerlight , BDFDB . disCN . selectarrowcontainerdark ) ;
}
var executeDelayedIfNotAppened = ( ) => {
container . querySelectorAll ( ".BDFDB-tableheader" ) . forEach ( ele => {
var panel = BDFDB . getParentEle ( ".BDFDB-modal, .BDFDB-settings" , ele ) ;
var tableid = ele . getAttribute ( "table-id" ) ;
var text = ele . querySelector ( ".BDFDB-tableheadertext" ) ;
var columns = ele . querySelectorAll ( ".BDFDB-tableheadercolumns .BDFDB-tableheadercolumn" ) ;
if ( panel && tableid && text && columns . length ) {
let toobig = false , maxwidth = BDFDB . ObjectUtils . is ( panel [ "BDFDB-tableheader-maxwidth" ] ) ? panel [ "BDFDB-tableheader-maxwidth" ] [ tableid ] : 0 ;
if ( ! maxwidth ) {
for ( let column of columns ) {
let width = BDFDB . getRects ( column ) . width ;
maxwidth = width > maxwidth ? width : maxwidth ;
}
maxwidth += 4 ;
}
if ( columns . length * maxwidth > 300 ) {
toobig = true ;
maxwidth = parseInt ( 290 / columns . length ) ;
}
else if ( maxwidth < 36 ) {
maxwidth = 36 ;
}
columns . forEach ( ( column , i ) => {
column . style . setProperty ( "flex" , ` 0 0 ${ maxwidth } px ` , "important" ) ;
if ( toobig ) {
if ( i == 0 ) column . style . setProperty ( "margin-left" , ` ${ - 1 * ( 10 + maxwidth / 2 ) } px ` , "important" ) ;
column . style . setProperty ( "margin-top" , "0" , "important" ) ;
column . style . setProperty ( "text-align" , "right" , "important" ) ;
column . style . setProperty ( "writing-mode" , "vertical-rl" , "important" ) ;
}
else column . style . setProperty ( "text-align" , "center" , "important" ) ;
} ) ;
text . style . setProperty ( "flex" , ` 0 0 ${ 556 - ( columns . length * maxwidth ) } px ` , "important" ) ;
columns [ 0 ] . parentElement . style . setProperty ( "flex" , ` 0 0 ${ columns . length * maxwidth } px ` , "important" ) ;
if ( ! BDFDB . ObjectUtils . is ( panel [ "BDFDB-tableheader-maxwidth" ] ) ) panel [ "BDFDB-tableheader-maxwidth" ] = { }
panel [ "BDFDB-tableheader-maxwidth" ] [ tableid ] = maxwidth ;
}
} ) ;
container . querySelectorAll ( ".BDFDB-tablecheckbox" ) . forEach ( ele => {
var panel = BDFDB . getParentEle ( ".BDFDB-modal, .BDFDB-settings" , ele ) ;
var tableid = ele . getAttribute ( "table-id" ) ;
if ( panel && tableid && BDFDB . ObjectUtils . is ( panel [ "BDFDB-tableheader-maxwidth" ] ) && panel [ "BDFDB-tableheader-maxwidth" ] [ tableid ] ) {
var style = getComputedStyle ( ele ) ;
ele . style . setProperty ( "flex" , ` 0 0 ${ panel [ "BDFDB-tableheader-maxwidth" ] [ tableid ] - parseInt ( style . marginLeft ) - parseInt ( style . marginRight ) } px ` , "important" ) ;
}
} ) ;
} ;
if ( document . contains ( container ) ) executeDelayedIfNotAppened ( ) ;
else setImmediate ( ( ) => { executeDelayedIfNotAppened ( ) ; } ) ;
function setSwitch ( switchitem , triggered ) {
if ( ! switchitem ) return ;
var checked = switchitem . checked ;
BDFDB . toggleClass ( switchitem . parentElement , BDFDB . disCN . switchvaluechecked , checked ) ;
BDFDB . toggleClass ( switchitem . parentElement , BDFDB . disCN . switchvalueunchecked , ! checked ) ;
if ( triggered && BDFDB . ObjectUtils . is ( plugin ) && BDFDB . containsClass ( switchitem , "settings-switch" ) ) {
let keys = switchitem . getAttribute ( "value" ) . trim ( ) . split ( " " ) . filter ( n => n ) ;
let option = keys . shift ( ) ;
if ( option ) {
var data = BDFDB . loadAllData ( plugin , option ) ;
var newdata = "" ;
for ( let key of keys ) newdata += ` {" ${ key } ": ` ;
newdata += checked + "}" . repeat ( keys . length ) ;
newdata = JSON . parse ( newdata ) ;
if ( BDFDB . ObjectUtils . is ( newdata ) ) BDFDB . ObjectUtils . deepAssign ( data , newdata ) ;
else data = newdata ;
BDFDB . saveAllData ( data , plugin , option ) ;
plugin . SettingsUpdated = true ;
}
}
} ;
function setCheckbox ( checkbox ) {
if ( ! checkbox ) return ;
var checkboxstyle = checkbox . parentElement . querySelector ( BDFDB . dotCN . checkbox ) ;
var checkboxstyleinner = checkboxstyle . querySelector ( "polyline" ) ;
if ( checkbox . checked ) {
BDFDB . addClass ( checkboxstyle , BDFDB . disCN . checkboxchecked ) ;
checkboxstyle . style . setProperty ( "background-color" , "rgb(67, 181, 129)" ) ;
checkboxstyle . style . setProperty ( "border-color" , "rgb(67, 181, 129)" ) ;
if ( checkboxstyleinner ) checkboxstyleinner . setAttribute ( "stroke" , "#ffffff" ) ;
}
else {
BDFDB . removeClass ( checkboxstyle , BDFDB . disCN . checkboxchecked ) ;
checkboxstyle . style . removeProperty ( "background-color" ) ;
checkboxstyle . style . removeProperty ( "border-color" ) ;
if ( checkboxstyleinner ) checkboxstyleinner . setAttribute ( "stroke" , "transparent" ) ;
}
} ;
function setGifFavButton ( button ) {
var selected = BDFDB . containsClass ( button , BDFDB . disCN . giffavoriteselected ) ;
var icon = button . querySelector ( BDFDB . dotCN . giffavoriteicon ) ;
if ( icon ) {
icon . setAttribute ( "name" , selected ? "FavoriteFilled" : "Favorite" ) ;
icon . innerHTML = selected ? ` <path d="M0,0H24V24H0Z" fill="none"></path><path fill="currentColor" d="M12.5,17.6l3.6,2.2a1,1,0,0,0,1.5-1.1l-1-4.1a1,1,0,0,1,.3-1l3.2-2.8A1,1,0,0,0,19.5,9l-4.2-.4a.87.87,0,0,1-.8-.6L12.9,4.1a1.05,1.05,0,0,0-1.9,0l-1.6,4a1,1,0,0,1-.8.6L4.4,9a1.06,1.06,0,0,0-.6,1.8L7,13.6a.91.91,0,0,1,.3,1l-1,4.1a1,1,0,0,0,1.5,1.1l3.6-2.2A1.08,1.08,0,0,1,12.5,17.6Z"></path> ` : ` <path fill="currentColor" d="M19.6,9l-4.2-0.4c-0.4,0-0.7-0.3-0.8-0.6l-1.6-3.9c-0.3-0.8-1.5-0.8-1.8,0L9.4,8.1C9.3,8.4,9,8.6,8.6,8.7L4.4,9c-0.9,0.1-1.2,1.2-0.6,1.8L7,13.6c0.3,0.2,0.4,0.6,0.3,1l-1,4.1c-0.2,0.9,0.7,1.5,1.5,1.1l3.6-2.2c0.3-0.2,0.7-0.2,1,0l3.6,2.2c0.8,0.5,1.7-0.2,1.5-1.1l-1-4.1c-0.1-0.4,0-0.7,0.3-1l3.2-2.8C20.9,10.2,20.5,9.1,19.6,9zM12,15.4l-3.8,2.3l1-4.3l-3.3-2.9l4.4-0.4l1.7-4l1.7,4l4.4,0.4l-3.3,2.9l1,4.3L12,15.4z"></path> ` ;
}
if ( selected ) {
BDFDB . addClass ( button , BDFDB . disCN . giffavoriteshowpulse ) ;
setTimeout ( ( ) => { BDFDB . removeClass ( button , BDFDB . disCN . giffavoriteshowpulse ) ; } , 500 ) ;
}
} ;
function setTabitem ( item , state ) {
if ( ! item ) return ;
switch ( state ) {
case 0 :
BDFDB . removeClass ( item , BDFDB . disCN . settingsitemselected ) ;
item . style . setProperty ( "border-color" , "transparent" ) ;
item . style . setProperty ( "color" , islighttheme ? "rgba(79, 84, 92, 0.4)" : "rgba(255, 255, 255, 0.4)" ) ;
break ;
case 1 :
BDFDB . removeClass ( item , BDFDB . disCN . settingsitemselected ) ;
item . style . setProperty ( "border-color" , islighttheme ? "rgba(79, 84, 92, 0.6)" : "rgba(255, 255, 255, 0.6)" ) ;
item . style . setProperty ( "color" , islighttheme ? "rgba(79, 84, 92, 0.6)" : "rgba(255, 255, 255, 0.6)" ) ;
break ;
case 2 :
BDFDB . addClass ( item , BDFDB . disCN . settingsitemselected ) ;
item . style . setProperty ( "border-color" , islighttheme ? "rgb(79, 84, 92)" : "rgb(255, 255, 255)" ) ;
item . style . setProperty ( "color" , islighttheme ? "rgb(79, 84, 92)" : "rgb(255, 255, 255)" ) ;
break ;
}
} ;
function addInitEventListener ( ele , action , callback ) {
if ( ! ele . BDFDBupdateElementsListeners ) ele . BDFDBupdateElementsListeners = { } ;
if ( ele . BDFDBupdateElementsListeners [ action ] ) ele . removeEventListener ( action , ele . BDFDBupdateElementsListeners [ action ] ) ;
ele . BDFDBupdateElementsListeners [ action ] = callback ;
ele . addEventListener ( action , callback , true ) ;
} ;
} ;
BDFDB . appendModal = function ( modalwrapper ) {
if ( ! Node . prototype . isPrototypeOf ( modalwrapper ) ) return ;
if ( ! BDFDB . appendModal . modals || ! document . contains ( BDFDB . appendModal . modals ) ) BDFDB . appendModal . modals = BDFDB . React . findDOMNode ( BDFDB . getOwnerInstance ( { node : document . querySelector ( BDFDB . dotCN . app ) , name : "Modals" , depth : 99999999 , time : 99999999 } ) ) ;
if ( ! BDFDB . appendModal . modals ) return ;
var modal = BDFDB . containsClass ( modalwrapper , BDFDB . disCN . modal ) ? modalwrapper : modalwrapper . querySelector ( BDFDB . dotCN . modal ) ;
var backdrop = modal ? modal . previousElementSibling : null ;
var modalOpacity = new LibraryModules . AnimationUtils . Value ( 0 ) ;
modalOpacity
. interpolate ( { inputRange : [ 0 , 1 ] , outputRange : [ 0 , 1 ] } )
. addListener ( ( value ) => { if ( modal ) modal . style . setProperty ( "opacity" , ` ${ value . value } ` ) ; } ) ;
var modalTransform = new LibraryModules . AnimationUtils . Value ( 0 ) ;
modalTransform
. interpolate ( { inputRange : [ 0 , 1 ] , outputRange : [ 0.7 , 1 ] } )
. addListener ( ( value ) => { if ( modal ) modal . style . setProperty ( "transform" , ` scale( ${ value . value } ) translateZ(0px) ` ) ; } ) ;
var backdropOpacity = new LibraryModules . AnimationUtils . Value ( 0 ) ;
backdropOpacity
. interpolate ( { inputRange : [ 0 , 1 ] , outputRange : [ 0 , 0.85 ] } )
. addListener ( ( value ) => { if ( backdrop ) {
backdrop . style . setProperty ( "opacity" , ` ${ value . value } ` ) ;
backdrop . style . setProperty ( "background-color" , "rgb(0, 0, 0)" ) ;
backdrop . style . setProperty ( "z-index" , "1000" ) ;
backdrop . style . setProperty ( "transform" , "translateZ(0px)" ) ;
} } ) ;
var animate = ( v ) => {
LibraryModules . AnimationUtils . parallel ( [
LibraryModules . AnimationUtils . timing ( modalOpacity , { toValue : v , duration : 250 , easing : LibraryModules . AnimationUtils . Easing . inOut ( LibraryModules . AnimationUtils . Easing . ease ) } ) ,
LibraryModules . AnimationUtils . timing ( modalTransform , { toValue : v , duration : 250 , easing : LibraryModules . AnimationUtils . Easing . inOut ( LibraryModules . AnimationUtils . Easing . ease ) } ) ,
LibraryModules . AnimationUtils . timing ( backdropOpacity , { toValue : v , duration : 200 , delay : 50 } ) ,
] ) . start ( ) ;
} ;
var keydown = e => {
if ( ! document . contains ( modalwrapper ) ) document . removeEventListener ( "keydown" , keydown ) ;
else if ( e . which == 27 && backdrop ) backdrop . click ( ) ;
} ;
document . addEventListener ( "keydown" , keydown ) ;
BDFDB . ListenerUtils . addToChildren ( modalwrapper , "click" , BDFDB . dotCNC . backdrop + BDFDB . dotCNC . modalclose + ".btn-close, .btn-save, .btn-send, .btn-cancel, .btn-ok, .btn-done" , ( ) => {
document . removeEventListener ( "keydown" , keydown ) ;
animate ( 0 ) ;
setTimeout ( ( ) => { modalwrapper . remove ( ) ; } , 300 ) ;
} ) ;
BDFDB . appendModal . modals . appendChild ( modalwrapper ) ;
BDFDB . initElements ( modalwrapper ) ;
animate ( 1 ) ;
} ;
BDFDB . createSearchBar = function ( size = "small" ) {
if ( typeof size != "string" || ! [ "small" , "medium" , "large" ] . includes ( size . toLowerCase ( ) ) ) size = "small" ;
var sizeclass = DiscordClassModules . SearchBar [ size ] ? ( " " + BDFDB . disCN [ "searchbar" + size ] ) : "" ;
var searchBar = BDFDB . htmlToElement ( ` <div class=" ${ BDFDB . disCNS . flex + BDFDB . disCNS . horizontal + BDFDB . disCNS . horizontal + BDFDB . disCNS . justifystart + BDFDB . disCNS . alignstretch + BDFDB . disCNS . nowrap + BDFDB . disCN . searchbar + sizeclass } " style="flex: 1 1 auto;"><div class=" ${ BDFDB . disCN . searchbarinner } "><input class=" ${ BDFDB . disCN . searchbarinput } " type="text" spellcheck="false" placeholder="" value=""><div tabindex="0" class=" ${ BDFDB . disCN . searchbariconlayout + sizeclass } " role="button"><div class=" ${ BDFDB . disCN . searchbariconwrap } "><svg name="Search" class=" ${ BDFDB . disCNS . searchbaricon + BDFDB . disCN . searchbarvisible } " width="18" height="18" viewBox="0 0 18 18"><g fill="none" fill-rule="evenodd"><path fill="currentColor" d="M3.60091481,7.20297313 C3.60091481,5.20983419 5.20983419,3.60091481 7.20297313,3.60091481 C9.19611206,3.60091481 10.8050314,5.20983419 10.8050314,7.20297313 C10.8050314,9.19611206 9.19611206,10.8050314 7.20297313,10.8050314 C5.20983419,10.8050314 3.60091481,9.19611206 3.60091481,7.20297313 Z M12.0057176,10.8050314 L11.3733562,10.8050314 L11.1492281,10.5889079 C11.9336764,9.67638651 12.4059463,8.49170955 12.4059463,7.20297313 C12.4059463,4.32933105 10.0766152,2 7.20297313,2 C4.32933105,2 2,4.32933105 2,7.20297313 C2,10.0766152 4.32933105,12.4059463 7.20297313,12.4059463 C8.49170955,12.4059463 9.67638651,11.9336764 10.5889079,11.1492281 L10.8050314,11.3733562 L10.8050314,12.0057176 L14.8073185,16 L16,14.8073185 L12.2102538,11.0099776 L12.0057176,10.8050314 Z"></path></g></svg><svg name="Clear" class=" ${ BDFDB . disCNS . searchbaricon + BDFDB . disCN . searchbarclear } " width="12" height="12" viewBox="0 0 12 12"><g fill="none" fill-rule="evenodd"><path d="M0 0h12v12H0"></path><path class="fill" fill="currentColor" d="M9.5 3.205L8.795 2.5 6 5.295 3.205 2.5l-.705.705L5.295 6 2.5 8.795l.705.705L6 6.705 8.795 9.5l.705-.705L6.705 6"></path></g></svg></div></div></div></div> ` ) ;
BDFDB . initElements ( searchBar ) ;
return searchBar ;
} ;
BDFDB . createSelectMenu = function ( inner , value , type = "" , dark = BDFDB . DiscordUtils . getTheme ( ) == BDFDB . disCN . themedark ) {
if ( typeof inner != "string" || ( typeof value != "string" && typeof value != "number" ) ) return BDFDB . htmlToElement ( ` <div></div> ` ) ;
var suffix = dark ? "dark" : "light" ;
return ` <div class=" ${ BDFDB . disCN . selectwrap } BDFDB-select" style="flex: 1 1 auto;"><div class=" ${ BDFDB . disCN . select } " type=" ${ type } " value=" ${ value } "><div class=" ${ BDFDB . disCNS . selectcontrol + BDFDB . disCN [ "selectcontrol" + suffix ] } "><div class=" ${ BDFDB . disCN . selectvalue } "><div class=" ${ BDFDB . disCNS . flex + BDFDB . disCNS . horizontal + BDFDB . disCNS . justifystart + BDFDB . disCNS . alignbaseline + BDFDB . disCNS . nowrap + BDFDB . disCNS . selectsingle + BDFDB . disCN [ "selectsingle" + suffix ] } "> ${ inner } </div><input readonly="" tabindex="0" class=" ${ BDFDB . disCN . selectdummyinput } " value=""></div><div class=" ${ BDFDB . disCN . selectarrowzone } "><div aria-hidden="true" class=" ${ BDFDB . disCNS . selectarrowcontainer + BDFDB . disCN [ "selectarrowcontainer" + suffix ] } "><svg height="20" width="20" viewBox="0 0 20 20" aria-hidden="true" focusable="false" class=" ${ BDFDB . disCN . selectarrow } "><path d="M4.516 7.548c0.436-0.446 1.043-0.481 1.576 0l3.908 3.747 3.908-3.747c0.533-0.481 1.141-0.446 1.574 0 0.436 0.445 0.408 1.197 0 1.615-0.406 0.418-4.695 4.502-4.695 4.502-0.217 0.223-0.502 0.335-0.787 0.335s-0.57-0.112-0.789-0.335c0 0-4.287-4.084-4.695-4.502s-0.436-1.17 0-1.615z"></path></svg></div></div></div></div></div> ` ;
} ;
BDFDB . openDropdownMenu = function ( e , callback , createinner , values , above = false , dark = BDFDB . DiscordUtils . getTheme ( ) == BDFDB . disCN . themedark ) {
if ( typeof callback != "function" || typeof createinner != "function" || ! values || typeof values != "object" ) return ;
let selectControl = ( BDFDB . getParentEle ( BDFDB . dotCN . selectwrap , e . currentTarget ) || e . currentTarget ) . querySelector ( BDFDB . dotCN . selectcontrol ) ;
let selectWrap = selectControl . parentElement ;
if ( BDFDB . containsClass ( selectWrap , BDFDB . disCN . selectisopen ) ) return ;
BDFDB . addClass ( selectWrap , BDFDB . disCN . selectisopen ) ;
var type = selectWrap . getAttribute ( "type" ) ;
var oldchoice = selectWrap . getAttribute ( "value" ) ;
var suffix = dark ? "dark" : "light" ;
var menuhtml = ` <div class=" ${ BDFDB . disCNS . selectmenuouter + BDFDB . disCN [ "selectmenuouter" + suffix ] } "><div class=" ${ BDFDB . disCN . selectmenu } "> ` ;
for ( var key in values ) menuhtml += ` <div value=" ${ key } " class=" ${ BDFDB . disCNS . selectoption + ( key == oldchoice ? BDFDB . disCN [ "selectoptionselect" + suffix ] : BDFDB . disCN [ "selectoption" + suffix ] ) } " style="flex: 1 1 auto; display: flex;"> ${ createinner ( key ) } </div> ` ;
menuhtml += ` </div></div> ` ;
var selectMenu = BDFDB . htmlToElement ( menuhtml ) ;
if ( above ) {
BDFDB . addClass ( selectMenu , "above-select" ) ;
selectMenu . style . setProperty ( "top" , "unset" , "important" ) ;
selectMenu . style . setProperty ( "bottom" , BDFDB . getRects ( selectWrap ) . height + "px" , "important" ) ;
}
selectWrap . appendChild ( selectMenu ) ;
BDFDB . initElements ( selectMenu ) ;
BDFDB . ListenerUtils . addToChildren ( selectMenu , "mouseenter" , BDFDB . dotCN . selectoption + BDFDB . notCN . selectoptionselectlight + BDFDB . notCN . selectoptionselectdark , e2 => {
if ( dark ) {
BDFDB . removeClass ( e2 . currentTarget , BDFDB . disCN . selectoptiondark ) ;
BDFDB . addClass ( e2 . currentTarget , BDFDB . disCN . selectoptionhoverdark ) ;
}
else {
BDFDB . removeClass ( e2 . currentTarget , BDFDB . disCN . selectoptionlight ) ;
BDFDB . addClass ( e2 . currentTarget , BDFDB . disCN . selectoptionhoverlight ) ;
}
} ) ;
BDFDB . ListenerUtils . addToChildren ( selectMenu , "mouseleave" , BDFDB . dotCN . selectoption + BDFDB . notCN . selectoptionselectlight + BDFDB . notCN . selectoptionselectdark , e2 => {
if ( dark ) {
BDFDB . removeClass ( e2 . currentTarget , BDFDB . disCN . selectoptionhoverdark ) ;
BDFDB . addClass ( e2 . currentTarget , BDFDB . disCN . selectoptiondark ) ;
}
else {
BDFDB . removeClass ( e2 . currentTarget , BDFDB . disCN . selectoptionhoverlight ) ;
BDFDB . addClass ( e2 . currentTarget , BDFDB . disCN . selectoptionlight ) ;
}
} ) ;
BDFDB . ListenerUtils . addToChildren ( selectMenu , "mousedown" , BDFDB . dotCN . selectoption , e2 => {
if ( ! BDFDB . getParentEle ( BDFDB . dotCN . giffavoritebutton , e2 . target ) ) {
var newchoice = e2 . currentTarget . getAttribute ( "value" ) ;
selectWrap . setAttribute ( "value" , newchoice ) ;
callback ( selectWrap , type , newchoice ) ;
}
} ) ;
var removeMenu = e2 => {
if ( e2 . target . parentElement != selectMenu && ! BDFDB . getParentEle ( BDFDB . dotCN . giffavoritebutton , e2 . target ) ) {
document . removeEventListener ( "mousedown" , removeMenu ) ;
selectMenu . remove ( ) ;
setTimeout ( ( ) => { BDFDB . removeClass ( selectWrap , BDFDB . disCN . selectisopen ) ; } , 100 ) ;
}
} ;
document . addEventListener ( "mousedown" , removeMenu ) ;
return selectMenu ;
} ;
BDFDB . openModal = function ( plugin , config ) {
if ( ! BDFDB . ObjectUtils . is ( plugin ) || ! BDFDB . ObjectUtils . is ( config ) ) return ;
var modal , headerchildren = [ ] , contentchildren = [ ] , footerchildren = [ ] , modalprops , cancels = [ ] , closeModal = _ => {
if ( BDFDB . ObjectUtils . is ( modalprops ) && typeof modalprops . onClose == "function" ) modalprops . onClose ( ) ;
} ;
if ( typeof config . text == "string" ) {
contentchildren . push ( BDFDB . React . createElement ( LibraryComponents . TextElement , {
color : LibraryComponents . TextElement . Colors . PRIMARY ,
children : [ config . text ]
} ) ) ;
}
if ( config . children ) {
let selectedtab , tabs = [ ] ;
for ( let child of ( Array . isArray ( config . children ) ? config . children : Array . of ( config . children ) ) ) if ( LibraryModules . React . isValidElement ( child ) ) {
if ( child . type == LibraryComponents . ModalTabContent ) {
if ( ! tabs . length ) child . props . open = true ;
else delete child . props . open ;
tabs . push ( BDFDB . React . createElement ( LibraryComponents . TabBar . Item , {
className : BDFDB . disCN . tabbaritem ,
itemType : LibraryComponents . TabBar . Types . TOP ,
id : child . props . tab ,
children : child . props . tab ,
"aria-label" : child . props . tab
} ) ) ;
}
contentchildren . push ( child ) ;
}
if ( tabs . length ) headerchildren . push ( BDFDB . React . createElement ( LibraryComponents . Flex , {
className : BDFDB . disCN . tabbarcontainer ,
children : BDFDB . React . createElement ( LibraryComponents . TabBar , {
className : BDFDB . disCN . tabbar ,
type : LibraryComponents . TabBar . Types . TOP ,
selectedItem : tabs [ 0 ] . props . id ,
children : tabs ,
onItemSelect : ( value , instance ) => {
instance . props . selectedItem = value ;
instance . forceUpdate ( ) ;
let modal = BDFDB . getParentEle ( ".BDFDB-modal" , BDFDB . React . findDOMNode ( instance ) ) ;
if ( modal ) for ( let tabcontent of modal . querySelectorAll ( BDFDB . dotCN . modaltabcontent ) ) {
let tabcontentinstance = BDFDB . getReactValue ( tabcontent , "return.return.stateNode" ) ;
if ( tabcontentinstance ) {
if ( tabcontentinstance . props . tab == value ) tabcontentinstance . props . open = true ;
else delete tabcontentinstance . props . open ;
tabcontentinstance . forceUpdate ( ) ;
}
}
}
} ) ,
style : { marginBottom : 10 }
} ) ) ;
}
if ( Array . isArray ( config . buttons ) ) for ( let button of config . buttons ) {
let contents = typeof button . contents == "string" ? button . contents : null ;
if ( contents ) {
let color = typeof button . color == "string" && LibraryComponents . Button . Colors [ button . color . toUpperCase ( ) ] ;
let look = typeof button . look == "string" && LibraryComponents . Button . Looks [ button . look . toUpperCase ( ) ] ;
let click = typeof button . click == "function" ? button . click : _ => { } ;
if ( button . cancel ) cancels . push ( click ) ;
footerchildren . push ( BDFDB . React . createElement ( LibraryComponents . Button , {
type : "button" ,
look : look || ( color ? LibraryComponents . Button . Looks . FILLED : LibraryComponents . Button . Looks . LINK ) ,
color : color || LibraryComponents . Button . Colors . PRIMARY ,
onClick : _ => {
if ( button . close ) closeModal ( ) ;
if ( ! ( button . close && button . cancel ) ) click ( modal ) ;
} ,
children : contents
} ) ) ;
}
}
contentchildren = contentchildren . filter ( n => n && BDFDB . React . isValidElement ( n ) ) ;
headerchildren = headerchildren . filter ( n => n && BDFDB . React . isValidElement ( n ) ) ;
footerchildren = footerchildren . filter ( n => n && BDFDB . React . isValidElement ( n ) ) ;
if ( contentchildren . length ) {
if ( typeof config . onClose != "function" ) config . onClose = _ => { } ;
if ( typeof config . onOpen != "function" ) config . onOpen = _ => { } ;
let name = plugin . name || ( typeof plugin . getName == "function" ? plugin . getName ( ) : null ) ;
name = typeof name == "string" ? name : null ;
let size = typeof config . size == "string" && LibraryComponents . ModalComponents . ModalSize [ config . size . toUpperCase ( ) ] ;
let oldTransitionState = 0 ;
LibraryModules . ModalUtils . openModal ( props => {
modalprops = props ;
return BDFDB . React . createElement ( class BDFDBModal extends LibraryModules . React . Component {
render ( ) {
return BDFDB . React . createElement ( LibraryComponents . ModalComponents . ModalRoot , {
className : [ ` BDFDB-modal ` , name ? ` ${ name } -modal ` : null , config . selector ? config . selector : null ] . filter ( n => n ) . join ( " " ) ,
size : size || LibraryComponents . ModalComponents . ModalSize . SMALL ,
transitionState : props . transitionState ,
children : [
BDFDB . React . createElement ( LibraryComponents . ModalComponents . ModalHeader , {
className : headerchildren . length ? BDFDB . disCN . modalheaderhassibling : null ,
separator : config . headerseparator || false ,
children : [
BDFDB . React . createElement ( LibraryComponents . Flex . Child , {
grow : 1 ,
shrink : 1 ,
children : [
BDFDB . React . createElement ( LibraryComponents . FormComponents . FormTitle , {
tag : LibraryComponents . FormComponents . FormTitle . Tags . H4 ,
children : typeof config . header == "string" ? config . header : ""
} ) ,
BDFDB . React . createElement ( LibraryComponents . TextElement , {
size : LibraryComponents . TextElement . Sizes . SMALL ,
color : LibraryComponents . TextElement . Colors . PRIMARY ,
children : typeof config . subheader == "string" ? config . subheader : ( name || "" )
} )
]
} ) ,
BDFDB . React . createElement ( LibraryComponents . ModalComponents . ModalCloseButton , {
onClick : closeModal
} )
]
} ) ,
headerchildren . length ? BDFDB . React . createElement ( LibraryComponents . Flex , {
children : headerchildren
} ) : null ,
BDFDB . React . createElement ( LibraryComponents . ModalComponents . ModalContent , {
children : contentchildren
} ) ,
footerchildren . length ? BDFDB . React . createElement ( LibraryComponents . ModalComponents . ModalFooter , {
children : footerchildren
} ) : null
]
} ) ;
}
componentDidMount ( ) {
modal = BDFDB . React . findDOMNode ( this ) ;
modal = modal && modal . parentElement ? modal . parentElement . querySelector ( ".BDFDB-modal" ) : null ;
if ( modal && props . transitionState == 2 && props . transitionState > oldTransitionState ) config . onOpen ( modal , this ) ;
oldTransitionState = props . transitionState ;
}
componentWillUnmount ( ) {
if ( modal && props . transitionState == 4 ) {
for ( let cancel of cancels ) cancel ( modal ) ;
config . onClose ( modal , this ) ;
}
}
} , props ) ;
} , {
onCloseRequest : closeModal
} ) ;
}
} ;
BDFDB . openConfirmModal = function ( plugin , text , callback ) {
if ( ! BDFDB . ObjectUtils . is ( plugin ) || typeof text != "string" ) return ;
callback = typeof callback == "function" ? callback : _ => { } ;
BDFDB . openModal ( plugin , { text , header : "Are you sure?" , selector : "BDFDB-confirmmodal" , buttons : [
{ contents : BDFDB . LanguageStrings . OKAY , close : true , color : "RED" , click : callback } ,
{ contents : BDFDB . LanguageStrings . CANCEL , close : true }
] } ) ;
} ;
BDFDB . updateContextPosition = function ( menu , e = BDFDB . mousePosition ) {
if ( ! Node . prototype . isPrototypeOf ( menu ) ) return ;
var itemlayer = BDFDB . getParentEle ( BDFDB . dotCN . itemlayer , menu ) || menu ;
var arects = BDFDB . getRects ( document . querySelector ( BDFDB . dotCN . appmount ) ) ;
var irects = BDFDB . getRects ( itemlayer ) ;
var newpos = {
pageX : e . pageX - irects . width ,
pageY : e . pageY - irects . height
} ;
itemlayer . style . setProperty ( "left" , ( e . pageX + irects . width > arects . width ? ( newpos . pageX < 0 ? 11 : newpos . pageX ) : e . pageX ) + "px" ) ;
itemlayer . style . setProperty ( "top" , ( e . pageY + irects . height > arects . height ? ( newpos . pageY < 0 ? 11 : newpos . pageY ) : e . pageY ) + "px" ) ;
BDFDB . initElements ( menu ) ;
} ;
BDFDB . getContextMenuGroupAndIndex = function ( startchildren , names ) {
names = Array . isArray ( names ) ? names : ( typeof names == "string" ? [ names ] : Array . from ( names ) ) ;
var startIsArray = Array . isArray ( startchildren ) ;
var parent = startchildren ;
return search ( startchildren ) ;
function search ( children ) {
while ( children && ! Array . isArray ( children ) && children . props && children . props . children ) {
parent = children ;
children = children . props . children ;
}
if ( children && ! Array . isArray ( children ) ) {
if ( parent && parent . props ) {
var child = children ;
parent . props . children = [ ] ;
parent . props . children . push ( child ) ;
return [ parent . props . children , check ( child ) ? 0 : - 1 ] ;
}
else return [ startchildren , - 1 ] ;
}
else {
if ( ! startIsArray ) {
startchildren = children ;
startIsArray = true ;
}
var result = [ startchildren , - 1 ] ;
for ( let i in children ) if ( children [ i ] ) {
if ( check ( children [ i ] ) ) result = [ children , i ] ;
else if ( children [ i ] . props ) {
parent = children [ i ] ;
result = search ( children [ i ] . props . children ) ;
}
if ( result [ 1 ] > - 1 ) break ;
}
return result ;
}
}
function check ( child ) {
var displayname = child . type ? child . type . displayName || child . type . name || "" : "" ;
var label = child . props ? child . props . label || "" : "" ;
return names . some ( name => displayname == name || label == name ) ;
}
} ;
BDFDB . openContextMenu = function ( plugin , e , children ) {
LibraryModules . ContextMenuUtils . openContextMenu ( e , function ( e ) {
return BDFDB . React . createElement ( LibraryComponents . ContextMenu , Object . assign ( { } , e , {
BDFDBcontextMenu : true ,
type : BDFDB . DiscordConstants . ContextMenuTypes . NATIVE _TEXT ,
value : "" ,
className : ` ${ BDFDB . disCN . contextmenu } BDFDB-contextMenu ${ plugin . name } -contextMenuItem ` ,
children
} ) ) ;
} ) ;
} ;
BDFDB . closeContextMenu = function ( nodeOrInstance ) {
if ( ! BDFDB . ObjectUtils . is ( nodeOrInstance ) ) return ;
var instance = Node . prototype . isPrototypeOf ( nodeOrInstance ) ? BDFDB . getOwnerInstance ( { node : nodeOrInstance , name : "ContextMenu" , up : true } ) : BDFDB . getOwnerInstance ( { instance : nodeOrInstance , name : "ContextMenu" , up : true } ) ;
if ( BDFDB . ObjectUtils . is ( instance ) && instance . props && typeof instance . props . closeContextMenu == "function" ) instance . props . closeContextMenu ( ) ;
} ;
BDFDB . createMessageOptionPopout = function ( button ) {
if ( ! button ) return ;
var popouts = document . querySelector ( BDFDB . dotCN . popouts ) ;
if ( ! popouts ) return ;
button = BDFDB . containsClass ( button , BDFDB . disCN . optionpopoutbutton ) ? button : button . querySelector ( BDFDB . dotCN . optionpopoutbutton ) ;
var containerins = BDFDB . getReactInstance ( BDFDB . getParentEle ( BDFDB . dotCN . messagebuttoncontainer , button ) ) ;
containerins = containerins && containerins . child ? containerins . child : null ;
containerins = containerins && containerins . stateNode && typeof containerins . stateNode . renderReactionPopout == "function" ? containerins . sibling : containerins ;
if ( containerins && containerins . stateNode && typeof containerins . stateNode . renderOptionPopout == "function" ) {
BDFDB . addClass ( button , "popout-open" ) ;
var popout = BDFDB . htmlToElement ( ` <div role="dialog" class=" ${ BDFDB . disCNS . popoutnoarrow + BDFDB . disCNS . popout + BDFDB . disCNS . popoutbottom + BDFDB . disCN . popoutarrowalignmenttop } " style="z-index:1001; visibility:visible; transform:translateX(-50%) translateY(0%) translateZ(0px);"></div> ` ) ;
popouts . appendChild ( popout ) ;
var popoutinstance = containerins . stateNode . renderOptionPopout ( containerins . stateNode . props ) ;
popoutinstance . props . target = button ;
popoutinstance . props . onClose = ( ) => {
BDFDB . removeClass ( button , "popout-open" ) ;
popout . remove ( ) ;
} ;
BDFDB . React . render ( popoutinstance , popout ) ;
var buttonrects = BDFDB . getRects ( button ) ;
popout . style . setProperty ( "left" , buttonrects . left + buttonrects . width / 2 + "px" ) ;
popout . style . setProperty ( "top" , buttonrects . top + buttonrects . height / 2 + "px" ) ;
var mousedown = e => {
document . removeEventListener ( "mousedown" , mousedown ) ;
if ( ! popout . contains ( e . target ) ) popoutinstance . props . onClose ( ) ;
} ;
document . addEventListener ( "mousedown" , mousedown ) ;
}
} ;
BDFDB . createSortPopout = function ( anker , markup , callback ) {
if ( ! anker || ! markup || typeof callback != "function" || BDFDB . containsClass ( anker , "popout-open" ) ) return ;
var popouts = document . querySelector ( BDFDB . dotCN . popouts ) ;
var valueinput = anker . querySelector ( BDFDB . dotCNC . quickselectvalue + BDFDB . dotCN . recentmentionsmentionfiltervalue ) ;
if ( ! popouts || ! valueinput ) return ;
BDFDB . addClass ( anker , "popout-open" ) ;
var popout = BDFDB . htmlToElement ( markup ) ;
var ankerrects = BDFDB . getRects ( anker ) ;
popout . style . setProperty ( "left" , ankerrects . left + ankerrects . width + "px" ) ;
popout . style . setProperty ( "top" , ankerrects . top + BDFDB . getRects ( valueinput ) . height + "px" ) ;
BDFDB . addClass ( popout . querySelector ( BDFDB . dotCN . contextmenu ) , BDFDB . DiscordUtils . getTheme ( ) ) ;
BDFDB . ListenerUtils . addToChildren ( popout , "click" , BDFDB . dotCN . contextmenuitem , e => {
valueinput . innerText = e . currentTarget . innerText ;
valueinput . setAttribute ( "option" , e . currentTarget . getAttribute ( "option" ) ) ;
document . removeEventListener ( "mousedown" , mousedown ) ;
popout . remove ( ) ;
setTimeout ( ( ) => { BDFDB . removeClass ( anker , "popout-open" ) ; } , 300 ) ;
callback ( ) ;
} ) ;
popouts . appendChild ( popout ) ;
BDFDB . initElements ( popout ) ;
var mousedown = e => {
if ( ! document . contains ( popout ) ) document . removeEventListener ( "mousedown" , mousedown ) ;
else if ( ! popout . contains ( e . target ) ) {
document . removeEventListener ( "mousedown" , mousedown ) ;
popout . remove ( ) ;
setTimeout ( ( ) => { BDFDB . removeClass ( anker , "popout-open" ) ; } , 300 ) ;
}
} ;
document . addEventListener ( "mousedown" , mousedown ) ;
} ;
// REMOVE ONCE REWRITTEN
var setSwatch = ( swatch , color , selected ) => {
if ( ! swatch ) return ;
else if ( selected ) {
BDFDB . addClass ( swatch , BDFDB . disCN . colorpickerswatchselected ) ;
var iscustom = BDFDB . containsClass ( swatch , BDFDB . disCN . colorpickerswatchcustom ) ;
var isgradient = color && BDFDB . ObjectUtils . is ( color ) ;
var selectedcolor = BDFDB . ObjectUtils . is ( color ) ? BDFDB . colorGRADIENT ( color ) : BDFDB . colorCONVERT ( color , "RGBA" ) ;
var bright = selectedcolor && ! isgradient ? BDFDB . colorISBRIGHT ( selectedcolor ) : false ;
if ( ! swatch . querySelector ( ` svg[name="Checkmark"] ` ) ) swatch . appendChild ( BDFDB . htmlToElement ( ` <svg class="swatch-checkmark" name="Checkmark" aria-hidden="false" width=" ${ iscustom ? 32 : 16 } " height=" ${ iscustom ? 24 : 16 } " viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><polyline stroke=" ${ bright ? "#000000" : "#ffffff" } " stroke-width="2" points="3.5 9.5 7 13 15 5"></polyline></g></svg> ` ) ) ;
if ( iscustom ) {
BDFDB . removeClass ( swatch , BDFDB . disCN . colorpickerswatchnocolor ) ;
swatch . querySelector ( BDFDB . dotCN . colorpickerswatchdropperfg ) . setAttribute ( "fill" , bright ? "#000000" : "#ffffff" ) ;
if ( selectedcolor ) {
if ( isgradient ) swatch . gradient = color ;
swatch . style . setProperty ( isgradient ? "background-image" : "background-color" , selectedcolor , "important" ) ;
}
}
}
else {
delete swatch . gradient ;
BDFDB . removeClass ( swatch , "selected" ) ;
BDFDB . removeEles ( swatch . querySelectorAll ( ".swatch-checkmark" ) ) ;
if ( BDFDB . containsClass ( swatch , BDFDB . disCN . colorpickerswatchcustom ) ) {
BDFDB . addClass ( swatch , BDFDB . disCN . colorpickerswatchnocolor ) ;
swatch . querySelector ( BDFDB . dotCN . colorpickerswatchdropperfg ) . setAttribute ( "fill" , "#ffffff" ) ;
swatch . style . removeProperty ( "background-color" ) ;
swatch . style . removeProperty ( "background-image" ) ;
}
}
} ;
// REMOVE ONCE REWRITTEN
BDFDB . setColorSwatches = function ( container , currentcolor ) {
if ( ! Node . prototype . isPrototypeOf ( container ) ) return ;
var swatches = container . querySelector ( ` ${ BDFDB . dotCN . colorpickerswatches } :not([swatchnr]) ` ) ;
if ( ! swatches ) return ;
swatches . setAttribute ( "swatchnr" , parseInt ( container . querySelectorAll ( ` ${ BDFDB . dotCN . colorpickerswatches } [swatchnr] ` ) . length + 1 ) ) ;
var colorlist = [ null , "rgba(82,233,30,1)" , "rgba(46,204,113,1)" , "rgba(26,188,156,1)" , "rgba(52,152,219,1)" , "rgba(52,84,219,1)" , "rgba(134,30,233,1)" , "rgba(155,89,182,1)" , "rgba(233,30,99,1)" , "rgba(233,65,30,1)" , "rgba(231,76,60,1)" , "rgba(230,126,34,1)" , "rgba(241,196,15,1)" , "rgba(199,204,205,1)" , "rgba(112,128,136,1)" , "rgba(99,99,99,1)" , "rgba(255,255,255,1)" , "rgba(59,173,20,1)" , "rgba(31,139,76,1)" , "rgba(17,128,106,1)" , "rgba(32,102,148,1)" , "rgba(32,57,148,1)" , "rgba(109,20,173,1)" , "rgba(113,54,138,1)" , "rgba(173,20,87,1)" , "rgba(173,32,20,1)" , "rgba(153,45,34,1)" , "rgba(168,67,0,1)" , "rgba(194,124,14,1)" , "rgba(151,156,159,1)" , "rgba(93,104,109,1)" , "rgba(44,44,44,1)" ] ;
var colorrows = [ colorlist . slice ( 0 , parseInt ( colorlist . length / 2 ) ) , colorlist . slice ( parseInt ( colorlist . length / 2 ) ) ] ;
colorlist . shift ( ) ;
swatches . appendChild ( BDFDB . htmlToElement ( ` <div class=" ${ BDFDB . disCNS . flex + BDFDB . disCNS . horizontal + BDFDB . disCNS . justifystart + BDFDB . disCNS . alignstretch + BDFDB . disCNS . nowrap + BDFDB . disCN . margintop8 } " style="flex: 1 1 auto;"><div class=" ${ BDFDB . disCN . marginreset } " style="flex: 0 0 auto;"><div aria-label="" class=""><button type="button" class=" ${ BDFDB . disCNS . colorpickerswatch + BDFDB . disCNS . colorpickerswatchcustom + BDFDB . disCN . colorpickerswatchnocolor } " style="margin-left: 0;"><svg class=" ${ BDFDB . disCN . colorpickerswatchdropper } " width="14" height="14" viewBox="0 0 16 16"><g fill="none"><path d="M-4-4h24v24H-4z"/><path class=" ${ BDFDB . disCN . colorpickerswatchdropperfg } " fill="#ffffff" d="M14.994 1.006C13.858-.257 11.904-.3 10.72.89L8.637 2.975l-.696-.697-1.387 1.388 5.557 5.557 1.387-1.388-.697-.697 1.964-1.964c1.13-1.13 1.3-2.985.23-4.168zm-13.25 10.25c-.225.224-.408.48-.55.764L.02 14.37l1.39 1.39 2.35-1.174c.283-.14.54-.33.765-.55l4.808-4.808-2.776-2.776-4.813 4.803z"/></g></svg></button></div></div><div class=" ${ BDFDB . disCNS . flex + BDFDB . disCNS . vertical + BDFDB . disCNS . justifystart + BDFDB . disCNS . alignstretch + BDFDB . disCNS . nowrap + BDFDB . disCN . flexmarginreset } " style="flex: 1 1 auto;"> ${ colorrows . map ( row => ` <div class=" ${ BDFDB . disCNS . flex + BDFDB . disCNS . horizontal + BDFDB . disCNS . justifystart + BDFDB . disCNS . alignstretch + BDFDB . disCNS . wrap + BDFDB . disCN . colorpickerrow } "> ` + row . map ( c => ` <button type="button" class=" ${ BDFDB . disCN . colorpickerswatch + ( c ? "" : ( " " + BDFDB . disCN . colorpickerswatchnocolor ) ) } " style="background-color: ${ c } ;"></button> ` ) . join ( "" ) + ` </div> ` ) . join ( "" ) } </div></div> ` ) ) ;
if ( currentcolor && ! BDFDB . colorCOMPARE ( currentcolor , [ 0 , 0 , 0 , 0 ] ) ) {
var selection = colorlist . indexOf ( BDFDB . colorCONVERT ( currentcolor , "RGBA" ) ) ;
setSwatch ( selection > - 1 ? swatches . querySelectorAll ( BDFDB . dotCNS . colorpickerrow + BDFDB . dotCN . colorpickerswatch + BDFDB . notCN . colorpickerswatchnocolor ) [ selection ] : swatches . querySelector ( BDFDB . dotCN . colorpickerswatch + BDFDB . dotCN . colorpickerswatchcustom ) , currentcolor , true ) ;
}
else setSwatch ( swatches . querySelector ( BDFDB . dotCNS . colorpickerrow + BDFDB . dotCN . colorpickerswatch + BDFDB . dotCN . colorpickerswatchnocolor ) , null , true ) ;
BDFDB . ListenerUtils . addToChildren ( swatches , "click" , BDFDB . dotCN . colorpickerswatch , e => {
if ( BDFDB . containsClass ( swatches , "disabled" ) || BDFDB . containsClass ( e . currentTarget , BDFDB . disCN . colorpickerswatchdisabled ) ) return ;
else if ( BDFDB . containsClass ( e . currentTarget , BDFDB . disCN . colorpickerswatchcustom ) ) {
BDFDB . openColorPicker ( swatches , e . currentTarget , e . currentTarget . gradient || e . currentTarget . style . getPropertyValue ( "background-color" ) ) ;
}
else {
setSwatch ( swatches . querySelector ( BDFDB . dotCN . colorpickerswatch + BDFDB . dotCN . colorpickerswatchselected ) , null , false ) ;
setSwatch ( e . currentTarget , e . currentTarget . style . getPropertyValue ( "background-color" ) , true ) ;
}
} ) ;
BDFDB . ListenerUtils . addToChildren ( swatches , "mouseenter" , BDFDB . dotCN . colorpickerswatch + BDFDB . dotCN . colorpickerswatchcustom , e => {
BDFDB . TooltipUtils . create ( e . currentTarget , BDFDB . LanguageStrings . CUSTOM _COLOR , { type : "bottom" } ) ;
} ) ;
BDFDB . ListenerUtils . addToChildren ( swatches , "mouseenter" , BDFDB . dotCNS . colorpickerrow + BDFDB . dotCN . colorpickerswatch + BDFDB . dotCN . colorpickerswatchnocolor , e => {
BDFDB . TooltipUtils . create ( e . currentTarget , BDFDB . LanguageStrings . DEFAULT , { type : "bottom" } ) ;
} ) ;
} ;
BDFDB . getSwatchColor = function ( container , number ) {
if ( ! Node . prototype . isPrototypeOf ( container ) ) return ;
var swatches = container . querySelector ( ` ${ BDFDB . dotCN . colorpickerswatches } [swatchnr=" ${ number } "] ` ) ;
if ( ! swatches ) return null ;
var ins = BDFDB . getReactInstance ( swatches ) ;
if ( ins ) return BDFDB . getReactValue ( ins , "return.return.stateNode.state.selectedColor" ) ;
else { // REMOVE ONCE REWRITTEN
var swatch = swatches . querySelector ( ` ${ BDFDB . dotCN . colorpickerswatch + BDFDB . dotCN . colorpickerswatchselected } ` ) ;
return swatch ? swatch . gradient || BDFDB . colorCONVERT ( swatch . style . getPropertyValue ( "background-color" ) , "RGBCOMP" ) : null ;
}
} ;
BDFDB . openColorPicker = function ( container , target , color , options = { gradient : true , comp : false , alpha : true , callback : _ => { } } ) {
if ( ! container || ! target ) return ;
if ( options . comp ) {
options . gradient = false ;
options . alpha = false ;
}
if ( typeof options . callback != "function" ) options . callback = _ => { } ;
var hexformat = options . alpha ? "HEXA" : "HEX" ;
var hexregex = options . alpha ? /^#([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i : /^#([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i ;
var isreact = BDFDB . ObjectUtils . is ( container ) && ! ! container . _reactInternalFiber ;
var isswatches = ! isreact && BDFDB . containsClass ( container , "swatches" ) ;
var isgradient = color && BDFDB . ObjectUtils . is ( color ) ;
var selectedcolor = BDFDB . colorCONVERT ( isgradient ? color [ Object . keys ( color ) [ 0 ] ] : color , hexformat ) || ( options . alpha ? "#000000FF" : "#000000" ) ;
var [ h , s , l ] = BDFDB . colorCONVERT ( selectedcolor , "HSLCOMP" ) ;
var a = BDFDB . colorGETALPHA ( isgradient ? color [ Object . keys ( color ) [ 0 ] ] : color ) ;
a = a == null ? 1 : a ;
var targetrects = BDFDB . getRects ( target ) ;
var colorPicker = BDFDB . htmlToElement ( ` <div role="dialog" class="BDFDB-colorpicker ${ BDFDB . disCNS . popoutnoarrow + BDFDB . disCNS . popoutnoshadow + BDFDB . disCNS . popout + BDFDB . disCNS . popoutbottom + BDFDB . disCNS . popoutarrowalignmenttop + BDFDB . disCN . themeundefined } " style="z-index: 2001; visibility: visible; left: ${ targetrects . left + targetrects . width / 2 } px; top: ${ targetrects . top + targetrects . height } px; transform: translateX(-50%) translateY(0%) translateZ(0px);"><div class=" ${ BDFDB . disCNS . flex + BDFDB . disCNS . vertical + BDFDB . disCNS . justifystart + BDFDB . disCNS . alignstretch + BDFDB . disCNS . nowrap + BDFDB . disCN . colorpicker } " style="flex: 1 1 auto;"><div class=" ${ BDFDB . disCN . colorpickerinner } "><div class=" ${ BDFDB . disCN . colorpickersaturation } "><div class="saturation-color" style="position: absolute; top: 0px; right: 0px; bottom: 0px; left: 0px; background: ${ BDFDB . colorCONVERT ( [ h , "100%" , "100%" ] , "RGB" ) } !important;"><style>.saturation-white {background: -webkit-linear-gradient(to right, #fff, rgba(255,255,255,0));background: linear-gradient(to right, #fff, rgba(255,255,255,0));}.saturation-black {background: -webkit-linear-gradient(to top, #000, rgba(0,0,0,0));background: linear-gradient(to top, #000, rgba(0,0,0,0));}</style><div class="saturation-white" style="position: absolute; top: 0px; right: 0px; bottom: 0px; left: 0px;"><div class="saturation-black" style="position: absolute; top: 0px; right: 0px; bottom: 0px; left: 0px;"></div><div class="saturation-cursor" style="position: absolute; top: 55.2941%; left: 44.7368%; cursor: default;"><div style="width: 4px; height: 4px; box-shadow: rgb(255, 255, 255) 0px 0px 0px 1.5px, rgba(0, 0, 0, 0.3) 0px 0px 1px 1px inset, rgba(0, 0, 0, 0.4) 0px 0px 1px 2px; border-radius: 50%; transform: translate(-2px, -2px);"></div></div></div></div></div><div class=" ${ BDFDB . disCN . colorpickerhue } "><div style="position: absolute; top: 0px; right: 0px; bottom: 0px; left: 0px;"><div class="hue-horizontal" style="padding: 0px 2px; position: relative; height: 100%;"><style>.hue-horizontal {background: linear-gradient(to right, #f00 0%, #ff0 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%);background: -webkit-linear-gradient(to right, #f00 0%, #ff0 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%);}.hue-vertical {background: linear-gradient(to top, #f00 0%, #ff0 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%);background: -webkit-linear-gradient(to top, #f00 0%, #ff0 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%);}</style><div class="hue-cursor" style="position: absolute; left: 0%;"><div style="margin-top: -4px !important; width: 4px; border-radius: 1px; height: 8px; box-shadow: rgba(0, 0, 0, 0.6) 0px 0px 2px; background: rgb(255, 255, 255); transform: translateX(-2px);"></div></div></div></div></div><div class="alpha-bar" style="position: relative; height: 8px; margin: 16px 0 8px;"><div style="position: absolute; top: 0px; right: 0px; bottom: 0px; left: 0px;"><div class="alpha-checker" style="padding: 0px 2px; position: relative; height: 100%; background-color: transparent;"></div></div><div style="position: absolute; top: 0px; right: 0px; bottom: 0px; left: 0px;"><div class="alpha-horizontal" style="padding: 0px 2px; position: relative; height: 100%;"><div class="alpha-cursor" style="position: absolute; left: 0%;"><div style="margin-top: -4px; width: 8px; border-radius: 3px; height: 16px; box-shadow: rgba(0, 0, 0, 0.6) 0px 0px 2px; background: rgb(255, 255, 255); transform: translateX(-2px);"></div></div></div></div></div><div class="gradient-bar" style="position: relative; height: 8px; margin: 27px 2px 2px 2px; ${ ! isgradient ? " display: none;" : "" } "><div style="position: absolute; top: 0px; right: 0px; bottom: 0px; left: 0px;"><div class="alpha-checker" style="padding: 0px 2px; position: relative; height: 100%; background-color: transparent;"></div></div><div style="position: absolute; top: 0px; right: 0px; bottom: 0px; left: 0px;"><div class="gradient-horizontal" style="padding: 0px 2px; position: relative; height: 100%; background-color: ${ selectedcolor } ;"><div clas
document . querySelector ( BDFDB . dotCN . popouts ) . appendChild ( colorPicker ) ;
var removePopout = e => {
if ( ! colorPicker . contains ( e . target ) ) {
document . removeEventListener ( "mousedown" , removePopout ) ;
colorPicker . remove ( ) ;
}
} ;
document . addEventListener ( "mousedown" , removePopout ) ;
var hexinput = colorPicker . querySelector ( BDFDB . dotCNS . colorpickerhexinput + BDFDB . dotCN . input ) ;
var satpane = colorPicker . querySelector ( ".saturation-color" ) ;
var satcursor = colorPicker . querySelector ( ".saturation-cursor" ) ;
var huepane = colorPicker . querySelector ( ".hue-horizontal" ) ;
var huecursor = colorPicker . querySelector ( ".hue-cursor" ) ;
var alphabar = colorPicker . querySelector ( ".alpha-bar" ) ;
var alphapane = colorPicker . querySelector ( ".alpha-horizontal" ) ;
var alphacursor = colorPicker . querySelector ( ".alpha-cursor" ) ;
var gradientbutton = colorPicker . querySelector ( ".gradient-button" ) ;
var gradientbar = colorPicker . querySelector ( ".gradient-bar" ) ;
var gradientpane = colorPicker . querySelector ( ".gradient-horizontal" ) ;
var sMinX , sMaxX , sMinY , sMaxY , hMinX , hMaxX , aMinX , aMaxX , gMinX , gMaxX ;
updateRects ( ) ;
if ( isgradient ) for ( let pos in color ) if ( pos > 0 && pos < 1 ) gradientpane . appendChild ( BDFDB . htmlToElement ( ` <div class="gradient-cursor" style="position: absolute; left: ${ pos * 100 } %;"><div style="background-color: ${ color [ pos ] } !important;"></div></div> ` ) ) ;
updateColors ( false ) ;
if ( ! options . gradient ) BDFDB . removeEles ( colorPicker . querySelectorAll ( ".gradient-button, .gradient-bar" ) ) ;
if ( ! options . alpha ) BDFDB . removeEles ( colorPicker . querySelectorAll ( ".alpha-bar" ) ) ;
BDFDB . ListenerUtils . addToChildren ( colorPicker , "mousedown" , ".move-corner" , e => {
var rects = BDFDB . getRects ( colorPicker ) ;
var transform = getComputedStyle ( colorPicker , null ) . getPropertyValue ( "transform" ) . replace ( /[^0-9,-]/g , "" ) . split ( "," ) ;
var left = rects . left - ( transform . length > 4 ? parseFloat ( transform [ 4 ] ) : 0 ) ;
var top = rects . top - ( transform . length > 4 ? parseFloat ( transform [ 5 ] ) : 0 ) ;
var oldX = e . pageX ;
var oldY = e . pageY ;
var mouseup = ( ) => {
BDFDB . removeLocalStyle ( "disableTextSelection" ) ;
document . removeEventListener ( "mouseup" , mouseup ) ;
document . removeEventListener ( "mousemove" , mousemove ) ;
} ;
var mousemove = e2 => {
left = left - ( oldX - e2 . pageX ) ;
top = top - ( oldY - e2 . pageY ) ;
oldX = e2 . pageX ;
oldY = e2 . pageY ;
colorPicker . style . setProperty ( "left" , left + "px" , "important" ) ;
colorPicker . style . setProperty ( "top" , top + "px" , "important" ) ;
updateRects ( ) ;
} ;
document . addEventListener ( "mouseup" , mouseup ) ;
document . addEventListener ( "mousemove" , mousemove ) ;
} ) ;
satpane . addEventListener ( "mousedown" , e => {
s = BDFDB . mapRange ( [ sMinX , sMaxX ] , [ 0 , 100 ] , e . clientX ) + "%" ;
l = BDFDB . mapRange ( [ sMinY , sMaxY ] , [ 100 , 0 ] , e . clientY ) + "%" ;
updateColors ( true ) ;
var mouseup = ( ) => {
document . removeEventListener ( "mouseup" , mouseup ) ;
document . removeEventListener ( "mousemove" , mousemove ) ;
} ;
var mousemove = e2 => {
s = BDFDB . mapRange ( [ sMinX , sMaxX ] , [ 0 , 100 ] , e2 . clientX ) + "%" ;
l = BDFDB . mapRange ( [ sMinY , sMaxY ] , [ 100 , 0 ] , e2 . clientY ) + "%" ;
updateColors ( true ) ;
} ;
document . addEventListener ( "mouseup" , mouseup ) ;
document . addEventListener ( "mousemove" , mousemove ) ;
} ) ;
huepane . addEventListener ( "mousedown" , e => {
h = BDFDB . mapRange ( [ hMinX , hMaxX ] , [ 0 , 360 ] , e . clientX ) ;
updateColors ( true ) ;
var mouseup = ( ) => {
document . removeEventListener ( "mouseup" , mouseup ) ;
document . removeEventListener ( "mousemove" , mousemove ) ;
} ;
var mousemove = e2 => {
h = BDFDB . mapRange ( [ hMinX , hMaxX ] , [ 0 , 360 ] , e2 . clientX ) ;
updateColors ( true ) ;
} ;
document . addEventListener ( "mouseup" , mouseup ) ;
document . addEventListener ( "mousemove" , mousemove ) ;
} ) ;
alphapane . addEventListener ( "mousedown" , e => {
a = BDFDB . mapRange ( [ aMinX , aMaxX ] , [ 0 , 1 ] , e . clientX ) ;
updateColors ( true ) ;
var bubble = BDFDB . htmlToElement ( ` <span class=" ${ BDFDB . disCN . sliderbubble } " style="opacity: 1 !important; left: -24px !important;"></span> ` ) ;
var mouseup = ( ) => {
bubble . remove ( ) ;
document . removeEventListener ( "mouseup" , mouseup ) ;
document . removeEventListener ( "mousemove" , mousemove ) ;
} ;
var mousemove = e2 => {
if ( ! bubble . parentElement ) alphacursor . appendChild ( bubble ) ;
a = Math . floor ( BDFDB . mapRange ( [ aMinX , aMaxX ] , [ 0 , 100 ] , e2 . clientX ) ) / 100 ;
bubble . innerText = a ;
updateColors ( true ) ;
} ;
document . addEventListener ( "mouseup" , mouseup ) ;
document . addEventListener ( "mousemove" , mousemove ) ;
} ) ;
gradientpane . addEventListener ( "mousedown" , e => {
setImmediate ( ( ) => {
if ( BDFDB . containsClass ( e . target . parentElement , "gradient-cursor" ) ) {
if ( e . which == 1 ) {
if ( ! BDFDB . containsClass ( e . target . parentElement , "selected" ) ) {
BDFDB . removeClass ( gradientpane . querySelectorAll ( ".gradient-cursor.selected" ) , "selected" ) ;
BDFDB . addClass ( e . target . parentElement , "selected" ) ;
[ h , s , l ] = BDFDB . colorCONVERT ( e . target . style . getPropertyValue ( "background-color" ) , "HSLCOMP" ) ;
a = BDFDB . colorGETALPHA ( e . target . style . getPropertyValue ( "background-color" ) ) ;
updateColors ( true ) ;
}
if ( ! BDFDB . containsClass ( e . target . parentElement , "edge" ) ) {
var mouseup = ( ) => {
document . removeEventListener ( "mouseup" , mouseup ) ;
document . removeEventListener ( "mousemove" , mousemove ) ;
} ;
var mousemove = e2 => {
e . target . parentElement . style . setProperty ( "left" , BDFDB . mapRange ( [ gMinX , gMaxX ] , [ 1 , 99 ] , e2 . clientX ) + "%" ) ;
updateGradient ( ) ;
} ;
document . addEventListener ( "mouseup" , mouseup ) ;
document . addEventListener ( "mousemove" , mousemove ) ;
}
}
else if ( e . which == 3 && ! BDFDB . containsClass ( e . target . parentElement , "edge" ) ) {
BDFDB . removeEles ( e . target . parentElement ) ;
if ( BDFDB . containsClass ( e . target . parentElement , "selected" ) ) {
var firstcursor = gradientpane . querySelector ( ".gradient-cursor" ) ;
BDFDB . addClass ( firstcursor , "selected" ) ;
[ h , s , l ] = BDFDB . colorCONVERT ( firstcursor . firstElementChild . style . getPropertyValue ( "background-color" ) , "HSLCOMP" ) ;
a = BDFDB . colorGETALPHA ( firstElementChild . style . getPropertyValue ( "background-color" ) ) ;
}
updateColors ( true ) ;
}
}
else if ( gradientpane == e . target && e . which == 1 ) {
BDFDB . removeClass ( gradientpane . querySelectorAll ( ".gradient-cursor.selected" ) , "selected" ) ;
var newcursor = BDFDB . htmlToElement ( ` <div class="gradient-cursor selected" style="position: absolute; left: ${ BDFDB . mapRange ( [ gMinX , gMaxX ] , [ 1 , 99 ] , e . clientX ) } %;"><div style="background-color: rgba(0, 0, 0, 1) !important;"></div></div> ` ) ;
gradientpane . appendChild ( newcursor ) ;
[ h , s , l ] = [ 0 , "0%" , "0%" ] ;
a = 1 ;
updateColors ( true ) ;
var mouseup = ( ) => {
document . removeEventListener ( "mouseup" , mouseup ) ;
document . removeEventListener ( "mousemove" , mousemove ) ;
} ;
var mousemove = e2 => {
newcursor . style . setProperty ( "left" , BDFDB . mapRange ( [ gMinX , gMaxX ] , [ 1 , 99 ] , e2 . clientX ) + "%" ) ;
updateGradient ( ) ;
} ;
document . addEventListener ( "mouseup" , mouseup ) ;
document . addEventListener ( "mousemove" , mousemove ) ;
}
} ) ;
} ) ;
hexinput . addEventListener ( "input" , e => {
if ( hexregex . test ( hexinput . value ) ) {
[ h , s , l , a ] = BDFDB . colorCONVERT ( hexinput . value , "HSLCOMP" ) ;
if ( a == null ) a = 1 ;
updateColors ( false ) ;
}
} ) ;
gradientbutton . addEventListener ( "click" , e => {
isgradient = ! isgradient ;
BDFDB . toggleEles ( gradientbar , isgradient ) ;
BDFDB . toggleClass ( gradientbutton , "selected" , isgradient ) ;
updateColors ( true ) ;
} ) ;
gradientbutton . addEventListener ( "mouseenter" , e => {
BDFDB . TooltipUtils . create ( gradientbutton , "Color Gradient" , { type : "bottom" } ) ;
} ) ;
function updateRects ( ) {
var satpanerects = BDFDB . getRects ( satpane ) ;
sMinX = satpanerects . left ;
sMaxX = sMinX + satpanerects . width ;
sMinY = satpanerects . top ;
sMaxY = sMinY + satpanerects . height ;
var huepanerects = BDFDB . getRects ( huepane ) ;
hMinX = huepanerects . left ;
hMaxX = hMinX + huepanerects . width ;
var alphapanerects = BDFDB . getRects ( alphapane ) ;
aMinX = alphapanerects . left ;
aMaxX = aMinX + alphapanerects . width ;
var gradientpanerects = BDFDB . getRects ( gradientpane ) ;
gMinX = gradientpanerects . left ;
gMaxX = gMinX + gradientpanerects . width ;
}
function updateColors ( setinput ) {
satpane . style . setProperty ( "background" , BDFDB . colorCONVERT ( [ h , "100%" , "100%" ] , "RGB" ) , "important" ) ;
satcursor . style . setProperty ( "left" , s , "important" ) ;
satcursor . style . setProperty ( "top" , BDFDB . mapRange ( [ 0 , 100 ] , [ 100 , 0 ] , parseFloat ( l ) ) + "%" , "important" ) ;
huecursor . style . setProperty ( "left" , BDFDB . mapRange ( [ 0 , 360 ] , [ 0 , 100 ] , h ) + "%" , "important" ) ;
alphapane . style . setProperty ( "background" , ` linear-gradient(to right, ${ BDFDB . colorSETALPHA ( [ h , s , l ] , 0 , "RGBA" ) } , ${ BDFDB . colorSETALPHA ( [ h , s , l ] , 1 , "RGBA" ) } ` , "important" ) ;
alphacursor . style . setProperty ( "left" , ( a * 100 ) + "%" , "important" ) ;
var hex = BDFDB . colorCONVERT ( [ h , s , l , a ] , hexformat ) ;
var rgb = BDFDB . colorCONVERT ( hex , "RGBA" ) ;
if ( isreact ) {
if ( isgradient ) {
gradientpane . querySelector ( ".gradient-cursor.selected" ) . firstElementChild . style . setProperty ( "background-color" , rgb ) ;
updateGradient ( ) ;
}
else container . setState ( {
selectedColor : rgb ,
customColor : rgb
} ) ;
}
else if ( isswatches ) {
setSwatch ( container . querySelector ( BDFDB . dotCN . colorpickerswatch + ".selected" ) , null , false ) ;
if ( isgradient ) {
gradientpane . querySelector ( ".gradient-cursor.selected" ) . firstElementChild . style . setProperty ( "background-color" , rgb ) ;
updateGradient ( ) ;
}
else setSwatch ( container . querySelector ( BDFDB . dotCN . colorpickerswatch + BDFDB . dotCN . colorpickerswatch ) , rgb , true ) ;
}
else {
let input = container . querySelector ( BDFDB . dotCN . input ) ;
if ( input ) input . value = options . comp ? BDFDB . colorCONVERT ( hex , "RGBCOMP" ) . join ( "," ) : rgb ;
let swatch = container . querySelector ( BDFDB . dotCN . colorpickerswatchsingle ) ;
if ( swatch ) swatch . style . setProperty ( "background-color" , rgb , "important" ) ;
}
if ( setinput ) hexinput . value = hex ;
options . callback ( rgb ) ;
}
function updateGradient ( ) {
gradientpane . style . removeProperty ( "background-color" ) ;
var gradient = { } ;
for ( let cursor of gradientpane . querySelectorAll ( ".gradient-cursor" ) ) gradient [ parseFloat ( cursor . style . getPropertyValue ( "left" ) ) / 100 ] = cursor . firstElementChild . style . getPropertyValue ( "background-color" ) ;
gradientpane . style . setProperty ( "background-image" , BDFDB . colorGRADIENT ( gradient ) ) ;
if ( isreact ) container . setState ( {
selectedColor : gradient ,
customColor : gradient
} ) ;
else setSwatch ( container . querySelector ( BDFDB . dotCN . colorpickerswatch + BDFDB . dotCN . colorpickerswatch ) , gradient , true ) ;
}
} ;
BDFDB . mapRange = function ( from , to , value ) {
if ( parseFloat ( value ) < parseFloat ( from [ 0 ] ) ) return parseFloat ( to [ 0 ] ) ;
else if ( parseFloat ( value ) > parseFloat ( from [ 1 ] ) ) return parseFloat ( to [ 1 ] ) ;
else return parseFloat ( to [ 0 ] ) + ( parseFloat ( value ) - parseFloat ( from [ 0 ] ) ) * ( parseFloat ( to [ 1 ] ) - parseFloat ( to [ 0 ] ) ) / ( parseFloat ( from [ 1 ] ) - parseFloat ( from [ 0 ] ) ) ;
} ;
BDFDB . checkVersions = function ( newv , oldv ) {
if ( ! newv || ! oldv ) return true ;
newv = newv . toString ( ) . replace ( /["'`]/g , "" ) . split ( /,|\./g ) . map ( n => parseInt ( n ) ) . filter ( n => ( n || n == 0 ) && ! isNaN ( n ) ) ;
oldv = oldv . toString ( ) . replace ( /["'`]/g , "" ) . split ( /,|\./g ) . map ( n => parseInt ( n ) ) . filter ( n => ( n || n == 0 ) && ! isNaN ( n ) ) ;
var length = Math . max ( newv . length , oldv . length ) ;
if ( ! length ) return true ;
if ( newv . length > oldv . length ) {
var temparray = new Array ( newv . length - oldv . length ) ;
for ( let i = 0 ; i < temparray . length ; i ++ ) temparray [ i ] = 0 ;
oldv = temparray . concat ( oldv ) ;
}
else if ( newv . length < oldv . length ) {
var temparray = new Array ( oldv . length - newv . length ) ;
for ( let i = 0 ; i < temparray . length ; i ++ ) temparray [ i ] = 0 ;
newv = temparray . concat ( newv ) ;
}
for ( let i = 0 ; i < length ; i ++ ) for ( let ioutdated = false , j = 0 ; j <= i ; j ++ ) {
if ( j == i && newv [ j ] < oldv [ j ] ) return false ;
if ( j < i ) ioutdated = newv [ j ] == oldv [ j ] ;
if ( ( j == 0 || ioutdated ) && j == i && newv [ j ] > oldv [ j ] ) return true ;
}
return false ;
} ;
BDFDB . checkVersionDifference = function ( newv , oldv ) {
if ( ! newv || ! oldv ) return false ;
newv = newv . toString ( ) . replace ( /["'`]/g , "" ) . split ( /,|\./g ) . map ( n => parseInt ( n ) ) . filter ( n => ( n || n == 0 ) && ! isNaN ( n ) ) ;
oldv = oldv . toString ( ) . replace ( /["'`]/g , "" ) . split ( /,|\./g ) . map ( n => parseInt ( n ) ) . filter ( n => ( n || n == 0 ) && ! isNaN ( n ) ) ;
var length = Math . max ( newv . length , oldv . length ) ;
if ( ! length ) return false ;
if ( newv . length > oldv . length ) {
var temparray = new Array ( newv . length - oldv . length ) ;
for ( let i = 0 ; i < temparray . length ; i ++ ) temparray [ i ] = 0 ;
oldv = temparray . concat ( oldv ) ;
}
else if ( newv . length < oldv . length ) {
var temparray = new Array ( oldv . length - newv . length ) ;
for ( let i = 0 ; i < temparray . length ; i ++ ) temparray [ i ] = 0 ;
newv = temparray . concat ( newv ) ;
}
var oldvvalue = 0 , newvvalue = 0 ;
for ( let i in oldv . reverse ( ) ) oldvvalue += ( oldv [ i ] * ( 10 * * i ) ) ;
for ( let i in newv . reverse ( ) ) newvvalue += ( newv [ i ] * ( 10 * * i ) ) ;
return ( newvvalue - oldvvalue ) / ( 10 * * ( length - 1 ) ) ;
} ;
BDFDB . generateID = function ( array ) {
array = Array . isArray ( array ) ? array : null ;
let id = Math . floor ( Math . random ( ) * 10000000000000000 ) ;
if ( array && array . includes ( id ) ) return BDFDB . generateID ( array ) ;
else {
array . push ( id ) ;
return id ;
}
} ;
BDFDB . DiscordUtils = { } ;
BDFDB . DiscordUtils . getFolder = function ( ) {
var built = BDFDB . DiscordUtils . getBuilt ( ) ;
built = "discord" + ( built == "stable" ? "" : built ) ;
return LibraryRequires . path . resolve ( LibraryRequires . electron . remote . app . getPath ( "appData" ) , built , BDFDB . DiscordUtils . getVersion ( ) ) ;
} ;
BDFDB . DiscordUtils . getBuilt = function ( ) {
if ( BDFDB . DiscordUtils . getBuilt . built ) return BDFDB . DiscordUtils . getBuilt . built ;
else {
var built = null ;
try { built = require ( LibraryRequires . electron . remote . app . getAppPath ( ) + "/build_info.json" ) . releaseChannel . toLowerCase ( ) ; }
catch ( err ) {
try { built = require ( LibraryRequires . electron . remote . app . getAppPath ( ) . replace ( "\app.asar" , "" ) + "/build_info.json" ) . releaseChannel . toLowerCase ( ) ; }
catch ( err ) {
var version = BDFDB . DiscordUtils . getVersion ( ) ;
if ( version ) {
version = version . split ( "." ) ;
if ( version . length == 3 && ! isNaN ( version = parseInt ( version [ 2 ] ) ) ) built = version > 300 ? "stable" : da > 200 ? "canary" : "ptb" ;
else built = "stable" ;
}
else built = "stable" ;
}
}
BDFDB . DiscordUtils . getBuilt . built = built ;
return built ;
}
} ;
BDFDB . DiscordUtils . getVersion = function ( ) {
if ( BDFDB . DiscordUtils . getBuilt . version ) return BDFDB . DiscordUtils . getBuilt . version ;
else {
var version = null ;
try { version = LibraryRequires . electron . remote . app . getVersion ( ) ; }
catch ( version ) { version = "" ; }
BDFDB . DiscordUtils . getBuilt . version = version ;
return version ;
}
} ;
BDFDB . DiscordUtils . getLanguage = function ( ) {
var lang = document . querySelector ( "html" ) . lang || "en-US" ;
var langids = lang . split ( "-" ) ;
var langid = langids [ 0 ] ;
var langid2 = langids [ 1 ] || "" ;
lang = langid2 && langid . toUpperCase ( ) !== langid2 . toUpperCase ( ) ? langid + "-" + langid2 : langid ;
return BDFDB . languages [ lang ] || BDFDB . languages [ langid ] || BDFDB . languages [ "en-US" ] ;
} ;
BDFDB . DiscordUtils . getTheme = function ( ) {
return document . querySelectorAll ( BDFDB . dotCN . themelight ) . length >= document . querySelectorAll ( BDFDB . dotCN . themedark ) . length ? BDFDB . disCN . themelight : BDFDB . disCN . themedark ;
} ;
BDFDB . DiscordUtils . getMode = function ( ) {
return document . querySelectorAll ( BDFDB . dotCN . messagegroupcompact ) . length >= document . querySelectorAll ( BDFDB . dotCN . messagegroupcozy ) . length ? "compact" : "cozy" ;
} ;
BDFDB . DiscordUtils . getZoomFactor = function ( ) {
var arects = BDFDB . getRects ( document . querySelector ( BDFDB . dotCN . appmount ) ) ;
var widthzoom = Math . round ( 100 * window . outerWidth / arects . width ) ;
var heightzoom = Math . round ( 100 * window . outerHeight / arects . height ) ;
return widthzoom < heightzoom ? widthzoom : heightzoom ;
} ;
BDFDB . DiscordUtils . getFontScale = function ( ) {
return parseInt ( document . firstElementChild . style . fontSize . replace ( "%" , "" ) ) ;
} ;
BDFDB . DiscordUtils . shake = function ( ) {
BDFDB . getReactInstance ( document . querySelector ( BDFDB . dotCN . appold ) ) . return . stateNode . shake ( ) ;
} ;
BDFDB . BdUtils = { } ;
BDFDB . BdUtils . getPluginsFolder = function ( ) {
if ( LibraryRequires . process . env . injDir ) return LibraryRequires . path . resolve ( LibraryRequires . process . env . injDir , "plugins/" ) ;
switch ( LibraryRequires . process . platform ) {
case "win32" :
return LibraryRequires . path . resolve ( LibraryRequires . process . env . appdata , "BetterDiscord/plugins/" ) ;
case "darwin" :
return LibraryRequires . path . resolve ( LibraryRequires . process . env . HOME , "Library/Preferences/BetterDiscord/plugins/" ) ;
default :
if ( LibraryRequires . process . env . XDG _CONFIG _HOME ) return LibraryRequires . path . resolve ( LibraryRequires . process . env . XDG _CONFIG _HOME , "BetterDiscord/plugins/" ) ;
else return LibraryRequires . path . resolve ( LibraryRequires . process . env . HOME , ".config/BetterDiscord/plugins/" ) ;
}
} ;
BDFDB . BdUtils . getThemesFolder = function ( ) {
if ( LibraryRequires . process . env . injDir ) return LibraryRequires . path . resolve ( LibraryRequires . process . env . injDir , "plugins/" ) ;
switch ( LibraryRequires . process . platform ) {
case "win32" :
return LibraryRequires . path . resolve ( LibraryRequires . process . env . appdata , "BetterDiscord/themes/" ) ;
case "darwin" :
return LibraryRequires . path . resolve ( LibraryRequires . process . env . HOME , "Library/Preferences/BetterDiscord/themes/" ) ;
default :
if ( LibraryRequires . process . env . XDG _CONFIG _HOME ) return LibraryRequires . path . resolve ( LibraryRequires . process . env . XDG _CONFIG _HOME , "BetterDiscord/themes/" ) ;
else return LibraryRequires . path . resolve ( LibraryRequires . process . env . HOME , ".config/BetterDiscord/themes/" ) ;
}
} ;
BDFDB . BdUtils . checkRepoPage = function ( usersettings = document . querySelector ( BDFDB . dotCN . layer + ` [layer-id="user-settings"] ` ) ) {
if ( ! usersettings ) return ;
var folderbutton = usersettings . querySelector ( BDFDB . dotCN . _repofolderbutton ) ;
if ( ! folderbutton ) return ;
var header = folderbutton . parentElement . querySelector ( "h2" ) ;
if ( header && header . innerText ) {
let headertext = header . innerText . toLowerCase ( ) ;
if ( headertext === "plugins" || headertext === "themes" ) return headertext ;
}
} ;
BDFDB . BdUtils . isBDv2 = function ( ) {
return typeof BDFDB . BDv2Api !== "undefined" ;
} ;
BDFDB . BdUtils . isPluginEnabled = function ( pluginname ) {
if ( ! pluginname ) return false ;
if ( ! BDFDB . BdUtils . isBDv2 ( ) ) return BdApi . isPluginEnabled ( pluginname ) ;
else return BDFDB . Plugins [ pluginname . toLowerCase ( ) ] ? BDFDB . Plugins [ pluginname . toLowerCase ( ) ] . enabled : null ;
} ;
BDFDB . BdUtils . getPlugin = function ( pluginname , hasToBeEnabled = false ) {
if ( ! hasToBeEnabled || BDFDB . BdUtils . isPluginEnabled ( pluginname ) ) return BdApi . getPlugin ( pluginname ) ;
return null ;
} ;
BDFDB . BdUtils . isThemeEnabled = function ( themename ) {
if ( ! BDFDB . BdUtils . isBDv2 ( ) ) return BdApi . isThemeEnabled ( themename )
else return BDFDB . Themes [ themename . toLowerCase ( ) ] ? BDFDB . Themes [ themename . toLowerCase ( ) ] . enabled : null ;
} ;
BDFDB . BdUtils . getTheme = function ( themename , hasToBeEnabled = false ) {
if ( window . bdthemes && ( ! hasToBeEnabled || BDFDB . BdUtils . isThemeEnabled ( themename ) ) ) return window . bdthemes [ themename ] ;
return null ;
} ;
BDFDB . BdUtils . isAutoLoadEnabled = function ( ) {
return window . settingsCookie [ "fork-ps-5" ] && window . settingsCookie [ "fork-ps-5" ] === true || BDFDB . BdUtils . isPluginEnabled ( "Restart-No-More" ) || BDFDB . BdUtils . isPluginEnabled ( "Restart No More" ) ;
} ;
( BDFDB . BdUtils . setPluginCache = function ( ) {
if ( ! BDFDB . BdUtils . isBDv2 ( ) ) return ;
BDFDB . Plugins = { } ;
for ( let plugin of BDFDB . BDv2Api . Plugins . listPlugins ( ) ) BDFDB . BDv2Api . Plugins . getPlugin ( plugin ) . then ( plugindata => { BDFDB . Plugins [ plugin ] = plugindata ; } ) ;
} ) ( ) ;
( BDFDB . BdUtils . setThemeCache = function ( ) {
if ( ! BDFDB . BdUtils . isBDv2 ( ) ) return ;
BDFDB . Themes = { } ;
for ( let theme of BDFDB . BDv2Api . Themes . listThemes ( ) ) BDFDB . BDv2Api . Themes . getTheme ( theme ) . then ( themedata => { BDFDB . Themes [ theme ] = themedata ; } ) ;
} ) ( ) ;
var DiscordClassModules = { } ;
DiscordClassModules . BDFDB = {
BDFDBundefined : "BDFDB_undefined" ,
cardInner : "card-inner" ,
colorPickerSwatches : "swatches" ,
colorPickerSwatchesDisabled : "disabled" ,
colorPickerSwatchSingle : "single-swatch" ,
colorPickerSwatchSelected : "selected" ,
overflowEllipsis : "overflowellipsis" ,
modalHeaderHasSibling : "headerHasSibling" ,
modalTabContent : "tab-content" ,
modalTabContentOpen : "open"
} ;
DiscordClassModules . BDrepo = {
bdGuild : "bd-guild" ,
bdGuildAnimatable : "bd-animatable" ,
bdGuildAudio : "bd-audio" ,
bdGuildSelected : "bd-selected" ,
bdGuildSeparator : "bd-guild-separator" ,
bdGuildUnread : "bd-unread" ,
bdGuildVideo : "bd-video" ,
bdPillSelected : "bd-selected" ,
bdPillUnread : "bd-unread" ,
bdaAuthor : "bda-author" ,
bdaControls : "bda-controls" ,
bdaDescription : "bda-description" ,
bdaDescriptionWrap : "bda-description-wrap" ,
bdaFooter : "bda-footer" ,
bdaHeader : "bda-header" ,
bdaHeaderTitle : "bda-header-title" ,
bdaLink : "bda-link" ,
bdaLinks : "bda-links" ,
bdaName : "bda-name" ,
bdaSettingsButton : "bda-settings-button" ,
bdaSlist : "bda-slist" ,
bdaVersion : "bda-version" ,
bdPfbtn : "bd-pfbtn" ,
settingsOpen : "settings-open" ,
settingsClosed : "settings-closed" ,
switch : "ui-switch" ,
switchCheckbox : "ui-switch-checkbox" ,
switchChecked : "checked" ,
switchItem : "ui-switch-item" ,
switchWrapper : "ui-switch-wrapper"
} ;
DiscordClassModules . BDv2repo = {
bdButton : "bd-button" ,
bdCard : "bd-card" ,
bdHasTooltip : "bd-hasTooltip" ,
bdMaterialDesignIcon : "bd-materialDesignIcon" ,
bdTooltip : "bd-tooltip" ,
vTooltipOpen : "v-tooltip-open"
} ;
DiscordClassModules . NotFound = {
_ : "" ,
avatarStopAnimation : "stop-animation" ,
badgeWrapper : "wrapper-232cHJ" ,
channelPanelTitle : "title-eS5yk3" ,
guildChannels : "container-PNkimc" ,
highlight : "highlight" ,
hoverCardButton : "button-2CgfFz" ,
loginScreen : "wrapper-3Q5DdO" ,
nameContainerNameContainer : "container-2ax-kl" ,
mention : "mention" ,
select : "css-1kj8ui-container" ,
selectArrow : "css-19bqh2r" ,
selectArrowContainer : "css-bdfdb-indicatorContainer" ,
selectArrowContainerDark : "css-12qlrak-indicatorContainer" ,
selectArrowContainerLight : "css-11dkexk-indicatorContainer" ,
selectArrowZone : "css-1wy0on6" ,
selectControl : "css-bdfdb-control" ,
selectControlDark : "css-15ejc46-control" ,
selectControlLight : "css-oc2jo8-control" ,
selectDummyInput : "css-gj7qu5-dummyInput" ,
selectHasValue : "css-bdfdb-hasValue" ,
selectIsOpen : "css-bdfdb-isOpen" ,
selectIsSelected : "css-bdfdb-isSelected" ,
selectMenu : "css-1ye7vu0" ,
selectMenuOuter : "css-bdfdb-menuOuter" ,
selectMenuOuterDark : "css-ua3v5p-menu" ,
selectMenuOuterLight : "css-1ea7eys-menu" ,
selectOption : "css-bdfdb-option" ,
selectOptionDark : "css-1aymab5-option" ,
selectOptionLight : "css-ddw2o3-option" ,
selectOptionHoverDark : "css-1gnr91b-option" ,
selectOptionHoverLight : "css-qgio2y-option" ,
selectOptionSelectDark : "css-12o7ek3-option" ,
selectOptionSelectLight : "css-1kft5vg-option" ,
selectSingle : "css-bdfdb-singleValue" ,
selectSingleDark : "css-1k00wn6-singleValue" ,
selectSingleLight : "css-6nrxdk-singleValue" ,
selectValue : "css-1hwfws3" ,
splashBackground : "splashBackground-1FRCko" ,
subtext : "subtext-3CDbHg" ,
themeDark : "theme-dark" ,
themeLight : "theme-light" ,
themeUndefined : "theme-undefined" ,
voiceDraggable : "draggable-1KoBzC"
} ;
DiscordClassModules . AccountDetails = BDFDB . WebModules . findByProperties ( "usernameContainer" , "container" ) ;
DiscordClassModules . AccountDetailsButtons = BDFDB . WebModules . findByProperties ( "button" , "enabled" , "disabled" ) ;
DiscordClassModules . ActivityFeed = BDFDB . WebModules . findByProperties ( "activityFeed" ) ;
DiscordClassModules . Anchor = BDFDB . WebModules . findByProperties ( "anchor" , "anchorUnderlineOnHover" ) ;
DiscordClassModules . AppBase = BDFDB . WebModules . findByProperties ( "container" , "base" ) ;
DiscordClassModules . AppInner = BDFDB . WebModules . findByProperties ( "app" , "layers" ) ;
DiscordClassModules . AppMount = BDFDB . WebModules . findByProperties ( "appMount" ) ;
DiscordClassModules . ApplicationStore = BDFDB . WebModules . findByProperties ( "applicationStore" , "navigation" ) ;
DiscordClassModules . AppOuter = BDFDB . WebModules . find ( module => typeof module [ "app" ] == "string" && Object . keys ( module ) . length == 1 ) ;
DiscordClassModules . AuditLog = BDFDB . WebModules . findByProperties ( "auditLog" ) ;
DiscordClassModules . AuthBox = BDFDB . WebModules . findByProperties ( "authBox" ) ;
DiscordClassModules . Autocomplete = BDFDB . WebModules . findByProperties ( "autocomplete" , "autocompleteRow" ) ;
DiscordClassModules . Avatar = BDFDB . WebModules . findByProperties ( "avatar" , "mask" , "wrapper" ) ;
DiscordClassModules . AvatarIcon = BDFDB . WebModules . findByProperties ( "iconActiveLarge" , "iconActiveMedium" ) ;
DiscordClassModules . Backdrop = BDFDB . WebModules . findByProperties ( "backdrop" ) ;
DiscordClassModules . Badge = BDFDB . WebModules . findByProperties ( "numberBadge" , "textBadge" , "iconBadge" ) ;
DiscordClassModules . BotTag = BDFDB . WebModules . findByProperties ( "botTag" , "botTagInvert" ) ;
DiscordClassModules . Button = BDFDB . WebModules . findByProperties ( "colorBlack" , "button" ) ;
DiscordClassModules . Call = BDFDB . WebModules . findByProperties ( "callAvatarWrapper" , "video" ) ;
DiscordClassModules . CallCurrent = BDFDB . WebModules . findByProperties ( "wrapper" , "fullScreen" ) ;
DiscordClassModules . CallDetails = BDFDB . WebModules . findByProperties ( "container" , "hotspot" ) ;
DiscordClassModules . CallIncoming = BDFDB . WebModules . findByProperties ( "incomingCall" , "container" ) ;
DiscordClassModules . CallIncomingInner = BDFDB . WebModules . findByProperties ( "incomingCallInner" , "members" ) ;
DiscordClassModules . Card = BDFDB . WebModules . findByProperties ( "card" , "cardBrand" ) ;
DiscordClassModules . CardStatus = BDFDB . WebModules . findByProperties ( "reset" , "error" , "card" ) ;
DiscordClassModules . CardStore = BDFDB . WebModules . findByProperties ( "card" , "interactive" , "url" ) ;
DiscordClassModules . Category = BDFDB . WebModules . findByProperties ( "wrapper" , "children" , "muted" ) ;
DiscordClassModules . CategoryContainer = BDFDB . WebModules . findByProperties ( "addButtonIcon" , "containerDefault" ) ;
DiscordClassModules . ChangeLog = BDFDB . WebModules . findByProperties ( "added" , "fixed" , "improved" , "progress" ) ;
DiscordClassModules . Channel = BDFDB . WebModules . findByProperties ( "wrapper" , "content" , "modeSelected" ) ;
DiscordClassModules . ChannelContainer = BDFDB . WebModules . findByProperties ( "actionIcon" , "containerDefault" ) ;
DiscordClassModules . ChannelLimit = BDFDB . WebModules . findByProperties ( "users" , "total" , "wrapper" ) ;
DiscordClassModules . ChannelTextArea = BDFDB . WebModules . findByProperties ( "textArea" , "attachButtonDivider" ) ;
DiscordClassModules . ChannelTextAreaButton = BDFDB . WebModules . findByProperties ( "buttonWrapper" , "active" ) ;
DiscordClassModules . ChatWindow = BDFDB . WebModules . findByProperties ( "chat" , "channelTextArea" ) ;
DiscordClassModules . Checkbox = BDFDB . WebModules . findByProperties ( "checkboxWrapper" , "round" ) ;
DiscordClassModules . ColorPicker = BDFDB . WebModules . findByProperties ( "colorPickerCustom" , "customColorPickerInput" ) ;
DiscordClassModules . ColorPickerInner = BDFDB . WebModules . findByProperties ( "saturation" , "hue" , "wrapper" ) ;
DiscordClassModules . ContextMenu = BDFDB . WebModules . findByProperties ( "contextMenu" , "itemGroup" ) ;
DiscordClassModules . ContextMenuCheckbox = BDFDB . WebModules . findByProperties ( "checkboxInner" , "checkboxElement" ) ;
DiscordClassModules . CtaVerification = BDFDB . WebModules . findByProperties ( "attendeeCTA" , "verificationNotice" ) ;
DiscordClassModules . Cursor = BDFDB . WebModules . findByProperties ( "cursorDefault" , "userSelectNone" ) ;
DiscordClassModules . DmAddPopout = BDFDB . WebModules . findByProperties ( "popout" , "searchBarComponent" ) ;
DiscordClassModules . DmAddPopoutItems = BDFDB . WebModules . findByProperties ( "friendSelected" , "friendWrapper" ) ;
DiscordClassModules . DownloadLink = BDFDB . WebModules . findByProperties ( "downloadLink" , "size12" ) ;
DiscordClassModules . Embed = BDFDB . WebModules . findByProperties ( "embed" , "embedAuthorIcon" ) ;
DiscordClassModules . EmbedActions = BDFDB . WebModules . findByProperties ( "iconPlay" , "iconWrapperActive" ) ;
DiscordClassModules . EmojiPicker = BDFDB . WebModules . findByProperties ( "emojiPicker" , "categories" ) ;
DiscordClassModules . File = BDFDB . WebModules . findByProperties ( "downloadButton" , "fileNameLink" ) ;
DiscordClassModules . Flex = BDFDB . WebModules . findByProperties ( "alignBaseline" , "alignCenter" ) ;
DiscordClassModules . FlexChild = BDFDB . WebModules . findByProperties ( "flexChild" , "flex" ) ;
DiscordClassModules . FlowerStar = BDFDB . WebModules . findByProperties ( "flowerStarContainer" , "flowerStar" ) ;
DiscordClassModules . FormText = BDFDB . WebModules . findByProperties ( "description" , "modeDefault" ) ;
DiscordClassModules . Friends = BDFDB . WebModules . findByProperties ( "friendsColumn" , "friendsRow" ) ;
DiscordClassModules . Game = BDFDB . WebModules . findByProperties ( "game" , "gameName" ) ;
DiscordClassModules . GameIcon = BDFDB . WebModules . findByProperties ( "gameIcon" , "small" , "xsmall" ) ;
DiscordClassModules . GameLibrary = BDFDB . WebModules . findByProperties ( "gameLibrary" , "scroller" ) ;
DiscordClassModules . GifFavoriteButton = BDFDB . WebModules . findByProperties ( "gifFavoriteButton" , "showPulse" ) ;
DiscordClassModules . GiftInventory = BDFDB . WebModules . findByProperties ( "root" , "body" , "scroller" ) ;
DiscordClassModules . GoLiveDetails = BDFDB . WebModules . findByProperties ( "panel" , "gameWrapper" ) ;
DiscordClassModules . Guild = BDFDB . WebModules . findByProperties ( "wrapper" , "lowerBadge" , "svg" ) ;
DiscordClassModules . GuildChannels = BDFDB . WebModules . findByProperties ( "positionedContainer" , "unreadBar" ) ;
DiscordClassModules . GuildDiscovery = BDFDB . WebModules . findByProperties ( "pageWrapper" , "guildCard" ) ;
DiscordClassModules . GuildDm = BDFDB . WebModules . find ( module => typeof module [ "pill" ] == "string" && Object . keys ( module ) . length == 1 ) ;
DiscordClassModules . GuildEdges = BDFDB . WebModules . findByProperties ( "wrapper" , "edge" , "autoPointerEvents" )
DiscordClassModules . GuildFolder = BDFDB . WebModules . findByProperties ( "folder" , "expandedGuilds" )
DiscordClassModules . GuildHeader = BDFDB . WebModules . findByProperties ( "header" , "name" , "bannerImage" ) ;
DiscordClassModules . GuildHeaderButton = BDFDB . WebModules . findByProperties ( "button" , "open" ) ;
DiscordClassModules . GuildIcon = BDFDB . WebModules . findByProperties ( "acronym" , "selected" , "wrapper" ) ;
DiscordClassModules . GuildSettingsBanned = BDFDB . WebModules . findByProperties ( "bannedUser" , "bannedUserAvatar" ) ;
DiscordClassModules . GuildSettingsInvite = BDFDB . WebModules . findByProperties ( "countdownColumn" , "inviteSettingsInviteRow" ) ;
DiscordClassModules . GuildSettingsMember = BDFDB . WebModules . findByProperties ( "member" , "membersFilterPopout" ) ;
DiscordClassModules . GuildServer = BDFDB . WebModules . findByProperties ( "blobContainer" , "pill" ) ;
DiscordClassModules . GuildsItems = BDFDB . WebModules . findByProperties ( "guildSeparator" , "guildsError" ) ;
DiscordClassModules . GuildsWrapper = BDFDB . WebModules . findByProperties ( "scrollerWrap" , "unreadMentionsBar" , "wrapper" ) ;
DiscordClassModules . HeaderBar = BDFDB . WebModules . findByProperties ( "container" , "children" , "toolbar" ) ;
DiscordClassModules . HeaderBarExtras = BDFDB . WebModules . findByProperties ( "headerBarLoggedOut" , "search" ) ;
DiscordClassModules . HeaderBarSearch = BDFDB . WebModules . findByProperties ( "search" , "searchBar" , "open" ) ;
DiscordClassModules . HeaderBarTopic = BDFDB . WebModules . findByProperties ( "topic" , "expandable" , "content" ) ;
DiscordClassModules . HomeIcon = BDFDB . WebModules . findByProperties ( "homeIcon" ) ;
DiscordClassModules . HotKeyRecorder = BDFDB . WebModules . findByProperties ( "editIcon" , "recording" ) ;
DiscordClassModules . HoverCard = BDFDB . WebModules . findByProperties ( "card" , "active" ) ;
DiscordClassModules . IconDirection = BDFDB . WebModules . findByProperties ( "directionDown" , "directionUp" ) ;
DiscordClassModules . ImageWrapper = BDFDB . WebModules . findByProperties ( "clickable" , "imageWrapperBackground" ) ;
DiscordClassModules . InviteModal = BDFDB . WebModules . findByProperties ( "inviteRow" , "modal" ) ;
DiscordClassModules . Item = BDFDB . WebModules . findByProperties ( "item" , "side" , "header" ) ;
DiscordClassModules . ItemLayerContainer = BDFDB . WebModules . findByProperties ( "layer" , "layerContainer" ) ;
DiscordClassModules . Input = BDFDB . WebModules . findByProperties ( "inputMini" , "inputDefault" ) ;
DiscordClassModules . LayerModal = BDFDB . WebModules . findByProperties ( "root" , "small" , "medium" ) ;
DiscordClassModules . Layers = BDFDB . WebModules . findByProperties ( "layer" , "layers" ) ;
DiscordClassModules . LiveTag = BDFDB . WebModules . findByProperties ( "liveRed" , "live" ) ;
DiscordClassModules . LFG = BDFDB . WebModules . findByProperties ( "lfg" , "topSectionHeader" ) ;
DiscordClassModules . Margins = BDFDB . WebModules . findByProperties ( "marginBottom4" , "marginCenterHorz" ) ;
DiscordClassModules . Member = BDFDB . WebModules . findByProperties ( "member" , "ownerIcon" ) ;
DiscordClassModules . MembersWrap = BDFDB . WebModules . findByProperties ( "membersWrap" , "membersGroup" ) ;
DiscordClassModules . Mention = BDFDB . WebModules . findByProperties ( "wrapperHover" , "wrapperNoHover" ) ;
DiscordClassModules . Message = BDFDB . WebModules . findByProperties ( "containerCozy" , "content" ) ;
DiscordClassModules . MessageAccessory = BDFDB . WebModules . findByProperties ( "embedWrapper" , "gifFavoriteButton" ) ;
DiscordClassModules . MessageBody = BDFDB . WebModules . findByProperties ( "buttonContainer" , "isMentioned" ) ;
DiscordClassModules . MessageElements = BDFDB . WebModules . findByProperties ( "messageGroupBlockedBtn" , "dividerRed" ) ;
DiscordClassModules . MessageFile = BDFDB . WebModules . findByProperties ( "cancelButton" , "filenameLinkWrapper" ) ;
DiscordClassModules . MessageMarkup = BDFDB . WebModules . findByProperties ( "markup" ) ;
DiscordClassModules . MessageSystem = BDFDB . WebModules . findByProperties ( "container" , "actionAnchor" ) ;
DiscordClassModules . MessagesPopout = BDFDB . WebModules . findByProperties ( "messageGroupWrapperOffsetCorrection" , "messagesPopout" ) ;
DiscordClassModules . MessagesWrap = BDFDB . WebModules . findByProperties ( "messagesWrapper" , "messageGroupBlocked" ) ;
DiscordClassModules . Modal = BDFDB . WebModules . findByProperties ( "modal" , "sizeLarge" ) ;
DiscordClassModules . ModalDivider = BDFDB . WebModules . find ( module => typeof module [ "divider" ] == "string" && Object . keys ( module ) . length == 1 ) ;
DiscordClassModules . ModalItems = BDFDB . WebModules . findByProperties ( "guildName" , "checkboxContainer" ) ;
DiscordClassModules . ModalMiniContent = BDFDB . WebModules . find ( module => typeof module [ "modal" ] == "string" && typeof module [ "content" ] == "string" && typeof module [ "size" ] == "string" && Object . keys ( module ) . length == 3 ) ;
DiscordClassModules . ModalWrap = BDFDB . WebModules . find ( module => typeof module [ "modal" ] == "string" && typeof module [ "inner" ] == "string" && Object . keys ( module ) . length == 2 ) ;
DiscordClassModules . NameContainer = DiscordClassModules . ContextMenu . subMenuContext ? BDFDB . WebModules . findByProperties ( "nameAndDecorators" , "name" ) : { } ;
DiscordClassModules . NameTag = BDFDB . WebModules . findByProperties ( "bot" , "nameTag" ) ;
DiscordClassModules . Note = BDFDB . WebModules . find ( module => typeof module [ "note" ] == "string" && Object . keys ( module ) . length == 1 ) ;
DiscordClassModules . Notice = BDFDB . WebModules . findByProperties ( "notice" , "noticeFacebook" ) ;
DiscordClassModules . OptionPopout = BDFDB . WebModules . findByProperties ( "container" , "button" , "item" ) ;
DiscordClassModules . PictureInPicture = BDFDB . WebModules . findByProperties ( "pictureInPicture" , "pictureInPictureWindow" ) ;
DiscordClassModules . PillWrapper = BDFDB . WebModules . find ( module => typeof module [ "item" ] == "string" && typeof module [ "wrapper" ] == "string" && Object . keys ( module ) . length == 2 ) ;
DiscordClassModules . PrivateChannel = BDFDB . WebModules . findByProperties ( "channel" , "closeButton" ) ;
DiscordClassModules . PrivateChannelActivity = BDFDB . WebModules . findByProperties ( "activity" , "text" ) ;
DiscordClassModules . PrivateChannelList = BDFDB . WebModules . findByProperties ( "privateChannels" , "searchBar" ) ;
DiscordClassModules . Popout = BDFDB . WebModules . findByProperties ( "popout" , "arrowAlignmentTop" ) ;
DiscordClassModules . PopoutActivity = BDFDB . WebModules . findByProperties ( "ellipsis" , "activityActivityFeed" ) ;
DiscordClassModules . QuickSelect = BDFDB . WebModules . findByProperties ( "quickSelectArrow" , "selected" ) ;
DiscordClassModules . QuickSwitch = BDFDB . WebModules . findByProperties ( "resultFocused" , "guildIconContainer" ) ;
DiscordClassModules . QuickSwitchWrap = BDFDB . WebModules . findByProperties ( "container" , "miscContainer" ) ;
DiscordClassModules . Reactions = BDFDB . WebModules . findByProperties ( "reactionBtn" , "reaction" ) ;
DiscordClassModules . RecentMentions = BDFDB . WebModules . findByProperties ( "recentMentionsFilterPopout" , "mentionFilter" ) ;
DiscordClassModules . Role = BDFDB . WebModules . findByProperties ( "roleCircle" , "roleName" ) ;
DiscordClassModules . Scroller = BDFDB . WebModules . findByProperties ( "firefoxFixScrollFlex" , "scroller" ) ;
DiscordClassModules . SearchBar = BDFDB . WebModules . findByProperties ( "container" , "clear" ) ;
DiscordClassModules . SearchPopout = BDFDB . WebModules . findByProperties ( "datePicker" , "searchResultChannelIconBackground" ) ;
DiscordClassModules . SearchPopoutWrap = BDFDB . WebModules . findByProperties ( "container" , "queryContainer" ) ;
DiscordClassModules . SearchResults = BDFDB . WebModules . findByProperties ( "resultsWrapper" , "searchResults" ) ;
DiscordClassModules . Select = BDFDB . WebModules . findByProperties ( "select" , "error" , "errorMessage" ) ;
DiscordClassModules . SettingsCloseButton = BDFDB . WebModules . findByProperties ( "closeButton" , "keybind" ) ;
DiscordClassModules . SettingsItems = BDFDB . WebModules . findByProperties ( "dividerMini" , "note" ) ;
DiscordClassModules . SettingsTable = BDFDB . WebModules . findByProperties ( "headerOption" , "headerSize" ) ;
DiscordClassModules . SettingsWindow = BDFDB . WebModules . findByProperties ( "contentRegion" , "standardSidebarView" ) ;
DiscordClassModules . Slider = BDFDB . WebModules . findByProperties ( "slider" , "grabber" ) ;
DiscordClassModules . Spoiler = BDFDB . WebModules . findByProperties ( "spoilerContainer" , "hidden" ) ;
DiscordClassModules . Switch = BDFDB . WebModules . findByProperties ( "switchDisabled" , "valueChecked" ) ;
DiscordClassModules . Table = BDFDB . WebModules . findByProperties ( "stickyHeader" , "emptyStateText" ) ;
DiscordClassModules . Text = BDFDB . WebModules . findByProperties ( "defaultColor" , "defaultMarginh1" ) ;
DiscordClassModules . TextColor = BDFDB . WebModules . findByProperties ( "colorStandard" , "colorMuted" , "colorError" ) ;
DiscordClassModules . TextColor2 = BDFDB . WebModules . findByProperties ( "base" , "muted" , "wrapper" ) ;
DiscordClassModules . TextSize = BDFDB . WebModules . findByProperties ( "size10" , "size14" , "size20" ) ;
DiscordClassModules . TextStyle = BDFDB . WebModules . findByProperties ( "large" , "primary" , "selectable" ) ;
DiscordClassModules . TextWeight = BDFDB . WebModules . findByProperties ( "weightBold" , "weightSemiBold" ) ;
DiscordClassModules . Title = BDFDB . WebModules . findByProperties ( "title" , "size18" ) ;
DiscordClassModules . TitleBar = BDFDB . WebModules . findByProperties ( "titleBar" , "wordmark" ) ;
DiscordClassModules . Tooltip = BDFDB . WebModules . findByProperties ( "tooltip" , "tooltipTop" ) ;
DiscordClassModules . Typing = BDFDB . WebModules . findByProperties ( "cooldownWrapper" , "typing" ) ;
DiscordClassModules . UnreadBar = BDFDB . WebModules . findByProperties ( "active" , "bar" , "unread" ) ;
DiscordClassModules . UserPopout = BDFDB . WebModules . findByProperties ( "userPopout" , "headerPlaying" ) ;
DiscordClassModules . UserProfile = BDFDB . WebModules . findByProperties ( "topSectionNormal" , "tabBarContainer" ) ;
DiscordClassModules . Video = BDFDB . WebModules . findByProperties ( "video" , "fullScreen" ) ;
DiscordClassModules . VoiceChannel = BDFDB . WebModules . findByProperties ( "avatarSpeaking" , "voiceUser" ) ;
DiscordClassModules . VoiceChannelList = BDFDB . WebModules . findByProperties ( "list" , "collapsed" ) ;
DiscordClassModules . VoiceDetails = BDFDB . WebModules . findByProperties ( "container" , "customStatusContainer" ) ;
DiscordClassModules . VoiceDetailsPing = BDFDB . WebModules . findByProperties ( "rtcConnectionQualityBad" , "rtcConnectionQualityFine" ) ;
BDFDB . DiscordClassModules = Object . assign ( { } , DiscordClassModules ) ;
var DiscordClasses = {
_bdguild : [ "BDrepo" , "bdGuild" ] ,
_bdguildanimatable : [ "BDrepo" , "bdGuildAnimatable" ] ,
_bdguildaudio : [ "BDrepo" , "bdGuildAudio" ] ,
_bdguildselected : [ "BDrepo" , "bdGuildSelected" ] ,
_bdguildseparator : [ "BDrepo" , "bdGuildSeparator" ] ,
_bdguildunread : [ "BDrepo" , "bdGuildUnread" ] ,
_bdguildvideo : [ "BDrepo" , "bdGuildVideo" ] ,
_bdpillselected : [ "BDrepo" , "bdPillSelected" ] ,
_bdpillunread : [ "BDrepo" , "bdPillUnread" ] ,
_bdv2button : [ "BDv2repo" , "bdButton" ] ,
_bdv2card : [ "BDv2repo" , "bdCard" ] ,
_bdv2hastooltip : [ "BDv2repo" , "bdHasTooltip" ] ,
_bdv2materialdesignicon : [ "BDv2repo" , "bdMaterialDesignIcon" ] ,
_bdv2tooltipopen : [ "BDv2repo" , "vTooltipOpen" ] ,
_repoauthor : [ "BDrepo" , "bdaAuthor" ] ,
_repocheckbox : [ "BDrepo" , "switchCheckbox" ] ,
_repocheckboxchecked : [ "BDrepo" , "switchChecked" ] ,
_repocheckboxinner : [ "BDrepo" , "switch" ] ,
_repocheckboxitem : [ "BDrepo" , "switchItem" ] ,
_repocheckboxwrap : [ "BDrepo" , "switchWrapper" ] ,
_repocontrols : [ "BDrepo" , "bdaControls" ] ,
_repodescription : [ "BDrepo" , "bdaDescription" ] ,
_repodescriptionwrap : [ "BDrepo" , "bdaDescriptionWrap" ] ,
_repofolderbutton : [ "BDrepo" , "bdPfbtn" ] ,
_repofooter : [ "BDrepo" , "bdaFooter" ] ,
_repoheader : [ "BDrepo" , "bdaHeader" ] ,
_repoheadertitle : [ "BDrepo" , "bdaHeaderTitle" ] ,
_repolist : [ "BDrepo" , "bdaSlist" ] ,
_repolink : [ "BDrepo" , "bdaLink" ] ,
_repolinks : [ "BDrepo" , "bdaLinks" ] ,
_reponame : [ "BDrepo" , "bdaName" ] ,
_reposettingsbutton : [ "BDrepo" , "bdaSettingsButton" ] ,
_reposettingsopen : [ "BDrepo" , "settingsOpen" ] ,
_reposettingsclosed : [ "BDrepo" , "settingsClosed" ] ,
_repoversion : [ "BDrepo" , "bdaVersion" ] ,
accountinfo : [ "AccountDetails" , "container" ] ,
accountinfoavatar : [ "AccountDetails" , "avatar" ] ,
accountinfoavatarwrapper : [ "AccountDetails" , "avatarWrapper" ] ,
accountinfobutton : [ "AccountDetailsButtons" , "button" ] ,
accountinfobuttondisabled : [ "AccountDetailsButtons" , "disabled" ] ,
accountinfobuttonenabled : [ "AccountDetailsButtons" , "enabled" ] ,
accountinfodetails : [ "AccountDetails" , "usernameContainer" ] ,
accountinfonametag : [ "AccountDetails" , "nameTag" ] ,
activityfeed : [ "ActivityFeed" , "activityFeed" ] ,
alignbaseline : [ "Flex" , "alignBaseline" ] ,
aligncenter : [ "Flex" , "alignCenter" ] ,
alignend : [ "Flex" , "alignEnd" ] ,
alignstart : [ "Flex" , "alignStart" ] ,
alignstretch : [ "Flex" , "alignStretch" ] ,
anchor : [ "Anchor" , "anchor" ] ,
anchorunderlineonhover : [ "Anchor" , "anchorUnderlineOnHover" ] ,
app : [ "AppOuter" , "app" ] ,
appcontainer : [ "AppBase" , "container" ] ,
appmount : [ "AppMount" , "appMount" ] ,
applayers : [ "AppInner" , "layers" ] ,
applicationstore : [ "ApplicationStore" , "applicationStore" ] ,
appold : [ "AppInner" , "app" ] ,
auditlog : [ "AuditLog" , "auditLog" ] ,
auditloguserhook : [ "AuditLog" , "userHook" ] ,
authbox : [ "AuthBox" , "authBox" ] ,
autocomplete : [ "Autocomplete" , "autocomplete" ] ,
autocomplete2 : [ "ChannelTextArea" , "autocomplete" ] ,
autocompletecontent : [ "Autocomplete" , "content" ] ,
autocompletecontenttitle : [ "Autocomplete" , "contentTitle" ] ,
autocompletedescription : [ "Autocomplete" , "description" ] ,
autocompletedescriptiondiscriminator : [ "Autocomplete" , "descriptionDiscriminator" ] ,
autocompletedescriptionusername : [ "Autocomplete" , "descriptionUsername" ] ,
autocompleteicon : [ "Autocomplete" , "icon" ] ,
autocompleteiconforeground : [ "Autocomplete" , "iconForeground" ] ,
autocompleteinner : [ "Autocomplete" , "autocompleteInner" ] ,
autocompleterow : [ "Autocomplete" , "autocompleteRow" ] ,
autocompleterowhorizontal : [ "Autocomplete" , "autocompleteRowHorizontal" ] ,
autocompleterowvertical : [ "Autocomplete" , "autocompleteRowVertical" ] ,
autocompleteselectable : [ "Autocomplete" , "selectable" ] ,
autocompleteselected : [ "Autocomplete" , "selectorSelected" ] ,
autocompleteselector : [ "Autocomplete" , "selector" ] ,
avatar : [ "Avatar" , "avatar" ] ,
avatarcursordefault : [ "Avatar" , "cursorDefault" ] ,
avataricon : [ "AvatarIcon" , "icon" ] ,
avatariconactivelarge : [ "AvatarIcon" , "iconActiveLarge" ] ,
avatariconactivemedium : [ "AvatarIcon" , "iconActiveMedium" ] ,
avatariconactivemini : [ "AvatarIcon" , "iconActiveMini" ] ,
avatariconactivesmall : [ "AvatarIcon" , "iconActiveSmall" ] ,
avatariconactivexlarge : [ "AvatarIcon" , "iconActiveXLarge" ] ,
avatariconinactive : [ "AvatarIcon" , "iconInactive" ] ,
avatariconsizelarge : [ "AvatarIcon" , "iconSizeLarge" ] ,
avatariconsizemedium : [ "AvatarIcon" , "iconSizeMedium" ] ,
avatariconsizemini : [ "AvatarIcon" , "iconSizeMini" ] ,
avatariconsizesmol : [ "AvatarIcon" , "iconSizeSmol" ] ,
avatariconsizesmall : [ "AvatarIcon" , "iconSizeSmall" ] ,
avatariconsizexlarge : [ "AvatarIcon" , "iconSizeXLarge" ] ,
avatarmask : [ "Avatar" , "mask" ] ,
avatarnoicon : [ "AvatarIcon" , "noIcon" ] ,
avatarpointer : [ "Avatar" , "pointer" ] ,
avatarpointerevents : [ "Avatar" , "pointerEvents" ] ,
avatarwrapper : [ "Avatar" , "wrapper" ] ,
backdrop : [ "Backdrop" , "backdrop" ] ,
badgewrapper : [ "NotFound" , "badgeWrapper" ] ,
bottag : [ "BotTag" , "botTag" ] ,
bottaginvert : [ "BotTag" , "botTagInvert" ] ,
bottagmember : [ "Member" , "botTag" ] ,
bottagmessage : [ "Message" , "botTag" ] ,
bottagmessagecompact : [ "Message" , "botTagCompact" ] ,
bottagmessagecozy : [ "Message" , "botTagCozy" ] ,
bottagnametag : [ "NameTag" , "bot" ] ,
bottagregular : [ "BotTag" , "botTagRegular" ] ,
button : [ "Button" , "button" ] ,
buttoncolorblack : [ "Button" , "colorBlack" ] ,
buttoncolorbrand : [ "Button" , "colorBrand" ] ,
buttoncolorgreen : [ "Button" , "colorGreen" ] ,
buttoncolorgrey : [ "Button" , "colorGrey" ] ,
buttoncolorlink : [ "Button" , "colorLink" ] ,
buttoncolorprimary : [ "Button" , "colorPrimary" ] ,
buttoncolorred : [ "Button" , "colorRed" ] ,
buttoncolortransparent : [ "Button" , "colorTransparent" ] ,
buttoncolorwhite : [ "Button" , "colorWhite" ] ,
buttoncoloryellow : [ "Button" , "colorYellow" ] ,
buttoncontents : [ "Button" , "contents" ] ,
buttondisabledoverlay : [ "Button" , "disabledButtonOverlay" ] ,
buttondisabledwrapper : [ "Button" , "disabledButtonWrapper" ] ,
buttonfullwidth : [ "Button" , "fullWidth" ] ,
buttongrow : [ "Button" , "grow" ] ,
buttonhashover : [ "Button" , "hasHover" ] ,
buttonhoverblack : [ "Button" , "hoverBlack" ] ,
buttonhoverbrand : [ "Button" , "hoverBrand" ] ,
buttonhovergreen : [ "Button" , "hoverGreen" ] ,
buttonhovergrey : [ "Button" , "hoverGrey" ] ,
buttonhoverlink : [ "Button" , "hoverLink" ] ,
buttonhoverprimary : [ "Button" , "hoverPrimary" ] ,
buttonhoverred : [ "Button" , "hoverRed" ] ,
buttonhovertransparent : [ "Button" , "hoverTransparent" ] ,
buttonhoverwhite : [ "Button" , "hoverWhite" ] ,
buttonhoveryellow : [ "Button" , "hoverYellow" ] ,
buttonlookblank : [ "Button" , "lookBlank" ] ,
buttonlookfilled : [ "Button" , "lookFilled" ] ,
buttonlookghost : [ "Button" , "lookGhost" ] ,
buttonlookinverted : [ "Button" , "lookInverted" ] ,
buttonlooklink : [ "Button" , "lookLink" ] ,
buttonlookoutlined : [ "Button" , "lookOutlined" ] ,
buttonsizeicon : [ "Button" , "sizeIcon" ] ,
buttonsizelarge : [ "Button" , "sizeLarge" ] ,
buttonsizemax : [ "Button" , "sizeMax" ] ,
buttonsizemedium : [ "Button" , "sizeMedium" ] ,
buttonsizemin : [ "Button" , "sizeMin" ] ,
buttonsizesmall : [ "Button" , "sizeSmall" ] ,
buttonsizexlarge : [ "Button" , "sizeXlarge" ] ,
buttonspinner : [ "Button" , "spinner" ] ,
buttonspinneritem : [ "Button" , "spinnerItem" ] ,
buttonsubmitting : [ "Button" , "submitting" ] ,
callavatarvideo : [ "Call" , "callAvatarVideo" ] ,
callavatarvoice : [ "Call" , "callAvatarVoice" ] ,
callavatarwrapper : [ "Call" , "callAvatarWrapper" ] ,
callcurrentcontainer : [ "CallCurrent" , "wrapper" ] ,
callcurrentdetails : [ "CallDetails" , "container" ] ,
callcurrentvideo : [ "Video" , "video" ] ,
callincoming : [ "CallIncoming" , "incomingCall" ] ,
callincomingcontainer : [ "CallIncoming" , "container" ] ,
callincominginner : [ "CallIncomingInner" , "incomingCallInner" ] ,
callmembers : [ "CallIncomingInner" , "members" ] ,
callselected : [ "Call" , "selected" ] ,
callvideo : [ "Call" , "video" ] ,
card : [ "Card" , "card" ] ,
cardbrand : [ "Card" , "cardBrand" ] ,
cardbrandoutline : [ "Card" , "cardBrandOutline" ] ,
carddanger : [ "Card" , "cardDanger" ] ,
carddangeroutline : [ "Card" , "cardDangerOutline" ] ,
cardprimary : [ "Card" , "cardPrimary" ] ,
cardprimaryeditable : [ "Card" , "cardPrimaryEditable" ] ,
cardprimaryoutline : [ "Card" , "cardPrimaryOutline" ] ,
cardprimaryoutlineeditable : [ "Card" , "cardPrimaryOutlineEditable" ] ,
cardstore : [ "CardStore" , "card" ] ,
cardstoreinteractive : [ "CardStore" , "interactive" ] ,
cardsuccess : [ "Card" , "cardSuccess" ] ,
cardsuccessoutline : [ "Card" , "cardSuccessOutline" ] ,
cardwarning : [ "Card" , "cardWarning" ] ,
cardwarningoutline : [ "Card" , "cardWarningOutline" ] ,
categoryaddbutton : [ "CategoryContainer" , "addButton" ] ,
categoryaddbuttonicon : [ "CategoryContainer" , "addButtonIcon" ] ,
categorychildren : [ "Category" , "children" ] ,
categoryclickable : [ "Category" , "clickable" ] ,
categorycollapsed : [ "Category" , "collapsed" ] ,
categorycontainerdefault : [ "CategoryContainer" , "containerDefault" ] ,
categoryforcevisible : [ "CategoryContainer" , "forceVisible" ] ,
categoryicon : [ "Category" , "icon" ] ,
categoryiconvisibility : [ "CategoryContainer" , "iconVisibility" ] ,
categorymuted : [ "Category" , "muted" ] ,
categoryname : [ "Category" , "name" ] ,
categorywrapper : [ "Category" , "wrapper" ] ,
changelogadded : [ "ChangeLog" , "added" ] ,
changelogfixed : [ "ChangeLog" , "fixed" ] ,
changelogimproved : [ "ChangeLog" , "improved" ] ,
changelogprogress : [ "ChangeLog" , "added" ] ,
changelogtitle : [ "ChangeLog" , "title" ] ,
channelactionicon : [ "ChannelContainer" , "actionIcon" ] ,
channelchildicon : [ "ChannelContainer" , "iconItem" ] ,
channelchildiconbase : [ "ChannelContainer" , "iconBase" ] ,
channelchildren : [ "Channel" , "children" ] ,
channelcontainerdefault : [ "ChannelContainer" , "containerDefault" ] ,
channelcontent : [ "Channel" , "content" ] ,
channeldisabled : [ "ChannelContainer" , "disabled" ] ,
channelheaderchannelname : [ "ChatWindow" , "channelName" ] ,
channelheaderchildren : [ "HeaderBar" , "children" ] ,
channelheaderdivider : [ "HeaderBar" , "divider" ] ,
channelheaderheaderbar : [ "HeaderBar" , "container" ] ,
channelheaderheaderbarthemed : [ "HeaderBar" , "themed" ] ,
channelheaderheaderbartitle : [ "HeaderBar" , "title" ] ,
channelheadericon : [ "HeaderBar" , "icon" ] ,
channelheadericonbadge : [ "HeaderBar" , "iconBadge" ] ,
channelheadericonclickable : [ "HeaderBar" , "clickable" ] ,
channelheadericonselected : [ "HeaderBar" , "selected" ] ,
channelheadericonwrapper : [ "HeaderBar" , "iconWrapper" ] ,
channelheadertitle : [ "ChatWindow" , "title" ] ,
channelheadertitlewrapper : [ "ChatWindow" , "titleWrapper" ] ,
channelheadersearch : [ "HeaderBarExtras" , "search" ] ,
channelheadersearchbar : [ "HeaderBarSearch" , "searchBar" ] ,
channelheadersearchicon : [ "HeaderBarSearch" , "icon" ] ,
channelheadersearchinner : [ "HeaderBarSearch" , "search" ] ,
channelheadertoolbar : [ "HeaderBar" , "toolbar" ] ,
channelheadertoolbar2 : [ "HeaderBarExtras" , "toolbar" ] ,
channelheadertopic : [ "HeaderBarTopic" , "topic" ] ,
channelheadertopicexpandable : [ "HeaderBarTopic" , "expandable" ] ,
channelicon : [ "Channel" , "icon" ] ,
channeliconvisibility : [ "ChannelContainer" , "iconVisibility" ] ,
channelmentionsbadge : [ "ChannelContainer" , "mentionsBadge" ] ,
channelmodeconnected : [ "Channel" , "modeConnected" ] ,
channelmodelocked : [ "Channel" , "modeLocked" ] ,
channelmodemuted : [ "Channel" , "modeMuted" ] ,
channelmodeselected : [ "Channel" , "modeSelected" ] ,
channelmodeunread : [ "Channel" , "modeUnread" ] ,
channelname : [ "Channel" , "name" ] ,
channelpanel : [ "AppBase" , "activityPanel" ] ,
channelpaneltitle : [ "NotFound" , "channelPanelTitle" ] ,
channelpanels : [ "AppBase" , "panels" ] ,
channels : [ "AppBase" , "sidebar" ] ,
channelselected : [ "ChannelContainer" , "selected" ] ,
channelsscroller : [ "GuildChannels" , "scroller" ] ,
channelsunreadbar : [ "GuildChannels" , "unreadBar" ] ,
channelsunreadbarcontainer : [ "GuildChannels" , "positionedContainer" ] ,
channelsunreadbarbottom : [ "GuildChannels" , "unreadBottom" ] ,
channelsunreadbarunread : [ "GuildChannels" , "unread" ] ,
channelsunreadbartop : [ "GuildChannels" , "unreadTop" ] ,
channelunread : [ "Channel" , "unread" ] ,
channeluserlimit : [ "ChannelLimit" , "wrapper" ] ,
channeluserlimitcontainer : [ "ChannelContainer" , "userLimit" ] ,
channeluserlimittotal : [ "ChannelLimit" , "total" ] ,
channeluserlimitusers : [ "ChannelLimit" , "users" ] ,
channelwrapper : [ "Channel" , "wrapper" ] ,
chat : [ "ChatWindow" , "chat" ] ,
chatbase : [ "AppBase" , "base" ] ,
chatcontent : [ "ChatWindow" , "content" ] ,
chatspacer : [ "AppBase" , "content" ] ,
checkbox : [ "Checkbox" , "checkbox" ] ,
checkboxchecked : [ "Checkbox" , "checked" ] ,
checkboxcontainer : [ "ModalItems" , "checkboxContainer" ] ,
checkboxinput : [ "Checkbox" , "input" ] ,
checkboxinputdefault : [ "Checkbox" , "inputDefault" ] ,
checkboxinputdisabled : [ "Checkbox" , "inputDisabled" ] ,
checkboxround : [ "Checkbox" , "round" ] ,
checkboxwrapper : [ "Checkbox" , "checkboxWrapper" ] ,
checkboxwrapperdisabled : [ "Checkbox" , "checkboxWrapperDisabled" ] ,
clickable : [ "Message" , "clickOverride" ] ,
colorbase : [ "TextColor2" , "base" ] ,
colorerror : [ "TextColor" , "colorError" ] ,
colormuted : [ "TextColor" , "colorMuted" ] ,
colormuted2 : [ "TextColor2" , "muted" ] ,
colorpicker : [ "ColorPicker" , "colorPickerCustom" ] ,
colorpickerhexinput : [ "ColorPicker" , "customColorPickerInput" ] ,
colorpickerhue : [ "ColorPickerInner" , "hue" ] ,
colorpickerinner : [ "ColorPickerInner" , "wrapper" ] ,
colorpickerrow : [ "ColorPicker" , "colorPickerRow" ] ,
colorpickersaturation : [ "ColorPickerInner" , "saturation" ] ,
colorpickerswatch : [ "ColorPicker" , "colorPickerSwatch" ] ,
colorpickerswatches : [ "BDFDB" , "colorPickerSwatches" ] ,
colorpickerswatchesdisabled : [ "BDFDB" , "colorPickerSwatchesDisabled" ] ,
colorpickerswatchcustom : [ "ColorPicker" , "custom" ] ,
colorpickerswatchdefault : [ "ColorPicker" , "default" ] ,
colorpickerswatchdisabled : [ "ColorPicker" , "disabled" ] ,
colorpickerswatchdropper : [ "ColorPicker" , "colorPickerDropper" ] ,
colorpickerswatchdropperfg : [ "ColorPicker" , "colorPickerDropperFg" ] ,
colorpickerswatchnocolor : [ "ColorPicker" , "noColor" ] ,
colorpickerswatchselected : [ "BDFDB" , "colorPickerSwatchSelected" ] ,
colorpickerswatchsingle : [ "BDFDB" , "colorPickerSwatchSingle" ] ,
colorstandard : [ "TextColor" , "colorStandard" ] ,
contentregion : [ "SettingsWindow" , "contentRegion" ] ,
contextmenu : [ "ContextMenu" , "contextMenu" ] ,
contextmenucheckbox : [ "ContextMenuCheckbox" , "checkbox" ] ,
contextmenucheckbox2 : [ "ContextMenu" , "checkbox" ] ,
contextmenucheckboxdisabled : [ "ContextMenuCheckbox" , "disabled" ] ,
contextmenucheckboxinner : [ "ContextMenuCheckbox" , "checkboxInner" ] ,
contextmenucheckboxelement : [ "ContextMenuCheckbox" , "checkboxElement" ] ,
contextmenuhint : [ "ContextMenu" , "hint" ] ,
contextmenuitem : [ "ContextMenu" , "item" ] ,
contextmenuitembrand : [ "ContextMenu" , "brand" ] ,
contextmenuitemclickable : [ "ContextMenu" , "clickable" ] ,
contextmenuitemdanger : [ "ContextMenu" , "danger" ] ,
contextmenuitemdisabled : [ "ContextMenu" , "disabled" ] ,
contextmenuitemgroup : [ "ContextMenu" , "itemGroup" ] ,
contextmenuitemtoggle : [ "ContextMenu" , "itemToggle" ] ,
contextmenuitemselected : [ "ContextMenu" , "selected" ] ,
contextmenuitemslider : [ "ContextMenu" , "itemSlider" ] ,
contextmenuitemsubmenu : [ "ContextMenu" , "itemSubMenu" ] ,
contextmenuitemsubmenucaret : [ "ContextMenu" , "caret" ] ,
contextmenulabel : [ "ContextMenu" , "label" ] ,
contextmenuscroller : [ "ContextMenu" , "scroller" ] ,
contextmenuslider : [ "ContextMenu" , "slider" ] ,
contextmenusubcontext : [ "ContextMenu" , "subMenuContext" ] ,
cooldownwrapper : [ "Typing" , "cooldownWrapper" ] ,
cursordefault : [ "Cursor" , "cursorDefault" ] ,
cursorpointer : [ "Cursor" , "cursorPointer" ] ,
defaultcolor : [ "Text" , "defaultColor" ] ,
description : [ "FormText" , "description" ] ,
directioncolumn : [ "Flex" , "directionColumn" ] ,
directiondown : [ "IconDirection" , "directionDown" ] ,
directionleft : [ "IconDirection" , "directionLeft" ] ,
directionright : [ "IconDirection" , "directionRight" ] ,
directionrow : [ "Flex" , "directionRow" ] ,
directionrowreverse : [ "Flex" , "directionRowReverse" ] ,
directionup : [ "IconDirection" , "directionUp" ] ,
directiontransition : [ "IconDirection" , "transition" ] ,
disabled : [ "SettingsItems" , "disabled" ] ,
discriminator : [ "NameTag" , "discriminator" ] ,
divider : [ "ModalDivider" , "divider" ] ,
dividerdefault : [ "SettingsItems" , "dividerDefault" ] ,
dividermini : [ "SettingsItems" , "dividerMini" ] ,
modaldivider : [ "ModalDivider" , "divider" ] , // REMOVE
modaldividerdefault : [ "SettingsItems" , "dividerDefault" ] , // REMOVE
modaldividermini : [ "SettingsItems" , "dividerMini" ] , // REMOVE
dmchannel : [ "PrivateChannel" , "channel" ] ,
dmchannelactivity : [ "PrivateChannelActivity" , "activity" ] ,
dmchannelactivityicon : [ "PrivateChannelActivity" , "icon" ] ,
dmchannelactivitytext : [ "PrivateChannelActivity" , "text" ] ,
dmchannelclose : [ "PrivateChannel" , "closeButton" ] ,
dmchannelheader : [ "PrivateChannelList" , "header" ] ,
dmchannels : [ "PrivateChannelList" , "privateChannels" ] ,
dmpill : [ "GuildDm" , "pill" ] ,
downloadlink : [ "DownloadLink" , "downloadLink" ] ,
ellipsis : [ "PopoutActivity" , "ellipsis" ] ,
embed : [ "Embed" , "embed" ] ,
embedauthor : [ "Embed" , "embedAuthor" ] ,
embedauthoricon : [ "Embed" , "embedAuthorIcon" ] ,
embedauthorname : [ "Embed" , "embedAuthorName" ] ,
embedauthornamelink : [ "Embed" , "embedAuthorNameLink" ] ,
embedcentercontent : [ "Embed" , "centerContent" ] ,
embedcontent : [ "Embed" , "embedContent" ] ,
embedcontentinner : [ "Embed" , "embedContentInner" ] ,
embeddescription : [ "Embed" , "embedDescription" ] ,
embedfield : [ "Embed" , "embedField" ] ,
embedfieldinline : [ "Embed" , "embedFieldInline" ] ,
embedfieldname : [ "Embed" , "embedFieldName" ] ,
embedfields : [ "Embed" , "embedFields" ] ,
embedfieldvalue : [ "Embed" , "embedFieldValue" ] ,
embedfooter : [ "Embed" , "embedFooter" ] ,
embedfootericon : [ "Embed" , "embedFooterIcon" ] ,
embedfooterseparator : [ "Embed" , "embedFooterSeparator" ] ,
embedfootertext : [ "Embed" , "embedFooterText" ] ,
embedgiftag : [ "Embed" , "embedGIFTag" ] ,
embedgifv : [ "Embed" , "embedGIFV" ] ,
embedhiddenspoiler : [ "Embed" , "hiddenSpoiler" ] ,
embedhighbackgroundopacity : [ "Embed" , "highBackgroundOpacity" ] ,
embediframe : [ "Embed" , "embedIframe" ] ,
embedimage : [ "Embed" , "embedImage" ] ,
embedinner : [ "Embed" , "embedInner" ] ,
embedlink : [ "Embed" , "embedLink" ] ,
embedlowbackgroundopacity : [ "Embed" , "lowBackgroundOpacity" ] ,
embedmargin : [ "Embed" , "embedMargin" ] ,
embedmarginlarge : [ "Embed" , "embedMarginLarge" ] ,
embedmediumbackgroundopacity : [ "Embed" , "mediumBackgroundOpacity" ] ,
embedpill : [ "Embed" , "embedPill" ] ,
embedprovider : [ "Embed" , "embedProvider" ] ,
embedproviderlink : [ "Embed" , "embedProviderLink" ] ,
embedspoilerattachment : [ "Embed" , "spoilerAttachment" ] ,
embedspoilerembed : [ "Embed" , "spoilerEmbed" ] ,
embedspotify : [ "Embed" , "embedSpotify" ] ,
embedthumbnail : [ "Embed" , "embedThumbnail" ] ,
embedtitle : [ "Embed" , "embedTitle" ] ,
embedtitlelink : [ "Embed" , "embedTitleLink" ] ,
embedvideo : [ "Embed" , "embedVideo" ] ,
embedvideoaction : [ "Embed" , "embedVideoAction" ] ,
embedvideoactions : [ "Embed" , "embedVideoActions" ] ,
embedvideoimagecomponent : [ "Embed" , "embedVideoImageComponent" ] ,
embedvideoimagecomponentinner : [ "Embed" , "embedVideoImageComponentInner" ] ,
embedwrapper : [ "MessageAccessory" , "embedWrapper" ] ,
emojipicker : [ "EmojiPicker" , "emojiPicker" ] ,
emojipickeractivity : [ "EmojiPicker" , "activity" ] ,
emojipickerbutton : [ "Reactions" , "reactionBtn" ] ,
emojipickercategories : [ "EmojiPicker" , "categories" ] ,
emojipickercategory : [ "EmojiPicker" , "category" ] ,
emojipickercustom : [ "EmojiPicker" , "custom" ] ,
emojipickerdimmer : [ "EmojiPicker" , "dimmer" ] ,
emojipickerdisabled : [ "EmojiPicker" , "disabled" ] ,
emojipickerdiversityselector : [ "EmojiPicker" , "diversitySelector" ] ,
emojipickeremojiitem : [ "EmojiPicker" , "emojiItem" ] ,
emojipickerflags : [ "EmojiPicker" , "flags" ] ,
emojipickerfood : [ "EmojiPicker" , "food" ] ,
emojipickerheader : [ "EmojiPicker" , "header" ] ,
emojipickeritem : [ "EmojiPicker" , "item" ] ,
emojipickernature : [ "EmojiPicker" , "nature" ] ,
emojipickerobjects : [ "EmojiPicker" , "objects" ] ,
emojipickerpeople : [ "EmojiPicker" , "people" ] ,
emojipickerpopout : [ "EmojiPicker" , "popout" ] ,
emojipickerpremiumpromo : [ "EmojiPicker" , "premiumPromo" ] ,
emojipickerpremiumpromoclose : [ "EmojiPicker" , "premiumPromoClose" ] ,
emojipickerpremiumpromodescription : [ "EmojiPicker" , "premiumPromoDescription" ] ,
emojipickerpremiumpromoimage : [ "EmojiPicker" , "premiumPromoImage" ] ,
emojipickerpremiumpromotitle : [ "EmojiPicker" , "premiumPromoTitle" ] ,
emojipickerrecent : [ "EmojiPicker" , "recent" ] ,
emojipickerrow : [ "EmojiPicker" , "row" ] ,
emojipickersearchbar : [ "EmojiPicker" , "searchBar" ] ,
emojipickerscroller : [ "EmojiPicker" , "scroller" ] ,
emojipickerscrollerwrap : [ "EmojiPicker" , "scrollerWrap" ] ,
emojipickerselected : [ "EmojiPicker" , "selected" ] ,
emojipickerspriteitem : [ "EmojiPicker" , "spriteItem" ] ,
emojipickerstickyheader : [ "EmojiPicker" , "stickyHeader" ] ,
emojipickersymbols : [ "EmojiPicker" , "symbols" ] ,
emojipickertravel : [ "EmojiPicker" , "travel" ] ,
emojipickervisible : [ "EmojiPicker" , "visible" ] ,
fileattachment : [ "File" , "attachment" ] ,
fileattachmentinner : [ "File" , "attachmentInner" ] ,
filecancelbutton : [ "File" , "cancelButton" ] ,
filedownloadbutton : [ "File" , "downloadButton" ] ,
filename : [ "File" , "filename" ] ,
filenamelink : [ "File" , "fileNameLink" ] ,
filenamelinkwrapper : [ "File" , "filenameLinkWrapper" ] ,
filenamewrapper : [ "File" , "filenameWrapper" ] ,
firefoxfixscrollflex : [ "Scroller" , "firefoxFixScrollFlex" ] ,
flex : [ "FlexChild" , "flex" ] ,
flex2 : [ "Flex" , "flex" ] ,
flexcenter : [ "Flex" , "flexCenter" ] ,
flexchild : [ "FlexChild" , "flexChild" ] ,
flexmarginreset : [ "FlexChild" , "flexMarginReset" ] ,
flexspacer : [ "Flex" , "spacer" ] ,
flowerstar : [ "FlowerStar" , "flowerStar" ] ,
flowerstarchild : [ "FlowerStar" , "childContainer" ] ,
flowerstarcontainer : [ "FlowerStar" , "flowerStarContainer" ] ,
formtext : [ "FormText" , "formText" ] ,
friends : [ "Friends" , "container" ] ,
friendscolumn : [ "Friends" , "friendsColumn" ] ,
friendscolumnnamewrap : [ "Friends" , "friendsColumnName" ] ,
friendsrow : [ "Friends" , "friendsRow" ] ,
friendstable : [ "Friends" , "friendsTable" ] ,
friendstableheader : [ "Friends" , "friendsTableHeader" ] ,
friendsusername : [ "Friends" , "username" ] ,
game : [ "Game" , "game" ] ,
gameicon : [ "GameIcon" , "gameIcon" ] ,
gameiconlarge : [ "GameIcon" , "large" ] ,
gameiconmedium : [ "GameIcon" , "medium" ] ,
gameiconsmall : [ "GameIcon" , "small" ] ,
gameiconxsmall : [ "GameIcon" , "xsmall" ] ,
gamelibrary : [ "GameLibrary" , "gameLibrary" ] ,
gamelibrarytable : [ "Table" , "table" ] ,
gamelibrarytableheader : [ "Table" , "header" ] ,
gamelibrarytablestickyheader : [ "Table" , "stickyHeader" ] ,
gamename : [ "Game" , "gameName" ] ,
gamenameinput : [ "Game" , "gameNameInput" ] ,
giffavoritebutton : [ "MessageAccessory" , "gifFavoriteButton" ] ,
giffavoritecolor : [ "GifFavoriteButton" , "gifFavoriteButton" ] ,
giffavoriteicon : [ "GifFavoriteButton" , "icon" ] ,
giffavoriteshowpulse : [ "GifFavoriteButton" , "showPulse" ] ,
giffavoritesize : [ "GifFavoriteButton" , "size" ] ,
giffavoriteselected : [ "GifFavoriteButton" , "selected" ] ,
giftinventory : [ "GiftInventory" , "root" ] ,
goliveactions : [ "GoLiveDetails" , "actions" ] ,
golivebody : [ "GoLiveDetails" , "body" ] ,
goliveclickablegamewrapper : [ "GoLiveDetails" , "clickableGameWrapper" ] ,
golivegameicon : [ "GoLiveDetails" , "gameIcon" ] ,
golivegamename : [ "GoLiveDetails" , "gameName" ] ,
golivegamewrapper : [ "GoLiveDetails" , "gameWrapper" ] ,
golivepanel : [ "GoLiveDetails" , "panel" ] ,
guildbadgebase : [ "Badge" , "base" ] ,
guildbadgeicon : [ "Badge" , "icon" ] ,
guildbadgeiconbadge : [ "Badge" , "iconBadge" ] ,
guildbadgeiconbadge2 : [ "GuildsItems" , "iconBadge" ] ,
guildbadgenumberbadge : [ "Badge" , "numberBadge" ] ,
guildbadgetextbadge : [ "Badge" , "textBadge" ] ,
guildbuttoncontainer : [ "GuildsItems" , "circleButtonMask" ] ,
guildbuttoninner : [ "GuildsItems" , "circleIconButton" ] ,
guildbuttonicon : [ "GuildsItems" , "circleIcon" ] ,
guildbuttonpill : [ "GuildsItems" , "pill" ] ,
guildbuttonselected : [ "GuildsItems" , "selected" ] ,
guildchannels : [ "NotFound" , "guildChannels" ] ,
guildcontainer : [ "GuildServer" , "blobContainer" ] ,
guilddiscovery : [ "GuildDiscovery" , "pageWrapper" ] ,
guildedge : [ "GuildEdges" , "edge" ] ,
guildedgehalf : [ "GuildEdges" , "half" ] ,
guildedgehigher : [ "GuildEdges" , "higher" ] ,
guildedgemiddle : [ "GuildEdges" , "middle" ] ,
guildedgewrapper : [ "GuildEdges" , "wrapper" ] ,
guildserror : [ "GuildsItems" , "guildsError" ] ,
guildserrorinner : [ "GuildsItems" , "errorInner" ] ,
guildfolder : [ "GuildFolder" , "folder" ] ,
guildfolderexpandendbackground : [ "GuildFolder" , "expandedFolderBackground" ] ,
guildfolderexpandendbackgroundcollapsed : [ "GuildFolder" , "collapsed" ] ,
guildfolderexpandendbackgroundhover : [ "GuildFolder" , "hover" ] ,
guildfolderexpandedguilds : [ "GuildFolder" , "expandedGuilds" ] ,
guildfolderguildicon : [ "GuildFolder" , "guildIcon" ] ,
guildfoldericonwrapper : [ "GuildFolder" , "folderIconWrapper" ] ,
guildfoldericonwrapperclosed : [ "GuildFolder" , "closedFolderIconWrapper" ] ,
guildfoldericonwrapperexpanded : [ "GuildFolder" , "expandedFolderIconWrapper" ] ,
guildfolderwrapper : [ "GuildFolder" , "wrapper" ] ,
guildheader : [ "GuildHeader" , "container" ] ,
guildheaderbannerimage : [ "GuildHeader" , "bannerImage" ] ,
guildheaderbannerimagecontainer : [ "GuildHeader" , "animatedContainer" ] ,
guildheaderbannervisible : [ "GuildHeader" , "bannerVisible" ] ,
guildheaderbutton : [ "GuildHeaderButton" , "button" ] ,
guildheaderbuttonopen : [ "GuildHeaderButton" , "open" ] ,
guildheaderclickable : [ "GuildHeader" , "clickable" ] ,
guildheaderhasbanner : [ "GuildHeader" , "hasBanner" ] ,
guildheadericoncontainer : [ "GuildHeader" , "guildIconContainer" ] ,
guildheadericonbgtiernone : [ "GuildHeader" , "iconBackgroundTierNone" ] ,
guildheadericonbgtierone : [ "GuildHeader" , "iconBackgroundTierOne" ] ,
guildheadericonbgtierthree : [ "GuildHeader" , "iconBackgroundTierThree" ] ,
guildheadericonbgtiertwo : [ "GuildHeader" , "iconBackgroundTierTwo" ] ,
guildheadericonpremiumgem : [ "GuildHeader" , "premiumGuildIconGem" ] ,
guildheadericontiernone : [ "GuildHeader" , "iconTierNone" ] ,
guildheadericontierone : [ "GuildHeader" , "iconTierOne" ] ,
guildheadericontierthree : [ "GuildHeader" , "iconTierThree" ] ,
guildheadericontiertwo : [ "GuildHeader" , "iconTierTwo" ] ,
guildheaderheader : [ "GuildHeader" , "header" ] ,
guildheadername : [ "GuildHeader" , "name" ] ,
guildicon : [ "GuildIcon" , "icon" ] ,
guildiconacronym : [ "GuildIcon" , "acronym" ] ,
guildiconchildwrapper : [ "GuildIcon" , "childWrapper" ] ,
guildiconselected : [ "GuildIcon" , "selected" ] ,
guildiconwrapper : [ "GuildIcon" , "wrapper" ] ,
guildinner : [ "Guild" , "wrapper" ] ,
guildinnerwrapper : [ "GuildsItems" , "listItemWrapper" ] ,
guildlowerbadge : [ "Guild" , "lowerBadge" ] ,
guildouter : [ "GuildsItems" , "listItem" ] ,
guildpill : [ "GuildServer" , "pill" ] ,
guildpillitem : [ "PillWrapper" , "item" ] ,
guildpillwrapper : [ "PillWrapper" , "wrapper" ] ,
guildplaceholder : [ "GuildsItems" , "dragInner" ] ,
guildplaceholdermask : [ "GuildsItems" , "placeholderMask" ] ,
guilds : [ "AppBase" , "guilds" ] ,
guildseparator : [ "GuildsItems" , "guildSeparator" ] ,
guildserror : [ "GuildsItems" , "guildsError" ] ,
guildsettingsbannedcard : [ "GuildSettingsBanned" , "bannedUser" ] ,
guildsettingsbanneddiscrim : [ "GuildSettingsBanned" , "discrim" ] ,
guildsettingsbannedusername : [ "GuildSettingsBanned" , "username" ] ,
guildsettingsinvitecard : [ "GuildSettingsInvite" , "inviteSettingsInviteRow" ] ,
guildsettingsinvitechannelname : [ "GuildSettingsInvite" , "channelName" ] ,
guildsettingsinviteusername : [ "GuildSettingsInvite" , "username" ] ,
guildsettingsmembercard : [ "GuildSettingsMember" , "member" ] ,
guildsettingsmembername : [ "GuildSettingsMember" , "name" ] ,
guildsettingsmembernametag : [ "GuildSettingsMember" , "nameTag" ] ,
guildsscroller : [ "GuildsWrapper" , "scroller" ] ,
guildsscrollerwrap : [ "GuildsWrapper" , "scrollerWrap" ] ,
guildsvg : [ "Guild" , "svg" ] ,
guildswrapper : [ "GuildsWrapper" , "wrapper" ] ,
guildswrapperunreadmentionsbar : [ "GuildsWrapper" , "unreadMentionsBar" ] ,
guildswrapperunreadmentionsbarbottom : [ "GuildsWrapper" , "unreadMentionsIndicatorBottom" ] ,
guildswrapperunreadmentionsbartop : [ "GuildsWrapper" , "unreadMentionsIndicatorTop" ] ,
guildupperbadge : [ "Guild" , "upperBadge" ] ,
h1 : [ "Text" , "h1" ] ,
h1defaultmargin : [ "Text" , "defaultMarginh1" ] ,
h2 : [ "Text" , "h2" ] ,
h2defaultmargin : [ "Text" , "defaultMarginh2" ] ,
h3 : [ "Text" , "h3" ] ,
h3defaultmargin : [ "Text" , "defaultMarginh3" ] ,
h4 : [ "Text" , "h4" ] ,
h4defaultmargin : [ "Text" , "defaultMarginh4" ] ,
h5 : [ "Text" , "h5" ] ,
h5defaultmargin : [ "Text" , "defaultMarginh5" ] ,
headertitle : [ "Text" , "title" ] ,
height12 : [ "UserPopout" , "height12" ] ,
height16 : [ "File" , "height16" ] ,
height24 : [ "Title" , "height24" ] ,
height36 : [ "Notice" , "height36" ] ,
highlight : [ "NotFound" , "highlight" ] ,
homebuttonicon : [ "HomeIcon" , "homeIcon" ] ,
homebuttonpill : [ "HomeIcon" , "pill" ] ,
horizontal : [ "FlexChild" , "horizontal" ] ,
horizontal2 : [ "NotFound" , "_" ] ,
horizontalreverse : [ "FlexChild" , "horizontalReverse" ] ,
horizontalreverse2 : [ "NotFound" , "_" ] ,
hotkeybase : [ "NotFound" , "_" ] ,
hotkeybutton : [ "HotKeyRecorder" , "button" ] ,
hotkeybutton2 : [ "NotFound" , "_" ] ,
hotkeycontainer : [ "HotKeyRecorder" , "container" ] ,
hotkeycontainer2 : [ "NotFound" , "_" ] ,
hotkeydisabled : [ "HotKeyRecorder" , "disabled" ] ,
hotkeydisabled2 : [ "NotFound" , "_" ] ,
hotkeyediticon : [ "HotKeyRecorder" , "editIcon" ] ,
hotkeyhasvalue : [ "HotKeyRecorder" , "hasValue" ] ,
hotkeyinput : [ "HotKeyRecorder" , "input" ] ,
hotkeyinput2 : [ "HotKeyRecorder" , "input" ] ,
hotkeylayout : [ "HotKeyRecorder" , "layout" ] ,
hotkeylayout2 : [ "HotKeyRecorder" , "layout" ] ,
hotkeyrecording : [ "HotKeyRecorder" , "recording" ] ,
hotkeyshadowpulse : [ "HotKeyRecorder" , "shadowPulse" ] ,
hotkeytext : [ "HotKeyRecorder" , "text" ] ,
hovercard : [ "HoverCard" , "card" ] ,
hovercardinner : [ "BDFDB" , "cardInner" ] ,
hovercardbutton : [ "NotFound" , "hoverCardButton" ] ,
icon : [ "EmbedActions" , "icon" ] ,
iconactionswrapper : [ "EmbedActions" , "wrapper" ] ,
iconexternal : [ "EmbedActions" , "iconExternal" ] ,
iconexternalmargins : [ "EmbedActions" , "iconExternalMargins" ] ,
iconplay : [ "EmbedActions" , "iconPlay" ] ,
iconwrapper : [ "EmbedActions" , "iconWrapper" ] ,
iconwrapperactive : [ "EmbedActions" , "iconWrapperActive" ] ,
imageaccessory : [ "ImageWrapper" , "imageAccessory" ] ,
imageclickable : [ "ImageWrapper" , "clickable" ] ,
imageerror : [ "ImageWrapper" , "imageError" ] ,
imageplaceholder : [ "ImageWrapper" , "imagePlaceholder" ] ,
imageplaceholderoverlay : [ "ImageWrapper" , "imagePlaceholderOverlay" ] ,
imagewrapper : [ "ImageWrapper" , "imageWrapper" ] ,
imagewrapperbackground : [ "ImageWrapper" , "imageWrapperBackground" ] ,
imagewrapperinner : [ "ImageWrapper" , "imageWrapperInner" ] ,
imagezoom : [ "ImageWrapper" , "imageZoom" ] ,
itemlayer : [ "ItemLayerContainer" , "layer" ] ,
itemlayercontainer : [ "ItemLayerContainer" , "layerContainer" ] ,
input : [ "Input" , "input" ] ,
inputdefault : [ "Input" , "inputDefault" ] ,
inputdisabled : [ "Input" , "disabled" ] ,
inputeditable : [ "Input" , "editable" ] ,
inputerror : [ "Input" , "error" ] ,
inputfocused : [ "Input" , "focused" ] ,
inputmini : [ "Input" , "inputMini" ] ,
inputsuccess : [ "Input" , "success" ] ,
inputwrapper : [ "Input" , "inputWrapper" ] ,
invitemodal : [ "InviteModal" , "modal" ] ,
invitemodalinviterow : [ "InviteModal" , "inviteRow" ] ,
invitemodalinviterowname : [ "InviteModal" , "inviteRowName" ] ,
invitemodalwrapper : [ "InviteModal" , "wrapper" ] ,
justifycenter : [ "Flex" , "justifyCenter" ] ,
justifyend : [ "Flex" , "justifyEnd" ] ,
justifystart : [ "Flex" , "justifyStart" ] ,
large : [ "TextStyle" , "large" ] ,
layermodal : [ "LayerModal" , "root" ] ,
layermodallarge : [ "LayerModal" , "large" ] ,
layermodalmedium : [ "LayerModal" , "medium" ] ,
layermodalsmall : [ "LayerModal" , "small" ] ,
layer : [ "Layers" , "layer" ] ,
layerbase : [ "Layers" , "baseLayer" ] ,
layers : [ "Layers" , "layers" ] ,
layersbg : [ "Layers" , "bg" ] ,
lfg : [ "LFG" , "lfg" ] ,
livetag : [ "LiveTag" , "live" ] ,
livetaggray : [ "LiveTag" , "liveGray" ] ,
livetaglarge : [ "LiveTag" , "liveLarge" ] ,
livetagred : [ "LiveTag" , "liveRed" ] ,
livetagsmall : [ "LiveTag" , "liveSmall" ] ,
loginscreen : [ "NotFound" , "loginScreen" ] ,
marginbottom4 : [ "Margins" , "marginBottom4" ] ,
marginbottom8 : [ "Margins" , "marginBottom8" ] ,
marginbottom20 : [ "Margins" , "marginBottom20" ] ,
marginbottom40 : [ "Margins" , "marginBottom40" ] ,
marginbottom60 : [ "Margins" , "marginBottom60" ] ,
margincenterhorz : [ "Margins" , "marginCenterHorz" ] ,
marginleft4 : [ "Autocomplete" , "marginLeft4" ] ,
marginleft8 : [ "Autocomplete" , "marginLeft8" ] ,
marginreset : [ "Margins" , "marginReset" ] ,
margintop4 : [ "Margins" , "marginTop4" ] ,
margintop8 : [ "Margins" , "marginTop8" ] ,
margintop20 : [ "Margins" , "marginTop20" ] ,
margintop40 : [ "Margins" , "marginTop40" ] ,
margintop60 : [ "Margins" , "marginTop60" ] ,
medium : [ "TextStyle" , "medium" ] ,
member : [ "Member" , "member" ] ,
membericon : [ "Member" , "icon" ] ,
memberownericon : [ "Member" , "ownerIcon" ] ,
memberpremiumicon : [ "Member" , "premiumIcon" ] ,
members : [ "MembersWrap" , "members" ] ,
membersgroup : [ "MembersWrap" , "membersGroup" ] ,
memberswrap : [ "MembersWrap" , "membersWrap" ] ,
memberusername : [ "Member" , "roleColor" ] ,
mention : [ "NotFound" , "mention" ] ,
mentionwrapper : [ "Mention" , "wrapper" ] ,
mentionwrapperhover : [ "Mention" , "wrapperHover" ] ,
mentionwrappernohover : [ "Mention" , "wrapperNoHover" ] ,
messageaccessory : [ "MessageAccessory" , "container" ] ,
messageaccessorycompact : [ "MessageAccessory" , "containerCompact" ] ,
messageaccessorycozy : [ "MessageAccessory" , "containerCozy" ] ,
messageavatar : [ "Message" , "avatar" ] ,
messagebody : [ "MessageBody" , "container" ] ,
messagebodycompact : [ "MessageBody" , "containerCompact" ] ,
messagebodycozy : [ "MessageBody" , "containerCozy" ] ,
messagebuttoncontainer : [ "Message" , "buttonContainer" ] ,
messagebuttoncontainerouter : [ "MessageBody" , "buttonContainer" ] ,
messagecompact : [ "Message" , "messageCompact" ] ,
messagecontent : [ "Message" , "content" ] ,
messagecontentcompact : [ "Message" , "contentCompact" ] ,
messagecontentcozy : [ "Message" , "contentCozy" ] ,
messagedivider : [ "Message" , "divider" ] ,
messagedividerenabled : [ "Message" , "dividerEnabled" ] ,
messageedited : [ "MessageBody" , "edited" ] ,
messagebarbase : [ "MessageElements" , "barBase" ] ,
messagebarbuttonalt : [ "MessageElements" , "barButtonAlt" ] ,
messagebarbuttonbase : [ "MessageElements" , "barButtonBase" ] ,
messagebarbuttonicon : [ "MessageElements" , "barButtonIcon" ] ,
messagebarbuttonmain : [ "MessageElements" , "barButtonMain" ] ,
messagebarhasmore : [ "MessageElements" , "hasMore" ] ,
messagebarjumptopresentbar : [ "MessageElements" , "jumpToPresentBar" ] ,
messagebarloadingmore : [ "MessageElements" , "loadingMore" ] ,
messagebarnewmessagesbar : [ "MessageElements" , "newMessagesBar" ] ,
messagebarspan : [ "MessageElements" , "span" ] ,
messagebarspinner : [ "MessageElements" , "spinner" ] ,
messagebarspinneritem : [ "MessageElements" , "spinnerItem" ] ,
messagegroup : [ "Message" , "container" ] ,
messagegroupblocked : [ "MessageElements" , "messageGroupBlocked" ] ,
messagegroupblockedbtn : [ "MessageElements" , "messageGroupBlockedBtn" ] ,
messagegroupblockedrevealed : [ "MessageElements" , "revealed" ] ,
messagegroupcozy : [ "Message" , "containerCozy" ] ,
messagegroupcompact : [ "Message" , "containerCompact" ] ,
messagegroupwrapper : [ "MessagesPopout" , "messageGroupWrapper" ] ,
messagegroupwrapperoffsetcorrection : [ "MessagesPopout" , "messageGroupWrapperOffsetCorrection" ] ,
messageheadercompact : [ "Message" , "headerCompact" ] ,
messageheadercozy : [ "Message" , "headerCozy" ] ,
messageheadercozymeta : [ "Message" , "headerCozyMeta" ] ,
messagelocalbotmessage : [ "Message" , "localBotMessage" ] ,
messagemarkup : [ "MessageMarkup" , "markup" ] ,
messagemarkupiscompact : [ "MessageBody" , "isCompact" ] ,
messages : [ "MessagesWrap" , "messages" ] ,
messagespopout : [ "MessagesPopout" , "messagesPopout" ] ,
messagespopoutaccessories : [ "MessagesPopout" , "accessories" ] ,
messagespopoutactionbuttons : [ "MessagesPopout" , "actionButtons" ] ,
messagespopoutbody : [ "MessagesPopout" , "body" ] ,
messagespopoutbottom : [ "MessagesPopout" , "bottom" ] ,
messagespopoutchannelname : [ "MessagesPopout" , "channelName" ] ,
messagespopoutchannelseparator : [ "MessagesPopout" , "channelSeparator" ] ,
messagespopoutclosebutton : [ "MessagesPopout" , "closeButton" ] ,
messagespopoutcomment : [ "MessagesPopout" , "comment" ] ,
messagespopoutcontainercompactbounded : [ "Message" , "containerCompactBounded" ] ,
messagespopoutcontainercozybounded : [ "Message" , "containerCozyBounded" ] ,
messagespopoutemptyplaceholder : [ "MessagesPopout" , "emptyPlaceholder" ] ,
messagespopoutfooter : [ "MessagesPopout" , "footer" ] ,
messagespopoutguildname : [ "MessagesPopout" , "guildName" ] ,
messagespopouthasmore : [ "MessagesPopout" , "hasMore" ] ,
messagespopouthasmorebutton : [ "MessagesPopout" , "hasMoreButton" ] ,
messagespopoutheader : [ "MessagesPopout" , "header" ] ,
messagespopouthidden : [ "MessagesPopout" , "hidden" ] ,
messagespopoutimage : [ "MessagesPopout" , "image" ] ,
messagespopoutjumpbutton : [ "MessagesPopout" , "jumpButton" ] ,
messagespopoutloading : [ "MessagesPopout" , "loading" ] ,
messagespopoutloadingmore : [ "MessagesPopout" , "loadingMore" ] ,
messagespopoutloadingplaceholder : [ "MessagesPopout" , "loadingPlaceholder" ] ,
messagespopoutmessagegroupcozy : [ "MessagesPopout" , "messageGroupCozy" ] ,
messagespopoutmessagegroupwrapper : [ "MessagesPopout" , "messageGroupWrapper" ] ,
messagespopoutmessagegroupwrapperoffsetcorrection : [ "MessagesPopout" , "messageGroupWrapperOffsetCorrection" ] ,
messagespopoutscrollingfooterwrap : [ "MessagesPopout" , "scrollingFooterWrap" ] ,
messagespopoutspinner : [ "MessagesPopout" , "spinner" ] ,
messagespopouttext : [ "MessagesPopout" , "text" ] ,
messagespopouttip : [ "MessagesPopout" , "tip" ] ,
messagespopouttitle : [ "MessagesPopout" , "title" ] ,
messagespopoutvisible : [ "MessagesPopout" , "visible" ] ,
messagespopoutwrap : [ "MessagesPopout" , "messagesPopoutWrap" ] ,
messageswrapper : [ "MessagesWrap" , "messagesWrapper" ] ,
messagesystem : [ "MessageSystem" , "container" ] ,
messagesystemcontent : [ "MessageSystem" , "content" ] ,
messagetimedivider : [ "MessageElements" , "divider" ] ,
messagetimedividerred : [ "MessageElements" , "dividerRed" ] ,
messagetimedividercontent : [ "MessageElements" , "dividerContent" ] ,
messagetimestampcompact : [ "Message" , "timestampCompact" ] ,
messagetimestampcompactismentioned : [ "Message" , "timestampCompactIsMentioned" ] ,
messagetimestampcozy : [ "Message" , "timestampCozy" ] ,
messageuploadcancel : [ "MessageFile" , "cancelButton" ] ,
messageusername : [ "Message" , "username" ] ,
modal : [ "ModalWrap" , "modal" ] ,
modalclose : [ "Modal" , "close" ] ,
modalcontent : [ "Modal" , "content" ] ,
modalfooter : [ "Modal" , "footer" ] ,
modalguildname : [ "ModalItems" , "guildName" ] ,
modalheader : [ "Modal" , "header" ] ,
modalheaderhassibling : [ "BDFDB" , "modalHeaderHasSibling" ] ,
modalinner : [ "ModalWrap" , "inner" ] ,
modalmini : [ "ModalMiniContent" , "modal" ] ,
modalminicontent : [ "ModalMiniContent" , "content" ] ,
modalminisize : [ "ModalMiniContent" , "size" ] ,
modalminitext : [ "HeaderBarTopic" , "content" ] ,
modalseparator : [ "Modal" , "separator" ] ,
modalsizelarge : [ "Modal" , "sizeLarge" ] ,
modalsizemedium : [ "Modal" , "sizeMedium" ] ,
modalsizesmall : [ "Modal" , "sizeSmall" ] ,
modalsub : [ "Modal" , "modal" ] ,
modalsubinner : [ "Modal" , "inner" ] ,
modaltabcontent : [ "BDFDB" , "modalTabContent" ] ,
modaltabcontentopen : [ "BDFDB" , "modalTabContentOpen" ] ,
modedefault : [ "FormText" , "modeDefault" ] ,
modedisabled : [ "FormText" , "modeDisabled" ] ,
modeselectable : [ "FormText" , "modeSelectable" ] ,
namecontainer : [ "NameContainer" , "container" ] ,
namecontainerclickable : [ "NameContainer" , "clickable" ] ,
namecontainercontent : [ "NameContainer" , "content" ] ,
namecontainerlayout : [ "NameContainer" , "layout" ] ,
namecontainername : [ "NameContainer" , "name" ] ,
namecontainernamecontainer : [ "NotFound" , "nameContainerNameContainer" ] ,
namecontainernamewrapper : [ "NameContainer" , "nameAndDecorators" ] ,
namecontainerselected : [ "NameContainer" , "selected" ] ,
nametag : [ "NameTag" , "nameTag" ] ,
nochannel : [ "ChatWindow" , "noChannel" ] ,
notice : [ "Notice" , "notice" ] ,
noticebrand : [ "Notice" , "noticeBrand" ] ,
noticebutton : [ "Notice" , "button" ] ,
noticedanger : [ "Notice" , "noticeDanger" ] ,
noticedefault : [ "Notice" , "noticeDefault" ] ,
noticedismiss : [ "Notice" , "dismiss" ] ,
noticefacebook : [ "Notice" , "noticeFacebook" ] ,
noticeicon : [ "Notice" , "icon" ] ,
noticeiconandroid : [ "Notice" , "iconAndroid" ] ,
noticeiconapple : [ "Notice" , "iconApple" ] ,
noticeiconwindows : [ "Notice" , "iconWindows" ] ,
noticeinfo : [ "Notice" , "noticeInfo" ] ,
noticeplatformicon : [ "Notice" , "platformIcon" ] ,
noticepremium : [ "Notice" , "noticePremium" ] ,
noticepremiumaction : [ "Notice" , "premiumAction" ] ,
noticepremiumgrandfathered : [ "Notice" , "noticePremiumGrandfathered" ] ,
noticepremiumlogo : [ "Notice" , "premiumLogo" ] ,
noticepremiumtext : [ "Notice" , "premiumText" ] ,
noticerichpresence : [ "Notice" , "noticeRichPresence" ] ,
noticespotify : [ "Notice" , "noticeSpotify" ] ,
noticestreamer : [ "Notice" , "noticeStreamerMode" ] ,
noticesuccess : [ "Notice" , "noticeSuccess" ] ,
noticesurvey : [ "Notice" , "noticeSurvey" ] ,
note : [ "SettingsItems" , "note" ] ,
nowrap : [ "Flex" , "noWrap" ] ,
optionpopout : [ "OptionPopout" , "container" ] ,
optionpopoutbutton : [ "OptionPopout" , "button" ] ,
optionpopoutbuttonicon : [ "OptionPopout" , "icon" ] ,
optionpopoutitem : [ "OptionPopout" , "item" ] ,
overflowellipsis : [ "BDFDB" , "overflowEllipsis" ] ,
pictureinpicture : [ "PictureInPicture" , "pictureInPicture" ] ,
pictureinpicturewindow : [ "PictureInPicture" , "pictureInPictureWindow" ] ,
popout : [ "Popout" , "popout" ] ,
popoutarrowalignmenttop : [ "Popout" , "arrowAlignmentTop" ] ,
popoutbody : [ "Popout" , "body" ] ,
popoutbottom : [ "Popout" , "popoutBottom" ] ,
popoutbottomleft : [ "Popout" , "popoutBottomLeft" ] ,
popoutbottomright : [ "Popout" , "popoutBottomRight" ] ,
popoutfooter : [ "Popout" , "footer" ] ,
popoutheader : [ "Popout" , "header" ] ,
popoutinvert : [ "Popout" , "popoutInvert" ] ,
popoutleft : [ "Popout" , "popoutLeft" ] ,
popoutnoarrow : [ "Popout" , "noArrow" ] ,
popoutnoshadow : [ "Popout" , "noShadow" ] ,
popouts : [ "Popout" , "popouts" ] ,
popoutsubtitle : [ "Popout" , "subtitle" ] ,
popoutthemedpopout : [ "Popout" , "themedPopout" ] ,
popouttip : [ "Popout" , "tip" ] ,
popouttitle : [ "Popout" , "title" ] ,
popouttop : [ "Popout" , "popoutTop" ] ,
popouttopleft : [ "Popout" , "popoutTopLeft" ] ,
popouttopright : [ "Popout" , "popoutTopRight" ] ,
primary : [ "TextStyle" , "primary" ] ,
quickselect : [ "QuickSelect" , "quickSelect" ] ,
quickselectarrow : [ "QuickSelect" , "quickSelectArrow" ] ,
quickselectclick : [ "QuickSelect" , "quickSelectClick" ] ,
quickselectlabel : [ "QuickSelect" , "quickSelectLabel" ] ,
quickselectpopout : [ "QuickSelect" , "quickSelectPopout" ] ,
quickselectpopoutoption : [ "QuickSelect" , "quickSelectPopoutOption" ] ,
quickselectpopoutscroll : [ "QuickSelect" , "quickSelectPopoutScroll" ] ,
quickselectscroller : [ "QuickSelect" , "quickSelectScroller" ] ,
quickselectselected : [ "QuickSelect" , "selected" ] ,
quickselectvalue : [ "QuickSelect" , "quickSelectValue" ] ,
quickswitcher : [ "QuickSwitchWrap" , "quickswitcher" ] ,
quickswitchresult : [ "QuickSwitch" , "result" ] ,
quickswitchresultfocused : [ "QuickSwitch" , "resultFocused" ] ,
quickswitchresultguildicon : [ "QuickSwitch" , "guildIcon" ] ,
quickswitchresultmatch : [ "QuickSwitch" , "match" ] ,
quickswitchresultmisccontainer : [ "QuickSwitchWrap" , "miscContainer" ] ,
quickswitchresultname : [ "QuickSwitch" , "name" ] ,
quickswitchresultnote : [ "QuickSwitch" , "note" ] ,
quickswitchresultusername : [ "QuickSwitch" , "username" ] ,
recentmentionsfilterpopout : [ "RecentMentions" , "recentMentionsFilterPopout" ] ,
recentmentionsheader : [ "RecentMentions" , "header" ] ,
recentmentionsloadingmore : [ "RecentMentions" , "loadingMore" ] ,
recentmentionsmentionfilter : [ "RecentMentions" , "mentionFilter" ] ,
recentmentionsmentionfilterlabel : [ "RecentMentions" , "label" ] ,
recentmentionsmentionfiltervalue : [ "RecentMentions" , "value" ] ,
recentmentionspopout : [ "RecentMentions" , "recentMentionsPopout" ] ,
reset : [ "CardStatus" , "reset" ] ,
scroller : [ "Scroller" , "scroller" ] ,
scrollerfade : [ "Scroller" , "scrollerFade" ] ,
scrollersystempad : [ "Scroller" , "systemPad" ] ,
scrollerthemed : [ "Scroller" , "scrollerThemed" ] ,
scrollerthemeghost : [ "Scroller" , "themeGhost" ] ,
scrollerthemeghosthairline : [ "Scroller" , "themeGhostHairline" ] ,
scrollerthemeghosthairlinechannels : [ "Scroller" , "themeGhostHairlineChannels" ] ,
scrollerwrap : [ "Scroller" , "scrollerWrap" ] ,
searchbar : [ "SearchBar" , "container" ] ,
searchbarclear : [ "SearchBar" , "clear" ] ,
searchbarclose : [ "SearchBar" , "close" ] ,
searchbaricon : [ "SearchBar" , "icon" ] ,
searchbariconlayout : [ "SearchBar" , "iconLayout" ] ,
searchbariconwrap : [ "SearchBar" , "iconContainer" ] ,
searchbarinner : [ "SearchBar" , "inner" ] ,
searchbarinput : [ "SearchBar" , "input" ] ,
searchbarlarge : [ "SearchBar" , "large" ] ,
searchbarmedium : [ "SearchBar" , "medium" ] ,
searchbarsmall : [ "SearchBar" , "small" ] ,
searchbartag : [ "SearchBar" , "tag" ] ,
searchbarvisible : [ "SearchBar" , "visible" ] ,
searchpopout : [ "SearchPopoutWrap" , "container" ] ,
searchpopoutanswer : [ "SearchPopout" , "answer" ] ,
searchpopoutdatepicker : [ "SearchPopout" , "datePicker" ] ,
searchpopoutdatepickerhint : [ "SearchPopout" , "datePickerHint" ] ,
searchpopoutdmaddpopout : [ "DmAddPopout" , "popout" ] ,
searchpopoutddmaddfriend : [ "DmAddPopoutItems" , "friend" ] ,
searchpopoutddmaddfriendwrapper : [ "DmAddPopoutItems" , "friendWrapper" ] ,
searchpopoutdisplayavatar : [ "SearchPopout" , "displayAvatar" ] ,
searchpopoutdisplayusername : [ "SearchPopout" , "displayUsername" ] ,
searchpopoutdisplayednick : [ "SearchPopout" , "displayedNick" ] ,
searchpopoutfilter : [ "SearchPopout" , "filter" ] ,
searchpopoutheader : [ "SearchPopout" , "header" ] ,
searchpopouthint : [ "SearchPopout" , "hint" ] ,
searchpopouthintvalue : [ "SearchPopout" , "hintValue" ] ,
searchpopoutlinksource : [ "SearchPopout" , "linkSource" ] ,
searchpopoutnontext : [ "SearchPopout" , "nonText" ] ,
searchpopoutoption : [ "SearchPopout" , "option" ] ,
searchpopoutplusicon : [ "SearchPopout" , "plusIcon" ] ,
searchpopoutresultchannel : [ "SearchPopout" , "resultChannel" ] ,
searchpopoutresultsgroup : [ "SearchPopout" , "resultsGroup" ] ,
searchpopoutsearchclearhistory : [ "SearchPopout" , "searchClearHistory" ] ,
searchpopoutsearchlearnmore : [ "SearchPopout" , "searchLearnMore" ] ,
searchpopoutsearchoption : [ "SearchPopout" , "searchOption" ] ,
searchpopoutsearchresultchannelcategory : [ "SearchPopout" , "searchResultChannelCategory" ] ,
searchpopoutsearchresultchannelicon : [ "SearchPopout" , "searchResultChannelIcon" ] ,
searchpopoutsearchresultchanneliconbackground : [ "SearchPopout" , "searchResultChannelIconBackground" ] ,
searchpopoutselected : [ "SearchPopout" , "selected" ] ,
searchpopoutuser : [ "SearchPopout" , "user" ] ,
searchresults : [ "SearchResults" , "searchResults" ] ,
searchresultschannelname : [ "SearchResults" , "channelName" ] ,
searchresultspagination : [ "SearchResults" , "pagination" ] ,
searchresultspaginationdisabled : [ "SearchResults" , "disabled" ] ,
searchresultspaginationnext : [ "SearchResults" , "paginationNext" ] ,
searchresultspaginationprevious : [ "SearchResults" , "paginationPrevious" ] ,
searchresultssearchheader : [ "SearchResults" , "searchHeader" ] ,
searchresultswrap : [ "SearchResults" , "searchResultsWrap" ] ,
searchresultswrapper : [ "SearchResults" , "resultsWrapper" ] ,
select : [ "NotFound" , "select" ] ,
selectable : [ "TextStyle" , "selectable" ] ,
selectarrow : [ "NotFound" , "selectArrow" ] ,
selectarrowcontainer : [ "NotFound" , "selectArrowContainer" ] ,
selectarrowcontainerdark : [ "NotFound" , "selectArrowContainerDark" ] ,
selectarrowcontainerlight : [ "NotFound" , "selectArrowContainerLight" ] ,
selectarrowzone : [ "NotFound" , "selectArrowZone" ] ,
selectcontrol : [ "NotFound" , "selectControl" ] ,
selectcontroldark : [ "NotFound" , "selectControlDark" ] ,
selectcontrollight : [ "NotFound" , "selectControlLight" ] ,
selectdummyinput : [ "NotFound" , "selectDummyInput" ] ,
selecthasvalue : [ "NotFound" , "selectHasValue" ] ,
selectisopen : [ "NotFound" , "selectIsOpen" ] ,
selectmenu : [ "NotFound" , "selectMenu" ] ,
selectmenuouter : [ "NotFound" , "selectMenuOuter" ] ,
selectmenuouterdark : [ "NotFound" , "selectMenuOuterDark" ] ,
selectmenuouterlight : [ "NotFound" , "selectMenuOuterLight" ] ,
selectoption : [ "NotFound" , "selectOption" ] ,
selectoptiondark : [ "NotFound" , "selectOptionDark" ] ,
selectoptionlight : [ "NotFound" , "selectOptionLight" ] ,
selectoptionhoverdark : [ "NotFound" , "selectOptionHoverDark" ] ,
selectoptionhoverlight : [ "NotFound" , "selectOptionHoverLight" ] ,
selectoptionselectdark : [ "NotFound" , "selectOptionSelectDark" ] ,
selectoptionselectlight : [ "NotFound" , "selectOptionSelectLight" ] ,
selectselected : [ "NotFound" , "selectIsSelected" ] ,
selectsingle : [ "NotFound" , "selectSingle" ] ,
selectsingledark : [ "NotFound" , "selectSingleDark" ] ,
selectsinglelight : [ "NotFound" , "selectSingleLight" ] ,
selectvalue : [ "NotFound" , "selectValue" ] ,
selectwrap : [ "Select" , "select" ] ,
settingsclosebutton : [ "SettingsCloseButton" , "closeButton" ] ,
settingsclosebuttoncontainer : [ "SettingsCloseButton" , "container" ] ,
settingsheader : [ "Item" , "header" ] ,
settingsitem : [ "Item" , "item" ] ,
settingsitemselected : [ "Item" , "selected" ] ,
settingsitemthemed : [ "Item" , "themed" ] ,
settingsseparator : [ "Item" , "separator" ] ,
settingstabbar : [ "Friends" , "tabBar" ] ,
settingstabbarbadge : [ "Friends" , "badge" ] ,
settingstabbartoppill : [ "Item" , "topPill" ] ,
sidebarregion : [ "SettingsWindow" , "sidebarRegion" ] ,
sinkinteractions : [ "Message" , "disableInteraction" ] ,
size10 : [ "TextSize" , "size10" ] ,
size12 : [ "TextSize" , "size12" ] ,
size14 : [ "TextSize" , "size14" ] ,
size16 : [ "TextSize" , "size16" ] ,
size20 : [ "TextSize" , "size20" ] ,
size24 : [ "TextSize" , "size24" ] ,
size32 : [ "TextSize" , "size32" ] ,
slider : [ "Slider" , "slider" ] ,
sliderbar : [ "Slider" , "bar" ] ,
sliderbarfill : [ "Slider" , "barFill" ] ,
sliderbubble : [ "Slider" , "bubble" ] ,
sliderdisabled : [ "Slider" , "disabled" ] ,
slidergrabber : [ "Slider" , "grabber" ] ,
sliderinput : [ "Slider" , "input" ] ,
slidermark : [ "Slider" , "mark" ] ,
slidermarkdash : [ "Slider" , "markDash" ] ,
slidermarkdashsimple : [ "Slider" , "markDashSimple" ] ,
slidermarkvalue : [ "Slider" , "markValue" ] ,
slidermini : [ "Slider" , "mini" ] ,
slidertrack : [ "Slider" , "track" ] ,
spoilercontainer : [ "Spoiler" , "spoilerContainer" ] ,
spoilerhidden : [ "Spoiler" , "hidden" ] ,
spoilertext : [ "Spoiler" , "spoilerText" ] ,
spoilerwarning : [ "Spoiler" , "spoilerWarning" ] ,
small : [ "TextStyle" , "small" ] ,
splashbackground : [ "NotFound" , "splashBackground" ] ,
standardsidebarview : [ "SettingsWindow" , "standardSidebarView" ] ,
status : [ "Avatar" , "status" ] ,
subtext : [ "NotFound" , "subtext" ] ,
switch : [ "Switch" , "switch" ] ,
switchdisabled : [ "Switch" , "switchDisabled" ] ,
switchenabled : [ "Switch" , "switchEnabled" ] ,
switchinner : [ "Switch" , "checkbox" ] ,
switchinnerdisabled : [ "Switch" , "checkboxDisabled" ] ,
switchinnerenabled : [ "Switch" , "checkboxEnabled" ] ,
switchsize : [ "Switch" , "size" ] ,
switchsizedefault : [ "Switch" , "sizeDefault" ] ,
switchsizemini : [ "Switch" , "sizeMini" ] ,
switchthemeclear : [ "Switch" , "themeClear" ] ,
switchthemedefault : [ "Switch" , "themeDefault" ] ,
switchvalue : [ "Switch" , "value" ] ,
switchvaluechecked : [ "Switch" , "valueChecked" ] ,
switchvalueunchecked : [ "Switch" , "valueUnchecked" ] ,
systempad : [ "Scroller" , "systemPad" ] ,
tabbar : [ "UserProfile" , "tabBar" ] ,
tabbarcontainer : [ "UserProfile" , "tabBarContainer" ] ,
tabbarheader : [ "RecentMentions" , "tabBar" ] ,
tabbarheadercontainer : [ "RecentMentions" , "headerTabBarWrapper" ] ,
tabbarheaderitem : [ "RecentMentions" , "tabBarItem" ] ,
tabbaritem : [ "UserProfile" , "tabBarItem" ] ,
tabbartop : [ "Item" , "top" ] ,
tableheader : [ "SettingsTable" , "header" ] ,
tableheadername : [ "SettingsTable" , "headerName" ] ,
tableheaderoption : [ "SettingsTable" , "headerOption" ] ,
tableheadersize : [ "SettingsTable" , "headerSize" ] ,
textarea : [ "ChannelTextArea" , "textArea" ] ,
textareaattachbutton : [ "ChannelTextArea" , "attachButton" ] ,
textareaattachbuttondivider : [ "ChannelTextArea" , "attachButtonDivider" ] ,
textareaattachbuttoninner : [ "ChannelTextArea" , "attachButtonInner" ] ,
textareaattachbuttonplus : [ "ChannelTextArea" , "attachButtonPlus" ] ,
textareabutton : [ "ChannelTextAreaButton" , "button" ] ,
textareabuttonactive : [ "ChannelTextAreaButton" , "active" ] ,
textareabuttonwrapper : [ "ChannelTextAreaButton" , "buttonWrapper" ] ,
textareaicon : [ "ChannelTextAreaButton" , "icon" ] ,
textareainner : [ "ChannelTextArea" , "inner" ] ,
textareainnerautocomplete : [ "ChannelTextArea" , "innerAutocomplete" ] ,
textareainnerdisabled : [ "ChannelTextArea" , "innerDisabled" ] ,
textareainnerenablednoattach : [ "ChannelTextArea" , "innerEnabledNoAttach" ] ,
textareainnernoautocomplete : [ "ChannelTextArea" , "innerNoAutocomplete" ] ,
textareapickerbutton : [ "ChannelTextArea" , "button" ] ,
textareapickerbuttons : [ "ChannelTextArea" , "buttons" ] ,
textareauploadinput : [ "ChannelTextArea" , "uploadInput" ] ,
textareawrapall : [ "ChannelTextArea" , "channelTextArea" ] ,
textareawrapchat : [ "ChatWindow" , "channelTextArea" ] ,
textareawrapdisabled : [ "ChannelTextArea" , "channelTextAreaDisabled" ] ,
textareawrapenablednoattach : [ "ChannelTextArea" , "channelTextAreaEnabledNoAttach" ] ,
textlink : [ "Notice" , "textLink" ] ,
textrow : [ "PopoutActivity" , "textRow" ] ,
themedark : [ "NotFound" , "themeDark" ] ,
themeghosthairline : [ "Scroller" , "themeGhostHairline" ] ,
themelight : [ "NotFound" , "themeLight" ] ,
themeundefined : [ "NotFound" , "themeUndefined" ] ,
title : [ "SettingsItems" , "title" ] ,
titlebar : [ "TitleBar" , "titleBar" ] ,
titledefault : [ "SettingsItems" , "titleDefault" ] ,
titlemini : [ "SettingsItems" , "titleMini" ] ,
titlesize10 : [ "UserPopout" , "size10" ] ,
titlesize12 : [ "UserPopout" , "size12" ] ,
titlesize14 : [ "UserPopout" , "size14" ] ,
titlesize16 : [ "UserPopout" , "size16" ] ,
size18 : [ "Title" , "size18" ] ,
titlesize18 : [ "Title" , "size18" ] ,
tooltip : [ "Tooltip" , "tooltip" ] ,
tooltipblack : [ "Tooltip" , "tooltipBlack" ] ,
tooltipbottom : [ "Tooltip" , "tooltipBottom" ] ,
tooltipbrand : [ "Tooltip" , "tooltipBrand" ] ,
tooltipgreen : [ "Tooltip" , "tooltipGreen" ] ,
tooltipgrey : [ "Tooltip" , "tooltipGrey" ] ,
tooltipleft : [ "Tooltip" , "tooltipLeft" ] ,
tooltippointer : [ "Tooltip" , "tooltipPointer" ] ,
tooltipred : [ "Tooltip" , "tooltipRed" ] ,
tooltipright : [ "Tooltip" , "tooltipRight" ] ,
tooltiptop : [ "Tooltip" , "tooltipTop" ] ,
tooltipyellow : [ "Tooltip" , "tooltipYellow" ] ,
typing : [ "Typing" , "typing" ] ,
unreadbar : [ "UnreadBar" , "bar" ] ,
unreadbaractive : [ "UnreadBar" , "active" ] ,
unreadbarcontainer : [ "UnreadBar" , "container" ] ,
unreadbaricon : [ "UnreadBar" , "icon" ] ,
unreadbarmention : [ "UnreadBar" , "mention" ] ,
unreadbartext : [ "UnreadBar" , "text" ] ,
unreadbarunread : [ "UnreadBar" , "unread" ] ,
userpopout : [ "UserPopout" , "userPopout" ] ,
userpopoutavatarwrapper : [ "UserPopout" , "avatarWrapper" ] ,
userpopoutcustomstatus : [ "UserPopout" , "customStatus" ] ,
userpopoutheader : [ "UserPopout" , "header" ] ,
userpopoutheaderbottagwithnickname : [ "UserPopout" , "headerBotTagWithNickname" ] ,
userpopoutheadernamewrapper : [ "UserPopout" , "headerNameWrapper" ] ,
userpopoutheadernickname : [ "UserPopout" , "headerName" ] ,
userpopoutheadernonickname : [ "UserPopout" , "headerTagUsernameNoNickname" ] ,
userpopoutheadernormal : [ "UserPopout" , "headerNormal" ] ,
userpopoutheaderplaying : [ "UserPopout" , "headerPlaying" ] ,
userpopoutheaderspotify : [ "UserPopout" , "headerSpotify" ] ,
userpopoutheaderstreaming : [ "UserPopout" , "headerStreaming" ] ,
userpopoutheadertag : [ "UserPopout" , "headerTag" ] ,
userpopoutheadertagnonickname : [ "UserPopout" , "headerTagNoNickname" ] ,
userpopoutheadertagusernamenonickname : [ "UserPopout" , "headerTagUsernameNoNickname" ] ,
userpopoutheadertagwithnickname : [ "UserPopout" , "headerTagWithNickname" ] ,
userpopoutheadertext : [ "UserPopout" , "headerText" ] ,
userpopoutrole : [ "Role" , "role" ] ,
userpopoutrolecircle : [ "Role" , "roleCircle" ] ,
userpopoutrolelist : [ "UserPopout" , "rolesList" ] ,
userpopoutrolename : [ "Role" , "roleName" ] ,
userprofile : [ "UserProfile" , "root" ] ,
userprofilebody : [ "UserProfile" , "body" ] ,
userprofilebottag : [ "UserProfile" , "botTag" ] ,
userprofilecustomstatus : [ "UserProfile" , "customStatusText" ] ,
userprofilecustomstatusemoji : [ "UserProfile" , "customStatusEmoji" ] ,
userprofileheader : [ "UserProfile" , "header" ] ,
userprofileheaderfill : [ "UserProfile" , "headerFill" ] ,
userprofileheaderinfo : [ "UserProfile" , "headerInfo" ] ,
userprofilelistavatar : [ "UserProfile" , "listAvatar" ] ,
userprofilelistguildavatarwithouticon : [ "UserProfile" , "guildAvatarWithoutIcon" ] ,
userprofilelistname : [ "UserProfile" , "listName" ] ,
userprofilelistrow : [ "UserProfile" , "listRow" ] ,
userprofilenametag : [ "UserProfile" , "nameTag" ] ,
userprofiletopsectionnormal : [ "UserProfile" , "topSectionNormal" ] ,
userprofiletopsectionplaying : [ "UserProfile" , "topSectionPlaying" ] ,
userprofiletopsectionspotify : [ "UserProfile" , "topSectionSpotify" ] ,
userprofiletopsectionstreaming : [ "UserProfile" , "topSectionStreaming" ] ,
userprofiletopsectionxbox : [ "UserProfile" , "topSectionXbox" ] ,
userprofileusername : [ "UserProfile" , "username" ] ,
username : [ "NameTag" , "username" ] ,
usernote : [ "Note" , "note" ] ,
usernotepopout : [ "UserPopout" , "note" ] ,
usernoteprofile : [ "UserProfile" , "note" ] ,
vertical : [ "Flex" , "vertical" ] ,
voiceavatar : [ "VoiceChannel" , "avatar" ] ,
voiceavatarcontainer : [ "VoiceChannel" , "avatarContainer" ] ,
voiceavatarlarge : [ "VoiceChannel" , "avatarLarge" ] ,
voiceavatarsmall : [ "VoiceChannel" , "avatarSmall" ] ,
voiceavatarspeaking : [ "VoiceChannel" , "avatarSpeaking" ] ,
voiceclickable : [ "VoiceChannel" , "clickable" ] ,
voicecontent : [ "VoiceChannel" , "content" ] ,
voicedetails : [ "VoiceDetails" , "container" ] ,
voicedetailsactive : [ "VoiceDetailsPing" , "active" ] ,
voicedetailschannel : [ "VoiceDetails" , "channel" ] ,
voicedetailscustomstatuscontainer : [ "VoiceDetails" , "customStatusContainer" ] ,
voicedetailshotspot : [ "VoiceDetails" , "hotspot" ] ,
voicedetailsinactive : [ "VoiceDetailsPing" , "inactive" ] ,
voicedetailsinner : [ "VoiceDetails" , "inner" ] ,
voicedetailslabelwrapper : [ "VoiceDetailsPing" , "labelWrapper" ] ,
voicedetailsping : [ "VoiceDetailsPing" , "ping" ] ,
voicedetailsqualityaverage : [ "VoiceDetailsPing" , "rtcConnectionQualityAverage" ] ,
voicedetailsqualitybad : [ "VoiceDetailsPing" , "rtcConnectionQualityBad" ] ,
voicedetailsqualityfine : [ "VoiceDetailsPing" , "rtcConnectionQualityFine" ] ,
voicedetailsstatus : [ "VoiceDetailsPing" , "rtcConnectionStatus" ] ,
voicedetailsstatusconnected : [ "VoiceDetailsPing" , "rtcConnectionStatusConnected" ] ,
voicedetailsstatusconnecting : [ "VoiceDetailsPing" , "rtcConnectionStatusConnecting" ] ,
voicedetailsstatuserror : [ "VoiceDetailsPing" , "rtcConnectionStatusError" ] ,
voicedetailsstatustooltip : [ "VoiceDetails" , "statusTooltip" ] ,
voicedetailsstatuswithpopout : [ "VoiceDetails" , "statusWithPopout" ] ,
voicedraggable : [ "NotFound" , "voiceDraggable" ] ,
voiceflipped : [ "VoiceChannel" , "flipped" ] ,
voiceicon : [ "VoiceChannel" , "icon" ] ,
voiceicons : [ "VoiceChannel" , "icons" ] ,
voiceiconspacing : [ "VoiceChannel" , "iconSpacing" ] ,
voicelist : [ "VoiceChannel" , "list" ] ,
voicelist2 : [ "VoiceChannelList" , "list" ] ,
voicelistcollapsed : [ "VoiceChannel" , "listCollapse" ] ,
voicelistcollapsed2 : [ "VoiceChannelList" , "collapsed" ] ,
voicelistdefault : [ "VoiceChannel" , "listDefault" ] ,
voiceliveicon : [ "VoiceChannel" , "liveIcon" ] ,
voicename : [ "VoiceChannel" , "username" ] ,
voicenamefont : [ "VoiceChannel" , "usernameFont" ] ,
voicenamespeaking : [ "VoiceChannel" , "usernameSpeaking" ] ,
voiceselected : [ "VoiceChannel" , "selected" ] ,
voiceuser : [ "VoiceChannel" , "voiceUser" ] ,
voiceuserlarge : [ "VoiceChannel" , "userLarge" ] ,
voiceusersmall : [ "VoiceChannel" , "userSmall" ] ,
weightbold : [ "TextWeight" , "weightBold" ] ,
weightlight : [ "TextWeight" , "weightLight" ] ,
weightmedium : [ "TextWeight" , "weightMedium" ] ,
weightnormal : [ "TextWeight" , "weightNormal" ] ,
weightsemibold : [ "TextWeight" , "weightSemiBold" ] ,
wrap : [ "Flex" , "wrap" ] ,
wrapreverse : [ "Flex" , "wrapReverse" ]
} ;
BDFDB . DiscordClasses = Object . assign ( { } , DiscordClasses ) ;
InternalBDFDB . getDiscordClass = ( item , selector ) => {
var classname = DiscordClassModules . BDFDB . BDFDBundefined ;
if ( DiscordClasses [ item ] === undefined ) {
console . warn ( ` %c[BDFDB]%c ` , "color:#3a71c1; font-weight:700;" , "" , item + " not found in DiscordClasses" ) ;
return classname ;
}
else if ( ! Array . isArray ( DiscordClasses [ item ] ) || DiscordClasses [ item ] . length != 2 ) {
console . warn ( ` %c[BDFDB]%c ` , "color:#3a71c1; font-weight:700;" , "" , item + " is not an Array of Length 2 in DiscordClasses" ) ;
return classname ;
}
else if ( DiscordClassModules [ DiscordClasses [ item ] [ 0 ] ] === undefined ) {
console . warn ( ` %c[BDFDB]%c ` , "color:#3a71c1; font-weight:700;" , "" , DiscordClasses [ item ] [ 0 ] + " not found in DiscordClassModules" ) ;
return classname ;
}
else if ( DiscordClassModules [ DiscordClasses [ item ] [ 0 ] ] [ DiscordClasses [ item ] [ 1 ] ] === undefined ) {
console . warn ( ` %c[BDFDB]%c ` , "color:#3a71c1; font-weight:700;" , "" , DiscordClasses [ item ] [ 1 ] + " not found in " + DiscordClasses [ item ] [ 0 ] + " in DiscordClassModules" ) ;
return classname ;
}
else {
classname = DiscordClassModules [ DiscordClasses [ item ] [ 0 ] ] [ DiscordClasses [ item ] [ 1 ] ] ;
if ( selector ) {
classname = classname . split ( " " ) . filter ( n => n . indexOf ( "da-" ) != 0 ) . join ( selector ? "." : " " ) ;
classname = classname || DiscordClassModules . BDFDB . BDFDBundefined ;
}
return classname ;
}
} ;
BDFDB . disCN = new Proxy ( DiscordClasses , {
get : function ( list , item ) {
return InternalBDFDB . getDiscordClass ( item , false ) . replace ( "#" , "" ) ;
}
} ) ;
BDFDB . disCNS = new Proxy ( DiscordClasses , {
get : function ( list , item ) {
return InternalBDFDB . getDiscordClass ( item , false ) . replace ( "#" , "" ) + " " ;
}
} ) ;
BDFDB . disCNC = new Proxy ( DiscordClasses , {
get : function ( list , item ) {
return InternalBDFDB . getDiscordClass ( item , false ) . replace ( "#" , "" ) + "," ;
}
} ) ;
BDFDB . dotCN = new Proxy ( DiscordClasses , {
get : function ( list , item ) {
let classname = InternalBDFDB . getDiscordClass ( item , true ) ;
return ( classname . indexOf ( "#" ) == 0 ? "" : "." ) + classname ;
}
} ) ;
BDFDB . dotCNS = new Proxy ( DiscordClasses , {
get : function ( list , item ) {
let classname = InternalBDFDB . getDiscordClass ( item , true ) ;
return ( classname . indexOf ( "#" ) == 0 ? "" : "." ) + classname + " " ;
}
} ) ;
BDFDB . dotCNC = new Proxy ( DiscordClasses , {
get : function ( list , item ) {
let classname = InternalBDFDB . getDiscordClass ( item , true ) ;
return ( classname . indexOf ( "#" ) == 0 ? "" : "." ) + classname + "," ;
}
} ) ;
BDFDB . notCN = new Proxy ( DiscordClasses , {
get : function ( list , item ) {
return ` :not(. ${ InternalBDFDB . getDiscordClass ( item , true ) . split ( "." ) [ 0 ] } ) ` ;
}
} ) ;
BDFDB . notCNS = new Proxy ( DiscordClasses , {
get : function ( list , item ) {
return ` :not(. ${ InternalBDFDB . getDiscordClass ( item , true ) . split ( "." ) [ 0 ] } ) ` ;
}
} ) ;
BDFDB . notCNC = new Proxy ( DiscordClasses , {
get : function ( list , item ) {
return ` :not(. ${ InternalBDFDB . getDiscordClass ( item , true ) . split ( "." ) [ 0 ] } ), ` ;
}
} ) ;
var NativeSubComponents = { } , LibraryComponents = { } , reactInitialized = LibraryModules . React && LibraryModules . React . Component ;
NativeSubComponents . ContextMenuToggleItem = BDFDB . WebModules . findByName ( "ToggleMenuItem" ) ;
NativeSubComponents . TabBar = BDFDB . WebModules . findByName ( "TabBar" ) ;
NativeSubComponents . TextInput = BDFDB . WebModules . findByName ( "TextInput" ) ;
LibraryComponents . Button = BDFDB . WebModules . findByProperties ( "Colors" , "Hovers" , "Looks" ) ;
LibraryComponents . ColorSwatches = reactInitialized ? class ColorSwatches extends LibraryModules . React . Component {
constructor ( props ) {
super ( props ) ;
props . selectedColor = BDFDB . ObjectUtils . is ( props . color ) ? props . color : BDFDB . colorCONVERT ( props . color , "RGBA" ) ;
props . colors = ( Array . isArray ( props . colors ) ? props . colors : [ null , 5433630 , 3066993 , 1752220 , 3447003 , 3429595 , 8789737 , 10181046 , 15277667 , 15286558 , 15158332 , 15105570 , 15844367 , 13094093 , 7372936 , 6513507 , 16777215 , 3910932 , 2067276 , 1146986 , 2123412 , 2111892 , 7148717 , 7419530 , 11342935 , 11345940 , 10038562 , 11027200 , 12745742 , 9936031 , 6121581 , 2894892 ] ) . map ( c => BDFDB . colorCONVERT ( c , "RGBA" ) ) ;
props . colorRows = props . colors . length ? [ props . colors . slice ( 0 , parseInt ( props . colors . length / 2 ) ) , props . colors . slice ( parseInt ( props . colors . length / 2 ) ) ] : [ ] ;
props . customColor = props . selectedColor != null ? ( props . colors . indexOf ( props . selectedColor ) > - 1 ? null : props . selectedColor ) : null ;
props . customSelected = ! ! props . customColor ;
props . pickerConfig = BDFDB . ObjectUtils . is ( props . pickerConfig ) ? props . pickerConfig : { gradient : true , comp : false , alpha : true , callback : _ => { } } ;
this . state = props ;
var swatches = this ;
this . ColorSwatch = class ColorSwatch extends LibraryModules . React . Component {
render ( ) {
let usewhite = ! BDFDB . colorISBRIGHT ( this . props . color ) ;
return BDFDB . React . createElement ( "button" , {
type : "button" ,
className : [ BDFDB . disCN . colorpickerswatch , this . props . isDisabled ? BDFDB . disCN . colorpickerswatchdisabled : null , this . props . isSelected ? BDFDB . disCN . colorpickerswatchselected : null , this . props . isCustom ? BDFDB . disCN . colorpickerswatchcustom : null , this . props . isSingle ? BDFDB . disCN . colorpickerswatchsingle : null , this . props . color == null ? BDFDB . disCN . colorpickerswatchnocolor : null ] . filter ( n => n ) . join ( " " ) ,
disabled : this . props . isDisabled ,
onClick : _ => {
if ( ! this . props . isSelected ) {
let color = this . props . isCustom && this . props . color == null ? "rgba(0,0,0,1)" : this . props . color ;
swatches . setState ( {
selectedColor : color ,
customColor : this . props . isCustom ? color : swatches . state . customColor ,
customSelected : this . props . isCustom
} ) ;
}
if ( this . props . isCustom || this . props . isSingle ) {
let swatch = BDFDB . React . findDOMNode ( this ) ;
if ( swatch ) BDFDB . openColorPicker ( swatches , swatch , this . props . color , swatches . state . pickerConfig ) ;
} ;
} ,
onMouseEnter : _ => {
let swatch = this . props . isCustom || this . props . isSingle || this . props . color == null ? BDFDB . React . findDOMNode ( this ) : null ;
if ( swatch ) BDFDB . TooltipUtils . create ( swatch , this . props . isCustom || this . props . isSingle ? BDFDB . LanguageStrings . CUSTOM _COLOR : BDFDB . LanguageStrings . DEFAULT , { type : "bottom" } ) ;
} ,
style : Object . assign ( { } , this . props . style , {
background : BDFDB . ObjectUtils . is ( this . props . color ) ? BDFDB . colorGRADIENT ( this . props . color ) : BDFDB . colorCONVERT ( this . props . color , "RGBA" )
} ) ,
children : [
this . props . isCustom || this . props . isSingle ? BDFDB . React . createElement ( LibraryComponents . SvgIcon , {
className : BDFDB . disCN . colorpickerswatchdropper ,
foreground : BDFDB . disCN . colorpickerswatchdropperfg ,
name : LibraryComponents . SvgIcon . Names . DROPPER ,
width : this . props . isCustom ? 14 : 10 ,
height : this . props . isCustom ? 14 : 10 ,
color : usewhite ? BDFDB . DiscordConstants . Colors . WHITE : BDFDB . DiscordConstants . Colors . BLACK
} ) : null ,
this . props . isSelected && ! this . props . isSingle ? BDFDB . React . createElement ( LibraryComponents . SvgIcon , {
name : LibraryComponents . SvgIcon . Names . CHECKMARK ,
width : this . props . isCustom ? 32 : 16 ,
height : this . props . isCustom ? 24 : 16 ,
color : usewhite ? BDFDB . DiscordConstants . Colors . WHITE : BDFDB . DiscordConstants . Colors . BLACK
} ) : null
]
} ) ;
}
}
}
renderRow ( colors ) {
return BDFDB . React . createElement ( LibraryComponents . Flex , {
className : BDFDB . disCN . colorpickerrow ,
wrap : LibraryComponents . Flex . Wrap . WRAP ,
children : colors . map ( color => {
return BDFDB . React . createElement ( this . ColorSwatch , {
color : color ,
isCustom : false ,
isSelected : ! this . state . customSelected && color === this . state . selectedColor ,
isDisabled : this . state . disabled
} )
} )
} ) ;
}
render ( ) {
return BDFDB . React . createElement ( LibraryComponents . Flex , {
className : [ BDFDB . disCN . colorpickerswatches , this . state . disabled ? BDFDB . disCN . colorpickerswatchesdisabled : null ] . filter ( n => n ) . join ( " " ) ,
swatchnr : this . props . number != null ? this . props . number : 0 ,
children : [
BDFDB . React . createElement ( LibraryComponents . Flex . Child , {
className : BDFDB . disCN . marginreset ,
shrink : 0 ,
grow : 0 ,
wrap : true ,
children : [
BDFDB . React . createElement ( this . ColorSwatch , {
color : this . state . customColor ,
isSingle : ! this . state . colors . length ,
isCustom : this . state . colors . length ,
isSelected : this . state . customSelected ,
isDisabled : this . state . disabled ,
style : {
margin : 0
}
} )
]
} ) ,
this . state . colors . length ? BDFDB . React . createElement ( LibraryComponents . Flex , {
direction : LibraryComponents . Flex . Direction . VERTICAL ,
className : BDFDB . disCN . flexmarginreset ,
grow : 1 ,
children : [
this . renderRow ( this . state . colorRows [ 0 ] ) ,
this . renderRow ( this . state . colorRows [ 1 ] )
]
} ) : null
]
} )
}
} : undefined ;
LibraryComponents . ContextMenu = BDFDB . WebModules . findByName ( "NativeContextMenu" ) ;
LibraryComponents . ContextMenuItem = BDFDB . WebModules . findByString ( ` default.label} ` , ` default.hint} ` , ` role:"menuitem" ` ) ;
LibraryComponents . ContextMenuItemGroup = BDFDB . WebModules . findByString ( ` "div",{className ` , ` default.itemGroup} ` ) ;
LibraryComponents . ContextMenuSliderItem = BDFDB . WebModules . findByName ( "SliderMenuItem" ) ;
LibraryComponents . ContextMenuSubItem = BDFDB . WebModules . findByName ( "FluxContainer(SubMenuItem)" ) ;
LibraryComponents . ContextMenuToggleItem = reactInitialized ? class ContextMenuToggleItem extends LibraryModules . React . Component {
handleToggle ( ) {
this . props . active = ! this . props . active ;
if ( typeof this . props . action == "function" ) this . props . action ( this . props . active ) ;
this . forceUpdate ( ) ;
}
render ( ) { return BDFDB . React . createElement ( NativeSubComponents . ContextMenuToggleItem , Object . assign ( { } , this . props , { action : this . handleToggle . bind ( this ) } ) ) ; }
} : undefined ;
LibraryComponents . Flex = BDFDB . WebModules . findByProperties ( "Wrap" , "Direction" , "Child" ) ;
LibraryComponents . FormComponents = BDFDB . WebModules . findByProperties ( "FormSection" , "FormText" ) ;
LibraryComponents . IconBadge = BDFDB . WebModules . findByName ( "IconBadge" ) ;
LibraryComponents . ModalComponents = BDFDB . WebModules . findByProperties ( "ModalContent" , "ModalFooter" ) ;
LibraryComponents . ModalTabContent = reactInitialized ? class ModalTabContent extends LibraryModules . React . Component {
render ( ) {
let props = Object . assign ( { } , this . props ) ;
delete props . open ;
return BDFDB . React . createElement ( LibraryComponents . Flex , Object . assign ( { tab : "unnamed" } , props , {
className : [ BDFDB . disCN . modaltabcontent , this . props . open ? BDFDB . disCN . modaltabcontentopen : null , props . className ] . filter ( n => n ) . join ( " " ) ,
direction : LibraryComponents . Flex . Direction . VERTICAL ,
align : LibraryComponents . Flex . Align . STRETCH ,
style : Object . assign ( { } , props . style , {
display : this . props . open ? null : "none" ,
marginTop : 10
} )
} ) ) ;
}
} : undefined ;
LibraryComponents . NumberBadge = BDFDB . WebModules . findByName ( "NumberBadge" ) ;
LibraryComponents . SvgIcon = BDFDB . WebModules . findByProperties ( "Gradients" , "Names" ) ;
LibraryComponents . SettingsPanel = reactInitialized ? class SettingsPanel extends LibraryModules . React . Component {
render ( ) {
return this . props . children ? BDFDB . React . createElement ( LibraryComponents . Flex , {
direction : LibraryComponents . Flex . Direction . VERTICAL ,
grow : 1 ,
children : [
typeof this . props . title == "string" ? BDFDB . React . createElement ( LibraryComponents . FormComponents . FormTitle , {
className : BDFDB . disCNS . marginbottom20 + "BDFDB-settings-title" ,
tag : LibraryComponents . FormComponents . FormTitle . Tags . H2 ,
children : this . props . title
} ) : null ,
BDFDB . React . createElement ( LibraryComponents . Flex , {
className : "BDFDB-settings-inner" ,
direction : LibraryComponents . Flex . Direction . VERTICAL ,
children : this . props . children
} )
]
} ) : null ;
}
} : undefined ;
LibraryComponents . SettingsPanelInner = reactInitialized ? class SettingsPanelInner extends LibraryModules . React . Component {
render ( ) {
return this . props . children ? BDFDB . React . createElement ( BDFDB . LibraryComponents . Flex , {
direction : BDFDB . LibraryComponents . Flex . Direction . VERTICAL ,
children : [
typeof this . props . title == "string" ? BDFDB . React . createElement ( BDFDB . LibraryComponents . FormComponents . FormTitle , {
className : BDFDB . disCN . marginbottom8 ,
tag : BDFDB . LibraryComponents . FormComponents . FormTitle . Tags . H1 ,
children : "Display Badges:"
} ) : null ,
BDFDB . React . createElement ( BDFDB . LibraryComponents . Flex , {
className : "BDFDB-settings-inner-list" ,
direction : BDFDB . LibraryComponents . Flex . Direction . VERTICAL ,
children : this . props . children
} )
]
} ) : null ;
}
} : undefined ;
LibraryComponents . SettingsItem = reactInitialized ? class SettingsItem extends LibraryModules . React . Component {
handleChange ( e ) {
if ( this . props . type == "Switch" ) {
this . props . value = ! this . props . value ;
this . forceUpdate ( ) ;
}
if ( typeof this . props . onChange == "function" ) this . props . onChange ( this . props . value , this ) ;
}
render ( ) {
if ( typeof this . props . type != "string" || ! [ "BUTTON" , "SWITCH" , "TEXTINPUT" ] . includes ( this . props . type . toUpperCase ( ) ) ) return null ;
let childcomponent = LibraryComponents [ this . props . type ] ;
if ( ! childcomponent ) return null ;
if ( this . props . mini && childcomponent . Sizes ) this . props . size = childcomponent . Sizes . MINI || childcomponent . Sizes . MIN ;
let childprops = Object . assign ( { } , this . props , { onChange : this . handleChange . bind ( this ) } ) ;
childprops . className = this . props . childClassName ;
delete childprops . basis ;
delete childprops . dividerbottom ;
delete childprops . dividertop ;
delete childprops . label ;
delete childprops . labelchildren ;
delete childprops . mini ;
delete childprops . note ;
delete childprops . type ;
return BDFDB . React . createElement ( LibraryComponents . Flex , {
className : [ this . props . className , this . props . disabled ? BDFDB . disCN . disabled : null ] . filter ( n => n ) . join ( " " ) ,
direction : LibraryComponents . Flex . Direction . VERTICAL ,
align : LibraryComponents . Flex . Align . STRETCH ,
children : [
this . props . dividertop ? BDFDB . React . createElement ( LibraryComponents . FormComponents . FormDivider , {
className : this . props . mini ? BDFDB . disCN . marginbottom8 : BDFDB . disCN . marginbottom20
} ) : null ,
BDFDB . React . createElement ( LibraryComponents . Flex , {
align : LibraryComponents . Flex . Align . CENTER ,
children : [
BDFDB . React . createElement ( LibraryComponents . Flex . Child , {
children : BDFDB . React . createElement ( "label" , {
className : this . props . mini ? BDFDB . disCN . titlemini : BDFDB . disCN . titledefault ,
children : this . props . label
} )
} ) ,
( Array . isArray ( this . props . labelchildren ) ? this . props . labelchildren : Array . of ( this . props . labelchildren ) ) . filter ( n => BDFDB . React . isValidElement ( n ) ) ,
BDFDB . React . createElement ( LibraryComponents . Flex . Child , {
grow : this . props . basis ? 1 : 0 ,
shrink : 0 ,
basis : this . props . basis || "auto" ,
wrap : true ,
children : BDFDB . React . createElement ( childcomponent , childprops )
} )
]
} ) ,
typeof this . props . note == "string" ? BDFDB . React . createElement ( LibraryComponents . Flex . Child , {
className : BDFDB . disCN . note ,
children : BDFDB . React . createElement ( LibraryComponents . FormComponents . FormText , {
disabled : this . props . disabled ,
type : LibraryComponents . FormComponents . FormText . Types . DESCRIPTION ,
children : this . props . note
} )
} ) : null ,
this . props . dividerbottom ? BDFDB . React . createElement ( LibraryComponents . FormComponents . FormDivider , {
className : this . props . mini ? BDFDB . disCN . margintop8 : BDFDB . disCN . margintop20
} ) : null
]
} ) ;
}
} : undefined ;
LibraryComponents . SettingsSwitch = reactInitialized ? class SettingsSwitch extends LibraryModules . React . Component {
saveSettings ( value ) {
let keys = this . props . keys . filter ( n => n ) ;
let option = keys . shift ( ) ;
if ( this . props . plugin && option ) {
var data = BDFDB . loadAllData ( this . props . plugin , option ) ;
var newdata = "" ;
for ( let key of keys ) newdata += ` {" ${ key } ": ` ;
newdata += value + "}" . repeat ( keys . length ) ;
newdata = JSON . parse ( newdata ) ;
if ( BDFDB . ObjectUtils . is ( newdata ) ) BDFDB . ObjectUtils . deepAssign ( data , newdata ) ;
else data = newdata ;
BDFDB . saveAllData ( data , this . props . plugin , option ) ;
this . props . plugin . SettingsUpdated = true ;
}
}
render ( ) { return BDFDB . React . createElement ( LibraryComponents . SettingsItem , Object . assign ( { keys : [ ] } , this . props , {
type : "Switch" ,
onChange : this . saveSettings . bind ( this )
} ) ) ; }
} : undefined ;
LibraryComponents . Switch = BDFDB . WebModules . findByName ( "Switch" ) ;
LibraryComponents . TabBar = reactInitialized ? class TabBar extends LibraryModules . React . Component {
handleItemSelect ( e ) {
if ( typeof this . props . onItemSelect == "function" ) this . props . onItemSelect ( e , this ) ;
}
render ( ) { return BDFDB . React . createElement ( NativeSubComponents . TabBar , Object . assign ( { } , this . props , { onItemSelect : this . handleItemSelect . bind ( this ) } ) ) ; }
} : undefined ;
if ( LibraryComponents . TabBar ) for ( let key in NativeSubComponents . TabBar ) if ( key != "displayName" && key != "name" ) LibraryComponents . TabBar [ key ] = NativeSubComponents . TabBar [ key ] ;
LibraryComponents . TextElement = BDFDB . WebModules . findByName ( "Text" ) ;
LibraryComponents . TextInput = reactInitialized ? class TextInput extends LibraryModules . React . Component {
handleChange ( e ) {
this . props . value = e ;
this . forceUpdate ( ) ;
if ( typeof this . props . onChange == "function" ) this . props . onChange ( e , this ) ;
}
render ( ) { return BDFDB . React . createElement ( NativeSubComponents . TextInput , Object . assign ( { } , this . props , { onChange : this . handleChange . bind ( this ) } ) ) ; }
} : undefined ;
if ( LibraryComponents . TextInput ) for ( let key in NativeSubComponents . TextInput ) if ( key != "displayName" && key != "name" ) LibraryComponents . TextInput [ key ] = NativeSubComponents . TextInput [ key ] ;
BDFDB . LibraryComponents = Object . assign ( { } , LibraryComponents ) ;
BDFDB . getLibraryStrings = function ( ) {
switch ( BDFDB . DiscordUtils . getLanguage ( ) . id ) {
case "hr" :
return {
toast _plugin _started : "{{oldversion}} je započeo." ,
toast _plugin _stopped : "{{oldversion}} zaustavljen." ,
toast _plugin _translated : "prijevod na {{ownlang}}." ,
colorpicker _modal _header _text : "Birač boja" ,
file _navigator _text : "Pregledajte datoteku" ,
btn _all _text : "Sve" ,
search _placeholder : "Traziti ..."
} ;
case "da" :
return {
toast _plugin _started : "{{oldversion}} er startet." ,
toast _plugin _stopped : "{{oldversion}} er stoppet." ,
toast _plugin _translated : "oversat til {{ownlang}}." ,
colorpicker _modal _header _text : "Farvevælger" ,
file _navigator _text : "Gennemse fil" ,
btn _all _text : "Alle" ,
search _placeholder : "Søge efter ..."
} ;
case "de" :
return {
toast _plugin _started : "{{oldversion}} wurde gestartet." ,
toast _plugin _stopped : "{{oldversion}} wurde gestoppt." ,
toast _plugin _translated : "auf {{ownlang}} übersetzt." ,
colorpicker _modal _header _text : "Farbauswahl" ,
file _navigator _text : "Datei durchsuchen" ,
btn _all _text : "Alle" ,
search _placeholder : "Suchen nach ..."
} ;
case "es" :
return {
toast _plugin _started : "{{oldversion}} se guilddiv iniciado." ,
toast _plugin _stopped : "{{oldversion}} se guilddiv detenido." ,
toast _plugin _translated : "traducido a {{ownlang}}." ,
colorpicker _modal _header _text : "Selector de color" ,
file _navigator _text : "Buscar archivo" ,
btn _all _text : "Todo" ,
search _placeholder : "Buscar ..."
} ;
case "fr" :
return {
toast _plugin _started : "{{oldversion}} a été démarré." ,
toast _plugin _stopped : "{{oldversion}} a été arrêté." ,
toast _plugin _translated : "traduit en {{ownlang}}." ,
colorpicker _modal _header _text : "Pipette à couleurs" ,
file _navigator _text : "Parcourir le fichier" ,
btn _all _text : "Tout" ,
search _placeholder : "Rechercher ..."
} ;
case "it" :
return {
toast _plugin _started : "{{oldversion}} è stato avviato." ,
toast _plugin _stopped : "{{oldversion}} è stato interrotto." ,
toast _plugin _translated : "tradotto in {{ownlang}}." ,
colorpicker _modal _header _text : "Raccoglitore di colore" ,
file _navigator _text : "Sfoglia file" ,
btn _all _text : "Tutto" ,
search _placeholder : "Cercare ..."
} ;
case "nl" :
return {
toast _plugin _started : "{{oldversion}} is gestart." ,
toast _plugin _stopped : "{{oldversion}} is gestopt." ,
toast _plugin _translated : "vertaald naar {{ownlang}}." ,
colorpicker _modal _header _text : "Kleur kiezer" ,
file _navigator _text : "Bestand zoeken" ,
btn _all _text : "Alle" ,
search _placeholder : "Zoeken ..."
} ;
case "no" :
return {
toast _plugin _started : "{{oldversion}} er startet." ,
toast _plugin _stopped : "{{oldversion}} er stoppet." ,
toast _plugin _translated : "oversatt til {{ownlang}}." ,
colorpicker _modal _header _text : "Fargevelger" ,
file _navigator _text : "Bla gjennom fil" ,
btn _all _text : "Alle" ,
search _placeholder : "Søk etter ..."
} ;
case "pl" :
return {
toast _plugin _started : "{{oldversion}} został uruchomiony." ,
toast _plugin _stopped : "{{oldversion}} został zatrzymany." ,
toast _plugin _translated : "przetłumaczono na {{ownlang}}." ,
colorpicker _modal _header _text : "Narzędzie do wybierania kolorów" ,
file _navigator _text : "Przeglądać plik" ,
btn _all _text : "Wszystkie" ,
search _placeholder : "Szukać ..."
} ;
case "pt-BR" :
return {
toast _plugin _started : "{{oldversion}} foi iniciado." ,
toast _plugin _stopped : "{{oldversion}} foi interrompido." ,
toast _plugin _translated : "traduzido para {{ownlang}}." ,
colorpicker _modal _header _text : "Seletor de cores" ,
file _navigator _text : "Procurar arquivo" ,
btn _all _text : "Todo" ,
search _placeholder : "Procurar por ..."
} ;
case "fi" :
return {
toast _plugin _started : "{{oldversion}} on käynnistetty." ,
toast _plugin _stopped : "{{oldversion}} on pysäytetty." ,
toast _plugin _translated : "käännetty osoitteeseen {{ownlang}}." ,
colorpicker _modal _header _text : "Värinvalitsija" ,
file _navigator _text : "Selaa tiedostoa" ,
btn _all _text : "Kaikki" ,
search _placeholder : "Etsiä ..."
} ;
case "sv" :
return {
toast _plugin _started : "{{oldversion}} har startats." ,
toast _plugin _stopped : "{{oldversion}} har blivit stoppad." ,
toast _plugin _translated : "översatt till {{ownlang}}." ,
colorpicker _modal _header _text : "Färgväljare" ,
file _navigator _text : "Bläddra i fil" ,
btn _all _text : "All" ,
search _placeholder : "Söka efter ..."
} ;
case "tr" :
return {
toast _plugin _started : "{{oldversion}} başlatı ldı ." ,
toast _plugin _stopped : "{{oldversion}} durduruldu." ,
toast _plugin _translated : "{{ownlang}} olarak çevrildi." ,
colorpicker _modal _header _text : "Renk seçici" ,
file _navigator _text : "Dosyaya gözat" ,
btn _all _text : "Her" ,
search _placeholder : "Aramak ..."
} ;
case "cs" :
return {
toast _plugin _started : "{{oldversion}} byl spuštěn." ,
toast _plugin _stopped : "{{oldversion}} byl zastaven." ,
toast _plugin _translated : "přeložen do {{ownlang}}." ,
colorpicker _modal _header _text : "Výběr barev" ,
file _navigator _text : "Procházet soubor" ,
btn _all _text : "Vše" ,
search _placeholder : "Hledat ..."
} ;
case "bg" :
return {
toast _plugin _started : "{{oldversion}} е стартиран." ,
toast _plugin _stopped : "{{oldversion}} е спрян." ,
toast _plugin _translated : "преведена на {{ownlang}}." ,
colorpicker _modal _header _text : "Избор на цвят" ,
file _navigator _text : "Прегледайте файла" ,
btn _all _text : "Bс ичко " ,
search _placeholder : "Търся ..."
} ;
case "ru" :
return {
toast _plugin _started : "{{oldversion}} запущен." ,
toast _plugin _stopped : "{{oldversion}} остановлен." ,
toast _plugin _translated : "переведен на {{ownlang}}." ,
colorpicker _modal _header _text : "Выбор цвета" ,
file _navigator _text : "Просмотр файла" ,
btn _all _text : "В с е " ,
search _placeholder : "Искать ..."
} ;
case "uk" :
return {
toast _plugin _started : "{{oldversion}} було запущено." ,
toast _plugin _stopped : "{{oldversion}} було зупинено." ,
toast _plugin _translated : "перекладено {{ownlang}}." ,
colorpicker _modal _header _text : "Колір обкладинки" ,
file _navigator _text : "Перегляньте файл" ,
btn _all _text : "В с е " ,
search _placeholder : "Шукати ..."
} ;
case "ja" :
return {
toast _plugin _started : "{{oldversion}}が開始されました." ,
toast _plugin _stopped : "{{oldversion}}が停止しました." ,
toast _plugin _translated : "は{{ownlang}}に翻訳されました." ,
colorpicker _modal _header _text : "カラーピッカー" ,
file _navigator _text : "ファイルを参照" ,
btn _all _text : "すべて" ,
search _placeholder : "検索する ..."
} ;
case "zh-TW" :
return {
toast _plugin _started : "{{oldversion}}已經啟動." ,
toast _plugin _stopped : "{{oldversion}}已停止." ,
toast _plugin _translated : "翻譯為{{ownlang}}." ,
colorpicker _modal _header _text : "選色器" ,
file _navigator _text : "瀏覽文件" ,
btn _all _text : "所有" ,
search _placeholder : "搜索 ..."
} ;
case "ko" :
return {
toast _plugin _started : "{{oldversion}} 시작되었습니다." ,
toast _plugin _stopped : "{{oldversion}} 중지되었습니다." ,
toast _plugin _translated : "{{ownlang}} 로 번역되었습니다." ,
colorpicker _modal _header _text : "색상 선택 도구" ,
file _navigator _text : "파일 찾아보기" ,
btn _all _text : "모든" ,
search _placeholder : "검색 ..."
} ;
default :
return {
toast _plugin _started : "{{oldversion}} has been started." ,
toast _plugin _stopped : "{{oldversion}} has been stopped." ,
toast _plugin _translated : "translated to {{ownlang}}." ,
colorpicker _modal _header _text : "Color Picker" ,
file _navigator _text : "Browse File" ,
btn _all _text : "All" ,
search _placeholder : "Search for ..."
} ;
}
} ;
BDFDB . appendLocalStyle ( "BDFDB" , `
@ import url ( https : //mwittrien.github.io/BetterDiscordAddons/Themes/BetterDocsBlock.css);
$ { BDFDB . dotCN . optionpopoutbutton } svg . BDFDB - undefined ,
$ { BDFDB . dotCN . optionpopoutbutton } . BDFDB - undefined svg {
display : none ;
}
$ { BDFDB . dotCN . overflowellipsis } {
overflow : hidden ;
text - overflow : ellipsis ;
}
$ { BDFDB . dotCNS . messagegroup + BDFDB . dotCN . messageheadercozy } {
padding - top : 0 ;
}
$ { BDFDB . dotCNS . messagegroup + BDFDB . dotCN . messageheadercompact } > span . popout - open ,
$ { BDFDB . dotCNS . messagegroup + BDFDB . dotCN . messageheadercompact } > span [ class = "" ] ,
$ { BDFDB . dotCNS . messagegroup + BDFDB . dotCN . messageheadercozymeta } > span . popout - open ,
$ { BDFDB . dotCNS . messagegroup + BDFDB . dotCN . messageheadercozymeta } > span [ class = "" ] {
display : inline - flex ;
align - items : baseline ;
}
$ { BDFDB . dotCNS . messagegroup + BDFDB . dotCNS . messageheadercompact + BDFDB . dotCN . bottag } ,
$ { BDFDB . dotCNS . messagegroup + BDFDB . dotCNS . messageheadercompact + BDFDB . dotCN . messageusername } {
text - indent : 0 px ;
}
# bd - settingspane - container . ui - form - title {
display : inline - block ;
}
# bd - settingspane - container $ { BDFDB . dotCN . _repofolderbutton } {
position : static ;
margin - bottom : 0 ;
border - radius : 5 px ;
display : inline - block ;
margin - left : 10 px ;
}
# bd - settingspane - container . bd - updatebtn ~ . bd - updatebtn {
display : none ! important ;
}
# bd - settingspane - container $ { BDFDB . dotCN . _repodescription } {
white - space : pre - line ! important ;
}
. BDFDB - versionchangelog {
display : inline - block ;
background : currentColor ;
- webkit - mask : url ( data : image / svg + xml ; utf8 , < svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 510 510" > < path fill = "currentColor" d = "M267.75,12.75c-89.25,0-168.3,48.45-209.1,122.4L0,76.5v165.75h165.75 l-71.4-71.4c33.15-63.75,96.9-107.1,173.4-107.1C372.3,63.75,459,150.45,459,255s-86.7,191.25-191.25,191.25 c-84.15,0-153-53.55-181.05-127.5H33.15c28.05,102,122.4,178.5,234.6,178.5C402.9,497.25,510,387.6,510,255 C510,122.4,400.35,12.75,267.75,12.75z M229.5,140.25V270.3l119.85,71.4l20.4-33.15l-102-61.2v-107.1H229.5z" > < / p a t h > < / s v g > ) c e n t e r / c o n t a i n n o - r e p e a t ;
cursor : pointer ;
margin : 0 4 px 0 3 px ;
}
$ { BDFDB . dotCNS . themedark + BDFDB . dotCN . popoutthemedpopout + BDFDB . notCN . messagespopoutwrap } {
- webkit - box - shadow : 0 2 px 10 px 0 rgba ( 0 , 0 , 0 , 20 % ) ;
background - color : # 2 f3136 ;
border : 1 px solid rgba ( 28 , 36 , 43 , . 6 ) ;
box - shadow : 0 2 px 10 px 0 rgba ( 0 , 0 , 0 , . 2 ) ;
}
. BDFDB - notice {
transition : height 0.5 s ease ! important ;
border - radius : 0 ! important ;
}
. BDFDB - notice $ { BDFDB . dotCN . noticeplatformicon } {
margin - top : - 7 px ;
}
. BDFDB - notice $ { BDFDB . dotCN . noticeplatformicon } svg {
max - height : 28 px ;
}
. hidden - by - OTB . BDFDB - notice {
- webkit - app - region : drag ! important ;
}
# pluginNotice # outdatedPlugins span {
- webkit - app - region : no - drag ;
color : # FFF ;
cursor : pointer ;
}
# pluginNotice # outdatedPlugins span : hover {
text - decoration : underline ;
}
. BDFDB - itemlayercontainer , . BDFDB - itemlayer {
z - index : 3002 ;
}
$ { BDFDB . dotCN . tooltip } . tooltip - customcolor $ { BDFDB . dotCN . tooltippointer } {
border - top - color : inherit ! important ;
}
. toasts {
position : fixed ;
display : flex ;
top : 0 ;
flex - direction : column ;
align - items : center ;
justify - content : flex - end ;
pointer - events : none ;
z - index : 4000 ;
}
@ keyframes toast - up {
from {
transform : translateY ( 0 ) ;
opacity : 0 ;
}
}
. toast {
animation : toast - up 300 ms ease ;
transform : translateY ( - 10 px ) ;
background - color : # 36393 F ;
padding : 10 px ;
border - radius : 5 px ;
box - shadow : 0 0 0 1 px rgba ( 32 , 34 , 37 , . 6 ) , 0 2 px 10 px 0 rgba ( 0 , 0 , 0 , . 2 ) ;
font - weight : 500 ;
color : # fff ;
user - select : text ;
font - size : 14 px ;
opacity : 1 ;
margin - top : 10 px ;
pointer - events : auto ;
}
@ keyframes toast - down {
to {
transform : translateY ( 0 px ) ;
opacity : 0 ;
}
}
. toast . closing {
animation : toast - down 200 ms ease ;
animation - fill - mode : forwards ;
opacity : 1 ;
transform : translateY ( - 10 px ) ;
}
. toast . toast - inner {
display : flex ;
align - items : center ;
}
. toast . toast - avatar {
margin - right : 5 px ;
width : 25 px ;
height : 25 px ;
background - size : cover ;
background - position : center ;
border - radius : 50 % ;
}
. toast . icon {
padding - left : 30 px ;
background - position : 6 px 50 % ;
background - size : 20 px 20 px ;
background - repeat : no - repeat ;
}
. toast . toast - brand {
background - color : # 7289 DA ;
}
. toast . toast - brand . icon {
background - image : url ( data : image / svg + xml ; base64 , PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIHhtbDpzcGFjZT0icHJlc2VydmUiIHg9IjBweCIgeT0iMHB4IiB3aWR0aD0iNTEycHgiIGhlaWdodD0iNTEycHgiIHZpZXdCb3g9IjI3IDI3IDExNSAxMTUiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDkwIDkwOyI + PHBhdGggZmlsbD0id2hpdGUiIGQ9Ik0xMTEuMywxMjQuMWMwLDAtMy40LTQuMS02LjMtNy43YzEyLjYtMy41LDE3LjQtMTEuMywxNy40LTExLjMgYy00LDIuNi03LjcsNC40LTExLjEsNS42Yy00LjgsMi05LjUsMy4zLTE0LDQuMWMtOS4yLDEuNy0xNy42LDEuMy0yNC45LTAuMWMtNS41LTEtMTAuMi0yLjUtMTQuMS00LjFjLTIuMi0wLjgtNC42LTEuOS03LjEtMy4zIGMtMC4zLTAuMi0wLjYtMC4zLTAuOS0wLjVjLTAuMS0wLjEtMC4zLTAuMi0wLjQtMC4yYy0xLjctMS0yLjYtMS42LTIuNi0xLjZzNC42LDcuNiwxNi44LDExLjJjLTIuOSwzLjYtNi40LDcuOS02LjQsNy45IGMtMjEuMi0wLjYtMjkuMy0xNC41LTI5LjMtMTQuNWMwLTMwLjYsMTMuOC01NS40LDEzLjgtNTUuNGMxMy44LTEwLjMsMjYuOS0xMCwyNi45LTEwbDEsMS4xQzUyLjgsNTAuMyw0NSw1Ny45LDQ1LDU3LjkgczIuMS0xLjIsNS43LTIuN2MxMC4zLTQuNSwxOC40LTUuNywyMS44LTZjMC41LTAuMSwxLjEtMC4yLDEuNi0wLjJjNS45LTAuNywxMi41LTAuOSwxOS40LTAuMmM5LjEsMSwxOC45LDMuNywyOC45LDkuMSBjMCwwLTcuNS03LjItMjMuOS0xMi4xbDEuMy0xLjVjMCwwLDEzLjEtMC4zLDI2LjksMTBjMCwwLDEzLjgsMjQuOCwxMy44LDU1LjRDMTQwLjYsMTA5LjYsMTMyLjUsMTIzLjUsMTExLjMsMTI0LjF6IE0xMDEuNyw3OS43Yy01LjQsMC05LjgsNC43LTkuOCwxMC41YzAsNS44LDQuNCwxMC41LDkuOCwxMC41YzUuNCwwLDkuOC00LjcsOS44LTEwLjUgQzExMS41LDg0LjQsMTA3LjEsNzkuNywxMDEuNyw3OS43eiBNNjYuNyw3OS43Yy01LjQsMC05LjgsNC43LTkuOCwxMC41YzAsNS44LDQuNCwxMC41LDkuOCwxMC41YzUuNCwwLDkuOC00LjcsOS44LTEwLjUgQzc2LjUsODQuNCw3Mi4xLDc5LjcsNjYuNyw3OS43eiIvPjwvc3ZnPg == ) ;
}
. toast . toast - danger ,
. toast . toast - error {
background - color : # F04747 ;
}
. toast . toast - danger . icon ,
. toast . toast - error . icon {
background - image : url ( data : image / svg + xml ; base64 , PHN2ZyBmaWxsPSIjRkZGRkZGIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4gICAgPHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTUgMTMuNTlMMTUuNTkgMTcgMTIgMTMuNDEgOC40MSAxNyA3IDE1LjU5IDEwLjU5IDEyIDcgOC40MSA4LjQxIDcgMTIgMTAuNTkgMTUuNTkgNyAxNyA4LjQxIDEzLjQxIDEyIDE3IDE1LjU5eiIvPiAgICA8cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8 + PC9zdmc + ) ;
}
. toast . toast - default {
background - color : # F26522 ;
}
. toast . toast - default . icon {
padding - left : 10 px ;
}
. toast . toast - facebook {
background - color : # 355089 ;
}
. toast . toast - facebook . icon {
background - image : url ( data : image / svg + xml ; base64 , PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHg9IjBweCIgeT0iMHB4IiB3aWR0aD0iNTEycHgiIGhlaWdodD0iNTEycHgiIHZpZXdCb3g9Ii01IC01IDEwMCAxMDAiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDkwIDkwOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI + PGc + PHBhdGggaWQ9IkZhY2Vib29rX194MjhfYWx0X3gyOV8iIGQ9Ik05MCwxNS4wMDFDOTAsNy4xMTksODIuODg0LDAsNzUsMEgxNUM3LjExNiwwLDAsNy4xMTksMCwxNS4wMDF2NTkuOTk4ICAgQzAsODIuODgxLDcuMTE2LDkwLDE1LjAwMSw5MEg0NVY1NkgzNFY0MWgxMXYtNS44NDRDNDUsMjUuMDc3LDUyLjU2OCwxNiw2MS44NzUsMTZINzR2MTVINjEuODc1QzYwLjU0OCwzMSw1OSwzMi42MTEsNTksMzUuMDI0VjQxICAgaDE1djE1SDU5djM0aDE2YzcuODg0LDAsMTUtNy4xMTksMTUtMTUuMDAxVjE1LjAwMXoiIGZpbGw9IndoaXRlIi8 + PC9nPjxnPjwvZz48Zz48L2c + PGc + PC9nPjxnPjwvZz48Zz48L2c + PGc + PC9nPjxnPjwvZz48Zz48L2c + PGc + PC9nPjxnPjwvZz48Zz48L2c + PGc + PC9nPjxnPjwvZz48Zz48L2c + PGc + PC9nPjwvc3ZnPg == ) ;
}
. toast . toast - info {
background - color : # 4 A90E2 ;
}
. toast . toast - info . icon {
background - image : url ( data : image / svg + xml ; base64 , PHN2ZyBmaWxsPSIjRkZGRkZGIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4gICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPiAgICA8cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMSAxNWgtMnYtNmgydjZ6bTAtOGgtMlY3aDJ2MnoiLz48L3N2Zz4 = ) ;
}
. toast . toast - premium {
background - color : # 202225 ;
}
. toast . toast - premium . icon {
background - image : url ( data : image / svg + xml ; base64 , PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMDMiIGhlaWdodD0iMjYiPiAgPHBhdGggZmlsbD0iI0ZGRiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNOTYuMjgyNiA4LjYwMjc4ODI0bC0xLjIxNTUgOC4zOTAzNTI5NmMtLjI3NzUgMS45ODI2Mjc0LTIuNDY1NSAyLjkwMzMzMzMtNC40NzkgMi45MDMzMzMzLTEuODc1IDAtMy43MTU1LS45MjA3MDU5LTMuNDcyNS0yLjcyNTkyMTZsMS4yMTU1LTguNTY3NzY0NjZjLjI3NzUtMS44NzY1ODgyNCAyLjQ2NTUtMi44MzI0NzA2IDQuNDc5LTIuODMyNDcwNiAyLjAxNCAwIDMuNzUuOTU1ODgyMzYgMy40NzI1IDIuODMyNDcwNk05My43NzIxLjAwMzkyNTVsLjAwMDUtLjAwNDA3ODQ0aC0xMy4wODRjLS4zMzQgMC0uNjE4LjI1MDMxMzcyLS42NjYuNTg3Mjk0MTJsLS42MzY1IDQuNDMyMjM1M2MtLjA1OTUuNDE0NDcwNTguMjU2Ljc4NjExNzY0LjY2NjUuNzg2MTE3NjRoMi4zODk1Yy4yNCAwIC40MDQ1LjI0OTgwMzkyLjMxLjQ3NTY0NzA2LS4yOTguNzEyMTk2MDctLjUxNTUgMS40ODYwNzg0My0uNjM2IDIuMzIxNjQ3MDZsLTEuMjE1NSA4LjU2Nzc2NDY2Yy0uNzk5IDUuNzM1Mjk0MiAzLjg4OSA4LjYwMjQzMTQgOC45OTMgOC42MDI0MzE0IDUuMzQ3NSAwIDEwLjU5MDUtMi44NjcxMzcyIDExLjM4OS04LjYwMjQzMTRsMS4yMTUtOC41Njc3NjQ2NmMuNzgzLTUuNjIyMTE3NjUtMy43Mzk1LTguNDg4MjM1My04LjcyNTUtOC41OTg4NjI3NW0tNzguNTk1MjUgMTEuNzI4NjUxbC4wNjcgNC4xNTg5ODA0Yy4wMDE1LjA4NTEzNzItLjA1NS4xNjA1ODgyLS4xMzYuMTgxNDkwMmgtLjAwMDVsLTEuMzg1NS01LjAxNjQ3MDZjLS4wMDItLjAwNzY0NzEtLjAwNS0uMDE0Nzg0My0uMDA4LS4wMjI0MzE0TDkuNDE0MzUuNzcwNzcyNTNjLS4xMDYtLjI1Mjg2Mjc1LS4zNDk1LS40MTY1MDk4LS42MTk1LS40MTY1MDk4aC00Ljg3MjVjLS4zMzYgMC0uNjIwNS4yNTIzNTI5NC0uNjY3LjU5MTM3MjU0TC4wMDY4NSAyNC42MzcyNDMxYy0uMDU3LjQxMzQ1MS4yNTc1Ljc4MjAzOTMuNjY2NS43ODIwMzkzaDQuODU0Yy4zMzY1IDAgLjYyMTUtLjI1MzM3MjYuNjY3NS0uNTkyOTAybDEuMjcyLTkuNDEyNTA5OGMuMDAxNS0uMDA5MTc2NS4wMDItLjAxODM1My4wMDItLjAyNzUyOTRsLS4wNjk1LTQuODM2NTA5OC4xMzg1LS4wMzUxNzY1IDEuNDU1NSA1LjAxNjQ3MDZjLjAwMjUuMDA3MTM3Mi4wMDUuMDEzNzY0Ny4wMDc1LjAyMDkwMmw0LjAyMTUgOS40NTM4MDM5Yy4xMDY1LjI1MDgyMzUuMzQ5NS40MTM0NTEuNjE3NS40MTM0NTFoNS4yNTY1Yy4zMzYgMCAuNjIwNS0uMjUyMzUzLjY2Ny0uNTkxODgyNGwzLjI0OTUtMjMuNjkxNjA3ODRjLjA1NjUtLjQxMjk0MTE4LS4yNTgtLjc4MTUyOTQyLS42NjctLjc4MTUyOTQyaC00LjgyMDVjLS4zMzYgMC0uNjIwNS4yNTE4NDMxNC0uNjY3LjU5MDg2Mjc1bC0xLjQ4IDEwLjc1ODkwMmMtLjAwMS4wMDkxNzY0LS4wMDE1LjAxODg2MjctLjAwMTUuMDI4NTQ5bTkuMzk0IDEzLjY4NjYwMzloNC44NTVjLjMzNiAwIC42MjA1LS4yNTIzNTI5LjY2Ny0uNTkxMzcyNmwzLjI0OS0yMy42OTIxMTc2Yy4wNTY1LS40MTI5NDEyLS4yNTgtLjc4MTUyOTQ0LS42NjctLjc4MTUyOTQ0aC00Ljg1NWMtLjMzNiAwLS42MjA1LjI1MjM1Mjk0LS42NjcuNTkxMzcyNTVsLTMuMjQ5IDIzLjY5MjExNzY4Yy0uMDU2NS40MTI5NDEyLjI1OC43ODE1Mjk0LjY2Ny43ODE1Mjk0TTM2LjYyMTE1LjkwNjA3NDVsLS42MzYgNC40MzIyMzUzYy0uMDU5NS40MTQ0NzA2LjI1NTUuNzg2MTE3NjUuNjY2Ljc4NjExNzY1aDUuMDgwNWMuNDA4NSAwIC43MjMuMzY3NTY4NjMuNjY3NS43ODA1MDk4bC0yLjM5MzUgMTcuNzM0MDM5MjVjLS4wNTU1LjQxMjQzMTMuMjU4NS43OC42NjcuNzhoNC45MjU1Yy4zMzY1IDAgLjYyMS0uMjUyODYyOC42NjctLjU5MjkwMmwyLjQ0NC0xOC4xMDg3NDUxYy4wNDYtLjMzOTUyOTQuMzMwNS0uNTkyOTAxOTUuNjY3LS41OTI5MDE5NWg1LjQ2MjVjLjMzNCAwIC42MTgtLjI0OTgwMzkyLjY2Ni0uNTg3Mjk0MTJsLjYzNy00LjQzMjIzNTNjLjA1OTUtLjQxNDQ3MDU4LS4yNTU1LS43ODYxMTc2NC0uNjY2NS0uNzg2MTE3NjRoLTE4LjE4NzVjLS4zMzQ1IDAtLjYxOC4yNTAzMTM3LS42NjY1LjU4NzI5NDFNNzEuMDM4NyA5LjA5ODM2ODZjLS4xNzQgMS40NTE0MTE3Ny0xLjI4NDUgMi45MDI4MjM1Ny0zLjE5NSAyLjkwMjgyMzU3aC0yLjg2OTVjLS40MSAwLS43MjQ1LS4zNjk2MDc5LS42NjctLjc4MzA1ODlsLjYwNzUtNC4zNjE4ODIzM2MuMDQ3LS4zMzg1MDk4LjMzMTUtLjU5MDM1Mjk0LjY2Ny0uNTkwMzUyOTRoMy4wNjFjMS44NDA1IDAgMi41Njk1IDEuMzEwMTk2MDggMi4zOTYgMi44MzI0NzA2TTY5LjMzNzIuMzU0MjExNzZoLTkuMjQwNWMtLjMzNiAwLS42MjA1LjI1MjM1Mjk0LS42NjcuNTkxMzcyNTRsLTMuMjQ5IDIzLjY5MjExNzdjLS4wNTY1LjQxMjk0MTEuMjU4Ljc4MTUyOTQuNjY3Ljc4MTUyOTRoNC45MjM1Yy4zMzY1IDAgLjYyMTUtLjI1MzM3MjYuNjY3NS0uNTkyOTAybC45NTYtNy4wNzY1ODgyYy4wMjMtLjE2OTc2NDcuMTY1LS4yOTYxOTYxLjMzMzUtLjI5NjE5NjFoLjYzM2MuMTE0NSAwIC4yMjE1LjA1OTY0NzEuMjgzNS4xNTgwMzkybDQuNzAyIDcuNDkxMDU4OGMuMTI0LjE5NzI5NDIuMzM3NS4zMTY1ODgzLjU2NzUuMzE2NTg4M2g2LjA4MWMuNTQ1IDAgLjg2NDUtLjYyNTAxOTYuNTUyLTEuMDgwMjc0NWwtNC45MzQ1LTcuMTkxODA0Yy0uMTE4LS4xNzI4MjM1LS4wNTc1LS40MTI0MzEzLjEyOC0uNTA0NzA1OCAzLjE1MDUtMS41Njk2ODYzIDQuOTc5NS0zLjE3ODExNzcgNS41ODMtNy42NTAxMTc3LjY5MzUtNS44NzcwMTk2LTIuOTE3LTguNjM4MTE3NjMtNy45ODY1LTguNjM4MTE3NjMiLz48L3N2Zz4 = ) ;
background - size : 63 px 16 px ;
padding - left : 73 px ;
}
. toast . toast - spotify {
background - color : # 1 DB954 ;
}
. toast . toast - spotify . icon {
background - image : url ( data : image / svg + xml ; base64 , PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI / Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTkuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0 + CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDUwOC41MiA1MDguNTIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDUwOC41MiA1MDguNTI7IiB4bWw6c3BhY2U9InByZXNlcnZlIiB3aWR0aD0iMjRweCIgaGVpZ2h0PSIyNHB4Ij4KPGc + Cgk8Zz4KCQk8Zz4KCQkJPHBhdGggZD0iTTI1NC4yNiwwQzExMy44NDUsMCwwLDExMy44NDUsMCwyNTQuMjZzMTEzLjg0NSwyNTQuMjYsMjU0LjI2LDI1NC4yNiAgICAgczI1NC4yNi0xMTMuODQ1LDI1NC4yNi0yNTQuMjZTMzk0LjY3NSwwLDI1NC4yNiwweiBNMzcxLjY5Niw0MDMuMjg4Yy0zLjE3OCw1LjgxNi05LjEyMiw5LjA1OC0xNS4yODcsOS4wNTggICAgIGMtMi44NiwwLTUuNzIxLTAuNjY3LTguNDIyLTIuMTI5Yy00MC43MTMtMjIuNDM4LTg2Ljk1Ny0zNC4yOTMtMTMzLjY3Ny0zNC4yOTNjLTI4LDAtNTUuNjUxLDQuMTYzLTgyLjEyNiwxMi4zNjMgICAgIGMtOS4yMTcsMi44Ni0xOS4wMDYtMi4yODgtMjEuODM1LTExLjUzN2MtMi44Ni05LjE4NSwyLjI4OC0yOC43LDExLjUzNy0zMS41OTJjMjkuODQ0LTkuMjQ5LDYwLjk1OS0xMy45MjEsOTIuNDU1LTEzLjkyMSAgICAgYzUyLjU2OCwwLDEwNC42NiwxMy4zNDksMTUwLjUyMiwzOC42MTZDMzczLjMxNywzNzQuNDYxLDM3Ni40LDM5NC44NjYsMzcxLjY5Niw0MDMuMjg4eiBNNDA0LjAxOSwzMDcuNTI3ICAgICBjLTMuNjIzLDcuMDI0LTEwLjc0MiwxOC4zMzgtMTguMDg0LDE4LjMzOGMtMy4yMSwwLTYuMzg4LTAuNjk5LTkuMzc2LTIuMzJjLTUwLjQ3MS0yNi4xODktMTA1LjA0MS0zOS40NzQtMTYyLjIxOC0zOS40NzQgICAgIGMtMzEuNDk2LDAtNjIuNzcsNC4xMzItOTIuOTY0LDEyLjQ1OWMtMTAuOTAxLDIuOTU2LTIyLjA4OS0zLjQwMS0yNS4wNDUtMTQuMzAyYy0yLjkyNC0xMC45MDEsMy40NjQtMjkuNDMxLDE0LjMzNC0zMi4zODYgICAgIGMzMy42ODktOS4xODUsNjguNTg3LTEzLjg1NywxMDMuNjc0LTEzLjg1N2M2Mi44OTgsMCwxMjUuNDQ1LDE1LjI1NiwxODAuOTM4LDQ0LjExNCAgICAgQzQwNS4yOSwyODUuMjQ4LDQwOS4xOTksMjk3LjUxNiw0MDQuMDE5LDMwNy41Mjd6IE00MTcuNTI2LDIzMC44MzZjLTMuNDY0LDAtNy4wMjQtMC43OTUtMTAuMzYxLTIuNDQ3ICAgICBjLTYwLjIyOC0zMC4wMzQtMTI1LjA5Ni00NS4yMjYtMTkyLjc2MS00NS4yMjZjLTM1LjI3OSwwLTcwLjQzLDQuMjkxLTEwNC41MzMsMTIuNzEzYy0xMi41MjIsMy4wODMtMjUuMTQtNC41MTMtMjguMjIzLTE3LjAwNCAgICAgYy0zLjExNS0xMi40NTksNC41MTMtMjcuNTU1LDE3LjAwNC0zMC42MzhjMzcuNzI2LTkuMzc2LDc2LjY1OS0xNC4xMTEsMTE1LjcyLTE0LjExMWM3NC45NzUsMCwxNDYuODY3LDE2Ljg3NywyMTMuNTc4LDUwLjEyMSAgICAgYzExLjUzNyw1Ljc1MywxNi4yNDEsMTkuNzM3LDEwLjQ4OCwzMS4yNDJDNDM0LjMwOCwyMjMuNjUzLDQyNi4xMDgsMjMwLjgzNiw0MTcuNTI2LDIzMC44MzZ6IiBmaWxsPSIjRkZGRkZGIi8 + CgkJPC9nPgoJPC9nPgo8L2c + CjxnPgo8L2c + CjxnPgo8L2c + CjxnPgo8L2c + CjxnPgo8L2c + CjxnPgo8L2c + CjxnPgo8L2c + CjxnPgo8L2c + CjxnPgo8L2c + CjxnPgo8L2c + CjxnPgo8L2c + CjxnPgo8L2c + CjxnPgo8L2c + CjxnPgo8L2c + CjxnPgo8L2c + CjxnPgo8L2c + Cjwvc3ZnPgo = ) ;
}
. toast . toast - streamermode {
background - color : # 593695 ;
}
. toast . toast - streamermode . icon {
background - image : url ( data : image / svg + xml ; base64 , PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSItMjUgLTI1IDU0MiA1NDIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDQ5MiA0OTI7IiB4bWw6c3BhY2U9InByZXNlcnZlIiB3aWR0aD0iNTEycHgiIGhlaWdodD0iNTEycHgiPjxwYXRoIGQ9Ik00ODguMywxNDIuNXYyMDMuMWMwLDE1LjctMTcsMjUuNS0zMC42LDE3LjdsLTg0LjYtNDguOHYxMy45YzAsNDEuOC0zMy45LDc1LjctNzUuNyw3NS43SDc1LjdDMzMuOSw0MDQuMSwwLDM3MC4yLDAsMzI4LjQgICBWMTU5LjljMC00MS44LDMzLjktNzUuNyw3NS43LTc1LjdoMjIxLjhjNDEuOCwwLDc1LjcsMzMuOSw3NS43LDc1Ljd2MTMuOWw4NC42LTQ4LjhDNDcxLjMsMTE3LDQ4OC4zLDEyNi45LDQ4OC4zLDE0Mi41eiIgZmlsbD0iI0ZGRkZGRiIvPjwvc3ZnPg == ) ;
}
. toast . toast - success {
background - color : # 43 B581 ;
}
. toast . toast - success . icon {
background - image : url ( data : image / svg + xml ; base64 , PHN2ZyBmaWxsPSIjRkZGRkZGIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4gICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPiAgICA8cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptLTIgMTVsLTUtNSAxLjQxLTEuNDFMMTAgMTQuMTdsNy41OS03LjU5TDE5IDhsLTkgOXoiLz48L3N2Zz4 = ) ;
}
. toast . toast - warning ,
. toast . toast - warn {
background - color : # FFA600 ;
}
. toast . toast - warning . icon ,
. toast . toast - warn . icon {
background - image : url ( data : image / svg + xml ; base64 , PHN2ZyBmaWxsPSIjRkZGRkZGIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4gICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPiAgICA8cGF0aCBkPSJNMSAyMWgyMkwxMiAyIDEgMjF6bTEyLTNoLTJ2LTJoMnYyem0wLTRoLTJ2LTRoMnY0eiIvPjwvc3ZnPg == ) ;
}
. BDFDB - quickSelectPopout {
min - width : 210 px ! important ;
position : relative ! important ;
width : auto ! important ;
}
. BDFDB - modal $ { BDFDB . dotCN . title + BDFDB . notCN . cursorpointer } ,
. BDFDB - settings $ { BDFDB . dotCN . title + BDFDB . notCN . cursorpointer } {
cursor : default ! important ;
}
. BDFDB - modal . BDFDB - settings - inner . BDFDB - containertext ,
. BDFDB - settings . BDFDB - settings - inner . BDFDB - containertext {
margin - left : - 18 px ;
}
. BDFDB - modal . BDFDB - containerarrow ,
. BDFDB - settings . BDFDB - containerarrow {
background : url ( data : image / svg + xml ; base64 , PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxOS4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FscXVlXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSItOTUwIDUzMiAxOCAxOCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAtOTUwIDUzMiAxOCAxODsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCgkuc3Qwe2ZpbGw6bm9uZTt9DQoJLnN0MXtmaWxsOm5vbmU7c3Ryb2tlOiNGRkZGRkY7c3Ryb2tlLXdpZHRoOjEuNTtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQo8L3N0eWxlPg0KPHBhdGggY2xhc3M9InN0MCIgZD0iTS05MzIsNTMydjE4aC0xOHYtMThILTkzMnoiLz4NCjxwb2x5bGluZSBjbGFzcz0ic3QxIiBwb2ludHM9Ii05MzYuNiw1MzguOCAtOTQxLDU0My4yIC05NDUuNCw1MzguOCAiLz4NCjwvc3ZnPg0K ) ;
height : 16 px ;
width : 16 px ;
display : inline - block ;
position : relative ;
top : 2 px ;
transition : transform . 3 s ease ;
transform : rotate ( 0 ) ;
}
. BDFDB - modal . BDFDB - containerarrow . closed ,
. BDFDB - settings . BDFDB - containerarrow . closed {
transform : rotate ( - 90 deg ) ;
}
. BDFDB - settings . BDFDB - settings - inner {
padding - left : 15 px ;
padding - right : 5 px ;
}
. BDFDB - settings . BDFDB - settings - inner - list {
padding - left : 15 px ;
}
. inputNumberWrapper . numberinput - buttons - zone : hover + $ { BDFDB . dotCN . input } {
border - color : black ;
}
. inputNumberWrapper . numberinput - buttons - zone : hover + $ { BDFDB . dotCN . input } : focus ,
. inputNumberWrapper . numberinput - buttons - zone . pressed + $ { BDFDB . dotCN . input } {
border - color : # 7289 da ;
}
. inputNumberWrapper {
position : relative ! important ;
}
. inputNumberWrapper $ { BDFDB . dotCN . input } [ type = number ] {
padding - right : 25 px ;
}
. inputNumberWrapper . inputNumberWrapperMini $ { BDFDB . dotCN . input } [ type = number ] {
padding - left : 6 px ;
padding - right : 17 px ;
}
. inputNumberWrapper $ { BDFDB . dotCN . input } [ type = number ] : : - webkit - inner - spin - button ,
. inputNumberWrapper $ { BDFDB . dotCN . input } [ type = number ] : : - webkit - outer - spin - button {
- webkit - appearance : none ;
}
. inputNumberWrapper . numberinput - buttons - zone {
cursor : pointer ;
position : absolute ;
display : flex ;
flex - direction : column ;
align - items : center ;
justify - content : space - around ;
height : 110 % ;
right : 8 px ;
top : - 5 % ;
}
. inputNumberWrapper . inputNumberWrapperMini . numberinput - buttons - zone {
right : 4 px ;
}
. inputNumberWrapper . numberinput - button - up {
border - color : transparent transparent # 999 transparent ;
border - style : solid ;
border - width : 2.5 px 5 px 5 px 5 px ;
display : inline - block ;
}
. inputNumberWrapper . numberinput - button - up : hover {
border - bottom - color : # 666 ;
}
$ { BDFDB . dotCN . themelight } . inputNumberWrapper . numberinput - button - up {
border - bottom - color : # dcddde ;
}
$ { BDFDB . dotCN . themelight } . inputNumberWrapper . numberinput - button - up : hover {
border - bottom - color : # 4 f545c ;
}
$ { BDFDB . dotCN . themedark } . inputNumberWrapper . numberinput - button - up {
border - bottom - color : # 72767 d ;
}
$ { BDFDB . dotCN . themedark } . inputNumberWrapper . numberinput - button - up : hover {
border - bottom - color : # f6f6f7 ;
}
. inputNumberWrapper . numberinput - button - down {
border - color : # 999 transparent transparent transparent ;
border - style : solid ;
border - width : 5 px 5 px 2.5 px 5 px ;
display : inline - block ;
}
. inputNumberWrapper . numberinput - button - down : hover {
border - top - color : # 666 ;
}
$ { BDFDB . dotCN . themelight } . inputNumberWrapper . numberinput - button - down {
border - top - color : # dcddde ;
}
$ { BDFDB . dotCN . themelight } . inputNumberWrapper . numberinput - button - down : hover {
border - top - color : # 4 f545c ;
}
$ { BDFDB . dotCN . themedark } . inputNumberWrapper . numberinput - button - down {
border - top - color : # 72767 d ;
}
$ { BDFDB . dotCN . themedark } . inputNumberWrapper . numberinput - button - down : hover {
border - top - color : # f6f6f7 ;
}
. BDFDB - select $ { BDFDB . dotCN . select } {
position : relative ;
box - sizing : border - box ;
}
. BDFDB - select $ { BDFDB . dotCN . selectcontrol } {
- webkit - box - align : center ;
align - items : center ;
display : flex ;
flex - wrap : wrap ;
- webkit - box - pack : justify ;
justify - content : space - between ;
min - height : 40 px ;
position : relative ;
box - sizing : border - box ;
border - radius : 3 px ;
border - style : solid ;
border - width : 1 px ;
transition : border 0.15 s ease 0 s ;
outline : 0 px ! important ;
}
. BDFDB - select $ { BDFDB . dotCN . selectcontrollight } {
background - color : rgba ( 79 , 84 , 92 , 0.02 ) ;
background - color : rgba ( 79 , 84 , 92 , 0.02 ) ;
}
. BDFDB - select $ { BDFDB . dotCN . selectcontroldark } {
background - color : rgba ( 0 , 0 , 0 , 0.1 ) ;
border - color : rgba ( 0 , 0 , 0 , 0.3 ) ;
}
. BDFDB - select $ { BDFDB . dotCN . selectvalue } {
- webkit - box - align : center ;
align - items : center ;
display : flex ;
flex - wrap : wrap ;
position : relative ;
box - sizing : border - box ;
flex : 1 1 0 % ;
padding : 2 px 8 px ;
overflow : hidden ;
}
. BDFDB - select $ { BDFDB . dotCN . selectsingle } {
margin - left : 2 px ;
margin - right : 2 px ;
max - width : calc ( 100 % - 8 px ) ;
width : calc ( 100 % - 8 px ) ;
position : absolute ;
text - overflow : ellipsis ;
white - space : nowrap ;
top : 50 % ;
transform : translateY ( - 50 % ) ;
box - sizing : border - box ;
opacity : 1 ;
overflow : hidden ;
}
. BDFDB - select $ { BDFDB . dotCN . selectsinglelight } {
color : rgb ( 32 , 34 , 37 ) ;
}
. BDFDB - select $ { BDFDB . dotCN . selectsingledark } {
color : rgb ( 246 , 246 , 247 ) ;
}
. BDFDB - select $ { BDFDB . dotCN . selectdummyinput } {
font - size : inherit ;
width : 1 px ;
color : transparent ;
left : - 100 px ;
opacity : 0 ;
position : relative ;
transform : scale ( 0 ) ;
background : 0 px center ;
border - width : 0 px ;
border - style : initial ;
border - color : initial ;
border - image : initial ;
outline : 0 px ;
padding : 0 px ;
}
. BDFDB - select $ { BDFDB . dotCN . selectarrowzone } {
- webkit - box - align : center ;
align - items : center ;
align - self : stretch ;
display : flex ;
flex - shrink : 0 ;
box - sizing : border - box ;
}
. BDFDB - select $ { BDFDB . dotCN . selectarrowcontainer } {
display : flex ;
box - sizing : border - box ;
cursor : pointer ;
opacity : 0.3 ;
padding : 8 px 8 px 8 px 0 px ;
transition : color 150 ms ease 0 s ;
}
. BDFDB - select $ { BDFDB . dotCN . selectarrowcontainerlight } {
color : rgb ( 32 , 34 , 37 ) ;
}
. BDFDB - select $ { BDFDB . dotCN . selectarrowcontainerdark } {
color : rgb ( 246 , 246 , 247 ) ;
}
. BDFDB - select $ { BDFDB . dotCN . selectarrow } {
display : inline - block ;
fill : currentcolor ;
line - height : 1 ;
stroke : currentcolor ;
stroke - width : 0 ;
}
. BDFDB - select $ { BDFDB . dotCN . selectmenuouter } {
top : 100 % ;
margin - bottom : - 1 px ;
margin - top : - 1 px ;
position : absolute ;
width : 100 % ;
z - index : 100 ;
box - sizing : border - box ;
border - radius : 0 px 0 px 3 px 3 px ;
border - width : 1 px ;
border - style : solid ;
border - image : initial ;
}
. BDFDB - select $ { BDFDB . dotCN . selectmenuouter } . above - select {
border - radius : 3 px 3 px 0 0 ;
}
. BDFDB - select $ { BDFDB . dotCN . selectmenuouterlight } {
background - color : rgb ( 255 , 255 , 255 ) ;
border - color : rgb ( 185 , 187 , 190 ) ;
color : rgb ( 32 , 34 , 37 ) ;
}
. BDFDB - select $ { BDFDB . dotCN . selectmenuouterdark } {
background - color : rgb ( 47 , 49 , 54 ) ;
border - color : rgb ( 32 , 34 , 37 ) ;
color : rgb ( 246 , 246 , 247 ) ;
}
. BDFDB - select $ { BDFDB . dotCN . selectmenu } {
max - height : 300 px ;
overflow - y : auto ;
position : relative ;
box - sizing : border - box ;
padding : 0 px ;
}
. BDFDB - select $ { BDFDB . dotCN . selectmenu } : : - webkit - scrollbar {
width : 8 px ;
}
. BDFDB - select $ { BDFDB . dotCN . selectmenu } : : - webkit - scrollbar - thumb {
background - color : rgba ( 0 , 0 , 0 , 0.4 ) ;
background - clip : padding - box ;
border - color : transparent ;
border - radius : 4 px ;
}
. BDFDB - select $ { BDFDB . dotCN . selectmenu } : : - webkit - scrollbar - track - piece {
background - color : transparent ;
border - color : transparent ;
}
. BDFDB - select $ { BDFDB . dotCN . selectoption } {
cursor : pointer ;
display : flex ;
font - size : inherit ;
width : 100 % ;
user - select : none ;
- webkit - tap - highlight - color : rgba ( 0 , 0 , 0 , 0 ) ;
box - sizing : border - box ;
- webkit - box - align : center ;
align - items : center ;
min - height : 40 px ;
padding : 8 px 12 px ;
}
. BDFDB - select $ { BDFDB . dotCN . selectoptionlight } {
background - color : transparent ;
color : rgb ( 32 , 34 , 37 ) ;
}
. BDFDB - select $ { BDFDB . dotCN . selectoptiondark } {
background - color : transparent ;
color : rgb ( 246 , 246 , 247 ) ;
}
. BDFDB - select $ { BDFDB . dotCN . selectoptionhoverlight } {
background - color : rgb ( 246 , 246 , 247 ) ;
color : rgb ( 32 , 34 , 37 ) ;
}
. BDFDB - select $ { BDFDB . dotCN . selectoptionhoverdark } {
background - color : rgba ( 0 , 0 , 0 , 0.1 ) ;
color : rgb ( 246 , 246 , 247 ) ;
}
. BDFDB - select $ { BDFDB . dotCN . selectoptionselectlight } {
background - color : rgb ( 220 , 221 , 222 ) ;
color : rgb ( 32 , 34 , 37 ) ;
}
. BDFDB - select $ { BDFDB . dotCN . selectoptionselectdark } {
background - color : rgba ( 0 , 0 , 0 , 0.2 ) ;
color : rgb ( 246 , 246 , 247 ) ;
}
. BDFDB - settings $ { BDFDB . dotCN . hovercard } ,
. BDFDB - settings $ { BDFDB . dotCNS . hovercard + BDFDB . dotCN . hovercardinner } {
width : 550 px ;
min - height : 28 px ;
}
. BDFDB - settingsmodal . BDFDB - settings {
margin - bottom : 20 px ;
}
. BDFDB - settingsmodal . BDFDB - settings $ { BDFDB . dotCN . hovercard } ,
. BDFDB - settingsmodal . BDFDB - settings $ { BDFDB . dotCNS . hovercard + BDFDB . dotCN . hovercardinner } {
width : 520 px ;
}
. BDFDB - settings $ { BDFDB . dotCN . hovercard } : before {
z - index : 50 ;
left : - 10 px ;
}
. BDFDB - settings $ { BDFDB . dotCNS . hovercard + BDFDB . dotCN . hovercardinner } {
overflow : hidden ;
display : flex ;
align - items : center ;
position : relative ;
z - index : 100 ;
}
. BDFDB - settings $ { BDFDB . dotCNS . hovercard + BDFDB . dotCN . hovercardbutton } {
opacity : 0 ;
position : absolute ;
right : - 31 px ;
top : - 12 px ;
z - index : 200 ;
}
. BDFDB - settings $ { BDFDB . dotCN . hovercard } : hover $ { BDFDB . dotCN . hovercardbutton } {
opacity : 1 ;
}
. BDFDB - modal $ { BDFDB . dotCN . checkboxcontainer } ,
. BDFDB - settings $ { BDFDB . dotCN . checkboxcontainer } {
display : flex ;
align - items : center ;
flex - direction : column ;
margin - right : 5 px ;
margin - left : 5 px ;
}
. BDFDB - modal $ { BDFDB . dotCN . checkboxcontainer } : before ,
. BDFDB - settings $ { BDFDB . dotCN . checkboxcontainer } : before {
display : none ;
}
. BDFDB - modal $ { BDFDB . dotCN . colorpickerswatches + BDFDB . dotCN . colorpickerswatchesdisabled } ,
. BDFDB - settings $ { BDFDB . dotCN . colorpickerswatches + BDFDB . dotCN . colorpickerswatchesdisabled } {
cursor : no - drop ;
filter : grayscale ( 70 % ) brightness ( 50 % ) ;
}
. BDFDB - modal $ { BDFDB . dotCN . colorpickerswatch + BDFDB . notCN . colorpickerswatchnocolor + BDFDB . notCN . colorpickerswatchdefault + BDFDB . notCN . colorpickerswatchdisabled } ,
. BDFDB - settings $ { BDFDB . dotCN . colorpickerswatch + BDFDB . notCN . colorpickerswatchnocolor + BDFDB . notCN . colorpickerswatchdefault + BDFDB . notCN . colorpickerswatchdisabled } {
overflow : hidden ;
}
. BDFDB - colorpicker . gradient - bar . gradient - cursor > div : after ,
. BDFDB - modal $ { BDFDB . dotCN . colorpickerswatch + BDFDB . notCN . colorpickerswatchnocolor + BDFDB . notCN . colorpickerswatchdefault + BDFDB . notCN . colorpickerswatchdisabled } : after ,
. BDFDB - settings $ { BDFDB . dotCN . colorpickerswatch + BDFDB . notCN . colorpickerswatchnocolor + BDFDB . notCN . colorpickerswatchdefault + BDFDB . notCN . colorpickerswatchdisabled } : after {
content : "" ;
position : absolute ;
top : 0 ;
right : 0 ;
bottom : 0 ;
left : 0 ;
z - index : - 1 ;
}
. BDFDB - modal $ { BDFDB . dotCN . colorpickerswatch + BDFDB . notCN . colorpickerswatchdefault } : after ,
. BDFDB - settings $ { BDFDB . dotCN . colorpickerswatch + BDFDB . notCN . colorpickerswatchdefault } : after {
border - radius : 3 px ;
}
. BDFDB - modal $ { BDFDB . dotCN . colorpickerswatch + BDFDB . dotCN . colorpickerswatchcustom + BDFDB . notCN . colorpickerswatchdefault } : after ,
. BDFDB - settings $ { BDFDB . dotCN . colorpickerswatch + BDFDB . dotCN . colorpickerswatchcustom + BDFDB . notCN . colorpickerswatchdefault } : after {
border - radius : 5 px ;
}
. BDFDB - colorpicker . alpha - checker ,
. BDFDB - colorpicker . gradient - bar . gradient - cursor > div : after ,
. BDFDB - modal $ { BDFDB . dotCN . colorpickerswatch + BDFDB . notCN . colorpickerswatchnocolor + BDFDB . notCN . colorpickerswatchdefault + BDFDB . notCN . colorpickerswatchdisabled } : after ,
. BDFDB - settings $ { BDFDB . dotCN . colorpickerswatch + BDFDB . notCN . colorpickerswatchnocolor + BDFDB . notCN . colorpickerswatchdefault + BDFDB . notCN . colorpickerswatchdisabled } : after {
background : url ( data : image / svg + xml ; utf8 , < svg xmlns = "http://www.w3.org/2000/svg" width = "8" height = "8" > < rect x = "0" y = "0" width = "4" height = "4" fill = "black" > < / r e c t > < r e c t x = " 0 " y = " 4 " w i d t h = " 4 " h e i g h t = " 4 " f i l l = " w h i t e " > < / r e c t > < r e c t x = " 4 " y = " 0 " w i d t h = " 4 " h e i g h t = " 4 " f i l l = " w h i t e " > < / r e c t > < r e c t x = " 4 " y = " 4 " w i d t h = " 4 " h e i g h t = " 4 " f i l l = " b l a c k " > < / r e c t > < / s v g > ) c e n t e r r e p e a t
}
. BDFDB - modal $ { BDFDB . dotCN . colorpickerswatches + BDFDB . dotCN . colorpickerswatchesdisabled } $ { BDFDB . dotCN . colorpickerswatch } ,
. BDFDB - settings $ { BDFDB . dotCN . colorpickerswatches + BDFDB . dotCN . colorpickerswatchesdisabled } $ { BDFDB . dotCN . colorpickerswatch } {
cursor : no - drop ;
}
. BDFDB - modal $ { BDFDB . dotCN . colorpickerswatch + BDFDB . dotCN . colorpickerswatchcustom } [ style *= "background" ] ,
. BDFDB - settings $ { BDFDB . dotCN . colorpickerswatch + BDFDB . dotCN . colorpickerswatchcustom } [ style *= "background" ] {
border : none ;
}
$ { BDFDB . dotCNS . themelight + BDFDB . dotCN . colorpickersaturation } > div > div > div > div {
box - shadow : rgb ( 200 , 200 , 200 ) 0 px 0 px 0 px 1.5 px , rgba ( 0 , 0 , 0 , 0.6 ) 0 px 0 px 1 px 1 px inset , rgba ( 0 , 0 , 0 , 0.6 ) 0 px 0 px 1 px 2 px ! important ;
}
$ { BDFDB . dotCNS . themelight + BDFDB . dotCN . colorpickerhue } > div > div > div > div ,
$ { BDFDB . dotCN . themelight } . BDFDB - colorpicker . alpha - bar > div > div > div > div {
background : rgb ( 200 , 200 , 200 ) ! important ;
box - shadow : rgba ( 0 , 0 , 0 , 1 ) 0 px 0 px 2 px ! important ;
}
. BDFDB - colorpicker . gradient - button {
cursor : pointer ;
opacity : 0.3 ;
transition : all 200 ms ease ;
}
. BDFDB - colorpicker . gradient - button : hover {
opacity : 0.6 ;
}
. BDFDB - colorpicker . gradient - button . selected ,
. BDFDB - colorpicker . gradient - button . selected : hover {
opacity : 1 ;
}
$ { BDFDB . dotCN . themelight } . BDFDB - colorpicker . gradient - button {
color : # 4 f545c ;
}
$ { BDFDB . dotCN . themedark } . BDFDB - colorpicker . gradient - button {
color : # fff ;
}
. BDFDB - colorpicker . alpha - checker ,
. BDFDB - colorpicker . alpha - horizontal ,
. BDFDB - colorpicker . gradient - horizontal {
border - radius : 3 px ;
}
. BDFDB - colorpicker . alpha - bar . alpha - cursor ,
. BDFDB - colorpicker . gradient - bar . gradient - cursor {
position : absolute ;
}
. BDFDB - colorpicker . gradient - bar . gradient - cursor > div {
height : 8 px ;
width : 8 px ;
margin - top : - 15 px ;
border : 1 px solid rgb ( 128 , 128 , 128 ) ;
border - radius : 3 px ;
transform : translateX ( - 5 px ) ;
transform - style : preserve - 3 d ;
}
. BDFDB - colorpicker . gradient - bar . gradient - cursor > div : after {
border - radius : 3 px ;
transform : translateZ ( - 1 px ) ;
}
. BDFDB - colorpicker . gradient - bar . gradient - cursor > div : before {
content : "" ;
position : absolute ;
border : 3 px solid transparent ;
border - top - width : 5 px ;
border - top - color : rgb ( 128 , 128 , 128 ) ;
width : 0 ;
height : 0 ;
top : 100 % ;
left : - 50 % ;
transform : translateX ( 5 px ) ;
}
. BDFDB - colorpicker . gradient - bar . gradient - cursor . edge > div : before {
border - right - width : 0 ;
border - left - width : 5 px ;
}
. BDFDB - colorpicker . gradient - bar . gradient - cursor . edge ~ . gradient - cursor . edge > div : before {
border - right - width : 5 px ;
border - left - width : 0 ;
}
$ { BDFDB . dotCN . themelight } . BDFDB - colorpicker . gradient - bar . gradient - cursor . selected > div {
border - color : rgb ( 55 , 55 , 55 ) ;
}
$ { BDFDB . dotCN . themelight } . BDFDB - colorpicker . gradient - bar . gradient - cursor . selected > div : before {
border - top - color : rgb ( 55 , 55 , 55 ) ;
}
$ { BDFDB . dotCN . themedark } . BDFDB - colorpicker . gradient - bar . gradient - cursor . selected > div {
border - color : rgb ( 200 , 200 , 200 ) ;
}
$ { BDFDB . dotCN . themedark } . BDFDB - colorpicker . gradient - bar . gradient - cursor . selected > div : before {
border - top - color : rgb ( 200 , 200 , 200 ) ;
}
. BDFDB - modal $ { BDFDB . dotCN . inputdefault } . valid {
background - color : rgba ( 67 , 181 , 129 , 0.5 ) ;
}
. BDFDB - modal $ { BDFDB . dotCN . inputdefault } . valid : hover {
border - color : rgb ( 27 , 141 , 89 ) ;
}
. BDFDB - modal $ { BDFDB . dotCN . inputdefault } . valid : focus {
border - color : rgb ( 67 , 181 , 129 ) ;
}
. BDFDB - modal $ { BDFDB . dotCN . inputdefault } . valid : : placeholder {
color : rgba ( 67 , 181 , 129 , 0.7 ) ;
}
. BDFDB - modal $ { BDFDB . dotCN . inputdefault } . invalid {
background - color : rgba ( 241 , 71 , 71 , 0.5 ) ;
}
. BDFDB - modal $ { BDFDB . dotCN . inputdefault } . invalid : hover {
border - color : rgb ( 201 , 31 , 31 ) ;
}
. BDFDB - modal $ { BDFDB . dotCN . inputdefault } . invalid : focus {
border - color : rgb ( 241 , 71 , 71 ) ;
}
. BDFDB - modal $ { BDFDB . dotCN . inputdefault } . invalid : : placeholder {
color : rgba ( 241 , 71 , 71 , 0.7 ) ;
}
. BDFDB - modal $ { BDFDB . dotCN . inputdefault } : disabled {
color : # 555555 ;
cursor : no - drop ;
background - color : rgba ( 0 , 0 , 0 , 0.5 ) ;
}
. BDFDB - modal $ { BDFDB . dotCN . modalheader + BDFDB . dotCN . modalheaderhassibling } {
padding - bottom : 10 px ;
}
. BDFDB - modal $ { BDFDB . dotCN . tabbarcontainer } {
background : rgba ( 0 , 0 , 0 , 0.1 ) ;
border : none ! important ;
box - shadow : 0 2 px 3 px 0 rgba ( 0 , 0 , 0 , 0.05 ) ;
}
$ { BDFDB . dotCN . themedark } . BDFDB - modal $ { BDFDB . dotCN . tabbarcontainer } {
background : rgba ( 0 , 0 , 0 , 0.2 ) ;
box - shadow : 0 2 px 3 px 0 rgba ( 0 , 0 , 0 , 0.1 ) ;
}
/* REMOVE */
. BDFDB - modal $ { BDFDB . dotCN . modaltabcontent + BDFDB . dotCN . modaltabcontentopen } {
display : flex ;
flex - direction : column ;
flex - wrap : nowrap ;
justify - content : flex - start ;
align - items : stretch ;
}
. BDFDB - modal $ { BDFDB . dotCN . modaltabcontent + BDFDB . notCN . modaltabcontentopen } {
display : none ;
}
/* REMOVE */
. BDFDB - modal * $ { BDFDB . notCN . modalsubinner } > $ { BDFDB . dotCN . modaltabcontent + BDFDB . dotCN . modaltabcontentopen + BDFDB . notCN . modalsubinner } > * {
padding : 0 20 px 0 12 px ;
}
. colorpicker - modal . colorpicker - container {
padding : 10 px 10 px 10 px 30 px ;
overflow : hidden ;
display : initial ;
margin : auto ;
}
. colorpicker - modal . colorpicker - color ,
. colorpicker - modal . colorpicker - slider ,
. colorpicker - modal . colorpicker - controls {
float : left ;
margin - right : 20 px ;
}
. colorpicker - modal . colorpicker - inputs {
text - align : center ;
width : 150 px ;
padding : 3 px 3 px 3 px 10 px ;
margin - top : 87 px ;
}
. colorpicker - modal . colorpicker - pickerpane ,
. colorpicker - modal . colorpicker - black ,
. colorpicker - modal . colorpicker - white ,
. colorpicker - modal . colorpicker - color {
position : relative ;
top : 0 px ;
left : 0 px ;
height : 308 px ;
width : 308 px ;
}
. colorpicker - modal . colorpicker - pickercursor {
position : absolute ;
height : 14 px ;
width : 14 px ;
}
. colorpicker - modal . colorpicker - pickercursor svg {
position : relative ;
height : 14 px ;
width : 14 px ;
}
. colorpicker - modal . colorpicker - sliderpane ,
. colorpicker - modal . colorpicker - slider {
position : relative ;
top : 0 px ;
left : 0 px ;
height : 308 px ;
width : 20 px ;
}
. colorpicker - modal . colorpicker - slidercursor {
position : absolute ;
left : - 6 px ;
height : 12 px ;
width : 32 px ;
}
. colorpicker - modal . colorpicker - slidercursor svg {
position : relative ;
height : 12 px ;
width : 32 px ;
}
. colorpicker - modal [ class ^= "colorpicker-preview-" ] {
background - color : # 808080 ;
border : 3 px solid transparent ;
height : 65 px ;
width : 80 px ;
float : left ;
}
. colorpicker - modal . colorpicker - preview - 0 {
border - radius : 5 px 0 0 5 px ;
border - right : none ;
}
. colorpicker - modal . colorpicker - preview - 2 {
border - radius : 0 5 px 5 px 0 ;
border - left : none ;
} ` );
BDFDB . ListenerUtils . add ( BDFDB , document , "click.BDFDBPluginClick" , ".bd-settingswrap .bd-refresh-button, .bd-settingswrap .bd-switch-checkbox" , ( ) => {
BDFDB . BdUtils . setPluginCache ( ) ;
BDFDB . BdUtils . setThemeCache ( ) ;
} ) ;
var KeyDownTimeouts = { } ;
BDFDB . ListenerUtils . add ( BDFDB , document , "keydown.BDFDBPressedKeys" , e => {
if ( ! BDFDB . pressedKeys . includes ( e . which ) ) {
clearTimeout ( KeyDownTimeouts [ e . which ] ) ;
BDFDB . pressedKeys . push ( e . which ) ;
KeyDownTimeouts [ e . which ] = setTimeout ( ( ) => { BDFDB . ArrayUtils . remove ( BDFDB . pressedKeys , e . which , true ) ; } , 60000 ) ;
}
} ) ;
BDFDB . ListenerUtils . add ( BDFDB , document , "keyup.BDFDBPressedKeys" , e => {
clearTimeout ( KeyDownTimeouts [ e . which ] ) ;
BDFDB . ArrayUtils . remove ( BDFDB . pressedKeys , e . which , true ) ;
} ) ;
BDFDB . ListenerUtils . add ( BDFDB , document , "mousedown.BDFDBMousePosition" , e => {
BDFDB . mousePosition = e ;
} ) ;
BDFDB . ListenerUtils . add ( BDFDB , window , "focus.BDFDBPressedKeysReset" , e => {
BDFDB . pressedKeys = [ ] ;
} ) ;
BDFDB . patchModules = {
V2C _List : "componentDidMount" ,
V2C _PluginCard : [ "componentDidMount" , "componentDidUpdate" ] ,
V2C _ThemeCard : [ "componentDidMount" , "componentDidUpdate" ] ,
UserPopout : [ "componentDidMount" ] ,
UserProfile : [ "componentDidMount" ] ,
Message : [ "componentDidMount" , "componentDidUpdate" , "render" ]
} ;
BDFDB . WebModules . patch ( LibraryModules . GuildStore , "getGuild" , BDFDB , { after : e => {
if ( e . returnValue && e . methodArguments [ 0 ] == "410787888507256842" && ! e . returnValue . banner ) {
e . returnValue . banner = " data : image / png ; base64 , iVBORw0KGgoAAAANSUhEUgAABkAAAAMgCAIAAAD0ojkNAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89 + bN / rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz / SMBAPh + PDwrIsAHvgABeNMLCADATZvAMByH / w / qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf + bTAICd + Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA / g88wAAKCRFRHgg / P9eM4Ors7ONo62Dl8t6r8G / yJiYuP + 5 c + rcEAAAOF0ftH + LC + zGoA7BoBt / qIl7gRoXgugdfeLZrIPQLUAoOnaV / Nw + H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl / AV / 1 s + X48 / Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H / LcL //wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAAcFtJREFUeNrs/Xm8JldBJ/7XqXq2u/a+Zukk3ensG0kISxIWJwgBESGADOogouDoqDCiKLJ8BREXRMVhBv0hg8wXHUW+oARCwEDIQkL2felOdzq9r3dfnq3O748OGCFLd5J7u+6t9/ulgXT3fer2p85zq54P55wKq1atSgAAAACgqFIRAAAAAFBkCiwAAAAACk2BBQAAAEChKbAAAAAAKDQFFgAAAACFpsACAAAAoNAUWAAAAAAUmgILAAAAgEJTYAEAAABQaAosAAAAAApNgQUAAABAoSmwAAAAACg0BRYAAAAAhabAAgAAAKDQFFgAAAAAFJoCCwAAAIBCU2ABAAAAUGgKLAAAAAAKTYEFAAAAQKEpsAAAAAAoNA
}
} } ) ;
BDFDB . WebModules . patch ( LibraryModules . IconUtils , "getGuildBannerURL" , BDFDB , { instead : e => {
return e . methodArguments [ 0 ] . id == "410787888507256842" ? e . methodArguments [ 0 ] . banner : e . callOriginalMethod ( ) ;
} } ) ;
var BDFDBprocessFunctions = { } ;
BDFDBprocessFunctions . processV2CList = function ( instance , wrapper , returnvalue ) {
if ( window . PluginUpdates && window . PluginUpdates . plugins && instance . _reactInternalFiber . key && instance . _reactInternalFiber . key . split ( "-" ) [ 0 ] == "plugin" ) {
var folderbutton = document . querySelector ( BDFDB . dotCN . _repofolderbutton ) ;
if ( folderbutton ) {
var updatebutton = BDFDB . htmlToElement ( ` <button class="bd-updatebtn ${ BDFDB . disCN . _repofolderbutton } ">Check for Updates</button> ` ) ;
updatebutton . addEventListener ( "click" , ( ) => { BDFDB . PluginUtils . checkAllUpdates ( ) ; } ) ;
updatebutton . addEventListener ( "mouseenter" , ( ) => {
BDFDB . TooltipUtils . create ( updatebutton , "Only checks for updates of plugins, which support the updatecheck. Rightclick for a list of supported plugins." , { type : "top" , selector : "update-button-tooltip" , style : "max-width: 420px" } ) ;
} ) ;
updatebutton . addEventListener ( "contextmenu" , ( ) => {
if ( window . PluginUpdates && window . PluginUpdates . plugins && ! document . querySelector ( ".update-list-tooltip" ) ) {
var pluginnames = [ ] ;
for ( let url in window . PluginUpdates . plugins ) pluginnames . push ( window . PluginUpdates . plugins [ url ] . name ) ;
BDFDB . TooltipUtils . create ( updatebutton , pluginnames . sort ( ) . join ( ", " ) , { type : "bottom" , selector : "update-list-tooltip" , style : "max-width: 420px" } ) ;
}
} ) ;
BDFDB . removeEles ( "#bd-settingspane-container .bd-updatebtn" + BDFDB . dotCN . _repofolderbutton ) ;
folderbutton . parentElement . insertBefore ( updatebutton , folderbutton . nextSibling ) ;
new MutationObserver ( changes => { changes . forEach ( change => { change . addedNodes . forEach ( node => {
if ( folderbutton . parentElement . querySelectorAll ( ".bd-updatebtn" ) . length > 1 && BDFDB . containsClass ( node , "bd-updatebtn" ) ) BDFDB . removeEles ( node ) ;
} ) ; } ) ; } ) . observe ( folderbutton . parentElement , { subtree : true , childList : true } ) ;
}
}
} ;
BDFDBprocessFunctions . _processCard = function ( instance , wrapper , data ) {
var author , description = null ;
if ( BDFDB . containsClass ( wrapper , BDFDB . disCN . _reposettingsclosed ) && ( author = wrapper . querySelector ( BDFDB . dotCN . _repoauthor ) ) != null && ( description = wrapper . querySelector ( BDFDB . dotCN . _repodescription ) ) != null && ( ! BDFDB . ObjectUtils . is ( data ) || typeof data . getRawUrl != "function" ) ) {
if ( ! author . firstElementChild && ! description . firstElementChild && ( author . innerText == "DevilBro" || author . innerText . indexOf ( "DevilBro," ) == 0 ) ) {
description . style . setProperty ( "display" , "block" , "important" ) ;
author . innerHTML = ` <a class=" ${ BDFDB . disCNS . anchor + BDFDB . disCN . anchorunderlineonhover } ">DevilBro</a> ${ author . innerText . split ( "DevilBro" ) . slice ( 1 ) . join ( "DevilBro" ) } ` ;
author . addEventListener ( "click" , ( ) => {
if ( BDFDB . myData . id == "278543574059057154" ) return ;
let DMid = LibraryModules . ChannelStore . getDMFromUserId ( "278543574059057154" )
if ( DMid ) LibraryModules . SelectChannelUtils . selectPrivateChannel ( DMid ) ;
else LibraryModules . DirectMessageUtils . openPrivateChannel ( BDFDB . myData . id , "278543574059057154" ) ;
let close = document . querySelector ( BDFDB . dotCNS . settingsclosebuttoncontainer + BDFDB . dotCN . settingsclosebutton ) ;
if ( close ) close . click ( ) ;
} ) ;
let version = wrapper . querySelector ( BDFDB . dotCN . _repoversion ) ;
if ( version && data . changelog ) {
BDFDB . removeEles ( version . querySelectorAll ( ".BDFDB-versionchangelog" ) ) ;
let changelogicon = BDFDB . htmlToElement ( ` <span class="BDFDB-versionchangelog" style="white-space: pre !important;"> </span> ` ) ;
version . appendChild ( changelogicon ) ;
changelogicon . addEventListener ( "click" , ( ) => { BDFDB . PluginUtils . openChangeLog ( data ) ; } ) ;
changelogicon . addEventListener ( "mouseenter" , ( ) => {
BDFDB . TooltipUtils . create ( changelogicon , BDFDB . LanguageStrings . CHANGE _LOG , { type : "top" , selector : "changelogicon-tooltip" } ) ;
} ) ;
}
let links = wrapper . querySelector ( BDFDB . dotCN . _repolinks ) ;
if ( links ) {
if ( links . firstElementChild ) links . appendChild ( document . createTextNode ( " | " ) ) ;
let supportlink = BDFDB . htmlToElement ( ` <a class=" ${ BDFDB . disCNS . _repolink + BDFDB . disCN . _repolink } -support" target="_blank">Support Server</a> ` ) ;
supportlink . addEventListener ( "click" , e => {
BDFDB . ListenerUtils . stopEvent ( e ) ;
let switchguild = ( ) => {
LibraryModules . GuildUtils . transitionToGuildSync ( "410787888507256842" ) ;
let close = document . querySelector ( BDFDB . dotCNS . settingsclosebuttoncontainer + BDFDB . dotCN . settingsclosebutton ) ;
if ( close ) close . click ( ) ;
} ;
if ( LibraryModules . GuildStore . getGuild ( "410787888507256842" ) ) switchguild ( ) ;
else LibraryModules . InviteUtils . acceptInvite ( "Jx3TjNS" ) . then ( ( ) => { switchguild ( ) ; } ) ;
} ) ;
links . appendChild ( supportlink ) ;
if ( BDFDB . myData . id != "98003542823944192" && BDFDB . myData . id != "116242787980017679" && BDFDB . myData . id != "81388395867156480" ) {
links . appendChild ( document . createTextNode ( " | " ) ) ;
links . appendChild ( BDFDB . htmlToElement ( ` <a class=" ${ BDFDB . disCNS . _repolink + BDFDB . disCN . _repolink } -donations" href="https://www.paypal.me/MircoWittrien" target="_blank">Donations</a> ` ) ) ;
}
}
}
}
} ;
BDFDBprocessFunctions . processV2CPluginCard = function ( instance , wrapper , returnvalue ) { BDFDBprocessFunctions . _processCard ( instance , wrapper , instance . props . plugin ) ; } ;
BDFDBprocessFunctions . processV2CThemeCard = function ( instance , wrapper , returnvalue ) { BDFDBprocessFunctions . _processCard ( instance , wrapper , instance . props . theme ) ; } ;
BDFDBprocessFunctions . _processAvatar = function ( user , avatar ) {
if ( avatar && user ) {
avatar . setAttribute ( "user_by_BDFDB" , user . id ) ;
var status = avatar . querySelector ( BDFDB . dotCN . avatarpointerevents ) ;
if ( status ) {
status . addEventListener ( "mouseenter" , ( ) => { BDFDB . addClass ( avatar , "statusHovered" ) } ) ;
status . addEventListener ( "mouseleave" , ( ) => { BDFDB . removeClass ( avatar , "statusHovered" ) } ) ;
}
}
} ;
BDFDBprocessFunctions . processUserPopout = function ( instance , wrapper , returnvalue ) {
BDFDBprocessFunctions . _processAvatar ( instance . props . user , wrapper . querySelector ( BDFDB . dotCN . userpopoutavatarwrapper ) ) ;
} ;
BDFDBprocessFunctions . processUserProfile = function ( instance , wrapper , returnvalue ) {
BDFDBprocessFunctions . _processAvatar ( instance . props . user , wrapper . querySelector ( BDFDB . dotCN . avatarwrapper ) ) ;
} ;
BDFDBprocessFunctions . processMessage = function ( instance , wrapper , returnvalue ) {
BDFDBprocessFunctions . _processAvatar ( instance . props . message . author , wrapper . querySelector ( BDFDB . dotCN . avatarwrapper ) ) ;
} ;
BDFDB . WebModules . patchModules ( BDFDB ) ;
BDFDB . WebModules . forceAllUpdates ( BDFDB ) ;
addContextListeners ( BDFDB ) ;
BDFDB . ObserverUtils . connect ( BDFDB , document . querySelector ( BDFDB . dotCN . itemlayercontainer ) , { name : "layerObserverBDFDB" , instance :
new MutationObserver ( changes => { changes . forEach ( change => { change . addedNodes . forEach ( node => {
if ( node . tagName && ( BDFDB . containsClass ( node , BDFDB . disCN . contextmenu ) || ( node = node . querySelector ( BDFDB . dotCN . contextmenu ) ) != null ) ) BDFDB . initElements ( node ) ;
} ) } ) } )
} , { childList : true } ) ;
BDFDB . loaded = true ;
InternalBDFDB . reloadLib = ( ) => {
var libraryScript = document . querySelector ( "head script#BDFDBLibraryScript" ) ;
if ( libraryScript ) libraryScript . remove ( ) ;
libraryScript = document . createElement ( "script" ) ;
libraryScript . setAttribute ( "id" , "BDFDBLibraryScript" ) ;
libraryScript . setAttribute ( "type" , "text/javascript" ) ;
libraryScript . setAttribute ( "src" , "https://mwittrien.github.io/BetterDiscordAddons/Plugins/BDFDB.min.js" ) ;
libraryScript . setAttribute ( "date" , performance . now ( ) ) ;
document . head . appendChild ( libraryScript ) ;
} ;
var libKeys = Object . keys ( BDFDB ) . length - 10 , crashInterval = setInterval ( ( ) => {
if ( ! window . BDFDB || typeof BDFDB != "object" || Object . keys ( BDFDB ) . length < libKeys || ! BDFDB . id ) {
console . warn ( ` %c[BDFDB]%c ` , "color: #3a71c1; font-weight: 700;" , "" , "reloading library due to internal error." ) ;
clearInterval ( crashInterval ) ;
InternalBDFDB . reloadLib ( ) ;
}
else if ( BDFDB . id != id ) {
clearInterval ( crashInterval ) ;
}
else if ( ! BDFDB . creationTime || performance . now ( ) - BDFDB . creationTime > 18000000 ) {
clearInterval ( crashInterval ) ;
InternalBDFDB . reloadLib ( ) ;
}
} , 10000 ) ;
if ( BDFDB . myData . id == "278543574059057154" ) {
for ( let module in DiscordClassModules ) if ( ! DiscordClassModules [ module ] ) console . warn ( ` %c[BDFDB]%c ` , "color: #3a71c1; font-weight: 700;" , "" , module + " not initialized in DiscordClassModules" ) ;
for ( let require in LibraryRequires ) if ( ! LibraryRequires [ require ] ) console . warn ( ` %c[BDFDB]%c ` , "color: #3a71c1; font-weight: 700;" , "" , require + " not initialized in LibraryRequires" ) ;
for ( let module in LibraryModules ) if ( ! LibraryModules [ module ] ) console . warn ( ` %c[BDFDB]%c ` , "color: #3a71c1; font-weight: 700;" , "" , module + " not initialized in LibraryModules" ) ;
for ( let component in NativeSubComponents ) if ( ! NativeSubComponents [ component ] ) console . warn ( ` %c[BDFDB]%c ` , "color: #3a71c1; font-weight: 700;" , "" , component + " not initialized in NativeSubComponents" ) ;
for ( let component in LibraryComponents ) if ( ! LibraryComponents [ component ] ) console . warn ( ` %c[BDFDB]%c ` , "color: #3a71c1; font-weight: 700;" , "" , component + " not initialized in LibraryComponents" ) ;
BDFDB . WebModules . DevFuncs = { } ;
BDFDB . WebModules . DevFuncs . findByIndex = function ( index ) {
var req = getWebModuleReq ( ) ;
return req . c [ index ] ;
} ;
BDFDB . WebModules . DevFuncs . findPropAny = function ( strings ) {
strings = Array . isArray ( strings ) ? strings : Array . from ( arguments ) ;
var req = getWebModuleReq ( ) ; window . t = { "$filter" : ( prop => strings . every ( string => prop . toLowerCase ( ) . indexOf ( string . toLowerCase ( ) ) > - 1 ) ) } ;
for ( let i in req . c ) if ( req . c . hasOwnProperty ( i ) ) {
let m = req . c [ i ] . exports ;
if ( m && typeof m == "object" ) for ( let j in m ) if ( window . t . $filter ( j ) ) window . t [ j + "_" + i ] = m ;
if ( m && typeof m == "object" && typeof m . default == "object" ) for ( let j in m . default ) if ( window . t . $filter ( j ) ) window . t [ j + "_default_" + i ] = m . default ;
}
console . clear ( ) ;
console . log ( window . t ) ;
} ;
BDFDB . WebModules . DevFuncs . findPropFunc = function ( strings ) {
strings = Array . isArray ( strings ) ? strings : Array . from ( arguments ) ;
var req = getWebModuleReq ( ) ; window . t = { "$filter" : ( prop => strings . every ( string => prop . toLowerCase ( ) . indexOf ( string . toLowerCase ( ) ) > - 1 ) ) } ;
for ( let i in req . c ) if ( req . c . hasOwnProperty ( i ) ) {
let m = req . c [ i ] . exports ;
if ( m && typeof m == "object" ) for ( let j in m ) if ( window . t . $filter ( j ) && typeof m [ j ] != "string" ) window . t [ j + "_" + i ] = m ;
if ( m && typeof m == "object" && typeof m . default == "object" ) for ( let j in m . default ) if ( window . t . $filter ( j ) && typeof m . default [ j ] != "string" ) window . t [ j + "_default_" + i ] = m . default ;
}
console . clear ( ) ;
console . log ( window . t ) ;
} ;
BDFDB . WebModules . DevFuncs . findPropStringLib = function ( strings ) {
strings = Array . isArray ( strings ) ? strings : Array . from ( arguments ) ;
var req = getWebModuleReq ( ) ; window . t = { "$filter" : ( prop => strings . every ( string => prop . toLowerCase ( ) . indexOf ( string . toLowerCase ( ) ) > - 1 ) ) } ;
for ( let i in req . c ) if ( req . c . hasOwnProperty ( i ) ) {
let m = req . c [ i ] . exports ;
if ( m && typeof m == "object" ) for ( let j in m ) if ( window . t . $filter ( j ) && typeof m [ j ] == "string" && /^[A-z0-9]+\-[A-z0-9_-]{6}$/ . test ( m [ j ] ) ) window . t [ j + "_" + i ] = m ;
if ( m && typeof m == "object" && typeof m . default == "object" ) for ( let j in m . default ) if ( window . t . $filter ( j ) && typeof m . default [ j ] == "string" && /^[A-z0-9]+\-[A-z0-9_-]{6}$/ . test ( m . default [ j ] ) ) window . t [ j + "_default_" + i ] = m . default ;
}
console . clear ( ) ;
console . log ( window . t ) ;
} ;
BDFDB . WebModules . DevFuncs . findNameAny = function ( strings ) {
strings = Array . isArray ( strings ) ? strings : Array . from ( arguments ) ;
var req = getWebModuleReq ( ) ; window . t = { "$filter" : ( modu => strings . some ( string => typeof modu . displayName == "string" && modu . displayName . toLowerCase ( ) . indexOf ( string . toLowerCase ( ) ) > - 1 || modu . name == "string" && modu . name . toLowerCase ( ) . indexOf ( string . toLowerCase ( ) ) > - 1 ) ) } ;
for ( let i in req . c ) if ( req . c . hasOwnProperty ( i ) ) {
let m = req . c [ i ] . exports ;
if ( m && ( typeof m == "object" || typeof m == "function" ) && window . t . $filter ( m ) ) window . t [ ( m . displayName || m . name ) + "_" + i ] = m ;
if ( m && ( typeof m == "object" || typeof m == "function" ) && m . default && ( typeof m . default == "object" || typeof m . default == "function" ) && window . t . $filter ( m . default ) ) window . t [ ( m . default . displayName || m . default . name ) + "_" + i ] = m . default ;
}
console . clear ( ) ;
console . log ( window . t ) ;
} ;
BDFDB . WebModules . DevFuncs . findCodeAny = function ( strings ) {
strings = Array . isArray ( strings ) ? strings : Array . from ( arguments ) ;
var req = getWebModuleReq ( ) ; window . t = { "$filter" : ( prop => strings . every ( string => prop . toLowerCase ( ) . indexOf ( string . toLowerCase ( ) ) > - 1 ) ) } ;
for ( let i in req . c ) if ( req . c . hasOwnProperty ( i ) ) {
let m = req . c [ i ] . exports ;
if ( m && typeof m == "object" ) for ( let j in m ) {
let f = m [ j ] ;
if ( typeof f == "function" && window . t . $filter ( f . toString ( ) ) ) window . t [ j + "_module_" + i ] = { string : f . toString ( ) , func : f , module : m } ;
}
if ( m && typeof m == "object" && typeof m . default == "object" ) for ( let j in m . default ) {
let f = m . default [ j ] ;
if ( typeof f == "function" && window . t . $filter ( f . toString ( ) ) ) window . t [ j + "_default_" + i ] = { string : f . toString ( ) , func : f , module : m . default } ;
}
}
for ( let i in req . m ) {
let f = req . m [ i ] ;
if ( typeof f == "function" && window . t . $filter ( f . toString ( ) ) ) window . t [ "funtion_" + i ] = { string : f . toString ( ) , func : f } ;
}
console . clear ( ) ;
console . log ( window . t ) ;
} ;
BDFDB . WebModules . DevFuncs . getAllModules = function ( ) {
var req = getWebModuleReq ( ) ; window . t = { } ;
for ( let i in req . c ) if ( req . c . hasOwnProperty ( i ) ) {
let m = req . c [ i ] . exports ;
if ( m && typeof m == "object" ) window . t [ i ] = m ;
}
console . clear ( ) ;
console . log ( window . t ) ;
} ;
BDFDB . WebModules . DevFuncs . getAllStringLibs = function ( ) {
var req = getWebModuleReq ( ) ; window . t = [ ] ;
for ( let i in req . c ) if ( req . c . hasOwnProperty ( i ) ) {
let m = req . c [ i ] . exports ;
if ( m && typeof m == "object" && ! Array . isArray ( m ) && Object . keys ( m ) . length ) {
var string = true , stringlib = false ;
for ( let j in m ) {
if ( typeof m [ j ] != "string" ) string = false ;
if ( typeof m [ j ] == "string" && /^[A-z0-9]+\-[A-z0-9_-]{6}$/ . test ( m [ j ] ) ) stringlib = true ;
}
if ( string && stringlib ) window . t . push ( m ) ;
}
if ( m && typeof m == "object" && m . default && typeof m . default == "object" && ! Array . isArray ( m . default ) && Object . keys ( m . default ) . length ) {
var string = true , stringlib = false ;
for ( let j in m . default ) {
if ( typeof m . default [ j ] != "string" ) string = false ;
if ( typeof m . default [ j ] == "string" && /^[A-z0-9]+\-[A-z0-9_-]{6}$/ . test ( m . default [ j ] ) ) stringlib = true ;
}
if ( string && stringlib ) window . t . push ( m . default ) ;
}
}
console . clear ( ) ;
console . log ( window . t ) ;
} ;
BDFDB . WebModules . DevFuncs . listen = function ( strings ) {
strings = Array . isArray ( strings ) ? strings : Array . from ( arguments ) ;
BDFDB . WebModules . DevFuncs . listenstop ( ) ;
BDFDB . WebModules . DevFuncs . listen . p = BDFDB . WebModules . patch ( BDFDB . WebModules . findByProperties ( strings ) , strings [ 0 ] , "WebpackSearch" , { after : e => {
console . log ( e ) ;
} } ) ;
} ;
BDFDB . WebModules . DevFuncs . listenstop = function ( ) {
if ( BDFDB . WebModules . DevFuncs . listen . p == "function" ) BDFDB . WebModules . DevFuncs . listen . p ( ) ;
} ;
BDFDB . WebModules . DevFuncs . req = getWebModuleReq ( ) ;
}
for ( let component in NativeSubComponents ) if ( ! NativeSubComponents [ component ] ) NativeSubComponents [ component ] = "div" ;
for ( let component in LibraryComponents ) if ( ! LibraryComponents [ component ] ) {
LibraryComponents [ component ] = "div" ;
BDFDB . LibraryComponents [ component ] = "div" ;
}
BDFDB . loadMessage = BDFDB . PluginUtils . init ;
BDFDB . unloadMessage = BDFDB . PluginUtils . clear ;
BDFDB . createSettingsPanel = BDFDB . PluginUtils . createSettingsPanel ;
BDFDB . addObserver = BDFDB . ObserverUtils . connect ;
BDFDB . killObservers = BDFDB . ObserverUtils . disconnect ;
BDFDB . addEventListener = BDFDB . ListenerUtils . add ;
BDFDB . removeEventListener = BDFDB . ListenerUtils . remove ;
BDFDB . addChildEventListener = BDFDB . ListenerUtils . addToChildren ;
BDFDB . copyEvent = BDFDB . ListenerUtils . copyEvent ;
BDFDB . stopEvent = BDFDB . ListenerUtils . stopEvent ;
BDFDB . showToast = BDFDB . NotificationUtils . toast ;
BDFDB . showDesktopNotification = BDFDB . NotificationUtils . desktop ;
BDFDB . createNotificationsBar = BDFDB . NotificationUtils . notice ;
BDFDB . createTooltip = ( string , ele , config ) => { BDFDB . TooltipUtils . create ( ele , string , config ) ; } ;
BDFDB . updateTooltipPosition = BDFDB . TooltipUtils . update ;
BDFDB . isObject = BDFDB . ObjectUtils . is ;
BDFDB . sortObject = BDFDB . ObjectUtils . sort ;
BDFDB . reverseObject = BDFDB . ObjectUtils . reverse ;
BDFDB . filterObject = BDFDB . ObjectUtils . filter ;
BDFDB . pushToObject = BDFDB . ObjectUtils . push ;
BDFDB . mapObject = BDFDB . ObjectUtils . map ;
BDFDB . deepAssign = BDFDB . ObjectUtils . deepAssign ;
BDFDB . isObjectEmpty = BDFDB . ObjectUtils . isEmpty ;
BDFDB . sortArrayByKey = BDFDB . ArrayUtils . keySort ;
BDFDB . numSortArray = BDFDB . ArrayUtils . numSort ;
BDFDB . removeFromArray = BDFDB . ArrayUtils . remove ;
BDFDB . getAllIndexes = BDFDB . ArrayUtils . getAllIndexes ;
BDFDB . removeCopiesFromArray = BDFDB . ArrayUtils . removeCopies ;
BDFDB . getDiscordFolder = BDFDB . DiscordUtils . getFolder ;
BDFDB . getDiscordBuilt = BDFDB . DiscordUtils . getBuilt ;
BDFDB . getDiscordVersion = BDFDB . DiscordUtils . getVersion ;
BDFDB . getDiscordLanguage = BDFDB . DiscordUtils . getLanguage ;
BDFDB . getDiscordTheme = BDFDB . DiscordUtils . getTheme ;
BDFDB . getDiscordMode = BDFDB . DiscordUtils . getMode ;
BDFDB . getDiscordZoomFactor = BDFDB . DiscordUtils . getZoomFactor ;
BDFDB . getDiscordFontScale = BDFDB . DiscordUtils . getFontScale ;
BDFDB . BdUtils . getPluginsFolder = BDFDB . BdUtils . getPluginsFolder ;
BDFDB . BdUtils . getThemesFolder = BDFDB . BdUtils . getThemesFolder ;
BDFDB . checkWhichRepoPage = BDFDB . BdUtils . checkRepoPage ;
BDFDB . isBDv2 = BDFDB . BdUtils . isBDv2 ;
BDFDB . isPluginEnabled = BDFDB . BdUtils . isPluginEnabled ;
BDFDB . getPlugin = BDFDB . BdUtils . getPlugin ;
BDFDB . isThemeEnabled = BDFDB . BdUtils . isThemeEnabled ;
BDFDB . getTheme = BDFDB . BdUtils . getTheme ;
BDFDB . isRestartNoMoreEnabled = BDFDB . BdUtils . isAutoLoadEnabled ;
} ) ( ) ;