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/block.d.ts ADDED
@@ -0,0 +1,13 @@
1
+ export declare const next: (element: HTMLElement) => HTMLElement | null;
2
+ export declare const previous: (element: HTMLElement) => HTMLElement | null;
3
+ export declare function init(elem: HTMLElement, { normalize, plainText, shouldSpellcheck }?: {
4
+ normalize?: boolean;
5
+ plainText?: boolean;
6
+ shouldSpellcheck?: boolean;
7
+ }): void;
8
+ export declare function disable(elem: HTMLElement): void;
9
+ export declare function isPlainTextBlock(elem: HTMLElement): boolean;
10
+ export declare function setBlockId(elem: HTMLElement): void;
11
+ export declare function getState(elem: HTMLElement): any;
12
+ export declare function setState(elem: HTMLElement, data: any): void;
13
+ //# sourceMappingURL=block.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"block.d.ts","sourceRoot":"","sources":["../src/block.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,IAAI,YA4DW,WAAW,KAAG,WAAW,GAAG,IAAI,AA5DR,CAAA;AACpD,eAAO,MAAM,QAAQ,YA2DO,WAAW,KAAG,WAAW,GAAG,IAAI,AA3DA,CAAA;AAE5D,wBAAgB,IAAI,CAAE,IAAI,EAAE,WAAW,EAAE,EAAC,SAAS,EAAE,SAAS,EAAE,gBAAgB,EAAC,GAAE;IAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAM,QAW7J;AAGD,wBAAgB,OAAO,CAAE,IAAI,EAAE,WAAW,GAAG,IAAI,CAShD;AAED,wBAAgB,gBAAgB,CAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAE5D;AAED,wBAAgB,UAAU,CAAE,IAAI,EAAE,WAAW,GAAG,IAAI,CAKnD;AAGD,wBAAgB,QAAQ,CAAE,IAAI,EAAE,WAAW,GAAG,GAAG,CAKhD;AAGD,wBAAgB,QAAQ,CAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,GAAG,IAAI,CAK5D"}
package/lib/block.js ADDED
@@ -0,0 +1,58 @@
1
+ import config from './config.js';
2
+ import * as content from './content.js';
3
+ let nextBlockId = 1;
4
+ const state = {};
5
+ export const next = getSibling('nextElementSibling');
6
+ export const previous = getSibling('previousElementSibling');
7
+ export function init(elem, { normalize, plainText, shouldSpellcheck } = {}) {
8
+ setBlockId(elem);
9
+ elem.setAttribute('contenteditable', 'true');
10
+ elem.setAttribute('spellcheck', String(Boolean(shouldSpellcheck)));
11
+ elem.setAttribute('data-plaintext', String(Boolean(plainText)));
12
+ elem.classList.remove(config.editableDisabledClass);
13
+ elem.classList.add(config.editableClass);
14
+ if (normalize)
15
+ content.tidyHtml(elem);
16
+ }
17
+ export function disable(elem) {
18
+ elem.removeAttribute('contenteditable');
19
+ elem.removeAttribute('spellcheck');
20
+ elem.removeAttribute('data-plaintext');
21
+ setState(elem, undefined);
22
+ elem.classList.remove(config.editableClass);
23
+ elem.classList.add(config.editableDisabledClass);
24
+ }
25
+ export function isPlainTextBlock(elem) {
26
+ return elem.getAttribute('data-plaintext') === 'true';
27
+ }
28
+ export function setBlockId(elem) {
29
+ if (!elem.hasAttribute('data-editable')) {
30
+ elem.setAttribute('data-editable', `id-${nextBlockId}`);
31
+ nextBlockId += 1;
32
+ }
33
+ }
34
+ export function getState(elem) {
35
+ if (elem.hasAttribute('data-editable')) {
36
+ const id = elem.getAttribute('data-editable');
37
+ if (id)
38
+ return state[id];
39
+ }
40
+ }
41
+ export function setState(elem, data) {
42
+ if (elem.hasAttribute('data-editable')) {
43
+ const id = elem.getAttribute('data-editable');
44
+ if (id)
45
+ state[id] = data;
46
+ }
47
+ }
48
+ // Helpers
49
+ // -------
50
+ function getSibling(type) {
51
+ return function (element) {
52
+ const sibling = element[type];
53
+ return sibling && sibling.getAttribute('contenteditable')
54
+ ? sibling
55
+ : null;
56
+ };
57
+ }
58
+ //# sourceMappingURL=block.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"block.js","sourceRoot":"","sources":["../src/block.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { Config } from './config.js';
2
+ import type Cursor from './cursor.js';
3
+ import type Selection from './selection.js';
4
+ export declare function updateConfig(conf: Config): void;
5
+ export declare function paste(block: HTMLElement, cursor: Cursor | Selection, clipboardContent: string): {
6
+ blocks: string[];
7
+ cursor: Cursor | Selection;
8
+ };
9
+ /**
10
+ * - Parse pasted content
11
+ * - Split it up into blocks
12
+ * - clean and normalize every block
13
+ * - optionally strip the host location an anchorTag-href
14
+ * www.livindocs.io/internalLink -> /internalLink
15
+ *
16
+ * @param {DOM node} A container where the pasted content is located.
17
+ * @returns {Array of Strings} An array of cleaned innerHTML like strings.
18
+ */
19
+ export declare function parseContent(element: HTMLElement, { plainText }?: {
20
+ plainText?: boolean;
21
+ }): string[];
22
+ //# sourceMappingURL=clipboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clipboard.d.ts","sourceRoot":"","sources":["../src/clipboard.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,aAAa,CAAA;AAKvC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAoB3C,wBAAgB,YAAY,CAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAchD;AAED,wBAAgB,KAAK,CAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,gBAAgB,EAAE,MAAM,GAAG;IAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;CAAC,CAoB/I;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAE,OAAO,EAAE,WAAW,EAAE,EAAC,SAAiB,EAAC,GAAE;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAM,GAAG,MAAM,EAAE,CAY7G"}
@@ -0,0 +1,154 @@
1
+ import config from './config.js';
2
+ import * as string from './util/string.js';
3
+ import * as nodeType from './node-type.js';
4
+ import * as quotes from './quotes.js';
5
+ import { isPlainTextBlock } from './block.js';
6
+ let allowedElements;
7
+ let allowedPlainTextElements;
8
+ let requiredAttributes;
9
+ let transformElements;
10
+ let blockLevelElements;
11
+ let replaceQuotes;
12
+ let splitIntoBlocks;
13
+ let blacklistedElements;
14
+ const whitespaceOnly = /^\s*$/;
15
+ const blockPlaceholder = '<!-- BLOCK -->';
16
+ let keepInternalRelativeLinks;
17
+ updateConfig(config);
18
+ export function updateConfig(conf) {
19
+ const rules = conf.pastedHtmlRules;
20
+ allowedElements = rules.allowedElements || {};
21
+ allowedPlainTextElements = rules.allowedPlainTextElements || {};
22
+ requiredAttributes = rules.requiredAttributes || {};
23
+ transformElements = rules.transformElements || {};
24
+ blacklistedElements = rules.blacklistedElements || [];
25
+ keepInternalRelativeLinks = rules.keepInternalRelativeLinks || false;
26
+ replaceQuotes = rules.replaceQuotes || {};
27
+ blockLevelElements = {};
28
+ rules.blockLevelElements.forEach((name) => { blockLevelElements[name] = true; });
29
+ splitIntoBlocks = {};
30
+ rules.splitIntoBlocks.forEach((name) => { splitIntoBlocks[name] = true; });
31
+ }
32
+ export function paste(block, cursor, clipboardContent) {
33
+ const document = block.ownerDocument;
34
+ block.setAttribute(config.pastingAttribute, 'true');
35
+ if (cursor.isSelection) {
36
+ const selection = cursor;
37
+ cursor = selection.deleteExactSurroundingTags()
38
+ .deleteContainedTags()
39
+ .deleteContent();
40
+ }
41
+ // Create a placeholder to help parse HTML
42
+ const pasteHolder = document.createElement('div');
43
+ pasteHolder.innerHTML = clipboardContent;
44
+ const isPlainText = isPlainTextBlock(block);
45
+ const blocks = parseContent(pasteHolder, { plainText: isPlainText });
46
+ block.removeAttribute(config.pastingAttribute);
47
+ return { blocks, cursor };
48
+ }
49
+ /**
50
+ * - Parse pasted content
51
+ * - Split it up into blocks
52
+ * - clean and normalize every block
53
+ * - optionally strip the host location an anchorTag-href
54
+ * www.livindocs.io/internalLink -> /internalLink
55
+ *
56
+ * @param {DOM node} A container where the pasted content is located.
57
+ * @returns {Array of Strings} An array of cleaned innerHTML like strings.
58
+ */
59
+ export function parseContent(element, { plainText = false } = {}) {
60
+ const options = {
61
+ allowedElements: plainText ? allowedPlainTextElements : allowedElements,
62
+ keepInternalRelativeLinks: plainText ? false : keepInternalRelativeLinks
63
+ };
64
+ // Filter pasted content
65
+ return filterHtmlElements(element, options)
66
+ // Handle Blocks
67
+ .split(blockPlaceholder)
68
+ .map((entry) => string.trim(cleanWhitespace(replaceAllQuotes(entry))))
69
+ .filter((entry) => !whitespaceOnly.test(entry));
70
+ }
71
+ function filterHtmlElements(elem, options) {
72
+ return Array.from(elem.childNodes).reduce((content, child) => {
73
+ if (blacklistedElements.indexOf(child.nodeName.toLowerCase()) !== -1) {
74
+ return '';
75
+ }
76
+ const childElement = child;
77
+ // Keep internal relative links relative (on paste).
78
+ if (options.keepInternalRelativeLinks && childElement.nodeName === 'A' && childElement.href) {
79
+ const hrefAttr = childElement.getAttribute('href');
80
+ if (hrefAttr) {
81
+ const stripInternalHost = hrefAttr.replace(window.location.origin, '');
82
+ childElement.setAttribute('href', stripInternalHost);
83
+ }
84
+ }
85
+ if (child.nodeType === nodeType.elementNode) {
86
+ const childContent = filterHtmlElements(childElement, options);
87
+ return content + conditionalNodeWrap(childElement, childContent, options);
88
+ }
89
+ // Escape HTML characters <, > and &
90
+ if (child.nodeType === nodeType.textNode) {
91
+ return content + string.escapeHtml(child.nodeValue || '');
92
+ }
93
+ return content;
94
+ }, '');
95
+ }
96
+ function conditionalNodeWrap(child, content, options) {
97
+ let nodeName = child.nodeName.toLowerCase();
98
+ nodeName = transformNodeName(nodeName);
99
+ if (shouldKeepNode(nodeName, child, options)) {
100
+ const attributes = filterAttributes(nodeName, child);
101
+ if (nodeName === 'br')
102
+ return `<${nodeName + attributes}>`;
103
+ if (!whitespaceOnly.test(content)) {
104
+ return `<${nodeName + attributes}>${content}</${nodeName}>`;
105
+ }
106
+ return content;
107
+ }
108
+ if (splitIntoBlocks[nodeName]) {
109
+ return blockPlaceholder + content + blockPlaceholder;
110
+ }
111
+ // prevent missing whitespace between text when block-level
112
+ // elements are removed.
113
+ if (blockLevelElements[nodeName])
114
+ return `${content} `;
115
+ return content;
116
+ }
117
+ // returns string of concatenated attributes e.g. 'target="_blank" rel="nofollow" href="/test.com"'
118
+ function filterAttributes(nodeName, node) {
119
+ return Array.from(node.attributes).reduce((attributes, attr) => {
120
+ const name = attr.name;
121
+ const value = attr.value;
122
+ if (allowedElements[nodeName]?.[name] && value) {
123
+ return `${attributes} ${name}="${value}"`;
124
+ }
125
+ return attributes;
126
+ }, '');
127
+ }
128
+ function transformNodeName(nodeName) {
129
+ return transformElements[nodeName] || nodeName;
130
+ }
131
+ function hasRequiredAttributes(nodeName, node) {
132
+ const requiredAttrs = requiredAttributes[nodeName];
133
+ if (!requiredAttrs)
134
+ return true;
135
+ return !requiredAttrs.some((name) => !node.getAttribute(name));
136
+ }
137
+ function shouldKeepNode(nodeName, node, options) {
138
+ return !!options.allowedElements[nodeName] && hasRequiredAttributes(nodeName, node);
139
+ }
140
+ function cleanWhitespace(str) {
141
+ return str
142
+ .replace(/\n/g, ' ')
143
+ .replace(/ {2,}/g, ' ')
144
+ .replace(/(.)\u00A0/g, (match, group) => group + (/[\u0020]/.test(group)
145
+ ? '\u00A0'
146
+ : ' '));
147
+ }
148
+ function replaceAllQuotes(str) {
149
+ if (replaceQuotes.quotes || replaceQuotes.singleQuotes || replaceQuotes.apostrophe) {
150
+ return quotes.replaceAllQuotes(str, replaceQuotes);
151
+ }
152
+ return str;
153
+ }
154
+ //# sourceMappingURL=clipboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clipboard.js","sourceRoot":"","sources":["../src/clipboard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ export interface MarkupConfig {
2
+ type: 'tag';
3
+ name: string;
4
+ attribs: Record<string, any>;
5
+ trim: boolean;
6
+ }
7
+ export interface PastedHtmlRules {
8
+ allowedElements: Record<string, Record<string, boolean>>;
9
+ allowedPlainTextElements: Record<string, Record<string, boolean>>;
10
+ requiredAttributes: Record<string, string[]>;
11
+ transformElements: Record<string, string>;
12
+ splitIntoBlocks: string[];
13
+ blockLevelElements: string[];
14
+ blacklistedElements: string[];
15
+ keepInternalRelativeLinks: boolean;
16
+ replaceQuotes: {
17
+ quotes?: string[];
18
+ singleQuotes?: string[];
19
+ apostrophe?: string;
20
+ };
21
+ }
22
+ export interface Config {
23
+ log: boolean;
24
+ logErrors: boolean;
25
+ editableClass: string;
26
+ editableDisabledClass: string;
27
+ pastingAttribute: string;
28
+ trimLeadingAndTrailingWhitespaces: boolean;
29
+ boldMarkup: MarkupConfig;
30
+ italicMarkup: MarkupConfig;
31
+ underlineMarkup: MarkupConfig;
32
+ linkMarkup: MarkupConfig;
33
+ pastedHtmlRules: PastedHtmlRules;
34
+ }
35
+ declare const config: Config;
36
+ export default config;
37
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,KAAK,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC5B,IAAI,EAAE,OAAO,CAAA;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IACxD,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IACjE,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;IAC5C,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACzC,eAAe,EAAE,MAAM,EAAE,CAAA;IACzB,kBAAkB,EAAE,MAAM,EAAE,CAAA;IAC5B,mBAAmB,EAAE,MAAM,EAAE,CAAA;IAC7B,yBAAyB,EAAE,OAAO,CAAA;IAClC,aAAa,EAAE;QACb,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;QACjB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;QACvB,UAAU,CAAC,EAAE,MAAM,CAAA;KACpB,CAAA;CACF;AAED,MAAM,WAAW,MAAM;IACrB,GAAG,EAAE,OAAO,CAAA;IACZ,SAAS,EAAE,OAAO,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,qBAAqB,EAAE,MAAM,CAAA;IAC7B,gBAAgB,EAAE,MAAM,CAAA;IACxB,iCAAiC,EAAE,OAAO,CAAA;IAC1C,UAAU,EAAE,YAAY,CAAA;IACxB,YAAY,EAAE,YAAY,CAAA;IAC1B,eAAe,EAAE,YAAY,CAAA;IAC7B,UAAU,EAAE,YAAY,CAAA;IACxB,eAAe,EAAE,eAAe,CAAA;CACjC;AAED,QAAA,MAAM,MAAM,EAAE,MA6Db,CAAA;AAED,eAAe,MAAM,CAAA"}
package/lib/config.js ADDED
@@ -0,0 +1,64 @@
1
+ const config = {
2
+ log: false,
3
+ logErrors: true,
4
+ editableClass: 'js-editable',
5
+ editableDisabledClass: 'js-editable-disabled',
6
+ pastingAttribute: 'data-editable-is-pasting',
7
+ trimLeadingAndTrailingWhitespaces: true,
8
+ boldMarkup: {
9
+ type: 'tag',
10
+ name: 'strong',
11
+ attribs: {},
12
+ trim: true
13
+ },
14
+ italicMarkup: {
15
+ type: 'tag',
16
+ name: 'em',
17
+ attribs: {},
18
+ trim: true
19
+ },
20
+ underlineMarkup: {
21
+ type: 'tag',
22
+ name: 'u',
23
+ attribs: {},
24
+ trim: false
25
+ },
26
+ linkMarkup: {
27
+ type: 'tag',
28
+ name: 'a',
29
+ attribs: {},
30
+ trim: true
31
+ },
32
+ pastedHtmlRules: {
33
+ allowedElements: {
34
+ 'a': {
35
+ 'href': true,
36
+ 'rel': true,
37
+ 'target': true
38
+ },
39
+ 'strong': {},
40
+ 'em': {},
41
+ 'br': {}
42
+ },
43
+ allowedPlainTextElements: {
44
+ 'br': {}
45
+ },
46
+ requiredAttributes: {
47
+ 'a': ['href']
48
+ },
49
+ transformElements: {
50
+ 'b': 'strong',
51
+ 'i': 'em'
52
+ },
53
+ splitIntoBlocks: ['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p', 'blockquote'],
54
+ blockLevelElements: [
55
+ 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'div', 'p', 'pre', 'hr', 'blockquote',
56
+ 'article', 'figure', 'header', 'footer', 'ul', 'ol', 'li', 'section', 'table', 'video'
57
+ ],
58
+ blacklistedElements: ['style', 'script'],
59
+ keepInternalRelativeLinks: false,
60
+ replaceQuotes: {}
61
+ }
62
+ };
63
+ export default config;
64
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAqCA,MAAM,MAAM,GAAW;IACrB,GAAG,EAAE,KAAK;IACV,SAAS,EAAE,IAAI;IACf,aAAa,EAAE,aAAa;IAC5B,qBAAqB,EAAE,sBAAsB;IAC7C,gBAAgB,EAAE,0BAA0B;IAC5C,iCAAiC,EAAE,IAAI;IACvC,UAAU,EAAE;QACV,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,EAAE;QACX,IAAI,EAAE,IAAI;KACX;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,EAAE;QACX,IAAI,EAAE,IAAI;KACX;IACD,eAAe,EAAE;QACf,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,GAAG;QACT,OAAO,EAAE,EAAE;QACX,IAAI,EAAE,KAAK;KACZ;IACD,UAAU,EAAE;QACV,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,GAAG;QACT,OAAO,EAAE,EAAE;QACX,IAAI,EAAE,IAAI;KACX;IACD,eAAe,EAAE;QACf,eAAe,EAAE;YACf,GAAG,EAAE;gBACH,MAAM,EAAE,IAAI;gBACZ,KAAK,EAAE,IAAI;gBACX,QAAQ,EAAE,IAAI;aACf;YACD,QAAQ,EAAE,EAAE;YACZ,IAAI,EAAE,EAAE;YACR,IAAI,EAAE,EAAE;SACT;QACD,wBAAwB,EAAE;YACxB,IAAI,EAAE,EAAE;SACT;QACD,kBAAkB,EAAE;YAClB,GAAG,EAAE,CAAC,MAAM,CAAC;SACd;QACD,iBAAiB,EAAE;YACjB,GAAG,EAAE,QAAQ;YACb,GAAG,EAAE,IAAI;SACV;QACD,eAAe,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,YAAY,CAAC;QACxE,kBAAkB,EAAE;YAClB,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY;YACzE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO;SACvF;QACD,mBAAmB,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC;QACxC,yBAAyB,EAAE,KAAK;QAChC,aAAa,EAAE,EAAE;KAClB;CACF,CAAA;AAED,eAAe,MAAM,CAAA"}
@@ -0,0 +1,37 @@
1
+ export declare function tidyHtml(element: HTMLElement): void;
2
+ export declare function normalizeTags(element: HTMLElement): void;
3
+ export declare function normalizeWhitespace(text: string): string;
4
+ export declare function cleanInternals(element: HTMLElement): void;
5
+ export declare function extractContent(element: HTMLElement | DocumentFragment | null | undefined, keepUiElements?: boolean): string;
6
+ export declare function getInnerHtmlOfFragment(documentFragment: DocumentFragment | null | undefined): string;
7
+ export declare function createFragmentFromString(htmlString: string): DocumentFragment;
8
+ export declare function adoptElement(node: Node | string, doc: Document): HTMLElement;
9
+ export declare function cloneRangeContents(range: Range): DocumentFragment;
10
+ export declare function unwrapInternalNodes(sibling: Node | null, keepUiElements?: boolean): void;
11
+ export declare function getTags(host: HTMLElement, range: Range, filterFunc?: ((node: Node) => boolean) | null): Node[];
12
+ export declare function getAncestorTags(host: HTMLElement, range: Range, filterFunc?: ((node: Node) => boolean) | null): Node[];
13
+ export declare function getTagsByName(host: HTMLElement, range: Range, tagName: string): Node[];
14
+ export declare function getTagsByNameAndAttributes(host: HTMLElement, range: Range, elem: HTMLElement): Node[];
15
+ export declare function areSameAttributes(attrs1: NamedNodeMap, attrs2: NamedNodeMap): boolean;
16
+ export declare function getInnerTags(range: Range, filterFunc?: ((node: Node) => boolean) | null): Node[];
17
+ export declare function getContainedTags(range: Range, filterFunc?: ((node: Node) => boolean) | null): Node[];
18
+ export declare function getTagNames(elements?: Node[]): string[];
19
+ export declare function isAffectedBy(host: HTMLElement, range: Range, tagName: string): boolean;
20
+ export declare function selectNodeContents(element: HTMLElement): Range;
21
+ export declare function isExactSelection(range: Range, elem: HTMLElement | any, visible?: boolean): boolean;
22
+ export declare function expandTo(host: HTMLElement, range: Range, elem: HTMLElement): Range;
23
+ export declare function toggleTag(host: HTMLElement, range: Range, elem: HTMLElement): Range;
24
+ export declare function isWrappable(range: Range): boolean;
25
+ export declare function forceWrap(host: HTMLElement, range: Range, elem: HTMLElement): Range;
26
+ export declare function wrap(range: Range, elem: HTMLElement | string): void;
27
+ export declare function unwrap(elem: HTMLElement | any): void;
28
+ export declare function removeFormattingElem(host: HTMLElement, range: Range, elem: HTMLElement): Range | undefined;
29
+ export declare function removeFormatting(host: HTMLElement, range: Range, selector: string | null): Range | undefined;
30
+ export declare function nuke(host: HTMLElement, range: Range, selector: string | null): void;
31
+ export declare function nukeElem(host: HTMLElement, range: Range, node: HTMLElement | null): void;
32
+ export declare function insertCharacter(range: Range, character: string, atStart: boolean): void;
33
+ export declare function surround(host: HTMLElement, range: Range, startCharacter: string, endCharacter?: string): Range;
34
+ export declare function deleteCharacter(host: HTMLElement, range: Range, character: string): Range;
35
+ export declare function containsString(range: Range, str: string): boolean;
36
+ export declare function nukeTag(host: HTMLElement, range: Range, tagName: string): void;
37
+ //# sourceMappingURL=content.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../src/content.ts"],"names":[],"mappings":"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"}