BetterDiscordApp-v2/lib/Utils.js

107 lines
3.2 KiB
JavaScript

/* BetterDiscordApp Utils and Helper functions
* Version: 1.2
* Author: Jiiks | http://jiiks.net
* Date: 25/08/2015 - 09:19
* Last Updated: 29/08/2015 - 22:31
* https://github.com/Jiiks/BetterDiscordApp
*/
var https = require('https');
var _mainWindow;
function Utils(mainWindow) {
_mainWindow = mainWindow;
}
//Get browser mainwindow
function getMainWindow() {
return _mainWindow;
}
//Download using http
Utils.prototype.download = function(host, path, callback) {
var options = {
host: host,
path: path,
headers: {'user-agent': 'Mozilla/5.0'},
}
https.get(options, function(res) {
var data = "";
res.on('data', function(chunk) {
data += chunk;
});
res.on("end", function() {
callback(data);
});
}).on("error", function() {
callback(null);
});
}
Utils.prototype.getHash = function(callback) {
this.download("api.github.com", "/repos/Jiiks/BetterDiscordApp/commits/master", function(data) {
callback(JSON.parse(data).sha);
});
}
//Get Webcontents
Utils.prototype.getWebContents = function() {
return getMainWindow().webContents;
}
//Js logger
Utils.prototype.jsLog = function(message, type) {
switch(type) {
case "log":
this.execJs('console.log("BetterDiscord: ' + message + '");');
break;
case "warn":
this.execJs('console.warn("BetterDiscord: ' + message + '");');
break;
case "error":
this.execJs('console.error("BetterDiscord: ' + message + '");');
break;
}
}
//Logger
Utils.prototype.log = function(message) {
console.log("BetterDiscrod: " + message);
}
//Execute javascript
Utils.prototype.execJs = function(js) {
this.getWebContents().executeJavaScript(js);
}
//Parse and execute javascript
Utils.prototype.execJsParse = function(js) {
this.execJs(js); //TODO
}
//Css internal style injector
Utils.prototype.injectStylesheet = function(url) {
var self = this;
this.download(url, function(data) {
var js = 'var style = document.createElement("style"); style.type = "text/css"; style.innerHTML = "'+data+'";';
self.injectToElementByTag("head", js, "style");
});
}
Utils.prototype.headStyleSheet = function(url) {
this.execJs('(function() { var stylesheet = document.createElement("link"); stylesheet.type = "text/css"; document.getElementsByTagName("head")[0].appendChild(stylesheet); stylesheet.href = "'+url+'" })();')
}
Utils.prototype.injectJavaScript = function(url, jquery) {
if(!jquery) {
this.execJs('(function() { var script = document.createElement("script"); script.type = "text/javascript"; document.getElementsByTagName("body")[0].appendChild(script); script.src = "' + url + '"; })();');
}else {
this.execJs(' (function() { function injectJs() { var script = document.createElement("script"); script.type = "text/javascript"; document.getElementsByTagName("body")[0].appendChild(script); script.src = "' + url + '"; } function jqDefer() { if(window.jQuery) { injectJs(); }else{ setTimeout(function() { jqDefer(); }, 100) } } jqDefer(); })(); ');
}
}
exports.Utils = Utils;