@pobuca/email-builder 1.0.0 → 1.1.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/README.md +1 -1
- package/bundles/pobuca-email-builder.umd.js +4464 -4414
- package/bundles/pobuca-email-builder.umd.js.map +1 -1
- package/bundles/pobuca-email-builder.umd.min.js +1 -1
- package/bundles/pobuca-email-builder.umd.min.js.map +1 -1
- package/esm2015/lib/classes/DefaultEmail.js +54 -53
- package/esm2015/lib/classes/Elements.js +229 -229
- package/esm2015/lib/classes/Structure.js +89 -89
- package/esm2015/lib/components/block/block.component.js +89 -89
- package/esm2015/lib/components/block-settings/block-settings.component.js +53 -53
- package/esm2015/lib/components/builder-container/builder-container.component.js +114 -114
- package/esm2015/lib/components/dialog.component.js +30 -30
- package/esm2015/lib/components/general-settings/general-settings.component.js +25 -25
- package/esm2015/lib/components/import-dialog/import-dialog.component.js +62 -62
- package/esm2015/lib/components/preview.component.js +89 -89
- package/esm2015/lib/components/structure/structure.component.js +163 -163
- package/esm2015/lib/components/structure-settings/structure-settings.component.js +31 -31
- package/esm2015/lib/components/template-list-dialog/template-list-dialog.component.js +45 -45
- package/esm2015/lib/directives/dynamic-component.directive.js +46 -46
- package/esm2015/lib/elements/abstract-block.js +23 -23
- package/esm2015/lib/elements/button/button.component.js +29 -29
- package/esm2015/lib/elements/divider/divider.component.js +30 -30
- package/esm2015/lib/elements/image/image.component.js +54 -54
- package/esm2015/lib/elements/social/social.component.js +42 -42
- package/esm2015/lib/elements/spacer/spacer.component.js +30 -30
- package/esm2015/lib/elements/text-element/text-element.component.js +80 -80
- package/esm2015/lib/groups/align.js +79 -79
- package/esm2015/lib/groups/back-repeat.js +55 -55
- package/esm2015/lib/groups/border.js +102 -102
- package/esm2015/lib/groups/color.js +139 -139
- package/esm2015/lib/groups/direction.js +63 -63
- package/esm2015/lib/groups/font-styles.js +127 -112
- package/esm2015/lib/groups/gaps.js +45 -45
- package/esm2015/lib/groups/line-height.js +68 -68
- package/esm2015/lib/groups/link.js +67 -67
- package/esm2015/lib/groups/margin.js +45 -45
- package/esm2015/lib/groups/padding.js +53 -53
- package/esm2015/lib/groups/upload-image.js +112 -112
- package/esm2015/lib/groups/width-height.js +94 -94
- package/esm2015/lib/interceptors/pb-interceptor.interceptor.js +51 -51
- package/esm2015/lib/interfaces/interfaces.js +13 -13
- package/esm2015/lib/pb-email-builder.component.js +258 -246
- package/esm2015/lib/pb-email-builder.module.js +291 -291
- package/esm2015/lib/pb-email-builder.service.js +134 -134
- package/esm2015/lib/pipes/slugify.pipe.js +39 -39
- package/esm2015/lib/services/internals/pb-email-object-store/pb-email-object-store.service.js +175 -165
- package/esm2015/lib/services/internals/user-interfaces/user-interface.service.js +122 -122
- package/esm2015/lib/services/pb-storage/FreeUsersStorage.class.js +11 -11
- package/esm2015/lib/services/pb-storage/index.js +7 -7
- package/esm2015/lib/services/pb-storage/pb-storage.service.js +79 -79
- package/esm2015/lib/services/user-image-uploader-service/free-users-image-uploader.service.js +26 -26
- package/esm2015/lib/services/user-image-uploader-service/index.js +8 -8
- package/esm2015/lib/services/user-image-uploader-service/paid-users-image-uploader.service.js +30 -30
- package/esm2015/lib/services/user-image-uploader-service/upload-bottom-sheet-dialog/upload-bottom-sheet-dialog.component.js +112 -112
- package/esm2015/lib/services/user-image-uploader-service/upload-image-gallery/upload-image-gallery.component.js +91 -91
- package/esm2015/lib/services/user-image-uploader-service/user-image-uploader.service.js +26 -26
- package/esm2015/lib/services/user-middleware-service/FreeUsersMiddleware.js +31 -31
- package/esm2015/lib/services/user-middleware-service/PaidUsersMiddleware.js +12 -12
- package/esm2015/lib/services/user-middleware-service/index.js +8 -8
- package/esm2015/lib/services/user-middleware-service/pb-middlewares.service.js +195 -195
- package/esm2015/lib/services/user-rest-api-service/free-users-rest-api.service.js +16 -16
- package/esm2015/lib/services/user-rest-api-service/index.js +7 -7
- package/esm2015/lib/services/user-rest-api-service/user-rest-api.service.js +116 -116
- package/esm2015/lib/tokens/private-tokens.js +17 -17
- package/esm2015/lib/tokens/tokens.js +159 -159
- package/esm2015/lib/utils.js +147 -147
- package/esm2015/pobuca-email-builder.js +42 -42
- package/esm2015/public_api.js +26 -26
- package/fesm2015/pobuca-email-builder.js +4206 -4168
- package/fesm2015/pobuca-email-builder.js.map +1 -1
- package/lib/classes/DefaultEmail.d.ts +10 -9
- package/lib/classes/Elements.d.ts +62 -62
- package/lib/classes/Structure.d.ts +11 -11
- package/lib/components/block/block.component.d.ts +25 -25
- package/lib/components/block-settings/block-settings.component.d.ts +18 -18
- package/lib/components/builder-container/builder-container.component.d.ts +36 -36
- package/lib/components/dialog.component.d.ts +10 -10
- package/lib/components/general-settings/general-settings.component.d.ts +6 -6
- package/lib/components/import-dialog/import-dialog.component.d.ts +16 -16
- package/lib/components/preview.component.d.ts +18 -18
- package/lib/components/structure/structure.component.d.ts +43 -43
- package/lib/components/structure-settings/structure-settings.component.d.ts +9 -9
- package/lib/components/template-list-dialog/template-list-dialog.component.d.ts +15 -15
- package/lib/directives/dynamic-component.directive.d.ts +13 -13
- package/lib/elements/abstract-block.d.ts +8 -8
- package/lib/elements/button/button.component.d.ts +18 -18
- package/lib/elements/divider/divider.component.d.ts +10 -10
- package/lib/elements/image/image.component.d.ts +19 -19
- package/lib/elements/social/social.component.d.ts +21 -21
- package/lib/elements/spacer/spacer.component.d.ts +5 -5
- package/lib/elements/text-element/text-element.component.d.ts +52 -52
- package/lib/groups/align.d.ts +17 -17
- package/lib/groups/back-repeat.d.ts +8 -8
- package/lib/groups/border.d.ts +13 -13
- package/lib/groups/color.d.ts +26 -26
- package/lib/groups/direction.d.ts +13 -13
- package/lib/groups/font-styles.d.ts +21 -17
- package/lib/groups/gaps.d.ts +7 -7
- package/lib/groups/line-height.d.ts +12 -12
- package/lib/groups/link.d.ts +11 -11
- package/lib/groups/margin.d.ts +8 -8
- package/lib/groups/padding.d.ts +8 -8
- package/lib/groups/upload-image.d.ts +19 -19
- package/lib/groups/width-height.d.ts +19 -19
- package/lib/interceptors/pb-interceptor.interceptor.d.ts +10 -10
- package/lib/interfaces/interfaces.d.ts +430 -422
- package/lib/pb-email-builder.component.d.ts +67 -67
- package/lib/pb-email-builder.module.d.ts +51 -51
- package/lib/pb-email-builder.service.d.ts +83 -83
- package/lib/pipes/slugify.pipe.d.ts +9 -9
- package/lib/services/internals/pb-email-object-store/pb-email-object-store.service.d.ts +50 -50
- package/lib/services/internals/user-interfaces/user-interface.service.d.ts +46 -46
- package/lib/services/pb-storage/FreeUsersStorage.class.d.ts +6 -6
- package/lib/services/pb-storage/index.d.ts +2 -2
- package/lib/services/pb-storage/pb-storage.service.d.ts +54 -54
- package/lib/services/user-image-uploader-service/free-users-image-uploader.service.d.ts +12 -12
- package/lib/services/user-image-uploader-service/index.d.ts +3 -3
- package/lib/services/user-image-uploader-service/paid-users-image-uploader.service.d.ts +14 -14
- package/lib/services/user-image-uploader-service/upload-bottom-sheet-dialog/upload-bottom-sheet-dialog.component.d.ts +28 -28
- package/lib/services/user-image-uploader-service/upload-image-gallery/upload-image-gallery.component.d.ts +27 -27
- package/lib/services/user-image-uploader-service/user-image-uploader.service.d.ts +26 -26
- package/lib/services/user-middleware-service/FreeUsersMiddleware.d.ts +15 -15
- package/lib/services/user-middleware-service/PaidUsersMiddleware.d.ts +7 -7
- package/lib/services/user-middleware-service/index.d.ts +3 -3
- package/lib/services/user-middleware-service/pb-middlewares.service.d.ts +190 -190
- package/lib/services/user-rest-api-service/free-users-rest-api.service.d.ts +10 -10
- package/lib/services/user-rest-api-service/index.d.ts +2 -2
- package/lib/services/user-rest-api-service/user-rest-api.service.d.ts +82 -82
- package/lib/tokens/private-tokens.d.ts +5 -5
- package/lib/tokens/tokens.d.ts +70 -70
- package/lib/utils.d.ts +88 -88
- package/package.json +8 -3
- package/pobuca-email-builder.d.ts +42 -42
- package/pobuca-email-builder.metadata.json +1 -1
- package/public_api.d.ts +16 -16
package/esm2015/lib/services/internals/pb-email-object-store/pb-email-object-store.service.js
CHANGED
|
@@ -1,165 +1,175 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (c) 2024 Pobuca.
|
|
3
|
-
* All rights reserved.
|
|
4
|
-
*/
|
|
5
|
-
import { Inject, Injectable } from '@angular/core';
|
|
6
|
-
import { moveItemInArray, transferArrayItem } from '@angular/cdk/drag-drop';
|
|
7
|
-
import { BehaviorSubject, combineLatest, Subject } from 'rxjs';
|
|
8
|
-
import { exhaustMap, map, pluck, switchMap, withLatestFrom } from 'rxjs/operators';
|
|
9
|
-
// import { getDiff } from 'recursive-diff';
|
|
10
|
-
import { PbUserMiddlewaresService } from '../../user-middleware-service/pb-middlewares.service';
|
|
11
|
-
import { PBEmail } from '../../../classes/DefaultEmail';
|
|
12
|
-
import { cloneDeep, createPadding, createWidthHeight, deferOf, isEqual } from '../../../utils';
|
|
13
|
-
import { PbUserRestApiService } from '../../user-rest-api-service/user-rest-api.service';
|
|
14
|
-
import { PbStorageService } from '../../pb-storage/pb-storage.service';
|
|
15
|
-
import { PB_CONFIG, PB_GOOGLE_FONTS } from '../../../tokens/tokens';
|
|
16
|
-
import * as i0 from "@angular/core";
|
|
17
|
-
import * as i1 from "../../user-rest-api-service/user-rest-api.service";
|
|
18
|
-
import * as i2 from "../../pb-storage/pb-storage.service";
|
|
19
|
-
import * as i3 from "../../user-middleware-service/pb-middlewares.service";
|
|
20
|
-
import * as i4 from "../../../tokens/tokens";
|
|
21
|
-
// https://www.npmjs.com/package/recursive-diff
|
|
22
|
-
/**
|
|
23
|
-
* @internal
|
|
24
|
-
*/
|
|
25
|
-
export class PbEmailObjectStoreService {
|
|
26
|
-
constructor(userRestApi, pbStorage, userMiddleware, googleFonts, config) {
|
|
27
|
-
this.userRestApi = userRestApi;
|
|
28
|
-
this.pbStorage = pbStorage;
|
|
29
|
-
this.userMiddleware = userMiddleware;
|
|
30
|
-
this.googleFonts = googleFonts;
|
|
31
|
-
this.config = config;
|
|
32
|
-
this.Email = new PBEmail();
|
|
33
|
-
this.clonedEmail = cloneDeep(this.Email);
|
|
34
|
-
this._Email$ = new BehaviorSubject(this.Email);
|
|
35
|
-
this.emailAsObservable$ = this._Email$.asObservable();
|
|
36
|
-
this.emailStructuresAsObservable$ = this.emailAsObservable$.pipe(pluck('structures'));
|
|
37
|
-
this.generalEmailOptionsAsObservable$ = this.emailAsObservable$.pipe(pluck('general'));
|
|
38
|
-
this.currentEmailHasChanges$ = this.emailAsObservable$.pipe(map(current => !isEqual(current, this.clonedEmail))
|
|
39
|
-
// shareReplay(),
|
|
40
|
-
// tap((isDirty) => console.log('IsDirty', isDirty)),
|
|
41
|
-
);
|
|
42
|
-
this.builderContainerStyles$ = this.generalEmailOptionsAsObservable$.pipe(map(({ background, padding, direction }) => (Object.assign({ direction, backgroundRepeat: background.repeat, backgroundColor: background.color, backgroundSize: createWidthHeight(background.size), backgroundPosition: 'top center' }, createPadding(padding)))));
|
|
43
|
-
// public readonly emailBodyWidth$ = this.generalEmailOptionsAsObservable$.pipe(map(({ width }) => createWidthHeight(width)));
|
|
44
|
-
this._Mjml$ = new BehaviorSubject('');
|
|
45
|
-
this.mjmlAsObservable$ = this._Mjml$.asObservable();
|
|
46
|
-
this._Template$ = new BehaviorSubject('');
|
|
47
|
-
this.templateAsObservable$ = this._Template$.asObservable();
|
|
48
|
-
this._onTemplateCreated$ = new Subject();
|
|
49
|
-
this.onTemplateCreated$ = this._onTemplateCreated$.pipe(withLatestFrom(this._Email$, this._Template$, this._Mjml$), map(([_, ...rest]) => rest));
|
|
50
|
-
}
|
|
51
|
-
createHTMLTemplate$() {
|
|
52
|
-
return this.emailAsObservable$.pipe(switchMap(email => {
|
|
53
|
-
if (!email.structures.length) {
|
|
54
|
-
throw new Error('Please add some structures and blocks to perform this action.');
|
|
55
|
-
}
|
|
56
|
-
return deferOf(email);
|
|
57
|
-
}), withLatestFrom(combineLatest([this.currentEmailHasChanges$, this.templateAsObservable$])), exhaustMap(([email, [hasChanges, currentHtml]]) => {
|
|
58
|
-
if (hasChanges || !currentHtml) {
|
|
59
|
-
return this.userMiddleware.createHTMLTemplate(email).pipe(exhaustMap(em => this.userRestApi.createHTMLTemplate$(Object.assign(Object.assign({}, em), { googleFonts: this.googleFonts }), this.config.apiPath)), map(res => {
|
|
60
|
-
if (res.errors.length) {
|
|
61
|
-
const error = res.errors.map(({ message, tagName }) => `${tagName} > ${message}`).join('\n');
|
|
62
|
-
throw new Error(error);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
}));
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
if (
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
const {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
column
|
|
143
|
-
this.markForCheck();
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
this.
|
|
149
|
-
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGItZW1haWwtb2JqZWN0LXN0b3JlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wYi1lbWFpbC1idWlsZGVyL3NyYy9saWIvc2VydmljZXMvaW50ZXJuYWxzL3BiLWVtYWlsLW9iamVjdC1zdG9yZS9wYi1lbWFpbC1vYmplY3Qtc3RvcmUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQWUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekYsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9ELE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkYsNENBQTRDO0FBQzVDLE9BQU8sRUFBc0Msd0JBQXdCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUdwSSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9GLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7OztBQUVwRSwrQ0FBK0M7QUFFL0M7O0dBRUc7QUFJSCxNQUFNLE9BQU8seUJBQXlCO0lBaUNwQyxZQUNVLFdBQWlDLEVB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WSxFQUFFLENBQUM7UUFDcEIsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVELFdBQVcsQ0FBQyxHQUFXLEVBQUUsTUFBaUI7UUFDeEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdEIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDOzs7O1lBeEtGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7O1lBWFEsb0JBQW9CO1lBQ3BCLGdCQUFnQjtZQU5vQix3QkFBd0I7d0NBc0RoRSxNQUFNLFNBQUMsZUFBZTs0Q0FDdEIsTUFBTSxTQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDI0IFBvYnVjYS5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDZGtEcmFnRHJvcCwgbW92ZUl0ZW1JbkFycmF5LCB0cmFuc2ZlckFycmF5SXRlbSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBleGhhdXN0TWFwLCBtYXAsIHBsdWNrLCBzd2l0Y2hNYXAsIHdpdGhMYXRlc3RGcm9tIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuLy8gaW1wb3J0IHsgZ2V0RGlmZiB9IGZyb20gJ3JlY3Vyc2l2ZS1kaWZmJztcbmltcG9ydCB7IElBZGRCbG9ja0V2ZW50LCBJQWRkU3RydWN0dXJlRXZlbnQsIFBiVXNlck1pZGRsZXdhcmVzU2VydmljZSB9IGZyb20gJy4uLy4uL3VzZXItbWlkZGxld2FyZS1zZXJ2aWNlL3BiLW1pZGRsZXdhcmVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgSUZvclJvb3RDb25mLCBJTWptbFNlcnZlclJlc3BvbnNlLCBJU3RydWN0dXJlLCBJVXNlclRlbXBsYXRlIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcy9pbnRlcmZhY2VzJztcbmltcG9ydCB7IFRCbG9ja3MgfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL0VsZW1lbnRzJztcbmltcG9ydCB7IFBCRW1haWwgfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL0RlZmF1bHRFbWFpbCc7XG5pbXBvcnQgeyBjbG9uZURlZXAsIGNyZWF0ZVBhZGRpbmcsIGNyZWF0ZVdpZHRoSGVpZ2h0LCBkZWZlck9mLCBpc0VxdWFsIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgUGJVc2VyUmVzdEFwaVNlcnZpY2UgfSBmcm9tICcuLi8uLi91c2VyLXJlc3QtYXBpLXNlcnZpY2UvdXNlci1yZXN0LWFwaS5zZXJ2aWNlJztcbmltcG9ydCB7IFBiU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9wYi1zdG9yYWdlL3BiLXN0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBQQl9DT05GSUcsIFBCX0dPT0dMRV9GT05UUyB9IGZyb20gJy4uLy4uLy4uL3Rva2Vucy90b2tlbnMnO1xuXG4vLyBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9yZWN1cnNpdmUtZGlmZlxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBQYkVtYWlsT2JqZWN0U3RvcmVTZXJ2aWNlIHtcbiAgcHVibGljIEVtYWlsID0gbmV3IFBCRW1haWwoKTtcbiAgcHJpdmF0ZSBjbG9uZWRFbWFpbCA9IGNsb25lRGVlcDxQQkVtYWlsPih0aGlzLkVtYWlsKTtcbiAgcHJpdmF0ZSBfRW1haWwkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxQQkVtYWlsPih0aGlzLkVtYWlsKTtcbiAgcmVhZG9ubHkgZW1haWxBc09ic2VydmFibGUkID0gdGhpcy5fRW1haWwkLmFzT2JzZXJ2YWJsZSgpO1xuICByZWFkb25seSBlbWFpbFN0cnVjdHVyZXNBc09ic2VydmFibGUkID0gdGhpcy5lbWFpbEFzT2JzZXJ2YWJsZSQucGlwZShwbHVjaygnc3RydWN0dXJlcycpKTtcbiAgcmVhZG9ubHkgZ2VuZXJhbEVtYWlsT3B0aW9uc0FzT2JzZXJ2YWJsZSQgPSB0aGlzLmVtYWlsQXNPYnNlcnZhYmxlJC5waXBlKHBsdWNrKCdnZW5lcmFsJykpO1xuICByZWFkb25seSBjdXJyZW50RW1haWxIYXNDaGFuZ2VzJCA9IHRoaXMuZW1haWxBc09ic2VydmFibGUkLnBpcGUoXG4gICAgbWFwKGN1cnJlbnQgPT4gIWlzRXF1YWwoY3VycmVudCwgdGhpcy5jbG9uZWRFbWFpbCkpXG4gICAgLy8gc2hhcmVSZXBsYXkoKSxcbiAgICAvLyB0YXAoKGlzRGlydHkpID0+IGNvbnNvbGUubG9nKCdJc0RpcnR5JywgaXNEaXJ0eSkpLFxuICApO1xuICByZWFkb25seSBidWlsZGVyQ29udGFpbmVyU3R5bGVzJCA9IHRoaXMuZ2VuZXJhbEVtYWlsT3B0aW9uc0FzT2JzZXJ2YWJsZSQucGlwZShcbiAgICBtYXAoKHsgYmFja2dyb3VuZCwgcGFkZGluZywgZGlyZWN0aW9uIH0pID0+ICh7XG4gICAgICBkaXJlY3Rpb24sXG4gICAgICBiYWNrZ3JvdW5kUmVwZWF0OiBiYWNrZ3JvdW5kLnJlcGVhdCxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogYmFja2dyb3VuZC5jb2xvcixcbiAgICAgIGJhY2tncm91bmRTaXplOiBjcmVhdGVXaWR0aEhlaWdodChiYWNrZ3JvdW5kLnNpemUpLFxuICAgICAgYmFja2dyb3VuZFBvc2l0aW9uOiAndG9wIGNlbnRlcicsXG4gICAgICAuLi5jcmVhdGVQYWRkaW5nKHBhZGRpbmcpXG4gICAgfSkpXG4gICk7XG4gIC8vIHB1YmxpYyByZWFkb25seSBlbWFpbEJvZHlXaWR0aCQgPSB0aGlzLmdlbmVyYWxFbWFpbE9wdGlvbnNBc09ic2VydmFibGUkLnBpcGUobWFwKCh7IHdpZHRoIH0pID0+IGNyZWF0ZVdpZHRoSGVpZ2h0KHdpZHRoKSkpO1xuICBwcml2YXRlIF9Nam1sJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XG4gIHB1YmxpYyByZWFkb25seSBtam1sQXNPYnNlcnZhYmxlJCA9IHRoaXMuX01qbWwkLmFzT2JzZXJ2YWJsZSgpO1xuICBwcml2YXRlIF9UZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuICBwdWJsaWMgcmVhZG9ubHkgdGVtcGxhdGVBc09ic2VydmFibGUkID0gdGhpcy5fVGVtcGxhdGUkLmFzT2JzZXJ2YWJsZSgpO1xuICBwcml2YXRlIF9vblRlbXBsYXRlQ3JlYXRlZCQgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG4gIHB1YmxpYyByZWFkb25seSBvblRlbXBsYXRlQ3JlYXRlZCQgPSB0aGlzLl9vblRlbXBsYXRlQ3JlYXRlZCQucGlwZShcbiAgICB3aXRoTGF0ZXN0RnJvbSh0aGlzLl9FbWFpbCQsIHRoaXMuX1RlbXBsYXRlJCwgdGhpcy5fTWptbCQpLFxuICAgIG1hcCgoW18sIC4uLnJlc3RdKSA9PiByZXN0KVxuICApO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgdXNlclJlc3RBcGk6IFBiVXNlclJlc3RBcGlTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGJTdG9yYWdlOiBQYlN0b3JhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgdXNlck1pZGRsZXdhcmU6IFBiVXNlck1pZGRsZXdhcmVzU2VydmljZSxcbiAgICBASW5qZWN0KFBCX0dPT0dMRV9GT05UUykgcHJpdmF0ZSBnb29nbGVGb250czogc3RyaW5nW10sXG4gICAgQEluamVjdChQQl9DT05GSUcpIHJlYWRvbmx5IGNvbmZpZzogSUZvclJvb3RDb25mXG4gICkge31cblxuICBjcmVhdGVIVE1MVGVtcGxhdGUkKCkge1xuICAgIHJldHVybiB0aGlzLmVtYWlsQXNPYnNlcnZhYmxlJC5waXBlKFxuICAgICAgc3dpdGNoTWFwKGVtYWlsID0+IHtcbiAgICAgICAgaWYgKCFlbWFpbC5zdHJ1Y3R1cmVzLmxlbmd0aCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUGxlYXNlIGFkZCBzb21lIHN0cnVjdHVyZXMgYW5kIGJsb2NrcyB0byBwZXJmb3JtIHRoaXMgYWN0aW9uLicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWZlck9mKGVtYWlsKTtcbiAgICAgIH0pLFxuICAgICAgd2l0aExhdGVzdEZyb20oY29tYmluZUxhdGVzdChbdGhpcy5jdXJyZW50RW1haWxIYXNDaGFuZ2VzJCwgdGhpcy50ZW1wbGF0ZUFzT2JzZXJ2YWJsZSRdKSksXG4gICAgICBleGhhdXN0TWFwKChbZW1haWwsIFtoYXNDaGFuZ2VzLCBjdXJyZW50SHRtbF1dKSA9PiB7XG4gICAgICAgIGlmIChoYXNDaGFuZ2VzIHx8ICFjdXJyZW50SHRtbCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLnVzZXJNaWRkbGV3YXJlLmNyZWF0ZUhUTUxUZW1wbGF0ZShlbWFpbCkucGlwZShcbiAgICAgICAgICAgIGV4aGF1c3RNYXAoZW0gPT4gdGhpcy51c2VyUmVzdEFwaS5jcmVhdGVIVE1MVGVtcGxhdGUkKHsgLi4uZW0sIGdvb2dsZUZvbnRzOiB0aGlzLmdvb2dsZUZvbnRzIH0sIHRoaXMuY29uZmlnLmFwaVBhdGgpKSxcbiAgICAgICAgICAgIG1hcChyZXMgPT4ge1xuICAgICAgICAgICAgICBpZiAocmVzLmVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IHJlcy5lcnJvcnMubWFwKCh7IG1lc3NhZ2UsIHRhZ05hbWUgfSkgPT4gYCR7dGFnTmFtZX0gPiAke21lc3NhZ2V9YCkuam9pbignXFxuJyk7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0aGlzLl9Nam1sJC5uZXh0KHJlcy5tam1sKTtcbiAgICAgICAgICAgICAgdGhpcy5fVGVtcGxhdGUkLm5leHQocmVzLmh0bWwpO1xuICAgICAgICAgICAgICB0aGlzLmNsb25lZEVtYWlsID0gY2xvbmVEZWVwKHRoaXMuRW1haWwpO1xuICAgICAgICAgICAgICB0aGlzLl9vblRlbXBsYXRlQ3JlYXRlZCQubmV4dCgpO1xuICAgICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFt0aGlzLl9Nam1sJCwgdGhpcy5fVGVtcGxhdGUkXSkucGlwZShcbiAgICAgICAgICBtYXAoKFttam1sLCBodG1sXSkgPT4gKHsgaHRtbCwgbWptbCwgZXJyb3JzOiBbXSB9IGFzIElNam1sU2VydmVyUmVzcG9uc2UpKVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgbWFya0ZvckNoZWNrKCkge1xuICAgIHRoaXMuX0VtYWlsJC5uZXh0KHRoaXMuRW1haWwpO1xuXG4gICAgaWYgKHRoaXMuRW1haWwuc3RydWN0dXJlcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMucGJTdG9yYWdlLmFkZFRlbXBsYXRlVG9MYXRlc3RVc2VkKFxuICAgICAgICBjbG9uZURlZXA8SVVzZXJUZW1wbGF0ZT4oe1xuICAgICAgICAgIHRlbXBsYXRlRGF0YTogdGhpcy5FbWFpbCxcbiAgICAgICAgICB0aXRsZTogJ2xhc3QtZWRpdGVkJyxcbiAgICAgICAgICB0aHVtYlBhdGg6ICdodHRwczovL3ZpYS5wbGFjZWhvbGRlci5jb20vMjAweDMwMD90ZXh0PUxBU1QrRURJVEVEJ1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2coZ2V0RGlmZih0aGlzLmNsb25lZEVtYWlsLCB0aGlzLkVtYWlsKSk7XG4gIH1cblxuICBzZXRFbWFpbChuZXdFbWFpbDogUEJFbWFpbCkge1xuICAgIGlmICghbmV3RW1haWwuc3RydWN0dXJlcyB8fCAhbmV3RW1haWwuZ2VuZXJhbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbmplY3RlZCBvYmplY3QgaXMgbm90IGEgdmFsaWQgUEJFbWFpbCcpO1xuICAgIH1cbiAgICB0aGlzLkVtYWlsID0gbmV3RW1haWw7XG4gICAgdGhpcy5yZXNldCgpO1xuICB9XG5cbiAgYWRkU3RydWN0dXJlKHsgY3VycmVudEluZGV4ID0gMCwgaXRlbSB9OiBJQWRkU3RydWN0dXJlRXZlbnQpOiBJU3RydWN0dXJlIHtcbiAgICBjb25zdCB7IHN0cnVjdHVyZXMgPSBbXSB9ID0gdGhpcy5FbWFpbDtcbiAgICBsZXQgaXNNb2R1bGUgPSB0cnVlO1xuXG4gICAgaWYgKCFpdGVtLmRhdGEuZWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICBpc01vZHVsZSA9IGZhbHNlO1xuICAgICAgaXRlbS5kYXRhLmVsZW1lbnRzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogaXRlbS5kYXRhLmNvbHVtbnMgfSwgKCkgPT4gW10pO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld1N0cnVjdHVyZSA9IHsgaWQ6IERhdGUubm93KCksIC4uLmNsb25lRGVlcDxJU3RydWN0dXJlPihpdGVtLmRhdGEpLCBpc01vZHVsZSB9O1xuICAgIHN0cnVjdHVyZXMuc3BsaWNlKGN1cnJlbnRJbmRleCwgMCwgbmV3U3RydWN0dXJlKTtcbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIHJldHVybiBuZXdTdHJ1Y3R1cmU7XG4gIH1cblxuICBjaGFuZ2VTdHJ1Y3R1cmVPcmRlcih7IHByZXZpb3VzSW5kZXggPSAwLCBjdXJyZW50SW5kZXggPSAwIH06IENka0RyYWdEcm9wPFNldDxJU3RydWN0dXJlPj4pIHtcbiAgICBtb3ZlSXRlbUluQXJyYXkodGhpcy5FbWFpbC5zdHJ1Y3R1cmVzLCBwcmV2aW91c0luZGV4LCBjdXJyZW50SW5kZXgpO1xuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBkdXBsaWNhdGVTdHJ1Y3R1cmUoaW5kZXg6IG51bWJlcik6IElTdHJ1Y3R1cmUge1xuICAgIGNvbnN0IHsgc3RydWN0dXJlcyA9IFtdIH0gPSB0aGlzLkVtYWlsO1xuICAgIGNvbnN0IG5ld1N0cnVjdHVyZSA9IGNsb25lRGVlcDxJU3RydWN0dXJlPih7IC4uLnN0cnVjdHVyZXNbaW5kZXhdLCBpZDogRGF0ZS5ub3coKSB9KTtcbiAgICBzdHJ1Y3R1cmVzLnNwbGljZShpbmRleCwgMCwgbmV3U3RydWN0dXJlKTtcbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIHJldHVybiBuZXdTdHJ1Y3R1cmU7XG4gIH1cblxuICByZW1vdmVTdHJ1Y3R1cmUoaW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IHsgc3RydWN0dXJlcyA9IFtdIH0gPSB0aGlzLkVtYWlsO1xuICAgIHN0cnVjdHVyZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgYWRkQmxvY2soeyBwcmV2aW91c0luZGV4ID0gMCwgY3VycmVudEluZGV4ID0gMCwgaXRlbSwgcHJldmlvdXNDb250YWluZXI6IHsgaWQsIGRhdGEgfSB9OiBJQWRkQmxvY2tFdmVudCwgY29sdW1uOiBUQmxvY2tzW10pIHtcbiAgICAvLyBjb25zb2xlLmxvZyhpZCk7XG4gICAgLy8gY29uc29sZS5sb2coaXRlbSk7XG5cbiAgICBpZiAoaWQgPT09ICdibG9jay1lbGVtZW50cycpIHtcbiAgICAgIGNvbHVtbi5zcGxpY2UoY3VycmVudEluZGV4LCAwLCBjbG9uZURlZXAoaXRlbS5kYXRhKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyYW5zZmVyQXJyYXlJdGVtKGRhdGEsIGNvbHVtbiwgcHJldmlvdXNJbmRleCwgY3VycmVudEluZGV4KTtcbiAgICB9XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGNoYW5nZUJsb2NrT3JkZXIoeyBwcmV2aW91c0luZGV4ID0gMCwgY3VycmVudEluZGV4ID0gMCB9OiBDZGtEcmFnRHJvcDxUQmxvY2tzW10+LCBjb2x1bW46IFRCbG9ja3NbXSkge1xuICAgIG1vdmVJdGVtSW5BcnJheShjb2x1bW4sIHByZXZpb3VzSW5kZXgsIGN1cnJlbnRJbmRleCk7XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGR1cGxpY2F0ZUJsb2NrKGtleTogbnVtYmVyLCBjb2x1bW46IFRCbG9ja3NbXSwgYmxvY2s6IFRCbG9ja3MpOiBUQmxvY2tzIHtcbiAgICBjb25zdCBuZXdCbG9jayA9IGNsb25lRGVlcDxUQmxvY2tzPihibG9jayk7XG4gICAgY29sdW1uLnNwbGljZShrZXksIDAsIG5ld0Jsb2NrKTtcbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIHJldHVybiBuZXdCbG9jaztcbiAgfVxuXG4gIHJlbW92ZUJsb2NrKGtleTogbnVtYmVyLCBjb2x1bW46IFRCbG9ja3NbXSkge1xuICAgIGNvbHVtbi5zcGxpY2Uoa2V5LCAxKTtcbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5fTWptbCQubmV4dChudWxsKTtcbiAgICB0aGlzLl9UZW1wbGF0ZSQubmV4dChudWxsKTtcbiAgICB0aGlzLmNsb25lZEVtYWlsID0gY2xvbmVEZWVwKHRoaXMuRW1haWwpO1xuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cbn1cbiJdfQ==
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2024 Pobuca.
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
*/
|
|
5
|
+
import { Inject, Injectable } from '@angular/core';
|
|
6
|
+
import { moveItemInArray, transferArrayItem } from '@angular/cdk/drag-drop';
|
|
7
|
+
import { BehaviorSubject, combineLatest, Subject } from 'rxjs';
|
|
8
|
+
import { exhaustMap, map, pluck, switchMap, withLatestFrom } from 'rxjs/operators';
|
|
9
|
+
// import { getDiff } from 'recursive-diff';
|
|
10
|
+
import { PbUserMiddlewaresService } from '../../user-middleware-service/pb-middlewares.service';
|
|
11
|
+
import { PBEmail } from '../../../classes/DefaultEmail';
|
|
12
|
+
import { cloneDeep, createPadding, createWidthHeight, deferOf, isEqual } from '../../../utils';
|
|
13
|
+
import { PbUserRestApiService } from '../../user-rest-api-service/user-rest-api.service';
|
|
14
|
+
import { PbStorageService } from '../../pb-storage/pb-storage.service';
|
|
15
|
+
import { PB_CONFIG, PB_GOOGLE_FONTS } from '../../../tokens/tokens';
|
|
16
|
+
import * as i0 from "@angular/core";
|
|
17
|
+
import * as i1 from "../../user-rest-api-service/user-rest-api.service";
|
|
18
|
+
import * as i2 from "../../pb-storage/pb-storage.service";
|
|
19
|
+
import * as i3 from "../../user-middleware-service/pb-middlewares.service";
|
|
20
|
+
import * as i4 from "../../../tokens/tokens";
|
|
21
|
+
// https://www.npmjs.com/package/recursive-diff
|
|
22
|
+
/**
|
|
23
|
+
* @internal
|
|
24
|
+
*/
|
|
25
|
+
export class PbEmailObjectStoreService {
|
|
26
|
+
constructor(userRestApi, pbStorage, userMiddleware, googleFonts, config) {
|
|
27
|
+
this.userRestApi = userRestApi;
|
|
28
|
+
this.pbStorage = pbStorage;
|
|
29
|
+
this.userMiddleware = userMiddleware;
|
|
30
|
+
this.googleFonts = googleFonts;
|
|
31
|
+
this.config = config;
|
|
32
|
+
this.Email = new PBEmail();
|
|
33
|
+
this.clonedEmail = cloneDeep(this.Email);
|
|
34
|
+
this._Email$ = new BehaviorSubject(this.Email);
|
|
35
|
+
this.emailAsObservable$ = this._Email$.asObservable();
|
|
36
|
+
this.emailStructuresAsObservable$ = this.emailAsObservable$.pipe(pluck('structures'));
|
|
37
|
+
this.generalEmailOptionsAsObservable$ = this.emailAsObservable$.pipe(pluck('general'));
|
|
38
|
+
this.currentEmailHasChanges$ = this.emailAsObservable$.pipe(map(current => !isEqual(current, this.clonedEmail))
|
|
39
|
+
// shareReplay(),
|
|
40
|
+
// tap((isDirty) => console.log('IsDirty', isDirty)),
|
|
41
|
+
);
|
|
42
|
+
this.builderContainerStyles$ = this.generalEmailOptionsAsObservable$.pipe(map(({ background, padding, direction }) => (Object.assign({ direction, backgroundRepeat: background.repeat, backgroundColor: background.color, backgroundSize: createWidthHeight(background.size), backgroundPosition: 'top center' }, createPadding(padding)))));
|
|
43
|
+
// public readonly emailBodyWidth$ = this.generalEmailOptionsAsObservable$.pipe(map(({ width }) => createWidthHeight(width)));
|
|
44
|
+
this._Mjml$ = new BehaviorSubject('');
|
|
45
|
+
this.mjmlAsObservable$ = this._Mjml$.asObservable();
|
|
46
|
+
this._Template$ = new BehaviorSubject('');
|
|
47
|
+
this.templateAsObservable$ = this._Template$.asObservable();
|
|
48
|
+
this._onTemplateCreated$ = new Subject();
|
|
49
|
+
this.onTemplateCreated$ = this._onTemplateCreated$.pipe(withLatestFrom(this._Email$, this._Template$, this._Mjml$), map(([_, ...rest]) => rest));
|
|
50
|
+
}
|
|
51
|
+
createHTMLTemplate$() {
|
|
52
|
+
return this.emailAsObservable$.pipe(switchMap(email => {
|
|
53
|
+
if (!email.structures.length) {
|
|
54
|
+
throw new Error('Please add some structures and blocks to perform this action.');
|
|
55
|
+
}
|
|
56
|
+
return deferOf(email);
|
|
57
|
+
}), withLatestFrom(combineLatest([this.currentEmailHasChanges$, this.templateAsObservable$])), exhaustMap(([email, [hasChanges, currentHtml]]) => {
|
|
58
|
+
if (hasChanges || !currentHtml) {
|
|
59
|
+
return this.userMiddleware.createHTMLTemplate(email).pipe(exhaustMap(em => this.userRestApi.createHTMLTemplate$(Object.assign(Object.assign({}, em), { googleFonts: this.googleFonts }), this.config.apiPath)), map(res => {
|
|
60
|
+
if (res.errors.length) {
|
|
61
|
+
const error = res.errors.map(({ message, tagName }) => `${tagName} > ${message}`).join('\n');
|
|
62
|
+
throw new Error(error);
|
|
63
|
+
}
|
|
64
|
+
// Post-process HTML to include custom fonts
|
|
65
|
+
if (email.customFonts && email.customFonts.length) {
|
|
66
|
+
const customFontLinks = email.customFonts
|
|
67
|
+
.filter(font => font.url)
|
|
68
|
+
.map(font => `<link href="${font.url}" rel="stylesheet" type="text/css">`)
|
|
69
|
+
.join('\n');
|
|
70
|
+
if (customFontLinks && res.html.includes('</head>')) {
|
|
71
|
+
res.html = res.html.replace('</head>', `${customFontLinks}\n</head>`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
this._Mjml$.next(res.mjml);
|
|
75
|
+
this._Template$.next(res.html);
|
|
76
|
+
this.clonedEmail = cloneDeep(this.Email);
|
|
77
|
+
this._onTemplateCreated$.next();
|
|
78
|
+
return res;
|
|
79
|
+
}));
|
|
80
|
+
}
|
|
81
|
+
return combineLatest([this._Mjml$, this._Template$]).pipe(map(([mjml, html]) => ({ html, mjml, errors: [] })));
|
|
82
|
+
}));
|
|
83
|
+
}
|
|
84
|
+
markForCheck() {
|
|
85
|
+
this._Email$.next(this.Email);
|
|
86
|
+
if (this.Email.structures.length) {
|
|
87
|
+
this.pbStorage.addTemplateToLatestUsed(cloneDeep({
|
|
88
|
+
templateData: this.Email,
|
|
89
|
+
title: 'last-edited',
|
|
90
|
+
thumbPath: 'https://via.placeholder.com/200x300?text=LAST+EDITED'
|
|
91
|
+
}));
|
|
92
|
+
}
|
|
93
|
+
// console.log(getDiff(this.clonedEmail, this.Email));
|
|
94
|
+
}
|
|
95
|
+
setEmail(newEmail) {
|
|
96
|
+
if (!newEmail.structures || !newEmail.general) {
|
|
97
|
+
throw new Error('Injected object is not a valid PBEmail');
|
|
98
|
+
}
|
|
99
|
+
this.Email = newEmail;
|
|
100
|
+
this.reset();
|
|
101
|
+
}
|
|
102
|
+
addStructure({ currentIndex = 0, item }) {
|
|
103
|
+
const { structures = [] } = this.Email;
|
|
104
|
+
let isModule = true;
|
|
105
|
+
if (!item.data.elements.length) {
|
|
106
|
+
isModule = false;
|
|
107
|
+
item.data.elements = Array.from({ length: item.data.columns }, () => []);
|
|
108
|
+
}
|
|
109
|
+
const newStructure = Object.assign(Object.assign({ id: Date.now() }, cloneDeep(item.data)), { isModule });
|
|
110
|
+
structures.splice(currentIndex, 0, newStructure);
|
|
111
|
+
this.markForCheck();
|
|
112
|
+
return newStructure;
|
|
113
|
+
}
|
|
114
|
+
changeStructureOrder({ previousIndex = 0, currentIndex = 0 }) {
|
|
115
|
+
moveItemInArray(this.Email.structures, previousIndex, currentIndex);
|
|
116
|
+
this.markForCheck();
|
|
117
|
+
}
|
|
118
|
+
duplicateStructure(index) {
|
|
119
|
+
const { structures = [] } = this.Email;
|
|
120
|
+
const newStructure = cloneDeep(Object.assign(Object.assign({}, structures[index]), { id: Date.now() }));
|
|
121
|
+
structures.splice(index, 0, newStructure);
|
|
122
|
+
this.markForCheck();
|
|
123
|
+
return newStructure;
|
|
124
|
+
}
|
|
125
|
+
removeStructure(index) {
|
|
126
|
+
const { structures = [] } = this.Email;
|
|
127
|
+
structures.splice(index, 1);
|
|
128
|
+
this.markForCheck();
|
|
129
|
+
}
|
|
130
|
+
addBlock({ previousIndex = 0, currentIndex = 0, item, previousContainer: { id, data } }, column) {
|
|
131
|
+
// console.log(id);
|
|
132
|
+
// console.log(item);
|
|
133
|
+
if (id === 'block-elements') {
|
|
134
|
+
column.splice(currentIndex, 0, cloneDeep(item.data));
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
transferArrayItem(data, column, previousIndex, currentIndex);
|
|
138
|
+
}
|
|
139
|
+
this.markForCheck();
|
|
140
|
+
}
|
|
141
|
+
changeBlockOrder({ previousIndex = 0, currentIndex = 0 }, column) {
|
|
142
|
+
moveItemInArray(column, previousIndex, currentIndex);
|
|
143
|
+
this.markForCheck();
|
|
144
|
+
}
|
|
145
|
+
duplicateBlock(key, column, block) {
|
|
146
|
+
const newBlock = cloneDeep(block);
|
|
147
|
+
column.splice(key, 0, newBlock);
|
|
148
|
+
this.markForCheck();
|
|
149
|
+
return newBlock;
|
|
150
|
+
}
|
|
151
|
+
removeBlock(key, column) {
|
|
152
|
+
column.splice(key, 1);
|
|
153
|
+
this.markForCheck();
|
|
154
|
+
}
|
|
155
|
+
reset() {
|
|
156
|
+
this._Mjml$.next(null);
|
|
157
|
+
this._Template$.next(null);
|
|
158
|
+
this.clonedEmail = cloneDeep(this.Email);
|
|
159
|
+
this.markForCheck();
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
PbEmailObjectStoreService.ɵprov = i0.ɵɵdefineInjectable({ factory: function PbEmailObjectStoreService_Factory() { return new PbEmailObjectStoreService(i0.ɵɵinject(i1.PbUserRestApiService), i0.ɵɵinject(i2.PbStorageService), i0.ɵɵinject(i3.PbUserMiddlewaresService), i0.ɵɵinject(i4.PB_GOOGLE_FONTS), i0.ɵɵinject(i4.PB_CONFIG)); }, token: PbEmailObjectStoreService, providedIn: "root" });
|
|
163
|
+
PbEmailObjectStoreService.decorators = [
|
|
164
|
+
{ type: Injectable, args: [{
|
|
165
|
+
providedIn: 'root'
|
|
166
|
+
},] }
|
|
167
|
+
];
|
|
168
|
+
PbEmailObjectStoreService.ctorParameters = () => [
|
|
169
|
+
{ type: PbUserRestApiService },
|
|
170
|
+
{ type: PbStorageService },
|
|
171
|
+
{ type: PbUserMiddlewaresService },
|
|
172
|
+
{ type: Array, decorators: [{ type: Inject, args: [PB_GOOGLE_FONTS,] }] },
|
|
173
|
+
{ type: undefined, decorators: [{ type: Inject, args: [PB_CONFIG,] }] }
|
|
174
|
+
];
|
|
175
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGItZW1haWwtb2JqZWN0LXN0b3JlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wYi1lbWFpbC1idWlsZGVyL3NyYy9saWIvc2VydmljZXMvaW50ZXJuYWxzL3BiLWVtYWlsLW9iamVjdC1zdG9yZS9wYi1lbWFpbC1vYmplY3Qtc3RvcmUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQWUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekYsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9ELE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkYsNENBQTRDO0FBQzVDLE9BQU8sRUFBc0Msd0JBQXdCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUdwSSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9GLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7OztBQUVwRSwrQ0FBK0M7QUFFL0M7O0dBRUc7QUFJSCxNQUFNLE9BQU8seUJBQXlCO0lBaUNwQyxZQUNVLFdBQWlDLEVB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Qix3QkFBd0I7d0NBc0RoRSxNQUFNLFNBQUMsZUFBZTs0Q0FDdEIsTUFBTSxTQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjQgUG9idWNhLlxyXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKi9cclxuXHJcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDZGtEcmFnRHJvcCwgbW92ZUl0ZW1JbkFycmF5LCB0cmFuc2ZlckFycmF5SXRlbSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZXhoYXVzdE1hcCwgbWFwLCBwbHVjaywgc3dpdGNoTWFwLCB3aXRoTGF0ZXN0RnJvbSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuLy8gaW1wb3J0IHsgZ2V0RGlmZiB9IGZyb20gJ3JlY3Vyc2l2ZS1kaWZmJztcclxuaW1wb3J0IHsgSUFkZEJsb2NrRXZlbnQsIElBZGRTdHJ1Y3R1cmVFdmVudCwgUGJVc2VyTWlkZGxld2FyZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdXNlci1taWRkbGV3YXJlLXNlcnZpY2UvcGItbWlkZGxld2FyZXMuc2VydmljZSc7XHJcbmltcG9ydCB7IElGb3JSb290Q29uZiwgSU1qbWxTZXJ2ZXJSZXNwb25zZSwgSVN0cnVjdHVyZSwgSVVzZXJUZW1wbGF0ZSB9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMvaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IFRCbG9ja3MgfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL0VsZW1lbnRzJztcclxuaW1wb3J0IHsgUEJFbWFpbCB9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvRGVmYXVsdEVtYWlsJztcclxuaW1wb3J0IHsgY2xvbmVEZWVwLCBjcmVhdGVQYWRkaW5nLCBjcmVhdGVXaWR0aEhlaWdodCwgZGVmZXJPZiwgaXNFcXVhbCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzJztcclxuaW1wb3J0IHsgUGJVc2VyUmVzdEFwaVNlcnZpY2UgfSBmcm9tICcuLi8uLi91c2VyLXJlc3QtYXBpLXNlcnZpY2UvdXNlci1yZXN0LWFwaS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUGJTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3BiLXN0b3JhZ2UvcGItc3RvcmFnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUEJfQ09ORklHLCBQQl9HT09HTEVfRk9OVFMgfSBmcm9tICcuLi8uLi8uLi90b2tlbnMvdG9rZW5zJztcclxuXHJcbi8vIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL3JlY3Vyc2l2ZS1kaWZmXHJcblxyXG4vKipcclxuICogQGludGVybmFsXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQYkVtYWlsT2JqZWN0U3RvcmVTZXJ2aWNlIHtcclxuICBwdWJsaWMgRW1haWwgPSBuZXcgUEJFbWFpbCgpO1xyXG4gIHByaXZhdGUgY2xvbmVkRW1haWwgPSBjbG9uZURlZXA8UEJFbWFpbD4odGhpcy5FbWFpbCk7XHJcbiAgcHJpdmF0ZSBfRW1haWwkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxQQkVtYWlsPih0aGlzLkVtYWlsKTtcclxuICByZWFkb25seSBlbWFpbEFzT2JzZXJ2YWJsZSQgPSB0aGlzLl9FbWFpbCQuYXNPYnNlcnZhYmxlKCk7XHJcbiAgcmVhZG9ubHkgZW1haWxTdHJ1Y3R1cmVzQXNPYnNlcnZhYmxlJCA9IHRoaXMuZW1haWxBc09ic2VydmFibGUkLnBpcGUocGx1Y2soJ3N0cnVjdHVyZXMnKSk7XHJcbiAgcmVhZG9ubHkgZ2VuZXJhbEVtYWlsT3B0aW9uc0FzT2JzZXJ2YWJsZSQgPSB0aGlzLmVtYWlsQXNPYnNlcnZhYmxlJC5waXBlKHBsdWNrKCdnZW5lcmFsJykpO1xyXG4gIHJlYWRvbmx5IGN1cnJlbnRFbWFpbEhhc0NoYW5nZXMkID0gdGhpcy5lbWFpbEFzT2JzZXJ2YWJsZSQucGlwZShcclxuICAgIG1hcChjdXJyZW50ID0+ICFpc0VxdWFsKGN1cnJlbnQsIHRoaXMuY2xvbmVkRW1haWwpKVxyXG4gICAgLy8gc2hhcmVSZXBsYXkoKSxcclxuICAgIC8vIHRhcCgoaXNEaXJ0eSkgPT4gY29uc29sZS5sb2coJ0lzRGlydHknLCBpc0RpcnR5KSksXHJcbiAgKTtcclxuICByZWFkb25seSBidWlsZGVyQ29udGFpbmVyU3R5bGVzJCA9IHRoaXMuZ2VuZXJhbEVtYWlsT3B0aW9uc0FzT2JzZXJ2YWJsZSQucGlwZShcclxuICAgIG1hcCgoeyBiYWNrZ3JvdW5kLCBwYWRkaW5nLCBkaXJlY3Rpb24gfSkgPT4gKHtcclxuICAgICAgZGlyZWN0aW9uLFxyXG4gICAgICBiYWNrZ3JvdW5kUmVwZWF0OiBiYWNrZ3JvdW5kLnJlcGVhdCxcclxuICAgICAgYmFja2dyb3VuZENvbG9yOiBiYWNrZ3JvdW5kLmNvbG9yLFxyXG4gICAgICBiYWNrZ3JvdW5kU2l6ZTogY3JlYXRlV2lkdGhIZWlnaHQoYmFja2dyb3VuZC5zaXplKSxcclxuICAgICAgYmFja2dyb3VuZFBvc2l0aW9uOiAndG9wIGNlbnRlcicsXHJcbiAgICAgIC4uLmNyZWF0ZVBhZGRpbmcocGFkZGluZylcclxuICAgIH0pKVxyXG4gICk7XHJcbiAgLy8gcHVibGljIHJlYWRvbmx5IGVtYWlsQm9keVdpZHRoJCA9IHRoaXMuZ2VuZXJhbEVtYWlsT3B0aW9uc0FzT2JzZXJ2YWJsZSQucGlwZShtYXAoKHsgd2lkdGggfSkgPT4gY3JlYXRlV2lkdGhIZWlnaHQod2lkdGgpKSk7XHJcbiAgcHJpdmF0ZSBfTWptbCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xyXG4gIHB1YmxpYyByZWFkb25seSBtam1sQXNPYnNlcnZhYmxlJCA9IHRoaXMuX01qbWwkLmFzT2JzZXJ2YWJsZSgpO1xyXG4gIHByaXZhdGUgX1RlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XHJcbiAgcHVibGljIHJlYWRvbmx5IHRlbXBsYXRlQXNPYnNlcnZhYmxlJCA9IHRoaXMuX1RlbXBsYXRlJC5hc09ic2VydmFibGUoKTtcclxuICBwcml2YXRlIF9vblRlbXBsYXRlQ3JlYXRlZCQgPSBuZXcgU3ViamVjdDxhbnk+KCk7XHJcbiAgcHVibGljIHJlYWRvbmx5IG9uVGVtcGxhdGVDcmVhdGVkJCA9IHRoaXMuX29uVGVtcGxhdGVDcmVhdGVkJC5waXBlKFxyXG4gICAgd2l0aExhdGVzdEZyb20odGhpcy5fRW1haWwkLCB0aGlzLl9UZW1wbGF0ZSQsIHRoaXMuX01qbWwkKSxcclxuICAgIG1hcCgoW18sIC4uLnJlc3RdKSA9PiByZXN0KVxyXG4gICk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSB1c2VyUmVzdEFwaTogUGJVc2VyUmVzdEFwaVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHBiU3RvcmFnZTogUGJTdG9yYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgdXNlck1pZGRsZXdhcmU6IFBiVXNlck1pZGRsZXdhcmVzU2VydmljZSxcclxuICAgIEBJbmplY3QoUEJfR09PR0xFX0ZPTlRTKSBwcml2YXRlIGdvb2dsZUZvbnRzOiBzdHJpbmdbXSxcclxuICAgIEBJbmplY3QoUEJfQ09ORklHKSByZWFkb25seSBjb25maWc6IElGb3JSb290Q29uZlxyXG4gICkgeyB9XHJcblxyXG4gIGNyZWF0ZUhUTUxUZW1wbGF0ZSQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5lbWFpbEFzT2JzZXJ2YWJsZSQucGlwZShcclxuICAgICAgc3dpdGNoTWFwKGVtYWlsID0+IHtcclxuICAgICAgICBpZiAoIWVtYWlsLnN0cnVjdHVyZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BsZWFzZSBhZGQgc29tZSBzdHJ1Y3R1cmVzIGFuZCBibG9ja3MgdG8gcGVyZm9ybSB0aGlzIGFjdGlvbi4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRlZmVyT2YoZW1haWwpO1xyXG4gICAgICB9KSxcclxuICAgICAgd2l0aExhdGVzdEZyb20oY29tYmluZUxhdGVzdChbdGhpcy5jdXJyZW50RW1haWxIYXNDaGFuZ2VzJCwgdGhpcy50ZW1wbGF0ZUFzT2JzZXJ2YWJsZSRdKSksXHJcbiAgICAgIGV4aGF1c3RNYXAoKFtlbWFpbCwgW2hhc0NoYW5nZXMsIGN1cnJlbnRIdG1sXV0pID0+IHtcclxuICAgICAgICBpZiAoaGFzQ2hhbmdlcyB8fCAhY3VycmVudEh0bWwpIHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLnVzZXJNaWRkbGV3YXJlLmNyZWF0ZUhUTUxUZW1wbGF0ZShlbWFpbCkucGlwZShcclxuICAgICAgICAgICAgZXhoYXVzdE1hcChlbSA9PiB0aGlzLnVzZXJSZXN0QXBpLmNyZWF0ZUhUTUxUZW1wbGF0ZSQoeyAuLi5lbSwgZ29vZ2xlRm9udHM6IHRoaXMuZ29vZ2xlRm9udHMgfSwgdGhpcy5jb25maWcuYXBpUGF0aCkpLFxyXG4gICAgICAgICAgICBtYXAocmVzID0+IHtcclxuICAgICAgICAgICAgICBpZiAocmVzLmVycm9ycy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gcmVzLmVycm9ycy5tYXAoKHsgbWVzc2FnZSwgdGFnTmFtZSB9KSA9PiBgJHt0YWdOYW1lfSA+ICR7bWVzc2FnZX1gKS5qb2luKCdcXG4nKTtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAvLyBQb3N0LXByb2Nlc3MgSFRNTCB0byBpbmNsdWRlIGN1c3RvbSBmb250c1xyXG4gICAgICAgICAgICAgIGlmIChlbWFpbC5jdXN0b21Gb250cyAmJiBlbWFpbC5jdXN0b21Gb250cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGN1c3RvbUZvbnRMaW5rcyA9IGVtYWlsLmN1c3RvbUZvbnRzXHJcbiAgICAgICAgICAgICAgICAgIC5maWx0ZXIoZm9udCA9PiBmb250LnVybClcclxuICAgICAgICAgICAgICAgICAgLm1hcChmb250ID0+IGA8bGluayBocmVmPVwiJHtmb250LnVybH1cIiByZWw9XCJzdHlsZXNoZWV0XCIgdHlwZT1cInRleHQvY3NzXCI+YClcclxuICAgICAgICAgICAgICAgICAgLmpvaW4oJ1xcbicpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGN1c3RvbUZvbnRMaW5rcyAmJiByZXMuaHRtbC5pbmNsdWRlcygnPC9oZWFkPicpKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJlcy5odG1sID0gcmVzLmh0bWwucmVwbGFjZSgnPC9oZWFkPicsIGAke2N1c3RvbUZvbnRMaW5rc31cXG48L2hlYWQ+YCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICB0aGlzLl9Nam1sJC5uZXh0KHJlcy5tam1sKTtcclxuICAgICAgICAgICAgICB0aGlzLl9UZW1wbGF0ZSQubmV4dChyZXMuaHRtbCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5jbG9uZWRFbWFpbCA9IGNsb25lRGVlcCh0aGlzLkVtYWlsKTtcclxuICAgICAgICAgICAgICB0aGlzLl9vblRlbXBsYXRlQ3JlYXRlZCQubmV4dCgpO1xyXG4gICAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY29tYmluZUxhdGVzdChbdGhpcy5fTWptbCQsIHRoaXMuX1RlbXBsYXRlJF0pLnBpcGUoXHJcbiAgICAgICAgICBtYXAoKFttam1sLCBodG1sXSkgPT4gKHsgaHRtbCwgbWptbCwgZXJyb3JzOiBbXSB9IGFzIElNam1sU2VydmVyUmVzcG9uc2UpKVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgbWFya0ZvckNoZWNrKCkge1xyXG4gICAgdGhpcy5fRW1haWwkLm5leHQodGhpcy5FbWFpbCk7XHJcblxyXG4gICAgaWYgKHRoaXMuRW1haWwuc3RydWN0dXJlcy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5wYlN0b3JhZ2UuYWRkVGVtcGxhdGVUb0xhdGVzdFVzZWQoXHJcbiAgICAgICAgY2xvbmVEZWVwPElVc2VyVGVtcGxhdGU+KHtcclxuICAgICAgICAgIHRlbXBsYXRlRGF0YTogdGhpcy5FbWFpbCxcclxuICAgICAgICAgIHRpdGxlOiAnbGFzdC1lZGl0ZWQnLFxyXG4gICAgICAgICAgdGh1bWJQYXRoOiAnaHR0cHM6Ly92aWEucGxhY2Vob2xkZXIuY29tLzIwMHgzMDA/dGV4dD1MQVNUK0VESVRFRCdcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS5sb2coZ2V0RGlmZih0aGlzLmNsb25lZEVtYWlsLCB0aGlzLkVtYWlsKSk7XHJcbiAgfVxyXG5cclxuICBzZXRFbWFpbChuZXdFbWFpbDogUEJFbWFpbCkge1xyXG4gICAgaWYgKCFuZXdFbWFpbC5zdHJ1Y3R1cmVzIHx8ICFuZXdFbWFpbC5nZW5lcmFsKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW5qZWN0ZWQgb2JqZWN0IGlzIG5vdCBhIHZhbGlkIFBCRW1haWwnKTtcclxuICAgIH1cclxuICAgIHRoaXMuRW1haWwgPSBuZXdFbWFpbDtcclxuICAgIHRoaXMucmVzZXQoKTtcclxuICB9XHJcblxyXG4gIGFkZFN0cnVjdHVyZSh7IGN1cnJlbnRJbmRleCA9IDAsIGl0ZW0gfTogSUFkZFN0cnVjdHVyZUV2ZW50KTogSVN0cnVjdHVyZSB7XHJcbiAgICBjb25zdCB7IHN0cnVjdHVyZXMgPSBbXSB9ID0gdGhpcy5FbWFpbDtcclxuICAgIGxldCBpc01vZHVsZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKCFpdGVtLmRhdGEuZWxlbWVudHMubGVuZ3RoKSB7XHJcbiAgICAgIGlzTW9kdWxlID0gZmFsc2U7XHJcbiAgICAgIGl0ZW0uZGF0YS5lbGVtZW50cyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IGl0ZW0uZGF0YS5jb2x1bW5zIH0sICgpID0+IFtdKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBuZXdTdHJ1Y3R1cmUgPSB7IGlkOiBEYXRlLm5vdygpLCAuLi5jbG9uZURlZXA8SVN0cnVjdHVyZT4oaXRlbS5kYXRhKSwgaXNNb2R1bGUgfTtcclxuICAgIHN0cnVjdHVyZXMuc3BsaWNlKGN1cnJlbnRJbmRleCwgMCwgbmV3U3RydWN0dXJlKTtcclxuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XHJcbiAgICByZXR1cm4gbmV3U3RydWN0dXJlO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlU3RydWN0dXJlT3JkZXIoeyBwcmV2aW91c0luZGV4ID0gMCwgY3VycmVudEluZGV4ID0gMCB9OiBDZGtEcmFnRHJvcDxTZXQ8SVN0cnVjdHVyZT4+KSB7XHJcbiAgICBtb3ZlSXRlbUluQXJyYXkodGhpcy5FbWFpbC5zdHJ1Y3R1cmVzLCBwcmV2aW91c0luZGV4LCBjdXJyZW50SW5kZXgpO1xyXG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIGR1cGxpY2F0ZVN0cnVjdHVyZShpbmRleDogbnVtYmVyKTogSVN0cnVjdHVyZSB7XHJcbiAgICBjb25zdCB7IHN0cnVjdHVyZXMgPSBbXSB9ID0gdGhpcy5FbWFpbDtcclxuICAgIGNvbnN0IG5ld1N0cnVjdHVyZSA9IGNsb25lRGVlcDxJU3RydWN0dXJlPih7IC4uLnN0cnVjdHVyZXNbaW5kZXhdLCBpZDogRGF0ZS5ub3coKSB9KTtcclxuICAgIHN0cnVjdHVyZXMuc3BsaWNlKGluZGV4LCAwLCBuZXdTdHJ1Y3R1cmUpO1xyXG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcclxuICAgIHJldHVybiBuZXdTdHJ1Y3R1cmU7XHJcbiAgfVxyXG5cclxuICByZW1vdmVTdHJ1Y3R1cmUoaW5kZXg6IG51bWJlcikge1xyXG4gICAgY29uc3QgeyBzdHJ1Y3R1cmVzID0gW10gfSA9IHRoaXMuRW1haWw7XHJcbiAgICBzdHJ1Y3R1cmVzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgYWRkQmxvY2soeyBwcmV2aW91c0luZGV4ID0gMCwgY3VycmVudEluZGV4ID0gMCwgaXRlbSwgcHJldmlvdXNDb250YWluZXI6IHsgaWQsIGRhdGEgfSB9OiBJQWRkQmxvY2tFdmVudCwgY29sdW1uOiBUQmxvY2tzW10pIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKGlkKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKGl0ZW0pO1xyXG5cclxuICAgIGlmIChpZCA9PT0gJ2Jsb2NrLWVsZW1lbnRzJykge1xyXG4gICAgICBjb2x1bW4uc3BsaWNlKGN1cnJlbnRJbmRleCwgMCwgY2xvbmVEZWVwKGl0ZW0uZGF0YSkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdHJhbnNmZXJBcnJheUl0ZW0oZGF0YSwgY29sdW1uLCBwcmV2aW91c0luZGV4LCBjdXJyZW50SW5kZXgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIGNoYW5nZUJsb2NrT3JkZXIoeyBwcmV2aW91c0luZGV4ID0gMCwgY3VycmVudEluZGV4ID0gMCB9OiBDZGtEcmFnRHJvcDxUQmxvY2tzW10+LCBjb2x1bW46IFRCbG9ja3NbXSkge1xyXG4gICAgbW92ZUl0ZW1JbkFycmF5KGNvbHVtbiwgcHJldmlvdXNJbmRleCwgY3VycmVudEluZGV4KTtcclxuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBkdXBsaWNhdGVCbG9jayhrZXk6IG51bWJlciwgY29sdW1uOiBUQmxvY2tzW10sIGJsb2NrOiBUQmxvY2tzKTogVEJsb2NrcyB7XHJcbiAgICBjb25zdCBuZXdCbG9jayA9IGNsb25lRGVlcDxUQmxvY2tzPihibG9jayk7XHJcbiAgICBjb2x1bW4uc3BsaWNlKGtleSwgMCwgbmV3QmxvY2spO1xyXG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcclxuICAgIHJldHVybiBuZXdCbG9jaztcclxuICB9XHJcblxyXG4gIHJlbW92ZUJsb2NrKGtleTogbnVtYmVyLCBjb2x1bW46IFRCbG9ja3NbXSkge1xyXG4gICAgY29sdW1uLnNwbGljZShrZXksIDEpO1xyXG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIHJlc2V0KCkge1xyXG4gICAgdGhpcy5fTWptbCQubmV4dChudWxsKTtcclxuICAgIHRoaXMuX1RlbXBsYXRlJC5uZXh0KG51bGwpO1xyXG4gICAgdGhpcy5jbG9uZWRFbWFpbCA9IGNsb25lRGVlcCh0aGlzLkVtYWlsKTtcclxuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|