@ministryofjustice/frontend 4.0.1 → 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 (244) 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 +4 -1
  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/pagination/_pagination.scss +2 -2
  107. package/moj/components/pagination/_pagination.scss.map +1 -0
  108. package/moj/components/password-reveal/_password-reveal.scss +2 -0
  109. package/moj/components/password-reveal/_password-reveal.scss.map +1 -0
  110. package/moj/components/password-reveal/password-reveal.bundle.js +49 -0
  111. package/moj/components/password-reveal/password-reveal.bundle.js.map +1 -0
  112. package/moj/components/password-reveal/password-reveal.bundle.mjs +41 -0
  113. package/moj/components/password-reveal/password-reveal.bundle.mjs.map +1 -0
  114. package/moj/components/password-reveal/password-reveal.mjs +36 -31
  115. package/moj/components/password-reveal/password-reveal.mjs.map +1 -1
  116. package/moj/components/primary-navigation/_primary-navigation.scss +2 -0
  117. package/moj/components/primary-navigation/_primary-navigation.scss.map +1 -0
  118. package/moj/components/progress-bar/_progress-bar.scss +2 -0
  119. package/moj/components/progress-bar/_progress-bar.scss.map +1 -0
  120. package/moj/components/rich-text-editor/README.md +15 -9
  121. package/moj/components/rich-text-editor/_rich-text-editor.scss +2 -0
  122. package/moj/components/rich-text-editor/_rich-text-editor.scss.map +1 -0
  123. package/moj/components/rich-text-editor/rich-text-editor.bundle.js +145 -0
  124. package/moj/components/rich-text-editor/rich-text-editor.bundle.js.map +1 -0
  125. package/moj/components/rich-text-editor/rich-text-editor.bundle.mjs +137 -0
  126. package/moj/components/rich-text-editor/rich-text-editor.bundle.mjs.map +1 -0
  127. package/moj/components/rich-text-editor/rich-text-editor.mjs +124 -145
  128. package/moj/components/rich-text-editor/rich-text-editor.mjs.map +1 -1
  129. package/moj/components/search/_search.scss +2 -0
  130. package/moj/components/search/_search.scss.map +1 -0
  131. package/moj/components/search-toggle/{search-toggle.scss → _search-toggle.scss} +2 -0
  132. package/moj/components/search-toggle/_search-toggle.scss.map +1 -0
  133. package/moj/components/search-toggle/search-toggle.bundle.js +54 -0
  134. package/moj/components/search-toggle/search-toggle.bundle.js.map +1 -0
  135. package/moj/components/search-toggle/search-toggle.bundle.mjs +46 -0
  136. package/moj/components/search-toggle/search-toggle.bundle.mjs.map +1 -0
  137. package/moj/components/search-toggle/search-toggle.mjs +40 -49
  138. package/moj/components/search-toggle/search-toggle.mjs.map +1 -1
  139. package/moj/components/side-navigation/_side-navigation.scss +2 -0
  140. package/moj/components/side-navigation/_side-navigation.scss.map +1 -0
  141. package/moj/components/sortable-table/_sortable-table.scss +2 -2
  142. package/moj/components/sortable-table/_sortable-table.scss.map +1 -0
  143. package/moj/components/sortable-table/sortable-table.bundle.js +134 -0
  144. package/moj/components/sortable-table/sortable-table.bundle.js.map +1 -0
  145. package/moj/components/sortable-table/sortable-table.bundle.mjs +126 -0
  146. package/moj/components/sortable-table/sortable-table.bundle.mjs.map +1 -0
  147. package/moj/components/sortable-table/sortable-table.mjs +117 -130
  148. package/moj/components/sortable-table/sortable-table.mjs.map +1 -1
  149. package/moj/components/sub-navigation/_sub-navigation.scss +2 -0
  150. package/moj/components/sub-navigation/_sub-navigation.scss.map +1 -0
  151. package/moj/components/tag/_tag.scss +2 -0
  152. package/moj/components/tag/_tag.scss.map +1 -0
  153. package/moj/components/task-list/_task-list.scss +2 -0
  154. package/moj/components/task-list/_task-list.scss.map +1 -0
  155. package/moj/components/ticket-panel/_ticket-panel.scss +2 -0
  156. package/moj/components/ticket-panel/_ticket-panel.scss.map +1 -0
  157. package/moj/components/timeline/_timeline.scss +2 -0
  158. package/moj/components/timeline/_timeline.scss.map +1 -0
  159. package/moj/filters/all.js +44 -22
  160. package/moj/helpers/_all.scss +2 -0
  161. package/moj/helpers/_all.scss.map +1 -0
  162. package/moj/helpers/_hidden.scss +2 -0
  163. package/moj/helpers/_hidden.scss.map +1 -0
  164. package/moj/helpers/_links.scss +2 -0
  165. package/moj/helpers/_links.scss.map +1 -0
  166. package/moj/{helpers.js → helpers.bundle.js} +37 -42
  167. package/moj/helpers.bundle.js.map +1 -0
  168. package/moj/helpers.bundle.mjs +179 -0
  169. package/moj/helpers.bundle.mjs.map +1 -0
  170. package/moj/helpers.mjs +52 -28
  171. package/moj/helpers.mjs.map +1 -1
  172. package/moj/init.js +11 -2
  173. package/moj/moj-frontend.min.css +1 -1
  174. package/moj/moj-frontend.min.css.map +1 -1
  175. package/moj/moj-frontend.min.js +1 -1
  176. package/moj/moj-frontend.min.js.map +1 -1
  177. package/moj/objects/_all.scss +2 -0
  178. package/moj/objects/_all.scss.map +1 -0
  179. package/moj/objects/_button-group.scss +2 -0
  180. package/moj/objects/_button-group.scss.map +1 -0
  181. package/moj/objects/_filter-layout.scss +2 -0
  182. package/moj/objects/_filter-layout.scss.map +1 -0
  183. package/moj/objects/_scrollable-pane.scss +2 -0
  184. package/moj/objects/_scrollable-pane.scss.map +1 -0
  185. package/moj/objects/_width-container.scss +2 -0
  186. package/moj/objects/_width-container.scss.map +1 -0
  187. package/moj/settings/_all.scss +2 -0
  188. package/moj/settings/_all.scss.map +1 -0
  189. package/moj/settings/_assets.scss +2 -0
  190. package/moj/settings/_assets.scss.map +1 -0
  191. package/moj/settings/_colours.scss +2 -0
  192. package/moj/settings/_colours.scss.map +1 -0
  193. package/moj/settings/_measurements.scss +2 -0
  194. package/moj/settings/_measurements.scss.map +1 -0
  195. package/moj/settings/_typography.scss +2 -0
  196. package/moj/settings/_typography.scss.map +1 -0
  197. package/moj/template.njk +13 -0
  198. package/moj/utilities/_all.scss +2 -0
  199. package/moj/utilities/_all.scss.map +1 -0
  200. package/moj/utilities/_hidden.scss +2 -0
  201. package/moj/utilities/_hidden.scss.map +1 -0
  202. package/moj/utilities/_width-container.scss +2 -0
  203. package/moj/utilities/_width-container.scss.map +1 -0
  204. package/moj/vendor/govuk-frontend/_base.scss +2 -0
  205. package/moj/vendor/govuk-frontend/_base.scss.map +1 -0
  206. package/moj/vendor/govuk-frontend/_index.scss +2 -0
  207. package/moj/vendor/govuk-frontend/_index.scss.map +1 -0
  208. package/moj/{version.js → version.bundle.js} +1 -1
  209. package/moj/version.bundle.js.map +1 -0
  210. package/moj/version.bundle.mjs +4 -0
  211. package/moj/version.bundle.mjs.map +1 -0
  212. package/moj/version.mjs.map +1 -1
  213. package/package.json +5 -6
  214. package/moj/all.jquery.min.js +0 -1
  215. package/moj/all.jquery.min.js.map +0 -1
  216. package/moj/all.js +0 -2662
  217. package/moj/all.js.map +0 -1
  218. package/moj/components/add-another/add-another.js +0 -115
  219. package/moj/components/add-another/add-another.js.map +0 -1
  220. package/moj/components/alert/alert.js +0 -356
  221. package/moj/components/alert/alert.js.map +0 -1
  222. package/moj/components/alert/alert.spec.helper.js.map +0 -1
  223. package/moj/components/button-menu/button-menu.js.map +0 -1
  224. package/moj/components/date-picker/date-picker.js.map +0 -1
  225. package/moj/components/filter-toggle-button/filter-toggle-button.js +0 -102
  226. package/moj/components/filter-toggle-button/filter-toggle-button.js.map +0 -1
  227. package/moj/components/form-validator/form-validator.js +0 -205
  228. package/moj/components/form-validator/form-validator.js.map +0 -1
  229. package/moj/components/multi-file-upload/multi-file-upload.js +0 -241
  230. package/moj/components/multi-file-upload/multi-file-upload.js.map +0 -1
  231. package/moj/components/multi-select/multi-select.js +0 -86
  232. package/moj/components/multi-select/multi-select.js.map +0 -1
  233. package/moj/components/password-reveal/password-reveal.js +0 -44
  234. package/moj/components/password-reveal/password-reveal.js.map +0 -1
  235. package/moj/components/rich-text-editor/rich-text-editor.js +0 -166
  236. package/moj/components/rich-text-editor/rich-text-editor.js.map +0 -1
  237. package/moj/components/search-toggle/search-toggle.js +0 -63
  238. package/moj/components/search-toggle/search-toggle.js.map +0 -1
  239. package/moj/components/sortable-table/sortable-table.js +0 -147
  240. package/moj/components/sortable-table/sortable-table.js.map +0 -1
  241. package/moj/helpers.js.map +0 -1
  242. package/moj/vendor/html5shiv.js +0 -326
  243. package/moj/vendor/jquery.js +0 -9300
  244. package/moj/version.js.map +0 -1
@@ -1,158 +1,137 @@
1
- function RichTextEditor(options) {
2
- if (!('contentEditable' in document.documentElement)) {
3
- return
1
+ class RichTextEditor {
2
+ /**
3
+ * @param {RichTextEditorConfig} options
4
+ */
5
+ constructor(options = {}) {
6
+ const {
7
+ textarea
8
+ } = options;
9
+ if (!textarea || !textarea.parentElement || !(textarea instanceof HTMLTextAreaElement) || !('contentEditable' in document.documentElement)) {
10
+ return this;
11
+ }
12
+ options.toolbar = options.toolbar || {
13
+ bold: false,
14
+ italic: false,
15
+ underline: false,
16
+ bullets: true,
17
+ numbers: true
18
+ };
19
+ this.textarea = textarea;
20
+ this.container = this.textarea.parentElement;
21
+ this.options = options;
22
+ if (this.container.hasAttribute('data-rich-text-editor-init')) {
23
+ return this;
24
+ }
25
+ this.container.setAttribute('data-rich-text-editor-init', '');
26
+ this.createToolbar();
27
+ this.hideDefault();
28
+ this.configureToolbar();
29
+ this.keys = {
30
+ left: 37,
31
+ right: 39,
32
+ up: 38,
33
+ down: 40
34
+ };
35
+ this.content.addEventListener('input', this.onEditorInput.bind(this));
36
+ this.container.querySelector('label').addEventListener('click', this.onLabelClick.bind(this));
37
+ this.toolbar.addEventListener('keydown', this.onToolbarKeydown.bind(this));
4
38
  }
5
-
6
- this.options = options;
7
- this.options.toolbar = this.options.toolbar || {
8
- bold: false,
9
- italic: false,
10
- underline: false,
11
- bullets: true,
12
- numbers: true
13
- };
14
- this.textarea = this.options.textarea;
15
- this.container = $(this.textarea).parent();
16
-
17
- if (this.container.data('moj-rich-text-editor-initialised')) {
18
- return
39
+ onToolbarKeydown(event) {
40
+ let focusableButton;
41
+ switch (event.keyCode) {
42
+ case this.keys.right:
43
+ case this.keys.down:
44
+ {
45
+ focusableButton = this.buttons.find(button => button.getAttribute('tabindex') === '0');
46
+ const nextButton = focusableButton.nextElementSibling;
47
+ if (nextButton instanceof HTMLButtonElement) {
48
+ nextButton.focus();
49
+ focusableButton.setAttribute('tabindex', '-1');
50
+ nextButton.setAttribute('tabindex', '0');
51
+ }
52
+ break;
53
+ }
54
+ case this.keys.left:
55
+ case this.keys.up:
56
+ {
57
+ focusableButton = this.buttons.find(button => button.getAttribute('tabindex') === '0');
58
+ const previousButton = focusableButton.previousElementSibling;
59
+ if (previousButton instanceof HTMLButtonElement) {
60
+ previousButton.focus();
61
+ focusableButton.setAttribute('tabindex', '-1');
62
+ previousButton.setAttribute('tabindex', '0');
63
+ }
64
+ break;
65
+ }
66
+ }
19
67
  }
20
-
21
- this.container.data('moj-rich-text-editor-initialised', true);
22
-
23
- this.createToolbar();
24
- this.hideDefault();
25
- this.configureToolbar();
26
- this.keys = {
27
- left: 37,
28
- right: 39,
29
- up: 38,
30
- down: 40
31
- };
32
- this.container.on(
33
- 'click',
34
- '.moj-rich-text-editor__toolbar-button',
35
- $.proxy(this, 'onButtonClick')
36
- );
37
- this.container
38
- .find('.moj-rich-text-editor__content')
39
- .on('input', $.proxy(this, 'onEditorInput'));
40
- this.container.find('label').on('click', $.proxy(this, 'onLabelClick'));
41
- this.toolbar.on('keydown', $.proxy(this, 'onToolbarKeydown'));
42
- }
43
-
44
- RichTextEditor.prototype.onToolbarKeydown = function (e) {
45
- let focusableButton;
46
- switch (e.keyCode) {
47
- case this.keys.right:
48
- case this.keys.down: {
49
- focusableButton = this.toolbar.find('button[tabindex=0]');
50
- const nextButton = focusableButton.next('button');
51
- if (nextButton[0]) {
52
- nextButton.focus();
53
- focusableButton.attr('tabindex', '-1');
54
- nextButton.attr('tabindex', '0');
55
- }
56
- break
68
+ getToolbarHtml() {
69
+ let html = '';
70
+ html += '<div class="moj-rich-text-editor__toolbar" role="toolbar">';
71
+ if (this.options.toolbar.bold) {
72
+ html += '<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>';
57
73
  }
58
- case this.keys.left:
59
- case this.keys.up: {
60
- focusableButton = this.toolbar.find('button[tabindex=0]');
61
- const previousButton = focusableButton.prev('button');
62
- if (previousButton[0]) {
63
- previousButton.focus();
64
- focusableButton.attr('tabindex', '-1');
65
- previousButton.attr('tabindex', '0');
66
- }
67
- break
74
+ if (this.options.toolbar.italic) {
75
+ html += '<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>';
68
76
  }
77
+ if (this.options.toolbar.underline) {
78
+ html += '<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>';
79
+ }
80
+ if (this.options.toolbar.bullets) {
81
+ html += '<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>';
82
+ }
83
+ if (this.options.toolbar.numbers) {
84
+ html += '<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>';
85
+ }
86
+ html += '</div>';
87
+ return html;
69
88
  }
70
- };
71
-
72
- RichTextEditor.prototype.getToolbarHtml = function () {
73
- let html = '';
74
-
75
- html += '<div class="moj-rich-text-editor__toolbar" role="toolbar">';
76
-
77
- if (this.options.toolbar.bold) {
78
- html +=
79
- '<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>';
89
+ getEnhancedHtml() {
90
+ return `${this.getToolbarHtml()}<div class="govuk-textarea moj-rich-text-editor__content" contenteditable="true" spellcheck="false"></div>`;
80
91
  }
81
-
82
- if (this.options.toolbar.italic) {
83
- html +=
84
- '<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>';
92
+ hideDefault() {
93
+ this.textarea.classList.add('govuk-visually-hidden');
94
+ this.textarea.setAttribute('aria-hidden', 'true');
95
+ this.textarea.setAttribute('tabindex', '-1');
85
96
  }
86
-
87
- if (this.options.toolbar.underline) {
88
- html +=
89
- '<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>';
97
+ createToolbar() {
98
+ this.toolbar = document.createElement('div');
99
+ this.toolbar.className = 'moj-rich-text-editor';
100
+ this.toolbar.innerHTML = this.getEnhancedHtml();
101
+ this.container.append(this.toolbar);
102
+ this.content = /** @type {HTMLDivElement} */
103
+ this.container.querySelector('.moj-rich-text-editor__content');
104
+ this.content.innerHTML = this.$textarea.value;
90
105
  }
91
-
92
- if (this.options.toolbar.bullets) {
93
- html +=
94
- '<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>';
106
+ configureToolbar() {
107
+ this.buttons = Array.from(/** @type {NodeListOf<HTMLButtonElement>} */
108
+ this.container.querySelectorAll('.moj-rich-text-editor__toolbar-button'));
109
+ this.buttons.forEach((button, index) => {
110
+ button.setAttribute('tabindex', !index ? '0' : '-1');
111
+ button.addEventListener('click', this.onButtonClick.bind(this));
112
+ });
95
113
  }
96
-
97
- if (this.options.toolbar.numbers) {
98
- html +=
99
- '<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>';
114
+ onButtonClick(event) {
115
+ if (!(event.currentTarget instanceof HTMLElement)) {
116
+ return;
117
+ }
118
+ document.execCommand(event.currentTarget.getAttribute('data-command'), false, undefined);
100
119
  }
101
-
102
- html += '</div>';
103
- return html
104
- };
105
-
106
- RichTextEditor.prototype.getEnhancedHtml = function (val) {
107
- return `${this.getToolbarHtml()}<div class="govuk-textarea moj-rich-text-editor__content" contenteditable="true" spellcheck="false"></div>`
108
- };
109
-
110
- RichTextEditor.prototype.hideDefault = function () {
111
- this.textarea = this.container.find('textarea');
112
- this.textarea.addClass('govuk-visually-hidden');
113
- this.textarea.attr('aria-hidden', true);
114
- this.textarea.attr('tabindex', '-1');
115
- };
116
-
117
- RichTextEditor.prototype.createToolbar = function () {
118
- this.toolbar = document.createElement('div');
119
- this.toolbar.className = 'moj-rich-text-editor';
120
- this.toolbar.innerHTML = this.getEnhancedHtml();
121
- this.container.append(this.toolbar);
122
- this.toolbar = this.container.find('.moj-rich-text-editor__toolbar');
123
- this.container
124
- .find('.moj-rich-text-editor__content')
125
- .html(this.textarea.val());
126
- };
127
-
128
- RichTextEditor.prototype.configureToolbar = function () {
129
- this.buttons = this.container.find('.moj-rich-text-editor__toolbar-button');
130
- this.buttons.prop('tabindex', '-1');
131
- const firstTab = this.buttons.first();
132
- firstTab.prop('tabindex', '0');
133
- };
134
-
135
- RichTextEditor.prototype.onButtonClick = function (e) {
136
- document.execCommand($(e.currentTarget).data('command'), false, null);
137
- };
138
-
139
- RichTextEditor.prototype.getContent = function () {
140
- return this.container.find('.moj-rich-text-editor__content').html()
141
- };
142
-
143
- RichTextEditor.prototype.onEditorInput = function (e) {
144
- this.updateTextarea();
145
- };
146
-
147
- RichTextEditor.prototype.updateTextarea = function () {
148
- document.execCommand('defaultParagraphSeparator', false, 'p');
149
- this.textarea.val(this.getContent());
150
- };
151
-
152
- RichTextEditor.prototype.onLabelClick = function (e) {
153
- e.preventDefault();
154
- this.container.find('.moj-rich-text-editor__content').focus();
155
- };
120
+ getContent() {
121
+ return this.content.innerHTML;
122
+ }
123
+ onEditorInput() {
124
+ this.updateTextarea();
125
+ }
126
+ updateTextarea() {
127
+ document.execCommand('defaultParagraphSeparator', false, 'p');
128
+ this.textarea.value = this.getContent();
129
+ }
130
+ onLabelClick(event) {
131
+ event.preventDefault();
132
+ this.content.focus();
133
+ }
134
+ }
156
135
 
157
136
  export { RichTextEditor };
158
137
  //# sourceMappingURL=rich-text-editor.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"rich-text-editor.mjs","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
+ {"version":3,"file":"rich-text-editor.mjs","sources":["../../../../src/moj/components/rich-text-editor/rich-text-editor.mjs"],"sourcesContent":["export class RichTextEditor {\n /**\n * @param {RichTextEditorConfig} options\n */\n constructor(options = {}) {\n const { textarea } = options\n\n if (\n !textarea ||\n !textarea.parentElement ||\n !(textarea instanceof HTMLTextAreaElement) ||\n !('contentEditable' in document.documentElement)\n ) {\n return this\n }\n\n options.toolbar = options.toolbar || {\n bold: false,\n italic: false,\n underline: false,\n bullets: true,\n numbers: true\n }\n\n this.textarea = textarea\n this.container = this.textarea.parentElement\n this.options = options\n\n if (this.container.hasAttribute('data-rich-text-editor-init')) {\n return this\n }\n\n this.container.setAttribute('data-rich-text-editor-init', '')\n\n this.createToolbar()\n this.hideDefault()\n this.configureToolbar()\n\n this.keys = {\n left: 37,\n right: 39,\n up: 38,\n down: 40\n }\n\n this.content.addEventListener('input', this.onEditorInput.bind(this))\n\n this.container\n .querySelector('label')\n .addEventListener('click', this.onLabelClick.bind(this))\n\n this.toolbar.addEventListener('keydown', this.onToolbarKeydown.bind(this))\n }\n\n onToolbarKeydown(event) {\n let focusableButton\n switch (event.keyCode) {\n case this.keys.right:\n case this.keys.down: {\n focusableButton = this.buttons.find(\n (button) => button.getAttribute('tabindex') === '0'\n )\n const nextButton = focusableButton.nextElementSibling\n if (nextButton instanceof HTMLButtonElement) {\n nextButton.focus()\n focusableButton.setAttribute('tabindex', '-1')\n nextButton.setAttribute('tabindex', '0')\n }\n break\n }\n case this.keys.left:\n case this.keys.up: {\n focusableButton = this.buttons.find(\n (button) => button.getAttribute('tabindex') === '0'\n )\n const previousButton = focusableButton.previousElementSibling\n if (previousButton instanceof HTMLButtonElement) {\n previousButton.focus()\n focusableButton.setAttribute('tabindex', '-1')\n previousButton.setAttribute('tabindex', '0')\n }\n break\n }\n }\n }\n\n getToolbarHtml() {\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\n getEnhancedHtml() {\n return `${this.getToolbarHtml()}<div class=\"govuk-textarea moj-rich-text-editor__content\" contenteditable=\"true\" spellcheck=\"false\"></div>`\n }\n\n hideDefault() {\n this.textarea.classList.add('govuk-visually-hidden')\n this.textarea.setAttribute('aria-hidden', 'true')\n this.textarea.setAttribute('tabindex', '-1')\n }\n\n createToolbar() {\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\n this.content = /** @type {HTMLDivElement} */ (\n this.container.querySelector('.moj-rich-text-editor__content')\n )\n\n this.content.innerHTML = this.$textarea.value\n }\n\n configureToolbar() {\n this.buttons = Array.from(\n /** @type {NodeListOf<HTMLButtonElement>} */\n (this.container.querySelectorAll('.moj-rich-text-editor__toolbar-button'))\n )\n\n this.buttons.forEach((button, index) => {\n button.setAttribute('tabindex', !index ? '0' : '-1')\n button.addEventListener('click', this.onButtonClick.bind(this))\n })\n }\n\n onButtonClick(event) {\n if (!(event.currentTarget instanceof HTMLElement)) {\n return\n }\n\n document.execCommand(\n event.currentTarget.getAttribute('data-command'),\n false,\n undefined\n )\n }\n\n getContent() {\n return this.content.innerHTML\n }\n\n onEditorInput() {\n this.updateTextarea()\n }\n\n updateTextarea() {\n document.execCommand('defaultParagraphSeparator', false, 'p')\n this.textarea.value = this.getContent()\n }\n\n onLabelClick(event) {\n event.preventDefault()\n this.content.focus()\n }\n}\n"],"names":["RichTextEditor","constructor","options","textarea","parentElement","HTMLTextAreaElement","document","documentElement","toolbar","bold","italic","underline","bullets","numbers","container","hasAttribute","setAttribute","createToolbar","hideDefault","configureToolbar","keys","left","right","up","down","content","addEventListener","onEditorInput","bind","querySelector","onLabelClick","onToolbarKeydown","event","focusableButton","keyCode","buttons","find","button","getAttribute","nextButton","nextElementSibling","HTMLButtonElement","focus","previousButton","previousElementSibling","getToolbarHtml","html","getEnhancedHtml","classList","add","createElement","className","innerHTML","append","$textarea","value","Array","from","querySelectorAll","forEach","index","onButtonClick","currentTarget","HTMLElement","execCommand","undefined","getContent","updateTextarea","preventDefault"],"mappings":"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"}
@@ -44,3 +44,5 @@
44
44
  padding: 0 !important;
45
45
  }
46
46
  }
47
+
48
+ /*# sourceMappingURL=_search.scss.map */
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/moj/components/search/_search.scss"],"names":[],"mappings":"AAAA,uCAAuC;;AAEvC;EACE,YAAY,EAAE,UAAU;AAC1B;;AAEA;EACE,qBAAqB;EACrB,aAAa;AACf;;AAEA;EACE,qBAAqB;EACrB,OAAO;EACP,gBAAgB;EAChB,mBAAmB;AACrB;;AAEA;;EAEE,gBAAgB;AAClB;;AAEA;EACE,kBAAkB;EAClB,UAAU;AACZ;;AAEA;EACE,qBAAqB;EACrB,kBAAkB;EAClB,SAAS,EAAE,8DAA8D;EACzE,WAAW;EACX,gBAAgB;EAChB,6BAA6B;EAC7B,sBAAsB;AACxB;;AAEA;EACE,sDAAsD;EACtD,sCAAsC;EACtC;IACE,sDAAsD;IACtD,qBAAqB;EACvB;AACF","file":"_search.scss","sourcesContent":["@use \"../../vendor/govuk-frontend\" as *;\n\n.moj-search {\n font-size: 0; // Fallback\n}\n\n.moj-search form {\n align-items: flex-end;\n display: flex;\n}\n\n.moj-search .govuk-form-group {\n display: inline-block;\n flex: 1;\n margin-bottom: 0;\n vertical-align: top;\n}\n\n.moj-search__label,\n.moj-search__hint {\n text-align: left;\n}\n\n.moj-search__input:focus {\n position: relative;\n z-index: 1;\n}\n\n.moj-search__button {\n display: inline-block;\n position: relative;\n top: -2px; // Override default gov properties due to active pixel movement\n width: auto;\n margin-bottom: 0;\n margin-left: govuk-spacing(2);\n vertical-align: bottom;\n}\n\n.moj-search--inline {\n // stylelint-disable-next-line declaration-no-important\n padding: govuk-spacing(2) 0 !important;\n @include govuk-media-query($from: desktop) {\n // stylelint-disable-next-line declaration-no-important\n padding: 0 !important;\n }\n}\n"]}
@@ -75,3 +75,5 @@
75
75
  max-width: 450px;
76
76
  }
77
77
  }
78
+
79
+ /*# sourceMappingURL=_search-toggle.scss.map */
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/moj/components/search-toggle/_search-toggle.scss"],"names":[],"mappings":"AAAA,uCAAuC;;AAEvC;EACE,qBAAqB;EACrB,iBAAiB;EACjB,gBAAgB;EAChB,oBAAoB;EACpB,eAAe;EACf,YAAY;EACZ,yBAAyB;EACzB,6BAA6B;EAC7B,eAAe;EACf,mCAAmC;EACnC,wBAAwB;EACxB,gBAAgB;EAChB,6CAA6C;;EAE7C;IACE,qBAAqB;IACrB,WAAW;IACX,YAAY;IACZ,6BAA6B;IAC7B,kBAAkB;IAClB,sBAAsB;;IAEtB;MACE,gBAAgB;IAClB;EACF;;EAEA;IACE,kBAAkB;IAClB,UAAU;IACV,aAAa;IACb,+BAA+B;IAC/B,qCAAqC;IACrC;;oCAEgC;EAClC;AACF;;AAEA;EACE,yBAAyB;;EAEzB;IACE,sDAAsD;IACtD,2BAA2B;IAC3B,sDAAsD;IACtD,0BAA0B;EAC5B;AACF;;AAEA,YAAY;AACZ;EACE;IACE,sDAAsD;IACtD,yBAAyB;EAC3B;AACF;;AAEA;EACE,kBAAkB;AACpB;;AAEA;EACE,4CAA4C;;EAE5C;IACE,kBAAkB;IAClB,WAAW;IACX,SAAS,EAAE,mBAAmB;IAC9B,YAAY;IACZ,YAAY;IACZ,gBAAgB;EAClB;AACF","file":"_search-toggle.scss","sourcesContent":["@use \"../../vendor/govuk-frontend\" as *;\n\n.moj-search-toggle__button {\n display: inline-block;\n padding-top: 12px;\n padding-right: 0;\n padding-bottom: 13px;\n padding-left: 0;\n border: none;\n color: $govuk-link-colour;\n background-color: transparent;\n cursor: pointer;\n -webkit-font-smoothing: antialiased;\n -webkit-appearance: none;\n appearance: none;\n @include govuk-font($size: 19, $weight: bold);\n\n &__icon {\n display: inline-block;\n width: 20px;\n height: 20px;\n margin-left: govuk-spacing(2);\n fill: currentcolor;\n vertical-align: middle;\n\n @media screen and (forced-colors: active) {\n fill: windowText;\n }\n }\n\n &:focus {\n position: relative;\n z-index: 1;\n outline: none;\n color: $govuk-focus-text-colour;\n background-color: $govuk-focus-colour;\n box-shadow:\n 0 -2px $govuk-focus-colour,\n 0 4px $govuk-focus-text-colour;\n }\n}\n\n.moj-search--toggle {\n padding: govuk-spacing(3);\n\n @include govuk-media-query($until: desktop) {\n // stylelint-disable-next-line declaration-no-important\n padding-right: 0 !important;\n // stylelint-disable-next-line declaration-no-important\n padding-left: 0 !important;\n }\n}\n\n// JS enabled\n.js-enabled .moj-search--toggle {\n @include govuk-media-query($until: desktop) {\n // stylelint-disable-next-line declaration-no-important\n padding-top: 0 !important;\n }\n}\n\n.js-enabled .moj-search-toggle {\n position: relative;\n}\n\n.js-enabled .moj-search-toggle__search {\n background-color: govuk-colour(\"light-grey\");\n\n @include govuk-media-query($from: desktop) {\n position: absolute;\n z-index: 10;\n top: 50px; // Height of nav bar\n right: -15px;\n width: 450px;\n max-width: 450px;\n }\n}\n"]}
@@ -0,0 +1,54 @@
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
+ class SearchToggle {
8
+ constructor(options) {
9
+ this.options = options;
10
+ this.container = this.options.search.container;
11
+ this.toggleButtonContainer = this.options.toggleButton.container;
12
+ if (this.container.hasAttribute('data-moj-search-toggle-init')) {
13
+ return this;
14
+ }
15
+ this.container.setAttribute('data-moj-search-toggle-init', '');
16
+ const svg = '<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>';
17
+ this.toggleButton = document.createElement('button');
18
+ this.toggleButton.setAttribute('class', 'moj-search-toggle__button');
19
+ this.toggleButton.setAttribute('type', 'button');
20
+ this.toggleButton.setAttribute('aria-haspopup', 'true');
21
+ this.toggleButton.setAttribute('aria-expanded', 'false');
22
+ this.toggleButton.innerHTML = `${this.options.toggleButton.text} ${svg}`;
23
+ this.toggleButton.addEventListener('click', this.onToggleButtonClick.bind(this));
24
+ this.toggleButtonContainer.append(this.toggleButton);
25
+ document.addEventListener('click', this.onDocumentClick.bind(this));
26
+ document.addEventListener('focusin', this.onDocumentClick.bind(this));
27
+ }
28
+ showMenu() {
29
+ this.toggleButton.setAttribute('aria-expanded', 'true');
30
+ this.container.classList.remove('moj-js-hidden');
31
+ this.container.querySelector('input').focus();
32
+ }
33
+ hideMenu() {
34
+ this.container.classList.add('moj-js-hidden');
35
+ this.toggleButton.setAttribute('aria-expanded', 'false');
36
+ }
37
+ onToggleButtonClick() {
38
+ if (this.toggleButton.getAttribute('aria-expanded') === 'false') {
39
+ this.showMenu();
40
+ } else {
41
+ this.hideMenu();
42
+ }
43
+ }
44
+ onDocumentClick(event) {
45
+ if (!this.toggleButtonContainer.contains(event.target) && !this.container.contains(event.target)) {
46
+ this.hideMenu();
47
+ }
48
+ }
49
+ }
50
+
51
+ exports.SearchToggle = SearchToggle;
52
+
53
+ }));
54
+ //# sourceMappingURL=search-toggle.bundle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-toggle.bundle.js","sources":["../../../../src/moj/components/search-toggle/search-toggle.mjs"],"sourcesContent":["export class SearchToggle {\n constructor(options) {\n this.options = options\n this.container = this.options.search.container\n this.toggleButtonContainer = this.options.toggleButton.container\n\n if (this.container.hasAttribute('data-moj-search-toggle-init')) {\n return this\n }\n\n this.container.setAttribute('data-moj-search-toggle-init', '')\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 = document.createElement('button')\n this.toggleButton.setAttribute('class', 'moj-search-toggle__button')\n this.toggleButton.setAttribute('type', 'button')\n this.toggleButton.setAttribute('aria-haspopup', 'true')\n this.toggleButton.setAttribute('aria-expanded', 'false')\n this.toggleButton.innerHTML = `${this.options.toggleButton.text} ${svg}`\n\n this.toggleButton.addEventListener(\n 'click',\n this.onToggleButtonClick.bind(this)\n )\n\n this.toggleButtonContainer.append(this.toggleButton)\n\n document.addEventListener('click', this.onDocumentClick.bind(this))\n document.addEventListener('focusin', this.onDocumentClick.bind(this))\n }\n\n showMenu() {\n this.toggleButton.setAttribute('aria-expanded', 'true')\n this.container.classList.remove('moj-js-hidden')\n this.container.querySelector('input').focus()\n }\n\n hideMenu() {\n this.container.classList.add('moj-js-hidden')\n this.toggleButton.setAttribute('aria-expanded', 'false')\n }\n\n onToggleButtonClick() {\n if (this.toggleButton.getAttribute('aria-expanded') === 'false') {\n this.showMenu()\n } else {\n this.hideMenu()\n }\n }\n\n onDocumentClick(event) {\n if (\n !this.toggleButtonContainer.contains(event.target) &&\n !this.container.contains(event.target)\n ) {\n this.hideMenu()\n }\n }\n}\n"],"names":["SearchToggle","constructor","options","container","search","toggleButtonContainer","toggleButton","hasAttribute","setAttribute","svg","document","createElement","innerHTML","text","addEventListener","onToggleButtonClick","bind","append","onDocumentClick","showMenu","classList","remove","querySelector","focus","hideMenu","add","getAttribute","event","contains","target"],"mappings":";;;;;;EAAO,MAAMA,YAAY,CAAC;IACxBC,WAAWA,CAACC,OAAO,EAAE;MACnB,IAAI,CAACA,OAAO,GAAGA,OAAO;MACtB,IAAI,CAACC,SAAS,GAAG,IAAI,CAACD,OAAO,CAACE,MAAM,CAACD,SAAS;MAC9C,IAAI,CAACE,qBAAqB,GAAG,IAAI,CAACH,OAAO,CAACI,YAAY,CAACH,SAAS;MAEhE,IAAI,IAAI,CAACA,SAAS,CAACI,YAAY,CAAC,6BAA6B,CAAC,EAAE;EAC9D,MAAA,OAAO,IAAI;EACb;MAEA,IAAI,CAACJ,SAAS,CAACK,YAAY,CAAC,6BAA6B,EAAE,EAAE,CAAC;MAE9D,MAAMC,GAAG,GACP,6pCAA6pC;MAE/pC,IAAI,CAACH,YAAY,GAAGI,QAAQ,CAACC,aAAa,CAAC,QAAQ,CAAC;MACpD,IAAI,CAACL,YAAY,CAACE,YAAY,CAAC,OAAO,EAAE,2BAA2B,CAAC;MACpE,IAAI,CAACF,YAAY,CAACE,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC;MAChD,IAAI,CAACF,YAAY,CAACE,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC;MACvD,IAAI,CAACF,YAAY,CAACE,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC;EACxD,IAAA,IAAI,CAACF,YAAY,CAACM,SAAS,GAAG,CAAG,EAAA,IAAI,CAACV,OAAO,CAACI,YAAY,CAACO,IAAI,CAAA,CAAA,EAAIJ,GAAG,CAAE,CAAA;EAExE,IAAA,IAAI,CAACH,YAAY,CAACQ,gBAAgB,CAChC,OAAO,EACP,IAAI,CAACC,mBAAmB,CAACC,IAAI,CAAC,IAAI,CACpC,CAAC;MAED,IAAI,CAACX,qBAAqB,CAACY,MAAM,CAAC,IAAI,CAACX,YAAY,CAAC;EAEpDI,IAAAA,QAAQ,CAACI,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAACI,eAAe,CAACF,IAAI,CAAC,IAAI,CAAC,CAAC;EACnEN,IAAAA,QAAQ,CAACI,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAACI,eAAe,CAACF,IAAI,CAAC,IAAI,CAAC,CAAC;EACvE;EAEAG,EAAAA,QAAQA,GAAG;MACT,IAAI,CAACb,YAAY,CAACE,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC;MACvD,IAAI,CAACL,SAAS,CAACiB,SAAS,CAACC,MAAM,CAAC,eAAe,CAAC;MAChD,IAAI,CAAClB,SAAS,CAACmB,aAAa,CAAC,OAAO,CAAC,CAACC,KAAK,EAAE;EAC/C;EAEAC,EAAAA,QAAQA,GAAG;MACT,IAAI,CAACrB,SAAS,CAACiB,SAAS,CAACK,GAAG,CAAC,eAAe,CAAC;MAC7C,IAAI,CAACnB,YAAY,CAACE,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC;EAC1D;EAEAO,EAAAA,mBAAmBA,GAAG;MACpB,IAAI,IAAI,CAACT,YAAY,CAACoB,YAAY,CAAC,eAAe,CAAC,KAAK,OAAO,EAAE;QAC/D,IAAI,CAACP,QAAQ,EAAE;EACjB,KAAC,MAAM;QACL,IAAI,CAACK,QAAQ,EAAE;EACjB;EACF;IAEAN,eAAeA,CAACS,KAAK,EAAE;MACrB,IACE,CAAC,IAAI,CAACtB,qBAAqB,CAACuB,QAAQ,CAACD,KAAK,CAACE,MAAM,CAAC,IAClD,CAAC,IAAI,CAAC1B,SAAS,CAACyB,QAAQ,CAACD,KAAK,CAACE,MAAM,CAAC,EACtC;QACA,IAAI,CAACL,QAAQ,EAAE;EACjB;EACF;EACF;;;;;;;;"}
@@ -0,0 +1,46 @@
1
+ class SearchToggle {
2
+ constructor(options) {
3
+ this.options = options;
4
+ this.container = this.options.search.container;
5
+ this.toggleButtonContainer = this.options.toggleButton.container;
6
+ if (this.container.hasAttribute('data-moj-search-toggle-init')) {
7
+ return this;
8
+ }
9
+ this.container.setAttribute('data-moj-search-toggle-init', '');
10
+ const svg = '<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>';
11
+ this.toggleButton = document.createElement('button');
12
+ this.toggleButton.setAttribute('class', 'moj-search-toggle__button');
13
+ this.toggleButton.setAttribute('type', 'button');
14
+ this.toggleButton.setAttribute('aria-haspopup', 'true');
15
+ this.toggleButton.setAttribute('aria-expanded', 'false');
16
+ this.toggleButton.innerHTML = `${this.options.toggleButton.text} ${svg}`;
17
+ this.toggleButton.addEventListener('click', this.onToggleButtonClick.bind(this));
18
+ this.toggleButtonContainer.append(this.toggleButton);
19
+ document.addEventListener('click', this.onDocumentClick.bind(this));
20
+ document.addEventListener('focusin', this.onDocumentClick.bind(this));
21
+ }
22
+ showMenu() {
23
+ this.toggleButton.setAttribute('aria-expanded', 'true');
24
+ this.container.classList.remove('moj-js-hidden');
25
+ this.container.querySelector('input').focus();
26
+ }
27
+ hideMenu() {
28
+ this.container.classList.add('moj-js-hidden');
29
+ this.toggleButton.setAttribute('aria-expanded', 'false');
30
+ }
31
+ onToggleButtonClick() {
32
+ if (this.toggleButton.getAttribute('aria-expanded') === 'false') {
33
+ this.showMenu();
34
+ } else {
35
+ this.hideMenu();
36
+ }
37
+ }
38
+ onDocumentClick(event) {
39
+ if (!this.toggleButtonContainer.contains(event.target) && !this.container.contains(event.target)) {
40
+ this.hideMenu();
41
+ }
42
+ }
43
+ }
44
+
45
+ export { SearchToggle };
46
+ //# sourceMappingURL=search-toggle.bundle.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-toggle.bundle.mjs","sources":["../../../../src/moj/components/search-toggle/search-toggle.mjs"],"sourcesContent":["export class SearchToggle {\n constructor(options) {\n this.options = options\n this.container = this.options.search.container\n this.toggleButtonContainer = this.options.toggleButton.container\n\n if (this.container.hasAttribute('data-moj-search-toggle-init')) {\n return this\n }\n\n this.container.setAttribute('data-moj-search-toggle-init', '')\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 = document.createElement('button')\n this.toggleButton.setAttribute('class', 'moj-search-toggle__button')\n this.toggleButton.setAttribute('type', 'button')\n this.toggleButton.setAttribute('aria-haspopup', 'true')\n this.toggleButton.setAttribute('aria-expanded', 'false')\n this.toggleButton.innerHTML = `${this.options.toggleButton.text} ${svg}`\n\n this.toggleButton.addEventListener(\n 'click',\n this.onToggleButtonClick.bind(this)\n )\n\n this.toggleButtonContainer.append(this.toggleButton)\n\n document.addEventListener('click', this.onDocumentClick.bind(this))\n document.addEventListener('focusin', this.onDocumentClick.bind(this))\n }\n\n showMenu() {\n this.toggleButton.setAttribute('aria-expanded', 'true')\n this.container.classList.remove('moj-js-hidden')\n this.container.querySelector('input').focus()\n }\n\n hideMenu() {\n this.container.classList.add('moj-js-hidden')\n this.toggleButton.setAttribute('aria-expanded', 'false')\n }\n\n onToggleButtonClick() {\n if (this.toggleButton.getAttribute('aria-expanded') === 'false') {\n this.showMenu()\n } else {\n this.hideMenu()\n }\n }\n\n onDocumentClick(event) {\n if (\n !this.toggleButtonContainer.contains(event.target) &&\n !this.container.contains(event.target)\n ) {\n this.hideMenu()\n }\n }\n}\n"],"names":["SearchToggle","constructor","options","container","search","toggleButtonContainer","toggleButton","hasAttribute","setAttribute","svg","document","createElement","innerHTML","text","addEventListener","onToggleButtonClick","bind","append","onDocumentClick","showMenu","classList","remove","querySelector","focus","hideMenu","add","getAttribute","event","contains","target"],"mappings":"AAAO,MAAMA,YAAY,CAAC;EACxBC,WAAWA,CAACC,OAAO,EAAE;IACnB,IAAI,CAACA,OAAO,GAAGA,OAAO;IACtB,IAAI,CAACC,SAAS,GAAG,IAAI,CAACD,OAAO,CAACE,MAAM,CAACD,SAAS;IAC9C,IAAI,CAACE,qBAAqB,GAAG,IAAI,CAACH,OAAO,CAACI,YAAY,CAACH,SAAS;IAEhE,IAAI,IAAI,CAACA,SAAS,CAACI,YAAY,CAAC,6BAA6B,CAAC,EAAE;AAC9D,MAAA,OAAO,IAAI;AACb;IAEA,IAAI,CAACJ,SAAS,CAACK,YAAY,CAAC,6BAA6B,EAAE,EAAE,CAAC;IAE9D,MAAMC,GAAG,GACP,6pCAA6pC;IAE/pC,IAAI,CAACH,YAAY,GAAGI,QAAQ,CAACC,aAAa,CAAC,QAAQ,CAAC;IACpD,IAAI,CAACL,YAAY,CAACE,YAAY,CAAC,OAAO,EAAE,2BAA2B,CAAC;IACpE,IAAI,CAACF,YAAY,CAACE,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC;IAChD,IAAI,CAACF,YAAY,CAACE,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC;IACvD,IAAI,CAACF,YAAY,CAACE,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC;AACxD,IAAA,IAAI,CAACF,YAAY,CAACM,SAAS,GAAG,CAAG,EAAA,IAAI,CAACV,OAAO,CAACI,YAAY,CAACO,IAAI,CAAA,CAAA,EAAIJ,GAAG,CAAE,CAAA;AAExE,IAAA,IAAI,CAACH,YAAY,CAACQ,gBAAgB,CAChC,OAAO,EACP,IAAI,CAACC,mBAAmB,CAACC,IAAI,CAAC,IAAI,CACpC,CAAC;IAED,IAAI,CAACX,qBAAqB,CAACY,MAAM,CAAC,IAAI,CAACX,YAAY,CAAC;AAEpDI,IAAAA,QAAQ,CAACI,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAACI,eAAe,CAACF,IAAI,CAAC,IAAI,CAAC,CAAC;AACnEN,IAAAA,QAAQ,CAACI,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAACI,eAAe,CAACF,IAAI,CAAC,IAAI,CAAC,CAAC;AACvE;AAEAG,EAAAA,QAAQA,GAAG;IACT,IAAI,CAACb,YAAY,CAACE,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC;IACvD,IAAI,CAACL,SAAS,CAACiB,SAAS,CAACC,MAAM,CAAC,eAAe,CAAC;IAChD,IAAI,CAAClB,SAAS,CAACmB,aAAa,CAAC,OAAO,CAAC,CAACC,KAAK,EAAE;AAC/C;AAEAC,EAAAA,QAAQA,GAAG;IACT,IAAI,CAACrB,SAAS,CAACiB,SAAS,CAACK,GAAG,CAAC,eAAe,CAAC;IAC7C,IAAI,CAACnB,YAAY,CAACE,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC;AAC1D;AAEAO,EAAAA,mBAAmBA,GAAG;IACpB,IAAI,IAAI,CAACT,YAAY,CAACoB,YAAY,CAAC,eAAe,CAAC,KAAK,OAAO,EAAE;MAC/D,IAAI,CAACP,QAAQ,EAAE;AACjB,KAAC,MAAM;MACL,IAAI,CAACK,QAAQ,EAAE;AACjB;AACF;EAEAN,eAAeA,CAACS,KAAK,EAAE;IACrB,IACE,CAAC,IAAI,CAACtB,qBAAqB,CAACuB,QAAQ,CAACD,KAAK,CAACE,MAAM,CAAC,IAClD,CAAC,IAAI,CAAC1B,SAAS,CAACyB,QAAQ,CAACD,KAAK,CAACE,MAAM,CAAC,EACtC;MACA,IAAI,CAACL,QAAQ,EAAE;AACjB;AACF;AACF;;;;"}
@@ -1,55 +1,46 @@
1
- function SearchToggle(options) {
2
- this.options = options;
3
- this.container = $(this.options.search.container);
4
- this.toggleButtonContainer = $(this.options.toggleButton.container);
5
-
6
- if (this.container.data('moj-search-toggle-initialised')) {
7
- return
1
+ class SearchToggle {
2
+ constructor(options) {
3
+ this.options = options;
4
+ this.container = this.options.search.container;
5
+ this.toggleButtonContainer = this.options.toggleButton.container;
6
+ if (this.container.hasAttribute('data-moj-search-toggle-init')) {
7
+ return this;
8
+ }
9
+ this.container.setAttribute('data-moj-search-toggle-init', '');
10
+ const svg = '<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>';
11
+ this.toggleButton = document.createElement('button');
12
+ this.toggleButton.setAttribute('class', 'moj-search-toggle__button');
13
+ this.toggleButton.setAttribute('type', 'button');
14
+ this.toggleButton.setAttribute('aria-haspopup', 'true');
15
+ this.toggleButton.setAttribute('aria-expanded', 'false');
16
+ this.toggleButton.innerHTML = `${this.options.toggleButton.text} ${svg}`;
17
+ this.toggleButton.addEventListener('click', this.onToggleButtonClick.bind(this));
18
+ this.toggleButtonContainer.append(this.toggleButton);
19
+ document.addEventListener('click', this.onDocumentClick.bind(this));
20
+ document.addEventListener('focusin', this.onDocumentClick.bind(this));
8
21
  }
9
-
10
- this.container.data('moj-search-toggle-initialised', true);
11
-
12
- const svg =
13
- '<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>';
14
-
15
- this.toggleButton = $(
16
- `<button class="moj-search-toggle__button" type="button" aria-haspopup="true" aria-expanded="false">
17
- ${this.options.toggleButton.text} ${svg}
18
- </button>`
19
- );
20
- this.toggleButton.on('click', $.proxy(this, 'onToggleButtonClick'));
21
- this.toggleButtonContainer.append(this.toggleButton);
22
- $(document).on('click', this.onDocumentClick.bind(this));
23
- $(document).on('focusin', this.onDocumentClick.bind(this));
24
- }
25
-
26
- SearchToggle.prototype.showMenu = function () {
27
- this.toggleButton.attr('aria-expanded', 'true');
28
- this.container.removeClass('moj-js-hidden');
29
- this.container.find('input').first().get(0).focus();
30
- };
31
-
32
- SearchToggle.prototype.hideMenu = function () {
33
- this.container.addClass('moj-js-hidden');
34
- this.toggleButton.attr('aria-expanded', 'false');
35
- };
36
-
37
- SearchToggle.prototype.onToggleButtonClick = function () {
38
- if (this.toggleButton.attr('aria-expanded') === 'false') {
39
- this.showMenu();
40
- } else {
41
- this.hideMenu();
22
+ showMenu() {
23
+ this.toggleButton.setAttribute('aria-expanded', 'true');
24
+ this.container.classList.remove('moj-js-hidden');
25
+ this.container.querySelector('input').focus();
42
26
  }
43
- };
44
-
45
- SearchToggle.prototype.onDocumentClick = function (e) {
46
- if (
47
- !$.contains(this.toggleButtonContainer[0], e.target) &&
48
- !$.contains(this.container[0], e.target)
49
- ) {
50
- this.hideMenu();
27
+ hideMenu() {
28
+ this.container.classList.add('moj-js-hidden');
29
+ this.toggleButton.setAttribute('aria-expanded', 'false');
51
30
  }
52
- };
31
+ onToggleButtonClick() {
32
+ if (this.toggleButton.getAttribute('aria-expanded') === 'false') {
33
+ this.showMenu();
34
+ } else {
35
+ this.hideMenu();
36
+ }
37
+ }
38
+ onDocumentClick(event) {
39
+ if (!this.toggleButtonContainer.contains(event.target) && !this.container.contains(event.target)) {
40
+ this.hideMenu();
41
+ }
42
+ }
43
+ }
53
44
 
54
45
  export { SearchToggle };
55
46
  //# sourceMappingURL=search-toggle.mjs.map