barsa-sap-ui 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +25 -0
- package/esm2020/barsa-sap-ui.mjs +5 -0
- package/esm2020/lib/apply-conditional-formmatings.directive.mjs +84 -0
- package/esm2020/lib/barsa-asp-viewer/barsa-asp-viewer.component.mjs +109 -0
- package/esm2020/lib/barsa-base-layout/barsa-base-layout.component.mjs +34 -0
- package/esm2020/lib/barsa-date-time-picker/barsa-date-time-picker.component.mjs +71 -0
- package/esm2020/lib/barsa-list-file-linear/barsa-list-file-linear.component.mjs +28 -0
- package/esm2020/lib/barsa-monaco-editor/barsa-monaco-editor.component.mjs +77 -0
- package/esm2020/lib/barsa-network-offline/barsa-network-offline.component.mjs +45 -0
- package/esm2020/lib/barsa-sap-ui-routing.module.mjs +17 -0
- package/esm2020/lib/barsa-sap-ui.module.mjs +277 -0
- package/esm2020/lib/barsa-search-form/barsa-search-form.component.mjs +29 -0
- package/esm2020/lib/barsa-table-header/barsa-table-header.component.mjs +122 -0
- package/esm2020/lib/barsa-table-row/barsa-table-row.component.mjs +57 -0
- package/esm2020/lib/barsa-tinyemce/barsa-tinyemce.component.mjs +334 -0
- package/esm2020/lib/barsa-tree-item/barsa-tree-item.component.mjs +120 -0
- package/esm2020/lib/barsa-tree-item/node-has-one-depth-level.pipe.mjs +19 -0
- package/esm2020/lib/barsa-ulv-main/barsa-ulv-main.component.mjs +156 -0
- package/esm2020/lib/breadcrumb/breadcrumb.component.mjs +45 -0
- package/esm2020/lib/captcha-field/captcha-field.component.mjs +28 -0
- package/esm2020/lib/card-item/card-item.component.mjs +60 -0
- package/esm2020/lib/card-view-content/card-view-content.component.mjs +23 -0
- package/esm2020/lib/col-renderer.directive.mjs +50 -0
- package/esm2020/lib/column-matrix-renderer/column-matrix-renderer.component.mjs +56 -0
- package/esm2020/lib/column-matrix-renderer/matrix-value.pipe.mjs +60 -0
- package/esm2020/lib/column-renderer/column-renderer.component.mjs +84 -0
- package/esm2020/lib/constants.mjs +413 -0
- package/esm2020/lib/custom-date-time/custom-date-time.component.mjs +41 -0
- package/esm2020/lib/device-info-field-base.mjs +23 -0
- package/esm2020/lib/dynamic-page-size.pipe.mjs +26 -0
- package/esm2020/lib/empty-page/empty-page.component.mjs +38 -0
- package/esm2020/lib/file-in-dialog/file-in-dialog.component.mjs +44 -0
- package/esm2020/lib/form-dialog/form-dialog.component.mjs +125 -0
- package/esm2020/lib/form-dialog-less/form-dialog-less.component.mjs +38 -0
- package/esm2020/lib/form-page/form-page.component.mjs +51 -0
- package/esm2020/lib/form-page-base.mjs +129 -0
- package/esm2020/lib/form-toolbar-button/form-toolbar-button.component.mjs +44 -0
- package/esm2020/lib/form-wizard/form-wizard.component.mjs +21 -0
- package/esm2020/lib/fullscreen-dialog.directive.mjs +40 -0
- package/esm2020/lib/fundamental-dynamic-form/fundamental-dynamic-form.component.mjs +152 -0
- package/esm2020/lib/gantt-dhtml-chart-view/gantt-dhtml-chart-view.component.mjs +203 -0
- package/esm2020/lib/global-search/global-search.component.mjs +26 -0
- package/esm2020/lib/global-search-module/global-search-module.component.mjs +30 -0
- package/esm2020/lib/global-search-panel/global-search-panel.component.mjs +30 -0
- package/esm2020/lib/header-avatar/header-avatar.component.mjs +19 -0
- package/esm2020/lib/header-facet-form/header-facet-form.component.mjs +22 -0
- package/esm2020/lib/header-facet-key-value/header-facet-key-value.component.mjs +31 -0
- package/esm2020/lib/header-facet-microchart/header-facet-microchart.component.mjs +21 -0
- package/esm2020/lib/header-facet-plain-text/header-facet-plain-text.component.mjs +28 -0
- package/esm2020/lib/header-facet-progress/header-facet-progress.component.mjs +26 -0
- package/esm2020/lib/header-facet-rate/header-facet-rate.component.mjs +26 -0
- package/esm2020/lib/htree-create-new/htree-create-new.component.mjs +49 -0
- package/esm2020/lib/hyperlink/hyperlink.component.mjs +19 -0
- package/esm2020/lib/index.mjs +412 -0
- package/esm2020/lib/inline-save-and-cancel/inline-save-and-cancel.component.mjs +32 -0
- package/esm2020/lib/layout-actions/layout-actions.component.mjs +65 -0
- package/esm2020/lib/layout-control/layout-control.component.mjs +214 -0
- package/esm2020/lib/layout-wizard/layout-wizard.component.mjs +133 -0
- package/esm2020/lib/list-item/list-item.component.mjs +30 -0
- package/esm2020/lib/ly-empty-space/ly-empty-space.component.mjs +37 -0
- package/esm2020/lib/ly-horizontal-layout/ly-horizontal-layout.component.mjs +70 -0
- package/esm2020/lib/ly-label/ly-label.component.mjs +31 -0
- package/esm2020/lib/ly-layout-container/ly-layout-container.component.mjs +83 -0
- package/esm2020/lib/ly-layout-container-of-root/ly-layout-container-of-root.component.mjs +17 -0
- package/esm2020/lib/ly-layout-field-label/ly-layout-field-label.component.mjs +24 -0
- package/esm2020/lib/ly-layout-panel/ly-layout-panel.component.mjs +64 -0
- package/esm2020/lib/ly-line/ly-line.component.mjs +56 -0
- package/esm2020/lib/ly-simple-label/ly-simple-label.component.mjs +27 -0
- package/esm2020/lib/ly-tab-container/ly-tab-container.component.mjs +43 -0
- package/esm2020/lib/ly-tab-page/ly-tab-page.component.mjs +35 -0
- package/esm2020/lib/ly-vertical-layout/ly-vertical-layout.component.mjs +49 -0
- package/esm2020/lib/manage-filters-report/manage-filters-report.component.mjs +45 -0
- package/esm2020/lib/mask/mask.component.mjs +22 -0
- package/esm2020/lib/message-strip/message-strip.component.mjs +28 -0
- package/esm2020/lib/models/grid-data-provider.mjs +219 -0
- package/esm2020/lib/models/grid-view.mjs +2 -0
- package/esm2020/lib/models/index.mjs +2 -0
- package/esm2020/lib/no-data/no-data.component.mjs +20 -0
- package/esm2020/lib/page-with-form-handler-base.mjs +42 -0
- package/esm2020/lib/page-with-header/page-with-header.component.mjs +76 -0
- package/esm2020/lib/progress-indicator/progress-indicator.component.mjs +18 -0
- package/esm2020/lib/report-navigator/report-navigator.component.mjs +62 -0
- package/esm2020/lib/report-new-top-form/report-new-top-form.component.mjs +60 -0
- package/esm2020/lib/report-search-fields-hidden-settings/report-search-fields-hidden-settings.component.mjs +35 -0
- package/esm2020/lib/report-search-fields-manage/report-search-fields-manage.component.mjs +99 -0
- package/esm2020/lib/report-search-panel-save/report-search-panel-save.component.mjs +90 -0
- package/esm2020/lib/report-tree-base.mjs +405 -0
- package/esm2020/lib/report-view-renderer.directive.mjs +248 -0
- package/esm2020/lib/responsive-toolbar/responsive-toolbar.component.mjs +50 -0
- package/esm2020/lib/responsive-toolbar-renderer/responsive-toolbar-renderer.component.mjs +84 -0
- package/esm2020/lib/rich-text-static/rich-text-static.component.mjs +35 -0
- package/esm2020/lib/sap-font-class.pipe.mjs +29 -0
- package/esm2020/lib/sap-font.pipe.mjs +29 -0
- package/esm2020/lib/sap-ui-report-base.component.mjs +689 -0
- package/esm2020/lib/search-panel/search-panel.component.mjs +40 -0
- package/esm2020/lib/static-text/static-text.component.mjs +15 -0
- package/esm2020/lib/title/title.component.mjs +15 -0
- package/esm2020/lib/ui-asp-report-viewer/ui-asp-report-viewer.component.mjs +14 -0
- package/esm2020/lib/ui-button/ui-button.component.mjs +31 -0
- package/esm2020/lib/ui-calendar/ui-calendar.component.mjs +46 -0
- package/esm2020/lib/ui-card-view/ui-card-view.component.mjs +60 -0
- package/esm2020/lib/ui-card-view-horizontal-group/ui-card-view-horizontal-group.component.mjs +27 -0
- package/esm2020/lib/ui-check-box/ui-check-box.component.mjs +29 -0
- package/esm2020/lib/ui-color-ui/ui-color-ui.component.mjs +50 -0
- package/esm2020/lib/ui-container-with-button/ui-container-with-button.component.mjs +34 -0
- package/esm2020/lib/ui-date-range-ex/ui-date-range-ex.component.mjs +194 -0
- package/esm2020/lib/ui-date-time/ui-date-time.component.mjs +116 -0
- package/esm2020/lib/ui-editable-grid/ui-editable-grid.component.mjs +110 -0
- package/esm2020/lib/ui-exception-form/ui-exception-form.component.mjs +61 -0
- package/esm2020/lib/ui-file-linear-list-box/ui-file-linear-list-box.component.mjs +181 -0
- package/esm2020/lib/ui-form-panel/ui-form-panel.component.mjs +43 -0
- package/esm2020/lib/ui-form-panel-toolbar/ui-form-panel-toolbar.component.mjs +26 -0
- package/esm2020/lib/ui-gantt-chart/ui-gantt-chart.component.mjs +32 -0
- package/esm2020/lib/ui-graph/ui-graph.component.mjs +16 -0
- package/esm2020/lib/ui-grid/ui-grid.component.mjs +25 -0
- package/esm2020/lib/ui-grid-columns/ui-grid-columns.component.mjs +44 -0
- package/esm2020/lib/ui-grid-filter-item/ui-grid-filter-item.component.mjs +67 -0
- package/esm2020/lib/ui-grid-filter-settings/ui-grid-filter-settings.component.mjs +76 -0
- package/esm2020/lib/ui-grid-sort-item/ui-grid-sort-item.component.mjs +59 -0
- package/esm2020/lib/ui-grid-sort-setting/ui-grid-sort-setting.component.mjs +156 -0
- package/esm2020/lib/ui-info-bar-panel/ui-info-bar-panel.component.mjs +11 -0
- package/esm2020/lib/ui-label/ui-label.component.mjs +12 -0
- package/esm2020/lib/ui-linear-list-container-with-button/ui-linear-list-container-with-button.component.mjs +299 -0
- package/esm2020/lib/ui-list-view/ui-list-view.component.mjs +44 -0
- package/esm2020/lib/ui-matrix-view/ui-matrix-view.component.mjs +125 -0
- package/esm2020/lib/ui-mo-info-combo-viewer/ui-mo-info-combo-viewer.component.mjs +19 -0
- package/esm2020/lib/ui-mo-info-general-object-ui/ui-mo-info-general-object-ui.component.mjs +13 -0
- package/esm2020/lib/ui-mo-info-sub-form-ui/ui-mo-info-sub-form-ui.component.mjs +46 -0
- package/esm2020/lib/ui-mo-info-ulv-combo/ui-mo-info-ulv-combo.component.mjs +335 -0
- package/esm2020/lib/ui-monaco-editor/ui-monaco-editor.component.mjs +18 -0
- package/esm2020/lib/ui-multi-select-combo/ui-multi-select-combo.component.mjs +83 -0
- package/esm2020/lib/ui-num-decimal-ui/ui-num-decimal-ui.component.mjs +24 -0
- package/esm2020/lib/ui-num-int-ui/ui-num-int-ui.component.mjs +21 -0
- package/esm2020/lib/ui-pdf-viewer/ui-pdf-viewer.component.mjs +216 -0
- package/esm2020/lib/ui-picture-file/ui-picture-file.component.mjs +95 -0
- package/esm2020/lib/ui-pictures-info/ui-pictures-info.component.mjs +215 -0
- package/esm2020/lib/ui-radio-group/ui-radio-group.component.mjs +24 -0
- package/esm2020/lib/ui-read-only-field/ui-read-only-field.component.mjs +29 -0
- package/esm2020/lib/ui-report-container/ui-report-container.component.mjs +46 -0
- package/esm2020/lib/ui-search-command-info-ui/ui-search-command-info-ui.component.mjs +24 -0
- package/esm2020/lib/ui-simple-combo/ui-simple-combo.component.mjs +29 -0
- package/esm2020/lib/ui-single-picture/ui-single-picture.component.mjs +36 -0
- package/esm2020/lib/ui-switch-button/ui-switch-button.component.mjs +20 -0
- package/esm2020/lib/ui-table-view/ui-table-view.component.mjs +106 -0
- package/esm2020/lib/ui-text-area/ui-text-area.component.mjs +44 -0
- package/esm2020/lib/ui-text-field/ui-text-field.component.mjs +47 -0
- package/esm2020/lib/ui-text-field-auto-complete/ui-text-field-auto-complete.component.mjs +47 -0
- package/esm2020/lib/ui-time-span/ui-time-span.component.mjs +24 -0
- package/esm2020/lib/ui-tinymce/ui-tinymce.component.mjs +53 -0
- package/esm2020/lib/ui-tree/ui-tree.component.mjs +69 -0
- package/esm2020/lib/ui-tree-view/ui-tree-view.component.mjs +75 -0
- package/esm2020/lib/ui-ulv-form-multi-select-ui/ui-ulv-form-multi-select-ui.component.mjs +24 -0
- package/esm2020/lib/ui-ulv-main-ui/ui-ulv-main-ui.component.mjs +276 -0
- package/esm2020/lib/ui-workflow-panel-ui/ui-workflow-panel-ui.component.mjs +26 -0
- package/esm2020/lib/ul-loading-mask-ui/ul-loading-mask-ui.component.mjs +86 -0
- package/esm2020/lib/ul-msg-box-adapter/ul-msg-box-adapter.component.mjs +117 -0
- package/esm2020/lib/ul-notify-popup/ul-notify-popup.component.mjs +114 -0
- package/esm2020/lib/ul-toast-adapter/ul-toast-adapter.component.mjs +44 -0
- package/esm2020/lib/ulv-column-settings/ulv-column-settings.component.mjs +53 -0
- package/esm2020/lib/ulv-context-menu/ulv-context-menu.component.mjs +74 -0
- package/esm2020/lib/ulv-filter-settings/ulv-filter-settings.component.mjs +43 -0
- package/esm2020/lib/ulv-form-multi-select/ulv-form-multi-select.component.mjs +183 -0
- package/esm2020/lib/ulv-groupby-settings/ulv-groupby-settings.component.mjs +44 -0
- package/esm2020/lib/ulv-paging/ulv-paging.component.mjs +73 -0
- package/esm2020/lib/ulv-selection/ulv-selection.component.mjs +66 -0
- package/esm2020/lib/ulv-settings/ulv-settings.component.mjs +117 -0
- package/esm2020/lib/ulv-sort-settings/ulv-sort-settings.component.mjs +44 -0
- package/esm2020/lib/ulv-toolbar/ulv-toolbar.component.mjs +110 -0
- package/esm2020/lib/upload-file-status.pipe.mjs +28 -0
- package/esm2020/lib/wizard-layout.directive.mjs +102 -0
- package/esm2020/public-api.mjs +170 -0
- package/fesm2015/barsa-sap-ui.mjs +11437 -0
- package/fesm2015/barsa-sap-ui.mjs.map +1 -0
- package/fesm2020/barsa-sap-ui.mjs +11427 -0
- package/fesm2020/barsa-sap-ui.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/apply-conditional-formmatings.directive.d.ts +25 -0
- package/lib/barsa-asp-viewer/barsa-asp-viewer.component.d.ts +26 -0
- package/lib/barsa-base-layout/barsa-base-layout.component.d.ts +18 -0
- package/lib/barsa-date-time-picker/barsa-date-time-picker.component.d.ts +18 -0
- package/lib/barsa-list-file-linear/barsa-list-file-linear.component.d.ts +8 -0
- package/lib/barsa-monaco-editor/barsa-monaco-editor.component.d.ts +18 -0
- package/lib/barsa-network-offline/barsa-network-offline.component.d.ts +13 -0
- package/lib/barsa-sap-ui-routing.module.d.ts +7 -0
- package/lib/barsa-sap-ui.module.d.ts +181 -0
- package/lib/barsa-search-form/barsa-search-form.component.d.ts +8 -0
- package/lib/barsa-table-header/barsa-table-header.component.d.ts +37 -0
- package/lib/barsa-table-row/barsa-table-row.component.d.ts +20 -0
- package/lib/barsa-tinyemce/barsa-tinyemce.component.d.ts +43 -0
- package/lib/barsa-tree-item/barsa-tree-item.component.d.ts +48 -0
- package/lib/barsa-tree-item/node-has-one-depth-level.pipe.d.ts +8 -0
- package/lib/barsa-ulv-main/barsa-ulv-main.component.d.ts +52 -0
- package/lib/breadcrumb/breadcrumb.component.d.ts +17 -0
- package/lib/captcha-field/captcha-field.component.d.ts +10 -0
- package/lib/card-item/card-item.component.d.ts +17 -0
- package/lib/card-view-content/card-view-content.component.d.ts +8 -0
- package/lib/col-renderer.directive.d.ts +12 -0
- package/lib/column-matrix-renderer/column-matrix-renderer.component.d.ts +23 -0
- package/lib/column-matrix-renderer/matrix-value.pipe.d.ts +8 -0
- package/lib/column-renderer/column-renderer.component.d.ts +29 -0
- package/lib/constants.d.ts +6 -0
- package/lib/custom-date-time/custom-date-time.component.d.ts +26 -0
- package/lib/device-info-field-base.d.ts +12 -0
- package/lib/dynamic-page-size.pipe.d.ts +8 -0
- package/lib/empty-page/empty-page.component.d.ts +11 -0
- package/lib/file-in-dialog/file-in-dialog.component.d.ts +16 -0
- package/lib/form-dialog/form-dialog.component.d.ts +40 -0
- package/lib/form-dialog-less/form-dialog-less.component.d.ts +27 -0
- package/lib/form-page/form-page.component.d.ts +17 -0
- package/lib/form-page-base.d.ts +26 -0
- package/lib/form-toolbar-button/form-toolbar-button.component.d.ts +18 -0
- package/lib/form-wizard/form-wizard.component.d.ts +8 -0
- package/lib/fullscreen-dialog.directive.d.ts +14 -0
- package/lib/fundamental-dynamic-form/fundamental-dynamic-form.component.d.ts +58 -0
- package/lib/gantt-dhtml-chart-view/gantt-dhtml-chart-view.component.d.ts +18 -0
- package/lib/global-search/global-search.component.d.ts +12 -0
- package/lib/global-search-module/global-search-module.component.d.ts +18 -0
- package/lib/global-search-panel/global-search-panel.component.d.ts +11 -0
- package/lib/header-avatar/header-avatar.component.d.ts +8 -0
- package/lib/header-facet-form/header-facet-form.component.d.ts +9 -0
- package/lib/header-facet-key-value/header-facet-key-value.component.d.ts +11 -0
- package/lib/header-facet-microchart/header-facet-microchart.component.d.ts +8 -0
- package/lib/header-facet-plain-text/header-facet-plain-text.component.d.ts +11 -0
- package/lib/header-facet-progress/header-facet-progress.component.d.ts +11 -0
- package/lib/header-facet-rate/header-facet-rate.component.d.ts +11 -0
- package/lib/htree-create-new/htree-create-new.component.d.ts +13 -0
- package/lib/hyperlink/hyperlink.component.d.ts +7 -0
- package/lib/index.d.ts +85 -0
- package/lib/inline-save-and-cancel/inline-save-and-cancel.component.d.ts +11 -0
- package/lib/layout-actions/layout-actions.component.d.ts +23 -0
- package/lib/layout-control/layout-control.component.d.ts +65 -0
- package/lib/layout-wizard/layout-wizard.component.d.ts +27 -0
- package/lib/list-item/list-item.component.d.ts +13 -0
- package/lib/ly-empty-space/ly-empty-space.component.d.ts +14 -0
- package/lib/ly-horizontal-layout/ly-horizontal-layout.component.d.ts +22 -0
- package/lib/ly-label/ly-label.component.d.ts +15 -0
- package/lib/ly-layout-container/ly-layout-container.component.d.ts +26 -0
- package/lib/ly-layout-container-of-root/ly-layout-container-of-root.component.d.ts +8 -0
- package/lib/ly-layout-field-label/ly-layout-field-label.component.d.ts +13 -0
- package/lib/ly-layout-panel/ly-layout-panel.component.d.ts +25 -0
- package/lib/ly-line/ly-line.component.d.ts +17 -0
- package/lib/ly-simple-label/ly-simple-label.component.d.ts +11 -0
- package/lib/ly-tab-container/ly-tab-container.component.d.ts +16 -0
- package/lib/ly-tab-page/ly-tab-page.component.d.ts +18 -0
- package/lib/ly-vertical-layout/ly-vertical-layout.component.d.ts +18 -0
- package/lib/manage-filters-report/manage-filters-report.component.d.ts +24 -0
- package/lib/mask/mask.component.d.ts +9 -0
- package/lib/message-strip/message-strip.component.d.ts +11 -0
- package/lib/models/grid-data-provider.d.ts +26 -0
- package/lib/models/grid-view.d.ts +64 -0
- package/lib/models/index.d.ts +1 -0
- package/lib/no-data/no-data.component.d.ts +8 -0
- package/lib/page-with-form-handler-base.d.ts +10 -0
- package/lib/page-with-header/page-with-header.component.d.ts +29 -0
- package/lib/progress-indicator/progress-indicator.component.d.ts +8 -0
- package/lib/report-navigator/report-navigator.component.d.ts +21 -0
- package/lib/report-new-top-form/report-new-top-form.component.d.ts +18 -0
- package/lib/report-search-fields-hidden-settings/report-search-fields-hidden-settings.component.d.ts +14 -0
- package/lib/report-search-fields-manage/report-search-fields-manage.component.d.ts +20 -0
- package/lib/report-search-panel-save/report-search-panel-save.component.d.ts +27 -0
- package/lib/report-tree-base.d.ts +61 -0
- package/lib/report-view-renderer.directive.d.ts +82 -0
- package/lib/responsive-toolbar/responsive-toolbar.component.d.ts +19 -0
- package/lib/responsive-toolbar-renderer/responsive-toolbar-renderer.component.d.ts +24 -0
- package/lib/rich-text-static/rich-text-static.component.d.ts +24 -0
- package/lib/sap-font-class.pipe.d.ts +8 -0
- package/lib/sap-font.pipe.d.ts +9 -0
- package/lib/sap-ui-report-base.component.d.ts +133 -0
- package/lib/search-panel/search-panel.component.d.ts +13 -0
- package/lib/static-text/static-text.component.d.ts +7 -0
- package/lib/title/title.component.d.ts +7 -0
- package/lib/ui-asp-report-viewer/ui-asp-report-viewer.component.d.ts +7 -0
- package/lib/ui-button/ui-button.component.d.ts +11 -0
- package/lib/ui-calendar/ui-calendar.component.d.ts +16 -0
- package/lib/ui-card-view/ui-card-view.component.d.ts +16 -0
- package/lib/ui-card-view-horizontal-group/ui-card-view-horizontal-group.component.d.ts +9 -0
- package/lib/ui-check-box/ui-check-box.component.d.ts +12 -0
- package/lib/ui-color-ui/ui-color-ui.component.d.ts +16 -0
- package/lib/ui-container-with-button/ui-container-with-button.component.d.ts +11 -0
- package/lib/ui-date-range-ex/ui-date-range-ex.component.d.ts +36 -0
- package/lib/ui-date-time/ui-date-time.component.d.ts +24 -0
- package/lib/ui-editable-grid/ui-editable-grid.component.d.ts +43 -0
- package/lib/ui-exception-form/ui-exception-form.component.d.ts +16 -0
- package/lib/ui-file-linear-list-box/ui-file-linear-list-box.component.d.ts +51 -0
- package/lib/ui-form-panel/ui-form-panel.component.d.ts +24 -0
- package/lib/ui-form-panel-toolbar/ui-form-panel-toolbar.component.d.ts +13 -0
- package/lib/ui-gantt-chart/ui-gantt-chart.component.d.ts +15 -0
- package/lib/ui-graph/ui-graph.component.d.ts +9 -0
- package/lib/ui-grid/ui-grid.component.d.ts +12 -0
- package/lib/ui-grid-columns/ui-grid-columns.component.d.ts +14 -0
- package/lib/ui-grid-filter-item/ui-grid-filter-item.component.d.ts +19 -0
- package/lib/ui-grid-filter-settings/ui-grid-filter-settings.component.d.ts +24 -0
- package/lib/ui-grid-sort-item/ui-grid-sort-item.component.d.ts +25 -0
- package/lib/ui-grid-sort-setting/ui-grid-sort-setting.component.d.ts +28 -0
- package/lib/ui-info-bar-panel/ui-info-bar-panel.component.d.ts +5 -0
- package/lib/ui-label/ui-label.component.d.ts +6 -0
- package/lib/ui-linear-list-container-with-button/ui-linear-list-container-with-button.component.d.ts +62 -0
- package/lib/ui-list-view/ui-list-view.component.d.ts +15 -0
- package/lib/ui-matrix-view/ui-matrix-view.component.d.ts +45 -0
- package/lib/ui-mo-info-combo-viewer/ui-mo-info-combo-viewer.component.d.ts +7 -0
- package/lib/ui-mo-info-general-object-ui/ui-mo-info-general-object-ui.component.d.ts +6 -0
- package/lib/ui-mo-info-sub-form-ui/ui-mo-info-sub-form-ui.component.d.ts +13 -0
- package/lib/ui-mo-info-ulv-combo/ui-mo-info-ulv-combo.component.d.ts +78 -0
- package/lib/ui-monaco-editor/ui-monaco-editor.component.d.ts +7 -0
- package/lib/ui-multi-select-combo/ui-multi-select-combo.component.d.ts +21 -0
- package/lib/ui-num-decimal-ui/ui-num-decimal-ui.component.d.ts +11 -0
- package/lib/ui-num-int-ui/ui-num-int-ui.component.d.ts +10 -0
- package/lib/ui-pdf-viewer/ui-pdf-viewer.component.d.ts +63 -0
- package/lib/ui-picture-file/ui-picture-file.component.d.ts +27 -0
- package/lib/ui-pictures-info/ui-pictures-info.component.d.ts +68 -0
- package/lib/ui-radio-group/ui-radio-group.component.d.ts +9 -0
- package/lib/ui-read-only-field/ui-read-only-field.component.d.ts +11 -0
- package/lib/ui-report-container/ui-report-container.component.d.ts +17 -0
- package/lib/ui-search-command-info-ui/ui-search-command-info-ui.component.d.ts +9 -0
- package/lib/ui-simple-combo/ui-simple-combo.component.d.ts +13 -0
- package/lib/ui-single-picture/ui-single-picture.component.d.ts +13 -0
- package/lib/ui-switch-button/ui-switch-button.component.d.ts +11 -0
- package/lib/ui-table-view/ui-table-view.component.d.ts +29 -0
- package/lib/ui-text-area/ui-text-area.component.d.ts +15 -0
- package/lib/ui-text-field/ui-text-field.component.d.ts +14 -0
- package/lib/ui-text-field-auto-complete/ui-text-field-auto-complete.component.d.ts +13 -0
- package/lib/ui-time-span/ui-time-span.component.d.ts +10 -0
- package/lib/ui-tinymce/ui-tinymce.component.d.ts +17 -0
- package/lib/ui-tree/ui-tree.component.d.ts +32 -0
- package/lib/ui-tree-view/ui-tree-view.component.d.ts +41 -0
- package/lib/ui-ulv-form-multi-select-ui/ui-ulv-form-multi-select-ui.component.d.ts +9 -0
- package/lib/ui-ulv-main-ui/ui-ulv-main-ui.component.d.ts +67 -0
- package/lib/ui-workflow-panel-ui/ui-workflow-panel-ui.component.d.ts +16 -0
- package/lib/ul-loading-mask-ui/ul-loading-mask-ui.component.d.ts +20 -0
- package/lib/ul-msg-box-adapter/ul-msg-box-adapter.component.d.ts +48 -0
- package/lib/ul-notify-popup/ul-notify-popup.component.d.ts +41 -0
- package/lib/ul-toast-adapter/ul-toast-adapter.component.d.ts +13 -0
- package/lib/ulv-column-settings/ulv-column-settings.component.d.ts +19 -0
- package/lib/ulv-context-menu/ulv-context-menu.component.d.ts +24 -0
- package/lib/ulv-filter-settings/ulv-filter-settings.component.d.ts +19 -0
- package/lib/ulv-form-multi-select/ulv-form-multi-select.component.d.ts +26 -0
- package/lib/ulv-groupby-settings/ulv-groupby-settings.component.d.ts +16 -0
- package/lib/ulv-paging/ulv-paging.component.d.ts +27 -0
- package/lib/ulv-selection/ulv-selection.component.d.ts +43 -0
- package/lib/ulv-settings/ulv-settings.component.d.ts +43 -0
- package/lib/ulv-sort-settings/ulv-sort-settings.component.d.ts +16 -0
- package/lib/ulv-toolbar/ulv-toolbar.component.d.ts +47 -0
- package/lib/upload-file-status.pipe.d.ts +9 -0
- package/lib/wizard-layout.directive.d.ts +39 -0
- package/package.json +31 -0
- package/public-api.d.ts +166 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Component, ElementRef, ViewChild } from '@angular/core';
|
|
2
|
+
import { NumberBaseComponent } from 'barsa-novin-ray-core';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@fundamental-ngx/core/form";
|
|
5
|
+
import * as i2 from "@angular/common";
|
|
6
|
+
export class UiNumIntUiComponent extends NumberBaseComponent {
|
|
7
|
+
ngOnInit() {
|
|
8
|
+
this.inputElement = this.inputRef.nativeElement;
|
|
9
|
+
super.ngOnInit();
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
UiNumIntUiComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: UiNumIntUiComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
13
|
+
UiNumIntUiComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: UiNumIntUiComponent, selector: "bsu-ui-num-int-ui", viewQueries: [{ propertyName: "inputRef", first: true, predicate: ["inputRef"], descendants: true, read: ElementRef, static: true }], usesInheritance: true, ngImport: i0, template: "<input\r\n #inputRef\r\n fd-form-control\r\n [placeholder]=\"Setting.NullText || ''\"\r\n [attr.readonly]=\"(readonly$ | async) === true ? true : null\"\r\n [attr.disabled]=\"(disable$ | async) === true ? true : null\"\r\n [type]=\"Setting.IsPassword ? 'password' : 'text'\"\r\n [type]=\"hasMask ? 'text' : 'number'\"\r\n [id]=\"id\"\r\n [style.direction]=\"Setting.IsLtr === true ? 'ltr' : null\"\r\n (keydown)=\"onKeyDown($event)\"\r\n (input)=\"onValueChange($event)\"\r\n/>\r\n", styles: [":host{display:block}.number-input{display:block}\n"], dependencies: [{ kind: "component", type: i1.FormControlComponent, selector: "[fd-form-control]", inputs: ["state", "type", "class"] }, { kind: "directive", type: i1.InputFormControlDirective, selector: "input[fd-form-control]" }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }] });
|
|
14
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: UiNumIntUiComponent, decorators: [{
|
|
15
|
+
type: Component,
|
|
16
|
+
args: [{ selector: 'bsu-ui-num-int-ui', template: "<input\r\n #inputRef\r\n fd-form-control\r\n [placeholder]=\"Setting.NullText || ''\"\r\n [attr.readonly]=\"(readonly$ | async) === true ? true : null\"\r\n [attr.disabled]=\"(disable$ | async) === true ? true : null\"\r\n [type]=\"Setting.IsPassword ? 'password' : 'text'\"\r\n [type]=\"hasMask ? 'text' : 'number'\"\r\n [id]=\"id\"\r\n [style.direction]=\"Setting.IsLtr === true ? 'ltr' : null\"\r\n (keydown)=\"onKeyDown($event)\"\r\n (input)=\"onValueChange($event)\"\r\n/>\r\n", styles: [":host{display:block}.number-input{display:block}\n"] }]
|
|
17
|
+
}], propDecorators: { inputRef: [{
|
|
18
|
+
type: ViewChild,
|
|
19
|
+
args: ['inputRef', { read: ElementRef, static: true }]
|
|
20
|
+
}] } });
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktbnVtLWludC11aS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1zYXAtdWkvc3JjL2xpYi91aS1udW0taW50LXVpL3VpLW51bS1pbnQtdWkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvdWktbnVtLWludC11aS91aS1udW0taW50LXVpLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7OztBQU0zRCxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsbUJBQW1CO0lBS3hELFFBQVE7UUFDSixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDO1FBQ2hELEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNyQixDQUFDOztnSEFSUSxtQkFBbUI7b0dBQW5CLG1CQUFtQiwwSUFDRyxVQUFVLGtFQ1Q3QyxvZ0JBYUE7MkZETGEsbUJBQW1CO2tCQUwvQixTQUFTOytCQUNJLG1CQUFtQjs4QkFNN0IsUUFBUTtzQkFEUCxTQUFTO3VCQUFDLFVBQVUsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IE51bWJlckJhc2VDb21wb25lbnQgfSBmcm9tICdiYXJzYS1ub3Zpbi1yYXktY29yZSc7XHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdic3UtdWktbnVtLWludC11aScsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vdWktbnVtLWludC11aS5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi91aS1udW0taW50LXVpLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFVpTnVtSW50VWlDb21wb25lbnQgZXh0ZW5kcyBOdW1iZXJCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgIEBWaWV3Q2hpbGQoJ2lucHV0UmVmJywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSlcclxuICAgIGlucHV0UmVmOiBFbGVtZW50UmVmO1xyXG4gICAgaW5wdXRFbGVtZW50OiBIVE1MSW5wdXRFbGVtZW50IHwgbnVsbCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlucHV0RWxlbWVudCA9IHRoaXMuaW5wdXRSZWYubmF0aXZlRWxlbWVudDtcclxuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG4gICAgfVxyXG59XHJcbiIsIjxpbnB1dFxyXG4gICAgI2lucHV0UmVmXHJcbiAgICBmZC1mb3JtLWNvbnRyb2xcclxuICAgIFtwbGFjZWhvbGRlcl09XCJTZXR0aW5nLk51bGxUZXh0IHx8ICcnXCJcclxuICAgIFthdHRyLnJlYWRvbmx5XT1cIihyZWFkb25seSQgfCBhc3luYykgPT09IHRydWUgPyB0cnVlIDogbnVsbFwiXHJcbiAgICBbYXR0ci5kaXNhYmxlZF09XCIoZGlzYWJsZSQgfCBhc3luYykgPT09IHRydWUgPyB0cnVlIDogbnVsbFwiXHJcbiAgICBbdHlwZV09XCJTZXR0aW5nLklzUGFzc3dvcmQgPyAncGFzc3dvcmQnIDogJ3RleHQnXCJcclxuICAgIFt0eXBlXT1cImhhc01hc2sgPyAndGV4dCcgOiAnbnVtYmVyJ1wiXHJcbiAgICBbaWRdPVwiaWRcIlxyXG4gICAgW3N0eWxlLmRpcmVjdGlvbl09XCJTZXR0aW5nLklzTHRyID09PSB0cnVlID8gJ2x0cicgOiBudWxsXCJcclxuICAgIChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQpXCJcclxuICAgIChpbnB1dCk9XCJvblZhbHVlQ2hhbmdlKCRldmVudClcIlxyXG4vPlxyXG4iXX0=
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component } from '@angular/core';
|
|
2
|
+
import { exhaustMap, filter, takeUntil, tap } from 'rxjs/operators';
|
|
3
|
+
import { BarsaApi, UploadService, FilesValidationHelper, isImage, getImagePath, getIcon, getValidExtension } from 'barsa-novin-ray-core';
|
|
4
|
+
import { DeviceInfoFieldBaseComponent } from '../device-info-field-base';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@angular/common";
|
|
7
|
+
import * as i2 from "@angular/forms";
|
|
8
|
+
import * as i3 from "barsa-novin-ray-core";
|
|
9
|
+
import * as i4 from "@fundamental-ngx/core/busy-indicator";
|
|
10
|
+
import * as i5 from "@fundamental-ngx/core/button";
|
|
11
|
+
import * as i6 from "@fundamental-ngx/core/file-uploader";
|
|
12
|
+
import * as i7 from "@fundamental-ngx/core/object-identifier";
|
|
13
|
+
import * as i8 from "@fundamental-ngx/core/toolbar";
|
|
14
|
+
export class UiPdfViewerComponent extends DeviceInfoFieldBaseComponent {
|
|
15
|
+
constructor() {
|
|
16
|
+
super(...arguments);
|
|
17
|
+
this.canDelete = true;
|
|
18
|
+
this.canSave = true;
|
|
19
|
+
}
|
|
20
|
+
ngOnInit() {
|
|
21
|
+
this.progress$ = this._uploadService.progress$;
|
|
22
|
+
this.uploadState$ = this._uploadService.uploadState$;
|
|
23
|
+
this.uploading$ = this._uploadService.uploading$;
|
|
24
|
+
super.ngOnInit();
|
|
25
|
+
this.value$.subscribe((value) => {
|
|
26
|
+
this.value = value;
|
|
27
|
+
this._refresh();
|
|
28
|
+
});
|
|
29
|
+
this.refresh$.subscribe((fromServer) => {
|
|
30
|
+
this._refresh(fromServer);
|
|
31
|
+
});
|
|
32
|
+
this.filesValidationHelper = new FilesValidationHelper(this.Setting.MaxFileCount, this.Setting.MaxFileSizeKb, this.Setting.MaxTotalFileSizeKb);
|
|
33
|
+
this._refreshButtons();
|
|
34
|
+
this._refresh();
|
|
35
|
+
this.validExtension = this.context.useWordEditor
|
|
36
|
+
? '.doc,.docx'
|
|
37
|
+
: getValidExtension(this.Setting.ValidExtensions);
|
|
38
|
+
this.singleControl = this.Setting.ViewType === 'SingleFileControl';
|
|
39
|
+
}
|
|
40
|
+
onEdit() {
|
|
41
|
+
this._commandClickHandler('Edit');
|
|
42
|
+
}
|
|
43
|
+
onView(event) {
|
|
44
|
+
const e = { ctrlKey: event.ctrlKey };
|
|
45
|
+
this._commandClickHandler('OOView', e);
|
|
46
|
+
}
|
|
47
|
+
onDownload() {
|
|
48
|
+
this._commandClickHandler('Download');
|
|
49
|
+
}
|
|
50
|
+
onFileSelection(files) {
|
|
51
|
+
this._uploadToServer(files);
|
|
52
|
+
}
|
|
53
|
+
onDelete() {
|
|
54
|
+
this._commandClickHandler('Delete');
|
|
55
|
+
}
|
|
56
|
+
onEditInWord() {
|
|
57
|
+
this._commandClickHandler('ODEdit');
|
|
58
|
+
}
|
|
59
|
+
onOfficeOnline(event) {
|
|
60
|
+
const e = { ctrlKey: event.ctrlKey };
|
|
61
|
+
this._commandClickHandler('OOEdit', e);
|
|
62
|
+
}
|
|
63
|
+
onRefresh() {
|
|
64
|
+
this._commandClickHandler('Refresh');
|
|
65
|
+
}
|
|
66
|
+
DownloadFileId(fileId, viewInBrowser, convertTo, forOcx, isOfficeOnline) {
|
|
67
|
+
setTimeout(() => {
|
|
68
|
+
BarsaApi.Ul.LoadingMask.Mask(this._el.nativeElement);
|
|
69
|
+
}, 30);
|
|
70
|
+
BarsaApi.Common.File.DownloadFileContent.bind(this)({
|
|
71
|
+
fileId,
|
|
72
|
+
fileUrl: null,
|
|
73
|
+
viewInBrowser,
|
|
74
|
+
convertTo,
|
|
75
|
+
isOfficeOnline,
|
|
76
|
+
forOcx
|
|
77
|
+
}, (response) => {
|
|
78
|
+
if (response.succeed) {
|
|
79
|
+
const blob = BarsaApi.Common.File.B64toBlob(response.content, response.contentType);
|
|
80
|
+
const url = window.URL || window.webkitURL;
|
|
81
|
+
this.pdfSource = this._domSanitizer.bypassSecurityTrustResourceUrl(url.createObjectURL(blob));
|
|
82
|
+
this.hasPdf = true;
|
|
83
|
+
this._cdr.detectChanges();
|
|
84
|
+
this._hideMask();
|
|
85
|
+
}
|
|
86
|
+
}, (error) => {
|
|
87
|
+
this._hideMask();
|
|
88
|
+
alert(error);
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
_uploadToServer(selectedFiles) {
|
|
92
|
+
this.filesValidationHelper
|
|
93
|
+
.validateFiles(selectedFiles)
|
|
94
|
+
.pipe(takeUntil(this._onDestroy$), filter((files) => files.length > 0), exhaustMap((files) => this._uploadFile(files)))
|
|
95
|
+
.subscribe();
|
|
96
|
+
}
|
|
97
|
+
_refreshButtons() {
|
|
98
|
+
this._refreshButtonsHelper(false);
|
|
99
|
+
BarsaApi.Common.Async.Waterfall('Common.File.IsAgentActive', [
|
|
100
|
+
// Common.FileAgent.IsAgentActive.bind(Common.FileAgent),
|
|
101
|
+
BarsaApi.Common.AgentHelper.Init.bind(BarsaApi.Common.AgentHelper)
|
|
102
|
+
], (err, result) => {
|
|
103
|
+
const agentIsActive = result === 'OK';
|
|
104
|
+
this._refreshButtonsHelper(agentIsActive);
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
_refreshButtonsHelper(isAgentActive) {
|
|
108
|
+
this.disableOrReadonly$.subscribe((disableOrReadonly) => {
|
|
109
|
+
const canSave = this.canSave;
|
|
110
|
+
this.canDelete = !disableOrReadonly;
|
|
111
|
+
const hasValue = !BarsaApi.Ext.isEmpty(this.value);
|
|
112
|
+
const edit0 = canSave && disableOrReadonly !== true;
|
|
113
|
+
this.canEdit = edit0 && isAgentActive;
|
|
114
|
+
this.canDownload = !this.Setting.IsWordViewer || (!isAgentActive && edit0);
|
|
115
|
+
this.canUpload = this.canDownload && canSave && disableOrReadonly !== true;
|
|
116
|
+
this.hasFileName = !this.context.Setting.IsWordViewer;
|
|
117
|
+
this.canRemove = this.canDownload && canSave && disableOrReadonly !== true;
|
|
118
|
+
this.officeOnline = hasValue && canSave && disableOrReadonly !== true && this.context.OfficeOnline;
|
|
119
|
+
this.useWordEditor = hasValue && canSave && disableOrReadonly !== true && this.context.useWordEditor;
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
_commandClickHandler(itemId, keyboardEvent) {
|
|
123
|
+
const commandId = itemId;
|
|
124
|
+
let files = this.value;
|
|
125
|
+
if (BarsaApi.Ext.isArray(files)) {
|
|
126
|
+
files = files[0];
|
|
127
|
+
}
|
|
128
|
+
const fileId = files?.Id;
|
|
129
|
+
this.context.fireEvent('CommandRequest', this, commandId, fileId, keyboardEvent);
|
|
130
|
+
}
|
|
131
|
+
_refresh(fromServer) {
|
|
132
|
+
const officeOnline = fromServer === false;
|
|
133
|
+
this.fileName = '';
|
|
134
|
+
if (BarsaApi.Ext.isEmpty(this.value)) {
|
|
135
|
+
this.hasPdf = false;
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
let files = this.value;
|
|
139
|
+
if (BarsaApi.Ext.isArray(files)) {
|
|
140
|
+
files = files[0];
|
|
141
|
+
}
|
|
142
|
+
const fileId = files.Id;
|
|
143
|
+
if (!fileId || files.IsDeleted) {
|
|
144
|
+
if (files.IsDeleted) {
|
|
145
|
+
this.hasPdf = false;
|
|
146
|
+
}
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
this.fallbackLink = `امکان نمایش فایل در این مرورگر وجود ندارد.
|
|
150
|
+
برای باز کردن فایل از لینک زیر استفاده کنید: </br> <a href='${BarsaApi.Common.File.CreateAttachmentUrl(fileId, false, true)}'>دانلود فایل بصورت pdf</a> </br> <a href='${BarsaApi.Common.File.CreateAttachmentUrl(fileId, false, false)}'>دانلود فایل بصورت بصورت اصلی</a>`;
|
|
151
|
+
if (!BarsaApi.Ext.isIE) {
|
|
152
|
+
// const options = {
|
|
153
|
+
// fallbackLink: this.fallbackLink,
|
|
154
|
+
// pdfOpenParams: {
|
|
155
|
+
// view: 'FitH',
|
|
156
|
+
// scrollbar: '0',
|
|
157
|
+
// toolbar: '0',
|
|
158
|
+
// statusbar: '0',
|
|
159
|
+
// messages: '0',
|
|
160
|
+
// navpanes: '0'
|
|
161
|
+
// }
|
|
162
|
+
// };
|
|
163
|
+
let convertTo = isImage(files.Type) ? files.Type : '';
|
|
164
|
+
convertTo = 'pdf,doc,docx,word'.indexOf(files.Type) > -1 ? 'pdf' : convertTo;
|
|
165
|
+
if (!convertTo) {
|
|
166
|
+
this.singleControl = true;
|
|
167
|
+
this.updateSingleControl(files);
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
this.singleControl = false;
|
|
171
|
+
this.DownloadFileId(fileId, true, convertTo, null, officeOnline);
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
// const url = Common.File.CreateAttachmentUrl(fileId, false);
|
|
175
|
+
this.canNotRenderPdf = true;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
_uploadFile(files) {
|
|
179
|
+
const formData = new FormData();
|
|
180
|
+
files.forEach((file) => {
|
|
181
|
+
formData.append('unicFileName', 'x' + BarsaApi.Common.Util.GetNewMetaGuid() + ';;;' + file.name);
|
|
182
|
+
formData.append('file', file);
|
|
183
|
+
});
|
|
184
|
+
return this._uploadService.upload(formData, this.Setting.ControlFieldDefId).pipe(tap((res) => {
|
|
185
|
+
if (Array.isArray(res)) {
|
|
186
|
+
this._updateValue(res);
|
|
187
|
+
}
|
|
188
|
+
}));
|
|
189
|
+
}
|
|
190
|
+
_updateValue(res) {
|
|
191
|
+
if (this.Setting.ViewType !== 'LinearListBox') {
|
|
192
|
+
this.updateSingleControl(res[0]);
|
|
193
|
+
}
|
|
194
|
+
this.fireContextEvent('Change', this.context, res);
|
|
195
|
+
}
|
|
196
|
+
updateSingleControl(val) {
|
|
197
|
+
if (isImage(val.Type)) {
|
|
198
|
+
this.singleFileThumbnailUrl = getImagePath('ID', '', val.Id);
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
this.singleFileThumbnailUrl = getIcon(val.Type);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
_hideMask() {
|
|
205
|
+
setTimeout(() => {
|
|
206
|
+
BarsaApi.Ul.LoadingMask.Unmask(this._el.nativeElement);
|
|
207
|
+
}, 30);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
UiPdfViewerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: UiPdfViewerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
211
|
+
UiPdfViewerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: UiPdfViewerComponent, selector: "bsu-ui-pdf-viewer", providers: [UploadService], usesInheritance: true, ngImport: i0, template: "<ng-container *untilInView=\"el\">\r\n <fd-toolbar [transparent]=\"true\" [shouldOverflow]=\"true\">\r\n <fd-file-uploader\r\n #uploader\r\n [style.display]=\"'none'\"\r\n fd-toolbar-item\r\n [id]=\"id\"\r\n [name]=\"'pdf_' + id\"\r\n [placeholder]=\"'AttachFile' | bbbTranslate\"\r\n [buttonLabel]=\"'AttachFile' | bbbTranslate\"\r\n [buttonAriaLabel]=\"'AttachFile' | bbbTranslate\"\r\n [accept]=\"validExtension\"\r\n [(ngModel)]=\"files\"\r\n [multiple]=\"false\"\r\n (selectedFilesChanged)=\"onFileSelection($event)\"\r\n [contentDensity]=\"(contentDensity$ | async)!!\"\r\n ></fd-file-uploader>\r\n <button\r\n fd-button\r\n fd-toolbar-item\r\n glyph=\"attachment\"\r\n [fdType]=\"'transparent'\"\r\n [disabled]=\"!canUpload\"\r\n (click)=\"uploader.open()\"\r\n ></button>\r\n <button\r\n [disabled]=\"!(canDelete && value)\"\r\n fd-button\r\n fd-toolbar-item\r\n class=\"delete\"\r\n glyph=\"delete\"\r\n [fdType]=\"'transparent'\"\r\n (click)=\"onDelete()\"\r\n ></button>\r\n <button\r\n *ngIf=\"canEdit\"\r\n fd-toolbar-item\r\n fd-button\r\n glyph=\"edit\"\r\n [fdType]=\"'transparent'\"\r\n (click)=\"onEdit()\"\r\n ></button>\r\n <button\r\n *ngIf=\"canDownload\"\r\n fd-toolbar-item\r\n fd-button\r\n glyph=\"download\"\r\n [fdType]=\"'transparent'\"\r\n (click)=\"onDownload()\"\r\n ></button>\r\n\r\n <button\r\n *ngIf=\"useWordEditor\"\r\n fd-toolbar-item\r\n fd-button\r\n glyph=\"doc-attachment\"\r\n [fdType]=\"'transparent'\"\r\n [label]=\"'EditInWord' | bbbTranslate\"\r\n (click)=\"onEditInWord()\"\r\n ></button>\r\n <button\r\n *ngIf=\"officeOnline\"\r\n fd-toolbar-item\r\n fd-button\r\n glyph=\"doc-attachment\"\r\n [fdType]=\"'transparent'\"\r\n [label]=\"'OfficeOnline' | bbbTranslate\"\r\n (click)=\"onOfficeOnline($event)\"\r\n ></button>\r\n <button fd-toolbar-item fd-button glyph=\"refresh\" [fdType]=\"'transparent'\" (click)=\"onRefresh()\"></button>\r\n\r\n <fd-busy-indicator fd-toolbar-item [loading]=\"(uploading$ | async)!!\"></fd-busy-indicator>\r\n </fd-toolbar>\r\n <object\r\n *ngIf=\"hasPdf; else HatchBackground\"\r\n style=\"flex-grow: 1\"\r\n [attr.data]=\"pdfSource\"\r\n type=\"application/pdf\"\r\n width=\"100%\"\r\n height=\"100%\"\r\n [attr.html]=\"fallbackLink\"\r\n ></object>\r\n <ng-template #HatchBackground>\r\n <ng-container *ngIf=\"singleControl && value && !value.IsDeleted; else noFile\">\r\n <div style=\"display: flex\">\r\n <img *ngIf=\"singleFileThumbnailUrl\" [src]=\"singleFileThumbnailUrl\" />\r\n <fd-object-identifier>\r\n {{ value.FileName }}\r\n </fd-object-identifier>\r\n </div>\r\n </ng-container>\r\n <ng-template #noFile>\r\n <div class=\"hatchBackground\"></div>\r\n </ng-template>\r\n </ng-template>\r\n</ng-container>\r\n", styles: [":host{display:flex;flex-direction:column;min-height:calc(100vh - 250px)}:host ::ng-deep .delete button{border-color:transparent!important;background-color:transparent!important}:host ::ng-deep .fd-file-uploader input{display:none}.single-control{height:50px}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.UntilInViewDirective, selector: "[untilInView]", inputs: ["untilInView", "intersectionDebounce"] }, { kind: "component", type: i4.BusyIndicatorComponent, selector: "fd-busy-indicator", inputs: ["loading", "size", "block", "ariaLabel", "title", "label", "ariaLive"] }, { kind: "component", type: i5.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i6.FileUploaderComponent, selector: "fd-file-uploader", inputs: ["disabled", "required", "multiple", "accept", "dragndrop", "maxFileSize", "minFileSize", "id", "ariaLabel", "ariaLabelledBy", "placeholder", "buttonLabel", "buttonAriaLabel", "state", "fileLimit", "inputHidden", "width"], outputs: ["selectedFilesChanged", "selectedInvalidFiles", "onDragEnter", "onDragLeave"] }, { kind: "component", type: i7.ObjectIdentifierComponent, selector: "fd-object-identifier", inputs: ["description", "bold", "medium"] }, { kind: "component", type: i8.ToolbarComponent, selector: "fd-toolbar", inputs: ["class", "shouldOverflow", "fdType", "hasTitle", "title", "active", "clearBorder", "forceOverflow", "tabindex"] }, { kind: "directive", type: i8.ToolbarItemDirective, selector: "[fd-toolbar-item]" }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
212
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: UiPdfViewerComponent, decorators: [{
|
|
213
|
+
type: Component,
|
|
214
|
+
args: [{ selector: 'bsu-ui-pdf-viewer', providers: [UploadService], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *untilInView=\"el\">\r\n <fd-toolbar [transparent]=\"true\" [shouldOverflow]=\"true\">\r\n <fd-file-uploader\r\n #uploader\r\n [style.display]=\"'none'\"\r\n fd-toolbar-item\r\n [id]=\"id\"\r\n [name]=\"'pdf_' + id\"\r\n [placeholder]=\"'AttachFile' | bbbTranslate\"\r\n [buttonLabel]=\"'AttachFile' | bbbTranslate\"\r\n [buttonAriaLabel]=\"'AttachFile' | bbbTranslate\"\r\n [accept]=\"validExtension\"\r\n [(ngModel)]=\"files\"\r\n [multiple]=\"false\"\r\n (selectedFilesChanged)=\"onFileSelection($event)\"\r\n [contentDensity]=\"(contentDensity$ | async)!!\"\r\n ></fd-file-uploader>\r\n <button\r\n fd-button\r\n fd-toolbar-item\r\n glyph=\"attachment\"\r\n [fdType]=\"'transparent'\"\r\n [disabled]=\"!canUpload\"\r\n (click)=\"uploader.open()\"\r\n ></button>\r\n <button\r\n [disabled]=\"!(canDelete && value)\"\r\n fd-button\r\n fd-toolbar-item\r\n class=\"delete\"\r\n glyph=\"delete\"\r\n [fdType]=\"'transparent'\"\r\n (click)=\"onDelete()\"\r\n ></button>\r\n <button\r\n *ngIf=\"canEdit\"\r\n fd-toolbar-item\r\n fd-button\r\n glyph=\"edit\"\r\n [fdType]=\"'transparent'\"\r\n (click)=\"onEdit()\"\r\n ></button>\r\n <button\r\n *ngIf=\"canDownload\"\r\n fd-toolbar-item\r\n fd-button\r\n glyph=\"download\"\r\n [fdType]=\"'transparent'\"\r\n (click)=\"onDownload()\"\r\n ></button>\r\n\r\n <button\r\n *ngIf=\"useWordEditor\"\r\n fd-toolbar-item\r\n fd-button\r\n glyph=\"doc-attachment\"\r\n [fdType]=\"'transparent'\"\r\n [label]=\"'EditInWord' | bbbTranslate\"\r\n (click)=\"onEditInWord()\"\r\n ></button>\r\n <button\r\n *ngIf=\"officeOnline\"\r\n fd-toolbar-item\r\n fd-button\r\n glyph=\"doc-attachment\"\r\n [fdType]=\"'transparent'\"\r\n [label]=\"'OfficeOnline' | bbbTranslate\"\r\n (click)=\"onOfficeOnline($event)\"\r\n ></button>\r\n <button fd-toolbar-item fd-button glyph=\"refresh\" [fdType]=\"'transparent'\" (click)=\"onRefresh()\"></button>\r\n\r\n <fd-busy-indicator fd-toolbar-item [loading]=\"(uploading$ | async)!!\"></fd-busy-indicator>\r\n </fd-toolbar>\r\n <object\r\n *ngIf=\"hasPdf; else HatchBackground\"\r\n style=\"flex-grow: 1\"\r\n [attr.data]=\"pdfSource\"\r\n type=\"application/pdf\"\r\n width=\"100%\"\r\n height=\"100%\"\r\n [attr.html]=\"fallbackLink\"\r\n ></object>\r\n <ng-template #HatchBackground>\r\n <ng-container *ngIf=\"singleControl && value && !value.IsDeleted; else noFile\">\r\n <div style=\"display: flex\">\r\n <img *ngIf=\"singleFileThumbnailUrl\" [src]=\"singleFileThumbnailUrl\" />\r\n <fd-object-identifier>\r\n {{ value.FileName }}\r\n </fd-object-identifier>\r\n </div>\r\n </ng-container>\r\n <ng-template #noFile>\r\n <div class=\"hatchBackground\"></div>\r\n </ng-template>\r\n </ng-template>\r\n</ng-container>\r\n", styles: [":host{display:flex;flex-direction:column;min-height:calc(100vh - 250px)}:host ::ng-deep .delete button{border-color:transparent!important;background-color:transparent!important}:host ::ng-deep .fd-file-uploader input{display:none}.single-control{height:50px}\n"] }]
|
|
215
|
+
}] });
|
|
216
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktcGRmLXZpZXdlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1zYXAtdWkvc3JjL2xpYi91aS1wZGYtdmlld2VyL3VpLXBkZi12aWV3ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvdWktcGRmLXZpZXdlci91aS1wZGYtdmlld2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFHM0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXBFLE9BQU8sRUFDSCxRQUFRLEVBQ1IsYUFBYSxFQUNiLHFCQUFxQixFQUNyQixPQUFPLEVBQ1AsWUFBWSxFQUNaLE9BQU8sRUFDUCxpQkFBaUIsRUFDcEIsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7Ozs7OztBQVN6RSxNQUFNLE9BQU8sb0JBQXFCLFNBQVEsNEJBQTRCO0lBUHRFOztRQW9DSSxjQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLFlBQU8sR0FBRyxJQUFJLENBQUM7S0E0T2xCO0lBdE9HLFFBQVE7UUFDSixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDO1FBQy9DLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUM7UUFDckQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQztRQUNqRCxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLE1BQU0sQ0FB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QUM7U0FDcEM7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVPLG1CQUFtQixDQUFDLEdBQVE7UUFDaEMsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ25CLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxZQUFZLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDaEU7YUFBTTtZQUNILElBQUksQ0FBQyxzQkFBc0IsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ25EO0lBQ0wsQ0FBQztJQUNPLFNBQVM7UUFDYixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ1osUUFBUSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDM0QsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ1gsQ0FBQzs7aUhBelFRLG9CQUFvQjtxR0FBcEIsb0JBQW9CLDRDQUhsQixDQUFDLGFBQWEsQ0FBQyxpRENwQjlCLGdnSEFnR0E7MkZEekVhLG9CQUFvQjtrQkFQaEMsU0FBUzsrQkFDSSxtQkFBbUIsYUFHbEIsQ0FBQyxhQUFhLENBQUMsbUJBQ1QsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2FmZVJlc291cmNlVXJsIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBleGhhdXN0TWFwLCBmaWx0ZXIsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ29udGVudERlbnNpdHkgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUnO1xuaW1wb3J0IHtcbiAgICBCYXJzYUFwaSxcbiAgICBVcGxvYWRTZXJ2aWNlLFxuICAgIEZpbGVzVmFsaWRhdGlvbkhlbHBlcixcbiAgICBpc0ltYWdlLFxuICAgIGdldEltYWdlUGF0aCxcbiAgICBnZXRJY29uLFxuICAgIGdldFZhbGlkRXh0ZW5zaW9uXG59IGZyb20gJ2JhcnNhLW5vdmluLXJheS1jb3JlJztcbmltcG9ydCB7IERldmljZUluZm9GaWVsZEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi9kZXZpY2UtaW5mby1maWVsZC1iYXNlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdic3UtdWktcGRmLXZpZXdlcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3VpLXBkZi12aWV3ZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3VpLXBkZi12aWV3ZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgICBwcm92aWRlcnM6IFtVcGxvYWRTZXJ2aWNlXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBVaVBkZlZpZXdlckNvbXBvbmVudCBleHRlbmRzIERldmljZUluZm9GaWVsZEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIGZpbGVOYW1lOiBzdHJpbmc7XG4gICAgZmFsbGJhY2tMaW5rOiBhbnk7XG4gICAgY2FuTm90UmVuZGVyUGRmOiBib29sZWFuO1xuICAgIHBkZlNvdXJjZTogU2FmZVJlc291cmNlVXJsO1xuICAgIGhhc1BkZjogYm9vbGVhbjtcbiAgICBwZGZPYmplY3Q6IHtcbiAgICAgICAgYXV0b0VsOiB7XG4gICAgICAgICAgICB0YWc6IHN0cmluZztcbiAgICAgICAgICAgIGRhdGE6IHN0cmluZztcbiAgICAgICAgICAgIHR5cGU6IHN0cmluZztcbiAgICAgICAgICAgIHdpZHRoOiBzdHJpbmc7XG4gICAgICAgICAgICBoZWlnaHQ6IHN0cmluZztcbiAgICAgICAgICAgIGh0bWw6IGFueTtcbiAgICAgICAgfTtcbiAgICB9O1xuXG4gICAgdXBsb2FkU3RhdGUkOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gICAgcHJvZ3Jlc3MkOiBPYnNlcnZhYmxlPGFueT47XG4gICAgdXBsb2FkaW5nJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgICBmaWxlczogRmlsZVtdO1xuICAgIGNvbnRlbnREZW5zaXR5JDogT2JzZXJ2YWJsZTxDb250ZW50RGVuc2l0eT47XG4gICAgb2ZmaWNlT25saW5lOiBhbnk7XG4gICAgdXNlV29yZEVkaXRvcjogYW55O1xuICAgIGhhc0ZpbGVOYW1lOiBib29sZWFuO1xuICAgIGNhblJlbW92ZTogYm9vbGVhbjtcbiAgICBjYW5VcGxvYWQ6IGJvb2xlYW47XG4gICAgY2FuRWRpdDogYm9vbGVhbjtcbiAgICBjYW5Eb3dubG9hZDogYm9vbGVhbjtcbiAgICBjYW5EZWxldGUgPSB0cnVlO1xuICAgIGNhblNhdmUgPSB0cnVlO1xuICAgIHZhbGlkRXh0ZW5zaW9uOiBzdHJpbmc7XG4gICAgZmlsZXNWYWxpZGF0aW9uSGVscGVyOiBGaWxlc1ZhbGlkYXRpb25IZWxwZXI7XG4gICAgc2luZ2xlQ29udHJvbDogYm9vbGVhbjtcbiAgICBzaW5nbGVGaWxlVGh1bWJuYWlsVXJsOiBzdHJpbmc7XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wcm9ncmVzcyQgPSB0aGlzLl91cGxvYWRTZXJ2aWNlLnByb2dyZXNzJDtcbiAgICAgICAgdGhpcy51cGxvYWRTdGF0ZSQgPSB0aGlzLl91cGxvYWRTZXJ2aWNlLnVwbG9hZFN0YXRlJDtcbiAgICAgICAgdGhpcy51cGxvYWRpbmckID0gdGhpcy5fdXBsb2FkU2VydmljZS51cGxvYWRpbmckO1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgICAgICB0aGlzLnZhbHVlJC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLl9yZWZyZXNoKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJlZnJlc2gkLnN1YnNjcmliZSgoZnJvbVNlcnZlcjogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgdGhpcy5fcmVmcmVzaChmcm9tU2VydmVyKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZmlsZXNWYWxpZGF0aW9uSGVscGVyID0gbmV3IEZpbGVzVmFsaWRhdGlvbkhlbHBlcihcbiAgICAgICAgICAgIHRoaXMuU2V0dGluZy5NYXhGaWxlQ291bnQsXG4gICAgICAgICAgICB0aGlzLlNldHRpbmcuTWF4RmlsZVNpemVLYixcbiAgICAgICAgICAgIHRoaXMuU2V0dGluZy5NYXhUb3RhbEZpbGVTaXplS2JcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fcmVmcmVzaEJ1dHRvbnMoKTtcbiAgICAgICAgdGhpcy5fcmVmcmVzaCgpO1xuICAgICAgICB0aGlzLnZhbGlkRXh0ZW5zaW9uID0gdGhpcy5jb250ZXh0LnVzZVdvcmRFZGl0b3JcbiAgICAgICAgICAgID8gJy5kb2MsLmRvY3gnXG4gICAgICAgICAgICA6IGdldFZhbGlkRXh0ZW5zaW9uKHRoaXMuU2V0dGluZy5WYWxpZEV4dGVuc2lvbnMpO1xuICAgICAgICB0aGlzLnNpbmdsZUNvbnRyb2wgPSB0aGlzLlNldHRpbmcuVmlld1R5cGUgPT09ICdTaW5nbGVGaWxlQ29udHJvbCc7XG4gICAgfVxuICAgIG9uRWRpdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY29tbWFuZENsaWNrSGFuZGxlcignRWRpdCcpO1xuICAgIH1cbiAgICBvblZpZXcoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZSA9IHsgY3RybEtleTogZXZlbnQuY3RybEtleSB9O1xuICAgICAgICB0aGlzLl9jb21tYW5kQ2xpY2tIYW5kbGVyKCdPT1ZpZXcnLCBlKTtcbiAgICB9XG4gICAgb25Eb3dubG9hZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY29tbWFuZENsaWNrSGFuZGxlcignRG93bmxvYWQnKTtcbiAgICB9XG4gICAgb25GaWxlU2VsZWN0aW9uKGZpbGVzOiBGaWxlW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdXBsb2FkVG9TZXJ2ZXIoZmlsZXMpO1xuICAgIH1cbiAgICBvbkRlbGV0ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY29tbWFuZENsaWNrSGFuZGxlcignRGVsZXRlJyk7XG4gICAgfVxuICAgIG9uRWRpdEluV29yZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY29tbWFuZENsaWNrSGFuZGxlcignT0RFZGl0Jyk7XG4gICAgfVxuICAgIG9uT2ZmaWNlT25saW5lKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGUgPSB7IGN0cmxLZXk6IGV2ZW50LmN0cmxLZXkgfTtcblxuICAgICAgICB0aGlzLl9jb21tYW5kQ2xpY2tIYW5kbGVyKCdPT0VkaXQnLCBlKTtcbiAgICB9XG4gICAgb25SZWZyZXNoKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jb21tYW5kQ2xpY2tIYW5kbGVyKCdSZWZyZXNoJyk7XG4gICAgfVxuICAgIERvd25sb2FkRmlsZUlkKGZpbGVJZCwgdmlld0luQnJvd3NlciwgY29udmVydFRvLCBmb3JPY3gsIGlzT2ZmaWNlT25saW5lKTogdm9pZCB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgQmFyc2FBcGkuVWwuTG9hZGluZ01hc2suTWFzayh0aGlzLl9lbC5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgfSwgMzApO1xuXG4gICAgICAgIEJhcnNhQXBpLkNvbW1vbi5GaWxlLkRvd25sb2FkRmlsZUNvbnRlbnQuYmluZCh0aGlzKShcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBmaWxlSWQsXG4gICAgICAgICAgICAgICAgZmlsZVVybDogbnVsbCxcbiAgICAgICAgICAgICAgICB2aWV3SW5Ccm93c2VyLFxuICAgICAgICAgICAgICAgIGNvbnZlcnRUbyxcbiAgICAgICAgICAgICAgICBpc09mZmljZU9ubGluZSxcbiAgICAgICAgICAgICAgICBmb3JPY3hcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2VlZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9iID0gQmFyc2FBcGkuQ29tbW9uLkZpbGUuQjY0dG9CbG9iKHJlc3BvbnNlLmNvbnRlbnQsIHJlc3BvbnNlLmNvbnRlbnRUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdXJsID0gd2luZG93LlVSTCB8fCB3aW5kb3cud2Via2l0VVJMO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBkZlNvdXJjZSA9IHRoaXMuX2RvbVNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwodXJsLmNyZWF0ZU9iamVjdFVSTChibG9iKSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFzUGRmID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faGlkZU1hc2soKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5faGlkZU1hc2soKTtcbiAgICAgICAgICAgICAgICBhbGVydChlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuICAgIHByb3RlY3RlZCBfdXBsb2FkVG9TZXJ2ZXIoc2VsZWN0ZWRGaWxlczogRmlsZVtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZmlsZXNWYWxpZGF0aW9uSGVscGVyXG4gICAgICAgICAgICAudmFsaWRhdGVGaWxlcyhzZWxlY3RlZEZpbGVzKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpLFxuICAgICAgICAgICAgICAgIGZpbHRlcigoZmlsZXMpID0+IGZpbGVzLmxlbmd0aCA+IDApLFxuICAgICAgICAgICAgICAgIGV4aGF1c3RNYXAoKGZpbGVzOiBGaWxlW10pID0+IHRoaXMuX3VwbG9hZEZpbGUoZmlsZXMpKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfcmVmcmVzaEJ1dHRvbnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3JlZnJlc2hCdXR0b25zSGVscGVyKGZhbHNlKTtcbiAgICAgICAgQmFyc2FBcGkuQ29tbW9uLkFzeW5jLldhdGVyZmFsbChcbiAgICAgICAgICAgICdDb21tb24uRmlsZS5Jc0FnZW50QWN0aXZlJyxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAvLyBDb21tb24uRmlsZUFnZW50LklzQWdlbnRBY3RpdmUuYmluZChDb21tb24uRmlsZUFnZW50KSxcbiAgICAgICAgICAgICAgICBCYXJzYUFwaS5Db21tb24uQWdlbnRIZWxwZXIuSW5pdC5iaW5kKEJhcnNhQXBpLkNvbW1vbi5BZ2VudEhlbHBlcilcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAoZXJyLCByZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZ2VudElzQWN0aXZlID0gcmVzdWx0ID09PSAnT0snO1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hCdXR0b25zSGVscGVyKGFnZW50SXNBY3RpdmUpO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX3JlZnJlc2hCdXR0b25zSGVscGVyKGlzQWdlbnRBY3RpdmUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlT3JSZWFkb25seSQuc3Vic2NyaWJlKChkaXNhYmxlT3JSZWFkb25seSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2FuU2F2ZSA9IHRoaXMuY2FuU2F2ZTtcbiAgICAgICAgICAgIHRoaXMuY2FuRGVsZXRlID0gIWRpc2FibGVPclJlYWRvbmx5O1xuICAgICAgICAgICAgY29uc3QgaGFzVmFsdWUgPSAhQmFyc2FBcGkuRXh0LmlzRW1wdHkodGhpcy52YWx1ZSk7XG4gICAgICAgICAgICBjb25zdCBlZGl0MCA9IGNhblNhdmUgJiYgZGlzYWJsZU9yUmVhZG9ubHkgIT09IHRydWU7XG4gICAgICAgICAgICB0aGlzLmNhbkVkaXQgPSBlZGl0MCAmJiBpc0FnZW50QWN0aXZlO1xuICAgICAgICAgICAgdGhpcy5jYW5Eb3dubG9hZCA9ICF0aGlzLlNldHRpbmcuSXNXb3JkVmlld2VyIHx8ICghaXNBZ2VudEFjdGl2ZSAmJiBlZGl0MCk7XG4gICAgICAgICAgICB0aGlzLmNhblVwbG9hZCA9IHRoaXMuY2FuRG93bmxvYWQgJiYgY2FuU2F2ZSAmJiBkaXNhYmxlT3JSZWFkb25seSAhPT0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuaGFzRmlsZU5hbWUgPSAhdGhpcy5jb250ZXh0LlNldHRpbmcuSXNXb3JkVmlld2VyO1xuICAgICAgICAgICAgdGhpcy5jYW5SZW1vdmUgPSB0aGlzLmNhbkRvd25sb2FkICYmIGNhblNhdmUgJiYgZGlzYWJsZU9yUmVhZG9ubHkgIT09IHRydWU7XG5cbiAgICAgICAgICAgIHRoaXMub2ZmaWNlT25saW5lID0gaGFzVmFsdWUgJiYgY2FuU2F2ZSAmJiBkaXNhYmxlT3JSZWFkb25seSAhPT0gdHJ1ZSAmJiB0aGlzLmNvbnRleHQuT2ZmaWNlT25saW5lO1xuICAgICAgICAgICAgdGhpcy51c2VXb3JkRWRpdG9yID0gaGFzVmFsdWUgJiYgY2FuU2F2ZSAmJiBkaXNhYmxlT3JSZWFkb25seSAhPT0gdHJ1ZSAmJiB0aGlzLmNvbnRleHQudXNlV29yZEVkaXRvcjtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHByb3RlY3RlZCBfY29tbWFuZENsaWNrSGFuZGxlcihpdGVtSWQsIGtleWJvYXJkRXZlbnQ/KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbW1hbmRJZCA9IGl0ZW1JZDtcblxuICAgICAgICBsZXQgZmlsZXMgPSB0aGlzLnZhbHVlO1xuICAgICAgICBpZiAoQmFyc2FBcGkuRXh0LmlzQXJyYXkoZmlsZXMpKSB7XG4gICAgICAgICAgICBmaWxlcyA9IGZpbGVzWzBdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsZUlkID0gZmlsZXM/LklkO1xuICAgICAgICB0aGlzLmNvbnRleHQuZmlyZUV2ZW50KCdDb21tYW5kUmVxdWVzdCcsIHRoaXMsIGNvbW1hbmRJZCwgZmlsZUlkLCBrZXlib2FyZEV2ZW50KTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9yZWZyZXNoKGZyb21TZXJ2ZXI/OiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG9mZmljZU9ubGluZSA9IGZyb21TZXJ2ZXIgPT09IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuZmlsZU5hbWUgPSAnJztcblxuICAgICAgICBpZiAoQmFyc2FBcGkuRXh0LmlzRW1wdHkodGhpcy52YWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuaGFzUGRmID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZmlsZXMgPSB0aGlzLnZhbHVlO1xuICAgICAgICBpZiAoQmFyc2FBcGkuRXh0LmlzQXJyYXkoZmlsZXMpKSB7XG4gICAgICAgICAgICBmaWxlcyA9IGZpbGVzWzBdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsZUlkID0gZmlsZXMuSWQ7XG4gICAgICAgIGlmICghZmlsZUlkIHx8IGZpbGVzLklzRGVsZXRlZCkge1xuICAgICAgICAgICAgaWYgKGZpbGVzLklzRGVsZXRlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFzUGRmID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mYWxsYmFja0xpbmsgPSBg2KfZhdqp2KfZhiDZhtmF2KfbjNi0INmB2KfbjNmEINiv2LEg2KfbjNmGINmF2LHZiNix2q/YsSDZiNis2YjYryDZhtiv2KfYsdivLlxuICAgICAgICAg2KjYsdin24wg2KjYp9iyINqp2LHYr9mGINmB2KfbjNmEINin2LIg2YTbjNmG2qkg2LLbjNixINin2LPYqtmB2KfYr9mHINqp2YbbjNivOiAgPC9icj4gPGEgaHJlZj0nJHtCYXJzYUFwaS5Db21tb24uRmlsZS5DcmVhdGVBdHRhY2htZW50VXJsKFxuICAgICAgICAgICAgIGZpbGVJZCxcbiAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICB0cnVlXG4gICAgICAgICApfSc+2K/Yp9mG2YTZiNivINmB2KfbjNmEINio2LXZiNix2KogcGRmPC9hPiAgPC9icj4gIDxhIGhyZWY9JyR7QmFyc2FBcGkuQ29tbW9uLkZpbGUuQ3JlYXRlQXR0YWNobWVudFVybChcbiAgICAgICAgICAgIGZpbGVJZCxcbiAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgKX0nPtiv2KfZhtmE2YjYryDZgdin24zZhCDYqNi12YjYsdiqINio2LXZiNix2Kog2KfYtdmE24w8L2E+YDtcblxuICAgICAgICBpZiAoIUJhcnNhQXBpLkV4dC5pc0lFKSB7XG4gICAgICAgICAgICAvLyBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgLy8gICAgIGZhbGxiYWNrTGluazogdGhpcy5mYWxsYmFja0xpbmssXG4gICAgICAgICAgICAvLyAgICAgcGRmT3BlblBhcmFtczoge1xuICAgICAgICAgICAgLy8gICAgICAgICB2aWV3OiAnRml0SCcsXG4gICAgICAgICAgICAvLyAgICAgICAgIHNjcm9sbGJhcjogJzAnLFxuICAgICAgICAgICAgLy8gICAgICAgICB0b29sYmFyOiAnMCcsXG4gICAgICAgICAgICAvLyAgICAgICAgIHN0YXR1c2JhcjogJzAnLFxuICAgICAgICAgICAgLy8gICAgICAgICBtZXNzYWdlczogJzAnLFxuICAgICAgICAgICAgLy8gICAgICAgICBuYXZwYW5lczogJzAnXG4gICAgICAgICAgICAvLyAgICAgfVxuICAgICAgICAgICAgLy8gfTtcbiAgICAgICAgICAgIGxldCBjb252ZXJ0VG8gPSBpc0ltYWdlKGZpbGVzLlR5cGUpID8gZmlsZXMuVHlwZSA6ICcnO1xuICAgICAgICAgICAgY29udmVydFRvID0gJ3BkZixkb2MsZG9jeCx3b3JkJy5pbmRleE9mKGZpbGVzLlR5cGUpID4gLTEgPyAncGRmJyA6IGNvbnZlcnRUbztcblxuICAgICAgICAgICAgaWYgKCFjb252ZXJ0VG8pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNpbmdsZUNvbnRyb2wgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU2luZ2xlQ29udHJvbChmaWxlcyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zaW5nbGVDb250cm9sID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHRoaXMuRG93bmxvYWRGaWxlSWQoZmlsZUlkLCB0cnVlLCBjb252ZXJ0VG8sIG51bGwsIG9mZmljZU9ubGluZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBjb25zdCB1cmwgPSBDb21tb24uRmlsZS5DcmVhdGVBdHRhY2htZW50VXJsKGZpbGVJZCwgZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5jYW5Ob3RSZW5kZXJQZGYgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF91cGxvYWRGaWxlKGZpbGVzOiBGaWxlW10pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgICBmaWxlcy5mb3JFYWNoKChmaWxlKSA9PiB7XG4gICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ3VuaWNGaWxlTmFtZScsICd4JyArIEJhcnNhQXBpLkNvbW1vbi5VdGlsLkdldE5ld01ldGFHdWlkKCkgKyAnOzs7JyArIGZpbGUubmFtZSk7XG4gICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCBmaWxlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX3VwbG9hZFNlcnZpY2UudXBsb2FkKGZvcm1EYXRhLCB0aGlzLlNldHRpbmcuQ29udHJvbEZpZWxkRGVmSWQpLnBpcGUoXG4gICAgICAgICAgICB0YXAoKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlcykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlVmFsdWUocmVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfdXBkYXRlVmFsdWUocmVzOiBhbnlbXSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5TZXR0aW5nLlZpZXdUeXBlICE9PSAnTGluZWFyTGlzdEJveCcpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU2luZ2xlQ29udHJvbChyZXNbMF0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmlyZUNvbnRleHRFdmVudCgnQ2hhbmdlJywgdGhpcy5jb250ZXh0LCByZXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlU2luZ2xlQ29udHJvbCh2YWw6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAoaXNJbWFnZSh2YWwuVHlwZSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2luZ2xlRmlsZVRodW1ibmFpbFVybCA9IGdldEltYWdlUGF0aCgnSUQnLCAnJywgdmFsLklkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2luZ2xlRmlsZVRodW1ibmFpbFVybCA9IGdldEljb24odmFsLlR5cGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHByaXZhdGUgX2hpZGVNYXNrKCk6IHZvaWQge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIEJhcnNhQXBpLlVsLkxvYWRpbmdNYXNrLlVubWFzayh0aGlzLl9lbC5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgfSwgMzApO1xuICAgIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKnVudGlsSW5WaWV3PVwiZWxcIj5cclxuICAgIDxmZC10b29sYmFyIFt0cmFuc3BhcmVudF09XCJ0cnVlXCIgW3Nob3VsZE92ZXJmbG93XT1cInRydWVcIj5cclxuICAgICAgICA8ZmQtZmlsZS11cGxvYWRlclxyXG4gICAgICAgICAgICAjdXBsb2FkZXJcclxuICAgICAgICAgICAgW3N0eWxlLmRpc3BsYXldPVwiJ25vbmUnXCJcclxuICAgICAgICAgICAgZmQtdG9vbGJhci1pdGVtXHJcbiAgICAgICAgICAgIFtpZF09XCJpZFwiXHJcbiAgICAgICAgICAgIFtuYW1lXT1cIidwZGZfJyArIGlkXCJcclxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidBdHRhY2hGaWxlJyB8IGJiYlRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgIFtidXR0b25MYWJlbF09XCInQXR0YWNoRmlsZScgfCBiYmJUcmFuc2xhdGVcIlxyXG4gICAgICAgICAgICBbYnV0dG9uQXJpYUxhYmVsXT1cIidBdHRhY2hGaWxlJyB8IGJiYlRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgIFthY2NlcHRdPVwidmFsaWRFeHRlbnNpb25cIlxyXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZpbGVzXCJcclxuICAgICAgICAgICAgW211bHRpcGxlXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgKHNlbGVjdGVkRmlsZXNDaGFuZ2VkKT1cIm9uRmlsZVNlbGVjdGlvbigkZXZlbnQpXCJcclxuICAgICAgICAgICAgW2NvbnRlbnREZW5zaXR5XT1cIihjb250ZW50RGVuc2l0eSQgfCBhc3luYykhIVwiXHJcbiAgICAgICAgPjwvZmQtZmlsZS11cGxvYWRlcj5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIGZkLWJ1dHRvblxyXG4gICAgICAgICAgICBmZC10b29sYmFyLWl0ZW1cclxuICAgICAgICAgICAgZ2x5cGg9XCJhdHRhY2htZW50XCJcclxuICAgICAgICAgICAgW2ZkVHlwZV09XCIndHJhbnNwYXJlbnQnXCJcclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFjYW5VcGxvYWRcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwidXBsb2FkZXIub3BlbigpXCJcclxuICAgICAgICA+PC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiIShjYW5EZWxldGUgJiYgdmFsdWUpXCJcclxuICAgICAgICAgICAgZmQtYnV0dG9uXHJcbiAgICAgICAgICAgIGZkLXRvb2xiYXItaXRlbVxyXG4gICAgICAgICAgICBjbGFzcz1cImRlbGV0ZVwiXHJcbiAgICAgICAgICAgIGdseXBoPVwiZGVsZXRlXCJcclxuICAgICAgICAgICAgW2ZkVHlwZV09XCIndHJhbnNwYXJlbnQnXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uRGVsZXRlKClcIlxyXG4gICAgICAgID48L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICpuZ0lmPVwiY2FuRWRpdFwiXHJcbiAgICAgICAgICAgIGZkLXRvb2xiYXItaXRlbVxyXG4gICAgICAgICAgICBmZC1idXR0b25cclxuICAgICAgICAgICAgZ2x5cGg9XCJlZGl0XCJcclxuICAgICAgICAgICAgW2ZkVHlwZV09XCIndHJhbnNwYXJlbnQnXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uRWRpdCgpXCJcclxuICAgICAgICA+PC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAqbmdJZj1cImNhbkRvd25sb2FkXCJcclxuICAgICAgICAgICAgZmQtdG9vbGJhci1pdGVtXHJcbiAgICAgICAgICAgIGZkLWJ1dHRvblxyXG4gICAgICAgICAgICBnbHlwaD1cImRvd25sb2FkXCJcclxuICAgICAgICAgICAgW2ZkVHlwZV09XCIndHJhbnNwYXJlbnQnXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uRG93bmxvYWQoKVwiXHJcbiAgICAgICAgPjwvYnV0dG9uPlxyXG5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICpuZ0lmPVwidXNlV29yZEVkaXRvclwiXHJcbiAgICAgICAgICAgIGZkLXRvb2xiYXItaXRlbVxyXG4gICAgICAgICAgICBmZC1idXR0b25cclxuICAgICAgICAgICAgZ2x5cGg9XCJkb2MtYXR0YWNobWVudFwiXHJcbiAgICAgICAgICAgIFtmZFR5cGVdPVwiJ3RyYW5zcGFyZW50J1wiXHJcbiAgICAgICAgICAgIFtsYWJlbF09XCInRWRpdEluV29yZCcgfCBiYmJUcmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwib25FZGl0SW5Xb3JkKClcIlxyXG4gICAgICAgID48L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICpuZ0lmPVwib2ZmaWNlT25saW5lXCJcclxuICAgICAgICAgICAgZmQtdG9vbGJhci1pdGVtXHJcbiAgICAgICAgICAgIGZkLWJ1dHRvblxyXG4gICAgICAgICAgICBnbHlwaD1cImRvYy1hdHRhY2htZW50XCJcclxuICAgICAgICAgICAgW2ZkVHlwZV09XCIndHJhbnNwYXJlbnQnXCJcclxuICAgICAgICAgICAgW2xhYmVsXT1cIidPZmZpY2VPbmxpbmUnIHwgYmJiVHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uT2ZmaWNlT25saW5lKCRldmVudClcIlxyXG4gICAgICAgID48L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIGZkLXRvb2xiYXItaXRlbSBmZC1idXR0b24gZ2x5cGg9XCJyZWZyZXNoXCIgW2ZkVHlwZV09XCIndHJhbnNwYXJlbnQnXCIgKGNsaWNrKT1cIm9uUmVmcmVzaCgpXCI+PC9idXR0b24+XHJcblxyXG4gICAgICAgIDxmZC1idXN5LWluZGljYXRvciBmZC10b29sYmFyLWl0ZW0gW2xvYWRpbmddPVwiKHVwbG9hZGluZyQgfCBhc3luYykhIVwiPjwvZmQtYnVzeS1pbmRpY2F0b3I+XHJcbiAgICA8L2ZkLXRvb2xiYXI+XHJcbiAgICA8b2JqZWN0XHJcbiAgICAgICAgKm5nSWY9XCJoYXNQZGY7IGVsc2UgSGF0Y2hCYWNrZ3JvdW5kXCJcclxuICAgICAgICBzdHlsZT1cImZsZXgtZ3JvdzogMVwiXHJcbiAgICAgICAgW2F0dHIuZGF0YV09XCJwZGZTb3VyY2VcIlxyXG4gICAgICAgIHR5cGU9XCJhcHBsaWNhdGlvbi9wZGZcIlxyXG4gICAgICAgIHdpZHRoPVwiMTAwJVwiXHJcbiAgICAgICAgaGVpZ2h0PVwiMTAwJVwiXHJcbiAgICAgICAgW2F0dHIuaHRtbF09XCJmYWxsYmFja0xpbmtcIlxyXG4gICAgPjwvb2JqZWN0PlxyXG4gICAgPG5nLXRlbXBsYXRlICNIYXRjaEJhY2tncm91bmQ+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNpbmdsZUNvbnRyb2wgJiYgdmFsdWUgJiYgIXZhbHVlLklzRGVsZXRlZDsgZWxzZSBub0ZpbGVcIj5cclxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXhcIj5cclxuICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJzaW5nbGVGaWxlVGh1bWJuYWlsVXJsXCIgW3NyY109XCJzaW5nbGVGaWxlVGh1bWJuYWlsVXJsXCIgLz5cclxuICAgICAgICAgICAgICAgIDxmZC1vYmplY3QtaWRlbnRpZmllcj5cclxuICAgICAgICAgICAgICAgICAgICB7eyB2YWx1ZS5GaWxlTmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9mZC1vYmplY3QtaWRlbnRpZmllcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICNub0ZpbGU+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoYXRjaEJhY2tncm91bmRcIj48L2Rpdj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuPC9uZy1jb250YWluZXI+XHJcbiJdfQ==
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
|
|
2
|
+
import { FieldBaseComponent, BarsaApi, UploadService, getValidExtension } from 'barsa-novin-ray-core';
|
|
3
|
+
import { of, Subject } from 'rxjs';
|
|
4
|
+
import { exhaustMap, takeUntil, tap } from 'rxjs/operators';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@angular/common";
|
|
7
|
+
import * as i2 from "@angular/forms";
|
|
8
|
+
import * as i3 from "@fundamental-ngx/core/avatar";
|
|
9
|
+
import * as i4 from "@fundamental-ngx/core/button";
|
|
10
|
+
import * as i5 from "@fundamental-ngx/core/file-uploader";
|
|
11
|
+
import * as i6 from "@fundamental-ngx/core/toolbar";
|
|
12
|
+
import * as i7 from "@fundamental-ngx/platform/slider";
|
|
13
|
+
import * as i8 from "../mask/mask.component";
|
|
14
|
+
import * as i9 from "barsa-novin-ray-core";
|
|
15
|
+
export class UiPictureFileComponent extends FieldBaseComponent {
|
|
16
|
+
constructor() {
|
|
17
|
+
super(...arguments);
|
|
18
|
+
this.files = [];
|
|
19
|
+
this.cancelation$ = new Subject();
|
|
20
|
+
}
|
|
21
|
+
ngOnInit() {
|
|
22
|
+
super.ngOnInit();
|
|
23
|
+
this.progress$ = this._uploadService.progress$;
|
|
24
|
+
this.uploadState$ = this._uploadService.uploadState$;
|
|
25
|
+
this.uploading$ = this._uploadService.uploading$;
|
|
26
|
+
this.context.on({
|
|
27
|
+
DispalyImage: this._displayImage.bind(this)
|
|
28
|
+
});
|
|
29
|
+
this.imageUrl = this.context.imageUrl;
|
|
30
|
+
this.value = this.context._value;
|
|
31
|
+
this.validExtensions = this.Setting.ValidExtension
|
|
32
|
+
? getValidExtension(this.Setting.ValidExtensions)
|
|
33
|
+
: '.jpeg,.jpg,.gif,.png,.bmp,.tif';
|
|
34
|
+
}
|
|
35
|
+
ngOnDestroy() {
|
|
36
|
+
super.ngOnDestroy();
|
|
37
|
+
this.context.un('DisplayImage', this._displayImage);
|
|
38
|
+
}
|
|
39
|
+
onFileSelection(files) {
|
|
40
|
+
this.files = files;
|
|
41
|
+
this._upload(files);
|
|
42
|
+
}
|
|
43
|
+
onFileDeleted(uploaderComponent) {
|
|
44
|
+
uploaderComponent.inputRef.nativeElement.value = null;
|
|
45
|
+
this.value = null;
|
|
46
|
+
this.fireContextEvent('Change', this.context, null);
|
|
47
|
+
}
|
|
48
|
+
onDownloadFile() {
|
|
49
|
+
BarsaApi.Common.File.OpenFile(this.value.FileId, false, this, true, false);
|
|
50
|
+
}
|
|
51
|
+
onRetry() {
|
|
52
|
+
this._upload(this.files);
|
|
53
|
+
}
|
|
54
|
+
onTerminate() {
|
|
55
|
+
this.cancelation$.next();
|
|
56
|
+
}
|
|
57
|
+
_displayImage(imageUrl, sizeMode, value) {
|
|
58
|
+
this.imageUrl = imageUrl;
|
|
59
|
+
this.value = value;
|
|
60
|
+
this.sizeMode = sizeMode;
|
|
61
|
+
}
|
|
62
|
+
_upload(files) {
|
|
63
|
+
of(true)
|
|
64
|
+
.pipe(takeUntil(this._onDestroy$), exhaustMap(() => this.uploadFile(files)))
|
|
65
|
+
.subscribe();
|
|
66
|
+
}
|
|
67
|
+
uploadFile(files) {
|
|
68
|
+
const formData = new FormData();
|
|
69
|
+
files.forEach((file) => {
|
|
70
|
+
formData.append('unicFileName', 'x' + BarsaApi.Common.Util.GetNewMetaGuid() + ';;;' + file.name);
|
|
71
|
+
formData.append('file', file);
|
|
72
|
+
});
|
|
73
|
+
return this._uploadService.upload(formData, this.Setting.ControlFieldDefId).pipe(tap((res) => {
|
|
74
|
+
if (Array.isArray(res)) {
|
|
75
|
+
const picture = res[0];
|
|
76
|
+
const value = {
|
|
77
|
+
...picture,
|
|
78
|
+
FileId: picture.FileId
|
|
79
|
+
};
|
|
80
|
+
this.fireContextEvent('Change', this.context, value);
|
|
81
|
+
}
|
|
82
|
+
}));
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
UiPictureFileComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: UiPictureFileComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
86
|
+
UiPictureFileComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: UiPictureFileComponent, selector: "bsu-ui-picture-file", inputs: { imageUrl: "imageUrl", sizeMode: "sizeMode" }, providers: [UploadService], usesInheritance: true, ngImport: i0, template: "<div\n [style.max-height.px]=\"Setting.SizeMode === '2' ? null : layoutInfo.ControlBounds.height\"\n [class.no-inlineEdit]=\"!inlineEdit\"\n [class.inlineEdit]=\"inlineEdit\"\n>\n <div *ngIf=\"!((disableOrReadonly$ | async) === true || Setting.IsReadOnly === true)\">\n <fd-toolbar [fdType]=\"'transparent'\">\n <fd-file-uploader\n #uploader\n fd-toolbar-item\n [style.display]=\"'none'\"\n [id]=\"id\"\n [name]=\"'uploader_' + id\"\n [placeholder]=\"'AttachPicture' | bbbTranslate\"\n [buttonLabel]=\"'AttachPicture' | bbbTranslate\"\n [buttonAriaLabel]=\"'AttachPicture' | bbbTranslate\"\n [accept]=\"validExtensions\"\n [(ngModel)]=\"files\"\n [multiple]=\"false\"\n (selectedFilesChanged)=\"onFileSelection($event)\"\n ></fd-file-uploader>\n <button\n fd-toolbar-item\n fd-button\n [disabled]=\"this.value && value?.IsDeleted !== true\"\n glyph=\"attachment\"\n [fdType]=\"'transparent'\"\n (click)=\"uploader.open()\"\n ></button>\n <button\n class=\"delete\"\n fd-button\n fd-toolbar-item\n [disabled]=\"!this.value || value?.IsDeleted\"\n glyph=\"delete\"\n [fdType]=\"'transparent'\"\n (click)=\"onFileDeleted(uploader)\"\n ></button>\n\n <ng-container *ngIf=\"uploadState$ | async as uploadState\">\n <ng-container *ngIf=\"uploadState !== 'Complete'\">\n <fdp-slider\n fd-toolbar-item\n [id]=\"id + '1'\"\n [name]=\"'slider_' + id\"\n [value]=\"progress$ | async\"\n [min]=\"0\"\n [max]=\"100\"\n [step]=\"1\"\n >\n </fdp-slider>\n <button\n *ngIf=\"uploadState === 'Uploading'\"\n fd-toolbar-item\n fd-button\n glyph=\"stop\"\n fdType=\"transparent\"\n (click)=\"onTerminate()\"\n ></button>\n <button\n *ngIf=\"uploadState === 'Error'\"\n fd-toolbar-item\n fd-button\n glyph=\"refresh\"\n [fdType]=\"'transparent'\"\n (click)=\"onRetry()\"\n ></button>\n </ng-container>\n </ng-container>\n </fd-toolbar>\n </div>\n <div\n *ngIf=\"!inlineEdit; else avatarTemplate\"\n [style.max-height.px]=\"Setting.SizeMode === '0' ? layoutInfo.ControlBounds.height : null\"\n [style.max-width.px]=\"Setting.SizeMode === '0' ? layoutInfo.ControlBounds.width : null\"\n [style.text-align]=\"Setting.SizeMode === '3' ? 'center' : null\"\n >\n <img\n *ngIf=\"(value && imageUrl) || Setting.HasDefaultPicture\"\n [src]=\"imageUrl\"\n [ngClass]=\"Setting.SizeMode === '1' ? 'cover' : 'contain'\"\n [style.height.px]=\"Setting.SizeMode !== '2' ? layoutInfo.ControlBounds.height : null\"\n />\n </div>\n <ng-template #avatarTemplate>\n <fd-avatar [size]=\"'m'\" [image]=\"imageUrl\"></fd-avatar>\n </ng-template>\n</div>\n<bsu-mask *ngIf=\"uploading$ | async\"></bsu-mask>\n", styles: [":host{width:100%;height:100%;display:flex;flex-direction:column;justify-content:center;align-items:center;position:relative;overflow:hidden;margin-bottom:.25rem;margin-top:.1875rem}:host ::ng-deep .fd-slider__handle{display:none}:host ::ng-deep .delete button{border-color:transparent!important;background-color:transparent!important}img{width:100%}.pic-wrapper{background-repeat:no-repeat;background-position:center}.cover{max-width:100%;max-height:100%;min-height:100%;width:100%;height:100%;background-size:cover}.contain{max-width:100%;max-height:100%;min-height:100%;width:auto;height:100%;background-size:contain}.no-inlineEdit{min-height:140px;width:100%;position:relative;display:flex;flex-direction:column}.inlineEdit{width:100%;position:relative;display:flex;flex-direction:row-reverse;align-items:end;justify-content:start}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.AvatarComponent, selector: "fd-avatar", inputs: ["class", "id", "ariaLabel", "ariaLabelledby", "label", "size", "glyph", "zoomGlyph", "circle", "transparent", "contain", "placeholder", "tile", "border", "colorAccent", "random", "clickable", "backgroundImage", "image", "alterIcon", "backupImage"], outputs: ["avatarClicked", "zoomGlyphClicked"] }, { kind: "component", type: i4.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i5.FileUploaderComponent, selector: "fd-file-uploader", inputs: ["disabled", "required", "multiple", "accept", "dragndrop", "maxFileSize", "minFileSize", "id", "ariaLabel", "ariaLabelledBy", "placeholder", "buttonLabel", "buttonAriaLabel", "state", "fileLimit", "inputHidden", "width"], outputs: ["selectedFilesChanged", "selectedInvalidFiles", "onDragEnter", "onDragLeave"] }, { kind: "component", type: i6.ToolbarComponent, selector: "fd-toolbar", inputs: ["class", "shouldOverflow", "fdType", "hasTitle", "title", "active", "clearBorder", "forceOverflow", "tabindex"] }, { kind: "directive", type: i6.ToolbarItemDirective, selector: "[fd-toolbar-item]" }, { kind: "component", type: i7.SliderComponent, selector: "fdp-slider", inputs: ["class", "min", "max", "step", "jump", "tickmarksBetweenLabels", "mode", "showTicks", "showTicksLabels", "customValues", "tooltipMode", "hideProgressBar", "value"], outputs: ["sliderChange"] }, { kind: "component", type: i8.MaskComponent, selector: "bsu-mask", inputs: ["size", "marginTop"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i9.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
87
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: UiPictureFileComponent, decorators: [{
|
|
88
|
+
type: Component,
|
|
89
|
+
args: [{ selector: 'bsu-ui-picture-file', changeDetection: ChangeDetectionStrategy.OnPush, providers: [UploadService], template: "<div\n [style.max-height.px]=\"Setting.SizeMode === '2' ? null : layoutInfo.ControlBounds.height\"\n [class.no-inlineEdit]=\"!inlineEdit\"\n [class.inlineEdit]=\"inlineEdit\"\n>\n <div *ngIf=\"!((disableOrReadonly$ | async) === true || Setting.IsReadOnly === true)\">\n <fd-toolbar [fdType]=\"'transparent'\">\n <fd-file-uploader\n #uploader\n fd-toolbar-item\n [style.display]=\"'none'\"\n [id]=\"id\"\n [name]=\"'uploader_' + id\"\n [placeholder]=\"'AttachPicture' | bbbTranslate\"\n [buttonLabel]=\"'AttachPicture' | bbbTranslate\"\n [buttonAriaLabel]=\"'AttachPicture' | bbbTranslate\"\n [accept]=\"validExtensions\"\n [(ngModel)]=\"files\"\n [multiple]=\"false\"\n (selectedFilesChanged)=\"onFileSelection($event)\"\n ></fd-file-uploader>\n <button\n fd-toolbar-item\n fd-button\n [disabled]=\"this.value && value?.IsDeleted !== true\"\n glyph=\"attachment\"\n [fdType]=\"'transparent'\"\n (click)=\"uploader.open()\"\n ></button>\n <button\n class=\"delete\"\n fd-button\n fd-toolbar-item\n [disabled]=\"!this.value || value?.IsDeleted\"\n glyph=\"delete\"\n [fdType]=\"'transparent'\"\n (click)=\"onFileDeleted(uploader)\"\n ></button>\n\n <ng-container *ngIf=\"uploadState$ | async as uploadState\">\n <ng-container *ngIf=\"uploadState !== 'Complete'\">\n <fdp-slider\n fd-toolbar-item\n [id]=\"id + '1'\"\n [name]=\"'slider_' + id\"\n [value]=\"progress$ | async\"\n [min]=\"0\"\n [max]=\"100\"\n [step]=\"1\"\n >\n </fdp-slider>\n <button\n *ngIf=\"uploadState === 'Uploading'\"\n fd-toolbar-item\n fd-button\n glyph=\"stop\"\n fdType=\"transparent\"\n (click)=\"onTerminate()\"\n ></button>\n <button\n *ngIf=\"uploadState === 'Error'\"\n fd-toolbar-item\n fd-button\n glyph=\"refresh\"\n [fdType]=\"'transparent'\"\n (click)=\"onRetry()\"\n ></button>\n </ng-container>\n </ng-container>\n </fd-toolbar>\n </div>\n <div\n *ngIf=\"!inlineEdit; else avatarTemplate\"\n [style.max-height.px]=\"Setting.SizeMode === '0' ? layoutInfo.ControlBounds.height : null\"\n [style.max-width.px]=\"Setting.SizeMode === '0' ? layoutInfo.ControlBounds.width : null\"\n [style.text-align]=\"Setting.SizeMode === '3' ? 'center' : null\"\n >\n <img\n *ngIf=\"(value && imageUrl) || Setting.HasDefaultPicture\"\n [src]=\"imageUrl\"\n [ngClass]=\"Setting.SizeMode === '1' ? 'cover' : 'contain'\"\n [style.height.px]=\"Setting.SizeMode !== '2' ? layoutInfo.ControlBounds.height : null\"\n />\n </div>\n <ng-template #avatarTemplate>\n <fd-avatar [size]=\"'m'\" [image]=\"imageUrl\"></fd-avatar>\n </ng-template>\n</div>\n<bsu-mask *ngIf=\"uploading$ | async\"></bsu-mask>\n", styles: [":host{width:100%;height:100%;display:flex;flex-direction:column;justify-content:center;align-items:center;position:relative;overflow:hidden;margin-bottom:.25rem;margin-top:.1875rem}:host ::ng-deep .fd-slider__handle{display:none}:host ::ng-deep .delete button{border-color:transparent!important;background-color:transparent!important}img{width:100%}.pic-wrapper{background-repeat:no-repeat;background-position:center}.cover{max-width:100%;max-height:100%;min-height:100%;width:100%;height:100%;background-size:cover}.contain{max-width:100%;max-height:100%;min-height:100%;width:auto;height:100%;background-size:contain}.no-inlineEdit{min-height:140px;width:100%;position:relative;display:flex;flex-direction:column}.inlineEdit{width:100%;position:relative;display:flex;flex-direction:row-reverse;align-items:end;justify-content:start}\n"] }]
|
|
90
|
+
}], propDecorators: { imageUrl: [{
|
|
91
|
+
type: Input
|
|
92
|
+
}], sizeMode: [{
|
|
93
|
+
type: Input
|
|
94
|
+
}] } });
|
|
95
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktcGljdHVyZS1maWxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLXNhcC11aS9zcmMvbGliL3VpLXBpY3R1cmUtZmlsZS91aS1waWN0dXJlLWZpbGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvdWktcGljdHVyZS1maWxlL3VpLXBpY3R1cmUtZmlsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFHN0YsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RyxPQUFPLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7QUFTNUQsTUFBTSxPQUFPLHNCQUF1QixTQUFRLGtCQUFrQjtJQVA5RDs7UUFVSSxVQUFLLEdBQVcsRUFBRSxDQUFDO1FBSW5CLGlCQUFZLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztLQTZFdEM7SUExRUcsUUFBUTtRQUNKLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDO1FBQy9DLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUM7UUFDckQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQztRQUNqRCxJQUFJLENBQUMsT0FBTyxDQUFDLEVB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RyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDUixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ3BCLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdkIsTUFBTSxLQUFLLEdBQUc7b0JBQ1YsR0FBRyxPQUFPO29CQUNWLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtpQkFDekIsQ0FBQztnQkFDRixJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDeEQ7UUFDTCxDQUFDLENBQUMsQ0FDTCxDQUFDO0lBQ04sQ0FBQzs7bUhBbkZRLHNCQUFzQjt1R0FBdEIsc0JBQXNCLHNHQUZwQixDQUFDLGFBQWEsQ0FBQyxpRENaOUIscXJIQXlGQTsyRkQzRWEsc0JBQXNCO2tCQVBsQyxTQUFTOytCQUNJLHFCQUFxQixtQkFHZCx1QkFBdUIsQ0FBQyxNQUFNLGFBQ3BDLENBQUMsYUFBYSxDQUFDOzhCQUdqQixRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZpbGVVcGxvYWRlckNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZSc7XG5cbmltcG9ydCB7IEZpZWxkQmFzZUNvbXBvbmVudCwgQmFyc2FBcGksIFVwbG9hZFNlcnZpY2UsIGdldFZhbGlkRXh0ZW5zaW9uIH0gZnJvbSAnYmFyc2Etbm92aW4tcmF5LWNvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGV4aGF1c3RNYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2JzdS11aS1waWN0dXJlLWZpbGUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi91aS1waWN0dXJlLWZpbGUuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3VpLXBpY3R1cmUtZmlsZS5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW1VwbG9hZFNlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIFVpUGljdHVyZUZpbGVDb21wb25lbnQgZXh0ZW5kcyBGaWVsZEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgQElucHV0KCkgaW1hZ2VVcmw6IGFueTtcbiAgICBASW5wdXQoKSBzaXplTW9kZTogYW55O1xuICAgIGZpbGVzOiBGaWxlW10gPSBbXTtcbiAgICB1cGxvYWRTdGF0ZSQ6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgICBwcm9ncmVzcyQ6IE9ic2VydmFibGU8YW55PjtcbiAgICB1cGxvYWRpbmckOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAgIGNhbmNlbGF0aW9uJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgdmFsaWRFeHRlbnNpb25zOiBhbnk7XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgdGhpcy5wcm9ncmVzcyQgPSB0aGlzLl91cGxvYWRTZXJ2aWNlLnByb2dyZXNzJDtcbiAgICAgICAgdGhpcy51cGxvYWRTdGF0ZSQgPSB0aGlzLl91cGxvYWRTZXJ2aWNlLnVwbG9hZFN0YXRlJDtcbiAgICAgICAgdGhpcy51cGxvYWRpbmckID0gdGhpcy5fdXBsb2FkU2VydmljZS51cGxvYWRpbmckO1xuICAgICAgICB0aGlzLmNvbnRleHQub24oe1xuICAgICAgICAgICAgRGlzcGFseUltYWdlOiB0aGlzLl9kaXNwbGF5SW1hZ2UuYmluZCh0aGlzKVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5pbWFnZVVybCA9IHRoaXMuY29udGV4dC5pbWFnZVVybDtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuY29udGV4dC5fdmFsdWU7XG4gICAgICAgIHRoaXMudmFsaWRFeHRlbnNpb25zID0gdGhpcy5TZXR0aW5nLlZhbGlkRXh0ZW5zaW9uXG4gICAgICAgICAgICA/IGdldFZhbGlkRXh0ZW5zaW9uKHRoaXMuU2V0dGluZy5WYWxpZEV4dGVuc2lvbnMpXG4gICAgICAgICAgICA6ICcuanBlZywuanBnLC5naWYsLnBuZywuYm1wLC50aWYnO1xuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5jb250ZXh0LnVuKCdEaXNwbGF5SW1hZ2UnLCB0aGlzLl9kaXNwbGF5SW1hZ2UpO1xuICAgIH1cbiAgICBvbkZpbGVTZWxlY3Rpb24oZmlsZXM6IEZpbGVbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLmZpbGVzID0gZmlsZXM7XG4gICAgICAgIHRoaXMuX3VwbG9hZChmaWxlcyk7XG4gICAgfVxuICAgIG9uRmlsZURlbGV0ZWQodXBsb2FkZXJDb21wb25lbnQ6IEZpbGVVcGxvYWRlckNvbXBvbmVudCk6IHZvaWQge1xuICAgICAgICB1cGxvYWRlckNvbXBvbmVudC5pbnB1dFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlID0gbnVsbDtcbiAgICAgICAgdGhpcy52YWx1ZSA9IG51bGw7XG4gICAgICAgIHRoaXMuZmlyZUNvbnRleHRFdmVudCgnQ2hhbmdlJywgdGhpcy5jb250ZXh0LCBudWxsKTtcbiAgICB9XG5cbiAgICBvbkRvd25sb2FkRmlsZSgpOiB2b2lkIHtcbiAgICAgICAgQmFyc2FBcGkuQ29tbW9uLkZpbGUuT3BlbkZpbGUodGhpcy52YWx1ZS5GaWxlSWQsIGZhbHNlLCB0aGlzLCB0cnVlLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgb25SZXRyeSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdXBsb2FkKHRoaXMuZmlsZXMpO1xuICAgIH1cblxuICAgIG9uVGVybWluYXRlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNhbmNlbGF0aW9uJC5uZXh0KCk7XG4gICAgfVxuICAgIHByaXZhdGUgX2Rpc3BsYXlJbWFnZShpbWFnZVVybCwgc2l6ZU1vZGUsIHZhbHVlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW1hZ2VVcmwgPSBpbWFnZVVybDtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLnNpemVNb2RlID0gc2l6ZU1vZGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdXBsb2FkKGZpbGVzOiBGaWxlW10pOiB2b2lkIHtcbiAgICAgICAgb2YodHJ1ZSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgICBleGhhdXN0TWFwKCgpID0+IHRoaXMudXBsb2FkRmlsZShmaWxlcykpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGxvYWRGaWxlKGZpbGVzOiBGaWxlW10pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgICBmaWxlcy5mb3JFYWNoKChmaWxlKSA9PiB7XG4gICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ3VuaWNGaWxlTmFtZScsICd4JyArIEJhcnNhQXBpLkNvbW1vbi5VdGlsLkdldE5ld01ldGFHdWlkKCkgKyAnOzs7JyArIGZpbGUubmFtZSk7XG4gICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCBmaWxlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX3VwbG9hZFNlcnZpY2UudXBsb2FkKGZvcm1EYXRhLCB0aGlzLlNldHRpbmcuQ29udHJvbEZpZWxkRGVmSWQpLnBpcGUoXG4gICAgICAgICAgICB0YXAoKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlcykpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGljdHVyZSA9IHJlc1swXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5waWN0dXJlLFxuICAgICAgICAgICAgICAgICAgICAgICAgRmlsZUlkOiBwaWN0dXJlLkZpbGVJZFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcmVDb250ZXh0RXZlbnQoJ0NoYW5nZScsIHRoaXMuY29udGV4dCwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxufVxuIiwiPGRpdlxuICAgIFtzdHlsZS5tYXgtaGVpZ2h0LnB4XT1cIlNldHRpbmcuU2l6ZU1vZGUgPT09ICcyJyA/IG51bGwgOiBsYXlvdXRJbmZvLkNvbnRyb2xCb3VuZHMuaGVpZ2h0XCJcbiAgICBbY2xhc3Mubm8taW5saW5lRWRpdF09XCIhaW5saW5lRWRpdFwiXG4gICAgW2NsYXNzLmlubGluZUVkaXRdPVwiaW5saW5lRWRpdFwiXG4+XG4gICAgPGRpdiAqbmdJZj1cIiEoKGRpc2FibGVPclJlYWRvbmx5JCB8IGFzeW5jKSA9PT0gdHJ1ZSB8fCBTZXR0aW5nLklzUmVhZE9ubHkgPT09IHRydWUpXCI+XG4gICAgICAgIDxmZC10b29sYmFyIFtmZFR5cGVdPVwiJ3RyYW5zcGFyZW50J1wiPlxuICAgICAgICAgICAgPGZkLWZpbGUtdXBsb2FkZXJcbiAgICAgICAgICAgICAgICAjdXBsb2FkZXJcbiAgICAgICAgICAgICAgICBmZC10b29sYmFyLWl0ZW1cbiAgICAgICAgICAgICAgICBbc3R5bGUuZGlzcGxheV09XCInbm9uZSdcIlxuICAgICAgICAgICAgICAgIFtpZF09XCJpZFwiXG4gICAgICAgICAgICAgICAgW25hbWVdPVwiJ3VwbG9hZGVyXycgKyBpZFwiXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidBdHRhY2hQaWN0dXJlJyB8IGJiYlRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgW2J1dHRvbkxhYmVsXT1cIidBdHRhY2hQaWN0dXJlJyB8IGJiYlRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgW2J1dHRvbkFyaWFMYWJlbF09XCInQXR0YWNoUGljdHVyZScgfCBiYmJUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIFthY2NlcHRdPVwidmFsaWRFeHRlbnNpb25zXCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZpbGVzXCJcbiAgICAgICAgICAgICAgICBbbXVsdGlwbGVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgIChzZWxlY3RlZEZpbGVzQ2hhbmdlZCk9XCJvbkZpbGVTZWxlY3Rpb24oJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC9mZC1maWxlLXVwbG9hZGVyPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGZkLXRvb2xiYXItaXRlbVxuICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ0aGlzLnZhbHVlICYmIHZhbHVlPy5Jc0RlbGV0ZWQgIT09IHRydWVcIlxuICAgICAgICAgICAgICAgIGdseXBoPVwiYXR0YWNobWVudFwiXG4gICAgICAgICAgICAgICAgW2ZkVHlwZV09XCIndHJhbnNwYXJlbnQnXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidXBsb2FkZXIub3BlbigpXCJcbiAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cImRlbGV0ZVwiXG4gICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgZmQtdG9vbGJhci1pdGVtXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiF0aGlzLnZhbHVlIHx8IHZhbHVlPy5Jc0RlbGV0ZWRcIlxuICAgICAgICAgICAgICAgIGdseXBoPVwiZGVsZXRlXCJcbiAgICAgICAgICAgICAgICBbZmRUeXBlXT1cIid0cmFuc3BhcmVudCdcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkZpbGVEZWxldGVkKHVwbG9hZGVyKVwiXG4gICAgICAgICAgICA+PC9idXR0b24+XG5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ1cGxvYWRTdGF0ZSQgfCBhc3luYyBhcyB1cGxvYWRTdGF0ZVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ1cGxvYWRTdGF0ZSAhPT0gJ0NvbXBsZXRlJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZmRwLXNsaWRlclxuICAgICAgICAgICAgICAgICAgICAgICAgZmQtdG9vbGJhci1pdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiaWQgKyAnMSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwiJ3NsaWRlcl8nICsgaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInByb2dyZXNzJCB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttaW5dPVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF4XT1cIjEwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3RlcF09XCIxXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8L2ZkcC1zbGlkZXI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwidXBsb2FkU3RhdGUgPT09ICdVcGxvYWRpbmcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZkLXRvb2xiYXItaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBnbHlwaD1cInN0b3BcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uVGVybWluYXRlKClcIlxuICAgICAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwidXBsb2FkU3RhdGUgPT09ICdFcnJvcidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZmQtdG9vbGJhci1pdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoPVwicmVmcmVzaFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZmRUeXBlXT1cIid0cmFuc3BhcmVudCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUmV0cnkoKVwiXG4gICAgICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2ZkLXRvb2xiYXI+XG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgICAqbmdJZj1cIiFpbmxpbmVFZGl0OyBlbHNlIGF2YXRhclRlbXBsYXRlXCJcbiAgICAgICAgW3N0eWxlLm1heC1oZWlnaHQucHhdPVwiU2V0dGluZy5TaXplTW9kZSA9PT0gJzAnID8gbGF5b3V0SW5mby5Db250cm9sQm91bmRzLmhlaWdodCA6IG51bGxcIlxuICAgICAgICBbc3R5bGUubWF4LXdpZHRoLnB4XT1cIlNldHRpbmcuU2l6ZU1vZGUgPT09ICcwJyA/IGxheW91dEluZm8uQ29udHJvbEJvdW5kcy53aWR0aCA6IG51bGxcIlxuICAgICAgICBbc3R5bGUudGV4dC1hbGlnbl09XCJTZXR0aW5nLlNpemVNb2RlID09PSAnMycgPyAnY2VudGVyJyA6IG51bGxcIlxuICAgID5cbiAgICAgICAgPGltZ1xuICAgICAgICAgICAgKm5nSWY9XCIodmFsdWUgJiYgaW1hZ2VVcmwpIHx8IFNldHRpbmcuSGFzRGVmYXVsdFBpY3R1cmVcIlxuICAgICAgICAgICAgW3NyY109XCJpbWFnZVVybFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJTZXR0aW5nLlNpemVNb2RlID09PSAnMScgPyAnY292ZXInIDogJ2NvbnRhaW4nXCJcbiAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiU2V0dGluZy5TaXplTW9kZSAhPT0gJzInID8gbGF5b3V0SW5mby5Db250cm9sQm91bmRzLmhlaWdodCA6IG51bGxcIlxuICAgICAgICAvPlxuICAgIDwvZGl2PlxuICAgIDxuZy10ZW1wbGF0ZSAjYXZhdGFyVGVtcGxhdGU+XG4gICAgICAgIDxmZC1hdmF0YXIgW3NpemVdPVwiJ20nXCIgW2ltYWdlXT1cImltYWdlVXJsXCI+PC9mZC1hdmF0YXI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuPGJzdS1tYXNrICpuZ0lmPVwidXBsb2FkaW5nJCB8IGFzeW5jXCI+PC9ic3UtbWFzaz5cbiJdfQ==
|