diff --git a/js/core.js b/js/core.js index 825ae2c..57f19c8 100644 --- a/js/core.js +++ b/js/core.js @@ -1,10 +1,15 @@ /* BetterDiscordApp Core JavaScript - * Version: 1.0 + * Version: 1.1 * Author: Jiiks | http://jiiks.net * Date: 27/08/2015 - 16:36 * https://github.com/Jiiks/BetterDiscordApp */ +var settingsPanel, emoteModule, utils, quickEmoteMenu; +var jsVersion = 1.1; + +var mainObserver; + var twitchEmoteUrlStart = "https://static-cdn.jtvnw.net/emoticons/v1/"; var twitchEmoteUrlEnd = "/1.0"; var ffzEmoteUrlStart = "https://cdn.frankerfacez.com/emoticon/"; @@ -12,57 +17,60 @@ var ffzEmoteUrlEnd = "/1"; var bttvEmoteUrlStart = ""; var bttvEmoteUrlEnd = ""; -var settings = {"Save logs locally": { "id": "bda-gs-sll", "info": "Saves chat logs locally", "implemented":false }, - "Public Servers": { "id": "bda-gs-psl", "info": "Display public servers", "implemented":false}, - "Quick Emote Menu": { "id": "bda-es-qme", "info": "Show quick emote menu for adding emotes", "implemented":true }, - "FrankerFaceZ Emotes": { "id": "bda-es-ffz", "info": "Show FrankerFaceZ Emotes", "implemented":true }, - "BetterTTV Emotes": { "id": "bda-es-bttv","info": "Show BetterTTV Emotes", "implemented":false }, - "Emote Autocomplete": { "id": "bda-es-aec", "info": "Autocomplete emote commands", "implemented":false }, - "Emote Auto Capitalization": { "id": "bda-es-ace", "info": "Autocapitalize emote commands", "implemented":true }, - "Override Default Emotes": { "id": "bda-es-ode", "info": "Override default emotes", "implemented":false }}; -var defaultCookie = {"version":"1.0", - "bda-gs-sll":false, - "bda-gs-psl":true, - "bda-es-qme":true, - "bda-es-ffz":false, - "bda-es-bttv":false, - "bda-es-aec":false, - "bda-es-ace":false, - "bda-es-ode":true}; + +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}, + "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 }, + "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":"1.1", + "bda-gs-0":false, + "bda-gs-1":true, + "bda-es-0":true, + "bda-es-1":false, + "bda-es-2":false, + "bda-es-3":false, + "bda-es-4":false, + "bda-es-5":true +}; var settingsCookie = {}; -var links = { "Check for updates": "#", "Jiiks.net": "http://jiiks.net", "Twitter": "http://twitter.com/jiiksi", "Github": "https://github.com/jiiks" }; - -var utils; -var emoteModule; -var quickEmoteMenu; -var settingsPanel; - function Core() { } + Core.prototype.init = function() { utils = new Utils(); emoteModule = new EmoteModule(); quickEmoteMenu = new QuickEmoteMenu(); emoteModule.init(); - emoteModule.observe(); emoteModule.autoCapitalize(); - //Tempt timeout, defer + this.initSettings(); + this.initObserver(); + + //Temp timeout, defer setTimeout(function() { - initSettings(); //Settings button $(".guilds li:first-child").after($("
  • ", {id:"tc-settings-li"}).append($("
    ", { class: "guild-inner" }).append($("").append($("
    ", { class: "avatar-small", id: "tc-settings-button", style: 'background-image:url("https://a96edc24045943bce10e086d4fdfb287582825b6.googledrive.com/host/0B4q1DpUVMKCofkgwdTRpWkxYdVhhdEdDYXdFa2V3eWJvbUJ5bHM3dHFDM21taHJJem5JaUU/settings_icon.png")' }))))); settingsPanel = new SettingsPanel(); settingsPanel.init(); - quickEmoteMenu.init(); + quickEmoteMenu.init(false); $("#tc-settings-button").on("click", function(e) { settingsPanel.show(); }); @@ -70,13 +78,36 @@ Core.prototype.init = function() { } -function initSettings() { - function initSettings() { - if(typeof($.cookie("better-discord")) === 'undefined') { - settingsCookie = defaultCookie; - $.cookie("better-discord", JSON.stringify(settingsCookie)); - } else { - settingsCookie = JSON.parse($.cookie("better-discord")); +Core.prototype.initSettings = function() { + if(typeof($.cookie("better-discord")) == undefined) { + settingsCookie = defaultCookie; + $.cookie("better-discord", JSON.stringify(settingsCookie)); + } else { + settingsCookie = JSON.parse($.cookie("better-discord")); + + for(var setting in defaultCookie) { + if(settingsCookie[setting] == undefined) { + settingsCookie = defaultCookie; + $.cookie("better-discord", JSON.stringify(settingsCookie)); + alert("BetterDiscord settings reset due to update/error"); + break; + } } } } + +Core.prototype.initObserver = function() { + + mainObserver = new MutationObserver(function(mutations) { + mutations.forEach(function(mutation) { + if(mutation.target.getAttribute('class').indexOf("titlebar") != -1) { + quickEmoteMenu.obsCallback(); + } + + this.emoteModule.obsCallback(mutation); + + }); + }); + + mainObserver.observe(document, { childList: true, subtree: true }); +} \ No newline at end of file diff --git a/js/emotemodule.js b/js/emotemodule.js index f338e6d..5de8e29 100644 --- a/js/emotemodule.js +++ b/js/emotemodule.js @@ -19,24 +19,20 @@ function EmoteModule() { } EmoteModule.prototype.init = function() { - var self = this; - this.emoteObserver = new MutationObserver(function(mutations) { - mutations.forEach(function(mutation) { - for(var i = 0 ; i < mutation.addedNodes.length ; ++i) { - var next = mutation.addedNodes.item(i); - if(next) { - var nodes = self.getNodes(next); - for(var node in nodes) { - self.injectEmote(nodes[node]); - } - } - } - }); - }); + } -EmoteModule.prototype.observe = function() { - this.emoteObserver.observe(document, { childList: true, subtree: true }); +EmoteModule.prototype.obsCallback = function(mutation) { + var self = this; + for(var i = 0 ; i < mutation.addedNodes.length ; ++i) { + var next = mutation.addedNodes.item(i); + if(next) { + var nodes = self.getNodes(next); + for(var node in nodes) { + self.injectEmote(nodes[node]); + } + } + } } EmoteModule.prototype.getNodes = function(node) { diff --git a/js/quickemotemenu.js b/js/quickemotemenu.js index 7e4d74a..5da5b3d 100644 --- a/js/quickemotemenu.js +++ b/js/quickemotemenu.js @@ -6,24 +6,33 @@ * https://github.com/Jiiks/BetterDiscordApp */ +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 () { +QuickEmoteMenu.prototype.init = function (reload) { + console.log("quickemote init"); + emoteBtn = null; + + if(!emoteMenu) { + this.initEmoteList(); + } var menuOpen; - var emoteMenu = $("
    ", { id: "emote-menu" }); - var emoteMenuHeader = $("
    ", { id: "emote-menu-header" }).append($("", { text: "Global Emotes" })); - var emoteMenuBody = $("
    ", { id: "emote-menu-inner" }); - emoteMenu.append(emoteMenuHeader); - emoteMenu.append(emoteMenuBody); - var emoteBtn = $("
    ", { id:"twitchcord-button-container", style:"display:none" }).append($("