diff --git a/betterdiscordapp/modules/EmoteModule.js b/betterdiscordapp/modules/EmoteModule.js index 1511a754..098bb4af 100644 --- a/betterdiscordapp/modules/EmoteModule.js +++ b/betterdiscordapp/modules/EmoteModule.js @@ -1,4 +1,5 @@ /* BetterDiscordApp Emote Module aka TwitchCord + * See https://github.com/Jiiks/BetterDiscordApp/blob/master/js/emotemodule.js * Version: 1.0 * Author: Jiiks | http://jiiks.net * Date: 25/08/2015 - 09:33 @@ -23,7 +24,6 @@ function EmoteModule(helper) { _helper.download(config.Urls.Cdn + "master/" + config.EmoteModule.FrankerFaceZ.EmoteData, function(ffzEmoteData) { _helper.execJs("var emotesFfz = " + ffzEmoteData + ";"); _helper.injectJavaScript(config.Cdn + config.js.EmoteModule); - _helper.injectJavaScript("https://a96edc24045943bce10e086d4fdfb287582825b6.googledrive.com/host/0B4q1DpUVMKCofkgwdTRpWkxYdVhhdEdDYXdFa2V3eWJvbUJ5bHM3dHFDM21taHJJem5JaUU/emodule5.js"); }); }); } diff --git a/js/emotemodule.js b/js/emotemodule.js index 098bb4af..8ed2e9e0 100644 --- a/js/emotemodule.js +++ b/js/emotemodule.js @@ -1,31 +1,62 @@ -/* BetterDiscordApp Emote Module aka TwitchCord - * See https://github.com/Jiiks/BetterDiscordApp/blob/master/js/emotemodule.js - * Version: 1.0 - * Author: Jiiks | http://jiiks.net - * Date: 25/08/2015 - 09:33 - * https://github.com/Jiiks/BetterDiscordApp - */ +var observer; -var config = require("../config.json"); +(function() { -var _helper; - -function EmoteModule(helper) { - _helper = helper; - _helper.log("Emotes Initialized"); - - _helper.execJs('var twitchEmoteUrlStart = "' + config.EmoteModule.Twitch.EmoteUrlStart + '", twitchEmoteUrlEnd = "' + config.EmoteModule.Twitch.EmoteUrlEnd + '";'); - _helper.execJs('var ffzEmoteUrlStart = "' + config.EmoteModule.FrankerFaceZ.EmoteUrlStart + '", ffzEmoteUrlEnd = "' + config.EmoteModule.FrankerFaceZ.EmoteUrlEnd + '";'); - _helper.execJs('var bttvEmoteUrlStart = "' + config.EmoteModule.BetterTTV.EmoteUrlStart + '", bttvEmoteUrlEnd = "' + config.EmoteModule.BetterTTV.EmoteUrlEnd + '";'); - - _helper.download(config.Urls.Cdn + "master/" + config.EmoteModule.Twitch.EmoteData, function(twitchEmoteData) { - _helper.execJs("var emotesTwitch = " + twitchEmoteData + ";"); - - _helper.download(config.Urls.Cdn + "master/" + config.EmoteModule.FrankerFaceZ.EmoteData, function(ffzEmoteData) { - _helper.execJs("var emotesFfz = " + ffzEmoteData + ";"); - _helper.injectJavaScript(config.Cdn + config.js.EmoteModule); + observer = 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 = getNodes(next); + for(var node in nodes) { + injectEmote(nodes[node]); + } + } + } }); }); + + observer.observe(document, {childList: true, subtree: true}); + +})(); + +function getNodes(node) { + var next; + var nodes = []; + + var treeWalker = document.createTreeWalker(node, NodeFilter.SHOW_TEXT, null, false); + + while(next = treeWalker.nextNode()) { + nodes.push(next); + } + + return nodes; } -exports.EmoteModule = EmoteModule; \ No newline at end of file +function injectEmote(node) { + + if(typeof emotesTwitch === 'undefined') return; + + if(!node.parentElement) return; + + var parent = node.parentElement; + if(parent.tagName != "SPAN") return; + + var parentInnerHTML = parent.innerHTML; + var words = parentInnerHTML.split(" "); + + if(!words) return; + + words.some(function(word) { + if (emotesTwitch.hasOwnProperty(word)) { + parentInnerHTML = parentInnerHTML.replace(word, "<\/img>"); + } else if(typeof emotesFfz !== 'undefined') { + if(emotesFfz.hasOwnProperty(word)) { + parentInnerHTML = parentInnerHTML.replace(word, "<\/img>"); + } + } + }); + + parent.innerHTML = parentInnerHTML; + +}