hof 19.14.2 → 20.0.0-beta.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (89) hide show
  1. package/.nyc_output/65af88d9-aebe-4d1b-a21d-6fbf7f2bbda4.json +1 -0
  2. package/.nyc_output/processinfo/65af88d9-aebe-4d1b-a21d-6fbf7f2bbda4.json +1 -0
  3. package/.nyc_output/processinfo/index.json +1 -0
  4. package/.vscode/settings.json +6 -0
  5. package/components/date/index.js +26 -35
  6. package/components/date/templates/date.html +15 -12
  7. package/components/emailer/index.js +41 -49
  8. package/components/summary/index.js +0 -18
  9. package/config/hof-defaults.js +2 -4
  10. package/controller/base-controller.js +8 -26
  11. package/controller/controller.js +45 -2
  12. package/frontend/govuk-template/build/config.js +3 -3
  13. package/frontend/govuk-template/build/govuk_template.html +104 -0
  14. package/frontend/govuk-template/build/index.js +2 -2
  15. package/frontend/govuk-template/govuk_template_generated.html +104 -0
  16. package/frontend/govuk-template/index.js +4 -4
  17. package/frontend/template-mixins/mixins/template-mixins.js +20 -9
  18. package/frontend/template-mixins/partials/forms/checkbox-group.html +38 -0
  19. package/frontend/template-mixins/partials/forms/checkbox.html +4 -4
  20. package/frontend/template-mixins/partials/forms/input-submit.html +1 -1
  21. package/frontend/template-mixins/partials/forms/input-text-date.html +37 -0
  22. package/frontend/template-mixins/partials/forms/input-text-group.html +12 -9
  23. package/frontend/template-mixins/partials/forms/option-group.html +33 -26
  24. package/frontend/template-mixins/partials/forms/select.html +10 -5
  25. package/frontend/template-mixins/partials/forms/textarea-group.html +15 -6
  26. package/frontend/template-mixins/partials/mixins/panel.html +4 -4
  27. package/frontend/template-partials/translations/src/en/errors.json +0 -12
  28. package/frontend/template-partials/views/accessibility.html +4 -4
  29. package/frontend/template-partials/views/cookies.html +1 -1
  30. package/frontend/template-partials/views/layout.html +22 -22
  31. package/frontend/template-partials/views/partials/back.html +1 -1
  32. package/frontend/template-partials/views/partials/bullet-list.html +1 -1
  33. package/frontend/template-partials/views/partials/confirmation-alert.html +4 -3
  34. package/frontend/template-partials/views/partials/continue.html +1 -1
  35. package/frontend/template-partials/views/partials/cookie-banner.html +27 -24
  36. package/frontend/template-partials/views/partials/cookie-settings-radio.html +6 -6
  37. package/frontend/template-partials/views/partials/external-link.html +1 -1
  38. package/frontend/template-partials/views/partials/form.html +1 -1
  39. package/frontend/template-partials/views/partials/maincontent-left.html +4 -4
  40. package/frontend/template-partials/views/partials/navigation.html +7 -6
  41. package/frontend/template-partials/views/partials/session-cookies-table.html +6 -6
  42. package/frontend/template-partials/views/partials/table.html +7 -7
  43. package/frontend/template-partials/views/partials/validation-list.html +2 -2
  44. package/frontend/template-partials/views/partials/validation-summary.html +14 -13
  45. package/frontend/template-partials/views/session-timeout.html +1 -1
  46. package/frontend/themes/gov-uk/client-js/cookieSettings.js +1 -1
  47. package/frontend/themes/gov-uk/client-js/govuk-cookies.js +122 -0
  48. package/frontend/themes/gov-uk/client-js/index.js +5 -0
  49. package/frontend/themes/gov-uk/client-js/skip-to-main.js +18 -0
  50. package/frontend/themes/gov-uk/styles/_cookie-banner.scss +51 -1
  51. package/frontend/themes/gov-uk/styles/modules/_validation.scss +3 -3
  52. package/frontend/toolkit/assets/javascript/character-count.js +4 -4
  53. package/frontend/toolkit/assets/stylesheets/modules/_validation.scss +3 -3
  54. package/index.js +5 -5
  55. package/lib/router.js +1 -2
  56. package/lib/settings.js +17 -2
  57. package/middleware/errors.js +0 -32
  58. package/middleware/index.js +1 -2
  59. package/package.json +7 -6
  60. package/sandbox/.env +1 -0
  61. package/sandbox/apps/sandbox/fields.js +24 -11
  62. package/sandbox/apps/sandbox/index.js +5 -1
  63. package/sandbox/apps/sandbox/translations/en/default.json +203 -0
  64. package/sandbox/apps/sandbox/translations/src/en/fields.json +9 -6
  65. package/sandbox/apps/sandbox/translations/src/en/journey.json +4 -1
  66. package/sandbox/apps/sandbox/translations/src/en/pages.json +2 -29
  67. package/sandbox/apps/sandbox/translations/src/en/validation.json +1 -1
  68. package/sandbox/assets/js/index.js +1 -1
  69. package/sandbox/assets/scss/app.scss +68 -16
  70. package/sandbox/package.json +4 -1
  71. package/sandbox/public/css/app.css +9444 -0
  72. package/sandbox/public/images/icons/icon-caret-left.png +0 -0
  73. package/sandbox/public/images/icons/icon-complete.png +0 -0
  74. package/sandbox/public/images/icons/icon-cross-remove-sign.png +0 -0
  75. package/sandbox/public/js/bundle.js +35644 -0
  76. package/sandbox/server.js +0 -5
  77. package/sandbox/yarn.lock +767 -0
  78. package/utilities/helpers/index.js +1 -16
  79. package/wizard/index.js +0 -1
  80. package/config/rate-limits.js +0 -20
  81. package/config/sanitisation-rules.js +0 -29
  82. package/frontend/govuk-template/govuk_template.html +0 -109
  83. package/frontend/template-partials/views/rate-limit-error.html +0 -10
  84. package/frontend/themes/gov-uk/views/partials/form.html +0 -9
  85. package/frontend/themes/gov-uk/views/partials/forms/option-group.html +0 -28
  86. package/frontend/themes/gov-uk/views/partials/mixins/panel.html +0 -3
  87. package/frontend/themes/gov-uk/views/partials/validation-summary.html +0 -24
  88. package/middleware/rate-limiter.js +0 -96
  89. package/sandbox/apps/sandbox/views/confirmation.html +0 -15
package/index.js CHANGED
@@ -120,7 +120,8 @@ const getContentSecurityPolicy = (config, res) => {
120
120
  * @param options.getTerms {boolean} Optional boolean - whether to mount the /terms endpoint
121
121
  * @param options.getCookies {boolean} Optional boolean - whether to mount the /cookies endpoint
122
122
  * @param options.noCache {boolean} Optional boolean - whether to disable caching
123
- *
123
+ * @param options.getAccessibilityStatement {boolean} Optional boolean - whether to mount the /accessibility-statement endpoint
124
+ *
124
125
  * @returns {object} A new HOF application using the configuration supplied in options
125
126
  */
126
127
  function bootstrap(options) {
@@ -204,10 +205,9 @@ function bootstrap(options) {
204
205
  }));
205
206
  app.use(mixins());
206
207
  app.use(markdown(config.markdown));
207
- // rate limits have to be loaded before all routes so it is applied to them
208
- if (config.rateLimits.requests.active) {
209
- app.use(hofMiddleware.rateLimiter(config, 'requests'));
210
- }
208
+
209
+ // Set up routing so <YOUR-SITE-URL>/assets are served from /node_modules/govuk-frontend/govuk/assets
210
+ app.use('/assets', express.static(path.join(__dirname, '/node_modules/govuk-frontend/govuk/assets')))
211
211
 
212
212
  if (config.getAccessibility === true) {
213
213
  deprecate(
package/lib/router.js CHANGED
@@ -19,8 +19,7 @@ function getWizardConfig(config) {
19
19
  const wizardConfig = {
20
20
  name: config.route.name || (config.route.baseUrl || '').replace('/', ''),
21
21
  protocol: config.protocol,
22
- env: config.env,
23
- sanitiseInputs: config.sanitiseInputs
22
+ env: config.env
24
23
  };
25
24
 
26
25
  if (config.appConfig) {
package/lib/settings.js CHANGED
@@ -7,7 +7,21 @@ const hoganExpressStrict = require('hogan-express-strict');
7
7
  const expressPartialTemplates = require('express-partial-templates');
8
8
  const bodyParser = require('body-parser');
9
9
 
10
- module.exports = (app, config) => {
10
+ const filterEmptyViews = (views) => {
11
+ return views.filter(view => dirExists(view))
12
+ }
13
+
14
+ const dirExists = (dir) => {
15
+ try {
16
+ if (fs.existsSync(dir)) {
17
+ return true;
18
+ }
19
+ } catch(err) {
20
+ throw new Error(`${err}: Cannot check if the directory path exists`)
21
+ }
22
+ }
23
+
24
+ module.exports = async (app, config) => {
11
25
  const viewEngine = config.viewEngine || 'html';
12
26
 
13
27
  app.use((req, res, next) => {
@@ -17,7 +31,8 @@ module.exports = (app, config) => {
17
31
 
18
32
  app.use(config.theme());
19
33
 
20
- const viewPaths = [].concat(config.theme.views);
34
+ const filteredViews = filterEmptyViews(config.theme.views)
35
+ const viewPaths = [].concat(filteredViews);
21
36
  app.set('view engine', viewEngine);
22
37
  app.enable('view cache');
23
38
 
@@ -1,8 +1,6 @@
1
1
  /* eslint-disable no-unused-vars */
2
2
  'use strict';
3
3
 
4
- const rateLimitsConfig = require('../config/rate-limits');
5
-
6
4
  const errorTitle = code => `${code}_ERROR`;
7
5
  const errorMsg = code => `There is a ${code}_ERROR`;
8
6
  // eslint-disable-next-line complexity
@@ -23,36 +21,6 @@ const getContent = (err, translate) => {
23
21
  content.message = (translate && translate('errors.cookies-required.message'));
24
22
  }
25
23
 
26
- if (err.code === 'DDOS_RATE_LIMIT') {
27
- err.status = 429;
28
- err.template = 'rate-limit-error';
29
- err.title = (translate && translate('errors.ddos-rate-limit.title'));
30
- err.message = (translate && translate('errors.ddos-rate-limit.message'));
31
- err.preTimeToWait = (translate && translate('errors.ddos-rate-limit.pre-time-to-wait'));
32
- err.timeToWait = rateLimitsConfig.rateLimits.requests.windowSizeInMinutes;
33
- err.postTimeToWait = (translate && translate('errors.ddos-rate-limit.post-time-to-wait'));
34
- content.title = (translate && translate('errors.ddos-rate-limit.title'));
35
- content.message = (translate && translate('errors.ddos-rate-limit.message'));
36
- content.preTimeToWait = (translate && translate('errors.ddos-rate-limit.pre-time-to-wait'));
37
- content.timeToWait = rateLimitsConfig.rateLimits.requests.windowSizeInMinutes;
38
- content.postTimeToWait = (translate && translate('errors.ddos-rate-limit.post-time-to-wait'));
39
- }
40
-
41
- if (err.code === 'SUBMISSION_RATE_LIMIT') {
42
- err.status = 429;
43
- err.template = 'rate-limit-error';
44
- err.title = (translate && translate('errors.submission-rate-limit.title'));
45
- err.message = (translate && translate('errors.submission-rate-limit.message'));
46
- err.preTimeToWait = (translate && translate('errors.submission-rate-limit.pre-time-to-wait'));
47
- err.timeToWait = rateLimitsConfig.rateLimits.submissions.windowSizeInMinutes;
48
- err.postTimeToWait = (translate && translate('errors.submission-rate-limit.post-time-to-wait'));
49
- content.title = (translate && translate('errors.submission-rate-limit.title'));
50
- content.message = (translate && translate('errors.submission-rate-limit.message'));
51
- content.preTimeToWait = (translate && translate('errors.submission-rate-limit.pre-time-to-wait'));
52
- content.timeToWait = rateLimitsConfig.rateLimits.submissions.windowSizeInMinutes;
53
- content.postTimeToWait = (translate && translate('errors.submission-rate-limit.post-time-to-wait'));
54
- }
55
-
56
24
  err.code = err.code || 'UNKNOWN';
57
25
  err.status = err.status || 500;
58
26
 
@@ -4,6 +4,5 @@ module.exports = {
4
4
  cookies: require('./cookies'),
5
5
  errors: require('./errors'),
6
6
  notFound: require('./not-found'),
7
- deepTranslate: require('./deep-translate'),
8
- rateLimiter: require('./rate-limiter')
7
+ deepTranslate: require('./deep-translate')
9
8
  };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "hof",
3
3
  "description": "A bootstrap for HOF projects",
4
- "version": "19.14.2",
4
+ "version": "20.0.0-beta.2",
5
5
  "license": "MIT",
6
6
  "main": "index.js",
7
7
  "author": "HomeOffice",
@@ -23,7 +23,7 @@
23
23
  "scripts": {
24
24
  "test": "yarn run unit && yarn run test:cookie-banner && yarn run test:functional && yarn run test:client && yarn run test:lint",
25
25
  "unit": "LOG_LEVEL=error nyc _mocha \"test/**/*.spec.js\" \"sandbox/test/**/*.spec.js\"",
26
- "unit:nocov": "LOG_LEVEL=error mocha",
26
+ "unit:nocov": "LOG_LEVEL=error mocha \"test/**/*.spec.js\" \"sandbox/test/**/*.spec.js\"",
27
27
  "test:lint": "eslint . --config ./node_modules/eslint-config-hof/default.js",
28
28
  "test:functional": "funkie mocha ./test/functional-tests --exit",
29
29
  "test:client": "karma start test/frontend/toolkit/karma.conf.js",
@@ -57,6 +57,7 @@
57
57
  "findup": "^0.1.5",
58
58
  "glob": "^7.2.0",
59
59
  "govuk-elements-sass": "^3.1.3",
60
+ "govuk-frontend": "3.14",
60
61
  "govuk_template_mustache": "^0.26.0",
61
62
  "helmet": "^3.22.0",
62
63
  "hogan-express-strict": "^0.5.4",
@@ -69,10 +70,10 @@
69
70
  "lodash": "^4.17.21",
70
71
  "markdown-it": "^12.3.2",
71
72
  "minimatch": "^3.0.3",
72
- "minimist": "^1.2.6",
73
+ "minimist": "^1.2.0",
73
74
  "mixwith": "^0.1.1",
74
75
  "mkdirp": "^0.5.1",
75
- "moment": "^2.29.2",
76
+ "moment": "^2.24.0",
76
77
  "morgan": "^1.10.0",
77
78
  "mustache": "^2.3.0",
78
79
  "nodemailer": "^6.6.3",
@@ -87,8 +88,8 @@
87
88
  "serve-static": "^1.14.1",
88
89
  "uglify-js": "^3.14.3",
89
90
  "underscore": "^1.12.1",
90
- "urijs": "^1.19.11",
91
- "winston": "^3.7.2"
91
+ "urijs": "^1.19.10",
92
+ "winston": "^3.3.3"
92
93
  },
93
94
  "devDependencies": {
94
95
  "@cucumber/cucumber": "^7.3.0",
package/sandbox/.env ADDED
@@ -0,0 +1 @@
1
+ // GA_TAG=UA-215558609-1
@@ -8,35 +8,49 @@ module.exports = {
8
8
  'landing-page-radio': {
9
9
  mixin: 'radio-group',
10
10
  validate: ['required'],
11
- legend: {
12
- className: 'visuallyhidden'
13
- },
11
+ noHeading: true,
12
+ // Design system says to avoid in-line unless it's two options,
13
+ // so just added as an example below but by default it isn't
14
+ className: ['govuk-radios--inline'],
14
15
  options: ['basic-form', 'complex-form', 'build-your-own-form']
15
16
  },
16
17
  name: {
17
18
  validate: ['required', 'notUrl', { type: 'maxlength', arguments: 200 }],
19
+ labelClassName: ['govuk-label--l'],
20
+ // noHeading: 'true'
18
21
  },
19
- dateOfBirth: dateComponent('dateOfBirth', {
20
- validate: ['required', 'before', { type: 'after', arguments: ['1900'] }]
22
+ 'dateOfBirth': dateComponent('dateOfBirth', {
23
+ // noHeading: 'true',
24
+ controlType: 'date-input',
25
+ validate: [
26
+ 'required',
27
+ 'date',
28
+ { type: 'after', arguments: ['1900'] }
29
+ ]
21
30
  }),
22
31
  building: {
32
+ noHeading: 'true',
23
33
  validate: ['required', 'notUrl', { type: 'maxlength', arguments: 100 }]
24
34
  },
25
35
  street: {
36
+ noHeading: 'true',
26
37
  validate: ['notUrl', { type: 'maxlength', arguments: 50 }],
27
38
  labelClassName: 'visuallyhidden'
28
39
  },
29
40
  townOrCity: {
41
+ noHeading: 'true',
30
42
  validate: ['required', 'notUrl',
31
43
  { type: 'regex', arguments: /^([^0-9]*)$/ },
32
44
  { type: 'maxlength', arguments: 100 }
33
45
  ]
34
46
  },
35
47
  postcode: {
48
+ noHeading: 'true',
36
49
  validate: ['required', 'postcode'],
37
50
  formatter: ['removespaces', 'uppercase']
38
51
  },
39
52
  incomeTypes: {
53
+ // noHeading: 'true',
40
54
  mixin: 'checkbox-group',
41
55
  labelClassName: 'visuallyhidden',
42
56
  validate: ['required'],
@@ -49,11 +63,9 @@ module.exports = {
49
63
  ]
50
64
  },
51
65
  countryOfHearing: {
66
+ // noHeading: 'true',
52
67
  mixin: 'radio-group',
53
68
  validate: ['required'],
54
- legend: {
55
- className: 'visuallyhidden'
56
- },
57
69
  options: [
58
70
  'englandAndWales',
59
71
  'scotland',
@@ -61,6 +73,8 @@ module.exports = {
61
73
  ]
62
74
  },
63
75
  email: {
76
+ // noHeading: 'true',
77
+ labelClassName: ['govuk-label--l'],
64
78
  validate: ['required', 'email']
65
79
  },
66
80
  phone: {
@@ -81,14 +95,14 @@ module.exports = {
81
95
  },
82
96
  complaintDetails: {
83
97
  mixin: 'textarea',
84
- labelClassName: 'visuallyhidden',
85
98
  // we want to ignore default formatters as we want
86
99
  // to preserve white space
87
100
  'ignore-defaults': true,
88
101
  // apply the other default formatters
89
102
  formatter: ['trim', 'hyphens'],
103
+ labelClassName: ['govuk-label--l'],
90
104
  // attributes here are passed to the field element
91
- validate: ['required', { type: 'maxlength', arguments: 5000 }],
105
+ validate: ['required', { type: 'maxlength', arguments: 100 }],
92
106
  attributes: [{
93
107
  attribute: 'rows',
94
108
  value: 8
@@ -96,7 +110,6 @@ module.exports = {
96
110
  },
97
111
  appealStages: {
98
112
  mixin: 'select',
99
- labelClassName: 'visuallyhidden',
100
113
  validate: ['required'],
101
114
  options: [{
102
115
  value: '',
@@ -30,7 +30,11 @@ module.exports = {
30
30
  },
31
31
  '/dob': {
32
32
  fields: ['dateOfBirth'],
33
- next: '/address'
33
+ next: '/address',
34
+ locals: {
35
+ step: 'dob',
36
+ labelClassName: 'govuk-input'
37
+ }
34
38
  },
35
39
  '/address': {
36
40
  fields: ['building', 'street', 'townOrCity', 'postcode'],
@@ -0,0 +1,203 @@
1
+ {
2
+ "fields": {
3
+ "landing-page-radio": {
4
+ "legend": "Which form would you like to explore?",
5
+ "hint": "Choose one of the options below and press continue.",
6
+ "options": {
7
+ "basic-form": {
8
+ "label": "Basic form"
9
+ },
10
+ "complex-form": {
11
+ "label": "Complex form"
12
+ },
13
+ "build-your-own-form": {
14
+ "label": "Build your own form"
15
+ }
16
+ }
17
+ },
18
+ "name": {
19
+ "label": "What is your full name?"
20
+ },
21
+ "dateOfBirth": {
22
+ "legend": "What is your date of birth?",
23
+ "hint": "For example, 31 10 1990"
24
+ },
25
+ "building": {
26
+ "label": "Building and street"
27
+ },
28
+ "street": {
29
+ "label": "Address line 2"
30
+ },
31
+ "townOrCity": {
32
+ "label": "Town or city"
33
+ },
34
+ "postcode": {
35
+ "label": "Postcode"
36
+ },
37
+ "incomeTypes": {
38
+ "label": "Sources of income",
39
+ "legend": "Select the options where you receive income from",
40
+ "hint": "Select all options that apply to you.",
41
+ "options": {
42
+ "salary": {
43
+ "label": "Salary"
44
+ },
45
+ "universal_credit": {
46
+ "label": "Universal Credit"
47
+ },
48
+ "child_benefit": {
49
+ "label": "Child Benefit"
50
+ },
51
+ "housing_benefit": {
52
+ "label": "Housing Benefit"
53
+ },
54
+ "other": {
55
+ "label": "Other"
56
+ }
57
+ }
58
+ },
59
+ "countryOfHearing": {
60
+ "legend": "What country was the appeal lodged?",
61
+ "options": {
62
+ "englandAndWales": {
63
+ "label": "England and Wales"
64
+ },
65
+ "scotland": {
66
+ "label": "Scotland"
67
+ },
68
+ "northernIreland": {
69
+ "label": "Northern Ireland"
70
+ }
71
+ }
72
+ },
73
+ "email": {
74
+ "label": "Enter your email address"
75
+ },
76
+ "phone": {
77
+ "label": "Phone number",
78
+ "hint": "International phone numbers require the international dialling code, for example +33235066182"
79
+ },
80
+ "int-phone-number": {
81
+ "legend": "International phone number"
82
+ },
83
+ "complaintDetails": {
84
+ "label": "Complaint details",
85
+ "hint": "Briefly summarise your complaint. Include anything that can help our investigation."
86
+ },
87
+ "countrySelect": {
88
+ "label": "Which country are you based in?",
89
+ "hint": "Start to type the country name and options will appear"
90
+ },
91
+ "appealStages": {
92
+ "label": "Appeal stage",
93
+ "hint": "Choose an appeal stage from the drop down menu",
94
+ "options": {
95
+ "null": "Select..."
96
+ }
97
+ }
98
+ },
99
+ "journey": {
100
+ "header": "HOF Bootstrap Sandbox Form",
101
+ "confirmation": {
102
+ "details": "Your reference number <br><strong>HDJ2123F</strong>"
103
+ }
104
+ },
105
+ "pages": {
106
+ "landing-page": {
107
+ "header": "Landing page"
108
+ },
109
+ "build-your-own-form": {
110
+ "title": "Build your own form",
111
+ "subheader": "Access the build your own form guidance link"
112
+ },
113
+ "address": {
114
+ "header": "What is your address in the UK?",
115
+ "intro": "If you have no fixed address, enter an address where we can contact you."
116
+ },
117
+ "phone-number": {
118
+ "header": "Enter your phone number"
119
+ },
120
+ "confirm": {
121
+ "header": "Check your answers before submitting your application.",
122
+ "sections": {
123
+ "applicantsDetails": {
124
+ "header": "Applicant's details"
125
+ },
126
+ "address": {
127
+ "header": "Address"
128
+ },
129
+ "income": {
130
+ "header": "Income"
131
+ },
132
+ "appealDetails": {
133
+ "header": "Appeal details"
134
+ },
135
+ "countrySelect": {
136
+ "header": "Country of residence"
137
+ },
138
+ "contactDetails": {
139
+ "header": "Contact details"
140
+ },
141
+ "complaintDetails": {
142
+ "header": "Complaint details"
143
+ }
144
+ }
145
+ },
146
+ "confirmation": {
147
+ "title": "Application sent",
148
+ "alert": "Application sent",
149
+ "subheader": "What happens next",
150
+ "content": "We’ll contact you with the decision of your application or if we need more information from you."
151
+ }
152
+ },
153
+ "validation": {
154
+ "landing-page-radio": {
155
+ "required": "Select an option below and press continue"
156
+ },
157
+ "name": {
158
+ "default": "Enter your full name"
159
+ },
160
+ "dateOfBirth": {
161
+ "default": "Enter your date of birth in the correct format; for example, 31 10 1990",
162
+ "after": "Enter a date after 1 1 1900",
163
+ "before": "Enter a date that is in the past"
164
+ },
165
+ "building": {
166
+ "default": "Enter details of your building and street"
167
+ },
168
+ "townOrCity": {
169
+ "default": "Enter a town or city",
170
+ "regex": "Enter a town or city without including digits"
171
+ },
172
+ "postcode": {
173
+ "default": "Enter your postcode"
174
+ },
175
+ "incomeTypes": {
176
+ "default": "Select all options that apply to you."
177
+ },
178
+ "countryOfHearing": {
179
+ "default": "Select where the appeal hearing is to be held"
180
+ },
181
+ "countrySelect": {
182
+ "default": "Enter a valid country of residence",
183
+ "required": "Enter your country of residence"
184
+ },
185
+ "email": {
186
+ "default": "Enter your email address in the correct format"
187
+ },
188
+ "phone": {
189
+ "default": "Enter your phone number"
190
+ },
191
+ "int-phone-number": {
192
+ "required": "Enter an international phone number",
193
+ "internationalPhoneNumber": "Enter a valid international phone number"
194
+ },
195
+ "complaintDetails": {
196
+ "default": "Enter details about why you are making a complaint",
197
+ "maxlength": "Keep to the {{maxlength}} character limit"
198
+ },
199
+ "appealStages": {
200
+ "required": "Select an appeal stage from the list"
201
+ }
202
+ }
203
+ }
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "landing-page-radio": {
3
3
  "legend": "Which form would you like to explore?",
4
+ "hint": "Choose one of the options below and press continue.",
4
5
  "options": {
5
6
  "basic-form": {
6
7
  "label": "Basic form"
@@ -14,10 +15,10 @@
14
15
  }
15
16
  },
16
17
  "name": {
17
- "label": "Full name"
18
+ "label": "What is your full name?"
18
19
  },
19
20
  "dateOfBirth": {
20
- "legend": "Date of birth",
21
+ "legend": "What is your date of birth?",
21
22
  "hint": "For example, 31 10 1990"
22
23
  },
23
24
  "building": {
@@ -55,7 +56,7 @@
55
56
  }
56
57
  },
57
58
  "countryOfHearing": {
58
- "label": "Country of hearing",
59
+ "legend": "What country was the appeal lodged?",
59
60
  "options": {
60
61
  "englandAndWales": {
61
62
  "label": "England and Wales"
@@ -69,7 +70,7 @@
69
70
  }
70
71
  },
71
72
  "email" : {
72
- "label": "Email address"
73
+ "label": "Enter your email address"
73
74
  },
74
75
  "phone": {
75
76
  "label": "Phone number",
@@ -79,14 +80,16 @@
79
80
  "legend": "International phone number"
80
81
  },
81
82
  "complaintDetails": {
82
- "label": "Complaint details"
83
+ "label": "Complaint details",
84
+ "hint": "Briefly summarise your complaint. Include anything that can help our investigation."
83
85
  },
84
86
  "countrySelect": {
85
- "label": "Select a country",
87
+ "label": "Which country are you based in?",
86
88
  "hint": "Start to type the country name and options will appear"
87
89
  },
88
90
  "appealStages": {
89
91
  "label": "Appeal stage",
92
+ "hint": "Choose an appeal stage from the drop down menu",
90
93
  "options": {
91
94
  "null": "Select..."
92
95
  }
@@ -1,3 +1,6 @@
1
1
  {
2
- "header": "HOF Bootstrap Sandbox Form"
2
+ "header": "HOF Bootstrap Sandbox Form",
3
+ "confirmation": {
4
+ "details": "Your reference number <br><strong>HDJ2123F</strong>"
5
+ }
3
6
  }
@@ -1,45 +1,18 @@
1
1
  {
2
2
  "landing-page": {
3
- "header": "Landing page",
4
- "intro": "Choose one of the options below and press continue."
3
+ "header": "Landing page"
5
4
  },
6
5
  "build-your-own-form": {
7
6
  "title": "Build your own form",
8
7
  "subheader": "Access the build your own form guidance link"
9
8
  },
10
- "name": {
11
- "header": "What is your full name?"
12
- },
13
- "dob": {
14
- "header": "What is your date of birth?"
15
- },
16
9
  "address": {
17
10
  "header": "What is your address in the UK?",
18
11
  "intro": "If you have no fixed address, enter an address where we can contact you."
19
12
  },
20
- "checkboxes": {
21
- "header": "Where does your money come from each month?"
22
- },
23
- "radio": {
24
- "header": "What country was the appeal lodged?"
25
- },
26
- "country-select": {
27
- "header": "What country is your address located?"
28
- },
29
- "email": {
30
- "header": "Enter your email address"
31
- },
32
13
  "phone-number": {
33
14
  "header": "Enter your phone number"
34
15
  },
35
- "text-input-area": {
36
- "header": "What are the details of your complaint?",
37
- "intro": "Briefly summarise your complaint. Include anything that can help our investigation."
38
- },
39
- "select":{
40
- "header": "What is the appeal stage?",
41
- "intro": "Choose an appeal stage from the drop down menu"
42
- },
43
16
  "confirm": {
44
17
  "header": "Check your answers before submitting your application.",
45
18
  "sections": {
@@ -72,4 +45,4 @@
72
45
  "subheader": "What happens next",
73
46
  "content": "We’ll contact you with the decision of your application or if we need more information from you."
74
47
  }
75
- }
48
+ }
@@ -42,7 +42,7 @@
42
42
  },
43
43
  "complaintDetails": {
44
44
  "default": "Enter details about why you are making a complaint",
45
- "maxlength": "Keep to the 5000 character limit"
45
+ "maxlength": "Keep to the {{maxlength}} character limit"
46
46
  },
47
47
  "appealStages": {
48
48
  "required": "Select an appeal stage from the list"
@@ -67,4 +67,4 @@ $('.typeahead').each(function applyTypeahead() {
67
67
  }),
68
68
  limit: 100
69
69
  });
70
- });
70
+ });