Adding WebUtil class for web & dom related startup tasks

This commit is contained in:
Jeffrey Morgan 2015-03-08 19:05:22 -04:00
parent ebb87a632a
commit e0fe1076a9
3 changed files with 92 additions and 74 deletions

View File

@ -1,87 +1,24 @@
var remote = require('remote');
require.main.paths.splice(0, 0, process.env.NODE_PATH);
var app = remote.require('app');
var bugsnag = require('bugsnag-js');
var remote = require('remote');
var ContainerStore = require('./ContainerStore');
var fs = require('fs');
var ipc = require('ipc');
var Menu = remote.require('menu');
var metrics = require('./Metrics');
var path = require('path');
var React = require('react');
var router = require('./Router');
var SetupStore = require('./SetupStore');
var template = require('./MenuTemplate');
var util = require('./Util');
var bugsnag = require('bugsnag-js');
var ipc = require('ipc');
var machine = require('./DockerMachine');
var metrics = require('./Metrics');
var router = require('./Router');
var template = require('./MenuTemplate');
var webUtil = require('./WebUtil');
window.addEventListener('resize', function () {
fs.writeFileSync(path.join(util.supportDir(), 'size'), JSON.stringify({
width: window.outerWidth,
height: window.outerHeight
}));
});
webUtil.addWindowSizeSaving();
webUtil.addLiveReload();
webUtil.addBugReporting();
webUtil.disableGlobalBackspace();
Menu.setApplicationMenu(Menu.buildFromTemplate(template()));
var settingsjson;
try {
settingsjson = require(path.join(__dirname, '..', 'settings.json'), 'utf8');
} catch (err) {
settingsjson = {};
}
if (process.env.NODE_ENV === 'development') {
var head = document.getElementsByTagName('head')[0];
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = 'http://localhost:35729/livereload.js';
head.appendChild(script);
}
if (settingsjson.bugsnag) {
bugsnag.apiKey = settingsjson.bugsnag;
bugsnag.autoNotify = true;
bugsnag.releaseStage = process.env.NODE_ENV === 'development' ? 'development' : 'production';
bugsnag.notifyReleaseStages = ['production'];
bugsnag.appVersion = app.getVersion();
bugsnag.metaData = {
beta: !!settingsjson.beta
};
bugsnag.beforeNotify = function(payload) {
var re = new RegExp(util.home().replace(/\s+/g, '\\s+'), 'g');
payload.stacktrace = payload.stacktrace.replace(/%20/g, ' ').replace(re, '<redacted homedir>');
payload.context = payload.context.replace(/%20/g, ' ').replace(re, '<redacted homedir>');
payload.file = payload.file.replace(/%20/g, ' ').replace(re, '<redacted homedir>');
payload.url = '<redacted url>';
};
}
document.onkeydown = function (e) {
e = e || window.event;
var doPrevent;
if (e.keyCode === 8) {
var d = e.srcElement || e.target;
if (d.tagName.toUpperCase() === 'INPUT' || d.tagName.toUpperCase() === 'TEXTAREA') {
doPrevent = d.readOnly || d.disabled;
} else {
doPrevent = true;
}
} else {
doPrevent = false;
}
if (doPrevent) {
e.preventDefault();
}
};
ipc.on('application:quitting', () => {
if (localStorage.getItem('settings.closeVMOnQuit') === 'true') {
machine.stop();
}
});
metrics.track('Started App');
metrics.track('app heartbeat');
setInterval(function () {
@ -89,6 +26,7 @@ setInterval(function () {
}, 14400000);
router.run(Handler => React.render(<Handler/>, document.body));
SetupStore.setup().then(() => {
Menu.setApplicationMenu(Menu.buildFromTemplate(template()));
ContainerStore.on(ContainerStore.SERVER_ERROR_EVENT, (err) => {
@ -107,3 +45,9 @@ SetupStore.setup().then(() => {
error: err
});
});
ipc.on('application:quitting', () => {
if (localStorage.getItem('settings.closeVMOnQuit') === 'true') {
machine.stop();
}
});

View File

@ -37,5 +37,12 @@ module.exports = {
packagejson: function () {
return JSON.parse(fs.readFileSync(path.join(__dirname, '..', 'package.json'), 'utf8'));
},
settingsjson: function () {
var settingsjson = {};
try {
settingsjson = JSON.parse(fs.readFileSync(path.join(__dirname, '..', 'settings.json'), 'utf8'));
} catch (err) {}
return settingsjson;
},
webPorts: ['80', '8000', '8080', '3000', '5000', '2368', '9200', '8983']
};

67
src/WebUtil.js Normal file
View File

@ -0,0 +1,67 @@
var app = require('remote').require('app');
var fs = require('fs');
var util = require('./Util');
var path = require('path');
var bugsnag = require('bugsnag-js');
var WebUtil = {
addWindowSizeSaving: function () {
window.addEventListener('resize', function () {
fs.writeFileSync(path.join(util.supportDir(), 'size'), JSON.stringify({
width: window.outerWidth,
height: window.outerHeight
}));
});
},
addLiveReload: function () {
if (process.env.NODE_ENV === 'development') {
var head = document.getElementsByTagName('head')[0];
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = 'http://localhost:35729/livereload.js';
head.appendChild(script);
}
},
addBugReporting: function () {
var settingsjson = util.settingsjson();
if (settingsjson.bugsnag) {
bugsnag.apiKey = settingsjson.bugsnag;
bugsnag.autoNotify = true;
bugsnag.releaseStage = process.env.NODE_ENV === 'development' ? 'development' : 'production';
bugsnag.notifyReleaseStages = ['production'];
bugsnag.appVersion = app.getVersion();
bugsnag.metaData = {
beta: !!settingsjson.beta
};
bugsnag.beforeNotify = function(payload) {
var re = new RegExp(util.home().replace(/\s+/g, '\\s+'), 'g');
payload.stacktrace = payload.stacktrace.replace(/%20/g, ' ').replace(re, '<redacted homedir>');
payload.context = payload.context.replace(/%20/g, ' ').replace(re, '<redacted homedir>');
payload.file = payload.file.replace(/%20/g, ' ').replace(re, '<redacted homedir>');
payload.url = '<redacted url>';
};
}
},
disableGlobalBackspace: function () {
document.onkeydown = function (e) {
e = e || window.event;
var doPrevent;
if (e.keyCode === 8) {
var d = e.srcElement || e.target;
if (d.tagName.toUpperCase() === 'INPUT' || d.tagName.toUpperCase() === 'TEXTAREA') {
doPrevent = d.readOnly || d.disabled;
} else {
doPrevent = true;
}
} else {
doPrevent = false;
}
if (doPrevent) {
e.preventDefault();
}
};
},
};
module.exports = WebUtil;