@ministryofjustice/frontend 4.0.0 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (245) hide show
  1. package/govuk-prototype-kit.config.json +19 -4
  2. package/moj/_base.scss +2 -0
  3. package/moj/_base.scss.map +1 -0
  4. package/moj/all.bundle.js +2523 -0
  5. package/moj/all.bundle.js.map +1 -0
  6. package/moj/all.bundle.mjs +2502 -0
  7. package/moj/all.bundle.mjs.map +1 -0
  8. package/moj/all.mjs +59 -69
  9. package/moj/all.mjs.map +1 -1
  10. package/moj/all.scss +2 -0
  11. package/moj/all.scss.map +1 -0
  12. package/moj/components/_all.scss +2 -0
  13. package/moj/components/_all.scss.map +1 -0
  14. package/moj/components/action-bar/_action-bar.scss +2 -0
  15. package/moj/components/action-bar/_action-bar.scss.map +1 -0
  16. package/moj/components/add-another/_add-another.scss +2 -0
  17. package/moj/components/add-another/_add-another.scss.map +1 -0
  18. package/moj/components/add-another/add-another.bundle.js +128 -0
  19. package/moj/components/add-another/add-another.bundle.js.map +1 -0
  20. package/moj/components/add-another/add-another.bundle.mjs +120 -0
  21. package/moj/components/add-another/add-another.bundle.mjs.map +1 -0
  22. package/moj/components/add-another/add-another.mjs +112 -99
  23. package/moj/components/add-another/add-another.mjs.map +1 -1
  24. package/moj/components/alert/_alert.scss +4 -0
  25. package/moj/components/alert/_alert.scss.map +1 -0
  26. package/moj/components/alert/alert.bundle.js +330 -0
  27. package/moj/components/alert/alert.bundle.js.map +1 -0
  28. package/moj/components/alert/alert.bundle.mjs +322 -0
  29. package/moj/components/alert/alert.bundle.mjs.map +1 -0
  30. package/moj/components/alert/alert.mjs +181 -217
  31. package/moj/components/alert/alert.mjs.map +1 -1
  32. package/moj/components/alert/{alert.spec.helper.js → alert.spec.helper.bundle.js} +1 -1
  33. package/moj/components/alert/alert.spec.helper.bundle.js.map +1 -0
  34. package/moj/components/alert/alert.spec.helper.bundle.mjs +67 -0
  35. package/moj/components/alert/alert.spec.helper.bundle.mjs.map +1 -0
  36. package/moj/components/alert/alert.spec.helper.mjs.map +1 -1
  37. package/moj/components/badge/_badge.scss +2 -0
  38. package/moj/components/badge/_badge.scss.map +1 -0
  39. package/moj/components/banner/_banner.scss +2 -0
  40. package/moj/components/banner/_banner.scss.map +1 -0
  41. package/moj/components/button-menu/README.md +10 -6
  42. package/moj/components/button-menu/_button-menu.scss +10 -3
  43. package/moj/components/button-menu/_button-menu.scss.map +1 -0
  44. package/moj/components/button-menu/button-menu.bundle.js +299 -0
  45. package/moj/components/button-menu/button-menu.bundle.js.map +1 -0
  46. package/moj/components/button-menu/{button-menu.js → button-menu.bundle.mjs} +74 -121
  47. package/moj/components/button-menu/button-menu.bundle.mjs.map +1 -0
  48. package/moj/components/button-menu/button-menu.mjs +246 -285
  49. package/moj/components/button-menu/button-menu.mjs.map +1 -1
  50. package/moj/components/cookie-banner/_cookie-banner.scss +2 -0
  51. package/moj/components/cookie-banner/_cookie-banner.scss.map +1 -0
  52. package/moj/components/currency-input/_currency-input.scss +2 -0
  53. package/moj/components/currency-input/_currency-input.scss.map +1 -0
  54. package/moj/components/date-picker/_date-picker.scss +2 -0
  55. package/moj/components/date-picker/_date-picker.scss.map +1 -0
  56. package/moj/components/date-picker/date-picker.bundle.js +784 -0
  57. package/moj/components/date-picker/date-picker.bundle.js.map +1 -0
  58. package/moj/components/date-picker/{date-picker.js → date-picker.bundle.mjs} +245 -439
  59. package/moj/components/date-picker/date-picker.bundle.mjs.map +1 -0
  60. package/moj/components/date-picker/date-picker.mjs +654 -840
  61. package/moj/components/date-picker/date-picker.mjs.map +1 -1
  62. package/moj/components/filter/_filter.scss +2 -0
  63. package/moj/components/filter/_filter.scss.map +1 -0
  64. package/moj/components/filter-toggle-button/filter-toggle-button.bundle.js +96 -0
  65. package/moj/components/filter-toggle-button/filter-toggle-button.bundle.js.map +1 -0
  66. package/moj/components/filter-toggle-button/filter-toggle-button.bundle.mjs +88 -0
  67. package/moj/components/filter-toggle-button/filter-toggle-button.bundle.mjs.map +1 -0
  68. package/moj/components/filter-toggle-button/filter-toggle-button.mjs +78 -84
  69. package/moj/components/filter-toggle-button/filter-toggle-button.mjs.map +1 -1
  70. package/moj/components/form-validator/form-validator.bundle.js +198 -0
  71. package/moj/components/form-validator/form-validator.bundle.js.map +1 -0
  72. package/moj/components/form-validator/form-validator.bundle.mjs +190 -0
  73. package/moj/components/form-validator/form-validator.bundle.mjs.map +1 -0
  74. package/moj/components/form-validator/form-validator.mjs +149 -152
  75. package/moj/components/form-validator/form-validator.mjs.map +1 -1
  76. package/moj/components/header/_header.scss +2 -0
  77. package/moj/components/header/_header.scss.map +1 -0
  78. package/moj/components/identity-bar/_identity-bar.scss +2 -0
  79. package/moj/components/identity-bar/_identity-bar.scss.map +1 -0
  80. package/moj/components/interruption-card/_interruption-card.scss +2 -0
  81. package/moj/components/interruption-card/_interruption-card.scss.map +1 -0
  82. package/moj/components/messages/_messages.scss +2 -0
  83. package/moj/components/messages/_messages.scss.map +1 -0
  84. package/moj/components/multi-file-upload/_multi-file-upload.scss +2 -0
  85. package/moj/components/multi-file-upload/_multi-file-upload.scss.map +1 -0
  86. package/moj/components/multi-file-upload/multi-file-upload.bundle.js +223 -0
  87. package/moj/components/multi-file-upload/multi-file-upload.bundle.js.map +1 -0
  88. package/moj/components/multi-file-upload/multi-file-upload.bundle.mjs +215 -0
  89. package/moj/components/multi-file-upload/multi-file-upload.bundle.mjs.map +1 -0
  90. package/moj/components/multi-file-upload/multi-file-upload.mjs +193 -209
  91. package/moj/components/multi-file-upload/multi-file-upload.mjs.map +1 -1
  92. package/moj/components/multi-select/_multi-select.scss +2 -0
  93. package/moj/components/multi-select/_multi-select.scss.map +1 -0
  94. package/moj/components/multi-select/multi-select.bundle.js +78 -0
  95. package/moj/components/multi-select/multi-select.bundle.js.map +1 -0
  96. package/moj/components/multi-select/multi-select.bundle.mjs +70 -0
  97. package/moj/components/multi-select/multi-select.bundle.mjs.map +1 -0
  98. package/moj/components/multi-select/multi-select.mjs +59 -67
  99. package/moj/components/multi-select/multi-select.mjs.map +1 -1
  100. package/moj/components/notification-badge/_notification-badge.scss +2 -0
  101. package/moj/components/notification-badge/_notification-badge.scss.map +1 -0
  102. package/moj/components/organisation-switcher/_organisation-switcher.scss +2 -0
  103. package/moj/components/organisation-switcher/_organisation-switcher.scss.map +1 -0
  104. package/moj/components/page-header-actions/_page-header-actions.scss +2 -0
  105. package/moj/components/page-header-actions/_page-header-actions.scss.map +1 -0
  106. package/moj/components/page-header-actions/template.njk +1 -1
  107. package/moj/components/pagination/_pagination.scss +2 -2
  108. package/moj/components/pagination/_pagination.scss.map +1 -0
  109. package/moj/components/password-reveal/_password-reveal.scss +2 -0
  110. package/moj/components/password-reveal/_password-reveal.scss.map +1 -0
  111. package/moj/components/password-reveal/password-reveal.bundle.js +49 -0
  112. package/moj/components/password-reveal/password-reveal.bundle.js.map +1 -0
  113. package/moj/components/password-reveal/password-reveal.bundle.mjs +41 -0
  114. package/moj/components/password-reveal/password-reveal.bundle.mjs.map +1 -0
  115. package/moj/components/password-reveal/password-reveal.mjs +36 -31
  116. package/moj/components/password-reveal/password-reveal.mjs.map +1 -1
  117. package/moj/components/primary-navigation/_primary-navigation.scss +2 -0
  118. package/moj/components/primary-navigation/_primary-navigation.scss.map +1 -0
  119. package/moj/components/progress-bar/_progress-bar.scss +2 -0
  120. package/moj/components/progress-bar/_progress-bar.scss.map +1 -0
  121. package/moj/components/rich-text-editor/README.md +15 -9
  122. package/moj/components/rich-text-editor/_rich-text-editor.scss +2 -0
  123. package/moj/components/rich-text-editor/_rich-text-editor.scss.map +1 -0
  124. package/moj/components/rich-text-editor/rich-text-editor.bundle.js +145 -0
  125. package/moj/components/rich-text-editor/rich-text-editor.bundle.js.map +1 -0
  126. package/moj/components/rich-text-editor/rich-text-editor.bundle.mjs +137 -0
  127. package/moj/components/rich-text-editor/rich-text-editor.bundle.mjs.map +1 -0
  128. package/moj/components/rich-text-editor/rich-text-editor.mjs +124 -145
  129. package/moj/components/rich-text-editor/rich-text-editor.mjs.map +1 -1
  130. package/moj/components/search/_search.scss +2 -0
  131. package/moj/components/search/_search.scss.map +1 -0
  132. package/moj/components/search-toggle/{search-toggle.scss → _search-toggle.scss} +2 -0
  133. package/moj/components/search-toggle/_search-toggle.scss.map +1 -0
  134. package/moj/components/search-toggle/search-toggle.bundle.js +54 -0
  135. package/moj/components/search-toggle/search-toggle.bundle.js.map +1 -0
  136. package/moj/components/search-toggle/search-toggle.bundle.mjs +46 -0
  137. package/moj/components/search-toggle/search-toggle.bundle.mjs.map +1 -0
  138. package/moj/components/search-toggle/search-toggle.mjs +40 -49
  139. package/moj/components/search-toggle/search-toggle.mjs.map +1 -1
  140. package/moj/components/side-navigation/_side-navigation.scss +2 -0
  141. package/moj/components/side-navigation/_side-navigation.scss.map +1 -0
  142. package/moj/components/sortable-table/_sortable-table.scss +2 -2
  143. package/moj/components/sortable-table/_sortable-table.scss.map +1 -0
  144. package/moj/components/sortable-table/sortable-table.bundle.js +134 -0
  145. package/moj/components/sortable-table/sortable-table.bundle.js.map +1 -0
  146. package/moj/components/sortable-table/sortable-table.bundle.mjs +126 -0
  147. package/moj/components/sortable-table/sortable-table.bundle.mjs.map +1 -0
  148. package/moj/components/sortable-table/sortable-table.mjs +117 -130
  149. package/moj/components/sortable-table/sortable-table.mjs.map +1 -1
  150. package/moj/components/sub-navigation/_sub-navigation.scss +2 -0
  151. package/moj/components/sub-navigation/_sub-navigation.scss.map +1 -0
  152. package/moj/components/tag/_tag.scss +2 -0
  153. package/moj/components/tag/_tag.scss.map +1 -0
  154. package/moj/components/task-list/_task-list.scss +2 -0
  155. package/moj/components/task-list/_task-list.scss.map +1 -0
  156. package/moj/components/ticket-panel/_ticket-panel.scss +2 -0
  157. package/moj/components/ticket-panel/_ticket-panel.scss.map +1 -0
  158. package/moj/components/timeline/_timeline.scss +2 -0
  159. package/moj/components/timeline/_timeline.scss.map +1 -0
  160. package/moj/filters/all.js +44 -22
  161. package/moj/helpers/_all.scss +2 -0
  162. package/moj/helpers/_all.scss.map +1 -0
  163. package/moj/helpers/_hidden.scss +2 -0
  164. package/moj/helpers/_hidden.scss.map +1 -0
  165. package/moj/helpers/_links.scss +2 -0
  166. package/moj/helpers/_links.scss.map +1 -0
  167. package/moj/{helpers.js → helpers.bundle.js} +37 -42
  168. package/moj/helpers.bundle.js.map +1 -0
  169. package/moj/helpers.bundle.mjs +179 -0
  170. package/moj/helpers.bundle.mjs.map +1 -0
  171. package/moj/helpers.mjs +52 -28
  172. package/moj/helpers.mjs.map +1 -1
  173. package/moj/init.js +11 -2
  174. package/moj/moj-frontend.min.css +1 -1
  175. package/moj/moj-frontend.min.css.map +1 -1
  176. package/moj/moj-frontend.min.js +1 -1
  177. package/moj/moj-frontend.min.js.map +1 -1
  178. package/moj/objects/_all.scss +2 -0
  179. package/moj/objects/_all.scss.map +1 -0
  180. package/moj/objects/_button-group.scss +17 -1
  181. package/moj/objects/_button-group.scss.map +1 -0
  182. package/moj/objects/_filter-layout.scss +2 -0
  183. package/moj/objects/_filter-layout.scss.map +1 -0
  184. package/moj/objects/_scrollable-pane.scss +2 -0
  185. package/moj/objects/_scrollable-pane.scss.map +1 -0
  186. package/moj/objects/_width-container.scss +2 -0
  187. package/moj/objects/_width-container.scss.map +1 -0
  188. package/moj/settings/_all.scss +2 -0
  189. package/moj/settings/_all.scss.map +1 -0
  190. package/moj/settings/_assets.scss +2 -0
  191. package/moj/settings/_assets.scss.map +1 -0
  192. package/moj/settings/_colours.scss +2 -0
  193. package/moj/settings/_colours.scss.map +1 -0
  194. package/moj/settings/_measurements.scss +2 -0
  195. package/moj/settings/_measurements.scss.map +1 -0
  196. package/moj/settings/_typography.scss +2 -0
  197. package/moj/settings/_typography.scss.map +1 -0
  198. package/moj/template.njk +13 -0
  199. package/moj/utilities/_all.scss +2 -0
  200. package/moj/utilities/_all.scss.map +1 -0
  201. package/moj/utilities/_hidden.scss +2 -0
  202. package/moj/utilities/_hidden.scss.map +1 -0
  203. package/moj/utilities/_width-container.scss +2 -0
  204. package/moj/utilities/_width-container.scss.map +1 -0
  205. package/moj/vendor/govuk-frontend/_base.scss +2 -0
  206. package/moj/vendor/govuk-frontend/_base.scss.map +1 -0
  207. package/moj/vendor/govuk-frontend/_index.scss +2 -0
  208. package/moj/vendor/govuk-frontend/_index.scss.map +1 -0
  209. package/moj/{version.js → version.bundle.js} +1 -1
  210. package/moj/version.bundle.js.map +1 -0
  211. package/moj/version.bundle.mjs +4 -0
  212. package/moj/version.bundle.mjs.map +1 -0
  213. package/moj/version.mjs.map +1 -1
  214. package/package.json +5 -6
  215. package/moj/all.jquery.min.js +0 -1
  216. package/moj/all.jquery.min.js.map +0 -1
  217. package/moj/all.js +0 -2662
  218. package/moj/all.js.map +0 -1
  219. package/moj/components/add-another/add-another.js +0 -115
  220. package/moj/components/add-another/add-another.js.map +0 -1
  221. package/moj/components/alert/alert.js +0 -356
  222. package/moj/components/alert/alert.js.map +0 -1
  223. package/moj/components/alert/alert.spec.helper.js.map +0 -1
  224. package/moj/components/button-menu/button-menu.js.map +0 -1
  225. package/moj/components/date-picker/date-picker.js.map +0 -1
  226. package/moj/components/filter-toggle-button/filter-toggle-button.js +0 -102
  227. package/moj/components/filter-toggle-button/filter-toggle-button.js.map +0 -1
  228. package/moj/components/form-validator/form-validator.js +0 -205
  229. package/moj/components/form-validator/form-validator.js.map +0 -1
  230. package/moj/components/multi-file-upload/multi-file-upload.js +0 -241
  231. package/moj/components/multi-file-upload/multi-file-upload.js.map +0 -1
  232. package/moj/components/multi-select/multi-select.js +0 -86
  233. package/moj/components/multi-select/multi-select.js.map +0 -1
  234. package/moj/components/password-reveal/password-reveal.js +0 -44
  235. package/moj/components/password-reveal/password-reveal.js.map +0 -1
  236. package/moj/components/rich-text-editor/rich-text-editor.js +0 -166
  237. package/moj/components/rich-text-editor/rich-text-editor.js.map +0 -1
  238. package/moj/components/search-toggle/search-toggle.js +0 -63
  239. package/moj/components/search-toggle/search-toggle.js.map +0 -1
  240. package/moj/components/sortable-table/sortable-table.js +0 -147
  241. package/moj/components/sortable-table/sortable-table.js.map +0 -1
  242. package/moj/helpers.js.map +0 -1
  243. package/moj/vendor/html5shiv.js +0 -326
  244. package/moj/vendor/jquery.js +0 -9300
  245. package/moj/version.js.map +0 -1
@@ -1,86 +0,0 @@
1
- (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
3
- typeof define === 'function' && define.amd ? define(['exports'], factory) :
4
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.MOJFrontend = global.MOJFrontend || {}));
5
- })(this, (function (exports) { 'use strict';
6
-
7
- function MultiSelect(options) {
8
- this.container = $(options.container);
9
-
10
- if (this.container.data('moj-multi-select-initialised')) {
11
- return
12
- }
13
-
14
- this.container.data('moj-multi-select-initialised', true);
15
-
16
- const idPrefix = options.id_prefix;
17
- let allId = 'checkboxes-all';
18
- if (typeof idPrefix !== 'undefined') {
19
- allId = `${idPrefix}checkboxes-all`;
20
- }
21
-
22
- this.toggle = $(this.getToggleHtml(allId));
23
- this.toggleButton = this.toggle.find('input');
24
- this.toggleButton.on('click', $.proxy(this, 'onButtonClick'));
25
- this.container.append(this.toggle);
26
- this.checkboxes = $(options.checkboxes);
27
- this.checkboxes.on('click', $.proxy(this, 'onCheckboxClick'));
28
- this.checked = options.checked || false;
29
- }
30
-
31
- MultiSelect.prototype.getToggleHtml = function (allId) {
32
- let html = '';
33
- html +=
34
- '<div class="govuk-checkboxes__item govuk-checkboxes--small moj-multi-select__checkbox">';
35
- html += ` <input type="checkbox" class="govuk-checkboxes__input" id="${allId}">`;
36
- html += ` <label class="govuk-label govuk-checkboxes__label moj-multi-select__toggle-label" for="${allId}">`;
37
- html += ' <span class="govuk-visually-hidden">Select all</span>';
38
- html += ' </label>';
39
- html += '</div>';
40
- return html
41
- };
42
-
43
- MultiSelect.prototype.onButtonClick = function (e) {
44
- if (this.checked) {
45
- this.uncheckAll();
46
- this.toggleButton[0].checked = false;
47
- } else {
48
- this.checkAll();
49
- this.toggleButton[0].checked = true;
50
- }
51
- };
52
-
53
- MultiSelect.prototype.checkAll = function () {
54
- this.checkboxes.each(
55
- $.proxy(function (index, el) {
56
- el.checked = true;
57
- }, this)
58
- );
59
- this.checked = true;
60
- };
61
-
62
- MultiSelect.prototype.uncheckAll = function () {
63
- this.checkboxes.each(
64
- $.proxy(function (index, el) {
65
- el.checked = false;
66
- }, this)
67
- );
68
- this.checked = false;
69
- };
70
-
71
- MultiSelect.prototype.onCheckboxClick = function (e) {
72
- if (!e.target.checked) {
73
- this.toggleButton[0].checked = false;
74
- this.checked = false;
75
- } else {
76
- if (this.checkboxes.filter(':checked').length === this.checkboxes.length) {
77
- this.toggleButton[0].checked = true;
78
- this.checked = true;
79
- }
80
- }
81
- };
82
-
83
- exports.MultiSelect = MultiSelect;
84
-
85
- }));
86
- //# sourceMappingURL=multi-select.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"multi-select.js","sources":["../../../../src/moj/components/multi-select/multi-select.mjs"],"sourcesContent":["import $ from 'jquery'\n\nexport function MultiSelect(options) {\n this.container = $(options.container)\n\n if (this.container.data('moj-multi-select-initialised')) {\n return\n }\n\n this.container.data('moj-multi-select-initialised', true)\n\n const idPrefix = options.id_prefix\n let allId = 'checkboxes-all'\n if (typeof idPrefix !== 'undefined') {\n allId = `${idPrefix}checkboxes-all`\n }\n\n this.toggle = $(this.getToggleHtml(allId))\n this.toggleButton = this.toggle.find('input')\n this.toggleButton.on('click', $.proxy(this, 'onButtonClick'))\n this.container.append(this.toggle)\n this.checkboxes = $(options.checkboxes)\n this.checkboxes.on('click', $.proxy(this, 'onCheckboxClick'))\n this.checked = options.checked || false\n}\n\nMultiSelect.prototype.getToggleHtml = function (allId) {\n let html = ''\n html +=\n '<div class=\"govuk-checkboxes__item govuk-checkboxes--small moj-multi-select__checkbox\">'\n html += ` <input type=\"checkbox\" class=\"govuk-checkboxes__input\" id=\"${allId}\">`\n html += ` <label class=\"govuk-label govuk-checkboxes__label moj-multi-select__toggle-label\" for=\"${allId}\">`\n html += ' <span class=\"govuk-visually-hidden\">Select all</span>'\n html += ' </label>'\n html += '</div>'\n return html\n}\n\nMultiSelect.prototype.onButtonClick = function (e) {\n if (this.checked) {\n this.uncheckAll()\n this.toggleButton[0].checked = false\n } else {\n this.checkAll()\n this.toggleButton[0].checked = true\n }\n}\n\nMultiSelect.prototype.checkAll = function () {\n this.checkboxes.each(\n $.proxy(function (index, el) {\n el.checked = true\n }, this)\n )\n this.checked = true\n}\n\nMultiSelect.prototype.uncheckAll = function () {\n this.checkboxes.each(\n $.proxy(function (index, el) {\n el.checked = false\n }, this)\n )\n this.checked = false\n}\n\nMultiSelect.prototype.onCheckboxClick = function (e) {\n if (!e.target.checked) {\n this.toggleButton[0].checked = false\n this.checked = false\n } else {\n if (this.checkboxes.filter(':checked').length === this.checkboxes.length) {\n this.toggleButton[0].checked = true\n this.checked = true\n }\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1,44 +0,0 @@
1
- (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
3
- typeof define === 'function' && define.amd ? define(['exports'], factory) :
4
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.MOJFrontend = global.MOJFrontend || {}));
5
- })(this, (function (exports) { 'use strict';
6
-
7
- function PasswordReveal(element) {
8
- this.el = element;
9
- const $el = $(this.el);
10
-
11
- if ($el.data('moj-password-reveal-initialised')) {
12
- return
13
- }
14
-
15
- $el.data('moj-password-reveal-initialised', true);
16
- $el.attr('spellcheck', 'false');
17
-
18
- $el.wrap('<div class="moj-password-reveal"></div>');
19
- this.container = $(this.el).parent();
20
- this.createButton();
21
- }
22
-
23
- PasswordReveal.prototype.createButton = function () {
24
- this.button = $(
25
- '<button type="button" class="govuk-button govuk-button--secondary moj-password-reveal__button">Show <span class="govuk-visually-hidden">password</span></button>'
26
- );
27
- this.container.append(this.button);
28
- this.button.on('click', $.proxy(this, 'onButtonClick'));
29
- };
30
-
31
- PasswordReveal.prototype.onButtonClick = function () {
32
- if (this.el.type === 'password') {
33
- this.el.type = 'text';
34
- this.button.html('Hide <span class="govuk-visually-hidden">password</span>');
35
- } else {
36
- this.el.type = 'password';
37
- this.button.html('Show <span class="govuk-visually-hidden">password</span>');
38
- }
39
- };
40
-
41
- exports.PasswordReveal = PasswordReveal;
42
-
43
- }));
44
- //# sourceMappingURL=password-reveal.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"password-reveal.js","sources":["../../../../src/moj/components/password-reveal/password-reveal.mjs"],"sourcesContent":["import $ from 'jquery'\n\nexport function PasswordReveal(element) {\n this.el = element\n const $el = $(this.el)\n\n if ($el.data('moj-password-reveal-initialised')) {\n return\n }\n\n $el.data('moj-password-reveal-initialised', true)\n $el.attr('spellcheck', 'false')\n\n $el.wrap('<div class=\"moj-password-reveal\"></div>')\n this.container = $(this.el).parent()\n this.createButton()\n}\n\nPasswordReveal.prototype.createButton = function () {\n this.button = $(\n '<button type=\"button\" class=\"govuk-button govuk-button--secondary moj-password-reveal__button\">Show <span class=\"govuk-visually-hidden\">password</span></button>'\n )\n this.container.append(this.button)\n this.button.on('click', $.proxy(this, 'onButtonClick'))\n}\n\nPasswordReveal.prototype.onButtonClick = function () {\n if (this.el.type === 'password') {\n this.el.type = 'text'\n this.button.html('Hide <span class=\"govuk-visually-hidden\">password</span>')\n } else {\n this.el.type = 'password'\n this.button.html('Show <span class=\"govuk-visually-hidden\">password</span>')\n }\n}\n"],"names":[],"mappings":";;;;;;EAEA,SAAA,cAAA,CAAA,OAAA,EAAA;EACA,EAAA,IAAA,CAAA,EAAA,GAAA;EACA,EAAA,MAAA,GAAA,GAAA,CAAA,CAAA,IAAA,CAAA,EAAA;;EAEA,EAAA,IAAA,GAAA,CAAA,IAAA,CAAA,iCAAA,CAAA,EAAA;EACA,IAAA;EACA;;EAEA,EAAA,GAAA,CAAA,IAAA,CAAA,iCAAA,EAAA,IAAA;EACA,EAAA,GAAA,CAAA,IAAA,CAAA,YAAA,EAAA,OAAA;;EAEA,EAAA,GAAA,CAAA,IAAA,CAAA,yCAAA;EACA,EAAA,IAAA,CAAA,SAAA,GAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,CAAA,MAAA;EACA,EAAA,IAAA,CAAA,YAAA;EACA;;EAEA,cAAA,CAAA,SAAA,CAAA,YAAA,GAAA,YAAA;EACA,EAAA,IAAA,CAAA,MAAA,GAAA,CAAA;EACA,IAAA;EACA;EACA,EAAA,IAAA,CAAA,SAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA;EACA,EAAA,IAAA,CAAA,MAAA,CAAA,EAAA,CAAA,OAAA,EAAA,CAAA,CAAA,KAAA,CAAA,IAAA,EAAA,eAAA,CAAA;EACA;;EAEA,cAAA,CAAA,SAAA,CAAA,aAAA,GAAA,YAAA;EACA,EAAA,IAAA,IAAA,CAAA,EAAA,CAAA,IAAA,KAAA,UAAA,EAAA;EACA,IAAA,IAAA,CAAA,EAAA,CAAA,IAAA,GAAA;EACA,IAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,0DAAA;EACA,GAAA,MAAA;EACA,IAAA,IAAA,CAAA,EAAA,CAAA,IAAA,GAAA;EACA,IAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,0DAAA;EACA;EACA;;;;;;;;"}
@@ -1,166 +0,0 @@
1
- (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
3
- typeof define === 'function' && define.amd ? define(['exports'], factory) :
4
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.MOJFrontend = global.MOJFrontend || {}));
5
- })(this, (function (exports) { 'use strict';
6
-
7
- function RichTextEditor(options) {
8
- if (!('contentEditable' in document.documentElement)) {
9
- return
10
- }
11
-
12
- this.options = options;
13
- this.options.toolbar = this.options.toolbar || {
14
- bold: false,
15
- italic: false,
16
- underline: false,
17
- bullets: true,
18
- numbers: true
19
- };
20
- this.textarea = this.options.textarea;
21
- this.container = $(this.textarea).parent();
22
-
23
- if (this.container.data('moj-rich-text-editor-initialised')) {
24
- return
25
- }
26
-
27
- this.container.data('moj-rich-text-editor-initialised', true);
28
-
29
- this.createToolbar();
30
- this.hideDefault();
31
- this.configureToolbar();
32
- this.keys = {
33
- left: 37,
34
- right: 39,
35
- up: 38,
36
- down: 40
37
- };
38
- this.container.on(
39
- 'click',
40
- '.moj-rich-text-editor__toolbar-button',
41
- $.proxy(this, 'onButtonClick')
42
- );
43
- this.container
44
- .find('.moj-rich-text-editor__content')
45
- .on('input', $.proxy(this, 'onEditorInput'));
46
- this.container.find('label').on('click', $.proxy(this, 'onLabelClick'));
47
- this.toolbar.on('keydown', $.proxy(this, 'onToolbarKeydown'));
48
- }
49
-
50
- RichTextEditor.prototype.onToolbarKeydown = function (e) {
51
- let focusableButton;
52
- switch (e.keyCode) {
53
- case this.keys.right:
54
- case this.keys.down: {
55
- focusableButton = this.toolbar.find('button[tabindex=0]');
56
- const nextButton = focusableButton.next('button');
57
- if (nextButton[0]) {
58
- nextButton.focus();
59
- focusableButton.attr('tabindex', '-1');
60
- nextButton.attr('tabindex', '0');
61
- }
62
- break
63
- }
64
- case this.keys.left:
65
- case this.keys.up: {
66
- focusableButton = this.toolbar.find('button[tabindex=0]');
67
- const previousButton = focusableButton.prev('button');
68
- if (previousButton[0]) {
69
- previousButton.focus();
70
- focusableButton.attr('tabindex', '-1');
71
- previousButton.attr('tabindex', '0');
72
- }
73
- break
74
- }
75
- }
76
- };
77
-
78
- RichTextEditor.prototype.getToolbarHtml = function () {
79
- let html = '';
80
-
81
- html += '<div class="moj-rich-text-editor__toolbar" role="toolbar">';
82
-
83
- if (this.options.toolbar.bold) {
84
- html +=
85
- '<button class="moj-rich-text-editor__toolbar-button moj-rich-text-editor__toolbar-button--bold" type="button" data-command="bold"><span class="govuk-visually-hidden">Bold</span></button>';
86
- }
87
-
88
- if (this.options.toolbar.italic) {
89
- html +=
90
- '<button class="moj-rich-text-editor__toolbar-button moj-rich-text-editor__toolbar-button--italic" type="button" data-command="italic"><span class="govuk-visually-hidden">Italic</span></button>';
91
- }
92
-
93
- if (this.options.toolbar.underline) {
94
- html +=
95
- '<button class="moj-rich-text-editor__toolbar-button moj-rich-text-editor__toolbar-button--underline" type="button" data-command="underline"><span class="govuk-visually-hidden">Underline</span></button>';
96
- }
97
-
98
- if (this.options.toolbar.bullets) {
99
- html +=
100
- '<button class="moj-rich-text-editor__toolbar-button moj-rich-text-editor__toolbar-button--unordered-list" type="button" data-command="insertUnorderedList"><span class="govuk-visually-hidden">Unordered list</span></button>';
101
- }
102
-
103
- if (this.options.toolbar.numbers) {
104
- html +=
105
- '<button class="moj-rich-text-editor__toolbar-button moj-rich-text-editor__toolbar-button--ordered-list" type="button" data-command="insertOrderedList"><span class="govuk-visually-hidden">Ordered list</span></button>';
106
- }
107
-
108
- html += '</div>';
109
- return html
110
- };
111
-
112
- RichTextEditor.prototype.getEnhancedHtml = function (val) {
113
- return `${this.getToolbarHtml()}<div class="govuk-textarea moj-rich-text-editor__content" contenteditable="true" spellcheck="false"></div>`
114
- };
115
-
116
- RichTextEditor.prototype.hideDefault = function () {
117
- this.textarea = this.container.find('textarea');
118
- this.textarea.addClass('govuk-visually-hidden');
119
- this.textarea.attr('aria-hidden', true);
120
- this.textarea.attr('tabindex', '-1');
121
- };
122
-
123
- RichTextEditor.prototype.createToolbar = function () {
124
- this.toolbar = document.createElement('div');
125
- this.toolbar.className = 'moj-rich-text-editor';
126
- this.toolbar.innerHTML = this.getEnhancedHtml();
127
- this.container.append(this.toolbar);
128
- this.toolbar = this.container.find('.moj-rich-text-editor__toolbar');
129
- this.container
130
- .find('.moj-rich-text-editor__content')
131
- .html(this.textarea.val());
132
- };
133
-
134
- RichTextEditor.prototype.configureToolbar = function () {
135
- this.buttons = this.container.find('.moj-rich-text-editor__toolbar-button');
136
- this.buttons.prop('tabindex', '-1');
137
- const firstTab = this.buttons.first();
138
- firstTab.prop('tabindex', '0');
139
- };
140
-
141
- RichTextEditor.prototype.onButtonClick = function (e) {
142
- document.execCommand($(e.currentTarget).data('command'), false, null);
143
- };
144
-
145
- RichTextEditor.prototype.getContent = function () {
146
- return this.container.find('.moj-rich-text-editor__content').html()
147
- };
148
-
149
- RichTextEditor.prototype.onEditorInput = function (e) {
150
- this.updateTextarea();
151
- };
152
-
153
- RichTextEditor.prototype.updateTextarea = function () {
154
- document.execCommand('defaultParagraphSeparator', false, 'p');
155
- this.textarea.val(this.getContent());
156
- };
157
-
158
- RichTextEditor.prototype.onLabelClick = function (e) {
159
- e.preventDefault();
160
- this.container.find('.moj-rich-text-editor__content').focus();
161
- };
162
-
163
- exports.RichTextEditor = RichTextEditor;
164
-
165
- }));
166
- //# sourceMappingURL=rich-text-editor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rich-text-editor.js","sources":["../../../../src/moj/components/rich-text-editor/rich-text-editor.mjs"],"sourcesContent":["import $ from 'jquery'\n\nexport function RichTextEditor(options) {\n if (!('contentEditable' in document.documentElement)) {\n return\n }\n\n this.options = options\n this.options.toolbar = this.options.toolbar || {\n bold: false,\n italic: false,\n underline: false,\n bullets: true,\n numbers: true\n }\n this.textarea = this.options.textarea\n this.container = $(this.textarea).parent()\n\n if (this.container.data('moj-rich-text-editor-initialised')) {\n return\n }\n\n this.container.data('moj-rich-text-editor-initialised', true)\n\n this.createToolbar()\n this.hideDefault()\n this.configureToolbar()\n this.keys = {\n left: 37,\n right: 39,\n up: 38,\n down: 40\n }\n this.container.on(\n 'click',\n '.moj-rich-text-editor__toolbar-button',\n $.proxy(this, 'onButtonClick')\n )\n this.container\n .find('.moj-rich-text-editor__content')\n .on('input', $.proxy(this, 'onEditorInput'))\n this.container.find('label').on('click', $.proxy(this, 'onLabelClick'))\n this.toolbar.on('keydown', $.proxy(this, 'onToolbarKeydown'))\n}\n\nRichTextEditor.prototype.onToolbarKeydown = function (e) {\n let focusableButton\n switch (e.keyCode) {\n case this.keys.right:\n case this.keys.down: {\n focusableButton = this.toolbar.find('button[tabindex=0]')\n const nextButton = focusableButton.next('button')\n if (nextButton[0]) {\n nextButton.focus()\n focusableButton.attr('tabindex', '-1')\n nextButton.attr('tabindex', '0')\n }\n break\n }\n case this.keys.left:\n case this.keys.up: {\n focusableButton = this.toolbar.find('button[tabindex=0]')\n const previousButton = focusableButton.prev('button')\n if (previousButton[0]) {\n previousButton.focus()\n focusableButton.attr('tabindex', '-1')\n previousButton.attr('tabindex', '0')\n }\n break\n }\n }\n}\n\nRichTextEditor.prototype.getToolbarHtml = function () {\n let html = ''\n\n html += '<div class=\"moj-rich-text-editor__toolbar\" role=\"toolbar\">'\n\n if (this.options.toolbar.bold) {\n html +=\n '<button class=\"moj-rich-text-editor__toolbar-button moj-rich-text-editor__toolbar-button--bold\" type=\"button\" data-command=\"bold\"><span class=\"govuk-visually-hidden\">Bold</span></button>'\n }\n\n if (this.options.toolbar.italic) {\n html +=\n '<button class=\"moj-rich-text-editor__toolbar-button moj-rich-text-editor__toolbar-button--italic\" type=\"button\" data-command=\"italic\"><span class=\"govuk-visually-hidden\">Italic</span></button>'\n }\n\n if (this.options.toolbar.underline) {\n html +=\n '<button class=\"moj-rich-text-editor__toolbar-button moj-rich-text-editor__toolbar-button--underline\" type=\"button\" data-command=\"underline\"><span class=\"govuk-visually-hidden\">Underline</span></button>'\n }\n\n if (this.options.toolbar.bullets) {\n html +=\n '<button class=\"moj-rich-text-editor__toolbar-button moj-rich-text-editor__toolbar-button--unordered-list\" type=\"button\" data-command=\"insertUnorderedList\"><span class=\"govuk-visually-hidden\">Unordered list</span></button>'\n }\n\n if (this.options.toolbar.numbers) {\n html +=\n '<button class=\"moj-rich-text-editor__toolbar-button moj-rich-text-editor__toolbar-button--ordered-list\" type=\"button\" data-command=\"insertOrderedList\"><span class=\"govuk-visually-hidden\">Ordered list</span></button>'\n }\n\n html += '</div>'\n return html\n}\n\nRichTextEditor.prototype.getEnhancedHtml = function (val) {\n return `${this.getToolbarHtml()}<div class=\"govuk-textarea moj-rich-text-editor__content\" contenteditable=\"true\" spellcheck=\"false\"></div>`\n}\n\nRichTextEditor.prototype.hideDefault = function () {\n this.textarea = this.container.find('textarea')\n this.textarea.addClass('govuk-visually-hidden')\n this.textarea.attr('aria-hidden', true)\n this.textarea.attr('tabindex', '-1')\n}\n\nRichTextEditor.prototype.createToolbar = function () {\n this.toolbar = document.createElement('div')\n this.toolbar.className = 'moj-rich-text-editor'\n this.toolbar.innerHTML = this.getEnhancedHtml()\n this.container.append(this.toolbar)\n this.toolbar = this.container.find('.moj-rich-text-editor__toolbar')\n this.container\n .find('.moj-rich-text-editor__content')\n .html(this.textarea.val())\n}\n\nRichTextEditor.prototype.configureToolbar = function () {\n this.buttons = this.container.find('.moj-rich-text-editor__toolbar-button')\n this.buttons.prop('tabindex', '-1')\n const firstTab = this.buttons.first()\n firstTab.prop('tabindex', '0')\n}\n\nRichTextEditor.prototype.onButtonClick = function (e) {\n document.execCommand($(e.currentTarget).data('command'), false, null)\n}\n\nRichTextEditor.prototype.getContent = function () {\n return this.container.find('.moj-rich-text-editor__content').html()\n}\n\nRichTextEditor.prototype.onEditorInput = function (e) {\n this.updateTextarea()\n}\n\nRichTextEditor.prototype.updateTextarea = function () {\n document.execCommand('defaultParagraphSeparator', false, 'p')\n this.textarea.val(this.getContent())\n}\n\nRichTextEditor.prototype.onLabelClick = function (e) {\n e.preventDefault()\n this.container.find('.moj-rich-text-editor__content').focus()\n}\n"],"names":[],"mappings":"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"}
@@ -1,63 +0,0 @@
1
- (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
3
- typeof define === 'function' && define.amd ? define(['exports'], factory) :
4
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.MOJFrontend = global.MOJFrontend || {}));
5
- })(this, (function (exports) { 'use strict';
6
-
7
- function SearchToggle(options) {
8
- this.options = options;
9
- this.container = $(this.options.search.container);
10
- this.toggleButtonContainer = $(this.options.toggleButton.container);
11
-
12
- if (this.container.data('moj-search-toggle-initialised')) {
13
- return
14
- }
15
-
16
- this.container.data('moj-search-toggle-initialised', true);
17
-
18
- const svg =
19
- '<svg viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="moj-search-toggle__button__icon"><path d="M7.433,12.5790048 C6.06762625,12.5808611 4.75763941,12.0392925 3.79217348,11.0738265 C2.82670755,10.1083606 2.28513891,8.79837375 2.28699522,7.433 C2.28513891,6.06762625 2.82670755,4.75763941 3.79217348,3.79217348 C4.75763941,2.82670755 6.06762625,2.28513891 7.433,2.28699522 C8.79837375,2.28513891 10.1083606,2.82670755 11.0738265,3.79217348 C12.0392925,4.75763941 12.5808611,6.06762625 12.5790048,7.433 C12.5808611,8.79837375 12.0392925,10.1083606 11.0738265,11.0738265 C10.1083606,12.0392925 8.79837375,12.5808611 7.433,12.5790048 L7.433,12.5790048 Z M14.293,12.579 L13.391,12.579 L13.071,12.269 C14.2300759,10.9245158 14.8671539,9.20813198 14.866,7.433 C14.866,3.32786745 11.5381325,-1.65045755e-15 7.433,-1.65045755e-15 C3.32786745,-1.65045755e-15 -1.65045755e-15,3.32786745 -1.65045755e-15,7.433 C-1.65045755e-15,11.5381325 3.32786745,14.866 7.433,14.866 C9.208604,14.8671159 10.9253982,14.2296624 12.27,13.07 L12.579,13.39 L12.579,14.294 L18.296,20 L20,18.296 L14.294,12.579 L14.293,12.579 Z"></path></svg>';
20
-
21
- this.toggleButton = $(
22
- `<button class="moj-search-toggle__button" type="button" aria-haspopup="true" aria-expanded="false">
23
- ${this.options.toggleButton.text} ${svg}
24
- </button>`
25
- );
26
- this.toggleButton.on('click', $.proxy(this, 'onToggleButtonClick'));
27
- this.toggleButtonContainer.append(this.toggleButton);
28
- $(document).on('click', this.onDocumentClick.bind(this));
29
- $(document).on('focusin', this.onDocumentClick.bind(this));
30
- }
31
-
32
- SearchToggle.prototype.showMenu = function () {
33
- this.toggleButton.attr('aria-expanded', 'true');
34
- this.container.removeClass('moj-js-hidden');
35
- this.container.find('input').first().get(0).focus();
36
- };
37
-
38
- SearchToggle.prototype.hideMenu = function () {
39
- this.container.addClass('moj-js-hidden');
40
- this.toggleButton.attr('aria-expanded', 'false');
41
- };
42
-
43
- SearchToggle.prototype.onToggleButtonClick = function () {
44
- if (this.toggleButton.attr('aria-expanded') === 'false') {
45
- this.showMenu();
46
- } else {
47
- this.hideMenu();
48
- }
49
- };
50
-
51
- SearchToggle.prototype.onDocumentClick = function (e) {
52
- if (
53
- !$.contains(this.toggleButtonContainer[0], e.target) &&
54
- !$.contains(this.container[0], e.target)
55
- ) {
56
- this.hideMenu();
57
- }
58
- };
59
-
60
- exports.SearchToggle = SearchToggle;
61
-
62
- }));
63
- //# sourceMappingURL=search-toggle.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"search-toggle.js","sources":["../../../../src/moj/components/search-toggle/search-toggle.mjs"],"sourcesContent":["import $ from 'jquery'\n\nexport function SearchToggle(options) {\n this.options = options\n this.container = $(this.options.search.container)\n this.toggleButtonContainer = $(this.options.toggleButton.container)\n\n if (this.container.data('moj-search-toggle-initialised')) {\n return\n }\n\n this.container.data('moj-search-toggle-initialised', true)\n\n const svg =\n '<svg viewBox=\"0 0 20 20\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" class=\"moj-search-toggle__button__icon\"><path d=\"M7.433,12.5790048 C6.06762625,12.5808611 4.75763941,12.0392925 3.79217348,11.0738265 C2.82670755,10.1083606 2.28513891,8.79837375 2.28699522,7.433 C2.28513891,6.06762625 2.82670755,4.75763941 3.79217348,3.79217348 C4.75763941,2.82670755 6.06762625,2.28513891 7.433,2.28699522 C8.79837375,2.28513891 10.1083606,2.82670755 11.0738265,3.79217348 C12.0392925,4.75763941 12.5808611,6.06762625 12.5790048,7.433 C12.5808611,8.79837375 12.0392925,10.1083606 11.0738265,11.0738265 C10.1083606,12.0392925 8.79837375,12.5808611 7.433,12.5790048 L7.433,12.5790048 Z M14.293,12.579 L13.391,12.579 L13.071,12.269 C14.2300759,10.9245158 14.8671539,9.20813198 14.866,7.433 C14.866,3.32786745 11.5381325,-1.65045755e-15 7.433,-1.65045755e-15 C3.32786745,-1.65045755e-15 -1.65045755e-15,3.32786745 -1.65045755e-15,7.433 C-1.65045755e-15,11.5381325 3.32786745,14.866 7.433,14.866 C9.208604,14.8671159 10.9253982,14.2296624 12.27,13.07 L12.579,13.39 L12.579,14.294 L18.296,20 L20,18.296 L14.294,12.579 L14.293,12.579 Z\"></path></svg>'\n\n this.toggleButton = $(\n `<button class=\"moj-search-toggle__button\" type=\"button\" aria-haspopup=\"true\" aria-expanded=\"false\">\n ${this.options.toggleButton.text} ${svg}\n </button>`\n )\n this.toggleButton.on('click', $.proxy(this, 'onToggleButtonClick'))\n this.toggleButtonContainer.append(this.toggleButton)\n $(document).on('click', this.onDocumentClick.bind(this))\n $(document).on('focusin', this.onDocumentClick.bind(this))\n}\n\nSearchToggle.prototype.showMenu = function () {\n this.toggleButton.attr('aria-expanded', 'true')\n this.container.removeClass('moj-js-hidden')\n this.container.find('input').first().get(0).focus()\n}\n\nSearchToggle.prototype.hideMenu = function () {\n this.container.addClass('moj-js-hidden')\n this.toggleButton.attr('aria-expanded', 'false')\n}\n\nSearchToggle.prototype.onToggleButtonClick = function () {\n if (this.toggleButton.attr('aria-expanded') === 'false') {\n this.showMenu()\n } else {\n this.hideMenu()\n }\n}\n\nSearchToggle.prototype.onDocumentClick = function (e) {\n if (\n !$.contains(this.toggleButtonContainer[0], e.target) &&\n !$.contains(this.container[0], e.target)\n ) {\n this.hideMenu()\n }\n}\n"],"names":[],"mappings":";;;;;;EAEA,SAAA,YAAA,CAAA,OAAA,EAAA;EACA,EAAA,IAAA,CAAA,OAAA,GAAA;EACA,EAAA,IAAA,CAAA,SAAA,GAAA,CAAA,CAAA,IAAA,CAAA,OAAA,CAAA,MAAA,CAAA,SAAA;EACA,EAAA,IAAA,CAAA,qBAAA,GAAA,CAAA,CAAA,IAAA,CAAA,OAAA,CAAA,YAAA,CAAA,SAAA;;EAEA,EAAA,IAAA,IAAA,CAAA,SAAA,CAAA,IAAA,CAAA,+BAAA,CAAA,EAAA;EACA,IAAA;EACA;;EAEA,EAAA,IAAA,CAAA,SAAA,CAAA,IAAA,CAAA,+BAAA,EAAA,IAAA;;EAEA,EAAA,MAAA,GAAA;EACA,IAAA;;EAEA,EAAA,IAAA,CAAA,YAAA,GAAA,CAAA;EACA,IAAA,CAAA;AACA,MAAA,EAAA,IAAA,CAAA,OAAA,CAAA,YAAA,CAAA,IAAA,CAAA,CAAA,EAAA,GAAA;AACA,aAAA;EACA;EACA,EAAA,IAAA,CAAA,YAAA,CAAA,EAAA,CAAA,OAAA,EAAA,CAAA,CAAA,KAAA,CAAA,IAAA,EAAA,qBAAA,CAAA;EACA,EAAA,IAAA,CAAA,qBAAA,CAAA,MAAA,CAAA,IAAA,CAAA,YAAA;EACA,EAAA,CAAA,CAAA,QAAA,CAAA,CAAA,EAAA,CAAA,OAAA,EAAA,IAAA,CAAA,eAAA,CAAA,IAAA,CAAA,IAAA,CAAA;EACA,EAAA,CAAA,CAAA,QAAA,CAAA,CAAA,EAAA,CAAA,SAAA,EAAA,IAAA,CAAA,eAAA,CAAA,IAAA,CAAA,IAAA,CAAA;EACA;;EAEA,YAAA,CAAA,SAAA,CAAA,QAAA,GAAA,YAAA;EACA,EAAA,IAAA,CAAA,YAAA,CAAA,IAAA,CAAA,eAAA,EAAA,MAAA;EACA,EAAA,IAAA,CAAA,SAAA,CAAA,WAAA,CAAA,eAAA;EACA,EAAA,IAAA,CAAA,SAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CAAA,KAAA,EAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,KAAA;EACA;;EAEA,YAAA,CAAA,SAAA,CAAA,QAAA,GAAA,YAAA;EACA,EAAA,IAAA,CAAA,SAAA,CAAA,QAAA,CAAA,eAAA;EACA,EAAA,IAAA,CAAA,YAAA,CAAA,IAAA,CAAA,eAAA,EAAA,OAAA;EACA;;EAEA,YAAA,CAAA,SAAA,CAAA,mBAAA,GAAA,YAAA;EACA,EAAA,IAAA,IAAA,CAAA,YAAA,CAAA,IAAA,CAAA,eAAA,CAAA,KAAA,OAAA,EAAA;EACA,IAAA,IAAA,CAAA,QAAA;EACA,GAAA,MAAA;EACA,IAAA,IAAA,CAAA,QAAA;EACA;EACA;;EAEA,YAAA,CAAA,SAAA,CAAA,eAAA,GAAA,UAAA,CAAA,EAAA;EACA,EAAA;EACA,IAAA,CAAA,CAAA,CAAA,QAAA,CAAA,IAAA,CAAA,qBAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,MAAA,CAAA;EACA,IAAA,CAAA,CAAA,CAAA,QAAA,CAAA,IAAA,CAAA,SAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,MAAA;EACA,IAAA;EACA,IAAA,IAAA,CAAA,QAAA;EACA;EACA;;;;;;;;"}
@@ -1,147 +0,0 @@
1
- (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
3
- typeof define === 'function' && define.amd ? define(['exports'], factory) :
4
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.MOJFrontend = global.MOJFrontend || {}));
5
- })(this, (function (exports) { 'use strict';
6
-
7
- function SortableTable(params) {
8
- this.table = $(params.table);
9
-
10
- if (this.table.data('moj-search-toggle-initialised')) {
11
- return
12
- }
13
-
14
- this.table.data('moj-search-toggle-initialised', true);
15
-
16
- this.setupOptions(params);
17
- this.body = this.table.find('tbody');
18
- this.createHeadingButtons();
19
- this.createStatusBox();
20
- this.initialiseSortedColumn();
21
- this.table.on('click', 'th button', $.proxy(this, 'onSortButtonClick'));
22
- }
23
-
24
- SortableTable.prototype.setupOptions = function (params) {
25
- params = params || {};
26
- this.statusMessage = params.statusMessage || 'Sort by %heading% (%direction%)';
27
- this.ascendingText = params.ascendingText || 'ascending';
28
- this.descendingText = params.descendingText || 'descending';
29
- };
30
-
31
- SortableTable.prototype.createHeadingButtons = function () {
32
- const headings = this.table.find('thead th');
33
- let heading;
34
- for (let i = 0; i < headings.length; i++) {
35
- heading = $(headings[i]);
36
- if (heading.attr('aria-sort')) {
37
- this.createHeadingButton(heading, i);
38
- }
39
- }
40
- };
41
-
42
- SortableTable.prototype.createHeadingButton = function (heading, i) {
43
- const text = heading.text();
44
- const button = $(`<button type="button" data-index="${i}">${text}</button>`);
45
- heading.text('');
46
- heading.append(button);
47
- };
48
-
49
- SortableTable.prototype.createStatusBox = function () {
50
- this.status = $(
51
- '<div aria-live="polite" role="status" aria-atomic="true" class="govuk-visually-hidden" />'
52
- );
53
- this.table.parent().append(this.status);
54
- };
55
-
56
- SortableTable.prototype.initialiseSortedColumn = function () {
57
- const rows = this.getTableRowsArray();
58
-
59
- this.table
60
- .find('th')
61
- .filter('[aria-sort="ascending"], [aria-sort="descending"]')
62
- .first()
63
- .each((index, el) => {
64
- const sortDirection = $(el).attr('aria-sort');
65
- const columnNumber = $(el).find('button').attr('data-index');
66
- const sortedRows = this.sort(rows, columnNumber, sortDirection);
67
- this.addRows(sortedRows);
68
- });
69
- };
70
-
71
- SortableTable.prototype.onSortButtonClick = function (e) {
72
- const columnNumber = e.currentTarget.getAttribute('data-index');
73
- const sortDirection = $(e.currentTarget).parent().attr('aria-sort');
74
- let newSortDirection;
75
- if (sortDirection === 'none' || sortDirection === 'descending') {
76
- newSortDirection = 'ascending';
77
- } else {
78
- newSortDirection = 'descending';
79
- }
80
- const rows = this.getTableRowsArray();
81
- const sortedRows = this.sort(rows, columnNumber, newSortDirection);
82
- this.addRows(sortedRows);
83
- this.removeButtonStates();
84
- this.updateButtonState($(e.currentTarget), newSortDirection);
85
- };
86
-
87
- SortableTable.prototype.updateButtonState = function (button, direction) {
88
- button.parent().attr('aria-sort', direction);
89
- let message = this.statusMessage;
90
- message = message.replace(/%heading%/, button.text());
91
- message = message.replace(/%direction%/, this[`${direction}Text`]);
92
- this.status.text(message);
93
- };
94
-
95
- SortableTable.prototype.removeButtonStates = function () {
96
- this.table.find('thead th').attr('aria-sort', 'none');
97
- };
98
-
99
- SortableTable.prototype.addRows = function (rows) {
100
- for (let i = 0; i < rows.length; i++) {
101
- this.body.append(rows[i]);
102
- }
103
- };
104
-
105
- SortableTable.prototype.getTableRowsArray = function () {
106
- const rows = [];
107
- const trs = this.body.find('tr');
108
- for (let i = 0; i < trs.length; i++) {
109
- rows.push(trs[i]);
110
- }
111
- return rows
112
- };
113
-
114
- SortableTable.prototype.sort = function (rows, columnNumber, sortDirection) {
115
- const newRows = rows.sort(
116
- function (rowA, rowB) {
117
- const tdA = $(rowA).find('td,th').eq(columnNumber);
118
- const tdB = $(rowB).find('td,th').eq(columnNumber);
119
-
120
- const valueA =
121
- sortDirection === 'ascending'
122
- ? this.getCellValue(tdA)
123
- : this.getCellValue(tdB);
124
- const valueB =
125
- sortDirection === 'ascending'
126
- ? this.getCellValue(tdB)
127
- : this.getCellValue(tdA);
128
-
129
- if (typeof valueA === 'string' || typeof valueB === 'string')
130
- return valueA.toString().localeCompare(valueB.toString())
131
- return valueA - valueB
132
- }.bind(this)
133
- );
134
- return newRows
135
- };
136
-
137
- SortableTable.prototype.getCellValue = function (cell) {
138
- const val = cell.attr('data-sort-value') || cell.html();
139
-
140
- const valAsNumber = Number(val);
141
- return isNaN(valAsNumber) ? val : valAsNumber
142
- };
143
-
144
- exports.SortableTable = SortableTable;
145
-
146
- }));
147
- //# sourceMappingURL=sortable-table.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sortable-table.js","sources":["../../../../src/moj/components/sortable-table/sortable-table.mjs"],"sourcesContent":["import $ from 'jquery'\n\nexport function SortableTable(params) {\n this.table = $(params.table)\n\n if (this.table.data('moj-search-toggle-initialised')) {\n return\n }\n\n this.table.data('moj-search-toggle-initialised', true)\n\n this.setupOptions(params)\n this.body = this.table.find('tbody')\n this.createHeadingButtons()\n this.createStatusBox()\n this.initialiseSortedColumn()\n this.table.on('click', 'th button', $.proxy(this, 'onSortButtonClick'))\n}\n\nSortableTable.prototype.setupOptions = function (params) {\n params = params || {}\n this.statusMessage = params.statusMessage || 'Sort by %heading% (%direction%)'\n this.ascendingText = params.ascendingText || 'ascending'\n this.descendingText = params.descendingText || 'descending'\n}\n\nSortableTable.prototype.createHeadingButtons = function () {\n const headings = this.table.find('thead th')\n let heading\n for (let i = 0; i < headings.length; i++) {\n heading = $(headings[i])\n if (heading.attr('aria-sort')) {\n this.createHeadingButton(heading, i)\n }\n }\n}\n\nSortableTable.prototype.createHeadingButton = function (heading, i) {\n const text = heading.text()\n const button = $(`<button type=\"button\" data-index=\"${i}\">${text}</button>`)\n heading.text('')\n heading.append(button)\n}\n\nSortableTable.prototype.createStatusBox = function () {\n this.status = $(\n '<div aria-live=\"polite\" role=\"status\" aria-atomic=\"true\" class=\"govuk-visually-hidden\" />'\n )\n this.table.parent().append(this.status)\n}\n\nSortableTable.prototype.initialiseSortedColumn = function () {\n const rows = this.getTableRowsArray()\n\n this.table\n .find('th')\n .filter('[aria-sort=\"ascending\"], [aria-sort=\"descending\"]')\n .first()\n .each((index, el) => {\n const sortDirection = $(el).attr('aria-sort')\n const columnNumber = $(el).find('button').attr('data-index')\n const sortedRows = this.sort(rows, columnNumber, sortDirection)\n this.addRows(sortedRows)\n })\n}\n\nSortableTable.prototype.onSortButtonClick = function (e) {\n const columnNumber = e.currentTarget.getAttribute('data-index')\n const sortDirection = $(e.currentTarget).parent().attr('aria-sort')\n let newSortDirection\n if (sortDirection === 'none' || sortDirection === 'descending') {\n newSortDirection = 'ascending'\n } else {\n newSortDirection = 'descending'\n }\n const rows = this.getTableRowsArray()\n const sortedRows = this.sort(rows, columnNumber, newSortDirection)\n this.addRows(sortedRows)\n this.removeButtonStates()\n this.updateButtonState($(e.currentTarget), newSortDirection)\n}\n\nSortableTable.prototype.updateButtonState = function (button, direction) {\n button.parent().attr('aria-sort', direction)\n let message = this.statusMessage\n message = message.replace(/%heading%/, button.text())\n message = message.replace(/%direction%/, this[`${direction}Text`])\n this.status.text(message)\n}\n\nSortableTable.prototype.removeButtonStates = function () {\n this.table.find('thead th').attr('aria-sort', 'none')\n}\n\nSortableTable.prototype.addRows = function (rows) {\n for (let i = 0; i < rows.length; i++) {\n this.body.append(rows[i])\n }\n}\n\nSortableTable.prototype.getTableRowsArray = function () {\n const rows = []\n const trs = this.body.find('tr')\n for (let i = 0; i < trs.length; i++) {\n rows.push(trs[i])\n }\n return rows\n}\n\nSortableTable.prototype.sort = function (rows, columnNumber, sortDirection) {\n const newRows = rows.sort(\n function (rowA, rowB) {\n const tdA = $(rowA).find('td,th').eq(columnNumber)\n const tdB = $(rowB).find('td,th').eq(columnNumber)\n\n const valueA =\n sortDirection === 'ascending'\n ? this.getCellValue(tdA)\n : this.getCellValue(tdB)\n const valueB =\n sortDirection === 'ascending'\n ? this.getCellValue(tdB)\n : this.getCellValue(tdA)\n\n if (typeof valueA === 'string' || typeof valueB === 'string')\n return valueA.toString().localeCompare(valueB.toString())\n return valueA - valueB\n }.bind(this)\n )\n return newRows\n}\n\nSortableTable.prototype.getCellValue = function (cell) {\n const val = cell.attr('data-sort-value') || cell.html()\n\n const valAsNumber = Number(val)\n return isNaN(valAsNumber) ? val : valAsNumber\n}\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"helpers.js","sources":["../../src/moj/helpers.mjs"],"sourcesContent":["export function removeAttributeValue(el, attr, value) {\n let re, m\n if (el.getAttribute(attr)) {\n if (el.getAttribute(attr) === value) {\n el.removeAttribute(attr)\n } else {\n re = new RegExp(`(^|\\\\s)${value}(\\\\s|$)`)\n m = el.getAttribute(attr).match(re)\n if (m && m.length === 3) {\n el.setAttribute(\n attr,\n el.getAttribute(attr).replace(re, m[1] && m[2] ? ' ' : '')\n )\n }\n }\n }\n}\n\nexport function addAttributeValue(el, attr, value) {\n let re\n if (!el.getAttribute(attr)) {\n el.setAttribute(attr, value)\n } else {\n re = new RegExp(`(^|\\\\s)${value}(\\\\s|$)`)\n if (!re.test(el.getAttribute(attr))) {\n el.setAttribute(attr, `${el.getAttribute(attr)} ${value}`)\n }\n }\n}\n\nexport function dragAndDropSupported() {\n const div = document.createElement('div')\n return typeof div.ondrop !== 'undefined'\n}\n\nexport function formDataSupported() {\n return typeof FormData === 'function'\n}\n\nexport function fileApiSupported() {\n const input = document.createElement('input')\n input.type = 'file'\n return typeof input.files !== 'undefined'\n}\n\nexport function nodeListForEach(nodes, callback) {\n if (window.NodeList.prototype.forEach) {\n return nodes.forEach(callback)\n }\n for (let i = 0; i < nodes.length; i++) {\n callback.call(window, nodes[i], i, nodes)\n }\n}\n\n/**\n * Find an elements next sibling\n *\n * Utility function to find an elements next sibling matching the provided\n * selector.\n *\n * @param {HTMLElement} $element - Element to find siblings for\n * @param {string} selector - selector for required sibling\n */\nexport function getNextSibling($element, selector) {\n if (!$element) return\n // Get the next sibling element\n let $sibling = $element.nextElementSibling\n\n // If there's no selector, return the first sibling\n if (!selector) return $sibling\n\n // If the sibling matches our selector, use it\n // If not, jump to the next sibling and continue the loop\n while ($sibling) {\n if ($sibling.matches(selector)) return $sibling\n $sibling = $sibling.nextElementSibling\n }\n}\n\n/**\n * Find an elements preceding sibling\n *\n * Utility function to find an elements previous sibling matching the provided\n * selector.\n *\n * @param {HTMLElement} $element - Element to find siblings for\n * @param {string} selector - selector for required sibling\n */\nexport function getPreviousSibling($element, selector) {\n if (!$element) return\n // Get the previous sibling element\n let $sibling = $element.previousElementSibling\n\n // If there's no selector, return the first sibling\n if (!selector) return $sibling\n\n // If the sibling matches our selector, use it\n // If not, jump to the next sibling and continue the loop\n while ($sibling) {\n if ($sibling.matches(selector)) return $sibling\n $sibling = $sibling.previousElementSibling\n }\n}\n\nexport function findNearestMatchingElement($element, selector) {\n // If no element or selector is provided, return null\n if (!$element) return\n if (!selector) return\n\n // Start with the current element\n let $currentElement = $element\n\n while ($currentElement) {\n // First check the current element\n if ($currentElement.matches(selector)) {\n return $currentElement\n }\n\n // Check all previous siblings\n let $sibling = $currentElement.previousElementSibling\n while ($sibling) {\n // Check if the sibling itself is a heading\n if ($sibling.matches(selector)) {\n return $sibling\n }\n $sibling = $sibling.previousElementSibling\n }\n\n // If no match found in siblings, move up to parent\n $currentElement = $currentElement.parentElement\n }\n}\n\n/**\n * Move focus to element\n *\n * Sets tabindex to -1 to make the element programmatically focusable,\n * but removes it on blur as the element doesn't need to be focused again.\n *\n * @param {HTMLElement} $element - HTML element\n * @param {object} [options] - Handler options\n * @param {function(this: HTMLElement): void} [options.onBeforeFocus] - Callback before focus\n * @param {function(this: HTMLElement): void} [options.onBlur] - Callback on blur\n */\nexport function setFocus($element, options = {}) {\n const isFocusable = $element.getAttribute('tabindex')\n\n if (!isFocusable) {\n $element.setAttribute('tabindex', '-1')\n }\n\n /**\n * Handle element focus\n */\n function onFocus() {\n $element.addEventListener('blur', onBlur, { once: true })\n }\n\n /**\n * Handle element blur\n */\n function onBlur() {\n if (options.onBlur) {\n options.onBlur.call($element)\n }\n\n if (!isFocusable) {\n $element.removeAttribute('tabindex')\n }\n }\n\n // Add listener to reset element on blur, after focus\n $element.addEventListener('focus', onFocus, { once: true })\n\n // Focus element\n if (options.onBeforeFocus) {\n options.onBeforeFocus.call($element)\n }\n $element.focus()\n}\n"],"names":[],"mappings":"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"}