From ad86bbb8c8d8a91d6c3100df37a1e36ed7f61863 Mon Sep 17 00:00:00 2001 From: Alexei Stukov Date: Sun, 30 Apr 2017 06:11:32 +0300 Subject: [PATCH] v1.78 --- js/main.min.js | 338 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 336 insertions(+), 2 deletions(-) diff --git a/js/main.min.js b/js/main.min.js index cb911d9c..eb4f257f 100644 --- a/js/main.min.js +++ b/js/main.min.js @@ -1,2 +1,336 @@ -(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 __data={};if(__fs.existsSync(`${__dataPath}localStorage.json`)){try{__data=JSON.parse(__fs.readFileSync(`${__dataPath}localStorage.json`))}catch(err){console.log(err)}}else if(__fs.existsSync("localStorage.json")){try{__data=JSON.parse(__fs.readFileSync("localStorage.json"))}catch(err){console.log(err)}}var __ls=__data;__ls.setItem=function(i,v){__ls[i]=v;this.save()};__ls.getItem=function(i){return __ls[i]||null};__ls.save=function(){__fs.writeFileSync(`${__dataPath}/localStorage.json`,JSON.stringify(this),null,4)};var __proxy=new Proxy(__ls,{set:function(target,name,val,receiver){__ls[name]=val;__ls.save()},get:function(target,name,receiver){return __ls[name]||null}});window.localStorage=__proxy})();window.bdStorage={};window.bdStorage.get=function(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})};window.bdPluginStorage={};window.bdPluginStorage.get=function(pn,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.on("asynchronous-reply",(event,arg)=>{console.log(event);console.log(arg)});var settingsPanel,emoteModule,utils,quickEmoteMenu,opublicServers,voiceMode,pluginModule,themeModule,customCssEditor,dMode;var jsVersion=1.77;var supportedVersion="0.2.81";var mainObserver;var twitchEmoteUrlStart="https://static-cdn.jtvnw.net/emoticons/v1/";var twitchEmoteUrlEnd="/1.0";var ffzEmoteUrlStart="https://cdn.frankerfacez.com/emoticon/";var ffzEmoteUrlEnd="/1";var bttvEmoteUrlStart="https://cdn.betterttv.net/emote/";var bttvEmoteUrlEnd="/1x";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"},"Developer Mode":{id:"bda-gs-8",info:"Developer Mode",implemented:true,hidden:false,cat:"core"},"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",implemented:true,hidden:false,cat:"emote"}};var links={"Jiiks.net":{text:"Jiiks.net",href:"thtp://jiiks.net",target:"_blank"},twitter:{text:"Twitter",href:"http://twitter.com/jiiksi",target:"_blank"},github:{text:"Github",href:"http://github.com/jiiks",target:"_blank"}};var defaultCookie={version:jsVersion,"bda-gs-0":false,"bda-gs-1":true,"bda-gs-2":false,"bda-gs-3":false,"bda-gs-4":false,"bda-gs-5":true,"bda-gs-6":false,"bda-gs-7":false,"bda-gs-8":false,"bda-es-0":true,"bda-es-1":true,"bda-es-2":true,"bda-es-3":false,"bda-es-4":false,"bda-es-5":true,"bda-es-6":true,"bda-es-7":true,"bda-es-8":true,"bda-jd":true,"bda-es-8":true,"bda-dc-0":false,"bda-css-0":false,"bda-css-1":false,"bda-es-9":true};var bdchangelog={changes:{"0a":{title:"1.77 : Local storage proxy",text:"Implemented a local storage proxy for old plugin support. Do not use it for new plugins! use the bdPluginStorage.get and bdPluginStorage.set",img:""},"0b":{title:"1.76 : Alternate Storage",text:"https://gist.github.com/Jiiks/267113ecb1685f39f4dc4646f9380d55",img:""}},fixes:{"0a":{title:"1.77 : Custom css and favourite emote loading",text:"Fixed custom css and favourite emote loading when they are not present",img:""},"0b":{title:"1.76 : Alternate Storage",text:"Both BetterDiscord and plugins now use alternate storage",img:""}}};var settingsCookie={};function Core(){}Core.prototype.init=function(){var self=this;var lVersion=typeof version==="undefined"?bdVersion:version;if(lVersion
Please download the latest version from BetterDiscord.net");return}utils=new Utils;var sock=new BdWSocket;sock.start();utils.getHash();emoteModule=new EmoteModule;quickEmoteMenu=new QuickEmoteMenu;voiceMode=new VoiceMode;dMode=new devMode;emoteModule.init();this.initSettings();this.initObserver();function gwDefer(){console.log((new Date).getTime()+" Defer");if($(".guilds-wrapper .guilds").children().length>0){console.log((new Date).getTime()+" Defer Loaded");var guilds=$(".guilds>li:first-child");var showChannelsButton=$("'+" "+'
'+'
';if(bdchangelog.changes!=null){changeLog+=""+'

'+" New Stuff"+"

"+"
    ";for(var change in bdchangelog.changes){change=bdchangelog.changes[change];changeLog+=""+"
  • "+" "+change.title+""+"
    "+change.text+"
    "+"
  • "}changeLog+="
"}if(bdchangelog.fixes!=null){changeLog+=""+'

'+" Fixed"+"

"+"
    ";for(var fix in bdchangelog.fixes){fix=bdchangelog.fixes[fix];changeLog+=""+"
  • "+" "+fix.title+""+"
    "+fix.text+"
    "+"
  • "}changeLog+="
"}if(bdchangelog.upcoming!=null){changeLog+=""+'

'+" Coming Soon"+"

"+"
    ";for(var upc in bdchangelog.upcoming){upc=bdchangelog.upcoming[upc];changeLog+=""+"
  • "+" "+upc.title+""+"
    "+upc.text+"
    "+"
  • "}changeLog+="
"}changeLog+=""+"
"+"
"+' "+" "+" "+"";return changeLog};Core.prototype.alert=function(title,text){var id="";for(var i=0;i<5;i++)id+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".charAt(Math.floor(Math.random()*"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".length));var bdAlert=' ';$("body").append(bdAlert);utils.addBackdrop(id)};var emotesFfz={};var emotesBTTV={};var emotesTwitch={emotes:{emote:{image_id:0}}};var subEmotesTwitch={};function EmoteModule(){}EmoteModule.prototype.init=function(){};EmoteModule.prototype.getBlacklist=function(){$.getJSON("https://cdn.rawgit.com/Jiiks/betterDiscordApp/"+_hash+"/data/emotefilter.json",function(data){bemotes=data.blacklist})};EmoteModule.prototype.obsCallback=function(mutation){var self=this;for(var i=0;i-1){w=w.replace("[!s]","");parent.data("spoilered",false);parent.addClass("spoiler")}var allowedClasses=["flip","spin","pulse","spin2","spin3","1spin","2spin","3spin","tr","bl","br","shake","shake2","shake3","flap"];var useEmoteClass=false;var emoteClass="";var skipffz=false;var sw=w;if(w.indexOf(":")>-1){var split=w.split(":");if(split[0]!=""&&split[1]!=""){if(allowedClasses.indexOf(split[1])>-1){sw=split[0];emoteClass=settingsCookie["bda-es-8"]?"emote"+split[1]:""}if(split[1]=="bttv"){sw=split[0];skipffz=true}}}if($.inArray(sw,bemotes)==-1){if(typeof emotesTwitch!=="undefind"&&settingsCookie["bda-es-7"]){if(emotesTwitch.emotes.hasOwnProperty(sw)&&sw.length>=4){if(text!=null){contents.splice(i+splice++,0,document.createTextNode(text));text=null}var url=twitchEmoteUrlStart+emotesTwitch.emotes[sw].image_id+twitchEmoteUrlEnd;contents.splice(i+splice++,0,self.createEmoteElement(sw,url,emoteClass));doInject=true;return}}if(typeof subEmotesTwitch!=="undefined"&&settingsCookie["bda-es-7"]){if(subEmotesTwitch.hasOwnProperty(sw)&&sw.length>=4){if(text!=null){contents.splice(i+splice++,0,document.createTextNode(text));text=null}var url=twitchEmoteUrlStart+subEmotesTwitch[sw]+twitchEmoteUrlEnd;contents.splice(i+splice++,0,self.createEmoteElement(sw,url,emoteClass));doInject=true;return}}if(typeof emotesBTTV!=="undefined"&&settingsCookie["bda-es-2"]){if(emotesBTTV.hasOwnProperty(sw)&&sw.length>=4){if(text!=null){contents.splice(i+splice++,0,document.createTextNode(text));text=null}var url=emotesBTTV[sw];contents.splice(i+splice++,0,self.createEmoteElement(sw,url,emoteClass));doInject=true;return}}if(typeof emotesFfz!=="undefined"&&settingsCookie["bda-es-1"]&&(!skipffz||!emotesBTTV2.hasOwnProperty(sw))){if(emotesFfz.hasOwnProperty(sw)&&sw.length>=4){if(text!=null){contents.splice(i+splice++,0,document.createTextNode(text));text=null}var url=ffzEmoteUrlStart+emotesFfz[sw]+ffzEmoteUrlEnd;contents.splice(i+splice++,0,self.createEmoteElement(sw,url,emoteClass));doInject=true;return}}if(typeof emotesBTTV2!=="undefined"&&settingsCookie["bda-es-2"]){if(emotesBTTV2.hasOwnProperty(sw)&&sw.length>=4){if(text!=null){contents.splice(i+splice++,0,document.createTextNode(text));text=null}var url=bttvEmoteUrlStart+emotesBTTV2[sw]+bttvEmoteUrlEnd;if(skipffz&&emotesFfz.hasOwnProperty(sw))sw=sw+":bttv";contents.splice(i+splice++,0,self.createEmoteElement(sw,url,emoteClass));doInject=true;return}}}if(text==null){text=w}else{text+=""+w}if(index===a.length-1){contents.splice(i+splice,0,document.createTextNode(text))}});if(doInject){var oldHeight=parent.outerHeight();parent.html(contents);var scrollPane=$(".scroller.messages").first();scrollPane.scrollTop(scrollPane.scrollTop()+(parent.outerHeight()-oldHeight))}})}inject();if(parent.children().hasClass("edited")){setTimeout(inject,250)}};EmoteModule.prototype.createEmoteElement=function(word,url,mod){var len=Math.round(word.length/4);var name=word.substr(0,len)+"﷙"+word.substr(len,len)+"﷙"+word.substr(len*2,len)+"﷙"+word.substr(len*3);var html=''+name+'';return $.parseHTML(html.replace(new RegExp("﷙","g"),""))[0]};EmoteModule.prototype.autoCapitalize=function(){var self=this;$("body").delegate($(".channel-textarea-inner textarea:first"),"keyup change paste",function(){if(!settingsCookie["bda-es-4"])return;var text=$(".channel-textarea-inner textarea:first").val();if(text==undefined)return;var lastWord=text.split(" ").pop();if(lastWord.length>3){if(lastWord=="danSgame")return;var ret=self.capitalize(lastWord.toLowerCase());if(ret!==null&&ret!==undefined){$(".channel-textarea-inner textarea:first").val(text.replace(lastWord,ret))}}})};EmoteModule.prototype.capitalize=function(value){var res=emotesTwitch.emotes;for(var p in res){if(res.hasOwnProperty(p)&&value==(p+"").toLowerCase()){return p}}};function PublicServers(){}PublicServers.prototype.getPanel=function(){return this.container};PublicServers.prototype.init=function(){this.filtered=["134680912691462144","86004744966914048"];this.bdServer=null;this.loadingServers=false;var self=this;var guilds=$(".guilds>:first-child");guilds.after($("
",{class:"guild",id:"bd-pub-li",css:{height:"20px",display:settingsCookie["bda-gs-1"]==true?"":"none"}}).append($("
",{class:"guild-inner",css:{height:"20px","border-radius":"4px"}}).append($("").append($("
",{css:{"line-height":"20px","font-size":"12px"},text:"public",id:"bd-pub-button"})))));$("#bd-pub-button").on("click",function(){self.show()});var panelBase='

Public Servers

  • All
  • FPS Games
  • MMO Games
  • MOBA Games
  • Strategy Games
  • Sports Games
  • Puzzle Games
  • Retro Games
  • Party Games
  • Tabletop Games
  • Sandbox Games
  • Simulation Games
  • Community
  • Language
  • Programming
  • Other
';this.container=panelBase;if($("#bd-pub-li").length<1){setTimeout(function(){self.init()},250)}};PublicServers.prototype.getPinnedServer=function(){var self=this;var dataset={sort:[{online:"desc"}],size:1,query:{query_string:{default_operator:"AND",query:"BetterDiscord"}}};$.ajax({type:"POST",dataType:"json",url:"https://69ccb59e91f99116aae036ddceae21b3.us-east-1.aws.found.io:9243/_search",crossDomain:true,data:JSON.stringify(dataset),success:function(data){try{var s=data.hits.hits[0]._source;if(s.identifier=="86004744966914048"){self.bdServer=s;self.showPinnedServer()}}catch(err){self.bdServer=null}}})};PublicServers.prototype.hidePinnedServer=function(){$("#pubs-container .scroller-wrap").css({"margin-top":"0",height:"500px"});$(".server-pinned").hide()};PublicServers.prototype.showPinnedServer=function(){$(".server-pinned .server-icon").css("background-image","url("+this.bdServer.icon+")");$(".server-pinned .server-members span").text(this.bdServer.online+"/"+this.bdServer.members+" Members");$(".server-pinned .server-region span").text(this.bdServer.region);$(".server-pinned .server-info button").data("server-invite-code",this.bdServer.invite_code);$("#pubs-container .scroller-wrap").css({"margin-top":"75px",height:"425px"});$(".server-pinned").show()};PublicServers.prototype.show=function(){var self=this;this.hidePinnedServer();$("#pubs-cat-select").text("All");this.selectedCategory="all";$("#pubs-container .scroller-wrap").css({"margin-top":"0",height:"500px"});$(".server-pinned").hide();$(".app").append(this.getPanel());if(this.bdServer==null){this.getPinnedServer()}else{this.showPinnedServer()}self.search(0,true);$("#pubs-searchbtn").off("click").on("click",function(){self.search()});$("#pubs-sterm").off("keyup").on("keyup",function(e){if(e.keyCode==13){self.search(0,true)}});$("#pubs-cat-select").off("click").on("click",function(){$("#pubs-select-dropdown").addClass("open")});$(".pubs-cat-select-li").off("click").on("click",function(){$("#pubs-select-dropdown").removeClass("open");$("#pubs-cat-select").text($(this).text());if(self.selectedCategory!=$(this).data("val")){self.selectedCategory=$(this).data("val");self.search(0,true)}});$("#pubs-container").off("mouseup").on("mouseup",function(){$("#pubs-select-dropdown").removeClass("open")});var self=this;$(document).on("mouseup.bdps",function(e){if(!$("#bd-pub-button").is(e.target)&&!$("#pubs-container").is(e.target)&&$("#pubs-container").has(e.target).length===0){self.hide()}});$("#pubs-scroller").off("scroll.pubs").on("scroll.pubs",function(){if(self.loadingServers)return;var list=$("#pubs-list");if($(this).scrollTop()+550
';html+='
';html+='
';if(source.is_official){html+='Official!'}html+=''+self.escape(source.name)+"";var tags=[];source.tags.forEach(function(tag){tags.push(self.escape(tag.name))});var desc=html+=''+tags.join(", ")+"";html+=''+(source.description==undefined?"No Description":self.escape(source.description))+"";html+="
";html+="
";html+='
';html+=""+source.online+"/"+source.members+" Members";html+="
";html+='
';html+=""+source.region+"";html+="
";html+='
';html+="";html+="
";html+="
";$("#pubs-list").append(html);$("button[data-server-invite-code="+icode+"]").on("click",function(){self.joinServer(icode)})});if(search){$("#pubs-header-title").text("Public Servers - Search Results: "+$("#pubs-list").children().length)}},done:function(){$("#pubs-spinner").hide();$("#pubs-spinner-bottom").hide();$("#pubs-searchbtn").prop("disabled",false);$("#pubs-sterm").prop("disabled",false);self.loadingServers=false},always:function(){$("#pubs-spinner").hide();$("#pubs-spinner-bottom").hide();$("#pubs-searchbtn").prop("disabled",false);$("#pubs-sterm").prop("disabled",false);self.loadingServers=false},error:function(){$("#pubs-spinner").hide();$("#pubs-spinner-bottom").hide();$("#pubs-searchbtn").prop("disabled",false);$("#pubs-sterm").prop("disabled",false);self.loadingServers=false},complete:function(){$("#pubs-spinner").hide();$("#pubs-spinner-bottom").hide();$("#pubs-searchbtn").prop("disabled",false);$("#pubs-sterm").prop("disabled",false);self.loadingServers=false}})};PublicServers.prototype.search=function(start,clear){var sterm=$("#pubs-sterm").val();var dataset={sort:[{online:"desc"}],from:start,size:20,query:{bool:{must:[{query_string:{default_operator:"AND",query:sterm?sterm:"*"}}],must_not:[{terms:{identifier:this.filtered}}]}}};if(this.selectedCategory!="all"){dataset.query.bool.must.push({match_phrase:{categories:this.selectedCategory}})}this.loadServers(dataset,true,clear)};PublicServers.prototype.joinServer=function(code){require("electron").shell.openExternal("https://www.discordservers.com/join/"+code);this.hide()};PublicServers.prototype.joinServerDirect=function(code){$(".guilds-add").click();$(".action.join .btn").click();$(".create-guild-container input").val(code);$(".form.join-server .btn-primary").click();this.hide()};PublicServers.prototype.escape=function(unsafe){if(unsafe===undefined)return"";return unsafe.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")};function QuickEmoteMenu(){}QuickEmoteMenu.prototype.init=function(){$(document).on("mousedown",function(e){if(e.target.id!="rmenu")$("#rmenu").remove()});this.favoriteEmotes={};var fe=bdStorage.get("bdfavemotes");if(fe!==""&&fe!==null){this.favoriteEmotes=JSON.parse(atob(fe))}var qmeHeader="";qmeHeader+='
';qmeHeader+=' ';qmeHeader+=" ";qmeHeader+="
";this.qmeHeader=qmeHeader;var teContainer="";teContainer+='
';teContainer+='
';teContainer+='
';teContainer+='
';for(var emote in emotesTwitch.emotes){if(emotesTwitch.emotes.hasOwnProperty(emote)){var id=emotesTwitch.emotes[emote].image_id;teContainer+='
';teContainer+=' ';teContainer+=" "; -teContainer+="
"}}teContainer+="
";teContainer+="
";teContainer+="
";teContainer+="
";this.teContainer=teContainer;var faContainer="";faContainer+='
';faContainer+='
';faContainer+='
';faContainer+='
';for(var emote in this.favoriteEmotes){var url=this.favoriteEmotes[emote];faContainer+='
';faContainer+=' ";faContainer+=" ";faContainer+="
"}faContainer+="
";faContainer+="
";faContainer+="
";faContainer+="
";this.faContainer=faContainer};QuickEmoteMenu.prototype.favContext=function(e,em){e.stopPropagation();var menu=$("
",{id:"rmenu","data-emoteid":$(em).prop("title"),text:"Remove"});menu.css({top:e.pageY-$("#bda-qem-favourite-container").offset().top,left:e.pageX-$("#bda-qem-favourite-container").offset().left});$(em).parent().append(menu);menu.on("click",function(e){e.preventDefault();e.stopPropagation();$(this).remove();delete quickEmoteMenu.favoriteEmotes[$(this).data("emoteid")];quickEmoteMenu.updateFavorites();return false});return false};QuickEmoteMenu.prototype.switchHandler=function(e){this.switchQem($(e).attr("id"))};QuickEmoteMenu.prototype.switchQem=function(id){var twitch=$("#bda-qem-twitch");var fav=$("#bda-qem-favourite");var emojis=$("#bda-qem-emojis");twitch.removeClass("active");fav.removeClass("active");emojis.removeClass("active");$(".emoji-picker").hide();$("#bda-qem-favourite-container").hide();$("#bda-qem-twitch-container").hide();switch(id){case"bda-qem-twitch":twitch.addClass("active");$("#bda-qem-twitch-container").show();break;case"bda-qem-favourite":fav.addClass("active");$("#bda-qem-favourite-container").show();break;case"bda-qem-emojis":emojis.addClass("active");$(".emoji-picker").show();break}this.lastTab=id;var emoteIcon=$(".emote-icon");emoteIcon.off();emoteIcon.on("click",function(){var emote=$(this).attr("title");var ta=$(".channel-textarea-inner textarea");ta.val(ta.val().slice(-1)==" "?ta.val()+emote:ta.val()+" "+emote)})};QuickEmoteMenu.prototype.obsCallback=function(e){if(!settingsCookie["bda-es-9"]){e.addClass("bda-qme-hidden")}else{e.removeClass("bda-qme-hidden")}if(!settingsCookie["bda-es-0"])return;var self=this;e.prepend(this.qmeHeader);e.append(this.teContainer);e.append(this.faContainer);if(this.lastTab==undefined){this.lastTab="bda-qem-favourite"}this.switchQem(this.lastTab)};QuickEmoteMenu.prototype.favorite=function(name,url){if(!this.favoriteEmotes.hasOwnProperty(name)){this.favoriteEmotes[name]=url}this.updateFavorites()};QuickEmoteMenu.prototype.updateFavorites=function(){var faContainer="";faContainer+='
';faContainer+='
';faContainer+='
';faContainer+='
';for(var emote in this.favoriteEmotes){var url=this.favoriteEmotes[emote];faContainer+='
';faContainer+=' ";faContainer+=" ";faContainer+="
"}faContainer+="
";faContainer+="
";faContainer+="
";faContainer+="
";this.faContainer=faContainer;$("#bda-qem-favourite-container").replaceWith(faContainer);window.bdStorage.set("bdfavemotes",btoa(JSON.stringify(this.favoriteEmotes)))};function CustomCssEditor(){}CustomCssEditor.prototype.init=function(){var self=this;self.hideBackdrop=false;self.editor=CodeMirror.fromTextArea(document.getElementById("bd-custom-css-ta"),{lineNumbers:true,mode:"css",indentUnit:4,theme:"neat"});self.editor.on("change",function(cm){var css=cm.getValue();self.applyCustomCss(css,false,false)});var attachEditor="";attachEditor+='
';attachEditor+='
    ';attachEditor+="
  • ";attachEditor+='
    ';attachEditor+='
    ";attachEditor+=' Live Update';attachEditor+="
    ";attachEditor+="
  • ";attachEditor+="
  • ";attachEditor+='
    ';attachEditor+='
    ";attachEditor+=' TEMPDISABLED';attachEditor+="
    ";attachEditor+="
  • ";attachEditor+="
  • ";attachEditor+='
    ';attachEditor+='
    ";attachEditor+=' Hide Backdrop';attachEditor+="
    ";attachEditor+="
  • ";attachEditor+="
";attachEditor+='
';attachEditor+=' ';attachEditor+=' ';attachEditor+=' ';attachEditor+="
";attachEditor+="
";this.attachEditor=attachEditor;$("#bd-customcss-innerpane").append(attachEditor);$("#bd-customcss-detached-update").on("click",function(){self.applyCustomCss(self.editor.getValue(),true,false);return false});$("#bd-customcss-detached-save").on("click",function(){self.applyCustomCss(self.editor.getValue(),false,true);return false});var detachEditor="";detachEditor+='
';detachEditor+='
';detachEditor+="
";detachEditor+="
";this.detachedEditor=detachEditor};CustomCssEditor.prototype.attach=function(){$("#editor-detached").hide();$("#app-mount").removeClass("bd-detached-editor");$("#bd-customcss-pane").append($("#bd-customcss-innerpane"));$("#bd-customcss-detached-detach").show();$("#bd-customcss-detach-container").remove()};CustomCssEditor.prototype.detach=function(){var self=this;this.attach();$("#editor-detached").show();$("#bd-customcss-detached-detach").hide();$("#app-mount").addClass("bd-detached-editor");$(".app").parent().append(this.detachedEditor);$("#bd-customcss-detach-editor").append($("#bd-customcss-innerpane"))};CustomCssEditor.prototype.applyCustomCss=function(css,forceupdate,forcesave){if($("#customcss").length==0){$("head").append('')}if(forceupdate||settingsCookie["bda-css-0"]){$("#customcss").html(css)}if(forcesave){window.bdStorage.set("bdcustomcss",btoa(css))}};var settingsButton=null;var panel=null;function SettingsPanel(){utils.injectJs("https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.9.0/codemirror.min.js");utils.injectJs("https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.9.0/mode/css/css.min.js");utils.injectJs("https://cdnjs.cloudflare.com/ajax/libs/Sortable/1.4.2/Sortable.min.js")}SettingsPanel.prototype.init=function(){var self=this;self.construct();var body=$("body");if(settingsCookie["bda-es-0"]){$("#twitchcord-button-container").show()}else{$("#twitchcord-button-container").hide()}if(settingsCookie["bda-gs-2"]){body.addClass("bd-minimal")}else{body.removeClass("bd-minimal")}if(settingsCookie["bda-gs-3"]){body.addClass("bd-minimal-chan")}else{body.removeClass("bd-minimal-chan")}if(settingsCookie["bda-gs-4"]){voiceMode.enable()}if(settingsCookie["bda-gs-5"]){$("#app-mount").addClass("bda-dark")}if(settingsCookie["bda-es-6"]){emoteNamePopup=$("
");$(document).on("mouseover",".emote",function(){var x=$(this).offset();var title=$(this).attr("alt");$(emoteNamePopup).find(".tipsy-inner").text(title);$(emoteNamePopup).css("left",x.left-25);$(emoteNamePopup).css("top",x.top-37);$(".app").append($(emoteNamePopup))});$(document).on("mouseleave",".emote",function(){$(".tipsy").remove()})}else{$(document).off("mouseover",".emote")}if(settingsCookie["bda-gs-8"]){dMode.enable()}else{dMode.disable()}};var customCssInitialized=false;var lastTab="";SettingsPanel.prototype.changeTab=function(tab){var self=this;lastTab=tab;var controlGroups=$("#bd-control-groups");$(".bd-tab").removeClass("selected");$(".bd-pane").hide();$("#"+tab).addClass("selected");$("#"+tab.replace("tab","pane")).show();switch(tab){case"bd-settings-tab":$(".bda-slist-top").show();break;case"bd-emotes-tab":$(".bda-slist-top").show();break;case"bd-customcss-tab":$(".bda-slist-top").show();if(!customCssInitialized){customCssEditor.init();customCssInitialized=true}break;case"bd-themes-tab":$(".bda-slist-top:first").hide();break;case"bd-plugins-tab":$(".bda-slist-top:first").hide();break;default:$(".bda-slist-top").show();break}};SettingsPanel.prototype.updateSetting=function(checkbox){var cb=$(checkbox).children().find('input[type="checkbox"]');var enabled=!cb.is(":checked");var id=cb.attr("id");cb.prop("checked",enabled);if(id=="bda-css-2"){$("#app-mount").removeClass("bd-hide-bd");customCssEditor.hideBackdrop=enabled;if(enabled){$("#app-mount").addClass("bd-hide-bd")}}if(id=="bda-gs-8"&&enabled){mainCore.alert("Developer Mode Enabled","Use F8 to break/resume execution
More coming soon")}settingsCookie[id]=enabled;this.updateSettings()};SettingsPanel.prototype.updateSettings=function(){if(settingsCookie["bda-es-0"]){$("#twitchcord-button-container").show()}else{$("#twitchcord-button-container").hide()}if(settingsCookie["bda-gs-2"]){$("body").addClass("bd-minimal")}else{$("body").removeClass("bd-minimal")}if(settingsCookie["bda-gs-3"]){$("body").addClass("bd-minimal-chan")}else{$("body").removeClass("bd-minimal-chan")}if(settingsCookie["bda-gs-1"]){$("#bd-pub-li").show()}else{$("#bd-pub-li").hide()}if(settingsCookie["bda-gs-4"]){voiceMode.enable()}else{voiceMode.disable()}$("#app-mount").removeClass("bda-dark");if(settingsCookie["bda-gs-5"]){$("#app-mount").addClass("bda-dark")}if(settingsCookie["bda-es-6"]){emoteNamePopup=$("
");$(document).on("mouseover",".emote",function(){var x=$(this).offset();var title=$(this).attr("alt");$(emoteNamePopup).find(".tipsy-inner").text(title);$(emoteNamePopup).css("left",x.left-25);$(emoteNamePopup).css("top",x.top-32);$("div[data-reactid='.0.1.1']").append($(emoteNamePopup))});$(document).on("mouseleave",".emote",function(){$(".tipsy").remove()})}else{$(document).off("mouseover",".emote")}if(settingsCookie["bda-gs-8"]){dMode.enable()}else{dMode.disable()}mainCore.saveSettings()};SettingsPanel.prototype.construct=function(){var self=this;panel=$("
",{id:"bd-pane",class:"settings-inner",css:{display:"none"}});var settingsInner='
Core
Emotes
Custom CSS
Plugins
Themes
";settingsInner+=' ";var _ccss=window.bdStorage.get("bdcustomcss");var ccss="";if(_ccss!==null&&_ccss!==""){ccss=atob(_ccss)}customCssEditor.applyCustomCss(ccss,true,false);settingsInner+=' ";settingsInner+='
    ';$.each(bdplugins,function(){var plugin=this["plugin"];var hasSettings=false;if(typeof plugin.getSettingsPanel=="function"){hasSettings=plugin.getSettingsPanel()!=null&&plugin.getSettingsPanel()!=""}settingsInner+='
  • '+plugin.getName()+" v"+plugin.getVersion()+" by "+plugin.getAuthor()+'
    '+plugin.getDescription()+'
  • "});settingsInner+="
";settingsInner+=' ";settingsInner+='
BetterDiscord v'+(typeof version=="undefined"?bdVersion:version)+"(JSv"+jsVersion+') by Jiiks BetterDiscord.net changelog
';function showSettings(){$(".tab-bar-item").removeClass("selected");settingsButton.addClass("selected");$(".form .settings-right .settings-inner").first().hide();panel.show();if(lastTab==""){self.changeTab("bd-settings-tab")}else{self.changeTab(lastTab)}}settingsButton=$("
",{class:"tab-bar-item",text:"BetterDiscord",id:"bd-settings-new",click:showSettings});panel.html(settingsInner);this.panel=panel};SettingsPanel.prototype.inject=function(mutation){if(mutation.type!="childList")return;if(mutation.addedNodes.length<=0)return;if($(mutation.addedNodes[0]).find(".user-settings-modal").length<=0)return;var self=this;this.panel.hide();var tabBar=$(".tab-bar.SIDE").first();$(".tab-bar.SIDE .tab-bar-item").click(function(){$(".form .settings-right .settings-inner").first().show();$("#bd-settings-new").removeClass("selected");self.panel.hide()});tabBar.append(settingsButton);$(".form .settings-right .settings-inner").last().after(self.panel);$("#bd-settings-new").removeClass("selected")};var _hash;function Utils(){}Utils.prototype.getTextArea=function(){return $(".channel-textarea-inner textarea")};Utils.prototype.jqDefer=function(fnc){if(window.jQuery){fnc()}else{setTimeout(function(){this.jqDefer(fnc)},100)}};Utils.prototype.getHash=function(){$.getJSON("https://api.github.com/repos/Jiiks/BetterDiscordApp/commits/master",function(data){_hash=data.sha;emoteModule.getBlacklist()})};Utils.prototype.loadHtml=function(html,callback){var container=$("
",{class:"bd-container"}).appendTo("body");html="//cdn.rawgit.com/Jiiks/BetterDiscordApp/"+_hash+"/html/"+html+".html";container.load(html,callback())};Utils.prototype.injectJs=function(uri){$("