Socket
Socket
Sign inDemoInstall

vconsole

Package Overview
Dependencies
Maintainers
1
Versions
64
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

vconsole - npm Package Compare versions

Comparing version 1.3.0 to 2.0.0

doc/a_doc_index_CN.md

16

CHANGELOG_CN.md
[English](./CHANGELOG.md) | 简体中文
#### v2.0.0 (2016-06-05)
- 【特性】完全重构,支持自定义插件,请查阅[插件:入门](./doc/plugin_getting_started_CN.md)。
- 【特性】支持手动输入、执行命令行
- 【特性】支持打印循环引用的对象
- 【特性】支持在 Network 面板查看请求的 headers 和 response
- 【优化】开关按钮不会再被拖出屏幕外部
- 【优化】自动在 System 面板打印 User Agent
- 【优化】打印 log 时会显示时间
- 【修复】修复 getDate() 返回错误时间的问题
- 【修复】修复同步 AJAX 变异步 AJAX 的问题
# v1.x.x
#### v1.3.0 (2016-05-20)

@@ -5,0 +21,0 @@

English | [简体中文](./CHANGELOG_CN.md)
#### v2.0.0 (2016-06-05)
- [FEATURE] Rebuild completely, support custom plugin, see [Plugin: Getting Started](./doc/plugin_getting_started.md).
- [FEATURE] Support execute JS command line in Log tab
- [FEATURE] Support circular structure object in Log and System tab
- [FEATURE] Support viewing request headers and response in Network tab
- [IMPROVE] Switch button will not be dragged out of screen
- [IMPROVE] Auto print User Agent in System tab
- [IMPROVE] Show log's time in Log and System tab
- [FIX] Fix issue that getDate() returns a wrong date
- [FIX] Fix issue that sync AJAX becomes async AJAX
# v1.x.x
#### v1.3.0 (2016-05-20)

@@ -5,0 +21,0 @@

5

dist/vconsole.min.js
/*!
* vconsole v1.3.0 (https://github.com/WechatFE/vConsole)
* vconsole v2.0.0 (https://github.com/WechatFE/vConsole)
* Copyright 2016, WechatFE Team
* MIT license
*/
!function(o,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.vConsole=t():o.vConsole=t()}(this,function(){return function(o){function t(n){if(e[n])return e[n].exports;var i=e[n]={exports:{},id:n,loaded:!1};return o[n].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var e={};return t.m=o,t.c=e,t.p="",t(0)}([function(o,t,e){"use strict";function n(o){return o&&o.__esModule?o:{"default":o}}function i(){var o=this;this.html=k["default"],this.$dom=null,this.activedTab="default",this.tabList=["default","system","network"],this.console={},this.logList=[],this.isReady=!1,this.switchPos={x:10,y:10,startX:0,startY:0,endX:0,endY:0},o._mokeConsole(),o._mokeAjax();var t=function(){o._render(),o._bindEvent(),o._autoRun()};"complete"==document.readyState?t():d(window,"load",t)}function r(o,t){return t?t.querySelector(o):document.querySelector(o)}function c(o,t){var e,n=[];return e=t?t.querySelectorAll(o):document.querySelectorAll(o),e&&e.length>0&&(n=Array.prototype.slice.call(e)),n}function s(o,t){if(o){h(o)||(o=[o]);for(var e=0;e<o.length;e++)o[e].className+=" "+t}}function l(o,t){if(o){h(o)||(o=[o]);for(var e=0;e<o.length;e++){for(var n=o[e].className.split(" "),i=0;i<n.length;i++)n[i]==t&&(n[i]="");o[e].className=n.join(" ")}}}function a(o,t){if(!o)return!1;for(var e=o.className.split(" "),n=0;n<e.length;n++)if(e[n]==t)return!0;return!1}function d(o,t,e,n){if(o){void 0===n&&(n=!1),h(o)||(o=[o]);for(var i=0;i<o.length;i++)o[i].addEventListener(t,e,n)}}function v(o){var t=o>0?new Date(o):new Date,e=t.getDay()<10?"0"+t.getDay():t.getDay(),n=t.getMonth()<9?"0"+(t.getMonth()+1):t.getMonth()+1,i=t.getFullYear(),r=t.getHours()<10?"0"+t.getHours():t.getHours(),c=t.getMinutes()<10?"0"+t.getMinutes():t.getMinutes(),s=t.getSeconds()<10?"0"+t.getSeconds():t.getSeconds(),l=t.getMilliseconds()<10?"0"+t.getMilliseconds():t.getMilliseconds();return 100>l&&(l="0"+l),{time:+t,year:i,month:n,day:e,hour:r,minute:c,second:s,millisecond:l}}function f(o){return document.createElement("a").appendChild(document.createTextNode(o)).parentNode.innerHTML}function p(o,t){var e=o;for(var n in t)e=e.replace("{"+n+"}",t[n]);return e}function u(o){return"[object Number]"==Object.prototype.toString.call(o)}function g(o){return"[object String]"==Object.prototype.toString.call(o)}function h(o){return"[object Array]"==Object.prototype.toString.call(o)}function b(o){return"[object Object]"==Object.prototype.toString.call(o)}function m(o){return"[object Function]"==Object.prototype.toString.call(o)}function _(o,t){o="vConsole_"+o,localStorage.setItem(o,t)}function y(o){return o="vConsole_"+o,localStorage.getItem(o)}Object.defineProperty(t,"__esModule",{value:!0});var w="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol?"symbol":typeof o};e(1);var x=e(5),k=n(x),L=e(6),S=n(L);i.prototype._render=function(){var o="#__vconsole";if(!r(o)){var t=document.createElement("div");t.innerHTML=this.html,document.body.appendChild(t.children[0])}this.$dom=r(o);var e=y("switch_x"),n=y("switch_y");e&&n&&(this.switchPos.x=e,this.switchPos.y=n,r(".vc-switch").style.right=e+"px",r(".vc-switch").style.bottom=n+"px")},i.prototype._bindEvent=function(){var o=this,t=r(".vc-switch");d(t,"touchstart",function(t){o.switchPos.startX=t.touches[0].pageX,o.switchPos.startY=t.touches[0].pageY}),d(t,"touchend",function(t){0==o.switchPos.endX&&0==o.switchPos.endY||(o.switchPos.x=o.switchPos.endX,o.switchPos.y=o.switchPos.endY,o.switchPos.startX=0,o.switchPos.startY=0,o.switchPos.endX=0,o.switchPos.endY=0,_("switch_x",o.switchPos.x),_("switch_y",o.switchPos.y))}),d(t,"touchmove",function(e){if(e.touches.length>0){var n=e.touches[0].pageX-o.switchPos.startX,i=e.touches[0].pageY-o.switchPos.startY,r=o.switchPos.x-n,c=o.switchPos.y-i;t.style.right=r+"px",t.style.bottom=c+"px",o.switchPos.endX=r,o.switchPos.endY=c,e.preventDefault()}}),d(r(".vc-switch"),"click",function(){o.show()}),d(r(".vc-hide"),"click",function(){o.hide()}),d(r(".vc-mask"),"click",function(t){return t.target!=r(".vc-mask")?!1:void o.hide()}),d(r(".vc-clear"),"click",function(){o.clearLog(o.activedTab)}),d(c(".vc-tab"),"click",function(t){var e=t.target.dataset.tab;e!=o.activedTab&&o.showTab(e)}),d(c(".vc-log"),"click",function(o){var t=o.target;a(t,"vc-fold-outer")&&(a(t.parentElement,"vc-toggle")?l(t.parentElement,"vc-toggle"):s(t.parentElement,"vc-toggle"),o.preventDefault())})},i.prototype._mokeConsole=function(){if(window.console){var o=this;this.console.log=window.console.log,this.console.info=window.console.info,this.console.warn=window.console.warn,this.console.debug=window.console.debug,this.console.error=window.console.error,window.console.log=function(){o._printLog("auto","log",arguments)},window.console.info=function(){o._printLog("auto","info",arguments)},window.console.warn=function(){o._printLog("auto","warn",arguments)},window.console.debug=function(){o._printLog("auto","debug",arguments)},window.console.error=function(){o._printLog("auto","error",arguments)},window.onerror=function(o,t,e,n,i){var r=i.stack.split("at");r=r[0]+" "+r[1],r=r.replace(location.origin,""),console.error(r)}}},i.prototype._mokeAjax=function(){var o=window.XMLHttpRequest;if(o){var t=window.XMLHttpRequest.prototype.open,e=window.XMLHttpRequest.prototype.send;window.XMLHttpRequest.prototype.open=function(){var o=this,e=arguments;return setTimeout(function(){var t=o.onreadystatechange||function(){};o.onreadystatechange=function(){if(4==o.readyState){o._endTime=+new Date;var n=e[1]||"unknow URL",i=o._endTime-(o._startTime||o._endTime),r="[network]["+o.status+"] ["+i+"ms] "+n;o.status>=200&&o.status<400?console.log(r):console.error(r)}return t.apply(o,arguments)}},0),t.apply(o,e)},window.XMLHttpRequest.prototype.send=function(){var o=this,t=arguments;o._startTime=+new Date,setTimeout(function(){e.apply(o,t)},1)}}},i.prototype._autoRun=function(){for(this.isReady=!0;this.logList.length>0;){var o=this.logList.shift();this._printLog(o.tabName,o.logType,o.logs)}var t=navigator.userAgent,e=[],n=v();this._printLog("system","info",["日志时间:",n.year+"-"+n.month+"-"+n.day+" "+n.hour+":"+n.minute+":"+n.second+" "+n.millisecond]),e=["系统版本:","不明"];var i=t.match(/(ipod).*\s([\d_]+)/i),r=t.match(/(ipad).*\s([\d_]+)/i),c=t.match(/(iphone)\sos\s([\d_]+)/i),s=t.match(/(android)\s([\d\.]+)/i);s?e[1]="Android "+s[2]:c?e[1]="iPhone, iOS "+c[2].replace(/_/g,"."):r?e[1]="iPad, iOS "+r[2].replace(/_/g,"."):i&&(e[1]="iPod, iOS "+i[2].replace(/_/g,".")),this._printLog("system","info",e);var l=t.match(/MicroMessenger\/([\d\.]+)/i);e=["微信版本:","不明"],l&&l[1]&&(e[1]=l[1],this._printLog("system","info",e));var a=t.toLowerCase().match(/ nettype\/([^ ]+)/g);e=["网络类型:","不明"],a&&a[0]&&(a=a[0].split("/"),e[1]=a[1],this._printLog("system","info",e)),e=["网址协议:","不明"],"https:"==location.protocol?e[1]="HTTPS":"http:"==location.protocol?e[1]="HTTP":e[1]=location.protocol.replace(":",""),this._printLog("system","info",e),window.addEventListener("load",function(o){var t=window.performance||window.msPerformance||window.webkitPerformance;if(t&&t.timing){var e=t.timing,n=e.navigationStart;this._printLog("system","info",["连接结束点:",e.connectEnd-n+"ms"]),this._printLog("system","info",["回包结束点:",e.responseEnd-n+"ms"]),e.secureConnectionStart>0&&this._printLog("system","info",["ssl耗时:",e.connectEnd-e.secureConnectionStart+"ms"]),this._printLog("system","info",["dom渲染耗时:",e.domComplete-e.domLoading+"ms"])}})},i.prototype._printLog=function(o,t,e){if(e.length){if(!this.isReady)return void this.logList.push({tabName:o,logType:t,logs:e});for(var n="",i=0;i<e.length;i++)try{n+=m(e[i])?" "+e[i].toString():b(e[i])||h(e[i])?" "+this._getFoldedLine(e[i]):" "+f(e[i]).replace(/\n/g,"<br/>")}catch(c){n+=" ["+w(e[i])+"]"}if("auto"==o){var s=/^ \[(\w+)\]/i,l=n.match(s);null!==l&&l.length>0&&this.tabList.indexOf(l[1])>-1&&(o=l[1],n=n.replace(s,""))}"auto"==o&&(o="default");var a=r("#__vc_log_"+o),d=document.createElement("p");d.className="vc-item vc-item-"+t,d.innerHTML=n,r(".vc-log",a).appendChild(d),r(".vc-content").scrollTop=r(".vc-content").scrollHeight,this.console[t].apply(window.console,e)}},i.prototype._getFoldedLine=function(o,t){function e(o){if(b(o)){var t=Object.keys(o);r+="{\n",s++;for(var n=0;n<t.length;n++){var i=t[n];o.hasOwnProperty(i)&&(r+=Array(s+1).join(l)+'<i class="vc-code-key">'+i+"</i>: ",e(o[i]),n<t.length-1&&(r+=",\n"))}s--,r+="\n"+Array(s+1).join(l)+"}"}else if(h(o)){r+="[\n",s++;for(var n=0;n<o.length;n++)r+=Array(s+1).join(l)+'<i class="vc-code-key">'+n+"</i>: ",e(o[n]),n<o.length-1&&(r+=",\n");s--,r+="\n"+Array(s+1).join(l)+"]"}else r+=g(o)?'<i class="vc-code-string">"'+o+'"</i>':u(o)?'<i class="vc-code-number">'+o+"</i>":JSON.stringify(o)}var n=JSON.stringify(o),i="",r="",c="",s=0,l=" ";c=n.substr(0,30),n.length>30&&(c+="..."),i=Object.prototype.toString.call(o).replace("[object ","").replace("]",""),i+=" "+c,e(o);var a=p(S["default"],{outer:i,inner:r});return a},i.prototype.showTab=function(o){var t=r("#__vc_log_"+o);l(c(".vc-tab",this.$dom),"vc-actived"),s(r("#__vc_tab_"+o),"vc-actived"),l(c(".vc-logbox"),"vc-actived"),s(t,"vc-actived"),r(".vc-content").scrollTop=r(".vc-content").scrollHeight,this.activedTab=o},i.prototype.clearLog=function(o){var t=r("#__vc_log_"+o);r(".vc-log",t).innerHTML=""},i.prototype.show=function(){s(this.$dom,"vc-toggle")},i.prototype.hide=function(){l(this.$dom,"vc-toggle")},i.prototype.ready=function(o){console.warn("vConsole.ready() is deprecated, console.log() can be called at anytime without waiting for ready. This method will be removed at v2.0.0 and later"),o&&o.call(this)},t["default"]=new i,o.exports=t["default"]},function(o,t,e){var n=e(2);"string"==typeof n&&(n=[[o.id,n,""]]);e(4)(n,{});n.locals&&(o.exports=n.locals)},function(o,t,e){t=o.exports=e(3)(),t.push([o.id,'#__vconsole{font-size:13px}#__vconsole .vc-switch{display:block;position:fixed;right:10px;bottom:10px;color:#fff;background-color:#04be02;line-height:1;font-size:14px;padding:8px 16px;z-index:10000;border-radius:4px;box-shadow:0 0 8px rgba(0,0,0,.4)}#__vconsole .vc-mask{display:none;position:fixed;top:0;left:0;right:0;bottom:0;background-color:transparent;z-index:10001;transition:background .3s;-webkit-tap-highlight-color:transparent}#__vconsole .vc-panel{position:fixed;min-height:80%;left:0;right:0;bottom:0;z-index:10002;background-color:#efeff4;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;-webkit-transform:translateY(100%);transform:translateY(100%)}#__vconsole .vc-tabbar{border-bottom:1px solid #d9d9d9;overflow:hidden}#__vconsole .vc-tabbar .vc-tab{float:left;line-height:39px;padding:0 15px;border-right:1px solid #d9d9d9;text-decoration:none;color:#000;-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none}#__vconsole .vc-tabbar .vc-tab:active{background-color:rgba(0,0,0,.15)}#__vconsole .vc-tabbar .vc-tab.vc-actived{background-color:#fff}#__vconsole .vc-content{background-color:#fff;overflow-x:hidden;overflow-y:scroll;position:absolute;top:40px;left:0;right:0;bottom:40px;-webkit-overflow-scrolling:touch}#__vconsole .vc-logbox{display:none;position:relative;height:100%}#__vconsole .vc-logbox i{font-style:normal}#__vconsole .vc-logbox .vc-log{-webkit-tap-highlight-color:transparent}#__vconsole .vc-logbox .vc-log:empty:before{content:"No log";color:#999;position:absolute;top:45%;left:0;right:0;bottom:0;font-size:15px;text-align:center}#__vconsole .vc-logbox .vc-item{margin:0;padding:6px 8px;line-height:1.3;border-bottom:1px solid #eee;word-break:break-word}#__vconsole .vc-logbox .vc-item-info{color:#6a5acd}#__vconsole .vc-logbox .vc-item-debug{color:#daa520}#__vconsole .vc-logbox .vc-item-warn{color:orange;border-color:#ffb930;background-color:#fffacd}#__vconsole .vc-logbox .vc-item-error{color:#dc143c;border-color:#f4a0ab;background-color:#ffe4e1}#__vconsole .vc-logbox .vc-item .vc-fold{display:block;max-height:300px;overflow:scroll;-webkit-overflow-scrolling:touch}#__vconsole .vc-logbox .vc-item .vc-fold .vc-fold-outer{display:block;font-style:italic}#__vconsole .vc-logbox .vc-item .vc-fold .vc-fold-outer:active{background-color:rgba(0,0,0,.15)}#__vconsole .vc-logbox .vc-item .vc-fold .vc-fold-outer{padding-left:10px;position:relative}#__vconsole .vc-logbox .vc-item .vc-fold .vc-fold-outer:before{content:"";position:absolute;top:4px;left:2px;width:0;height:0;border:4px solid transparent;border-left-color:#000}#__vconsole .vc-logbox .vc-item .vc-fold .vc-fold-inner{display:none}#__vconsole .vc-logbox .vc-item .vc-fold.vc-toggle .vc-fold-outer:before{top:6px;left:0;border-top-color:#000;border-left-color:transparent}#__vconsole .vc-logbox .vc-item .vc-fold.vc-toggle .vc-fold-inner{display:block}#__vconsole .vc-logbox .vc-code-key{color:#905}#__vconsole .vc-logbox .vc-code-number{color:#0086b3}#__vconsole .vc-logbox .vc-code-string{color:#183691}#__vconsole .vc-logbox.vc-actived{display:block}#__vconsole .vc-toolbar{border-top:1px solid #d9d9d9;line-height:39px;position:absolute;left:0;right:0;bottom:0;overflow:hidden}#__vconsole .vc-toolbar .vc-tool{text-decoration:none;color:#000;width:50%;float:left;text-align:center;position:relative;-webkit-touch-callout:none}#__vconsole .vc-toolbar .vc-tool:after{content:" ";position:absolute;top:7px;bottom:7px;right:0;border-left:1px solid #d9d9d9}#__vconsole .vc-toolbar .vc-tool-last:after{border:none}#__vconsole.vc-toggle .vc-switch{display:none}#__vconsole.vc-toggle .vc-mask{background:rgba(0,0,0,.6);display:block}#__vconsole.vc-toggle .vc-panel{-webkit-transform:translate(0);transform:translate(0)}',""])},function(o,t){"use strict";o.exports=function(){var o=[];return o.toString=function(){for(var o=[],t=0;t<this.length;t++){var e=this[t];e[2]?o.push("@media "+e[2]+"{"+e[1]+"}"):o.push(e[1])}return o.join("")},o.i=function(t,e){"string"==typeof t&&(t=[[null,t,""]]);for(var n={},i=0;i<this.length;i++){var r=this[i][0];"number"==typeof r&&(n[r]=!0)}for(i=0;i<t.length;i++){var c=t[i];"number"==typeof c[0]&&n[c[0]]||(e&&!c[2]?c[2]=e:e&&(c[2]="("+c[2]+") and ("+e+")"),o.push(c))}},o}},function(o,t,e){function n(o,t){for(var e=0;e<o.length;e++){var n=o[e],i=p[n.id];if(i){i.refs++;for(var r=0;r<i.parts.length;r++)i.parts[r](n.parts[r]);for(;r<n.parts.length;r++)i.parts.push(a(n.parts[r],t))}else{for(var c=[],r=0;r<n.parts.length;r++)c.push(a(n.parts[r],t));p[n.id]={id:n.id,refs:1,parts:c}}}}function i(o){for(var t=[],e={},n=0;n<o.length;n++){var i=o[n],r=i[0],c=i[1],s=i[2],l=i[3],a={css:c,media:s,sourceMap:l};e[r]?e[r].parts.push(a):t.push(e[r]={id:r,parts:[a]})}return t}function r(o,t){var e=h(),n=_[_.length-1];if("top"===o.insertAt)n?n.nextSibling?e.insertBefore(t,n.nextSibling):e.appendChild(t):e.insertBefore(t,e.firstChild),_.push(t);else{if("bottom"!==o.insertAt)throw new Error("Invalid value for parameter 'insertAt'. Must be 'top' or 'bottom'.");e.appendChild(t)}}function c(o){o.parentNode.removeChild(o);var t=_.indexOf(o);t>=0&&_.splice(t,1)}function s(o){var t=document.createElement("style");return t.type="text/css",r(o,t),t}function l(o){var t=document.createElement("link");return t.rel="stylesheet",r(o,t),t}function a(o,t){var e,n,i;if(t.singleton){var r=m++;e=b||(b=s(t)),n=d.bind(null,e,r,!1),i=d.bind(null,e,r,!0)}else o.sourceMap&&"function"==typeof URL&&"function"==typeof URL.createObjectURL&&"function"==typeof URL.revokeObjectURL&&"function"==typeof Blob&&"function"==typeof btoa?(e=l(t),n=f.bind(null,e),i=function(){c(e),e.href&&URL.revokeObjectURL(e.href)}):(e=s(t),n=v.bind(null,e),i=function(){c(e)});return n(o),function(t){if(t){if(t.css===o.css&&t.media===o.media&&t.sourceMap===o.sourceMap)return;n(o=t)}else i()}}function d(o,t,e,n){var i=e?"":n.css;if(o.styleSheet)o.styleSheet.cssText=y(t,i);else{var r=document.createTextNode(i),c=o.childNodes;c[t]&&o.removeChild(c[t]),c.length?o.insertBefore(r,c[t]):o.appendChild(r)}}function v(o,t){var e=t.css,n=t.media;if(n&&o.setAttribute("media",n),o.styleSheet)o.styleSheet.cssText=e;else{for(;o.firstChild;)o.removeChild(o.firstChild);o.appendChild(document.createTextNode(e))}}function f(o,t){var e=t.css,n=t.sourceMap;n&&(e+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(n))))+" */");var i=new Blob([e],{type:"text/css"}),r=o.href;o.href=URL.createObjectURL(i),r&&URL.revokeObjectURL(r)}var p={},u=function(o){var t;return function(){return"undefined"==typeof t&&(t=o.apply(this,arguments)),t}},g=u(function(){return/msie [6-9]\b/.test(window.navigator.userAgent.toLowerCase())}),h=u(function(){return document.head||document.getElementsByTagName("head")[0]}),b=null,m=0,_=[];o.exports=function(o,t){t=t||{},"undefined"==typeof t.singleton&&(t.singleton=g()),"undefined"==typeof t.insertAt&&(t.insertAt="bottom");var e=i(o);return n(e,t),function(o){for(var r=[],c=0;c<e.length;c++){var s=e[c],l=p[s.id];l.refs--,r.push(l)}if(o){var a=i(o);n(a,t)}for(var c=0;c<r.length;c++){var l=r[c];if(0===l.refs){for(var d=0;d<l.parts.length;d++)l.parts[d]();delete p[l.id]}}}};var y=function(){var o=[];return function(t,e){return o[t]=e,o.filter(Boolean).join("\n")}}()},function(o,t){o.exports='<div id=__vconsole class=""> <div class=vc-switch>vConsole</div> <div class=vc-mask> </div> <div class=vc-panel> <div class=vc-tabbar> <a class="vc-tab vc-actived" data-tab=default id=__vc_tab_default>Log</a> <a class=vc-tab data-tab=system id=__vc_tab_system>System</a> <a class=vc-tab data-tab=network id=__vc_tab_network>Network</a> </div> <div class=vc-content> <div class="vc-logbox vc-actived" id=__vc_log_default> <div class=vc-log></div> </div> <div class=vc-logbox id=__vc_log_system> <div class=vc-log></div> </div> <div class=vc-logbox id=__vc_log_network> <div class=vc-log></div> </div> </div> <div class=vc-toolbar> <a class="vc-tool vc-clear">Clear</a> <a class="vc-tool vc-tool-last vc-hide">Hide</a> </div> </div> </div>'},function(o,t){o.exports="<span class=vc-fold> <i class=vc-fold-outer>{outer}</i> <pre class=vc-fold-inner>{inner}</pre> </span>"}])});
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.vConsole=t():e.vConsole=t()}(this,function(){return function(e){function t(n){if(o[n])return o[n].exports;var r=o[n]={exports:{},id:n,loaded:!1};return e[n].call(r.exports,r,r.exports,t),r.loaded=!0,r.exports}var o={};return t.m=e,t.c=o,t.p="",t(0)}([function(e,t,o){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(t,"__esModule",{value:!0});var r=o(1),i=n(r),l=o(13),c=n(l),a=o(14),s=n(a),d=o(21),u=n(d),f=o(23),v=n(f),p=new i["default"];p.addPlugin(s["default"]),p.addPlugin(u["default"]),p.addPlugin(v["default"]),p.VConsolePlugin=c["default"],t["default"]=p,e.exports=t["default"]},function(e,t,o){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t["default"]=e,t}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var l=function(){function e(e,t){for(var o=0;o<t.length;o++){var n=t[o];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,o,n){return o&&e(t.prototype,o),n&&e(t,n),t}}(),c=o(2),a=r(c),s=o(3),d=n(s);o(5);var u=o(9),f=n(u),v=o(10),p=n(v),b=o(11),h=n(b),g=o(12),y=n(g),m=function(){function e(){i(this,e);var t=this;this.html=f["default"],this.$dom=null,this.activedTab="",this.tabList=[],this.pluginList={},this.console={},this.logList=[],this.isReady=!1,this.switchPos={x:10,y:10,startX:0,startY:0,endX:0,endY:0},this.bodyOverflowCSS="";var o=function(){t._render(),t._bindEvent(),t._autoRun()};"complete"==document.readyState?o():d["default"].bind(window,"load",o)}return l(e,[{key:"_render",value:function(){var e="#__vconsole";if(!d["default"].one(e)){var t=document.createElement("div");t.innerHTML=this.html,document.body.appendChild(t.children[0])}this.$dom=d["default"].one(e);var o=a.getStorage("switch_x"),n=a.getStorage("switch_y");o&&n&&(this.switchPos.x=o,this.switchPos.y=n,d["default"].one(".vc-switch").style.right=o+"px",d["default"].one(".vc-switch").style.bottom=n+"px")}},{key:"_bindEvent",value:function(){var e=this,t=d["default"].one(".vc-switch",e.$dom);d["default"].bind(t,"touchstart",function(t){e.switchPos.startX=t.touches[0].pageX,e.switchPos.startY=t.touches[0].pageY}),d["default"].bind(t,"touchend",function(t){0==e.switchPos.endX&&0==e.switchPos.endY||(e.switchPos.x=e.switchPos.endX,e.switchPos.y=e.switchPos.endY,e.switchPos.startX=0,e.switchPos.startY=0,e.switchPos.endX=0,e.switchPos.endY=0,a.setStorage("switch_x",e.switchPos.x),a.setStorage("switch_y",e.switchPos.y))}),d["default"].bind(t,"touchmove",function(o){if(o.touches.length>0){var n=o.touches[0].pageX-e.switchPos.startX,r=o.touches[0].pageY-e.switchPos.startY,i=e.switchPos.x-n,l=e.switchPos.y-r;0>i&&(i=0),0>l&&(l=0),i+t.offsetWidth>document.body.offsetWidth&&(i=document.body.offsetWidth-t.offsetWidth),l+t.offsetHeight>document.body.offsetHeight&&(l=document.body.offsetHeight-t.offsetHeight),t.style.right=i+"px",t.style.bottom=l+"px",e.switchPos.endX=i,e.switchPos.endY=l,o.preventDefault()}}),d["default"].bind(d["default"].one(".vc-switch",e.$dom),"click",function(){e.show()}),d["default"].bind(d["default"].one(".vc-hide",e.$dom),"click",function(){e.hide()}),d["default"].bind(d["default"].one(".vc-mask",e.$dom),"click",function(t){return t.target!=d["default"].one(".vc-mask")?!1:void e.hide()}),d["default"].delegate(d["default"].one(".vc-tabbar",e.$dom),"click",".vc-tab",function(t){var o=this.dataset.tab;o!=e.activedTab&&e.showTab(o)})}},{key:"_autoRun",value:function(){this.isReady=!0;for(var e in this.pluginList)this._initPlugin(this.pluginList[e]);this.showTab(this.tabList[0])}},{key:"_initPlugin",value:function(e){var t=this;e.trigger("init"),e.trigger("renderTab",function(o){t.tabList.push(e.id);var n=d["default"].render(p["default"],{id:e.id,name:e.name});d["default"].one(".vc-tabbar",t.$dom).appendChild(n);var r=d["default"].render(h["default"],{id:e.id});o&&(a.isString(o)?r.innerHTML+=o:a.isFunction(o.appendTo)?o.appendTo(r):a.isElement(o)&&r.appendChild(o)),d["default"].one(".vc-content",t.$dom).appendChild(r)}),e.trigger("addTool",function(t){if(t){var o=d["default"].one(".vc-tool-last"),n=!0,r=!1,i=void 0;try{for(var l,c=t[Symbol.iterator]();!(n=(l=c.next()).done);n=!0){var s=l.value,u=d["default"].render(y["default"],{name:s.name||"Undefined",pluginID:e.id});1==s.global&&d["default"].addClass(u,"vc-global-tool"),a.isFunction(s.onClick)&&d["default"].bind(u,"click",s.onClick),o.parentNode.insertBefore(u,o)}}catch(f){r=!0,i=f}finally{try{!n&&c["return"]&&c["return"]()}finally{if(r)throw i}}}}),e.trigger("ready")}},{key:"_triggerPluginsEvent",value:function(e){for(var t in this.pluginList)this.pluginList[t].trigger(e)}},{key:"_triggerPluginEvent",value:function(e,t){var o=this.pluginList[e];o&&o.trigger(t)}},{key:"addPlugin",value:function(e){return void 0!==this.pluginList[e.id]?(console.warn("Plugin "+e.id+" has already been added."),!1):(this.pluginList[e.id]=e,this.isReady&&this._initPlugin(e),!0)}},{key:"show",value:function(){d["default"].addClass(this.$dom,"vc-toggle"),this._triggerPluginsEvent("showConsole"),this.bodyOverflowCSS=document.body.style.overflow,document.body.style.overflow="hidden"}},{key:"hide",value:function(){document.body.style.overflow=this.bodyOverflowCSS,d["default"].removeClass(this.$dom,"vc-toggle"),this._triggerPluginsEvent("hideConsole")}},{key:"showTab",value:function(e){var t=d["default"].one("#__vc_log_"+e);d["default"].removeClass(d["default"].all(".vc-tab",this.$dom),"vc-actived"),d["default"].addClass(d["default"].one("#__vc_tab_"+e),"vc-actived"),d["default"].removeClass(d["default"].all(".vc-logbox",this.$dom),"vc-actived"),d["default"].addClass(t,"vc-actived"),d["default"].one(".vc-content",this.$dom).scrollTop=d["default"].one(".vc-content",this.$dom).scrollHeight,d["default"].removeClass(d["default"].all(".vc-tool",this.$dom),"vc-actived"),d["default"].addClass(d["default"].all(".vc-tool-"+e,this.$dom),"vc-actived"),this._triggerPluginEvent(this.activedTab,"hide"),this.activedTab=e,this._triggerPluginEvent(this.activedTab,"show")}}]),e}();t["default"]=m,e.exports=t["default"]},function(e,t){"use strict";function o(e){var t=e>0?new Date(e):new Date,o=t.getDate()<10?"0"+t.getDate():t.getDate(),n=t.getMonth()<9?"0"+(t.getMonth()+1):t.getMonth()+1,r=t.getFullYear(),i=t.getHours()<10?"0"+t.getHours():t.getHours(),l=t.getMinutes()<10?"0"+t.getMinutes():t.getMinutes(),c=t.getSeconds()<10?"0"+t.getSeconds():t.getSeconds(),a=t.getMilliseconds()<10?"0"+t.getMilliseconds():t.getMilliseconds();return 100>a&&(a="0"+a),{time:+t,year:r,month:n,day:o,hour:i,minute:l,second:c,millisecond:a}}function n(e){return"[object Number]"==Object.prototype.toString.call(e)}function r(e){return"[object String]"==Object.prototype.toString.call(e)}function i(e){return"[object Array]"==Object.prototype.toString.call(e)}function l(e){return"[object Boolean]"==Object.prototype.toString.call(e)}function c(e){return"[object Undefined]"==Object.prototype.toString.call(e)}function a(e){return"[object Null]"==Object.prototype.toString.call(e)}function s(e){return"[object Symbol]"==Object.prototype.toString.call(e)}function d(e){return!("[object Object]"!=Object.prototype.toString.call(e)&&(n(e)||r(e)||i(e)||a(e)||u(e)||c(e)||s(e)))}function u(e){return"[object Function]"==Object.prototype.toString.call(e)}function f(e){return"object"===("undefined"==typeof HTMLElement?"undefined":g(HTMLElement))?e instanceof HTMLElement:e&&"object"===("undefined"==typeof e?"undefined":g(e))&&null!==e&&1===e.nodeType&&"string"==typeof e.nodeName}function v(e){return document.createElement("a").appendChild(document.createTextNode(e)).parentNode.innerHTML}function p(e){function t(e){for(var t=p.length-1;t>=0;t--)if(p[t].child==e)return!0;return!1}function o(e){if(d(e)){if(t(e))return void(f+="CircularObject");p.push({parent:parent,child:e});var b=Object.keys(e);f+="{",v++;for(var h=0;h<b.length;h++){var g=b[h];e.hasOwnProperty(g)&&(f+=g+": ",o(e[g],e),h<b.length-1&&(f+=", "))}v--,f+="}",p.pop()}else if(i(e)){if(t(e))return void(f+="CircularArray");p.push({parent:parent,child:e}),f+="[",v++;for(var y=0;y<e.length;y++)o(e[y],e),y<e.length-1&&(f+=", ");v--,f+="]",p.pop()}else f+=r(e)?'"'+e+'"':n(e)?e:l(e)?e:a(e)?"null":c(e)?"undefined":u(e)?"function()":s(e)?"symbol":"unknown"}var f="",v=0,p=[];return o(e,null),f}function b(e,t){e="vConsole_"+e,localStorage.setItem(e,t)}function h(e){return e="vConsole_"+e,localStorage.getItem(e)}Object.defineProperty(t,"__esModule",{value:!0});var g="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e};t.getDate=o,t.isNumber=n,t.isString=r,t.isArray=i,t.isBoolean=l,t.isUndefined=c,t.isNull=a,t.isSymbol=s,t.isObject=d,t.isFunction=u,t.isElement=f,t.htmlEncode=v,t.JSONStringify=p,t.setStorage=b,t.getStorage=h},function(e,t,o){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(t,"__esModule",{value:!0});var r=o(2),i=o(4),l=n(i),c={};c.one=function(e,t){return t?t.querySelector(e):document.querySelector(e)},c.all=function(e,t){var o=void 0,n=[];return o=t?t.querySelectorAll(e):document.querySelectorAll(e),o&&o.length>0&&(n=Array.prototype.slice.call(o)),n},c.addClass=function(e,t){if(e){(0,r.isArray)(e)||(e=[e]);var o=!0,n=!1,i=void 0;try{for(var l,c=e[Symbol.iterator]();!(o=(l=c.next()).done);o=!0){var a=l.value;a.className+=" "+t}}catch(s){n=!0,i=s}finally{try{!o&&c["return"]&&c["return"]()}finally{if(n)throw i}}}},c.removeClass=function(e,t){if(e){(0,r.isArray)(e)||(e=[e]);var o=!0,n=!1,i=void 0;try{for(var l,c=e[Symbol.iterator]();!(o=(l=c.next()).done);o=!0){for(var a=l.value,s=a.className.split(" "),d=0;d<s.length;d++)s[d]==t&&(s[d]="");a.className=s.join(" ").trim()}}catch(u){n=!0,i=u}finally{try{!o&&c["return"]&&c["return"]()}finally{if(n)throw i}}}},c.hasClass=function(e,t){if(!e)return!1;var o=e.className.split(" "),n=!0,r=!1,i=void 0;try{for(var l,c=o[Symbol.iterator]();!(n=(l=c.next()).done);n=!0){var a=l.value;if(a==t)return!0}}catch(s){r=!0,i=s}finally{try{!n&&c["return"]&&c["return"]()}finally{if(r)throw i}}return!1},c.bind=function(e,t,o,n){if(e){void 0===n&&(n=!1),(0,r.isArray)(e)||(e=[e]);var i=!0,l=!1,c=void 0;try{for(var a,s=e[Symbol.iterator]();!(i=(a=s.next()).done);i=!0){var d=a.value;d.addEventListener(t,o,n)}}catch(u){l=!0,c=u}finally{try{!i&&s["return"]&&s["return"]()}finally{if(l)throw c}}}},c.delegate=function(e,t,o,n){e&&e.addEventListener(t,function(t){var r=c.all(o,e);if(r){var i=!0,l=!1,a=void 0;try{e:for(var s,d=r[Symbol.iterator]();!(i=(s=d.next()).done);i=!0)for(var u=s.value,f=t.target;f;){if(f==u){n.call(f,t);break e}if(f=f.parentNode,f==e)break}}catch(v){l=!0,a=v}finally{try{!i&&d["return"]&&d["return"]()}finally{if(l)throw a}}}},!1)},c.render=l["default"],t["default"]=c,e.exports=t["default"]},function(e,t){"use strict";function o(e,t,o){var n=/\{\{([^\}]+)\}\}/g,r="var arr = [];\n",i=0,l=[],c=function(e,t){""!==e&&(r+=t?e.match(/^ ?else/g)?"} "+e+" {\n":e.match(/\/(if|for|switch)/g)?"}\n":e.match(/^ ?if|for|switch/g)?e+" {\n":e.match(/^ ?(break|continue) ?$/g)?e+";\n":e.match(/^ ?(case|default)/g)?e+":\n":"arr.push("+e+");\n":'arr.push("'+e.replace(/"/g,'\\"')+'");\n')};for(e=e.replace(/(\{\{ ?switch(.+?)\}\})[\r\n\t ]+\{\{/g,"$1{{"),e=e.replace(/^\n/,"").replace(/\n/g,"\\\n");l=n.exec(e);)c(e.slice(i,l.index),!1),c(l[1],!0),i=l.index+l[0].length;c(e.substr(i,e.length-i),!1),r+='return arr.join("");',r="with (this) {\n"+r+"\n}";var a=new Function(r).apply(t);if(!o){var s=document.createElement("div");s.innerHTML=a,a=s.children[0]}return a}Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=o,e.exports=t["default"]},function(e,t,o){var n=o(6);"string"==typeof n&&(n=[[e.id,n,""]]);o(8)(n,{});n.locals&&(e.exports=n.locals)},function(e,t,o){t=e.exports=o(7)(),t.push([e.id,'#__vconsole{font-size:13px}#__vconsole .vc-max-height{max-height:250px}#__vconsole .vc-max-height-line{max-height:44px}#__vconsole .vc-min-height{min-height:40px}#__vconsole .vc-switch{display:block;position:fixed;right:10px;bottom:10px;color:#fff;background-color:#04be02;line-height:1;font-size:14px;padding:8px 16px;z-index:10000;border-radius:4px;box-shadow:0 0 8px rgba(0,0,0,.4)}#__vconsole .vc-mask{display:none;position:fixed;top:0;left:0;right:0;bottom:0;background-color:transparent;z-index:10001;transition:background .3s;-webkit-tap-highlight-color:transparent}#__vconsole .vc-panel{position:fixed;min-height:80%;left:0;right:0;bottom:0;z-index:10002;background-color:#efeff4;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;-webkit-transform:translateY(100%);transform:translateY(100%)}#__vconsole .vc-tabbar{border-bottom:1px solid #d9d9d9;overflow:scroll;height:39px;width:auto;white-space:nowrap}#__vconsole .vc-tabbar .vc-tab{display:inline-block;line-height:39px;padding:0 15px;border-right:1px solid #d9d9d9;text-decoration:none;color:#000;-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none}#__vconsole .vc-tabbar .vc-tab:active{background-color:rgba(0,0,0,.15)}#__vconsole .vc-tabbar .vc-tab.vc-actived{background-color:#fff}#__vconsole .vc-content{background-color:#fff;overflow-x:hidden;overflow-y:scroll;position:absolute;top:40px;left:0;right:0;bottom:40px;-webkit-overflow-scrolling:touch}#__vconsole .vc-logbox{display:none;position:relative;min-height:100%}#__vconsole .vc-logbox i{font-style:normal}#__vconsole .vc-logbox .vc-log{-webkit-tap-highlight-color:transparent}#__vconsole .vc-logbox .vc-log:empty:before{content:"Empty";color:#999;position:absolute;top:45%;left:0;right:0;bottom:0;font-size:15px;text-align:center}#__vconsole .vc-logbox .vc-item{margin:0;padding:6px 8px;overflow:hidden;line-height:1.3;border-bottom:1px solid #eee;word-break:break-word}#__vconsole .vc-logbox .vc-item-info{color:#6a5acd}#__vconsole .vc-logbox .vc-item-debug{color:#daa520}#__vconsole .vc-logbox .vc-item-warn{color:orange;border-color:#ffb930;background-color:#fffacd}#__vconsole .vc-logbox .vc-item-error{color:#dc143c;border-color:#f4a0ab;background-color:#ffe4e1}#__vconsole .vc-logbox .vc-item .vc-item-content{margin-right:60px;display:block}#__vconsole .vc-logbox .vc-item .vc-item-meta{color:#888;float:right;width:60px;text-align:right}#__vconsole .vc-logbox .vc-item.vc-item-nometa .vc-item-content{margin-right:0}#__vconsole .vc-logbox .vc-item.vc-item-nometa .vc-item-meta{display:none}#__vconsole .vc-logbox .vc-item .vc-item-code{display:block;white-space:pre-wrap;overflow:scroll;position:relative}#__vconsole .vc-logbox .vc-item .vc-item-code.vc-item-code-input,#__vconsole .vc-logbox .vc-item .vc-item-code.vc-item-code-output{padding-left:12px}#__vconsole .vc-logbox .vc-item .vc-item-code.vc-item-code-input:before,#__vconsole .vc-logbox .vc-item .vc-item-code.vc-item-code-output:before{content:"\\203A";position:absolute;top:-3px;left:0;font-size:16px;color:#6a5acd}#__vconsole .vc-logbox .vc-item .vc-item-code.vc-item-code-output:before{content:"\\2039"}#__vconsole .vc-logbox .vc-item .vc-fold{display:block;overflow:scroll;-webkit-overflow-scrolling:touch}#__vconsole .vc-logbox .vc-item .vc-fold .vc-fold-outer{display:block;font-style:italic}#__vconsole .vc-logbox .vc-item .vc-fold .vc-fold-outer:active{background-color:#e6e6e6}#__vconsole .vc-logbox .vc-item .vc-fold .vc-fold-outer{padding-left:10px;position:relative}#__vconsole .vc-logbox .vc-item .vc-fold .vc-fold-outer:before{content:"";position:absolute;top:4px;left:2px;width:0;height:0;border:4px solid transparent;border-left-color:#000}#__vconsole .vc-logbox .vc-item .vc-fold .vc-fold-inner{display:none;white-space:pre-wrap}#__vconsole .vc-logbox .vc-item .vc-fold.vc-toggle .vc-fold-outer:before{top:6px;left:0;border-top-color:#000;border-left-color:transparent}#__vconsole .vc-logbox .vc-item .vc-fold.vc-toggle .vc-fold-inner{display:block}#__vconsole .vc-logbox .vc-code-key{color:#905}#__vconsole .vc-logbox .vc-code-function{color:#905;font-style:italic}#__vconsole .vc-logbox .vc-code-boolean,#__vconsole .vc-logbox .vc-code-number{color:#0086b3}#__vconsole .vc-logbox .vc-code-string{color:#183691}#__vconsole .vc-logbox .vc-code-null,#__vconsole .vc-logbox .vc-code-undefined{color:#666}#__vconsole .vc-logbox .vc-cmd{position:absolute;height:40px;left:0;right:0;bottom:0;border-top:1px solid #d9d9d9}#__vconsole .vc-logbox .vc-cmd .vc-cmd-input-wrap{display:block;height:28px;margin-right:40px;padding:6px 8px}#__vconsole .vc-logbox .vc-cmd .vc-cmd-input{width:100%;border:none;resize:none;outline:none;padding:0;font-size:12px}#__vconsole .vc-logbox .vc-cmd .vc-cmd-input::-webkit-input-placeholder{line-height:28px}#__vconsole .vc-logbox .vc-cmd .vc-cmd-btn{position:absolute;top:0;right:0;bottom:0;width:40px;border:none;background-color:#efeff4;outline:none;-webkit-touch-callout:none}#__vconsole .vc-logbox .vc-cmd .vc-cmd-btn:active{background-color:rgba(0,0,0,.15)}#__vconsole .vc-logbox .vc-group .vc-group-preview{-webkit-touch-callout:none}#__vconsole .vc-logbox .vc-group .vc-group-preview:active{background-color:#e6e6e6}#__vconsole .vc-logbox .vc-group .vc-group-detail{display:none;padding:0 0 10px 20px;border-bottom:1px solid #eee}#__vconsole .vc-logbox .vc-group.vc-actived .vc-group-detail{display:block}#__vconsole .vc-logbox .vc-table .vc-table-row{display:flex;flex-direction:row;flex-wrap:wrap;overflow:hidden;border-bottom:1px solid #eee}#__vconsole .vc-logbox .vc-table .vc-table-row.vc-left-border{border-left:1px solid #eee}#__vconsole .vc-logbox .vc-table .vc-table-col{flex:1;padding:3px 4px;border-left:1px solid #eee;overflow:scroll;white-space:pre-wrap;word-break:break-word;-webkit-overflow-scrolling:touch}#__vconsole .vc-logbox .vc-table .vc-table-col:first-child{border:none}#__vconsole .vc-logbox .vc-table .vc-small .vc-table-col{padding:0 4px;font-size:12px}#__vconsole .vc-logbox .vc-table .vc-table-col-2{flex:2}#__vconsole .vc-logbox .vc-table .vc-table-col-3{flex:3}#__vconsole .vc-logbox .vc-table .vc-table-col-4{flex:4}#__vconsole .vc-logbox .vc-table .vc-table-col-5{flex:5}#__vconsole .vc-logbox .vc-table .vc-table-col-6{flex:6}#__vconsole .vc-logbox .vc-table .vc-table-row-error{border-color:#f4a0ab;background-color:#ffe4e1}#__vconsole .vc-logbox .vc-table .vc-table-row-error .vc-table-col{color:#dc143c;border-color:#f4a0ab}#__vconsole .vc-logbox .vc-table .vc-table-col-title{font-weight:700}#__vconsole .vc-logbox.vc-actived{display:block}#__vconsole .vc-toolbar{border-top:1px solid #d9d9d9;line-height:39px;position:absolute;left:0;right:0;bottom:0;display:flex;flex-direction:row}#__vconsole .vc-toolbar .vc-tool{display:none;text-decoration:none;color:#000;width:50%;flex:1;text-align:center;position:relative;-webkit-touch-callout:none}#__vconsole .vc-toolbar .vc-tool.vc-actived,#__vconsole .vc-toolbar .vc-tool.vc-global-tool{display:block}#__vconsole .vc-toolbar .vc-tool:active{background-color:rgba(0,0,0,.15)}#__vconsole .vc-toolbar .vc-tool:after{content:" ";position:absolute;top:7px;bottom:7px;right:0;border-left:1px solid #d9d9d9}#__vconsole .vc-toolbar .vc-tool-last:after{border:none}#__vconsole.vc-toggle .vc-switch{display:none}#__vconsole.vc-toggle .vc-mask{background:rgba(0,0,0,.6);display:block}#__vconsole.vc-toggle .vc-panel{-webkit-transform:translate(0);transform:translate(0)}',""])},function(e,t){"use strict";e.exports=function(){var e=[];return e.toString=function(){for(var e=[],t=0;t<this.length;t++){var o=this[t];o[2]?e.push("@media "+o[2]+"{"+o[1]+"}"):e.push(o[1])}return e.join("")},e.i=function(t,o){"string"==typeof t&&(t=[[null,t,""]]);for(var n={},r=0;r<this.length;r++){var i=this[r][0];"number"==typeof i&&(n[i]=!0)}for(r=0;r<t.length;r++){var l=t[r];"number"==typeof l[0]&&n[l[0]]||(o&&!l[2]?l[2]=o:o&&(l[2]="("+l[2]+") and ("+o+")"),e.push(l))}},e}},function(e,t,o){function n(e,t){for(var o=0;o<e.length;o++){var n=e[o],r=v[n.id];if(r){r.refs++;for(var i=0;i<r.parts.length;i++)r.parts[i](n.parts[i]);for(;i<n.parts.length;i++)r.parts.push(s(n.parts[i],t))}else{for(var l=[],i=0;i<n.parts.length;i++)l.push(s(n.parts[i],t));v[n.id]={id:n.id,refs:1,parts:l}}}}function r(e){for(var t=[],o={},n=0;n<e.length;n++){var r=e[n],i=r[0],l=r[1],c=r[2],a=r[3],s={css:l,media:c,sourceMap:a};o[i]?o[i].parts.push(s):t.push(o[i]={id:i,parts:[s]})}return t}function i(e,t){var o=h(),n=m[m.length-1];if("top"===e.insertAt)n?n.nextSibling?o.insertBefore(t,n.nextSibling):o.appendChild(t):o.insertBefore(t,o.firstChild),m.push(t);else{if("bottom"!==e.insertAt)throw new Error("Invalid value for parameter 'insertAt'. Must be 'top' or 'bottom'.");o.appendChild(t)}}function l(e){e.parentNode.removeChild(e);var t=m.indexOf(e);t>=0&&m.splice(t,1)}function c(e){var t=document.createElement("style");return t.type="text/css",i(e,t),t}function a(e){var t=document.createElement("link");return t.rel="stylesheet",i(e,t),t}function s(e,t){var o,n,r;if(t.singleton){var i=y++;o=g||(g=c(t)),n=d.bind(null,o,i,!1),r=d.bind(null,o,i,!0)}else e.sourceMap&&"function"==typeof URL&&"function"==typeof URL.createObjectURL&&"function"==typeof URL.revokeObjectURL&&"function"==typeof Blob&&"function"==typeof btoa?(o=a(t),n=f.bind(null,o),r=function(){l(o),o.href&&URL.revokeObjectURL(o.href)}):(o=c(t),n=u.bind(null,o),r=function(){l(o)});return n(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap)return;n(e=t)}else r()}}function d(e,t,o,n){var r=o?"":n.css;if(e.styleSheet)e.styleSheet.cssText=_(t,r);else{var i=document.createTextNode(r),l=e.childNodes;l[t]&&e.removeChild(l[t]),l.length?e.insertBefore(i,l[t]):e.appendChild(i)}}function u(e,t){var o=t.css,n=t.media;if(n&&e.setAttribute("media",n),e.styleSheet)e.styleSheet.cssText=o;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(o))}}function f(e,t){var o=t.css,n=t.sourceMap;n&&(o+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(n))))+" */");var r=new Blob([o],{type:"text/css"}),i=e.href;e.href=URL.createObjectURL(r),i&&URL.revokeObjectURL(i)}var v={},p=function(e){var t;return function(){return"undefined"==typeof t&&(t=e.apply(this,arguments)),t}},b=p(function(){return/msie [6-9]\b/.test(window.navigator.userAgent.toLowerCase())}),h=p(function(){return document.head||document.getElementsByTagName("head")[0]}),g=null,y=0,m=[];e.exports=function(e,t){t=t||{},"undefined"==typeof t.singleton&&(t.singleton=b()),"undefined"==typeof t.insertAt&&(t.insertAt="bottom");var o=r(e);return n(o,t),function(e){for(var i=[],l=0;l<o.length;l++){var c=o[l],a=v[c.id];a.refs--,i.push(a)}if(e){var s=r(e);n(s,t)}for(var l=0;l<i.length;l++){var a=i[l];if(0===a.refs){for(var d=0;d<a.parts.length;d++)a.parts[d]();delete v[a.id]}}}};var _=function(){var e=[];return function(t,o){return e[t]=o,e.filter(Boolean).join("\n")}}()},function(e,t){e.exports='<div id=__vconsole class=""> <div class=vc-switch>vConsole</div> <div class=vc-mask> </div> <div class=vc-panel> <div class=vc-tabbar> </div> <div class=vc-content> </div> <div class=vc-toolbar> <a class="vc-tool vc-global-tool vc-tool-last vc-hide">Hide</a> </div> </div> </div>'},function(e,t){e.exports="<a class=vc-tab data-tab={{id}} id=__vc_tab_{{id}}>{{name}}</a>"},function(e,t){e.exports="<div class=vc-logbox id=__vc_log_{{id}}> </div>"},function(e,t){e.exports='<a class="vc-tool vc-tool-{{pluginID}}">{{name}}</a>'},function(e,t){"use strict";function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(e,t){for(var o=0;o<t.length;o++){var n=t[o];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,o,n){return o&&e(t.prototype,o),n&&e(t,n),t}}(),r=function(){function e(t){var n=arguments.length<=1||void 0===arguments[1]?"newPlugin":arguments[1];o(this,e),this.id=t,this.name=n,this.eventList={}}return n(e,[{key:"on",value:function(e,t){return this.eventList[e]=t,this}},{key:"trigger",value:function(e,t){if("function"==typeof this.eventList[e])this.eventList[e].call(this,t);else{var o="on"+e.charAt(0).toUpperCase()+e.slice(1);"function"==typeof this[o]&&this[o].call(this,t)}return this}},{key:"id",get:function(){return this._id},set:function(e){if(!e)throw"Plugin ID cannot be empty";this._id=e.toLowerCase()}},{key:"name",get:function(){return this._name},set:function(e){if(!e)throw"Plugin name cannot be empty";this._name=e}}]),e}();t["default"]=r,e.exports=t["default"]},function(module,exports,__webpack_require__){"use strict";function _interopRequireWildcard(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t["default"]=e,t}function _interopRequireDefault(e){return e&&e.__esModule?e:{"default":e}}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _possibleConstructorReturn(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function _inherits(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(exports,"__esModule",{value:!0});var _createClass=function(){function e(e,t){for(var o=0;o<t.length;o++){var n=t[o];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,o,n){return o&&e(t.prototype,o),n&&e(t,n),t}}(),_get=function e(t,o,n){null===t&&(t=Function.prototype);var r=Object.getOwnPropertyDescriptor(t,o);if(void 0===r){var i=Object.getPrototypeOf(t);return null===i?void 0:e(i,o,n)}if("value"in r)return r.value;var l=r.get;if(void 0!==l)return l.call(n)},_query=__webpack_require__(3),_query2=_interopRequireDefault(_query),_tool=__webpack_require__(2),tool=_interopRequireWildcard(_tool),_log=__webpack_require__(15),_log2=_interopRequireDefault(_log),_tabbox_default=__webpack_require__(19),_tabbox_default2=_interopRequireDefault(_tabbox_default),_item_code=__webpack_require__(20),_item_code2=_interopRequireDefault(_item_code),VConsoleDefaultTab=function(_VConsoleLogTab){function VConsoleDefaultTab(){var e;_classCallCheck(this,VConsoleDefaultTab);for(var t=arguments.length,o=Array(t),n=0;t>n;n++)o[n]=arguments[n];var r=_possibleConstructorReturn(this,(e=Object.getPrototypeOf(VConsoleDefaultTab)).call.apply(e,[this].concat(o)));return r.tplTabbox=_tabbox_default2["default"],r}return _inherits(VConsoleDefaultTab,_VConsoleLogTab),_createClass(VConsoleDefaultTab,[{key:"onReady",value:function(){var e=this;_get(Object.getPrototypeOf(VConsoleDefaultTab.prototype),"onReady",this).call(this),_query2["default"].bind(_query2["default"].one(".vc-cmd",this.$tabbox),"submit",function(t){t.preventDefault();var o=_query2["default"].one(".vc-cmd-input",t.target),n=o.value;o.value="",""!==n&&e.evalCommand(n)})}},{key:"evalCommand",value:function evalCommand(cmd){var date=tool.getDate(+new Date);this.renderLog({logType:"log",meta:date.hour+":"+date.minute+":"+date.second,content:_query2["default"].render(_item_code2["default"],{content:cmd,type:"input"},!0),style:""});var result=eval(cmd),content="";content=tool.isArray(result)||tool.isObject(result)?this.getFoldedLine(result):_query2["default"].render(_item_code2["default"],{content:result,type:"output"},!0),this.renderLog({logType:"log",meta:"",content:content,style:"vc-item-nometa"})}}]),VConsoleDefaultTab}(_log2["default"]),tab=new VConsoleDefaultTab("default","Log");exports["default"]=tab,module.exports=exports["default"]},function(e,t,o){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t["default"]=e,t}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function l(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function c(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},s=function(){function e(e,t){for(var o=0;o<t.length;o++){var n=t[o];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,o,n){return o&&e(t.prototype,o),n&&e(t,n),t}}(),d=o(2),u=r(d),f=o(3),v=n(f),p=o(13),b=n(p),h=o(16),g=n(h),y=o(17),m=n(y),_=o(18),x=n(_),w=function(e){function t(){var e;i(this,t);for(var o=arguments.length,n=Array(o),r=0;o>r;r++)n[r]=arguments[r];var c=l(this,(e=Object.getPrototypeOf(t)).call.apply(e,[this].concat(n)));return c.tplTabbox="",c.allowUnformattedLog=!0,c.isReady=!1,c.$tabbox=null,c.console={},c.logList=[],c.mockConsole(),c}return c(t,e),s(t,[{key:"onInit",value:function(){this.isReady=!0,this.$tabbox=v["default"].render(this.tplTabbox,{});var e=!0,t=!1,o=void 0;try{for(var n,r=this.logList[Symbol.iterator]();!(e=(n=r.next()).done);e=!0){var i=n.value;this.printLog(i)}}catch(l){t=!0,o=l}finally{try{!e&&r["return"]&&r["return"]()}finally{if(t)throw o}}this.logList=[]}},{key:"onRenderTab",value:function(e){e(this.$tabbox)}},{key:"onAddTool",value:function(e){var t=this,o=[{name:"Clear",global:!1,onClick:function(e){t.clearLog()}}];e(o)}},{key:"onReady",value:function(){v["default"].bind(v["default"].one(".vc-log",this.$tabbox),"click",function(e){var t=e.target;v["default"].hasClass(t,"vc-fold-outer")&&(v["default"].hasClass(t.parentElement,"vc-toggle")?v["default"].removeClass(t.parentElement,"vc-toggle"):v["default"].addClass(t.parentElement,"vc-toggle"),e.preventDefault())})}},{key:"mockConsole",value:function(){var e=this;window.console?(this.console.log=window.console.log,this.console.info=window.console.info,this.console.warn=window.console.warn,this.console.debug=window.console.debug,this.console.error=window.console.error):window.console={},window.console.log=function(){e.printLog({logType:"log",logs:arguments})},window.console.info=function(){e.printLog({logType:"info",logs:arguments})},window.console.warn=function(){e.printLog({logType:"warn",logs:arguments})},window.console.debug=function(){e.printLog({logType:"debug",logs:arguments})},window.console.error=function(){e.printLog({logType:"error",logs:arguments})},window.onerror=function(e,t,o,n,r){var i=r.stack.split("at");i=i[0]+" "+i[1],i=i.replace(location.origin,""),console.error(i)}}},{key:"clearLog",value:function(){v["default"].one(".vc-log",this.$tabbox).innerHTML=""}},{key:"printOriginLog",value:function(e){"function"==typeof this.console[e.logType]&&this.console[e.logType].apply(window.console,e.logs)}},{key:"printLog",value:function(e){var t=e.logs;if(t.length){t=[].slice.call(t);var o=!0,n=/^\[(\w+)\] ?/i,r="";if(u.isString(t[0])){var i=t[0].match(n);
null!==i&&i.length>0&&(r=i[1].toLowerCase())}if(r?o=r==this.id:0==this.allowUnformattedLog&&(o=!1),!o)return void this.printOriginLog(e);if(e.date||(e.date=+new Date),!this.isReady)return void this.logList.push(e);u.isString(t[0])&&(t[0]=t[0].replace(n,""),""===t[0]&&t.shift());for(var l="",c=0;c<t.length;c++)try{if(""===t[c])continue;l+=u.isFunction(t[c])?" "+t[c].toString():u.isObject(t[c])||u.isArray(t[c])?" "+this.getFoldedLine(t[c]):" "+u.htmlEncode(t[c]).replace(/\n/g,"<br/>")}catch(s){l+=" ["+a(t[c])+"]"}var d=u.getDate(e.date);this.renderLog({logType:e.logType,content:l,meta:d.hour+":"+d.minute+":"+d.second,style:""}),this.printOriginLog(e)}}},{key:"renderLog",value:function(e){var t=v["default"].render(g["default"],e);v["default"].one(".vc-log",this.$tabbox).appendChild(t),v["default"].one(".vc-content").scrollTop=v["default"].one(".vc-content").scrollHeight}},{key:"getFoldedLine",value:function(e){function t(e){for(var t=s.length-1;t>=0;t--)if(s[t].child==e)return!0;return!1}function o(e,n){if(u.isObject(e)){if(t(e))return void(i+="{Circular Object}");s.push({parent:n,child:e});var r=Object.keys(e);i+="{\n",c++;for(var l=0;l<r.length;l++){var d=r[l];e.hasOwnProperty(d)&&(i+=Array(c+1).join(a)+v["default"].render(x["default"],{type:"key",code:d},!0)+": ",o(e[d],e),l<r.length-1&&(i+=",\n"))}c--,i+="\n"+Array(c+1).join(a)+"}",s.pop()}else if(u.isArray(e)){if(t(e))return void(i+="[Circular Array]");s.push({parent:n,child:e}),i+="[\n",c++;for(var f=0;f<e.length;f++)i+=Array(c+1).join(a)+v["default"].render(x["default"],{type:"key",code:f},!0)+": ",o(e[f],e),f<e.length-1&&(i+=",\n");c--,i+="\n"+Array(c+1).join(a)+"]",s.pop()}else i+=u.isString(e)?v["default"].render(x["default"],{type:"string",code:'"'+u.htmlEncode(e)+'"'},!0):u.isNumber(e)?v["default"].render(x["default"],{type:"number",code:e},!0):u.isBoolean(e)?v["default"].render(x["default"],{type:"boolean",code:e},!0):u.isNull(e)?v["default"].render(x["default"],{type:"null",code:"null"},!0):u.isUndefined(e)?v["default"].render(x["default"],{type:"undefined",code:"undefined"},!0):u.isFunction(e)?v["default"].render(x["default"],{type:"function",code:"function()"},!0):JSON.stringify(e)}var n=u.JSONStringify(e),r="",i="",l="",c=0,a=" ";l=n.substr(0,26),n.length>26&&(l+="..."),r=Object.prototype.toString.call(e).replace("[object ","").replace("]",""),r+=" "+l;var s=[];o(e,null);var d=v["default"].render(m["default"],{outer:r,inner:i},!0);return d}}]),t}(b["default"]);t["default"]=w,e.exports=t["default"]},function(e,t){e.exports='<div class="vc-item vc-item-{{logType}} {{style}}"> <span class=vc-item-meta>{{meta}}</span> <div class=vc-item-content>{{content}}</div> </div>'},function(e,t){e.exports='<div class=vc-fold> <i class=vc-fold-outer>{{outer}}</i> <pre class="vc-fold-inner vc-max-height">{{inner}}</pre> </div>'},function(e,t){e.exports="<i class=vc-code-{{type}}>{{code}}</i>"},function(e,t){e.exports="<div> <div class=vc-log style=padding-bottom:40px></div> <form class=vc-cmd> <button class=vc-cmd-btn type=submit>OK</button> <div class=vc-cmd-input-wrap> <textarea class=vc-cmd-input placeholder=command...></textarea> </div> </form> </div>"},function(e,t){e.exports='<pre class="vc-item-code vc-item-code-{{type}}">{{content}}</pre>'},function(e,t,o){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t["default"]=e,t}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function l(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function c(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var o=0;o<t.length;o++){var n=t[o];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,o,n){return o&&e(t.prototype,o),n&&e(t,n),t}}(),s=function y(e,t,o){null===e&&(e=Function.prototype);var n=Object.getOwnPropertyDescriptor(e,t);if(void 0===n){var r=Object.getPrototypeOf(e);return null===r?void 0:y(r,t,o)}if("value"in n)return n.value;var i=n.get;if(void 0!==i)return i.call(o)},d=o(2),u=r(d),f=o(15),v=n(f),p=o(22),b=n(p),h=function(e){function t(){var e;i(this,t);for(var o=arguments.length,n=Array(o),r=0;o>r;r++)n[r]=arguments[r];var c=l(this,(e=Object.getPrototypeOf(t)).call.apply(e,[this].concat(n)));return c.tplTabbox=b["default"],c.allowUnformattedLog=!1,c}return c(t,e),a(t,[{key:"onInit",value:function(){s(Object.getPrototypeOf(t.prototype),"onInit",this).call(this),this.printSystemInfo()}},{key:"printSystemInfo",value:function(){var e=navigator.userAgent,t="",o=u.getDate();console.info("[system]","Now:",o.year+"-"+o.month+"-"+o.day+" "+o.hour+":"+o.minute+":"+o.second+"."+o.millisecond),t="Unknown";var n=e.match(/(ipod).*\s([\d_]+)/i),r=e.match(/(ipad).*\s([\d_]+)/i),i=e.match(/(iphone)\sos\s([\d_]+)/i),l=e.match(/(android)\s([\d\.]+)/i);l?t="Android "+l[2]:i?t="iPhone, iOS "+i[2].replace(/_/g,"."):r?t="iPad, iOS "+r[2].replace(/_/g,"."):n&&(t="iPod, iOS "+n[2].replace(/_/g,".")),console.info("[system]","System:",t);var c=e.match(/MicroMessenger\/([\d\.]+)/i);t="Unknown",c&&c[1]&&(t=c[1],console.info("[system]","WeChat:",t));var a=e.toLowerCase().match(/ nettype\/([^ ]+)/g);t="Unknown",a&&a[0]&&(a=a[0].split("/"),t=a[1],console.info("[system]","Network:",t)),t="Unknown",t="https:"==location.protocol?"HTTPS":"http:"==location.protocol?"HTTP":location.protocol.replace(":",""),console.info("[system]","Protocol:",t);var s=window.performance||window.msPerformance||window.webkitPerformance;if(s&&s.timing){var d=s.timing,f=d.navigationStart;console.info("[system]","connectEndTime:",d.connectEnd-f+"ms"),console.info("[system]","responseEndTime:",d.responseEnd-f+"ms"),d.secureConnectionStart>0&&console.info("[system]","SSL Cost:",d.connectEnd-d.secureConnectionStart+"ms"),console.info("[system]","DomRenderCost:",d.domComplete-d.domLoading+"ms")}console.info("[system]","UA:",e)}}]),t}(v["default"]),g=new h("system","System");t["default"]=g,e.exports=t["default"]},function(e,t){e.exports="<div> <div class=vc-log></div> </div>"},function(e,t,o){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t["default"]=e,t}function r(e){return e&&e.__esModule?e:{"default":e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function l(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function c(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var o=0;o<t.length;o++){var n=t[o];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,o,n){return o&&e(t.prototype,o),n&&e(t,n),t}}(),s=o(3),d=r(s),u=o(2),f=n(u),v=o(13),p=r(v),b=o(24),h=r(b),g=o(25),y=r(g),m=o(26),_=r(m),x=function(e){function t(){var e;i(this,t);for(var o=arguments.length,n=Array(o),r=0;o>r;r++)n[r]=arguments[r];var c=l(this,(e=Object.getPrototypeOf(t)).call.apply(e,[this].concat(n)));return c.$tabbox=d["default"].render(h["default"],{}),c.$header=null,c.reqList={},c.domList={},c.mockAjax(),c}return c(t,e),a(t,[{key:"onRenderTab",value:function(e){e(this.$tabbox)}},{key:"onAddTool",value:function(e){var t=this,o=[{name:"Clear",global:!1,onClick:function(e){t.clearLog()}}];e(o)}},{key:"onReady",value:function(){this.renderHeader(),d["default"].delegate(d["default"].one(".vc-log",this.$tabbox),"click",".vc-group-preview",function(e){var t=this.parentNode;d["default"].hasClass(t,"vc-actived")?d["default"].removeClass(t,"vc-actived"):d["default"].addClass(t,"vc-actived"),e.preventDefault()})}},{key:"clearLog",value:function(){this.reqList={};for(var e in this.domList)this.domList[e].remove(),this.domList[e]=void 0;this.domList={},this.renderHeader()}},{key:"renderHeader",value:function(){var e=Object.keys(this.reqList).length,t=d["default"].render(y["default"],{count:e}),o=d["default"].one(".vc-log",this.$tabbox);this.$header?this.$header.parentNode.replaceChild(t,this.$header):o.parentNode.insertBefore(t,o),this.$header=t}},{key:"updateRequest",value:function(e,t){var o=Object.keys(this.reqList).length,n=this.reqList[e]||{};for(var r in t)n[r]=t[r];this.reqList[e]=n;var i={url:n.url,status:n.status,type:"-",costTime:n.costTime>0?n.costTime+"ms":"-",header:n.header,response:f.htmlEncode(n.response)};n.readyState<=1?i.status="Pending":n.readyState<4&&(i.status="Loading");var l=d["default"].render(_["default"],i),c=this.domList[e];n.status>=400&&d["default"].addClass(d["default"].one(".vc-group-preview",l),"vc-table-row-error"),c?c.parentNode.replaceChild(l,c):d["default"].one(".vc-log",this.$tabbox).appendChild(l),this.domList[e]=l;var a=Object.keys(this.reqList).length;a!=o&&this.renderHeader()}},{key:"mockAjax",value:function(){var e=window.XMLHttpRequest;if(e){var t=this,o=window.XMLHttpRequest.prototype.open;window.XMLHttpRequest.prototype.send;window.XMLHttpRequest.prototype.open=function(){var e=this,n=[].slice.call(arguments),r=n[1],i=t.getUniqueID();e._requestID=i;var l=e.onreadystatechange||function(){};return e.onreadystatechange=function(){var o=t.reqList[i]||{};if(o.url=r,o.readyState=e.readyState,o.status=e.status,0==e.readyState)o.startTime=+new Date;else if(1==e.readyState)o.startTime=+new Date;else if(2==e.readyState){o.header={};var n=e.getAllResponseHeaders()||"",c=n.split("\n"),a=!0,s=!1,d=void 0;try{for(var u,f=c[Symbol.iterator]();!(a=(u=f.next()).done);a=!0){var v=u.value;if(v){var p=v.split(": "),b=p[0],h=p.slice(1).join(": ");o.header[b]=h}}}catch(g){s=!0,d=g}finally{try{!a&&f["return"]&&f["return"]()}finally{if(s)throw d}}}else 3==e.readyState||4==e.readyState&&(o.endTime=+new Date,o.costTime=o.endTime-(o.startTime||o.endTime),o.response=e.response);return t.updateRequest(i,o),l.apply(e,arguments)},o.apply(e,n)}}}},{key:"getUniqueID",value:function(){var e="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(e){var t=16*Math.random()|0,o="x"==e?t:3&t|8;return o.toString(16)});return e}}]),t}(p["default"]),w=new x("network","Network");t["default"]=w,e.exports=t["default"]},function(e,t){e.exports="<div class=vc-table> <div class=vc-log></div> </div>"},function(e,t){e.exports='<dl class=vc-table-row> <dd class="vc-table-col vc-table-col-4">Name {{if (count > 0)}}({{count}}){{/if}}</dd> <dd class=vc-table-col>Status</dd> <dd class=vc-table-col>Time</dd> </dl>'},function(e,t){e.exports='<div class=vc-group> <dl class="vc-table-row vc-group-preview"> <dd class="vc-table-col vc-table-col-4">{{url}}</dd> <dd class=vc-table-col>{{status}}</dd> <dd class=vc-table-col>{{costTime}}</dd> </dl> <div class=vc-group-detail> <div> <dl class="vc-table-row vc-left-border"> <dt class="vc-table-col vc-table-col-title">Headers</dt> </dl> {{for (var key in header)}} <div class="vc-table-row vc-left-border vc-small"> <div class="vc-table-col vc-table-col-2">{{key}}</div> <div class="vc-table-col vc-table-col-4 vc-max-height-line">{{header[key]}}</div> </div> {{/for}} </div> <div> <dl class="vc-table-row vc-left-border"> <dt class="vc-table-col vc-table-col-title">Response</dt> </dl> <div class="vc-table-row vc-left-border vc-small"> <pre class="vc-table-col vc-max-height vc-min-height">{{response}}</pre> </div> </div> </div> </div>'}])});

4

package.json
{
"name": "vconsole",
"version": "1.3.0",
"description": "A virtual console panel for mobile page",
"version": "2.0.0",
"description": "A lightweight, extendable front-end developer tool for mobile web page.",
"homepage": "https://github.com/WechatFE/vConsole",

@@ -6,0 +6,0 @@ "main": "dist/vconsole.min.js",

@@ -7,116 +7,45 @@ [English](./README.md) | 简体中文

一个针对手机网页的前端 console 调试面板。
一个轻量、可拓展、针对手机网页的前端开发者调试面板。
## 简介
## 特性
vConsole 是一个网页前端调试面板,专为手机 web 页面量身设计,帮助开发者更为便捷地进行开发调试工作。
- 查看 console 日志
- 查看网络请求
- 手动执行 JS 命令行
- 自定义插件
## 手机预览
## 上手
![](./example/snapshot/qrcode.png)
[http://wechatfe.github.io/vconsole/demo.html](http://wechatfe.github.io/vconsole/demo.html)
![](./example/snapshot/log_panel.png)
## 安装
### 1.下载模块
下载文件 `dist/vconsole.min.js` 到本地。
或者使用 `npm` 安装:
```
npm install vconsole
```
### 2.引入模块
(1) 如果未使用 AMD/CMD 规范,可直接在 HTML 中引入 vConsole 模块。为了便于后续扩展,建议在 `<head>` 中引入:
```html
<head>
<script src="path/to/vconsole.min.js"></script>
</head>
<script src="path/to/vconsole.min.js"></script>
<script>
console.log('Hello world');
// 然后点击右下角 vConsole 按钮即可查看到 log
</script>
```
(2) 如果使用了 AMD/CMD 规范,可在 module 内使用 `require()` 引入模块:
详细使用方法请参阅[使用教程](./doc/tutorial_CN.md)。
```javascript
var vConsole = require('path/to/vconsole.min.js');
```
## 手机预览
## 使用方法
![](./example/snapshot/qrcode.png)
(1) 与 PC 端打印 log 一致,可直接使用 `console.log()` 等方法直接打印日志:
[http://wechatfe.github.io/vconsole/demo.html](http://wechatfe.github.io/vconsole/demo.html)
```javascript
console.log('Hello World');
```
![](./example/snapshot/log_panel.png)
未加载 vConsole 模块时,`console.log()` 会直接打印到原生控制台中;加载 vConsole 后,日志会打印到页面前端+原生控制台。
(2) 支持 5 种不同类型的日志,会以不同的颜色输出到前端面板:
```javascript
console.log('foo'); // 白底黑字
console.info('bar'); // 白底紫字
console.debug('oh'); // 白底黄字
console.warn('foo'); // 黄底黄字
console.error('bar'); // 红底红字
```
## 文档
(3) 支持打印 Object 或 Array 变量,会以结构化 JSON 形式输出(并折叠):
- [使用教程](./doc/tutorial_CN.md)
- [插件:入门](./doc/plugin_getting_started_CN.md)
- [插件:编写插件](./doc/plugin_building_a_plugin_CN.md)
- [插件:Event 事件列表](./doc/plugin_event_list_CN.md)
```javascript
var obj = {};
obj.foo = 'bar';
console.log(obj);
/*
Object
{
foo: "bar"
}
*/
```
(4) 支持传入多个参数,会以空格隔开:
```javascript
var uid = 233;
console.log('UserID:', uid); // 打印出 UserID: 233
```
(5) 支持使用 `[default|system|...]` 的格式将 log 输出到指定面板:
```javascript
// [xxx] 须写在 log 的最开始
console.log('[system]', 'foo');
console.log('[system] bar');
// 系统面板将打印出两行,分别为 foo 和 bar
```
目前支持的面板有:
```
[default] Log 日志(默认)
[system] System 系统
[network] Network 网络
```
## 注意事项
(1) 引入 vConsole 模块后,页面前端将会在右下角出现 vConsole 的悬停按钮,可展开/收起面板。
若不希望普通用户看到面板,请不要在生产环境中引入 vConsole 模块。动态引入模块的方法可参考 `example/demo2.php` 示例。
(2) 从 v1.2.0 开始,弃用 `vConsole.ready()` 接口。引入 vConsole 后,无须等待即可立即使用 `console.log()` 等方法输出日志。
## 更新记录

@@ -123,0 +52,0 @@

@@ -7,120 +7,43 @@ English | [简体中文](./README_CN.md)

A front-end developer tool for mobile web page.
A lightweight, extendable front-end developer tool for mobile web page.
## Introduction
## Features
vConsole is a mobile front-end developer tool which can be very helpful for debug and development.
- View console logs
- View network requests
- Execute JS command manually
- Custom plugin
## Preview
## Usage
![](./example/snapshot/qrcode.png)
[http://wechatfe.github.io/vconsole/demo.html](http://wechatfe.github.io/vconsole/demo.html)
![](./example/snapshot/log_panel.png)
## Installation
### 1. Download
Download file `dist/vconsole.min.js` to your project's directory.
Or, install via `npm` :
```
npm install vconsole
```
### 2. Import
(1) Under non-AMD/CMD rule, insert vConsole into `<head>`. To support further features, insert vConsole into `<head>` rather than `</body>` is a better choice.
```html
<head>
<script src="path/to/vconsole.min.js"></script>
</head>
<script src="path/to/vconsole.min.js"></script>
<script>
console.log('Hello world');
// then tap vConsole button to see the log
</script>
```
(2) Under AMD/CMD rule, use `require()` to import vConsole.
See [Tutorial](./doc/tutorial.md) for more details.
```javascript
var vConsole = require('path/to/vconsole.min.js');
```
## Preview
## Usage
![](./example/snapshot/qrcode.png)
(1) Use the methods of `console` to print logs, just like what you do at desktop browsers:
[http://wechatfe.github.io/vconsole/demo.html](http://wechatfe.github.io/vconsole/demo.html)
```javascript
console.log('Hello World');
```
![](./example/snapshot/log_panel.png)
When vConsole is not loaded, logs will be printed to native console. After importing vConsole, logs will be printed to both front-end console and native console.
## Documentation
(2) 5 types of log method are supported, with different styles:
- [Tutorial](./doc/tutorial.md)
- [Plugin: Getting Started](./doc/plugin_getting_started.md)
- [Plugin: Building a Plugin](./doc/plugin_building_a_plugin.md)
- [Plugin: Event List](./doc/plugin_event_list.md)
```javascript
console.log('foo'); // black word, white bakcground
console.info('bar'); // purple word, white background
console.debug('oh'); // orange word, white background
console.warn('foo'); // orange word, yellow background
console.error('bar'); // red word, pink background
```
(3) Object or Array variable will be printed as formatted JSON:
```javascript
var obj = {};
obj.foo = 'bar';
console.log(obj);
/*
Object
{
foo: "bar"
}
*/
```
(4) Multiple arguments are supported, each variable will be divided by a space:
```javascript
var uid = 233;
console.log('UserID:', uid); // UserID: 233
```
(5) Use `[default|system|...]` string to print logs to specific panel:
```javascript
// [xxx] must be at the beginning of a log
console.log('[system]', 'foo');
console.log('[system] bar');
// foo & bar will be printed to system panel
```
Supported panels:
```
[default] Log panel (default)
[system] System panel
[network] Network panel
```
## Notice
(1) After importing vConsole, a button, which can show/hide panel, will be displayed at the right bottom of the page.
Under production environment, DO NOT import vConsole to your page, unless you want to let your users help you to debug. Demo `example/demo2.php` shows how to import vConsole dynamicly.
(2) After v1.2.0, `vConsole.ready()` is deprecated. You can directly use `console.log()` after importing vConsole without waiting for its ready. This method will be removed at v2.0.0 and later.
## Changelog

@@ -127,0 +50,0 @@

@@ -7,695 +7,18 @@ /**

import './vconsole.less';
import tpl from './tpl.html';
import tplFold from './tpl_fold.html';
// classes
import VConsole from './core/core.js';
import VConsolePlugin from './lib/plugin.js';
// default tabs
import defaultTab from './log/default.js';
import systemTab from './log/system.js';
import networkTab from './network/network.js';
/**
* initial
* @constructor
*/
function vConsole() {
var that = this;
// here we go
const vConsole = new VConsole();
vConsole.addPlugin(defaultTab);
vConsole.addPlugin(systemTab);
vConsole.addPlugin(networkTab);
this.html = tpl;
this.$dom = null;
this.activedTab = 'default';
this.tabList = ['default', 'system', 'network'];
this.console = {}; // store native console methods
this.logList = []; // store logs when vConsole is not ready
this.isReady = false;
this.switchPos = {
x: 10, // right
y: 10, // bottom
startX: 0,
startY: 0,
endX: 0,
endY: 0
};
that._mokeConsole();
that._mokeAjax();
var _onload = function() {
that._render();
that._bindEvent();
that._autoRun();
};
if (document.readyState == 'complete') {
_onload();
} else {
bind(window, 'load', _onload);
}
}
/**
* render panel DOM
* @private
*/
vConsole.prototype._render = function() {
var id = '#__vconsole';
if (! $(id)) {
var e = document.createElement('div');
e.innerHTML = this.html;
document.body.appendChild(e.children[0]);
}
this.$dom = $(id);
// reposition switch button
var switchX = getStorage('switch_x'),
switchY = getStorage('switch_y');
if (switchX && switchY) {
this.switchPos.x = switchX;
this.switchPos.y = switchY;
$('.vc-switch').style.right = switchX + 'px';
$('.vc-switch').style.bottom = switchY + 'px';
}
};
/**
* bind DOM events
* @private
*/
vConsole.prototype._bindEvent = function() {
var that = this;
// drag & drop switch button
var $switch = $('.vc-switch');
bind($switch, 'touchstart', function(e) {
that.switchPos.startX = e.touches[0].pageX;
that.switchPos.startY = e.touches[0].pageY;
});
bind($switch, 'touchend', function(e) {
if (that.switchPos.endX != 0 || that.switchPos.endY != 0) {
that.switchPos.x = that.switchPos.endX;
that.switchPos.y = that.switchPos.endY;
that.switchPos.startX = 0;
that.switchPos.startY = 0;
that.switchPos.endX = 0;
that.switchPos.endY = 0;
setStorage('switch_x', that.switchPos.x);
setStorage('switch_y', that.switchPos.y);
}
});
bind($switch, 'touchmove', function(e) {
if (e.touches.length > 0) {
var offsetX = e.touches[0].pageX - that.switchPos.startX,
offsetY = e.touches[0].pageY - that.switchPos.startY;
var x = that.switchPos.x - offsetX,
y = that.switchPos.y - offsetY;
$switch.style.right = x + 'px';
$switch.style.bottom = y + 'px';
that.switchPos.endX = x;
that.switchPos.endY = y;
e.preventDefault();
}
});
// show console panel
bind($('.vc-switch'), 'click', function() {
that.show();
})
// hide console panel
bind($('.vc-hide'), 'click', function() {
that.hide();
});
// hide console panel when tap background mask
bind($('.vc-mask'), 'click', function(e) {
if (e.target != $('.vc-mask')) {
return false;
}
that.hide();
});
// clear a log box
bind($('.vc-clear'), 'click', function() {
that.clearLog(that.activedTab);
});
// show a log box
bind($$('.vc-tab'), 'click', function(e) {
var tabName = e.target.dataset.tab;
if (tabName == that.activedTab) {
return;
}
that.showTab(tabName);
});
// log-related actions
bind($$('.vc-log'), 'click', function(e) {
var target = e.target;
// expand a line
if (hasClass(target, 'vc-fold-outer')) {
if (hasClass(target.parentElement, 'vc-toggle')) {
removeClass(target.parentElement, 'vc-toggle');
} else {
addClass(target.parentElement, 'vc-toggle');
}
e.preventDefault();
}
});
};
/**
* replace window.console & window.onerror with vConsole method
* @private
*/
vConsole.prototype._mokeConsole = function() {
if (!window.console) {
return;
}
var that = this;
this.console.log = window.console.log;
this.console.info = window.console.info;
this.console.warn = window.console.warn;
this.console.debug = window.console.debug;
this.console.error = window.console.error;
window.console.log = function() { that._printLog('auto', 'log', arguments); };
window.console.info = function() { that._printLog('auto', 'info', arguments); };
window.console.warn = function() { that._printLog('auto', 'warn', arguments); };
window.console.debug = function() { that._printLog('auto', 'debug', arguments); };
window.console.error = function() { that._printLog('auto', 'error', arguments); };
window.onerror = function(message, source, lineno, colno, error) {
var stack = error.stack.split('at');
stack = stack[0] + ' ' + stack[1];
stack = stack.replace(location.origin, '');
console.error(stack);
};
};
/**
* moke ajax requst
* @private
*/
vConsole.prototype._mokeAjax = function() {
var _XMLHttpRequest = window.XMLHttpRequest;
if (!_XMLHttpRequest) { return; }
var _open = window.XMLHttpRequest.prototype.open;
var _send = window.XMLHttpRequest.prototype.send;
window.XMLHttpRequest.prototype.open = function() {
var that = this;
var _arguments = arguments;
// lazy assign onreadystatechange
setTimeout(function() {
var _onreadystatechange = that.onreadystatechange || function(){};
that.onreadystatechange = function() {
if (that.readyState == 4) {
that._endTime = +new Date();
var url = _arguments[1] || 'unknow URL',
costTime = that._endTime - (that._startTime || that._endTime);
var log = '[network][' + that.status + '] [' + costTime + 'ms] ' + url;
if (that.status >= 200 && that.status < 400) {
console.log(log);
} else {
console.error(log);
}
}
return _onreadystatechange.apply(that, arguments);
};
}, 0);
return _open.apply(that, _arguments);
};
window.XMLHttpRequest.prototype.send = function() {
var that = this;
var _arguments = arguments;
that._startTime = +new Date();
setTimeout(function() {
_send.apply(that, _arguments);
}, 1);
};
};
/**
* auto run after initialization
* @private
*/
vConsole.prototype._autoRun = function() {
this.isReady = true;
// print logList
while (this.logList.length > 0) {
var log = this.logList.shift();
this._printLog(log.tabName, log.logType, log.logs);
}
// print system info
var ua = navigator.userAgent,
logMsg = [];
// current time
var d = getDate();
this._printLog('system', 'info', ['日志时间:', d.year+'-'+d.month+'-'+d.day+' '+d.hour+':'+d.minute+':'+d.second+' '+d.millisecond]);
// device & system
logMsg = ['系统版本:', '不明'];
var ipod = ua.match(/(ipod).*\s([\d_]+)/i),
ipad = ua.match(/(ipad).*\s([\d_]+)/i),
iphone = ua.match(/(iphone)\sos\s([\d_]+)/i),
android = ua.match(/(android)\s([\d\.]+)/i);
if (android) {
logMsg[1] = 'Android ' + android[2];
} else if (iphone) {
logMsg[1] = 'iPhone, iOS ' + iphone[2].replace(/_/g,'.');
} else if (ipad) {
logMsg[1] = 'iPad, iOS ' + ipad[2].replace(/_/g, '.');
} else if (ipod) {
logMsg[1] = 'iPod, iOS ' + ipod[2].replace(/_/g, '.');
}
this._printLog('system', 'info', logMsg);
// wechat app version
var version = ua.match(/MicroMessenger\/([\d\.]+)/i);
logMsg = ['微信版本:', '不明'];
if (version && version[1]) {
logMsg[1] = version[1];
this._printLog('system', 'info', logMsg);
}
// network type
var network = ua.toLowerCase().match(/ nettype\/([^ ]+)/g);
logMsg = ['网络类型:', '不明'];
if (network && network[0]) {
network = network[0].split('/');
logMsg[1] = network[1];
this._printLog('system', 'info', logMsg);
}
// HTTP protocol
logMsg = ['网址协议:', '不明'];
if (location.protocol == 'https:') {
logMsg[1] = 'HTTPS';
} else if (location.protocol == 'http:') {
logMsg[1] = 'HTTP';
} else {
logMsg[1] = location.protocol.replace(':', '');
}
this._printLog('system', 'info', logMsg);
// performance related
window.addEventListener('load', function(e) {
var performance = window.performance || window.msPerformance || window.webkitPerformance;
// timing
if (performance && performance.timing) {
var t = performance.timing,
start = t.navigationStart;
// this._printLog('system', 'debug', ['domainLookupEnd:', (t.domainLookupEnd - start)+'ms']);
this._printLog('system', 'info', ['连接结束点:', (t.connectEnd - start)+'ms']);
this._printLog('system', 'info', ['回包结束点:', (t.responseEnd - start)+'ms']);
// this._printLog('system', 'debug', ['domComplete:', (t.domComplete - start)+'ms']);
// this._printLog('system', 'info', ['beforeReqTime:', (t.requestStart - start)+'ms']);
if (t.secureConnectionStart > 0) {
this._printLog('system', 'info', ['ssl耗时:', (t.connectEnd - t.secureConnectionStart)+'ms']);
}
// this._printLog('system', 'info', ['req&RespTime:', (t.responseEnd - t.requestStart)+'ms']);
this._printLog('system', 'info', ['dom渲染耗时:', (t.domComplete - t.domLoading)+'ms']);
}
});
};
/**
* print a log to log box
* @private
* @param string tabName auto|default|system
* @param string logType log|info|debug|error|warn
* @param array logs
*/
vConsole.prototype._printLog = function(tabName, logType, logs) {
if (!logs.length) {
return;
}
// if vConsole is not ready, save current log to logList
if (!this.isReady) {
this.logList.push({
tabName: tabName,
logType: logType,
logs: logs
});
return;
}
// generate plain text for a line
var line = '';
for (var i=0; i<logs.length; i++) {
try {
if (isFunction(logs[i])) {
line += ' ' + logs[i].toString();
} else if (isObject(logs[i]) || isArray(logs[i])) {
line += ' ' + this._getFoldedLine(logs[i]);
} else {
line += ' ' + htmlEncode(logs[i]).replace(/\n/g, '<br/>');
}
} catch (e) {
line += ' [' + (typeof logs[i]) + ']';
}
}
// auto select tab
if (tabName == 'auto') {
var pattern = /^ \[(\w+)\]/i;
var match = line.match(pattern);
if (match !== null && match.length > 0 && this.tabList.indexOf(match[1]) > -1) {
tabName = match[1];
line = line.replace(pattern, '');
}
}
if (tabName == 'auto') {
tabName = 'default';
}
var $logbox = $('#__vc_log_' + tabName);
var p = document.createElement('p');
p.className = 'vc-item vc-item-' + logType;
p.innerHTML = line;
$('.vc-log', $logbox).appendChild(p);
$('.vc-content').scrollTop = $('.vc-content').scrollHeight;
// print to traditional console
this.console[logType].apply(window.console, logs);
};
/**
* generate the HTML of a folded line
* @private
*/
vConsole.prototype._getFoldedLine = function(obj, outerText) {
var json = JSON.stringify(obj);
var outer = '',
inner = '',
preview = '';
var lv = 0,
p = ' ';
preview = json.substr(0, 30);
if (json.length > 30) {
preview += '...';
}
outer = Object.prototype.toString.call(obj).replace('[object ', '').replace(']', '');
outer += ' ' + preview;
function _iterateObj(val) {
if (isObject(val)) {
var keys = Object.keys(val);
inner += "{\n";
lv++;
for (var i=0; i<keys.length; i++) {
var k = keys[i];
if (!val.hasOwnProperty(k)) { continue; }
inner += Array(lv+1).join(p) + '<i class="vc-code-key">' + k + "</i>: ";
_iterateObj(val[k]);
if (i < keys.length - 1) {
inner += ",\n";
}
}
lv--;
inner += "\n" + Array(lv+1).join(p) + "}";
} else if (isArray(val)) {
inner += "[\n";
lv++;
for (var i=0; i<val.length; i++) {
inner += Array(lv+1).join(p) + '<i class="vc-code-key">' + i + "</i>: ";
_iterateObj(val[i]);
if (i < val.length - 1) {
inner += ",\n";
}
}
lv--;
inner += "\n" + Array(lv+1).join(p) + "]";
} else {
if (isString(val)) {
inner += '<i class="vc-code-string">"' + val + '"</i>';
} else if (isNumber(val)) {
inner += '<i class="vc-code-number">' + val + "</i>";
} else {
inner += JSON.stringify(val);
}
}
}
_iterateObj(obj);
var line = render(tplFold, {outer: outer, inner: inner});
return line;
};
/**
* show a log box by tab name
* @public
*/
vConsole.prototype.showTab = function(tabName) {
var $logbox = $('#__vc_log_' + tabName);
// set actived status
removeClass($$('.vc-tab', this.$dom), 'vc-actived');
addClass($('#__vc_tab_' + tabName), 'vc-actived');
removeClass($$('.vc-logbox'), 'vc-actived');
addClass($logbox, 'vc-actived');
// scroll to bottom
$('.vc-content').scrollTop = $('.vc-content').scrollHeight;
this.activedTab = tabName;
};
/**
* clear a log box by tab name
* @public
*/
vConsole.prototype.clearLog = function(tabName) {
var $logbox = $('#__vc_log_' + tabName);
$('.vc-log', $logbox).innerHTML = '';
};
/**
* show console panel
* @public
*/
vConsole.prototype.show = function() {
addClass(this.$dom, 'vc-toggle');
};
/**
* hide console panel
* @public
*/
vConsole.prototype.hide = function() {
removeClass(this.$dom, 'vc-toggle');
};
/**
* !!! this method is deprecated, callback will always be called !!!
* @deprecated
* @public
* @param function callback
*/
vConsole.prototype.ready = function(callback) {
console.warn('vConsole.ready() is deprecated, console.log() can be called at anytime without waiting for ready. This method will be removed at v2.0.0 and later');
callback && callback.call(this);
};
/****************************************************************
Utility Functions
****************************************************************/
/**
* get single element
* @private
*/
function $(selector, contextElement) {
if (contextElement) {
return contextElement.querySelector(selector);
}
return document.querySelector(selector);
}
/**
* get multiple elements
* @private
*/
function $$(selector, contextElement) {
var nodeList,
list = [];
if (contextElement) {
nodeList = contextElement.querySelectorAll(selector);
} else {
nodeList = document.querySelectorAll(selector);
}
if (nodeList && nodeList.length > 0) {
list = Array.prototype.slice.call(nodeList);
}
return list;
}
/**
* add className to an element
* @private
*/
function addClass($el, className) {
if (!$el) {
return;
}
if (!isArray($el)) {
$el = [$el];
}
for (var i=0; i<$el.length; i++) {
$el[i].className += ' ' + className;
}
}
/**
* remove className from an element
* @private
*/
function removeClass($el, className) {
if (!$el) {
return;
}
if (!isArray($el)) {
$el = [$el];
}
for (var i=0; i<$el.length; i++) {
var arr = $el[i].className.split(' ');
for (var j=0; j<arr.length; j++) {
if (arr[j] == className) {
arr[j] = '';
}
}
$el[i].className = arr.join(' ');
}
}
/**
* see whether an element contains a className
* @private
*/
function hasClass($el, className) {
if (!$el) {
return false;
}
var arr = $el.className.split(' ');
for (var i=0; i<arr.length; i++) {
if (arr[i] == className) {
return true;
}
}
return false;
}
/**
* bind an event to element(s)
* @private
* @param array $el element object or array
* @param string eventType name of the event
* @param function fn
* @param boolean useCapture
*/
function bind($el, eventType, fn, useCapture) {
if (!$el) {
return;
}
if (useCapture === undefined) {
useCapture = false;
}
if (!isArray($el)) {
$el = [$el];
}
for (var i=0; i<$el.length; i++) {
$el[i].addEventListener(eventType, fn, useCapture);
}
}
/**
* get formatted date by timestamp
* @param int time
* @return object
*/
function getDate(time) {
var d = time>0 ? new Date(time) : new Date();
var day = d.getDay()<10 ? '0'+d.getDay() : d.getDay(),
month = d.getMonth()<9 ? '0'+(d.getMonth()+1) : (d.getMonth()+1),
year = d.getFullYear(),
hour = d.getHours()<10 ? '0'+d.getHours() : d.getHours(),
minute = d.getMinutes()<10 ? '0'+d.getMinutes() : d.getMinutes(),
second = d.getSeconds()<10 ? '0'+d.getSeconds() : d.getSeconds(),
millisecond = d.getMilliseconds()<10 ? '0'+d.getMilliseconds() : d.getMilliseconds();
if (millisecond<100) { millisecond = '0' + millisecond; }
return {
time: (+d),
year: year,
month: month,
day: day,
hour: hour,
minute: minute,
second: second,
millisecond: millisecond
};
}
/**
* HTML encode a string
* @param string text
* @return string
*/
function htmlEncode(text) {
return document.createElement('a').appendChild( document.createTextNode(text) ).parentNode.innerHTML;
};
/**
* simply render a HTML template
* @param string tpl
* @param object key-value data
* @return string
*/
function render(tpl, data) {
var html = tpl;
for (var k in data) {
html = html.replace('{' + k + '}', data[k]);
}
return html;
}
/**
* determines whether the passed value is a specific type
* @param mixed value
* @return boolean
*/
function isNumber(value) {
return Object.prototype.toString.call(value) == '[object Number]';
}
function isString(value) {
return Object.prototype.toString.call(value) == '[object String]';
}
function isArray(value) {
return Object.prototype.toString.call(value) == '[object Array]';
}
function isObject(value) {
return Object.prototype.toString.call(value) == '[object Object]';
}
function isFunction(value) {
return Object.prototype.toString.call(value) == '[object Function]';
}
/**
* localStorage methods
*/
function setStorage(key, value) {
key = 'vConsole_' + key;
localStorage.setItem(key, value);
}
function getStorage(key) {
key = 'vConsole_' + key;
return localStorage.getItem(key);
}
/**
* export
*/
export default new vConsole();
// export
vConsole.VConsolePlugin = VConsolePlugin;
export default vConsole;

@@ -33,3 +33,8 @@ var pkg = require('./package.json');

plugins: [
new webpack.optimize.UglifyJsPlugin({
new webpack.BannerPlugin([
pkg.name + ' v' + pkg.version + ' (' + pkg.homepage + ')',
'Copyright ' + new Date().getFullYear() + ', ' + pkg.author,
pkg.license +' license'
].join('\n'))
,new webpack.optimize.UglifyJsPlugin({
compress: {

@@ -39,7 +44,2 @@ warnings: false

})
,new webpack.BannerPlugin([
pkg.name + ' v' + pkg.version + ' (' + pkg.homepage + ')',
'Copyright ' + new Date().getFullYear() + ', ' + pkg.author,
pkg.license +' license'
].join('\n'))
// ,new ExtractTextPlugin('[name].min.css') // 将css独立打包

@@ -46,0 +46,0 @@ ]

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc