@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
|
@@ -5,13 +5,13 @@ const special = {
|
|
|
5
5
|
'>': '>',
|
|
6
6
|
'&': '&',
|
|
7
7
|
'"': '"',
|
|
8
|
-
'
|
|
8
|
+
"'": ''',
|
|
9
9
|
'`': '`',
|
|
10
10
|
};
|
|
11
11
|
|
|
12
12
|
const expr = new RegExp(`[${Object.keys(special).join('')}]`, 'g');
|
|
13
13
|
|
|
14
|
-
function escapeHtml
|
|
14
|
+
function escapeHtml(str) {
|
|
15
15
|
return str.replace(expr, (str) => special[str]);
|
|
16
16
|
}
|
|
17
17
|
|
package/src/js/aui/escape.js
CHANGED
package/src/js/aui/event.js
CHANGED
|
@@ -9,7 +9,7 @@ const $target = $(window);
|
|
|
9
9
|
* Binds events to the window object. See jQuery bind documentation for more
|
|
10
10
|
* details. Exceptions are caught and logged.
|
|
11
11
|
*/
|
|
12
|
-
function bind
|
|
12
|
+
function bind(eventType, eventData, handler) {
|
|
13
13
|
try {
|
|
14
14
|
if (typeof handler === 'function') {
|
|
15
15
|
return $target.on(eventType, EMPTY_SELECTOR, eventData, handler);
|
|
@@ -25,7 +25,7 @@ function bind (eventType, eventData, handler) {
|
|
|
25
25
|
* Unbinds event handlers from the window object. See jQuery unbind
|
|
26
26
|
* documentation for more details. Exceptions are caught and logged.
|
|
27
27
|
*/
|
|
28
|
-
function unbind
|
|
28
|
+
function unbind(eventType, handler) {
|
|
29
29
|
try {
|
|
30
30
|
return $target.off(eventType, handler);
|
|
31
31
|
} catch (e) {
|
|
@@ -37,7 +37,7 @@ function unbind (eventType, handler) {
|
|
|
37
37
|
* Triggers events on the window object. See jQuery trigger documentation for
|
|
38
38
|
* more details. Exceptions are caught and logged.
|
|
39
39
|
*/
|
|
40
|
-
function trigger
|
|
40
|
+
function trigger(eventType, extraParameters) {
|
|
41
41
|
try {
|
|
42
42
|
return $target.trigger(eventType, extraParameters);
|
|
43
43
|
} catch (e) {
|
|
@@ -49,8 +49,4 @@ globalize('bind', bind);
|
|
|
49
49
|
globalize('trigger', trigger);
|
|
50
50
|
globalize('unbind', unbind);
|
|
51
51
|
|
|
52
|
-
export {
|
|
53
|
-
bind,
|
|
54
|
-
unbind,
|
|
55
|
-
trigger
|
|
56
|
-
};
|
|
52
|
+
export { bind, unbind, trigger };
|
package/src/js/aui/expander.js
CHANGED
|
@@ -2,7 +2,6 @@ import $ from './jquery';
|
|
|
2
2
|
|
|
3
3
|
import { getMessageLogger } from './internal/deprecation';
|
|
4
4
|
|
|
5
|
-
|
|
6
5
|
const deprecate = {
|
|
7
6
|
'aria-expanded': getMessageLogger('Expander [aria-expanded] attribute', {
|
|
8
7
|
removeInVersion: '10.0.0',
|
|
@@ -23,7 +22,7 @@ const deprecate = {
|
|
|
23
22
|
sinceVersion: '9.9.0',
|
|
24
23
|
deprecationType: 'EXPANDER CLASS (PATTERN)',
|
|
25
24
|
}),
|
|
26
|
-
}
|
|
25
|
+
};
|
|
27
26
|
|
|
28
27
|
const getExpanderProperties = ($trigger) => {
|
|
29
28
|
const $content = $(`#${$trigger.attr('aria-controls')}`);
|
|
@@ -55,7 +54,8 @@ const getExpanderProperties = ($trigger) => {
|
|
|
55
54
|
};
|
|
56
55
|
|
|
57
56
|
function expand($trigger) {
|
|
58
|
-
const { $content, isTriggerParent, $shortContent, textReplacement } =
|
|
57
|
+
const { $content, isTriggerParent, $shortContent, textReplacement } =
|
|
58
|
+
getExpanderProperties($trigger);
|
|
59
59
|
|
|
60
60
|
$trigger.attr('aria-expanded', 'true');
|
|
61
61
|
$content.addClass('expanded');
|
|
@@ -70,7 +70,8 @@ function expand($trigger) {
|
|
|
70
70
|
}
|
|
71
71
|
|
|
72
72
|
function collapse($trigger) {
|
|
73
|
-
const { $content, isTriggerParent, $shortContent, textReplacement } =
|
|
73
|
+
const { $content, isTriggerParent, $shortContent, textReplacement } =
|
|
74
|
+
getExpanderProperties($trigger);
|
|
74
75
|
|
|
75
76
|
replaceText($trigger, textReplacement);
|
|
76
77
|
$trigger.attr('aria-expanded', 'false');
|
|
@@ -87,7 +88,6 @@ function collapse($trigger) {
|
|
|
87
88
|
$trigger.trigger('aui-expander-collapsed');
|
|
88
89
|
}
|
|
89
90
|
|
|
90
|
-
|
|
91
91
|
function init($trigger) {
|
|
92
92
|
const { $content, isTriggerParent, isExpanded } = getExpanderProperties($trigger);
|
|
93
93
|
|
|
@@ -120,7 +120,9 @@ function init($trigger) {
|
|
|
120
120
|
}
|
|
121
121
|
|
|
122
122
|
const replaceText = ($trigger, textReplacement) => {
|
|
123
|
-
if (!textReplacement) {
|
|
123
|
+
if (!textReplacement) {
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
124
126
|
|
|
125
127
|
/**
|
|
126
128
|
* ! Deprecated since 9.9.0
|
|
@@ -144,7 +146,7 @@ const replaceText = ($trigger, textReplacement) => {
|
|
|
144
146
|
|
|
145
147
|
const EXPANDER_EVENTS = {
|
|
146
148
|
'aui-expander-invoke': function (event) {
|
|
147
|
-
const $trigger = $(event.currentTarget)
|
|
149
|
+
const $trigger = $(event.currentTarget);
|
|
148
150
|
const { isCollapsible, isExpanded } = getExpanderProperties($trigger);
|
|
149
151
|
|
|
150
152
|
if (isExpanded && isCollapsible) {
|
|
@@ -155,7 +157,7 @@ const EXPANDER_EVENTS = {
|
|
|
155
157
|
},
|
|
156
158
|
|
|
157
159
|
'aui-expander-expand': function (event) {
|
|
158
|
-
expand($(event.currentTarget))
|
|
160
|
+
expand($(event.currentTarget));
|
|
159
161
|
},
|
|
160
162
|
|
|
161
163
|
'aui-expander-collapse': function (event) {
|
|
@@ -165,13 +167,13 @@ const EXPANDER_EVENTS = {
|
|
|
165
167
|
'click.aui-expander': function (event) {
|
|
166
168
|
const $target = $(event.currentTarget);
|
|
167
169
|
$target.trigger('aui-expander-invoke', event.currentTarget);
|
|
168
|
-
}
|
|
170
|
+
},
|
|
169
171
|
};
|
|
170
172
|
|
|
171
173
|
$(document).on(EXPANDER_EVENTS, '.aui-expander-trigger');
|
|
172
|
-
$(document).ready(function() {
|
|
173
|
-
$('.aui-expander-trigger').each(function() {
|
|
174
|
+
$(document).ready(function () {
|
|
175
|
+
$('.aui-expander-trigger').each(function () {
|
|
174
176
|
const $trigger = $(this);
|
|
175
177
|
init($trigger);
|
|
176
|
-
})
|
|
177
|
-
})
|
|
178
|
+
});
|
|
179
|
+
});
|
package/src/js/aui/flag.js
CHANGED
|
@@ -19,10 +19,10 @@ const DEFAULT_OPTIONS = {
|
|
|
19
19
|
title: '',
|
|
20
20
|
type: 'info',
|
|
21
21
|
duration: AUTO_CLOSE_TIME,
|
|
22
|
-
ariaLive: 'polite'
|
|
22
|
+
ariaLive: 'polite',
|
|
23
23
|
};
|
|
24
24
|
|
|
25
|
-
function flag
|
|
25
|
+
function flag(flagOptions) {
|
|
26
26
|
const options = defaults(flagOptions, DEFAULT_OPTIONS);
|
|
27
27
|
options.title = (options.title || '').toString().trim();
|
|
28
28
|
const $flag = renderFlagElement(options);
|
|
@@ -42,15 +42,15 @@ function flag (flagOptions) {
|
|
|
42
42
|
insertFlag($flag);
|
|
43
43
|
|
|
44
44
|
setTimeout(function () {
|
|
45
|
-
if (
|
|
45
|
+
if ($flag.attr('role') === 'alertdialog') {
|
|
46
46
|
getFocusManager.global.enter($flag);
|
|
47
47
|
}
|
|
48
|
-
}, 0)
|
|
48
|
+
}, 0);
|
|
49
49
|
|
|
50
50
|
return $flag.get(0);
|
|
51
51
|
}
|
|
52
52
|
|
|
53
|
-
function extendFlagElement
|
|
53
|
+
function extendFlagElement($flag) {
|
|
54
54
|
const flag = $flag[0];
|
|
55
55
|
|
|
56
56
|
flag.close = function () {
|
|
@@ -71,7 +71,7 @@ function getDefaultAriaLabelForFlagType(type) {
|
|
|
71
71
|
}
|
|
72
72
|
}
|
|
73
73
|
|
|
74
|
-
function renderFlagElement
|
|
74
|
+
function renderFlagElement({ body, title, close, type, ariaLive, ariaLabel, ariaDescription }) {
|
|
75
75
|
const titleHtml = title ? `<p class="title"><strong>${escapeHtml(title)}</strong></p>` : '';
|
|
76
76
|
const html = `<div class="aui-message">${titleHtml}</div>`;
|
|
77
77
|
if (!ariaLabel) {
|
|
@@ -94,16 +94,20 @@ function renderFlagElement ({ body, title, close, type, ariaLive, ariaLabel, ari
|
|
|
94
94
|
'aria-hidden': 'false',
|
|
95
95
|
'aria-live': escapeHtml(ariaLive),
|
|
96
96
|
'role': ariaRole,
|
|
97
|
-
...(isFocusable
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
97
|
+
...(isFocusable
|
|
98
|
+
? {
|
|
99
|
+
'data-aui-focus-selector': FOCUSABLE_QUERY.split(', ')
|
|
100
|
+
.map((item) => `.aui-message ${item}`)
|
|
101
|
+
.join(', '),
|
|
102
|
+
'data-aui-focus': 'true',
|
|
103
|
+
}
|
|
104
|
+
: {}),
|
|
105
|
+
...(!!ariaDescription ? { 'aria-description': escapeHtml(ariaDescription) } : {}),
|
|
102
106
|
})
|
|
103
107
|
.append($message);
|
|
104
108
|
}
|
|
105
109
|
|
|
106
|
-
function makeCloseable
|
|
110
|
+
function makeCloseable($flag) {
|
|
107
111
|
const $icon = $(CLOSE_BUTTON);
|
|
108
112
|
|
|
109
113
|
$icon.on('click', function () {
|
|
@@ -111,7 +115,7 @@ function makeCloseable ($flag) {
|
|
|
111
115
|
});
|
|
112
116
|
|
|
113
117
|
$icon.on('keypress', function (e) {
|
|
114
|
-
if (
|
|
118
|
+
if (e.which === keyCode.ENTER || e.which === keyCode.SPACE) {
|
|
115
119
|
closeFlag($flag);
|
|
116
120
|
e.preventDefault();
|
|
117
121
|
}
|
|
@@ -120,14 +124,14 @@ function makeCloseable ($flag) {
|
|
|
120
124
|
return $flag.find('.aui-message').append($icon)[0];
|
|
121
125
|
}
|
|
122
126
|
|
|
123
|
-
function makeAutoClosable
|
|
127
|
+
function makeAutoClosable($flag, duration) {
|
|
124
128
|
$flag.find('.aui-message').addClass('aui-will-close');
|
|
125
129
|
setTimeout(function () {
|
|
126
130
|
$flag[0].close();
|
|
127
131
|
}, duration);
|
|
128
132
|
}
|
|
129
133
|
|
|
130
|
-
function closeFlag
|
|
134
|
+
function closeFlag($flagToClose) {
|
|
131
135
|
const flag = $flagToClose.get(0);
|
|
132
136
|
|
|
133
137
|
if ($flagToClose.attr('role') === 'alertdialog') {
|
|
@@ -143,31 +147,29 @@ function closeFlag ($flagToClose) {
|
|
|
143
147
|
return flag;
|
|
144
148
|
}
|
|
145
149
|
|
|
146
|
-
function handleFlagContainer
|
|
150
|
+
function handleFlagContainer() {
|
|
147
151
|
const container = findContainer();
|
|
148
152
|
|
|
149
153
|
if (container) {
|
|
150
154
|
const closedFlags = container.querySelectorAll('.aui-flag:not([open])');
|
|
151
155
|
|
|
152
|
-
Array.from(closedFlags).map(flag => flag.parentNode.removeChild(flag));
|
|
156
|
+
Array.from(closedFlags).map((flag) => flag.parentNode.removeChild(flag));
|
|
153
157
|
} else {
|
|
154
158
|
$('body').prepend('<div id="' + ID_FLAG_CONTAINER + '"></div>');
|
|
155
159
|
}
|
|
156
160
|
}
|
|
157
161
|
|
|
158
|
-
function findContainer
|
|
162
|
+
function findContainer() {
|
|
159
163
|
return document.getElementById(ID_FLAG_CONTAINER);
|
|
160
164
|
}
|
|
161
165
|
|
|
162
|
-
function insertFlag
|
|
166
|
+
function insertFlag($flag) {
|
|
163
167
|
const flagContainer = findContainer();
|
|
164
168
|
|
|
165
169
|
$flag.appendTo(flagContainer);
|
|
166
170
|
recomputeStyle($flag);
|
|
167
171
|
|
|
168
|
-
$flag
|
|
169
|
-
.removeAttr('hidden')
|
|
170
|
-
.attr('open', '');
|
|
172
|
+
$flag.removeAttr('hidden').attr('open', '');
|
|
171
173
|
}
|
|
172
174
|
|
|
173
175
|
amdify('aui/flag', flag);
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
import $ from './jquery';
|
|
2
2
|
import globalize from './internal/globalize';
|
|
3
3
|
import keyCodes from './key-code';
|
|
4
|
-
import {getTrigger} from './trigger';
|
|
4
|
+
import { getTrigger } from './trigger';
|
|
5
5
|
|
|
6
|
-
(function initSelectors
|
|
6
|
+
(function initSelectors() {
|
|
7
7
|
/*
|
|
8
8
|
:tabbable and :focusable functions from jQuery UI v 1.10.4
|
|
9
9
|
renamed to :aui-tabbable and :aui-focusable to not clash with jquery-ui if it's included.
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
|
-
function visible
|
|
13
|
-
return
|
|
12
|
+
function visible(element) {
|
|
13
|
+
return $.css(element, 'visibility') === 'visible' && $(element).is(':visible');
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
function focusable
|
|
16
|
+
function focusable(element, isTabIndexNotNaN) {
|
|
17
17
|
var nodeName = element.nodeName.toLowerCase();
|
|
18
18
|
|
|
19
19
|
if (nodeName === 'aui-select') {
|
|
@@ -32,27 +32,27 @@ import {getTrigger} from './trigger';
|
|
|
32
32
|
}
|
|
33
33
|
var isFormElement = /input|select|textarea|button|object|iframe/.test(nodeName);
|
|
34
34
|
var isAnchor = nodeName === 'a';
|
|
35
|
-
var isAnchorTabbable =
|
|
35
|
+
var isAnchorTabbable = element.href || isTabIndexNotNaN;
|
|
36
36
|
|
|
37
37
|
return (
|
|
38
|
-
isFormElement ? !element.disabled :
|
|
39
|
-
|
|
40
|
-
)
|
|
38
|
+
(isFormElement ? !element.disabled : isAnchor ? isAnchorTabbable : isTabIndexNotNaN) &&
|
|
39
|
+
visible(element)
|
|
40
|
+
);
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
-
function tabbable
|
|
43
|
+
function tabbable(element) {
|
|
44
44
|
var tabIndex = $.attr(element, 'tabindex');
|
|
45
45
|
var isTabIndexNaN = isNaN(tabIndex);
|
|
46
|
-
var hasTabIndex =
|
|
46
|
+
var hasTabIndex = isTabIndexNaN || tabIndex >= 0;
|
|
47
47
|
|
|
48
48
|
return hasTabIndex && focusable(element, !isTabIndexNaN);
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
$.extend($.expr.pseudos, {
|
|
52
|
-
'aui-focusable': element => focusable(element, !isNaN($.attr(element, 'tabindex'))),
|
|
53
|
-
'aui-tabbable': tabbable
|
|
52
|
+
'aui-focusable': (element) => focusable(element, !isNaN($.attr(element, 'tabindex'))),
|
|
53
|
+
'aui-tabbable': tabbable,
|
|
54
54
|
});
|
|
55
|
-
}()
|
|
55
|
+
})();
|
|
56
56
|
|
|
57
57
|
var RESTORE_FOCUS_DATA_KEY = '_aui-focus-restore';
|
|
58
58
|
|
|
@@ -62,15 +62,15 @@ var RESTORE_FOCUS_DATA_KEY = '_aui-focus-restore';
|
|
|
62
62
|
* @param {HTMLElement} $el - element to store the data about focus
|
|
63
63
|
* @param {Element} [lastFocussedEl=document.activeElement] - last focused element
|
|
64
64
|
*/
|
|
65
|
-
function setLastFocus
|
|
65
|
+
function setLastFocus($el, lastFocussedEl = document.activeElement) {
|
|
66
66
|
$el.data(RESTORE_FOCUS_DATA_KEY, lastFocussedEl);
|
|
67
67
|
}
|
|
68
68
|
|
|
69
|
-
function getLastFocus
|
|
69
|
+
function getLastFocus($el) {
|
|
70
70
|
return $($el.data(RESTORE_FOCUS_DATA_KEY));
|
|
71
71
|
}
|
|
72
72
|
|
|
73
|
-
function elementTrapsFocus
|
|
73
|
+
function elementTrapsFocus($el) {
|
|
74
74
|
return $el.is('.aui-dialog2') || $el.is('[aui-focus-trap="true"]');
|
|
75
75
|
}
|
|
76
76
|
|
|
@@ -89,7 +89,8 @@ FocusManager.prototype.enter = function ($el, $lastFocused) {
|
|
|
89
89
|
|
|
90
90
|
// focus on new selector
|
|
91
91
|
if ($el.attr('data-aui-focus') !== 'false') {
|
|
92
|
-
var focusSelector =
|
|
92
|
+
var focusSelector =
|
|
93
|
+
$el.attr('data-aui-focus-selector') || FocusManager.defaultFocusSelector;
|
|
93
94
|
var $focusEl = $el.is(focusSelector) ? $el : $el.find(focusSelector);
|
|
94
95
|
$focusEl.first().trigger('focus');
|
|
95
96
|
}
|
|
@@ -105,9 +106,7 @@ FocusManager.prototype.enter = function ($el, $lastFocused) {
|
|
|
105
106
|
|
|
106
107
|
FocusManager.prototype.exit = function ($el) {
|
|
107
108
|
if (elementTrapsFocus($el)) {
|
|
108
|
-
this._focusTrapStack.splice(
|
|
109
|
-
this._focusTrapStack.indexOf($el), 1
|
|
110
|
-
);
|
|
109
|
+
this._focusTrapStack.splice(this._focusTrapStack.indexOf($el), 1);
|
|
111
110
|
if (!this._focusTrapStack.length) {
|
|
112
111
|
$(document).off('.aui-focus-manager', this._handler);
|
|
113
112
|
delete this._handler;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import $ from './jquery';
|
|
2
2
|
import amdify from './internal/amdify';
|
|
3
3
|
import skate from './internal/skate';
|
|
4
|
-
import './spinner'
|
|
5
|
-
import {getMessageLogger} from './internal/deprecation'
|
|
4
|
+
import './spinner';
|
|
5
|
+
import { getMessageLogger } from './internal/deprecation';
|
|
6
6
|
|
|
7
7
|
const CLASS_NOTIFICATION_INITIALISED = '_aui-form-notification-initialised';
|
|
8
8
|
|
|
@@ -20,7 +20,7 @@ const NOTIFICATION_PRIORITY = [
|
|
|
20
20
|
ATTRIBUTE_NOTIFICATION_ERROR,
|
|
21
21
|
ATTRIBUTE_NOTIFICATION_SUCCESS,
|
|
22
22
|
ATTRIBUTE_NOTIFICATION_WAIT,
|
|
23
|
-
ATTRIBUTE_NOTIFICATION_INFO
|
|
23
|
+
ATTRIBUTE_NOTIFICATION_INFO,
|
|
24
24
|
];
|
|
25
25
|
|
|
26
26
|
function initialiseNotification($field) {
|
|
@@ -46,7 +46,7 @@ function appendDescription($field, message) {
|
|
|
46
46
|
const existingDescription = $field.parent().find('.description');
|
|
47
47
|
|
|
48
48
|
if (!existingDescription.length) {
|
|
49
|
-
$field.after(descriptionTemplate($field, message))
|
|
49
|
+
$field.after(descriptionTemplate($field, message));
|
|
50
50
|
}
|
|
51
51
|
}
|
|
52
52
|
|
|
@@ -63,7 +63,7 @@ function jsonToArray(jsonOrString) {
|
|
|
63
63
|
var jsonArray;
|
|
64
64
|
try {
|
|
65
65
|
jsonArray = JSON.parse(jsonOrString);
|
|
66
|
-
|
|
66
|
+
// eslint-disable-next-line no-unused-vars
|
|
67
67
|
} catch (exception) {
|
|
68
68
|
jsonArray = [jsonOrString];
|
|
69
69
|
}
|
|
@@ -138,7 +138,7 @@ function updateAriaInfo($field) {
|
|
|
138
138
|
*/
|
|
139
139
|
function conditionallyGetFieldTarget($field) {
|
|
140
140
|
const modifiers = {
|
|
141
|
-
'aui-select': 'input[type="text"][role="combobox"]'
|
|
141
|
+
'aui-select': 'input[type="text"][role="combobox"]',
|
|
142
142
|
};
|
|
143
143
|
|
|
144
144
|
for (let [source, selector] of Object.entries(modifiers)) {
|
|
@@ -161,7 +161,10 @@ function isJqueryObject(el) {
|
|
|
161
161
|
function errorMessageTemplate($field, messages) {
|
|
162
162
|
const id = $field.attr('id') || $field.attr('name');
|
|
163
163
|
const list = messages
|
|
164
|
-
.map(
|
|
164
|
+
.map(
|
|
165
|
+
(message) =>
|
|
166
|
+
`<li><span class="aui-icon aui-icon-small aui-iconfont-error aui-icon-notification"></span>${message}</li>`
|
|
167
|
+
)
|
|
165
168
|
.join('');
|
|
166
169
|
|
|
167
170
|
return `<div class="error" role="alert" id="${id}-${ARIA_ERROR_POSTFIX}"><ul>${list}</ul></div>`;
|
|
@@ -171,9 +174,7 @@ function descriptionTemplate($field, messages) {
|
|
|
171
174
|
const id = $field.attr('id') || $field.attr('name');
|
|
172
175
|
|
|
173
176
|
if (messages.length > 1) {
|
|
174
|
-
let list = messages
|
|
175
|
-
.map(message => `<li>${message}</li>`)
|
|
176
|
-
.join('');
|
|
177
|
+
let list = messages.map((message) => `<li>${message}</li>`).join('');
|
|
177
178
|
return `<div class="description" id="${id}-${ARIA_DESCRIPTION_POSTFIX}"><ul>${list}</ul></div>`;
|
|
178
179
|
}
|
|
179
180
|
return `<div class="description" id="${id}-${ARIA_DESCRIPTION_POSTFIX}">${messages}</div>`;
|
|
@@ -206,7 +207,7 @@ function setFieldSpinner($field, isSpinnerVisible) {
|
|
|
206
207
|
|
|
207
208
|
const deprecationLogger = getMessageLogger('data-aui-notification-field attribute', {
|
|
208
209
|
deprecationType: 'ATTRIBUTE',
|
|
209
|
-
alternativeName: 'HTML markup'
|
|
210
|
+
alternativeName: 'HTML markup',
|
|
210
211
|
});
|
|
211
212
|
|
|
212
213
|
skate('data-aui-notification-field', {
|
|
@@ -220,8 +221,8 @@ skate('data-aui-notification-field', {
|
|
|
220
221
|
attrs[type] = synchroniseNotificationDisplay;
|
|
221
222
|
});
|
|
222
223
|
return attrs;
|
|
223
|
-
}()
|
|
224
|
-
type: skate.type.ATTRIBUTE
|
|
224
|
+
})(),
|
|
225
|
+
type: skate.type.ATTRIBUTE,
|
|
225
226
|
});
|
|
226
227
|
|
|
227
228
|
amdify('aui/form-notification');
|
|
@@ -232,5 +233,5 @@ export {
|
|
|
232
233
|
appendDescription,
|
|
233
234
|
updateAriaInfo,
|
|
234
235
|
errorMessageTemplate,
|
|
235
|
-
setFieldSpinner
|
|
236
|
-
}
|
|
236
|
+
setFieldSpinner,
|
|
237
|
+
};
|
|
@@ -11,13 +11,19 @@ function minMaxLength(field) {
|
|
|
11
11
|
var minlength = parseInt(field.args('minlength'), 10);
|
|
12
12
|
var maxlength = parseInt(field.args('maxlength'), 10);
|
|
13
13
|
|
|
14
|
-
if (
|
|
14
|
+
if (
|
|
15
|
+
minlength &&
|
|
16
|
+
maxlength &&
|
|
17
|
+
minlength === maxlength &&
|
|
18
|
+
!fieldIsEmpty &&
|
|
19
|
+
fieldValueLength !== minlength
|
|
20
|
+
) {
|
|
15
21
|
const exactlengthMessage = makeMessage('exactlength', field.args, [minlength]);
|
|
16
22
|
field.invalidate(exactlengthMessage);
|
|
17
|
-
} else if (minlength &&
|
|
23
|
+
} else if (minlength && fieldValueLength < minlength && !fieldIsEmpty) {
|
|
18
24
|
const minlengthMessage = makeMessage('minlength', field.args);
|
|
19
25
|
field.invalidate(minlengthMessage);
|
|
20
|
-
} else if (maxlength &&
|
|
26
|
+
} else if (maxlength && fieldValueLength > maxlength) {
|
|
21
27
|
const maxlengthMessage = makeMessage('maxlength', field.args);
|
|
22
28
|
field.invalidate(maxlengthMessage);
|
|
23
29
|
} else {
|
|
@@ -33,14 +39,17 @@ validatorRegister.register(['matchingfield'], function (field) {
|
|
|
33
39
|
var matchingField = document.getElementById(field.args('matchingfield'));
|
|
34
40
|
var matchingFieldValue = matchingField.value;
|
|
35
41
|
|
|
36
|
-
var matchingFieldMessage = makeMessage('matchingfield', field.args, [
|
|
42
|
+
var matchingFieldMessage = makeMessage('matchingfield', field.args, [
|
|
43
|
+
thisFieldValue,
|
|
44
|
+
matchingFieldValue,
|
|
45
|
+
]);
|
|
37
46
|
|
|
38
47
|
var shouldHidePasswords = isPasswordField(field.el) || isPasswordField(matchingField);
|
|
39
48
|
if (shouldHidePasswords) {
|
|
40
49
|
matchingFieldMessage = makeMessage('matchingfield-novalue', field.args);
|
|
41
50
|
}
|
|
42
51
|
|
|
43
|
-
if (!thisFieldValue || !matchingFieldValue){
|
|
52
|
+
if (!thisFieldValue || !matchingFieldValue) {
|
|
44
53
|
field.validate();
|
|
45
54
|
} else if (matchingFieldValue !== thisFieldValue) {
|
|
46
55
|
field.invalidate(matchingFieldMessage);
|
|
@@ -66,12 +75,12 @@ validatorRegister.register(['doesnotcontain'], function (field) {
|
|
|
66
75
|
|
|
67
76
|
//Matches regex
|
|
68
77
|
|
|
69
|
-
function matchesRegex(val, regex){
|
|
78
|
+
function matchesRegex(val, regex) {
|
|
70
79
|
var matches = val.match(regex);
|
|
71
80
|
if (!matches) {
|
|
72
81
|
return false;
|
|
73
82
|
}
|
|
74
|
-
var isExactMatch =
|
|
83
|
+
var isExactMatch = val === matches[0];
|
|
75
84
|
return isExactMatch;
|
|
76
85
|
}
|
|
77
86
|
|
|
@@ -114,9 +123,9 @@ function minOrMax(field) {
|
|
|
114
123
|
var minValue = field.args('min');
|
|
115
124
|
var maxValue = field.args('max');
|
|
116
125
|
|
|
117
|
-
if (minValue &&
|
|
126
|
+
if (minValue && fieldValue < parseInt(minValue, 10)) {
|
|
118
127
|
field.invalidate(makeMessage('min', field.args));
|
|
119
|
-
} else if (maxValue &&
|
|
128
|
+
} else if (maxValue && fieldValue > parseInt(maxValue, 10)) {
|
|
120
129
|
field.invalidate(makeMessage('max', field.args));
|
|
121
130
|
} else {
|
|
122
131
|
field.validate();
|
|
@@ -131,12 +140,12 @@ validatorRegister.register(['dateformat'], function (field) {
|
|
|
131
140
|
var dateFormatMessage = makeMessage('dateformat', field.args);
|
|
132
141
|
|
|
133
142
|
var symbolRegexMap = {
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
143
|
+
Y: '[0-9]{4}',
|
|
144
|
+
y: '[0-9]{2}',
|
|
145
|
+
m: '(0?[1-9]|10|11|12)',
|
|
146
|
+
M: '[Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec]',
|
|
147
|
+
D: '[Mon|Tue|Wed|Thu|Fri|Sat|Sun]',
|
|
148
|
+
d: '([0-2]?[1-9]|10|20|30|31)',
|
|
140
149
|
};
|
|
141
150
|
|
|
142
151
|
var dateFormatSymbolArray = dateFormatSymbolic.split('');
|
|
@@ -164,8 +173,8 @@ validatorRegister.register(['dateformat'], function (field) {
|
|
|
164
173
|
//Checkbox count
|
|
165
174
|
validatorRegister.register(['minchecked', 'maxchecked'], function (field) {
|
|
166
175
|
var amountChecked = $(field.el).find(':checked').length;
|
|
167
|
-
var aboveMin = !field.args('minchecked') ||
|
|
168
|
-
var belowMax = !field.args('maxchecked') ||
|
|
176
|
+
var aboveMin = !field.args('minchecked') || amountChecked >= field.args('minchecked');
|
|
177
|
+
var belowMax = !field.args('maxchecked') || amountChecked <= field.args('maxchecked');
|
|
169
178
|
|
|
170
179
|
var belowMinMessage = makeMessage('minchecked', field.args);
|
|
171
180
|
var aboveMaxMessage = makeMessage('maxchecked', field.args);
|
|
@@ -213,20 +222,20 @@ function makeMessage(key, accessorFunction, customTokens) {
|
|
|
213
222
|
must appear verbatim for the plugin I18n transformation to pick it up
|
|
214
223
|
*/
|
|
215
224
|
var pluginI18nMessages = {
|
|
216
|
-
minlength: I18n.getText('aui.validation.message.minlength'),
|
|
217
|
-
maxlength: I18n.getText('aui.validation.message.maxlength'),
|
|
218
|
-
exactlength: I18n.getText('aui.validation.message.exactlength'),
|
|
219
|
-
matchingfield: I18n.getText('aui.validation.message.matchingfield'),
|
|
225
|
+
'minlength': I18n.getText('aui.validation.message.minlength'),
|
|
226
|
+
'maxlength': I18n.getText('aui.validation.message.maxlength'),
|
|
227
|
+
'exactlength': I18n.getText('aui.validation.message.exactlength'),
|
|
228
|
+
'matchingfield': I18n.getText('aui.validation.message.matchingfield'),
|
|
220
229
|
'matchingfield-novalue': I18n.getText('aui.validation.message.matchingfield-novalue'),
|
|
221
|
-
doesnotcontain: I18n.getText('aui.validation.message.doesnotcontain'),
|
|
222
|
-
pattern: I18n.getText('aui.validation.message.pattern'),
|
|
223
|
-
required: I18n.getText('aui.validation.message.required'),
|
|
224
|
-
validnumber: I18n.getText('aui.validation.message.validnumber'),
|
|
225
|
-
min: I18n.getText('aui.validation.message.min'),
|
|
226
|
-
max: I18n.getText('aui.validation.message.max'),
|
|
227
|
-
dateformat: I18n.getText('aui.validation.message.dateformat'),
|
|
228
|
-
minchecked: I18n.getText('aui.validation.message.minchecked'),
|
|
229
|
-
maxchecked: I18n.getText('aui.validation.message.maxchecked')
|
|
230
|
+
'doesnotcontain': I18n.getText('aui.validation.message.doesnotcontain'),
|
|
231
|
+
'pattern': I18n.getText('aui.validation.message.pattern'),
|
|
232
|
+
'required': I18n.getText('aui.validation.message.required'),
|
|
233
|
+
'validnumber': I18n.getText('aui.validation.message.validnumber'),
|
|
234
|
+
'min': I18n.getText('aui.validation.message.min'),
|
|
235
|
+
'max': I18n.getText('aui.validation.message.max'),
|
|
236
|
+
'dateformat': I18n.getText('aui.validation.message.dateformat'),
|
|
237
|
+
'minchecked': I18n.getText('aui.validation.message.minchecked'),
|
|
238
|
+
'maxchecked': I18n.getText('aui.validation.message.maxchecked'),
|
|
230
239
|
};
|
|
231
240
|
|
|
232
241
|
amdify('aui/form-validation/basic-validators');
|
|
@@ -5,7 +5,7 @@ import amdify from '../internal/amdify';
|
|
|
5
5
|
var ATTRIBUTE_RESERVED_ARGUMENTS = ['displayfield', 'watchfield', 'when', 'novalidate', 'state'];
|
|
6
6
|
var validators = [];
|
|
7
7
|
|
|
8
|
-
function getReservedArgument
|
|
8
|
+
function getReservedArgument(validatorArguments) {
|
|
9
9
|
var reservedArgument = false;
|
|
10
10
|
|
|
11
11
|
validatorArguments.some(function (arg) {
|
|
@@ -28,7 +28,7 @@ function getReservedArgument (validatorArguments) {
|
|
|
28
28
|
* field - the field that is being validated
|
|
29
29
|
* args - the arguments that have been specified in HTML markup.
|
|
30
30
|
*/
|
|
31
|
-
function registerValidator
|
|
31
|
+
function registerValidator(trigger, validatorFunction) {
|
|
32
32
|
var triggerSelector;
|
|
33
33
|
|
|
34
34
|
if (typeof trigger === 'string') {
|
|
@@ -37,7 +37,11 @@ function registerValidator (trigger, validatorFunction) {
|
|
|
37
37
|
var reservedArgument = getReservedArgument(trigger);
|
|
38
38
|
|
|
39
39
|
if (reservedArgument) {
|
|
40
|
-
logger.warn(
|
|
40
|
+
logger.warn(
|
|
41
|
+
'Validators cannot be registered with the argument "' +
|
|
42
|
+
reservedArgument +
|
|
43
|
+
'", as it is a reserved argument.'
|
|
44
|
+
);
|
|
41
45
|
return false;
|
|
42
46
|
}
|
|
43
47
|
|
|
@@ -46,7 +50,7 @@ function registerValidator (trigger, validatorFunction) {
|
|
|
46
50
|
|
|
47
51
|
var validator = {
|
|
48
52
|
validatorFunction: validatorFunction,
|
|
49
|
-
validatorTrigger: triggerSelector
|
|
53
|
+
validatorTrigger: triggerSelector,
|
|
50
54
|
};
|
|
51
55
|
|
|
52
56
|
validators.push(validator);
|
|
@@ -58,7 +62,7 @@ var validatorRegister = {
|
|
|
58
62
|
register: registerValidator,
|
|
59
63
|
validators: function () {
|
|
60
64
|
return validators;
|
|
61
|
-
}
|
|
65
|
+
},
|
|
62
66
|
};
|
|
63
67
|
|
|
64
68
|
amdify('aui/form-validation/validator-register', validatorRegister);
|