diff --git a/.eslintrc b/.eslintrc
new file mode 100644
index 00000000..58aa45e3
--- /dev/null
+++ b/.eslintrc
@@ -0,0 +1,40 @@
+{
+ "extends": "eslint:recommended",
+ "env": {
+ "browser": true,
+ "node": true,
+ "jquery": true
+ },
+ "parserOptions": {
+ "ecmaVersion": 8
+ },
+ "rules": {
+ "semi": 2,
+ "space-infix-ops": ["error", {"int32Hint": false}],
+ "quotes": ["error", "double", {"allowTemplateLiterals": true}],
+ "no-console": 0,
+ "brace-style": ["error", "stroustrup", {"allowSingleLine": true}],
+ "keyword-spacing": 2,
+ "no-else-return": 2,
+ "curly": ["error", "multi-line", "consistent"],
+ "dot-notation": 2,
+ "yoda": 2,
+ "linebreak-style": ["error", "unix"],
+ "quote-props": ["error", "consistent-as-needed", {"keywords": true}],
+ "object-curly-spacing": ["error", "never", { "objectsInObjects": false }]
+ },
+ "globals": {
+ "webpackJsonp": false,
+ "Proxy": false,
+ "Set": false,
+ "WeakMap": false,
+ "Promise": false,
+ "bdplugins": false,
+ "bdthemes": false,
+ "betterDiscordIPC": false,
+ "bdVersion": false,
+ "version": false,
+ "_bdhash": true,
+ "ace": false
+ }
+}
\ No newline at end of file
diff --git a/js/main.js b/js/main.js
index 06254be9..6fc199e2 100644
--- a/js/main.js
+++ b/js/main.js
@@ -6,30 +6,29 @@
* https://github.com/Jiiks/BetterDiscordApp
*/
- /* global Proxy, bdplugins, bdthemes, betterDiscordIPC, bdVersion, version, BDV2, webpackJsonp */
-
- /* eslint-disable no-console */
-
-/*Localstorage fix*/
+/* Localstorage fix */
(function() {
let __fs = window.require("fs");
let __process = window.require("process");
let __platform = __process.platform;
- let __dataPath = (__platform === 'win32' ? __process.env.APPDATA : __platform === 'darwin' ? __process.env.HOME + '/Library/Preferences' : process.env.HOME + '/.config') + '/BetterDiscord/';
+ let __dataPath = (__platform === "win32" ? __process.env.APPDATA : __platform === "darwin" ? __process.env.HOME + "/Library/Preferences" : process.env.HOME + "/.config") + "/BetterDiscord/";
let localStorageFile = "localStorage.json";
let __data = {};
- if(__fs.existsSync(`${__dataPath}${localStorageFile}`)) {
+ if (__fs.existsSync(`${__dataPath}${localStorageFile}`)) {
try {
__data = JSON.parse(__fs.readFileSync(`${__dataPath}${localStorageFile}`));
- }catch(err) {
+ }
+ catch (err) {
console.log(err);
}
- } else if(__fs.existsSync(localStorageFile)) {
+ }
+ else if (__fs.existsSync(localStorageFile)) {
try {
__data = JSON.parse(__fs.readFileSync(localStorageFile));
- }catch(err) {
+ }
+ catch (err) {
console.log(err);
}
}
@@ -61,7 +60,7 @@
})();
(() => {
- let v2Loader = document.createElement('div');
+ let v2Loader = document.createElement("div");
v2Loader.className = "bd-loaderv2";
v2Loader.title = "BetterDiscord is loading...";
document.body.appendChild(v2Loader);
@@ -70,17 +69,17 @@
window.bdStorage = {};
window.bdStorage.get = function(i) {
- return betterDiscordIPC.sendSync('synchronous-message', { 'arg': 'storage', 'cmd': 'get', 'var': i });
+ return betterDiscordIPC.sendSync("synchronous-message", {"arg": "storage", "cmd": "get", "var": i});
};
window.bdStorage.set = function(i, v) {
- betterDiscordIPC.sendSync('synchronous-message', { 'arg': 'storage', 'cmd': 'set', 'var': i, 'data': v });
+ betterDiscordIPC.sendSync("synchronous-message", {"arg": "storage", "cmd": "set", "var": i, "data": v});
};
window.bdPluginStorage = {};
window.bdPluginStorage.get = function(pn, i) {
- return betterDiscordIPC.sendSync('synchronous-message', { 'arg': 'pluginstorage', 'cmd': 'get', 'pn': pn, 'var': i });
+ return betterDiscordIPC.sendSync("synchronous-message", {"arg": "pluginstorage", "cmd": "get", "pn": pn, "var": i});
};
window.bdPluginStorage.set = function(pn, i, v) {
- betterDiscordIPC.sendSync('synchronous-message', { 'arg': 'pluginstorage', 'cmd': 'set', 'pn': pn, 'var': i, 'data': v });
+ betterDiscordIPC.sendSync("synchronous-message", {"arg": "pluginstorage", "cmd": "set", "pn": pn, "var": i, "data": v});
};
var bdSettings = {};
@@ -89,34 +88,34 @@ bdSettingsStorage.initialize = function() {
let fs = require("fs");
let data = {};
if (fs.existsSync(bdConfig.dataPath + "/bdsettings.json")) {
- try {
- data = JSON.parse(fs.readFileSync(bdConfig.dataPath + "/bdsettings.json"));
- }
- catch (err) {
- data = {};
- }
- }
+ try {
+ data = JSON.parse(fs.readFileSync(bdConfig.dataPath + "/bdsettings.json"));
+ }
+ catch (err) {
+ data = {};
+ }
+ }
if (data) bdSettings = data;
else bdSettings = {};
-}
+};
bdSettingsStorage.get = function(key) {
if (bdSettings[key]) return bdSettings[key];
- else return null;
-}
+ return null;
+};
bdSettingsStorage.set = function(key, data) {
let fs = require("fs");
bdSettings[key] = data;
try {
- fs.writeFileSync(bdConfig.dataPath + "/bdsettings.json", JSON.stringify(bdSettings, null, 4));
+ fs.writeFileSync(bdConfig.dataPath + "/bdsettings.json", JSON.stringify(bdSettings, null, 4));
return true;
}
- catch(err) {
+ catch (err) {
utils.err(err);
return false;
}
-}
+};
var settingsPanel, emoteModule, utils, quickEmoteMenu, voiceMode, pluginModule, themeModule, dMode, publicServersModule;
var jsVersion = 1.792;
@@ -127,40 +126,40 @@ var bbdVersion = "0.1.0";
var mainCore;
var settings = {
- "Save logs locally": { "id": "bda-gs-0", "info": "Saves chat logs locally", "implemented": false, "hidden": false, "cat": "core"},
- "Public Servers": { "id": "bda-gs-1", "info": "Display public servers button", "implemented": true, "hidden": false, "cat": "core"},
- "Minimal Mode": { "id": "bda-gs-2", "info": "Hide elements and reduce the size of elements.", "implemented": true, "hidden": false, "cat": "core"},
- "Voice Mode": { "id": "bda-gs-4", "info": "Only show voice chat", "implemented": true, "hidden": false, "cat": "core"},
- "Hide Channels": { "id": "bda-gs-3", "info": "Hide channels in minimal mode", "implemented": true, "hidden": false, "cat": "core"},
- "Dark Mode": { "id": "bda-gs-5", "info": "Make certain elements dark by default(wip)", "implemented": true, "hidden": false, "cat": "core"},
- "Override Default Emotes": { "id": "bda-es-5", "info": "Override default emotes", "implemented": false, "hidden": false, "cat": "core"},
- "Voice Disconnect": { "id": "bda-dc-0", "info": "Disconnect from voice server when closing Discord", "implemented": true, "hidden": false, "cat": "core"},
- "Custom css live update": { "id": "bda-css-0", "info": "", "implemented": true, "hidden": true, "cat": "core"},
- "Custom css auto udpate": { "id": "bda-css-1", "info": "", "implemented": true, "hidden": true, "cat": "core"},
- "24 Hour Timestamps": { "id": "bda-gs-6", "info": "Replace 12hr timestamps with proper ones", "implemented": true, "hidden": false, "cat": "core"},
- "Coloured Text": { "id": "bda-gs-7", "info": "Make text colour the same as role colour", "implemented": true, "hidden": false, "cat": "core"},
- "BetterDiscord Blue": { "id": "bda-gs-b", "info": "Replace Discord blue with BD Blue", "implemented": true, "hidden": false, "cat": "core"},
- "Developer Mode": { "id": "bda-gs-8", "info": "Developer Mode", "implemented": true, "hidden": false, "cat": "core"},
-
-
- "Startup Error Modal": { "id": "fork-ps-1", "info": "Show a modal with plugin/theme errors on startup", "implemented": true, "hidden": false, "cat": "fork"},
- "Show Toasts": { "id": "fork-ps-2", "info": "Shows a small notification for starting and stopping plugins & themes", "implemented": true, "hidden": false, "cat": "fork"},
- "Scroll To Settings": { "id": "fork-ps-3", "info": "Auto-scrolls to a plugin's settings when the button is clicked (only if out of view)", "implemented": true, "hidden": false, "cat": "fork"},
- "Animate On Hover": { "id": "fork-es-2", "info": "Only animate the emote modifiers on hover", "implemented": true, "hidden": false, "cat": "fork"},
- "Copy Selector": { "id": "fork-dm-1", "info": "Adds a \"Copy Selector\" option to context menus when developer mode is active", "implemented": true, "hidden": false, "cat": "fork"},
- "Download Emotes": { "id": "fork-es-3", "info": "Download emotes when the cache is expired", "implemented": true, "hidden": false, "cat": "fork"},
- "Normalize Classes": { "id": "fork-ps-4", "info": "Adds stable classes to elements to help themes. (e.g. adds .da-channels to .channels-Ie2l6A)", "implemented": true, "hidden": false, "cat": "fork"},
+ "Save logs locally": {id: "bda-gs-0", info: "Saves chat logs locally", implemented: false, hidden: false, cat: "core"},
+ "Public Servers": {id: "bda-gs-1", info: "Display public servers button", implemented: true, hidden: false, cat: "core"},
+ "Minimal Mode": {id: "bda-gs-2", info: "Hide elements and reduce the size of elements.", implemented: true, hidden: false, cat: "core"},
+ "Voice Mode": {id: "bda-gs-4", info: "Only show voice chat", implemented: true, hidden: false, cat: "core"},
+ "Hide Channels": {id: "bda-gs-3", info: "Hide channels in minimal mode", implemented: true, hidden: false, cat: "core"},
+ "Dark Mode": {id: "bda-gs-5", info: "Make certain elements dark by default(wip)", implemented: true, hidden: false, cat: "core"},
+ "Override Default Emotes": {id: "bda-es-5", info: "Override default emotes", implemented: false, hidden: false, cat: "core"},
+ "Voice Disconnect": {id: "bda-dc-0", info: "Disconnect from voice server when closing Discord", implemented: true, hidden: false, cat: "core"},
+ "Custom css live update": {id: "bda-css-0", info: "", implemented: true, hidden: true, cat: "core"},
+ "Custom css auto udpate": {id: "bda-css-1", info: "", implemented: true, hidden: true, cat: "core"},
+ "24 Hour Timestamps": {id: "bda-gs-6", info: "Replace 12hr timestamps with proper ones", implemented: true, hidden: false, cat: "core"},
+ "Coloured Text": {id: "bda-gs-7", info: "Make text colour the same as role colour", implemented: true, hidden: false, cat: "core"},
+ "BetterDiscord Blue": {id: "bda-gs-b", info: "Replace Discord blue with BD Blue", implemented: true, hidden: false, cat: "core"},
+ "Developer Mode": {id: "bda-gs-8", info: "Developer Mode", implemented: true, hidden: false, cat: "core"},
+
+
+ "Startup Error Modal": {id: "fork-ps-1", info: "Show a modal with plugin/theme errors on startup", implemented: true, hidden: false, cat: "fork"},
+ "Show Toasts": {id: "fork-ps-2", info: "Shows a small notification for starting and stopping plugins & themes", implemented: true, hidden: false, cat: "fork"},
+ "Scroll To Settings": {id: "fork-ps-3", info: "Auto-scrolls to a plugin's settings when the button is clicked (only if out of view)", implemented: true, hidden: false, cat: "fork"},
+ "Animate On Hover": {id: "fork-es-2", info: "Only animate the emote modifiers on hover", implemented: true, hidden: false, cat: "fork"},
+ "Copy Selector": {id: "fork-dm-1", info: "Adds a \"Copy Selector\" option to context menus when developer mode is active", implemented: true, hidden: false, cat: "fork"},
+ "Download Emotes": {id: "fork-es-3", info: "Download emotes when the cache is expired", implemented: true, hidden: false, cat: "fork"},
+ "Normalize Classes": {id: "fork-ps-4", info: "Adds stable classes to elements to help themes. (e.g. adds .da-channels to .channels-Ie2l6A)", implemented: true, hidden: false, cat: "fork"},
- "Twitch Emotes": { "id": "bda-es-7", "info": "Show Twitch emotes", "implemented": true, "hidden": false, "cat": "emote"},
- "FrankerFaceZ Emotes": { "id": "bda-es-1", "info": "Show FrankerFaceZ Emotes", "implemented": true, "hidden": false, "cat": "emote"},
- "BetterTTV Emotes": { "id": "bda-es-2", "info": "Show BetterTTV Emotes", "implemented": true, "hidden": false, "cat": "emote"},
- "Emote Menu": { "id": "bda-es-0", "info": "Show Twitch/Favourite emotes in emote menu", "implemented": true, "hidden": false, "cat": "emote"},
- "Emoji Menu": { "id": "bda-es-9", "info": "Show Discord emoji menu", "implemented": true, "hidden": false, "cat": "emote"},
- "Emote Autocomplete": { "id": "bda-es-3", "info": "Autocomplete emote commands", "implemented": false, "hidden": false, "cat": "emote"},
- "Emote Auto Capitalization": { "id": "bda-es-4", "info": "Autocapitalize emote commands", "implemented": true, "hidden": false, "cat": "emote"},
- "Show Names": { "id": "bda-es-6", "info": "Show emote names on hover", "implemented": true, "hidden": false, "cat": "emote"},
- "Show emote modifiers": { "id": "bda-es-8", "info": "Enable emote mods (flip, spin, pulse, spin2, spin3, 1spin, 2spin, 3spin, tr, bl, br, shake, shake2, shake3, flap)", "implemented": true, "hidden": false, "cat": "emote"},
+ "Twitch Emotes": {id: "bda-es-7", info: "Show Twitch emotes", implemented: true, hidden: false, cat: "emote"},
+ "FrankerFaceZ Emotes": {id: "bda-es-1", info: "Show FrankerFaceZ Emotes", implemented: true, hidden: false, cat: "emote"},
+ "BetterTTV Emotes": {id: "bda-es-2", info: "Show BetterTTV Emotes", implemented: true, hidden: false, cat: "emote"},
+ "Emote Menu": {id: "bda-es-0", info: "Show Twitch/Favourite emotes in emote menu", implemented: true, hidden: false, cat: "emote"},
+ "Emoji Menu": {id: "bda-es-9", info: "Show Discord emoji menu", implemented: true, hidden: false, cat: "emote"},
+ "Emote Autocomplete": {id: "bda-es-3", info: "Autocomplete emote commands", implemented: false, hidden: false, cat: "emote"},
+ "Emote Auto Capitalization": {id: "bda-es-4", info: "Autocapitalize emote commands", implemented: true, hidden: false, cat: "emote"},
+ "Show Names": {id: "bda-es-6", info: "Show emote names on hover", implemented: true, hidden: false, cat: "emote"},
+ "Show emote modifiers": {id: "bda-es-8", info: "Enable emote mods (flip, spin, pulse, spin2, spin3, 1spin, 2spin, 3spin, tr, bl, br, shake, shake2, shake3, flap)", implemented: true, hidden: false, cat: "emote"},
};
var defaultCookie = {
@@ -189,11 +188,11 @@ var defaultCookie = {
"bda-css-0": false,
"bda-css-1": false,
"bda-es-9": true,
- "fork-dm-1": false,
+ "fork-dm-1": false,
"fork-ps-1": true,
"fork-ps-2": true,
- "fork-ps-3": true,
- "fork-ps-4": true,
+ "fork-ps-3": true,
+ "fork-ps-4": true,
"fork-es-2": false,
"fork-es-3": true
};
@@ -226,11 +225,11 @@ Core.prototype.init = async function() {
await utils.getHash();
utils.log("Initializing Settings");
this.initSettings();
- classNormalizer = new ClassNormalizer();
+ classNormalizer = new ClassNormalizer();
emoteModule = new EmoteModule();
utils.log("Initializing EmoteModule");
window.emotePromise = emoteModule.init().then(() => {emoteModule.initialized = true;});
- publicServersModule = new V2_PublicServers();
+ publicServersModule = new V2_PublicServers();
quickEmoteMenu = new QuickEmoteMenu();
voiceMode = new VoiceMode();
dMode = new devMode();
@@ -244,7 +243,7 @@ Core.prototype.init = async function() {
self.injectExternals();
- utils.log("Updating Settings");
+ utils.log("Updating Settings");
settingsPanel = new V2_SettingsPanel();
settingsPanel.updateSettings();
@@ -252,52 +251,51 @@ Core.prototype.init = async function() {
if (!bdpluginErrors) bdpluginErrors = [];
if (!bdthemeErrors) bdthemeErrors = [];
- utils.log("Loading Plugins");
+ utils.log("Loading Plugins");
pluginModule = new PluginModule();
pluginModule.loadPlugins();
-
- if (settingsCookie["fork-ps-4"]) {
- utils.log("Loading Themes");
- classNormalizer.start();
- }
-
- utils.log("Loading Themes");
- themeModule = new ThemeModule();
- themeModule.loadThemes();
+
+ if (settingsCookie["fork-ps-4"]) {
+ utils.log("Loading Themes");
+ classNormalizer.start();
+ }
+
+ utils.log("Loading Themes");
+ themeModule = new ThemeModule();
+ themeModule.loadThemes();
- $("#customcss").detach().appendTo(document.head);
+ $("#customcss").detach().appendTo(document.head);
- utils.log("Initializing QuickEmoteMenu");
+ utils.log("Initializing QuickEmoteMenu");
quickEmoteMenu.init();
window.addEventListener("beforeunload", function(){
- if(settingsCookie["bda-dc-0"]){
- document.querySelector('.btn.btn-disconnect').click();
- }
+ if (settingsCookie["bda-dc-0"]) document.querySelector(".btn.btn-disconnect").click();
});
-
- publicServersModule.initialize();
+
+ publicServersModule.initialize();
emoteModule.autoCapitalize();
/*Display new features in BetterDiscord*/
- if (settingsCookie["version"] < jsVersion) {
+ if (settingsCookie.version < jsVersion) {
//var cl = self.constructChangelog();
- settingsCookie["version"] = jsVersion;
+ settingsCookie.version = jsVersion;
self.saveSettings();
}
- utils.log("Removing Loading Icon");
+ utils.log("Removing Loading Icon");
document.getElementsByClassName("bd-loaderv2")[0].remove();
- utils.log("Initializing Main Observer");
+ utils.log("Initializing Main Observer");
self.initObserver();
-
- // Show loading errors
+
+ // Show loading errors
if (settingsCookie["fork-ps-1"]) {
- utils.log("Collecting Startup Errors");
+ utils.log("Collecting Startup Errors");
self.showStartupErrors();
}
- } else {
+ }
+ else {
setTimeout(gwDefer, 100);
}
}
@@ -309,7 +307,7 @@ Core.prototype.init = async function() {
};
Core.prototype.injectExternals = function() {
- utils.injectJs("https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.9/ace.js")
+ utils.injectJs("https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.9/ace.js");
};
Core.prototype.initSettings = function () {
@@ -319,7 +317,7 @@ Core.prototype.initSettings = function () {
if ($.cookie("better-discord")) {
settingsCookie = JSON.parse($.cookie("better-discord"));
this.saveSettings();
- $.removeCookie("better-discord", { path: '/' });
+ $.removeCookie("better-discord", {path: "/"});
return;
}
@@ -329,7 +327,7 @@ Core.prototype.initSettings = function () {
}
else {
this.loadSettings();
- $('');
+ $("head").append("");
}
$("#customcss").html(this.editor.session.getValue()).detach().appendTo(document.head);
}
@@ -2600,10 +2595,10 @@ class V2C_CssEditor extends BDV2.reactComponent {
constructor(props) {
super(props);
let self = this;
- self.props.lines = 0;
+ self.props.lines = 0;
self.setInitialState();
self.attach = self.attach.bind(self);
- self.detachedEditor = BDV2.react.createElement(V2C_CssEditorDetached, { attach: self.attach });
+ self.detachedEditor = BDV2.react.createElement(V2C_CssEditorDetached, {attach: self.attach});
self.onClick = self.onClick.bind(self);
self.updateCss = self.updateCss.bind(self);
self.saveCss = self.saveCss.bind(self);
@@ -2612,7 +2607,7 @@ class V2C_CssEditor extends BDV2.reactComponent {
setInitialState() {
this.state = {
- 'detached': this.props.detached || BDV2.editorDetached
+ detached: this.props.detached || BDV2.editorDetached
};
}
@@ -2623,7 +2618,7 @@ class V2C_CssEditor extends BDV2.reactComponent {
this.editor.session.setMode("ace/mode/css");
this.editor.setShowPrintMargin(false);
this.editor.setFontSize(14);
- this.editor.on('change', () => {
+ this.editor.on("change", () => {
if (!settingsCookie["bda-css-0"]) return;
this.saveCss();
this.updateCss();
@@ -2647,10 +2642,10 @@ class V2C_CssEditor extends BDV2.reactComponent {
get options() {
return {
lineNumbers: true,
- mode: 'css',
+ mode: "css",
indentUnit: 4,
- theme: 'material',
- scrollbarStyle: 'simple'
+ theme: "material",
+ scrollbarStyle: "simple"
};
}
@@ -2662,25 +2657,25 @@ class V2C_CssEditor extends BDV2.reactComponent {
}
return ccss;
}
-
- updateLineCount() {
- let lineCount = this.refs.editor.value.split('\n').length;
- if (lineCount == this.props.lines) return;
- this.refs.lines.textContent = Array.from(new Array(lineCount), (_, i) => i + 1).join(".\n") + ".";
- this.props.lines = lineCount;
- }
+
+ updateLineCount() {
+ let lineCount = this.refs.editor.value.split("\n").length;
+ if (lineCount == this.props.lines) return;
+ this.refs.lines.textContent = Array.from(new Array(lineCount), (_, i) => i + 1).join(".\n") + ".";
+ this.props.lines = lineCount;
+ }
render() {
let self = this;
- let { detached } = self.state;
+ let {detached} = self.state;
return BDV2.react.createElement(
"div",
- { className: "content-column default", style: { padding: '60px 40px 0px' } },
+ {className: "content-column default", style: {padding: "60px 40px 0px"}},
detached && BDV2.react.createElement(
"div",
- { id: "editor-detached" },
- BDV2.react.createElement(V2Components.SettingsTitle, { text: "Custom CSS Editor" }),
+ {id: "editor-detached"},
+ BDV2.react.createElement(V2Components.SettingsTitle, {text: "Custom CSS Editor"}),
BDV2.react.createElement(
"h3",
null,
@@ -2688,54 +2683,54 @@ class V2C_CssEditor extends BDV2.reactComponent {
),
BDV2.react.createElement(
"button",
- { className: "btn btn-primary", onClick: () => {
+ {className: "btn btn-primary", onClick: () => {
self.attach();
- } },
+ }},
"Attach"
)
),
!detached && BDV2.react.createElement(
"div",
null,
- BDV2.react.createElement(V2Components.SettingsTitle, { text: "Custom CSS Editor" }),
- BDV2.react.createElement("div", {className: "editor-wrapper"},
- BDV2.react.createElement("div", {id: "bd-customcss-editor", className: "editor", ref: "editor"}, self.css)
- ),
+ BDV2.react.createElement(V2Components.SettingsTitle, {text: "Custom CSS Editor"}),
+ BDV2.react.createElement("div", {className: "editor-wrapper"},
+ BDV2.react.createElement("div", {id: "bd-customcss-editor", className: "editor", ref: "editor"}, self.css)
+ ),
BDV2.react.createElement(
"div",
- { id: "bd-customcss-attach-controls" },
+ {id: "bd-customcss-attach-controls"},
BDV2.react.createElement(
"ul",
- { className: "checkbox-group" },
- BDV2.react.createElement(V2Components.Checkbox, { id: "live-update", text: "Live Update", onChange: this.onChange, checked: settingsCookie["bda-css-0"] })
+ {className: "checkbox-group"},
+ BDV2.react.createElement(V2Components.Checkbox, {id: "live-update", text: "Live Update", onChange: this.onChange, checked: settingsCookie["bda-css-0"]})
),
BDV2.react.createElement(
"div",
- { id: "bd-customcss-detach-controls-button" },
+ {id: "bd-customcss-detach-controls-button"},
BDV2.react.createElement(
"button",
- { style: { borderRadius: "3px 0 0 3px", borderRight: "1px solid #3f4146" }, className: "btn btn-primary", onClick: () => {
+ {style: {borderRadius: "3px 0 0 3px", borderRight: "1px solid #3f4146"}, className: "btn btn-primary", onClick: () => {
self.onClick("update");
- } },
+ }},
"Update"
),
BDV2.react.createElement(
"button",
- { style: { borderRadius: "0", borderLeft: "1px solid #2d2d2d", borderRight: "1px solid #2d2d2d" }, className: "btn btn-primary", onClick: () => {
+ {style: {borderRadius: "0", borderLeft: "1px solid #2d2d2d", borderRight: "1px solid #2d2d2d"}, className: "btn btn-primary", onClick: () => {
self.onClick("save");
- } },
+ }},
"Save"
),
BDV2.react.createElement(
"button",
- { style: { borderRadius: "0 3px 3px 0", borderLeft: "1px solid #3f4146" }, className: "btn btn-primary", onClick: () => {
+ {style: {borderRadius: "0 3px 3px 0", borderLeft: "1px solid #3f4146"}, className: "btn btn-primary", onClick: () => {
self.onClick("detach");
- } },
+ }},
"Detach"
),
BDV2.react.createElement(
"span",
- { style: { fontSize: "10px", marginLeft: "5px" } },
+ {style: {fontSize: "10px", marginLeft: "5px"}},
"Unsaved changes are lost on detach"
)
)
@@ -2747,13 +2742,13 @@ class V2C_CssEditor extends BDV2.reactComponent {
onClick(arg) {
let self = this;
switch (arg) {
- case 'update':
+ case "update":
self.updateCss();
break;
- case 'save':
+ case "save":
self.saveCss();
break;
- case 'detach':
+ case "detach":
self.detach();
break;
}
@@ -2761,7 +2756,7 @@ class V2C_CssEditor extends BDV2.reactComponent {
onChange(id, checked) {
switch (id) {
- case 'live-update':
+ case "live-update":
settingsCookie["bda-css-0"] = checked;
mainCore.saveSettings();
break;
@@ -2770,7 +2765,7 @@ class V2C_CssEditor extends BDV2.reactComponent {
updateCss() {
if ($("#customcss").length == 0) {
- $("head").append('');
+ $("head").append("");
}
$("#customcss").html(this.editor.session.getValue()).detach().appendTo(document.head);
}
@@ -2782,7 +2777,7 @@ class V2C_CssEditor extends BDV2.reactComponent {
detach() {
let self = this;
self.setState({
- 'detached': true
+ detached: true
});
let droot = self.detachedRoot;
if (!droot) {
@@ -2804,7 +2799,7 @@ class V2C_CssEditor extends BDV2.reactComponent {
injectDetachedRoot() {
if (!$(".app").length) return false;
$("
", {
- id: 'bd-customcss-detach-container'
+ id: "bd-customcss-detach-container"
}).insertAfter($(".app"));
return true;
}
@@ -2812,7 +2807,7 @@ class V2C_CssEditor extends BDV2.reactComponent {
attach() {
let self = this;
self.setState({
- 'detached': false
+ detached: false
});
}
}
@@ -2825,7 +2820,7 @@ class V2C_List extends BDV2.reactComponent {
render() {
return BDV2.react.createElement(
"ul",
- { className: this.props.className },
+ {className: this.props.className},
this.props.children
);
}
@@ -2839,10 +2834,10 @@ class V2C_ContentColumn extends BDV2.reactComponent {
render() {
return BDV2.react.createElement(
"div",
- { className: "content-column default" },
+ {className: "content-column default"},
BDV2.react.createElement(
"h2",
- { className: "ui-form-title h2 margin-reset margin-bottom-20" },
+ {className: "ui-form-title h2 margin-reset margin-bottom-20"},
this.props.title
),
this.props.children
@@ -2858,14 +2853,14 @@ class V2C_PluginCard extends BDV2.reactComponent {
self.onChange = self.onChange.bind(self);
self.showSettings = self.showSettings.bind(self);
self.setInitialState();
- self.hasSettings = typeof self.props.plugin.getSettingsPanel === "function";
- self.settingsPanel = "";
+ self.hasSettings = typeof self.props.plugin.getSettingsPanel === "function";
+ self.settingsPanel = "";
}
setInitialState() {
this.state = {
- 'checked': pluginCookie[this.props.plugin.getName()],
- 'settings': false
+ checked: pluginCookie[this.props.plugin.getName()],
+ settings: false
};
}
@@ -2874,31 +2869,31 @@ class V2C_PluginCard extends BDV2.reactComponent {
if (typeof this.settingsPanel === "object") {
this.refs.settingspanel.appendChild(this.settingsPanel);
}
-
- if (!settingsCookie['fork-ps-3']) return;
- var isHidden = (container, element) => {
+
+ if (!settingsCookie["fork-ps-3"]) return;
+ var isHidden = (container, element) => {
- let cTop = container.scrollTop;
- let cBottom = cTop + container.clientHeight;
+ let cTop = container.scrollTop;
+ let cBottom = cTop + container.clientHeight;
- let eTop = element.offsetTop;
- let eBottom = eTop + element.clientHeight;
+ let eTop = element.offsetTop;
+ let eBottom = eTop + element.clientHeight;
- return (eTop < cTop || eBottom > cBottom);
- };
-
- let self = $(BDV2.reactDom.findDOMNode(this));
- let container = self.parents('.scroller');
- if (!isHidden(container[0], self[0])) return;
- container.animate({
- scrollTop: self.offset().top - container.offset().top + container.scrollTop() - 30
- }, 300);
+ return (eTop < cTop || eBottom > cBottom);
+ };
+
+ let self = $(BDV2.reactDom.findDOMNode(this));
+ let container = self.parents(".scroller");
+ if (!isHidden(container[0], self[0])) return;
+ container.animate({
+ scrollTop: self.offset().top - container.offset().top + container.scrollTop() - 30
+ }, 300);
}
}
render() {
let self = this;
- let { plugin } = this.props;
+ let {plugin} = this.props;
let name = plugin.getName();
let author = plugin.getAuthor();
let description = plugin.getDescription();
@@ -2908,33 +2903,33 @@ class V2C_PluginCard extends BDV2.reactComponent {
//let { settingsPanel } = this;
if (this.state.settings) {
- try { self.settingsPanel = plugin.getSettingsPanel(); }
- catch (err) { utils.err("Unable to get settings panel for " + plugin.getName() + ".", err); }
-
+ try { self.settingsPanel = plugin.getSettingsPanel(); }
+ catch (err) { utils.err("Unable to get settings panel for " + plugin.getName() + ".", err); }
+
return BDV2.react.createElement("li", {className: "settings-open ui-switch-item"},
- BDV2.react.createElement("div", {style: { float: "right", cursor: "pointer" }, onClick: () => {
+ BDV2.react.createElement("div", {style: {"float": "right", "cursor": "pointer"}, onClick: () => {
this.refs.settingspanel.innerHTML = "";
- self.setState({'settings': false });
+ self.setState({settings: false});
}},
BDV2.react.createElement(V2Components.XSvg, null)
),
- typeof self.settingsPanel === 'object' && BDV2.react.createElement("div", { id: `plugin-settings-${name}`, className: "plugin-settings", ref: "settingspanel" }),
- typeof self.settingsPanel !== 'object' && BDV2.react.createElement("div", { id: `plugin-settings-${name}`, className: "plugin-settings", ref: "settingspanel", dangerouslySetInnerHTML: { __html: self.settingsPanel } })
+ typeof self.settingsPanel === "object" && BDV2.react.createElement("div", {id: `plugin-settings-${name}`, className: "plugin-settings", ref: "settingspanel"}),
+ typeof self.settingsPanel !== "object" && BDV2.react.createElement("div", {id: `plugin-settings-${name}`, className: "plugin-settings", ref: "settingspanel", dangerouslySetInnerHTML: {__html: self.settingsPanel}})
);
}
- return BDV2.react.createElement("li", {"data-name": name, "data-version": version, className: "settings-closed ui-switch-item"},
+ return BDV2.react.createElement("li", {"data-name": name, "data-version": version, "className": "settings-closed ui-switch-item"},
BDV2.react.createElement("div", {className: "bda-header"},
- BDV2.react.createElement("span", {className: "bda-header-title" },
- BDV2.react.createElement("span", {className: "bda-name" }, name),
+ BDV2.react.createElement("span", {className: "bda-header-title"},
+ BDV2.react.createElement("span", {className: "bda-name"}, name),
" v",
- BDV2.react.createElement("span", {className: "bda-version" }, version),
+ BDV2.react.createElement("span", {className: "bda-version"}, version),
" by ",
- BDV2.react.createElement("span", {className: "bda-author" }, author)
+ BDV2.react.createElement("span", {className: "bda-author"}, author)
),
- BDV2.react.createElement("label", {className: "ui-switch-wrapper ui-flex-child", style: { flex: '0 0 auto' }},
- BDV2.react.createElement("input", { checked: this.state.checked, onChange: this.onChange, className: "ui-switch-checkbox", type: "checkbox" }),
- BDV2.react.createElement("div", { className: this.state.checked ? "ui-switch checked" : "ui-switch" })
+ BDV2.react.createElement("label", {className: "ui-switch-wrapper ui-flex-child", style: {flex: "0 0 auto"}},
+ BDV2.react.createElement("input", {checked: this.state.checked, onChange: this.onChange, className: "ui-switch-checkbox", type: "checkbox"}),
+ BDV2.react.createElement("div", {className: this.state.checked ? "ui-switch checked" : "ui-switch"})
)
),
BDV2.react.createElement("div", {className: "bda-description-wrap scroller-wrap fade"},
@@ -2952,13 +2947,13 @@ class V2C_PluginCard extends BDV2.reactComponent {
}
onChange() {
- this.setState({'checked': !this.state.checked});
+ this.setState({checked: !this.state.checked});
pluginModule.togglePlugin(this.props.plugin.getName());
}
showSettings() {
if (!this.hasSettings) return;
- this.setState({'settings': true});
+ this.setState({settings: true});
}
}
@@ -2972,12 +2967,12 @@ class V2C_ThemeCard extends BDV2.reactComponent {
setInitialState() {
this.state = {
- 'checked': themeCookie[this.props.theme.name]
+ checked: themeCookie[this.props.theme.name]
};
}
render() {
- let { theme } = this.props;
+ let {theme} = this.props;
let name = theme.name;
let description = theme.description;
let version = theme.version;
@@ -2985,18 +2980,18 @@ class V2C_ThemeCard extends BDV2.reactComponent {
let website = bdthemes[name].website;
let source = bdthemes[name].source;
- return BDV2.react.createElement("li", {"data-name": name, "data-version": version, className: "settings-closed ui-switch-item"},
+ return BDV2.react.createElement("li", {"data-name": name, "data-version": version, "className": "settings-closed ui-switch-item"},
BDV2.react.createElement("div", {className: "bda-header"},
- BDV2.react.createElement("span", {className: "bda-header-title" },
- BDV2.react.createElement("span", {className: "bda-name" }, name),
+ BDV2.react.createElement("span", {className: "bda-header-title"},
+ BDV2.react.createElement("span", {className: "bda-name"}, name),
" v",
- BDV2.react.createElement("span", {className: "bda-version" }, version),
+ BDV2.react.createElement("span", {className: "bda-version"}, version),
" by ",
- BDV2.react.createElement("span", {className: "bda-author" }, author)
+ BDV2.react.createElement("span", {className: "bda-author"}, author)
),
- BDV2.react.createElement("label", {className: "ui-switch-wrapper ui-flex-child", style: { flex: '0 0 auto' }},
- BDV2.react.createElement("input", { checked: this.state.checked, onChange: this.onChange, className: "ui-switch-checkbox", type: "checkbox" }),
- BDV2.react.createElement("div", { className: this.state.checked ? "ui-switch checked" : "ui-switch" })
+ BDV2.react.createElement("label", {className: "ui-switch-wrapper ui-flex-child", style: {flex: "0 0 auto"}},
+ BDV2.react.createElement("input", {checked: this.state.checked, onChange: this.onChange, className: "ui-switch-checkbox", type: "checkbox"}),
+ BDV2.react.createElement("div", {className: this.state.checked ? "ui-switch checked" : "ui-switch"})
)
),
BDV2.react.createElement("div", {className: "bda-description-wrap scroller-wrap fade"},
@@ -3013,7 +3008,7 @@ class V2C_ThemeCard extends BDV2.reactComponent {
}
onChange() {
- this.setState({'checked': !this.state.checked});
+ this.setState({checked: !this.state.checked});
themeModule.toggleTheme(this.props.theme.name);
}
}
@@ -3092,31 +3087,31 @@ class V2_SettingsPanel_Sidebar {
}
get items() {
- return [{ 'text': 'Core', 'id': 'core' }, { 'text': 'Zere\'s Fork', 'id': 'fork' }, { 'text': 'Emotes', 'id': 'emotes' }, { 'text': 'Custom CSS', 'id': 'customcss' }, { 'text': 'Plugins', 'id': 'plugins' }, { 'text': 'Themes', 'id': 'themes' }];
+ return [{text: "Core", id: "core"}, {text: "Zere's Fork", id: "fork"}, {text: "Emotes", id: "emotes"}, {text: "Custom CSS", id: "customcss"}, {text: "Plugins", id: "plugins"}, {text: "Themes", id: "themes"}];
}
get component() {
return BDV2.react.createElement(
"span",
null,
- BDV2.react.createElement(V2Components.SideBar, { onClick: this.onClick, headerText: "Bandaged BD", items: this.items }),
+ BDV2.react.createElement(V2Components.SideBar, {onClick: this.onClick, headerText: "Bandaged BD", items: this.items}),
BDV2.react.createElement(
"div",
- { style: { fontSize: "12px", fontWeight: "600", color: "#72767d", padding: "2px 10px" } },
+ {style: {fontSize: "12px", fontWeight: "600", color: "#72767d", padding: "2px 10px"}},
`BD v${bdVersion} by `,
BDV2.react.createElement(
"a",
- { href: "https://github.com/Jiiks/", target: "_blank" },
+ {href: "https://github.com/Jiiks/", target: "_blank"},
"Jiiks"
)
),
- BDV2.react.createElement(
+ BDV2.react.createElement(
"div",
- { style: { fontSize: "12px", fontWeight: "600", color: "#72767d", padding: "2px 10px" } },
+ {style: {fontSize: "12px", fontWeight: "600", color: "#72767d", padding: "2px 10px"}},
`BBD v${bbdVersion} by `,
BDV2.react.createElement(
"a",
- { href: "https://github.com/rauenzi/", target: "_blank" },
+ {href: "https://github.com/rauenzi/", target: "_blank"},
"Zerebos"
)
)
@@ -3135,7 +3130,7 @@ class V2_SettingsPanel_Sidebar {
injectRoot() {
let changeLog = $("[class*='side-'] > [class*='item-']:not([class*=Danger])").last();
if (!changeLog.length) return false;
- $("", { 'id': 'bd-settings-sidebar' }).insertBefore(changeLog.prev());
+ $("", {id: "bd-settings-sidebar"}).insertBefore(changeLog.prev());
return true;
}
@@ -3171,8 +3166,8 @@ class V2_SettingsPanel {
injectRoot() {
if (!$(".layer-3QrUeG .ui-standard-sidebar-view, .layer-3QrUeG .ui-standard-sidebar-view").length) return false;
$(".layer-3QrUeG .ui-standard-sidebar-view, .layer-3QrUeG .ui-standard-sidebar-view").append($("", {
- class: 'content-region',
- id: 'bd-settingspane-container'
+ "class": "content-region",
+ "id": "bd-settingspane-container"
}));
return true;
}
@@ -3180,7 +3175,7 @@ class V2_SettingsPanel {
get coreSettings() {
return this.getSettings("core");
}
- get forkSettings() {
+ get forkSettings() {
return this.getSettings("fork");
}
get emoteSettings() {
@@ -3202,22 +3197,22 @@ class V2_SettingsPanel {
$(".content-region").first().hide();
$(self.root).show();
switch (id) {
- case 'core':
+ case "core":
self.renderCoreSettings();
break;
- case 'fork':
- self.renderForkSettings();
- break;
- case 'emotes':
+ case "fork":
+ self.renderForkSettings();
+ break;
+ case "emotes":
self.renderEmoteSettings();
break;
- case 'customcss':
+ case "customcss":
self.renderCustomCssEditor();
break;
- case 'plugins':
+ case "plugins":
self.renderPluginPane();
break;
- case 'themes':
+ case "themes":
self.renderThemePane();
break;
}
@@ -3235,43 +3230,50 @@ class V2_SettingsPanel {
if (_c["bda-es-0"]) {
$("#twitchcord-button-container").show();
- } else {
+ }
+ else {
$("#twitchcord-button-container").hide();
}
if (_c["bda-gs-b"]) {
$("body").addClass("bd-blue");
- } else {
+ }
+ else {
$("body").removeClass("bd-blue");
}
if (_c["bda-gs-2"]) {
$("body").addClass("bd-minimal");
- } else {
+ }
+ else {
$("body").removeClass("bd-minimal");
}
if (_c["bda-gs-3"]) {
$("body").addClass("bd-minimal-chan");
- } else {
+ }
+ else {
$("body").removeClass("bd-minimal-chan");
}
if (_c["bda-gs-1"]) {
$("#bd-pub-li").show();
- } else {
+ }
+ else {
$("#bd-pub-li").hide();
}
if (_c["bda-gs-4"]) {
voiceMode.enable();
- } else {
+ }
+ else {
voiceMode.disable();
}
if (_c["bda-gs-5"]) {
$("#app-mount").addClass("bda-dark");
- } else {
+ }
+ else {
$("#app-mount").removeClass("bda-dark");
}
@@ -3282,17 +3284,19 @@ class V2_SettingsPanel {
if (_c["bda-gs-7"]) {
mainCore.injectColoredText();
- } else {
+ }
+ else {
mainCore.removeColoredText();
}
-
- if (_c["fork-ps-4"]) classNormalizer.start();
- else classNormalizer.stop();
-
+
+ if (_c["fork-ps-4"]) classNormalizer.start();
+ else classNormalizer.stop();
+
if (_c["bda-gs-8"]) {
dMode.enable(_c["fork-dm-1"]);
- } else {
+ }
+ else {
dMode.disable();
}
@@ -3301,7 +3305,7 @@ class V2_SettingsPanel {
renderSidebar() {
let self = this;
- $("[class*='side-'] > [class*='item-']").off('click.v2settingspanel').on('click.v2settingspanel', () => {
+ $("[class*='side-'] > [class*='item-']").off("click.v2settingspanel").on("click.v2settingspanel", () => {
BDV2.reactDom.unmountComponentAtNode(self.root);
$(self.root).hide();
$(".content-region").first().show();
@@ -3310,51 +3314,51 @@ class V2_SettingsPanel {
}
get coreComponent() {
- return BDV2.react.createElement(V2Components.Scroller, { contentColumn: true, fade: true, dark: true, children: [BDV2.react.createElement(V2Components.SettingsPanel, { key: "cspanel", title: "Core Settings", onChange: this.onChange, settings: this.coreSettings }), BDV2.react.createElement(V2Components.Tools, { key: "tools" })] });
+ return BDV2.react.createElement(V2Components.Scroller, {contentColumn: true, fade: true, dark: true, children: [BDV2.react.createElement(V2Components.SettingsPanel, {key: "cspanel", title: "Core Settings", onChange: this.onChange, settings: this.coreSettings}), BDV2.react.createElement(V2Components.Tools, {key: "tools"})]});
}
-
- get forkComponent() {
+
+ get forkComponent() {
return BDV2.react.createElement(V2Components.Scroller, {
contentColumn: true,
- fade: true,
- dark: true,
- children: [
- BDV2.react.createElement(V2Components.SettingsPanel, { key: "fspanel", title: "Zere's Fork Settings", onChange: this.onChange, settings: this.forkSettings, button: {
- title: "Clear Emote Cache",
- onClick: () => { emoteModule.clearEmoteData(); emoteModule.init(); quickEmoteMenu.init(); }
- }}),
- BDV2.react.createElement(V2Components.Tools, { key: "tools" })
- ]
- }
- );
+ fade: true,
+ dark: true,
+ children: [
+ BDV2.react.createElement(V2Components.SettingsPanel, {key: "fspanel", title: "Zere's Fork Settings", onChange: this.onChange, settings: this.forkSettings, button: {
+ title: "Clear Emote Cache",
+ onClick: () => { emoteModule.clearEmoteData(); emoteModule.init(); quickEmoteMenu.init(); }
+ }}),
+ BDV2.react.createElement(V2Components.Tools, {key: "tools"})
+ ]
+ }
+ );
}
get emoteComponent() {
- return BDV2.react.createElement(V2Components.Scroller, { contentColumn: true, fade: true, dark: true, children: [BDV2.react.createElement(V2Components.SettingsPanel, { key: "espanel", title: "Emote Settings", onChange: this.onChange, settings: this.emoteSettings }), BDV2.react.createElement(V2Components.Tools, { key: "tools" })] });
+ return BDV2.react.createElement(V2Components.Scroller, {contentColumn: true, fade: true, dark: true, children: [BDV2.react.createElement(V2Components.SettingsPanel, {key: "espanel", title: "Emote Settings", onChange: this.onChange, settings: this.emoteSettings}), BDV2.react.createElement(V2Components.Tools, {key: "tools"})]});
}
get customCssComponent() {
- return BDV2.react.createElement(V2Components.Scroller, { contentColumn: true, fade: true, dark: true, children: [BDV2.react.createElement(V2Components.CssEditor, { key: "csseditor" }), BDV2.react.createElement(V2Components.Tools, { key: "tools" })] });
+ return BDV2.react.createElement(V2Components.Scroller, {contentColumn: true, fade: true, dark: true, children: [BDV2.react.createElement(V2Components.CssEditor, {key: "csseditor"}), BDV2.react.createElement(V2Components.Tools, {key: "tools"})]});
}
get pluginsComponent() {
let plugins = Object.keys(bdplugins).reduce((arr, key) => {
- arr.push(BDV2.react.createElement(V2Components.PluginCard, { key: key, plugin: bdplugins[key].plugin }));return arr;
+ arr.push(BDV2.react.createElement(V2Components.PluginCard, {key: key, plugin: bdplugins[key].plugin}));return arr;
}, []);
- let list = BDV2.react.createElement(V2Components.List, { key: "plugin-list", className: "bda-slist", children: plugins });
- let pfBtn = BDV2.react.createElement("button", {key: "folder-button", className: 'bd-pfbtn', onClick: () => { betterDiscordIPC.send('asynchronous-message', { 'arg': 'opendir', 'path': 'plugindir' }); }}, "Open Plugin Folder");
- let contentColumn = BDV2.react.createElement(V2Components.ContentColumn, { key: "pcolumn", title: "Plugins", children: [pfBtn, list] });
- return BDV2.react.createElement(V2Components.Scroller, { contentColumn: true, fade: true, dark: true, children: [contentColumn, BDV2.react.createElement(V2Components.Tools, { key: "tools" })] });
+ let list = BDV2.react.createElement(V2Components.List, {key: "plugin-list", className: "bda-slist", children: plugins});
+ let pfBtn = BDV2.react.createElement("button", {key: "folder-button", className: "bd-pfbtn", onClick: () => { betterDiscordIPC.send("asynchronous-message", {arg: "opendir", path: "plugindir"}); }}, "Open Plugin Folder");
+ let contentColumn = BDV2.react.createElement(V2Components.ContentColumn, {key: "pcolumn", title: "Plugins", children: [pfBtn, list]});
+ return BDV2.react.createElement(V2Components.Scroller, {contentColumn: true, fade: true, dark: true, children: [contentColumn, BDV2.react.createElement(V2Components.Tools, {key: "tools"})]});
}
get themesComponent() {
let themes = Object.keys(bdthemes).reduce((arr, key) => {
- arr.push(BDV2.react.createElement(V2Components.ThemeCard, { key: key, theme: bdthemes[key] }));return arr;
+ arr.push(BDV2.react.createElement(V2Components.ThemeCard, {key: key, theme: bdthemes[key]}));return arr;
}, []);
- let list = BDV2.react.createElement(V2Components.List, { key: "theme-list", className: "bda-slist", children: themes });
- let tfBtn = BDV2.react.createElement("button", {key: "folder-button", className: 'bd-pfbtn', onClick: () => { betterDiscordIPC.send('asynchronous-message', { 'arg': 'opendir', 'path': 'themedir' }); }}, "Open Theme Folder");
- let contentColumn = BDV2.react.createElement(V2Components.ContentColumn, { key: "tcolumn", title: "Themes", children: [tfBtn, list] });
- return BDV2.react.createElement(V2Components.Scroller, { contentColumn: true, fade: true, dark: true, children: [contentColumn, BDV2.react.createElement(V2Components.Tools, { key: "tools" })] });
+ let list = BDV2.react.createElement(V2Components.List, {key: "theme-list", className: "bda-slist", children: themes});
+ let tfBtn = BDV2.react.createElement("button", {key: "folder-button", className: "bd-pfbtn", onClick: () => { betterDiscordIPC.send("asynchronous-message", {arg: "opendir", path: "themedir"}); }}, "Open Theme Folder");
+ let contentColumn = BDV2.react.createElement(V2Components.ContentColumn, {key: "tcolumn", title: "Themes", children: [tfBtn, list]});
+ return BDV2.react.createElement(V2Components.Scroller, {contentColumn: true, fade: true, dark: true, children: [contentColumn, BDV2.react.createElement(V2Components.Tools, {key: "tools"})]});
}
renderCoreSettings() {
@@ -3365,8 +3369,8 @@ class V2_SettingsPanel {
}
BDV2.reactDom.render(this.coreComponent, root);
}
-
- renderForkSettings() {
+
+ renderForkSettings() {
let root = this.root;
if (!root) {
console.log("FAILED TO LOCATE ROOT: .layer .ui-standard-sidebar-view");
@@ -3465,8 +3469,8 @@ class V2C_Layer extends BDV2.reactComponent {
});
$(`#${this.props.id}`).animate({opacity: 1}, {
- step: function(now, fx) {
- $(this).css("transform", `scale(${1.1 - 0.1*now}) translateZ(0px)`);
+ step: function(now) {
+ $(this).css("transform", `scale(${1.1 - 0.1 * now}) translateZ(0px)`);
},
duration: 200,
done: () => {$(`#${this.props.id}`).css("opacity", "").css("transform", "");}
@@ -3476,27 +3480,27 @@ class V2C_Layer extends BDV2.reactComponent {
componentWillUnmount() {
$(window).off(`keyup.${this.props.id}`);
$(`#${this.props.id}`).animate({opacity: 0}, {
- step: function(now, fx) {
- $(this).css("transform", `scale(${1.1 - 0.1*now}) translateZ(0px)`);
+ step: function(now) {
+ $(this).css("transform", `scale(${1.1 - 0.1 * now}) translateZ(0px)`);
},
duration: 200,
done: () => {$(`#${this.props.rootId}`).remove();}
});
- $('[class*="layer-"]').removeClass("publicServersOpen").animate({opacity: 1}, {
- step: function(now, fx) {
- $(this).css("transform", `scale(${0.07*now + 0.93}) translateZ(0px)`);
+ $("[class*=\"layer-\"]").removeClass("publicServersOpen").animate({opacity: 1}, {
+ step: function(now) {
+ $(this).css("transform", `scale(${0.07 * now + 0.93}) translateZ(0px)`);
},
duration: 200,
- done: () => {$('[class*="layer-"]').css("opacity", "").css("transform", "");}
+ done: () => {$("[class*=\"layer-\"]").css("opacity", "").css("transform", "");}
});
}
componentWillMount() {
- $('[class*="layer-"]').addClass("publicServersOpen").animate({opacity: 0}, {
- step: function(now, fx) {
- $(this).css("transform", `scale(${0.07*now + 0.93}) translateZ(0px)`);
+ $("[class*=\"layer-\"]").addClass("publicServersOpen").animate({opacity: 0}, {
+ step: function(now) {
+ $(this).css("transform", `scale(${0.07 * now + 0.93}) translateZ(0px)`);
},
duration: 200
});
@@ -3505,7 +3509,7 @@ class V2C_Layer extends BDV2.reactComponent {
render() {
return BDV2.react.createElement(
"div",
- { className: "layer bd-layer layer-3QrUeG", id: this.props.id, ref: "root", style: {opacity: 0, transform: "scale(1.1) translateZ(0px)"} },
+ {className: "layer bd-layer layer-3QrUeG", id: this.props.id, ref: "root", style: {opacity: 0, transform: "scale(1.1) translateZ(0px)"}},
this.props.children
);
}
@@ -3518,14 +3522,14 @@ class V2C_SidebarView extends BDV2.reactComponent {
}
render() {
- let { sidebar, content, tools } = this.props.children;
+ let {sidebar, content, tools} = this.props.children;
return BDV2.react.createElement(
"div",
- { className: "ui-standard-sidebar-view" },
+ {className: "ui-standard-sidebar-view"},
BDV2.react.createElement(
"div",
- { className: "sidebar-region" },
- BDV2.react.createElement(V2Components.Scroller, { key: "sidebarScroller", ref: "sidebarScroller", sidebar: true, fade: sidebar.fade || true, dark: sidebar.dark || true, children: sidebar.component })
+ {className: "sidebar-region"},
+ BDV2.react.createElement(V2Components.Scroller, {key: "sidebarScroller", ref: "sidebarScroller", sidebar: true, fade: sidebar.fade || true, dark: sidebar.dark || true, children: sidebar.component})
),
BDV2.react.createElement("div", {className: "content-region"},
BDV2.react.createElement("div", {className: "content-transition-wrap"},
@@ -3547,7 +3551,7 @@ class V2_PublicServers {
constructor() {}
get component() {
- return BDV2.react.createElement(V2Components.Layer, { rootId: "pubslayerroot", id: "pubslayer", children: BDV2.react.createElement(V2C_PublicServers, { rootId: "pubslayerroot" }) });
+ return BDV2.react.createElement(V2Components.Layer, {rootId: "pubslayerroot", id: "pubslayer", children: BDV2.react.createElement(V2C_PublicServers, {rootId: "pubslayerroot"})});
}
get root() {
@@ -3562,7 +3566,7 @@ class V2_PublicServers {
injectRoot() {
if (!$(".layers, .layers-3iHuyZ").length) return false;
$(".layers, .layers-3iHuyZ").append($("", {
- id: 'pubslayerroot'
+ id: "pubslayerroot"
}));
return true;
}
@@ -3578,26 +3582,26 @@ class V2_PublicServers {
get button() {
let btn = $("", {
- class: BDV2.guildClasses.guild,
- id: 'bd-pub-li',
- css: {
- 'height': '20px',
- 'display': settingsCookie['bda-gs-1'] ? "" : "none"
+ "class": BDV2.guildClasses.guild,
+ "id": "bd-pub-li",
+ "css": {
+ height: "20px",
+ display: settingsCookie["bda-gs-1"] ? "" : "none"
}
}).append($("", {
- class: BDV2.guildClasses.guildInner,
- css: {
- 'height': '20px',
- 'border-radius': '4px'
+ "class": BDV2.guildClasses.guildInner,
+ "css": {
+ "height": "20px",
+ "border-radius": "4px"
}
}).append($("", {
}).append($("", {
- text: 'public',
- id: 'bd-pub-button',
+ text: "public",
+ id: "bd-pub-button",
css: {
- 'line-height': '20px',
- 'font-size': '12px'
+ "line-height": "20px",
+ "font-size": "12px"
},
click: () => { this.render(); }
}))));
@@ -3608,7 +3612,7 @@ class V2_PublicServers {
initialize() {
let guilds = $(`.${BDV2.guildClasses.guilds}>:first-child`);
guilds.after(this.button);
- }
+ }
}
@@ -3623,77 +3627,77 @@ class V2C_ServerCard extends BDV2.reactComponent {
}
render() {
- let { server } = this.props;
+ let {server} = this.props;
return BDV2.react.createElement(
"div", // cardPrimary-1Hv-to
- { className: `card-3Qj_Yx cardPrimary-1Hv-to marginBottom8-AtZOdT bd-server-card${server.pinned ? ' bd-server-card-pinned' : ''}` },
+ {className: `card-3Qj_Yx cardPrimary-1Hv-to marginBottom8-AtZOdT bd-server-card${server.pinned ? " bd-server-card-pinned" : ""}`},
// BDV2.react.createElement(
// "div",
// { className: "flex-1xMQg5 flex-1O1GKY horizontal-1ae9ci horizontal-2EEEnY flex-1O1GKY directionRow-3v3tfG justifyStart-2yIZo0 alignStretch-1hwxMa noWrap-3jynv6" },
- BDV2.react.createElement("img", { ref: "img", className: "bd-server-image", src: server.iconUrl, onError: this.handleError.bind(this) }),
+ BDV2.react.createElement("img", {ref: "img", className: "bd-server-image", src: server.iconUrl, onError: this.handleError.bind(this)}),
BDV2.react.createElement(
"div",
- { className: "flexChild-faoVW3 bd-server-content" },
+ {className: "flexChild-faoVW3 bd-server-content"},
BDV2.react.createElement(
"div",
- { className: "flex-1xMQg5 flex-1O1GKY horizontal-1ae9ci horizontal-2EEEnY directionRow-3v3tfG noWrap-3jynv6 bd-server-header" },
+ {className: "flex-1xMQg5 flex-1O1GKY horizontal-1ae9ci horizontal-2EEEnY directionRow-3v3tfG noWrap-3jynv6 bd-server-header"},
BDV2.react.createElement(
"h5",
- { className: "h5-18_1nd defaultColor-1_ajX0 margin-reset bd-server-name" },
+ {className: "h5-18_1nd defaultColor-1_ajX0 margin-reset bd-server-name"},
server.name
),
BDV2.react.createElement(
"h5",
- { className: "h5-18_1nd defaultColor-1_ajX0 margin-reset bd-server-member-count" },
+ {className: "h5-18_1nd defaultColor-1_ajX0 margin-reset bd-server-member-count"},
server.members,
" Members"
)
),
BDV2.react.createElement(
"div",
- { className: "flex-1xMQg5 flex-1O1GKY horizontal-1ae9ci horizontal-2EEEnY directionRow-3v3tfG noWrap-3jynv6" },
+ {className: "flex-1xMQg5 flex-1O1GKY horizontal-1ae9ci horizontal-2EEEnY directionRow-3v3tfG noWrap-3jynv6"},
BDV2.react.createElement(
"div",
- { className: "scrollerWrap-2lJEkd scrollerThemed-2oenus themeGhostHairline-DBD-2d scrollerFade-1Ijw5y bd-server-description-container"},
+ {className: "scrollerWrap-2lJEkd scrollerThemed-2oenus themeGhostHairline-DBD-2d scrollerFade-1Ijw5y bd-server-description-container"},
BDV2.react.createElement(
"div",
- { className: "scroller-2FKFPG scroller bd-server-description" },
+ {className: "scroller-2FKFPG scroller bd-server-description"},
server.description
)
)
),
BDV2.react.createElement(
"div",
- { className: "flex-1xMQg5 flex-1O1GKY horizontal-1ae9ci horizontal-2EEEnY directionRow-3v3tfG noWrap-3jynv6 bd-server-footer" },
+ {className: "flex-1xMQg5 flex-1O1GKY horizontal-1ae9ci horizontal-2EEEnY directionRow-3v3tfG noWrap-3jynv6 bd-server-footer"},
BDV2.react.createElement(
"div",
- { className: "flexChild-faoVW3 bd-server-tags", style: { flex: "1 1 auto" } },
- server.categories.join(', ')
+ {className: "flexChild-faoVW3 bd-server-tags", style: {flex: "1 1 auto"}},
+ server.categories.join(", ")
),
this.state.joined && BDV2.react.createElement(
"button",
- { type: "button", className: "button-38aScr lookFilled-1Gx00P colorBrand-3pXr91 sizeMin-1mJd1x grow-q77ONN colorGreen-29iAKY", style: { minHeight: "12px", marginTop: "4px", backgroundColor: "#3ac15c" } },
+ {type: "button", className: "button-38aScr lookFilled-1Gx00P colorBrand-3pXr91 sizeMin-1mJd1x grow-q77ONN colorGreen-29iAKY", style: {minHeight: "12px", marginTop: "4px", backgroundColor: "#3ac15c"}},
BDV2.react.createElement(
"div",
- { className: "ui-button-contents" },
+ {className: "ui-button-contents"},
"Joined"
)
),
server.error && BDV2.react.createElement(
"button",
- { type: "button", className: "button-38aScr lookFilled-1Gx00P colorBrand-3pXr91 sizeMin-1mJd1x grow-q77ONN disabled-9aF2ug", style: { minHeight: "12px", marginTop: "4px", backgroundColor: "#c13a3a" } },
+ {type: "button", className: "button-38aScr lookFilled-1Gx00P colorBrand-3pXr91 sizeMin-1mJd1x grow-q77ONN disabled-9aF2ug", style: {minHeight: "12px", marginTop: "4px", backgroundColor: "#c13a3a"}},
BDV2.react.createElement(
"div",
- { className: "ui-button-contents" },
+ {className: "ui-button-contents"},
"Error"
)
),
!server.error && !this.state.joined && BDV2.react.createElement(
"button",
- { type: "button", className: "button-38aScr lookFilled-1Gx00P colorBrand-3pXr91 sizeMin-1mJd1x grow-q77ONN", style: { minHeight: "12px", marginTop: "4px" }, onClick: () => {this.join();} },
+ {type: "button", className: "button-38aScr lookFilled-1Gx00P colorBrand-3pXr91 sizeMin-1mJd1x grow-q77ONN", style: {minHeight: "12px", marginTop: "4px"}, onClick: () => {this.join();}},
BDV2.react.createElement(
"div",
- { className: "ui-button-contents" },
+ {className: "ui-button-contents"},
"Join"
)
)
@@ -3729,8 +3733,8 @@ class V2C_PublicServers extends BDV2.reactComponent {
this.GuildStore = BDV2.WebpackModules.findByUniqueProperties(["getGuilds"]);
this.AvatarDefaults = BDV2.WebpackModules.findByUniqueProperties(["getUserAvatarURL", "DEFAULT_AVATARS"]);
- this.InviteActions = BDV2.WebpackModules.findByUniqueProperties(['acceptInvite']);
- this.SortedGuildStore = BDV2.WebpackModules.findByUniqueProperties(['getSortedGuilds']);
+ this.InviteActions = BDV2.WebpackModules.findByUniqueProperties(["acceptInvite"]);
+ this.SortedGuildStore = BDV2.WebpackModules.findByUniqueProperties(["getSortedGuilds"]);
}
componentDidMount() {
@@ -3739,14 +3743,14 @@ class V2C_PublicServers extends BDV2.reactComponent {
setInitialState() {
this.state = {
- 'selectedCategory': -1,
- 'title': 'Loading...',
- 'loading': true,
- 'servers': [],
- 'next': null,
- 'connection': {
- 'state': 0,
- 'user': null
+ selectedCategory: -1,
+ title: "Loading...",
+ loading: true,
+ servers: [],
+ next: null,
+ connection: {
+ state: 0,
+ user: null
}
};
}
@@ -3759,7 +3763,7 @@ class V2C_PublicServers extends BDV2.reactComponent {
let self = this;
$.ajax({
- method: 'GET',
+ method: "GET",
url: `${self.endPoint}${query}${query ? "&schema=new" : "?schema=new"}`,
success: data => {
let servers = data.results.reduce((arr, server) => {
@@ -3771,11 +3775,11 @@ class V2C_PublicServers extends BDV2.reactComponent {
if (!clear) {
servers = self.state.servers.concat(servers);
- } else {
+ }
+ else {
//servers.unshift(self.bdServer);
}
- let hasNext = true;
let end = data.size + data.from;
data.next = `?from=${end}`;
if (self.state.term) data.next += `&term=${self.state.term}`;
@@ -3789,21 +3793,21 @@ class V2C_PublicServers extends BDV2.reactComponent {
if (self.state.term) title += ` for ${self.state.term}`;
self.setState({
- 'loading': false,
- 'title': title,
- 'servers': servers,
- 'next': data.next
+ loading: false,
+ title: title,
+ servers: servers,
+ next: data.next
});
if (clear) {
- //console.log(self);
+ //console.log(self);
self.refs.sbv.refs.contentScroller.scrollTop = 0;
}
},
- error: (jqXHR) => {
+ error: () => {
self.setState({
- 'loading': false,
- 'title': 'Failed to load servers. Check console for details'
+ loading: false,
+ title: "Failed to load servers. Check console for details"
});
}
});
@@ -3812,10 +3816,10 @@ class V2C_PublicServers extends BDV2.reactComponent {
join(serverCard) {
if (serverCard.props.pinned) return this.InviteActions.acceptInvite(serverCard.props.invite_code);
$.ajax({
- method: 'GET',
+ method: "GET",
url: `${this.joinEndPoint}/${serverCard.props.server.identifier}`,
headers: {
- Accept: "application/json;",
+ "Accept": "application/json;",
"Content-Type": "application/json;" ,
"x-discord-id": this.state.connection.user.id,
"x-discord-token": this.state.connection.user.accessToken
@@ -3824,7 +3828,7 @@ class V2C_PublicServers extends BDV2.reactComponent {
xhrFields: {
withCredentials: true
},
- success: data => {
+ success: () => {
serverCard.setState({joined: true});
}
});
@@ -3836,10 +3840,10 @@ class V2C_PublicServers extends BDV2.reactComponent {
options.x = Math.round(window.screenX + window.innerWidth / 2 - options.width / 2);
options.y = Math.round(window.screenY + window.innerHeight / 2 - options.height / 2);
- self.joinWindow = new (window.require('electron').remote.BrowserWindow)(options);
- let sub = window.location.hostname.split('.')[0];
- let url = self.connectEndPoint + (sub === 'canary' || sub === 'ptb' ? `/${sub}` : '') + "?betterDiscord";
- self.joinWindow.webContents.on('did-navigate', (event, url) => {
+ self.joinWindow = new (window.require("electron").remote.BrowserWindow)(options);
+ let sub = window.location.hostname.split(".")[0];
+ let url = self.connectEndPoint + (sub === "canary" || sub === "ptb" ? `/${sub}` : "") + "?betterDiscord";
+ self.joinWindow.webContents.on("did-navigate", (event, url) => {
if (url != "https://join.discordservers.com/session") return;
self.joinWindow.close();
self.checkConnection();
@@ -3851,7 +3855,7 @@ class V2C_PublicServers extends BDV2.reactComponent {
return {
width: 500,
height: 550,
- backgroundColor: '#282b30',
+ backgroundColor: "#282b30",
show: true,
resizable: false,
maximizable: false,
@@ -3864,42 +3868,42 @@ class V2C_PublicServers extends BDV2.reactComponent {
get bdServer() {
let server = {
- "name": "BetterDiscord",
- "online": "7500+",
- "members": "20000+",
- "categories": ["community", "programming", "support"],
- "description": "Official BetterDiscord server for support etc",
- "identifier": "86004744966914048",
- "iconUrl": "https://cdn.discordapp.com/icons/86004744966914048/292e7f6bfff2b71dfd13e508a859aedd.webp",
- "nativejoin": true,
- "invite_code": "0Tmfo5ZbORCRqbAd",
- "pinned": true
+ name: "BetterDiscord",
+ online: "7500+",
+ members: "20000+",
+ categories: ["community", "programming", "support"],
+ description: "Official BetterDiscord server for support etc",
+ identifier: "86004744966914048",
+ iconUrl: "https://cdn.discordapp.com/icons/86004744966914048/292e7f6bfff2b71dfd13e508a859aedd.webp",
+ nativejoin: true,
+ invite_code: "0Tmfo5ZbORCRqbAd",
+ pinned: true
};
let guildList = this.SortedGuildStore.guildPositions;
let defaultList = this.AvatarDefaults.DEFAULT_AVATARS;
- return BDV2.react.createElement(V2Components.ServerCard, { server: server, pinned: true, join: this.join, guildList: guildList, fallback: defaultList[Math.floor(Math.random() * 5)] });
+ return BDV2.react.createElement(V2Components.ServerCard, {server: server, pinned: true, join: this.join, guildList: guildList, fallback: defaultList[Math.floor(Math.random() * 5)]});
}
get endPoint() {
- return 'https://search.discordservers.com';
+ return "https://search.discordservers.com";
}
get joinEndPoint() {
- return 'https://join.discordservers.com';
+ return "https://join.discordservers.com";
}
get connectEndPoint() {
- return 'https://join.discordservers.com/connect';
+ return "https://join.discordservers.com/connect";
}
checkConnection() {
let self = this;
try {
$.ajax({
- method: 'GET',
+ method: "GET",
url: `${self.joinEndPoint}/session`,
headers: {
- Accept: "application/json;",
+ "Accept": "application/json;",
"Content-Type": "application/json;"
},
crossDomain: true,
@@ -3908,10 +3912,10 @@ class V2C_PublicServers extends BDV2.reactComponent {
},
success: data => {
self.setState({
- 'selectedCategory': 0,
- 'connection': {
- 'state': 2,
- 'user': data
+ selectedCategory: 0,
+ connection: {
+ state: 2,
+ user: data
}
});
self.search("", true);
@@ -3921,12 +3925,12 @@ class V2C_PublicServers extends BDV2.reactComponent {
if (jqXHR.status === 403 || jqXHR.status === 404) {
//Not connected
self.setState({
- 'title': 'Not connected to discordservers.com!',
- 'loading': true,
- 'selectedCategory': -1,
- 'connection': {
- 'state': 1,
- 'user': null
+ title: "Not connected to discordservers.com!",
+ loading: true,
+ selectedCategory: -1,
+ connection: {
+ state: 1,
+ user: null
}
});
return;
@@ -3934,33 +3938,33 @@ class V2C_PublicServers extends BDV2.reactComponent {
}
});
}
- catch(error) {
+ catch (error) {
self.setState({
- 'title': 'Not connected to discordservers.com!',
- 'loading': true,
- 'selectedCategory': -1,
- 'connection': {
- 'state': 1,
- 'user': null
+ title: "Not connected to discordservers.com!",
+ loading: true,
+ selectedCategory: -1,
+ connection: {
+ state: 1,
+ user: null
}
});
}
}
render() {
- return BDV2.react.createElement(V2Components.SidebarView, { ref: "sbv", children: this.component });
+ return BDV2.react.createElement(V2Components.SidebarView, {ref: "sbv", children: this.component});
}
get component() {
return {
- 'sidebar': {
- 'component': this.sidebar
+ sidebar: {
+ component: this.sidebar
},
- 'content': {
- 'component': this.content
+ content: {
+ component: this.content
},
- 'tools': {
- 'component': BDV2.react.createElement(V2Components.Tools, { key: "pt", ref: "tools", onClick: this.close })
+ tools: {
+ component: BDV2.react.createElement(V2Components.Tools, {key: "pt", ref: "tools", onClick: this.close})
}
};
}
@@ -3968,21 +3972,21 @@ class V2C_PublicServers extends BDV2.reactComponent {
get sidebar() {
return BDV2.react.createElement(
"div",
- { className: "sidebar", key: "ps" },
+ {className: "sidebar", key: "ps"},
BDV2.react.createElement(
"div",
- { className: "ui-tab-bar SIDE" },
+ {className: "ui-tab-bar SIDE"},
BDV2.react.createElement(
"div",
- { className: "ui-tab-bar-header", style: { fontSize: "16px" } },
+ {className: "ui-tab-bar-header", style: {fontSize: "16px"}},
"Public Servers"
),
BDV2.react.createElement(V2Components.TabBar.Separator, null),
this.searchInput,
BDV2.react.createElement(V2Components.TabBar.Separator, null),
- BDV2.react.createElement(V2Components.TabBar.Header, { text: "Categories" }),
+ BDV2.react.createElement(V2Components.TabBar.Header, {text: "Categories"}),
this.categoryButtons.map((value, index) => {
- return BDV2.react.createElement(V2Components.TabBar.Item, { id: index, onClick: this.changeCategory, key: index, text: value, selected: this.state.selectedCategory === index });
+ return BDV2.react.createElement(V2Components.TabBar.Item, {id: index, onClick: this.changeCategory, key: index, text: value, selected: this.state.selectedCategory === index});
}),
BDV2.react.createElement(V2Components.TabBar.Separator, null),
this.footer,
@@ -3994,11 +3998,11 @@ class V2C_PublicServers extends BDV2.reactComponent {
get searchInput() {
return BDV2.react.createElement(
"div",
- { className: "ui-form-item" },
+ {className: "ui-form-item"},
BDV2.react.createElement(
"div",
- { className: "ui-text-input flex-vertical", style: { width: "172px", marginLeft: "10px" } },
- BDV2.react.createElement("input", { ref: "searchinput", onKeyDown: this.searchKeyDown, onChange: () => {}, type: "text", className: "input default", placeholder: "Search...", maxLength: "50" })
+ {className: "ui-text-input flex-vertical", style: {width: "172px", marginLeft: "10px"}},
+ BDV2.react.createElement("input", {ref: "searchinput", onKeyDown: this.searchKeyDown, onChange: () => {}, type: "text", className: "input default", placeholder: "Search...", maxLength: "50"})
)
);
}
@@ -4007,9 +4011,9 @@ class V2C_PublicServers extends BDV2.reactComponent {
let self = this;
if (self.state.loading || e.which !== 13) return;
self.setState({
- 'loading': true,
- 'title': 'Loading...',
- 'term': e.target.value
+ loading: true,
+ title: "Loading...",
+ term: e.target.value
});
let query = `?term=${e.target.value}`;
if (self.state.selectedCategory !== 0) {
@@ -4027,10 +4031,10 @@ class V2C_PublicServers extends BDV2.reactComponent {
if (self.state.loading) return;
self.refs.searchinput.value = "";
self.setState({
- 'loading': true,
- 'selectedCategory': id,
- 'title': 'Loading...',
- 'term': null
+ loading: true,
+ selectedCategory: id,
+ title: "Loading...",
+ term: null
});
if (id === 0) {
self.search("", true);
@@ -4046,24 +4050,24 @@ class V2C_PublicServers extends BDV2.reactComponent {
if (self.state.connection.state === 1) return self.notConnected;
return [BDV2.react.createElement(
"div",
- { ref: "content", key: "pc", className: "content-column default" },
- BDV2.react.createElement(V2Components.SettingsTitle, { text: self.state.title }),
+ {ref: "content", key: "pc", className: "content-column default"},
+ BDV2.react.createElement(V2Components.SettingsTitle, {text: self.state.title}),
self.bdServer,
- self.state.servers.map((server, index) => {
- return BDV2.react.createElement(V2Components.ServerCard, { key: server.identifier, server: server, join: self.join, guildList: guildList, fallback: defaultList[Math.floor(Math.random() * 5)] });
+ self.state.servers.map((server) => {
+ return BDV2.react.createElement(V2Components.ServerCard, {key: server.identifier, server: server, join: self.join, guildList: guildList, fallback: defaultList[Math.floor(Math.random() * 5)]});
}),
self.state.next && BDV2.react.createElement(
"button",
- { type: "button", onClick: () => {
- if (self.state.loading) return;self.setState({ 'loading': true }); self.search(self.state.next, false);
- }, className: "ui-button filled brand small grow", style: { width: "100%", marginTop: "10px", marginBottom: "10px" } },
+ {type: "button", onClick: () => {
+ if (self.state.loading) return;self.setState({loading: true}); self.search(self.state.next, false);
+ }, className: "ui-button filled brand small grow", style: {width: "100%", marginTop: "10px", marginBottom: "10px"}},
BDV2.react.createElement(
"div",
- { className: "ui-button-contents" },
- self.state.loading ? 'Loading' : 'Load More'
+ {className: "ui-button-contents"},
+ self.state.loading ? "Loading" : "Load More"
)
),
- self.state.servers.length > 0 && BDV2.react.createElement(V2Components.SettingsTitle, { text: self.state.title })
+ self.state.servers.length > 0 && BDV2.react.createElement(V2Components.SettingsTitle, {text: self.state.title})
)];
}
@@ -4072,17 +4076,27 @@ class V2C_PublicServers extends BDV2.reactComponent {
//return BDV2.react.createElement(V2Components.SettingsTitle, { text: self.state.title });
return [BDV2.react.createElement(
"div",
- { key: "ncc", ref: "content", className: "content-column default" },
+ {key: "ncc", ref: "content", className: "content-column default"},
BDV2.react.createElement(
"h2",
- { className: "ui-form-title h2 margin-reset margin-bottom-20" },
+ {className: "ui-form-title h2 margin-reset margin-bottom-20"},
"Not connected to discordservers.com!",
BDV2.react.createElement(
"button",
- { onClick: self.connect, type: "button", className: "ui-button filled brand small grow", style: { display: "inline-block", minHeight: "18px", marginLeft: "10px", lineHeight: "14px" } },
+ {
+ onClick: self.connect,
+ type: "button",
+ className: "ui-button filled brand small grow",
+ style: {
+ display: "inline-block",
+ minHeight: "18px",
+ marginLeft: "10px",
+ lineHeight: "14px"
+ }
+ },
BDV2.react.createElement(
"div",
- { className: "ui-button-contents" },
+ {className: "ui-button-contents"},
"Connect"
)
)
@@ -4093,10 +4107,10 @@ class V2C_PublicServers extends BDV2.reactComponent {
get footer() {
return BDV2.react.createElement(
"div",
- { className: "ui-tab-bar-header" },
+ {className: "ui-tab-bar-header"},
BDV2.react.createElement(
"a",
- { href: "https://discordservers.com", target: "_blank" },
+ {href: "https://discordservers.com", target: "_blank"},
"Discordservers.com"
)
);
@@ -4104,7 +4118,7 @@ class V2C_PublicServers extends BDV2.reactComponent {
get connection() {
let self = this;
- let { connection } = self.state;
+ let {connection} = self.state;
if (connection.state !== 2) return BDV2.react.createElement("span", null);
return BDV2.react.createElement(
@@ -4113,19 +4127,19 @@ class V2C_PublicServers extends BDV2.reactComponent {
BDV2.react.createElement(V2Components.TabBar.Separator, null),
BDV2.react.createElement(
"span",
- { style: { color: "#b9bbbe", fontSize: "10px", marginLeft: "10px" } },
+ {style: {color: "#b9bbbe", fontSize: "10px", marginLeft: "10px"}},
"Connected as: ",
`${connection.user.username}#${connection.user.discriminator}`
),
BDV2.react.createElement(
"div",
- { style: { padding: "5px 10px 0 10px" } },
+ {style: {padding: "5px 10px 0 10px"}},
BDV2.react.createElement(
"button",
- { style: { width: "100%", minHeight: "20px" }, type: "button", className: "ui-button filled brand small grow" },
+ {style: {width: "100%", minHeight: "20px"}, type: "button", className: "ui-button filled brand small grow"},
BDV2.react.createElement(
"div",
- { className: "ui-button-contents", onClick: self.connect },
+ {className: "ui-button-contents", onClick: self.connect},
"Reconnect"
)
)
diff --git a/js/main.min.js b/js/main.min.js
index 3a8ddd9a..e23652d9 100644
--- a/js/main.min.js
+++ b/js/main.min.js
@@ -1,5 +1,5 @@
-(function(){let t=window.require("fs"),a=window.require("process"),o=a.platform,d=("win32"===o?a.env.APPDATA:"darwin"===o?a.env.HOME+"/Library/Preferences":process.env.HOME+"/.config")+"/BetterDiscord/",l="localStorage.json",u={};if(t.existsSync(`${d}${l}`))try{u=JSON.parse(t.readFileSync(`${d}${l}`))}catch(b){console.log(b)}else if(t.existsSync(l))try{u=JSON.parse(t.readFileSync(l))}catch(b){console.log(b)}var h=u;h.setItem=function(b,f){h[b]=f,this.save()},h.getItem=function(b){return h[b]||null},h.save=function(){t.writeFileSync(`${d}${l}`,JSON.stringify(this),null,4)};var g=new Proxy(h,{set:function(b,f,y){h[f]=y,h.save()},get:function(b,f){return h[f]||null}});window.localStorage=g})(),(()=>{let t=document.createElement("div");t.className="bd-loaderv2",t.title="BetterDiscord is loading...",document.body.appendChild(t)})(),window.bdStorage={},window.bdStorage.get=function(t){return betterDiscordIPC.sendSync("synchronous-message",{arg:"storage",cmd:"get","var":t})},window.bdStorage.set=function(t,a){betterDiscordIPC.sendSync("synchronous-message",{arg:"storage",cmd:"set","var":t,data:a})},window.bdPluginStorage={},window.bdPluginStorage.get=function(t,a){return betterDiscordIPC.sendSync("synchronous-message",{arg:"pluginstorage",cmd:"get",pn:t,"var":a})},window.bdPluginStorage.set=function(t,a,o){betterDiscordIPC.sendSync("synchronous-message",{arg:"pluginstorage",cmd:"set",pn:t,"var":a,data:o})};var bdSettings={},bdSettingsStorage={};bdSettingsStorage.initialize=function(){let t=require("fs"),a={};if(t.existsSync(bdConfig.dataPath+"/bdsettings.json"))try{a=JSON.parse(t.readFileSync(bdConfig.dataPath+"/bdsettings.json"))}catch(o){a={}}bdSettings=a?a:{}},bdSettingsStorage.get=function(t){return bdSettings[t]?bdSettings[t]:null},bdSettingsStorage.set=function(t,a){let o=require("fs");bdSettings[t]=a;try{return o.writeFileSync(bdConfig.dataPath+"/bdsettings.json",JSON.stringify(bdSettings,null,4)),!0}catch(d){return utils.err(d),!1}};var settingsPanel,emoteModule,utils,quickEmoteMenu,voiceMode,pluginModule,themeModule,dMode,publicServersModule,jsVersion=1.792,supportedVersion="0.2.81",bbdVersion="0.1.0",mainCore,settings={"Save logs locally":{id:"bda-gs-0",info:"Saves chat logs locally",implemented:!1,hidden:!1,cat:"core"},"Public Servers":{id:"bda-gs-1",info:"Display public servers button",implemented:!0,hidden:!1,cat:"core"},"Minimal Mode":{id:"bda-gs-2",info:"Hide elements and reduce the size of elements.",implemented:!0,hidden:!1,cat:"core"},"Voice Mode":{id:"bda-gs-4",info:"Only show voice chat",implemented:!0,hidden:!1,cat:"core"},"Hide Channels":{id:"bda-gs-3",info:"Hide channels in minimal mode",implemented:!0,hidden:!1,cat:"core"},"Dark Mode":{id:"bda-gs-5",info:"Make certain elements dark by default(wip)",implemented:!0,hidden:!1,cat:"core"},"Override Default Emotes":{id:"bda-es-5",info:"Override default emotes",implemented:!1,hidden:!1,cat:"core"},"Voice Disconnect":{id:"bda-dc-0",info:"Disconnect from voice server when closing Discord",implemented:!0,hidden:!1,cat:"core"},"Custom css live update":{id:"bda-css-0",info:"",implemented:!0,hidden:!0,cat:"core"},"Custom css auto udpate":{id:"bda-css-1",info:"",implemented:!0,hidden:!0,cat:"core"},"24 Hour Timestamps":{id:"bda-gs-6",info:"Replace 12hr timestamps with proper ones",implemented:!0,hidden:!1,cat:"core"},"Coloured Text":{id:"bda-gs-7",info:"Make text colour the same as role colour",implemented:!0,hidden:!1,cat:"core"},"BetterDiscord Blue":{id:"bda-gs-b",info:"Replace Discord blue with BD Blue",implemented:!0,hidden:!1,cat:"core"},"Developer Mode":{id:"bda-gs-8",info:"Developer Mode",implemented:!0,hidden:!1,cat:"core"},"Startup Error Modal":{id:"fork-ps-1",info:"Show a modal with plugin/theme errors on startup",implemented:!0,hidden:!1,cat:"fork"},"Show Toasts":{id:"fork-ps-2",info:"Shows a small notification for starting and stopping plugins & themes",implemented:!0,hidden:!1,cat:"fork"},"Scroll To Settings":{id:"fork-ps-3",info:"Auto-scrolls to a plugin's settings when the button is clicked (only if out of view)",implemented:!0,hidden:!1,cat:"fork"},"Animate On Hover":{id:"fork-es-2",info:"Only animate the emote modifiers on hover",implemented:!0,hidden:!1,cat:"fork"},"Copy Selector":{id:"fork-dm-1",info:"Adds a \"Copy Selector\" option to context menus when developer mode is active",implemented:!0,hidden:!1,cat:"fork"},"Download Emotes":{id:"fork-es-3",info:"Download emotes when the cache is expired",implemented:!0,hidden:!1,cat:"fork"},"Normalize Classes":{id:"fork-ps-4",info:"Adds stable classes to elements to help themes. (e.g. adds .da-channels to .channels-Ie2l6A)",implemented:!0,hidden:!1,cat:"fork"},"Twitch Emotes":{id:"bda-es-7",info:"Show Twitch emotes",implemented:!0,hidden:!1,cat:"emote"},"FrankerFaceZ Emotes":{id:"bda-es-1",info:"Show FrankerFaceZ Emotes",implemented:!0,hidden:!1,cat:"emote"},"BetterTTV Emotes":{id:"bda-es-2",info:"Show BetterTTV Emotes",implemented:!0,hidden:!1,cat:"emote"},"Emote Menu":{id:"bda-es-0",info:"Show Twitch/Favourite emotes in emote menu",implemented:!0,hidden:!1,cat:"emote"},"Emoji Menu":{id:"bda-es-9",info:"Show Discord emoji menu",implemented:!0,hidden:!1,cat:"emote"},"Emote Autocomplete":{id:"bda-es-3",info:"Autocomplete emote commands",implemented:!1,hidden:!1,cat:"emote"},"Emote Auto Capitalization":{id:"bda-es-4",info:"Autocapitalize emote commands",implemented:!0,hidden:!1,cat:"emote"},"Show Names":{id:"bda-es-6",info:"Show emote names on hover",implemented:!0,hidden:!1,cat:"emote"},"Show emote modifiers":{id:"bda-es-8",info:"Enable emote mods (flip, spin, pulse, spin2, spin3, 1spin, 2spin, 3spin, tr, bl, br, shake, shake2, shake3, flap)",implemented:!0,hidden:!1,cat:"emote"}},defaultCookie={version:jsVersion,"bda-gs-0":!1,"bda-gs-1":!0,"bda-gs-2":!1,"bda-gs-3":!1,"bda-gs-4":!1,"bda-gs-5":!0,"bda-gs-6":!1,"bda-gs-7":!1,"bda-gs-8":!1,"bda-es-0":!0,"bda-es-1":!0,"bda-es-2":!0,"bda-es-3":!1,"bda-es-4":!1,"bda-es-5":!0,"bda-es-6":!0,"bda-es-7":!0,"bda-gs-b":!1,"bda-es-8":!0,"bda-jd":!0,"bda-dc-0":!1,"bda-css-0":!1,"bda-css-1":!1,"bda-es-9":!0,"fork-dm-1":!1,"fork-ps-1":!0,"fork-ps-2":!0,"fork-ps-3":!0,"fork-ps-4":!0,"fork-es-2":!1,"fork-es-3":!0},settingsCookie={},bdpluginErrors,bdthemeErrors,bdConfig=null;function Core(t){window.bdConfig=t}var classNormalizer;Core.prototype.init=async function(){function t(){0
Please download the latest version from BetterDiscord.net"):void(utils=new Utils,await utils.getHash(),utils.log("Initializing Settings"),this.initSettings(),classNormalizer=new ClassNormalizer,emoteModule=new EmoteModule,utils.log("Initializing EmoteModule"),window.emotePromise=emoteModule.init().then(()=>{emoteModule.initialized=!0}),publicServersModule=new V2_PublicServers,quickEmoteMenu=new QuickEmoteMenu,voiceMode=new VoiceMode,dMode=new devMode,$(document).ready(function(){setTimeout(t,1e3)}))},Core.prototype.injectExternals=function(){utils.injectJs("https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.9/ace.js")},Core.prototype.initSettings=function(){if(bdSettingsStorage.initialize(),$.cookie("better-discord"))return settingsCookie=JSON.parse($.cookie("better-discord")),this.saveSettings(),void $.removeCookie("better-discord",{path:"/"});if(!bdSettingsStorage.get("settings"))settingsCookie=defaultCookie,this.saveSettings();else for(var t in this.loadSettings(),$("`),settingsCookie["fork-ps-2"]&&mainCore.showToast(`${bdthemes[t].name} v${bdthemes[t].version} has been applied.`)},ThemeModule.prototype.disableTheme=function(t){themeCookie[t]=!1,this.saveThemeData(),$(`#${utils.escapeID(bdthemes[t].name)}`).remove(),settingsCookie["fork-ps-2"]&&mainCore.showToast(`${bdthemes[t].name} v${bdthemes[t].version} has been removed.`)},ThemeModule.prototype.toggleTheme=function(t){themeCookie[t]?this.disableTheme(t):this.enableTheme(t)},ThemeModule.prototype.loadThemeData=function(){if($.cookie("bd-themes"))return themeCookie=JSON.parse($.cookie("bd-themes")),this.saveThemeData(),void $.removeCookie("bd-themes",{path:"/"});let t=bdSettingsStorage.get("themes");t&&(themeCookie=t)},ThemeModule.prototype.saveThemeData=function(){bdSettingsStorage.set("themes",themeCookie)};function BdApi(){}BdApi.injectCSS=function(t,a){$("head").append($(""),$("#customcss").html(this.editor.session.getValue()).detach().appendTo(document.head)}saveCss(){window.bdStorage.set("bdcustomcss",btoa(this.editor.session.getValue()))}}class V2C_CssEditor extends BDV2.reactComponent{constructor(t){super(t);let a=this;a.props.lines=0,a.setInitialState(),a.attach=a.attach.bind(a),a.detachedEditor=BDV2.react.createElement(V2C_CssEditorDetached,{attach:a.attach}),a.onClick=a.onClick.bind(a),a.updateCss=a.updateCss.bind(a),a.saveCss=a.saveCss.bind(a),a.detach=a.detach.bind(a)}setInitialState(){this.state={detached:this.props.detached||BDV2.editorDetached}}componentDidMount(){this.editor=ace.edit("bd-customcss-editor"),this.editor.setTheme("ace/theme/monokai"),this.editor.session.setMode("ace/mode/css"),this.editor.setShowPrintMargin(!1),this.editor.setFontSize(14),this.editor.on("change",()=>{settingsCookie["bda-css-0"]&&(this.saveCss(),this.updateCss())})}componentWillUnmount(){this.editor.destroy()}componentDidUpdate(t,a){let o=this;a.detached&&!o.state.detached&&BDV2.reactDom.unmountComponentAtNode(o.detachedRoot)}codeMirror(){}get options(){return{lineNumbers:!0,mode:"css",indentUnit:4,theme:"material",scrollbarStyle:"simple"}}get css(){let t=window.bdStorage.get("bdcustomcss"),a="";return t&&""!==t&&(a=atob(t)),a}updateLineCount(){let t=this.refs.editor.value.split("\n").length;t==this.props.lines||(this.refs.lines.textContent=Array.from(Array(t),(a,o)=>o+1).join(".\n")+".",this.props.lines=t)}render(){let t=this,{detached:a}=t.state;return BDV2.react.createElement("div",{className:"content-column default",style:{padding:"60px 40px 0px"}},a&&BDV2.react.createElement("div",{id:"editor-detached"},BDV2.react.createElement(V2Components.SettingsTitle,{text:"Custom CSS Editor"}),BDV2.react.createElement("h3",null,"Editor Detached"),BDV2.react.createElement("button",{className:"btn btn-primary",onClick:()=>{t.attach()}},"Attach")),!a&&BDV2.react.createElement("div",null,BDV2.react.createElement(V2Components.SettingsTitle,{text:"Custom CSS Editor"}),BDV2.react.createElement("div",{className:"editor-wrapper"},BDV2.react.createElement("div",{id:"bd-customcss-editor",className:"editor",ref:"editor"},t.css)),BDV2.react.createElement("div",{id:"bd-customcss-attach-controls"},BDV2.react.createElement("ul",{className:"checkbox-group"},BDV2.react.createElement(V2Components.Checkbox,{id:"live-update",text:"Live Update",onChange:this.onChange,checked:settingsCookie["bda-css-0"]})),BDV2.react.createElement("div",{id:"bd-customcss-detach-controls-button"},BDV2.react.createElement("button",{style:{borderRadius:"3px 0 0 3px",borderRight:"1px solid #3f4146"},className:"btn btn-primary",onClick:()=>{t.onClick("update")}},"Update"),BDV2.react.createElement("button",{style:{borderRadius:"0",borderLeft:"1px solid #2d2d2d",borderRight:"1px solid #2d2d2d"},className:"btn btn-primary",onClick:()=>{t.onClick("save")}},"Save"),BDV2.react.createElement("button",{style:{borderRadius:"0 3px 3px 0",borderLeft:"1px solid #3f4146"},className:"btn btn-primary",onClick:()=>{t.onClick("detach")}},"Detach"),BDV2.react.createElement("span",{style:{fontSize:"10px",marginLeft:"5px"}},"Unsaved changes are lost on detach")))))}onClick(t){let a=this;"update"===t?a.updateCss():"save"===t?a.saveCss():"detach"===t?a.detach():void 0}onChange(t,a){"live-update"===t?(settingsCookie["bda-css-0"]=a,mainCore.saveSettings()):void 0}updateCss(){0==$("#customcss").length&&$("head").append(""),$("#customcss").html(this.editor.session.getValue()).detach().appendTo(document.head)}saveCss(){window.bdStorage.set("bdcustomcss",btoa(this.editor.session.getValue()))}detach(){let t=this;t.setState({detached:!0});let a=t.detachedRoot;return a?void BDV2.reactDom.render(t.detachedEditor,a):void console.log("FAILED TO INJECT ROOT: .app")}get detachedRoot(){let t=$("#bd-customcss-detach-container");return t.length?t[0]:this.injectDetachedRoot()?this.detachedRoot:null}injectDetachedRoot(){return!!$(".app").length&&($("",{id:"bd-customcss-detach-container"}).insertAfter($(".app")),!0)}attach(){let t=this;t.setState({detached:!1})}}class V2C_List extends BDV2.reactComponent{constructor(t){super(t)}render(){return BDV2.react.createElement("ul",{className:this.props.className},this.props.children)}}class V2C_ContentColumn extends BDV2.reactComponent{constructor(t){super(t)}render(){return BDV2.react.createElement("div",{className:"content-column default"},BDV2.react.createElement("h2",{className:"ui-form-title h2 margin-reset margin-bottom-20"},this.props.title),this.props.children)}}class V2C_PluginCard extends BDV2.reactComponent{constructor(t){super(t);let a=this;a.onChange=a.onChange.bind(a),a.showSettings=a.showSettings.bind(a),a.setInitialState(),a.hasSettings="function"==typeof a.props.plugin.getSettingsPanel,a.settingsPanel=""}setInitialState(){this.state={checked:pluginCookie[this.props.plugin.getName()],settings:!1}}componentDidUpdate(){if(this.state.settings){if("object"==typeof this.settingsPanel&&this.refs.settingspanel.appendChild(this.settingsPanel),!settingsCookie["fork-ps-3"])return;var t=(d,l)=>{let u=d.scrollTop,h=u+d.clientHeight,g=l.offsetTop,b=g+l.clientHeight;return gh};let a=$(BDV2.reactDom.findDOMNode(this)),o=a.parents(".scroller");if(!t(o[0],a[0]))return;o.animate({scrollTop:a.offset().top-o.offset().top+o.scrollTop()-30},300)}}render(){let t=this,{plugin:a}=this.props,o=a.getName(),d=a.getAuthor(),l=a.getDescription(),u=a.getVersion(),h=bdplugins[o].website,g=bdplugins[o].source;if(this.state.settings){try{t.settingsPanel=a.getSettingsPanel()}catch(b){utils.err("Unable to get settings panel for "+a.getName()+".",b)}return BDV2.react.createElement("li",{className:"settings-open ui-switch-item"},BDV2.react.createElement("div",{style:{float:"right",cursor:"pointer"},onClick:()=>{this.refs.settingspanel.innerHTML="",t.setState({settings:!1})}},BDV2.react.createElement(V2Components.XSvg,null)),"object"==typeof t.settingsPanel&&BDV2.react.createElement("div",{id:`plugin-settings-${o}`,className:"plugin-settings",ref:"settingspanel"}),"object"!=typeof t.settingsPanel&&BDV2.react.createElement("div",{id:`plugin-settings-${o}`,className:"plugin-settings",ref:"settingspanel",dangerouslySetInnerHTML:{__html:t.settingsPanel}}))}return BDV2.react.createElement("li",{"data-name":o,"data-version":u,className:"settings-closed ui-switch-item"},BDV2.react.createElement("div",{className:"bda-header"},BDV2.react.createElement("span",{className:"bda-header-title"},BDV2.react.createElement("span",{className:"bda-name"},o)," v",BDV2.react.createElement("span",{className:"bda-version"},u)," by ",BDV2.react.createElement("span",{className:"bda-author"},d)),BDV2.react.createElement("label",{className:"ui-switch-wrapper ui-flex-child",style:{flex:"0 0 auto"}},BDV2.react.createElement("input",{checked:this.state.checked,onChange:this.onChange,className:"ui-switch-checkbox",type:"checkbox"}),BDV2.react.createElement("div",{className:this.state.checked?"ui-switch checked":"ui-switch"}))),BDV2.react.createElement("div",{className:"bda-description-wrap scroller-wrap fade"},BDV2.react.createElement("div",{className:"bda-description scroller"},l)),(h||g||this.hasSettings)&&BDV2.react.createElement("div",{className:"bda-footer"},BDV2.react.createElement("span",{className:"bda-links"},h&&BDV2.react.createElement("a",{className:"bda-link bda-link-website",href:h,target:"_blank"},"Website"),h&&g&&" | ",g&&BDV2.react.createElement("a",{className:"bda-link bda-link-source",href:g,target:"_blank"},"Source")),this.hasSettings&&BDV2.react.createElement("button",{onClick:this.showSettings,className:"bda-settings-button",disabled:!this.state.checked},"Settings")))}onChange(){this.setState({checked:!this.state.checked}),pluginModule.togglePlugin(this.props.plugin.getName())}showSettings(){this.hasSettings&&this.setState({settings:!0})}}class V2C_ThemeCard extends BDV2.reactComponent{constructor(t){super(t),this.setInitialState(),this.onChange=this.onChange.bind(this)}setInitialState(){this.state={checked:themeCookie[this.props.theme.name]}}render(){let{theme:t}=this.props,a=t.name,o=t.description,d=t.version,l=t.author,u=bdthemes[a].website,h=bdthemes[a].source;return BDV2.react.createElement("li",{"data-name":a,"data-version":d,className:"settings-closed ui-switch-item"},BDV2.react.createElement("div",{className:"bda-header"},BDV2.react.createElement("span",{className:"bda-header-title"},BDV2.react.createElement("span",{className:"bda-name"},a)," v",BDV2.react.createElement("span",{className:"bda-version"},d)," by ",BDV2.react.createElement("span",{className:"bda-author"},l)),BDV2.react.createElement("label",{className:"ui-switch-wrapper ui-flex-child",style:{flex:"0 0 auto"}},BDV2.react.createElement("input",{checked:this.state.checked,onChange:this.onChange,className:"ui-switch-checkbox",type:"checkbox"}),BDV2.react.createElement("div",{className:this.state.checked?"ui-switch checked":"ui-switch"}))),BDV2.react.createElement("div",{className:"bda-description-wrap scroller-wrap fade"},BDV2.react.createElement("div",{className:"bda-description scroller"},o)),(u||h)&&BDV2.react.createElement("div",{className:"bda-footer"},BDV2.react.createElement("span",{className:"bda-links"},u&&BDV2.react.createElement("a",{className:"bda-link",href:u,target:"_blank"},"Website"),u&&h&&" | ",h&&BDV2.react.createElement("a",{className:"bda-link",href:h,target:"_blank"},"Source"))))}onChange(){this.setState({checked:!this.state.checked}),themeModule.toggleTheme(this.props.theme.name)}}class V2Cs_TabBar{static get Item(){return V2C_TabBarItem}static get Header(){return V2C_TabBarHeader}static get Separator(){return V2C_TabBarSeparator}}class V2Components{static get SettingsPanel(){return V2C_SettingsPanel}static get Switch(){return V2C_Switch}static get Scroller(){return V2C_Scroller}static get TabBar(){return V2Cs_TabBar}static get SideBar(){return V2C_SideBar}static get Tools(){return V2C_Tools}static get SettingsTitle(){return V2C_SettingsTitle}static get CssEditor(){return V2C_CssEditor}static get Checkbox(){return V2C_Checkbox}static get List(){return V2C_List}static get PluginCard(){return V2C_PluginCard}static get ThemeCard(){return V2C_ThemeCard}static get ContentColumn(){return V2C_ContentColumn}static get XSvg(){return V2C_XSvg}static get Layer(){return V2C_Layer}static get SidebarView(){return V2C_SidebarView}static get ServerCard(){return V2C_ServerCard}}class V2_SettingsPanel_Sidebar{constructor(t){this.onClick=t}get items(){return[{text:"Core",id:"core"},{text:"Zere's Fork",id:"fork"},{text:"Emotes",id:"emotes"},{text:"Custom CSS",id:"customcss"},{text:"Plugins",id:"plugins"},{text:"Themes",id:"themes"}]}get component(){return BDV2.react.createElement("span",null,BDV2.react.createElement(V2Components.SideBar,{onClick:this.onClick,headerText:"Bandaged BD",items:this.items}),BDV2.react.createElement("div",{style:{fontSize:"12px",fontWeight:"600",color:"#72767d",padding:"2px 10px"}},`BD v${bdVersion} by `,BDV2.react.createElement("a",{href:"https://github.com/Jiiks/",target:"_blank"},"Jiiks")),BDV2.react.createElement("div",{style:{fontSize:"12px",fontWeight:"600",color:"#72767d",padding:"2px 10px"}},`BBD v${bbdVersion} by `,BDV2.react.createElement("a",{href:"https://github.com/rauenzi/",target:"_blank"},"Zerebos")))}get root(){let t=$("#bd-settings-sidebar");return t.length?t[0]:this.injectRoot()?this.root:null}injectRoot(){let t=$("[class*='side-'] > [class*='item-']:not([class*=Danger])").last();return!!t.length&&($("",{id:"bd-settings-sidebar"}).insertBefore(t.prev()),!0)}render(){let t=this.root;return t?void BDV2.reactDom.render(this.component,t):void console.log("FAILED TO LOCATE ROOT: [class*='side-'] > [class*='item-']:not([class*=Danger])")}}class V2_SettingsPanel{constructor(){let t=this;t.sideBarOnClick=t.sideBarOnClick.bind(t),t.onChange=t.onChange.bind(t),t.updateSettings=this.updateSettings.bind(t),t.sidebar=new V2_SettingsPanel_Sidebar(t.sideBarOnClick)}get root(){let t=$("#bd-settingspane-container");return t.length?t[0]:this.injectRoot()?this.root:null}injectRoot(){return!!$(".layer-3QrUeG .ui-standard-sidebar-view, .layer-3QrUeG .ui-standard-sidebar-view").length&&($(".layer-3QrUeG .ui-standard-sidebar-view, .layer-3QrUeG .ui-standard-sidebar-view").append($("",{class:"content-region",id:"bd-settingspane-container"})),!0)}get coreSettings(){return this.getSettings("core")}get forkSettings(){return this.getSettings("fork")}get emoteSettings(){return this.getSettings("emote")}getSettings(t){return Object.keys(settings).reduce((a,o)=>{let d=settings[o];return d.cat===t&&d.implemented&&!d.hidden&&(d.text=o,a.push(d)),a},[])}sideBarOnClick(t){let a=this;$(".content-region").first().hide(),$(a.root).show();"core"===t?a.renderCoreSettings():"fork"===t?a.renderForkSettings():"emotes"===t?a.renderEmoteSettings():"customcss"===t?a.renderCustomCssEditor():"plugins"===t?a.renderPluginPane():"themes"===t?a.renderThemePane():void 0}onClick(){}onChange(t,a){settingsCookie[t]=a,this.updateSettings()}updateSettings(){let t=settingsCookie;t["bda-es-0"]?$("#twitchcord-button-container").show():$("#twitchcord-button-container").hide(),t["bda-gs-b"]?$("body").addClass("bd-blue"):$("body").removeClass("bd-blue"),t["bda-gs-2"]?$("body").addClass("bd-minimal"):$("body").removeClass("bd-minimal"),t["bda-gs-3"]?$("body").addClass("bd-minimal-chan"):$("body").removeClass("bd-minimal-chan"),t["bda-gs-1"]?$("#bd-pub-li").show():$("#bd-pub-li").hide(),t["bda-gs-4"]?voiceMode.enable():voiceMode.disable(),t["bda-gs-5"]?$("#app-mount").addClass("bda-dark"):$("#app-mount").removeClass("bda-dark"),t["bda-gs-6"]&&mainCore.inject24Hour(),t["bda-gs-7"]?mainCore.injectColoredText():mainCore.removeColoredText(),t["fork-ps-4"]?classNormalizer.start():classNormalizer.stop(),t["bda-gs-8"]?dMode.enable(t["fork-dm-1"]):dMode.disable(),mainCore.saveSettings()}renderSidebar(){let t=this;$("[class*='side-'] > [class*='item-']").off("click.v2settingspanel").on("click.v2settingspanel",()=>{BDV2.reactDom.unmountComponentAtNode(t.root),$(t.root).hide(),$(".content-region").first().show()}),t.sidebar.render()}get coreComponent(){return BDV2.react.createElement(V2Components.Scroller,{contentColumn:!0,fade:!0,dark:!0,children:[BDV2.react.createElement(V2Components.SettingsPanel,{key:"cspanel",title:"Core Settings",onChange:this.onChange,settings:this.coreSettings}),BDV2.react.createElement(V2Components.Tools,{key:"tools"})]})}get forkComponent(){return BDV2.react.createElement(V2Components.Scroller,{contentColumn:!0,fade:!0,dark:!0,children:[BDV2.react.createElement(V2Components.SettingsPanel,{key:"fspanel",title:"Zere's Fork Settings",onChange:this.onChange,settings:this.forkSettings,button:{title:"Clear Emote Cache",onClick:()=>{emoteModule.clearEmoteData(),emoteModule.init(),quickEmoteMenu.init()}}}),BDV2.react.createElement(V2Components.Tools,{key:"tools"})]})}get emoteComponent(){return BDV2.react.createElement(V2Components.Scroller,{contentColumn:!0,fade:!0,dark:!0,children:[BDV2.react.createElement(V2Components.SettingsPanel,{key:"espanel",title:"Emote Settings",onChange:this.onChange,settings:this.emoteSettings}),BDV2.react.createElement(V2Components.Tools,{key:"tools"})]})}get customCssComponent(){return BDV2.react.createElement(V2Components.Scroller,{contentColumn:!0,fade:!0,dark:!0,children:[BDV2.react.createElement(V2Components.CssEditor,{key:"csseditor"}),BDV2.react.createElement(V2Components.Tools,{key:"tools"})]})}get pluginsComponent(){let t=Object.keys(bdplugins).reduce((l,u)=>{return l.push(BDV2.react.createElement(V2Components.PluginCard,{key:u,plugin:bdplugins[u].plugin})),l},[]),a=BDV2.react.createElement(V2Components.List,{key:"plugin-list",className:"bda-slist",children:t}),o=BDV2.react.createElement("button",{key:"folder-button",className:"bd-pfbtn",onClick:()=>{betterDiscordIPC.send("asynchronous-message",{arg:"opendir",path:"plugindir"})}},"Open Plugin Folder"),d=BDV2.react.createElement(V2Components.ContentColumn,{key:"pcolumn",title:"Plugins",children:[o,a]});return BDV2.react.createElement(V2Components.Scroller,{contentColumn:!0,fade:!0,dark:!0,children:[d,BDV2.react.createElement(V2Components.Tools,{key:"tools"})]})}get themesComponent(){let t=Object.keys(bdthemes).reduce((l,u)=>{return l.push(BDV2.react.createElement(V2Components.ThemeCard,{key:u,theme:bdthemes[u]})),l},[]),a=BDV2.react.createElement(V2Components.List,{key:"theme-list",className:"bda-slist",children:t}),o=BDV2.react.createElement("button",{key:"folder-button",className:"bd-pfbtn",onClick:()=>{betterDiscordIPC.send("asynchronous-message",{arg:"opendir",path:"themedir"})}},"Open Theme Folder"),d=BDV2.react.createElement(V2Components.ContentColumn,{key:"tcolumn",title:"Themes",children:[o,a]});return BDV2.react.createElement(V2Components.Scroller,{contentColumn:!0,fade:!0,dark:!0,children:[d,BDV2.react.createElement(V2Components.Tools,{key:"tools"})]})}renderCoreSettings(){let t=this.root;return t?void BDV2.reactDom.render(this.coreComponent,t):void console.log("FAILED TO LOCATE ROOT: .layer .ui-standard-sidebar-view")}renderForkSettings(){let t=this.root;return t?void BDV2.reactDom.render(this.forkComponent,t):void console.log("FAILED TO LOCATE ROOT: .layer .ui-standard-sidebar-view")}renderEmoteSettings(){let t=this.root;return t?void BDV2.reactDom.render(this.emoteComponent,t):void console.log("FAILED TO LOCATE ROOT: .layer .ui-standard-sidebar-view")}renderCustomCssEditor(){let t=this.root;return t?void BDV2.reactDom.render(this.customCssComponent,t):void console.log("FAILED TO LOCATE ROOT: .layer .ui-standard-sidebar-view")}renderPluginPane(){let t=this.root;return t?void BDV2.reactDom.render(this.pluginsComponent,t):void console.log("FAILED TO LOCATE ROOT: .layer .ui-standard-sidebar-view")}renderThemePane(){let t=this.root;return t?void BDV2.reactDom.render(this.themesComponent,t):void console.log("FAILED TO LOCATE ROOT: .layer .ui-standard-sidebar-view")}}class V2C_Layer extends BDV2.reactComponent{constructor(t){super(t)}componentDidMount(){$(window).on(`keyup.${this.props.id}`,t=>{27===t.which&&BDV2.reactDom.unmountComponentAtNode(this.refs.root.parentNode)}),$(`#${this.props.id}`).animate({opacity:1},{step:function(t){$(this).css("transform",`scale(${1.1-0.1*t}) translateZ(0px)`)},duration:200,done:()=>{$(`#${this.props.id}`).css("opacity","").css("transform","")}})}componentWillUnmount(){$(window).off(`keyup.${this.props.id}`),$(`#${this.props.id}`).animate({opacity:0},{step:function(t){$(this).css("transform",`scale(${1.1-0.1*t}) translateZ(0px)`)},duration:200,done:()=>{$(`#${this.props.rootId}`).remove()}}),$("[class*=\"layer-\"]").removeClass("publicServersOpen").animate({opacity:1},{step:function(t){$(this).css("transform",`scale(${0.07*t+0.93}) translateZ(0px)`)},duration:200,done:()=>{$("[class*=\"layer-\"]").css("opacity","").css("transform","")}})}componentWillMount(){$("[class*=\"layer-\"]").addClass("publicServersOpen").animate({opacity:0},{step:function(t){$(this).css("transform",`scale(${0.07*t+0.93}) translateZ(0px)`)},duration:200})}render(){return BDV2.react.createElement("div",{className:"layer bd-layer layer-3QrUeG",id:this.props.id,ref:"root",style:{opacity:0,transform:"scale(1.1) translateZ(0px)"}},this.props.children)}}class V2C_SidebarView extends BDV2.reactComponent{constructor(t){super(t)}render(){let{sidebar:t,content:a,tools:o}=this.props.children;return BDV2.react.createElement("div",{className:"ui-standard-sidebar-view"},BDV2.react.createElement("div",{className:"sidebar-region"},BDV2.react.createElement(V2Components.Scroller,{key:"sidebarScroller",ref:"sidebarScroller",sidebar:!0,fade:t.fade||!0,dark:t.dark||!0,children:t.component})),BDV2.react.createElement("div",{className:"content-region"},BDV2.react.createElement("div",{className:"content-transition-wrap"},BDV2.react.createElement("div",{className:"scrollerWrap-2lJEkd content-region-scroller-wrap scrollerThemed-2oenus themeGhost-28MSn0 scrollerTrack-1ZIpsv"},BDV2.react.createElement("div",{className:"scroller-2FKFPG content-region-scroller scroller",ref:"contentScroller"},BDV2.react.createElement("div",{className:"content-column default"},a.component),o.component)))))}}class V2_PublicServers{constructor(){}get component(){return BDV2.react.createElement(V2Components.Layer,{rootId:"pubslayerroot",id:"pubslayer",children:BDV2.react.createElement(V2C_PublicServers,{rootId:"pubslayerroot"})})}get root(){let t=document.getElementById("pubslayerroot");return t?t:this.injectRoot()?this.root:null}injectRoot(){return!!$(".layers, .layers-3iHuyZ").length&&($(".layers, .layers-3iHuyZ").append($("",{id:"pubslayerroot"})),!0)}render(){let t=this.root;return t?void BDV2.reactDom.render(this.component,t):void console.log("FAILED TO LOCATE ROOT: .layers")}get button(){let t=$("",{class:BDV2.guildClasses.guild,id:"bd-pub-li",css:{height:"20px",display:settingsCookie["bda-gs-1"]?"":"none"}}).append($("",{class:BDV2.guildClasses.guildInner,css:{height:"20px","border-radius":"4px"}}).append($("",{}).append($("",{text:"public",id:"bd-pub-button",css:{"line-height":"20px","font-size":"12px"},click:()=>{this.render()}}))));return t}initialize(){let t=$(`.${BDV2.guildClasses.guilds}>:first-child`);t.after(this.button)}}class V2C_ServerCard extends BDV2.reactComponent{constructor(t){super(t),this.props.server.iconUrl||(this.props.server.iconUrl=this.props.fallback),this.state={imageError:!1,joined:this.props.guildList.includes(this.props.server.identifier)}}render(){let{server:t}=this.props;return BDV2.react.createElement("div",{className:`card-3Qj_Yx cardPrimary-1Hv-to marginBottom8-AtZOdT bd-server-card${t.pinned?" bd-server-card-pinned":""}`},BDV2.react.createElement("img",{ref:"img",className:"bd-server-image",src:t.iconUrl,onError:this.handleError.bind(this)}),BDV2.react.createElement("div",{className:"flexChild-faoVW3 bd-server-content"},BDV2.react.createElement("div",{className:"flex-1xMQg5 flex-1O1GKY horizontal-1ae9ci horizontal-2EEEnY directionRow-3v3tfG noWrap-3jynv6 bd-server-header"},BDV2.react.createElement("h5",{className:"h5-18_1nd defaultColor-1_ajX0 margin-reset bd-server-name"},t.name),BDV2.react.createElement("h5",{className:"h5-18_1nd defaultColor-1_ajX0 margin-reset bd-server-member-count"},t.members," Members")),BDV2.react.createElement("div",{className:"flex-1xMQg5 flex-1O1GKY horizontal-1ae9ci horizontal-2EEEnY directionRow-3v3tfG noWrap-3jynv6"},BDV2.react.createElement("div",{className:"scrollerWrap-2lJEkd scrollerThemed-2oenus themeGhostHairline-DBD-2d scrollerFade-1Ijw5y bd-server-description-container"},BDV2.react.createElement("div",{className:"scroller-2FKFPG scroller bd-server-description"},t.description))),BDV2.react.createElement("div",{className:"flex-1xMQg5 flex-1O1GKY horizontal-1ae9ci horizontal-2EEEnY directionRow-3v3tfG noWrap-3jynv6 bd-server-footer"},BDV2.react.createElement("div",{className:"flexChild-faoVW3 bd-server-tags",style:{flex:"1 1 auto"}},t.categories.join(", ")),this.state.joined&&BDV2.react.createElement("button",{type:"button",className:"button-38aScr lookFilled-1Gx00P colorBrand-3pXr91 sizeMin-1mJd1x grow-q77ONN colorGreen-29iAKY",style:{minHeight:"12px",marginTop:"4px",backgroundColor:"#3ac15c"}},BDV2.react.createElement("div",{className:"ui-button-contents"},"Joined")),t.error&&BDV2.react.createElement("button",{type:"button",className:"button-38aScr lookFilled-1Gx00P colorBrand-3pXr91 sizeMin-1mJd1x grow-q77ONN disabled-9aF2ug",style:{minHeight:"12px",marginTop:"4px",backgroundColor:"#c13a3a"}},BDV2.react.createElement("div",{className:"ui-button-contents"},"Error")),!t.error&&!this.state.joined&&BDV2.react.createElement("button",{type:"button",className:"button-38aScr lookFilled-1Gx00P colorBrand-3pXr91 sizeMin-1mJd1x grow-q77ONN",style:{minHeight:"12px",marginTop:"4px"},onClick:()=>{this.join()}},BDV2.react.createElement("div",{className:"ui-button-contents"},"Join")))))}handleError(){this.props.server.iconUrl=this.props.fallback,this.setState({imageError:!0})}join(){this.props.join(this)}}class V2C_PublicServers extends BDV2.reactComponent{constructor(t){super(t),this.setInitialState(),this.close=this.close.bind(this),this.changeCategory=this.changeCategory.bind(this),this.search=this.search.bind(this),this.searchKeyDown=this.searchKeyDown.bind(this),this.checkConnection=this.checkConnection.bind(this),this.join=this.join.bind(this),this.connect=this.connect.bind(this),this.GuildStore=BDV2.WebpackModules.findByUniqueProperties(["getGuilds"]),this.AvatarDefaults=BDV2.WebpackModules.findByUniqueProperties(["getUserAvatarURL","DEFAULT_AVATARS"]),this.InviteActions=BDV2.WebpackModules.findByUniqueProperties(["acceptInvite"]),this.SortedGuildStore=BDV2.WebpackModules.findByUniqueProperties(["getSortedGuilds"])}componentDidMount(){this.checkConnection()}setInitialState(){this.state={selectedCategory:-1,title:"Loading...",loading:!0,servers:[],next:null,connection:{state:0,user:null}}}close(){BDV2.reactDom.unmountComponentAtNode(document.getElementById(this.props.rootId))}search(t,a){let o=this;$.ajax({method:"GET",url:`${o.endPoint}${t}${t?"&schema=new":"?schema=new"}`,success:d=>{let l=d.results.reduce((b,f)=>{return f.joined=!1,b.push(f),b},[]);a||(l=o.state.servers.concat(l));let h=d.size+d.from;d.next=`?from=${h}`,o.state.term&&(d.next+=`&term=${o.state.term}`),o.state.selectedCategory&&(d.next+=`&category=${o.categoryButtons[o.state.selectedCategory]}`),h>=d.total&&(h=d.total,d.next=null);let g=`Showing 1-${h} of ${d.total} results in ${o.categoryButtons[o.state.selectedCategory]}`;o.state.term&&(g+=` for ${o.state.term}`),o.setState({loading:!1,title:g,servers:l,next:d.next}),a&&(o.refs.sbv.refs.contentScroller.scrollTop=0)},error:()=>{o.setState({loading:!1,title:"Failed to load servers. Check console for details"})}})}join(t){return t.props.pinned?this.InviteActions.acceptInvite(t.props.invite_code):void $.ajax({method:"GET",url:`${this.joinEndPoint}/${t.props.server.identifier}`,headers:{Accept:"application/json;","Content-Type":"application/json;","x-discord-id":this.state.connection.user.id,"x-discord-token":this.state.connection.user.accessToken},crossDomain:!0,xhrFields:{withCredentials:!0},success:()=>{t.setState({joined:!0})}})}connect(){let t=this,a=t.windowOptions;a.x=Math.round(window.screenX+window.innerWidth/2-a.width/2),a.y=Math.round(window.screenY+window.innerHeight/2-a.height/2),t.joinWindow=new(window.require("electron").remote.BrowserWindow)(a);let o=window.location.hostname.split(".")[0],d=t.connectEndPoint+("canary"===o||"ptb"===o?`/${o}`:"")+"?betterDiscord";t.joinWindow.webContents.on("did-navigate",(l,u)=>{"https://join.discordservers.com/session"!=u||(t.joinWindow.close(),t.checkConnection())}),t.joinWindow.loadURL(d)}get windowOptions(){return{width:500,height:550,backgroundColor:"#282b30",show:!0,resizable:!1,maximizable:!1,minimizable:!1,alwaysOnTop:!0,frame:!1,center:!1}}get bdServer(){let a=this.SortedGuildStore.guildPositions,o=this.AvatarDefaults.DEFAULT_AVATARS;return BDV2.react.createElement(V2Components.ServerCard,{server:{name:"BetterDiscord",online:"7500+",members:"20000+",categories:["community","programming","support"],description:"Official BetterDiscord server for support etc",identifier:"86004744966914048",iconUrl:"https://cdn.discordapp.com/icons/86004744966914048/292e7f6bfff2b71dfd13e508a859aedd.webp",nativejoin:!0,invite_code:"0Tmfo5ZbORCRqbAd",pinned:!0},pinned:!0,join:this.join,guildList:a,fallback:o[Math.floor(5*Math.random())]})}get endPoint(){return"https://search.discordservers.com"}get joinEndPoint(){return"https://join.discordservers.com"}get connectEndPoint(){return"https://join.discordservers.com/connect"}checkConnection(){let t=this;try{$.ajax({method:"GET",url:`${t.joinEndPoint}/session`,headers:{Accept:"application/json;","Content-Type":"application/json;"},crossDomain:!0,xhrFields:{withCredentials:!0},success:a=>{t.setState({selectedCategory:0,connection:{state:2,user:a}}),t.search("",!0)},error:a=>{if(403===a.status||404===a.status)return void t.setState({title:"Not connected to discordservers.com!",loading:!0,selectedCategory:-1,connection:{state:1,user:null}})}})}catch(a){t.setState({title:"Not connected to discordservers.com!",loading:!0,selectedCategory:-1,connection:{state:1,user:null}})}}render(){return BDV2.react.createElement(V2Components.SidebarView,{ref:"sbv",children:this.component})}get component(){return{sidebar:{component:this.sidebar},content:{component:this.content},tools:{component:BDV2.react.createElement(V2Components.Tools,{key:"pt",ref:"tools",onClick:this.close})}}}get sidebar(){return BDV2.react.createElement("div",{className:"sidebar",key:"ps"},BDV2.react.createElement("div",{className:"ui-tab-bar SIDE"},BDV2.react.createElement("div",{className:"ui-tab-bar-header",style:{fontSize:"16px"}},"Public Servers"),BDV2.react.createElement(V2Components.TabBar.Separator,null),this.searchInput,BDV2.react.createElement(V2Components.TabBar.Separator,null),BDV2.react.createElement(V2Components.TabBar.Header,{text:"Categories"}),this.categoryButtons.map((t,a)=>{return BDV2.react.createElement(V2Components.TabBar.Item,{id:a,onClick:this.changeCategory,key:a,text:t,selected:this.state.selectedCategory===a})}),BDV2.react.createElement(V2Components.TabBar.Separator,null),this.footer,this.connection))}get searchInput(){return BDV2.react.createElement("div",{className:"ui-form-item"},BDV2.react.createElement("div",{className:"ui-text-input flex-vertical",style:{width:"172px",marginLeft:"10px"}},BDV2.react.createElement("input",{ref:"searchinput",onKeyDown:this.searchKeyDown,onChange:()=>{},type:"text",className:"input default",placeholder:"Search...",maxLength:"50"})))}searchKeyDown(t){let a=this;if(!(a.state.loading||13!==t.which)){a.setState({loading:!0,title:"Loading...",term:t.target.value});let o=`?term=${t.target.value}`;0!==a.state.selectedCategory&&(o+=`&category=${a.categoryButtons[a.state.selectedCategory]}`),a.search(o,!0)}}get categoryButtons(){return["All","FPS Games","MMO Games","Strategy Games","Sports Games","Puzzle Games","Retro Games","Party Games","Tabletop Games","Sandbox Games","Simulation Games","Community","Language","Programming","Other"]}changeCategory(t){let a=this;if(!a.state.loading)return a.refs.searchinput.value="",a.setState({loading:!0,selectedCategory:t,title:"Loading...",term:null}),0===t?void a.search("",!0):void a.search(`?category=${a.categoryButtons[t]}`,!0)}get content(){let t=this,a=this.SortedGuildStore.guildPositions,o=this.AvatarDefaults.DEFAULT_AVATARS;return 1===t.state.connection.state?t.notConnected:[BDV2.react.createElement("div",{ref:"content",key:"pc",className:"content-column default"},BDV2.react.createElement(V2Components.SettingsTitle,{text:t.state.title}),t.bdServer,t.state.servers.map(d=>{return BDV2.react.createElement(V2Components.ServerCard,{key:d.identifier,server:d,join:t.join,guildList:a,fallback:o[Math.floor(5*Math.random())]})}),t.state.next&&BDV2.react.createElement("button",{type:"button",onClick:()=>{t.state.loading||(t.setState({loading:!0}),t.search(t.state.next,!1))},className:"ui-button filled brand small grow",style:{width:"100%",marginTop:"10px",marginBottom:"10px"}},BDV2.react.createElement("div",{className:"ui-button-contents"},t.state.loading?"Loading":"Load More")),0`),o=[t(bdpluginErrors),t(bdthemeErrors)];a.find(".tab-bar-item").on("click",d=>{d.preventDefault(),a.find(".tab-bar-item").removeClass("selected"),$(d.target).addClass("selected"),a.find(".scroller").empty().append(o[$(d.target).index()])}),a.find(".footer button").on("click",()=>{a.addClass("closing"),setTimeout(()=>{a.remove()},300)}),a.find(".bd-backdrop").on("click",()=>{a.addClass("closing"),setTimeout(()=>{a.remove()},300)}),a.appendTo("#app-mount"),a.find(".tab-bar-item")[0].click()}},Core.prototype.showToast=function(t,a={}){if(bdConfig.deferLoaded){if(!document.querySelector(".bd-toasts")){let h=document.createElement("div");h.classList.add("bd-toasts");let g=document.querySelector(".chat-3bRxxu form, #friends, .noChannel-Z1DQK7, .activityFeed-28jde9");h.style.setProperty("left",g?g.getBoundingClientRect().left+"px":"0px"),h.style.setProperty("width",g?g.offsetWidth+"px":"100%"),h.style.setProperty("bottom",(document.querySelector(".chat-3bRxxu form")?document.querySelector(".chat-3bRxxu form").offsetHeight:80)+"px"),document.querySelector(".app").appendChild(h)}const{type:o="",icon:d=!0,timeout:l=3e3}=a;let u=document.createElement("div");u.classList.add("bd-toast"),o&&u.classList.add("toast-"+o),o&&d&&u.classList.add("icon"),u.innerText=t,document.querySelector(".bd-toasts").appendChild(u),setTimeout(()=>{u.classList.add("closing"),setTimeout(()=>{u.remove(),document.querySelectorAll(".bd-toasts .bd-toast").length||document.querySelector(".bd-toasts").remove()},300)},l)}},window.emotesFfz={},window.emotesBTTV={},window.emotesBTTV2={},window.emotesTwitch={},window.subEmotesTwitch={},window.bdEmotes={TwitchGlobal:{},TwitchSubscriber:{},BTTV:{},FrankerFaceZ:{},BTTV2:{}},window.bdEmoteSettingIDs={TwitchGlobal:"bda-es-7",TwitchSubscriber:"bda-es-7",BTTV:"bda-es-2",FrankerFaceZ:"bda-es-1",BTTV2:"bda-es-2"};function EmoteModule(){}EmoteModule.prototype.init=async function(){this.modifiers=["flip","spin","pulse","spin2","spin3","1spin","2spin","3spin","tr","bl","br","shake","shake2","shake3","flap"],this.overrides=["twitch","bttv","ffz"],this.categories=["TwitchGlobal","TwitchSubscriber","BTTV","BTTV2","FrankerFaceZ"];let t={TwitchGlobal:{url:"https://twitchemotes.com/api_cache/v3/global.json",backup:"https://"+bdConfig.updater.CDN+"/"+bdConfig.repo+"/BetterDiscordApp/"+bdConfig.hash+"/data/emotedata_twitch_global.json",variable:"TwitchGlobal",oldVariable:"emotesTwitch",getEmoteURL:a=>`https://static-cdn.jtvnw.net/emoticons/v1/${a.id}/1.0`,getOldData:(a,o)=>{return{id:a.match(/\/([0-9]+)\//)[1],code:o,emoticon_set:0,description:null}}},TwitchSubscriber:{url:"https://twitchemotes.com/api_cache/v3/subscriber.json",backup:"https://"+bdConfig.updater.CDN+"/"+bdConfig.repo+"/BetterDiscordApp/"+bdConfig.hash+"/data/emotedata_twitch_subscriber.json",variable:"TwitchSubscriber",oldVariable:"subEmotesTwitch",parser:a=>{let o={};for(let d in a){let l=a[d];for(let g,u=0,h=l.emotes.length;u{return a},getEmoteURL:a=>`https://static-cdn.jtvnw.net/emoticons/v1/${a}/1.0`,getOldData:a=>a.match(/\/([0-9]+)\//)[1]},FrankerFaceZ:{url:"https://"+bdConfig.updater.CDN+"/"+bdConfig.repo+"/BetterDiscordApp/"+bdConfig.hash+"/data/emotedata_ffz.json",variable:"FrankerFaceZ",oldVariable:"emotesFfz",getEmoteURL:a=>`https://cdn.frankerfacez.com/emoticon/${a}/1`,getOldData:a=>a.match(/\/([0-9]+)\//)[1]},BTTV:{url:"https://api.betterttv.net/emotes",variable:"BTTV",oldVariable:"emotesBTTV",parser:a=>{let o={};for(let u,d=0,l=a.emotes.length;d`${a}`,getOldData:a=>a},BTTV2:{url:"https://"+bdConfig.updater.CDN+"/"+bdConfig.repo+"/BetterDiscordApp/"+bdConfig.hash+"/data/emotedata_bttv.json",variable:"BTTV2",oldVariable:"emotesBTTV2",getEmoteURL:a=>`https://cdn.betterttv.net/emote/${a}/1x`,getOldData:a=>a.match(/emote\/(.+)\//)[1]}};for(this.loadEmoteData(t),this.getBlacklist();!BDV2.MessageContentComponent;)await new Promise(a=>setTimeout(a,100));this.cancelEmoteRender||(this.cancelEmoteRender=Utils.monkeyPatch(BDV2.MessageContentComponent.prototype,"render",{after:({returnValue:a})=>{const o=a.props.children[1];if(o.props.children){const d=o.props.children[1];if(d&&d.length){for(let u=0;uG.length)){this.modifiers.includes(z)&&settingsCookie["bda-es-8"]||(z=""),this.overrides.includes(V)?z=V:V="";let U=this.categories[A];if("twitch"===V?window.bdEmotes.TwitchGlobal[G]?U="TwitchGlobal":window.bdEmotes.TwitchSubscriber[G]&&(U="TwitchSubscriber"):"bttv"===V?window.bdEmotes.BTTV[G]?U="BTTV":window.bdEmotes.BTTV2[G]&&(U="BTTV2"):"ffz"==V&&window.bdEmotes.FrankerFaceZ[G]&&(U="FrankerFaceZ"),window.bdEmotes[U][G]&&settingsCookie[window.bdEmoteSettingIDs[U]]){const H=d[u].match(new RegExp(`([\\s]|^)${utils.escape(z?G+":"+z:G)}([\\s]|$)`));if(H){const W=d[u].substring(0,H.index+H[1].length),Z=d[u].substring(H.index+H[0].length-H[2].length);d[u]=W;const J=BDV2.react.createElement(BDEmote,{name:G,url:window.bdEmotes[U][G],modifier:z});d.splice(u+1,0,Z),d.splice(u+1,0,J),u+=2}}}}}}const l=d.every(u=>{return"string"==typeof u&&""==u.replace(/\s*/,"")||u.type&&"BDEmote"==u.type.name||u.props&&u.props.children&&u.props.children.props&&u.props.children.props.emojiName});if(l)for(let u of d)"object"==typeof u&&("BDEmote"==u.type.name?u.props.jumboable=!0:u.props&&u.props.children&&u.props.children.props&&u.props.children.props.emojiName&&(u.props.children.props.jumboable=!0))}}}}))},EmoteModule.prototype.clearEmoteData=async function(){let t=require("fs"),o=bdConfig.dataPath+"emote_data.json",d=t.existsSync(o);d&&t.unlinkSync(o),window.bdEmotes={TwitchGlobal:{},TwitchSubscriber:{},BTTV:{},FrankerFaceZ:{},BTTV2:{}}},EmoteModule.prototype.goBack=async function(t){for(let a in t)for(let o in window.bdEmotes[t[a].variable])window[t[a].oldVariable][o]=t[a].getOldData(window.bdEmotes[t[a].variable][o],o)},EmoteModule.prototype.loadEmoteData=async function(t){let a=require("fs"),d=bdConfig.dataPath+"emote_data.json",l=a.existsSync(d);if(l&&!bdConfig.cache.expired){settingsCookie["fork-ps-2"]&&mainCore.showToast("Loading emotes from cache.",{type:"info"}),utils.log("[Emotes] Loading emotes from local cache.");let u=await new Promise(g=>{a.readFile(d,"utf8",(b,f)=>{utils.log("[Emotes] Emotes loaded from cache."),b&&(f={}),g(f)})}),h=Utils.testJSON(u);for(let g in h&&(window.bdEmotes=JSON.parse(u)),t)h=0{a(o,(u,h,g)=>{if(u)return utils.err("[Emotes] Could not download "+t.variable,u),t.backup?(t.url=t.backup,t.backup=null,t.backupParser&&(t.parser=t.backupParser),d(this.downloadEmotes(t))):l({});let b={};try{b=JSON.parse(g)}catch(f){return utils.err("[Emotes] Could not download "+t.variable,u),t.backup?(t.url=t.backup,t.backup=null,t.backupParser&&(t.parser=t.backupParser),d(this.downloadEmotes(t))):l({})}for(let f in"function"==typeof t.parser&&(b=t.parser(b)),b)b[f]=t.getEmoteURL(b[f]);d(b),utils.log("[Emotes] Downloaded: "+t.variable)})})},EmoteModule.prototype.getBlacklist=function(){$.getJSON("https://cdn.rawgit.com/rauenzi/betterDiscordApp/"+_hash+"/data/emotefilter.json",function(t){bemotes=t.blacklist})};var bemotes=[];EmoteModule.prototype.autoCapitalize=function(){$("body").delegate($(".channelTextArea-1LDbYG textarea:first"),"keyup change paste",()=>{if(settingsCookie["bda-es-4"]){var t=$(".channelTextArea-1LDbYG textarea:first").val();if(void 0!=t){var a=t.split(" ").pop();if(3",a+=" ",a+=" ",a+="