Browse Source

增加js&css页面自动检测并代码美化

zxlie 7 years ago
parent
commit
d3fda5f07a

+ 24 - 3
apps/background/index.js

@@ -513,7 +513,7 @@ var BgPageInstance = (function () {
         });
     };
 
-    // 当前页面是否进行自动格式化
+    //判断是否可以针对json页面进行自动格式化
     let _jsonAutoFormatRequest = function () {
         Settings.getOptsFromBgPage(opts => {
             chrome.tabs.query({active: true, currentWindow: true}, function (tabs) {
@@ -525,6 +525,19 @@ var BgPageInstance = (function () {
         });
     };
 
+    //判断是否可以针对js、css自动检测格式化
+    let _jsCssAutoDetectRequest = function () {
+        Settings.getOptsFromBgPage(opts => {
+            chrome.tabs.query({active: true, currentWindow: true}, function (tabs) {
+                chrome.tabs.sendMessage(tabs[0].id, {
+                    type: MSG_TYPE.JS_CSS_PAGE_BEAUTIFY,
+                    canIDoIt: opts.JS_CSS_PAGE_BEAUTIFY
+                });
+            });
+        });
+    };
+
+
     /**
      * 接收来自content_scripts发来的消息
      */
@@ -545,10 +558,14 @@ var BgPageInstance = (function () {
                     autoClose: 2000
                 });
             }
-            //判断是否可以进行自动格式化
+            //判断是否可以针对json页面进行自动格式化
             else if (request.type === MSG_TYPE.JSON_PAGE_FORMAT_REQUEST) {
                 _jsonAutoFormatRequest();
             }
+            //判断是否可以针对js、css自动检测格式化
+            else if (request.type === MSG_TYPE.JS_CSS_PAGE_BEAUTIFY_REQUEST) {
+                _jsCssAutoDetectRequest();
+            }
             //保存当前网页加载时间
             else if (request.type === MSG_TYPE.CALC_PAGE_LOAD_TIME) {
                 _showPageWpoInfo(request.wpo);
@@ -565,6 +582,10 @@ var BgPageInstance = (function () {
             else if (request.type === MSG_TYPE.AJAX_DEBUGGER_CONSOLE) {
                 _ajaxDebugger(request);
             }
+            // 打开设置页
+            else if (request.type === MSG_TYPE.OPEN_OPTIONS_PAGE) {
+                chrome.runtime.openOptionsPage();
+            }
 
             // ===========================以下为编码规范检测====start==================================
             //处理CSS的请求
@@ -640,7 +661,7 @@ var BgPageInstance = (function () {
                     notifyText({
                         title: '恭喜',
                         message: '您的FeHelper已更新至 v' + feHelper.manifest.version,
-                        autoClose: 3000
+                        autoClose: 2000
                     });
                     break;
             }

+ 120 - 0
apps/code-beautify/automatic.css

@@ -0,0 +1,120 @@
+@import url("../static/css/syntax-highlighter.css");
+.syntaxhighlighter table td.code .container .line:hover {
+    background-color: #f1f1f1 !important;
+}
+
+#fehelper_tips {
+    position: fixed;
+    top: 0;
+    left: 0;
+    z-index: 100;
+    box-sizing: border-box;
+    padding: 2px 10px 3px 40px;
+    width: 100%;
+    height: 37px;
+    border-bottom: 1px solid #AAAAAB;
+    background-image: url('/static/img/fe-16.png'), linear-gradient(to bottom, #FEEFAE, #FAE692);
+    background-position: 10px 50%, 0 0;
+    background-repeat: no-repeat, repeat-x;
+    font: 15px/32px 'Helvetica', 'Segoe UI', Arial, 'Microsoft Yahei', Simsun, sans-serif;
+    transform: translate3d(0, -37px, 0);
+    -webkit-user-select: none;
+    user-select: none;
+}
+
+#fehelper_tips .desc {
+    margin-right: 1em;
+    vertical-align: middle;
+}
+
+#fehelper_tips .desc i {
+    color:red;
+    padding: 0 5px;
+    text-decoration: underline;
+}
+
+#fehelper_tips .doing {
+    color: red;
+    font-size: 14px;
+    margin-left: 20px;
+}
+
+#fehelper_tips button {
+    margin: 0 0 0 10px;
+    height: 28px;
+    outline: none;
+    border: 1px solid #968A59;
+    border-radius: 3px;
+    background-image: linear-gradient(to bottom, #FFFBEA, #FBEDB1);
+    vertical-align: middle;
+}
+
+#fehelper_tips button:hover {
+    border-color: #4B452C;
+}
+
+#fehelper_tips button:active {
+    border-color: #4C4733;
+    background-image: linear-gradient(to bottom, #FDF2C0, #FEF9E3);
+}
+
+#fehelper_tips .close {
+    float: right;
+    margin: 8px 0 0;
+    padding: 0;
+    width: 16px;
+    height: 16px;
+    border: none;
+    cursor: pointer;
+    background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABs0lEQVQ4EZ2TzWtTQRTFf3d8WrMwGyWLdmGEYkFFFylIaruQ/qMVXOnKnUs11ohGrUptoGBoitRSRZMIUfPeXJk7k/TDjeYt3mHmnjtz5pwZyQ/uKQIoTINZ6FRNvVOgU8YCpkNn6tVH9ROUE+NQd+ikfsh3NinEokBeCJvtTyinEBFUFXGn6XS/GJ7kO4J/6gOg6mhv7/Hg4WseP91CcSAZjxofuHu/SWdnH5KScZ+ZaN0WQ861K/MMhmdZb77COVuf1rtdVm8vcak6ixY/It34EBc4EqEWPeq1Ks4Jz19sGHllaZGbtYvo6CuIHos8ixmaCSAR1ffBDymVSkncTzTvHcn6kJ8FRnQ3GOYRmeHJszYbm3ss12t2uxrNFr+GPZbrlxH8Mb4dIUQZdIlkvH2/w8s3XVZuLVK7PmeVPL9BY71F5cI5FuYrCEXkh+VH+3fUokqR5Vpmu9Pn6kIFPzqwKCU7z8fugOrcGUQHMdpxxL8/r2k6erLA4bIyPv8+tiSiKyO+/5dlk7cQvQj/Ap9/M+nhjYTPsOil4NI4zVvQ0YNocmj4n3G6iXGr4EXc8d/xD6YQKq6fj1B0AAAAAElFTkSuQmCC) no-repeat 50% 50%;
+}
+
+#fehelper_tips .close span {
+    display: block;
+    height: 100%;
+    background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACyklEQVQ4EVWTS28URxSFv1tV3dOe7nn6IRsPSAMo4hUnC2QLIhRlA0gRsAJ2WUXKIrvwD/IDss+KRTYIZxXxkJlNVgmWCVIUFLFAToI1gx0YsD1+zUx3V1Q9w0hZXVXVPfeeW/cciV/ftQhgYRAFlAarSA562b3J+1ibAglYO8wb5BuX8f4OPPaabV7+9Aubf/yFSh0IUqWofFindvU8YW0ca/uDXq5W//UdK+4oPs37j3l1f5l8kEN6fbTRGbUkTrG+YXe/x/Tlsxy+9gnWdnE4M2BvaD1Y5k3jKZFnyEcBJlcY0pUsxv0YlSS8/fl3xGhqny9g0y7KWst+6y0bS0/IG6E0XaW0cAGxFnHEhjE8OUdxskxehH8bv7HbbCMiKMSj1VghGvMJyxHB3DzVL25Runwjm99VKV26ztTX35L74DRhNSIKPF41VrBojIim83yNsqsmwkbjIZv7wvGvvhmuBgqXbvLi++9IVh4TlQt4Imw+X0PEYOKDHsqC75uMUmWqwvrSIi9gWIQMvL20yHS9lrHyPYPq9uh39jBuh8oolFYDytgsUUqF4RnCUpF8fXb0rjyNxAo3ntGBD3kPGw+E4VYTXbxO4eKNrLNDuXF2qkW2Hy1mq0vTFBXm0GHgGMQUTxwhXV3Hi1OC+c9G4M6jH7Ou78fpt/6m+2yFdMyncGwGsTHS3/jBHrRj/rl9j4oVtto7xLVTxH/+ykx9NlNca7WJPXySaGuNwkSJNzal/uUVchXtdJAQTIZUL3xEx9cUKyF69ekI7Cxy6Ogs0dZLilNltn3N5KcfkxsPEUlRmReSXSbOnaJ0/gzbgaZ47NDow8R5RYT8kSneGaE4f4Lxc6ch3cWJUHrrt+3IjCqk+26P9vIzdlabqGRoJq0Jj84wsTCHXxlDHHho3qzAwI4DzaM8UAWUHiPuJpl1jaew9gAbd4D4fx75D8MvHH6oTBAOAAAAAElFTkSuQmCC) no-repeat 50% 50%;
+    opacity: 0;
+    transition: opacity .2s;
+}
+
+#fehelper_tips .close:hover span {
+    opacity: .85;
+}
+
+#fehelper_tips .close:active span {
+    opacity: 1;
+}
+
+#fehelper_tips .forbid {
+    float: right;
+    font-size: 12px;
+    color: #666;
+    text-decoration: underline;
+    margin-right:20px;
+    cursor: pointer;
+}
+#fehelper_tips .forbid:hover {
+    color:red;
+}
+
+body > * {
+    transition: .2s linear;
+}
+
+body.show-tipsbar pre {
+    transform: translate3d(0, 37px, 0);
+}
+
+body.show-tipsbar #fehelper_tips {
+    transform: none;
+}
+
+body.show-beautified {
+    font-size: 12px;
+}
+
+body.processing > :not(#fehelper_tips) {
+    opacity: .5;
+    pointer-events: none;
+    cursor: wait;
+}

+ 101 - 0
apps/code-beautify/automatic.js

@@ -0,0 +1,101 @@
+module.exports = (() => {
+
+    /**
+     * 代码美化
+     */
+    let format = (fileType, source) => {
+
+        let txtResult = '';
+        switch (fileType) {
+            case 'Javascript':
+                let opts = {
+                    brace_style: "collapse",
+                    break_chained_methods: false,
+                    indent_char: " ",
+                    indent_scripts: "keep",
+                    indent_size: "4",
+                    keep_array_indentation: true,
+                    preserve_newlines: true,
+                    space_after_anon_function: true,
+                    space_before_conditional: true,
+                    unescape_strings: false,
+                    wrap_line_length: "120"
+                };
+                Tarp.require('../code-beautify/beautify.js');
+                txtResult = js_beautify(source, opts);
+                break;
+            case 'CSS':
+                Tarp.require('../code-beautify/beautify-css.js');
+                txtResult = css_beautify(source);
+                break;
+        }
+
+        txtResult = txtResult.replace(/>/g, '&gt;').replace(/</g, '&lt;');
+        txtResult = '<pre class="brush: ' + fileType.toLowerCase() + ';toolbar:false;">' + txtResult + '</pre>';
+        document.body.innerHTML = txtResult;
+
+        // 代码高亮
+        let map = {
+            core: '../static/vendor/syntaxhighlighter/shCore.js',
+            Javascript: '../static/vendor/syntaxhighlighter/shBrushJScript.js',
+            CSS: '../static/vendor/syntaxhighlighter/shBrushCss.js'
+        };
+
+        Tarp.require(map.core, true).then(SH => {
+            Tarp.require(map[fileType], true).then(SH => {
+                SH.defaults['toolbar'] = false;
+                SH.highlight();
+            });
+        });
+
+    };
+
+    /**
+     * 检测
+     * @returns {boolean}
+     */
+    let detect = () => {
+
+        let ext = location.pathname.substring(location.pathname.lastIndexOf(".") + 1).toLowerCase();
+        let fileType = ({'js': 'Javascript', 'css': 'CSS'})[ext];
+        if (!fileType) {
+            return false;
+        }
+        let source = document.body.textContent;
+
+        let cssUrl = chrome.extension.getURL('code-beautify/automatic.css');
+        $('<link href="' + cssUrl + '" rel="stylesheet" type="text/css" />').appendTo(document.head);
+        $(document.body).addClass('show-tipsbar');
+
+        let tipsBar = $('<div id="fehelper_tips">' +
+            '<span class="desc">FeHelper检测到这可能是<i>' + fileType + '</i>代码,是否进行美化处理?</span>' +
+            '<button class="yes">代码美化</button>' +
+            '<button class="no">放弃!</button>' +
+            '<button class="close"><span></span></button>' +
+            '<a class="forbid">彻底关闭这个功能!&gt;&gt;</a>' +
+            '</div>').prependTo('body');
+
+        tipsBar.find('button.yes').click((evt) => {
+            tipsBar.find('button.yes,button.no').hide();
+            $('<span class="doing">正在努力,请稍后...</span>').insertBefore(tipsBar.find('button.yes'));
+            format(fileType, source);
+            $(document.body).removeClass('show-tipsbar').addClass('show-beautified');
+        });
+
+        tipsBar.find('a.forbid').click((evt) => {
+            evt.preventDefault();
+            chrome.runtime.sendMessage({
+                type: MSG_TYPE.OPEN_OPTIONS_PAGE
+            });
+        });
+
+        tipsBar.find('button.no,button.close').click((evt) => {
+            $(document.body).removeClass('show-tipsbar');
+        });
+    };
+
+    return {
+        detect: detect
+    }
+
+})();

+ 10 - 0
apps/content-script/index.js

@@ -27,6 +27,12 @@
 chrome.runtime.sendMessage({
     type: MSG_TYPE.JSON_PAGE_FORMAT_REQUEST
 });
+// js、css页面自动格式化,事件注册
+chrome.runtime.sendMessage({
+    type: MSG_TYPE.JS_CSS_PAGE_BEAUTIFY_REQUEST
+});
+
+Tarp.require('../code-beautify/automatic');
 
 // 在tab创建或者更新时候,监听事件,看看是否有参数传递过来
 chrome.runtime.onMessage.addListener(function (request, sender, callback) {
@@ -36,6 +42,10 @@ chrome.runtime.onMessage.addListener(function (request, sender, callback) {
         case MSG_TYPE.JSON_PAGE_FORMAT:
             request.canIDoIt && Tarp.require('../json-format/automatic', true).then(JsonTools => JsonTools.format());
             break;
+        // js、css页面自动检测,提示格式化
+        case MSG_TYPE.JS_CSS_PAGE_BEAUTIFY:
+            request.canIDoIt && Tarp.require('../code-beautify/automatic', true).then(beautifier => beautifier.detect());
+            break;
         // 二维码解码
         case MSG_TYPE.QR_DECODE:
             Tarp.require('../qr-code/decode', true).then(qrcode => qrcode.show(request.result));

+ 2 - 5
apps/json-format/format-lib.js

@@ -310,18 +310,15 @@ var JsonFormatEntrance = (function () {
             length: jsonStr.length
         });
 
-        _loadJquery();
+        _loadJs();
         // 事件绑定
         _addEvents();
         // 支持文件下载
         _downloadSupport(JSON.parse(jsonStr));
     };
 
-    var _loadJquery = function () {
+    var _loadJs = function () {
         if (typeof Tarp === 'object') {
-            if (!window.jQuery && typeof jQuery !== 'function') {
-                window.jQuery = window.$ = Tarp.require('../static/vendor/jquery/jquery-3.3.1.min.js');
-            }
             Tarp.require('../static/js/utils.js');
         } else {
             alert('无法加载Tarp.require.js');

+ 1 - 0
apps/json-format/index.html

@@ -41,6 +41,7 @@
             </div>
 
         </div>
+        <script src="../static/vendor/jquery/jquery-3.3.1.min.js"></script>
         <script src="index.js"></script>
     </body>
 </html>

+ 11 - 4
apps/manifest.json

@@ -1,6 +1,6 @@
 {
   "name": "WEB前端助手(FeHelper)",
-  "version": "2018.04.2318",
+  "version": "2018.04.2418",
   "manifest_version": 2,
   "default_locale": "zh_CN",
   "description": "FE助手:包括JSON格式化、二维码生成与解码、信息编解码、代码压缩、美化、页面取色、正则表达式、时间转换工具、编码规范检测、页面性能检测、Ajax接口调试",
@@ -17,8 +17,8 @@
   "background": {
     "persistent": true,
     "scripts": [
-      "static/vendor/require/require.js",
       "background/detect.js",
+      "static/vendor/require/require.js",
       "background/index.js"
     ]
   },
@@ -40,11 +40,14 @@
     "static/img/fe-16.png",
     "static/img/fe-48.png",
     "static/img/fe-128.png",
-    "static/img/ui-icons.png",
     "background/network.js",
     "options/settings.js",
     "static/js/msg_type.js",
     "static/js/utils.js",
+    "code-beautify/beautify.js",
+    "code-beautify/beautify-css.js",
+    "code-beautify/automatic.js",
+    "code-beautify/automatic.css",
     "json-format/without-ui.css",
     "json-format/automatic.js",
     "json-format/format-lib.js",
@@ -66,7 +69,11 @@
     "code-standards/pbar-ani.gif",
     "static/vendor/jquery/jquery-ui.min.css",
     "static/vendor/jquery/jquery-ui.min.js",
-    "static/vendor/jquery/jquery.extend.js"
+    "static/vendor/jquery/jquery.extend.js",
+    "static/vendor/syntaxhighlighter/shCore.js",
+    "static/vendor/syntaxhighlighter/shBrushJScript.js",
+    "static/vendor/syntaxhighlighter/shBrushCss.js",
+    "static/css/syntax-highlighter.css"
   ],
   "content_scripts": [
     {

File diff suppressed because it is too large
+ 0 - 0
apps/options/index.html


+ 2 - 1
apps/options/settings.js

@@ -21,7 +21,8 @@ module.exports = (() => {
         'IMAGE_BASE64',
         'FCP_HELPER_DETECT',
         'SHOW_PAGE_LOAD_TIME',
-        'AJAX_DEBUGGER'
+        'AJAX_DEBUGGER',
+        'JS_CSS_PAGE_BEAUTIFY'
     ];
 
     /**

BIN
apps/static/img/ui-icons.png


+ 5 - 1
apps/static/js/msg_type.js

@@ -61,6 +61,8 @@ const MSG_TYPE = {
     QR_CODE: 'qr-code',
     //代码美化
     CODE_BEAUTIFY: 'code-beautify',
+    JS_CSS_PAGE_BEAUTIFY:'JS_CSS_PAGE_BEAUTIFY',
+    JS_CSS_PAGE_BEAUTIFY_REQUEST:'JS_CSS_PAGE_BEAUTIFY_REQUEST',
     //代码压缩
     CODE_COMPRESS: 'code-compress',
     // 时间转换
@@ -82,7 +84,9 @@ const MSG_TYPE = {
     AJAX_DEBUGGER_SWITCH: "ajax-debugger-switch",
 
     // dev tools页面
-    DEV_TOOLS: 'dev-tools'
+    DEV_TOOLS: 'dev-tools',
+
+    OPEN_OPTIONS_PAGE:'open-options-page'
 };
 
 (typeof module === 'object') ? module.exports = MSG_TYPE : '';

File diff suppressed because it is too large
+ 0 - 0
apps/static/vendor/syntaxhighlighter/shBrushCss.js


+ 5 - 1
apps/static/vendor/syntaxhighlighter/shBrushJScript.js

@@ -1 +1,5 @@
-(function(){function a(){var a=SyntaxHighlighter.regexLib;this.regexList=[{regex:a.multiLineDoubleQuotedString,css:"string"},{regex:a.multiLineSingleQuotedString,css:"string"},{regex:a.singleLineCComments,css:"comments"},{regex:a.multiLineCComments,css:"comments"},{regex:/\s*#.*/gm,css:"preprocessor"},{regex:new RegExp(this.getKeywords("break case catch continue default delete do else false  for function if in instanceof new null return super switch this throw true try typeof var while with"),"gm"),css:"keyword"}],this.forHtmlScript(a.scriptScriptTags)}a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=["js","jscript","javascript"],SyntaxHighlighter.brushes.JScript=a,"undefined"==typeof exports?null:exports.Brush=a})();
+(function(){function a(){var a=SyntaxHighlighter.regexLib;this.regexList=[{regex:a.multiLineDoubleQuotedString,css:"string"},{regex:a.multiLineSingleQuotedString,css:"string"},{regex:a.singleLineCComments,css:"comments"},{regex:a.multiLineCComments,css:"comments"},{regex:/\s*#.*/gm,css:"preprocessor"},{regex:new RegExp(this.getKeywords("break case catch continue default delete do else false  for function if in instanceof new null return super switch this throw true try typeof var while with"),"gm"),css:"keyword"}],this.forHtmlScript(a.scriptScriptTags)}a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=["js","jscript","javascript"],SyntaxHighlighter.brushes.JScript=a,"undefined"==typeof exports?null:exports.Brush=a})();
+
+if(typeof module === 'object') {
+    module.exports = window.SyntaxHighlighter = SyntaxHighlighter;
+}

+ 6 - 1
apps/static/vendor/syntaxhighlighter/shBrushSql.js

@@ -1 +1,6 @@
-(function(){function a(){this.regexList=[{regex:/--(.*)$/gm,css:"comments"},{regex:SyntaxHighlighter.regexLib.multiLineDoubleQuotedString,css:"string"},{regex:SyntaxHighlighter.regexLib.multiLineSingleQuotedString,css:"string"},{regex:new RegExp(this.getKeywords("abs avg case cast coalesce convert count current_timestamp current_user day isnull left lower month nullif replace right session_user space substring sum system_user upper user year"),"gmi"),css:"color2"},{regex:new RegExp(this.getKeywords("all and any between cross in join like not null or outer some"),"gmi"),css:"color1"},{regex:new RegExp(this.getKeywords("absolute action add after alter as asc at authorization begin bigint binary bit by cascade char character check checkpoint close collate column commit committed connect connection constraint contains continue create cube current current_date current_time cursor database date deallocate dec decimal declare default delete desc distinct double drop dynamic else end end-exec escape except exec execute false fetch first float for force foreign forward free from full function global goto grant group grouping having hour ignore index inner insensitive insert instead int integer intersect into is isolation key last level load local max min minute modify move name national nchar next no numeric of off on only open option order out output partial password precision prepare primary prior privileges procedure public read real references relative repeatable restrict return returns revoke rollback rollup rows rule schema scroll second section select sequence serializable set size smallint static statistics table temp temporary then time timestamp to top transaction translation trigger true truncate uncommitted union unique update values varchar varying view when where with work"),"gmi"),css:"keyword"}]}a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=["sql"],SyntaxHighlighter.brushes.Sql=a,"undefined"==typeof exports?null:exports.Brush=a})();
+(function(){function a(){this.regexList=[{regex:/--(.*)$/gm,css:"comments"},{regex:SyntaxHighlighter.regexLib.multiLineDoubleQuotedString,css:"string"},{regex:SyntaxHighlighter.regexLib.multiLineSingleQuotedString,css:"string"},{regex:new RegExp(this.getKeywords("abs avg case cast coalesce convert count current_timestamp current_user day isnull left lower month nullif replace right session_user space substring sum system_user upper user year"),"gmi"),css:"color2"},{regex:new RegExp(this.getKeywords("all and any between cross in join like not null or outer some"),"gmi"),css:"color1"},{regex:new RegExp(this.getKeywords("absolute action add after alter as asc at authorization begin bigint binary bit by cascade char character check checkpoint close collate column commit committed connect connection constraint contains continue create cube current current_date current_time cursor database date deallocate dec decimal declare default delete desc distinct double drop dynamic else end end-exec escape except exec execute false fetch first float for force foreign forward free from full function global goto grant group grouping having hour ignore index inner insensitive insert instead int integer intersect into is isolation key last level load local max min minute modify move name national nchar next no numeric of off on only open option order out output partial password precision prepare primary prior privileges procedure public read real references relative repeatable restrict return returns revoke rollback rollup rows rule schema scroll second section select sequence serializable set size smallint static statistics table temp temporary then time timestamp to top transaction translation trigger true truncate uncommitted union unique update values varchar varying view when where with work"),"gmi"),css:"keyword"}]}a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=["sql"],SyntaxHighlighter.brushes.Sql=a,"undefined"==typeof exports?null:exports.Brush=a})();
+
+
+if(typeof module === 'object') {
+    module.exports = window.SyntaxHighlighter = SyntaxHighlighter;
+}

+ 5 - 1
apps/static/vendor/syntaxhighlighter/shBrushXml.js

@@ -1 +1,5 @@
-(function(){function a(){this.regexList=[{regex:new XRegExp("(\\&lt;|<)\\!\\[[\\w\\s]*?\\[(.|\\s)*?\\]\\](\\&gt;|>)","gm"),css:"color2"},{regex:SyntaxHighlighter.regexLib.xmlComments,css:"comments"},{regex:new XRegExp("(&lt;|<)[\\s\\/\\?]*(\\w+)(?<attributes>.*?)[\\s\\/\\?]*(&gt;|>)","sg"),func:function(a){var b=SyntaxHighlighter.Match,c=a[0],d=new XRegExp("(&lt;|<)[\\s\\/\\?]*(?<name>[:\\w-\\.]+)","xg").exec(c),e=[];if(null!=a.attributes)for(var f,g=new XRegExp("(?<name> [\\w:\\-\\.]+)\\s*=\\s*(?<value> \".*?\"|'.*?'|\\w+)","xg");null!=(f=g.exec(c));)e.push(new b(f.name,a.index+f.index,"color1")),e.push(new b(f.value,a.index+f.index+f[0].indexOf(f.value),"string"));return null!=d&&e.push(new b(d.name,a.index+d[0].indexOf(d.name),"keyword")),e}}]}a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=["xml","xhtml","xslt","html"],SyntaxHighlighter.brushes.Xml=a,"undefined"==typeof exports?null:exports.Brush=a})();
+(function(){function a(){this.regexList=[{regex:new XRegExp("(\\&lt;|<)\\!\\[[\\w\\s]*?\\[(.|\\s)*?\\]\\](\\&gt;|>)","gm"),css:"color2"},{regex:SyntaxHighlighter.regexLib.xmlComments,css:"comments"},{regex:new XRegExp("(&lt;|<)[\\s\\/\\?]*(\\w+)(?<attributes>.*?)[\\s\\/\\?]*(&gt;|>)","sg"),func:function(a){var b=SyntaxHighlighter.Match,c=a[0],d=new XRegExp("(&lt;|<)[\\s\\/\\?]*(?<name>[:\\w-\\.]+)","xg").exec(c),e=[];if(null!=a.attributes)for(var f,g=new XRegExp("(?<name> [\\w:\\-\\.]+)\\s*=\\s*(?<value> \".*?\"|'.*?'|\\w+)","xg");null!=(f=g.exec(c));)e.push(new b(f.name,a.index+f.index,"color1")),e.push(new b(f.value,a.index+f.index+f[0].indexOf(f.value),"string"));return null!=d&&e.push(new b(d.name,a.index+d[0].indexOf(d.name),"keyword")),e}}]}a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=["xml","xhtml","xslt","html"],SyntaxHighlighter.brushes.Xml=a,"undefined"==typeof exports?null:exports.Brush=a})();
+
+if(typeof module === 'object') {
+    module.exports = window.SyntaxHighlighter = SyntaxHighlighter;
+}

File diff suppressed because it is too large
+ 0 - 0
apps/static/vendor/syntaxhighlighter/shCore.js


+ 8 - 1
gulpfile.js

@@ -121,7 +121,10 @@ gulp.task('zip', () => {
         return !included.trim().length;
     });
     fileList = fileList.filter(f => excludes.indexOf(f) === -1);
-    fileList.forEach(f => shell.rm('-rf', f));
+    fileList.forEach(f => {
+        shell.rm('-rf', f);
+        console.log(new Date().toLocaleString(), '> 清理掉冗余文件:', f);
+    });
     shell.cd('../../');
 
     // web_accessible_resources 中也不需要加载这些冗余的文件了
@@ -144,6 +147,10 @@ gulp.task('default', ['clean'], () => {
     runSequence(['copy', 'css', 'js', 'html', 'json'], 'zip');
 });
 
+gulp.task('sync', () => {
+    gulp.src('apps/**/*').pipe(gulp.dest('output/apps'));
+});
+
 // 开发过程中用,watch while file changed
 gulp.task('watch', () => {
     gulp.watch('apps/**/*.*', (event) => {

Some files were not shown because too many files changed in this diff