@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
|
@@ -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
|
@@ -8,8 +8,11 @@ var getExpanderProperties = function (event) {
|
|
|
8
8
|
|
|
9
9
|
properties.$trigger = $(event.currentTarget);
|
|
10
10
|
properties.$content = $document.find('#' + properties.$trigger.attr('aria-controls'));
|
|
11
|
-
properties.triggerIsParent =
|
|
12
|
-
|
|
11
|
+
properties.triggerIsParent =
|
|
12
|
+
properties.$content.parent().filter(properties.$trigger).length !== 0;
|
|
13
|
+
properties.$shortContent = properties.triggerIsParent
|
|
14
|
+
? properties.$trigger.find('.aui-expander-short-content')
|
|
15
|
+
: null;
|
|
13
16
|
properties.height = properties.$content.css('min-height');
|
|
14
17
|
properties.isCollapsible = properties.$trigger.data('collapsible') !== false;
|
|
15
18
|
properties.replaceText = properties.$trigger.attr('data-replace-text'); //can't use .data here because it doesn't update after the first call
|
|
@@ -20,9 +23,9 @@ var getExpanderProperties = function (event) {
|
|
|
20
23
|
|
|
21
24
|
var replaceText = function (properties) {
|
|
22
25
|
if (properties.replaceText) {
|
|
23
|
-
var $replaceElement = properties.replaceSelector
|
|
24
|
-
properties.$trigger.find(properties.replaceSelector)
|
|
25
|
-
properties.$trigger;
|
|
26
|
+
var $replaceElement = properties.replaceSelector
|
|
27
|
+
? properties.$trigger.find(properties.replaceSelector)
|
|
28
|
+
: properties.$trigger;
|
|
26
29
|
|
|
27
30
|
properties.$trigger.attr('data-replace-text', $replaceElement.text());
|
|
28
31
|
$replaceElement.text(properties.replaceText);
|
|
@@ -65,7 +68,6 @@ var EXPANDER_EVENTS = {
|
|
|
65
68
|
properties.$shortContent.hide();
|
|
66
69
|
}
|
|
67
70
|
properties.$trigger.trigger('aui-expander-expanded');
|
|
68
|
-
|
|
69
71
|
},
|
|
70
72
|
|
|
71
73
|
'aui-expander-collapse': function (event) {
|
|
@@ -99,7 +101,7 @@ var EXPANDER_EVENTS = {
|
|
|
99
101
|
'click.aui-expander': function (event) {
|
|
100
102
|
var $target = $(event.currentTarget);
|
|
101
103
|
$target.trigger('aui-expander-invoke', event.currentTarget);
|
|
102
|
-
}
|
|
104
|
+
},
|
|
103
105
|
};
|
|
104
106
|
|
|
105
107
|
//delegate events to the triggers on the page
|
package/src/js/aui/flag.js
CHANGED
|
@@ -5,7 +5,7 @@ import globalize from './internal/globalize';
|
|
|
5
5
|
import keyCode from './key-code';
|
|
6
6
|
import CustomEvent from './polyfills/custom-event';
|
|
7
7
|
import escapeHtml from './escape-html';
|
|
8
|
-
import {CLOSE_BUTTON} from './close-button';
|
|
8
|
+
import { CLOSE_BUTTON } from './close-button';
|
|
9
9
|
|
|
10
10
|
var AUTO_CLOSE_TIME = 5000;
|
|
11
11
|
var ID_FLAG_CONTAINER = 'aui-flag-container';
|
|
@@ -13,10 +13,10 @@ var defaultOptions = {
|
|
|
13
13
|
body: '',
|
|
14
14
|
close: 'manual',
|
|
15
15
|
title: '',
|
|
16
|
-
type: 'info'
|
|
16
|
+
type: 'info',
|
|
17
17
|
};
|
|
18
18
|
|
|
19
|
-
function flag
|
|
19
|
+
function flag(options) {
|
|
20
20
|
options = $.extend({}, defaultOptions, options);
|
|
21
21
|
|
|
22
22
|
// clean the title value
|
|
@@ -38,7 +38,7 @@ function flag (options) {
|
|
|
38
38
|
return $flag.get(0);
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
-
function extendFlagElement
|
|
41
|
+
function extendFlagElement($flag) {
|
|
42
42
|
var flag = $flag[0];
|
|
43
43
|
|
|
44
44
|
flag.close = function () {
|
|
@@ -46,7 +46,7 @@ function extendFlagElement ($flag) {
|
|
|
46
46
|
};
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
-
function renderFlagElement
|
|
49
|
+
function renderFlagElement({ body, title, close, type }) {
|
|
50
50
|
const titleHtml = title ? `<p class="title"><strong>${escapeHtml(title)}</strong></p>` : '';
|
|
51
51
|
const html = `<div class="aui-message">${titleHtml}</div>`;
|
|
52
52
|
|
|
@@ -57,7 +57,7 @@ function renderFlagElement ({body, title, close, type}) {
|
|
|
57
57
|
return $('<div class="aui-flag" aria-live="polite"></div>').append($message);
|
|
58
58
|
}
|
|
59
59
|
|
|
60
|
-
function makeCloseable
|
|
60
|
+
function makeCloseable($flag) {
|
|
61
61
|
var $icon = $(CLOSE_BUTTON);
|
|
62
62
|
|
|
63
63
|
$icon.on('click', function () {
|
|
@@ -65,7 +65,7 @@ function makeCloseable ($flag) {
|
|
|
65
65
|
});
|
|
66
66
|
|
|
67
67
|
$icon.on('keypress', function (e) {
|
|
68
|
-
if (
|
|
68
|
+
if (e.which === keyCode.ENTER || e.which === keyCode.SPACE) {
|
|
69
69
|
closeFlag($flag);
|
|
70
70
|
e.preventDefault();
|
|
71
71
|
}
|
|
@@ -74,47 +74,45 @@ function makeCloseable ($flag) {
|
|
|
74
74
|
return $flag.find('.aui-message').append($icon)[0];
|
|
75
75
|
}
|
|
76
76
|
|
|
77
|
-
function makeAutoClosable
|
|
77
|
+
function makeAutoClosable($flag) {
|
|
78
78
|
$flag.find('.aui-message').addClass('aui-will-close');
|
|
79
79
|
setTimeout(function () {
|
|
80
80
|
$flag[0].close();
|
|
81
81
|
}, AUTO_CLOSE_TIME);
|
|
82
82
|
}
|
|
83
83
|
|
|
84
|
-
function closeFlag
|
|
84
|
+
function closeFlag($flagToClose) {
|
|
85
85
|
var flag = $flagToClose.get(0);
|
|
86
86
|
|
|
87
87
|
flag.removeAttribute('open');
|
|
88
|
-
flag.dispatchEvent(new CustomEvent('aui-flag-close', {bubbles: true}));
|
|
88
|
+
flag.dispatchEvent(new CustomEvent('aui-flag-close', { bubbles: true }));
|
|
89
89
|
|
|
90
90
|
return flag;
|
|
91
91
|
}
|
|
92
92
|
|
|
93
|
-
function handleFlagContainer
|
|
93
|
+
function handleFlagContainer() {
|
|
94
94
|
const container = findContainer();
|
|
95
95
|
|
|
96
96
|
if (container) {
|
|
97
97
|
const closedFlags = container.querySelectorAll('.aui-flag:not([open])');
|
|
98
98
|
|
|
99
|
-
Array.from(closedFlags).map(flag => flag.parentNode.removeChild(flag));
|
|
99
|
+
Array.from(closedFlags).map((flag) => flag.parentNode.removeChild(flag));
|
|
100
100
|
} else {
|
|
101
101
|
$('body').prepend('<div id="' + ID_FLAG_CONTAINER + '"></div>');
|
|
102
102
|
}
|
|
103
103
|
}
|
|
104
104
|
|
|
105
|
-
function findContainer
|
|
105
|
+
function findContainer() {
|
|
106
106
|
return document.getElementById(ID_FLAG_CONTAINER);
|
|
107
107
|
}
|
|
108
108
|
|
|
109
|
-
function insertFlag
|
|
109
|
+
function insertFlag($flag) {
|
|
110
110
|
const flagContainer = findContainer();
|
|
111
111
|
|
|
112
112
|
$flag.appendTo(flagContainer);
|
|
113
113
|
recomputeStyle($flag);
|
|
114
114
|
|
|
115
|
-
$flag
|
|
116
|
-
.removeAttr('hidden')
|
|
117
|
-
.attr('open','');
|
|
115
|
+
$flag.removeAttr('hidden').attr('open', '');
|
|
118
116
|
}
|
|
119
117
|
|
|
120
118
|
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');
|
|
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
|
}
|
|
@@ -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
|
|
|
@@ -16,7 +16,7 @@ const NOTIFICATION_PRIORITY = [
|
|
|
16
16
|
ATTRIBUTE_NOTIFICATION_ERROR,
|
|
17
17
|
ATTRIBUTE_NOTIFICATION_SUCCESS,
|
|
18
18
|
ATTRIBUTE_NOTIFICATION_WAIT,
|
|
19
|
-
ATTRIBUTE_NOTIFICATION_INFO
|
|
19
|
+
ATTRIBUTE_NOTIFICATION_INFO,
|
|
20
20
|
];
|
|
21
21
|
|
|
22
22
|
function initialiseNotification($field) {
|
|
@@ -38,7 +38,7 @@ function prepareFieldMarkup($field) {
|
|
|
38
38
|
function appendDescription($field, message) {
|
|
39
39
|
message = message ? message : getNotificationMessage($field);
|
|
40
40
|
if (getFieldNotificationType($field) === ATTRIBUTE_NOTIFICATION_INFO) {
|
|
41
|
-
$field.after(descriptionTemplate(message))
|
|
41
|
+
$field.after(descriptionTemplate(message));
|
|
42
42
|
}
|
|
43
43
|
}
|
|
44
44
|
|
|
@@ -100,16 +100,17 @@ function isJqueryObject(el) {
|
|
|
100
100
|
|
|
101
101
|
function errorMessageTemplate(messages) {
|
|
102
102
|
let list = messages
|
|
103
|
-
.map(
|
|
103
|
+
.map(
|
|
104
|
+
(message) =>
|
|
105
|
+
`<li><span class="aui-icon aui-icon-small aui-iconfont-error aui-icon-notification">${message}</span>${message}</li>`
|
|
106
|
+
)
|
|
104
107
|
.join('');
|
|
105
108
|
return `<div class="error"><ul>${list}</ul></div>`;
|
|
106
109
|
}
|
|
107
110
|
|
|
108
111
|
function descriptionTemplate(messages) {
|
|
109
112
|
if (messages.length > 1) {
|
|
110
|
-
let list = messages
|
|
111
|
-
.map(message => `<li>${message}</li>`)
|
|
112
|
-
.join('');
|
|
113
|
+
let list = messages.map((message) => `<li>${message}</li>`).join('');
|
|
113
114
|
return `<div class="description"><ul>${list}</ul></div>`;
|
|
114
115
|
}
|
|
115
116
|
return `<div class="description">${messages}</div>`;
|
|
@@ -141,7 +142,7 @@ function setFieldSpinner($field, isSpinnerVisible) {
|
|
|
141
142
|
|
|
142
143
|
const deprecationLogger = getMessageLogger('data-aui-notification-field attribute', {
|
|
143
144
|
deprecationType: 'ATTRIBUTE',
|
|
144
|
-
alternativeName: 'HTML markup'
|
|
145
|
+
alternativeName: 'HTML markup',
|
|
145
146
|
});
|
|
146
147
|
|
|
147
148
|
skate('data-aui-notification-field', {
|
|
@@ -155,8 +156,8 @@ skate('data-aui-notification-field', {
|
|
|
155
156
|
attrs[type] = synchroniseNotificationDisplay;
|
|
156
157
|
});
|
|
157
158
|
return attrs;
|
|
158
|
-
}()
|
|
159
|
-
type: skate.type.ATTRIBUTE
|
|
159
|
+
})(),
|
|
160
|
+
type: skate.type.ATTRIBUTE,
|
|
160
161
|
});
|
|
161
162
|
|
|
162
163
|
amdify('aui/form-notification');
|
|
@@ -166,5 +167,5 @@ export {
|
|
|
166
167
|
appendErrorMessages,
|
|
167
168
|
appendDescription,
|
|
168
169
|
errorMessageTemplate,
|
|
169
|
-
setFieldSpinner
|
|
170
|
-
}
|
|
170
|
+
setFieldSpinner,
|
|
171
|
+
};
|
|
@@ -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);
|