@cherry-markdown/cherry-markdown-dev 0.9.0-dev.202504110650.834443a → 0.9.0-dev.202504160300.d23d141

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (327) hide show
  1. package/README.md +2 -2
  2. package/dist/addons/advance/cherry-table-echarts-plugin.js +1 -1
  3. package/dist/addons/cherry-code-block-mermaid-plugin.js +1 -1
  4. package/dist/cherry-markdown.core.common.js +1 -1
  5. package/dist/cherry-markdown.core.js +1 -1
  6. package/dist/cherry-markdown.engine.core.common.js +1 -1
  7. package/dist/cherry-markdown.engine.core.esm.js +1 -1
  8. package/dist/cherry-markdown.engine.core.js +1 -1
  9. package/dist/cherry-markdown.esm.js +1 -1
  10. package/dist/cherry-markdown.js +1 -1
  11. package/dist/cherry-markdown.min.js +1 -1
  12. package/dist/fonts/ch-icon.eot +0 -0
  13. package/dist/fonts/ch-icon.ttf +0 -0
  14. package/dist/fonts/ch-icon.woff +0 -0
  15. package/dist/fonts/ch-icon.woff2 +0 -0
  16. package/package.json +1 -3
  17. package/src/Cherry.config.js +0 -634
  18. package/src/Cherry.js +0 -1104
  19. package/src/CherryStatic.js +0 -70
  20. package/src/Editor.js +0 -748
  21. package/src/Engine.js +0 -402
  22. package/src/Event.js +0 -140
  23. package/src/Factory.js +0 -180
  24. package/src/Logger.js +0 -31
  25. package/src/Previewer.js +0 -1192
  26. package/src/Sanitizer.js +0 -4
  27. package/src/Sanitizer.node.js +0 -7
  28. package/src/UrlCache.js +0 -98
  29. package/src/addons/advance/cherry-table-echarts-plugin.js +0 -170
  30. package/src/addons/cherry-code-block-mermaid-plugin.js +0 -158
  31. package/src/addons/cherry-code-block-plantuml-plugin.js +0 -106
  32. package/src/core/HookCenter.js +0 -297
  33. package/src/core/HooksConfig.js +0 -105
  34. package/src/core/ParagraphBase.js +0 -332
  35. package/src/core/SentenceBase.js +0 -65
  36. package/src/core/SyntaxBase.js +0 -194
  37. package/src/core/hooks/AutoLink.js +0 -232
  38. package/src/core/hooks/BackgroundColor.js +0 -46
  39. package/src/core/hooks/Blockquote.js +0 -70
  40. package/src/core/hooks/Br.js +0 -85
  41. package/src/core/hooks/CodeBlock.js +0 -456
  42. package/src/core/hooks/Color.js +0 -46
  43. package/src/core/hooks/CommentReference.js +0 -96
  44. package/src/core/hooks/Detail.js +0 -108
  45. package/src/core/hooks/Emoji.config.js +0 -1825
  46. package/src/core/hooks/Emoji.js +0 -119
  47. package/src/core/hooks/Emphasis.js +0 -113
  48. package/src/core/hooks/Footnote.js +0 -125
  49. package/src/core/hooks/FrontMatter.js +0 -51
  50. package/src/core/hooks/Header.js +0 -234
  51. package/src/core/hooks/HighLight.js +0 -37
  52. package/src/core/hooks/Hr.js +0 -52
  53. package/src/core/hooks/HtmlBlock.js +0 -199
  54. package/src/core/hooks/Image.js +0 -174
  55. package/src/core/hooks/InlineCode.js +0 -48
  56. package/src/core/hooks/InlineMath.js +0 -108
  57. package/src/core/hooks/Link.js +0 -160
  58. package/src/core/hooks/List.js +0 -264
  59. package/src/core/hooks/MathBlock.js +0 -104
  60. package/src/core/hooks/Panel.js +0 -145
  61. package/src/core/hooks/Paragraph.js +0 -84
  62. package/src/core/hooks/Ruby.js +0 -34
  63. package/src/core/hooks/Size.js +0 -51
  64. package/src/core/hooks/Strikethrough.js +0 -54
  65. package/src/core/hooks/Sub.js +0 -47
  66. package/src/core/hooks/SuggestList.js +0 -333
  67. package/src/core/hooks/Suggester.js +0 -707
  68. package/src/core/hooks/Sup.js +0 -47
  69. package/src/core/hooks/Table.js +0 -275
  70. package/src/core/hooks/Toc.js +0 -292
  71. package/src/core/hooks/Transfer.js +0 -47
  72. package/src/core/hooks/Underline.js +0 -37
  73. package/src/index.core.js +0 -29
  74. package/src/index.engine.core.js +0 -68
  75. package/src/index.engine.js +0 -28
  76. package/src/index.js +0 -32
  77. package/src/libs/mermaidAPI.8.4.8.js +0 -1
  78. package/src/libs/mermaidAPI.8.5.2.js +0 -42
  79. package/src/libs/rawdeflate.js +0 -1663
  80. package/src/locales/en_US.js +0 -139
  81. package/src/locales/index.js +0 -25
  82. package/src/locales/ru_RU.js +0 -139
  83. package/src/locales/zh_CN.js +0 -142
  84. package/src/sass/base.scss +0 -26
  85. package/src/sass/bubble_formula.scss +0 -166
  86. package/src/sass/ch-icon.scss +0 -118
  87. package/src/sass/cherry.scss +0 -1116
  88. package/src/sass/components/bubble.scss +0 -173
  89. package/src/sass/components/shortcut_key_config.scss +0 -108
  90. package/src/sass/formula_utils_bubble.scss +0 -82
  91. package/src/sass/icon_template.scss +0 -24
  92. package/src/sass/icons/uEA03-list.svg +0 -19
  93. package/src/sass/icons/uEA04-check.svg +0 -14
  94. package/src/sass/icons/uEA09-square.svg +0 -10
  95. package/src/sass/icons/uEA0A-bold.svg +0 -20
  96. package/src/sass/icons/uEA0B-code.svg +0 -18
  97. package/src/sass/icons/uEA0C-color.svg +0 -13
  98. package/src/sass/icons/uEA0D-header.svg +0 -8
  99. package/src/sass/icons/uEA0E-image.svg +0 -15
  100. package/src/sass/icons/uEA0F-italic.svg +0 -8
  101. package/src/sass/icons/uEA10-link.svg +0 -16
  102. package/src/sass/icons/uEA11-ol.svg +0 -21
  103. package/src/sass/icons/uEA12-size.svg +0 -11
  104. package/src/sass/icons/uEA13-strike.svg +0 -16
  105. package/src/sass/icons/uEA14-table.svg +0 -12
  106. package/src/sass/icons/uEA15-ul.svg +0 -17
  107. package/src/sass/icons/uEA16-underline.svg +0 -13
  108. package/src/sass/icons/uEA17-word.svg +0 -16
  109. package/src/sass/icons/uEA18-blockquote.svg +0 -11
  110. package/src/sass/icons/uEA19-font.svg +0 -10
  111. package/src/sass/icons/uEA1F-insertClass.svg +0 -39
  112. package/src/sass/icons/uEA20-insertFlow.svg +0 -8
  113. package/src/sass/icons/uEA21-insertFormula.svg +0 -23
  114. package/src/sass/icons/uEA22-insertGantt.svg +0 -13
  115. package/src/sass/icons/uEA23-insertGraph.svg +0 -13
  116. package/src/sass/icons/uEA24-insertPie.svg +0 -19
  117. package/src/sass/icons/uEA25-insertSeq.svg +0 -20
  118. package/src/sass/icons/uEA26-insertState.svg +0 -35
  119. package/src/sass/icons/uEA27-line.svg +0 -11
  120. package/src/sass/icons/uEA28-preview.svg +0 -18
  121. package/src/sass/icons/uEA29-previewClose.svg +0 -24
  122. package/src/sass/icons/uEA2A-toc.svg +0 -24
  123. package/src/sass/icons/uEA2D-sub.svg +0 -15
  124. package/src/sass/icons/uEA2E-sup.svg +0 -15
  125. package/src/sass/icons/uEA2F-h1.svg +0 -16
  126. package/src/sass/icons/uEA30-h2.svg +0 -20
  127. package/src/sass/icons/uEA31-h3.svg +0 -23
  128. package/src/sass/icons/uEA32-h4.svg +0 -16
  129. package/src/sass/icons/uEA33-h5.svg +0 -20
  130. package/src/sass/icons/uEA34-h6.svg +0 -17
  131. package/src/sass/icons/uEA35-video.svg +0 -20
  132. package/src/sass/icons/uEA36-insert.svg +0 -25
  133. package/src/sass/icons/uEA37-little_table.svg +0 -30
  134. package/src/sass/icons/uEA38-pdf.svg +0 -27
  135. package/src/sass/icons/uEA39-checklist.svg +0 -22
  136. package/src/sass/icons/uEA40-close.svg +0 -12
  137. package/src/sass/icons/uEA41-fullscreen.svg +0 -81
  138. package/src/sass/icons/uEA42-minscreen.svg +0 -77
  139. package/src/sass/icons/uEA43-insertChart.svg +0 -23
  140. package/src/sass/icons/uEA44-question.svg +0 -25
  141. package/src/sass/icons/uEA45-settings.svg +0 -32
  142. package/src/sass/icons/uEA46-ok.svg +0 -7
  143. package/src/sass/icons/uEA47-br.svg +0 -22
  144. package/src/sass/icons/uEA48-normal.svg +0 -15
  145. package/src/sass/icons/uEA49-undo.svg +0 -19
  146. package/src/sass/icons/uEA50-redo.svg +0 -21
  147. package/src/sass/icons/uEA51-copy.svg +0 -6
  148. package/src/sass/icons/uEA52-phone.svg +0 -5
  149. package/src/sass/icons/uEA53-cherry-table-delete.svg +0 -17
  150. package/src/sass/icons/uEA54-cherry-table-insert-bottom.svg +0 -16
  151. package/src/sass/icons/uEA55-cherry-table-insert-left.svg +0 -15
  152. package/src/sass/icons/uEA56-cherry-table-insert-right.svg +0 -16
  153. package/src/sass/icons/uEA57-cherry-table-insert-top.svg +0 -16
  154. package/src/sass/icons/uEA58-sort-s.svg +0 -13
  155. package/src/sass/icons/uEA59-pinyin.svg +0 -1
  156. package/src/sass/icons/uEA5A-create.svg +0 -24
  157. package/src/sass/icons/uEA5B-download.svg +0 -34
  158. package/src/sass/icons/uEA5C-edit.svg +0 -3
  159. package/src/sass/icons/uEA5D-export.svg +0 -53
  160. package/src/sass/icons/uEA5E-folder-open.svg +0 -3
  161. package/src/sass/icons/uEA5F-folder.svg +0 -3
  162. package/src/sass/icons/uEA60-help.svg +0 -5
  163. package/src/sass/icons/uEA61-pen-fill.svg +0 -13
  164. package/src/sass/icons/uEA62-pen.svg +0 -3
  165. package/src/sass/icons/uEA64-tips.svg +0 -5
  166. package/src/sass/icons/uEA65-warn.svg +0 -5
  167. package/src/sass/icons/uEA66-mistake.svg +0 -4
  168. package/src/sass/icons/uEA67-success.svg +0 -4
  169. package/src/sass/icons/uEA68-danger.svg +0 -4
  170. package/src/sass/icons/uEA69-info.svg +0 -5
  171. package/src/sass/icons/uEA6A-primary.svg +0 -5
  172. package/src/sass/icons/uEA6B-warning.svg +0 -5
  173. package/src/sass/icons/uEA6C-justify.svg +0 -19
  174. package/src/sass/icons/uEA6D-justifyCenter.svg +0 -19
  175. package/src/sass/icons/uEA6E-justifyLeft.svg +0 -19
  176. package/src/sass/icons/uEA6F-justifyRight.svg +0 -19
  177. package/src/sass/icons/uEA70-chevronsLeft.svg +0 -1
  178. package/src/sass/icons/uEA71-chevronsRight.svg +0 -1
  179. package/src/sass/icons/uEA72-trendingUp.svg +0 -1
  180. package/src/sass/icons/uEA74-codeBlock.svg +0 -1
  181. package/src/sass/icons/uEA75-expand.svg +0 -3
  182. package/src/sass/icons/uEA76-unExpand.svg +0 -3
  183. package/src/sass/icons/uEA77-swap-vert.svg +0 -1
  184. package/src/sass/icons/uEA78-swap.svg +0 -1
  185. package/src/sass/icons/uEA79-keyboard.svg +0 -1
  186. package/src/sass/icons/uEA7A-command.svg +0 -1
  187. package/src/sass/icons/uEA7B-search.svg +0 -1
  188. package/src/sass/index.scss +0 -3
  189. package/src/sass/markdown.scss +0 -668
  190. package/src/sass/markdown_pure.scss +0 -9
  191. package/src/sass/prettyprint/prettyprint.scss +0 -118
  192. package/src/sass/previewer.scss +0 -179
  193. package/src/sass/print.scss +0 -13
  194. package/src/sass/prism/coy.scss +0 -220
  195. package/src/sass/prism/dark.scss +0 -132
  196. package/src/sass/prism/default.scss +0 -143
  197. package/src/sass/prism/funky.scss +0 -133
  198. package/src/sass/prism/okaidia.scss +0 -126
  199. package/src/sass/prism/one-dark.scss +0 -440
  200. package/src/sass/prism/one-light.scss +0 -428
  201. package/src/sass/prism/solarized-light.scss +0 -153
  202. package/src/sass/prism/tomorrow-night.scss +0 -125
  203. package/src/sass/prism/twilight.scss +0 -202
  204. package/src/sass/prism/vs-dark.scss +0 -275
  205. package/src/sass/prism/vs-light.scss +0 -168
  206. package/src/sass/themes/blue.scss +0 -411
  207. package/src/sass/themes/dark.scss +0 -517
  208. package/src/sass/themes/default.scss +0 -255
  209. package/src/sass/themes/green.scss +0 -395
  210. package/src/sass/themes/light.scss +0 -368
  211. package/src/sass/themes/red.scss +0 -397
  212. package/src/sass/themes/violet.scss +0 -410
  213. package/src/sass/variable.scss +0 -84
  214. package/src/toolbars/Bubble.js +0 -234
  215. package/src/toolbars/BubbleFormula.js +0 -298
  216. package/src/toolbars/BubbleTable.js +0 -147
  217. package/src/toolbars/FloatMenu.js +0 -131
  218. package/src/toolbars/HiddenToolbar.js +0 -36
  219. package/src/toolbars/HookCenter.js +0 -231
  220. package/src/toolbars/MenuBase.js +0 -569
  221. package/src/toolbars/PreviewerBubble.js +0 -608
  222. package/src/toolbars/ShortcutKeyConfigPanel.js +0 -345
  223. package/src/toolbars/Sidebar.js +0 -36
  224. package/src/toolbars/Toc.js +0 -242
  225. package/src/toolbars/Toolbar.js +0 -449
  226. package/src/toolbars/ToolbarRight.js +0 -37
  227. package/src/toolbars/hooks/Audio.js +0 -79
  228. package/src/toolbars/hooks/BarTable.js +0 -41
  229. package/src/toolbars/hooks/Bold.js +0 -73
  230. package/src/toolbars/hooks/Br.js +0 -34
  231. package/src/toolbars/hooks/ChangeLocale.js +0 -62
  232. package/src/toolbars/hooks/ChatGpt.js +0 -182
  233. package/src/toolbars/hooks/CheckList.js +0 -41
  234. package/src/toolbars/hooks/Code.js +0 -49
  235. package/src/toolbars/hooks/CodeTheme.js +0 -66
  236. package/src/toolbars/hooks/Color.js +0 -298
  237. package/src/toolbars/hooks/Copy.js +0 -141
  238. package/src/toolbars/hooks/Detail.js +0 -69
  239. package/src/toolbars/hooks/DrawIo.js +0 -57
  240. package/src/toolbars/hooks/Export.js +0 -49
  241. package/src/toolbars/hooks/File.js +0 -79
  242. package/src/toolbars/hooks/Formula.js +0 -69
  243. package/src/toolbars/hooks/FullScreen.js +0 -50
  244. package/src/toolbars/hooks/Graph.js +0 -263
  245. package/src/toolbars/hooks/H1.js +0 -71
  246. package/src/toolbars/hooks/H2.js +0 -71
  247. package/src/toolbars/hooks/H3.js +0 -71
  248. package/src/toolbars/hooks/Header.js +0 -118
  249. package/src/toolbars/hooks/Hr.js +0 -35
  250. package/src/toolbars/hooks/Image.js +0 -91
  251. package/src/toolbars/hooks/InlineCode.js +0 -53
  252. package/src/toolbars/hooks/Insert.js +0 -193
  253. package/src/toolbars/hooks/Italic.js +0 -72
  254. package/src/toolbars/hooks/Justify.js +0 -49
  255. package/src/toolbars/hooks/LineTable.js +0 -41
  256. package/src/toolbars/hooks/Link.js +0 -49
  257. package/src/toolbars/hooks/List.js +0 -55
  258. package/src/toolbars/hooks/MobilePreview.js +0 -44
  259. package/src/toolbars/hooks/Ol.js +0 -41
  260. package/src/toolbars/hooks/Panel.js +0 -140
  261. package/src/toolbars/hooks/Pdf.js +0 -78
  262. package/src/toolbars/hooks/Publish.js +0 -123
  263. package/src/toolbars/hooks/QuickTable.js +0 -43
  264. package/src/toolbars/hooks/Quote.js +0 -45
  265. package/src/toolbars/hooks/Redo.js +0 -33
  266. package/src/toolbars/hooks/Ruby.js +0 -59
  267. package/src/toolbars/hooks/Search.js +0 -53
  268. package/src/toolbars/hooks/Settings.js +0 -220
  269. package/src/toolbars/hooks/ShortcutKey.js +0 -62
  270. package/src/toolbars/hooks/Size.js +0 -118
  271. package/src/toolbars/hooks/Split.js +0 -37
  272. package/src/toolbars/hooks/Strikethrough.js +0 -71
  273. package/src/toolbars/hooks/Sub.js +0 -58
  274. package/src/toolbars/hooks/Sup.js +0 -58
  275. package/src/toolbars/hooks/SwitchModel.js +0 -56
  276. package/src/toolbars/hooks/Table.js +0 -56
  277. package/src/toolbars/hooks/Theme.js +0 -62
  278. package/src/toolbars/hooks/Toc.js +0 -35
  279. package/src/toolbars/hooks/TogglePreview.js +0 -91
  280. package/src/toolbars/hooks/Ul.js +0 -41
  281. package/src/toolbars/hooks/Underline.js +0 -68
  282. package/src/toolbars/hooks/Undo.js +0 -30
  283. package/src/toolbars/hooks/Video.js +0 -79
  284. package/src/toolbars/hooks/Word.js +0 -78
  285. package/src/toolbars/hooks/WordCount.js +0 -106
  286. package/src/utils/autoindent.js +0 -58
  287. package/src/utils/cm-search-replace.js +0 -794
  288. package/src/utils/code-preview-language-setting.js +0 -180
  289. package/src/utils/codeBlockContentHandler.js +0 -400
  290. package/src/utils/config.js +0 -174
  291. package/src/utils/copy.js +0 -55
  292. package/src/utils/dialog.js +0 -214
  293. package/src/utils/dom.js +0 -163
  294. package/src/utils/downloadUtil.js +0 -23
  295. package/src/utils/env.js +0 -22
  296. package/src/utils/error.js +0 -61
  297. package/src/utils/event.js +0 -38
  298. package/src/utils/export.js +0 -166
  299. package/src/utils/file.js +0 -164
  300. package/src/utils/formulaUtilsHandler.js +0 -232
  301. package/src/utils/htmlparser.js +0 -976
  302. package/src/utils/image.js +0 -99
  303. package/src/utils/imgSizeHandler.js +0 -279
  304. package/src/utils/lazyLoadImg.js +0 -327
  305. package/src/utils/lineFeed.js +0 -49
  306. package/src/utils/listContentHandler.js +0 -227
  307. package/src/utils/lookbehind-replace.js +0 -81
  308. package/src/utils/mathjax.js +0 -89
  309. package/src/utils/myersDiff.js +0 -211
  310. package/src/utils/pasteHelper.js +0 -253
  311. package/src/utils/platformTransform.js +0 -71
  312. package/src/utils/recount-pos.js +0 -59
  313. package/src/utils/regexp.js +0 -295
  314. package/src/utils/sanitize.js +0 -477
  315. package/src/utils/selection.js +0 -50
  316. package/src/utils/shortcutKey.js +0 -291
  317. package/src/utils/svgUtils.js +0 -96
  318. package/src/utils/tableContentHandler.js +0 -876
  319. package/test/core/CommonMark.spec.ts +0 -62
  320. package/test/core/hooks/AutoLink.spec.ts +0 -28
  321. package/test/core/hooks/List.spec.ts +0 -79
  322. package/test/core/hooks/__snapshots__/List.spec.ts.snap +0 -11
  323. package/test/example.md +0 -778
  324. package/test/node.js +0 -10
  325. package/test/suites/commonmark.spec.json +0 -5218
  326. package/test/tsconfig.test.json +0 -6
  327. package/test/utils/regexp.spec.ts +0 -28
@@ -1,794 +0,0 @@
1
- /**
2
- * Search and replace widget
3
- * https://github.com/L-Focus/cm-search-replace
4
- * 自己魔改下,从而实现关掉快捷键的功能
5
- */
6
-
7
- // let Search;
8
- // export function initSearchHelper(cm) {
9
- // Search = new SearchBox(cm);
10
- // }
11
-
12
- // export function isVisible() {
13
- // return Search.isVisible();
14
- // }
15
-
16
- // export function showSearchBox(selection) {
17
- // Search.show(selection, false);
18
- // }
19
-
20
- // export function hideSearchBox() {
21
- // Search.hide();
22
- // }
23
-
24
- export default class SearchBox {
25
- init(cm) {
26
- this.cm = cm;
27
- const el = this.addHtml();
28
- this.element = el;
29
-
30
- this.addStyle();
31
-
32
- this.initElements(el);
33
- this.activeInput = this.searchInput;
34
- // @ts-ignore
35
- this.element.style.display = 'none';
36
- // this.bindKeys();
37
-
38
- this.commands = {
39
- toggleRegexpMode: () => {
40
- this.regExpOption.checked = !this.regExpOption.checked;
41
- this.$syncOptions();
42
- },
43
-
44
- toggleCaseSensitive: () => {
45
- this.caseSensitiveOption.checked = !this.caseSensitiveOption.checked;
46
- this.$syncOptions();
47
- },
48
-
49
- toggleWholeWords: () => {
50
- this.wholeWordOption.checked = !this.wholeWordOption.checked;
51
- this.$syncOptions();
52
- },
53
- };
54
-
55
- el.addEventListener('mousedown', (e) => {
56
- setTimeout(() => {
57
- this.activeInput.focus();
58
- }, 0);
59
-
60
- e.stopPropagation();
61
- });
62
-
63
- el.addEventListener('click', (e) => {
64
- const t = e.target || e.srcElement;
65
- // @ts-ignore
66
- const action = t.getAttribute('action');
67
- if (action && this[action]) this[action]();
68
- else if (this.commands[action]) this.commands[action]();
69
- e.stopPropagation();
70
- });
71
-
72
- this.searchInput.addEventListener('input', () => {
73
- this.find(false, false);
74
- });
75
-
76
- this.searchInput.addEventListener('focus', () => {
77
- this.activeInput = this.searchInput;
78
- });
79
-
80
- this.replaceInput.addEventListener('focus', () => {
81
- this.activeInput = this.replaceInput;
82
- });
83
- }
84
-
85
- addHtml() {
86
- const el = this.cm.getWrapperElement();
87
- const div = document.createElement('div');
88
- const html = [
89
- '<div class="ace_search right">',
90
- '<button type="button" action="hide" class="ace_searchbtn_close"></button>',
91
- '<div class="ace_search_form">',
92
- '<input class="ace_search_field" placeholder="Search for" spellcheck="false"></input>',
93
- '<button type="button" action="findNext" class="ace_searchbtn next"></button>',
94
- '<button type="button" action="findPrev" class="ace_searchbtn prev"></button>',
95
- '</div>',
96
- '<div class="ace_replace_form">',
97
- '<input class="ace_search_field" placeholder="Replace with" spellcheck="false"></input>',
98
- '<button type="button" action="replaceAndFindNext" title="Replace" class="ace_replacebtn">',
99
- '<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">',
100
- '<path fill-rule="evenodd" clip-rule="evenodd" d="M3.221 3.739L5.482 6.008L7.7 3.784L7 3.084L5.988 4.091L5.98 2.491C5.97909 2.35567 6.03068 2.22525 6.12392 2.12716C6.21716 2.02908 6.3448 1.97095 6.48 1.965H8V1H6.48C6.28496 1.00026 6.09189 1.03902 5.91186 1.11405C5.73183 1.18908 5.56838 1.29892 5.43088 1.43725C5.29338 1.57558 5.18455 1.73969 5.11061 1.92018C5.03667 2.10066 4.99908 2.29396 5 2.489V4.1L3.927 3.033L3.221 3.739ZM9.89014 5.53277H9.90141C10.0836 5.84426 10.3521 6 10.707 6C11.0995 6 11.4131 5.83236 11.6479 5.49708C11.8826 5.1618 12 4.71728 12 4.16353C12 3.65304 11.8995 3.2507 11.6986 2.95652C11.4977 2.66234 11.2113 2.51525 10.8394 2.51525C10.4338 2.51525 10.1211 2.70885 9.90141 3.09604H9.89014V1H9V5.91888H9.89014V5.53277ZM9.87606 4.47177V4.13108C9.87606 3.88449 9.93427 3.6844 10.0507 3.53082C10.169 3.37724 10.3174 3.30045 10.4958 3.30045C10.6854 3.30045 10.831 3.37833 10.9324 3.53407C11.0357 3.68765 11.0873 3.9018 11.0873 4.17651C11.0873 4.50746 11.031 4.76379 10.9183 4.94549C10.8075 5.12503 10.6507 5.2148 10.4479 5.2148C10.2808 5.2148 10.1437 5.14449 10.0366 5.00389C9.92958 4.86329 9.87606 4.68592 9.87606 4.47177ZM9 12.7691C8.74433 12.923 8.37515 13 7.89247 13C7.32855 13 6.87216 12.8225 6.5233 12.4674C6.17443 12.1124 6 11.6543 6 11.0931C6 10.4451 6.18638 9.93484 6.55914 9.5624C6.93429 9.18747 7.43489 9.00001 8.06093 9.00001C8.49343 9.00001 8.80645 9.0596 9 9.17878V10.1769C8.76344 9.99319 8.4994 9.90132 8.20789 9.90132C7.88292 9.90132 7.62485 10.0006 7.43369 10.1993C7.24492 10.3954 7.15054 10.6673 7.15054 11.0149C7.15054 11.3526 7.24134 11.6183 7.42294 11.8119C7.60454 12.0031 7.85424 12.0987 8.17204 12.0987C8.454 12.0987 8.72999 12.0068 9 11.8231V12.7691ZM4 7L3 8V14L4 15H11L12 14V8L11 7H4ZM4 8H5H10H11V9V13V14H10H5H4V13V9V8Z" fill="#656565"/>',
101
- '</svg></button>',
102
- '<button type="button" action="replaceAll" title="Replace All" class="ace_replacebtn">',
103
- '<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">',
104
- '<path fill-rule="evenodd" clip-rule="evenodd" d="M11.6009 2.67683C11.7474 2.36708 11.9559 2.2122 12.2263 2.2122C12.4742 2.2122 12.6651 2.32987 12.7991 2.56522C12.933 2.80056 13 3.12243 13 3.53082C13 3.97383 12.9218 4.32944 12.7653 4.59766C12.6088 4.86589 12.3997 5 12.138 5C11.9014 5 11.7224 4.87541 11.6009 4.62622H11.5934V4.93511H11V1H11.5934V2.67683H11.6009ZM11.584 3.77742C11.584 3.94873 11.6197 4.09063 11.6911 4.20311C11.7624 4.3156 11.8538 4.37184 11.9653 4.37184C12.1005 4.37184 12.205 4.30002 12.2789 4.15639C12.354 4.01103 12.3915 3.80597 12.3915 3.54121C12.3915 3.32144 12.3571 3.15012 12.2883 3.02726C12.2207 2.90266 12.1236 2.84036 11.9972 2.84036C11.8782 2.84036 11.7793 2.9018 11.7005 3.02466C11.6228 3.14752 11.584 3.30759 11.584 3.50487V3.77742ZM4.11969 7.695L2 5.56781L2.66188 4.90594L3.66781 5.90625V4.39594C3.66695 4.21309 3.70219 4.03187 3.7715 3.86266C3.84082 3.69346 3.94286 3.53961 4.07176 3.40992C4.20066 3.28023 4.3539 3.17727 4.52268 3.10692C4.69146 3.03658 4.87246 3.00024 5.05531 3H7.39906V3.90469H5.05531C4.92856 3.91026 4.8089 3.96476 4.72149 4.05672C4.63408 4.14868 4.58571 4.27094 4.58656 4.39781L4.59406 5.89781L5.54281 4.95375L6.19906 5.61L4.11969 7.695ZM9.3556 4.93017H10V3.22067C10 2.40689 9.68534 2 9.05603 2C8.92098 2 8.77083 2.02421 8.6056 2.07263C8.44181 2.12104 8.3125 2.17691 8.21767 2.24022V2.90503C8.45474 2.70205 8.70474 2.60056 8.96767 2.60056C9.22917 2.60056 9.35991 2.75698 9.35991 3.06983L8.76078 3.17318C8.25359 3.25885 8 3.57914 8 4.13408C8 4.39665 8.06106 4.60708 8.18319 4.76536C8.30675 4.92179 8.47557 5 8.68966 5C8.97989 5 9.19899 4.83985 9.34698 4.51955H9.3556V4.93017ZM9.35991 3.57542V3.76816C9.35991 3.9432 9.31968 4.08845 9.23922 4.20391C9.15876 4.3175 9.0546 4.3743 8.92672 4.3743C8.83477 4.3743 8.76149 4.34264 8.7069 4.27933C8.65374 4.21415 8.62716 4.13128 8.62716 4.03073C8.62716 3.80912 8.73779 3.6797 8.95905 3.64246L9.35991 3.57542ZM7 12.9302H6.3556V12.5196H6.34698C6.19899 12.8399 5.97989 13 5.68966 13C5.47557 13 5.30675 12.9218 5.18319 12.7654C5.06106 12.6071 5 12.3966 5 12.1341C5 11.5791 5.25359 11.2588 5.76078 11.1732L6.35991 11.0698C6.35991 10.757 6.22917 10.6006 5.96767 10.6006C5.70474 10.6006 5.45474 10.702 5.21767 10.905V10.2402C5.3125 10.1769 5.44181 10.121 5.6056 10.0726C5.77083 10.0242 5.92098 10 6.05603 10C6.68534 10 7 10.4069 7 11.2207V12.9302ZM6.35991 11.7682V11.5754L5.95905 11.6425C5.73779 11.6797 5.62716 11.8091 5.62716 12.0307C5.62716 12.1313 5.65374 12.2142 5.7069 12.2793C5.76149 12.3426 5.83477 12.3743 5.92672 12.3743C6.0546 12.3743 6.15876 12.3175 6.23922 12.2039C6.31968 12.0885 6.35991 11.9432 6.35991 11.7682ZM9.26165 13C9.58343 13 9.82955 12.9423 10 12.8268V12.1173C9.81999 12.2551 9.636 12.324 9.44803 12.324C9.23616 12.324 9.06969 12.2523 8.94863 12.1089C8.82756 11.9637 8.76702 11.7644 8.76702 11.5112C8.76702 11.2505 8.82995 11.0466 8.95579 10.8994C9.08323 10.7505 9.25528 10.676 9.47192 10.676C9.66627 10.676 9.84229 10.7449 10 10.8827V10.1341C9.87097 10.0447 9.66229 10 9.37395 10C8.95659 10 8.62286 10.1406 8.37276 10.4218C8.12425 10.7011 8 11.0838 8 11.5698C8 11.9907 8.11629 12.3343 8.34887 12.6006C8.58144 12.8669 8.8857 13 9.26165 13ZM2 9L3 8H12L13 9V14L12 15H3L2 14V9ZM3 9V14H12V9H3ZM6 7L7 6H14L15 7V12L14 13V12V7H7H6Z" fill="#656565"/>',
105
- '</svg></button>',
106
- '</div>',
107
- '<div class="ace_search_options">',
108
- '<span action="toggleReplace" class="ace_button replace_toggle">+</span>',
109
- '<span class="ace_search_counter">0 matches found.</span>',
110
- '<span action="toggleRegexpMode" title="RegExp Search"></span>',
111
- '<span action="toggleCaseSensitive" class="ace_button" title="CaseSensitive Search">Aa</span>',
112
- '<span action="toggleWholeWords" title="Whole Word Search"></span>',
113
- '</div>',
114
- '</div>',
115
- ].join('');
116
-
117
- div.innerHTML = html;
118
-
119
- const elSearch = div.firstChild;
120
-
121
- el.appendChild(elSearch);
122
-
123
- return elSearch;
124
- }
125
-
126
- addStyle() {
127
- const style = document.createElement('style');
128
- const css = [
129
- '.ace_search {',
130
- 'color: black;',
131
- 'background-color: #ddd;',
132
- 'border: 1px solid #cbcbcb;',
133
- 'border-top: 0 none;',
134
- 'max-width: 325px;',
135
- 'overflow: hidden;',
136
- 'margin: 0;',
137
- 'padding: 4px;',
138
- 'padding-right: 6px;',
139
- 'padding-bottom: 0;',
140
- 'position: absolute;',
141
- 'top: 0px;',
142
- 'z-index: 99;',
143
- 'white-space: normal;',
144
- 'font-size: 12px;',
145
- '}',
146
- '.ace_search.left {',
147
- 'border-left: 0 none;',
148
- 'border-radius: 0px 0px 5px 0px;',
149
- 'left: 0;',
150
- '}',
151
- '.ace_search.right {',
152
- 'border-radius: 0px 0px 0px 5px;',
153
- 'border-right: 0 none;',
154
- 'right: 0;',
155
- '}',
156
- '.ace_search_form, .ace_replace_form {',
157
- 'border-radius: 3px;',
158
- 'border: 1px solid #cbcbcb;',
159
- 'float: left;',
160
- 'margin-bottom: 4px;',
161
- 'overflow: hidden;',
162
- '}',
163
- '.ace_search_form.ace_nomatch {',
164
- 'outline: 1px solid red;',
165
- '}',
166
- '.ace_search_field {',
167
- 'background-color: white;',
168
- 'border-right: 1px solid #cbcbcb;',
169
- 'border: 0 none;',
170
- '-webkit-box-sizing: border-box;',
171
- '-moz-box-sizing: border-box;',
172
- 'box-sizing: border-box;',
173
- 'float: left;',
174
- 'height: 22px;',
175
- 'outline: 0;',
176
- 'padding: 0 7px;',
177
- 'width: 238px;',
178
- 'margin: 0;',
179
- '}',
180
- '.ace_searchbtn,',
181
- '.ace_replacebtn {',
182
- 'background: #fff;',
183
- 'border: 0 none;',
184
- 'border-left: 1px solid #dcdcdc;',
185
- 'cursor: pointer;',
186
- 'float: left;',
187
- 'height: 22px;',
188
- 'padding: 0 5px;',
189
- 'margin: 0;',
190
- 'position: relative;',
191
- '}',
192
- '.ace_searchbtn:last-child,',
193
- '.ace_replacebtn:last-child {',
194
- 'border-top-right-radius: 3px;',
195
- 'border-bottom-right-radius: 3px;',
196
- '}',
197
- '.ace_searchbtn:disabled {',
198
- 'background: none;',
199
- 'cursor: default;',
200
- '}',
201
- '.ace_searchbtn {',
202
- 'background-position: 50% 50%;',
203
- 'background-repeat: no-repeat;',
204
- 'width: 27px;',
205
- '}',
206
- '.ace_searchbtn.prev {',
207
- 'background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAYAAAB4ka1VAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADFJREFUeNpiSU1NZUAC/6E0I0yACYskCpsJiySKIiY0SUZk40FyTEgCjGgKwTRAgAEAQJUIPCE+qfkAAAAASUVORK5CYII=); ',
208
- '}',
209
- '.ace_searchbtn.next {',
210
- 'background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAYAAAB4ka1VAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADRJREFUeNpiTE1NZQCC/0DMyIAKwGJMUAYDEo3M/s+EpvM/mkKwCQxYjIeLMaELoLMBAgwAU7UJObTKsvAAAAAASUVORK5CYII=); ',
211
- '}',
212
- '.ace_searchbtn_close {',
213
- 'background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAcCAYAAABRVo5BAAAAZ0lEQVR42u2SUQrAMAhDvazn8OjZBilCkYVVxiis8H4CT0VrAJb4WHT3C5xU2a2IQZXJjiQIRMdkEoJ5Q2yMqpfDIo+XY4k6h+YXOyKqTIj5REaxloNAd0xiKmAtsTHqW8sR2W5f7gCu5nWFUpVjZwAAAABJRU5ErkJggg==) no-repeat 50% 0;',
214
- 'border-radius: 50%;',
215
- 'border: 0 none;',
216
- 'color: #656565;',
217
- 'cursor: pointer;',
218
- 'float: right;',
219
- 'font: 16px/16px Arial;',
220
- 'height: 14px;',
221
- 'margin: 5px 1px 9px 5px;',
222
- 'padding: 0;',
223
- 'text-align: center;',
224
- 'width: 14px;',
225
- '}',
226
- '.ace_searchbtn_close:hover {',
227
- 'background-color: #656565;',
228
- 'background-position: 50% 100%;',
229
- 'color: white;',
230
- '}',
231
- '.ace_replacebtn.prev {',
232
- 'width: 54px',
233
- '}',
234
- '.ace_replacebtn.next {',
235
- 'width: 27px',
236
- '}',
237
- '.ace_button {',
238
- 'margin-left: 2px;',
239
- 'cursor: pointer;',
240
- '-webkit-user-select: none;',
241
- '-moz-user-select: none;',
242
- '-o-user-select: none;',
243
- '-ms-user-select: none;',
244
- 'user-select: none;',
245
- 'overflow: hidden;',
246
- 'opacity: 0.7;',
247
- 'border: 1px solid rgba(100,100,100,0.23);',
248
- 'padding: 1px;',
249
- '-moz-box-sizing: border-box;',
250
- 'box-sizing: border-box;',
251
- 'color: black;',
252
- '}',
253
- '.ace_button:hover {',
254
- 'background-color: #eee;',
255
- 'opacity:1;',
256
- '}',
257
- '.ace_button:active {',
258
- 'background-color: #ddd;',
259
- '}',
260
- '.ace_button.checked {',
261
- 'border-color: #3399ff;',
262
- 'opacity:1;',
263
- '}',
264
- '.ace_search_options{',
265
- 'clear: both;',
266
- 'margin: 4px 0;',
267
- 'text-align: right;',
268
- '-webkit-user-select: none;',
269
- '-moz-user-select: none;',
270
- '-o-user-select: none;',
271
- '-ms-user-select: none;',
272
- 'user-select: none;',
273
- '}',
274
- '.replace_toggle{',
275
- 'float: left;',
276
- 'margin-top: -2px;',
277
- 'padding: 0 5px;',
278
- ' }',
279
- '.ace_search_counter{',
280
- 'float: left;',
281
- 'font-family: arial;',
282
- 'padding: 0 8px;',
283
- '}',
284
- 'button svg,path {',
285
- 'pointer-events: none;',
286
- '}',
287
- ].join('');
288
-
289
- style.setAttribute('data-name', 'js-searchbox');
290
-
291
- style.textContent = css;
292
-
293
- document.head.appendChild(style);
294
- }
295
-
296
- initElements(el) {
297
- this.searchBox = el.querySelector('.ace_search_form');
298
- this.replaceBox = el.querySelector('.ace_replace_form');
299
- this.searchOptions = el.querySelector('.ace_search_options');
300
-
301
- this.regExpOption = el.querySelector('[action=toggleRegexpMode]');
302
- this.caseSensitiveOption = el.querySelector('[action=toggleCaseSensitive]');
303
- this.wholeWordOption = el.querySelector('[action=toggleWholeWords]');
304
-
305
- this.searchInput = this.searchBox.querySelector('.ace_search_field');
306
- this.replaceInput = this.replaceBox.querySelector('.ace_search_field');
307
- }
308
-
309
- bindKeys() {
310
- const sb = this;
311
- const obj = {
312
- 'Ctrl-F|Cmd-F|Ctrl-H|Command-Alt-F'() {
313
- sb.isReplace = !sb.isReplace;
314
- const { isReplace } = sb;
315
- sb.replaceBox.style.display = isReplace ? '' : 'none';
316
- sb[isReplace ? 'replaceInput' : 'searchInput'].focus();
317
- },
318
- 'Ctrl-G|Cmd-G'() {
319
- sb.findNext();
320
- },
321
- 'Ctrl-Shift-G|Cmd-Shift-G'() {
322
- sb.findPrev();
323
- },
324
- Esc() {
325
- setTimeout(() => {
326
- sb.hide();
327
- });
328
- },
329
- Enter() {
330
- if (sb.activeInput === sb.replaceInput) sb.replace();
331
- sb.findNext();
332
- },
333
- 'Shift-Enter'() {
334
- if (sb.activeInput === sb.replaceInput) sb.replace();
335
- sb.findPrev();
336
- },
337
- 'Alt-Enter'() {
338
- if (sb.activeInput === sb.replaceInput) sb.replaceAll();
339
- sb.findAll();
340
- },
341
- Tab() {
342
- if (this.activeInput === this.replaceInput) this.searchInput.focus();
343
- else this.replaceInput.focus();
344
- },
345
- };
346
-
347
- this.element.addEventListener('keydown', (event) => {
348
- Object.keys(obj).some((name) => {
349
- const is = key(name, event);
350
-
351
- if (is) {
352
- event.stopPropagation();
353
- event.preventDefault();
354
- obj[name](event);
355
- }
356
-
357
- return is;
358
- });
359
- });
360
- }
361
-
362
- $syncOptions() {
363
- setCssClass(this.regExpOption, 'checked', this.regExpOption.checked);
364
- setCssClass(this.wholeWordOption, 'checked', this.wholeWordOption.checked);
365
- setCssClass(this.caseSensitiveOption, 'checked', this.caseSensitiveOption.checked);
366
-
367
- this.find(false, false);
368
- }
369
-
370
- find(skipCurrent, backwards) {
371
- const { value } = this.searchInput;
372
- const options = {
373
- skipCurrent,
374
- backwards,
375
- regExp: this.regExpOption.checked,
376
- caseSensitive: this.caseSensitiveOption.checked,
377
- wholeWord: this.wholeWordOption.checked,
378
- };
379
-
380
- this.$find(value, options, (searchCursor) => {
381
- const current = searchCursor.matches(false, searchCursor.from());
382
- this.cm.setSelection(current.from, current.to);
383
- });
384
- }
385
-
386
- $find(value, options, callback) {
387
- const { cm } = this;
388
- if (!value) {
389
- this.clearSearch(cm);
390
- this.updateCount();
391
- return;
392
- }
393
- let done;
394
- let next;
395
- let prev;
396
- let position;
397
- let val = value;
398
- const o = options;
399
- let is = true;
400
- const { caseSensitive } = o;
401
- const { regExp } = o;
402
- const { wholeWord } = o;
403
-
404
- if (regExp) {
405
- // eslint-disable-next-line no-useless-escape
406
- val = val.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, '\\$&');
407
- }
408
- if (wholeWord) {
409
- if (caseSensitive) {
410
- val = RegExp(`\\b${val}\\b`);
411
- } else {
412
- val = RegExp(`\\b${val}\\b`, 'i');
413
- }
414
- }
415
- if (regExp) {
416
- val = RegExp(val);
417
- }
418
- this.clearSearch(cm);
419
- this.doSearch(cm, val, caseSensitive);
420
- this.updateCount();
421
- if (o.backwards) position = o.skipCurrent ? 'from' : 'to';
422
- else position = o.skipCurrent ? 'to' : 'from';
423
-
424
- const cursor = cm.getCursor(position);
425
- const searchCursor = cm.getSearchCursor(val, cursor, !caseSensitive);
426
-
427
- (next = searchCursor.findNext.bind(searchCursor)), (prev = searchCursor.findPrevious.bind(searchCursor));
428
-
429
- if (o.backwards && !prev()) {
430
- is = next();
431
-
432
- if (is) {
433
- cm.setCursor(cm.doc.size - 1, 0);
434
- this.$find(value, options, callback);
435
- done = true;
436
- }
437
- } else if (!o.backwards && !next()) {
438
- is = prev();
439
-
440
- if (is) {
441
- cm.setCursor(0, 0);
442
- this.$find(value, options, callback);
443
- done = true;
444
- }
445
- }
446
-
447
- const noMatch = !is && this.searchInput.value;
448
- setCssClass(this.searchBox, 'ace_nomatch', noMatch);
449
-
450
- if (!done && is) callback(searchCursor);
451
- }
452
-
453
- findNext() {
454
- this.find(true, false);
455
- }
456
-
457
- findPrev() {
458
- this.find(true, true);
459
- }
460
-
461
- findAll() {
462
- const { cm } = this;
463
- const { value } = this.searchInput;
464
- let range;
465
- const noMatch = !range && this.searchInput.value;
466
-
467
- setCssClass(this.searchBox, 'ace_nomatch', noMatch);
468
-
469
- if (cm.showMatchesOnScrollbar) cm.showMatchesOnScrollbar(value);
470
-
471
- this.hide();
472
- }
473
-
474
- replace() {
475
- const { cm } = this;
476
- const readOnly = cm.getOption('readOnly');
477
- const isSelection = !!cm.getSelection();
478
- if (!readOnly && isSelection) cm.replaceSelection(this.replaceInput.value, 'start');
479
- this.updateCount();
480
- }
481
-
482
- replaceAndFindNext() {
483
- const { cm } = this;
484
- const readOnly = cm.getOption('readOnly');
485
-
486
- if (!readOnly) {
487
- this.replace();
488
- this.findNext();
489
- }
490
- }
491
-
492
- replaceAll() {
493
- let value;
494
- let cursor;
495
- const { cm } = this;
496
- const from = this.searchInput.value;
497
- const to = this.replaceInput.value;
498
- let reg = RegExp(from, this.caseSensitiveOption.checked ? 'g' : 'gi');
499
-
500
- if (this.wholeWordOption.checked && !this.regExpOption.checked) {
501
- if (this.caseSensitiveOption.checked) {
502
- reg = RegExp(`\\b${from}\\b`, 'g');
503
- } else {
504
- reg = RegExp(`\\b${from}\\b`, 'gi');
505
- }
506
- }
507
-
508
- if (!cm.getOption('readOnly') && cm.getSelection()) {
509
- cursor = cm.getCursor();
510
- value = cm.getValue();
511
- value = value.replace(reg, to);
512
-
513
- cm.setValue(value);
514
- cm.setCursor(cursor);
515
- }
516
- this.updateCount();
517
- }
518
-
519
- toggleReplace() {
520
- const { cm } = this;
521
- const cmEle = cm.display.wrapper;
522
- if (cmEle.parentElement.querySelector('[action=toggleReplace]').innerText === '+') {
523
- cmEle.parentElement.querySelector('[action=toggleReplace]').innerText = '-';
524
- this.replaceBox.style.display = '';
525
- this.isReplace = true;
526
- } else {
527
- cmEle.parentElement.querySelector('[action=toggleReplace]').innerText = '+';
528
- this.replaceBox.style.display = 'none';
529
- this.isReplace = false;
530
- }
531
- }
532
-
533
- hide() {
534
- const { cm } = this;
535
- this.clearSearch(cm);
536
- // @ts-ignore
537
- this.element.style.display = 'none';
538
- cm.focus();
539
- }
540
-
541
- isVisible() {
542
- // @ts-ignore
543
- return this.element.style.display !== 'none';
544
- }
545
-
546
- show(value, isReplace) {
547
- // @ts-ignore
548
- this.element.style.display = '';
549
- this.replaceBox.style.display = isReplace ? '' : 'none';
550
- this.isReplace = isReplace;
551
- if (value) {
552
- this.searchInput.value = value;
553
- this.find(false, false);
554
- }
555
- this.searchInput.focus();
556
- this.searchInput.select();
557
- }
558
-
559
- isFocused() {
560
- const el = document.activeElement;
561
- return el === this.searchInput || el === this.replaceInput;
562
- }
563
-
564
- doSearch(cm, value, caseSensitive) {
565
- const state = this.getSearchState(cm);
566
- const query = value;
567
- if (query && query !== state.queryText) {
568
- this.startSearch(cm, state, query, caseSensitive);
569
- state.posFrom = cm.getCursor();
570
- state.posTo = state.posFrom;
571
- }
572
- }
573
-
574
- parseString(string) {
575
- return string.replace(/\\([nrt\\])/g, function (match, ch) {
576
- if (ch === 'n') return '\n';
577
- if (ch === 'r') return '\r';
578
- if (ch === 't') return '\t';
579
- if (ch === '\\') return '\\';
580
- return match;
581
- });
582
- }
583
-
584
- parseQuery(query) {
585
- const reStr = typeof query === 'object' ? query.toString() : query;
586
- const isRE = reStr.match(/^\/(.*)\/([a-z]*)$/);
587
- let $query = query;
588
- if (isRE) {
589
- try {
590
- $query = new RegExp(isRE[1], isRE[2].indexOf('i') === -1 ? '' : 'i');
591
- } catch (e) {} // Not a regular expression after all, do a string search
592
- } else {
593
- $query = this.parseString(query);
594
- }
595
- if (typeof $query === 'string' ? $query === '' : $query.test('')) $query = /x^/;
596
- return $query;
597
- }
598
-
599
- startSearch(cm, state, query, caseSensitive) {
600
- state.queryText = query;
601
- state.query = this.parseQuery(query);
602
- cm.removeOverlay(state.overlay, this.queryCaseInsensitive(state.query, caseSensitive));
603
- state.overlay = this.searchOverlay(state.query, this.queryCaseInsensitive(state.query, caseSensitive));
604
- cm.addOverlay(state.overlay);
605
- if (cm.showMatchesOnScrollbar) {
606
- if (state.annotate) {
607
- state.annotate.clear();
608
- state.annotate = null;
609
- }
610
- state.annotate = cm.showMatchesOnScrollbar(state.query, this.queryCaseInsensitive(state.query, caseSensitive));
611
- }
612
- }
613
-
614
- queryCaseInsensitive(query, caseSensitive) {
615
- return typeof query === 'string' && !caseSensitive;
616
- }
617
-
618
- searchOverlay(query, caseInsensitive) {
619
- let $query = query;
620
- if (typeof query === 'string')
621
- // eslint-disable-next-line no-useless-escape
622
- $query = new RegExp(query.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, '\\$&'), caseInsensitive ? 'gi' : 'g');
623
- else if (!query.global) $query = new RegExp(query.source, query.ignoreCase ? 'gi' : 'g');
624
-
625
- return {
626
- token(stream) {
627
- $query.lastIndex = stream.pos;
628
- const match = $query.exec(stream.string);
629
- if (match && match.index === stream.pos) {
630
- stream.pos += match[0].length || 1;
631
- return 'searching';
632
- }
633
- if (match) {
634
- stream.pos = match.index;
635
- } else {
636
- stream.skipToEnd();
637
- }
638
- },
639
- };
640
- }
641
-
642
- getSearchState(cm) {
643
- return (
644
- cm.state.search ||
645
- (cm.state.search = {
646
- posFrom: null,
647
- posTo: null,
648
- lastQuery: null,
649
- query: null,
650
- overlay: null,
651
- })
652
- );
653
- }
654
-
655
- clearSearch(cm) {
656
- cm.operation(() => {
657
- const state = this.getSearchState(cm);
658
- state.lastQuery = state.query;
659
- if (!state.query) return;
660
- state.query = null;
661
- state.queryText = null;
662
- cm.removeOverlay(state.overlay);
663
- if (state.annotate) {
664
- state.annotate.clear();
665
- state.annotate = null;
666
- }
667
- });
668
- }
669
-
670
- updateCount() {
671
- const { cm } = this;
672
- let val = this.searchInput.value;
673
- let matches = [];
674
- if (val) {
675
- // eslint-disable-next-line no-useless-escape
676
- val = val.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, '\\$&');
677
- let reg;
678
- if (this.caseSensitiveOption.checked) {
679
- reg = RegExp(val, 'g');
680
- } else {
681
- reg = RegExp(val, 'gi');
682
- }
683
- if (this.wholeWordOption.checked) {
684
- if (this.caseSensitiveOption.checked) {
685
- reg = RegExp(`\\b${val}\\b`, 'g');
686
- } else {
687
- reg = RegExp(`\\b${val}\\b`, 'gi');
688
- }
689
- }
690
- if (this.regExpOption.checked) {
691
- reg = RegExp(val, 'gi');
692
- }
693
- matches = cm.getValue().match(reg);
694
- }
695
- const count = matches ? matches.length : 0;
696
- const cmEle = cm.display.wrapper;
697
- const countEle = cmEle.parentElement.querySelector('.ace_search_counter');
698
- if (countEle) {
699
- countEle.innerText = `${count} matches found.`;
700
- }
701
- if (count === 0) {
702
- cm.setSelection({ ch: 0, line: 0 }, { ch: 0, line: 0 });
703
- }
704
- }
705
- }
706
-
707
- function setCssClass(el, className, condition) {
708
- const list = el.classList;
709
-
710
- list[condition ? 'add' : 'remove'](className);
711
- }
712
-
713
- /* https://github.com/coderaiser/key */
714
- function key(str, event) {
715
- const KEY = {
716
- BACKSPACE: 8,
717
- TAB: 9,
718
- ENTER: 13,
719
- ESC: 27,
720
-
721
- SPACE: 32,
722
- PAGE_UP: 33,
723
- PAGE_DOWN: 34,
724
- END: 35,
725
- HOME: 36,
726
- UP: 38,
727
- DOWN: 40,
728
-
729
- INSERT: 45,
730
- DELETE: 46,
731
-
732
- INSERT_MAC: 96,
733
-
734
- ASTERISK: 106,
735
- PLUS: 107,
736
- MINUS: 109,
737
-
738
- F1: 112,
739
- F2: 113,
740
- F3: 114,
741
- F4: 115,
742
- F5: 116,
743
- F6: 117,
744
- F7: 118,
745
- F8: 119,
746
- F9: 120,
747
- F10: 121,
748
-
749
- SLASH: 191,
750
- TRA: 192 /* Typewritten Reverse Apostrophe (`) */,
751
- BACKSLASH: 220,
752
- };
753
-
754
- const right = str.split('|').some(function (combination) {
755
- const wrong = combination.split('-').some(function (key) {
756
- let right;
757
-
758
- switch (key) {
759
- case 'Ctrl':
760
- right = event.ctrlKey;
761
- break;
762
-
763
- case 'Shift':
764
- right = event.shiftKey;
765
- break;
766
-
767
- case 'Alt':
768
- right = event.altKey;
769
- break;
770
-
771
- case 'Cmd':
772
- right = event.metaKey;
773
- break;
774
-
775
- default:
776
- if (key.length === 1) right = event.keyCode === key.charCodeAt(0);
777
- else
778
- Object.keys(KEY).some(function (name) {
779
- const up = key.toUpperCase();
780
-
781
- if (up === name) right = event.keyCode === KEY[name];
782
- return name;
783
- });
784
- break;
785
- }
786
-
787
- return !right;
788
- });
789
-
790
- return !wrong;
791
- });
792
-
793
- return right;
794
- }