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.
- package/LICENSE +21 -0
- package/README.md +571 -0
- package/dist/editable.umd.cjs +2 -0
- package/dist/editable.umd.cjs.map +1 -0
- package/lib/block.d.ts +13 -0
- package/lib/block.d.ts.map +1 -0
- package/lib/block.js +58 -0
- package/lib/block.js.map +1 -0
- package/lib/clipboard.d.ts +22 -0
- package/lib/clipboard.d.ts.map +1 -0
- package/lib/clipboard.js +154 -0
- package/lib/clipboard.js.map +1 -0
- package/lib/config.d.ts +37 -0
- package/lib/config.d.ts.map +1 -0
- package/lib/config.js +64 -0
- package/lib/config.js.map +1 -0
- package/lib/content.d.ts +37 -0
- package/lib/content.d.ts.map +1 -0
- package/lib/content.js +526 -0
- package/lib/content.js.map +1 -0
- package/lib/core.d.ts +97 -0
- package/lib/core.d.ts.map +1 -0
- package/lib/core.js +261 -0
- package/lib/core.js.map +1 -0
- package/lib/create-default-behavior.d.ts +31 -0
- package/lib/create-default-behavior.d.ts.map +1 -0
- package/lib/create-default-behavior.js +178 -0
- package/lib/create-default-behavior.js.map +1 -0
- package/lib/create-default-events.d.ts +152 -0
- package/lib/create-default-events.d.ts.map +1 -0
- package/lib/create-default-events.js +183 -0
- package/lib/create-default-events.js.map +1 -0
- package/lib/cursor.d.ts +68 -0
- package/lib/cursor.d.ts.map +1 -0
- package/lib/cursor.js +354 -0
- package/lib/cursor.js.map +1 -0
- package/lib/dispatcher.d.ts +78 -0
- package/lib/dispatcher.d.ts.map +1 -0
- package/lib/dispatcher.js +416 -0
- package/lib/dispatcher.js.map +1 -0
- package/lib/eventable.d.ts +2 -0
- package/lib/eventable.d.ts.map +1 -0
- package/lib/eventable.js +104 -0
- package/lib/eventable.js.map +1 -0
- package/lib/feature-detection.d.ts +12 -0
- package/lib/feature-detection.d.ts.map +1 -0
- package/lib/feature-detection.js +42 -0
- package/lib/feature-detection.js.map +1 -0
- package/lib/highlight-support.d.ts +24 -0
- package/lib/highlight-support.d.ts.map +1 -0
- package/lib/highlight-support.js +172 -0
- package/lib/highlight-support.js.map +1 -0
- package/lib/highlight-text.d.ts +21 -0
- package/lib/highlight-text.d.ts.map +1 -0
- package/lib/highlight-text.js +147 -0
- package/lib/highlight-text.js.map +1 -0
- package/lib/keyboard.d.ts +33 -0
- package/lib/keyboard.d.ts.map +1 -0
- package/lib/keyboard.js +189 -0
- package/lib/keyboard.js.map +1 -0
- package/lib/monitored-highlighting.d.ts +28 -0
- package/lib/monitored-highlighting.d.ts.map +1 -0
- package/lib/monitored-highlighting.js +194 -0
- package/lib/monitored-highlighting.js.map +1 -0
- package/lib/node-iterator.d.ts +16 -0
- package/lib/node-iterator.d.ts.map +1 -0
- package/lib/node-iterator.js +97 -0
- package/lib/node-iterator.js.map +1 -0
- package/lib/node-type.d.ts +13 -0
- package/lib/node-type.d.ts.map +1 -0
- package/lib/node-type.js +15 -0
- package/lib/node-type.js.map +1 -0
- package/lib/parser.d.ts +89 -0
- package/lib/parser.d.ts.map +1 -0
- package/lib/parser.js +251 -0
- package/lib/parser.js.map +1 -0
- package/lib/plugins/highlighting/match-collection.d.ts +7 -0
- package/lib/plugins/highlighting/match-collection.d.ts.map +1 -0
- package/lib/plugins/highlighting/match-collection.js +62 -0
- package/lib/plugins/highlighting/match-collection.js.map +1 -0
- package/lib/plugins/highlighting/spellcheck-service.d.ts +12 -0
- package/lib/plugins/highlighting/spellcheck-service.d.ts.map +1 -0
- package/lib/plugins/highlighting/spellcheck-service.js +24 -0
- package/lib/plugins/highlighting/spellcheck-service.js.map +1 -0
- package/lib/plugins/highlighting/text-search.d.ts +10 -0
- package/lib/plugins/highlighting/text-search.d.ts.map +1 -0
- package/lib/plugins/highlighting/text-search.js +92 -0
- package/lib/plugins/highlighting/text-search.js.map +1 -0
- package/lib/plugins/highlighting/whitespace-highlighting.d.ts +14 -0
- package/lib/plugins/highlighting/whitespace-highlighting.d.ts.map +1 -0
- package/lib/plugins/highlighting/whitespace-highlighting.js +52 -0
- package/lib/plugins/highlighting/whitespace-highlighting.js.map +1 -0
- package/lib/quotes.d.ts +8 -0
- package/lib/quotes.d.ts.map +1 -0
- package/lib/quotes.js +170 -0
- package/lib/quotes.js.map +1 -0
- package/lib/range-container.d.ts +22 -0
- package/lib/range-container.d.ts.map +1 -0
- package/lib/range-container.js +52 -0
- package/lib/range-container.js.map +1 -0
- package/lib/range-save-restore.d.ts +13 -0
- package/lib/range-save-restore.d.ts.map +1 -0
- package/lib/range-save-restore.js +153 -0
- package/lib/range-save-restore.js.map +1 -0
- package/lib/selection-watcher.d.ts +55 -0
- package/lib/selection-watcher.d.ts.map +1 -0
- package/lib/selection-watcher.js +126 -0
- package/lib/selection-watcher.js.map +1 -0
- package/lib/selection.d.ts +74 -0
- package/lib/selection.d.ts.map +1 -0
- package/lib/selection.js +341 -0
- package/lib/selection.js.map +1 -0
- package/lib/smartQuotes.d.ts +16 -0
- package/lib/smartQuotes.d.ts.map +1 -0
- package/lib/smartQuotes.js +92 -0
- package/lib/smartQuotes.js.map +1 -0
- package/lib/util/binary_search.d.ts +23 -0
- package/lib/util/binary_search.d.ts.map +1 -0
- package/lib/util/binary_search.js +137 -0
- package/lib/util/binary_search.js.map +1 -0
- package/lib/util/clone-deep.d.ts +8 -0
- package/lib/util/clone-deep.d.ts.map +1 -0
- package/lib/util/clone-deep.js +10 -0
- package/lib/util/clone-deep.js.map +1 -0
- package/lib/util/dom.d.ts +43 -0
- package/lib/util/dom.d.ts.map +1 -0
- package/lib/util/dom.js +272 -0
- package/lib/util/dom.js.map +1 -0
- package/lib/util/element.d.ts +10 -0
- package/lib/util/element.d.ts.map +1 -0
- package/lib/util/element.js +29 -0
- package/lib/util/element.js.map +1 -0
- package/lib/util/error.d.ts +2 -0
- package/lib/util/error.d.ts.map +1 -0
- package/lib/util/error.js +16 -0
- package/lib/util/error.js.map +1 -0
- package/lib/util/log.d.ts +2 -0
- package/lib/util/log.d.ts.map +1 -0
- package/lib/util/log.js +18 -0
- package/lib/util/log.js.map +1 -0
- package/lib/util/merge.d.ts +6 -0
- package/lib/util/merge.d.ts.map +1 -0
- package/lib/util/merge.js +31 -0
- package/lib/util/merge.js.map +1 -0
- package/lib/util/string.d.ts +25 -0
- package/lib/util/string.d.ts.map +1 -0
- package/lib/util/string.js +68 -0
- package/lib/util/string.js.map +1 -0
- package/lib/util/viewport.d.ts +6 -0
- package/lib/util/viewport.d.ts.map +1 -0
- package/lib/util/viewport.js +8 -0
- package/lib/util/viewport.js.map +1 -0
- 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
|
package/lib/block.js.map
ADDED
|
@@ -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"}
|
package/lib/clipboard.js
ADDED
|
@@ -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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"}
|
package/lib/config.d.ts
ADDED
|
@@ -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"}
|
package/lib/content.d.ts
ADDED
|
@@ -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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"}
|