@ampath-kenya/ngx-openmrs-formentry 3.0.0-alpha9 → 3.0.0-ampath.1-beta.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 +1 -1
- package/abstract-controls-extension/afe-form-array.d.ts +2 -3
- package/abstract-controls-extension/afe-form-control.d.ts +1 -1
- package/abstract-controls-extension/afe-form-group.d.ts +1 -1
- package/ampath-kenya-ngx-openmrs-formentry.d.ts +48 -74
- package/ampath-kenya-ngx-openmrs-formentry.metadata.json +1 -1
- package/bundles/ampath-kenya-ngx-openmrs-formentry.umd.js +5729 -9376
- package/bundles/ampath-kenya-ngx-openmrs-formentry.umd.js.map +1 -1
- package/bundles/ampath-kenya-ngx-openmrs-formentry.umd.min.js +1 -16
- package/bundles/ampath-kenya-ngx-openmrs-formentry.umd.min.js.map +1 -1
- package/change-tracking/control-relation.d.ts +4 -4
- package/change-tracking/control-relations.d.ts +3 -3
- package/components/check-box/checkbox.component.d.ts +1 -2
- package/components/date-time-picker/date-time-picker.component.d.ts +1 -2
- package/components/date-time-picker/date-time-picker.module.d.ts +0 -3
- package/components/file-upload/file-upload.component.d.ts +25 -0
- package/components/file-upload/file-upload.module.d.ts +2 -0
- package/components/file-upload/secure.pipe.d.ts +5 -5
- package/components/ngx-date-time-picker/ngx-date-time-picker.component.d.ts +52 -0
- package/components/{ngx-datetime-picker/ngx-datetime-picker.module.d.ts → ngx-date-time-picker/ngx-date-time-picker.module.d.ts} +0 -3
- package/components/ngx-time-picker/ngx-time-picker.component.d.ts +13 -0
- package/components/ngx-time-picker/ngx-time-picker.module.d.ts +2 -0
- package/components/{ngx-remote-select/ngx-remote-select.component.d.ts → remote-select/remote-select.component.d.ts} +8 -12
- package/components/remote-select/remote-select.module.d.ts +2 -0
- package/components/select/diacritics.d.ts +844 -0
- package/components/select/option-list.d.ts +36 -0
- package/components/select/option.d.ts +17 -0
- package/components/select/select-dropdown.component.d.ts +40 -0
- package/components/select/select-dropdown.component.style.d.ts +1 -0
- package/components/select/select.component.d.ts +96 -108
- package/components/select/select.component.style.d.ts +1 -0
- package/encounter-viewer/display-controls/file-preview.component.d.ts +25 -0
- package/encounter-viewer/display-controls/question-control.component.d.ts +15 -0
- package/encounter-viewer/display-controls/remote-answer.component.d.ts +17 -0
- package/encounter-viewer/encounter-container/encounter-container.component.d.ts +15 -0
- package/encounter-viewer/encounter-pdf-viewer.service.d.ts +27 -0
- package/encounter-viewer/encounter-view/encounter-viewer.component.d.ts +30 -0
- package/encounter-viewer/encounter-viewer.module.d.ts +2 -0
- package/encounter-viewer/encounter-viewer.service.d.ts +16 -0
- package/esm2015/abstract-controls-extension/afe-control-type.js +2 -1
- package/esm2015/abstract-controls-extension/afe-form-array.js +2 -1
- package/esm2015/abstract-controls-extension/afe-form-control.js +2 -1
- package/esm2015/abstract-controls-extension/afe-form-group.js +2 -1
- package/esm2015/abstract-controls-extension/control-extensions.js +2 -1
- package/esm2015/abstract-controls-extension/index.js +2 -1
- package/esm2015/abstract-controls-extension/value-change.listener.js +2 -2
- package/esm2015/ampath-kenya-ngx-openmrs-formentry.js +40 -65
- package/esm2015/change-tracking/control-relation.js +2 -1
- package/esm2015/change-tracking/control-relations.js +2 -1
- package/esm2015/components/afe-ng-select.component.js +3 -2
- package/esm2015/components/appointments-overview/appointments-overview.component.js +78 -33
- package/esm2015/components/check-box/checkbox.component.js +24 -3
- package/esm2015/components/check-box/checkbox.module.js +3 -2
- package/esm2015/components/date-time-picker/date-picker/date-picker.component.js +93 -4
- package/esm2015/components/date-time-picker/date-time-picker.component.js +109 -5
- package/esm2015/components/date-time-picker/date-time-picker.module.js +3 -2
- package/esm2015/components/date-time-picker/picker-modal/modal.component.js +13 -5
- package/esm2015/components/date-time-picker/pipes/moment.pipe.js +3 -2
- package/esm2015/components/date-time-picker/time-picker/time-picker.component.js +51 -4
- package/esm2015/components/file-upload/file-upload.component.js +130 -0
- package/esm2015/components/file-upload/file-upload.module.js +28 -0
- package/esm2015/components/file-upload/secure.pipe.js +5 -3
- package/esm2015/components/ngx-date-time-picker/ngx-date-time-picker.component.js +259 -0
- package/esm2015/components/ngx-date-time-picker/ngx-date-time-picker.module.js +43 -0
- package/esm2015/components/ngx-time-picker/ngx-time-picker.component.js +78 -0
- package/esm2015/components/ngx-time-picker/ngx-time-picker.module.js +16 -0
- package/esm2015/components/remote-select/remote-select.component.js +171 -0
- package/esm2015/components/remote-select/remote-select.module.js +18 -0
- package/esm2015/components/select/diacritics.js +856 -0
- package/esm2015/components/select/option-list.js +180 -0
- package/esm2015/components/select/option.js +30 -0
- package/esm2015/components/select/select-dropdown.component.js +162 -0
- package/esm2015/components/select/select-dropdown.component.style.js +59 -0
- package/esm2015/components/select/select.component.js +493 -216
- package/esm2015/components/select/select.component.style.js +102 -0
- package/esm2015/components/select/select.module.js +11 -24
- package/esm2015/encounter-viewer/display-controls/file-preview.component.js +111 -0
- package/esm2015/encounter-viewer/display-controls/question-control.component.js +94 -0
- package/esm2015/encounter-viewer/display-controls/remote-answer.component.js +81 -0
- package/esm2015/encounter-viewer/encounter-container/encounter-container.component.js +50 -0
- package/esm2015/encounter-viewer/encounter-pdf-viewer.service.js +437 -0
- package/esm2015/encounter-viewer/encounter-view/encounter-viewer.component.js +301 -0
- package/esm2015/encounter-viewer/encounter-viewer.module.js +36 -0
- package/esm2015/encounter-viewer/encounter-viewer.service.js +162 -0
- package/esm2015/form-entry/control-alerts/alert-helpers.js +2 -1
- package/esm2015/form-entry/control-alerts/can-generate-alert.js +2 -2
- package/esm2015/form-entry/control-calculators/can-calculate.js +2 -2
- package/esm2015/form-entry/control-hiders-disablers/can-disable.js +2 -2
- package/esm2015/form-entry/control-hiders-disablers/can-hide.js +2 -2
- package/esm2015/form-entry/control-hiders-disablers/disabler-helper.js +2 -1
- package/esm2015/form-entry/control-hiders-disablers/hider-helpers.js +2 -1
- package/esm2015/form-entry/data-sources/data-sources.js +5 -3
- package/esm2015/form-entry/data-sources/dummy-data-source.js +2 -1
- package/esm2015/form-entry/directives/historical-value-directive.js +4 -2
- package/esm2015/form-entry/error-renderer/error-renderer.component.js +20 -4
- package/esm2015/form-entry/expression-runner/expression-runner.js +13 -16
- package/esm2015/form-entry/form-entry.module.js +29 -25
- package/esm2015/form-entry/form-factory/control-relations.factory.js +4 -2
- package/esm2015/form-entry/form-factory/form-control.service.js +4 -2
- package/esm2015/form-entry/form-factory/form-node.js +2 -4
- package/esm2015/form-entry/form-factory/form.factory.js +4 -2
- package/esm2015/form-entry/form-factory/form.js +2 -1
- package/esm2015/form-entry/form-factory/hiders-disablers.factory.js +4 -2
- package/esm2015/form-entry/form-factory/question.factory.js +158 -23
- package/esm2015/form-entry/form-factory/show-messages.factory.js +4 -2
- package/esm2015/form-entry/form-factory/validation.factory.js +4 -2
- package/esm2015/form-entry/form-renderer/form-renderer.component.css.js +8 -12
- package/esm2015/form-entry/form-renderer/form-renderer.component.js +458 -9
- package/esm2015/form-entry/helpers/historical-expression-helper-service.js +4 -2
- package/esm2015/form-entry/helpers/historical-field-helper-service.js +2 -5
- package/esm2015/form-entry/helpers/js-expression-helper.js +2 -5
- package/esm2015/form-entry/question-models/checkbox.model.js +2 -1
- package/esm2015/form-entry/question-models/conditional-validation.model.js +2 -1
- package/esm2015/form-entry/question-models/date-question.js +3 -1
- package/esm2015/form-entry/question-models/date-validation.model.js +2 -1
- package/esm2015/form-entry/question-models/decimal-point-validation.model.js +20 -0
- package/esm2015/form-entry/question-models/file-upload-question.js +2 -1
- package/esm2015/form-entry/question-models/group-question.js +2 -1
- package/esm2015/form-entry/question-models/interfaces/base-options.js +2 -2
- package/esm2015/form-entry/question-models/interfaces/checkbox-options.js +2 -2
- package/esm2015/form-entry/question-models/interfaces/data-source.js +2 -2
- package/esm2015/form-entry/question-models/interfaces/date-question-options.js +2 -2
- package/esm2015/form-entry/question-models/interfaces/file-upload-question-options.js +2 -2
- package/esm2015/form-entry/question-models/interfaces/group-question-options.js +2 -2
- package/esm2015/form-entry/question-models/interfaces/multi-select-options.js +2 -2
- package/esm2015/form-entry/question-models/interfaces/nested-questions.js +2 -1
- package/esm2015/form-entry/question-models/interfaces/repeating-question-options.js +2 -2
- package/esm2015/form-entry/question-models/interfaces/select-option.js +2 -2
- package/esm2015/form-entry/question-models/interfaces/select-question-options.js +2 -2
- package/esm2015/form-entry/question-models/interfaces/test-order-question-options.js +2 -2
- package/esm2015/form-entry/question-models/interfaces/text-area-question-options.js +2 -2
- package/esm2015/form-entry/question-models/interfaces/text-question-options.js +2 -2
- package/esm2015/form-entry/question-models/interfaces/time-question-options.js +2 -0
- package/esm2015/form-entry/question-models/interfaces/ui-select-question-options.js +2 -2
- package/esm2015/form-entry/question-models/js-expression-validation.model.js +2 -1
- package/esm2015/form-entry/question-models/max-validation.model.js +2 -1
- package/esm2015/form-entry/question-models/min-validation.model.js +2 -1
- package/esm2015/form-entry/question-models/models.js +2 -1
- package/esm2015/form-entry/question-models/multi-select-question.js +2 -1
- package/esm2015/form-entry/question-models/pair.model.js +2 -1
- package/esm2015/form-entry/question-models/question-base.js +2 -1
- package/esm2015/form-entry/question-models/rendering-type.js +2 -1
- package/esm2015/form-entry/question-models/repeating-question.js +2 -1
- package/esm2015/form-entry/question-models/select-option.js +2 -1
- package/esm2015/form-entry/question-models/select-question.js +2 -1
- package/esm2015/form-entry/question-models/test-order-question.js +2 -1
- package/esm2015/form-entry/question-models/text-area-input-question.js +2 -1
- package/esm2015/form-entry/question-models/text-input-question.js +2 -1
- package/esm2015/form-entry/question-models/time-question.js +11 -0
- package/esm2015/form-entry/question-models/ui-select-question.js +2 -1
- package/esm2015/form-entry/question-models/validation.model.js +2 -1
- package/esm2015/form-entry/services/debug-mode.service.js +4 -2
- package/esm2015/form-entry/services/form-errors.service.js +3 -2
- package/esm2015/form-entry/services/form-schema-compiler.service.js +4 -2
- package/esm2015/form-entry/services/historical-encounter-data.service.js +4 -2
- package/esm2015/form-entry/utils/messages.js +2 -1
- package/esm2015/form-entry/validators/conditional-answered.validator.js +2 -1
- package/esm2015/form-entry/validators/conditional-required.validator.js +2 -1
- package/esm2015/form-entry/validators/date.validator.js +2 -1
- package/esm2015/form-entry/validators/future-date-restriction.validator.js +2 -1
- package/esm2015/form-entry/validators/js-expression.validator.js +2 -1
- package/esm2015/form-entry/validators/max-date.validator.js +2 -1
- package/esm2015/form-entry/validators/max.validator.js +2 -1
- package/esm2015/form-entry/validators/min-date.validator.js +2 -1
- package/esm2015/form-entry/validators/min.validator.js +2 -1
- package/esm2015/form-entry/validators/required.validator.js +2 -1
- package/esm2015/form-entry/validators/validations.js +2 -1
- package/esm2015/form-entry/value-adapters/encounter.adapter.js +5 -3
- package/esm2015/form-entry/value-adapters/obs-adapter-helper.js +5 -11
- package/esm2015/form-entry/value-adapters/obs.adapter.js +5 -6
- package/esm2015/form-entry/value-adapters/order.adapter.js +3 -2
- package/esm2015/form-entry/value-adapters/person-attribute.adapter.js +8 -3
- package/esm2015/form-entry/value-adapters/value.adapter.js +2 -2
- package/esm2015/public_api.js +52 -2
- package/esm2015/shared.module.js +3 -2
- package/esm5/abstract-controls-extension/afe-control-type.js +9 -0
- package/esm5/abstract-controls-extension/afe-form-array.js +99 -0
- package/esm5/abstract-controls-extension/afe-form-control.js +97 -0
- package/esm5/abstract-controls-extension/afe-form-group.js +71 -0
- package/esm5/abstract-controls-extension/control-extensions.js +6 -0
- package/esm5/abstract-controls-extension/index.js +6 -0
- package/esm5/abstract-controls-extension/value-change.listener.js +2 -0
- package/esm5/ampath-kenya-ngx-openmrs-formentry.js +45 -0
- package/esm5/change-tracking/control-relation.js +60 -0
- package/esm5/change-tracking/control-relations.js +47 -0
- package/esm5/components/afe-ng-select.component.js +88 -0
- package/esm5/components/appointments-overview/appointments-overview.component.js +127 -0
- package/esm5/components/check-box/checkbox.component.js +89 -0
- package/esm5/components/check-box/checkbox.module.js +19 -0
- package/esm5/components/date-time-picker/date-picker/date-picker.component.js +188 -0
- package/esm5/components/date-time-picker/date-time-picker.component.js +113 -0
- package/esm5/components/date-time-picker/date-time-picker.module.js +39 -0
- package/esm5/components/date-time-picker/picker-modal/modal.component.js +34 -0
- package/esm5/components/date-time-picker/pipes/moment.pipe.js +18 -0
- package/esm5/components/date-time-picker/time-picker/time-picker.component.js +119 -0
- package/esm5/components/file-upload/file-upload.component.js +128 -0
- package/esm5/components/file-upload/file-upload.module.js +32 -0
- package/esm5/components/file-upload/secure.pipe.js +107 -0
- package/esm5/components/ngx-date-time-picker/ngx-date-time-picker.component.js +221 -0
- package/esm5/components/ngx-date-time-picker/ngx-date-time-picker.module.js +47 -0
- package/esm5/components/ngx-time-picker/ngx-time-picker.component.js +74 -0
- package/esm5/components/ngx-time-picker/ngx-time-picker.module.js +20 -0
- package/esm5/components/remote-select/remote-select.component.js +165 -0
- package/esm5/components/remote-select/remote-select.module.js +22 -0
- package/esm5/components/select/diacritics.js +861 -0
- package/esm5/components/select/option-list.js +225 -0
- package/esm5/components/select/option.js +32 -0
- package/esm5/components/select/select-dropdown.component.js +132 -0
- package/esm5/components/select/select-dropdown.component.style.js +3 -0
- package/esm5/components/select/select.component.js +457 -0
- package/esm5/components/select/select.component.style.js +3 -0
- package/esm5/components/select/select.module.js +20 -0
- package/esm5/encounter-viewer/display-controls/file-preview.component.js +111 -0
- package/esm5/encounter-viewer/display-controls/question-control.component.js +106 -0
- package/esm5/encounter-viewer/display-controls/remote-answer.component.js +88 -0
- package/esm5/encounter-viewer/encounter-container/encounter-container.component.js +47 -0
- package/esm5/encounter-viewer/encounter-pdf-viewer.service.js +523 -0
- package/esm5/encounter-viewer/encounter-view/encounter-viewer.component.js +187 -0
- package/esm5/encounter-viewer/encounter-viewer.module.js +40 -0
- package/esm5/encounter-viewer/encounter-viewer.service.js +167 -0
- package/esm5/form-entry/control-alerts/alert-helpers.js +45 -0
- package/esm5/form-entry/control-alerts/can-generate-alert.js +2 -0
- package/esm5/form-entry/control-calculators/can-calculate.js +2 -0
- package/esm5/form-entry/control-hiders-disablers/can-disable.js +2 -0
- package/esm5/form-entry/control-hiders-disablers/can-hide.js +2 -0
- package/esm5/form-entry/control-hiders-disablers/disabler-helper.js +38 -0
- package/esm5/form-entry/control-hiders-disablers/hider-helpers.js +45 -0
- package/esm5/form-entry/data-sources/data-sources.js +39 -0
- package/esm5/form-entry/data-sources/dummy-data-source.js +107 -0
- package/esm5/form-entry/directives/historical-value-directive.js +74 -0
- package/esm5/form-entry/error-renderer/error-renderer.component.js +64 -0
- package/esm5/form-entry/expression-runner/expression-runner.js +159 -0
- package/esm5/form-entry/form-entry.module.js +111 -0
- package/esm5/form-entry/form-factory/control-relations.factory.js +245 -0
- package/esm5/form-entry/form-factory/form-control.service.js +122 -0
- package/esm5/form-entry/form-factory/form-node.js +117 -0
- package/esm5/form-entry/form-factory/form.factory.js +138 -0
- package/esm5/form-entry/form-factory/form.js +214 -0
- package/esm5/form-entry/form-factory/hiders-disablers.factory.js +70 -0
- package/esm5/form-entry/form-factory/question.factory.js +980 -0
- package/esm5/form-entry/form-factory/show-messages.factory.js +34 -0
- package/esm5/form-entry/form-factory/validation.factory.js +191 -0
- package/esm5/form-entry/form-renderer/form-renderer.component.css.js +3 -0
- package/esm5/form-entry/form-renderer/form-renderer.component.js +219 -0
- package/esm5/form-entry/helpers/historical-expression-helper-service.js +43 -0
- package/esm5/form-entry/helpers/historical-field-helper-service.js +37 -0
- package/esm5/form-entry/helpers/js-expression-helper.js +243 -0
- package/esm5/form-entry/question-models/checkbox.model.js +17 -0
- package/esm5/form-entry/question-models/conditional-validation.model.js +15 -0
- package/esm5/form-entry/question-models/date-question.js +19 -0
- package/esm5/form-entry/question-models/date-validation.model.js +16 -0
- package/esm5/form-entry/question-models/decimal-point-validation.model.js +22 -0
- package/esm5/form-entry/question-models/file-upload-question.js +19 -0
- package/esm5/form-entry/question-models/group-question.js +18 -0
- package/esm5/form-entry/question-models/interfaces/base-options.js +2 -0
- package/esm5/form-entry/question-models/interfaces/checkbox-options.js +2 -0
- package/esm5/form-entry/question-models/interfaces/data-source.js +2 -0
- package/esm5/form-entry/question-models/interfaces/date-question-options.js +2 -0
- package/esm5/form-entry/question-models/interfaces/file-upload-question-options.js +2 -0
- package/esm5/form-entry/question-models/interfaces/group-question-options.js +2 -0
- package/esm5/form-entry/question-models/interfaces/multi-select-options.js +2 -0
- package/esm5/form-entry/question-models/interfaces/nested-questions.js +12 -0
- package/esm5/form-entry/question-models/interfaces/repeating-question-options.js +2 -0
- package/esm5/form-entry/question-models/interfaces/select-option.js +2 -0
- package/esm5/form-entry/question-models/interfaces/select-question-options.js +2 -0
- package/esm5/form-entry/question-models/interfaces/test-order-question-options.js +2 -0
- package/esm5/form-entry/question-models/interfaces/text-area-question-options.js +2 -0
- package/esm5/form-entry/question-models/interfaces/text-question-options.js +2 -0
- package/esm5/form-entry/question-models/interfaces/time-question-options.js +2 -0
- package/esm5/form-entry/question-models/interfaces/ui-select-question-options.js +2 -0
- package/esm5/form-entry/question-models/js-expression-validation.model.js +14 -0
- package/esm5/form-entry/question-models/max-validation.model.js +15 -0
- package/esm5/form-entry/question-models/min-validation.model.js +15 -0
- package/esm5/form-entry/question-models/models.js +13 -0
- package/esm5/form-entry/question-models/multi-select-question.js +17 -0
- package/esm5/form-entry/question-models/pair.model.js +10 -0
- package/esm5/form-entry/question-models/question-base.js +27 -0
- package/esm5/form-entry/question-models/rendering-type.js +10 -0
- package/esm5/form-entry/question-models/repeating-question.js +17 -0
- package/esm5/form-entry/question-models/select-option.js +10 -0
- package/esm5/form-entry/question-models/select-question.js +18 -0
- package/esm5/form-entry/question-models/test-order-question.js +21 -0
- package/esm5/form-entry/question-models/text-area-input-question.js +19 -0
- package/esm5/form-entry/question-models/text-input-question.js +16 -0
- package/esm5/form-entry/question-models/time-question.js +16 -0
- package/esm5/form-entry/question-models/ui-select-question.js +17 -0
- package/esm5/form-entry/question-models/validation.model.js +10 -0
- package/esm5/form-entry/services/debug-mode.service.js +26 -0
- package/esm5/form-entry/services/form-errors.service.js +21 -0
- package/esm5/form-entry/services/form-schema-compiler.service.js +254 -0
- package/esm5/form-entry/services/historical-encounter-data.service.js +180 -0
- package/esm5/form-entry/utils/messages.js +17 -0
- package/esm5/form-entry/validators/conditional-answered.validator.js +50 -0
- package/esm5/form-entry/validators/conditional-required.validator.js +44 -0
- package/esm5/form-entry/validators/date.validator.js +22 -0
- package/esm5/form-entry/validators/future-date-restriction.validator.js +25 -0
- package/esm5/form-entry/validators/js-expression.validator.js +30 -0
- package/esm5/form-entry/validators/max-date.validator.js +28 -0
- package/esm5/form-entry/validators/max.validator.js +22 -0
- package/esm5/form-entry/validators/min-date.validator.js +28 -0
- package/esm5/form-entry/validators/min.validator.js +22 -0
- package/esm5/form-entry/validators/required.validator.js +16 -0
- package/esm5/form-entry/validators/validations.js +9 -0
- package/esm5/form-entry/value-adapters/encounter.adapter.js +178 -0
- package/esm5/form-entry/value-adapters/obs-adapter-helper.js +509 -0
- package/esm5/form-entry/value-adapters/obs.adapter.js +737 -0
- package/esm5/form-entry/value-adapters/order.adapter.js +227 -0
- package/esm5/form-entry/value-adapters/person-attribute.adapter.js +96 -0
- package/esm5/form-entry/value-adapters/value.adapter.js +2 -0
- package/esm5/public_api.js +52 -0
- package/esm5/shared.module.js +20 -0
- package/fesm2015/ampath-kenya-ngx-openmrs-formentry.js +5093 -6889
- package/fesm2015/ampath-kenya-ngx-openmrs-formentry.js.map +1 -1
- package/fesm5/ampath-kenya-ngx-openmrs-formentry.js +10737 -0
- package/fesm5/ampath-kenya-ngx-openmrs-formentry.js.map +1 -0
- package/form-entry/data-sources/data-sources.d.ts +1 -1
- package/form-entry/directives/historical-value-directive.d.ts +2 -2
- package/form-entry/error-renderer/error-renderer.component.d.ts +1 -1
- package/form-entry/expression-runner/expression-runner.d.ts +6 -6
- package/form-entry/form-factory/form-control.service.d.ts +3 -3
- package/form-entry/form-factory/form-node.d.ts +9 -10
- package/form-entry/form-factory/form.d.ts +6 -7
- package/form-entry/form-factory/question.factory.d.ts +7 -1
- package/form-entry/form-factory/validation.factory.d.ts +10 -10
- package/form-entry/form-renderer/form-renderer.component.css.d.ts +1 -1
- package/form-entry/form-renderer/form-renderer.component.d.ts +4 -6
- package/form-entry/helpers/js-expression-helper.d.ts +1 -1
- package/form-entry/question-models/date-question.d.ts +2 -0
- package/form-entry/question-models/decimal-point-validation.model.d.ts +10 -0
- package/form-entry/question-models/interfaces/base-options.d.ts +1 -0
- package/form-entry/question-models/interfaces/time-question-options.d.ts +3 -0
- package/form-entry/question-models/question-base.d.ts +4 -0
- package/form-entry/question-models/rendering-type.d.ts +1 -1
- package/form-entry/question-models/time-question.d.ts +5 -0
- package/form-entry/services/form-errors.service.d.ts +2 -1
- package/form-entry/services/form-schema-compiler.service.d.ts +16 -16
- package/form-entry/services/historical-encounter-data.service.d.ts +3 -3
- package/form-entry/utils/messages.d.ts +9 -9
- package/form-entry/value-adapters/encounter.adapter.d.ts +2 -2
- package/form-entry/value-adapters/order.adapter.d.ts +9 -9
- package/form-entry/value-adapters/person-attribute.adapter.d.ts +1 -1
- package/package.json +18 -16
- package/public_api.d.ts +50 -1
- package/components/input/input.directive.d.ts +0 -28
- package/components/input/input.module.d.ts +0 -2
- package/components/input/label.component.d.ts +0 -87
- package/components/input/text-area.directive.d.ts +0 -21
- package/components/ngx-datetime-picker/ngx-datetime-picker.component.d.ts +0 -13
- package/components/ngx-pick-datetime/lib/date-time/adapter/date-time-adapter.class.d.ts +0 -189
- package/components/ngx-pick-datetime/lib/date-time/adapter/date-time-format.class.d.ts +0 -15
- package/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time-adapter.class.d.ts +0 -73
- package/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time-format.class.d.ts +0 -5
- package/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time.module.d.ts +0 -7
- package/components/ngx-pick-datetime/lib/date-time/calendar-body.component.d.ts +0 -77
- package/components/ngx-pick-datetime/lib/date-time/calendar-month-view.component.d.ts +0 -139
- package/components/ngx-pick-datetime/lib/date-time/calendar-multi-year-view.component.d.ts +0 -109
- package/components/ngx-pick-datetime/lib/date-time/calendar-year-view.component.d.ts +0 -120
- package/components/ngx-pick-datetime/lib/date-time/calendar.component.d.ts +0 -141
- package/components/ngx-pick-datetime/lib/date-time/date-time-inline.component.d.ts +0 -90
- package/components/ngx-pick-datetime/lib/date-time/date-time-picker-container.component.d.ts +0 -122
- package/components/ngx-pick-datetime/lib/date-time/date-time-picker-input.directive.d.ts +0 -152
- package/components/ngx-pick-datetime/lib/date-time/date-time-picker-intl.service.d.ts +0 -51
- package/components/ngx-pick-datetime/lib/date-time/date-time-picker-trigger.directive.d.ts +0 -21
- package/components/ngx-pick-datetime/lib/date-time/date-time-picker.animations.d.ts +0 -8
- package/components/ngx-pick-datetime/lib/date-time/date-time-picker.component.d.ts +0 -157
- package/components/ngx-pick-datetime/lib/date-time/date-time.class.d.ts +0 -86
- package/components/ngx-pick-datetime/lib/date-time/date-time.module.d.ts +0 -5
- package/components/ngx-pick-datetime/lib/date-time/numberedFixLen.pipe.d.ts +0 -7
- package/components/ngx-pick-datetime/lib/date-time/timer-box.component.d.ts +0 -35
- package/components/ngx-pick-datetime/lib/date-time/timer.component.d.ts +0 -129
- package/components/ngx-pick-datetime/lib/dialog/dialog-config.class.d.ts +0 -93
- package/components/ngx-pick-datetime/lib/dialog/dialog-container.component.d.ts +0 -56
- package/components/ngx-pick-datetime/lib/dialog/dialog-ref.class.d.ts +0 -49
- package/components/ngx-pick-datetime/lib/dialog/dialog.module.d.ts +0 -5
- package/components/ngx-pick-datetime/lib/dialog/dialog.service.d.ts +0 -70
- package/components/ngx-pick-datetime/lib/utils/index.d.ts +0 -4
- package/components/ngx-pick-datetime/lib/utils/object.utils.d.ts +0 -11
- package/components/ngx-remote-select/ngx-remote-select.module.d.ts +0 -2
- package/components/ngx-tabset/components/tab-set.d.ts +0 -15
- package/components/ngx-tabset/components/tab.d.ts +0 -10
- package/components/ngx-tabset/directives/hover-class.directive.d.ts +0 -8
- package/components/ngx-tabset/modules/ngx-tabset.module.d.ts +0 -11
- package/components/number-input/number-input.component.d.ts +0 -148
- package/components/number-input/number-input.module.d.ts +0 -2
- package/components/select/optgroup.directive.d.ts +0 -3
- package/components/select/option.directive.d.ts +0 -3
- package/esm2015/components/input/input.directive.js +0 -55
- package/esm2015/components/input/input.module.js +0 -29
- package/esm2015/components/input/label.component.js +0 -139
- package/esm2015/components/input/text-area.directive.js +0 -40
- package/esm2015/components/ngx-datetime-picker/ngx-datetime-picker.component.js +0 -52
- package/esm2015/components/ngx-datetime-picker/ngx-datetime-picker.module.js +0 -28
- package/esm2015/components/ngx-pick-datetime/lib/date-time/adapter/date-time-adapter.class.js +0 -115
- package/esm2015/components/ngx-pick-datetime/lib/date-time/adapter/date-time-format.class.js +0 -7
- package/esm2015/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time-adapter.class.js +0 -346
- package/esm2015/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time-format.class.js +0 -10
- package/esm2015/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time.module.js +0 -30
- package/esm2015/components/ngx-pick-datetime/lib/date-time/calendar-body.component.js +0 -149
- package/esm2015/components/ngx-pick-datetime/lib/date-time/calendar-month-view.component.js +0 -432
- package/esm2015/components/ngx-pick-datetime/lib/date-time/calendar-multi-year-view.component.js +0 -353
- package/esm2015/components/ngx-pick-datetime/lib/date-time/calendar-year-view.component.js +0 -362
- package/esm2015/components/ngx-pick-datetime/lib/date-time/calendar.component.js +0 -337
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-inline.component.js +0 -252
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker-container.component.js +0 -379
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker-input.directive.js +0 -601
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker-intl.service.js +0 -60
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker-trigger.directive.js +0 -69
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker.animations.js +0 -21
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker.component.js +0 -515
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time.class.js +0 -154
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time.module.js +0 -63
- package/esm2015/components/ngx-pick-datetime/lib/date-time/numberedFixLen.pipe.js +0 -24
- package/esm2015/components/ngx-pick-datetime/lib/date-time/timer-box.component.js +0 -83
- package/esm2015/components/ngx-pick-datetime/lib/date-time/timer.component.js +0 -293
- package/esm2015/components/ngx-pick-datetime/lib/dialog/dialog-config.class.js +0 -56
- package/esm2015/components/ngx-pick-datetime/lib/dialog/dialog-container.component.js +0 -208
- package/esm2015/components/ngx-pick-datetime/lib/dialog/dialog-ref.class.js +0 -113
- package/esm2015/components/ngx-pick-datetime/lib/dialog/dialog.module.js +0 -29
- package/esm2015/components/ngx-pick-datetime/lib/dialog/dialog.service.js +0 -228
- package/esm2015/components/ngx-pick-datetime/lib/utils/index.js +0 -5
- package/esm2015/components/ngx-pick-datetime/lib/utils/object.utils.js +0 -26
- package/esm2015/components/ngx-remote-select/ngx-remote-select.component.js +0 -119
- package/esm2015/components/ngx-remote-select/ngx-remote-select.module.js +0 -18
- package/esm2015/components/ngx-tabset/components/tab-set.js +0 -67
- package/esm2015/components/ngx-tabset/components/tab.js +0 -38
- package/esm2015/components/ngx-tabset/directives/hover-class.directive.js +0 -26
- package/esm2015/components/ngx-tabset/modules/ngx-tabset.module.js +0 -40
- package/esm2015/components/number-input/number-input.component.js +0 -203
- package/esm2015/components/number-input/number-input.module.js +0 -15
- package/esm2015/components/select/optgroup.directive.js +0 -17
- package/esm2015/components/select/option.directive.js +0 -17
- package/esm2015/form-entry/directives/collapse-animations.js +0 -11
- package/esm2015/form-entry/directives/collapse.directive.js +0 -157
- package/esm2015/form-entry/pipes/time-ago.pipe.js +0 -107
- package/esm2015/lib/index.js +0 -49
- package/form-entry/directives/collapse-animations.d.ts +0 -4
- package/form-entry/directives/collapse.directive.d.ts +0 -42
- package/form-entry/pipes/time-ago.pipe.d.ts +0 -11
- package/lib/index.d.ts +0 -49
- package/styles/ngx-formentry.css +0 -317
- package/styles/picker.min.css +0 -1
|
@@ -1,362 +0,0 @@
|
|
|
1
|
-
/* tslint:disable:no-host-metadata-property */
|
|
2
|
-
/**
|
|
3
|
-
* calendar-year-view.component
|
|
4
|
-
*/
|
|
5
|
-
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Inject, Input, Optional, Output, ViewChild } from '@angular/core';
|
|
6
|
-
import { CalendarCell, OwlCalendarBodyComponent } from './calendar-body.component';
|
|
7
|
-
import { DateTimeAdapter } from './adapter/date-time-adapter.class';
|
|
8
|
-
import { OWL_DATE_TIME_FORMATS } from './adapter/date-time-format.class';
|
|
9
|
-
import { Subscription } from 'rxjs';
|
|
10
|
-
import { DOWN_ARROW, END, ENTER, HOME, LEFT_ARROW, PAGE_DOWN, PAGE_UP, RIGHT_ARROW, UP_ARROW } from '@angular/cdk/keycodes';
|
|
11
|
-
const MONTHS_PER_YEAR = 12;
|
|
12
|
-
const MONTHS_PER_ROW = 3;
|
|
13
|
-
export class OwlYearViewComponent {
|
|
14
|
-
constructor(cdRef, dateTimeAdapter, dateTimeFormats) {
|
|
15
|
-
this.cdRef = cdRef;
|
|
16
|
-
this.dateTimeAdapter = dateTimeAdapter;
|
|
17
|
-
this.dateTimeFormats = dateTimeFormats;
|
|
18
|
-
/**
|
|
19
|
-
* The select mode of the picker;
|
|
20
|
-
* */
|
|
21
|
-
this._selectMode = 'single';
|
|
22
|
-
this._selecteds = [];
|
|
23
|
-
this.localeSub = Subscription.EMPTY;
|
|
24
|
-
this.initiated = false;
|
|
25
|
-
/**
|
|
26
|
-
* An array to hold all selectedDates' month value
|
|
27
|
-
* the value is the month number in current year
|
|
28
|
-
* */
|
|
29
|
-
this.selectedMonths = [];
|
|
30
|
-
/**
|
|
31
|
-
* Callback to invoke when a new month is selected
|
|
32
|
-
* */
|
|
33
|
-
this.change = new EventEmitter();
|
|
34
|
-
/**
|
|
35
|
-
* Emits the selected year. This doesn't imply a change on the selected date
|
|
36
|
-
* */
|
|
37
|
-
this.monthSelected = new EventEmitter();
|
|
38
|
-
/** Emits when any date is activated. */
|
|
39
|
-
this.pickerMomentChange = new EventEmitter();
|
|
40
|
-
/** Emits when use keyboard enter to select a calendar cell */
|
|
41
|
-
this.keyboardEnter = new EventEmitter();
|
|
42
|
-
this.monthNames = this.dateTimeAdapter.getMonthNames('short');
|
|
43
|
-
}
|
|
44
|
-
get selectMode() {
|
|
45
|
-
return this._selectMode;
|
|
46
|
-
}
|
|
47
|
-
set selectMode(val) {
|
|
48
|
-
this._selectMode = val;
|
|
49
|
-
if (this.initiated) {
|
|
50
|
-
this.generateMonthList();
|
|
51
|
-
this.cdRef.markForCheck();
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
get selected() {
|
|
55
|
-
return this._selected;
|
|
56
|
-
}
|
|
57
|
-
set selected(value) {
|
|
58
|
-
value = this.dateTimeAdapter.deserialize(value);
|
|
59
|
-
this._selected = this.getValidDate(value);
|
|
60
|
-
this.setSelectedMonths();
|
|
61
|
-
}
|
|
62
|
-
get selecteds() {
|
|
63
|
-
return this._selecteds;
|
|
64
|
-
}
|
|
65
|
-
set selecteds(values) {
|
|
66
|
-
this._selecteds = [];
|
|
67
|
-
for (let i = 0; i < values.length; i++) {
|
|
68
|
-
const value = this.dateTimeAdapter.deserialize(values[i]);
|
|
69
|
-
this._selecteds.push(this.getValidDate(value));
|
|
70
|
-
}
|
|
71
|
-
this.setSelectedMonths();
|
|
72
|
-
}
|
|
73
|
-
get pickerMoment() {
|
|
74
|
-
return this._pickerMoment;
|
|
75
|
-
}
|
|
76
|
-
set pickerMoment(value) {
|
|
77
|
-
const oldMoment = this._pickerMoment;
|
|
78
|
-
value = this.dateTimeAdapter.deserialize(value);
|
|
79
|
-
this._pickerMoment =
|
|
80
|
-
this.getValidDate(value) || this.dateTimeAdapter.now();
|
|
81
|
-
if (!this.hasSameYear(oldMoment, this._pickerMoment) &&
|
|
82
|
-
this.initiated) {
|
|
83
|
-
this.generateMonthList();
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
get dateFilter() {
|
|
87
|
-
return this._dateFilter;
|
|
88
|
-
}
|
|
89
|
-
set dateFilter(filter) {
|
|
90
|
-
this._dateFilter = filter;
|
|
91
|
-
if (this.initiated) {
|
|
92
|
-
this.generateMonthList();
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
get minDate() {
|
|
96
|
-
return this._minDate;
|
|
97
|
-
}
|
|
98
|
-
set minDate(value) {
|
|
99
|
-
value = this.dateTimeAdapter.deserialize(value);
|
|
100
|
-
this._minDate = this.getValidDate(value);
|
|
101
|
-
if (this.initiated) {
|
|
102
|
-
this.generateMonthList();
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
get maxDate() {
|
|
106
|
-
return this._maxDate;
|
|
107
|
-
}
|
|
108
|
-
set maxDate(value) {
|
|
109
|
-
value = this.dateTimeAdapter.deserialize(value);
|
|
110
|
-
this._maxDate = this.getValidDate(value);
|
|
111
|
-
if (this.initiated) {
|
|
112
|
-
this.generateMonthList();
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
get months() {
|
|
116
|
-
return this._months;
|
|
117
|
-
}
|
|
118
|
-
get activeCell() {
|
|
119
|
-
if (this._pickerMoment) {
|
|
120
|
-
return this.dateTimeAdapter.getMonth(this._pickerMoment);
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
get isInSingleMode() {
|
|
124
|
-
return this.selectMode === 'single';
|
|
125
|
-
}
|
|
126
|
-
get isInRangeMode() {
|
|
127
|
-
return (this.selectMode === 'range' ||
|
|
128
|
-
this.selectMode === 'rangeFrom' ||
|
|
129
|
-
this.selectMode === 'rangeTo');
|
|
130
|
-
}
|
|
131
|
-
get owlDTCalendarView() {
|
|
132
|
-
return true;
|
|
133
|
-
}
|
|
134
|
-
ngOnInit() {
|
|
135
|
-
this.localeSub = this.dateTimeAdapter.localeChanges.subscribe(() => {
|
|
136
|
-
this.generateMonthList();
|
|
137
|
-
this.cdRef.markForCheck();
|
|
138
|
-
});
|
|
139
|
-
}
|
|
140
|
-
ngAfterContentInit() {
|
|
141
|
-
this.generateMonthList();
|
|
142
|
-
this.initiated = true;
|
|
143
|
-
}
|
|
144
|
-
ngOnDestroy() {
|
|
145
|
-
this.localeSub.unsubscribe();
|
|
146
|
-
}
|
|
147
|
-
/**
|
|
148
|
-
* Handle a calendarCell selected
|
|
149
|
-
*/
|
|
150
|
-
selectCalendarCell(cell) {
|
|
151
|
-
this.selectMonth(cell.value);
|
|
152
|
-
}
|
|
153
|
-
/**
|
|
154
|
-
* Handle a new month selected
|
|
155
|
-
*/
|
|
156
|
-
selectMonth(month) {
|
|
157
|
-
const firstDateOfMonth = this.dateTimeAdapter.createDate(this.dateTimeAdapter.getYear(this.pickerMoment), month, 1);
|
|
158
|
-
this.monthSelected.emit(firstDateOfMonth);
|
|
159
|
-
const daysInMonth = this.dateTimeAdapter.getNumDaysInMonth(firstDateOfMonth);
|
|
160
|
-
const result = this.dateTimeAdapter.createDate(this.dateTimeAdapter.getYear(this.pickerMoment), month, Math.min(daysInMonth, this.dateTimeAdapter.getDate(this.pickerMoment)), this.dateTimeAdapter.getHours(this.pickerMoment), this.dateTimeAdapter.getMinutes(this.pickerMoment), this.dateTimeAdapter.getSeconds(this.pickerMoment));
|
|
161
|
-
this.change.emit(result);
|
|
162
|
-
}
|
|
163
|
-
/**
|
|
164
|
-
* Handle keydown event on calendar body
|
|
165
|
-
*/
|
|
166
|
-
handleCalendarKeydown(event) {
|
|
167
|
-
let moment;
|
|
168
|
-
switch (event.keyCode) {
|
|
169
|
-
// minus 1 month
|
|
170
|
-
case LEFT_ARROW:
|
|
171
|
-
moment = this.dateTimeAdapter.addCalendarMonths(this.pickerMoment, -1);
|
|
172
|
-
this.pickerMomentChange.emit(moment);
|
|
173
|
-
break;
|
|
174
|
-
// add 1 month
|
|
175
|
-
case RIGHT_ARROW:
|
|
176
|
-
moment = this.dateTimeAdapter.addCalendarMonths(this.pickerMoment, 1);
|
|
177
|
-
this.pickerMomentChange.emit(moment);
|
|
178
|
-
break;
|
|
179
|
-
// minus 3 months
|
|
180
|
-
case UP_ARROW:
|
|
181
|
-
moment = this.dateTimeAdapter.addCalendarMonths(this.pickerMoment, -3);
|
|
182
|
-
this.pickerMomentChange.emit(moment);
|
|
183
|
-
break;
|
|
184
|
-
// add 3 months
|
|
185
|
-
case DOWN_ARROW:
|
|
186
|
-
moment = this.dateTimeAdapter.addCalendarMonths(this.pickerMoment, 3);
|
|
187
|
-
this.pickerMomentChange.emit(moment);
|
|
188
|
-
break;
|
|
189
|
-
// move to first month of current year
|
|
190
|
-
case HOME:
|
|
191
|
-
moment = this.dateTimeAdapter.addCalendarMonths(this.pickerMoment, -this.dateTimeAdapter.getMonth(this.pickerMoment));
|
|
192
|
-
this.pickerMomentChange.emit(moment);
|
|
193
|
-
break;
|
|
194
|
-
// move to last month of current year
|
|
195
|
-
case END:
|
|
196
|
-
moment = this.dateTimeAdapter.addCalendarMonths(this.pickerMoment, 11 - this.dateTimeAdapter.getMonth(this.pickerMoment));
|
|
197
|
-
this.pickerMomentChange.emit(moment);
|
|
198
|
-
break;
|
|
199
|
-
// minus 1 year (or 10 year)
|
|
200
|
-
case PAGE_UP:
|
|
201
|
-
moment = this.dateTimeAdapter.addCalendarYears(this.pickerMoment, event.altKey ? -10 : -1);
|
|
202
|
-
this.pickerMomentChange.emit(moment);
|
|
203
|
-
break;
|
|
204
|
-
// add 1 year (or 10 year)
|
|
205
|
-
case PAGE_DOWN:
|
|
206
|
-
moment = this.dateTimeAdapter.addCalendarYears(this.pickerMoment, event.altKey ? 10 : 1);
|
|
207
|
-
this.pickerMomentChange.emit(moment);
|
|
208
|
-
break;
|
|
209
|
-
// Select current month
|
|
210
|
-
case ENTER:
|
|
211
|
-
this.selectMonth(this.dateTimeAdapter.getMonth(this.pickerMoment));
|
|
212
|
-
this.keyboardEnter.emit();
|
|
213
|
-
break;
|
|
214
|
-
default:
|
|
215
|
-
return;
|
|
216
|
-
}
|
|
217
|
-
this.focusActiveCell();
|
|
218
|
-
event.preventDefault();
|
|
219
|
-
}
|
|
220
|
-
/**
|
|
221
|
-
* Generate the calendar month list
|
|
222
|
-
* */
|
|
223
|
-
generateMonthList() {
|
|
224
|
-
if (!this.pickerMoment) {
|
|
225
|
-
return;
|
|
226
|
-
}
|
|
227
|
-
this.setSelectedMonths();
|
|
228
|
-
this.todayMonth = this.getMonthInCurrentYear(this.dateTimeAdapter.now());
|
|
229
|
-
this._months = [];
|
|
230
|
-
for (let i = 0; i < MONTHS_PER_YEAR / MONTHS_PER_ROW; i++) {
|
|
231
|
-
const row = [];
|
|
232
|
-
for (let j = 0; j < MONTHS_PER_ROW; j++) {
|
|
233
|
-
const month = j + i * MONTHS_PER_ROW;
|
|
234
|
-
const monthCell = this.createMonthCell(month);
|
|
235
|
-
row.push(monthCell);
|
|
236
|
-
}
|
|
237
|
-
this._months.push(row);
|
|
238
|
-
}
|
|
239
|
-
return;
|
|
240
|
-
}
|
|
241
|
-
/**
|
|
242
|
-
* Creates an CalendarCell for the given month.
|
|
243
|
-
*/
|
|
244
|
-
createMonthCell(month) {
|
|
245
|
-
const startDateOfMonth = this.dateTimeAdapter.createDate(this.dateTimeAdapter.getYear(this.pickerMoment), month, 1);
|
|
246
|
-
const ariaLabel = this.dateTimeAdapter.format(startDateOfMonth, this.dateTimeFormats.monthYearA11yLabel);
|
|
247
|
-
const cellClass = 'owl-dt-month-' + month;
|
|
248
|
-
return new CalendarCell(month, this.monthNames[month], ariaLabel, this.isMonthEnabled(month), false, cellClass);
|
|
249
|
-
}
|
|
250
|
-
/**
|
|
251
|
-
* Check if the given month is enable
|
|
252
|
-
*/
|
|
253
|
-
isMonthEnabled(month) {
|
|
254
|
-
const firstDateOfMonth = this.dateTimeAdapter.createDate(this.dateTimeAdapter.getYear(this.pickerMoment), month, 1);
|
|
255
|
-
// If any date in the month is selectable,
|
|
256
|
-
// we count the month as enable
|
|
257
|
-
for (let date = firstDateOfMonth; this.dateTimeAdapter.getMonth(date) === month; date = this.dateTimeAdapter.addCalendarDays(date, 1)) {
|
|
258
|
-
if (!!date &&
|
|
259
|
-
(!this.dateFilter || this.dateFilter(date)) &&
|
|
260
|
-
(!this.minDate ||
|
|
261
|
-
this.dateTimeAdapter.compare(date, this.minDate) >= 0) &&
|
|
262
|
-
(!this.maxDate ||
|
|
263
|
-
this.dateTimeAdapter.compare(date, this.maxDate) <= 0)) {
|
|
264
|
-
return true;
|
|
265
|
-
}
|
|
266
|
-
}
|
|
267
|
-
return false;
|
|
268
|
-
}
|
|
269
|
-
/**
|
|
270
|
-
* Gets the month in this year that the given Date falls on.
|
|
271
|
-
* Returns null if the given Date is in another year.
|
|
272
|
-
*/
|
|
273
|
-
getMonthInCurrentYear(date) {
|
|
274
|
-
if (this.getValidDate(date) && this.getValidDate(this._pickerMoment)) {
|
|
275
|
-
const result = this.dateTimeAdapter.compareYear(date, this._pickerMoment);
|
|
276
|
-
// < 0 : the given date's year is before pickerMoment's year, we return -1 as selected month value.
|
|
277
|
-
// > 0 : the given date's year is after pickerMoment's year, we return 12 as selected month value.
|
|
278
|
-
// 0 : the give date's year is same as the pickerMoment's year, we return the actual month value.
|
|
279
|
-
if (result < 0) {
|
|
280
|
-
return -1;
|
|
281
|
-
}
|
|
282
|
-
else if (result > 0) {
|
|
283
|
-
return 12;
|
|
284
|
-
}
|
|
285
|
-
else {
|
|
286
|
-
return this.dateTimeAdapter.getMonth(date);
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
else {
|
|
290
|
-
return null;
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
/**
|
|
294
|
-
* Set the selectedMonths value
|
|
295
|
-
* In single mode, it has only one value which represent the month the selected date in
|
|
296
|
-
* In range mode, it would has two values, one for the month the fromValue in and the other for the month the toValue in
|
|
297
|
-
* */
|
|
298
|
-
setSelectedMonths() {
|
|
299
|
-
this.selectedMonths = [];
|
|
300
|
-
if (this.isInSingleMode && this.selected) {
|
|
301
|
-
this.selectedMonths[0] = this.getMonthInCurrentYear(this.selected);
|
|
302
|
-
}
|
|
303
|
-
if (this.isInRangeMode && this.selecteds) {
|
|
304
|
-
this.selectedMonths[0] = this.getMonthInCurrentYear(this.selecteds[0]);
|
|
305
|
-
this.selectedMonths[1] = this.getMonthInCurrentYear(this.selecteds[1]);
|
|
306
|
-
}
|
|
307
|
-
}
|
|
308
|
-
/**
|
|
309
|
-
* Check the given dates are in the same year
|
|
310
|
-
*/
|
|
311
|
-
hasSameYear(dateLeft, dateRight) {
|
|
312
|
-
return !!(dateLeft &&
|
|
313
|
-
dateRight &&
|
|
314
|
-
this.dateTimeAdapter.getYear(dateLeft) ===
|
|
315
|
-
this.dateTimeAdapter.getYear(dateRight));
|
|
316
|
-
}
|
|
317
|
-
/**
|
|
318
|
-
* Get a valid date object
|
|
319
|
-
*/
|
|
320
|
-
getValidDate(obj) {
|
|
321
|
-
return this.dateTimeAdapter.isDateInstance(obj) &&
|
|
322
|
-
this.dateTimeAdapter.isValid(obj)
|
|
323
|
-
? obj
|
|
324
|
-
: null;
|
|
325
|
-
}
|
|
326
|
-
focusActiveCell() {
|
|
327
|
-
this.calendarBodyElm.focusActiveCell();
|
|
328
|
-
}
|
|
329
|
-
}
|
|
330
|
-
OwlYearViewComponent.decorators = [
|
|
331
|
-
{ type: Component, args: [{
|
|
332
|
-
selector: 'owl-date-time-year-view',
|
|
333
|
-
exportAs: 'owlMonthView',
|
|
334
|
-
template: "<table class=\"owl-dt-calendar-table owl-dt-calendar-year-table\">\n <thead class=\"owl-dt-calendar-header\">\n <tr>\n <th class=\"owl-dt-calendar-table-divider\" aria-hidden=\"true\" colspan=\"3\"></th>\n </tr>\n </thead>\n <tbody owl-date-time-calendar-body role=\"grid\"\n [rows]=\"months\" [numCols]=\"3\" [cellRatio]=\"3 / 7\"\n [activeCell]=\"activeCell\"\n [todayValue]=\"todayMonth\"\n [selectedValues]=\"selectedMonths\"\n [selectMode]=\"selectMode\"\n (keydown)=\"handleCalendarKeydown($event)\"\n (select)=\"selectCalendarCell($event)\">\n </tbody>\n</table>\n",
|
|
335
|
-
host: {
|
|
336
|
-
'[class.owl-dt-calendar-view]': 'owlDTCalendarView'
|
|
337
|
-
},
|
|
338
|
-
preserveWhitespaces: false,
|
|
339
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
340
|
-
styles: [""]
|
|
341
|
-
},] }
|
|
342
|
-
];
|
|
343
|
-
OwlYearViewComponent.ctorParameters = () => [
|
|
344
|
-
{ type: ChangeDetectorRef },
|
|
345
|
-
{ type: DateTimeAdapter, decorators: [{ type: Optional }] },
|
|
346
|
-
{ type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [OWL_DATE_TIME_FORMATS,] }] }
|
|
347
|
-
];
|
|
348
|
-
OwlYearViewComponent.propDecorators = {
|
|
349
|
-
selectMode: [{ type: Input }],
|
|
350
|
-
selected: [{ type: Input }],
|
|
351
|
-
selecteds: [{ type: Input }],
|
|
352
|
-
pickerMoment: [{ type: Input }],
|
|
353
|
-
dateFilter: [{ type: Input }],
|
|
354
|
-
minDate: [{ type: Input }],
|
|
355
|
-
maxDate: [{ type: Input }],
|
|
356
|
-
change: [{ type: Output }],
|
|
357
|
-
monthSelected: [{ type: Output }],
|
|
358
|
-
pickerMomentChange: [{ type: Output }],
|
|
359
|
-
keyboardEnter: [{ type: Output }],
|
|
360
|
-
calendarBodyElm: [{ type: ViewChild, args: [OwlCalendarBodyComponent, { static: true },] }]
|
|
361
|
-
};
|
|
362
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIteWVhci12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1mb3JtZW50cnkvc3JjL2NvbXBvbmVudHMvbmd4LXBpY2stZGF0ZXRpbWUvbGliL2RhdGUtdGltZS9jYWxlbmRhci15ZWFyLXZpZXcuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDhDQUE4QztBQUM5Qzs7R0FFRztBQUVILE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0gsWUFBWSxFQUNaLHdCQUF3QixFQUMzQixNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNwRSxPQUFPLEVBQ0gscUJBQXFCLEVBRXhCLE1BQU0sa0NBQWtDLENBQUM7QUFDMUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVwQyxPQUFPLEVBQ0gsVUFBVSxFQUNWLEdBQUcsRUFDSCxLQUFLLEVBQ0wsSUFBSSxFQUNKLFVBQVUsRUFDVixTQUFTLEVBQ1QsT0FBTyxFQUNQLFdBQVcsRUFDWCxRQUFRLEVBQ1gsTUFBTSx1QkFBdUIsQ0FBQztBQUUvQixNQUFNLGVBQWUsR0FBRyxFQUFFLENBQUM7QUFDM0IsTUFBTSxjQUFjLEdBQUcsQ0FBQyxDQUFDO0FBYXpCLE1BQU0sT0FBTyxvQkFBb0I7SUFtTDdCLFlBQ1ksS0FBd0IsRUFDWixlQUFtQyxFQUcvQyxlQUFtQztRQUpuQyxVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQUNaLG9CQUFlLEdBQWYsZUFBZSxDQUFvQjtRQUcvQyxvQkFBZSxHQUFmLGVBQWUsQ0FBb0I7UUF0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Q0FDTCxRQUFRO1lBQ1IsU0FBUztZQUNULElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQzlDLENBQUM7SUFDTixDQUFDO0lBRUQ7O09BRUc7SUFDSyxZQUFZLENBQUMsR0FBUTtRQUN6QixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQztZQUMzQyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7WUFDakMsQ0FBQyxDQUFDLEdBQUc7WUFDTCxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ2YsQ0FBQztJQUVPLGVBQWU7UUFDbkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUMzQyxDQUFDOzs7WUF0ZkosU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSx5QkFBeUI7Z0JBQ25DLFFBQVEsRUFBRSxjQUFjO2dCQUN4QixzcUJBQWtEO2dCQUVsRCxJQUFJLEVBQUU7b0JBQ0YsOEJBQThCLEVBQUUsbUJBQW1CO2lCQUN0RDtnQkFDRCxtQkFBbUIsRUFBRSxLQUFLO2dCQUMxQixlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTs7YUFDbEQ7OztZQS9DRyxpQkFBaUI7WUFlWixlQUFlLHVCQXNOZixRQUFROzRDQUNSLFFBQVEsWUFDUixNQUFNLFNBQUMscUJBQXFCOzs7eUJBakxoQyxLQUFLO3VCQWVMLEtBQUs7d0JBWUwsS0FBSzsyQkFnQkwsS0FBSzt5QkF1QkwsS0FBSztzQkFjTCxLQUFLO3NCQWVMLEtBQUs7cUJBcURMLE1BQU07NEJBTU4sTUFBTTtpQ0FJTixNQUFNOzRCQUlOLE1BQU07OEJBSU4sU0FBUyxTQUFDLHdCQUF3QixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbIi8qIHRzbGludDpkaXNhYmxlOm5vLWhvc3QtbWV0YWRhdGEtcHJvcGVydHkgKi9cbi8qKlxuICogY2FsZW5kYXIteWVhci12aWV3LmNvbXBvbmVudFxuICovXG5cbmltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIENhbGVuZGFyQ2VsbCxcbiAgICBPd2xDYWxlbmRhckJvZHlDb21wb25lbnRcbn0gZnJvbSAnLi9jYWxlbmRhci1ib2R5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRlVGltZUFkYXB0ZXIgfSBmcm9tICcuL2FkYXB0ZXIvZGF0ZS10aW1lLWFkYXB0ZXIuY2xhc3MnO1xuaW1wb3J0IHtcbiAgICBPV0xfREFURV9USU1FX0ZPUk1BVFMsXG4gICAgT3dsRGF0ZVRpbWVGb3JtYXRzXG59IGZyb20gJy4vYWRhcHRlci9kYXRlLXRpbWUtZm9ybWF0LmNsYXNzJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgU2VsZWN0TW9kZSB9IGZyb20gJy4vZGF0ZS10aW1lLmNsYXNzJztcbmltcG9ydCB7XG4gICAgRE9XTl9BUlJPVyxcbiAgICBFTkQsXG4gICAgRU5URVIsXG4gICAgSE9NRSxcbiAgICBMRUZUX0FSUk9XLFxuICAgIFBBR0VfRE9XTixcbiAgICBQQUdFX1VQLFxuICAgIFJJR0hUX0FSUk9XLFxuICAgIFVQX0FSUk9XXG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5cbmNvbnN0IE1PTlRIU19QRVJfWUVBUiA9IDEyO1xuY29uc3QgTU9OVEhTX1BFUl9ST1cgPSAzO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ293bC1kYXRlLXRpbWUteWVhci12aWV3JyxcbiAgICBleHBvcnRBczogJ293bE1vbnRoVmlldycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NhbGVuZGFyLXllYXItdmlldy5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vY2FsZW5kYXIteWVhci12aWV3LmNvbXBvbmVudC5zY3NzJ10sXG4gICAgaG9zdDoge1xuICAgICAgICAnW2NsYXNzLm93bC1kdC1jYWxlbmRhci12aWV3XSc6ICdvd2xEVENhbGVuZGFyVmlldydcbiAgICB9LFxuICAgIHByZXNlcnZlV2hpdGVzcGFjZXM6IGZhbHNlLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIE93bFllYXJWaWV3Q29tcG9uZW50PFQ+XG4gICAgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSB7XG4gICAgLyoqXG4gICAgICogVGhlIHNlbGVjdCBtb2RlIG9mIHRoZSBwaWNrZXI7XG4gICAgICogKi9cbiAgICBwcml2YXRlIF9zZWxlY3RNb2RlOiBTZWxlY3RNb2RlID0gJ3NpbmdsZSc7XG4gICAgQElucHV0KClcbiAgICBnZXQgc2VsZWN0TW9kZSgpOiBTZWxlY3RNb2RlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdE1vZGU7XG4gICAgfVxuXG4gICAgc2V0IHNlbGVjdE1vZGUodmFsOiBTZWxlY3RNb2RlKSB7XG4gICAgICAgIHRoaXMuX3NlbGVjdE1vZGUgPSB2YWw7XG4gICAgICAgIGlmICh0aGlzLmluaXRpYXRlZCkge1xuICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZU1vbnRoTGlzdCgpO1xuICAgICAgICAgICAgdGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBUaGUgY3VycmVudGx5IHNlbGVjdGVkIGRhdGUuICovXG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWQ6IFQgfCBudWxsO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IHNlbGVjdGVkKCk6IFQgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkO1xuICAgIH1cblxuICAgIHNldCBzZWxlY3RlZCh2YWx1ZTogVCB8IG51bGwpIHtcbiAgICAgICAgdmFsdWUgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5kZXNlcmlhbGl6ZSh2YWx1ZSk7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkID0gdGhpcy5nZXRWYWxpZERhdGUodmFsdWUpO1xuICAgICAgICB0aGlzLnNldFNlbGVjdGVkTW9udGhzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWRzOiBUW10gPSBbXTtcbiAgICBASW5wdXQoKVxuICAgIGdldCBzZWxlY3RlZHMoKTogVFtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkcztcbiAgICB9XG5cbiAgICBzZXQgc2VsZWN0ZWRzKHZhbHVlczogVFtdKSB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5kZXNlcmlhbGl6ZSh2YWx1ZXNbaV0pO1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRzLnB1c2godGhpcy5nZXRWYWxpZERhdGUodmFsdWUpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRNb250aHMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9waWNrZXJNb21lbnQ6IFQgfCBudWxsO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IHBpY2tlck1vbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BpY2tlck1vbWVudDtcbiAgICB9XG5cbiAgICBzZXQgcGlja2VyTW9tZW50KHZhbHVlOiBUKSB7XG4gICAgICAgIGNvbnN0IG9sZE1vbWVudCA9IHRoaXMuX3BpY2tlck1vbWVudDtcbiAgICAgICAgdmFsdWUgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5kZXNlcmlhbGl6ZSh2YWx1ZSk7XG4gICAgICAgIHRoaXMuX3BpY2tlck1vbWVudCA9XG4gICAgICAgICAgICB0aGlzLmdldFZhbGlkRGF0ZSh2YWx1ZSkgfHwgdGhpcy5kYXRlVGltZUFkYXB0ZXIubm93KCk7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXRoaXMuaGFzU2FtZVllYXIob2xkTW9tZW50LCB0aGlzLl9waWNrZXJNb21lbnQpICYmXG4gICAgICAgICAgICB0aGlzLmluaXRpYXRlZFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVNb250aExpc3QoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgZnVuY3Rpb24gdXNlZCB0byBmaWx0ZXIgd2hpY2ggZGF0ZXMgYXJlIHNlbGVjdGFibGVcbiAgICAgKiAqL1xuICAgIHByaXZhdGUgX2RhdGVGaWx0ZXI6IChkYXRlOiBUKSA9PiBib29sZWFuO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGRhdGVGaWx0ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRlRmlsdGVyO1xuICAgIH1cblxuICAgIHNldCBkYXRlRmlsdGVyKGZpbHRlcjogKGRhdGU6IFQpID0+IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fZGF0ZUZpbHRlciA9IGZpbHRlcjtcbiAgICAgICAgaWYgKHRoaXMuaW5pdGlhdGVkKSB7XG4gICAgICAgICAgICB0aGlzLmdlbmVyYXRlTW9udGhMaXN0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogVGhlIG1pbmltdW0gc2VsZWN0YWJsZSBkYXRlLiAqL1xuICAgIHByaXZhdGUgX21pbkRhdGU6IFQgfCBudWxsO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IG1pbkRhdGUoKTogVCB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWluRGF0ZTtcbiAgICB9XG5cbiAgICBzZXQgbWluRGF0ZSh2YWx1ZTogVCB8IG51bGwpIHtcbiAgICAgICAgdmFsdWUgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5kZXNlcmlhbGl6ZSh2YWx1ZSk7XG4gICAgICAgIHRoaXMuX21pbkRhdGUgPSB0aGlzLmdldFZhbGlkRGF0ZSh2YWx1ZSk7XG4gICAgICAgIGlmICh0aGlzLmluaXRpYXRlZCkge1xuICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZU1vbnRoTGlzdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFRoZSBtYXhpbXVtIHNlbGVjdGFibGUgZGF0ZS4gKi9cbiAgICBwcml2YXRlIF9tYXhEYXRlOiBUIHwgbnVsbDtcbiAgICBASW5wdXQoKVxuICAgIGdldCBtYXhEYXRlKCk6IFQgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21heERhdGU7XG4gICAgfVxuXG4gICAgc2V0IG1heERhdGUodmFsdWU6IFQgfCBudWxsKSB7XG4gICAgICAgIHZhbHVlID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuZGVzZXJpYWxpemUodmFsdWUpO1xuICAgICAgICB0aGlzLl9tYXhEYXRlID0gdGhpcy5nZXRWYWxpZERhdGUodmFsdWUpO1xuICAgICAgICBpZiAodGhpcy5pbml0aWF0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVNb250aExpc3QoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVhZG9ubHkgbW9udGhOYW1lczogc3RyaW5nW107XG5cbiAgICBwcml2YXRlIF9tb250aHM6IENhbGVuZGFyQ2VsbFtdW107XG4gICAgZ2V0IG1vbnRocygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRocztcbiAgICB9XG5cbiAgICBnZXQgYWN0aXZlQ2VsbCgpOiBudW1iZXIge1xuICAgICAgICBpZiAodGhpcy5fcGlja2VyTW9tZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0TW9udGgodGhpcy5fcGlja2VyTW9tZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBpc0luU2luZ2xlTW9kZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0TW9kZSA9PT0gJ3NpbmdsZSc7XG4gICAgfVxuXG4gICAgZ2V0IGlzSW5SYW5nZU1vZGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLnNlbGVjdE1vZGUgPT09ICdyYW5nZScgfHxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0TW9kZSA9PT0gJ3JhbmdlRnJvbScgfHxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0TW9kZSA9PT0gJ3JhbmdlVG8nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2NhbGVTdWI6IFN1YnNjcmlwdGlvbiA9IFN1YnNjcmlwdGlvbi5FTVBUWTtcblxuICAgIHByaXZhdGUgaW5pdGlhdGVkID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgdG9kYXlNb250aDogbnVtYmVyIHwgbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IHRvIGhvbGQgYWxsIHNlbGVjdGVkRGF0ZXMnIG1vbnRoIHZhbHVlXG4gICAgICogdGhlIHZhbHVlIGlzIHRoZSBtb250aCBudW1iZXIgaW4gY3VycmVudCB5ZWFyXG4gICAgICogKi9cbiAgICBwdWJsaWMgc2VsZWN0ZWRNb250aHM6IG51bWJlcltdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBDYWxsYmFjayB0byBpbnZva2Ugd2hlbiBhIG5ldyBtb250aCBpcyBzZWxlY3RlZFxuICAgICAqICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgY2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxUPigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHMgdGhlIHNlbGVjdGVkIHllYXIuIFRoaXMgZG9lc24ndCBpbXBseSBhIGNoYW5nZSBvbiB0aGUgc2VsZWN0ZWQgZGF0ZVxuICAgICAqICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgbW9udGhTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8VD4oKTtcblxuICAgIC8qKiBFbWl0cyB3aGVuIGFueSBkYXRlIGlzIGFjdGl2YXRlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBwaWNrZXJNb21lbnRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxUPiA9IG5ldyBFdmVudEVtaXR0ZXI8VD4oKTtcblxuICAgIC8qKiBFbWl0cyB3aGVuIHVzZSBrZXlib2FyZCBlbnRlciB0byBzZWxlY3QgYSBjYWxlbmRhciBjZWxsICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkga2V5Ym9hcmRFbnRlcjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIC8qKiBUaGUgYm9keSBvZiBjYWxlbmRhciB0YWJsZSAqL1xuICAgIEBWaWV3Q2hpbGQoT3dsQ2FsZW5kYXJCb2R5Q29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIGNhbGVuZGFyQm9keUVsbTogT3dsQ2FsZW5kYXJCb2R5Q29tcG9uZW50O1xuXG4gICAgZ2V0IG93bERUQ2FsZW5kYXJWaWV3KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgZGF0ZVRpbWVBZGFwdGVyOiBEYXRlVGltZUFkYXB0ZXI8VD4sXG4gICAgICAgIEBPcHRpb25hbCgpXG4gICAgICAgIEBJbmplY3QoT1dMX0RBVEVfVElNRV9GT1JNQVRTKVxuICAgICAgICBwcml2YXRlIGRhdGVUaW1lRm9ybWF0czogT3dsRGF0ZVRpbWVGb3JtYXRzXG4gICAgKSB7XG4gICAgICAgIHRoaXMubW9udGhOYW1lcyA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldE1vbnRoTmFtZXMoJ3Nob3J0Jyk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmxvY2FsZVN1YiA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmxvY2FsZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVNb250aExpc3QoKTtcbiAgICAgICAgICAgIHRoaXMuY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVNb250aExpc3QoKTtcbiAgICAgICAgdGhpcy5pbml0aWF0ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5sb2NhbGVTdWIudW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGUgYSBjYWxlbmRhckNlbGwgc2VsZWN0ZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgc2VsZWN0Q2FsZW5kYXJDZWxsKGNlbGw6IENhbGVuZGFyQ2VsbCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlbGVjdE1vbnRoKGNlbGwudmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhhbmRsZSBhIG5ldyBtb250aCBzZWxlY3RlZFxuICAgICAqL1xuICAgIHByaXZhdGUgc2VsZWN0TW9udGgobW9udGg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBmaXJzdERhdGVPZk1vbnRoID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuY3JlYXRlRGF0ZShcbiAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldFllYXIodGhpcy5waWNrZXJNb21lbnQpLFxuICAgICAgICAgICAgbW9udGgsXG4gICAgICAgICAgICAxXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5tb250aFNlbGVjdGVkLmVtaXQoZmlyc3REYXRlT2ZNb250aCk7XG5cbiAgICAgICAgY29uc3QgZGF5c0luTW9udGggPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXROdW1EYXlzSW5Nb250aChcbiAgICAgICAgICAgIGZpcnN0RGF0ZU9mTW9udGhcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuY3JlYXRlRGF0ZShcbiAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldFllYXIodGhpcy5waWNrZXJNb21lbnQpLFxuICAgICAgICAgICAgbW9udGgsXG4gICAgICAgICAgICBNYXRoLm1pbihcbiAgICAgICAgICAgICAgICBkYXlzSW5Nb250aCxcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXREYXRlKHRoaXMucGlja2VyTW9tZW50KVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldEhvdXJzKHRoaXMucGlja2VyTW9tZW50KSxcbiAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldE1pbnV0ZXModGhpcy5waWNrZXJNb21lbnQpLFxuICAgICAgICAgICAgdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0U2Vjb25kcyh0aGlzLnBpY2tlck1vbWVudClcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmNoYW5nZS5lbWl0KHJlc3VsdCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlIGtleWRvd24gZXZlbnQgb24gY2FsZW5kYXIgYm9keVxuICAgICAqL1xuICAgIHB1YmxpYyBoYW5kbGVDYWxlbmRhcktleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgbGV0IG1vbWVudDtcbiAgICAgICAgc3dpdGNoIChldmVudC5rZXlDb2RlKSB7XG4gICAgICAgICAgICAvLyBtaW51cyAxIG1vbnRoXG4gICAgICAgICAgICBjYXNlIExFRlRfQVJST1c6XG4gICAgICAgICAgICAgICAgbW9tZW50ID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuYWRkQ2FsZW5kYXJNb250aHMoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGlja2VyTW9tZW50LFxuICAgICAgICAgICAgICAgICAgICAtMVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5waWNrZXJNb21lbnRDaGFuZ2UuZW1pdChtb21lbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBhZGQgMSBtb250aFxuICAgICAgICAgICAgY2FzZSBSSUdIVF9BUlJPVzpcbiAgICAgICAgICAgICAgICBtb21lbnQgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5hZGRDYWxlbmRhck1vbnRocyhcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5waWNrZXJNb21lbnQsXG4gICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMucGlja2VyTW9tZW50Q2hhbmdlLmVtaXQobW9tZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gbWludXMgMyBtb250aHNcbiAgICAgICAgICAgIGNhc2UgVVBfQVJST1c6XG4gICAgICAgICAgICAgICAgbW9tZW50ID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuYWRkQ2FsZW5kYXJNb250aHMoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGlja2VyTW9tZW50LFxuICAgICAgICAgICAgICAgICAgICAtM1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5waWNrZXJNb21lbnRDaGFuZ2UuZW1pdChtb21lbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBhZGQgMyBtb250aHNcbiAgICAgICAgICAgIGNhc2UgRE9XTl9BUlJPVzpcbiAgICAgICAgICAgICAgICBtb21lbnQgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5hZGRDYWxlbmRhck1vbnRocyhcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5waWNrZXJNb21lbnQsXG4gICAgICAgICAgICAgICAgICAgIDNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMucGlja2VyTW9tZW50Q2hhbmdlLmVtaXQobW9tZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gbW92ZSB0byBmaXJzdCBtb250aCBvZiBjdXJyZW50IHllYXJcbiAgICAgICAgICAgIGNhc2UgSE9NRTpcbiAgICAgICAgICAgICAgICBtb21lbnQgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5hZGRDYWxlbmRhck1vbnRocyhcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5waWNrZXJNb21lbnQsXG4gICAgICAgICAgICAgICAgICAgIC10aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRNb250aCh0aGlzLnBpY2tlck1vbWVudClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMucGlja2VyTW9tZW50Q2hhbmdlLmVtaXQobW9tZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gbW92ZSB0byBsYXN0IG1vbnRoIG9mIGN1cnJlbnQgeWVhclxuICAgICAgICAgICAgY2FzZSBFTkQ6XG4gICAgICAgICAgICAgICAgbW9tZW50ID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuYWRkQ2FsZW5kYXJNb250aHMoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGlja2VyTW9tZW50LFxuICAgICAgICAgICAgICAgICAgICAxMSAtIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldE1vbnRoKHRoaXMucGlja2VyTW9tZW50KVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5waWNrZXJNb21lbnRDaGFuZ2UuZW1pdChtb21lbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBtaW51cyAxIHllYXIgKG9yIDEwIHllYXIpXG4gICAgICAgICAgICBjYXNlIFBBR0VfVVA6XG4gICAgICAgICAgICAgICAgbW9tZW50ID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuYWRkQ2FsZW5kYXJZZWFycyhcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5waWNrZXJNb21lbnQsXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LmFsdEtleSA/IC0xMCA6IC0xXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBpY2tlck1vbWVudENoYW5nZS5lbWl0KG1vbWVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIGFkZCAxIHllYXIgKG9yIDEwIHllYXIpXG4gICAgICAgICAgICBjYXNlIFBBR0VfRE9XTjpcbiAgICAgICAgICAgICAgICBtb21lbnQgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5hZGRDYWxlbmRhclllYXJzKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBpY2tlck1vbWVudCxcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQuYWx0S2V5ID8gMTAgOiAxXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBpY2tlck1vbWVudENoYW5nZS5lbWl0KG1vbWVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIFNlbGVjdCBjdXJyZW50IG1vbnRoXG4gICAgICAgICAgICBjYXNlIEVOVEVSOlxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0TW9udGgoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldE1vbnRoKHRoaXMucGlja2VyTW9tZW50KVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5rZXlib2FyZEVudGVyLmVtaXQoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5mb2N1c0FjdGl2ZUNlbGwoKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZW5lcmF0ZSB0aGUgY2FsZW5kYXIgbW9udGggbGlzdFxuICAgICAqICovXG4gICAgcHJpdmF0ZSBnZW5lcmF0ZU1vbnRoTGlzdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnBpY2tlck1vbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRTZWxlY3RlZE1vbnRocygpO1xuICAgICAgICB0aGlzLnRvZGF5TW9udGggPSB0aGlzLmdldE1vbnRoSW5DdXJyZW50WWVhcihcbiAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLm5vdygpXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fbW9udGhzID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTU9OVEhTX1BFUl9ZRUFSIC8gTU9OVEhTX1BFUl9ST1c7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgcm93ID0gW107XG5cbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgTU9OVEhTX1BFUl9ST1c7IGorKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1vbnRoID0gaiArIGkgKiBNT05USFNfUEVSX1JPVztcbiAgICAgICAgICAgICAgICBjb25zdCBtb250aENlbGwgPSB0aGlzLmNyZWF0ZU1vbnRoQ2VsbChtb250aCk7XG4gICAgICAgICAgICAgICAgcm93LnB1c2gobW9udGhDZWxsKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fbW9udGhzLnB1c2gocm93KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIENhbGVuZGFyQ2VsbCBmb3IgdGhlIGdpdmVuIG1vbnRoLlxuICAgICAqL1xuICAgIHByaXZhdGUgY3JlYXRlTW9udGhDZWxsKG1vbnRoOiBudW1iZXIpOiBDYWxlbmRhckNlbGwge1xuICAgICAgICBjb25zdCBzdGFydERhdGVPZk1vbnRoID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuY3JlYXRlRGF0ZShcbiAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldFllYXIodGhpcy5waWNrZXJNb21lbnQpLFxuICAgICAgICAgICAgbW9udGgsXG4gICAgICAgICAgICAxXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGFyaWFMYWJlbCA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmZvcm1hdChcbiAgICAgICAgICAgIHN0YXJ0RGF0ZU9mTW9udGgsXG4gICAgICAgICAgICB0aGlzLmRhdGVUaW1lRm9ybWF0cy5tb250aFllYXJBMTF5TGFiZWxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgY2VsbENsYXNzID0gJ293bC1kdC1tb250aC0nICsgbW9udGg7XG4gICAgICAgIHJldHVybiBuZXcgQ2FsZW5kYXJDZWxsKFxuICAgICAgICAgICAgbW9udGgsXG4gICAgICAgICAgICB0aGlzLm1vbnRoTmFtZXNbbW9udGhdLFxuICAgICAgICAgICAgYXJpYUxhYmVsLFxuICAgICAgICAgICAgdGhpcy5pc01vbnRoRW5hYmxlZChtb250aCksXG4gICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgIGNlbGxDbGFzc1xuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIHRoZSBnaXZlbiBtb250aCBpcyBlbmFibGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGlzTW9udGhFbmFibGVkKG1vbnRoOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZmlyc3REYXRlT2ZNb250aCA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmNyZWF0ZURhdGUoXG4gICAgICAgICAgICB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRZZWFyKHRoaXMucGlja2VyTW9tZW50KSxcbiAgICAgICAgICAgIG1vbnRoLFxuICAgICAgICAgICAgMVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIElmIGFueSBkYXRlIGluIHRoZSBtb250aCBpcyBzZWxlY3RhYmxlLFxuICAgICAgICAvLyB3ZSBjb3VudCB0aGUgbW9udGggYXMgZW5hYmxlXG4gICAgICAgIGZvciAoXG4gICAgICAgICAgICBsZXQgZGF0ZSA9IGZpcnN0RGF0ZU9mTW9udGg7XG4gICAgICAgICAgICB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRNb250aChkYXRlKSA9PT0gbW9udGg7XG4gICAgICAgICAgICBkYXRlID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuYWRkQ2FsZW5kYXJEYXlzKGRhdGUsIDEpXG4gICAgICAgICkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICEhZGF0ZSAmJlxuICAgICAgICAgICAgICAgICghdGhpcy5kYXRlRmlsdGVyIHx8IHRoaXMuZGF0ZUZpbHRlcihkYXRlKSkgJiZcbiAgICAgICAgICAgICAgICAoIXRoaXMubWluRGF0ZSB8fFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lQWRhcHRlci5jb21wYXJlKGRhdGUsIHRoaXMubWluRGF0ZSkgPj0gMCkgJiZcbiAgICAgICAgICAgICAgICAoIXRoaXMubWF4RGF0ZSB8fFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lQWRhcHRlci5jb21wYXJlKGRhdGUsIHRoaXMubWF4RGF0ZSkgPD0gMClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIG1vbnRoIGluIHRoaXMgeWVhciB0aGF0IHRoZSBnaXZlbiBEYXRlIGZhbGxzIG9uLlxuICAgICAqIFJldHVybnMgbnVsbCBpZiB0aGUgZ2l2ZW4gRGF0ZSBpcyBpbiBhbm90aGVyIHllYXIuXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRNb250aEluQ3VycmVudFllYXIoZGF0ZTogVCB8IG51bGwpOiBudW1iZXIge1xuICAgICAgICBpZiAodGhpcy5nZXRWYWxpZERhdGUoZGF0ZSkgJiYgdGhpcy5nZXRWYWxpZERhdGUodGhpcy5fcGlja2VyTW9tZW50KSkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5kYXRlVGltZUFkYXB0ZXIuY29tcGFyZVllYXIoXG4gICAgICAgICAgICAgICAgZGF0ZSxcbiAgICAgICAgICAgICAgICB0aGlzLl9waWNrZXJNb21lbnRcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIC8vIDwgMCA6IHRoZSBnaXZlbiBkYXRlJ3MgeWVhciBpcyBiZWZvcmUgcGlja2VyTW9tZW50J3MgeWVhciwgd2UgcmV0dXJuIC0xIGFzIHNlbGVjdGVkIG1vbnRoIHZhbHVlLlxuICAgICAgICAgICAgLy8gPiAwIDogdGhlIGdpdmVuIGRhdGUncyB5ZWFyIGlzIGFmdGVyIHBpY2tlck1vbWVudCdzIHllYXIsIHdlIHJldHVybiAxMiBhcyBzZWxlY3RlZCBtb250aCB2YWx1ZS5cbiAgICAgICAgICAgIC8vIDAgOiB0aGUgZ2l2ZSBkYXRlJ3MgeWVhciBpcyBzYW1lIGFzIHRoZSBwaWNrZXJNb21lbnQncyB5ZWFyLCB3ZSByZXR1cm4gdGhlIGFjdHVhbCBtb250aCB2YWx1ZS5cbiAgICAgICAgICAgIGlmIChyZXN1bHQgPCAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQgPiAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDEyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0TW9udGgoZGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCB0aGUgc2VsZWN0ZWRNb250aHMgdmFsdWVcbiAgICAgKiBJbiBzaW5nbGUgbW9kZSwgaXQgaGFzIG9ubHkgb25lIHZhbHVlIHdoaWNoIHJlcHJlc2VudCB0aGUgbW9udGggdGhlIHNlbGVjdGVkIGRhdGUgaW5cbiAgICAgKiBJbiByYW5nZSBtb2RlLCBpdCB3b3VsZCBoYXMgdHdvIHZhbHVlcywgb25lIGZvciB0aGUgbW9udGggdGhlIGZyb21WYWx1ZSBpbiBhbmQgdGhlIG90aGVyIGZvciB0aGUgbW9udGggdGhlIHRvVmFsdWUgaW5cbiAgICAgKiAqL1xuICAgIHByaXZhdGUgc2V0U2VsZWN0ZWRNb250aHMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRNb250aHMgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuaXNJblNpbmdsZU1vZGUgJiYgdGhpcy5zZWxlY3RlZCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1vbnRoc1swXSA9IHRoaXMuZ2V0TW9udGhJbkN1cnJlbnRZZWFyKHRoaXMuc2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNJblJhbmdlTW9kZSAmJiB0aGlzLnNlbGVjdGVkcykge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1vbnRoc1swXSA9IHRoaXMuZ2V0TW9udGhJbkN1cnJlbnRZZWFyKFxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRzWzBdXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1vbnRoc1sxXSA9IHRoaXMuZ2V0TW9udGhJbkN1cnJlbnRZZWFyKFxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRzWzFdXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgdGhlIGdpdmVuIGRhdGVzIGFyZSBpbiB0aGUgc2FtZSB5ZWFyXG4gICAgICovXG4gICAgcHJpdmF0ZSBoYXNTYW1lWWVhcihkYXRlTGVmdDogVCwgZGF0ZVJpZ2h0OiBUKSB7XG4gICAgICAgIHJldHVybiAhIShcbiAgICAgICAgICAgIGRhdGVMZWZ0ICYmXG4gICAgICAgICAgICBkYXRlUmlnaHQgJiZcbiAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldFllYXIoZGF0ZUxlZnQpID09PVxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmdldFllYXIoZGF0ZVJpZ2h0KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBhIHZhbGlkIGRhdGUgb2JqZWN0XG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRWYWxpZERhdGUob2JqOiBhbnkpOiBUIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGVUaW1lQWRhcHRlci5pc0RhdGVJbnN0YW5jZShvYmopICYmXG4gICAgICAgICAgICB0aGlzLmRhdGVUaW1lQWRhcHRlci5pc1ZhbGlkKG9iailcbiAgICAgICAgICAgID8gb2JqXG4gICAgICAgICAgICA6IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmb2N1c0FjdGl2ZUNlbGwoKSB7XG4gICAgICAgIHRoaXMuY2FsZW5kYXJCb2R5RWxtLmZvY3VzQWN0aXZlQ2VsbCgpO1xuICAgIH1cbn1cbiJdfQ==
|