From e0fe1076a9aeb9f2c1e1f35dd69ca82508fe032f Mon Sep 17 00:00:00 2001 From: Jeffrey Morgan Date: Sun, 8 Mar 2015 19:05:22 -0400 Subject: [PATCH] Adding WebUtil class for web & dom related startup tasks --- src/Main.js | 92 ++++++++++---------------------------------------- src/Util.js | 7 ++++ src/WebUtil.js | 67 ++++++++++++++++++++++++++++++++++++ 3 files changed, 92 insertions(+), 74 deletions(-) create mode 100644 src/WebUtil.js diff --git a/src/Main.js b/src/Main.js index 31cc14f0ef..c0df3ed256 100644 --- a/src/Main.js +++ b/src/Main.js @@ -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, ''); - payload.context = payload.context.replace(/%20/g, ' ').replace(re, ''); - payload.file = payload.file.replace(/%20/g, ' ').replace(re, ''); - payload.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(, 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(); + } +}); diff --git a/src/Util.js b/src/Util.js index 2853bbea17..a9ab1b2e0d 100644 --- a/src/Util.js +++ b/src/Util.js @@ -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'] }; diff --git a/src/WebUtil.js b/src/WebUtil.js new file mode 100644 index 0000000000..dca2a9e67d --- /dev/null +++ b/src/WebUtil.js @@ -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, ''); + payload.context = payload.context.replace(/%20/g, ' ').replace(re, ''); + payload.file = payload.file.replace(/%20/g, ' ').replace(re, ''); + payload.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;