@ecodev/natural 41.3.0 → 42.2.0
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/ecodev-natural.d.ts +1 -9
- package/esm2020/ecodev-natural.mjs +5 -0
- package/esm2020/lib/classes/abstract-controller.mjs +30 -0
- package/esm2020/lib/classes/abstract-detail.mjs +152 -0
- package/esm2020/lib/classes/abstract-editable-list.mjs +96 -0
- package/esm2020/lib/classes/abstract-list.mjs +406 -0
- package/esm2020/lib/classes/abstract-navigable-list.mjs +126 -0
- package/{esm2015/lib/classes/apollo-utils.js → esm2020/lib/classes/apollo-utils.mjs} +0 -0
- package/esm2020/lib/classes/data-source.mjs +76 -0
- package/{esm2015/lib/classes/query-variable-manager-utils.js → esm2020/lib/classes/query-variable-manager-utils.mjs} +0 -0
- package/esm2020/lib/classes/query-variable-manager.mjs +172 -0
- package/{esm2015/lib/classes/rxjs.js → esm2020/lib/classes/rxjs.mjs} +0 -0
- package/{esm2015/lib/classes/tld.js → esm2020/lib/classes/tld.mjs} +0 -0
- package/{esm2015/lib/classes/utility.js → esm2020/lib/classes/utility.mjs} +0 -0
- package/esm2020/lib/classes/validators.mjs +179 -0
- package/esm2020/lib/directives/http-prefix.directive.mjs +50 -0
- package/esm2020/lib/modules/alert/alert.module.mjs +20 -0
- package/esm2020/lib/modules/alert/alert.service.mjs +55 -0
- package/esm2020/lib/modules/alert/confirm.component.mjs +20 -0
- package/{esm2015/lib/modules/alert/public-api.js → esm2020/lib/modules/alert/public-api.mjs} +0 -0
- package/esm2020/lib/modules/avatar/avatar.module.mjs +19 -0
- package/esm2020/lib/modules/avatar/component/avatar.component.mjs +190 -0
- package/{esm2015/lib/modules/avatar/public-api.js → esm2020/lib/modules/avatar/public-api.mjs} +0 -0
- package/esm2020/lib/modules/avatar/service/avatar.service.mjs +66 -0
- package/esm2020/lib/modules/avatar/sources/gravatar.mjs +29 -0
- package/{esm2015/lib/modules/avatar/sources/image.js → esm2020/lib/modules/avatar/sources/image.mjs} +0 -0
- package/{esm2015/lib/modules/avatar/sources/initials.js → esm2020/lib/modules/avatar/sources/initials.mjs} +0 -0
- package/{esm2015/lib/modules/avatar/sources/source.js → esm2020/lib/modules/avatar/sources/source.mjs} +1 -1
- package/esm2020/lib/modules/columns-picker/columns-picker-column.directive.mjs +43 -0
- package/esm2020/lib/modules/columns-picker/columns-picker.component.mjs +84 -0
- package/esm2020/lib/modules/columns-picker/columns-picker.module.mjs +47 -0
- package/{esm2015/lib/modules/columns-picker/public-api.js → esm2020/lib/modules/columns-picker/public-api.mjs} +0 -0
- package/esm2020/lib/modules/common/common-module.mjs +50 -0
- package/esm2020/lib/modules/common/directives/linkable-tab.directive.mjs +79 -0
- package/esm2020/lib/modules/common/directives/src-density.directive.mjs +62 -0
- package/esm2020/lib/modules/common/pipes/capitalize.pipe.mjs +18 -0
- package/esm2020/lib/modules/common/pipes/ellipsis.pipe.mjs +14 -0
- package/esm2020/lib/modules/common/pipes/enum.pipe.mjs +25 -0
- package/esm2020/lib/modules/common/pipes/swiss-date.pipe.mjs +20 -0
- package/esm2020/lib/modules/common/public-api.mjs +13 -0
- package/esm2020/lib/modules/common/services/memory-storage.mjs +112 -0
- package/esm2020/lib/modules/common/services/seo.service.mjs +114 -0
- package/esm2020/lib/modules/detail-header/detail-header.component.mjs +76 -0
- package/esm2020/lib/modules/detail-header/detail-header.module.mjs +21 -0
- package/{esm2015/lib/modules/detail-header/public-api.js → esm2020/lib/modules/detail-header/public-api.mjs} +0 -0
- package/esm2020/lib/modules/dialog-trigger/dialog-trigger.component.mjs +69 -0
- package/esm2020/lib/modules/dialog-trigger/dialog-trigger.module.mjs +19 -0
- package/{esm2015/lib/modules/dialog-trigger/public-api.js → esm2020/lib/modules/dialog-trigger/public-api.mjs} +0 -0
- package/esm2020/lib/modules/dropdown-components/abstract-association-select-component.directive.mjs +98 -0
- package/esm2020/lib/modules/dropdown-components/natural-dropdown-components.module.mjs +92 -0
- package/{esm2015/lib/modules/dropdown-components/public-api.js → esm2020/lib/modules/dropdown-components/public-api.mjs} +0 -0
- package/esm2020/lib/modules/dropdown-components/type-date/type-date.component.mjs +133 -0
- package/esm2020/lib/modules/dropdown-components/type-date-range/type-date-range.component.mjs +137 -0
- package/esm2020/lib/modules/dropdown-components/type-hierarchic-selector/type-hierarchic-selector.component.mjs +69 -0
- package/esm2020/lib/modules/dropdown-components/type-natural-select/type-natural-select.component.mjs +38 -0
- package/esm2020/lib/modules/dropdown-components/type-number/type-number.component.mjs +104 -0
- package/esm2020/lib/modules/dropdown-components/type-select/type-select.component.mjs +169 -0
- package/esm2020/lib/modules/dropdown-components/type-text/type-text.component.mjs +57 -0
- package/{esm2015/lib/modules/dropdown-components/types.js → esm2020/lib/modules/dropdown-components/types.mjs} +0 -0
- package/{esm2015/lib/modules/dropdown-components/utils.js → esm2020/lib/modules/dropdown-components/utils.mjs} +0 -0
- package/esm2020/lib/modules/file/abstract-file.mjs +231 -0
- package/esm2020/lib/modules/file/component/file.component.mjs +143 -0
- package/esm2020/lib/modules/file/file-drop.directive.mjs +110 -0
- package/esm2020/lib/modules/file/file-select.directive.mjs +28 -0
- package/esm2020/lib/modules/file/file.module.mjs +24 -0
- package/esm2020/lib/modules/file/file.service.mjs +48 -0
- package/{esm2015/lib/modules/file/public-api.js → esm2020/lib/modules/file/public-api.mjs} +0 -0
- package/{esm2015/lib/modules/file/types.js → esm2020/lib/modules/file/types.mjs} +0 -0
- package/{esm2015/lib/modules/file/utils.js → esm2020/lib/modules/file/utils.mjs} +3 -4
- package/esm2020/lib/modules/fixed-button/fixed-button.component.mjs +27 -0
- package/esm2020/lib/modules/fixed-button/fixed-button.module.mjs +21 -0
- package/{esm2015/lib/modules/fixed-button/public-api.js → esm2020/lib/modules/fixed-button/public-api.mjs} +0 -0
- package/esm2020/lib/modules/fixed-button-detail/fixed-button-detail.component.mjs +36 -0
- package/esm2020/lib/modules/fixed-button-detail/fixed-button-detail.module.mjs +20 -0
- package/{esm2015/lib/modules/fixed-button-detail/public-api.js → esm2020/lib/modules/fixed-button-detail/public-api.mjs} +0 -0
- package/{esm2015/lib/modules/hierarchic-selector/classes/flat-node.js → esm2020/lib/modules/hierarchic-selector/classes/flat-node.mjs} +1 -1
- package/{esm2015/lib/modules/hierarchic-selector/classes/hierarchic-configuration.js → esm2020/lib/modules/hierarchic-selector/classes/hierarchic-configuration.mjs} +0 -0
- package/{esm2015/lib/modules/hierarchic-selector/classes/hierarchic-filters-configuration.js → esm2020/lib/modules/hierarchic-selector/classes/hierarchic-filters-configuration.mjs} +0 -0
- package/{esm2015/lib/modules/hierarchic-selector/classes/model-node.js → esm2020/lib/modules/hierarchic-selector/classes/model-node.mjs} +1 -1
- package/esm2020/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.component.mjs +364 -0
- package/esm2020/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.service.mjs +258 -0
- package/esm2020/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.component.mjs +31 -0
- package/esm2020/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.service.mjs +23 -0
- package/esm2020/lib/modules/hierarchic-selector/hierarchic-selector.module.mjs +81 -0
- package/{esm2015/lib/modules/hierarchic-selector/public-api.js → esm2020/lib/modules/hierarchic-selector/public-api.mjs} +0 -0
- package/esm2020/lib/modules/icon/icon.component.mjs +92 -0
- package/esm2020/lib/modules/icon/icon.module.mjs +30 -0
- package/{esm2015/lib/modules/icon/public-api.js → esm2020/lib/modules/icon/public-api.mjs} +0 -0
- package/esm2020/lib/modules/matomo/matomo-module.module.mjs +12 -0
- package/esm2020/lib/modules/matomo/matomo.service.mjs +105 -0
- package/{esm2015/lib/modules/matomo/public-api.js → esm2020/lib/modules/matomo/public-api.mjs} +0 -0
- package/esm2020/lib/modules/panels/abstract-panel.mjs +56 -0
- package/{esm2015/lib/modules/panels/fallback-if-no-opened-panels.urlmatcher.js → esm2020/lib/modules/panels/fallback-if-no-opened-panels.urlmatcher.mjs} +0 -0
- package/esm2020/lib/modules/panels/panels.component.mjs +26 -0
- package/esm2020/lib/modules/panels/panels.module.mjs +33 -0
- package/esm2020/lib/modules/panels/panels.service.mjs +325 -0
- package/{esm2015/lib/modules/panels/panels.urlmatcher.js → esm2020/lib/modules/panels/panels.urlmatcher.mjs} +0 -0
- package/{esm2015/lib/modules/panels/public-api.js → esm2020/lib/modules/panels/public-api.mjs} +0 -0
- package/{esm2015/lib/modules/panels/types.js → esm2020/lib/modules/panels/types.mjs} +0 -0
- package/{esm2015/lib/modules/relations/public-api.js → esm2020/lib/modules/relations/public-api.mjs} +0 -0
- package/esm2020/lib/modules/relations/relations.component.mjs +198 -0
- package/esm2020/lib/modules/relations/relations.module.mjs +58 -0
- package/{esm2015/lib/modules/search/classes/graphql-doctrine.js → esm2020/lib/modules/search/classes/graphql-doctrine.mjs} +0 -0
- package/{esm2015/lib/modules/search/classes/graphql-doctrine.types.js → esm2020/lib/modules/search/classes/graphql-doctrine.types.mjs} +0 -0
- package/{esm2015/lib/modules/search/classes/transformers.js → esm2020/lib/modules/search/classes/transformers.mjs} +0 -0
- package/{esm2015/lib/modules/search/classes/url.js → esm2020/lib/modules/search/classes/url.mjs} +0 -0
- package/{esm2015/lib/modules/search/classes/utils.js → esm2020/lib/modules/search/classes/utils.mjs} +0 -0
- package/{esm2015/lib/modules/search/dropdown-container/dropdown-container-animations.js → esm2020/lib/modules/search/dropdown-container/dropdown-container-animations.mjs} +0 -0
- package/esm2020/lib/modules/search/dropdown-container/dropdown-container.component.mjs +88 -0
- package/{esm2015/lib/modules/search/dropdown-container/dropdown-ref.js → esm2020/lib/modules/search/dropdown-container/dropdown-ref.mjs} +1 -1
- package/esm2020/lib/modules/search/dropdown-container/dropdown.service.mjs +93 -0
- package/esm2020/lib/modules/search/facet-selector/facet-selector.component.mjs +50 -0
- package/esm2020/lib/modules/search/group/group.component.mjs +45 -0
- package/esm2020/lib/modules/search/input/input.component.mjs +328 -0
- package/{esm2015/lib/modules/search/public-api.js → esm2020/lib/modules/search/public-api.mjs} +0 -0
- package/esm2020/lib/modules/search/search/search.component.mjs +78 -0
- package/esm2020/lib/modules/search/search.module.mjs +84 -0
- package/{esm2015/lib/modules/search/types/dropdown-component.js → esm2020/lib/modules/search/types/dropdown-component.mjs} +0 -0
- package/{esm2015/lib/modules/search/types/facet.js → esm2020/lib/modules/search/types/facet.mjs} +0 -0
- package/{esm2015/lib/modules/search/types/values.js → esm2020/lib/modules/search/types/values.mjs} +0 -0
- package/esm2020/lib/modules/select/abstract-select.component.mjs +186 -0
- package/{esm2015/lib/modules/select/public-api.js → esm2020/lib/modules/select/public-api.mjs} +0 -0
- package/esm2020/lib/modules/select/select/select.component.mjs +207 -0
- package/esm2020/lib/modules/select/select-enum/select-enum.component.mjs +47 -0
- package/esm2020/lib/modules/select/select-hierarchic/select-hierarchic.component.mjs +127 -0
- package/esm2020/lib/modules/select/select.module.mjs +68 -0
- package/{esm2015/lib/modules/sidenav/public-api.js → esm2020/lib/modules/sidenav/public-api.mjs} +0 -0
- package/esm2020/lib/modules/sidenav/sidenav/sidenav.component.mjs +15 -0
- package/esm2020/lib/modules/sidenav/sidenav-container/sidenav-container.component.mjs +87 -0
- package/esm2020/lib/modules/sidenav/sidenav-content/sidenav-content.component.mjs +12 -0
- package/esm2020/lib/modules/sidenav/sidenav-stack.service.mjs +52 -0
- package/esm2020/lib/modules/sidenav/sidenav.module.mjs +25 -0
- package/esm2020/lib/modules/sidenav/sidenav.service.mjs +195 -0
- package/{esm2015/lib/modules/stamp/public-api.js → esm2020/lib/modules/stamp/public-api.mjs} +0 -0
- package/esm2020/lib/modules/stamp/stamp-module.module.mjs +18 -0
- package/esm2020/lib/modules/stamp/stamp.component.mjs +14 -0
- package/{esm2015/lib/modules/table-button/public-api.js → esm2020/lib/modules/table-button/public-api.mjs} +0 -0
- package/esm2020/lib/modules/table-button/table-button.component.mjs +48 -0
- package/esm2020/lib/modules/table-button/table-button.module.mjs +21 -0
- package/esm2020/lib/services/abstract-model.service.mjs +509 -0
- package/esm2020/lib/services/enum.service.mjs +67 -0
- package/esm2020/lib/services/link-mutation.service.mjs +153 -0
- package/esm2020/lib/services/persistence.service.mjs +113 -0
- package/esm2020/lib/services/swiss-parsing-date-adapter.service.mjs +55 -0
- package/{esm2015/lib/types/types.js → esm2020/lib/types/types.mjs} +0 -0
- package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
- package/fesm2015/{ecodev-natural.js → ecodev-natural.mjs} +2808 -2392
- package/fesm2015/ecodev-natural.mjs.map +1 -0
- package/fesm2020/ecodev-natural.mjs +10495 -0
- package/fesm2020/ecodev-natural.mjs.map +1 -0
- package/lib/classes/abstract-controller.d.ts +3 -0
- package/lib/classes/abstract-detail.d.ts +3 -0
- package/lib/classes/abstract-editable-list.d.ts +3 -0
- package/lib/classes/abstract-list.d.ts +3 -0
- package/lib/classes/abstract-navigable-list.d.ts +3 -0
- package/lib/classes/query-variable-manager.d.ts +19 -8
- package/lib/directives/http-prefix.directive.d.ts +3 -0
- package/lib/modules/alert/alert.module.d.ts +9 -0
- package/lib/modules/alert/alert.service.d.ts +3 -0
- package/lib/modules/alert/confirm.component.d.ts +3 -0
- package/lib/modules/avatar/avatar.module.d.ts +6 -0
- package/lib/modules/avatar/component/avatar.component.d.ts +4 -0
- package/lib/modules/avatar/service/avatar.service.d.ts +3 -0
- package/lib/modules/columns-picker/columns-picker-column.directive.d.ts +3 -0
- package/lib/modules/columns-picker/columns-picker.component.d.ts +3 -0
- package/lib/modules/columns-picker/columns-picker.module.d.ts +13 -0
- package/lib/modules/common/common-module.d.ts +15 -0
- package/lib/modules/common/directives/linkable-tab.directive.d.ts +3 -0
- package/lib/modules/common/directives/src-density.directive.d.ts +3 -0
- package/lib/modules/common/pipes/capitalize.pipe.d.ts +3 -0
- package/lib/modules/common/pipes/ellipsis.pipe.d.ts +3 -0
- package/lib/modules/common/pipes/enum.pipe.d.ts +3 -0
- package/lib/modules/common/pipes/swiss-date.pipe.d.ts +3 -0
- package/lib/modules/common/public-api.d.ts +0 -1
- package/lib/modules/common/services/memory-storage.d.ts +3 -0
- package/lib/modules/common/services/seo.service.d.ts +3 -0
- package/lib/modules/detail-header/detail-header.component.d.ts +3 -0
- package/lib/modules/detail-header/detail-header.module.d.ts +9 -0
- package/lib/modules/dialog-trigger/dialog-trigger.component.d.ts +3 -0
- package/lib/modules/dialog-trigger/dialog-trigger.module.d.ts +7 -0
- package/lib/modules/dropdown-components/abstract-association-select-component.directive.d.ts +3 -0
- package/lib/modules/dropdown-components/natural-dropdown-components.module.d.ts +22 -0
- package/lib/modules/dropdown-components/type-date/type-date.component.d.ts +3 -0
- package/lib/modules/dropdown-components/type-date-range/type-date-range.component.d.ts +3 -0
- package/lib/modules/dropdown-components/type-hierarchic-selector/type-hierarchic-selector.component.d.ts +3 -0
- package/lib/modules/dropdown-components/type-natural-select/type-natural-select.component.d.ts +3 -0
- package/lib/modules/dropdown-components/type-number/type-number.component.d.ts +3 -0
- package/lib/modules/dropdown-components/type-select/type-select.component.d.ts +3 -0
- package/lib/modules/dropdown-components/type-text/type-text.component.d.ts +3 -0
- package/lib/modules/file/abstract-file.d.ts +3 -0
- package/lib/modules/file/component/file.component.d.ts +3 -0
- package/lib/modules/file/file-drop.directive.d.ts +3 -0
- package/lib/modules/file/file-select.directive.d.ts +3 -0
- package/lib/modules/file/file.module.d.ts +11 -0
- package/lib/modules/file/file.service.d.ts +3 -0
- package/lib/modules/fixed-button/fixed-button.component.d.ts +3 -0
- package/lib/modules/fixed-button/fixed-button.module.d.ts +9 -0
- package/lib/modules/fixed-button-detail/fixed-button-detail.component.d.ts +3 -0
- package/lib/modules/fixed-button-detail/fixed-button-detail.module.d.ts +8 -0
- package/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.component.d.ts +3 -0
- package/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.service.d.ts +3 -0
- package/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.component.d.ts +3 -0
- package/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.service.d.ts +3 -0
- package/lib/modules/hierarchic-selector/hierarchic-selector.module.d.ts +21 -0
- package/lib/modules/icon/icon.component.d.ts +3 -0
- package/lib/modules/icon/icon.module.d.ts +7 -0
- package/lib/modules/matomo/matomo-module.module.d.ts +4 -0
- package/lib/modules/matomo/matomo.service.d.ts +3 -0
- package/lib/modules/panels/abstract-panel.d.ts +3 -0
- package/lib/modules/panels/panels.component.d.ts +3 -0
- package/lib/modules/panels/panels.module.d.ts +8 -0
- package/lib/modules/panels/panels.service.d.ts +3 -0
- package/lib/modules/relations/relations.component.d.ts +3 -0
- package/lib/modules/relations/relations.module.d.ts +15 -0
- package/lib/modules/search/dropdown-container/dropdown-container.component.d.ts +3 -0
- package/lib/modules/search/dropdown-container/dropdown-ref.d.ts +1 -1
- package/lib/modules/search/dropdown-container/dropdown.service.d.ts +3 -0
- package/lib/modules/search/facet-selector/facet-selector.component.d.ts +3 -0
- package/lib/modules/search/group/group.component.d.ts +3 -0
- package/lib/modules/search/input/input.component.d.ts +3 -0
- package/lib/modules/search/search/search.component.d.ts +3 -0
- package/lib/modules/search/search.module.d.ts +19 -0
- package/lib/modules/select/abstract-select.component.d.ts +4 -1
- package/lib/modules/select/select/select.component.d.ts +3 -0
- package/lib/modules/select/select-enum/select-enum.component.d.ts +9 -2
- package/lib/modules/select/select-hierarchic/select-hierarchic.component.d.ts +3 -0
- package/lib/modules/select/select.module.d.ts +19 -0
- package/lib/modules/sidenav/sidenav/sidenav.component.d.ts +3 -0
- package/lib/modules/sidenav/sidenav-container/sidenav-container.component.d.ts +3 -0
- package/lib/modules/sidenav/sidenav-content/sidenav-content.component.d.ts +3 -0
- package/lib/modules/sidenav/sidenav-stack.service.d.ts +4 -1
- package/lib/modules/sidenav/sidenav.module.d.ts +11 -0
- package/lib/modules/sidenav/sidenav.service.d.ts +3 -0
- package/lib/modules/stamp/stamp-module.module.d.ts +6 -0
- package/lib/modules/stamp/stamp.component.d.ts +3 -0
- package/lib/modules/table-button/table-button.component.d.ts +3 -0
- package/lib/modules/table-button/table-button.module.d.ts +9 -0
- package/lib/services/enum.service.d.ts +3 -0
- package/lib/services/link-mutation.service.d.ts +3 -0
- package/lib/services/persistence.service.d.ts +3 -0
- package/lib/services/swiss-parsing-date-adapter.service.d.ts +4 -1
- package/package.json +25 -12
- package/src/lib/modules/alert/_alert.theme.scss +1 -1
- package/src/lib/modules/file/component/_file.theme.scss +1 -1
- package/src/lib/modules/icon/_icon.theme.scss +1 -1
- package/src/lib/modules/search/dropdown-container/_dropdown-container.theme.scss +1 -1
- package/src/lib/modules/table-button/_table-button.theme.scss +1 -1
- package/src/lib/styles/_table.scss +1 -1
- package/theming/_natural.theme.scss +1 -1
- package/bundles/ecodev-natural.umd.js +0 -11318
- package/bundles/ecodev-natural.umd.js.map +0 -1
- package/ecodev-natural.metadata.json +0 -1
- package/esm2015/ecodev-natural.js +0 -14
- package/esm2015/lib/classes/abstract-controller.js +0 -29
- package/esm2015/lib/classes/abstract-detail.js +0 -157
- package/esm2015/lib/classes/abstract-editable-list.js +0 -97
- package/esm2015/lib/classes/abstract-list.js +0 -409
- package/esm2015/lib/classes/abstract-navigable-list.js +0 -126
- package/esm2015/lib/classes/data-source.js +0 -76
- package/esm2015/lib/classes/query-variable-manager.js +0 -161
- package/esm2015/lib/classes/validators.js +0 -176
- package/esm2015/lib/directives/http-prefix.directive.js +0 -46
- package/esm2015/lib/modules/alert/alert.module.js +0 -15
- package/esm2015/lib/modules/alert/alert.service.js +0 -59
- package/esm2015/lib/modules/alert/confirm.component.js +0 -17
- package/esm2015/lib/modules/avatar/avatar.module.js +0 -14
- package/esm2015/lib/modules/avatar/component/avatar.component.js +0 -158
- package/esm2015/lib/modules/avatar/service/avatar.service.js +0 -65
- package/esm2015/lib/modules/avatar/sources/gravatar.js +0 -29
- package/esm2015/lib/modules/columns-picker/columns-picker-column.directive.js +0 -41
- package/esm2015/lib/modules/columns-picker/columns-picker.component.js +0 -82
- package/esm2015/lib/modules/columns-picker/columns-picker.module.js +0 -28
- package/esm2015/lib/modules/common/common-module.js +0 -35
- package/esm2015/lib/modules/common/directives/linkable-tab.directive.js +0 -82
- package/esm2015/lib/modules/common/directives/reactive-asterisk.directive.js +0 -31
- package/esm2015/lib/modules/common/directives/src-density.directive.js +0 -63
- package/esm2015/lib/modules/common/pipes/capitalize.pipe.js +0 -14
- package/esm2015/lib/modules/common/pipes/ellipsis.pipe.js +0 -10
- package/esm2015/lib/modules/common/pipes/enum.pipe.js +0 -24
- package/esm2015/lib/modules/common/pipes/swiss-date.pipe.js +0 -16
- package/esm2015/lib/modules/common/public-api.js +0 -14
- package/esm2015/lib/modules/common/services/memory-storage.js +0 -110
- package/esm2015/lib/modules/common/services/seo.service.js +0 -120
- package/esm2015/lib/modules/detail-header/detail-header.component.js +0 -63
- package/esm2015/lib/modules/detail-header/detail-header.module.js +0 -16
- package/esm2015/lib/modules/dialog-trigger/dialog-trigger.component.js +0 -68
- package/esm2015/lib/modules/dialog-trigger/dialog-trigger.module.js +0 -14
- package/esm2015/lib/modules/dropdown-components/abstract-association-select-component.directive.js +0 -96
- package/esm2015/lib/modules/dropdown-components/natural-dropdown-components.module.js +0 -51
- package/esm2015/lib/modules/dropdown-components/type-date/type-date.component.js +0 -123
- package/esm2015/lib/modules/dropdown-components/type-date-range/type-date-range.component.js +0 -128
- package/esm2015/lib/modules/dropdown-components/type-hierarchic-selector/type-hierarchic-selector.component.js +0 -63
- package/esm2015/lib/modules/dropdown-components/type-natural-select/type-natural-select.component.js +0 -31
- package/esm2015/lib/modules/dropdown-components/type-number/type-number.component.js +0 -99
- package/esm2015/lib/modules/dropdown-components/type-select/type-select.component.js +0 -161
- package/esm2015/lib/modules/dropdown-components/type-text/type-text.component.js +0 -53
- package/esm2015/lib/modules/file/abstract-file.js +0 -223
- package/esm2015/lib/modules/file/component/file.component.js +0 -133
- package/esm2015/lib/modules/file/file-drop.directive.js +0 -99
- package/esm2015/lib/modules/file/file-select.directive.js +0 -25
- package/esm2015/lib/modules/file/file.module.js +0 -19
- package/esm2015/lib/modules/file/file.service.js +0 -47
- package/esm2015/lib/modules/fixed-button/fixed-button.component.js +0 -23
- package/esm2015/lib/modules/fixed-button/fixed-button.module.js +0 -16
- package/esm2015/lib/modules/fixed-button-detail/fixed-button-detail.component.js +0 -31
- package/esm2015/lib/modules/fixed-button-detail/fixed-button-detail.module.js +0 -15
- package/esm2015/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.component.js +0 -351
- package/esm2015/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.service.js +0 -258
- package/esm2015/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.component.js +0 -28
- package/esm2015/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.service.js +0 -23
- package/esm2015/lib/modules/hierarchic-selector/hierarchic-selector.module.js +0 -46
- package/esm2015/lib/modules/icon/icon.component.js +0 -78
- package/esm2015/lib/modules/icon/icon.module.js +0 -25
- package/esm2015/lib/modules/matomo/matomo-module.module.js +0 -7
- package/esm2015/lib/modules/matomo/matomo.service.js +0 -106
- package/esm2015/lib/modules/panels/abstract-panel.js +0 -50
- package/esm2015/lib/modules/panels/panels.component.js +0 -26
- package/esm2015/lib/modules/panels/panels.module.js +0 -28
- package/esm2015/lib/modules/panels/panels.service.js +0 -331
- package/esm2015/lib/modules/relations/relations.component.js +0 -181
- package/esm2015/lib/modules/relations/relations.module.js +0 -33
- package/esm2015/lib/modules/search/dropdown-container/dropdown-container.component.js +0 -87
- package/esm2015/lib/modules/search/dropdown-container/dropdown.service.js +0 -95
- package/esm2015/lib/modules/search/facet-selector/facet-selector.component.js +0 -47
- package/esm2015/lib/modules/search/group/group.component.js +0 -39
- package/esm2015/lib/modules/search/input/input.component.js +0 -316
- package/esm2015/lib/modules/search/search/search.component.js +0 -71
- package/esm2015/lib/modules/search/search.module.js +0 -52
- package/esm2015/lib/modules/select/abstract-select.component.js +0 -176
- package/esm2015/lib/modules/select/select/select.component.js +0 -190
- package/esm2015/lib/modules/select/select-enum/select-enum.component.js +0 -34
- package/esm2015/lib/modules/select/select-hierarchic/select-hierarchic.component.js +0 -120
- package/esm2015/lib/modules/select/select.module.js +0 -39
- package/esm2015/lib/modules/sidenav/sidenav/sidenav.component.js +0 -12
- package/esm2015/lib/modules/sidenav/sidenav-container/sidenav-container.component.js +0 -79
- package/esm2015/lib/modules/sidenav/sidenav-content/sidenav-content.component.js +0 -13
- package/esm2015/lib/modules/sidenav/sidenav-stack.service.js +0 -50
- package/esm2015/lib/modules/sidenav/sidenav.module.js +0 -20
- package/esm2015/lib/modules/sidenav/sidenav.service.js +0 -199
- package/esm2015/lib/modules/stamp/stamp-module.module.js +0 -13
- package/esm2015/lib/modules/stamp/stamp.component.js +0 -13
- package/esm2015/lib/modules/table-button/table-button.component.js +0 -38
- package/esm2015/lib/modules/table-button/table-button.module.js +0 -16
- package/esm2015/lib/services/abstract-model.service.js +0 -509
- package/esm2015/lib/services/enum.service.js +0 -68
- package/esm2015/lib/services/link-mutation.service.js +0 -155
- package/esm2015/lib/services/persistence.service.js +0 -114
- package/esm2015/lib/services/swiss-parsing-date-adapter.service.js +0 -55
- package/fesm2015/ecodev-natural.js.map +0 -1
- package/lib/modules/common/directives/reactive-asterisk.directive.d.ts +0 -10
|
@@ -1,223 +0,0 @@
|
|
|
1
|
-
// tslint:disable:directive-class-suffix
|
|
2
|
-
import { Directive, ElementRef, EventEmitter, HostListener, Inject, Input, Output, } from '@angular/core';
|
|
3
|
-
import { acceptType, createInvisibleFileInputWrap, detectSwipe, eventToFiles, fileListToArray, isFileInput, stopEvent, } from './utils';
|
|
4
|
-
import { NaturalFileService } from './file.service';
|
|
5
|
-
import { NaturalAbstractController } from '../../classes/abstract-controller';
|
|
6
|
-
import { DOCUMENT } from '@angular/common';
|
|
7
|
-
/**
|
|
8
|
-
* A master base set of logic intended to support file select/drag/drop operations
|
|
9
|
-
*
|
|
10
|
-
* In most cases you probably want click-to-select and drag-to-select, so you should use:
|
|
11
|
-
*
|
|
12
|
-
* <div naturalFileDrop [selectable]="true"></div>
|
|
13
|
-
*
|
|
14
|
-
* @dynamic
|
|
15
|
-
*/
|
|
16
|
-
export class NaturalAbstractFile extends NaturalAbstractController {
|
|
17
|
-
constructor(element, naturalFileService, document) {
|
|
18
|
-
super();
|
|
19
|
-
this.element = element;
|
|
20
|
-
this.naturalFileService = naturalFileService;
|
|
21
|
-
this.document = document;
|
|
22
|
-
this.validators = [
|
|
23
|
-
{ name: 'accept', fn: this.acceptValidator },
|
|
24
|
-
{ name: 'fileSize', fn: this.fileSizeValidator },
|
|
25
|
-
];
|
|
26
|
-
/**
|
|
27
|
-
* Whether we should accept a single file or multiple files
|
|
28
|
-
*/
|
|
29
|
-
this.multiple = false;
|
|
30
|
-
/**
|
|
31
|
-
* Comma-separated list of unique file type specifiers. Like the native element
|
|
32
|
-
* it can be a mixed of mime-type and file extensions.
|
|
33
|
-
*
|
|
34
|
-
* See https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#accept
|
|
35
|
-
*/
|
|
36
|
-
this.accept = '';
|
|
37
|
-
/**
|
|
38
|
-
* Maximum file size in bytes. 0 means no validation at all.
|
|
39
|
-
*/
|
|
40
|
-
this.maxSize = 0;
|
|
41
|
-
/**
|
|
42
|
-
* Disable the file selection entirely
|
|
43
|
-
*/
|
|
44
|
-
this.fileSelectionDisabled = false;
|
|
45
|
-
/**
|
|
46
|
-
* Whether the user can click on the element to select something
|
|
47
|
-
*
|
|
48
|
-
* This has only effect during initialization. Subsequent changes will have
|
|
49
|
-
* no effect.
|
|
50
|
-
*/
|
|
51
|
-
this.selectable = false;
|
|
52
|
-
/**
|
|
53
|
-
* If true, the file selection will be broadcast through `NaturalFileService.filesChanged`.
|
|
54
|
-
*
|
|
55
|
-
* It is useful to set this to false if there is two upload on a page with different purpose
|
|
56
|
-
* and the second upload should not be confused with the first one.
|
|
57
|
-
*/
|
|
58
|
-
this.broadcast = true;
|
|
59
|
-
/**
|
|
60
|
-
* The single valid file that has been selected.
|
|
61
|
-
*
|
|
62
|
-
* It is for convenience of use, and will only emit if there is at least one
|
|
63
|
-
* valid file. See `filesChange` for a more complete output.
|
|
64
|
-
*/
|
|
65
|
-
this.fileChange = new EventEmitter();
|
|
66
|
-
/**
|
|
67
|
-
* The list of files that have been selected.
|
|
68
|
-
*/
|
|
69
|
-
this.filesChange = new EventEmitter();
|
|
70
|
-
}
|
|
71
|
-
ngOnDestroy() {
|
|
72
|
-
super.ngOnDestroy();
|
|
73
|
-
delete this.fileElement; // faster memory release of dom element
|
|
74
|
-
}
|
|
75
|
-
ngOnInit() {
|
|
76
|
-
if (this.selectable) {
|
|
77
|
-
this.enableSelecting();
|
|
78
|
-
}
|
|
79
|
-
this.getFileElement().multiple = this.multiple;
|
|
80
|
-
}
|
|
81
|
-
ngOnChanges(changes) {
|
|
82
|
-
if (changes.accept) {
|
|
83
|
-
this.getFileElement().setAttribute('accept', changes.accept.currentValue || '*');
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
getFileElement() {
|
|
87
|
-
if (this.fileElement) {
|
|
88
|
-
return this.fileElement;
|
|
89
|
-
}
|
|
90
|
-
// elm is a file input
|
|
91
|
-
if (isFileInput(this.element.nativeElement)) {
|
|
92
|
-
this.fileElement = this.element.nativeElement;
|
|
93
|
-
return this.fileElement;
|
|
94
|
-
}
|
|
95
|
-
// create foo file input
|
|
96
|
-
const label = createInvisibleFileInputWrap(this.document);
|
|
97
|
-
this.fileElement = label.getElementsByTagName('input')[0];
|
|
98
|
-
this.fileElement.addEventListener('change', this.changeFn.bind(this));
|
|
99
|
-
this.element.nativeElement.appendChild(label);
|
|
100
|
-
return this.fileElement;
|
|
101
|
-
}
|
|
102
|
-
enableSelecting() {
|
|
103
|
-
const elm = this.element.nativeElement;
|
|
104
|
-
if (isFileInput(elm)) {
|
|
105
|
-
const bindedHandler = () => this.beforeSelect();
|
|
106
|
-
elm.addEventListener('click', bindedHandler);
|
|
107
|
-
elm.addEventListener('touchstart', bindedHandler);
|
|
108
|
-
return;
|
|
109
|
-
}
|
|
110
|
-
else {
|
|
111
|
-
const bindedHandler = (event) => this.clickHandler(event);
|
|
112
|
-
elm.addEventListener('click', bindedHandler);
|
|
113
|
-
elm.addEventListener('touchstart', bindedHandler);
|
|
114
|
-
elm.addEventListener('touchend', bindedHandler);
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
handleFiles(files) {
|
|
118
|
-
const selection = {
|
|
119
|
-
valid: [],
|
|
120
|
-
invalid: [],
|
|
121
|
-
};
|
|
122
|
-
for (const file of files) {
|
|
123
|
-
const error = this.validate(file);
|
|
124
|
-
if (error) {
|
|
125
|
-
selection.invalid.push({
|
|
126
|
-
file: file,
|
|
127
|
-
error: error,
|
|
128
|
-
});
|
|
129
|
-
}
|
|
130
|
-
else {
|
|
131
|
-
selection.valid.push(file);
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
if (selection.valid.length) {
|
|
135
|
-
this.fileChange.emit(selection.valid[0]);
|
|
136
|
-
}
|
|
137
|
-
if (selection.valid.length || selection.invalid.length) {
|
|
138
|
-
this.filesChange.emit(selection);
|
|
139
|
-
if (this.broadcast) {
|
|
140
|
-
this.naturalFileService.filesChanged.next(selection);
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
this.getFileElement().value = '';
|
|
144
|
-
}
|
|
145
|
-
/**
|
|
146
|
-
* Called when input has files
|
|
147
|
-
*/
|
|
148
|
-
changeFn(event) {
|
|
149
|
-
if (!(event.target instanceof HTMLInputElement)) {
|
|
150
|
-
return;
|
|
151
|
-
}
|
|
152
|
-
const fileList = event.target.files;
|
|
153
|
-
if (!fileList) {
|
|
154
|
-
return;
|
|
155
|
-
}
|
|
156
|
-
stopEvent(event);
|
|
157
|
-
this.handleFiles(fileListToArray(fileList));
|
|
158
|
-
}
|
|
159
|
-
clickHandler(event) {
|
|
160
|
-
const elm = this.element.nativeElement;
|
|
161
|
-
if (elm.getAttribute('disabled') || this.fileSelectionDisabled) {
|
|
162
|
-
return false;
|
|
163
|
-
}
|
|
164
|
-
// prevent the click if it is a swipe
|
|
165
|
-
if (detectSwipe(event)) {
|
|
166
|
-
return true;
|
|
167
|
-
}
|
|
168
|
-
const fileElm = this.getFileElement();
|
|
169
|
-
fileElm.click();
|
|
170
|
-
this.beforeSelect();
|
|
171
|
-
return false;
|
|
172
|
-
}
|
|
173
|
-
beforeSelect() {
|
|
174
|
-
if (!this.fileElement) {
|
|
175
|
-
return;
|
|
176
|
-
}
|
|
177
|
-
// if no files in array, be sure browser doesnt prevent reselect of same file (see github issue 27)
|
|
178
|
-
this.fileElement.value = '';
|
|
179
|
-
}
|
|
180
|
-
onChange(event) {
|
|
181
|
-
const fileList = this.getFileElement().files;
|
|
182
|
-
const files = fileList ? fileListToArray(fileList) : eventToFiles(event);
|
|
183
|
-
if (!files.length) {
|
|
184
|
-
return;
|
|
185
|
-
}
|
|
186
|
-
stopEvent(event);
|
|
187
|
-
this.handleFiles(files);
|
|
188
|
-
}
|
|
189
|
-
validate(file) {
|
|
190
|
-
for (const validator of this.validators) {
|
|
191
|
-
if (!validator.fn.call(this, file)) {
|
|
192
|
-
return validator.name;
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
return null;
|
|
196
|
-
}
|
|
197
|
-
acceptValidator(item) {
|
|
198
|
-
return acceptType(this.accept, item.type, item.name);
|
|
199
|
-
}
|
|
200
|
-
fileSizeValidator(item) {
|
|
201
|
-
return !(this.maxSize && item.size > this.maxSize);
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
NaturalAbstractFile.decorators = [
|
|
205
|
-
{ type: Directive }
|
|
206
|
-
];
|
|
207
|
-
NaturalAbstractFile.ctorParameters = () => [
|
|
208
|
-
{ type: ElementRef },
|
|
209
|
-
{ type: NaturalFileService },
|
|
210
|
-
{ type: Document, decorators: [{ type: Inject, args: [DOCUMENT,] }] }
|
|
211
|
-
];
|
|
212
|
-
NaturalAbstractFile.propDecorators = {
|
|
213
|
-
multiple: [{ type: Input }],
|
|
214
|
-
accept: [{ type: Input }],
|
|
215
|
-
maxSize: [{ type: Input }],
|
|
216
|
-
fileSelectionDisabled: [{ type: Input }],
|
|
217
|
-
selectable: [{ type: Input }],
|
|
218
|
-
broadcast: [{ type: Input }],
|
|
219
|
-
fileChange: [{ type: Output }],
|
|
220
|
-
filesChange: [{ type: Output }],
|
|
221
|
-
onChange: [{ type: HostListener, args: ['change', ['$event'],] }]
|
|
222
|
-
};
|
|
223
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtZmlsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9tb2R1bGVzL2ZpbGUvYWJzdHJhY3QtZmlsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx3Q0FBd0M7QUFDeEMsT0FBTyxFQUNILFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUlMLE1BQU0sR0FFVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0gsVUFBVSxFQUNWLDRCQUE0QixFQUM1QixXQUFXLEVBQ1gsWUFBWSxFQUNaLGVBQWUsRUFDZixXQUFXLEVBQ1gsU0FBUyxHQUNaLE1BQU0sU0FBUyxDQUFDO0FBQ2pCLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2xELE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBQzVFLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQW1CekM7Ozs7Ozs7O0dBUUc7QUFFSCxNQUFNLE9BQWdCLG1CQUFvQixTQUFRLHlCQUF5QjtJQTJEdkUsWUFDcUIsT0FBZ0MsRUFDOUIsa0JBQXNDLEVBQ3RCLFFBQWtCO1FBRXJELEtBQUssRUFBRSxDQUFDO1FBSlMsWUFBTyxHQUFQLE9BQU8sQ0FBeUI7UUFDOUIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0QixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBNUR4QyxlQUFVLEdBQUc7WUFDMUIsRUFBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFDO1lBQzFDLEVBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixFQUFDO1NBQ2pELENBQUM7UUFFRjs7V0FFRztRQUNhLGFBQVEsR0FBRyxLQUFL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LENBQUMsQ0FBQztRQUVqRixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRTtZQUNmLE9BQU87U0FDVjtRQUVELFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFTyxRQUFRLENBQUMsSUFBVTtRQUN2QixLQUFLLE1BQU0sU0FBUyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDckMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRTtnQkFDaEMsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDO2FBQ3pCO1NBQ0o7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU8sZUFBZSxDQUFDLElBQVU7UUFDOUIsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRU8saUJBQWlCLENBQUMsSUFBVTtRQUNoQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZELENBQUM7OztZQXZPSixTQUFTOzs7WUFsRE4sVUFBVTtZQW9CTixrQkFBa0I7WUE2RjJCLFFBQVEsdUJBQXBELE1BQU0sU0FBQyxRQUFROzs7dUJBcERuQixLQUFLO3FCQVFMLEtBQUs7c0JBS0wsS0FBSztvQ0FLTCxLQUFLO3lCQVFMLEtBQUs7d0JBUUwsS0FBSzt5QkFRTCxNQUFNOzBCQUtOLE1BQU07dUJBZ0pOLFlBQVksU0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyB0c2xpbnQ6ZGlzYWJsZTpkaXJlY3RpdmUtY2xhc3Mtc3VmZml4XG5pbXBvcnQge1xuICAgIERpcmVjdGl2ZSxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgYWNjZXB0VHlwZSxcbiAgICBjcmVhdGVJbnZpc2libGVGaWxlSW5wdXRXcmFwLFxuICAgIGRldGVjdFN3aXBlLFxuICAgIGV2ZW50VG9GaWxlcyxcbiAgICBmaWxlTGlzdFRvQXJyYXksXG4gICAgaXNGaWxlSW5wdXQsXG4gICAgc3RvcEV2ZW50LFxufSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7TmF0dXJhbEZpbGVTZXJ2aWNlfSBmcm9tICcuL2ZpbGUuc2VydmljZSc7XG5pbXBvcnQge05hdHVyYWxBYnN0cmFjdENvbnRyb2xsZXJ9IGZyb20gJy4uLy4uL2NsYXNzZXMvYWJzdHJhY3QtY29udHJvbGxlcic7XG5pbXBvcnQge0RPQ1VNRU5UfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIEludmFsaWRGaWxlIHtcbiAgICBmaWxlOiBGaWxlO1xuICAgIGVycm9yOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZVNlbGVjdGlvbiB7XG4gICAgLyoqXG4gICAgICogVGhlIGxpc3Qgb2YgZmlsZXMgdGhhdCBoYXZlIGJlZW4gc2VsZWN0ZWQuXG4gICAgICovXG4gICAgdmFsaWQ6IEZpbGVbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBsaXN0IG9mIGZpbGVzIHRoYXQgaGF2ZSBiZWVuIHNlbGVjdGVkIGJ1dCBhcmUgaW52YWxpZCBhY2NvcmRpbmcgdG8gdmFsaWRhdG9ycy5cbiAgICAgKi9cbiAgICBpbnZhbGlkOiBJbnZhbGlkRmlsZVtdO1xufVxuXG4vKipcbiAqIEEgbWFzdGVyIGJhc2Ugc2V0IG9mIGxvZ2ljIGludGVuZGVkIHRvIHN1cHBvcnQgZmlsZSBzZWxlY3QvZHJhZy9kcm9wIG9wZXJhdGlvbnNcbiAqXG4gKiBJbiBtb3N0IGNhc2VzIHlvdSBwcm9iYWJseSB3YW50IGNsaWNrLXRvLXNlbGVjdCBhbmQgZHJhZy10by1zZWxlY3QsIHNvIHlvdSBzaG91bGQgdXNlOlxuICpcbiAqICAgICA8ZGl2IG5hdHVyYWxGaWxlRHJvcCBbc2VsZWN0YWJsZV09XCJ0cnVlXCI+PC9kaXY+XG4gKlxuICogQGR5bmFtaWNcbiAqL1xuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTmF0dXJhbEFic3RyYWN0RmlsZSBleHRlbmRzIE5hdHVyYWxBYnN0cmFjdENvbnRyb2xsZXIgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcbiAgICBwcml2YXRlIGZpbGVFbGVtZW50PzogSFRNTElucHV0RWxlbWVudDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHZhbGlkYXRvcnMgPSBbXG4gICAgICAgIHtuYW1lOiAnYWNjZXB0JywgZm46IHRoaXMuYWNjZXB0VmFsaWRhdG9yfSxcbiAgICAgICAge25hbWU6ICdmaWxlU2l6ZScsIGZuOiB0aGlzLmZpbGVTaXplVmFsaWRhdG9yfSxcbiAgICBdO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB3ZSBzaG91bGQgYWNjZXB0IGEgc2luZ2xlIGZpbGUgb3IgbXVsdGlwbGUgZmlsZXNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgbXVsdGlwbGUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIENvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHVuaXF1ZSBmaWxlIHR5cGUgc3BlY2lmaWVycy4gTGlrZSB0aGUgbmF0aXZlIGVsZW1lbnRcbiAgICAgKiBpdCBjYW4gYmUgYSBtaXhlZCBvZiBtaW1lLXR5cGUgYW5kIGZpbGUgZXh0ZW5zaW9ucy5cbiAgICAgKlxuICAgICAqIFNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQvZmlsZSNhY2NlcHRcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgYWNjZXB0ID0gJyc7XG5cbiAgICAvKipcbiAgICAgKiBNYXhpbXVtIGZpbGUgc2l6ZSBpbiBieXRlcy4gMCBtZWFucyBubyB2YWxpZGF0aW9uIGF0IGFsbC5cbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgbWF4U2l6ZSA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBEaXNhYmxlIHRoZSBmaWxlIHNlbGVjdGlvbiBlbnRpcmVseVxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBmaWxlU2VsZWN0aW9uRGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHVzZXIgY2FuIGNsaWNrIG9uIHRoZSBlbGVtZW50IHRvIHNlbGVjdCBzb21ldGhpbmdcbiAgICAgKlxuICAgICAqIFRoaXMgaGFzIG9ubHkgZWZmZWN0IGR1cmluZyBpbml0aWFsaXphdGlvbi4gU3Vic2VxdWVudCBjaGFuZ2VzIHdpbGwgaGF2ZVxuICAgICAqIG5vIGVmZmVjdC5cbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgc2VsZWN0YWJsZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogSWYgdHJ1ZSwgdGhlIGZpbGUgc2VsZWN0aW9uIHdpbGwgYmUgYnJvYWRjYXN0IHRocm91Z2ggYE5hdHVyYWxGaWxlU2VydmljZS5maWxlc0NoYW5nZWRgLlxuICAgICAqXG4gICAgICogSXQgaXMgdXNlZnVsIHRvIHNldCB0aGlzIHRvIGZhbHNlIGlmIHRoZXJlIGlzIHR3byB1cGxvYWQgb24gYSBwYWdlIHdpdGggZGlmZmVyZW50IHB1cnBvc2VcbiAgICAgKiBhbmQgdGhlIHNlY29uZCB1cGxvYWQgc2hvdWxkIG5vdCBiZSBjb25mdXNlZCB3aXRoIHRoZSBmaXJzdCBvbmUuXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIGJyb2FkY2FzdCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2luZ2xlIHZhbGlkIGZpbGUgdGhhdCBoYXMgYmVlbiBzZWxlY3RlZC5cbiAgICAgKlxuICAgICAqIEl0IGlzIGZvciBjb252ZW5pZW5jZSBvZiB1c2UsIGFuZCB3aWxsIG9ubHkgZW1pdCBpZiB0aGVyZSBpcyBhdCBsZWFzdCBvbmVcbiAgICAgKiB2YWxpZCBmaWxlLiBTZWUgYGZpbGVzQ2hhbmdlYCBmb3IgYSBtb3JlIGNvbXBsZXRlIG91dHB1dC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgcHVibGljIHJlYWRvbmx5IGZpbGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEZpbGU+KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbGlzdCBvZiBmaWxlcyB0aGF0IGhhdmUgYmVlbiBzZWxlY3RlZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgcHVibGljIHJlYWRvbmx5IGZpbGVzQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxGaWxlU2VsZWN0aW9uPigpO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgIHByb3RlY3RlZCByZWFkb25seSBuYXR1cmFsRmlsZVNlcnZpY2U6IE5hdHVyYWxGaWxlU2VydmljZSxcbiAgICAgICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudDogRG9jdW1lbnQsXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgICAgICBkZWxldGUgdGhpcy5maWxlRWxlbWVudDsgLy8gZmFzdGVyIG1lbW9yeSByZWxlYXNlIG9mIGRvbSBlbGVtZW50XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLmVuYWJsZVNlbGVjdGluZygpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5nZXRGaWxlRWxlbWVudCgpLm11bHRpcGxlID0gdGhpcy5tdWx0aXBsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoY2hhbmdlcy5hY2NlcHQpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0RmlsZUVsZW1lbnQoKS5zZXRBdHRyaWJ1dGUoJ2FjY2VwdCcsIGNoYW5nZXMuYWNjZXB0LmN1cnJlbnRWYWx1ZSB8fCAnKicpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGaWxlRWxlbWVudCgpOiBIVE1MSW5wdXRFbGVtZW50IHtcbiAgICAgICAgaWYgKHRoaXMuZmlsZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbGVFbGVtZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZWxtIGlzIGEgZmlsZSBpbnB1dFxuICAgICAgICBpZiAoaXNGaWxlSW5wdXQodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpKSB7XG4gICAgICAgICAgICB0aGlzLmZpbGVFbGVtZW50ID0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbGVFbGVtZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY3JlYXRlIGZvbyBmaWxlIGlucHV0XG4gICAgICAgIGNvbnN0IGxhYmVsID0gY3JlYXRlSW52aXNpYmxlRmlsZUlucHV0V3JhcCh0aGlzLmRvY3VtZW50KTtcbiAgICAgICAgdGhpcy5maWxlRWxlbWVudCA9IGxhYmVsLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpWzBdO1xuICAgICAgICB0aGlzLmZpbGVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMuY2hhbmdlRm4uYmluZCh0aGlzKSk7XG4gICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKGxhYmVsKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5maWxlRWxlbWVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGVuYWJsZVNlbGVjdGluZygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZWxtID0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAgICAgaWYgKGlzRmlsZUlucHV0KGVsbSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGJpbmRlZEhhbmRsZXIgPSAoKSA9PiB0aGlzLmJlZm9yZVNlbGVjdCgpO1xuICAgICAgICAgICAgZWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYmluZGVkSGFuZGxlcik7XG4gICAgICAgICAgICBlbG0uYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIGJpbmRlZEhhbmRsZXIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgYmluZGVkSGFuZGxlciA9IChldmVudDogRXZlbnQpID0+IHRoaXMuY2xpY2tIYW5kbGVyKGV2ZW50KTtcbiAgICAgICAgICAgIGVsbS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGJpbmRlZEhhbmRsZXIpO1xuICAgICAgICAgICAgZWxtLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBiaW5kZWRIYW5kbGVyKTtcbiAgICAgICAgICAgIGVsbS5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIGJpbmRlZEhhbmRsZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGhhbmRsZUZpbGVzKGZpbGVzOiBGaWxlW10pOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uOiBGaWxlU2VsZWN0aW9uID0ge1xuICAgICAgICAgICAgdmFsaWQ6IFtdLFxuICAgICAgICAgICAgaW52YWxpZDogW10sXG4gICAgICAgIH07XG5cbiAgICAgICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvciA9IHRoaXMudmFsaWRhdGUoZmlsZSk7XG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb24uaW52YWxpZC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgZmlsZTogZmlsZSxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb24udmFsaWQucHVzaChmaWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzZWxlY3Rpb24udmFsaWQubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmZpbGVDaGFuZ2UuZW1pdChzZWxlY3Rpb24udmFsaWRbMF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNlbGVjdGlvbi52YWxpZC5sZW5ndGggfHwgc2VsZWN0aW9uLmludmFsaWQubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmZpbGVzQ2hhbmdlLmVtaXQoc2VsZWN0aW9uKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuYnJvYWRjYXN0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5uYXR1cmFsRmlsZVNlcnZpY2UuZmlsZXNDaGFuZ2VkLm5leHQoc2VsZWN0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZ2V0RmlsZUVsZW1lbnQoKS52YWx1ZSA9ICcnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbGxlZCB3aGVuIGlucHV0IGhhcyBmaWxlc1xuICAgICAqL1xuICAgIHByaXZhdGUgY2hhbmdlRm4oZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICghKGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaWxlTGlzdCA9IGV2ZW50LnRhcmdldC5maWxlcztcblxuICAgICAgICBpZiAoIWZpbGVMaXN0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBzdG9wRXZlbnQoZXZlbnQpO1xuICAgICAgICB0aGlzLmhhbmRsZUZpbGVzKGZpbGVMaXN0VG9BcnJheShmaWxlTGlzdCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2xpY2tIYW5kbGVyKGV2ZW50OiBFdmVudCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBlbG0gPSB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICAgICAgaWYgKGVsbS5nZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJykgfHwgdGhpcy5maWxlU2VsZWN0aW9uRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHByZXZlbnQgdGhlIGNsaWNrIGlmIGl0IGlzIGEgc3dpcGVcbiAgICAgICAgaWYgKGRldGVjdFN3aXBlKGV2ZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaWxlRWxtID0gdGhpcy5nZXRGaWxlRWxlbWVudCgpO1xuICAgICAgICBmaWxlRWxtLmNsaWNrKCk7XG4gICAgICAgIHRoaXMuYmVmb3JlU2VsZWN0KCk7XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgYmVmb3JlU2VsZWN0KCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZmlsZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIG5vIGZpbGVzIGluIGFycmF5LCBiZSBzdXJlIGJyb3dzZXIgZG9lc250IHByZXZlbnQgcmVzZWxlY3Qgb2Ygc2FtZSBmaWxlIChzZWUgZ2l0aHViIGlzc3VlIDI3KVxuICAgICAgICB0aGlzLmZpbGVFbGVtZW50LnZhbHVlID0gJyc7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignY2hhbmdlJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25DaGFuZ2UoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZpbGVMaXN0ID0gdGhpcy5nZXRGaWxlRWxlbWVudCgpLmZpbGVzO1xuICAgICAgICBjb25zdCBmaWxlczogRmlsZVtdID0gZmlsZUxpc3QgPyBmaWxlTGlzdFRvQXJyYXkoZmlsZUxpc3QpIDogZXZlbnRUb0ZpbGVzKGV2ZW50KTtcblxuICAgICAgICBpZiAoIWZpbGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RvcEV2ZW50KGV2ZW50KTtcbiAgICAgICAgdGhpcy5oYW5kbGVGaWxlcyhmaWxlcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2YWxpZGF0ZShmaWxlOiBGaWxlKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIGZvciAoY29uc3QgdmFsaWRhdG9yIG9mIHRoaXMudmFsaWRhdG9ycykge1xuICAgICAgICAgICAgaWYgKCF2YWxpZGF0b3IuZm4uY2FsbCh0aGlzLCBmaWxlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWxpZGF0b3IubmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWNjZXB0VmFsaWRhdG9yKGl0ZW06IEZpbGUpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGFjY2VwdFR5cGUodGhpcy5hY2NlcHQsIGl0ZW0udHlwZSwgaXRlbS5uYW1lKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZpbGVTaXplVmFsaWRhdG9yKGl0ZW06IEZpbGUpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEodGhpcy5tYXhTaXplICYmIGl0ZW0uc2l6ZSA+IHRoaXMubWF4U2l6ZSk7XG4gICAgfVxufVxuIl19
|
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
import { Component, EventEmitter, HostBinding, Inject, Input, Output, } from '@angular/core';
|
|
2
|
-
import { DomSanitizer } from '@angular/platform-browser';
|
|
3
|
-
import { of, Subject } from 'rxjs';
|
|
4
|
-
import { NaturalFileService } from '../file.service';
|
|
5
|
-
import { DOCUMENT } from '@angular/common';
|
|
6
|
-
// @dynamic
|
|
7
|
-
export class FileComponent {
|
|
8
|
-
constructor(naturalFileService, sanitizer, document) {
|
|
9
|
-
this.naturalFileService = naturalFileService;
|
|
10
|
-
this.sanitizer = sanitizer;
|
|
11
|
-
this.document = document;
|
|
12
|
-
this.height = 250;
|
|
13
|
-
this.action = null;
|
|
14
|
-
this.backgroundSize = 'contain';
|
|
15
|
-
/**
|
|
16
|
-
* Comma separated list of accepted mimetypes
|
|
17
|
-
*/
|
|
18
|
-
this.accept = 'image/bmp,image/gif,image/jpeg,image/pjpeg,image/png,image/svg+xml,image/svg,image/webp';
|
|
19
|
-
this.model = null;
|
|
20
|
-
/**
|
|
21
|
-
* If provided, get updated on change
|
|
22
|
-
* Is not used for reading -> use [model]
|
|
23
|
-
*/
|
|
24
|
-
this.formCtrl = null;
|
|
25
|
-
this.modelChange = new EventEmitter();
|
|
26
|
-
this.imagePreview = null;
|
|
27
|
-
this.filePreview = null;
|
|
28
|
-
}
|
|
29
|
-
ngOnInit() {
|
|
30
|
-
this.updateImage();
|
|
31
|
-
}
|
|
32
|
-
ngOnChanges(changes) {
|
|
33
|
-
if (changes.model && changes.model.previousValue !== changes.model.currentValue) {
|
|
34
|
-
this.updateImage();
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
upload(file) {
|
|
38
|
-
this.model = { file: file };
|
|
39
|
-
this.updateImage();
|
|
40
|
-
if (this.formCtrl) {
|
|
41
|
-
this.formCtrl.setValue(this.model);
|
|
42
|
-
}
|
|
43
|
-
if (this.service) {
|
|
44
|
-
this.service.create(this.model).subscribe(result => {
|
|
45
|
-
this.model = result;
|
|
46
|
-
this.modelChange.emit(result);
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
else {
|
|
50
|
-
this.modelChange.emit(this.model);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
getDownloadLink() {
|
|
54
|
-
if (this.action !== 'download') {
|
|
55
|
-
return null;
|
|
56
|
-
}
|
|
57
|
-
return this.naturalFileService.getDownloadLink(this.model);
|
|
58
|
-
}
|
|
59
|
-
updateImage() {
|
|
60
|
-
var _a, _b;
|
|
61
|
-
this.imagePreview = null;
|
|
62
|
-
this.filePreview = null;
|
|
63
|
-
if (!this.model) {
|
|
64
|
-
return;
|
|
65
|
-
}
|
|
66
|
-
if ((_a = this.model.file) === null || _a === void 0 ? void 0 : _a.type.includes('image/')) {
|
|
67
|
-
// Model from upload (before saving)
|
|
68
|
-
this.getBase64(this.model.file).subscribe(result => {
|
|
69
|
-
var _a, _b;
|
|
70
|
-
const content = 'url(data:' + ((_b = (_a = this.model) === null || _a === void 0 ? void 0 : _a.file) === null || _b === void 0 ? void 0 : _b.type) + ';base64,' + result + ')';
|
|
71
|
-
this.imagePreview = this.sanitizer.bypassSecurityTrustStyle(content);
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
else if (this.model.file) {
|
|
75
|
-
this.filePreview = this.model.file.type.split('/')[1];
|
|
76
|
-
}
|
|
77
|
-
else if (this.model.__typename === 'Image' && this.model.id) {
|
|
78
|
-
// Model image with id, use specific API to render image by size
|
|
79
|
-
const window = this.document.defaultView;
|
|
80
|
-
if (!window) {
|
|
81
|
-
throw new Error('Could not show image preview because `window` is undefined');
|
|
82
|
-
}
|
|
83
|
-
const loc = window.location;
|
|
84
|
-
const height = this.height ? '/' + this.height : '';
|
|
85
|
-
// create image url without port to stay compatible with dev mode
|
|
86
|
-
const image = loc.protocol + '//' + loc.hostname + '/api/image/' + this.model.id + height;
|
|
87
|
-
this.imagePreview = this.sanitizer.bypassSecurityTrustStyle('url(' + image + ')');
|
|
88
|
-
}
|
|
89
|
-
else if (((_b = this.model) === null || _b === void 0 ? void 0 : _b.mime) && ['File', 'AccountingDocument'].includes(this.model.__typename || '')) {
|
|
90
|
-
this.filePreview = this.model.mime.split('/')[1];
|
|
91
|
-
}
|
|
92
|
-
else if (this.model.src) {
|
|
93
|
-
// external url
|
|
94
|
-
this.imagePreview = this.sanitizer.bypassSecurityTrustStyle('url(' + this.model.src + ')');
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
getBase64(file) {
|
|
98
|
-
if (!file) {
|
|
99
|
-
return of('');
|
|
100
|
-
}
|
|
101
|
-
const subject = new Subject();
|
|
102
|
-
const reader = new FileReader();
|
|
103
|
-
reader.addEventListener('load', (ev) => {
|
|
104
|
-
subject.next(btoa(ev.target.result));
|
|
105
|
-
subject.complete();
|
|
106
|
-
});
|
|
107
|
-
reader.readAsBinaryString(file);
|
|
108
|
-
return subject.asObservable();
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
FileComponent.decorators = [
|
|
112
|
-
{ type: Component, args: [{
|
|
113
|
-
selector: 'natural-file',
|
|
114
|
-
template: "<a\n (fileChange)=\"upload($event)\"\n naturalFileDrop\n [selectable]=\"true\"\n [accept]=\"accept\"\n [attr.href]=\"getDownloadLink()\"\n [class.has-action]=\"!!action\"\n [class.suggest-upload]=\"!model && action === 'upload'\"\n [fileSelectionDisabled]=\"action !== 'upload'\"\n [matRippleDisabled]=\"!action\"\n [style.backgroundImage]=\"imagePreview\"\n [style.backgroundSize]=\"backgroundSize\"\n matRipple\n target=\"_blank\"\n>\n <div *ngIf=\"filePreview\" class=\"file-preview\">\n <natural-icon [size]=\"height * 0.33\" name=\"attachment\"></natural-icon>\n {{ filePreview | uppercase }}\n </div>\n\n <div class=\"action-overlay\">\n <natural-icon *ngIf=\"action === 'upload'\" [size]=\"height * 0.66\" name=\"cloud_upload\"></natural-icon>\n <natural-icon *ngIf=\"action === 'download'\" [size]=\"height * 0.66\" name=\"get_app\"></natural-icon>\n {{ action | capitalize }}\n </div>\n</a>\n",
|
|
115
|
-
styles: [":host{display:flex;flex-direction:row;overflow:hidden;position:relative}:host>a{position:relative;flex:1;background-position:center;background-repeat:no-repeat}:host>a.has-action{cursor:pointer}:host>a.has-action.suggest-upload .action-overlay{opacity:.66}:host>a.has-action:hover .action-overlay,:host>a.has-action.natural-file-over .action-overlay{opacity:1}:host .action-overlay,:host .file-preview{display:flex;flex-direction:column;position:absolute;top:0;left:0;right:0;bottom:0;justify-content:center;align-items:center;font-size:36px;line-height:1.3em;text-align:center}:host .action-overlay{opacity:0}:host .action-overlay>div{opacity:0;position:absolute;top:0;left:0;right:0;bottom:0;display:flex;justify-content:center;align-items:center}\n"]
|
|
116
|
-
},] }
|
|
117
|
-
];
|
|
118
|
-
FileComponent.ctorParameters = () => [
|
|
119
|
-
{ type: NaturalFileService },
|
|
120
|
-
{ type: DomSanitizer },
|
|
121
|
-
{ type: Document, decorators: [{ type: Inject, args: [DOCUMENT,] }] }
|
|
122
|
-
];
|
|
123
|
-
FileComponent.propDecorators = {
|
|
124
|
-
height: [{ type: HostBinding, args: ['style.height.px',] }, { type: Input }],
|
|
125
|
-
action: [{ type: Input }],
|
|
126
|
-
backgroundSize: [{ type: Input }],
|
|
127
|
-
accept: [{ type: Input }],
|
|
128
|
-
service: [{ type: Input }],
|
|
129
|
-
model: [{ type: Input }],
|
|
130
|
-
formCtrl: [{ type: Input }],
|
|
131
|
-
modelChange: [{ type: Output }]
|
|
132
|
-
};
|
|
133
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsL3NyYy9saWIvbW9kdWxlcy9maWxlL2NvbXBvbmVudC9maWxlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULFlBQVksRUFDWixXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEdBRVQsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFDLFlBQVksRUFBWSxNQUFNLDJCQUEyQixDQUFDO0FBQ2xFLE9BQU8sRUFBYSxFQUFFLEVBQUUsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRW5ELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUd6QyxXQUFXO0FBTVgsTUFBTSxPQUFPLGFBQWE7SUE4QnRCLFlBQ3FCLGtCQUFzQyxFQUN0QyxTQUF1QixFQUNMLFFBQWtCO1FBRnBDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsY0FBUyxHQUFULFNBQVMsQ0FBYztRQUNMLGFBQVEsR0FBUixRQUFRLENBQVU7UUE3QlQsV0FBTSxHQUFHLEdBQUcsQ0FBQztRQUU3QyxXQUFNLEdBQWlDLElBQUksQ0FBQztRQUU1QyxtQkFBYyxHQUFHLFNBQVMsQ0FBQztRQUUzQzs7V0FFRztRQUNhLFdBQU0sR0FBRyx5RkFBeUYsQ0FBQztRQUluRyxVQUFLLEdBQXFCLElBQUksQ0FBQztRQUUvQzs7O1dBR0c7UUFDYSxhQUFRLEdBQXVDLElBQUksQ0FBQztRQUUxQyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFhLENBQUM7UUFFL0QsaUJBQVksR0FBcUIsSUFBSSxDQUFDO1FBQ3RDLGdCQUFXLEdBQWtCLElBQUksQ0FBQztJQU10QyxDQUFDO0lB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QUM7UUFFdEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUNoQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBTyxFQUFFLEVBQUU7WUFDeEMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ3JDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVoQyxPQUFPLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNsQyxDQUFDOzs7WUFoSUosU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSxjQUFjO2dCQUN4Qix1K0JBQW9DOzthQUV2Qzs7O1lBVk8sa0JBQWtCO1lBRmxCLFlBQVk7WUE4Q2lDLFFBQVEsdUJBQXBELE1BQU0sU0FBQyxRQUFROzs7cUJBN0JuQixXQUFXLFNBQUMsaUJBQWlCLGNBQUcsS0FBSztxQkFFckMsS0FBSzs2QkFFTCxLQUFLO3FCQUtMLEtBQUs7c0JBRUwsS0FBSztvQkFFTCxLQUFLO3VCQU1MLEtBQUs7MEJBRUwsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0QmluZGluZyxcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0Fic3RyYWN0Q29udHJvbH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtEb21TYW5pdGl6ZXIsIFNhZmVTdHlsZX0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQge09ic2VydmFibGUsIG9mLCBTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7TmF0dXJhbEZpbGVTZXJ2aWNlfSBmcm9tICcuLi9maWxlLnNlcnZpY2UnO1xuaW1wb3J0IHtOYXR1cmFsQWJzdHJhY3RNb2RlbFNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2Fic3RyYWN0LW1vZGVsLnNlcnZpY2UnO1xuaW1wb3J0IHtET0NVTUVOVH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7RmlsZU1vZGVsfSBmcm9tICcuLi90eXBlcyc7XG5cbi8vIEBkeW5hbWljXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25hdHVyYWwtZmlsZScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2ZpbGUuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2ZpbGUuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRmlsZUNvbXBvbmVudDxcbiAgICBUU2VydmljZSBleHRlbmRzIE5hdHVyYWxBYnN0cmFjdE1vZGVsU2VydmljZTxhbnksIGFueSwgYW55LCBhbnksIEZpbGVNb2RlbCwgYW55LCBhbnksIGFueSwgYW55LCBhbnk+LFxuPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzXG57XG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS5oZWlnaHQucHgnKSBASW5wdXQoKSBwdWJsaWMgaGVpZ2h0ID0gMjUwO1xuXG4gICAgQElucHV0KCkgcHVibGljIGFjdGlvbjogJ3VwbG9hZCcgfCAnZG93bmxvYWQnIHwgbnVsbCA9IG51bGw7XG5cbiAgICBASW5wdXQoKSBwdWJsaWMgYmFja2dyb3VuZFNpemUgPSAnY29udGFpbic7XG5cbiAgICAvKipcbiAgICAgKiBDb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBhY2NlcHRlZCBtaW1ldHlwZXNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgYWNjZXB0ID0gJ2ltYWdlL2JtcCxpbWFnZS9naWYsaW1hZ2UvanBlZyxpbWFnZS9wanBlZyxpbWFnZS9wbmcsaW1hZ2Uvc3ZnK3htbCxpbWFnZS9zdmcsaW1hZ2Uvd2VicCc7XG5cbiAgICBASW5wdXQoKSBwdWJsaWMgc2VydmljZT86IFRTZXJ2aWNlO1xuXG4gICAgQElucHV0KCkgcHVibGljIG1vZGVsOiBGaWxlTW9kZWwgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIElmIHByb3ZpZGVkLCBnZXQgdXBkYXRlZCBvbiBjaGFuZ2VcbiAgICAgKiBJcyBub3QgdXNlZCBmb3IgcmVhZGluZyAtPiB1c2UgW21vZGVsXVxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBmb3JtQ3RybDogQWJzdHJhY3RDb250cm9sIHwgbnVsbCB8IHVuZGVmaW5lZCA9IG51bGw7XG5cbiAgICBAT3V0cHV0KCkgcHVibGljIHJlYWRvbmx5IG1vZGVsQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxGaWxlTW9kZWw+KCk7XG5cbiAgICBwdWJsaWMgaW1hZ2VQcmV2aWV3OiBTYWZlU3R5bGUgfCBudWxsID0gbnVsbDtcbiAgICBwdWJsaWMgZmlsZVByZXZpZXc6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgbmF0dXJhbEZpbGVTZXJ2aWNlOiBOYXR1cmFsRmlsZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICAgICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnQ6IERvY3VtZW50LFxuICAgICkge31cblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy51cGRhdGVJbWFnZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChjaGFuZ2VzLm1vZGVsICYmIGNoYW5nZXMubW9kZWwucHJldmlvdXNWYWx1ZSAhPT0gY2hhbmdlcy5tb2RlbC5jdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlSW1hZ2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyB1cGxvYWQoZmlsZTogRmlsZSk6IHZvaWQge1xuICAgICAgICB0aGlzLm1vZGVsID0ge2ZpbGU6IGZpbGV9O1xuICAgICAgICB0aGlzLnVwZGF0ZUltYWdlKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuZm9ybUN0cmwpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybUN0cmwuc2V0VmFsdWUodGhpcy5tb2RlbCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zZXJ2aWNlKSB7XG4gICAgICAgICAgICB0aGlzLnNlcnZpY2UuY3JlYXRlKHRoaXMubW9kZWwpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwgPSByZXN1bHQ7XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbENoYW5nZS5lbWl0KHJlc3VsdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubW9kZWxDaGFuZ2UuZW1pdCh0aGlzLm1vZGVsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXREb3dubG9hZExpbmsoKTogbnVsbCB8IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLmFjdGlvbiAhPT0gJ2Rvd25sb2FkJykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5uYXR1cmFsRmlsZVNlcnZpY2UuZ2V0RG93bmxvYWRMaW5rKHRoaXMubW9kZWwpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlSW1hZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW1hZ2VQcmV2aWV3ID0gbnVsbDtcbiAgICAgICAgdGhpcy5maWxlUHJldmlldyA9IG51bGw7XG4gICAgICAgIGlmICghdGhpcy5tb2RlbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubW9kZWwuZmlsZT8udHlwZS5pbmNsdWRlcygnaW1hZ2UvJykpIHtcbiAgICAgICAgICAgIC8vIE1vZGVsIGZyb20gdXBsb2FkIChiZWZvcmUgc2F2aW5nKVxuICAgICAgICAgICAgdGhpcy5nZXRCYXNlNjQodGhpcy5tb2RlbC5maWxlKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50ID0gJ3VybChkYXRhOicgKyB0aGlzLm1vZGVsPy5maWxlPy50eXBlICsgJztiYXNlNjQsJyArIHJlc3VsdCArICcpJztcbiAgICAgICAgICAgICAgICB0aGlzLmltYWdlUHJldmlldyA9IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RTdHlsZShjb250ZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubW9kZWwuZmlsZSkge1xuICAgICAgICAgICAgdGhpcy5maWxlUHJldmlldyA9IHRoaXMubW9kZWwuZmlsZS50eXBlLnNwbGl0KCcvJylbMV07XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5tb2RlbC5fX3R5cGVuYW1lID09PSAnSW1hZ2UnICYmIHRoaXMubW9kZWwuaWQpIHtcbiAgICAgICAgICAgIC8vIE1vZGVsIGltYWdlIHdpdGggaWQsIHVzZSBzcGVjaWZpYyBBUEkgdG8gcmVuZGVyIGltYWdlIGJ5IHNpemVcbiAgICAgICAgICAgIGNvbnN0IHdpbmRvdyA9IHRoaXMuZG9jdW1lbnQuZGVmYXVsdFZpZXc7XG4gICAgICAgICAgICBpZiAoIXdpbmRvdykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IHNob3cgaW1hZ2UgcHJldmlldyBiZWNhdXNlIGB3aW5kb3dgIGlzIHVuZGVmaW5lZCcpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBsb2MgPSB3aW5kb3cubG9jYXRpb247XG4gICAgICAgICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLmhlaWdodCA/ICcvJyArIHRoaXMuaGVpZ2h0IDogJyc7XG5cbiAgICAgICAgICAgIC8vIGNyZWF0ZSBpbWFnZSB1cmwgd2l0aG91dCBwb3J0IHRvIHN0YXkgY29tcGF0aWJsZSB3aXRoIGRldiBtb2RlXG4gICAgICAgICAgICBjb25zdCBpbWFnZSA9IGxvYy5wcm90b2NvbCArICcvLycgKyBsb2MuaG9zdG5hbWUgKyAnL2FwaS9pbWFnZS8nICsgdGhpcy5tb2RlbC5pZCArIGhlaWdodDtcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VQcmV2aWV3ID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFN0eWxlKCd1cmwoJyArIGltYWdlICsgJyknKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLm1vZGVsPy5taW1lICYmIFsnRmlsZScsICdBY2NvdW50aW5nRG9jdW1lbnQnXS5pbmNsdWRlcyh0aGlzLm1vZGVsLl9fdHlwZW5hbWUgfHwgJycpKSB7XG4gICAgICAgICAgICB0aGlzLmZpbGVQcmV2aWV3ID0gdGhpcy5tb2RlbC5taW1lLnNwbGl0KCcvJylbMV07XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5tb2RlbC5zcmMpIHtcbiAgICAgICAgICAgIC8vIGV4dGVybmFsIHVybFxuICAgICAgICAgICAgdGhpcy5pbWFnZVByZXZpZXcgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0U3R5bGUoJ3VybCgnICsgdGhpcy5tb2RlbC5zcmMgKyAnKScpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRCYXNlNjQoZmlsZTogRmlsZSB8IG51bGwpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgICAgICBpZiAoIWZpbGUpIHtcbiAgICAgICAgICAgIHJldHVybiBvZignJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdWJqZWN0ID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuXG4gICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICAgIHJlYWRlci5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgKGV2OiBhbnkpID0+IHtcbiAgICAgICAgICAgIHN1YmplY3QubmV4dChidG9hKGV2LnRhcmdldC5yZXN1bHQpKTtcbiAgICAgICAgICAgIHN1YmplY3QuY29tcGxldGUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJlYWRlci5yZWFkQXNCaW5hcnlTdHJpbmcoZmlsZSk7XG5cbiAgICAgICAgcmV0dXJuIHN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxufVxuIl19
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
import { Directive, EventEmitter, HostBinding, HostListener, Output } from '@angular/core';
|
|
2
|
-
import { NaturalAbstractFile } from './abstract-file';
|
|
3
|
-
import { eventToFiles, stopEvent } from './utils';
|
|
4
|
-
import { asyncScheduler, Subject } from 'rxjs';
|
|
5
|
-
import { takeUntil, throttleTime } from 'rxjs/operators';
|
|
6
|
-
/**
|
|
7
|
-
* This directive has all options to select files, and adds support for drag'n'drop.
|
|
8
|
-
*
|
|
9
|
-
* It will add the CSS class `natural-file-over` on the component when a file is
|
|
10
|
-
* dragged over. It is up to the component to have some specific styling by using
|
|
11
|
-
* this class.
|
|
12
|
-
*
|
|
13
|
-
* In most cases you probably also want click-to-select, so you should use:
|
|
14
|
-
*
|
|
15
|
-
* <div naturalFileDrop [selectable]="true"></div>
|
|
16
|
-
*
|
|
17
|
-
*/
|
|
18
|
-
export class NaturalFileDropDirective extends NaturalAbstractFile {
|
|
19
|
-
constructor() {
|
|
20
|
-
super(...arguments);
|
|
21
|
-
this.fileOverClass = false;
|
|
22
|
-
/**
|
|
23
|
-
* Emits whenever files are being dragged over
|
|
24
|
-
*/
|
|
25
|
-
this.fileOver = new EventEmitter();
|
|
26
|
-
this.rawFileOver = new Subject();
|
|
27
|
-
}
|
|
28
|
-
ngOnInit() {
|
|
29
|
-
super.ngOnInit();
|
|
30
|
-
// Automatically change the class, but not too often to avoid visual
|
|
31
|
-
// flickering in Chrome when hovering across child HTML element of our host.
|
|
32
|
-
// It's not absolutely perfect and if dragging slowly and precisely we can
|
|
33
|
-
// still see flicker, but it should be better for most normal usages.
|
|
34
|
-
this.rawFileOver
|
|
35
|
-
.pipe(takeUntil(this.ngUnsubscribe), throttleTime(200, asyncScheduler, {
|
|
36
|
-
leading: true,
|
|
37
|
-
trailing: true,
|
|
38
|
-
}))
|
|
39
|
-
.subscribe(fileOver => {
|
|
40
|
-
this.fileOver.emit(fileOver);
|
|
41
|
-
this.fileOverClass = fileOver;
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
onDrop(event) {
|
|
45
|
-
if (this.fileSelectionDisabled) {
|
|
46
|
-
return;
|
|
47
|
-
}
|
|
48
|
-
this.closeDrags();
|
|
49
|
-
const files = eventToFiles(event);
|
|
50
|
-
if (!files.length) {
|
|
51
|
-
return;
|
|
52
|
-
}
|
|
53
|
-
stopEvent(event);
|
|
54
|
-
this.handleFiles(files);
|
|
55
|
-
}
|
|
56
|
-
onDragOver(event) {
|
|
57
|
-
if (!this.hasObservers()) {
|
|
58
|
-
return;
|
|
59
|
-
}
|
|
60
|
-
if (this.fileSelectionDisabled) {
|
|
61
|
-
return;
|
|
62
|
-
}
|
|
63
|
-
stopEvent(event);
|
|
64
|
-
// Change cursor
|
|
65
|
-
const transfer = event.dataTransfer;
|
|
66
|
-
if (transfer) {
|
|
67
|
-
transfer.dropEffect = 'copy';
|
|
68
|
-
}
|
|
69
|
-
this.rawFileOver.next(true);
|
|
70
|
-
}
|
|
71
|
-
closeDrags() {
|
|
72
|
-
this.rawFileOver.next(false);
|
|
73
|
-
}
|
|
74
|
-
onDragLeave(event) {
|
|
75
|
-
if (this.fileSelectionDisabled) {
|
|
76
|
-
return;
|
|
77
|
-
}
|
|
78
|
-
stopEvent(event);
|
|
79
|
-
this.closeDrags();
|
|
80
|
-
}
|
|
81
|
-
hasObservers() {
|
|
82
|
-
return (this.fileChange.observed ||
|
|
83
|
-
this.filesChange.observed ||
|
|
84
|
-
(this.broadcast && this.naturalFileService.filesChanged.observed));
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
NaturalFileDropDirective.decorators = [
|
|
88
|
-
{ type: Directive, args: [{
|
|
89
|
-
selector: ':not([naturalFileSelect])[naturalFileDrop]',
|
|
90
|
-
},] }
|
|
91
|
-
];
|
|
92
|
-
NaturalFileDropDirective.propDecorators = {
|
|
93
|
-
fileOverClass: [{ type: HostBinding, args: ['class.natural-file-over',] }],
|
|
94
|
-
fileOver: [{ type: Output }],
|
|
95
|
-
onDrop: [{ type: HostListener, args: ['drop', ['$event'],] }],
|
|
96
|
-
onDragOver: [{ type: HostListener, args: ['dragover', ['$event'],] }],
|
|
97
|
-
onDragLeave: [{ type: HostListener, args: ['dragleave', ['$event'],] }]
|
|
98
|
-
};
|
|
99
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1kcm9wLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9tb2R1bGVzL2ZpbGUvZmlsZS1kcm9wLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFVLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNqRyxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRCxPQUFPLEVBQUMsWUFBWSxFQUFFLFNBQVMsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUNoRCxPQUFPLEVBQUMsY0FBYyxFQUFFLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUM3QyxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXZEOzs7Ozs7Ozs7OztHQVdHO0FBSUgsTUFBTSxPQUFPLHdCQUF5QixTQUFRLG1CQUFtQjtJQUhqRTs7UUFJbUQsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFFckU7O1dBRUc7UUFDdUIsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFFaEQsZ0JBQVcsR0FBRyxJQUFJLE9BQU8sRUFBVyxDQUFDO0lBa0YxRCxDQUFDO0lBaEZVLFFBQVE7UUFDWCxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFakIsb0VBQW9FO1FBQ3BFLDRFQUE0RTtRQUM1RSwwRUFBMEU7UUFDMUUscUVBQXFFO1FBQ3JFLElBQUksQ0FBQyxXQUFXO2FBQ1gsSUFBSSxDQUNELFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLFlBQVksQ0FBQyxHQUFHLEVBQUUsY0FBYyxFQUFFO1lBQzlCLE9BQU8sRUFBRSxJQUFJO1lBQ2IsUUFBUSxFQUFFLElBQUk7U0FDakIsQ0FBQyxDQUNMO2FBQ0EsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzdCLElBQUksQ0FBQyxhQUFhLEdBQUcsUUFBUSxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUdNLE1BQU0sQ0FBQyxLQUFnQjtRQUMxQixJQUFJLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtZQUM1QixPQUFPO1NBQ1Y7UUFFRCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFbEIsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQ2YsT0FBTztTQUNWO1FBRUQsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pCLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUdNLFVBQVUsQ0FBQyxLQUFnQjtRQUM5QixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFO1lBQ3RCLE9BQU87U0FDVjtRQUVELElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFO1lBQzVCLE9BQU87U0FDVjtRQUVELFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVqQixnQkFBZ0I7UUFDaEIsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQztRQUNwQyxJQUFJLFFBQVEsRUFBRTtZQUNWLFFBQVEsQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO1NBQ2hDO1FBRUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVPLFVBQVU7UUFDZCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBR00sV0FBVyxDQUFDLEtBQWdCO1FBQy9CLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFO1lBQzVCLE9BQU87U0FDVjtRQUVELFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVPLFlBQVk7UUFDaEIsT0FBTyxDQUNILElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUTtZQUN4QixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVE7WUFDekIsQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQ3BFLENBQUM7SUFDTixDQUFDOzs7WUE1RkosU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSw0Q0FBNEM7YUFDekQ7Ozs0QkFFSSxXQUFXLFNBQUMseUJBQXlCO3VCQUtyQyxNQUFNO3FCQXlCTixZQUFZLFNBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDO3lCQWlCL0IsWUFBWSxTQUFDLFVBQVUsRUFBRSxDQUFDLFFBQVEsQ0FBQzswQkF5Qm5DLFlBQVksU0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RpcmVjdGl2ZSwgRXZlbnRFbWl0dGVyLCBIb3N0QmluZGluZywgSG9zdExpc3RlbmVyLCBPbkluaXQsIE91dHB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge05hdHVyYWxBYnN0cmFjdEZpbGV9IGZyb20gJy4vYWJzdHJhY3QtZmlsZSc7XG5pbXBvcnQge2V2ZW50VG9GaWxlcywgc3RvcEV2ZW50fSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7YXN5bmNTY2hlZHVsZXIsIFN1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHt0YWtlVW50aWwsIHRocm90dGxlVGltZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG4vKipcbiAqIFRoaXMgZGlyZWN0aXZlIGhhcyBhbGwgb3B0aW9ucyB0byBzZWxlY3QgZmlsZXMsIGFuZCBhZGRzIHN1cHBvcnQgZm9yIGRyYWcnbidkcm9wLlxuICpcbiAqIEl0IHdpbGwgYWRkIHRoZSBDU1MgY2xhc3MgYG5hdHVyYWwtZmlsZS1vdmVyYCBvbiB0aGUgY29tcG9uZW50IHdoZW4gYSBmaWxlIGlzXG4gKiBkcmFnZ2VkIG92ZXIuIEl0IGlzIHVwIHRvIHRoZSBjb21wb25lbnQgdG8gaGF2ZSBzb21lIHNwZWNpZmljIHN0eWxpbmcgYnkgdXNpbmdcbiAqIHRoaXMgY2xhc3MuXG4gKlxuICogSW4gbW9zdCBjYXNlcyB5b3UgcHJvYmFibHkgYWxzbyB3YW50IGNsaWNrLXRvLXNlbGVjdCwgc28geW91IHNob3VsZCB1c2U6XG4gKlxuICogICAgIDxkaXYgbmF0dXJhbEZpbGVEcm9wIFtzZWxlY3RhYmxlXT1cInRydWVcIj48L2Rpdj5cbiAqXG4gKi9cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnOm5vdChbbmF0dXJhbEZpbGVTZWxlY3RdKVtuYXR1cmFsRmlsZURyb3BdJyxcbn0pXG5leHBvcnQgY2xhc3MgTmF0dXJhbEZpbGVEcm9wRGlyZWN0aXZlIGV4dGVuZHMgTmF0dXJhbEFic3RyYWN0RmlsZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5uYXR1cmFsLWZpbGUtb3ZlcicpIHB1YmxpYyBmaWxlT3ZlckNsYXNzID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0cyB3aGVuZXZlciBmaWxlcyBhcmUgYmVpbmcgZHJhZ2dlZCBvdmVyXG4gICAgICovXG4gICAgQE91dHB1dCgpIHB1YmxpYyByZWFkb25seSBmaWxlT3ZlciA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgcmF3RmlsZU92ZXIgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuXG4gICAgICAgIC8vIEF1dG9tYXRpY2FsbHkgY2hhbmdlIHRoZSBjbGFzcywgYnV0IG5vdCB0b28gb2Z0ZW4gdG8gYXZvaWQgdmlzdWFsXG4gICAgICAgIC8vIGZsaWNrZXJpbmcgaW4gQ2hyb21lIHdoZW4gaG92ZXJpbmcgYWNyb3NzIGNoaWxkIEhUTUwgZWxlbWVudCBvZiBvdXIgaG9zdC5cbiAgICAgICAgLy8gSXQncyBub3QgYWJzb2x1dGVseSBwZXJmZWN0IGFuZCBpZiBkcmFnZ2luZyBzbG93bHkgYW5kIHByZWNpc2VseSB3ZSBjYW5cbiAgICAgICAgLy8gc3RpbGwgc2VlIGZsaWNrZXIsIGJ1dCBpdCBzaG91bGQgYmUgYmV0dGVyIGZvciBtb3N0IG5vcm1hbCB1c2FnZXMuXG4gICAgICAgIHRoaXMucmF3RmlsZU92ZXJcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgICAgICAgICAgIHRocm90dGxlVGltZSgyMDAsIGFzeW5jU2NoZWR1bGVyLCB7XG4gICAgICAgICAgICAgICAgICAgIGxlYWRpbmc6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHRyYWlsaW5nOiB0cnVlLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZShmaWxlT3ZlciA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWxlT3Zlci5lbWl0KGZpbGVPdmVyKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbGVPdmVyQ2xhc3MgPSBmaWxlT3ZlcjtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2Ryb3AnLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvbkRyb3AoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5maWxlU2VsZWN0aW9uRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2xvc2VEcmFncygpO1xuXG4gICAgICAgIGNvbnN0IGZpbGVzID0gZXZlbnRUb0ZpbGVzKGV2ZW50KTtcbiAgICAgICAgaWYgKCFmaWxlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0b3BFdmVudChldmVudCk7XG4gICAgICAgIHRoaXMuaGFuZGxlRmlsZXMoZmlsZXMpO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2RyYWdvdmVyJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25EcmFnT3ZlcihldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5oYXNPYnNlcnZlcnMoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZmlsZVNlbGVjdGlvbkRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBzdG9wRXZlbnQoZXZlbnQpO1xuXG4gICAgICAgIC8vIENoYW5nZSBjdXJzb3JcbiAgICAgICAgY29uc3QgdHJhbnNmZXIgPSBldmVudC5kYXRhVHJhbnNmZXI7XG4gICAgICAgIGlmICh0cmFuc2Zlcikge1xuICAgICAgICAgICAgdHJhbnNmZXIuZHJvcEVmZmVjdCA9ICdjb3B5JztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmF3RmlsZU92ZXIubmV4dCh0cnVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNsb3NlRHJhZ3MoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmF3RmlsZU92ZXIubmV4dChmYWxzZSk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignZHJhZ2xlYXZlJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25EcmFnTGVhdmUoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5maWxlU2VsZWN0aW9uRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0b3BFdmVudChldmVudCk7XG4gICAgICAgIHRoaXMuY2xvc2VEcmFncygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFzT2JzZXJ2ZXJzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5maWxlQ2hhbmdlLm9ic2VydmVkIHx8XG4gICAgICAgICAgICB0aGlzLmZpbGVzQ2hhbmdlLm9ic2VydmVkIHx8XG4gICAgICAgICAgICAodGhpcy5icm9hZGNhc3QgJiYgdGhpcy5uYXR1cmFsRmlsZVNlcnZpY2UuZmlsZXNDaGFuZ2VkLm9ic2VydmVkKVxuICAgICAgICApO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { Directive, Input } from '@angular/core';
|
|
2
|
-
import { NaturalAbstractFile } from './abstract-file';
|
|
3
|
-
/**
|
|
4
|
-
* This directive has all options to select files, except drag'n'drop.
|
|
5
|
-
*/
|
|
6
|
-
export class NaturalFileSelectDirective extends NaturalAbstractFile {
|
|
7
|
-
constructor() {
|
|
8
|
-
super(...arguments);
|
|
9
|
-
/**
|
|
10
|
-
* Whether the user can click on the element to select something
|
|
11
|
-
*
|
|
12
|
-
* Override parent to enable it by default
|
|
13
|
-
*/
|
|
14
|
-
this.selectable = true;
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
NaturalFileSelectDirective.decorators = [
|
|
18
|
-
{ type: Directive, args: [{
|
|
19
|
-
selector: ':not([naturalFileDrop])[naturalFileSelect]',
|
|
20
|
-
},] }
|
|
21
|
-
];
|
|
22
|
-
NaturalFileSelectDirective.propDecorators = {
|
|
23
|
-
selectable: [{ type: Input }]
|
|
24
|
-
};
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1zZWxlY3QuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF0dXJhbC9zcmMvbGliL21vZHVsZXMvZmlsZS9maWxlLXNlbGVjdC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDL0MsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFcEQ7O0dBRUc7QUFJSCxNQUFNLE9BQU8sMEJBQTJCLFNBQVEsbUJBQW1CO0lBSG5FOztRQUlJOzs7O1dBSUc7UUFDYSxlQUFVLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLENBQUM7OztZQVZBLFNBQVMsU0FBQztnQkFDUCxRQUFRLEVBQUUsNENBQTRDO2FBQ3pEOzs7eUJBT0ksS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGlyZWN0aXZlLCBJbnB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge05hdHVyYWxBYnN0cmFjdEZpbGV9IGZyb20gJy4vYWJzdHJhY3QtZmlsZSc7XG5cbi8qKlxuICogVGhpcyBkaXJlY3RpdmUgaGFzIGFsbCBvcHRpb25zIHRvIHNlbGVjdCBmaWxlcywgZXhjZXB0IGRyYWcnbidkcm9wLlxuICovXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJzpub3QoW25hdHVyYWxGaWxlRHJvcF0pW25hdHVyYWxGaWxlU2VsZWN0XScsXG59KVxuZXhwb3J0IGNsYXNzIE5hdHVyYWxGaWxlU2VsZWN0RGlyZWN0aXZlIGV4dGVuZHMgTmF0dXJhbEFic3RyYWN0RmlsZSB7XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgdXNlciBjYW4gY2xpY2sgb24gdGhlIGVsZW1lbnQgdG8gc2VsZWN0IHNvbWV0aGluZ1xuICAgICAqXG4gICAgICogT3ZlcnJpZGUgcGFyZW50IHRvIGVuYWJsZSBpdCBieSBkZWZhdWx0XG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIHNlbGVjdGFibGUgPSB0cnVlO1xufVxuIl19
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { CommonModule } from '@angular/common';
|
|
2
|
-
import { NgModule } from '@angular/core';
|
|
3
|
-
import { NaturalFileDropDirective } from './file-drop.directive';
|
|
4
|
-
import { NaturalFileSelectDirective } from './file-select.directive';
|
|
5
|
-
import { FileComponent } from './component/file.component';
|
|
6
|
-
import { NaturalIconModule } from '../icon/icon.module';
|
|
7
|
-
import { MatRippleModule } from '@angular/material/core';
|
|
8
|
-
import { NaturalCommonModule } from '../common/common-module';
|
|
9
|
-
const declarations = [NaturalFileDropDirective, NaturalFileSelectDirective, FileComponent];
|
|
10
|
-
export class NaturalFileModule {
|
|
11
|
-
}
|
|
12
|
-
NaturalFileModule.decorators = [
|
|
13
|
-
{ type: NgModule, args: [{
|
|
14
|
-
imports: [CommonModule, NaturalIconModule, MatRippleModule, NaturalCommonModule],
|
|
15
|
-
declarations: declarations,
|
|
16
|
-
exports: declarations,
|
|
17
|
-
},] }
|
|
18
|
-
];
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsL3NyYy9saWIvbW9kdWxlcy9maWxlL2ZpbGUubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXZDLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQy9ELE9BQU8sRUFBQywwQkFBMEIsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ25FLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFFNUQsTUFBTSxZQUFZLEdBQUcsQ0FBQyx3QkFBd0IsRUFBRSwwQkFBMEIsRUFBRSxhQUFhLENBQUMsQ0FBQztBQU8zRixNQUFNLE9BQU8saUJBQWlCOzs7WUFMN0IsUUFBUSxTQUFDO2dCQUNOLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsbUJBQW1CLENBQUM7Z0JBQ2hGLFlBQVksRUFBRSxZQUFZO2dCQUMxQixPQUFPLEVBQUUsWUFBWTthQUN4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7TmF0dXJhbEZpbGVEcm9wRGlyZWN0aXZlfSBmcm9tICcuL2ZpbGUtZHJvcC5kaXJlY3RpdmUnO1xuaW1wb3J0IHtOYXR1cmFsRmlsZVNlbGVjdERpcmVjdGl2ZX0gZnJvbSAnLi9maWxlLXNlbGVjdC5kaXJlY3RpdmUnO1xuaW1wb3J0IHtGaWxlQ29tcG9uZW50fSBmcm9tICcuL2NvbXBvbmVudC9maWxlLmNvbXBvbmVudCc7XG5pbXBvcnQge05hdHVyYWxJY29uTW9kdWxlfSBmcm9tICcuLi9pY29uL2ljb24ubW9kdWxlJztcbmltcG9ydCB7TWF0UmlwcGxlTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcbmltcG9ydCB7TmF0dXJhbENvbW1vbk1vZHVsZX0gZnJvbSAnLi4vY29tbW9uL2NvbW1vbi1tb2R1bGUnO1xuXG5jb25zdCBkZWNsYXJhdGlvbnMgPSBbTmF0dXJhbEZpbGVEcm9wRGlyZWN0aXZlLCBOYXR1cmFsRmlsZVNlbGVjdERpcmVjdGl2ZSwgRmlsZUNvbXBvbmVudF07XG5cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgTmF0dXJhbEljb25Nb2R1bGUsIE1hdFJpcHBsZU1vZHVsZSwgTmF0dXJhbENvbW1vbk1vZHVsZV0sXG4gICAgZGVjbGFyYXRpb25zOiBkZWNsYXJhdGlvbnMsXG4gICAgZXhwb3J0czogZGVjbGFyYXRpb25zLFxufSlcbmV4cG9ydCBjbGFzcyBOYXR1cmFsRmlsZU1vZHVsZSB7fVxuIl19
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import { Inject, Injectable } from '@angular/core';
|
|
2
|
-
import { Subject } from 'rxjs';
|
|
3
|
-
import { DOCUMENT } from '@angular/common';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "@angular/common";
|
|
6
|
-
// @dynamic
|
|
7
|
-
export class NaturalFileService {
|
|
8
|
-
constructor(document) {
|
|
9
|
-
this.document = document;
|
|
10
|
-
/**
|
|
11
|
-
* Allow to subscribe to selected files in the entire application. So a
|
|
12
|
-
* child component is able to receive a file that was dropped on a parent
|
|
13
|
-
* component.
|
|
14
|
-
*
|
|
15
|
-
* Typically useful to drop a file on the entire screen, instead of a precise
|
|
16
|
-
* component.
|
|
17
|
-
*/
|
|
18
|
-
this.filesChanged = new Subject();
|
|
19
|
-
}
|
|
20
|
-
getDownloadLink(model) {
|
|
21
|
-
const window = this.document.defaultView;
|
|
22
|
-
if (!window) {
|
|
23
|
-
throw new Error('Cannot build download link because `window` is undefined');
|
|
24
|
-
}
|
|
25
|
-
const hostname = window.location.protocol + '//' + window.location.hostname;
|
|
26
|
-
if ((model === null || model === void 0 ? void 0 : model.__typename) === 'File') {
|
|
27
|
-
return hostname + '/api/file/' + model.id;
|
|
28
|
-
}
|
|
29
|
-
else if ((model === null || model === void 0 ? void 0 : model.__typename) === 'AccountingDocument') {
|
|
30
|
-
return hostname + '/api/accounting-document/' + model.id;
|
|
31
|
-
}
|
|
32
|
-
else if ((model === null || model === void 0 ? void 0 : model.__typename) === 'Image') {
|
|
33
|
-
return hostname + '/api/image/' + model.id;
|
|
34
|
-
}
|
|
35
|
-
return null;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
NaturalFileService.ɵprov = i0.ɵɵdefineInjectable({ factory: function NaturalFileService_Factory() { return new NaturalFileService(i0.ɵɵinject(i1.DOCUMENT)); }, token: NaturalFileService, providedIn: "root" });
|
|
39
|
-
NaturalFileService.decorators = [
|
|
40
|
-
{ type: Injectable, args: [{
|
|
41
|
-
providedIn: 'root',
|
|
42
|
-
},] }
|
|
43
|
-
];
|
|
44
|
-
NaturalFileService.ctorParameters = () => [
|
|
45
|
-
{ type: Document, decorators: [{ type: Inject, args: [DOCUMENT,] }] }
|
|
46
|
-
];
|
|
47
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF0dXJhbC9zcmMvbGliL21vZHVsZXMvZmlsZS9maWxlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUc3QixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7OztBQUV6QyxXQUFXO0FBSVgsTUFBTSxPQUFPLGtCQUFrQjtJQVczQixZQUErQyxRQUFrQjtRQUFsQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBVmpFOzs7Ozs7O1dBT0c7UUFDYSxpQkFBWSxHQUFHLElBQUksT0FBTyxFQUFpQixDQUFDO0lBRVEsQ0FBQztJQUU5RCxlQUFlLENBQUMsS0FBdUI7UUFDMUMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUM7UUFDekMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE1BQU0sSUFBSSxLQUFLLENBQUMsMERBQTBELENBQUMsQ0FBQztTQUMvRTtRQUVELE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLElBQUksR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztRQUU1RSxJQUFJLENBQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLFVBQVUsTUFBSyxNQUFNLEVBQUU7WUFDOUIsT0FBTyxRQUFRLEdBQUcsWUFBWSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUM7U0FDN0M7YUFBTSxJQUFJLENBQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLFVBQVUsTUFBSyxvQkFBb0IsRUFBRTtZQUNuRCxPQUFPLFFBQVEsR0FBRywyQkFBMkIsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDO1NBQzVEO2FBQU0sSUFBSSxDQUFBLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxVQUFVLE1BQUssT0FBTyxFQUFFO1lBQ3RDLE9BQU8sUUFBUSxHQUFHLGFBQWEsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDO1NBQzlDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQzs7OztZQWpDSixVQUFVLFNBQUM7Z0JBQ1IsVUFBVSxFQUFFLE1BQU07YUFDckI7OztZQVk0RCxRQUFRLHVCQUFwRCxNQUFNLFNBQUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7U3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0ZpbGVTZWxlY3Rpb259IGZyb20gJy4vYWJzdHJhY3QtZmlsZSc7XG5pbXBvcnQge0ZpbGVNb2RlbH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQge0RPQ1VNRU5UfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG4vLyBAZHluYW1pY1xuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgTmF0dXJhbEZpbGVTZXJ2aWNlIHtcbiAgICAvKipcbiAgICAgKiBBbGxvdyB0byBzdWJzY3JpYmUgdG8gc2VsZWN0ZWQgZmlsZXMgaW4gdGhlIGVudGlyZSBhcHBsaWNhdGlvbi4gU28gYVxuICAgICAqIGNoaWxkIGNvbXBvbmVudCBpcyBhYmxlIHRvIHJlY2VpdmUgYSBmaWxlIHRoYXQgd2FzIGRyb3BwZWQgb24gYSBwYXJlbnRcbiAgICAgKiBjb21wb25lbnQuXG4gICAgICpcbiAgICAgKiBUeXBpY2FsbHkgdXNlZnVsIHRvIGRyb3AgYSBmaWxlIG9uIHRoZSBlbnRpcmUgc2NyZWVuLCBpbnN0ZWFkIG9mIGEgcHJlY2lzZVxuICAgICAqIGNvbXBvbmVudC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgZmlsZXNDaGFuZ2VkID0gbmV3IFN1YmplY3Q8RmlsZVNlbGVjdGlvbj4oKTtcblxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnQ6IERvY3VtZW50KSB7fVxuXG4gICAgcHVibGljIGdldERvd25sb2FkTGluayhtb2RlbDogRmlsZU1vZGVsIHwgbnVsbCk6IG51bGwgfCBzdHJpbmcge1xuICAgICAgICBjb25zdCB3aW5kb3cgPSB0aGlzLmRvY3VtZW50LmRlZmF1bHRWaWV3O1xuICAgICAgICBpZiAoIXdpbmRvdykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgYnVpbGQgZG93bmxvYWQgbGluayBiZWNhdXNlIGB3aW5kb3dgIGlzIHVuZGVmaW5lZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaG9zdG5hbWUgPSB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgKyAnLy8nICsgd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lO1xuXG4gICAgICAgIGlmIChtb2RlbD8uX190eXBlbmFtZSA9PT0gJ0ZpbGUnKSB7XG4gICAgICAgICAgICByZXR1cm4gaG9zdG5hbWUgKyAnL2FwaS9maWxlLycgKyBtb2RlbC5pZDtcbiAgICAgICAgfSBlbHNlIGlmIChtb2RlbD8uX190eXBlbmFtZSA9PT0gJ0FjY291bnRpbmdEb2N1bWVudCcpIHtcbiAgICAgICAgICAgIHJldHVybiBob3N0bmFtZSArICcvYXBpL2FjY291bnRpbmctZG9jdW1lbnQvJyArIG1vZGVsLmlkO1xuICAgICAgICB9IGVsc2UgaWYgKG1vZGVsPy5fX3R5cGVuYW1lID09PSAnSW1hZ2UnKSB7XG4gICAgICAgICAgICByZXR1cm4gaG9zdG5hbWUgKyAnL2FwaS9pbWFnZS8nICsgbW9kZWwuaWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59XG4iXX0=
|