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;
+
+}