1
0
Эх сурвалжийг харах

feat: support `:contains` in CSS Selector (#973)

Ahmad Kholid 2 жил өмнө
parent
commit
6b0b2bf446
3 өөрчлөгдсөн 18 нэмэгдсэн , 0 устгасан
  1. 1 0
      package.json
  2. 12 0
      src/utils/FindElement.js
  3. 5 0
      yarn.lock

+ 1 - 0
package.json

@@ -81,6 +81,7 @@
     "prosemirror-keymap": "^1.2.0",
     "prosemirror-schema-list": "^1.2.2",
     "rxjs": "^7.5.7",
+    "sizzle": "^2.3.8",
     "tippy.js": "^6.3.1",
     "v-remixicon": "^0.1.1",
     "vue": "^3.2.37",

+ 12 - 0
src/utils/FindElement.js

@@ -1,9 +1,21 @@
+import Sizzle from 'sizzle';
+
+const specialSelectors = [':contains', ':header', ':parent'];
+const specialSelectorsRegex = new RegExp(specialSelectors.join('|'));
+
 class FindElement {
   static cssSelector(data, documentCtx = document) {
     const selector = data.markEl
       ? `${data.selector.trim()}:not([${data.blockIdAttr}])`
       : data.selector;
 
+    if (specialSelectorsRegex.test(selector)) {
+      const elements = Sizzle.matches(selector);
+      if (!elements) return null;
+
+      return data.multiple ? elements : elements[0];
+    }
+
     if (data.multiple) {
       const elements = documentCtx.querySelectorAll(selector);
 

+ 5 - 0
yarn.lock

@@ -5966,6 +5966,11 @@ simple-git-hooks@^2.8.1:
   resolved "https://registry.yarnpkg.com/simple-git-hooks/-/simple-git-hooks-2.8.1.tgz#05e8306f3211d7eee9f5fdb5cc42521280ee82a9"
   integrity sha512-DYpcVR1AGtSfFUNzlBdHrQGPsOhuuEJ/FkmPOOlFysP60AHd3nsEpkGq/QEOdtUyT1Qhk7w9oLmFoMG+75BDog==
 
+sizzle@^2.3.8:
+  version "2.3.8"
+  resolved "https://registry.yarnpkg.com/sizzle/-/sizzle-2.3.8.tgz#a09daf9f7da7c3833f3ec4bff3e66265fdd23362"
+  integrity sha512-ZfDSwa4my4STaWJNcju5jEUa8boT9IPTgSz3SeuCzkNUZ5EpDtFtNkrbEcSkgMZEUag9XZzAOvstTiXdD9Mbtg==
+
 slash@^4.0.0:
   version "4.0.0"
   resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7"