@progress/kendo-angular-editor 17.0.0-develop.8 → 17.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/common/commands.d.ts +5 -5
- package/common/direction.d.ts +1 -1
- package/common/plugins-function.d.ts +1 -1
- package/common/predicate.d.ts +1 -1
- package/config/utils.d.ts +2 -2
- package/dialogs/colorpicker-dialog.component.d.ts +1 -1
- package/dialogs/file-link-dialog.component.d.ts +1 -1
- package/dialogs/font-family-dialog.component.d.ts +1 -1
- package/dialogs/font-size-dialog.component.d.ts +1 -1
- package/dialogs/format-dialog.component.d.ts +1 -1
- package/dialogs/image-dialog.component.d.ts +1 -1
- package/dialogs/insert-table-dialog.component.d.ts +1 -1
- package/dialogs/source-dialog.component.d.ts +1 -1
- package/editor.component.d.ts +1 -1
- package/editor.module.d.ts +2 -3
- package/{esm2020 → esm2022}/common/provider.service.mjs +4 -3
- package/{esm2020 → esm2022}/dialogs/colorpicker-dialog.component.mjs +16 -4
- package/{esm2020 → esm2022}/dialogs/file-link-dialog.component.mjs +14 -9
- package/{esm2020 → esm2022}/dialogs/font-family-dialog.component.mjs +12 -5
- package/{esm2020 → esm2022}/dialogs/font-size-dialog.component.mjs +12 -5
- package/{esm2020 → esm2022}/dialogs/format-dialog.component.mjs +12 -5
- package/{esm2020 → esm2022}/dialogs/image-dialog.component.mjs +28 -20
- package/{esm2020 → esm2022}/dialogs/insert-table-dialog.component.mjs +7 -4
- package/{esm2020 → esm2022}/dialogs/source-dialog.component.mjs +9 -5
- package/{esm2020 → esm2022}/editor.component.mjs +222 -180
- package/esm2022/editor.module.mjs +88 -0
- package/{esm2020 → esm2022}/index.mjs +1 -1
- package/{esm2020 → esm2022}/localization/custom-messages.component.mjs +9 -8
- package/{esm2020 → esm2022}/localization/editor-localization.service.mjs +3 -3
- package/{esm2020 → esm2022}/localization/localized-messages.directive.mjs +7 -6
- package/esm2022/localization/messages.mjs +364 -0
- package/{esm2020 → esm2022}/package-metadata.mjs +2 -2
- package/{esm2020 → esm2022}/preventable-events/paste-event.mjs +12 -0
- package/{esm2020 → esm2022}/preventable-events/preventable-event.mjs +1 -3
- package/{esm2020 → esm2022}/tools/alignment/editor-align-center-button.directive.mjs +3 -3
- package/{esm2020 → esm2022}/tools/alignment/editor-align-justify-button.directive.mjs +3 -3
- package/{esm2020 → esm2022}/tools/alignment/editor-align-left-button.directive.mjs +3 -3
- package/{esm2020 → esm2022}/tools/alignment/editor-align-right-button.directive.mjs +3 -3
- package/{esm2020 → esm2022}/tools/blockquote/editor-blockquote-button.directive.mjs +3 -3
- package/{esm2020 → esm2022}/tools/colorpicker/editor-back-color.directive.mjs +4 -3
- package/{esm2020 → esm2022}/tools/colorpicker/editor-colorpicker.component.mjs +59 -33
- package/{esm2020 → esm2022}/tools/colorpicker/editor-fore-color.directive.mjs +4 -3
- package/{esm2020 → esm2022}/tools/editor-clean-formatting-button.directive.mjs +3 -3
- package/{esm2020 → esm2022}/tools/fontfamily/editor-fontfamily-dropdownlist.component.mjs +14 -7
- package/{esm2020 → esm2022}/tools/fontfamily/editor-fontfamily.component.mjs +53 -41
- package/{esm2020 → esm2022}/tools/fontsize/editor-fontsize-dropdownlist.component.mjs +14 -7
- package/{esm2020 → esm2022}/tools/fontsize/editor-fontsize.component.mjs +48 -36
- package/{esm2020 → esm2022}/tools/format/editor-format-dropdownlist.component.mjs +14 -7
- package/{esm2020 → esm2022}/tools/format/editor-format.component.mjs +41 -36
- package/{esm2020 → esm2022}/tools/history/editor-redo-button.directive.mjs +3 -3
- package/{esm2020 → esm2022}/tools/history/editor-undo-button.directive.mjs +3 -3
- package/{esm2020 → esm2022}/tools/image/editor-insert-image-button.directive.mjs +3 -3
- package/{esm2020 → esm2022}/tools/indentation/editor-indent-button.directive.mjs +3 -3
- package/{esm2020 → esm2022}/tools/indentation/editor-outdent-button.directive.mjs +3 -3
- package/{esm2020 → esm2022}/tools/link/editor-create-link-button.directive.mjs +3 -3
- package/{esm2020 → esm2022}/tools/link/editor-insert-file-button.directive.mjs +3 -3
- package/{esm2020 → esm2022}/tools/link/editor-unlink-button.directive.mjs +3 -3
- package/{esm2020 → esm2022}/tools/list/editor-insert-ordered-list-button.directive.mjs +3 -3
- package/{esm2020 → esm2022}/tools/list/editor-insert-unordered-list-button.directive.mjs +3 -3
- package/{esm2020 → esm2022}/tools/print/editor-print-button.directive.mjs +3 -3
- package/{esm2020 → esm2022}/tools/select-all/select-all-button.directive.mjs +3 -3
- package/{esm2020 → esm2022}/tools/shared/dropdown-tool.directive.mjs +11 -9
- package/{esm2020 → esm2022}/tools/shared/editor-command-base.mjs +9 -3
- package/{esm2020 → esm2022}/tools/shared/editor-command-button.mjs +5 -0
- package/{esm2020 → esm2022}/tools/shared/editor-command-dialog.mjs +5 -0
- package/{esm2020 → esm2022}/tools/source/editor-view-source-button.directive.mjs +3 -3
- package/{esm2020 → esm2022}/tools/tables/editor-add-column-after-button.directive.mjs +3 -3
- package/{esm2020 → esm2022}/tools/tables/editor-add-column-before-button.directive.mjs +3 -3
- package/{esm2020 → esm2022}/tools/tables/editor-add-row-after-button.directive.mjs +3 -3
- package/{esm2020 → esm2022}/tools/tables/editor-add-row-before-button.directive.mjs +3 -3
- package/{esm2020 → esm2022}/tools/tables/editor-delete-column-button.directive.mjs +3 -3
- package/{esm2020 → esm2022}/tools/tables/editor-delete-row-button.directive.mjs +3 -3
- package/{esm2020 → esm2022}/tools/tables/editor-delete-table-button.directive.mjs +3 -3
- package/{esm2020 → esm2022}/tools/tables/editor-insert-table-button.component.mjs +26 -15
- package/{esm2020 → esm2022}/tools/tables/editor-merge-cells-button.directive.mjs +3 -3
- package/{esm2020 → esm2022}/tools/tables/editor-split-cell-button.directive.mjs +3 -3
- package/{esm2020 → esm2022}/tools/tables/popup-table-grid.component.mjs +11 -10
- package/{esm2020 → esm2022}/tools/tools.service.mjs +5 -4
- package/{esm2020 → esm2022}/tools/typographical-emphasis/editor-bold-button.directive.mjs +3 -3
- package/{esm2020 → esm2022}/tools/typographical-emphasis/editor-italic-button.directive.mjs +3 -3
- package/{esm2020 → esm2022}/tools/typographical-emphasis/editor-strikethrough-button.directive.mjs +3 -3
- package/{esm2020 → esm2022}/tools/typographical-emphasis/editor-subscript-button.directive.mjs +3 -3
- package/{esm2020 → esm2022}/tools/typographical-emphasis/editor-superscript-button.directive.mjs +3 -3
- package/{esm2020 → esm2022}/tools/typographical-emphasis/editor-underline-button.directive.mjs +3 -3
- package/{fesm2020 → fesm2022}/progress-kendo-angular-editor.mjs +1602 -1168
- package/index.d.ts +1 -1
- package/localization/messages.d.ts +1 -1
- package/package.json +25 -31
- package/schematics/ngAdd/index.js +5 -5
- package/tools/colorpicker/editor-colorpicker.component.d.ts +2 -4
- package/tools/fontfamily/editor-fontfamily-dropdownlist.component.d.ts +1 -1
- package/tools/fontfamily/editor-fontfamily.component.d.ts +2 -4
- package/tools/fontsize/editor-fontsize-dropdownlist.component.d.ts +1 -1
- package/tools/fontsize/editor-fontsize.component.d.ts +2 -4
- package/tools/format/editor-format-dropdownlist.component.d.ts +1 -1
- package/tools/format/editor-format.component.d.ts +2 -4
- package/tools/tables/editor-insert-table-button.component.d.ts +0 -2
- package/esm2020/editor.module.mjs +0 -111
- package/esm2020/localization/messages.mjs +0 -132
- package/fesm2015/progress-kendo-angular-editor.mjs +0 -6403
- /package/{esm2020 → esm2022}/common/active-marks.mjs +0 -0
- /package/{esm2020 → esm2022}/common/apply-to-word-options.mjs +0 -0
- /package/{esm2020 → esm2022}/common/commands.mjs +0 -0
- /package/{esm2020 → esm2022}/common/css-settings.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/common/direction.mjs +0 -0
- /package/{esm2020 → esm2022}/common/error-messages.mjs +0 -0
- /package/{esm2020 → esm2022}/common/font-family-item.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/common/font-size-item.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/common/format-item.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/common/image-data.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/common/link-data.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/common/paste-cleanup-settings.mjs +0 -0
- /package/{esm2020 → esm2022}/common/plugins-function.mjs +0 -0
- /package/{esm2020 → esm2022}/common/predicate.mjs +0 -0
- /package/{esm2020 → esm2022}/common/resizable-options.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/common/styles.mjs +0 -0
- /package/{esm2020 → esm2022}/common/table-data.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/config/command-icons.mjs +0 -0
- /package/{esm2020 → esm2022}/config/commands.mjs +0 -0
- /package/{esm2020 → esm2022}/config/schema.mjs +0 -0
- /package/{esm2020 → esm2022}/config/semantic-nodes.mjs +0 -0
- /package/{esm2020 → esm2022}/config/table-commands.mjs +0 -0
- /package/{esm2020 → esm2022}/config/utils.mjs +0 -0
- /package/{esm2020 → esm2022}/directives.mjs +0 -0
- /package/{esm2020 → esm2022}/editor-toolbar-state.mjs +0 -0
- /package/{esm2020 → esm2022}/progress-kendo-angular-editor.mjs +0 -0
- /package/{esm2020 → esm2022}/util.mjs +0 -0
|
@@ -74,160 +74,14 @@ const getPasteCleanupAttributes = (config) => {
|
|
|
74
74
|
* Represents the [Kendo UI Editor component for Angular]({% slug overview_editor %}).
|
|
75
75
|
*/
|
|
76
76
|
export class EditorComponent {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
this.renderer = renderer;
|
|
86
|
-
/**
|
|
87
|
-
* If set to `false`, the Editor will run in style non-encapsulated mode. This means
|
|
88
|
-
* that the styles of the page will be persisted in the Editor and its content will be affected by them.
|
|
89
|
-
* @default true
|
|
90
|
-
*/
|
|
91
|
-
this.iframe = true;
|
|
92
|
-
/**
|
|
93
|
-
* If set to `true` or `ApplyToWordOptions` object, commands that apply emphasis or inline styles will be applied to the whole word the cursor is in.
|
|
94
|
-
* @default false
|
|
95
|
-
*/
|
|
96
|
-
this.applyToWord = false;
|
|
97
|
-
/**
|
|
98
|
-
* By default, whitespace is collapsed as per HTML's rules.
|
|
99
|
-
* Set to `true` to preserve whitespace, but normalize newlines to spaces.
|
|
100
|
-
* Set to `'full'` to preserve whitespace entirely. In this case the default ProseMirror behavior is to parse white space into nodes.
|
|
101
|
-
*
|
|
102
|
-
* @default false
|
|
103
|
-
*/
|
|
104
|
-
this.preserveWhitespace = false;
|
|
105
|
-
/**
|
|
106
|
-
* Determines whether the Editor can be resized ([see example](slug:resizing_editor#toc-resizing-the-editor)).
|
|
107
|
-
* @default false
|
|
108
|
-
*/
|
|
109
|
-
this.resizable = false;
|
|
110
|
-
/**
|
|
111
|
-
* Fires each time the value of the Editor is changed upon user interaction—
|
|
112
|
-
* for example, when the value is updated through typing in the content area or using some of the Editor tools ([see example](slug:events_editor)).
|
|
113
|
-
* When the value of the Editor is programmatically changed through its API (`ngModel`) or form binding (`formControl`),
|
|
114
|
-
* the `valueChange` event is not triggered because it might cause a mix-up with the
|
|
115
|
-
* built-in `valueChange` mechanisms of the `ngModel` or `formControl` bindings.
|
|
116
|
-
*/
|
|
117
|
-
this.valueChange = new EventEmitter();
|
|
118
|
-
/**
|
|
119
|
-
* Fires when the content area of the Editor is focused ([see example](slug:events_editor)).
|
|
120
|
-
*/
|
|
121
|
-
this.onFocus = new EventEmitter();
|
|
122
|
-
/**
|
|
123
|
-
* Fires when the user performs paste in the content area of the Editor ([see example](slug:events_editor)).
|
|
124
|
-
* The event is preventable. If you cancel it, the Editor content will not change.
|
|
125
|
-
*/
|
|
126
|
-
this.paste = new EventEmitter();
|
|
127
|
-
/**
|
|
128
|
-
* Fires when the content area of the Editor is blurred ([see example](slug:events_editor)).
|
|
129
|
-
*/
|
|
130
|
-
this.onBlur = new EventEmitter();
|
|
131
|
-
this.hostClass = true;
|
|
132
|
-
/**
|
|
133
|
-
* @hidden
|
|
134
|
-
*/
|
|
135
|
-
this.stateChange = new BehaviorSubject(initialToolBarState);
|
|
136
|
-
/**
|
|
137
|
-
* @hidden
|
|
138
|
-
*/
|
|
139
|
-
this.showLicenseWatermark = false;
|
|
140
|
-
/**
|
|
141
|
-
* @hidden
|
|
142
|
-
*/
|
|
143
|
-
this.valueModified = new Subject();
|
|
144
|
-
/**
|
|
145
|
-
* @hidden
|
|
146
|
-
*/
|
|
147
|
-
this.focusableId = `k-editor-${guid()}`;
|
|
148
|
-
this._readonly = false;
|
|
149
|
-
this._placeholder = '';
|
|
150
|
-
this.inForm = false;
|
|
151
|
-
this._iframeCss = { keepBuiltInCss: true };
|
|
152
|
-
this.afterViewInit = new Subject();
|
|
153
|
-
this.contentAreaLoaded = new Subject();
|
|
154
|
-
this.dispatchTransaction = (tr) => {
|
|
155
|
-
const docChanged = tr.docChanged;
|
|
156
|
-
if (this.disabled || (this.readonly && docChanged)) {
|
|
157
|
-
return;
|
|
158
|
-
}
|
|
159
|
-
if (docChanged) {
|
|
160
|
-
const doc = tr.doc;
|
|
161
|
-
const html = getHtml({ doc });
|
|
162
|
-
this.trOnChange = tr;
|
|
163
|
-
this.htmlOnChange = html;
|
|
164
|
-
this.ngZone.run(() => {
|
|
165
|
-
this.valueModified.next(html === EMPTY_PARAGRAPH ? '' : html);
|
|
166
|
-
});
|
|
167
|
-
}
|
|
168
|
-
if (!docChanged || this.inForm) {
|
|
169
|
-
this.view.updateState(this.view.state.apply(tr));
|
|
170
|
-
this.trOnChange = null;
|
|
171
|
-
}
|
|
172
|
-
};
|
|
173
|
-
this.transformPastedContent = (dirtyHtml, plainText) => {
|
|
174
|
-
if (plainText) {
|
|
175
|
-
return this.dispatchPasteEvent(dirtyHtml, dirtyHtml);
|
|
176
|
-
}
|
|
177
|
-
const pasteCleanupSettings = { ...defaultPasteCleanupSettings, ...this.pasteCleanupSettings };
|
|
178
|
-
const html = pipe(removeInvalidHTMLIf(pasteCleanupSettings.removeInvalidHTML), removeCommentsIf(pasteCleanupSettings.removeHtmlComments))(dirtyHtml);
|
|
179
|
-
const clean = pasteCleanup(html, {
|
|
180
|
-
convertMsLists: pasteCleanupSettings.convertMsLists,
|
|
181
|
-
stripTags: pasteCleanupSettings.stripTags.join('|'),
|
|
182
|
-
attributes: getPasteCleanupAttributes(pasteCleanupSettings)
|
|
183
|
-
});
|
|
184
|
-
return this.dispatchPasteEvent(dirtyHtml, clean);
|
|
185
|
-
};
|
|
186
|
-
this.transformPastedHTML = (html) => this.transformPastedContent(html);
|
|
187
|
-
this.transformPastedText = (html) => this.transformPastedContent(html, true);
|
|
188
|
-
this.changeValue = (value) => {
|
|
189
|
-
const prev = this._value;
|
|
190
|
-
this._value = value;
|
|
191
|
-
if (!this._view) {
|
|
192
|
-
return;
|
|
193
|
-
}
|
|
194
|
-
if (this.htmlOnChange === value && this.trOnChange) {
|
|
195
|
-
this.view.updateState(this.view.state.apply(this.trOnChange));
|
|
196
|
-
}
|
|
197
|
-
else {
|
|
198
|
-
const newValue = (prev || '') !== (value || '');
|
|
199
|
-
const formReset = (this.inForm && !value);
|
|
200
|
-
if (newValue || formReset) {
|
|
201
|
-
const iframeContentWindowNotPresent = this.iframe && !this.container.element.nativeElement.contentWindow;
|
|
202
|
-
if (iframeContentWindowNotPresent) {
|
|
203
|
-
return;
|
|
204
|
-
}
|
|
205
|
-
const state = this.view.state;
|
|
206
|
-
const nextDoc = parseContent(value || '', state.schema, { preserveWhitespace: this.preserveWhitespace });
|
|
207
|
-
const tr = state.tr
|
|
208
|
-
.setSelection(new AllSelection(state.doc))
|
|
209
|
-
.replaceSelectionWith(nextDoc);
|
|
210
|
-
this.view.updateState(state.apply(tr));
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
this.trOnChange = null;
|
|
214
|
-
this.htmlOnChange = null;
|
|
215
|
-
};
|
|
216
|
-
this.onChangeCallback = (value) => {
|
|
217
|
-
this.changeValue(value);
|
|
218
|
-
};
|
|
219
|
-
this.onTouchedCallback = (_) => { };
|
|
220
|
-
this.onPaste = (_view, nativeEvent) => {
|
|
221
|
-
this._pasteEvent = nativeEvent;
|
|
222
|
-
return false;
|
|
223
|
-
};
|
|
224
|
-
const isValid = validatePackage(packageMetadata);
|
|
225
|
-
this.showLicenseWatermark = shouldShowValidationUI(isValid);
|
|
226
|
-
this.providerService.editor = this;
|
|
227
|
-
this.direction = localization.rtl ? 'rtl' : 'ltr';
|
|
228
|
-
// https://stackoverflow.com/questions/56572483/chrome-is-synchronously-handling-iframe-loading-whereas-firefox-handles-it-asyn
|
|
229
|
-
this.subs = zip(this.afterViewInit.asObservable(), this.contentAreaLoaded.asObservable()).subscribe(() => this.initialize());
|
|
230
|
-
}
|
|
77
|
+
dialogService;
|
|
78
|
+
localization;
|
|
79
|
+
cdr;
|
|
80
|
+
ngZone;
|
|
81
|
+
element;
|
|
82
|
+
providerService;
|
|
83
|
+
toolsService;
|
|
84
|
+
renderer;
|
|
231
85
|
/**
|
|
232
86
|
* Sets the value of the Editor ([see example](slug:overview_editor)).
|
|
233
87
|
*/
|
|
@@ -308,6 +162,12 @@ export class EditorComponent {
|
|
|
308
162
|
get readonly() {
|
|
309
163
|
return this._readonly;
|
|
310
164
|
}
|
|
165
|
+
/**
|
|
166
|
+
* If set to `false`, the Editor will run in style non-encapsulated mode. This means
|
|
167
|
+
* that the styles of the page will be persisted in the Editor and its content will be affected by them.
|
|
168
|
+
* @default true
|
|
169
|
+
*/
|
|
170
|
+
iframe = true;
|
|
311
171
|
/**
|
|
312
172
|
* Allows applying custom CSS styles to the Editor in iframe mode.
|
|
313
173
|
*/
|
|
@@ -317,6 +177,11 @@ export class EditorComponent {
|
|
|
317
177
|
get iframeCss() {
|
|
318
178
|
return this._iframeCss;
|
|
319
179
|
}
|
|
180
|
+
/**
|
|
181
|
+
* If set to `true` or `ApplyToWordOptions` object, commands that apply emphasis or inline styles will be applied to the whole word the cursor is in.
|
|
182
|
+
* @default false
|
|
183
|
+
*/
|
|
184
|
+
applyToWord = false;
|
|
320
185
|
/**
|
|
321
186
|
* Allows providing a custom schema. ([see example]({% slug schema_editor %}))
|
|
322
187
|
*/
|
|
@@ -365,6 +230,45 @@ export class EditorComponent {
|
|
|
365
230
|
get placeholder() {
|
|
366
231
|
return this._placeholder;
|
|
367
232
|
}
|
|
233
|
+
/**
|
|
234
|
+
* By default, whitespace is collapsed as per HTML's rules.
|
|
235
|
+
* Set to `true` to preserve whitespace, but normalize newlines to spaces.
|
|
236
|
+
* Set to `'full'` to preserve whitespace entirely. In this case the default ProseMirror behavior is to parse white space into nodes.
|
|
237
|
+
*
|
|
238
|
+
* @default false
|
|
239
|
+
*/
|
|
240
|
+
preserveWhitespace = false;
|
|
241
|
+
/**
|
|
242
|
+
* Configures how pasted content is modified before it is added to the Editor ([see example]({% slug paste_cleanup %})).
|
|
243
|
+
*/
|
|
244
|
+
pasteCleanupSettings;
|
|
245
|
+
/**
|
|
246
|
+
* Determines whether the Editor can be resized ([see example](slug:resizing_editor#toc-resizing-the-editor)).
|
|
247
|
+
* @default false
|
|
248
|
+
*/
|
|
249
|
+
resizable = false;
|
|
250
|
+
/**
|
|
251
|
+
* Fires each time the value of the Editor is changed upon user interaction—
|
|
252
|
+
* for example, when the value is updated through typing in the content area or using some of the Editor tools ([see example](slug:events_editor)).
|
|
253
|
+
* When the value of the Editor is programmatically changed through its API (`ngModel`) or form binding (`formControl`),
|
|
254
|
+
* the `valueChange` event is not triggered because it might cause a mix-up with the
|
|
255
|
+
* built-in `valueChange` mechanisms of the `ngModel` or `formControl` bindings.
|
|
256
|
+
*/
|
|
257
|
+
valueChange = new EventEmitter();
|
|
258
|
+
/**
|
|
259
|
+
* Fires when the content area of the Editor is focused ([see example](slug:events_editor)).
|
|
260
|
+
*/
|
|
261
|
+
onFocus = new EventEmitter();
|
|
262
|
+
/**
|
|
263
|
+
* Fires when the user performs paste in the content area of the Editor ([see example](slug:events_editor)).
|
|
264
|
+
* The event is preventable. If you cancel it, the Editor content will not change.
|
|
265
|
+
*/
|
|
266
|
+
paste = new EventEmitter();
|
|
267
|
+
/**
|
|
268
|
+
* Fires when the content area of the Editor is blurred ([see example](slug:events_editor)).
|
|
269
|
+
*/
|
|
270
|
+
onBlur = new EventEmitter();
|
|
271
|
+
hostClass = true;
|
|
368
272
|
get resizableClass() {
|
|
369
273
|
return !!this.resizable;
|
|
370
274
|
}
|
|
@@ -399,6 +303,14 @@ export class EditorComponent {
|
|
|
399
303
|
const resizableOptions = this.resizable;
|
|
400
304
|
return resizableOptions.maxHeight ? resizableOptions.maxHeight + 'px' : undefined;
|
|
401
305
|
}
|
|
306
|
+
/**
|
|
307
|
+
* @hidden
|
|
308
|
+
*/
|
|
309
|
+
stateChange = new BehaviorSubject(initialToolBarState);
|
|
310
|
+
/**
|
|
311
|
+
* @hidden
|
|
312
|
+
*/
|
|
313
|
+
showLicenseWatermark = false;
|
|
402
314
|
get toolbar() {
|
|
403
315
|
return this.defaultToolbarComponent || this.userToolBarComponent;
|
|
404
316
|
}
|
|
@@ -418,6 +330,63 @@ export class EditorComponent {
|
|
|
418
330
|
get selectionText() {
|
|
419
331
|
return this._view && this._view.state ? getSelectionText(this._view.state) : '';
|
|
420
332
|
}
|
|
333
|
+
/**
|
|
334
|
+
* @hidden
|
|
335
|
+
*/
|
|
336
|
+
valueModified = new Subject();
|
|
337
|
+
userToolBarComponent;
|
|
338
|
+
userToolBarElement;
|
|
339
|
+
dialogContainer;
|
|
340
|
+
// Use `ViewContainerRef` instead of `ElementRef` because the dialog expects `ViewContainerRef`.
|
|
341
|
+
container;
|
|
342
|
+
direction;
|
|
343
|
+
viewMountElement;
|
|
344
|
+
/**
|
|
345
|
+
* @hidden
|
|
346
|
+
*/
|
|
347
|
+
focusChangedProgrammatically;
|
|
348
|
+
/**
|
|
349
|
+
* @hidden
|
|
350
|
+
*/
|
|
351
|
+
shouldEmitFocus;
|
|
352
|
+
/**
|
|
353
|
+
* @hidden
|
|
354
|
+
*/
|
|
355
|
+
focusableId = `k-editor-${guid()}`;
|
|
356
|
+
defaultToolbar;
|
|
357
|
+
defaultToolbarComponent;
|
|
358
|
+
subs;
|
|
359
|
+
_view;
|
|
360
|
+
_value;
|
|
361
|
+
_disabled;
|
|
362
|
+
_readonly = false;
|
|
363
|
+
_schema;
|
|
364
|
+
_plugins;
|
|
365
|
+
_placeholder = '';
|
|
366
|
+
_styleObserver;
|
|
367
|
+
trOnChange;
|
|
368
|
+
htmlOnChange;
|
|
369
|
+
inForm = false;
|
|
370
|
+
_pasteEvent;
|
|
371
|
+
_iframeCss = { keepBuiltInCss: true };
|
|
372
|
+
afterViewInit = new Subject();
|
|
373
|
+
contentAreaLoaded = new Subject();
|
|
374
|
+
constructor(dialogService, localization, cdr, ngZone, element, providerService, toolsService, renderer) {
|
|
375
|
+
this.dialogService = dialogService;
|
|
376
|
+
this.localization = localization;
|
|
377
|
+
this.cdr = cdr;
|
|
378
|
+
this.ngZone = ngZone;
|
|
379
|
+
this.element = element;
|
|
380
|
+
this.providerService = providerService;
|
|
381
|
+
this.toolsService = toolsService;
|
|
382
|
+
this.renderer = renderer;
|
|
383
|
+
const isValid = validatePackage(packageMetadata);
|
|
384
|
+
this.showLicenseWatermark = shouldShowValidationUI(isValid);
|
|
385
|
+
this.providerService.editor = this;
|
|
386
|
+
this.direction = localization.rtl ? 'rtl' : 'ltr';
|
|
387
|
+
// https://stackoverflow.com/questions/56572483/chrome-is-synchronously-handling-iframe-loading-whereas-firefox-handles-it-asyn
|
|
388
|
+
this.subs = zip(this.afterViewInit.asObservable(), this.contentAreaLoaded.asObservable()).subscribe(() => this.initialize());
|
|
389
|
+
}
|
|
421
390
|
ngOnInit() {
|
|
422
391
|
this.subs.add(this.localization.changes.subscribe(({ rtl }) => {
|
|
423
392
|
this.direction = rtl ? 'rtl' : 'ltr';
|
|
@@ -749,6 +718,71 @@ export class EditorComponent {
|
|
|
749
718
|
.pipe(filter((event) => !this.viewMountElement.contains(event.relatedTarget)))
|
|
750
719
|
.subscribe(() => this.onTouchedCallback()));
|
|
751
720
|
}
|
|
721
|
+
dispatchTransaction = (tr) => {
|
|
722
|
+
const docChanged = tr.docChanged;
|
|
723
|
+
if (this.disabled || (this.readonly && docChanged)) {
|
|
724
|
+
return;
|
|
725
|
+
}
|
|
726
|
+
if (docChanged) {
|
|
727
|
+
const doc = tr.doc;
|
|
728
|
+
const html = getHtml({ doc });
|
|
729
|
+
this.trOnChange = tr;
|
|
730
|
+
this.htmlOnChange = html;
|
|
731
|
+
this.ngZone.run(() => {
|
|
732
|
+
this.valueModified.next(html === EMPTY_PARAGRAPH ? '' : html);
|
|
733
|
+
});
|
|
734
|
+
}
|
|
735
|
+
if (!docChanged || this.inForm) {
|
|
736
|
+
this.view.updateState(this.view.state.apply(tr));
|
|
737
|
+
this.trOnChange = null;
|
|
738
|
+
}
|
|
739
|
+
};
|
|
740
|
+
transformPastedContent = (dirtyHtml, plainText) => {
|
|
741
|
+
if (plainText) {
|
|
742
|
+
return this.dispatchPasteEvent(dirtyHtml, dirtyHtml);
|
|
743
|
+
}
|
|
744
|
+
const pasteCleanupSettings = { ...defaultPasteCleanupSettings, ...this.pasteCleanupSettings };
|
|
745
|
+
const html = pipe(removeInvalidHTMLIf(pasteCleanupSettings.removeInvalidHTML), removeCommentsIf(pasteCleanupSettings.removeHtmlComments))(dirtyHtml);
|
|
746
|
+
const clean = pasteCleanup(html, {
|
|
747
|
+
convertMsLists: pasteCleanupSettings.convertMsLists,
|
|
748
|
+
stripTags: pasteCleanupSettings.stripTags.join('|'),
|
|
749
|
+
attributes: getPasteCleanupAttributes(pasteCleanupSettings)
|
|
750
|
+
});
|
|
751
|
+
return this.dispatchPasteEvent(dirtyHtml, clean);
|
|
752
|
+
};
|
|
753
|
+
transformPastedHTML = (html) => this.transformPastedContent(html);
|
|
754
|
+
transformPastedText = (html) => this.transformPastedContent(html, true);
|
|
755
|
+
changeValue = (value) => {
|
|
756
|
+
const prev = this._value;
|
|
757
|
+
this._value = value;
|
|
758
|
+
if (!this._view) {
|
|
759
|
+
return;
|
|
760
|
+
}
|
|
761
|
+
if (this.htmlOnChange === value && this.trOnChange) {
|
|
762
|
+
this.view.updateState(this.view.state.apply(this.trOnChange));
|
|
763
|
+
}
|
|
764
|
+
else {
|
|
765
|
+
const newValue = (prev || '') !== (value || '');
|
|
766
|
+
const formReset = (this.inForm && !value);
|
|
767
|
+
if (newValue || formReset) {
|
|
768
|
+
const iframeContentWindowNotPresent = this.iframe && !this.container.element.nativeElement.contentWindow;
|
|
769
|
+
if (iframeContentWindowNotPresent) {
|
|
770
|
+
return;
|
|
771
|
+
}
|
|
772
|
+
const state = this.view.state;
|
|
773
|
+
const nextDoc = parseContent(value || '', state.schema, { preserveWhitespace: this.preserveWhitespace });
|
|
774
|
+
const tr = state.tr
|
|
775
|
+
.setSelection(new AllSelection(state.doc))
|
|
776
|
+
.replaceSelectionWith(nextDoc);
|
|
777
|
+
this.view.updateState(state.apply(tr));
|
|
778
|
+
}
|
|
779
|
+
}
|
|
780
|
+
this.trOnChange = null;
|
|
781
|
+
this.htmlOnChange = null;
|
|
782
|
+
};
|
|
783
|
+
onChangeCallback = (value) => {
|
|
784
|
+
this.changeValue(value);
|
|
785
|
+
};
|
|
752
786
|
normalizeSize() {
|
|
753
787
|
if (typeof this.resizable === 'object' && !this._styleObserver) {
|
|
754
788
|
const element = this.element.nativeElement;
|
|
@@ -790,38 +824,45 @@ export class EditorComponent {
|
|
|
790
824
|
}
|
|
791
825
|
});
|
|
792
826
|
}
|
|
827
|
+
onTouchedCallback = (_) => { };
|
|
828
|
+
onPaste = (_view, nativeEvent) => {
|
|
829
|
+
this._pasteEvent = nativeEvent;
|
|
830
|
+
return false;
|
|
831
|
+
};
|
|
793
832
|
dispatchPasteEvent(originalContent, cleanContent) {
|
|
794
833
|
if (hasObservers(this.paste)) {
|
|
834
|
+
if (!this.iframe) {
|
|
835
|
+
this._pasteEvent.stopImmediatePropagation();
|
|
836
|
+
}
|
|
795
837
|
const event = new EditorPasteEvent(cleanContent, originalContent, this._pasteEvent);
|
|
796
838
|
this.ngZone.run(() => this.paste.emit(event));
|
|
797
839
|
return event.isDefaultPrevented() ? '' : event.cleanedHtml;
|
|
798
840
|
}
|
|
799
841
|
return cleanContent;
|
|
800
842
|
}
|
|
801
|
-
}
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
}
|
|
824
|
-
], queries: [{ propertyName: "userToolBarComponent", first: true, predicate: ToolBarComponent, descendants: true }, { propertyName: "userToolBarElement", first: true, predicate: ToolBarComponent, descendants: true, read: ElementRef }], viewQueries: [{ propertyName: "dialogContainer", first: true, predicate: ["dialogsContainer"], descendants: true, read: ViewContainerRef }, { propertyName: "container", first: true, predicate: ["content"], descendants: true, read: ViewContainerRef }, { propertyName: "defaultToolbar", first: true, predicate: ["defaultToolbar"], descendants: true, read: ElementRef }, { propertyName: "defaultToolbarComponent", first: true, predicate: ["defaultToolbar"], descendants: true, read: ToolBarComponent }], usesOnChanges: true, ngImport: i0, template: `
|
|
843
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EditorComponent, deps: [{ token: i1.DialogService }, { token: i2.LocalizationService }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: i0.ElementRef }, { token: i3.ProviderService }, { token: i4.EditorToolsService }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
|
|
844
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: EditorComponent, isStandalone: true, selector: "kendo-editor", inputs: { value: "value", disabled: "disabled", readonly: "readonly", iframe: "iframe", iframeCss: "iframeCss", applyToWord: "applyToWord", schema: "schema", plugins: "plugins", placeholder: "placeholder", preserveWhitespace: "preserveWhitespace", pasteCleanupSettings: "pasteCleanupSettings", resizable: "resizable" }, outputs: { valueChange: "valueChange", onFocus: "focus", paste: "paste", onBlur: "blur" }, host: { properties: { "class.k-editor": "this.hostClass", "class.k-editor-resizable": "this.resizableClass", "class.k-disabled": "this.isDisabled", "class.k-readonly": "this.isReadonly", "class.k-ie": "this.isIE", "attr.dir": "this.dir", "attr.ariaDisabled": "this.ariaDisabled", "style.minWidth": "this.minWidth", "style.maxWidth": "this.maxWidth", "style.minHeight": "this.minHeight", "style.maxHeight": "this.maxHeight" } }, providers: [
|
|
845
|
+
EditorLocalizationService,
|
|
846
|
+
ProviderService,
|
|
847
|
+
EditorToolsService,
|
|
848
|
+
{
|
|
849
|
+
provide: LocalizationService,
|
|
850
|
+
useExisting: EditorLocalizationService
|
|
851
|
+
},
|
|
852
|
+
{
|
|
853
|
+
provide: L10N_PREFIX,
|
|
854
|
+
useValue: 'kendo.editor'
|
|
855
|
+
},
|
|
856
|
+
{
|
|
857
|
+
provide: NG_VALUE_ACCESSOR,
|
|
858
|
+
useExisting: forwardRef(() => EditorComponent),
|
|
859
|
+
multi: true
|
|
860
|
+
},
|
|
861
|
+
{
|
|
862
|
+
provide: KendoInput,
|
|
863
|
+
useExisting: forwardRef(() => EditorComponent)
|
|
864
|
+
}
|
|
865
|
+
], queries: [{ propertyName: "userToolBarComponent", first: true, predicate: ToolBarComponent, descendants: true }, { propertyName: "userToolBarElement", first: true, predicate: ToolBarComponent, descendants: true, read: ElementRef }], viewQueries: [{ propertyName: "dialogContainer", first: true, predicate: ["dialogsContainer"], descendants: true, read: ViewContainerRef }, { propertyName: "container", first: true, predicate: ["content"], descendants: true, read: ViewContainerRef }, { propertyName: "defaultToolbar", first: true, predicate: ["defaultToolbar"], descendants: true, read: ElementRef }, { propertyName: "defaultToolbarComponent", first: true, predicate: ["defaultToolbar"], descendants: true, read: ToolBarComponent }], usesOnChanges: true, ngImport: i0, template: `
|
|
825
866
|
<ng-container
|
|
826
867
|
kendoEditorLocalizedMessages
|
|
827
868
|
i18n-alignCenter="kendo.editor.alignCenter|The title of the tool that aligns text in the center."
|
|
@@ -980,8 +1021,9 @@ EditorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", versio
|
|
|
980
1021
|
<ng-container #dialogsContainer></ng-container>
|
|
981
1022
|
|
|
982
1023
|
<div kendoWatermarkOverlay *ngIf="showLicenseWatermark"></div>
|
|
983
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: LocalizedMessagesDirective, selector: "[kendoEditorLocalizedMessages]" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ToolBarComponent, selector: "kendo-toolbar", inputs: ["overflow", "resizable", "popupSettings", "tabindex", "size", "tabIndex"], outputs: ["open", "close"], exportAs: ["kendoToolBar"] }, { kind: "component", type: ToolBarButtonGroupComponent, selector: "kendo-toolbar-buttongroup", inputs: ["disabled", "selection", "width", "look"], exportAs: ["kendoToolBarButtonGroup"] }, { kind: "component", type: ToolBarButtonComponent, selector: "kendo-toolbar-button", inputs: ["showText", "showIcon", "text", "style", "className", "title", "disabled", "toggleable", "look", "togglable", "selected", "fillMode", "themeColor", "icon", "iconClass", "svgIcon", "imageUrl"], outputs: ["click", "pointerdown", "selectedChange"], exportAs: ["kendoToolBarButton"] }, { kind: "directive", type: EditorBoldButtonDirective, selector: "kendo-toolbar-button[kendoEditorBoldButton]" }, { kind: "directive", type: EditorItalicButtonDirective, selector: "kendo-toolbar-button[kendoEditorItalicButton]" }, { kind: "directive", type: EditorUnderlineButtonDirective, selector: "kendo-toolbar-button[kendoEditorUnderlineButton]" }, { kind: "component", type: EditorFormatComponent, selector: "kendo-toolbar-dropdownlist[kendoEditorFormat]", inputs: ["data"], outputs: ["valueChange"] }, { kind: "directive", type: EditorAlignLeftButtonDirective, selector: "kendo-toolbar-button[kendoEditorAlignLeftButton]" }, { kind: "directive", type: EditorAlignCenterButtonDirective, selector: "kendo-toolbar-button[kendoEditorAlignCenterButton]" }, { kind: "directive", type: EditorAlignRightButtonDirective, selector: "kendo-toolbar-button[kendoEditorAlignRightButton]" }, { kind: "directive", type: EditorAlignJustifyButtonDirective, selector: "kendo-toolbar-button[kendoEditorAlignJustifyButton]" }, { kind: "directive", type: EditorInsertUnorderedListButtonDirective, selector: "kendo-toolbar-button[kendoEditorInsertUnorderedListButton]" }, { kind: "directive", type: EditorInsertOrderedListButtonDirective, selector: "kendo-toolbar-button[kendoEditorInsertOrderedListButton]" }, { kind: "directive", type: EditorIndentButtonDirective, selector: "kendo-toolbar-button[kendoEditorIndentButton]" }, { kind: "directive", type: EditorOutdentButtonDirective, selector: "kendo-toolbar-button[kendoEditorOutdentButton]" }, { kind: "directive", type: EditorCreateLinkButtonDirective, selector: "kendo-toolbar-button[kendoEditorCreateLinkButton]" }, { kind: "directive", type: EditorUnlinkButtonDirective, selector: "kendo-toolbar-button[kendoEditorUnlinkButton]" }, { kind: "directive", type: EditorInsertImageButtonDirective, selector: "kendo-toolbar-button[kendoEditorInsertImageButton]" }, { kind: "component", type: WatermarkOverlayComponent, selector: "div[kendoWatermarkOverlay]" }] });
|
|
984
|
-
|
|
1024
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: LocalizedMessagesDirective, selector: "[kendoEditorLocalizedMessages]" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ToolBarComponent, selector: "kendo-toolbar", inputs: ["overflow", "resizable", "popupSettings", "fillMode", "tabindex", "size", "tabIndex"], outputs: ["open", "close"], exportAs: ["kendoToolBar"] }, { kind: "component", type: ToolBarButtonGroupComponent, selector: "kendo-toolbar-buttongroup", inputs: ["disabled", "fillMode", "selection", "width", "look"], exportAs: ["kendoToolBarButtonGroup"] }, { kind: "component", type: ToolBarButtonComponent, selector: "kendo-toolbar-button", inputs: ["showText", "showIcon", "text", "style", "className", "title", "disabled", "toggleable", "look", "togglable", "selected", "fillMode", "themeColor", "icon", "iconClass", "svgIcon", "imageUrl"], outputs: ["click", "pointerdown", "selectedChange"], exportAs: ["kendoToolBarButton"] }, { kind: "directive", type: EditorBoldButtonDirective, selector: "kendo-toolbar-button[kendoEditorBoldButton]" }, { kind: "directive", type: EditorItalicButtonDirective, selector: "kendo-toolbar-button[kendoEditorItalicButton]" }, { kind: "directive", type: EditorUnderlineButtonDirective, selector: "kendo-toolbar-button[kendoEditorUnderlineButton]" }, { kind: "component", type: EditorFormatComponent, selector: "kendo-toolbar-dropdownlist[kendoEditorFormat]", inputs: ["data"], outputs: ["valueChange"] }, { kind: "directive", type: EditorAlignLeftButtonDirective, selector: "kendo-toolbar-button[kendoEditorAlignLeftButton]" }, { kind: "directive", type: EditorAlignCenterButtonDirective, selector: "kendo-toolbar-button[kendoEditorAlignCenterButton]" }, { kind: "directive", type: EditorAlignRightButtonDirective, selector: "kendo-toolbar-button[kendoEditorAlignRightButton]" }, { kind: "directive", type: EditorAlignJustifyButtonDirective, selector: "kendo-toolbar-button[kendoEditorAlignJustifyButton]" }, { kind: "directive", type: EditorInsertUnorderedListButtonDirective, selector: "kendo-toolbar-button[kendoEditorInsertUnorderedListButton]" }, { kind: "directive", type: EditorInsertOrderedListButtonDirective, selector: "kendo-toolbar-button[kendoEditorInsertOrderedListButton]" }, { kind: "directive", type: EditorIndentButtonDirective, selector: "kendo-toolbar-button[kendoEditorIndentButton]" }, { kind: "directive", type: EditorOutdentButtonDirective, selector: "kendo-toolbar-button[kendoEditorOutdentButton]" }, { kind: "directive", type: EditorCreateLinkButtonDirective, selector: "kendo-toolbar-button[kendoEditorCreateLinkButton]" }, { kind: "directive", type: EditorUnlinkButtonDirective, selector: "kendo-toolbar-button[kendoEditorUnlinkButton]" }, { kind: "directive", type: EditorInsertImageButtonDirective, selector: "kendo-toolbar-button[kendoEditorInsertImageButton]" }, { kind: "component", type: WatermarkOverlayComponent, selector: "div[kendoWatermarkOverlay]" }] });
|
|
1025
|
+
}
|
|
1026
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EditorComponent, decorators: [{
|
|
985
1027
|
type: Component,
|
|
986
1028
|
args: [{
|
|
987
1029
|
selector: 'kendo-editor',
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**-----------------------------------------------------------------------------------------
|
|
2
|
+
* Copyright © 2024 Progress Software Corporation. All rights reserved.
|
|
3
|
+
* Licensed under commercial license. See LICENSE.md in the project root for more information
|
|
4
|
+
*-------------------------------------------------------------------------------------------*/
|
|
5
|
+
import { NgModule } from '@angular/core';
|
|
6
|
+
import { ResizeBatchService } from '@progress/kendo-angular-common';
|
|
7
|
+
import { DialogContainerService, DialogService, WindowContainerService, WindowService } from '@progress/kendo-angular-dialog';
|
|
8
|
+
import { IconsService } from '@progress/kendo-angular-icons';
|
|
9
|
+
import { KENDO_TOOLBAR } from '@progress/kendo-angular-toolbar';
|
|
10
|
+
import { PopupService } from '@progress/kendo-angular-popup';
|
|
11
|
+
import { KENDO_EDITOR } from './directives';
|
|
12
|
+
import * as i0 from "@angular/core";
|
|
13
|
+
import * as i1 from "./editor.component";
|
|
14
|
+
import * as i2 from "./tools/alignment/editor-align-left-button.directive";
|
|
15
|
+
import * as i3 from "./tools/alignment/editor-align-center-button.directive";
|
|
16
|
+
import * as i4 from "./tools/alignment/editor-align-right-button.directive";
|
|
17
|
+
import * as i5 from "./tools/alignment/editor-align-justify-button.directive";
|
|
18
|
+
import * as i6 from "./tools/link/editor-insert-file-button.directive";
|
|
19
|
+
import * as i7 from "./tools/history/editor-redo-button.directive";
|
|
20
|
+
import * as i8 from "./tools/history/editor-undo-button.directive";
|
|
21
|
+
import * as i9 from "./tools/image/editor-insert-image-button.directive";
|
|
22
|
+
import * as i10 from "./tools/indentation/editor-indent-button.directive";
|
|
23
|
+
import * as i11 from "./tools/indentation/editor-outdent-button.directive";
|
|
24
|
+
import * as i12 from "./tools/link/editor-create-link-button.directive";
|
|
25
|
+
import * as i13 from "./tools/link/editor-unlink-button.directive";
|
|
26
|
+
import * as i14 from "./tools/list/editor-insert-ordered-list-button.directive";
|
|
27
|
+
import * as i15 from "./tools/list/editor-insert-unordered-list-button.directive";
|
|
28
|
+
import * as i16 from "./tools/source/editor-view-source-button.directive";
|
|
29
|
+
import * as i17 from "./tools/typographical-emphasis/editor-bold-button.directive";
|
|
30
|
+
import * as i18 from "./tools/typographical-emphasis/editor-italic-button.directive";
|
|
31
|
+
import * as i19 from "./tools/typographical-emphasis/editor-underline-button.directive";
|
|
32
|
+
import * as i20 from "./tools/typographical-emphasis/editor-strikethrough-button.directive";
|
|
33
|
+
import * as i21 from "./tools/typographical-emphasis/editor-subscript-button.directive";
|
|
34
|
+
import * as i22 from "./tools/typographical-emphasis/editor-superscript-button.directive";
|
|
35
|
+
import * as i23 from "./tools/colorpicker/editor-fore-color.directive";
|
|
36
|
+
import * as i24 from "./tools/colorpicker/editor-back-color.directive";
|
|
37
|
+
import * as i25 from "./tools/editor-clean-formatting-button.directive";
|
|
38
|
+
import * as i26 from "./tools/tables/editor-add-column-before-button.directive";
|
|
39
|
+
import * as i27 from "./tools/tables/editor-add-column-after-button.directive";
|
|
40
|
+
import * as i28 from "./tools/tables/editor-add-row-before-button.directive";
|
|
41
|
+
import * as i29 from "./tools/tables/editor-add-row-after-button.directive";
|
|
42
|
+
import * as i30 from "./tools/tables/editor-delete-column-button.directive";
|
|
43
|
+
import * as i31 from "./tools/tables/editor-delete-row-button.directive";
|
|
44
|
+
import * as i32 from "./tools/tables/editor-delete-table-button.directive";
|
|
45
|
+
import * as i33 from "./localization/custom-messages.component";
|
|
46
|
+
import * as i34 from "./tools/print/editor-print-button.directive";
|
|
47
|
+
import * as i35 from "./tools/select-all/select-all-button.directive";
|
|
48
|
+
import * as i36 from "./tools/blockquote/editor-blockquote-button.directive";
|
|
49
|
+
import * as i37 from "./tools/fontsize/editor-fontsize.component";
|
|
50
|
+
import * as i38 from "./tools/fontfamily/editor-fontfamily.component";
|
|
51
|
+
import * as i39 from "./tools/format/editor-format.component";
|
|
52
|
+
import * as i40 from "./tools/colorpicker/editor-colorpicker.component";
|
|
53
|
+
import * as i41 from "./tools/tables/editor-insert-table-button.component";
|
|
54
|
+
import * as i42 from "./tools/tables/editor-merge-cells-button.directive";
|
|
55
|
+
import * as i43 from "./tools/tables/editor-split-cell-button.directive";
|
|
56
|
+
import * as i44 from "@progress/kendo-angular-toolbar";
|
|
57
|
+
// IMPORTANT: NgModule export kept for backwards compatibility
|
|
58
|
+
/**
|
|
59
|
+
* Represents the [NgModule](link:site.data.urls.angular['ngmoduleapi']) definition for the Editor component.
|
|
60
|
+
*
|
|
61
|
+
* ```ts-no-run
|
|
62
|
+
* import { NgModule } from '@angular/core';
|
|
63
|
+
* import { EditorModule } from '@progress/kendo-angular-editor';
|
|
64
|
+
* import { BrowserModule } from "@angular/platform-browser";
|
|
65
|
+
* import { AppComponent } from './app.component';
|
|
66
|
+
*
|
|
67
|
+
* _@NgModule({
|
|
68
|
+
* declarations: [AppComponent],
|
|
69
|
+
* imports: [BrowserModule, EditorModule],
|
|
70
|
+
* bootstrap: [AppComponent]
|
|
71
|
+
* })
|
|
72
|
+
* export class AppModule {}
|
|
73
|
+
*
|
|
74
|
+
* ```
|
|
75
|
+
*/
|
|
76
|
+
export class EditorModule {
|
|
77
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EditorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
78
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: EditorModule, imports: [i1.EditorComponent, i2.EditorAlignLeftButtonDirective, i3.EditorAlignCenterButtonDirective, i4.EditorAlignRightButtonDirective, i5.EditorAlignJustifyButtonDirective, i6.EditorInsertFileButtonDirective, i7.EditorRedoButtonDirective, i8.EditorUndoButtonDirective, i9.EditorInsertImageButtonDirective, i10.EditorIndentButtonDirective, i11.EditorOutdentButtonDirective, i12.EditorCreateLinkButtonDirective, i13.EditorUnlinkButtonDirective, i14.EditorInsertOrderedListButtonDirective, i15.EditorInsertUnorderedListButtonDirective, i16.EditorViewSourceButtonDirective, i17.EditorBoldButtonDirective, i18.EditorItalicButtonDirective, i19.EditorUnderlineButtonDirective, i20.EditorStrikethroughButtonDirective, i21.EditorSubscriptButtonDirective, i22.EditorSuperscriptButtonDirective, i23.EditorForeColorDirective, i24.EditorBackColorDirective, i25.EditorCleanFormattingButtonDirective, i26.EditorAddColumnBeforeButtonDirective, i27.EditorAddColumnAfterButtonDirective, i28.EditorAddRowBeforeButtonDirective, i29.EditorAddRowAfterButtonDirective, i30.EditorDeleteColumnButtonDirective, i31.EditorDeleteRowButtonDirective, i32.EditorDeleteTableButtonDirective, i33.CustomMessagesComponent, i34.EditorPrintDirective, i35.EditorSelectAllButtonDirective, i36.EditorBlockquoteDirective, i37.EditorFontSizeComponent, i38.EditorFontFamilyComponent, i39.EditorFormatComponent, i40.EditorColorPickerComponent, i41.EditorInsertTableButtonComponent, i42.EditorMergeCellsButtonDirective, i43.EditorSplitCellButtonDirective, i44.ToolBarComponent, i44.ToolbarCustomMessagesComponent, i44.ToolBarButtonComponent, i44.ToolBarButtonGroupComponent, i44.ToolBarDropDownButtonComponent, i44.ToolBarSeparatorComponent, i44.ToolBarSpacerComponent, i44.ToolBarSplitButtonComponent, i44.ToolBarToolComponent], exports: [i1.EditorComponent, i2.EditorAlignLeftButtonDirective, i3.EditorAlignCenterButtonDirective, i4.EditorAlignRightButtonDirective, i5.EditorAlignJustifyButtonDirective, i6.EditorInsertFileButtonDirective, i7.EditorRedoButtonDirective, i8.EditorUndoButtonDirective, i9.EditorInsertImageButtonDirective, i10.EditorIndentButtonDirective, i11.EditorOutdentButtonDirective, i12.EditorCreateLinkButtonDirective, i13.EditorUnlinkButtonDirective, i14.EditorInsertOrderedListButtonDirective, i15.EditorInsertUnorderedListButtonDirective, i16.EditorViewSourceButtonDirective, i17.EditorBoldButtonDirective, i18.EditorItalicButtonDirective, i19.EditorUnderlineButtonDirective, i20.EditorStrikethroughButtonDirective, i21.EditorSubscriptButtonDirective, i22.EditorSuperscriptButtonDirective, i23.EditorForeColorDirective, i24.EditorBackColorDirective, i25.EditorCleanFormattingButtonDirective, i26.EditorAddColumnBeforeButtonDirective, i27.EditorAddColumnAfterButtonDirective, i28.EditorAddRowBeforeButtonDirective, i29.EditorAddRowAfterButtonDirective, i30.EditorDeleteColumnButtonDirective, i31.EditorDeleteRowButtonDirective, i32.EditorDeleteTableButtonDirective, i33.CustomMessagesComponent, i34.EditorPrintDirective, i35.EditorSelectAllButtonDirective, i36.EditorBlockquoteDirective, i37.EditorFontSizeComponent, i38.EditorFontFamilyComponent, i39.EditorFormatComponent, i40.EditorColorPickerComponent, i41.EditorInsertTableButtonComponent, i42.EditorMergeCellsButtonDirective, i43.EditorSplitCellButtonDirective, i44.ToolBarComponent, i44.ToolbarCustomMessagesComponent, i44.ToolBarButtonComponent, i44.ToolBarButtonGroupComponent, i44.ToolBarDropDownButtonComponent, i44.ToolBarSeparatorComponent, i44.ToolBarSpacerComponent, i44.ToolBarSplitButtonComponent, i44.ToolBarToolComponent] });
|
|
79
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EditorModule, providers: [IconsService, PopupService, ResizeBatchService, DialogContainerService, DialogService, WindowService, WindowContainerService], imports: [i1.EditorComponent, i37.EditorFontSizeComponent, i38.EditorFontFamilyComponent, i39.EditorFormatComponent, i40.EditorColorPickerComponent, i41.EditorInsertTableButtonComponent, i44.ToolBarComponent, i44.ToolbarCustomMessagesComponent, i44.ToolBarButtonComponent, i44.ToolBarButtonGroupComponent, i44.ToolBarDropDownButtonComponent, i44.ToolBarSeparatorComponent, i44.ToolBarSpacerComponent, i44.ToolBarSplitButtonComponent] });
|
|
80
|
+
}
|
|
81
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EditorModule, decorators: [{
|
|
82
|
+
type: NgModule,
|
|
83
|
+
args: [{
|
|
84
|
+
exports: [...KENDO_EDITOR, ...KENDO_TOOLBAR],
|
|
85
|
+
imports: [...KENDO_EDITOR, ...KENDO_TOOLBAR],
|
|
86
|
+
providers: [IconsService, PopupService, ResizeBatchService, DialogContainerService, DialogService, WindowService, WindowContainerService]
|
|
87
|
+
}]
|
|
88
|
+
}] });
|
|
@@ -6,7 +6,7 @@ export { EditorComponent } from './editor.component';
|
|
|
6
6
|
export { EditorModule } from './editor.module';
|
|
7
7
|
export { schema } from './config/schema';
|
|
8
8
|
export { Schema } from '@progress/kendo-editor-common';
|
|
9
|
-
export { EditorState, Plugin, PluginKey, Transaction, EditorView, Decoration, DecorationSet, NodeType, Node, MarkType, Mark, InputRule, inputRules, wrappingInputRule, textblockTypeInputRule, keymap, baseKeymap, history, dropCursor, gapCursor, tableNodes } from '@progress/kendo-editor-common';
|
|
9
|
+
export { EditorState, Plugin, PluginKey, Transaction, EditorView, Decoration, DecorationSet, NodeType, Node, MarkType, Mark, InputRule, inputRules, wrappingInputRule, textblockTypeInputRule, keymap, baseKeymap, history, dropCursor, gapCursor, tableNodes, TextSelection, NodeSelection, CellSelection, AllSelection } from '@progress/kendo-editor-common';
|
|
10
10
|
export { getSelectionText } from './util';
|
|
11
11
|
export { EditorPasteEvent } from './preventable-events/paste-event';
|
|
12
12
|
// addresses build errors due to "error NG3001: Unsupported private class"
|
|
@@ -12,6 +12,7 @@ import * as i1 from "@progress/kendo-angular-l10n";
|
|
|
12
12
|
* ([see example]({% slug globalization_editor %}#toc-custom-messages)).
|
|
13
13
|
*/
|
|
14
14
|
export class CustomMessagesComponent extends MessagesDirective {
|
|
15
|
+
service;
|
|
15
16
|
constructor(service) {
|
|
16
17
|
super();
|
|
17
18
|
this.service = service;
|
|
@@ -19,15 +20,15 @@ export class CustomMessagesComponent extends MessagesDirective {
|
|
|
19
20
|
get override() {
|
|
20
21
|
return true;
|
|
21
22
|
}
|
|
23
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CustomMessagesComponent, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Directive });
|
|
24
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: CustomMessagesComponent, isStandalone: true, selector: "kendo-editor-messages", providers: [
|
|
25
|
+
{
|
|
26
|
+
provide: MessagesDirective,
|
|
27
|
+
useExisting: forwardRef(() => CustomMessagesComponent)
|
|
28
|
+
}
|
|
29
|
+
], usesInheritance: true, ngImport: i0 });
|
|
22
30
|
}
|
|
23
|
-
|
|
24
|
-
CustomMessagesComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: CustomMessagesComponent, isStandalone: true, selector: "kendo-editor-messages", providers: [
|
|
25
|
-
{
|
|
26
|
-
provide: MessagesDirective,
|
|
27
|
-
useExisting: forwardRef(() => CustomMessagesComponent)
|
|
28
|
-
}
|
|
29
|
-
], usesInheritance: true, ngImport: i0 });
|
|
30
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CustomMessagesComponent, decorators: [{
|
|
31
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CustomMessagesComponent, decorators: [{
|
|
31
32
|
type: Directive,
|
|
32
33
|
args: [{
|
|
33
34
|
providers: [
|
|
@@ -13,10 +13,10 @@ export class EditorLocalizationService extends LocalizationService {
|
|
|
13
13
|
constructor(prefix, messageService, _rtl) {
|
|
14
14
|
super(prefix, messageService, _rtl);
|
|
15
15
|
}
|
|
16
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EditorLocalizationService, deps: [{ token: L10N_PREFIX }, { token: i1.MessageService, optional: true }, { token: RTL, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
17
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EditorLocalizationService });
|
|
16
18
|
}
|
|
17
|
-
|
|
18
|
-
EditorLocalizationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: EditorLocalizationService });
|
|
19
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: EditorLocalizationService, decorators: [{
|
|
19
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EditorLocalizationService, decorators: [{
|
|
20
20
|
type: Injectable
|
|
21
21
|
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
22
22
|
type: Inject,
|