@sitecore-jss/sitecore-jss-angular 21.6.2 → 21.6.3-canary.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.txt +202 -202
- package/README.md +7 -7
- package/angular.json +48 -48
- package/dist/README.md +7 -7
- package/dist/components/data-resolver-factory.d.ts +13 -13
- package/dist/components/date.directive.d.ts +20 -20
- package/dist/components/editframe.component.d.ts +22 -22
- package/dist/components/file.directive.d.ts +17 -17
- package/dist/components/generic-link.directive.d.ts +20 -20
- package/dist/components/guard-resolver-factory.d.ts +11 -11
- package/dist/components/hidden-rendering.component.d.ts +7 -7
- package/dist/components/image.directive.d.ts +35 -35
- package/dist/components/link.directive.d.ts +26 -26
- package/dist/components/missing-component.component.d.ts +7 -7
- package/dist/components/placeholder-loading.directive.d.ts +8 -8
- package/dist/components/placeholder.component.d.ts +59 -59
- package/dist/components/placeholder.token.d.ts +64 -64
- package/dist/components/raw.component.d.ts +12 -12
- package/dist/components/render-component.component.d.ts +33 -33
- package/dist/components/render-each.directive.d.ts +8 -8
- package/dist/components/render-empty.directive.d.ts +8 -8
- package/dist/components/rendering-field.d.ts +41 -41
- package/dist/components/rendering.d.ts +5 -5
- package/dist/components/rich-text.directive.d.ts +18 -18
- package/dist/components/router-link.directive.d.ts +19 -19
- package/dist/components/text.directive.d.ts +16 -16
- package/dist/esm2022/components/data-resolver-factory.mjs +58 -58
- package/dist/esm2022/components/date.directive.mjs +67 -67
- package/dist/esm2022/components/editframe.component.mjs +70 -70
- package/dist/esm2022/components/file.directive.mjs +48 -48
- package/dist/esm2022/components/generic-link.directive.mjs +67 -67
- package/dist/esm2022/components/guard-resolver-factory.mjs +85 -85
- package/dist/esm2022/components/hidden-rendering.component.mjs +20 -20
- package/dist/esm2022/components/image.directive.mjs +150 -150
- package/dist/esm2022/components/link.directive.mjs +122 -122
- package/dist/esm2022/components/missing-component.component.mjs +16 -16
- package/dist/esm2022/components/placeholder-loading.directive.mjs +16 -16
- package/dist/esm2022/components/placeholder.component.mjs +273 -272
- package/dist/esm2022/components/placeholder.token.mjs +27 -27
- package/dist/esm2022/components/raw.component.mjs +38 -38
- package/dist/esm2022/components/render-component.component.mjs +98 -98
- package/dist/esm2022/components/render-each.directive.mjs +16 -16
- package/dist/esm2022/components/render-empty.directive.mjs +16 -16
- package/dist/esm2022/components/rendering-field.mjs +1 -1
- package/dist/esm2022/components/rendering.mjs +7 -7
- package/dist/esm2022/components/rich-text.directive.mjs +68 -68
- package/dist/esm2022/components/router-link.directive.mjs +49 -49
- package/dist/esm2022/components/text.directive.mjs +61 -61
- package/dist/esm2022/jss-component-factory.service.mjs +89 -88
- package/dist/esm2022/lib.module.mjs +160 -160
- package/dist/esm2022/public_api.mjs +24 -24
- package/dist/esm2022/sitecore-jss-sitecore-jss-angular.mjs +4 -4
- package/dist/esm2022/utils.mjs +16 -16
- package/dist/fesm2022/sitecore-jss-sitecore-jss-angular.mjs +1509 -1507
- package/dist/fesm2022/sitecore-jss-sitecore-jss-angular.mjs.map +1 -1
- package/dist/index.d.ts +5 -5
- package/dist/jss-component-factory.service.d.ts +26 -25
- package/dist/lib.module.d.ts +46 -46
- package/dist/package.json +2 -2
- package/dist/public_api.d.ts +25 -25
- package/dist/utils.d.ts +6 -6
- package/ng-package.json +13 -13
- package/package.json +3 -3
- package/tsconfig.json +9 -9
- package/tsconfig.spec.json +17 -17
- package/typings/README.md +2 -2
|
@@ -1,50 +1,50 @@
|
|
|
1
|
-
import { Directive, Input, } from '@angular/core';
|
|
2
|
-
import { LinkDirective } from './link.directive';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "@angular/router";
|
|
5
|
-
export class RouterLinkDirective extends LinkDirective {
|
|
6
|
-
router;
|
|
7
|
-
editable = true;
|
|
8
|
-
attrs = {};
|
|
9
|
-
field;
|
|
10
|
-
constructor(viewContainer, templateRef, renderer, elementRef, router) {
|
|
11
|
-
super(viewContainer, templateRef, renderer, elementRef);
|
|
12
|
-
this.router = router;
|
|
13
|
-
}
|
|
14
|
-
renderTemplate(props, linkText) {
|
|
15
|
-
const viewRef = this.viewContainer.createEmbeddedView(this.templateRef);
|
|
16
|
-
viewRef.rootNodes.forEach((node) => {
|
|
17
|
-
Object.entries(props).forEach(([key, propValue]) => {
|
|
18
|
-
this.updateAttribute(node, key, propValue);
|
|
19
|
-
if (key === 'href') {
|
|
20
|
-
this.renderer.listen(node, 'click', (event) => {
|
|
21
|
-
this.router.navigateByUrl(propValue);
|
|
22
|
-
// shouldn't prevent default if the link includes a fragment
|
|
23
|
-
if (!propValue.includes('#')) {
|
|
24
|
-
event.preventDefault();
|
|
25
|
-
}
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
|
-
});
|
|
29
|
-
if (node.childNodes && node.childNodes.length === 0 && linkText) {
|
|
30
|
-
node.textContent = linkText;
|
|
31
|
-
}
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RouterLinkDirective, deps: [{ token: i0.ViewContainerRef }, { token: i0.TemplateRef }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i1.Router }], target: i0.ɵɵFactoryTarget.Directive });
|
|
35
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: RouterLinkDirective, selector: "[scRouterLink]", inputs: { editable: ["scRouterLinkEditable", "editable"], attrs: ["scRouterLinkAttrs", "attrs"], field: ["scRouterLink", "field"] }, usesInheritance: true, ngImport: i0 });
|
|
36
|
-
}
|
|
37
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RouterLinkDirective, decorators: [{
|
|
38
|
-
type: Directive,
|
|
39
|
-
args: [{ selector: '[scRouterLink]' }]
|
|
40
|
-
}], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i0.TemplateRef }, { type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i1.Router }]; }, propDecorators: { editable: [{
|
|
41
|
-
type: Input,
|
|
42
|
-
args: ['scRouterLinkEditable']
|
|
43
|
-
}], attrs: [{
|
|
44
|
-
type: Input,
|
|
45
|
-
args: ['scRouterLinkAttrs']
|
|
46
|
-
}], field: [{
|
|
47
|
-
type: Input,
|
|
48
|
-
args: ['scRouterLink']
|
|
49
|
-
}] } });
|
|
1
|
+
import { Directive, Input, } from '@angular/core';
|
|
2
|
+
import { LinkDirective } from './link.directive';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/router";
|
|
5
|
+
export class RouterLinkDirective extends LinkDirective {
|
|
6
|
+
router;
|
|
7
|
+
editable = true;
|
|
8
|
+
attrs = {};
|
|
9
|
+
field;
|
|
10
|
+
constructor(viewContainer, templateRef, renderer, elementRef, router) {
|
|
11
|
+
super(viewContainer, templateRef, renderer, elementRef);
|
|
12
|
+
this.router = router;
|
|
13
|
+
}
|
|
14
|
+
renderTemplate(props, linkText) {
|
|
15
|
+
const viewRef = this.viewContainer.createEmbeddedView(this.templateRef);
|
|
16
|
+
viewRef.rootNodes.forEach((node) => {
|
|
17
|
+
Object.entries(props).forEach(([key, propValue]) => {
|
|
18
|
+
this.updateAttribute(node, key, propValue);
|
|
19
|
+
if (key === 'href') {
|
|
20
|
+
this.renderer.listen(node, 'click', (event) => {
|
|
21
|
+
this.router.navigateByUrl(propValue);
|
|
22
|
+
// shouldn't prevent default if the link includes a fragment
|
|
23
|
+
if (!propValue.includes('#')) {
|
|
24
|
+
event.preventDefault();
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
if (node.childNodes && node.childNodes.length === 0 && linkText) {
|
|
30
|
+
node.textContent = linkText;
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RouterLinkDirective, deps: [{ token: i0.ViewContainerRef }, { token: i0.TemplateRef }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i1.Router }], target: i0.ɵɵFactoryTarget.Directive });
|
|
35
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: RouterLinkDirective, selector: "[scRouterLink]", inputs: { editable: ["scRouterLinkEditable", "editable"], attrs: ["scRouterLinkAttrs", "attrs"], field: ["scRouterLink", "field"] }, usesInheritance: true, ngImport: i0 });
|
|
36
|
+
}
|
|
37
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RouterLinkDirective, decorators: [{
|
|
38
|
+
type: Directive,
|
|
39
|
+
args: [{ selector: '[scRouterLink]' }]
|
|
40
|
+
}], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i0.TemplateRef }, { type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i1.Router }]; }, propDecorators: { editable: [{
|
|
41
|
+
type: Input,
|
|
42
|
+
args: ['scRouterLinkEditable']
|
|
43
|
+
}], attrs: [{
|
|
44
|
+
type: Input,
|
|
45
|
+
args: ['scRouterLinkAttrs']
|
|
46
|
+
}], field: [{
|
|
47
|
+
type: Input,
|
|
48
|
+
args: ['scRouterLink']
|
|
49
|
+
}] } });
|
|
50
50
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLWxpbmsuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvcm91dGVyLWxpbmsuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsS0FBSyxHQUlOLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7O0FBSWpELE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxhQUFhO0lBWTFDO0lBWHFCLFFBQVEsR0FBRyxJQUFJLENBQUM7SUFFbkIsS0FBSyxHQUErQixFQUFFLENBQUM7SUFFcEMsS0FBSyxDQUFZO0lBRWhELFlBQ0UsYUFBK0IsRUFDL0IsV0FBaUMsRUFDakMsUUFBbUIsRUFDbkIsVUFBc0IsRUFDZCxNQUFjO1FBRXRCLEtBQUssQ0FBQyxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUZoRCxXQUFNLEdBQU4sTUFBTSxDQUFRO0lBR3hCLENBQUM7SUFFUyxjQUFjLENBQUMsS0FBaUMsRUFBRSxRQUFnQjtRQUMxRSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUV4RSxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ2pDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLEVBQUUsRUFBRTtnQkFDakQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUUzQyxJQUFJLEdBQUcsS0FBSyxNQUFNLEVBQUU7b0JBQ2xCLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTt3QkFDNUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7d0JBRXJDLDREQUE0RDt3QkFDNUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7NEJBQzVCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQzt5QkFDeEI7b0JBQ0gsQ0FBQyxDQUFDLENBQUM7aUJBQ0o7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUVILElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksUUFBUSxFQUFFO2dCQUMvRCxJQUFJLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQzthQUM3QjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzt3R0F4Q1UsbUJBQW1COzRGQUFuQixtQkFBbUI7OzRGQUFuQixtQkFBbUI7a0JBRC9CLFNBQVM7bUJBQUMsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUU7dU1BRVIsUUFBUTtzQkFBdEMsS0FBSzt1QkFBQyxzQkFBc0I7Z0JBRUQsS0FBSztzQkFBaEMsS0FBSzt1QkFBQyxtQkFBbUI7Z0JBRUssS0FBSztzQkFBbkMsS0FBSzt1QkFBQyxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBEaXJlY3RpdmUsXHJcbiAgRWxlbWVudFJlZixcclxuICBJbnB1dCxcclxuICBSZW5kZXJlcjIsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbiAgVmlld0NvbnRhaW5lclJlZixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgTGlua0RpcmVjdGl2ZSB9IGZyb20gJy4vbGluay5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBMaW5rRmllbGQgfSBmcm9tICcuL3JlbmRlcmluZy1maWVsZCc7XHJcblxyXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICdbc2NSb3V0ZXJMaW5rXScgfSlcclxuZXhwb3J0IGNsYXNzIFJvdXRlckxpbmtEaXJlY3RpdmUgZXh0ZW5kcyBMaW5rRGlyZWN0aXZlIHtcclxuICBASW5wdXQoJ3NjUm91dGVyTGlua0VkaXRhYmxlJykgZWRpdGFibGUgPSB0cnVlO1xyXG5cclxuICBASW5wdXQoJ3NjUm91dGVyTGlua0F0dHJzJykgYXR0cnM6IHsgW2F0dHI6IHN0cmluZ106IHN0cmluZyB9ID0ge307XHJcblxyXG4gIEBJbnB1dCgnc2NSb3V0ZXJMaW5rJykgZGVjbGFyZSBmaWVsZDogTGlua0ZpZWxkO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHZpZXdDb250YWluZXI6IFZpZXdDb250YWluZXJSZWYsXHJcbiAgICB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8dW5rbm93bj4sXHJcbiAgICByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgZWxlbWVudFJlZjogRWxlbWVudFJlZixcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXJcclxuICApIHtcclxuICAgIHN1cGVyKHZpZXdDb250YWluZXIsIHRlbXBsYXRlUmVmLCByZW5kZXJlciwgZWxlbWVudFJlZik7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgcmVuZGVyVGVtcGxhdGUocHJvcHM6IHsgW3Byb3A6IHN0cmluZ106IHN0cmluZyB9LCBsaW5rVGV4dDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCB2aWV3UmVmID0gdGhpcy52aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLnRlbXBsYXRlUmVmKTtcclxuXHJcbiAgICB2aWV3UmVmLnJvb3ROb2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XHJcbiAgICAgIE9iamVjdC5lbnRyaWVzKHByb3BzKS5mb3JFYWNoKChba2V5LCBwcm9wVmFsdWVdKSA9PiB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVBdHRyaWJ1dGUobm9kZSwga2V5LCBwcm9wVmFsdWUpO1xyXG5cclxuICAgICAgICBpZiAoa2V5ID09PSAnaHJlZicpIHtcclxuICAgICAgICAgIHRoaXMucmVuZGVyZXIubGlzdGVuKG5vZGUsICdjbGljaycsIChldmVudCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHByb3BWYWx1ZSk7XHJcblxyXG4gICAgICAgICAgICAvLyBzaG91bGRuJ3QgcHJldmVudCBkZWZhdWx0IGlmIHRoZSBsaW5rIGluY2x1ZGVzIGEgZnJhZ21lbnRcclxuICAgICAgICAgICAgaWYgKCFwcm9wVmFsdWUuaW5jbHVkZXMoJyMnKSkge1xyXG4gICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAobm9kZS5jaGlsZE5vZGVzICYmIG5vZGUuY2hpbGROb2Rlcy5sZW5ndGggPT09IDAgJiYgbGlua1RleHQpIHtcclxuICAgICAgICBub2RlLnRleHRDb250ZW50ID0gbGlua1RleHQ7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -1,62 +1,62 @@
|
|
|
1
|
-
import { Directive, Input, } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
export class TextDirective {
|
|
4
|
-
viewContainer;
|
|
5
|
-
templateRef;
|
|
6
|
-
editable = true;
|
|
7
|
-
encode = true;
|
|
8
|
-
field;
|
|
9
|
-
viewRef;
|
|
10
|
-
constructor(viewContainer, templateRef) {
|
|
11
|
-
this.viewContainer = viewContainer;
|
|
12
|
-
this.templateRef = templateRef;
|
|
13
|
-
}
|
|
14
|
-
ngOnChanges(changes) {
|
|
15
|
-
if (changes.field || changes.editable || changes.encode) {
|
|
16
|
-
if (!this.viewRef) {
|
|
17
|
-
this.viewContainer.clear();
|
|
18
|
-
this.viewRef = this.viewContainer.createEmbeddedView(this.templateRef);
|
|
19
|
-
}
|
|
20
|
-
this.updateView();
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
updateView() {
|
|
24
|
-
const field = this.field;
|
|
25
|
-
let editable = this.editable;
|
|
26
|
-
if (!field || (!field.editable && (field.value === undefined || field.value === ''))) {
|
|
27
|
-
return;
|
|
28
|
-
}
|
|
29
|
-
// can't use editable value if we want to output unencoded
|
|
30
|
-
if (!this.encode) {
|
|
31
|
-
editable = false;
|
|
32
|
-
}
|
|
33
|
-
const html = field.editable && editable ? field.editable : field.value;
|
|
34
|
-
const setDangerously = (field.editable && editable) || !this.encode;
|
|
35
|
-
this.viewRef.rootNodes.forEach((node) => {
|
|
36
|
-
if (setDangerously) {
|
|
37
|
-
node.innerHTML = html;
|
|
38
|
-
}
|
|
39
|
-
else {
|
|
40
|
-
node.textContent = html;
|
|
41
|
-
}
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TextDirective, deps: [{ token: i0.ViewContainerRef }, { token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
45
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: TextDirective, selector: "[scText]", inputs: { editable: ["scTextEditable", "editable"], encode: ["scTextEncode", "encode"], field: ["scText", "field"] }, usesOnChanges: true, ngImport: i0 });
|
|
46
|
-
}
|
|
47
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TextDirective, decorators: [{
|
|
48
|
-
type: Directive,
|
|
49
|
-
args: [{
|
|
50
|
-
selector: '[scText]',
|
|
51
|
-
}]
|
|
52
|
-
}], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i0.TemplateRef }]; }, propDecorators: { editable: [{
|
|
53
|
-
type: Input,
|
|
54
|
-
args: ['scTextEditable']
|
|
55
|
-
}], encode: [{
|
|
56
|
-
type: Input,
|
|
57
|
-
args: ['scTextEncode']
|
|
58
|
-
}], field: [{
|
|
59
|
-
type: Input,
|
|
60
|
-
args: ['scText']
|
|
61
|
-
}] } });
|
|
1
|
+
import { Directive, Input, } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class TextDirective {
|
|
4
|
+
viewContainer;
|
|
5
|
+
templateRef;
|
|
6
|
+
editable = true;
|
|
7
|
+
encode = true;
|
|
8
|
+
field;
|
|
9
|
+
viewRef;
|
|
10
|
+
constructor(viewContainer, templateRef) {
|
|
11
|
+
this.viewContainer = viewContainer;
|
|
12
|
+
this.templateRef = templateRef;
|
|
13
|
+
}
|
|
14
|
+
ngOnChanges(changes) {
|
|
15
|
+
if (changes.field || changes.editable || changes.encode) {
|
|
16
|
+
if (!this.viewRef) {
|
|
17
|
+
this.viewContainer.clear();
|
|
18
|
+
this.viewRef = this.viewContainer.createEmbeddedView(this.templateRef);
|
|
19
|
+
}
|
|
20
|
+
this.updateView();
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
updateView() {
|
|
24
|
+
const field = this.field;
|
|
25
|
+
let editable = this.editable;
|
|
26
|
+
if (!field || (!field.editable && (field.value === undefined || field.value === ''))) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
// can't use editable value if we want to output unencoded
|
|
30
|
+
if (!this.encode) {
|
|
31
|
+
editable = false;
|
|
32
|
+
}
|
|
33
|
+
const html = field.editable && editable ? field.editable : field.value;
|
|
34
|
+
const setDangerously = (field.editable && editable) || !this.encode;
|
|
35
|
+
this.viewRef.rootNodes.forEach((node) => {
|
|
36
|
+
if (setDangerously) {
|
|
37
|
+
node.innerHTML = html;
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
node.textContent = html;
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TextDirective, deps: [{ token: i0.ViewContainerRef }, { token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
45
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: TextDirective, selector: "[scText]", inputs: { editable: ["scTextEditable", "editable"], encode: ["scTextEncode", "encode"], field: ["scText", "field"] }, usesOnChanges: true, ngImport: i0 });
|
|
46
|
+
}
|
|
47
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TextDirective, decorators: [{
|
|
48
|
+
type: Directive,
|
|
49
|
+
args: [{
|
|
50
|
+
selector: '[scText]',
|
|
51
|
+
}]
|
|
52
|
+
}], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i0.TemplateRef }]; }, propDecorators: { editable: [{
|
|
53
|
+
type: Input,
|
|
54
|
+
args: ['scTextEditable']
|
|
55
|
+
}], encode: [{
|
|
56
|
+
type: Input,
|
|
57
|
+
args: ['scTextEncode']
|
|
58
|
+
}], field: [{
|
|
59
|
+
type: Input,
|
|
60
|
+
args: ['scText']
|
|
61
|
+
}] } });
|
|
62
62
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy90ZXh0LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULEtBQUssR0FLTixNQUFNLGVBQWUsQ0FBQzs7QUFNdkIsTUFBTSxPQUFPLGFBQWE7SUFTSjtJQUF5QztJQVJwQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0lBRWxCLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFFcEIsS0FBSyxDQUFZO0lBRTFCLE9BQU8sQ0FBMkI7SUFFMUMsWUFBb0IsYUFBK0IsRUFBVSxXQUFpQztRQUExRSxrQkFBYSxHQUFiLGFBQWEsQ0FBa0I7UUFBVSxnQkFBVyxHQUFYLFdBQVcsQ0FBc0I7SUFBRyxDQUFDO0lBRWxHLFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLElBQUksT0FBTyxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFO1lBQ3ZELElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNqQixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUMzQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQ3hFO1lBRUQsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1NBQ25CO0lBQ0gsQ0FBQztJQUVPLFVBQVU7UUFDaEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUN6QixJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBRTdCLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsS0FBSyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUU7WUFDcEYsT0FBTztTQUNSO1FBRUQsMERBQTBEO1FBQzFELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2hCLFFBQVEsR0FBRyxLQUFLLENBQUM7U0FDbEI7UUFFRCxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUN2RSxNQUFNLGNBQWMsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBRXBFLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ3RDLElBQUksY0FBYyxFQUFFO2dCQUNsQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQzthQUN2QjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQzthQUN6QjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzt3R0E3Q1UsYUFBYTs0RkFBYixhQUFhOzs0RkFBYixhQUFhO2tCQUh6QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxVQUFVO2lCQUNyQjtpSUFFMEIsUUFBUTtzQkFBaEMsS0FBSzt1QkFBQyxnQkFBZ0I7Z0JBRUEsTUFBTTtzQkFBNUIsS0FBSzt1QkFBQyxjQUFjO2dCQUVKLEtBQUs7c0JBQXJCLEtBQUs7dUJBQUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgRGlyZWN0aXZlLFxyXG4gIEVtYmVkZGVkVmlld1JlZixcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBUZW1wbGF0ZVJlZixcclxuICBWaWV3Q29udGFpbmVyUmVmLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUZXh0RmllbGQgfSBmcm9tICcuL3JlbmRlcmluZy1maWVsZCc7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ1tzY1RleHRdJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFRleHREaXJlY3RpdmUgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xyXG4gIEBJbnB1dCgnc2NUZXh0RWRpdGFibGUnKSBlZGl0YWJsZSA9IHRydWU7XHJcblxyXG4gIEBJbnB1dCgnc2NUZXh0RW5jb2RlJykgZW5jb2RlID0gdHJ1ZTtcclxuXHJcbiAgQElucHV0KCdzY1RleHQnKSBmaWVsZDogVGV4dEZpZWxkO1xyXG5cclxuICBwcml2YXRlIHZpZXdSZWY6IEVtYmVkZGVkVmlld1JlZjx1bmtub3duPjtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSB2aWV3Q29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmLCBwcml2YXRlIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjx1bmtub3duPikge31cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgaWYgKGNoYW5nZXMuZmllbGQgfHwgY2hhbmdlcy5lZGl0YWJsZSB8fCBjaGFuZ2VzLmVuY29kZSkge1xyXG4gICAgICBpZiAoIXRoaXMudmlld1JlZikge1xyXG4gICAgICAgIHRoaXMudmlld0NvbnRhaW5lci5jbGVhcigpO1xyXG4gICAgICAgIHRoaXMudmlld1JlZiA9IHRoaXMudmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50ZW1wbGF0ZVJlZik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMudXBkYXRlVmlldygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVWaWV3KCkge1xyXG4gICAgY29uc3QgZmllbGQgPSB0aGlzLmZpZWxkO1xyXG4gICAgbGV0IGVkaXRhYmxlID0gdGhpcy5lZGl0YWJsZTtcclxuXHJcbiAgICBpZiAoIWZpZWxkIHx8ICghZmllbGQuZWRpdGFibGUgJiYgKGZpZWxkLnZhbHVlID09PSB1bmRlZmluZWQgfHwgZmllbGQudmFsdWUgPT09ICcnKSkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGNhbid0IHVzZSBlZGl0YWJsZSB2YWx1ZSBpZiB3ZSB3YW50IHRvIG91dHB1dCB1bmVuY29kZWRcclxuICAgIGlmICghdGhpcy5lbmNvZGUpIHtcclxuICAgICAgZWRpdGFibGUgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBodG1sID0gZmllbGQuZWRpdGFibGUgJiYgZWRpdGFibGUgPyBmaWVsZC5lZGl0YWJsZSA6IGZpZWxkLnZhbHVlO1xyXG4gICAgY29uc3Qgc2V0RGFuZ2Vyb3VzbHkgPSAoZmllbGQuZWRpdGFibGUgJiYgZWRpdGFibGUpIHx8ICF0aGlzLmVuY29kZTtcclxuXHJcbiAgICB0aGlzLnZpZXdSZWYucm9vdE5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcclxuICAgICAgaWYgKHNldERhbmdlcm91c2x5KSB7XHJcbiAgICAgICAgbm9kZS5pbm5lckhUTUwgPSBodG1sO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG5vZGUudGV4dENvbnRlbnQgPSBodG1sO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -1,88 +1,89 @@
|
|
|
1
|
-
import { Inject, Injectable
|
|
2
|
-
import { DYNAMIC_COMPONENT, PLACEHOLDER_COMPONENTS, PLACEHOLDER_LAZY_COMPONENTS, } from './components/placeholder.token';
|
|
3
|
-
import { RawComponent } from './components/raw.component';
|
|
4
|
-
import { isRawRendering } from './components/rendering';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
export class JssComponentFactoryService {
|
|
7
|
-
injector;
|
|
8
|
-
components;
|
|
9
|
-
lazyComponents;
|
|
10
|
-
componentMap;
|
|
11
|
-
lazyComponentMap;
|
|
12
|
-
constructor(injector, components, lazyComponents) {
|
|
13
|
-
this.injector = injector;
|
|
14
|
-
this.components = components;
|
|
15
|
-
this.lazyComponents = lazyComponents;
|
|
16
|
-
this.componentMap = new Map();
|
|
17
|
-
this.lazyComponentMap = new Map();
|
|
18
|
-
this.components.forEach((c) => this.componentMap.set(c.name, c));
|
|
19
|
-
if (this.lazyComponents) {
|
|
20
|
-
this.lazyComponents.forEach((c) => this.lazyComponentMap.set(c.path, c));
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
getComponent(component) {
|
|
24
|
-
const loadedComponent = this.componentMap.get(component.componentName);
|
|
25
|
-
if (loadedComponent) {
|
|
26
|
-
return Promise.resolve({
|
|
27
|
-
componentDefinition: component,
|
|
28
|
-
componentImplementation: loadedComponent.type,
|
|
29
|
-
canActivate: loadedComponent.canActivate,
|
|
30
|
-
resolve: loadedComponent.resolve,
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
const lazyComponent = this.lazyComponentMap.get(component.componentName);
|
|
34
|
-
if (lazyComponent) {
|
|
35
|
-
return lazyComponent.loadChildren().then((lazyChild) => {
|
|
36
|
-
let componentType = null;
|
|
37
|
-
const moduleRef = createNgModule(lazyChild, this.injector);
|
|
38
|
-
const dynamicComponentType = moduleRef.injector.get(DYNAMIC_COMPONENT);
|
|
39
|
-
if (!dynamicComponentType) {
|
|
40
|
-
throw new Error(`JssComponentFactoryService: Lazy load module for component "${lazyComponent.path}" missing DYNAMIC_COMPONENT provider. Missing JssModule.forChild()?`);
|
|
41
|
-
}
|
|
42
|
-
if (component.componentName in dynamicComponentType) {
|
|
43
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
44
|
-
componentType = dynamicComponentType[component.componentName];
|
|
45
|
-
}
|
|
46
|
-
else {
|
|
47
|
-
if (typeof dynamicComponentType === 'function') {
|
|
48
|
-
componentType = dynamicComponentType;
|
|
49
|
-
}
|
|
50
|
-
else {
|
|
51
|
-
throw new Error(`JssComponentFactoryService: Lazy load module for component "${lazyComponent.path}" missing DYNAMIC_COMPONENT provider. Missing JssModule.forChild()?`);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
return {
|
|
55
|
-
componentDefinition: component,
|
|
56
|
-
componentImplementation: componentType,
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
static
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
1
|
+
import { createNgModule, Inject, Injectable } from '@angular/core';
|
|
2
|
+
import { DYNAMIC_COMPONENT, PLACEHOLDER_COMPONENTS, PLACEHOLDER_LAZY_COMPONENTS, } from './components/placeholder.token';
|
|
3
|
+
import { RawComponent } from './components/raw.component';
|
|
4
|
+
import { isRawRendering } from './components/rendering';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export class JssComponentFactoryService {
|
|
7
|
+
injector;
|
|
8
|
+
components;
|
|
9
|
+
lazyComponents;
|
|
10
|
+
componentMap;
|
|
11
|
+
lazyComponentMap;
|
|
12
|
+
constructor(injector, components, lazyComponents) {
|
|
13
|
+
this.injector = injector;
|
|
14
|
+
this.components = components;
|
|
15
|
+
this.lazyComponents = lazyComponents;
|
|
16
|
+
this.componentMap = new Map();
|
|
17
|
+
this.lazyComponentMap = new Map();
|
|
18
|
+
this.components.forEach((c) => this.componentMap.set(c.name, c));
|
|
19
|
+
if (this.lazyComponents) {
|
|
20
|
+
this.lazyComponents.forEach((c) => this.lazyComponentMap.set(c.path, c));
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
getComponent(component) {
|
|
24
|
+
const loadedComponent = this.componentMap.get(component.componentName);
|
|
25
|
+
if (loadedComponent) {
|
|
26
|
+
return Promise.resolve({
|
|
27
|
+
componentDefinition: component,
|
|
28
|
+
componentImplementation: loadedComponent.type,
|
|
29
|
+
canActivate: loadedComponent.canActivate,
|
|
30
|
+
resolve: loadedComponent.resolve,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
const lazyComponent = this.lazyComponentMap.get(component.componentName);
|
|
34
|
+
if (lazyComponent) {
|
|
35
|
+
return lazyComponent.loadChildren().then((lazyChild) => {
|
|
36
|
+
let componentType = null;
|
|
37
|
+
const moduleRef = createNgModule(lazyChild, this.injector);
|
|
38
|
+
const dynamicComponentType = moduleRef.injector.get(DYNAMIC_COMPONENT);
|
|
39
|
+
if (!dynamicComponentType) {
|
|
40
|
+
throw new Error(`JssComponentFactoryService: Lazy load module for component "${lazyComponent.path}" missing DYNAMIC_COMPONENT provider. Missing JssModule.forChild()?`);
|
|
41
|
+
}
|
|
42
|
+
if (component.componentName in dynamicComponentType) {
|
|
43
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
44
|
+
componentType = dynamicComponentType[component.componentName];
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
if (typeof dynamicComponentType === 'function') {
|
|
48
|
+
componentType = dynamicComponentType;
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
throw new Error(`JssComponentFactoryService: Lazy load module for component "${lazyComponent.path}" missing DYNAMIC_COMPONENT provider. Missing JssModule.forChild()?`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return {
|
|
55
|
+
componentDefinition: component,
|
|
56
|
+
componentImplementation: componentType,
|
|
57
|
+
componentModuleRef: moduleRef,
|
|
58
|
+
canActivate: lazyComponent.canActivate,
|
|
59
|
+
resolve: lazyComponent.resolve,
|
|
60
|
+
};
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
return Promise.resolve({
|
|
64
|
+
componentDefinition: component,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
getComponents(components) {
|
|
68
|
+
// acquire all components and keep them in order while handling their potential async-ness
|
|
69
|
+
return Promise.all(components.map((component) => isRawRendering(component) ? this.getRawComponent(component) : this.getComponent(component)));
|
|
70
|
+
}
|
|
71
|
+
getRawComponent(component) {
|
|
72
|
+
return Promise.resolve({
|
|
73
|
+
componentImplementation: RawComponent,
|
|
74
|
+
componentDefinition: component,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: JssComponentFactoryService, deps: [{ token: i0.Injector }, { token: PLACEHOLDER_COMPONENTS }, { token: PLACEHOLDER_LAZY_COMPONENTS }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
78
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: JssComponentFactoryService });
|
|
79
|
+
}
|
|
80
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: JssComponentFactoryService, decorators: [{
|
|
81
|
+
type: Injectable
|
|
82
|
+
}], ctorParameters: function () { return [{ type: i0.Injector }, { type: undefined, decorators: [{
|
|
83
|
+
type: Inject,
|
|
84
|
+
args: [PLACEHOLDER_COMPONENTS]
|
|
85
|
+
}] }, { type: undefined, decorators: [{
|
|
86
|
+
type: Inject,
|
|
87
|
+
args: [PLACEHOLDER_LAZY_COMPONENTS]
|
|
88
|
+
}] }]; } });
|
|
89
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNzLWNvbXBvbmVudC1mYWN0b3J5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvanNzLWNvbXBvbmVudC1mYWN0b3J5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUErQixNQUFNLGVBQWUsQ0FBQztBQUVoRyxPQUFPLEVBR0wsaUJBQWlCLEVBSWpCLHNCQUFzQixFQUN0QiwyQkFBMkIsR0FDNUIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDOztBQWdCeEQsTUFBTSxPQUFPLDBCQUEwQjtJQUszQjtJQUNnQztJQUNLO0lBTnZDLFlBQVksQ0FBb0M7SUFDaEQsZ0JBQWdCLENBQXNDO0lBRTlELFlBQ1UsUUFBa0IsRUFDYyxVQUFrQyxFQUM3QixjQUF3QztRQUY3RSxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2MsZUFBVSxHQUFWLFVBQVUsQ0FBd0I7UUFDN0IsbUJBQWMsR0FBZCxjQUFjLENBQTBCO1FBRXJGLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUVsQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRWpFLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUN2QixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFn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MEJBT04sTUFBTTsyQkFBQyxzQkFBc0I7OzBCQUM3QixNQUFNOzJCQUFDLDJCQUEyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZU5nTW9kdWxlLCBJbmplY3QsIEluamVjdGFibGUsIEluamVjdG9yLCBOZ01vZHVsZVJlZiwgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRSZW5kZXJpbmcsIEh0bWxFbGVtZW50UmVuZGVyaW5nIH0gZnJvbSAnQHNpdGVjb3JlLWpzcy9zaXRlY29yZS1qc3MvbGF5b3V0JztcclxuaW1wb3J0IHtcclxuICBDb21wb25lbnROYW1lQW5kTW9kdWxlLFxyXG4gIENvbXBvbmVudE5hbWVBbmRUeXBlLFxyXG4gIERZTkFNSUNfQ09NUE9ORU5ULFxyXG4gIEpzc0NhbkFjdGl2YXRlLFxyXG4gIEpzc0NhbkFjdGl2YXRlRm4sXHJcbiAgSnNzUmVzb2x2ZSxcclxuICBQTEFDRUhPTERFUl9DT01QT05FTlRTLFxyXG4gIFBMQUNFSE9MREVSX0xBWllfQ09NUE9ORU5UUyxcclxufSBmcm9tICcuL2NvbXBvbmVudHMvcGxhY2Vob2xkZXIudG9rZW4nO1xyXG5pbXBvcnQgeyBSYXdDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcmF3LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IGlzUmF3UmVuZGVyaW5nIH0gZnJvbSAnLi9jb21wb25lbnRzL3JlbmRlcmluZyc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudEZhY3RvcnlSZXN1bHQge1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgY29tcG9uZW50SW1wbGVtZW50YXRpb24/OiBUeXBlPGFueT47XHJcbiAgY29tcG9uZW50RGVmaW5pdGlvbjogQ29tcG9uZW50UmVuZGVyaW5nIHwgSHRtbEVsZW1lbnRSZW5kZXJpbmc7XHJcbiAgY29tcG9uZW50TW9kdWxlUmVmPzogTmdNb2R1bGVSZWY8dW5rbm93bj47XHJcbiAgY2FuQWN0aXZhdGU/OlxyXG4gICAgfCBKc3NDYW5BY3RpdmF0ZVxyXG4gICAgfCBUeXBlPEpzc0NhbkFjdGl2YXRlPlxyXG4gICAgfCBKc3NDYW5BY3RpdmF0ZUZuXHJcbiAgICB8IEFycmF5PEpzc0NhbkFjdGl2YXRlIHwgSnNzQ2FuQWN0aXZhdGVGbiB8IFR5cGU8SnNzQ2FuQWN0aXZhdGU+PjtcclxuICByZXNvbHZlPzogeyBba2V5OiBzdHJpbmddOiBKc3NSZXNvbHZlPGFueT4gfCBUeXBlPEpzc1Jlc29sdmU8YW55Pj4gfTtcclxufVxyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgSnNzQ29tcG9uZW50RmFjdG9yeVNlcnZpY2Uge1xyXG4gIHByaXZhdGUgY29tcG9uZW50TWFwOiBNYXA8c3RyaW5nLCBDb21wb25lbnROYW1lQW5kVHlwZT47XHJcbiAgcHJpdmF0ZSBsYXp5Q29tcG9uZW50TWFwOiBNYXA8c3RyaW5nLCBDb21wb25lbnROYW1lQW5kTW9kdWxlPjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcclxuICAgIEBJbmplY3QoUExBQ0VIT0xERVJfQ09NUE9ORU5UUykgcHJpdmF0ZSBjb21wb25lbnRzOiBDb21wb25lbnROYW1lQW5kVHlwZVtdLFxyXG4gICAgQEluamVjdChQTEFDRUhPTERFUl9MQVpZX0NPTVBPTkVOVFMpIHByaXZhdGUgbGF6eUNvbXBvbmVudHM6IENvbXBvbmVudE5hbWVBbmRNb2R1bGVbXVxyXG4gICkge1xyXG4gICAgdGhpcy5jb21wb25lbnRNYXAgPSBuZXcgTWFwKCk7XHJcbiAgICB0aGlzLmxhenlDb21wb25lbnRNYXAgPSBuZXcgTWFwKCk7XHJcblxyXG4gICAgdGhpcy5jb21wb25lbnRzLmZvckVhY2goKGMpID0+IHRoaXMuY29tcG9uZW50TWFwLnNldChjLm5hbWUsIGMpKTtcclxuXHJcbiAgICBpZiAodGhpcy5sYXp5Q29tcG9uZW50cykge1xyXG4gICAgICB0aGlzLmxhenlDb21wb25lbnRzLmZvckVhY2goKGMpID0+IHRoaXMubGF6eUNvbXBvbmVudE1hcC5zZXQoYy5wYXRoLCBjKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRDb21wb25lbnQoY29tcG9uZW50OiBDb21wb25lbnRSZW5kZXJpbmcpOiBQcm9taXNlPENvbXBvbmVudEZhY3RvcnlSZXN1bHQ+IHtcclxuICAgIGNvbnN0IGxvYWRlZENvbXBvbmVudCA9IHRoaXMuY29tcG9uZW50TWFwLmdldChjb21wb25lbnQuY29tcG9uZW50TmFtZSk7XHJcblxyXG4gICAgaWYgKGxvYWRlZENvbXBvbmVudCkge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcclxuICAgICAgICBjb21wb25lbnREZWZpbml0aW9uOiBjb21wb25lbnQsXHJcbiAgICAgICAgY29tcG9uZW50SW1wbGVtZW50YXRpb246IGxvYWRlZENvbXBvbmVudC50eXBlLFxyXG4gICAgICAgIGNhbkFjdGl2YXRlOiBsb2FkZWRDb21wb25lbnQuY2FuQWN0aXZhdGUsXHJcbiAgICAgICAgcmVzb2x2ZTogbG9hZGVkQ29tcG9uZW50LnJlc29sdmUsXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGxhenlDb21wb25lbnQgPSB0aGlzLmxhenlDb21wb25lbnRNYXAuZ2V0KGNvbXBvbmVudC5jb21wb25lbnROYW1lKTtcclxuXHJcbiAgICBpZiAobGF6eUNvbXBvbmVudCkge1xyXG4gICAgICByZXR1cm4gbGF6eUNvbXBvbmVudC5sb2FkQ2hpbGRyZW4oKS50aGVuKChsYXp5Q2hpbGQpID0+IHtcclxuICAgICAgICBsZXQgY29tcG9uZW50VHlwZSA9IG51bGw7XHJcbiAgICAgICAgY29uc3QgbW9kdWxlUmVmID0gY3JlYXRlTmdNb2R1bGUobGF6eUNoaWxkLCB0aGlzLmluamVjdG9yKTtcclxuICAgICAgICBjb25zdCBkeW5hbWljQ29tcG9uZW50VHlwZSA9IG1vZHVsZVJlZi5pbmplY3Rvci5nZXQoRFlOQU1JQ19DT01QT05FTlQpO1xyXG4gICAgICAgIGlmICghZHluYW1pY0NvbXBvbmVudFR5cGUpIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgICAgYEpzc0NvbXBvbmVudEZhY3RvcnlTZXJ2aWNlOiBMYXp5IGxvYWQgbW9kdWxlIGZvciBjb21wb25lbnQgXCIke2xhenlDb21wb25lbnQucGF0aH1cIiBtaXNzaW5nIERZTkFNSUNfQ09NUE9ORU5UIHByb3ZpZGVyLiBNaXNzaW5nIEpzc01vZHVsZS5mb3JDaGlsZCgpP2BcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY29tcG9uZW50LmNvbXBvbmVudE5hbWUgaW4gZHluYW1pY0NvbXBvbmVudFR5cGUpIHtcclxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgICBjb21wb25lbnRUeXBlID0gKGR5bmFtaWNDb21wb25lbnRUeXBlIGFzIHsgW3M6IHN0cmluZ106IGFueSB9KVtjb21wb25lbnQuY29tcG9uZW50TmFtZV07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmICh0eXBlb2YgZHluYW1pY0NvbXBvbmVudFR5cGUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgY29tcG9uZW50VHlwZSA9IGR5bmFtaWNDb21wb25lbnRUeXBlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgICAgIGBKc3NDb21wb25lbnRGYWN0b3J5U2VydmljZTogTGF6eSBsb2FkIG1vZHVsZSBmb3IgY29tcG9uZW50IFwiJHtsYXp5Q29tcG9uZW50LnBhdGh9XCIgbWlzc2luZyBEWU5BTUlDX0NPTVBPTkVOVCBwcm92aWRlci4gTWlzc2luZyBKc3NNb2R1bGUuZm9yQ2hpbGQoKT9gXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgY29tcG9uZW50RGVmaW5pdGlvbjogY29tcG9uZW50LFxyXG4gICAgICAgICAgY29tcG9uZW50SW1wbGVtZW50YXRpb246IGNvbXBvbmVudFR5cGUsXHJcbiAgICAgICAgICBjb21wb25lbnRNb2R1bGVSZWY6IG1vZHVsZVJlZixcclxuICAgICAgICAgIGNhbkFjdGl2YXRlOiBsYXp5Q29tcG9uZW50LmNhbkFjdGl2YXRlLFxyXG4gICAgICAgICAgcmVzb2x2ZTogbGF6eUNvbXBvbmVudC5yZXNvbHZlLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe1xyXG4gICAgICBjb21wb25lbnREZWZpbml0aW9uOiBjb21wb25lbnQsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldENvbXBvbmVudHMoXHJcbiAgICBjb21wb25lbnRzOiBBcnJheTxDb21wb25lbnRSZW5kZXJpbmcgfCBIdG1sRWxlbWVudFJlbmRlcmluZz5cclxuICApOiBQcm9taXNlPENvbXBvbmVudEZhY3RvcnlSZXN1bHRbXT4ge1xyXG4gICAgLy8gYWNxdWlyZSBhbGwgY29tcG9uZW50cyBhbmQga2VlcCB0aGVtIGluIG9yZGVyIHdoaWxlIGhhbmRsaW5nIHRoZWlyIHBvdGVudGlhbCBhc3luYy1uZXNzXHJcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoXHJcbiAgICAgIGNvbXBvbmVudHMubWFwKChjb21wb25lbnQpID0+XHJcbiAgICAgICAgaXNSYXdSZW5kZXJpbmcoY29tcG9uZW50KSA/IHRoaXMuZ2V0UmF3Q29tcG9uZW50KGNvbXBvbmVudCkgOiB0aGlzLmdldENvbXBvbmVudChjb21wb25lbnQpXHJcbiAgICAgIClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFJhd0NvbXBvbmVudChjb21wb25lbnQ6IEh0bWxFbGVtZW50UmVuZGVyaW5nKTogUHJvbWlzZTxDb21wb25lbnRGYWN0b3J5UmVzdWx0PiB7XHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcclxuICAgICAgY29tcG9uZW50SW1wbGVtZW50YXRpb246IFJhd0NvbXBvbmVudCxcclxuICAgICAgY29tcG9uZW50RGVmaW5pdGlvbjogY29tcG9uZW50LFxyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|