@atlassian/aui 9.12.6 → 9.12.7
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 +1 -1
- package/README.md +7 -9
- package/dist/aui/aui-css-deprecations.js.map +1 -1
- package/dist/aui/aui-prototyping-browserfocus.css +1 -1
- package/dist/aui/aui-prototyping-browserfocus.css.map +1 -1
- package/dist/aui/aui-prototyping-darkmode.css +1 -1
- package/dist/aui/aui-prototyping-darkmode.css.map +1 -1
- package/dist/aui/aui-prototyping-design-tokens-api-full.js +1 -1
- package/dist/aui/aui-prototyping-design-tokens-api-full.js.map +1 -1
- package/dist/aui/aui-prototyping-design-tokens-api.js +1 -1
- package/dist/aui/aui-prototyping-design-tokens-api.js.map +1 -1
- package/dist/aui/aui-prototyping-design-tokens-base-themes-css.css +2 -2
- package/dist/aui/aui-prototyping-design-tokens-base-themes-css.css.map +1 -1
- package/dist/aui/aui-prototyping-design-tokens-base-themes-css.js +1 -1
- package/dist/aui/aui-prototyping-design-tokens-base-themes.js +1 -1
- package/dist/aui/aui-prototyping-design-tokens-compatibility.css +1 -1
- package/dist/aui/aui-prototyping-design-tokens-compatibility.css.map +1 -1
- package/dist/aui/aui-prototyping.css +10 -10
- package/dist/aui/aui-prototyping.css.map +1 -1
- package/dist/aui/aui-prototyping.js +2 -2
- package/dist/aui/aui-prototyping.js.map +1 -1
- package/dist/aui/aui-prototyping.nodeps.css +10 -10
- package/dist/aui/aui-prototyping.nodeps.css.map +1 -1
- package/dist/aui/aui-prototyping.nodeps.js +2 -2
- package/dist/aui/aui-prototyping.nodeps.js.map +1 -1
- package/dist/aui/fonts/adgs-icons.eot +0 -0
- package/dist/aui/fonts/adgs-icons.ttf +0 -0
- package/dist/aui/fonts/adgs-icons.woff +0 -0
- package/entry/aui.batch.components.js +23 -23
- 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/entry/styles/aui-design-tokens-compatibility.less +114 -115
- package/package.json +2 -2
- package/src/js/aui/alphanum.js +1 -1
- package/src/js/aui/avatar-badged.js +4 -5
- package/src/js/aui/avatar-group.js +58 -28
- package/src/js/aui/avatar.js +16 -14
- package/src/js/aui/banner.js +3 -2
- package/src/js/aui/blanket.js +11 -14
- 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 +89 -68
- package/src/js/aui/debounce.js +5 -8
- package/src/js/aui/design-tokens/design-tokens-full.js +4 -13
- package/src/js/aui/design-tokens/design-tokens-init.js +1 -3
- package/src/js/aui/design-tokens/design-tokens-testing-theme.js +9 -15
- package/src/js/aui/design-tokens/design-tokens.js +2 -4
- package/src/js/aui/dialog.js +206 -172
- package/src/js/aui/dialog2.js +36 -25
- package/src/js/aui/dropdown2.js +221 -189
- 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 +15 -13
- package/src/js/aui/flag.js +24 -22
- package/src/js/aui/focus-manager.js +20 -21
- package/src/js/aui/form-notification.js +16 -15
- 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 +12 -13
- 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 +6 -13
- 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 +40 -33
- package/src/js/aui/internal/a11y/focusable-query.js +2 -4
- 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 +6 -7
- 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 +54 -32
- 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 +12 -5
- package/src/js/aui/internal/has-touch.js +1 -2
- package/src/js/aui/internal/header/create-header.js +54 -30
- package/src/js/aui/internal/i18n/aui.js +9 -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 +101 -89
- package/src/js/aui/messages.js +67 -43
- 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 +9 -9
- 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 +72 -51
- package/src/js/aui/select2.js +16 -8
- 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 +34 -33
- package/src/js/aui/trigger.js +21 -19
- 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 +67 -40
- package/src/js/aui-css-deprecations.js +52 -51
- 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 +5 -2
- 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-avatars.less +1 -1
- package/src/less/aui-banner.less +2 -1
- package/src/less/aui-buttons.less +6 -5
- package/src/less/aui-dark-mode.less +1 -1
- package/src/less/aui-date-picker.less +9 -6
- package/src/less/aui-experimental-expander.less +3 -3
- package/src/less/aui-experimental-labels.less +1 -1
- 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 +16 -14
- 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 +12 -9
- 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 +22 -6
- package/src/less/aui-sidebar-navigation.less +7 -5
- package/src/less/aui-sidebar-skeleton.less +12 -7
- package/src/less/aui-skip-link.less +2 -1
- package/src/less/aui-spinner.less +2 -2
- package/src/less/aui-toggle.less +8 -4
- 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 +11 -10
- package/src/less/dropdown2-temp.css +4 -4
- package/src/less/dropdown2.less +4 -4
- package/src/less/flag.less +2 -2
- package/src/less/form-notification.less +10 -6
- package/src/less/forms-current.less +16 -18
- package/src/less/forms-legacy.less +4 -2
- package/src/less/forms-radios-and-checkboxes.less +18 -16
- 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 +7 -1
- package/src/less/imports/aui-theme/components/dropdown.less +3 -1
- package/src/less/imports/aui-theme/components/flag.less +1 -1
- package/src/less/imports/aui-theme/components/form-notification.less +2 -1
- package/src/less/imports/aui-theme/components/forms.less +8 -3
- package/src/less/imports/aui-theme/components/inline-dialog2.less +1 -1
- package/src/less/imports/aui-theme/components/navigation.less +6 -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 +2 -2
- 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/aui-theme/theme.less +1 -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 +15 -10
- package/src/less/tables.less +3 -2
- package/src/less/tabs.less +4 -3
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) {
|
|
@@ -39,7 +39,7 @@ function handleFocus(dropdown, e = {}) {
|
|
|
39
39
|
const isKeyDownEvent = e.type.indexOf('key') > -1;
|
|
40
40
|
if (dropdown.isSubmenu) {
|
|
41
41
|
dropdown.focusItem(0);
|
|
42
|
-
} else if (isKeyDownEvent){
|
|
42
|
+
} else if (isKeyDownEvent) {
|
|
43
43
|
const isUpArrow = e.keyCode === keyCode.UP;
|
|
44
44
|
// set focus to last item in the menu to navigate bottom -> up
|
|
45
45
|
if (isUpArrow) {
|
|
@@ -63,49 +63,52 @@ var LOADING = 'loading';
|
|
|
63
63
|
var ERROR = 'error';
|
|
64
64
|
var SUCCESS = 'success';
|
|
65
65
|
|
|
66
|
-
|
|
67
66
|
// ASYNC DROPDOWN FUNCTIONS
|
|
68
67
|
|
|
69
|
-
function makeAsyncDropdownContents
|
|
70
|
-
var dropdownContents = json
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
68
|
+
function makeAsyncDropdownContents(json) {
|
|
69
|
+
var dropdownContents = json
|
|
70
|
+
.map(function makeSection(sectionData) {
|
|
71
|
+
var sectionItemsHtml = sectionData.items
|
|
72
|
+
.map(function makeSectionItem(itemData) {
|
|
73
|
+
function makeBooleanAttribute(attr) {
|
|
74
|
+
return itemData[attr] ? `${attr} ="true"` : '';
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
function makeAttribute(attr) {
|
|
78
|
+
return itemData[attr] ? `${attr}="${itemData[attr]}"` : '';
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
var tagName = 'aui-item-' + itemData.type;
|
|
82
|
+
var itemHtml = `
|
|
82
83
|
<${tagName} ${makeAttribute('for')} ${makeAttribute('href')} ${makeBooleanAttribute('interactive')}
|
|
83
84
|
${makeBooleanAttribute('checked')} ${makeBooleanAttribute('disabled')} ${makeBooleanAttribute('hidden')}>
|
|
84
85
|
${escapeHtml(itemData.content)}
|
|
85
86
|
</${tagName}>`;
|
|
86
87
|
|
|
87
|
-
|
|
88
|
-
|
|
88
|
+
return itemHtml;
|
|
89
|
+
})
|
|
90
|
+
.join('');
|
|
89
91
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
+
var sectionAttributes = sectionData.label ? `label="${sectionData.label}"` : '';
|
|
93
|
+
var sectionHtml = `
|
|
92
94
|
<aui-section ${sectionAttributes}>
|
|
93
95
|
${sectionItemsHtml}
|
|
94
96
|
</aui-section>`;
|
|
95
97
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
+
return sectionHtml;
|
|
99
|
+
})
|
|
100
|
+
.join('\n');
|
|
98
101
|
|
|
99
102
|
return dropdownContents;
|
|
100
103
|
}
|
|
101
104
|
|
|
102
|
-
function setDropdownContents
|
|
105
|
+
function setDropdownContents(dropdown, json) {
|
|
103
106
|
state(dropdown).set('loading-state', SUCCESS);
|
|
104
107
|
dropdown.innerHTML = makeAsyncDropdownContents(json);
|
|
105
108
|
skate.init(dropdown);
|
|
106
109
|
}
|
|
107
110
|
|
|
108
|
-
function setDropdownErrorState
|
|
111
|
+
function setDropdownErrorState(dropdown) {
|
|
109
112
|
state(dropdown).set('loading-state', ERROR);
|
|
110
113
|
state(dropdown).set('hasErrorBeenShown', dropdown.isVisible());
|
|
111
114
|
dropdown.innerHTML = `
|
|
@@ -115,7 +118,7 @@ function setDropdownErrorState (dropdown) {
|
|
|
115
118
|
`;
|
|
116
119
|
}
|
|
117
120
|
|
|
118
|
-
function setDropdownLoadingState
|
|
121
|
+
function setDropdownLoadingState(dropdown) {
|
|
119
122
|
state(dropdown).set('loading-state', LOADING);
|
|
120
123
|
state(dropdown).set('hasErrorBeenShown', false);
|
|
121
124
|
|
|
@@ -130,13 +133,13 @@ function setDropdownLoadingState (dropdown) {
|
|
|
130
133
|
`;
|
|
131
134
|
}
|
|
132
135
|
|
|
133
|
-
function setDropdownLoaded
|
|
136
|
+
function setDropdownLoaded(dropdown) {
|
|
134
137
|
doIfTrigger(dropdown, function (trigger) {
|
|
135
138
|
trigger.setAttribute('aria-busy', 'false');
|
|
136
139
|
});
|
|
137
140
|
}
|
|
138
141
|
|
|
139
|
-
function loadContentsIfAsync
|
|
142
|
+
function loadContentsIfAsync(dropdown) {
|
|
140
143
|
if (!dropdown.src || state(dropdown).get('loading-state') === LOADING) {
|
|
141
144
|
return;
|
|
142
145
|
}
|
|
@@ -163,7 +166,7 @@ function loadContentsIfAsync (dropdown) {
|
|
|
163
166
|
function loadContentWhenMouseEnterTrigger(dropdown) {
|
|
164
167
|
var isDropdownUnloaded = state(dropdown).get('loading-state') === UNLOADED;
|
|
165
168
|
var hasCurrentErrorBeenShown = state(dropdown).get('hasErrorBeenShown');
|
|
166
|
-
if (isDropdownUnloaded || hasCurrentErrorBeenShown && !dropdown.isVisible()) {
|
|
169
|
+
if (isDropdownUnloaded || (hasCurrentErrorBeenShown && !dropdown.isVisible())) {
|
|
167
170
|
loadContentsIfAsync(dropdown);
|
|
168
171
|
}
|
|
169
172
|
}
|
|
@@ -179,18 +182,19 @@ function loadContentWhenMenuShown(dropdown) {
|
|
|
179
182
|
}
|
|
180
183
|
}
|
|
181
184
|
|
|
182
|
-
|
|
183
185
|
// The dropdown's trigger
|
|
184
186
|
// ----------------------
|
|
185
187
|
|
|
186
|
-
function triggerCreated
|
|
188
|
+
function triggerCreated(trigger) {
|
|
187
189
|
let dropdownID = trigger.getAttribute('aria-controls');
|
|
188
190
|
|
|
189
191
|
if (!dropdownID) {
|
|
190
192
|
dropdownID = trigger.getAttribute('aria-owns');
|
|
191
193
|
|
|
192
194
|
if (!dropdownID) {
|
|
193
|
-
logger.error(
|
|
195
|
+
logger.error(
|
|
196
|
+
'Dropdown triggers need either a "aria-owns" or "aria-controls" attribute'
|
|
197
|
+
);
|
|
194
198
|
} else {
|
|
195
199
|
trigger.removeAttribute('aria-owns');
|
|
196
200
|
trigger.setAttribute('aria-controls', dropdownID);
|
|
@@ -270,9 +274,10 @@ function triggerCreated (trigger) {
|
|
|
270
274
|
if (e.currentTarget !== trigger) {
|
|
271
275
|
return;
|
|
272
276
|
}
|
|
273
|
-
const normalInvoke =
|
|
274
|
-
const submenuInvoke =
|
|
275
|
-
const rootMenuInvoke =
|
|
277
|
+
const normalInvoke = e.keyCode === keyCode.ENTER || e.keyCode === keyCode.SPACE;
|
|
278
|
+
const submenuInvoke = e.keyCode === keyCode.RIGHT && trigger.hasSubmenu();
|
|
279
|
+
const rootMenuInvoke =
|
|
280
|
+
(e.keyCode === keyCode.UP || e.keyCode === keyCode.DOWN) && !trigger.hasSubmenu();
|
|
276
281
|
|
|
277
282
|
if (normalInvoke) {
|
|
278
283
|
handleIt(e);
|
|
@@ -301,13 +306,15 @@ var triggerPrototype = {
|
|
|
301
306
|
},
|
|
302
307
|
|
|
303
308
|
isEnabled: function () {
|
|
304
|
-
return
|
|
305
|
-
this.
|
|
309
|
+
return (
|
|
310
|
+
this.getAttribute('aria-disabled') !== 'true' &&
|
|
311
|
+
this.classList.contains('aui-dropdown2-disabled') === false
|
|
312
|
+
);
|
|
306
313
|
},
|
|
307
314
|
|
|
308
315
|
hasSubmenu: function () {
|
|
309
316
|
return this.classList.contains('aui-dropdown2-sub-trigger');
|
|
310
|
-
}
|
|
317
|
+
},
|
|
311
318
|
};
|
|
312
319
|
|
|
313
320
|
//To remove at a later date. Some dropdown triggers initialise lazily, so we need to listen for mousedown
|
|
@@ -322,8 +329,9 @@ function bindLazyTriggerInitialisation() {
|
|
|
322
329
|
removeInVersion: '10.0.0',
|
|
323
330
|
alternativeName: 'initialisation on DOM insertion',
|
|
324
331
|
sinceVersion: '5.8.0',
|
|
325
|
-
extraInfo:
|
|
326
|
-
|
|
332
|
+
extraInfo:
|
|
333
|
+
'Dropdown2 triggers should have all necessary attributes on DOM insertion',
|
|
334
|
+
deprecationType: 'JS',
|
|
327
335
|
});
|
|
328
336
|
lazyDeprecate();
|
|
329
337
|
}
|
|
@@ -335,62 +343,69 @@ bindLazyTriggerInitialisation();
|
|
|
335
343
|
// Dropdown trigger groups
|
|
336
344
|
// -----------------------
|
|
337
345
|
|
|
338
|
-
$(document).on(
|
|
339
|
-
|
|
346
|
+
$(document).on(
|
|
347
|
+
'mouseenter',
|
|
348
|
+
'.aui-dropdown2-trigger-group a, .aui-dropdown2-trigger-group button',
|
|
349
|
+
function (e) {
|
|
350
|
+
const $item = $(e.currentTarget);
|
|
340
351
|
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
352
|
+
if ($item.is('.aui-dropdown2-active')) {
|
|
353
|
+
return; // No point doing anything if we're hovering over the already-active item trigger.
|
|
354
|
+
}
|
|
344
355
|
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
356
|
+
if ($item.closest('.aui-dropdown2').length) {
|
|
357
|
+
return; // We don't want to deal with dropdown items, just the potential triggers in the group.
|
|
358
|
+
}
|
|
348
359
|
|
|
349
|
-
|
|
360
|
+
const $triggerGroup = $item.closest('.aui-dropdown2-trigger-group');
|
|
350
361
|
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
362
|
+
const $groupActiveTrigger = $triggerGroup.find('.aui-dropdown2-active');
|
|
363
|
+
if ($groupActiveTrigger.length && $item.is('.aui-dropdown2-trigger')) {
|
|
364
|
+
$groupActiveTrigger.blur(); // Remove focus from the previously opened menu.
|
|
365
|
+
$item.trigger('aui-button-invoke'); // Open this trigger's menu.
|
|
366
|
+
e.preventDefault();
|
|
367
|
+
}
|
|
357
368
|
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
369
|
+
const $groupFocusedTrigger = $triggerGroup.find(':focus');
|
|
370
|
+
if ($groupFocusedTrigger.length && $item.is('.aui-dropdown2-trigger')) {
|
|
371
|
+
$groupFocusedTrigger.blur();
|
|
372
|
+
}
|
|
361
373
|
}
|
|
362
|
-
|
|
363
|
-
|
|
374
|
+
);
|
|
364
375
|
|
|
365
376
|
// Dropdown items
|
|
366
377
|
// --------------
|
|
367
378
|
|
|
368
|
-
function getDropdownItems
|
|
379
|
+
function getDropdownItems(dropdown, filter) {
|
|
369
380
|
return $(dropdown)
|
|
370
|
-
.find(
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
+
.find(
|
|
382
|
+
[
|
|
383
|
+
// Legacy markup.
|
|
384
|
+
'> ul > li',
|
|
385
|
+
'> .aui-dropdown2-section > ul > li',
|
|
386
|
+
'> .aui-dropdown2-section > div[role="group"] > ul > li',
|
|
387
|
+
'> div > .aui-dropdown2-section > div[role="group"] > ul > li',
|
|
388
|
+
// Web component.
|
|
389
|
+
'aui-item-link',
|
|
390
|
+
'aui-item-checkbox',
|
|
391
|
+
'aui-item-radio',
|
|
392
|
+
].join(', ')
|
|
393
|
+
)
|
|
381
394
|
.filter(filter)
|
|
382
|
-
.children(
|
|
395
|
+
.children(
|
|
396
|
+
'a, button, [role="checkbox"], [role="menuitemcheckbox"], [role="radio"], [role="menuitemradio"]'
|
|
397
|
+
);
|
|
383
398
|
}
|
|
384
399
|
|
|
385
|
-
function getAllDropdownItems
|
|
400
|
+
function getAllDropdownItems(dropdown) {
|
|
386
401
|
return getDropdownItems(dropdown, () => true);
|
|
387
402
|
}
|
|
388
403
|
|
|
389
|
-
function getVisibleDropdownItems
|
|
404
|
+
function getVisibleDropdownItems(dropdown) {
|
|
390
405
|
return getDropdownItems(dropdown, (i, el) => !isHidden(el));
|
|
391
406
|
}
|
|
392
407
|
|
|
393
|
-
function amendDropdownItem
|
|
408
|
+
function amendDropdownItem(item) {
|
|
394
409
|
item.setAttribute('tabindex', '-1');
|
|
395
410
|
|
|
396
411
|
/**
|
|
@@ -402,7 +417,7 @@ function amendDropdownItem (item) {
|
|
|
402
417
|
}
|
|
403
418
|
}
|
|
404
419
|
|
|
405
|
-
function amendDropdownContent
|
|
420
|
+
function amendDropdownContent(dropdown) {
|
|
406
421
|
// Add assistive semantics to each dropdown item
|
|
407
422
|
getAllDropdownItems(dropdown).each((i, el) => amendDropdownItem(el));
|
|
408
423
|
}
|
|
@@ -415,16 +430,15 @@ function amendDropdownContent (dropdown) {
|
|
|
415
430
|
*
|
|
416
431
|
* Calling this function will add the new namespaced classes to elements with legacy names.
|
|
417
432
|
*/
|
|
418
|
-
function migrateAndSyncLegacyClassNames
|
|
433
|
+
function migrateAndSyncLegacyClassNames(dropdown) {
|
|
419
434
|
var $dropdown = $(dropdown);
|
|
420
435
|
|
|
421
436
|
// Migrate away from legacy, unprefixed class names
|
|
422
|
-
['disabled', 'interactive', 'active', 'checked'].forEach(type => {
|
|
437
|
+
['disabled', 'interactive', 'active', 'checked'].forEach((type) => {
|
|
423
438
|
$dropdown.find(`.${type}`).addClass(`aui-dropdown2-${type}`);
|
|
424
439
|
});
|
|
425
440
|
}
|
|
426
441
|
|
|
427
|
-
|
|
428
442
|
// The Dropdown itself
|
|
429
443
|
// -------------------
|
|
430
444
|
|
|
@@ -460,7 +474,7 @@ function setLayerAlignment(dropdown, trigger) {
|
|
|
460
474
|
preventOverflow: false,
|
|
461
475
|
// space between a dropdown trigger and the dropdown itself, based on @aui-dropdown-trigger-offset
|
|
462
476
|
// only added for dropdowns which are not submenus
|
|
463
|
-
offset:
|
|
477
|
+
offset: trigger.hasSubmenu && trigger.hasSubmenu() ? [-3, 0] : [0, 3],
|
|
464
478
|
});
|
|
465
479
|
|
|
466
480
|
dropdown._auiAlignment.enable();
|
|
@@ -471,7 +485,10 @@ function saveCurrentAlignment(dropdown) {
|
|
|
471
485
|
if (dropdown.hasAttribute('data-aui-alignment')) {
|
|
472
486
|
$dropdown.data('previous-data-aui-alignment', dropdown.getAttribute('data-aui-alignment'));
|
|
473
487
|
}
|
|
474
|
-
$dropdown.data(
|
|
488
|
+
$dropdown.data(
|
|
489
|
+
'had-data-aui-alignment-static',
|
|
490
|
+
dropdown.hasAttribute('data-aui-alignment-static')
|
|
491
|
+
);
|
|
475
492
|
}
|
|
476
493
|
|
|
477
494
|
function restorePreviousAlignment(dropdown) {
|
|
@@ -497,12 +514,12 @@ function getDropdownHideLocation(dropdown, trigger) {
|
|
|
497
514
|
}
|
|
498
515
|
|
|
499
516
|
var keyboardClose = false;
|
|
500
|
-
function keyboardCloseDetected
|
|
517
|
+
function keyboardCloseDetected() {
|
|
501
518
|
keyboardClose = true;
|
|
502
519
|
}
|
|
503
520
|
|
|
504
|
-
function wasProbablyClosedViaKeyboard
|
|
505
|
-
var result =
|
|
521
|
+
function wasProbablyClosedViaKeyboard() {
|
|
522
|
+
var result = keyboardClose === true;
|
|
506
523
|
keyboardClose = false;
|
|
507
524
|
return result;
|
|
508
525
|
}
|
|
@@ -510,7 +527,6 @@ function wasProbablyClosedViaKeyboard () {
|
|
|
510
527
|
function bindDropdownBehaviourToLayer(dropdown) {
|
|
511
528
|
layer(dropdown);
|
|
512
529
|
|
|
513
|
-
|
|
514
530
|
dropdown.addEventListener('aui-layer-show', function (e) {
|
|
515
531
|
if (dropdown !== e.target) {
|
|
516
532
|
return;
|
|
@@ -563,7 +579,7 @@ function bindDropdownBehaviourToLayer(dropdown) {
|
|
|
563
579
|
});
|
|
564
580
|
}
|
|
565
581
|
|
|
566
|
-
function bindItemInteractionBehaviourToDropdown
|
|
582
|
+
function bindItemInteractionBehaviourToDropdown(dropdown) {
|
|
567
583
|
var $dropdown = $(dropdown);
|
|
568
584
|
|
|
569
585
|
function belongsToDropdown(item) {
|
|
@@ -597,7 +613,7 @@ function bindItemInteractionBehaviourToDropdown (dropdown) {
|
|
|
597
613
|
}
|
|
598
614
|
});
|
|
599
615
|
|
|
600
|
-
const hideIfNotSubmenuAndNotInteractive = function(e) {
|
|
616
|
+
const hideIfNotSubmenuAndNotInteractive = function (e) {
|
|
601
617
|
const item = e.currentTarget;
|
|
602
618
|
|
|
603
619
|
if (item.getAttribute('aria-disabled') === 'true') {
|
|
@@ -609,73 +625,91 @@ function bindItemInteractionBehaviourToDropdown (dropdown) {
|
|
|
609
625
|
if (!isSubmenuTrigger && !item.classList.contains('aui-dropdown2-interactive')) {
|
|
610
626
|
dropdown.hideAll(true);
|
|
611
627
|
}
|
|
612
|
-
}
|
|
628
|
+
};
|
|
613
629
|
|
|
614
|
-
$dropdown.on(
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
630
|
+
$dropdown.on(
|
|
631
|
+
'click keydown',
|
|
632
|
+
'a, button, [role="menuitem"], [role="menuitemcheckbox"], [role="checkbox"], [role="menuitemradio"], [role="radio"]',
|
|
633
|
+
function (e) {
|
|
634
|
+
if (!belongsToDropdown(e.target)) {
|
|
635
|
+
return;
|
|
636
|
+
}
|
|
637
|
+
const item = e.currentTarget;
|
|
638
|
+
const eventKeyCode = e.keyCode;
|
|
639
|
+
const isEnter = eventKeyCode === keyCode.ENTER;
|
|
640
|
+
const isSpace = eventKeyCode === keyCode.SPACE;
|
|
622
641
|
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
642
|
+
// AUI-4283: Accessibility - need to ignore enter on links/buttons so
|
|
643
|
+
// that the dropdown remains visible to allow the click event to eventually fire.
|
|
644
|
+
const itemIgnoresEnter = isEnter && $(item).is('a[href], button');
|
|
626
645
|
|
|
627
|
-
|
|
628
|
-
|
|
646
|
+
if (!itemIgnoresEnter && (e.type === 'click' || isEnter || isSpace)) {
|
|
647
|
+
hideIfNotSubmenuAndNotInteractive(e);
|
|
648
|
+
}
|
|
629
649
|
}
|
|
630
|
-
|
|
650
|
+
);
|
|
631
651
|
|
|
632
652
|
// close all submenus when the mouse moves over items other than its trigger
|
|
633
|
-
$dropdown.on(
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
e.currentTarget.focus();
|
|
640
|
-
|
|
641
|
-
// We should close all submenus above which are not related to the focused trigger.
|
|
642
|
-
// For example if we hover over the trigger for submenu for this trigger be shown, when we move
|
|
643
|
-
// focus/mouse on the another trigger the previous will be closed.
|
|
644
|
-
let layerAbove = $(layer(dropdown).above()).get(0);
|
|
645
|
-
while (layerAbove && layerAbove.isDropdown && layerAbove !== dropdown) {
|
|
646
|
-
const layerId = layerAbove.getAttribute('id');
|
|
647
|
-
const targetDropdownId = e.target.getAttribute('aria-controls');
|
|
648
|
-
const nextLayer = layer(layerAbove).above();
|
|
649
|
-
|
|
650
|
-
if (targetDropdownId !== layerId) {
|
|
651
|
-
// We should .hide() only after we get nextLayer,
|
|
652
|
-
// otherwise we will get the first visible layer.
|
|
653
|
-
layer(layerAbove).hide();
|
|
653
|
+
$dropdown.on(
|
|
654
|
+
'mouseenter',
|
|
655
|
+
'a, button, [role="menuitem"], [role="menuitemcheckbox"], [role="checkbox"], [role="menuitemradio"], [role="radio"]',
|
|
656
|
+
function (e) {
|
|
657
|
+
if (!belongsToDropdown(e.target)) {
|
|
658
|
+
return;
|
|
654
659
|
}
|
|
655
660
|
|
|
656
|
-
|
|
661
|
+
// Focus the current element to allow Screen Reader to announce a focused menuitem.
|
|
662
|
+
e.currentTarget.focus();
|
|
663
|
+
|
|
664
|
+
// We should close all submenus above which are not related to the focused trigger.
|
|
665
|
+
// For example if we hover over the trigger for submenu for this trigger be shown, when we move
|
|
666
|
+
// focus/mouse on the another trigger the previous will be closed.
|
|
667
|
+
let layerAbove = $(layer(dropdown).above()).get(0);
|
|
668
|
+
while (layerAbove && layerAbove.isDropdown && layerAbove !== dropdown) {
|
|
669
|
+
const layerId = layerAbove.getAttribute('id');
|
|
670
|
+
const targetDropdownId = e.target.getAttribute('aria-controls');
|
|
671
|
+
const nextLayer = layer(layerAbove).above();
|
|
672
|
+
|
|
673
|
+
if (targetDropdownId !== layerId) {
|
|
674
|
+
// We should .hide() only after we get nextLayer,
|
|
675
|
+
// otherwise we will get the first visible layer.
|
|
676
|
+
layer(layerAbove).hide();
|
|
677
|
+
}
|
|
678
|
+
|
|
679
|
+
layerAbove = $(nextLayer).get(0);
|
|
680
|
+
}
|
|
657
681
|
}
|
|
658
|
-
|
|
682
|
+
);
|
|
659
683
|
}
|
|
660
684
|
|
|
661
|
-
$(window).on(
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
685
|
+
$(window).on(
|
|
686
|
+
'resize',
|
|
687
|
+
debounce(
|
|
688
|
+
function () {
|
|
689
|
+
$('.aui-dropdown2').each(function (index, dropdown) {
|
|
690
|
+
skate.init(dropdown);
|
|
691
|
+
if (dropdown.isVisible()) {
|
|
692
|
+
dropdown.hide();
|
|
693
|
+
}
|
|
694
|
+
});
|
|
695
|
+
},
|
|
696
|
+
1000,
|
|
697
|
+
true
|
|
698
|
+
)
|
|
699
|
+
);
|
|
669
700
|
|
|
670
701
|
// Dropdowns
|
|
671
702
|
// ---------
|
|
672
703
|
|
|
673
|
-
function dropdownCreated
|
|
704
|
+
function dropdownCreated(dropdown) {
|
|
674
705
|
dropdown.classList.add('aui-dropdown2');
|
|
675
|
-
dropdown.setAttribute('tabindex','-1');
|
|
706
|
+
dropdown.setAttribute('tabindex', '-1');
|
|
676
707
|
|
|
677
708
|
if (dropdown.hasAttribute('data-container')) {
|
|
678
|
-
dropdown.setAttribute(
|
|
709
|
+
dropdown.setAttribute(
|
|
710
|
+
'data-aui-alignment-container',
|
|
711
|
+
dropdown.getAttribute('data-container')
|
|
712
|
+
);
|
|
679
713
|
dropdown.removeAttribute('data-container');
|
|
680
714
|
}
|
|
681
715
|
|
|
@@ -714,9 +748,13 @@ function dropdownCreated (dropdown) {
|
|
|
714
748
|
|
|
715
749
|
if (this.isEnabled() && this.isChecked() === false) {
|
|
716
750
|
// toggle the checked state
|
|
717
|
-
$(radio)
|
|
718
|
-
|
|
719
|
-
|
|
751
|
+
$(radio)
|
|
752
|
+
.closest('ul,[role=group]')
|
|
753
|
+
.find('.aui-dropdown2-checked')
|
|
754
|
+
.not(this)
|
|
755
|
+
.each(function () {
|
|
756
|
+
this.uncheck();
|
|
757
|
+
});
|
|
720
758
|
radio.check();
|
|
721
759
|
}
|
|
722
760
|
}
|
|
@@ -906,7 +944,7 @@ var dropdownPrototype = {
|
|
|
906
944
|
/**
|
|
907
945
|
* Shows that current element is a dropdown
|
|
908
946
|
*/
|
|
909
|
-
isDropdown: true
|
|
947
|
+
isDropdown: true,
|
|
910
948
|
};
|
|
911
949
|
|
|
912
950
|
// Web component API for dropdowns
|
|
@@ -922,7 +960,7 @@ var disabledAttributeHandler = {
|
|
|
922
960
|
var a = element.children[0];
|
|
923
961
|
a.setAttribute('aria-disabled', 'false');
|
|
924
962
|
a.classList.remove('disabled', 'aui-dropdown2-disabled');
|
|
925
|
-
}
|
|
963
|
+
},
|
|
926
964
|
};
|
|
927
965
|
|
|
928
966
|
var interactiveAttributeHandler = {
|
|
@@ -933,7 +971,7 @@ var interactiveAttributeHandler = {
|
|
|
933
971
|
removed: function (element) {
|
|
934
972
|
var a = element.children[0];
|
|
935
973
|
a.classList.remove('interactive', 'aui-dropdown2-interactive');
|
|
936
|
-
}
|
|
974
|
+
},
|
|
937
975
|
};
|
|
938
976
|
|
|
939
977
|
var checkedAttributeHandler = {
|
|
@@ -941,14 +979,14 @@ var checkedAttributeHandler = {
|
|
|
941
979
|
var a = element.children[0];
|
|
942
980
|
a.classList.add('checked', 'aui-dropdown2-checked');
|
|
943
981
|
a.setAttribute('aria-checked', true);
|
|
944
|
-
element.dispatchEvent(new CustomEvent('change', {bubbles: true}));
|
|
982
|
+
element.dispatchEvent(new CustomEvent('change', { bubbles: true }));
|
|
945
983
|
},
|
|
946
984
|
removed: function (element) {
|
|
947
985
|
var a = element.children[0];
|
|
948
986
|
a.classList.remove('checked', 'aui-dropdown2-checked');
|
|
949
987
|
a.setAttribute('aria-checked', false);
|
|
950
|
-
element.dispatchEvent(new CustomEvent('change', {bubbles: true}));
|
|
951
|
-
}
|
|
988
|
+
element.dispatchEvent(new CustomEvent('change', { bubbles: true }));
|
|
989
|
+
},
|
|
952
990
|
};
|
|
953
991
|
|
|
954
992
|
var hiddenAttributeHandler = {
|
|
@@ -957,10 +995,10 @@ var hiddenAttributeHandler = {
|
|
|
957
995
|
},
|
|
958
996
|
removed: function (element) {
|
|
959
997
|
disabledAttributeHandler.removed(element);
|
|
960
|
-
}
|
|
998
|
+
},
|
|
961
999
|
};
|
|
962
1000
|
|
|
963
|
-
var stringAttributeHandlerGenerator = function(attrName) {
|
|
1001
|
+
var stringAttributeHandlerGenerator = function (attrName) {
|
|
964
1002
|
return {
|
|
965
1003
|
fallback: function (element, change) {
|
|
966
1004
|
var a = element.children[0];
|
|
@@ -969,25 +1007,26 @@ var stringAttributeHandlerGenerator = function(attrName) {
|
|
|
969
1007
|
removed: function (element) {
|
|
970
1008
|
var a = element.children[0];
|
|
971
1009
|
a.removeAttribute(attrName);
|
|
972
|
-
}
|
|
1010
|
+
},
|
|
973
1011
|
};
|
|
974
1012
|
};
|
|
975
1013
|
|
|
976
1014
|
const convertCssClassesToArray = function (spaceDelimitedClasses = '') {
|
|
977
|
-
return spaceDelimitedClasses
|
|
978
|
-
|
|
1015
|
+
return spaceDelimitedClasses
|
|
1016
|
+
.split(' ')
|
|
1017
|
+
.map((str) => str.trim())
|
|
1018
|
+
.filter((x) => x);
|
|
1019
|
+
};
|
|
979
1020
|
|
|
980
1021
|
const ItemLinkEl = skate('aui-item-link', {
|
|
981
|
-
template: template(
|
|
982
|
-
'<a role="menuitem" tabindex="-1"><content></content></a>'
|
|
983
|
-
),
|
|
1022
|
+
template: template('<a role="menuitem" tabindex="-1"><content></content></a>'),
|
|
984
1023
|
attributes: {
|
|
985
|
-
disabled: disabledAttributeHandler,
|
|
986
|
-
interactive: interactiveAttributeHandler,
|
|
987
|
-
hidden: hiddenAttributeHandler,
|
|
988
|
-
href: stringAttributeHandlerGenerator('href'),
|
|
1024
|
+
'disabled': disabledAttributeHandler,
|
|
1025
|
+
'interactive': interactiveAttributeHandler,
|
|
1026
|
+
'hidden': hiddenAttributeHandler,
|
|
1027
|
+
'href': stringAttributeHandlerGenerator('href'),
|
|
989
1028
|
'item-id': stringAttributeHandlerGenerator('id'),
|
|
990
|
-
for: {
|
|
1029
|
+
'for': {
|
|
991
1030
|
created: function (element) {
|
|
992
1031
|
var anchor = element.children[0];
|
|
993
1032
|
anchor.setAttribute('aria-controls', element.getAttribute('for'));
|
|
@@ -1001,7 +1040,7 @@ const ItemLinkEl = skate('aui-item-link', {
|
|
|
1001
1040
|
var anchor = element.children[0];
|
|
1002
1041
|
anchor.removeAttribute('aria-controls');
|
|
1003
1042
|
$(anchor).removeClass('aui-dropdown2-sub-trigger');
|
|
1004
|
-
}
|
|
1043
|
+
},
|
|
1005
1044
|
},
|
|
1006
1045
|
'extra-classes': function (element, change) {
|
|
1007
1046
|
const anchor = element.children[0];
|
|
@@ -1015,17 +1054,17 @@ const ItemLinkEl = skate('aui-item-link', {
|
|
|
1015
1054
|
},
|
|
1016
1055
|
});
|
|
1017
1056
|
|
|
1018
|
-
const [ItemCheckboxEl, ItemRadioEl] = ['checkbox', 'radio'].map(type => {
|
|
1057
|
+
const [ItemCheckboxEl, ItemRadioEl] = ['checkbox', 'radio'].map((type) => {
|
|
1019
1058
|
return skate(`aui-item-${type}`, {
|
|
1020
1059
|
template: template(
|
|
1021
1060
|
`<span role="menuitem${type}" class="aui-dropdown2-${type}" tabindex="-1"><content></content></span>`
|
|
1022
1061
|
),
|
|
1023
1062
|
attributes: {
|
|
1024
1063
|
'item-id': stringAttributeHandlerGenerator('id'),
|
|
1025
|
-
disabled: disabledAttributeHandler,
|
|
1026
|
-
interactive: interactiveAttributeHandler,
|
|
1027
|
-
checked: checkedAttributeHandler,
|
|
1028
|
-
hidden: hiddenAttributeHandler
|
|
1064
|
+
'disabled': disabledAttributeHandler,
|
|
1065
|
+
'interactive': interactiveAttributeHandler,
|
|
1066
|
+
'checked': checkedAttributeHandler,
|
|
1067
|
+
'hidden': hiddenAttributeHandler,
|
|
1029
1068
|
},
|
|
1030
1069
|
});
|
|
1031
1070
|
});
|
|
@@ -1045,11 +1084,11 @@ const SectionEl = skate('aui-section', {
|
|
|
1045
1084
|
headingElement.textContent = data.newValue;
|
|
1046
1085
|
headingElement.id = id;
|
|
1047
1086
|
groupElement.setAttribute('aria-labelledby', id);
|
|
1048
|
-
}
|
|
1087
|
+
},
|
|
1049
1088
|
},
|
|
1050
1089
|
created: function (element) {
|
|
1051
1090
|
element.classList.add('aui-dropdown2-section');
|
|
1052
|
-
}
|
|
1091
|
+
},
|
|
1053
1092
|
});
|
|
1054
1093
|
|
|
1055
1094
|
const DropdownEl = skate('aui-dropdown-menu', {
|
|
@@ -1065,12 +1104,12 @@ const DropdownEl = skate('aui-dropdown-menu', {
|
|
|
1065
1104
|
ifGone(dropdown).then(() => destroyAlignment(dropdown));
|
|
1066
1105
|
},
|
|
1067
1106
|
attributes: {
|
|
1068
|
-
src: {}
|
|
1107
|
+
src: {},
|
|
1069
1108
|
},
|
|
1070
1109
|
prototype: dropdownPrototype,
|
|
1071
1110
|
events: {
|
|
1072
|
-
'aui-layer-show': loadContentWhenMenuShown
|
|
1073
|
-
}
|
|
1111
|
+
'aui-layer-show': loadContentWhenMenuShown,
|
|
1112
|
+
},
|
|
1074
1113
|
});
|
|
1075
1114
|
|
|
1076
1115
|
// Legacy dropdown inits
|
|
@@ -1079,19 +1118,19 @@ const DropdownEl = skate('aui-dropdown-menu', {
|
|
|
1079
1118
|
skate('aui-dropdown2', {
|
|
1080
1119
|
type: skate.type.CLASSNAME,
|
|
1081
1120
|
created: dropdownCreated,
|
|
1082
|
-
prototype: dropdownPrototype
|
|
1121
|
+
prototype: dropdownPrototype,
|
|
1083
1122
|
});
|
|
1084
1123
|
|
|
1085
1124
|
skate('data-aui-dropdown2', {
|
|
1086
1125
|
type: skate.type.ATTRIBUTE,
|
|
1087
1126
|
created: dropdownCreated,
|
|
1088
|
-
prototype: dropdownPrototype
|
|
1127
|
+
prototype: dropdownPrototype,
|
|
1089
1128
|
});
|
|
1090
1129
|
|
|
1091
1130
|
skate('aui-dropdown2-trigger', {
|
|
1092
1131
|
type: skate.type.CLASSNAME,
|
|
1093
1132
|
created: triggerCreated,
|
|
1094
|
-
prototype: triggerPrototype
|
|
1133
|
+
prototype: triggerPrototype,
|
|
1095
1134
|
});
|
|
1096
1135
|
|
|
1097
1136
|
skate('aui-dropdown2-sub-trigger', {
|
|
@@ -1099,22 +1138,21 @@ skate('aui-dropdown2-sub-trigger', {
|
|
|
1099
1138
|
created: function (trigger) {
|
|
1100
1139
|
trigger.classList.add('aui-dropdown2-trigger');
|
|
1101
1140
|
skate.init(trigger);
|
|
1102
|
-
}
|
|
1141
|
+
},
|
|
1103
1142
|
});
|
|
1104
1143
|
|
|
1105
1144
|
// Checkboxes and radios
|
|
1106
1145
|
// ---------------------
|
|
1107
|
-
['checkbox', 'radio'].map(type => {
|
|
1146
|
+
['checkbox', 'radio'].map((type) => {
|
|
1108
1147
|
return skate(`aui-dropdown2-${type}`, {
|
|
1109
1148
|
type: skate.type.CLASSNAME,
|
|
1110
1149
|
|
|
1111
1150
|
created: function (checkbox) {
|
|
1112
1151
|
// determine checked state based on any one of three attributes, then sync all of them.
|
|
1113
|
-
const checked =
|
|
1152
|
+
const checked =
|
|
1114
1153
|
checkbox.getAttribute('aria-checked') === 'true' ||
|
|
1115
1154
|
checkbox.classList.contains('checked') ||
|
|
1116
|
-
checkbox.classList.contains('aui-dropdown2-checked')
|
|
1117
|
-
);
|
|
1155
|
+
checkbox.classList.contains('aui-dropdown2-checked');
|
|
1118
1156
|
checkbox.classList[checked ? 'add' : 'remove']('checked', 'aui-dropdown2-checked');
|
|
1119
1157
|
checkbox.setAttribute('aria-checked', checked);
|
|
1120
1158
|
|
|
@@ -1158,15 +1196,9 @@ skate('aui-dropdown2-sub-trigger', {
|
|
|
1158
1196
|
.attr('aria-checked', 'true')
|
|
1159
1197
|
.addClass('checked aui-dropdown2-checked')
|
|
1160
1198
|
.trigger('aui-dropdown2-item-check');
|
|
1161
|
-
}
|
|
1162
|
-
}
|
|
1199
|
+
},
|
|
1200
|
+
},
|
|
1163
1201
|
});
|
|
1164
|
-
})
|
|
1165
|
-
|
|
1166
|
-
export {
|
|
1167
|
-
DropdownEl,
|
|
1168
|
-
ItemLinkEl,
|
|
1169
|
-
ItemRadioEl,
|
|
1170
|
-
ItemCheckboxEl,
|
|
1171
|
-
SectionEl,
|
|
1172
|
-
};
|
|
1202
|
+
});
|
|
1203
|
+
|
|
1204
|
+
export { DropdownEl, ItemLinkEl, ItemRadioEl, ItemCheckboxEl, SectionEl };
|