@alfresco/adf-process-services-cloud 8.1.0-16295248176 → 8.1.0-16342534841
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/bundles/assets/adf-process-services-cloud/i18n/de.json +3 -0
- package/bundles/assets/adf-process-services-cloud/i18n/es.json +3 -0
- package/bundles/assets/adf-process-services-cloud/i18n/fr.json +3 -0
- package/bundles/assets/adf-process-services-cloud/i18n/it.json +3 -0
- package/bundles/assets/adf-process-services-cloud/i18n/pl.json +3 -0
- package/bundles/assets/adf-process-services-cloud/i18n/pt.json +3 -0
- package/esm2022/adf-process-services-cloud.mjs +5 -0
- package/esm2022/lib/app/app-list-cloud.module.mjs +20 -0
- package/esm2022/lib/app/components/app-details-cloud/app-details-cloud.component.mjs +67 -0
- package/esm2022/lib/app/components/app-list-cloud/app-list-cloud.component.mjs +125 -0
- package/esm2022/lib/app/models/application-instance.model.mjs +24 -0
- package/esm2022/lib/app/public-api.mjs +22 -0
- package/esm2022/lib/app/services/apps-process-cloud.service.mjs +97 -0
- package/esm2022/lib/common/date-range-filter/date-range-filter.component.mjs +163 -0
- package/esm2022/lib/common/date-range-filter/date-range-filter.service.mjs +97 -0
- package/esm2022/lib/common/index.mjs +18 -0
- package/esm2022/lib/common/interface/environment.interface.mjs +18 -0
- package/esm2022/lib/common/interface/index.mjs +18 -0
- package/esm2022/lib/common/interface/public-api.mjs +18 -0
- package/esm2022/lib/common/public-api.mjs +19 -0
- package/esm2022/lib/form/components/cloud-form-rendering.service.mjs +57 -0
- package/esm2022/lib/form/components/form-cloud-custom-outcomes.component.mjs +31 -0
- package/esm2022/lib/form/components/form-cloud.component.mjs +397 -0
- package/esm2022/lib/form/components/form-definition-selector-cloud.component.mjs +53 -0
- package/esm2022/lib/form/components/spinner/form-spinner.component.mjs +35 -0
- package/esm2022/lib/form/components/widgets/attach-file/attach-file-cloud-widget.component.mjs +249 -0
- package/esm2022/lib/form/components/widgets/attach-file/file-properties-table/file-properties-table-cloud.component.mjs +136 -0
- package/esm2022/lib/form/components/widgets/data-table/data-table-adapter.widget.mjs +107 -0
- package/esm2022/lib/form/components/widgets/data-table/data-table.widget.mjs +120 -0
- package/esm2022/lib/form/components/widgets/data-table/helpers/data-table-path-parser.helper.mjs +122 -0
- package/esm2022/lib/form/components/widgets/date/date-cloud.widget.mjs +189 -0
- package/esm2022/lib/form/components/widgets/display-external-property/display-external-property.widget.mjs +85 -0
- package/esm2022/lib/form/components/widgets/display-rich-text/display-rich-text.widget.mjs +80 -0
- package/esm2022/lib/form/components/widgets/dropdown/dropdown-cloud.widget.mjs +463 -0
- package/esm2022/lib/form/components/widgets/dropdown/validators.mjs +29 -0
- package/esm2022/lib/form/components/widgets/file-viewer/file-viewer.widget.mjs +46 -0
- package/esm2022/lib/form/components/widgets/group/group-cloud.widget.mjs +82 -0
- package/esm2022/lib/form/components/widgets/people/people-cloud.widget.mjs +91 -0
- package/esm2022/lib/form/components/widgets/properties-viewer/properties-viewer-wrapper/properties-viewer-wrapper.component.mjs +81 -0
- package/esm2022/lib/form/components/widgets/properties-viewer/properties-viewer.widget.mjs +53 -0
- package/esm2022/lib/form/components/widgets/radio-buttons/radio-buttons-cloud.schema.mjs +86 -0
- package/esm2022/lib/form/components/widgets/radio-buttons/radio-buttons-cloud.widget.mjs +116 -0
- package/esm2022/lib/form/components/widgets/upload/upload-cloud.widget.mjs +187 -0
- package/esm2022/lib/form/form-cloud.module.mjs +103 -0
- package/esm2022/lib/form/models/form-cloud-representation.model.mjs +48 -0
- package/esm2022/lib/form/models/task-variable-cloud.model.mjs +28 -0
- package/esm2022/lib/form/public-api.mjs +44 -0
- package/esm2022/lib/form/services/content-cloud-node-selector.service.mjs +120 -0
- package/esm2022/lib/form/services/display-mode.service.mjs +146 -0
- package/esm2022/lib/form/services/form-cloud.service.interface.mjs +18 -0
- package/esm2022/lib/form/services/form-cloud.service.mjs +201 -0
- package/esm2022/lib/form/services/form-definition-selector-cloud.service.interface.mjs +18 -0
- package/esm2022/lib/form/services/form-definition-selector-cloud.service.mjs +51 -0
- package/esm2022/lib/form/services/form-utils.service.mjs +37 -0
- package/esm2022/lib/form/services/process-cloud-content.service.mjs +71 -0
- package/esm2022/lib/form/services/spinner/form-cloud-spinner.service.mjs +52 -0
- package/esm2022/lib/group/components/group-cloud.component.mjs +423 -0
- package/esm2022/lib/group/group-cloud.module.mjs +33 -0
- package/esm2022/lib/group/models/identity-group.model.mjs +18 -0
- package/esm2022/lib/group/public-api.mjs +21 -0
- package/esm2022/lib/group/services/identity-group.service.mjs +89 -0
- package/esm2022/lib/models/application-version.model.mjs +21 -0
- package/esm2022/lib/models/constant-values.type.mjs +18 -0
- package/esm2022/lib/models/data-column-custom-data.mjs +18 -0
- package/esm2022/lib/models/date-cloud-filter.model.mjs +31 -0
- package/esm2022/lib/models/date-format-cloud.model.mjs +18 -0
- package/esm2022/lib/models/engine-event-cloud.model.mjs +18 -0
- package/esm2022/lib/models/filter-cloud-model.mjs +128 -0
- package/esm2022/lib/models/process-definition-cloud.model.mjs +32 -0
- package/esm2022/lib/models/process-instance-variable.model.mjs +18 -0
- package/esm2022/lib/models/process-variable-filter.model.mjs +18 -0
- package/esm2022/lib/models/task-cloud.model.mjs +23 -0
- package/esm2022/lib/models/task-list-sorting.model.mjs +40 -0
- package/esm2022/lib/models/variable-definition.mjs +18 -0
- package/esm2022/lib/people/components/people-cloud.component.mjs +498 -0
- package/esm2022/lib/people/models/identity-user.model.mjs +18 -0
- package/esm2022/lib/people/people-cloud.module.mjs +33 -0
- package/esm2022/lib/people/public-api.mjs +21 -0
- package/esm2022/lib/people/services/identity-user.service.mjs +119 -0
- package/esm2022/lib/process/process-cloud.module.mjs +40 -0
- package/esm2022/lib/process/process-filters/components/edit-process-filter/edit-process-filter-cloud.component.mjs +801 -0
- package/esm2022/lib/process/process-filters/components/process-filter-dialog/process-filter-dialog-cloud.component.mjs +58 -0
- package/esm2022/lib/process/process-filters/components/process-filters/process-filters-cloud.component.mjs +292 -0
- package/esm2022/lib/process/process-filters/models/process-filter-cloud.model.mjs +170 -0
- package/esm2022/lib/process/process-filters/process-filters-cloud.module.mjs +44 -0
- package/esm2022/lib/process/process-filters/public-api.mjs +23 -0
- package/esm2022/lib/process/process-filters/services/process-filter-cloud.service.mjs +408 -0
- package/esm2022/lib/process/process-header/components/process-header-cloud.component.mjs +137 -0
- package/esm2022/lib/process/process-header/process-header-cloud.module.mjs +33 -0
- package/esm2022/lib/process/process-header/public-api.mjs +19 -0
- package/esm2022/lib/process/process-list/components/process-list-cloud.component.mjs +593 -0
- package/esm2022/lib/process/process-list/datatable/process-list-datatable-adapter.mjs +31 -0
- package/esm2022/lib/process/process-list/models/perocess-instance-cloud-view.model.mjs +18 -0
- package/esm2022/lib/process/process-list/models/process-cloud-preferences.mjs +24 -0
- package/esm2022/lib/process/process-list/models/process-cloud-preset.model.mjs +37 -0
- package/esm2022/lib/process/process-list/models/process-cloud-query-request.model.mjs +107 -0
- package/esm2022/lib/process/process-list/models/process-list-sorting.model.mjs +40 -0
- package/esm2022/lib/process/process-list/process-list-cloud.module.mjs +45 -0
- package/esm2022/lib/process/process-list/public-api.mjs +25 -0
- package/esm2022/lib/process/process-list/services/process-list-cloud.service.mjs +253 -0
- package/esm2022/lib/process/process-list/services/process-task-list-cloud.service.mjs +109 -0
- package/esm2022/lib/process/public-api.mjs +23 -0
- package/esm2022/lib/process/services/process-cloud.service.mjs +105 -0
- package/esm2022/lib/process/start-process/components/start-process-cloud.component.mjs +465 -0
- package/esm2022/lib/process/start-process/models/process-instance-cloud.model.mjs +18 -0
- package/esm2022/lib/process/start-process/models/process-payload-cloud.model.mjs +26 -0
- package/esm2022/lib/process/start-process/models/process-with-form-payload-cloud.model.mjs +26 -0
- package/esm2022/lib/process/start-process/public-api.mjs +21 -0
- package/esm2022/lib/process/start-process/services/start-process-cloud.service.mjs +125 -0
- package/esm2022/lib/process-services-cloud.module.mjs +103 -0
- package/esm2022/lib/providers.mjs +45 -0
- package/esm2022/lib/rich-text-editor/editorjs-config.mjs +101 -0
- package/esm2022/lib/rich-text-editor/index.mjs +18 -0
- package/esm2022/lib/rich-text-editor/public-api.mjs +19 -0
- package/esm2022/lib/rich-text-editor/rich-text-editor.component.mjs +80 -0
- package/esm2022/lib/rich-text-editor/rich-text-editor.module.mjs +33 -0
- package/esm2022/lib/screen/components/screen-cloud/screen-cloud.component.mjs +186 -0
- package/esm2022/lib/screen/models/screen-cloud.model.mjs +18 -0
- package/esm2022/lib/screen/public-api.mjs +18 -0
- package/esm2022/lib/services/base-cloud.service.mjs +83 -0
- package/esm2022/lib/services/cloud-token.service.mjs +23 -0
- package/esm2022/lib/services/form-fields.interfaces.mjs +55 -0
- package/esm2022/lib/services/local-preference-cloud.service.mjs +122 -0
- package/esm2022/lib/services/notification-cloud.service.mjs +45 -0
- package/esm2022/lib/services/preference-cloud.interface.mjs +18 -0
- package/esm2022/lib/services/public-api.mjs +28 -0
- package/esm2022/lib/services/screen-rendering.service.mjs +30 -0
- package/esm2022/lib/services/task-list-cloud.service.interface.mjs +18 -0
- package/esm2022/lib/services/user-preference-cloud.service.mjs +105 -0
- package/esm2022/lib/services/variable-mapper.sevice.mjs +77 -0
- package/esm2022/lib/services/web-socket.service.mjs +146 -0
- package/esm2022/lib/task/models/start-task-cloud-request.model.mjs +32 -0
- package/esm2022/lib/task/models/task-details-cloud.model.mjs +26 -0
- package/esm2022/lib/task/models/task.model.mjs +23 -0
- package/esm2022/lib/task/public-api.mjs +26 -0
- package/esm2022/lib/task/services/task-cloud.service.mjs +272 -0
- package/esm2022/lib/task/task-cloud.module.mjs +45 -0
- package/esm2022/lib/task/task-filters/components/base-task-filters-cloud.component.mjs +59 -0
- package/esm2022/lib/task/task-filters/components/edit-task-filters/base-edit-task-filter-cloud.component.mjs +467 -0
- package/esm2022/lib/task/task-filters/components/edit-task-filters/edit-service-task-filter/edit-service-task-filter-cloud.component.mjs +205 -0
- package/esm2022/lib/task/task-filters/components/edit-task-filters/edit-task-filter/edit-task-filter-cloud.component.mjs +317 -0
- package/esm2022/lib/task/task-filters/components/service-task-filters/service-task-filters-cloud.component.mjs +146 -0
- package/esm2022/lib/task/task-filters/components/task-assignment-filter/task-assignment-filter.component.mjs +142 -0
- package/esm2022/lib/task/task-filters/components/task-filter-dialog/task-filter-dialog-cloud.component.mjs +72 -0
- package/esm2022/lib/task/task-filters/components/task-filters/task-filters-cloud.component.mjs +255 -0
- package/esm2022/lib/task/task-filters/models/filter-cloud.model.mjs +207 -0
- package/esm2022/lib/task/task-filters/public-api.mjs +27 -0
- package/esm2022/lib/task/task-filters/services/service-task-filter-cloud.service.mjs +283 -0
- package/esm2022/lib/task/task-filters/services/task-filter-cloud.service.mjs +392 -0
- package/esm2022/lib/task/task-filters/task-filters-cloud.module.mjs +56 -0
- package/esm2022/lib/task/task-form/components/task-form-cloud/task-form-cloud.component.mjs +199 -0
- package/esm2022/lib/task/task-form/components/user-task-cloud/complete-task/complete-task.directive.mjs +89 -0
- package/esm2022/lib/task/task-form/components/user-task-cloud/user-task-cloud.component.mjs +277 -0
- package/esm2022/lib/task/task-form/components/user-task-cloud-buttons/claim-task/claim-task-cloud.directive.mjs +101 -0
- package/esm2022/lib/task/task-form/components/user-task-cloud-buttons/unclaim-task/unclaim-task-cloud.directive.mjs +87 -0
- package/esm2022/lib/task/task-form/components/user-task-cloud-buttons/user-task-cloud-buttons.component.mjs +78 -0
- package/esm2022/lib/task/task-form/public-api.mjs +21 -0
- package/esm2022/lib/task/task-form/task-form.module.mjs +36 -0
- package/esm2022/lib/task/task-header/components/task-header-cloud.component.mjs +280 -0
- package/esm2022/lib/task/task-header/public-api.mjs +19 -0
- package/esm2022/lib/task/task-header/task-header-cloud.module.mjs +33 -0
- package/esm2022/lib/task/task-list/components/base-task-list-cloud.component.mjs +331 -0
- package/esm2022/lib/task/task-list/components/service-task-list/service-task-list-cloud.component.mjs +115 -0
- package/esm2022/lib/task/task-list/components/task-list/datatable/task-list-datatable-adapter.mjs +31 -0
- package/esm2022/lib/task/task-list/components/task-list/task-list-cloud.component.mjs +389 -0
- package/esm2022/lib/task/task-list/models/service-task-cloud.model.mjs +18 -0
- package/esm2022/lib/task/task-list/models/task-cloud-view.model.mjs +18 -0
- package/esm2022/lib/task/task-list/public-api.mjs +23 -0
- package/esm2022/lib/task/task-list/services/service-task-list-cloud.service.mjs +115 -0
- package/esm2022/lib/task/task-list/services/task-list-cloud.service.mjs +178 -0
- package/esm2022/lib/task/task-list/task-list-cloud.module.mjs +35 -0
- package/esm2022/lib/types.mjs +18 -0
- package/esm2022/public-api.mjs +41 -0
- package/fesm2022/adf-process-services-cloud.mjs +355 -350
- package/fesm2022/adf-process-services-cloud.mjs.map +1 -1
- package/lib/task/task-filters/components/base-task-filters-cloud.component.d.ts +1 -1
- package/lib/task/task-filters/components/edit-task-filters/base-edit-task-filter-cloud.component.d.ts +1 -1
- package/lib/task/task-list/components/base-task-list-cloud.component.d.ts +1 -1
- package/package.json +6 -4
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
import { Component, Input } from '@angular/core';
|
|
18
|
+
import { TranslatePipe } from '@ngx-translate/core';
|
|
19
|
+
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
|
|
20
|
+
import * as i0 from "@angular/core";
|
|
21
|
+
import * as i1 from "@angular/material/progress-spinner";
|
|
22
|
+
export class FormSpinnerComponent {
|
|
23
|
+
constructor() {
|
|
24
|
+
this.message = '';
|
|
25
|
+
}
|
|
26
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormSpinnerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
27
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormSpinnerComponent, isStandalone: true, selector: "ng-component", inputs: { message: "message" }, ngImport: i0, template: "<div class=\"adf-cloud-form-spinner\">\n <div class=\"adf-cloud-form-spinner-content\">\n <mat-progress-spinner\n color=\"primary\"\n mode=\"indeterminate\"\n />\n <span class=\"adf-cloud-form-spinner-content-message\">\n {{message | translate}}\n </span>\n </div>\n</div>\n", styles: [".adf-cloud-form-spinner{position:fixed;inset:0;display:flex;place-content:center center}.adf-cloud-form-spinner-content{display:flex;flex-flow:column wrap;place-content:center center;row-gap:25px;align-items:center}.adf-cloud-form-spinner-content-message{font-size:var(--theme-body-4-font-size)}\n"], dependencies: [{ kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i1.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }] }); }
|
|
28
|
+
}
|
|
29
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormSpinnerComponent, decorators: [{
|
|
30
|
+
type: Component,
|
|
31
|
+
args: [{ standalone: true, imports: [TranslatePipe, MatProgressSpinnerModule], template: "<div class=\"adf-cloud-form-spinner\">\n <div class=\"adf-cloud-form-spinner-content\">\n <mat-progress-spinner\n color=\"primary\"\n mode=\"indeterminate\"\n />\n <span class=\"adf-cloud-form-spinner-content-message\">\n {{message | translate}}\n </span>\n </div>\n</div>\n", styles: [".adf-cloud-form-spinner{position:fixed;inset:0;display:flex;place-content:center center}.adf-cloud-form-spinner-content{display:flex;flex-flow:column wrap;place-content:center center;row-gap:25px;align-items:center}.adf-cloud-form-spinner-content-message{font-size:var(--theme-body-4-font-size)}\n"] }]
|
|
32
|
+
}], propDecorators: { message: [{
|
|
33
|
+
type: Input
|
|
34
|
+
}] } });
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1zcGlubmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9wcm9jZXNzLXNlcnZpY2VzLWNsb3VkL3NyYy9saWIvZm9ybS9jb21wb25lbnRzL3NwaW5uZXIvZm9ybS1zcGlubmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9wcm9jZXNzLXNlcnZpY2VzLWNsb3VkL3NyYy9saWIvZm9ybS9jb21wb25lbnRzL3NwaW5uZXIvZm9ybS1zcGlubmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7O0FBUTlFLE1BQU0sT0FBTyxvQkFBb0I7SUFOakM7UUFPYSxZQUFPLEdBQUcsRUFBRSxDQUFDO0tBQ3pCOytHQUZZLG9CQUFvQjttR0FBcEIsb0JBQW9CLHdHQzNCakMsdVZBV0EsOFZEWWMsYUFBYSxpREFBRSx3QkFBd0I7OzRGQUl4QyxvQkFBb0I7a0JBTmhDLFNBQVM7aUNBQ00sSUFBSSxXQUNQLENBQUMsYUFBYSxFQUFFLHdCQUF3QixDQUFDOzhCQUt6QyxPQUFPO3NCQUFmLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDI1IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLXNwaW5uZXInO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtUcmFuc2xhdGVQaXBlLCBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGVdLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9mb3JtLXNwaW5uZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2Zvcm0tc3Bpbm5lci5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1TcGlubmVyQ29tcG9uZW50IHtcbiAgICBASW5wdXQoKSBtZXNzYWdlID0gJyc7XG59XG4iLCI8ZGl2IGNsYXNzPVwiYWRmLWNsb3VkLWZvcm0tc3Bpbm5lclwiPlxuICAgIDxkaXYgY2xhc3M9XCJhZGYtY2xvdWQtZm9ybS1zcGlubmVyLWNvbnRlbnRcIj5cbiAgICAgICAgPG1hdC1wcm9ncmVzcy1zcGlubmVyXG4gICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAgICAgbW9kZT1cImluZGV0ZXJtaW5hdGVcIlxuICAgICAgICAvPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImFkZi1jbG91ZC1mb3JtLXNwaW5uZXItY29udGVudC1tZXNzYWdlXCI+XG4gICAgICAgICAgICB7e21lc3NhZ2UgfCB0cmFuc2xhdGV9fVxuICAgICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
package/esm2022/lib/form/components/widgets/attach-file/attach-file-cloud-widget.component.mjs
ADDED
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
/* eslint-disable @angular-eslint/component-selector */
|
|
18
|
+
import { Component, EventEmitter, inject, Output, ViewEncapsulation } from '@angular/core';
|
|
19
|
+
import { FormService, ContentLinkModel, AppConfigService, UploadWidgetContentLinkModel, ErrorWidgetComponent } from '@alfresco/adf-core';
|
|
20
|
+
import { NodesApi } from '@alfresco/js-api';
|
|
21
|
+
import { ContentCloudNodeSelectorService } from '../../../services/content-cloud-node-selector.service';
|
|
22
|
+
import { UploadCloudWidgetComponent } from '../upload/upload-cloud.widget';
|
|
23
|
+
import { DestinationFolderPathType } from '../../../models/form-cloud-representation.model';
|
|
24
|
+
import { AlfrescoApiService, ContentNodeSelectorPanelService, NewVersionUploaderDataAction, NewVersionUploaderService } from '@alfresco/adf-content-services';
|
|
25
|
+
import { CommonModule } from '@angular/common';
|
|
26
|
+
import { TranslatePipe } from '@ngx-translate/core';
|
|
27
|
+
import { MatIconModule } from '@angular/material/icon';
|
|
28
|
+
import { FilePropertiesTableCloudComponent } from './file-properties-table/file-properties-table-cloud.component';
|
|
29
|
+
import { MatButtonModule } from '@angular/material/button';
|
|
30
|
+
import * as i0 from "@angular/core";
|
|
31
|
+
import * as i1 from "@alfresco/adf-core";
|
|
32
|
+
import * as i2 from "@angular/common";
|
|
33
|
+
import * as i3 from "@angular/material/icon";
|
|
34
|
+
import * as i4 from "@angular/material/button";
|
|
35
|
+
const RETRIEVE_METADATA_OPTION = 'retrieveMetadata';
|
|
36
|
+
const ALIAS_ROOT_FOLDER = '-root-';
|
|
37
|
+
const ALIAS_USER_FOLDER = '-my-';
|
|
38
|
+
const APP_NAME = '-appname-';
|
|
39
|
+
const VALID_ALIAS = [ALIAS_ROOT_FOLDER, ALIAS_USER_FOLDER, '-shared-'];
|
|
40
|
+
export class AttachFileCloudWidgetComponent extends UploadCloudWidgetComponent {
|
|
41
|
+
get nodesApi() {
|
|
42
|
+
this._nodesApi = this._nodesApi ?? new NodesApi(this.apiService.getInstance());
|
|
43
|
+
return this._nodesApi;
|
|
44
|
+
}
|
|
45
|
+
constructor(formService) {
|
|
46
|
+
super(formService);
|
|
47
|
+
this.contentNodeSelectorService = inject(ContentCloudNodeSelectorService);
|
|
48
|
+
this.appConfigService = inject(AppConfigService);
|
|
49
|
+
this.apiService = inject(AlfrescoApiService);
|
|
50
|
+
this.contentNodeSelectorPanelService = inject(ContentNodeSelectorPanelService);
|
|
51
|
+
this.newVersionUploaderService = inject(NewVersionUploaderService);
|
|
52
|
+
this.typeId = 'AttachFileCloudWidgetComponent';
|
|
53
|
+
this.rootNodeId = ALIAS_USER_FOLDER;
|
|
54
|
+
this.error = new EventEmitter();
|
|
55
|
+
this.previewState = false;
|
|
56
|
+
this.displayedColumns = ['icon', 'fileName', 'title', 'action'];
|
|
57
|
+
}
|
|
58
|
+
ngOnInit() {
|
|
59
|
+
super.ngOnInit();
|
|
60
|
+
if (this.hasFile && this.field.value.length > 0) {
|
|
61
|
+
const files = this.field.value || this.field.form.values[this.field.id];
|
|
62
|
+
this.contentModelFormFileHandler(files[0]);
|
|
63
|
+
}
|
|
64
|
+
this.field.params.displayableCMProperties = this.field.params.displayableCMProperties ?? [];
|
|
65
|
+
this.displayedColumns.splice(2, 0, ...(this.field.params.displayableCMProperties?.map((property) => property?.name) || []));
|
|
66
|
+
this.setPreviewState();
|
|
67
|
+
}
|
|
68
|
+
isPathStaticType() {
|
|
69
|
+
return this.field.params?.fileSource?.destinationFolderPath?.type === DestinationFolderPathType.STATIC_TYPE;
|
|
70
|
+
}
|
|
71
|
+
isUploadButtonVisible() {
|
|
72
|
+
return (!this.hasFile || this.multipleOption) && !this.field.readOnly;
|
|
73
|
+
}
|
|
74
|
+
onRemoveAttachFile(file) {
|
|
75
|
+
this.removeFile(file);
|
|
76
|
+
if (file['id'] === this.selectedNode?.id) {
|
|
77
|
+
this.selectedNode = null;
|
|
78
|
+
}
|
|
79
|
+
this.contentModelFormFileHandler(this.field.value.length > 0 ? this.field.value[0] : null);
|
|
80
|
+
}
|
|
81
|
+
fetchAppNameFromAppConfig() {
|
|
82
|
+
return this.appConfigService.get('alfresco-deployed-apps')[0]?.name;
|
|
83
|
+
}
|
|
84
|
+
replaceAppNameAliasWithValue(path) {
|
|
85
|
+
if (path?.match(APP_NAME)) {
|
|
86
|
+
const appName = this.fetchAppNameFromAppConfig();
|
|
87
|
+
return path.replace(APP_NAME, appName);
|
|
88
|
+
}
|
|
89
|
+
return path;
|
|
90
|
+
}
|
|
91
|
+
async openSelectDialog() {
|
|
92
|
+
if (this.previewState) {
|
|
93
|
+
this.notificationService.showWarning('FORM.PREVIEW.ATTACH_FILE_WIDGET.ON_ATTACH_FILE_CLICK');
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
const selectedMode = this.field.params.multiple ? 'multiple' : 'single';
|
|
97
|
+
const nodeId = await this.getDestinationFolderNodeId();
|
|
98
|
+
this.rootNodeId = nodeId ? nodeId : ALIAS_USER_FOLDER;
|
|
99
|
+
this.contentNodeSelectorPanelService.customModels = this.field.params.customModels;
|
|
100
|
+
this.contentNodeSelectorService
|
|
101
|
+
.openUploadFileDialog(this.rootNodeId, selectedMode, this.isAlfrescoAndLocal(), true)
|
|
102
|
+
.subscribe((selections) => {
|
|
103
|
+
selections.forEach((node) => (node['isExternal'] = true));
|
|
104
|
+
const selectionWithoutDuplication = this.removeExistingSelection(selections);
|
|
105
|
+
const hadFilesAttached = this.field.value?.length > 0;
|
|
106
|
+
this.fixIncompatibilityFromPreviousAndNewForm(selectionWithoutDuplication);
|
|
107
|
+
if (!hadFilesAttached) {
|
|
108
|
+
this.contentModelFormFileHandler(this.field.value.length > 0 ? this.field.value[0] : null);
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
async getDestinationFolderNodeId() {
|
|
114
|
+
let rootNodeId;
|
|
115
|
+
switch (this.field?.params?.fileSource?.destinationFolderPath?.type) {
|
|
116
|
+
case DestinationFolderPathType.STATIC_TYPE:
|
|
117
|
+
rootNodeId = await this.getNodeIdFromPath(this.field.params.fileSource.destinationFolderPath);
|
|
118
|
+
break;
|
|
119
|
+
case DestinationFolderPathType.STRING_TYPE:
|
|
120
|
+
rootNodeId = await this.getNodeIdFromPath(this.field.params.fileSource.destinationFolderPath);
|
|
121
|
+
break;
|
|
122
|
+
case DestinationFolderPathType.FOLDER_TYPE:
|
|
123
|
+
rootNodeId = await this.getNodeIdFromFolderVariableValue(this.field.params.fileSource.destinationFolderPath);
|
|
124
|
+
break;
|
|
125
|
+
default:
|
|
126
|
+
rootNodeId = await this.getNodeIdFromPath({ type: '', value: ALIAS_USER_FOLDER });
|
|
127
|
+
break;
|
|
128
|
+
}
|
|
129
|
+
return rootNodeId;
|
|
130
|
+
}
|
|
131
|
+
async getNodeIdFromPath(destinationFolderPath) {
|
|
132
|
+
let nodeId;
|
|
133
|
+
const destinationPath = this.getAliasAndRelativePathFromDestinationFolderPath(destinationFolderPath.value);
|
|
134
|
+
destinationPath.path = this.replaceAppNameAliasWithValue(destinationPath.path);
|
|
135
|
+
try {
|
|
136
|
+
nodeId = await this.contentNodeSelectorService.getNodeIdFromPath(destinationPath);
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
this.error.emit(error);
|
|
140
|
+
}
|
|
141
|
+
return nodeId;
|
|
142
|
+
}
|
|
143
|
+
async getNodeIdFromFolderVariableValue(destinationFolderPath) {
|
|
144
|
+
let nodeId;
|
|
145
|
+
try {
|
|
146
|
+
nodeId = await this.contentNodeSelectorService.getNodeIdFromFolderVariableValue(destinationFolderPath.value, ALIAS_USER_FOLDER);
|
|
147
|
+
}
|
|
148
|
+
catch (error) {
|
|
149
|
+
this.error.emit(error);
|
|
150
|
+
}
|
|
151
|
+
return nodeId;
|
|
152
|
+
}
|
|
153
|
+
getAliasAndRelativePathFromDestinationFolderPath(destinationFolderPath) {
|
|
154
|
+
let alias;
|
|
155
|
+
let path;
|
|
156
|
+
if (destinationFolderPath) {
|
|
157
|
+
const startOfRelativePathIndex = destinationFolderPath.indexOf('/');
|
|
158
|
+
if (startOfRelativePathIndex >= 0) {
|
|
159
|
+
alias = destinationFolderPath.substring(0, startOfRelativePathIndex);
|
|
160
|
+
path = destinationFolderPath.substring(startOfRelativePathIndex, destinationFolderPath.length);
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
alias = destinationFolderPath;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return this.isValidAlias(alias) ? { alias, path } : { alias: ALIAS_USER_FOLDER, path: undefined };
|
|
167
|
+
}
|
|
168
|
+
removeExistingSelection(selections) {
|
|
169
|
+
const existingNode = [...(this.field.value || [])];
|
|
170
|
+
return selections.filter((opt) => !existingNode.some((node) => node.id === opt.id));
|
|
171
|
+
}
|
|
172
|
+
downloadContent(file) {
|
|
173
|
+
this.processCloudContentService.downloadFile(file.id);
|
|
174
|
+
}
|
|
175
|
+
onUploadNewFileVersion(config) {
|
|
176
|
+
this.newVersionUploaderService.openUploadNewVersionDialog(config).subscribe((newVersionUploaderData) => {
|
|
177
|
+
if (newVersionUploaderData.action === NewVersionUploaderDataAction.upload) {
|
|
178
|
+
this.replaceOldFileVersionWithNew(newVersionUploaderData);
|
|
179
|
+
}
|
|
180
|
+
}, (error) => this.notificationService.showError(error.value));
|
|
181
|
+
}
|
|
182
|
+
onAttachFileClicked(nodeSelector) {
|
|
183
|
+
nodeSelector.nodeId = nodeSelector.id;
|
|
184
|
+
this.fileClicked(new ContentLinkModel(nodeSelector));
|
|
185
|
+
}
|
|
186
|
+
getWidgetIcon() {
|
|
187
|
+
return this.isAlfrescoAndLocal() ? 'file_upload' : 'attach_file';
|
|
188
|
+
}
|
|
189
|
+
onRowClicked(file) {
|
|
190
|
+
if (this.selectedNode?.id === file?.id) {
|
|
191
|
+
this.selectedNode = null;
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
this.selectedNode = file;
|
|
195
|
+
}
|
|
196
|
+
this.contentModelFormFileHandler(this.selectedNode);
|
|
197
|
+
}
|
|
198
|
+
contentModelFormFileHandler(file) {
|
|
199
|
+
if (file?.id && this.isRetrieveMetadataOptionEnabled()) {
|
|
200
|
+
const values = {};
|
|
201
|
+
this.nodesApi.getNode(file.id).then((acsNode) => {
|
|
202
|
+
const metadata = acsNode?.entry?.properties;
|
|
203
|
+
if (metadata) {
|
|
204
|
+
const keys = Object.keys(metadata);
|
|
205
|
+
keys.forEach((key) => {
|
|
206
|
+
const sanitizedKey = key.replace(':', '_');
|
|
207
|
+
values[sanitizedKey] = metadata[key];
|
|
208
|
+
});
|
|
209
|
+
this.formService.updateFormValuesRequested.next(values);
|
|
210
|
+
}
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
this.fileClicked(new UploadWidgetContentLinkModel(file, this.field.id));
|
|
214
|
+
}
|
|
215
|
+
isRetrieveMetadataOptionEnabled() {
|
|
216
|
+
return this.field?.params?.menuOptions?.[RETRIEVE_METADATA_OPTION];
|
|
217
|
+
}
|
|
218
|
+
isValidAlias(alias) {
|
|
219
|
+
return alias && VALID_ALIAS.includes(alias);
|
|
220
|
+
}
|
|
221
|
+
isSelected() {
|
|
222
|
+
return this.hasFile;
|
|
223
|
+
}
|
|
224
|
+
ngOnDestroy() {
|
|
225
|
+
this.contentNodeSelectorPanelService.customModels = [];
|
|
226
|
+
}
|
|
227
|
+
setPreviewState() {
|
|
228
|
+
this.previewState = this.formService.getPreviewState();
|
|
229
|
+
}
|
|
230
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AttachFileCloudWidgetComponent, deps: [{ token: i1.FormService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
231
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AttachFileCloudWidgetComponent, isStandalone: true, selector: "adf-cloud-attach-file-cloud-widget", outputs: { error: "error" }, host: { listeners: { "click": "event($event)", "blur": "event($event)", "change": "event($event)", "focus": "event($event)", "focusin": "event($event)", "focusout": "event($event)", "input": "event($event)", "invalid": "event($event)", "select": "event($event)" } }, usesInheritance: true, ngImport: i0, template: "<div class=\"adf-attach-file-widget-container\">\n <div class=\"adf-attach-widget {{field.className}}\"\n [class.adf-readonly]=\"field.readOnly\">\n <label class=\"adf-label\" [attr.for]=\"field.id\">{{field.name}}\n <span class=\"adf-asterisk\" *ngIf=\"isRequired()\">*</span>\n </label>\n <div class=\"adf-attach-widget-container\" (focusout)=\"markAsTouched()\">\n <div class=\"adf-attach-widget__menu-upload\" *ngIf=\"isUploadButtonVisible()\">\n <button\n (click)=\"openSelectDialog()\"\n mat-raised-button\n class=\"adf-attach-widget__menu-upload__button\"\n color=\"primary\"\n [id]=\"field.id\"\n [title]=\"field.tooltip\">\n {{ 'FORM.FIELD.ATTACH' | translate }}\n <mat-icon class=\"adf-attach-widget__menu-upload__button__icon\">{{getWidgetIcon()}}</mat-icon>\n </button>\n </div>\n </div>\n </div>\n\n <div data-automation-id=\"adf-attach-widget-readonly-list\" class=\"adf-attach-widget-readonly-table\">\n <adf-cloud-file-properties-table\n [uploadedFiles]=\"uploadedFiles\"\n [hasFile]=\"hasFile\"\n [selectedNode]=\"selectedNode\"\n [field]=\"field\"\n [displayedColumns]=\"displayedColumns\"\n [mimeTypeIcon]=\"mimeTypeIcon\"\n (rowClick)=\"onRowClicked($event)\"\n (attachFileClick)=\"onAttachFileClicked($event)\"\n (downloadFile)=\"downloadContent($event)\"\n (uploadNewFileVersion)=\"onUploadNewFileVersion($event)\"\n (contentModelFileHandler)=\"contentModelFormFileHandler($event)\"\n (removeAttachFile)=\"onRemoveAttachFile($event)\"\n />\n <div *ngIf=\"!hasFile && field.readOnly\" id=\"{{'adf-attach-empty-list-'+field.id}}\">\n {{ 'FORM.FIELD.NO_FILE_ATTACHED' | translate }}\n </div>\n\n </div>\n\n <error-widget [error]=\"field.validationSummary\" />\n <error-widget *ngIf=\"!field.isValid && isTouched() && !isSelected()\" required=\"{{ 'FORM.FIELD.REQUIRED' | translate }}\" />\n</div>\n", styles: [".adf-attach-widget-container{display:flex;align-items:center}.adf-attach-widget-container input{cursor:pointer;height:100%;right:0;opacity:0;position:absolute;top:0;width:300px;z-index:4}.adf-label{white-space:normal;height:100%}.adf-attach-widget__menu-upload{display:flex;align-items:center;margin-right:8px;word-break:normal}.adf-attach-widget__menu-upload .adf-attach-widget__menu-upload__button{line-height:28px;font-size:var(--theme-caption-font-size)}.adf-attach-widget__menu-upload button span{font-size:var(--theme-caption-font-size)}.adf-attach-widget__input-type{width:.1px;height:.1px;opacity:0;overflow:hidden;position:absolute;z-index:-1}.adf-attach-widget__image-logo{padding-left:5px}.adf-attach-widget{display:flex;justify-content:space-between;word-break:break-all;padding:.4375em;border-bottom:none;background:var(--adf-theme-mat-grey-color-a200);min-height:27px;margin-bottom:12px}.adf-attach-widget .adf-label{width:100%;font-size:var(--theme-caption-font-size);line-height:var(--theme-headline-line-height);text-align:left;white-space:normal;margin-left:8px;padding-right:8px;height:100%}.adf-attach-widget__icon{font-size:var(--theme-adf-picture-1-font-size);height:var(--theme-adf-picture-1-font-size);width:var(--theme-adf-picture-1-font-size);line-height:calc(var(--theme-adf-picture-1-font-size) - 2px)}.adf-attach-widget__reset{margin-top:-2px}.adf-attach-files-row{margin-bottom:0}.adf-attach-files-row>div:first-child{cursor:pointer}.adf-attach-selected-file-row>div:first-child .adf-datatable-selected{color:var(--theme-primary-color);padding-right:6px}.adf-attach-file-widget-container{margin:15px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ErrorWidgetComponent, selector: "error-widget", inputs: ["error", "required"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: FilePropertiesTableCloudComponent, selector: "adf-cloud-file-properties-table", inputs: ["uploadedFiles", "hasFile", "selectedNode", "field", "displayedColumns", "mimeTypeIcon"], outputs: ["rowClick", "attachFileClick", "downloadFile", "uploadNewFileVersion", "contentModelFileHandler", "removeAttachFile"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
232
|
+
}
|
|
233
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AttachFileCloudWidgetComponent, decorators: [{
|
|
234
|
+
type: Component,
|
|
235
|
+
args: [{ selector: 'adf-cloud-attach-file-cloud-widget', standalone: true, imports: [CommonModule, ErrorWidgetComponent, TranslatePipe, MatIconModule, FilePropertiesTableCloudComponent, MatButtonModule], host: {
|
|
236
|
+
'(click)': 'event($event)',
|
|
237
|
+
'(blur)': 'event($event)',
|
|
238
|
+
'(change)': 'event($event)',
|
|
239
|
+
'(focus)': 'event($event)',
|
|
240
|
+
'(focusin)': 'event($event)',
|
|
241
|
+
'(focusout)': 'event($event)',
|
|
242
|
+
'(input)': 'event($event)',
|
|
243
|
+
'(invalid)': 'event($event)',
|
|
244
|
+
'(select)': 'event($event)'
|
|
245
|
+
}, encapsulation: ViewEncapsulation.None, template: "<div class=\"adf-attach-file-widget-container\">\n <div class=\"adf-attach-widget {{field.className}}\"\n [class.adf-readonly]=\"field.readOnly\">\n <label class=\"adf-label\" [attr.for]=\"field.id\">{{field.name}}\n <span class=\"adf-asterisk\" *ngIf=\"isRequired()\">*</span>\n </label>\n <div class=\"adf-attach-widget-container\" (focusout)=\"markAsTouched()\">\n <div class=\"adf-attach-widget__menu-upload\" *ngIf=\"isUploadButtonVisible()\">\n <button\n (click)=\"openSelectDialog()\"\n mat-raised-button\n class=\"adf-attach-widget__menu-upload__button\"\n color=\"primary\"\n [id]=\"field.id\"\n [title]=\"field.tooltip\">\n {{ 'FORM.FIELD.ATTACH' | translate }}\n <mat-icon class=\"adf-attach-widget__menu-upload__button__icon\">{{getWidgetIcon()}}</mat-icon>\n </button>\n </div>\n </div>\n </div>\n\n <div data-automation-id=\"adf-attach-widget-readonly-list\" class=\"adf-attach-widget-readonly-table\">\n <adf-cloud-file-properties-table\n [uploadedFiles]=\"uploadedFiles\"\n [hasFile]=\"hasFile\"\n [selectedNode]=\"selectedNode\"\n [field]=\"field\"\n [displayedColumns]=\"displayedColumns\"\n [mimeTypeIcon]=\"mimeTypeIcon\"\n (rowClick)=\"onRowClicked($event)\"\n (attachFileClick)=\"onAttachFileClicked($event)\"\n (downloadFile)=\"downloadContent($event)\"\n (uploadNewFileVersion)=\"onUploadNewFileVersion($event)\"\n (contentModelFileHandler)=\"contentModelFormFileHandler($event)\"\n (removeAttachFile)=\"onRemoveAttachFile($event)\"\n />\n <div *ngIf=\"!hasFile && field.readOnly\" id=\"{{'adf-attach-empty-list-'+field.id}}\">\n {{ 'FORM.FIELD.NO_FILE_ATTACHED' | translate }}\n </div>\n\n </div>\n\n <error-widget [error]=\"field.validationSummary\" />\n <error-widget *ngIf=\"!field.isValid && isTouched() && !isSelected()\" required=\"{{ 'FORM.FIELD.REQUIRED' | translate }}\" />\n</div>\n", styles: [".adf-attach-widget-container{display:flex;align-items:center}.adf-attach-widget-container input{cursor:pointer;height:100%;right:0;opacity:0;position:absolute;top:0;width:300px;z-index:4}.adf-label{white-space:normal;height:100%}.adf-attach-widget__menu-upload{display:flex;align-items:center;margin-right:8px;word-break:normal}.adf-attach-widget__menu-upload .adf-attach-widget__menu-upload__button{line-height:28px;font-size:var(--theme-caption-font-size)}.adf-attach-widget__menu-upload button span{font-size:var(--theme-caption-font-size)}.adf-attach-widget__input-type{width:.1px;height:.1px;opacity:0;overflow:hidden;position:absolute;z-index:-1}.adf-attach-widget__image-logo{padding-left:5px}.adf-attach-widget{display:flex;justify-content:space-between;word-break:break-all;padding:.4375em;border-bottom:none;background:var(--adf-theme-mat-grey-color-a200);min-height:27px;margin-bottom:12px}.adf-attach-widget .adf-label{width:100%;font-size:var(--theme-caption-font-size);line-height:var(--theme-headline-line-height);text-align:left;white-space:normal;margin-left:8px;padding-right:8px;height:100%}.adf-attach-widget__icon{font-size:var(--theme-adf-picture-1-font-size);height:var(--theme-adf-picture-1-font-size);width:var(--theme-adf-picture-1-font-size);line-height:calc(var(--theme-adf-picture-1-font-size) - 2px)}.adf-attach-widget__reset{margin-top:-2px}.adf-attach-files-row{margin-bottom:0}.adf-attach-files-row>div:first-child{cursor:pointer}.adf-attach-selected-file-row>div:first-child .adf-datatable-selected{color:var(--theme-primary-color);padding-right:6px}.adf-attach-file-widget-container{margin:15px}\n"] }]
|
|
246
|
+
}], ctorParameters: () => [{ type: i1.FormService }], propDecorators: { error: [{
|
|
247
|
+
type: Output
|
|
248
|
+
}] } });
|
|
249
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0YWNoLWZpbGUtY2xvdWQtd2lkZ2V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9wcm9jZXNzLXNlcnZpY2VzLWNsb3VkL3NyYy9saWIvZm9ybS9jb21wb25lbnRzL3dpZGdldHMvYXR0YWNoLWZpbGUvYXR0YWNoLWZpbGUtY2xvdWQtd2lkZ2V0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9wcm9jZXNzLXNlcnZpY2VzLWNsb3VkL3NyYy9saWIvZm9ybS9jb21wb25lbnRzL3dpZGdldHMvYXR0YWNoLWZpbGUvYXR0YWNoLWZpbGUtY2xvdWQtd2lkZ2V0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILHVEQUF1RDtBQUV2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQXFCLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RyxPQUFPLEVBQ0gsV0FBVyxFQUVYLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsNEJBQTRCLEVBRTVCLG9CQUFvQixFQUN2QixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBUSxRQUFRLEVBQWdDLE1BQU0sa0JBQWtCLENBQUM7QUFDaEYsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDeEcsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0UsT0FBTyxFQUE4Qix5QkFBeUIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ3hILE9BQU8sRUFDSCxrQkFBa0IsRUFDbEIsK0JBQStCLEVBQy9CLDRCQUE0QixFQUU1Qix5QkFBeUIsRUFFNUIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0s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LG9CQUFvQixtRkFBRSxhQUFhLGlEQUFFLGFBQWEsb0xBQUUsaUNBQWlDLCtTQUFFLGVBQWU7OzRGQWdCckgsOEJBQThCO2tCQW5CMUMsU0FBUzsrQkFDSSxvQ0FBb0MsY0FDbEMsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLG9CQUFvQixFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsaUNBQWlDLEVBQUUsZUFBZSxDQUFDLFFBR3pIO3dCQUNGLFNBQVMsRUFBRSxlQUFlO3dCQUMxQixRQUFRLEVBQUUsZUFBZTt3QkFDekIsVUFBVSxFQUFFLGVBQWU7d0JBQzNCLFNBQVMsRUFBRSxlQUFlO3dCQUMxQixXQUFXLEVBQUUsZUFBZTt3QkFDNUIsWUFBWSxFQUFFLGVBQWU7d0JBQzdCLFNBQVMsRUFBRSxlQUFlO3dCQUMxQixXQUFXLEVBQUUsZUFBZTt3QkFDNUIsVUFBVSxFQUFFLGVBQWU7cUJBQzlCLGlCQUNjLGlCQUFpQixDQUFDLElBQUk7Z0ZBY3JDLEtBQUs7c0JBREosTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCDCqSAyMDA1LTIwMjUgSHlsYW5kIFNvZnR3YXJlLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuLyogZXNsaW50LWRpc2FibGUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvciAqL1xuXG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgaW5qZWN0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBGb3JtU2VydmljZSxcbiAgICBGb3JtVmFsdWVzLFxuICAgIENvbnRlbnRMaW5rTW9kZWwsXG4gICAgQXBwQ29uZmlnU2VydmljZSxcbiAgICBVcGxvYWRXaWRnZXRDb250ZW50TGlua01vZGVsLFxuICAgIERlc3RpbmF0aW9uRm9sZGVyUGF0aCxcbiAgICBFcnJvcldpZGdldENvbXBvbmVudFxufSBmcm9tICdAYWxmcmVzY28vYWRmLWNvcmUnO1xuaW1wb3J0IHsgTm9kZSwgTm9kZXNBcGksIFJlbGF0ZWRDb250ZW50UmVwcmVzZW50YXRpb24gfSBmcm9tICdAYWxmcmVzY28vanMtYXBpJztcbmltcG9ydCB7IENvbnRlbnRDbG91ZE5vZGVTZWxlY3RvclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9jb250ZW50LWNsb3VkLW5vZGUtc2VsZWN0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBVcGxvYWRDbG91ZFdpZGdldENvbXBvbmVudCB9IGZyb20gJy4uL3VwbG9hZC91cGxvYWQtY2xvdWQud2lkZ2V0JztcbmltcG9ydCB7IERlc3RpbmF0aW9uRm9sZGVyUGF0aE1vZGVsLCBEZXN0aW5hdGlvbkZvbGRlclBhdGhUeXBlIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2Zvcm0tY2xvdWQtcmVwcmVzZW50YXRpb24ubW9kZWwnO1xuaW1wb3J0IHtcbiAgICBBbGZyZXNjb0FwaVNlcnZpY2UsXG4gICAgQ29udGVudE5vZGVTZWxlY3RvclBhbmVsU2VydmljZSxcbiAgICBOZXdWZXJzaW9uVXBsb2FkZXJEYXRhQWN0aW9uLFxuICAgIE5ld1ZlcnNpb25VcGxvYWRlckRpYWxvZ0RhdGEsXG4gICAgTmV3VmVyc2lvblVwbG9hZGVyU2VydmljZSxcbiAgICBWZXJzaW9uTWFuYWdlclVwbG9hZERhdGFcbn0gZnJvbSAnQGFsZnJlc2NvL2FkZi1jb250ZW50LXNlcnZpY2VzJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBUcmFuc2xhdGVQaXBlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBGaWxlUHJvcGVydGllc1RhYmxlQ2xvdWRDb21wb25lbnQgfSBmcm9tICcuL2ZpbGUtcHJvcGVydGllcy10YWJsZS9maWxlLXByb3BlcnRpZXMtdGFibGUtY2xvdWQuY29tcG9uZW50JztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5cbmNvbnN0IFJFVFJJRVZFX01FVEFEQVRBX09QVElPTiA9ICdyZXRyaWV2ZU1ldGFkYXRhJztcbmNvbnN0IEFMSUFTX1JPT1RfRk9MREVSID0gJy1yb290LSc7XG5jb25zdCBBTElBU19VU0VSX0ZPTERFUiA9ICctbXktJztcbmNvbnN0IEFQUF9OQU1FID0gJy1hcHBuYW1lLSc7XG5jb25zdCBWQUxJRF9BTElBUyA9IFtBTElBU19ST09UX0ZPTERFUiwgQUxJQVNfVVNFUl9GT0xERVIsICctc2hhcmVkLSddO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FkZi1jbG91ZC1hdHRhY2gtZmlsZS1jbG91ZC13aWRnZXQnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRXJyb3JXaWRnZXRDb21wb25lbnQsIFRyYW5zbGF0ZVBpcGUsIE1hdEljb25Nb2R1bGUsIEZpbGVQcm9wZXJ0aWVzVGFibGVDbG91ZENvbXBvbmVudCwgTWF0QnV0dG9uTW9kdWxlXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vYXR0YWNoLWZpbGUtY2xvdWQtd2lkZ2V0LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9hdHRhY2gtZmlsZS1jbG91ZC13aWRnZXQuY29tcG9uZW50LnNjc3MnXSxcbiAgICBob3N0OiB7XG4gICAgICAgICcoY2xpY2spJzogJ2V2ZW50KCRldmVudCknLFxuICAgICAgICAnKGJsdXIpJzogJ2V2ZW50KCRldmVudCknLFxuICAgICAgICAnKGNoYW5nZSknOiAnZXZlbnQoJGV2ZW50KScsXG4gICAgICAgICcoZm9jdXMpJzogJ2V2ZW50KCRldmVudCknLFxuICAgICAgICAnKGZvY3VzaW4pJzogJ2V2ZW50KCRldmVudCknLFxuICAgICAgICAnKGZvY3Vzb3V0KSc6ICdldmVudCgkZXZlbnQpJyxcbiAgICAgICAgJyhpbnB1dCknOiAnZXZlbnQoJGV2ZW50KScsXG4gICAgICAgICcoaW52YWxpZCknOiAnZXZlbnQoJGV2ZW50KScsXG4gICAgICAgICcoc2VsZWN0KSc6ICdldmVudCgkZXZlbnQpJ1xuICAgIH0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBBdHRhY2hGaWxlQ2xvdWRXaWRnZXRDb21wb25lbnQgZXh0ZW5kcyBVcGxvYWRDbG91ZFdpZGdldENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICBwcml2YXRlIGNvbnRlbnROb2RlU2VsZWN0b3JTZXJ2aWNlID0gaW5qZWN0KENvbnRlbnRDbG91ZE5vZGVTZWxlY3RvclNlcnZpY2UpO1xuICAgIHByaXZhdGUgYXBwQ29uZmlnU2VydmljZSA9IGluamVjdChBcHBDb25maWdTZXJ2aWNlKTtcbiAgICBwcml2YXRlIGFwaVNlcnZpY2UgPSBpbmplY3QoQWxmcmVzY29BcGlTZXJ2aWNlKTtcbiAgICBwcml2YXRlIGNvbnRlbnROb2RlU2VsZWN0b3JQYW5lbFNlcnZpY2UgPSBpbmplY3QoQ29udGVudE5vZGVTZWxlY3RvclBhbmVsU2VydmljZSk7XG4gICAgcHJpdmF0ZSBuZXdWZXJzaW9uVXBsb2FkZXJTZXJ2aWNlID0gaW5qZWN0KE5ld1ZlcnNpb25VcGxvYWRlclNlcnZpY2UpO1xuXG4gICAgdHlwZUlkID0gJ0F0dGFjaEZpbGVDbG91ZFdpZGdldENvbXBvbmVudCc7XG4gICAgcm9vdE5vZGVJZCA9IEFMSUFTX1VTRVJfRk9MREVSO1xuICAgIHNlbGVjdGVkTm9kZTogTm9kZTtcblxuICAgIEBPdXRwdXQoKVxuICAgIGVycm9yID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICBwcml2YXRlIHByZXZpZXdTdGF0ZSA9IGZhbHNlO1xuICAgIHByaXZhdGUgX25vZGVzQXBpOiBOb2Rlc0FwaTtcbiAgICBnZXQgbm9kZXNBcGkoKTogTm9kZXNBcGkge1xuICAgICAgICB0aGlzLl9ub2Rlc0FwaSA9IHRoaXMuX25vZGVzQXBpID8/IG5ldyBOb2Rlc0FwaSh0aGlzLmFwaVNlcnZpY2UuZ2V0SW5zdGFuY2UoKSk7XG4gICAgICAgIHJldHVybiB0aGlzLl9ub2Rlc0FwaTtcbiAgICB9XG4gICAgZGlzcGxheWVkQ29sdW1ucyA9IFsnaWNvbicsICdmaWxlTmFtZScsICd0aXRsZScsICdhY3Rpb24nXTtcblxuICAgIGNvbnN0cnVjdG9yKGZvcm1TZXJ2aWNlOiBGb3JtU2VydmljZSkge1xuICAgICAgICBzdXBlcihmb3JtU2VydmljZSk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIGlmICh0aGlzLmhhc0ZpbGUgJiYgdGhpcy5maWVsZC52YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBmaWxlcyA9IHRoaXMuZmllbGQudmFsdWUgfHwgdGhpcy5maWVsZC5mb3JtLnZhbHVlc1t0aGlzLmZpZWxkLmlkXTtcbiAgICAgICAgICAgIHRoaXMuY29udGVudE1vZGVsRm9ybUZpbGVIYW5kbGVyKGZpbGVzWzBdKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpZWxkLnBhcmFtcy5kaXNwbGF5YWJsZUNNUHJvcGVydGllcyA9IHRoaXMuZmllbGQucGFyYW1zLmRpc3BsYXlhYmxlQ01Qcm9wZXJ0aWVzID8/IFtdO1xuICAgICAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMuc3BsaWNlKDIsIDAsIC4uLih0aGlzLmZpZWxkLnBhcmFtcy5kaXNwbGF5YWJsZUNNUHJvcGVydGllcz8ubWFwKChwcm9wZXJ0eSkgPT4gcHJvcGVydHk/Lm5hbWUpIHx8IFtdKSk7XG4gICAgICAgIHRoaXMuc2V0UHJldmlld1N0YXRlKCk7XG4gICAgfVxuXG4gICAgaXNQYXRoU3RhdGljVHlwZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmllbGQucGFyYW1zPy5maWxlU291cmNlPy5kZXN0aW5hdGlvbkZvbGRlclBhdGg/LnR5cGUgPT09IERlc3RpbmF0aW9uRm9sZGVyUGF0aFR5cGUuU1RBVElDX1RZUEU7XG4gICAgfVxuXG4gICAgaXNVcGxvYWRCdXR0b25WaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKCF0aGlzLmhhc0ZpbGUgfHwgdGhpcy5tdWx0aXBsZU9wdGlvbikgJiYgIXRoaXMuZmllbGQucmVhZE9ubHk7XG4gICAgfVxuXG4gICAgb25SZW1vdmVBdHRhY2hGaWxlKGZpbGU6IEZpbGUgfCBSZWxhdGVkQ29udGVudFJlcHJlc2VudGF0aW9uIHwgTm9kZSkge1xuICAgICAgICB0aGlzLnJlbW92ZUZpbGUoZmlsZSk7XG4gICAgICAgIGlmIChmaWxlWydpZCddID09PSB0aGlzLnNlbGVjdGVkTm9kZT8uaWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbnRlbnRNb2RlbEZvcm1GaWxlSGFuZGxlcih0aGlzLmZpZWxkLnZhbHVlLmxlbmd0aCA+IDAgPyB0aGlzLmZpZWxkLnZhbHVlWzBdIDogbnVsbCk7XG4gICAgfVxuXG4gICAgZmV0Y2hBcHBOYW1lRnJvbUFwcENvbmZpZygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5hcHBDb25maWdTZXJ2aWNlLmdldCgnYWxmcmVzY28tZGVwbG95ZWQtYXBwcycpWzBdPy5uYW1lO1xuICAgIH1cblxuICAgIHJlcGxhY2VBcHBOYW1lQWxpYXNXaXRoVmFsdWUocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHBhdGg/Lm1hdGNoKEFQUF9OQU1FKSkge1xuICAgICAgICAgICAgY29uc3QgYXBwTmFtZSA9IHRoaXMuZmV0Y2hBcHBOYW1lRnJvbUFwcENvbmZpZygpO1xuICAgICAgICAgICAgcmV0dXJuIHBhdGgucmVwbGFjZShBUFBfTkFNRSwgYXBwTmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgfVxuXG4gICAgYXN5bmMgb3BlblNlbGVjdERpYWxvZygpIHtcbiAgICAgICAgaWYgKHRoaXMucHJldmlld1N0YXRlKSB7XG4gICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0ZPUk0uUFJFVklFVy5BVFRBQ0hfRklMRV9XSURHRVQuT05fQVRUQUNIX0ZJTEVfQ0xJQ0snKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkTW9kZSA9IHRoaXMuZmllbGQucGFyYW1zLm11bHRpcGxlID8gJ211bHRpcGxlJyA6ICdzaW5nbGUnO1xuICAgICAgICAgICAgY29uc3Qgbm9kZUlkID0gYXdhaXQgdGhpcy5nZXREZXN0aW5hdGlvbkZvbGRlck5vZGVJZCgpO1xuICAgICAgICAgICAgdGhpcy5yb290Tm9kZUlkID0gbm9kZUlkID8gbm9kZUlkIDogQUxJQVNfVVNFUl9GT0xERVI7XG4gICAgICAgICAgICB0aGlzLmNvbnRlbnROb2RlU2VsZWN0b3JQYW5lbFNlcnZpY2UuY3VzdG9tTW9kZWxzID0gdGhpcy5maWVsZC5wYXJhbXMuY3VzdG9tTW9kZWxzO1xuXG4gICAgICAgICAgICB0aGlzLmNvbnRlbnROb2RlU2VsZWN0b3JTZXJ2aWNlXG4gICAgICAgICAgICAgICAgLm9wZW5VcGxvYWRGaWxlRGlhbG9nKHRoaXMucm9vdE5vZGVJZCwgc2VsZWN0ZWRNb2RlLCB0aGlzLmlzQWxmcmVzY29BbmRMb2NhbCgpLCB0cnVlKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHNlbGVjdGlvbnM6IE5vZGVbXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25zLmZvckVhY2goKG5vZGUpID0+IChub2RlWydpc0V4dGVybmFsJ10gPSB0cnVlKSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbldpdGhvdXREdXBsaWNhdGlvbiA9IHRoaXMucmVtb3ZlRXhpc3RpbmdTZWxlY3Rpb24oc2VsZWN0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhZEZpbGVzQXR0YWNoZWQgPSB0aGlzLmZpZWxkLnZhbHVlPy5sZW5ndGggPiAwO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpeEluY29tcGF0aWJpbGl0eUZyb21QcmV2aW91c0FuZE5ld0Zvcm0oc2VsZWN0aW9uV2l0aG91dER1cGxpY2F0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFoYWRGaWxlc0F0dGFjaGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRlbnRNb2RlbEZvcm1GaWxlSGFuZGxlcih0aGlzLmZpZWxkLnZhbHVlLmxlbmd0aCA+IDAgPyB0aGlzLmZpZWxkLnZhbHVlWzBdIDogbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZ2V0RGVzdGluYXRpb25Gb2xkZXJOb2RlSWQoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgbGV0IHJvb3ROb2RlSWQ6IHN0cmluZztcblxuICAgICAgICBzd2l0Y2ggKHRoaXMuZmllbGQ/LnBhcmFtcz8uZmlsZVNvdXJjZT8uZGVzdGluYXRpb25Gb2xkZXJQYXRoPy50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIERlc3RpbmF0aW9uRm9sZGVyUGF0aFR5cGUuU1RBVElDX1RZUEU6XG4gICAgICAgICAgICAgICAgcm9vdE5vZGVJZCA9IGF3YWl0IHRoaXMuZ2V0Tm9kZUlkRnJvbVBhdGgodGhpcy5maWVsZC5wYXJhbXMuZmlsZVNvdXJjZS5kZXN0aW5hdGlvbkZvbGRlclBhdGgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBEZXN0aW5hdGlvbkZvbGRlclBhdGhUeXBlLlNUUklOR19UWVBFOlxuICAgICAgICAgICAgICAgIHJvb3ROb2RlSWQgPSBhd2FpdCB0aGlzLmdldE5vZGVJZEZyb21QYXRoKHRoaXMuZmllbGQucGFyYW1zLmZpbGVTb3VyY2UuZGVzdGluYXRpb25Gb2xkZXJQYXRoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRGVzdGluYXRpb25Gb2xkZXJQYXRoVHlwZS5GT0xERVJfVFlQRTpcbiAgICAgICAgICAgICAgICByb290Tm9kZUlkID0gYXdhaXQgdGhpcy5nZXROb2RlSWRGcm9tRm9sZGVyVmFyaWFibGVWYWx1ZSh0aGlzLmZpZWxkLnBhcmFtcy5maWxlU291cmNlLmRlc3RpbmF0aW9uRm9sZGVyUGF0aCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJvb3ROb2RlSWQgPSBhd2FpdCB0aGlzLmdldE5vZGVJZEZyb21QYXRoKHsgdHlwZTogJycsIHZhbHVlOiBBTElBU19VU0VSX0ZPTERFUiB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByb290Tm9kZUlkO1xuICAgIH1cblxuICAgIGFzeW5jIGdldE5vZGVJZEZyb21QYXRoKGRlc3RpbmF0aW9uRm9sZGVyUGF0aDogRGVzdGluYXRpb25Gb2xkZXJQYXRoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgbGV0IG5vZGVJZDogc3RyaW5nO1xuICAgICAgICBjb25zdCBkZXN0aW5hdGlvblBhdGggPSB0aGlzLmdldEFsaWFzQW5kUmVsYXRpdmVQYXRoRnJvbURlc3RpbmF0aW9uRm9sZGVyUGF0aChkZXN0aW5hdGlvbkZvbGRlclBhdGgudmFsdWUpO1xuICAgICAgICBkZXN0aW5hdGlvblBhdGgucGF0aCA9IHRoaXMucmVwbGFjZUFwcE5hbWVBbGlhc1dpdGhWYWx1ZShkZXN0aW5hdGlvblBhdGgucGF0aCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBub2RlSWQgPSBhd2FpdCB0aGlzLmNvbnRlbnROb2RlU2VsZWN0b3JTZXJ2aWNlLmdldE5vZGVJZEZyb21QYXRoKGRlc3RpbmF0aW9uUGF0aCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLmVycm9yLmVtaXQoZXJyb3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5vZGVJZDtcbiAgICB9XG5cbiAgICBhc3luYyBnZXROb2RlSWRGcm9tRm9sZGVyVmFyaWFibGVWYWx1ZShkZXN0aW5hdGlvbkZvbGRlclBhdGg6IERlc3RpbmF0aW9uRm9sZGVyUGF0aCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGxldCBub2RlSWQ6IHN0cmluZztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG5vZGVJZCA9IGF3YWl0IHRoaXMuY29udGVudE5vZGVTZWxlY3RvclNlcnZpY2UuZ2V0Tm9kZUlkRnJvbUZvbGRlclZhcmlhYmxlVmFsdWUoZGVzdGluYXRpb25Gb2xkZXJQYXRoLnZhbHVlLCBBTElBU19VU0VSX0ZPTERFUik7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLmVycm9yLmVtaXQoZXJyb3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5vZGVJZDtcbiAgICB9XG5cbiAgICBnZXRBbGlhc0FuZFJlbGF0aXZlUGF0aEZyb21EZXN0aW5hdGlvbkZvbGRlclBhdGgoZGVzdGluYXRpb25Gb2xkZXJQYXRoOiBzdHJpbmcpOiBEZXN0aW5hdGlvbkZvbGRlclBhdGhNb2RlbCB7XG4gICAgICAgIGxldCBhbGlhczogc3RyaW5nO1xuICAgICAgICBsZXQgcGF0aDogc3RyaW5nO1xuICAgICAgICBpZiAoZGVzdGluYXRpb25Gb2xkZXJQYXRoKSB7XG4gICAgICAgICAgICBjb25zdCBzdGFydE9mUmVsYXRpdmVQYXRoSW5kZXggPSBkZXN0aW5hdGlvbkZvbGRlclBhdGguaW5kZXhPZignLycpO1xuICAgICAgICAgICAgaWYgKHN0YXJ0T2ZSZWxhdGl2ZVBhdGhJbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgYWxpYXMgPSBkZXN0aW5hdGlvbkZvbGRlclBhdGguc3Vic3RyaW5nKDAsIHN0YXJ0T2ZSZWxhdGl2ZVBhdGhJbmRleCk7XG4gICAgICAgICAgICAgICAgcGF0aCA9IGRlc3RpbmF0aW9uRm9sZGVyUGF0aC5zdWJzdHJpbmcoc3RhcnRPZlJlbGF0aXZlUGF0aEluZGV4LCBkZXN0aW5hdGlvbkZvbGRlclBhdGgubGVuZ3RoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYWxpYXMgPSBkZXN0aW5hdGlvbkZvbGRlclBhdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkQWxpYXMoYWxpYXMpID8geyBhbGlhcywgcGF0aCB9IDogeyBhbGlhczogQUxJQVNfVVNFUl9GT0xERVIsIHBhdGg6IHVuZGVmaW5lZCB9O1xuICAgIH1cblxuICAgIHJlbW92ZUV4aXN0aW5nU2VsZWN0aW9uKHNlbGVjdGlvbnM6IE5vZGVbXSkge1xuICAgICAgICBjb25zdCBleGlzdGluZ05vZGU6IE5vZGVbXSA9IFsuLi4odGhpcy5maWVsZC52YWx1ZSB8fCBbXSldO1xuICAgICAgICByZXR1cm4gc2VsZWN0aW9ucy5maWx0ZXIoKG9wdCkgPT4gIWV4aXN0aW5nTm9kZS5zb21lKChub2RlKSA9PiBub2RlLmlkID09PSBvcHQuaWQpKTtcbiAgICB9XG5cbiAgICBkb3dubG9hZENvbnRlbnQoZmlsZTogTm9kZSk6IHZvaWQge1xuICAgICAgICB0aGlzLnByb2Nlc3NDbG91ZENvbnRlbnRTZXJ2aWNlLmRvd25sb2FkRmlsZShmaWxlLmlkKTtcbiAgICB9XG5cbiAgICBvblVwbG9hZE5ld0ZpbGVWZXJzaW9uKGNvbmZpZzogTmV3VmVyc2lvblVwbG9hZGVyRGlhbG9nRGF0YSk6IHZvaWQge1xuICAgICAgICB0aGlzLm5ld1ZlcnNpb25VcGxvYWRlclNlcnZpY2Uub3BlblVwbG9hZE5ld1ZlcnNpb25EaWFsb2coY29uZmlnKS5zdWJzY3JpYmUoXG4gICAgICAgICAgICAobmV3VmVyc2lvblVwbG9hZGVyRGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChuZXdWZXJzaW9uVXBsb2FkZXJEYXRhLmFjdGlvbiA9PT0gTmV3VmVyc2lvblVwbG9hZGVyRGF0YUFjdGlvbi51cGxvYWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXBsYWNlT2xkRmlsZVZlcnNpb25XaXRoTmV3KG5ld1ZlcnNpb25VcGxvYWRlckRhdGEgYXMgVmVyc2lvbk1hbmFnZXJVcGxvYWREYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKGVycm9yKSA9PiB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc2hvd0Vycm9yKGVycm9yLnZhbHVlKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIG9uQXR0YWNoRmlsZUNsaWNrZWQobm9kZVNlbGVjdG9yOiBhbnkpIHtcbiAgICAgICAgbm9kZVNlbGVjdG9yLm5vZGVJZCA9IG5vZGVTZWxlY3Rvci5pZDtcbiAgICAgICAgdGhpcy5maWxlQ2xpY2tlZChuZXcgQ29udGVudExpbmtNb2RlbChub2RlU2VsZWN0b3IpKTtcbiAgICB9XG5cbiAgICBnZXRXaWRnZXRJY29uKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzQWxmcmVzY29BbmRMb2NhbCgpID8gJ2ZpbGVfdXBsb2FkJyA6ICdhdHRhY2hfZmlsZSc7XG4gICAgfVxuXG4gICAgb25Sb3dDbGlja2VkKGZpbGU/OiBOb2RlKSB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkTm9kZT8uaWQgPT09IGZpbGU/LmlkKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZSA9IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZSA9IGZpbGU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb250ZW50TW9kZWxGb3JtRmlsZUhhbmRsZXIodGhpcy5zZWxlY3RlZE5vZGUpO1xuICAgIH1cblxuICAgIGNvbnRlbnRNb2RlbEZvcm1GaWxlSGFuZGxlcihmaWxlPzogYW55KSB7XG4gICAgICAgIGlmIChmaWxlPy5pZCAmJiB0aGlzLmlzUmV0cmlldmVNZXRhZGF0YU9wdGlvbkVuYWJsZWQoKSkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWVzOiBGb3JtVmFsdWVzID0ge307XG4gICAgICAgICAgICB0aGlzLm5vZGVzQXBpLmdldE5vZGUoZmlsZS5pZCkudGhlbigoYWNzTm9kZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1ldGFkYXRhID0gYWNzTm9kZT8uZW50cnk/LnByb3BlcnRpZXM7XG4gICAgICAgICAgICAgICAgaWYgKG1ldGFkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhtZXRhZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIGtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzYW5pdGl6ZWRLZXkgPSBrZXkucmVwbGFjZSgnOicsICdfJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbc2FuaXRpemVkS2V5XSA9IG1ldGFkYXRhW2tleV07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1TZXJ2aWNlLnVwZGF0ZUZvcm1WYWx1ZXNSZXF1ZXN0ZWQubmV4dCh2YWx1ZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmlsZUNsaWNrZWQobmV3IFVwbG9hZFdpZGdldENvbnRlbnRMaW5rTW9kZWwoZmlsZSwgdGhpcy5maWVsZC5pZCkpO1xuICAgIH1cblxuICAgIGlzUmV0cmlldmVNZXRhZGF0YU9wdGlvbkVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpZWxkPy5wYXJhbXM/Lm1lbnVPcHRpb25zPy5bUkVUUklFVkVfTUVUQURBVEFfT1BUSU9OXTtcbiAgICB9XG5cbiAgICBpc1ZhbGlkQWxpYXMoYWxpYXM6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gYWxpYXMgJiYgVkFMSURfQUxJQVMuaW5jbHVkZXMoYWxpYXMpO1xuICAgIH1cblxuICAgIGlzU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmhhc0ZpbGU7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuY29udGVudE5vZGVTZWxlY3RvclBhbmVsU2VydmljZS5jdXN0b21Nb2RlbHMgPSBbXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFByZXZpZXdTdGF0ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wcmV2aWV3U3RhdGUgPSB0aGlzLmZvcm1TZXJ2aWNlLmdldFByZXZpZXdTdGF0ZSgpO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJhZGYtYXR0YWNoLWZpbGUtd2lkZ2V0LWNvbnRhaW5lclwiPlxuICAgIDxkaXYgY2xhc3M9XCJhZGYtYXR0YWNoLXdpZGdldCB7e2ZpZWxkLmNsYXNzTmFtZX19XCJcbiAgICAgICAgW2NsYXNzLmFkZi1yZWFkb25seV09XCJmaWVsZC5yZWFkT25seVwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJhZGYtbGFiZWxcIiBbYXR0ci5mb3JdPVwiZmllbGQuaWRcIj57e2ZpZWxkLm5hbWV9fVxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhZGYtYXN0ZXJpc2tcIiAqbmdJZj1cImlzUmVxdWlyZWQoKVwiPio8L3NwYW4+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtYXR0YWNoLXdpZGdldC1jb250YWluZXJcIiAoZm9jdXNvdXQpPVwibWFya0FzVG91Y2hlZCgpXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLWF0dGFjaC13aWRnZXRfX21lbnUtdXBsb2FkXCIgKm5nSWY9XCJpc1VwbG9hZEJ1dHRvblZpc2libGUoKVwiPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5TZWxlY3REaWFsb2coKVwiXG4gICAgICAgICAgICAgICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLWF0dGFjaC13aWRnZXRfX21lbnUtdXBsb2FkX19idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICBbaWRdPVwiZmllbGQuaWRcIlxuICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiZmllbGQudG9vbHRpcFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ0ZPUk0uRklFTEQuQVRUQUNIJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiYWRmLWF0dGFjaC13aWRnZXRfX21lbnUtdXBsb2FkX19idXR0b25fX2ljb25cIj57e2dldFdpZGdldEljb24oKX19PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgZGF0YS1hdXRvbWF0aW9uLWlkPVwiYWRmLWF0dGFjaC13aWRnZXQtcmVhZG9ubHktbGlzdFwiIGNsYXNzPVwiYWRmLWF0dGFjaC13aWRnZXQtcmVhZG9ubHktdGFibGVcIj5cbiAgICAgICAgPGFkZi1jbG91ZC1maWxlLXByb3BlcnRpZXMtdGFibGVcbiAgICAgICAgICAgIFt1cGxvYWRlZEZpbGVzXT1cInVwbG9hZGVkRmlsZXNcIlxuICAgICAgICAgICAgW2hhc0ZpbGVdPVwiaGFzRmlsZVwiXG4gICAgICAgICAgICBbc2VsZWN0ZWROb2RlXT1cInNlbGVjdGVkTm9kZVwiXG4gICAgICAgICAgICBbZmllbGRdPVwiZmllbGRcIlxuICAgICAgICAgICAgW2Rpc3BsYXllZENvbHVtbnNdPVwiZGlzcGxheWVkQ29sdW1uc1wiXG4gICAgICAgICAgICBbbWltZVR5cGVJY29uXT1cIm1pbWVUeXBlSWNvblwiXG4gICAgICAgICAgICAocm93Q2xpY2spPVwib25Sb3dDbGlja2VkKCRldmVudClcIlxuICAgICAgICAgICAgKGF0dGFjaEZpbGVDbGljayk9XCJvbkF0dGFjaEZpbGVDbGlja2VkKCRldmVudClcIlxuICAgICAgICAgICAgKGRvd25sb2FkRmlsZSk9XCJkb3dubG9hZENvbnRlbnQoJGV2ZW50KVwiXG4gICAgICAgICAgICAodXBsb2FkTmV3RmlsZVZlcnNpb24pPVwib25VcGxvYWROZXdGaWxlVmVyc2lvbigkZXZlbnQpXCJcbiAgICAgICAgICAgIChjb250ZW50TW9kZWxGaWxlSGFuZGxlcik9XCJjb250ZW50TW9kZWxGb3JtRmlsZUhhbmRsZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAocmVtb3ZlQXR0YWNoRmlsZSk9XCJvblJlbW92ZUF0dGFjaEZpbGUoJGV2ZW50KVwiXG4gICAgICAgIC8+XG4gICAgICAgIDxkaXYgKm5nSWY9XCIhaGFzRmlsZSAmJiBmaWVsZC5yZWFkT25seVwiIGlkPVwie3snYWRmLWF0dGFjaC1lbXB0eS1saXN0LScrZmllbGQuaWR9fVwiPlxuICAgICAgICAgICAge3sgJ0ZPUk0uRklFTEQuTk9fRklMRV9BVFRBQ0hFRCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9kaXY+XG5cbiAgICA8L2Rpdj5cblxuICAgIDxlcnJvci13aWRnZXQgW2Vycm9yXT1cImZpZWxkLnZhbGlkYXRpb25TdW1tYXJ5XCIgLz5cbiAgICA8ZXJyb3Itd2lkZ2V0ICpuZ0lmPVwiIWZpZWxkLmlzVmFsaWQgJiYgaXNUb3VjaGVkKCkgJiYgIWlzU2VsZWN0ZWQoKVwiIHJlcXVpcmVkPVwie3sgJ0ZPUk0uRklFTEQuUkVRVUlSRUQnIHwgdHJhbnNsYXRlIH19XCIgLz5cbjwvZGl2PlxuIl19
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
/* eslint-disable @angular-eslint/component-selector */
|
|
18
|
+
import { Component, EventEmitter, inject, Input, Output } from '@angular/core';
|
|
19
|
+
import { LocalizedDatePipe, ThumbnailService, UploadDirective } from '@alfresco/adf-core';
|
|
20
|
+
import { Node } from '@alfresco/js-api';
|
|
21
|
+
import { CommonModule } from '@angular/common';
|
|
22
|
+
import { MatIconModule } from '@angular/material/icon';
|
|
23
|
+
import { TranslatePipe } from '@ngx-translate/core';
|
|
24
|
+
import { MatMenuModule } from '@angular/material/menu';
|
|
25
|
+
import { MatButtonModule } from '@angular/material/button';
|
|
26
|
+
import { MatTableModule } from '@angular/material/table';
|
|
27
|
+
import { MatLineModule } from '@angular/material/core';
|
|
28
|
+
import { MatListModule } from '@angular/material/list';
|
|
29
|
+
import * as i0 from "@angular/core";
|
|
30
|
+
import * as i1 from "@angular/common";
|
|
31
|
+
import * as i2 from "@angular/material/icon";
|
|
32
|
+
import * as i3 from "@angular/material/menu";
|
|
33
|
+
import * as i4 from "@angular/material/button";
|
|
34
|
+
import * as i5 from "@angular/material/table";
|
|
35
|
+
import * as i6 from "@angular/material/core";
|
|
36
|
+
import * as i7 from "@angular/material/list";
|
|
37
|
+
const RETRIEVE_METADATA_OPTION = 'retrieveMetadata';
|
|
38
|
+
export class FilePropertiesTableCloudComponent {
|
|
39
|
+
constructor() {
|
|
40
|
+
this.localizedDatePipe = inject(LocalizedDatePipe);
|
|
41
|
+
this.thumbnailService = inject(ThumbnailService);
|
|
42
|
+
this.rowClick = new EventEmitter();
|
|
43
|
+
this.attachFileClick = new EventEmitter();
|
|
44
|
+
this.downloadFile = new EventEmitter();
|
|
45
|
+
this.uploadNewFileVersion = new EventEmitter();
|
|
46
|
+
this.contentModelFileHandler = new EventEmitter();
|
|
47
|
+
this.removeAttachFile = new EventEmitter();
|
|
48
|
+
}
|
|
49
|
+
onRowClicked(file) {
|
|
50
|
+
this.rowClick.emit(file);
|
|
51
|
+
}
|
|
52
|
+
onAttachFileClicked(nodeSelector) {
|
|
53
|
+
this.attachFileClick.emit(nodeSelector);
|
|
54
|
+
}
|
|
55
|
+
downloadContent(file) {
|
|
56
|
+
this.downloadFile.emit(file);
|
|
57
|
+
}
|
|
58
|
+
onUploadNewFileVersion(customEvent, node) {
|
|
59
|
+
const newVersionUploaderDialogData = {
|
|
60
|
+
file: customEvent.detail.files[0].file,
|
|
61
|
+
node,
|
|
62
|
+
showComments: true,
|
|
63
|
+
allowDownload: true
|
|
64
|
+
};
|
|
65
|
+
this.uploadNewFileVersion.emit(newVersionUploaderDialogData);
|
|
66
|
+
}
|
|
67
|
+
contentModelFormFileHandler(file) {
|
|
68
|
+
this.contentModelFileHandler.emit(file);
|
|
69
|
+
}
|
|
70
|
+
onRemoveAttachFile(file) {
|
|
71
|
+
this.removeAttachFile.emit(file);
|
|
72
|
+
}
|
|
73
|
+
getIcon(mimeType) {
|
|
74
|
+
return this.thumbnailService.getMimeTypeIcon(mimeType);
|
|
75
|
+
}
|
|
76
|
+
getColumnValue(file, prop) {
|
|
77
|
+
if (!file.properties[prop.prefixedName]) {
|
|
78
|
+
const fieldProperty = this.field.params.displayableCMProperties?.find((property) => property.name === prop.name);
|
|
79
|
+
return fieldProperty.defaultValue ? this.checkDateTypeAndTransform(prop.dataType, fieldProperty.defaultValue) : '--';
|
|
80
|
+
}
|
|
81
|
+
return file.properties[prop.prefixedName] ? this.checkDateTypeAndTransform(prop.dataType, file.properties[prop.prefixedName]) : '--';
|
|
82
|
+
}
|
|
83
|
+
checkDateTypeAndTransform(dataType, value) {
|
|
84
|
+
if (dataType === 'd:date') {
|
|
85
|
+
return this.localizedDatePipe.transform(value);
|
|
86
|
+
}
|
|
87
|
+
else if (dataType === 'd:datetime') {
|
|
88
|
+
return this.localizedDatePipe.transform(value, 'medium');
|
|
89
|
+
}
|
|
90
|
+
return value;
|
|
91
|
+
}
|
|
92
|
+
displayMenuOption(option) {
|
|
93
|
+
return this.field?.params?.menuOptions ? this.field.params.menuOptions[option] : option !== RETRIEVE_METADATA_OPTION;
|
|
94
|
+
}
|
|
95
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FilePropertiesTableCloudComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
96
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FilePropertiesTableCloudComponent, isStandalone: true, selector: "adf-cloud-file-properties-table", inputs: { uploadedFiles: "uploadedFiles", hasFile: "hasFile", selectedNode: "selectedNode", field: "field", displayedColumns: "displayedColumns", mimeTypeIcon: "mimeTypeIcon" }, outputs: { rowClick: "rowClick", attachFileClick: "attachFileClick", downloadFile: "downloadFile", uploadNewFileVersion: "uploadNewFileVersion", contentModelFileHandler: "contentModelFileHandler", removeAttachFile: "removeAttachFile" }, providers: [LocalizedDatePipe], ngImport: i0, template: "<div class=\"adf-file-properties-table-container\">\n <table mat-table [dataSource]=\"uploadedFiles\" class=\"adf-properties-table adf-file-properties-table mat-elevation-z0\" *ngIf=\"hasFile\">\n <ng-container matColumnDef=\"icon\">\n <th mat-header-cell *matHeaderCellDef></th>\n <td class=\"adf-file-properties-table-cell\" mat-cell *matCellDef=\"let element\">\n <mat-icon matListItemLine class=\"adf-datatable-selected\"\n *ngIf=\"selectedNode && element.id === selectedNode.id\" (click)=\"onRowClicked(element)\">\n check_circle\n </mat-icon>\n <img matListItemLine class=\"adf-attach-widget__icon\"\n *ngIf=\"!selectedNode || element.id !== selectedNode.id\" [id]=\"'file-'+element?.id+'-icon'\"\n (click)=\"onRowClicked(element)\"\n (keyup.enter)=\"onRowClicked(element)\"\n [src]=\"element.content ? getIcon(element.content.mimeType) : getIcon(element['mimeType'])\"\n [alt]=\"mimeTypeIcon\" role=\"button\" tabindex=\"0\" />\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"fileName\">\n <th mat-header-cell *matHeaderCellDef>{{ 'FORM.FIELD.FILE_NAME' | translate }}</th>\n <td mat-cell class=\"adf-file-properties-table-cell\" *matCellDef=\"let element\">\n <span matLine id=\"{{'file-'+element?.id}}\"\n role=\"button\"\n tabindex=\"0\"\n class=\"adf-file\"\n (keyup.enter)=\"onAttachFileClicked(element)\"\n (click)=\"onAttachFileClicked(element)\"\n >{{ element.name }}</span>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"title\">\n <th mat-header-cell *matHeaderCellDef>{{ 'FORM.FIELD.TITLE' | translate }}</th>\n <td mat-cell class=\"adf-file-properties-table-cell\" *matCellDef=\"let element\">{{ element.title }}</td>\n </ng-container>\n\n <ng-container *ngFor=\"let prop of field?.params?.displayableCMProperties\" [matColumnDef]=\"prop.name\">\n <th mat-header-cell *matHeaderCellDef>{{prop.title ? prop.title : prop.name | titlecase }}</th>\n <td mat-cell class=\"adf-file-properties-table-cell\" *matCellDef=\"let row\">\n <span matLine id=\"{{'fileProperty-'+row?.id+'-'+prop?.name}}\" role=\"button\" tabindex=\"0\"\n (keyup.enter)=\"onRowClicked(row)\"\n (click)=\"onRowClicked(row)\">{{ getColumnValue(row, prop) }}</span>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"action\">\n <th mat-header-cell *matHeaderCellDef></th>\n <td mat-cell class=\"adf-file-properties-table-cell\" *matCellDef=\"let element\">\n <button id=\"{{'file-'+element?.id+'-option-menu'}}\" mat-icon-button [matMenuTriggerFor]=\"fileActionMenu\"\n *ngIf=\"!!element.content?.mimeType\"\n [attr.aria-label]=\"'ADF_PROCESS_LIST.DETAILS.BUTTON.FILE_OPTION_MENU' | translate\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #fileActionMenu=\"matMenu\" xPosition=\"before\">\n <button *ngIf=\"displayMenuOption('show') && !!element.content?.mimeType\"\n id=\"{{'file-'+element?.id+'-show-file'}}\" mat-menu-item\n (click)=\"onAttachFileClicked(element)\">\n <mat-icon>visibility</mat-icon>\n <span>{{ 'FORM.FIELD.VIEW_FILE' | translate }}</span>\n </button>\n <button *ngIf=\"displayMenuOption('download') && !!element.content?.mimeType\"\n id=\"{{'file-'+element?.id+'-download-file'}}\" mat-menu-item\n (click)=\"downloadContent(element)\">\n <mat-icon>file_download</mat-icon>\n <span>{{ 'FORM.FIELD.DOWNLOAD_FILE' | translate }}</span>\n </button>\n <button *ngIf=\"displayMenuOption('retrieveMetadata') && !!element.content?.mimeType\"\n id=\"{{'file-'+element?.id+'-retrieve-file-metadata'}}\" mat-menu-item\n (click)=\"contentModelFormFileHandler(element)\">\n <mat-icon class=\"mat-24\">low_priority</mat-icon>\n <span>{{ 'ADF_CLOUD_FORM_COMPONENT.RETRIEVE_METADATA' | translate }}</span>\n </button>\n <button *ngIf=\"!field.readOnly && displayMenuOption('remove')\"\n mat-menu-item\n [id]=\"'file-'+element?.id+'-remove'\"\n (click)=\"onRemoveAttachFile(element);\" (keyup.enter)=\"onRemoveAttachFile(element);\">\n <mat-icon class=\"mat-24\">highlight_off</mat-icon>\n <span>{{ 'FORM.FIELD.REMOVE_FILE' | translate }}</span>\n </button>\n <div *ngIf=\"displayMenuOption('newVersion')\">\n <button [adf-upload]=\"true\" [mode]=\"['click']\"\n (upload-files)=\"onUploadNewFileVersion($event, element);\"\n id=\"{{'file-'+ element?.id +'-upload-new-version'}}\" mat-menu-item>\n <mat-icon class=\"mat-24\">file_upload</mat-icon>\n <span>{{ 'ADF_VERSION_LIST.ACTIONS.UPLOAD.TITLE' | translate }}</span>\n </button>\n </div>\n </mat-menu>\n </td>\n </ng-container>\n <tr mat-header-row class=\"adf-file-properties-table-header-row\" *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns\"></tr>\n </table>\n</div>\n", styles: [".adf-file-properties-table-container .adf-file-properties-table.adf-properties-table table{width:100%;border:1px solid var(--adf-theme-foreground-text-color-007);box-shadow:none}.adf-file-properties-table-container .adf-file-properties-table.adf-properties-table table .adf-file{cursor:pointer}.adf-file-properties-table-container .adf-file-properties-table.adf-properties-table table .adf-file:hover{text-decoration:underline}.adf-file-properties-table-container .adf-file-properties-table.adf-properties-table table .adf-datatable-selected{padding:6px}.adf-file-properties-table-container .adf-file-properties-table.adf-properties-table table tr.adf-file-properties-table-header-row{height:32px}.adf-file-properties-table-container .adf-file-properties-table.adf-properties-table table th{font-weight:700;padding-right:0}.adf-file-properties-table-container .adf-file-properties-table.adf-properties-table table td{max-width:50px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding-right:0}.adf-file-properties-table-container .adf-file-properties-table.adf-properties-table table td.adf-file-properties-table-cell:first-of-type,.adf-file-properties-table-container .adf-file-properties-table.adf-properties-table table td.adf-file-properties-table-cell:last-of-type{width:18%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.TitleCasePipe, name: "titlecase" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i3.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i3.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i3.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "directive", type: UploadDirective, selector: "[adf-upload]", inputs: ["adf-upload", "adf-upload-data", "mode", "multiple", "accept", "directory"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i5.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i5.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i5.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i5.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i5.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i5.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i5.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i5.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i5.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i5.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "ngmodule", type: MatLineModule }, { kind: "directive", type: i6.MatLine, selector: "[mat-line], [matLine]" }, { kind: "ngmodule", type: MatListModule }, { kind: "directive", type: i7.MatListItemLine, selector: "[matListItemLine]" }] }); }
|
|
97
|
+
}
|
|
98
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FilePropertiesTableCloudComponent, decorators: [{
|
|
99
|
+
type: Component,
|
|
100
|
+
args: [{ selector: 'adf-cloud-file-properties-table', standalone: true, imports: [
|
|
101
|
+
CommonModule,
|
|
102
|
+
MatIconModule,
|
|
103
|
+
TranslatePipe,
|
|
104
|
+
MatMenuModule,
|
|
105
|
+
UploadDirective,
|
|
106
|
+
MatButtonModule,
|
|
107
|
+
MatTableModule,
|
|
108
|
+
MatLineModule,
|
|
109
|
+
MatListModule
|
|
110
|
+
], providers: [LocalizedDatePipe], template: "<div class=\"adf-file-properties-table-container\">\n <table mat-table [dataSource]=\"uploadedFiles\" class=\"adf-properties-table adf-file-properties-table mat-elevation-z0\" *ngIf=\"hasFile\">\n <ng-container matColumnDef=\"icon\">\n <th mat-header-cell *matHeaderCellDef></th>\n <td class=\"adf-file-properties-table-cell\" mat-cell *matCellDef=\"let element\">\n <mat-icon matListItemLine class=\"adf-datatable-selected\"\n *ngIf=\"selectedNode && element.id === selectedNode.id\" (click)=\"onRowClicked(element)\">\n check_circle\n </mat-icon>\n <img matListItemLine class=\"adf-attach-widget__icon\"\n *ngIf=\"!selectedNode || element.id !== selectedNode.id\" [id]=\"'file-'+element?.id+'-icon'\"\n (click)=\"onRowClicked(element)\"\n (keyup.enter)=\"onRowClicked(element)\"\n [src]=\"element.content ? getIcon(element.content.mimeType) : getIcon(element['mimeType'])\"\n [alt]=\"mimeTypeIcon\" role=\"button\" tabindex=\"0\" />\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"fileName\">\n <th mat-header-cell *matHeaderCellDef>{{ 'FORM.FIELD.FILE_NAME' | translate }}</th>\n <td mat-cell class=\"adf-file-properties-table-cell\" *matCellDef=\"let element\">\n <span matLine id=\"{{'file-'+element?.id}}\"\n role=\"button\"\n tabindex=\"0\"\n class=\"adf-file\"\n (keyup.enter)=\"onAttachFileClicked(element)\"\n (click)=\"onAttachFileClicked(element)\"\n >{{ element.name }}</span>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"title\">\n <th mat-header-cell *matHeaderCellDef>{{ 'FORM.FIELD.TITLE' | translate }}</th>\n <td mat-cell class=\"adf-file-properties-table-cell\" *matCellDef=\"let element\">{{ element.title }}</td>\n </ng-container>\n\n <ng-container *ngFor=\"let prop of field?.params?.displayableCMProperties\" [matColumnDef]=\"prop.name\">\n <th mat-header-cell *matHeaderCellDef>{{prop.title ? prop.title : prop.name | titlecase }}</th>\n <td mat-cell class=\"adf-file-properties-table-cell\" *matCellDef=\"let row\">\n <span matLine id=\"{{'fileProperty-'+row?.id+'-'+prop?.name}}\" role=\"button\" tabindex=\"0\"\n (keyup.enter)=\"onRowClicked(row)\"\n (click)=\"onRowClicked(row)\">{{ getColumnValue(row, prop) }}</span>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"action\">\n <th mat-header-cell *matHeaderCellDef></th>\n <td mat-cell class=\"adf-file-properties-table-cell\" *matCellDef=\"let element\">\n <button id=\"{{'file-'+element?.id+'-option-menu'}}\" mat-icon-button [matMenuTriggerFor]=\"fileActionMenu\"\n *ngIf=\"!!element.content?.mimeType\"\n [attr.aria-label]=\"'ADF_PROCESS_LIST.DETAILS.BUTTON.FILE_OPTION_MENU' | translate\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #fileActionMenu=\"matMenu\" xPosition=\"before\">\n <button *ngIf=\"displayMenuOption('show') && !!element.content?.mimeType\"\n id=\"{{'file-'+element?.id+'-show-file'}}\" mat-menu-item\n (click)=\"onAttachFileClicked(element)\">\n <mat-icon>visibility</mat-icon>\n <span>{{ 'FORM.FIELD.VIEW_FILE' | translate }}</span>\n </button>\n <button *ngIf=\"displayMenuOption('download') && !!element.content?.mimeType\"\n id=\"{{'file-'+element?.id+'-download-file'}}\" mat-menu-item\n (click)=\"downloadContent(element)\">\n <mat-icon>file_download</mat-icon>\n <span>{{ 'FORM.FIELD.DOWNLOAD_FILE' | translate }}</span>\n </button>\n <button *ngIf=\"displayMenuOption('retrieveMetadata') && !!element.content?.mimeType\"\n id=\"{{'file-'+element?.id+'-retrieve-file-metadata'}}\" mat-menu-item\n (click)=\"contentModelFormFileHandler(element)\">\n <mat-icon class=\"mat-24\">low_priority</mat-icon>\n <span>{{ 'ADF_CLOUD_FORM_COMPONENT.RETRIEVE_METADATA' | translate }}</span>\n </button>\n <button *ngIf=\"!field.readOnly && displayMenuOption('remove')\"\n mat-menu-item\n [id]=\"'file-'+element?.id+'-remove'\"\n (click)=\"onRemoveAttachFile(element);\" (keyup.enter)=\"onRemoveAttachFile(element);\">\n <mat-icon class=\"mat-24\">highlight_off</mat-icon>\n <span>{{ 'FORM.FIELD.REMOVE_FILE' | translate }}</span>\n </button>\n <div *ngIf=\"displayMenuOption('newVersion')\">\n <button [adf-upload]=\"true\" [mode]=\"['click']\"\n (upload-files)=\"onUploadNewFileVersion($event, element);\"\n id=\"{{'file-'+ element?.id +'-upload-new-version'}}\" mat-menu-item>\n <mat-icon class=\"mat-24\">file_upload</mat-icon>\n <span>{{ 'ADF_VERSION_LIST.ACTIONS.UPLOAD.TITLE' | translate }}</span>\n </button>\n </div>\n </mat-menu>\n </td>\n </ng-container>\n <tr mat-header-row class=\"adf-file-properties-table-header-row\" *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns\"></tr>\n </table>\n</div>\n", styles: [".adf-file-properties-table-container .adf-file-properties-table.adf-properties-table table{width:100%;border:1px solid var(--adf-theme-foreground-text-color-007);box-shadow:none}.adf-file-properties-table-container .adf-file-properties-table.adf-properties-table table .adf-file{cursor:pointer}.adf-file-properties-table-container .adf-file-properties-table.adf-properties-table table .adf-file:hover{text-decoration:underline}.adf-file-properties-table-container .adf-file-properties-table.adf-properties-table table .adf-datatable-selected{padding:6px}.adf-file-properties-table-container .adf-file-properties-table.adf-properties-table table tr.adf-file-properties-table-header-row{height:32px}.adf-file-properties-table-container .adf-file-properties-table.adf-properties-table table th{font-weight:700;padding-right:0}.adf-file-properties-table-container .adf-file-properties-table.adf-properties-table table td{max-width:50px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding-right:0}.adf-file-properties-table-container .adf-file-properties-table.adf-properties-table table td.adf-file-properties-table-cell:first-of-type,.adf-file-properties-table-container .adf-file-properties-table.adf-properties-table table td.adf-file-properties-table-cell:last-of-type{width:18%}\n"] }]
|
|
111
|
+
}], propDecorators: { uploadedFiles: [{
|
|
112
|
+
type: Input
|
|
113
|
+
}], hasFile: [{
|
|
114
|
+
type: Input
|
|
115
|
+
}], selectedNode: [{
|
|
116
|
+
type: Input
|
|
117
|
+
}], field: [{
|
|
118
|
+
type: Input
|
|
119
|
+
}], displayedColumns: [{
|
|
120
|
+
type: Input
|
|
121
|
+
}], mimeTypeIcon: [{
|
|
122
|
+
type: Input
|
|
123
|
+
}], rowClick: [{
|
|
124
|
+
type: Output
|
|
125
|
+
}], attachFileClick: [{
|
|
126
|
+
type: Output
|
|
127
|
+
}], downloadFile: [{
|
|
128
|
+
type: Output
|
|
129
|
+
}], uploadNewFileVersion: [{
|
|
130
|
+
type: Output
|
|
131
|
+
}], contentModelFileHandler: [{
|
|
132
|
+
type: Output
|
|
133
|
+
}], removeAttachFile: [{
|
|
134
|
+
type: Output
|
|
135
|
+
}] } });
|
|
136
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1wcm9wZXJ0aWVzLXRhYmxlLWNsb3VkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9wcm9jZXNzLXNlcnZpY2VzLWNsb3VkL3NyYy9saWIvZm9ybS9jb21wb25lbnRzL3dpZGdldHMvYXR0YWNoLWZpbGUvZmlsZS1wcm9wZXJ0aWVzLXRhYmxlL2ZpbGUtcHJvcGVydGllcy10YWJsZS1jbG91ZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvcHJvY2Vzcy1zZXJ2aWNlcy1jbG91ZC9zcmMvbGliL2Zvcm0vY29tcG9uZW50cy93aWRnZXRzL2F0dGFjaC1maWxlL2ZpbGUtcHJvcGVydGllcy10YWJsZS9maWxlLXByb3BlcnRpZXMtdGFibGUtY2xvdWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsdURBQXVEO0FBRXZELE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQTJCLE1BQU0sb0JBQW9CLENBQUM7QUFDbkgsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXhDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FB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c0JBRE4sS0FBSztnQkFJTixZQUFZO3NCQURYLEtBQUs7Z0JBSU4sS0FBSztzQkFESixLQUFLO2dCQUlOLGdCQUFnQjtzQkFEZixLQUFLO2dCQUlOLFlBQVk7c0JBRFgsS0FBSztnQkFJTixRQUFRO3NCQURQLE1BQU07Z0JBSVAsZUFBZTtzQkFEZCxNQUFNO2dCQUlQLFlBQVk7c0JBRFgsTUFBTTtnQkFJUCxvQkFBb0I7c0JBRG5CLE1BQU07Z0JBSVAsdUJBQXVCO3NCQUR0QixNQUFNO2dCQUlQLGdCQUFnQjtzQkFEZixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IMKpIDIwMDUtMjAyNSBIeWxhbmQgU29mdHdhcmUsIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yICovXG5cbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBpbmplY3QsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExvY2FsaXplZERhdGVQaXBlLCBUaHVtYm5haWxTZXJ2aWNlLCBVcGxvYWREaXJlY3RpdmUsIERpc3BsYXlhYmxlQ01Qcm9wZXJ0aWVzIH0gZnJvbSAnQGFsZnJlc2NvL2FkZi1jb3JlJztcbmltcG9ydCB7IE5vZGUgfSBmcm9tICdAYWxmcmVzY28vanMtYXBpJztcbmltcG9ydCB7IE5ld1ZlcnNpb25VcGxvYWRlckRpYWxvZ0RhdGEgfSBmcm9tICdAYWxmcmVzY28vYWRmLWNvbnRlbnQtc2VydmljZXMnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IE1hdE1lbnVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXRUYWJsZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcbmltcG9ydCB7IE1hdExpbmVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcbmltcG9ydCB7IE1hdExpc3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9saXN0JztcblxuY29uc3QgUkVUUklFVkVfTUVUQURBVEFfT1BUSU9OID0gJ3JldHJpZXZlTWV0YWRhdGEnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FkZi1jbG91ZC1maWxlLXByb3BlcnRpZXMtdGFibGUnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIE1hdEljb25Nb2R1bGUsXG4gICAgICAgIFRyYW5zbGF0ZVBpcGUsXG4gICAgICAgIE1hdE1lbnVNb2R1bGUsXG4gICAgICAgIFVwbG9hZERpcmVjdGl2ZSxcbiAgICAgICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgICAgICBNYXRUYWJsZU1vZHVsZSxcbiAgICAgICAgTWF0TGluZU1vZHVsZSxcbiAgICAgICAgTWF0TGlzdE1vZHVsZVxuICAgIF0sXG4gICAgcHJvdmlkZXJzOiBbTG9jYWxpemVkRGF0ZVBpcGVdLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9maWxlLXByb3BlcnRpZXMtdGFibGUtY2xvdWQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2ZpbGUtcHJvcGVydGllcy10YWJsZS1jbG91ZC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEZpbGVQcm9wZXJ0aWVzVGFibGVDbG91ZENvbXBvbmVudCB7XG4gICAgcHJpdmF0ZSBsb2NhbGl6ZWREYXRlUGlwZSA9IGluamVjdChMb2NhbGl6ZWREYXRlUGlwZSk7XG4gICAgcHJpdmF0ZSB0aHVtYm5haWxTZXJ2aWNlID0gaW5qZWN0KFRodW1ibmFpbFNlcnZpY2UpO1xuXG4gICAgQElucHV0KClcbiAgICB1cGxvYWRlZEZpbGVzO1xuXG4gICAgQElucHV0KClcbiAgICBoYXNGaWxlOiBib29sZWFuO1xuXG4gICAgQElucHV0KClcbiAgICBzZWxlY3RlZE5vZGU6IE5vZGU7XG5cbiAgICBASW5wdXQoKVxuICAgIGZpZWxkO1xuXG4gICAgQElucHV0KClcbiAgICBkaXNwbGF5ZWRDb2x1bW5zO1xuXG4gICAgQElucHV0KClcbiAgICBtaW1lVHlwZUljb247XG5cbiAgICBAT3V0cHV0KClcbiAgICByb3dDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8Tm9kZT4oKTtcblxuICAgIEBPdXRwdXQoKVxuICAgIGF0dGFjaEZpbGVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gICAgQE91dHB1dCgpXG4gICAgZG93bmxvYWRGaWxlID0gbmV3IEV2ZW50RW1pdHRlcjxOb2RlPigpO1xuXG4gICAgQE91dHB1dCgpXG4gICAgdXBsb2FkTmV3RmlsZVZlcnNpb24gPSBuZXcgRXZlbnRFbWl0dGVyPE5ld1ZlcnNpb25VcGxvYWRlckRpYWxvZ0RhdGE+KCk7XG5cbiAgICBAT3V0cHV0KClcbiAgICBjb250ZW50TW9kZWxGaWxlSGFuZGxlciA9IG5ldyBFdmVudEVtaXR0ZXI8Tm9kZT4oKTtcblxuICAgIEBPdXRwdXQoKVxuICAgIHJlbW92ZUF0dGFjaEZpbGUgPSBuZXcgRXZlbnRFbWl0dGVyPE5vZGU+KCk7XG5cbiAgICBvblJvd0NsaWNrZWQoZmlsZT86IE5vZGUpIHtcbiAgICAgICAgdGhpcy5yb3dDbGljay5lbWl0KGZpbGUpO1xuICAgIH1cblxuICAgIG9uQXR0YWNoRmlsZUNsaWNrZWQobm9kZVNlbGVjdG9yOiBhbnkpIHtcbiAgICAgICAgdGhpcy5hdHRhY2hGaWxlQ2xpY2suZW1pdChub2RlU2VsZWN0b3IpO1xuICAgIH1cblxuICAgIGRvd25sb2FkQ29udGVudChmaWxlOiBOb2RlKSB7XG4gICAgICAgIHRoaXMuZG93bmxvYWRGaWxlLmVtaXQoZmlsZSk7XG4gICAgfVxuXG4gICAgb25VcGxvYWROZXdGaWxlVmVyc2lvbihjdXN0b21FdmVudDogYW55LCBub2RlOiBOb2RlKSB7XG4gICAgICAgIGNvbnN0IG5ld1ZlcnNpb25VcGxvYWRlckRpYWxvZ0RhdGE6IE5ld1ZlcnNpb25VcGxvYWRlckRpYWxvZ0RhdGEgPSB7XG4gICAgICAgICAgICBmaWxlOiBjdXN0b21FdmVudC5kZXRhaWwuZmlsZXNbMF0uZmlsZSxcbiAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICBzaG93Q29tbWVudHM6IHRydWUsXG4gICAgICAgICAgICBhbGxvd0Rvd25sb2FkOiB0cnVlXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMudXBsb2FkTmV3RmlsZVZlcnNpb24uZW1pdChuZXdWZXJzaW9uVXBsb2FkZXJEaWFsb2dEYXRhKTtcbiAgICB9XG5cbiAgICBjb250ZW50TW9kZWxGb3JtRmlsZUhhbmRsZXIoZmlsZT86IE5vZGUpIHtcbiAgICAgICAgdGhpcy5jb250ZW50TW9kZWxGaWxlSGFuZGxlci5lbWl0KGZpbGUpO1xuICAgIH1cblxuICAgIG9uUmVtb3ZlQXR0YWNoRmlsZShmaWxlOiBOb2RlKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlQXR0YWNoRmlsZS5lbWl0KGZpbGUpO1xuICAgIH1cblxuICAgIGdldEljb24obWltZVR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnRodW1ibmFpbFNlcnZpY2UuZ2V0TWltZVR5cGVJY29uKG1pbWVUeXBlKTtcbiAgICB9XG5cbiAgICBnZXRDb2x1bW5WYWx1ZShmaWxlLCBwcm9wOiBEaXNwbGF5YWJsZUNNUHJvcGVydGllcyk6IHN0cmluZyB7XG4gICAgICAgIGlmICghZmlsZS5wcm9wZXJ0aWVzW3Byb3AucHJlZml4ZWROYW1lXSkge1xuICAgICAgICAgICAgY29uc3QgZmllbGRQcm9wZXJ0eSA9IHRoaXMuZmllbGQucGFyYW1zLmRpc3BsYXlhYmxlQ01Qcm9wZXJ0aWVzPy5maW5kKChwcm9wZXJ0eSkgPT4gcHJvcGVydHkubmFtZSA9PT0gcHJvcC5uYW1lKTtcbiAgICAgICAgICAgIHJldHVybiBmaWVsZFByb3BlcnR5LmRlZmF1bHRWYWx1ZSA/IHRoaXMuY2hlY2tEYXRlVHlwZUFuZFRyYW5zZm9ybShwcm9wLmRhdGFUeXBlLCBmaWVsZFByb3BlcnR5LmRlZmF1bHRWYWx1ZSkgOiAnLS0nO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaWxlLnByb3BlcnRpZXNbcHJvcC5wcmVmaXhlZE5hbWVdID8gdGhpcy5jaGVja0RhdGVUeXBlQW5kVHJhbnNmb3JtKHByb3AuZGF0YVR5cGUsIGZpbGUucHJvcGVydGllc1twcm9wLnByZWZpeGVkTmFtZV0pIDogJy0tJztcbiAgICB9XG5cbiAgICBwcml2YXRlIGNoZWNrRGF0ZVR5cGVBbmRUcmFuc2Zvcm0oZGF0YVR5cGU6IHN0cmluZywgdmFsdWU6IGFueSk6IHN0cmluZyB7XG4gICAgICAgIGlmIChkYXRhVHlwZSA9PT0gJ2Q6ZGF0ZScpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsaXplZERhdGVQaXBlLnRyYW5zZm9ybSh2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YVR5cGUgPT09ICdkOmRhdGV0aW1lJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxpemVkRGF0ZVBpcGUudHJhbnNmb3JtKHZhbHVlLCAnbWVkaXVtJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIGRpc3BsYXlNZW51T3B0aW9uKG9wdGlvbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpZWxkPy5wYXJhbXM/Lm1lbnVPcHRpb25zID8gdGhpcy5maWVsZC5wYXJhbXMubWVudU9wdGlvbnNbb3B0aW9uXSA6IG9wdGlvbiAhPT0gUkVUUklFVkVfTUVUQURBVEFfT1BUSU9OO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJhZGYtZmlsZS1wcm9wZXJ0aWVzLXRhYmxlLWNvbnRhaW5lclwiPlxuICAgIDx0YWJsZSBtYXQtdGFibGUgW2RhdGFTb3VyY2VdPVwidXBsb2FkZWRGaWxlc1wiIGNsYXNzPVwiYWRmLXByb3BlcnRpZXMtdGFibGUgYWRmLWZpbGUtcHJvcGVydGllcy10YWJsZSBtYXQtZWxldmF0aW9uLXowXCIgKm5nSWY9XCJoYXNGaWxlXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiaWNvblwiPlxuICAgICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj48L3RoPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiYWRmLWZpbGUtcHJvcGVydGllcy10YWJsZS1jZWxsXCIgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRMaXN0SXRlbUxpbmUgY2xhc3M9XCJhZGYtZGF0YXRhYmxlLXNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3RlZE5vZGUgJiYgZWxlbWVudC5pZCA9PT0gc2VsZWN0ZWROb2RlLmlkXCIgKGNsaWNrKT1cIm9uUm93Q2xpY2tlZChlbGVtZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICBjaGVja19jaXJjbGVcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxpbWcgbWF0TGlzdEl0ZW1MaW5lIGNsYXNzPVwiYWRmLWF0dGFjaC13aWRnZXRfX2ljb25cIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFzZWxlY3RlZE5vZGUgfHwgZWxlbWVudC5pZCAhPT0gc2VsZWN0ZWROb2RlLmlkXCIgW2lkXT1cIidmaWxlLScrZWxlbWVudD8uaWQrJy1pY29uJ1wiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblJvd0NsaWNrZWQoZWxlbWVudClcIlxuICAgICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwib25Sb3dDbGlja2VkKGVsZW1lbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgW3NyY109XCJlbGVtZW50LmNvbnRlbnQgPyBnZXRJY29uKGVsZW1lbnQuY29udGVudC5taW1lVHlwZSkgOiBnZXRJY29uKGVsZW1lbnRbJ21pbWVUeXBlJ10pXCJcbiAgICAgICAgICAgICAgICAgICAgW2FsdF09XCJtaW1lVHlwZUljb25cIiByb2xlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCIwXCIgLz5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiZmlsZU5hbWVcIj5cbiAgICAgICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+e3sgJ0ZPUk0uRklFTEQuRklMRV9OQU1FJyB8IHRyYW5zbGF0ZSB9fTwvdGg+XG4gICAgICAgICAgICA8dGQgbWF0LWNlbGwgY2xhc3M9XCJhZGYtZmlsZS1wcm9wZXJ0aWVzLXRhYmxlLWNlbGxcIiAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gbWF0TGluZSBpZD1cInt7J2ZpbGUtJytlbGVtZW50Py5pZH19XCJcbiAgICAgICAgICAgICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLWZpbGVcIlxuICAgICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvbkF0dGFjaEZpbGVDbGlja2VkKGVsZW1lbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25BdHRhY2hGaWxlQ2xpY2tlZChlbGVtZW50KVwiXG4gICAgICAgICAgICAgICAgPnt7IGVsZW1lbnQubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwidGl0bGVcIj5cbiAgICAgICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+e3sgJ0ZPUk0uRklFTEQuVElUTEUnIHwgdHJhbnNsYXRlIH19PC90aD5cbiAgICAgICAgICAgIDx0ZCBtYXQtY2VsbCBjbGFzcz1cImFkZi1maWxlLXByb3BlcnRpZXMtdGFibGUtY2VsbFwiICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj57eyBlbGVtZW50LnRpdGxlIH19PC90ZD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcHJvcCBvZiBmaWVsZD8ucGFyYW1zPy5kaXNwbGF5YWJsZUNNUHJvcGVydGllc1wiIFttYXRDb2x1bW5EZWZdPVwicHJvcC5uYW1lXCI+XG4gICAgICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPnt7cHJvcC50aXRsZSA/IHByb3AudGl0bGUgOiBwcm9wLm5hbWUgfCB0aXRsZWNhc2UgfX08L3RoPlxuICAgICAgICAgICAgPHRkIG1hdC1jZWxsIGNsYXNzPVwiYWRmLWZpbGUtcHJvcGVydGllcy10YWJsZS1jZWxsXCIgKm1hdENlbGxEZWY9XCJsZXQgcm93XCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gbWF0TGluZSBpZD1cInt7J2ZpbGVQcm9wZXJ0eS0nK3Jvdz8uaWQrJy0nK3Byb3A/Lm5hbWV9fVwiIHJvbGU9XCJidXR0b25cIiB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvblJvd0NsaWNrZWQocm93KVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUm93Q2xpY2tlZChyb3cpXCI+e3sgZ2V0Q29sdW1uVmFsdWUocm93LCBwcm9wKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiYWN0aW9uXCI+XG4gICAgICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPjwvdGg+XG4gICAgICAgICAgICA8dGQgbWF0LWNlbGwgY2xhc3M9XCJhZGYtZmlsZS1wcm9wZXJ0aWVzLXRhYmxlLWNlbGxcIiAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD1cInt7J2ZpbGUtJytlbGVtZW50Py5pZCsnLW9wdGlvbi1tZW51J319XCIgbWF0LWljb24tYnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJmaWxlQWN0aW9uTWVudVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiEhZWxlbWVudC5jb250ZW50Py5taW1lVHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidBREZfUFJPQ0VTU19MSVNULkRFVEFJTFMuQlVUVE9OLkZJTEVfT1BUSU9OX01FTlUnIHwgdHJhbnNsYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5tb3JlX3ZlcnQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxtYXQtbWVudSAjZmlsZUFjdGlvbk1lbnU9XCJtYXRNZW51XCIgeFBvc2l0aW9uPVwiYmVmb3JlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJkaXNwbGF5TWVudU9wdGlvbignc2hvdycpICYmICEhZWxlbWVudC5jb250ZW50Py5taW1lVHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJ7eydmaWxlLScrZWxlbWVudD8uaWQrJy1zaG93LWZpbGUnfX1cIiBtYXQtbWVudS1pdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQXR0YWNoRmlsZUNsaWNrZWQoZWxlbWVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj52aXNpYmlsaXR5PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7ICdGT1JNLkZJRUxELlZJRVdfRklMRScgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiZGlzcGxheU1lbnVPcHRpb24oJ2Rvd25sb2FkJykgJiYgISFlbGVtZW50LmNvbnRlbnQ/Lm1pbWVUeXBlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cInt7J2ZpbGUtJytlbGVtZW50Py5pZCsnLWRvd25sb2FkLWZpbGUnfX1cIiBtYXQtbWVudS1pdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRvd25sb2FkQ29udGVudChlbGVtZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmZpbGVfZG93bmxvYWQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgJ0ZPUk0uRklFTEQuRE9XTkxPQURfRklMRScgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiZGlzcGxheU1lbnVPcHRpb24oJ3JldHJpZXZlTWV0YWRhdGEnKSAmJiAhIWVsZW1lbnQuY29udGVudD8ubWltZVR5cGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwie3snZmlsZS0nK2VsZW1lbnQ/LmlkKyctcmV0cmlldmUtZmlsZS1tZXRhZGF0YSd9fVwiIG1hdC1tZW51LWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY29udGVudE1vZGVsRm9ybUZpbGVIYW5kbGVyKGVsZW1lbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXQtMjRcIj5sb3dfcHJpb3JpdHk8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgJ0FERl9DTE9VRF9GT1JNX0NPTVBPTkVOVC5SRVRSSUVWRV9NRVRBREFUQScgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiIWZpZWxkLnJlYWRPbmx5ICYmIGRpc3BsYXlNZW51T3B0aW9uKCdyZW1vdmUnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCInZmlsZS0nK2VsZW1lbnQ/LmlkKyctcmVtb3ZlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUmVtb3ZlQXR0YWNoRmlsZShlbGVtZW50KTtcIiAoa2V5dXAuZW50ZXIpPVwib25SZW1vdmVBdHRhY2hGaWxlKGVsZW1lbnQpO1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWF0LTI0XCI+aGlnaGxpZ2h0X29mZjwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyAnRk9STS5GSUVMRC5SRU1PVkVfRklMRScgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZGlzcGxheU1lbnVPcHRpb24oJ25ld1ZlcnNpb24nKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBbYWRmLXVwbG9hZF09XCJ0cnVlXCIgW21vZGVdPVwiWydjbGljayddXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVwbG9hZC1maWxlcyk9XCJvblVwbG9hZE5ld0ZpbGVWZXJzaW9uKCRldmVudCwgZWxlbWVudCk7XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJ7eydmaWxlLScrIGVsZW1lbnQ/LmlkICsnLXVwbG9hZC1uZXctdmVyc2lvbid9fVwiIG1hdC1tZW51LWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWF0LTI0XCI+ZmlsZV91cGxvYWQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7ICdBREZfVkVSU0lPTl9MSVNULkFDVElPTlMuVVBMT0FELlRJVExFJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L21hdC1tZW51PlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDx0ciBtYXQtaGVhZGVyLXJvdyBjbGFzcz1cImFkZi1maWxlLXByb3BlcnRpZXMtdGFibGUtaGVhZGVyLXJvd1wiICptYXRIZWFkZXJSb3dEZWY9XCJkaXNwbGF5ZWRDb2x1bW5zXCI+PC90cj5cbiAgICAgICAgPHRyIG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IGRpc3BsYXllZENvbHVtbnNcIj48L3RyPlxuICAgIDwvdGFibGU+XG48L2Rpdj5cbiJdfQ==
|