@messaia/cdk-cms 0.0.1-rc01
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 +24 -0
- package/esm2020/lib/cms-routing.module.mjs +52 -0
- package/esm2020/lib/cms.module.mjs +134 -0
- package/esm2020/lib/comnponents/content-form/content-form.component.mjs +237 -0
- package/esm2020/lib/comnponents/document-dialog/document-dialog.component.mjs +91 -0
- package/esm2020/lib/comnponents/template-form/template-form.component.mjs +177 -0
- package/esm2020/lib/comnponents/template-preview-dialog/template-preview-dialog.component.mjs +126 -0
- package/esm2020/lib/enums/content-type.mjs +6 -0
- package/esm2020/lib/enums/document-type.mjs +8 -0
- package/esm2020/lib/enums/faq-scope.mjs +6 -0
- package/esm2020/lib/enums/template-type.mjs +6 -0
- package/esm2020/lib/enums/wrap-tag.mjs +9 -0
- package/esm2020/lib/models/cms-settings.mjs +12 -0
- package/esm2020/lib/models/content-variable.mjs +48 -0
- package/esm2020/lib/models/content.mjs +89 -0
- package/esm2020/lib/models/document.mjs +102 -0
- package/esm2020/lib/models/faq.mjs +71 -0
- package/esm2020/lib/models/template-preview.mjs +10 -0
- package/esm2020/lib/models/template.mjs +80 -0
- package/esm2020/lib/public-api.mjs +25 -0
- package/esm2020/lib/resolvers/excluded-columns.resolve.mjs +22 -0
- package/esm2020/lib/resolvers/excluded-fields.resolve.mjs +22 -0
- package/esm2020/lib/resolvers/includes.resolve.mjs +22 -0
- package/esm2020/lib/resolvers/settings.resolve.mjs +26 -0
- package/esm2020/lib/services/content-variable.service.mjs +27 -0
- package/esm2020/lib/services/content.service.mjs +34 -0
- package/esm2020/lib/services/document.generic-service.mjs +11 -0
- package/esm2020/lib/services/document.service`.mjs +25 -0
- package/esm2020/lib/services/faq.service.mjs +18 -0
- package/esm2020/lib/services/template-preview.service.mjs +18 -0
- package/esm2020/lib/services/template.service.mjs +18 -0
- package/esm2020/messaia-cdk-cms.mjs +5 -0
- package/esm2020/public_api.mjs +5 -0
- package/fesm2015/messaia-cdk-cms.mjs +1380 -0
- package/fesm2015/messaia-cdk-cms.mjs.map +1 -0
- package/fesm2020/messaia-cdk-cms.mjs +1367 -0
- package/fesm2020/messaia-cdk-cms.mjs.map +1 -0
- package/lib/cms-routing.module.d.ts +7 -0
- package/lib/cms.module.d.ts +40 -0
- package/lib/comnponents/content-form/content-form.component.d.ts +109 -0
- package/lib/comnponents/document-dialog/document-dialog.component.d.ts +47 -0
- package/lib/comnponents/template-form/template-form.component.d.ts +74 -0
- package/lib/comnponents/template-preview-dialog/template-preview-dialog.component.d.ts +68 -0
- package/lib/enums/content-type.d.ts +4 -0
- package/lib/enums/document-type.d.ts +6 -0
- package/lib/enums/faq-scope.d.ts +4 -0
- package/lib/enums/template-type.d.ts +4 -0
- package/lib/enums/wrap-tag.d.ts +7 -0
- package/lib/models/cms-settings.d.ts +10 -0
- package/lib/models/content-variable.d.ts +9 -0
- package/lib/models/content.d.ts +19 -0
- package/lib/models/document.d.ts +26 -0
- package/lib/models/faq.d.ts +14 -0
- package/lib/models/template-preview.d.ts +17 -0
- package/lib/models/template.d.ts +16 -0
- package/lib/public-api.d.ts +21 -0
- package/lib/resolvers/excluded-columns.resolve.d.ts +14 -0
- package/lib/resolvers/excluded-fields.resolve.d.ts +14 -0
- package/lib/resolvers/includes.resolve.d.ts +14 -0
- package/lib/resolvers/settings.resolve.d.ts +15 -0
- package/lib/services/content-variable.service.d.ts +17 -0
- package/lib/services/content.service.d.ts +23 -0
- package/lib/services/document.generic-service.d.ts +9 -0
- package/lib/services/document.service`.d.ts +17 -0
- package/lib/services/faq.service.d.ts +11 -0
- package/lib/services/template-preview.service.d.ts +11 -0
- package/lib/services/template.service.d.ts +11 -0
- package/messaia-cdk-cms.d.ts +5 -0
- package/package.json +33 -0
- package/public_api.d.ts +1 -0
package/README.md
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# CdkCms
|
|
2
|
+
|
|
3
|
+
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 13.1.0.
|
|
4
|
+
|
|
5
|
+
## Code scaffolding
|
|
6
|
+
|
|
7
|
+
Run `ng generate component component-name --project cdk-cms` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project cdk-cms`.
|
|
8
|
+
> Note: Don't forget to add `--project cdk-cms` or else it will be added to the default project in your `angular.json` file.
|
|
9
|
+
|
|
10
|
+
## Build
|
|
11
|
+
|
|
12
|
+
Run `ng build cdk-cms` to build the project. The build artifacts will be stored in the `dist/` directory.
|
|
13
|
+
|
|
14
|
+
## Publishing
|
|
15
|
+
|
|
16
|
+
After building your library with `ng build cdk-cms`, go to the dist folder `cd dist/cdk-cms` and run `npm publish`.
|
|
17
|
+
|
|
18
|
+
## Running unit tests
|
|
19
|
+
|
|
20
|
+
Run `ng test cdk-cms` to execute the unit tests via [Karma](https://karma-runner.github.io).
|
|
21
|
+
|
|
22
|
+
## Further help
|
|
23
|
+
|
|
24
|
+
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { RouterModule } from '@angular/router';
|
|
3
|
+
import { AuthHelper } from '@messaia/cdk';
|
|
4
|
+
import { VdDynamicFormComponent, VdDynamicListComponent } from '@messaia/cdk-base';
|
|
5
|
+
import { ContentFormComponent } from './comnponents/content-form/content-form.component';
|
|
6
|
+
import { DocumentDialogComponent } from './comnponents/document-dialog/document-dialog.component';
|
|
7
|
+
import { TemplateFormComponent } from './comnponents/template-form/template-form.component';
|
|
8
|
+
import { ContentType } from './enums/content-type';
|
|
9
|
+
import { DocumentType } from "./enums/document-type";
|
|
10
|
+
import { Content } from './models/content';
|
|
11
|
+
import { ContentVariable } from './models/content-variable';
|
|
12
|
+
import { Document } from './models/document';
|
|
13
|
+
import { Faq } from './models/faq';
|
|
14
|
+
import { Template } from './models/template';
|
|
15
|
+
import { ExcludedColumnsResolve } from './resolvers/excluded-columns.resolve';
|
|
16
|
+
import { ExcludedFieldsResolve } from './resolvers/excluded-fields.resolve';
|
|
17
|
+
import { IncludesResolve } from './resolvers/includes.resolve';
|
|
18
|
+
import { SettingsResolve } from './resolvers/settings.resolve';
|
|
19
|
+
import * as i0 from "@angular/core";
|
|
20
|
+
import * as i1 from "@angular/router";
|
|
21
|
+
const routes = [
|
|
22
|
+
{ path: '', redirectTo: '/cms/contents/page', pathMatch: 'full' },
|
|
23
|
+
{ path: 'contents/page', component: VdDynamicListComponent, data: { classType: Content, query: { type: ContentType.Page } }, resolve: { settings: SettingsResolve, includes: IncludesResolve, excludedColumns: ExcludedColumnsResolve } },
|
|
24
|
+
{ path: 'contents/block', component: VdDynamicListComponent, data: { classType: Content, query: { type: ContentType.Block } }, resolve: { settings: SettingsResolve, includes: IncludesResolve, excludedColumns: ExcludedColumnsResolve } },
|
|
25
|
+
{ path: 'contents/:type/add', component: ContentFormComponent, resolve: { settings: SettingsResolve, excludedFields: ExcludedFieldsResolve } },
|
|
26
|
+
{ path: 'contents/:type/edit/:id', component: ContentFormComponent, resolve: { settings: SettingsResolve, excludedFields: ExcludedFieldsResolve } },
|
|
27
|
+
//
|
|
28
|
+
{ path: 'variables', component: VdDynamicListComponent, data: { classType: ContentVariable }, resolve: { settings: SettingsResolve, includes: IncludesResolve, excludedColumns: ExcludedColumnsResolve } },
|
|
29
|
+
{ path: 'variables/edit/:id', component: VdDynamicFormComponent, data: { classType: ContentVariable, subtitle: $localize `:@@variables:Variables` }, resolve: { settings: SettingsResolve, excludedFields: ExcludedFieldsResolve } },
|
|
30
|
+
{ path: 'variables/add', component: VdDynamicFormComponent, data: { classType: ContentVariable, subtitle: $localize `:@@variables:Variables` }, resolve: { settings: SettingsResolve, excludedFields: ExcludedFieldsResolve } },
|
|
31
|
+
{ path: 'templates', component: VdDynamicListComponent, data: { classType: Template, includes: 'Client' }, resolve: { settings: SettingsResolve, includes: IncludesResolve, excludedColumns: ExcludedColumnsResolve } },
|
|
32
|
+
{ path: 'templates/edit/:id', component: TemplateFormComponent, resolve: { settings: SettingsResolve, excludedFields: ExcludedFieldsResolve } },
|
|
33
|
+
{ path: 'templates/add', component: TemplateFormComponent, resolve: { settings: SettingsResolve, excludedFields: ExcludedFieldsResolve } },
|
|
34
|
+
{ path: 'faqs', component: VdDynamicListComponent, data: { classType: Faq }, resolve: { settings: SettingsResolve, includes: IncludesResolve, excludedColumns: ExcludedColumnsResolve } },
|
|
35
|
+
{ path: 'faqs/edit/:id', component: VdDynamicFormComponent, data: { classType: Faq, subtitle: $localize `:@@faq:FAQ` }, resolve: { settings: SettingsResolve, excludedFields: ExcludedFieldsResolve } },
|
|
36
|
+
{ path: 'faqs/add', component: VdDynamicFormComponent, data: { classType: Faq, query: { clientId: AuthHelper.user.clientId }, subtitle: $localize `:@@faq:FAQ` }, resolve: { settings: SettingsResolve, excludedFields: ExcludedFieldsResolve } },
|
|
37
|
+
{ path: 'documents', component: VdDynamicListComponent, data: { classType: Document, addDialogType: DocumentDialogComponent, query: { type: DocumentType.Document } }, resolve: { settings: SettingsResolve, includes: IncludesResolve, excludedColumns: ExcludedColumnsResolve } },
|
|
38
|
+
];
|
|
39
|
+
export class VdCmsRoutingModule {
|
|
40
|
+
}
|
|
41
|
+
VdCmsRoutingModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: VdCmsRoutingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
42
|
+
VdCmsRoutingModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: VdCmsRoutingModule, imports: [i1.RouterModule], exports: [RouterModule] });
|
|
43
|
+
VdCmsRoutingModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: VdCmsRoutingModule, providers: [SettingsResolve, IncludesResolve, ExcludedColumnsResolve, ExcludedFieldsResolve], imports: [[RouterModule.forChild(routes)], RouterModule] });
|
|
44
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: VdCmsRoutingModule, decorators: [{
|
|
45
|
+
type: NgModule,
|
|
46
|
+
args: [{
|
|
47
|
+
imports: [RouterModule.forChild(routes)],
|
|
48
|
+
exports: [RouterModule],
|
|
49
|
+
providers: [SettingsResolve, IncludesResolve, ExcludedColumnsResolve, ExcludedFieldsResolve]
|
|
50
|
+
}]
|
|
51
|
+
}] });
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY21zLXJvdXRpbmcubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY2RrLWNtcy9zcmMvbGliL2Ntcy1yb3V0aW5nLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQVUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25GLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ3pGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHlEQUF5RCxDQUFDO0FBQ2xHLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQzVGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDN0MsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNuQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDN0MsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDOUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDNUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixD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Qjs7K0dBQWxCLGtCQUFrQjtnSEFBbEIsa0JBQWtCLHdDQUhqQixZQUFZO2dIQUdiLGtCQUFrQixhQUZoQixDQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsc0JBQXNCLEVBQUUscUJBQXFCLENBQUMsWUFGbkYsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQzlCLFlBQVk7MkZBR2Isa0JBQWtCO2tCQUw5QixRQUFRO21CQUFDO29CQUNOLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3hDLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztvQkFDdkIsU0FBUyxFQUFFLENBQUMsZUFBZSxFQUFFLGVBQWUsRUFBRSxzQkFBc0IsRUFBRSxxQkFBcUIsQ0FBQztpQkFDL0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSb3V0ZXJNb2R1bGUsIFJvdXRlcyB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IEF1dGhIZWxwZXIgfSBmcm9tICdAbWVzc2FpYS9jZGsnO1xyXG5pbXBvcnQgeyBWZER5bmFtaWNGb3JtQ29tcG9uZW50LCBWZER5bmFtaWNMaXN0Q29tcG9uZW50IH0gZnJvbSAnQG1lc3NhaWEvY2RrLWJhc2UnO1xyXG5pbXBvcnQgeyBDb250ZW50Rm9ybUNvbXBvbmVudCB9IGZyb20gJy4vY29tbnBvbmVudHMvY29udGVudC1mb3JtL2NvbnRlbnQtZm9ybS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBEb2N1bWVudERpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vY29tbnBvbmVudHMvZG9jdW1lbnQtZGlhbG9nL2RvY3VtZW50LWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUZW1wbGF0ZUZvcm1Db21wb25lbnQgfSBmcm9tICcuL2NvbW5wb25lbnRzL3RlbXBsYXRlLWZvcm0vdGVtcGxhdGUtZm9ybS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb250ZW50VHlwZSB9IGZyb20gJy4vZW51bXMvY29udGVudC10eXBlJztcclxuaW1wb3J0IHsgRG9jdW1lbnRUeXBlIH0gZnJvbSBcIi4vZW51bXMvZG9jdW1lbnQtdHlwZVwiO1xyXG5pbXBvcnQgeyBDb250ZW50IH0gZnJvbSAnLi9tb2RlbHMvY29udGVudCc7XHJcbmltcG9ydCB7IENvbnRlbnRWYXJpYWJsZSB9IGZyb20gJy4vbW9kZWxzL2NvbnRlbnQtdmFyaWFibGUnO1xyXG5pbXBvcnQgeyBEb2N1bWVudCB9IGZyb20gJy4vbW9kZWxzL2RvY3VtZW50JztcclxuaW1wb3J0IHsgRmFxIH0gZnJvbSAnLi9tb2RlbHMvZmFxJztcclxuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tICcuL21vZGVscy90ZW1wbGF0ZSc7XHJcbmltcG9ydCB7IEV4Y2x1ZGVkQ29sdW1uc1Jlc29sdmUgfSBmcm9tICcuL3Jlc29sdmVycy9leGNsdWRlZC1jb2x1bW5zLnJlc29sdmUnO1xyXG5pbXBvcnQgeyBFeGNsdWRlZEZpZWxkc1Jlc29sdmUgfSBmcm9tICcuL3Jlc29sdmVycy9leGNsdWRlZC1maWVsZHMucmVzb2x2ZSc7XHJcbmltcG9ydCB7IEluY2x1ZGVzUmVzb2x2ZSB9IGZyb20gJy4vcmVzb2x2ZXJzL2luY2x1ZGVzLnJlc29sdmUnO1xyXG5pbXBvcnQgeyBTZXR0aW5nc1Jlc29sdmUgfSBmcm9tICcuL3Jlc29sdmVycy9zZXR0aW5ncy5yZXNvbHZlJztcclxuXHJcbmNvbnN0IHJvdXRlczogUm91dGVzID0gW1xyXG4gICAgeyBwYXRoOiAnJywgcmVkaXJlY3RUbzogJy9jbXMvY29udGVudHMvcGFnZScsIHBhdGhNYXRjaDogJ2Z1bGwnIH0sXHJcblxyXG4gICAgeyBwYXRoOiAnY29udGVudHMvcGFnZScsIGNvbXBvbmVudDogVmREeW5hbWljTGlzdENvbXBvbmVudCwgZGF0YTogeyBjbGFzc1R5cGU6IENvbnRlbnQsIHF1ZXJ5OiB7IHR5cGU6IENvbnRlbnRUeXBlLlBhZ2UgfSB9LCByZXNvbHZlOiB7IHNldHRpbmdzOiBTZXR0aW5nc1Jlc29sdmUsIGluY2x1ZGVzOiBJbmNsdWRlc1Jlc29sdmUsIGV4Y2x1ZGVkQ29sdW1uczogRXhjbHVkZWRDb2x1bW5zUmVzb2x2ZSB9IH0sXHJcbiAgICB7IHBhdGg6ICdjb250ZW50cy9ibG9jaycsIGNvbXBvbmVudDogVmREeW5hbWljTGlzdENvbXBvbmVudCwgZGF0YTogeyBjbGFzc1R5cGU6IENvbnRlbnQsIHF1ZXJ5OiB7IHR5cGU6IENvbnRlbnRUeXBlLkJsb2NrIH0gfSwgcmVzb2x2ZTogeyBzZXR0aW5nczogU2V0dGluZ3NSZXNvbHZlLCBpbmNsdWRlczogSW5jbHVkZXNSZXNvbHZlLCBleGNsdWRlZENvbHVtbnM6IEV4Y2x1ZGVkQ29sdW1uc1Jlc29sdmUgfSB9LFxyXG4gICAgeyBwYXRoOiAnY29udGVudHMvOnR5cGUvYWRkJywgY29tcG9uZW50OiBDb250ZW50Rm9ybUNvbXBvbmVudCwgcmVzb2x2ZTogeyBzZXR0aW5nczogU2V0dGluZ3NSZXNvbHZlLCBleGNsdWRlZEZpZWxkczogRXhjbHVkZWRGaWVsZHNSZXNvbHZlIH0gfSxcclxuICAgIHsgcGF0aDogJ2NvbnRlbnRzLzp0eXBlL2VkaXQvOmlkJywgY29tcG9uZW50OiBDb250ZW50Rm9ybUNvbXBvbmVudCwgcmVzb2x2ZTogeyBzZXR0aW5nczogU2V0dGluZ3NSZXNvbHZlLCBleGNsdWRlZEZpZWxkczogRXhjbHVkZWRGaWVsZHNSZXNvbHZlIH0gfSxcclxuICAgIC8vXHJcbiAgICB7IHBhdGg6ICd2YXJpYWJsZXMnLCBjb21wb25lbnQ6IFZkRHluYW1pY0xpc3RDb21wb25lbnQsIGRhdGE6IHsgY2xhc3NUeXBlOiBDb250ZW50VmFyaWFibGUgfSwgcmVzb2x2ZTogeyBzZXR0aW5nczogU2V0dGluZ3NSZXNvbHZlLCBpbmNsdWRlczogSW5jbHVkZXNSZXNvbHZlLCBleGNsdWRlZENvbHVtbnM6IEV4Y2x1ZGVkQ29sdW1uc1Jlc29sdmUgfSB9LFxyXG4gICAgeyBwYXRoOiAndmFyaWFibGVzL2VkaXQvOmlkJywgY29tcG9uZW50OiBWZER5bmFtaWNGb3JtQ29tcG9uZW50LCBkYXRhOiB7IGNsYXNzVHlwZTogQ29udGVudFZhcmlhYmxlLCBzdWJ0aXRsZTogJGxvY2FsaXplYDpAQHZhcmlhYmxlczpWYXJpYWJsZXNgIH0sIHJlc29sdmU6IHsgc2V0dGluZ3M6IFNldHRpbmdzUmVzb2x2ZSwgZXhjbHVkZWRGaWVsZHM6IEV4Y2x1ZGVkRmllbGRzUmVzb2x2ZSB9IH0sXHJcbiAgICB7IHBhdGg6ICd2YXJpYWJsZXMvYWRkJywgY29tcG9uZW50OiBWZER5bmFtaWNGb3JtQ29tcG9uZW50LCBkYXRhOiB7IGNsYXNzVHlwZTogQ29udGVudFZhcmlhYmxlLCBzdWJ0aXRsZTogJGxvY2FsaXplYDpAQHZhcmlhYmxlczpWYXJpYWJsZXNgIH0sIHJlc29sdmU6IHsgc2V0dGluZ3M6IFNldHRpbmdzUmVzb2x2ZSwgZXhjbHVkZWRGaWVsZHM6IEV4Y2x1ZGVkRmllbGRzUmVzb2x2ZSB9IH0sXHJcblxyXG4gICAgeyBwYXRoOiAndGVtcGxhdGVzJywgY29tcG9uZW50OiBWZER5bmFtaWNMaXN0Q29tcG9uZW50LCBkYXRhOiB7IGNsYXNzVHlwZTogVGVtcGxhdGUsIGluY2x1ZGVzOiAnQ2xpZW50JyB9LCByZXNvbHZlOiB7IHNldHRpbmdzOiBTZXR0aW5nc1Jlc29sdmUsIGluY2x1ZGVzOiBJbmNsdWRlc1Jlc29sdmUsIGV4Y2x1ZGVkQ29sdW1uczogRXhjbHVkZWRDb2x1bW5zUmVzb2x2ZSB9IH0sXHJcbiAgICB7IHBhdGg6ICd0ZW1wbGF0ZXMvZWRpdC86aWQnLCBjb21wb25lbnQ6IFRlbXBsYXRlRm9ybUNvbXBvbmVudCwgcmVzb2x2ZTogeyBzZXR0aW5nczogU2V0dGluZ3NSZXNvbHZlLCBleGNsdWRlZEZpZWxkczogRXhjbHVkZWRGaWVsZHNSZXNvbHZlIH0gfSxcclxuICAgIHsgcGF0aDogJ3RlbXBsYXRlcy9hZGQnLCBjb21wb25lbnQ6IFRlbXBsYXRlRm9ybUNvbXBvbmVudCwgcmVzb2x2ZTogeyBzZXR0aW5nczogU2V0dGluZ3NSZXNvbHZlLCBleGNsdWRlZEZpZWxkczogRXhjbHVkZWRGaWVsZHNSZXNvbHZlIH0gfSxcclxuXHJcbiAgICB7IHBhdGg6ICdmYXFzJywgY29tcG9uZW50OiBWZER5bmFtaWNMaXN0Q29tcG9uZW50LCBkYXRhOiB7IGNsYXNzVHlwZTogRmFxIH0sIHJlc29sdmU6IHsgc2V0dGluZ3M6IFNldHRpbmdzUmVzb2x2ZSwgaW5jbHVkZXM6IEluY2x1ZGVzUmVzb2x2ZSwgZXhjbHVkZWRDb2x1bW5zOiBFeGNsdWRlZENvbHVtbnNSZXNvbHZlIH0gfSxcclxuICAgIHsgcGF0aDogJ2ZhcXMvZWRpdC86aWQnLCBjb21wb25lbnQ6IFZkRHluYW1pY0Zvcm1Db21wb25lbnQsIGRhdGE6IHsgY2xhc3NUeXBlOiBGYXEsIHN1YnRpdGxlOiAkbG9jYWxpemVgOkBAZmFxOkZBUWAgfSwgcmVzb2x2ZTogeyBzZXR0aW5nczogU2V0dGluZ3NSZXNvbHZlLCBleGNsdWRlZEZpZWxkczogRXhjbHVkZWRGaWVsZHNSZXNvbHZlIH0gfSxcclxuICAgIHsgcGF0aDogJ2ZhcXMvYWRkJywgY29tcG9uZW50OiBWZER5bmFtaWNGb3JtQ29tcG9uZW50LCBkYXRhOiB7IGNsYXNzVHlwZTogRmFxLCBxdWVyeTogeyBjbGllbnRJZDogQXV0aEhlbHBlci51c2VyLmNsaWVudElkIH0sIHN1YnRpdGxlOiAkbG9jYWxpemVgOkBAZmFxOkZBUWAgfSwgcmVzb2x2ZTogeyBzZXR0aW5nczogU2V0dGluZ3NSZXNvbHZlLCBleGNsdWRlZEZpZWxkczogRXhjbHVkZWRGaWVsZHNSZXNvbHZlIH0gfSxcclxuXHJcbiAgICB7IHBhdGg6ICdkb2N1bWVudHMnLCBjb21wb25lbnQ6IFZkRHluYW1pY0xpc3RDb21wb25lbnQsIGRhdGE6IHsgY2xhc3NUeXBlOiBEb2N1bWVudCwgYWRkRGlhbG9nVHlwZTogRG9jdW1lbnREaWFsb2dDb21wb25lbnQsIHF1ZXJ5OiB7IHR5cGU6IERvY3VtZW50VHlwZS5Eb2N1bWVudCB9IH0sIHJlc29sdmU6IHsgc2V0dGluZ3M6IFNldHRpbmdzUmVzb2x2ZSwgaW5jbHVkZXM6IEluY2x1ZGVzUmVzb2x2ZSwgZXhjbHVkZWRDb2x1bW5zOiBFeGNsdWRlZENvbHVtbnNSZXNvbHZlIH0gfSxcclxuXTtcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgICBpbXBvcnRzOiBbUm91dGVyTW9kdWxlLmZvckNoaWxkKHJvdXRlcyldLFxyXG4gICAgZXhwb3J0czogW1JvdXRlck1vZHVsZV0sXHJcbiAgICBwcm92aWRlcnM6IFtTZXR0aW5nc1Jlc29sdmUsIEluY2x1ZGVzUmVzb2x2ZSwgRXhjbHVkZWRDb2x1bW5zUmVzb2x2ZSwgRXhjbHVkZWRGaWVsZHNSZXNvbHZlXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVmRDbXNSb3V0aW5nTW9kdWxlIHsgfSJdfQ==
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { CommonModule } from '@angular/common';
|
|
2
|
+
import { NgModule } from '@angular/core';
|
|
3
|
+
import { MatAutocompleteModule } from '@angular/material/autocomplete';
|
|
4
|
+
import { MatButtonModule } from '@angular/material/button';
|
|
5
|
+
import { MatCardModule } from '@angular/material/card';
|
|
6
|
+
import { MatCheckboxModule } from '@angular/material/checkbox';
|
|
7
|
+
import { MatChipsModule } from '@angular/material/chips';
|
|
8
|
+
import { MatExpansionModule } from '@angular/material/expansion';
|
|
9
|
+
import { MatIconModule } from '@angular/material/icon';
|
|
10
|
+
import { MatInputModule } from '@angular/material/input';
|
|
11
|
+
import { MatProgressBarModule } from '@angular/material/progress-bar';
|
|
12
|
+
import { CodemirrorModule } from '@ctrl/ngx-codemirror';
|
|
13
|
+
import { VdCommonModule, VdFormsModule, VdLayoutModule, VdMediaModule, VdSelectModule } from '@messaia/cdk';
|
|
14
|
+
import { VdCdkBaseModule } from '@messaia/cdk-base';
|
|
15
|
+
import { EditorModule } from '@tinymce/tinymce-angular';
|
|
16
|
+
import { VdCmsRoutingModule } from './cms-routing.module';
|
|
17
|
+
import { ContentFormComponent } from './comnponents/content-form/content-form.component';
|
|
18
|
+
import { DocumentDialogComponent } from './comnponents/document-dialog/document-dialog.component';
|
|
19
|
+
import { TemplateFormComponent } from './comnponents/template-form/template-form.component';
|
|
20
|
+
import { TemplatePreviewDialogComponent } from './comnponents/template-preview-dialog/template-preview-dialog.component';
|
|
21
|
+
import * as i0 from "@angular/core";
|
|
22
|
+
export { ContentFormComponent, DocumentDialogComponent, TemplateFormComponent, TemplatePreviewDialogComponent };
|
|
23
|
+
export class MaterialModule {
|
|
24
|
+
}
|
|
25
|
+
MaterialModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: MaterialModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
26
|
+
MaterialModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: MaterialModule, exports: [MatCardModule,
|
|
27
|
+
MatExpansionModule,
|
|
28
|
+
MatButtonModule,
|
|
29
|
+
MatIconModule,
|
|
30
|
+
MatChipsModule,
|
|
31
|
+
MatAutocompleteModule,
|
|
32
|
+
MatCheckboxModule,
|
|
33
|
+
MatInputModule,
|
|
34
|
+
MatProgressBarModule] });
|
|
35
|
+
MaterialModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: MaterialModule, imports: [MatCardModule,
|
|
36
|
+
MatExpansionModule,
|
|
37
|
+
MatButtonModule,
|
|
38
|
+
MatIconModule,
|
|
39
|
+
MatChipsModule,
|
|
40
|
+
MatAutocompleteModule,
|
|
41
|
+
MatCheckboxModule,
|
|
42
|
+
MatInputModule,
|
|
43
|
+
MatProgressBarModule] });
|
|
44
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: MaterialModule, decorators: [{
|
|
45
|
+
type: NgModule,
|
|
46
|
+
args: [{
|
|
47
|
+
exports: [
|
|
48
|
+
MatCardModule,
|
|
49
|
+
MatExpansionModule,
|
|
50
|
+
MatButtonModule,
|
|
51
|
+
MatIconModule,
|
|
52
|
+
MatChipsModule,
|
|
53
|
+
MatAutocompleteModule,
|
|
54
|
+
MatCheckboxModule,
|
|
55
|
+
MatInputModule,
|
|
56
|
+
MatProgressBarModule
|
|
57
|
+
]
|
|
58
|
+
}]
|
|
59
|
+
}] });
|
|
60
|
+
export class VdModule {
|
|
61
|
+
}
|
|
62
|
+
VdModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: VdModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
63
|
+
VdModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: VdModule, exports: [VdCommonModule,
|
|
64
|
+
VdLayoutModule,
|
|
65
|
+
VdMediaModule,
|
|
66
|
+
VdFormsModule,
|
|
67
|
+
VdSelectModule] });
|
|
68
|
+
VdModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: VdModule, imports: [VdCommonModule,
|
|
69
|
+
VdLayoutModule,
|
|
70
|
+
VdMediaModule,
|
|
71
|
+
VdFormsModule,
|
|
72
|
+
VdSelectModule] });
|
|
73
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: VdModule, decorators: [{
|
|
74
|
+
type: NgModule,
|
|
75
|
+
args: [{
|
|
76
|
+
exports: [
|
|
77
|
+
VdCommonModule,
|
|
78
|
+
VdLayoutModule,
|
|
79
|
+
VdMediaModule,
|
|
80
|
+
VdFormsModule,
|
|
81
|
+
VdSelectModule
|
|
82
|
+
]
|
|
83
|
+
}]
|
|
84
|
+
}] });
|
|
85
|
+
const DECLARATION = [
|
|
86
|
+
ContentFormComponent,
|
|
87
|
+
TemplateFormComponent,
|
|
88
|
+
TemplatePreviewDialogComponent,
|
|
89
|
+
DocumentDialogComponent
|
|
90
|
+
];
|
|
91
|
+
export class VdCmsModule {
|
|
92
|
+
}
|
|
93
|
+
VdCmsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: VdCmsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
94
|
+
VdCmsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: VdCmsModule, declarations: [ContentFormComponent,
|
|
95
|
+
TemplateFormComponent,
|
|
96
|
+
TemplatePreviewDialogComponent,
|
|
97
|
+
DocumentDialogComponent], imports: [CommonModule,
|
|
98
|
+
CodemirrorModule,
|
|
99
|
+
VdCdkBaseModule, VdModule, MaterialModule, VdCmsRoutingModule,
|
|
100
|
+
EditorModule], exports: [VdModule, MaterialModule, EditorModule, ContentFormComponent,
|
|
101
|
+
TemplateFormComponent,
|
|
102
|
+
TemplatePreviewDialogComponent,
|
|
103
|
+
DocumentDialogComponent] });
|
|
104
|
+
VdCmsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: VdCmsModule, imports: [[
|
|
105
|
+
CommonModule,
|
|
106
|
+
CodemirrorModule,
|
|
107
|
+
VdCdkBaseModule,
|
|
108
|
+
VdModule,
|
|
109
|
+
MaterialModule,
|
|
110
|
+
VdCmsRoutingModule,
|
|
111
|
+
EditorModule,
|
|
112
|
+
], VdModule, MaterialModule, EditorModule] });
|
|
113
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: VdCmsModule, decorators: [{
|
|
114
|
+
type: NgModule,
|
|
115
|
+
args: [{
|
|
116
|
+
imports: [
|
|
117
|
+
CommonModule,
|
|
118
|
+
CodemirrorModule,
|
|
119
|
+
VdCdkBaseModule,
|
|
120
|
+
VdModule,
|
|
121
|
+
MaterialModule,
|
|
122
|
+
VdCmsRoutingModule,
|
|
123
|
+
EditorModule,
|
|
124
|
+
],
|
|
125
|
+
declarations: [DECLARATION],
|
|
126
|
+
exports: [
|
|
127
|
+
VdModule,
|
|
128
|
+
MaterialModule,
|
|
129
|
+
EditorModule,
|
|
130
|
+
DECLARATION
|
|
131
|
+
]
|
|
132
|
+
}]
|
|
133
|
+
}] });
|
|
134
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY21zLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2Nkay1jbXMvc3JjL2xpYi9jbXMubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDNUcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUN6RixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUNsRyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUM1RixPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSx5RUFBeUUsQ0FBQzs7QUFFekgsT0FBTyxFQUNILG9CQUFvQixFQUNwQix1QkFBdUIsRUFDdkIscUJBQXFCLEVBQ3JCLDhCQUE4QixFQUNqQyxDQUFDO0FBZUYsTUFBTSxPQUFPLGNBQWM7OzJHQUFkLGNBQWM7NEdBQWQsY0FBYyxZQVhuQixhQUFhO1FBQ2Isa0JBQWtCO1FBQ2xCLGVBQWU7UUFDZixhQUFhO1FBQ2IsY0FBYztRQUNkLHFCQUFxQjtRQUNyQixpQkFBaUI7UUFDakIsY0FBYztRQUNkLG9CQUFvQjs0R0FHZixjQUFjLFlBWG5CLGFBQWE7UUFDYixrQkFBa0I7UUFDbEIsZUFBZTtRQUNmLGFBQWE7UUFDYixjQUFjO1FBQ2QscUJBQXFCO1FBQ3JCLGlCQUFpQjtRQUNqQixjQUFjO1FBQ2Qsb0JBQW9COzJGQUdmLGNBQWM7a0JBYjFCLFFBQVE7bUJBQUM7b0JBQ04sT0FBTyxFQUFFO3dCQUNMLGFBQWE7d0JBQ2Isa0JBQWtCO3dCQUNsQixlQUFlO3dCQUNmLGFBQWE7d0JBQ2IsY0FBYzt3QkFDZCxxQkFBcUI7d0JBQ3JCLGlCQUFpQjt3QkFDakIsY0FBYzt3QkFDZCxvQkFBb0I7cUJBQ3ZCO2lCQUNKOztBQVlELE1BQU0sT0FBTyxRQUFROztxR0FBUixRQUFRO3NHQUFSLFFBQVEsWUFQYixjQUFjO1FBQ2QsY0FBYztRQUNkLGFBQWE7UUFDYixhQUFhO1FBQ2IsY0FBYztzR0FHVCxRQUFRLFlBUGIsY0FBYztRQUNkLGNBQWM7UUFDZCxhQUFhO1FBQ2IsYUFBYTtRQUNiLGNBQWM7MkZBR1QsUUFBUTtrQkFUcEIsUUFBUTttQkFBQztvQkFDTixPQUFPLEVBQUU7d0JBQ0wsY0FBYzt3QkFDZCxjQUFjO3dCQUNkLGFBQWE7d0JBQ2IsYUFBYTt3QkFDYixjQUFjO3FCQUNqQjtpQkFDSjs7QUFHRCxNQUFNLFdBQVcsR0FBRztJQUNoQixvQkFBb0I7SUFDcEIscUJBQXFCO0lBQ3JCLDhCQUE4QjtJQUM5Qix1QkFBdUI7Q0FDMUIsQ0FBQztBQW9CRixNQUFNLE9BQU8sV0FBVzs7d0dBQVgsV0FBVzt5R0FBWCxXQUFXLGlCQXhCcEIsb0JBQW9CO1FBQ3BCLHFCQUFxQjtRQUNyQiw4QkFBOEI7UUFDOUIsdUJBQXVCLGFBS25CLFlBQVk7UUFDWixnQkFBZ0I7UUFDaEIsZUFBZSxFQWJWLFFBQVEsRUFYUixjQUFjLEVBMkJuQixrQkFBa0I7UUFDbEIsWUFBWSxhQWpCUCxRQUFRLEVBWFIsY0FBYyxFQWtDbkIsWUFBWSxFQXBCaEIsb0JBQW9CO1FBQ3BCLHFCQUFxQjtRQUNyQiw4QkFBOEI7UUFDOUIsdUJBQXVCO3lHQXFCZCxXQUFXLFlBakJYO1lBQ0wsWUFBWTtZQUNaLGdCQUFnQjtZQUNoQixlQUFlO1lBQ2YsUUFBUTtZQUNSLGNBQWM7WUFDZCxrQkFBa0I7WUFDbEIsWUFBWTtTQUNmLEVBbEJRLFFBQVEsRUFYUixjQUFjLEVBa0NuQixZQUFZOzJGQUlQLFdBQVc7a0JBbEJ2QixRQUFRO21CQUFDO29CQUNOLE9BQU8sRUFBRTt3QkFDTCxZQUFZO3dCQUNaLGdCQUFnQjt3QkFDaEIsZUFBZTt3QkFDZixRQUFRO3dCQUNSLGNBQWM7d0JBQ2Qsa0JBQWtCO3dCQUNsQixZQUFZO3FCQUNmO29CQUNELFlBQVksRUFBRSxDQUFDLFdBQVcsQ0FBQztvQkFDM0IsT0FBTyxFQUFFO3dCQUNMLFFBQVE7d0JBQ1IsY0FBYzt3QkFDZCxZQUFZO3dCQUNaLFdBQVc7cUJBQ2Q7aUJBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRBdXRvY29tcGxldGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9hdXRvY29tcGxldGUnO1xyXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5pbXBvcnQgeyBNYXRDYXJkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2FyZCc7XHJcbmltcG9ydCB7IE1hdENoZWNrYm94TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnO1xyXG5pbXBvcnQgeyBNYXRDaGlwc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoaXBzJztcclxuaW1wb3J0IHsgTWF0RXhwYW5zaW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZXhwYW5zaW9uJztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcclxuaW1wb3J0IHsgTWF0UHJvZ3Jlc3NCYXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1iYXInO1xyXG5pbXBvcnQgeyBDb2RlbWlycm9yTW9kdWxlIH0gZnJvbSAnQGN0cmwvbmd4LWNvZGVtaXJyb3InO1xyXG5pbXBvcnQgeyBWZENvbW1vbk1vZHVsZSwgVmRGb3Jtc01vZHVsZSwgVmRMYXlvdXRNb2R1bGUsIFZkTWVkaWFNb2R1bGUsIFZkU2VsZWN0TW9kdWxlIH0gZnJvbSAnQG1lc3NhaWEvY2RrJztcclxuaW1wb3J0IHsgVmRDZGtCYXNlTW9kdWxlIH0gZnJvbSAnQG1lc3NhaWEvY2RrLWJhc2UnO1xyXG5pbXBvcnQgeyBFZGl0b3JNb2R1bGUgfSBmcm9tICdAdGlueW1jZS90aW55bWNlLWFuZ3VsYXInO1xyXG5pbXBvcnQgeyBWZENtc1JvdXRpbmdNb2R1bGUgfSBmcm9tICcuL2Ntcy1yb3V0aW5nLm1vZHVsZSc7XHJcbmltcG9ydCB7IENvbnRlbnRGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi9jb21ucG9uZW50cy9jb250ZW50LWZvcm0vY29udGVudC1mb3JtLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IERvY3VtZW50RGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi9jb21ucG9uZW50cy9kb2N1bWVudC1kaWFsb2cvZG9jdW1lbnQtZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRlbXBsYXRlRm9ybUNvbXBvbmVudCB9IGZyb20gJy4vY29tbnBvbmVudHMvdGVtcGxhdGUtZm9ybS90ZW1wbGF0ZS1mb3JtLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRlbXBsYXRlUHJldmlld0RpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vY29tbnBvbmVudHMvdGVtcGxhdGUtcHJldmlldy1kaWFsb2cvdGVtcGxhdGUtcHJldmlldy1kaWFsb2cuY29tcG9uZW50JztcclxuXHJcbmV4cG9ydCB7XHJcbiAgICBDb250ZW50Rm9ybUNvbXBvbmVudCxcclxuICAgIERvY3VtZW50RGlhbG9nQ29tcG9uZW50LFxyXG4gICAgVGVtcGxhdGVGb3JtQ29tcG9uZW50LFxyXG4gICAgVGVtcGxhdGVQcmV2aWV3RGlhbG9nQ29tcG9uZW50XHJcbn07XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gICAgZXhwb3J0czogW1xyXG4gICAgICAgIE1hdENhcmRNb2R1bGUsXHJcbiAgICAgICAgTWF0RXhwYW5zaW9uTW9kdWxlLFxyXG4gICAgICAgIE1hdEJ1dHRvbk1vZHVsZSxcclxuICAgICAgICBNYXRJY29uTW9kdWxlLFxyXG4gICAgICAgIE1hdENoaXBzTW9kdWxlLFxyXG4gICAgICAgIE1hdEF1dG9jb21wbGV0ZU1vZHVsZSxcclxuICAgICAgICBNYXRDaGVja2JveE1vZHVsZSxcclxuICAgICAgICBNYXRJbnB1dE1vZHVsZSxcclxuICAgICAgICBNYXRQcm9ncmVzc0Jhck1vZHVsZVxyXG4gICAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTWF0ZXJpYWxNb2R1bGUgeyB9XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gICAgZXhwb3J0czogW1xyXG4gICAgICAgIFZkQ29tbW9uTW9kdWxlLFxyXG4gICAgICAgIFZkTGF5b3V0TW9kdWxlLFxyXG4gICAgICAgIFZkTWVkaWFNb2R1bGUsXHJcbiAgICAgICAgVmRGb3Jtc01vZHVsZSxcclxuICAgICAgICBWZFNlbGVjdE1vZHVsZVxyXG4gICAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVmRNb2R1bGUgeyB9XHJcblxyXG5jb25zdCBERUNMQVJBVElPTiA9IFtcclxuICAgIENvbnRlbnRGb3JtQ29tcG9uZW50LFxyXG4gICAgVGVtcGxhdGVGb3JtQ29tcG9uZW50LFxyXG4gICAgVGVtcGxhdGVQcmV2aWV3RGlhbG9nQ29tcG9uZW50LFxyXG4gICAgRG9jdW1lbnREaWFsb2dDb21wb25lbnRcclxuXTtcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgICBpbXBvcnRzOiBbXHJcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgICAgIENvZGVtaXJyb3JNb2R1bGUsXHJcbiAgICAgICAgVmRDZGtCYXNlTW9kdWxlLFxyXG4gICAgICAgIFZkTW9kdWxlLFxyXG4gICAgICAgIE1hdGVyaWFsTW9kdWxlLFxyXG4gICAgICAgIFZkQ21zUm91dGluZ01vZHVsZSxcclxuICAgICAgICBFZGl0b3JNb2R1bGUsXHJcbiAgICBdLFxyXG4gICAgZGVjbGFyYXRpb25zOiBbREVDTEFSQVRJT05dLFxyXG4gICAgZXhwb3J0czogW1xyXG4gICAgICAgIFZkTW9kdWxlLFxyXG4gICAgICAgIE1hdGVyaWFsTW9kdWxlLFxyXG4gICAgICAgIEVkaXRvck1vZHVsZSxcclxuICAgICAgICBERUNMQVJBVElPTlxyXG4gICAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVmRDbXNNb2R1bGUgeyB9Il19
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import { COMMA, ENTER } from '@angular/cdk/keycodes';
|
|
2
|
+
import { HttpClient, HttpEventType, HttpResponse } from '@angular/common/http';
|
|
3
|
+
import { ChangeDetectorRef, Component, ViewChild } from '@angular/core';
|
|
4
|
+
import { ActivatedRoute } from '@angular/router';
|
|
5
|
+
import { AuthHelper, EnumService, FileService, GenericReactiveFormComponent, ServiceLocator } from '@messaia/cdk';
|
|
6
|
+
import { EditorComponent } from '@tinymce/tinymce-angular';
|
|
7
|
+
import { ContentType } from '../../enums/content-type';
|
|
8
|
+
import { WrapTag } from '../../enums/wrap-tag';
|
|
9
|
+
import { CmsSettings } from '../../models/cms-settings';
|
|
10
|
+
import { Content } from '../../models/content';
|
|
11
|
+
import { ContentService } from '../../services/content.service';
|
|
12
|
+
import * as i0 from "@angular/core";
|
|
13
|
+
import * as i1 from "../../services/content.service";
|
|
14
|
+
import * as i2 from "@messaia/cdk";
|
|
15
|
+
import * as i3 from "@angular/common/http";
|
|
16
|
+
import * as i4 from "@angular/router";
|
|
17
|
+
import * as i5 from "@angular/material/expansion";
|
|
18
|
+
import * as i6 from "@angular/material/form-field";
|
|
19
|
+
import * as i7 from "@angular/material/chips";
|
|
20
|
+
import * as i8 from "@angular/material/icon";
|
|
21
|
+
import * as i9 from "@angular/material/autocomplete";
|
|
22
|
+
import * as i10 from "@angular/material/core";
|
|
23
|
+
import * as i11 from "@tinymce/tinymce-angular";
|
|
24
|
+
import * as i12 from "@angular/material/checkbox";
|
|
25
|
+
import * as i13 from "@angular/material/button";
|
|
26
|
+
import * as i14 from "@messaia/cdk-base";
|
|
27
|
+
import * as i15 from "@angular/common";
|
|
28
|
+
import * as i16 from "@angular/forms";
|
|
29
|
+
import * as i17 from "@angular/material/input";
|
|
30
|
+
export class ContentFormComponent extends GenericReactiveFormComponent {
|
|
31
|
+
/**
|
|
32
|
+
* Constructor
|
|
33
|
+
*/
|
|
34
|
+
constructor(service, fileService, httpClient, route, changeDetectorRef) {
|
|
35
|
+
super(Content, service, route, changeDetectorRef);
|
|
36
|
+
this.service = service;
|
|
37
|
+
this.fileService = fileService;
|
|
38
|
+
this.httpClient = httpClient;
|
|
39
|
+
this.route = route;
|
|
40
|
+
this.changeDetectorRef = changeDetectorRef;
|
|
41
|
+
/**
|
|
42
|
+
* Used to disable some properties for client manager
|
|
43
|
+
*/
|
|
44
|
+
this.isClientAdmin = AuthHelper.hasRole('ClientAdministrator') || AuthHelper.hasRole('ClientManager');
|
|
45
|
+
/**
|
|
46
|
+
* Content status
|
|
47
|
+
*/
|
|
48
|
+
this.ContentType = ContentType;
|
|
49
|
+
/**
|
|
50
|
+
* Wrap tag enum
|
|
51
|
+
*/
|
|
52
|
+
this.wrapTags = EnumService.toArray(WrapTag);
|
|
53
|
+
/**
|
|
54
|
+
* Separator keys codes
|
|
55
|
+
*/
|
|
56
|
+
this.separatorKeysCodes = [ENTER, COMMA];
|
|
57
|
+
this.settings = ServiceLocator.getService(CmsSettings);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Gets the aliases control
|
|
61
|
+
*/
|
|
62
|
+
get aliasesControl() { return this.form.controls.aliases; }
|
|
63
|
+
/**
|
|
64
|
+
* Lifecycle hook that is called after data-bound properties
|
|
65
|
+
* of a directive are initialized.
|
|
66
|
+
*/
|
|
67
|
+
ngOnInit() {
|
|
68
|
+
/* Filter by status, if any */
|
|
69
|
+
this.routeSubscription = this.route.params.subscribe((params) => {
|
|
70
|
+
this.type = EnumService.parse(ContentType, params.type);
|
|
71
|
+
});
|
|
72
|
+
super.ngOnInit();
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Checks if the specified alias is available.
|
|
76
|
+
*/
|
|
77
|
+
isAliasAvailable() {
|
|
78
|
+
this.service.isAliasAvailable(this.item).subscribe((x) => {
|
|
79
|
+
this.formElement.form.controls['alias'].setErrors(x ? null : { 'inUse': true });
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Set client
|
|
84
|
+
*/
|
|
85
|
+
setClient() {
|
|
86
|
+
this.isEditorInitialzed = false;
|
|
87
|
+
this.configEditor();
|
|
88
|
+
this.editorComponent?.editor?.setContent(this.item.body);
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Add a aliases to the current field
|
|
92
|
+
* @param event
|
|
93
|
+
*/
|
|
94
|
+
addAliases(event) {
|
|
95
|
+
/* Add our aliass */
|
|
96
|
+
if ((event.value || '').trim()) {
|
|
97
|
+
this.aliasesControl.setValue([...this.aliasesControl.value, event.value.trim()]);
|
|
98
|
+
this.aliasesControl.updateValueAndValidity();
|
|
99
|
+
this.aliasesControl.markAsDirty();
|
|
100
|
+
}
|
|
101
|
+
/* Reset the input value */
|
|
102
|
+
if (event.input) {
|
|
103
|
+
event.input.value = '';
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Removes a aliases
|
|
108
|
+
* @param aliass
|
|
109
|
+
*/
|
|
110
|
+
removeAliases(aliass) {
|
|
111
|
+
const index = this.aliasesControl.value.indexOf(aliass);
|
|
112
|
+
if (index >= 0) {
|
|
113
|
+
this.aliasesControl.value.splice(index, 1);
|
|
114
|
+
this.aliasesControl.updateValueAndValidity();
|
|
115
|
+
this.aliasesControl.markAsDirty();
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Creates a new instance of the Template
|
|
120
|
+
*/
|
|
121
|
+
newInstance() {
|
|
122
|
+
let item = Object.assign(new Content(), {
|
|
123
|
+
type: this.type,
|
|
124
|
+
wrapTag: this.type == ContentType.Block ? '' : WrapTag.Section,
|
|
125
|
+
showTitle: this.type == ContentType.Block ? false : true
|
|
126
|
+
});
|
|
127
|
+
/* Get clientId */
|
|
128
|
+
if (!this.isEditMode && this.isClientAdmin) {
|
|
129
|
+
item.clientId = this.currentUser.clientId;
|
|
130
|
+
}
|
|
131
|
+
/* Init the tinymce editor */
|
|
132
|
+
this.isEditorInitialzed = false;
|
|
133
|
+
return item;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Event emitted when the form has built.
|
|
137
|
+
*/
|
|
138
|
+
onAfterFormBuild() {
|
|
139
|
+
super.onAfterFormBuild();
|
|
140
|
+
this.configEditor();
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Configures the tinymce editor
|
|
144
|
+
*/
|
|
145
|
+
configEditor() {
|
|
146
|
+
if (this.settings?.multitenantable && this.formValue?.clientId && this.settings?.styleUrlEndpoint) {
|
|
147
|
+
this.httpClient.get(this.settings.styleUrlEndpoint(this.formValue.clientId)).subscribe((x) => {
|
|
148
|
+
super.initEditor(Object.assign(this.getEditorConfig(), { content_css: x.value }));
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
super.initEditor(this.getEditorConfig());
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Creates config for the editor
|
|
157
|
+
* @returns
|
|
158
|
+
*/
|
|
159
|
+
getEditorConfig() {
|
|
160
|
+
return {
|
|
161
|
+
toolbar: `${this.editorToolbar} snippetsButton`,
|
|
162
|
+
force_p_newlines: false,
|
|
163
|
+
forced_root_block: '',
|
|
164
|
+
height: this.settings?.editorHeight || '700px',
|
|
165
|
+
file_picker_types: 'file image media',
|
|
166
|
+
image_advtab: true,
|
|
167
|
+
images_upload_base_path: `${this.appSetting.apiUrl}file/`,
|
|
168
|
+
images_upload_url: 'backend/api/files',
|
|
169
|
+
allow_html_in_named_anchor: true,
|
|
170
|
+
valid_children: '+a[div|span|img|h1|h2|h3|h4|h5|h6|br|hr|video],+span[i]',
|
|
171
|
+
valid_elements: '*[*]',
|
|
172
|
+
images_upload_handler: (blobInfo, success, failure) => {
|
|
173
|
+
this.fileService.upload(blobInfo.blob(), `upload`, {
|
|
174
|
+
clientId: this.form?.value?.clientId,
|
|
175
|
+
path: 'images',
|
|
176
|
+
isPublic: true
|
|
177
|
+
}).subscribe(event => {
|
|
178
|
+
if (event.type === HttpEventType.UploadProgress) {
|
|
179
|
+
/* Calculate the progress percentage */
|
|
180
|
+
const percentDone = Math.round(100 * event.loaded / event.total);
|
|
181
|
+
/* Pass the percentage into the progress-stream */
|
|
182
|
+
console.info(percentDone);
|
|
183
|
+
}
|
|
184
|
+
else if (event instanceof HttpResponse) {
|
|
185
|
+
success(event.body.publicLink);
|
|
186
|
+
}
|
|
187
|
+
});
|
|
188
|
+
},
|
|
189
|
+
setup: function (editor) {
|
|
190
|
+
/* Add snippets button to the toolbar */
|
|
191
|
+
editor.ui.registry.addMenuButton('snippetsButton', {
|
|
192
|
+
text: 'Snippets',
|
|
193
|
+
fetch: function (callback) {
|
|
194
|
+
callback([
|
|
195
|
+
{
|
|
196
|
+
type: 'menuitem',
|
|
197
|
+
text: 'Variable',
|
|
198
|
+
onAction: () => editor.insertContent('{{var name}}')
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
type: 'menuitem',
|
|
202
|
+
text: 'Block',
|
|
203
|
+
onAction: () => editor.insertContent('{{block name="..."}}')
|
|
204
|
+
},
|
|
205
|
+
{
|
|
206
|
+
type: 'menuitem',
|
|
207
|
+
text: 'View Component',
|
|
208
|
+
onAction: () => editor.insertContent('{{vc name="..."}}')
|
|
209
|
+
},
|
|
210
|
+
]);
|
|
211
|
+
}
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Cleanup subscriptions when this component is destroyed.
|
|
218
|
+
*/
|
|
219
|
+
ngOnDestroy() {
|
|
220
|
+
if (this.routeSubscription) {
|
|
221
|
+
this.routeSubscription.unsubscribe();
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
ContentFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: ContentFormComponent, deps: [{ token: i1.ContentService }, { token: i2.FileService }, { token: i3.HttpClient }, { token: i4.ActivatedRoute }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
226
|
+
ContentFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.0", type: ContentFormComponent, selector: "app-content-form", viewQueries: [{ propertyName: "formElement", first: true, predicate: ["form"], descendants: true }, { propertyName: "editorComponent", first: true, predicate: ["editor"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<vd-layout-nav color=\"primary\" [backNavigationRoute]=\"listRoute\" toolbarTitle=\"Content\" i18n-toolbarTitle [editMode]=\"isEditMode\" [menuItems]=\"toolbarMenuItems\" (reload)=\"reloadPage()\">\r\n\t<form *ngIf=\"form\" [formGroup]=\"form\" novalidate (ngSubmit)=\"save()\">\r\n\t\t<vd-layout-card-over class=\"accordion\" cardWidth=\"70\" color=\"primary\" flex>\r\n\t\t\t<mat-accordion [multi]=\"!isEditMode\">\r\n\t\t\t\t<!-- #region Details -->\r\n\t\t\t\t<mat-expansion-panel expanded=\"true\" id=\"details\">\r\n\t\t\t\t\t<mat-expansion-panel-header>\r\n\t\t\t\t\t\t<mat-panel-title i18n>Details</mat-panel-title>\r\n\t\t\t\t\t</mat-expansion-panel-header>\r\n\r\n\t\t\t\t\t<!-- #region Client-->\r\n\t\t\t\t\t<div layout-gt-sm=\"row\" layout=\"column\" *ngIf=\"settings?.multitenantable && !isClientAdmin\">\r\n\t\t\t\t\t\t<mat-form-field flex layout-margin appearance=\"outline\">\r\n\t\t\t\t\t\t\t<mat-label i18n>Client</mat-label>\r\n\t\t\t\t\t\t\t<vd-select formControlName=\"clientId\" endpoint=\"client?enabled=true\" layout=\"column\" (change)=\"setClient()\" [required]=\"!item.default\" flex></vd-select>\r\n\t\t\t\t\t\t\t<mat-error *ngFor=\"let errorMessage of form.controls.clientId['errorMessages']\">{{errorMessage}}</mat-error>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t<!-- #region Title -->\r\n\t\t\t\t\t<div layout=\"row\" flex>\r\n\t\t\t\t\t\t<mat-form-field flex layout-margin appearance=\"outline\">\r\n\t\t\t\t\t\t\t<mat-label i18n>Title</mat-label>\r\n\t\t\t\t\t\t\t<input matInput formControlName=\"title\">\r\n\t\t\t\t\t\t\t<mat-error *ngFor=\"let errorMessage of form.controls.title['errorMessages']\">{{errorMessage}}</mat-error>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t<!-- #region Name & Alias -->\r\n\t\t\t\t\t<div layout=\"row\" flex>\r\n\t\t\t\t\t\t<mat-form-field flex layout-margin appearance=\"outline\">\r\n\t\t\t\t\t\t\t<mat-label i18n>Name</mat-label>\r\n\t\t\t\t\t\t\t<input matInput formControlName=\"name\">\r\n\t\t\t\t\t\t\t<mat-error *ngFor=\"let errorMessage of form.controls.name['errorMessages']\">{{errorMessage}}</mat-error>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t<!-- #region Aliases -->\r\n\t\t\t\t\t<div layout=\"row\" flex>\r\n\t\t\t\t\t\t<mat-form-field flex layout-margin appearance=\"outline\">\r\n\t\t\t\t\t\t\t<mat-label>Aliases</mat-label>\r\n\t\t\t\t\t\t\t<mat-chip-list #chipList formControlName=\"aliases\">\r\n\t\t\t\t\t\t\t\t<mat-chip *ngFor=\"let alias of form.controls.aliases.value\" (removed)=\"removeAliases(alias)\">\r\n\t\t\t\t\t\t\t\t\t<span>{{alias}}</span>\r\n\t\t\t\t\t\t\t\t\t<mat-icon matChipRemove>cancel</mat-icon>\r\n\t\t\t\t\t\t\t\t</mat-chip>\r\n\t\t\t\t\t\t\t\t<input type=\"text\" [matChipInputFor]=\"chipList\" [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\" matChipInputAddOnBlur=\"true\" (matChipInputTokenEnd)=\"addAliases($event)\">\r\n\t\t\t\t\t\t\t</mat-chip-list>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t<!-- #region wrap tag and layout -->\r\n\t\t\t\t\t<div layout=\"row\" flex>\r\n\t\t\t\t\t\t<mat-form-field flex layout-margin appearance=\"outline\" *ngIf=\"type != ContentType.Block\">\r\n\t\t\t\t\t\t\t<mat-label i18n>Wrap</mat-label>\r\n\t\t\t\t\t\t\t<input matInput formControlName=\"wrapTag\">\r\n\t\t\t\t\t\t\t<mat-autocomplete #wrapTagsAutocomplete=\"matAutocomplete\">\r\n\t\t\t\t\t\t\t\t<mat-option *ngFor=\"let option of wrapTags\" [value]=\"option.name\">{{option.name}}</mat-option>\r\n\t\t\t\t\t\t\t</mat-autocomplete>\r\n\t\t\t\t\t\t\t<mat-error *ngFor=\"let errorMessage of form.controls.wrapTag['errorMessages']\">{{errorMessage}}</mat-error>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\r\n\t\t\t\t\t\t<mat-form-field flex layout-margin appearance=\"outline\">\r\n\t\t\t\t\t\t\t<mat-label>Layout</mat-label>\r\n\t\t\t\t\t\t\t<input matInput formControlName=\"layout\">\r\n\t\t\t\t\t\t\t<mat-error *ngFor=\"let errorMessage of form.controls.layout['errorMessages']\">{{errorMessage}}</mat-error>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\t\t\t\t\t<!-- *ngIf=\"item.clientId && isEditorInitialzed\" -->\r\n\t\t\t\t\t<!-- #region Body -->\r\n\t\t\t\t\t<div layout-gt-sm=\"row\" layout=\"column\" *ngIf=\"isEditorInitialzed\">\r\n\t\t\t\t\t\t<mat-form-field flex layout-margin>\r\n\t\t\t\t\t\t\t<mat-label i18n>Content</mat-label>\r\n\t\t\t\t\t\t\t<editor #editor formControlName=\"body\" tinyMatFormControl [(init)]=\"editorConfig\" required></editor>\r\n\t\t\t\t\t\t\t<mat-error *ngFor=\"let errorMessage of form.controls.body['errorMessages']\">{{errorMessage}}</mat-error>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t<!-- #region Script -->\r\n\t\t\t\t\t<div layout=\"row\" flex>\r\n\t\t\t\t\t\t<mat-form-field flex layout-margin appearance=\"outline\">\r\n\t\t\t\t\t\t\t<mat-label>Script</mat-label>\r\n\t\t\t\t\t\t\t<textarea matInput autocomplete=\"off\" formControlName=\"script\"></textarea>\r\n\t\t\t\t\t\t\t<mat-error *ngFor=\"let errorMessage of form.controls.script['errorMessages']\">{{errorMessage}}</mat-error>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t<!-- #region Style -->\r\n\t\t\t\t\t<div layout=\"row\" flex>\r\n\t\t\t\t\t\t<mat-form-field flex layout-margin appearance=\"outline\">\r\n\t\t\t\t\t\t\t<mat-label>Style</mat-label>\r\n\t\t\t\t\t\t\t<textarea matInput autocomplete=\"off\" formControlName=\"style\"></textarea>\r\n\t\t\t\t\t\t\t<mat-error *ngFor=\"let errorMessage of form.controls.style['errorMessages']\">{{errorMessage}}</mat-error>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t<!-- #region Show title -->\r\n\t\t\t\t\t<div layout-gt-sm=\"row\" layout=\"column\">\r\n\t\t\t\t\t\t<div layout-margin appearance=\"outline\" class=\"push-top\">\r\n\t\t\t\t\t\t\t<mat-checkbox formControlName=\"showTitle\" i18n>Show title</mat-checkbox>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t<!-- #region Default -->\r\n\t\t\t\t\t<div layout-gt-sm=\"row\" layout=\"column\" *ngIf=\"!isClientAdmin\">\r\n\t\t\t\t\t\t<div layout-margin appearance=\"outline\">\r\n\t\t\t\t\t\t\t<mat-checkbox name=\"default\" formControlName=\"default\" (change)=\"item.clientId = item.default ? null : item.clientId\">Default</mat-checkbox>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t<!-- #region Enabled -->\r\n\t\t\t\t\t<div layout-gt-sm=\"row\" layout=\"column\">\r\n\t\t\t\t\t\t<div layout-margin appearance=\"outline\" class=\"push-bottom\">\r\n\t\t\t\t\t\t\t<mat-checkbox name=\"enabled\" formControlName=\"enabled\" i18n>Active</mat-checkbox>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t<mat-action-row>\r\n\t\t\t\t\t\t<button type=\"submit\" mat-flat-button color=\"primary\" [disabled]=\"isSaving\" i18n>Save</button>\r\n\t\t\t\t\t\t<button type=\"button\" mat-button *ngIf=\"isEditMode\" (click)=\"apply()\" [disabled]=\"isSaving\" i18n>Apply</button>\r\n\t\t\t\t\t\t<button type=\"button\" mat-button (click)=\"back()\" i18n>Cancel</button>\r\n\t\t\t\t\t\t<span flex></span>\r\n\t\t\t\t\t</mat-action-row>\r\n\t\t\t\t</mat-expansion-panel>\r\n\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t<!-- #region Audit -->\r\n\t\t\t\t<mat-expansion-panel id=\"audit\" *ngIf=\"isEditMode\">\r\n\t\t\t\t\t<mat-expansion-panel-header>\r\n\t\t\t\t\t\t<mat-panel-title>\r\n\t\t\t\t\t\t\t<span i18n>Audit</span>\r\n\t\t\t\t\t\t</mat-panel-title>\r\n\t\t\t\t\t</mat-expansion-panel-header>\r\n\t\t\t\t\t<vd-audit [item]=\"item\"> </vd-audit>\r\n\t\t\t\t\t<mat-action-row>\r\n\t\t\t\t\t\t<button type=\"button\" mat-flat-button color=\"accent\" (click)=\"back()\" i18n>Close</button>\r\n\t\t\t\t\t\t<span flex></span>\r\n\t\t\t\t\t</mat-action-row>\r\n\t\t\t\t</mat-expansion-panel>\r\n\t\t\t\t<!-- #endregion -->\r\n\t\t\t</mat-accordion>\r\n\t\t</vd-layout-card-over>\r\n\t</form>\r\n</vd-layout-nav>", components: [{ type: i2.VdLayoutNavComponent, selector: "vd-layout-nav", inputs: ["toolbarTitle", "editMode", "menuItems", "icon", "logo", "color", "hideToggle", "backNavigationRoute", "navigationRoute"], outputs: ["reload"] }, { type: i2.VdLayoutCardOverComponent, selector: "vd-layout-card-over", inputs: ["cardTitle", "cardSubtitle", "cardWidth", "color"] }, { type: i5.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["disabled", "expanded", "hideToggle", "togglePosition"], outputs: ["opened", "closed", "expandedChange", "afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { type: i5.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["tabIndex", "expandedHeight", "collapsedHeight"] }, { type: i6.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i2.VdSelectComponent, selector: "vd-select", inputs: ["multiple", "disabled", "sorted", "textPrefix", "endpoint", "params", "projection", "enum", "key", "text", "prefix", "options", "filteredOptions", "filterable", "cache", "sortBy", "searchField"], outputs: ["change", "itemChange", "selected", "itemSelected", "launch"] }, { type: i7.MatChipList, selector: "mat-chip-list", inputs: ["errorStateMatcher", "multiple", "compareWith", "value", "required", "placeholder", "disabled", "aria-orientation", "selectable", "tabIndex"], outputs: ["change", "valueChange"], exportAs: ["matChipList"] }, { type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i9.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { type: i10.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i11.EditorComponent, selector: "editor", inputs: ["cloudChannel", "apiKey", "id", "modelEvents", "disabled", "initialValue", "init", "inline", "outputFormat", "tagName", "plugins", "toolbar", "allowedEvents", "ignoreEvents"] }, { type: i12.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { type: i13.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i14.VdAuditComponent, selector: "vd-audit", inputs: ["item"] }], directives: [{ type: i15.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i16.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i16.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i16.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i2.RxwebFormDirective, selector: "[formGroup],[rxwebForm]", inputs: ["formGroup", "rxwebForm"] }, { type: i5.MatAccordion, selector: "mat-accordion", inputs: ["multi", "hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { type: i5.MatExpansionPanelTitle, selector: "mat-panel-title" }, { type: i2.MatFormFieldReadonlyDirective, selector: "mat-form-field" }, { type: i6.MatLabel, selector: "mat-label" }, { type: i16.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i16.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i2.AsyncValidationDirective, selector: "[ngModel],[formControlName],[formControl]", inputs: ["async"] }, { type: i2.RxFormControlDirective, selector: "[ngModel],[formControlName],[formControl]", inputs: ["rxalpha", "rxalphaNumeric", "rxascii", "rxcompare", "rxcompose", "rxcontains", "rxcreditCard", "rxdataUri", "rxdifferent", "rxdigit", "rxemail", "rxendsWith", "rxeven", "rxextension", "rxfactor", "rxfileSize", "rxgreaterThanEqualTo", "rxgreaterThan", "rxhexColor", "rxjson", "rxlatitude", "rxlatLong", "rxleapYear", "rxlessThan", "rxlessThanEqualTo", "rxlongitude", "rxlowerCase", "rxmac", "rxmaxDate", "rxmaxLength", "rxmaxNumber", "rxminDate", "rxminLength", "rxminNumber", "rxnumeric", "rxodd", "rxpassword", "rxport", "rxprimeNumber", "rxrequired", "rxrange", "rxrule", "rxstartsWith", "rxtime", "rxupperCase", "rxurl", "rxunique", "rxnotEmpty", "rxcusip", "rxgrid", "rxdate"] }, { type: i16.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i15.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i6.MatError, selector: "mat-error", inputs: ["id"] }, { type: i17.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i16.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i7.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["color", "disableRipple", "tabIndex", "selected", "value", "selectable", "disabled", "removable"], outputs: ["selectionChange", "destroyed", "removed"], exportAs: ["matChip"] }, { type: i7.MatChipRemove, selector: "[matChipRemove]" }, { type: i7.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { type: i2.MatFormFieldEditorDirective, selector: "[tinyMatFormControl]", inputs: ["disabled", "id", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["editorChange"] }, { type: i5.MatExpansionPanelActionRow, selector: "mat-action-row" }] });
|
|
227
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: ContentFormComponent, decorators: [{
|
|
228
|
+
type: Component,
|
|
229
|
+
args: [{ selector: 'app-content-form', template: "<vd-layout-nav color=\"primary\" [backNavigationRoute]=\"listRoute\" toolbarTitle=\"Content\" i18n-toolbarTitle [editMode]=\"isEditMode\" [menuItems]=\"toolbarMenuItems\" (reload)=\"reloadPage()\">\r\n\t<form *ngIf=\"form\" [formGroup]=\"form\" novalidate (ngSubmit)=\"save()\">\r\n\t\t<vd-layout-card-over class=\"accordion\" cardWidth=\"70\" color=\"primary\" flex>\r\n\t\t\t<mat-accordion [multi]=\"!isEditMode\">\r\n\t\t\t\t<!-- #region Details -->\r\n\t\t\t\t<mat-expansion-panel expanded=\"true\" id=\"details\">\r\n\t\t\t\t\t<mat-expansion-panel-header>\r\n\t\t\t\t\t\t<mat-panel-title i18n>Details</mat-panel-title>\r\n\t\t\t\t\t</mat-expansion-panel-header>\r\n\r\n\t\t\t\t\t<!-- #region Client-->\r\n\t\t\t\t\t<div layout-gt-sm=\"row\" layout=\"column\" *ngIf=\"settings?.multitenantable && !isClientAdmin\">\r\n\t\t\t\t\t\t<mat-form-field flex layout-margin appearance=\"outline\">\r\n\t\t\t\t\t\t\t<mat-label i18n>Client</mat-label>\r\n\t\t\t\t\t\t\t<vd-select formControlName=\"clientId\" endpoint=\"client?enabled=true\" layout=\"column\" (change)=\"setClient()\" [required]=\"!item.default\" flex></vd-select>\r\n\t\t\t\t\t\t\t<mat-error *ngFor=\"let errorMessage of form.controls.clientId['errorMessages']\">{{errorMessage}}</mat-error>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t<!-- #region Title -->\r\n\t\t\t\t\t<div layout=\"row\" flex>\r\n\t\t\t\t\t\t<mat-form-field flex layout-margin appearance=\"outline\">\r\n\t\t\t\t\t\t\t<mat-label i18n>Title</mat-label>\r\n\t\t\t\t\t\t\t<input matInput formControlName=\"title\">\r\n\t\t\t\t\t\t\t<mat-error *ngFor=\"let errorMessage of form.controls.title['errorMessages']\">{{errorMessage}}</mat-error>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t<!-- #region Name & Alias -->\r\n\t\t\t\t\t<div layout=\"row\" flex>\r\n\t\t\t\t\t\t<mat-form-field flex layout-margin appearance=\"outline\">\r\n\t\t\t\t\t\t\t<mat-label i18n>Name</mat-label>\r\n\t\t\t\t\t\t\t<input matInput formControlName=\"name\">\r\n\t\t\t\t\t\t\t<mat-error *ngFor=\"let errorMessage of form.controls.name['errorMessages']\">{{errorMessage}}</mat-error>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t<!-- #region Aliases -->\r\n\t\t\t\t\t<div layout=\"row\" flex>\r\n\t\t\t\t\t\t<mat-form-field flex layout-margin appearance=\"outline\">\r\n\t\t\t\t\t\t\t<mat-label>Aliases</mat-label>\r\n\t\t\t\t\t\t\t<mat-chip-list #chipList formControlName=\"aliases\">\r\n\t\t\t\t\t\t\t\t<mat-chip *ngFor=\"let alias of form.controls.aliases.value\" (removed)=\"removeAliases(alias)\">\r\n\t\t\t\t\t\t\t\t\t<span>{{alias}}</span>\r\n\t\t\t\t\t\t\t\t\t<mat-icon matChipRemove>cancel</mat-icon>\r\n\t\t\t\t\t\t\t\t</mat-chip>\r\n\t\t\t\t\t\t\t\t<input type=\"text\" [matChipInputFor]=\"chipList\" [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\" matChipInputAddOnBlur=\"true\" (matChipInputTokenEnd)=\"addAliases($event)\">\r\n\t\t\t\t\t\t\t</mat-chip-list>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t<!-- #region wrap tag and layout -->\r\n\t\t\t\t\t<div layout=\"row\" flex>\r\n\t\t\t\t\t\t<mat-form-field flex layout-margin appearance=\"outline\" *ngIf=\"type != ContentType.Block\">\r\n\t\t\t\t\t\t\t<mat-label i18n>Wrap</mat-label>\r\n\t\t\t\t\t\t\t<input matInput formControlName=\"wrapTag\">\r\n\t\t\t\t\t\t\t<mat-autocomplete #wrapTagsAutocomplete=\"matAutocomplete\">\r\n\t\t\t\t\t\t\t\t<mat-option *ngFor=\"let option of wrapTags\" [value]=\"option.name\">{{option.name}}</mat-option>\r\n\t\t\t\t\t\t\t</mat-autocomplete>\r\n\t\t\t\t\t\t\t<mat-error *ngFor=\"let errorMessage of form.controls.wrapTag['errorMessages']\">{{errorMessage}}</mat-error>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\r\n\t\t\t\t\t\t<mat-form-field flex layout-margin appearance=\"outline\">\r\n\t\t\t\t\t\t\t<mat-label>Layout</mat-label>\r\n\t\t\t\t\t\t\t<input matInput formControlName=\"layout\">\r\n\t\t\t\t\t\t\t<mat-error *ngFor=\"let errorMessage of form.controls.layout['errorMessages']\">{{errorMessage}}</mat-error>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\t\t\t\t\t<!-- *ngIf=\"item.clientId && isEditorInitialzed\" -->\r\n\t\t\t\t\t<!-- #region Body -->\r\n\t\t\t\t\t<div layout-gt-sm=\"row\" layout=\"column\" *ngIf=\"isEditorInitialzed\">\r\n\t\t\t\t\t\t<mat-form-field flex layout-margin>\r\n\t\t\t\t\t\t\t<mat-label i18n>Content</mat-label>\r\n\t\t\t\t\t\t\t<editor #editor formControlName=\"body\" tinyMatFormControl [(init)]=\"editorConfig\" required></editor>\r\n\t\t\t\t\t\t\t<mat-error *ngFor=\"let errorMessage of form.controls.body['errorMessages']\">{{errorMessage}}</mat-error>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t<!-- #region Script -->\r\n\t\t\t\t\t<div layout=\"row\" flex>\r\n\t\t\t\t\t\t<mat-form-field flex layout-margin appearance=\"outline\">\r\n\t\t\t\t\t\t\t<mat-label>Script</mat-label>\r\n\t\t\t\t\t\t\t<textarea matInput autocomplete=\"off\" formControlName=\"script\"></textarea>\r\n\t\t\t\t\t\t\t<mat-error *ngFor=\"let errorMessage of form.controls.script['errorMessages']\">{{errorMessage}}</mat-error>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t<!-- #region Style -->\r\n\t\t\t\t\t<div layout=\"row\" flex>\r\n\t\t\t\t\t\t<mat-form-field flex layout-margin appearance=\"outline\">\r\n\t\t\t\t\t\t\t<mat-label>Style</mat-label>\r\n\t\t\t\t\t\t\t<textarea matInput autocomplete=\"off\" formControlName=\"style\"></textarea>\r\n\t\t\t\t\t\t\t<mat-error *ngFor=\"let errorMessage of form.controls.style['errorMessages']\">{{errorMessage}}</mat-error>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t<!-- #region Show title -->\r\n\t\t\t\t\t<div layout-gt-sm=\"row\" layout=\"column\">\r\n\t\t\t\t\t\t<div layout-margin appearance=\"outline\" class=\"push-top\">\r\n\t\t\t\t\t\t\t<mat-checkbox formControlName=\"showTitle\" i18n>Show title</mat-checkbox>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t<!-- #region Default -->\r\n\t\t\t\t\t<div layout-gt-sm=\"row\" layout=\"column\" *ngIf=\"!isClientAdmin\">\r\n\t\t\t\t\t\t<div layout-margin appearance=\"outline\">\r\n\t\t\t\t\t\t\t<mat-checkbox name=\"default\" formControlName=\"default\" (change)=\"item.clientId = item.default ? null : item.clientId\">Default</mat-checkbox>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t<!-- #region Enabled -->\r\n\t\t\t\t\t<div layout-gt-sm=\"row\" layout=\"column\">\r\n\t\t\t\t\t\t<div layout-margin appearance=\"outline\" class=\"push-bottom\">\r\n\t\t\t\t\t\t\t<mat-checkbox name=\"enabled\" formControlName=\"enabled\" i18n>Active</mat-checkbox>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t<mat-action-row>\r\n\t\t\t\t\t\t<button type=\"submit\" mat-flat-button color=\"primary\" [disabled]=\"isSaving\" i18n>Save</button>\r\n\t\t\t\t\t\t<button type=\"button\" mat-button *ngIf=\"isEditMode\" (click)=\"apply()\" [disabled]=\"isSaving\" i18n>Apply</button>\r\n\t\t\t\t\t\t<button type=\"button\" mat-button (click)=\"back()\" i18n>Cancel</button>\r\n\t\t\t\t\t\t<span flex></span>\r\n\t\t\t\t\t</mat-action-row>\r\n\t\t\t\t</mat-expansion-panel>\r\n\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t<!-- #region Audit -->\r\n\t\t\t\t<mat-expansion-panel id=\"audit\" *ngIf=\"isEditMode\">\r\n\t\t\t\t\t<mat-expansion-panel-header>\r\n\t\t\t\t\t\t<mat-panel-title>\r\n\t\t\t\t\t\t\t<span i18n>Audit</span>\r\n\t\t\t\t\t\t</mat-panel-title>\r\n\t\t\t\t\t</mat-expansion-panel-header>\r\n\t\t\t\t\t<vd-audit [item]=\"item\"> </vd-audit>\r\n\t\t\t\t\t<mat-action-row>\r\n\t\t\t\t\t\t<button type=\"button\" mat-flat-button color=\"accent\" (click)=\"back()\" i18n>Close</button>\r\n\t\t\t\t\t\t<span flex></span>\r\n\t\t\t\t\t</mat-action-row>\r\n\t\t\t\t</mat-expansion-panel>\r\n\t\t\t\t<!-- #endregion -->\r\n\t\t\t</mat-accordion>\r\n\t\t</vd-layout-card-over>\r\n\t</form>\r\n</vd-layout-nav>" }]
|
|
230
|
+
}], ctorParameters: function () { return [{ type: i1.ContentService }, { type: i2.FileService }, { type: i3.HttpClient }, { type: i4.ActivatedRoute }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { formElement: [{
|
|
231
|
+
type: ViewChild,
|
|
232
|
+
args: ['form', { static: false }]
|
|
233
|
+
}], editorComponent: [{
|
|
234
|
+
type: ViewChild,
|
|
235
|
+
args: ['editor', { static: false }]
|
|
236
|
+
}] } });
|
|
237
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nkay1jbXMvc3JjL2xpYi9jb21ucG9uZW50cy9jb250ZW50LWZvcm0vY29udGVudC1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nkay1jbXMvc3JjL2xpYi9jb21ucG9uZW50cy9jb250ZW50LWZvcm0vY29udGVudC1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDL0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFeEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSw0QkFBNEIsRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDbEgsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRTNELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFNaEUsTUFBTSxPQUFPLG9CQUFxQixTQUFR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UUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDOzZCQUNwRDs0QkFDRDtnQ0FDQyxJQUFJLEVBQUUsVUFBVTtnQ0FDaEIsSUFBSSxFQUFFLE9BQU87Z0NBQ2IsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsc0JBQXNCLENBQUM7NkJBQzVEOzRCQUNEO2dDQUNDLElBQUksRUFBRSxVQUFVO2dDQUNoQixJQUFJLEVBQUUsZ0JBQWdCO2dDQUN0QixRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQzs2QkFDekQ7eUJBQ0QsQ0FBQyxDQUFDO29CQUNKLENBQUM7aUJBQ0QsQ0FBQyxDQUFDO1lBQ0osQ0FBQztTQUNELENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxXQUFXO1FBQ1YsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDM0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ3JDO0lBQ0YsQ0FBQzs7aUhBL09XLG9CQUFvQjtxR0FBcEIsb0JBQW9CLGdSQ2xCakMsMmlRQTBKZ0I7MkZEeElILG9CQUFvQjtrQkFKaEMsU0FBUzsrQkFDQyxrQkFBa0I7cU5BZ0RVLFdBQVc7c0JBQWhELFNBQVM7dUJBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFLSSxlQUFlO3NCQUF0RCxTQUFTO3VCQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDT01NQSwgRU5URVIgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwRXZlbnRUeXBlLCBIdHRwUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRDaGlwSW5wdXRFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoaXBzJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBBdXRoSGVscGVyLCBFbnVtU2VydmljZSwgRmlsZVNlcnZpY2UsIEdlbmVyaWNSZWFjdGl2ZUZvcm1Db21wb25lbnQsIFNlcnZpY2VMb2NhdG9yIH0gZnJvbSAnQG1lc3NhaWEvY2RrJztcclxuaW1wb3J0IHsgRWRpdG9yQ29tcG9uZW50IH0gZnJvbSAnQHRpbnltY2UvdGlueW1jZS1hbmd1bGFyJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENvbnRlbnRUeXBlIH0gZnJvbSAnLi4vLi4vZW51bXMvY29udGVudC10eXBlJztcclxuaW1wb3J0IHsgV3JhcFRhZyB9IGZyb20gJy4uLy4uL2VudW1zL3dyYXAtdGFnJztcclxuaW1wb3J0IHsgQ21zU2V0dGluZ3MgfSBmcm9tICcuLi8uLi9tb2RlbHMvY21zLXNldHRpbmdzJztcclxuaW1wb3J0IHsgQ29udGVudCB9IGZyb20gJy4uLy4uL21vZGVscy9jb250ZW50JztcclxuaW1wb3J0IHsgQ29udGVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb250ZW50LnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcblx0c2VsZWN0b3I6ICdhcHAtY29udGVudC1mb3JtJyxcclxuXHR0ZW1wbGF0ZVVybDogJy4vY29udGVudC1mb3JtLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29udGVudEZvcm1Db21wb25lbnQgZXh0ZW5kcyBHZW5lcmljUmVhY3RpdmVGb3JtQ29tcG9uZW50PENvbnRlbnQsIENvbnRlbnRTZXJ2aWNlPiB7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFVzZWQgdG8gZGlzYWJsZSBzb21lIHByb3BlcnRpZXMgZm9yIGNsaWVudCBtYW5hZ2VyXHJcblx0ICovXHJcblx0cHVibGljIGlzQ2xpZW50QWRtaW4gPSBBdXRoSGVscGVyLmhhc1JvbGUoJ0NsaWVudEFkbWluaXN0cmF0b3InKSB8fCBBdXRoSGVscGVyLmhhc1JvbGUoJ0NsaWVudE1hbmFnZXInKTtcclxuXHJcblx0LyoqXHJcblx0ICogUm91dGVyIFN1YnNjcmlwdGlvblxyXG5cdCAqL1xyXG5cdHB1YmxpYyByb3V0ZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG5cclxuXHQvKipcclxuXHQgKiBUaGUgc3RhdHVzIG9mIHRoZSBpc3N1ZVxyXG5cdCAqL1xyXG5cdHB1YmxpYyB0eXBlOiBDb250ZW50VHlwZTtcclxuXHJcblx0LyoqXHJcblx0ICogQ29udGVudCBzdGF0dXNcclxuXHQgKi9cclxuXHRwdWJsaWMgQ29udGVudFR5cGU6IHR5cGVvZiBDb250ZW50VHlwZSA9IENvbnRlbnRUeXBlO1xyXG5cclxuXHQvKipcclxuXHQgKiBXcmFwIHRhZyBlbnVtXHJcblx0ICovXHJcblx0cHVibGljIHdyYXBUYWdzOiBhbnlbXSA9IEVudW1TZXJ2aWNlLnRvQXJyYXkoV3JhcFRhZyk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNlcGFyYXRvciBrZXlzIGNvZGVzXHJcblx0ICovXHJcblx0cHVibGljIHNlcGFyYXRvcktleXNDb2RlczogbnVtYmVyW10gPSBbRU5URVIsIENPTU1BXTtcclxuXHJcblx0LyoqXHJcblx0ICogR2V0cyB0aGUgYWxpYXNlcyBjb250cm9sXHJcblx0ICovXHJcblx0Z2V0IGFsaWFzZXNDb250cm9sKCkgeyByZXR1cm4gdGhpcy5mb3JtLmNvbnRyb2xzLmFsaWFzZXM7IH1cclxuXHJcblx0LyoqXHJcblx0ICogc2V0dGluZ3M6IENtc1NldHRpbmdzXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIHNldHRpbmdzOiBDbXNTZXR0aW5ncztcclxuXHJcblx0LyoqXHJcblx0ICogQSByZWYgdG8gZm9ybSBodG1sIGVsZW1lbnRcclxuXHQgKi9cclxuXHRAVmlld0NoaWxkKCdmb3JtJywgeyBzdGF0aWM6IGZhbHNlIH0pIGZvcm1FbGVtZW50OiBIVE1MRm9ybUVsZW1lbnQ7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEEgcmVmIHRvIHRpbnltY2UgZWRpdG9yXHJcblx0ICovXHJcblx0QFZpZXdDaGlsZCgnZWRpdG9yJywgeyBzdGF0aWM6IGZhbHNlIH0pIGVkaXRvckNvbXBvbmVudDogRWRpdG9yQ29tcG9uZW50O1xyXG5cclxuXHQvKipcclxuXHQgKiBDb25zdHJ1Y3RvclxyXG5cdCAqL1xyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0cHJvdGVjdGVkIHNlcnZpY2U6IENvbnRlbnRTZXJ2aWNlLFxyXG5cdFx0cHJvdGVjdGVkIGZpbGVTZXJ2aWNlOiBGaWxlU2VydmljZSxcclxuXHRcdHByb3RlY3RlZCBodHRwQ2xpZW50OiBIdHRwQ2xpZW50LFxyXG5cdFx0cHJvdGVjdGVkIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuXHRcdHByb3RlY3RlZCBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcclxuXHQpIHtcclxuXHRcdHN1cGVyKENvbnRlbnQsIHNlcnZpY2UsIHJvdXRlLCBjaGFuZ2VEZXRlY3RvclJlZilcclxuXHRcdHRoaXMuc2V0dGluZ3MgPSBTZXJ2aWNlTG9jYXRvci5nZXRTZXJ2aWNlKENtc1NldHRpbmdzKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIExpZmVjeWNsZSBob29rIHRoYXQgaXMgY2FsbGVkIGFmdGVyIGRhdGEtYm91bmQgcHJvcGVydGllcyBcclxuXHQgKiBvZiBhIGRpcmVjdGl2ZSBhcmUgaW5pdGlhbGl6ZWQuXHJcblx0ICovXHJcblx0bmdPbkluaXQoKTogdm9pZCB7XHJcblx0XHQvKiBGaWx0ZXIgYnkgc3RhdHVzLCBpZiBhbnkgKi9cclxuXHRcdHRoaXMucm91dGVTdWJzY3JpcHRpb24gPSB0aGlzLnJvdXRlLnBhcmFtcy5zdWJzY3JpYmUoKHBhcmFtczogeyB0eXBlOiBzdHJpbmcgfSkgPT4ge1xyXG5cdFx0XHR0aGlzLnR5cGUgPSBFbnVtU2VydmljZS5wYXJzZShDb250ZW50VHlwZSwgcGFyYW1zLnR5cGUpO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0c3VwZXIubmdPbkluaXQoKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENoZWNrcyBpZiB0aGUgc3BlY2lmaWVkIGFsaWFzIGlzIGF2YWlsYWJsZS5cclxuXHQgKi9cclxuXHRwdWJsaWMgaXNBbGlhc0F2YWlsYWJsZSgpIHtcclxuXHRcdHRoaXMuc2VydmljZS5pc0FsaWFzQXZhaWxhYmxlKHRoaXMuaXRlbSkuc3Vic2NyaWJlKCh4OiBib29sZWFuKSA9PiB7XHJcblx0XHRcdHRoaXMuZm9ybUVsZW1lbnQuZm9ybS5jb250cm9sc1snYWxpYXMnXS5zZXRFcnJvcnMoeCA/IG51bGwgOiB7ICdpblVzZSc6IHRydWUgfSk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNldCBjbGllbnRcclxuXHQgKi9cclxuXHRwdWJsaWMgc2V0Q2xpZW50KCk6IHZvaWQge1xyXG5cdFx0dGhpcy5pc0VkaXRvckluaXRpYWx6ZWQgPSBmYWxzZTtcclxuXHRcdHRoaXMuY29uZmlnRWRpdG9yKCk7XHJcblx0XHR0aGlzLmVkaXRvckNvbXBvbmVudD8uZWRpdG9yPy5zZXRDb250ZW50KHRoaXMuaXRlbS5ib2R5KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEFkZCBhIGFsaWFzZXMgdG8gdGhlIGN1cnJlbnQgZmllbGRcclxuXHQgKiBAcGFyYW0gZXZlbnQgXHJcblx0ICovXHJcblx0cHVibGljIGFkZEFsaWFzZXMoZXZlbnQ6IE1hdENoaXBJbnB1dEV2ZW50KTogdm9pZCB7XHJcblx0XHQvKiBBZGQgb3VyIGFsaWFzcyAqL1xyXG5cdFx0aWYgKChldmVudC52YWx1ZSB8fCAnJykudHJpbSgpKSB7XHJcblx0XHRcdHRoaXMuYWxpYXNlc0NvbnRyb2wuc2V0VmFsdWUoWy4uLnRoaXMuYWxpYXNlc0NvbnRyb2wudmFsdWUsIGV2ZW50LnZhbHVlLnRyaW0oKV0pO1xyXG5cdFx0XHR0aGlzLmFsaWFzZXNDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuXHRcdFx0dGhpcy5hbGlhc2VzQ29udHJvbC5tYXJrQXNEaXJ0eSgpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIFJlc2V0IHRoZSBpbnB1dCB2YWx1ZSAqL1xyXG5cdFx0aWYgKGV2ZW50LmlucHV0KSB7XHJcblx0XHRcdGV2ZW50LmlucHV0LnZhbHVlID0gJyc7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBSZW1vdmVzIGEgYWxpYXNlc1xyXG5cdCAqIEBwYXJhbSBhbGlhc3MgXHJcblx0ICovXHJcblx0cHVibGljIHJlbW92ZUFsaWFzZXMoYWxpYXNzOiBzdHJpbmcpOiB2b2lkIHtcclxuXHRcdGNvbnN0IGluZGV4ID0gdGhpcy5hbGlhc2VzQ29udHJvbC52YWx1ZS5pbmRleE9mKGFsaWFzcyk7XHJcblx0XHRpZiAoaW5kZXggPj0gMCkge1xyXG5cdFx0XHR0aGlzLmFsaWFzZXNDb250cm9sLnZhbHVlLnNwbGljZShpbmRleCwgMSk7XHJcblx0XHRcdHRoaXMuYWxpYXNlc0NvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG5cdFx0XHR0aGlzLmFsaWFzZXNDb250cm9sLm1hcmtBc0RpcnR5KCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBUZW1wbGF0ZVxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBuZXdJbnN0YW5jZSgpOiBDb250ZW50IHtcclxuXHRcdGxldCBpdGVtID0gT2JqZWN0LmFzc2lnbihuZXcgQ29udGVudCgpLCA8Q29udGVudD57XHJcblx0XHRcdHR5cGU6IHRoaXMudHlwZSxcclxuXHRcdFx0d3JhcFRhZzogdGhpcy50eXBlID09IENvbnRlbnRUeXBlLkJsb2NrID8gJycgOiBXcmFwVGFnLlNlY3Rpb24sXHJcblx0XHRcdHNob3dUaXRsZTogdGhpcy50eXBlID09IENvbnRlbnRUeXBlLkJsb2NrID8gZmFsc2UgOiB0cnVlXHJcblx0XHR9KTtcclxuXHJcblx0XHQvKiBHZXQgY2xpZW50SWQgKi9cclxuXHRcdGlmICghdGhpcy5pc0VkaXRNb2RlICYmIHRoaXMuaXNDbGllbnRBZG1pbikge1xyXG5cdFx0XHRpdGVtLmNsaWVudElkID0gdGhpcy5jdXJyZW50VXNlci5jbGllbnRJZDtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBJbml0IHRoZSB0aW55bWNlIGVkaXRvciAqL1xyXG5cdFx0dGhpcy5pc0VkaXRvckluaXRpYWx6ZWQgPSBmYWxzZTtcclxuXHRcdHJldHVybiBpdGVtO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBmb3JtIGhhcyBidWlsdC5cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgb25BZnRlckZvcm1CdWlsZCgpOiB2b2lkIHtcclxuXHRcdHN1cGVyLm9uQWZ0ZXJGb3JtQnVpbGQoKTtcclxuXHRcdHRoaXMuY29uZmlnRWRpdG9yKCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDb25maWd1cmVzIHRoZSB0aW55bWNlIGVkaXRvclxyXG5cdCAqL1xyXG5cdHByaXZhdGUgY29uZmlnRWRpdG9yKCk6IHZvaWQge1xyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3M/Lm11bHRpdGVuYW50YWJsZSAmJiB0aGlzLmZvcm1WYWx1ZT8uY2xpZW50SWQgJiYgdGhpcy5zZXR0aW5ncz8uc3R5bGVVcmxFbmRwb2ludCkge1xyXG5cdFx0XHR0aGlzLmh0dHBDbGllbnQuZ2V0KHRoaXMuc2V0dGluZ3Muc3R5bGVVcmxFbmRwb2ludCh0aGlzLmZvcm1WYWx1ZS5jbGllbnRJZCkpLnN1YnNjcmliZSgoeDogeyB2YWx1ZTogc3RyaW5nIH0pID0+IHtcclxuXHRcdFx0XHRzdXBlci5pbml0RWRpdG9yKE9iamVjdC5hc3NpZ24odGhpcy5nZXRFZGl0b3JDb25maWcoKSwgeyBjb250ZW50X2NzczogeC52YWx1ZSB9KSk7XHJcblx0XHRcdH0pO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0c3VwZXIuaW5pdEVkaXRvcih0aGlzLmdldEVkaXRvckNvbmZpZygpKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENyZWF0ZXMgY29uZmlnIGZvciB0aGUgZWRpdG9yXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0cHJpdmF0ZSBnZXRFZGl0b3JDb25maWcoKTogYW55IHtcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdHRvb2xiYXI6IGAke3RoaXMuZWRpdG9yVG9vbGJhcn0gc25pcHBldHNCdXR0b25gLFxyXG5cdFx0XHRmb3JjZV9wX25ld2xpbmVzOiBmYWxzZSxcclxuXHRcdFx0Zm9yY2VkX3Jvb3RfYmxvY2s6ICcnLFxyXG5cdFx0XHRoZWlnaHQ6IHRoaXMuc2V0dGluZ3M/LmVkaXRvckhlaWdodCB8fCAnNzAwcHgnLFxyXG5cdFx0XHRmaWxlX3BpY2tlcl90eXBlczogJ2ZpbGUgaW1hZ2UgbWVkaWEnLFxyXG5cdFx0XHRpbWFnZV9hZHZ0YWI6IHRydWUsXHJcblx0XHRcdGltYWdlc191cGxvYWRfYmFzZV9wYXRoOiBgJHt0aGlzLmFwcFNldHRpbmcuYXBpVXJsfWZpbGUvYCxcclxuXHRcdFx0aW1hZ2VzX3VwbG9hZF91cmw6ICdiYWNrZW5kL2FwaS9maWxlcycsXHJcblx0XHRcdGFsbG93X2h0bWxfaW5fbmFtZWRfYW5jaG9yOiB0cnVlLFxyXG5cdFx0XHR2YWxpZF9jaGlsZHJlbjogJythW2RpdnxzcGFufGltZ3xoMXxoMnxoM3xoNHxoNXxoNnxicnxocnx2aWRlb10sK3NwYW5baV0nLFxyXG5cdFx0XHR2YWxpZF9lbGVtZW50czogJypbKl0nLFxyXG5cdFx0XHRpbWFnZXNfdXBsb2FkX2hhbmRsZXI6IChibG9iSW5mbzogYW55LCBzdWNjZXNzOiBhbnksIGZhaWx1cmU6IGFueSkgPT4ge1xyXG5cdFx0XHRcdHRoaXMuZmlsZVNlcnZpY2UudXBsb2FkKGJsb2JJbmZvLmJsb2IoKSwgYHVwbG9hZGAsIHtcclxuXHRcdFx0XHRcdGNsaWVudElkOiB0aGlzLmZvcm0/LnZhbHVlPy5jbGllbnRJZCxcclxuXHRcdFx0XHRcdHBhdGg6ICdpbWFnZXMnLFxyXG5cdFx0XHRcdFx0aXNQdWJsaWM6IHRydWVcclxuXHRcdFx0XHR9KS5zdWJzY3JpYmUoZXZlbnQgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKGV2ZW50LnR5cGUgPT09IEh0dHBFdmVudFR5cGUuVXBsb2FkUHJvZ3Jlc3MpIHtcclxuXHJcblx0XHRcdFx0XHRcdC8qIENhbGN1bGF0ZSB0aGUgcHJvZ3Jlc3MgcGVyY2VudGFnZSAqL1xyXG5cdFx0XHRcdFx0XHRjb25zdCBwZXJjZW50RG9uZSA9IE1hdGgucm91bmQoMTAwICogZXZlbnQubG9hZGVkIC8gZXZlbnQudG90YWwpO1xyXG5cclxuXHRcdFx0XHRcdFx0LyogUGFzcyB0aGUgcGVyY2VudGFnZSBpbnRvIHRoZSBwcm9ncmVzcy1zdHJlYW0gKi9cclxuXHRcdFx0XHRcdFx0Y29uc29sZS5pbmZvKHBlcmNlbnREb25lKTtcclxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoZXZlbnQgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UpIHtcclxuXHRcdFx0XHRcdFx0c3VjY2VzcyhldmVudC5ib2R5LnB1YmxpY0xpbmspO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRzZXR1cDogZnVuY3Rpb24gKGVkaXRvcjogYW55KSB7XHJcblx0XHRcdFx0LyogQWRkIHNuaXBwZXRzIGJ1dHRvbiB0byB0aGUgdG9vbGJhciAqL1xyXG5cdFx0XHRcdGVkaXRvci51aS5yZWdpc3RyeS5hZGRNZW51QnV0dG9uKCdzbmlwcGV0c0J1dHRvbicsIHtcclxuXHRcdFx0XHRcdHRleHQ6ICdTbmlwcGV0cycsXHJcblx0XHRcdFx0XHRmZXRjaDogZnVuY3Rpb24gKGNhbGxiYWNrOiBhbnkpIHtcclxuXHRcdFx0XHRcdFx0Y2FsbGJhY2soW1xyXG5cdFx0XHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0XHRcdHR5cGU6ICdtZW51aXRlbScsXHJcblx0XHRcdFx0XHRcdFx0XHR0ZXh0OiAnVmFyaWFibGUnLFxyXG5cdFx0XHRcdFx0XHRcdFx0b25BY3Rpb246ICgpID0+IGVkaXRvci5pbnNlcnRDb250ZW50KCd7e3ZhciBuYW1lfX0nKVxyXG5cdFx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRcdFx0dHlwZTogJ21lbnVpdGVtJyxcclxuXHRcdFx0XHRcdFx0XHRcdHRleHQ6ICdCbG9jaycsXHJcblx0XHRcdFx0XHRcdFx0XHRvbkFjdGlvbjogKCkgPT4gZWRpdG9yLmluc2VydENvbnRlbnQoJ3t7YmxvY2sgbmFtZT1cIi4uLlwifX0nKVxyXG5cdFx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRcdFx0dHlwZTogJ21lbnVpdGVtJyxcclxuXHRcdFx0XHRcdFx0XHRcdHRleHQ6ICdWaWV3IENvbXBvbmVudCcsXHJcblx0XHRcdFx0XHRcdFx0XHRvbkFjdGlvbjogKCkgPT4gZWRpdG9yLmluc2VydENvbnRlbnQoJ3t7dmMgbmFtZT1cIi4uLlwifX0nKVxyXG5cdFx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdF0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQ2xlYW51cCBzdWJzY3JpcHRpb25zIHdoZW4gdGhpcyBjb21wb25lbnQgaXMgZGVzdHJveWVkLlxyXG5cdCAqL1xyXG5cdG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG5cdFx0aWYgKHRoaXMucm91dGVTdWJzY3JpcHRpb24pIHtcclxuXHRcdFx0dGhpcy5yb3V0ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG5cdFx0fVxyXG5cdH1cclxufSIsIjx2ZC1sYXlvdXQtbmF2IGNvbG9yPVwicHJpbWFyeVwiIFtiYWNrTmF2aWdhdGlvblJvdXRlXT1cImxpc3RSb3V0ZVwiIHRvb2xiYXJUaXRsZT1cIkNvbnRlbnRcIiBpMThuLXRvb2xiYXJUaXRsZSBbZWRpdE1vZGVdPVwiaXNFZGl0TW9kZVwiIFttZW51SXRlbXNdPVwidG9vbGJhck1lbnVJdGVtc1wiIChyZWxvYWQpPVwicmVsb2FkUGFnZSgpXCI+XHJcblx0PGZvcm0gKm5nSWY9XCJmb3JtXCIgW2Zvcm1Hcm91cF09XCJmb3JtXCIgbm92YWxpZGF0ZSAobmdTdWJtaXQpPVwic2F2ZSgpXCI+XHJcblx0XHQ8dmQtbGF5b3V0LWNhcmQtb3ZlciBjbGFzcz1cImFjY29yZGlvblwiIGNhcmRXaWR0aD1cIjcwXCIgY29sb3I9XCJwcmltYXJ5XCIgZmxleD5cclxuXHRcdFx0PG1hdC1hY2NvcmRpb24gW211bHRpXT1cIiFpc0VkaXRNb2RlXCI+XHJcblx0XHRcdFx0PCEtLSAjcmVnaW9uIERldGFpbHMgLS0+XHJcblx0XHRcdFx0PG1hdC1leHBhbnNpb24tcGFuZWwgZXhwYW5kZWQ9XCJ0cnVlXCIgaWQ9XCJkZXRhaWxzXCI+XHJcblx0XHRcdFx0XHQ8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcblx0XHRcdFx0XHRcdDxtYXQtcGFuZWwtdGl0bGUgaTE4bj5EZXRhaWxzPC9tYXQtcGFuZWwtdGl0bGU+XHJcblx0XHRcdFx0XHQ8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG5cclxuXHRcdFx0XHRcdDwhLS0gI3JlZ2lvbiBDbGllbnQtLT5cclxuXHRcdFx0XHRcdDxkaXYgbGF5b3V0LWd0LXNtPVwicm93XCIgbGF5b3V0PVwiY29sdW1uXCIgKm5nSWY9XCJzZXR0aW5ncz8ubXVsdGl0ZW5hbnRhYmxlICYmICFpc0NsaWVudEFkbWluXCI+XHJcblx0XHRcdFx0XHRcdDxtYXQtZm9ybS1maWVsZCBmbGV4IGxheW91dC1tYXJnaW4gYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuXHRcdFx0XHRcdFx0XHQ8bWF0LWxhYmVsIGkxOG4+Q2xpZW50PC9tYXQtbGFiZWw+XHJcblx0XHRcdFx0XHRcdFx0PHZkLXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJjbGllbnRJZFwiIGVuZHBvaW50PVwiY2xpZW50P2VuYWJsZWQ9dHJ1ZVwiIGxheW91dD1cImNvbHVtblwiIChjaGFuZ2UpPVwic2V0Q2xpZW50KClcIiBbcmVxdWlyZWRdPVwiIWl0ZW0uZGVmYXVsdFwiIGZsZXg+PC92ZC1zZWxlY3Q+XHJcblx0XHRcdFx0XHRcdFx0PG1hdC1lcnJvciAqbmdGb3I9XCJsZXQgZXJyb3JNZXNzYWdlIG9mIGZvcm0uY29udHJvbHMuY2xpZW50SWRbJ2Vycm9yTWVzc2FnZXMnXVwiPnt7ZXJyb3JNZXNzYWdlfX08L21hdC1lcnJvcj5cclxuXHRcdFx0XHRcdFx0PC9tYXQtZm9ybS1maWVsZD5cclxuXHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0PCEtLSAjZW5kcmVnaW9uIC0tPlxyXG5cclxuXHRcdFx0XHRcdDwhLS0gI3JlZ2lvbiBUaXRsZSAtLT5cclxuXHRcdFx0XHRcdDxkaXYgbGF5b3V0PVwicm93XCIgZmxleD5cclxuXHRcdFx0XHRcdFx0PG1hdC1mb3JtLWZpZWxkIGZsZXggbGF5b3V0LW1hcmdpbiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG5cdFx0XHRcdFx0XHRcdDxtYXQtbGFiZWwgaTE4bj5UaXRsZTwvbWF0LWxhYmVsPlxyXG5cdFx0XHRcdFx0XHRcdDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJ0aXRsZVwiPlxyXG5cdFx0XHRcdFx0XHRcdDxtYXQtZXJyb3IgKm5nRm9yPVwibGV0IGVycm9yTWVzc2FnZSBvZiBmb3JtLmNvbnRyb2xzLnRpdGxlWydlcnJvck1lc3NhZ2VzJ11cIj57e2Vycm9yTWVzc2FnZX19PC9tYXQtZXJyb3I+XHJcblx0XHRcdFx0XHRcdDwvbWF0LWZvcm0tZmllbGQ+XHJcblx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuXHJcblx0XHRcdFx0XHQ8IS0tICNyZWdpb24gTmFtZSAmIEFsaWFzIC0tPlxyXG5cdFx0XHRcdFx0PGRpdiBsYXlvdXQ9XCJyb3dcIiBmbGV4PlxyXG5cdFx0XHRcdFx0XHQ8bWF0LWZvcm0tZmllbGQgZmxleCBsYXlvdXQtbWFyZ2luIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcblx0XHRcdFx0XHRcdFx0PG1hdC1sYWJlbCBpMThuPk5hbWU8L21hdC1sYWJlbD5cclxuXHRcdFx0XHRcdFx0XHQ8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiPlxyXG5cdFx0XHRcdFx0XHRcdDxtYXQtZXJyb3IgKm5nRm9yPVwibGV0IGVycm9yTWVzc2FnZSBvZiBmb3JtLmNvbnRyb2xzLm5hbWVbJ2Vycm9yTWVzc2FnZXMnXVwiPnt7ZXJyb3JNZXNzYWdlfX08L21hdC1lcnJvcj5cclxuXHRcdFx0XHRcdFx0PC9tYXQtZm9ybS1maWVsZD5cclxuXHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0PCEtLSAjZW5kcmVnaW9uIC0tPlxyXG5cclxuXHRcdFx0XHRcdDwhLS0gI3JlZ2lvbiBBbGlhc2VzIC0tPlxyXG5cdFx0XHRcdFx0PGRpdiBsYXlvdXQ9XCJyb3dcIiBmbGV4PlxyXG5cdFx0XHRcdFx0XHQ8bWF0LWZvcm0tZmllbGQgZmxleCBsYXlvdXQtbWFyZ2luIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcblx0XHRcdFx0XHRcdFx0PG1hdC1sYWJlbD5BbGlhc2VzPC9tYXQtbGFiZWw+XHJcblx0XHRcdFx0XHRcdFx0PG1hdC1jaGlwLWxpc3QgI2NoaXBMaXN0IGZvcm1Db250cm9sTmFtZT1cImFsaWFzZXNcIj5cclxuXHRcdFx0XHRcdFx0XHRcdDxtYXQtY2hpcCAqbmdGb3I9XCJsZXQgYWxpYXMgb2YgZm9ybS5jb250cm9scy5hbGlhc2VzLnZhbHVlXCIgKHJlbW92ZWQpPVwicmVtb3ZlQWxpYXNlcyhhbGlhcylcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4+e3thbGlhc319PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8bWF0LWljb24gbWF0Q2hpcFJlbW92ZT5jYW5jZWw8L21hdC1pY29uPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC9tYXQtY2hpcD5cclxuXHRcdFx0XHRcdFx0XHRcdDxpbnB1dCB0eXBlPVwidGV4dFwiIFttYXRDaGlwSW5wdXRGb3JdPVwiY2hpcExpc3RcIiBbbWF0Q2hpcElucHV0U2VwYXJhdG9yS2V5Q29kZXNdPVwic2VwYXJhdG9yS2V5c0NvZGVzXCIgbWF0Q2hpcElucHV0QWRkT25CbHVyPVwidHJ1ZVwiIChtYXRDaGlwSW5wdXRUb2tlbkVuZCk9XCJhZGRBbGlhc2VzKCRldmVudClcIj5cclxuXHRcdFx0XHRcdFx0XHQ8L21hdC1jaGlwLWxpc3Q+XHJcblx0XHRcdFx0XHRcdDwvbWF0LWZvcm0tZmllbGQ+XHJcblx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuXHJcblx0XHRcdFx0XHQ8IS0tICNyZWdpb24gd3JhcCB0YWcgYW5kIGxheW91dCAtLT5cclxuXHRcdFx0XHRcdDxkaXYgbGF5b3V0PVwicm93XCIgZmxleD5cclxuXHRcdFx0XHRcdFx0PG1hdC1mb3JtLWZpZWxkIGZsZXggbGF5b3V0LW1hcmdpbiBhcHBlYXJhbmNlPVwib3V0bGluZVwiICpuZ0lmPVwidHlwZSAhPSBDb250ZW50VHlwZS5CbG9ja1wiPlxyXG5cdFx0XHRcdFx0XHRcdDxtYXQtbGFiZWwgaTE4bj5XcmFwPC9tYXQtbGFiZWw+XHJcblx0XHRcdFx0XHRcdFx0PGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cIndyYXBUYWdcIj5cclxuXHRcdFx0XHRcdFx0XHQ8bWF0LWF1dG9jb21wbGV0ZSAjd3JhcFRhZ3NBdXRvY29tcGxldGU9XCJtYXRBdXRvY29tcGxldGVcIj5cclxuXHRcdFx0XHRcdFx0XHRcdDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2Ygd3JhcFRhZ3NcIiBbdmFsdWVdPVwib3B0aW9uLm5hbWVcIj57e29wdGlvbi5uYW1lfX08L21hdC1vcHRpb24+XHJcblx0XHRcdFx0XHRcdFx0PC9tYXQtYXV0b2NvbXBsZXRlPlxyXG5cdFx0XHRcdFx0XHRcdDxtYXQtZXJyb3IgKm5nRm9yPVwibGV0IGVycm9yTWVzc2FnZSBvZiBmb3JtLmNvbnRyb2xzLndyYXBUYWdbJ2Vycm9yTWVzc2FnZXMnXVwiPnt7ZXJyb3JNZXNzYWdlfX08L21hdC1lcnJvcj5cclxuXHRcdFx0XHRcdFx0PC9tYXQtZm9ybS1maWVsZD5cclxuXHJcblx0XHRcdFx0XHRcdDxtYXQtZm9ybS1maWVsZCBmbGV4IGxheW91dC1tYXJnaW4gYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuXHRcdFx0XHRcdFx0XHQ8bWF0LWxhYmVsPkxheW91dDwvbWF0LWxhYmVsPlxyXG5cdFx0XHRcdFx0XHRcdDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJsYXlvdXRcIj5cclxuXHRcdFx0XHRcdFx0XHQ8bWF0LWVycm9yICpuZ0Zvcj1cImxldCBlcnJvck1lc3NhZ2Ugb2YgZm9ybS5jb250cm9scy5sYXlvdXRbJ2Vycm9yTWVzc2FnZXMnXVwiPnt7ZXJyb3JNZXNzYWdlfX08L21hdC1lcnJvcj5cclxuXHRcdFx0XHRcdFx0PC9tYXQtZm9ybS1maWVsZD5cclxuXHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0PCEtLSAjZW5kcmVnaW9uIC0tPlxyXG5cdFx0XHRcdFx0PCEtLSAqbmdJZj1cIml0ZW0uY2xpZW50SWQgJiYgaXNFZGl0b3JJbml0aWFsemVkXCIgLS0+XHJcblx0XHRcdFx0XHQ8IS0tICNyZWdpb24gQm9keSAtLT5cclxuXHRcdFx0XHRcdDxkaXYgbGF5b3V0LWd0LXNtPVwicm93XCIgbGF5b3V0PVwiY29sdW1uXCIgKm5nSWY9XCJpc0VkaXRvckluaXRpYWx6ZWRcIj5cclxuXHRcdFx0XHRcdFx0PG1hdC1mb3JtLWZpZWxkIGZsZXggbGF5b3V0LW1hcmdpbj5cclxuXHRcdFx0XHRcdFx0XHQ8bWF0LWxhYmVsIGkxOG4+Q29udGVudDwvbWF0LWxhYmVsPlxyXG5cdFx0XHRcdFx0XHRcdDxlZGl0b3IgI2VkaXRvciBmb3JtQ29udHJvbE5hbWU9XCJib2R5XCIgdGlueU1hdEZvcm1Db250cm9sIFsoaW5pdCldPVwiZWRpdG9yQ29uZmlnXCIgcmVxdWlyZWQ+PC9lZGl0b3I+XHJcblx0XHRcdFx0XHRcdFx0PG1hdC1lcnJvciAqbmdGb3I9XCJsZXQgZXJyb3JNZXNzYWdlIG9mIGZvcm0uY29udHJvbHMuYm9keVsnZXJyb3JNZXNzYWdlcyddXCI+e3tlcnJvck1lc3NhZ2V9fTwvbWF0LWVycm9yPlxyXG5cdFx0XHRcdFx0XHQ8L21hdC1mb3JtLWZpZWxkPlxyXG5cdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHQ8IS0tICNlbmRyZWdpb24gLS0+XHJcblxyXG5cdFx0XHRcdFx0PCEtLSAjcmVnaW9uIFNjcmlwdCAtLT5cclxuXHRcdFx0XHRcdDxkaXYgbGF5b3V0PVwicm93XCIgZmxleD5cclxuXHRcdFx0XHRcdFx0PG1hdC1mb3JtLWZpZWxkIGZsZXggbGF5b3V0LW1hcmdpbiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG5cdFx0XHRcdFx0XHRcdDxtYXQtbGFiZWw+U2NyaXB0PC9tYXQtbGFiZWw+XHJcblx0XHRcdFx0XHRcdFx0PHRleHRhcmVhIG1hdElucHV0IGF1dG9jb21wbGV0ZT1cIm9mZlwiIGZvcm1Db250cm9sTmFtZT1cInNjcmlwdFwiPjwvdGV4dGFyZWE+XHJcblx0XHRcdFx0XHRcdFx0PG1hdC1lcnJvciAqbmdGb3I9XCJsZXQgZXJyb3JNZXNzYWdlIG9mIGZvcm0uY29udHJvbHMuc2NyaXB0WydlcnJvck1lc3NhZ2VzJ11cIj57e2Vycm9yTWVzc2FnZX19PC9tYXQtZXJyb3I+XHJcblx0XHRcdFx0XHRcdDwvbWF0LWZvcm0tZmllbGQ+XHJcblx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuXHJcblx0XHRcdFx0XHQ8IS0tICNyZWdpb24gU3R5bGUgLS0+XHJcblx0XHRcdFx0XHQ8ZGl2IGxheW91dD1cInJvd1wiIGZsZXg+XHJcblx0XHRcdFx0XHRcdDxtYXQtZm9ybS1maWVsZCBmbGV4IGxheW91dC1tYXJnaW4gYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuXHRcdFx0XHRcdFx0XHQ8bWF0LWxhYmVsPlN0eWxlPC9tYXQtbGFiZWw+XHJcblx0XHRcdFx0XHRcdFx0PHRleHRhcmVhIG1hdElucHV0IGF1dG9jb21wbGV0ZT1cIm9mZlwiIGZvcm1Db250cm9sTmFtZT1cInN0eWxlXCI+PC90ZXh0YXJlYT5cclxuXHRcdFx0XHRcdFx0XHQ8bWF0LWVycm9yICpuZ0Zvcj1cImxldCBlcnJvck1lc3NhZ2Ugb2YgZm9ybS5jb250cm9scy5zdHlsZVsnZXJyb3JNZXNzYWdlcyddXCI+e3tlcnJvck1lc3NhZ2V9fTwvbWF0LWVycm9yPlxyXG5cdFx0XHRcdFx0XHQ8L21hdC1mb3JtLWZpZWxkPlxyXG5cdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHQ8IS0tICNlbmRyZWdpb24gLS0+XHJcblxyXG5cdFx0XHRcdFx0PCEtLSAjcmVnaW9uIFNob3cgdGl0bGUgLS0+XHJcblx0XHRcdFx0XHQ8ZGl2IGxheW91dC1ndC1zbT1cInJvd1wiIGxheW91dD1cImNvbHVtblwiPlxyXG5cdFx0XHRcdFx0XHQ8ZGl2IGxheW91dC1tYXJnaW4gYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInB1c2gtdG9wXCI+XHJcblx0XHRcdFx0XHRcdFx0PG1hdC1jaGVja2JveCBmb3JtQ29udHJvbE5hbWU9XCJzaG93VGl0bGVcIiBpMThuPlNob3cgdGl0bGU8L21hdC1jaGVja2JveD5cclxuXHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuXHJcblx0XHRcdFx0XHQ8IS0tICNyZWdpb24gRGVmYXVsdCAtLT5cclxuXHRcdFx0XHRcdDxkaXYgbGF5b3V0LWd0LXNtPVwicm93XCIgbGF5b3V0PVwiY29sdW1uXCIgKm5nSWY9XCIhaXNDbGllbnRBZG1pblwiPlxyXG5cdFx0XHRcdFx0XHQ8ZGl2IGxheW91dC1tYXJnaW4gYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuXHRcdFx0XHRcdFx0XHQ8bWF0LWNoZWNrYm94IG5hbWU9XCJkZWZhdWx0XCIgZm9ybUNvbnRyb2xOYW1lPVwiZGVmYXVsdFwiIChjaGFuZ2UpPVwiaXRlbS5jbGllbnRJZCA9IGl0ZW0uZGVmYXVsdCA/IG51bGwgOiBpdGVtLmNsaWVudElkXCI+RGVmYXVsdDwvbWF0LWNoZWNrYm94PlxyXG5cdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0PCEtLSAjZW5kcmVnaW9uIC0tPlxyXG5cclxuXHRcdFx0XHRcdDwhLS0gI3JlZ2lvbiBFbmFibGVkIC0tPlxyXG5cdFx0XHRcdFx0PGRpdiBsYXlvdXQtZ3Qtc209XCJyb3dcIiBsYXlvdXQ9XCJjb2x1bW5cIj5cclxuXHRcdFx0XHRcdFx0PGRpdiBsYXlvdXQtbWFyZ2luIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJwdXNoLWJvdHRvbVwiPlxyXG5cdFx0XHRcdFx0XHRcdDxtYXQtY2hlY2tib3ggbmFtZT1cImVuYWJsZWRcIiBmb3JtQ29udHJvbE5hbWU9XCJlbmFibGVkXCIgaTE4bj5BY3RpdmU8L21hdC1jaGVja2JveD5cclxuXHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuXHJcblx0XHRcdFx0XHQ8bWF0LWFjdGlvbi1yb3c+XHJcblx0XHRcdFx0XHRcdDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIG1hdC1mbGF0LWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiBbZGlzYWJsZWRdPVwiaXNTYXZpbmdcIiBpMThuPlNhdmU8L2J1dHRvbj5cclxuXHRcdFx0XHRcdFx0PGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LWJ1dHRvbiAqbmdJZj1cImlzRWRpdE1vZGVcIiAoY2xpY2spPVwiYXBwbHkoKVwiIFtkaXNhYmxlZF09XCJpc1NhdmluZ1wiIGkxOG4+QXBwbHk8L2J1dHRvbj5cclxuXHRcdFx0XHRcdFx0PGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LWJ1dHRvbiAoY2xpY2spPVwiYmFjaygpXCIgaTE4bj5DYW5jZWw8L2J1dHRvbj5cclxuXHRcdFx0XHRcdFx0PHNwYW4gZmxleD48L3NwYW4+XHJcblx0XHRcdFx0XHQ8L21hdC1hY3Rpb24tcm93PlxyXG5cdFx0XHRcdDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cclxuXHRcdFx0XHQ8IS0tICNlbmRyZWdpb24gLS0+XHJcblxyXG5cdFx0XHRcdDwhLS0gI3JlZ2lvbiBBdWRpdCAtLT5cclxuXHRcdFx0XHQ8bWF0LWV4cGFuc2lvbi1wYW5lbCBpZD1cImF1ZGl0XCIgKm5nSWY9XCJpc0VkaXRNb2RlXCI+XHJcblx0XHRcdFx0XHQ8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcblx0XHRcdFx0XHRcdDxtYXQtcGFuZWwtdGl0bGU+XHJcblx0XHRcdFx0XHRcdFx0PHNwYW4gaTE4bj5BdWRpdDwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0PC9tYXQtcGFuZWwtdGl0bGU+XHJcblx0XHRcdFx0XHQ8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG5cdFx0XHRcdFx0PHZkLWF1ZGl0IFtpdGVtXT1cIml0ZW1cIj4gPC92ZC1hdWRpdD5cclxuXHRcdFx0XHRcdDxtYXQtYWN0aW9uLXJvdz5cclxuXHRcdFx0XHRcdFx0PGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LWZsYXQtYnV0dG9uIGNvbG9yPVwiYWNjZW50XCIgKGNsaWNrKT1cImJhY2soKVwiIGkxOG4+Q2xvc2U8L2J1dHRvbj5cclxuXHRcdFx0XHRcdFx0PHNwYW4gZmxleD48L3NwYW4+XHJcblx0XHRcdFx0XHQ8L21hdC1hY3Rpb24tcm93PlxyXG5cdFx0XHRcdDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cclxuXHRcdFx0XHQ8IS0tICNlbmRyZWdpb24gLS0+XHJcblx0XHRcdDwvbWF0LWFjY29yZGlvbj5cclxuXHRcdDwvdmQtbGF5b3V0LWNhcmQtb3Zlcj5cclxuXHQ8L2Zvcm0+XHJcbjwvdmQtbGF5b3V0LW5hdj4iXX0=
|