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.
- package/.nyc_output/processinfo/{2a40c14b-d10f-42bf-b98d-22fe19f633f1.json → 332fb170-672e-4e73-a6b5-5dfcf25ce16e.json} +1 -1
- package/.nyc_output/processinfo/index.json +1 -1
- package/frontend/template-partials/views/partials/session-timeout-warning.html +7 -1
- package/frontend/themes/gov-uk/client-js/session-timeout-dialog.js +16 -1
- package/frontend/themes/gov-uk/styles/_session-timeout-dialog.scss +4 -0
- package/package.json +1 -1
- package/sandbox/apps/sandbox/translations/en/default.json +4 -1
- package/sandbox/public/css/app.css +4 -0
- package/sandbox/public/js/bundle.js +902 -19
- /package/.nyc_output/{2a40c14b-d10f-42bf-b98d-22fe19f633f1.json → 332fb170-672e-4e73-a6b5-5dfcf25ce16e.json} +0 -0
@@ -1 +1 @@
|
|
1
|
-
{"parent":null,"pid":
|
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();
|
package/package.json
CHANGED
@@ -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":
|
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":
|
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":
|
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":
|
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":
|
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":
|
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
|
-
},{}],
|
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
|
-
},{}],
|
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
|
-
},{}],
|
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
|
-
},{}],
|
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":
|
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":
|
32278
|
-
arguments[4][
|
32279
|
-
},{"dup":
|
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":
|
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":
|
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":
|
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
|
-
},{}]},{},[
|
47603
|
+
},{}]},{},[19]);
|
File without changes
|