UNPKG

motion

Version:

motion - moving development forward

662 lines (501 loc) 25.9 kB
webpackJsonp([0],{ /***/ 0: /***/ function(module, exports, __webpack_require__) { 'use strict'; var _errors = __webpack_require__(1); var _errors2 = _interopRequireDefault(_errors); var _messages = __webpack_require__(2); var _messages2 = _interopRequireDefault(_messages); var _eventEmitter = __webpack_require__(67); var _eventEmitter2 = _interopRequireDefault(_eventEmitter); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var emitter = (0, _eventEmitter2.default)({}); window._DT = { emitter: emitter, data: null, // should be error on: function on(name, cb) { emitter.on(name, cb); }, timer: { // received info through script:add so we can time lastMsgInfo: null, //maps views to original time timing: {}, lastTimes: {}, hasLogged: false, done: function done(view) { var timing = Motion.timer.timing[view]; var time = +Date.now() - timing.start; if (!time) return; if (timing) { Motion.timer.lastTimes[view] = time; delete Motion.timer.timing[view]; } if (!Motion.timer.hasLogged) { setTimeout(function () { return Motion.timer.hasLogged = false; }); Motion.timer.lastTimes[view] = +Date.now() - timing.start; on.event('hot:finished', { time: time }); } Motion.timer.hasLogged = true; }, time: function time(view, info) { Motion.timer.timing[view] = info; } } }; var opts = { websocketPort: window._MOTION_WEBSOCKET_PORT }; (0, _errors2.default)(window._DT, opts); (0, _messages2.default)(window._DT, opts); /***/ }, /***/ 1: /***/ function(module, exports) { 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = run; exports.compileError = compileError; exports.compileSuccess = compileSuccess; var browser = undefined; var browserData = function browserData(data) { browser.data = data; }; // this is for using in runview function motionRuntimeError(message, file, line, col, error) { browserData({ message: message, file: file, line: line, col: col, stack: error && error.stack }); // console.log('got err', message, file, line, col, error) browser.emitter.emit('runtime:error'); } window.motionRuntimeError = motionRuntimeError; function run(b, opts) { browser = b; window.onViewLoaded = function () { return browserData('success', null); }; } function compileError(error) { if (error.loc) { var message = error.message; var fileName = error.fileName; var loc = error.loc; var stack = error.stack; browserData({ message: message, stack: stack, file: fileName, line: loc.line, col: loc.column }); } else if (error.lineNumber) { var message = error.message; var stack = error.stack; var fileName = error.fileName; var lineNumber = error.lineNumber; var column = error.column; browserData({ message: message, stack: stack, file: fileName, line: lineNumber, col: column }); } } function compileSuccess() { browserData(null); } /***/ }, /***/ 2: /***/ function(module, exports, __webpack_require__) { 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _promise = __webpack_require__(3); var _promise2 = _interopRequireDefault(_promise); exports.default = run; var _errors = __webpack_require__(1); var _favicon = __webpack_require__(58); var _socket = __webpack_require__(64); var _socket2 = _interopRequireDefault(_socket); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function run(browser, opts) { (0, _socket2.default)(browser, opts, { 'editor:location': function editorLocation(msg) { browser.editorLocation = msg; }, 'view:locations': function viewLocations(msg) { browser.viewLocations = msg; }, 'script:add': function scriptAdd(msg) { // Motion.timer.lastMsgInfo = { start: msg.startTime } replaceScript(msg); }, 'stylesheet:add': function stylesheetAdd(msg) { addSheet(msg.view); }, 'stylesheet:remove': function stylesheetRemove(msg) { removeSheet(msg.view); }, 'compile:error': function compileError(msg) { _favicon.favicon.bad(); (0, _errors.compileError)(msg.error); }, 'compile:success': function compileSuccess(msg) { _favicon.favicon.good(); (0, _errors.compileSuccess)(); }, 'packages:reload': reloadScript('__motionExternals'), 'internals:reload': reloadScript('__motionInternals', { reloadAll: true }), 'file:delete': function fileDelete(_ref) { var name = _ref.name; if (!Motion) return; // if attempting before initial load var views = _Motion.getFile(name); views.map(removeSheet); removeScript(name); Motion.deleteFile(name); }, 'file:outsideChange': function fileOutsideChange(_ref2) { var name = _ref2.name; var changed = _ref2.changed; _Motion.fileChanged[name] = changed; }, 'motion:opts': function motionOpts(opts) { window.__motionopts = opts; }, // coming from editor to browser 'editor:state': function editorState(state) { browser.editor = state; browser.emitter.emit('editor:state'); } }); } // tag loader is a throttler // it accepts requests to load tags // and once those tags load, it will continue function TagLoader() { var last = {}; var loading = {}; var wait = {}; return function (name, load) { var oldTag = last[name]; if (wait[name]) { return; } if (loading[name]) { wait[name] = true; return; } loading[name] = true; load(oldTag, onDone); function onDone(newTag) { last[name] = newTag; loading[name] = false; if (wait[name]) { wait[name] = false; load(last[name], onDone); } } }; } /* This should be a closed async loop for hot loading files. ws:add => addScript => tagloader => replaceTag => replaceTag => (tagLoader|null) */ var scriptSelector = function scriptSelector(src) { return 'script[src^="' + removeTime(removeBase(src)) + '"]'; }; var scriptUrl = function scriptUrl(name) { return '/_/' + name + '.js'; }; var findScript = function findScript(name) { return document.querySelector(scriptSelector(scriptUrl(name))); }; var sheetSelector = function sheetSelector(href) { return 'link[href^="' + removeTime(removeBase(href)) + '"]'; }; var sheetUrl = function sheetUrl(name) { return '/__/styles/' + name + '.css'; }; var findSheet = function findSheet(name) { return document.querySelector(sheetSelector(sheetUrl(name))); }; var scrLoad = TagLoader(); var cssLoad = TagLoader(); function addScript(src) { var path = src.replace('/_/', ''); var start = Date.now(); _socket2.default.send('script:load', { path: path }); scrLoad(src, function (lastTag, done) { var script = lastTag || document.querySelector(scriptSelector(src)) || createScript(src); replaceTag(script, 'src', function finish() { // console.log('script load took', Date.now() - start) _socket2.default.send('script:done', { path: path }); done(); }); }); } function addSheet(name) { cssLoad(name, function (lastTag, done) { replaceTag(lastTag || findSheet(name) || createSheet(sheetUrl(name)), 'href', done); }); } function getParent(tag) { if (tag.parentNode) return tag.parentNode; if (tag.nodeName == 'SCRIPT') return document.body;else return document.head; } function replaceTag(tag, attr) { var after = arguments.length <= 2 || arguments[2] === undefined ? function () {} : arguments[2]; if (!tag) return; var parent = getParent(tag); var clone = cloneNode(tag, attr); var already = false; var cielTimeout = undefined; var afterFinish = function afterFinish() { if (already) return; clearTimeout(cielTimeout); already = true; removeTag(tag, parent, function () { return after(clone); }); }; clone.onerror = afterFinish; clone.onload = afterFinish; parent.appendChild(clone); // ceil for slow loads cielTimeout = setTimeout(function () { if (already) return; removeTag(tag, tag.parentNode, afterFinish, { leftover: 1 }); }, 120); } function removeTag(tag, parent, cb) { var _ref3 = arguments.length <= 3 || arguments[3] === undefined ? {} : arguments[3]; var _ref3$leftover = _ref3.leftover; var leftover = _ref3$leftover === undefined ? 2 : _ref3$leftover; try { parent.removeChild(tag); setTimeout(cb); } catch (e) { var isScript = tag.nodeName == 'SCRIPT'; var tags = document.querySelectorAll(isScript ? scriptSelector(tag.src) : sheetSelector(tag.href)); // attempt force removal for (var i = 0; i < tags.length - leftover; i++) { var _tag = tags[i]; try { _tag.parentNode.removeChild(_tag); } catch (e) { try { document.body.removeChild(_tag); document.head.removeChild(_tag); } catch (e) {/* oh well */} } } // wait a bit longer after recovery setTimeout(cb, 30); } } function reloadScript(id) { var opts = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; return function (data) { var el = document.getElementById(id); if (!el) return; var finish = opts.reloadAll ? function () { return reloadImportScripts(data); } : renderMotion; var tag = replaceTag(el, 'src', finish); }; } function replaceScript(_ref4, cb) { var name = _ref4.name; var timestamp = _ref4.timestamp; var src = _ref4.src; addScript(src || '/_' + name); } var getScriptsByPaths = function getScriptsByPaths(paths) { return paths.map(function (path) { return document.querySelector('.__motionScript[src*="' + path + '"]'); }); }; function reloadImportScripts() { var _ref5 = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; var importers = _ref5.importers; // only reload stuff thats changed with imports, if possible var removeByImporter = importers && importers.length; var scripts = removeByImporter ? getScriptsByPaths(importers) : document.querySelectorAll('.__motionScript'); if (!scripts.length) return; var total = scripts.length; if (removeByImporter) importers.forEach(_Motion.resetViewsInFile);else _Motion.resetViewState(); var scriptLoaders = [];[].forEach.call(scripts, function (script) { return scriptLoaders.push(new _promise2.default(function (resolve) { return replaceTag(script, 'src', resolve); })); }); _promise2.default.all(scriptLoaders).then(function () { Motion.render(); }); } var renderAttempts = 0; function renderMotion() { if (renderAttempts > 10) { renderAttempts = 0; return; } if (typeof Motion != 'undefined') { setTimeout(Motion.render); renderAttempts = 0; } else { renderAttempts++; setTimeout(renderMotion, 50); } } function removeBase(str) { return str.replace(/^http\:\/\/[^/]+/, ''); } function removeTime(str) { return str.replace(/\?[0-9]+$/, ''); } function replaceTime(str) { return removeTime(str) + ('?' + Date.now()); } function createScript(src) { var tag = document.createElement('script'); tag.src = src; return tag; } function createSheet(href) { var tag = document.createElement('link'); tag.href = href; tag.rel = "stylesheet"; return tag; } function cloneNode(node, attr) { var clone = undefined; if (node.tagName != 'SCRIPT') { clone = node.cloneNode(false); } else { clone = document.createElement('script'); var attrs = node.attributes; for (var i = 0; i < attrs.length; i++) { if (attrs[i].name != 'src') clone.setAttribute(attrs[i].name, attrs[i].value); } } clone.setAttribute(attr, replaceTime(node.getAttribute(attr))); return clone; } function removeSheet(name) { var tag = findSheet(name); if (tag && tag.parentNode) tag.parentNode.removeChild(tag); } function removeScript(name) { var tag = findScript(name.replace('.js', '')); if (tag && tag.parentNode) { tag.parentNode.removeChild(tag); Motion.removeFile(name); } } /***/ }, /***/ 58: /***/ function(module, exports, __webpack_require__) { 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _keys = __webpack_require__(59); var _keys2 = _interopRequireDefault(_keys); exports.favicon = favicon; function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var icons = { yellow: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHsAAAB7CAYAAABUx/9/AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3hpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpjNjQ5ZWYyZC0zZWU3LTQ5YWUtOTUwNS01NTg4OTAwNTk0YTgiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6OEU2NUFGRkFDREUyMTFFNTg1NDZDOTUyNzBCRkU3QTciIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OEU2NUFGRjlDREUyMTFFNTg1NDZDOTUyNzBCRkU3QTciIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpjNjQ5ZWYyZC0zZWU3LTQ5YWUtOTUwNS01NTg4OTAwNTk0YTgiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6YzY0OWVmMmQtM2VlNy00OWFlLTk1MDUtNTU4ODkwMDU5NGE4Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+VYP/cAAAA2lJREFUeNrsnc9vjEEYx2dFT7Q9E1EORMSVZP1M1N/AXiSr9C4IN4c6Iu6IdRDE38CloRHhJqL2QGnac1tOFa/nyTsrlZB0mXnnmXc/n+R7a/Z9Mp99Z+Z9d2baKIrCwWCwgSZANiAbkA3IBmQDsgHZgGxANiAbkI1sQDYgG5ANyAZkA7IB2YBsQDYgG9mAbEA2IBuQDcgGZAOyAdmAbEA2sgHZgGxANiAbbLDReoHfXSOjxiyQnZAtknHJYckeyS7JJsmoZEnyTdKVvJc8lzyTLNa1MRrWTzj8hzt7SHJKMiE51udQ9UMyLbkneSxZrdOdXSfZ+odtyVXJjgCX/iS5JulICmTbka3d833JwQglzPgvUTd32XWYjWuX/TqSaOc/942kxaNXWs5LHklGIl9nWPJQcgHZadCGv+XH6kqGPMlNyUVm49WO2Sf9bDnFQ3jhu/QnTNDiy97tx+jhhGWtSPZLZpmgxe1KO4lF98bwTqKeZWBktyPOuvulKTnDmB2nG9c3Yx9cmBcmoZjzz/irdONhaRkTrYzl9Pydk+wJ6hqMbnyr5IvRL6f+eLJNskg3HobjhmvVusbpxsNxyHh9R5Edjr3G69uH7HDsNF7fdmSHY9R4fSM5NGIus/Ec/jtsg9l4GJaN17dCNx6OJb6MgyP7o/H6PiM7HO+M1/cW2eF4Yby+aWbj4Wbj+m583tlcLKANqO/GF5iNh2HBleu3LTLj66MbD8hto3XdyaUBc1uporsyxgyVx0qVSGiDThmracr1ufmPO3t9d7bzEzSdmTcNlPbSlYsffzUgd3b4ma+u6Ez9elKv33Z5vLPPVraiC/PPJWzowl9/NreGy3Wvl269uZzo2lfcH7b+IDsuNySXKrzDC3+967k2WB0247f8s+7miGV8lUy6cjPhX2FjX3zZzj/rPpAciFDCK8lpV+5GcTnLrss5aF3/OHbWlS86QjDnP6+5HtF049Xd2WsZ8l27ijri+j8tSY/Iuus4LSkL2WvRc9BOuHLdee8cNB3bdYHgsh+Le+eg6cuap+4/zkFDdlrZlYJsYIIGyAZkA7IB2YBsZNMEyAZkA7IB2YBsQDYgG5ANyAZkA7KRDcgGZAOyAdmAbEA2IBuQDcgGZCMbkA3IBmQDsgHZgGxANiAbkA2/81OAAQB8MsT8ziunpwAAAABJRU5ErkJggg==', red: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHsAAAB7CAYAAABUx/9/AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3hpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpjNjQ5ZWYyZC0zZWU3LTQ5YWUtOTUwNS01NTg4OTAwNTk0YTgiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QTEzREY1Q0ZDREUyMTFFNTg1NDZDOTUyNzBCRkU3QTciIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QTEzREY1Q0VDREUyMTFFNTg1NDZDOTUyNzBCRkU3QTciIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpjNjQ5ZWYyZC0zZWU3LTQ5YWUtOTUwNS01NTg4OTAwNTk0YTgiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6YzY0OWVmMmQtM2VlNy00OWFlLTk1MDUtNTU4ODkwMDU5NGE4Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+uqJnXAAAA3VJREFUeNrsnc1rE0EYhzeiJ21zVsToISriSU9+4Ff9G2rxILUKvYqKeu4pUIvnalWwUKV/gwoGrSJ6E7HxIFEw59Z6KjT+XvoWPAmV2ezM5nngx0JJZ97M09nNbnanlW63m0F/sIUhQDYgG5ANyAZkA7IB2YBsQDYgG5CNbEA2IBuQDcgGZAOyAdmAbEA2IBvZgGxANiAbkA3IBmQDsgHZgGxANrIB2YBsQDYgG+Jga+pvoD1+p9D+a9MNZEfCTmVIOakcVOrKdqWqLCm/la/KF+W18kLpMLPTYZtyQRlTTv/jUFX17PLXjStrSlN5pDxTVjlmx0lFuay0lFnl7H+8P3v9GeWJtzPm7SI7Iuq+G7YZuTdQm9bOQ2+3juw4sF32B+V4Tu1bux+VEWQX+0n8mjZPlcGcuxpQ5pTryC5GtA38vR4eU62fKeUGsnsrelibuwV1P6kMI7s3ovdrM1Pgp+SK938A2fmKtoF+7MfQIhnwOirIzo/RHD91b5Zjfl6fzoWIVP5HiGa1XRlrBTyPDlKWnYPXphurzOywjEQm2qildP6dkuwx6uqD3bh24fZlxY9I/zjty5Pd2pV3mNlhOBdxrVbXELvxcJyIvL5TyA7HocjrO4zscOyLvL49yA5HNfL6BpHdP4M5gOxwLEde3y9kh2OJP8b+kf0t8vq+IzscnyOv7xOyw/Em8vqayA7HSyXWi/hdrw/ZIahNN35qsxBpeQteH7IDcj/Suh6kMoApybb7w9uR1WT1zCE7/K7cbv2ZiKysiVRuSUptZht2R+fbSGp55/VkyM5ndtsnX7ujs+jLk9b/aMRnCKWY2SZ8UZurBQ501/tfTG3sknz8R8LntblVUPe3lfkUxy3ZB/sk3J71utnDGd71/iZTHbOkH9mVcHuq8qKyknNXK97PVMrjVYaH8W3tkyPK+5zat3aPej8ZsovHVjyyZ6+uZOEuvLS9PWu3VYZBKtMCOnazvq2pYuufXFJe+c8220bTf7/u7a2VZYDKuDSWXdGa9dg6aOez9fvON9ZB25Gt39O27MfijXXQ7GvU5xnroCVL5y/xfU8yj+wCx2xANiAb2YBsQDYgG5ANyAZkA7IB2YBsQDYgG9mAbEA2IBuQDcgGZAOyAdmAbEA2sgHZgGxANiAbkA3IBmQDsgHZgGxkA7KhNPwRYADHXZyNMi8vGAAAAABJRU5ErkJggg==', green: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHsAAAB7CAYAAABUx/9/AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3hpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpjNjQ5ZWYyZC0zZWU3LTQ5YWUtOTUwNS01NTg4OTAwNTk0YTgiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QTEzREY1Q0JDREUyMTFFNTg1NDZDOTUyNzBCRkU3QTciIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QTEzREY1Q0FDREUyMTFFNTg1NDZDOTUyNzBCRkU3QTciIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpjNjQ5ZWYyZC0zZWU3LTQ5YWUtOTUwNS01NTg4OTAwNTk0YTgiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6YzY0OWVmMmQtM2VlNy00OWFlLTk1MDUtNTU4ODkwMDU5NGE4Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+kpvnRAAAA3RJREFUeNrsnc1rE0EYhzeiJ01zVsSPQ1SCJz35gVbr31CLB4lR8Coqeu+1Fu9+NVio0r9BJQatInqTYuNBomDOrfVU6Pp76RQ8CZXZ7Mzu88CPhZLOvJmns5vd7E4raZomUA62MQTIBmQDsgHZgGxANiAbkA3IBmQDspENyAZkA7IB2YBsQDYgG5ANyAZkIxuQDcgGZAOyAdmAbEA2IBuQDchGNiAbkA3IBmRDGGyP/Q2MLjZz7b/TaCM7EHYrY8pp5YhSV3YqNWVZ+a18Vb4ob5SXyoCZHQ87lItKSzn7j0NVzWWPe911ZV3pKk+U58oax+wwqShXlJ4yq5z7j/dnrx9Vnrp2Wq5dZAdE3e2GbUYe8NSmtfPYtVtHdhjYLvujcjKj9q3dT8oEsvP9JH5Dm2fKSMZdVZU55Say8xFtA39/iMdU62dauYXs4Yoe1+ZeTt1PKePIHo7oQ9o8yvFTcsX1fxjZ2Yq2gZ5xx9A8qbo6KsjOjmaGn7q3ygl3Xh/PhYhY/keIZrVdGet5PI/2Qd/OwTuN9hoz2y8TgYk29sd0/h2T7BZ1lWA3rl24fVnxI9A/TvvyZK925QNmth/OB1yr1TXGbtwfpwKv7wyy/dEIvL6jyPbHwcDr24dsf9QCr28E2eUZzCqy/bESeH2/kO2PZf4YyyP7W+D1fUe2PxYDr+8zsv3xNvD6usj2xysl1Iv4qasP2T7oNNo/tVkItLwFVx+yPfIg0LoexjKAMcm2+8P7gdVk9cwh2/+u3G79mQysrMlYbkmKbWYbdkfnu0Bqee/qSZCdzey2T752R2felyet/2bAZwiFmNkmfEmbazkOdOr6X4pt7KJ8/EfC57W5k1P3d5X5GMct2gf7JNye9bo9xBmeuv6mYh2zqB/ZlXB7qvKSsppxV6uun+mYx6sID+Pb2ifHlA8ZtW/tHnf9JMjOH1vxyJ69upr4u/DSd+1Zu70iDFKRFtCxm/VtTRVb/+Sy8tr9bKttdN3v111760UZoCIujWVXtGZdbB20C8nGfeeb66DtSjbuaVtxx+LNddDsa9QXCeugRcvgL/GlJ5pHdoFjNiAbkI1sQDYgG5ANyAZkA7IB2YBsQDYgG5CNbEA2IBuQDcgGZAOyAdmAbEA2IBvZgGxANiAbkA3IBmQDsgHZgGxANrIB2VAY/ggwACg0nbVqw0xhAAAAAElFTkSuQmCC', grey: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHsAAAB7CAYAAABUx/9/AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3hpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpjNjQ5ZWYyZC0zZWU3LTQ5YWUtOTUwNS01NTg4OTAwNTk0YTgiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6OEU2NUFGRkVDREUyMTFFNTg1NDZDOTUyNzBCRkU3QTciIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OEU2NUFGRkRDREUyMTFFNTg1NDZDOTUyNzBCRkU3QTciIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpjNjQ5ZWYyZC0zZWU3LTQ5YWUtOTUwNS01NTg4OTAwNTk0YTgiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6YzY0OWVmMmQtM2VlNy00OWFlLTk1MDUtNTU4ODkwMDU5NGE4Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+Cq5CmgAAA3NJREFUeNrsnTtrFFEYhmdFK022VsRLsSpipZUXvMWfMMRgITEKtqKifdoY7L2CgShhf4IKLhpFtBMxayGr4NaJsQpkfT/yBayEyJmdc2afB14Gwuacb8+TM7MzO3NS6/V6GQwGmxgCZAOyAdmAbEA2IBuQDcgGZAOyAdnIBmQDsgHZgGxANiAbkA3IBmQDspENyAZkA7IB2YBsQDYgG5ANyAZkIxuQDcgGZAOyIQ42p/4Gms1mqf3neY7sSNiujCgnlANKQ9mq1JVF5bfyVfmivFZeKF1mdjpsUc4rE8qpfxyq6p4d/rqryqrSUh4pz5QVjtlxUlMuKW1lRjnzH+/PXn9aeeLtTHi7yI6Ihu+GbUbuCdSmtfPQ220gOw5sl/1BOVZQ+9buR2UM2eV+Er+mzVNluOCuhpRZ5TqyyxFtA3+3j8dU62dauYHs/ooe1eZOSd1PKaPI7o/ofdo8KPFTcs3734/sYkXbQD/2Y2iZDHkdNWQXx3iBn7o3ylE/r0/nQkQq/yNEs9qujLUDnkeHoGPn4HmerzCzwzIWmWhjd0rn3ynJnqCuAdiNaxduX1b8iPSP07482aldeZeZHYazEddqdY2wGw/H8cjrO4nscByMvL5DyA7H3sjr24XscNQjr28Y2YMzmEPIDsdS5PX9QnY4FvljHBzZ3yKv7zuyw/E58vo+ITscbyKvr4XscLxUYr2I3/P6kB2CPM9/ajMfaXnzXh+yA3Iv0rrupzKAKcm2+8M7kdVk9cwiO/yu3G79mYysrMlUbklKbWYbdkfn20hqeef1ZMguZnbbJ1+7o7Psy5PW/3jEZwiVmNkmfEGbKyUOdM/7X0ht7JJ8/EfC57S5VVL3t5W5FMct2Qf7JNye9brZxxne8/6mUh2zpB/ZlXB7qvKCslxwV8vez3TK41WFh/Ft7ZPDyvuC2rd2j3g/GbLLx1Y8smevLmfhLrx0vD1rt12FQarSAjp2s76tqWLrn1xUXvnPNtpGy3+/4e2tVmWAqrg0ll3RmvHYOmjnsrX7ztfXQduWrd3TtuTH4vV10Oxr1OcZ66AlS/cv8QNPMo/sAsdsQDYgG9mAbEA2IBuQDcgGZAOyAdmAbEA2IBvZgGxANiAbkA3IBmQDsgHZgGxANrIB2YBsQDYgG5ANyAZkA7IB2YBsZAOyoTL8EWAA2cybfeJOR1cAAAAASUVORK5CYII=' }; function favicon(state) { var icon = document.querySelector('link[rel="icon"]'); if (!icon) return; icon.href = icons[state]; } var states = { good: 'green', bad: 'red', off: 'grey', wait: 'yellow' }; // helpers favicon.good() (0, _keys2.default)(states).forEach(function (key) { favicon[key] = function () { return favicon(states[key]); }; }); /***/ }, /***/ 64: /***/ function(module, exports, __webpack_require__) { 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _stringify = __webpack_require__(65); var _stringify2 = _interopRequireDefault(_stringify); exports.default = socket; var _favicon = __webpack_require__(58); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var opts = undefined; var browser = undefined; var actions = undefined; var isOpening = false; var isOpen = false; var ws = null; function socket(_browser, _opts, _actions) { opts = _opts; browser = _browser; actions = _actions; open(); browser.messageEditor = function (obj) { socket.send('editor', obj); }; } socket.send = function send(type, obj) { obj = obj || {}; obj._type = type; ws.send((0, _stringify2.default)(obj)); }; function open() { if (isOpening) return; isOpening = true; ws = new WebSocket('ws://localhost:' + opts.websocketPort + '/'); ws.onopen = onOpen; ws.onmessage = onMessage; ws.onerror = reconnect; ws.onclose = reconnect; } function onOpen() { isOpen = true; isOpening = false; reconnecting = false; _favicon.favicon.good(); } function onMessage(message) { message = JSON.parse(message.data); if (localStorage.getItem('__motionLog')) console.log('socket', 'onMessage', 'message', message && message._type, message); if (!message) return; var action = actions[message._type]; if (action) action(message); browser.data = message; browser.emitter.emit(message._type); } var tries = undefined; var reconnecting = false; function reconnect() { _favicon.favicon.off(); isOpening = false; isOpen = false; if (ws) ws.close(); if (reconnecting) return; reconnecting = true; tries = 0; reconnector(); } function reconnector() { if (isOpen || tries > 50) return; open(); // delay more and more in between tries++; var delay = tries * 1000; setTimeout(reconnector, delay); } /***/ } }); //# sourceMappingURL=devtools.dev.js.map