├── .gitignore
├── LICENSE
├── README.md
├── build
├── build.js
├── config.js
└── env.js
├── demo
├── template.html
└── test.html
├── dist
├── console.js
├── console.js.map
└── console.min.js
├── images
├── close.png
└── open.png
├── package.json
└── src
├── css
└── console.css
├── index.js
├── lib
├── Base.js
├── Console.js
├── Elements.js
├── domUtils.js
└── eventsMap.js
└── template
└── console.html
/.gitignore:
--------------------------------------------------------------------------------
1 | *~
2 | *swp
3 | *.swp
4 | .gitCOMMIT_EDITMSG
5 | *.svn
6 | node_modules/*
7 | .DS_Store
8 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2016 DuJia
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # console
2 |
3 | a console panel for mobile phone, replace alert
4 |
5 | Preview
6 | -------
7 |
8 | ### close status
9 |
10 |
11 |
12 |
13 | ### open status
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/build/build.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author xiaojue
3 | */
4 | var rollup = require('rollup');
5 | var fs = require('fs');
6 | var path = require('path');
7 | var version = require('../package.json').version;
8 | var uglify = require('uglify-js');
9 | var config = require('./config.js');
10 |
11 | var banner = '/*\n' +
12 | ' * console v' + version + '\n' +
13 | ' * (c) ' + new Date().getFullYear() + ' xiaojue\n' +
14 | ' */';
15 |
16 | function getSize(code) {
17 | return (code.length / 1024).toFixed(2) + 'kb';
18 | }
19 |
20 | function blue(str) {
21 | return '\x1b[1m\x1b[34m' + str + '\x1b[39m\x1b[22m';
22 | }
23 |
24 | function write(dest, code) {
25 | return new Promise(function(resolve, reject) {
26 | fs.writeFile(dest, code, function(err) {
27 | if (err) return reject(err);
28 | console.log(blue(dest) + ' ' + getSize(code));
29 | resolve();
30 | });
31 | });
32 | }
33 |
34 | rollup.rollup(config).then(function(bundle) {
35 | return bundle.generate({
36 | banner: banner,
37 | format: 'umd',
38 | moduleName: '__console'
39 | }).code;
40 | }).then(function(code) {
41 | write(path.join(__dirname, '../dist/console.js'), code);
42 | return code;
43 | }).then(function(code) {
44 | return uglify.minify(code, {
45 | fromString: true,
46 | output: {
47 | preamble: banner,
48 | ascii_only: true
49 | }
50 | }).code;
51 | }).then(function(code) {
52 | write(path.join(__dirname, '../dist/console.min.js'), code);
53 | return code;
54 | });
55 |
--------------------------------------------------------------------------------
/build/config.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author xiaojue
3 | * @date 20161027
4 | */
5 | var path = require('path');
6 |
7 | var commonjs = require("rollup-plugin-commonjs");
8 | var env = require('./env');
9 | var buble = require('rollup-plugin-buble');
10 | var string = require('rollup-plugin-string');
11 | var postcss = require('rollup-plugin-postcss');
12 | var entry = '';
13 |
14 | if (['production', 'dev'].indexOf(env) != -1) {
15 | entry = '../src/index.js';
16 | }
17 |
18 | var config = {
19 | entry: path.join(__dirname, entry),
20 | moduleName: '__console',
21 | format: 'umd',
22 | plugins: [
23 | commonjs(),
24 | string({
25 | include: ['**/*.html']
26 | }),
27 | postcss({
28 | extensions: ['.css']
29 | }),
30 | buble()
31 | ]
32 | };
33 | if (['production', 'dev'].indexOf(env) != -1) {
34 | module.exports = Object.assign({
35 | dest: path.join(__dirname, '../dist/console.js')
36 | }, config);
37 | } else {
38 | module.exports = config;
39 | }
40 |
--------------------------------------------------------------------------------
/build/env.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author xiaojue
3 | * @date 20161027
4 | */
5 | var minimist = require('minimist');
6 |
7 | var argv = minimist(process.argv.slice(2));
8 |
9 | module.exports = argv.env || 'production';
10 |
--------------------------------------------------------------------------------
/demo/template.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
76 |
77 |
78 |
79 |
Console
80 |
81 |
85 |
86 |
87 |
88 |
--------------------------------------------------------------------------------
/demo/test.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
28 | 1
29 | 2
30 | 3
31 | 4
32 |
33 |
34 |
35 |
36 |
--------------------------------------------------------------------------------
/dist/console.js:
--------------------------------------------------------------------------------
1 | /*
2 | * console v1.0.0
3 | * (c) 2017 xiaojue
4 | */
5 | (function (global, factory) {
6 | typeof exports === 'object' && typeof module !== 'undefined' ? factory() :
7 | typeof define === 'function' && define.amd ? define(factory) :
8 | (factory());
9 | }(this, (function () { 'use strict';
10 |
11 | function __$styleInject(css, returnValue) {
12 | if (typeof document === 'undefined') {
13 | return returnValue;
14 | }
15 | css = css || '';
16 | var head = document.head || document.getElementsByTagName('head')[0];
17 | var style = document.createElement('style');
18 | style.type = 'text/css';
19 | if (style.styleSheet){
20 | style.styleSheet.cssText = css;
21 | } else {
22 | style.appendChild(document.createTextNode(css));
23 | }
24 | head.appendChild(style);
25 | return returnValue;
26 | }
27 | __$styleInject("/**\n * @fileoverview console style\n */\n#__console_wrap {\n font-size:12px;\n font-family: \"Microsoft YaHei\",Arial,\"Helvetica\";\n}\n.-c-switch{\n display: block;\n position: fixed;\n right: 10px;\n bottom: 10px;\n z-index: 2147483647;\n border-radius: 4px;\n box-shadow: 0 0 8px rgba( 0, 0, 0, .4);\n padding: 8px 16px;\n line-height: 1;\n color: #fff;\n background-color: #0088cc;\n}\n\n.-c-content,.-c-eles{\n display: none;\n position: fixed;\n left: 0;\n right: 0;\n bottom: 40px;\n z-index: 2147483647;\n border-top: 1px solid #eee;\n overflow-x: hidden;\n overflow-y: auto;\n max-height: 50%;\n background-color: #cbf3ff;\n -webkit-overflow-scrolling: touch;\n border-top:1px solid #d9d9d9;\n opacity:.9;\n}\n\n.-c-log{\n margin: 0;\n border-bottom: 1px solid #eee;\n padding: 6px 8px;\n overflow: hidden;\n line-height: 1.3;\n word-break: break-word;\n}\n\n.-c-toolbar,.-c-tab{\n display: none;\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n height:40px;\n z-index: 2147483647;\n line-height: 40px;\n background-color: #cbf3ff;\n opacity:.9;\n}\n\n.-c-tab{\n top:0px;\n}\n\n.-c-tool{\n position: relative;\n float: left;\n width: 50%;\n text-align: center;\n text-decoration: none;\n color: #000;\n}\n\n.-c-clear::before,.-c-console::before,.-c-refresh::before{\n content: \"\";\n position: absolute;\n top: 7px;\n bottom: 7px;\n right: 0;\n border-left: 1px solid #d9d9d9;\n}\n\n.-c-current{\n color:#0088cc;\n}\n\n.-c-eles div{\n color:#990884;\n margin:5px;\n}\n.-c-eles span{\n color:#444;\n}\n.-c-eles span.val{\n color:#1f6b7a;\n}\n.-c-eles span.key{\n color:#900b09;\n}\n.-c-eles .-c-omit{\n display:none;\n}\n\n@-webkit-keyframes twinkling{\n 0%{\n opacity:0;\n }\n 100%{\n background-color:green;\n opacity:0.5;\n }\n}\n\n.-c-dialog {\n width:80%;\n height:auto;\n border:#ccc solid 1px;\n margin-top:20%;\n background:#eee;\n position:absolute;\n top:0px;\n z-index:99999;\n left:50%;\n margin-left:-40%;\n}\n.-c-dialog .textareaParent{\n position:relative;\n}\n.-c-dialog .textareaParent pre{\n display:block;\n visibility:hidden; \n margin:0;\n white-space: pre-wrap; \n word-wrap: break-word; \n}\n.-c-dialog .textareaParent pre span{\n display:block;\n}\n.-c-dialog textarea{\n outline:none;\n resize:none;\n border:none;\n left:0px;\n top:0px;\n position:absolute;\n width:100%;\n height:100%;\n}\n.-c-dialog .-c-elepath{\n color:green;\n}\n",undefined);
28 |
29 | var html = "\n
\n \n Cancel Save
\n \n
Console
\n
\n
\n
\n
\n
\n
\n";
30 |
31 | /**
32 | * @author xiaojue
33 | * @date 20161028
34 | */
35 |
36 | var eventsMap = function eventsMap() {
37 | this.delegateEventSplitter = /^(\S+)\s*(.*)$/;
38 | if (this.events) { this._bindEventMap(); }
39 | };
40 | eventsMap.prototype.isFunction = function isFunction (obj) {
41 | return Object.prototype.toString.call(obj) === '[object Function]';
42 | };
43 | eventsMap.prototype.$ = function $ (selector) {
44 | return document.querySelector(selector);
45 | };
46 | eventsMap.prototype._bindEventMap = function _bindEventMap () {
47 | var this$1 = this;
48 |
49 | for (var key in this.events) {
50 | if (this$1.events.hasOwnProperty(key)) {
51 | var method = this$1.events[key];
52 | if (!this$1.isFunction(method)) {
53 | method = this$1[method];
54 | }
55 | if (!method) {
56 | continue;
57 | }
58 | var match = key.match(this$1.delegateEventSplitter),
59 | type = match[1],
60 | selector = match[2];
61 | this$1.$(selector).addEventListener(type, method.bind(this$1));
62 | }
63 | }
64 | };
65 |
66 | /**
67 | * @author xiaojue
68 | * @date 20161028
69 | */
70 | var domUtils = (function (eventsMap$$1) {
71 | function domUtils() {
72 | eventsMap$$1.call(this);
73 | }
74 |
75 | if ( eventsMap$$1 ) domUtils.__proto__ = eventsMap$$1;
76 | domUtils.prototype = Object.create( eventsMap$$1 && eventsMap$$1.prototype );
77 | domUtils.prototype.constructor = domUtils;
78 | domUtils.prototype.createElement = function createElement (tag, attrs, content) {
79 | var el = document.createElement(tag),
80 | i;
81 | for (i in attrs) {
82 | if (attrs.hasOwnProperty(i)) {
83 | el.setAttribute(i, attrs[i]);
84 | }
85 | }
86 | if (content) {
87 | this.html(el, content);
88 | }
89 | return el;
90 | };
91 | domUtils.prototype.show = function show () {
92 | var eles = [], len = arguments.length;
93 | while ( len-- ) eles[ len ] = arguments[ len ];
94 |
95 | eles.forEach(function (ele) {
96 | ele.style.display = 'block';
97 | });
98 | return this;
99 | };
100 | domUtils.prototype.hide = function hide () {
101 | var eles = [], len = arguments.length;
102 | while ( len-- ) eles[ len ] = arguments[ len ];
103 |
104 | eles.forEach(function (ele) {
105 | ele.style.display = 'none';
106 | });
107 | return this;
108 | };
109 | domUtils.prototype.append = function append (parent) {
110 | var eles = [], len = arguments.length - 1;
111 | while ( len-- > 0 ) eles[ len ] = arguments[ len + 1 ];
112 |
113 | eles.forEach(function (ele) {
114 | parent.appendChild(ele);
115 | });
116 | return this;
117 | };
118 | domUtils.prototype._put = function _put (string, type) {
119 | var eles = [], len = arguments.length - 2;
120 | while ( len-- > 0 ) eles[ len ] = arguments[ len + 2 ];
121 |
122 | eles.forEach(function (ele) {
123 | if (type) {
124 | if (typeof ele.textContent === 'string') {
125 | ele.textContent = string;
126 | } else {
127 | ele.innerText = string;
128 | }
129 | } else {
130 | ele.innerHTML = string;
131 | }
132 | });
133 | };
134 | domUtils.prototype.html = function html (eles, html) {
135 | this._put(html, 0, eles);
136 | };
137 | domUtils.prototype.text = function text (eles, text) {
138 | this._put(text, 1, eles);
139 | };
140 | domUtils.prototype.addClass = function addClass (clsName) {
141 | var eles = [], len = arguments.length - 1;
142 | while ( len-- > 0 ) eles[ len ] = arguments[ len + 1 ];
143 |
144 | eles.forEach(function (ele) {
145 | ele.classList.add(clsName);
146 | });
147 | return this;
148 | };
149 | domUtils.prototype.removeClass = function removeClass (clsName) {
150 | var eles = [], len = arguments.length - 1;
151 | while ( len-- > 0 ) eles[ len ] = arguments[ len + 1 ];
152 |
153 | eles.forEach(function (ele) {
154 | ele.classList.remove(clsName);
155 | });
156 | return this;
157 | };
158 |
159 | return domUtils;
160 | }(eventsMap));
161 |
162 | /**
163 | * @author xiaojue
164 | * @date 20161028
165 | */
166 | var Base = (function (domUtils$$1) {
167 | function Base(options) {
168 | var this$1 = this;
169 |
170 | Object.assign(this, options);
171 | this.render();
172 | if (this.eles) {
173 | for (var i in this.eles) {
174 | if (this$1.eles.hasOwnProperty(i)) {
175 | this$1[i] = this$1.$(this$1.eles[i]);
176 | }
177 | }
178 | }
179 | domUtils$$1.call(this);
180 | this.init();
181 | return this;
182 | }
183 |
184 | if ( domUtils$$1 ) Base.__proto__ = domUtils$$1;
185 | Base.prototype = Object.create( domUtils$$1 && domUtils$$1.prototype );
186 | Base.prototype.constructor = Base;
187 | Base.prototype.render = function render () {};
188 |
189 | return Base;
190 | }(domUtils));
191 |
192 | /**
193 | * @author xiaojue
194 | * @date 20161028
195 | */
196 |
197 | var Console = {
198 | fixConsole: function fixConsole() {
199 | var this$1 = this;
200 |
201 | this.consoleMethods.forEach(function (method) {
202 | var original = window.console[method];
203 | window.console[method] = function () {
204 | var args = [], len = arguments.length;
205 | while ( len-- ) args[ len ] = arguments[ len ];
206 |
207 | if (this$1.pushLog) { this$1.pushLog(args); }
208 | original.apply(console, args);
209 | };
210 | });
211 | }
212 | };
213 |
214 | /**
215 | * @author xiaojue
216 | * @date 20161028
217 | */
218 |
219 | var uuid = 0;
220 |
221 | var _eventHandlers = {};
222 |
223 | var longtimeout;
224 |
225 |
226 | var Elements = {
227 | refreshDomTree: function refreshDomTree(wrap) {
228 | var arr = this._recursionNode(document, []);
229 | this.removeAllListeners(wrap, 'click');
230 | this.removeAllListeners(wrap, 'touchstart');
231 | this.removeAllListeners(wrap, 'touchend');
232 | wrap.innerHTML = arr.join('');
233 | this.addListener(wrap, 'touchstart', this._touchStart.bind(this), false);
234 | this.addListener(wrap, 'touchend', this._touchEnd.bind(this), false);
235 | this.addListener(wrap, 'click', this._toggleDiv.bind(this), false);
236 | this._eachOmit(wrap.querySelectorAll('.-c-omit'));
237 | },
238 | createDomTree: function createDomTree(wrap) {
239 | var arr = this._recursionNode(document, []);
240 | wrap.innerHTML = arr.join('');
241 | this.addListener(wrap, 'click', this._toggleDiv.bind(this), false);
242 | this.addListener(wrap, 'touchstart', this._touchStart.bind(this), false);
243 | this.addListener(wrap, 'touchend', this._touchEnd.bind(this), false);
244 | this._eachOmit(wrap.querySelectorAll('.-c-omit'));
245 | },
246 | changeStyle: function changeStyle() {
247 | var dialog = this.dialog,
248 | style= '';
249 | try {
250 | style= JSON.parse(dialog.querySelector('.__console_currentStyle').value);
251 | } catch (e) {
252 | console.error('rewrite style must be standard JSON object string');
253 | return;
254 | }
255 | var c_uuid = dialog.querySelector('.__console_currentStyle').getAttribute('data-uuid');
256 | var nodeTarget = document.querySelector('[console_uuid="' + c_uuid + '"]');
257 | var sheetText = style.sheets.join().replace(/(\}.*?\{)/g,"").replace(/(.*?\{)/g,"").replace(/(\}$)/,"");
258 | nodeTarget.style.cssText = style.cssText + sheetText;
259 | dialog.close();
260 | this.refresh();
261 | },
262 | longPress: function longPress(e) {
263 | this._showStyle(e);
264 | },
265 | _touchStart: function _touchStart(e) {
266 | var this$1 = this;
267 |
268 | longtimeout = setTimeout(function () {
269 | this$1.longPress(e);
270 | }, 800);
271 | },
272 | _touchEnd: function _touchEnd() {
273 | clearTimeout(longtimeout);
274 | },
275 | css: function css(a) {
276 | var sheets = document.styleSheets,
277 | styleObj = {},
278 | o = [],
279 | i;
280 | a.matches = a.matches || a.webkitMatchesSelector || a.mozMatchesSelector || a.msMatchesSelector || a.oMatchesSelector;
281 | for (i in sheets) {
282 | if (sheets.hasOwnProperty(i)) {
283 | var rules = sheets[i].rules || sheets[i].cssRules;
284 | for (var r in rules) {
285 | if (a.matches(rules[r].selectorText)) {
286 | o.push(rules[r].cssText);
287 | }
288 | }
289 | }
290 | }
291 | styleObj.sheets = o;
292 | //get inline style
293 | var cssText = a.style.cssText;
294 | if (cssText) {
295 | styleObj.cssText = cssText;
296 | }
297 | return styleObj;
298 | },
299 | _showStyle: function _showStyle(e) {
300 | var target = e.target;
301 | if (target.nodeType === 1 && target.tagName.toLowerCase() === 'div') {
302 | var c_uuid = target.getAttribute('data-uuid');
303 | var nodeTarget = document.querySelector('[console_uuid="' + c_uuid + '"]');
304 | var style = JSON.stringify(this.css(nodeTarget));
305 | var dialog = this.dialog;
306 | dialog.querySelector('.__console_currentStyle').value = style;
307 | dialog.querySelector('.__console_currentStyle').setAttribute('data-uuid', c_uuid);
308 | dialog.querySelector('.-c-elepath').innerText = target.innerText;
309 | dialog.querySelector('.-c-textare_pre').innerText = style;
310 | dialog.show();
311 | }
312 | },
313 | _showBorder: function _showBorder(target) {
314 | var fillterTag = ['html', 'head', 'title', 'meta', 'body', 'script', 'style'];
315 | if (fillterTag.indexOf(target.tagName.toLocaleLowerCase()) > -1) { return; }
316 | target.style['-webkit-animation'] = 'twinkling .5s infinite ease-in-out';
317 | setTimeout(function() {
318 | target.style['-webkit-animation'] = '';
319 | }, 500);
320 | this._setTargetY(target);
321 | },
322 | _setTargetY: function _setTargetY(node) {
323 | var curtop = 0;
324 | var curtopscroll = 0;
325 | if (node.offsetParent) {
326 | do {
327 | curtop += node.offsetTop;
328 | curtopscroll += node.offsetParent ? node.offsetParent.scrollTop : 0;
329 | } while ((node = node.offsetParent));
330 | }
331 | window.scrollTop = (curtop - curtopscroll);
332 | },
333 | _toggleDiv: function _toggleDiv(e) {
334 | var target = e.target;
335 | if (target.nodeType === 1 && target.tagName.toLowerCase() === 'div') {
336 | for (var i = 0; i < target.childNodes.length; i++) {
337 | var item = target.childNodes[i];
338 | if (item.nodeType === 1 && item.tagName.toLowerCase() === 'div') {
339 | item.style.display = item.style.display === "block" ? 'none' : 'block';
340 | }
341 | }
342 | //定位
343 | var c_uuid = target.getAttribute('data-uuid');
344 | var nodeTarget = document.querySelector('[console_uuid="' + c_uuid + '"]');
345 | this._showBorder(nodeTarget);
346 | this._eachOmit(target.querySelectorAll('.-c-omit'));
347 | }
348 | },
349 | _eachOmit: function _eachOmit(eles) {
350 | eles.forEach(function (ele) {
351 | var nextTag = ele.nextSibling;
352 | while (nextTag === null) {
353 | if (nextTag.nodeType === 1) { break; }
354 | nextTag = ele.nextSibling;
355 | }
356 | if (nextTag) {
357 | if (nextTag.nodeType === 1 && nextTag.tagName === 'DIV') {
358 | ele.style.display = nextTag.style.display === 'block' ? 'none' : 'inline';
359 | } else {
360 | ele.style.display = 'none';
361 | }
362 | }
363 | });
364 | },
365 | addListener: function addListener(node, event, handler, capture) {
366 | if (!(node in _eventHandlers)) {
367 | _eventHandlers[node] = {};
368 | }
369 | if (!(event in _eventHandlers[node])) {
370 | _eventHandlers[node][event] = [];
371 | }
372 | _eventHandlers[node][event].push([handler, capture]);
373 | node.addEventListener(event, handler, capture);
374 | },
375 | removeAllListeners: function removeAllListeners(node, event) {
376 | if (node in _eventHandlers) {
377 | var handlers = _eventHandlers[node];
378 | if (event in handlers) {
379 | var eventHandlers = handlers[event];
380 | for (var i = eventHandlers.length; i--;) {
381 | var handler = eventHandlers[i];
382 | node.removeEventListener(event, handler[0], handler[1]);
383 | }
384 | }
385 | }
386 | },
387 | _recursionNode: function _recursionNode(node, ret) {
388 | var this$1 = this;
389 |
390 | var marginL = 0,
391 | step = 10;
392 | if (node.childNodes.length) {
393 | if (node.tagName) { ret.push('... '); }
394 | marginL += step;
395 | for (var i = 0; i < node.childNodes.length; i++) {
396 | var item = node.childNodes[i];
397 | if (item.nodeType === 3 && item.nodeValue.trim() !== '') {
398 | ret.push('' + item.nodeValue.trim() + ' ');
399 | }
400 | if (item.nodeType === 1) {
401 | var tagName = item.tagName.toLowerCase();
402 | if (item.id === '__console_wrap') { continue; }
403 | var isShow = (tagName === 'html' || tagName === 'head' || tagName === 'body') ? 'block' : 'none';
404 | var attributes = '';
405 | item.setAttribute('console_uuid', uuid);
406 | Object.keys(item.attributes).forEach(function (name) {
407 | var attr = item.attributes[name];
408 | if (attr.name !== 'console_uuid') {
409 | attributes += '' + attr.name + ' ="' + attr.textContent + ' " ';
410 | }
411 | });
412 | ret.push('<' + tagName + ' ' + attributes + '>');
413 | uuid++;
414 | this$1._recursionNode(item, ret);
415 | ret.push('</' + tagName + '>
');
416 | }
417 | }
418 | }
419 | return ret;
420 | }
421 | };
422 |
423 | /**
424 | * @author xiaojue
425 | * @author dujia
426 | * @date 20161027
427 | */
428 |
429 | Object.assign(Base.prototype, Console);
430 | Object.assign(Base.prototype, Elements);
431 |
432 | new Base({
433 | init: function init() {
434 | this.consoleMethods = ['debug', 'error', 'info', 'warn','log'];
435 | this.elesInit = false;
436 | this.fixConsole();
437 | },
438 | events: {
439 | 'click .-c-switch': 'switchBtnClick',
440 | 'click .-c-clear': 'clearClick',
441 | 'click .-c-consoleBar .-c-hide': 'hideClick',
442 | 'click .-c-eleBar .-c-hide': 'hideClick',
443 | 'click .-c-elements': 'elementsClick',
444 | 'click .-c-refresh': 'refresh',
445 | 'click .-c-console': 'consoleClick',
446 | 'click .-c-save': 'saveStyle',
447 | 'click .-c-cancel':'cancel'
448 | },
449 | eles: {
450 | elesBox: '.-c-eles',
451 | logBox: '.-c-content',
452 | consoletoolBar: '.-c-consoleBar',
453 | elestoolBar: '.-c-eleBar',
454 | switchBtn: '.-c-switch',
455 | tab: '.-c-tab',
456 | elesTab: '.-c-elements',
457 | dialog:'.-c-dialog',
458 | consoleTab: '.-c-console'
459 | },
460 | render: function render() {
461 | this.el = this.createElement('div', {id:'__console_wrap'}, html);
462 | this.append(document.body, this.el);
463 | },
464 | pushLog: function pushLog(msg) {
465 | var log = this.createElement('div', {
466 | class: '-c-log'
467 | });
468 | this.text(log, JSON.stringify(msg.join(' ')).slice(1, -1));
469 | this.append(this.logBox, log);
470 | },
471 | cancel: function cancel(){
472 | this.dialog.close();
473 | },
474 | saveStyle: function saveStyle(){
475 | this.changeStyle();
476 | },
477 | switchBtnClick: function switchBtnClick() {
478 | this.show(this.logBox,this.elesBox, this.consoletoolBar,this.elestoolBar, this.tab).hide(this.switchBtn,this.elestoolBar);
479 | },
480 | clearClick: function clearClick() {
481 | this.html(this.logBox, '');
482 | },
483 | hideClick: function hideClick() {
484 | this.hide(this.logBox,this.elesBox, this.consoletoolBar,this.elestoolBar, this.tab).show(this.switchBtn);
485 | this.addClass('-c-current', this.consoleTab).removeClass('-c-current', this.elesTab);
486 | },
487 | elementsClick: function elementsClick() {
488 | this.hide(this.logBox, this.consoletoolBar).show(this.elesBox,this.elestoolBar);
489 | this.addClass('-c-current', this.elesTab).removeClass('-c-current', this.consoleTab);
490 | if(this.elesInit) { return; }
491 | this.elesInit = true;
492 | this.createDomTree(this.elesBox);
493 | },
494 | consoleClick: function consoleClick() {
495 | this.hide(this.elesBox,this.elestoolBar).show(this.logBox, this.consoletoolBar);
496 | this.addClass('-c-current', this.consoleTab).removeClass('-c-current', this.elesTab);
497 | },
498 | refresh: function refresh(){
499 | this.refreshDomTree(this.elesBox);
500 | }
501 | });
502 |
503 | })));
504 |
--------------------------------------------------------------------------------
/dist/console.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":null,"sources":["../src/lib/eventsMap.js","../src/lib/domUtils.js","../src/lib/Base.js","../src/lib/Console.js","../src/lib/Elements.js","../src/index.js"],"sourcesContent":["/**\n * @author xiaojue\n * @date 20161028\n */\n\nclass eventsMap {\n constructor() {\n this.delegateEventSplitter = /^(\\S+)\\s*(.*)$/;\n if (this.events) this._bindEventMap();\n }\n isFunction(obj) {\n return Object.prototype.toString.call(obj) === '[object Function]';\n }\n $(selector) {\n return document.querySelector(selector);\n }\n _bindEventMap() {\n for (var key in this.events) {\n if (this.events.hasOwnProperty(key)) {\n var method = this.events[key];\n if (!this.isFunction(method)) {\n method = this[method];\n }\n if (!method) {\n continue;\n }\n var match = key.match(this.delegateEventSplitter),\n type = match[1],\n selector = match[2];\n this.$(selector).addEventListener(type, method.bind(this));\n }\n }\n }\n}\n\nexport default eventsMap;\n","/**\n * @author xiaojue\n * @date 20161028\n */\nimport eventsMap from './eventsMap.js';\n\nclass domUtils extends eventsMap {\n constructor() {\n super();\n }\n createElement(tag, attrs, content) {\n var el = document.createElement(tag),\n i;\n for (i in attrs) {\n if (attrs.hasOwnProperty(i)) {\n el.setAttribute(i, attrs[i]);\n }\n }\n if (content) {\n this.html(el, content);\n }\n return el;\n }\n show(...eles) {\n eles.forEach((ele) => {\n ele.style.display = 'block';\n });\n return this;\n }\n hide(...eles) {\n eles.forEach((ele) => {\n ele.style.display = 'none';\n });\n return this;\n }\n append(parent, ...eles) {\n eles.forEach((ele) => {\n parent.appendChild(ele);\n });\n return this;\n }\n _put(string, type, ...eles) {\n eles.forEach((ele) => {\n if (type) {\n if (typeof ele.textContent === 'string') {\n ele.textContent = string;\n } else {\n ele.innerText = string;\n }\n } else {\n ele.innerHTML = string;\n }\n });\n }\n html(eles, html) {\n this._put(html, 0, eles);\n }\n text(eles, text) {\n this._put(text, 1, eles);\n }\n addClass(clsName, ...eles) {\n eles.forEach((ele) => {\n ele.classList.add(clsName);\n });\n return this;\n }\n removeClass(clsName, ...eles) {\n eles.forEach((ele) => {\n ele.classList.remove(clsName);\n });\n return this;\n }\n}\n\nexport default domUtils;\n\n","/**\n * @author xiaojue\n * @date 20161028\n */\nimport domUtils from './domUtils.js';\n\nclass Base extends domUtils {\n constructor(options) {\n Object.assign(this, options);\n this.render();\n if (this.eles) {\n for (var i in this.eles) {\n if (this.eles.hasOwnProperty(i)) {\n this[i] = this.$(this.eles[i]);\n }\n }\n }\n super();\n this.init();\n return this;\n }\n render() {}\n}\n\nexport default Base;\n","/**\n * @author xiaojue\n * @date 20161028\n */\n\nvar Console = {\n fixConsole() {\n this.consoleMethods.forEach((method) => {\n var original = window.console[method];\n window.console[method] = (...args) => {\n if (this.pushLog) this.pushLog(args);\n original.apply(console, args);\n };\n });\n }\n};\n\nexport default Console;\n","/**\n * @author xiaojue\n * @date 20161028\n */\n\nvar uuid = 0;\n\nvar _eventHandlers = {};\n\nvar longtimeout;\n\n\nvar Elements = {\n refreshDomTree(wrap) {\n var arr = this._recursionNode(document, []);\n this.removeAllListeners(wrap, 'click');\n this.removeAllListeners(wrap, 'touchstart');\n this.removeAllListeners(wrap, 'touchend');\n wrap.innerHTML = arr.join('');\n this.addListener(wrap, 'touchstart', this._touchStart.bind(this), false);\n this.addListener(wrap, 'touchend', this._touchEnd.bind(this), false);\n this.addListener(wrap, 'click', this._toggleDiv.bind(this), false);\n this._eachOmit(wrap.querySelectorAll('.-c-omit'));\n },\n createDomTree(wrap) {\n var arr = this._recursionNode(document, []);\n wrap.innerHTML = arr.join('');\n this.addListener(wrap, 'click', this._toggleDiv.bind(this), false);\n this.addListener(wrap, 'touchstart', this._touchStart.bind(this), false);\n this.addListener(wrap, 'touchend', this._touchEnd.bind(this), false);\n this._eachOmit(wrap.querySelectorAll('.-c-omit'));\n },\n changeStyle() {\n var dialog = this.dialog,\n style= '';\n try {\n style= JSON.parse(dialog.querySelector('.__console_currentStyle').value);\n } catch (e) {\n console.error('rewrite style must be standard JSON object string');\n return;\n }\n var c_uuid = dialog.querySelector('.__console_currentStyle').getAttribute('data-uuid');\n var nodeTarget = document.querySelector('[console_uuid=\"' + c_uuid + '\"]');\n var sheetText = style.sheets.join().replace(/(\\}.*?\\{)/g,\"\").replace(/(.*?\\{)/g,\"\").replace(/(\\}$)/,\"\");\n nodeTarget.style.cssText = style.cssText + sheetText;\n dialog.close();\n this.refresh();\n },\n longPress(e) {\n this._showStyle(e);\n },\n _touchStart(e) {\n longtimeout = setTimeout(() => {\n this.longPress(e);\n }, 800);\n },\n _touchEnd() {\n clearTimeout(longtimeout);\n },\n css(a) {\n var sheets = document.styleSheets,\n styleObj = {},\n o = [],\n i;\n a.matches = a.matches || a.webkitMatchesSelector || a.mozMatchesSelector || a.msMatchesSelector || a.oMatchesSelector;\n for (i in sheets) {\n if (sheets.hasOwnProperty(i)) {\n var rules = sheets[i].rules || sheets[i].cssRules;\n for (var r in rules) {\n if (a.matches(rules[r].selectorText)) {\n o.push(rules[r].cssText);\n }\n }\n }\n }\n styleObj.sheets = o;\n //get inline style \n var cssText = a.style.cssText;\n if (cssText) {\n styleObj.cssText = cssText;\n }\n return styleObj;\n },\n _showStyle(e) {\n var target = e.target;\n if (target.nodeType === 1 && target.tagName.toLowerCase() === 'div') {\n var c_uuid = target.getAttribute('data-uuid');\n var nodeTarget = document.querySelector('[console_uuid=\"' + c_uuid + '\"]');\n var style = JSON.stringify(this.css(nodeTarget));\n var dialog = this.dialog;\n dialog.querySelector('.__console_currentStyle').value = style;\n dialog.querySelector('.__console_currentStyle').setAttribute('data-uuid', c_uuid);\n dialog.querySelector('.-c-elepath').innerText = target.innerText;\n dialog.querySelector('.-c-textare_pre').innerText = style;\n dialog.show();\n }\n },\n _showBorder(target) {\n var fillterTag = ['html', 'head', 'title', 'meta', 'body', 'script', 'style'];\n if (fillterTag.indexOf(target.tagName.toLocaleLowerCase()) > -1) return;\n target.style['-webkit-animation'] = 'twinkling .5s infinite ease-in-out';\n setTimeout(function() {\n target.style['-webkit-animation'] = '';\n }, 500);\n this._setTargetY(target);\n },\n _setTargetY(node) {\n var curtop = 0;\n var curtopscroll = 0;\n if (node.offsetParent) {\n do {\n curtop += node.offsetTop;\n curtopscroll += node.offsetParent ? node.offsetParent.scrollTop : 0;\n } while ((node = node.offsetParent));\n }\n window.scrollTop = (curtop - curtopscroll);\n },\n _toggleDiv(e) {\n var target = e.target;\n if (target.nodeType === 1 && target.tagName.toLowerCase() === 'div') {\n for (var i = 0; i < target.childNodes.length; i++) {\n var item = target.childNodes[i];\n if (item.nodeType === 1 && item.tagName.toLowerCase() === 'div') {\n item.style.display = item.style.display === \"block\" ? 'none' : 'block';\n }\n }\n //定位\n var c_uuid = target.getAttribute('data-uuid');\n var nodeTarget = document.querySelector('[console_uuid=\"' + c_uuid + '\"]');\n this._showBorder(nodeTarget);\n this._eachOmit(target.querySelectorAll('.-c-omit'));\n }\n },\n _eachOmit(eles) {\n eles.forEach((ele) => {\n var nextTag = ele.nextSibling;\n while (nextTag === null) {\n if (nextTag.nodeType === 1) break;\n nextTag = ele.nextSibling;\n }\n if (nextTag) {\n if (nextTag.nodeType === 1 && nextTag.tagName === 'DIV') {\n ele.style.display = nextTag.style.display === 'block' ? 'none' : 'inline';\n } else {\n ele.style.display = 'none';\n }\n }\n });\n },\n addListener(node, event, handler, capture) {\n if (!(node in _eventHandlers)) {\n _eventHandlers[node] = {};\n }\n if (!(event in _eventHandlers[node])) {\n _eventHandlers[node][event] = [];\n }\n _eventHandlers[node][event].push([handler, capture]);\n node.addEventListener(event, handler, capture);\n },\n removeAllListeners(node, event) {\n if (node in _eventHandlers) {\n var handlers = _eventHandlers[node];\n if (event in handlers) {\n var eventHandlers = handlers[event];\n for (var i = eventHandlers.length; i--;) {\n var handler = eventHandlers[i];\n node.removeEventListener(event, handler[0], handler[1]);\n }\n }\n }\n },\n _recursionNode(node, ret) {\n var marginL = 0,\n step = 10;\n if (node.childNodes.length) {\n if (node.tagName) ret.push('... ');\n marginL += step;\n for (var i = 0; i < node.childNodes.length; i++) {\n var item = node.childNodes[i];\n if (item.nodeType === 3 && item.nodeValue.trim() !== '') {\n ret.push('' + item.nodeValue.trim() + ' ');\n }\n if (item.nodeType === 1) {\n var tagName = item.tagName.toLowerCase();\n if (item.id === '__console_wrap') continue;\n var isShow = (tagName === 'html' || tagName === 'head' || tagName === 'body') ? 'block' : 'none';\n var attributes = '';\n item.setAttribute('console_uuid', uuid);\n Object.keys(item.attributes).forEach((name) => {\n var attr = item.attributes[name];\n if (attr.name !== 'console_uuid') {\n attributes += '' + attr.name + ' =\"' + attr.textContent + ' \" ';\n }\n });\n ret.push('<' + tagName + ' ' + attributes + '>');\n uuid++;\n this._recursionNode(item, ret);\n ret.push('</' + tagName + '>
');\n }\n }\n }\n return ret;\n }\n};\n\nexport default Elements;\n","/**\n * @author xiaojue\n * @author dujia\n * @date 20161027\n */\n\nimport './css/console.css';\nimport html from './template/console.html';\n\nimport Base from './lib/Base.js';\nimport Console from './lib/Console.js';\nimport Elements from './lib/Elements.js';\n\nObject.assign(Base.prototype, Console);\nObject.assign(Base.prototype, Elements);\n\nnew Base({\n init() {\n this.consoleMethods = ['debug', 'error', 'info', 'warn','log'];\n this.elesInit = false;\n this.fixConsole();\n },\n events: {\n 'click .-c-switch': 'switchBtnClick',\n 'click .-c-clear': 'clearClick',\n 'click .-c-consoleBar .-c-hide': 'hideClick',\n 'click .-c-eleBar .-c-hide': 'hideClick',\n 'click .-c-elements': 'elementsClick',\n 'click .-c-refresh': 'refresh',\n 'click .-c-console': 'consoleClick',\n 'click .-c-save': 'saveStyle',\n 'click .-c-cancel':'cancel'\n },\n eles: {\n elesBox: '.-c-eles',\n logBox: '.-c-content',\n consoletoolBar: '.-c-consoleBar',\n elestoolBar: '.-c-eleBar',\n switchBtn: '.-c-switch',\n tab: '.-c-tab',\n elesTab: '.-c-elements',\n dialog:'.-c-dialog',\n consoleTab: '.-c-console'\n },\n render() {\n this.el = this.createElement('div', {id:'__console_wrap'}, html);\n this.append(document.body, this.el);\n },\n pushLog(msg) {\n var log = this.createElement('div', {\n class: '-c-log'\n });\n this.text(log, JSON.stringify(msg.join(' ')).slice(1, -1));\n this.append(this.logBox, log);\n },\n cancel(){\n this.dialog.close(); \n },\n saveStyle(){\n this.changeStyle();\n },\n switchBtnClick() {\n this.show(this.logBox,this.elesBox, this.consoletoolBar,this.elestoolBar, this.tab).hide(this.switchBtn,this.elestoolBar);\n },\n clearClick() {\n this.html(this.logBox, '');\n },\n hideClick() {\n this.hide(this.logBox,this.elesBox, this.consoletoolBar,this.elestoolBar, this.tab).show(this.switchBtn);\n this.addClass('-c-current', this.consoleTab).removeClass('-c-current', this.elesTab);\n },\n elementsClick() {\n this.hide(this.logBox, this.consoletoolBar).show(this.elesBox,this.elestoolBar);\n this.addClass('-c-current', this.elesTab).removeClass('-c-current', this.consoleTab);\n if(this.elesInit) return;\n this.elesInit = true;\n this.createDomTree(this.elesBox);\n },\n consoleClick() {\n this.hide(this.elesBox,this.elestoolBar).show(this.logBox, this.consoletoolBar);\n this.addClass('-c-current', this.consoleTab).removeClass('-c-current', this.elesTab);\n },\n refresh(){\n this.refreshDomTree(this.elesBox);\n }\n});\n"],"names":["this","super"],"mappings":"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"}
--------------------------------------------------------------------------------
/dist/console.min.js:
--------------------------------------------------------------------------------
1 | /*
2 | * console v1.0.0
3 | * (c) 2017 xiaojue
4 | */
5 | !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t():"function"==typeof define&&define.amd?define(t):t()}(this,function(){"use strict";function e(e,t){if("undefined"==typeof document)return t;e=e||"";var n=document.head||document.getElementsByTagName("head")[0],o=document.createElement("style");return o.type="text/css",o.styleSheet?o.styleSheet.cssText=e:o.appendChild(document.createTextNode(e)),n.appendChild(o),t}e('/**\n * @fileoverview console style\n */\n#__console_wrap {\n font-size:12px;\n font-family: "Microsoft YaHei",Arial,"Helvetica";\n}\n.-c-switch{\n display: block;\n position: fixed;\n right: 10px;\n bottom: 10px;\n z-index: 2147483647;\n border-radius: 4px;\n box-shadow: 0 0 8px rgba( 0, 0, 0, .4);\n padding: 8px 16px;\n line-height: 1;\n color: #fff;\n background-color: #0088cc;\n}\n\n.-c-content,.-c-eles{\n display: none;\n position: fixed;\n left: 0;\n right: 0;\n bottom: 40px;\n z-index: 2147483647;\n border-top: 1px solid #eee;\n overflow-x: hidden;\n overflow-y: auto;\n max-height: 50%;\n background-color: #cbf3ff;\n -webkit-overflow-scrolling: touch;\n border-top:1px solid #d9d9d9;\n opacity:.9;\n}\n\n.-c-log{\n margin: 0;\n border-bottom: 1px solid #eee;\n padding: 6px 8px;\n overflow: hidden;\n line-height: 1.3;\n word-break: break-word;\n}\n\n.-c-toolbar,.-c-tab{\n display: none;\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n height:40px;\n z-index: 2147483647;\n line-height: 40px;\n background-color: #cbf3ff;\n opacity:.9;\n}\n\n.-c-tab{\n top:0px;\n}\n\n.-c-tool{\n position: relative;\n float: left;\n width: 50%;\n text-align: center;\n text-decoration: none;\n color: #000;\n}\n\n.-c-clear::before,.-c-console::before,.-c-refresh::before{\n content: "";\n position: absolute;\n top: 7px;\n bottom: 7px;\n right: 0;\n border-left: 1px solid #d9d9d9;\n}\n\n.-c-current{\n color:#0088cc;\n}\n\n.-c-eles div{\n color:#990884;\n margin:5px;\n}\n.-c-eles span{\n color:#444;\n}\n.-c-eles span.val{\n color:#1f6b7a;\n}\n.-c-eles span.key{\n color:#900b09;\n}\n.-c-eles .-c-omit{\n display:none;\n}\n\n@-webkit-keyframes twinkling{\n 0%{\n opacity:0;\n }\n 100%{\n background-color:green;\n opacity:0.5;\n }\n}\n\n.-c-dialog {\n width:80%;\n height:auto;\n border:#ccc solid 1px;\n margin-top:20%;\n background:#eee;\n position:absolute;\n top:0px;\n z-index:99999;\n left:50%;\n margin-left:-40%;\n}\n.-c-dialog .textareaParent{\n position:relative;\n}\n.-c-dialog .textareaParent pre{\n display:block;\n visibility:hidden; \n margin:0;\n white-space: pre-wrap; \n word-wrap: break-word; \n}\n.-c-dialog .textareaParent pre span{\n display:block;\n}\n.-c-dialog textarea{\n outline:none;\n resize:none;\n border:none;\n left:0px;\n top:0px;\n position:absolute;\n width:100%;\n height:100%;\n}\n.-c-dialog .-c-elepath{\n color:green;\n}\n',void 0);var t='\n
\n \n Cancel Save
\n \n
Console
\n
\n
\n
\n
\n
\n
\n',n=function(){this.delegateEventSplitter=/^(\S+)\s*(.*)$/,this.events&&this._bindEventMap()};n.prototype.isFunction=function(e){return"[object Function]"===Object.prototype.toString.call(e)},n.prototype.$=function(e){return document.querySelector(e)},n.prototype._bindEventMap=function(){var e=this;for(var t in this.events)if(e.events.hasOwnProperty(t)){var n=e.events[t];if(e.isFunction(n)||(n=e[n]),!n)continue;var o=t.match(e.delegateEventSplitter),i=o[1],s=o[2];e.$(s).addEventListener(i,n.bind(e))}};var o,i=function(e){function t(){e.call(this)}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.createElement=function(e,t,n){var o,i=document.createElement(e);for(o in t)t.hasOwnProperty(o)&&i.setAttribute(o,t[o]);return n&&this.html(i,n),i},t.prototype.show=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];return e.forEach(function(e){e.style.display="block"}),this},t.prototype.hide=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];return e.forEach(function(e){e.style.display="none"}),this},t.prototype.append=function(e){for(var t=[],n=arguments.length-1;n-- >0;)t[n]=arguments[n+1];return t.forEach(function(t){e.appendChild(t)}),this},t.prototype._put=function(e,t){for(var n=[],o=arguments.length-2;o-- >0;)n[o]=arguments[o+2];n.forEach(function(n){t?"string"==typeof n.textContent?n.textContent=e:n.innerText=e:n.innerHTML=e})},t.prototype.html=function e(t,e){this._put(e,0,t)},t.prototype.text=function e(t,e){this._put(e,1,t)},t.prototype.addClass=function(e){for(var t=[],n=arguments.length-1;n-- >0;)t[n]=arguments[n+1];return t.forEach(function(t){t.classList.add(e)}),this},t.prototype.removeClass=function(e){for(var t=[],n=arguments.length-1;n-- >0;)t[n]=arguments[n+1];return t.forEach(function(t){t.classList.remove(e)}),this},t}(n),s=function(e){function t(t){var n=this;if(Object.assign(this,t),this.render(),this.eles)for(var o in this.eles)n.eles.hasOwnProperty(o)&&(n[o]=n.$(n.eles[o]));return e.call(this),this.init(),this}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.render=function(){},t}(i),c={fixConsole:function(){var e=this;this.consoleMethods.forEach(function(t){var n=window.console[t];window.console[t]=function(){for(var t=[],o=arguments.length;o--;)t[o]=arguments[o];e.pushLog&&e.pushLog(t),n.apply(console,t)}})}},r=0,l={},a={refreshDomTree:function(e){var t=this._recursionNode(document,[]);this.removeAllListeners(e,"click"),this.removeAllListeners(e,"touchstart"),this.removeAllListeners(e,"touchend"),e.innerHTML=t.join(""),this.addListener(e,"touchstart",this._touchStart.bind(this),!1),this.addListener(e,"touchend",this._touchEnd.bind(this),!1),this.addListener(e,"click",this._toggleDiv.bind(this),!1),this._eachOmit(e.querySelectorAll(".-c-omit"))},createDomTree:function(e){var t=this._recursionNode(document,[]);e.innerHTML=t.join(""),this.addListener(e,"click",this._toggleDiv.bind(this),!1),this.addListener(e,"touchstart",this._touchStart.bind(this),!1),this.addListener(e,"touchend",this._touchEnd.bind(this),!1),this._eachOmit(e.querySelectorAll(".-c-omit"))},changeStyle:function(){var e=this.dialog,t="";try{t=JSON.parse(e.querySelector(".__console_currentStyle").value)}catch(e){return void console.error("rewrite style must be standard JSON object string")}var n=e.querySelector(".__console_currentStyle").getAttribute("data-uuid"),o=document.querySelector('[console_uuid="'+n+'"]'),i=t.sheets.join().replace(/(\}.*?\{)/g,"").replace(/(.*?\{)/g,"").replace(/(\}$)/,"");o.style.cssText=t.cssText+i,e.close(),this.refresh()},longPress:function(e){this._showStyle(e)},_touchStart:function(e){var t=this;o=setTimeout(function(){t.longPress(e)},800)},_touchEnd:function(){clearTimeout(o)},css:function(e){var t,n=document.styleSheets,o={},i=[];e.matches=e.matches||e.webkitMatchesSelector||e.mozMatchesSelector||e.msMatchesSelector||e.oMatchesSelector;for(t in n)if(n.hasOwnProperty(t)){var s=n[t].rules||n[t].cssRules;for(var c in s)e.matches(s[c].selectorText)&&i.push(s[c].cssText)}o.sheets=i;var r=e.style.cssText;return r&&(o.cssText=r),o},_showStyle:function(e){var t=e.target;if(1===t.nodeType&&"div"===t.tagName.toLowerCase()){var n=t.getAttribute("data-uuid"),o=document.querySelector('[console_uuid="'+n+'"]'),i=JSON.stringify(this.css(o)),s=this.dialog;s.querySelector(".__console_currentStyle").value=i,s.querySelector(".__console_currentStyle").setAttribute("data-uuid",n),s.querySelector(".-c-elepath").innerText=t.innerText,s.querySelector(".-c-textare_pre").innerText=i,s.show()}},_showBorder:function(e){var t=["html","head","title","meta","body","script","style"];t.indexOf(e.tagName.toLocaleLowerCase())>-1||(e.style["-webkit-animation"]="twinkling .5s infinite ease-in-out",setTimeout(function(){e.style["-webkit-animation"]=""},500),this._setTargetY(e))},_setTargetY:function(e){var t=0,n=0;if(e.offsetParent)do t+=e.offsetTop,n+=e.offsetParent?e.offsetParent.scrollTop:0;while(e=e.offsetParent);window.scrollTop=t-n},_toggleDiv:function(e){var t=e.target;if(1===t.nodeType&&"div"===t.tagName.toLowerCase()){for(var n=0;n...'),o+=i;for(var s=0;s"+c.nodeValue.trim()+""),1===c.nodeType){var l=c.tagName.toLowerCase();if("__console_wrap"===c.id)continue;var a="html"===l||"head"===l||"body"===l?"block":"none",d="";c.setAttribute("console_uuid",r),Object.keys(c.attributes).forEach(function(e){var t=c.attributes[e];"console_uuid"!==t.name&&(d+=''+t.name+' ="'+t.textContent+' " ')}),t.push('<'+l+" "+d+">"),r++,n._recursionNode(c,t),t.push("</"+l+">
")}}}return t}};Object.assign(s.prototype,c),Object.assign(s.prototype,a),new s({init:function(){this.consoleMethods=["debug","error","info","warn","log"],this.elesInit=!1,this.fixConsole()},events:{"click .-c-switch":"switchBtnClick","click .-c-clear":"clearClick","click .-c-consoleBar .-c-hide":"hideClick","click .-c-eleBar .-c-hide":"hideClick","click .-c-elements":"elementsClick","click .-c-refresh":"refresh","click .-c-console":"consoleClick","click .-c-save":"saveStyle","click .-c-cancel":"cancel"},eles:{elesBox:".-c-eles",logBox:".-c-content",consoletoolBar:".-c-consoleBar",elestoolBar:".-c-eleBar",switchBtn:".-c-switch",tab:".-c-tab",elesTab:".-c-elements",dialog:".-c-dialog",consoleTab:".-c-console"},render:function(){this.el=this.createElement("div",{id:"__console_wrap"},t),this.append(document.body,this.el)},pushLog:function(e){var t=this.createElement("div",{class:"-c-log"});this.text(t,JSON.stringify(e.join(" ")).slice(1,-1)),this.append(this.logBox,t)},cancel:function(){this.dialog.close()},saveStyle:function(){this.changeStyle()},switchBtnClick:function(){this.show(this.logBox,this.elesBox,this.consoletoolBar,this.elestoolBar,this.tab).hide(this.switchBtn,this.elestoolBar)},clearClick:function(){this.html(this.logBox,"")},hideClick:function(){this.hide(this.logBox,this.elesBox,this.consoletoolBar,this.elestoolBar,this.tab).show(this.switchBtn),this.addClass("-c-current",this.consoleTab).removeClass("-c-current",this.elesTab)},elementsClick:function(){this.hide(this.logBox,this.consoletoolBar).show(this.elesBox,this.elestoolBar),this.addClass("-c-current",this.elesTab).removeClass("-c-current",this.consoleTab),this.elesInit||(this.elesInit=!0,this.createDomTree(this.elesBox))},consoleClick:function(){this.hide(this.elesBox,this.elestoolBar).show(this.logBox,this.consoletoolBar),this.addClass("-c-current",this.consoleTab).removeClass("-c-current",this.elesTab)},refresh:function(){this.refreshDomTree(this.elesBox)}})});
--------------------------------------------------------------------------------
/images/close.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaojue/console/22690e479670f2154e18546773b6e7feb8209603/images/close.png
--------------------------------------------------------------------------------
/images/open.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xiaojue/console/22690e479670f2154e18546773b6e7feb8209603/images/open.png
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "console",
3 | "version": "1.0.0",
4 | "description": "mobile console and elements helper",
5 | "main": "dist/index.js",
6 | "scripts": {
7 | "dev": "./node_modules/.bin/rollup --env=dev -w -m -c build/config.js",
8 | "build": "node ./build/build.js --env=production",
9 | "test": "echo \"Error: no test specified\" && exit 1"
10 | },
11 | "repository": {
12 | "type": "git",
13 | "url": "git+https://github.com/xiaojue/console.git"
14 | },
15 | "keywords": [
16 | "console"
17 | ],
18 | "devDependencies": {
19 | "minimist": "^1.2.0",
20 | "rollup": "^0.36.3",
21 | "rollup-plugin-buble": "^0.14.0",
22 | "rollup-plugin-string": "^2.0.2",
23 | "rollup-plugin-commonjs": "^5.0.5",
24 | "rollup-plugin-postcss": "^0.2.0",
25 | "rollup-watch": "^2.5.0",
26 | "uglify-js": "^2.6.4"
27 | },
28 | "author": "xiaojue",
29 | "license": "MIT",
30 | "bugs": {
31 | "url": "https://github.com/xiaojue/console/issues"
32 | },
33 | "homepage": "https://github.com/xiaojue/console#readme"
34 | }
35 |
--------------------------------------------------------------------------------
/src/css/console.css:
--------------------------------------------------------------------------------
1 | /**
2 | * @fileoverview console style
3 | */
4 | #__console_wrap {
5 | font-size:12px;
6 | font-family: "Microsoft YaHei",Arial,"Helvetica";
7 | }
8 | .-c-switch{
9 | display: block;
10 | position: fixed;
11 | right: 10px;
12 | bottom: 10px;
13 | z-index: 2147483647;
14 | border-radius: 4px;
15 | box-shadow: 0 0 8px rgba( 0, 0, 0, .4);
16 | padding: 8px 16px;
17 | line-height: 1;
18 | color: #fff;
19 | background-color: #0088cc;
20 | }
21 |
22 | .-c-content,.-c-eles{
23 | display: none;
24 | position: fixed;
25 | left: 0;
26 | right: 0;
27 | bottom: 40px;
28 | z-index: 2147483647;
29 | border-top: 1px solid #eee;
30 | overflow-x: hidden;
31 | overflow-y: auto;
32 | max-height: 50%;
33 | background-color: #cbf3ff;
34 | -webkit-overflow-scrolling: touch;
35 | border-top:1px solid #d9d9d9;
36 | opacity:.9;
37 | }
38 |
39 | .-c-log{
40 | margin: 0;
41 | border-bottom: 1px solid #eee;
42 | padding: 6px 8px;
43 | overflow: hidden;
44 | line-height: 1.3;
45 | word-break: break-word;
46 | }
47 |
48 | .-c-toolbar,.-c-tab{
49 | display: none;
50 | position: fixed;
51 | left: 0;
52 | right: 0;
53 | bottom: 0;
54 | height:40px;
55 | z-index: 2147483647;
56 | line-height: 40px;
57 | background-color: #cbf3ff;
58 | opacity:.9;
59 | }
60 |
61 | .-c-tab{
62 | top:0px;
63 | }
64 |
65 | .-c-tool{
66 | position: relative;
67 | float: left;
68 | width: 50%;
69 | text-align: center;
70 | text-decoration: none;
71 | color: #000;
72 | }
73 |
74 | .-c-clear::before,.-c-console::before,.-c-refresh::before{
75 | content: "";
76 | position: absolute;
77 | top: 7px;
78 | bottom: 7px;
79 | right: 0;
80 | border-left: 1px solid #d9d9d9;
81 | }
82 |
83 | .-c-current{
84 | color:#0088cc;
85 | }
86 |
87 | .-c-eles div{
88 | color:#990884;
89 | margin:5px;
90 | }
91 | .-c-eles span{
92 | color:#444;
93 | }
94 | .-c-eles span.val{
95 | color:#1f6b7a;
96 | }
97 | .-c-eles span.key{
98 | color:#900b09;
99 | }
100 | .-c-eles .-c-omit{
101 | display:none;
102 | }
103 |
104 | @-webkit-keyframes twinkling{
105 | 0%{
106 | opacity:0;
107 | }
108 | 100%{
109 | background-color:green;
110 | opacity:0.5;
111 | }
112 | }
113 |
114 | .-c-dialog {
115 | width:80%;
116 | height:auto;
117 | border:#ccc solid 1px;
118 | margin-top:20%;
119 | background:#eee;
120 | position:absolute;
121 | top:0px;
122 | z-index:99999;
123 | left:50%;
124 | margin-left:-40%;
125 | }
126 | .-c-dialog .textareaParent{
127 | position:relative;
128 | }
129 | .-c-dialog .textareaParent pre{
130 | display:block;
131 | visibility:hidden;
132 | margin:0;
133 | white-space: pre-wrap;
134 | word-wrap: break-word;
135 | }
136 | .-c-dialog .textareaParent pre span{
137 | display:block;
138 | }
139 | .-c-dialog textarea{
140 | outline:none;
141 | resize:none;
142 | border:none;
143 | left:0px;
144 | top:0px;
145 | position:absolute;
146 | width:100%;
147 | height:100%;
148 | }
149 | .-c-dialog .-c-elepath{
150 | color:green;
151 | }
152 |
--------------------------------------------------------------------------------
/src/index.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author xiaojue
3 | * @author dujia
4 | * @date 20161027
5 | */
6 |
7 | import './css/console.css';
8 | import html from './template/console.html';
9 |
10 | import Base from './lib/Base.js';
11 | import Console from './lib/Console.js';
12 | import Elements from './lib/Elements.js';
13 |
14 | Object.assign(Base.prototype, Console);
15 | Object.assign(Base.prototype, Elements);
16 |
17 | new Base({
18 | init() {
19 | this.consoleMethods = ['debug', 'error', 'info', 'warn','log'];
20 | this.elesInit = false;
21 | this.fixConsole();
22 | },
23 | events: {
24 | 'click .-c-switch': 'switchBtnClick',
25 | 'click .-c-clear': 'clearClick',
26 | 'click .-c-consoleBar .-c-hide': 'hideClick',
27 | 'click .-c-eleBar .-c-hide': 'hideClick',
28 | 'click .-c-elements': 'elementsClick',
29 | 'click .-c-refresh': 'refresh',
30 | 'click .-c-console': 'consoleClick',
31 | 'click .-c-save': 'saveStyle',
32 | 'click .-c-cancel':'cancel'
33 | },
34 | eles: {
35 | elesBox: '.-c-eles',
36 | logBox: '.-c-content',
37 | consoletoolBar: '.-c-consoleBar',
38 | elestoolBar: '.-c-eleBar',
39 | switchBtn: '.-c-switch',
40 | tab: '.-c-tab',
41 | elesTab: '.-c-elements',
42 | dialog:'.-c-dialog',
43 | consoleTab: '.-c-console'
44 | },
45 | render() {
46 | this.el = this.createElement('div', {id:'__console_wrap'}, html);
47 | this.append(document.body, this.el);
48 | },
49 | pushLog(msg) {
50 | var log = this.createElement('div', {
51 | class: '-c-log'
52 | });
53 | this.text(log, JSON.stringify(msg.join(' ')).slice(1, -1));
54 | this.append(this.logBox, log);
55 | },
56 | cancel(){
57 | this.dialog.close();
58 | },
59 | saveStyle(){
60 | this.changeStyle();
61 | },
62 | switchBtnClick() {
63 | this.show(this.logBox,this.elesBox, this.consoletoolBar,this.elestoolBar, this.tab).hide(this.switchBtn,this.elestoolBar);
64 | },
65 | clearClick() {
66 | this.html(this.logBox, '');
67 | },
68 | hideClick() {
69 | this.hide(this.logBox,this.elesBox, this.consoletoolBar,this.elestoolBar, this.tab).show(this.switchBtn);
70 | this.addClass('-c-current', this.consoleTab).removeClass('-c-current', this.elesTab);
71 | },
72 | elementsClick() {
73 | this.hide(this.logBox, this.consoletoolBar).show(this.elesBox,this.elestoolBar);
74 | this.addClass('-c-current', this.elesTab).removeClass('-c-current', this.consoleTab);
75 | if(this.elesInit) return;
76 | this.elesInit = true;
77 | this.createDomTree(this.elesBox);
78 | },
79 | consoleClick() {
80 | this.hide(this.elesBox,this.elestoolBar).show(this.logBox, this.consoletoolBar);
81 | this.addClass('-c-current', this.consoleTab).removeClass('-c-current', this.elesTab);
82 | },
83 | refresh(){
84 | this.refreshDomTree(this.elesBox);
85 | }
86 | });
87 |
--------------------------------------------------------------------------------
/src/lib/Base.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author xiaojue
3 | * @date 20161028
4 | */
5 | import domUtils from './domUtils.js';
6 |
7 | class Base extends domUtils {
8 | constructor(options) {
9 | Object.assign(this, options);
10 | this.render();
11 | if (this.eles) {
12 | for (var i in this.eles) {
13 | if (this.eles.hasOwnProperty(i)) {
14 | this[i] = this.$(this.eles[i]);
15 | }
16 | }
17 | }
18 | super();
19 | this.init();
20 | return this;
21 | }
22 | render() {}
23 | }
24 |
25 | export default Base;
26 |
--------------------------------------------------------------------------------
/src/lib/Console.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author xiaojue
3 | * @date 20161028
4 | */
5 |
6 | var Console = {
7 | fixConsole() {
8 | this.consoleMethods.forEach((method) => {
9 | var original = window.console[method];
10 | window.console[method] = (...args) => {
11 | if (this.pushLog) this.pushLog(args);
12 | original.apply(console, args);
13 | };
14 | });
15 | }
16 | };
17 |
18 | export default Console;
19 |
--------------------------------------------------------------------------------
/src/lib/Elements.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author xiaojue
3 | * @date 20161028
4 | */
5 |
6 | var uuid = 0;
7 |
8 | var _eventHandlers = {};
9 |
10 | var longtimeout;
11 |
12 |
13 | var Elements = {
14 | refreshDomTree(wrap) {
15 | var arr = this._recursionNode(document, []);
16 | this.removeAllListeners(wrap, 'click');
17 | this.removeAllListeners(wrap, 'touchstart');
18 | this.removeAllListeners(wrap, 'touchend');
19 | wrap.innerHTML = arr.join('');
20 | this.addListener(wrap, 'touchstart', this._touchStart.bind(this), false);
21 | this.addListener(wrap, 'touchend', this._touchEnd.bind(this), false);
22 | this.addListener(wrap, 'click', this._toggleDiv.bind(this), false);
23 | this._eachOmit(wrap.querySelectorAll('.-c-omit'));
24 | },
25 | createDomTree(wrap) {
26 | var arr = this._recursionNode(document, []);
27 | wrap.innerHTML = arr.join('');
28 | this.addListener(wrap, 'click', this._toggleDiv.bind(this), false);
29 | this.addListener(wrap, 'touchstart', this._touchStart.bind(this), false);
30 | this.addListener(wrap, 'touchend', this._touchEnd.bind(this), false);
31 | this._eachOmit(wrap.querySelectorAll('.-c-omit'));
32 | },
33 | changeStyle() {
34 | var dialog = this.dialog,
35 | style= '';
36 | try {
37 | style= JSON.parse(dialog.querySelector('.__console_currentStyle').value);
38 | } catch (e) {
39 | console.error('rewrite style must be standard JSON object string');
40 | return;
41 | }
42 | var c_uuid = dialog.querySelector('.__console_currentStyle').getAttribute('data-uuid');
43 | var nodeTarget = document.querySelector('[console_uuid="' + c_uuid + '"]');
44 | var sheetText = style.sheets.join().replace(/(\}.*?\{)/g,"").replace(/(.*?\{)/g,"").replace(/(\}$)/,"");
45 | nodeTarget.style.cssText = style.cssText + sheetText;
46 | dialog.close();
47 | this.refresh();
48 | },
49 | longPress(e) {
50 | this._showStyle(e);
51 | },
52 | _touchStart(e) {
53 | longtimeout = setTimeout(() => {
54 | this.longPress(e);
55 | }, 800);
56 | },
57 | _touchEnd() {
58 | clearTimeout(longtimeout);
59 | },
60 | css(a) {
61 | var sheets = document.styleSheets,
62 | styleObj = {},
63 | o = [],
64 | i;
65 | a.matches = a.matches || a.webkitMatchesSelector || a.mozMatchesSelector || a.msMatchesSelector || a.oMatchesSelector;
66 | for (i in sheets) {
67 | if (sheets.hasOwnProperty(i)) {
68 | var rules = sheets[i].rules || sheets[i].cssRules;
69 | for (var r in rules) {
70 | if (a.matches(rules[r].selectorText)) {
71 | o.push(rules[r].cssText);
72 | }
73 | }
74 | }
75 | }
76 | styleObj.sheets = o;
77 | //get inline style
78 | var cssText = a.style.cssText;
79 | if (cssText) {
80 | styleObj.cssText = cssText;
81 | }
82 | return styleObj;
83 | },
84 | _showStyle(e) {
85 | var target = e.target;
86 | if (target.nodeType === 1 && target.tagName.toLowerCase() === 'div') {
87 | var c_uuid = target.getAttribute('data-uuid');
88 | var nodeTarget = document.querySelector('[console_uuid="' + c_uuid + '"]');
89 | var style = JSON.stringify(this.css(nodeTarget));
90 | var dialog = this.dialog;
91 | dialog.querySelector('.__console_currentStyle').value = style;
92 | dialog.querySelector('.__console_currentStyle').setAttribute('data-uuid', c_uuid);
93 | dialog.querySelector('.-c-elepath').innerText = target.innerText;
94 | dialog.querySelector('.-c-textare_pre').innerText = style;
95 | dialog.show();
96 | }
97 | },
98 | _showBorder(target) {
99 | var fillterTag = ['html', 'head', 'title', 'meta', 'body', 'script', 'style'];
100 | if (fillterTag.indexOf(target.tagName.toLocaleLowerCase()) > -1) return;
101 | target.style['-webkit-animation'] = 'twinkling .5s infinite ease-in-out';
102 | setTimeout(function() {
103 | target.style['-webkit-animation'] = '';
104 | }, 500);
105 | this._setTargetY(target);
106 | },
107 | _setTargetY(node) {
108 | var curtop = 0;
109 | var curtopscroll = 0;
110 | if (node.offsetParent) {
111 | do {
112 | curtop += node.offsetTop;
113 | curtopscroll += node.offsetParent ? node.offsetParent.scrollTop : 0;
114 | } while ((node = node.offsetParent));
115 | }
116 | window.scrollTop = (curtop - curtopscroll);
117 | },
118 | _toggleDiv(e) {
119 | var target = e.target;
120 | if (target.nodeType === 1 && target.tagName.toLowerCase() === 'div') {
121 | for (var i = 0; i < target.childNodes.length; i++) {
122 | var item = target.childNodes[i];
123 | if (item.nodeType === 1 && item.tagName.toLowerCase() === 'div') {
124 | item.style.display = item.style.display === "block" ? 'none' : 'block';
125 | }
126 | }
127 | //定位
128 | var c_uuid = target.getAttribute('data-uuid');
129 | var nodeTarget = document.querySelector('[console_uuid="' + c_uuid + '"]');
130 | this._showBorder(nodeTarget);
131 | this._eachOmit(target.querySelectorAll('.-c-omit'));
132 | }
133 | },
134 | _eachOmit(eles) {
135 | eles.forEach((ele) => {
136 | var nextTag = ele.nextSibling;
137 | while (nextTag === null) {
138 | if (nextTag.nodeType === 1) break;
139 | nextTag = ele.nextSibling;
140 | }
141 | if (nextTag) {
142 | if (nextTag.nodeType === 1 && nextTag.tagName === 'DIV') {
143 | ele.style.display = nextTag.style.display === 'block' ? 'none' : 'inline';
144 | } else {
145 | ele.style.display = 'none';
146 | }
147 | }
148 | });
149 | },
150 | addListener(node, event, handler, capture) {
151 | if (!(node in _eventHandlers)) {
152 | _eventHandlers[node] = {};
153 | }
154 | if (!(event in _eventHandlers[node])) {
155 | _eventHandlers[node][event] = [];
156 | }
157 | _eventHandlers[node][event].push([handler, capture]);
158 | node.addEventListener(event, handler, capture);
159 | },
160 | removeAllListeners(node, event) {
161 | if (node in _eventHandlers) {
162 | var handlers = _eventHandlers[node];
163 | if (event in handlers) {
164 | var eventHandlers = handlers[event];
165 | for (var i = eventHandlers.length; i--;) {
166 | var handler = eventHandlers[i];
167 | node.removeEventListener(event, handler[0], handler[1]);
168 | }
169 | }
170 | }
171 | },
172 | _recursionNode(node, ret) {
173 | var marginL = 0,
174 | step = 10;
175 | if (node.childNodes.length) {
176 | if (node.tagName) ret.push('... ');
177 | marginL += step;
178 | for (var i = 0; i < node.childNodes.length; i++) {
179 | var item = node.childNodes[i];
180 | if (item.nodeType === 3 && item.nodeValue.trim() !== '') {
181 | ret.push('' + item.nodeValue.trim() + ' ');
182 | }
183 | if (item.nodeType === 1) {
184 | var tagName = item.tagName.toLowerCase();
185 | if (item.id === '__console_wrap') continue;
186 | var isShow = (tagName === 'html' || tagName === 'head' || tagName === 'body') ? 'block' : 'none';
187 | var attributes = '';
188 | item.setAttribute('console_uuid', uuid);
189 | Object.keys(item.attributes).forEach((name) => {
190 | var attr = item.attributes[name];
191 | if (attr.name !== 'console_uuid') {
192 | attributes += '' + attr.name + ' ="' + attr.textContent + ' " ';
193 | }
194 | });
195 | ret.push('<' + tagName + ' ' + attributes + '>');
196 | uuid++;
197 | this._recursionNode(item, ret);
198 | ret.push('</' + tagName + '>
');
199 | }
200 | }
201 | }
202 | return ret;
203 | }
204 | };
205 |
206 | export default Elements;
207 |
--------------------------------------------------------------------------------
/src/lib/domUtils.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author xiaojue
3 | * @date 20161028
4 | */
5 | import eventsMap from './eventsMap.js';
6 |
7 | class domUtils extends eventsMap {
8 | constructor() {
9 | super();
10 | }
11 | createElement(tag, attrs, content) {
12 | var el = document.createElement(tag),
13 | i;
14 | for (i in attrs) {
15 | if (attrs.hasOwnProperty(i)) {
16 | el.setAttribute(i, attrs[i]);
17 | }
18 | }
19 | if (content) {
20 | this.html(el, content);
21 | }
22 | return el;
23 | }
24 | show(...eles) {
25 | eles.forEach((ele) => {
26 | ele.style.display = 'block';
27 | });
28 | return this;
29 | }
30 | hide(...eles) {
31 | eles.forEach((ele) => {
32 | ele.style.display = 'none';
33 | });
34 | return this;
35 | }
36 | append(parent, ...eles) {
37 | eles.forEach((ele) => {
38 | parent.appendChild(ele);
39 | });
40 | return this;
41 | }
42 | _put(string, type, ...eles) {
43 | eles.forEach((ele) => {
44 | if (type) {
45 | if (typeof ele.textContent === 'string') {
46 | ele.textContent = string;
47 | } else {
48 | ele.innerText = string;
49 | }
50 | } else {
51 | ele.innerHTML = string;
52 | }
53 | });
54 | }
55 | html(eles, html) {
56 | this._put(html, 0, eles);
57 | }
58 | text(eles, text) {
59 | this._put(text, 1, eles);
60 | }
61 | addClass(clsName, ...eles) {
62 | eles.forEach((ele) => {
63 | ele.classList.add(clsName);
64 | });
65 | return this;
66 | }
67 | removeClass(clsName, ...eles) {
68 | eles.forEach((ele) => {
69 | ele.classList.remove(clsName);
70 | });
71 | return this;
72 | }
73 | }
74 |
75 | export default domUtils;
76 |
77 |
--------------------------------------------------------------------------------
/src/lib/eventsMap.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author xiaojue
3 | * @date 20161028
4 | */
5 |
6 | class eventsMap {
7 | constructor() {
8 | this.delegateEventSplitter = /^(\S+)\s*(.*)$/;
9 | if (this.events) this._bindEventMap();
10 | }
11 | isFunction(obj) {
12 | return Object.prototype.toString.call(obj) === '[object Function]';
13 | }
14 | $(selector) {
15 | return document.querySelector(selector);
16 | }
17 | _bindEventMap() {
18 | for (var key in this.events) {
19 | if (this.events.hasOwnProperty(key)) {
20 | var method = this.events[key];
21 | if (!this.isFunction(method)) {
22 | method = this[method];
23 | }
24 | if (!method) {
25 | continue;
26 | }
27 | var match = key.match(this.delegateEventSplitter),
28 | type = match[1],
29 | selector = match[2];
30 | this.$(selector).addEventListener(type, method.bind(this));
31 | }
32 | }
33 | }
34 | }
35 |
36 | export default eventsMap;
37 |
--------------------------------------------------------------------------------
/src/template/console.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 | Cancel Save
8 |
9 |
Console
10 |
11 |
12 |
16 |
20 |
21 |
Console
22 |
Elemenets
23 |
24 |
25 |
--------------------------------------------------------------------------------