editable.ts 0.0.1

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 (153) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +571 -0
  3. package/dist/editable.umd.cjs +2 -0
  4. package/dist/editable.umd.cjs.map +1 -0
  5. package/lib/block.d.ts +13 -0
  6. package/lib/block.d.ts.map +1 -0
  7. package/lib/block.js +58 -0
  8. package/lib/block.js.map +1 -0
  9. package/lib/clipboard.d.ts +22 -0
  10. package/lib/clipboard.d.ts.map +1 -0
  11. package/lib/clipboard.js +154 -0
  12. package/lib/clipboard.js.map +1 -0
  13. package/lib/config.d.ts +37 -0
  14. package/lib/config.d.ts.map +1 -0
  15. package/lib/config.js +64 -0
  16. package/lib/config.js.map +1 -0
  17. package/lib/content.d.ts +37 -0
  18. package/lib/content.d.ts.map +1 -0
  19. package/lib/content.js +526 -0
  20. package/lib/content.js.map +1 -0
  21. package/lib/core.d.ts +97 -0
  22. package/lib/core.d.ts.map +1 -0
  23. package/lib/core.js +261 -0
  24. package/lib/core.js.map +1 -0
  25. package/lib/create-default-behavior.d.ts +31 -0
  26. package/lib/create-default-behavior.d.ts.map +1 -0
  27. package/lib/create-default-behavior.js +178 -0
  28. package/lib/create-default-behavior.js.map +1 -0
  29. package/lib/create-default-events.d.ts +152 -0
  30. package/lib/create-default-events.d.ts.map +1 -0
  31. package/lib/create-default-events.js +183 -0
  32. package/lib/create-default-events.js.map +1 -0
  33. package/lib/cursor.d.ts +68 -0
  34. package/lib/cursor.d.ts.map +1 -0
  35. package/lib/cursor.js +354 -0
  36. package/lib/cursor.js.map +1 -0
  37. package/lib/dispatcher.d.ts +78 -0
  38. package/lib/dispatcher.d.ts.map +1 -0
  39. package/lib/dispatcher.js +416 -0
  40. package/lib/dispatcher.js.map +1 -0
  41. package/lib/eventable.d.ts +2 -0
  42. package/lib/eventable.d.ts.map +1 -0
  43. package/lib/eventable.js +104 -0
  44. package/lib/eventable.js.map +1 -0
  45. package/lib/feature-detection.d.ts +12 -0
  46. package/lib/feature-detection.d.ts.map +1 -0
  47. package/lib/feature-detection.js +42 -0
  48. package/lib/feature-detection.js.map +1 -0
  49. package/lib/highlight-support.d.ts +24 -0
  50. package/lib/highlight-support.d.ts.map +1 -0
  51. package/lib/highlight-support.js +172 -0
  52. package/lib/highlight-support.js.map +1 -0
  53. package/lib/highlight-text.d.ts +21 -0
  54. package/lib/highlight-text.d.ts.map +1 -0
  55. package/lib/highlight-text.js +147 -0
  56. package/lib/highlight-text.js.map +1 -0
  57. package/lib/keyboard.d.ts +33 -0
  58. package/lib/keyboard.d.ts.map +1 -0
  59. package/lib/keyboard.js +189 -0
  60. package/lib/keyboard.js.map +1 -0
  61. package/lib/monitored-highlighting.d.ts +28 -0
  62. package/lib/monitored-highlighting.d.ts.map +1 -0
  63. package/lib/monitored-highlighting.js +194 -0
  64. package/lib/monitored-highlighting.js.map +1 -0
  65. package/lib/node-iterator.d.ts +16 -0
  66. package/lib/node-iterator.d.ts.map +1 -0
  67. package/lib/node-iterator.js +97 -0
  68. package/lib/node-iterator.js.map +1 -0
  69. package/lib/node-type.d.ts +13 -0
  70. package/lib/node-type.d.ts.map +1 -0
  71. package/lib/node-type.js +15 -0
  72. package/lib/node-type.js.map +1 -0
  73. package/lib/parser.d.ts +89 -0
  74. package/lib/parser.d.ts.map +1 -0
  75. package/lib/parser.js +251 -0
  76. package/lib/parser.js.map +1 -0
  77. package/lib/plugins/highlighting/match-collection.d.ts +7 -0
  78. package/lib/plugins/highlighting/match-collection.d.ts.map +1 -0
  79. package/lib/plugins/highlighting/match-collection.js +62 -0
  80. package/lib/plugins/highlighting/match-collection.js.map +1 -0
  81. package/lib/plugins/highlighting/spellcheck-service.d.ts +12 -0
  82. package/lib/plugins/highlighting/spellcheck-service.d.ts.map +1 -0
  83. package/lib/plugins/highlighting/spellcheck-service.js +24 -0
  84. package/lib/plugins/highlighting/spellcheck-service.js.map +1 -0
  85. package/lib/plugins/highlighting/text-search.d.ts +10 -0
  86. package/lib/plugins/highlighting/text-search.d.ts.map +1 -0
  87. package/lib/plugins/highlighting/text-search.js +92 -0
  88. package/lib/plugins/highlighting/text-search.js.map +1 -0
  89. package/lib/plugins/highlighting/whitespace-highlighting.d.ts +14 -0
  90. package/lib/plugins/highlighting/whitespace-highlighting.d.ts.map +1 -0
  91. package/lib/plugins/highlighting/whitespace-highlighting.js +52 -0
  92. package/lib/plugins/highlighting/whitespace-highlighting.js.map +1 -0
  93. package/lib/quotes.d.ts +8 -0
  94. package/lib/quotes.d.ts.map +1 -0
  95. package/lib/quotes.js +170 -0
  96. package/lib/quotes.js.map +1 -0
  97. package/lib/range-container.d.ts +22 -0
  98. package/lib/range-container.d.ts.map +1 -0
  99. package/lib/range-container.js +52 -0
  100. package/lib/range-container.js.map +1 -0
  101. package/lib/range-save-restore.d.ts +13 -0
  102. package/lib/range-save-restore.d.ts.map +1 -0
  103. package/lib/range-save-restore.js +153 -0
  104. package/lib/range-save-restore.js.map +1 -0
  105. package/lib/selection-watcher.d.ts +55 -0
  106. package/lib/selection-watcher.d.ts.map +1 -0
  107. package/lib/selection-watcher.js +126 -0
  108. package/lib/selection-watcher.js.map +1 -0
  109. package/lib/selection.d.ts +74 -0
  110. package/lib/selection.d.ts.map +1 -0
  111. package/lib/selection.js +341 -0
  112. package/lib/selection.js.map +1 -0
  113. package/lib/smartQuotes.d.ts +16 -0
  114. package/lib/smartQuotes.d.ts.map +1 -0
  115. package/lib/smartQuotes.js +92 -0
  116. package/lib/smartQuotes.js.map +1 -0
  117. package/lib/util/binary_search.d.ts +23 -0
  118. package/lib/util/binary_search.d.ts.map +1 -0
  119. package/lib/util/binary_search.js +137 -0
  120. package/lib/util/binary_search.js.map +1 -0
  121. package/lib/util/clone-deep.d.ts +8 -0
  122. package/lib/util/clone-deep.d.ts.map +1 -0
  123. package/lib/util/clone-deep.js +10 -0
  124. package/lib/util/clone-deep.js.map +1 -0
  125. package/lib/util/dom.d.ts +43 -0
  126. package/lib/util/dom.d.ts.map +1 -0
  127. package/lib/util/dom.js +272 -0
  128. package/lib/util/dom.js.map +1 -0
  129. package/lib/util/element.d.ts +10 -0
  130. package/lib/util/element.d.ts.map +1 -0
  131. package/lib/util/element.js +29 -0
  132. package/lib/util/element.js.map +1 -0
  133. package/lib/util/error.d.ts +2 -0
  134. package/lib/util/error.d.ts.map +1 -0
  135. package/lib/util/error.js +16 -0
  136. package/lib/util/error.js.map +1 -0
  137. package/lib/util/log.d.ts +2 -0
  138. package/lib/util/log.d.ts.map +1 -0
  139. package/lib/util/log.js +18 -0
  140. package/lib/util/log.js.map +1 -0
  141. package/lib/util/merge.d.ts +6 -0
  142. package/lib/util/merge.d.ts.map +1 -0
  143. package/lib/util/merge.js +31 -0
  144. package/lib/util/merge.js.map +1 -0
  145. package/lib/util/string.d.ts +25 -0
  146. package/lib/util/string.d.ts.map +1 -0
  147. package/lib/util/string.js +68 -0
  148. package/lib/util/string.js.map +1 -0
  149. package/lib/util/viewport.d.ts +6 -0
  150. package/lib/util/viewport.d.ts.map +1 -0
  151. package/lib/util/viewport.js +8 -0
  152. package/lib/util/viewport.js.map +1 -0
  153. package/package.json +86 -0
@@ -0,0 +1,89 @@
1
+ /**
2
+ * The parser module provides helper methods to parse html-chunks
3
+ * manipulations and helpers for common tasks.
4
+ * Provides DOM lookup helpers
5
+ *
6
+ * @module core
7
+ * @submodule parser
8
+ */
9
+ /**
10
+ * Get the editableJS host block of a node.
11
+ *
12
+ * @method getHost
13
+ * @param {DOM Node}
14
+ * @return {DOM Node}
15
+ */
16
+ export declare function getHost(node: Node | any): HTMLElement | null;
17
+ /**
18
+ * Get the index of a node so that
19
+ * parent.childNodes[ getNodeIndex(node) ] would return the node again.
20
+ *
21
+ * @method getNodeIndex
22
+ * @param {HTMLElement}
23
+ */
24
+ export declare function getNodeIndex(node: Node): number;
25
+ /**
26
+ * Check if node contains text or element nodes
27
+ * whitespace counts too!
28
+ *
29
+ * @method isVoid
30
+ * @param {HTMLElement}
31
+ */
32
+ export declare function isVoid(node: Node): boolean;
33
+ /**
34
+ * Check if node is a text node and completely empty without any whitespace
35
+ *
36
+ * @method isVoidTextNode
37
+ * @param {HTMLElement}
38
+ */
39
+ export declare function isVoidTextNode(node: Node): boolean;
40
+ /**
41
+ * Check if node is a text node and contains nothing but whitespace
42
+ *
43
+ * @method isWhitespaceOnly
44
+ * @param {HTMLElement}
45
+ */
46
+ export declare function isWhitespaceOnly(node: Node): boolean;
47
+ export declare function isLinebreak(node: Node): boolean;
48
+ /**
49
+ * Returns the last offset where the cursor can be positioned to
50
+ * be at the visible end of its container.
51
+ * Currently works only for empty text nodes (not empty tags)
52
+ *
53
+ * @method isWhitespaceOnly
54
+ * @param {HTMLElement}
55
+ */
56
+ export declare function lastOffsetWithContent(elem: Node): number;
57
+ export declare function isBeginningOfHost(host: Node, container: Node, offset: number): boolean;
58
+ export declare function isEndOfHost(host: Node, container: Node, offset: number): boolean;
59
+ export declare function isStartOffset(container: Node, offset: number): boolean;
60
+ export declare function isEndOffset(container: Node, offset: number): boolean;
61
+ export declare function isTextEndOfHost(host: Node, container: Node, offset: number): boolean;
62
+ export declare function isTextEndOffset(container: Node, offset: number): boolean;
63
+ export declare function isSameNode(target: Node, source: Node): boolean;
64
+ /**
65
+ * Return the deepest last child of a node.
66
+ *
67
+ * @method lastChild
68
+ * @param {HTMLElement} container The container to iterate on.
69
+ * @return {HTMLElement} The deepest last child in the container.
70
+ */
71
+ export declare function lastChild(container: Node): Node;
72
+ /**
73
+ * Obsolete version of {{#crossLink "lastChild"}}{{/crossLink}}.
74
+ */
75
+ export declare function latestChild(container: Node): Node;
76
+ /**
77
+ * Checks if a documentFragment has no children.
78
+ * Fragments without children can cause errors if inserted into ranges.
79
+ *
80
+ * @method isDocumentFragmentWithoutChildren
81
+ * @param {HTMLElement} DOM node.
82
+ * @return {Boolean}
83
+ */
84
+ export declare function isDocumentFragmentWithoutChildren(fragment: Node | null | undefined): boolean;
85
+ /**
86
+ * Determine if an element behaves like an inline element.
87
+ */
88
+ export declare function isInlineElement(window: Window, element: HTMLElement): boolean;
89
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AAKA;;;;;;;GAOG;AAEH;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAE,IAAI,EAAE,IAAI,GAAG,GAAG,GAAG,WAAW,GAAG,IAAI,CAU7D;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAE,IAAI,EAAE,IAAI,GAAG,MAAM,CAQhD;AAED;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAW3C;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAEnD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAErD;AAED,wBAAgB,WAAW,CAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAEhD;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAE,IAAI,EAAE,IAAI,GAAG,MAAM,CAezD;AAED,wBAAgB,iBAAiB,CAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAavF;AAED,wBAAgB,WAAW,CAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAajF;AAED,wBAAgB,aAAa,CAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAcvE;AAED,wBAAgB,WAAW,CAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAQrE;AAED,wBAAgB,eAAe,CAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAarF;AAED,wBAAgB,eAAe,CAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAWzE;AAED,wBAAgB,UAAU,CAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAG,OAAO,CAkB/D;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAE,SAAS,EAAE,IAAI,GAAG,IAAI,CAIhD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAE,SAAS,EAAE,IAAI,GAAG,IAAI,CAGlD;AAED;;;;;;;GAOG;AACH,wBAAgB,iCAAiC,CAAE,QAAQ,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAI7F;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAU9E"}
package/lib/parser.js ADDED
@@ -0,0 +1,251 @@
1
+ import * as string from './util/string.js';
2
+ import * as nodeType from './node-type.js';
3
+ import config from './config.js';
4
+ import { closest } from './util/dom.js';
5
+ /**
6
+ * The parser module provides helper methods to parse html-chunks
7
+ * manipulations and helpers for common tasks.
8
+ * Provides DOM lookup helpers
9
+ *
10
+ * @module core
11
+ * @submodule parser
12
+ */
13
+ /**
14
+ * Get the editableJS host block of a node.
15
+ *
16
+ * @method getHost
17
+ * @param {DOM Node}
18
+ * @return {DOM Node}
19
+ */
20
+ export function getHost(node) {
21
+ node = (node.jquery ? node[0] : node);
22
+ // Check if the node itself is an editable element
23
+ if (node && node.classList && node.classList.contains(config.editableClass)) {
24
+ return node;
25
+ }
26
+ const result = closest(node, `.${config.editableClass}`);
27
+ if (result)
28
+ return result;
29
+ const contentEditableHost = closest(node, '[contenteditable="true"]');
30
+ return contentEditableHost || null;
31
+ }
32
+ /**
33
+ * Get the index of a node so that
34
+ * parent.childNodes[ getNodeIndex(node) ] would return the node again.
35
+ *
36
+ * @method getNodeIndex
37
+ * @param {HTMLElement}
38
+ */
39
+ export function getNodeIndex(node) {
40
+ let index = 0;
41
+ let currentNode = node.previousSibling;
42
+ while (currentNode !== null) {
43
+ index++;
44
+ currentNode = currentNode.previousSibling;
45
+ }
46
+ return index;
47
+ }
48
+ /**
49
+ * Check if node contains text or element nodes
50
+ * whitespace counts too!
51
+ *
52
+ * @method isVoid
53
+ * @param {HTMLElement}
54
+ */
55
+ export function isVoid(node) {
56
+ const childNodes = Array.from(node.childNodes);
57
+ for (const child of childNodes) {
58
+ if (child.nodeType === nodeType.textNode && !isVoidTextNode(child)) {
59
+ return false;
60
+ }
61
+ if (child.nodeType === nodeType.elementNode) {
62
+ return false;
63
+ }
64
+ }
65
+ return true;
66
+ }
67
+ /**
68
+ * Check if node is a text node and completely empty without any whitespace
69
+ *
70
+ * @method isVoidTextNode
71
+ * @param {HTMLElement}
72
+ */
73
+ export function isVoidTextNode(node) {
74
+ return node.nodeType === nodeType.textNode && !node.nodeValue;
75
+ }
76
+ /**
77
+ * Check if node is a text node and contains nothing but whitespace
78
+ *
79
+ * @method isWhitespaceOnly
80
+ * @param {HTMLElement}
81
+ */
82
+ export function isWhitespaceOnly(node) {
83
+ return node.nodeType === nodeType.textNode && lastOffsetWithContent(node) === 0;
84
+ }
85
+ export function isLinebreak(node) {
86
+ return node.nodeType === nodeType.elementNode && node.tagName === 'BR';
87
+ }
88
+ /**
89
+ * Returns the last offset where the cursor can be positioned to
90
+ * be at the visible end of its container.
91
+ * Currently works only for empty text nodes (not empty tags)
92
+ *
93
+ * @method isWhitespaceOnly
94
+ * @param {HTMLElement}
95
+ */
96
+ export function lastOffsetWithContent(elem) {
97
+ if (elem.nodeType === nodeType.textNode) {
98
+ const nodeValue = elem.nodeValue;
99
+ if (!nodeValue)
100
+ return 0;
101
+ return string.trimRight(nodeValue).length;
102
+ }
103
+ let lastOffset = 0;
104
+ Array.from(elem.childNodes).reverse().every((node, index, nodes) => {
105
+ if (isWhitespaceOnly(node) || isLinebreak(node))
106
+ return true;
107
+ lastOffset = nodes.length - index;
108
+ return false;
109
+ });
110
+ return lastOffset;
111
+ }
112
+ export function isBeginningOfHost(host, container, offset) {
113
+ if (container === host)
114
+ return isStartOffset(container, offset);
115
+ if (isStartOffset(container, offset)) {
116
+ // The index of the element simulates a range offset
117
+ // right before the element.
118
+ const offsetInParent = getNodeIndex(container);
119
+ const parentNode = container.parentNode;
120
+ if (!parentNode)
121
+ return false;
122
+ return isBeginningOfHost(host, parentNode, offsetInParent);
123
+ }
124
+ return false;
125
+ }
126
+ export function isEndOfHost(host, container, offset) {
127
+ if (container === host)
128
+ return isEndOffset(container, offset);
129
+ if (isEndOffset(container, offset)) {
130
+ // The index of the element plus one simulates a range offset
131
+ // right after the element.
132
+ const offsetInParent = getNodeIndex(container) + 1;
133
+ const parentNode = container.parentNode;
134
+ if (!parentNode)
135
+ return false;
136
+ return isEndOfHost(host, parentNode, offsetInParent);
137
+ }
138
+ return false;
139
+ }
140
+ export function isStartOffset(container, offset) {
141
+ if (container.nodeType === nodeType.textNode)
142
+ return offset === 0;
143
+ if (container.childNodes.length === 0)
144
+ return true;
145
+ const firstChild = container.firstChild;
146
+ if (container.childNodes.length === 1 &&
147
+ firstChild &&
148
+ firstChild.nodeType === nodeType.elementNode &&
149
+ firstChild.getAttribute('data-editable') === 'remove')
150
+ return true;
151
+ return container.childNodes[offset] === container.firstChild;
152
+ }
153
+ export function isEndOffset(container, offset) {
154
+ if (container.nodeType === nodeType.textNode)
155
+ return offset === container.length;
156
+ if (container.childNodes.length === 0)
157
+ return true;
158
+ if (offset > 0)
159
+ return container.childNodes[offset - 1] === container.lastChild;
160
+ return false;
161
+ }
162
+ export function isTextEndOfHost(host, container, offset) {
163
+ if (container === host)
164
+ return isTextEndOffset(container, offset);
165
+ if (isTextEndOffset(container, offset)) {
166
+ // The index of the element plus one simulates a range offset
167
+ // right after the element.
168
+ const offsetInParent = getNodeIndex(container) + 1;
169
+ const parentNode = container.parentNode;
170
+ if (!parentNode)
171
+ return false;
172
+ return isTextEndOfHost(host, parentNode, offsetInParent);
173
+ }
174
+ return false;
175
+ }
176
+ export function isTextEndOffset(container, offset) {
177
+ if (container.nodeType === nodeType.textNode) {
178
+ const nodeValue = container.nodeValue;
179
+ if (!nodeValue)
180
+ return offset === 0;
181
+ const text = string.trimRight(nodeValue);
182
+ return offset >= text.length;
183
+ }
184
+ if (container.childNodes.length === 0)
185
+ return true;
186
+ return offset >= lastOffsetWithContent(container);
187
+ }
188
+ export function isSameNode(target, source) {
189
+ let i, len, attr;
190
+ if (target.nodeType !== source.nodeType)
191
+ return false;
192
+ if (target.nodeName !== source.nodeName)
193
+ return false;
194
+ if (target.nodeType !== 1 || source.nodeType !== 1)
195
+ return true;
196
+ const targetElem = target;
197
+ const sourceElem = source;
198
+ for (i = 0, len = targetElem.attributes.length; i < len; i++) {
199
+ attr = targetElem.attributes[i];
200
+ if (sourceElem.getAttribute(attr.name) !== attr.value)
201
+ return false;
202
+ }
203
+ return true;
204
+ }
205
+ /**
206
+ * Return the deepest last child of a node.
207
+ *
208
+ * @method lastChild
209
+ * @param {HTMLElement} container The container to iterate on.
210
+ * @return {HTMLElement} The deepest last child in the container.
211
+ */
212
+ export function lastChild(container) {
213
+ return container.lastChild
214
+ ? lastChild(container.lastChild)
215
+ : container;
216
+ }
217
+ /**
218
+ * Obsolete version of {{#crossLink "lastChild"}}{{/crossLink}}.
219
+ */
220
+ export function latestChild(container) {
221
+ console.warn('Editable.js: Using obsolete function parser.latestCild(), use lastChild() instead');
222
+ return lastChild(container);
223
+ }
224
+ /**
225
+ * Checks if a documentFragment has no children.
226
+ * Fragments without children can cause errors if inserted into ranges.
227
+ *
228
+ * @method isDocumentFragmentWithoutChildren
229
+ * @param {HTMLElement} DOM node.
230
+ * @return {Boolean}
231
+ */
232
+ export function isDocumentFragmentWithoutChildren(fragment) {
233
+ return !!(fragment &&
234
+ fragment.nodeType === nodeType.documentFragmentNode &&
235
+ fragment.childNodes.length === 0);
236
+ }
237
+ /**
238
+ * Determine if an element behaves like an inline element.
239
+ */
240
+ export function isInlineElement(window, element) {
241
+ const styles = element.currentStyle || window.getComputedStyle(element, '');
242
+ const display = styles.display;
243
+ switch (display) {
244
+ case 'inline':
245
+ case 'inline-block':
246
+ return true;
247
+ default:
248
+ return false;
249
+ }
250
+ }
251
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { Match } from './text-search.js';
2
+ export default class MatchCollection {
3
+ matches: Match[];
4
+ constructor();
5
+ addMatches(matches: Match[]): void;
6
+ }
7
+ //# sourceMappingURL=match-collection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"match-collection.d.ts","sourceRoot":"","sources":["../../../src/plugins/highlighting/match-collection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,KAAK,EAAC,MAAM,kBAAkB,CAAA;AAE3C,MAAM,CAAC,OAAO,OAAO,eAAe;IAC3B,OAAO,EAAE,KAAK,EAAE,CAAA;;IAMvB,UAAU,CAAE,OAAO,EAAE,KAAK,EAAE,GAAG,IAAI;CAKpC"}
@@ -0,0 +1,62 @@
1
+ export default class MatchCollection {
2
+ constructor() {
3
+ this.matches = [];
4
+ }
5
+ addMatches(matches) {
6
+ if (!matches?.length)
7
+ return;
8
+ this.matches = mergeMatches(this.matches, matches);
9
+ }
10
+ }
11
+ // Private Helpers
12
+ // ---------------
13
+ function mergeMatches(matches1, matches2) {
14
+ let next;
15
+ const length1 = matches1.length;
16
+ const length2 = matches2.length;
17
+ let lastEndIndex = -1;
18
+ const output = [];
19
+ const state = {
20
+ a1: matches1,
21
+ i1: 0,
22
+ a2: matches2,
23
+ i2: 0
24
+ };
25
+ while (state.i1 < length1 || state.i2 < length2) {
26
+ next = pickNext(state);
27
+ if (next && next.startIndex >= lastEndIndex) {
28
+ output.push(next);
29
+ lastEndIndex = next.endIndex;
30
+ }
31
+ else if (next) {
32
+ lastEndIndex = next.endIndex;
33
+ }
34
+ }
35
+ return output;
36
+ }
37
+ function pickNext(state) {
38
+ const i1 = state.i1;
39
+ const i2 = state.i2;
40
+ const item1 = state.a1[i1];
41
+ const item2 = state.a2[i2];
42
+ if (item1 && item2 && item1.startIndex < item2.startIndex) {
43
+ state.i1 = i1 + 1;
44
+ return item1;
45
+ }
46
+ else if (item1 && item2) {
47
+ state.i2 = i2 + 1;
48
+ return item2;
49
+ }
50
+ else if (item1) {
51
+ state.i1 = i1 + 1;
52
+ return item1;
53
+ }
54
+ else if (item2) {
55
+ state.i2 = i2 + 1;
56
+ return item2;
57
+ }
58
+ else {
59
+ return undefined;
60
+ }
61
+ }
62
+ //# sourceMappingURL=match-collection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"match-collection.js","sourceRoot":"","sources":["../../../src/plugins/highlighting/match-collection.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,OAAO,eAAe;IAGlC;QACE,IAAI,CAAC,OAAO,GAAG,EAAE,CAAA;IACnB,CAAC;IAED,UAAU,CAAE,OAAgB;QAC1B,IAAI,CAAC,OAAO,EAAE,MAAM;YAAE,OAAM;QAC5B,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IACpD,CAAC;CAEF;AAED,kBAAkB;AAClB,kBAAkB;AAElB,SAAS,YAAY,CAAE,QAAiB,EAAE,QAAiB;IACzD,IAAI,IAAuB,CAAA;IAC3B,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAA;IAC/B,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAA;IAC/B,IAAI,YAAY,GAAG,CAAC,CAAC,CAAA;IACrB,MAAM,MAAM,GAAY,EAAE,CAAA;IAE1B,MAAM,KAAK,GAAG;QACZ,EAAE,EAAE,QAAQ;QACZ,EAAE,EAAE,CAAC;QACL,EAAE,EAAE,QAAQ;QACZ,EAAE,EAAE,CAAC;KACN,CAAA;IAED,OAAO,KAAK,CAAC,EAAE,GAAG,OAAO,IAAI,KAAK,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC;QAChD,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;QACtB,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,IAAI,YAAY,EAAE,CAAC;YAC5C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACjB,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAA;QAC9B,CAAC;aAAM,IAAI,IAAI,EAAE,CAAC;YAChB,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAA;QAC9B,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AASD,SAAS,QAAQ,CAAE,KAAiB;IAClC,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAA;IACnB,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAA;IACnB,MAAM,KAAK,GAAG,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;IAC1B,MAAM,KAAK,GAAG,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;IAE1B,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC;QAC1D,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;QACjB,OAAO,KAAK,CAAA;IACd,CAAC;SAAM,IAAI,KAAK,IAAI,KAAK,EAAE,CAAC;QAC1B,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;QACjB,OAAO,KAAK,CAAA;IACd,CAAC;SAAM,IAAI,KAAK,EAAE,CAAC;QACjB,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;QACjB,OAAO,KAAK,CAAA;IACd,CAAC;SAAM,IAAI,KAAK,EAAE,CAAC;QACjB,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;QACjB,OAAO,KAAK,CAAA;IACd,CAAC;SAAM,CAAC;QACN,OAAO,SAAS,CAAA;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Spellcheck class.
3
+ *
4
+ * @class Spellcheck
5
+ * @constructor
6
+ */
7
+ export default class SpellcheckService {
8
+ private spellcheckService;
9
+ constructor(spellcheckService: (text: string, callback: (misspelledWords: string[] | null) => void) => void);
10
+ check(text: string, callback: (error: null, misspelledWords?: string[] | null) => void): void;
11
+ }
12
+ //# sourceMappingURL=spellcheck-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spellcheck-service.d.ts","sourceRoot":"","sources":["../../../src/plugins/highlighting/spellcheck-service.ts"],"names":[],"mappings":"AAEA;;;;;EAKE;AACF,MAAM,CAAC,OAAO,OAAO,iBAAiB;IACpC,OAAO,CAAC,iBAAiB,CAA8E;gBAE1F,iBAAiB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,eAAe,EAAE,MAAM,EAAE,GAAG,IAAI,KAAK,IAAI,KAAK,IAAI;IAI5G,KAAK,CAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,eAAe,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI;CAa/F"}
@@ -0,0 +1,24 @@
1
+ import * as content from '../../content.js';
2
+ /**
3
+ * Spellcheck class.
4
+ *
5
+ * @class Spellcheck
6
+ * @constructor
7
+ */
8
+ export default class SpellcheckService {
9
+ constructor(spellcheckService) {
10
+ this.spellcheckService = spellcheckService;
11
+ }
12
+ check(text, callback) {
13
+ if (!text)
14
+ return callback(null);
15
+ const condensedText = content.normalizeWhitespace(text);
16
+ this.spellcheckService(condensedText, (misspelledWords) => {
17
+ if (misspelledWords && misspelledWords.length > 0) {
18
+ return callback(null, misspelledWords);
19
+ }
20
+ return callback(null);
21
+ });
22
+ }
23
+ }
24
+ //# sourceMappingURL=spellcheck-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spellcheck-service.js","sourceRoot":"","sources":["../../../src/plugins/highlighting/spellcheck-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAA;AAE3C;;;;;EAKE;AACF,MAAM,CAAC,OAAO,OAAO,iBAAiB;IAGpC,YAAa,iBAA+F;QAC1G,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAA;IAC5C,CAAC;IAED,KAAK,CAAE,IAAY,EAAE,QAAkE;QACrF,IAAI,CAAC,IAAI;YAAE,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAA;QAEhC,MAAM,aAAa,GAAG,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAA;QAEvD,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC,eAAe,EAAE,EAAE;YACxD,IAAI,eAAe,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAClD,OAAO,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC,CAAA;YACxC,CAAC;YACD,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAA;QACvB,CAAC,CAAC,CAAA;IACJ,CAAC;CAEF"}
@@ -0,0 +1,10 @@
1
+ export interface Match {
2
+ startIndex: number;
3
+ endIndex: number;
4
+ match: string;
5
+ marker?: HTMLElement;
6
+ }
7
+ export declare function searchText(text: string, searchTerm: string, marker?: HTMLElement): Match[];
8
+ export declare function searchWord(text: string, word: string, marker?: HTMLElement): Match[];
9
+ export declare function searchAllWords(text: string, words: string[], marker?: HTMLElement): Match[];
10
+ //# sourceMappingURL=text-search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-search.d.ts","sourceRoot":"","sources":["../../../src/plugins/highlighting/text-search.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,KAAK;IACpB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB;AAED,wBAAgB,UAAU,CAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,KAAK,EAAE,CAG3F;AAED,wBAAgB,UAAU,CAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,KAAK,EAAE,CAGrF;AAED,wBAAgB,cAAc,CAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,KAAK,EAAE,CAG5F"}
@@ -0,0 +1,92 @@
1
+ export function searchText(text, searchTerm, marker) {
2
+ const matchMode = 'text';
3
+ return findMatches(text, [searchTerm], matchMode, marker);
4
+ }
5
+ export function searchWord(text, word, marker) {
6
+ const matchMode = 'word';
7
+ return findMatches(text, [word], matchMode, marker);
8
+ }
9
+ export function searchAllWords(text, words, marker) {
10
+ const matchMode = 'word';
11
+ return findMatches(text, words, matchMode, marker);
12
+ }
13
+ function findMatches(text, searchTexts, matchMode, marker) {
14
+ if (!text || text === '')
15
+ return [];
16
+ if (marker && !isElement(marker))
17
+ return [];
18
+ if (!searchTexts?.length)
19
+ return [];
20
+ const createRegex = matchMode === 'word'
21
+ ? createWordRegex
22
+ : createHighlightRegex;
23
+ const regex = createRegex(searchTexts);
24
+ const matches = [...text.matchAll(regex)];
25
+ return matches.map((match) => {
26
+ let startIndex;
27
+ let matchedText;
28
+ if (matchMode === 'word') {
29
+ startIndex = match.index + match[1].length;
30
+ matchedText = match[2];
31
+ }
32
+ else {
33
+ startIndex = match.index;
34
+ matchedText = match[0];
35
+ }
36
+ return {
37
+ startIndex,
38
+ endIndex: startIndex + matchedText.length,
39
+ match: matchedText,
40
+ marker
41
+ };
42
+ });
43
+ }
44
+ function isElement(obj) {
45
+ try {
46
+ if (!obj)
47
+ return false;
48
+ return obj instanceof obj.ownerDocument?.defaultView.HTMLElement;
49
+ }
50
+ catch (e) {
51
+ // Browsers not supporting W3 DOM2 don't have HTMLElement and
52
+ // an exception is thrown and we end up here. Testing some
53
+ // properties that all elements have (works on IE7)
54
+ return (typeof obj === 'object') &&
55
+ (obj.nodeType === 1) && (typeof obj.style === 'object') &&
56
+ (typeof obj.ownerDocument === 'object');
57
+ }
58
+ }
59
+ function createHighlightRegex(words = []) {
60
+ const escapedWords = words.map((word) => escapeRegEx(word));
61
+ const regex = `(${escapedWords.join('|')})`;
62
+ return new RegExp(regex, 'g');
63
+ }
64
+ // Regex to find whole words within a string
65
+ //
66
+ // Unicode character blocks for letters.
67
+ // See: http://jrgraphix.net/research/unicode_blocks.php
68
+ //
69
+ // \\u0041-\\u005A A-Z (Basic Latin)
70
+ // \\u0061-\\u007A a-z (Basic Latin)
71
+ // \\u0030-\\u0039 0-9 (Basic Latin)
72
+ // \\u00AA ª (Latin-1 Supplement)
73
+ // \\u00B5 µ (Latin-1 Supplement)
74
+ // \\u00BA º (Latin-1 Supplement)
75
+ // \\u00C0-\\u00D6 À-Ö (Latin-1 Supplement)
76
+ // \\u00D8-\\u00F6 Ø-ö (Latin-1 Supplement)
77
+ // \\u00F8-\\u00FF ø-ÿ (Latin-1 Supplement)
78
+ // \\u0100-\\u017F Ā-ſ (Latin Extended-A)
79
+ // \\u0180-\\u024F ƀ-ɏ (Latin Extended-B)
80
+ const letterChars = '\\u0041-\\u005A\\u0061-\\u007A\\u0030-\\u0039\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u00FF\\u0100-\\u017F\\u0180-\\u024F';
81
+ function createWordRegex(words = []) {
82
+ const escapedWords = words.map((word) => escapeRegEx(word));
83
+ // (notLetter|^)(words)(?=notLetter|$)
84
+ const regex = `([^${letterChars}]|^)` +
85
+ `(${escapedWords.join('|')})` +
86
+ `(?=[^${letterChars}]|$)`;
87
+ return new RegExp(regex, 'g');
88
+ }
89
+ function escapeRegEx(s) {
90
+ return String(s).replace(/([.*+?^=!:${}()|[\]/\\])/g, '\\$1');
91
+ }
92
+ //# sourceMappingURL=text-search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-search.js","sourceRoot":"","sources":["../../../src/plugins/highlighting/text-search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export interface WhitespaceMatch {
2
+ startIndex: number | undefined;
3
+ endIndex: number;
4
+ match: string;
5
+ title: string;
6
+ marker: HTMLElement;
7
+ }
8
+ export default class WhitespaceHighlighting {
9
+ marker: HTMLElement;
10
+ constructor(markerNode: HTMLElement);
11
+ findMatches(text: string): WhitespaceMatch[] | undefined;
12
+ prepareMatch(match: RegExpMatchArray): WhitespaceMatch;
13
+ }
14
+ //# sourceMappingURL=whitespace-highlighting.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whitespace-highlighting.d.ts","sourceRoot":"","sources":["../../../src/plugins/highlighting/whitespace-highlighting.ts"],"names":[],"mappings":"AA2BA,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,GAAG,SAAS,CAAA;IAC9B,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,WAAW,CAAA;CACpB;AAED,MAAM,CAAC,OAAO,OAAO,sBAAsB;IAClC,MAAM,EAAE,WAAW,CAAA;gBAEb,UAAU,EAAE,WAAW;IAIpC,WAAW,CAAE,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE,GAAG,SAAS;IAOzD,YAAY,CAAE,KAAK,EAAE,gBAAgB,GAAG,eAAe;CAYxD"}