@openmrs/ngx-formentry 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/abstract-controls-extension/afe-control-type.d.ts +6 -0
- package/abstract-controls-extension/afe-form-array.d.ts +43 -0
- package/abstract-controls-extension/afe-form-control.d.ts +46 -0
- package/abstract-controls-extension/afe-form-group.d.ts +38 -0
- package/abstract-controls-extension/control-extensions.d.ts +4 -0
- package/abstract-controls-extension/index.d.ts +4 -0
- package/abstract-controls-extension/value-change.listener.d.ts +4 -0
- package/bundles/openmrs-ngx-formentry.umd.js +16104 -0
- package/bundles/openmrs-ngx-formentry.umd.js.map +1 -0
- package/change-tracking/control-relation.d.ts +12 -0
- package/change-tracking/control-relations.d.ts +12 -0
- package/components/afe-ng-select.component.d.ts +28 -0
- package/components/appointments-overview/appointments-overview.component.d.ts +17 -0
- package/components/check-box/checkbox.component.d.ts +19 -0
- package/components/check-box/checkbox.module.d.ts +9 -0
- package/components/custom-component-wrapper/custom-component-wrapper..module.d.ts +9 -0
- package/components/custom-component-wrapper/custom-component-wrapper.component.d.ts +12 -0
- package/components/custom-control-wrapper/custom-control-wrapper..module.d.ts +10 -0
- package/components/custom-control-wrapper/custom-control-wrapper.component.d.ts +28 -0
- package/components/date-time-picker/date-picker/date-picker.component.d.ts +45 -0
- package/components/date-time-picker/date-time-picker.component.d.ts +28 -0
- package/components/date-time-picker/date-time-picker.module.d.ts +13 -0
- package/components/date-time-picker/index.d.ts +8 -0
- package/components/date-time-picker/picker-modal/modal.component.d.ts +12 -0
- package/components/date-time-picker/pipes/moment.pipe.d.ts +11 -0
- package/components/date-time-picker/time-picker/time-picker.component.d.ts +32 -0
- package/components/file-upload/file-upload.component.d.ts +29 -0
- package/components/file-upload/file-upload.module.d.ts +12 -0
- package/components/file-upload/secure.pipe.d.ts +26 -0
- package/components/input/input.directive.d.ts +31 -0
- package/components/input/input.module.d.ts +11 -0
- package/components/input/label.component.d.ts +90 -0
- package/components/input/text-area.directive.d.ts +24 -0
- package/components/ngx-datetime-picker/ngx-datetime-picker.component.d.ts +21 -0
- package/components/ngx-datetime-picker/ngx-datetime-picker.module.d.ts +11 -0
- package/components/ngx-pick-datetime/lib/date-time/adapter/date-time-adapter.class.d.ts +189 -0
- package/components/ngx-pick-datetime/lib/date-time/adapter/date-time-format.class.d.ts +15 -0
- package/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time-adapter.class.d.ts +73 -0
- package/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time-format.class.d.ts +5 -0
- package/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time.module.d.ts +12 -0
- package/components/ngx-pick-datetime/lib/date-time/calendar-body.component.d.ts +76 -0
- package/components/ngx-pick-datetime/lib/date-time/calendar-month-view.component.d.ts +139 -0
- package/components/ngx-pick-datetime/lib/date-time/calendar-multi-year-view.component.d.ts +108 -0
- package/components/ngx-pick-datetime/lib/date-time/calendar-year-view.component.d.ts +120 -0
- package/components/ngx-pick-datetime/lib/date-time/calendar.component.d.ts +137 -0
- package/components/ngx-pick-datetime/lib/date-time/date-time-inline.component.d.ts +92 -0
- package/components/ngx-pick-datetime/lib/date-time/date-time-picker-container.component.d.ts +121 -0
- package/components/ngx-pick-datetime/lib/date-time/date-time-picker-input.directive.d.ts +149 -0
- package/components/ngx-pick-datetime/lib/date-time/date-time-picker-intl.service.d.ts +51 -0
- package/components/ngx-pick-datetime/lib/date-time/date-time-picker-trigger.directive.d.ts +20 -0
- package/components/ngx-pick-datetime/lib/date-time/date-time-picker.animations.d.ts +8 -0
- package/components/ngx-pick-datetime/lib/date-time/date-time-picker.component.d.ts +156 -0
- package/components/ngx-pick-datetime/lib/date-time/date-time.class.d.ts +89 -0
- package/components/ngx-pick-datetime/lib/date-time/date-time.module.d.ts +23 -0
- package/components/ngx-pick-datetime/lib/date-time/numberedFixLen.pipe.d.ts +10 -0
- package/components/ngx-pick-datetime/lib/date-time/timer-box.component.d.ts +35 -0
- package/components/ngx-pick-datetime/lib/date-time/timer.component.d.ts +128 -0
- package/components/ngx-pick-datetime/lib/dialog/dialog-config.class.d.ts +93 -0
- package/components/ngx-pick-datetime/lib/dialog/dialog-container.component.d.ts +58 -0
- package/components/ngx-pick-datetime/lib/dialog/dialog-ref.class.d.ts +49 -0
- package/components/ngx-pick-datetime/lib/dialog/dialog.module.d.ts +11 -0
- package/components/ngx-pick-datetime/lib/dialog/dialog.service.d.ts +73 -0
- package/components/ngx-pick-datetime/lib/utils/index.d.ts +4 -0
- package/components/ngx-pick-datetime/lib/utils/object.utils.d.ts +11 -0
- package/components/ngx-remote-select/ngx-remote-select.component.d.ts +40 -0
- package/components/ngx-remote-select/ngx-remote-select.module.d.ts +10 -0
- package/components/ngx-tabset/components/ngx-tab-set.component.d.ts +19 -0
- package/components/ngx-tabset/components/tab.component.d.ts +13 -0
- package/components/ngx-tabset/directives/hover-class.directive.d.ts +11 -0
- package/components/ngx-tabset/modules/ngx-tabset.module.d.ts +19 -0
- package/components/number-input/number-input.component.d.ts +151 -0
- package/components/number-input/number-input.module.d.ts +9 -0
- package/components/radio-button/radio.component.d.ts +22 -0
- package/components/radio-button/radio.module.d.ts +9 -0
- package/components/select/optgroup.directive.d.ts +6 -0
- package/components/select/option.directive.d.ts +6 -0
- package/components/select/select.component.d.ts +115 -0
- package/components/select/select.module.d.ts +11 -0
- package/esm2015/abstract-controls-extension/afe-control-type.js +8 -0
- package/esm2015/abstract-controls-extension/afe-form-array.js +85 -0
- package/esm2015/abstract-controls-extension/afe-form-control.js +88 -0
- package/esm2015/abstract-controls-extension/afe-form-group.js +61 -0
- package/esm2015/abstract-controls-extension/control-extensions.js +5 -0
- package/esm2015/abstract-controls-extension/index.js +5 -0
- package/esm2015/abstract-controls-extension/value-change.listener.js +2 -0
- package/esm2015/change-tracking/control-relation.js +44 -0
- package/esm2015/change-tracking/control-relations.js +32 -0
- package/esm2015/components/afe-ng-select.component.js +101 -0
- package/esm2015/components/appointments-overview/appointments-overview.component.js +121 -0
- package/esm2015/components/check-box/checkbox.component.js +90 -0
- package/esm2015/components/check-box/checkbox.module.js +19 -0
- package/esm2015/components/custom-component-wrapper/custom-component-wrapper..module.js +21 -0
- package/esm2015/components/custom-component-wrapper/custom-component-wrapper.component.js +23 -0
- package/esm2015/components/custom-control-wrapper/custom-control-wrapper..module.js +22 -0
- package/esm2015/components/custom-control-wrapper/custom-control-wrapper.component.js +73 -0
- package/esm2015/components/date-time-picker/date-picker/date-picker.component.js +192 -0
- package/esm2015/components/date-time-picker/date-time-picker.component.js +119 -0
- package/esm2015/components/date-time-picker/date-time-picker.module.js +47 -0
- package/esm2015/components/date-time-picker/index.js +9 -0
- package/esm2015/components/date-time-picker/picker-modal/modal.component.js +31 -0
- package/esm2015/components/date-time-picker/pipes/moment.pipe.js +17 -0
- package/esm2015/components/date-time-picker/time-picker/time-picker.component.js +125 -0
- package/esm2015/components/file-upload/file-upload.component.js +122 -0
- package/esm2015/components/file-upload/file-upload.module.js +39 -0
- package/esm2015/components/file-upload/secure.pipe.js +101 -0
- package/esm2015/components/input/input.directive.js +78 -0
- package/esm2015/components/input/input.module.js +23 -0
- package/esm2015/components/input/label.component.js +263 -0
- package/esm2015/components/input/text-area.directive.js +54 -0
- package/esm2015/components/ngx-datetime-picker/ngx-datetime-picker.component.js +80 -0
- package/esm2015/components/ngx-datetime-picker/ngx-datetime-picker.module.js +38 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/adapter/date-time-adapter.class.js +114 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/adapter/date-time-format.class.js +7 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time-adapter.class.js +347 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time-format.class.js +16 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time.module.js +39 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/calendar-body.component.js +149 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/calendar-month-view.component.js +445 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/calendar-multi-year-view.component.js +378 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/calendar-year-view.component.js +373 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/calendar.component.js +348 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-inline.component.js +265 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker-container.component.js +399 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker-input.directive.js +614 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker-intl.service.js +62 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker-trigger.directive.js +70 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker.animations.js +21 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker.component.js +528 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time.class.js +166 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time.module.js +83 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/numberedFixLen.pipe.js +28 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/timer-box.component.js +96 -0
- package/esm2015/components/ngx-pick-datetime/lib/date-time/timer.component.js +298 -0
- package/esm2015/components/ngx-pick-datetime/lib/dialog/dialog-config.class.js +56 -0
- package/esm2015/components/ngx-pick-datetime/lib/dialog/dialog-container.component.js +247 -0
- package/esm2015/components/ngx-pick-datetime/lib/dialog/dialog-ref.class.js +119 -0
- package/esm2015/components/ngx-pick-datetime/lib/dialog/dialog.module.js +27 -0
- package/esm2015/components/ngx-pick-datetime/lib/dialog/dialog.service.js +233 -0
- package/esm2015/components/ngx-pick-datetime/lib/utils/index.js +5 -0
- package/esm2015/components/ngx-pick-datetime/lib/utils/object.utils.js +26 -0
- package/esm2015/components/ngx-remote-select/ngx-remote-select.component.js +135 -0
- package/esm2015/components/ngx-remote-select/ngx-remote-select.module.js +21 -0
- package/esm2015/components/ngx-tabset/components/ngx-tab-set.component.js +76 -0
- package/esm2015/components/ngx-tabset/components/tab.component.js +37 -0
- package/esm2015/components/ngx-tabset/directives/hover-class.directive.js +30 -0
- package/esm2015/components/ngx-tabset/modules/ngx-tabset.module.js +38 -0
- package/esm2015/components/number-input/number-input.component.js +233 -0
- package/esm2015/components/number-input/number-input.module.js +20 -0
- package/esm2015/components/radio-button/radio.component.js +87 -0
- package/esm2015/components/radio-button/radio.module.js +19 -0
- package/esm2015/components/select/optgroup.directive.js +19 -0
- package/esm2015/components/select/option.directive.js +19 -0
- package/esm2015/components/select/select.component.js +187 -0
- package/esm2015/components/select/select.module.js +23 -0
- package/esm2015/form-entry/control-alerts/alert-helpers.js +40 -0
- package/esm2015/form-entry/control-alerts/can-generate-alert.js +2 -0
- package/esm2015/form-entry/control-calculators/can-calculate.js +2 -0
- package/esm2015/form-entry/control-hiders-disablers/can-disable.js +2 -0
- package/esm2015/form-entry/control-hiders-disablers/can-hide.js +2 -0
- package/esm2015/form-entry/control-hiders-disablers/disabler-helper.js +32 -0
- package/esm2015/form-entry/control-hiders-disablers/hider-helpers.js +40 -0
- package/esm2015/form-entry/data-sources/data-sources.js +30 -0
- package/esm2015/form-entry/data-sources/dummy-data-source.js +104 -0
- package/esm2015/form-entry/directives/collapse-animations.js +11 -0
- package/esm2015/form-entry/directives/collapse.directive.js +172 -0
- package/esm2015/form-entry/directives/historical-value.directive.js +67 -0
- package/esm2015/form-entry/error-renderer/error-renderer.component.js +56 -0
- package/esm2015/form-entry/expression-runner/expression-runner.js +170 -0
- package/esm2015/form-entry/form-entry.module.js +187 -0
- package/esm2015/form-entry/form-factory/control-relations.factory.js +238 -0
- package/esm2015/form-entry/form-factory/form-control.service.js +119 -0
- package/esm2015/form-entry/form-factory/form-node.js +96 -0
- package/esm2015/form-entry/form-factory/form.factory.js +141 -0
- package/esm2015/form-entry/form-factory/form.js +189 -0
- package/esm2015/form-entry/form-factory/hiders-disablers.factory.js +67 -0
- package/esm2015/form-entry/form-factory/question.factory.js +942 -0
- package/esm2015/form-entry/form-factory/show-messages.factory.js +31 -0
- package/esm2015/form-entry/form-factory/validation.factory.js +147 -0
- package/esm2015/form-entry/form-renderer/form-renderer.component.js +268 -0
- package/esm2015/form-entry/helpers/historical-expression-helper-service.js +42 -0
- package/esm2015/form-entry/helpers/historical-field-helper-service.js +39 -0
- package/esm2015/form-entry/helpers/js-expression-helper.js +275 -0
- package/esm2015/form-entry/helpers/risk-dataset-table.js +247 -0
- package/esm2015/form-entry/pipes/time-ago.pipe.js +107 -0
- package/esm2015/form-entry/question-models/checkbox.model.js +11 -0
- package/esm2015/form-entry/question-models/conditional-validation.model.js +9 -0
- package/esm2015/form-entry/question-models/custom-control-question.model.js +10 -0
- package/esm2015/form-entry/question-models/date-question.js +12 -0
- package/esm2015/form-entry/question-models/date-validation.model.js +10 -0
- package/esm2015/form-entry/question-models/file-upload-question.js +13 -0
- package/esm2015/form-entry/question-models/group-question.js +12 -0
- package/esm2015/form-entry/question-models/interfaces/base-options.js +2 -0
- package/esm2015/form-entry/question-models/interfaces/checkbox-options.js +2 -0
- package/esm2015/form-entry/question-models/interfaces/data-source.js +2 -0
- package/esm2015/form-entry/question-models/interfaces/date-question-options.js +2 -0
- package/esm2015/form-entry/question-models/interfaces/file-upload-question-options.js +2 -0
- package/esm2015/form-entry/question-models/interfaces/group-question-options.js +2 -0
- package/esm2015/form-entry/question-models/interfaces/multi-select-options.js +2 -0
- package/esm2015/form-entry/question-models/interfaces/nested-questions.js +7 -0
- package/esm2015/form-entry/question-models/interfaces/radio-button-options.js +2 -0
- package/esm2015/form-entry/question-models/interfaces/repeating-question-options.js +2 -0
- package/esm2015/form-entry/question-models/interfaces/select-option.js +2 -0
- package/esm2015/form-entry/question-models/interfaces/select-question-options.js +2 -0
- package/esm2015/form-entry/question-models/interfaces/test-order-question-options.js +2 -0
- package/esm2015/form-entry/question-models/interfaces/text-area-question-options.js +2 -0
- package/esm2015/form-entry/question-models/interfaces/text-question-options.js +2 -0
- package/esm2015/form-entry/question-models/interfaces/ui-select-question-options.js +2 -0
- package/esm2015/form-entry/question-models/js-expression-validation.model.js +8 -0
- package/esm2015/form-entry/question-models/max-validation.model.js +9 -0
- package/esm2015/form-entry/question-models/min-validation.model.js +9 -0
- package/esm2015/form-entry/question-models/models.js +13 -0
- package/esm2015/form-entry/question-models/multi-select-question.js +11 -0
- package/esm2015/form-entry/question-models/pair.model.js +7 -0
- package/esm2015/form-entry/question-models/question-base.js +26 -0
- package/esm2015/form-entry/question-models/radio-button.model.js +12 -0
- package/esm2015/form-entry/question-models/rendering-type.js +9 -0
- package/esm2015/form-entry/question-models/repeating-question.js +11 -0
- package/esm2015/form-entry/question-models/select-option.js +7 -0
- package/esm2015/form-entry/question-models/select-question.js +12 -0
- package/esm2015/form-entry/question-models/test-order-question.js +15 -0
- package/esm2015/form-entry/question-models/text-area-input-question.js +13 -0
- package/esm2015/form-entry/question-models/text-input-question.js +10 -0
- package/esm2015/form-entry/question-models/ui-select-question.js +11 -0
- package/esm2015/form-entry/question-models/validation.model.js +7 -0
- package/esm2015/form-entry/services/debug-mode.service.js +24 -0
- package/esm2015/form-entry/services/form-errors.service.js +21 -0
- package/esm2015/form-entry/services/form-schema-compiler.service.js +248 -0
- package/esm2015/form-entry/services/historical-encounter-data.service.js +172 -0
- package/esm2015/form-entry/utils/messages.js +12 -0
- package/esm2015/form-entry/validators/conditional-answered.validator.js +46 -0
- package/esm2015/form-entry/validators/conditional-required.validator.js +40 -0
- package/esm2015/form-entry/validators/date.validator.js +18 -0
- package/esm2015/form-entry/validators/future-date-restriction.validator.js +21 -0
- package/esm2015/form-entry/validators/js-expression.validator.js +26 -0
- package/esm2015/form-entry/validators/max-date.validator.js +23 -0
- package/esm2015/form-entry/validators/max.validator.js +17 -0
- package/esm2015/form-entry/validators/min-date.validator.js +23 -0
- package/esm2015/form-entry/validators/min.validator.js +17 -0
- package/esm2015/form-entry/validators/required.validator.js +11 -0
- package/esm2015/form-entry/validators/validations.js +5 -0
- package/esm2015/form-entry/value-adapters/encounter.adapter.js +171 -0
- package/esm2015/form-entry/value-adapters/obs-adapter-helper.js +512 -0
- package/esm2015/form-entry/value-adapters/obs.adapter.js +542 -0
- package/esm2015/form-entry/value-adapters/order.adapter.js +186 -0
- package/esm2015/form-entry/value-adapters/person-attribute.adapter.js +88 -0
- package/esm2015/form-entry/value-adapters/value.adapter.js +2 -0
- package/esm2015/lib/index.js +58 -0
- package/esm2015/openmrs-ngx-formentry.js +5 -0
- package/esm2015/public_api.js +2 -0
- package/esm2015/shared.module.js +21 -0
- package/fesm2015/openmrs-ngx-formentry.js +14323 -0
- package/fesm2015/openmrs-ngx-formentry.js.map +1 -0
- package/form-entry/control-alerts/alert-helpers.d.ts +9 -0
- package/form-entry/control-alerts/can-generate-alert.d.ts +18 -0
- package/form-entry/control-calculators/can-calculate.d.ts +5 -0
- package/form-entry/control-hiders-disablers/can-disable.d.ts +19 -0
- package/form-entry/control-hiders-disablers/can-hide.d.ts +20 -0
- package/form-entry/control-hiders-disablers/disabler-helper.d.ts +7 -0
- package/form-entry/control-hiders-disablers/hider-helpers.d.ts +9 -0
- package/form-entry/data-sources/data-sources.d.ts +10 -0
- package/form-entry/data-sources/dummy-data-source.d.ts +18 -0
- package/form-entry/directives/collapse-animations.d.ts +4 -0
- package/form-entry/directives/collapse.directive.d.ts +45 -0
- package/form-entry/directives/historical-value.directive.d.ts +16 -0
- package/form-entry/error-renderer/error-renderer.component.d.ts +18 -0
- package/form-entry/expression-runner/expression-runner.d.ts +18 -0
- package/form-entry/form-entry.module.d.ts +30 -0
- package/form-entry/form-factory/control-relations.factory.d.ts +18 -0
- package/form-entry/form-factory/form-control.service.d.ts +25 -0
- package/form-entry/form-factory/form-node.d.ts +52 -0
- package/form-entry/form-factory/form.d.ts +28 -0
- package/form-entry/form-factory/form.factory.d.ts +27 -0
- package/form-entry/form-factory/hiders-disablers.factory.d.ts +20 -0
- package/form-entry/form-factory/question.factory.d.ts +62 -0
- package/form-entry/form-factory/show-messages.factory.d.ts +15 -0
- package/form-entry/form-factory/validation.factory.d.ts +25 -0
- package/form-entry/form-renderer/form-renderer.component.d.ts +63 -0
- package/form-entry/helpers/historical-expression-helper-service.d.ts +8 -0
- package/form-entry/helpers/historical-field-helper-service.d.ts +7 -0
- package/form-entry/helpers/js-expression-helper.d.ts +37 -0
- package/form-entry/helpers/risk-dataset-table.d.ts +1 -0
- package/form-entry/pipes/time-ago.pipe.d.ts +14 -0
- package/form-entry/question-models/checkbox.model.d.ts +9 -0
- package/form-entry/question-models/conditional-validation.model.d.ts +6 -0
- package/form-entry/question-models/custom-control-question.model.d.ts +6 -0
- package/form-entry/question-models/date-question.d.ts +7 -0
- package/form-entry/question-models/date-validation.model.d.ts +5 -0
- package/form-entry/question-models/file-upload-question.d.ts +8 -0
- package/form-entry/question-models/group-question.d.ts +8 -0
- package/form-entry/question-models/interfaces/base-options.d.ts +30 -0
- package/form-entry/question-models/interfaces/checkbox-options.d.ts +7 -0
- package/form-entry/question-models/interfaces/data-source.d.ts +10 -0
- package/form-entry/question-models/interfaces/date-question-options.d.ts +3 -0
- package/form-entry/question-models/interfaces/file-upload-question-options.d.ts +5 -0
- package/form-entry/question-models/interfaces/group-question-options.d.ts +5 -0
- package/form-entry/question-models/interfaces/multi-select-options.d.ts +4 -0
- package/form-entry/question-models/interfaces/nested-questions.d.ts +6 -0
- package/form-entry/question-models/interfaces/radio-button-options.d.ts +8 -0
- package/form-entry/question-models/interfaces/repeating-question-options.d.ts +7 -0
- package/form-entry/question-models/interfaces/select-option.d.ts +4 -0
- package/form-entry/question-models/interfaces/select-question-options.d.ts +9 -0
- package/form-entry/question-models/interfaces/test-order-question-options.d.ts +14 -0
- package/form-entry/question-models/interfaces/text-area-question-options.d.ts +5 -0
- package/form-entry/question-models/interfaces/text-question-options.d.ts +4 -0
- package/form-entry/question-models/interfaces/ui-select-question-options.d.ts +9 -0
- package/form-entry/question-models/js-expression-validation.model.d.ts +5 -0
- package/form-entry/question-models/max-validation.model.d.ts +5 -0
- package/form-entry/question-models/min-validation.model.d.ts +5 -0
- package/form-entry/question-models/models.d.ts +16 -0
- package/form-entry/question-models/multi-select-question.d.ts +9 -0
- package/form-entry/question-models/pair.model.d.ts +5 -0
- package/form-entry/question-models/question-base.d.ts +45 -0
- package/form-entry/question-models/radio-button.model.d.ts +7 -0
- package/form-entry/question-models/rendering-type.d.ts +7 -0
- package/form-entry/question-models/repeating-question.d.ts +7 -0
- package/form-entry/question-models/select-option.d.ts +6 -0
- package/form-entry/question-models/select-question.d.ts +10 -0
- package/form-entry/question-models/test-order-question.d.ts +13 -0
- package/form-entry/question-models/text-area-input-question.d.ts +7 -0
- package/form-entry/question-models/text-input-question.d.ts +6 -0
- package/form-entry/question-models/ui-select-question.d.ts +11 -0
- package/form-entry/question-models/validation.model.d.ts +5 -0
- package/form-entry/services/debug-mode.service.d.ts +8 -0
- package/form-entry/services/form-errors.service.d.ts +13 -0
- package/form-entry/services/form-schema-compiler.service.d.ts +23 -0
- package/form-entry/services/historical-encounter-data.service.d.ts +15 -0
- package/form-entry/utils/messages.d.ts +11 -0
- package/form-entry/validators/conditional-answered.validator.d.ts +8 -0
- package/form-entry/validators/conditional-required.validator.d.ts +8 -0
- package/form-entry/validators/date.validator.d.ts +7 -0
- package/form-entry/validators/future-date-restriction.validator.d.ts +7 -0
- package/form-entry/validators/js-expression.validator.d.ts +8 -0
- package/form-entry/validators/max-date.validator.d.ts +6 -0
- package/form-entry/validators/max.validator.d.ts +6 -0
- package/form-entry/validators/min-date.validator.d.ts +6 -0
- package/form-entry/validators/min.validator.d.ts +6 -0
- package/form-entry/validators/required.validator.d.ts +6 -0
- package/form-entry/validators/validations.d.ts +4 -0
- package/form-entry/value-adapters/encounter.adapter.d.ts +26 -0
- package/form-entry/value-adapters/obs-adapter-helper.d.ts +34 -0
- package/form-entry/value-adapters/obs.adapter.d.ts +38 -0
- package/form-entry/value-adapters/order.adapter.d.ts +20 -0
- package/form-entry/value-adapters/person-attribute.adapter.d.ts +15 -0
- package/form-entry/value-adapters/value.adapter.d.ts +5 -0
- package/lib/index.d.ts +58 -0
- package/openmrs-ngx-formentry.d.ts +5 -0
- package/package.json +34 -0
- package/public_api.d.ts +1 -0
- package/shared.module.d.ts +9 -0
- package/styles/ngx-formentry.css +374 -0
- package/styles/picker.min.css +770 -0
|
@@ -0,0 +1,445 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, HostBinding, Inject, Input, Optional, Output, ViewChild } from '@angular/core';
|
|
2
|
+
import { CalendarCell, OwlCalendarBodyComponent } from './calendar-body.component';
|
|
3
|
+
import { DateTimeAdapter } from './adapter/date-time-adapter.class';
|
|
4
|
+
import { OWL_DATE_TIME_FORMATS } from './adapter/date-time-format.class';
|
|
5
|
+
import { Subscription } from 'rxjs';
|
|
6
|
+
import { DOWN_ARROW, END, ENTER, HOME, LEFT_ARROW, PAGE_DOWN, PAGE_UP, RIGHT_ARROW, UP_ARROW } from '@angular/cdk/keycodes';
|
|
7
|
+
import { coerceNumberProperty } from '@angular/cdk/coercion';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
import * as i1 from "./adapter/date-time-adapter.class";
|
|
10
|
+
import * as i2 from "./calendar-body.component";
|
|
11
|
+
import * as i3 from "@angular/common";
|
|
12
|
+
const DAYS_PER_WEEK = 7;
|
|
13
|
+
const WEEKS_PER_VIEW = 6;
|
|
14
|
+
export class OwlMonthViewComponent {
|
|
15
|
+
constructor(cdRef, dateTimeAdapter, dateTimeFormats) {
|
|
16
|
+
this.cdRef = cdRef;
|
|
17
|
+
this.dateTimeAdapter = dateTimeAdapter;
|
|
18
|
+
this.dateTimeFormats = dateTimeFormats;
|
|
19
|
+
/**
|
|
20
|
+
* Whether to hide dates in other months at the start or end of the current month.
|
|
21
|
+
* */
|
|
22
|
+
this.hideOtherMonths = false;
|
|
23
|
+
/**
|
|
24
|
+
* Define the first day of a week
|
|
25
|
+
* Sunday: 0 ~ Saturday: 6
|
|
26
|
+
* */
|
|
27
|
+
this._firstDayOfWeek = 0;
|
|
28
|
+
/**
|
|
29
|
+
* The select mode of the picker;
|
|
30
|
+
* */
|
|
31
|
+
this._selectMode = 'single';
|
|
32
|
+
this._selecteds = [];
|
|
33
|
+
this.localeSub = Subscription.EMPTY;
|
|
34
|
+
this.initiated = false;
|
|
35
|
+
/**
|
|
36
|
+
* An array to hold all selectedDates' value
|
|
37
|
+
* the value is the day number in current month
|
|
38
|
+
* */
|
|
39
|
+
this.selectedDates = [];
|
|
40
|
+
/**
|
|
41
|
+
* Callback to invoke when a new date is selected
|
|
42
|
+
* */
|
|
43
|
+
this.selectedChange = new EventEmitter();
|
|
44
|
+
/**
|
|
45
|
+
* Callback to invoke when any date is selected.
|
|
46
|
+
* */
|
|
47
|
+
this.userSelection = new EventEmitter();
|
|
48
|
+
/** Emits when any date is activated. */
|
|
49
|
+
this.pickerMomentChange = new EventEmitter();
|
|
50
|
+
}
|
|
51
|
+
get owlDTCalendarView() {
|
|
52
|
+
return true;
|
|
53
|
+
}
|
|
54
|
+
get firstDayOfWeek() {
|
|
55
|
+
return this._firstDayOfWeek;
|
|
56
|
+
}
|
|
57
|
+
set firstDayOfWeek(val) {
|
|
58
|
+
val = coerceNumberProperty(val);
|
|
59
|
+
if (val >= 0 && val <= 6 && val !== this._firstDayOfWeek) {
|
|
60
|
+
this._firstDayOfWeek = val;
|
|
61
|
+
if (this.initiated) {
|
|
62
|
+
this.generateWeekDays();
|
|
63
|
+
this.generateCalendar();
|
|
64
|
+
this.cdRef.markForCheck();
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
get selectMode() {
|
|
69
|
+
return this._selectMode;
|
|
70
|
+
}
|
|
71
|
+
set selectMode(val) {
|
|
72
|
+
this._selectMode = val;
|
|
73
|
+
if (this.initiated) {
|
|
74
|
+
this.generateCalendar();
|
|
75
|
+
this.cdRef.markForCheck();
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
get selected() {
|
|
79
|
+
return this._selected;
|
|
80
|
+
}
|
|
81
|
+
set selected(value) {
|
|
82
|
+
const oldSelected = this._selected;
|
|
83
|
+
value = this.dateTimeAdapter.deserialize(value);
|
|
84
|
+
this._selected = this.getValidDate(value);
|
|
85
|
+
if (!this.dateTimeAdapter.isSameDay(oldSelected, this._selected)) {
|
|
86
|
+
this.setSelectedDates();
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
get selecteds() {
|
|
90
|
+
return this._selecteds;
|
|
91
|
+
}
|
|
92
|
+
set selecteds(values) {
|
|
93
|
+
this._selecteds = values.map((v) => {
|
|
94
|
+
v = this.dateTimeAdapter.deserialize(v);
|
|
95
|
+
return this.getValidDate(v);
|
|
96
|
+
});
|
|
97
|
+
this.setSelectedDates();
|
|
98
|
+
}
|
|
99
|
+
get pickerMoment() {
|
|
100
|
+
return this._pickerMoment;
|
|
101
|
+
}
|
|
102
|
+
set pickerMoment(value) {
|
|
103
|
+
const oldMoment = this._pickerMoment;
|
|
104
|
+
value = this.dateTimeAdapter.deserialize(value);
|
|
105
|
+
this._pickerMoment = this.getValidDate(value) || this.dateTimeAdapter.now();
|
|
106
|
+
this.firstDateOfMonth = this.dateTimeAdapter.createDate(this.dateTimeAdapter.getYear(this._pickerMoment), this.dateTimeAdapter.getMonth(this._pickerMoment), 1);
|
|
107
|
+
if (!this.isSameMonth(oldMoment, this._pickerMoment) && this.initiated) {
|
|
108
|
+
this.generateCalendar();
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
get dateFilter() {
|
|
112
|
+
return this._dateFilter;
|
|
113
|
+
}
|
|
114
|
+
set dateFilter(filter) {
|
|
115
|
+
this._dateFilter = filter;
|
|
116
|
+
if (this.initiated) {
|
|
117
|
+
this.generateCalendar();
|
|
118
|
+
this.cdRef.markForCheck();
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
get minDate() {
|
|
122
|
+
return this._minDate;
|
|
123
|
+
}
|
|
124
|
+
set minDate(value) {
|
|
125
|
+
value = this.dateTimeAdapter.deserialize(value);
|
|
126
|
+
this._minDate = this.getValidDate(value);
|
|
127
|
+
if (this.initiated) {
|
|
128
|
+
this.generateCalendar();
|
|
129
|
+
this.cdRef.markForCheck();
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
get maxDate() {
|
|
133
|
+
return this._maxDate;
|
|
134
|
+
}
|
|
135
|
+
set maxDate(value) {
|
|
136
|
+
value = this.dateTimeAdapter.deserialize(value);
|
|
137
|
+
this._maxDate = this.getValidDate(value);
|
|
138
|
+
if (this.initiated) {
|
|
139
|
+
this.generateCalendar();
|
|
140
|
+
this.cdRef.markForCheck();
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
get weekdays() {
|
|
144
|
+
return this._weekdays;
|
|
145
|
+
}
|
|
146
|
+
get days() {
|
|
147
|
+
return this._days;
|
|
148
|
+
}
|
|
149
|
+
get activeCell() {
|
|
150
|
+
if (this.pickerMoment) {
|
|
151
|
+
return (this.dateTimeAdapter.getDate(this.pickerMoment) +
|
|
152
|
+
this.firstRowOffset -
|
|
153
|
+
1);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
get isInSingleMode() {
|
|
157
|
+
return this.selectMode === 'single';
|
|
158
|
+
}
|
|
159
|
+
get isInRangeMode() {
|
|
160
|
+
return (this.selectMode === 'range' ||
|
|
161
|
+
this.selectMode === 'rangeFrom' ||
|
|
162
|
+
this.selectMode === 'rangeTo');
|
|
163
|
+
}
|
|
164
|
+
ngOnInit() {
|
|
165
|
+
this.generateWeekDays();
|
|
166
|
+
this.localeSub = this.dateTimeAdapter.localeChanges.subscribe(() => {
|
|
167
|
+
this.generateWeekDays();
|
|
168
|
+
this.generateCalendar();
|
|
169
|
+
this.cdRef.markForCheck();
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
ngAfterContentInit() {
|
|
173
|
+
this.generateCalendar();
|
|
174
|
+
this.initiated = true;
|
|
175
|
+
}
|
|
176
|
+
ngOnDestroy() {
|
|
177
|
+
this.localeSub.unsubscribe();
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Handle a calendarCell selected
|
|
181
|
+
*/
|
|
182
|
+
selectCalendarCell(cell) {
|
|
183
|
+
// Cases in which the date would not be selected
|
|
184
|
+
// 1, the calendar cell is NOT enabled (is NOT valid)
|
|
185
|
+
// 2, the selected date is NOT in current picker's month and the hideOtherMonths is enabled
|
|
186
|
+
if (!cell.enabled || (this.hideOtherMonths && cell.out)) {
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
this.selectDate(cell.value);
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Handle a new date selected
|
|
193
|
+
*/
|
|
194
|
+
selectDate(date) {
|
|
195
|
+
const daysDiff = date - 1;
|
|
196
|
+
const selected = this.dateTimeAdapter.addCalendarDays(this.firstDateOfMonth, daysDiff);
|
|
197
|
+
this.selectedChange.emit(selected);
|
|
198
|
+
this.userSelection.emit();
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Handle keydown event on calendar body
|
|
202
|
+
*/
|
|
203
|
+
handleCalendarKeydown(event) {
|
|
204
|
+
let moment;
|
|
205
|
+
switch (event.keyCode) {
|
|
206
|
+
// minus 1 day
|
|
207
|
+
case LEFT_ARROW:
|
|
208
|
+
moment = this.dateTimeAdapter.addCalendarDays(this.pickerMoment, -1);
|
|
209
|
+
this.pickerMomentChange.emit(moment);
|
|
210
|
+
break;
|
|
211
|
+
// add 1 day
|
|
212
|
+
case RIGHT_ARROW:
|
|
213
|
+
moment = this.dateTimeAdapter.addCalendarDays(this.pickerMoment, 1);
|
|
214
|
+
this.pickerMomentChange.emit(moment);
|
|
215
|
+
break;
|
|
216
|
+
// minus 1 week
|
|
217
|
+
case UP_ARROW:
|
|
218
|
+
moment = this.dateTimeAdapter.addCalendarDays(this.pickerMoment, -7);
|
|
219
|
+
this.pickerMomentChange.emit(moment);
|
|
220
|
+
break;
|
|
221
|
+
// add 1 week
|
|
222
|
+
case DOWN_ARROW:
|
|
223
|
+
moment = this.dateTimeAdapter.addCalendarDays(this.pickerMoment, 7);
|
|
224
|
+
this.pickerMomentChange.emit(moment);
|
|
225
|
+
break;
|
|
226
|
+
// move to first day of current month
|
|
227
|
+
case HOME:
|
|
228
|
+
moment = this.dateTimeAdapter.addCalendarDays(this.pickerMoment, 1 - this.dateTimeAdapter.getDate(this.pickerMoment));
|
|
229
|
+
this.pickerMomentChange.emit(moment);
|
|
230
|
+
break;
|
|
231
|
+
// move to last day of current month
|
|
232
|
+
case END:
|
|
233
|
+
moment = this.dateTimeAdapter.addCalendarDays(this.pickerMoment, this.dateTimeAdapter.getNumDaysInMonth(this.pickerMoment) -
|
|
234
|
+
this.dateTimeAdapter.getDate(this.pickerMoment));
|
|
235
|
+
this.pickerMomentChange.emit(moment);
|
|
236
|
+
break;
|
|
237
|
+
// minus 1 month (or 1 year)
|
|
238
|
+
case PAGE_UP:
|
|
239
|
+
moment = event.altKey
|
|
240
|
+
? this.dateTimeAdapter.addCalendarYears(this.pickerMoment, -1)
|
|
241
|
+
: this.dateTimeAdapter.addCalendarMonths(this.pickerMoment, -1);
|
|
242
|
+
this.pickerMomentChange.emit(moment);
|
|
243
|
+
break;
|
|
244
|
+
// add 1 month (or 1 year)
|
|
245
|
+
case PAGE_DOWN:
|
|
246
|
+
moment = event.altKey
|
|
247
|
+
? this.dateTimeAdapter.addCalendarYears(this.pickerMoment, 1)
|
|
248
|
+
: this.dateTimeAdapter.addCalendarMonths(this.pickerMoment, 1);
|
|
249
|
+
this.pickerMomentChange.emit(moment);
|
|
250
|
+
break;
|
|
251
|
+
// select the pickerMoment
|
|
252
|
+
case ENTER:
|
|
253
|
+
if (!this.dateFilter || this.dateFilter(this.pickerMoment)) {
|
|
254
|
+
this.selectDate(this.dateTimeAdapter.getDate(this.pickerMoment));
|
|
255
|
+
}
|
|
256
|
+
break;
|
|
257
|
+
default:
|
|
258
|
+
return;
|
|
259
|
+
}
|
|
260
|
+
this.focusActiveCell();
|
|
261
|
+
event.preventDefault();
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Generate the calendar weekdays array
|
|
265
|
+
* */
|
|
266
|
+
generateWeekDays() {
|
|
267
|
+
const longWeekdays = this.dateTimeAdapter.getDayOfWeekNames('long');
|
|
268
|
+
const shortWeekdays = this.dateTimeAdapter.getDayOfWeekNames('short');
|
|
269
|
+
const narrowWeekdays = this.dateTimeAdapter.getDayOfWeekNames('narrow');
|
|
270
|
+
const firstDayOfWeek = this.firstDayOfWeek;
|
|
271
|
+
const weekdays = longWeekdays.map((long, i) => {
|
|
272
|
+
return { long, short: shortWeekdays[i], narrow: narrowWeekdays[i] };
|
|
273
|
+
});
|
|
274
|
+
this._weekdays = weekdays
|
|
275
|
+
.slice(firstDayOfWeek)
|
|
276
|
+
.concat(weekdays.slice(0, firstDayOfWeek));
|
|
277
|
+
this.dateNames = this.dateTimeAdapter.getDateNames();
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Generate the calendar days array
|
|
282
|
+
* */
|
|
283
|
+
generateCalendar() {
|
|
284
|
+
if (!this.pickerMoment) {
|
|
285
|
+
return;
|
|
286
|
+
}
|
|
287
|
+
this.todayDate = null;
|
|
288
|
+
// the first weekday of the month
|
|
289
|
+
const startWeekdayOfMonth = this.dateTimeAdapter.getDay(this.firstDateOfMonth);
|
|
290
|
+
const firstDayOfWeek = this.firstDayOfWeek;
|
|
291
|
+
// the amount of days from the first date of the month
|
|
292
|
+
// if it is < 0, it means the date is in previous month
|
|
293
|
+
let daysDiff = 0 -
|
|
294
|
+
((startWeekdayOfMonth + (DAYS_PER_WEEK - firstDayOfWeek)) %
|
|
295
|
+
DAYS_PER_WEEK);
|
|
296
|
+
// the index of cell that contains the first date of the month
|
|
297
|
+
this.firstRowOffset = Math.abs(daysDiff);
|
|
298
|
+
this._days = [];
|
|
299
|
+
for (let i = 0; i < WEEKS_PER_VIEW; i++) {
|
|
300
|
+
const week = [];
|
|
301
|
+
for (let j = 0; j < DAYS_PER_WEEK; j++) {
|
|
302
|
+
const date = this.dateTimeAdapter.addCalendarDays(this.firstDateOfMonth, daysDiff);
|
|
303
|
+
const dateCell = this.createDateCell(date, daysDiff);
|
|
304
|
+
// check if the date is today
|
|
305
|
+
if (this.dateTimeAdapter.isSameDay(this.dateTimeAdapter.now(), date)) {
|
|
306
|
+
this.todayDate = daysDiff + 1;
|
|
307
|
+
}
|
|
308
|
+
week.push(dateCell);
|
|
309
|
+
daysDiff += 1;
|
|
310
|
+
}
|
|
311
|
+
this._days.push(week);
|
|
312
|
+
}
|
|
313
|
+
this.setSelectedDates();
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* Creates CalendarCell for days.
|
|
317
|
+
*/
|
|
318
|
+
createDateCell(date, daysDiff) {
|
|
319
|
+
// total days of the month
|
|
320
|
+
const daysInMonth = this.dateTimeAdapter.getNumDaysInMonth(this.pickerMoment);
|
|
321
|
+
const dateNum = this.dateTimeAdapter.getDate(date);
|
|
322
|
+
// const dateName = this.dateNames[dateNum - 1];
|
|
323
|
+
const dateName = dateNum.toString();
|
|
324
|
+
const ariaLabel = this.dateTimeAdapter.format(date, this.dateTimeFormats.dateA11yLabel);
|
|
325
|
+
// check if the date if selectable
|
|
326
|
+
const enabled = this.isDateEnabled(date);
|
|
327
|
+
// check if date is not in current month
|
|
328
|
+
const dayValue = daysDiff + 1;
|
|
329
|
+
const out = dayValue < 1 || dayValue > daysInMonth;
|
|
330
|
+
const cellClass = 'owl-dt-day-' + this.dateTimeAdapter.getDay(date);
|
|
331
|
+
return new CalendarCell(dayValue, dateName, ariaLabel, enabled, out, cellClass);
|
|
332
|
+
}
|
|
333
|
+
/**
|
|
334
|
+
* Check if the date is valid
|
|
335
|
+
*/
|
|
336
|
+
isDateEnabled(date) {
|
|
337
|
+
return (!!date &&
|
|
338
|
+
(!this.dateFilter || this.dateFilter(date)) &&
|
|
339
|
+
(!this.minDate ||
|
|
340
|
+
this.dateTimeAdapter.compare(date, this.minDate) >= 0) &&
|
|
341
|
+
(!this.maxDate || this.dateTimeAdapter.compare(date, this.maxDate) <= 0));
|
|
342
|
+
}
|
|
343
|
+
/**
|
|
344
|
+
* Get a valid date object
|
|
345
|
+
*/
|
|
346
|
+
getValidDate(obj) {
|
|
347
|
+
return this.dateTimeAdapter.isDateInstance(obj) &&
|
|
348
|
+
this.dateTimeAdapter.isValid(obj)
|
|
349
|
+
? obj
|
|
350
|
+
: null;
|
|
351
|
+
}
|
|
352
|
+
/**
|
|
353
|
+
* Check if the give dates are none-null and in the same month
|
|
354
|
+
*/
|
|
355
|
+
isSameMonth(dateLeft, dateRight) {
|
|
356
|
+
return !!(dateLeft &&
|
|
357
|
+
dateRight &&
|
|
358
|
+
this.dateTimeAdapter.isValid(dateLeft) &&
|
|
359
|
+
this.dateTimeAdapter.isValid(dateRight) &&
|
|
360
|
+
this.dateTimeAdapter.getYear(dateLeft) ===
|
|
361
|
+
this.dateTimeAdapter.getYear(dateRight) &&
|
|
362
|
+
this.dateTimeAdapter.getMonth(dateLeft) ===
|
|
363
|
+
this.dateTimeAdapter.getMonth(dateRight));
|
|
364
|
+
}
|
|
365
|
+
/**
|
|
366
|
+
* Set the selectedDates value.
|
|
367
|
+
* In single mode, it has only one value which represent the selected date
|
|
368
|
+
* In range mode, it would has two values, one for the fromValue and the other for the toValue
|
|
369
|
+
* */
|
|
370
|
+
setSelectedDates() {
|
|
371
|
+
this.selectedDates = [];
|
|
372
|
+
if (!this.firstDateOfMonth) {
|
|
373
|
+
return;
|
|
374
|
+
}
|
|
375
|
+
if (this.isInSingleMode && this.selected) {
|
|
376
|
+
const dayDiff = this.dateTimeAdapter.differenceInCalendarDays(this.selected, this.firstDateOfMonth);
|
|
377
|
+
this.selectedDates[0] = dayDiff + 1;
|
|
378
|
+
return;
|
|
379
|
+
}
|
|
380
|
+
if (this.isInRangeMode && this.selecteds) {
|
|
381
|
+
this.selectedDates = this.selecteds.map((selected) => {
|
|
382
|
+
if (this.dateTimeAdapter.isValid(selected)) {
|
|
383
|
+
const dayDiff = this.dateTimeAdapter.differenceInCalendarDays(selected, this.firstDateOfMonth);
|
|
384
|
+
return dayDiff + 1;
|
|
385
|
+
}
|
|
386
|
+
else {
|
|
387
|
+
return null;
|
|
388
|
+
}
|
|
389
|
+
});
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
focusActiveCell() {
|
|
393
|
+
this.calendarBodyElm.focusActiveCell();
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
OwlMonthViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: OwlMonthViewComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.DateTimeAdapter, optional: true }, { token: OWL_DATE_TIME_FORMATS, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
397
|
+
OwlMonthViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: OwlMonthViewComponent, selector: "ofe-owl-date-time-month-view", inputs: { hideOtherMonths: "hideOtherMonths", firstDayOfWeek: "firstDayOfWeek", selectMode: "selectMode", selected: "selected", selecteds: "selecteds", pickerMoment: "pickerMoment", dateFilter: "dateFilter", minDate: "minDate", maxDate: "maxDate" }, outputs: { selectedChange: "selectedChange", userSelection: "userSelection", pickerMomentChange: "pickerMomentChange" }, host: { properties: { "class.owl-dt-calendar-view": "this.owlDTCalendarView" } }, viewQueries: [{ propertyName: "calendarBodyElm", first: true, predicate: OwlCalendarBodyComponent, descendants: true, static: true }], exportAs: ["owlYearView"], ngImport: i0, template: "<table\n class=\"owl-dt-calendar-table owl-dt-calendar-month-table\"\n [class.owl-dt-calendar-only-current-month]=\"hideOtherMonths\"\n>\n <thead class=\"owl-dt-calendar-header\">\n <tr class=\"owl-dt-weekdays\">\n <th\n *ngFor=\"let weekday of weekdays\"\n [attr.aria-label]=\"weekday.long\"\n class=\"owl-dt-weekday\"\n scope=\"col\"\n >\n <span>{{ weekday.short }}</span>\n </th>\n </tr>\n <tr>\n <th\n class=\"owl-dt-calendar-table-divider\"\n aria-hidden=\"true\"\n colspan=\"7\"\n ></th>\n </tr>\n </thead>\n <tbody\n ofe-owl-date-time-calendar-body\n role=\"grid\"\n [rows]=\"days\"\n [todayValue]=\"todayDate\"\n [selectedValues]=\"selectedDates\"\n [selectMode]=\"selectMode\"\n [activeCell]=\"activeCell\"\n (keydown)=\"handleCalendarKeydown($event)\"\n (cellSelected)=\"selectCalendarCell($event)\"\n ></tbody>\n</table>\n", styles: [""], components: [{ type: i2.OwlCalendarBodyComponent, selector: "[ofe-owl-date-time-calendar-body]", inputs: ["activeCell", "rows", "numCols", "cellRatio", "todayValue", "selectedValues", "selectMode"], outputs: ["cellSelected"], exportAs: ["owlDateTimeCalendarBody"] }], directives: [{ type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
398
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: OwlMonthViewComponent, decorators: [{
|
|
399
|
+
type: Component,
|
|
400
|
+
args: [{
|
|
401
|
+
selector: 'ofe-owl-date-time-month-view',
|
|
402
|
+
exportAs: 'owlYearView',
|
|
403
|
+
templateUrl: './calendar-month-view.component.html',
|
|
404
|
+
styleUrls: ['./calendar-month-view.component.scss'],
|
|
405
|
+
changeDetection: ChangeDetectionStrategy.OnPush
|
|
406
|
+
}]
|
|
407
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.DateTimeAdapter, decorators: [{
|
|
408
|
+
type: Optional
|
|
409
|
+
}] }, { type: undefined, decorators: [{
|
|
410
|
+
type: Optional
|
|
411
|
+
}, {
|
|
412
|
+
type: Inject,
|
|
413
|
+
args: [OWL_DATE_TIME_FORMATS]
|
|
414
|
+
}] }]; }, propDecorators: { owlDTCalendarView: [{
|
|
415
|
+
type: HostBinding,
|
|
416
|
+
args: ['class.owl-dt-calendar-view']
|
|
417
|
+
}], hideOtherMonths: [{
|
|
418
|
+
type: Input
|
|
419
|
+
}], firstDayOfWeek: [{
|
|
420
|
+
type: Input
|
|
421
|
+
}], selectMode: [{
|
|
422
|
+
type: Input
|
|
423
|
+
}], selected: [{
|
|
424
|
+
type: Input
|
|
425
|
+
}], selecteds: [{
|
|
426
|
+
type: Input
|
|
427
|
+
}], pickerMoment: [{
|
|
428
|
+
type: Input
|
|
429
|
+
}], dateFilter: [{
|
|
430
|
+
type: Input
|
|
431
|
+
}], minDate: [{
|
|
432
|
+
type: Input
|
|
433
|
+
}], maxDate: [{
|
|
434
|
+
type: Input
|
|
435
|
+
}], selectedChange: [{
|
|
436
|
+
type: Output
|
|
437
|
+
}], userSelection: [{
|
|
438
|
+
type: Output
|
|
439
|
+
}], pickerMomentChange: [{
|
|
440
|
+
type: Output
|
|
441
|
+
}], calendarBodyElm: [{
|
|
442
|
+
type: ViewChild,
|
|
443
|
+
args: [OwlCalendarBodyComponent, { static: true }]
|
|
444
|
+
}] } });
|
|
445
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItbW9udGgtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZm9ybWVudHJ5L3NyYy9jb21wb25lbnRzL25neC1waWNrLWRhdGV0aW1lL2xpYi9kYXRlLXRpbWUvY2FsZW5kYXItbW9udGgtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZm9ybWVudHJ5L3NyYy9jb21wb25lbnRzL25neC1waWNrLWRhdGV0aW1lL2xpYi9kYXRlLXRpbWUvY2FsZW5kYXItbW9udGgtdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLFdBQVcsRUFDWCxNQUFNLEVBQ04sS0FBSyxFQUdMLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxZQUFZLEVBQ1osd0JBQXdCLEVBQ3pCLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3BFLE9BQU8sRUFDTCxxQkFBcUIsRUFFdEIsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXBDLE9BQU8sRUFDTCxVQUFVLEVBQ1YsR0FBRyxFQUNILEtBQUssRUFDTCxJQUFJLEVBQ0osVUFBVSxFQUNWLFNBQVMsRUFDVCxPQUFPLEVBQ1AsV0FBVyxFQUNYLFFBQVEsRUFDVCxNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7OztBQUU3RCxNQUFNLGFBQWEsR0FBRyxDQUFDLENBQUM7QUFDeEIsTUFBTSxjQUFj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O2dCQWdCRixRQUFRO3NCQURYLEtBQUs7Z0JBaUJGLFNBQVM7c0JBRFosS0FBSztnQkFlRixZQUFZO3NCQURmLEtBQUs7Z0JBMEJGLFVBQVU7c0JBRGIsS0FBSztnQkFnQkYsT0FBTztzQkFEVixLQUFLO2dCQWlCRixPQUFPO3NCQURWLEtBQUs7Z0JBeUVHLGNBQWM7c0JBRHRCLE1BQU07Z0JBT0UsYUFBYTtzQkFEckIsTUFBTTtnQkFLRSxrQkFBa0I7c0JBRDFCLE1BQU07Z0JBS1AsZUFBZTtzQkFEZCxTQUFTO3VCQUFDLHdCQUF3QixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQ2FsZW5kYXJDZWxsLFxuICBPd2xDYWxlbmRhckJvZHlDb21wb25lbnRcbn0gZnJvbSAnLi9jYWxlbmRhci1ib2R5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRlVGltZUFkYXB0ZXIgfSBmcm9tICcuL2FkYXB0ZXIvZGF0ZS10aW1lLWFkYXB0ZXIuY2xhc3MnO1xuaW1wb3J0IHtcbiAgT1dMX0RBVEVfVElNRV9GT1JNQVRTLFxuICBPd2xEYXRlVGltZUZvcm1hdHNcbn0gZnJvbSAnLi9hZGFwdGVyL2RhdGUtdGltZS1mb3JtYXQuY2xhc3MnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBTZWxlY3RNb2RlIH0gZnJvbSAnLi9kYXRlLXRpbWUuY2xhc3MnO1xuaW1wb3J0IHtcbiAgRE9XTl9BUlJPVyxcbiAgRU5ELFxuICBFTlRFUixcbiAgSE9NRSxcbiAgTEVGVF9BUlJPVyxcbiAgUEFHRV9ET1dOLFxuICBQQUdFX1VQLFxuICBSSUdIVF9BUlJPVyxcbiAgVVBfQVJST1dcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcbmltcG9ydCB7IGNvZXJjZU51bWJlclByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcblxuY29uc3QgREFZU19QRVJfV0VFSyA9IDc7XG5jb25zdCBXRUVLU19QRVJfVklFVyA9IDY7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ29mZS1vd2wtZGF0ZS10aW1lLW1vbnRoLXZpZXcnLFxuICBleHBvcnRBczogJ293bFllYXJWaWV3JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NhbGVuZGFyLW1vbnRoLXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jYWxlbmRhci1tb250aC12aWV3LmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIE93bE1vbnRoVmlld0NvbXBvbmVudDxUPlxuICBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95IHtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5vd2wtZHQtY2FsZW5kYXItdmlldycpIGdldCBvd2xEVENhbGVuZGFyVmlldygpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGhpZGUgZGF0ZXMgaW4gb3RoZXIgbW9udGhzIGF0IHRoZSBzdGFydCBvciBlbmQgb2YgdGhlIGN1cnJlbnQgbW9udGguXG4gICAqICovXG4gIEBJbnB1dCgpXG4gIGhpZGVPdGhlck1vbnRocyA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBEZWZpbmUgdGhlIGZpcnN0IGRheSBvZiBhIHdlZWtcbiAgICogU3VuZGF5OiAwIH4gU2F0dXJkYXk6IDZcbiAgICogKi9cbiAgcHJpdmF0ZSBfZmlyc3REYXlPZldlZWsgPSAwO1xuICBASW5wdXQoKVxuICBnZXQgZmlyc3REYXlPZldlZWsoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fZmlyc3REYXlPZldlZWs7XG4gIH1cblxuICBzZXQgZmlyc3REYXlPZldlZWsodmFsOiBudW1iZXIpIHtcbiAgICB2YWwgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWwpO1xuICAgIGlmICh2YWwgPj0gMCAmJiB2YWwgPD0gNiAmJiB2YWwgIT09IHRoaXMuX2ZpcnN0RGF5T2ZXZWVrKSB7XG4gICAgICB0aGlzLl9maXJzdERheU9mV2VlayA9IHZhbDtcblxuICAgICAgaWYgKHRoaXMuaW5pdGlhdGVkKSB7XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVXZWVrRGF5cygpO1xuICAgICAgICB0aGlzLmdlbmVyYXRlQ2FsZW5kYXIoKTtcbiAgICAgICAgdGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhlIHNlbGVjdCBtb2RlIG9mIHRoZSBwaWNrZXI7XG4gICAqICovXG4gIHByaXZhdGUgX3NlbGVjdE1vZGU6IFNlbGVjdE1vZGUgPSAnc2luZ2xlJztcbiAgQElucHV0KClcbiAgZ2V0IHNlbGVjdE1vZGUoKTogU2VsZWN0TW9kZSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdE1vZGU7XG4gIH1cblxuICBzZXQgc2VsZWN0TW9kZSh2YWw6IFNlbGVjdE1vZGUpIHtcbiAgICB0aGlzLl9zZWxlY3RNb2RlID0gdmFsO1xuICAgIGlmICh0aGlzLmluaXRpYXRlZCkge1xuICAgICAgdGhpcy5nZW5lcmF0ZUNhbGVuZGFyKCk7XG4gICAgICB0aGlzLmNkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBUaGUgY3VycmVudGx5IHNlbGVjdGVkIGRhdGUuICovXG4gIHByaXZhdGUgX3NlbGVjdGVkOiBUIHwgbnVsbDtcbiAgQElucHV0KClcbiAgZ2V0IHNlbGVjdGVkKCk6IFQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWQ7XG4gIH1cblxuICBzZXQgc2VsZWN0ZWQodmFsdWU6IFQgfCBudWxsKSB7XG4gICAgY29uc3Qgb2xkU2VsZWN0ZWQgPSB0aGlzLl9zZWxlY3RlZDtcbiAgICB2YWx1ZSA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmRlc2VyaWFsaXplKHZhbHVlKTtcbiAgICB0aGlzLl9zZWxlY3RlZCA9IHRoaXMuZ2V0VmFsaWREYXRlKHZhbHVlKTtcblxuICAgIGlmICghdGhpcy5kYXRlVGltZUFkYXB0ZXIuaXNTYW1lRGF5KG9sZFNlbGVjdGVkLCB0aGlzLl9zZWxlY3RlZCkpIHtcbiAgICAgIHRoaXMuc2V0U2VsZWN0ZWREYXRlcygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3NlbGVjdGVkczogVFtdID0gW107XG4gIEBJbnB1dCgpXG4gIGdldCBzZWxlY3RlZHMoKTogVFtdIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRzO1xuICB9XG5cbiAgc2V0IHNlbGVjdGVkcyh2YWx1ZXM6IFRbXSkge1xuICAgIHRoaXMuX3NlbGVjdGVkcyA9IHZhbHVlcy5tYXAoKHYpID0+IHtcbiAgICAgIHYgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5kZXNlcmlhbGl6ZSh2KTtcbiAgICAgIHJldHVybiB0aGlzLmdldFZhbGlkRGF0ZSh2KTtcbiAgICB9KTtcbiAgICB0aGlzLnNldFNlbGVjdGVkRGF0ZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3BpY2tlck1vbWVudDogVDtcbiAgQElucHV0KClcbiAgZ2V0IHBpY2tlck1vbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcGlja2VyTW9tZW50O1xuICB9XG5cbiAgc2V0IHBpY2tlck1vbWVudCh2YWx1ZTogVCkge1xuICAgIGNvbnN0IG9sZE1vbWVudCA9IHRoaXMuX3BpY2tlck1vbWVudDtcbiAgICB2YWx1ZSA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmRlc2VyaWFsaXplKHZhbHVlKTtcbiAgICB0aGlzLl9waWNrZXJNb21lbnQgPSB0aGlzLmdldFZhbGlkRGF0ZSh2YWx1ZSkgfHwgdGhpcy5kYXRlVGltZUFkYXB0ZXIubm93KCk7XG5cbiAgICB0aGlzLmZpcnN0RGF0ZU9mTW9udGggPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5jcmVhdGVEYXRlKFxuICAgICAgdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0WWVhcih0aGlzLl9waWNrZXJNb21lbnQpLFxuICAgICAgdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0TW9udGgodGhpcy5fcGlja2VyTW9tZW50KSxcbiAgICAgIDFcbiAgICApO1xuXG4gICAgaWYgKCF0aGlzLmlzU2FtZU1vbnRoKG9sZE1vbWVudCwgdGhpcy5fcGlja2VyTW9tZW50KSAmJiB0aGlzLmluaXRpYXRlZCkge1xuICAgICAgdGhpcy5nZW5lcmF0ZUNhbGVuZGFyKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdXNlZCB0byBmaWx0ZXIgd2hpY2ggZGF0ZXMgYXJlIHNlbGVjdGFibGVcbiAgICogKi9cbiAgcHJpdmF0ZSBfZGF0ZUZpbHRlcjogKGRhdGU6IFQpID0+IGJvb2xlYW47XG4gIEBJbnB1dCgpXG4gIGdldCBkYXRlRmlsdGVyKCkge1xuICAgIHJldHVybiB0aGlzLl9kYXRlRmlsdGVyO1xuICB9XG5cbiAgc2V0IGRhdGVGaWx0ZXIoZmlsdGVyOiAoZGF0ZTogVCkgPT4gYm9vbGVhbikge1xuICAgIHRoaXMuX2RhdGVGaWx0ZXIgPSBmaWx0ZXI7XG4gICAgaWYgKHRoaXMuaW5pdGlhdGVkKSB7XG4gICAgICB0aGlzLmdlbmVyYXRlQ2FsZW5kYXIoKTtcbiAgICAgIHRoaXMuY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFRoZSBtaW5pbXVtIHNlbGVjdGFibGUgZGF0ZS4gKi9cbiAgcHJpdmF0ZSBfbWluRGF0ZTogVCB8IG51bGw7XG4gIEBJbnB1dCgpXG4gIGdldCBtaW5EYXRlKCk6IFQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fbWluRGF0ZTtcbiAgfVxuXG4gIHNldCBtaW5EYXRlKHZhbHVlOiBUIHwgbnVsbCkge1xuICAgIHZhbHVlID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuZGVzZXJpYWxpemUodmFsdWUpO1xuICAgIHRoaXMuX21pbkRhdGUgPSB0aGlzLmdldFZhbGlkRGF0ZSh2YWx1ZSk7XG4gICAgaWYgKHRoaXMuaW5pdGlhdGVkKSB7XG4gICAgICB0aGlzLmdlbmVyYXRlQ2FsZW5kYXIoKTtcbiAgICAgIHRoaXMuY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFRoZSBtYXhpbXVtIHNlbGVjdGFibGUgZGF0ZS4gKi9cbiAgcHJpdmF0ZSBfbWF4RGF0ZTogVCB8IG51bGw7XG4gIEBJbnB1dCgpXG4gIGdldCBtYXhEYXRlKCk6IFQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4RGF0ZTtcbiAgfVxuXG4gIHNldCBtYXhEYXRlKHZhbHVlOiBUIHwgbnVsbCkge1xuICAgIHZhbHVlID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuZGVzZXJpYWxpemUodmFsdWUpO1xuICAgIHRoaXMuX21heERhdGUgPSB0aGlzLmdldFZhbGlkRGF0ZSh2YWx1ZSk7XG5cbiAgICBpZiAodGhpcy5pbml0aWF0ZWQpIHtcbiAgICAgIHRoaXMuZ2VuZXJhdGVDYWxlbmRhcigpO1xuICAgICAgdGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF93ZWVrZGF5czogQXJyYXk8eyBsb25nOiBzdHJpbmc7IHNob3J0OiBzdHJpbmc7IG5hcnJvdzogc3RyaW5nIH0+O1xuICBnZXQgd2Vla2RheXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzO1xuICB9XG5cbiAgcHJpdmF0ZSBfZGF5czogQ2FsZW5kYXJDZWxsW11bXTtcbiAgZ2V0IGRheXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RheXM7XG4gIH1cblxuICBnZXQgYWN0aXZlQ2VsbCgpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLnBpY2tlck1vbWVudCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0RGF0ZSh0aGlzLnBpY2tlck1vbWVudCkgK1xuICAgICAgICB0aGlzLmZpcnN0Um93T2Zmc2V0IC1cbiAgICAgICAgMVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBnZXQgaXNJblNpbmdsZU1vZGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0TW9kZSA9PT0gJ3NpbmdsZSc7XG4gIH1cblxuICBnZXQgaXNJblJhbmdlTW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5zZWxlY3RNb2RlID09PSAncmFuZ2UnIHx8XG4gICAgICB0aGlzLnNlbGVjdE1vZGUgPT09ICdyYW5nZUZyb20nIHx8XG4gICAgICB0aGlzLnNlbGVjdE1vZGUgPT09ICdyYW5nZVRvJ1xuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGZpcnN0RGF0ZU9mTW9udGg6IFQ7XG5cbiAgcHJpdmF0ZSBsb2NhbGVTdWI6IFN1YnNjcmlwdGlvbiA9IFN1YnNjcmlwdGlvbi5FTVBUWTtcblxuICBwcml2YXRlIGluaXRpYXRlZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgZGF0ZU5hbWVzOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIGRhdGUgb2YgdGhlIG1vbnRoIHRoYXQgdG9kYXkgZmFsbHMgb24uXG4gICAqICovXG4gIHB1YmxpYyB0b2RheURhdGU6IG51bWJlciB8IG51bGw7XG5cbiAgLyoqXG4gICAqIEFuIGFycmF5IHRvIGhvbGQgYWxsIHNlbGVjdGVkRGF0ZXMnIHZhbHVlXG4gICAqIHRoZSB2YWx1ZSBpcyB0aGUgZGF5IG51bWJlciBpbiBjdXJyZW50IG1vbnRoXG4gICAqICovXG4gIHB1YmxpYyBzZWxlY3RlZERhdGVzOiBudW1iZXJbXSA9IFtdO1xuXG4gIC8vIHRoZSBpbmRleCBvZiBjZWxsIHRoYXQgY29udGFpbnMgdGhlIGZpcnN0IGRhdGUgb2YgdGhlIG1vbnRoXG4gIHB1YmxpYyBmaXJzdFJvd09mZnNldDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDYWxsYmFjayB0byBpbnZva2Ugd2hlbiBhIG5ldyBkYXRlIGlzIHNlbGVjdGVkXG4gICAqICovXG4gIEBPdXRwdXQoKVxuICByZWFkb25seSBzZWxlY3RlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VCB8IG51bGw+KCk7XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIHRvIGludm9rZSB3aGVuIGFueSBkYXRlIGlzIHNlbGVjdGVkLlxuICAgKiAqL1xuICBAT3V0cHV0KClcbiAgcmVhZG9ubHkgdXNlclNlbGVjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAvKiogRW1pdHMgd2hlbiBhbnkgZGF0ZSBpcyBhY3RpdmF0ZWQuICovXG4gIEBPdXRwdXQoKVxuICByZWFkb25seSBwaWNrZXJNb21lbnRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxUPiA9IG5ldyBFdmVudEVtaXR0ZXI8VD4oKTtcblxuICAvKiogVGhlIGJvZHkgb2YgY2FsZW5kYXIgdGFibGUgKi9cbiAgQFZpZXdDaGlsZChPd2xDYWxlbmRhckJvZHlDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pXG4gIGNhbGVuZGFyQm9keUVsbTogT3dsQ2FsZW5kYXJCb2R5Q29tcG9uZW50O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgZGF0ZVRpbWVBZGFwdGVyOiBEYXRlVGltZUFkYXB0ZXI8VD4sXG4gICAgQE9wdGlvbmFsKClcbiAgICBASW5qZWN0KE9XTF9EQVRFX1RJTUVfRk9STUFUUylcbiAgICBwcml2YXRlIGRhdGVUaW1lRm9ybWF0czogT3dsRGF0ZVRpbWVGb3JtYXRzXG4gICkge31cblxuICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5nZW5lcmF0ZVdlZWtEYXlzKCk7XG5cbiAgICB0aGlzLmxvY2FsZVN1YiA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmxvY2FsZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuZ2VuZXJhdGVXZWVrRGF5cygpO1xuICAgICAgdGhpcy5nZW5lcmF0ZUNhbGVuZGFyKCk7XG4gICAgICB0aGlzLmNkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmdlbmVyYXRlQ2FsZW5kYXIoKTtcbiAgICB0aGlzLmluaXRpYXRlZCA9IHRydWU7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5sb2NhbGVTdWIudW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgYSBjYWxlbmRhckNlbGwgc2VsZWN0ZWRcbiAgICovXG4gIHB1YmxpYyBzZWxlY3RDYWxlbmRhckNlbGwoY2VsbDogQ2FsZW5kYXJDZWxsKTogdm9pZCB7XG4gICAgLy8gQ2FzZXMgaW4gd2hpY2ggdGhlIGRhdGUgd291bGQgbm90IGJlIHNlbGVjdGVkXG4gICAgLy8gMSwgdGhlIGNhbGVuZGFyIGNlbGwgaXMgTk9UIGVuYWJsZWQgKGlzIE5PVCB2YWxpZClcbiAgICAvLyAyLCB0aGUgc2VsZWN0ZWQgZGF0ZSBpcyBOT1QgaW4gY3VycmVudCBwaWNrZXIncyBtb250aCBhbmQgdGhlIGhpZGVPdGhlck1vbnRocyBpcyBlbmFibGVkXG4gICAgaWYgKCFjZWxsLmVuYWJsZWQgfHwgKHRoaXMuaGlkZU90aGVyTW9udGhzICYmIGNlbGwub3V0KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2VsZWN0RGF0ZShjZWxsLnZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgYSBuZXcgZGF0ZSBzZWxlY3RlZFxuICAgKi9cbiAgcHJpdmF0ZSBzZWxlY3REYXRlKGRhdGU6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGRheXNEaWZmID0gZGF0ZSAtIDE7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5hZGRDYWxlbmRhckRheXMoXG4gICAgICB0aGlzLmZpcnN0RGF0ZU9mTW9udGgsXG4gICAgICBkYXlzRGlmZlxuICAgICk7XG5cbiAgICB0aGlzLnNlbGVjdGVkQ2hhbmdlLmVtaXQoc2VsZWN0ZWQpO1xuICAgIHRoaXMudXNlclNlbGVjdGlvbi5lbWl0KCk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGtleWRvd24gZXZlbnQgb24gY2FsZW5kYXIgYm9keVxuICAgKi9cbiAgcHVibGljIGhhbmRsZUNhbGVuZGFyS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGxldCBtb21lbnQ7XG4gICAgc3dpdGNoIChldmVudC5rZXlDb2RlKSB7XG4gICAgICAvLyBtaW51cyAxIGRheVxuICAgICAgY2FzZSBMRUZUX0FSUk9XOlxuICAgICAgICBtb21lbnQgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5hZGRDYWxlbmRhckRheXModGhpcy5waWNrZXJNb21lbnQsIC0xKTtcbiAgICAgICAgdGhpcy5waWNrZXJNb21lbnRDaGFuZ2UuZW1pdChtb21lbnQpO1xuICAgICAgICBicmVhaztcblxuICAgICAgLy8gYWRkIDEgZGF5XG4gICAgICBjYXNlIFJJR0hUX0FSUk9XOlxuICAgICAgICBtb21lbnQgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5hZGRDYWxlbmRhckRheXModGhpcy5waWNrZXJNb21lbnQsIDEpO1xuICAgICAgICB0aGlzLnBpY2tlck1vbWVudENoYW5nZS5lbWl0KG1vbWVudCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICAvLyBtaW51cyAxIHdlZWtcbiAgICAgIGNhc2UgVVBfQVJST1c6XG4gICAgICAgIG1vbWVudCA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmFkZENhbGVuZGFyRGF5cyh0aGlzLnBpY2tlck1vbWVudCwgLTcpO1xuICAgICAgICB0aGlzLnBpY2tlck1vbWVudENoYW5nZS5lbWl0KG1vbWVudCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICAvLyBhZGQgMSB3ZWVrXG4gICAgICBjYXNlIERPV05fQVJST1c6XG4gICAgICAgIG1vbWVudCA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmFkZENhbGVuZGFyRGF5cyh0aGlzLnBpY2tlck1vbWVudCwgNyk7XG4gICAgICAgIHRoaXMucGlja2VyTW9tZW50Q2hhbmdlLmVtaXQobW9tZW50KTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIC8vIG1vdmUgdG8gZmlyc3QgZGF5IG9mIGN1cnJlbnQgbW9udGhcbiAgICAgIGNhc2UgSE9NRTpcbiAgICAgICAgbW9tZW50ID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuYWRkQ2FsZW5kYXJEYXlzKFxuICAgICAgICAgIHRoaXMucGlja2VyTW9tZW50LFxuICAgICAgICAgIDEgLSB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXREYXRlKHRoaXMucGlja2VyTW9tZW50KVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnBpY2tlck1vbWVudENoYW5nZS5lbWl0KG1vbWVudCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICAvLyBtb3ZlIHRvIGxhc3QgZGF5IG9mIGN1cnJlbnQgbW9udGhcbiAgICAgIGNhc2UgRU5EOlxuICAgICAgICBtb21lbnQgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5hZGRDYWxlbmRhckRheXMoXG4gICAgICAgICAgdGhpcy5waWNrZXJNb21lbnQsXG4gICAgICAgICAgdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0TnVtRGF5c0luTW9udGgodGhpcy5waWNrZXJNb21lbnQpIC1cbiAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldERhdGUodGhpcy5waWNrZXJNb21lbnQpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucGlja2VyTW9tZW50Q2hhbmdlLmVtaXQobW9tZW50KTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIC8vIG1pbnVzIDEgbW9udGggKG9yIDEgeWVhcilcbiAgICAgIGNhc2UgUEFHRV9VUDpcbiAgICAgICAgbW9tZW50ID0gZXZlbnQuYWx0S2V5XG4gICAgICAgICAgPyB0aGlzLmRhdGVUaW1lQWRhcHRlci5hZGRDYWxlbmRhclllYXJzKHRoaXMucGlja2VyTW9tZW50LCAtMSlcbiAgICAgICAgICA6IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmFkZENhbGVuZGFyTW9udGhzKHRoaXMucGlja2VyTW9tZW50LCAtMSk7XG4gICAgICAgIHRoaXMucGlja2VyTW9tZW50Q2hhbmdlLmVtaXQobW9tZW50KTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIC8vIGFkZCAxIG1vbnRoIChvciAxIHllYXIpXG4gICAgICBjYXNlIFBBR0VfRE9XTjpcbiAgICAgICAgbW9tZW50ID0gZXZlbnQuYWx0S2V5XG4gICAgICAgICAgPyB0aGlzLmRhdGVUaW1lQWRhcHRlci5hZGRDYWxlbmRhclllYXJzKHRoaXMucGlja2VyTW9tZW50LCAxKVxuICAgICAgICAgIDogdGhpcy5kYXRlVGltZUFkYXB0ZXIuYWRkQ2FsZW5kYXJNb250aHModGhpcy5waWNrZXJNb21lbnQsIDEpO1xuICAgICAgICB0aGlzLnBpY2tlck1vbWVudENoYW5nZS5lbWl0KG1vbWVudCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICAvLyBzZWxlY3QgdGhlIHBpY2tlck1vbWVudFxuICAgICAgY2FzZSBFTlRFUjpcbiAgICAgICAgaWYgKCF0aGlzLmRhdGVGaWx0ZXIgfHwgdGhpcy5kYXRlRmlsdGVyKHRoaXMucGlja2VyTW9tZW50KSkge1xuICAgICAgICAgIHRoaXMuc2VsZWN0RGF0ZSh0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXREYXRlKHRoaXMucGlja2VyTW9tZW50KSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5mb2N1c0FjdGl2ZUNlbGwoKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIHRoZSBjYWxlbmRhciB3ZWVrZGF5cyBhcnJheVxuICAgKiAqL1xuICBwcml2YXRlIGdlbmVyYXRlV2Vla0RheXMoKTogdm9pZCB7XG4gICAgY29uc3QgbG9uZ1dlZWtkYXlzID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0RGF5T2ZXZWVrTmFtZXMoJ2xvbmcnKTtcbiAgICBjb25zdCBzaG9ydFdlZWtkYXlzID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0RGF5T2ZXZWVrTmFtZXMoJ3Nob3J0Jyk7XG4gICAgY29uc3QgbmFycm93V2Vla2RheXMgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXREYXlPZldlZWtOYW1lcygnbmFycm93Jyk7XG4gICAgY29uc3QgZmlyc3REYXlPZldlZWsgPSB0aGlzLmZpcnN0RGF5T2ZXZWVrO1xuXG4gICAgY29uc3Qgd2Vla2RheXMgPSBsb25nV2Vla2RheXMubWFwKChsb25nLCBpKSA9PiB7XG4gICAgICByZXR1cm4geyBsb25nLCBzaG9ydDogc2hvcnRXZWVrZGF5c1tpXSwgbmFycm93OiBuYXJyb3dXZWVrZGF5c1tpXSB9O1xuICAgIH0pO1xuXG4gICAgdGhpcy5fd2Vla2RheXMgPSB3ZWVrZGF5c1xuICAgICAgLnNsaWNlKGZpcnN0RGF5T2ZXZWVrKVxuICAgICAgLmNvbmNhdCh3ZWVrZGF5cy5zbGljZSgwLCBmaXJzdERheU9mV2VlaykpO1xuXG4gICAgdGhpcy5kYXRlTmFtZXMgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXREYXRlTmFtZXMoKTtcblxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSB0aGUgY2FsZW5kYXIgZGF5cyBhcnJheVxuICAgKiAqL1xuICBwcml2YXRlIGdlbmVyYXRlQ2FsZW5kYXIoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnBpY2tlck1vbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudG9kYXlEYXRlID0gbnVsbDtcblxuICAgIC8vIHRoZSBmaXJzdCB3ZWVrZGF5IG9mIHRoZSBtb250aFxuICAgIGNvbnN0IHN0YXJ0V2Vla2RheU9mTW9udGggPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXREYXkoXG4gICAgICB0aGlzLmZpcnN0RGF0ZU9mTW9udGhcbiAgICApO1xuICAgIGNvbnN0IGZpcnN0RGF5T2ZXZWVrID0gdGhpcy5maXJzdERheU9mV2VlaztcblxuICAgIC8vIHRoZSBhbW91bnQgb2YgZGF5cyBmcm9tIHRoZSBmaXJzdCBkYXRlIG9mIHRoZSBtb250aFxuICAgIC8vIGlmIGl0IGlzIDwgMCwgaXQgbWVhbnMgdGhlIGRhdGUgaXMgaW4gcHJldmlvdXMgbW9udGhcbiAgICBsZXQgZGF5c0RpZmYgPVxuICAgICAgMCAtXG4gICAgICAoKHN0YXJ0V2Vla2RheU9mTW9udGggKyAoREFZU19QRVJfV0VFSyAtIGZpcnN0RGF5T2ZXZWVrKSkgJVxuICAgICAgICBEQVlTX1BFUl9XRUVLKTtcblxuICAgIC8vIHRoZSBpbmRleCBvZiBjZWxsIHRoYXQgY29udGFpbnMgdGhlIGZpcnN0IGRhdGUgb2YgdGhlIG1vbnRoXG4gICAgdGhpcy5maXJzdFJvd09mZnNldCA9IE1hdGguYWJzKGRheXNEaWZmKTtcblxuICAgIHRoaXMuX2RheXMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IFdFRUtTX1BFUl9WSUVXOyBpKyspIHtcbiAgICAgIGNvbnN0IHdlZWsgPSBbXTtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgREFZU19QRVJfV0VFSzsgaisrKSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5hZGRDYWxlbmRhckRheXMoXG4gICAgICAgICAgdGhpcy5maXJzdERhdGVPZk1vbnRoLFxuICAgICAgICAgIGRheXNEaWZmXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGRhdGVDZWxsID0gdGhpcy5jcmVhdGVEYXRlQ2VsbChkYXRlLCBkYXlzRGlmZik7XG5cbiAgICAgICAgLy8gY2hlY2sgaWYgdGhlIGRhdGUgaXMgdG9kYXlcbiAgICAgICAgaWYgKHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmlzU2FtZURheSh0aGlzLmRhdGVUaW1lQWRhcHRlci5ub3coKSwgZGF0ZSkpIHtcbiAgICAgICAgICB0aGlzLnRvZGF5RGF0ZSA9IGRheXNEaWZmICsgMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHdlZWsucHVzaChkYXRlQ2VsbCk7XG4gICAgICAgIGRheXNEaWZmICs9IDE7XG4gICAgICB9XG4gICAgICB0aGlzLl9kYXlzLnB1c2god2Vlayk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRTZWxlY3RlZERhdGVzKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBDYWxlbmRhckNlbGwgZm9yIGRheXMuXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZURhdGVDZWxsKGRhdGU6IFQsIGRheXNEaWZmOiBudW1iZXIpOiBDYWxlbmRhckNlbGwge1xuICAgIC8vIHRvdGFsIGRheXMgb2YgdGhlIG1vbnRoXG4gICAgY29uc3QgZGF5c0luTW9udGggPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXROdW1EYXlzSW5Nb250aChcbiAgICAgIHRoaXMucGlja2VyTW9tZW50XG4gICAgKTtcbiAgICBjb25zdCBkYXRlTnVtID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0RGF0ZShkYXRlKTtcbiAgICAvLyBjb25zdCBkYXRlTmFtZSA9IHRoaXMuZGF0ZU5hbWVzW2RhdGVOdW0gLSAxXTtcbiAgICBjb25zdCBkYXRlTmFtZSA9IGRhdGVOdW0udG9TdHJpbmcoKTtcbiAgICBjb25zdCBhcmlhTGFiZWwgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5mb3JtYXQoXG4gICAgICBkYXRlLFxuICAgICAgdGhpcy5kYXRlVGltZUZvcm1hdHMuZGF0ZUExMXlMYWJlbFxuICAgICk7XG5cbiAgICAvLyBjaGVjayBpZiB0aGUgZGF0ZSBpZiBzZWxlY3RhYmxlXG4gICAgY29uc3QgZW5hYmxlZCA9IHRoaXMuaXNEYXRlRW5hYmxlZChkYXRlKTtcblxuICAgIC8vIGNoZWNrIGlmIGRhdGUgaXMgbm90IGluIGN1cnJlbnQgbW9udGhcbiAgICBjb25zdCBkYXlWYWx1ZSA9IGRheXNEaWZmICsgMTtcbiAgICBjb25zdCBvdXQgPSBkYXlWYWx1ZSA8IDEgfHwgZGF5VmFsdWUgPiBkYXlzSW5Nb250aDtcbiAgICBjb25zdCBjZWxsQ2xhc3MgPSAnb3dsLWR0LWRheS0nICsgdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0RGF5KGRhdGUpO1xuXG4gICAgcmV0dXJuIG5ldyBDYWxlbmRhckNlbGwoXG4gICAgICBkYXlWYWx1ZSxcbiAgICAgIGRhdGVOYW1lLFxuICAgICAgYXJpYUxhYmVsLFxuICAgICAgZW5hYmxlZCxcbiAgICAgIG91dCxcbiAgICAgIGNlbGxDbGFzc1xuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhlIGRhdGUgaXMgdmFsaWRcbiAgICovXG4gIHByaXZhdGUgaXNEYXRlRW5hYmxlZChkYXRlOiBUKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgICEhZGF0ZSAmJlxuICAgICAgKCF0aGlzLmRhdGVGaWx0ZXIgfHwgdGhpcy5kYXRlRmlsdGVyKGRhdGUpKSAmJlxuICAgICAgKCF0aGlzLm1pbkRhdGUgfHxcbiAgICAgICAgdGhpcy5kYXRlVGltZUFkYXB0ZXIuY29tcGFyZShkYXRlLCB0aGlzLm1pbkRhdGUpID49IDApICYmXG4gICAgICAoIXRoaXMubWF4RGF0ZSB8fCB0aGlzLmRhdGVUaW1lQWRhcHRlci5jb21wYXJlKGRhdGUsIHRoaXMubWF4RGF0ZSkgPD0gMClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhIHZhbGlkIGRhdGUgb2JqZWN0XG4gICAqL1xuICBwcml2YXRlIGdldFZhbGlkRGF0ZShvYmo6IGFueSk6IFQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5kYXRlVGltZUFkYXB0ZXIuaXNEYXRlSW5zdGFuY2Uob2JqKSAmJlxuICAgICAgdGhpcy5kYXRlVGltZUFkYXB0ZXIuaXNWYWxpZChvYmopXG4gICAgICA/IG9ialxuICAgICAgOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoZSBnaXZlIGRhdGVzIGFyZSBub25lLW51bGwgYW5kIGluIHRoZSBzYW1lIG1vbnRoXG4gICAqL1xuICBwdWJsaWMgaXNTYW1lTW9udGgoZGF0ZUxlZnQ6IFQsIGRhdGVSaWdodDogVCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIShcbiAgICAgIGRhdGVMZWZ0ICYmXG4gICAgICBkYXRlUmlnaHQgJiZcbiAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmlzVmFsaWQoZGF0ZUxlZnQpICYmXG4gICAgICB0aGlzLmRhdGVUaW1lQWRhcHRlci5pc1ZhbGlkKGRhdGVSaWdodCkgJiZcbiAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldFllYXIoZGF0ZUxlZnQpID09PVxuICAgICAgICB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRZZWFyKGRhdGVSaWdodCkgJiZcbiAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldE1vbnRoKGRhdGVMZWZ0KSA9PT1cbiAgICAgICAgdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0TW9udGgoZGF0ZVJpZ2h0KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBzZWxlY3RlZERhdGVzIHZhbHVlLlxuICAgKiBJbiBzaW5nbGUgbW9kZSwgaXQgaGFzIG9ubHkgb25lIHZhbHVlIHdoaWNoIHJlcHJlc2VudCB0aGUgc2VsZWN0ZWQgZGF0ZVxuICAgKiBJbiByYW5nZSBtb2RlLCBpdCB3b3VsZCBoYXMgdHdvIHZhbHVlcywgb25lIGZvciB0aGUgZnJvbVZhbHVlIGFuZCB0aGUgb3RoZXIgZm9yIHRoZSB0b1ZhbHVlXG4gICAqICovXG4gIHByaXZhdGUgc2V0U2VsZWN0ZWREYXRlcygpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkRGF0ZXMgPSBbXTtcblxuICAgIGlmICghdGhpcy5maXJzdERhdGVPZk1vbnRoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNJblNpbmdsZU1vZGUgJiYgdGhpcy5zZWxlY3RlZCkge1xuICAgICAgY29uc3QgZGF5RGlmZiA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyhcbiAgICAgICAgdGhpcy5zZWxlY3RlZCxcbiAgICAgICAgdGhpcy5maXJzdERhdGVPZk1vbnRoXG4gICAgICApO1xuICAgICAgdGhpcy5zZWxlY3RlZERhdGVzWzBdID0gZGF5RGlmZiArIDE7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNJblJhbmdlTW9kZSAmJiB0aGlzLnNlbGVjdGVkcykge1xuICAgICAgdGhpcy5zZWxlY3RlZERhdGVzID0gdGhpcy5zZWxlY3RlZHMubWFwKChzZWxlY3RlZCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5kYXRlVGltZUFkYXB0ZXIuaXNWYWxpZChzZWxlY3RlZCkpIHtcbiAgICAgICAgICBjb25zdCBkYXlEaWZmID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKFxuICAgICAgICAgICAgc2VsZWN0ZWQsXG4gICAgICAgICAgICB0aGlzLmZpcnN0RGF0ZU9mTW9udGhcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiBkYXlEaWZmICsgMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmb2N1c0FjdGl2ZUNlbGwoKSB7XG4gICAgdGhpcy5jYWxlbmRhckJvZHlFbG0uZm9jdXNBY3RpdmVDZWxsKCk7XG4gIH1cbn1cbiIsIjx0YWJsZVxuICBjbGFzcz1cIm93bC1kdC1jYWxlbmRhci10YWJsZSBvd2wtZHQtY2FsZW5kYXItbW9udGgtdGFibGVcIlxuICBbY2xhc3Mub3dsLWR0LWNhbGVuZGFyLW9ubHktY3VycmVudC1tb250aF09XCJoaWRlT3RoZXJNb250aHNcIlxuPlxuICA8dGhlYWQgY2xhc3M9XCJvd2wtZHQtY2FsZW5kYXItaGVhZGVyXCI+XG4gICAgPHRyIGNsYXNzPVwib3dsLWR0LXdlZWtkYXlzXCI+XG4gICAgICA8dGhcbiAgICAgICAgKm5nRm9yPVwibGV0IHdlZWtkYXkgb2Ygd2Vla2RheXNcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIndlZWtkYXkubG9uZ1wiXG4gICAgICAgIGNsYXNzPVwib3dsLWR0LXdlZWtkYXlcIlxuICAgICAgICBzY29wZT1cImNvbFwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuPnt7IHdlZWtkYXkuc2hvcnQgfX08L3NwYW4+XG4gICAgICA8L3RoPlxuICAgIDwvdHI+XG4gICAgPHRyPlxuICAgICAgPHRoXG4gICAgICAgIGNsYXNzPVwib3dsLWR0LWNhbGVuZGFyLXRhYmxlLWRpdmlkZXJcIlxuICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICBjb2xzcGFuPVwiN1wiXG4gICAgICA+PC90aD5cbiAgICA8L3RyPlxuICA8L3RoZWFkPlxuICA8dGJvZHlcbiAgICBvZmUtb3dsLWRhdGUtdGltZS1jYWxlbmRhci1ib2R5XG4gICAgcm9sZT1cImdyaWRcIlxuICAgIFtyb3dzXT1cImRheXNcIlxuICAgIFt0b2RheVZhbHVlXT1cInRvZGF5RGF0ZVwiXG4gICAgW3NlbGVjdGVkVmFsdWVzXT1cInNlbGVjdGVkRGF0ZXNcIlxuICAgIFtzZWxlY3RNb2RlXT1cInNlbGVjdE1vZGVcIlxuICAgIFthY3RpdmVDZWxsXT1cImFjdGl2ZUNlbGxcIlxuICAgIChrZXlkb3duKT1cImhhbmRsZUNhbGVuZGFyS2V5ZG93bigkZXZlbnQpXCJcbiAgICAoY2VsbFNlbGVjdGVkKT1cInNlbGVjdENhbGVuZGFyQ2VsbCgkZXZlbnQpXCJcbiAgPjwvdGJvZHk+XG48L3RhYmxlPlxuIl19
|