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
package/lib/content.js ADDED
@@ -0,0 +1,526 @@
1
+ import * as nodeType from './node-type.js';
2
+ import * as rangeSaveRestore from './range-save-restore.js';
3
+ import * as parser from './parser.js';
4
+ import * as string from './util/string.js';
5
+ import { createElement, createRange, getNodes, normalizeBoundaries, splitBoundaries, containsNodeText } from './util/dom.js';
6
+ import config from './config.js';
7
+ function restoreRange(host, range, func) {
8
+ const savedRange = rangeSaveRestore.save(range);
9
+ func();
10
+ return rangeSaveRestore.restore(host, savedRange);
11
+ }
12
+ const zeroWidthSpace = /\u200B/g;
13
+ const zeroWidthNonBreakingSpace = /\uFEFF/g;
14
+ const whitespaceExceptSpace = /[^\S ]/g;
15
+ const everythingWhitespace = /^\s+$/;
16
+ const leadingWhitespace = /^\s+/;
17
+ const trailingWhitespace = /\s+$/;
18
+ // Clean up the Html.
19
+ export function tidyHtml(element) {
20
+ // if (element.normalize) element.normalize()
21
+ normalizeTags(element);
22
+ }
23
+ // Remove empty tags and merge consecutive tags (they must have the same
24
+ // attributes).
25
+ //
26
+ // @method normalizeTags
27
+ // @param {HTMLElement} element The element to process.
28
+ export function normalizeTags(element) {
29
+ const fragment = document.createDocumentFragment();
30
+ // Remove line breaks at the beginning of a content block
31
+ removeWhitespaces(element, 'firstChild');
32
+ // Remove line breaks at the end of a content block
33
+ removeWhitespaces(element, 'lastChild');
34
+ const nodesToProcess = Array.from(element.childNodes);
35
+ const processedIndices = new Set();
36
+ for (let i = 0; i < nodesToProcess.length; i++) {
37
+ if (processedIndices.has(i))
38
+ continue;
39
+ const node = nodesToProcess[i];
40
+ // skip empty tags, so they'll get removed
41
+ if (node.nodeName !== 'BR' && !node.textContent)
42
+ continue;
43
+ if (node.nodeType === nodeType.elementNode && node.nodeName !== 'BR') {
44
+ // Create a merged node starting with this node
45
+ const mergedNode = node.cloneNode(false);
46
+ // Copy children from the first node
47
+ for (const child of Array.from(node.childNodes)) {
48
+ mergedNode.appendChild(child.cloneNode(true));
49
+ }
50
+ // Merge consecutive same tags
51
+ let j = i + 1;
52
+ while (j < nodesToProcess.length) {
53
+ const sibling = nodesToProcess[j];
54
+ if (!parser.isSameNode(sibling, node))
55
+ break;
56
+ // Copy children from the consecutive sibling
57
+ for (const siblingChild of Array.from(sibling.childNodes)) {
58
+ mergedNode.appendChild(siblingChild.cloneNode(true));
59
+ }
60
+ processedIndices.add(j);
61
+ sibling.remove();
62
+ j++;
63
+ }
64
+ // Recursively normalize the merged node
65
+ normalizeTags(mergedNode);
66
+ fragment.appendChild(mergedNode);
67
+ }
68
+ else {
69
+ fragment.appendChild(node.cloneNode(true));
70
+ }
71
+ }
72
+ while (element.firstChild)
73
+ element.removeChild(element.firstChild);
74
+ element.appendChild(fragment);
75
+ }
76
+ export function normalizeWhitespace(text) {
77
+ return text.replace(whitespaceExceptSpace, ' ');
78
+ }
79
+ // Clean the element from character, tags, etc... added by the plugin logic.
80
+ //
81
+ // @method cleanInternals
82
+ // @param {HTMLElement} element The element to process.
83
+ export function cleanInternals(element) {
84
+ // Uses extract content for simplicity. A custom method
85
+ // that does not clone the element could be faster if needed.
86
+ element.innerHTML = extractContent(element, true);
87
+ }
88
+ // Extracts the content from a host element.
89
+ // Does not touch or change the host. Just returns
90
+ // the content and removes elements marked for removal by editable.
91
+ //
92
+ // @param {DOM node or document fragment} Element where to clean out the innerHTML.
93
+ // If you pass a document fragment it will be empty after this call.
94
+ // @param {Boolean} Flag whether to keep ui elements like spellchecking highlights.
95
+ // @returns {String} The cleaned innerHTML of the passed element or document fragment.
96
+ export function extractContent(element, keepUiElements) {
97
+ if (!element)
98
+ return '';
99
+ const innerHtml = (element.nodeType === nodeType.documentFragmentNode
100
+ ? getInnerHtmlOfFragment(element)
101
+ : element.innerHTML)
102
+ .replace(zeroWidthNonBreakingSpace, '') // Used for forcing inline elements to have a height
103
+ .replace(zeroWidthSpace, '<br>'); // Used for cross-browser newlines
104
+ const clone = document.createElement('div');
105
+ clone.innerHTML = innerHtml;
106
+ unwrapInternalNodes(clone, keepUiElements);
107
+ // Remove line breaks at the beginning of a content block
108
+ removeWhitespaces(clone, 'firstChild');
109
+ // Remove line breaks at the end of a content block
110
+ removeWhitespaces(clone, 'lastChild');
111
+ return clone.innerHTML;
112
+ }
113
+ export function getInnerHtmlOfFragment(documentFragment) {
114
+ if (!documentFragment || !documentFragment.childNodes) {
115
+ return '';
116
+ }
117
+ const div = document.createElement('div');
118
+ // JSDOM doesn't support appendChild with DocumentFragment directly
119
+ // Clone and append each child instead
120
+ const children = Array.from(documentFragment.childNodes);
121
+ for (const child of children) {
122
+ div.appendChild(child.cloneNode(true));
123
+ }
124
+ return div.innerHTML;
125
+ }
126
+ // Create a document fragment from an html string
127
+ // @param {String} e.g. 'some html <span>text</span>.'
128
+ export function createFragmentFromString(htmlString) {
129
+ const wrapper = document.createElement('div');
130
+ wrapper.innerHTML = htmlString;
131
+ const fragment = document.createDocumentFragment();
132
+ while (wrapper.firstChild)
133
+ fragment.appendChild(wrapper.firstChild);
134
+ return fragment;
135
+ }
136
+ export function adoptElement(node, doc) {
137
+ if (typeof node === 'string') {
138
+ // If node is a string (selector), query for it
139
+ const element = doc.querySelector(node);
140
+ if (!element)
141
+ throw new Error(`Element not found: ${node}`);
142
+ return element;
143
+ }
144
+ if (node.ownerDocument !== doc) {
145
+ return doc.adoptNode(node);
146
+ }
147
+ return node;
148
+ }
149
+ // It will return a fragment with the cloned contents of the range
150
+ // without the commonAncestorElement.
151
+ //
152
+ // @param {Range}
153
+ // @return {DocumentFragment}
154
+ export function cloneRangeContents(range) {
155
+ const rangeFragment = range.cloneContents();
156
+ const parent = rangeFragment.childNodes[0];
157
+ const fragment = document.createDocumentFragment();
158
+ while (parent.childNodes.length)
159
+ fragment.appendChild(parent.childNodes[0]);
160
+ return fragment;
161
+ }
162
+ function removeWhitespaces(node, type, firstCall = true) {
163
+ let elem;
164
+ // loop through all children:
165
+ // from left to right if type = 'firstChild',
166
+ // from right to left if type = 'lastChild'
167
+ while ((elem = node[type])) {
168
+ if (elem.nodeType === nodeType.textNode) {
169
+ // Just remove text nodes if they consist only of whitespace
170
+ if (elem.textContent && everythingWhitespace.test(elem.textContent))
171
+ node.removeChild(elem);
172
+ else
173
+ break;
174
+ }
175
+ else if (elem.nodeName === 'BR') {
176
+ elem.remove();
177
+ }
178
+ else {
179
+ // For element nodes (e.g. <strong> tags), we repeat the logic recursively
180
+ // to remove empty text nodes or <br> tags.
181
+ if (elem[type])
182
+ removeWhitespaces(elem, type, false);
183
+ break;
184
+ }
185
+ }
186
+ // Text nodes with leading/trailing whitespace can be trimmed if config allows.
187
+ // We only do it to the outermost text node. Once a text was wrapped in
188
+ // another element, we preserve the whitespace.
189
+ if (!firstCall)
190
+ return;
191
+ elem = node[type];
192
+ if (elem?.nodeType !== nodeType.textNode)
193
+ return;
194
+ // Remove whitespaces at the end or start of a block with content
195
+ // e.g. ' Hello world' > 'Hello World'
196
+ if (config.trimLeadingAndTrailingWhitespaces && elem.textContent) {
197
+ elem.textContent = elem.textContent.replace(type.startsWith('last') ? trailingWhitespace : leadingWhitespace, '');
198
+ }
199
+ }
200
+ // Remove elements that were inserted for internal or user interface purposes
201
+ //
202
+ // @param {DOM node}
203
+ // @param {Boolean} whether to keep ui elements like spellchecking highlights
204
+ // Currently:
205
+ // - Saved ranges
206
+ export function unwrapInternalNodes(sibling, keepUiElements) {
207
+ while (sibling) {
208
+ const nextSibling = sibling.nextSibling;
209
+ if (sibling.nodeType !== nodeType.elementNode) {
210
+ sibling = nextSibling;
211
+ continue;
212
+ }
213
+ const elem = sibling;
214
+ const attr = elem.getAttribute('data-editable');
215
+ if (elem.firstChild)
216
+ unwrapInternalNodes(elem.firstChild, keepUiElements);
217
+ if (attr === 'remove' || (attr === 'ui-remove' && !keepUiElements)) {
218
+ elem.remove();
219
+ }
220
+ else if (attr === 'unwrap' || (attr === 'ui-unwrap' && !keepUiElements)) {
221
+ unwrap(elem);
222
+ }
223
+ sibling = nextSibling;
224
+ }
225
+ }
226
+ // Get all tags that start or end inside the range
227
+ export function getTags(host, range, filterFunc) {
228
+ const innerTags = getInnerTags(range, filterFunc);
229
+ const ancestorTags = getAncestorTags(host, range, filterFunc);
230
+ return innerTags.concat(ancestorTags);
231
+ }
232
+ // Get all ancestor tags that start or end inside the range
233
+ export function getAncestorTags(host, range, filterFunc) {
234
+ const tags = [];
235
+ let node = range.commonAncestorContainer;
236
+ while (node && node !== host) {
237
+ if (!filterFunc || filterFunc(node))
238
+ tags.push(node);
239
+ node = node.parentNode;
240
+ }
241
+ return tags;
242
+ }
243
+ export function getTagsByName(host, range, tagName) {
244
+ return getTags(host, range, (node) => {
245
+ return node.nodeName.toUpperCase() === tagName.toUpperCase();
246
+ });
247
+ }
248
+ export function getTagsByNameAndAttributes(host, range, elem) {
249
+ return getTags(host, range, (node) => {
250
+ return node.nodeName.toUpperCase() === elem.nodeName.toUpperCase() &&
251
+ node.nodeType === nodeType.elementNode &&
252
+ areSameAttributes(node.attributes, elem.attributes);
253
+ });
254
+ }
255
+ export function areSameAttributes(attrs1, attrs2) {
256
+ if (attrs1.length !== attrs2.length)
257
+ return false;
258
+ for (let i = 0; i < attrs1.length; i++) {
259
+ const attr1 = attrs1[i];
260
+ const attr2 = attrs2.getNamedItem(attr1.name);
261
+ if (!attr2 || attr2.value !== attr1.value)
262
+ return false;
263
+ }
264
+ return true;
265
+ }
266
+ // Get all tags that start or end inside the range
267
+ export function getInnerTags(range, filterFunc) {
268
+ return getNodes(range, [nodeType.elementNode], filterFunc);
269
+ }
270
+ // Get all tags whose text is completely within the current selection.
271
+ export function getContainedTags(range, filterFunc) {
272
+ return getNodes(range, [nodeType.elementNode], filterFunc)
273
+ .filter(elem => containsNodeText(range, elem));
274
+ }
275
+ // Transform an array of elements into an array
276
+ // of tagnames in uppercase
277
+ //
278
+ // @return example: ['STRONG', 'B']
279
+ export function getTagNames(elements = []) {
280
+ return elements.map((element) => element.nodeName);
281
+ }
282
+ export function isAffectedBy(host, range, tagName) {
283
+ return getTags(host, range, null)
284
+ .some((elem) => elem.nodeName === tagName.toUpperCase());
285
+ }
286
+ // select a whole element
287
+ export function selectNodeContents(element) {
288
+ const range = createRange();
289
+ range.selectNodeContents(element);
290
+ return range;
291
+ }
292
+ function intersectsRange(range1, range2) {
293
+ return range1.compareBoundaryPoints(Range.END_TO_START, range2) === -1 &&
294
+ range2.compareBoundaryPoints(Range.END_TO_START, range1) === -1;
295
+ }
296
+ // Check if the range selects all of the elements contents,
297
+ // not less or more.
298
+ //
299
+ // @param visible: Only compare visible text. That way it does not
300
+ // matter if the user selects an additional whitespace or not.
301
+ export function isExactSelection(range, elem, visible) {
302
+ const elemRange = createRange();
303
+ elemRange.selectNodeContents(elem);
304
+ if (!intersectsRange(range, elemRange))
305
+ return false;
306
+ let rangeText = range.toString();
307
+ let elemText = (elem.jquery ? elem[0] : elem).textContent;
308
+ if (visible) {
309
+ rangeText = string.trim(rangeText);
310
+ elemText = string.trim(elemText);
311
+ }
312
+ return rangeText !== '' && rangeText === elemText;
313
+ }
314
+ export function expandTo(host, range, elem) {
315
+ range.selectNodeContents(elem);
316
+ return range;
317
+ }
318
+ export function toggleTag(host, range, elem) {
319
+ const elems = getTagsByNameAndAttributes(host, range, elem);
320
+ if (elems.length === 1 &&
321
+ elems[0].nodeType === nodeType.elementNode &&
322
+ isExactSelection(range, elems[0], true)) {
323
+ const result = removeFormattingElem(host, range, elem);
324
+ if (!result)
325
+ return range;
326
+ return result;
327
+ }
328
+ return forceWrap(host, range, elem);
329
+ }
330
+ export function isWrappable(range) {
331
+ return canSurroundContents(range);
332
+ }
333
+ export function forceWrap(host, range, elem) {
334
+ let restoredRange = restoreRange(host, range, () => {
335
+ nukeElem(host, range, elem);
336
+ });
337
+ // remove all tags if the range is not wrappable
338
+ if (!restoredRange || !isWrappable(restoredRange)) {
339
+ if (!restoredRange)
340
+ return range;
341
+ restoredRange = restoreRange(host, restoredRange, () => {
342
+ nuke(host, restoredRange, null);
343
+ });
344
+ if (!restoredRange)
345
+ return range;
346
+ }
347
+ wrap(restoredRange, elem);
348
+ return restoredRange;
349
+ }
350
+ export function wrap(range, elem) {
351
+ if (!isWrappable(range)) {
352
+ console.log('content.wrap(): can not surround range');
353
+ return;
354
+ }
355
+ let element;
356
+ if (typeof elem === 'string') {
357
+ element = createElement(elem);
358
+ if (!element) {
359
+ console.log('content.wrap(): could not create element');
360
+ return;
361
+ }
362
+ }
363
+ else {
364
+ element = elem;
365
+ }
366
+ range.surroundContents(element);
367
+ }
368
+ export function unwrap(elem) {
369
+ elem = elem.jquery ? elem[0] : elem;
370
+ const parent = elem.parentNode;
371
+ if (!parent)
372
+ return;
373
+ while (elem.firstChild)
374
+ parent.insertBefore(elem.firstChild, elem);
375
+ parent.removeChild(elem);
376
+ }
377
+ export function removeFormattingElem(host, range, elem) {
378
+ return restoreRange(host, range, () => {
379
+ nukeElem(host, range, elem);
380
+ });
381
+ }
382
+ export function removeFormatting(host, range, selector) {
383
+ return restoreRange(host, range, () => {
384
+ nuke(host, range, selector);
385
+ });
386
+ }
387
+ // Unwrap all tags this range is affected by.
388
+ // Can also affect content outside of the range.
389
+ export function nuke(host, range, selector) {
390
+ getTags(host, range, null).forEach((elem) => {
391
+ if (elem.nodeName.toUpperCase() !== 'BR' && (!selector || elem.matches(selector))) {
392
+ unwrap(elem);
393
+ }
394
+ });
395
+ }
396
+ // Unwrap all tags this range is affected by.
397
+ // Can also affect content outside of the range.
398
+ export function nukeElem(host, range, node) {
399
+ getTags(host, range, null).forEach((elem) => {
400
+ if (elem.nodeName.toUpperCase() !== 'BR' && (!node ||
401
+ (elem.nodeName.toUpperCase() === node.nodeName.toUpperCase() &&
402
+ areSameAttributes(elem.attributes, node.attributes)))) {
403
+ unwrap(elem);
404
+ }
405
+ });
406
+ }
407
+ // Insert a single character (or string) before or after
408
+ // the range.
409
+ export function insertCharacter(range, character, atStart) {
410
+ const insertEl = document.createTextNode(character);
411
+ const boundaryRange = range.cloneRange();
412
+ boundaryRange.collapse(atStart);
413
+ boundaryRange.insertNode(insertEl);
414
+ range[atStart ? 'setStartBefore' : 'setEndAfter'](insertEl);
415
+ normalizeBoundaries(range);
416
+ }
417
+ // Surround the range with characters like start and end quotes.
418
+ //
419
+ // @method surround
420
+ export function surround(host, range, startCharacter, endCharacter) {
421
+ insertCharacter(range, endCharacter || startCharacter, false);
422
+ insertCharacter(range, startCharacter, true);
423
+ return range;
424
+ }
425
+ // Removes a character from the text within a range.
426
+ //
427
+ // @method deleteCharacter
428
+ export function deleteCharacter(host, range, character) {
429
+ if (!containsString(range, character))
430
+ return range;
431
+ // check for selection.rangeCount > 0 ?
432
+ const selection = window.getSelection();
433
+ if (selection && selection.rangeCount > 0)
434
+ splitBoundaries(range);
435
+ const restoredRange = restoreRange(host, range, () => {
436
+ getNodes(range, [nodeType.textNode], (node) => {
437
+ return node.nodeValue !== null && node.nodeValue.indexOf(character) >= 0;
438
+ })
439
+ .forEach((node) => {
440
+ const textNode = node;
441
+ if (textNode.nodeValue) {
442
+ // Use replace with global regex instead of replaceAll for better compatibility
443
+ textNode.nodeValue = textNode.nodeValue.replace(new RegExp(character.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'g'), '');
444
+ }
445
+ });
446
+ });
447
+ if (restoredRange) {
448
+ normalizeBoundaries(restoredRange);
449
+ return restoredRange;
450
+ }
451
+ return range;
452
+ }
453
+ export function containsString(range, str) {
454
+ return range.toString().indexOf(str) >= 0;
455
+ }
456
+ // Unwrap all tags this range is affected by.
457
+ // Can also affect content outside of the range.
458
+ export function nukeTag(host, range, tagName) {
459
+ getTags(host, range, null).forEach((elem) => {
460
+ if (elem.nodeName.toUpperCase() === tagName.toUpperCase())
461
+ unwrap(elem);
462
+ });
463
+ }
464
+ function createNodeIterator(root, filter) {
465
+ let currentNode = root;
466
+ let previousNode = null;
467
+ function nextNode() {
468
+ if (!currentNode) {
469
+ return null;
470
+ }
471
+ if (currentNode.firstChild && previousNode !== currentNode.firstChild) {
472
+ previousNode = currentNode;
473
+ currentNode = currentNode.firstChild;
474
+ }
475
+ else if (currentNode.nextSibling) {
476
+ previousNode = currentNode;
477
+ currentNode = currentNode.nextSibling;
478
+ }
479
+ else {
480
+ let parent = currentNode.parentNode;
481
+ while (parent && parent !== root) {
482
+ if (parent.nextSibling) {
483
+ previousNode = currentNode = parent.nextSibling;
484
+ break;
485
+ }
486
+ parent = parent.parentNode;
487
+ }
488
+ if (!parent || parent === root) {
489
+ previousNode = currentNode = null;
490
+ }
491
+ }
492
+ return currentNode;
493
+ }
494
+ return {
495
+ next: nextNode
496
+ };
497
+ }
498
+ function isNodeFullyContained(node, range) {
499
+ const nodeRange = document.createRange();
500
+ nodeRange.selectNodeContents(node);
501
+ return range.compareBoundaryPoints(Range.START_TO_START, nodeRange) <= 0 &&
502
+ range.compareBoundaryPoints(Range.END_TO_END, nodeRange) >= 0;
503
+ }
504
+ function canSurroundContents(range) {
505
+ if (!range || !range.startContainer || !range.endContainer) {
506
+ return false;
507
+ }
508
+ if (range.startContainer === range.endContainer)
509
+ return true;
510
+ // Create a custom node iterator for the common ancestor container
511
+ const iterator = createNodeIterator(range.commonAncestorContainer, function (node) {
512
+ return range.isPointInRange(node, 0);
513
+ });
514
+ let currentNode;
515
+ let boundariesInvalid = false;
516
+ while ((currentNode = iterator.next())) {
517
+ if (currentNode.nodeType === Node.ELEMENT_NODE) {
518
+ if (!isNodeFullyContained(currentNode, range)) {
519
+ boundariesInvalid = true;
520
+ break;
521
+ }
522
+ }
523
+ }
524
+ return !boundariesInvalid;
525
+ }
526
+ //# sourceMappingURL=content.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content.js","sourceRoot":"","sources":["../src/content.ts"],"names":[],"mappings":"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"}
package/lib/core.d.ts ADDED
@@ -0,0 +1,97 @@
1
+ import * as parser from './parser.js';
2
+ import * as content from './content.js';
3
+ import Dispatcher from './dispatcher.js';
4
+ import Cursor from './cursor.js';
5
+ import MonitoredHighlighting from './monitored-highlighting.js';
6
+ import { BinaryCursorSearchResult } from './util/binary_search.js';
7
+ import type { Config } from './config.js';
8
+ export interface EditableConfig {
9
+ window?: Window;
10
+ defaultBehavior?: boolean;
11
+ mouseMoveSelectionChanges?: boolean;
12
+ browserSpellcheck?: boolean;
13
+ }
14
+ export interface EnableOptions {
15
+ normalize?: boolean;
16
+ plainText?: boolean;
17
+ }
18
+ export type CursorPosition = 'beginning' | 'end' | 'before' | 'after';
19
+ export interface HighlightOptions {
20
+ editableHost: HTMLElement;
21
+ text: string;
22
+ highlightId: string;
23
+ textRange?: {
24
+ start: number;
25
+ end: number;
26
+ };
27
+ raiseEvents?: boolean;
28
+ type?: string;
29
+ }
30
+ export interface TextRange {
31
+ start: number;
32
+ end: number;
33
+ text?: string;
34
+ }
35
+ export type EditableEvent = 'focus' | 'blur' | 'flow' | 'selection' | 'cursor' | 'newline' | 'insert' | 'split' | 'merge' | 'empty' | 'change' | 'switch' | 'move' | 'clipboard' | 'paste' | 'spellcheckUpdated' | 'selectToBoundary' | 'init';
36
+ export declare class Editable {
37
+ config: Required<EditableConfig>;
38
+ win: Window;
39
+ editableSelector: string;
40
+ dispatcher: Dispatcher;
41
+ highlighting?: MonitoredHighlighting;
42
+ spellcheck?: {
43
+ checkSpelling: (elem: HTMLElement) => void;
44
+ };
45
+ static parser: typeof parser;
46
+ static content: typeof content;
47
+ constructor(instanceConfig?: EditableConfig);
48
+ static getGlobalConfig(): Config;
49
+ static globalConfig(globalConfig: Partial<Config>): void;
50
+ add(target: HTMLElement | HTMLElement[] | string, options?: EnableOptions | boolean): this;
51
+ remove(target: HTMLElement | HTMLElement[] | string): this;
52
+ disable(target?: HTMLElement | HTMLElement[] | string): this;
53
+ enable(target?: HTMLElement | HTMLElement[] | string, options?: EnableOptions | boolean): this;
54
+ suspend(target?: HTMLElement | HTMLElement[] | string): this;
55
+ continue(target?: HTMLElement | HTMLElement[] | string): this;
56
+ createCursor(element: HTMLElement, position?: CursorPosition): Cursor | undefined;
57
+ createCursorAtCharacterOffset({ element, offset }: {
58
+ element: HTMLElement;
59
+ offset: number;
60
+ }): Cursor;
61
+ createCursorAtBeginning(element: HTMLElement): Cursor | undefined;
62
+ createCursorAtEnd(element: HTMLElement): Cursor | undefined;
63
+ createCursorBefore(element: HTMLElement): Cursor | undefined;
64
+ createCursorAfter(element: HTMLElement): Cursor | undefined;
65
+ getContent(element: HTMLElement | DocumentFragment): string;
66
+ appendTo(inputElement: HTMLElement | string, contentToAppend: string | DocumentFragment): Cursor;
67
+ prependTo(inputElement: HTMLElement | string, contentToPrepend: string | DocumentFragment): Cursor;
68
+ getSelection(editableHost?: HTMLElement): Cursor | any | undefined;
69
+ setupHighlighting(hightlightingConfig: any): this;
70
+ setupSpellcheck(conf: any): this;
71
+ highlight({ editableHost, text, highlightId, textRange, raiseEvents, type }: HighlightOptions): number;
72
+ getHighlightPositions({ editableHost, type }: {
73
+ editableHost: HTMLElement;
74
+ type?: string;
75
+ }): Record<string, TextRange>;
76
+ removeHighlight({ editableHost, highlightId, raiseEvents }: {
77
+ editableHost: HTMLElement;
78
+ highlightId: string;
79
+ raiseEvents?: boolean;
80
+ }): void;
81
+ decorateHighlight({ editableHost, highlightId, addCssClass, removeCssClass }: {
82
+ editableHost: HTMLElement;
83
+ highlightId: string;
84
+ addCssClass?: string;
85
+ removeCssClass?: string;
86
+ }): void;
87
+ on(event: EditableEvent, handler: (...args: any[]) => any): this;
88
+ off(...args: any[]): this;
89
+ unload(): this;
90
+ findClosestCursorOffset({ element, origCoordinates, requiredOnFirstLine, requiredOnLastLine }: {
91
+ element: HTMLElement;
92
+ origCoordinates: DOMRect;
93
+ requiredOnFirstLine?: boolean;
94
+ requiredOnLastLine?: boolean;
95
+ }): BinaryCursorSearchResult;
96
+ }
97
+ //# sourceMappingURL=core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"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"}