hof 22.0.0-timeout-warning-beta.10 → 22.0.0-timeout-warning-beta.11

Sign up to get free protection for your applications and to get access to all the features.
@@ -1 +1 @@
1
- {"parent":null,"pid":19757,"argv":["/Users/user/.nvm/versions/node/v20.9.0/bin/node","/Users/user/Documents/HO/HOF/hof/node_modules/.bin/_mocha","test/**/*.spec.js","sandbox/test/**/*.spec.js"],"execArgv":[],"cwd":"/Users/user/Documents/HO/HOF/hof","time":1722549159266,"ppid":19755,"coverageFilename":"/Users/user/Documents/HO/HOF/hof/.nyc_output/2a40c14b-d10f-42bf-b98d-22fe19f633f1.json","externalId":"","uuid":"2a40c14b-d10f-42bf-b98d-22fe19f633f1","files":["/Users/user/Documents/HO/HOF/hof/model/index.js","/Users/user/Documents/HO/HOF/hof/model/apis/axios-settings.js","/Users/user/Documents/HO/HOF/hof/components/index.js","/Users/user/Documents/HO/HOF/hof/components/address-lookup/index.js","/Users/user/Documents/HO/HOF/hof/components/address-lookup/default-model.js","/Users/user/Documents/HO/HOF/hof/components/address-lookup/defaults.js","/Users/user/Documents/HO/HOF/hof/components/clear-session/index.js","/Users/user/Documents/HO/HOF/hof/components/combine-and-loop-fields/index.js","/Users/user/Documents/HO/HOF/hof/components/date/index.js","/Users/user/Documents/HO/HOF/hof/components/date/fields.js","/Users/user/Documents/HO/HOF/hof/components/emailer/index.js","/Users/user/Documents/HO/HOF/hof/components/emailer/email-service.js","/Users/user/Documents/HO/HOF/hof/components/emailer/emailer.js","/Users/user/Documents/HO/HOF/hof/components/emailer/transports/index.js","/Users/user/Documents/HO/HOF/hof/components/emailer/transports/smtp.js","/Users/user/Documents/HO/HOF/hof/components/emailer/transports/ses.js","/Users/user/Documents/HO/HOF/hof/components/emailer/transports/stub.js","/Users/user/Documents/HO/HOF/hof/components/emailer/transports/debug.js","/Users/user/Documents/HO/HOF/hof/components/homeoffice-countries/index.js","/Users/user/Documents/HO/HOF/hof/config/component-defaults.js","/Users/user/Documents/HO/HOF/hof/components/notify/index.js","/Users/user/Documents/HO/HOF/hof/components/notify/notify.js","/Users/user/Documents/HO/HOF/hof/components/summary/index.js","/Users/user/Documents/HO/HOF/hof/config/rate-limits.js","/Users/user/Documents/HO/HOF/hof/middleware/rate-limiter.js","/Users/user/Documents/HO/HOF/hof/config/hof-defaults.js","/Users/user/Documents/HO/HOF/hof/components/session-timeout-warning/index.js","/Users/user/Documents/HO/HOF/hof/controller/base-controller.js","/Users/user/Documents/HO/HOF/hof/controller/formatting/index.js","/Users/user/Documents/HO/HOF/hof/controller/validation/index.js","/Users/user/Documents/HO/HOF/hof/controller/validation/validators.js","/Users/user/Documents/HO/HOF/hof/controller/validation/email.js","/Users/user/Documents/HO/HOF/hof/controller/validation-error.js","/Users/user/Documents/HO/HOF/hof/utilities/index.js","/Users/user/Documents/HO/HOF/hof/utilities/autofill/index.js","/Users/user/Documents/HO/HOF/hof/utilities/autofill/inputs.js","/Users/user/Documents/HO/HOF/hof/utilities/test-data/index.js","/Users/user/Documents/HO/HOF/hof/utilities/countries.js","/Users/user/Documents/HO/HOF/hof/utilities/helpers/index.js","/Users/user/Documents/HO/HOF/hof/utilities/reqres/index.js","/Users/user/Documents/HO/HOF/hof/config/sanitisation-rules.js","/Users/user/Documents/HO/HOF/hof/controller/formatting/formatters.js","/Users/user/Documents/HO/HOF/hof/controller/index.js","/Users/user/Documents/HO/HOF/hof/controller/behaviour-session.js","/Users/user/Documents/HO/HOF/hof/controller/behaviour-hooks.js","/Users/user/Documents/HO/HOF/hof/controller/controller.js","/Users/user/Documents/HO/HOF/hof/sandbox/apps/sandbox/behaviours/country-select.js","/Users/user/Documents/HO/HOF/hof/frontend/template-mixins/mixins/index.js","/Users/user/Documents/HO/HOF/hof/frontend/template-mixins/mixins/template-mixins.js","/Users/user/Documents/HO/HOF/hof/frontend/template-mixins/mixins/render.js","/Users/user/Documents/HO/HOF/hof/frontend/template-mixins/mixins/helpers.js","/Users/user/Documents/HO/HOF/hof/index.js","/Users/user/Documents/HO/HOF/hof/frontend/index.js","/Users/user/Documents/HO/HOF/hof/frontend/govuk-template/index.js","/Users/user/Documents/HO/HOF/hof/frontend/govuk-template/build/index.js","/Users/user/Documents/HO/HOF/hof/frontend/govuk-template/build/config.js","/Users/user/Documents/HO/HOF/hof/frontend/template-partials/index.js","/Users/user/Documents/HO/HOF/hof/frontend/template-partials/translations/index.js","/Users/user/Documents/HO/HOF/hof/frontend/themes/index.js","/Users/user/Documents/HO/HOF/hof/frontend/themes/gov-uk/index.js","/Users/user/Documents/HO/HOF/hof/frontend/toolkit/index.js","/Users/user/Documents/HO/HOF/hof/frontend/toolkit/assets/javascript/helpers.js","/Users/user/Documents/HO/HOF/hof/frontend/toolkit/assets/javascript/form-focus.js","/Users/user/Documents/HO/HOF/hof/frontend/toolkit/assets/javascript/progressive-reveal.js","/Users/user/Documents/HO/HOF/hof/frontend/toolkit/assets/javascript/validation.js","/Users/user/Documents/HO/HOF/hof/frontend/toolkit/assets/javascript/character-count.js","/Users/user/Documents/HO/HOF/hof/middleware/index.js","/Users/user/Documents/HO/HOF/hof/middleware/cookies.js","/Users/user/Documents/HO/HOF/hof/middleware/errors.js","/Users/user/Documents/HO/HOF/hof/middleware/not-found.js","/Users/user/Documents/HO/HOF/hof/middleware/deep-translate.js","/Users/user/Documents/HO/HOF/hof/lib/markdown.js","/Users/user/Documents/HO/HOF/hof/lib/router.js","/Users/user/Documents/HO/HOF/hof/wizard/index.js","/Users/user/Documents/HO/HOF/hof/wizard/behaviours/index.js","/Users/user/Documents/HO/HOF/hof/wizard/behaviours/complete.js","/Users/user/Documents/HO/HOF/hof/wizard/util/constants.js","/Users/user/Documents/HO/HOF/hof/lib/helpers.js","/Users/user/Documents/HO/HOF/hof/lib/health.js","/Users/user/Documents/HO/HOF/hof/lib/serve-static.js","/Users/user/Documents/HO/HOF/hof/lib/ga-tag.js","/Users/user/Documents/HO/HOF/hof/lib/sessions.js","/Users/user/Documents/HO/HOF/hof/lib/settings.js","/Users/user/Documents/HO/HOF/hof/lib/logger.js","/Users/user/Documents/HO/HOF/hof/build/index.js","/Users/user/Documents/HO/HOF/hof/config/builder-defaults.js","/Users/user/Documents/HO/HOF/hof/transpiler/index.js","/Users/user/Documents/HO/HOF/hof/transpiler/lib/compile.js","/Users/user/Documents/HO/HOF/hof/transpiler/lib/build.js","/Users/user/Documents/HO/HOF/hof/transpiler/lib/expand-dirs.js","/Users/user/Documents/HO/HOF/hof/transpiler/lib/aggregate.js","/Users/user/Documents/HO/HOF/hof/transpiler/lib/write-files.js","/Users/user/Documents/HO/HOF/hof/model/apis/index.js","/Users/user/Documents/HO/HOF/hof/model/apis/html-to-pdf-converter.js","/Users/user/Documents/HO/HOF/hof/wizard/model.js","/Users/user/Documents/HO/HOF/hof/wizard/middleware/back-links.js","/Users/user/Documents/HO/HOF/hof/wizard/util/helpers.js","/Users/user/Documents/HO/HOF/hof/wizard/middleware/check-complete.js","/Users/user/Documents/HO/HOF/hof/wizard/middleware/check-progress.js","/Users/user/Documents/HO/HOF/hof/wizard/middleware/check-session.js","/Users/user/Documents/HO/HOF/hof/wizard/middleware/csrf.js","/Users/user/Documents/HO/HOF/hof/sandbox/test/_unit/example_app/sections/summary-data-sections.spec.js","/Users/user/Documents/HO/HOF/hof/sandbox/apps/sandbox/sections/summary-data-sections.js","/Users/user/Documents/HO/HOF/hof/sandbox/apps/sandbox/lib/staticAppealStages.js","/Users/user/Documents/HO/HOF/hof/sandbox/apps/sandbox/fields.js","/Users/user/Documents/HO/HOF/hof/sandbox/test/helpers/utilities.js","/Users/user/Documents/HO/HOF/hof/sandbox/apps/sandbox/behaviours/international-number.js","/Users/user/Documents/HO/HOF/hof/lib/encryption.js","/Users/user/Documents/HO/HOF/hof/wizard/middleware/session.js","/Users/user/Documents/HO/HOF/hof/wizard/middleware/session-model.js"]}
1
+ {"parent":null,"pid":68951,"argv":["/Users/user/.nvm/versions/node/v20.9.0/bin/node","/Users/user/Documents/HO/HOF/hof/node_modules/.bin/_mocha","test/**/*.spec.js","sandbox/test/**/*.spec.js"],"execArgv":[],"cwd":"/Users/user/Documents/HO/HOF/hof","time":1722597219639,"ppid":68949,"coverageFilename":"/Users/user/Documents/HO/HOF/hof/.nyc_output/332fb170-672e-4e73-a6b5-5dfcf25ce16e.json","externalId":"","uuid":"332fb170-672e-4e73-a6b5-5dfcf25ce16e","files":["/Users/user/Documents/HO/HOF/hof/model/index.js","/Users/user/Documents/HO/HOF/hof/model/apis/axios-settings.js","/Users/user/Documents/HO/HOF/hof/components/index.js","/Users/user/Documents/HO/HOF/hof/components/address-lookup/index.js","/Users/user/Documents/HO/HOF/hof/components/address-lookup/default-model.js","/Users/user/Documents/HO/HOF/hof/components/address-lookup/defaults.js","/Users/user/Documents/HO/HOF/hof/components/clear-session/index.js","/Users/user/Documents/HO/HOF/hof/components/combine-and-loop-fields/index.js","/Users/user/Documents/HO/HOF/hof/components/date/index.js","/Users/user/Documents/HO/HOF/hof/components/date/fields.js","/Users/user/Documents/HO/HOF/hof/components/emailer/index.js","/Users/user/Documents/HO/HOF/hof/components/emailer/email-service.js","/Users/user/Documents/HO/HOF/hof/components/emailer/emailer.js","/Users/user/Documents/HO/HOF/hof/components/emailer/transports/index.js","/Users/user/Documents/HO/HOF/hof/components/emailer/transports/smtp.js","/Users/user/Documents/HO/HOF/hof/components/emailer/transports/ses.js","/Users/user/Documents/HO/HOF/hof/components/emailer/transports/stub.js","/Users/user/Documents/HO/HOF/hof/components/emailer/transports/debug.js","/Users/user/Documents/HO/HOF/hof/components/homeoffice-countries/index.js","/Users/user/Documents/HO/HOF/hof/config/component-defaults.js","/Users/user/Documents/HO/HOF/hof/components/notify/index.js","/Users/user/Documents/HO/HOF/hof/components/notify/notify.js","/Users/user/Documents/HO/HOF/hof/components/summary/index.js","/Users/user/Documents/HO/HOF/hof/config/rate-limits.js","/Users/user/Documents/HO/HOF/hof/middleware/rate-limiter.js","/Users/user/Documents/HO/HOF/hof/config/hof-defaults.js","/Users/user/Documents/HO/HOF/hof/components/session-timeout-warning/index.js","/Users/user/Documents/HO/HOF/hof/controller/base-controller.js","/Users/user/Documents/HO/HOF/hof/controller/formatting/index.js","/Users/user/Documents/HO/HOF/hof/controller/validation/index.js","/Users/user/Documents/HO/HOF/hof/controller/validation/validators.js","/Users/user/Documents/HO/HOF/hof/controller/validation/email.js","/Users/user/Documents/HO/HOF/hof/controller/validation-error.js","/Users/user/Documents/HO/HOF/hof/utilities/index.js","/Users/user/Documents/HO/HOF/hof/utilities/autofill/index.js","/Users/user/Documents/HO/HOF/hof/utilities/autofill/inputs.js","/Users/user/Documents/HO/HOF/hof/utilities/test-data/index.js","/Users/user/Documents/HO/HOF/hof/utilities/countries.js","/Users/user/Documents/HO/HOF/hof/utilities/helpers/index.js","/Users/user/Documents/HO/HOF/hof/utilities/reqres/index.js","/Users/user/Documents/HO/HOF/hof/config/sanitisation-rules.js","/Users/user/Documents/HO/HOF/hof/controller/formatting/formatters.js","/Users/user/Documents/HO/HOF/hof/controller/index.js","/Users/user/Documents/HO/HOF/hof/controller/behaviour-session.js","/Users/user/Documents/HO/HOF/hof/controller/behaviour-hooks.js","/Users/user/Documents/HO/HOF/hof/controller/controller.js","/Users/user/Documents/HO/HOF/hof/sandbox/apps/sandbox/behaviours/country-select.js","/Users/user/Documents/HO/HOF/hof/frontend/template-mixins/mixins/index.js","/Users/user/Documents/HO/HOF/hof/frontend/template-mixins/mixins/template-mixins.js","/Users/user/Documents/HO/HOF/hof/frontend/template-mixins/mixins/render.js","/Users/user/Documents/HO/HOF/hof/frontend/template-mixins/mixins/helpers.js","/Users/user/Documents/HO/HOF/hof/index.js","/Users/user/Documents/HO/HOF/hof/frontend/index.js","/Users/user/Documents/HO/HOF/hof/frontend/govuk-template/index.js","/Users/user/Documents/HO/HOF/hof/frontend/govuk-template/build/index.js","/Users/user/Documents/HO/HOF/hof/frontend/govuk-template/build/config.js","/Users/user/Documents/HO/HOF/hof/frontend/template-partials/index.js","/Users/user/Documents/HO/HOF/hof/frontend/template-partials/translations/index.js","/Users/user/Documents/HO/HOF/hof/frontend/themes/index.js","/Users/user/Documents/HO/HOF/hof/frontend/themes/gov-uk/index.js","/Users/user/Documents/HO/HOF/hof/frontend/toolkit/index.js","/Users/user/Documents/HO/HOF/hof/frontend/toolkit/assets/javascript/helpers.js","/Users/user/Documents/HO/HOF/hof/frontend/toolkit/assets/javascript/form-focus.js","/Users/user/Documents/HO/HOF/hof/frontend/toolkit/assets/javascript/progressive-reveal.js","/Users/user/Documents/HO/HOF/hof/frontend/toolkit/assets/javascript/validation.js","/Users/user/Documents/HO/HOF/hof/frontend/toolkit/assets/javascript/character-count.js","/Users/user/Documents/HO/HOF/hof/middleware/index.js","/Users/user/Documents/HO/HOF/hof/middleware/cookies.js","/Users/user/Documents/HO/HOF/hof/middleware/errors.js","/Users/user/Documents/HO/HOF/hof/middleware/not-found.js","/Users/user/Documents/HO/HOF/hof/middleware/deep-translate.js","/Users/user/Documents/HO/HOF/hof/lib/markdown.js","/Users/user/Documents/HO/HOF/hof/lib/router.js","/Users/user/Documents/HO/HOF/hof/wizard/index.js","/Users/user/Documents/HO/HOF/hof/wizard/behaviours/index.js","/Users/user/Documents/HO/HOF/hof/wizard/behaviours/complete.js","/Users/user/Documents/HO/HOF/hof/wizard/util/constants.js","/Users/user/Documents/HO/HOF/hof/lib/helpers.js","/Users/user/Documents/HO/HOF/hof/lib/health.js","/Users/user/Documents/HO/HOF/hof/lib/serve-static.js","/Users/user/Documents/HO/HOF/hof/lib/ga-tag.js","/Users/user/Documents/HO/HOF/hof/lib/sessions.js","/Users/user/Documents/HO/HOF/hof/lib/settings.js","/Users/user/Documents/HO/HOF/hof/lib/logger.js","/Users/user/Documents/HO/HOF/hof/build/index.js","/Users/user/Documents/HO/HOF/hof/config/builder-defaults.js","/Users/user/Documents/HO/HOF/hof/transpiler/index.js","/Users/user/Documents/HO/HOF/hof/transpiler/lib/compile.js","/Users/user/Documents/HO/HOF/hof/transpiler/lib/build.js","/Users/user/Documents/HO/HOF/hof/transpiler/lib/expand-dirs.js","/Users/user/Documents/HO/HOF/hof/transpiler/lib/aggregate.js","/Users/user/Documents/HO/HOF/hof/transpiler/lib/write-files.js","/Users/user/Documents/HO/HOF/hof/model/apis/index.js","/Users/user/Documents/HO/HOF/hof/model/apis/html-to-pdf-converter.js","/Users/user/Documents/HO/HOF/hof/wizard/model.js","/Users/user/Documents/HO/HOF/hof/wizard/middleware/back-links.js","/Users/user/Documents/HO/HOF/hof/wizard/util/helpers.js","/Users/user/Documents/HO/HOF/hof/wizard/middleware/check-complete.js","/Users/user/Documents/HO/HOF/hof/wizard/middleware/check-progress.js","/Users/user/Documents/HO/HOF/hof/wizard/middleware/check-session.js","/Users/user/Documents/HO/HOF/hof/wizard/middleware/csrf.js","/Users/user/Documents/HO/HOF/hof/sandbox/test/_unit/example_app/sections/summary-data-sections.spec.js","/Users/user/Documents/HO/HOF/hof/sandbox/apps/sandbox/sections/summary-data-sections.js","/Users/user/Documents/HO/HOF/hof/sandbox/apps/sandbox/lib/staticAppealStages.js","/Users/user/Documents/HO/HOF/hof/sandbox/apps/sandbox/fields.js","/Users/user/Documents/HO/HOF/hof/sandbox/test/helpers/utilities.js","/Users/user/Documents/HO/HOF/hof/sandbox/apps/sandbox/behaviours/international-number.js","/Users/user/Documents/HO/HOF/hof/lib/encryption.js","/Users/user/Documents/HO/HOF/hof/wizard/middleware/session.js","/Users/user/Documents/HO/HOF/hof/wizard/middleware/session-model.js"]}
@@ -1 +1 @@
1
- {"processes":{"2a40c14b-d10f-42bf-b98d-22fe19f633f1":{"parent":null,"children":[]}},"files":{"/Users/user/Documents/HO/HOF/hof/model/index.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/model/apis/axios-settings.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/components/index.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/components/address-lookup/index.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/components/address-lookup/default-model.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/components/address-lookup/defaults.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/components/clear-session/index.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/components/combine-and-loop-fields/index.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/components/date/index.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/components/date/fields.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/components/emailer/index.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/components/emailer/email-service.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/components/emailer/emailer.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/components/emailer/transports/index.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/components/emailer/transports/smtp.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/components/emailer/transports/ses.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/components/emailer/transports/stub.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/components/emailer/transports/debug.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/components/homeoffice-countries/index.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/config/component-defaults.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/components/notify/index.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/components/notify/notify.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/components/summary/index.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/config/rate-limits.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/middleware/rate-limiter.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/config/hof-defaults.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/components/session-timeout-warning/index.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/controller/base-controller.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/controller/formatting/index.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/controller/validation/index.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/controller/validation/validators.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/controller/validation/email.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/controller/validation-error.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/utilities/index.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/utilities/autofill/index.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/utilities/autofill/inputs.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/utilities/test-data/index.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/utilities/countries.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/utilities/helpers/index.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/utilities/reqres/index.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/config/sanitisation-rules.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/controller/formatting/formatters.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/controller/index.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/controller/behaviour-session.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/controller/behaviour-hooks.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/controller/controller.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/sandbox/apps/sandbox/behaviours/country-select.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/frontend/template-mixins/mixins/index.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/frontend/template-mixins/mixins/template-mixins.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/frontend/template-mixins/mixins/render.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/frontend/template-mixins/mixins/helpers.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/index.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/frontend/index.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/frontend/govuk-template/index.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/frontend/govuk-template/build/index.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/frontend/govuk-template/build/config.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/frontend/template-partials/index.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/frontend/template-partials/translations/index.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/frontend/themes/index.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/frontend/themes/gov-uk/index.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/frontend/toolkit/index.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/frontend/toolkit/assets/javascript/helpers.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/frontend/toolkit/assets/javascript/form-focus.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/frontend/toolkit/assets/javascript/progressive-reveal.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/frontend/toolkit/assets/javascript/validation.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/frontend/toolkit/assets/javascript/character-count.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/middleware/index.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/middleware/cookies.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/middleware/errors.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/middleware/not-found.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/middleware/deep-translate.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/lib/markdown.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/lib/router.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/wizard/index.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/wizard/behaviours/index.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/wizard/behaviours/complete.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/wizard/util/constants.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/lib/helpers.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/lib/health.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/lib/serve-static.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/lib/ga-tag.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/lib/sessions.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/lib/settings.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/lib/logger.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/build/index.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/config/builder-defaults.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/transpiler/index.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/transpiler/lib/compile.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/transpiler/lib/build.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/transpiler/lib/expand-dirs.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/transpiler/lib/aggregate.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/transpiler/lib/write-files.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/model/apis/index.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/model/apis/html-to-pdf-converter.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/wizard/model.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/wizard/middleware/back-links.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/wizard/util/helpers.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/wizard/middleware/check-complete.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/wizard/middleware/check-progress.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/wizard/middleware/check-session.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/wizard/middleware/csrf.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/sandbox/test/_unit/example_app/sections/summary-data-sections.spec.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/sandbox/apps/sandbox/sections/summary-data-sections.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/sandbox/apps/sandbox/lib/staticAppealStages.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/sandbox/apps/sandbox/fields.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/sandbox/test/helpers/utilities.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/sandbox/apps/sandbox/behaviours/international-number.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/lib/encryption.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/wizard/middleware/session.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"],"/Users/user/Documents/HO/HOF/hof/wizard/middleware/session-model.js":["2a40c14b-d10f-42bf-b98d-22fe19f633f1"]},"externalIds":{}}
1
+ {"processes":{"332fb170-672e-4e73-a6b5-5dfcf25ce16e":{"parent":null,"children":[]}},"files":{"/Users/user/Documents/HO/HOF/hof/model/index.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/model/apis/axios-settings.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/components/index.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/components/address-lookup/index.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/components/address-lookup/default-model.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/components/address-lookup/defaults.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/components/clear-session/index.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/components/combine-and-loop-fields/index.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/components/date/index.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/components/date/fields.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/components/emailer/index.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/components/emailer/email-service.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/components/emailer/emailer.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/components/emailer/transports/index.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/components/emailer/transports/smtp.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/components/emailer/transports/ses.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/components/emailer/transports/stub.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/components/emailer/transports/debug.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/components/homeoffice-countries/index.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/config/component-defaults.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/components/notify/index.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/components/notify/notify.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/components/summary/index.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/config/rate-limits.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/middleware/rate-limiter.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/config/hof-defaults.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/components/session-timeout-warning/index.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/controller/base-controller.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/controller/formatting/index.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/controller/validation/index.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/controller/validation/validators.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/controller/validation/email.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/controller/validation-error.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/utilities/index.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/utilities/autofill/index.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/utilities/autofill/inputs.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/utilities/test-data/index.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/utilities/countries.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/utilities/helpers/index.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/utilities/reqres/index.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/config/sanitisation-rules.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/controller/formatting/formatters.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/controller/index.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/controller/behaviour-session.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/controller/behaviour-hooks.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/controller/controller.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/sandbox/apps/sandbox/behaviours/country-select.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/frontend/template-mixins/mixins/index.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/frontend/template-mixins/mixins/template-mixins.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/frontend/template-mixins/mixins/render.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/frontend/template-mixins/mixins/helpers.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/index.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/frontend/index.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/frontend/govuk-template/index.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/frontend/govuk-template/build/index.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/frontend/govuk-template/build/config.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/frontend/template-partials/index.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/frontend/template-partials/translations/index.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/frontend/themes/index.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/frontend/themes/gov-uk/index.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/frontend/toolkit/index.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/frontend/toolkit/assets/javascript/helpers.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/frontend/toolkit/assets/javascript/form-focus.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/frontend/toolkit/assets/javascript/progressive-reveal.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/frontend/toolkit/assets/javascript/validation.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/frontend/toolkit/assets/javascript/character-count.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/middleware/index.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/middleware/cookies.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/middleware/errors.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/middleware/not-found.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/middleware/deep-translate.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/lib/markdown.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/lib/router.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/wizard/index.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/wizard/behaviours/index.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/wizard/behaviours/complete.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/wizard/util/constants.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/lib/helpers.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/lib/health.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/lib/serve-static.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/lib/ga-tag.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/lib/sessions.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/lib/settings.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/lib/logger.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/build/index.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/config/builder-defaults.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/transpiler/index.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/transpiler/lib/compile.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/transpiler/lib/build.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/transpiler/lib/expand-dirs.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/transpiler/lib/aggregate.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/transpiler/lib/write-files.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/model/apis/index.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/model/apis/html-to-pdf-converter.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/wizard/model.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/wizard/middleware/back-links.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/wizard/util/helpers.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/wizard/middleware/check-complete.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/wizard/middleware/check-progress.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/wizard/middleware/check-session.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/wizard/middleware/csrf.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/sandbox/test/_unit/example_app/sections/summary-data-sections.spec.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/sandbox/apps/sandbox/sections/summary-data-sections.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/sandbox/apps/sandbox/lib/staticAppealStages.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/sandbox/apps/sandbox/fields.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/sandbox/test/helpers/utilities.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/sandbox/apps/sandbox/behaviours/international-number.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/lib/encryption.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/wizard/middleware/session.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"],"/Users/user/Documents/HO/HOF/hof/wizard/middleware/session-model.js":["332fb170-672e-4e73-a6b5-5dfcf25ce16e"]},"externalIds":{}}
@@ -1,3 +1,9 @@
1
+ <div class="govuk-timeout-warning-fallback">
2
+ <p>We will reset your application if you do not complete the page and press continue
3
+ in 5 minutes.</p>
4
+ <p>We do this to keep your information secure.</p>
5
+ </div>
6
+
1
7
  <dialog id="js-modal-dialog" data-session-timeout="{{sessionTimeOut}}" data-session-timeout-warning="{{sessionTimeOutWarning}}"
2
8
  data-url-redirect="/session-timeout" class="modal-dialog dialog" role="dialog"
3
9
  aria-live="polite" aria-labelledby="dialog-title" aria-describedby="at-timer">
@@ -8,7 +14,7 @@ data-url-redirect="/session-timeout" class="modal-dialog dialog" role="dialog"
8
14
  <div class="modal-dialog__inner__text govuk-body">
9
15
  <div id="timer" class="timer" aria-hidden="true" aria-relevant="additions"></div>
10
16
  <div id="at-timer" class="at-timer govuk-visually-hidden" role="status"></div>
11
- <p class="dialog-text">{{#dialogText}}If that happens, your progress will not be saved.{{/dialogText}}{{^dialogText}}{{#t}}pages.session-timeout-warning.dialog-text{{/t}}{{/dialogText}}</p>
17
+ <p class="dialog-text visually-hidden">{{#dialogText}}If that happens, your progress will not be saved.{{/dialogText}}{{^dialogText}}{{#t}}pages.session-timeout-warning.dialog-text{{/t}}{{/dialogText}}</p>
12
18
  </div>
13
19
  <button class="govuk-button dialog-button modal-dialog__inner__button js-dialog-close" id="timeout-continue-button" data-module="govuk-button">{{#timeoutContinueButton}}Stay on this page{{/timeoutContinueButton}}{{^timeoutContinueButton}}{{#t}}pages.session-timeout-warning.timeout-continue-button{{/t}}{{/timeoutContinueButton}}</button>
14
20
  <a href="/exit" class="govuk-link dialog-exit-link" role="button">{{#dialogExitLink}}Exit this form{{/dialogExitLink}}{{^dialogExitLink}}{{#t}}pages.session-timeout-warning.dialog-exit-link{{/t}}{{/dialogExitLink}}</a>
@@ -2,6 +2,7 @@
2
2
  'use strict';
3
3
 
4
4
  const $ = require('jquery');
5
+ window.dialogPolyfill = require('dialog-polyfill');
5
6
 
6
7
  // Modal dialog prototype
7
8
  window.GOVUK.sessionDialog = {
@@ -9,6 +10,7 @@ window.GOVUK.sessionDialog = {
9
10
  $el: $('#js-modal-dialog'),
10
11
  $lastFocusedEl: null,
11
12
  $closeButton: $('.modal-dialog .js-dialog-close'),
13
+ $fallBackElement: $('.govuk-timeout-warning-fallback'),
12
14
  dialogIsOpenClass: 'dialog-is-open',
13
15
  timers: [],
14
16
  warningTextPrefix: 'To protect your information, this page will time out in ',
@@ -243,7 +245,7 @@ window.GOVUK.sessionDialog = {
243
245
  // Add additional information in extraText which will get announced to AT the
244
246
  // first time the time out opens
245
247
  const countdownText = window.GOVUK.sessionDialog.countdownText(minutesLeft, secondsLeft);
246
- const text = window.GOVUK.sessionDialog.warningTextPrefix + '<strong>' + countdownText + '</strong>' + window.GOVUK.sessionDialog.warningTextSuffix;
248
+ const text = window.GOVUK.sessionDialog.warningTextPrefix + '<strong>' + countdownText + '</strong>' + window.GOVUK.sessionDialog.warningTextSuffix + '<p>' + window.GOVUK.sessionDialog.warningText + '</p>';
247
249
  const countdownAtText = window.GOVUK.sessionDialog.countdownAtText(minutesLeft, secondsLeft);
248
250
  const atText = window.GOVUK.sessionDialog.warningTextPrefix + countdownAtText + window.GOVUK.sessionDialog.warningTextSuffix + ' ' + window.GOVUK.sessionDialog.warningText;
249
251
  const extraText = '\n' + window.GOVUK.sessionDialog.warningTextExtra;
@@ -325,9 +327,22 @@ window.GOVUK.sessionDialog = {
325
327
  init: function (options) {
326
328
  $.extend(window.GOVUK.sessionDialog, options);
327
329
  if (window.GOVUK.sessionDialog.el && window.GOVUK.sessionDialog.isConfigured()) {
330
+ // Native dialog is not supported by some browsers so use polyfill
331
+ if (typeof HTMLDialogElement !== 'function') {
332
+ try {
333
+ window.dialogPolyfill.registerDialog(window.GOVUK.sessionDialog.el);
334
+ return true;
335
+ } catch (error) {
336
+ // Doesn't support polyfill (IE8) - display fallback element
337
+ window.GOVUK.sessionDialog.$fallBackElement.classList.add('govuk-!-display-block');
338
+ return false;
339
+ }
340
+ }
328
341
  window.GOVUK.sessionDialog.bindUIElements();
329
342
  window.GOVUK.sessionDialog.controller();
343
+ return true;
330
344
  }
345
+ return false;
331
346
  }
332
347
  };
333
348
  window.GOVUK.sessionDialog.init();
@@ -189,6 +189,10 @@ dialog {
189
189
  }
190
190
  }
191
191
 
192
+ .js-enabled .govuk-timeout-warning-fallback {
193
+ display: none;
194
+ }
195
+
192
196
  .tabular-numbers {
193
197
  font-family: "ntatabularnumbers", "nta", Arial, sans-serif;
194
198
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "hof",
3
3
  "description": "A bootstrap for HOF projects",
4
- "version": "22.0.0-timeout-warning-beta.10",
4
+ "version": "22.0.0-timeout-warning-beta.11",
5
5
  "license": "MIT",
6
6
  "main": "index.js",
7
7
  "author": "HomeOffice",
@@ -1,5 +1,8 @@
1
1
  {
2
- "exit": {},
2
+ "exit": {
3
+ "header": "You have left this application",
4
+ "title": "You have left this application"
5
+ },
3
6
  "fields": {
4
7
  "landing-page-radio": {
5
8
  "legend": "Which form would you like to explore?",
@@ -9347,6 +9347,10 @@ dialog[open] + .backdrop, dialog[open]::backdrop {
9347
9347
  max-width: 500px;
9348
9348
  }
9349
9349
  }
9350
+ .js-enabled .govuk-timeout-warning-fallback {
9351
+ display: none;
9352
+ }
9353
+
9350
9354
  .tabular-numbers {
9351
9355
  font-family: "ntatabularnumbers", "nta", Arial, sans-serif;
9352
9356
  }
@@ -297,11 +297,12 @@ helpers.documentReady(cookieSettings.onLoad);
297
297
  helpers.documentReady(characterCount);
298
298
  helpers.documentReady(validation);
299
299
 
300
- },{"../../../toolkit":12,"./cookieSettings":1,"./govuk-cookies":2,"./session-timeout-dialog":4,"./skip-to-main":5,"govuk-frontend":13}],4:[function(require,module,exports){
300
+ },{"../../../toolkit":12,"./cookieSettings":1,"./govuk-cookies":2,"./session-timeout-dialog":4,"./skip-to-main":5,"govuk-frontend":14}],4:[function(require,module,exports){
301
301
  /* eslint max-len: 0 */
302
302
  'use strict';
303
303
 
304
304
  const $ = require('jquery');
305
+ window.dialogPolyfill = require('dialog-polyfill');
305
306
 
306
307
  // Modal dialog prototype
307
308
  window.GOVUK.sessionDialog = {
@@ -309,6 +310,7 @@ window.GOVUK.sessionDialog = {
309
310
  $el: $('#js-modal-dialog'),
310
311
  $lastFocusedEl: null,
311
312
  $closeButton: $('.modal-dialog .js-dialog-close'),
313
+ $fallBackElement: $('.govuk-timeout-warning-fallback'),
312
314
  dialogIsOpenClass: 'dialog-is-open',
313
315
  timers: [],
314
316
  warningTextPrefix: 'To protect your information, this page will time out in ',
@@ -543,7 +545,7 @@ window.GOVUK.sessionDialog = {
543
545
  // Add additional information in extraText which will get announced to AT the
544
546
  // first time the time out opens
545
547
  const countdownText = window.GOVUK.sessionDialog.countdownText(minutesLeft, secondsLeft);
546
- const text = window.GOVUK.sessionDialog.warningTextPrefix + '<strong>' + countdownText + '</strong>' + window.GOVUK.sessionDialog.warningTextSuffix;
548
+ const text = window.GOVUK.sessionDialog.warningTextPrefix + '<strong>' + countdownText + '</strong>' + window.GOVUK.sessionDialog.warningTextSuffix + '<p>' + window.GOVUK.sessionDialog.warningText + '</p>';
547
549
  const countdownAtText = window.GOVUK.sessionDialog.countdownAtText(minutesLeft, secondsLeft);
548
550
  const atText = window.GOVUK.sessionDialog.warningTextPrefix + countdownAtText + window.GOVUK.sessionDialog.warningTextSuffix + ' ' + window.GOVUK.sessionDialog.warningText;
549
551
  const extraText = '\n' + window.GOVUK.sessionDialog.warningTextExtra;
@@ -625,14 +627,27 @@ window.GOVUK.sessionDialog = {
625
627
  init: function (options) {
626
628
  $.extend(window.GOVUK.sessionDialog, options);
627
629
  if (window.GOVUK.sessionDialog.el && window.GOVUK.sessionDialog.isConfigured()) {
630
+ // Native dialog is not supported by some browsers so use polyfill
631
+ if (typeof HTMLDialogElement !== 'function') {
632
+ try {
633
+ window.dialogPolyfill.registerDialog(window.GOVUK.sessionDialog.el);
634
+ return true;
635
+ } catch (error) {
636
+ // Doesn't support polyfill (IE8) - display fallback element
637
+ window.GOVUK.sessionDialog.$fallBackElement.classList.add('govuk-!-display-block');
638
+ return false;
639
+ }
640
+ }
628
641
  window.GOVUK.sessionDialog.bindUIElements();
629
642
  window.GOVUK.sessionDialog.controller();
643
+ return true;
630
644
  }
645
+ return false;
631
646
  }
632
647
  };
633
648
  window.GOVUK.sessionDialog.init();
634
649
 
635
- },{"jquery":14}],5:[function(require,module,exports){
650
+ },{"dialog-polyfill":13,"jquery":15}],5:[function(require,module,exports){
636
651
  const skipToMain = function () {
637
652
  const skipToMainLink = document.getElementById('skip-to-main');
638
653
  const firstControlId = skipToMainLink.hash.split('#')[1] ? skipToMainLink.hash.split('#')[1] : 'main-content';
@@ -857,7 +872,7 @@ function formFocus() {
857
872
 
858
873
  module.exports = formFocus;
859
874
 
860
- },{"./helpers":8,"lodash":15}],8:[function(require,module,exports){
875
+ },{"./helpers":8,"lodash":16}],8:[function(require,module,exports){
861
876
  /* eslint-disable max-len, no-var, no-param-reassign, vars-on-top, no-extend-native */
862
877
  'use strict';
863
878
 
@@ -1036,7 +1051,7 @@ helpers.pagehide = function (func) {
1036
1051
 
1037
1052
  module.exports = helpers;
1038
1053
 
1039
- },{"lodash":15}],9:[function(require,module,exports){
1054
+ },{"lodash":16}],9:[function(require,module,exports){
1040
1055
  /* eslint-disable max-len, no-var, no-param-reassign, vars-on-top */
1041
1056
  'use strict';
1042
1057
 
@@ -1110,7 +1125,7 @@ function progressiveReveal() {
1110
1125
 
1111
1126
  module.exports = progressiveReveal;
1112
1127
 
1113
- },{"./helpers":8,"lodash":15}],10:[function(require,module,exports){
1128
+ },{"./helpers":8,"lodash":16}],10:[function(require,module,exports){
1114
1129
  /* eslint-disable max-len, no-var, no-shadow, vars-on-top */
1115
1130
  var each = require('lodash').forEach;
1116
1131
 
@@ -1183,7 +1198,7 @@ function validation() {
1183
1198
 
1184
1199
  module.exports = validation;
1185
1200
 
1186
- },{"./helpers":8,"lodash":15}],11:[function(require,module,exports){
1201
+ },{"./helpers":8,"lodash":16}],11:[function(require,module,exports){
1187
1202
  /* eslint-disable max-len, no-var, no-cond-assign, no-param-reassign, vars-on-top */
1188
1203
  // <details> polyfill
1189
1204
  // http://caniuse.com/#feat=details
@@ -1387,6 +1402,874 @@ module.exports = {
1387
1402
  };
1388
1403
 
1389
1404
  },{"./assets/javascript/character-count":6,"./assets/javascript/form-focus":7,"./assets/javascript/helpers":8,"./assets/javascript/progressive-reveal":9,"./assets/javascript/validation":10,"./assets/javascript/vendor/details.polyfill":11}],13:[function(require,module,exports){
1405
+ (function (global, factory) {
1406
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
1407
+ typeof define === 'function' && define.amd ? define(factory) :
1408
+ (global = global || self, global.dialogPolyfill = factory());
1409
+ }(this, function () { 'use strict';
1410
+
1411
+ // nb. This is for IE10 and lower _only_.
1412
+ var supportCustomEvent = window.CustomEvent;
1413
+ if (!supportCustomEvent || typeof supportCustomEvent === 'object') {
1414
+ supportCustomEvent = function CustomEvent(event, x) {
1415
+ x = x || {};
1416
+ var ev = document.createEvent('CustomEvent');
1417
+ ev.initCustomEvent(event, !!x.bubbles, !!x.cancelable, x.detail || null);
1418
+ return ev;
1419
+ };
1420
+ supportCustomEvent.prototype = window.Event.prototype;
1421
+ }
1422
+
1423
+ /**
1424
+ * Dispatches the passed event to both an "on<type>" handler as well as via the
1425
+ * normal dispatch operation. Does not bubble.
1426
+ *
1427
+ * @param {!EventTarget} target
1428
+ * @param {!Event} event
1429
+ * @return {boolean}
1430
+ */
1431
+ function safeDispatchEvent(target, event) {
1432
+ var check = 'on' + event.type.toLowerCase();
1433
+ if (typeof target[check] === 'function') {
1434
+ target[check](event);
1435
+ }
1436
+ return target.dispatchEvent(event);
1437
+ }
1438
+
1439
+ /**
1440
+ * @param {Element} el to check for stacking context
1441
+ * @return {boolean} whether this el or its parents creates a stacking context
1442
+ */
1443
+ function createsStackingContext(el) {
1444
+ while (el && el !== document.body) {
1445
+ var s = window.getComputedStyle(el);
1446
+ var invalid = function(k, ok) {
1447
+ return !(s[k] === undefined || s[k] === ok);
1448
+ };
1449
+
1450
+ if (s.opacity < 1 ||
1451
+ invalid('zIndex', 'auto') ||
1452
+ invalid('transform', 'none') ||
1453
+ invalid('mixBlendMode', 'normal') ||
1454
+ invalid('filter', 'none') ||
1455
+ invalid('perspective', 'none') ||
1456
+ s['isolation'] === 'isolate' ||
1457
+ s.position === 'fixed' ||
1458
+ s.webkitOverflowScrolling === 'touch') {
1459
+ return true;
1460
+ }
1461
+ el = el.parentElement;
1462
+ }
1463
+ return false;
1464
+ }
1465
+
1466
+ /**
1467
+ * Finds the nearest <dialog> from the passed element.
1468
+ *
1469
+ * @param {Element} el to search from
1470
+ * @return {HTMLDialogElement} dialog found
1471
+ */
1472
+ function findNearestDialog(el) {
1473
+ while (el) {
1474
+ if (el.localName === 'dialog') {
1475
+ return /** @type {HTMLDialogElement} */ (el);
1476
+ }
1477
+ if (el.parentElement) {
1478
+ el = el.parentElement;
1479
+ } else if (el.parentNode) {
1480
+ el = el.parentNode.host;
1481
+ } else {
1482
+ el = null;
1483
+ }
1484
+ }
1485
+ return null;
1486
+ }
1487
+
1488
+ /**
1489
+ * Blur the specified element, as long as it's not the HTML body element.
1490
+ * This works around an IE9/10 bug - blurring the body causes Windows to
1491
+ * blur the whole application.
1492
+ *
1493
+ * @param {Element} el to blur
1494
+ */
1495
+ function safeBlur(el) {
1496
+ // Find the actual focused element when the active element is inside a shadow root
1497
+ while (el && el.shadowRoot && el.shadowRoot.activeElement) {
1498
+ el = el.shadowRoot.activeElement;
1499
+ }
1500
+
1501
+ if (el && el.blur && el !== document.body) {
1502
+ el.blur();
1503
+ }
1504
+ }
1505
+
1506
+ /**
1507
+ * @param {!NodeList} nodeList to search
1508
+ * @param {Node} node to find
1509
+ * @return {boolean} whether node is inside nodeList
1510
+ */
1511
+ function inNodeList(nodeList, node) {
1512
+ for (var i = 0; i < nodeList.length; ++i) {
1513
+ if (nodeList[i] === node) {
1514
+ return true;
1515
+ }
1516
+ }
1517
+ return false;
1518
+ }
1519
+
1520
+ /**
1521
+ * @param {HTMLFormElement} el to check
1522
+ * @return {boolean} whether this form has method="dialog"
1523
+ */
1524
+ function isFormMethodDialog(el) {
1525
+ if (!el || !el.hasAttribute('method')) {
1526
+ return false;
1527
+ }
1528
+ return el.getAttribute('method').toLowerCase() === 'dialog';
1529
+ }
1530
+
1531
+ /**
1532
+ * @param {!DocumentFragment|!Element} hostElement
1533
+ * @return {?Element}
1534
+ */
1535
+ function findFocusableElementWithin(hostElement) {
1536
+ // Note that this is 'any focusable area'. This list is probably not exhaustive, but the
1537
+ // alternative involves stepping through and trying to focus everything.
1538
+ var opts = ['button', 'input', 'keygen', 'select', 'textarea'];
1539
+ var query = opts.map(function(el) {
1540
+ return el + ':not([disabled])';
1541
+ });
1542
+ // TODO(samthor): tabindex values that are not numeric are not focusable.
1543
+ query.push('[tabindex]:not([disabled]):not([tabindex=""])'); // tabindex != "", not disabled
1544
+ var target = hostElement.querySelector(query.join(', '));
1545
+
1546
+ if (!target && 'attachShadow' in Element.prototype) {
1547
+ // If we haven't found a focusable target, see if the host element contains an element
1548
+ // which has a shadowRoot.
1549
+ // Recursively search for the first focusable item in shadow roots.
1550
+ var elems = hostElement.querySelectorAll('*');
1551
+ for (var i = 0; i < elems.length; i++) {
1552
+ if (elems[i].tagName && elems[i].shadowRoot) {
1553
+ target = findFocusableElementWithin(elems[i].shadowRoot);
1554
+ if (target) {
1555
+ break;
1556
+ }
1557
+ }
1558
+ }
1559
+ }
1560
+ return target;
1561
+ }
1562
+
1563
+ /**
1564
+ * Determines if an element is attached to the DOM.
1565
+ * @param {Element} element to check
1566
+ * @return {boolean} whether the element is in DOM
1567
+ */
1568
+ function isConnected(element) {
1569
+ return element.isConnected || document.body.contains(element);
1570
+ }
1571
+
1572
+ /**
1573
+ * @param {!Event} event
1574
+ * @return {?Element}
1575
+ */
1576
+ function findFormSubmitter(event) {
1577
+ if (event.submitter) {
1578
+ return event.submitter;
1579
+ }
1580
+
1581
+ var form = event.target;
1582
+ if (!(form instanceof HTMLFormElement)) {
1583
+ return null;
1584
+ }
1585
+
1586
+ var submitter = dialogPolyfill.formSubmitter;
1587
+ if (!submitter) {
1588
+ var target = event.target;
1589
+ var root = ('getRootNode' in target && target.getRootNode() || document);
1590
+ submitter = root.activeElement;
1591
+ }
1592
+
1593
+ if (!submitter || submitter.form !== form) {
1594
+ return null;
1595
+ }
1596
+ return submitter;
1597
+ }
1598
+
1599
+ /**
1600
+ * @param {!Event} event
1601
+ */
1602
+ function maybeHandleSubmit(event) {
1603
+ if (event.defaultPrevented) {
1604
+ return;
1605
+ }
1606
+ var form = /** @type {!HTMLFormElement} */ (event.target);
1607
+
1608
+ // We'd have a value if we clicked on an imagemap.
1609
+ var value = dialogPolyfill.imagemapUseValue;
1610
+ var submitter = findFormSubmitter(event);
1611
+ if (value === null && submitter) {
1612
+ value = submitter.value;
1613
+ }
1614
+
1615
+ // There should always be a dialog as this handler is added specifically on them, but check just
1616
+ // in case.
1617
+ var dialog = findNearestDialog(form);
1618
+ if (!dialog) {
1619
+ return;
1620
+ }
1621
+
1622
+ // Prefer formmethod on the button.
1623
+ var formmethod = submitter && submitter.getAttribute('formmethod') || form.getAttribute('method');
1624
+ if (formmethod !== 'dialog') {
1625
+ return;
1626
+ }
1627
+ event.preventDefault();
1628
+
1629
+ if (value != null) {
1630
+ // nb. we explicitly check against null/undefined
1631
+ dialog.close(value);
1632
+ } else {
1633
+ dialog.close();
1634
+ }
1635
+ }
1636
+
1637
+ /**
1638
+ * @param {!HTMLDialogElement} dialog to upgrade
1639
+ * @constructor
1640
+ */
1641
+ function dialogPolyfillInfo(dialog) {
1642
+ this.dialog_ = dialog;
1643
+ this.replacedStyleTop_ = false;
1644
+ this.openAsModal_ = false;
1645
+
1646
+ // Set a11y role. Browsers that support dialog implicitly know this already.
1647
+ if (!dialog.hasAttribute('role')) {
1648
+ dialog.setAttribute('role', 'dialog');
1649
+ }
1650
+
1651
+ dialog.show = this.show.bind(this);
1652
+ dialog.showModal = this.showModal.bind(this);
1653
+ dialog.close = this.close.bind(this);
1654
+
1655
+ dialog.addEventListener('submit', maybeHandleSubmit, false);
1656
+
1657
+ if (!('returnValue' in dialog)) {
1658
+ dialog.returnValue = '';
1659
+ }
1660
+
1661
+ if ('MutationObserver' in window) {
1662
+ var mo = new MutationObserver(this.maybeHideModal.bind(this));
1663
+ mo.observe(dialog, {attributes: true, attributeFilter: ['open']});
1664
+ } else {
1665
+ // IE10 and below support. Note that DOMNodeRemoved etc fire _before_ removal. They also
1666
+ // seem to fire even if the element was removed as part of a parent removal. Use the removed
1667
+ // events to force downgrade (useful if removed/immediately added).
1668
+ var removed = false;
1669
+ var cb = function() {
1670
+ removed ? this.downgradeModal() : this.maybeHideModal();
1671
+ removed = false;
1672
+ }.bind(this);
1673
+ var timeout;
1674
+ var delayModel = function(ev) {
1675
+ if (ev.target !== dialog) { return; } // not for a child element
1676
+ var cand = 'DOMNodeRemoved';
1677
+ removed |= (ev.type.substr(0, cand.length) === cand);
1678
+ window.clearTimeout(timeout);
1679
+ timeout = window.setTimeout(cb, 0);
1680
+ };
1681
+ ['DOMAttrModified', 'DOMNodeRemoved', 'DOMNodeRemovedFromDocument'].forEach(function(name) {
1682
+ dialog.addEventListener(name, delayModel);
1683
+ });
1684
+ }
1685
+ // Note that the DOM is observed inside DialogManager while any dialog
1686
+ // is being displayed as a modal, to catch modal removal from the DOM.
1687
+
1688
+ Object.defineProperty(dialog, 'open', {
1689
+ set: this.setOpen.bind(this),
1690
+ get: dialog.hasAttribute.bind(dialog, 'open')
1691
+ });
1692
+
1693
+ this.backdrop_ = document.createElement('div');
1694
+ this.backdrop_.className = 'backdrop';
1695
+ this.backdrop_.addEventListener('mouseup' , this.backdropMouseEvent_.bind(this));
1696
+ this.backdrop_.addEventListener('mousedown', this.backdropMouseEvent_.bind(this));
1697
+ this.backdrop_.addEventListener('click' , this.backdropMouseEvent_.bind(this));
1698
+ }
1699
+
1700
+ dialogPolyfillInfo.prototype = /** @type {HTMLDialogElement.prototype} */ ({
1701
+
1702
+ get dialog() {
1703
+ return this.dialog_;
1704
+ },
1705
+
1706
+ /**
1707
+ * Maybe remove this dialog from the modal top layer. This is called when
1708
+ * a modal dialog may no longer be tenable, e.g., when the dialog is no
1709
+ * longer open or is no longer part of the DOM.
1710
+ */
1711
+ maybeHideModal: function() {
1712
+ if (this.dialog_.hasAttribute('open') && isConnected(this.dialog_)) { return; }
1713
+ this.downgradeModal();
1714
+ },
1715
+
1716
+ /**
1717
+ * Remove this dialog from the modal top layer, leaving it as a non-modal.
1718
+ */
1719
+ downgradeModal: function() {
1720
+ if (!this.openAsModal_) { return; }
1721
+ this.openAsModal_ = false;
1722
+ this.dialog_.style.zIndex = '';
1723
+
1724
+ // This won't match the native <dialog> exactly because if the user set top on a centered
1725
+ // polyfill dialog, that top gets thrown away when the dialog is closed. Not sure it's
1726
+ // possible to polyfill this perfectly.
1727
+ if (this.replacedStyleTop_) {
1728
+ this.dialog_.style.top = '';
1729
+ this.replacedStyleTop_ = false;
1730
+ }
1731
+
1732
+ // Clear the backdrop and remove from the manager.
1733
+ this.backdrop_.parentNode && this.backdrop_.parentNode.removeChild(this.backdrop_);
1734
+ dialogPolyfill.dm.removeDialog(this);
1735
+ },
1736
+
1737
+ /**
1738
+ * @param {boolean} value whether to open or close this dialog
1739
+ */
1740
+ setOpen: function(value) {
1741
+ if (value) {
1742
+ this.dialog_.hasAttribute('open') || this.dialog_.setAttribute('open', '');
1743
+ } else {
1744
+ this.dialog_.removeAttribute('open');
1745
+ this.maybeHideModal(); // nb. redundant with MutationObserver
1746
+ }
1747
+ },
1748
+
1749
+ /**
1750
+ * Handles mouse events ('mouseup', 'mousedown', 'click') on the fake .backdrop element, redirecting them as if
1751
+ * they were on the dialog itself.
1752
+ *
1753
+ * @param {!Event} e to redirect
1754
+ */
1755
+ backdropMouseEvent_: function(e) {
1756
+ if (!this.dialog_.hasAttribute('tabindex')) {
1757
+ // Clicking on the backdrop should move the implicit cursor, even if dialog cannot be
1758
+ // focused. Create a fake thing to focus on. If the backdrop was _before_ the dialog, this
1759
+ // would not be needed - clicks would move the implicit cursor there.
1760
+ var fake = document.createElement('div');
1761
+ this.dialog_.insertBefore(fake, this.dialog_.firstChild);
1762
+ fake.tabIndex = -1;
1763
+ fake.focus();
1764
+ this.dialog_.removeChild(fake);
1765
+ } else {
1766
+ this.dialog_.focus();
1767
+ }
1768
+
1769
+ var redirectedEvent = document.createEvent('MouseEvents');
1770
+ redirectedEvent.initMouseEvent(e.type, e.bubbles, e.cancelable, window,
1771
+ e.detail, e.screenX, e.screenY, e.clientX, e.clientY, e.ctrlKey,
1772
+ e.altKey, e.shiftKey, e.metaKey, e.button, e.relatedTarget);
1773
+ this.dialog_.dispatchEvent(redirectedEvent);
1774
+ e.stopPropagation();
1775
+ },
1776
+
1777
+ /**
1778
+ * Focuses on the first focusable element within the dialog. This will always blur the current
1779
+ * focus, even if nothing within the dialog is found.
1780
+ */
1781
+ focus_: function() {
1782
+ // Find element with `autofocus` attribute, or fall back to the first form/tabindex control.
1783
+ var target = this.dialog_.querySelector('[autofocus]:not([disabled])');
1784
+ if (!target && this.dialog_.tabIndex >= 0) {
1785
+ target = this.dialog_;
1786
+ }
1787
+ if (!target) {
1788
+ target = findFocusableElementWithin(this.dialog_);
1789
+ }
1790
+ safeBlur(document.activeElement);
1791
+ target && target.focus();
1792
+ },
1793
+
1794
+ /**
1795
+ * Sets the zIndex for the backdrop and dialog.
1796
+ *
1797
+ * @param {number} dialogZ
1798
+ * @param {number} backdropZ
1799
+ */
1800
+ updateZIndex: function(dialogZ, backdropZ) {
1801
+ if (dialogZ < backdropZ) {
1802
+ throw new Error('dialogZ should never be < backdropZ');
1803
+ }
1804
+ this.dialog_.style.zIndex = dialogZ;
1805
+ this.backdrop_.style.zIndex = backdropZ;
1806
+ },
1807
+
1808
+ /**
1809
+ * Shows the dialog. If the dialog is already open, this does nothing.
1810
+ */
1811
+ show: function() {
1812
+ if (!this.dialog_.open) {
1813
+ this.setOpen(true);
1814
+ this.focus_();
1815
+ }
1816
+ },
1817
+
1818
+ /**
1819
+ * Show this dialog modally.
1820
+ */
1821
+ showModal: function() {
1822
+ if (this.dialog_.hasAttribute('open')) {
1823
+ throw new Error('Failed to execute \'showModal\' on dialog: The element is already open, and therefore cannot be opened modally.');
1824
+ }
1825
+ if (!isConnected(this.dialog_)) {
1826
+ throw new Error('Failed to execute \'showModal\' on dialog: The element is not in a Document.');
1827
+ }
1828
+ if (!dialogPolyfill.dm.pushDialog(this)) {
1829
+ throw new Error('Failed to execute \'showModal\' on dialog: There are too many open modal dialogs.');
1830
+ }
1831
+
1832
+ if (createsStackingContext(this.dialog_.parentElement)) {
1833
+ console.warn('A dialog is being shown inside a stacking context. ' +
1834
+ 'This may cause it to be unusable. For more information, see this link: ' +
1835
+ 'https://github.com/GoogleChrome/dialog-polyfill/#stacking-context');
1836
+ }
1837
+
1838
+ this.setOpen(true);
1839
+ this.openAsModal_ = true;
1840
+
1841
+ // Optionally center vertically, relative to the current viewport.
1842
+ if (dialogPolyfill.needsCentering(this.dialog_)) {
1843
+ dialogPolyfill.reposition(this.dialog_);
1844
+ this.replacedStyleTop_ = true;
1845
+ } else {
1846
+ this.replacedStyleTop_ = false;
1847
+ }
1848
+
1849
+ // Insert backdrop.
1850
+ this.dialog_.parentNode.insertBefore(this.backdrop_, this.dialog_.nextSibling);
1851
+
1852
+ // Focus on whatever inside the dialog.
1853
+ this.focus_();
1854
+ },
1855
+
1856
+ /**
1857
+ * Closes this HTMLDialogElement. This is optional vs clearing the open
1858
+ * attribute, however this fires a 'close' event.
1859
+ *
1860
+ * @param {string=} opt_returnValue to use as the returnValue
1861
+ */
1862
+ close: function(opt_returnValue) {
1863
+ if (!this.dialog_.hasAttribute('open')) {
1864
+ throw new Error('Failed to execute \'close\' on dialog: The element does not have an \'open\' attribute, and therefore cannot be closed.');
1865
+ }
1866
+ this.setOpen(false);
1867
+
1868
+ // Leave returnValue untouched in case it was set directly on the element
1869
+ if (opt_returnValue !== undefined) {
1870
+ this.dialog_.returnValue = opt_returnValue;
1871
+ }
1872
+
1873
+ // Triggering "close" event for any attached listeners on the <dialog>.
1874
+ var closeEvent = new supportCustomEvent('close', {
1875
+ bubbles: false,
1876
+ cancelable: false
1877
+ });
1878
+ safeDispatchEvent(this.dialog_, closeEvent);
1879
+ }
1880
+
1881
+ });
1882
+
1883
+ var dialogPolyfill = {};
1884
+
1885
+ dialogPolyfill.reposition = function(element) {
1886
+ var scrollTop = document.body.scrollTop || document.documentElement.scrollTop;
1887
+ var topValue = scrollTop + (window.innerHeight - element.offsetHeight) / 2;
1888
+ element.style.top = Math.max(scrollTop, topValue) + 'px';
1889
+ };
1890
+
1891
+ dialogPolyfill.isInlinePositionSetByStylesheet = function(element) {
1892
+ for (var i = 0; i < document.styleSheets.length; ++i) {
1893
+ var styleSheet = document.styleSheets[i];
1894
+ var cssRules = null;
1895
+ // Some browsers throw on cssRules.
1896
+ try {
1897
+ cssRules = styleSheet.cssRules;
1898
+ } catch (e) {}
1899
+ if (!cssRules) { continue; }
1900
+ for (var j = 0; j < cssRules.length; ++j) {
1901
+ var rule = cssRules[j];
1902
+ var selectedNodes = null;
1903
+ // Ignore errors on invalid selector texts.
1904
+ try {
1905
+ selectedNodes = document.querySelectorAll(rule.selectorText);
1906
+ } catch(e) {}
1907
+ if (!selectedNodes || !inNodeList(selectedNodes, element)) {
1908
+ continue;
1909
+ }
1910
+ var cssTop = rule.style.getPropertyValue('top');
1911
+ var cssBottom = rule.style.getPropertyValue('bottom');
1912
+ if ((cssTop && cssTop !== 'auto') || (cssBottom && cssBottom !== 'auto')) {
1913
+ return true;
1914
+ }
1915
+ }
1916
+ }
1917
+ return false;
1918
+ };
1919
+
1920
+ dialogPolyfill.needsCentering = function(dialog) {
1921
+ var computedStyle = window.getComputedStyle(dialog);
1922
+ if (computedStyle.position !== 'absolute') {
1923
+ return false;
1924
+ }
1925
+
1926
+ // We must determine whether the top/bottom specified value is non-auto. In
1927
+ // WebKit/Blink, checking computedStyle.top == 'auto' is sufficient, but
1928
+ // Firefox returns the used value. So we do this crazy thing instead: check
1929
+ // the inline style and then go through CSS rules.
1930
+ if ((dialog.style.top !== 'auto' && dialog.style.top !== '') ||
1931
+ (dialog.style.bottom !== 'auto' && dialog.style.bottom !== '')) {
1932
+ return false;
1933
+ }
1934
+ return !dialogPolyfill.isInlinePositionSetByStylesheet(dialog);
1935
+ };
1936
+
1937
+ /**
1938
+ * @param {!Element} element to force upgrade
1939
+ */
1940
+ dialogPolyfill.forceRegisterDialog = function(element) {
1941
+ if (window.HTMLDialogElement || element.showModal) {
1942
+ console.warn('This browser already supports <dialog>, the polyfill ' +
1943
+ 'may not work correctly', element);
1944
+ }
1945
+ if (element.localName !== 'dialog') {
1946
+ throw new Error('Failed to register dialog: The element is not a dialog.');
1947
+ }
1948
+ new dialogPolyfillInfo(/** @type {!HTMLDialogElement} */ (element));
1949
+ };
1950
+
1951
+ /**
1952
+ * @param {!Element} element to upgrade, if necessary
1953
+ */
1954
+ dialogPolyfill.registerDialog = function(element) {
1955
+ if (!element.showModal) {
1956
+ dialogPolyfill.forceRegisterDialog(element);
1957
+ }
1958
+ };
1959
+
1960
+ /**
1961
+ * @constructor
1962
+ */
1963
+ dialogPolyfill.DialogManager = function() {
1964
+ /** @type {!Array<!dialogPolyfillInfo>} */
1965
+ this.pendingDialogStack = [];
1966
+
1967
+ var checkDOM = this.checkDOM_.bind(this);
1968
+
1969
+ // The overlay is used to simulate how a modal dialog blocks the document.
1970
+ // The blocking dialog is positioned on top of the overlay, and the rest of
1971
+ // the dialogs on the pending dialog stack are positioned below it. In the
1972
+ // actual implementation, the modal dialog stacking is controlled by the
1973
+ // top layer, where z-index has no effect.
1974
+ this.overlay = document.createElement('div');
1975
+ this.overlay.className = '_dialog_overlay';
1976
+ this.overlay.addEventListener('click', function(e) {
1977
+ this.forwardTab_ = undefined;
1978
+ e.stopPropagation();
1979
+ checkDOM([]); // sanity-check DOM
1980
+ }.bind(this));
1981
+
1982
+ this.handleKey_ = this.handleKey_.bind(this);
1983
+ this.handleFocus_ = this.handleFocus_.bind(this);
1984
+
1985
+ this.zIndexLow_ = 100000;
1986
+ this.zIndexHigh_ = 100000 + 150;
1987
+
1988
+ this.forwardTab_ = undefined;
1989
+
1990
+ if ('MutationObserver' in window) {
1991
+ this.mo_ = new MutationObserver(function(records) {
1992
+ var removed = [];
1993
+ records.forEach(function(rec) {
1994
+ for (var i = 0, c; c = rec.removedNodes[i]; ++i) {
1995
+ if (!(c instanceof Element)) {
1996
+ continue;
1997
+ } else if (c.localName === 'dialog') {
1998
+ removed.push(c);
1999
+ }
2000
+ removed = removed.concat(c.querySelectorAll('dialog'));
2001
+ }
2002
+ });
2003
+ removed.length && checkDOM(removed);
2004
+ });
2005
+ }
2006
+ };
2007
+
2008
+ /**
2009
+ * Called on the first modal dialog being shown. Adds the overlay and related
2010
+ * handlers.
2011
+ */
2012
+ dialogPolyfill.DialogManager.prototype.blockDocument = function() {
2013
+ document.documentElement.addEventListener('focus', this.handleFocus_, true);
2014
+ document.addEventListener('keydown', this.handleKey_);
2015
+ this.mo_ && this.mo_.observe(document, {childList: true, subtree: true});
2016
+ };
2017
+
2018
+ /**
2019
+ * Called on the first modal dialog being removed, i.e., when no more modal
2020
+ * dialogs are visible.
2021
+ */
2022
+ dialogPolyfill.DialogManager.prototype.unblockDocument = function() {
2023
+ document.documentElement.removeEventListener('focus', this.handleFocus_, true);
2024
+ document.removeEventListener('keydown', this.handleKey_);
2025
+ this.mo_ && this.mo_.disconnect();
2026
+ };
2027
+
2028
+ /**
2029
+ * Updates the stacking of all known dialogs.
2030
+ */
2031
+ dialogPolyfill.DialogManager.prototype.updateStacking = function() {
2032
+ var zIndex = this.zIndexHigh_;
2033
+
2034
+ for (var i = 0, dpi; dpi = this.pendingDialogStack[i]; ++i) {
2035
+ dpi.updateZIndex(--zIndex, --zIndex);
2036
+ if (i === 0) {
2037
+ this.overlay.style.zIndex = --zIndex;
2038
+ }
2039
+ }
2040
+
2041
+ // Make the overlay a sibling of the dialog itself.
2042
+ var last = this.pendingDialogStack[0];
2043
+ if (last) {
2044
+ var p = last.dialog.parentNode || document.body;
2045
+ p.appendChild(this.overlay);
2046
+ } else if (this.overlay.parentNode) {
2047
+ this.overlay.parentNode.removeChild(this.overlay);
2048
+ }
2049
+ };
2050
+
2051
+ /**
2052
+ * @param {Element} candidate to check if contained or is the top-most modal dialog
2053
+ * @return {boolean} whether candidate is contained in top dialog
2054
+ */
2055
+ dialogPolyfill.DialogManager.prototype.containedByTopDialog_ = function(candidate) {
2056
+ while (candidate = findNearestDialog(candidate)) {
2057
+ for (var i = 0, dpi; dpi = this.pendingDialogStack[i]; ++i) {
2058
+ if (dpi.dialog === candidate) {
2059
+ return i === 0; // only valid if top-most
2060
+ }
2061
+ }
2062
+ candidate = candidate.parentElement;
2063
+ }
2064
+ return false;
2065
+ };
2066
+
2067
+ dialogPolyfill.DialogManager.prototype.handleFocus_ = function(event) {
2068
+ var target = event.composedPath ? event.composedPath()[0] : event.target;
2069
+
2070
+ if (this.containedByTopDialog_(target)) { return; }
2071
+
2072
+ if (document.activeElement === document.documentElement) { return; }
2073
+
2074
+ event.preventDefault();
2075
+ event.stopPropagation();
2076
+ safeBlur(/** @type {Element} */ (target));
2077
+
2078
+ if (this.forwardTab_ === undefined) { return; } // move focus only from a tab key
2079
+
2080
+ var dpi = this.pendingDialogStack[0];
2081
+ var dialog = dpi.dialog;
2082
+ var position = dialog.compareDocumentPosition(target);
2083
+ if (position & Node.DOCUMENT_POSITION_PRECEDING) {
2084
+ if (this.forwardTab_) {
2085
+ // forward
2086
+ dpi.focus_();
2087
+ } else if (target !== document.documentElement) {
2088
+ // backwards if we're not already focused on <html>
2089
+ document.documentElement.focus();
2090
+ }
2091
+ }
2092
+
2093
+ return false;
2094
+ };
2095
+
2096
+ dialogPolyfill.DialogManager.prototype.handleKey_ = function(event) {
2097
+ this.forwardTab_ = undefined;
2098
+ if (event.keyCode === 27) {
2099
+ event.preventDefault();
2100
+ event.stopPropagation();
2101
+ var cancelEvent = new supportCustomEvent('cancel', {
2102
+ bubbles: false,
2103
+ cancelable: true
2104
+ });
2105
+ var dpi = this.pendingDialogStack[0];
2106
+ if (dpi && safeDispatchEvent(dpi.dialog, cancelEvent)) {
2107
+ dpi.dialog.close();
2108
+ }
2109
+ } else if (event.keyCode === 9) {
2110
+ this.forwardTab_ = !event.shiftKey;
2111
+ }
2112
+ };
2113
+
2114
+ /**
2115
+ * Finds and downgrades any known modal dialogs that are no longer displayed. Dialogs that are
2116
+ * removed and immediately readded don't stay modal, they become normal.
2117
+ *
2118
+ * @param {!Array<!HTMLDialogElement>} removed that have definitely been removed
2119
+ */
2120
+ dialogPolyfill.DialogManager.prototype.checkDOM_ = function(removed) {
2121
+ // This operates on a clone because it may cause it to change. Each change also calls
2122
+ // updateStacking, which only actually needs to happen once. But who removes many modal dialogs
2123
+ // at a time?!
2124
+ var clone = this.pendingDialogStack.slice();
2125
+ clone.forEach(function(dpi) {
2126
+ if (removed.indexOf(dpi.dialog) !== -1) {
2127
+ dpi.downgradeModal();
2128
+ } else {
2129
+ dpi.maybeHideModal();
2130
+ }
2131
+ });
2132
+ };
2133
+
2134
+ /**
2135
+ * @param {!dialogPolyfillInfo} dpi
2136
+ * @return {boolean} whether the dialog was allowed
2137
+ */
2138
+ dialogPolyfill.DialogManager.prototype.pushDialog = function(dpi) {
2139
+ var allowed = (this.zIndexHigh_ - this.zIndexLow_) / 2 - 1;
2140
+ if (this.pendingDialogStack.length >= allowed) {
2141
+ return false;
2142
+ }
2143
+ if (this.pendingDialogStack.unshift(dpi) === 1) {
2144
+ this.blockDocument();
2145
+ }
2146
+ this.updateStacking();
2147
+ return true;
2148
+ };
2149
+
2150
+ /**
2151
+ * @param {!dialogPolyfillInfo} dpi
2152
+ */
2153
+ dialogPolyfill.DialogManager.prototype.removeDialog = function(dpi) {
2154
+ var index = this.pendingDialogStack.indexOf(dpi);
2155
+ if (index === -1) { return; }
2156
+
2157
+ this.pendingDialogStack.splice(index, 1);
2158
+ if (this.pendingDialogStack.length === 0) {
2159
+ this.unblockDocument();
2160
+ }
2161
+ this.updateStacking();
2162
+ };
2163
+
2164
+ dialogPolyfill.dm = new dialogPolyfill.DialogManager();
2165
+ dialogPolyfill.formSubmitter = null;
2166
+ dialogPolyfill.imagemapUseValue = null;
2167
+
2168
+ /**
2169
+ * Installs global handlers, such as click listers and native method overrides. These are needed
2170
+ * even if a no dialog is registered, as they deal with <form method="dialog">.
2171
+ */
2172
+ if (window.HTMLDialogElement === undefined) {
2173
+
2174
+ /**
2175
+ * If HTMLFormElement translates method="DIALOG" into 'get', then replace the descriptor with
2176
+ * one that returns the correct value.
2177
+ */
2178
+ var testForm = document.createElement('form');
2179
+ testForm.setAttribute('method', 'dialog');
2180
+ if (testForm.method !== 'dialog') {
2181
+ var methodDescriptor = Object.getOwnPropertyDescriptor(HTMLFormElement.prototype, 'method');
2182
+ if (methodDescriptor) {
2183
+ // nb. Some older iOS and older PhantomJS fail to return the descriptor. Don't do anything
2184
+ // and don't bother to update the element.
2185
+ var realGet = methodDescriptor.get;
2186
+ methodDescriptor.get = function() {
2187
+ if (isFormMethodDialog(this)) {
2188
+ return 'dialog';
2189
+ }
2190
+ return realGet.call(this);
2191
+ };
2192
+ var realSet = methodDescriptor.set;
2193
+ /** @this {HTMLElement} */
2194
+ methodDescriptor.set = function(v) {
2195
+ if (typeof v === 'string' && v.toLowerCase() === 'dialog') {
2196
+ return this.setAttribute('method', v);
2197
+ }
2198
+ return realSet.call(this, v);
2199
+ };
2200
+ Object.defineProperty(HTMLFormElement.prototype, 'method', methodDescriptor);
2201
+ }
2202
+ }
2203
+
2204
+ /**
2205
+ * Global 'click' handler, to capture the <input type="submit"> or <button> element which has
2206
+ * submitted a <form method="dialog">. Needed as Safari and others don't report this inside
2207
+ * document.activeElement.
2208
+ */
2209
+ document.addEventListener('click', function(ev) {
2210
+ dialogPolyfill.formSubmitter = null;
2211
+ dialogPolyfill.imagemapUseValue = null;
2212
+ if (ev.defaultPrevented) { return; } // e.g. a submit which prevents default submission
2213
+
2214
+ var target = /** @type {Element} */ (ev.target);
2215
+ if ('composedPath' in ev) {
2216
+ var path = ev.composedPath();
2217
+ target = path.shift() || target;
2218
+ }
2219
+ if (!target || !isFormMethodDialog(target.form)) { return; }
2220
+
2221
+ var valid = (target.type === 'submit' && ['button', 'input'].indexOf(target.localName) > -1);
2222
+ if (!valid) {
2223
+ if (!(target.localName === 'input' && target.type === 'image')) { return; }
2224
+ // this is a <input type="image">, which can submit forms
2225
+ dialogPolyfill.imagemapUseValue = ev.offsetX + ',' + ev.offsetY;
2226
+ }
2227
+
2228
+ var dialog = findNearestDialog(target);
2229
+ if (!dialog) { return; }
2230
+
2231
+ dialogPolyfill.formSubmitter = target;
2232
+
2233
+ }, false);
2234
+
2235
+ /**
2236
+ * Global 'submit' handler. This handles submits of `method="dialog"` which are invalid, i.e.,
2237
+ * outside a dialog. They get prevented.
2238
+ */
2239
+ document.addEventListener('submit', function(ev) {
2240
+ var form = ev.target;
2241
+ var dialog = findNearestDialog(form);
2242
+ if (dialog) {
2243
+ return; // ignore, handle there
2244
+ }
2245
+
2246
+ var submitter = findFormSubmitter(ev);
2247
+ var formmethod = submitter && submitter.getAttribute('formmethod') || form.getAttribute('method');
2248
+ if (formmethod === 'dialog') {
2249
+ ev.preventDefault();
2250
+ }
2251
+ });
2252
+
2253
+ /**
2254
+ * Replace the native HTMLFormElement.submit() method, as it won't fire the
2255
+ * submit event and give us a chance to respond.
2256
+ */
2257
+ var nativeFormSubmit = HTMLFormElement.prototype.submit;
2258
+ var replacementFormSubmit = function () {
2259
+ if (!isFormMethodDialog(this)) {
2260
+ return nativeFormSubmit.call(this);
2261
+ }
2262
+ var dialog = findNearestDialog(this);
2263
+ dialog && dialog.close();
2264
+ };
2265
+ HTMLFormElement.prototype.submit = replacementFormSubmit;
2266
+ }
2267
+
2268
+ return dialogPolyfill;
2269
+
2270
+ }));
2271
+
2272
+ },{}],14:[function(require,module,exports){
1390
2273
  (function (global){(function (){
1391
2274
  (function (global, factory) {
1392
2275
  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
@@ -4006,7 +4889,7 @@ exports.Tabs = Tabs;
4006
4889
  })));
4007
4890
 
4008
4891
  }).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
4009
- },{}],14:[function(require,module,exports){
4892
+ },{}],15:[function(require,module,exports){
4010
4893
  /*!
4011
4894
  * jQuery JavaScript Library v3.7.1
4012
4895
  * https://jquery.com/
@@ -14724,7 +15607,7 @@ if ( typeof noGlobal === "undefined" ) {
14724
15607
  return jQuery;
14725
15608
  } );
14726
15609
 
14727
- },{}],15:[function(require,module,exports){
15610
+ },{}],16:[function(require,module,exports){
14728
15611
  (function (global){(function (){
14729
15612
  /**
14730
15613
  * @license
@@ -31937,7 +32820,7 @@ return jQuery;
31937
32820
  }.call(this));
31938
32821
 
31939
32822
  }).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
31940
- },{}],16:[function(require,module,exports){
32823
+ },{}],17:[function(require,module,exports){
31941
32824
  // shim for using process in browser
31942
32825
  var process = module.exports = {};
31943
32826
 
@@ -32123,7 +33006,7 @@ process.chdir = function (dir) {
32123
33006
  };
32124
33007
  process.umask = function() { return 0; };
32125
33008
 
32126
- },{}],17:[function(require,module,exports){
33009
+ },{}],18:[function(require,module,exports){
32127
33010
  (function (setImmediate,clearImmediate){(function (){
32128
33011
  var nextTick = require('process/browser.js').nextTick;
32129
33012
  var apply = Function.prototype.apply;
@@ -32202,7 +33085,7 @@ exports.clearImmediate = typeof clearImmediate === "function" ? clearImmediate :
32202
33085
  delete immediateIds[id];
32203
33086
  };
32204
33087
  }).call(this)}).call(this,require("timers").setImmediate,require("timers").clearImmediate)
32205
- },{"process/browser.js":16,"timers":17}],18:[function(require,module,exports){
33088
+ },{"process/browser.js":17,"timers":18}],19:[function(require,module,exports){
32206
33089
  /* eslint-disable */
32207
33090
  'use strict'
32208
33091
 
@@ -32274,9 +33157,9 @@ $('.typeahead').each(function applyTypeahead() {
32274
33157
  });
32275
33158
  });
32276
33159
 
32277
- },{"../../../frontend/themes/gov-uk/client-js":3,"jquery":19,"typeahead-aria":22}],19:[function(require,module,exports){
32278
- arguments[4][14][0].apply(exports,arguments)
32279
- },{"dup":14}],20:[function(require,module,exports){
33160
+ },{"../../../frontend/themes/gov-uk/client-js":3,"jquery":20,"typeahead-aria":23}],20:[function(require,module,exports){
33161
+ arguments[4][15][0].apply(exports,arguments)
33162
+ },{"dup":15}],21:[function(require,module,exports){
32280
33163
  /*!
32281
33164
  * typeahead.js 1.0.4
32282
33165
  * https://github.com/twitter/typeahead.js
@@ -33229,7 +34112,7 @@ arguments[4][14][0].apply(exports,arguments)
33229
34112
  }();
33230
34113
  return Bloodhound;
33231
34114
  });
33232
- },{"jquery":23}],21:[function(require,module,exports){
34115
+ },{"jquery":24}],22:[function(require,module,exports){
33233
34116
  (function (setImmediate){(function (){
33234
34117
  /*!
33235
34118
  * typeahead.js 1.0.4
@@ -35826,7 +36709,7 @@ arguments[4][14][0].apply(exports,arguments)
35826
36709
  })();
35827
36710
  });
35828
36711
  }).call(this)}).call(this,require("timers").setImmediate)
35829
- },{"jquery":23,"timers":17}],22:[function(require,module,exports){
36712
+ },{"jquery":24,"timers":18}],23:[function(require,module,exports){
35830
36713
  'use strict';
35831
36714
 
35832
36715
  module.exports = {
@@ -35834,7 +36717,7 @@ module.exports = {
35834
36717
  "loadjQueryPlugin": function() {require("./dist/typeahead.bundle.js");}
35835
36718
  };
35836
36719
 
35837
- },{"./dist/bloodhound.js":20,"./dist/typeahead.bundle.js":21}],23:[function(require,module,exports){
36720
+ },{"./dist/bloodhound.js":21,"./dist/typeahead.bundle.js":22}],24:[function(require,module,exports){
35838
36721
  /*!
35839
36722
  * jQuery JavaScript Library v3.6.0
35840
36723
  * https://jquery.com/
@@ -46717,4 +47600,4 @@ if ( typeof noGlobal === "undefined" ) {
46717
47600
  return jQuery;
46718
47601
  } );
46719
47602
 
46720
- },{}]},{},[18]);
47603
+ },{}]},{},[19]);