BetterDiscordApp-v1/dev/js/00core.js

276 lines
8.6 KiB
JavaScript
Raw Normal View History

2015-08-27 15:42:19 +02:00
/* BetterDiscordApp Core JavaScript
2016-04-10 14:43:27 +02:00
* Version: 1.53
2015-08-27 15:42:19 +02:00
* Author: Jiiks | http://jiiks.net
* Date: 27/08/2015 - 16:36
2016-04-10 14:43:27 +02:00
* Last Update: 02/04/2016
2015-08-27 15:42:19 +02:00
* https://github.com/Jiiks/BetterDiscordApp
*/
2015-08-29 08:55:06 +02:00
2016-04-11 09:41:17 +02:00
var BD;
2015-08-29 08:55:06 +02:00
2016-04-11 09:41:17 +02:00
var settingsPanel, emoteModule, utils, quickEmoteMenu, opublicServers, voiceMode, pluginModule, themeModule, customCssEditor;
2015-08-27 15:42:19 +02:00
2016-04-11 09:41:17 +02:00
var mainObserver;
var mainCore;
2015-08-29 08:55:06 +02:00
var settingsCookie = {};
2015-08-27 15:42:19 +02:00
2016-04-11 09:41:17 +02:00
function Core() {
BD = this;
}
2015-08-27 15:42:19 +02:00
2016-04-10 14:43:27 +02:00
Core.prototype.init = function () {
2015-12-16 12:21:46 +01:00
var self = this;
2016-04-11 09:41:17 +02:00
this.version = version;
this.jsVersion = jsVersion;
if (this.version < supportedVersion) {
this.alert("Not Supported", "BetterDiscord v" + this.version + "(your version)" + " is not supported by the latest js(" + this.jsVersion + ").<br><br> Please download the latest version from <a href='https://betterdiscord.net' target='_blank'>BetterDiscord.net</a>");
return;
}
2015-08-29 08:55:06 +02:00
2016-04-11 09:41:17 +02:00
this.utils = new Utils();
2015-08-27 15:42:19 +02:00
utils = new Utils();
2015-12-16 12:21:46 +01:00
utils.getHash();
2015-08-27 15:42:19 +02:00
emoteModule = new EmoteModule();
quickEmoteMenu = new QuickEmoteMenu();
voiceMode = new VoiceMode();
2015-08-27 15:42:19 +02:00
emoteModule.init();
2015-08-29 08:55:06 +02:00
this.initSettings();
this.initObserver();
//Incase were too fast
function gwDefer() {
console.log(new Date().getTime() + " Defer");
2016-04-10 14:43:27 +02:00
if ($(".guilds-wrapper .guilds").children().length > 0) {
console.log(new Date().getTime() + " Defer Loaded");
var guilds = $(".guilds>li:first-child");
2015-12-16 12:21:46 +01:00
var showChannelsButton = $("<button/>", {
class: "btn",
id: "bd-show-channels",
text: "R",
css: {
"cursor": "pointer"
},
2016-04-10 14:43:27 +02:00
click: function () {
2015-12-16 12:21:46 +01:00
settingsCookie["bda-gs-3"] = false;
$("body").removeClass("bd-minimal-chan");
self.saveSettings();
}
});
$(".guilds-wrapper").prepend(showChannelsButton);
opublicServers = new PublicServers();
2016-04-10 14:43:27 +02:00
customCssEditor = new CustomCssEditor();
2015-12-16 12:21:46 +01:00
pluginModule = new PluginModule();
pluginModule.loadPlugins();
2016-04-10 14:43:27 +02:00
if (typeof (themesupport2) !== "undefined") {
2015-12-16 12:21:46 +01:00
themeModule = new ThemeModule();
themeModule.loadThemes();
}
settingsPanel = new SettingsPanel();
settingsPanel.init();
2015-08-31 15:20:33 +02:00
quickEmoteMenu.init(false);
2016-04-10 14:43:27 +02:00
$("#tc-settings-button").on("click", function () {
settingsPanel.show();
});
window.addEventListener("beforeunload", function(){
if(settingsCookie["bda-dc-0"]){
$('.btn.btn-disconnect').click();
}
});
2015-12-16 12:21:46 +01:00
opublicServers.init();
emoteModule.autoCapitalize();
/*Display new features in BetterDiscord*/
2016-04-10 14:43:27 +02:00
if (settingsCookie["version"] < jsVersion) {
2015-12-16 12:21:46 +01:00
var cl = self.constructChangelog();
$("body").append(cl);
settingsCookie["version"] = jsVersion;
self.saveSettings();
}
2016-04-10 14:43:27 +02:00
2015-12-16 12:21:46 +01:00
$("head").append("<style>.CodeMirror{ min-width:100%; }</style>");
2016-04-10 14:43:27 +02:00
$("head").append('<style id="bdemotemenustyle"></style>');
2015-08-31 15:20:33 +02:00
} else {
2015-12-16 12:21:46 +01:00
setTimeout(gwDefer, 100);
2015-08-31 15:20:33 +02:00
}
}
2016-04-10 14:43:27 +02:00
$(document).ready(function () {
2015-12-16 12:21:46 +01:00
setTimeout(gwDefer, 1000);
});
};
2015-08-27 15:42:19 +02:00
2016-04-10 14:43:27 +02:00
Core.prototype.initSettings = function () {
if ($.cookie("better-discord") == undefined) {
2015-08-29 08:55:06 +02:00
settingsCookie = defaultCookie;
2015-08-29 10:48:20 +02:00
this.saveSettings();
2015-08-29 08:55:06 +02:00
} else {
2015-08-29 10:50:54 +02:00
this.loadSettings();
2015-08-29 08:55:06 +02:00
2016-04-10 14:43:27 +02:00
for (var setting in defaultCookie) {
if (settingsCookie[setting] == undefined) {
settingsCookie[setting] = defaultCookie[setting];
2015-08-29 10:48:20 +02:00
this.saveSettings();
2015-08-29 08:55:06 +02:00
}
2015-08-27 15:42:19 +02:00
}
}
};
2015-08-29 08:55:06 +02:00
2016-04-10 14:43:27 +02:00
Core.prototype.saveSettings = function () {
$.cookie("better-discord", JSON.stringify(settingsCookie), {
expires: 365,
path: '/'
});
};
2015-08-29 10:48:20 +02:00
2016-04-10 14:43:27 +02:00
Core.prototype.loadSettings = function () {
2015-08-29 10:48:20 +02:00
settingsCookie = JSON.parse($.cookie("better-discord"));
};
2015-08-29 10:48:20 +02:00
2016-04-10 14:43:27 +02:00
Core.prototype.initObserver = function () {
mainObserver = new MutationObserver(function (mutations) {
mutations.forEach(function (mutation) {
if($(mutation.target).find(".emoji-picker").length) {
var fc = mutation.target.firstChild;
if(fc.classList.contains("popout")) {
quickEmoteMenu.obsCallback($(fc));
}
}
if (typeof pluginModule !== "undefined") pluginModule.rawObserver(mutation);
if (mutation.target.getAttribute('class') != null) {
//console.log(mutation.target)
if(mutation.target.classList.contains('title-wrap') || mutation.target.classList.contains('chat')){
// quickEmoteMenu.obsCallback();
2015-12-16 12:21:46 +01:00
voiceMode.obsCallback();
2016-04-10 14:43:27 +02:00
if (typeof pluginModule !== "undefined") pluginModule.channelSwitch();
}
if (mutation.target.getAttribute('class').indexOf('scroller messages') != -1) {
if (typeof pluginModule !== "undefined") pluginModule.newMessage();
2015-08-29 21:02:20 +02:00
}
2015-08-29 08:55:06 +02:00
}
2015-08-29 10:50:54 +02:00
emoteModule.obsCallback(mutation);
2015-08-29 08:55:06 +02:00
});
});
//noinspection JSCheckFunctionSignatures
2016-04-10 14:43:27 +02:00
mainObserver.observe(document, {
childList: true,
subtree: true
});
2015-12-16 12:21:46 +01:00
};
2016-04-10 14:43:27 +02:00
Core.prototype.constructChangelog = function () {
2015-12-16 12:21:46 +01:00
var changeLog = '' +
'<div id="bd-wn-modal" class="modal" style="opacity:1;">' +
' <div class="modal-inner">' +
2016-04-10 14:43:27 +02:00
' <div id="bdcl" class="markdown-modal change-log"> ' +
' <div class="markdown-modal-header">' +
' <strong>What\'s new in BetterDiscord JS' + jsVersion + '</strong>' +
' <button class="markdown-modal-close" onclick=\'$("#bd-wn-modal").remove();\'></button>' +
2015-12-16 12:21:46 +01:00
' </div><!--header-->' +
' <div class="scroller-wrap">' +
' <div class="scroller">';
2016-04-10 14:43:27 +02:00
if (bdchangelog.changes != null) {
2015-12-16 12:21:46 +01:00
changeLog += '' +
'<h1 class="changelog-added">' +
' <span>New Stuff</span>' +
'</h1>' +
'<ul>';
2016-04-10 14:43:27 +02:00
for (var change in bdchangelog.changes) {
2015-12-16 12:21:46 +01:00
change = bdchangelog.changes[change];
changeLog += '' +
'<li>' +
2016-04-10 14:43:27 +02:00
' <strong>' + change.title + '</strong>' +
' <div>' + change.text + '</div>' +
2015-12-16 12:21:46 +01:00
'</li>';
}
changeLog += '</ul>';
}
2016-04-10 14:43:27 +02:00
if (bdchangelog.fixes != null) {
2015-12-16 12:21:46 +01:00
changeLog += '' +
'<h1 class="changelog-fixed">' +
' <span>Fixed</span>' +
'</h1>' +
'<ul>';
2016-04-10 14:43:27 +02:00
for (var fix in bdchangelog.fixes) {
2015-12-16 12:21:46 +01:00
fix = bdchangelog.fixes[fix];
changeLog += '' +
'<li>' +
2016-04-10 14:43:27 +02:00
' <strong>' + fix.title + '</strong>' +
' <div>' + fix.text + '</div>' +
2015-12-16 12:21:46 +01:00
'</li>';
}
changeLog += '</ul>';
}
2016-04-10 14:43:27 +02:00
if (bdchangelog.upcoming != null) {
2015-12-16 12:21:46 +01:00
changeLog += '' +
'<h1 class="changelog-in-progress">' +
' <span>Coming Soon</span>' +
'</h1>' +
'<ul>';
2016-04-10 14:43:27 +02:00
for (var upc in bdchangelog.upcoming) {
2015-12-16 12:21:46 +01:00
upc = bdchangelog.upcoming[upc];
changeLog += '' +
'<li>' +
2016-04-10 14:43:27 +02:00
' <strong>' + upc.title + '</strong>' +
' <div>' + upc.text + '</div>' +
2015-12-16 12:21:46 +01:00
'</li>';
}
changeLog += '</ul>';
}
changeLog += '' +
' </div><!--scoller-->' +
' </div><!--scroller-wrap-->' +
' <div class="footer">' +
' </div><!--footer-->' +
' </div><!--change-log-->' +
' </div><!--modal-inner-->' +
'</div><!--modal-->';
return changeLog;
};
2016-04-10 14:43:27 +02:00
Core.prototype.alert = function (title, text) {
$("body").append('' +
'<div class="bd-alert">' +
' <div class="bd-alert-header">' +
' <span>' + title + '</span>' +
' <div class="bd-alert-closebtn" onclick="$(this).parent().parent().remove();">×</div>' +
' </div>' +
' <div class="bd-alert-body">' +
' <div class="scroller-wrap dark fade">' +
' <div class="scroller">' + text + '</div>' +
' </div>' +
' </div>' +
'</div>');
2016-04-11 09:41:17 +02:00
};
Core.prototype.getUtils = function() {
return this.utils;
2016-04-10 14:43:27 +02:00
};