@webiny/app-admin 5.34.8 → 5.35.0-beta.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/assets/icons/add-18px.svg +1 -1
- package/assets/icons/arrow_drop_down-24px.svg +1 -1
- package/assets/icons/filter-24px.svg +1 -1
- package/assets/icons/highlight-24px.svg +1 -1
- package/assets/icons/info.svg +1 -1
- package/assets/icons/insert_drive_file-24px.svg +1 -1
- package/assets/icons/insert_photo-24px.svg +1 -1
- package/assets/icons/label-24px.svg +1 -1
- package/assets/icons/round-account_circle-24px.svg +1 -1
- package/assets/icons/round-arrow_drop_down-24px.svg +1 -1
- package/assets/icons/round-help-24px.svg +1 -1
- package/assets/icons/round-settings-24px.svg +1 -1
- package/assets/icons/today-24px.svg +1 -1
- package/assets/icons/touch_app.svg +1 -1
- package/base/Admin.js +1 -15
- package/base/Admin.js.map +1 -1
- package/base/Base.js +6 -44
- package/base/Base.js.map +1 -1
- package/base/plugins/AddGraphQLQuerySelection.js +5 -9
- package/base/plugins/AddGraphQLQuerySelection.js.map +1 -1
- package/base/providers/ApolloProvider.js +0 -5
- package/base/providers/ApolloProvider.js.map +1 -1
- package/base/providers/TelemetryProvider.js +1 -7
- package/base/providers/TelemetryProvider.js.map +1 -1
- package/base/providers/UiStateProvider.js +0 -5
- package/base/providers/UiStateProvider.js.map +1 -1
- package/base/providers/ViewCompositionProvider.js +3 -16
- package/base/providers/ViewCompositionProvider.js.map +1 -1
- package/base/ui/Brand.js +0 -4
- package/base/ui/Brand.js.map +1 -1
- package/base/ui/CenteredView.js +2 -7
- package/base/ui/CenteredView.js.map +1 -1
- package/base/ui/Dashboard.js +0 -4
- package/base/ui/Dashboard.js.map +1 -1
- package/base/ui/FileManager.d.ts +67 -0
- package/base/ui/FileManager.js +61 -0
- package/base/ui/FileManager.js.map +1 -0
- package/base/ui/Layout.js +1 -6
- package/base/ui/Layout.js.map +1 -1
- package/base/ui/LocaleSelector.js +0 -4
- package/base/ui/LocaleSelector.js.map +1 -1
- package/base/ui/LoginScreen.js +0 -6
- package/base/ui/LoginScreen.js.map +1 -1
- package/base/ui/Logo.js +0 -6
- package/base/ui/Logo.js.map +1 -1
- package/base/ui/Menu.js +2 -31
- package/base/ui/Menu.js.map +1 -1
- package/base/ui/Navigation.js +11 -44
- package/base/ui/Navigation.js.map +1 -1
- package/base/ui/NotFound.js +0 -4
- package/base/ui/NotFound.js.map +1 -1
- package/base/ui/Search.js +5 -23
- package/base/ui/Search.js.map +1 -1
- package/base/ui/Tags.js +1 -8
- package/base/ui/Tags.js.map +1 -1
- package/base/ui/UserMenu.js +5 -29
- package/base/ui/UserMenu.js.map +1 -1
- package/components/AdminLayout.js +1 -6
- package/components/AdminLayout.js.map +1 -1
- package/components/AppInstaller/AppInstaller.js +18 -84
- package/components/AppInstaller/AppInstaller.js.map +1 -1
- package/components/AppInstaller/Sidebar.js +11 -44
- package/components/AppInstaller/Sidebar.js.map +1 -1
- package/components/AppInstaller/index.js +0 -7
- package/components/AppInstaller/index.js.map +1 -1
- package/components/AppInstaller/styled.d.ts +17 -5
- package/components/AppInstaller/styled.js +0 -4
- package/components/AppInstaller/styled.js.map +1 -1
- package/components/AppInstaller/useInstaller.d.ts +1 -7
- package/components/AppInstaller/useInstaller.js +72 -183
- package/components/AppInstaller/useInstaller.js.map +1 -1
- package/components/EmptyView.js +4 -12
- package/components/EmptyView.js.map +1 -1
- package/components/FloatingActionButton.js +2 -8
- package/components/FloatingActionButton.js.map +1 -1
- package/components/MultiImageUpload.js +1 -10
- package/components/MultiImageUpload.js.map +1 -1
- package/components/OverlayLayout/OverlayLayout.js +9 -38
- package/components/OverlayLayout/OverlayLayout.js.map +1 -1
- package/components/OverlayLayout/index.js +0 -2
- package/components/OverlayLayout/index.js.map +1 -1
- package/components/Permissions/Permissions.d.ts +2 -0
- package/components/Permissions/Permissions.js +25 -27
- package/components/Permissions/Permissions.js.map +1 -1
- package/components/Permissions/StyledComponents.js +0 -7
- package/components/Permissions/StyledComponents.js.map +1 -1
- package/components/Permissions/index.js +0 -3
- package/components/Permissions/index.js.map +1 -1
- package/components/RichTextEditor/RichTextEditor.js +0 -7
- package/components/RichTextEditor/RichTextEditor.js.map +1 -1
- package/components/RichTextEditor/index.js +0 -2
- package/components/RichTextEditor/index.js.map +1 -1
- package/components/RichTextEditor/tools/header/index.js +62 -102
- package/components/RichTextEditor/tools/header/index.js.map +1 -1
- package/components/RichTextEditor/tools/image/index.js +15 -36
- package/components/RichTextEditor/tools/image/index.js.map +1 -1
- package/components/RichTextEditor/tools/image/svgs.js.map +1 -1
- package/components/RichTextEditor/tools/image/tunes.js +5 -22
- package/components/RichTextEditor/tools/image/tunes.js.map +1 -1
- package/components/RichTextEditor/tools/image/ui.js +16 -39
- package/components/RichTextEditor/tools/image/ui.js.map +1 -1
- package/components/RichTextEditor/tools/paragraph/index.js +55 -81
- package/components/RichTextEditor/tools/paragraph/index.js.map +1 -1
- package/components/RichTextEditor/tools/textColor/index.js +15 -41
- package/components/RichTextEditor/tools/textColor/index.js.map +1 -1
- package/components/RichTextEditor/tools/utils.js +0 -2
- package/components/RichTextEditor/tools/utils.js.map +1 -1
- package/components/Routes.js +6 -13
- package/components/Routes.js.map +1 -1
- package/components/SearchUI.d.ts +1 -0
- package/components/SearchUI.js +14 -14
- package/components/SearchUI.js.map +1 -1
- package/components/SimpleForm/SimpleForm.js +3 -32
- package/components/SimpleForm/SimpleForm.js.map +1 -1
- package/components/SimpleForm/index.js +0 -1
- package/components/SimpleForm/index.js.map +1 -1
- package/components/SimpleUI/InputField.d.ts +2 -0
- package/components/SimpleUI/InputField.js +16 -30
- package/components/SimpleUI/InputField.js.map +1 -1
- package/components/SingleImageUpload.d.ts +1 -1
- package/components/SingleImageUpload.js +14 -30
- package/components/SingleImageUpload.js.map +1 -1
- package/components/SplitView/SplitView.js +1 -20
- package/components/SplitView/SplitView.js.map +1 -1
- package/components/SplitView/index.js +0 -1
- package/components/SplitView/index.js.map +1 -1
- package/components/index.d.ts +1 -1
- package/components/index.js +1 -2
- package/components/index.js.map +1 -1
- package/hooks/useConfirmationDialog.js +6 -18
- package/hooks/useConfirmationDialog.js.map +1 -1
- package/hooks/useDialog.js +0 -5
- package/hooks/useDialog.js.map +1 -1
- package/hooks/useSnackbar.js +0 -5
- package/hooks/useSnackbar.js.map +1 -1
- package/index.d.ts +2 -3
- package/index.js +1 -61
- package/index.js.map +1 -1
- package/package.json +22 -32
- package/plugins/MenuPlugin.js +0 -15
- package/plugins/MenuPlugin.js.map +1 -1
- package/plugins/PermissionRendererPlugin.js +0 -15
- package/plugins/PermissionRendererPlugin.js.map +1 -1
- package/plugins/globalSearch/SearchBar.js +5 -53
- package/plugins/globalSearch/SearchBar.js.map +1 -1
- package/plugins/globalSearch/SearchBarDropdown.js +15 -33
- package/plugins/globalSearch/SearchBarDropdown.js.map +1 -1
- package/plugins/globalSearch/index.js.map +1 -1
- package/plugins/globalSearch/styled.d.ts +13 -4
- package/plugins/globalSearch/styled.js +1 -5
- package/plugins/globalSearch/styled.js.map +1 -1
- package/plugins/uiLayoutRenderer/index.js +2 -16
- package/plugins/uiLayoutRenderer/index.js.map +1 -1
- package/styles/theme.scss +31 -1
- package/types.d.ts +23 -27
- package/types.js.map +1 -1
- package/ui/UIElement.js +0 -1
- package/ui/UIElement.js.map +1 -1
- package/ui/UILayout.js +0 -1
- package/ui/UILayout.js.map +1 -1
- package/ui/UIRenderer.js +0 -1
- package/ui/UIRenderer.js.map +1 -1
- package/ui/UIView.js +0 -1
- package/ui/UIView.js.map +1 -1
- package/ui/elements/AccordionElement.js +2 -28
- package/ui/elements/AccordionElement.js.map +1 -1
- package/ui/elements/ButtonElement.js +0 -19
- package/ui/elements/ButtonElement.js.map +1 -1
- package/ui/elements/ButtonGroupElement.js +0 -19
- package/ui/elements/ButtonGroupElement.js.map +1 -1
- package/ui/elements/GenericElement.js +0 -2
- package/ui/elements/GenericElement.js.map +1 -1
- package/ui/elements/LabelElement.js +0 -14
- package/ui/elements/LabelElement.js.map +1 -1
- package/ui/elements/NavigationMenuElement.js +3 -36
- package/ui/elements/NavigationMenuElement.js.map +1 -1
- package/ui/elements/PanelElement.js +0 -11
- package/ui/elements/PanelElement.js.map +1 -1
- package/ui/elements/PlaceholderElement.js +0 -11
- package/ui/elements/PlaceholderElement.js.map +1 -1
- package/ui/elements/SmallButtonElement.js +0 -19
- package/ui/elements/SmallButtonElement.js.map +1 -1
- package/ui/elements/TypographyElement.js +0 -19
- package/ui/elements/TypographyElement.js.map +1 -1
- package/ui/elements/ViewElement.js +0 -2
- package/ui/elements/ViewElement.js.map +1 -1
- package/ui/elements/form/DynamicFieldsetElement/DynamicFieldsetRowElement.js +0 -16
- package/ui/elements/form/DynamicFieldsetElement/DynamicFieldsetRowElement.js.map +1 -1
- package/ui/elements/form/DynamicFieldsetElement.js +11 -34
- package/ui/elements/form/DynamicFieldsetElement.js.map +1 -1
- package/ui/elements/form/FileManagerElement/EmptyStateElement.js +0 -15
- package/ui/elements/form/FileManagerElement/EmptyStateElement.js.map +1 -1
- package/ui/elements/form/FileManagerElement/EmptyStateElementRenderer.js +5 -27
- package/ui/elements/form/FileManagerElement/EmptyStateElementRenderer.js.map +1 -1
- package/ui/elements/form/FileManagerElement/FileManagerElementRenderer.js +4 -23
- package/ui/elements/form/FileManagerElement/FileManagerElementRenderer.js.map +1 -1
- package/ui/elements/form/FileManagerElement/styled.d.ts +23 -16
- package/ui/elements/form/FileManagerElement/styled.js +0 -5
- package/ui/elements/form/FileManagerElement/styled.js.map +1 -1
- package/ui/elements/form/FileManagerElement.js +0 -20
- package/ui/elements/form/FileManagerElement.js.map +1 -1
- package/ui/elements/form/FormElement.js +0 -21
- package/ui/elements/form/FormElement.js.map +1 -1
- package/ui/elements/form/FormFieldElement.js +0 -33
- package/ui/elements/form/FormFieldElement.js.map +1 -1
- package/ui/elements/form/HiddenElement.js +0 -17
- package/ui/elements/form/HiddenElement.js.map +1 -1
- package/ui/elements/form/InputElement.js +0 -18
- package/ui/elements/form/InputElement.js.map +1 -1
- package/ui/elements/form/PasswordElement.js +0 -15
- package/ui/elements/form/PasswordElement.js.map +1 -1
- package/ui/elements/form/SelectElement.js +1 -19
- package/ui/elements/form/SelectElement.js.map +1 -1
- package/ui/elements/form/TextareaElement.js +0 -17
- package/ui/elements/form/TextareaElement.js.map +1 -1
- package/ui/views/AdminView/ContentElement.js +1 -25
- package/ui/views/AdminView/ContentElement.js.map +1 -1
- package/ui/views/AdminView/HeaderElement.js +0 -40
- package/ui/views/AdminView/HeaderElement.js.map +1 -1
- package/ui/views/AdminView/HeaderSectionCenterElement.js +0 -20
- package/ui/views/AdminView/HeaderSectionCenterElement.js.map +1 -1
- package/ui/views/AdminView/HeaderSectionLeftElement.js +0 -20
- package/ui/views/AdminView/HeaderSectionLeftElement.js.map +1 -1
- package/ui/views/AdminView/HeaderSectionRightElement.js +0 -20
- package/ui/views/AdminView/HeaderSectionRightElement.js.map +1 -1
- package/ui/views/AdminView/components/Dialog.js +10 -21
- package/ui/views/AdminView/components/Dialog.js.map +1 -1
- package/ui/views/AdminView/components/Hamburger.js +2 -10
- package/ui/views/AdminView/components/Hamburger.js.map +1 -1
- package/ui/views/AdminView/components/Snackbar.js +0 -9
- package/ui/views/AdminView/components/Snackbar.js.map +1 -1
- package/ui/views/FormView/FormContainerElement.js +0 -21
- package/ui/views/FormView/FormContainerElement.js.map +1 -1
- package/ui/views/FormView/FormContentElement.js +0 -11
- package/ui/views/FormView/FormContentElement.js.map +1 -1
- package/ui/views/FormView/FormFooterElement.js +0 -19
- package/ui/views/FormView/FormFooterElement.js.map +1 -1
- package/ui/views/FormView/FormHeaderElement.js +2 -24
- package/ui/views/FormView/FormHeaderElement.js.map +1 -1
- package/ui/views/FormView.js +0 -41
- package/ui/views/FormView.js.map +1 -1
- package/ui/views/OverlayView/ContentElement.js +0 -19
- package/ui/views/OverlayView/ContentElement.js.map +1 -1
- package/ui/views/OverlayView/HeaderElement.js +4 -26
- package/ui/views/OverlayView/HeaderElement.js.map +1 -1
- package/ui/views/OverlayView/HeaderTitleElement.js +0 -22
- package/ui/views/OverlayView/HeaderTitleElement.js.map +1 -1
- package/ui/views/OverlayView/useOverlayView.js +3 -13
- package/ui/views/OverlayView/useOverlayView.js.map +1 -1
- package/ui/views/OverlayView.js +4 -38
- package/ui/views/OverlayView.js.map +1 -1
- package/ui/views/SplitView/SplitViewPanelElement.js +2 -22
- package/ui/views/SplitView/SplitViewPanelElement.js.map +1 -1
- package/ui/views/SplitView.js +0 -40
- package/ui/views/SplitView.js.map +1 -1
|
@@ -1,24 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
-
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
7
|
exports.default = void 0;
|
|
9
|
-
|
|
10
8
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
11
|
-
|
|
12
9
|
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
13
|
-
|
|
14
10
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
15
|
-
|
|
16
11
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
17
|
-
|
|
18
12
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
19
|
-
|
|
20
13
|
var _utils = require("../utils");
|
|
21
|
-
|
|
22
14
|
var Paragraph = /*#__PURE__*/function () {
|
|
23
15
|
// private readonly _settings: any;
|
|
24
16
|
|
|
@@ -33,9 +25,9 @@ var Paragraph = /*#__PURE__*/function () {
|
|
|
33
25
|
*/
|
|
34
26
|
function Paragraph(_ref) {
|
|
35
27
|
var data = _ref.data,
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
28
|
+
config = _ref.config,
|
|
29
|
+
api = _ref.api,
|
|
30
|
+
readOnly = _ref.readOnly;
|
|
39
31
|
(0, _classCallCheck2.default)(this, Paragraph);
|
|
40
32
|
(0, _defineProperty2.default)(this, "api", void 0);
|
|
41
33
|
(0, _defineProperty2.default)(this, "readOnly", void 0);
|
|
@@ -56,33 +48,31 @@ var Paragraph = /*#__PURE__*/function () {
|
|
|
56
48
|
settingsButtonActive: this.api.styles.settingsButtonActive,
|
|
57
49
|
wrapper: "ce-paragraph"
|
|
58
50
|
};
|
|
59
|
-
|
|
60
51
|
if (!this.readOnly) {
|
|
61
52
|
this.onKeyUp = this.onKeyUp.bind(this);
|
|
62
53
|
}
|
|
54
|
+
|
|
63
55
|
/**
|
|
64
56
|
* Placeholder for paragraph if it is first Block
|
|
65
57
|
* @type {string}
|
|
66
58
|
*/
|
|
67
|
-
|
|
68
|
-
|
|
69
59
|
this._placeholder = config.placeholder ? config.placeholder : Paragraph.DEFAULT_PLACEHOLDER;
|
|
70
60
|
this._data = this.normalizeData(data);
|
|
71
61
|
this._element = this.drawView();
|
|
72
62
|
this._preserveBlank = config.preserveBlank !== undefined ? config.preserveBlank : false;
|
|
73
63
|
this.settingsButtons = [];
|
|
74
|
-
this.alignments = _utils.ALIGNMENTS;
|
|
64
|
+
this.alignments = _utils.ALIGNMENTS;
|
|
75
65
|
|
|
66
|
+
// Call the `data` setter, to properly render the view element.
|
|
76
67
|
this.data = this._data;
|
|
77
68
|
}
|
|
69
|
+
|
|
78
70
|
/**
|
|
79
71
|
* Default placeholder for Paragraph Tool
|
|
80
72
|
*
|
|
81
73
|
* @return {string}
|
|
82
74
|
* @constructor
|
|
83
75
|
*/
|
|
84
|
-
|
|
85
|
-
|
|
86
76
|
(0, _createClass2.default)(Paragraph, [{
|
|
87
77
|
key: "data",
|
|
88
78
|
get:
|
|
@@ -92,12 +82,15 @@ var Paragraph = /*#__PURE__*/function () {
|
|
|
92
82
|
* @private
|
|
93
83
|
*/
|
|
94
84
|
function get() {
|
|
95
|
-
var text = this._element.innerHTML;
|
|
85
|
+
var text = this._element.innerHTML;
|
|
86
|
+
|
|
87
|
+
// this._data.text = text;
|
|
96
88
|
|
|
97
89
|
return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, this._data), {}, {
|
|
98
90
|
text: text
|
|
99
91
|
});
|
|
100
92
|
}
|
|
93
|
+
|
|
101
94
|
/**
|
|
102
95
|
* Store data in plugin:
|
|
103
96
|
* - at the this._data property
|
|
@@ -105,17 +98,15 @@ var Paragraph = /*#__PURE__*/function () {
|
|
|
105
98
|
*
|
|
106
99
|
* @param {ParagraphData} data — data to set
|
|
107
100
|
* @private
|
|
108
|
-
|
|
109
|
-
,
|
|
101
|
+
*/,
|
|
110
102
|
set: function set(data) {
|
|
111
103
|
var _this = this;
|
|
112
|
-
|
|
113
104
|
this._data = data || {};
|
|
114
105
|
this._element.innerHTML = this._data.text || "";
|
|
106
|
+
|
|
115
107
|
/**
|
|
116
108
|
* Add Alignment class
|
|
117
109
|
*/
|
|
118
|
-
|
|
119
110
|
this.alignments.forEach(function (alignment) {
|
|
120
111
|
if (alignment.name === _this._data.textAlign) {
|
|
121
112
|
_this._element.classList.add("ce-header-text--".concat(alignment.name));
|
|
@@ -123,23 +114,22 @@ var Paragraph = /*#__PURE__*/function () {
|
|
|
123
114
|
_this._element.classList.remove("ce-header-text--".concat(alignment.name));
|
|
124
115
|
}
|
|
125
116
|
});
|
|
117
|
+
|
|
126
118
|
/**
|
|
127
119
|
* Add Typography class
|
|
128
120
|
*/
|
|
129
|
-
|
|
130
121
|
if (this._data.className) {
|
|
131
122
|
var _this$_element$classL;
|
|
132
|
-
|
|
133
123
|
(_this$_element$classL = this._element.classList).add.apply(_this$_element$classL, (0, _toConsumableArray2.default)(this._data.className.split(" ")));
|
|
134
124
|
}
|
|
135
125
|
}
|
|
126
|
+
|
|
136
127
|
/**
|
|
137
128
|
* Used by Editor paste handling API.
|
|
138
129
|
* Provides configuration to handle P tags.
|
|
139
130
|
*
|
|
140
131
|
* @returns {{tags: string[]}}
|
|
141
132
|
*/
|
|
142
|
-
|
|
143
133
|
}, {
|
|
144
134
|
key: "currentAlignment",
|
|
145
135
|
get:
|
|
@@ -150,167 +140,156 @@ var Paragraph = /*#__PURE__*/function () {
|
|
|
150
140
|
*/
|
|
151
141
|
function get() {
|
|
152
142
|
var _this2 = this;
|
|
153
|
-
|
|
154
143
|
var alignment = this.alignments.find(function (alignment) {
|
|
155
144
|
return alignment.name === _this2._data.textAlign;
|
|
156
145
|
});
|
|
157
|
-
|
|
158
146
|
if (!alignment) {
|
|
159
147
|
alignment = {
|
|
160
148
|
name: _utils.TextAlign.START,
|
|
161
149
|
svg: _utils.ALIGNMENT_ICONS.start
|
|
162
150
|
};
|
|
163
151
|
}
|
|
164
|
-
|
|
165
152
|
return alignment;
|
|
166
153
|
}
|
|
154
|
+
|
|
167
155
|
/**
|
|
168
156
|
* Check if text content is empty and set empty string to inner html.
|
|
169
157
|
* We need this because some browsers (e.g. Safari) insert <br> into empty contentEditable elements
|
|
170
158
|
*
|
|
171
159
|
* @param {KeyboardEvent} e - key up event
|
|
172
160
|
*/
|
|
173
|
-
|
|
174
161
|
}, {
|
|
175
162
|
key: "onKeyUp",
|
|
176
163
|
value: function onKeyUp(e) {
|
|
177
164
|
if (e.code !== "Backspace" && e.code !== "Delete") {
|
|
178
165
|
return;
|
|
179
166
|
}
|
|
180
|
-
|
|
181
167
|
var textContent = this._element.textContent;
|
|
182
|
-
|
|
183
168
|
if (textContent === "") {
|
|
184
169
|
this._element.innerHTML = "";
|
|
185
170
|
}
|
|
186
171
|
}
|
|
172
|
+
|
|
187
173
|
/**
|
|
188
174
|
* Create Tool's view
|
|
189
175
|
* @return {HTMLElement}
|
|
190
176
|
* @private
|
|
191
177
|
*/
|
|
192
|
-
|
|
193
178
|
}, {
|
|
194
179
|
key: "drawView",
|
|
195
180
|
value: function drawView() {
|
|
196
181
|
var div = document.createElement("div");
|
|
197
|
-
div.classList.add(this._CSS.wrapper, this._CSS.block);
|
|
198
|
-
|
|
182
|
+
div.classList.add(this._CSS.wrapper, this._CSS.block);
|
|
183
|
+
// Add custom className to view.
|
|
199
184
|
if (this._data.className) {
|
|
200
185
|
div.classList.add(this._data.className);
|
|
201
186
|
}
|
|
202
|
-
|
|
203
187
|
div.contentEditable = "false";
|
|
204
188
|
div.dataset["placeholder"] = this.api.i18n.t(this._placeholder);
|
|
205
|
-
|
|
206
189
|
if (!this.readOnly) {
|
|
207
190
|
div.contentEditable = "true";
|
|
208
191
|
div.addEventListener("keyup", this.onKeyUp);
|
|
209
192
|
}
|
|
210
|
-
|
|
211
193
|
return div;
|
|
212
194
|
}
|
|
195
|
+
|
|
213
196
|
/**
|
|
214
197
|
* Return Tool's view
|
|
215
198
|
*/
|
|
216
|
-
|
|
217
199
|
}, {
|
|
218
200
|
key: "render",
|
|
219
201
|
value: function render() {
|
|
220
202
|
return this._element;
|
|
221
203
|
}
|
|
204
|
+
|
|
222
205
|
/**
|
|
223
206
|
* Create Block's settings block
|
|
224
207
|
*/
|
|
225
|
-
|
|
226
208
|
}, {
|
|
227
209
|
key: "renderSettings",
|
|
228
210
|
value: function renderSettings() {
|
|
229
211
|
var _this3 = this;
|
|
212
|
+
var holder = document.createElement("div");
|
|
230
213
|
|
|
231
|
-
|
|
232
|
-
|
|
214
|
+
// Add alignment selectors
|
|
233
215
|
this.alignments.forEach(function (alignment) {
|
|
234
216
|
var selectTypeButton = document.createElement("span");
|
|
235
217
|
selectTypeButton.classList.add(_this3._CSS.settingsButton);
|
|
218
|
+
|
|
236
219
|
/**
|
|
237
220
|
* Highlight current level button
|
|
238
221
|
*/
|
|
239
|
-
|
|
240
222
|
if (_this3.currentAlignment.name === alignment.name) {
|
|
241
223
|
selectTypeButton.classList.add(_this3._CSS.settingsButtonActive);
|
|
242
224
|
}
|
|
225
|
+
|
|
243
226
|
/**
|
|
244
227
|
* Add SVG icon
|
|
245
228
|
*/
|
|
246
|
-
|
|
247
|
-
|
|
248
229
|
selectTypeButton.innerHTML = alignment.svg;
|
|
230
|
+
|
|
249
231
|
/**
|
|
250
232
|
* Save alignment to its button
|
|
251
233
|
*/
|
|
252
|
-
|
|
253
234
|
selectTypeButton.dataset["textAlign"] = alignment.name;
|
|
235
|
+
|
|
254
236
|
/**
|
|
255
237
|
* Set up click handler
|
|
256
238
|
*/
|
|
257
|
-
|
|
258
239
|
selectTypeButton.addEventListener("click", function () {
|
|
259
240
|
_this3.setAlignment(alignment);
|
|
260
241
|
});
|
|
242
|
+
|
|
261
243
|
/**
|
|
262
244
|
* Append settings button to holder
|
|
263
245
|
*/
|
|
264
|
-
|
|
265
246
|
holder.appendChild(selectTypeButton);
|
|
247
|
+
|
|
266
248
|
/**
|
|
267
249
|
* Save settings buttons
|
|
268
250
|
*/
|
|
269
|
-
|
|
270
251
|
_this3.settingsButtons.push(selectTypeButton);
|
|
271
|
-
});
|
|
252
|
+
});
|
|
272
253
|
|
|
254
|
+
// Add `Typography` selector
|
|
273
255
|
if (this.typography) {
|
|
274
256
|
var typographyForParagraph = Object.values(this.typography).filter(function (item) {
|
|
275
257
|
return item.component === "p";
|
|
276
258
|
});
|
|
277
|
-
var selectTypeButton = document.createElement("SELECT");
|
|
278
|
-
|
|
279
|
-
selectTypeButton.classList.add(this.api.styles.input);
|
|
280
|
-
|
|
259
|
+
var selectTypeButton = document.createElement("SELECT");
|
|
260
|
+
// Add editor's default input style
|
|
261
|
+
selectTypeButton.classList.add(this.api.styles.input);
|
|
262
|
+
// Add typography options
|
|
281
263
|
typographyForParagraph.forEach(function (item) {
|
|
282
264
|
var option = new Option(item.label, item.className);
|
|
283
265
|
selectTypeButton.appendChild(option);
|
|
284
|
-
});
|
|
285
|
-
|
|
266
|
+
});
|
|
267
|
+
// Add "onclick" handler
|
|
286
268
|
selectTypeButton.onclick = function (event) {
|
|
287
269
|
var _ref2 = event.target,
|
|
288
|
-
|
|
289
|
-
|
|
270
|
+
value = _ref2.value;
|
|
290
271
|
_this3.setTypographyClass(value);
|
|
291
272
|
};
|
|
273
|
+
|
|
292
274
|
/**
|
|
293
275
|
* Append settings button to holder
|
|
294
276
|
*/
|
|
295
|
-
|
|
296
|
-
|
|
297
277
|
holder.appendChild(selectTypeButton);
|
|
278
|
+
|
|
298
279
|
/**
|
|
299
280
|
* Save settings buttons
|
|
300
281
|
*/
|
|
301
|
-
|
|
302
282
|
this.settingsButtons.push(selectTypeButton);
|
|
303
283
|
}
|
|
304
|
-
|
|
305
284
|
return holder;
|
|
306
285
|
}
|
|
286
|
+
|
|
307
287
|
/**
|
|
308
288
|
* Method that specified how to merge two Text blocks.
|
|
309
289
|
* Called by Editor.js by backspace at the beginning of the Block
|
|
310
290
|
* @param {ParagraphData} data
|
|
311
291
|
* @public
|
|
312
292
|
*/
|
|
313
|
-
|
|
314
293
|
}, {
|
|
315
294
|
key: "merge",
|
|
316
295
|
value: function merge(data) {
|
|
@@ -318,6 +297,7 @@ var Paragraph = /*#__PURE__*/function () {
|
|
|
318
297
|
text: this.data.text + data.text
|
|
319
298
|
});
|
|
320
299
|
}
|
|
300
|
+
|
|
321
301
|
/**
|
|
322
302
|
* Validate Paragraph block data:
|
|
323
303
|
* - check for emptiness
|
|
@@ -326,19 +306,18 @@ var Paragraph = /*#__PURE__*/function () {
|
|
|
326
306
|
* @returns {boolean} false if saved data is not correct, otherwise true
|
|
327
307
|
* @public
|
|
328
308
|
*/
|
|
329
|
-
|
|
330
309
|
}, {
|
|
331
310
|
key: "validate",
|
|
332
311
|
value: function validate(savedData) {
|
|
333
312
|
return !(savedData.text.trim() === "" && !this._preserveBlank);
|
|
334
313
|
}
|
|
314
|
+
|
|
335
315
|
/**
|
|
336
316
|
* Extract Tool's data from the view
|
|
337
317
|
* @param {HTMLDivElement} toolsContent - Paragraph tools rendered view
|
|
338
318
|
* @returns {ParagraphData} - saved data
|
|
339
319
|
* @public
|
|
340
320
|
*/
|
|
341
|
-
|
|
342
321
|
}, {
|
|
343
322
|
key: "save",
|
|
344
323
|
value: function save(toolsContent) {
|
|
@@ -348,18 +327,18 @@ var Paragraph = /*#__PURE__*/function () {
|
|
|
348
327
|
className: this.data.className
|
|
349
328
|
};
|
|
350
329
|
}
|
|
330
|
+
|
|
351
331
|
/**
|
|
352
332
|
* Extract textAlign from className
|
|
353
333
|
*
|
|
354
334
|
* @param {string} className - heading element className
|
|
355
335
|
* @returns {TextAlign} textAlign
|
|
356
336
|
*/
|
|
357
|
-
|
|
358
337
|
}, {
|
|
359
338
|
key: "getTextAlign",
|
|
360
339
|
value: function getTextAlign(className) {
|
|
361
|
-
var textAlign = _utils.TextAlign.START;
|
|
362
|
-
|
|
340
|
+
var textAlign = _utils.TextAlign.START;
|
|
341
|
+
// Match className with alignment
|
|
363
342
|
this.alignments.forEach(function (alignment) {
|
|
364
343
|
if (className.includes("ce-header-text--".concat(alignment.name))) {
|
|
365
344
|
textAlign = alignment.name;
|
|
@@ -367,12 +346,12 @@ var Paragraph = /*#__PURE__*/function () {
|
|
|
367
346
|
});
|
|
368
347
|
return textAlign;
|
|
369
348
|
}
|
|
349
|
+
|
|
370
350
|
/**
|
|
371
351
|
* On paste callback fired from Editor.
|
|
372
352
|
*
|
|
373
353
|
* @param {PasteEvent} event - event with pasted data
|
|
374
354
|
*/
|
|
375
|
-
|
|
376
355
|
}, {
|
|
377
356
|
key: "onPaste",
|
|
378
357
|
value: function onPaste(event) {
|
|
@@ -381,35 +360,34 @@ var Paragraph = /*#__PURE__*/function () {
|
|
|
381
360
|
text: detail.data.innerHTML
|
|
382
361
|
});
|
|
383
362
|
}
|
|
363
|
+
|
|
384
364
|
/**
|
|
385
365
|
* Callback for Block's settings buttons
|
|
386
366
|
*
|
|
387
367
|
* @param {number} alignment - level to set
|
|
388
368
|
*/
|
|
389
|
-
|
|
390
369
|
}, {
|
|
391
370
|
key: "setAlignment",
|
|
392
371
|
value: function setAlignment(alignment) {
|
|
393
372
|
var _this4 = this;
|
|
394
|
-
|
|
395
373
|
this.data = {
|
|
396
374
|
textAlign: alignment.name,
|
|
397
375
|
text: this.data.text
|
|
398
376
|
};
|
|
377
|
+
|
|
399
378
|
/**
|
|
400
379
|
* Highlight button by selected level
|
|
401
380
|
*/
|
|
402
|
-
|
|
403
381
|
this.settingsButtons.forEach(function (button) {
|
|
404
382
|
button.classList.toggle(_this4._CSS.settingsButtonActive, button.dataset["textAlign"] === alignment.name);
|
|
405
383
|
});
|
|
406
384
|
}
|
|
385
|
+
|
|
407
386
|
/**
|
|
408
387
|
* Callback for Block's settings buttons
|
|
409
388
|
*
|
|
410
389
|
* @param {string} className - name of typography class
|
|
411
390
|
*/
|
|
412
|
-
|
|
413
391
|
}, {
|
|
414
392
|
key: "setTypographyClass",
|
|
415
393
|
value: function setTypographyClass(className) {
|
|
@@ -419,6 +397,7 @@ var Paragraph = /*#__PURE__*/function () {
|
|
|
419
397
|
className: className
|
|
420
398
|
};
|
|
421
399
|
}
|
|
400
|
+
|
|
422
401
|
/**
|
|
423
402
|
* Normalize input data
|
|
424
403
|
*
|
|
@@ -427,16 +406,13 @@ var Paragraph = /*#__PURE__*/function () {
|
|
|
427
406
|
* @returns {HeaderData}
|
|
428
407
|
* @private
|
|
429
408
|
*/
|
|
430
|
-
|
|
431
409
|
}, {
|
|
432
410
|
key: "normalizeData",
|
|
433
411
|
value: function normalizeData(data) {
|
|
434
412
|
var newData = {};
|
|
435
|
-
|
|
436
413
|
if (typeof data !== "object") {
|
|
437
414
|
data = {};
|
|
438
415
|
}
|
|
439
|
-
|
|
440
416
|
newData.text = data.text || "";
|
|
441
417
|
newData.textAlign = data.textAlign || _utils.TextAlign.START;
|
|
442
418
|
newData.className = data.className || "";
|
|
@@ -447,10 +423,10 @@ var Paragraph = /*#__PURE__*/function () {
|
|
|
447
423
|
get: function get() {
|
|
448
424
|
return "";
|
|
449
425
|
}
|
|
426
|
+
|
|
450
427
|
/**
|
|
451
428
|
* Enable Conversion Toolbar. Paragraph can be converted to/from other tools
|
|
452
429
|
*/
|
|
453
|
-
|
|
454
430
|
}, {
|
|
455
431
|
key: "conversionConfig",
|
|
456
432
|
get: function get() {
|
|
@@ -458,13 +434,12 @@ var Paragraph = /*#__PURE__*/function () {
|
|
|
458
434
|
export: "text",
|
|
459
435
|
// to convert Paragraph to other block, use 'text' property of saved data
|
|
460
436
|
import: "text" // to covert other block's exported string to Paragraph, fill 'text' property of tool data
|
|
461
|
-
|
|
462
437
|
};
|
|
463
438
|
}
|
|
439
|
+
|
|
464
440
|
/**
|
|
465
441
|
* Sanitizer rules
|
|
466
442
|
*/
|
|
467
|
-
|
|
468
443
|
}, {
|
|
469
444
|
key: "sanitize",
|
|
470
445
|
get: function get() {
|
|
@@ -474,12 +449,12 @@ var Paragraph = /*#__PURE__*/function () {
|
|
|
474
449
|
}
|
|
475
450
|
};
|
|
476
451
|
}
|
|
452
|
+
|
|
477
453
|
/**
|
|
478
454
|
* Returns true to notify the core that read-only mode is supported
|
|
479
455
|
*
|
|
480
456
|
* @return {boolean}
|
|
481
457
|
*/
|
|
482
|
-
|
|
483
458
|
}, {
|
|
484
459
|
key: "isReadOnlySupported",
|
|
485
460
|
get: function get() {
|
|
@@ -492,12 +467,12 @@ var Paragraph = /*#__PURE__*/function () {
|
|
|
492
467
|
tags: ["P"]
|
|
493
468
|
};
|
|
494
469
|
}
|
|
470
|
+
|
|
495
471
|
/**
|
|
496
472
|
* Icon and title for displaying at the Toolbox
|
|
497
473
|
*
|
|
498
474
|
* @return {{icon: string, title: string}}
|
|
499
475
|
*/
|
|
500
|
-
|
|
501
476
|
}, {
|
|
502
477
|
key: "toolbox",
|
|
503
478
|
get: function get() {
|
|
@@ -509,6 +484,5 @@ var Paragraph = /*#__PURE__*/function () {
|
|
|
509
484
|
}]);
|
|
510
485
|
return Paragraph;
|
|
511
486
|
}();
|
|
512
|
-
|
|
513
487
|
var _default = Paragraph;
|
|
514
488
|
exports.default = _default;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Paragraph","data","config","api","readOnly","typography","_CSS","block","styles","settingsButton","settingsButtonActive","wrapper","onKeyUp","bind","_placeholder","placeholder","DEFAULT_PLACEHOLDER","_data","normalizeData","_element","drawView","_preserveBlank","preserveBlank","undefined","settingsButtons","alignments","ALIGNMENTS","text","innerHTML","forEach","alignment","name","textAlign","classList","add","remove","className","split","find","TextAlign","START","svg","ALIGNMENT_ICONS","start","e","code","textContent","div","document","createElement","contentEditable","dataset","i18n","t","addEventListener","holder","selectTypeButton","currentAlignment","setAlignment","appendChild","push","typographyForParagraph","Object","values","filter","item","component","input","option","Option","label","onclick","event","target","value","setTypographyClass","savedData","trim","toolsContent","getTextAlign","includes","detail","button","toggle","newData","export","import","br","tags","icon","title"],"sources":["index.ts"],"sourcesContent":["import { API, PasteEvent } from \"@editorjs/editorjs\";\nimport { Alignment, ALIGNMENTS, TextAlign, ALIGNMENT_ICONS } from \"../utils\";\nimport { HTMLPasteEventDetail } from \"@editorjs/editorjs/types/tools/paste-events\";\n\n/**\n * @typedef {object} ParagraphConfig\n * @property {string} placeholder - placeholder for the empty paragraph\n * @property {boolean} preserveBlank - Whether or not to keep blank paragraphs when saving editor data`\n */\ninterface ParagraphConfig {\n placeholder: string;\n preserveBlank: boolean;\n typography?: Typography;\n}\n/**\n * @typedef {Object} ParagraphData\n * @description Tool's input and output data format\n * @property {String} text — Paragraph's content. Can include HTML tags: <a><b><i>\n */\ninterface ParagraphData {\n text: string;\n textAlign: TextAlign;\n className?: string;\n}\n\ninterface Typography {\n [key: string]: {\n label: string;\n component: string;\n className: string;\n };\n}\n\ninterface ParagraphArgs {\n data: ParagraphData;\n config: ParagraphConfig;\n api: any;\n readOnly: boolean;\n}\nclass Paragraph {\n private readonly api: API;\n private readonly readOnly: boolean;\n private readonly _CSS: any;\n // private readonly _settings: any;\n private _data: ParagraphData;\n private readonly _element: any;\n private readonly _placeholder: string;\n private readonly _preserveBlank: boolean;\n private readonly alignments: Alignment[];\n private readonly settingsButtons: HTMLElement[];\n private readonly typography: Typography | null;\n\n /**\n * Render plugin`s main Element and fill it with saved data\n *\n * @param {object} params - constructor params\n * @param {ParagraphData} params.data - previously saved data\n * @param {ParagraphConfig} params.config - user config for Tool\n * @param {object} params.api - editor.js api\n * @param {boolean} readOnly - read only mode flag\n */\n public constructor({ data, config, api, readOnly }: ParagraphArgs) {\n this.api = api;\n this.readOnly = readOnly;\n this.typography = config.typography || null;\n this._CSS = {\n block: this.api.styles.block,\n settingsButton: this.api.styles.settingsButton,\n settingsButtonActive: this.api.styles.settingsButtonActive,\n wrapper: \"ce-paragraph\"\n };\n\n if (!this.readOnly) {\n this.onKeyUp = this.onKeyUp.bind(this);\n }\n\n /**\n * Placeholder for paragraph if it is first Block\n * @type {string}\n */\n this._placeholder = config.placeholder ? config.placeholder : Paragraph.DEFAULT_PLACEHOLDER;\n this._data = this.normalizeData(data);\n this._element = this.drawView();\n this._preserveBlank = config.preserveBlank !== undefined ? config.preserveBlank : false;\n this.settingsButtons = [];\n this.alignments = ALIGNMENTS;\n\n // Call the `data` setter, to properly render the view element.\n this.data = this._data;\n }\n\n /**\n * Default placeholder for Paragraph Tool\n *\n * @return {string}\n * @constructor\n */\n public static get DEFAULT_PLACEHOLDER(): string {\n return \"\";\n }\n\n /**\n * Enable Conversion Toolbar. Paragraph can be converted to/from other tools\n */\n public static get conversionConfig() {\n return {\n export: \"text\", // to convert Paragraph to other block, use 'text' property of saved data\n import: \"text\" // to covert other block's exported string to Paragraph, fill 'text' property of tool data\n };\n }\n\n /**\n * Sanitizer rules\n */\n public static get sanitize() {\n return {\n text: {\n br: true\n }\n };\n }\n\n /**\n * Returns true to notify the core that read-only mode is supported\n *\n * @return {boolean}\n */\n public static get isReadOnlySupported(): boolean {\n return true;\n }\n\n /**\n * Get current Tools`s data\n * @returns {ParagraphData} Current data\n * @private\n */\n public get data(): ParagraphData {\n const text = this._element.innerHTML;\n\n // this._data.text = text;\n\n return {\n ...this._data,\n text\n };\n }\n\n /**\n * Store data in plugin:\n * - at the this._data property\n * - at the HTML\n *\n * @param {ParagraphData} data — data to set\n * @private\n */\n public set data(data: ParagraphData) {\n this._data = data || ({} as ParagraphData);\n\n this._element.innerHTML = this._data.text || \"\";\n\n /**\n * Add Alignment class\n */\n this.alignments.forEach(alignment => {\n if (alignment.name === this._data.textAlign) {\n this._element.classList.add(`ce-header-text--${alignment.name}`);\n } else {\n this._element.classList.remove(`ce-header-text--${alignment.name}`);\n }\n });\n\n /**\n * Add Typography class\n */\n if (this._data.className) {\n this._element.classList.add(...this._data.className.split(\" \"));\n }\n }\n\n /**\n * Used by Editor paste handling API.\n * Provides configuration to handle P tags.\n *\n * @returns {{tags: string[]}}\n */\n public static get pasteConfig() {\n return {\n tags: [\"P\"]\n };\n }\n\n /**\n * Icon and title for displaying at the Toolbox\n *\n * @return {{icon: string, title: string}}\n */\n public static get toolbox() {\n return {\n icon:\n '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0.2 -0.3 9 11.4\" width=\"12\" height=\"14\">\\n' +\n ' <path d=\"M0 2.77V.92A1 1 0 01.2.28C.35.1.56 0 .83 0h7.66c.28.01.48.1.63.28.14.17.21.38.21.64v1.85c0 .26-.08.48-.23.66-.15.17-.37.26-.66.26-.28 0-.5-.09-.64-.26a1 1 0 01-.21-.66V1.69H5.6v7.58h.5c.25 0 .45.08.6.23.17.16.25.35.25.6s-.08.45-.24.6a.87.87 0 01-.62.22H3.21a.87.87 0 01-.61-.22.78.78 0 01-.24-.6c0-.25.08-.44.24-.6a.85.85 0 01.61-.23h.5V1.7H1.73v1.08c0 .26-.08.48-.23.66-.15.17-.37.26-.66.26-.28 0-.5-.09-.64-.26A1 1 0 010 2.77z\"/>\\n' +\n \"</svg>\",\n title: \"Text\"\n };\n }\n\n /**\n * Get current alignment\n *\n * @returns {alignment}\n */\n public get currentAlignment(): Alignment {\n let alignment = this.alignments.find(alignment => alignment.name === this._data.textAlign);\n\n if (!alignment) {\n alignment = { name: TextAlign.START, svg: ALIGNMENT_ICONS.start };\n }\n\n return alignment;\n }\n\n /**\n * Check if text content is empty and set empty string to inner html.\n * We need this because some browsers (e.g. Safari) insert <br> into empty contentEditable elements\n *\n * @param {KeyboardEvent} e - key up event\n */\n public onKeyUp(e: KeyboardEvent): void {\n if (e.code !== \"Backspace\" && e.code !== \"Delete\") {\n return;\n }\n\n const { textContent } = this._element;\n\n if (textContent === \"\") {\n this._element.innerHTML = \"\";\n }\n }\n\n /**\n * Create Tool's view\n * @return {HTMLElement}\n * @private\n */\n public drawView(): HTMLElement {\n const div: HTMLDivElement = document.createElement(\"div\");\n div.classList.add(this._CSS.wrapper, this._CSS.block);\n // Add custom className to view.\n if (this._data.className) {\n div.classList.add(this._data.className);\n }\n div.contentEditable = \"false\";\n div.dataset[\"placeholder\"] = this.api.i18n.t(this._placeholder);\n\n if (!this.readOnly) {\n div.contentEditable = \"true\";\n div.addEventListener(\"keyup\", this.onKeyUp);\n }\n\n return div;\n }\n\n /**\n * Return Tool's view\n */\n public render(): HTMLDivElement {\n return this._element;\n }\n\n /**\n * Create Block's settings block\n */\n public renderSettings(): HTMLElement {\n const holder: HTMLDivElement = document.createElement(\"div\");\n\n // Add alignment selectors\n this.alignments.forEach(alignment => {\n const selectTypeButton: HTMLSpanElement = document.createElement(\"span\");\n\n selectTypeButton.classList.add(this._CSS.settingsButton);\n\n /**\n * Highlight current level button\n */\n if (this.currentAlignment.name === alignment.name) {\n selectTypeButton.classList.add(this._CSS.settingsButtonActive);\n }\n\n /**\n * Add SVG icon\n */\n selectTypeButton.innerHTML = alignment.svg;\n\n /**\n * Save alignment to its button\n */\n selectTypeButton.dataset[\"textAlign\"] = alignment.name;\n\n /**\n * Set up click handler\n */\n selectTypeButton.addEventListener(\"click\", () => {\n this.setAlignment(alignment);\n });\n\n /**\n * Append settings button to holder\n */\n holder.appendChild(selectTypeButton);\n\n /**\n * Save settings buttons\n */\n this.settingsButtons.push(selectTypeButton);\n });\n\n // Add `Typography` selector\n if (this.typography) {\n const typographyForParagraph = Object.values(this.typography).filter(\n item => item.component === \"p\"\n );\n\n const selectTypeButton = document.createElement(\"SELECT\") as HTMLSelectElement;\n // Add editor's default input style\n selectTypeButton.classList.add(this.api.styles.input);\n // Add typography options\n typographyForParagraph.forEach(item => {\n const option = new Option(item.label, item.className);\n\n selectTypeButton.appendChild(option);\n });\n // Add \"onclick\" handler\n selectTypeButton.onclick = event => {\n const { value } = event.target as HTMLSelectElement;\n this.setTypographyClass(value);\n };\n\n /**\n * Append settings button to holder\n */\n holder.appendChild(selectTypeButton);\n\n /**\n * Save settings buttons\n */\n this.settingsButtons.push(selectTypeButton);\n }\n\n return holder;\n }\n\n /**\n * Method that specified how to merge two Text blocks.\n * Called by Editor.js by backspace at the beginning of the Block\n * @param {ParagraphData} data\n * @public\n */\n public merge(data: ParagraphData): void {\n this.data = {\n ...this.data,\n text: this.data.text + data.text\n };\n }\n\n /**\n * Validate Paragraph block data:\n * - check for emptiness\n *\n * @param {ParagraphData} savedData — data received after saving\n * @returns {boolean} false if saved data is not correct, otherwise true\n * @public\n */\n public validate(savedData: ParagraphData): boolean {\n return !(savedData.text.trim() === \"\" && !this._preserveBlank);\n }\n\n /**\n * Extract Tool's data from the view\n * @param {HTMLDivElement} toolsContent - Paragraph tools rendered view\n * @returns {ParagraphData} - saved data\n * @public\n */\n public save(toolsContent: HTMLElement) {\n return {\n text: toolsContent.innerHTML,\n textAlign: this.getTextAlign(toolsContent.className),\n className: this.data.className\n };\n }\n\n /**\n * Extract textAlign from className\n *\n * @param {string} className - heading element className\n * @returns {TextAlign} textAlign\n */\n public getTextAlign(className: string): TextAlign {\n let textAlign = TextAlign.START;\n // Match className with alignment\n this.alignments.forEach(alignment => {\n if (className.includes(`ce-header-text--${alignment.name}`)) {\n textAlign = alignment.name;\n }\n });\n return textAlign;\n }\n\n /**\n * On paste callback fired from Editor.\n *\n * @param {PasteEvent} event - event with pasted data\n */\n public onPaste(event: PasteEvent): void {\n const detail = event.detail as HTMLPasteEventDetail;\n this.data = {\n ...this.data,\n text: detail.data.innerHTML\n };\n }\n\n /**\n * Callback for Block's settings buttons\n *\n * @param {number} alignment - level to set\n */\n public setAlignment(alignment: Alignment): void {\n this.data = {\n textAlign: alignment.name,\n text: this.data.text\n };\n\n /**\n * Highlight button by selected level\n */\n this.settingsButtons.forEach(button => {\n button.classList.toggle(\n this._CSS.settingsButtonActive,\n button.dataset[\"textAlign\"] === alignment.name\n );\n });\n }\n\n /**\n * Callback for Block's settings buttons\n *\n * @param {string} className - name of typography class\n */\n public setTypographyClass(className: string): void {\n this.data = {\n textAlign: this.data.textAlign,\n text: this.data.text,\n className: className\n };\n }\n\n /**\n * Normalize input data\n *\n * @param {HeaderData} data - saved data to process\n *\n * @returns {HeaderData}\n * @private\n */\n public normalizeData(data?: Partial<ParagraphData>): ParagraphData {\n const newData: Partial<ParagraphData> = {};\n\n if (typeof data !== \"object\") {\n data = {};\n }\n\n newData.text = data.text || \"\";\n newData.textAlign = data.textAlign || TextAlign.START;\n newData.className = data.className || \"\";\n\n return newData as ParagraphData;\n }\n}\n\nexport default Paragraph;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["Paragraph","data","config","api","readOnly","typography","_CSS","block","styles","settingsButton","settingsButtonActive","wrapper","onKeyUp","bind","_placeholder","placeholder","DEFAULT_PLACEHOLDER","_data","normalizeData","_element","drawView","_preserveBlank","preserveBlank","undefined","settingsButtons","alignments","ALIGNMENTS","text","innerHTML","forEach","alignment","name","textAlign","classList","add","remove","className","split","find","TextAlign","START","svg","ALIGNMENT_ICONS","start","e","code","textContent","div","document","createElement","contentEditable","dataset","i18n","t","addEventListener","holder","selectTypeButton","currentAlignment","setAlignment","appendChild","push","typographyForParagraph","Object","values","filter","item","component","input","option","Option","label","onclick","event","target","value","setTypographyClass","savedData","trim","toolsContent","getTextAlign","includes","detail","button","toggle","newData","export","import","br","tags","icon","title"],"sources":["index.ts"],"sourcesContent":["import { API, PasteEvent } from \"@editorjs/editorjs\";\nimport { Alignment, ALIGNMENTS, TextAlign, ALIGNMENT_ICONS } from \"../utils\";\nimport { HTMLPasteEventDetail } from \"@editorjs/editorjs/types/tools/paste-events\";\n\n/**\n * @typedef {object} ParagraphConfig\n * @property {string} placeholder - placeholder for the empty paragraph\n * @property {boolean} preserveBlank - Whether or not to keep blank paragraphs when saving editor data`\n */\ninterface ParagraphConfig {\n placeholder: string;\n preserveBlank: boolean;\n typography?: Typography;\n}\n/**\n * @typedef {Object} ParagraphData\n * @description Tool's input and output data format\n * @property {String} text — Paragraph's content. Can include HTML tags: <a><b><i>\n */\ninterface ParagraphData {\n text: string;\n textAlign: TextAlign;\n className?: string;\n}\n\ninterface Typography {\n [key: string]: {\n label: string;\n component: string;\n className: string;\n };\n}\n\ninterface ParagraphArgs {\n data: ParagraphData;\n config: ParagraphConfig;\n api: any;\n readOnly: boolean;\n}\nclass Paragraph {\n private readonly api: API;\n private readonly readOnly: boolean;\n private readonly _CSS: any;\n // private readonly _settings: any;\n private _data: ParagraphData;\n private readonly _element: any;\n private readonly _placeholder: string;\n private readonly _preserveBlank: boolean;\n private readonly alignments: Alignment[];\n private readonly settingsButtons: HTMLElement[];\n private readonly typography: Typography | null;\n\n /**\n * Render plugin`s main Element and fill it with saved data\n *\n * @param {object} params - constructor params\n * @param {ParagraphData} params.data - previously saved data\n * @param {ParagraphConfig} params.config - user config for Tool\n * @param {object} params.api - editor.js api\n * @param {boolean} readOnly - read only mode flag\n */\n public constructor({ data, config, api, readOnly }: ParagraphArgs) {\n this.api = api;\n this.readOnly = readOnly;\n this.typography = config.typography || null;\n this._CSS = {\n block: this.api.styles.block,\n settingsButton: this.api.styles.settingsButton,\n settingsButtonActive: this.api.styles.settingsButtonActive,\n wrapper: \"ce-paragraph\"\n };\n\n if (!this.readOnly) {\n this.onKeyUp = this.onKeyUp.bind(this);\n }\n\n /**\n * Placeholder for paragraph if it is first Block\n * @type {string}\n */\n this._placeholder = config.placeholder ? config.placeholder : Paragraph.DEFAULT_PLACEHOLDER;\n this._data = this.normalizeData(data);\n this._element = this.drawView();\n this._preserveBlank = config.preserveBlank !== undefined ? config.preserveBlank : false;\n this.settingsButtons = [];\n this.alignments = ALIGNMENTS;\n\n // Call the `data` setter, to properly render the view element.\n this.data = this._data;\n }\n\n /**\n * Default placeholder for Paragraph Tool\n *\n * @return {string}\n * @constructor\n */\n public static get DEFAULT_PLACEHOLDER(): string {\n return \"\";\n }\n\n /**\n * Enable Conversion Toolbar. Paragraph can be converted to/from other tools\n */\n public static get conversionConfig() {\n return {\n export: \"text\", // to convert Paragraph to other block, use 'text' property of saved data\n import: \"text\" // to covert other block's exported string to Paragraph, fill 'text' property of tool data\n };\n }\n\n /**\n * Sanitizer rules\n */\n public static get sanitize() {\n return {\n text: {\n br: true\n }\n };\n }\n\n /**\n * Returns true to notify the core that read-only mode is supported\n *\n * @return {boolean}\n */\n public static get isReadOnlySupported(): boolean {\n return true;\n }\n\n /**\n * Get current Tools`s data\n * @returns {ParagraphData} Current data\n * @private\n */\n public get data(): ParagraphData {\n const text = this._element.innerHTML;\n\n // this._data.text = text;\n\n return {\n ...this._data,\n text\n };\n }\n\n /**\n * Store data in plugin:\n * - at the this._data property\n * - at the HTML\n *\n * @param {ParagraphData} data — data to set\n * @private\n */\n public set data(data: ParagraphData) {\n this._data = data || ({} as ParagraphData);\n\n this._element.innerHTML = this._data.text || \"\";\n\n /**\n * Add Alignment class\n */\n this.alignments.forEach(alignment => {\n if (alignment.name === this._data.textAlign) {\n this._element.classList.add(`ce-header-text--${alignment.name}`);\n } else {\n this._element.classList.remove(`ce-header-text--${alignment.name}`);\n }\n });\n\n /**\n * Add Typography class\n */\n if (this._data.className) {\n this._element.classList.add(...this._data.className.split(\" \"));\n }\n }\n\n /**\n * Used by Editor paste handling API.\n * Provides configuration to handle P tags.\n *\n * @returns {{tags: string[]}}\n */\n public static get pasteConfig() {\n return {\n tags: [\"P\"]\n };\n }\n\n /**\n * Icon and title for displaying at the Toolbox\n *\n * @return {{icon: string, title: string}}\n */\n public static get toolbox() {\n return {\n icon:\n '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0.2 -0.3 9 11.4\" width=\"12\" height=\"14\">\\n' +\n ' <path d=\"M0 2.77V.92A1 1 0 01.2.28C.35.1.56 0 .83 0h7.66c.28.01.48.1.63.28.14.17.21.38.21.64v1.85c0 .26-.08.48-.23.66-.15.17-.37.26-.66.26-.28 0-.5-.09-.64-.26a1 1 0 01-.21-.66V1.69H5.6v7.58h.5c.25 0 .45.08.6.23.17.16.25.35.25.6s-.08.45-.24.6a.87.87 0 01-.62.22H3.21a.87.87 0 01-.61-.22.78.78 0 01-.24-.6c0-.25.08-.44.24-.6a.85.85 0 01.61-.23h.5V1.7H1.73v1.08c0 .26-.08.48-.23.66-.15.17-.37.26-.66.26-.28 0-.5-.09-.64-.26A1 1 0 010 2.77z\"/>\\n' +\n \"</svg>\",\n title: \"Text\"\n };\n }\n\n /**\n * Get current alignment\n *\n * @returns {alignment}\n */\n public get currentAlignment(): Alignment {\n let alignment = this.alignments.find(alignment => alignment.name === this._data.textAlign);\n\n if (!alignment) {\n alignment = { name: TextAlign.START, svg: ALIGNMENT_ICONS.start };\n }\n\n return alignment;\n }\n\n /**\n * Check if text content is empty and set empty string to inner html.\n * We need this because some browsers (e.g. Safari) insert <br> into empty contentEditable elements\n *\n * @param {KeyboardEvent} e - key up event\n */\n public onKeyUp(e: KeyboardEvent): void {\n if (e.code !== \"Backspace\" && e.code !== \"Delete\") {\n return;\n }\n\n const { textContent } = this._element;\n\n if (textContent === \"\") {\n this._element.innerHTML = \"\";\n }\n }\n\n /**\n * Create Tool's view\n * @return {HTMLElement}\n * @private\n */\n public drawView(): HTMLElement {\n const div: HTMLDivElement = document.createElement(\"div\");\n div.classList.add(this._CSS.wrapper, this._CSS.block);\n // Add custom className to view.\n if (this._data.className) {\n div.classList.add(this._data.className);\n }\n div.contentEditable = \"false\";\n div.dataset[\"placeholder\"] = this.api.i18n.t(this._placeholder);\n\n if (!this.readOnly) {\n div.contentEditable = \"true\";\n div.addEventListener(\"keyup\", this.onKeyUp);\n }\n\n return div;\n }\n\n /**\n * Return Tool's view\n */\n public render(): HTMLDivElement {\n return this._element;\n }\n\n /**\n * Create Block's settings block\n */\n public renderSettings(): HTMLElement {\n const holder: HTMLDivElement = document.createElement(\"div\");\n\n // Add alignment selectors\n this.alignments.forEach(alignment => {\n const selectTypeButton: HTMLSpanElement = document.createElement(\"span\");\n\n selectTypeButton.classList.add(this._CSS.settingsButton);\n\n /**\n * Highlight current level button\n */\n if (this.currentAlignment.name === alignment.name) {\n selectTypeButton.classList.add(this._CSS.settingsButtonActive);\n }\n\n /**\n * Add SVG icon\n */\n selectTypeButton.innerHTML = alignment.svg;\n\n /**\n * Save alignment to its button\n */\n selectTypeButton.dataset[\"textAlign\"] = alignment.name;\n\n /**\n * Set up click handler\n */\n selectTypeButton.addEventListener(\"click\", () => {\n this.setAlignment(alignment);\n });\n\n /**\n * Append settings button to holder\n */\n holder.appendChild(selectTypeButton);\n\n /**\n * Save settings buttons\n */\n this.settingsButtons.push(selectTypeButton);\n });\n\n // Add `Typography` selector\n if (this.typography) {\n const typographyForParagraph = Object.values(this.typography).filter(\n item => item.component === \"p\"\n );\n\n const selectTypeButton = document.createElement(\"SELECT\") as HTMLSelectElement;\n // Add editor's default input style\n selectTypeButton.classList.add(this.api.styles.input);\n // Add typography options\n typographyForParagraph.forEach(item => {\n const option = new Option(item.label, item.className);\n\n selectTypeButton.appendChild(option);\n });\n // Add \"onclick\" handler\n selectTypeButton.onclick = event => {\n const { value } = event.target as HTMLSelectElement;\n this.setTypographyClass(value);\n };\n\n /**\n * Append settings button to holder\n */\n holder.appendChild(selectTypeButton);\n\n /**\n * Save settings buttons\n */\n this.settingsButtons.push(selectTypeButton);\n }\n\n return holder;\n }\n\n /**\n * Method that specified how to merge two Text blocks.\n * Called by Editor.js by backspace at the beginning of the Block\n * @param {ParagraphData} data\n * @public\n */\n public merge(data: ParagraphData): void {\n this.data = {\n ...this.data,\n text: this.data.text + data.text\n };\n }\n\n /**\n * Validate Paragraph block data:\n * - check for emptiness\n *\n * @param {ParagraphData} savedData — data received after saving\n * @returns {boolean} false if saved data is not correct, otherwise true\n * @public\n */\n public validate(savedData: ParagraphData): boolean {\n return !(savedData.text.trim() === \"\" && !this._preserveBlank);\n }\n\n /**\n * Extract Tool's data from the view\n * @param {HTMLDivElement} toolsContent - Paragraph tools rendered view\n * @returns {ParagraphData} - saved data\n * @public\n */\n public save(toolsContent: HTMLElement) {\n return {\n text: toolsContent.innerHTML,\n textAlign: this.getTextAlign(toolsContent.className),\n className: this.data.className\n };\n }\n\n /**\n * Extract textAlign from className\n *\n * @param {string} className - heading element className\n * @returns {TextAlign} textAlign\n */\n public getTextAlign(className: string): TextAlign {\n let textAlign = TextAlign.START;\n // Match className with alignment\n this.alignments.forEach(alignment => {\n if (className.includes(`ce-header-text--${alignment.name}`)) {\n textAlign = alignment.name;\n }\n });\n return textAlign;\n }\n\n /**\n * On paste callback fired from Editor.\n *\n * @param {PasteEvent} event - event with pasted data\n */\n public onPaste(event: PasteEvent): void {\n const detail = event.detail as HTMLPasteEventDetail;\n this.data = {\n ...this.data,\n text: detail.data.innerHTML\n };\n }\n\n /**\n * Callback for Block's settings buttons\n *\n * @param {number} alignment - level to set\n */\n public setAlignment(alignment: Alignment): void {\n this.data = {\n textAlign: alignment.name,\n text: this.data.text\n };\n\n /**\n * Highlight button by selected level\n */\n this.settingsButtons.forEach(button => {\n button.classList.toggle(\n this._CSS.settingsButtonActive,\n button.dataset[\"textAlign\"] === alignment.name\n );\n });\n }\n\n /**\n * Callback for Block's settings buttons\n *\n * @param {string} className - name of typography class\n */\n public setTypographyClass(className: string): void {\n this.data = {\n textAlign: this.data.textAlign,\n text: this.data.text,\n className: className\n };\n }\n\n /**\n * Normalize input data\n *\n * @param {HeaderData} data - saved data to process\n *\n * @returns {HeaderData}\n * @private\n */\n public normalizeData(data?: Partial<ParagraphData>): ParagraphData {\n const newData: Partial<ParagraphData> = {};\n\n if (typeof data !== \"object\") {\n data = {};\n }\n\n newData.text = data.text || \"\";\n newData.textAlign = data.textAlign || TextAlign.START;\n newData.className = data.className || \"\";\n\n return newData as ParagraphData;\n }\n}\n\nexport default Paragraph;\n"],"mappings":"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"}
|