From f17545e4b0a14fd227871262779b4821bf3982d8 Mon Sep 17 00:00:00 2001 From: Jiiks Date: Mon, 26 Oct 2015 07:27:55 +0200 Subject: [PATCH] v0.1.5 core + v1.3 js release Notes on releases page https://github.com/Jiiks/BetterDiscordApp/releases/ --- README.md | 11 +- js/core.js | 83 ++++++--- js/emotemodule.js | 82 +++++---- js/main.js | 408 ++++++++++++++++++++++++++++++++----------- js/main.min.js | 2 +- js/publicservers.js | 139 +++++++++++++-- js/quickemotemenu.js | 42 +++-- js/settingspanel.js | 45 +++-- js/utils.js | 4 +- js/voicemode.js | 28 +++ lib/BetterDiscord.js | 2 +- updater.json | 2 +- 12 files changed, 630 insertions(+), 218 deletions(-) create mode 100644 js/voicemode.js diff --git a/README.md b/README.md index 8ff7789..c1c7b9d 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ Better Discord App enhances Discord desktop app with new features. ## Features **Emotes:** -BetterDiscord adds all [Twitch.tv](http://twitch.tv), some [FrankerFaceZ](http://frankerfacez.com)(~240 suggested emotes) and [BetterTTV](http://betterttv.net)(soon) emotes to Discord. +BetterDiscord adds all [Twitch.tv](http://twitch.tv), some [FrankerFaceZ](http://frankerfacez.com)(~240 suggested emotes) and [BetterTTV](http://betterttv.net) emotes to Discord. **Quick Emote Menu:** Quick Emote Menu adds a menu for quickly adding twitch emotes. @@ -38,6 +38,9 @@ Automatically completes/suggests emotes.(soon) **Minimal Mode:** Minimal mode makes elements smaller and hides certain elements. +**Voice Chat Mode:** +Only display voice channels + **Public Servers:** A menu for displaying public servers.(soon) [Serverlist](https://github.com/Jiiks/BetterDiscordApp/blob/master/serverlist.json) @@ -47,6 +50,10 @@ Save chatlogs locally.(soon) ## Adding you server to public servers Edit the [Serverlist](https://github.com/Jiiks/BetterDiscordApp/blob/master/serverlist.json) and submit a pull request. +## BetterDiscord Uses the following API's +* https://twitchemotes.com/apidocs for Twitch emotes +* https://api.betterttv.net/emotes for [BetterTTV](https://nightdev.com/betterttv/) emotes + ## License The MIT License (MIT) @@ -69,4 +76,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. +THE SOFTWARE. \ No newline at end of file diff --git a/js/core.js b/js/core.js index 68a3ffc..5baac4a 100644 --- a/js/core.js +++ b/js/core.js @@ -1,13 +1,22 @@ /* BetterDiscordApp Core JavaScript - * Version: 1.4 + * Version: 1.5 * Author: Jiiks | http://jiiks.net * Date: 27/08/2015 - 16:36 - * Last Update: 31/08/2015 - 16:17 + * Last Update: 24/010/2015 - 17:27 * https://github.com/Jiiks/BetterDiscordApp */ -var settingsPanel, emoteModule, utils, quickEmoteMenu; -var jsVersion = 1.2; +/* + * =Changelog= + * -v1.5 + * --Synchronized loading + * --jsv 1.3 + * --Voice mode + */ + +var settingsPanel, emoteModule, utils, quickEmoteMenu, opublicServers, voiceMode; +var jsVersion = 1.3; +var supportedVersion = "0.1.5"; var mainObserver; @@ -18,29 +27,29 @@ var ffzEmoteUrlEnd = "/1"; var bttvEmoteUrlStart = ""; var bttvEmoteUrlEnd = ""; - +var mainCore; var settings = { "Save logs locally": { "id": "bda-gs-0", "info": "Saves chat logs locally", "implemented":false }, - "Public Servers": { "id": "bda-gs-1", "info": "Display public servers", "implemented":false}, + "Public Servers": { "id": "bda-gs-1", "info": "BETA : Display public servers button", "implemented":true}, "Minimal Mode": { "id": "bda-gs-2", "info": "Hide elements and reduce the size of elements.", "implemented":true}, + "Voice Mode": { "id": "bda-gs-4", "info": "Only show voice chat", "implemented":true}, "Hide Channels": { "id": "bda-gs-3", "info": "Hide channels in minimal mode", "implemented":true}, "Quick Emote Menu": { "id": "bda-es-0", "info": "Show quick emote menu for adding emotes", "implemented":true }, "FrankerFaceZ Emotes": { "id": "bda-es-1", "info": "Show FrankerFaceZ Emotes", "implemented":true }, - "BetterTTV Emotes": { "id": "bda-es-2", "info": "Show BetterTTV Emotes", "implemented":false }, + "BetterTTV Emotes": { "id": "bda-es-2", "info": "Show BetterTTV Emotes", "implemented":true }, "Emote Autocomplete": { "id": "bda-es-3", "info": "Autocomplete emote commands", "implemented":false }, "Emote Auto Capitalization": { "id": "bda-es-4", "info": "Autocapitalize emote commands", "implemented":true }, "Override Default Emotes": { "id": "bda-es-5", "info": "Override default emotes", "implemented":false } }; - - 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-es-0":true, "bda-es-1":false, "bda-es-2":false, @@ -51,15 +60,19 @@ var defaultCookie = { var settingsCookie = {}; -function Core() { - -} - +function Core() {} Core.prototype.init = function() { + + if(version < supportedVersion) { + alert("BetterDiscord v" + version + "(your version)" + " is not supported by the latest js("+jsVersion+"). Please download the latest version from GitHub."); + return; + } + utils = new Utils(); emoteModule = new EmoteModule(); quickEmoteMenu = new QuickEmoteMenu(); + voiceMode = new VoiceMode(); emoteModule.init(); emoteModule.autoCapitalize(); @@ -67,24 +80,37 @@ Core.prototype.init = function() { this.initSettings(); this.initObserver(); - function waitForGuildsWrapper() { - + //Incase were too fast + function gwDefer() { + console.log(new Date().getTime() + " Defer"); if($(".guilds-wrapper").size() > 0) { - $(".guilds li:first-child").after($("
  • ", {id:"tc-settings-li"}).append($("
    ", { class: "guild-inner" }).append($("").append($("
    ", { class: "avatar-small", id: "tc-settings-button" }))))); + console.log(new Date().getTime() + " Defer Loaded"); + var guilds = $(".guilds li:first-child"); + + guilds.after($("
  • ", { 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" }))))); + guilds.after($("
  • ", {id:"tc-settings-li"}).append($("
    ", { class: "guild-inner" }).append($("").append($("
    ", { class: "avatar-small", id: "tc-settings-button" }))))); settingsPanel = new SettingsPanel(); settingsPanel.init(); + + opublicServers = new PublicServers(); + opublicServers.init(); + quickEmoteMenu.init(false); - $("#tc-settings-button").on("click", function(e) { settingsPanel.show(); }); + $("#tc-settings-button").on("click", function() { settingsPanel.show(); }); + $("#bd-pub-button").on("click", function() { opublicServers.show(); }); + } else { - setTimeout(function() { - waitForGuildsWrapper(); - }, 100); + setTimeout(gwDefer(), 100); } } - waitForGuildsWrapper(); -} + + + $(document).ready(function() { + setTimeout(gwDefer, 500); + }); +}; Core.prototype.initSettings = function() { if($.cookie("better-discord") == undefined) { @@ -95,22 +121,20 @@ Core.prototype.initSettings = function() { for(var setting in defaultCookie) { if(settingsCookie[setting] == undefined) { - settingsCookie = defaultCookie; + settingsCookie[setting] = defaultCookie[setting]; this.saveSettings(); - alert("BetterDiscord settings reset due to update/error"); - break; } } } -} +}; Core.prototype.saveSettings = function() { $.cookie("better-discord", JSON.stringify(settingsCookie), { expires: 365, path: '/' }); -} +}; Core.prototype.loadSettings = function() { settingsCookie = JSON.parse($.cookie("better-discord")); -} +}; Core.prototype.initObserver = function() { @@ -126,5 +150,6 @@ Core.prototype.initObserver = function() { }); }); + //noinspection JSCheckFunctionSignatures mainObserver.observe(document, { childList: true, subtree: true }); -} +}; \ No newline at end of file diff --git a/js/emotemodule.js b/js/emotemodule.js index c541c6e..b5d7c28 100644 --- a/js/emotemodule.js +++ b/js/emotemodule.js @@ -1,5 +1,5 @@ /* BetterDiscordApp EmoteModule JavaScript - * Version: 1.4 + * Version: 1.5 * Author: Jiiks | http://jiiks.net * Date: 26/08/2015 - 15:29 * Last Update: 14/10/2015 - 09:48 @@ -7,21 +7,23 @@ * Note: Due to conflicts autocapitalize only supports global emotes */ -var autoCapitalize = true; -var ffzEnabled = false; -var bttvEnabled = false; +/* + * =Changelog= + * -v1.5 + * --Twitchemotes.com api + */ + var emotesFfz = {}; var emotesBTTV = {}; -var emotesTwitch = {":(":2, ":)": 1, ":/":10, ":D":3, ":o":8, ":p":12, ":z":5, ";)":11, ";p":13, "<3":9, ">(":4, "B)":7, "o_o":6, "R)":14,"4Head":354,"ANELE":3792,"ArgieB8":51838,"ArsonNoSexy":50,"AsianGlow":74,"AtGL":9809,"AthenaPMS":32035,"AtIvy":9800,"AtWW":9801,"BabyRage":22639,"BatChest":1905,"BCWarrior":30,"BibleThump":86,"BigBrother":1904,"BionicBunion":24,"BlargNaut":38,"BloodTrail":69,"BORT":243,"BrainSlug":881,"BrokeBack":4057,"BuddhaBar":27602,"CoolCat":58127,"CorgiDerp":49106,"CougarHunt":21,"DAESuppy":973,"DansGame":33,"DatHass":20225,"DatSheffy":170,"DBstyle":73,"deExcite":46249,"deIlluminati":46248,"DendiFace":58135,"DogFace":1903,"DOOMGuy":54089,"EagleEye":20,"EleGiggle":4339,"EvilFetus":72,"FailFish":360,"FPSMarksman":42,"FrankerZ":65,"FreakinStinkin":39,"FUNgineer":244,"FunRun":48,"FuzzyOtterOO":168,"GasJoker":9802,"GingerPower":32,"GrammarKing":3632,"HassanChop":68,"HeyGuys":30259,"HotPokket":357,"HumbleLife":46881,"ItsBoshyTime":169,"Jebaited":90,"JKanStyle":15,"JonCarnage":26,"KAPOW":9803,"Kappa":25,"KappaPride":55338,"Keepo":1902,"KevinTurtle":40,"Kippa":1901,"Kreygasm":41,"KZskull":5253,"Mau5":30134,"mcaT":35063,"MechaSupes":9804,"MrDestructoid":28,"MVGame":29,"NightBat":9805,"NinjaTroll":45,"NoNoSpot":44,"NotATK":34875,"NotLikeThis":58765,"OMGScoots":91,"OneHand":66,"OpieOP":356,"OptimizePrime":16,"OSbeaver":47005,"OSbury":47420,"OSdeo":47007,"OSfrog":47008,"OSkomodo":47010,"OSrob":47302,"OSsloth":47011,"panicBasket":22998,"PanicVis":3668,"PazPazowitz":19,"PeoplesChamp":3412,"PermaSmug":27509,"PicoMause":27,"PipeHype":4240,"PJHarley":9808,"PJSalt":36,"PMSTwin":92,"PogChamp":88,"Poooound":358,"PraiseIt":38586,"PRChase":28328,"PunchTrees":47,"PuppeyFace":58136,"RaccAttack":27679,"RalpherZ":1900,"RedCoat":22,"ResidentSleeper":245,"RitzMitz":4338,"RuleFive":361,"ShadyLulu":52492,"Shazam":9807,"shazamicon":9806,"ShazBotstix":87,"ShibeZ":27903,"SMOrc":52,"SMSkull":51,"SoBayed":1906,"SoonerLater":355,"SriHead":14706,"SSSsss":46,"StoneLightning":17,"StrawBeary":37,"SuperVinlin":31,"SwiftRage":34,"tbBaconBiscuit":44499,"tbChickenBiscuit":56879,"tbQuesarito":56883,"tbSausageBiscuit":56881,"tbSpicy":56882,"tbSriracha":56880,"TF2John":1899,"TheKing":50901,"TheRinger":18,"TheTarFu":70,"TheThing":7427,"ThunBeast":1898,"TinyFace":67,"TooSpicy":359,"TriHard":171,"TTours":38436,"UleetBackup":49,"UncleNox":3666,"UnSane":71,"VaultBoy":54090,"Volcania":166,"WholeWheat":1896,"WinWaker":167,"WTRuck":1897,"WutFace":28087,"YouWHY":4337}; +var emotesTwitch = { "emotes": { "emote": { "image_id": 0 } } }; //for ide +var subEmotesTwitch = {}; + +//TODO Use emotesTwitch for autocap var twitchAc = {"4head":"4Head","anele":"ANELE","argieb8":"ArgieB8","arsonnosexy":"ArsonNoSexy","asianglow":"AsianGlow","atgl":"AtGL","athenapms":"AthenaPMS","ativy":"AtIvy","atww":"AtWW","babyrage":"BabyRage","batchest":"BatChest","bcwarrior":"BCWarrior","biblethump":"BibleThump","bigbrother":"BigBrother","bionicbunion":"BionicBunion","blargnaut":"BlargNaut","bloodtrail":"BloodTrail","bort":"BORT","brainslug":"BrainSlug","brokeback":"BrokeBack","buddhabar":"BuddhaBar","coolcat":"CoolCat","corgiderp":"CorgiDerp","cougarhunt":"CougarHunt","daesuppy":"DAESuppy","dansgame":"DansGame","dathass":"DatHass","datsheffy":"DatSheffy","dbstyle":"DBstyle","deexcite":"deExcite","deilluminati":"deIlluminati","dendiface":"DendiFace","dogface":"DogFace","doomguy":"DOOMGuy","eagleeye":"EagleEye","elegiggle":"EleGiggle","evilfetus":"EvilFetus","failfish":"FailFish","fpsmarksman":"FPSMarksman","frankerz":"FrankerZ","freakinstinkin":"FreakinStinkin","fungineer":"FUNgineer","funrun":"FunRun","fuzzyotteroo":"FuzzyOtterOO","gasjoker":"GasJoker","gingerpower":"GingerPower","grammarking":"GrammarKing","hassanchop":"HassanChop","heyguys":"HeyGuys","hotpokket":"HotPokket","humblelife":"HumbleLife","itsboshytime":"ItsBoshyTime","jebaited":"Jebaited","jkanstyle":"JKanStyle","joncarnage":"JonCarnage","kapow":"KAPOW","kappa":"Kappa","kappapride":"KappaPride","keepo":"Keepo","kevinturtle":"KevinTurtle","kippa":"Kippa","kreygasm":"Kreygasm","kzskull":"KZskull","mau5":"Mau5","mcat":"mcaT","mechasupes":"MechaSupes","mrdestructoid":"MrDestructoid","mvgame":"MVGame","nightbat":"NightBat","ninjatroll":"NinjaTroll","nonospot":"NoNoSpot","notatk":"NotATK","notlikethis":"NotLikeThis","omgscoots":"OMGScoots","onehand":"OneHand","opieop":"OpieOP","optimizeprime":"OptimizePrime","osbeaver":"OSbeaver","osbury":"OSbury","osdeo":"OSdeo","osfrog":"OSfrog","oskomodo":"OSkomodo","osrob":"OSrob","ossloth":"OSsloth","panicbasket":"panicBasket","panicvis":"PanicVis","pazpazowitz":"PazPazowitz","peopleschamp":"PeoplesChamp","permasmug":"PermaSmug","picomause":"PicoMause","pipehype":"PipeHype","pjharley":"PJHarley","pjsalt":"PJSalt","pmstwin":"PMSTwin","pogchamp":"PogChamp","poooound":"Poooound","praiseit":"PraiseIt","prchase":"PRChase","punchtrees":"PunchTrees","puppeyface":"PuppeyFace","raccattack":"RaccAttack","ralpherz":"RalpherZ","redcoat":"RedCoat","residentsleeper":"ResidentSleeper","ritzmitz":"RitzMitz","rulefive":"RuleFive","shadylulu":"ShadyLulu","shazam":"Shazam","shazamicon":"shazamicon","shazbotstix":"ShazBotstix","shibez":"ShibeZ","smorc":"SMOrc","smskull":"SMSkull","sobayed":"SoBayed","soonerlater":"SoonerLater","srihead":"SriHead","ssssss":"SSSsss","stonelightning":"StoneLightning","strawbeary":"StrawBeary","supervinlin":"SuperVinlin","swiftrage":"SwiftRage","tbbaconbiscuit":"tbBaconBiscuit","tbchickenbiscuit":"tbChickenBiscuit","tbquesarito":"tbQuesarito","tbsausagebiscuit":"tbSausageBiscuit","tbspicy":"tbSpicy","tbsriracha":"tbSriracha","tf2john":"TF2John","theking":"TheKing","theringer":"TheRinger","thetarfu":"TheTarFu","thething":"TheThing","thunbeast":"ThunBeast","tinyface":"TinyFace","toospicy":"TooSpicy","trihard":"TriHard","ttours":"TTours","uleetbackup":"UleetBackup","unclenox":"UncleNox","unsane":"UnSane","vaultboy":"VaultBoy","volcania":"Volcania","wholewheat":"WholeWheat","winwaker":"WinWaker","wtruck":"WTRuck","wutface":"WutFace","youwhy":"YouWHY"}; -function EmoteModule() { +function EmoteModule() {} -} - -EmoteModule.prototype.init = function() { - -} +EmoteModule.prototype.init = function() {}; EmoteModule.prototype.obsCallback = function(mutation) { var self = this; @@ -30,11 +32,13 @@ EmoteModule.prototype.obsCallback = function(mutation) { if(next) { var nodes = self.getNodes(next); for(var node in nodes) { - self.injectEmote(nodes[node]); + if(nodes.hasOwnProperty(node)) { + self.injectEmote(nodes[node]); + } } } } -} +}; EmoteModule.prototype.getNodes = function(node) { var next; @@ -47,9 +51,9 @@ EmoteModule.prototype.getNodes = function(node) { } return nodes; -} - +}; +//TODO Functional titles EmoteModule.prototype.injectEmote = function(node) { if(typeof emotesTwitch === 'undefined') return; @@ -65,34 +69,50 @@ EmoteModule.prototype.injectEmote = function(node) { if(!words) return; words.some(function(word) { - if (emotesTwitch.hasOwnProperty(word)) { - parentInnerHTML = parentInnerHTML.replace(word, "<\/img>"); - } else if(typeof emotesFfz !== 'undefined' && settingsCookie["bda-es-1"]) { + + if(emotesTwitch.emotes.hasOwnProperty(word)) { + parentInnerHTML = parentInnerHTML.replace(word, "<\/img>"); + return; + } + + if(typeof emotesFfz !== 'undefined' && settingsCookie["bda-es-1"]) { if(emotesFfz.hasOwnProperty(word)) { - parentInnerHTML = parentInnerHTML.replace(word, "<\/img>"); - } else if(typeof emotesBTTV !== 'undefined' && settingsCookie["bda-es-2"]) { - if(emotesBTTV.hasOwnProperty(word)) { - parentInnerHTML = parentInnerHTML.replace(word, "<\/img>"); - } + parentInnerHTML = parentInnerHTML.replace(word, "<\/img>"); + return; } } + + if(typeof emotesBTTV !== 'undefined' && settingsCookie["bda-es-2"]) { + if(emotesBTTV.hasOwnProperty(word)) { + parentInnerHTML = parentInnerHTML.replace(word, "<\/img>"); + return; + } + } + + if (subEmotesTwitch.hasOwnProperty(word)) { + parentInnerHTML = parentInnerHTML.replace(word, "<\/img>"); + } }); + if(parent.parentElement == null) return; + var oldHeight = parent.parentElement.offsetHeight; parent.innerHTML = parentInnerHTML; var newHeight = parent.parentElement.offsetHeight; - var scrollPane = $($(".scroller.messages")[0]) + //Scrollfix + var scrollPane = $(".scroller.messages").first(); scrollPane.scrollTop(scrollPane.scrollTop() + (newHeight - oldHeight)); -} +}; EmoteModule.prototype.autoCapitalize = function() { var self = this; + var textArea = $(".channel-textarea-inner textarea"); - $('body').delegate($(".channel-textarea-inner textarea"), 'keyup change paste', function() { + $('body').delegate(textArea, 'keyup change paste', function() { if(!settingsCookie["bda-es-4"]) return; - var text = $(".channel-textarea-inner textarea").val(); + var text = textArea.val(); if(text == undefined) return; @@ -100,17 +120,15 @@ EmoteModule.prototype.autoCapitalize = function() { if(lastWord.length > 3) { var ret = self.capitalize(lastWord.toLowerCase()); if(ret != null) { - $(".channel-textarea-inner textarea").val(text.replace(lastWord, ret)); + textArea.val(text.replace(lastWord, ret)); } } - }); - -} +}; EmoteModule.prototype.capitalize = function(value) { if(twitchAc.hasOwnProperty(value)) { return twitchAc[value]; } return null; -} +}; \ No newline at end of file diff --git a/js/main.js b/js/main.js index bfe0a4a..0ec5284 100644 --- a/js/main.js +++ b/js/main.js @@ -1,13 +1,22 @@ /* BetterDiscordApp Core JavaScript - * Version: 1.4 + * Version: 1.5 * Author: Jiiks | http://jiiks.net * Date: 27/08/2015 - 16:36 - * Last Update: 31/08/2015 - 16:17 + * Last Update: 24/010/2015 - 17:27 * https://github.com/Jiiks/BetterDiscordApp */ -var settingsPanel, emoteModule, utils, quickEmoteMenu; -var jsVersion = 1.2; +/* + * =Changelog= + * -v1.5 + * --Synchronized loading + * --jsv 1.3 + * --Voice mode + */ + +var settingsPanel, emoteModule, utils, quickEmoteMenu, opublicServers, voiceMode; +var jsVersion = 1.3; +var supportedVersion = "0.1.5"; var mainObserver; @@ -18,29 +27,29 @@ var ffzEmoteUrlEnd = "/1"; var bttvEmoteUrlStart = ""; var bttvEmoteUrlEnd = ""; - +var mainCore; var settings = { "Save logs locally": { "id": "bda-gs-0", "info": "Saves chat logs locally", "implemented":false }, - "Public Servers": { "id": "bda-gs-1", "info": "Display public servers", "implemented":false}, + "Public Servers": { "id": "bda-gs-1", "info": "BETA : Display public servers button", "implemented":true}, "Minimal Mode": { "id": "bda-gs-2", "info": "Hide elements and reduce the size of elements.", "implemented":true}, + "Voice Mode": { "id": "bda-gs-4", "info": "Only show voice chat", "implemented":true}, "Hide Channels": { "id": "bda-gs-3", "info": "Hide channels in minimal mode", "implemented":true}, "Quick Emote Menu": { "id": "bda-es-0", "info": "Show quick emote menu for adding emotes", "implemented":true }, "FrankerFaceZ Emotes": { "id": "bda-es-1", "info": "Show FrankerFaceZ Emotes", "implemented":true }, - "BetterTTV Emotes": { "id": "bda-es-2", "info": "Show BetterTTV Emotes", "implemented":false }, + "BetterTTV Emotes": { "id": "bda-es-2", "info": "Show BetterTTV Emotes", "implemented":true }, "Emote Autocomplete": { "id": "bda-es-3", "info": "Autocomplete emote commands", "implemented":false }, "Emote Auto Capitalization": { "id": "bda-es-4", "info": "Autocapitalize emote commands", "implemented":true }, "Override Default Emotes": { "id": "bda-es-5", "info": "Override default emotes", "implemented":false } }; - - 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-es-0":true, "bda-es-1":false, "bda-es-2":false, @@ -51,41 +60,57 @@ var defaultCookie = { var settingsCookie = {}; -function Core() { - -} - +function Core() {} Core.prototype.init = function() { + + if(version < supportedVersion) { + alert("BetterDiscord v" + version + "(your version)" + " is not supported by the latest js("+jsVersion+"). Please download the latest version from GitHub."); + return; + } + utils = new Utils(); emoteModule = new EmoteModule(); quickEmoteMenu = new QuickEmoteMenu(); + voiceMode = new VoiceMode(); emoteModule.init(); - emoteModule.autoCapitalize(); this.initSettings(); this.initObserver(); - //Temp - setTimeout(function() { - if($(".guilds-wrapper").size() > 0) { - $(".guilds li:first-child").after($("
  • ", {id:"tc-settings-li"}).append($("
    ", { class: "guild-inner" }).append($("").append($("
    ", { class: "avatar-small", id: "tc-settings-button" }))))); + //Incase were too fast + 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"); + + guilds.after($("
  • ", { 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" }))))); + guilds.after($("
  • ", {id:"tc-settings-li"}).append($("
    ", { class: "guild-inner" }).append($("").append($("
    ", { class: "avatar-small", id: "tc-settings-button" }))))); settingsPanel = new SettingsPanel(); settingsPanel.init(); + quickEmoteMenu.init(false); - $("#tc-settings-button").on("click", function(e) { settingsPanel.show(); }); + $("#tc-settings-button").on("click", function() { settingsPanel.show(); }); + $("#bd-pub-button").on("click", function() { opublicServers.show(); }); + + opublicServers = new PublicServers(); + opublicServers.init(); + + emoteModule.autoCapitalize(); } else { - setTimeout(function() { - waitForGuildsWrapper(); - }, 100); + setTimeout(gwDefer, 100); } - }, 3000); + } -} + $(document).ready(function() { + setTimeout(gwDefer, 1000); + }); +}; Core.prototype.initSettings = function() { if($.cookie("better-discord") == undefined) { @@ -96,22 +121,20 @@ Core.prototype.initSettings = function() { for(var setting in defaultCookie) { if(settingsCookie[setting] == undefined) { - settingsCookie = defaultCookie; + settingsCookie[setting] = defaultCookie[setting]; this.saveSettings(); - alert("BetterDiscord settings reset due to update/error"); - break; } } } -} +}; Core.prototype.saveSettings = function() { $.cookie("better-discord", JSON.stringify(settingsCookie), { expires: 365, path: '/' }); -} +}; Core.prototype.loadSettings = function() { settingsCookie = JSON.parse($.cookie("better-discord")); -} +}; Core.prototype.initObserver = function() { @@ -127,11 +150,12 @@ Core.prototype.initObserver = function() { }); }); + //noinspection JSCheckFunctionSignatures mainObserver.observe(document, { childList: true, subtree: true }); -} +}; /* BetterDiscordApp EmoteModule JavaScript - * Version: 1.4 + * Version: 1.5 * Author: Jiiks | http://jiiks.net * Date: 26/08/2015 - 15:29 * Last Update: 14/10/2015 - 09:48 @@ -139,21 +163,23 @@ Core.prototype.initObserver = function() { * Note: Due to conflicts autocapitalize only supports global emotes */ -var autoCapitalize = true; -var ffzEnabled = false; -var bttvEnabled = false; +/* + * =Changelog= + * -v1.5 + * --Twitchemotes.com api + */ + var emotesFfz = {}; var emotesBTTV = {}; -var emotesTwitch = {":(":2, ":)": 1, ":/":10, ":D":3, ":o":8, ":p":12, ":z":5, ";)":11, ";p":13, "<3":9, ">(":4, "B)":7, "o_o":6, "R)":14,"4Head":354,"ANELE":3792,"ArgieB8":51838,"ArsonNoSexy":50,"AsianGlow":74,"AtGL":9809,"AthenaPMS":32035,"AtIvy":9800,"AtWW":9801,"BabyRage":22639,"BatChest":1905,"BCWarrior":30,"BibleThump":86,"BigBrother":1904,"BionicBunion":24,"BlargNaut":38,"BloodTrail":69,"BORT":243,"BrainSlug":881,"BrokeBack":4057,"BuddhaBar":27602,"CoolCat":58127,"CorgiDerp":49106,"CougarHunt":21,"DAESuppy":973,"DansGame":33,"DatHass":20225,"DatSheffy":170,"DBstyle":73,"deExcite":46249,"deIlluminati":46248,"DendiFace":58135,"DogFace":1903,"DOOMGuy":54089,"EagleEye":20,"EleGiggle":4339,"EvilFetus":72,"FailFish":360,"FPSMarksman":42,"FrankerZ":65,"FreakinStinkin":39,"FUNgineer":244,"FunRun":48,"FuzzyOtterOO":168,"GasJoker":9802,"GingerPower":32,"GrammarKing":3632,"HassanChop":68,"HeyGuys":30259,"HotPokket":357,"HumbleLife":46881,"ItsBoshyTime":169,"Jebaited":90,"JKanStyle":15,"JonCarnage":26,"KAPOW":9803,"Kappa":25,"KappaPride":55338,"Keepo":1902,"KevinTurtle":40,"Kippa":1901,"Kreygasm":41,"KZskull":5253,"Mau5":30134,"mcaT":35063,"MechaSupes":9804,"MrDestructoid":28,"MVGame":29,"NightBat":9805,"NinjaTroll":45,"NoNoSpot":44,"NotATK":34875,"NotLikeThis":58765,"OMGScoots":91,"OneHand":66,"OpieOP":356,"OptimizePrime":16,"OSbeaver":47005,"OSbury":47420,"OSdeo":47007,"OSfrog":47008,"OSkomodo":47010,"OSrob":47302,"OSsloth":47011,"panicBasket":22998,"PanicVis":3668,"PazPazowitz":19,"PeoplesChamp":3412,"PermaSmug":27509,"PicoMause":27,"PipeHype":4240,"PJHarley":9808,"PJSalt":36,"PMSTwin":92,"PogChamp":88,"Poooound":358,"PraiseIt":38586,"PRChase":28328,"PunchTrees":47,"PuppeyFace":58136,"RaccAttack":27679,"RalpherZ":1900,"RedCoat":22,"ResidentSleeper":245,"RitzMitz":4338,"RuleFive":361,"ShadyLulu":52492,"Shazam":9807,"shazamicon":9806,"ShazBotstix":87,"ShibeZ":27903,"SMOrc":52,"SMSkull":51,"SoBayed":1906,"SoonerLater":355,"SriHead":14706,"SSSsss":46,"StoneLightning":17,"StrawBeary":37,"SuperVinlin":31,"SwiftRage":34,"tbBaconBiscuit":44499,"tbChickenBiscuit":56879,"tbQuesarito":56883,"tbSausageBiscuit":56881,"tbSpicy":56882,"tbSriracha":56880,"TF2John":1899,"TheKing":50901,"TheRinger":18,"TheTarFu":70,"TheThing":7427,"ThunBeast":1898,"TinyFace":67,"TooSpicy":359,"TriHard":171,"TTours":38436,"UleetBackup":49,"UncleNox":3666,"UnSane":71,"VaultBoy":54090,"Volcania":166,"WholeWheat":1896,"WinWaker":167,"WTRuck":1897,"WutFace":28087,"YouWHY":4337}; +var emotesTwitch = { "emotes": { "emote": { "image_id": 0 } } }; //for ide +var subEmotesTwitch = {}; + +//TODO Use emotesTwitch for autocap var twitchAc = {"4head":"4Head","anele":"ANELE","argieb8":"ArgieB8","arsonnosexy":"ArsonNoSexy","asianglow":"AsianGlow","atgl":"AtGL","athenapms":"AthenaPMS","ativy":"AtIvy","atww":"AtWW","babyrage":"BabyRage","batchest":"BatChest","bcwarrior":"BCWarrior","biblethump":"BibleThump","bigbrother":"BigBrother","bionicbunion":"BionicBunion","blargnaut":"BlargNaut","bloodtrail":"BloodTrail","bort":"BORT","brainslug":"BrainSlug","brokeback":"BrokeBack","buddhabar":"BuddhaBar","coolcat":"CoolCat","corgiderp":"CorgiDerp","cougarhunt":"CougarHunt","daesuppy":"DAESuppy","dansgame":"DansGame","dathass":"DatHass","datsheffy":"DatSheffy","dbstyle":"DBstyle","deexcite":"deExcite","deilluminati":"deIlluminati","dendiface":"DendiFace","dogface":"DogFace","doomguy":"DOOMGuy","eagleeye":"EagleEye","elegiggle":"EleGiggle","evilfetus":"EvilFetus","failfish":"FailFish","fpsmarksman":"FPSMarksman","frankerz":"FrankerZ","freakinstinkin":"FreakinStinkin","fungineer":"FUNgineer","funrun":"FunRun","fuzzyotteroo":"FuzzyOtterOO","gasjoker":"GasJoker","gingerpower":"GingerPower","grammarking":"GrammarKing","hassanchop":"HassanChop","heyguys":"HeyGuys","hotpokket":"HotPokket","humblelife":"HumbleLife","itsboshytime":"ItsBoshyTime","jebaited":"Jebaited","jkanstyle":"JKanStyle","joncarnage":"JonCarnage","kapow":"KAPOW","kappa":"Kappa","kappapride":"KappaPride","keepo":"Keepo","kevinturtle":"KevinTurtle","kippa":"Kippa","kreygasm":"Kreygasm","kzskull":"KZskull","mau5":"Mau5","mcat":"mcaT","mechasupes":"MechaSupes","mrdestructoid":"MrDestructoid","mvgame":"MVGame","nightbat":"NightBat","ninjatroll":"NinjaTroll","nonospot":"NoNoSpot","notatk":"NotATK","notlikethis":"NotLikeThis","omgscoots":"OMGScoots","onehand":"OneHand","opieop":"OpieOP","optimizeprime":"OptimizePrime","osbeaver":"OSbeaver","osbury":"OSbury","osdeo":"OSdeo","osfrog":"OSfrog","oskomodo":"OSkomodo","osrob":"OSrob","ossloth":"OSsloth","panicbasket":"panicBasket","panicvis":"PanicVis","pazpazowitz":"PazPazowitz","peopleschamp":"PeoplesChamp","permasmug":"PermaSmug","picomause":"PicoMause","pipehype":"PipeHype","pjharley":"PJHarley","pjsalt":"PJSalt","pmstwin":"PMSTwin","pogchamp":"PogChamp","poooound":"Poooound","praiseit":"PraiseIt","prchase":"PRChase","punchtrees":"PunchTrees","puppeyface":"PuppeyFace","raccattack":"RaccAttack","ralpherz":"RalpherZ","redcoat":"RedCoat","residentsleeper":"ResidentSleeper","ritzmitz":"RitzMitz","rulefive":"RuleFive","shadylulu":"ShadyLulu","shazam":"Shazam","shazamicon":"shazamicon","shazbotstix":"ShazBotstix","shibez":"ShibeZ","smorc":"SMOrc","smskull":"SMSkull","sobayed":"SoBayed","soonerlater":"SoonerLater","srihead":"SriHead","ssssss":"SSSsss","stonelightning":"StoneLightning","strawbeary":"StrawBeary","supervinlin":"SuperVinlin","swiftrage":"SwiftRage","tbbaconbiscuit":"tbBaconBiscuit","tbchickenbiscuit":"tbChickenBiscuit","tbquesarito":"tbQuesarito","tbsausagebiscuit":"tbSausageBiscuit","tbspicy":"tbSpicy","tbsriracha":"tbSriracha","tf2john":"TF2John","theking":"TheKing","theringer":"TheRinger","thetarfu":"TheTarFu","thething":"TheThing","thunbeast":"ThunBeast","tinyface":"TinyFace","toospicy":"TooSpicy","trihard":"TriHard","ttours":"TTours","uleetbackup":"UleetBackup","unclenox":"UncleNox","unsane":"UnSane","vaultboy":"VaultBoy","volcania":"Volcania","wholewheat":"WholeWheat","winwaker":"WinWaker","wtruck":"WTRuck","wutface":"WutFace","youwhy":"YouWHY"}; -function EmoteModule() { +function EmoteModule() {} -} - -EmoteModule.prototype.init = function() { - -} +EmoteModule.prototype.init = function() {}; EmoteModule.prototype.obsCallback = function(mutation) { var self = this; @@ -162,11 +188,13 @@ EmoteModule.prototype.obsCallback = function(mutation) { if(next) { var nodes = self.getNodes(next); for(var node in nodes) { - self.injectEmote(nodes[node]); + if(nodes.hasOwnProperty(node)) { + self.injectEmote(nodes[node]); + } } } } -} +}; EmoteModule.prototype.getNodes = function(node) { var next; @@ -179,9 +207,9 @@ EmoteModule.prototype.getNodes = function(node) { } return nodes; -} - +}; +//TODO Functional titles EmoteModule.prototype.injectEmote = function(node) { if(typeof emotesTwitch === 'undefined') return; @@ -197,28 +225,44 @@ EmoteModule.prototype.injectEmote = function(node) { if(!words) return; words.some(function(word) { - if (emotesTwitch.hasOwnProperty(word)) { - parentInnerHTML = parentInnerHTML.replace(word, "<\/img>"); - } else if(typeof emotesFfz !== 'undefined' && settingsCookie["bda-es-1"]) { + + if(emotesTwitch.emotes.hasOwnProperty(word)) { + parentInnerHTML = parentInnerHTML.replace(word, "<\/img>"); + return; + } + + if(typeof emotesFfz !== 'undefined' && settingsCookie["bda-es-1"]) { if(emotesFfz.hasOwnProperty(word)) { - parentInnerHTML = parentInnerHTML.replace(word, "<\/img>"); - } else if(typeof emotesBTTV !== 'undefined' && settingsCookie["bda-es-2"]) { - if(emotesBTTV.hasOwnProperty(word)) { - parentInnerHTML = parentInnerHTML.replace(word, "<\/img>"); - } + parentInnerHTML = parentInnerHTML.replace(word, "<\/img>"); + return; } } + + if(typeof emotesBTTV !== 'undefined' && settingsCookie["bda-es-2"]) { + if(emotesBTTV.hasOwnProperty(word)) { + parentInnerHTML = parentInnerHTML.replace(word, "<\/img>"); + return; + } + } + + if (subEmotesTwitch.hasOwnProperty(word)) { + parentInnerHTML = parentInnerHTML.replace(word, "<\/img>"); + } }); + if(parent.parentElement == null) return; + var oldHeight = parent.parentElement.offsetHeight; parent.innerHTML = parentInnerHTML; var newHeight = parent.parentElement.offsetHeight; - var scrollPane = $($(".scroller.messages")[0]) + //Scrollfix + var scrollPane = $(".scroller.messages").first(); scrollPane.scrollTop(scrollPane.scrollTop() + (newHeight - oldHeight)); -} +}; EmoteModule.prototype.autoCapitalize = function() { + var self = this; $('body').delegate($(".channel-textarea-inner textarea"), 'keyup change paste', function() { @@ -235,37 +279,157 @@ EmoteModule.prototype.autoCapitalize = function() { $(".channel-textarea-inner textarea").val(text.replace(lastWord, ret)); } } - }); - -} +}; EmoteModule.prototype.capitalize = function(value) { if(twitchAc.hasOwnProperty(value)) { return twitchAc[value]; } return null; -} +}; - - -/* BetterDiscordApp PublicSevers JavaSctript +/* BetterDiscordApp PublicSevers JavaScripts * Version: 1.0 * Author: Jiiks | http://jiiks.net * Date: 27/08/2015 - 14:16 * https://github.com/Jiiks/BetterDiscordApp */ +var publicServers = { "servers": { "server": { "code": 0, "icon": null, "title": "title", "language": "EN", "description": "description" } } }; //for ide + function PublicServers() { } +PublicServers.prototype.getPanel = function() { + return this.container; +}; + PublicServers.prototype.init = function() { -} + var self = this; + + this.container = $("
    ", { + id: "bd-ps-container", + style: "display:none" + }); + + var header = $("
    ", { + id: "bd-ps-header" + }); + + $("

    ", { + text: "Public Servers" + }).appendTo(header); + + $("", { + id: "bd-ps-close", + style:"cursor:pointer;", + text: "X" + }).appendTo(header); + + header.appendTo(this.getPanel()); + + var psbody = $("
    ", { + id: "bd-ps-body" + }); + + psbody.appendTo(this.getPanel()); + + var table = $("", { + border:"0" + }); + + var thead = $(""); + + thead.appendTo(table); + + var headers = $("", { + + }).append($("", { + id: "bd-ps-tbody" + }); + + tbody.appendTo(table); + + table.appendTo(psbody); + + $("body").append(this.getPanel()); + + $("#bd-ps-close").on("click", function() { self.show(); }); + + var servers = publicServers.servers; + + for(var server in servers) { + if(servers.hasOwnProperty(server)) { + var s = servers[server]; + var code = s.code; + var title = s.title; + var language = s.language; + var description = s.description; + + this.addServer(server, code, title, language, description); + } + } +}; + +PublicServers.prototype.addServer = function(name, code, title, language, description) { + + var tableBody = $("#bd-ps-tbody"); + + + var desc = $(""); + + tr.append($("
    ", { + text: "Name" + })).append($("", { + text: "Code" + })).append($("", { + text: "Language" + })).append($("", { + text: "Description" + })); + + headers.appendTo(thead); + + var tbody = $("
    ").append($("
    ", { + class: "bd-ps-description", + text: description + })); + + var tr = $("
    ", { + text: title + })); + + tr.append($("", { + css: { + "-webkit-user-select":"initial", + "user-select":"initial" + }, + text: code + })); + + tr.append($("", { + text: language + })); + + tr.append(desc); + + tableBody.append(tr); +}; + +PublicServers.prototype.show = function() { + this.getPanel().toggle(); + var li = $("#bd-pub-li"); + li.removeClass(); + if(this.getPanel().is(":visible")) { + li.addClass("active"); + } +}; /* BetterDiscordApp QuickEmoteMenu JavaScript - * Version: 1.2 + * Version: 1.3 * Author: Jiiks | http://jiiks.net * Date: 26/08/2015 - 11:49 * Last Update: 29/08/2015 - 11:46 @@ -274,14 +438,11 @@ PublicServers.prototype.init = function() { var emoteBtn, emoteMenu; -var globalEmotes = {":(":2, ":)": 1, ":/":10, ":D":3, ":o":8, ":p":12, ":z":5, ";)":11, ";p":13, "<3":9, ">(":4, "B)":7, "o_o":6, "R)":14,"4Head":354,"ANELE":3792,"ArgieB8":51838,"ArsonNoSexy":50,"AsianGlow":74,"AtGL":9809,"AthenaPMS":32035,"AtIvy":9800,"AtWW":9801,"BabyRage":22639,"BatChest":1905,"BCWarrior":30,"BibleThump":86,"BigBrother":1904,"BionicBunion":24,"BlargNaut":38,"BloodTrail":69,"BORT":243,"BrainSlug":881,"BrokeBack":4057,"BuddhaBar":27602,"CoolCat":58127,"CorgiDerp":49106,"CougarHunt":21,"DAESuppy":973,"DansGame":33,"DatHass":20225,"DatSheffy":170,"DBstyle":73,"deExcite":46249,"deIlluminati":46248,"DendiFace":58135,"DogFace":1903,"DOOMGuy":54089,"EagleEye":20,"EleGiggle":4339,"EvilFetus":72,"FailFish":360,"FPSMarksman":42,"FrankerZ":65,"FreakinStinkin":39,"FUNgineer":244,"FunRun":48,"FuzzyOtterOO":168,"GasJoker":9802,"GingerPower":32,"GrammarKing":3632,"HassanChop":68,"HeyGuys":30259,"HotPokket":357,"HumbleLife":46881,"ItsBoshyTime":169,"Jebaited":90,"JKanStyle":15,"JonCarnage":26,"KAPOW":9803,"Kappa":25,"KappaPride":55338,"Keepo":1902,"KevinTurtle":40,"Kippa":1901,"Kreygasm":41,"KZskull":5253,"Mau5":30134,"mcaT":35063,"MechaSupes":9804,"MrDestructoid":28,"MVGame":29,"NightBat":9805,"NinjaTroll":45,"NoNoSpot":44,"NotATK":34875,"NotLikeThis":58765,"OMGScoots":91,"OneHand":66,"OpieOP":356,"OptimizePrime":16,"OSbeaver":47005,"OSbury":47420,"OSdeo":47007,"OSfrog":47008,"OSkomodo":47010,"OSrob":47302,"OSsloth":47011,"panicBasket":22998,"PanicVis":3668,"PazPazowitz":19,"PeoplesChamp":3412,"PermaSmug":27509,"PicoMause":27,"PipeHype":4240,"PJHarley":9808,"PJSalt":36,"PMSTwin":92,"PogChamp":88,"Poooound":358,"PraiseIt":38586,"PRChase":28328,"PunchTrees":47,"PuppeyFace":58136,"RaccAttack":27679,"RalpherZ":1900,"RedCoat":22,"ResidentSleeper":245,"RitzMitz":4338,"RuleFive":361,"ShadyLulu":52492,"Shazam":9807,"shazamicon":9806,"ShazBotstix":87,"ShibeZ":27903,"SMOrc":52,"SMSkull":51,"SoBayed":1906,"SoonerLater":355,"SriHead":14706,"SSSsss":46,"StoneLightning":17,"StrawBeary":37,"SuperVinlin":31,"SwiftRage":34,"tbBaconBiscuit":44499,"tbChickenBiscuit":56879,"tbQuesarito":56883,"tbSausageBiscuit":56881,"tbSpicy":56882,"tbSriracha":56880,"TF2John":1899,"TheKing":50901,"TheRinger":18,"TheTarFu":70,"TheThing":7427,"ThunBeast":1898,"TinyFace":67,"TooSpicy":359,"TriHard":171,"TTours":38436,"UleetBackup":49,"UncleNox":3666,"UnSane":71,"VaultBoy":54090,"Volcania":166,"WholeWheat":1896,"WinWaker":167,"WTRuck":1897,"WutFace":28087,"YouWHY":4337}; -var emoteList; - function QuickEmoteMenu() { } -QuickEmoteMenu.prototype.init = function (reload) { +QuickEmoteMenu.prototype.init = function(reload) { emoteBtn = null; @@ -314,26 +475,27 @@ QuickEmoteMenu.prototype.init = function (reload) { emoteBtn.show(); } - $(".emote-icon").off(); - $(".emote-icon").on("click", function() { - var emote = $(this).attr("id"); - var ta = $(".channel-textarea-inner textarea"); - ta.val(ta.val().slice(-1) == " " ? ta.val() + emote : ta.val() + " " + emote); - }); -} + var emoteIcon = $(".emote-icon"); + + emoteIcon.off(); + emoteIcon.on("click", function() { + var emote = $(this).attr("id"); + var ta = $(".channel-textarea-inner textarea"); + ta.val(ta.val().slice(-1) == " " ? ta.val() + emote : ta.val() + " " + emote); + }); +}; QuickEmoteMenu.prototype.obsCallback = function() { if(!emoteBtn) return; if(!$(".content.flex-spacer.flex-horizontal .flex-spacer.flex-vertical form")) return; - tcbtn = $("#twitchcord-button-container"); + var tcbtn = $("#twitchcord-button-container"); if(tcbtn.parent().prop("tagName") == undefined) { quickEmoteMenu = new QuickEmoteMenu(); quickEmoteMenu.init(true); } - -} +}; QuickEmoteMenu.prototype.initEmoteList = function() { @@ -344,13 +506,13 @@ QuickEmoteMenu.prototype.initEmoteList = function() { emoteMenu.append(emoteMenuHeader); emoteMenu.append(emoteMenuBody); - for(var emote in globalEmotes) { - var command = emote; - var id = globalEmotes[emote]; - - emoteMenuBody.append($("
    " , { class: "emote-container" }).append($("", { class: "emote-icon", id: emote, alt: "", src: "https://static-cdn.jtvnw.net/emoticons/v1/"+id+"/1.0", title: emote }))); + for(var emote in emotesTwitch.emotes) { + if(emotesTwitch.emotes.hasOwnProperty(emote)) { + var id = emotesTwitch.emotes[emote].image_id; + emoteMenuBody.append($("
    " , { class: "emote-container" }).append($("", { class: "emote-icon", id: emote, alt: "", src: "https://static-cdn.jtvnw.net/emoticons/v1/"+id+"/1.0", title: emote }))); + } } -} +}; /* BetterDiscordApp Settings Panel JavaScript * Version: 1.3 @@ -368,11 +530,12 @@ function SettingsPanel() { SettingsPanel.prototype.getPanel = function() { return this.tcSettingsPanel; -} +}; SettingsPanel.prototype.init = function() { var self = this; + var body = $("body"); this.tcSettingsPanel = $("
    ", { id: "tc-settings-panel", style: "display:none" }); this.getPanel().append($("
    ", { id: "tc-settings-panel-header" }).append($("

    ", { text: "BetterDiscord - Settings" })).append($("", { id: "tc-settings-close", text: "X", style:"cursor:pointer;" }))); @@ -390,7 +553,7 @@ SettingsPanel.prototype.init = function() { } settingsList.append($("
  • ").append($("

    ", { text: key})).append($("", { html: " - " + value.info + "" + (value.implemented == false ? ' Coming Soon' : "") })).append($("
    ", { class: value.implemented ? "tc-switch" : "tc-switch disabled", id: value.id }).append($("", { class: sof, text: "OFF" })).append($("", { class: son, text: "ON" })))); - }) + }); var settingsFooter = $("
    ", { id: "tc-settings-panel-footer" }); settingsFooter.append($("", { id: "tc-about", text: "BDA v" + version + "(js "+jsVersion+") by Jiiks | Settings are automatically saved." } )); @@ -398,13 +561,13 @@ SettingsPanel.prototype.init = function() { $.each(links, function(key, value) { tcLinks.append($("", { href: value, text: key, target: "_blank" })); tcLinks.append($("", { text: " | " })); - }) + }); settingsFooter.append(tcLinks); this.getPanel().append(settingsFooter); - $("body").append(this.getPanel()); - $("#tc-settings-close").on("click", function(e) { self.show(); }); + body.append(this.getPanel()); + $("#tc-settings-close").on("click", function() { self.show(); }); $(".tc-switch").on("click", function() { self.handler($(this)) }); if(settingsCookie["bda-es-0"]) { @@ -414,25 +577,31 @@ SettingsPanel.prototype.init = function() { } if(settingsCookie["bda-gs-2"]) { - $("body").addClass("bd-minimal"); + body.addClass("bd-minimal"); } else { - $("body").removeClass("bd-minimal"); + body.removeClass("bd-minimal"); } if(settingsCookie["bda-gs-3"]) { - $("body").addClass("bd-minimal-chan"); + body.addClass("bd-minimal-chan"); } else { - $("body").removeClass("bd-minimal-chan"); + body.removeClass("bd-minimal-chan"); } -} + + if(settingsCookie["bda-gs-4"]) { + voiceMode.enable(); + } +}; SettingsPanel.prototype.show = function() { this.getPanel().toggle(); - $("#tc-settings-li").removeClass(); + var settingsLi = $("#tc-settings-li"); + + settingsLi.removeClass(); if(this.getPanel().is(":visible")) { - $("#tc-settings-li").addClass("active"); + settingsLi.addClass("active"); } -} +}; SettingsPanel.prototype.handler = function(e){ @@ -469,9 +638,19 @@ SettingsPanel.prototype.handler = function(e){ } 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(); + } mainCore.saveSettings(); -} +}; /* BetterDiscordApp Utilities JavaScript * Version: 1.0 @@ -486,8 +665,37 @@ 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) } +}; + +/* BetterDiscordApp VoiceMode JavaScript + * Version: 1.0 + * Author: Jiiks | http://jiiks.net + * Date: 25/10/2015 - 19:10 + * https://github.com/Jiiks/BetterDiscordApp + */ + +function VoiceMode() { + } + +VoiceMode.prototype.enable = function() { + $(".scroller.guild-channels ul").first().css("display", "none"); + $(".scroller.guild-channels header").first().css("display", "none"); + $(".flex-vertical.flex-spacer").first().css("overflow", "hidden"); + $(".chat.flex-vertical.flex-spacer").first().css("visibility", "hidden").css("min-width", "0px"); + $(".flex-vertical.channels-wrap").first().css("width", "100%"); + $(".guild-header .btn.btn-hamburger").first().css("visibility", "hidden"); +}; + +VoiceMode.prototype.disable = function() { + $(".scroller.guild-channels ul").first().css("display", ""); + $(".scroller.guild-channels header").first().css("display", ""); + $(".flex-vertical.flex-spacer").first().css("overflow", ""); + $(".chat.flex-vertical.flex-spacer").first().css("visibility", "").css("min-width", ""); + $(".flex-vertical.channels-wrap").first().css("width", ""); + $(".guild-header .btn.btn-hamburger").first().css("visibility", ""); +}; \ No newline at end of file diff --git a/js/main.min.js b/js/main.min.js index 33c9424..667fb14 100644 --- a/js/main.min.js +++ b/js/main.min.js @@ -1 +1 @@ -function Core(){}function EmoteModule(){}function PublicServers(){}function QuickEmoteMenu(){}function SettingsPanel(){}function Utils(){}var settingsPanel,emoteModule,utils,quickEmoteMenu,jsVersion=1.2,mainObserver,twitchEmoteUrlStart="https://static-cdn.jtvnw.net/emoticons/v1/",twitchEmoteUrlEnd="/1.0",ffzEmoteUrlStart="https://cdn.frankerfacez.com/emoticon/",ffzEmoteUrlEnd="/1",bttvEmoteUrlStart="",bttvEmoteUrlEnd="",settings={"Save logs locally":{id:"bda-gs-0",info:"Saves chat logs locally",implemented:!1},"Public Servers":{id:"bda-gs-1",info:"Display public servers",implemented:!1},"Minimal Mode":{id:"bda-gs-2",info:"Hide elements and reduce the size of elements.",implemented:!0},"Hide Channels":{id:"bda-gs-3",info:"Hide channels in minimal mode",implemented:!0},"Quick Emote Menu":{id:"bda-es-0",info:"Show quick emote menu for adding emotes",implemented:!0},"FrankerFaceZ Emotes":{id:"bda-es-1",info:"Show FrankerFaceZ Emotes",implemented:!0},"BetterTTV Emotes":{id:"bda-es-2",info:"Show BetterTTV Emotes",implemented:!1},"Emote Autocomplete":{id:"bda-es-3",info:"Autocomplete emote commands",implemented:!1},"Emote Auto Capitalization":{id:"bda-es-4",info:"Autocapitalize emote commands",implemented:!0},"Override Default Emotes":{id:"bda-es-5",info:"Override default emotes",implemented:!1}},defaultCookie={version:jsVersion,"bda-gs-0":!1,"bda-gs-1":!0,"bda-gs-2":!1,"bda-gs-3":!1,"bda-es-0":!0,"bda-es-1":!1,"bda-es-2":!1,"bda-es-3":!1,"bda-es-4":!1,"bda-es-5":!0},settingsCookie={};Core.prototype.init=function(){utils=new Utils,emoteModule=new EmoteModule,quickEmoteMenu=new QuickEmoteMenu,emoteModule.init(),emoteModule.autoCapitalize(),this.initSettings(),this.initObserver(),setTimeout(function(){$(".guilds-wrapper").size()>0?($(".guilds li:first-child").after($("
  • ",{id:"tc-settings-li"}).append($("
    ",{"class":"guild-inner"}).append($("").append($("
    ",{"class":"avatar-small",id:"tc-settings-button"}))))),settingsPanel=new SettingsPanel,settingsPanel.init(),quickEmoteMenu.init(!1),$("#tc-settings-button").on("click",function(){settingsPanel.show()})):setTimeout(function(){waitForGuildsWrapper()},100)},3e3)},Core.prototype.initSettings=function(){if(void 0==$.cookie("better-discord"))settingsCookie=defaultCookie,this.saveSettings();else{this.loadSettings();for(var e in defaultCookie)if(void 0==settingsCookie[e]){settingsCookie=defaultCookie,this.saveSettings(),alert("BetterDiscord settings reset due to update/error");break}}},Core.prototype.saveSettings=function(){$.cookie("better-discord",JSON.stringify(settingsCookie),{expires:365,path:"/"})},Core.prototype.loadSettings=function(){settingsCookie=JSON.parse($.cookie("better-discord"))},Core.prototype.initObserver=function(){mainObserver=new MutationObserver(function(e){e.forEach(function(e){null!=e.target.getAttribute("class")&&-1!=e.target.getAttribute("class").indexOf("titlebar")&&quickEmoteMenu.obsCallback(),emoteModule.obsCallback(e)})}),mainObserver.observe(document,{childList:!0,subtree:!0})};var autoCapitalize=!0,ffzEnabled=!1,bttvEnabled=!1,emotesFfz={},emotesBTTV={},emotesTwitch={":(":2,":)":1,":/":10,":D":3,":o":8,":p":12,":z":5,";)":11,";p":13,"<3":9,">(":4,"B)":7,o_o:6,"R)":14,"4Head":354,ANELE:3792,ArgieB8:51838,ArsonNoSexy:50,AsianGlow:74,AtGL:9809,AthenaPMS:32035,AtIvy:9800,AtWW:9801,BabyRage:22639,BatChest:1905,BCWarrior:30,BibleThump:86,BigBrother:1904,BionicBunion:24,BlargNaut:38,BloodTrail:69,BORT:243,BrainSlug:881,BrokeBack:4057,BuddhaBar:27602,CoolCat:58127,CorgiDerp:49106,CougarHunt:21,DAESuppy:973,DansGame:33,DatHass:20225,DatSheffy:170,DBstyle:73,deExcite:46249,deIlluminati:46248,DendiFace:58135,DogFace:1903,DOOMGuy:54089,EagleEye:20,EleGiggle:4339,EvilFetus:72,FailFish:360,FPSMarksman:42,FrankerZ:65,FreakinStinkin:39,FUNgineer:244,FunRun:48,FuzzyOtterOO:168,GasJoker:9802,GingerPower:32,GrammarKing:3632,HassanChop:68,HeyGuys:30259,HotPokket:357,HumbleLife:46881,ItsBoshyTime:169,Jebaited:90,JKanStyle:15,JonCarnage:26,KAPOW:9803,Kappa:25,KappaPride:55338,Keepo:1902,KevinTurtle:40,Kippa:1901,Kreygasm:41,KZskull:5253,Mau5:30134,mcaT:35063,MechaSupes:9804,MrDestructoid:28,MVGame:29,NightBat:9805,NinjaTroll:45,NoNoSpot:44,NotATK:34875,NotLikeThis:58765,OMGScoots:91,OneHand:66,OpieOP:356,OptimizePrime:16,OSbeaver:47005,OSbury:47420,OSdeo:47007,OSfrog:47008,OSkomodo:47010,OSrob:47302,OSsloth:47011,panicBasket:22998,PanicVis:3668,PazPazowitz:19,PeoplesChamp:3412,PermaSmug:27509,PicoMause:27,PipeHype:4240,PJHarley:9808,PJSalt:36,PMSTwin:92,PogChamp:88,Poooound:358,PraiseIt:38586,PRChase:28328,PunchTrees:47,PuppeyFace:58136,RaccAttack:27679,RalpherZ:1900,RedCoat:22,ResidentSleeper:245,RitzMitz:4338,RuleFive:361,ShadyLulu:52492,Shazam:9807,shazamicon:9806,ShazBotstix:87,ShibeZ:27903,SMOrc:52,SMSkull:51,SoBayed:1906,SoonerLater:355,SriHead:14706,SSSsss:46,StoneLightning:17,StrawBeary:37,SuperVinlin:31,SwiftRage:34,tbBaconBiscuit:44499,tbChickenBiscuit:56879,tbQuesarito:56883,tbSausageBiscuit:56881,tbSpicy:56882,tbSriracha:56880,TF2John:1899,TheKing:50901,TheRinger:18,TheTarFu:70,TheThing:7427,ThunBeast:1898,TinyFace:67,TooSpicy:359,TriHard:171,TTours:38436,UleetBackup:49,UncleNox:3666,UnSane:71,VaultBoy:54090,Volcania:166,WholeWheat:1896,WinWaker:167,WTRuck:1897,WutFace:28087,YouWHY:4337},twitchAc={"4head":"4Head",anele:"ANELE",argieb8:"ArgieB8",arsonnosexy:"ArsonNoSexy",asianglow:"AsianGlow",atgl:"AtGL",athenapms:"AthenaPMS",ativy:"AtIvy",atww:"AtWW",babyrage:"BabyRage",batchest:"BatChest",bcwarrior:"BCWarrior",biblethump:"BibleThump",bigbrother:"BigBrother",bionicbunion:"BionicBunion",blargnaut:"BlargNaut",bloodtrail:"BloodTrail",bort:"BORT",brainslug:"BrainSlug",brokeback:"BrokeBack",buddhabar:"BuddhaBar",coolcat:"CoolCat",corgiderp:"CorgiDerp",cougarhunt:"CougarHunt",daesuppy:"DAESuppy",dansgame:"DansGame",dathass:"DatHass",datsheffy:"DatSheffy",dbstyle:"DBstyle",deexcite:"deExcite",deilluminati:"deIlluminati",dendiface:"DendiFace",dogface:"DogFace",doomguy:"DOOMGuy",eagleeye:"EagleEye",elegiggle:"EleGiggle",evilfetus:"EvilFetus",failfish:"FailFish",fpsmarksman:"FPSMarksman",frankerz:"FrankerZ",freakinstinkin:"FreakinStinkin",fungineer:"FUNgineer",funrun:"FunRun",fuzzyotteroo:"FuzzyOtterOO",gasjoker:"GasJoker",gingerpower:"GingerPower",grammarking:"GrammarKing",hassanchop:"HassanChop",heyguys:"HeyGuys",hotpokket:"HotPokket",humblelife:"HumbleLife",itsboshytime:"ItsBoshyTime",jebaited:"Jebaited",jkanstyle:"JKanStyle",joncarnage:"JonCarnage",kapow:"KAPOW",kappa:"Kappa",kappapride:"KappaPride",keepo:"Keepo",kevinturtle:"KevinTurtle",kippa:"Kippa",kreygasm:"Kreygasm",kzskull:"KZskull",mau5:"Mau5",mcat:"mcaT",mechasupes:"MechaSupes",mrdestructoid:"MrDestructoid",mvgame:"MVGame",nightbat:"NightBat",ninjatroll:"NinjaTroll",nonospot:"NoNoSpot",notatk:"NotATK",notlikethis:"NotLikeThis",omgscoots:"OMGScoots",onehand:"OneHand",opieop:"OpieOP",optimizeprime:"OptimizePrime",osbeaver:"OSbeaver",osbury:"OSbury",osdeo:"OSdeo",osfrog:"OSfrog",oskomodo:"OSkomodo",osrob:"OSrob",ossloth:"OSsloth",panicbasket:"panicBasket",panicvis:"PanicVis",pazpazowitz:"PazPazowitz",peopleschamp:"PeoplesChamp",permasmug:"PermaSmug",picomause:"PicoMause",pipehype:"PipeHype",pjharley:"PJHarley",pjsalt:"PJSalt",pmstwin:"PMSTwin",pogchamp:"PogChamp",poooound:"Poooound",praiseit:"PraiseIt",prchase:"PRChase",punchtrees:"PunchTrees",puppeyface:"PuppeyFace",raccattack:"RaccAttack",ralpherz:"RalpherZ",redcoat:"RedCoat",residentsleeper:"ResidentSleeper",ritzmitz:"RitzMitz",rulefive:"RuleFive",shadylulu:"ShadyLulu",shazam:"Shazam",shazamicon:"shazamicon",shazbotstix:"ShazBotstix",shibez:"ShibeZ",smorc:"SMOrc",smskull:"SMSkull",sobayed:"SoBayed",soonerlater:"SoonerLater",srihead:"SriHead",ssssss:"SSSsss",stonelightning:"StoneLightning",strawbeary:"StrawBeary",supervinlin:"SuperVinlin",swiftrage:"SwiftRage",tbbaconbiscuit:"tbBaconBiscuit",tbchickenbiscuit:"tbChickenBiscuit",tbquesarito:"tbQuesarito",tbsausagebiscuit:"tbSausageBiscuit",tbspicy:"tbSpicy",tbsriracha:"tbSriracha",tf2john:"TF2John",theking:"TheKing",theringer:"TheRinger",thetarfu:"TheTarFu",thething:"TheThing",thunbeast:"ThunBeast",tinyface:"TinyFace",toospicy:"TooSpicy",trihard:"TriHard",ttours:"TTours",uleetbackup:"UleetBackup",unclenox:"UncleNox",unsane:"UnSane",vaultboy:"VaultBoy",volcania:"Volcania",wholewheat:"WholeWheat",winwaker:"WinWaker",wtruck:"WTRuck",wutface:"WutFace",youwhy:"YouWHY"};EmoteModule.prototype.init=function(){},EmoteModule.prototype.obsCallback=function(e){for(var t=this,i=0;i"):"undefined"!=typeof emotesFfz&&settingsCookie["bda-es-1"]&&(emotesFfz.hasOwnProperty(e)?i=i.replace(e,""):"undefined"!=typeof emotesBTTV&&settingsCookie["bda-es-2"]&&emotesBTTV.hasOwnProperty(e)&&(i=i.replace(e,"")))});var o=t.parentElement.offsetHeight;t.innerHTML=i;var n=t.parentElement.offsetHeight,s=$($(".scroller.messages")[0]);s.scrollTop(s.scrollTop()+(n-o))}}}},EmoteModule.prototype.autoCapitalize=function(){var e=this;$("body").delegate($(".channel-textarea-inner textarea"),"keyup change paste",function(){if(settingsCookie["bda-es-4"]){var t=$(".channel-textarea-inner textarea").val();if(void 0!=t){var i=t.split(" ").pop();if(i.length>3){var a=e.capitalize(i.toLowerCase());null!=a&&$(".channel-textarea-inner textarea").val(t.replace(i,a))}}}})},EmoteModule.prototype.capitalize=function(e){return twitchAc.hasOwnProperty(e)?twitchAc[e]:null},PublicServers.prototype.init=function(){};var emoteBtn,emoteMenu,globalEmotes={":(":2,":)":1,":/":10,":D":3,":o":8,":p":12,":z":5,";)":11,";p":13,"<3":9,">(":4,"B)":7,o_o:6,"R)":14,"4Head":354,ANELE:3792,ArgieB8:51838,ArsonNoSexy:50,AsianGlow:74,AtGL:9809,AthenaPMS:32035,AtIvy:9800,AtWW:9801,BabyRage:22639,BatChest:1905,BCWarrior:30,BibleThump:86,BigBrother:1904,BionicBunion:24,BlargNaut:38,BloodTrail:69,BORT:243,BrainSlug:881,BrokeBack:4057,BuddhaBar:27602,CoolCat:58127,CorgiDerp:49106,CougarHunt:21,DAESuppy:973,DansGame:33,DatHass:20225,DatSheffy:170,DBstyle:73,deExcite:46249,deIlluminati:46248,DendiFace:58135,DogFace:1903,DOOMGuy:54089,EagleEye:20,EleGiggle:4339,EvilFetus:72,FailFish:360,FPSMarksman:42,FrankerZ:65,FreakinStinkin:39,FUNgineer:244,FunRun:48,FuzzyOtterOO:168,GasJoker:9802,GingerPower:32,GrammarKing:3632,HassanChop:68,HeyGuys:30259,HotPokket:357,HumbleLife:46881,ItsBoshyTime:169,Jebaited:90,JKanStyle:15,JonCarnage:26,KAPOW:9803,Kappa:25,KappaPride:55338,Keepo:1902,KevinTurtle:40,Kippa:1901,Kreygasm:41,KZskull:5253,Mau5:30134,mcaT:35063,MechaSupes:9804,MrDestructoid:28,MVGame:29,NightBat:9805,NinjaTroll:45,NoNoSpot:44,NotATK:34875,NotLikeThis:58765,OMGScoots:91,OneHand:66,OpieOP:356,OptimizePrime:16,OSbeaver:47005,OSbury:47420,OSdeo:47007,OSfrog:47008,OSkomodo:47010,OSrob:47302,OSsloth:47011,panicBasket:22998,PanicVis:3668,PazPazowitz:19,PeoplesChamp:3412,PermaSmug:27509,PicoMause:27,PipeHype:4240,PJHarley:9808,PJSalt:36,PMSTwin:92,PogChamp:88,Poooound:358,PraiseIt:38586,PRChase:28328,PunchTrees:47,PuppeyFace:58136,RaccAttack:27679,RalpherZ:1900,RedCoat:22,ResidentSleeper:245,RitzMitz:4338,RuleFive:361,ShadyLulu:52492,Shazam:9807,shazamicon:9806,ShazBotstix:87,ShibeZ:27903,SMOrc:52,SMSkull:51,SoBayed:1906,SoonerLater:355,SriHead:14706,SSSsss:46,StoneLightning:17,StrawBeary:37,SuperVinlin:31,SwiftRage:34,tbBaconBiscuit:44499,tbChickenBiscuit:56879,tbQuesarito:56883,tbSausageBiscuit:56881,tbSpicy:56882,tbSriracha:56880,TF2John:1899,TheKing:50901,TheRinger:18,TheTarFu:70,TheThing:7427,ThunBeast:1898,TinyFace:67,TooSpicy:359,TriHard:171,TTours:38436,UleetBackup:49,UncleNox:3666,UnSane:71,VaultBoy:54090,Volcania:166,WholeWheat:1896,WinWaker:167,WTRuck:1897,WutFace:28087,YouWHY:4337},emoteList;QuickEmoteMenu.prototype.init=function(){emoteBtn=null,emoteMenu||this.initEmoteList();var e;emoteBtn=$("
    ",{id:"twitchcord-button-container",style:"display:none"}).append($("