Browse Source

搜索功能完善。

oldj 10 years ago
parent
commit
1e6a0f5457
5 changed files with 37 additions and 42 deletions
  1. 1 1
      app/SH3/MacGap/SwitchHosts!-Info.plist
  2. 0 0
      app/SH3/public/js/main.js
  3. 5 16
      app/src/cm_hl.js
  4. 29 23
      app/src/main.js
  5. 2 2
      app/src/ui.js

+ 1 - 1
app/SH3/MacGap/SwitchHosts!-Info.plist

@@ -21,7 +21,7 @@
 	<key>CFBundleSignature</key>
 	<string>????</string>
 	<key>CFBundleVersion</key>
-	<string>3003</string>
+	<string>3019</string>
 	<key>LSApplicationCategoryType</key>
 	<string>public.app-category.developer-tools</string>
 	<key>LSMinimumSystemVersion</key>

File diff suppressed because it is too large
+ 0 - 0
app/SH3/public/js/main.js


+ 5 - 16
app/src/cm_hl.js

@@ -16,6 +16,11 @@ exports.init = function (app) {
                 var ch = stream.next();
 
                 var s = stream.string;
+                var kw = app.search_keyword;
+                var r = app.search_regexp;
+                if ((kw && s.indexOf(kw) > -1) || (r && s.match(r))) {
+                    return 'hl';
+                }
 
                 if (ch === '#') {
                     stream.skipToEnd();
@@ -48,22 +53,6 @@ exports.init = function (app) {
             };
         });
 
-        CodeMirror.defineMode('hl', function (config, parserConfig) {
-            var searchOverlay = {
-                token: function (stream, state) {
-                    var kw = app.search_keyword;
-                    if (kw && stream.match(kw)) {
-                        return 'hl';
-                    }
-
-                    while (stream.next() != null && !stream.match(kw, false)) {
-                    }
-                    return null;
-                }
-            };
-            return CodeMirror.overlayMode(CodeMirror.getMode(config, parserConfig.backdrop || 'host'), searchOverlay);
-        });
-
         //CodeMirror.defineMIME('text/x-host', 'host');
 
     });

+ 29 - 23
app/src/main.js

@@ -72,7 +72,33 @@ var app = new Vue({
             }
         },
         'search_keyword': function () {
-            this.log('refresh2');
+            this.log('refresh3');
+            var kw = this.search_keyword;
+            this.search_regexp = null;
+
+            // 模糊搜索
+            var r;
+            var m;
+            var flag = [];
+            if ((m = kw.match(/^\/([^\/]+)\/?(\w*)$/))) {
+                if (m[2].indexOf('i') > -1) {
+                    flag.push('i');
+                }
+                if (m[2].indexOf('g') > -1) {
+                    flag.push('g');
+                }
+                try {
+                    r = new RegExp(m[1], flag.join(''));
+                } catch (e) {}
+            } else if (kw.indexOf('*') > -1) {
+                try {
+                    r = new RegExp(kw.replace(/\*/g, '.*'), 'ig');
+                } catch (e) {}
+            }
+            this.search_regexp = r;
+            this.log('kw: ' + kw);
+            this.log('r: ' + r);
+
             //this.codemirror.refresh();
             this.onCurrentHostChange();
         }
@@ -370,36 +396,16 @@ var app = new Vue({
         },
 
         mySearch: function (item) {
-            this.search_regexp = null;
             var kw = this.search_keyword;
+            var r = this.search_regexp;
             if (!kw) return true;
 
-            if (item.title.indexOf(kw) > -1 ||
-                item.content.indexOf(kw) > -1) {
+            if (item.title.indexOf(kw) > -1 || item.content.indexOf(kw) > -1) {
                 return true;
             }
 
             // 模糊搜索
-            var r;
-            var m;
-            var flag = [];
-            if ((m = kw.match(/^\/(.+?)\/?(\w*)$/))) {
-                if (m[2].indexOf('i') > -1) {
-                    flag.push('i');
-                }
-                if (m[2].indexOf('g') > -1) {
-                    flag.push('g');
-                }
-                try {
-                    r = new RegExp(m[1], flag.join(''));
-                } catch (e) {}
-            } else if (kw.indexOf('*') > -1) {
-                try {
-                    r = new RegExp(kw.replace(/\*/g, '.*'), 'ig');
-                } catch (e) {}
-            }
             if (r && r.test(item.content)) {
-                this.search_regexp = r;
                 return true;
             }
 

+ 2 - 2
app/src/ui.js

@@ -7,7 +7,7 @@
 
 var CodeMirror = require('codemirror');
 require('codemirror/mode/shell/shell');
-require('codemirror/addon/mode/overlay');
+//require('codemirror/addon/mode/overlay');
 
 var my_codemirror;
 
@@ -30,7 +30,7 @@ function init(app) {
         my_codemirror = CodeMirror.fromTextArea(el_textarea[0], {
             lineNumbers: true,
             readOnly: true,
-            mode: 'hl'
+            mode: 'host'
         });
         app.codemirror = my_codemirror;
 

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