diff --git a/eustia/get.js b/eustia/get.js new file mode 100644 index 0000000..248175d --- /dev/null +++ b/eustia/get.js @@ -0,0 +1,19 @@ +function exports(url, cb) +{ + var xhr = new window.XMLHttpRequest(); + + xhr.onload = function () + { + var status = xhr.status; + + if ((status >= 200 && status < 300) || status === 304) + { + cb(null, xhr.responseText); + } + }; + + xhr.onerror = function () { cb(xhr) }; + + xhr.open('GET', url); + xhr.send(); +} \ No newline at end of file diff --git a/src/Console/Console.es6 b/src/Console/Console.es6 index cb3505d..88f0620 100644 --- a/src/Console/Console.es6 +++ b/src/Console/Console.es6 @@ -24,11 +24,12 @@ export default class Console extends Tool overrideConsole() { var log = this._log, + origConsole = {}, winConsole = window.console; function override(name) { - var origin = winConsole[name]; + var origin = origConsole[name] = winConsole[name]; winConsole[name] = function () { @@ -38,9 +39,9 @@ export default class Console extends Tool }; } - var methods = ['log', 'error', 'info', 'warn', 'dir', 'time', 'timeEnd', 'clear']; + CONSOLE_METHOD.forEach((name) => override(name)); - methods.forEach((name) => override(name)); + this._origConsole = origConsole; return this; } @@ -61,7 +62,15 @@ export default class Console extends Tool { super.destroy(); - window.onerror = this._origOnerror; + var origOnerror = this._origOnerror; + if (origOnerror) window.onerror = origOnerror; + + var origConsole = this._origConsole; + if (origConsole) + { + var winConsole = window.console; + CONSOLE_METHOD.forEach((name) => winConsole[name] = origConsole[name]); + } } _appendTpl() { @@ -150,3 +159,5 @@ export default class Console extends Tool } } +const CONSOLE_METHOD = ['log', 'error', 'info', 'warn', 'dir', 'time', 'timeEnd', 'clear']; + diff --git a/src/DevTools/DevTools.es6 b/src/DevTools/DevTools.es6 index 9b9c7a2..bc456b9 100644 --- a/src/DevTools/DevTools.es6 +++ b/src/DevTools/DevTools.es6 @@ -10,10 +10,12 @@ function activeEruda(flag) window.localStorage.setItem('active-eruda', flag); } -export default class DevTools +export default class DevTools extends util.Emitter { constructor($parent) { + super(); + this._$parent = $parent; this._isShow = false; this._opacity = 1; @@ -53,7 +55,7 @@ export default class DevTools var name = tool.name; this._$tools.append('
'); - tool.init(this._$tools.find('.eruda-' + name)); + tool.init(this._$tools.find('.eruda-' + name), this); tool.active = false; this._tools[name] = tool; @@ -96,8 +98,12 @@ export default class DevTools var tool = tools[name]; if (!tool) return; + var lastTool = {}; + util.each(tools, (tool) => { + if (tool.active) lastTool = tool; + tool.active = false; tool.hide(); }); @@ -107,6 +113,8 @@ export default class DevTools this._navBar.activeTool(name); + this.emit('showTool', name, lastTool); + return this; } _initConfig() diff --git a/src/Resources/Resources.es6 b/src/Resources/Resources.es6 index 42dabd4..ea1a134 100644 --- a/src/Resources/Resources.es6 +++ b/src/Resources/Resources.es6 @@ -3,26 +3,6 @@ import util from '../lib/util' require('./Resources.scss'); -function getState(type, len) -{ - if (type === 'localStore' || len === 0) return ''; - - var warn = 0, danger = 0; - - switch (type) - { - case 'cookie': warn = 30; danger = 60; break; - case 'script': warn = 5; danger = 10; break; - case 'stylesheet': warn = 4; danger = 8; break; - case 'image': warn = 50; danger = 100; break; - } - - if (len >= danger) return 'eruda-danger'; - if (len >= warn) return 'eruda-warn'; - - return 'eruda-ok'; -} - export default class Resources extends Tool { constructor() @@ -36,10 +16,12 @@ export default class Resources extends Tool this._imageData = []; this._tpl = require('./Resources.hbs'); } - init($el) + init($el, parent) { super.init($el); + this._parent = parent; + this.refresh(); this._bindEvent(); } @@ -155,6 +137,8 @@ export default class Resources extends Tool { var self = this; + var parent = this._parent; + this._$el.on('click', '.refresh-local-storage', () => { this.refreshLocalStorage()._render(); @@ -179,9 +163,37 @@ export default class Resources extends Tool util.cookie.remove(key); self.refreshCookie()._render(); - }); + }).on('click', '.css-link', linkFactory('css')) + .on('click', '.js-link', linkFactory('js')); util.orientation.on('change', () => this._render()); + + function linkFactory(type) + { + return function (e) + { + var url = util.$(this).attr('href'); + + if (!isCrossOrig(url)) + { + e.preventDefault(); + + return util.get(url, (err, data) => + { + if (err) return; + + var sources = parent.get('sources'); + + sources.set({ + type: type, + val: data + }); + + parent.showTool('sources'); + }); + } + }; + } } _render() { @@ -213,4 +225,31 @@ export default class Resources extends Tool $li.css({height: $li.get(0).offsetWidth}); }, 150); } +} + +function getState(type, len) +{ + if (type === 'localStore' || len === 0) return ''; + + var warn = 0, danger = 0; + + switch (type) + { + case 'cookie': warn = 30; danger = 60; break; + case 'script': warn = 5; danger = 10; break; + case 'stylesheet': warn = 4; danger = 8; break; + case 'image': warn = 50; danger = 100; break; + } + + if (len >= danger) return 'eruda-danger'; + if (len >= warn) return 'eruda-warn'; + + return 'eruda-ok'; +} + +var origin = window.location.origin; + +function isCrossOrig(url) +{ + return !util.startWith(url, origin); } \ No newline at end of file diff --git a/src/Resources/Resources.hbs b/src/Resources/Resources.hbs index a819bc8..cae311f 100644 --- a/src/Resources/Resources.hbs +++ b/src/Resources/Resources.hbs @@ -63,7 +63,7 @@ {{#if scriptData}} {{#each scriptData}}