@atlaskit/adf-schema 19.2.3 → 20.0.0
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/CHANGELOG.md +40 -0
- package/dist/cjs/index.js +24 -6
- package/dist/cjs/schema/create-schema.js +10 -3
- package/dist/cjs/schema/default-schema.js +7 -13
- package/dist/cjs/schema/index.js +12 -6
- package/dist/cjs/schema/jira-schema.js +1 -1
- package/dist/cjs/schema/marks/fragment.js +77 -0
- package/dist/cjs/schema/marks/index.js +15 -1
- package/dist/cjs/schema/marks/link.js +1 -54
- package/dist/cjs/schema/marks/unsupported-mark.js +1 -0
- package/dist/cjs/schema/nodes/bodied-extension.js +1 -1
- package/dist/cjs/schema/nodes/caption.js +0 -1
- package/dist/cjs/schema/nodes/doc.js +1 -1
- package/dist/cjs/schema/nodes/emoji.js +4 -0
- package/dist/cjs/schema/nodes/expand.js +1 -1
- package/dist/cjs/schema/nodes/index.js +0 -6
- package/dist/cjs/schema/nodes/layout-column.js +1 -1
- package/dist/cjs/schema/nodes/media-single.js +1 -1
- package/dist/cjs/schema/nodes/panel.js +58 -53
- package/dist/cjs/schema/nodes/paragraph.js +168 -25
- package/dist/cjs/schema/nodes/tableNodes.js +3 -3
- package/dist/cjs/utils/index.js +12 -0
- package/dist/cjs/utils/url.js +62 -4
- package/dist/cjs/version.json +1 -1
- package/dist/es2019/index.js +2 -2
- package/dist/es2019/schema/create-schema.js +10 -5
- package/dist/es2019/schema/default-schema.js +6 -10
- package/dist/es2019/schema/index.js +2 -2
- package/dist/es2019/schema/jira-schema.js +1 -1
- package/dist/es2019/schema/marks/fragment.js +59 -0
- package/dist/es2019/schema/marks/index.js +2 -1
- package/dist/es2019/schema/marks/link.js +1 -49
- package/dist/es2019/schema/marks/unsupported-mark.js +1 -0
- package/dist/es2019/schema/nodes/bodied-extension.js +1 -1
- package/dist/es2019/schema/nodes/caption.js +0 -1
- package/dist/es2019/schema/nodes/doc.js +1 -1
- package/dist/es2019/schema/nodes/emoji.js +4 -0
- package/dist/es2019/schema/nodes/expand.js +1 -1
- package/dist/es2019/schema/nodes/index.js +1 -1
- package/dist/es2019/schema/nodes/layout-column.js +1 -1
- package/dist/es2019/schema/nodes/media-single.js +1 -1
- package/dist/es2019/schema/nodes/panel.js +42 -49
- package/dist/es2019/schema/nodes/paragraph.js +163 -25
- package/dist/es2019/schema/nodes/tableNodes.js +3 -3
- package/dist/es2019/utils/index.js +1 -1
- package/dist/es2019/utils/url.js +57 -4
- package/dist/es2019/version.json +1 -1
- package/dist/esm/index.js +2 -2
- package/dist/esm/schema/create-schema.js +10 -5
- package/dist/esm/schema/default-schema.js +6 -10
- package/dist/esm/schema/index.js +2 -2
- package/dist/esm/schema/jira-schema.js +1 -1
- package/dist/esm/schema/marks/fragment.js +64 -0
- package/dist/esm/schema/marks/index.js +2 -1
- package/dist/esm/schema/marks/link.js +1 -53
- package/dist/esm/schema/marks/unsupported-mark.js +1 -0
- package/dist/esm/schema/nodes/bodied-extension.js +1 -1
- package/dist/esm/schema/nodes/caption.js +0 -1
- package/dist/esm/schema/nodes/doc.js +1 -1
- package/dist/esm/schema/nodes/emoji.js +4 -0
- package/dist/esm/schema/nodes/expand.js +1 -1
- package/dist/esm/schema/nodes/index.js +1 -1
- package/dist/esm/schema/nodes/layout-column.js +1 -1
- package/dist/esm/schema/nodes/media-single.js +1 -1
- package/dist/esm/schema/nodes/panel.js +53 -51
- package/dist/esm/schema/nodes/paragraph.js +167 -25
- package/dist/esm/schema/nodes/tableNodes.js +3 -3
- package/dist/esm/utils/index.js +1 -1
- package/dist/esm/utils/url.js +57 -4
- package/dist/esm/version.json +1 -1
- package/dist/json-schema/v1/full.json +108 -73
- package/dist/json-schema/v1/stage-0.json +63 -26
- package/dist/types/index.d.ts +3 -3
- package/dist/types/schema/create-schema.d.ts +1 -0
- package/dist/types/schema/index.d.ts +3 -3
- package/dist/types/schema/marks/fragment.d.ts +30 -0
- package/dist/types/schema/marks/index.d.ts +2 -0
- package/dist/types/schema/marks/link.d.ts +3 -0
- package/dist/types/schema/nodes/block-card.d.ts +3 -0
- package/dist/types/schema/nodes/bodied-extension.d.ts +7 -5
- package/dist/types/schema/nodes/caption.d.ts +0 -1
- package/dist/types/schema/nodes/embed-card.d.ts +3 -0
- package/dist/types/schema/nodes/extension.d.ts +7 -5
- package/dist/types/schema/nodes/index.d.ts +1 -1
- package/dist/types/schema/nodes/inline-card.d.ts +0 -9
- package/dist/types/schema/nodes/inline-extension.d.ts +7 -5
- package/dist/types/schema/nodes/media-single.d.ts +0 -1
- package/dist/types/schema/nodes/panel.d.ts +1 -11
- package/dist/types/utils/index.d.ts +1 -1
- package/dist/types/utils/url.d.ts +7 -2
- package/json-schema/v1/full.json +108 -73
- package/json-schema/v1/stage-0.json +63 -26
- package/package.json +11 -8
- package/test-helpers/schema.ts +1 -0
@@ -14,4 +14,5 @@ export { indentation } from './indentation';
|
|
14
14
|
export { annotation, AnnotationMarkStates, buildDataAttributes as buildAnnotationMarkDataAttributes, AnnotationTypes } from './annotation';
|
15
15
|
export { unsupportedMark } from './unsupported-mark';
|
16
16
|
export { unsupportedNodeAttribute } from './unsupported-node-attributes';
|
17
|
-
export { dataConsumer, toJSON as dataConsumerToJSON } from './data-consumer';
|
17
|
+
export { dataConsumer, toJSON as dataConsumerToJSON } from './data-consumer';
|
18
|
+
export { fragment, toJSON as fragmentToJSON } from './fragment';
|
@@ -4,7 +4,6 @@ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (O
|
|
4
4
|
|
5
5
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
6
6
|
|
7
|
-
import { Fragment } from 'prosemirror-model';
|
8
7
|
import { LINK, COLOR } from '../groups';
|
9
8
|
import { isSafeUrl, normalizeUrl } from '../../utils/url';
|
10
9
|
|
@@ -26,32 +25,6 @@ var getLinkAttrs = function getLinkAttrs(attribute) {
|
|
26
25
|
};
|
27
26
|
};
|
28
27
|
|
29
|
-
var getLinkAttrsWithCheck = function getLinkAttrsWithCheck(attribute) {
|
30
|
-
return function (domNode) {
|
31
|
-
var dom = domNode;
|
32
|
-
var hasTextOnlyChildren = Array.from(dom.childNodes).every(function (node) {
|
33
|
-
return node.nodeType === Node.TEXT_NODE || node.nodeName === 'SPAN';
|
34
|
-
});
|
35
|
-
|
36
|
-
if (hasTextOnlyChildren) {
|
37
|
-
var href = dom.getAttribute(attribute) || '';
|
38
|
-
var attrs = {
|
39
|
-
__confluenceMetadata: dom.hasAttribute('__confluenceMetadata') ? JSON.parse(dom.getAttribute('__confluenceMetadata') || '') : undefined
|
40
|
-
};
|
41
|
-
|
42
|
-
if (isSafeUrl(href)) {
|
43
|
-
attrs.href = normalizeUrl(href);
|
44
|
-
} else {
|
45
|
-
return false;
|
46
|
-
}
|
47
|
-
|
48
|
-
return attrs;
|
49
|
-
}
|
50
|
-
|
51
|
-
return false;
|
52
|
-
};
|
53
|
-
};
|
54
|
-
|
55
28
|
export var link = {
|
56
29
|
excludes: "".concat(LINK, " ").concat(COLOR),
|
57
30
|
// ED-5844 No multiple links in media node
|
@@ -69,39 +42,14 @@ export var link = {
|
|
69
42
|
contentElement: function contentElement(node) {
|
70
43
|
var clone = node.cloneNode(true);
|
71
44
|
clone.removeAttribute('data-block-link');
|
45
|
+
clone.setAttribute('data-skip-paste', 'true');
|
72
46
|
var wrapper = document.createElement('div');
|
73
47
|
wrapper.appendChild(clone);
|
74
48
|
return wrapper;
|
75
49
|
}
|
76
50
|
}, {
|
77
51
|
tag: 'a[href]',
|
78
|
-
context: 'mediaSingle/|taskItem/|decisionItem/',
|
79
52
|
getAttrs: getLinkAttrs('href')
|
80
|
-
}, {
|
81
|
-
tag: 'a[href]',
|
82
|
-
getAttrs: getLinkAttrsWithCheck('href')
|
83
|
-
}, {
|
84
|
-
/**
|
85
|
-
* When links aren't wrapped in a paragraph and due to
|
86
|
-
* the odd nature of how our schema is set up, prosemirror will
|
87
|
-
* add the link to the paragraph node itself where it should be on
|
88
|
-
* the text node, this satisfies our schema because link is allowed
|
89
|
-
* in many places (e.g. listitem)
|
90
|
-
* This change comes through via prosemirror-model@1.9.1
|
91
|
-
*/
|
92
|
-
tag: 'a[href]',
|
93
|
-
getAttrs: getLinkAttrsWithCheck('href'),
|
94
|
-
getContent: function getContent(node, schema) {
|
95
|
-
if (node instanceof HTMLAnchorElement) {
|
96
|
-
var href = node.getAttribute('href');
|
97
|
-
var text = node.innerText;
|
98
|
-
return Fragment.from(schema.nodes.paragraph.createChecked(undefined, schema.text(text, [schema.marks.link.create({
|
99
|
-
href: href
|
100
|
-
})])));
|
101
|
-
}
|
102
|
-
|
103
|
-
return Fragment.empty;
|
104
|
-
}
|
105
53
|
}],
|
106
54
|
toDOM: function toDOM(node, isInline) {
|
107
55
|
var attrs = Object.keys(node.attrs).reduce(function (attrs, key) {
|
@@ -4,7 +4,7 @@ var createBodiedExtensionNodeSpec = function createBodiedExtensionNodeSpec() {
|
|
4
4
|
var nodeSpec = {
|
5
5
|
inline: false,
|
6
6
|
group: 'block',
|
7
|
-
marks: 'link dataConsumer',
|
7
|
+
marks: 'link dataConsumer fragment',
|
8
8
|
content: '(paragraph | panel | blockquote | orderedList | bulletList | rule | heading | codeBlock | mediaGroup | mediaSingle | decisionList | taskList | table | blockCard | extension | unsupportedBlock | embedCard)+',
|
9
9
|
defining: true,
|
10
10
|
selectable: true,
|
@@ -3,5 +3,5 @@
|
|
3
3
|
*/
|
4
4
|
export var doc = {
|
5
5
|
content: '(block|layoutSection)+',
|
6
|
-
marks: 'alignment breakout dataConsumer indentation link unsupportedMark unsupportedNodeAttribute'
|
6
|
+
marks: 'alignment breakout dataConsumer fragment indentation link unsupportedMark unsupportedNodeAttribute'
|
7
7
|
};
|
@@ -28,6 +28,10 @@ export var emoji = {
|
|
28
28
|
text: dom.getAttribute('data-emoji-text') || emoji.attrs.text.default
|
29
29
|
};
|
30
30
|
}
|
31
|
+
}, // Handle copy/paste beautiful panel from renderer />
|
32
|
+
{
|
33
|
+
tag: 'div.ak-editor-panel__icon',
|
34
|
+
ignore: true
|
31
35
|
}, // Handle copy/paste from old <ac:emoticon />
|
32
36
|
{
|
33
37
|
tag: 'img[data-emoticon-name]',
|
@@ -20,7 +20,7 @@ function getExpandAttrs(domNode) {
|
|
20
20
|
export var expand = {
|
21
21
|
inline: false,
|
22
22
|
group: 'block',
|
23
|
-
marks: 'link dataConsumer unsupportedMark unsupportedNodeAttribute',
|
23
|
+
marks: 'link dataConsumer fragment unsupportedMark unsupportedNodeAttribute',
|
24
24
|
content: '(paragraph | panel | blockquote | orderedList | bulletList | rule | heading | codeBlock | mediaGroup | mediaSingle | decisionList | taskList | table | blockCard | embedCard | extension | unsupportedBlock)+',
|
25
25
|
isolating: true,
|
26
26
|
selectable: true,
|
@@ -15,7 +15,7 @@ export { emoji } from './emoji';
|
|
15
15
|
export { image } from './image';
|
16
16
|
export { mention, toJSON as mentionToJSON } from './mention';
|
17
17
|
export { listItem } from './list-item';
|
18
|
-
export { panel,
|
18
|
+
export { panel, PanelType } from './panel';
|
19
19
|
export { text } from './text';
|
20
20
|
export { default as unknownBlock } from './unknown-block';
|
21
21
|
export { caption } from './caption';
|
@@ -4,7 +4,7 @@
|
|
4
4
|
export var layoutColumn = {
|
5
5
|
content: '(block|unsupportedBlock)+',
|
6
6
|
isolating: true,
|
7
|
-
marks: 'link alignment indentation dataConsumer unsupportedMark unsupportedNodeAttribute',
|
7
|
+
marks: 'link alignment indentation dataConsumer fragment unsupportedMark unsupportedNodeAttribute',
|
8
8
|
selectable: false,
|
9
9
|
attrs: {
|
10
10
|
width: {
|
@@ -23,7 +23,6 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
|
|
23
23
|
|
24
24
|
/**
|
25
25
|
* @name mediaSingle_caption_node
|
26
|
-
* @stage 0
|
27
26
|
*/
|
28
27
|
export var defaultAttrs = {
|
29
28
|
width: {
|
@@ -69,6 +68,7 @@ export var mediaSingle = {
|
|
69
68
|
}
|
70
69
|
};
|
71
70
|
export var mediaSingleWithCaption = _objectSpread(_objectSpread({}, mediaSingle), {}, {
|
71
|
+
atom: false,
|
72
72
|
content: 'media|unsupportedBlock+|media (caption|unsupportedBlock) unsupportedBlock*'
|
73
73
|
});
|
74
74
|
export var toJSON = function toJSON(node) {
|
@@ -1,3 +1,9 @@
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
2
|
+
|
3
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
4
|
+
|
5
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
6
|
+
|
1
7
|
export var PanelType;
|
2
8
|
|
3
9
|
(function (PanelType) {
|
@@ -10,12 +16,8 @@ export var PanelType;
|
|
10
16
|
PanelType["CUSTOM"] = "custom";
|
11
17
|
})(PanelType || (PanelType = {}));
|
12
18
|
|
13
|
-
|
14
|
-
|
15
|
-
group: 'block',
|
16
|
-
content: '(paragraph | heading | bulletList | orderedList | blockCard | unsupportedBlock)+',
|
17
|
-
marks: 'unsupportedMark unsupportedNodeAttribute',
|
18
|
-
attrs: {
|
19
|
+
var getDefaultAttrs = function getDefaultAttrs() {
|
20
|
+
var attrs = {
|
19
21
|
panelType: {
|
20
22
|
default: 'info'
|
21
23
|
},
|
@@ -25,52 +27,52 @@ export var customPanel = {
|
|
25
27
|
panelColor: {
|
26
28
|
default: null
|
27
29
|
}
|
28
|
-
}
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
30
|
+
};
|
31
|
+
return attrs;
|
32
|
+
};
|
33
|
+
|
34
|
+
var getDomAttrs = function getDomAttrs(nodeAttrs) {
|
35
|
+
var attrs = {
|
36
|
+
'data-panel-type': nodeAttrs.panelType,
|
37
|
+
'data-panel-icon': nodeAttrs.panelIcon,
|
38
|
+
'data-panel-color': nodeAttrs.panelColor
|
39
|
+
};
|
40
|
+
return attrs;
|
41
|
+
};
|
42
|
+
|
43
|
+
var getParseDOMAttrs = function getParseDOMAttrs(allowCustomPanel, dom) {
|
44
|
+
var parseDOMAttrs = {
|
45
|
+
panelType: dom.getAttribute('data-panel-type')
|
46
|
+
};
|
47
|
+
|
48
|
+
if (allowCustomPanel) {
|
49
|
+
parseDOMAttrs = _objectSpread(_objectSpread({}, parseDOMAttrs), {}, {
|
50
|
+
panelIcon: dom.getAttribute('data-panel-icon'),
|
51
|
+
panelColor: dom.getAttribute('data-panel-color')
|
52
|
+
});
|
53
|
+
} else {
|
54
|
+
parseDOMAttrs.panelType = parseDOMAttrs.panelType === PanelType.CUSTOM ? PanelType.INFO : parseDOMAttrs.panelType;
|
50
55
|
}
|
56
|
+
|
57
|
+
return parseDOMAttrs;
|
51
58
|
};
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
59
|
+
|
60
|
+
export var panel = function panel(allowCustomPanel) {
|
61
|
+
var panelNodeSpec = {
|
62
|
+
group: 'block',
|
63
|
+
content: '(paragraph | heading | bulletList | orderedList | blockCard | unsupportedBlock)+',
|
64
|
+
marks: 'unsupportedMark unsupportedNodeAttribute',
|
65
|
+
attrs: getDefaultAttrs(),
|
66
|
+
parseDOM: [{
|
67
|
+
tag: 'div[data-panel-type]',
|
68
|
+
getAttrs: function getAttrs(dom) {
|
69
|
+
return getParseDOMAttrs(allowCustomPanel, dom);
|
70
|
+
}
|
71
|
+
}],
|
72
|
+
toDOM: function toDOM(node) {
|
73
|
+
var attrs = getDomAttrs(node.attrs);
|
74
|
+
return ['div', attrs, ['div', {}, 0]];
|
67
75
|
}
|
68
|
-
}
|
69
|
-
|
70
|
-
var panelType = node.attrs.panelType;
|
71
|
-
var attrs = {
|
72
|
-
'data-panel-type': panelType
|
73
|
-
};
|
74
|
-
return ['div', attrs, ['div', {}, 0]];
|
75
|
-
}
|
76
|
+
};
|
77
|
+
return panelNodeSpec;
|
76
78
|
};
|
@@ -1,35 +1,177 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
1
|
+
import { Fragment } from 'prosemirror-model';
|
2
|
+
import { isSafeUrl } from '../../utils/url';
|
3
|
+
|
4
|
+
var getLinkContent = function getLinkContent(node, schema) {
|
5
|
+
if (!(node instanceof HTMLAnchorElement)) {
|
6
|
+
return Fragment.empty;
|
7
|
+
}
|
8
|
+
|
9
|
+
var href = node.getAttribute('href') || '';
|
10
|
+
var text = node.innerText;
|
11
|
+
|
12
|
+
if (!text || text.length === 0) {
|
13
|
+
return Fragment.empty;
|
14
|
+
}
|
15
|
+
|
16
|
+
var marks = isSafeUrl(href) ? [schema.marks.link.create({
|
17
|
+
href: href
|
18
|
+
})] : [];
|
19
|
+
var textNode = schema.text(text, marks);
|
20
|
+
return Fragment.from(textNode);
|
21
|
+
};
|
22
|
+
|
23
|
+
var blockTags = {
|
24
|
+
address: true,
|
25
|
+
article: true,
|
26
|
+
aside: true,
|
27
|
+
blockquote: true,
|
28
|
+
canvas: true,
|
29
|
+
dd: true,
|
30
|
+
div: true,
|
31
|
+
dl: true,
|
32
|
+
fieldset: true,
|
33
|
+
figcaption: true,
|
34
|
+
figure: true,
|
35
|
+
footer: true,
|
36
|
+
form: true,
|
37
|
+
h1: true,
|
38
|
+
h2: true,
|
39
|
+
h3: true,
|
40
|
+
h4: true,
|
41
|
+
h5: true,
|
42
|
+
h6: true,
|
43
|
+
header: true,
|
44
|
+
hgroup: true,
|
45
|
+
hr: true,
|
46
|
+
li: true,
|
47
|
+
noscript: true,
|
48
|
+
ol: true,
|
49
|
+
output: true,
|
50
|
+
p: true,
|
51
|
+
pre: true,
|
52
|
+
section: true,
|
53
|
+
table: true,
|
54
|
+
tfoot: true,
|
55
|
+
ul: true
|
56
|
+
};
|
57
|
+
|
58
|
+
var isListItemNode = function isListItemNode(node) {
|
59
|
+
return Boolean(node && node.nodeName.toLowerCase() === 'li');
|
60
|
+
};
|
61
|
+
|
62
|
+
var isTextNode = function isTextNode(node) {
|
63
|
+
return Boolean(node && node.nodeType === Node.TEXT_NODE);
|
64
|
+
};
|
65
|
+
|
66
|
+
var isImageNode = function isImageNode(node) {
|
67
|
+
return Boolean(node && node.nodeName.toLowerCase() === 'img');
|
68
|
+
};
|
69
|
+
|
70
|
+
var hasInlineImage = function hasInlineImage(node) {
|
71
|
+
if (!node) {
|
72
|
+
return false;
|
73
|
+
}
|
74
|
+
|
75
|
+
return Array.from(node.childNodes).some(function (child) {
|
76
|
+
var isImage = isImageNode(child);
|
77
|
+
|
78
|
+
if (!isImage && child.childNodes) {
|
79
|
+
return Array.from(node.childNodes).some(function (node) {
|
80
|
+
return hasInlineImage(node);
|
81
|
+
});
|
82
|
+
}
|
83
|
+
|
84
|
+
return isImage;
|
85
|
+
});
|
86
|
+
};
|
87
|
+
|
88
|
+
var hasWhiteSpacePre = function hasWhiteSpacePre(node) {
|
89
|
+
return Boolean(node instanceof HTMLElement && node.style.whiteSpace === 'pre');
|
90
|
+
};
|
91
|
+
|
92
|
+
var hasFontFamilyMonospace = function hasFontFamilyMonospace(node) {
|
93
|
+
return Boolean(node instanceof HTMLElement && node.style.fontFamily.includes('monospace'));
|
94
|
+
};
|
95
|
+
|
96
|
+
var isBlockLevelNode = function isBlockLevelNode(node) {
|
97
|
+
return Boolean(node && blockTags.hasOwnProperty(node.nodeName.toLowerCase()));
|
98
|
+
};
|
99
|
+
|
100
|
+
var NOT_INTERNAL_LINKS = [':not([data-inline-card])', ':not([data-block-card])', ':not([data-block-link])', ':not([data-skip-paste])'].join('');
|
101
|
+
var ANCHOR_LINK = "a[href]".concat(NOT_INTERNAL_LINKS);
|
102
|
+
var NOT_INTERNAL_ELEMENTS = [':not(.code-block)', ':not([data-node-type])', ':not([data-embed-card])', ':not([data-layout-section])', ':not([data-pm-slice])', ':not([data-mark-type])'].join('');
|
25
103
|
var pDOM = ['p', 0];
|
26
104
|
export var paragraph = {
|
27
105
|
selectable: false,
|
28
106
|
content: 'inline*',
|
29
107
|
group: 'block',
|
30
|
-
marks: 'strong code em link strike subsup textColor typeAheadQuery underline confluenceInlineComment action annotation unsupportedMark unsupportedNodeAttribute dataConsumer',
|
108
|
+
marks: 'strong code em link strike subsup textColor typeAheadQuery underline confluenceInlineComment action annotation unsupportedMark unsupportedNodeAttribute dataConsumer fragment',
|
31
109
|
parseDOM: [{
|
32
110
|
tag: 'p'
|
111
|
+
}, {
|
112
|
+
tag: "div".concat(NOT_INTERNAL_ELEMENTS, ", li:not([data-pm-slice])"),
|
113
|
+
priority: 100,
|
114
|
+
getAttrs: function getAttrs(node) {
|
115
|
+
if (!(node instanceof Node)) {
|
116
|
+
return false;
|
117
|
+
}
|
118
|
+
|
119
|
+
var isCodeBlock = hasWhiteSpacePre(node) || hasFontFamilyMonospace(node);
|
120
|
+
|
121
|
+
if (isCodeBlock || !node.hasChildNodes()) {
|
122
|
+
return false;
|
123
|
+
}
|
124
|
+
|
125
|
+
var hasInlineChildren = Array.from(node.childNodes).every(function (child) {
|
126
|
+
return !isBlockLevelNode(child) && // IMG is considered block for mediaSingle
|
127
|
+
!isImageNode(child);
|
128
|
+
});
|
129
|
+
|
130
|
+
if (!hasInlineChildren) {
|
131
|
+
return false;
|
132
|
+
}
|
133
|
+
|
134
|
+
if ( // We can skip this rule for pure list items
|
135
|
+
isListItemNode(node) && Array.from(node.childNodes).every(isTextNode)) {
|
136
|
+
return false;
|
137
|
+
}
|
138
|
+
|
139
|
+
return null;
|
140
|
+
}
|
141
|
+
}, {
|
142
|
+
tag: ":not(span) + ".concat(ANCHOR_LINK),
|
143
|
+
priority: 100,
|
144
|
+
getContent: getLinkContent
|
145
|
+
}, {
|
146
|
+
tag: ":not(span) > ".concat(ANCHOR_LINK, ":first-child"),
|
147
|
+
getAttrs: function getAttrs(node) {
|
148
|
+
if (!(node instanceof Node)) {
|
149
|
+
return false;
|
150
|
+
}
|
151
|
+
|
152
|
+
if (isBlockLevelNode(node.firstChild)) {
|
153
|
+
return null;
|
154
|
+
}
|
155
|
+
|
156
|
+
if (hasInlineImage(node)) {
|
157
|
+
return false;
|
158
|
+
}
|
159
|
+
|
160
|
+
var isNextSiblingValid = node.nextSibling === null || node.nextSibling instanceof Text && (node.nextSibling.textContent || '').trim().length === 0;
|
161
|
+
|
162
|
+
if (isNextSiblingValid) {
|
163
|
+
return null;
|
164
|
+
} // This rule should not match when there is any sibling after the anchor
|
165
|
+
|
166
|
+
|
167
|
+
if (!isBlockLevelNode(node.nextSibling)) {
|
168
|
+
return false;
|
169
|
+
}
|
170
|
+
|
171
|
+
return null;
|
172
|
+
},
|
173
|
+
priority: 100,
|
174
|
+
getContent: getLinkContent
|
33
175
|
}],
|
34
176
|
toDOM: function toDOM() {
|
35
177
|
return pDOM;
|
@@ -107,7 +107,7 @@ var createTableSpec = function createTableSpec() {
|
|
107
107
|
var tableNodeSpec = {
|
108
108
|
content: 'tableRow+',
|
109
109
|
attrs: attrs,
|
110
|
-
marks: 'unsupportedMark unsupportedNodeAttribute',
|
110
|
+
marks: 'fragment unsupportedMark unsupportedNodeAttribute',
|
111
111
|
tableRole: 'table',
|
112
112
|
isolating: true,
|
113
113
|
selectable: false,
|
@@ -189,7 +189,7 @@ export var tableCell = {
|
|
189
189
|
content: '(paragraph | panel | blockquote | orderedList | bulletList | rule | heading | codeBlock | mediaSingle | mediaGroup | decisionList | taskList | blockCard | embedCard | extension | nestedExpand | unsupportedBlock)+',
|
190
190
|
attrs: cellAttrs,
|
191
191
|
tableRole: 'cell',
|
192
|
-
marks: 'link alignment dataConsumer unsupportedMark unsupportedNodeAttribute',
|
192
|
+
marks: 'link alignment dataConsumer fragment unsupportedMark unsupportedNodeAttribute',
|
193
193
|
isolating: true,
|
194
194
|
parseDOM: [// Ignore number cell copied from renderer
|
195
195
|
{
|
@@ -222,7 +222,7 @@ export var tableHeader = {
|
|
222
222
|
attrs: cellAttrs,
|
223
223
|
tableRole: 'header_cell',
|
224
224
|
isolating: true,
|
225
|
-
marks: 'link alignment dataConsumer unsupportedMark unsupportedNodeAttribute',
|
225
|
+
marks: 'link alignment dataConsumer fragment unsupportedMark unsupportedNodeAttribute',
|
226
226
|
parseDOM: [{
|
227
227
|
tag: 'th',
|
228
228
|
getAttrs: function getAttrs(dom) {
|
package/dist/esm/utils/index.js
CHANGED
@@ -1,4 +1,4 @@
|
|
1
1
|
export { acNameToEmoji, acShortcutToEmoji, emojiIdToAcName, getEmojiAcName } from './confluence/emoji';
|
2
2
|
export { generateUuid, uuid } from './uuid';
|
3
3
|
export { B100, B400, B50, B500, B75, G200, G300, G400, G50, G500, G75, N0, N20, N200, N30, N300, N40, N50, N500, N60, N80, N800, N90, P100, P300, P400, P50, P500, P75, R100, R300, R400, R50, R500, R75, T100, T300, T50, T500, T75, Y200, Y400, Y50, Y500, Y75, hexToRgb, hexToRgba, isHex, isRgb, normalizeHexColor, rgbToHex } from './colors';
|
4
|
-
export { getLinkMatch, isSafeUrl, normalizeUrl } from './url';
|
4
|
+
export { getLinkMatch, isSafeUrl, normalizeUrl, linkify, linkifyMatch } from './url';
|
package/dist/esm/utils/url.js
CHANGED
@@ -1,14 +1,67 @@
|
|
1
1
|
import LinkifyIt from 'linkify-it';
|
2
2
|
var whitelistedURLPatterns = [/^https?:\/\//im, /^ftps?:\/\//im, /^\//im, /^mailto:/im, /^skype:/im, /^callto:/im, /^facetime:/im, /^git:/im, /^irc6?:/im, /^news:/im, /^nntp:/im, /^feed:/im, /^cvs:/im, /^svn:/im, /^mvn:/im, /^ssh:/im, /^scp:\/\//im, /^sftp:\/\//im, /^itms:/im, /^notes:/im, /^hipchat:\/\//im, /^sourcetree:/im, /^urn:/im, /^tel:/im, /^xmpp:/im, /^telnet:/im, /^vnc:/im, /^rdp:/im, /^whatsapp:/im, /^slack:/im, /^sips?:/im, /^magnet:/im, /^#/im];
|
3
3
|
export var isSafeUrl = function isSafeUrl(url) {
|
4
|
+
var urlTrimmed = url.trim();
|
5
|
+
|
6
|
+
if (urlTrimmed.length === 0) {
|
7
|
+
return true;
|
8
|
+
}
|
9
|
+
|
4
10
|
return whitelistedURLPatterns.some(function (p) {
|
5
|
-
return p.test(
|
11
|
+
return p.test(urlTrimmed);
|
6
12
|
});
|
7
13
|
};
|
8
|
-
var linkify = LinkifyIt();
|
14
|
+
export var linkify = LinkifyIt();
|
9
15
|
linkify.add('sourcetree:', 'http:');
|
16
|
+
var tlds = 'biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф'.split('|');
|
17
|
+
var tlds2Char = 'a[cdefgilmnoqrtuwxz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvwxyz]|d[ejkmoz]|e[cegrstu]|f[ijkmor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdeghklmnopqrtuvwxyz]|n[acefgilopruz]|om|p[aefghkmnrtw]|qa|r[eosuw]|s[abcdegijklmnrtuvxyz]|t[cdfghjklmnortvwz]|u[agksyz]|v[aceginu]|w[fs]|y[et]|z[amw]';
|
18
|
+
tlds.push(tlds2Char);
|
19
|
+
linkify.tlds(tlds, false);
|
20
|
+
export var LINK_REGEXP = /(https?|ftp):\/\/[^\s]+/;
|
21
|
+
export var linkifyMatch = function linkifyMatch(text) {
|
22
|
+
var matches = [];
|
23
|
+
|
24
|
+
if (!LINK_REGEXP.test(text)) {
|
25
|
+
return matches;
|
26
|
+
}
|
27
|
+
|
28
|
+
var startpos = 0;
|
29
|
+
var substr;
|
30
|
+
|
31
|
+
while (substr = text.substr(startpos)) {
|
32
|
+
var link = (substr.match(LINK_REGEXP) || [''])[0];
|
33
|
+
|
34
|
+
if (link) {
|
35
|
+
var index = substr.search(LINK_REGEXP);
|
36
|
+
var start = index >= 0 ? index + startpos : index;
|
37
|
+
var end = start + link.length;
|
38
|
+
matches.push({
|
39
|
+
index: start,
|
40
|
+
lastIndex: end,
|
41
|
+
raw: link,
|
42
|
+
url: link,
|
43
|
+
text: link,
|
44
|
+
schema: ''
|
45
|
+
});
|
46
|
+
startpos += end;
|
47
|
+
} else {
|
48
|
+
break;
|
49
|
+
}
|
50
|
+
}
|
51
|
+
|
52
|
+
return matches;
|
53
|
+
};
|
10
54
|
export function getLinkMatch(str) {
|
11
|
-
|
55
|
+
if (!str) {
|
56
|
+
return null;
|
57
|
+
}
|
58
|
+
|
59
|
+
var match = linkifyMatch(str);
|
60
|
+
|
61
|
+
if (!match.length) {
|
62
|
+
match = linkify.match(str);
|
63
|
+
}
|
64
|
+
|
12
65
|
return match && match[0];
|
13
66
|
}
|
14
67
|
/**
|
@@ -17,5 +70,5 @@ export function getLinkMatch(str) {
|
|
17
70
|
|
18
71
|
export function normalizeUrl(url) {
|
19
72
|
var match = getLinkMatch(url);
|
20
|
-
return match && match.url ||
|
73
|
+
return match && match.url || '';
|
21
74
|
}
|
package/dist/esm/version.json
CHANGED