@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.
@@ -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._resourceLoader = resourceLoaderFactory(this._document);
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
- if (this._defaultConfig) {
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
- combineLatest([
40
- this._resourceLoader.loadResource('froala'),
41
- this._resourceLoader.loadStyles('froala')
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 imports = this._defaultConfig
61
+ const resources = this._defaultConfig
55
62
  .froalaPlugins
56
- .reduce((acc, pluginName) => {
57
- const import$ = this._resourceLoader.loadResource(pluginName);
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvYWxhLWxvYWRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL2h0bWwtZWRpdG9yL3NlcnZpY2VzL2Zyb2FsYS1sb2FkZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVsRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUdqRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFNeEQsTUFBTSxPQUFPLHFCQUFxQjtJQWdCaEMsWUFFVSxjQUFrQyxFQUVsQyxTQUFtQjtRQUZuQixtQkFBYyxHQUFkLGNBQWMsQ0FBb0I7UUFFbEMsY0FBUyxHQUFULFNBQVMsQ0FBVTtRQWhCckIsa0JBQWEsR0FBRyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQyx5QkFBb0IsR0FBRyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsRCxvQkFBZSxHQUFHLHFCQUFxQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUV4RCxhQUFRLEdBQUcsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQzthQUM5RSxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLEVBQUUsRUFBRTtZQUNqQyxPQUFPLFdBQVcsSUFBSSxXQUFXLENBQUM7UUFDcEMsQ0FBQyxDQUFDLEVBQ0YsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7UUFRRixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDdkIsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRTtnQkFDcEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQTthQUN2RTtZQUVELElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUU7Z0JBQ3JDLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLENBQUE7YUFDdEU7U0FDRjtRQUVELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNmLENBQUM7SUFFRCxJQUFXLE9BQU87UUFDaEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUFXLEtBQUs7UUFDZCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQy9FLENBQUM7SUFFRCxJQUFXLFlBQVk7UUFDckIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFFTyxLQUFLO1FBQ1gsYUFBYSxDQUFDO1lBQ1osSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDO1lBQzNDLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQztTQUMxQyxDQUFDO2FBQ0MsSUFBSSxDQUNILEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDUCxJQUFJLENBQUMsYUFBYSxHQUFJLE1BQWMsQ0FBQyxZQUFZLENBQUM7WUFDbEQsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3JCLENBQUMsQ0FBQyxFQUNGLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDYixPQUFPLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUM3QixDQUFDLENBQUMsRUFDRixHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ1AsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQ0g7YUFDQSxTQUFTLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRU8sWUFBWTtRQUNsQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYzthQUNoQyxhQUFhO2FBQ2IsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLFVBQVUsRUFBRSxFQUFFO1lBQzFCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBRTlELEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFbEIsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFVCxPQUFPLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRU8sV0FBVztRQUNqQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRU8sa0JBQWtCO1FBQ3hCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkMsQ0FBQzs7bUhBdkZVLHFCQUFxQixrQkFpQlYscUJBQXFCLDZCQUVqQyxRQUFRO3VIQW5CUCxxQkFBcUIsY0FGcEIsTUFBTTs0RkFFUCxxQkFBcUI7a0JBSGpDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFrQkksUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxxQkFBcUI7OEJBR3RCLFFBQVE7MEJBRDFCLE1BQU07MkJBQUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjb25jYXRNYXAsIG1hcCwgc2hhcmVSZXBsYXksIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgRlNfSFRNTF9FRElUT1JfQ09ORklHIH0gZnJvbSAnLi4vaW5qZWN0cy9jb25maWcuaW5qZWN0JztcbmltcG9ydCB7IEZzSHRtbEVkaXRvckNvbmZpZyB9IGZyb20gJy4uL2ludGVyZmFjZXMvaHRtbC1lZGl0b3ItY29uZmlnJztcblxuaW1wb3J0IHsgcmVzb3VyY2VMb2FkZXJGYWN0b3J5IH0gZnJvbSAnLi4vdXRpbHMvbG9hZGVyJztcblxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgRnNGcm9hbGFMb2FkZXJTZXJ2aWNlIHtcblxuICBwcml2YXRlIF9Gcm9hbGFFZGl0b3I6IHVua25vd247XG5cbiAgcHJpdmF0ZSBfZnJvYWxhTG9hZGVkID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG4gIHByaXZhdGUgX2Zyb2FsYVBsdWdpbnNMb2FkZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcbiAgcHJpdmF0ZSBfcmVzb3VyY2VMb2FkZXIgPSByZXNvdXJjZUxvYWRlckZhY3RvcnkodGhpcy5fZG9jdW1lbnQpO1xuXG4gIHByaXZhdGUgX2xvYWRlZCQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLl9mcm9hbGFMb2FkZWQsIHRoaXMuX2Zyb2FsYVBsdWdpbnNMb2FkZWRdKVxuICAgIC5waXBlKFxuICAgICAgbWFwKChbRnJvYWxhUmVhZHksIHBsdWdpbnNSZWFkXSkgPT4ge1xuICAgICAgICByZXR1cm4gcGx1Z2luc1JlYWQgJiYgRnJvYWxhUmVhZHk7XG4gICAgICB9KSxcbiAgICAgIHNoYXJlUmVwbGF5KDEpLFxuICAgICk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChGU19IVE1MX0VESVRPUl9DT05GSUcpXG4gICAgcHJpdmF0ZSBfZGVmYXVsdENvbmZpZzogRnNIdG1sRWRpdG9yQ29uZmlnLFxuICAgIEBJbmplY3QoRE9DVU1FTlQpXG4gICAgcHJpdmF0ZSBfZG9jdW1lbnQ6IERvY3VtZW50LFxuICApIHtcbiAgICBpZiAodGhpcy5fZGVmYXVsdENvbmZpZykge1xuICAgICAgaWYgKHRoaXMuX2RlZmF1bHRDb25maWcuYXNzZXRzSlNQYXRoKSB7XG4gICAgICAgIHRoaXMuX3Jlc291cmNlTG9hZGVyLnNldFJlc291cmNlQmFzZSh0aGlzLl9kZWZhdWx0Q29uZmlnLmFzc2V0c0pTUGF0aClcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2RlZmF1bHRDb25maWcuYXNzZXRzQ1NTUGF0aCkge1xuICAgICAgICB0aGlzLl9yZXNvdXJjZUxvYWRlci5zZXRTdHlsZXNCYXNlKHRoaXMuX2RlZmF1bHRDb25maWcuYXNzZXRzQ1NTUGF0aClcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9sb2FkKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGxvYWRlZCQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX2xvYWRlZCQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHJlYWR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9mcm9hbGFMb2FkZWQuZ2V0VmFsdWUoKSAmJiB0aGlzLl9mcm9hbGFQbHVnaW5zTG9hZGVkLmdldFZhbHVlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IEZyb2FsYUVkaXRvcigpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl9Gcm9hbGFFZGl0b3I7XG4gIH1cblxuICBwcml2YXRlIF9sb2FkKCkge1xuICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5fcmVzb3VyY2VMb2FkZXIubG9hZFJlc291cmNlKCdmcm9hbGEnKSxcbiAgICAgIHRoaXMuX3Jlc291cmNlTG9hZGVyLmxvYWRTdHlsZXMoJ2Zyb2FsYScpXG4gICAgXSlcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX0Zyb2FsYUVkaXRvciA9ICh3aW5kb3cgYXMgYW55KS5Gcm9hbGFFZGl0b3I7XG4gICAgICAgICAgdGhpcy5fZnJvYWxhRG9uZSgpO1xuICAgICAgICB9KSxcbiAgICAgICAgY29uY2F0TWFwKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fbG9hZFBsdWdpbnMoKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fZnJvYWxhUGx1Z2luc0RvbmUoKTtcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIF9sb2FkUGx1Z2lucygpOiBPYnNlcnZhYmxlPHVua25vd24+IHtcbiAgICBjb25zdCBpbXBvcnRzID0gdGhpcy5fZGVmYXVsdENvbmZpZ1xuICAgICAgLmZyb2FsYVBsdWdpbnNcbiAgICAgIC5yZWR1Y2UoKGFjYywgcGx1Z2luTmFtZSkgPT4ge1xuICAgICAgICBjb25zdCBpbXBvcnQkID0gdGhpcy5fcmVzb3VyY2VMb2FkZXIubG9hZFJlc291cmNlKHBsdWdpbk5hbWUpO1xuXG4gICAgICAgIGFjYy5wdXNoKGltcG9ydCQpO1xuXG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCBbXSk7XG5cbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChpbXBvcnRzKTtcbiAgfVxuXG4gIHByaXZhdGUgX2Zyb2FsYURvbmUoKSB7XG4gICAgdGhpcy5fZnJvYWxhTG9hZGVkLm5leHQodHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIF9mcm9hbGFQbHVnaW5zRG9uZSgpIHtcbiAgICB0aGlzLl9mcm9hbGFQbHVnaW5zTG9hZGVkLm5leHQodHJ1ZSk7XG4gIH1cbn1cbiJdfQ==
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 { Observable, BehaviorSubject, combineLatest, ReplaySubject, Subject, fromEventPattern } from 'rxjs';
12
- import { shareReplay, map, tap, concatMap, switchMap, filter, startWith, distinctUntilChanged, skip, takeUntil } from 'rxjs/operators';
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._resourceLoader = resourceLoaderFactory(this._document);
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
- if (this._defaultConfig) {
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
- combineLatest([
178
- this._resourceLoader.loadResource('froala'),
179
- this._resourceLoader.loadStyles('froala')
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 imports = this._defaultConfig
111
+ const resources = this._defaultConfig
193
112
  .froalaPlugins
194
- .reduce((acc, pluginName) => {
195
- const import$ = this._resourceLoader.loadResource(pluginName);
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);