@firestitch/html-editor 12.4.2 → 12.5.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/app/modules/html-editor/services/froala-loader.service.d.ts +1 -2
- package/bundles/firestitch-html-editor.umd.js +52 -148
- package/bundles/firestitch-html-editor.umd.js.map +1 -1
- package/esm2015/app/modules/html-editor/plugins/screen-record.plugin.js +1 -4
- package/esm2015/app/modules/html-editor/services/froala-loader.service.js +28 -25
- package/fesm2015/firestitch-html-editor.js +29 -116
- package/fesm2015/firestitch-html-editor.js.map +1 -1
- package/package.json +1 -1
- package/app/modules/html-editor/utils/loader.d.ts +0 -7
- package/esm2015/app/modules/html-editor/utils/loader.js +0 -90
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { Inject, Injectable, Optional } from '@angular/core';
|
|
2
2
|
import { DOCUMENT } from '@angular/common';
|
|
3
|
+
import { fsSourceLoader } from '@firestitch/common';
|
|
3
4
|
import { BehaviorSubject, combineLatest } from 'rxjs';
|
|
4
5
|
import { concatMap, map, shareReplay, tap } from 'rxjs/operators';
|
|
5
6
|
import { FS_HTML_EDITOR_CONFIG } from '../injects/config.inject';
|
|
6
|
-
import { resourceLoaderFactory } from '../utils/loader';
|
|
7
7
|
import * as i0 from "@angular/core";
|
|
8
8
|
export class FsFroalaLoaderService {
|
|
9
9
|
constructor(_defaultConfig, _document) {
|
|
@@ -11,35 +11,42 @@ export class FsFroalaLoaderService {
|
|
|
11
11
|
this._document = _document;
|
|
12
12
|
this._froalaLoaded = new BehaviorSubject(false);
|
|
13
13
|
this._froalaPluginsLoaded = new BehaviorSubject(false);
|
|
14
|
-
this.
|
|
14
|
+
this._sourceLoader = fsSourceLoader;
|
|
15
15
|
this._loaded$ = combineLatest([this._froalaLoaded, this._froalaPluginsLoaded])
|
|
16
16
|
.pipe(map(([FroalaReady, pluginsRead]) => {
|
|
17
17
|
return pluginsRead && FroalaReady;
|
|
18
18
|
}), shareReplay(1));
|
|
19
|
-
|
|
20
|
-
if (this._defaultConfig.assetsJSPath) {
|
|
21
|
-
this._resourceLoader.setResourceBase(this._defaultConfig.assetsJSPath);
|
|
22
|
-
}
|
|
23
|
-
if (this._defaultConfig.assetsCSSPath) {
|
|
24
|
-
this._resourceLoader.setStylesBase(this._defaultConfig.assetsCSSPath);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
19
|
+
this._sourceLoader.setDocument(this._document);
|
|
27
20
|
this._load();
|
|
28
21
|
}
|
|
29
22
|
get loaded$() {
|
|
30
23
|
return this._loaded$;
|
|
31
24
|
}
|
|
32
|
-
get ready() {
|
|
33
|
-
return this._froalaLoaded.getValue() && this._froalaPluginsLoaded.getValue();
|
|
34
|
-
}
|
|
35
25
|
get FroalaEditor() {
|
|
36
26
|
return this._FroalaEditor;
|
|
37
27
|
}
|
|
38
28
|
_load() {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
29
|
+
this._sourceLoader.registerResources({
|
|
30
|
+
froala: [
|
|
31
|
+
'/assets/js/froala/froala_editor.min.js',
|
|
32
|
+
'/assets/css/froala_editor.pkgd.min.css',
|
|
33
|
+
],
|
|
34
|
+
froala_align: '/assets/js/froala/plugins/align.min.js',
|
|
35
|
+
froala_colors: '/assets/js/froala/plugins/colors.min.js',
|
|
36
|
+
froala_image: '/assets/js/froala/plugins/image.min.js',
|
|
37
|
+
froala_link: '/assets/js/froala/plugins/link.min.js',
|
|
38
|
+
froala_lists: '/assets/js/froala/plugins/lists.min.js',
|
|
39
|
+
froala_paragraph_format: '/assets/js/froala/plugins/paragraph_format.min.js',
|
|
40
|
+
froala_table: '/assets/js/froala/plugins/table.min.js',
|
|
41
|
+
froala_url: '/assets/js/froala/plugins/url.min.js',
|
|
42
|
+
froala_video: '/assets/js/froala/plugins/video.min.js',
|
|
43
|
+
froala_quote: '/assets/js/froala/plugins/quote.min.js',
|
|
44
|
+
froala_draggable: '/assets/js/froala/plugins/draggable.min.js',
|
|
45
|
+
froala_font_size: '/assets/js/froala/plugins/font_size.min.js',
|
|
46
|
+
froala_quick_insert: '/assets/js/froala/plugins/quick_insert.min.js',
|
|
47
|
+
froala_line_height: '/assets/js/froala/plugins/line_height.min.js'
|
|
48
|
+
});
|
|
49
|
+
this._sourceLoader.loadResource('froala')
|
|
43
50
|
.pipe(tap(() => {
|
|
44
51
|
this._FroalaEditor = window.FroalaEditor;
|
|
45
52
|
this._froalaDone();
|
|
@@ -51,14 +58,10 @@ export class FsFroalaLoaderService {
|
|
|
51
58
|
.subscribe();
|
|
52
59
|
}
|
|
53
60
|
_loadPlugins() {
|
|
54
|
-
const
|
|
61
|
+
const resources = this._defaultConfig
|
|
55
62
|
.froalaPlugins
|
|
56
|
-
.
|
|
57
|
-
|
|
58
|
-
acc.push(import$);
|
|
59
|
-
return acc;
|
|
60
|
-
}, []);
|
|
61
|
-
return combineLatest(imports);
|
|
63
|
+
.map((pluginName) => `froala_${pluginName}`);
|
|
64
|
+
return this._sourceLoader.loadResources(resources);
|
|
62
65
|
}
|
|
63
66
|
_froalaDone() {
|
|
64
67
|
this._froalaLoaded.next(true);
|
|
@@ -83,4 +86,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
|
|
|
83
86
|
type: Inject,
|
|
84
87
|
args: [DOCUMENT]
|
|
85
88
|
}] }]; } });
|
|
86
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
89
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvYWxhLWxvYWRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL2h0bWwtZWRpdG9yL3NlcnZpY2VzL2Zyb2FsYS1sb2FkZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUVuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUNsRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7O0FBT2pFLE1BQU0sT0FBTyxxQkFBcUI7SUFnQmhDLFlBR1UsY0FBa0MsRUFFbEMsU0FBbUI7UUFGbkIsbUJBQWMsR0FBZCxjQUFjLENBQW9CO1FBRWxDLGNBQVMsR0FBVCxTQUFTLENBQVU7UUFqQnJCLGtCQUFhLEdBQUcsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0MseUJBQW9CLEdBQUcsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEQsa0JBQWEsR0FBRyxjQUFjLENBQUM7UUFFL0IsYUFBUSxHQUFHLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7YUFDOUUsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxFQUFFLEVBQUU7WUFDakMsT0FBTyxXQUFXLElBQUksV0FBVyxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxFQUNGLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDZixDQUFDO1FBU0YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNmLENBQUM7SUFFRCxJQUFXLE9BQU87UUFDaEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUFXLFlBQVk7UUFDckIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFFTyxLQUFLO1FBQ1gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQztZQUNuQyxNQUFNLEVBQUU7Z0JBQ04sd0NBQXdDO2dCQUN4Qyx3Q0FBd0M7YUFDekM7WUFDRCxZQUFZLEVBQUUsd0NBQXdDO1lBQ3RELGFBQWEsRUFBRSx5Q0FBeUM7WUFDeEQsWUFBWSxFQUFFLHdDQUF3QztZQUN0RCxXQUFXLEVBQUUsdUNBQXVDO1lBQ3BELFlBQVksRUFBRSx3Q0FBd0M7WUFDdEQsdUJBQXVCLEVBQUUsbURBQW1EO1lBQzVFLFlBQVksRUFBRSx3Q0FBd0M7WUFDdEQsVUFBVSxFQUFFLHNDQUFzQztZQUNsRCxZQUFZLEVBQUUsd0NBQXdDO1lBQ3RELFlBQVksRUFBRSx3Q0FBd0M7WUFDdEQsZ0JBQWdCLEVBQUUsNENBQTRDO1lBQzlELGdCQUFnQixFQUFFLDRDQUE0QztZQUM5RCxtQkFBbUIsRUFBRSwrQ0FBK0M7WUFDcEUsa0JBQWtCLEVBQUUsOENBQThDO1NBQ25FLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQzthQUN0QyxJQUFJLENBQ0gsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNQLElBQUksQ0FBQyxhQUFhLEdBQUksTUFBYyxDQUFDLFlBQVksQ0FBQztZQUNsRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDckIsQ0FBQyxDQUFDLEVBQ0YsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNiLE9BQU8sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzdCLENBQUMsQ0FBQyxFQUNGLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDUCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FDSDthQUNBLFNBQVMsRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFTyxZQUFZO1FBQ2xCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxjQUFjO2FBQ2xDLGFBQWE7YUFDYixHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLFVBQVUsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUUvQyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFTyxXQUFXO1FBQ2pCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFTyxrQkFBa0I7UUFDeEIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2QyxDQUFDOzttSEF2RlUscUJBQXFCLGtCQWtCdEIscUJBQXFCLDZCQUVyQixRQUFRO3VIQXBCUCxxQkFBcUIsY0FGcEIsTUFBTTs0RkFFUCxxQkFBcUI7a0JBSGpDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFrQkksUUFBUTs7MEJBQ1IsTUFBTTsyQkFBQyxxQkFBcUI7OEJBR1YsUUFBUTswQkFEMUIsTUFBTTsyQkFBQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5pbXBvcnQgeyBmc1NvdXJjZUxvYWRlciB9IGZyb20gJ0BmaXJlc3RpdGNoL2NvbW1vbidcblxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjb25jYXRNYXAsIG1hcCwgc2hhcmVSZXBsYXksIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgRlNfSFRNTF9FRElUT1JfQ09ORklHIH0gZnJvbSAnLi4vaW5qZWN0cy9jb25maWcuaW5qZWN0JztcbmltcG9ydCB7IEZzSHRtbEVkaXRvckNvbmZpZyB9IGZyb20gJy4uL2ludGVyZmFjZXMvaHRtbC1lZGl0b3ItY29uZmlnJztcblxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgRnNGcm9hbGFMb2FkZXJTZXJ2aWNlIHtcblxuICBwcml2YXRlIF9Gcm9hbGFFZGl0b3I6IHVua25vd247XG5cbiAgcHJpdmF0ZSBfZnJvYWxhTG9hZGVkID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG4gIHByaXZhdGUgX2Zyb2FsYVBsdWdpbnNMb2FkZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcbiAgcHJpdmF0ZSBfc291cmNlTG9hZGVyID0gZnNTb3VyY2VMb2FkZXI7XG5cbiAgcHJpdmF0ZSBfbG9hZGVkJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuX2Zyb2FsYUxvYWRlZCwgdGhpcy5fZnJvYWxhUGx1Z2luc0xvYWRlZF0pXG4gICAgLnBpcGUoXG4gICAgICBtYXAoKFtGcm9hbGFSZWFkeSwgcGx1Z2luc1JlYWRdKSA9PiB7XG4gICAgICAgIHJldHVybiBwbHVnaW5zUmVhZCAmJiBGcm9hbGFSZWFkeTtcbiAgICAgIH0pLFxuICAgICAgc2hhcmVSZXBsYXkoMSksXG4gICAgKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBAT3B0aW9uYWwoKVxuICAgIEBJbmplY3QoRlNfSFRNTF9FRElUT1JfQ09ORklHKVxuICAgIHByaXZhdGUgX2RlZmF1bHRDb25maWc6IEZzSHRtbEVkaXRvckNvbmZpZyxcbiAgICBASW5qZWN0KERPQ1VNRU5UKVxuICAgIHByaXZhdGUgX2RvY3VtZW50OiBEb2N1bWVudCxcbiAgKSB7XG4gICAgdGhpcy5fc291cmNlTG9hZGVyLnNldERvY3VtZW50KHRoaXMuX2RvY3VtZW50KTtcbiAgICB0aGlzLl9sb2FkKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGxvYWRlZCQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX2xvYWRlZCQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IEZyb2FsYUVkaXRvcigpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl9Gcm9hbGFFZGl0b3I7XG4gIH1cblxuICBwcml2YXRlIF9sb2FkKCkge1xuICAgIHRoaXMuX3NvdXJjZUxvYWRlci5yZWdpc3RlclJlc291cmNlcyh7XG4gICAgICBmcm9hbGE6IFtcbiAgICAgICAgJy9hc3NldHMvanMvZnJvYWxhL2Zyb2FsYV9lZGl0b3IubWluLmpzJyxcbiAgICAgICAgJy9hc3NldHMvY3NzL2Zyb2FsYV9lZGl0b3IucGtnZC5taW4uY3NzJyxcbiAgICAgIF0sXG4gICAgICBmcm9hbGFfYWxpZ246ICcvYXNzZXRzL2pzL2Zyb2FsYS9wbHVnaW5zL2FsaWduLm1pbi5qcycsXG4gICAgICBmcm9hbGFfY29sb3JzOiAnL2Fzc2V0cy9qcy9mcm9hbGEvcGx1Z2lucy9jb2xvcnMubWluLmpzJyxcbiAgICAgIGZyb2FsYV9pbWFnZTogJy9hc3NldHMvanMvZnJvYWxhL3BsdWdpbnMvaW1hZ2UubWluLmpzJyxcbiAgICAgIGZyb2FsYV9saW5rOiAnL2Fzc2V0cy9qcy9mcm9hbGEvcGx1Z2lucy9saW5rLm1pbi5qcycsXG4gICAgICBmcm9hbGFfbGlzdHM6ICcvYXNzZXRzL2pzL2Zyb2FsYS9wbHVnaW5zL2xpc3RzLm1pbi5qcycsXG4gICAgICBmcm9hbGFfcGFyYWdyYXBoX2Zvcm1hdDogJy9hc3NldHMvanMvZnJvYWxhL3BsdWdpbnMvcGFyYWdyYXBoX2Zvcm1hdC5taW4uanMnLFxuICAgICAgZnJvYWxhX3RhYmxlOiAnL2Fzc2V0cy9qcy9mcm9hbGEvcGx1Z2lucy90YWJsZS5taW4uanMnLFxuICAgICAgZnJvYWxhX3VybDogJy9hc3NldHMvanMvZnJvYWxhL3BsdWdpbnMvdXJsLm1pbi5qcycsXG4gICAgICBmcm9hbGFfdmlkZW86ICcvYXNzZXRzL2pzL2Zyb2FsYS9wbHVnaW5zL3ZpZGVvLm1pbi5qcycsXG4gICAgICBmcm9hbGFfcXVvdGU6ICcvYXNzZXRzL2pzL2Zyb2FsYS9wbHVnaW5zL3F1b3RlLm1pbi5qcycsXG4gICAgICBmcm9hbGFfZHJhZ2dhYmxlOiAnL2Fzc2V0cy9qcy9mcm9hbGEvcGx1Z2lucy9kcmFnZ2FibGUubWluLmpzJyxcbiAgICAgIGZyb2FsYV9mb250X3NpemU6ICcvYXNzZXRzL2pzL2Zyb2FsYS9wbHVnaW5zL2ZvbnRfc2l6ZS5taW4uanMnLFxuICAgICAgZnJvYWxhX3F1aWNrX2luc2VydDogJy9hc3NldHMvanMvZnJvYWxhL3BsdWdpbnMvcXVpY2tfaW5zZXJ0Lm1pbi5qcycsXG4gICAgICBmcm9hbGFfbGluZV9oZWlnaHQ6ICcvYXNzZXRzL2pzL2Zyb2FsYS9wbHVnaW5zL2xpbmVfaGVpZ2h0Lm1pbi5qcydcbiAgICB9KTtcblxuICAgIHRoaXMuX3NvdXJjZUxvYWRlci5sb2FkUmVzb3VyY2UoJ2Zyb2FsYScpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICB0aGlzLl9Gcm9hbGFFZGl0b3IgPSAod2luZG93IGFzIGFueSkuRnJvYWxhRWRpdG9yO1xuICAgICAgICAgIHRoaXMuX2Zyb2FsYURvbmUoKTtcbiAgICAgICAgfSksXG4gICAgICAgIGNvbmNhdE1hcCgoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRQbHVnaW5zKCk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX2Zyb2FsYVBsdWdpbnNEb25lKCk7XG4gICAgICAgIH0pLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfbG9hZFBsdWdpbnMoKTogT2JzZXJ2YWJsZTx1bmtub3duPiB7XG4gICAgY29uc3QgcmVzb3VyY2VzID0gdGhpcy5fZGVmYXVsdENvbmZpZ1xuICAgICAgLmZyb2FsYVBsdWdpbnNcbiAgICAgIC5tYXAoKHBsdWdpbk5hbWUpID0+IGBmcm9hbGFfJHtwbHVnaW5OYW1lfWApO1xuXG4gICAgcmV0dXJuIHRoaXMuX3NvdXJjZUxvYWRlci5sb2FkUmVzb3VyY2VzKHJlc291cmNlcyk7XG4gIH1cblxuICBwcml2YXRlIF9mcm9hbGFEb25lKCkge1xuICAgIHRoaXMuX2Zyb2FsYUxvYWRlZC5uZXh0KHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZnJvYWxhUGx1Z2luc0RvbmUoKSB7XG4gICAgdGhpcy5fZnJvYWxhUGx1Z2luc0xvYWRlZC5uZXh0KHRydWUpO1xuICB9XG59XG4iXX0=
|
|
@@ -8,12 +8,12 @@ import * as i5 from '@firestitch/skeleton';
|
|
|
8
8
|
import { FsSkeletonModule } from '@firestitch/skeleton';
|
|
9
9
|
import { NG_VALUE_ACCESSOR, NG_VALIDATORS } from '@angular/forms';
|
|
10
10
|
import { FileProcessor, FsFile } from '@firestitch/file';
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
11
|
+
import { BehaviorSubject, combineLatest, ReplaySubject, Subject, fromEventPattern } from 'rxjs';
|
|
12
|
+
import { map, shareReplay, tap, concatMap, switchMap, filter, startWith, distinctUntilChanged, skip, takeUntil } from 'rxjs/operators';
|
|
13
13
|
import { merge, debounce } from 'lodash-es';
|
|
14
|
+
import { fsSourceLoader, guid } from '@firestitch/common';
|
|
14
15
|
import * as i1 from '@angular/platform-browser';
|
|
15
16
|
import Tribute from 'tributejs';
|
|
16
|
-
import { guid } from '@firestitch/common';
|
|
17
17
|
import { __awaiter } from 'tslib';
|
|
18
18
|
|
|
19
19
|
const RichButtons = [
|
|
@@ -55,129 +55,48 @@ const ParagraphButtons = [
|
|
|
55
55
|
const FS_HTML_EDITOR_DEFAULT_CONFIG = new InjectionToken('fs-html-editor.default-config');
|
|
56
56
|
const FS_HTML_EDITOR_CONFIG = new InjectionToken('fs-html-editor.config');
|
|
57
57
|
|
|
58
|
-
function resourceLoaderFactory(document) {
|
|
59
|
-
let resourceBase = '/assets/js/froala/';
|
|
60
|
-
let stylesBase = '/assets/css/';
|
|
61
|
-
const head = document.getElementsByTagName('head')[0];
|
|
62
|
-
const files = new Map();
|
|
63
|
-
const window = document.defaultView;
|
|
64
|
-
const resourcePaths = {
|
|
65
|
-
froala: 'froala_editor.min.js',
|
|
66
|
-
align: 'plugins/align.min.js',
|
|
67
|
-
colors: 'plugins/colors.min.js',
|
|
68
|
-
image: 'plugins/image.min.js',
|
|
69
|
-
link: 'plugins/link.min.js',
|
|
70
|
-
lists: 'plugins/lists.min.js',
|
|
71
|
-
paragraph_format: 'plugins/paragraph_format.min.js',
|
|
72
|
-
table: 'plugins/table.min.js',
|
|
73
|
-
url: 'plugins/url.min.js',
|
|
74
|
-
video: 'plugins/video.min.js',
|
|
75
|
-
quote: 'plugins/quote.min.js',
|
|
76
|
-
draggable: 'plugins/draggable.min.js',
|
|
77
|
-
font_size: 'plugins/font_size.min.js',
|
|
78
|
-
quick_insert: 'plugins/quick_insert.min.js',
|
|
79
|
-
line_height: 'plugins/line_height.min.js'
|
|
80
|
-
};
|
|
81
|
-
const stylesPaths = {
|
|
82
|
-
froala: 'froala_editor.pkgd.min.css',
|
|
83
|
-
};
|
|
84
|
-
const loadResource = function (scriptPath) {
|
|
85
|
-
if (!files.has(scriptPath)) {
|
|
86
|
-
const obs$ = new Observable((obs) => {
|
|
87
|
-
const script = document.createElement('script');
|
|
88
|
-
script.src = scriptPath;
|
|
89
|
-
head.appendChild(script);
|
|
90
|
-
script.onload = () => {
|
|
91
|
-
obs.next();
|
|
92
|
-
obs.complete();
|
|
93
|
-
};
|
|
94
|
-
script.onerror = (err) => {
|
|
95
|
-
obs.error(err);
|
|
96
|
-
};
|
|
97
|
-
})
|
|
98
|
-
.pipe(shareReplay(1));
|
|
99
|
-
files.set(scriptPath, obs$);
|
|
100
|
-
}
|
|
101
|
-
return files.get(scriptPath);
|
|
102
|
-
};
|
|
103
|
-
const loadStyles = function (stylePath) {
|
|
104
|
-
if (!files.has(stylePath)) {
|
|
105
|
-
const obs$ = new Observable((obs) => {
|
|
106
|
-
const style = document.createElement('link');
|
|
107
|
-
style.id = stylePath;
|
|
108
|
-
style.rel = 'stylesheet';
|
|
109
|
-
style.href = `${stylePath}`;
|
|
110
|
-
head.appendChild(style);
|
|
111
|
-
style.onload = () => {
|
|
112
|
-
obs.next();
|
|
113
|
-
obs.complete();
|
|
114
|
-
};
|
|
115
|
-
style.onerror = (err) => {
|
|
116
|
-
obs.error(err);
|
|
117
|
-
};
|
|
118
|
-
});
|
|
119
|
-
files.set(stylePath, obs$);
|
|
120
|
-
}
|
|
121
|
-
return files.get(stylePath);
|
|
122
|
-
};
|
|
123
|
-
return {
|
|
124
|
-
setResourceBase: (path) => {
|
|
125
|
-
resourceBase = path;
|
|
126
|
-
},
|
|
127
|
-
setStylesBase: (path) => {
|
|
128
|
-
stylesBase = path;
|
|
129
|
-
},
|
|
130
|
-
loadResource: (resourceName) => {
|
|
131
|
-
/*
|
|
132
|
-
this line must be here for cases when html-editor loaded together with text-editor
|
|
133
|
-
monaco-editor has it's own loader and it declares "define" variable, so froala tryes to load itself in wrong way
|
|
134
|
-
*/
|
|
135
|
-
window.define = null;
|
|
136
|
-
const path = resourcePaths[resourceName] || resourceName;
|
|
137
|
-
return loadResource(resourceBase + path);
|
|
138
|
-
},
|
|
139
|
-
loadStyles: (resourceName) => {
|
|
140
|
-
const path = stylesPaths[resourceName] || resourceName;
|
|
141
|
-
return loadStyles(stylesBase + path);
|
|
142
|
-
}
|
|
143
|
-
};
|
|
144
|
-
}
|
|
145
|
-
|
|
146
58
|
class FsFroalaLoaderService {
|
|
147
59
|
constructor(_defaultConfig, _document) {
|
|
148
60
|
this._defaultConfig = _defaultConfig;
|
|
149
61
|
this._document = _document;
|
|
150
62
|
this._froalaLoaded = new BehaviorSubject(false);
|
|
151
63
|
this._froalaPluginsLoaded = new BehaviorSubject(false);
|
|
152
|
-
this.
|
|
64
|
+
this._sourceLoader = fsSourceLoader;
|
|
153
65
|
this._loaded$ = combineLatest([this._froalaLoaded, this._froalaPluginsLoaded])
|
|
154
66
|
.pipe(map(([FroalaReady, pluginsRead]) => {
|
|
155
67
|
return pluginsRead && FroalaReady;
|
|
156
68
|
}), shareReplay(1));
|
|
157
|
-
|
|
158
|
-
if (this._defaultConfig.assetsJSPath) {
|
|
159
|
-
this._resourceLoader.setResourceBase(this._defaultConfig.assetsJSPath);
|
|
160
|
-
}
|
|
161
|
-
if (this._defaultConfig.assetsCSSPath) {
|
|
162
|
-
this._resourceLoader.setStylesBase(this._defaultConfig.assetsCSSPath);
|
|
163
|
-
}
|
|
164
|
-
}
|
|
69
|
+
this._sourceLoader.setDocument(this._document);
|
|
165
70
|
this._load();
|
|
166
71
|
}
|
|
167
72
|
get loaded$() {
|
|
168
73
|
return this._loaded$;
|
|
169
74
|
}
|
|
170
|
-
get ready() {
|
|
171
|
-
return this._froalaLoaded.getValue() && this._froalaPluginsLoaded.getValue();
|
|
172
|
-
}
|
|
173
75
|
get FroalaEditor() {
|
|
174
76
|
return this._FroalaEditor;
|
|
175
77
|
}
|
|
176
78
|
_load() {
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
79
|
+
this._sourceLoader.registerResources({
|
|
80
|
+
froala: [
|
|
81
|
+
'/assets/js/froala/froala_editor.min.js',
|
|
82
|
+
'/assets/css/froala_editor.pkgd.min.css',
|
|
83
|
+
],
|
|
84
|
+
froala_align: '/assets/js/froala/plugins/align.min.js',
|
|
85
|
+
froala_colors: '/assets/js/froala/plugins/colors.min.js',
|
|
86
|
+
froala_image: '/assets/js/froala/plugins/image.min.js',
|
|
87
|
+
froala_link: '/assets/js/froala/plugins/link.min.js',
|
|
88
|
+
froala_lists: '/assets/js/froala/plugins/lists.min.js',
|
|
89
|
+
froala_paragraph_format: '/assets/js/froala/plugins/paragraph_format.min.js',
|
|
90
|
+
froala_table: '/assets/js/froala/plugins/table.min.js',
|
|
91
|
+
froala_url: '/assets/js/froala/plugins/url.min.js',
|
|
92
|
+
froala_video: '/assets/js/froala/plugins/video.min.js',
|
|
93
|
+
froala_quote: '/assets/js/froala/plugins/quote.min.js',
|
|
94
|
+
froala_draggable: '/assets/js/froala/plugins/draggable.min.js',
|
|
95
|
+
froala_font_size: '/assets/js/froala/plugins/font_size.min.js',
|
|
96
|
+
froala_quick_insert: '/assets/js/froala/plugins/quick_insert.min.js',
|
|
97
|
+
froala_line_height: '/assets/js/froala/plugins/line_height.min.js'
|
|
98
|
+
});
|
|
99
|
+
this._sourceLoader.loadResource('froala')
|
|
181
100
|
.pipe(tap(() => {
|
|
182
101
|
this._FroalaEditor = window.FroalaEditor;
|
|
183
102
|
this._froalaDone();
|
|
@@ -189,14 +108,10 @@ class FsFroalaLoaderService {
|
|
|
189
108
|
.subscribe();
|
|
190
109
|
}
|
|
191
110
|
_loadPlugins() {
|
|
192
|
-
const
|
|
111
|
+
const resources = this._defaultConfig
|
|
193
112
|
.froalaPlugins
|
|
194
|
-
.
|
|
195
|
-
|
|
196
|
-
acc.push(import$);
|
|
197
|
-
return acc;
|
|
198
|
-
}, []);
|
|
199
|
-
return combineLatest(imports);
|
|
113
|
+
.map((pluginName) => `froala_${pluginName}`);
|
|
114
|
+
return this._sourceLoader.loadResources(resources);
|
|
200
115
|
}
|
|
201
116
|
_froalaDone() {
|
|
202
117
|
this._froalaLoaded.next(true);
|
|
@@ -1043,8 +958,6 @@ class ScreenRecordPlugin extends Plugin {
|
|
|
1043
958
|
}
|
|
1044
959
|
initialize() {
|
|
1045
960
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1046
|
-
yield resourceLoaderFactory(document).loadStyles('froala')
|
|
1047
|
-
.toPromise();
|
|
1048
961
|
const FroalaEditor = window.FroalaEditor;
|
|
1049
962
|
this.editor.events.on('mouseup', (e) => {
|
|
1050
963
|
const el = this._getEl(e.target);
|