/*jshint es5: true */ /*globals MIDI, React, App, $ */ /** * app.js * * Bootstrap app: * - connect to MIDI device; * - config vendors; * - instantiate main component; * - integrate with shell. */ (function () { 'use strict'; var remote, ipc, shell; // shell integration if (window.atom) { remote = window.atom.require('remote'); shell = window.atom.require('shell'); ipc = window.atom.require('ipc'); } // configs window.vex.defaultOptions.className = 'dialog-theme'; window.vex.dialog.buttons.YES.text = 'OK'; window.vex.dialog.buttons.NO.text = 'Annuler'; // bootstrap function bootstrap() { var main = React.renderComponent( App.components.Main(), $('#content')[0] ); // we're ready to receive shell options // and to show the window if (ipc) { ipc.send('ready'); ipc.on('options', function (options) { main.setProps({ url: options.file }); }); ipc.on('visible', function (state) { if (state) { main.resume(); } else { main.halt(); } }); window.onkeydown = function (e) { if (e.keyCode === 123 && remote) { remote.getCurrentWindow().toggleDevTools(); } }; } // handle links in default navigator, not in app if (shell) { $(document).on('click', 'a', function (e) { shell.openExternal($(this).attr('href')); e.preventDefault(); }); } } // on error, offer choice to retry or ignore function error(err) { var modal = App.components.Error({ title: "Erreur d'initialisation", error: err, canRetry: true, onRetry: function () { window.location.reload(); }, onClose: function () { bootstrap(); } }); ipc.send('ready'); modal.open(); } // establish connection to MIDI device App.MIDI.connect() .then(bootstrap) .catch(error); }());