Răsfoiți Sursa

fix: bind keys globally in vm-code

Gerald 8 ani în urmă
părinte
comite
3add3d325c
2 a modificat fișierele cu 39 adăugiri și 45 ștergeri
  1. 39 5
      src/common/ui/code.vue
  2. 0 40
      src/options/views/edit/index.vue

+ 39 - 5
src/common/ui/code.vue

@@ -59,11 +59,18 @@ const cmOptions = {
 };
 
 export default {
-  props: [
-    'readonly',
-    'value',
-    'commands',
-  ],
+  props: {
+    readonly: {
+      type: Boolean,
+      default: false,
+    },
+    value: true,
+    commands: true,
+    global: {
+      type: Boolean,
+      default: true,
+    },
+  },
   components: {
     VueCode,
   },
@@ -100,6 +107,33 @@ export default {
       });
       this.$emit('ready', cm);
     },
+    onKeyDown(e) {
+      const name = CodeMirror.keyName(e);
+      const { cm } = this;
+      [
+        cm.options.extraKeys,
+        cm.options.keyMap,
+      ].some((keyMap) => {
+        let stop = false;
+        if (keyMap) {
+          CodeMirror.lookupKey(name, keyMap, (b) => {
+            if (this.commands[b]) {
+              e.preventDefault();
+              e.stopPropagation();
+              cm.execCommand(b);
+              stop = true;
+            }
+          }, cm);
+        }
+        return stop;
+      });
+    },
+  },
+  mounted() {
+    if (this.global) window.addEventListener('keydown', this.onKeyDown, false);
+  },
+  beforeDestroy() {
+    if (this.global) window.removeEventListener('keydown', this.onKeyDown, false);
   },
 };
 </script>

+ 0 - 40
src/options/views/edit/index.vue

@@ -172,7 +172,6 @@ export default {
     },
   },
   mounted() {
-    this.bindKeys();
     (this.value.id ? sendMessage({
       cmd: 'GetScript',
       data: this.value.id,
@@ -209,9 +208,6 @@ export default {
       });
     });
   },
-  beforeDestroy() {
-    this.unbindKeys();
-  },
   methods: {
     save() {
       const { settings: { custom, more } } = this;
@@ -325,42 +321,6 @@ export default {
       }
       (all ? replaceAll : replaceOne)(cm, state);
     },
-    onKeyDown(e) {
-      const { cm } = this;
-      if (!cm) return;
-      const name = CodeMirror.keyName(e);
-      const commands = [
-        'cancel',
-        'find',
-        'findNext',
-        'findPrev',
-        'replace',
-        'replaceAll',
-      ];
-      [
-        cm.options.extraKeys,
-        cm.options.keyMap,
-      ].some((keyMap) => {
-        let stop = false;
-        if (keyMap) {
-          CodeMirror.lookupKey(name, keyMap, (b) => {
-            if (commands.includes(b)) {
-              e.preventDefault();
-              e.stopPropagation();
-              cm.execCommand(b);
-              stop = true;
-            }
-          }, cm);
-        }
-        return stop;
-      });
-    },
-    bindKeys() {
-      window.addEventListener('keydown', this.onKeyDown, false);
-    },
-    unbindKeys() {
-      window.removeEventListener('keydown', this.onKeyDown, false);
-    },
     goToLine() {
       const line = this.search.line - 1;
       const { cm } = this;