barsa-novin-ray-core 2.2.73 → 2.2.75
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/fesm2022/barsa-novin-ray-core.mjs +630 -651
- package/fesm2022/barsa-novin-ray-core.mjs.map +1 -1
- package/lib/abstract-classes/field-base.d.ts +1 -1
- package/lib/abstract-classes/number-base.d.ts +1 -1
- package/lib/date-services/date-hijri.service.d.ts +1 -1
- package/lib/date-services/date.service.d.ts +1 -1
- package/lib/directives/base.directive.d.ts +1 -1
- package/lib/dynamic-component/base-view-item-props.d.ts +4 -4
- package/lib/resolvers/login-settings.resolver.d.ts +1 -1
- package/lib/resolvers/tile-group-breadcrumb.resolver.d.ts +1 -1
- package/lib/services/notification.service.d.ts +2 -2
- package/lib/services/portal.service.d.ts +1 -1
- package/package.json +3 -5
- package/esm2022/barsa-novin-ray-core.mjs +0 -5
- package/esm2022/lib/abstract-classes/application-base.mjs +0 -25
- package/esm2022/lib/abstract-classes/barsa-api.mjs +0 -43
- package/esm2022/lib/abstract-classes/base-column-props.mjs +0 -89
- package/esm2022/lib/abstract-classes/base.component.mjs +0 -60
- package/esm2022/lib/abstract-classes/field-base.mjs +0 -244
- package/esm2022/lib/abstract-classes/files-validation-helper.mjs +0 -75
- package/esm2022/lib/abstract-classes/form-base.mjs +0 -164
- package/esm2022/lib/abstract-classes/form-field-report-page.component.mjs +0 -54
- package/esm2022/lib/abstract-classes/form-page-base.mjs +0 -132
- package/esm2022/lib/abstract-classes/form-page.component.mjs +0 -53
- package/esm2022/lib/abstract-classes/form-props.base.mjs +0 -100
- package/esm2022/lib/abstract-classes/form-toolbar-base.mjs +0 -57
- package/esm2022/lib/abstract-classes/index.mjs +0 -25
- package/esm2022/lib/abstract-classes/layout-item-base.mjs +0 -49
- package/esm2022/lib/abstract-classes/layout-panel-base.mjs +0 -68
- package/esm2022/lib/abstract-classes/linear-list-helper.mjs +0 -135
- package/esm2022/lib/abstract-classes/models.mjs +0 -184
- package/esm2022/lib/abstract-classes/module-with-dynamic-components.mjs +0 -2
- package/esm2022/lib/abstract-classes/number-base.mjs +0 -201
- package/esm2022/lib/abstract-classes/page-base.mjs +0 -98
- package/esm2022/lib/abstract-classes/page-with-form-handler-base.mjs +0 -41
- package/esm2022/lib/abstract-classes/report-base.mjs +0 -266
- package/esm2022/lib/abstract-classes/report-item-base.mjs +0 -54
- package/esm2022/lib/abstract-classes/report-view-base.component.mjs +0 -450
- package/esm2022/lib/abstract-classes/system-base.mjs +0 -25
- package/esm2022/lib/abstract-classes/tile-props.mjs +0 -49
- package/esm2022/lib/auth-guard.mjs +0 -48
- package/esm2022/lib/barsa-novin-ray-core-routing.module.mjs +0 -311
- package/esm2022/lib/barsa-novin-ray-core.module.mjs +0 -522
- package/esm2022/lib/base-ulv-setting.component.mjs +0 -46
- package/esm2022/lib/base.module.mjs +0 -28
- package/esm2022/lib/button-loading/button-loading.component.mjs +0 -20
- package/esm2022/lib/constants.mjs +0 -963
- package/esm2022/lib/container.component.mjs +0 -100
- package/esm2022/lib/controllers/base-controller.mjs +0 -9
- package/esm2022/lib/controllers/base-view.mjs +0 -24
- package/esm2022/lib/controllers/index.mjs +0 -4
- package/esm2022/lib/controllers/models.mjs +0 -2
- package/esm2022/lib/custom-route-reuse-strategy.mjs +0 -32
- package/esm2022/lib/date-services/date-hijri.service.mjs +0 -146
- package/esm2022/lib/date-services/date-info.mjs +0 -2
- package/esm2022/lib/date-services/date-miladi.service.mjs +0 -124
- package/esm2022/lib/date-services/date-shamsi.service.mjs +0 -148
- package/esm2022/lib/date-services/date.service.mjs +0 -149
- package/esm2022/lib/date-services/index.mjs +0 -6
- package/esm2022/lib/device.mjs +0 -663
- package/esm2022/lib/directives/absolute-div-body.directive.mjs +0 -46
- package/esm2022/lib/directives/anchor-scroll.directive.mjs +0 -25
- package/esm2022/lib/directives/attr-rtl.directive.mjs +0 -36
- package/esm2022/lib/directives/base.directive.mjs +0 -55
- package/esm2022/lib/directives/body-click.directive.mjs +0 -36
- package/esm2022/lib/directives/column-resizer.directive.mjs +0 -40
- package/esm2022/lib/directives/copy.directive.mjs +0 -60
- package/esm2022/lib/directives/count-down.directive.mjs +0 -109
- package/esm2022/lib/directives/dynamic-command.directive.mjs +0 -43
- package/esm2022/lib/directives/dynamic-style.directive.mjs +0 -66
- package/esm2022/lib/directives/ellapsis-text.directive.mjs +0 -70
- package/esm2022/lib/directives/ellipsify.directive.mjs +0 -73
- package/esm2022/lib/directives/field-binding.directive.mjs +0 -18
- package/esm2022/lib/directives/fill-empty-space.mjs +0 -89
- package/esm2022/lib/directives/form-close.directive.mjs +0 -33
- package/esm2022/lib/directives/img-lazy.directive.mjs +0 -82
- package/esm2022/lib/directives/index.mjs +0 -42
- package/esm2022/lib/directives/intersection-observer.directive.mjs +0 -52
- package/esm2022/lib/directives/items-renderer.directive.mjs +0 -60
- package/esm2022/lib/directives/label-mandatory.directive.mjs +0 -49
- package/esm2022/lib/directives/load-external-files.directive.mjs +0 -38
- package/esm2022/lib/directives/mobile.directive.mjs +0 -30
- package/esm2022/lib/directives/nowraptext.directive.mjs +0 -27
- package/esm2022/lib/directives/numbers-only-input.directive.mjs +0 -27
- package/esm2022/lib/directives/placeHolder.directive.mjs +0 -16
- package/esm2022/lib/directives/prevent-default.directive.mjs +0 -21
- package/esm2022/lib/directives/print-files.directive.mjs +0 -39
- package/esm2022/lib/directives/render-ulv-paging.directive.mjs +0 -81
- package/esm2022/lib/directives/render-ulv-viewer.directive.mjs +0 -76
- package/esm2022/lib/directives/render-ulv.directive.mjs +0 -52
- package/esm2022/lib/directives/route-form-change.directive.mjs +0 -38
- package/esm2022/lib/directives/save-image.directive.mjs +0 -28
- package/esm2022/lib/directives/splide-slider.directive.mjs +0 -113
- package/esm2022/lib/directives/stop-propagation.directive.mjs +0 -21
- package/esm2022/lib/directives/table-resizer.directive.mjs +0 -236
- package/esm2022/lib/directives/ulv-command.directive.mjs +0 -43
- package/esm2022/lib/directives/until-inview.directive.mjs +0 -53
- package/esm2022/lib/directives/webotp.directive.mjs +0 -49
- package/esm2022/lib/directives/workflow-choice-command.directive.mjs +0 -61
- package/esm2022/lib/dynamic-component/base-dynamic.component.mjs +0 -97
- package/esm2022/lib/dynamic-component/base-form-toolbaritem-props.mjs +0 -53
- package/esm2022/lib/dynamic-component/base-item-content-props.mjs +0 -83
- package/esm2022/lib/dynamic-component/base-view-content-props.mjs +0 -27
- package/esm2022/lib/dynamic-component/base-view-item-props.mjs +0 -552
- package/esm2022/lib/dynamic-component/base-view-props.mjs +0 -163
- package/esm2022/lib/dynamic-component/dynamic-form-toolbar-item.component.mjs +0 -38
- package/esm2022/lib/dynamic-component/dynamic-form.component.mjs +0 -69
- package/esm2022/lib/dynamic-component/dynamic-item.component.mjs +0 -78
- package/esm2022/lib/dynamic-component/dynamic-layout.component.mjs +0 -64
- package/esm2022/lib/dynamic-component/index.mjs +0 -11
- package/esm2022/lib/empty-page/empty-page.component.mjs +0 -49
- package/esm2022/lib/empty-page-with-router-and-router-outlet/empty-page-with-router-and-router-outlet.component.mjs +0 -16
- package/esm2022/lib/field-ui/field-ui.component.mjs +0 -149
- package/esm2022/lib/form/form.component.mjs +0 -212
- package/esm2022/lib/form-new/form-new.component.mjs +0 -31
- package/esm2022/lib/form-page-routing/barsa-sap-ui-form-page-routing.module.mjs +0 -54
- package/esm2022/lib/form-page-routing/barsa-sap-ui-form-page.module.mjs +0 -29
- package/esm2022/lib/form-page-routing/constants.mjs +0 -9
- package/esm2022/lib/form-page-routing/index.mjs +0 -3
- package/esm2022/lib/from-intersection-observer.mjs +0 -53
- package/esm2022/lib/global-error-handler.mjs +0 -26
- package/esm2022/lib/injdection-tokens.mjs +0 -8
- package/esm2022/lib/modal-root.component.mjs +0 -34
- package/esm2022/lib/not-found/not-found.component.mjs +0 -16
- package/esm2022/lib/not-internet/not-internet.component.mjs +0 -21
- package/esm2022/lib/pipes/barsa-icon-dict.pipe.mjs +0 -20
- package/esm2022/lib/pipes/bbb-translate.pipe.mjs +0 -36
- package/esm2022/lib/pipes/can-upload.pipe.mjs +0 -27
- package/esm2022/lib/pipes/card-media-size.pipe.mjs +0 -21
- package/esm2022/lib/pipes/column-custom-component.pipe.mjs +0 -41
- package/esm2022/lib/pipes/column-customui.pipe.mjs +0 -33
- package/esm2022/lib/pipes/column-icon.pipe.mjs +0 -23
- package/esm2022/lib/pipes/column-value.pipe.mjs +0 -35
- package/esm2022/lib/pipes/column-valueof-parameters.pipe.mjs +0 -34
- package/esm2022/lib/pipes/combo-row-img.pipe.mjs +0 -17
- package/esm2022/lib/pipes/context-menu.pipe.mjs +0 -41
- package/esm2022/lib/pipes/control-ui.pipe.mjs +0 -32
- package/esm2022/lib/pipes/convert-to-style.pipe.mjs +0 -33
- package/esm2022/lib/pipes/date-time-to-caption.pipe.mjs +0 -35
- package/esm2022/lib/pipes/fileinfo-count.pipe.mjs +0 -21
- package/esm2022/lib/pipes/filter-columns-by-details.pipe.mjs +0 -23
- package/esm2022/lib/pipes/filter-inline-action-list.pipe.mjs +0 -19
- package/esm2022/lib/pipes/filter-string.pipe.mjs +0 -45
- package/esm2022/lib/pipes/filter-tab.pipe.mjs +0 -20
- package/esm2022/lib/pipes/filter-toolbar-control.pipe.mjs +0 -17
- package/esm2022/lib/pipes/filter-workflow-mobile.pipe.mjs +0 -25
- package/esm2022/lib/pipes/filter.pipe.mjs +0 -34
- package/esm2022/lib/pipes/find-column-by-db-name.pipe.mjs +0 -28
- package/esm2022/lib/pipes/find-preview-column.pipe.mjs +0 -20
- package/esm2022/lib/pipes/fiori-icon.pipe.mjs +0 -43
- package/esm2022/lib/pipes/groupby.pipe.mjs +0 -64
- package/esm2022/lib/pipes/header-facet-value.pipe.mjs +0 -23
- package/esm2022/lib/pipes/hide-accept-cancel-buttons.pipe.mjs +0 -24
- package/esm2022/lib/pipes/hide-columns-inmobile.pipe.mjs +0 -23
- package/esm2022/lib/pipes/index.mjs +0 -55
- package/esm2022/lib/pipes/isimage.pipe.mjs +0 -20
- package/esm2022/lib/pipes/list-count.pipe.mjs +0 -18
- package/esm2022/lib/pipes/merge-fields-to-columns.pipe.mjs +0 -43
- package/esm2022/lib/pipes/mo-info-ulv-data.pipe.mjs +0 -59
- package/esm2022/lib/pipes/mo-info-ulv-paging.pipe.mjs +0 -17
- package/esm2022/lib/pipes/mo-report-value-concat.pipe.mjs +0 -36
- package/esm2022/lib/pipes/mo-report-value.pipe.mjs +0 -18
- package/esm2022/lib/pipes/mo-value.pipe.mjs +0 -19
- package/esm2022/lib/pipes/multiple-groupby.pipe.mjs +0 -91
- package/esm2022/lib/pipes/numeral.pipe.mjs +0 -44
- package/esm2022/lib/pipes/picture-field-source.pipe.mjs +0 -23
- package/esm2022/lib/pipes/remove-newline.pipe.mjs +0 -21
- package/esm2022/lib/pipes/replace.pipe.mjs +0 -18
- package/esm2022/lib/pipes/reverse.pipe.mjs +0 -23
- package/esm2022/lib/pipes/rownumber.pipe.mjs +0 -26
- package/esm2022/lib/pipes/sanitize-text.pipe.mjs +0 -21
- package/esm2022/lib/pipes/seperator-fix.pipe.mjs +0 -24
- package/esm2022/lib/pipes/sort.pipe.mjs +0 -49
- package/esm2022/lib/pipes/string-to-number.pipe.mjs +0 -26
- package/esm2022/lib/pipes/th-image-icon.pipe.mjs +0 -22
- package/esm2022/lib/pipes/tlbButtons.pipe.mjs +0 -60
- package/esm2022/lib/pipes/toolbar-settings.pipe.mjs +0 -27
- package/esm2022/lib/pipes/total-summary.pipe.mjs +0 -17
- package/esm2022/lib/pipes/tree-item-isexpanded.pipe.mjs +0 -26
- package/esm2022/lib/pipes/visible-value.pipe.mjs +0 -19
- package/esm2022/lib/portal-page/portal-page.component.mjs +0 -24
- package/esm2022/lib/portal-page/portal-sidebar.component.mjs +0 -37
- package/esm2022/lib/redirect-home-guard.mjs +0 -51
- package/esm2022/lib/redirect-report-navigator-command/redirect-report-navigator-command.component.mjs +0 -12
- package/esm2022/lib/report-container/report-container.component.mjs +0 -63
- package/esm2022/lib/resizable-module/resizable.component.mjs +0 -31
- package/esm2022/lib/resizable-module/resizable.directive.mjs +0 -42
- package/esm2022/lib/resizable-module/resizable.module.mjs +0 -17
- package/esm2022/lib/resolvers/index.mjs +0 -7
- package/esm2022/lib/resolvers/login-settings.resolver.mjs +0 -18
- package/esm2022/lib/resolvers/portal-dynamic-page.resolver.mjs +0 -49
- package/esm2022/lib/resolvers/portal-form-page.resolver.mjs +0 -18
- package/esm2022/lib/resolvers/portal-page.resolver.mjs +0 -30
- package/esm2022/lib/resolvers/portal-report-page.resolver.mjs +0 -37
- package/esm2022/lib/resolvers/tile-group-breadcrumb.resolver.mjs +0 -30
- package/esm2022/lib/root-page/root-page.component.mjs +0 -21
- package/esm2022/lib/root-portal/root-portal.component.mjs +0 -236
- package/esm2022/lib/server-connection-error/server-connection-error.component.mjs +0 -19
- package/esm2022/lib/services/api.service.mjs +0 -63
- package/esm2022/lib/services/audio-recording.service.mjs +0 -95
- package/esm2022/lib/services/barsa-dialog.service.mjs +0 -80
- package/esm2022/lib/services/barsa-storage.service.mjs +0 -78
- package/esm2022/lib/services/breadcrumb.service.mjs +0 -64
- package/esm2022/lib/services/column.service.mjs +0 -20
- package/esm2022/lib/services/container.service.mjs +0 -69
- package/esm2022/lib/services/dynamic-component.service.mjs +0 -55
- package/esm2022/lib/services/form-panel.service.mjs +0 -394
- package/esm2022/lib/services/form.service.mjs +0 -14
- package/esm2022/lib/services/groupby.service.mjs +0 -21
- package/esm2022/lib/services/horizontal-layout.service.mjs +0 -16
- package/esm2022/lib/services/index.mjs +0 -32
- package/esm2022/lib/services/indexeddb.service.mjs +0 -34
- package/esm2022/lib/services/layout-main-content.service.mjs +0 -19
- package/esm2022/lib/services/layout.service.mjs +0 -42
- package/esm2022/lib/services/local-storage.service.mjs +0 -32
- package/esm2022/lib/services/log.service.mjs +0 -50
- package/esm2022/lib/services/network-status.service.mjs +0 -15
- package/esm2022/lib/services/notification-popup.service.mjs +0 -2
- package/esm2022/lib/services/notification-sw.service.mjs +0 -180
- package/esm2022/lib/services/notification.service.mjs +0 -189
- package/esm2022/lib/services/portal.service.mjs +0 -950
- package/esm2022/lib/services/prompt-update.service.mjs +0 -56
- package/esm2022/lib/services/routing.service.mjs +0 -60
- package/esm2022/lib/services/save-scoll-position.service.mjs +0 -29
- package/esm2022/lib/services/service-worker-communication.service.mjs +0 -120
- package/esm2022/lib/services/tabpage.service.mjs +0 -13
- package/esm2022/lib/services/toast.service.mjs +0 -2
- package/esm2022/lib/services/ui.service.mjs +0 -23
- package/esm2022/lib/services/ulvmain.service.mjs +0 -824
- package/esm2022/lib/services/upload.service.mjs +0 -166
- package/esm2022/lib/services/video-recording.service.mjs +0 -115
- package/esm2022/lib/unlimit-session/unlimit-session.component.mjs +0 -40
- package/esm2022/public-api.mjs +0 -42
|
@@ -1,394 +0,0 @@
|
|
|
1
|
-
import { BehaviorSubject, Subject, combineLatest } from 'rxjs';
|
|
2
|
-
import { debounceTime, delay, distinctUntilChanged, filter, map, takeUntil, tap, withLatestFrom } from 'rxjs/operators';
|
|
3
|
-
import { BarsaApi } from '../abstract-classes/barsa-api';
|
|
4
|
-
import { BaseComponent } from '../abstract-classes/base.component';
|
|
5
|
-
import { DeviceWidth, FindLayoutSettingFromLayout94, getDeviceIsMobile, getHeaderValue, getDeviceIsTablet } from '../constants';
|
|
6
|
-
export class FormPanelService extends BaseComponent {
|
|
7
|
-
constructor() {
|
|
8
|
-
super();
|
|
9
|
-
this._hideClose$ = new BehaviorSubject(false);
|
|
10
|
-
this._hideTitle$ = new BehaviorSubject(false);
|
|
11
|
-
this._hidePin$ = new BehaviorSubject(false);
|
|
12
|
-
this._contextSource = new BehaviorSubject(null);
|
|
13
|
-
this._formHeightSource = new BehaviorSubject(0);
|
|
14
|
-
this._searchPanelIsObjectSource = new BehaviorSubject(false);
|
|
15
|
-
this._isSearchPanelSource = new BehaviorSubject(false);
|
|
16
|
-
this._isSearcPanelInSideContent = new BehaviorSubject(false);
|
|
17
|
-
this._workflowPanelUiSource = new BehaviorSubject(null);
|
|
18
|
-
this._moSource = new BehaviorSubject(null);
|
|
19
|
-
this._viewSource = new BehaviorSubject(null);
|
|
20
|
-
this._sidebarState$ = new BehaviorSubject('close');
|
|
21
|
-
this._toolbarItemsSource = new BehaviorSubject([]);
|
|
22
|
-
this._titleSource = new BehaviorSubject('');
|
|
23
|
-
this._maxContentWidthSource = new BehaviorSubject('auto');
|
|
24
|
-
this._wizardNextStepSource = new Subject();
|
|
25
|
-
this._wizardPreviousStepSource = new Subject();
|
|
26
|
-
this._layoutSource = new BehaviorSubject(null);
|
|
27
|
-
this._forceCloseSource = new Subject();
|
|
28
|
-
this._groupBRuleSource = new Subject();
|
|
29
|
-
this._isSimpleFormSource = new BehaviorSubject(false);
|
|
30
|
-
this._formWidthSource = new BehaviorSubject('100%');
|
|
31
|
-
this._toolbarVisibleSource = new BehaviorSubject(true);
|
|
32
|
-
this._headerLayoutSource = new BehaviorSubject(null);
|
|
33
|
-
this._headerTitleSource = new BehaviorSubject('');
|
|
34
|
-
this._maskSource = new BehaviorSubject(false);
|
|
35
|
-
this._headerRemoveContentPaddingSource = new BehaviorSubject(false);
|
|
36
|
-
this._headerDescriptionSource = new BehaviorSubject('');
|
|
37
|
-
this._hideFooter$ = new BehaviorSubject(false);
|
|
38
|
-
this._canSend$ = new BehaviorSubject(false);
|
|
39
|
-
this.ColonInLabel = true;
|
|
40
|
-
this.context$ = this._contextSource.asObservable().pipe(tap((context) => this._prepareContext(context)), takeUntil(this._onDestroy$));
|
|
41
|
-
this.searchPanelIsObject$ = this._searchPanelIsObjectSource.asObservable().pipe(takeUntil(this._onDestroy$));
|
|
42
|
-
this.isSearchPanel$ = this._isSearchPanelSource.asObservable().pipe(takeUntil(this._onDestroy$));
|
|
43
|
-
this.isSearcPanelInSideContent$ = this._isSearcPanelInSideContent
|
|
44
|
-
.asObservable()
|
|
45
|
-
.pipe(takeUntil(this._onDestroy$));
|
|
46
|
-
this.workflowPanelUi$ = this._workflowPanelUiSource.asObservable().pipe(takeUntil(this._onDestroy$));
|
|
47
|
-
this.formHeight$ = this._formHeightSource.asObservable();
|
|
48
|
-
this.mo$ = this._moSource.asObservable().pipe(takeUntil(this._onDestroy$));
|
|
49
|
-
this.fieldDict$ = this.mo$.pipe(map((c) => c.$FieldDict), takeUntil(this._onDestroy$));
|
|
50
|
-
this.view$ = this._viewSource.asObservable().pipe(tap((view) => this._prepareView(view)), takeUntil(this._onDestroy$));
|
|
51
|
-
this.toolbarItems$ = this._toolbarItemsSource.asObservable().pipe(map((items) => this._filterToolbarItems(items)), takeUntil(this._onDestroy$));
|
|
52
|
-
this.workflowButtons$ = this.workflowPanelUi$.pipe(map((c) => c?.buttonList || []), withLatestFrom(this._toolbarItemsSource.asObservable().pipe(map((items) => this._filterToolbarItems(items)), map((items) => items.filter((c) => c.isWorkflow)))), map(([items1, items2]) => [...items2, ...items1]), takeUntil(this._onDestroy$));
|
|
53
|
-
// this._toolbarItemsSource.asObservable().pipe(
|
|
54
|
-
// map((items) => this._filterToolbarItems(items)),
|
|
55
|
-
// map((items) => items.filter((c) => c.isWorkflow)),
|
|
56
|
-
// withLatestFrom(this.workflowPanelUi$.pipe(map((c) => c?.buttonList || []))),
|
|
57
|
-
// map(([items1, items2]) => (items1.length > 0 ? items1 : items2)),
|
|
58
|
-
// takeUntil(this._onDestroy$)
|
|
59
|
-
// );
|
|
60
|
-
this.maxContentWidth$ = this._maxContentWidthSource.asObservable().pipe(map((width) => (width ? width + 'px' : 'auto')), takeUntil(this._onDestroy$));
|
|
61
|
-
this.wizardNextStep$ = this._wizardNextStepSource.asObservable().pipe(takeUntil(this._onDestroy$));
|
|
62
|
-
this.wizardPreviousStep$ = this._wizardPreviousStepSource.asObservable().pipe(takeUntil(this._onDestroy$));
|
|
63
|
-
this.layout$ = this._layoutSource.asObservable().pipe(map((layout) => {
|
|
64
|
-
if (!layout) {
|
|
65
|
-
return layout;
|
|
66
|
-
}
|
|
67
|
-
const deviceWidth = DeviceWidth();
|
|
68
|
-
if (deviceWidth < layout.Bounds.width) {
|
|
69
|
-
layout.Bounds.width = deviceWidth;
|
|
70
|
-
}
|
|
71
|
-
return { ...layout };
|
|
72
|
-
}), takeUntil(this._onDestroy$));
|
|
73
|
-
this.forceClose$ = this._forceCloseSource.asObservable().pipe(takeUntil(this._onDestroy$));
|
|
74
|
-
this.groupLayout$ = this._groupBRuleSource.asObservable().pipe(takeUntil(this._onDestroy$));
|
|
75
|
-
this.isSimpleForm$ = this._isSimpleFormSource.asObservable().pipe(takeUntil(this._onDestroy$));
|
|
76
|
-
this.formWidth$ = this._formWidthSource.asObservable().pipe(takeUntil(this._onDestroy$));
|
|
77
|
-
this.toolbarVisible$ = this._toolbarVisibleSource.asObservable().pipe(takeUntil(this._onDestroy$));
|
|
78
|
-
this.title$ = combineLatest([this._headerTitleSource.asObservable(), this._titleSource.asObservable()]).pipe(map(([headerTitle, title]) => (headerTitle ? headerTitle : title)), takeUntil(this._onDestroy$));
|
|
79
|
-
this.headerLayout$ = this._headerLayoutSource.asObservable().pipe(filter((headerLayout) => !!headerLayout), tap((headerLayout) => this._headerTitleSource.next(getHeaderValue(headerLayout?.Title))), tap((headerLayout) => this._hideClose$.next(headerLayout?.HideClose)), tap((headerLayout) => this._hideTitle$.next(headerLayout?.HideTitle)), tap((headerLayout) => this._hidePin$.next(headerLayout?.HidePin)), tap((headerLayout) => this._headerDescriptionSource.next(getHeaderValue(headerLayout?.Description))), tap((headerLayout) => this._headerRemoveContentPaddingSource.next(getHeaderValue(headerLayout?.RemoveContentPadding))), takeUntil(this._onDestroy$));
|
|
80
|
-
this.headerDescription$ = this._headerDescriptionSource.asObservable().pipe(takeUntil(this._onDestroy$));
|
|
81
|
-
this.headerRemoveContentPadding$ = this._headerRemoveContentPaddingSource
|
|
82
|
-
.asObservable()
|
|
83
|
-
.pipe(delay(0), takeUntil(this._onDestroy$));
|
|
84
|
-
this.headerSubtitle$ = this.headerLayout$.pipe(map((headerLayout) => getHeaderValue(headerLayout?.SubTitle)), takeUntil(this._onDestroy$));
|
|
85
|
-
this.avatar$ = this.headerLayout$.pipe(map((headerLayout) => getHeaderValue(headerLayout?.Avatar, true)), takeUntil(this._onDestroy$));
|
|
86
|
-
this.circleAvatar$ = this.headerLayout$.pipe(map((headerLayout) => getHeaderValue(headerLayout?.CircleAvatar)), takeUntil(this._onDestroy$));
|
|
87
|
-
this.mask$ = this._maskSource.asObservable().pipe(debounceTime(200), takeUntil(this._onDestroy$));
|
|
88
|
-
}
|
|
89
|
-
get hideFooter$() {
|
|
90
|
-
return this._hideFooter$.asObservable().pipe(distinctUntilChanged());
|
|
91
|
-
}
|
|
92
|
-
get sidebarState$() {
|
|
93
|
-
return this._sidebarState$.asObservable();
|
|
94
|
-
}
|
|
95
|
-
get hidePin$() {
|
|
96
|
-
return this._hidePin$.asObservable();
|
|
97
|
-
}
|
|
98
|
-
get hideClose$() {
|
|
99
|
-
return this._hideClose$.asObservable();
|
|
100
|
-
}
|
|
101
|
-
get hideTitle$() {
|
|
102
|
-
return this._hideTitle$.asObservable();
|
|
103
|
-
}
|
|
104
|
-
get canSend$() {
|
|
105
|
-
return this._canSend$.asObservable();
|
|
106
|
-
}
|
|
107
|
-
get mo() {
|
|
108
|
-
return this._moSource.getValue();
|
|
109
|
-
}
|
|
110
|
-
set context(val) {
|
|
111
|
-
if (this._context) {
|
|
112
|
-
this.destroy();
|
|
113
|
-
}
|
|
114
|
-
this._contextSource.next(val);
|
|
115
|
-
}
|
|
116
|
-
hideFooter(hideFooter) {
|
|
117
|
-
this._hideFooter$.next(hideFooter);
|
|
118
|
-
}
|
|
119
|
-
setFormHeight(val) {
|
|
120
|
-
this._formHeightSource.next(val);
|
|
121
|
-
}
|
|
122
|
-
destroy() {
|
|
123
|
-
if (!this._context) {
|
|
124
|
-
return;
|
|
125
|
-
}
|
|
126
|
-
this._context.un('CloseSideNavigator', this._closeSideNavigator);
|
|
127
|
-
this._context.un('GroupBRuleChanged', this._groupBRuleChanged);
|
|
128
|
-
this._context.un('TitleChanged', this._titleChanged);
|
|
129
|
-
this._context.un('WizardNextStep', this._wizardNextStep);
|
|
130
|
-
this._context.un('WizardPreviousStep', this._wizardPreviousStep);
|
|
131
|
-
this._context.un('DoLayout', this._doLayout);
|
|
132
|
-
this._context.un('MaskChanged', this._maskChanged);
|
|
133
|
-
this._context.un('ForceClose', this._forceClose);
|
|
134
|
-
this._context.toolbar.un('ToolbarItemsChanged', this._toolbarItemsChanged);
|
|
135
|
-
this._context = null;
|
|
136
|
-
this._layoutSource.next(null);
|
|
137
|
-
// this._onDestroy$.next();
|
|
138
|
-
}
|
|
139
|
-
toolbarClick(btn) {
|
|
140
|
-
btn.handler(btn, this._context);
|
|
141
|
-
}
|
|
142
|
-
wfChoice(btn) {
|
|
143
|
-
this._context.fireEvent('TransitionSelect', this._context, btn);
|
|
144
|
-
}
|
|
145
|
-
changeSidebarState(state) {
|
|
146
|
-
this._sidebarState$.next(state);
|
|
147
|
-
}
|
|
148
|
-
_initialize(context) {
|
|
149
|
-
this._workflowPanelUiSource.next(context?.WorkflowPanelUi);
|
|
150
|
-
this._isSearchPanelSource.next(context?.Setting?.IsSearchPanel);
|
|
151
|
-
this._isSearcPanelInSideContent.next(context?.Setting?.IsSearcPanelInSideContent);
|
|
152
|
-
this._canSend$.next(context?.Setting?.CanSend);
|
|
153
|
-
this._searchPanelIsObjectSource.next(context?.Setting?.ParameterTypeIsObject);
|
|
154
|
-
this._moSource.next(context?.Mo);
|
|
155
|
-
this._viewSource.next(context?.Setting?.View);
|
|
156
|
-
this._toolbarItemsSource.next(context?.toolbar?.items);
|
|
157
|
-
if (context?.toolbar) {
|
|
158
|
-
context.toolbar.on({
|
|
159
|
-
ToolbarItemsChanged: this._toolbarItemsChanged.bind(this)
|
|
160
|
-
});
|
|
161
|
-
}
|
|
162
|
-
this._titleSource?.next(context?.title);
|
|
163
|
-
this._toolbarVisibleSource.next(this._getToolbarVisibility(context));
|
|
164
|
-
}
|
|
165
|
-
_prepareView(view) {
|
|
166
|
-
this._layoutSource.next(view?.Layout94);
|
|
167
|
-
this._prepareLayoutComponent(view);
|
|
168
|
-
this._maxContentWidthSource.next(this._getMaxContentWidth(view));
|
|
169
|
-
this._isSimpleFormSource.next(this._getIsSimpleForm(view));
|
|
170
|
-
this._headerLayoutSource.next(this._getHeaderLayout(view));
|
|
171
|
-
if (view) {
|
|
172
|
-
this.ColonInLabel = view.ColonInLabel !== false;
|
|
173
|
-
}
|
|
174
|
-
this._formWidthSource.next(view?.inDialog ? view.Layout94.Bounds.width + 'px' : '100%');
|
|
175
|
-
}
|
|
176
|
-
_filterToolbarItems(items) {
|
|
177
|
-
if (!items) {
|
|
178
|
-
return [];
|
|
179
|
-
}
|
|
180
|
-
// در صورتی که در موبایل باشد دو دکمه نمایش داده شود از دکمه های کاربر و فرآیندی
|
|
181
|
-
// در صورتی که دکمه ی وجود نداشت فقط دکمه ذخیره نمایش داده شود
|
|
182
|
-
// در حالتهای دیگر ابتدا دکمه های کاربری و فرآیندی و بعد دکمه های تعریف شده سیستم نمایش داده میشود.
|
|
183
|
-
const isMobile = getDeviceIsMobile();
|
|
184
|
-
const isTablet = getDeviceIsTablet();
|
|
185
|
-
let newItems = items.filter((c) => !c.hidden &&
|
|
186
|
-
!((isMobile || isTablet || BarsaApi.LoginFormData.IsServiceDesk) &&
|
|
187
|
-
(c.itemId === 'Next' ||
|
|
188
|
-
c.itemId === 'Previous' ||
|
|
189
|
-
c.itemId === 'MoveNext' ||
|
|
190
|
-
c.itemId === 'MovePrev' ||
|
|
191
|
-
c.itemId === 'MovePrevious')));
|
|
192
|
-
newItems.sort((c, d) => (Number(c?.Data?.TabOrderNumber) < Number(d?.Data?.TabOrderNumber) ? 1 : -1));
|
|
193
|
-
const nonStringItems = newItems.filter((c) => typeof c !== 'string');
|
|
194
|
-
const t = nonStringItems.find((c) => !c.isBuiltin && !c.IAmMenu);
|
|
195
|
-
if (t) {
|
|
196
|
-
t.priority = 'high';
|
|
197
|
-
}
|
|
198
|
-
// let nonBuiltinCount = 0;
|
|
199
|
-
// nonStringItems.forEach((item) => {
|
|
200
|
-
// if (typeof item === 'string') {
|
|
201
|
-
// return;
|
|
202
|
-
// }
|
|
203
|
-
// const inFooter = BarsaApi.Common.Util.TryGetValue(item, 'Data.CustomUi.Parameters.InFooter', false);
|
|
204
|
-
// if (item.isBuiltin || inFooter) {
|
|
205
|
-
// // سیستمی
|
|
206
|
-
// item.priority = 'always';
|
|
207
|
-
// } else {
|
|
208
|
-
// if (nonBuiltinCount > 1) {
|
|
209
|
-
// // دکمه های کاربری که بیشتر از دو هستند
|
|
210
|
-
// item.priority = 'low';
|
|
211
|
-
// } else {
|
|
212
|
-
// item.priority = 'low';
|
|
213
|
-
// }
|
|
214
|
-
// nonBuiltinCount++;
|
|
215
|
-
// }
|
|
216
|
-
// });
|
|
217
|
-
const noBuiltinItems = nonStringItems.filter((c) => typeof c === 'object' &&
|
|
218
|
-
!c.isBuiltin &&
|
|
219
|
-
BarsaApi.Common.Util.TryGetValue(c, 'Data.CustomUi.Parameters.InFooter', false) !== true);
|
|
220
|
-
noBuiltinItems.forEach((item, index) => {
|
|
221
|
-
index === 0 ? (item.priority = 'hight') : (item.priority = 'low');
|
|
222
|
-
});
|
|
223
|
-
const nonBuiltinCount = noBuiltinItems.length;
|
|
224
|
-
if (nonBuiltinCount === 0) {
|
|
225
|
-
// اگر هیچ دکمه کاربری وجود نداشت
|
|
226
|
-
nonStringItems.forEach((item, _) => {
|
|
227
|
-
if (item.itemId === 'Save') {
|
|
228
|
-
item.priority = 'never';
|
|
229
|
-
}
|
|
230
|
-
});
|
|
231
|
-
}
|
|
232
|
-
const saveAndNew = newItems.find((c) => c.itemId === 'SaveAndNew');
|
|
233
|
-
const saveAndClose = newItems.find((c) => c.itemId === 'SaveAndClose');
|
|
234
|
-
if (saveAndClose && saveAndClose.menu) {
|
|
235
|
-
const save = saveAndClose.menu.items[0];
|
|
236
|
-
if (save) {
|
|
237
|
-
save.isBuiltin = true;
|
|
238
|
-
save.priority = nonBuiltinCount === 0 ? 'never' : 'always';
|
|
239
|
-
newItems.push(save);
|
|
240
|
-
if (saveAndNew) {
|
|
241
|
-
save.IAmMenu = true;
|
|
242
|
-
save.menu = { items: [{ ...saveAndNew }] };
|
|
243
|
-
newItems = newItems.filter((c) => c.itemId !== 'SaveAndNew');
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
newItems.forEach((item) => {
|
|
248
|
-
if (item.menu) {
|
|
249
|
-
item.menu.items = item.menu.items.filter((c) => !c.hidden);
|
|
250
|
-
}
|
|
251
|
-
});
|
|
252
|
-
const builtinsButtons = newItems.filter((c) => c?.isBuiltin);
|
|
253
|
-
newItems = [
|
|
254
|
-
...builtinsButtons,
|
|
255
|
-
...newItems.filter((c) => !c?.isBuiltin && !c?.isWorkflow),
|
|
256
|
-
...newItems.filter((c) => c?.isWorkflow)
|
|
257
|
-
];
|
|
258
|
-
const moveNextIndex = newItems.findIndex((c) => c.itemId === 'MoveNext');
|
|
259
|
-
if (moveNextIndex > -1) {
|
|
260
|
-
newItems[moveNextIndex].priority = 'always';
|
|
261
|
-
const mos = newItems.splice(moveNextIndex - 1, 2);
|
|
262
|
-
newItems = [...mos, ...newItems];
|
|
263
|
-
}
|
|
264
|
-
const movePrevIndex = newItems.findIndex((c) => c.itemId === 'MovePrev');
|
|
265
|
-
if (movePrevIndex > -1) {
|
|
266
|
-
newItems[movePrevIndex].priority = 'always';
|
|
267
|
-
}
|
|
268
|
-
// check toolbaritems in footer property
|
|
269
|
-
newItems.forEach((c) => {
|
|
270
|
-
const inFooter = BarsaApi.Common.Util.TryGetValue(c, 'Data.CustomUi.Parameters.InFooter', false);
|
|
271
|
-
if (inFooter) {
|
|
272
|
-
c.inFooter = true;
|
|
273
|
-
}
|
|
274
|
-
});
|
|
275
|
-
return newItems.reverse();
|
|
276
|
-
// return newItems.sort((a): number => (typeof a == 'string' ? 0 : a.IAmMenu ? 1 : -1));
|
|
277
|
-
}
|
|
278
|
-
_getHeaderLayout(view) {
|
|
279
|
-
const headerLayout = BarsaApi.Common.Util.TryGetValue(view, 'HeaderLayout', null);
|
|
280
|
-
if (headerLayout) {
|
|
281
|
-
// this.setHeaderTitleAndSubtitleAndAvatar(headerLayout);
|
|
282
|
-
const t = [];
|
|
283
|
-
headerLayout.FacetList.MoDataList.forEach((facetColumn) => {
|
|
284
|
-
t.push({
|
|
285
|
-
type: facetColumn.ColumnSettings.$FormPanelSetting.Data.Mo.Type,
|
|
286
|
-
mo: facetColumn.ColumnSettings.$FormPanelSetting.Data.Mo
|
|
287
|
-
});
|
|
288
|
-
});
|
|
289
|
-
headerLayout.FacetList2 = t;
|
|
290
|
-
}
|
|
291
|
-
return headerLayout;
|
|
292
|
-
}
|
|
293
|
-
_prepareLayoutComponent(view) {
|
|
294
|
-
if (!view) {
|
|
295
|
-
return;
|
|
296
|
-
}
|
|
297
|
-
const layoutComponents = BarsaApi.Common.Util.TryGetValue(view, 'ExtraJsonProp.Components', null);
|
|
298
|
-
if (!layoutComponents) {
|
|
299
|
-
return;
|
|
300
|
-
}
|
|
301
|
-
if (!Array.isArray(layoutComponents)) {
|
|
302
|
-
return;
|
|
303
|
-
}
|
|
304
|
-
layoutComponents.forEach((layoutComponent) => {
|
|
305
|
-
const layoutSetting = FindLayoutSettingFromLayout94(view.Layout94, layoutComponent.LayoutTitle);
|
|
306
|
-
if (layoutSetting == null) {
|
|
307
|
-
return;
|
|
308
|
-
}
|
|
309
|
-
layoutSetting.component = { ...layoutComponent };
|
|
310
|
-
});
|
|
311
|
-
}
|
|
312
|
-
_getIsSimpleForm(view) {
|
|
313
|
-
const isSimple = BarsaApi.Common.Util.TryGetValue(view, 'ExtraJsonProp.IsSimple', false);
|
|
314
|
-
return isSimple;
|
|
315
|
-
}
|
|
316
|
-
_getToolbarVisibility(context) {
|
|
317
|
-
if (!context) {
|
|
318
|
-
return false;
|
|
319
|
-
}
|
|
320
|
-
const hideToolbar = BarsaApi.Common.Util.TryGetValue(context, 'toolbar.hideToolbar', false);
|
|
321
|
-
if (hideToolbar) {
|
|
322
|
-
return false;
|
|
323
|
-
}
|
|
324
|
-
const { FormSettings } = context.Setting.View;
|
|
325
|
-
if (FormSettings) {
|
|
326
|
-
const showToolbar = FormSettings.ShowToolbar === false ? false : true;
|
|
327
|
-
const featureToolbar = BarsaApi.Common.Util.TryGetValue(context, 'Features.Toolbar', false);
|
|
328
|
-
const visible = (featureToolbar && showToolbar) !== false;
|
|
329
|
-
return visible;
|
|
330
|
-
}
|
|
331
|
-
return true;
|
|
332
|
-
}
|
|
333
|
-
_getMaxContentWidth(view) {
|
|
334
|
-
const maxContentWidth = BarsaApi.Common.Util.TryGetValue(view, 'ExtraJsonProp.MaxWidth', '0');
|
|
335
|
-
return maxContentWidth;
|
|
336
|
-
}
|
|
337
|
-
_addListener(context) {
|
|
338
|
-
if (!context) {
|
|
339
|
-
return;
|
|
340
|
-
}
|
|
341
|
-
context.on({
|
|
342
|
-
CloseSideNavigator: this._closeSideNavigator.bind(this),
|
|
343
|
-
GroupBRuleChanged: this._groupBRuleChanged.bind(this),
|
|
344
|
-
TitleChanged: this._titleChanged.bind(this),
|
|
345
|
-
WizardNextStep: this._wizardNextStep.bind(this),
|
|
346
|
-
WizardPreviousStep: this._wizardPreviousStep.bind(this),
|
|
347
|
-
DoLayout: this._doLayout.bind(this),
|
|
348
|
-
MaskChanged: this._maskChanged.bind(this),
|
|
349
|
-
ForceClose: this._forceClose.bind(this),
|
|
350
|
-
Refresh: this._refresh.bind(this)
|
|
351
|
-
});
|
|
352
|
-
context.toolbar.on({
|
|
353
|
-
ToolbarItemsChanged: this._toolbarItemsChanged.bind(this)
|
|
354
|
-
});
|
|
355
|
-
}
|
|
356
|
-
_refresh() {
|
|
357
|
-
this._initialize(this._context);
|
|
358
|
-
// this._prepareView(this._context.Setting.View);
|
|
359
|
-
}
|
|
360
|
-
_forceClose() {
|
|
361
|
-
this._forceCloseSource.next();
|
|
362
|
-
}
|
|
363
|
-
_maskChanged(mask) {
|
|
364
|
-
this._maskSource.next(mask);
|
|
365
|
-
}
|
|
366
|
-
_toolbarItemsChanged(items) {
|
|
367
|
-
this._toolbarItemsSource.next(items);
|
|
368
|
-
}
|
|
369
|
-
_titleChanged(title) {
|
|
370
|
-
this._titleSource.next(title);
|
|
371
|
-
}
|
|
372
|
-
_wizardNextStep() {
|
|
373
|
-
this._wizardNextStepSource.next();
|
|
374
|
-
}
|
|
375
|
-
_wizardPreviousStep() {
|
|
376
|
-
this._wizardPreviousStepSource.next();
|
|
377
|
-
}
|
|
378
|
-
_doLayout(context) {
|
|
379
|
-
const view = context.Setting.View;
|
|
380
|
-
this._viewSource.next(view);
|
|
381
|
-
}
|
|
382
|
-
_closeSideNavigator() {
|
|
383
|
-
this._sidebarState$.next('close');
|
|
384
|
-
}
|
|
385
|
-
_groupBRuleChanged(groupItem) {
|
|
386
|
-
this._groupBRuleSource.next(groupItem);
|
|
387
|
-
}
|
|
388
|
-
_prepareContext(context) {
|
|
389
|
-
this._addListener(context);
|
|
390
|
-
this._initialize(context);
|
|
391
|
-
this._context = context;
|
|
392
|
-
}
|
|
393
|
-
}
|
|
394
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1wYW5lbC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etbm92aW4tcmF5LWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9mb3JtLXBhbmVsLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQWMsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4SCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDekQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ25FLE9BQU8sRUFDSCxXQUFXLEVBQ1gsNkJBQTZCLEVBQzdCLGlCQUFpQixFQUNqQixjQUFjLEVBQ2QsaUJBQWlCLEVBQ3BCLE1BQU0sY0FBYyxDQUFDO0FBRXRCLE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxhQUFhO0lBK0QvQztRQUNJLEtBQUssRUFBRSxDQUFDO1FBNUNaLGdCQUFXLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDbEQsZ0JBQVcsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUNsRCxjQUFTLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFZeEMsbUJBQWMsR0FBRyxJQUFJLGVBQWUsQ0FBTSxJQUFJLENBQUMsQ0FBQztRQUNoRCxzQkFBaUIsR0FBRyxJQUFJLGVBQWUsQ0FBUyxDQUFDLENBQUMsQ0FBQztRQUNuRCwrQkFBMEIsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUNqRSx5QkFBb0IsR0FBRyxJQUFJLGVB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cnZhYmxlLCBjb21iaW5lTGF0ZXN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGVsYXksIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgdGFrZVVudGlsLCB0YXAsIHdpdGhMYXRlc3RGcm9tIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBGb3JtVmlld1NldHRpbmcsIElIZWFkZXJMYXlvdXQsIExheW91dFNldHRpbmcsIE1ldGFvYmplY3REYXRhTW9kZWwgfSBmcm9tICcuLi9hYnN0cmFjdC1jbGFzc2VzL21vZGVscyc7XHJcbmltcG9ydCB7IEJhcnNhQXBpIH0gZnJvbSAnLi4vYWJzdHJhY3QtY2xhc3Nlcy9iYXJzYS1hcGknO1xyXG5pbXBvcnQgeyBCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vYWJzdHJhY3QtY2xhc3Nlcy9iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7XHJcbiAgICBEZXZpY2VXaWR0aCxcclxuICAgIEZpbmRMYXlvdXRTZXR0aW5nRnJvbUxheW91dDk0LFxyXG4gICAgZ2V0RGV2aWNlSXNNb2JpbGUsXHJcbiAgICBnZXRIZWFkZXJWYWx1ZSxcclxuICAgIGdldERldmljZUlzVGFibGV0XHJcbn0gZnJvbSAnLi4vY29uc3RhbnRzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBGb3JtUGFuZWxTZXJ2aWNlIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XHJcbiAgICBjb250ZXh0JDogT2JzZXJ2YWJsZTxhbnk+O1xyXG4gICAgc2VhcmNoUGFuZWxJc09iamVjdCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XHJcbiAgICBpc1NlYXJjaFBhbmVsJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuICAgIGlzU2VhcmNQYW5lbEluU2lkZUNvbnRlbnQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xyXG4gICAgd29ya2Zsb3dQYW5lbFVpJDogT2JzZXJ2YWJsZTxhbnk+O1xyXG4gICAgbW8kOiBPYnNlcnZhYmxlPE1ldGFvYmplY3REYXRhTW9kZWw+O1xyXG4gICAgdmlldyQ6IE9ic2VydmFibGU8YW55PjtcclxuICAgIHRvb2xiYXJJdGVtcyQ6IE9ic2VydmFibGU8YW55W10+O1xyXG4gICAgd29ya2Zsb3dCdXR0b25zJDogT2JzZXJ2YWJsZTxhbnlbXT47XHJcbiAgICBtYXhDb250ZW50V2lkdGgkOiBPYnNlcnZhYmxlPHN0cmluZz47XHJcbiAgICB3aXphcmROZXh0U3RlcCQ6IE9ic2VydmFibGU8dm9pZD47XHJcbiAgICB3aXphcmRQcmV2aW91c1N0ZXAkOiBPYnNlcnZhYmxlPHZvaWQ+O1xyXG4gICAgbGF5b3V0JDogT2JzZXJ2YWJsZTxhbnk+O1xyXG4gICAgZm9yY2VDbG9zZSQ6IE9ic2VydmFibGU8dm9pZD47XHJcbiAgICBncm91cExheW91dCQ6IE9ic2VydmFibGU8TGF5b3V0U2V0dGluZz47XHJcbiAgICBpc1NpbXBsZUZvcm0kOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xyXG4gICAgZm9ybVdpZHRoJDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xyXG4gICAgdG9vbGJhclZpc2libGUkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xyXG4gICAgaGVhZGVyTGF5b3V0JDogT2JzZXJ2YWJsZTxJSGVhZGVyTGF5b3V0PjtcclxuICAgIF9oaWRlQ2xvc2UkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgICBfaGlkZVRpdGxlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gICAgX2hpZGVQaW4kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgICB0aXRsZSQ6IE9ic2VydmFibGU8c3RyaW5nPjtcclxuICAgIGhlYWRlckRlc2NyaXB0aW9uJDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xyXG4gICAgaGVhZGVyUmVtb3ZlQ29udGVudFBhZGRpbmckOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xyXG4gICAgaGVhZGVyU3VidGl0bGUkOiBPYnNlcnZhYmxlPHN0cmluZz47XHJcbiAgICBhdmF0YXIkOiBPYnNlcnZhYmxlPGFueT47XHJcbiAgICBjaXJjbGVBdmF0YXIkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xyXG4gICAgbWFzayQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XHJcbiAgICBmb3JtSGVpZ2h0JDogT2JzZXJ2YWJsZTxudW1iZXI+O1xyXG4gICAgZmllbGREaWN0JDogT2JzZXJ2YWJsZTx7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHwgdW5kZWZpbmVkPjtcclxuXHJcbiAgICBwcml2YXRlIF9jb250ZXh0O1xyXG4gICAgcHJpdmF0ZSBfY29udGV4dFNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihudWxsKTtcclxuICAgIHByaXZhdGUgX2Zvcm1IZWlnaHRTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XHJcbiAgICBwcml2YXRlIF9zZWFyY2hQYW5lbElzT2JqZWN0U291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgICBwcml2YXRlIF9pc1NlYXJjaFBhbmVsU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgICBwcml2YXRlIF9pc1NlYXJjUGFuZWxJblNpZGVDb250ZW50ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgICBwcml2YXRlIF93b3JrZmxvd1BhbmVsVWlTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCk7XHJcbiAgICBwcml2YXRlIF9tb1NvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihudWxsKTtcclxuICAgIHByaXZhdGUgX3ZpZXdTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCk7XHJcbiAgICBwcml2YXRlIF9zaWRlYmFyU3RhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDwnY2xvc2UnIHwgJ29wZW4nPignY2xvc2UnKTtcclxuICAgIHByaXZhdGUgX3Rvb2xiYXJJdGVtc1NvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55W10+KFtdKTtcclxuICAgIHByaXZhdGUgX3RpdGxlU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcclxuICAgIHByaXZhdGUgX21heENvbnRlbnRXaWR0aFNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignYXV0bycpO1xyXG4gICAgcHJpdmF0ZSBfd2l6YXJkTmV4dFN0ZXBTb3VyY2UgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gICAgcHJpdmF0ZSBfd2l6YXJkUHJldmlvdXNTdGVwU291cmNlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICAgIHByaXZhdGUgX2xheW91dFNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihudWxsKTtcclxuICAgIHByaXZhdGUgX2ZvcmNlQ2xvc2VTb3VyY2UgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gICAgcHJpdmF0ZSBfZ3JvdXBCUnVsZVNvdXJjZSA9IG5ldyBTdWJqZWN0PExheW91dFNldHRpbmc+KCk7XHJcbiAgICBwcml2YXRlIF9pc1NpbXBsZUZvcm1Tb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICAgIHByaXZhdGUgX2Zvcm1XaWR0aFNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignMTAwJScpO1xyXG4gICAgcHJpdmF0ZSBfdG9vbGJhclZpc2libGVTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xyXG4gICAgcHJpdmF0ZSBfaGVhZGVyTGF5b3V0U291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KG51bGwpO1xyXG4gICAgcHJpdmF0ZSBfaGVhZGVyVGl0bGVTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xyXG4gICAgcHJpdmF0ZSBfbWFza1NvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gICAgcHJpdmF0ZSBfaGVhZGVyUmVtb3ZlQ29udGVudFBhZGRpbmdTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICAgIHByaXZhdGUgX2hlYWRlckRlc2NyaXB0aW9uU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcclxuICAgIHByaXZhdGUgX2hpZGVGb290ZXIkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgICBwcml2YXRlIF9jYW5TZW5kJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gICAgZm9ybUNvbnRhaW5lckRvbTogSFRNTEVsZW1lbnQ7XHJcbiAgICBDb2xvbkluTGFiZWwgPSB0cnVlO1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLmNvbnRleHQkID0gdGhpcy5fY29udGV4dFNvdXJjZS5hc09ic2VydmFibGUoKS5waXBlKFxyXG4gICAgICAgICAgICB0YXAoKGNvbnRleHQpID0+IHRoaXMuX3ByZXBhcmVDb250ZXh0KGNvbnRleHQpKSxcclxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZWFyY2hQYW5lbElzT2JqZWN0JCA9IHRoaXMuX3NlYXJjaFBhbmVsSXNPYmplY3RTb3VyY2UuYXNPYnNlcnZhYmxlKCkucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpO1xyXG4gICAgICAgIHRoaXMuaXNTZWFyY2hQYW5lbCQgPSB0aGlzLl9pc1NlYXJjaFBhbmVsU291cmNlLmFzT2JzZXJ2YWJsZSgpLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKTtcclxuICAgICAgICB0aGlzLmlzU2VhcmNQYW5lbEluU2lkZUNvbnRlbnQkID0gdGhpcy5faXNTZWFyY1BhbmVsSW5TaWRlQ29udGVudFxyXG4gICAgICAgICAgICAuYXNPYnNlcnZhYmxlKClcclxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKTtcclxuICAgICAgICB0aGlzLndvcmtmbG93UGFuZWxVaSQgPSB0aGlzLl93b3JrZmxvd1BhbmVsVWlTb3VyY2UuYXNPYnNlcnZhYmxlKCkucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpO1xyXG4gICAgICAgIHRoaXMuZm9ybUhlaWdodCQgPSB0aGlzLl9mb3JtSGVpZ2h0U291cmNlLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgICAgIHRoaXMubW8kID0gdGhpcy5fbW9Tb3VyY2UuYXNPYnNlcnZhYmxlKCkucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpO1xyXG4gICAgICAgIHRoaXMuZmllbGREaWN0JCA9IHRoaXMubW8kLnBpcGUoXHJcbiAgICAgICAgICAgIG1hcCgoYykgPT4gYy4kRmllbGREaWN0KSxcclxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy52aWV3JCA9IHRoaXMuX3ZpZXdTb3VyY2UuYXNPYnNlcnZhYmxlKCkucGlwZShcclxuICAgICAgICAgICAgdGFwKCh2aWV3KSA9PiB0aGlzLl9wcmVwYXJlVmlldyh2aWV3KSksXHJcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMudG9vbGJhckl0ZW1zJCA9IHRoaXMuX3Rvb2xiYXJJdGVtc1NvdXJjZS5hc09ic2VydmFibGUoKS5waXBlKFxyXG4gICAgICAgICAgICBtYXAoKGl0ZW1zKSA9PiB0aGlzLl9maWx0ZXJUb29sYmFySXRlbXMoaXRlbXMpKSxcclxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy53b3JrZmxvd0J1dHRvbnMkID0gdGhpcy53b3JrZmxvd1BhbmVsVWkkLnBpcGUoXHJcbiAgICAgICAgICAgIG1hcCgoYykgPT4gYz8uYnV0dG9uTGlzdCB8fCBbXSksXHJcbiAgICAgICAgICAgIHdpdGhMYXRlc3RGcm9tKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5fdG9vbGJhckl0ZW1zU291cmNlLmFzT2JzZXJ2YWJsZSgpLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgICAgbWFwKChpdGVtcykgPT4gdGhpcy5fZmlsdGVyVG9vbGJhckl0ZW1zKGl0ZW1zKSksXHJcbiAgICAgICAgICAgICAgICAgICAgbWFwKChpdGVtcykgPT4gaXRlbXMuZmlsdGVyKChjKSA9PiBjLmlzV29ya2Zsb3cpKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICBtYXAoKFtpdGVtczEsIGl0ZW1zMl0pID0+IFsuLi5pdGVtczIsIC4uLml0ZW1zMV0pLFxyXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JClcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICAvLyB0aGlzLl90b29sYmFySXRlbXNTb3VyY2UuYXNPYnNlcnZhYmxlKCkucGlwZShcclxuICAgICAgICAvLyAgICAgbWFwKChpdGVtcykgPT4gdGhpcy5fZmlsdGVyVG9vbGJhckl0ZW1zKGl0ZW1zKSksXHJcbiAgICAgICAgLy8gICAgIG1hcCgoaXRlbXMpID0+IGl0ZW1zLmZpbHRlcigoYykgPT4gYy5pc1dvcmtmbG93KSksXHJcbiAgICAgICAgLy8gICAgIHdpdGhMYXRlc3RGcm9tKHRoaXMud29ya2Zsb3dQYW5lbFVpJC5waXBlKG1hcCgoYykgPT4gYz8uYnV0dG9uTGlzdCB8fCBbXSkpKSxcclxuICAgICAgICAvLyAgICAgbWFwKChbaXRlbXMxLCBpdGVtczJdKSA9PiAoaXRlbXMxLmxlbmd0aCA+IDAgPyBpdGVtczEgOiBpdGVtczIpKSxcclxuICAgICAgICAvLyAgICAgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpXHJcbiAgICAgICAgLy8gKTtcclxuXHJcbiAgICAgICAgdGhpcy5tYXhDb250ZW50V2lkdGgkID0gdGhpcy5fbWF4Q29udGVudFdpZHRoU291cmNlLmFzT2JzZXJ2YWJsZSgpLnBpcGUoXHJcbiAgICAgICAgICAgIG1hcCgod2lkdGgpID0+ICh3aWR0aCA/IHdpZHRoICsgJ3B4JyA6ICdhdXRvJykpLFxyXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JClcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLndpemFyZE5leHRTdGVwJCA9IHRoaXMuX3dpemFyZE5leHRTdGVwU291cmNlLmFzT2JzZXJ2YWJsZSgpLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKTtcclxuICAgICAgICB0aGlzLndpemFyZFByZXZpb3VzU3RlcCQgPSB0aGlzLl93aXphcmRQcmV2aW91c1N0ZXBTb3VyY2UuYXNPYnNlcnZhYmxlKCkucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpO1xyXG4gICAgICAgIHRoaXMubGF5b3V0JCA9IHRoaXMuX2xheW91dFNvdXJjZS5hc09ic2VydmFibGUoKS5waXBlKFxyXG4gICAgICAgICAgICBtYXAoKGxheW91dCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFsYXlvdXQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGF5b3V0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgZGV2aWNlV2lkdGggPSBEZXZpY2VXaWR0aCgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGRldmljZVdpZHRoIDwgbGF5b3V0LkJvdW5kcy53aWR0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxheW91dC5Cb3VuZHMud2lkdGggPSBkZXZpY2VXaWR0aDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLmxheW91dCB9O1xyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5mb3JjZUNsb3NlJCA9IHRoaXMuX2ZvcmNlQ2xvc2VTb3VyY2UuYXNPYnNlcnZhYmxlKCkucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpO1xyXG5cclxuICAgICAgICB0aGlzLmdyb3VwTGF5b3V0JCA9IHRoaXMuX2dyb3VwQlJ1bGVTb3VyY2UuYXNPYnNlcnZhYmxlKCkucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpO1xyXG5cclxuICAgICAgICB0aGlzLmlzU2ltcGxlRm9ybSQgPSB0aGlzLl9pc1NpbXBsZUZvcm1Tb3VyY2UuYXNPYnNlcnZhYmxlKCkucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpO1xyXG5cclxuICAgICAgICB0aGlzLmZvcm1XaWR0aCQgPSB0aGlzLl9mb3JtV2lkdGhTb3VyY2UuYXNPYnNlcnZhYmxlKCkucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpO1xyXG5cclxuICAgICAgICB0aGlzLnRvb2xiYXJWaXNpYmxlJCA9IHRoaXMuX3Rvb2xiYXJWaXNpYmxlU291cmNlLmFzT2JzZXJ2YWJsZSgpLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKTtcclxuICAgICAgICB0aGlzLnRpdGxlJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuX2hlYWRlclRpdGxlU291cmNlLmFzT2JzZXJ2YWJsZSgpLCB0aGlzLl90aXRsZVNvdXJjZS5hc09ic2VydmFibGUoKV0pLnBpcGUoXHJcbiAgICAgICAgICAgIG1hcCgoW2hlYWRlclRpdGxlLCB0aXRsZV0pID0+IChoZWFkZXJUaXRsZSA/IGhlYWRlclRpdGxlIDogdGl0bGUpKSxcclxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmhlYWRlckxheW91dCQgPSB0aGlzLl9oZWFkZXJMYXlvdXRTb3VyY2UuYXNPYnNlcnZhYmxlKCkucGlwZShcclxuICAgICAgICAgICAgZmlsdGVyKChoZWFkZXJMYXlvdXQpID0+ICEhaGVhZGVyTGF5b3V0KSxcclxuICAgICAgICAgICAgdGFwKChoZWFkZXJMYXlvdXQpID0+IHRoaXMuX2hlYWRlclRpdGxlU291cmNlLm5leHQoZ2V0SGVhZGVyVmFsdWUoaGVhZGVyTGF5b3V0Py5UaXRsZSkpKSxcclxuICAgICAgICAgICAgdGFwKChoZWFkZXJMYXlvdXQpID0+IHRoaXMuX2hpZGVDbG9zZSQubmV4dChoZWFkZXJMYXlvdXQ/LkhpZGVDbG9zZSkpLFxyXG4gICAgICAgICAgICB0YXAoKGhlYWRlckxheW91dCkgPT4gdGhpcy5faGlkZVRpdGxlJC5uZXh0KGhlYWRlckxheW91dD8uSGlkZVRpdGxlKSksXHJcbiAgICAgICAgICAgIHRhcCgoaGVhZGVyTGF5b3V0KSA9PiB0aGlzLl9oaWRlUGluJC5uZXh0KGhlYWRlckxheW91dD8uSGlkZVBpbikpLFxyXG4gICAgICAgICAgICB0YXAoKGhlYWRlckxheW91dCkgPT4gdGhpcy5faGVhZGVyRGVzY3JpcHRpb25Tb3VyY2UubmV4dChnZXRIZWFkZXJWYWx1ZShoZWFkZXJMYXlvdXQ/LkRlc2NyaXB0aW9uKSkpLFxyXG4gICAgICAgICAgICB0YXAoKGhlYWRlckxheW91dCkgPT5cclxuICAgICAgICAgICAgICAgIHRoaXMuX2hlYWRlclJlbW92ZUNvbnRlbnRQYWRkaW5nU291cmNlLm5leHQoZ2V0SGVhZGVyVmFsdWUoaGVhZGVyTGF5b3V0Py5SZW1vdmVDb250ZW50UGFkZGluZykpXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuaGVhZGVyRGVzY3JpcHRpb24kID0gdGhpcy5faGVhZGVyRGVzY3JpcHRpb25Tb3VyY2UuYXNPYnNlcnZhYmxlKCkucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpO1xyXG5cclxuICAgICAgICB0aGlzLmhlYWRlclJlbW92ZUNvbnRlbnRQYWRkaW5nJCA9IHRoaXMuX2hlYWRlclJlbW92ZUNvbnRlbnRQYWRkaW5nU291cmNlXHJcbiAgICAgICAgICAgIC5hc09ic2VydmFibGUoKVxyXG4gICAgICAgICAgICAucGlwZShkZWxheSgwKSwgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKTtcclxuXHJcbiAgICAgICAgdGhpcy5oZWFkZXJTdWJ0aXRsZSQgPSB0aGlzLmhlYWRlckxheW91dCQucGlwZShcclxuICAgICAgICAgICAgbWFwKChoZWFkZXJMYXlvdXQpID0+IGdldEhlYWRlclZhbHVlKGhlYWRlckxheW91dD8uU3ViVGl0bGUpKSxcclxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5hdmF0YXIkID0gdGhpcy5oZWFkZXJMYXlvdXQkLnBpcGUoXHJcbiAgICAgICAgICAgIG1hcCgoaGVhZGVyTGF5b3V0KSA9PiBnZXRIZWFkZXJWYWx1ZShoZWFkZXJMYXlvdXQ/LkF2YXRhciwgdHJ1ZSkpLFxyXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JClcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLmNpcmNsZUF2YXRhciQgPSB0aGlzLmhlYWRlckxheW91dCQucGlwZShcclxuICAgICAgICAgICAgbWFwKChoZWFkZXJMYXlvdXQpID0+IGdldEhlYWRlclZhbHVlKGhlYWRlckxheW91dD8uQ2lyY2xlQXZhdGFyKSksXHJcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5tYXNrJCA9IHRoaXMuX21hc2tTb3VyY2UuYXNPYnNlcnZhYmxlKCkucGlwZShkZWJvdW5jZVRpbWUoMjAwKSwgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKTtcclxuICAgIH1cclxuICAgIGdldCBoaWRlRm9vdGVyJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faGlkZUZvb3RlciQuYXNPYnNlcnZhYmxlKCkucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcclxuICAgIH1cclxuICAgIGdldCBzaWRlYmFyU3RhdGUkKCk6IE9ic2VydmFibGU8J29wZW4nIHwgJ2Nsb3NlJz4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaWRlYmFyU3RhdGUkLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgfVxyXG4gICAgZ2V0IGhpZGVQaW4kKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9oaWRlUGluJC5hc09ic2VydmFibGUoKTtcclxuICAgIH1cclxuICAgIGdldCBoaWRlQ2xvc2UkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9oaWRlQ2xvc2UkLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgfVxyXG4gICAgZ2V0IGhpZGVUaXRsZSQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hpZGVUaXRsZSQuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICB9XHJcbiAgICBnZXQgY2FuU2VuZCQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhblNlbmQkLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgfVxyXG4gICAgZ2V0IG1vKCk6IE1ldGFvYmplY3REYXRhTW9kZWwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9tb1NvdXJjZS5nZXRWYWx1ZSgpO1xyXG4gICAgfVxyXG4gICAgc2V0IGNvbnRleHQodmFsOiBhbnkpIHtcclxuICAgICAgICBpZiAodGhpcy5fY29udGV4dCkge1xyXG4gICAgICAgICAgICB0aGlzLmRlc3Ryb3koKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fY29udGV4dFNvdXJjZS5uZXh0KHZhbCk7XHJcbiAgICB9XHJcbiAgICBoaWRlRm9vdGVyKGhpZGVGb290ZXI6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9oaWRlRm9vdGVyJC5uZXh0KGhpZGVGb290ZXIpO1xyXG4gICAgfVxyXG4gICAgc2V0Rm9ybUhlaWdodCh2YWw6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2Zvcm1IZWlnaHRTb3VyY2UubmV4dCh2YWwpO1xyXG4gICAgfVxyXG4gICAgZGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2NvbnRleHQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9jb250ZXh0LnVuKCdDbG9zZVNpZGVOYXZpZ2F0b3InLCB0aGlzLl9jbG9zZVNpZGVOYXZpZ2F0b3IpO1xyXG4gICAgICAgIHRoaXMuX2NvbnRleHQudW4oJ0dyb3VwQlJ1bGVDaGFuZ2VkJywgdGhpcy5fZ3JvdXBCUnVsZUNoYW5nZWQpO1xyXG4gICAgICAgIHRoaXMuX2NvbnRleHQudW4oJ1RpdGxlQ2hhbmdlZCcsIHRoaXMuX3RpdGxlQ2hhbmdlZCk7XHJcbiAgICAgICAgdGhpcy5fY29udGV4dC51bignV2l6YXJkTmV4dFN0ZXAnLCB0aGlzLl93aXphcmROZXh0U3RlcCk7XHJcbiAgICAgICAgdGhpcy5fY29udGV4dC51bignV2l6YXJkUHJldmlvdXNTdGVwJywgdGhpcy5fd2l6YXJkUHJldmlvdXNTdGVwKTtcclxuICAgICAgICB0aGlzLl9jb250ZXh0LnVuKCdEb0xheW91dCcsIHRoaXMuX2RvTGF5b3V0KTtcclxuICAgICAgICB0aGlzLl9jb250ZXh0LnVuKCdNYXNrQ2hhbmdlZCcsIHRoaXMuX21hc2tDaGFuZ2VkKTtcclxuICAgICAgICB0aGlzLl9jb250ZXh0LnVuKCdGb3JjZUNsb3NlJywgdGhpcy5fZm9yY2VDbG9zZSk7XHJcbiAgICAgICAgdGhpcy5fY29udGV4dC50b29sYmFyLnVuKCdUb29sYmFySXRlbXNDaGFuZ2VkJywgdGhpcy5fdG9vbGJhckl0ZW1zQ2hhbmdlZCk7XHJcbiAgICAgICAgdGhpcy5fY29udGV4dCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5fbGF5b3V0U291cmNlLm5leHQobnVsbCk7XHJcbiAgICAgICAgLy8gdGhpcy5fb25EZXN0cm95JC5uZXh0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdG9vbGJhckNsaWNrKGJ0bik6IHZvaWQge1xyXG4gICAgICAgIGJ0bi5oYW5kbGVyKGJ0biwgdGhpcy5fY29udGV4dCk7XHJcbiAgICB9XHJcbiAgICB3ZkNob2ljZShidG4pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9jb250ZXh0LmZpcmVFdmVudCgnVHJhbnNpdGlvblNlbGVjdCcsIHRoaXMuX2NvbnRleHQsIGJ0bik7XHJcbiAgICB9XHJcbiAgICBjaGFuZ2VTaWRlYmFyU3RhdGUoc3RhdGU6ICdvcGVuJyB8ICdjbG9zZScpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9zaWRlYmFyU3RhdGUkLm5leHQoc3RhdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfaW5pdGlhbGl6ZShjb250ZXh0OiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl93b3JrZmxvd1BhbmVsVWlTb3VyY2UubmV4dChjb250ZXh0Py5Xb3JrZmxvd1BhbmVsVWkpO1xyXG4gICAgICAgIHRoaXMuX2lzU2VhcmNoUGFuZWxTb3VyY2UubmV4dChjb250ZXh0Py5TZXR0aW5nPy5Jc1NlYXJjaFBhbmVsKTtcclxuICAgICAgICB0aGlzLl9pc1NlYXJjUGFuZWxJblNpZGVDb250ZW50Lm5leHQoY29udGV4dD8uU2V0dGluZz8uSXNTZWFyY1BhbmVsSW5TaWRlQ29udGVudCk7XHJcbiAgICAgICAgdGhpcy5fY2FuU2VuZCQubmV4dChjb250ZXh0Py5TZXR0aW5nPy5DYW5TZW5kKTtcclxuICAgICAgICB0aGlzLl9zZWFyY2hQYW5lbElzT2JqZWN0U291cmNlLm5leHQoY29udGV4dD8uU2V0dGluZz8uUGFyYW1ldGVyVHlwZUlzT2JqZWN0KTtcclxuICAgICAgICB0aGlzLl9tb1NvdXJjZS5uZXh0KGNvbnRleHQ/Lk1vKTtcclxuICAgICAgICB0aGlzLl92aWV3U291cmNlLm5leHQoY29udGV4dD8uU2V0dGluZz8uVmlldyk7XHJcbiAgICAgICAgdGhpcy5fdG9vbGJhckl0ZW1zU291cmNlLm5leHQoY29udGV4dD8udG9vbGJhcj8uaXRlbXMpO1xyXG4gICAgICAgIGlmIChjb250ZXh0Py50b29sYmFyKSB7XHJcbiAgICAgICAgICAgIGNvbnRleHQudG9vbGJhci5vbih7XHJcbiAgICAgICAgICAgICAgICBUb29sYmFySXRlbXNDaGFuZ2VkOiB0aGlzLl90b29sYmFySXRlbXNDaGFuZ2VkLmJpbmQodGhpcylcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3RpdGxlU291cmNlPy5uZXh0KGNvbnRleHQ/LnRpdGxlKTtcclxuICAgICAgICB0aGlzLl90b29sYmFyVmlzaWJsZVNvdXJjZS5uZXh0KHRoaXMuX2dldFRvb2xiYXJWaXNpYmlsaXR5KGNvbnRleHQpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX3ByZXBhcmVWaWV3KHZpZXcpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9sYXlvdXRTb3VyY2UubmV4dCh2aWV3Py5MYXlvdXQ5NCk7XHJcbiAgICAgICAgdGhpcy5fcHJlcGFyZUxheW91dENvbXBvbmVudCh2aWV3KTtcclxuICAgICAgICB0aGlzLl9tYXhDb250ZW50V2lkdGhTb3VyY2UubmV4dCh0aGlzLl9nZXRNYXhDb250ZW50V2lkdGgodmlldykpO1xyXG4gICAgICAgIHRoaXMuX2lzU2ltcGxlRm9ybVNvdXJjZS5uZXh0KHRoaXMuX2dldElzU2ltcGxlRm9ybSh2aWV3KSk7XHJcbiAgICAgICAgdGhpcy5faGVhZGVyTGF5b3V0U291cmNlLm5leHQodGhpcy5fZ2V0SGVhZGVyTGF5b3V0KHZpZXcpKTtcclxuICAgICAgICBpZiAodmlldykge1xyXG4gICAgICAgICAgICB0aGlzLkNvbG9uSW5MYWJlbCA9IHZpZXcuQ29sb25JbkxhYmVsICE9PSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fZm9ybVdpZHRoU291cmNlLm5leHQodmlldz8uaW5EaWFsb2cgPyB2aWV3LkxheW91dDk0LkJvdW5kcy53aWR0aCArICdweCcgOiAnMTAwJScpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF9maWx0ZXJUb29sYmFySXRlbXMoaXRlbXM6IEFycmF5PGFueT4pOiBBcnJheTxhbnk+IHtcclxuICAgICAgICBpZiAoIWl0ZW1zKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8g2K/YsSDYtdmI2LHYqtuMINqp2Ycg2K/YsSDZhdmI2KjYp9uM2YQg2KjYp9i02K8g2K/ZiCDYr9qp2YXZhyDZhtmF2KfbjNi0INiv2KfYr9mHINi02YjYryDYp9iyINiv2qnZhdmHINmH2KfbjCDaqdin2LHYqNixINmIINmB2LHYotuM2YbYr9uMXHJcbiAgICAgICAgLy8g2K/YsSDYtdmI2LHYqtuMINqp2Ycg2K/aqdmF2Ycg24wg2YjYrNmI2K8g2YbYr9in2LTYqiDZgdmC2Lcg2K/aqdmF2Ycg2LDYrtuM2LHZhyDZhtmF2KfbjNi0INiv2KfYr9mHINi02YjYr1xyXG4gICAgICAgIC8vINiv2LEg2K3Yp9mE2KrZh9in24wg2K/bjNqv2LEg2KfYqNiq2K/YpyDYr9qp2YXZhyDZh9in24wg2qnYp9ix2KjYsduMINmIINmB2LHYotuM2YbYr9uMINmIINio2LnYryDYr9qp2YXZhyDZh9in24wg2KrYudix24zZgSDYtNiv2Ycg2LPbjNiz2KrZhSDZhtmF2KfbjNi0INiv2KfYr9mHINmF24zYtNmI2K8uXHJcbiAgICAgICAgY29uc3QgaXNNb2JpbGUgPSBnZXREZXZpY2VJc01vYmlsZSgpO1xyXG4gICAgICAgIGNvbnN0IGlzVGFibGV0ID0gZ2V0RGV2aWNlSXNUYWJsZXQoKTtcclxuICAgICAgICBsZXQgbmV3SXRlbXMgPSBpdGVtcy5maWx0ZXIoXHJcbiAgICAgICAgICAgIChjKSA9PlxyXG4gICAgICAgICAgICAgICAgIWMuaGlkZGVuICYmXHJcbiAgICAgICAgICAgICAgICAhKFxyXG4gICAgICAgICAgICAgICAgICAgIChpc01vYmlsZSB8fCBpc1RhYmxldCB8fCBCYXJzYUFwaS5Mb2dpbkZvcm1EYXRhLklzU2VydmljZURlc2spICYmXHJcbiAgICAgICAgICAgICAgICAgICAgKGMuaXRlbUlkID09PSAnTmV4dCcgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pdGVtSWQgPT09ICdQcmV2aW91cycgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pdGVtSWQgPT09ICdNb3ZlTmV4dCcgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pdGVtSWQgPT09ICdNb3ZlUHJldicgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYy5pdGVtSWQgPT09ICdNb3ZlUHJldmlvdXMnKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIG5ld0l0ZW1zLnNvcnQoKGMsIGQpOiBudW1iZXIgPT4gKE51bWJlcihjPy5EYXRhPy5UYWJPcmRlck51bWJlcikgPCBOdW1iZXIoZD8uRGF0YT8uVGFiT3JkZXJOdW1iZXIpID8gMSA6IC0xKSk7XHJcbiAgICAgICAgY29uc3Qgbm9uU3RyaW5nSXRlbXMgPSBuZXdJdGVtcy5maWx0ZXIoKGMpID0+IHR5cGVvZiBjICE9PSAnc3RyaW5nJyk7XHJcblxyXG4gICAgICAgIGNvbnN0IHQgPSBub25TdHJpbmdJdGVtcy5maW5kKChjKSA9PiAhYy5pc0J1aWx0aW4gJiYgIWMuSUFtTWVudSk7XHJcbiAgICAgICAgaWYgKHQpIHtcclxuICAgICAgICAgICAgdC5wcmlvcml0eSA9ICdoaWdoJztcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gbGV0IG5vbkJ1aWx0aW5Db3VudCA9IDA7XHJcbiAgICAgICAgLy8gbm9uU3RyaW5nSXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgIC8vICAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgLy8gICAgICAgICByZXR1cm47XHJcbiAgICAgICAgLy8gICAgIH1cclxuICAgICAgICAvLyAgICAgY29uc3QgaW5Gb290ZXIgPSBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZShpdGVtLCAnRGF0YS5DdXN0b21VaS5QYXJhbWV0ZXJzLkluRm9vdGVyJywgZmFsc2UpO1xyXG4gICAgICAgIC8vICAgICBpZiAoaXRlbS5pc0J1aWx0aW4gfHwgaW5Gb290ZXIpIHtcclxuICAgICAgICAvLyAgICAgICAgIC8vINiz24zYs9iq2YXbjFxyXG4gICAgICAgIC8vICAgICAgICAgaXRlbS5wcmlvcml0eSA9ICdhbHdheXMnO1xyXG4gICAgICAgIC8vICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vICAgICAgICAgaWYgKG5vbkJ1aWx0aW5Db3VudCA+IDEpIHtcclxuICAgICAgICAvLyAgICAgICAgICAgICAvLyDYr9qp2YXZhyDZh9in24wg2qnYp9ix2KjYsduMINqp2Ycg2KjbjNi02KrYsSDYp9iyINiv2Ygg2YfYs9iq2YbYr1xyXG4gICAgICAgIC8vICAgICAgICAgICAgIGl0ZW0ucHJpb3JpdHkgPSAnbG93JztcclxuICAgICAgICAvLyAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gICAgICAgICAgICAgaXRlbS5wcmlvcml0eSA9ICdsb3cnO1xyXG4gICAgICAgIC8vICAgICAgICAgfVxyXG4gICAgICAgIC8vICAgICAgICAgbm9uQnVpbHRpbkNvdW50Kys7XHJcbiAgICAgICAgLy8gICAgIH1cclxuICAgICAgICAvLyB9KTtcclxuICAgICAgICBjb25zdCBub0J1aWx0aW5JdGVtcyA9IG5vblN0cmluZ0l0ZW1zLmZpbHRlcihcclxuICAgICAgICAgICAgKGMpID0+XHJcbiAgICAgICAgICAgICAgICB0eXBlb2YgYyA9PT0gJ29iamVjdCcgJiZcclxuICAgICAgICAgICAgICAgICFjLmlzQnVpbHRpbiAmJlxyXG4gICAgICAgICAgICAgICAgQmFyc2FBcGkuQ29tbW9uLlV0aWwuVHJ5R2V0VmFsdWUoYywgJ0RhdGEuQ3VzdG9tVWkuUGFyYW1ldGVycy5JbkZvb3RlcicsIGZhbHNlKSAhPT0gdHJ1ZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgbm9CdWlsdGluSXRlbXMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgaW5kZXggPT09IDAgPyAoaXRlbS5wcmlvcml0eSA9ICdoaWdodCcpIDogKGl0ZW0ucHJpb3JpdHkgPSAnbG93Jyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY29uc3Qgbm9uQnVpbHRpbkNvdW50ID0gbm9CdWlsdGluSXRlbXMubGVuZ3RoO1xyXG4gICAgICAgIGlmIChub25CdWlsdGluQ291bnQgPT09IDApIHtcclxuICAgICAgICAgICAgLy8g2Kfar9ixINmH24zahiDYr9qp2YXZhyDaqdin2LHYqNix24wg2YjYrNmI2K8g2YbYr9in2LTYqlxyXG4gICAgICAgICAgICBub25TdHJpbmdJdGVtcy5mb3JFYWNoKChpdGVtLCBfKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5pdGVtSWQgPT09ICdTYXZlJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0ucHJpb3JpdHkgPSAnbmV2ZXInO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc2F2ZUFuZE5ldyA9IG5ld0l0ZW1zLmZpbmQoKGMpID0+IGMuaXRlbUlkID09PSAnU2F2ZUFuZE5ldycpO1xyXG4gICAgICAgIGNvbnN0IHNhdmVBbmRDbG9zZSA9IG5ld0l0ZW1zLmZpbmQoKGMpID0+IGMuaXRlbUlkID09PSAnU2F2ZUFuZENsb3NlJyk7XHJcbiAgICAgICAgaWYgKHNhdmVBbmRDbG9zZSAmJiBzYXZlQW5kQ2xvc2UubWVudSkge1xyXG4gICAgICAgICAgICBjb25zdCBzYXZlID0gc2F2ZUFuZENsb3NlLm1lbnUuaXRlbXNbMF07XHJcbiAgICAgICAgICAgIGlmIChzYXZlKSB7XHJcbiAgICAgICAgICAgICAgICBzYXZlLmlzQnVpbHRpbiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBzYXZlLnByaW9yaXR5ID0gbm9uQnVpbHRpbkNvdW50ID09PSAwID8gJ25ldmVyJyA6ICdhbHdheXMnO1xyXG5cclxuICAgICAgICAgICAgICAgIG5ld0l0ZW1zLnB1c2goc2F2ZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2F2ZUFuZE5ldykge1xyXG4gICAgICAgICAgICAgICAgICAgIHNhdmUuSUFtTWVudSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgc2F2ZS5tZW51ID0geyBpdGVtczogW3sgLi4uc2F2ZUFuZE5ldyB9XSB9O1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld0l0ZW1zID0gbmV3SXRlbXMuZmlsdGVyKChjKSA9PiBjLml0ZW1JZCAhPT0gJ1NhdmVBbmROZXcnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBuZXdJdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtLm1lbnUpIHtcclxuICAgICAgICAgICAgICAgIGl0ZW0ubWVudS5pdGVtcyA9IGl0ZW0ubWVudS5pdGVtcy5maWx0ZXIoKGMpID0+ICFjLmhpZGRlbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBidWlsdGluc0J1dHRvbnMgPSBuZXdJdGVtcy5maWx0ZXIoKGMpID0+IGM/LmlzQnVpbHRpbik7XHJcbiAgICAgICAgbmV3SXRlbXMgPSBbXHJcbiAgICAgICAgICAgIC4uLmJ1aWx0aW5zQnV0dG9ucyxcclxuICAgICAgICAgICAgLi4ubmV3SXRlbXMuZmlsdGVyKChjKSA9PiAhYz8uaXNCdWlsdGluICYmICFjPy5pc1dvcmtmbG93KSxcclxuICAgICAgICAgICAgLi4ubmV3SXRlbXMuZmlsdGVyKChjKSA9PiBjPy5pc1dvcmtmbG93KVxyXG4gICAgICAgIF07XHJcbiAgICAgICAgY29uc3QgbW92ZU5leHRJbmRleCA9IG5ld0l0ZW1zLmZpbmRJbmRleCgoYykgPT4gYy5pdGVtSWQgPT09ICdNb3ZlTmV4dCcpO1xyXG4gICAgICAgIGlmIChtb3ZlTmV4dEluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgbmV3SXRlbXNbbW92ZU5leHRJbmRleF0ucHJpb3JpdHkgPSAnYWx3YXlzJztcclxuICAgICAgICAgICAgY29uc3QgbW9zID0gbmV3SXRlbXMuc3BsaWNlKG1vdmVOZXh0SW5kZXggLSAxLCAyKTtcclxuICAgICAgICAgICAgbmV3SXRlbXMgPSBbLi4ubW9zLCAuLi5uZXdJdGVtc107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG1vdmVQcmV2SW5kZXggPSBuZXdJdGVtcy5maW5kSW5kZXgoKGMpID0+IGMuaXRlbUlkID09PSAnTW92ZVByZXYnKTtcclxuICAgICAgICBpZiAobW92ZVByZXZJbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgIG5ld0l0ZW1zW21vdmVQcmV2SW5kZXhdLnByaW9yaXR5ID0gJ2Fsd2F5cyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNoZWNrIHRvb2xiYXJpdGVtcyBpbiBmb290ZXIgcHJvcGVydHlcclxuICAgICAgICBuZXdJdGVtcy5mb3JFYWNoKChjKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGluRm9vdGVyID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuVHJ5R2V0VmFsdWUoYywgJ0RhdGEuQ3VzdG9tVWkuUGFyYW1ldGVycy5JbkZvb3RlcicsIGZhbHNlKTtcclxuICAgICAgICAgICAgaWYgKGluRm9vdGVyKSB7XHJcbiAgICAgICAgICAgICAgICBjLmluRm9vdGVyID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gbmV3SXRlbXMucmV2ZXJzZSgpO1xyXG4gICAgICAgIC8vIHJldHVybiBuZXdJdGVtcy5zb3J0KChhKTogbnVtYmVyID0+ICh0eXBlb2YgYSA9PSAnc3RyaW5nJyA/IDAgOiBhLklBbU1lbnUgPyAxIDogLTEpKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfZ2V0SGVhZGVyTGF5b3V0KHZpZXcpOiBJSGVhZGVyTGF5b3V0IHtcclxuICAgICAgICBjb25zdCBoZWFkZXJMYXlvdXQgPSBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZSh2aWV3LCAnSGVhZGVyTGF5b3V0JywgbnVsbCk7XHJcblxyXG4gICAgICAgIGlmIChoZWFkZXJMYXlvdXQpIHtcclxuICAgICAgICAgICAgLy8gdGhpcy5zZXRIZWFkZXJUaXRsZUFuZFN1YnRpdGxlQW5kQXZhdGFyKGhlYWRlckxheW91dCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHQ6IGFueVtdID0gW107XHJcbiAgICAgICAgICAgIGhlYWRlckxheW91dC5GYWNldExpc3QuTW9EYXRhTGlzdC5mb3JFYWNoKChmYWNldENvbHVtbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgdC5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBmYWNldENvbHVtbi5Db2x1bW5TZXR0aW5ncy4kRm9ybVBhbmVsU2V0dGluZy5EYXRhLk1vLlR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgbW86IGZhY2V0Q29sdW1uLkNvbHVtblNldHRpbmdzLiRGb3JtUGFuZWxTZXR0aW5nLkRhdGEuTW9cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgaGVhZGVyTGF5b3V0LkZhY2V0TGlzdDIgPSB0O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaGVhZGVyTGF5b3V0O1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF9wcmVwYXJlTGF5b3V0Q29tcG9uZW50KHZpZXc6IEZvcm1WaWV3U2V0dGluZyk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdmlldykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGxheW91dENvbXBvbmVudHMgPSBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZSh2aWV3LCAnRXh0cmFKc29uUHJvcC5Db21wb25lbnRzJywgbnVsbCk7XHJcbiAgICAgICAgaWYgKCFsYXlvdXRDb21wb25lbnRzKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGxheW91dENvbXBvbmVudHMpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGF5b3V0Q29tcG9uZW50cy5mb3JFYWNoKChsYXlvdXRDb21wb25lbnQpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbGF5b3V0U2V0dGluZyA9IEZpbmRMYXlvdXRTZXR0aW5nRnJvbUxheW91dDk0KHZpZXcuTGF5b3V0OTQsIGxheW91dENvbXBvbmVudC5MYXlvdXRUaXRsZSk7XHJcbiAgICAgICAgICAgIGlmIChsYXlvdXRTZXR0aW5nID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsYXlvdXRTZXR0aW5nLmNvbXBvbmVudCA9IHsgLi4ubGF5b3V0Q29tcG9uZW50IH07XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgX2dldElzU2ltcGxlRm9ybSh2aWV3OiBGb3JtVmlld1NldHRpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCBpc1NpbXBsZSA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLlRyeUdldFZhbHVlKHZpZXcsICdFeHRyYUpzb25Qcm9wLklzU2ltcGxlJywgZmFsc2UpO1xyXG4gICAgICAgIHJldHVybiBpc1NpbXBsZTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfZ2V0VG9vbGJhclZpc2liaWxpdHkoY29udGV4dCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghY29udGV4dCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGhpZGVUb29sYmFyID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuVHJ5R2V0VmFsdWUoY29udGV4dCwgJ3Rvb2xiYXIuaGlkZVRvb2xiYXInLCBmYWxzZSk7XHJcbiAgICAgICAgaWYgKGhpZGVUb29sYmFyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgeyBGb3JtU2V0dGluZ3MgfSA9IGNvbnRleHQuU2V0dGluZy5WaWV3O1xyXG4gICAgICAgIGlmIChGb3JtU2V0dGluZ3MpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2hvd1Rvb2xiYXIgPSBGb3JtU2V0dGluZ3MuU2hvd1Rvb2xiYXIgPT09IGZhbHNlID8gZmFsc2UgOiB0cnVlO1xyXG4gICAgICAgICAgICBjb25zdCBmZWF0dXJlVG9vbGJhciA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLlRyeUdldFZhbHVlKGNvbnRleHQsICdGZWF0dXJlcy5Ub29sYmFyJywgZmFsc2UpO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgdmlzaWJsZSA9IChmZWF0dXJlVG9vbGJhciAmJiBzaG93VG9vbGJhcikgIT09IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4gdmlzaWJsZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgX2dldE1heENvbnRlbnRXaWR0aCh2aWV3KTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCBtYXhDb250ZW50V2lkdGggPSBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZSh2aWV3LCAnRXh0cmFKc29uUHJvcC5NYXhXaWR0aCcsICcwJyk7XHJcbiAgICAgICAgcmV0dXJuIG1heENvbnRlbnRXaWR0aDtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfYWRkTGlzdGVuZXIoY29udGV4dCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghY29udGV4dCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnRleHQub24oe1xyXG4gICAgICAgICAgICBDbG9zZVNpZGVOYXZpZ2F0b3I6IHRoaXMuX2Nsb3NlU2lkZU5hdmlnYXRvci5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICBHcm91cEJSdWxlQ2hhbmdlZDogdGhpcy5fZ3JvdXBCUnVsZUNoYW5nZWQuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgVGl0bGVDaGFuZ2VkOiB0aGlzLl90aXRsZUNoYW5nZWQuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgV2l6YXJkTmV4dFN0ZXA6IHRoaXMuX3dpemFyZE5leHRTdGVwLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgIFdpemFyZFByZXZpb3VzU3RlcDogdGhpcy5fd2l6YXJkUHJldmlvdXNTdGVwLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgIERvTGF5b3V0OiB0aGlzLl9kb0xheW91dC5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICBNYXNrQ2hhbmdlZDogdGhpcy5fbWFza0NoYW5nZWQuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgRm9yY2VDbG9zZTogdGhpcy5fZm9yY2VDbG9zZS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICBSZWZyZXNoOiB0aGlzLl9yZWZyZXNoLmJpbmQodGhpcylcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb250ZXh0LnRvb2xiYXIub24oe1xyXG4gICAgICAgICAgICBUb29sYmFySXRlbXNDaGFuZ2VkOiB0aGlzLl90b29sYmFySXRlbXNDaGFuZ2VkLmJpbmQodGhpcylcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfcmVmcmVzaCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9pbml0aWFsaXplKHRoaXMuX2NvbnRleHQpO1xyXG4gICAgICAgIC8vIHRoaXMuX3ByZXBhcmVWaWV3KHRoaXMuX2NvbnRleHQuU2V0dGluZy5WaWV3KTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfZm9yY2VDbG9zZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9mb3JjZUNsb3NlU291cmNlLm5leHQoKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfbWFza0NoYW5nZWQobWFzayk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX21hc2tTb3VyY2UubmV4dChtYXNrKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfdG9vbGJhckl0ZW1zQ2hhbmdlZChpdGVtcyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3Rvb2xiYXJJdGVtc1NvdXJjZS5uZXh0KGl0ZW1zKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfdGl0bGVDaGFuZ2VkKHRpdGxlKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fdGl0bGVTb3VyY2UubmV4dCh0aXRsZSk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgX3dpemFyZE5leHRTdGVwKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3dpemFyZE5leHRTdGVwU291cmNlLm5leHQoKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfd2l6YXJkUHJldmlvdXNTdGVwKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3dpemFyZFByZXZpb3VzU3RlcFNvdXJjZS5uZXh0KCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgX2RvTGF5b3V0KGNvbnRleHQpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCB2aWV3ID0gY29udGV4dC5TZXR0aW5nLlZpZXc7XHJcbiAgICAgICAgdGhpcy5fdmlld1NvdXJjZS5uZXh0KHZpZXcpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF9jbG9zZVNpZGVOYXZpZ2F0b3IoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fc2lkZWJhclN0YXRlJC5uZXh0KCdjbG9zZScpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF9ncm91cEJSdWxlQ2hhbmdlZChncm91cEl0ZW06IExheW91dFNldHRpbmcpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9ncm91cEJSdWxlU291cmNlLm5leHQoZ3JvdXBJdGVtKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfcHJlcGFyZUNvbnRleHQoY29udGV4dCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2FkZExpc3RlbmVyKGNvbnRleHQpO1xyXG4gICAgICAgIHRoaXMuX2luaXRpYWxpemUoY29udGV4dCk7XHJcbiAgICAgICAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { BehaviorSubject } from 'rxjs';
|
|
2
|
-
export class FormService {
|
|
3
|
-
constructor() {
|
|
4
|
-
this.fromListSubject = new BehaviorSubject([]);
|
|
5
|
-
this.formList$ = this.fromListSubject.asObservable();
|
|
6
|
-
}
|
|
7
|
-
openCompose(formComposeId) {
|
|
8
|
-
this.fromListSubject.next([...this.fromListSubject.value, formComposeId]);
|
|
9
|
-
}
|
|
10
|
-
closeCompose(formComposeId) {
|
|
11
|
-
this.fromListSubject.next(this.fromListSubject.value.filter((id) => id !== formComposeId));
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etbm92aW4tcmF5LWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9mb3JtLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUVuRCxNQUFNLE9BQU8sV0FBVztJQUdwQjtRQURRLG9CQUFlLEdBQUcsSUFBSSxlQUFlLENBQVcsRUFBRSxDQUFDLENBQUM7UUFFeEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3pELENBQUM7SUFDRCxXQUFXLENBQUMsYUFBcUI7UUFDN0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUNELFlBQVksQ0FBQyxhQUFxQjtRQUM5QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBQy9GLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEZvcm1TZXJ2aWNlIHtcclxuICAgIGZvcm1MaXN0JDogT2JzZXJ2YWJsZTxzdHJpbmdbXT47XHJcbiAgICBwcml2YXRlIGZyb21MaXN0U3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nW10+KFtdKTtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuZm9ybUxpc3QkID0gdGhpcy5mcm9tTGlzdFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICB9XHJcbiAgICBvcGVuQ29tcG9zZShmb3JtQ29tcG9zZUlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmZyb21MaXN0U3ViamVjdC5uZXh0KFsuLi50aGlzLmZyb21MaXN0U3ViamVjdC52YWx1ZSwgZm9ybUNvbXBvc2VJZF0pO1xyXG4gICAgfVxyXG4gICAgY2xvc2VDb21wb3NlKGZvcm1Db21wb3NlSWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZnJvbUxpc3RTdWJqZWN0Lm5leHQodGhpcy5mcm9tTGlzdFN1YmplY3QudmFsdWUuZmlsdGVyKChpZCkgPT4gaWQgIT09IGZvcm1Db21wb3NlSWQpKTtcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { BehaviorSubject } from 'rxjs';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
export class GroupByService {
|
|
5
|
-
constructor() {
|
|
6
|
-
this._groupBy = new BehaviorSubject([]);
|
|
7
|
-
this.groupBy$ = this._groupBy.asObservable();
|
|
8
|
-
}
|
|
9
|
-
setGroupBy(groupBy) {
|
|
10
|
-
this._groupBy.next(groupBy);
|
|
11
|
-
}
|
|
12
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GroupByService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
13
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GroupByService, providedIn: 'root' }); }
|
|
14
|
-
}
|
|
15
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GroupByService, decorators: [{
|
|
16
|
-
type: Injectable,
|
|
17
|
-
args: [{
|
|
18
|
-
providedIn: 'root'
|
|
19
|
-
}]
|
|
20
|
-
}] });
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXBieS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etbm92aW4tcmF5LWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9ncm91cGJ5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUt2QyxNQUFNLE9BQU8sY0FBYztJQUgzQjtRQUlZLGFBQVEsR0FBRyxJQUFJLGVBQWUsQ0FBZ0IsRUFBRSxDQUFDLENBQUM7UUFDMUQsYUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUM7S0FJM0M7SUFIRyxVQUFVLENBQUMsT0FBc0I7UUFDN0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDaEMsQ0FBQzsrR0FMUSxjQUFjO21IQUFkLGNBQWMsY0FGWCxNQUFNOzs0RkFFVCxjQUFjO2tCQUgxQixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU29ydFNldHRpbmcgfSBmcm9tICcuLi9hYnN0cmFjdC1jbGFzc2VzL21vZGVscyc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBHcm91cEJ5U2VydmljZSB7XHJcbiAgICBwcml2YXRlIF9ncm91cEJ5ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTb3J0U2V0dGluZ1tdPihbXSk7XHJcbiAgICBncm91cEJ5JCA9IHRoaXMuX2dyb3VwQnkuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICBzZXRHcm91cEJ5KGdyb3VwQnk6IFNvcnRTZXR0aW5nW10pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9ncm91cEJ5Lm5leHQoZ3JvdXBCeSk7XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { BehaviorSubject } from 'rxjs';
|
|
2
|
-
import { map } from 'rxjs/operators';
|
|
3
|
-
export class HorizontalLayoutService {
|
|
4
|
-
constructor() {
|
|
5
|
-
this.controlFlexColumnSource = new BehaviorSubject({});
|
|
6
|
-
this.displayTextFlexColumn$ = this.controlFlexColumnSource
|
|
7
|
-
.asObservable()
|
|
8
|
-
.pipe(map((controlFlexColumn) => Object.keys(controlFlexColumn).some((c) => controlFlexColumn[c])));
|
|
9
|
-
}
|
|
10
|
-
setFlexColumn(id, val) {
|
|
11
|
-
const flexColumn = this.controlFlexColumnSource.getValue();
|
|
12
|
-
flexColumn[id] = val;
|
|
13
|
-
this.controlFlexColumnSource.next(flexColumn);
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9yaXpvbnRhbC1sYXlvdXQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLW5vdmluLXJheS1jb3JlL3NyYy9saWIvc2VydmljZXMvaG9yaXpvbnRhbC1sYXlvdXQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyQyxNQUFNLE9BQU8sdUJBQXVCO0lBSWhDO1FBRlEsNEJBQXVCLEdBQUcsSUFBSSxlQUFlLENBQWtCLEVBQUUsQ0FBQyxDQUFDO1FBR3ZFLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsdUJBQXVCO2FBQ3JELFlBQVksRUFBRTthQUNkLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUcsQ0FBQztJQUNELGFBQWEsQ0FBQyxFQUFFLEVBQUUsR0FBWTtRQUMxQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDM0QsVUFBVSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNyQixJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2xELENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5leHBvcnQgY2xhc3MgSG9yaXpvbnRhbExheW91dFNlcnZpY2Uge1xyXG4gICAgZGlzcGxheVRleHRGbGV4Q29sdW1uJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuICAgIHByaXZhdGUgY29udHJvbEZsZXhDb2x1bW5Tb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERpc3BsYXlUZXh0RmxleD4oe30pO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuZGlzcGxheVRleHRGbGV4Q29sdW1uJCA9IHRoaXMuY29udHJvbEZsZXhDb2x1bW5Tb3VyY2VcclxuICAgICAgICAgICAgLmFzT2JzZXJ2YWJsZSgpXHJcbiAgICAgICAgICAgIC5waXBlKG1hcCgoY29udHJvbEZsZXhDb2x1bW4pID0+IE9iamVjdC5rZXlzKGNvbnRyb2xGbGV4Q29sdW1uKS5zb21lKChjKSA9PiBjb250cm9sRmxleENvbHVtbltjXSkpKTtcclxuICAgIH1cclxuICAgIHNldEZsZXhDb2x1bW4oaWQsIHZhbDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGZsZXhDb2x1bW4gPSB0aGlzLmNvbnRyb2xGbGV4Q29sdW1uU291cmNlLmdldFZhbHVlKCk7XHJcbiAgICAgICAgZmxleENvbHVtbltpZF0gPSB2YWw7XHJcbiAgICAgICAgdGhpcy5jb250cm9sRmxleENvbHVtblNvdXJjZS5uZXh0KGZsZXhDb2x1bW4pO1xyXG4gICAgfVxyXG59XHJcbmludGVyZmFjZSBEaXNwbGF5VGV4dEZsZXgge1xyXG4gICAgW2tleTogc3RyaW5nXTogYm9vbGVhbjtcclxufVxyXG4iXX0=
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
export * from './api.service';
|
|
2
|
-
export * from './breadcrumb.service';
|
|
3
|
-
export * from './barsa-dialog.service';
|
|
4
|
-
export * from './dynamic-component.service';
|
|
5
|
-
export * from './form-panel.service';
|
|
6
|
-
export * from './form.service';
|
|
7
|
-
export * from './container.service';
|
|
8
|
-
export * from './horizontal-layout.service';
|
|
9
|
-
export * from './layout.service';
|
|
10
|
-
export * from './log.service';
|
|
11
|
-
export * from './portal.service';
|
|
12
|
-
export * from './ui.service';
|
|
13
|
-
export * from './ulvmain.service';
|
|
14
|
-
export * from './upload.service';
|
|
15
|
-
export * from './network-status.service';
|
|
16
|
-
export * from './audio-recording.service';
|
|
17
|
-
export * from './video-recording.service';
|
|
18
|
-
export * from './local-storage.service';
|
|
19
|
-
export * from './indexeddb.service';
|
|
20
|
-
export * from './barsa-storage.service';
|
|
21
|
-
export * from './prompt-update.service';
|
|
22
|
-
export * from './notification.service';
|
|
23
|
-
export * from './notification-popup.service';
|
|
24
|
-
export * from './notification-sw.service';
|
|
25
|
-
export * from './column.service';
|
|
26
|
-
export * from './service-worker-communication.service';
|
|
27
|
-
export * from './save-scoll-position.service';
|
|
28
|
-
export * from './routing.service';
|
|
29
|
-
export * from './groupby.service';
|
|
30
|
-
export * from './layout-main-content.service';
|
|
31
|
-
export * from './tabpage.service';
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1ub3Zpbi1yYXktY29yZS9zcmMvbGliL3NlcnZpY2VzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyx3Q0FBd0MsQ0FBQztBQUN2RCxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsbUJBQW1CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2FwaS5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9icmVhZGNydW1iLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2JhcnNhLWRpYWxvZy5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9keW5hbWljLWNvbXBvbmVudC5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9mb3JtLXBhbmVsLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2Zvcm0uc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vY29udGFpbmVyLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2hvcml6b250YWwtbGF5b3V0LnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xheW91dC5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9sb2cuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vcG9ydGFsLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL3VpLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL3Vsdm1haW4uc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vdXBsb2FkLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL25ldHdvcmstc3RhdHVzLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2F1ZGlvLXJlY29yZGluZy5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi92aWRlby1yZWNvcmRpbmcuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbG9jYWwtc3RvcmFnZS5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9pbmRleGVkZGIuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vYmFyc2Etc3RvcmFnZS5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9wcm9tcHQtdXBkYXRlLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL25vdGlmaWNhdGlvbi5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9ub3RpZmljYXRpb24tcG9wdXAuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbm90aWZpY2F0aW9uLXN3LnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2NvbHVtbi5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlLXdvcmtlci1jb21tdW5pY2F0aW9uLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL3NhdmUtc2NvbGwtcG9zaXRpb24uc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vcm91dGluZy5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9ncm91cGJ5LnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xheW91dC1tYWluLWNvbnRlbnQuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vdGFicGFnZS5zZXJ2aWNlJztcclxuIl19
|