@firestitch/html-editor 12.7.6 → 13.0.2
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/app/modules/html-editor/components/html-editor/html-editor.component.d.ts +5 -3
- package/esm2020/app/modules/html-editor/components/html-editor/html-editor.component.mjs +480 -0
- package/{esm2015/app/modules/html-editor/fs-html-editor.module.js → esm2020/app/modules/html-editor/fs-html-editor.module.mjs} +10 -7
- package/esm2020/app/modules/html-editor/plugins/checklist.plugin.mjs +39 -0
- package/esm2020/app/modules/html-editor/plugins/code.plugin.mjs +67 -0
- package/esm2020/app/modules/html-editor/plugins/mention.plugin.mjs +90 -0
- package/esm2020/app/modules/html-editor/plugins/realtime.plugin.mjs +16 -0
- package/esm2020/app/modules/html-editor/plugins/screen-record.plugin.mjs +92 -0
- package/{esm2015/app/modules/html-editor/services/froala-loader.service.js → esm2020/app/modules/html-editor/services/froala-loader.service.mjs} +4 -4
- package/esm2020/app/modules/html-renderer/components/html-renderer/html-renderer.component.mjs +24 -0
- package/{esm2015/app/modules/html-renderer/fs-html-renderer.module.js → esm2020/app/modules/html-renderer/fs-html-renderer.module.mjs} +5 -5
- package/fesm2015/{firestitch-html-editor.js → firestitch-html-editor.mjs} +88 -88
- package/fesm2015/firestitch-html-editor.mjs.map +1 -0
- package/fesm2020/firestitch-html-editor.mjs +1014 -0
- package/fesm2020/firestitch-html-editor.mjs.map +1 -0
- package/package.json +21 -8
- package/bundles/firestitch-html-editor.umd.js +0 -1430
- package/bundles/firestitch-html-editor.umd.js.map +0 -1
- package/esm2015/app/modules/html-editor/components/html-editor/html-editor.component.js +0 -480
- package/esm2015/app/modules/html-editor/plugins/checklist.plugin.js +0 -35
- package/esm2015/app/modules/html-editor/plugins/code.plugin.js +0 -63
- package/esm2015/app/modules/html-editor/plugins/mention.plugin.js +0 -87
- package/esm2015/app/modules/html-editor/plugins/realtime.plugin.js +0 -13
- package/esm2015/app/modules/html-editor/plugins/screen-record.plugin.js +0 -91
- package/esm2015/app/modules/html-renderer/components/html-renderer/html-renderer.component.js +0 -29
- package/fesm2015/firestitch-html-editor.js.map +0 -1
- /package/{esm2015/app/modules/html-editor/classes/plugin.js → esm2020/app/modules/html-editor/classes/plugin.mjs} +0 -0
- /package/{esm2015/app/modules/html-editor/consts/paragraph-buttons.const.js → esm2020/app/modules/html-editor/consts/paragraph-buttons.const.mjs} +0 -0
- /package/{esm2015/app/modules/html-editor/consts/rich-buttons.const.js → esm2020/app/modules/html-editor/consts/rich-buttons.const.mjs} +0 -0
- /package/{esm2015/app/modules/html-editor/consts/text-buttons.const.js → esm2020/app/modules/html-editor/consts/text-buttons.const.mjs} +0 -0
- /package/{esm2015/app/modules/html-editor/enums/default-plugin.enum.js → esm2020/app/modules/html-editor/enums/default-plugin.enum.mjs} +0 -0
- /package/{esm2015/app/modules/html-editor/injects/config.inject.js → esm2020/app/modules/html-editor/injects/config.inject.mjs} +0 -0
- /package/{esm2015/app/modules/html-editor/interfaces/html-editor-config.js → esm2020/app/modules/html-editor/interfaces/html-editor-config.mjs} +0 -0
- /package/{esm2015/app/modules/html-editor/interfaces/plugin-button.js → esm2020/app/modules/html-editor/interfaces/plugin-button.mjs} +0 -0
- /package/{esm2015/app/modules/html-editor/interfaces/plugin-config.js → esm2020/app/modules/html-editor/interfaces/plugin-config.mjs} +0 -0
- /package/{esm2015/app/modules/html-editor/plugins/configs/mention-plugin.config.js → esm2020/app/modules/html-editor/plugins/configs/mention-plugin.config.mjs} +0 -0
- /package/{esm2015/app/modules/html-editor/plugins/configs/screen-record-plugin.config.js → esm2020/app/modules/html-editor/plugins/configs/screen-record-plugin.config.mjs} +0 -0
- /package/{esm2015/firestitch-html-editor.js → esm2020/firestitch-html-editor.mjs} +0 -0
- /package/{esm2015/public_api.js → esm2020/public_api.mjs} +0 -0
|
@@ -26,16 +26,11 @@ class FsHtmlRendererComponent {
|
|
|
26
26
|
this._cdRef.markForCheck();
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
|
-
FsHtmlRendererComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
30
|
-
FsHtmlRendererComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "
|
|
31
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
29
|
+
FsHtmlRendererComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: FsHtmlRendererComponent, deps: [{ token: i1.DomSanitizer }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
30
|
+
FsHtmlRendererComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: FsHtmlRendererComponent, selector: "fs-html-renderer", inputs: { setHtml: ["html", "setHtml"] }, ngImport: i0, template: "<span class=\"fr-view fs-html-editor-default\" [innerHtml]=\"trustedHtml\"></span>\n", styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
31
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: FsHtmlRendererComponent, decorators: [{
|
|
32
32
|
type: Component,
|
|
33
|
-
args: [{
|
|
34
|
-
selector: 'fs-html-renderer',
|
|
35
|
-
templateUrl: 'html-renderer.component.html',
|
|
36
|
-
styleUrls: ['html-renderer.component.scss'],
|
|
37
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
38
|
-
}]
|
|
33
|
+
args: [{ selector: 'fs-html-renderer', changeDetection: ChangeDetectionStrategy.OnPush, template: "<span class=\"fr-view fs-html-editor-default\" [innerHtml]=\"trustedHtml\"></span>\n", styles: [""] }]
|
|
39
34
|
}], ctorParameters: function () { return [{ type: i1.DomSanitizer }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { setHtml: [{
|
|
40
35
|
type: Input,
|
|
41
36
|
args: ['html']
|
|
@@ -43,12 +38,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
|
|
|
43
38
|
|
|
44
39
|
class FsHtmlRendererModule {
|
|
45
40
|
}
|
|
46
|
-
FsHtmlRendererModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
47
|
-
FsHtmlRendererModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "
|
|
48
|
-
FsHtmlRendererModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
|
|
41
|
+
FsHtmlRendererModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: FsHtmlRendererModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
42
|
+
FsHtmlRendererModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: FsHtmlRendererModule, declarations: [FsHtmlRendererComponent], imports: [CommonModule], exports: [FsHtmlRendererComponent] });
|
|
43
|
+
FsHtmlRendererModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: FsHtmlRendererModule, imports: [[
|
|
49
44
|
CommonModule,
|
|
50
45
|
]] });
|
|
51
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
46
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: FsHtmlRendererModule, decorators: [{
|
|
52
47
|
type: NgModule,
|
|
53
48
|
args: [{
|
|
54
49
|
imports: [
|
|
@@ -63,6 +58,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
|
|
|
63
58
|
}]
|
|
64
59
|
}] });
|
|
65
60
|
|
|
61
|
+
const FS_HTML_EDITOR_DEFAULT_CONFIG = new InjectionToken('fs-html-editor.default-config');
|
|
62
|
+
const FS_HTML_EDITOR_CONFIG = new InjectionToken('fs-html-editor.config');
|
|
63
|
+
|
|
66
64
|
const ParagraphButtons = [
|
|
67
65
|
'align',
|
|
68
66
|
'formatOL',
|
|
@@ -99,9 +97,6 @@ const TextButtons = [
|
|
|
99
97
|
'quote',
|
|
100
98
|
];
|
|
101
99
|
|
|
102
|
-
const FS_HTML_EDITOR_DEFAULT_CONFIG = new InjectionToken('fs-html-editor.default-config');
|
|
103
|
-
const FS_HTML_EDITOR_CONFIG = new InjectionToken('fs-html-editor.config');
|
|
104
|
-
|
|
105
100
|
class FsFroalaLoaderService {
|
|
106
101
|
constructor(_defaultConfig, _document) {
|
|
107
102
|
this._defaultConfig = _defaultConfig;
|
|
@@ -168,26 +163,29 @@ class FsFroalaLoaderService {
|
|
|
168
163
|
this._froalaPluginsLoaded.next(true);
|
|
169
164
|
}
|
|
170
165
|
}
|
|
171
|
-
FsFroalaLoaderService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
172
|
-
FsFroalaLoaderService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
173
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
166
|
+
FsFroalaLoaderService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: FsFroalaLoaderService, deps: [{ token: FS_HTML_EDITOR_CONFIG, optional: true }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
167
|
+
FsFroalaLoaderService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: FsFroalaLoaderService, providedIn: 'root' });
|
|
168
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: FsFroalaLoaderService, decorators: [{
|
|
174
169
|
type: Injectable,
|
|
175
170
|
args: [{
|
|
176
171
|
providedIn: 'root',
|
|
177
172
|
}]
|
|
178
|
-
}], ctorParameters: function () {
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
type:
|
|
185
|
-
|
|
186
|
-
|
|
173
|
+
}], ctorParameters: function () {
|
|
174
|
+
return [{ type: undefined, decorators: [{
|
|
175
|
+
type: Optional
|
|
176
|
+
}, {
|
|
177
|
+
type: Inject,
|
|
178
|
+
args: [FS_HTML_EDITOR_CONFIG]
|
|
179
|
+
}] }, { type: Document, decorators: [{
|
|
180
|
+
type: Inject,
|
|
181
|
+
args: [DOCUMENT]
|
|
182
|
+
}] }];
|
|
183
|
+
} });
|
|
187
184
|
|
|
188
185
|
class FsHtmlEditorComponent {
|
|
189
|
-
constructor(_defaultConfig, _cdRef, _fr) {
|
|
186
|
+
constructor(_defaultConfig, _document, _cdRef, _fr) {
|
|
190
187
|
this._defaultConfig = _defaultConfig;
|
|
188
|
+
this._document = _document;
|
|
191
189
|
this._cdRef = _cdRef;
|
|
192
190
|
this._fr = _fr;
|
|
193
191
|
this.classFocused = false;
|
|
@@ -197,6 +195,7 @@ class FsHtmlEditorComponent {
|
|
|
197
195
|
this.containerID = `fs-html-editor-${guid('xxx')}`;
|
|
198
196
|
this._initialize$ = new ReplaySubject();
|
|
199
197
|
this._froalaReady$ = new BehaviorSubject(null);
|
|
198
|
+
this._window = this._document.defaultView;
|
|
200
199
|
this._destroy$ = new Subject();
|
|
201
200
|
this.onChange = (data) => { };
|
|
202
201
|
this.onTouched = () => { };
|
|
@@ -215,7 +214,7 @@ class FsHtmlEditorComponent {
|
|
|
215
214
|
}
|
|
216
215
|
ngOnInit() {
|
|
217
216
|
this.config = this.config || {};
|
|
218
|
-
this.config.autofocus = this.config.autofocus
|
|
217
|
+
this.config.autofocus = this.config.autofocus && (!this.config.disabled || !this.disabled);
|
|
219
218
|
this._listenLazyInit();
|
|
220
219
|
}
|
|
221
220
|
ngAfterViewInit() {
|
|
@@ -237,23 +236,6 @@ class FsHtmlEditorComponent {
|
|
|
237
236
|
this._froalaReady$.next({ config, options });
|
|
238
237
|
});
|
|
239
238
|
}
|
|
240
|
-
_processImageUpload(blob) {
|
|
241
|
-
const processor = new FileProcessor();
|
|
242
|
-
const file = new FsFile(blob);
|
|
243
|
-
const config = {
|
|
244
|
-
orientate: true,
|
|
245
|
-
quality: this.config.image.quality,
|
|
246
|
-
format: this.config.image.format,
|
|
247
|
-
maxWidth: this.config.image.width,
|
|
248
|
-
maxHeight: this.config.image.height,
|
|
249
|
-
minWidth: this.config.image.minWidth,
|
|
250
|
-
minHeight: this.config.image.minHeight,
|
|
251
|
-
};
|
|
252
|
-
return processor.processFile(file, config)
|
|
253
|
-
.pipe(switchMap((fsFile) => {
|
|
254
|
-
return this.config.image.upload(fsFile.file);
|
|
255
|
-
}));
|
|
256
|
-
}
|
|
257
239
|
updateSize() {
|
|
258
240
|
// Hack: To trigger the toolbar button size modes
|
|
259
241
|
window.dispatchEvent(new Event('resize'));
|
|
@@ -329,6 +311,23 @@ class FsHtmlEditorComponent {
|
|
|
329
311
|
this._cdRef.markForCheck();
|
|
330
312
|
this.el.innerHTML = '';
|
|
331
313
|
}
|
|
314
|
+
_processImageUpload(blob) {
|
|
315
|
+
const processor = new FileProcessor();
|
|
316
|
+
const file = new FsFile(blob);
|
|
317
|
+
const config = {
|
|
318
|
+
orientate: true,
|
|
319
|
+
quality: this.config.image.quality,
|
|
320
|
+
format: this.config.image.format,
|
|
321
|
+
maxWidth: this.config.image.width,
|
|
322
|
+
maxHeight: this.config.image.height,
|
|
323
|
+
minWidth: this.config.image.minWidth,
|
|
324
|
+
minHeight: this.config.image.minHeight,
|
|
325
|
+
};
|
|
326
|
+
return processor.processFile(file, config)
|
|
327
|
+
.pipe(switchMap((fsFile) => {
|
|
328
|
+
return this.config.image.upload(fsFile.file);
|
|
329
|
+
}));
|
|
330
|
+
}
|
|
332
331
|
_createConfig() {
|
|
333
332
|
return merge({ froalaConfig: {} }, this._defaultConfig, this.config);
|
|
334
333
|
}
|
|
@@ -339,6 +338,7 @@ class FsHtmlEditorComponent {
|
|
|
339
338
|
_initButtons(config) {
|
|
340
339
|
(config.buttons || [])
|
|
341
340
|
.forEach((button) => {
|
|
341
|
+
var _a, _b, _c;
|
|
342
342
|
/*
|
|
343
343
|
Svg Keys:
|
|
344
344
|
["add", "advancedImageEditor", "alignCenter", "alignJustify", "alignLeft", "alignRight",
|
|
@@ -356,7 +356,6 @@ class FsHtmlEditorComponent {
|
|
|
356
356
|
"tableHeader", "tableStyle", "textColor", "textMore", "underline", "undo", "unlink",
|
|
357
357
|
"unorderedList", "verticalAlignBottom", "verticalAlignMiddle", "verticalAlignTop"]
|
|
358
358
|
*/
|
|
359
|
-
var _a, _b, _c;
|
|
360
359
|
if (button.svgKey) {
|
|
361
360
|
this._fr.FroalaEditor.DefineIcon(button.name, { SVG_KEY: button.svgKey });
|
|
362
361
|
}
|
|
@@ -365,9 +364,9 @@ class FsHtmlEditorComponent {
|
|
|
365
364
|
focus: (_a = button.focus) !== null && _a !== void 0 ? _a : true,
|
|
366
365
|
undo: (_b = button.undo) !== null && _b !== void 0 ? _b : true,
|
|
367
366
|
refreshAfterCallback: (_c = button.refreshAfterCallback) !== null && _c !== void 0 ? _c : true,
|
|
368
|
-
callback
|
|
367
|
+
callback() {
|
|
369
368
|
button.click(this);
|
|
370
|
-
}
|
|
369
|
+
},
|
|
371
370
|
});
|
|
372
371
|
});
|
|
373
372
|
}
|
|
@@ -390,16 +389,16 @@ class FsHtmlEditorComponent {
|
|
|
390
389
|
focus: button.focus,
|
|
391
390
|
showOnMobile: button.showOnMobile,
|
|
392
391
|
refreshAfterCallback: button.refreshAfterCallback,
|
|
393
|
-
callback
|
|
392
|
+
callback() {
|
|
394
393
|
if (button.click) {
|
|
395
394
|
button.click(this);
|
|
396
395
|
}
|
|
397
396
|
},
|
|
398
|
-
refresh
|
|
397
|
+
refresh(button) {
|
|
399
398
|
if (button.refresh) {
|
|
400
399
|
button.refresh(this, button);
|
|
401
400
|
}
|
|
402
|
-
}
|
|
401
|
+
},
|
|
403
402
|
});
|
|
404
403
|
});
|
|
405
404
|
});
|
|
@@ -437,11 +436,11 @@ class FsHtmlEditorComponent {
|
|
|
437
436
|
},
|
|
438
437
|
lineHeights: {
|
|
439
438
|
Default: '',
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
439
|
+
0.5: '0.5',
|
|
440
|
+
Single: '1',
|
|
441
|
+
1.15: '1.15',
|
|
442
|
+
1.5: '1.5',
|
|
443
|
+
Double: '2',
|
|
445
444
|
},
|
|
446
445
|
paragraphFormatSelection: true,
|
|
447
446
|
toolbarButtonsXS: {
|
|
@@ -475,6 +474,9 @@ class FsHtmlEditorComponent {
|
|
|
475
474
|
}, config.froalaConfig);
|
|
476
475
|
}
|
|
477
476
|
_listenLazyInit() {
|
|
477
|
+
// must be there to cleanup https://github.com/microsoft/monaco-editor/issues/827
|
|
478
|
+
// to prevent conflicts with text-editor
|
|
479
|
+
this._window.define = null;
|
|
478
480
|
this.froalaLoaded$
|
|
479
481
|
.pipe(filter((ready) => ready), switchMap(() => this._initialize$), tap(() => {
|
|
480
482
|
const selection = window.getSelection();
|
|
@@ -530,11 +532,11 @@ class FsHtmlEditorComponent {
|
|
|
530
532
|
this._contentChanged();
|
|
531
533
|
});
|
|
532
534
|
this._editor.events.on('paste.afterCleanup', (html) => {
|
|
533
|
-
|
|
535
|
+
const div = document.createElement('div');
|
|
534
536
|
div.innerHTML = html;
|
|
535
537
|
div.querySelectorAll('*')
|
|
536
538
|
.forEach((el) => {
|
|
537
|
-
for (
|
|
539
|
+
for (let i = 0; i < el.attributes.length; i++) {
|
|
538
540
|
const name = el.attributes[0].name;
|
|
539
541
|
if (name !== 'href') {
|
|
540
542
|
el.removeAttribute(name);
|
|
@@ -580,17 +582,17 @@ class FsHtmlEditorComponent {
|
|
|
580
582
|
}
|
|
581
583
|
}
|
|
582
584
|
}
|
|
583
|
-
FsHtmlEditorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
584
|
-
FsHtmlEditorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "
|
|
585
|
+
FsHtmlEditorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: FsHtmlEditorComponent, deps: [{ token: FS_HTML_EDITOR_CONFIG, optional: true }, { token: DOCUMENT }, { token: i0.ChangeDetectorRef }, { token: FsFroalaLoaderService }], target: i0.ɵɵFactoryTarget.Component });
|
|
586
|
+
FsHtmlEditorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: FsHtmlEditorComponent, selector: "fs-html-editor", inputs: { config: "config", hint: "hint", disabled: "disabled" }, host: { properties: { "class.focused": "this.classFocused", "class.disabled": "this.disabled" } }, providers: [
|
|
585
587
|
{
|
|
586
588
|
provide: NG_VALUE_ACCESSOR,
|
|
587
589
|
useExisting: forwardRef(() => FsHtmlEditorComponent),
|
|
588
|
-
multi: true
|
|
590
|
+
multi: true,
|
|
589
591
|
},
|
|
590
592
|
{
|
|
591
593
|
provide: NG_VALIDATORS,
|
|
592
594
|
useExisting: forwardRef(() => FsHtmlEditorComponent),
|
|
593
|
-
multi: true
|
|
595
|
+
multi: true,
|
|
594
596
|
},
|
|
595
597
|
], viewQueries: [{ propertyName: "elRef", first: true, predicate: ["elRef"], descendants: true }], ngImport: i0, template: "<fs-label-field>\n <fs-label *ngIf=\"config.label\">{{config.label}}</fs-label>\n <div\n class=\"html-editor-container fs-html-editor-default\"\n [id]=\"containerID\"\n [ngClass]=\"{\n initialized: initialized,\n 'init-on-click': config.initOnClick\n }\">\n <ng-container *fsSkeleton=\"(froalaLoaded$ | async) !== false\"></ng-container>\n <div #elRef></div>\n\n <div class=\"bottom-line\"></div>\n <div class=\"disabled-line\"></div>\n </div>\n\n <fs-label-message>\n <div class=\"fs-form-message\">\n <div class=\"fs-form-hint\">{{hint}}</div>\n </div>\n </fs-label-message>\n</fs-label-field>\n", styles: [":host ::ng-deep .fr-box.fr-basic .fr-wrapper{border:0;border-bottom:1px solid #949494;margin-bottom:1px;background-color:transparent}:host ::ng-deep .fr-box.fr-basic .fr-element{padding:0;font-family:inherit;color:inherit;font-size:inherit;line-height:inherit;min-height:auto}:host ::ng-deep .fr-more-toolbar,:host ::ng-deep .fr-toolbar,:host ::ng-deep .fr-dropdown:after,:host ::ng-deep .fr-dropdown-menu .fr-dropdown-wrapper{transition:none!important}:host ::ng-deep .fr-toolbar-open .fr-more-toolbar{display:block}:host ::ng-deep .fr-more-toolbar{display:none}:host ::ng-deep .fr-toolbar.fr-top{position:sticky;z-index:2;border-radius:0;background-color:#fff}:host ::ng-deep .fr-toolbar.fr-top .fr-btn-grp{margin:0 20px 0 0}:host ::ng-deep .fr-toolbar.fr-top .fr-btn-grp:nth-child(1):after,:host ::ng-deep .fr-toolbar.fr-top .fr-btn-grp:nth-child(2):after{content:\"\";position:absolute;top:9px;height:30px;border-left:1px solid #e5e5e5;margin-left:10px}:host ::ng-deep .fr-toolbar.fr-top div:first-of-type:before{border:none}:host ::ng-deep .fr-toolbar.fr-top.fr-toolbar-open .fr-newline{height:auto}:host ::ng-deep .fr-toolbar.fr-top .fr-btn-grp:first-child{margin-left:0}:host ::ng-deep .fr-toolbar.fr-top.fr-top{border:0}:host ::ng-deep .fr-toolbar.fr-top .fr-newline{margin:0}:host ::ng-deep .fr-toolbar.fr-top .fr-more-toolbar{z-index:auto;display:flex;justify-content:center;padding-left:0!important}:host ::ng-deep .fr-toolbar.fr-top .fr-command.fr-btn{z-index:auto}:host ::ng-deep .fr-toolbar.fr-top .fr-command.fr-btn.fr-dropdown:after{right:3px}:host ::ng-deep .fr-toolbar.fr-top .fr-command.fr-btn.fr-dropdown.fr-selection span{margin-right:24px}:host ::ng-deep .fr-toolbar.fr-top .fr-command.fr-btn.fr-open{border-radius:4px;margin:4px 2px}:host ::ng-deep .fr-view ol,:host ::ng-deep .fr-view ul{list-style-position:unset}:host ::ng-deep .html-editor-container.init-on-click:not(.initialized) .fr-toolbar{display:none}:host.disabled ::ng-deep .fr-box.fr-basic{opacity:.5;pointer-events:none}:host.disabled ::ng-deep .fr-box.fr-basic .fr-wrapper{border:none}:host.disabled ::ng-deep .disabled-line{display:block}::ng-deep .fr-popup{z-index:1001!important}::ng-deep .fr-video-by-url-layer .fr-checkbox-line{display:none}.disabled-line{display:none;position:absolute;bottom:-1px;z-index:1;background-image:linear-gradient(90deg,rgba(0,0,0,.42) 0,rgba(0,0,0,.42) 33%,transparent 0);background-size:4px 100%;background-repeat:repeat-x;height:1px;width:100%}.bottom-line{opacity:0;transform-origin:50%;transform:scaleX(.5);transition:background-color .3s cubic-bezier(.55,0,.55,.2);width:100%;border-bottom:2px solid #949494;position:absolute;bottom:-1px;z-index:1}:host{position:relative;display:block}:host.focused .bottom-line{opacity:1;display:block;transform:scaleX(1);transition:transform .3s cubic-bezier(.25,.8,.25,1),opacity .1s cubic-bezier(.25,.8,.25,1),background-color .3s cubic-bezier(.25,.8,.25,1)}::ng-deep .fs-html-editor-mention-container{position:absolute;top:0;left:0;height:auto;max-height:300px;max-width:500px;overflow:auto;display:block;z-index:999999;box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f;border-bottom-left-radius:4px;border-bottom-right-radius:4px;background:#fff}::ng-deep .fs-html-editor-mention-container ul{margin:0;padding:0;list-style:none}::ng-deep .fs-html-editor-mention-container li{padding:0 16px;cursor:pointer;line-height:48px}::ng-deep .fs-html-editor-mention-container li.highlight,::ng-deep .fs-html-editor-mention-container li:hover{background:#F5F5F5}::ng-deep .fs-html-editor-mention-container li.no-match{cursor:default}\n"], components: [{ type: i2.FsLabelFieldComponent, selector: "fs-label-field", inputs: ["bottomMargin", "topMargin", "labelMargin"] }, { type: i2.FsLabelComponent, selector: "fs-label" }, { type: i2.FsLabelMessageComponent, selector: "fs-label-message" }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.FsSkeletonContentDirective, selector: "[fsSkeleton]", inputs: ["fsSkeleton", "fsSkeletonPattern"] }], pipes: { "async": i3.AsyncPipe }, viewProviders: [
|
|
596
598
|
{
|
|
@@ -599,39 +601,37 @@ FsHtmlEditorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
|
|
|
599
601
|
useFactory: (ngForm) => ngForm,
|
|
600
602
|
},
|
|
601
603
|
], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
602
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
604
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: FsHtmlEditorComponent, decorators: [{
|
|
603
605
|
type: Component,
|
|
604
|
-
args: [{
|
|
605
|
-
selector: 'fs-html-editor',
|
|
606
|
-
templateUrl: 'html-editor.component.html',
|
|
607
|
-
styleUrls: ['html-editor.component.scss'],
|
|
608
|
-
providers: [
|
|
606
|
+
args: [{ selector: 'fs-html-editor', providers: [
|
|
609
607
|
{
|
|
610
608
|
provide: NG_VALUE_ACCESSOR,
|
|
611
609
|
useExisting: forwardRef(() => FsHtmlEditorComponent),
|
|
612
|
-
multi: true
|
|
610
|
+
multi: true,
|
|
613
611
|
},
|
|
614
612
|
{
|
|
615
613
|
provide: NG_VALIDATORS,
|
|
616
614
|
useExisting: forwardRef(() => FsHtmlEditorComponent),
|
|
617
|
-
multi: true
|
|
615
|
+
multi: true,
|
|
618
616
|
},
|
|
619
|
-
],
|
|
620
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
621
|
-
viewProviders: [
|
|
617
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, viewProviders: [
|
|
622
618
|
{
|
|
623
619
|
provide: ControlContainer,
|
|
624
620
|
deps: [[Optional, NgForm]],
|
|
625
621
|
useFactory: (ngForm) => ngForm,
|
|
626
622
|
},
|
|
627
|
-
],
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
623
|
+
], template: "<fs-label-field>\n <fs-label *ngIf=\"config.label\">{{config.label}}</fs-label>\n <div\n class=\"html-editor-container fs-html-editor-default\"\n [id]=\"containerID\"\n [ngClass]=\"{\n initialized: initialized,\n 'init-on-click': config.initOnClick\n }\">\n <ng-container *fsSkeleton=\"(froalaLoaded$ | async) !== false\"></ng-container>\n <div #elRef></div>\n\n <div class=\"bottom-line\"></div>\n <div class=\"disabled-line\"></div>\n </div>\n\n <fs-label-message>\n <div class=\"fs-form-message\">\n <div class=\"fs-form-hint\">{{hint}}</div>\n </div>\n </fs-label-message>\n</fs-label-field>\n", styles: [":host ::ng-deep .fr-box.fr-basic .fr-wrapper{border:0;border-bottom:1px solid #949494;margin-bottom:1px;background-color:transparent}:host ::ng-deep .fr-box.fr-basic .fr-element{padding:0;font-family:inherit;color:inherit;font-size:inherit;line-height:inherit;min-height:auto}:host ::ng-deep .fr-more-toolbar,:host ::ng-deep .fr-toolbar,:host ::ng-deep .fr-dropdown:after,:host ::ng-deep .fr-dropdown-menu .fr-dropdown-wrapper{transition:none!important}:host ::ng-deep .fr-toolbar-open .fr-more-toolbar{display:block}:host ::ng-deep .fr-more-toolbar{display:none}:host ::ng-deep .fr-toolbar.fr-top{position:sticky;z-index:2;border-radius:0;background-color:#fff}:host ::ng-deep .fr-toolbar.fr-top .fr-btn-grp{margin:0 20px 0 0}:host ::ng-deep .fr-toolbar.fr-top .fr-btn-grp:nth-child(1):after,:host ::ng-deep .fr-toolbar.fr-top .fr-btn-grp:nth-child(2):after{content:\"\";position:absolute;top:9px;height:30px;border-left:1px solid #e5e5e5;margin-left:10px}:host ::ng-deep .fr-toolbar.fr-top div:first-of-type:before{border:none}:host ::ng-deep .fr-toolbar.fr-top.fr-toolbar-open .fr-newline{height:auto}:host ::ng-deep .fr-toolbar.fr-top .fr-btn-grp:first-child{margin-left:0}:host ::ng-deep .fr-toolbar.fr-top.fr-top{border:0}:host ::ng-deep .fr-toolbar.fr-top .fr-newline{margin:0}:host ::ng-deep .fr-toolbar.fr-top .fr-more-toolbar{z-index:auto;display:flex;justify-content:center;padding-left:0!important}:host ::ng-deep .fr-toolbar.fr-top .fr-command.fr-btn{z-index:auto}:host ::ng-deep .fr-toolbar.fr-top .fr-command.fr-btn.fr-dropdown:after{right:3px}:host ::ng-deep .fr-toolbar.fr-top .fr-command.fr-btn.fr-dropdown.fr-selection span{margin-right:24px}:host ::ng-deep .fr-toolbar.fr-top .fr-command.fr-btn.fr-open{border-radius:4px;margin:4px 2px}:host ::ng-deep .fr-view ol,:host ::ng-deep .fr-view ul{list-style-position:unset}:host ::ng-deep .html-editor-container.init-on-click:not(.initialized) .fr-toolbar{display:none}:host.disabled ::ng-deep .fr-box.fr-basic{opacity:.5;pointer-events:none}:host.disabled ::ng-deep .fr-box.fr-basic .fr-wrapper{border:none}:host.disabled ::ng-deep .disabled-line{display:block}::ng-deep .fr-popup{z-index:1001!important}::ng-deep .fr-video-by-url-layer .fr-checkbox-line{display:none}.disabled-line{display:none;position:absolute;bottom:-1px;z-index:1;background-image:linear-gradient(90deg,rgba(0,0,0,.42) 0,rgba(0,0,0,.42) 33%,transparent 0);background-size:4px 100%;background-repeat:repeat-x;height:1px;width:100%}.bottom-line{opacity:0;transform-origin:50%;transform:scaleX(.5);transition:background-color .3s cubic-bezier(.55,0,.55,.2);width:100%;border-bottom:2px solid #949494;position:absolute;bottom:-1px;z-index:1}:host{position:relative;display:block}:host.focused .bottom-line{opacity:1;display:block;transform:scaleX(1);transition:transform .3s cubic-bezier(.25,.8,.25,1),opacity .1s cubic-bezier(.25,.8,.25,1),background-color .3s cubic-bezier(.25,.8,.25,1)}::ng-deep .fs-html-editor-mention-container{position:absolute;top:0;left:0;height:auto;max-height:300px;max-width:500px;overflow:auto;display:block;z-index:999999;box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f;border-bottom-left-radius:4px;border-bottom-right-radius:4px;background:#fff}::ng-deep .fs-html-editor-mention-container ul{margin:0;padding:0;list-style:none}::ng-deep .fs-html-editor-mention-container li{padding:0 16px;cursor:pointer;line-height:48px}::ng-deep .fs-html-editor-mention-container li.highlight,::ng-deep .fs-html-editor-mention-container li:hover{background:#F5F5F5}::ng-deep .fs-html-editor-mention-container li.no-match{cursor:default}\n"] }]
|
|
624
|
+
}], ctorParameters: function () {
|
|
625
|
+
return [{ type: undefined, decorators: [{
|
|
626
|
+
type: Optional
|
|
627
|
+
}, {
|
|
628
|
+
type: Inject,
|
|
629
|
+
args: [FS_HTML_EDITOR_CONFIG]
|
|
630
|
+
}] }, { type: Document, decorators: [{
|
|
631
|
+
type: Inject,
|
|
632
|
+
args: [DOCUMENT]
|
|
633
|
+
}] }, { type: i0.ChangeDetectorRef }, { type: FsFroalaLoaderService }];
|
|
634
|
+
}, propDecorators: { classFocused: [{
|
|
635
635
|
type: HostBinding,
|
|
636
636
|
args: ['class.focused']
|
|
637
637
|
}], elRef: [{
|
|
@@ -663,18 +663,18 @@ class FsHtmlEditorModule {
|
|
|
663
663
|
};
|
|
664
664
|
}
|
|
665
665
|
}
|
|
666
|
-
FsHtmlEditorModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
667
|
-
FsHtmlEditorModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "
|
|
666
|
+
FsHtmlEditorModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: FsHtmlEditorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
667
|
+
FsHtmlEditorModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: FsHtmlEditorModule, declarations: [FsHtmlEditorComponent], imports: [CommonModule,
|
|
668
668
|
FsSkeletonModule,
|
|
669
669
|
FsLabelModule,
|
|
670
670
|
FsHtmlRendererModule], exports: [FsHtmlEditorComponent] });
|
|
671
|
-
FsHtmlEditorModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
|
|
671
|
+
FsHtmlEditorModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: FsHtmlEditorModule, imports: [[
|
|
672
672
|
CommonModule,
|
|
673
673
|
FsSkeletonModule,
|
|
674
674
|
FsLabelModule,
|
|
675
675
|
FsHtmlRendererModule,
|
|
676
676
|
]] });
|
|
677
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
677
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: FsHtmlEditorModule, decorators: [{
|
|
678
678
|
type: NgModule,
|
|
679
679
|
args: [{
|
|
680
680
|
imports: [
|
|
@@ -999,4 +999,4 @@ class RealtimePlugin extends Plugin {
|
|
|
999
999
|
*/
|
|
1000
1000
|
|
|
1001
1001
|
export { ChecklistPlugin, CodePlugin, FS_HTML_EDITOR_CONFIG, FsHtmlEditorComponent, FsHtmlEditorModule, FsHtmlRendererComponent, FsHtmlRendererModule, MentionPlugin, ParagraphButtons, RealtimePlugin, RichButtons, ScreenRecordPlugin, TextButtons };
|
|
1002
|
-
//# sourceMappingURL=firestitch-html-editor.
|
|
1002
|
+
//# sourceMappingURL=firestitch-html-editor.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"firestitch-html-editor.mjs","sources":["../../src/app/modules/html-renderer/components/html-renderer/html-renderer.component.ts","../../src/app/modules/html-renderer/components/html-renderer/html-renderer.component.html","../../src/app/modules/html-renderer/fs-html-renderer.module.ts","../../src/app/modules/html-editor/injects/config.inject.ts","../../src/app/modules/html-editor/consts/paragraph-buttons.const.ts","../../src/app/modules/html-editor/consts/rich-buttons.const.ts","../../src/app/modules/html-editor/consts/text-buttons.const.ts","../../src/app/modules/html-editor/services/froala-loader.service.ts","../../src/app/modules/html-editor/components/html-editor/html-editor.component.ts","../../src/app/modules/html-editor/components/html-editor/html-editor.component.html","../../src/app/modules/html-editor/fs-html-editor.module.ts","../../src/app/modules/html-editor/classes/plugin.ts","../../src/app/modules/html-editor/plugins/mention.plugin.ts","../../src/app/modules/html-editor/plugins/checklist.plugin.ts","../../src/app/modules/html-editor/plugins/code.plugin.ts","../../src/app/modules/html-editor/plugins/screen-record.plugin.ts","../../src/app/modules/html-editor/plugins/realtime.plugin.ts","../../src/firestitch-html-editor.ts"],"sourcesContent":["import { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { ChangeDetectionStrategy, Component, Input, ChangeDetectorRef } from '@angular/core';\n\n\n@Component({\n selector: 'fs-html-renderer',\n templateUrl: 'html-renderer.component.html',\n styleUrls: ['html-renderer.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FsHtmlRendererComponent {\n\n @Input('html') public set setHtml(html) {\n this.trustedHtml = this.sanitized.bypassSecurityTrustHtml(html || '');\n this._cdRef.markForCheck();\n }\n\n public trustedHtml: SafeHtml;\n\n public constructor(\n private sanitized: DomSanitizer,\n private _cdRef: ChangeDetectorRef,\n ) { }\n\n}\n","<span class=\"fr-view fs-html-editor-default\" [innerHtml]=\"trustedHtml\"></span>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { FsHtmlRendererComponent } from './components/html-renderer/html-renderer.component';\n\n@NgModule({\n imports: [\n CommonModule,\n ],\n exports: [\n FsHtmlRendererComponent,\n ],\n declarations: [\n FsHtmlRendererComponent,\n ],\n})\nexport class FsHtmlRendererModule {\n}\n","import { InjectionToken } from '@angular/core';\n\nexport const FS_HTML_EDITOR_DEFAULT_CONFIG = new InjectionToken<any[]>('fs-html-editor.default-config');\nexport const FS_HTML_EDITOR_CONFIG = new InjectionToken<any[]>('fs-html-editor.config');\n","export const ParagraphButtons = [\n 'align',\n 'formatOL',\n 'formatUL',\n 'checklist',\n 'indent',\n 'outdent',\n 'lineHeight'\n];\n","export const RichButtons = [\n 'insertTable',\n 'insertImage',\n 'insertLink',\n 'insertVideo',\n];\n","export const TextButtons = [\n 'paragraphFormat',\n 'code',\n 'bold',\n 'italic',\n 'underline',\n 'strikeThrough',\n 'subscript',\n 'superscript',\n 'fontFamily',\n 'fontSize',\n 'textColor',\n 'backgroundColor',\n 'inlineClass',\n 'inlineStyle',\n 'clearFormatting',\n 'quote',\n];\n","import { Inject, Injectable, Optional } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\nimport { fsSourceLoader } from '@firestitch/common'\n\nimport { BehaviorSubject, combineLatest, Observable } from 'rxjs';\nimport { concatMap, map, shareReplay, tap } from 'rxjs/operators';\n\nimport { FS_HTML_EDITOR_CONFIG } from '../injects/config.inject';\nimport { FsHtmlEditorConfig } from '../interfaces/html-editor-config';\n\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FsFroalaLoaderService {\n\n private _FroalaEditor: unknown;\n\n private _froalaLoaded = new BehaviorSubject(false);\n private _froalaPluginsLoaded = new BehaviorSubject(false);\n private _sourceLoader = fsSourceLoader;\n\n private _loaded$ = combineLatest([this._froalaLoaded, this._froalaPluginsLoaded])\n .pipe(\n map(([FroalaReady, pluginsRead]) => {\n return pluginsRead && FroalaReady;\n }),\n shareReplay(1),\n );\n\n constructor(\n @Optional()\n @Inject(FS_HTML_EDITOR_CONFIG)\n private _defaultConfig: FsHtmlEditorConfig,\n @Inject(DOCUMENT)\n private _document: Document,\n ) {\n this._sourceLoader.setDocument(this._document);\n this._load();\n }\n\n public get loaded$(): Observable<boolean> {\n return this._loaded$;\n }\n\n public get FroalaEditor(): any {\n return this._FroalaEditor;\n }\n\n private _load() {\n const baseDir = '/assets/froala/';\n this._sourceLoader.registerResources({\n froala: [\n `${baseDir}js/froala_editor.min.js`,\n `${baseDir}css/froala_editor.pkgd.min.css`,\n ],\n froala_align: `${baseDir}js/plugins/align.min.js`,\n froala_colors: `${baseDir}js/plugins/colors.min.js`,\n froala_image: `${baseDir}js/plugins/image.min.js`,\n froala_link: `${baseDir}js/plugins/link.min.js`,\n froala_lists: `${baseDir}js/plugins/lists.min.js`,\n froala_paragraph_format: `${baseDir}js/plugins/paragraph_format.min.js`,\n froala_table: `${baseDir}js/plugins/table.min.js`,\n froala_url: `${baseDir}js/plugins/url.min.js`,\n froala_video: `${baseDir}js/plugins/video.min.js`,\n froala_quote: `${baseDir}js/plugins/quote.min.js`,\n froala_draggable: `${baseDir}js/plugins/draggable.min.js`,\n froala_font_size: `${baseDir}js/plugins/font_size.min.js`,\n froala_quick_insert: `${baseDir}js/plugins/quick_insert.min.js`,\n froala_line_height: `${baseDir}js/plugins/line_height.min.js`\n });\n\n this._sourceLoader.loadResource('froala')\n .pipe(\n tap(() => {\n this._FroalaEditor = (window as any).FroalaEditor;\n this._froalaDone();\n }),\n concatMap(() => {\n return this._loadPlugins();\n }),\n tap(() => {\n this._froalaPluginsDone();\n }),\n )\n .subscribe();\n }\n\n private _loadPlugins(): Observable<unknown> {\n const resources = this._defaultConfig\n .froalaPlugins\n .map((pluginName) => `froala_${pluginName}`);\n\n return this._sourceLoader.loadResources(resources);\n }\n\n private _froalaDone() {\n this._froalaLoaded.next(true);\n }\n\n private _froalaPluginsDone() {\n this._froalaPluginsLoaded.next(true);\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n forwardRef,\n HostBinding,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n ViewChild,\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlContainer,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n NgForm,\n ValidationErrors,\n Validator,\n} from '@angular/forms';\nimport { DOCUMENT } from '@angular/common';\n\nimport { guid } from '@firestitch/common';\nimport { FileProcessor, FsFile, FsFileProcessConfig } from '@firestitch/file';\n\nimport { BehaviorSubject, fromEventPattern, Observable, ReplaySubject, Subject } from 'rxjs';\nimport { distinctUntilChanged, filter, map, skip, startWith, switchMap, takeUntil, tap } from 'rxjs/operators';\n\nimport { merge } from 'lodash-es';\n\nimport { FS_HTML_EDITOR_CONFIG } from '../../injects/config.inject';\nimport { FsHtmlEditorConfig } from '../../interfaces/html-editor-config';\nimport { FsFroalaLoaderService } from '../../services/froala-loader.service';\n\nimport { Plugin } from './../../classes/plugin';\nimport { ParagraphButtons } from './../../consts/paragraph-buttons.const';\nimport { RichButtons } from './../../consts/rich-buttons.const';\nimport { TextButtons } from './../../consts/text-buttons.const';\nimport { PluginButton } from './../../interfaces/plugin-button';\n\n\n@Component({\n selector: 'fs-html-editor',\n templateUrl: './html-editor.component.html',\n styleUrls: ['./html-editor.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => FsHtmlEditorComponent),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => FsHtmlEditorComponent),\n multi: true,\n },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n viewProviders: [\n {\n provide: ControlContainer,\n deps: [[Optional, NgForm]],\n useFactory: (ngForm: NgForm) => ngForm,\n },\n ],\n})\nexport class FsHtmlEditorComponent implements OnInit, AfterViewInit, ControlValueAccessor, Validator, OnDestroy {\n\n @HostBinding('class.focused') public classFocused = false;\n\n @ViewChild('elRef') public elRef: ElementRef;\n\n @Input() public config: FsHtmlEditorConfig = {};\n @Input() public hint: string;\n\n @Input()\n @HostBinding('class.disabled')\n public disabled = false;\n\n public initialized = false;\n public readonly containerID = `fs-html-editor-${guid('xxx')}`;\n\n private _editor: any;\n private _html: string;\n private _initialize$ = new ReplaySubject();\n private _froalaReady$ = new BehaviorSubject(null);\n private _window: any = this._document.defaultView;\n private _destroy$ = new Subject();\n\n constructor(\n @Optional()\n @Inject(FS_HTML_EDITOR_CONFIG)\n private _defaultConfig,\n @Inject(DOCUMENT)\n private _document: Document,\n private _cdRef: ChangeDetectorRef,\n private _fr: FsFroalaLoaderService,\n ) { }\n\n public onChange = (data: any) => { };\n public onTouched = () => { };\n\n public get el(): any {\n return this.elRef.nativeElement;\n }\n\n public get html(): string {\n return this._html;\n }\n\n public get editor(): any {\n return this._editor;\n }\n\n public get froalaLoaded$(): Observable<boolean> {\n return this._fr.loaded$;\n }\n\n public ngOnInit(): void {\n this.config = this.config || {};\n this.config.autofocus = this.config.autofocus && (!this.config.disabled || !this.disabled);\n this._listenLazyInit();\n }\n\n public ngAfterViewInit() {\n this._initialize$.next();\n }\n\n public hasContent() {\n const el = document.createElement('div');\n\n if (el.querySelector('img')) {\n return true;\n }\n\n el.innerHTML = this._html;\n\n return !!el.innerText.length;\n }\n\n public initialize(options: any = {}) {\n const config = this._createConfig();\n this._initPlugins(config);\n this._initButtons(config);\n this._editor = new this._fr.FroalaEditor(this.el, this._createOptions(), () => {\n this._froalaReady$.next({ config, options });\n });\n }\n\n public updateSize() {\n // Hack: To trigger the toolbar button size modes\n window.dispatchEvent(new Event('resize'));\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n const err: any = {};\n if (this.config.maxLength && this._html) {\n const maxLength = this.config.maxLength;\n const length = this._html.length;\n if (length > maxLength) {\n err.maxLengthError = `Must be ${maxLength} characters or fewer. You entered ${length} characters.`;\n }\n }\n\n return Object.keys(err).length ? err : null;\n }\n\n public focus(options?: { cursorPosition?: 'start' | 'end' }) {\n options = options ? options : {};\n\n if (options.cursorPosition === 'end') {\n this.editor.selection.setAtEnd(this.editor.$el.get(0));\n } else {\n this.editor.selection.setAtStart(this.editor.$el.get(0));\n }\n\n this.editor.selection.restore();\n\n const elSelection = this.editor.selection.element();\n if (elSelection) {\n elSelection.scrollIntoView({ block: 'center' });\n }\n }\n\n public clear() {\n this.writeValue('');\n }\n\n public disable() {\n this.disabled = true;\n }\n\n public setHtml(html) {\n this.writeValue(html);\n }\n\n public writeValue(html: string): void {\n this._html = html || '';\n\n if (Array.isArray(this._html)) {\n this._html = this._html.pop();\n }\n\n this._html = this._html\n .replace(/<(li)>\\s?<(div)>/g, '<li>')\n .replace(/<\\/(div)><\\/(li)>/g, '</li>');\n\n if (this.editor && this.editor.html) {\n try {\n this.editor.html.set(this._html);\n } catch (e) {\n }\n }\n\n this._cdRef.markForCheck();\n }\n\n public registerOnChange(fn: (data: any) => void): void {\n this.onChange = fn;\n }\n\n public registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n public ngOnDestroy() {\n this._initialize$.complete();\n this._destroy$.next();\n this._destroy$.complete();\n this.destroy();\n }\n\n public destroy() {\n if (this.editor) {\n this.editor.destroy();\n }\n\n this.initialized = false;\n this._cdRef.markForCheck();\n this.el.innerHTML = '';\n }\n\n private _processImageUpload(blob) {\n const processor = new FileProcessor();\n const file = new FsFile(blob);\n\n const config: FsFileProcessConfig = {\n orientate: true,\n quality: this.config.image.quality,\n format: this.config.image.format as any,\n maxWidth: this.config.image.width,\n maxHeight: this.config.image.height,\n minWidth: this.config.image.minWidth,\n minHeight: this.config.image.minHeight,\n };\n\n return processor.processFile(file, config)\n .pipe(\n switchMap((fsFile: FsFile) => {\n return this.config.image.upload(fsFile.file);\n }),\n );\n }\n\n private _createConfig(): FsHtmlEditorConfig {\n return merge({ froalaConfig: {} }, this._defaultConfig, this.config);\n }\n\n private _change(html): void {\n this._html = html;\n this.onChange(html);\n }\n\n private _initButtons(config: FsHtmlEditorConfig) {\n (config.buttons || [])\n .forEach((button) => {\n /*\n Svg Keys:\n [\"add\", \"advancedImageEditor\", \"alignCenter\", \"alignJustify\", \"alignLeft\", \"alignRight\",\n \"anchors\", \"back\", \"backgroundColor\", \"blockquote\", \"bold\", \"cellBackground\",\n \"cellBorderColor\", \"cellOptions\", \"cellStyle\", \"clearFormatting\", \"close\", \"codeView\",\n \"cogs\", \"columns\", \"editLink\", \"exitFullscreen\", \"fontAwesome\", \"fontFamily\",\n \"fontSize\", \"fullscreen\", \"help\", \"horizontalLine\", \"imageAltText\", \"imageCaption\",\n \"imageClass\", \"imageDisplay\", \"imageManager\", \"imageSize\", \"indent\", \"inlineClass\",\n \"inlineStyle\", \"insertEmbed\", \"insertFile\", \"insertImage\", \"insertLink\", \"insertMore\",\n \"insertTable\", \"insertVideo\", \"upload\", \"italic\", \"search\", \"lineHeight\", \"linkStyles\",\n \"mention\", \"more\", \"openLink\", \"orderedList\", \"outdent\", \"pageBreaker\",\n \"paragraphFormat\", \"paragraphMore\", \"paragraphStyle\", \"pdfExport\", \"print\",\n \"redo\", \"removeTable\", \"remove\", \"replaceImage\", \"row\", \"selectAll\", \"smile\",\n \"spellcheck\", \"star\", \"strikeThrough\", \"subscript\", \"superscript\", \"symbols\", \"tags\",\n \"tableHeader\", \"tableStyle\", \"textColor\", \"textMore\", \"underline\", \"undo\", \"unlink\",\n \"unorderedList\", \"verticalAlignBottom\", \"verticalAlignMiddle\", \"verticalAlignTop\"]\n */\n\n if (button.svgKey) {\n this._fr.FroalaEditor.DefineIcon(button.name, { SVG_KEY: button.svgKey });\n }\n\n this._fr.FroalaEditor.RegisterCommand(button.name, {\n title: button.title,\n focus: button.focus ?? true,\n undo: button.undo ?? true,\n refreshAfterCallback: button.refreshAfterCallback ?? true,\n callback() {\n button.click(this);\n },\n });\n });\n }\n\n private _initPlugins(config) {\n (config.plugins || []).forEach((plugin: Plugin) => {\n this._fr.FroalaEditor.PLUGINS[plugin.config.name] = function (editor) {\n plugin.editor = editor;\n plugin.initialize();\n\n return plugin;\n };\n\n (plugin.config.buttons || []).forEach((button: PluginButton) => {\n this._fr.FroalaEditor.DefineIcon(button.name, {\n NAME: button.name,\n PATH: button.svgPath,\n });\n\n this._fr.FroalaEditor.RegisterCommand(button.name, {\n icon: button.name,\n title: button.tooltip,\n undo: button.undo,\n focus: button.focus,\n showOnMobile: button.showOnMobile,\n refreshAfterCallback: button.refreshAfterCallback,\n callback() {\n if (button.click) {\n button.click(this);\n }\n },\n refresh(button) {\n if (button.refresh) {\n button.refresh(this, button);\n }\n },\n });\n });\n\n });\n }\n\n private _createOptions() {\n const config = this._createConfig();\n\n return merge(\n // For some reason editor store somewhere pointer on default config object and dublicate options each time on init\n // Extra merge level fixed this problem and allow to init config properly without legacy data\n {},\n {\n shortcutsEnabled: ['show', 'bold', 'italic', 'underline', 'indent', 'outdent', 'undo', 'redo', 'insertImage', 'createLink'],\n key: config.activationKey,\n placeholderText: config.placeholder,\n linkAlwaysBlank: true,\n tabSpaces: 2,\n typingTimer: 250,\n tooltips: false,\n wordPasteModal: false,\n imageDefaultWidth: 0,\n imageDefaultAlign: 'left',\n quickInsertEnabled: false,\n scrollableContainer: `#${this.containerID}`,\n paragraphDefaultSelection: 'Format',\n videoUpload: false,\n imagePaste: !!config.image?.upload,\n imageUpload: !!config.image?.upload,\n paragraphFormat: {\n N: 'Normal',\n H1: 'Heading 1',\n H2: 'Heading 2',\n H3: 'Heading 3',\n H4: 'Heading 4',\n BLOCKQUOTE: 'Quote',\n },\n lineHeights: {\n Default: '',\n 0.5: '0.5',\n Single: '1',\n 1.15: '1.15',\n 1.5: '1.5',\n Double: '2',\n },\n paragraphFormatSelection: true,\n toolbarButtonsXS: {\n moreText: {\n buttons: TextButtons,\n buttonsVisible: 1,\n },\n moreParagraph: {\n buttons: ParagraphButtons,\n buttonsVisible: 2,\n },\n moreRich: {\n buttons: RichButtons,\n buttonsVisible: 0,\n },\n },\n toolbarButtons: {\n moreText: {\n buttons: TextButtons,\n buttonsVisible: 3,\n },\n moreParagraph: {\n buttons: ParagraphButtons,\n buttonsVisible: 5,\n },\n moreRich: {\n buttons: RichButtons,\n buttonsVisible: 3,\n },\n },\n },\n config.froalaConfig,\n );\n }\n\n private _listenLazyInit() {\n // must be there to cleanup https://github.com/microsoft/monaco-editor/issues/827\n // to prevent conflicts with text-editor\n this._window.define = null;\n\n this.froalaLoaded$\n .pipe(\n filter((ready) => ready),\n switchMap(() => this._initialize$),\n tap(() => {\n const selection: any = window.getSelection();\n const options: any = {};\n if (selection.baseNode) {\n options.selection = {\n node: selection.baseNode.nodeValue,\n offset: selection.baseOffset,\n };\n }\n this.initialize(options);\n }),\n switchMap(() => this._froalaReady$),\n filter((data) => !!data),\n tap(({ config, options }) => {\n this._setupFroala(config, options);\n }),\n )\n .subscribe();\n }\n\n private _contentChanged(): void {\n const editorHTML = this._editor.html.get();\n\n if (this.html !== editorHTML) {\n this._change(editorHTML);\n }\n }\n\n private _setupFroala(config: FsHtmlEditorConfig, options: any): void {\n this._cdRef.markForCheck();\n\n this.setHtml(this._html);\n\n if (config.disabled) {\n this.disable();\n }\n\n if (config.froalaConfig.events) {\n if (config.froalaConfig.events.initialized) {\n config.froalaConfig.events.initialized();\n }\n }\n\n this._editor.events.on('focus', () => {\n this.classFocused = true;\n this._cdRef.markForCheck();\n });\n\n this._editor.events.on('blur', () => {\n this.classFocused = false;\n this._cdRef.markForCheck();\n });\n\n this._editor.events.on('click', () => {\n if (this.config.initOnClick && !this.initialized) {\n this.initialized = true;\n this._cdRef.markForCheck();\n }\n });\n\n fromEventPattern(\n (handler) => {\n this._editor.events.on('contentChanged', handler);\n },\n () => { },\n )\n .pipe(\n startWith(this._html),\n map(() => this.editor.html.get()),\n distinctUntilChanged(),\n skip(1),\n )\n .subscribe(() => {\n this._contentChanged();\n });\n\n this._editor.events.on('paste.afterCleanup', (html) => {\n const div = document.createElement('div');\n div.innerHTML = html;\n div.querySelectorAll('*')\n .forEach((el) => {\n for (let i = 0; i < el.attributes.length; i++) {\n const name = el.attributes[0].name;\n if (name !== 'href') {\n el.removeAttribute(name);\n }\n }\n });\n\n return div.innerHTML;\n });\n\n this._editor.events.on('keydown', () => {\n this.onTouched();\n });\n\n if (this.config.image && this.config.image.upload) {\n this._editor.events.on('image.beforePasteUpload', (image) => {\n\n fetch(image.getAttribute('src'))\n .then((res) => {\n res.blob()\n .then((blob) => {\n this._processImageUpload(blob)\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe((url) => {\n image.setAttribute('src', url);\n image.removeAttribute('data-fr-image-pasted');\n\n this._contentChanged();\n });\n });\n });\n\n return false;\n });\n\n this._editor.events.on('image.beforeUpload', (blobs) => {\n this._processImageUpload(blobs[0])\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe((url) => {\n this.editor.image.insert(url, null, null, this.editor.image.get());\n });\n\n return false;\n });\n }\n\n if (this.el.querySelector('.fr-second-toolbar')) {\n this.el.querySelector('.fr-second-toolbar').remove();\n }\n\n if (this.config.autofocus && !this.config.initOnClick) {\n this.focus();\n }\n }\n}\n","<fs-label-field>\n <fs-label *ngIf=\"config.label\">{{config.label}}</fs-label>\n <div\n class=\"html-editor-container fs-html-editor-default\"\n [id]=\"containerID\"\n [ngClass]=\"{\n initialized: initialized,\n 'init-on-click': config.initOnClick\n }\">\n <ng-container *fsSkeleton=\"(froalaLoaded$ | async) !== false\"></ng-container>\n <div #elRef></div>\n\n <div class=\"bottom-line\"></div>\n <div class=\"disabled-line\"></div>\n </div>\n\n <fs-label-message>\n <div class=\"fs-form-message\">\n <div class=\"fs-form-hint\">{{hint}}</div>\n </div>\n </fs-label-message>\n</fs-label-field>\n","import { CommonModule } from '@angular/common';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { FsLabelModule } from '@firestitch/label';\nimport { FsSkeletonModule } from '@firestitch/skeleton';\n\nimport { FsHtmlRendererModule } from '../html-renderer/fs-html-renderer.module';\nimport { FsHtmlEditorComponent } from './components/html-editor/html-editor.component';\nimport { FroalaPlugin } from './enums/default-plugin.enum';\nimport { FS_HTML_EDITOR_CONFIG, FS_HTML_EDITOR_DEFAULT_CONFIG } from './injects/config.inject';\nimport { FsHtmlEditorConfig } from './interfaces/html-editor-config';\n\n\n@NgModule({\n imports: [\n CommonModule,\n\n FsSkeletonModule,\n FsLabelModule,\n FsHtmlRendererModule,\n ],\n exports: [\n FsHtmlEditorComponent,\n ],\n declarations: [\n FsHtmlEditorComponent,\n ],\n})\nexport class FsHtmlEditorModule {\n static forRoot(config: FsHtmlEditorConfig = {}): ModuleWithProviders<FsHtmlEditorModule> {\n return {\n ngModule: FsHtmlEditorModule,\n providers: [\n { provide: FS_HTML_EDITOR_DEFAULT_CONFIG, useValue: config },\n {\n provide: FS_HTML_EDITOR_CONFIG,\n useFactory: FsHtmlEditorConfigFactory,\n deps: [FS_HTML_EDITOR_DEFAULT_CONFIG]\n }\n ]\n };\n }\n}\n\nexport function FsHtmlEditorConfigFactory(config: FsHtmlEditorConfig) {\n return {\n froalaPlugins: [\n FroalaPlugin.Align,\n FroalaPlugin.Colors,\n FroalaPlugin.Image,\n FroalaPlugin.Link,\n FroalaPlugin.Lists,\n FroalaPlugin.ParagraphFormat,\n FroalaPlugin.Quote,\n FroalaPlugin.Table,\n FroalaPlugin.Url,\n FroalaPlugin.Video,\n FroalaPlugin.Draggable,\n FroalaPlugin.FontSize,\n FroalaPlugin.LineHeight,\n ],\n ...config\n };\n}\n","// import { FroalaEditor } from 'froala-editor';\nimport { PluginConfig } from './../interfaces/plugin-config';\n\nexport class Plugin {\n\n public config: PluginConfig;\n public editor: any;\n\n public initialize() {}\n public destroy() {}\n\n}\n","import { debounce } from 'lodash-es';\nimport Tribute, { TributeItem } from 'tributejs';\n\nimport { MentionPluginConfig } from './configs/mention-plugin.config';\n\nimport { Plugin } from '../classes/plugin';\n\nimport { guid } from '@firestitch/common';\n\n\nexport class MentionPlugin extends Plugin {\n\n private static _currentGuid = null;\n private static _tributes = [];\n private _tribute;\n private _guid = guid();\n\n public constructor(public config: MentionPluginConfig) {\n super();\n this.config = {\n ...config,\n buttons: [\n {\n name: config.name,\n tooltip: config.tooltip,\n svgPath: config.iconPath,\n click: (editor) => {\n this._closeAll();\n this._tribute.showMenuForCollection(editor.el);\n }\n }\n ]\n };\n\n this._tribute = new Tribute({\n values: debounce(this._loadValues.bind(this), 200),\n searchOpts: {\n pre: '',\n post: '',\n skip: true\n },\n containerClass: `fs-html-editor-mention-container ${this.config.containerClass || ''}`,\n itemClass: `fs-html-editor-mention-menu-item ${this.config.menuItemClass || ''}`,\n trigger: this.config.trigger,\n allowSpaces: true,\n menuItemTemplate: (item: TributeItem<any>) => {\n return this.config.menuItemTemplate(item.original);\n },\n selectTemplate: (item: TributeItem<any>) => {\n const template = this.config.selectedTemplate(item.original);\n\n let p = document.createElement('p');\n p.innerHTML = template;\n\n let node = p.firstElementChild;\n if (!node) {\n node = document.createElement('span');\n node.innerHTML = template;\n }\n\n node.setAttribute('contenteditable', 'false');\n node.classList.add('fr-deletable');\n\n return node.outerHTML;\n },\n });\n\n MentionPlugin._tributes.push(this._tribute);\n }\n\n public initialize() {\n this._tribute.attach(this.editor.el);\n this.editor.events.on('keydown', (e) => {\n if (e.key === 'Enter' && this._tribute.isActive) {\n return false;\n }\n }, true);\n\n \n this.editor.el.addEventListener(\"tribute-replaced\", this.selected);\n }\n\n public selected = (event) => {\n if(this.config.selected) {\n if(MentionPlugin._currentGuid === this._guid) {\n this.config.selected(event.detail.item.original);\n }\n }\n }\n\n public destroy() {\n this.editor.el.removeEventListener(\"tribute-replaced\", this.selected);\n }\n\n private _closeAll() {\n MentionPlugin._tributes.forEach((tribute) => {\n if (tribute.menu) {\n tribute.hideMenu();\n }\n });\n }\n\n private _loadValues(keyword, cb) {\n MentionPlugin._currentGuid = this._guid;\n return this.config.fetch(keyword)\n .subscribe((data) => {\n cb(data);\n });\n }\n}\n","import { Plugin } from '../classes/plugin';\n\nimport { PluginConfig } from './../interfaces/plugin-config';\n\n\nexport class ChecklistPlugin extends Plugin {\n\n public constructor(public config: PluginConfig = { name: 'checklist' }) {\n super();\n this.config = {\n ...config,\n name: 'checklist',\n buttons: [\n {\n name: 'checklist',\n svgPath: 'M8.4,10.3l-1.2,1.2l4,4L20,6.7l-1.2-1.2l-7.6,7.6L8.4,10.3z M18.2,18.2H5.8V5.8h8.9V4H5.8C4.8,4,4,4.8,4,5.8v12.4c0,1,0.8,1.8,1.8,1.8h12.4c1,0,1.8-0.8,1.8-1.8v-7.1h-1.8V18.2z',\n click: (editor) => {\n editor.html.insert('<ul class=\"checklist\"><li></li></ul>');\n }\n }\n ]\n };\n }\n\n public initialize() {\n this.editor.events.on('click', (e) => {\n const li = e.target;\n if (li.nodeName === 'LI' && e.offsetX < 0) {\n\n const items = [li, ...li.querySelectorAll('li')];\n\n if (li.classList.contains('checked')) {\n items.forEach((item) => {\n item.classList.remove('checked');\n });\n } else {\n items.forEach((item) => {\n item.classList.add('checked');\n });\n }\n }\n\n }, false);\n }\n\n}\n","import { Plugin } from '../classes/plugin';\n\nimport { PluginConfig } from './../interfaces/plugin-config';\n\n\nexport class CodePlugin extends Plugin {\n\n public constructor(public config: PluginConfig = { name: 'code' }) {\n super();\n this.config = {\n ...config,\n name: 'code',\n buttons: [\n {\n name: 'code',\n svgPath: 'M8.9,7.3L4.2,12l4.7,4.7l1.1-1.1L6.4,12L10,8.4L8.9,7.3z M15.1,7.3L14,8.4l3.6,3.6L14,15.6l1.1,1.1l4.7-4.7L15.1,7.3z',\n click: (editor) => {\n const node = editor.selection.get();\n const codeEl = this._getCodeEl(node.baseNode);\n if (codeEl) {\n codeEl.classList.remove('code');\n } else {\n editor.html.insert('<p class=\"code\">' + editor.selection.get().toString().replace(/\\n{1,}/g,'<br>') + '</p>');\n }\n }\n }\n ]\n };\n }\n\n public initialize() {\n this.editor.events.on('keydown', (e) => {\n if (e.keyCode === 13) {\n const selection = this.editor.selection.get();\n\n if (selection && this._getCodeEl(selection.baseNode)) {\n e.preventDefault();\n e.stopPropagation();\n e.stopImmediatePropagation();\n let br = '<br>';\n const base = selection.baseNode;\n if (base.nodeName === '#text' && selection.baseOffset === base.length) {\n\n if (!(base.nextSibling && base.nextSibling.nodeName === 'BR')) {\n br += '<br>';\n }\n } else {\n const el: any = Array.from(base.childNodes).splice(selection.baseOffset - 1, 1).pop();\n if (el && el.nodeName !== 'BR') {\n br += '<br>';\n }\n }\n\n this.editor.html.insert(br);\n return false;\n }\n }\n }, true);\n }\n\n public destroy() {}\n\n private _getCodeEl(el) {\n\n if (el) {\n if (el.classList && el.classList.contains('code')) {\n return el;\n }\n\n if (el.parentElement) {\n return this._getCodeEl(el.parentElement);\n }\n }\n\n return null;\n }\n}\n","import { ScreenRecordPluginConfig } from './configs/screen-record-plugin.config';\nimport { Plugin } from '../classes/plugin';\n\n\ndeclare var MediaRecorder: any;\n\nexport class ScreenRecordPlugin extends Plugin {\n\n private _activeEl;\n\n public constructor(public config: ScreenRecordPluginConfig = {}) {\n super();\n\n this.config = {\n ...config,\n name: config.name || 'screenRecord',\n buttons: [\n {\n name: 'screenRecord',\n svgPath: `M14.7,7.7v6.1H7.1V7.7H14.7 M16.3,9.6V6.9c0-0.4-0.3-0.8-0.8-0.8H6.4c-0.4,0-0.8,0.3-0.8,0.8v7.6c0,0.4,0.3,0.8,0.8,0.8h9.1c0.4,0,0.8-0.3,0.8-0.8v-2.7l1.7,1.7c0.3,0.3,0.8,0.3,1.1,0c0.1-0.1,0.2-0.3,0.2-0.5V8.4c0-0.4-0.3-0.8-0.8-0.8\n\tc-0.2,0-0.4,0.1-0.5,0.2L16.3,9.6z M21.5,1.6H2.9c-0.7,0-1.3,0.7-1.3,1.6v14.6c0,0.9,0.6,1.6,1.3,1.6h7.6v1.1l-5,1c-0.2,0-0.4,0.3-0.4,0.6c0,0.3,0.2,0.4,0.4,0.4c0,0,0,0,0.1,0l5.3-1h2.6l5.3,1c0,0,0,0,0.1,0c0.2,0,0.4-0.2,0.4-0.4\n c0-0.3-0.1-0.6-0.4-0.6l-5-1v-1.1h7.6c0.7,0,1.3-0.7,1.3-1.6V3.2C22.9,2.3,22.3,1.6,21.5,1.6z M21.1,17.3H3.3V3.7h17.8L21.1,17.3L21.1,17.3z`,\n tooltip: 'Screen Record',\n click: (editor) => {\n\n (<any>navigator).mediaDevices.getDisplayMedia({ video: true })\n .then((stream) => {\n const chunks = [];\n const options = { mimeType: 'video/webm; codecs=vp9' };\n let mediaRecorder = new MediaRecorder(stream, options);\n\n stream.addEventListener('inactive', (e) => {\n mediaRecorder.stop();\n mediaRecorder = null;\n stream.getTracks().forEach((track) => track.stop());\n stream = null;\n\n const blob = new Blob(chunks, { type: 'video/webm' });\n config.upload(blob)\n .subscribe((url) => {\n editor.html.insert(`<span class=\"fr-screen-record fr-deletable fr-draggable\"><video controls style=\"max-width:${config.maxWidth}\"><source src=\"${url}\" type=\"video/webm\"></video></span>`);\n });\n });\n\n mediaRecorder.addEventListener('dataavailable', (event) => {\n if (event.data && event.data.size > 0) {\n chunks.push(event.data);\n }\n });\n\n mediaRecorder.start(10);\n })\n .catch((e) => { });\n }\n }\n ]\n };\n }\n\n public async initialize() {\n const FroalaEditor = (window as any).FroalaEditor;\n\n this.editor.events.on('mouseup', (e) => {\n const el = this._getEl(e.target);\n\n if (el) {\n this.editor.popups.hideAll();\n this._activeEl = el;\n this._showPopup(el);\n }\n });\n\n FroalaEditor.POPUP_TEMPLATES[\"screenRecordPlugin.popup\"] = '[_BUTTONS_]';\n\n FroalaEditor.DefineIcon('popupClose', { NAME: 'trash', SVG_KEY: 'remove' });\n FroalaEditor.RegisterCommand('popupClose', {\n title: 'Remove',\n undo: false,\n focus: false,\n callback: () => {\n if (this._activeEl) {\n this._activeEl.remove();\n }\n }\n });\n }\n\n private _createPopup() {\n\n const template = {\n buttons: `<div class=\"fr-buttons\">${this.editor.button.buildList(['popupClose'])}</div>`,\n };\n\n return this.editor.popups.create('screenRecordPlugin.popup', template);\n }\n\n private _showPopup (el) {\n var $popup = this.editor.popups.get('screenRecordPlugin.popup');\n\n if (!$popup) {\n $popup = this._createPopup();\n }\n\n this.editor.popups.setContainer('screenRecordPlugin.popup', this.editor.$(el));\n\n const left = el.offsetLeft + el.offsetWidth / 2;\n\n this.editor.popups.show('screenRecordPlugin.popup', left, null);\n }\n\n private _getEl(el) {\n if (el && el.classList) {\n if (el.classList.contains('fr-screen-record'))\n return el;\n\n return this._getEl(el.parentNode);\n }\n }\n}\n","import { PluginConfig } from '../interfaces/plugin-config';\n\nimport { Plugin } from '../classes/plugin';\n\n\nexport class RealtimePlugin extends Plugin {\n\n public constructor(public config: PluginConfig = { name: 'realtime' }) {\n super();\n this.config = {\n ...config,\n name: 'realtime',\n };\n }\n\n public initialize() {\n\n this.editor.events.on('click', (e) => {\n\n }, false);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.FsFroalaLoaderService"],"mappings":"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"}
|