@dsivd/prestations-ng 14.5.17-beta1 → 15.0.0-beta2
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/CHANGELOG.md +14 -6
- package/CONTRIBUTING.md +1 -1
- package/README.md +2 -0
- package/UPGRADING_V14.md +4 -2
- package/UPGRADING_V15.md +51 -0
- package/dsivd-prestations-ng-v15.0.0-beta2.tgz +0 -0
- package/{esm2015/abstract-page-component.js → esm2020/abstract-page-component.mjs} +3 -3
- package/{esm2015/backend-response.js → esm2020/backend-response.mjs} +0 -0
- package/{esm2015/directives/currency-formatter.directive.js → esm2020/directives/currency-formatter.directive.mjs} +3 -3
- package/{esm2015/directives/formatter.module.js → esm2020/directives/formatter.module.mjs} +4 -4
- package/{esm2015/directives/iban-formatter.directive.js → esm2020/directives/iban-formatter.directive.mjs} +3 -3
- package/{esm2015/directives/ide-formatter.directive.js → esm2020/directives/ide-formatter.directive.mjs} +3 -3
- package/{esm2015/directives/ndc-formatter.directive.js → esm2020/directives/ndc-formatter.directive.mjs} +3 -3
- package/{esm2015/dsivd-prestations-ng.js → esm2020/dsivd-prestations-ng.mjs} +0 -0
- package/{esm2015/error-template.js → esm2020/error-template.mjs} +0 -0
- package/{esm2015/foehn-address/address.type.js → esm2020/foehn-address/address.type.mjs} +0 -0
- package/{esm2015/foehn-address/foehn-address.module.js → esm2020/foehn-address/foehn-address.module.mjs} +4 -4
- package/{esm2015/foehn-address/foehn-display-address.component.js → esm2020/foehn-address/foehn-display-address.component.mjs} +5 -9
- package/esm2020/foehn-address/foehn-input-address.component.mjs +366 -0
- package/esm2020/foehn-address/foehn-input-foreign-locality.component.mjs +66 -0
- package/{esm2015/foehn-address/foehn-input-foreign-street.component.js → esm2020/foehn-address/foehn-input-foreign-street.component.mjs} +6 -11
- package/esm2020/foehn-autocomplete/foehn-autocomplete.component.mjs +548 -0
- package/{esm2015/foehn-autocomplete/foehn-autocomplete.module.js → esm2020/foehn-autocomplete/foehn-autocomplete.module.mjs} +4 -4
- package/esm2020/foehn-boolean/foehn-boolean-checkbox.component.mjs +28 -0
- package/esm2020/foehn-boolean/foehn-boolean-radio.component.mjs +37 -0
- package/{esm2015/foehn-boolean/foehn-boolean.module.js → esm2020/foehn-boolean/foehn-boolean.module.mjs} +4 -4
- package/{esm2015/foehn-breadcrumb/breadcrumb-event.service.js → esm2020/foehn-breadcrumb/breadcrumb-event.service.mjs} +10 -10
- package/{esm2015/foehn-breadcrumb/breadcrumb.js → esm2020/foehn-breadcrumb/breadcrumb.mjs} +0 -0
- package/{esm2015/foehn-breadcrumb/foehn-breadcrumb.component.js → esm2020/foehn-breadcrumb/foehn-breadcrumb.component.mjs} +5 -9
- package/{esm2015/foehn-breadcrumb/foehn-breadcrumb.module.js → esm2020/foehn-breadcrumb/foehn-breadcrumb.module.mjs} +4 -4
- package/esm2020/foehn-checkables/foehn-checkable-group.component.mjs +283 -0
- package/{esm2015/foehn-checkables/foehn-checkables.module.js → esm2020/foehn-checkables/foehn-checkables.module.mjs} +4 -4
- package/esm2020/foehn-checkables/foehn-checkbox.component.mjs +36 -0
- package/esm2020/foehn-checkables/foehn-radio.component.mjs +63 -0
- package/esm2020/foehn-checkables/foehn-select.component.mjs +62 -0
- package/{esm2015/foehn-checkables/form-select-option-group.js → esm2020/foehn-checkables/form-select-option-group.mjs} +0 -0
- package/{esm2015/foehn-checkables/form-select-option.js → esm2020/foehn-checkables/form-select-option.mjs} +0 -0
- package/{esm2015/foehn-confirm-modal/foehn-confirm-modal-content.js → esm2020/foehn-confirm-modal/foehn-confirm-modal-content.mjs} +0 -0
- package/esm2020/foehn-confirm-modal/foehn-confirm-modal.component.mjs +39 -0
- package/{esm2015/foehn-confirm-modal/foehn-confirm-modal.module.js → esm2020/foehn-confirm-modal/foehn-confirm-modal.module.mjs} +4 -4
- package/{esm2015/foehn-confirm-modal/foehn-confirm-modal.service.js → esm2020/foehn-confirm-modal/foehn-confirm-modal.service.mjs} +3 -3
- package/{esm2015/foehn-date-picker/date-picker-navigation.helper.js → esm2020/foehn-date-picker/date-picker-navigation.helper.mjs} +7 -7
- package/{esm2015/foehn-date-picker/date-picker.helper.js → esm2020/foehn-date-picker/date-picker.helper.mjs} +4 -4
- package/{esm2015/foehn-date-picker/day-month.type.js → esm2020/foehn-date-picker/day-month.type.mjs} +0 -0
- package/{esm2015/foehn-date-picker/focused-day.type.js → esm2020/foehn-date-picker/focused-day.type.mjs} +0 -0
- package/{esm2015/foehn-date-picker/foehn-date-picker.component.js → esm2020/foehn-date-picker/foehn-date-picker.component.mjs} +22 -25
- package/{esm2015/foehn-date-picker/foehn-date-picker.module.js → esm2020/foehn-date-picker/foehn-date-picker.module.mjs} +4 -4
- package/{esm2015/foehn-date-picker/month-year.type.js → esm2020/foehn-date-picker/month-year.type.mjs} +0 -0
- package/esm2020/foehn-date-picker-button/foehn-date-picker-button.component.mjs +70 -0
- package/{esm2015/foehn-date-picker-button/foehn-date-picker-button.module.js → esm2020/foehn-date-picker-button/foehn-date-picker-button.module.mjs} +4 -4
- package/{esm2015/foehn-debug-summary/foehn-debug-summary.component.js → esm2020/foehn-debug-summary/foehn-debug-summary.component.mjs} +8 -11
- package/{esm2015/foehn-debug-summary/foehn-debug-summary.component.module.js → esm2020/foehn-debug-summary/foehn-debug-summary.component.module.mjs} +4 -4
- package/esm2020/foehn-decision-electronique/foehn-decision-electronique.component.mjs +36 -0
- package/{esm2015/foehn-decision-electronique/foehn-decision-electronique.module.js → esm2020/foehn-decision-electronique/foehn-decision-electronique.module.mjs} +4 -4
- package/esm2020/foehn-footer/foehn-footer.component.mjs +129 -0
- package/{esm2015/foehn-footer/foehn-footer.module.js → esm2020/foehn-footer/foehn-footer.module.mjs} +4 -4
- package/{esm2015/foehn-footer/footer-link.type.js → esm2020/foehn-footer/footer-link.type.mjs} +0 -0
- package/{esm2015/foehn-form/foehn-form.component.js → esm2020/foehn-form/foehn-form.component.mjs} +5 -8
- package/{esm2015/foehn-form/foehn-form.module.js → esm2020/foehn-form/foehn-form.module.mjs} +4 -4
- package/{esm2015/foehn-growl/foehn-growl.component.js → esm2020/foehn-growl/foehn-growl.component.mjs} +8 -12
- package/{esm2015/foehn-growl/foehn-growl.module.js → esm2020/foehn-growl/foehn-growl.module.mjs} +4 -4
- package/{esm2015/foehn-growl/growl-broker.service.js → esm2020/foehn-growl/growl-broker.service.mjs} +3 -3
- package/{esm2015/foehn-growl/growl-message.js → esm2020/foehn-growl/growl-message.mjs} +0 -0
- package/{esm2015/foehn-growl/growl-types.js → esm2020/foehn-growl/growl-types.mjs} +0 -0
- package/esm2020/foehn-header/foehn-header.component.mjs +69 -0
- package/{esm2015/foehn-header/foehn-header.module.js → esm2020/foehn-header/foehn-header.module.mjs} +4 -4
- package/{esm2015/foehn-header/foehn-skip-link.component.js → esm2020/foehn-header/foehn-skip-link.component.mjs} +5 -8
- package/{esm2015/foehn-help-modal/foehn-help-modal.component.js → esm2020/foehn-help-modal/foehn-help-modal.component.mjs} +5 -9
- package/{esm2015/foehn-help-modal/foehn-help-modal.module.js → esm2020/foehn-help-modal/foehn-help-modal.module.mjs} +4 -4
- package/{esm2015/foehn-help-modal/foehn-help-modal.type.js → esm2020/foehn-help-modal/foehn-help-modal.type.mjs} +0 -0
- package/{esm2015/foehn-icons/abstract-icon-component.js → esm2020/foehn-icons/abstract-icon-component.mjs} +4 -4
- package/{esm2015/foehn-icons/foehn-icon-calendar.component.js → esm2020/foehn-icons/foehn-icon-calendar.component.mjs} +5 -8
- package/{esm2015/foehn-icons/foehn-icon-check-square-o.component.js → esm2020/foehn-icons/foehn-icon-check-square-o.component.mjs} +5 -8
- package/{esm2015/foehn-icons/foehn-icon-check.component.js → esm2020/foehn-icons/foehn-icon-check.component.mjs} +5 -8
- package/{esm2015/foehn-icons/foehn-icon-chevron-down.component.js → esm2020/foehn-icons/foehn-icon-chevron-down.component.mjs} +5 -8
- package/{esm2015/foehn-icons/foehn-icon-chevron-left.component.js → esm2020/foehn-icons/foehn-icon-chevron-left.component.mjs} +5 -8
- package/{esm2015/foehn-icons/foehn-icon-chevron-right.component.js → esm2020/foehn-icons/foehn-icon-chevron-right.component.mjs} +5 -8
- package/{esm2015/foehn-icons/foehn-icon-chevron-up.component.js → esm2020/foehn-icons/foehn-icon-chevron-up.component.mjs} +5 -8
- package/{esm2015/foehn-icons/foehn-icon-clock.component.js → esm2020/foehn-icons/foehn-icon-clock.component.mjs} +5 -8
- package/{esm2015/foehn-icons/foehn-icon-comment-dots.component.js → esm2020/foehn-icons/foehn-icon-comment-dots.component.mjs} +5 -8
- package/{esm2015/foehn-icons/foehn-icon-edit.component.js → esm2020/foehn-icons/foehn-icon-edit.component.mjs} +5 -8
- package/{esm2015/foehn-icons/foehn-icon-external-link-alt.component.js → esm2020/foehn-icons/foehn-icon-external-link-alt.component.mjs} +5 -8
- package/{esm2015/foehn-icons/foehn-icon-file-pdf.component.js → esm2020/foehn-icons/foehn-icon-file-pdf.component.mjs} +5 -8
- package/{esm2015/foehn-icons/foehn-icon-info-circle.component.js → esm2020/foehn-icons/foehn-icon-info-circle.component.mjs} +5 -8
- package/{esm2015/foehn-icons/foehn-icon-lock.component.js → esm2020/foehn-icons/foehn-icon-lock.component.mjs} +5 -8
- package/{esm2015/foehn-icons/foehn-icon-map-marker.component.js → esm2020/foehn-icons/foehn-icon-map-marker.component.mjs} +5 -8
- package/{esm2015/foehn-icons/foehn-icon-minus-circle.component.js → esm2020/foehn-icons/foehn-icon-minus-circle.component.mjs} +5 -8
- package/{esm2015/foehn-icons/foehn-icon-plus-circle.component.js → esm2020/foehn-icons/foehn-icon-plus-circle.component.mjs} +5 -8
- package/{esm2015/foehn-icons/foehn-icon-plus-square.component.js → esm2020/foehn-icons/foehn-icon-plus-square.component.mjs} +5 -8
- package/{esm2015/foehn-icons/foehn-icon-search.component.js → esm2020/foehn-icons/foehn-icon-search.component.mjs} +5 -8
- package/{esm2015/foehn-icons/foehn-icon-times.component.js → esm2020/foehn-icons/foehn-icon-times.component.mjs} +5 -8
- package/{esm2015/foehn-icons/foehn-icon-trash-alt.component.js → esm2020/foehn-icons/foehn-icon-trash-alt.component.mjs} +5 -8
- package/{esm2015/foehn-icons/foehn-icon-unlock-alt.component.js → esm2020/foehn-icons/foehn-icon-unlock-alt.component.mjs} +5 -8
- package/{esm2015/foehn-icons/foehn-icons.module.js → esm2020/foehn-icons/foehn-icons.module.mjs} +4 -4
- package/esm2020/foehn-input/foehn-input-email.component.mjs +50 -0
- package/esm2020/foehn-input/foehn-input-hidden.component.mjs +53 -0
- package/{esm2015/foehn-input/foehn-input-number.component.js → esm2020/foehn-input/foehn-input-number.component.mjs} +10 -15
- package/esm2020/foehn-input/foehn-input-password.component.mjs +50 -0
- package/{esm2015/foehn-input/foehn-input-phone.component.js → esm2020/foehn-input/foehn-input-phone.component.mjs} +6 -11
- package/{esm2015/foehn-input/foehn-input-string.component.js → esm2020/foehn-input/foehn-input-string.component.mjs} +3 -3
- package/{esm2015/foehn-input/foehn-input-text.component.js → esm2020/foehn-input/foehn-input-text.component.mjs} +6 -11
- package/{esm2015/foehn-input/foehn-input-textarea.component.js → esm2020/foehn-input/foehn-input-textarea.component.mjs} +6 -11
- package/{esm2015/foehn-input/foehn-input.component.js → esm2020/foehn-input/foehn-input.component.mjs} +14 -14
- package/{esm2015/foehn-input/foehn-input.module.js → esm2020/foehn-input/foehn-input.module.mjs} +4 -4
- package/{esm2015/foehn-input/pattern.const.js → esm2020/foehn-input/pattern.const.mjs} +0 -0
- package/esm2020/foehn-input-date/foehn-input-date.component.mjs +90 -0
- package/esm2020/foehn-input-time/foehn-input-time.component.mjs +75 -0
- package/esm2020/foehn-list/foehn-list.component.mjs +130 -0
- package/{esm2015/foehn-list/foehn-list.module.js → esm2020/foehn-list/foehn-list.module.mjs} +4 -4
- package/{esm2015/foehn-list/page-change-event.js → esm2020/foehn-list/page-change-event.mjs} +0 -0
- package/esm2020/foehn-menu-prestation/abstract-list-item-detail-page.component.mjs +122 -0
- package/{esm2015/foehn-menu-prestation/abstract-menu-page.component.js → esm2020/foehn-menu-prestation/abstract-menu-page.component.mjs} +3 -3
- package/{esm2015/foehn-menu-prestation/abstract-page-from-menu.component.js → esm2020/foehn-menu-prestation/abstract-page-from-menu.component.mjs} +3 -3
- package/{esm2015/foehn-menu-prestation/foehn-error-pill/foehn-error-pill.component.js → esm2020/foehn-menu-prestation/foehn-error-pill/foehn-error-pill.component.mjs} +5 -8
- package/{esm2015/foehn-menu-prestation/foehn-list-summary/foehn-list-item-description.js → esm2020/foehn-menu-prestation/foehn-list-summary/foehn-list-item-description.mjs} +0 -0
- package/{esm2015/foehn-menu-prestation/foehn-list-summary/foehn-list-item.js → esm2020/foehn-menu-prestation/foehn-list-summary/foehn-list-item.mjs} +0 -0
- package/esm2020/foehn-menu-prestation/foehn-list-summary/foehn-list-summary.component.mjs +71 -0
- package/esm2020/foehn-menu-prestation/foehn-menu-items/foehn-menu-item/foehn-menu-item.component.mjs +35 -0
- package/{esm2015/foehn-menu-prestation/foehn-menu-items/foehn-menu-item-transmit/foehn-menu-item-transmit.component.js → esm2020/foehn-menu-prestation/foehn-menu-items/foehn-menu-item-transmit/foehn-menu-item-transmit.component.mjs} +5 -8
- package/{esm2015/foehn-menu-prestation/foehn-menu-prestation.module.js → esm2020/foehn-menu-prestation/foehn-menu-prestation.module.mjs} +4 -4
- package/{esm2015/foehn-misc/foehn-abbr.component.js → esm2020/foehn-misc/foehn-abbr.component.mjs} +5 -9
- package/{esm2015/foehn-misc/foehn-misc.module.js → esm2020/foehn-misc/foehn-misc.module.mjs} +4 -4
- package/esm2020/foehn-modal/foehn-modal.component.mjs +96 -0
- package/{esm2015/foehn-modal/foehn-modal.module.js → esm2020/foehn-modal/foehn-modal.module.mjs} +4 -4
- package/esm2020/foehn-nav13/foehn-input-nav13.component.mjs +94 -0
- package/{esm2015/foehn-nav13/foehn-input-nav13.module.js → esm2020/foehn-nav13/foehn-input-nav13.module.mjs} +4 -4
- package/esm2020/foehn-navigation/foehn-navigation.component.mjs +94 -0
- package/{esm2015/foehn-navigation/foehn-navigation.module.js → esm2020/foehn-navigation/foehn-navigation.module.mjs} +4 -4
- package/{esm2015/foehn-navigation/foehn-navigation.service.js → esm2020/foehn-navigation/foehn-navigation.service.mjs} +9 -9
- package/{esm2015/foehn-notfound/foehn-notfound.component.js → esm2020/foehn-notfound/foehn-notfound.component.mjs} +5 -8
- package/{esm2015/foehn-notfound/foehn-notfound.module.js → esm2020/foehn-notfound/foehn-notfound.module.mjs} +4 -4
- package/{esm2015/foehn-page/foehn-page-counter.component.js → esm2020/foehn-page/foehn-page-counter.component.mjs} +5 -8
- package/esm2020/foehn-page/foehn-page-modal.component.mjs +52 -0
- package/{esm2015/foehn-page/foehn-page-modal.service.js → esm2020/foehn-page/foehn-page-modal.service.mjs} +3 -3
- package/esm2020/foehn-page/foehn-page.component.mjs +212 -0
- package/{esm2015/foehn-page/foehn-page.module.js → esm2020/foehn-page/foehn-page.module.mjs} +4 -4
- package/{esm2015/foehn-page/foehn-page.service.js → esm2020/foehn-page/foehn-page.service.mjs} +3 -3
- package/{esm2015/foehn-recap-section/foehn-recap-section.component.js → esm2020/foehn-recap-section/foehn-recap-section.component.mjs} +5 -8
- package/{esm2015/foehn-recap-section/foehn-recap-section.module.js → esm2020/foehn-recap-section/foehn-recap-section.module.mjs} +4 -4
- package/{esm2015/foehn-recap-section/foehn-recap-section.type.js → esm2020/foehn-recap-section/foehn-recap-section.type.mjs} +0 -0
- package/{esm2015/foehn-remaining-alerts-summary/foehn-remaining-alerts-summary.component.js → esm2020/foehn-remaining-alerts-summary/foehn-remaining-alerts-summary.component.mjs} +5 -9
- package/{esm2015/foehn-remaining-alerts-summary/foehn-remaining-alerts-summary.module.js → esm2020/foehn-remaining-alerts-summary/foehn-remaining-alerts-summary.module.mjs} +4 -4
- package/{esm2015/foehn-table/foehn-table-column-configuration.js → esm2020/foehn-table/foehn-table-column-configuration.mjs} +0 -0
- package/{esm2015/foehn-table/foehn-table-page-change-event.js → esm2020/foehn-table/foehn-table-page-change-event.mjs} +0 -0
- package/esm2020/foehn-table/foehn-table.component.mjs +149 -0
- package/{esm2015/foehn-table/foehn-table.module.js → esm2020/foehn-table/foehn-table.module.mjs} +4 -4
- package/{esm2015/foehn-table/tableSort.js → esm2020/foehn-table/tableSort.mjs} +0 -0
- package/{esm2015/foehn-upload/abstract-foehn-uploader.component.js → esm2020/foehn-upload/abstract-foehn-uploader.component.mjs} +17 -17
- package/{esm2015/foehn-upload/document-reference.js → esm2020/foehn-upload/document-reference.mjs} +0 -0
- package/{esm2015/foehn-upload/foehn-bo-multi-upload/bo-multi-upload.service.js → esm2020/foehn-upload/foehn-bo-multi-upload/bo-multi-upload.service.mjs} +3 -3
- package/{esm2015/foehn-upload/foehn-bo-multi-upload/bo-multi-upload.type.js → esm2020/foehn-upload/foehn-bo-multi-upload/bo-multi-upload.type.mjs} +0 -0
- package/esm2020/foehn-upload/foehn-bo-multi-upload/foehn-bo-multi-upload.component.mjs +165 -0
- package/{esm2015/foehn-upload/foehn-bo-multi-upload/foehn-bo-multi-upload.module.js → esm2020/foehn-upload/foehn-bo-multi-upload/foehn-bo-multi-upload.module.mjs} +4 -4
- package/esm2020/foehn-upload/foehn-multi-upload/foehn-multi-upload.component.mjs +214 -0
- package/{esm2015/foehn-upload/foehn-multi-upload/foehn-multi-upload.module.js → esm2020/foehn-upload/foehn-multi-upload/foehn-multi-upload.module.mjs} +4 -4
- package/{esm2015/foehn-upload/foehn-multi-upload/multi-upload.service.js → esm2020/foehn-upload/foehn-multi-upload/multi-upload.service.mjs} +3 -3
- package/{esm2015/foehn-upload/foehn-multi-upload/multi-upload.type.js → esm2020/foehn-upload/foehn-multi-upload/multi-upload.type.mjs} +0 -0
- package/{esm2015/foehn-upload/foehn-multi-upload/pending-upload.service.js → esm2020/foehn-upload/foehn-multi-upload/pending-upload.service.mjs} +3 -3
- package/esm2020/foehn-upload/foehn-picture-upload/foehn-picture-upload.component.mjs +163 -0
- package/{esm2015/foehn-upload/foehn-picture-upload/foehn-picture-upload.module.js → esm2020/foehn-upload/foehn-picture-upload/foehn-picture-upload.module.mjs} +4 -4
- package/{esm2015/foehn-upload/pending-upload.type.js → esm2020/foehn-upload/pending-upload.type.mjs} +0 -0
- package/esm2020/foehn-upload/uploader.helper.mjs +326 -0
- package/{esm2015/foehn-user-connected-as/foehn-user-connected-as.component.js → esm2020/foehn-user-connected-as/foehn-user-connected-as.component.mjs} +5 -8
- package/{esm2015/foehn-user-connected-as/foehn-user-connected-as.module.js → esm2020/foehn-user-connected-as/foehn-user-connected-as.module.mjs} +4 -4
- package/{esm2015/foehn-validation-alert-summary/foehn-validation-alert-summary.component.js → esm2020/foehn-validation-alert-summary/foehn-validation-alert-summary.component.mjs} +5 -9
- package/{esm2015/foehn-validation-alert-summary/foehn-validation-alert-summary.module.js → esm2020/foehn-validation-alert-summary/foehn-validation-alert-summary.module.mjs} +4 -4
- package/{esm2015/foehn-validation-alerts/foehn-validation-alerts.component.js → esm2020/foehn-validation-alerts/foehn-validation-alerts.component.mjs} +5 -8
- package/{esm2015/foehn-validation-alerts/foehn-validation-alerts.module.js → esm2020/foehn-validation-alerts/foehn-validation-alerts.module.mjs} +4 -4
- package/{esm2015/gesdem/gesdem-error-handler.service.js → esm2020/gesdem/gesdem-error-handler.service.mjs} +3 -3
- package/{esm2015/gesdem/gesdem-event.service.js → esm2020/gesdem/gesdem-event.service.mjs} +13 -13
- package/{esm2015/gesdem/gesdem-handler.service.js → esm2020/gesdem/gesdem-handler.service.mjs} +13 -13
- package/{esm2015/gesdem/gesdem-loader.guard.js → esm2020/gesdem/gesdem-loader.guard.mjs} +3 -3
- package/{esm2015/gesdem/gesdem-statut-utils.js → esm2020/gesdem/gesdem-statut-utils.mjs} +0 -0
- package/{esm2015/gesdem-action-recovery/gesdem-action-recovery-login/gesdem-action-recovery-login.component.js → esm2020/gesdem-action-recovery/gesdem-action-recovery-login/gesdem-action-recovery-login.component.mjs} +5 -10
- package/esm2020/gesdem-action-recovery/gesdem-action-recovery-registration/gesdem-action-recovery-registration.component.mjs +128 -0
- package/{esm2015/gesdem-action-recovery/gesdem-action-recovery.module.js → esm2020/gesdem-action-recovery/gesdem-action-recovery.module.mjs} +4 -4
- package/{esm2015/gesdem-action-recovery/gesdem-action-recovery.service.js → esm2020/gesdem-action-recovery/gesdem-action-recovery.service.mjs} +3 -3
- package/{esm2015/gesdem-action-recovery/reprise-info.js → esm2020/gesdem-action-recovery/reprise-info.mjs} +0 -0
- package/esm2020/gesdem-confirmation/gesdem-confirmation.component.mjs +189 -0
- package/{esm2015/gesdem-confirmation/gesdem-confirmation.module.js → esm2020/gesdem-confirmation/gesdem-confirmation.module.mjs} +4 -4
- package/{esm2015/gesdem-error/gesdem-error.component.js → esm2020/gesdem-error/gesdem-error.component.mjs} +5 -9
- package/{esm2015/gesdem-error/gesdem-error.module.js → esm2020/gesdem-error/gesdem-error.module.mjs} +4 -4
- package/{esm2015/helpers/object.helper.js → esm2020/helpers/object.helper.mjs} +2 -2
- package/{esm2015/i18n-form.js → esm2020/i18n-form.mjs} +0 -0
- package/{esm2015/index.js → esm2020/index.mjs} +0 -0
- package/{esm2015/pipes/currency.pipe.js → esm2020/pipes/currency.pipe.mjs} +3 -3
- package/{esm2015/pipes/date.pipe.js → esm2020/pipes/date.pipe.mjs} +3 -3
- package/{esm2015/pipes/formatIde.pipe.js → esm2020/pipes/formatIde.pipe.mjs} +3 -3
- package/{esm2015/pipes/pipes.module.js → esm2020/pipes/pipes.module.mjs} +4 -4
- package/{esm2015/prestations-ng-core.module.js → esm2020/prestations-ng-core.module.mjs} +4 -4
- package/{esm2015/sdk-appinfo/application-info.js → esm2020/sdk-appinfo/application-info.mjs} +0 -0
- package/esm2020/sdk-appinfo/application-info.service.mjs +102 -0
- package/{esm2015/sdk-currency/currency.helper.js → esm2020/sdk-currency/currency.helper.mjs} +3 -3
- package/esm2020/sdk-date/date.helper.mjs +91 -0
- package/{esm2015/sdk-dictionary/default-dictionary.js → esm2020/sdk-dictionary/default-dictionary.mjs} +0 -0
- package/{esm2015/sdk-dictionary/sdk-dictionary.module.js → esm2020/sdk-dictionary/sdk-dictionary.module.mjs} +4 -4
- package/{esm2015/sdk-dictionary/sdk-dictionary.pipe.js → esm2020/sdk-dictionary/sdk-dictionary.pipe.mjs} +5 -5
- package/{esm2015/sdk-dictionary/sdk-dictionary.service.js → esm2020/sdk-dictionary/sdk-dictionary.service.mjs} +3 -3
- package/{esm2015/sdk-epayment/model/EPaymentParameters.js → esm2020/sdk-epayment/model/EPaymentParameters.mjs} +0 -0
- package/esm2020/sdk-epayment/sdk-epayment.component.mjs +79 -0
- package/{esm2015/sdk-epayment/sdk-epayment.module.js → esm2020/sdk-epayment/sdk-epayment.module.mjs} +4 -4
- package/esm2020/sdk-epayment/sdk-epayment.service.mjs +51 -0
- package/{esm2015/sdk-recaptcha/grecaptcha/grecaptcha.component.js → esm2020/sdk-recaptcha/grecaptcha/grecaptcha.component.mjs} +5 -9
- package/{esm2015/sdk-recaptcha/recaptcha.service.js → esm2020/sdk-recaptcha/recaptcha.service.mjs} +3 -3
- package/esm2020/sdk-recaptcha/sdk-recaptcha.component.mjs +68 -0
- package/{esm2015/sdk-recaptcha/sdk-recaptcha.module.js → esm2020/sdk-recaptcha/sdk-recaptcha.module.mjs} +4 -4
- package/{esm2015/sdk-redirect/iam-expired-interceptor.service.js → esm2020/sdk-redirect/iam-expired-interceptor.service.mjs} +3 -3
- package/{esm2015/sdk-redirect/redirect.component.js → esm2020/sdk-redirect/redirect.component.mjs} +5 -9
- package/{esm2015/sdk-redirect/sdk-redirect.module.js → esm2020/sdk-redirect/sdk-redirect.module.mjs} +4 -4
- package/{esm2015/sdk-session-info/session-info-data.js → esm2020/sdk-session-info/session-info-data.mjs} +0 -0
- package/{esm2015/sdk-session-info/session-info-with-application.service.js → esm2020/sdk-session-info/session-info-with-application.service.mjs} +3 -3
- package/{esm2015/sdk-session-info/session-info.service.js → esm2020/sdk-session-info/session-info.service.mjs} +7 -7
- package/{esm2015/sdk-support-alert/support-alert-container.component.js → esm2020/sdk-support-alert/support-alert-container.component.mjs} +5 -9
- package/esm2020/sdk-support-alert/support-alert.component.mjs +34 -0
- package/{esm2015/sdk-support-alert/support-alert.model.js → esm2020/sdk-support-alert/support-alert.model.mjs} +0 -0
- package/{esm2015/sdk-support-alert/support-alert.module.js → esm2020/sdk-support-alert/support-alert.module.mjs} +4 -4
- package/{esm2015/sdk-support-alert/support-alert.service.js → esm2020/sdk-support-alert/support-alert.service.mjs} +3 -3
- package/{esm2015/service-locator.js → esm2020/service-locator.mjs} +0 -0
- package/esm2020/supported-browser.mjs +2 -0
- package/{esm2015/validation/validation-handler.service.js → esm2020/validation/validation-handler.service.mjs} +7 -7
- package/fesm2015/{dsivd-prestations-ng.js → dsivd-prestations-ng.mjs} +907 -1260
- package/fesm2015/dsivd-prestations-ng.mjs.map +1 -0
- package/fesm2020/dsivd-prestations-ng.mjs +11481 -0
- package/fesm2020/dsivd-prestations-ng.mjs.map +1 -0
- package/foehn-breadcrumb/breadcrumb-event.service.d.ts +2 -2
- package/foehn-checkables/foehn-checkable-group.component.d.ts +3 -3
- package/foehn-confirm-modal/foehn-confirm-modal.component.d.ts +1 -1
- package/foehn-date-picker/date-picker-navigation.helper.d.ts +1 -1
- package/foehn-date-picker/date-picker.helper.d.ts +1 -1
- package/foehn-date-picker/foehn-date-picker.component.d.ts +3 -3
- package/foehn-date-picker-button/foehn-date-picker-button.component.d.ts +2 -2
- package/foehn-debug-summary/foehn-debug-summary.component.d.ts +1 -1
- package/foehn-growl/foehn-growl.component.d.ts +1 -1
- package/foehn-header/foehn-header.component.d.ts +2 -2
- package/foehn-input/foehn-input-number.component.d.ts +1 -1
- package/foehn-input/foehn-input.component.d.ts +3 -3
- package/foehn-list/foehn-list.component.d.ts +2 -2
- package/foehn-menu-prestation/abstract-list-item-detail-page.component.d.ts +1 -1
- package/foehn-modal/foehn-modal.component.d.ts +1 -1
- package/foehn-navigation/foehn-navigation.service.d.ts +1 -1
- package/foehn-table/foehn-table.component.d.ts +2 -2
- package/foehn-upload/foehn-bo-multi-upload/foehn-bo-multi-upload.component.d.ts +1 -1
- package/foehn-upload/foehn-multi-upload/foehn-multi-upload.component.d.ts +2 -2
- package/foehn-upload/foehn-picture-upload/foehn-picture-upload.component.d.ts +1 -1
- package/foehn-upload/uploader.helper.d.ts +7 -7
- package/gesdem/gesdem-event.service.d.ts +3 -3
- package/gesdem/gesdem-handler.service.d.ts +2 -2
- package/gesdem-action-recovery/gesdem-action-recovery-registration/gesdem-action-recovery-registration.component.d.ts +2 -2
- package/gesdem-confirmation/gesdem-confirmation.component.d.ts +4 -4
- package/package.json +26 -13
- package/schematics/ng-add/index.js +6 -6
- package/schematics/ng-update/migrations/update-13_1_0/index.js +2 -2
- package/schematics/ng-update/migrations/update-13_2_0/index.js +3 -3
- package/schematics/ng-update/migrations/update-13_5_1/index.js +2 -2
- package/schematics/ng-update/migrations/update-14_5_0/index.js +2 -2
- package/schematics/update-karma-config/index.js +2 -2
- package/schematics/utility/migrate-to-karma-coverage.js +3 -3
- package/sdk-appinfo/application-info.service.d.ts +2 -2
- package/sdk-epayment/sdk-epayment.component.d.ts +3 -13
- package/sdk-epayment/sdk-epayment.service.d.ts +2 -5
- package/sdk-session-info/session-info.service.d.ts +1 -1
- package/validation/validation-handler.service.d.ts +1 -1
- package/bundles/dsivd-prestations-ng.umd.js +0 -13435
- package/bundles/dsivd-prestations-ng.umd.js.map +0 -1
- package/dsivd-prestations-ng-v14.5.17-beta1.tgz +0 -0
- package/esm2015/foehn-address/foehn-input-address.component.js +0 -365
- package/esm2015/foehn-address/foehn-input-foreign-locality.component.js +0 -71
- package/esm2015/foehn-autocomplete/foehn-autocomplete.component.js +0 -556
- package/esm2015/foehn-boolean/foehn-boolean-checkbox.component.js +0 -32
- package/esm2015/foehn-boolean/foehn-boolean-radio.component.js +0 -41
- package/esm2015/foehn-checkables/foehn-checkable-group.component.js +0 -294
- package/esm2015/foehn-checkables/foehn-checkbox.component.js +0 -40
- package/esm2015/foehn-checkables/foehn-radio.component.js +0 -67
- package/esm2015/foehn-checkables/foehn-select.component.js +0 -66
- package/esm2015/foehn-confirm-modal/foehn-confirm-modal.component.js +0 -42
- package/esm2015/foehn-date-picker-button/foehn-date-picker-button.component.js +0 -74
- package/esm2015/foehn-decision-electronique/foehn-decision-electronique.component.js +0 -40
- package/esm2015/foehn-footer/foehn-footer.component.js +0 -132
- package/esm2015/foehn-header/foehn-header.component.js +0 -73
- package/esm2015/foehn-input/foehn-input-email.component.js +0 -55
- package/esm2015/foehn-input/foehn-input-hidden.component.js +0 -57
- package/esm2015/foehn-input/foehn-input-password.component.js +0 -55
- package/esm2015/foehn-input-date/foehn-input-date.component.js +0 -94
- package/esm2015/foehn-input-time/foehn-input-time.component.js +0 -79
- package/esm2015/foehn-list/foehn-list.component.js +0 -136
- package/esm2015/foehn-menu-prestation/abstract-list-item-detail-page.component.js +0 -122
- package/esm2015/foehn-menu-prestation/foehn-list-summary/foehn-list-summary.component.js +0 -75
- package/esm2015/foehn-menu-prestation/foehn-menu-items/foehn-menu-item/foehn-menu-item.component.js +0 -38
- package/esm2015/foehn-modal/foehn-modal.component.js +0 -100
- package/esm2015/foehn-nav13/foehn-input-nav13.component.js +0 -98
- package/esm2015/foehn-navigation/foehn-navigation.component.js +0 -98
- package/esm2015/foehn-page/foehn-page-modal.component.js +0 -55
- package/esm2015/foehn-page/foehn-page.component.js +0 -215
- package/esm2015/foehn-table/foehn-table.component.js +0 -153
- package/esm2015/foehn-upload/foehn-bo-multi-upload/foehn-bo-multi-upload.component.js +0 -171
- package/esm2015/foehn-upload/foehn-multi-upload/foehn-multi-upload.component.js +0 -220
- package/esm2015/foehn-upload/foehn-picture-upload/foehn-picture-upload.component.js +0 -167
- package/esm2015/foehn-upload/uploader.helper.js +0 -322
- package/esm2015/gesdem-action-recovery/gesdem-action-recovery-registration/gesdem-action-recovery-registration.component.js +0 -133
- package/esm2015/gesdem-confirmation/gesdem-confirmation.component.js +0 -194
- package/esm2015/sdk-appinfo/application-info.service.js +0 -111
- package/esm2015/sdk-date/date.helper.js +0 -90
- package/esm2015/sdk-epayment/model/EPaymentRequest.js +0 -3
- package/esm2015/sdk-epayment/sdk-epayment.component.js +0 -113
- package/esm2015/sdk-epayment/sdk-epayment.service.js +0 -46
- package/esm2015/sdk-recaptcha/sdk-recaptcha.component.js +0 -72
- package/esm2015/sdk-support-alert/support-alert.component.js +0 -38
- package/esm2015/supported-browser.js +0 -2
- package/fesm2015/dsivd-prestations-ng.js.map +0 -1
- package/sdk-epayment/model/EPaymentRequest.d.ts +0 -5
|
@@ -1,215 +0,0 @@
|
|
|
1
|
-
import { Component, Input } from '@angular/core';
|
|
2
|
-
import { NavigationEnd } from '@angular/router';
|
|
3
|
-
import { combineLatest, merge, of } from 'rxjs';
|
|
4
|
-
import { debounceTime, filter, map } from 'rxjs/operators';
|
|
5
|
-
import { supportedBrowsers } from '../supported-browser';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
import * as i1 from "@angular/platform-browser";
|
|
8
|
-
import * as i2 from "./foehn-page.service";
|
|
9
|
-
import * as i3 from "../sdk-support-alert/support-alert.service";
|
|
10
|
-
import * as i4 from "../foehn-navigation/foehn-navigation.service";
|
|
11
|
-
import * as i5 from "../sdk-appinfo/application-info.service";
|
|
12
|
-
import * as i6 from "../gesdem/gesdem-event.service";
|
|
13
|
-
import * as i7 from "../foehn-breadcrumb/breadcrumb-event.service";
|
|
14
|
-
import * as i8 from "@angular/router";
|
|
15
|
-
import * as i9 from "../sdk-session-info/session-info.service";
|
|
16
|
-
import * as i10 from "../foehn-page/foehn-page-modal.service";
|
|
17
|
-
import * as i11 from "../sdk-dictionary/sdk-dictionary.service";
|
|
18
|
-
import * as i12 from "../foehn-header/foehn-header.component";
|
|
19
|
-
import * as i13 from "../foehn-growl/foehn-growl.component";
|
|
20
|
-
import * as i14 from "../foehn-breadcrumb/foehn-breadcrumb.component";
|
|
21
|
-
import * as i15 from "../foehn-icons/foehn-icon-external-link-alt.component";
|
|
22
|
-
import * as i16 from "../sdk-support-alert/support-alert-container.component";
|
|
23
|
-
import * as i17 from "../foehn-user-connected-as/foehn-user-connected-as.component";
|
|
24
|
-
import * as i18 from "../foehn-footer/foehn-footer.component";
|
|
25
|
-
import * as i19 from "./foehn-page-modal.component";
|
|
26
|
-
import * as i20 from "../foehn-confirm-modal/foehn-confirm-modal.component";
|
|
27
|
-
import * as i21 from "@angular/common";
|
|
28
|
-
import * as i22 from "../sdk-dictionary/sdk-dictionary.pipe";
|
|
29
|
-
const LEAVING_ALERT_CONTENT = 'Ce changement de page entraine une perte des données non sauvegardées.<br/>Souhaitez-vous quand même continuer ?';
|
|
30
|
-
const LEAVING_ALERT_OK = 'Poursuivre sans sauvegarder';
|
|
31
|
-
const LEAVING_ALERT_CANCEL = 'Retourner à la prestation';
|
|
32
|
-
export class FoehnPageComponent {
|
|
33
|
-
constructor(_titleService, foehnPageService, supportAlertService, foehnNavigationService, applicationInfoService, gesdemEventService, breadcrumbService, router, sessionInfo, foehnPageModalService, sdkDictionaryService) {
|
|
34
|
-
this._titleService = _titleService;
|
|
35
|
-
this.foehnPageService = foehnPageService;
|
|
36
|
-
this.supportAlertService = supportAlertService;
|
|
37
|
-
this.foehnNavigationService = foehnNavigationService;
|
|
38
|
-
this.applicationInfoService = applicationInfoService;
|
|
39
|
-
this.gesdemEventService = gesdemEventService;
|
|
40
|
-
this.breadcrumbService = breadcrumbService;
|
|
41
|
-
this.router = router;
|
|
42
|
-
this.sessionInfo = sessionInfo;
|
|
43
|
-
this.foehnPageModalService = foehnPageModalService;
|
|
44
|
-
this.sdkDictionaryService = sdkDictionaryService;
|
|
45
|
-
this.neverConnected = false;
|
|
46
|
-
this.supportAlertEnabled = true;
|
|
47
|
-
this.userConnectedAsDisplayed = true;
|
|
48
|
-
this.confirmLeavingAlert = {
|
|
49
|
-
htmlContent: LEAVING_ALERT_CONTENT,
|
|
50
|
-
okButtonLabel: LEAVING_ALERT_OK,
|
|
51
|
-
cancelButtonLabel: LEAVING_ALERT_CANCEL
|
|
52
|
-
};
|
|
53
|
-
/**
|
|
54
|
-
* If set to 'false', hide the default Contact link in the footer.
|
|
55
|
-
*/
|
|
56
|
-
this.showDefaultContactFooterLink = true;
|
|
57
|
-
/**
|
|
58
|
-
* If set to 'false', hide the default Guide link in the footer.
|
|
59
|
-
*/
|
|
60
|
-
this.showDefaultGuideFooterLink = true;
|
|
61
|
-
/**
|
|
62
|
-
* If set to 'false', hide the default Terms of use link.
|
|
63
|
-
*/
|
|
64
|
-
this.showDefaultTermOfUseLink = true;
|
|
65
|
-
/**
|
|
66
|
-
* If set to 'false', hide the default Security Best Practice link.
|
|
67
|
-
*/
|
|
68
|
-
this.showDefaultSecurityBestPracticeLink = true;
|
|
69
|
-
this.browserLinkTitlePrefix = 'Lien pour le téléchargement du navigateur internet';
|
|
70
|
-
this.browserNotSupportedBypass = false;
|
|
71
|
-
this.hasBlockingSupportAlert = supportAlertService.getHasAtLeastOneBlockingAlert();
|
|
72
|
-
this.blockedSubscription = combineLatest([
|
|
73
|
-
this.foehnPageService.foehnPageObservable(),
|
|
74
|
-
// Ensures there is at least one value in the observable.
|
|
75
|
-
merge(of(false), this.hasBlockingSupportAlert)
|
|
76
|
-
]).subscribe(([title, blocked]) => {
|
|
77
|
-
if (blocked) {
|
|
78
|
-
this.setPageTitle('Prestation indisponible');
|
|
79
|
-
}
|
|
80
|
-
else if (title) {
|
|
81
|
-
this.setPageTitle(title);
|
|
82
|
-
}
|
|
83
|
-
});
|
|
84
|
-
this.isBrowserSupported = supportedBrowsers.test(navigator.userAgent);
|
|
85
|
-
this.isApplePlatform = /(Mac|iPhone|iPod|iPad)/i.test(navigator.platform);
|
|
86
|
-
}
|
|
87
|
-
ngOnInit() {
|
|
88
|
-
if (!this.isBrowserSupported) {
|
|
89
|
-
const pageTitle = 'Navigateur non supporté';
|
|
90
|
-
this.foehnPageService.setPageTitle(pageTitle);
|
|
91
|
-
this.breadcrumbService.setCurrentBreadcrumb({
|
|
92
|
-
url: null,
|
|
93
|
-
routerLink: null,
|
|
94
|
-
label: pageTitle
|
|
95
|
-
});
|
|
96
|
-
}
|
|
97
|
-
const isInitialStep = this.applicationInfoService.currentEtapeInfo.pipe(map((currentEtapeInfo) => currentEtapeInfo &&
|
|
98
|
-
currentEtapeInfo.idMetierEtape ===
|
|
99
|
-
currentEtapeInfo.idMetierPrestation));
|
|
100
|
-
// const navigationUpdate: Observable<any> = of (true)
|
|
101
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
102
|
-
const navigationUpdate = this.router.events.pipe(filter(event => event instanceof NavigationEnd));
|
|
103
|
-
// Ensures there is at least one value in the observable.
|
|
104
|
-
const navigationAndInit = merge(of(true), navigationUpdate);
|
|
105
|
-
const formTransmitted = merge(of(undefined), this.gesdemEventService.formTransmittedObservable());
|
|
106
|
-
this.displayUserCategory = combineLatest([
|
|
107
|
-
isInitialStep,
|
|
108
|
-
this.foehnNavigationService.hasBeenInitialized(),
|
|
109
|
-
formTransmitted,
|
|
110
|
-
navigationAndInit
|
|
111
|
-
]).pipe(debounceTime(0), // without debounceTime, the outcome is less effective...
|
|
112
|
-
map(([initialStep, navServiceInitialized, backendResponse]) => {
|
|
113
|
-
if (navServiceInitialized) {
|
|
114
|
-
const isFirstPage = this.foehnNavigationService.isFirstFormPage();
|
|
115
|
-
const isLastPage = this.foehnNavigationService.isLastFormPage();
|
|
116
|
-
const isCurrentRouteDefined = this.foehnNavigationService.getCurrentRouteIndex() !==
|
|
117
|
-
null;
|
|
118
|
-
return this.foehnPageService.isUserCategoryVisible(isFirstPage, isLastPage, this.userConnectedAsDisplayed, initialStep, this.neverConnected, backendResponse, isCurrentRouteDefined);
|
|
119
|
-
}
|
|
120
|
-
return false;
|
|
121
|
-
}));
|
|
122
|
-
const formInitializationObservable = merge(of(undefined), this.gesdemEventService.formInitializationObservable());
|
|
123
|
-
if (this.neverConnected) {
|
|
124
|
-
this.displayLoginMessages = of(new DisplayLoginMessagesData(false, false));
|
|
125
|
-
}
|
|
126
|
-
else {
|
|
127
|
-
this.displayLoginMessages = combineLatest([
|
|
128
|
-
formInitializationObservable,
|
|
129
|
-
this.sessionInfo.data,
|
|
130
|
-
this.applicationInfoService.currentEtapeInfo
|
|
131
|
-
]).pipe(debounceTime(0), // without debounceTime, the outcome is less effective...
|
|
132
|
-
map(([formInitialization, sessionInfoData, currentEtapeInfo]) => {
|
|
133
|
-
const isConnectedCyberOrIam = !!sessionInfoData;
|
|
134
|
-
const isLastPage = this.foehnNavigationService.isLastFormPage();
|
|
135
|
-
if (isConnectedCyberOrIam ||
|
|
136
|
-
!currentEtapeInfo.deployeeCyber ||
|
|
137
|
-
!!formInitialization ||
|
|
138
|
-
isLastPage) {
|
|
139
|
-
return new DisplayLoginMessagesData(false, false);
|
|
140
|
-
}
|
|
141
|
-
return new DisplayLoginMessagesData(currentEtapeInfo === null || currentEtapeInfo === void 0 ? void 0 : currentEtapeInfo.decisionElectroniqueAvailable, true);
|
|
142
|
-
}));
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
ngOnChanges(changes) {
|
|
146
|
-
const etapeIdChange = changes.etapeId;
|
|
147
|
-
if (etapeIdChange && etapeIdChange.currentValue) {
|
|
148
|
-
this.foehnPageService.setCurrentEtapeId(etapeIdChange.currentValue);
|
|
149
|
-
}
|
|
150
|
-
const appTitleChange = changes.appTitle;
|
|
151
|
-
if (appTitleChange) {
|
|
152
|
-
this._titleService.setTitle(appTitleChange.currentValue);
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
ngOnDestroy() {
|
|
156
|
-
if (this.blockedSubscription) {
|
|
157
|
-
this.blockedSubscription.unsubscribe();
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
getFullLoginUrl() {
|
|
161
|
-
return this.foehnPageModalService.buildSelfRedirectionThroughCyberLogin();
|
|
162
|
-
}
|
|
163
|
-
getFullLoginMessage(decisionElectroniqueAvailable) {
|
|
164
|
-
if (decisionElectroniqueAvailable) {
|
|
165
|
-
return combineLatest([
|
|
166
|
-
this.sdkDictionaryService.getKey('use-login.text'),
|
|
167
|
-
this.sdkDictionaryService.getKey('use-login.text.decision-electronique-available')
|
|
168
|
-
]).pipe(map(([loginMsg, decisionElectroniqueAvailableMsg]) => `${loginMsg}<br/><br/>${decisionElectroniqueAvailableMsg}`));
|
|
169
|
-
}
|
|
170
|
-
return this.sdkDictionaryService.getKey('use-login.text');
|
|
171
|
-
}
|
|
172
|
-
setPageTitle(title) {
|
|
173
|
-
this.pageTitle = title;
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
FoehnPageComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: FoehnPageComponent, deps: [{ token: i1.Title }, { token: i2.FoehnPageService }, { token: i3.SupportAlertService }, { token: i4.FoehnNavigationService }, { token: i5.ApplicationInfoService }, { token: i6.GesdemEventService }, { token: i7.BreadcrumbEventService }, { token: i8.Router }, { token: i9.SessionInfo }, { token: i10.FoehnPageModalService }, { token: i11.SdkDictionaryService }], target: i0.ɵɵFactoryTarget.Component });
|
|
177
|
-
FoehnPageComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.4", type: FoehnPageComponent, selector: "foehn-page", inputs: { appTitle: "appTitle", footerLinks: "footerLinks", neverConnected: "neverConnected", supportAlertEnabled: "supportAlertEnabled", supportAlertUrl: "supportAlertUrl", etapeId: "etapeId", userConnectedAsDisplayed: "userConnectedAsDisplayed", confirmLeavingAlert: "confirmLeavingAlert", showDefaultContactFooterLink: "showDefaultContactFooterLink", showDefaultGuideFooterLink: "showDefaultGuideFooterLink", showDefaultTermOfUseLink: "showDefaultTermOfUseLink", showDefaultSecurityBestPracticeLink: "showDefaultSecurityBestPracticeLink" }, usesOnChanges: true, ngImport: i0, template: "<foehn-header\n id=\"foehn_header\"\n [title]=\"appTitle\"\n [neverConnected]=\"neverConnected\"\n></foehn-header>\n<foehn-growl id=\"foehn_growl\"></foehn-growl>\n<div class=\"vd-bg-pattern-gray\">\n <div class=\"container\">\n <foehn-breadcrumb\n [neverConnected]=\"neverConnected\"\n [confirmLeavingAlert]=\"confirmLeavingAlert\"\n ></foehn-breadcrumb>\n </div>\n</div>\n<main id=\"main\">\n <div class=\"vd-bg-pattern-gray\">\n <div class=\"container\">\n <!-- Fix annoying flickering when the page loads -->\n <div class=\"h1 mt-0\" *ngIf=\"!pageTitle\"> </div>\n <h1\n [tabIndex]=\"-1\"\n class=\"mt-0\"\n id=\"page-title\"\n *ngIf=\"!!pageTitle\"\n [innerHTML]=\"pageTitle\"\n ></h1>\n </div>\n </div>\n\n <section\n *ngIf=\"!isBrowserSupported\"\n class=\"container alert alert-danger\"\n id=\"browser_not_supported_block\"\n role=\"alert\"\n >\n <p class=\"alert-heading\">\n <strong>\n Cette prestation n\u2019est pas compatible avec votre navigateur.\n </strong>\n </p>\n <p class=\"mb-0\">\n Nous vous invitons \u00E0 utiliser une version r\u00E9cente de\n <ng-container *ngIf=\"!isApplePlatform\">\n <a\n [title]=\"browserLinkTitlePrefix + ' Edge'\"\n href=\"https://www.microsoft.com/fr-ch/windows/microsoft-edge\"\n target=\"_blank\"\n >\n Edge\n <span class=\"sr-only\">(lien externe)</span>\n <span aria-hidden=\"true\">\n <foehn-icon-external-link-alt></foehn-icon-external-link-alt>\n </span>\n </a>\n ,\n </ng-container>\n <ng-container *ngIf=\"isApplePlatform\">\n <a\n [title]=\"browserLinkTitlePrefix + ' Safari'\"\n href=\"https://support.apple.com/downloads/safari\"\n target=\"_blank\"\n >\n Safari\n <span class=\"sr-only\">(lien externe)</span>\n <span aria-hidden=\"true\">\n <foehn-icon-external-link-alt></foehn-icon-external-link-alt>\n </span>\n </a>\n ,\n </ng-container>\n <a\n [title]=\"browserLinkTitlePrefix + ' Firefox'\"\n href=\"https://www.mozilla.org/fr/firefox/\"\n target=\"_blank\"\n >\n Firefox\n <span class=\"sr-only\">(lien externe)</span>\n <span aria-hidden=\"true\">\n <foehn-icon-external-link-alt></foehn-icon-external-link-alt>\n </span>\n </a>\n ou\n <a\n [title]=\"browserLinkTitlePrefix + ' Chrome'\"\n href=\"https://www.google.com/intl/fr/chrome/\"\n target=\"_blank\"\n >\n Chrome\n <span class=\"sr-only\">(lien externe)</span>\n <span aria-hidden=\"true\">\n <foehn-icon-external-link-alt></foehn-icon-external-link-alt>\n </span>\n </a>\n .\n </p>\n <div class=\"row mt-3\">\n <div class=\"col-md-12\">\n <button\n id=\"browser_not_supported_bypass\"\n class=\"float-right btn btn-danger\"\n *ngIf=\"!browserNotSupportedBypass\"\n (click)=\"browserNotSupportedBypass = true\"\n >\n Continuer avec ce navigateur\n </button>\n </div>\n </div>\n </section>\n\n <sdk-support-alert-container\n *ngIf=\"supportAlertEnabled\"\n [etapeId]=\"etapeId\"\n [supportAlertUrl]=\"supportAlertUrl\"\n ></sdk-support-alert-container>\n <ng-container\n *ngIf=\"\n !(hasBlockingSupportAlert | async) &&\n (isBrowserSupported || browserNotSupportedBypass)\n \"\n >\n <div class=\"container mt-5\" id=\"page_content\">\n <foehn-user-connected-as\n *ngIf=\"displayUserCategory | async\"\n ></foehn-user-connected-as>\n <ng-container\n *ngIf=\"displayLoginMessages | async as displayLoginMessagesData\"\n >\n <div\n *ngIf=\"displayLoginMessagesData.displayShouldLoginMessage\"\n class=\"alert alert-info\"\n id=\"displayLoginMessage\"\n >\n <p\n [innerHTML]=\"\n getFullLoginMessage(\n displayLoginMessagesData.decisionElectroniqueAvailable\n ) | async\n \"\n ></p>\n <div class=\"d-flex justify-content-start mr-2 mb-2 mt-2\">\n <a\n class=\"btn btn-primary\"\n [href]=\"getFullLoginUrl() | async\"\n >\n {{ 'use-login.button.text' | fromDictionary }}\n </a>\n </div>\n </div>\n </ng-container>\n </div>\n <ng-content></ng-content>\n </ng-container>\n</main>\n<foehn-footer\n id=\"foehn_footer\"\n [links]=\"footerLinks\"\n [showDefaultContactLink]=\"showDefaultContactFooterLink\"\n [showDefaultGuideLink]=\"showDefaultGuideFooterLink\"\n [showDefaultTermOfUseLink]=\"showDefaultTermOfUseLink\"\n [showDefaultSecurityBestPracticeLink]=\"showDefaultSecurityBestPracticeLink\"\n></foehn-footer>\n<foehn-page-modal></foehn-page-modal>\n<foehn-confirm-modal></foehn-confirm-modal>\n", components: [{ type: i12.FoehnHeaderComponent, selector: "foehn-header", inputs: ["userInfo", "title", "neverConnected"] }, { type: i13.FoehnGrowlComponent, selector: "foehn-growl" }, { type: i14.FoehnBreadcrumbComponent, selector: "foehn-breadcrumb", inputs: ["breadcrumbItems", "currentNav", "neverConnected", "confirmLeavingAlert"] }, { type: i15.FoehnIconExternalLinkAltComponent, selector: "foehn-icon-external-link-alt" }, { type: i16.SupportAlertContainerComponent, selector: "sdk-support-alert-container", inputs: ["etapeId", "supportAlertUrl"] }, { type: i17.FoehnUserConnectedAsComponent, selector: "foehn-user-connected-as" }, { type: i18.FoehnFooterComponent, selector: "foehn-footer", inputs: ["links", "showDefaultContactLink", "showDefaultGuideLink", "showDefaultTermOfUseLink", "showDefaultSecurityBestPracticeLink"] }, { type: i19.FoehnPageModalComponent, selector: "foehn-page-modal" }, { type: i20.FoehnConfirmModalComponent, selector: "foehn-confirm-modal" }], directives: [{ type: i21.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "async": i21.AsyncPipe, "fromDictionary": i22.SdkDictionaryPipe } });
|
|
178
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: FoehnPageComponent, decorators: [{
|
|
179
|
-
type: Component,
|
|
180
|
-
args: [{
|
|
181
|
-
selector: 'foehn-page',
|
|
182
|
-
templateUrl: './foehn-page.component.html'
|
|
183
|
-
}]
|
|
184
|
-
}], ctorParameters: function () { return [{ type: i1.Title }, { type: i2.FoehnPageService }, { type: i3.SupportAlertService }, { type: i4.FoehnNavigationService }, { type: i5.ApplicationInfoService }, { type: i6.GesdemEventService }, { type: i7.BreadcrumbEventService }, { type: i8.Router }, { type: i9.SessionInfo }, { type: i10.FoehnPageModalService }, { type: i11.SdkDictionaryService }]; }, propDecorators: { appTitle: [{
|
|
185
|
-
type: Input
|
|
186
|
-
}], footerLinks: [{
|
|
187
|
-
type: Input
|
|
188
|
-
}], neverConnected: [{
|
|
189
|
-
type: Input
|
|
190
|
-
}], supportAlertEnabled: [{
|
|
191
|
-
type: Input
|
|
192
|
-
}], supportAlertUrl: [{
|
|
193
|
-
type: Input
|
|
194
|
-
}], etapeId: [{
|
|
195
|
-
type: Input
|
|
196
|
-
}], userConnectedAsDisplayed: [{
|
|
197
|
-
type: Input
|
|
198
|
-
}], confirmLeavingAlert: [{
|
|
199
|
-
type: Input
|
|
200
|
-
}], showDefaultContactFooterLink: [{
|
|
201
|
-
type: Input
|
|
202
|
-
}], showDefaultGuideFooterLink: [{
|
|
203
|
-
type: Input
|
|
204
|
-
}], showDefaultTermOfUseLink: [{
|
|
205
|
-
type: Input
|
|
206
|
-
}], showDefaultSecurityBestPracticeLink: [{
|
|
207
|
-
type: Input
|
|
208
|
-
}] } });
|
|
209
|
-
export class DisplayLoginMessagesData {
|
|
210
|
-
constructor(decisionElectroniqueAvailable, displayShouldLoginMessage) {
|
|
211
|
-
this.decisionElectroniqueAvailable = decisionElectroniqueAvailable;
|
|
212
|
-
this.displayShouldLoginMessage = displayShouldLoginMessage;
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9laG4tcGFnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9wcmVzdGF0aW9ucy1uZy9zcmMvZm9laG4tcGFnZS9mb2Vobi1wYWdlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL3ByZXN0YXRpb25zLW5nL3NyYy9mb2Vobi1wYWdlL2ZvZWhuLXBhZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxLQUFLLEVBS1IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBVSxNQUFNLGlCQUFpQixDQUFDO0FBS3hELE9BQU8sRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFjLEVBQUUsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFHMUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFLM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUt6RCxNQUFNLHFCQUFxQixHQUN2QixrSEFBa0gsQ0FBQztBQUN2SCxNQUFNLGdCQUFnQixHQUFHLDZCQUE2QixDQUFDO0FBQ3ZELE1BQU0sb0JBQW9CLEdBQUcsMkJBQTJCLENBQUM7QUFNekQsTUFBTSxPQUFPLGtCQUFrQjtJQXdFM0IsWUFDWSxhQUFvQixFQUNwQixnQkFBa0MsRUFDbEMsbUJBQXdDLEVBQ3hDLHNCQUE4QyxFQUM5QyxzQkFBOEMsRUFDOUMsa0JBQXNDLEVBQ3RDLGlCQUF5QyxFQUN6QyxNQUFjLEVBQ2QsV0FBd0IsRUFDeEIscUJBQTRDLEVBQzVDLG9CQUEwQztRQVYxQyxrQkFBYSxHQUFiLGFBQWEsQ0FBTztRQUNwQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FB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QTsyRkRoSWEsa0JBQWtCO2tCQUo5QixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxZQUFZO29CQUN0QixXQUFXLEVBQUUsNkJBQTZCO2lCQUM3QztxYUFHRyxRQUFRO3NCQURQLEtBQUs7Z0JBSU4sV0FBVztzQkFEVixLQUFLO2dCQUlOLGNBQWM7c0JBRGIsS0FBSztnQkFJTixtQkFBbUI7c0JBRGxCLEtBQUs7Z0JBSU4sZUFBZTtzQkFEZCxLQUFLO2dCQUlOLE9BQU87c0JBRE4sS0FBSztnQkFJTix3QkFBd0I7c0JBRHZCLEtBQUs7Z0JBSU4sbUJBQW1CO3NCQURsQixLQUFLO2dCQVdOLDRCQUE0QjtzQkFEM0IsS0FBSztnQkFPTiwwQkFBMEI7c0JBRHpCLEtBQUs7Z0JBT04sd0JBQXdCO3NCQUR2QixLQUFLO2dCQU9OLG1DQUFtQztzQkFEbEMsS0FBSzs7QUE0TVYsTUFBTSxPQUFPLHdCQUF3QjtJQUlqQyxZQUNJLDZCQUFzQyxFQUN0Qyx5QkFBa0M7UUFFbEMsSUFBSSxDQUFDLDZCQUE2QixHQUFHLDZCQUE2QixDQUFDO1FBQ25FLElBQUksQ0FBQyx5QkFBeUIsR0FBRyx5QkFBeUIsQ0FBQztJQUMvRCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBTaW1wbGVDaGFuZ2VzXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmF2aWdhdGlvbkVuZCwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEZvb3RlckxpbmsgfSBmcm9tICcuLi9mb2Vobi1mb290ZXIvZm9vdGVyLWxpbmsudHlwZSc7XG5pbXBvcnQgeyBUaXRsZSB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgRm9laG5QYWdlU2VydmljZSB9IGZyb20gJy4vZm9laG4tcGFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IFN1cHBvcnRBbGVydFNlcnZpY2UgfSBmcm9tICcuLi9zZGstc3VwcG9ydC1hbGVydC9zdXBwb3J0LWFsZXJ0LnNlcnZpY2UnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgbWVyZ2UsIE9ic2VydmFibGUsIG9mLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEZvZWhuTmF2aWdhdGlvblNlcnZpY2UgfSBmcm9tICcuLi9mb2Vobi1uYXZpZ2F0aW9uL2ZvZWhuLW5hdmlnYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBBcHBsaWNhdGlvbkluZm9TZXJ2aWNlIH0gZnJvbSAnLi4vc2RrLWFwcGluZm8vYXBwbGljYXRpb24taW5mby5zZXJ2aWNlJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZmlsdGVyLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBFdGFwZUluZm8gfSBmcm9tICcuLi9zZGstYXBwaW5mby9hcHBsaWNhdGlvbi1pbmZvJztcbmltcG9ydCB7IEdlc2RlbUV2ZW50U2VydmljZSB9IGZyb20gJy4uL2dlc2RlbS9nZXNkZW0tZXZlbnQuc2VydmljZSc7XG5pbXBvcnQgeyBGb2VobkNvbmZpcm1Nb2RhbENvbnRlbnQgfSBmcm9tICcuLi9mb2Vobi1jb25maXJtLW1vZGFsL2ZvZWhuLWNvbmZpcm0tbW9kYWwtY29udGVudCc7XG5pbXBvcnQgeyBCcmVhZGNydW1iRXZlbnRTZXJ2aWNlIH0gZnJvbSAnLi4vZm9laG4tYnJlYWRjcnVtYi9icmVhZGNydW1iLWV2ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgc3VwcG9ydGVkQnJvd3NlcnMgfSBmcm9tICcuLi9zdXBwb3J0ZWQtYnJvd3Nlcic7XG5pbXBvcnQgeyBTZXNzaW9uSW5mbyB9IGZyb20gJy4uL3Nkay1zZXNzaW9uLWluZm8vc2Vzc2lvbi1pbmZvLnNlcnZpY2UnO1xuaW1wb3J0IHsgRm9laG5QYWdlTW9kYWxTZXJ2aWNlIH0gZnJvbSAnLi4vZm9laG4tcGFnZS9mb2Vobi1wYWdlLW1vZGFsLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2RrRGljdGlvbmFyeVNlcnZpY2UgfSBmcm9tICcuLi9zZGstZGljdGlvbmFyeS9zZGstZGljdGlvbmFyeS5zZXJ2aWNlJztcblxuY29uc3QgTEVBVklOR19BTEVSVF9DT05URU5UID1cbiAgICAnQ2UgY2hhbmdlbWVudCBkZSBwYWdlIGVudHJhaW5lIHVuZSBwZXJ0ZSBkZXMgZG9ubsOpZXMgbm9uIHNhdXZlZ2FyZMOpZXMuPGJyLz5Tb3VoYWl0ZXotdm91cyBxdWFuZCBtw6ptZSBjb250aW51ZXIgPyc7XG5jb25zdCBMRUFWSU5HX0FMRVJUX09LID0gJ1BvdXJzdWl2cmUgc2FucyBzYXV2ZWdhcmRlcic7XG5jb25zdCBMRUFWSU5HX0FMRVJUX0NBTkNFTCA9ICdSZXRvdXJuZXIgw6AgbGEgcHJlc3RhdGlvbic7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZm9laG4tcGFnZScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2ZvZWhuLXBhZ2UuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEZvZWhuUGFnZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSwgT25DaGFuZ2VzLCBPbkluaXQge1xuICAgIEBJbnB1dCgpXG4gICAgYXBwVGl0bGU6IHN0cmluZztcblxuICAgIEBJbnB1dCgpXG4gICAgZm9vdGVyTGlua3M6IEZvb3RlckxpbmtbXTtcblxuICAgIEBJbnB1dCgpXG4gICAgbmV2ZXJDb25uZWN0ZWQgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgc3VwcG9ydEFsZXJ0RW5hYmxlZCA9IHRydWU7XG5cbiAgICBASW5wdXQoKVxuICAgIHN1cHBvcnRBbGVydFVybDogc3RyaW5nO1xuXG4gICAgQElucHV0KClcbiAgICBldGFwZUlkOiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKVxuICAgIHVzZXJDb25uZWN0ZWRBc0Rpc3BsYXllZCA9IHRydWU7XG5cbiAgICBASW5wdXQoKVxuICAgIGNvbmZpcm1MZWF2aW5nQWxlcnQ6IEZvZWhuQ29uZmlybU1vZGFsQ29udGVudCA9IHtcbiAgICAgICAgaHRtbENvbnRlbnQ6IExFQVZJTkdfQUxFUlRfQ09OVEVOVCxcbiAgICAgICAgb2tCdXR0b25MYWJlbDogTEVBVklOR19BTEVSVF9PSyxcbiAgICAgICAgY2FuY2VsQnV0dG9uTGFiZWw6IExFQVZJTkdfQUxFUlRfQ0FOQ0VMXG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIElmIHNldCB0byAnZmFsc2UnLCBoaWRlIHRoZSBkZWZhdWx0IENvbnRhY3QgbGluayBpbiB0aGUgZm9vdGVyLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd0RlZmF1bHRDb250YWN0Rm9vdGVyTGluayA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBJZiBzZXQgdG8gJ2ZhbHNlJywgaGlkZSB0aGUgZGVmYXVsdCBHdWlkZSBsaW5rIGluIHRoZSBmb290ZXIuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzaG93RGVmYXVsdEd1aWRlRm9vdGVyTGluayA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBJZiBzZXQgdG8gJ2ZhbHNlJywgaGlkZSB0aGUgZGVmYXVsdCBUZXJtcyBvZiB1c2UgbGluay5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNob3dEZWZhdWx0VGVybU9mVXNlTGluayA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBJZiBzZXQgdG8gJ2ZhbHNlJywgaGlkZSB0aGUgZGVmYXVsdCBTZWN1cml0eSBCZXN0IFByYWN0aWNlIGxpbmsuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzaG93RGVmYXVsdFNlY3VyaXR5QmVzdFByYWN0aWNlTGluayA9IHRydWU7XG5cbiAgICBwYWdlVGl0bGU6IHN0cmluZztcblxuICAgIGhhc0Jsb2NraW5nU3VwcG9ydEFsZXJ0OiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuXG4gICAgZGlzcGxheVVzZXJDYXRlZ29yeTogT2JzZXJ2YWJsZTxib29sZWFuPjtcblxuICAgIGRpc3BsYXlMb2dpbk1lc3NhZ2VzOiBPYnNlcnZhYmxlPERpc3BsYXlMb2dpbk1lc3NhZ2VzRGF0YT47XG5cbiAgICBpc0Jyb3dzZXJTdXBwb3J0ZWQ6IGJvb2xlYW47XG5cbiAgICBpc0FwcGxlUGxhdGZvcm06IGJvb2xlYW47XG5cbiAgICBicm93c2VyTGlua1RpdGxlUHJlZml4ID1cbiAgICAgICAgJ0xpZW4gcG91ciBsZSB0w6lsw6ljaGFyZ2VtZW50IGR1IG5hdmlnYXRldXIgaW50ZXJuZXQnO1xuXG4gICAgYnJvd3Nlck5vdFN1cHBvcnRlZEJ5cGFzcyA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBibG9ja2VkU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfdGl0bGVTZXJ2aWNlOiBUaXRsZSxcbiAgICAgICAgcHJpdmF0ZSBmb2VoblBhZ2VTZXJ2aWNlOiBGb2VoblBhZ2VTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHN1cHBvcnRBbGVydFNlcnZpY2U6IFN1cHBvcnRBbGVydFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZm9laG5OYXZpZ2F0aW9uU2VydmljZTogRm9laG5OYXZpZ2F0aW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBhcHBsaWNhdGlvbkluZm9TZXJ2aWNlOiBBcHBsaWNhdGlvbkluZm9TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGdlc2RlbUV2ZW50U2VydmljZTogR2VzZGVtRXZlbnRTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGJyZWFkY3J1bWJTZXJ2aWNlOiBCcmVhZGNydW1iRXZlbnRTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgICAgICBwcml2YXRlIHNlc3Npb25JbmZvOiBTZXNzaW9uSW5mbyxcbiAgICAgICAgcHJpdmF0ZSBmb2VoblBhZ2VNb2RhbFNlcnZpY2U6IEZvZWhuUGFnZU1vZGFsU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBzZGtEaWN0aW9uYXJ5U2VydmljZTogU2RrRGljdGlvbmFyeVNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgdGhpcy5oYXNCbG9ja2luZ1N1cHBvcnRBbGVydCA9IHN1cHBvcnRBbGVydFNlcnZpY2UuZ2V0SGFzQXRMZWFzdE9uZUJsb2NraW5nQWxlcnQoKTtcblxuICAgICAgICB0aGlzLmJsb2NrZWRTdWJzY3JpcHRpb24gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICAgIHRoaXMuZm9laG5QYWdlU2VydmljZS5mb2VoblBhZ2VPYnNlcnZhYmxlKCksXG4gICAgICAgICAgICAvLyBFbnN1cmVzIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSB2YWx1ZSBpbiB0aGUgb2JzZXJ2YWJsZS5cbiAgICAgICAgICAgIG1lcmdlKG9mKGZhbHNlKSwgdGhpcy5oYXNCbG9ja2luZ1N1cHBvcnRBbGVydClcbiAgICAgICAgXSkuc3Vic2NyaWJlKChbdGl0bGUsIGJsb2NrZWRdKSA9PiB7XG4gICAgICAgICAgICBpZiAoYmxvY2tlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0UGFnZVRpdGxlKCdQcmVzdGF0aW9uIGluZGlzcG9uaWJsZScpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aXRsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0UGFnZVRpdGxlKHRpdGxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuaXNCcm93c2VyU3VwcG9ydGVkID0gc3VwcG9ydGVkQnJvd3NlcnMudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgICAgICAgdGhpcy5pc0FwcGxlUGxhdGZvcm0gPSAvKE1hY3xpUGhvbmV8aVBvZHxpUGFkKS9pLnRlc3QoXG4gICAgICAgICAgICBuYXZpZ2F0b3IucGxhdGZvcm1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzQnJvd3NlclN1cHBvcnRlZCkge1xuICAgICAgICAgICAgY29uc3QgcGFnZVRpdGxlID0gJ05hdmlnYXRldXIgbm9uIHN1cHBvcnTDqSc7XG4gICAgICAgICAgICB0aGlzLmZvZWhuUGFnZVNlcnZpY2Uuc2V0UGFnZVRpdGxlKHBhZ2VUaXRsZSk7XG4gICAgICAgICAgICB0aGlzLmJyZWFkY3J1bWJTZXJ2aWNlLnNldEN1cnJlbnRCcmVhZGNydW1iKHtcbiAgICAgICAgICAgICAgICB1cmw6IG51bGwsXG4gICAgICAgICAgICAgICAgcm91dGVyTGluazogbnVsbCxcbiAgICAgICAgICAgICAgICBsYWJlbDogcGFnZVRpdGxlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlzSW5pdGlhbFN0ZXAgPSB0aGlzLmFwcGxpY2F0aW9uSW5mb1NlcnZpY2UuY3VycmVudEV0YXBlSW5mby5waXBlKFxuICAgICAgICAgICAgbWFwKFxuICAgICAgICAgICAgICAgIChjdXJyZW50RXRhcGVJbmZvOiBFdGFwZUluZm8pID0+XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRFdGFwZUluZm8gJiZcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEV0YXBlSW5mby5pZE1ldGllckV0YXBlID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEV0YXBlSW5mby5pZE1ldGllclByZXN0YXRpb25cbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBjb25zdCBuYXZpZ2F0aW9uVXBkYXRlOiBPYnNlcnZhYmxlPGFueT4gPSBvZiAodHJ1ZSlcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgY29uc3QgbmF2aWdhdGlvblVwZGF0ZTogT2JzZXJ2YWJsZTxhbnk+ID0gdGhpcy5yb3V0ZXIuZXZlbnRzLnBpcGUoXG4gICAgICAgICAgICBmaWx0ZXIoZXZlbnQgPT4gZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIEVuc3VyZXMgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIHZhbHVlIGluIHRoZSBvYnNlcnZhYmxlLlxuICAgICAgICBjb25zdCBuYXZpZ2F0aW9uQW5kSW5pdCA9IG1lcmdlKG9mKHRydWUpLCBuYXZpZ2F0aW9uVXBkYXRlKTtcbiAgICAgICAgY29uc3QgZm9ybVRyYW5zbWl0dGVkID0gbWVyZ2UoXG4gICAgICAgICAgICBvZih1bmRlZmluZWQpLFxuICAgICAgICAgICAgdGhpcy5nZXNkZW1FdmVudFNlcnZpY2UuZm9ybVRyYW5zbWl0dGVkT2JzZXJ2YWJsZSgpXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5kaXNwbGF5VXNlckNhdGVnb3J5ID0gY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICBpc0luaXRpYWxTdGVwLFxuICAgICAgICAgICAgdGhpcy5mb2Vobk5hdmlnYXRpb25TZXJ2aWNlLmhhc0JlZW5Jbml0aWFsaXplZCgpLFxuICAgICAgICAgICAgZm9ybVRyYW5zbWl0dGVkLFxuICAgICAgICAgICAgbmF2aWdhdGlvbkFuZEluaXRcbiAgICAgICAgXSkucGlwZShcbiAgICAgICAgICAgIGRlYm91bmNlVGltZSgwKSwgLy8gd2l0aG91dCBkZWJvdW5jZVRpbWUsIHRoZSBvdXRjb21lIGlzIGxlc3MgZWZmZWN0aXZlLi4uXG4gICAgICAgICAgICBtYXAoKFtpbml0aWFsU3RlcCwgbmF2U2VydmljZUluaXRpYWxpemVkLCBiYWNrZW5kUmVzcG9uc2VdKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKG5hdlNlcnZpY2VJbml0aWFsaXplZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0ZpcnN0UGFnZSA9IHRoaXMuZm9laG5OYXZpZ2F0aW9uU2VydmljZS5pc0ZpcnN0Rm9ybVBhZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNMYXN0UGFnZSA9IHRoaXMuZm9laG5OYXZpZ2F0aW9uU2VydmljZS5pc0xhc3RGb3JtUGFnZSgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0N1cnJlbnRSb3V0ZURlZmluZWQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2Vobk5hdmlnYXRpb25TZXJ2aWNlLmdldEN1cnJlbnRSb3V0ZUluZGV4KCkgIT09XG4gICAgICAgICAgICAgICAgICAgICAgICBudWxsO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5mb2VoblBhZ2VTZXJ2aWNlLmlzVXNlckNhdGVnb3J5VmlzaWJsZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRmlyc3RQYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNMYXN0UGFnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXNlckNvbm5lY3RlZEFzRGlzcGxheWVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFN0ZXAsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5ldmVyQ29ubmVjdGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2VuZFJlc3BvbnNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNDdXJyZW50Um91dGVEZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgZm9ybUluaXRpYWxpemF0aW9uT2JzZXJ2YWJsZSA9IG1lcmdlKFxuICAgICAgICAgICAgb2YodW5kZWZpbmVkKSxcbiAgICAgICAgICAgIHRoaXMuZ2VzZGVtRXZlbnRTZXJ2aWNlLmZvcm1Jbml0aWFsaXphdGlvbk9ic2VydmFibGUoKVxuICAgICAgICApO1xuXG4gICAgICAgIGlmICh0aGlzLm5ldmVyQ29ubmVjdGVkKSB7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlMb2dpbk1lc3NhZ2VzID0gb2YoXG4gICAgICAgICAgICAgICAgbmV3IERpc3BsYXlMb2dpbk1lc3NhZ2VzRGF0YShmYWxzZSwgZmFsc2UpXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5TG9naW5NZXNzYWdlcyA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgICAgICAgIGZvcm1Jbml0aWFsaXphdGlvbk9ic2VydmFibGUsXG4gICAgICAgICAgICAgICAgdGhpcy5zZXNzaW9uSW5mby5kYXRhLFxuICAgICAgICAgICAgICAgIHRoaXMuYXBwbGljYXRpb25JbmZvU2VydmljZS5jdXJyZW50RXRhcGVJbmZvXG4gICAgICAgICAgICBdKS5waXBlKFxuICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZSgwKSwgLy8gd2l0aG91dCBkZWJvdW5jZVRpbWUsIHRoZSBvdXRjb21lIGlzIGxlc3MgZWZmZWN0aXZlLi4uXG4gICAgICAgICAgICAgICAgbWFwKFxuICAgICAgICAgICAgICAgICAgICAoW1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUluaXRpYWxpemF0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbkluZm9EYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEV0YXBlSW5mb1xuICAgICAgICAgICAgICAgICAgICBdKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0Nvbm5lY3RlZEN5YmVyT3JJYW0gPSAhIXNlc3Npb25JbmZvRGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzTGFzdFBhZ2UgPSB0aGlzLmZvZWhuTmF2aWdhdGlvblNlcnZpY2UuaXNMYXN0Rm9ybVBhZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0Nvbm5lY3RlZEN5YmVyT3JJYW0gfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhY3VycmVudEV0YXBlSW5mby5kZXBsb3llZUN5YmVyIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgISFmb3JtSW5pdGlhbGl6YXRpb24gfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xhc3RQYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERpc3BsYXlMb2dpbk1lc3NhZ2VzRGF0YShmYWxzZSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERpc3BsYXlMb2dpbk1lc3NhZ2VzRGF0YShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50RXRhcGVJbmZvPy5kZWNpc2lvbkVsZWN0cm9uaXF1ZUF2YWlsYWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZXRhcGVJZENoYW5nZSA9IGNoYW5nZXMuZXRhcGVJZDtcbiAgICAgICAgaWYgKGV0YXBlSWRDaGFuZ2UgJiYgZXRhcGVJZENoYW5nZS5jdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuZm9laG5QYWdlU2VydmljZS5zZXRDdXJyZW50RXRhcGVJZChldGFwZUlkQ2hhbmdlLmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhcHBUaXRsZUNoYW5nZSA9IGNoYW5nZXMuYXBwVGl0bGU7XG4gICAgICAgIGlmIChhcHBUaXRsZUNoYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5fdGl0bGVTZXJ2aWNlLnNldFRpdGxlKGFwcFRpdGxlQ2hhbmdlLmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuYmxvY2tlZFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5ibG9ja2VkU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRGdWxsTG9naW5VcmwoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9laG5QYWdlTW9kYWxTZXJ2aWNlLmJ1aWxkU2VsZlJlZGlyZWN0aW9uVGhyb3VnaEN5YmVyTG9naW4oKTtcbiAgICB9XG5cbiAgICBnZXRGdWxsTG9naW5NZXNzYWdlKFxuICAgICAgICBkZWNpc2lvbkVsZWN0cm9uaXF1ZUF2YWlsYWJsZTogYm9vbGVhblxuICAgICk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgICAgIGlmIChkZWNpc2lvbkVsZWN0cm9uaXF1ZUF2YWlsYWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgICAgICAgIHRoaXMuc2RrRGljdGlvbmFyeVNlcnZpY2UuZ2V0S2V5KCd1c2UtbG9naW4udGV4dCcpLFxuICAgICAgICAgICAgICAgIHRoaXMuc2RrRGljdGlvbmFyeVNlcnZpY2UuZ2V0S2V5KFxuICAgICAgICAgICAgICAgICAgICAndXNlLWxvZ2luLnRleHQuZGVjaXNpb24tZWxlY3Ryb25pcXVlLWF2YWlsYWJsZSdcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICBdKS5waXBlKFxuICAgICAgICAgICAgICAgIG1hcChcbiAgICAgICAgICAgICAgICAgICAgKFtsb2dpbk1zZywgZGVjaXNpb25FbGVjdHJvbmlxdWVBdmFpbGFibGVNc2ddKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgYCR7bG9naW5Nc2d9PGJyLz48YnIvPiR7ZGVjaXNpb25FbGVjdHJvbmlxdWVBdmFpbGFibGVNc2d9YFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuc2RrRGljdGlvbmFyeVNlcnZpY2UuZ2V0S2V5KCd1c2UtbG9naW4udGV4dCcpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0UGFnZVRpdGxlKHRpdGxlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wYWdlVGl0bGUgPSB0aXRsZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEaXNwbGF5TG9naW5NZXNzYWdlc0RhdGEge1xuICAgIGRlY2lzaW9uRWxlY3Ryb25pcXVlQXZhaWxhYmxlOiBib29sZWFuO1xuICAgIGRpc3BsYXlTaG91bGRMb2dpbk1lc3NhZ2U6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgZGVjaXNpb25FbGVjdHJvbmlxdWVBdmFpbGFibGU6IGJvb2xlYW4sXG4gICAgICAgIGRpc3BsYXlTaG91bGRMb2dpbk1lc3NhZ2U6IGJvb2xlYW5cbiAgICApIHtcbiAgICAgICAgdGhpcy5kZWNpc2lvbkVsZWN0cm9uaXF1ZUF2YWlsYWJsZSA9IGRlY2lzaW9uRWxlY3Ryb25pcXVlQXZhaWxhYmxlO1xuICAgICAgICB0aGlzLmRpc3BsYXlTaG91bGRMb2dpbk1lc3NhZ2UgPSBkaXNwbGF5U2hvdWxkTG9naW5NZXNzYWdlO1xuICAgIH1cbn1cbiIsIjxmb2Vobi1oZWFkZXJcbiAgICBpZD1cImZvZWhuX2hlYWRlclwiXG4gICAgW3RpdGxlXT1cImFwcFRpdGxlXCJcbiAgICBbbmV2ZXJDb25uZWN0ZWRdPVwibmV2ZXJDb25uZWN0ZWRcIlxuPjwvZm9laG4taGVhZGVyPlxuPGZvZWhuLWdyb3dsIGlkPVwiZm9laG5fZ3Jvd2xcIj48L2ZvZWhuLWdyb3dsPlxuPGRpdiBjbGFzcz1cInZkLWJnLXBhdHRlcm4tZ3JheVwiPlxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgPGZvZWhuLWJyZWFkY3J1bWJcbiAgICAgICAgICAgIFtuZXZlckNvbm5lY3RlZF09XCJuZXZlckNvbm5lY3RlZFwiXG4gICAgICAgICAgICBbY29uZmlybUxlYXZpbmdBbGVydF09XCJjb25maXJtTGVhdmluZ0FsZXJ0XCJcbiAgICAgICAgPjwvZm9laG4tYnJlYWRjcnVtYj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuPG1haW4gaWQ9XCJtYWluXCI+XG4gICAgPGRpdiBjbGFzcz1cInZkLWJnLXBhdHRlcm4tZ3JheVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8IS0tIEZpeCBhbm5veWluZyBmbGlja2VyaW5nIHdoZW4gdGhlIHBhZ2UgbG9hZHMgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaDEgbXQtMFwiICpuZ0lmPVwiIXBhZ2VUaXRsZVwiPiZuYnNwOzwvZGl2PlxuICAgICAgICAgICAgPGgxXG4gICAgICAgICAgICAgICAgW3RhYkluZGV4XT1cIi0xXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm10LTBcIlxuICAgICAgICAgICAgICAgIGlkPVwicGFnZS10aXRsZVwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhIXBhZ2VUaXRsZVwiXG4gICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJwYWdlVGl0bGVcIlxuICAgICAgICAgICAgPjwvaDE+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPHNlY3Rpb25cbiAgICAgICAgKm5nSWY9XCIhaXNCcm93c2VyU3VwcG9ydGVkXCJcbiAgICAgICAgY2xhc3M9XCJjb250YWluZXIgYWxlcnQgYWxlcnQtZGFuZ2VyXCJcbiAgICAgICAgaWQ9XCJicm93c2VyX25vdF9zdXBwb3J0ZWRfYmxvY2tcIlxuICAgICAgICByb2xlPVwiYWxlcnRcIlxuICAgID5cbiAgICAgICAgPHAgY2xhc3M9XCJhbGVydC1oZWFkaW5nXCI+XG4gICAgICAgICAgICA8c3Ryb25nPlxuICAgICAgICAgICAgICAgIENldHRlIHByZXN0YXRpb24gbuKAmWVzdCBwYXMgY29tcGF0aWJsZSBhdmVjIHZvdHJlIG5hdmlnYXRldXIuXG4gICAgICAgICAgICA8L3N0cm9uZz5cbiAgICAgICAgPC9wPlxuICAgICAgICA8cCBjbGFzcz1cIm1iLTBcIj5cbiAgICAgICAgICAgIE5vdXMgdm91cyBpbnZpdG9ucyDDoCB1dGlsaXNlciB1bmUgdmVyc2lvbiByw6ljZW50ZSBkZVxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0FwcGxlUGxhdGZvcm1cIj5cbiAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiYnJvd3NlckxpbmtUaXRsZVByZWZpeCArICcgRWRnZSdcIlxuICAgICAgICAgICAgICAgICAgICBocmVmPVwiaHR0cHM6Ly93d3cubWljcm9zb2Z0LmNvbS9mci1jaC93aW5kb3dzL21pY3Jvc29mdC1lZGdlXCJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIEVkZ2VcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+KGxpZW4gZXh0ZXJuZSk8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGZvZWhuLWljb24tZXh0ZXJuYWwtbGluay1hbHQ+PC9mb2Vobi1pY29uLWV4dGVybmFsLWxpbmstYWx0PlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICxcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzQXBwbGVQbGF0Zm9ybVwiPlxuICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJicm93c2VyTGlua1RpdGxlUHJlZml4ICsgJyBTYWZhcmknXCJcbiAgICAgICAgICAgICAgICAgICAgaHJlZj1cImh0dHBzOi8vc3VwcG9ydC5hcHBsZS5jb20vZG93bmxvYWRzL3NhZmFyaVwiXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICBTYWZhcmlcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+KGxpZW4gZXh0ZXJuZSk8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGZvZWhuLWljb24tZXh0ZXJuYWwtbGluay1hbHQ+PC9mb2Vobi1pY29uLWV4dGVybmFsLWxpbmstYWx0PlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICxcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwiYnJvd3NlckxpbmtUaXRsZVByZWZpeCArICcgRmlyZWZveCdcIlxuICAgICAgICAgICAgICAgIGhyZWY9XCJodHRwczovL3d3dy5tb3ppbGxhLm9yZy9mci9maXJlZm94L1wiXG4gICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBGaXJlZm94XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+KGxpZW4gZXh0ZXJuZSk8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxmb2Vobi1pY29uLWV4dGVybmFsLWxpbmstYWx0PjwvZm9laG4taWNvbi1leHRlcm5hbC1saW5rLWFsdD5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICBvdVxuICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwiYnJvd3NlckxpbmtUaXRsZVByZWZpeCArICcgQ2hyb21lJ1wiXG4gICAgICAgICAgICAgICAgaHJlZj1cImh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vaW50bC9mci9jaHJvbWUvXCJcbiAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIENocm9tZVxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPihsaWVuIGV4dGVybmUpPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8Zm9laG4taWNvbi1leHRlcm5hbC1saW5rLWFsdD48L2ZvZWhuLWljb24tZXh0ZXJuYWwtbGluay1hbHQ+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgLlxuICAgICAgICA8L3A+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbXQtM1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJicm93c2VyX25vdF9zdXBwb3J0ZWRfYnlwYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbG9hdC1yaWdodCBidG4gYnRuLWRhbmdlclwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWJyb3dzZXJOb3RTdXBwb3J0ZWRCeXBhc3NcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYnJvd3Nlck5vdFN1cHBvcnRlZEJ5cGFzcyA9IHRydWVcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgQ29udGludWVyIGF2ZWMgY2UgbmF2aWdhdGV1clxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvc2VjdGlvbj5cblxuICAgIDxzZGstc3VwcG9ydC1hbGVydC1jb250YWluZXJcbiAgICAgICAgKm5nSWY9XCJzdXBwb3J0QWxlcnRFbmFibGVkXCJcbiAgICAgICAgW2V0YXBlSWRdPVwiZXRhcGVJZFwiXG4gICAgICAgIFtzdXBwb3J0QWxlcnRVcmxdPVwic3VwcG9ydEFsZXJ0VXJsXCJcbiAgICA+PC9zZGstc3VwcG9ydC1hbGVydC1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgIShoYXNCbG9ja2luZ1N1cHBvcnRBbGVydCB8IGFzeW5jKSAmJlxuICAgICAgICAgICAgKGlzQnJvd3NlclN1cHBvcnRlZCB8fCBicm93c2VyTm90U3VwcG9ydGVkQnlwYXNzKVxuICAgICAgICBcIlxuICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lciBtdC01XCIgaWQ9XCJwYWdlX2NvbnRlbnRcIj5cbiAgICAgICAgICAgIDxmb2Vobi11c2VyLWNvbm5lY3RlZC1hc1xuICAgICAgICAgICAgICAgICpuZ0lmPVwiZGlzcGxheVVzZXJDYXRlZ29yeSB8IGFzeW5jXCJcbiAgICAgICAgICAgID48L2ZvZWhuLXVzZXItY29ubmVjdGVkLWFzPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZGlzcGxheUxvZ2luTWVzc2FnZXMgfCBhc3luYyBhcyBkaXNwbGF5TG9naW5NZXNzYWdlc0RhdGFcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkaXNwbGF5TG9naW5NZXNzYWdlc0RhdGEuZGlzcGxheVNob3VsZExvZ2luTWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWxlcnQgYWxlcnQtaW5mb1wiXG4gICAgICAgICAgICAgICAgICAgIGlkPVwiZGlzcGxheUxvZ2luTWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8cFxuICAgICAgICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRGdWxsTG9naW5NZXNzYWdlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5TG9naW5NZXNzYWdlc0RhdGEuZGVjaXNpb25FbGVjdHJvbmlxdWVBdmFpbGFibGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHwgYXN5bmNcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgID48L3A+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LXN0YXJ0IG1yLTIgbWItMiBtdC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaHJlZl09XCJnZXRGdWxsTG9naW5VcmwoKSB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAndXNlLWxvZ2luLmJ1dHRvbi50ZXh0JyB8IGZyb21EaWN0aW9uYXJ5IH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgPC9uZy1jb250YWluZXI+XG48L21haW4+XG48Zm9laG4tZm9vdGVyXG4gICAgaWQ9XCJmb2Vobl9mb290ZXJcIlxuICAgIFtsaW5rc109XCJmb290ZXJMaW5rc1wiXG4gICAgW3Nob3dEZWZhdWx0Q29udGFjdExpbmtdPVwic2hvd0RlZmF1bHRDb250YWN0Rm9vdGVyTGlua1wiXG4gICAgW3Nob3dEZWZhdWx0R3VpZGVMaW5rXT1cInNob3dEZWZhdWx0R3VpZGVGb290ZXJMaW5rXCJcbiAgICBbc2hvd0RlZmF1bHRUZXJtT2ZVc2VMaW5rXT1cInNob3dEZWZhdWx0VGVybU9mVXNlTGlua1wiXG4gICAgW3Nob3dEZWZhdWx0U2VjdXJpdHlCZXN0UHJhY3RpY2VMaW5rXT1cInNob3dEZWZhdWx0U2VjdXJpdHlCZXN0UHJhY3RpY2VMaW5rXCJcbj48L2ZvZWhuLWZvb3Rlcj5cbjxmb2Vobi1wYWdlLW1vZGFsPjwvZm9laG4tcGFnZS1tb2RhbD5cbjxmb2Vobi1jb25maXJtLW1vZGFsPjwvZm9laG4tY29uZmlybS1tb2RhbD5cbiJdfQ==
|
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
-
import { ObjectHelper } from '../helpers/object.helper';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "../foehn-icons/foehn-icon-chevron-up.component";
|
|
5
|
-
import * as i2 from "../foehn-icons/foehn-icon-chevron-down.component";
|
|
6
|
-
import * as i3 from "../foehn-icons/foehn-icon-chevron-left.component";
|
|
7
|
-
import * as i4 from "../foehn-icons/foehn-icon-chevron-right.component";
|
|
8
|
-
import * as i5 from "@angular/common";
|
|
9
|
-
import * as i6 from "@angular/router";
|
|
10
|
-
import * as i7 from "../sdk-dictionary/sdk-dictionary.pipe";
|
|
11
|
-
const hasInputChanged = (change) => !(!change ||
|
|
12
|
-
!change.currentValue ||
|
|
13
|
-
ObjectHelper.isEqual(change.previousValue, change.currentValue));
|
|
14
|
-
export class FoehnTableComponent {
|
|
15
|
-
constructor() {
|
|
16
|
-
this.itemsPerPage = 10;
|
|
17
|
-
this.id = 'foehn-table';
|
|
18
|
-
this.previousLabel = 'Précédent';
|
|
19
|
-
this.nextLabel = 'Suivant';
|
|
20
|
-
this.pageChange = new EventEmitter();
|
|
21
|
-
this.sortChange = new EventEmitter();
|
|
22
|
-
this.currentPage = 1;
|
|
23
|
-
this.filteredList = [];
|
|
24
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
25
|
-
this.trackByFn = (index, item) => index;
|
|
26
|
-
}
|
|
27
|
-
set list(list) {
|
|
28
|
-
this._list = list;
|
|
29
|
-
}
|
|
30
|
-
ngOnChanges(changes) {
|
|
31
|
-
const itemsPerPageChange = changes.itemsPerPage;
|
|
32
|
-
const listChange = changes.list;
|
|
33
|
-
const fixedPageCountChange = changes.fixedPageCount;
|
|
34
|
-
const sortInputChange = changes.sort;
|
|
35
|
-
if (!hasInputChanged(itemsPerPageChange) &&
|
|
36
|
-
!hasInputChanged(listChange) &&
|
|
37
|
-
!hasInputChanged(fixedPageCountChange) &&
|
|
38
|
-
!hasInputChanged(sortInputChange)) {
|
|
39
|
-
return;
|
|
40
|
-
}
|
|
41
|
-
this.buildFilteredList();
|
|
42
|
-
}
|
|
43
|
-
previousPage() {
|
|
44
|
-
this.currentPage = this.currentPage - 1;
|
|
45
|
-
this.buildFilteredList();
|
|
46
|
-
this.pageChange.next({
|
|
47
|
-
previousPage: this.currentPage + 1,
|
|
48
|
-
currentPage: this.currentPage,
|
|
49
|
-
pageCount: this.pagesCount()
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
hasPreviousPage() {
|
|
53
|
-
return this.currentPage > 1;
|
|
54
|
-
}
|
|
55
|
-
nextPage() {
|
|
56
|
-
this.currentPage = this.currentPage + 1;
|
|
57
|
-
this.buildFilteredList();
|
|
58
|
-
this.pageChange.next({
|
|
59
|
-
previousPage: this.currentPage - 1,
|
|
60
|
-
currentPage: this.currentPage,
|
|
61
|
-
pageCount: this.pagesCount()
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
hasNextPage() {
|
|
65
|
-
return this.currentPage < this.pagesCount();
|
|
66
|
-
}
|
|
67
|
-
showPage(page, emitPageChangeEvent = false) {
|
|
68
|
-
if (this.currentPage === page) {
|
|
69
|
-
return;
|
|
70
|
-
}
|
|
71
|
-
const previousPage = this.currentPage;
|
|
72
|
-
this.currentPage = page;
|
|
73
|
-
this.buildFilteredList();
|
|
74
|
-
if (emitPageChangeEvent) {
|
|
75
|
-
this.pageChange.next({
|
|
76
|
-
previousPage,
|
|
77
|
-
currentPage: this.currentPage,
|
|
78
|
-
pageCount: this.pagesCount()
|
|
79
|
-
});
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
pagesCount() {
|
|
83
|
-
if (!!this.fixedPageCount) {
|
|
84
|
-
return this.fixedPageCount;
|
|
85
|
-
}
|
|
86
|
-
return this._list
|
|
87
|
-
? Math.ceil(this._list.length / this.itemsPerPage)
|
|
88
|
-
: 0;
|
|
89
|
-
}
|
|
90
|
-
triggerSort(sortAttribute) {
|
|
91
|
-
let sortDirection = 'DESC';
|
|
92
|
-
if (this.sort.sortAttribute === sortAttribute) {
|
|
93
|
-
sortDirection = this.sort.sortDirection === 'DESC' ? 'ASC' : 'DESC';
|
|
94
|
-
}
|
|
95
|
-
this.sortChange.next({
|
|
96
|
-
sortDirection,
|
|
97
|
-
sortAttribute
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
|
-
buildFilteredList() {
|
|
101
|
-
if (!this._list) {
|
|
102
|
-
this.filteredList = [];
|
|
103
|
-
return;
|
|
104
|
-
}
|
|
105
|
-
if (!!this.fixedPageCount) {
|
|
106
|
-
this.filteredList = this._list;
|
|
107
|
-
return;
|
|
108
|
-
}
|
|
109
|
-
const currentPageExists = (this.currentPage - 1) * this.itemsPerPage <= this._list.length;
|
|
110
|
-
if (!currentPageExists) {
|
|
111
|
-
this.currentPage = 1;
|
|
112
|
-
}
|
|
113
|
-
const start = (this.currentPage - 1) * this.itemsPerPage;
|
|
114
|
-
this.filteredList = this._list.slice(start, start + this.itemsPerPage);
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
FoehnTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: FoehnTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
118
|
-
FoehnTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.4", type: FoehnTableComponent, selector: "foehn-table", inputs: { itemsPerPage: "itemsPerPage", id: "id", previousLabel: "previousLabel", nextLabel: "nextLabel", totalElements: "totalElements", fixedPageCount: "fixedPageCount", columnsConfiguration: "columnsConfiguration", sort: "sort", trackByFn: "trackByFn", list: "list" }, outputs: { pageChange: "pageChange", sortChange: "sortChange" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"row\" [id]=\"id\">\n <div class=\"col-12\">\n <h4 *ngIf=\"!!totalElements && totalElements === 1\">\n {{ 'foehn-table.totalElements.1' | fromDictionary }}\n </h4>\n <h4 *ngIf=\"!!totalElements && totalElements !== 1\">\n {{\n 'foehn-table.totalElements'\n | fromDictionary: { total: totalElements.toString() }\n }}\n </h4>\n </div>\n\n <div class=\"col-12 table-responsive\">\n <table class=\"table table-hover\">\n <thead class=\"vd-bg-pattern-bars-gray\">\n <tr>\n <th\n scope=\"col\"\n *ngFor=\"let col of columnsConfiguration\"\n [id]=\"col.id\"\n >\n <ng-container\n *ngIf=\"!filteredList.length || !col.sortAttribute\"\n >\n <span\n [innerHTML]=\"\n col.columnLabelKey | fromDictionary\n \"\n ></span>\n </ng-container>\n\n <ng-container\n *ngIf=\"!!filteredList.length && !!col.sortAttribute\"\n >\n <a\n href=\"#\"\n class=\"vd-text-thin\"\n (click)=\"\n $event.preventDefault();\n triggerSort(col.sortAttribute)\n \"\n [title]=\"\n 'Trier par ' +\n (col.columnLabelKey | fromDictionary)\n \"\n >\n <span\n [innerHTML]=\"\n col.columnLabelKey | fromDictionary\n \"\n ></span>\n <ng-container\n *ngIf=\"\n sort.sortAttribute === col.sortAttribute\n \"\n >\n <span\n class=\"ml-3\"\n *ngIf=\"sort.sortDirection === 'ASC'\"\n >\n <foehn-icon-chevron-up></foehn-icon-chevron-up>\n </span>\n <span\n class=\"ml-3\"\n *ngIf=\"sort.sortDirection === 'DESC'\"\n >\n <foehn-icon-chevron-down></foehn-icon-chevron-down>\n </span>\n </ng-container>\n </a>\n </ng-container>\n </th>\n </tr>\n </thead>\n <tbody>\n <tr\n *ngFor=\"\n let item of filteredList;\n let index = index;\n trackBy: trackByFn\n \"\n >\n <td\n *ngFor=\"let col of columnsConfiguration\"\n [id]=\"col.id + '-' + index\"\n >\n <ng-container *ngIf=\"!!col.isImportant\">\n <span\n *ngIf=\"col.isImportant(item)\"\n class=\"cell-vertical-align-middle\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"30\"\n height=\"30\"\n style=\"color: var(--red)\"\n fill=\"currentColor\"\n class=\"bi bi-exclamation\"\n viewBox=\"0 0 16 16\"\n >\n <path\n d=\"M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0zM7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.553.553 0 0 1-1.1 0L7.1 4.995z\"\n />\n </svg>\n </span>\n </ng-container>\n\n <ng-container *ngIf=\"!col.routerLinkGetter\">\n <span\n [innerHTML]=\"col.valueGetter(item)\"\n class=\"cell-vertical-align-middle\"\n ></span>\n </ng-container>\n\n <ng-container *ngIf=\"!!col.routerLinkGetter\">\n <a\n [routerLink]=\"col.routerLinkGetter(item)\"\n queryParamsHandling=\"merge\"\n class=\"cell-vertical-align-middle\"\n >\n <span\n [innerHTML]=\"col.valueGetter(item)\"\n ></span>\n </a>\n </ng-container>\n </td>\n </tr>\n <tr *ngIf=\"!!columnsConfiguration && !filteredList.length\">\n <td [colSpan]=\"columnsConfiguration.length\">\n <div class=\"w-100 text-center\">\n {{ 'foehn-table.totalElements.0' | fromDictionary }}\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n\n <div class=\"row d-flex justify-content-between p-1\">\n <div class=\"col-lg-3 col-md-3 col-sm-6 col-xs-6\">\n <nav\n class=\"vd-pagination\"\n aria-label=\"Pagination\"\n *ngIf=\"hasPreviousPage()\"\n >\n <ul class=\"vd-pagination__list\">\n <li\n class=\"vd-pagination__item vd-pagination__item--previous\"\n >\n <button\n class=\"btn-link vd-pagination__link btn-no-extra vd-pagination__link-reset\"\n (click)=\"previousPage()\"\n >\n <span class=\"vd-pagination__title\">\n <foehn-icon-chevron-left></foehn-icon-chevron-left>\n {{ previousLabel }}\n </span>\n <span class=\"sr-only\">:</span>\n <span class=\"vd-pagination__label\">\n {{ currentPage - 1 }} sur {{ pagesCount() }}\n </span>\n </button>\n </li>\n </ul>\n </nav>\n </div>\n\n <div class=\"col-lg-3 col-md-3 col-sm-6 col-xs-6\">\n <nav\n class=\"vd-pagination\"\n aria-label=\"Pagination\"\n *ngIf=\"hasNextPage()\"\n >\n <ul class=\"vd-pagination__list\">\n <li\n class=\"vd-pagination__item vd-pagination__item--next\"\n >\n <button\n class=\"btn-link vd-pagination__link btn-no-extra vd-pagination__link-reset\"\n (click)=\"nextPage()\"\n >\n <span class=\"vd-pagination__title\">\n {{ nextLabel }}\n <foehn-icon-chevron-right></foehn-icon-chevron-right>\n </span>\n <span class=\"sr-only\">:</span>\n <span class=\"vd-pagination__label\">\n {{ currentPage + 1 }} sur {{ pagesCount() }}\n </span>\n </button>\n </li>\n </ul>\n </nav>\n </div>\n </div>\n </div>\n</div>\n", styles: [".btn-no-extra{padding:0;border:none;font-weight:400;-webkit-text-decoration-line:none;text-decoration-line:none}.vd-pagination__link-reset{background:none;border:none;font-weight:inherit;-webkit-text-decoration-line:none;text-decoration-line:none;text-align:inherit;cursor:pointer}.vd-pagination__link-reset:focus{background-color:#ffbf47}.cell-vertical-align-middle{vertical-align:middle}\n"], components: [{ type: i1.FoehnIconChevronUpComponent, selector: "foehn-icon-chevron-up" }, { type: i2.FoehnIconChevronDownComponent, selector: "foehn-icon-chevron-down" }, { type: i3.FoehnIconChevronLeftComponent, selector: "foehn-icon-chevron-left" }, { type: i4.FoehnIconChevronRightComponent, selector: "foehn-icon-chevron-right" }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i6.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["routerLink", "target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo"] }], pipes: { "fromDictionary": i7.SdkDictionaryPipe } });
|
|
119
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: FoehnTableComponent, decorators: [{
|
|
120
|
-
type: Component,
|
|
121
|
-
args: [{
|
|
122
|
-
selector: 'foehn-table',
|
|
123
|
-
templateUrl: './foehn-table.component.html',
|
|
124
|
-
styleUrls: ['./foehn-table.component.css']
|
|
125
|
-
}]
|
|
126
|
-
}], propDecorators: { itemsPerPage: [{
|
|
127
|
-
type: Input
|
|
128
|
-
}], id: [{
|
|
129
|
-
type: Input
|
|
130
|
-
}], previousLabel: [{
|
|
131
|
-
type: Input
|
|
132
|
-
}], nextLabel: [{
|
|
133
|
-
type: Input
|
|
134
|
-
}], totalElements: [{
|
|
135
|
-
type: Input
|
|
136
|
-
}], fixedPageCount: [{
|
|
137
|
-
type: Input
|
|
138
|
-
}], columnsConfiguration: [{
|
|
139
|
-
type: Input
|
|
140
|
-
}], pageChange: [{
|
|
141
|
-
type: Output
|
|
142
|
-
}], sort: [{
|
|
143
|
-
type: Input
|
|
144
|
-
}], sortChange: [{
|
|
145
|
-
type: Output
|
|
146
|
-
}],
|
|
147
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
148
|
-
trackByFn: [{
|
|
149
|
-
type: Input
|
|
150
|
-
}], list: [{
|
|
151
|
-
type: Input
|
|
152
|
-
}] } });
|
|
153
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9laG4tdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJlc3RhdGlvbnMtbmcvc3JjL2ZvZWhuLXRhYmxlL2ZvZWhuLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL3ByZXN0YXRpb25zLW5nL3NyYy9mb2Vobi10YWJsZS9mb2Vobi10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUdULE1BQU0sZUFBZSxDQUFDO0FBSXZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7O0FBRXhELE1BQU0sZUFBZSxHQUFHLENBQUMsTUFBb0IsRUFBVyxFQUFFLENBQ3RELENBQUMsQ0FDRyxDQUFDLE1BQU07SUFDUCxDQUFDLE1BQU0sQ0FBQyxZQUFZO0lBQ3BCLFlBQVksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsWUFBWSxDQUFDLENBQ2xFLENBQUM7QUFPTixNQUFNLE9BQU8sbUJBQW1CO0lBTGhDO1FBT0ksaUJBQVksR0FBRyxFQUFFLENBQUM7UUFHbEIsT0FBRSxHQUFHLGFBQWEsQ0FBQztRQUduQixrQkFBYSxHQUFHLFdBQVcsQ0FBQztRQUc1QixjQUFTLEdBQUcsU0FBUyxDQUFDO1FBWXRCLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBNkIsQ0FBQztRQU0zRCxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQWEsQ0FBQztRQUUzQyxnQkFBVyxHQUFHLENBQUMsQ0FBQztRQUVoQixpQkFBWSxHQUFjLEVBQUUsQ0FBQztRQUs3Qiw2REFBNkQ7UUFDN0QsY0FBUyxHQUFHLENBQUMsS0FBYSxFQUFFLElBQWEsRUFBVSxFQUFFLENBQUMsS0FBSyxDQUFDO0tBaUgvRDtJQS9HRyxJQUNJ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LFdBQVcsRUFBRSw4QkFBOEI7b0JBQzNDLFNBQVMsRUFBRSxDQUFDLDZCQUE2QixDQUFDO2lCQUM3Qzs4QkFHRyxZQUFZO3NCQURYLEtBQUs7Z0JBSU4sRUFBRTtzQkFERCxLQUFLO2dCQUlOLGFBQWE7c0JBRFosS0FBSztnQkFJTixTQUFTO3NCQURSLEtBQUs7Z0JBSU4sYUFBYTtzQkFEWixLQUFLO2dCQUlOLGNBQWM7c0JBRGIsS0FBSztnQkFJTixvQkFBb0I7c0JBRG5CLEtBQUs7Z0JBSU4sVUFBVTtzQkFEVCxNQUFNO2dCQUlQLElBQUk7c0JBREgsS0FBSztnQkFJTixVQUFVO3NCQURULE1BQU07O1FBVVAsNkRBQTZEO1FBQzdELFNBQVM7c0JBRlIsS0FBSztnQkFLRixJQUFJO3NCQURQLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE91dHB1dCxcbiAgICBTaW1wbGVDaGFuZ2UsXG4gICAgU2ltcGxlQ2hhbmdlc1xufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvZWhuVGFibGVQYWdlQ2hhbmdlRXZlbnQgfSBmcm9tICcuL2ZvZWhuLXRhYmxlLXBhZ2UtY2hhbmdlLWV2ZW50JztcbmltcG9ydCB7IEZvZWhuVGFibGVDb2x1bW5Db25maWd1cmF0aW9uIH0gZnJvbSAnLi9mb2Vobi10YWJsZS1jb2x1bW4tY29uZmlndXJhdGlvbic7XG5pbXBvcnQgeyBUYWJsZVNvcnQgfSBmcm9tICcuL3RhYmxlU29ydCc7XG5pbXBvcnQgeyBPYmplY3RIZWxwZXIgfSBmcm9tICcuLi9oZWxwZXJzL29iamVjdC5oZWxwZXInO1xuXG5jb25zdCBoYXNJbnB1dENoYW5nZWQgPSAoY2hhbmdlOiBTaW1wbGVDaGFuZ2UpOiBib29sZWFuID0+XG4gICAgIShcbiAgICAgICAgIWNoYW5nZSB8fFxuICAgICAgICAhY2hhbmdlLmN1cnJlbnRWYWx1ZSB8fFxuICAgICAgICBPYmplY3RIZWxwZXIuaXNFcXVhbChjaGFuZ2UucHJldmlvdXNWYWx1ZSwgY2hhbmdlLmN1cnJlbnRWYWx1ZSlcbiAgICApO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZvZWhuLXRhYmxlJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZm9laG4tdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2ZvZWhuLXRhYmxlLmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBGb2VoblRhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgICBASW5wdXQoKVxuICAgIGl0ZW1zUGVyUGFnZSA9IDEwO1xuXG4gICAgQElucHV0KClcbiAgICBpZCA9ICdmb2Vobi10YWJsZSc7XG5cbiAgICBASW5wdXQoKVxuICAgIHByZXZpb3VzTGFiZWwgPSAnUHLDqWPDqWRlbnQnO1xuXG4gICAgQElucHV0KClcbiAgICBuZXh0TGFiZWwgPSAnU3VpdmFudCc7XG5cbiAgICBASW5wdXQoKVxuICAgIHRvdGFsRWxlbWVudHM6IG51bWJlcjtcblxuICAgIEBJbnB1dCgpXG4gICAgZml4ZWRQYWdlQ291bnQ6IG51bWJlcjtcblxuICAgIEBJbnB1dCgpXG4gICAgY29sdW1uc0NvbmZpZ3VyYXRpb246IEZvZWhuVGFibGVDb2x1bW5Db25maWd1cmF0aW9uPHVua25vd24+W107XG5cbiAgICBAT3V0cHV0KClcbiAgICBwYWdlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxGb2VoblRhYmxlUGFnZUNoYW5nZUV2ZW50PigpO1xuXG4gICAgQElucHV0KClcbiAgICBzb3J0OiBUYWJsZVNvcnQ7XG5cbiAgICBAT3V0cHV0KClcbiAgICBzb3J0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZVNvcnQ+KCk7XG5cbiAgICBjdXJyZW50UGFnZSA9IDE7XG5cbiAgICBmaWx0ZXJlZExpc3Q6IHVua25vd25bXSA9IFtdO1xuXG4gICAgcHJpdmF0ZSBfbGlzdDogdW5rbm93bltdO1xuXG4gICAgQElucHV0KClcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgdHJhY2tCeUZuID0gKGluZGV4OiBudW1iZXIsIGl0ZW06IHVua25vd24pOiBudW1iZXIgPT4gaW5kZXg7XG5cbiAgICBASW5wdXQoKVxuICAgIHNldCBsaXN0KGxpc3Q6IHVua25vd25bXSkge1xuICAgICAgICB0aGlzLl9saXN0ID0gbGlzdDtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGl0ZW1zUGVyUGFnZUNoYW5nZTogU2ltcGxlQ2hhbmdlID0gY2hhbmdlcy5pdGVtc1BlclBhZ2U7XG4gICAgICAgIGNvbnN0IGxpc3RDaGFuZ2U6IFNpbXBsZUNoYW5nZSA9IGNoYW5nZXMubGlzdDtcbiAgICAgICAgY29uc3QgZml4ZWRQYWdlQ291bnRDaGFuZ2U6IFNpbXBsZUNoYW5nZSA9IGNoYW5nZXMuZml4ZWRQYWdlQ291bnQ7XG4gICAgICAgIGNvbnN0IHNvcnRJbnB1dENoYW5nZTogU2ltcGxlQ2hhbmdlID0gY2hhbmdlcy5zb3J0O1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICFoYXNJbnB1dENoYW5nZWQoaXRlbXNQZXJQYWdlQ2hhbmdlKSAmJlxuICAgICAgICAgICAgIWhhc0lucHV0Q2hhbmdlZChsaXN0Q2hhbmdlKSAmJlxuICAgICAgICAgICAgIWhhc0lucHV0Q2hhbmdlZChmaXhlZFBhZ2VDb3VudENoYW5nZSkgJiZcbiAgICAgICAgICAgICFoYXNJbnB1dENoYW5nZWQoc29ydElucHV0Q2hhbmdlKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYnVpbGRGaWx0ZXJlZExpc3QoKTtcbiAgICB9XG5cbiAgICBwcmV2aW91c1BhZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLmN1cnJlbnRQYWdlIC0gMTtcbiAgICAgICAgdGhpcy5idWlsZEZpbHRlcmVkTGlzdCgpO1xuICAgICAgICB0aGlzLnBhZ2VDaGFuZ2UubmV4dCh7XG4gICAgICAgICAgICBwcmV2aW91c1BhZ2U6IHRoaXMuY3VycmVudFBhZ2UgKyAxLFxuICAgICAgICAgICAgY3VycmVudFBhZ2U6IHRoaXMuY3VycmVudFBhZ2UsXG4gICAgICAgICAgICBwYWdlQ291bnQ6IHRoaXMucGFnZXNDb3VudCgpXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGhhc1ByZXZpb3VzUGFnZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFBhZ2UgPiAxO1xuICAgIH1cblxuICAgIG5leHRQYWdlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5jdXJyZW50UGFnZSArIDE7XG4gICAgICAgIHRoaXMuYnVpbGRGaWx0ZXJlZExpc3QoKTtcblxuICAgICAgICB0aGlzLnBhZ2VDaGFuZ2UubmV4dCh7XG4gICAgICAgICAgICBwcmV2aW91c1BhZ2U6IHRoaXMuY3VycmVudFBhZ2UgLSAxLFxuICAgICAgICAgICAgY3VycmVudFBhZ2U6IHRoaXMuY3VycmVudFBhZ2UsXG4gICAgICAgICAgICBwYWdlQ291bnQ6IHRoaXMucGFnZXNDb3VudCgpXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGhhc05leHRQYWdlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50UGFnZSA8IHRoaXMucGFnZXNDb3VudCgpO1xuICAgIH1cblxuICAgIHNob3dQYWdlKHBhZ2U6IG51bWJlciwgZW1pdFBhZ2VDaGFuZ2VFdmVudDogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlID09PSBwYWdlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcmV2aW91c1BhZ2UgPSB0aGlzLmN1cnJlbnRQYWdlO1xuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFnZTtcbiAgICAgICAgdGhpcy5idWlsZEZpbHRlcmVkTGlzdCgpO1xuXG4gICAgICAgIGlmIChlbWl0UGFnZUNoYW5nZUV2ZW50KSB7XG4gICAgICAgICAgICB0aGlzLnBhZ2VDaGFuZ2UubmV4dCh7XG4gICAgICAgICAgICAgICAgcHJldmlvdXNQYWdlLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdlOiB0aGlzLmN1cnJlbnRQYWdlLFxuICAgICAgICAgICAgICAgIHBhZ2VDb3VudDogdGhpcy5wYWdlc0NvdW50KClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcGFnZXNDb3VudCgpOiBudW1iZXIge1xuICAgICAgICBpZiAoISF0aGlzLmZpeGVkUGFnZUNvdW50KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5maXhlZFBhZ2VDb3VudDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9saXN0XG4gICAgICAgICAgICA/IE1hdGguY2VpbCh0aGlzLl9saXN0Lmxlbmd0aCAvIHRoaXMuaXRlbXNQZXJQYWdlKVxuICAgICAgICAgICAgOiAwO1xuICAgIH1cblxuICAgIHRyaWdnZXJTb3J0KHNvcnRBdHRyaWJ1dGU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBsZXQgc29ydERpcmVjdGlvbjogJ0RFU0MnIHwgJ0FTQycgPSAnREVTQyc7XG4gICAgICAgIGlmICh0aGlzLnNvcnQuc29ydEF0dHJpYnV0ZSA9PT0gc29ydEF0dHJpYnV0ZSkge1xuICAgICAgICAgICAgc29ydERpcmVjdGlvbiA9IHRoaXMuc29ydC5zb3J0RGlyZWN0aW9uID09PSAnREVTQycgPyAnQVNDJyA6ICdERVNDJztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc29ydENoYW5nZS5uZXh0KHtcbiAgICAgICAgICAgIHNvcnREaXJlY3Rpb24sXG4gICAgICAgICAgICBzb3J0QXR0cmlidXRlXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRGaWx0ZXJlZExpc3QoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5fbGlzdCkge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJlZExpc3QgPSBbXTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghIXRoaXMuZml4ZWRQYWdlQ291bnQpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRMaXN0ID0gdGhpcy5fbGlzdDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGN1cnJlbnRQYWdlRXhpc3RzID1cbiAgICAgICAgICAgICh0aGlzLmN1cnJlbnRQYWdlIC0gMSkgKiB0aGlzLml0ZW1zUGVyUGFnZSA8PSB0aGlzLl9saXN0Lmxlbmd0aDtcbiAgICAgICAgaWYgKCFjdXJyZW50UGFnZUV4aXN0cykge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RhcnQgPSAodGhpcy5jdXJyZW50UGFnZSAtIDEpICogdGhpcy5pdGVtc1BlclBhZ2U7XG4gICAgICAgIHRoaXMuZmlsdGVyZWRMaXN0ID0gdGhpcy5fbGlzdC5zbGljZShzdGFydCwgc3RhcnQgKyB0aGlzLml0ZW1zUGVyUGFnZSk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInJvd1wiIFtpZF09XCJpZFwiPlxuICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgICAgPGg0ICpuZ0lmPVwiISF0b3RhbEVsZW1lbnRzICYmIHRvdGFsRWxlbWVudHMgPT09IDFcIj5cbiAgICAgICAgICAgIHt7ICdmb2Vobi10YWJsZS50b3RhbEVsZW1lbnRzLjEnIHwgZnJvbURpY3Rpb25hcnkgfX1cbiAgICAgICAgPC9oND5cbiAgICAgICAgPGg0ICpuZ0lmPVwiISF0b3RhbEVsZW1lbnRzICYmIHRvdGFsRWxlbWVudHMgIT09IDFcIj5cbiAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgJ2ZvZWhuLXRhYmxlLnRvdGFsRWxlbWVudHMnXG4gICAgICAgICAgICAgICAgICAgIHwgZnJvbURpY3Rpb25hcnk6IHsgdG90YWw6IHRvdGFsRWxlbWVudHMudG9TdHJpbmcoKSB9XG4gICAgICAgICAgICB9fVxuICAgICAgICA8L2g0PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImNvbC0xMiB0YWJsZS1yZXNwb25zaXZlXCI+XG4gICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLWhvdmVyXCI+XG4gICAgICAgICAgICA8dGhlYWQgY2xhc3M9XCJ2ZC1iZy1wYXR0ZXJuLWJhcnMtZ3JheVwiPlxuICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgPHRoXG4gICAgICAgICAgICAgICAgICAgICAgICBzY29wZT1cImNvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNDb25maWd1cmF0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJjb2wuaWRcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhZmlsdGVyZWRMaXN0Lmxlbmd0aCB8fCAhY29sLnNvcnRBdHRyaWJ1dGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2wuY29sdW1uTGFiZWxLZXkgfCBmcm9tRGljdGlvbmFyeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiISFmaWx0ZXJlZExpc3QubGVuZ3RoICYmICEhY29sLnNvcnRBdHRyaWJ1dGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9XCIjXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ2ZC10ZXh0LXRoaW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJTb3J0KGNvbC5zb3J0QXR0cmlidXRlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVHJpZXIgcGFyICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbC5jb2x1bW5MYWJlbEtleSB8IGZyb21EaWN0aW9uYXJ5KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sLmNvbHVtbkxhYmVsS2V5IHwgZnJvbURpY3Rpb25hcnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydC5zb3J0QXR0cmlidXRlID09PSBjb2wuc29ydEF0dHJpYnV0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1sLTNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic29ydC5zb3J0RGlyZWN0aW9uID09PSAnQVNDJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvZWhuLWljb24tY2hldnJvbi11cD48L2ZvZWhuLWljb24tY2hldnJvbi11cD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtbC0zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInNvcnQuc29ydERpcmVjdGlvbiA9PT0gJ0RFU0MnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9laG4taWNvbi1jaGV2cm9uLWRvd24+PC9mb2Vobi1pY29uLWNoZXZyb24tZG93bj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgPHRyXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGl0ZW0gb2YgZmlsdGVyZWRMaXN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFja0J5OiB0cmFja0J5Rm5cbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zQ29uZmlndXJhdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiY29sLmlkICsgJy0nICsgaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiISFjb2wuaXNJbXBvcnRhbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbC5pc0ltcG9ydGFudChpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2VsbC12ZXJ0aWNhbC1hbGlnbi1taWRkbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjMwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjMwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiY29sb3I6IHZhcigtLXJlZClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cImN1cnJlbnRDb2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJpIGJpLWV4Y2xhbWF0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTYgMTZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNy4wMDIgMTFhMSAxIDAgMSAxIDIgMCAxIDEgMCAwIDEtMiAwek03LjEgNC45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUzLjU1MyAwIDAgMS0xLjEgMEw3LjEgNC45OTV6XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNvbC5yb3V0ZXJMaW5rR2V0dGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJjb2wudmFsdWVHZXR0ZXIoaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNlbGwtdmVydGljYWwtYWxpZ24tbWlkZGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhIWNvbC5yb3V0ZXJMaW5rR2V0dGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiY29sLnJvdXRlckxpbmtHZXR0ZXIoaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nPVwibWVyZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNlbGwtdmVydGljYWwtYWxpZ24tbWlkZGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cImNvbC52YWx1ZUdldHRlcihpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICA8dHIgKm5nSWY9XCIhIWNvbHVtbnNDb25maWd1cmF0aW9uICYmICFmaWx0ZXJlZExpc3QubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBbY29sU3Bhbl09XCJjb2x1bW5zQ29uZmlndXJhdGlvbi5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEwMCB0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdmb2Vobi10YWJsZS50b3RhbEVsZW1lbnRzLjAnIHwgZnJvbURpY3Rpb25hcnkgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICA8L3RhYmxlPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIHAtMVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0zIGNvbC1tZC0zIGNvbC1zbS02IGNvbC14cy02XCI+XG4gICAgICAgICAgICAgICAgPG5hdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInZkLXBhZ2luYXRpb25cIlxuICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiUGFnaW5hdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaGFzUHJldmlvdXNQYWdlKClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwidmQtcGFnaW5hdGlvbl9fbGlzdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ2ZC1wYWdpbmF0aW9uX19pdGVtIHZkLXBhZ2luYXRpb25fX2l0ZW0tLXByZXZpb3VzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuLWxpbmsgdmQtcGFnaW5hdGlvbl9fbGluayBidG4tbm8tZXh0cmEgdmQtcGFnaW5hdGlvbl9fbGluay1yZXNldFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJwcmV2aW91c1BhZ2UoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZkLXBhZ2luYXRpb25fX3RpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9laG4taWNvbi1jaGV2cm9uLWxlZnQ+PC9mb2Vobi1pY29uLWNoZXZyb24tbGVmdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHByZXZpb3VzTGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj46PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZkLXBhZ2luYXRpb25fX2xhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjdXJyZW50UGFnZSAtIDEgfX0gc3VyIHt7IHBhZ2VzQ291bnQoKSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgIDwvbmF2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMyBjb2wtbWQtMyBjb2wtc20tNiBjb2wteHMtNlwiPlxuICAgICAgICAgICAgICAgIDxuYXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ2ZC1wYWdpbmF0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlBhZ2luYXRpb25cIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImhhc05leHRQYWdlKClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwidmQtcGFnaW5hdGlvbl9fbGlzdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ2ZC1wYWdpbmF0aW9uX19pdGVtIHZkLXBhZ2luYXRpb25fX2l0ZW0tLW5leHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4tbGluayB2ZC1wYWdpbmF0aW9uX19saW5rIGJ0bi1uby1leHRyYSB2ZC1wYWdpbmF0aW9uX19saW5rLXJlc2V0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm5leHRQYWdlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2ZC1wYWdpbmF0aW9uX190aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgbmV4dExhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9laG4taWNvbi1jaGV2cm9uLXJpZ2h0PjwvZm9laG4taWNvbi1jaGV2cm9uLXJpZ2h0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPjo8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmQtcGFnaW5hdGlvbl9fbGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGN1cnJlbnRQYWdlICsgMSB9fSBzdXIge3sgcGFnZXNDb3VudCgpIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgPC9uYXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|