@atlaskit/editor-common 76.34.0 → 76.36.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 +53 -1
- package/dist/cjs/collab/index.js +27 -2
- package/dist/cjs/core-utils/document-logger.js +171 -0
- package/dist/cjs/core-utils/index.js +8 -1
- package/dist/cjs/extensibility/Extension/Extension/index.js +151 -0
- package/dist/cjs/extensibility/Extension/Extension/styles.js +17 -0
- package/dist/cjs/extensibility/Extension/InlineExtension/index.js +50 -0
- package/dist/cjs/extensibility/Extension/InlineExtension/styles.js +12 -0
- package/dist/cjs/extensibility/Extension/Lozenge.js +95 -0
- package/dist/cjs/extensibility/Extension/styles.js +30 -0
- package/dist/cjs/extensibility/Extension.js +79 -0
- package/dist/cjs/extensibility/ExtensionComponent.js +252 -0
- package/dist/cjs/extensibility/ExtensionNodeWrapper.js +21 -0
- package/dist/cjs/extensibility/MultiBodiedExtension/index.js +264 -0
- package/dist/cjs/extensibility/extensionNodeView.js +91 -0
- package/dist/cjs/extensibility/index.js +42 -0
- package/dist/cjs/extensibility/types.js +5 -0
- package/dist/cjs/i18n/cs.js +5 -2
- package/dist/cjs/i18n/da.js +5 -2
- package/dist/cjs/i18n/de.js +5 -2
- package/dist/cjs/i18n/en.js +7 -1
- package/dist/cjs/i18n/en_GB.js +8 -2
- package/dist/cjs/i18n/en_ZZ.js +8 -2
- package/dist/cjs/i18n/es.js +5 -2
- package/dist/cjs/i18n/fi.js +5 -2
- package/dist/cjs/i18n/fr.js +5 -2
- package/dist/cjs/i18n/hu.js +5 -2
- package/dist/cjs/i18n/it.js +5 -2
- package/dist/cjs/i18n/ja.js +1 -2
- package/dist/cjs/i18n/ko.js +5 -2
- package/dist/cjs/i18n/nb.js +1 -2
- package/dist/cjs/i18n/nl.js +5 -2
- package/dist/cjs/i18n/pl.js +5 -2
- package/dist/cjs/i18n/pt_BR.js +5 -2
- package/dist/cjs/i18n/ru.js +5 -2
- package/dist/cjs/i18n/sv.js +5 -2
- package/dist/cjs/i18n/th.js +5 -2
- package/dist/cjs/i18n/tr.js +5 -2
- package/dist/cjs/i18n/uk.js +5 -2
- package/dist/cjs/i18n/vi.js +5 -2
- package/dist/cjs/i18n/zh.js +5 -2
- package/dist/cjs/i18n/zh_TW.js +5 -2
- package/dist/cjs/link/LinkPicker/HyperlinkAddToolbar/HyperlinkAddToolbar.js +2 -1
- package/dist/cjs/link/LinkPicker/HyperlinkAddToolbar/index.js +1 -2
- package/dist/cjs/monitoring/error.js +3 -2
- package/dist/cjs/ui/DropList/index.js +1 -1
- package/dist/es2019/collab/index.js +54 -1
- package/dist/es2019/core-utils/document-logger.js +161 -0
- package/dist/es2019/core-utils/index.js +2 -1
- package/dist/es2019/extensibility/Extension/Extension/index.js +155 -0
- package/dist/es2019/extensibility/Extension/Extension/styles.js +42 -0
- package/dist/es2019/extensibility/Extension/InlineExtension/index.js +26 -0
- package/dist/es2019/extensibility/Extension/InlineExtension/styles.js +26 -0
- package/dist/es2019/extensibility/Extension/Lozenge.js +71 -0
- package/dist/es2019/extensibility/Extension/styles.js +62 -0
- package/dist/es2019/extensibility/Extension.js +52 -0
- package/dist/es2019/extensibility/ExtensionComponent.js +204 -0
- package/dist/es2019/extensibility/ExtensionNodeWrapper.js +13 -0
- package/dist/es2019/extensibility/MultiBodiedExtension/index.js +283 -0
- package/dist/es2019/extensibility/extensionNodeView.js +62 -0
- package/dist/es2019/extensibility/index.js +4 -0
- package/dist/es2019/extensibility/types.js +1 -0
- package/dist/es2019/i18n/cs.js +5 -2
- package/dist/es2019/i18n/da.js +5 -2
- package/dist/es2019/i18n/de.js +5 -2
- package/dist/es2019/i18n/en.js +7 -1
- package/dist/es2019/i18n/en_GB.js +8 -2
- package/dist/es2019/i18n/en_ZZ.js +8 -2
- package/dist/es2019/i18n/es.js +5 -2
- package/dist/es2019/i18n/fi.js +5 -2
- package/dist/es2019/i18n/fr.js +5 -2
- package/dist/es2019/i18n/hu.js +5 -2
- package/dist/es2019/i18n/it.js +5 -2
- package/dist/es2019/i18n/ja.js +1 -2
- package/dist/es2019/i18n/ko.js +5 -2
- package/dist/es2019/i18n/nb.js +1 -2
- package/dist/es2019/i18n/nl.js +5 -2
- package/dist/es2019/i18n/pl.js +5 -2
- package/dist/es2019/i18n/pt_BR.js +5 -2
- package/dist/es2019/i18n/ru.js +5 -2
- package/dist/es2019/i18n/sv.js +5 -2
- package/dist/es2019/i18n/th.js +5 -2
- package/dist/es2019/i18n/tr.js +5 -2
- package/dist/es2019/i18n/uk.js +5 -2
- package/dist/es2019/i18n/vi.js +5 -2
- package/dist/es2019/i18n/zh.js +5 -2
- package/dist/es2019/i18n/zh_TW.js +5 -2
- package/dist/es2019/link/LinkPicker/HyperlinkAddToolbar/HyperlinkAddToolbar.js +2 -1
- package/dist/es2019/link/LinkPicker/HyperlinkAddToolbar/index.js +1 -4
- package/dist/es2019/monitoring/error.js +3 -2
- package/dist/es2019/ui/DropList/index.js +1 -1
- package/dist/esm/collab/index.js +23 -1
- package/dist/esm/core-utils/document-logger.js +165 -0
- package/dist/esm/core-utils/index.js +2 -1
- package/dist/esm/extensibility/Extension/Extension/index.js +146 -0
- package/dist/esm/extensibility/Extension/Extension/styles.js +10 -0
- package/dist/esm/extensibility/Extension/InlineExtension/index.js +43 -0
- package/dist/esm/extensibility/Extension/InlineExtension/styles.js +5 -0
- package/dist/esm/extensibility/Extension/Lozenge.js +90 -0
- package/dist/esm/extensibility/Extension/styles.js +11 -0
- package/dist/esm/extensibility/Extension.js +69 -0
- package/dist/esm/extensibility/ExtensionComponent.js +243 -0
- package/dist/esm/extensibility/ExtensionNodeWrapper.js +14 -0
- package/dist/esm/extensibility/MultiBodiedExtension/index.js +257 -0
- package/dist/esm/extensibility/extensionNodeView.js +83 -0
- package/dist/esm/extensibility/index.js +4 -0
- package/dist/esm/extensibility/types.js +1 -0
- package/dist/esm/i18n/cs.js +5 -2
- package/dist/esm/i18n/da.js +5 -2
- package/dist/esm/i18n/de.js +5 -2
- package/dist/esm/i18n/en.js +7 -1
- package/dist/esm/i18n/en_GB.js +8 -2
- package/dist/esm/i18n/en_ZZ.js +8 -2
- package/dist/esm/i18n/es.js +5 -2
- package/dist/esm/i18n/fi.js +5 -2
- package/dist/esm/i18n/fr.js +5 -2
- package/dist/esm/i18n/hu.js +5 -2
- package/dist/esm/i18n/it.js +5 -2
- package/dist/esm/i18n/ja.js +1 -2
- package/dist/esm/i18n/ko.js +5 -2
- package/dist/esm/i18n/nb.js +1 -2
- package/dist/esm/i18n/nl.js +5 -2
- package/dist/esm/i18n/pl.js +5 -2
- package/dist/esm/i18n/pt_BR.js +5 -2
- package/dist/esm/i18n/ru.js +5 -2
- package/dist/esm/i18n/sv.js +5 -2
- package/dist/esm/i18n/th.js +5 -2
- package/dist/esm/i18n/tr.js +5 -2
- package/dist/esm/i18n/uk.js +5 -2
- package/dist/esm/i18n/vi.js +5 -2
- package/dist/esm/i18n/zh.js +5 -2
- package/dist/esm/i18n/zh_TW.js +5 -2
- package/dist/esm/link/LinkPicker/HyperlinkAddToolbar/HyperlinkAddToolbar.js +2 -1
- package/dist/esm/link/LinkPicker/HyperlinkAddToolbar/index.js +1 -2
- package/dist/esm/monitoring/error.js +3 -2
- package/dist/esm/ui/DropList/index.js +1 -1
- package/dist/types/collab/index.d.ts +7 -0
- package/dist/types/core-utils/document-logger.d.ts +6 -0
- package/dist/types/core-utils/index.d.ts +1 -0
- package/dist/types/extensibility/Extension/Extension/index.d.ts +108 -0
- package/dist/types/extensibility/Extension/Extension/styles.d.ts +5 -0
- package/dist/types/extensibility/Extension/InlineExtension/index.d.ts +12 -0
- package/dist/types/extensibility/Extension/InlineExtension/styles.d.ts +1 -0
- package/dist/types/extensibility/Extension/Lozenge.d.ts +14 -0
- package/dist/types/extensibility/Extension/styles.d.ts +7 -0
- package/dist/types/extensibility/Extension.d.ts +29 -0
- package/dist/types/extensibility/ExtensionComponent.d.ts +53 -0
- package/dist/types/extensibility/ExtensionNodeWrapper.d.ts +14 -0
- package/dist/types/extensibility/MultiBodiedExtension/index.d.ts +26 -0
- package/dist/types/extensibility/extensionNodeView.d.ts +31 -0
- package/dist/types/extensibility/index.d.ts +4 -0
- package/dist/types/extensibility/types.d.ts +6 -0
- package/dist/types/i18n/cs.d.ts +5 -2
- package/dist/types/i18n/da.d.ts +5 -2
- package/dist/types/i18n/de.d.ts +5 -2
- package/dist/types/i18n/en.d.ts +7 -1
- package/dist/types/i18n/en_GB.d.ts +7 -1
- package/dist/types/i18n/en_ZZ.d.ts +7 -1
- package/dist/types/i18n/es.d.ts +5 -2
- package/dist/types/i18n/fi.d.ts +5 -2
- package/dist/types/i18n/fr.d.ts +5 -2
- package/dist/types/i18n/hu.d.ts +5 -2
- package/dist/types/i18n/it.d.ts +5 -2
- package/dist/types/i18n/ja.d.ts +1 -2
- package/dist/types/i18n/ko.d.ts +5 -2
- package/dist/types/i18n/nb.d.ts +1 -2
- package/dist/types/i18n/nl.d.ts +5 -2
- package/dist/types/i18n/pl.d.ts +5 -2
- package/dist/types/i18n/pt_BR.d.ts +5 -2
- package/dist/types/i18n/ru.d.ts +5 -2
- package/dist/types/i18n/sv.d.ts +5 -2
- package/dist/types/i18n/th.d.ts +5 -2
- package/dist/types/i18n/tr.d.ts +5 -2
- package/dist/types/i18n/uk.d.ts +5 -2
- package/dist/types/i18n/vi.d.ts +5 -2
- package/dist/types/i18n/zh.d.ts +5 -2
- package/dist/types/i18n/zh_TW.d.ts +5 -2
- package/dist/types/link/LinkPicker/HyperlinkAddToolbar/index.d.ts +7 -7
- package/dist/types/types/floating-toolbar.d.ts +1 -1
- package/dist/types/types/hyperlink.d.ts +1 -0
- package/dist/types/types/index.d.ts +1 -1
- package/dist/types/types/next-editor-plugin.d.ts +0 -1
- package/dist/types/ui/DropList/index.d.ts +1 -1
- package/dist/types/ui/OverflowShadow/index.d.ts +1 -1
- package/dist/types/ui/with-outer-listeners.d.ts +2 -2
- package/dist/types/ui-menu/ColorPickerButton/index.d.ts +1 -1
- package/dist/types/ui-menu/ToolbarButton/index.d.ts +1 -1
- package/dist/types/ui-react/with-react-editor-view-outer-listeners.d.ts +2 -2
- package/dist/types-ts4.5/collab/index.d.ts +7 -0
- package/dist/types-ts4.5/core-utils/document-logger.d.ts +6 -0
- package/dist/types-ts4.5/core-utils/index.d.ts +1 -0
- package/dist/types-ts4.5/extensibility/Extension/Extension/index.d.ts +108 -0
- package/dist/types-ts4.5/extensibility/Extension/Extension/styles.d.ts +5 -0
- package/dist/types-ts4.5/extensibility/Extension/InlineExtension/index.d.ts +12 -0
- package/dist/types-ts4.5/extensibility/Extension/InlineExtension/styles.d.ts +1 -0
- package/dist/types-ts4.5/extensibility/Extension/Lozenge.d.ts +14 -0
- package/dist/types-ts4.5/extensibility/Extension/styles.d.ts +7 -0
- package/dist/types-ts4.5/extensibility/Extension.d.ts +29 -0
- package/dist/types-ts4.5/extensibility/ExtensionComponent.d.ts +53 -0
- package/dist/types-ts4.5/extensibility/ExtensionNodeWrapper.d.ts +14 -0
- package/dist/types-ts4.5/extensibility/MultiBodiedExtension/index.d.ts +26 -0
- package/dist/types-ts4.5/extensibility/extensionNodeView.d.ts +31 -0
- package/dist/types-ts4.5/extensibility/index.d.ts +4 -0
- package/dist/types-ts4.5/extensibility/types.d.ts +8 -0
- package/dist/types-ts4.5/i18n/cs.d.ts +5 -2
- package/dist/types-ts4.5/i18n/da.d.ts +5 -2
- package/dist/types-ts4.5/i18n/de.d.ts +5 -2
- package/dist/types-ts4.5/i18n/en.d.ts +7 -1
- package/dist/types-ts4.5/i18n/en_GB.d.ts +7 -1
- package/dist/types-ts4.5/i18n/en_ZZ.d.ts +7 -1
- package/dist/types-ts4.5/i18n/es.d.ts +5 -2
- package/dist/types-ts4.5/i18n/fi.d.ts +5 -2
- package/dist/types-ts4.5/i18n/fr.d.ts +5 -2
- package/dist/types-ts4.5/i18n/hu.d.ts +5 -2
- package/dist/types-ts4.5/i18n/it.d.ts +5 -2
- package/dist/types-ts4.5/i18n/ja.d.ts +1 -2
- package/dist/types-ts4.5/i18n/ko.d.ts +5 -2
- package/dist/types-ts4.5/i18n/nb.d.ts +1 -2
- package/dist/types-ts4.5/i18n/nl.d.ts +5 -2
- package/dist/types-ts4.5/i18n/pl.d.ts +5 -2
- package/dist/types-ts4.5/i18n/pt_BR.d.ts +5 -2
- package/dist/types-ts4.5/i18n/ru.d.ts +5 -2
- package/dist/types-ts4.5/i18n/sv.d.ts +5 -2
- package/dist/types-ts4.5/i18n/th.d.ts +5 -2
- package/dist/types-ts4.5/i18n/tr.d.ts +5 -2
- package/dist/types-ts4.5/i18n/uk.d.ts +5 -2
- package/dist/types-ts4.5/i18n/vi.d.ts +5 -2
- package/dist/types-ts4.5/i18n/zh.d.ts +5 -2
- package/dist/types-ts4.5/i18n/zh_TW.d.ts +5 -2
- package/dist/types-ts4.5/link/LinkPicker/HyperlinkAddToolbar/index.d.ts +7 -7
- package/dist/types-ts4.5/types/floating-toolbar.d.ts +1 -1
- package/dist/types-ts4.5/types/hyperlink.d.ts +1 -0
- package/dist/types-ts4.5/types/index.d.ts +1 -1
- package/dist/types-ts4.5/types/next-editor-plugin.d.ts +0 -3
- package/dist/types-ts4.5/ui/DropList/index.d.ts +1 -1
- package/dist/types-ts4.5/ui/OverflowShadow/index.d.ts +1 -1
- package/dist/types-ts4.5/ui/with-outer-listeners.d.ts +2 -2
- package/dist/types-ts4.5/ui-menu/ColorPickerButton/index.d.ts +1 -1
- package/dist/types-ts4.5/ui-menu/ToolbarButton/index.d.ts +1 -1
- package/dist/types-ts4.5/ui-react/with-react-editor-view-outer-listeners.d.ts +2 -2
- package/extensibility/package.json +15 -0
- package/package.json +8 -7
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { Component } from 'react';
|
|
4
|
+
import memoizeOne from 'memoize-one';
|
|
5
|
+
import { getExtensionModuleNodePrivateProps, getNodeRenderer } from '../extensions';
|
|
6
|
+
import { getExtensionRenderer } from '../utils';
|
|
7
|
+
import Extension from './Extension/Extension';
|
|
8
|
+
import InlineExtension from './Extension/InlineExtension';
|
|
9
|
+
import MultiBodiedExtension from './MultiBodiedExtension';
|
|
10
|
+
export class ExtensionComponent extends Component {
|
|
11
|
+
constructor(...args) {
|
|
12
|
+
super(...args);
|
|
13
|
+
_defineProperty(this, "privatePropsParsed", false);
|
|
14
|
+
_defineProperty(this, "state", {});
|
|
15
|
+
_defineProperty(this, "mounted", false);
|
|
16
|
+
// memoized to avoid rerender on extension state changes
|
|
17
|
+
_defineProperty(this, "getNodeRenderer", memoizeOne(getNodeRenderer));
|
|
18
|
+
_defineProperty(this, "getExtensionModuleNodePrivateProps", memoizeOne(getExtensionModuleNodePrivateProps));
|
|
19
|
+
_defineProperty(this, "setStateFromPromise", (stateKey, promise) => {
|
|
20
|
+
promise && promise.then(p => {
|
|
21
|
+
if (!this.mounted) {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
this.setState({
|
|
25
|
+
[stateKey]: p
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
/**
|
|
30
|
+
* Parses any private nodes once an extension provider is available.
|
|
31
|
+
*
|
|
32
|
+
* We do this separately from resolving a node renderer component since the
|
|
33
|
+
* private props come from extension provider, rather than an extension
|
|
34
|
+
* handler which only handles `render`/component concerns.
|
|
35
|
+
*/
|
|
36
|
+
_defineProperty(this, "parsePrivateNodePropsIfNeeded", async () => {
|
|
37
|
+
if (this.privatePropsParsed || !this.state.extensionProvider) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
this.privatePropsParsed = true;
|
|
41
|
+
const {
|
|
42
|
+
extensionType,
|
|
43
|
+
extensionKey
|
|
44
|
+
} = this.props.node.attrs;
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* getExtensionModuleNodePrivateProps can throw if there are issues in the
|
|
48
|
+
* manifest
|
|
49
|
+
*/
|
|
50
|
+
try {
|
|
51
|
+
const privateProps = await this.getExtensionModuleNodePrivateProps(this.state.extensionProvider, extensionType, extensionKey);
|
|
52
|
+
this.setState({
|
|
53
|
+
_privateProps: privateProps
|
|
54
|
+
});
|
|
55
|
+
} catch (e) {
|
|
56
|
+
// eslint-disable-next-line no-console
|
|
57
|
+
console.error('Provided extension handler has thrown an error\n', e);
|
|
58
|
+
/** We don't want this error to block renderer */
|
|
59
|
+
/** We keep rendering the default content */
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
_defineProperty(this, "handleExtension", (pmNode, actions) => {
|
|
63
|
+
var _pmNode$marks, _pmNode$marks$find, _pmNode$marks$find$at;
|
|
64
|
+
const {
|
|
65
|
+
extensionHandlers,
|
|
66
|
+
editorView
|
|
67
|
+
} = this.props;
|
|
68
|
+
const {
|
|
69
|
+
extensionType,
|
|
70
|
+
extensionKey,
|
|
71
|
+
parameters,
|
|
72
|
+
text
|
|
73
|
+
} = pmNode.attrs;
|
|
74
|
+
const isBodiedExtension = pmNode.type.name === 'bodiedExtension';
|
|
75
|
+
if (isBodiedExtension) {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
const fragmentLocalId = pmNode === null || pmNode === void 0 ? void 0 : (_pmNode$marks = pmNode.marks) === null || _pmNode$marks === void 0 ? void 0 : (_pmNode$marks$find = _pmNode$marks.find(m => m.type.name === 'fragment')) === null || _pmNode$marks$find === void 0 ? void 0 : (_pmNode$marks$find$at = _pmNode$marks$find.attrs) === null || _pmNode$marks$find$at === void 0 ? void 0 : _pmNode$marks$find$at.localId;
|
|
79
|
+
const node = {
|
|
80
|
+
type: pmNode.type.name,
|
|
81
|
+
extensionType,
|
|
82
|
+
extensionKey,
|
|
83
|
+
parameters,
|
|
84
|
+
content: text,
|
|
85
|
+
localId: pmNode.attrs.localId,
|
|
86
|
+
fragmentLocalId
|
|
87
|
+
};
|
|
88
|
+
let result;
|
|
89
|
+
if (extensionHandlers && extensionHandlers[extensionType]) {
|
|
90
|
+
const render = getExtensionRenderer(extensionHandlers[extensionType]);
|
|
91
|
+
result = render(node, editorView.state.doc, actions);
|
|
92
|
+
}
|
|
93
|
+
if (!result) {
|
|
94
|
+
const extensionHandlerFromProvider = this.state.extensionProvider && this.getNodeRenderer(this.state.extensionProvider, extensionType, extensionKey);
|
|
95
|
+
if (extensionHandlerFromProvider) {
|
|
96
|
+
const NodeRenderer = extensionHandlerFromProvider;
|
|
97
|
+
if (node.type === 'multiBodiedExtension') {
|
|
98
|
+
return /*#__PURE__*/React.createElement(NodeRenderer, {
|
|
99
|
+
node: node,
|
|
100
|
+
references: this.props.references,
|
|
101
|
+
actions: actions
|
|
102
|
+
});
|
|
103
|
+
} else {
|
|
104
|
+
return /*#__PURE__*/React.createElement(NodeRenderer, {
|
|
105
|
+
node: node,
|
|
106
|
+
references: this.props.references
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return result;
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
UNSAFE_componentWillMount() {
|
|
115
|
+
this.mounted = true;
|
|
116
|
+
}
|
|
117
|
+
componentDidMount() {
|
|
118
|
+
const {
|
|
119
|
+
extensionProvider
|
|
120
|
+
} = this.props;
|
|
121
|
+
if (extensionProvider) {
|
|
122
|
+
this.setStateFromPromise('extensionProvider', extensionProvider);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
componentDidUpdate() {
|
|
126
|
+
this.parsePrivateNodePropsIfNeeded();
|
|
127
|
+
}
|
|
128
|
+
componentWillUnmount() {
|
|
129
|
+
this.mounted = false;
|
|
130
|
+
}
|
|
131
|
+
UNSAFE_componentWillReceiveProps(nextProps) {
|
|
132
|
+
const {
|
|
133
|
+
extensionProvider
|
|
134
|
+
} = nextProps;
|
|
135
|
+
if (extensionProvider && this.props.extensionProvider !== extensionProvider) {
|
|
136
|
+
this.setStateFromPromise('extensionProvider', extensionProvider);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
render() {
|
|
140
|
+
var _this$state$_privateP;
|
|
141
|
+
const {
|
|
142
|
+
node,
|
|
143
|
+
handleContentDOMRef,
|
|
144
|
+
editorView,
|
|
145
|
+
references,
|
|
146
|
+
editorAppearance,
|
|
147
|
+
pluginInjectionApi,
|
|
148
|
+
getPos,
|
|
149
|
+
eventDispatcher
|
|
150
|
+
} = this.props;
|
|
151
|
+
if (node.type.name === 'multiBodiedExtension') {
|
|
152
|
+
return /*#__PURE__*/React.createElement(MultiBodiedExtension, {
|
|
153
|
+
node: node,
|
|
154
|
+
editorView: editorView,
|
|
155
|
+
getPos: getPos,
|
|
156
|
+
handleContentDOMRef: handleContentDOMRef,
|
|
157
|
+
tryExtensionHandler: this.tryExtensionHandler.bind(this),
|
|
158
|
+
eventDispatcher: eventDispatcher,
|
|
159
|
+
pluginInjectionApi: pluginInjectionApi,
|
|
160
|
+
editorAppearance: editorAppearance
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
const extensionHandlerResult = this.tryExtensionHandler(undefined);
|
|
164
|
+
switch (node.type.name) {
|
|
165
|
+
case 'extension':
|
|
166
|
+
case 'bodiedExtension':
|
|
167
|
+
return /*#__PURE__*/React.createElement(Extension, {
|
|
168
|
+
node: node,
|
|
169
|
+
getPos: this.props.getPos,
|
|
170
|
+
references: references,
|
|
171
|
+
extensionProvider: this.state.extensionProvider,
|
|
172
|
+
handleContentDOMRef: handleContentDOMRef,
|
|
173
|
+
view: editorView,
|
|
174
|
+
editorAppearance: editorAppearance,
|
|
175
|
+
hideFrame: (_this$state$_privateP = this.state._privateProps) === null || _this$state$_privateP === void 0 ? void 0 : _this$state$_privateP.__hideFrame,
|
|
176
|
+
pluginInjectionApi: pluginInjectionApi
|
|
177
|
+
}, extensionHandlerResult);
|
|
178
|
+
case 'inlineExtension':
|
|
179
|
+
return /*#__PURE__*/React.createElement(InlineExtension, {
|
|
180
|
+
node: node
|
|
181
|
+
}, extensionHandlerResult);
|
|
182
|
+
default:
|
|
183
|
+
return null;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
tryExtensionHandler(actions) {
|
|
187
|
+
const {
|
|
188
|
+
node
|
|
189
|
+
} = this.props;
|
|
190
|
+
try {
|
|
191
|
+
const extensionContent = this.handleExtension(node, actions);
|
|
192
|
+
if (extensionContent && /*#__PURE__*/React.isValidElement(extensionContent)) {
|
|
193
|
+
return extensionContent;
|
|
194
|
+
}
|
|
195
|
+
} catch (e) {
|
|
196
|
+
// eslint-disable-next-line no-console
|
|
197
|
+
console.error('Provided extension handler has thrown an error\n', e);
|
|
198
|
+
/** We don't want this error to block renderer */
|
|
199
|
+
/** We keep rendering the default content */
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
return null;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { ZERO_WIDTH_SPACE } from '../utils';
|
|
3
|
+
/**
|
|
4
|
+
* If inlineExtension, add zero width space to the end of the nodes and wrap with span;
|
|
5
|
+
* else wrap with a div (for multi bodied extensions)
|
|
6
|
+
*
|
|
7
|
+
* @param param0
|
|
8
|
+
* @returns
|
|
9
|
+
*/
|
|
10
|
+
export const ExtensionNodeWrapper = ({
|
|
11
|
+
children,
|
|
12
|
+
nodeType
|
|
13
|
+
}) => /*#__PURE__*/React.createElement("span", null, children, nodeType === 'inlineExtension' && ZERO_WIDTH_SPACE);
|
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/extends";
|
|
2
|
+
/** @jsx jsx */
|
|
3
|
+
|
|
4
|
+
import React, { useState } from 'react';
|
|
5
|
+
import { css, jsx } from '@emotion/react';
|
|
6
|
+
import { N30, N40, N50 } from '@atlaskit/theme/colors';
|
|
7
|
+
import { ACTION, ACTION_SUBJECT, EVENT_TYPE } from '../../analytics';
|
|
8
|
+
import { createDispatch } from '../../event-dispatcher';
|
|
9
|
+
import { useSharedPluginState } from '../../hooks';
|
|
10
|
+
import { analyticsEventKey, calculateBreakoutStyles } from '../../utils';
|
|
11
|
+
import { WithPluginState } from '../../with-plugin-state';
|
|
12
|
+
const useMultiBodiedExtensionActions = ({
|
|
13
|
+
updateActiveChild,
|
|
14
|
+
editorView,
|
|
15
|
+
getPos,
|
|
16
|
+
node,
|
|
17
|
+
eventDispatcher
|
|
18
|
+
}) => {
|
|
19
|
+
const actions = React.useMemo(() => {
|
|
20
|
+
return {
|
|
21
|
+
changeActive(index) {
|
|
22
|
+
const updateActiveChildResult = updateActiveChild(index);
|
|
23
|
+
if (eventDispatcher) {
|
|
24
|
+
sendMBEAnalyticsEvent(ACTION.CHANGE_ACTIVE, node, eventDispatcher);
|
|
25
|
+
}
|
|
26
|
+
return updateActiveChildResult;
|
|
27
|
+
},
|
|
28
|
+
addChild() {
|
|
29
|
+
const {
|
|
30
|
+
state,
|
|
31
|
+
dispatch
|
|
32
|
+
} = editorView;
|
|
33
|
+
if (node.content.childCount >= node.attrs.maxFrames) {
|
|
34
|
+
throw new Error(`Cannot add more than ${node.attrs.maxFrames} frames`);
|
|
35
|
+
}
|
|
36
|
+
const p = state.schema.nodes.paragraph.createAndFill({});
|
|
37
|
+
if (!p) {
|
|
38
|
+
throw new Error('Could not create paragraph');
|
|
39
|
+
}
|
|
40
|
+
const frame = state.schema.nodes.extensionFrame.createAndFill({}, [p]);
|
|
41
|
+
const pos = getPos();
|
|
42
|
+
if (typeof pos !== 'number' || !frame) {
|
|
43
|
+
throw new Error('Could not create frame or position not valid');
|
|
44
|
+
}
|
|
45
|
+
const insertAt = Math.min((pos || 1) + node.content.size, state.doc.content.size);
|
|
46
|
+
dispatch(state.tr.insert(insertAt, frame));
|
|
47
|
+
if (eventDispatcher) {
|
|
48
|
+
sendMBEAnalyticsEvent(ACTION.ADD_CHILD, node, eventDispatcher);
|
|
49
|
+
}
|
|
50
|
+
return true;
|
|
51
|
+
},
|
|
52
|
+
getChildrenCount() {
|
|
53
|
+
return node.content.childCount;
|
|
54
|
+
},
|
|
55
|
+
removeChild(index) {
|
|
56
|
+
const pos = getPos();
|
|
57
|
+
// TODO: Add child index validation here, don't trust this data
|
|
58
|
+
if (typeof pos !== 'number' || typeof index !== 'number') {
|
|
59
|
+
throw new Error('Position or index not valid');
|
|
60
|
+
}
|
|
61
|
+
const {
|
|
62
|
+
state,
|
|
63
|
+
dispatch
|
|
64
|
+
} = editorView;
|
|
65
|
+
if (node.content.childCount === 1) {
|
|
66
|
+
const tr = state.tr;
|
|
67
|
+
tr.deleteRange(pos, pos + node.content.size);
|
|
68
|
+
dispatch(tr);
|
|
69
|
+
return true;
|
|
70
|
+
}
|
|
71
|
+
const $pos = state.doc.resolve(pos);
|
|
72
|
+
const $startNodePos = state.doc.resolve($pos.start($pos.depth + 1));
|
|
73
|
+
const startFramePosition = $startNodePos.posAtIndex(index);
|
|
74
|
+
const maybeFrameNode = state.doc.nodeAt(startFramePosition);
|
|
75
|
+
if (!maybeFrameNode) {
|
|
76
|
+
throw new Error('Could not find frame node');
|
|
77
|
+
}
|
|
78
|
+
const endFramePosition = maybeFrameNode.content.size + startFramePosition;
|
|
79
|
+
const tr = state.tr;
|
|
80
|
+
tr.deleteRange(startFramePosition, endFramePosition);
|
|
81
|
+
dispatch(tr);
|
|
82
|
+
if (eventDispatcher) {
|
|
83
|
+
sendMBEAnalyticsEvent(ACTION.REMOVE_CHILD, node, eventDispatcher);
|
|
84
|
+
}
|
|
85
|
+
return true;
|
|
86
|
+
},
|
|
87
|
+
updateParameters(parameters) {
|
|
88
|
+
const {
|
|
89
|
+
state,
|
|
90
|
+
dispatch
|
|
91
|
+
} = editorView;
|
|
92
|
+
const pos = getPos();
|
|
93
|
+
if (typeof pos !== 'number') {
|
|
94
|
+
throw new Error('Position not valid');
|
|
95
|
+
}
|
|
96
|
+
const tr = state.tr.setNodeMarkup(pos, undefined, {
|
|
97
|
+
...node.attrs,
|
|
98
|
+
parameters: {
|
|
99
|
+
...node.attrs.parameters,
|
|
100
|
+
macroParams: parameters
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
dispatch(tr);
|
|
104
|
+
if (eventDispatcher) {
|
|
105
|
+
sendMBEAnalyticsEvent(ACTION.UPDATE_PARAMETERS, node, eventDispatcher);
|
|
106
|
+
}
|
|
107
|
+
return true;
|
|
108
|
+
},
|
|
109
|
+
getChildren() {
|
|
110
|
+
var _state$doc$nodeAt;
|
|
111
|
+
const {
|
|
112
|
+
state
|
|
113
|
+
} = editorView;
|
|
114
|
+
const pos = getPos();
|
|
115
|
+
if (typeof pos !== 'number') {
|
|
116
|
+
return [];
|
|
117
|
+
}
|
|
118
|
+
const children = (_state$doc$nodeAt = state.doc.nodeAt(pos)) === null || _state$doc$nodeAt === void 0 ? void 0 : _state$doc$nodeAt.content;
|
|
119
|
+
if (eventDispatcher) {
|
|
120
|
+
sendMBEAnalyticsEvent(ACTION.GET_CHILDERN, node, eventDispatcher);
|
|
121
|
+
}
|
|
122
|
+
return children ? children.toJSON() : [];
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
}, [node, editorView, getPos, updateActiveChild, eventDispatcher]);
|
|
126
|
+
return actions;
|
|
127
|
+
};
|
|
128
|
+
const navigationCSS = css`
|
|
129
|
+
// make sure the user can't see a range selection inside the navigation
|
|
130
|
+
// This is really important to keep the navigation working properly
|
|
131
|
+
user-select: none;
|
|
132
|
+
-webkit-user-modify: read-only;
|
|
133
|
+
border: 1px solid ${`var(--ds-border, ${N40})`};
|
|
134
|
+
`;
|
|
135
|
+
const MultiBodiedExtensionWithWidth = ({
|
|
136
|
+
node,
|
|
137
|
+
handleContentDOMRef,
|
|
138
|
+
getPos,
|
|
139
|
+
tryExtensionHandler,
|
|
140
|
+
editorView,
|
|
141
|
+
eventDispatcher,
|
|
142
|
+
widthState,
|
|
143
|
+
editorAppearance
|
|
144
|
+
}) => {
|
|
145
|
+
const [activeChildIndex, setActiveChildIndex] = useState(0);
|
|
146
|
+
// Adding to avoid aliasing `this` for the callbacks
|
|
147
|
+
const updateActiveChild = React.useCallback(index => {
|
|
148
|
+
if (typeof index !== 'number') {
|
|
149
|
+
setActiveChildIndex(0);
|
|
150
|
+
throw new Error('Index is not valid');
|
|
151
|
+
}
|
|
152
|
+
setActiveChildIndex(index);
|
|
153
|
+
return true;
|
|
154
|
+
}, [setActiveChildIndex]);
|
|
155
|
+
const actions = useMultiBodiedExtensionActions({
|
|
156
|
+
updateActiveChild,
|
|
157
|
+
editorView,
|
|
158
|
+
getPos,
|
|
159
|
+
eventDispatcher,
|
|
160
|
+
node
|
|
161
|
+
});
|
|
162
|
+
const extensionHandlerResult = React.useMemo(() => {
|
|
163
|
+
return tryExtensionHandler(actions);
|
|
164
|
+
}, [tryExtensionHandler, actions]);
|
|
165
|
+
const articleRef = React.useCallback(node => {
|
|
166
|
+
return handleContentDOMRef(node);
|
|
167
|
+
}, [handleContentDOMRef]);
|
|
168
|
+
const containerCSS = css`
|
|
169
|
+
border: 1px solid ${`var(--ds-border, ${N30})`};
|
|
170
|
+
min-height: 100px;
|
|
171
|
+
.multiBodiedExtension-content-dom-wrapper > [data-extension-frame='true'] {
|
|
172
|
+
display: none;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
.multiBodiedExtension-content-dom-wrapper
|
|
176
|
+
> [data-extension-frame='true']:nth-of-type(${activeChildIndex + 1}) {
|
|
177
|
+
border: 1px solid ${`var(--ds-border, ${N50})`};
|
|
178
|
+
display: block;
|
|
179
|
+
min-height: 100px;
|
|
180
|
+
}
|
|
181
|
+
`;
|
|
182
|
+
const shouldBreakout =
|
|
183
|
+
// Extension should breakout when the layout is set to 'full-width' or 'wide'.
|
|
184
|
+
['full-width', 'wide'].includes(node.attrs.layout) &&
|
|
185
|
+
// Extension breakout state should not be respected when the editor appearance is full-width mode
|
|
186
|
+
editorAppearance !== 'full-width';
|
|
187
|
+
let mbeContainerStyles = {};
|
|
188
|
+
if (shouldBreakout) {
|
|
189
|
+
const {
|
|
190
|
+
...breakoutStyles
|
|
191
|
+
} = calculateBreakoutStyles({
|
|
192
|
+
mode: node.attrs.layout,
|
|
193
|
+
widthStateLineLength: widthState === null || widthState === void 0 ? void 0 : widthState.lineLength,
|
|
194
|
+
widthStateWidth: widthState === null || widthState === void 0 ? void 0 : widthState.width
|
|
195
|
+
});
|
|
196
|
+
mbeContainerStyles = breakoutStyles;
|
|
197
|
+
}
|
|
198
|
+
return jsx("section", {
|
|
199
|
+
className: "multiBodiedExtension--container",
|
|
200
|
+
css: containerCSS,
|
|
201
|
+
"data-testid": "multiBodiedExtension--container",
|
|
202
|
+
"data-active-child-index": activeChildIndex,
|
|
203
|
+
style: mbeContainerStyles
|
|
204
|
+
}, jsx("nav", {
|
|
205
|
+
className: "multiBodiedExtension-navigation",
|
|
206
|
+
css: navigationCSS,
|
|
207
|
+
"data-testid": "multiBodiedExtension-navigation"
|
|
208
|
+
}, extensionHandlerResult), jsx("article", {
|
|
209
|
+
className: "multiBodiedExtension--frames",
|
|
210
|
+
"data-testid": "multiBodiedExtension--frames",
|
|
211
|
+
ref: articleRef
|
|
212
|
+
}));
|
|
213
|
+
};
|
|
214
|
+
const sendMBEAnalyticsEvent = (action, node, eventDispatcher) => {
|
|
215
|
+
const analyticsDispatch = createDispatch(eventDispatcher);
|
|
216
|
+
analyticsDispatch(analyticsEventKey, {
|
|
217
|
+
payload: {
|
|
218
|
+
action,
|
|
219
|
+
actionSubject: ACTION_SUBJECT.MULTI_BODIED_EXTENSION,
|
|
220
|
+
eventType: EVENT_TYPE.TRACK,
|
|
221
|
+
attributes: {
|
|
222
|
+
extensionType: node.attrs.extensionType,
|
|
223
|
+
extensionKey: node.attrs.extensionKey,
|
|
224
|
+
localId: node.attrs.localId,
|
|
225
|
+
maxFramesCount: node.attrs.maxFrames,
|
|
226
|
+
currentFramesCount: node.content.childCount
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
});
|
|
230
|
+
};
|
|
231
|
+
const MultiBodiedExtensionWithSharedState = props => {
|
|
232
|
+
const {
|
|
233
|
+
pluginInjectionApi
|
|
234
|
+
} = props;
|
|
235
|
+
const {
|
|
236
|
+
widthState
|
|
237
|
+
} = useSharedPluginState(pluginInjectionApi, ['width']);
|
|
238
|
+
return jsx(MultiBodiedExtensionWithWidth, _extends({
|
|
239
|
+
widthState: widthState
|
|
240
|
+
}, props));
|
|
241
|
+
};
|
|
242
|
+
|
|
243
|
+
// Workaround taken from platform/packages/editor/editor-core/src/plugins/extension/ui/Extension/Extension/index.tsx
|
|
244
|
+
const MultiBodiedExtension = props => {
|
|
245
|
+
// TODO: ED-17836 This code is here because confluence injects
|
|
246
|
+
// the `editor-referentiality` plugin via `dangerouslyAppendPlugins`
|
|
247
|
+
// which cannot access the `pluginInjectionApi`. When we move
|
|
248
|
+
// Confluence to using presets we can remove this workaround.
|
|
249
|
+
const {
|
|
250
|
+
pluginInjectionApi
|
|
251
|
+
} = props;
|
|
252
|
+
return pluginInjectionApi === undefined ? jsx(MultiBodiedExtensionDeprecated, props) : jsx(MultiBodiedExtensionWithSharedState, props);
|
|
253
|
+
};
|
|
254
|
+
|
|
255
|
+
// TODO: ED-17836 This code is here because Confluence injects
|
|
256
|
+
// the `editor-referentiality` plugin via `dangerouslyAppendPlugins`
|
|
257
|
+
// which cannot access the `pluginInjectionApi`. When we move
|
|
258
|
+
// Confluence to using presets we can remove this workaround.
|
|
259
|
+
// @ts-ignore
|
|
260
|
+
const widthPluginKey = {
|
|
261
|
+
key: 'widthPlugin$',
|
|
262
|
+
getState: state => {
|
|
263
|
+
return state['widthPlugin$'];
|
|
264
|
+
}
|
|
265
|
+
};
|
|
266
|
+
const MultiBodiedExtensionDeprecated = props => {
|
|
267
|
+
return jsx(WithPluginState, {
|
|
268
|
+
editorView: props.editorView,
|
|
269
|
+
plugins: {
|
|
270
|
+
widthState: widthPluginKey
|
|
271
|
+
},
|
|
272
|
+
render: ({
|
|
273
|
+
widthState
|
|
274
|
+
}) => jsx(MultiBodiedExtensionWithWidth, _extends({
|
|
275
|
+
widthState: widthState
|
|
276
|
+
}, props))
|
|
277
|
+
});
|
|
278
|
+
};
|
|
279
|
+
/**
|
|
280
|
+
* End workaround
|
|
281
|
+
*/
|
|
282
|
+
|
|
283
|
+
export default MultiBodiedExtension;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import ReactNodeView from '../react-node-view';
|
|
3
|
+
import { Extension } from './Extension';
|
|
4
|
+
import { ExtensionNodeWrapper } from './ExtensionNodeWrapper';
|
|
5
|
+
// getInlineNodeViewProducer is a new api to use instead of ReactNodeView
|
|
6
|
+
// when creating inline node views, however, it is difficult to test the impact
|
|
7
|
+
// on selections when migrating inlineExtension to use the new api.
|
|
8
|
+
// The ReactNodeView api will be visited in the second phase of the selections
|
|
9
|
+
// project whilst investigating block nodes. We will revisit the Extension node view there too.
|
|
10
|
+
export class ExtensionNode extends ReactNodeView {
|
|
11
|
+
ignoreMutation(mutation) {
|
|
12
|
+
// Extensions can perform async operations that will change the DOM.
|
|
13
|
+
// To avoid having their tree rebuilt, we need to ignore the mutation
|
|
14
|
+
// for atom based extensions if its not a layout, we need to give
|
|
15
|
+
// children a chance to recalc
|
|
16
|
+
return this.node.type.isAtom || mutation.type !== 'selection' && mutation.attributeName !== 'data-layout';
|
|
17
|
+
}
|
|
18
|
+
getContentDOM() {
|
|
19
|
+
if (this.node.isInline) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
const dom = document.createElement('div');
|
|
23
|
+
dom.className = `${this.node.type.name}-content-dom-wrapper`;
|
|
24
|
+
return {
|
|
25
|
+
dom
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
render(props, forwardRef) {
|
|
29
|
+
var _props$extensionNodeV;
|
|
30
|
+
return /*#__PURE__*/React.createElement(ExtensionNodeWrapper, {
|
|
31
|
+
nodeType: this.node.type.name
|
|
32
|
+
}, /*#__PURE__*/React.createElement(Extension, {
|
|
33
|
+
editorView: this.view,
|
|
34
|
+
node: this.node,
|
|
35
|
+
eventDispatcher: this.eventDispatcher
|
|
36
|
+
// The getPos arg is always a function when used with nodes
|
|
37
|
+
// the version of the types we use has a union with the type
|
|
38
|
+
// for marks.
|
|
39
|
+
// This has been fixed in later versions of the definitly typed
|
|
40
|
+
// types (and also in prosmirror-views inbuilt types).
|
|
41
|
+
// https://github.com/DefinitelyTyped/DefinitelyTyped/pull/57384
|
|
42
|
+
,
|
|
43
|
+
getPos: this.getPos,
|
|
44
|
+
providerFactory: props.providerFactory,
|
|
45
|
+
handleContentDOMRef: forwardRef,
|
|
46
|
+
extensionHandlers: props.extensionHandlers,
|
|
47
|
+
editorAppearance: (_props$extensionNodeV = props.extensionNodeViewOptions) === null || _props$extensionNodeV === void 0 ? void 0 : _props$extensionNodeV.appearance,
|
|
48
|
+
pluginInjectionApi: props.pluginInjectionApi
|
|
49
|
+
}));
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
export default function ExtensionNodeView(portalProviderAPI, eventDispatcher, providerFactory, extensionHandlers, extensionNodeViewOptions, pluginInjectionApi) {
|
|
53
|
+
return (node, view, getPos) => {
|
|
54
|
+
const hasIntlContext = true;
|
|
55
|
+
return new ExtensionNode(node, view, getPos, portalProviderAPI, eventDispatcher, {
|
|
56
|
+
providerFactory,
|
|
57
|
+
extensionHandlers,
|
|
58
|
+
extensionNodeViewOptions,
|
|
59
|
+
pluginInjectionApi
|
|
60
|
+
}, undefined, undefined, undefined, hasIntlContext).init();
|
|
61
|
+
};
|
|
62
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/es2019/i18n/cs.js
CHANGED
|
@@ -9,7 +9,9 @@
|
|
|
9
9
|
export default {
|
|
10
10
|
'fabric.editor.action': 'Aktuální úkol',
|
|
11
11
|
'fabric.editor.action.description': 'Vytvořit a přiřadit aktuální úkol',
|
|
12
|
+
'fabric.editor.addColumn': 'Přidat sloupec vpravo',
|
|
12
13
|
'fabric.editor.addMediaFiles': 'Přidat obrázek, video nebo soubor',
|
|
14
|
+
'fabric.editor.addRow': 'Přidat řádek pod',
|
|
13
15
|
'fabric.editor.alignCenter': 'Zarovnat na střed',
|
|
14
16
|
'fabric.editor.alignImageCenter': 'Zarovnat na střed',
|
|
15
17
|
'fabric.editor.alignImageLeft': 'Zarovnat vlevo',
|
|
@@ -17,6 +19,7 @@ export default {
|
|
|
17
19
|
'fabric.editor.alignLeft': 'Zarovnat vlevo',
|
|
18
20
|
'fabric.editor.alignRight': 'Zarovnat vpravo',
|
|
19
21
|
'fabric.editor.annotationToolbar': 'Panel nástrojů poznámek',
|
|
22
|
+
'fabric.editor.backgroundColor': 'Barva pozadí',
|
|
20
23
|
'fabric.editor.blockCardUnavailable': 'Vložený odkaz je uvnitř uzlu {node} a jeho zobrazení nelze změnit',
|
|
21
24
|
'fabric.editor.blockDescription': 'Zobrazit další informace o odkazu, včetně souhrnu a akcí',
|
|
22
25
|
'fabric.editor.blockTitle': 'Karta',
|
|
@@ -138,7 +141,6 @@ export default {
|
|
|
138
141
|
'fabric.editor.infoPanel': 'Informační panel',
|
|
139
142
|
'fabric.editor.infoPanel.description': 'Zvýraznit informace v barevném panelu',
|
|
140
143
|
'fabric.editor.inlineDescription': 'Zobrazit odkaz jako vložený text',
|
|
141
|
-
'fabric.editor.inlineOverlay': 'Změnit zobrazení',
|
|
142
144
|
'fabric.editor.inlineTitle': 'Vložený',
|
|
143
145
|
'fabric.editor.insertColumn': 'Vložit sloupec napravo',
|
|
144
146
|
'fabric.editor.insertColumnDrag': 'Vložit sloupec',
|
|
@@ -211,7 +213,8 @@ export default {
|
|
|
211
213
|
'fabric.editor.table': 'Tabulka',
|
|
212
214
|
'fabric.editor.table.description': 'Vložit tabulku',
|
|
213
215
|
'fabric.editor.tableOptions': 'Možnosti tabulky',
|
|
214
|
-
'fabric.editor.
|
|
216
|
+
'fabric.editor.tableResizeDecreaseScreenReaderInformation': '{newWidth, plural, one {Šířka tabulky byla snížena na {newWidth,number} pixel.} few {Šířka tabulky byla snížena na {newWidth,number} pixely.} many {Šířka tabulky byla snížena na {newWidth,number} pixelu.} other {Šířka tabulky byla snížena na {newWidth,number} pixelů.}}',
|
|
217
|
+
'fabric.editor.tableResizeIncreaseScreenReaderInformation': '{newWidth, plural, one {Šířka tabulky byla zvýšena na {newWidth,number} pixel.} few {Šířka tabulky byla zvýšena na {newWidth,number} pixely.} many {Šířka tabulky byla zvýšena na {newWidth,number} pixelu.} other {Šířka tabulky byla zvýšena na {newWidth,number} pixelů.}}',
|
|
215
218
|
'fabric.editor.tables.adjustColumn': 'Upravit sloupec',
|
|
216
219
|
'fabric.editor.tables.confirmDeleteLinkedModalMessage': 'Odstranění uzlu {nodeName} způsobí, že všechny k němu připojené položky přestanou fungovat.',
|
|
217
220
|
'fabric.editor.tables.confirmDeleteLinkedModalOKButton': 'Odstranit',
|
package/dist/es2019/i18n/da.js
CHANGED
|
@@ -9,7 +9,9 @@
|
|
|
9
9
|
export default {
|
|
10
10
|
'fabric.editor.action': 'Handlingsgenstand',
|
|
11
11
|
'fabric.editor.action.description': 'Opret og tildel handlingsgenstande',
|
|
12
|
+
'fabric.editor.addColumn': 'Tilføj kolonne til højre',
|
|
12
13
|
'fabric.editor.addMediaFiles': 'Tilføj billede, video eller fil',
|
|
14
|
+
'fabric.editor.addRow': 'Tilføj række nedenfor',
|
|
13
15
|
'fabric.editor.alignCenter': 'Centrér',
|
|
14
16
|
'fabric.editor.alignImageCenter': 'Centrér',
|
|
15
17
|
'fabric.editor.alignImageLeft': 'Venstrejustér',
|
|
@@ -17,6 +19,7 @@ export default {
|
|
|
17
19
|
'fabric.editor.alignLeft': 'Venstrejustér',
|
|
18
20
|
'fabric.editor.alignRight': 'Højrejustér',
|
|
19
21
|
'fabric.editor.annotationToolbar': 'Værktøjslinje til annotationer',
|
|
22
|
+
'fabric.editor.backgroundColor': 'Baggrundsfarve',
|
|
20
23
|
'fabric.editor.blockCardUnavailable': 'Det indbyggede link er inden i {node}, og dets visning kan ikke ændres',
|
|
21
24
|
'fabric.editor.blockDescription': 'Vis flere oplysninger om et link, inklusive sammendrag og handlinger',
|
|
22
25
|
'fabric.editor.blockTitle': 'Kort',
|
|
@@ -138,7 +141,6 @@ export default {
|
|
|
138
141
|
'fabric.editor.infoPanel': 'Informationspanel',
|
|
139
142
|
'fabric.editor.infoPanel.description': 'Fremhæv information i et farvet panel',
|
|
140
143
|
'fabric.editor.inlineDescription': 'Vis link som indbygget tekst',
|
|
141
|
-
'fabric.editor.inlineOverlay': 'Skift visning',
|
|
142
144
|
'fabric.editor.inlineTitle': 'Indbyg',
|
|
143
145
|
'fabric.editor.insertColumn': 'Indsæt kolonne til højre',
|
|
144
146
|
'fabric.editor.insertColumnDrag': 'Indsæt kolonne',
|
|
@@ -211,7 +213,8 @@ export default {
|
|
|
211
213
|
'fabric.editor.table': 'Tabel',
|
|
212
214
|
'fabric.editor.table.description': 'Indsæt en tabel',
|
|
213
215
|
'fabric.editor.tableOptions': 'Egenskaber for tabel',
|
|
214
|
-
'fabric.editor.
|
|
216
|
+
'fabric.editor.tableResizeDecreaseScreenReaderInformation': '{newWidth, plural, one {Tabelbredde reduceret til {newWidth,number} pixel.} other {Tabelbredde reduceret til {newWidth,number} pixel.}}',
|
|
217
|
+
'fabric.editor.tableResizeIncreaseScreenReaderInformation': '{newWidth, plural, one {Tabelbredde øget til {newWidth,number} pixel.} other {Tabelbredde øget til {newWidth,number} pixels.}}',
|
|
215
218
|
'fabric.editor.tables.adjustColumn': 'Tilpas kolonne',
|
|
216
219
|
'fabric.editor.tables.confirmDeleteLinkedModalMessage': 'Hvis du sletter {nodeName}, brydes forbindelsen til alt, der er forbundet til den.',
|
|
217
220
|
'fabric.editor.tables.confirmDeleteLinkedModalOKButton': 'Slet',
|
package/dist/es2019/i18n/de.js
CHANGED
|
@@ -9,7 +9,9 @@
|
|
|
9
9
|
export default {
|
|
10
10
|
'fabric.editor.action': 'Aufgabe',
|
|
11
11
|
'fabric.editor.action.description': 'Aufgaben erstellen und zuweisen',
|
|
12
|
+
'fabric.editor.addColumn': 'Spalte rechts hinzufügen',
|
|
12
13
|
'fabric.editor.addMediaFiles': 'Bild, Video oder Datei hinzufügen',
|
|
14
|
+
'fabric.editor.addRow': 'Zeile unterhalb hinzufügen',
|
|
13
15
|
'fabric.editor.alignCenter': 'Mittig ausrichten',
|
|
14
16
|
'fabric.editor.alignImageCenter': 'Mittig ausrichten',
|
|
15
17
|
'fabric.editor.alignImageLeft': 'Links ausrichten',
|
|
@@ -17,6 +19,7 @@ export default {
|
|
|
17
19
|
'fabric.editor.alignLeft': 'Links ausrichten',
|
|
18
20
|
'fabric.editor.alignRight': 'Rechts ausrichten',
|
|
19
21
|
'fabric.editor.annotationToolbar': 'Symbolleiste für Anmerkungen',
|
|
22
|
+
'fabric.editor.backgroundColor': 'Hintergrundfarbe',
|
|
20
23
|
'fabric.editor.blockCardUnavailable': 'Die Ansicht des Inline-Links kann nicht geändert werden, da sich der Link innerhalb von {node} befindet.',
|
|
21
24
|
'fabric.editor.blockDescription': 'Weitere Informationen zu einem Link anzeigen, darunter eine Zusammenfassung und Aktionen',
|
|
22
25
|
'fabric.editor.blockTitle': 'Karte',
|
|
@@ -138,7 +141,6 @@ export default {
|
|
|
138
141
|
'fabric.editor.infoPanel': 'Info-Panel',
|
|
139
142
|
'fabric.editor.infoPanel.description': 'Informationen in einem farbigen Panel hervorheben',
|
|
140
143
|
'fabric.editor.inlineDescription': 'Link als Inline-Text anzeigen',
|
|
141
|
-
'fabric.editor.inlineOverlay': 'Ansicht wechseln',
|
|
142
144
|
'fabric.editor.inlineTitle': 'Inline',
|
|
143
145
|
'fabric.editor.insertColumn': 'Spalte rechts einfügen',
|
|
144
146
|
'fabric.editor.insertColumnDrag': 'Spalte einfügen',
|
|
@@ -211,7 +213,8 @@ export default {
|
|
|
211
213
|
'fabric.editor.table': 'Tabelle',
|
|
212
214
|
'fabric.editor.table.description': 'Tabelle einfügen',
|
|
213
215
|
'fabric.editor.tableOptions': 'Tabellenoptionen',
|
|
214
|
-
'fabric.editor.
|
|
216
|
+
'fabric.editor.tableResizeDecreaseScreenReaderInformation': '{newWidth, plural, one {Die Tabellenbreite wurde auf {newWidth,number} Pixel verringert.} other {Die Tabellenbreite wurde auf {newWidth,number} Pixel verringert.}}',
|
|
217
|
+
'fabric.editor.tableResizeIncreaseScreenReaderInformation': '{newWidth, plural, one {Die Tabellenbreite wurde auf {newWidth,number} Pixel erhöht.} other {Die Tabellenbreite wurde auf {newWidth,number} Pixel erhöht.}}',
|
|
215
218
|
'fabric.editor.tables.adjustColumn': 'Spalte anpassen',
|
|
216
219
|
'fabric.editor.tables.confirmDeleteLinkedModalMessage': 'Durch das Löschen von {nodeName} werden alle damit verbundenen Elemente unbrauchbar.',
|
|
217
220
|
'fabric.editor.tables.confirmDeleteLinkedModalOKButton': 'Löschen',
|