@atlassian/aui 9.3.21 → 9.3.23
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/LICENSE.md +1 -1
- package/README.md +7 -9
- package/dist/aui/aui-css-deprecations.js +1 -1
- package/dist/aui/aui-css-deprecations.js.map +1 -1
- package/dist/aui/aui-prototyping-browserfocus.css +1 -353
- package/dist/aui/aui-prototyping-darkmode.css +1 -262
- package/dist/aui/aui-prototyping.css +10 -10
- package/dist/aui/aui-prototyping.js +7 -7
- package/dist/aui/aui-prototyping.js.map +1 -1
- package/dist/aui/aui-prototyping.nodeps.css +10 -10
- package/dist/aui/aui-prototyping.nodeps.js +9 -9
- package/dist/aui/aui-prototyping.nodeps.js.map +1 -1
- package/entry/aui.batch.components.js +21 -21
- package/entry/aui.batch.page.js +3 -3
- package/entry/aui.batch.patterns.js +20 -20
- package/entry/aui.batch.prototyping.js +3 -11
- package/entry/aui.component.nav.js +1 -1
- package/entry/aui.component.progressbar.js +4 -1
- package/entry/aui.side-effects.js +2 -2
- package/entry/behaviours/aui.behaviour.format.js +1 -1
- package/entry/behaviours/aui.behaviour.i18n.js +1 -1
- package/entry/behaviours/aui.behaviour.keyboard-shortcuts.js +1 -1
- package/entry/behaviours/aui.behaviour.progressive-data-set.js +1 -1
- package/entry/behaviours/aui.behaviour.version.js +1 -1
- package/entry/deprecated/aui.component.inline-dialog1.js +1 -1
- package/package.json +3 -7
- package/src/js/aui/alphanum.js +1 -1
- package/src/js/aui/banner.js +2 -2
- package/src/js/aui/blanket.js +7 -11
- package/src/js/aui/button.js +5 -5
- package/src/js/aui/checkbox-multiselect.js +79 -76
- package/src/js/aui/clone.js +1 -1
- package/src/js/aui/close-button.js +2 -6
- package/src/js/aui/contain-dropdown.js +5 -5
- package/src/js/aui/contains.js +1 -1
- package/src/js/aui/cookie.js +12 -16
- package/src/js/aui/date-picker.js +84 -69
- package/src/js/aui/debounce.js +5 -8
- package/src/js/aui/dialog.js +206 -172
- package/src/js/aui/dialog2.js +9 -8
- package/src/js/aui/dropdown2.js +211 -181
- package/src/js/aui/escape-html.js +2 -2
- package/src/js/aui/escape.js +1 -1
- package/src/js/aui/event.js +4 -8
- package/src/js/aui/expander.js +9 -7
- package/src/js/aui/flag.js +15 -17
- package/src/js/aui/focus-manager.js +19 -18
- package/src/js/aui/form-notification.js +14 -13
- package/src/js/aui/form-validation/basic-validators.js +39 -30
- package/src/js/aui/form-validation/validator-register.js +9 -5
- package/src/js/aui/form-validation.js +17 -14
- package/src/js/aui/format.js +9 -6
- package/src/js/aui/forms/create-forms-component-body.js +6 -9
- package/src/js/aui/forms/custom-checkbox.js +2 -6
- package/src/js/aui/forms/custom-radio.js +2 -6
- package/src/js/aui/forms.js +4 -8
- package/src/js/aui/header-async.js +1 -1
- package/src/js/aui/header.js +2 -2
- package/src/js/aui/i18n.js +2 -5
- package/src/js/aui/index-of.js +1 -1
- package/src/js/aui/inline-dialog.js +171 -117
- package/src/js/aui/inline-dialog2.js +60 -50
- package/src/js/aui/internal/add-id.js +1 -1
- package/src/js/aui/internal/alignment.js +57 -49
- package/src/js/aui/internal/amdify.js +0 -1
- package/src/js/aui/internal/animation.js +2 -5
- package/src/js/aui/internal/attributes.js +2 -3
- package/src/js/aui/internal/browser.js +5 -6
- package/src/js/aui/internal/constants.js +1 -3
- package/src/js/aui/internal/deduplicateIDs.js +8 -7
- package/src/js/aui/internal/deprecation/deprecated-adg2-icons.js +132 -132
- package/src/js/aui/internal/deprecation.js +53 -31
- package/src/js/aui/internal/detect-children-change.js +3 -2
- package/src/js/aui/internal/elements.js +2 -5
- package/src/js/aui/internal/enforcer.js +11 -13
- package/src/js/aui/internal/globalize.js +3 -3
- package/src/js/aui/internal/has-touch.js +1 -2
- package/src/js/aui/internal/header/create-header.js +54 -28
- package/src/js/aui/internal/i18n/aui.js +8 -5
- package/src/js/aui/internal/i18n/aui_af.js +31 -31
- package/src/js/aui/internal/i18n/aui_ar.js +31 -31
- package/src/js/aui/internal/i18n/aui_ar_DZ.js +31 -31
- package/src/js/aui/internal/i18n/aui_az.js +31 -31
- package/src/js/aui/internal/i18n/aui_bg.js +31 -31
- package/src/js/aui/internal/i18n/aui_bs.js +31 -31
- package/src/js/aui/internal/i18n/aui_ca.js +31 -31
- package/src/js/aui/internal/i18n/aui_cs.js +31 -31
- package/src/js/aui/internal/i18n/aui_da.js +31 -31
- package/src/js/aui/internal/i18n/aui_de.js +31 -31
- package/src/js/aui/internal/i18n/aui_el.js +31 -31
- package/src/js/aui/internal/i18n/aui_en_AU.js +31 -31
- package/src/js/aui/internal/i18n/aui_en_GB.js +31 -31
- package/src/js/aui/internal/i18n/aui_en_NZ.js +31 -31
- package/src/js/aui/internal/i18n/aui_eo.js +31 -31
- package/src/js/aui/internal/i18n/aui_es.js +31 -31
- package/src/js/aui/internal/i18n/aui_et.js +31 -31
- package/src/js/aui/internal/i18n/aui_eu.js +31 -31
- package/src/js/aui/internal/i18n/aui_fa.js +31 -31
- package/src/js/aui/internal/i18n/aui_fi.js +31 -31
- package/src/js/aui/internal/i18n/aui_fo.js +31 -31
- package/src/js/aui/internal/i18n/aui_fr.js +31 -31
- package/src/js/aui/internal/i18n/aui_fr_CH.js +31 -31
- package/src/js/aui/internal/i18n/aui_gl.js +31 -31
- package/src/js/aui/internal/i18n/aui_he.js +31 -31
- package/src/js/aui/internal/i18n/aui_hr.js +31 -31
- package/src/js/aui/internal/i18n/aui_hu.js +31 -31
- package/src/js/aui/internal/i18n/aui_hy.js +31 -31
- package/src/js/aui/internal/i18n/aui_id.js +31 -31
- package/src/js/aui/internal/i18n/aui_is.js +31 -31
- package/src/js/aui/internal/i18n/aui_it.js +31 -31
- package/src/js/aui/internal/i18n/aui_ja.js +31 -31
- package/src/js/aui/internal/i18n/aui_ko.js +31 -31
- package/src/js/aui/internal/i18n/aui_kz.js +31 -31
- package/src/js/aui/internal/i18n/aui_lt.js +31 -31
- package/src/js/aui/internal/i18n/aui_lv.js +31 -31
- package/src/js/aui/internal/i18n/aui_ml.js +31 -31
- package/src/js/aui/internal/i18n/aui_ms.js +31 -31
- package/src/js/aui/internal/i18n/aui_nl.js +31 -31
- package/src/js/aui/internal/i18n/aui_no.js +31 -31
- package/src/js/aui/internal/i18n/aui_pl.js +31 -31
- package/src/js/aui/internal/i18n/aui_pt.js +31 -31
- package/src/js/aui/internal/i18n/aui_pt_BR.js +31 -31
- package/src/js/aui/internal/i18n/aui_rm.js +31 -31
- package/src/js/aui/internal/i18n/aui_ro.js +31 -31
- package/src/js/aui/internal/i18n/aui_ru.js +31 -31
- package/src/js/aui/internal/i18n/aui_sk.js +31 -31
- package/src/js/aui/internal/i18n/aui_sl.js +31 -31
- package/src/js/aui/internal/i18n/aui_sq.js +31 -31
- package/src/js/aui/internal/i18n/aui_sr.js +31 -31
- package/src/js/aui/internal/i18n/aui_sr_SR.js +31 -31
- package/src/js/aui/internal/i18n/aui_sv.js +31 -31
- package/src/js/aui/internal/i18n/aui_ta.js +31 -31
- package/src/js/aui/internal/i18n/aui_th.js +31 -31
- package/src/js/aui/internal/i18n/aui_tj.js +31 -31
- package/src/js/aui/internal/i18n/aui_tr.js +31 -31
- package/src/js/aui/internal/i18n/aui_uk.js +31 -31
- package/src/js/aui/internal/i18n/aui_vi.js +31 -31
- package/src/js/aui/internal/i18n/aui_zh_CN.js +31 -31
- package/src/js/aui/internal/i18n/aui_zh_HK.js +31 -31
- package/src/js/aui/internal/i18n/aui_zh_TW.js +31 -31
- package/src/js/aui/internal/log.js +2 -6
- package/src/js/aui/internal/mediaQuery.js +2 -3
- package/src/js/aui/internal/select/option.js +3 -3
- package/src/js/aui/internal/select/suggestion-model.js +1 -1
- package/src/js/aui/internal/select/suggestions-model.js +4 -5
- package/src/js/aui/internal/select/suggestions-view.js +17 -12
- package/src/js/aui/internal/state.js +2 -3
- package/src/js/aui/is-clipped.js +2 -2
- package/src/js/aui/key-code.js +1 -1
- package/src/js/aui/label.js +6 -6
- package/src/js/aui/layer.js +100 -98
- package/src/js/aui/messages.js +51 -38
- package/src/js/aui/navigation.js +7 -9
- package/src/js/aui/on-text-resize.js +7 -5
- package/src/js/aui/params.js +11 -8
- package/src/js/aui/polyfills/custom-event.js +7 -7
- package/src/js/aui/polyfills/placeholder.js +4 -4
- package/src/js/aui/populate-parameters.js +4 -4
- package/src/js/aui/progress-indicator.js +35 -27
- package/src/js/aui/progressive-data-set.js +13 -8
- package/src/js/aui/query-input.js +1 -1
- package/src/js/aui/restful-table/class-names.js +1 -1
- package/src/js/aui/restful-table/data-keys.js +1 -1
- package/src/js/aui/restful-table/edit-row.js +63 -63
- package/src/js/aui/restful-table/entry-model.js +6 -13
- package/src/js/aui/restful-table/event-handlers.js +4 -8
- package/src/js/aui/restful-table/event-names.js +1 -1
- package/src/js/aui/restful-table/row.js +41 -23
- package/src/js/aui/restful-table.js +101 -72
- package/src/js/aui/result-set.js +5 -5
- package/src/js/aui/results-list.js +3 -3
- package/src/js/aui/select.js +65 -49
- package/src/js/aui/select2.js +14 -6
- package/src/js/aui/sidebar.js +81 -51
- package/src/js/aui/spin.js +61 -49
- package/src/js/aui/spinner.js +11 -12
- package/src/js/aui/tables-sortable.js +21 -10
- package/src/js/aui/tabs.js +108 -77
- package/src/js/aui/to-init.js +1 -1
- package/src/js/aui/toggle.js +55 -43
- package/src/js/aui/tooltip.js +32 -31
- package/src/js/aui/trigger.js +20 -18
- package/src/js/aui/truncating-progressive-data-set.js +1 -1
- package/src/js/aui/unbind-text-resize.js +1 -1
- package/src/js/aui/unique-id.js +1 -1
- package/src/js/aui/when-i-type.js +66 -39
- package/src/js/aui-css-deprecations.js +50 -50
- package/src/js/jquery/jquery.hotkeys.js +124 -49
- package/src/js/jquery/jquery.moveto.js +18 -12
- package/src/less/adg-fancy-file-input.less +2 -3
- package/src/less/adg-header-quicksearch.less +4 -1
- package/src/less/adg-iconfont.less +242 -242
- package/src/less/adgs-icons.less +262 -262
- package/src/less/aui-appheader.less +10 -6
- package/src/less/aui-buttons.less +6 -5
- package/src/less/aui-date-picker.less +9 -6
- package/src/less/aui-experimental-expander.less +8 -8
- package/src/less/aui-experimental-labels.less +4 -3
- package/src/less/aui-experimental-progress-indicator.less +10 -4
- package/src/less/aui-experimental-progress-tracker.less +9 -6
- package/src/less/aui-experimental-restfultable.less +11 -3
- package/src/less/aui-experimental-tables-sortable.less +5 -3
- package/src/less/aui-experimental-tooltip.less +1 -1
- package/src/less/aui-link.less +0 -1
- package/src/less/aui-lozenge.less +6 -3
- package/src/less/aui-navigation.less +13 -13
- package/src/less/aui-page-layout.less +3 -4
- package/src/less/aui-page-typography.less +8 -3
- package/src/less/aui-reset.less +22 -6
- package/src/less/aui-select2.less +11 -8
- package/src/less/aui-sidebar-badges.less +1 -2
- package/src/less/aui-sidebar-config.less +7 -2
- package/src/less/aui-sidebar-grouping.less +16 -6
- package/src/less/aui-sidebar-navigation.less +7 -5
- package/src/less/aui-sidebar-skeleton.less +4 -3
- package/src/less/aui-skip-link.less +2 -1
- package/src/less/aui-spinner.less +2 -2
- package/src/less/aui-toggle.less +2 -2
- package/src/less/aui-toolbar2.less +1 -1
- package/src/less/checkbox-multiselect.less +13 -13
- package/src/less/dialog.less +3 -3
- package/src/less/dialog2.less +12 -11
- package/src/less/dropdown2-temp.css +4 -4
- package/src/less/dropdown2.less +3 -3
- package/src/less/form-notification.less +10 -6
- package/src/less/forms-current.less +6 -5
- package/src/less/forms-legacy.less +4 -2
- package/src/less/forms-radios-and-checkboxes.less +9 -11
- package/src/less/forms.less +2 -4
- package/src/less/iconfont-mixin.less +7 -4
- package/src/less/imports/aui-theme/adg/adg-colors.less +40 -40
- package/src/less/imports/aui-theme/adg/adg-neutral-dark.less +20 -20
- package/src/less/imports/aui-theme/adg/adg-neutral-light.less +20 -20
- package/src/less/imports/aui-theme/components/buttons.less +5 -1
- package/src/less/imports/aui-theme/components/dropdown.less +3 -1
- package/src/less/imports/aui-theme/components/form-notification.less +2 -1
- package/src/less/imports/aui-theme/components/forms.less +16 -1
- package/src/less/imports/aui-theme/components/inline-dialog2.less +1 -1
- package/src/less/imports/aui-theme/components/navigation.less +3 -3
- package/src/less/imports/aui-theme/components/progress-tracker.less +6 -2
- package/src/less/imports/aui-theme/components/tables.less +3 -2
- package/src/less/imports/aui-theme/components/toggle.less +8 -3
- package/src/less/imports/aui-theme/core/colors.less +12 -4
- package/src/less/imports/aui-theme/core/icons.less +22 -22
- package/src/less/imports/aui-theme/core/text.less +6 -3
- package/src/less/imports/mixins/dropdown2-trigger-chevron-icon.less +0 -1
- package/src/less/imports/mixins/focus.less +12 -4
- package/src/less/imports/mixins/media-queries.less +2 -2
- package/src/less/imports/mixins/shadows.less +3 -1
- package/src/less/imports/mixins/tab-indicator.less +2 -2
- package/src/less/imports/mixins.less +11 -4
- package/src/less/inline-dialog.less +21 -19
- package/src/less/layer.less +0 -2
- package/src/less/messages.less +2 -1
- package/src/less/single-select.less +14 -9
- package/src/less/tables.less +3 -2
- package/src/less/tabs.less +4 -3
- package/entry/token-themes-generated/npm/aui-prototyping-design-tokens-base-themes.css +0 -797
- package/entry/token-themes-generated/npm/aui-prototyping-design-tokens-base-themes.js +0 -26
- package/entry/token-themes-generated/npm/aui-prototyping-design-tokens-theme-import-map.js +0 -51
- package/entry/token-themes-generated/npm/themes/dark-future.js +0 -7
- package/entry/token-themes-generated/npm/themes/dark-new-input-border.js +0 -7
- package/entry/token-themes-generated/npm/themes/dark.js +0 -395
- package/entry/token-themes-generated/npm/themes/legacy-dark.js +0 -395
- package/entry/token-themes-generated/npm/themes/legacy-light.js +0 -395
- package/entry/token-themes-generated/npm/themes/light-future.js +0 -7
- package/entry/token-themes-generated/npm/themes/light-new-input-border.js +0 -7
- package/entry/token-themes-generated/npm/themes/light.js +0 -395
- package/entry/token-themes-generated/npm/themes/shape.js +0 -15
- package/entry/token-themes-generated/npm/themes/spacing.js +0 -27
- package/entry/token-themes-generated/npm/themes/typography-adg3.js +0 -50
- package/entry/token-themes-generated/npm/themes/typography-minor3.js +0 -41
package/src/js/aui/dropdown2.js
CHANGED
|
@@ -13,8 +13,8 @@ import layer from './layer';
|
|
|
13
13
|
import state from './internal/state';
|
|
14
14
|
import skate from './internal/skate';
|
|
15
15
|
import escapeHtml from './escape-html';
|
|
16
|
-
import {ifGone} from './internal/elements';
|
|
17
|
-
import {doIfTrigger, setTrigger} from './trigger';
|
|
16
|
+
import { ifGone } from './internal/elements';
|
|
17
|
+
import { doIfTrigger, setTrigger } from './trigger';
|
|
18
18
|
import generateUniqueId from './unique-id';
|
|
19
19
|
|
|
20
20
|
function isHidden(el) {
|
|
@@ -40,7 +40,7 @@ function handleFocus(dropdown, e = {}) {
|
|
|
40
40
|
const isKeyDownEvent = e.type.indexOf('key') > -1;
|
|
41
41
|
if (dropdown.isSubmenu) {
|
|
42
42
|
!isMouseEvent ? dropdown.focusItem(0) : dropdown.focus();
|
|
43
|
-
} else if (isKeyDownEvent){
|
|
43
|
+
} else if (isKeyDownEvent) {
|
|
44
44
|
const isUpArrow = e.keyCode === keyCode.UP;
|
|
45
45
|
// set focus to last item in the menu to navigate bottom -> up
|
|
46
46
|
if (isUpArrow) {
|
|
@@ -64,43 +64,46 @@ var LOADING = 'loading';
|
|
|
64
64
|
var ERROR = 'error';
|
|
65
65
|
var SUCCESS = 'success';
|
|
66
66
|
|
|
67
|
-
|
|
68
67
|
// ASYNC DROPDOWN FUNCTIONS
|
|
69
68
|
|
|
70
|
-
function makeAsyncDropdownContents
|
|
71
|
-
var dropdownContents = json
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
69
|
+
function makeAsyncDropdownContents(json) {
|
|
70
|
+
var dropdownContents = json
|
|
71
|
+
.map(function makeSection(sectionData) {
|
|
72
|
+
var sectionItemsHtml = sectionData.items
|
|
73
|
+
.map(function makeSectionItem(itemData) {
|
|
74
|
+
function makeBooleanAttribute(attr) {
|
|
75
|
+
return itemData[attr] ? `${attr} ="true"` : '';
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
function makeAttribute(attr) {
|
|
79
|
+
return itemData[attr] ? `${attr}="${itemData[attr]}"` : '';
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
var tagName = 'aui-item-' + itemData.type;
|
|
83
|
+
var itemHtml = `
|
|
83
84
|
<${tagName} ${makeAttribute('for')} ${makeAttribute('href')} ${makeBooleanAttribute('interactive')}
|
|
84
85
|
${makeBooleanAttribute('checked')} ${makeBooleanAttribute('disabled')} ${makeBooleanAttribute('hidden')}>
|
|
85
86
|
${escapeHtml(itemData.content)}
|
|
86
87
|
</${tagName}>`;
|
|
87
88
|
|
|
88
|
-
|
|
89
|
-
|
|
89
|
+
return itemHtml;
|
|
90
|
+
})
|
|
91
|
+
.join('');
|
|
90
92
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
+
var sectionAttributes = sectionData.label ? `label="${sectionData.label}"` : '';
|
|
94
|
+
var sectionHtml = `
|
|
93
95
|
<aui-section ${sectionAttributes}>
|
|
94
96
|
${sectionItemsHtml}
|
|
95
97
|
</aui-section>`;
|
|
96
98
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
+
return sectionHtml;
|
|
100
|
+
})
|
|
101
|
+
.join('\n');
|
|
99
102
|
|
|
100
103
|
return dropdownContents;
|
|
101
104
|
}
|
|
102
105
|
|
|
103
|
-
function setDropdownContents
|
|
106
|
+
function setDropdownContents(dropdown, json) {
|
|
104
107
|
state(dropdown).set('loading-state', SUCCESS);
|
|
105
108
|
dropdown.innerHTML = makeAsyncDropdownContents(json);
|
|
106
109
|
skate.init(dropdown);
|
|
@@ -108,7 +111,7 @@ function setDropdownContents (dropdown, json) {
|
|
|
108
111
|
* to make the loading state more accessible, we might need to move focus inside the dropdown container,
|
|
109
112
|
* which would change the check from "focus is on trigger" to "focus is within dropdown".
|
|
110
113
|
*/
|
|
111
|
-
doIfTrigger(dropdown, function(trigger) {
|
|
114
|
+
doIfTrigger(dropdown, function (trigger) {
|
|
112
115
|
// Only manage focus if the focus was on the triggering element at the time it loaded.
|
|
113
116
|
// Otherwise, the user likely moved on and doesn't want it any more.
|
|
114
117
|
if (document.activeElement === trigger) {
|
|
@@ -117,7 +120,7 @@ function setDropdownContents (dropdown, json) {
|
|
|
117
120
|
});
|
|
118
121
|
}
|
|
119
122
|
|
|
120
|
-
function setDropdownErrorState
|
|
123
|
+
function setDropdownErrorState(dropdown) {
|
|
121
124
|
state(dropdown).set('loading-state', ERROR);
|
|
122
125
|
state(dropdown).set('hasErrorBeenShown', dropdown.isVisible());
|
|
123
126
|
dropdown.innerHTML = `
|
|
@@ -127,7 +130,7 @@ function setDropdownErrorState (dropdown) {
|
|
|
127
130
|
`;
|
|
128
131
|
}
|
|
129
132
|
|
|
130
|
-
function setDropdownLoadingState
|
|
133
|
+
function setDropdownLoadingState(dropdown) {
|
|
131
134
|
state(dropdown).set('loading-state', LOADING);
|
|
132
135
|
state(dropdown).set('hasErrorBeenShown', false);
|
|
133
136
|
|
|
@@ -142,13 +145,13 @@ function setDropdownLoadingState (dropdown) {
|
|
|
142
145
|
`;
|
|
143
146
|
}
|
|
144
147
|
|
|
145
|
-
function setDropdownLoaded
|
|
148
|
+
function setDropdownLoaded(dropdown) {
|
|
146
149
|
doIfTrigger(dropdown, function (trigger) {
|
|
147
150
|
trigger.setAttribute('aria-busy', 'false');
|
|
148
151
|
});
|
|
149
152
|
}
|
|
150
153
|
|
|
151
|
-
function loadContentsIfAsync
|
|
154
|
+
function loadContentsIfAsync(dropdown) {
|
|
152
155
|
if (!dropdown.src || state(dropdown).get('loading-state') === LOADING) {
|
|
153
156
|
return;
|
|
154
157
|
}
|
|
@@ -175,7 +178,7 @@ function loadContentsIfAsync (dropdown) {
|
|
|
175
178
|
function loadContentWhenMouseEnterTrigger(dropdown) {
|
|
176
179
|
var isDropdownUnloaded = state(dropdown).get('loading-state') === UNLOADED;
|
|
177
180
|
var hasCurrentErrorBeenShown = state(dropdown).get('hasErrorBeenShown');
|
|
178
|
-
if (isDropdownUnloaded || hasCurrentErrorBeenShown && !dropdown.isVisible()) {
|
|
181
|
+
if (isDropdownUnloaded || (hasCurrentErrorBeenShown && !dropdown.isVisible())) {
|
|
179
182
|
loadContentsIfAsync(dropdown);
|
|
180
183
|
}
|
|
181
184
|
}
|
|
@@ -191,18 +194,19 @@ function loadContentWhenMenuShown(dropdown) {
|
|
|
191
194
|
}
|
|
192
195
|
}
|
|
193
196
|
|
|
194
|
-
|
|
195
197
|
// The dropdown's trigger
|
|
196
198
|
// ----------------------
|
|
197
199
|
|
|
198
|
-
function triggerCreated
|
|
200
|
+
function triggerCreated(trigger) {
|
|
199
201
|
let dropdownID = trigger.getAttribute('aria-controls');
|
|
200
202
|
|
|
201
203
|
if (!dropdownID) {
|
|
202
204
|
dropdownID = trigger.getAttribute('aria-owns');
|
|
203
205
|
|
|
204
206
|
if (!dropdownID) {
|
|
205
|
-
logger.error(
|
|
207
|
+
logger.error(
|
|
208
|
+
'Dropdown triggers need either a "aria-owns" or "aria-controls" attribute'
|
|
209
|
+
);
|
|
206
210
|
} else {
|
|
207
211
|
trigger.removeAttribute('aria-owns');
|
|
208
212
|
trigger.setAttribute('aria-controls', dropdownID);
|
|
@@ -282,9 +286,10 @@ function triggerCreated (trigger) {
|
|
|
282
286
|
if (e.currentTarget !== trigger) {
|
|
283
287
|
return;
|
|
284
288
|
}
|
|
285
|
-
const normalInvoke =
|
|
286
|
-
const submenuInvoke =
|
|
287
|
-
const rootMenuInvoke =
|
|
289
|
+
const normalInvoke = e.keyCode === keyCode.ENTER || e.keyCode === keyCode.SPACE;
|
|
290
|
+
const submenuInvoke = e.keyCode === keyCode.RIGHT && trigger.hasSubmenu();
|
|
291
|
+
const rootMenuInvoke =
|
|
292
|
+
(e.keyCode === keyCode.UP || e.keyCode === keyCode.DOWN) && !trigger.hasSubmenu();
|
|
288
293
|
|
|
289
294
|
if (normalInvoke) {
|
|
290
295
|
handleIt(e);
|
|
@@ -298,8 +303,7 @@ function triggerCreated (trigger) {
|
|
|
298
303
|
.on('aui-button-invoke', handleIt)
|
|
299
304
|
.on('click', handleIt)
|
|
300
305
|
.on('keydown', handleKeydown)
|
|
301
|
-
.on('mouseenter', handleMouseEnter)
|
|
302
|
-
;
|
|
306
|
+
.on('mouseenter', handleMouseEnter);
|
|
303
307
|
}
|
|
304
308
|
|
|
305
309
|
var triggerPrototype = {
|
|
@@ -314,13 +318,15 @@ var triggerPrototype = {
|
|
|
314
318
|
},
|
|
315
319
|
|
|
316
320
|
isEnabled: function () {
|
|
317
|
-
return
|
|
318
|
-
this.
|
|
321
|
+
return (
|
|
322
|
+
this.getAttribute('aria-disabled') !== 'true' &&
|
|
323
|
+
this.classList.contains('aui-dropdown2-disabled') === false
|
|
324
|
+
);
|
|
319
325
|
},
|
|
320
326
|
|
|
321
327
|
hasSubmenu: function () {
|
|
322
328
|
return this.classList.contains('aui-dropdown2-sub-trigger');
|
|
323
|
-
}
|
|
329
|
+
},
|
|
324
330
|
};
|
|
325
331
|
|
|
326
332
|
//To remove at a later date. Some dropdown triggers initialise lazily, so we need to listen for mousedown
|
|
@@ -335,8 +341,9 @@ function bindLazyTriggerInitialisation() {
|
|
|
335
341
|
removeInVersion: '10.0.0',
|
|
336
342
|
alternativeName: 'initialisation on DOM insertion',
|
|
337
343
|
sinceVersion: '5.8.0',
|
|
338
|
-
extraInfo:
|
|
339
|
-
|
|
344
|
+
extraInfo:
|
|
345
|
+
'Dropdown2 triggers should have all necessary attributes on DOM insertion',
|
|
346
|
+
deprecationType: 'JS',
|
|
340
347
|
});
|
|
341
348
|
lazyDeprecate();
|
|
342
349
|
}
|
|
@@ -348,62 +355,69 @@ bindLazyTriggerInitialisation();
|
|
|
348
355
|
// Dropdown trigger groups
|
|
349
356
|
// -----------------------
|
|
350
357
|
|
|
351
|
-
$(document).on(
|
|
352
|
-
|
|
358
|
+
$(document).on(
|
|
359
|
+
'mouseenter',
|
|
360
|
+
'.aui-dropdown2-trigger-group a, .aui-dropdown2-trigger-group button',
|
|
361
|
+
function (e) {
|
|
362
|
+
const $item = $(e.currentTarget);
|
|
353
363
|
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
364
|
+
if ($item.is('.aui-dropdown2-active')) {
|
|
365
|
+
return; // No point doing anything if we're hovering over the already-active item trigger.
|
|
366
|
+
}
|
|
357
367
|
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
368
|
+
if ($item.closest('.aui-dropdown2').length) {
|
|
369
|
+
return; // We don't want to deal with dropdown items, just the potential triggers in the group.
|
|
370
|
+
}
|
|
361
371
|
|
|
362
|
-
|
|
372
|
+
const $triggerGroup = $item.closest('.aui-dropdown2-trigger-group');
|
|
363
373
|
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
374
|
+
const $groupActiveTrigger = $triggerGroup.find('.aui-dropdown2-active');
|
|
375
|
+
if ($groupActiveTrigger.length && $item.is('.aui-dropdown2-trigger')) {
|
|
376
|
+
$groupActiveTrigger.blur(); // Remove focus from the previously opened menu.
|
|
377
|
+
$item.trigger('aui-button-invoke'); // Open this trigger's menu.
|
|
378
|
+
e.preventDefault();
|
|
379
|
+
}
|
|
370
380
|
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
381
|
+
const $groupFocusedTrigger = $triggerGroup.find(':focus');
|
|
382
|
+
if ($groupFocusedTrigger.length && $item.is('.aui-dropdown2-trigger')) {
|
|
383
|
+
$groupFocusedTrigger.blur();
|
|
384
|
+
}
|
|
374
385
|
}
|
|
375
|
-
|
|
376
|
-
|
|
386
|
+
);
|
|
377
387
|
|
|
378
388
|
// Dropdown items
|
|
379
389
|
// --------------
|
|
380
390
|
|
|
381
|
-
function getDropdownItems
|
|
391
|
+
function getDropdownItems(dropdown, filter) {
|
|
382
392
|
return $(dropdown)
|
|
383
|
-
.find(
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
393
|
+
.find(
|
|
394
|
+
[
|
|
395
|
+
// Legacy markup.
|
|
396
|
+
'> ul > li',
|
|
397
|
+
'> .aui-dropdown2-section > ul > li',
|
|
398
|
+
'> .aui-dropdown2-section > div[role="group"] > ul > li',
|
|
399
|
+
'> div > .aui-dropdown2-section > div[role="group"] > ul > li',
|
|
400
|
+
// Web component.
|
|
401
|
+
'aui-item-link',
|
|
402
|
+
'aui-item-checkbox',
|
|
403
|
+
'aui-item-radio',
|
|
404
|
+
].join(', ')
|
|
405
|
+
)
|
|
394
406
|
.filter(filter)
|
|
395
|
-
.children(
|
|
407
|
+
.children(
|
|
408
|
+
'a, button, [role="checkbox"], [role="menuitemcheckbox"], [role="radio"], [role="menuitemradio"]'
|
|
409
|
+
);
|
|
396
410
|
}
|
|
397
411
|
|
|
398
|
-
function getAllDropdownItems
|
|
412
|
+
function getAllDropdownItems(dropdown) {
|
|
399
413
|
return getDropdownItems(dropdown, () => true);
|
|
400
414
|
}
|
|
401
415
|
|
|
402
|
-
function getVisibleDropdownItems
|
|
416
|
+
function getVisibleDropdownItems(dropdown) {
|
|
403
417
|
return getDropdownItems(dropdown, (i, el) => !isHidden(el));
|
|
404
418
|
}
|
|
405
419
|
|
|
406
|
-
function amendDropdownItem
|
|
420
|
+
function amendDropdownItem(item) {
|
|
407
421
|
item.setAttribute('tabindex', '-1');
|
|
408
422
|
|
|
409
423
|
/**
|
|
@@ -415,7 +429,7 @@ function amendDropdownItem (item) {
|
|
|
415
429
|
}
|
|
416
430
|
}
|
|
417
431
|
|
|
418
|
-
function amendDropdownContent
|
|
432
|
+
function amendDropdownContent(dropdown) {
|
|
419
433
|
// Add assistive semantics to each dropdown item
|
|
420
434
|
getAllDropdownItems(dropdown).each((i, el) => amendDropdownItem(el));
|
|
421
435
|
}
|
|
@@ -428,16 +442,15 @@ function amendDropdownContent (dropdown) {
|
|
|
428
442
|
*
|
|
429
443
|
* Calling this function will add the new namespaced classes to elements with legacy names.
|
|
430
444
|
*/
|
|
431
|
-
function migrateAndSyncLegacyClassNames
|
|
445
|
+
function migrateAndSyncLegacyClassNames(dropdown) {
|
|
432
446
|
var $dropdown = $(dropdown);
|
|
433
447
|
|
|
434
448
|
// Migrate away from legacy, unprefixed class names
|
|
435
|
-
['disabled', 'interactive', 'active', 'checked'].forEach(type => {
|
|
449
|
+
['disabled', 'interactive', 'active', 'checked'].forEach((type) => {
|
|
436
450
|
$dropdown.find(`.${type}`).addClass(`aui-dropdown2-${type}`);
|
|
437
451
|
});
|
|
438
452
|
}
|
|
439
453
|
|
|
440
|
-
|
|
441
454
|
// The Dropdown itself
|
|
442
455
|
// -------------------
|
|
443
456
|
|
|
@@ -473,7 +486,7 @@ function setLayerAlignment(dropdown, trigger) {
|
|
|
473
486
|
preventOverflow: false,
|
|
474
487
|
// space between a dropdown trigger and the dropdown itself, based on @aui-dropdown-trigger-offset
|
|
475
488
|
// only added for dropdowns which are not submenus
|
|
476
|
-
offset:
|
|
489
|
+
offset: trigger.hasSubmenu && trigger.hasSubmenu() ? [-3, 0] : [0, 3],
|
|
477
490
|
});
|
|
478
491
|
|
|
479
492
|
dropdown._auiAlignment.enable();
|
|
@@ -484,7 +497,10 @@ function saveCurrentAlignment(dropdown) {
|
|
|
484
497
|
if (dropdown.hasAttribute('data-aui-alignment')) {
|
|
485
498
|
$dropdown.data('previous-data-aui-alignment', dropdown.getAttribute('data-aui-alignment'));
|
|
486
499
|
}
|
|
487
|
-
$dropdown.data(
|
|
500
|
+
$dropdown.data(
|
|
501
|
+
'had-data-aui-alignment-static',
|
|
502
|
+
dropdown.hasAttribute('data-aui-alignment-static')
|
|
503
|
+
);
|
|
488
504
|
}
|
|
489
505
|
|
|
490
506
|
function restorePreviousAlignment(dropdown) {
|
|
@@ -510,12 +526,12 @@ function getDropdownHideLocation(dropdown, trigger) {
|
|
|
510
526
|
}
|
|
511
527
|
|
|
512
528
|
var keyboardClose = false;
|
|
513
|
-
function keyboardCloseDetected
|
|
529
|
+
function keyboardCloseDetected() {
|
|
514
530
|
keyboardClose = true;
|
|
515
531
|
}
|
|
516
532
|
|
|
517
|
-
function wasProbablyClosedViaKeyboard
|
|
518
|
-
var result =
|
|
533
|
+
function wasProbablyClosedViaKeyboard() {
|
|
534
|
+
var result = keyboardClose === true;
|
|
519
535
|
keyboardClose = false;
|
|
520
536
|
return result;
|
|
521
537
|
}
|
|
@@ -523,7 +539,6 @@ function wasProbablyClosedViaKeyboard () {
|
|
|
523
539
|
function bindDropdownBehaviourToLayer(dropdown) {
|
|
524
540
|
layer(dropdown);
|
|
525
541
|
|
|
526
|
-
|
|
527
542
|
dropdown.addEventListener('aui-layer-show', function (e) {
|
|
528
543
|
if (dropdown !== e.target) {
|
|
529
544
|
return;
|
|
@@ -577,7 +592,7 @@ function bindDropdownBehaviourToLayer(dropdown) {
|
|
|
577
592
|
});
|
|
578
593
|
}
|
|
579
594
|
|
|
580
|
-
function bindItemInteractionBehaviourToDropdown
|
|
595
|
+
function bindItemInteractionBehaviourToDropdown(dropdown) {
|
|
581
596
|
var $dropdown = $(dropdown);
|
|
582
597
|
|
|
583
598
|
function belongsToDropdown(item) {
|
|
@@ -610,7 +625,7 @@ function bindItemInteractionBehaviourToDropdown (dropdown) {
|
|
|
610
625
|
}
|
|
611
626
|
});
|
|
612
627
|
|
|
613
|
-
const hideIfNotSubmenuAndNotInteractive = function(e) {
|
|
628
|
+
const hideIfNotSubmenuAndNotInteractive = function (e) {
|
|
614
629
|
var item = e.currentTarget;
|
|
615
630
|
|
|
616
631
|
if (item.getAttribute('aria-disabled') === 'true') {
|
|
@@ -620,7 +635,6 @@ function bindItemInteractionBehaviourToDropdown (dropdown) {
|
|
|
620
635
|
|
|
621
636
|
const isSubmenuTrigger = e.currentTarget.hasSubmenu && e.currentTarget.hasSubmenu();
|
|
622
637
|
if (!isSubmenuTrigger && !item.classList.contains('aui-dropdown2-interactive')) {
|
|
623
|
-
|
|
624
638
|
var theMenu = dropdown;
|
|
625
639
|
do {
|
|
626
640
|
var dd = layer(theMenu);
|
|
@@ -632,60 +646,78 @@ function bindItemInteractionBehaviourToDropdown (dropdown) {
|
|
|
632
646
|
}
|
|
633
647
|
};
|
|
634
648
|
|
|
635
|
-
$dropdown.on(
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
649
|
+
$dropdown.on(
|
|
650
|
+
'click keydown',
|
|
651
|
+
'a, button, [role="menuitem"], [role="menuitemcheckbox"], [role="checkbox"], [role="menuitemradio"], [role="radio"]',
|
|
652
|
+
function (e) {
|
|
653
|
+
if (!belongsToDropdown(e.target)) {
|
|
654
|
+
return;
|
|
655
|
+
}
|
|
656
|
+
const item = e.currentTarget;
|
|
657
|
+
const eventKeyCode = e.keyCode;
|
|
658
|
+
const isEnter = eventKeyCode === keyCode.ENTER;
|
|
659
|
+
const isSpace = eventKeyCode === keyCode.SPACE;
|
|
643
660
|
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
661
|
+
// AUI-4283: Accessibility - need to ignore enter on links/buttons so
|
|
662
|
+
// that the dropdown remains visible to allow the click event to eventually fire.
|
|
663
|
+
const itemIgnoresEnter = isEnter && $(item).is('a[href], button');
|
|
647
664
|
|
|
648
|
-
|
|
649
|
-
|
|
665
|
+
if (!itemIgnoresEnter && (e.type === 'click' || isEnter || isSpace)) {
|
|
666
|
+
hideIfNotSubmenuAndNotInteractive(e);
|
|
667
|
+
}
|
|
650
668
|
}
|
|
651
|
-
|
|
669
|
+
);
|
|
652
670
|
|
|
653
671
|
// close a submenus when the mouse moves over items other than its trigger
|
|
654
|
-
$dropdown.on(
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
672
|
+
$dropdown.on(
|
|
673
|
+
'mouseenter',
|
|
674
|
+
'a, button, [role="menuitem"], [role="menuitemcheckbox"], [role="checkbox"], [role="menuitemradio"], [role="radio"]',
|
|
675
|
+
function (e) {
|
|
676
|
+
if (!belongsToDropdown(e.target)) {
|
|
677
|
+
return;
|
|
678
|
+
}
|
|
679
|
+
var item = e.currentTarget;
|
|
680
|
+
var hasSubmenu = item.hasSubmenu && item.hasSubmenu();
|
|
660
681
|
|
|
661
|
-
|
|
662
|
-
|
|
682
|
+
if (!e.isDefaultPrevented() && !hasSubmenu) {
|
|
683
|
+
var maybeALayer = layer(dropdown).above();
|
|
663
684
|
|
|
664
|
-
|
|
665
|
-
|
|
685
|
+
if (maybeALayer) {
|
|
686
|
+
layer(maybeALayer).hide();
|
|
687
|
+
}
|
|
666
688
|
}
|
|
667
689
|
}
|
|
668
|
-
|
|
690
|
+
);
|
|
669
691
|
}
|
|
670
692
|
|
|
671
|
-
$(window).on(
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
693
|
+
$(window).on(
|
|
694
|
+
'resize',
|
|
695
|
+
debounce(
|
|
696
|
+
function () {
|
|
697
|
+
$('.aui-dropdown2').each(function (index, dropdown) {
|
|
698
|
+
skate.init(dropdown);
|
|
699
|
+
if (dropdown.isVisible()) {
|
|
700
|
+
dropdown.hide();
|
|
701
|
+
}
|
|
702
|
+
});
|
|
703
|
+
},
|
|
704
|
+
1000,
|
|
705
|
+
true
|
|
706
|
+
)
|
|
707
|
+
);
|
|
679
708
|
|
|
680
709
|
// Dropdowns
|
|
681
710
|
// ---------
|
|
682
711
|
|
|
683
|
-
function dropdownCreated
|
|
712
|
+
function dropdownCreated(dropdown) {
|
|
684
713
|
dropdown.classList.add('aui-dropdown2');
|
|
685
|
-
dropdown.setAttribute('tabindex','-1');
|
|
714
|
+
dropdown.setAttribute('tabindex', '-1');
|
|
686
715
|
|
|
687
716
|
if (dropdown.hasAttribute('data-container')) {
|
|
688
|
-
dropdown.setAttribute(
|
|
717
|
+
dropdown.setAttribute(
|
|
718
|
+
'data-aui-alignment-container',
|
|
719
|
+
dropdown.getAttribute('data-container')
|
|
720
|
+
);
|
|
689
721
|
dropdown.removeAttribute('data-container');
|
|
690
722
|
}
|
|
691
723
|
|
|
@@ -724,9 +756,13 @@ function dropdownCreated (dropdown) {
|
|
|
724
756
|
|
|
725
757
|
if (this.isEnabled() && this.isChecked() === false) {
|
|
726
758
|
// toggle the checked state
|
|
727
|
-
$(radio)
|
|
728
|
-
|
|
729
|
-
|
|
759
|
+
$(radio)
|
|
760
|
+
.closest('ul,[role=group]')
|
|
761
|
+
.find('.aui-dropdown2-checked')
|
|
762
|
+
.not(this)
|
|
763
|
+
.each(function () {
|
|
764
|
+
this.uncheck();
|
|
765
|
+
});
|
|
730
766
|
radio.check();
|
|
731
767
|
}
|
|
732
768
|
}
|
|
@@ -836,7 +872,7 @@ var dropdownPrototype = {
|
|
|
836
872
|
*/
|
|
837
873
|
isVisible: function () {
|
|
838
874
|
return layer(this).isVisible();
|
|
839
|
-
}
|
|
875
|
+
},
|
|
840
876
|
};
|
|
841
877
|
|
|
842
878
|
// Web component API for dropdowns
|
|
@@ -852,7 +888,7 @@ var disabledAttributeHandler = {
|
|
|
852
888
|
var a = element.children[0];
|
|
853
889
|
a.setAttribute('aria-disabled', 'false');
|
|
854
890
|
a.classList.remove('disabled', 'aui-dropdown2-disabled');
|
|
855
|
-
}
|
|
891
|
+
},
|
|
856
892
|
};
|
|
857
893
|
|
|
858
894
|
var interactiveAttributeHandler = {
|
|
@@ -863,7 +899,7 @@ var interactiveAttributeHandler = {
|
|
|
863
899
|
removed: function (element) {
|
|
864
900
|
var a = element.children[0];
|
|
865
901
|
a.classList.remove('interactive', 'aui-dropdown2-interactive');
|
|
866
|
-
}
|
|
902
|
+
},
|
|
867
903
|
};
|
|
868
904
|
|
|
869
905
|
var checkedAttributeHandler = {
|
|
@@ -871,14 +907,14 @@ var checkedAttributeHandler = {
|
|
|
871
907
|
var a = element.children[0];
|
|
872
908
|
a.classList.add('checked', 'aui-dropdown2-checked');
|
|
873
909
|
a.setAttribute('aria-checked', true);
|
|
874
|
-
element.dispatchEvent(new CustomEvent('change', {bubbles: true}));
|
|
910
|
+
element.dispatchEvent(new CustomEvent('change', { bubbles: true }));
|
|
875
911
|
},
|
|
876
912
|
removed: function (element) {
|
|
877
913
|
var a = element.children[0];
|
|
878
914
|
a.classList.remove('checked', 'aui-dropdown2-checked');
|
|
879
915
|
a.setAttribute('aria-checked', false);
|
|
880
|
-
element.dispatchEvent(new CustomEvent('change', {bubbles: true}));
|
|
881
|
-
}
|
|
916
|
+
element.dispatchEvent(new CustomEvent('change', { bubbles: true }));
|
|
917
|
+
},
|
|
882
918
|
};
|
|
883
919
|
|
|
884
920
|
var hiddenAttributeHandler = {
|
|
@@ -887,10 +923,10 @@ var hiddenAttributeHandler = {
|
|
|
887
923
|
},
|
|
888
924
|
removed: function (element) {
|
|
889
925
|
disabledAttributeHandler.removed(element);
|
|
890
|
-
}
|
|
926
|
+
},
|
|
891
927
|
};
|
|
892
928
|
|
|
893
|
-
var stringAttributeHandlerGenerator = function(attrName) {
|
|
929
|
+
var stringAttributeHandlerGenerator = function (attrName) {
|
|
894
930
|
return {
|
|
895
931
|
fallback: function (element, change) {
|
|
896
932
|
var a = element.children[0];
|
|
@@ -899,25 +935,26 @@ var stringAttributeHandlerGenerator = function(attrName) {
|
|
|
899
935
|
removed: function (element) {
|
|
900
936
|
var a = element.children[0];
|
|
901
937
|
a.removeAttribute(attrName);
|
|
902
|
-
}
|
|
938
|
+
},
|
|
903
939
|
};
|
|
904
940
|
};
|
|
905
941
|
|
|
906
942
|
const convertCssClassesToArray = function (spaceDelimitedClasses = '') {
|
|
907
|
-
return spaceDelimitedClasses
|
|
908
|
-
|
|
943
|
+
return spaceDelimitedClasses
|
|
944
|
+
.split(' ')
|
|
945
|
+
.map((str) => str.trim())
|
|
946
|
+
.filter((x) => x);
|
|
947
|
+
};
|
|
909
948
|
|
|
910
949
|
const ItemLinkEl = skate('aui-item-link', {
|
|
911
|
-
template: template(
|
|
912
|
-
'<a role="menuitem" tabindex="-1"><content></content></a>'
|
|
913
|
-
),
|
|
950
|
+
template: template('<a role="menuitem" tabindex="-1"><content></content></a>'),
|
|
914
951
|
attributes: {
|
|
915
|
-
disabled: disabledAttributeHandler,
|
|
916
|
-
interactive: interactiveAttributeHandler,
|
|
917
|
-
hidden: hiddenAttributeHandler,
|
|
918
|
-
href: stringAttributeHandlerGenerator('href'),
|
|
952
|
+
'disabled': disabledAttributeHandler,
|
|
953
|
+
'interactive': interactiveAttributeHandler,
|
|
954
|
+
'hidden': hiddenAttributeHandler,
|
|
955
|
+
'href': stringAttributeHandlerGenerator('href'),
|
|
919
956
|
'item-id': stringAttributeHandlerGenerator('id'),
|
|
920
|
-
for: {
|
|
957
|
+
'for': {
|
|
921
958
|
created: function (element) {
|
|
922
959
|
var anchor = element.children[0];
|
|
923
960
|
anchor.setAttribute('aria-controls', element.getAttribute('for'));
|
|
@@ -931,7 +968,7 @@ const ItemLinkEl = skate('aui-item-link', {
|
|
|
931
968
|
var anchor = element.children[0];
|
|
932
969
|
anchor.removeAttribute('aria-controls');
|
|
933
970
|
$(anchor).removeClass('aui-dropdown2-sub-trigger');
|
|
934
|
-
}
|
|
971
|
+
},
|
|
935
972
|
},
|
|
936
973
|
'extra-classes': function (element, change) {
|
|
937
974
|
const anchor = element.children[0];
|
|
@@ -945,17 +982,17 @@ const ItemLinkEl = skate('aui-item-link', {
|
|
|
945
982
|
},
|
|
946
983
|
});
|
|
947
984
|
|
|
948
|
-
const [ItemCheckboxEl, ItemRadioEl] = ['checkbox', 'radio'].map(type => {
|
|
985
|
+
const [ItemCheckboxEl, ItemRadioEl] = ['checkbox', 'radio'].map((type) => {
|
|
949
986
|
return skate(`aui-item-${type}`, {
|
|
950
987
|
template: template(
|
|
951
988
|
`<span role="${type}" class="aui-dropdown2-${type}" tabindex="-1"><content></content></span>`
|
|
952
989
|
),
|
|
953
990
|
attributes: {
|
|
954
991
|
'item-id': stringAttributeHandlerGenerator('id'),
|
|
955
|
-
disabled: disabledAttributeHandler,
|
|
956
|
-
interactive: interactiveAttributeHandler,
|
|
957
|
-
checked: checkedAttributeHandler,
|
|
958
|
-
hidden: hiddenAttributeHandler
|
|
992
|
+
'disabled': disabledAttributeHandler,
|
|
993
|
+
'interactive': interactiveAttributeHandler,
|
|
994
|
+
'checked': checkedAttributeHandler,
|
|
995
|
+
'hidden': hiddenAttributeHandler,
|
|
959
996
|
},
|
|
960
997
|
});
|
|
961
998
|
});
|
|
@@ -975,11 +1012,11 @@ const SectionEl = skate('aui-section', {
|
|
|
975
1012
|
headingElement.textContent = data.newValue;
|
|
976
1013
|
headingElement.id = id;
|
|
977
1014
|
groupElement.setAttribute('aria-labelledby', id);
|
|
978
|
-
}
|
|
1015
|
+
},
|
|
979
1016
|
},
|
|
980
1017
|
created: function (element) {
|
|
981
1018
|
element.classList.add('aui-dropdown2-section');
|
|
982
|
-
}
|
|
1019
|
+
},
|
|
983
1020
|
});
|
|
984
1021
|
|
|
985
1022
|
const DropdownEl = skate('aui-dropdown-menu', {
|
|
@@ -995,12 +1032,12 @@ const DropdownEl = skate('aui-dropdown-menu', {
|
|
|
995
1032
|
ifGone(dropdown).then(() => destroyAlignment(dropdown));
|
|
996
1033
|
},
|
|
997
1034
|
attributes: {
|
|
998
|
-
src: {}
|
|
1035
|
+
src: {},
|
|
999
1036
|
},
|
|
1000
1037
|
prototype: dropdownPrototype,
|
|
1001
1038
|
events: {
|
|
1002
|
-
'aui-layer-show': loadContentWhenMenuShown
|
|
1003
|
-
}
|
|
1039
|
+
'aui-layer-show': loadContentWhenMenuShown,
|
|
1040
|
+
},
|
|
1004
1041
|
});
|
|
1005
1042
|
|
|
1006
1043
|
// Legacy dropdown inits
|
|
@@ -1009,19 +1046,19 @@ const DropdownEl = skate('aui-dropdown-menu', {
|
|
|
1009
1046
|
skate('aui-dropdown2', {
|
|
1010
1047
|
type: skate.type.CLASSNAME,
|
|
1011
1048
|
created: dropdownCreated,
|
|
1012
|
-
prototype: dropdownPrototype
|
|
1049
|
+
prototype: dropdownPrototype,
|
|
1013
1050
|
});
|
|
1014
1051
|
|
|
1015
1052
|
skate('data-aui-dropdown2', {
|
|
1016
1053
|
type: skate.type.ATTRIBUTE,
|
|
1017
1054
|
created: dropdownCreated,
|
|
1018
|
-
prototype: dropdownPrototype
|
|
1055
|
+
prototype: dropdownPrototype,
|
|
1019
1056
|
});
|
|
1020
1057
|
|
|
1021
1058
|
skate('aui-dropdown2-trigger', {
|
|
1022
1059
|
type: skate.type.CLASSNAME,
|
|
1023
1060
|
created: triggerCreated,
|
|
1024
|
-
prototype: triggerPrototype
|
|
1061
|
+
prototype: triggerPrototype,
|
|
1025
1062
|
});
|
|
1026
1063
|
|
|
1027
1064
|
skate('aui-dropdown2-sub-trigger', {
|
|
@@ -1029,22 +1066,21 @@ skate('aui-dropdown2-sub-trigger', {
|
|
|
1029
1066
|
created: function (trigger) {
|
|
1030
1067
|
trigger.classList.add('aui-dropdown2-trigger');
|
|
1031
1068
|
skate.init(trigger);
|
|
1032
|
-
}
|
|
1069
|
+
},
|
|
1033
1070
|
});
|
|
1034
1071
|
|
|
1035
1072
|
// Checkboxes and radios
|
|
1036
1073
|
// ---------------------
|
|
1037
|
-
['checkbox', 'radio'].map(type => {
|
|
1074
|
+
['checkbox', 'radio'].map((type) => {
|
|
1038
1075
|
return skate(`aui-dropdown2-${type}`, {
|
|
1039
1076
|
type: skate.type.CLASSNAME,
|
|
1040
1077
|
|
|
1041
1078
|
created: function (checkbox) {
|
|
1042
1079
|
// determine checked state based on any one of three attributes, then sync all of them.
|
|
1043
|
-
const checked =
|
|
1080
|
+
const checked =
|
|
1044
1081
|
checkbox.getAttribute('aria-checked') === 'true' ||
|
|
1045
1082
|
checkbox.classList.contains('checked') ||
|
|
1046
|
-
checkbox.classList.contains('aui-dropdown2-checked')
|
|
1047
|
-
);
|
|
1083
|
+
checkbox.classList.contains('aui-dropdown2-checked');
|
|
1048
1084
|
checkbox.classList[checked ? 'add' : 'remove']('checked', 'aui-dropdown2-checked');
|
|
1049
1085
|
checkbox.setAttribute('aria-checked', checked);
|
|
1050
1086
|
|
|
@@ -1053,7 +1089,7 @@ skate('aui-dropdown2-sub-trigger', {
|
|
|
1053
1089
|
|
|
1054
1090
|
// swap from the "menuitemX" role to plain role for VoiceOver
|
|
1055
1091
|
if (supportsVoiceOver()) {
|
|
1056
|
-
checkbox.setAttribute('role',type);
|
|
1092
|
+
checkbox.setAttribute('role', type);
|
|
1057
1093
|
}
|
|
1058
1094
|
},
|
|
1059
1095
|
|
|
@@ -1088,15 +1124,9 @@ skate('aui-dropdown2-sub-trigger', {
|
|
|
1088
1124
|
.attr('aria-checked', 'true')
|
|
1089
1125
|
.addClass('checked aui-dropdown2-checked')
|
|
1090
1126
|
.trigger('aui-dropdown2-item-check');
|
|
1091
|
-
}
|
|
1092
|
-
}
|
|
1127
|
+
},
|
|
1128
|
+
},
|
|
1093
1129
|
});
|
|
1094
|
-
})
|
|
1095
|
-
|
|
1096
|
-
export {
|
|
1097
|
-
DropdownEl,
|
|
1098
|
-
ItemLinkEl,
|
|
1099
|
-
ItemRadioEl,
|
|
1100
|
-
ItemCheckboxEl,
|
|
1101
|
-
SectionEl,
|
|
1102
|
-
};
|
|
1130
|
+
});
|
|
1131
|
+
|
|
1132
|
+
export { DropdownEl, ItemLinkEl, ItemRadioEl, ItemCheckboxEl, SectionEl };
|