This commit is contained in:
Jiiks 2015-08-29 12:36:47 +03:00
parent 826e286de1
commit a14b4fa630
1 changed files with 151 additions and 78 deletions

View File

@ -1,10 +1,16 @@
/* BetterDiscordApp Core JavaScript
* Version: 1.0
* Version: 1.2
* Author: Jiiks | http://jiiks.net
* Date: 27/08/2015 - 16:36
* Last Update: 29/08/2015 - 11:48
* 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 +18,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":jsVersion,
"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($("<li/>", {id:"tc-settings-li"}).append($("<div/>", { class: "guild-inner" }).append($("<a/>").append($("<div/>", { 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,21 +79,53 @@ 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($.cookie("better-discord") == undefined) {
settingsCookie = defaultCookie;
this.saveSettings();
} else {
this.loadSettings();
for(var setting in defaultCookie) {
if(settingsCookie[setting] == undefined) {
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(mutations) {
mutations.forEach(function(mutation) {
if(mutation.target.getAttribute('class').indexOf("titlebar") != -1) {
quickEmoteMenu.obsCallback();
}
emoteModule.obsCallback(mutation);
});
});
mainObserver.observe(document, { childList: true, subtree: true });
}
/* BetterDiscordApp EmoteModule JavaScript
* Version: 1.2
* Version: 1.3
* Author: Jiiks | http://jiiks.net
* Date: 26/08/2015 - 15:29
* Last Update: 29/08/2015 - 11:46
* https://github.com/Jiiks/BetterDiscordApp
* Note: Due to conflicts autocapitalize only supports global emotes
*/
@ -102,24 +143,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) {
@ -171,9 +208,12 @@ EmoteModule.prototype.autoCapitalize = function() {
var self = this;
console.log("autocap");
$('body').delegate($(".channel-textarea-inner textarea"), 'keyup change paste', function() {
if(!autoCapitalize) return;
if(!settingsCookie["bda-es-4"]) return;
var text = $(".channel-textarea-inner textarea").val();
if(text == undefined) return;
var lastWord = text.split(" ").pop();
if(lastWord.length > 3) {
var ret = self.capitalize(lastWord.toLowerCase());
@ -209,31 +249,40 @@ PublicServers.prototype.init = function() {
}
/* BetterDiscordApp QuickEmoteMenu JavaScript
* Version: 1.1
* Version: 1.2
* Author: Jiiks | http://jiiks.net
* Date: 26/08/2015 - 11:49
* Last Update: 27/08/2015 - 13:43
* Last Update: 29/08/2015 - 11:46
* 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 = $("<div/>", { id: "emote-menu" });
var emoteMenuHeader = $("<div/>", { id: "emote-menu-header" }).append($("<span/>", { text: "Global Emotes" }));
var emoteMenuBody = $("<div/>", { id: "emote-menu-inner" });
emoteMenu.append(emoteMenuHeader);
emoteMenu.append(emoteMenuBody);
var emoteBtn = $("<div/>", { id:"twitchcord-button-container", style:"display:none" }).append($("<button/>", { id: "twitchcord-button", onclick: "return false;" }));
emoteBtn = $("<div/>", { id:"twitchcord-button-container", style:"display:none" }).append($("<button/>", { id: "twitchcord-button", onclick: "return false;" }));
$(".content.flex-spacer.flex-horizontal .flex-spacer.flex-vertical form").append(emoteBtn);
emoteMenu.detach();
emoteBtn.append(emoteMenu);
$("#twitchcord-button").on("click", function() {
menuOpen = !menuOpen;
if(menuOpen) {
@ -245,34 +294,59 @@ QuickEmoteMenu.prototype.init = function () {
}
});
if(settingsCookie["bda-es-qme"]) {
if(settingsCookie["bda-es-0"]) {
emoteBtn.show();
}
if(!reload) {
$(".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);
});
}
}
QuickEmoteMenu.prototype.obsCallback = function() {
if(!emoteBtn) return;
if(!$(".content.flex-spacer.flex-horizontal .flex-spacer.flex-vertical form")) return;
tcbtn = $("#twitchcord-button-container");
if(tcbtn.parent().prop("tagName") == undefined) {
quickEmoteMenu = new QuickEmoteMenu();
quickEmoteMenu.init(true);
}
}
QuickEmoteMenu.prototype.initEmoteList = function() {
emoteMenu = $("<div/>", { id: "emote-menu" });
var emoteMenuHeader = $("<div/>", { id: "emote-menu-header" }).append($("<span/>", { text: "Global Emotes" }));
var emoteMenuBody = $("<div/>", { id: "emote-menu-inner" });
emoteMenu.append(emoteMenuHeader);
emoteMenu.append(emoteMenuBody);
for(var emote in globalEmotes) {
var command = emote;
var id = globalEmotes[emote];
emoteMenuBody.append($("<div/>" , { class: "emote-container" }).append($("<img/>", { class: "emote-icon", id: emote, src: "https://static-cdn.jtvnw.net/emoticons/v1/"+id+"/1.0", title: emote })));
}
$(".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);
});
}
/* BetterDiscordApp Settings Panel JavaScript
* Version: 1.1
* Version: 1.2
* Author: Jiiks | http://jiiks.net
* Date: 26/08/2015 - 11:54
* Last Update: 26/08/2015 - 19:38
* Last Update: 29/08/2015 - 11:47
* https://github.com/Jiiks/BetterDiscordApp
*/
var links = { "Check for updates": "#", "Jiiks.net": "http://jiiks.net", "Twitter": "http://twitter.com/jiiksi", "Github": "https://github.com/jiiks" };
function SettingsPanel() {
}
@ -303,7 +377,7 @@ SettingsPanel.prototype.init = function() {
})
var settingsFooter = $("<div/>", { id: "tc-settings-panel-footer" });
settingsFooter.append($("<span/>", { id: "tc-about", text: "BetterDiscord v" + version + " by Jiiks | Settings are automatically saved." } ));
settingsFooter.append($("<span/>", { id: "tc-about", text: "BDA v" + version + "(js "+jsVersion+") by Jiiks | Settings are automatically saved." } ));
var tcLinks = $("<span/>", { id: "tc-links" });
$.each(links, function(key, value) {
tcLinks.append($("<a/>", { href: value, text: key }));
@ -345,15 +419,14 @@ SettingsPanel.prototype.handler = function(e){
swoff.addClass("active");
}
$.cookie("better-discord", JSON.stringify(settingsCookie));
if(settingsCookie["bda-es-qme"]) {
if(settingsCookie["bda-es-0"]) {
$("#twitchcord-button-container").show();
} else {
$("#twitchcord-button-container").hide();
}
autoCapitalize = settingsCookie["bda-es-ace"];
core.saveSettings();
}