@dignite-ng/expand.cms 2.0.0-rc.10 → 2.0.0-rc.12
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/config/cms-config.module.d.ts +8 -0
- package/config/{src/enums/index.ts → enums/index.d.ts} +1 -1
- package/config/enums/route-names.d.ts +7 -0
- package/config/index.d.ts +5 -0
- package/config/{src/providers/index.ts → providers/index.d.ts} +1 -1
- package/config/providers/route.provider.d.ts +9 -0
- package/config/{src/public-api.ts → public-api.d.ts} +3 -3
- package/esm2022/config/cms-config.module.mjs +19 -0
- package/esm2022/config/dignite-ng-expand.cms-config.mjs +5 -0
- package/esm2022/config/enums/index.mjs +2 -0
- package/esm2022/config/enums/route-names.mjs +9 -0
- package/esm2022/config/providers/index.mjs +2 -0
- package/esm2022/config/providers/route.provider.mjs +60 -0
- package/esm2022/config/public-api.mjs +4 -0
- package/esm2022/dignite-ng-expand.cms.mjs +5 -0
- package/esm2022/lib/cms-routing.module.mjs +94 -0
- package/esm2022/lib/cms.module.mjs +146 -0
- package/esm2022/lib/components/admin/entries/create-or-edit-entries.component.mjs +226 -0
- package/esm2022/lib/components/admin/entries/create-or-update-entry-input-base.mjs +25 -0
- package/esm2022/lib/components/admin/entries/create.component.mjs +136 -0
- package/esm2022/lib/components/admin/entries/edit.component.mjs +138 -0
- package/esm2022/lib/components/admin/entries/entries.component.mjs +367 -0
- package/esm2022/lib/components/admin/entries/index.mjs +5 -0
- package/esm2022/lib/components/admin/fields/create-field.component.mjs +87 -0
- package/esm2022/lib/components/admin/fields/create-or-edit-field.component.mjs +116 -0
- package/esm2022/lib/components/admin/fields/create-or-update-field-input-base.mjs +25 -0
- package/esm2022/lib/components/admin/fields/edit-field.component.mjs +109 -0
- package/esm2022/lib/components/admin/fields/field-group.component.mjs +131 -0
- package/esm2022/lib/components/admin/fields/fields.component.mjs +107 -0
- package/esm2022/lib/components/admin/fields/index.mjs +7 -0
- package/esm2022/lib/components/admin/index.mjs +4 -0
- package/esm2022/lib/components/admin/sections/create-or-edit-sections-modal.component.mjs +210 -0
- package/esm2022/lib/components/admin/sections/create-or-update-sections-input-base.mjs +22 -0
- package/esm2022/lib/components/admin/sections/entry-types/create-or-edit.-entry-type-input-base.mjs +47 -0
- package/esm2022/lib/components/admin/sections/entry-types/create-or-edit.component.mjs +423 -0
- package/esm2022/lib/components/admin/sections/entry-types/index.mjs +3 -0
- package/esm2022/lib/components/admin/sections/index.mjs +4 -0
- package/esm2022/lib/components/admin/sections/sections.component.mjs +138 -0
- package/esm2022/lib/components/dynamic-form/entry/entry-config.component.mjs +117 -0
- package/esm2022/lib/components/dynamic-form/entry/entry-config.mjs +18 -0
- package/esm2022/lib/components/dynamic-form/entry/entry-control.component.mjs +105 -0
- package/esm2022/lib/components/dynamic-form/entry/entry-view.component.mjs +60 -0
- package/esm2022/lib/components/dynamic-form/entry/index.mjs +4 -0
- package/esm2022/lib/components/dynamic-form/form-control-group.mjs +34 -0
- package/esm2022/lib/components/dynamic-form/index.mjs +5 -0
- package/esm2022/lib/components/dynamic-form/matrix/index.mjs +4 -0
- package/esm2022/lib/components/dynamic-form/matrix/matrix-config.component.mjs +219 -0
- package/esm2022/lib/components/dynamic-form/matrix/matrix-config.mjs +50 -0
- package/esm2022/lib/components/dynamic-form/matrix/matrix-control.component.mjs +108 -0
- package/esm2022/lib/components/dynamic-form/matrix/matrix-view.component.mjs +40 -0
- package/esm2022/lib/components/dynamic-form/table/index.mjs +4 -0
- package/esm2022/lib/components/dynamic-form/table/table-config.component.mjs +158 -0
- package/esm2022/lib/components/dynamic-form/table/table-config.mjs +38 -0
- package/esm2022/lib/components/dynamic-form/table/table-control.component.mjs +118 -0
- package/esm2022/lib/components/dynamic-form/table/table-view.component.mjs +40 -0
- package/esm2022/lib/components/index.mjs +3 -0
- package/esm2022/lib/constants/styles.mjs +19 -0
- package/esm2022/lib/enums/ecms-component.mjs +13 -0
- package/esm2022/lib/enums/index.mjs +2 -0
- package/esm2022/lib/proxy/dignite/abp/data/models.mjs +2 -0
- package/esm2022/lib/proxy/dignite/abp/regionalization-management/index.mjs +3 -0
- package/esm2022/lib/proxy/dignite/abp/regionalization-management/models.mjs +2 -0
- package/esm2022/lib/proxy/dignite/abp/regionalization-management/regionalization.service.mjs +27 -0
- package/esm2022/lib/proxy/dignite/cms/admin/dynamic-forms/form-admin.service.mjs +22 -0
- package/esm2022/lib/proxy/dignite/cms/admin/dynamic-forms/index.mjs +3 -0
- package/esm2022/lib/proxy/dignite/cms/admin/dynamic-forms/models.mjs +2 -0
- package/esm2022/lib/proxy/dignite/cms/admin/entries/entry-admin.service.mjs +70 -0
- package/esm2022/lib/proxy/dignite/cms/admin/entries/index.mjs +3 -0
- package/esm2022/lib/proxy/dignite/cms/admin/entries/models.mjs +2 -0
- package/esm2022/lib/proxy/dignite/cms/admin/fields/field-admin.service.mjs +45 -0
- package/esm2022/lib/proxy/dignite/cms/admin/fields/field-group-admin.service.mjs +41 -0
- package/esm2022/lib/proxy/dignite/cms/admin/fields/index.mjs +4 -0
- package/esm2022/lib/proxy/dignite/cms/admin/fields/models.mjs +2 -0
- package/esm2022/lib/proxy/dignite/cms/admin/sections/entry-type-admin.service.mjs +41 -0
- package/esm2022/lib/proxy/dignite/cms/admin/sections/index.mjs +4 -0
- package/esm2022/lib/proxy/dignite/cms/admin/sections/models.mjs +2 -0
- package/esm2022/lib/proxy/dignite/cms/admin/sections/section-admin.service.mjs +51 -0
- package/esm2022/lib/proxy/dignite/cms/entries/entry-status.enum.mjs +8 -0
- package/esm2022/lib/proxy/dignite/cms/entries/index.mjs +2 -0
- package/esm2022/lib/proxy/dignite/cms/fields/models.mjs +2 -0
- package/esm2022/lib/proxy/dignite/cms/sections/index.mjs +3 -0
- package/esm2022/lib/proxy/dignite/cms/sections/models.mjs +2 -0
- package/esm2022/lib/proxy/dignite/cms/sections/section-type.enum.mjs +9 -0
- package/esm2022/lib/proxy/volo/cms-kit/users/models.mjs +2 -0
- package/esm2022/lib/resolvers/extensions-props-action-token.resolver.mjs +136 -0
- package/esm2022/lib/resolvers/page-default-toolbar-actions.mjs +160 -0
- package/esm2022/lib/resolvers/table-default-entity-actions.mjs +28 -0
- package/esm2022/lib/resolvers/table-default-entity-props.mjs +53 -0
- package/esm2022/lib/services/appent-content.mjs +15 -0
- package/esm2022/lib/services/cms-api.service.mjs +93 -0
- package/esm2022/lib/services/cms.service.mjs +21 -0
- package/esm2022/lib/services/field-abstracts.service.mjs +42 -0
- package/esm2022/lib/services/form-controls.service.mjs +40 -0
- package/esm2022/lib/services/index.mjs +4 -0
- package/esm2022/public-api.mjs +7 -0
- package/fesm2022/dignite-ng-expand.cms-config.mjs +92 -0
- package/fesm2022/dignite-ng-expand.cms-config.mjs.map +1 -0
- package/fesm2022/dignite-ng-expand.cms.mjs +4250 -0
- package/fesm2022/dignite-ng-expand.cms.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/cms-routing.module.d.ts +7 -0
- package/lib/cms.module.d.ts +40 -0
- package/lib/components/admin/entries/create-or-edit-entries.component.d.ts +63 -0
- package/lib/components/admin/entries/create-or-update-entry-input-base.d.ts +23 -0
- package/lib/components/admin/entries/create.component.d.ts +50 -0
- package/lib/components/admin/entries/edit.component.d.ts +53 -0
- package/lib/components/admin/entries/entries.component.d.ts +101 -0
- package/lib/components/admin/entries/index.d.ts +4 -0
- package/lib/components/admin/fields/create-field.component.d.ts +37 -0
- package/lib/components/admin/fields/create-or-edit-field.component.d.ts +37 -0
- package/lib/components/admin/fields/create-or-update-field-input-base.d.ts +16 -0
- package/lib/components/admin/fields/edit-field.component.d.ts +46 -0
- package/lib/components/admin/fields/field-group.component.d.ts +58 -0
- package/lib/components/admin/fields/fields.component.d.ts +35 -0
- package/lib/components/admin/fields/index.d.ts +6 -0
- package/lib/components/admin/index.d.ts +3 -0
- package/lib/components/admin/sections/create-or-edit-sections-modal.component.d.ts +49 -0
- package/lib/components/admin/sections/create-or-update-sections-input-base.d.ts +20 -0
- package/lib/components/admin/sections/entry-types/create-or-edit.-entry-type-input-base.d.ts +28 -0
- package/lib/components/admin/sections/entry-types/create-or-edit.component.d.ts +147 -0
- package/lib/components/admin/sections/entry-types/index.d.ts +2 -0
- package/lib/components/admin/sections/index.d.ts +3 -0
- package/lib/components/admin/sections/sections.component.d.ts +46 -0
- package/lib/components/dynamic-form/entry/entry-config.component.d.ts +40 -0
- package/lib/components/dynamic-form/entry/entry-config.d.ts +9 -0
- package/lib/components/dynamic-form/entry/entry-control.component.d.ts +36 -0
- package/lib/components/dynamic-form/entry/entry-view.component.d.ts +22 -0
- package/lib/components/dynamic-form/entry/index.d.ts +3 -0
- package/lib/components/dynamic-form/form-control-group.d.ts +4 -0
- package/lib/components/dynamic-form/index.d.ts +4 -0
- package/lib/components/dynamic-form/matrix/index.d.ts +3 -0
- package/lib/components/dynamic-form/matrix/matrix-config.component.d.ts +74 -0
- package/lib/components/dynamic-form/matrix/matrix-config.d.ts +24 -0
- package/lib/components/dynamic-form/matrix/matrix-control.component.d.ts +42 -0
- package/lib/components/dynamic-form/matrix/matrix-view.component.d.ts +17 -0
- package/lib/components/dynamic-form/table/index.d.ts +3 -0
- package/lib/components/dynamic-form/table/table-config.component.d.ts +59 -0
- package/lib/components/dynamic-form/table/table-config.d.ts +18 -0
- package/lib/components/dynamic-form/table/table-control.component.d.ts +42 -0
- package/lib/components/dynamic-form/table/table-view.component.d.ts +17 -0
- package/lib/components/index.d.ts +2 -0
- package/lib/constants/styles.d.ts +2 -0
- package/lib/enums/ecms-component.d.ts +11 -0
- package/lib/enums/index.d.ts +1 -0
- package/lib/proxy/dignite/abp/data/models.d.ts +3 -0
- package/lib/proxy/dignite/abp/regionalization-management/models.d.ts +8 -0
- package/lib/proxy/dignite/abp/regionalization-management/regionalization.service.d.ts +12 -0
- package/lib/proxy/dignite/cms/admin/dynamic-forms/form-admin.service.d.ts +12 -0
- package/lib/proxy/dignite/cms/admin/dynamic-forms/models.d.ts +5 -0
- package/lib/proxy/dignite/cms/admin/entries/entry-admin.service.d.ts +22 -0
- package/lib/proxy/dignite/cms/admin/entries/models.d.ts +61 -0
- package/lib/proxy/dignite/cms/admin/fields/field-admin.service.d.ts +17 -0
- package/lib/proxy/dignite/cms/admin/fields/field-group-admin.service.d.ts +16 -0
- package/{src/lib/proxy/dignite/cms/admin/fields/models.ts → lib/proxy/dignite/cms/admin/fields/models.d.ts} +34 -42
- package/lib/proxy/dignite/cms/admin/sections/entry-type-admin.service.d.ts +15 -0
- package/{src/lib/proxy/dignite/cms/admin/sections/models.ts → lib/proxy/dignite/cms/admin/sections/models.d.ts} +68 -82
- package/lib/proxy/dignite/cms/admin/sections/section-admin.service.d.ts +18 -0
- package/lib/proxy/dignite/cms/entries/entry-status.enum.d.ts +5 -0
- package/lib/proxy/dignite/cms/fields/models.d.ts +8 -0
- package/lib/proxy/dignite/cms/sections/models.d.ts +13 -0
- package/lib/proxy/dignite/cms/sections/section-type.enum.d.ts +6 -0
- package/{src/lib/proxy/volo/cms-kit/users/models.ts → lib/proxy/volo/cms-kit/users/models.d.ts} +7 -8
- package/lib/resolvers/extensions-props-action-token.resolver.d.ts +75 -0
- package/lib/resolvers/page-default-toolbar-actions.d.ts +18 -0
- package/lib/resolvers/table-default-entity-actions.d.ts +5 -0
- package/lib/resolvers/table-default-entity-props.d.ts +5 -0
- package/lib/services/appent-content.d.ts +1 -0
- package/lib/services/cms-api.service.d.ts +23 -0
- package/lib/services/cms.service.d.ts +10 -0
- package/lib/services/field-abstracts.service.d.ts +19 -0
- package/lib/services/form-controls.service.d.ts +16 -0
- package/lib/services/index.d.ts +3 -0
- package/package.json +22 -7
- package/{src/public-api.ts → public-api.d.ts} +3 -7
- package/config/ng-package.json +0 -6
- package/config/src/cms-config.module.ts +0 -13
- package/config/src/enums/route-names.ts +0 -7
- package/config/src/providers/route.provider.ts +0 -68
- package/ng-package.json +0 -10
- package/src/lib/cms-routing.module.ts +0 -102
- package/src/lib/cms.module.ts +0 -113
- package/src/lib/components/admin/entries/create-or-edit-entries.component.html +0 -137
- package/src/lib/components/admin/entries/create-or-edit-entries.component.scss +0 -0
- package/src/lib/components/admin/entries/create-or-edit-entries.component.spec.ts +0 -21
- package/src/lib/components/admin/entries/create-or-edit-entries.component.ts +0 -216
- package/src/lib/components/admin/entries/create-or-update-entry-input-base.ts +0 -26
- package/src/lib/components/admin/entries/create.component.html +0 -16
- package/src/lib/components/admin/entries/create.component.scss +0 -0
- package/src/lib/components/admin/entries/create.component.spec.ts +0 -21
- package/src/lib/components/admin/entries/create.component.ts +0 -130
- package/src/lib/components/admin/entries/edit.component.html +0 -9
- package/src/lib/components/admin/entries/edit.component.scss +0 -0
- package/src/lib/components/admin/entries/edit.component.spec.ts +0 -21
- package/src/lib/components/admin/entries/edit.component.ts +0 -134
- package/src/lib/components/admin/entries/entries.component.html +0 -225
- package/src/lib/components/admin/entries/entries.component.scss +0 -109
- package/src/lib/components/admin/entries/entries.component.spec.ts +0 -21
- package/src/lib/components/admin/entries/entries.component.ts +0 -394
- package/src/lib/components/admin/entries/index.ts +0 -4
- package/src/lib/components/admin/fields/create-field.component.html +0 -12
- package/src/lib/components/admin/fields/create-field.component.scss +0 -1
- package/src/lib/components/admin/fields/create-field.component.spec.ts +0 -21
- package/src/lib/components/admin/fields/create-field.component.ts +0 -85
- package/src/lib/components/admin/fields/create-or-edit-field.component.html +0 -39
- package/src/lib/components/admin/fields/create-or-edit-field.component.scss +0 -0
- package/src/lib/components/admin/fields/create-or-edit-field.component.spec.ts +0 -21
- package/src/lib/components/admin/fields/create-or-edit-field.component.ts +0 -140
- package/src/lib/components/admin/fields/create-or-update-field-input-base.ts +0 -33
- package/src/lib/components/admin/fields/edit-field.component.html +0 -14
- package/src/lib/components/admin/fields/edit-field.component.scss +0 -0
- package/src/lib/components/admin/fields/edit-field.component.spec.ts +0 -21
- package/src/lib/components/admin/fields/edit-field.component.ts +0 -112
- package/src/lib/components/admin/fields/field-group.component.html +0 -69
- package/src/lib/components/admin/fields/field-group.component.scss +0 -0
- package/src/lib/components/admin/fields/field-group.component.spec.ts +0 -21
- package/src/lib/components/admin/fields/field-group.component.ts +0 -151
- package/src/lib/components/admin/fields/fields.component.html +0 -25
- package/src/lib/components/admin/fields/fields.component.scss +0 -1
- package/src/lib/components/admin/fields/fields.component.spec.ts +0 -21
- package/src/lib/components/admin/fields/fields.component.ts +0 -109
- package/src/lib/components/admin/fields/index.ts +0 -6
- package/src/lib/components/admin/index.ts +0 -3
- package/src/lib/components/admin/sections/create-or-edit-sections-modal.component.html +0 -81
- package/src/lib/components/admin/sections/create-or-edit-sections-modal.component.scss +0 -0
- package/src/lib/components/admin/sections/create-or-edit-sections-modal.component.spec.ts +0 -23
- package/src/lib/components/admin/sections/create-or-edit-sections-modal.component.ts +0 -239
- package/src/lib/components/admin/sections/create-or-update-sections-input-base.ts +0 -23
- package/src/lib/components/admin/sections/entry-types/create-or-edit.-entry-type-input-base.ts +0 -52
- package/src/lib/components/admin/sections/entry-types/create-or-edit.component.html +0 -195
- package/src/lib/components/admin/sections/entry-types/create-or-edit.component.scss +0 -1
- package/src/lib/components/admin/sections/entry-types/create-or-edit.component.spec.ts +0 -21
- package/src/lib/components/admin/sections/entry-types/create-or-edit.component.ts +0 -442
- package/src/lib/components/admin/sections/entry-types/index.ts +0 -2
- package/src/lib/components/admin/sections/index.ts +0 -3
- package/src/lib/components/admin/sections/sections.component.html +0 -189
- package/src/lib/components/admin/sections/sections.component.scss +0 -1
- package/src/lib/components/admin/sections/sections.component.spec.ts +0 -21
- package/src/lib/components/admin/sections/sections.component.ts +0 -136
- package/src/lib/components/dynamic-form/entry/entry-config.component.html +0 -26
- package/src/lib/components/dynamic-form/entry/entry-config.component.scss +0 -27
- package/src/lib/components/dynamic-form/entry/entry-config.component.spec.ts +0 -21
- package/src/lib/components/dynamic-form/entry/entry-config.component.ts +0 -119
- package/src/lib/components/dynamic-form/entry/entry-config.ts +0 -22
- package/src/lib/components/dynamic-form/entry/entry-control.component.html +0 -25
- package/src/lib/components/dynamic-form/entry/entry-control.component.scss +0 -35
- package/src/lib/components/dynamic-form/entry/entry-control.component.spec.ts +0 -21
- package/src/lib/components/dynamic-form/entry/entry-control.component.ts +0 -111
- package/src/lib/components/dynamic-form/entry/index.ts +0 -3
- package/src/lib/components/dynamic-form/form-control-group.ts +0 -27
- package/src/lib/components/dynamic-form/index.ts +0 -4
- package/src/lib/components/dynamic-form/matrix/index.ts +0 -3
- package/src/lib/components/dynamic-form/matrix/matrix-config.component.html +0 -148
- package/src/lib/components/dynamic-form/matrix/matrix-config.component.scss +0 -0
- package/src/lib/components/dynamic-form/matrix/matrix-config.component.spec.ts +0 -21
- package/src/lib/components/dynamic-form/matrix/matrix-config.component.ts +0 -244
- package/src/lib/components/dynamic-form/matrix/matrix-config.ts +0 -63
- package/src/lib/components/dynamic-form/matrix/matrix-control.component.html +0 -42
- package/src/lib/components/dynamic-form/matrix/matrix-control.component.scss +0 -0
- package/src/lib/components/dynamic-form/matrix/matrix-control.component.spec.ts +0 -21
- package/src/lib/components/dynamic-form/matrix/matrix-control.component.ts +0 -118
- package/src/lib/components/dynamic-form/table/index.ts +0 -3
- package/src/lib/components/dynamic-form/table/table-config.component.html +0 -85
- package/src/lib/components/dynamic-form/table/table-config.component.scss +0 -10
- package/src/lib/components/dynamic-form/table/table-config.component.spec.ts +0 -21
- package/src/lib/components/dynamic-form/table/table-config.component.ts +0 -177
- package/src/lib/components/dynamic-form/table/table-config.ts +0 -45
- package/src/lib/components/dynamic-form/table/table-control.component.html +0 -54
- package/src/lib/components/dynamic-form/table/table-control.component.scss +0 -1
- package/src/lib/components/dynamic-form/table/table-control.component.spec.ts +0 -21
- package/src/lib/components/dynamic-form/table/table-control.component.ts +0 -127
- package/src/lib/components/index.ts +0 -2
- package/src/lib/constants/index.ts +0 -1
- package/src/lib/constants/styles.ts +0 -18
- package/src/lib/enums/ecms-component.ts +0 -11
- package/src/lib/enums/index.ts +0 -1
- package/src/lib/proxy/README.md +0 -17
- package/src/lib/proxy/dignite/abp/data/index.ts +0 -1
- package/src/lib/proxy/dignite/abp/data/models.ts +0 -4
- package/src/lib/proxy/dignite/abp/index.ts +0 -3
- package/src/lib/proxy/dignite/abp/regionalization-management/models.ts +0 -10
- package/src/lib/proxy/dignite/abp/regionalization-management/regionalization.service.ts +0 -29
- package/src/lib/proxy/dignite/cms/admin/dynamic-forms/form-admin.service.ts +0 -20
- package/src/lib/proxy/dignite/cms/admin/dynamic-forms/models.ts +0 -6
- package/src/lib/proxy/dignite/cms/admin/entries/entry-admin.service.ts +0 -109
- package/src/lib/proxy/dignite/cms/admin/entries/models.ts +0 -69
- package/src/lib/proxy/dignite/cms/admin/fields/field-admin.service.ts +0 -64
- package/src/lib/proxy/dignite/cms/admin/fields/field-group-admin.service.ts +0 -56
- package/src/lib/proxy/dignite/cms/admin/index.ts +0 -5
- package/src/lib/proxy/dignite/cms/admin/sections/entry-type-admin.service.ts +0 -55
- package/src/lib/proxy/dignite/cms/admin/sections/section-admin.service.ts +0 -74
- package/src/lib/proxy/dignite/cms/entries/entry-status.enum.ts +0 -8
- package/src/lib/proxy/dignite/cms/fields/index.ts +0 -1
- package/src/lib/proxy/dignite/cms/fields/models.ts +0 -9
- package/src/lib/proxy/dignite/cms/index.ts +0 -5
- package/src/lib/proxy/dignite/cms/sections/models.ts +0 -15
- package/src/lib/proxy/dignite/cms/sections/section-type.enum.ts +0 -9
- package/src/lib/proxy/dignite/index.ts +0 -3
- package/src/lib/proxy/generate-proxy.json +0 -54593
- package/src/lib/proxy/index.ts +0 -3
- package/src/lib/proxy/volo/cms-kit/index.ts +0 -2
- package/src/lib/proxy/volo/cms-kit/users/index.ts +0 -1
- package/src/lib/proxy/volo/index.ts +0 -2
- package/src/lib/resolvers/extensions-props-action-token.resolver.ts +0 -182
- package/src/lib/resolvers/page-default-toolbar-actions.ts +0 -173
- package/src/lib/resolvers/table-default-entity-actions.ts +0 -29
- package/src/lib/resolvers/table-default-entity-props.ts +0 -62
- package/src/lib/services/appent-content.ts +0 -13
- package/src/lib/services/cms-api.service.ts +0 -90
- package/src/lib/services/cms.service.ts +0 -18
- package/src/lib/services/field-abstracts.service.ts +0 -39
- package/src/lib/services/index.ts +0 -3
- package/src/lib/services/validator.ts +0 -10
- package/src/test.ts +0 -26
- package/tsconfig.lib.json +0 -16
- package/tsconfig.lib.prod.json +0 -10
- package/tsconfig.spec.json +0 -17
- /package/{src/lib/proxy/dignite/abp/regionalization-management/index.ts → lib/proxy/dignite/abp/regionalization-management/index.d.ts} +0 -0
- /package/{src/lib/proxy/dignite/cms/admin/dynamic-forms/index.ts → lib/proxy/dignite/cms/admin/dynamic-forms/index.d.ts} +0 -0
- /package/{src/lib/proxy/dignite/cms/admin/entries/index.ts → lib/proxy/dignite/cms/admin/entries/index.d.ts} +0 -0
- /package/{src/lib/proxy/dignite/cms/admin/fields/index.ts → lib/proxy/dignite/cms/admin/fields/index.d.ts} +0 -0
- /package/{src/lib/proxy/dignite/cms/admin/sections/index.ts → lib/proxy/dignite/cms/admin/sections/index.d.ts} +0 -0
- /package/{src/lib/proxy/dignite/cms/entries/index.ts → lib/proxy/dignite/cms/entries/index.d.ts} +0 -0
- /package/{src/lib/proxy/dignite/cms/sections/index.ts → lib/proxy/dignite/cms/sections/index.d.ts} +0 -0
|
@@ -0,0 +1,423 @@
|
|
|
1
|
+
import { EXTENSIONS_IDENTIFIER } from '@abp/ng.components/extensible';
|
|
2
|
+
import { Component, inject, ViewChild } from '@angular/core';
|
|
3
|
+
import { FormBuilder } from '@angular/forms';
|
|
4
|
+
import { CreateOrEditEntryTypeInputBase, fieldTabsBase, fieldsBase, } from './create-or-edit.-entry-type-input-base';
|
|
5
|
+
import { ECmsComponent } from '../../../../enums';
|
|
6
|
+
import { ValidatorsService } from '@dignite-ng/expand.core';
|
|
7
|
+
import { UpdateListService } from '@dignite-ng/expand.core';
|
|
8
|
+
import { finalize } from 'rxjs';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
import * as i1 from "@abp/ng.theme.shared";
|
|
11
|
+
import * as i2 from "@angular/common";
|
|
12
|
+
import * as i3 from "@angular/router";
|
|
13
|
+
import * as i4 from "../../../../proxy/dignite/cms/admin/fields";
|
|
14
|
+
import * as i5 from "../../../../proxy/dignite/cms/admin/sections";
|
|
15
|
+
import * as i6 from "@abp/ng.core";
|
|
16
|
+
import * as i7 from "../../../../services";
|
|
17
|
+
import * as i8 from "../../../../services/form-controls.service";
|
|
18
|
+
import * as i9 from "@angular/forms";
|
|
19
|
+
import * as i10 from "@ngx-validate/core";
|
|
20
|
+
import * as i11 from "@ng-bootstrap/ng-bootstrap";
|
|
21
|
+
import * as i12 from "@abp/ng.components/page";
|
|
22
|
+
export class CreateOrEditComponent {
|
|
23
|
+
constructor(toaster, _location, route, _FieldGroupAdminService, _FieldAdminService, _EntryTypeAdminService, _LocalizationService, _CmsApiService, _FormControlsService) {
|
|
24
|
+
this.toaster = toaster;
|
|
25
|
+
this._location = _location;
|
|
26
|
+
this.route = route;
|
|
27
|
+
this._FieldGroupAdminService = _FieldGroupAdminService;
|
|
28
|
+
this._FieldAdminService = _FieldAdminService;
|
|
29
|
+
this._EntryTypeAdminService = _EntryTypeAdminService;
|
|
30
|
+
this._LocalizationService = _LocalizationService;
|
|
31
|
+
this._CmsApiService = _CmsApiService;
|
|
32
|
+
this._FormControlsService = _FormControlsService;
|
|
33
|
+
this.fb = inject(FormBuilder);
|
|
34
|
+
this._UpdateListService = inject(UpdateListService);
|
|
35
|
+
/**表单实体 */
|
|
36
|
+
this.newEntity = this.fb.group(new CreateOrEditEntryTypeInputBase());
|
|
37
|
+
/**版块id */
|
|
38
|
+
this.sectionId = '';
|
|
39
|
+
/**条目类型id */
|
|
40
|
+
this.entryTypesId = '';
|
|
41
|
+
/**需要查询的动态表单类型 */
|
|
42
|
+
this.enableSearchTypeList = [];
|
|
43
|
+
/**不需要展示的动态表单类型 */
|
|
44
|
+
this.disableshowinTypeList = [];
|
|
45
|
+
/**
|
|
46
|
+
* 拖拽 功能*/
|
|
47
|
+
/**数据源 */
|
|
48
|
+
/**数据源-字段分组数据-包含字段数据 fields */
|
|
49
|
+
this.fieldGroupList = [];
|
|
50
|
+
/**数据源-所有字段列表 */
|
|
51
|
+
this.fieldList = [];
|
|
52
|
+
/**目标源 结果*/
|
|
53
|
+
this.resultSource = [];
|
|
54
|
+
/**来自数据源的集合,用于从目标源拖回数据源时的判断,与取值 */
|
|
55
|
+
this.formRightGroup = [];
|
|
56
|
+
this._ValidatorsService = inject(ValidatorsService);
|
|
57
|
+
/**表单验证状态
|
|
58
|
+
* {
|
|
59
|
+
* title:true,
|
|
60
|
+
* }
|
|
61
|
+
*/
|
|
62
|
+
this.formValidation = '';
|
|
63
|
+
this.isSubmit = false;
|
|
64
|
+
/**模态框状态 */
|
|
65
|
+
this.visibleTabsOpen = false;
|
|
66
|
+
/**是否是忙碌状态 */
|
|
67
|
+
this.modalBusy = false;
|
|
68
|
+
/**正在选中的nav */
|
|
69
|
+
this.navActive = 0;
|
|
70
|
+
/**编辑字段模态框状态 */
|
|
71
|
+
this.visibleEditFieldOpen = false;
|
|
72
|
+
this.isShowInList = true;
|
|
73
|
+
this.isEnableSearch = true;
|
|
74
|
+
}
|
|
75
|
+
get fieldTabs() {
|
|
76
|
+
return this.newEntity?.get('fieldTabs');
|
|
77
|
+
}
|
|
78
|
+
/**触发提交按钮 */
|
|
79
|
+
submitclickBtn() {
|
|
80
|
+
this.submitclick.nativeElement.click();
|
|
81
|
+
}
|
|
82
|
+
async ngOnInit() {
|
|
83
|
+
let sectionId = this.route.snapshot.params.sectionsId;
|
|
84
|
+
this.entryTypesId = this.route.snapshot.params.entryTypesId || '';
|
|
85
|
+
// this.enableSearchTypeList=await this._FormControlsService.getEnableSearchTypeList();
|
|
86
|
+
// this.disableshowinTypeList= this._FormControlsService.getdisableshowinTypeList();
|
|
87
|
+
console.log(this.enableSearchTypeList, 'enableSearchTypeList', this.disableshowinTypeList);
|
|
88
|
+
if (sectionId) {
|
|
89
|
+
this.sectionId = sectionId;
|
|
90
|
+
this.addControlToFieldTabs();
|
|
91
|
+
this.getFieldGroup();
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**给fieldTabs添加新控件 */
|
|
95
|
+
addControlToFieldTabs(nameValue = '') {
|
|
96
|
+
const newFormGroup = this.fb.group(new fieldTabsBase({
|
|
97
|
+
name: this.fieldTabs.length === 0
|
|
98
|
+
? this._LocalizationService.instant(`Cms::FieldTab`)
|
|
99
|
+
: nameValue,
|
|
100
|
+
}));
|
|
101
|
+
this.fieldTabs.push(newFormGroup);
|
|
102
|
+
this.resultSource.push(newFormGroup.value);
|
|
103
|
+
this.navActive = this.resultSource.length - 1;
|
|
104
|
+
}
|
|
105
|
+
/**获取字段分组 */
|
|
106
|
+
getFieldGroup() {
|
|
107
|
+
this._FieldGroupAdminService.getList({}).subscribe(async (res) => {
|
|
108
|
+
let fieldList = await this.getFieldList();
|
|
109
|
+
let fieldGroupList = res.items;
|
|
110
|
+
fieldGroupList.unshift({
|
|
111
|
+
id: null,
|
|
112
|
+
name: 'UngroupedFields',
|
|
113
|
+
});
|
|
114
|
+
fieldGroupList.forEach((el, index) => {
|
|
115
|
+
el.fields = fieldList.filter(els => els.groupId === el.id);
|
|
116
|
+
});
|
|
117
|
+
this.fieldGroupList = fieldGroupList;
|
|
118
|
+
this.fieldList = this.deepClone(fieldList);
|
|
119
|
+
let entryTypesId = this.entryTypesId;
|
|
120
|
+
if (entryTypesId) {
|
|
121
|
+
this.entryTypesId = entryTypesId;
|
|
122
|
+
this.getEntryTypes();
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
/**获取条目类型详情 */
|
|
127
|
+
getEntryTypes() {
|
|
128
|
+
let fieldList = this.deepClone(this.fieldList);
|
|
129
|
+
this._EntryTypeAdminService.get(this.entryTypesId).subscribe(res => {
|
|
130
|
+
res.fieldTabs.forEach(el => {
|
|
131
|
+
el.fields.forEach((eld) => {
|
|
132
|
+
eld.id = eld.fieldId;
|
|
133
|
+
eld.groupId = fieldList.find(elfd => elfd.id == eld.fieldId).groupId;
|
|
134
|
+
this.formRightGroup.push(eld);
|
|
135
|
+
let fieldindex = fieldList.findIndex(elfl => elfl.id == eld.fieldId);
|
|
136
|
+
fieldList.splice(fieldindex, 1);
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
this.fieldGroupList.forEach((el, index) => {
|
|
140
|
+
el.fields = fieldList.filter(els => els.groupId === el.id);
|
|
141
|
+
});
|
|
142
|
+
this.newEntity?.patchValue(res);
|
|
143
|
+
this.entryTypesSelect = res;
|
|
144
|
+
this.resultSource = res.fieldTabs;
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* 深拷贝--方法
|
|
149
|
+
* $api.deepClone() */
|
|
150
|
+
deepClone(obj) {
|
|
151
|
+
if (typeof obj !== 'object' || obj === null)
|
|
152
|
+
return obj;
|
|
153
|
+
const result = Array.isArray(obj) ? [] : {};
|
|
154
|
+
for (let key in obj) {
|
|
155
|
+
if (obj.hasOwnProperty(key)) {
|
|
156
|
+
if (typeof obj[key] === 'object' && obj[key] !== null) {
|
|
157
|
+
if (obj[key] instanceof Date) {
|
|
158
|
+
result[key] = new Date(obj[key].getTime());
|
|
159
|
+
}
|
|
160
|
+
else if (obj[key] instanceof RegExp) {
|
|
161
|
+
result[key] = new RegExp(obj[key]);
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
result[key] = this.deepClone(obj[key]);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
result[key] = obj[key];
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
return result;
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
*
|
|
176
|
+
* @param nameValue 获取所有字段
|
|
177
|
+
*/
|
|
178
|
+
getFieldList() {
|
|
179
|
+
return new Promise((resolve, rejects) => {
|
|
180
|
+
this._FieldAdminService
|
|
181
|
+
.getList({
|
|
182
|
+
maxResultCount: 1000,
|
|
183
|
+
})
|
|
184
|
+
.subscribe((res) => {
|
|
185
|
+
res.items.forEach(el => {
|
|
186
|
+
el.required = false;
|
|
187
|
+
el.showInList = false;
|
|
188
|
+
el.enableSearch = false;
|
|
189
|
+
});
|
|
190
|
+
resolve(res.items);
|
|
191
|
+
});
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
/**从数据源开始拖拽 */
|
|
195
|
+
fromDataSourceDragStart(element, fieldIndex, groupIndex) {
|
|
196
|
+
this.fromDataSourceDragEl = element;
|
|
197
|
+
this.DataSourceFieldIndex = fieldIndex;
|
|
198
|
+
this.DataSourceGroupIndex = groupIndex;
|
|
199
|
+
this.fromResultSourceDragEl = undefined;
|
|
200
|
+
}
|
|
201
|
+
/**从目标源开始拖拽 */
|
|
202
|
+
fromResultSourceDragStart(element) {
|
|
203
|
+
this.fromResultSourceDragEl = element;
|
|
204
|
+
this.fromDataSourceDragEl = undefined;
|
|
205
|
+
this.DataSourceFieldIndex = undefined;
|
|
206
|
+
this.DataSourceGroupIndex = undefined;
|
|
207
|
+
}
|
|
208
|
+
/**拖拽到数据源时触发 */
|
|
209
|
+
dragToDataSourceDropped() {
|
|
210
|
+
//从数据源拖拽到数据源-排序
|
|
211
|
+
if (this.fromDataSourceDragEl) {
|
|
212
|
+
}
|
|
213
|
+
let _fromResultSourceDragEl = this.fromResultSourceDragEl;
|
|
214
|
+
let formRightGroup = this.deepClone(this.formRightGroup);
|
|
215
|
+
let fieldList = this.deepClone(this.fieldList);
|
|
216
|
+
if (_fromResultSourceDragEl) {
|
|
217
|
+
//移动
|
|
218
|
+
//从目标源拖拽到数据源
|
|
219
|
+
// 拖拽目标源的下标
|
|
220
|
+
let dragResultSourceIndex = this.resultSource[this.navActive].fields.findIndex(el => el.id == _fromResultSourceDragEl.id);
|
|
221
|
+
//删除目标源中的数据
|
|
222
|
+
this.resultSource[this.navActive].fields.splice(dragResultSourceIndex, 1);
|
|
223
|
+
formRightGroup.splice(formRightGroup.findIndex(el => el.id == _fromResultSourceDragEl.id), 1);
|
|
224
|
+
this.fieldGroupList.forEach(el => {
|
|
225
|
+
if (el.id == _fromResultSourceDragEl.groupId) {
|
|
226
|
+
const elFieldsAll = fieldList.filter(els => els.groupId === el.id);
|
|
227
|
+
el.fields = elFieldsAll.filter(item => !formRightGroup.some(itemB => item.id === itemB.id));
|
|
228
|
+
}
|
|
229
|
+
});
|
|
230
|
+
this.formRightGroup = formRightGroup;
|
|
231
|
+
}
|
|
232
|
+
this.setfieldTabsFrom();
|
|
233
|
+
}
|
|
234
|
+
/**拖拽到目标源时触发
|
|
235
|
+
*
|
|
236
|
+
*/
|
|
237
|
+
dragToResultSourceDropped(fieldTabstem, fieldTabsIndex) {
|
|
238
|
+
const _fromDataSourceDragEl = this.fromDataSourceDragEl;
|
|
239
|
+
//从数据源拖拽到目标源
|
|
240
|
+
if (_fromDataSourceDragEl) {
|
|
241
|
+
this.fieldGroupList[this.DataSourceGroupIndex || 0].fields.splice(this.DataSourceFieldIndex, 1);
|
|
242
|
+
this.resultSource[fieldTabsIndex].fields.push(_fromDataSourceDragEl);
|
|
243
|
+
this.formRightGroup.push(_fromDataSourceDragEl);
|
|
244
|
+
}
|
|
245
|
+
this.setfieldTabsFrom();
|
|
246
|
+
}
|
|
247
|
+
/** 从目标源拖拽到目标源*/
|
|
248
|
+
dragToResultSourceItemDropped(fieldsIndex) {
|
|
249
|
+
const _fromResultSourceDragEl = this.fromResultSourceDragEl;
|
|
250
|
+
if (_fromResultSourceDragEl) {
|
|
251
|
+
// 拖拽目标源的下标
|
|
252
|
+
let dragResultSourceIndex = this.resultSource[this.navActive].fields.findIndex(el => el.id == _fromResultSourceDragEl.id);
|
|
253
|
+
//删除目标源中的数据
|
|
254
|
+
this.resultSource[this.navActive].fields.splice(dragResultSourceIndex, 1);
|
|
255
|
+
this.resultSource[this.navActive].fields.splice(fieldsIndex, 0, _fromResultSourceDragEl);
|
|
256
|
+
}
|
|
257
|
+
this.setfieldTabsFrom();
|
|
258
|
+
}
|
|
259
|
+
/**设置formA表单 */
|
|
260
|
+
setfieldTabsFrom() {
|
|
261
|
+
let setArray = [];
|
|
262
|
+
this.resultSource.forEach(el => {
|
|
263
|
+
let fieldsArray = [];
|
|
264
|
+
el.fields.forEach(item => {
|
|
265
|
+
fieldsArray.push({
|
|
266
|
+
fieldId: item.id || item.fieldId,
|
|
267
|
+
displayName: item.displayName,
|
|
268
|
+
required: item?.required,
|
|
269
|
+
showInList: item?.showInList,
|
|
270
|
+
enableSearch: item?.enableSearch,
|
|
271
|
+
});
|
|
272
|
+
});
|
|
273
|
+
setArray.push({
|
|
274
|
+
name: el.name,
|
|
275
|
+
fields: fieldsArray,
|
|
276
|
+
});
|
|
277
|
+
});
|
|
278
|
+
this.newEntity?.patchValue({
|
|
279
|
+
fieldTabs: setArray,
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
/**保存表单 */
|
|
283
|
+
save() {
|
|
284
|
+
if (this.isSubmit)
|
|
285
|
+
return;
|
|
286
|
+
this.isSubmit = true;
|
|
287
|
+
let input = this.newEntity?.value;
|
|
288
|
+
this.formValidation = this._ValidatorsService.getFormValidationStatus(this.newEntity);
|
|
289
|
+
if (this._ValidatorsService.isCheckForm(this.formValidation, 'Cms'))
|
|
290
|
+
return this.isSubmit = false;
|
|
291
|
+
if (this.entryTypesSelect) {
|
|
292
|
+
this._EntryTypeAdminService.update(this.entryTypesSelect.id, input).pipe(finalize(() => {
|
|
293
|
+
this.isSubmit = false;
|
|
294
|
+
})).subscribe(res => {
|
|
295
|
+
this.toaster.success(this._LocalizationService.instant(`Cms::SavedSuccessfully`));
|
|
296
|
+
this._location.back();
|
|
297
|
+
this._UpdateListService.updateList();
|
|
298
|
+
});
|
|
299
|
+
return;
|
|
300
|
+
}
|
|
301
|
+
input.sectionId = this.sectionId;
|
|
302
|
+
this._EntryTypeAdminService.create(input).pipe(finalize(() => {
|
|
303
|
+
this.isSubmit = false;
|
|
304
|
+
})).subscribe(res => {
|
|
305
|
+
this.toaster.success(this._LocalizationService.instant(`Cms::SavedSuccessfully`));
|
|
306
|
+
this._location.back();
|
|
307
|
+
this._UpdateListService.updateList();
|
|
308
|
+
});
|
|
309
|
+
}
|
|
310
|
+
/**模态框状态改变回调 */
|
|
311
|
+
VisibleTabsChange(event) {
|
|
312
|
+
if (!event) {
|
|
313
|
+
this.editFieldTabsSelect = '';
|
|
314
|
+
this.formValidation = '';
|
|
315
|
+
return;
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
/**新建增加FieldTabs */
|
|
319
|
+
addFieldTabs() {
|
|
320
|
+
this.editFieldTabsFrom = this.fb.group(new fieldTabsBase());
|
|
321
|
+
this.visibleTabsOpen = true;
|
|
322
|
+
}
|
|
323
|
+
/**编辑FieldTabs */
|
|
324
|
+
editFieldTabs(item, i) {
|
|
325
|
+
this.editFieldTabsFrom = this.fb.group(new fieldTabsBase());
|
|
326
|
+
this.editFieldTabsFrom.patchValue({
|
|
327
|
+
name: item.name,
|
|
328
|
+
});
|
|
329
|
+
this.editFieldTabsSelect = item;
|
|
330
|
+
this.visibleTabsOpen = true;
|
|
331
|
+
this.newEditFieldTabsIndex = i;
|
|
332
|
+
}
|
|
333
|
+
/**保存编辑tabs表单 */
|
|
334
|
+
editFieldTabsSave() {
|
|
335
|
+
if (!this.editFieldTabsFrom.value.name) {
|
|
336
|
+
return;
|
|
337
|
+
}
|
|
338
|
+
//编辑
|
|
339
|
+
if (this.editFieldTabsSelect) {
|
|
340
|
+
this.resultSource[this.newEditFieldTabsIndex].name = this.editFieldTabsFrom.value.name;
|
|
341
|
+
this.navActive = this.newEditFieldTabsIndex;
|
|
342
|
+
}
|
|
343
|
+
else {
|
|
344
|
+
//新建
|
|
345
|
+
this.addControlToFieldTabs(this.editFieldTabsFrom.value.name);
|
|
346
|
+
}
|
|
347
|
+
this.visibleTabsOpen = false;
|
|
348
|
+
this.setfieldTabsFrom();
|
|
349
|
+
}
|
|
350
|
+
/**删除某个tabs表单 */
|
|
351
|
+
deleteFieldTabs(index) {
|
|
352
|
+
this.fieldTabs.removeAt(index);
|
|
353
|
+
this.resultSource.splice(index, 1);
|
|
354
|
+
}
|
|
355
|
+
/**编辑字段模态框状态状态改变回调 */
|
|
356
|
+
VisibleEditFieldChange(event) {
|
|
357
|
+
if (!event) {
|
|
358
|
+
this.EditFieldIndex = undefined;
|
|
359
|
+
return;
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
/**打开编辑字段模态框 */
|
|
363
|
+
EditFieldModalOpen(items, elIndex) {
|
|
364
|
+
this.visibleEditFieldOpen = true;
|
|
365
|
+
this.EditFieldIndex = elIndex;
|
|
366
|
+
this.editFieldFrom = this.fb.group(new fieldsBase());
|
|
367
|
+
let fieldsOptions = this.fieldTabs.value[this.navActive].fields[elIndex];
|
|
368
|
+
// console.log(fieldsOptions,'this.fieldTabs.value[this.navActive].fields[elIndex]')
|
|
369
|
+
// this.isShowInList = !this.disableshowinTypeList.includes(fieldsOptions.field.formControlName);
|
|
370
|
+
// this.isEnableSearch = this.enableSearchTypeList.includes(fieldsOptions.field.formControlName);
|
|
371
|
+
this.editFieldFrom.patchValue(fieldsOptions);
|
|
372
|
+
// this.disableshowinTypeList
|
|
373
|
+
}
|
|
374
|
+
/**保存编辑字段 */
|
|
375
|
+
editFieldSave() {
|
|
376
|
+
let input = this.editFieldFrom.value;
|
|
377
|
+
this.resultSource[this.navActive].fields[this.EditFieldIndex].displayName = input.displayName;
|
|
378
|
+
this.resultSource[this.navActive].fields[this.EditFieldIndex].required = input.required;
|
|
379
|
+
this.resultSource[this.navActive].fields[this.EditFieldIndex].showInList = input.showInList;
|
|
380
|
+
this.resultSource[this.navActive].fields[this.EditFieldIndex].enableSearch = input.enableSearch;
|
|
381
|
+
this.visibleEditFieldOpen = false;
|
|
382
|
+
this.setfieldTabsFrom();
|
|
383
|
+
}
|
|
384
|
+
/**name表单控件 */
|
|
385
|
+
get nameInput() {
|
|
386
|
+
return this.newEntity.get('name');
|
|
387
|
+
}
|
|
388
|
+
/**字段标签input失去标点生成字段名字 */
|
|
389
|
+
disPlayNameInputBlur(event) {
|
|
390
|
+
let value = event.target.value;
|
|
391
|
+
let pinyin = this._CmsApiService.chineseToPinyin(value);
|
|
392
|
+
let nameInput = this.nameInput;
|
|
393
|
+
if (nameInput.value)
|
|
394
|
+
return;
|
|
395
|
+
nameInput.patchValue(pinyin);
|
|
396
|
+
}
|
|
397
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: CreateOrEditComponent, deps: [{ token: i1.ToasterService }, { token: i2.Location }, { token: i3.ActivatedRoute }, { token: i4.FieldGroupAdminService }, { token: i4.FieldAdminService }, { token: i5.EntryTypeAdminService }, { token: i6.LocalizationService }, { token: i7.CmsApiService }, { token: i8.FormControlsService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
398
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.5", type: CreateOrEditComponent, selector: "cms-create-or-edit", providers: [
|
|
399
|
+
{
|
|
400
|
+
provide: EXTENSIONS_IDENTIFIER,
|
|
401
|
+
useValue: ECmsComponent.SectionsCreateOrEdit,
|
|
402
|
+
},
|
|
403
|
+
], viewQueries: [{ propertyName: "submitclick", first: true, predicate: ["submitclick"], descendants: true, static: true }, { propertyName: "editFieldTabsModalSubmitBtn", first: true, predicate: ["editFieldTabsModalSubmitBtn"], descendants: true }, { propertyName: "editFieldModalSubmitBtn", first: true, predicate: ["editFieldModalSubmitBtn"], descendants: true }], ngImport: i0, template: "<form class=\"row g-3 needs-validation\" [formGroup]=\"newEntity\" (keydown.enter)=\"$event.preventDefault()\" [class]=\"{'was-validated':formValidation}\" (submit)=\"save()\">\n <abp-page [title]=\"entryTypesId ? ('AbpUi::Edit' | abpLocalization):('Cms::New' | abpLocalization)\"\n [toolbar]=\"true\">\n <div class=\"create-or-edit-entry-type-page\">\n <div class=\"card\">\n <button type=\"submit\" style=\"display: none;\" #submitclick></button>\n <div class=\"card-body\">\n <div class=\"\">\n <div class=\"mb-3\">\n <label class=\"form-label\">{{'Cms::DisplayName' | abpLocalization}}</label>\n <input type=\"text\" class=\"form-control\" formControlName=\"displayName\"\n (blur)=\"disPlayNameInputBlur($event)\" placeholder=\"\" />\n </div>\n <div class=\"mb-3\">\n <label class=\"form-label\">{{'Cms::Name' | abpLocalization}}</label>\n <input type=\"text\" class=\"form-control\" formControlName=\"name\" placeholder=\"\" />\n </div>\n <div formArrayName=\"fieldTabs\">\n <div class=\"mb-3\">\n <label class=\"form-label\">{{'Cms::FieldLayout' | abpLocalization}}</label>\n <div class=\"container\">\n <div class=\"row\">\n <div class=\"col-sm-8\">\n <ul ngbNav #nav=\"ngbNav\" [(activeId)]=\"navActive\" class=\"nav nav-tabs\">\n <ng-container *ngFor=\"let item of resultSource; let i = index\">\n <li [ngbNavItem]=\"i\">\n <button type=\"button\" ngbDropdown ngbNavLink>\n {{ item.name }}\n <span class=\"ms-1\" (click.stop)=\"$event.stopPropagation()\"\n ngbDropdownToggle></span>\n <div ngbDropdownMenu style=\"z-index: 999;\">\n <li ngbDropdownItem type=\"button\"\n (click.stop)=\"editFieldTabs(item,i)\">\n <i class=\"fas fa-edit\"></i>\n {{'AbpUi::Edit' | abpLocalization}}\n </li>\n <li ngbDropdownItem *ngIf=\"resultSource.length !== 1\" type=\"button\"\n (click.stop)=\"deleteFieldTabs(i)\">\n <i class=\"fas fa-trash\"></i>\n {{'AbpUi::Delete' | abpLocalization}}\n </li>\n </div>\n </button>\n <ng-template ngbNavContent>\n <div class=\"p-2\" ondragover=\"event.preventDefault();\"\n (drop)=\"dragToResultSourceDropped(item,i)\" style=\"height: 100%;\">\n <p class=\"form-text text-muted\" *ngIf=\"item.fields.length === 0\">\n {{'Cms::DragAndDropFieldTips' | abpLocalization}}\n </p>\n <ul class=\"list-group\" style=\"height: 100%;\">\n <ng-container *ngFor=\"let el of item.fields; let iel = index\">\n <li draggable=\"true\" (dragstart)=\"fromResultSourceDragStart(el)\"\n (drop)=\"dragToResultSourceItemDropped(iel)\"\n class=\"list-group-item d-flex align-items-center justify-content-between py-1\"\n style=\"position: unset;\">\n {{ el.displayName }}\n <button class=\"p-0 btn btn-sm btn-light\"\n (click.stop)=\"EditFieldModalOpen(el,iel)\"\n type=\"button\"><i class=\"fas fa-wrench p-sm-1\"\n role=\"button\"></i></button>\n </li>\n </ng-container>\n </ul>\n\n </div>\n </ng-template>\n </li>\n </ng-container>\n <li class=\"nav-item\" role=\"presentation\">\n <button type=\"button\" class=\"nav-link\" (click.stop)=\"addFieldTabs()\">\n <i class=\"fas fa-plus-circle\"></i>\n {{'Cms::NewTab' | abpLocalization}}\n </button>\n </li>\n </ul>\n <div [ngbNavOutlet]=\"nav\" class=\"mt-2 bordernNavs p-0\"></div>\n </div>\n <div class=\"col-sm-4\">\n <div ngbAccordion #accordion=\"ngbAccordion\" ondragover=\"event.preventDefault();\"\n (drop)=\"dragToDataSourceDropped()\" style=\"min-height: 80px;\">\n <ng-container *ngFor=\"let item of fieldGroupList; let i = index\">\n <div [ngbAccordionItem]=\"item.name\" *ngIf=\"item.fields.length > 0\">\n <h2 ngbAccordionHeader>\n <button ngbAccordionButton>{{\n ('Cms::'+item.name) | abpLocalization }}</button>\n </h2>\n <div ngbAccordionCollapse>\n <div ngbAccordionBody>\n <ng-template>\n <ul class=\"list-group\">\n <ng-container\n *ngFor=\"let el of item.fields; let ii = index\">\n <li draggable=\"true\"\n (dragstart)=\"fromDataSourceDragStart(el,ii,i)\"\n class=\"list-group-item\">\n {{ el.displayName }}\n </li>\n </ng-container>\n </ul>\n </ng-template>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n\n </div>\n </div>\n\n\n </div>\n </abp-page>\n\n</form>\n\n<abp-modal [(visible)]=\"visibleTabsOpen\" [busy]=\"modalBusy\" (visibleChange)=\"VisibleTabsChange($event)\">\n <ng-template #abpHeader>\n <h3>{{ editFieldTabsSelect ? ('AbpUi::Edit' | abpLocalization):('Cms::New' | abpLocalization)}}</h3>22\n </ng-template>\n <ng-template #abpBody>\n <ng-template #loaderRef>\n <div class=\"text-center\"><i class=\"fa fa-pulse fa-spinner\" aria-hidden=\"true\"></i></div>\n </ng-template>\n <ng-container *ngIf=\"editFieldTabsFrom; else loaderRef\">\n <form class=\"sites-modal-form\" [formGroup]=\"editFieldTabsFrom\" (keydown.enter)=\"$event.preventDefault()\" [class]=\"{'was-validated':formValidation}\" (submit)=\"editFieldTabsSave()\">\n <button type=\"submit\" #editFieldTabsModalSubmitBtn style=\"display: none\"></button>\n <div class=\"mb-3\">\n <label class=\"form-label\">{{'Cms::Name' | abpLocalization}}</label>\n <input type=\"text\" class=\"form-control\" formControlName=\"name\" placeholder=\"\" />\n </div>\n </form>\n </ng-container>\n </ng-template>\n <ng-template #abpFooter>\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>{{'AbpUi::Close' | abpLocalization}}</button>\n <abp-button iconClass=\"fa fa-check\" \n (click)=\"editFieldTabsModalSubmitBtn.nativeElement.click()\">{{'AbpUi::Save' | abpLocalization}}</abp-button>\n </ng-template>\n</abp-modal>\n\n\n<abp-modal [(visible)]=\"visibleEditFieldOpen\" [busy]=\"modalBusy\" (visibleChange)=\"VisibleEditFieldChange($event)\">\n <ng-template #abpHeader>\n <h3>{{'AbpUi::Edit' | abpLocalization}}</h3>\n </ng-template>\n <ng-template #abpBody>\n <ng-template #loaderRef>\n <div class=\"text-center\"><i class=\"fa fa-pulse fa-spinner\" aria-hidden=\"true\"></i></div>\n </ng-template>\n <ng-container *ngIf=\"editFieldFrom; else loaderRef\">\n <form class=\"sites-modal-form\" [formGroup]=\"editFieldFrom\" (keydown.enter)=\"$event.preventDefault()\" (submit)=\"editFieldSave()\">\n <button type=\"submit\" #editFieldModalSubmitBtn style=\"display: none\"></button>\n <div class=\"mb-3\">\n <label class=\"form-label\">{{'Cms::DisplayName' | abpLocalization}}</label>\n <input type=\"text\" class=\"form-control\" formControlName=\"displayName\" placeholder=\"\" />\n </div>\n <div class=\"mb-3\">\n <div class=\"form-check form-check-inline\">\n <input class=\"form-check-input\" type=\"checkbox\" value=\"true\" formControlName=\"required\"\n id=\"required\" />\n <label class=\"form-check-label\" for=\"required\"> {{'Cms::Required' | abpLocalization}} </label>\n </div>\n </div>\n @if(isShowInList){\n <div class=\"mb-3\">\n <div class=\"form-check form-check-inline\">\n <input class=\"form-check-input\" type=\"checkbox\" value=\"true\" formControlName=\"showInList\"\n id=\"showInList\" />\n <label class=\"form-check-label\" for=\"showInList\"> {{'Cms::ShowInList' | abpLocalization}}\n </label>\n </div>\n </div>\n }\n @if(isEnableSearch){\n <div class=\"mb-3\">\n <div class=\"form-check form-check-inline\">\n <input class=\"form-check-input\" type=\"checkbox\" value=\"true\" formControlName=\"enableSearch\"\n id=\"enableSearch\" />\n <label class=\"form-check-label\" for=\"enableSearch\"> {{'Cms::EnableSearch' | abpLocalization}}\n </label>\n </div>\n </div>\n }\n </form>\n </ng-container>\n </ng-template>\n <ng-template #abpFooter>\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>{{'AbpUi::Close' | abpLocalization}}</button>\n <abp-button iconClass=\"fa fa-check\" [disabled]=\"!editFieldFrom.valid\"\n (click)=\"editFieldModalSubmitBtn.nativeElement.click()\">{{'AbpUi::Save' | abpLocalization}}</abp-button>\n </ng-template>\n</abp-modal>", styles: ["::ng-deep .create-or-edit-entry-type-page .dignite_page{height:calc(100vh - 125px);overflow:auto}::ng-deep .create-or-edit-entry-type-page .form-control,::ng-deep .create-or-edit-entry-type-page .form-select{padding:.475rem 1.25rem}::ng-deep .create-or-edit-entry-type-page .cursor-move{cursor:move}::ng-deep .create-or-edit-entry-type-page .bordernNavs{border:var(--bs-border-width) solid var(--lpx-border-color);padding-left:inherit;padding-right:inherit;height:calc(100% - 60px)}::ng-deep .create-or-edit-entry-type-page .tab-pane{height:100%}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i9.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i9.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i9.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i9.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i9.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i9.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "directive", type: i6.StopPropagationDirective, selector: "[click.stop]", outputs: ["click.stop"] }, { kind: "directive", type: i10.ValidationGroupDirective, selector: "[formGroup],[formGroupName]", exportAs: ["validationGroup"] }, { kind: "directive", type: i10.ValidationDirective, selector: "[formControl],[formControlName]", exportAs: ["validationDirective"] }, { kind: "component", type: i1.ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "component", type: i1.ModalComponent, selector: "abp-modal", inputs: ["visible", "busy", "options", "suppressUnsavedChangesWarning"], outputs: ["visibleChange", "init", "appear", "disappear"] }, { kind: "directive", type: i1.ModalCloseDirective, selector: "[abpClose]" }, { kind: "directive", type: i11.NgbNavContent, selector: "ng-template[ngbNavContent]" }, { kind: "directive", type: i11.NgbNav, selector: "[ngbNav]", inputs: ["activeId", "animation", "destroyOnHide", "orientation", "roles", "keyboard"], outputs: ["activeIdChange", "shown", "hidden", "navChange"], exportAs: ["ngbNav"] }, { kind: "directive", type: i11.NgbNavItem, selector: "[ngbNavItem]", inputs: ["destroyOnHide", "disabled", "domId", "ngbNavItem"], outputs: ["shown", "hidden"], exportAs: ["ngbNavItem"] }, { kind: "directive", type: i11.NgbNavItemRole, selector: "[ngbNavItem]:not(ng-container)" }, { kind: "directive", type: i11.NgbNavLinkButton, selector: "button[ngbNavLink]" }, { kind: "directive", type: i11.NgbNavLinkBase, selector: "[ngbNavLink]" }, { kind: "component", type: i11.NgbNavOutlet, selector: "[ngbNavOutlet]", inputs: ["paneRole", "ngbNavOutlet"] }, { kind: "directive", type: i11.NgbAccordionButton, selector: "button[ngbAccordionButton]" }, { kind: "directive", type: i11.NgbAccordionDirective, selector: "[ngbAccordion]", inputs: ["animation", "closeOthers", "destroyOnHide"], outputs: ["show", "shown", "hide", "hidden"], exportAs: ["ngbAccordion"] }, { kind: "directive", type: i11.NgbAccordionItem, selector: "[ngbAccordionItem]", inputs: ["ngbAccordionItem", "destroyOnHide", "disabled", "collapsed"], outputs: ["show", "shown", "hide", "hidden"], exportAs: ["ngbAccordionItem"] }, { kind: "directive", type: i11.NgbAccordionHeader, selector: "[ngbAccordionHeader]" }, { kind: "directive", type: i11.NgbAccordionBody, selector: "[ngbAccordionBody]" }, { kind: "directive", type: i11.NgbAccordionCollapse, selector: "[ngbAccordionCollapse]", exportAs: ["ngbAccordionCollapse"] }, { kind: "directive", type: i11.NgbDropdown, selector: "[ngbDropdown]", inputs: ["autoClose", "dropdownClass", "open", "placement", "popperOptions", "container", "display"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { kind: "directive", type: i11.NgbDropdownToggle, selector: "[ngbDropdownToggle]" }, { kind: "directive", type: i11.NgbDropdownMenu, selector: "[ngbDropdownMenu]" }, { kind: "directive", type: i11.NgbDropdownItem, selector: "[ngbDropdownItem]", inputs: ["tabindex", "disabled"] }, { kind: "component", type: i12.PageComponent, selector: "abp-page", inputs: ["title", "toolbar", "breadcrumb"] }, { kind: "pipe", type: i6.LocalizationPipe, name: "abpLocalization" }] }); }
|
|
404
|
+
}
|
|
405
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: CreateOrEditComponent, decorators: [{
|
|
406
|
+
type: Component,
|
|
407
|
+
args: [{ selector: 'cms-create-or-edit', providers: [
|
|
408
|
+
{
|
|
409
|
+
provide: EXTENSIONS_IDENTIFIER,
|
|
410
|
+
useValue: ECmsComponent.SectionsCreateOrEdit,
|
|
411
|
+
},
|
|
412
|
+
], template: "<form class=\"row g-3 needs-validation\" [formGroup]=\"newEntity\" (keydown.enter)=\"$event.preventDefault()\" [class]=\"{'was-validated':formValidation}\" (submit)=\"save()\">\n <abp-page [title]=\"entryTypesId ? ('AbpUi::Edit' | abpLocalization):('Cms::New' | abpLocalization)\"\n [toolbar]=\"true\">\n <div class=\"create-or-edit-entry-type-page\">\n <div class=\"card\">\n <button type=\"submit\" style=\"display: none;\" #submitclick></button>\n <div class=\"card-body\">\n <div class=\"\">\n <div class=\"mb-3\">\n <label class=\"form-label\">{{'Cms::DisplayName' | abpLocalization}}</label>\n <input type=\"text\" class=\"form-control\" formControlName=\"displayName\"\n (blur)=\"disPlayNameInputBlur($event)\" placeholder=\"\" />\n </div>\n <div class=\"mb-3\">\n <label class=\"form-label\">{{'Cms::Name' | abpLocalization}}</label>\n <input type=\"text\" class=\"form-control\" formControlName=\"name\" placeholder=\"\" />\n </div>\n <div formArrayName=\"fieldTabs\">\n <div class=\"mb-3\">\n <label class=\"form-label\">{{'Cms::FieldLayout' | abpLocalization}}</label>\n <div class=\"container\">\n <div class=\"row\">\n <div class=\"col-sm-8\">\n <ul ngbNav #nav=\"ngbNav\" [(activeId)]=\"navActive\" class=\"nav nav-tabs\">\n <ng-container *ngFor=\"let item of resultSource; let i = index\">\n <li [ngbNavItem]=\"i\">\n <button type=\"button\" ngbDropdown ngbNavLink>\n {{ item.name }}\n <span class=\"ms-1\" (click.stop)=\"$event.stopPropagation()\"\n ngbDropdownToggle></span>\n <div ngbDropdownMenu style=\"z-index: 999;\">\n <li ngbDropdownItem type=\"button\"\n (click.stop)=\"editFieldTabs(item,i)\">\n <i class=\"fas fa-edit\"></i>\n {{'AbpUi::Edit' | abpLocalization}}\n </li>\n <li ngbDropdownItem *ngIf=\"resultSource.length !== 1\" type=\"button\"\n (click.stop)=\"deleteFieldTabs(i)\">\n <i class=\"fas fa-trash\"></i>\n {{'AbpUi::Delete' | abpLocalization}}\n </li>\n </div>\n </button>\n <ng-template ngbNavContent>\n <div class=\"p-2\" ondragover=\"event.preventDefault();\"\n (drop)=\"dragToResultSourceDropped(item,i)\" style=\"height: 100%;\">\n <p class=\"form-text text-muted\" *ngIf=\"item.fields.length === 0\">\n {{'Cms::DragAndDropFieldTips' | abpLocalization}}\n </p>\n <ul class=\"list-group\" style=\"height: 100%;\">\n <ng-container *ngFor=\"let el of item.fields; let iel = index\">\n <li draggable=\"true\" (dragstart)=\"fromResultSourceDragStart(el)\"\n (drop)=\"dragToResultSourceItemDropped(iel)\"\n class=\"list-group-item d-flex align-items-center justify-content-between py-1\"\n style=\"position: unset;\">\n {{ el.displayName }}\n <button class=\"p-0 btn btn-sm btn-light\"\n (click.stop)=\"EditFieldModalOpen(el,iel)\"\n type=\"button\"><i class=\"fas fa-wrench p-sm-1\"\n role=\"button\"></i></button>\n </li>\n </ng-container>\n </ul>\n\n </div>\n </ng-template>\n </li>\n </ng-container>\n <li class=\"nav-item\" role=\"presentation\">\n <button type=\"button\" class=\"nav-link\" (click.stop)=\"addFieldTabs()\">\n <i class=\"fas fa-plus-circle\"></i>\n {{'Cms::NewTab' | abpLocalization}}\n </button>\n </li>\n </ul>\n <div [ngbNavOutlet]=\"nav\" class=\"mt-2 bordernNavs p-0\"></div>\n </div>\n <div class=\"col-sm-4\">\n <div ngbAccordion #accordion=\"ngbAccordion\" ondragover=\"event.preventDefault();\"\n (drop)=\"dragToDataSourceDropped()\" style=\"min-height: 80px;\">\n <ng-container *ngFor=\"let item of fieldGroupList; let i = index\">\n <div [ngbAccordionItem]=\"item.name\" *ngIf=\"item.fields.length > 0\">\n <h2 ngbAccordionHeader>\n <button ngbAccordionButton>{{\n ('Cms::'+item.name) | abpLocalization }}</button>\n </h2>\n <div ngbAccordionCollapse>\n <div ngbAccordionBody>\n <ng-template>\n <ul class=\"list-group\">\n <ng-container\n *ngFor=\"let el of item.fields; let ii = index\">\n <li draggable=\"true\"\n (dragstart)=\"fromDataSourceDragStart(el,ii,i)\"\n class=\"list-group-item\">\n {{ el.displayName }}\n </li>\n </ng-container>\n </ul>\n </ng-template>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n\n </div>\n </div>\n\n\n </div>\n </abp-page>\n\n</form>\n\n<abp-modal [(visible)]=\"visibleTabsOpen\" [busy]=\"modalBusy\" (visibleChange)=\"VisibleTabsChange($event)\">\n <ng-template #abpHeader>\n <h3>{{ editFieldTabsSelect ? ('AbpUi::Edit' | abpLocalization):('Cms::New' | abpLocalization)}}</h3>22\n </ng-template>\n <ng-template #abpBody>\n <ng-template #loaderRef>\n <div class=\"text-center\"><i class=\"fa fa-pulse fa-spinner\" aria-hidden=\"true\"></i></div>\n </ng-template>\n <ng-container *ngIf=\"editFieldTabsFrom; else loaderRef\">\n <form class=\"sites-modal-form\" [formGroup]=\"editFieldTabsFrom\" (keydown.enter)=\"$event.preventDefault()\" [class]=\"{'was-validated':formValidation}\" (submit)=\"editFieldTabsSave()\">\n <button type=\"submit\" #editFieldTabsModalSubmitBtn style=\"display: none\"></button>\n <div class=\"mb-3\">\n <label class=\"form-label\">{{'Cms::Name' | abpLocalization}}</label>\n <input type=\"text\" class=\"form-control\" formControlName=\"name\" placeholder=\"\" />\n </div>\n </form>\n </ng-container>\n </ng-template>\n <ng-template #abpFooter>\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>{{'AbpUi::Close' | abpLocalization}}</button>\n <abp-button iconClass=\"fa fa-check\" \n (click)=\"editFieldTabsModalSubmitBtn.nativeElement.click()\">{{'AbpUi::Save' | abpLocalization}}</abp-button>\n </ng-template>\n</abp-modal>\n\n\n<abp-modal [(visible)]=\"visibleEditFieldOpen\" [busy]=\"modalBusy\" (visibleChange)=\"VisibleEditFieldChange($event)\">\n <ng-template #abpHeader>\n <h3>{{'AbpUi::Edit' | abpLocalization}}</h3>\n </ng-template>\n <ng-template #abpBody>\n <ng-template #loaderRef>\n <div class=\"text-center\"><i class=\"fa fa-pulse fa-spinner\" aria-hidden=\"true\"></i></div>\n </ng-template>\n <ng-container *ngIf=\"editFieldFrom; else loaderRef\">\n <form class=\"sites-modal-form\" [formGroup]=\"editFieldFrom\" (keydown.enter)=\"$event.preventDefault()\" (submit)=\"editFieldSave()\">\n <button type=\"submit\" #editFieldModalSubmitBtn style=\"display: none\"></button>\n <div class=\"mb-3\">\n <label class=\"form-label\">{{'Cms::DisplayName' | abpLocalization}}</label>\n <input type=\"text\" class=\"form-control\" formControlName=\"displayName\" placeholder=\"\" />\n </div>\n <div class=\"mb-3\">\n <div class=\"form-check form-check-inline\">\n <input class=\"form-check-input\" type=\"checkbox\" value=\"true\" formControlName=\"required\"\n id=\"required\" />\n <label class=\"form-check-label\" for=\"required\"> {{'Cms::Required' | abpLocalization}} </label>\n </div>\n </div>\n @if(isShowInList){\n <div class=\"mb-3\">\n <div class=\"form-check form-check-inline\">\n <input class=\"form-check-input\" type=\"checkbox\" value=\"true\" formControlName=\"showInList\"\n id=\"showInList\" />\n <label class=\"form-check-label\" for=\"showInList\"> {{'Cms::ShowInList' | abpLocalization}}\n </label>\n </div>\n </div>\n }\n @if(isEnableSearch){\n <div class=\"mb-3\">\n <div class=\"form-check form-check-inline\">\n <input class=\"form-check-input\" type=\"checkbox\" value=\"true\" formControlName=\"enableSearch\"\n id=\"enableSearch\" />\n <label class=\"form-check-label\" for=\"enableSearch\"> {{'Cms::EnableSearch' | abpLocalization}}\n </label>\n </div>\n </div>\n }\n </form>\n </ng-container>\n </ng-template>\n <ng-template #abpFooter>\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>{{'AbpUi::Close' | abpLocalization}}</button>\n <abp-button iconClass=\"fa fa-check\" [disabled]=\"!editFieldFrom.valid\"\n (click)=\"editFieldModalSubmitBtn.nativeElement.click()\">{{'AbpUi::Save' | abpLocalization}}</abp-button>\n </ng-template>\n</abp-modal>", styles: ["::ng-deep .create-or-edit-entry-type-page .dignite_page{height:calc(100vh - 125px);overflow:auto}::ng-deep .create-or-edit-entry-type-page .form-control,::ng-deep .create-or-edit-entry-type-page .form-select{padding:.475rem 1.25rem}::ng-deep .create-or-edit-entry-type-page .cursor-move{cursor:move}::ng-deep .create-or-edit-entry-type-page .bordernNavs{border:var(--bs-border-width) solid var(--lpx-border-color);padding-left:inherit;padding-right:inherit;height:calc(100% - 60px)}::ng-deep .create-or-edit-entry-type-page .tab-pane{height:100%}\n"] }]
|
|
413
|
+
}], ctorParameters: () => [{ type: i1.ToasterService }, { type: i2.Location }, { type: i3.ActivatedRoute }, { type: i4.FieldGroupAdminService }, { type: i4.FieldAdminService }, { type: i5.EntryTypeAdminService }, { type: i6.LocalizationService }, { type: i7.CmsApiService }, { type: i8.FormControlsService }], propDecorators: { submitclick: [{
|
|
414
|
+
type: ViewChild,
|
|
415
|
+
args: ['submitclick', { static: true }]
|
|
416
|
+
}], editFieldTabsModalSubmitBtn: [{
|
|
417
|
+
type: ViewChild,
|
|
418
|
+
args: ['editFieldTabsModalSubmitBtn', { static: false }]
|
|
419
|
+
}], editFieldModalSubmitBtn: [{
|
|
420
|
+
type: ViewChild,
|
|
421
|
+
args: ['editFieldModalSubmitBtn', { static: false }]
|
|
422
|
+
}] } });
|
|
423
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLW9yLWVkaXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY21zL3NyYy9saWIvY29tcG9uZW50cy9hZG1pbi9zZWN0aW9ucy9lbnRyeS10eXBlcy9jcmVhdGUtb3ItZWRpdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbXMvc3JjL2xpYi9jb21wb25lbnRzL2FkbWluL3NlY3Rpb25zL2VudHJ5LXR5cGVzL2NyZWF0ZS1vci1lZGl0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBR3RFLE9BQU8sRUFBRSxTQUFTLEVBQWMsTUFBTSxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRixPQUFPLEVBQUUsV0FBVyxFQUF3QixNQUFNLGdCQUFnQixDQUFDO0FBR25FLE9BQU8sRUFDTCw4QkFBOEIsRUFDOUIsYUFBYSxFQUNiLFVBQVUsR0FDWCxNQUFNLHlDQUF5QyxDQUFDO0FBRWpELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7OztBQWVoQyxNQUFNLE9BQU8scUJBQXFCO0lBQ2hDLFlBQ1UsT0FBdUIsRUFDeEIsU0FBbUIsRUFDbEIsS0FBcUIsRUFDdEIsdUJBQStDLEVBQy9DLGtCQUFxQyxFQUNyQyxzQkFBNkMsRUFDN0Msb0JBQXlDLEVBQ3pDLGNBQTZCLEVBQzdCLG9CQUF5QztRQVJ4QyxZQUFPLEdBQVAsT0FBTyxDQUFnQjtR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Qzs4R0ExYVUscUJBQXFCO2tHQUFyQixxQkFBcUIsNkNBUHJCO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLHFCQUFxQjtnQkFDOUIsUUFBUSxFQUFFLGFBQWEsQ0FBQyxvQkFBb0I7YUFDN0M7U0FDRixzWUM3QkgseXZhQXNNWTs7MkZEdktDLHFCQUFxQjtrQkFYakMsU0FBUzsrQkFDRSxvQkFBb0IsYUFHbkI7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLHFCQUFxQjs0QkFDOUIsUUFBUSxFQUFFLGFBQWEsQ0FBQyxvQkFBb0I7eUJBQzdDO3FCQUNGO2dWQThCMkMsV0FBVztzQkFBdEQsU0FBUzt1QkFBQyxhQUFhLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQXdTMUMsMkJBQTJCO3NCQUQxQixTQUFTO3VCQUFDLDZCQUE2QixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkF3REYsdUJBQXVCO3NCQUEvRSxTQUFTO3VCQUFDLHlCQUF5QixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVYVEVOU0lPTlNfSURFTlRJRklFUiB9IGZyb20gJ0BhYnAvbmcuY29tcG9uZW50cy9leHRlbnNpYmxlJztcbmltcG9ydCB7IExvY2FsaXphdGlvblNlcnZpY2UgfSBmcm9tICdAYWJwL25nLmNvcmUnO1xuaW1wb3J0IHsgVG9hc3RlclNlcnZpY2UgfSBmcm9tICdAYWJwL25nLnRoZW1lLnNoYXJlZCc7XG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIGluamVjdCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIEZvcm1BcnJheSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IENtc0FwaVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQge1xuICBDcmVhdGVPckVkaXRFbnRyeVR5cGVJbnB1dEJhc2UsXG4gIGZpZWxkVGFic0Jhc2UsXG4gIGZpZWxkc0Jhc2UsXG59IGZyb20gJy4vY3JlYXRlLW9yLWVkaXQuLWVudHJ5LXR5cGUtaW5wdXQtYmFzZSc7XG5pbXBvcnQgeyBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBFQ21zQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vZW51bXMnO1xuaW1wb3J0IHsgVmFsaWRhdG9yc1NlcnZpY2UgfSBmcm9tICdAZGlnbml0ZS1uZy9leHBhbmQuY29yZSc7XG5pbXBvcnQgeyBVcGRhdGVMaXN0U2VydmljZSB9IGZyb20gJ0BkaWduaXRlLW5nL2V4cGFuZC5jb3JlJztcbmltcG9ydCB7IGZpbmFsaXplIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGaWVsZEFkbWluU2VydmljZSwgRmllbGRHcm91cEFkbWluU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3Byb3h5L2RpZ25pdGUvY21zL2FkbWluL2ZpZWxkcyc7XG5pbXBvcnQgeyBFbnRyeVR5cGVBZG1pblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9wcm94eS9kaWduaXRlL2Ntcy9hZG1pbi9zZWN0aW9ucyc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvZm9ybS1jb250cm9scy5zZXJ2aWNlJztcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Ntcy1jcmVhdGUtb3ItZWRpdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jcmVhdGUtb3ItZWRpdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NyZWF0ZS1vci1lZGl0LmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IEVYVEVOU0lPTlNfSURFTlRJRklFUixcbiAgICAgIHVzZVZhbHVlOiBFQ21zQ29tcG9uZW50LlNlY3Rpb25zQ3JlYXRlT3JFZGl0LFxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIENyZWF0ZU9yRWRpdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgdG9hc3RlcjogVG9hc3RlclNlcnZpY2UsXG4gICAgcHVibGljIF9sb2NhdGlvbjogTG9jYXRpb24sXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHVibGljIF9GaWVsZEdyb3VwQWRtaW5TZXJ2aWNlOiBGaWVsZEdyb3VwQWRtaW5TZXJ2aWNlLFxuICAgIHB1YmxpYyBfRmllbGRBZG1pblNlcnZpY2U6IEZpZWxkQWRtaW5TZXJ2aWNlLFxuICAgIHB1YmxpYyBfRW50cnlUeXBlQWRtaW5TZXJ2aWNlOiBFbnRyeVR5cGVBZG1pblNlcnZpY2UsXG4gICAgcHVibGljIF9Mb2NhbGl6YXRpb25TZXJ2aWNlOiBMb2NhbGl6YXRpb25TZXJ2aWNlLFxuICAgIHB1YmxpYyBfQ21zQXBpU2VydmljZTogQ21zQXBpU2VydmljZSxcbiAgICBwdWJsaWMgX0Zvcm1Db250cm9sc1NlcnZpY2U6IEZvcm1Db250cm9sc1NlcnZpY2UsXG4gICkge31cbiAgcHJpdmF0ZSBmYiA9IGluamVjdChGb3JtQnVpbGRlcik7XG4gIHByaXZhdGUgX1VwZGF0ZUxpc3RTZXJ2aWNlID0gaW5qZWN0KFVwZGF0ZUxpc3RTZXJ2aWNlKTtcbiAgLyoq6KGo5Y2V5a6e5L2TICovXG4gIG5ld0VudGl0eTogRm9ybUdyb3VwICA9IHRoaXMuZmIuZ3JvdXAobmV3IENyZWF0ZU9yRWRpdEVudHJ5VHlwZUlucHV0QmFzZSgpKTtcbiAgLyoq54mI5Z2XaWQgKi9cbiAgc2VjdGlvbklkOiBzdHJpbmcgPSAnJztcbiAgLyoq5p2h55uu57G75Z6LaWQgKi9cbiAgZW50cnlUeXBlc0lkOiBzdHJpbmcgPSAnJztcbiAgLyoq5p2h55uu57G75Z6L6K+m5oOFICovXG4gIGVudHJ5VHlwZXNTZWxlY3Q6IGFueTtcblxuICBnZXQgZmllbGRUYWJzKCkge1xuICAgIHJldHVybiB0aGlzLm5ld0VudGl0eT8uZ2V0KCdmaWVsZFRhYnMnKSBhcyBGb3JtQXJyYXk7XG4gIH1cblxuICAvKirojrflj5bmj5DkuqTmjInpkq7mm7/ouqvvvIznlKjkuo7nnJ/lrp7op6blj5HooajljZXmj5DkuqQgKi9cbiAgQFZpZXdDaGlsZCgnc3VibWl0Y2xpY2snLCB7IHN0YXRpYzogdHJ1ZSB9KSBzdWJtaXRjbGljazogRWxlbWVudFJlZjtcblxuICAvKirop6blj5Hmj5DkuqTmjInpkq4gKi9cbiAgc3VibWl0Y2xpY2tCdG4oKSB7XG4gICAgdGhpcy5zdWJtaXRjbGljay5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XG4gIH1cblxuICAgIC8qKumcgOimgeafpeivoueahOWKqOaAgeihqOWNleexu+WeiyAqL1xuICAgIGVuYWJsZVNlYXJjaFR5cGVMaXN0OiBhbnlbXSA9IFtdO1xuICAgIC8qKuS4jemcgOimgeWxleekuueahOWKqOaAgeihqOWNleexu+WeiyAqL1xuICAgIGRpc2FibGVzaG93aW5UeXBlTGlzdDogYW55W10gPSBbXTtcbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgbGV0IHNlY3Rpb25JZCA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLnNlY3Rpb25zSWQ7XG4gICAgdGhpcy5lbnRyeVR5cGVzSWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5lbnRyeVR5cGVzSWQgfHwgJyc7XG4gICAgLy8gdGhpcy5lbmFibGVTZWFyY2hUeXBlTGlzdD1hd2FpdCB0aGlzLl9Gb3JtQ29udHJvbHNTZXJ2aWNlLmdldEVuYWJsZVNlYXJjaFR5cGVMaXN0KCk7XG4gICAgLy8gdGhpcy5kaXNhYmxlc2hvd2luVHlwZUxpc3Q9IHRoaXMuX0Zvcm1Db250cm9sc1NlcnZpY2UuZ2V0ZGlzYWJsZXNob3dpblR5cGVMaXN0KCk7XG4gICAgY29uc29sZS5sb2codGhpcy5lbmFibGVTZWFyY2hUeXBlTGlzdCwnZW5hYmxlU2VhcmNoVHlwZUxpc3QnLHRoaXMuZGlzYWJsZXNob3dpblR5cGVMaXN0KTtcbiAgICBpZiAoc2VjdGlvbklkKSB7XG4gICAgICB0aGlzLnNlY3Rpb25JZCA9IHNlY3Rpb25JZDtcbiAgICAgIHRoaXMuYWRkQ29udHJvbFRvRmllbGRUYWJzKCk7XG4gICAgICB0aGlzLmdldEZpZWxkR3JvdXAoKTtcbiAgICB9XG4gIH1cblxuICAvKirnu5lmaWVsZFRhYnPmt7vliqDmlrDmjqfku7YgKi9cbiAgYWRkQ29udHJvbFRvRmllbGRUYWJzKG5hbWVWYWx1ZSA9ICcnKSB7XG4gICAgY29uc3QgbmV3Rm9ybUdyb3VwID0gdGhpcy5mYi5ncm91cChcbiAgICAgIG5ldyBmaWVsZFRhYnNCYXNlKHtcbiAgICAgICAgbmFtZTpcbiAgICAgICAgICB0aGlzLmZpZWxkVGFicy5sZW5ndGggPT09IDBcbiAgICAgICAgICAgID8gdGhpcy5fTG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KGBDbXM6OkZpZWxkVGFiYClcbiAgICAgICAgICAgIDogbmFtZVZhbHVlLFxuICAgICAgfSlcbiAgICApO1xuICAgIHRoaXMuZmllbGRUYWJzLnB1c2gobmV3Rm9ybUdyb3VwKTtcbiAgICB0aGlzLnJlc3VsdFNvdXJjZS5wdXNoKG5ld0Zvcm1Hcm91cC52YWx1ZSk7XG4gICAgdGhpcy5uYXZBY3RpdmUgPSB0aGlzLnJlc3VsdFNvdXJjZS5sZW5ndGggLSAxO1xuICB9XG5cbiAgLyoq6I635Y+W5a2X5q615YiG57uEICovXG4gIGdldEZpZWxkR3JvdXAoKSB7XG4gICAgdGhpcy5fRmllbGRHcm91cEFkbWluU2VydmljZS5nZXRMaXN0KHt9KS5zdWJzY3JpYmUoYXN5bmMgcmVzID0+IHtcbiAgICAgIGxldCBmaWVsZExpc3Q6IGFueSA9IGF3YWl0IHRoaXMuZ2V0RmllbGRMaXN0KCk7XG4gICAgICBsZXQgZmllbGRHcm91cExpc3Q6YW55ID0gcmVzLml0ZW1zO1xuICAgICAgZmllbGRHcm91cExpc3QudW5zaGlmdCh7XG4gICAgICAgIGlkOiBudWxsLFxuICAgICAgICBuYW1lOiAnVW5ncm91cGVkRmllbGRzJyxcbiAgICAgIH0pO1xuICAgICAgZmllbGRHcm91cExpc3QuZm9yRWFjaCgoZWw6IGFueSwgaW5kZXgpID0+IHtcbiAgICAgICAgZWwuZmllbGRzID0gZmllbGRMaXN0LmZpbHRlcihlbHMgPT4gZWxzLmdyb3VwSWQgPT09IGVsLmlkKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5maWVsZEdyb3VwTGlzdCA9IGZpZWxkR3JvdXBMaXN0O1xuICAgICAgdGhpcy5maWVsZExpc3QgPSB0aGlzLmRlZXBDbG9uZShmaWVsZExpc3QpO1xuICAgICAgbGV0IGVudHJ5VHlwZXNJZCA9IHRoaXMuZW50cnlUeXBlc0lkO1xuICAgICAgaWYgKGVudHJ5VHlwZXNJZCkge1xuICAgICAgICB0aGlzLmVudHJ5VHlwZXNJZCA9IGVudHJ5VHlwZXNJZDtcbiAgICAgICAgdGhpcy5nZXRFbnRyeVR5cGVzKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgLyoq6I635Y+W5p2h55uu57G75Z6L6K+m5oOFICovXG4gIGdldEVudHJ5VHlwZXMoKSB7XG4gICAgbGV0IGZpZWxkTGlzdDogYW55ID0gdGhpcy5kZWVwQ2xvbmUodGhpcy5maWVsZExpc3QpO1xuICAgIHRoaXMuX0VudHJ5VHlwZUFkbWluU2VydmljZS5nZXQodGhpcy5lbnRyeVR5cGVzSWQpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgcmVzLmZpZWxkVGFicy5mb3JFYWNoKGVsID0+IHtcbiAgICAgICAgZWwuZmllbGRzLmZvckVhY2goKGVsZDogYW55KSA9PiB7XG4gICAgICAgICAgZWxkLmlkID0gZWxkLmZpZWxkSWQ7XG4gICAgICAgICAgZWxkLmdyb3VwSWQgPSBmaWVsZExpc3QuZmluZChlbGZkID0+IGVsZmQuaWQgPT0gZWxkLmZpZWxkSWQpLmdyb3VwSWQ7XG4gICAgICAgICAgdGhpcy5mb3JtUmlnaHRHcm91cC5wdXNoKGVsZCk7XG4gICAgICAgICAgbGV0IGZpZWxkaW5kZXggPSBmaWVsZExpc3QuZmluZEluZGV4KGVsZmwgPT4gZWxmbC5pZCA9PSBlbGQuZmllbGRJZCk7XG4gICAgICAgICAgZmllbGRMaXN0LnNwbGljZShmaWVsZGluZGV4LCAxKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZmllbGRHcm91cExpc3QuZm9yRWFjaCgoZWw6IGFueSwgaW5kZXgpID0+IHtcbiAgICAgICAgZWwuZmllbGRzID0gZmllbGRMaXN0LmZpbHRlcihlbHMgPT4gZWxzLmdyb3VwSWQgPT09IGVsLmlkKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5uZXdFbnRpdHk/LnBhdGNoVmFsdWUocmVzKTtcbiAgICAgIHRoaXMuZW50cnlUeXBlc1NlbGVjdCA9IHJlcztcbiAgICAgIHRoaXMucmVzdWx0U291cmNlID0gcmVzLmZpZWxkVGFicztcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICog5rex5ou36LSdLS3mlrnms5VcbiAgICogJGFwaS5kZWVwQ2xvbmUoKSAgKi9cbiAgZGVlcENsb25lKG9iajogYW55KSB7XG4gICAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnIHx8IG9iaiA9PT0gbnVsbCkgcmV0dXJuIG9iajtcbiAgICBjb25zdCByZXN1bHQgPSBBcnJheS5pc0FycmF5KG9iaikgPyBbXSA6IHt9O1xuICAgIGZvciAobGV0IGtleSBpbiBvYmopIHtcbiAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICBpZiAodHlwZW9mIG9ialtrZXldID09PSAnb2JqZWN0JyAmJiBvYmpba2V5XSAhPT0gbnVsbCkge1xuICAgICAgICAgIGlmIChvYmpba2V5XSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgIHJlc3VsdFtrZXldID0gbmV3IERhdGUob2JqW2tleV0uZ2V0VGltZSgpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG9ialtrZXldIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAgICAgICByZXN1bHRba2V5XSA9IG5ldyBSZWdFeHAob2JqW2tleV0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHRba2V5XSA9IHRoaXMuZGVlcENsb25lKG9ialtrZXldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0W2tleV0gPSBvYmpba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gbmFtZVZhbHVlIOiOt+WPluaJgOacieWtl+autVxuICAgKi9cbiAgZ2V0RmllbGRMaXN0KCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0cykgPT4ge1xuICAgICAgdGhpcy5fRmllbGRBZG1pblNlcnZpY2VcbiAgICAgICAgLmdldExpc3Qoe1xuICAgICAgICAgIG1heFJlc3VsdENvdW50OiAxMDAwLFxuICAgICAgICB9KVxuICAgICAgICAuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgIHJlcy5pdGVtcy5mb3JFYWNoKGVsID0+IHtcbiAgICAgICAgICAgIGVsLnJlcXVpcmVkID0gZmFsc2U7XG4gICAgICAgICAgICBlbC5zaG93SW5MaXN0ID0gZmFsc2U7XG4gICAgICAgICAgICBlbC5lbmFibGVTZWFyY2ggPSBmYWxzZTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXNvbHZlKHJlcy5pdGVtcyk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIOaLluaLvSDlip/og70qL1xuICAvKirmlbDmja7mupAgKi9cbiAgLyoq5pWw5o2u5rqQLeWtl+auteWIhue7hOaVsOaNri3ljIXlkKvlrZfmrrXmlbDmja4gZmllbGRzICovXG4gIGZpZWxkR3JvdXBMaXN0OiBhbnlbXSA9IFtdO1xuICAvKirmlbDmja7mupAt5omA5pyJ5a2X5q615YiX6KGoICovXG4gIGZpZWxkTGlzdDogYW55W10gPSBbXTtcbiAgLyoq5pWw5o2u5rqQ5ouW5ou955qE5YiG57uE5LiL5qCHICovXG4gIERhdGFTb3VyY2VHcm91cEluZGV4OiBudW1iZXJ8YW55O1xuICAvKirmlbDmja7mupDmi5bmi73nmoTlrZfmrrXkuIvmoIcgKi9cbiAgRGF0YVNvdXJjZUZpZWxkSW5kZXg6IG51bWJlcnxhbnk7XG4gIC8qKuebruagh+a6kCDnu5PmnpwqL1xuICByZXN1bHRTb3VyY2U6IGFueVtdID0gW107XG5cbiAgLyoq5LuO5pWw5o2u5rqQ5ouW5ou955qE5YWD57SgICovXG4gIGZyb21EYXRhU291cmNlRHJhZ0VsOiBhbnk7XG4gIC8qKuS7juebruagh+a6kOaLluaLveeahOWFg+e0oCAqL1xuICBmcm9tUmVzdWx0U291cmNlRHJhZ0VsOiBhbnk7XG5cbiAgLyoq5p2l6Ieq5pWw5o2u5rqQ55qE6ZuG5ZCI77yM55So5LqO5LuO55uu5qCH5rqQ5ouW5Zue5pWw5o2u5rqQ5pe255qE5Yik5pat77yM5LiO5Y+W5YC8ICovXG4gIGZvcm1SaWdodEdyb3VwOiBhbnlbXSA9IFtdO1xuICAvKirku47mlbDmja7mupDlvIDlp4vmi5bmi70gKi9cbiAgZnJvbURhdGFTb3VyY2VEcmFnU3RhcnQoZWxlbWVudCwgZmllbGRJbmRleCwgZ3JvdXBJbmRleCkge1xuICAgIHRoaXMuZnJvbURhdGFTb3VyY2VEcmFnRWwgPSBlbGVtZW50O1xuICAgIHRoaXMuRGF0YVNvdXJjZUZpZWxkSW5kZXggPSBmaWVsZEluZGV4O1xuICAgIHRoaXMuRGF0YVNvdXJjZUdyb3VwSW5kZXggPSBncm91cEluZGV4O1xuICAgIHRoaXMuZnJvbVJlc3VsdFNvdXJjZURyYWdFbCA9IHVuZGVmaW5lZDtcbiAgfVxuICAvKirku47nm67moIfmupDlvIDlp4vmi5bmi70gKi9cbiAgZnJvbVJlc3VsdFNvdXJjZURyYWdTdGFydChlbGVtZW50KSB7XG4gICAgdGhpcy5mcm9tUmVzdWx0U291cmNlRHJhZ0VsID0gZWxlbWVudDtcbiAgICB0aGlzLmZyb21EYXRhU291cmNlRHJhZ0VsID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuRGF0YVNvdXJjZUZpZWxkSW5kZXggPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5EYXRhU291cmNlR3JvdXBJbmRleCA9IHVuZGVmaW5lZDtcbiAgfVxuICAvKirmi5bmi73liLDmlbDmja7mupDml7bop6blj5EgKi9cbiAgZHJhZ1RvRGF0YVNvdXJjZURyb3BwZWQoKSB7XG4gICAgLy/ku47mlbDmja7mupDmi5bmi73liLDmlbDmja7mupAt5o6S5bqPXG4gICAgaWYgKHRoaXMuZnJvbURhdGFTb3VyY2VEcmFnRWwpIHtcbiAgICB9XG4gICAgbGV0IF9mcm9tUmVzdWx0U291cmNlRHJhZ0VsID0gdGhpcy5mcm9tUmVzdWx0U291cmNlRHJhZ0VsO1xuICAgIGxldCBmb3JtUmlnaHRHcm91cCA9IHRoaXMuZGVlcENsb25lKHRoaXMuZm9ybVJpZ2h0R3JvdXApO1xuICAgIGxldCBmaWVsZExpc3QgPSB0aGlzLmRlZXBDbG9uZSh0aGlzLmZpZWxkTGlzdCk7XG5cbiAgICBpZiAoX2Zyb21SZXN1bHRTb3VyY2VEcmFnRWwpIHtcbiAgICAgIC8v56e75YqoXG4gICAgICAvL+S7juebruagh+a6kOaLluaLveWIsOaVsOaNrua6kFxuICAgICAgLy8g5ouW5ou955uu5qCH5rqQ55qE5LiL5qCHXG4gICAgICBsZXQgZHJhZ1Jlc3VsdFNvdXJjZUluZGV4ID0gdGhpcy5yZXN1bHRTb3VyY2VbdGhpcy5uYXZBY3RpdmVdLmZpZWxkcy5maW5kSW5kZXgoXG4gICAgICAgIGVsID0+IGVsLmlkID09IF9mcm9tUmVzdWx0U291cmNlRHJhZ0VsLmlkXG4gICAgICApO1xuICAgICAgLy/liKDpmaTnm67moIfmupDkuK3nmoTmlbDmja5cbiAgICAgIHRoaXMucmVzdWx0U291cmNlW3RoaXMubmF2QWN0aXZlXS5maWVsZHMuc3BsaWNlKGRyYWdSZXN1bHRTb3VyY2VJbmRleCwgMSk7XG4gICAgICBmb3JtUmlnaHRHcm91cC5zcGxpY2UoXG4gICAgICAgIGZvcm1SaWdodEdyb3VwLmZpbmRJbmRleChlbCA9PiBlbC5pZCA9PSBfZnJvbVJlc3VsdFNvdXJjZURyYWdFbC5pZCksXG4gICAgICAgIDFcbiAgICAgICk7XG4gICAgICB0aGlzLmZpZWxkR3JvdXBMaXN0LmZvckVhY2goZWwgPT4ge1xuICAgICAgICBpZiAoZWwuaWQgPT0gX2Zyb21SZXN1bHRTb3VyY2VEcmFnRWwuZ3JvdXBJZCkge1xuICAgICAgICAgIGNvbnN0IGVsRmllbGRzQWxsID0gZmllbGRMaXN0LmZpbHRlcihlbHMgPT4gZWxzLmdyb3VwSWQgPT09IGVsLmlkKTtcbiAgICAgICAgICBlbC5maWVsZHMgPSBlbEZpZWxkc0FsbC5maWx0ZXIoXG4gICAgICAgICAgICBpdGVtID0+ICFmb3JtUmlnaHRHcm91cC5zb21lKGl0ZW1CID0+IGl0ZW0uaWQgPT09IGl0ZW1CLmlkKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5mb3JtUmlnaHRHcm91cCA9IGZvcm1SaWdodEdyb3VwO1xuICAgIH1cblxuICAgIHRoaXMuc2V0ZmllbGRUYWJzRnJvbSgpO1xuICB9XG4gIC8qKuaLluaLveWIsOebruagh+a6kOaXtuinpuWPkVxuICAgKlxuICAgKi9cbiAgZHJhZ1RvUmVzdWx0U291cmNlRHJvcHBlZChmaWVsZFRhYnN0ZW06IGFueSwgZmllbGRUYWJzSW5kZXgpIHtcbiAgICBjb25zdCBfZnJvbURhdGFTb3VyY2VEcmFnRWwgPSB0aGlzLmZyb21EYXRhU291cmNlRHJhZ0VsO1xuICAgIC8v5LuO5pWw5o2u5rqQ5ouW5ou95Yiw55uu5qCH5rqQXG4gICAgaWYgKF9mcm9tRGF0YVNvdXJjZURyYWdFbCkge1xuICAgICAgdGhpcy5maWVsZEdyb3VwTGlzdFt0aGlzLkRhdGFTb3VyY2VHcm91cEluZGV4fHwwXS5maWVsZHMuc3BsaWNlKHRoaXMuRGF0YVNvdXJjZUZpZWxkSW5kZXgsIDEpO1xuICAgICAgdGhpcy5yZXN1bHRTb3VyY2VbZmllbGRUYWJzSW5kZXhdLmZpZWxkcy5wdXNoKF9mcm9tRGF0YVNvdXJjZURyYWdFbCk7XG4gICAgICB0aGlzLmZvcm1SaWdodEdyb3VwLnB1c2goX2Zyb21EYXRhU291cmNlRHJhZ0VsKTtcbiAgICB9XG5cbiAgICB0aGlzLnNldGZpZWxkVGFic0Zyb20oKTtcbiAgfVxuICAvKiog5LuO55uu5qCH5rqQ5ouW5ou95Yiw55uu5qCH5rqQKi9cbiAgZHJhZ1RvUmVzdWx0U291cmNlSXRlbURyb3BwZWQoZmllbGRzSW5kZXgpIHtcbiAgICBjb25zdCBfZnJvbVJlc3VsdFNvdXJjZURyYWdFbCA9IHRoaXMuZnJvbVJlc3VsdFNvdXJjZURyYWdFbDtcbiAgICBpZiAoX2Zyb21SZXN1bHRTb3VyY2VEcmFnRWwpIHtcbiAgICAgIC8vIOaLluaLveebruagh+a6kOeahOS4i+agh1xuICAgICAgbGV0IGRyYWdSZXN1bHRTb3VyY2VJbmRleCA9IHRoaXMucmVzdWx0U291cmNlW3RoaXMubmF2QWN0aXZlXS5maWVsZHMuZmluZEluZGV4KFxuICAgICAgICBlbCA9PiBlbC5pZCA9PSBfZnJvbVJlc3VsdFNvdXJjZURyYWdFbC5pZFxuICAgICAgKTtcbiAgICAgIC8v5Yig6Zmk55uu5qCH5rqQ5Lit55qE5pWw5o2uXG4gICAgICB0aGlzLnJlc3VsdFNvdXJjZVt0aGlzLm5hdkFjdGl2ZV0uZmllbGRzLnNwbGljZShkcmFnUmVzdWx0U291cmNlSW5kZXgsIDEpO1xuICAgICAgdGhpcy5yZXN1bHRTb3VyY2VbdGhpcy5uYXZBY3RpdmVdLmZpZWxkcy5zcGxpY2UoZmllbGRzSW5kZXgsIDAsIF9mcm9tUmVzdWx0U291cmNlRHJhZ0VsKTtcbiAgICB9XG4gICAgdGhpcy5zZXRmaWVsZFRhYnNGcm9tKCk7XG4gIH1cbiAgLyoq6K6+572uZm9ybUHooajljZUgKi9cbiAgc2V0ZmllbGRUYWJzRnJvbSgpIHtcbiAgICBsZXQgc2V0QXJyYXk6YW55W10gPSBbXTtcbiAgICB0aGlzLnJlc3VsdFNvdXJjZS5mb3JFYWNoKGVsID0+IHtcbiAgICAgIGxldCBmaWVsZHNBcnJheTphbnlbXSA9IFtdO1xuICAgICAgZWwuZmllbGRzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgIGZpZWxkc0FycmF5LnB1c2goe1xuICAgICAgICAgIGZpZWxkSWQ6IGl0ZW0uaWQgfHwgaXRlbS5maWVsZElkLFxuICAgICAgICAgIGRpc3BsYXlOYW1lOiBpdGVtLmRpc3BsYXlOYW1lLFxuICAgICAgICAgIHJlcXVpcmVkOiBpdGVtPy5yZXF1aXJlZCxcbiAgICAgICAgICBzaG93SW5MaXN0OiBpdGVtPy5zaG93SW5MaXN0LFxuICAgICAgICAgIGVuYWJsZVNlYXJjaDogaXRlbT8uZW5hYmxlU2VhcmNoLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgc2V0QXJyYXkucHVzaCh7XG4gICAgICAgIG5hbWU6IGVsLm5hbWUsXG4gICAgICAgIGZpZWxkczogZmllbGRzQXJyYXksXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICB0aGlzLm5ld0VudGl0eT8ucGF0Y2hWYWx1ZSh7XG4gICAgICBmaWVsZFRhYnM6IHNldEFycmF5LFxuICAgIH0pO1xuICB9XG4gIHByaXZhdGUgX1ZhbGlkYXRvcnNTZXJ2aWNlID0gaW5qZWN0KFZhbGlkYXRvcnNTZXJ2aWNlKTtcbiAgLyoq6KGo5Y2V6aqM6K+B54q25oCBXG4gICAqIHtcbiAgICogIHRpdGxlOnRydWUsXG4gICAqIH1cbiAgICovXG4gIGZvcm1WYWxpZGF0aW9uOiBhbnkgPSAnJztcbmlzU3VibWl0OmJvb2xlYW4gPSBmYWxzZTtcbiAgLyoq5L+d5a2Y6KGo5Y2VICovXG4gIHNhdmUoKSB7XG4gICAgXG4gICAgaWYodGhpcy5pc1N1Ym1pdCkgcmV0dXJuO1xuICAgIHRoaXMuaXNTdWJtaXQgPSB0cnVlO1xuICAgIGxldCBpbnB1dCA9IHRoaXMubmV3RW50aXR5Py52YWx1ZTtcblxuICAgIHRoaXMuZm9ybVZhbGlkYXRpb24gPSB0aGlzLl9WYWxpZGF0b3JzU2VydmljZS5nZXRGb3JtVmFsaWRhdGlvblN0YXR1cyh0aGlzLm5ld0VudGl0eSk7XG4gICAgaWYgKHRoaXMuX1ZhbGlkYXRvcnNTZXJ2aWNlLmlzQ2hlY2tGb3JtKHRoaXMuZm9ybVZhbGlkYXRpb24sICdDbXMnKSkgcmV0dXJuICAgdGhpcy5pc1N1Ym1pdCA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuZW50cnlUeXBlc1NlbGVjdCkge1xuICAgICAgdGhpcy5fRW50cnlUeXBlQWRtaW5TZXJ2aWNlLnVwZGF0ZSh0aGlzLmVudHJ5VHlwZXNTZWxlY3QuaWQsIGlucHV0KS5waXBlKGZpbmFsaXplKCgpPT57XG4gICAgICAgIHRoaXMuaXNTdWJtaXQgPSBmYWxzZTtcbiAgICAgIH0pKS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgdGhpcy50b2FzdGVyLnN1Y2Nlc3ModGhpcy5fTG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KGBDbXM6OlNhdmVkU3VjY2Vzc2Z1bGx5YCkpO1xuICAgICAgICB0aGlzLl9sb2NhdGlvbi5iYWNrKCk7XG4gICAgICAgIHRoaXMuX1VwZGF0ZUxpc3RTZXJ2aWNlLnVwZGF0ZUxpc3QoKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpbnB1dC5zZWN0aW9uSWQgPSB0aGlzLnNlY3Rpb25JZDtcbiAgICB0aGlzLl9FbnRyeVR5cGVBZG1pblNlcnZpY2UuY3JlYXRlKGlucHV0KS5waXBlKGZpbmFsaXplKCgpPT57XG4gICAgICB0aGlzLmlzU3VibWl0ID0gZmFsc2U7XG4gICAgfSkpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgdGhpcy50b2FzdGVyLnN1Y2Nlc3ModGhpcy5fTG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KGBDbXM6OlNhdmVkU3VjY2Vzc2Z1bGx5YCkpO1xuICAgICAgdGhpcy5fbG9jYXRpb24uYmFjaygpO1xuICAgICAgdGhpcy5fVXBkYXRlTGlzdFNlcnZpY2UudXBkYXRlTGlzdCgpO1xuICAgIH0pO1xuICB9XG4gIC8qKue8lui+kVRhYnPooajljZUgKi9cbiAgZWRpdEZpZWxkVGFic0Zyb206IEZvcm1Hcm91cCA7XG4gIC8qKuaooeaAgeahhueKtuaAgSAqL1xuICB2aXNpYmxlVGFic09wZW46IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoq5piv5ZCm5piv5b+Z56KM54q25oCBICovXG4gIG1vZGFsQnVzeTogYm9vbGVhbiA9IGZhbHNlO1xuICAvKirmraPlnKjnvJbovpHnmoR0YWJzICovXG4gIGVkaXRGaWVsZFRhYnNTZWxlY3Q6IGFueTtcbiAgLyoq5q2j5Zyo6YCJ5Lit55qEbmF2ICovXG4gIG5hdkFjdGl2ZTogYW55ID0gMDtcblxuICAvKirooajljZXmjqfku7bmqKHmnb8t5Yqo5oCB6LWL5YC86KGo5Y2V5o6n5Lu2ICovXG4gIEBWaWV3Q2hpbGQoJ2VkaXRGaWVsZFRhYnNNb2RhbFN1Ym1pdEJ0bicsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBlZGl0RmllbGRUYWJzTW9kYWxTdWJtaXRCdG46IEVsZW1lbnRSZWY7XG5cbiAgLyoq5qih5oCB5qGG54q25oCB5pS55Y+Y5Zue6LCDICovXG4gIFZpc2libGVUYWJzQ2hhbmdlKGV2ZW50KSB7XG4gICAgaWYgKCFldmVudCkge1xuICAgICAgdGhpcy5lZGl0RmllbGRUYWJzU2VsZWN0ID0gJyc7XG4gICAgICB0aGlzLmZvcm1WYWxpZGF0aW9uID0gJyc7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG4gIC8qKuaWsOW7uuWinuWKoEZpZWxkVGFicyAqL1xuICBhZGRGaWVsZFRhYnMoKSB7XG4gICAgdGhpcy5lZGl0RmllbGRUYWJzRnJvbSA9IHRoaXMuZmIuZ3JvdXAobmV3IGZpZWxkVGFic0Jhc2UoKSk7XG4gICAgdGhpcy52aXNpYmxlVGFic09wZW4gPSB0cnVlO1xuICB9XG4gIC8qKuato+WcqOe8lui+keeahHRhYuS4i+aghyAqL1xuICBuZXdFZGl0RmllbGRUYWJzSW5kZXg6IG51bWJlcnxhbnk7XG4gIC8qKue8lui+kUZpZWxkVGFicyAqL1xuICBlZGl0RmllbGRUYWJzKGl0ZW0sIGkpIHtcbiAgICB0aGlzLmVkaXRGaWVsZFRhYnNGcm9tID0gdGhpcy5mYi5ncm91cChuZXcgZmllbGRUYWJzQmFzZSgpKTtcbiAgICB0aGlzLmVkaXRGaWVsZFRhYnNGcm9tLnBhdGNoVmFsdWUoe1xuICAgICAgbmFtZTogaXRlbS5uYW1lLFxuICAgIH0pO1xuICAgIHRoaXMuZWRpdEZpZWxkVGFic1NlbGVjdCA9IGl0ZW07XG4gICAgdGhpcy52aXNpYmxlVGFic09wZW4gPSB0cnVlO1xuICAgIHRoaXMubmV3RWRpdEZpZWxkVGFic0luZGV4ID0gaTtcbiAgfVxuXG4gIC8qKuS/neWtmOe8lui+kXRhYnPooajljZUgKi9cbiAgZWRpdEZpZWxkVGFic1NhdmUoKSB7XG4gICAgaWYgKCF0aGlzLmVkaXRGaWVsZFRhYnNGcm9tLnZhbHVlLm5hbWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy/nvJbovpFcbiAgICBpZiAodGhpcy5lZGl0RmllbGRUYWJzU2VsZWN0KSB7XG4gICAgICB0aGlzLnJlc3VsdFNvdXJjZVt0aGlzLm5ld0VkaXRGaWVsZFRhYnNJbmRleF0ubmFtZSA9IHRoaXMuZWRpdEZpZWxkVGFic0Zyb20udmFsdWUubmFtZTtcbiAgICAgIHRoaXMubmF2QWN0aXZlID0gdGhpcy5uZXdFZGl0RmllbGRUYWJzSW5kZXg7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8v5paw5bu6XG4gICAgICB0aGlzLmFkZENvbnRyb2xUb0ZpZWxkVGFicyh0aGlzLmVkaXRGaWVsZFRhYnNGcm9tLnZhbHVlLm5hbWUpO1xuICAgIH1cbiAgICB0aGlzLnZpc2libGVUYWJzT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuc2V0ZmllbGRUYWJzRnJvbSgpO1xuICB9XG4gIC8qKuWIoOmZpOafkOS4qnRhYnPooajljZUgKi9cbiAgZGVsZXRlRmllbGRUYWJzKGluZGV4KSB7XG4gICAgdGhpcy5maWVsZFRhYnMucmVtb3ZlQXQoaW5kZXgpO1xuICAgIHRoaXMucmVzdWx0U291cmNlLnNwbGljZShpbmRleCwgMSk7XG4gIH1cblxuICAvKirnvJbovpHlrZfmrrXmqKHmgIHmoYbnirbmgIEgKi9cbiAgdmlzaWJsZUVkaXRGaWVsZE9wZW46IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoq57yW6L6R5a2X5q615qih5oCB5qGG6KGo5Y2VICovXG4gIGVkaXRGaWVsZEZyb206IEZvcm1Hcm91cCA7XG4gIC8qKuihqOWNleaOp+S7tuaooeadvy3liqjmgIHotYvlgLzooajljZXmjqfku7Yt57yW6L6R5a2X5q61ICovXG4gIEBWaWV3Q2hpbGQoJ2VkaXRGaWVsZE1vZGFsU3VibWl0QnRuJywgeyBzdGF0aWM6IGZhbHNlIH0pIGVkaXRGaWVsZE1vZGFsU3VibWl0QnRuOiBFbGVtZW50UmVmO1xuICAvKirmraPlnKjnvJbovpHnmoTlrZfmrrXkuIvmoIcgKi9cbiAgRWRpdEZpZWxkSW5kZXg6IG51bWJlcnxhbnk7XG4gIC8qKue8lui+keWtl+auteaooeaAgeahhueKtuaAgeeKtuaAgeaUueWPmOWbnuiwgyAqL1xuICBWaXNpYmxlRWRpdEZpZWxkQ2hhbmdlKGV2ZW50KSB7XG4gICAgaWYgKCFldmVudCkge1xuICAgICAgdGhpcy5FZGl0RmllbGRJbmRleCA9IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgaXNTaG93SW5MaXN0OiBib29sZWFuID0gdHJ1ZTtcbiAgaXNFbmFibGVTZWFyY2g6IGJvb2xlYW4gPSB0cnVlO1xuICAvKirmiZPlvIDnvJbovpHlrZfmrrXmqKHmgIHmoYYgKi9cbiAgRWRpdEZpZWxkTW9kYWxPcGVuKGl0ZW1zLCBlbEluZGV4KSB7XG4gICAgdGhpcy52aXNpYmxlRWRpdEZpZWxkT3BlbiA9IHRydWU7XG4gICAgdGhpcy5FZGl0RmllbGRJbmRleCA9IGVsSW5kZXg7XG4gICAgdGhpcy5lZGl0RmllbGRGcm9tID0gdGhpcy5mYi5ncm91cChuZXcgZmllbGRzQmFzZSgpKTtcbiAgICBsZXQgZmllbGRzT3B0aW9ucz10aGlzLmZpZWxkVGFicy52YWx1ZVt0aGlzLm5hdkFjdGl2ZV0uZmllbGRzW2VsSW5kZXhdO1xuICAgIC8vIGNvbnNvbGUubG9nKGZpZWxkc09wdGlvbnMsJ3RoaXMuZmllbGRUYWJzLnZhbHVlW3RoaXMubmF2QWN0aXZlXS5maWVsZHNbZWxJbmRleF0nKVxuICAgIC8vIHRoaXMuaXNTaG93SW5MaXN0ID0gIXRoaXMuZGlzYWJsZXNob3dpblR5cGVMaXN0LmluY2x1ZGVzKGZpZWxkc09wdGlvbnMuZmllbGQuZm9ybUNvbnRyb2xOYW1lKTtcbiAgICAvLyB0aGlzLmlzRW5hYmxlU2VhcmNoID0gdGhpcy5lbmFibGVTZWFyY2hUeXBlTGlzdC5pbmNsdWRlcyhmaWVsZHNPcHRpb25zLmZpZWxkLmZvcm1Db250cm9sTmFtZSk7XG4gICAgdGhpcy5lZGl0RmllbGRGcm9tLnBhdGNoVmFsdWUoZmllbGRzT3B0aW9ucyk7XG4gICAgLy8gdGhpcy5kaXNhYmxlc2hvd2luVHlwZUxpc3RcbiAgICBcbiAgfVxuICAvKirkv53lrZjnvJbovpHlrZfmrrUgKi9cbiAgZWRpdEZpZWxkU2F2ZSgpIHtcbiAgICBsZXQgaW5wdXQgPSB0aGlzLmVkaXRGaWVsZEZyb20udmFsdWU7XG4gICAgdGhpcy5yZXN1bHRTb3VyY2VbdGhpcy5uYXZBY3RpdmVdLmZpZWxkc1t0aGlzLkVkaXRGaWVsZEluZGV4XS5kaXNwbGF5TmFtZSA9IGlucHV0LmRpc3BsYXlOYW1lO1xuICAgIHRoaXMucmVzdWx0U291cmNlW3RoaXMubmF2QWN0aXZlXS5maWVsZHNbdGhpcy5FZGl0RmllbGRJbmRleF0ucmVxdWlyZWQgPSBpbnB1dC5yZXF1aXJlZDtcbiAgICB0aGlzLnJlc3VsdFNvdXJjZVt0aGlzLm5hdkFjdGl2ZV0uZmllbGRzW3RoaXMuRWRpdEZpZWxkSW5kZXhdLnNob3dJbkxpc3QgPSBpbnB1dC5zaG93SW5MaXN0O1xuICAgIHRoaXMucmVzdWx0U291cmNlW3RoaXMubmF2QWN0aXZlXS5maWVsZHNbdGhpcy5FZGl0RmllbGRJbmRleF0uZW5hYmxlU2VhcmNoID0gaW5wdXQuZW5hYmxlU2VhcmNoO1xuICAgIHRoaXMudmlzaWJsZUVkaXRGaWVsZE9wZW4gPSBmYWxzZTtcbiAgICB0aGlzLnNldGZpZWxkVGFic0Zyb20oKTtcbiAgfVxuXG4gIC8qKm5hbWXooajljZXmjqfku7YgKi9cbiAgZ2V0IG5hbWVJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5uZXdFbnRpdHkuZ2V0KCduYW1lJyk7XG4gIH1cbiAgLyoq5a2X5q615qCH562+aW5wdXTlpLHljrvmoIfngrnnlJ/miJDlrZfmrrXlkI3lrZcgKi9cbiAgZGlzUGxheU5hbWVJbnB1dEJsdXIoZXZlbnQpIHtcbiAgICBsZXQgdmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgbGV0IHBpbnlpbiA9IHRoaXMuX0Ntc0FwaVNlcnZpY2UuY2hpbmVzZVRvUGlueWluKHZhbHVlKTtcbiAgICBsZXQgbmFtZUlucHV0OmFueSA9IHRoaXMubmFtZUlucHV0O1xuICAgIGlmIChuYW1lSW5wdXQudmFsdWUpIHJldHVybjtcbiAgICBuYW1lSW5wdXQucGF0Y2hWYWx1ZShwaW55aW4pO1xuICB9XG59XG4iLCI8Zm9ybSBjbGFzcz1cInJvdyBnLTMgbmVlZHMtdmFsaWRhdGlvblwiIFtmb3JtR3JvdXBdPVwibmV3RW50aXR5XCIgKGtleWRvd24uZW50ZXIpPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIiBbY2xhc3NdPVwieyd3YXMtdmFsaWRhdGVkJzpmb3JtVmFsaWRhdGlvbn1cIiAgKHN1Ym1pdCk9XCJzYXZlKClcIj5cbiAgICA8YWJwLXBhZ2UgW3RpdGxlXT1cImVudHJ5VHlwZXNJZCA/ICgnQWJwVWk6OkVkaXQnIHwgYWJwTG9jYWxpemF0aW9uKTooJ0Ntczo6TmV3JyB8IGFicExvY2FsaXphdGlvbilcIlxuICAgICAgICBbdG9vbGJhcl09XCJ0cnVlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcmVhdGUtb3ItZWRpdC1lbnRyeS10eXBlLXBhZ2VcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiICNzdWJtaXRjbGljaz48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPnt7J0Ntczo6RGlzcGxheU5hbWUnIHwgYWJwTG9jYWxpemF0aW9ufX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwiZGlzcGxheU5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJkaXNQbGF5TmFtZUlucHV0Qmx1cigkZXZlbnQpXCIgcGxhY2Vob2xkZXI9XCJcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIj57eydDbXM6Ok5hbWUnIHwgYWJwTG9jYWxpemF0aW9ufX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiIHBsYWNlaG9sZGVyPVwiXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBmb3JtQXJyYXlOYW1lPVwiZmllbGRUYWJzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPnt7J0Ntczo6RmllbGRMYXlvdXQnIHwgYWJwTG9jYWxpemF0aW9ufX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS04XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBuZ2JOYXYgI25hdj1cIm5nYk5hdlwiIFsoYWN0aXZlSWQpXT1cIm5hdkFjdGl2ZVwiIGNsYXNzPVwibmF2IG5hdi10YWJzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIHJlc3VsdFNvdXJjZTsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBbbmdiTmF2SXRlbV09XCJpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG5nYkRyb3Bkb3duIG5nYk5hdkxpbms+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXMtMVwiIChjbGljay5zdG9wKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdiRHJvcGRvd25Ub2dnbGU+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBuZ2JEcm9wZG93bk1lbnUgc3R5bGU9XCJ6LWluZGV4OiA5OTk7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIG5nYkRyb3Bkb3duSXRlbSB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrLnN0b3ApPVwiZWRpdEZpZWxkVGFicyhpdGVtLGkpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWVkaXRcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7J0FicFVpOjpFZGl0JyB8IGFicExvY2FsaXphdGlvbn19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgbmdiRHJvcGRvd25JdGVtICpuZ0lmPVwicmVzdWx0U291cmNlLmxlbmd0aCAhPT0gMVwiIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2suc3RvcCk9XCJkZWxldGVGaWVsZFRhYnMoaSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdHJhc2hcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7J0FicFVpOjpEZWxldGUnIHwgYWJwTG9jYWxpemF0aW9ufX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ2JOYXZDb250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC0yXCIgb25kcmFnb3Zlcj1cImV2ZW50LnByZXZlbnREZWZhdWx0KCk7XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkcm9wKT1cImRyYWdUb1Jlc3VsdFNvdXJjZURyb3BwZWQoaXRlbSxpKVwiIHN0eWxlPVwiaGVpZ2h0OiAxMDAlO1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgIGNsYXNzPVwiZm9ybS10ZXh0IHRleHQtbXV0ZWRcIiAqbmdJZj1cIml0ZW0uZmllbGRzLmxlbmd0aCA9PT0gMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7J0Ntczo6RHJhZ0FuZERyb3BGaWVsZFRpcHMnIHwgYWJwTG9jYWxpemF0aW9ufX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtZ3JvdXBcIiBzdHlsZT1cImhlaWdodDogMTAwJTtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBlbCBvZiBpdGVtLmZpZWxkczsgbGV0IGllbCA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBkcmFnZ2FibGU9XCJ0cnVlXCIgKGRyYWdzdGFydCk9XCJmcm9tUmVzdWx0U291cmNlRHJhZ1N0YXJ0KGVsKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZHJvcCk9XCJkcmFnVG9SZXN1bHRTb3VyY2VJdGVtRHJvcHBlZChpZWwpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gcHktMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBvc2l0aW9uOiB1bnNldDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGVsLmRpc3BsYXlOYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicC0wIGJ0biBidG4tc20gYnRuLWxpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2suc3RvcCk9XCJFZGl0RmllbGRNb2RhbE9wZW4oZWwsaWVsKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiPjxpIGNsYXNzPVwiZmFzIGZhLXdyZW5jaCBwLXNtLTFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwiYnV0dG9uXCI+PC9pPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW1cIiByb2xlPVwicHJlc2VudGF0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwibmF2LWxpbmtcIiAoY2xpY2suc3RvcCk9XCJhZGRGaWVsZFRhYnMoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtcGx1cy1jaXJjbGVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eydDbXM6Ok5ld1RhYicgfCBhYnBMb2NhbGl6YXRpb259fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbbmdiTmF2T3V0bGV0XT1cIm5hdlwiIGNsYXNzPVwibXQtMiBib3JkZXJuTmF2cyBwLTBcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb24gI2FjY29yZGlvbj1cIm5nYkFjY29yZGlvblwiIG9uZHJhZ292ZXI9XCJldmVudC5wcmV2ZW50RGVmYXVsdCgpO1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkcm9wKT1cImRyYWdUb0RhdGFTb3VyY2VEcm9wcGVkKClcIiBzdHlsZT1cIm1pbi1oZWlnaHQ6IDgwcHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZmllbGRHcm91cExpc3Q7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW25nYkFjY29yZGlvbkl0ZW1dPVwiaXRlbS5uYW1lXCIgKm5nSWY9XCJpdGVtLmZpZWxkcy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyIG5nYkFjY29yZGlvbkhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBuZ2JBY2NvcmRpb25CdXR0b24+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnQ21zOjonK2l0ZW0ubmFtZSkgfCBhYnBMb2NhbGl6YXRpb24gfX08L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uQ29sbGFwc2U+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uQm9keT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBlbCBvZiBpdGVtLmZpZWxkczsgbGV0IGlpID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBkcmFnZ2FibGU9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZHJhZ3N0YXJ0KT1cImZyb21EYXRhU291cmNlRHJhZ1N0YXJ0KGVsLGlpLGkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGVsLmRpc3BsYXlOYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cblxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9hYnAtcGFnZT5cblxuPC9mb3JtPlxuXG48YWJwLW1vZGFsIFsodmlzaWJsZSldPVwidmlzaWJsZVRhYnNPcGVuXCIgW2J1c3ldPVwibW9kYWxCdXN5XCIgKHZpc2libGVDaGFuZ2UpPVwiVmlzaWJsZVRhYnNDaGFuZ2UoJGV2ZW50KVwiPlxuICAgIDxuZy10ZW1wbGF0ZSAjYWJwSGVhZGVyPlxuICAgICAgICA8aDM+e3sgZWRpdEZpZWxkVGFic1NlbGVjdCA/ICgnQWJwVWk6OkVkaXQnIHwgYWJwTG9jYWxpemF0aW9uKTooJ0Ntczo6TmV3JyB8IGFicExvY2FsaXphdGlvbil9fTwvaDM+MjJcbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSAjYWJwQm9keT5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNsb2FkZXJSZWY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIj48aSBjbGFzcz1cImZhIGZhLXB1bHNlIGZhLXNwaW5uZXJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJlZGl0RmllbGRUYWJzRnJvbTsgZWxzZSBsb2FkZXJSZWZcIj5cbiAgICAgICAgICAgIDxmb3JtIGNsYXNzPVwic2l0ZXMtbW9kYWwtZm9ybVwiIFtmb3JtR3JvdXBdPVwiZWRpdEZpZWxkVGFic0Zyb21cIiAoa2V5ZG93bi5lbnRlcik9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKVwiIFtjbGFzc109XCJ7J3dhcy12YWxpZGF0ZWQnOmZvcm1WYWxpZGF0aW9ufVwiIChzdWJtaXQpPVwiZWRpdEZpZWxkVGFic1NhdmUoKVwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiICNlZGl0RmllbGRUYWJzTW9kYWxTdWJtaXRCdG4gc3R5bGU9XCJkaXNwbGF5OiBub25lXCI+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPnt7J0Ntczo6TmFtZScgfCBhYnBMb2NhbGl6YXRpb259fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiIHBsYWNlaG9sZGVyPVwiXCIgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgI2FicEZvb3Rlcj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIGFicENsb3NlPnt7J0FicFVpOjpDbG9zZScgfCBhYnBMb2NhbGl6YXRpb259fTwvYnV0dG9uPlxuICAgICAgICA8YWJwLWJ1dHRvbiBpY29uQ2xhc3M9XCJmYSBmYS1jaGVja1wiIFxuICAgICAgICAgICAgKGNsaWNrKT1cImVkaXRGaWVsZFRhYnNNb2RhbFN1Ym1pdEJ0bi5uYXRpdmVFbGVtZW50LmNsaWNrKClcIj57eydBYnBVaTo6U2F2ZScgfCBhYnBMb2NhbGl6YXRpb259fTwvYWJwLWJ1dHRvbj5cbiAgICA8L25nLXRlbXBsYXRlPlxuPC9hYnAtbW9kYWw+XG5cblxuPGFicC1tb2RhbCBbKHZpc2libGUpXT1cInZpc2libGVFZGl0RmllbGRPcGVuXCIgW2J1c3ldPVwibW9kYWxCdXN5XCIgKHZpc2libGVDaGFuZ2UpPVwiVmlzaWJsZUVkaXRGaWVsZENoYW5nZSgkZXZlbnQpXCI+XG4gICAgPG5nLXRlbXBsYXRlICNhYnBIZWFkZXI+XG4gICAgICAgIDxoMz57eydBYnBVaTo6RWRpdCcgfCBhYnBMb2NhbGl6YXRpb259fTwvaDM+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgI2FicEJvZHk+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjbG9hZGVyUmVmPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyXCI+PGkgY2xhc3M9XCJmYSBmYS1wdWxzZSBmYS1zcGlubmVyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPjwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZWRpdEZpZWxkRnJvbTsgZWxzZSBsb2FkZXJSZWZcIj5cbiAgICAgICAgICAgIDxmb3JtIGNsYXNzPVwic2l0ZXMtbW9kYWwtZm9ybVwiIFtmb3JtR3JvdXBdPVwiZWRpdEZpZWxkRnJvbVwiIChrZXlkb3duLmVudGVyKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCIgKHN1Ym1pdCk9XCJlZGl0RmllbGRTYXZlKClcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiAjZWRpdEZpZWxkTW9kYWxTdWJtaXRCdG4gc3R5bGU9XCJkaXNwbGF5OiBub25lXCI+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPnt7J0Ntczo6RGlzcGxheU5hbWUnIHwgYWJwTG9jYWxpemF0aW9ufX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cImRpc3BsYXlOYW1lXCIgcGxhY2Vob2xkZXI9XCJcIiAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tY2hlY2staW5saW5lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cImNoZWNrYm94XCIgdmFsdWU9XCJ0cnVlXCIgZm9ybUNvbnRyb2xOYW1lPVwicmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwicmVxdWlyZWRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIGZvcj1cInJlcXVpcmVkXCI+IHt7J0Ntczo6UmVxdWlyZWQnIHwgYWJwTG9jYWxpemF0aW9ufX0gPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgQGlmKGlzU2hvd0luTGlzdCl7XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLWNoZWNrLWlubGluZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwiY2hlY2tib3hcIiB2YWx1ZT1cInRydWVcIiBmb3JtQ29udHJvbE5hbWU9XCJzaG93SW5MaXN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJzaG93SW5MaXN0XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwic2hvd0luTGlzdFwiPiB7eydDbXM6OlNob3dJbkxpc3QnIHwgYWJwTG9jYWxpemF0aW9ufX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYoaXNFbmFibGVTZWFyY2gpe1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tY2hlY2staW5saW5lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cImNoZWNrYm94XCIgdmFsdWU9XCJ0cnVlXCIgZm9ybUNvbnRyb2xOYW1lPVwiZW5hYmxlU2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImVuYWJsZVNlYXJjaFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwiZW5hYmxlU2VhcmNoXCI+IHt7J0Ntczo6RW5hYmxlU2VhcmNoJyB8IGFicExvY2FsaXphdGlvbn19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgI2FicEZvb3Rlcj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIGFicENsb3NlPnt7J0FicFVpOjpDbG9zZScgfCBhYnBMb2NhbGl6YXRpb259fTwvYnV0dG9uPlxuICAgICAgICA8YWJwLWJ1dHRvbiBpY29uQ2xhc3M9XCJmYSBmYS1jaGVja1wiIFtkaXNhYmxlZF09XCIhZWRpdEZpZWxkRnJvbS52YWxpZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiZWRpdEZpZWxkTW9kYWxTdWJtaXRCdG4ubmF0aXZlRWxlbWVudC5jbGljaygpXCI+e3snQWJwVWk6OlNhdmUnIHwgYWJwTG9jYWxpemF0aW9ufX08L2FicC1idXR0b24+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbjwvYWJwLW1vZGFsPiJdfQ==
|