@ministryofjustice/frontend 4.0.1 → 5.1.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.
- package/govuk-prototype-kit.config.json +19 -4
- package/moj/_base.scss +2 -0
- package/moj/_base.scss.map +1 -0
- package/moj/all.bundle.js +3010 -0
- package/moj/all.bundle.js.map +1 -0
- package/moj/all.bundle.mjs +3293 -0
- package/moj/all.bundle.mjs.map +1 -0
- package/moj/all.mjs +17 -110
- package/moj/all.mjs.map +1 -1
- package/moj/all.scss +3 -0
- package/moj/all.scss.map +1 -0
- package/moj/common/index.mjs +57 -0
- package/moj/common/index.mjs.map +1 -0
- package/moj/common/moj-frontend-version.mjs +14 -0
- package/moj/common/moj-frontend-version.mjs.map +1 -0
- package/moj/components/_all.scss +2 -0
- package/moj/components/_all.scss.map +1 -0
- package/moj/components/action-bar/_action-bar.scss +2 -0
- package/moj/components/action-bar/_action-bar.scss.map +1 -0
- package/moj/components/add-another/_add-another.scss +2 -0
- package/moj/components/add-another/_add-another.scss.map +1 -0
- package/moj/components/add-another/add-another.bundle.js +157 -0
- package/moj/components/add-another/add-another.bundle.js.map +1 -0
- package/moj/components/add-another/add-another.bundle.mjs +271 -0
- package/moj/components/add-another/add-another.bundle.mjs.map +1 -0
- package/moj/components/add-another/add-another.mjs +135 -91
- package/moj/components/add-another/add-another.mjs.map +1 -1
- package/moj/components/alert/_alert.scss +4 -0
- package/moj/components/alert/_alert.scss.map +1 -0
- package/moj/components/alert/alert.bundle.js +254 -0
- package/moj/components/alert/alert.bundle.js.map +1 -0
- package/moj/components/alert/alert.bundle.mjs +490 -0
- package/moj/components/alert/alert.bundle.mjs.map +1 -0
- package/moj/components/alert/alert.mjs +97 -218
- package/moj/components/alert/alert.mjs.map +1 -1
- package/moj/components/alert/{alert.spec.helper.js → alert.spec.helper.bundle.js} +1 -1
- package/moj/components/alert/alert.spec.helper.bundle.js.map +1 -0
- package/moj/components/alert/alert.spec.helper.bundle.mjs +67 -0
- package/moj/components/alert/alert.spec.helper.bundle.mjs.map +1 -0
- package/moj/components/alert/alert.spec.helper.mjs.map +1 -1
- package/moj/components/badge/_badge.scss +2 -0
- package/moj/components/badge/_badge.scss.map +1 -0
- package/moj/components/banner/_banner.scss +2 -0
- package/moj/components/banner/_banner.scss.map +1 -0
- package/moj/components/button-menu/README.md +12 -6
- package/moj/components/button-menu/_button-menu.scss +4 -1
- package/moj/components/button-menu/_button-menu.scss.map +1 -0
- package/moj/components/button-menu/button-menu.bundle.js +270 -0
- package/moj/components/button-menu/button-menu.bundle.js.map +1 -0
- package/moj/components/button-menu/button-menu.bundle.mjs +506 -0
- package/moj/components/button-menu/button-menu.bundle.mjs.map +1 -0
- package/moj/components/button-menu/button-menu.mjs +214 -280
- package/moj/components/button-menu/button-menu.mjs.map +1 -1
- package/moj/components/cookie-banner/_cookie-banner.scss +2 -0
- package/moj/components/cookie-banner/_cookie-banner.scss.map +1 -0
- package/moj/components/currency-input/_currency-input.scss +2 -0
- package/moj/components/currency-input/_currency-input.scss.map +1 -0
- package/moj/components/date-picker/_date-picker.scss +2 -0
- package/moj/components/date-picker/_date-picker.scss.map +1 -0
- package/moj/components/date-picker/date-picker.bundle.js +804 -0
- package/moj/components/date-picker/date-picker.bundle.js.map +1 -0
- package/moj/components/date-picker/date-picker.bundle.mjs +1040 -0
- package/moj/components/date-picker/date-picker.bundle.mjs.map +1 -0
- package/moj/components/date-picker/date-picker.mjs +663 -827
- package/moj/components/date-picker/date-picker.mjs.map +1 -1
- package/moj/components/filter/_filter.scss +2 -0
- package/moj/components/filter/_filter.scss.map +1 -0
- package/moj/components/filter/template.njk +1 -1
- package/moj/components/filter-toggle-button/filter-toggle-button.bundle.js +185 -0
- package/moj/components/filter-toggle-button/filter-toggle-button.bundle.js.map +1 -0
- package/moj/components/filter-toggle-button/filter-toggle-button.bundle.mjs +421 -0
- package/moj/components/filter-toggle-button/filter-toggle-button.bundle.mjs.map +1 -0
- package/moj/components/filter-toggle-button/filter-toggle-button.mjs +166 -81
- package/moj/components/filter-toggle-button/filter-toggle-button.mjs.map +1 -1
- package/moj/components/form-validator/form-validator.bundle.js +288 -0
- package/moj/components/form-validator/form-validator.bundle.js.map +1 -0
- package/moj/components/form-validator/form-validator.bundle.mjs +524 -0
- package/moj/components/form-validator/form-validator.bundle.mjs.map +1 -0
- package/moj/components/form-validator/form-validator.mjs +226 -149
- package/moj/components/form-validator/form-validator.mjs.map +1 -1
- package/moj/components/header/_header.scss +2 -0
- package/moj/components/header/_header.scss.map +1 -0
- package/moj/components/identity-bar/_identity-bar.scss +2 -0
- package/moj/components/identity-bar/_identity-bar.scss.map +1 -0
- package/moj/components/interruption-card/_interruption-card.scss +2 -0
- package/moj/components/interruption-card/_interruption-card.scss.map +1 -0
- package/moj/components/messages/_messages.scss +2 -0
- package/moj/components/messages/_messages.scss.map +1 -0
- package/moj/components/multi-file-upload/_multi-file-upload.scss +2 -0
- package/moj/components/multi-file-upload/_multi-file-upload.scss.map +1 -0
- package/moj/components/multi-file-upload/multi-file-upload.bundle.js +397 -0
- package/moj/components/multi-file-upload/multi-file-upload.bundle.js.map +1 -0
- package/moj/components/multi-file-upload/multi-file-upload.bundle.mjs +633 -0
- package/moj/components/multi-file-upload/multi-file-upload.bundle.mjs.map +1 -0
- package/moj/components/multi-file-upload/multi-file-upload.mjs +384 -213
- package/moj/components/multi-file-upload/multi-file-upload.mjs.map +1 -1
- package/moj/components/multi-file-upload/template.njk +1 -1
- package/moj/components/multi-select/_multi-select.scss +2 -0
- package/moj/components/multi-select/_multi-select.scss.map +1 -0
- package/moj/components/multi-select/multi-select.bundle.js +143 -0
- package/moj/components/multi-select/multi-select.bundle.js.map +1 -0
- package/moj/components/multi-select/multi-select.bundle.mjs +379 -0
- package/moj/components/multi-select/multi-select.bundle.mjs.map +1 -0
- package/moj/components/multi-select/multi-select.mjs +123 -64
- package/moj/components/multi-select/multi-select.mjs.map +1 -1
- package/moj/components/notification-badge/_notification-badge.scss +2 -0
- package/moj/components/notification-badge/_notification-badge.scss.map +1 -0
- package/moj/components/organisation-switcher/_organisation-switcher.scss +2 -0
- package/moj/components/organisation-switcher/_organisation-switcher.scss.map +1 -0
- package/moj/components/page-header-actions/_page-header-actions.scss +2 -0
- package/moj/components/page-header-actions/_page-header-actions.scss.map +1 -0
- package/moj/components/pagination/_pagination.scss +2 -2
- package/moj/components/pagination/_pagination.scss.map +1 -0
- package/moj/components/password-reveal/_password-reveal.scss +5 -1
- package/moj/components/password-reveal/_password-reveal.scss.map +1 -0
- package/moj/components/password-reveal/password-reveal.bundle.js +52 -0
- package/moj/components/password-reveal/password-reveal.bundle.js.map +1 -0
- package/moj/components/password-reveal/password-reveal.bundle.mjs +166 -0
- package/moj/components/password-reveal/password-reveal.bundle.mjs.map +1 -0
- package/moj/components/password-reveal/password-reveal.mjs +39 -29
- package/moj/components/password-reveal/password-reveal.mjs.map +1 -1
- package/moj/components/primary-navigation/_primary-navigation.scss +2 -0
- package/moj/components/primary-navigation/_primary-navigation.scss.map +1 -0
- package/moj/components/progress-bar/_progress-bar.scss +2 -0
- package/moj/components/progress-bar/_progress-bar.scss.map +1 -0
- package/moj/components/rich-text-editor/README.md +16 -9
- package/moj/components/rich-text-editor/_rich-text-editor.scss +2 -0
- package/moj/components/rich-text-editor/_rich-text-editor.scss.map +1 -0
- package/moj/components/rich-text-editor/rich-text-editor.bundle.js +210 -0
- package/moj/components/rich-text-editor/rich-text-editor.bundle.js.map +1 -0
- package/moj/components/rich-text-editor/rich-text-editor.bundle.mjs +446 -0
- package/moj/components/rich-text-editor/rich-text-editor.bundle.mjs.map +1 -0
- package/moj/components/rich-text-editor/rich-text-editor.mjs +186 -140
- package/moj/components/rich-text-editor/rich-text-editor.mjs.map +1 -1
- package/moj/components/search/_search.scss +2 -0
- package/moj/components/search/_search.scss.map +1 -0
- package/moj/components/search-toggle/{search-toggle.scss → _search-toggle.scss} +2 -0
- package/moj/components/search-toggle/_search-toggle.scss.map +1 -0
- package/moj/components/search-toggle/search-toggle.bundle.js +122 -0
- package/moj/components/search-toggle/search-toggle.bundle.js.map +1 -0
- package/moj/components/search-toggle/search-toggle.bundle.mjs +358 -0
- package/moj/components/search-toggle/search-toggle.bundle.mjs.map +1 -0
- package/moj/components/search-toggle/search-toggle.mjs +104 -43
- package/moj/components/search-toggle/search-toggle.mjs.map +1 -1
- package/moj/components/side-navigation/_side-navigation.scss +2 -0
- package/moj/components/side-navigation/_side-navigation.scss.map +1 -0
- package/moj/components/sortable-table/_sortable-table.scss +2 -2
- package/moj/components/sortable-table/_sortable-table.scss.map +1 -0
- package/moj/components/sortable-table/sortable-table.bundle.js +202 -0
- package/moj/components/sortable-table/sortable-table.bundle.js.map +1 -0
- package/moj/components/sortable-table/sortable-table.bundle.mjs +438 -0
- package/moj/components/sortable-table/sortable-table.bundle.mjs.map +1 -0
- package/moj/components/sortable-table/sortable-table.mjs +179 -122
- package/moj/components/sortable-table/sortable-table.mjs.map +1 -1
- package/moj/components/sub-navigation/_sub-navigation.scss +2 -0
- package/moj/components/sub-navigation/_sub-navigation.scss.map +1 -0
- package/moj/components/tag/_tag.scss +2 -0
- package/moj/components/tag/_tag.scss.map +1 -0
- package/moj/components/task-list/_task-list.scss +2 -0
- package/moj/components/task-list/_task-list.scss.map +1 -0
- package/moj/components/ticket-panel/_ticket-panel.scss +2 -0
- package/moj/components/ticket-panel/_ticket-panel.scss.map +1 -0
- package/moj/components/timeline/_timeline.scss +2 -0
- package/moj/components/timeline/_timeline.scss.map +1 -0
- package/moj/core/_all.scss +3 -0
- package/moj/core/_all.scss.map +1 -0
- package/moj/core/_moj-frontend-properties.scss +7 -0
- package/moj/core/_moj-frontend-properties.scss.map +1 -0
- package/moj/filters/all.js +44 -22
- package/moj/filters/prototype-kit-13-filters.js +4 -3
- package/moj/helpers/_all.scss +2 -0
- package/moj/helpers/_all.scss.map +1 -0
- package/moj/helpers/_hidden.scss +2 -0
- package/moj/helpers/_hidden.scss.map +1 -0
- package/moj/helpers/_links.scss +2 -0
- package/moj/helpers/_links.scss.map +1 -0
- package/moj/helpers.bundle.js +140 -0
- package/moj/helpers.bundle.js.map +1 -0
- package/moj/helpers.bundle.mjs +128 -0
- package/moj/helpers.bundle.mjs.map +1 -0
- package/moj/helpers.mjs +50 -77
- package/moj/helpers.mjs.map +1 -1
- package/moj/init.js +11 -2
- package/moj/moj-frontend.min.css +1 -1
- package/moj/moj-frontend.min.css.map +1 -1
- package/moj/moj-frontend.min.js +1 -1
- package/moj/moj-frontend.min.js.map +1 -1
- package/moj/objects/_all.scss +2 -0
- package/moj/objects/_all.scss.map +1 -0
- package/moj/objects/_button-group.scss +2 -0
- package/moj/objects/_button-group.scss.map +1 -0
- package/moj/objects/_filter-layout.scss +2 -0
- package/moj/objects/_filter-layout.scss.map +1 -0
- package/moj/objects/_scrollable-pane.scss +2 -0
- package/moj/objects/_scrollable-pane.scss.map +1 -0
- package/moj/objects/_width-container.scss +2 -0
- package/moj/objects/_width-container.scss.map +1 -0
- package/moj/settings/_all.scss +2 -0
- package/moj/settings/_all.scss.map +1 -0
- package/moj/settings/_assets.scss +2 -0
- package/moj/settings/_assets.scss.map +1 -0
- package/moj/settings/_colours.scss +2 -0
- package/moj/settings/_colours.scss.map +1 -0
- package/moj/settings/_measurements.scss +2 -0
- package/moj/settings/_measurements.scss.map +1 -0
- package/moj/settings/_typography.scss +2 -0
- package/moj/settings/_typography.scss.map +1 -0
- package/moj/template.njk +13 -0
- package/moj/utilities/_all.scss +2 -0
- package/moj/utilities/_all.scss.map +1 -0
- package/moj/utilities/_hidden.scss +2 -0
- package/moj/utilities/_hidden.scss.map +1 -0
- package/moj/utilities/_width-container.scss +2 -0
- package/moj/utilities/_width-container.scss.map +1 -0
- package/moj/vendor/govuk-frontend/_base.scss +2 -0
- package/moj/vendor/govuk-frontend/_base.scss.map +1 -0
- package/moj/vendor/govuk-frontend/_index.scss +2 -0
- package/moj/vendor/govuk-frontend/_index.scss.map +1 -0
- package/package.json +5 -6
- package/moj/all.jquery.min.js +0 -1
- package/moj/all.jquery.min.js.map +0 -1
- package/moj/all.js +0 -2662
- package/moj/all.js.map +0 -1
- package/moj/components/add-another/add-another.js +0 -115
- package/moj/components/add-another/add-another.js.map +0 -1
- package/moj/components/alert/alert.js +0 -356
- package/moj/components/alert/alert.js.map +0 -1
- package/moj/components/alert/alert.spec.helper.js.map +0 -1
- package/moj/components/button-menu/button-menu.js +0 -338
- package/moj/components/button-menu/button-menu.js.map +0 -1
- package/moj/components/date-picker/date-picker.js +0 -970
- package/moj/components/date-picker/date-picker.js.map +0 -1
- package/moj/components/filter-toggle-button/filter-toggle-button.js +0 -102
- package/moj/components/filter-toggle-button/filter-toggle-button.js.map +0 -1
- package/moj/components/form-validator/form-validator.js +0 -205
- package/moj/components/form-validator/form-validator.js.map +0 -1
- package/moj/components/multi-file-upload/multi-file-upload.js +0 -241
- package/moj/components/multi-file-upload/multi-file-upload.js.map +0 -1
- package/moj/components/multi-select/multi-select.js +0 -86
- package/moj/components/multi-select/multi-select.js.map +0 -1
- package/moj/components/password-reveal/password-reveal.js +0 -44
- package/moj/components/password-reveal/password-reveal.js.map +0 -1
- package/moj/components/rich-text-editor/rich-text-editor.js +0 -166
- package/moj/components/rich-text-editor/rich-text-editor.js.map +0 -1
- package/moj/components/search-toggle/search-toggle.js +0 -63
- package/moj/components/search-toggle/search-toggle.js.map +0 -1
- package/moj/components/sortable-table/sortable-table.js +0 -147
- package/moj/components/sortable-table/sortable-table.js.map +0 -1
- package/moj/helpers.js +0 -200
- package/moj/helpers.js.map +0 -1
- package/moj/vendor/html5shiv.js +0 -326
- package/moj/vendor/jquery.js +0 -9300
- package/moj/version.js +0 -12
- package/moj/version.js.map +0 -1
- package/moj/version.mjs +0 -4
- package/moj/version.mjs.map +0 -1
package/moj/all.mjs
CHANGED
|
@@ -1,127 +1,34 @@
|
|
|
1
|
+
import { createAll } from 'govuk-frontend';
|
|
2
|
+
export { version } from './common/moj-frontend-version.mjs';
|
|
1
3
|
import { AddAnother } from './components/add-another/add-another.mjs';
|
|
2
4
|
import { Alert } from './components/alert/alert.mjs';
|
|
3
5
|
import { ButtonMenu } from './components/button-menu/button-menu.mjs';
|
|
4
6
|
import { DatePicker } from './components/date-picker/date-picker.mjs';
|
|
5
7
|
export { FilterToggleButton } from './components/filter-toggle-button/filter-toggle-button.mjs';
|
|
8
|
+
export { FormValidator } from './components/form-validator/form-validator.mjs';
|
|
6
9
|
export { MultiFileUpload } from './components/multi-file-upload/multi-file-upload.mjs';
|
|
7
10
|
import { MultiSelect } from './components/multi-select/multi-select.mjs';
|
|
8
11
|
import { PasswordReveal } from './components/password-reveal/password-reveal.mjs';
|
|
9
12
|
import { RichTextEditor } from './components/rich-text-editor/rich-text-editor.mjs';
|
|
10
13
|
import { SearchToggle } from './components/search-toggle/search-toggle.mjs';
|
|
11
14
|
import { SortableTable } from './components/sortable-table/sortable-table.mjs';
|
|
12
|
-
import { nodeListForEach } from './helpers.mjs';
|
|
13
|
-
export { version } from './version.mjs';
|
|
14
15
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
function initAll(
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
// Defaults to the entire document if nothing is set.
|
|
24
|
-
const scope = typeof options.scope !== 'undefined' ? options.scope : document;
|
|
25
|
-
|
|
26
|
-
const $addAnothers = scope.querySelectorAll('[data-module="moj-add-another"]');
|
|
27
|
-
|
|
28
|
-
nodeListForEach($addAnothers, function ($addAnother) {
|
|
29
|
-
new AddAnother($addAnother);
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
const $multiSelects = scope.querySelectorAll(
|
|
33
|
-
'[data-module="moj-multi-select"]'
|
|
34
|
-
);
|
|
35
|
-
|
|
36
|
-
nodeListForEach($multiSelects, function ($multiSelect) {
|
|
37
|
-
new MultiSelect({
|
|
38
|
-
container: $multiSelect.querySelector(
|
|
39
|
-
$multiSelect.getAttribute('data-multi-select-checkbox')
|
|
40
|
-
),
|
|
41
|
-
checkboxes: $multiSelect.querySelectorAll(
|
|
42
|
-
'tbody .govuk-checkboxes__input'
|
|
43
|
-
),
|
|
44
|
-
id_prefix: $multiSelect.getAttribute('data-multi-select-idprefix')
|
|
45
|
-
});
|
|
46
|
-
});
|
|
47
|
-
|
|
48
|
-
const $passwordReveals = scope.querySelectorAll(
|
|
49
|
-
'[data-module="moj-password-reveal"]'
|
|
50
|
-
);
|
|
51
|
-
|
|
52
|
-
nodeListForEach($passwordReveals, function ($passwordReveal) {
|
|
53
|
-
new PasswordReveal($passwordReveal);
|
|
54
|
-
});
|
|
55
|
-
|
|
56
|
-
const $richTextEditors = scope.querySelectorAll(
|
|
57
|
-
'[data-module="moj-rich-text-editor"]'
|
|
58
|
-
);
|
|
59
|
-
|
|
60
|
-
nodeListForEach($richTextEditors, function ($richTextEditor) {
|
|
61
|
-
const options = {
|
|
62
|
-
textarea: $($richTextEditor)
|
|
63
|
-
};
|
|
64
|
-
|
|
65
|
-
const toolbarAttr = $richTextEditor.getAttribute(
|
|
66
|
-
'data-moj-rich-text-editor-toolbar'
|
|
67
|
-
);
|
|
68
|
-
|
|
69
|
-
if (toolbarAttr) {
|
|
70
|
-
const toolbar = toolbarAttr.split(',');
|
|
71
|
-
|
|
72
|
-
options.toolbar = {};
|
|
73
|
-
|
|
74
|
-
for (const item in toolbar) {
|
|
75
|
-
options.toolbar[toolbar[item]] = true;
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
new RichTextEditor(options);
|
|
80
|
-
});
|
|
81
|
-
|
|
82
|
-
const $searchToggles = scope.querySelectorAll(
|
|
83
|
-
'[data-module="moj-search-toggle"]'
|
|
84
|
-
);
|
|
85
|
-
|
|
86
|
-
nodeListForEach($searchToggles, function ($searchToggle) {
|
|
87
|
-
new SearchToggle({
|
|
88
|
-
toggleButton: {
|
|
89
|
-
container: $($searchToggle.querySelector('.moj-search-toggle__toggle')),
|
|
90
|
-
text: $searchToggle.getAttribute('data-moj-search-toggle-text')
|
|
91
|
-
},
|
|
92
|
-
search: {
|
|
93
|
-
container: $($searchToggle.querySelector('.moj-search'))
|
|
94
|
-
}
|
|
95
|
-
});
|
|
96
|
-
});
|
|
97
|
-
|
|
98
|
-
const $sortableTables = scope.querySelectorAll(
|
|
99
|
-
'[data-module="moj-sortable-table"]'
|
|
100
|
-
);
|
|
101
|
-
|
|
102
|
-
nodeListForEach($sortableTables, function ($table) {
|
|
103
|
-
new SortableTable({
|
|
104
|
-
table: $table
|
|
105
|
-
});
|
|
106
|
-
});
|
|
107
|
-
|
|
108
|
-
const $datepickers = scope.querySelectorAll('[data-module="moj-date-picker"]');
|
|
109
|
-
|
|
110
|
-
nodeListForEach($datepickers, function ($datepicker) {
|
|
111
|
-
new DatePicker($datepicker, {}).init();
|
|
112
|
-
});
|
|
113
|
-
|
|
114
|
-
const $buttonMenus = scope.querySelectorAll('[data-module="moj-button-menu"]');
|
|
16
|
+
/**
|
|
17
|
+
* @param {Config} [config]
|
|
18
|
+
*/
|
|
19
|
+
function initAll(config) {
|
|
20
|
+
for (const Component of [AddAnother, Alert, ButtonMenu, DatePicker, MultiSelect, PasswordReveal, RichTextEditor, SearchToggle, SortableTable]) {
|
|
21
|
+
createAll(Component, undefined, config);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
115
24
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
25
|
+
/**
|
|
26
|
+
* @typedef {Parameters<typeof GOVUKFrontend.initAll>[0]} Config
|
|
27
|
+
*/
|
|
119
28
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
});
|
|
124
|
-
}
|
|
29
|
+
/**
|
|
30
|
+
* @import * as GOVUKFrontend from 'govuk-frontend'
|
|
31
|
+
*/
|
|
125
32
|
|
|
126
33
|
export { AddAnother, Alert, ButtonMenu, DatePicker, MultiSelect, PasswordReveal, RichTextEditor, SearchToggle, SortableTable, initAll };
|
|
127
34
|
//# sourceMappingURL=all.mjs.map
|
package/moj/all.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"all.mjs","sources":["../../src/moj/all.mjs"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"all.mjs","sources":["../../src/moj/all.mjs"],"sourcesContent":["import { createAll } from 'govuk-frontend'\n\nimport { version } from './common/moj-frontend-version.mjs'\nimport { AddAnother } from './components/add-another/add-another.mjs'\nimport { Alert } from './components/alert/alert.mjs'\nimport { ButtonMenu } from './components/button-menu/button-menu.mjs'\nimport { DatePicker } from './components/date-picker/date-picker.mjs'\nimport { FilterToggleButton } from './components/filter-toggle-button/filter-toggle-button.mjs'\nimport { FormValidator } from './components/form-validator/form-validator.mjs'\nimport { MultiFileUpload } from './components/multi-file-upload/multi-file-upload.mjs'\nimport { MultiSelect } from './components/multi-select/multi-select.mjs'\nimport { PasswordReveal } from './components/password-reveal/password-reveal.mjs'\nimport { RichTextEditor } from './components/rich-text-editor/rich-text-editor.mjs'\nimport { SearchToggle } from './components/search-toggle/search-toggle.mjs'\nimport { SortableTable } from './components/sortable-table/sortable-table.mjs'\n\n/**\n * @param {Config} [config]\n */\nfunction initAll(config) {\n for (const Component of [\n AddAnother,\n Alert,\n ButtonMenu,\n DatePicker,\n MultiSelect,\n PasswordReveal,\n RichTextEditor,\n SearchToggle,\n SortableTable\n ]) {\n createAll(Component, undefined, config)\n }\n}\n\nexport {\n initAll,\n version,\n\n // Components\n AddAnother,\n Alert,\n ButtonMenu,\n DatePicker,\n FilterToggleButton,\n FormValidator,\n MultiFileUpload,\n MultiSelect,\n PasswordReveal,\n RichTextEditor,\n SearchToggle,\n SortableTable\n}\n\n/**\n * @typedef {Parameters<typeof GOVUKFrontend.initAll>[0]} Config\n */\n\n/**\n * @import * as GOVUKFrontend from 'govuk-frontend'\n */\n"],"names":["initAll","config","Component","AddAnother","Alert","ButtonMenu","DatePicker","MultiSelect","PasswordReveal","RichTextEditor","SearchToggle","SortableTable","createAll","undefined"],"mappings":";;;;;;;;;;;;;;;AAgBA;AACA;AACA;AACA,SAASA,OAAOA,CAACC,MAAM,EAAE;EACvB,KAAK,MAAMC,SAAS,IAAI,CACtBC,UAAU,EACVC,KAAK,EACLC,UAAU,EACVC,UAAU,EACVC,WAAW,EACXC,cAAc,EACdC,cAAc,EACdC,YAAY,EACZC,aAAa,CACd,EAAE;AACDC,IAAAA,SAAS,CAACV,SAAS,EAAEW,SAAS,EAAEZ,MAAM,CAAC;AACzC;AACF;;AAqBA;AACA;AACA;;AAEA;AACA;AACA;;;;"}
|
package/moj/all.scss
CHANGED
package/moj/all.scss.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/moj/all.scss"],"names":[],"mappings":"AAAA,eAAe;AACf,mBAAmB;AACnB,sBAAsB;AACtB,yBAAyB;AACzB,wBAAwB","file":"all.scss","sourcesContent":["@forward \"base\";\n@forward \"core/all\";\n@forward \"objects/all\";\n@forward \"components/all\";\n@forward \"utilities/all\";\n"]}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GOV.UK Frontend helpers
|
|
3
|
+
*
|
|
4
|
+
* @todo Import from GOV.UK Frontend
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Move focus to element
|
|
9
|
+
*
|
|
10
|
+
* Sets tabindex to -1 to make the element programmatically focusable,
|
|
11
|
+
* but removes it on blur as the element doesn't need to be focused again.
|
|
12
|
+
*
|
|
13
|
+
* @template {HTMLElement} FocusElement
|
|
14
|
+
* @param {FocusElement} $element - HTML element
|
|
15
|
+
* @param {object} [options] - Handler options
|
|
16
|
+
* @param {function(this: FocusElement): void} [options.onBeforeFocus] - Callback before focus
|
|
17
|
+
* @param {function(this: FocusElement): void} [options.onBlur] - Callback on blur
|
|
18
|
+
*/
|
|
19
|
+
function setFocus($element, options = {}) {
|
|
20
|
+
var _options$onBeforeFocu;
|
|
21
|
+
const isFocusable = $element.getAttribute('tabindex');
|
|
22
|
+
if (!isFocusable) {
|
|
23
|
+
$element.setAttribute('tabindex', '-1');
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Handle element focus
|
|
28
|
+
*/
|
|
29
|
+
function onFocus() {
|
|
30
|
+
$element.addEventListener('blur', onBlur, {
|
|
31
|
+
once: true
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Handle element blur
|
|
37
|
+
*/
|
|
38
|
+
function onBlur() {
|
|
39
|
+
var _options$onBlur;
|
|
40
|
+
(_options$onBlur = options.onBlur) == null || _options$onBlur.call($element);
|
|
41
|
+
if (!isFocusable) {
|
|
42
|
+
$element.removeAttribute('tabindex');
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// Add listener to reset element on blur, after focus
|
|
47
|
+
$element.addEventListener('focus', onFocus, {
|
|
48
|
+
once: true
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
// Focus element
|
|
52
|
+
(_options$onBeforeFocu = options.onBeforeFocus) == null || _options$onBeforeFocu.call($element);
|
|
53
|
+
$element.focus();
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export { setFocus };
|
|
57
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../src/moj/common/index.mjs"],"sourcesContent":["/**\n * GOV.UK Frontend helpers\n *\n * @todo Import from GOV.UK Frontend\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 * @template {HTMLElement} FocusElement\n * @param {FocusElement} $element - HTML element\n * @param {object} [options] - Handler options\n * @param {function(this: FocusElement): void} [options.onBeforeFocus] - Callback before focus\n * @param {function(this: FocusElement): 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 options.onBlur?.call($element)\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 options.onBeforeFocus?.call($element)\n $element.focus()\n}\n"],"names":["setFocus","$element","options","_options$onBeforeFocu","isFocusable","getAttribute","setAttribute","onFocus","addEventListener","onBlur","once","_options$onBlur","call","removeAttribute","onBeforeFocus","focus"],"mappings":"AAAA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,QAAQA,CAACC,QAAQ,EAAEC,OAAO,GAAG,EAAE,EAAE;AAAA,EAAA,IAAAC,qBAAA;AAC/C,EAAA,MAAMC,WAAW,GAAGH,QAAQ,CAACI,YAAY,CAAC,UAAU,CAAC;EAErD,IAAI,CAACD,WAAW,EAAE;AAChBH,IAAAA,QAAQ,CAACK,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC;AACzC;;AAEA;AACF;AACA;EACE,SAASC,OAAOA,GAAG;AACjBN,IAAAA,QAAQ,CAACO,gBAAgB,CAAC,MAAM,EAAEC,MAAM,EAAE;AAAEC,MAAAA,IAAI,EAAE;AAAK,KAAC,CAAC;AAC3D;;AAEA;AACF;AACA;EACE,SAASD,MAAMA,GAAG;AAAA,IAAA,IAAAE,eAAA;IAChB,CAAAA,eAAA,GAAAT,OAAO,CAACO,MAAM,KAAdE,IAAAA,IAAAA,eAAA,CAAgBC,IAAI,CAACX,QAAQ,CAAC;IAE9B,IAAI,CAACG,WAAW,EAAE;AAChBH,MAAAA,QAAQ,CAACY,eAAe,CAAC,UAAU,CAAC;AACtC;AACF;;AAEA;AACAZ,EAAAA,QAAQ,CAACO,gBAAgB,CAAC,OAAO,EAAED,OAAO,EAAE;AAAEG,IAAAA,IAAI,EAAE;AAAK,GAAC,CAAC;;AAE3D;EACA,CAAAP,qBAAA,GAAAD,OAAO,CAACY,aAAa,KAArBX,IAAAA,IAAAA,qBAAA,CAAuBS,IAAI,CAACX,QAAQ,CAAC;EACrCA,QAAQ,CAACc,KAAK,EAAE;AAClB;;;;"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* This variable is automatically overwritten during builds and releases.
|
|
3
|
+
* It doesn't need to be updated manually.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* MoJ Frontend release version
|
|
8
|
+
*
|
|
9
|
+
* {@link https://github.com/ministryofjustice/moj-frontend/releases}
|
|
10
|
+
*/
|
|
11
|
+
const version = '5.1.0';
|
|
12
|
+
|
|
13
|
+
export { version };
|
|
14
|
+
//# sourceMappingURL=moj-frontend-version.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"moj-frontend-version.mjs","sources":["../../../src/moj/common/moj-frontend-version.mjs"],"sourcesContent":["/*\n * This variable is automatically overwritten during builds and releases.\n * It doesn't need to be updated manually.\n */\n\n/**\n * MoJ Frontend release version\n *\n * {@link https://github.com/ministryofjustice/moj-frontend/releases}\n */\nexport const version = 'development'\n"],"names":["version"],"mappings":"AAAA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACO,MAAMA,OAAO,GAAG;;;;"}
|
package/moj/components/_all.scss
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/moj/components/_all.scss"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,kCAAkC;AAClC,sBAAsB;AACtB,sBAAsB;AACtB,wBAAwB;AACxB,kCAAkC;AAClC,sCAAsC;AACtC,wCAAwC;AACxC,kCAAkC;AAClC,wBAAwB;AACxB,wBAAwB;AACxB,oCAAoC;AACpC,8CAA8C;AAC9C,4BAA4B;AAC5B,8CAA8C;AAC9C,oCAAoC;AACpC,gDAAgD;AAChD,sDAAsD;AACtD,kDAAkD;AAClD,gCAAgC;AAChC,0CAA0C;AAC1C,gDAAgD;AAChD,oCAAoC;AACpC,4CAA4C;AAC5C,sCAAsC;AACtC,wBAAwB;AACxB,0CAA0C;AAC1C,wCAAwC;AACxC,wCAAwC;AACxC,kBAAkB;AAClB,8BAA8B;AAC9B,4BAA4B;AAC5B,oCAAoC","file":"_all.scss","sourcesContent":["@forward \"action-bar/action-bar\";\n@forward \"add-another/add-another\";\n@forward \"alert/alert\";\n@forward \"badge/badge\";\n@forward \"banner/banner\";\n@forward \"button-menu/button-menu\";\n@forward \"cookie-banner/cookie-banner\";\n@forward \"currency-input/currency-input\";\n@forward \"date-picker/date-picker\";\n@forward \"filter/filter\";\n@forward \"header/header\";\n@forward \"identity-bar/identity-bar\";\n@forward \"interruption-card/interruption-card\";\n@forward \"messages/messages\";\n@forward \"multi-file-upload/multi-file-upload\";\n@forward \"multi-select/multi-select\";\n@forward \"notification-badge/notification-badge\";\n@forward \"organisation-switcher/organisation-switcher\";\n@forward \"page-header-actions/page-header-actions\";\n@forward \"pagination/pagination\";\n@forward \"password-reveal/password-reveal\";\n@forward \"primary-navigation/primary-navigation\";\n@forward \"progress-bar/progress-bar\";\n@forward \"rich-text-editor/rich-text-editor\";\n@forward \"search-toggle/search-toggle\";\n@forward \"search/search\";\n@forward \"side-navigation/side-navigation\";\n@forward \"sortable-table/sortable-table\";\n@forward \"sub-navigation/sub-navigation\";\n@forward \"tag/tag\";\n@forward \"task-list/task-list\";\n@forward \"timeline/timeline\";\n@forward \"ticket-panel/ticket-panel\";\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/moj/components/action-bar/_action-bar.scss"],"names":[],"mappings":"AAAA,uCAAuC;;AAEvC;EACE,YAAY,EAAE,qBAAqB;AACrC;;AAEA;EACE,qBAAqB;EACrB,kBAAkB;;EAElB;IACE,YAAY;EACd;;EAEA;IACE,8BAA8B;IAC9B,qCAAqC,EAAE,kCAAkC;;IAEzE;MACE,WAAW;MACX,kBAAkB;MAClB,MAAM;MACN,QAAQ;MACR,UAAU;MACV,YAAY;MACZ,4CAA4C;IAC9C;EACF;;EAEA;IACE,wBAAwB;EAC1B;AACF","file":"_action-bar.scss","sourcesContent":["@use \"../../vendor/govuk-frontend\" as *;\n\n.moj-action-bar {\n font-size: 0; // Removes white space\n}\n\n.moj-action-bar__filter {\n display: inline-block;\n position: relative;\n\n @include govuk-media-query($until: desktop) {\n float: right;\n }\n\n @include govuk-media-query($from: desktop) {\n margin-right: govuk-spacing(2);\n padding-right: govuk-spacing(2) + 2px; // Takes into account divider width\n\n &::after {\n content: \"\";\n position: absolute;\n top: 0;\n right: 0;\n width: 2px;\n height: 40px;\n background-color: govuk-colour(\"light-grey\");\n }\n }\n\n > .govuk-button {\n vertical-align: baseline;\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/moj/components/add-another/_add-another.scss"],"names":[],"mappings":"AAAA,uCAAuC;;AAEvC;;+EAE+E;;AAE/E;EACE;IACE,kBAAkB;IAClB,SAAS;IACT,4BAA4B;IAC5B,UAAU;;IAEV;MACE,aAAa;IACf;EACF;;EAEA;IACE,WAAW;IACX,wBAAwB;IACxB,WAAW;;IAEX;MACE,WAAW;IACb;EACF;;EAEA;IACE,kBAAkB;IAClB,MAAM;IACN,QAAQ;IACR,WAAW;EACb;;EAEA;IACE,cAAc;EAChB;AACF;;AAEA;EACE,aAAa;EACb,+BAA+B;EAC/B,qCAAqC;EACrC;;kCAEgC;AAClC","file":"_add-another.scss","sourcesContent":["@use \"../../vendor/govuk-frontend\" as *;\n\n/* ==========================================================================\n #ADD ANOTHER\n ========================================================================== */\n\n.moj-add-another {\n &__item {\n position: relative;\n margin: 0;\n margin-top: govuk-spacing(6);\n padding: 0;\n\n &:first-of-type {\n margin-top: 0;\n }\n }\n\n &__title {\n width: 100%;\n padding: 4px 100px 4px 0;\n float: left;\n\n & + .govuk-form-group {\n clear: left;\n }\n }\n\n &__remove-button {\n position: absolute;\n top: 0;\n right: 0;\n width: auto;\n }\n\n &__add-button {\n display: block;\n }\n}\n\n.moj-add-another__heading:focus {\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"]}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
(function (global, factory) {
|
|
2
|
+
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('govuk-frontend')) :
|
|
3
|
+
typeof define === 'function' && define.amd ? define(['exports', 'govuk-frontend'], factory) :
|
|
4
|
+
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.MOJFrontend = global.MOJFrontend || {}, global.GOVUKFrontend));
|
|
5
|
+
})(this, (function (exports, govukFrontend) { 'use strict';
|
|
6
|
+
|
|
7
|
+
class AddAnother extends govukFrontend.Component {
|
|
8
|
+
/**
|
|
9
|
+
* @param {Element | null} $root - HTML element to use for add another
|
|
10
|
+
*/
|
|
11
|
+
constructor($root) {
|
|
12
|
+
super($root);
|
|
13
|
+
this.$root.addEventListener('click', this.onRemoveButtonClick.bind(this));
|
|
14
|
+
this.$root.addEventListener('click', this.onAddButtonClick.bind(this));
|
|
15
|
+
const $buttons = this.$root.querySelectorAll('.moj-add-another__add-button, moj-add-another__remove-button');
|
|
16
|
+
$buttons.forEach($button => {
|
|
17
|
+
if (!($button instanceof HTMLButtonElement)) {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
$button.type = 'button';
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* @param {MouseEvent} event - Click event
|
|
26
|
+
*/
|
|
27
|
+
onAddButtonClick(event) {
|
|
28
|
+
const $button = event.target;
|
|
29
|
+
if (!$button || !($button instanceof HTMLButtonElement) || !$button.classList.contains('moj-add-another__add-button')) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const $items = this.getItems();
|
|
33
|
+
const $item = this.getNewItem();
|
|
34
|
+
if (!$item || !($item instanceof HTMLElement)) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
this.updateAttributes($item, $items.length);
|
|
38
|
+
this.resetItem($item);
|
|
39
|
+
const $firstItem = $items[0];
|
|
40
|
+
if (!this.hasRemoveButton($firstItem)) {
|
|
41
|
+
this.createRemoveButton($firstItem);
|
|
42
|
+
}
|
|
43
|
+
$items[$items.length - 1].after($item);
|
|
44
|
+
const $input = $item.querySelector('input, textarea, select');
|
|
45
|
+
if ($input && $input instanceof HTMLInputElement) {
|
|
46
|
+
$input.focus();
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* @param {HTMLElement} $item - Add another item
|
|
52
|
+
*/
|
|
53
|
+
hasRemoveButton($item) {
|
|
54
|
+
return $item.querySelectorAll('.moj-add-another__remove-button').length;
|
|
55
|
+
}
|
|
56
|
+
getItems() {
|
|
57
|
+
if (!this.$root) {
|
|
58
|
+
return [];
|
|
59
|
+
}
|
|
60
|
+
const $items = Array.from(this.$root.querySelectorAll('.moj-add-another__item'));
|
|
61
|
+
return $items.filter(item => item instanceof HTMLElement);
|
|
62
|
+
}
|
|
63
|
+
getNewItem() {
|
|
64
|
+
const $items = this.getItems();
|
|
65
|
+
const $item = $items[0].cloneNode(true);
|
|
66
|
+
if (!$item || !($item instanceof HTMLElement)) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
if (!this.hasRemoveButton($item)) {
|
|
70
|
+
this.createRemoveButton($item);
|
|
71
|
+
}
|
|
72
|
+
return $item;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* @param {HTMLElement} $item - Add another item
|
|
77
|
+
* @param {number} index - Add another item index
|
|
78
|
+
*/
|
|
79
|
+
updateAttributes($item, index) {
|
|
80
|
+
$item.querySelectorAll('[data-name]').forEach($input => {
|
|
81
|
+
if (!($input instanceof HTMLInputElement)) {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
const name = $input.getAttribute('data-name') || '';
|
|
85
|
+
const id = $input.getAttribute('data-id') || '';
|
|
86
|
+
const originalId = $input.id;
|
|
87
|
+
$input.name = name.replace(/%index%/, `${index}`);
|
|
88
|
+
$input.id = id.replace(/%index%/, `${index}`);
|
|
89
|
+
const $label = $input.parentElement.querySelector('label') || $input.closest('label') || $item.querySelector(`[for="${originalId}"]`);
|
|
90
|
+
if ($label && $label instanceof HTMLLabelElement) {
|
|
91
|
+
$label.htmlFor = $input.id;
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* @param {HTMLElement} $item - Add another item
|
|
98
|
+
*/
|
|
99
|
+
createRemoveButton($item) {
|
|
100
|
+
const $button = document.createElement('button');
|
|
101
|
+
$button.type = 'button';
|
|
102
|
+
$button.classList.add('govuk-button', 'govuk-button--secondary', 'moj-add-another__remove-button');
|
|
103
|
+
$button.textContent = 'Remove';
|
|
104
|
+
$item.append($button);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* @param {HTMLElement} $item - Add another item
|
|
109
|
+
*/
|
|
110
|
+
resetItem($item) {
|
|
111
|
+
$item.querySelectorAll('[data-name], [data-id]').forEach($input => {
|
|
112
|
+
if (!($input instanceof HTMLInputElement)) {
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
if ($input.type === 'checkbox' || $input.type === 'radio') {
|
|
116
|
+
$input.checked = false;
|
|
117
|
+
} else {
|
|
118
|
+
$input.value = '';
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* @param {MouseEvent} event - Click event
|
|
125
|
+
*/
|
|
126
|
+
onRemoveButtonClick(event) {
|
|
127
|
+
const $button = event.target;
|
|
128
|
+
if (!$button || !($button instanceof HTMLButtonElement) || !$button.classList.contains('moj-add-another__remove-button')) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
$button.closest('.moj-add-another__item').remove();
|
|
132
|
+
const $items = this.getItems();
|
|
133
|
+
if ($items.length === 1) {
|
|
134
|
+
$items[0].querySelector('.moj-add-another__remove-button').remove();
|
|
135
|
+
}
|
|
136
|
+
$items.forEach(($item, index) => {
|
|
137
|
+
this.updateAttributes($item, index);
|
|
138
|
+
});
|
|
139
|
+
this.focusHeading();
|
|
140
|
+
}
|
|
141
|
+
focusHeading() {
|
|
142
|
+
const $heading = this.$root.querySelector('.moj-add-another__heading');
|
|
143
|
+
if ($heading && $heading instanceof HTMLElement) {
|
|
144
|
+
$heading.focus();
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Name for the component used when initialising using data-module attributes.
|
|
150
|
+
*/
|
|
151
|
+
}
|
|
152
|
+
AddAnother.moduleName = 'moj-add-another';
|
|
153
|
+
|
|
154
|
+
exports.AddAnother = AddAnother;
|
|
155
|
+
|
|
156
|
+
}));
|
|
157
|
+
//# sourceMappingURL=add-another.bundle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add-another.bundle.js","sources":["../../../../src/moj/components/add-another/add-another.mjs"],"sourcesContent":["import { Component } from 'govuk-frontend'\n\nexport class AddAnother extends Component {\n /**\n * @param {Element | null} $root - HTML element to use for add another\n */\n constructor($root) {\n super($root)\n\n this.$root.addEventListener('click', this.onRemoveButtonClick.bind(this))\n this.$root.addEventListener('click', this.onAddButtonClick.bind(this))\n\n const $buttons = this.$root.querySelectorAll(\n '.moj-add-another__add-button, moj-add-another__remove-button'\n )\n\n $buttons.forEach(($button) => {\n if (!($button instanceof HTMLButtonElement)) {\n return\n }\n\n $button.type = 'button'\n })\n }\n\n /**\n * @param {MouseEvent} event - Click event\n */\n onAddButtonClick(event) {\n const $button = event.target\n\n if (\n !$button ||\n !($button instanceof HTMLButtonElement) ||\n !$button.classList.contains('moj-add-another__add-button')\n ) {\n return\n }\n\n const $items = this.getItems()\n const $item = this.getNewItem()\n\n if (!$item || !($item instanceof HTMLElement)) {\n return\n }\n\n this.updateAttributes($item, $items.length)\n this.resetItem($item)\n\n const $firstItem = $items[0]\n if (!this.hasRemoveButton($firstItem)) {\n this.createRemoveButton($firstItem)\n }\n\n $items[$items.length - 1].after($item)\n\n const $input = $item.querySelector('input, textarea, select')\n if ($input && $input instanceof HTMLInputElement) {\n $input.focus()\n }\n }\n\n /**\n * @param {HTMLElement} $item - Add another item\n */\n hasRemoveButton($item) {\n return $item.querySelectorAll('.moj-add-another__remove-button').length\n }\n\n getItems() {\n if (!this.$root) {\n return []\n }\n\n const $items = Array.from(\n this.$root.querySelectorAll('.moj-add-another__item')\n )\n\n return $items.filter((item) => item instanceof HTMLElement)\n }\n\n getNewItem() {\n const $items = this.getItems()\n const $item = $items[0].cloneNode(true)\n\n if (!$item || !($item instanceof HTMLElement)) {\n return\n }\n\n if (!this.hasRemoveButton($item)) {\n this.createRemoveButton($item)\n }\n\n return $item\n }\n\n /**\n * @param {HTMLElement} $item - Add another item\n * @param {number} index - Add another item index\n */\n updateAttributes($item, index) {\n $item.querySelectorAll('[data-name]').forEach(($input) => {\n if (!($input instanceof HTMLInputElement)) {\n return\n }\n\n const name = $input.getAttribute('data-name') || ''\n const id = $input.getAttribute('data-id') || ''\n const originalId = $input.id\n\n $input.name = name.replace(/%index%/, `${index}`)\n $input.id = id.replace(/%index%/, `${index}`)\n\n const $label =\n $input.parentElement.querySelector('label') ||\n $input.closest('label') ||\n $item.querySelector(`[for=\"${originalId}\"]`)\n\n if ($label && $label instanceof HTMLLabelElement) {\n $label.htmlFor = $input.id\n }\n })\n }\n\n /**\n * @param {HTMLElement} $item - Add another item\n */\n createRemoveButton($item) {\n const $button = document.createElement('button')\n $button.type = 'button'\n\n $button.classList.add(\n 'govuk-button',\n 'govuk-button--secondary',\n 'moj-add-another__remove-button'\n )\n\n $button.textContent = 'Remove'\n\n $item.append($button)\n }\n\n /**\n * @param {HTMLElement} $item - Add another item\n */\n resetItem($item) {\n $item.querySelectorAll('[data-name], [data-id]').forEach(($input) => {\n if (!($input instanceof HTMLInputElement)) {\n return\n }\n\n if ($input.type === 'checkbox' || $input.type === 'radio') {\n $input.checked = false\n } else {\n $input.value = ''\n }\n })\n }\n\n /**\n * @param {MouseEvent} event - Click event\n */\n onRemoveButtonClick(event) {\n const $button = event.target\n\n if (\n !$button ||\n !($button instanceof HTMLButtonElement) ||\n !$button.classList.contains('moj-add-another__remove-button')\n ) {\n return\n }\n\n $button.closest('.moj-add-another__item').remove()\n\n const $items = this.getItems()\n\n if ($items.length === 1) {\n $items[0].querySelector('.moj-add-another__remove-button').remove()\n }\n\n $items.forEach(($item, index) => {\n this.updateAttributes($item, index)\n })\n\n this.focusHeading()\n }\n\n focusHeading() {\n const $heading = this.$root.querySelector('.moj-add-another__heading')\n\n if ($heading && $heading instanceof HTMLElement) {\n $heading.focus()\n }\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'moj-add-another'\n}\n"],"names":["AddAnother","Component","constructor","$root","addEventListener","onRemoveButtonClick","bind","onAddButtonClick","$buttons","querySelectorAll","forEach","$button","HTMLButtonElement","type","event","target","classList","contains","$items","getItems","$item","getNewItem","HTMLElement","updateAttributes","length","resetItem","$firstItem","hasRemoveButton","createRemoveButton","after","$input","querySelector","HTMLInputElement","focus","Array","from","filter","item","cloneNode","index","name","getAttribute","id","originalId","replace","$label","parentElement","closest","HTMLLabelElement","htmlFor","document","createElement","add","textContent","append","checked","value","remove","focusHeading","$heading","moduleName"],"mappings":"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"}
|