luda 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/assets/javascripts/luda-degradation.js +10 -4
- data/assets/javascripts/luda-degradation.js.map +1 -1
- data/assets/javascripts/luda-degradation.min.js +2 -2
- data/assets/javascripts/luda-degradation.min.js.map +1 -1
- data/assets/javascripts/luda-sprockets.js +2 -0
- data/assets/javascripts/luda.js +4003 -2083
- data/assets/javascripts/luda.js.map +1 -1
- data/assets/javascripts/luda.min.js +2 -2
- data/assets/javascripts/luda.min.js.map +1 -1
- data/assets/javascripts/luda/behaviors/disabled.js +24 -0
- data/assets/javascripts/luda/behaviors/enter.js +24 -33
- data/assets/javascripts/luda/behaviors/focus.js +98 -95
- data/assets/javascripts/luda/behaviors/readonly.js +20 -58
- data/assets/javascripts/luda/behaviors/tabulate.js +42 -62
- data/assets/javascripts/luda/behaviors/toggle.js +98 -144
- data/assets/javascripts/luda/degradation.js +9 -3
- data/assets/javascripts/luda/elements/form-file.js +62 -109
- data/assets/javascripts/luda/elements/form-select.js +101 -208
- data/assets/javascripts/luda/index.js +4 -2
- data/assets/javascripts/luda/kernel/index.js +3095 -0
- data/assets/javascripts/luda/mixins/disable.js +34 -0
- data/assets/javascripts/luda/mixins/resetable.js +46 -0
- data/assets/javascripts/luda/mixins/tabable.js +274 -0
- data/assets/javascripts/luda/mixins/toggleable.js +185 -0
- data/assets/javascripts/luda/patterns/carousel.js +115 -333
- data/assets/javascripts/luda/patterns/dropdown.js +132 -271
- data/assets/javascripts/luda/patterns/form-dropdown.js +59 -104
- data/assets/javascripts/luda/patterns/tab.js +49 -150
- data/assets/stylesheets/luda/default/_banner.sass +1 -1
- data/assets/stylesheets/luda/default/_base.sass +1 -1
- data/assets/stylesheets/luda/default/_functions.sass +1 -1
- data/assets/stylesheets/luda/default/_mixins.sass +12 -12
- data/assets/stylesheets/luda/default/_variables.sass +747 -1
- data/assets/stylesheets/luda/default/behaviors/_disabled.sass +1 -1
- data/assets/stylesheets/luda/default/behaviors/_focus.sass +1 -1
- data/assets/stylesheets/luda/default/behaviors/_readonly.sass +1 -1
- data/assets/stylesheets/luda/default/behaviors/_toggle.sass +1 -1
- data/assets/stylesheets/luda/default/elements/_badge.sass +1 -1
- data/assets/stylesheets/luda/default/elements/_baseline.sass +1 -1
- data/assets/stylesheets/luda/default/elements/_button.sass +1 -1
- data/assets/stylesheets/luda/default/elements/_container.sass +1 -1
- data/assets/stylesheets/luda/default/elements/_grid.sass +1 -1
- data/assets/stylesheets/luda/default/elements/_icon.sass +1 -1
- data/assets/stylesheets/luda/default/elements/_media.sass +1 -1
- data/assets/stylesheets/luda/default/elements/_overlay.sass +1 -1
- data/assets/stylesheets/luda/default/elements/_progress.sass +1 -1
- data/assets/stylesheets/luda/default/elements/_scrollbar.sass +1 -1
- data/assets/stylesheets/luda/default/elements/_table.sass +1 -1
- data/assets/stylesheets/luda/default/elements/_turbolinks-progress-bar.sass +1 -1
- data/assets/stylesheets/luda/default/elements/form/_form-check-radio.sass +1 -1
- data/assets/stylesheets/luda/default/elements/form/_form-element.sass +1 -1
- data/assets/stylesheets/luda/default/elements/form/_form-helper.sass +1 -1
- data/assets/stylesheets/luda/default/elements/form/_form-label.sass +1 -1
- data/assets/stylesheets/luda/default/elements/form/_form-range.sass +1 -1
- data/assets/stylesheets/luda/default/elements/form/_form-row.sass +1 -1
- data/assets/stylesheets/luda/default/elements/typography/_code.sass +1 -1
- data/assets/stylesheets/luda/default/elements/typography/_heading.sass +1 -1
- data/assets/stylesheets/luda/default/elements/typography/_link.sass +1 -1
- data/assets/stylesheets/luda/default/elements/typography/_list.sass +1 -1
- data/assets/stylesheets/luda/default/elements/typography/_mark.sass +1 -1
- data/assets/stylesheets/luda/default/elements/typography/_paragraph.sass +1 -1
- data/assets/stylesheets/luda/default/elements/typography/_quote.sass +1 -1
- data/assets/stylesheets/luda/default/elements/typography/_sub-sup.sass +1 -1
- data/assets/stylesheets/luda/default/elements/typography/_typography.sass +1 -1
- data/assets/stylesheets/luda/default/patterns/_alert.sass +1 -1
- data/assets/stylesheets/luda/default/patterns/_article.sass +1 -1
- data/assets/stylesheets/luda/default/patterns/_avatar.sass +1 -1
- data/assets/stylesheets/luda/default/patterns/_breadcrumb.sass +1 -1
- data/assets/stylesheets/luda/default/patterns/_button-group.sass +1 -1
- data/assets/stylesheets/luda/default/patterns/_button-icon.sass +1 -1
- data/assets/stylesheets/luda/default/patterns/_carousel.sass +1 -1
- data/assets/stylesheets/luda/default/patterns/_dropdown.sass +1 -1
- data/assets/stylesheets/luda/default/patterns/_form-dropdown.sass +1 -1
- data/assets/stylesheets/luda/default/patterns/_form-group.sass +1 -1
- data/assets/stylesheets/luda/default/patterns/_form-icon.sass +1 -1
- data/assets/stylesheets/luda/default/patterns/_modal.sass +1 -1
- data/assets/stylesheets/luda/default/patterns/_navigation.sass +1 -1
- data/assets/stylesheets/luda/default/patterns/_search-bar.sass +1 -1
- data/assets/stylesheets/luda/default/patterns/_tab.sass +1 -1
- data/assets/stylesheets/luda/default/utilities/_alignment.sass +1 -1
- data/assets/stylesheets/luda/default/utilities/_background.sass +1 -1
- data/assets/stylesheets/luda/default/utilities/_border.sass +1 -1
- data/assets/stylesheets/luda/default/utilities/_color.sass +1 -1
- data/assets/stylesheets/luda/default/utilities/_display.sass +1 -1
- data/assets/stylesheets/luda/default/utilities/_flex.sass +1 -1
- data/assets/stylesheets/luda/default/utilities/_float.sass +1 -1
- data/assets/stylesheets/luda/default/utilities/_opacity.sass +1 -1
- data/assets/stylesheets/luda/default/utilities/_overflow.sass +1 -1
- data/assets/stylesheets/luda/default/utilities/_position.sass +1 -1
- data/assets/stylesheets/luda/default/utilities/_shadow.sass +1 -1
- data/assets/stylesheets/luda/default/utilities/_shape.sass +1 -1
- data/assets/stylesheets/luda/default/utilities/_size.sass +1 -1
- data/assets/stylesheets/luda/default/utilities/_spacing.sass +1 -1
- data/assets/stylesheets/luda/default/utilities/_text.sass +1 -1
- data/assets/stylesheets/luda/default/utilities/_visibility.sass +1 -1
- data/assets/stylesheets/luda/default/utilities/_z-index.sass +1 -1
- data/assets/stylesheets/luda/{_core → kernel}/_base.sass +1 -1
- data/assets/stylesheets/luda/{_core → kernel}/_functions.sass +23 -0
- data/assets/stylesheets/luda/kernel/behaviors/_disabled.sass +7 -0
- data/assets/stylesheets/luda/kernel/behaviors/_focus.sass +7 -0
- data/assets/stylesheets/luda/kernel/behaviors/_readonly.sass +7 -0
- data/assets/stylesheets/luda/kernel/behaviors/_toggle.sass +4 -0
- data/assets/stylesheets/luda/{_core → kernel}/elements/_badge.sass +1 -1
- data/assets/stylesheets/luda/{_core → kernel}/elements/_baseline.sass +1 -1
- data/assets/stylesheets/luda/{_core → kernel}/elements/_button.sass +1 -1
- data/assets/stylesheets/luda/{_core → kernel}/elements/_container.sass +1 -1
- data/assets/stylesheets/luda/{_core → kernel}/elements/_grid.sass +1 -1
- data/assets/stylesheets/luda/{_core → kernel}/elements/_icon.sass +1 -1
- data/assets/stylesheets/luda/{_core → kernel}/elements/_media.sass +1 -1
- data/assets/stylesheets/luda/{_core → kernel}/elements/_overlay.sass +1 -1
- data/assets/stylesheets/luda/{_core → kernel}/elements/_progress.sass +1 -1
- data/assets/stylesheets/luda/{_core → kernel}/elements/_scrollbar.sass +7 -1
- data/assets/stylesheets/luda/{_core → kernel}/elements/_table.sass +1 -1
- data/assets/stylesheets/luda/kernel/elements/_turbolinks-progress-bar.sass +5 -0
- data/assets/stylesheets/luda/{_core → kernel}/elements/form/_form-check-radio.sass +1 -1
- data/assets/stylesheets/luda/{_core → kernel}/elements/form/_form-element.sass +1 -1
- data/assets/stylesheets/luda/{_core → kernel}/elements/form/_form-helper.sass +1 -1
- data/assets/stylesheets/luda/{_core → kernel}/elements/form/_form-label.sass +1 -1
- data/assets/stylesheets/luda/{_core → kernel}/elements/form/_form-range.sass +1 -1
- data/assets/stylesheets/luda/{_core → kernel}/elements/form/_form-row.sass +13 -28
- data/assets/stylesheets/luda/{_core → kernel}/elements/typography/_code.sass +1 -1
- data/assets/stylesheets/luda/{_core → kernel}/elements/typography/_heading.sass +1 -1
- data/assets/stylesheets/luda/{_core → kernel}/elements/typography/_link.sass +1 -1
- data/assets/stylesheets/luda/{_core → kernel}/elements/typography/_list.sass +1 -1
- data/assets/stylesheets/luda/{_core → kernel}/elements/typography/_mark.sass +1 -1
- data/assets/stylesheets/luda/{_core → kernel}/elements/typography/_paragraph.sass +1 -1
- data/assets/stylesheets/luda/{_core → kernel}/elements/typography/_quote.sass +1 -1
- data/assets/stylesheets/luda/{_core → kernel}/elements/typography/_sub-sup.sass +1 -1
- data/assets/stylesheets/luda/kernel/elements/typography/_typography.sass +6 -0
- data/assets/stylesheets/luda/{_core → kernel}/mixins/_base.sass +0 -0
- data/assets/stylesheets/luda/{_core → kernel}/mixins/_browser.sass +0 -0
- data/assets/stylesheets/luda/{_core → kernel}/mixins/_button.sass +0 -0
- data/assets/stylesheets/luda/{_core → kernel}/mixins/_disabled.sass +1 -0
- data/assets/stylesheets/luda/{_core → kernel}/mixins/_dropdown.sass +0 -0
- data/assets/stylesheets/luda/{_core → kernel}/mixins/_focus.sass +0 -0
- data/assets/stylesheets/luda/{_core → kernel}/mixins/_form.sass +0 -0
- data/assets/stylesheets/luda/{_core → kernel}/mixins/_install.sass +0 -0
- data/assets/stylesheets/luda/{_core → kernel}/mixins/_media-query.sass +0 -0
- data/assets/stylesheets/luda/{_core → kernel}/mixins/_overlay.sass +0 -0
- data/assets/stylesheets/luda/{_core → kernel}/mixins/_sass-lint-fix.sass +0 -0
- data/assets/stylesheets/luda/{_core → kernel}/mixins/_typography.sass +0 -0
- data/assets/stylesheets/luda/{_core → kernel}/patterns/_alert.sass +1 -1
- data/assets/stylesheets/luda/{_core → kernel}/patterns/_article.sass +1 -1
- data/assets/stylesheets/luda/{_core → kernel}/patterns/_avatar.sass +1 -1
- data/assets/stylesheets/luda/{_core → kernel}/patterns/_breadcrumb.sass +1 -1
- data/assets/stylesheets/luda/{_core → kernel}/patterns/_button-group.sass +1 -1
- data/assets/stylesheets/luda/{_core → kernel}/patterns/_button-icon.sass +1 -1
- data/assets/stylesheets/luda/{_core → kernel}/patterns/_carousel.sass +2 -2
- data/assets/stylesheets/luda/{_core → kernel}/patterns/_dropdown.sass +1 -1
- data/assets/stylesheets/luda/{_core → kernel}/patterns/_form-dropdown.sass +6 -1
- data/assets/stylesheets/luda/{_core → kernel}/patterns/_form-group.sass +1 -1
- data/assets/stylesheets/luda/{_core → kernel}/patterns/_form-icon.sass +1 -1
- data/assets/stylesheets/luda/{_core → kernel}/patterns/_modal.sass +1 -1
- data/assets/stylesheets/luda/{_core → kernel}/patterns/_navigation.sass +1 -1
- data/assets/stylesheets/luda/{_core → kernel}/patterns/_search-bar.sass +1 -1
- data/assets/stylesheets/luda/{_core → kernel}/patterns/_tab.sass +1 -1
- data/assets/stylesheets/luda/{_core → kernel}/utilities/_alignment.sass +1 -1
- data/assets/stylesheets/luda/{_core → kernel}/utilities/_background.sass +1 -1
- data/assets/stylesheets/luda/{_core → kernel}/utilities/_border.sass +1 -1
- data/assets/stylesheets/luda/{_core → kernel}/utilities/_color.sass +1 -1
- data/assets/stylesheets/luda/{_core → kernel}/utilities/_display.sass +1 -1
- data/assets/stylesheets/luda/{_core → kernel}/utilities/_flex.sass +1 -1
- data/assets/stylesheets/luda/{_core → kernel}/utilities/_float.sass +1 -1
- data/assets/stylesheets/luda/{_core → kernel}/utilities/_opacity.sass +1 -1
- data/assets/stylesheets/luda/{_core → kernel}/utilities/_overflow.sass +1 -1
- data/assets/stylesheets/luda/{_core → kernel}/utilities/_position.sass +1 -1
- data/assets/stylesheets/luda/{_core → kernel}/utilities/_shadow.sass +1 -1
- data/assets/stylesheets/luda/{_core → kernel}/utilities/_shape.sass +1 -1
- data/assets/stylesheets/luda/{_core → kernel}/utilities/_size.sass +1 -1
- data/assets/stylesheets/luda/{_core → kernel}/utilities/_spacing.sass +1 -1
- data/assets/stylesheets/luda/{_core → kernel}/utilities/_text.sass +1 -1
- data/assets/stylesheets/luda/{_core → kernel}/utilities/_visibility.sass +1 -1
- data/assets/stylesheets/luda/{_core → kernel}/utilities/_z-index.sass +1 -1
- data/lib/luda/version.rb +1 -1
- metadata +86 -89
- data/assets/javascripts/luda/constants.js +0 -18
- data/assets/javascripts/luda/dom.js +0 -143
- data/assets/javascripts/luda/event.js +0 -201
- data/assets/javascripts/luda/factory.js +0 -334
- data/assets/javascripts/luda/install.js +0 -75
- data/assets/javascripts/luda/static.js +0 -224
- data/assets/javascripts/luda/utilities.js +0 -16
- data/assets/stylesheets/luda/_core/_variables.sass +0 -742
- data/assets/stylesheets/luda/_core/behaviors/_disabled.sass +0 -7
- data/assets/stylesheets/luda/_core/behaviors/_focus.sass +0 -7
- data/assets/stylesheets/luda/_core/behaviors/_readonly.sass +0 -14
- data/assets/stylesheets/luda/_core/behaviors/_toggle.sass +0 -4
- data/assets/stylesheets/luda/_core/elements/_turbolinks-progress-bar.sass +0 -5
- data/assets/stylesheets/luda/_core/elements/typography/_typography.sass +0 -6
@@ -1,287 +1,148 @@
|
|
1
|
-
//= require ../
|
2
|
-
//= require ../
|
3
|
-
//= require ../dom
|
4
|
-
//= require ../event
|
5
|
-
//= require ../factory
|
1
|
+
//= require ../kernel/index
|
2
|
+
//= require ../mixins/toggleable
|
6
3
|
(function (global, factory) {
|
7
|
-
typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../
|
8
|
-
typeof define === 'function' && define.amd ? define(['../
|
4
|
+
typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../kernel/index.js'), require('../mixins/toggleable.js')) :
|
5
|
+
typeof define === 'function' && define.amd ? define(['../kernel/index.js', '../mixins/toggleable.js'], factory) :
|
9
6
|
(factory());
|
10
7
|
}(this, (function () { 'use strict';
|
11
8
|
|
12
|
-
luda((
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
9
|
+
luda.component('dropdown', '.dropdown-absolute, .dropdown-static, .dropdown-fixed, .dropdown-static-m').protect({
|
10
|
+
cls: {
|
11
|
+
toggleable: {
|
12
|
+
active: 'dropdown-active'
|
13
|
+
}
|
14
|
+
},
|
15
|
+
data: {
|
16
|
+
standalone: 'data-dropdown-standalone',
|
17
|
+
toggleable: {
|
18
|
+
interruption: 'data-dropdown_interruption',
|
19
|
+
trigger: 'data-dropdownable'
|
20
|
+
}
|
21
|
+
},
|
22
|
+
default: {
|
23
|
+
toggleable: {
|
24
|
+
trigger: true
|
25
|
+
}
|
26
|
+
},
|
27
|
+
evt: {
|
28
|
+
toggleable: {
|
29
|
+
activate: 'luda:dropdown:activate',
|
30
|
+
activated: 'luda:dropdown:activated',
|
31
|
+
deactivate: 'luda:dropdown:deactivate',
|
32
|
+
deactivated: 'luda:dropdown:deactivated'
|
33
|
+
}
|
34
|
+
},
|
35
|
+
selector: {
|
36
|
+
items: 'a[href]:not([disabled]),button:not([disabled]), input:not([disabled]),[tabindex]:not([disabled]), area[href]:not([disabled]),iframe:not([disabled])',
|
37
|
+
toggleable: {
|
38
|
+
target: '.dropdown-menu'
|
39
|
+
}
|
40
|
+
}
|
41
|
+
}).include(luda.mixin('toggleable').alias({
|
42
|
+
activate: 'toggleableActivate',
|
43
|
+
deactivate: 'toggleableDeactivate',
|
44
|
+
toggle: 'toggleableToggle'
|
45
|
+
})).protect(luda.mixin('toggleable').all()).protect({
|
46
|
+
parent: function() {
|
47
|
+
var rootEl;
|
48
|
+
rootEl = this.parentRoot.els[0];
|
49
|
+
if (rootEl) {
|
50
|
+
return this.con.create(rootEl)[0];
|
51
|
+
} else {
|
52
|
+
return null;
|
53
|
+
}
|
54
|
+
},
|
55
|
+
escDeactivate: function(e) {
|
56
|
+
var parent;
|
57
|
+
if (this.toggleableActive()) {
|
58
|
+
return this.toggleableDeactivateOnEvent(e);
|
59
|
+
} else if (parent = this.parent()) {
|
60
|
+
return parent.escDeactivate(e);
|
61
|
+
}
|
62
|
+
},
|
63
|
+
prevItem: function(e) {
|
64
|
+
var index, items, parent;
|
65
|
+
if (this.toggleableActive()) {
|
66
|
+
if (!(items = this.items.els).length) {
|
22
67
|
return;
|
23
68
|
}
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
ref.activate();
|
69
|
+
index = items.indexOf(document.activeElement) - 1;
|
70
|
+
if (index < 0) {
|
71
|
+
index = 0;
|
28
72
|
}
|
29
|
-
return
|
30
|
-
}
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
73
|
+
return items[index].focus();
|
74
|
+
} else if (parent = this.parent()) {
|
75
|
+
return parent.prevItem(e);
|
76
|
+
}
|
77
|
+
},
|
78
|
+
nextItem: function(e) {
|
79
|
+
var index, items, parent;
|
80
|
+
if (this.toggleableActive()) {
|
81
|
+
if (!(items = this.items.els).length) {
|
35
82
|
return;
|
36
83
|
}
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
this._$component.classList.remove(this.constructor._ACTIVE_CSS_CLASS);
|
41
|
-
this._children.forEach(function(child) {
|
42
|
-
return child.deactivate();
|
43
|
-
});
|
44
|
-
if (focus) {
|
45
|
-
if ((ref = this.constructor._$focused[this.constructor._$focused.length - 1]) != null) {
|
46
|
-
ref.focus();
|
47
|
-
}
|
48
|
-
}
|
49
|
-
this.constructor._$focused.splice(this.constructor._$focused.length - 1, 1);
|
50
|
-
return this._handleDeactivateEnd(this._$menu);
|
51
|
-
}
|
52
|
-
|
53
|
-
toggle(focus) {
|
54
|
-
if (this._isActive()) {
|
55
|
-
return this.deactivate(focus);
|
56
|
-
} else {
|
57
|
-
return this.activate();
|
58
|
-
}
|
59
|
-
}
|
60
|
-
|
61
|
-
_prev() {
|
62
|
-
var focusIndex;
|
63
|
-
if (this._$items.length && this._isActive()) {
|
64
|
-
focusIndex = this._$items.indexOf(document.activeElement) - 1;
|
65
|
-
if (focusIndex < 0) {
|
66
|
-
focusIndex = 0;
|
67
|
-
}
|
68
|
-
return this._$items[focusIndex].focus();
|
69
|
-
}
|
70
|
-
}
|
71
|
-
|
72
|
-
_next() {
|
73
|
-
var focusIndex;
|
74
|
-
if (this._$items.length && this._isActive()) {
|
75
|
-
focusIndex = this._$items.indexOf(document.activeElement) + 1;
|
76
|
-
if (focusIndex > this._$items.length - 1) {
|
77
|
-
focusIndex = this._$items.length - 1;
|
78
|
-
}
|
79
|
-
return this._$items[focusIndex].focus();
|
80
|
-
}
|
81
|
-
}
|
82
|
-
|
83
|
-
_getConfig() {
|
84
|
-
var _$items, _$menu, _$noneSwitches, _$switches, _isStandalone;
|
85
|
-
_$menu = luda.$child(this.constructor._MENU_SELECTOR, this._$component);
|
86
|
-
_$switches = luda.$unnested(this.constructor._SWITCHES_SELECTOR, this._$component, this.constructor._SELECTOR).concat(luda.$unnested(this.constructor._SWITCHES_SELECTOR, _$menu, this.constructor._MENU_SELECTOR));
|
87
|
-
_$noneSwitches = luda.$unnested(this.constructor._NONE_SWITCHES_SELECTOR, this._$component, this.constructor._SELECTOR).concat(luda.$unnested(this.constructor._NONE_SWITCHES_SELECTOR, _$menu, this.constructor._MENU_SELECTOR));
|
88
|
-
_$items = luda.$unnested(this.constructor._ITEMS_SELECTOR, _$menu, this.constructor._MENU_SELECTOR);
|
89
|
-
_isStandalone = this._$component.hasAttribute(this.constructor._STANDALONE_ATTRIBUTE);
|
90
|
-
return {_$menu, _$items, _$switches, _$noneSwitches, _isStandalone};
|
91
|
-
}
|
92
|
-
|
93
|
-
_constructor() {
|
94
|
-
this._onMutations();
|
95
|
-
this._handleActivateCancel(this._$menu);
|
96
|
-
return this._handleDeactivateCancel(this._$menu);
|
97
|
-
}
|
98
|
-
|
99
|
-
_onMutations(mutations) {
|
100
|
-
return ({_$menu: this._$menu, _$items: this._$items, _$switches: this._$switches, _$noneSwitches: this._$noneSwitches, _isStandalone: this._isStandalone} = this._getConfig());
|
101
|
-
}
|
102
|
-
|
103
|
-
_isActive() {
|
104
|
-
return this._$component.classList.contains(this.constructor._ACTIVE_CSS_CLASS);
|
105
|
-
}
|
106
|
-
|
107
|
-
_deactivateChildrenExcept(exceptions) {
|
108
|
-
if (exceptions && !(exceptions instanceof Array)) {
|
109
|
-
exceptions = [exceptions];
|
110
|
-
}
|
111
|
-
if (exceptions) {
|
112
|
-
return this._children.forEach(function(child) {
|
113
|
-
if (child._isActive() && !exceptions.includes(child)) {
|
114
|
-
return child.deactivate();
|
115
|
-
}
|
116
|
-
});
|
117
|
-
} else {
|
118
|
-
return this._children.forEach(function(child) {
|
119
|
-
if (child._isActive()) {
|
120
|
-
return child.deactivate();
|
121
|
-
}
|
122
|
-
});
|
123
|
-
}
|
124
|
-
}
|
125
|
-
|
126
|
-
static activate($dropdown) {
|
127
|
-
return this.query($dropdown).activate();
|
128
|
-
}
|
129
|
-
|
130
|
-
static deactivate($dropdown, focus) {
|
131
|
-
return this.query($dropdown).deactivate(focus);
|
132
|
-
}
|
133
|
-
|
134
|
-
static toggle($dropdown, focus) {
|
135
|
-
return this.query($dropdown).toggle(focus);
|
136
|
-
}
|
137
|
-
|
138
|
-
static deactivateExcept(instances$dropdowns) {
|
139
|
-
var exceptions;
|
140
|
-
exceptions = [];
|
141
|
-
if (instances$dropdowns && !(instances$dropdowns instanceof Array)) {
|
142
|
-
instances$dropdowns = [instances$dropdowns];
|
84
|
+
index = items.indexOf(document.activeElement) + 1;
|
85
|
+
if (index >= items.length) {
|
86
|
+
index = items.length - 1;
|
143
87
|
}
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
88
|
+
return items[index].focus();
|
89
|
+
} else if (parent = this.parent()) {
|
90
|
+
return parent.nextItem(e);
|
91
|
+
}
|
92
|
+
}
|
93
|
+
}).help({
|
94
|
+
find: function() {
|
95
|
+
return Object.assign(this.toggleableFind(), {
|
96
|
+
parentRoot: function() {
|
97
|
+
return this.root.parent(this.con.root);
|
98
|
+
},
|
99
|
+
items: function() {
|
100
|
+
var menu, self;
|
101
|
+
self = this;
|
102
|
+
menu = this.toggleableTarget;
|
103
|
+
return menu.find(this.selector.items).filter(function(el) {
|
104
|
+
var parentMenu;
|
105
|
+
parentMenu = luda(el).parent(self.selector.toggleable.target);
|
106
|
+
return parentMenu.els[0] === menu.els[0];
|
150
107
|
});
|
151
108
|
}
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
109
|
+
});
|
110
|
+
},
|
111
|
+
listen: function() {
|
112
|
+
var self;
|
113
|
+
self = this;
|
114
|
+
return [
|
115
|
+
['click',
|
116
|
+
this.toggleableToggleOnEvent],
|
117
|
+
['keyup@tab',
|
118
|
+
this.toggleableActivateOnEvent],
|
119
|
+
['keydown@esc&prevent',
|
120
|
+
this.escDeactivate],
|
121
|
+
['keydown@left@up&prevent',
|
122
|
+
this.prevItem],
|
123
|
+
['keydown@right@down&prevent',
|
124
|
+
this.nextItem],
|
125
|
+
[
|
126
|
+
'click keyup@tab',
|
127
|
+
function(e) {
|
128
|
+
var exceptions;
|
129
|
+
exceptions = [];
|
130
|
+
e.eventPath().forEach(function(el) {
|
131
|
+
return self.con.contains(el) && exceptions.push(el);
|
132
|
+
});
|
133
|
+
return self.con.each(function(ins,
|
134
|
+
rootEl) {
|
135
|
+
var isExcepted,
|
136
|
+
isStandalone;
|
137
|
+
isExcepted = exceptions.includes(rootEl);
|
138
|
+
isStandalone = ins.root.hasData(self.data.standalone);
|
139
|
+
!isExcepted && !isStandalone && ins.deactivate();
|
140
|
+
return true;
|
158
141
|
});
|
159
|
-
if (instance._isActive() && instanceIsntInExceptions && instanceHasntExceptionChild) {
|
160
|
-
return instance.deactivate();
|
161
|
-
}
|
162
|
-
});
|
163
|
-
} else {
|
164
|
-
return this._instances.forEach(function(instance) {
|
165
|
-
if (instance._isActive()) {
|
166
|
-
return instance.deactivate();
|
167
|
-
}
|
168
|
-
});
|
169
|
-
}
|
170
|
-
}
|
171
|
-
|
172
|
-
static _standaloneInstances() {
|
173
|
-
return this._instances.filter(function(instance) {
|
174
|
-
if (instance._isStandalone) {
|
175
|
-
return instance;
|
176
|
-
}
|
177
|
-
});
|
178
|
-
}
|
179
|
-
|
180
|
-
static _init() {
|
181
|
-
var self;
|
182
|
-
self = this;
|
183
|
-
luda.onOpposite('click', this._SELECTOR, function(e) {
|
184
|
-
return self.deactivateExcept(self._standaloneInstances());
|
185
|
-
});
|
186
|
-
luda.on('click', this._SELECTOR, function(e) {
|
187
|
-
var focus, instance, toggleChecked;
|
188
|
-
if (instance = self.query(this)) {
|
189
|
-
toggleChecked = false;
|
190
|
-
focus = !e.detail;
|
191
|
-
self.deactivateExcept(self._standaloneInstances().concat(instance));
|
192
|
-
instance._deactivateChildrenExcept();
|
193
|
-
if (instance._parent) {
|
194
|
-
instance._parent._deactivateChildrenExcept(instance);
|
195
|
-
}
|
196
|
-
if (instance._$switches.length || instance._$noneSwitches.length) {
|
197
|
-
luda.eventPath(e).some(function($path) {
|
198
|
-
if (instance._$switches.includes($path)) {
|
199
|
-
instance.toggle(focus);
|
200
|
-
return toggleChecked = true;
|
201
|
-
} else if (instance._$noneSwitches.includes($path)) {
|
202
|
-
return toggleChecked = true;
|
203
|
-
}
|
204
|
-
});
|
205
|
-
}
|
206
|
-
if (!toggleChecked) {
|
207
|
-
return instance.toggle(focus);
|
208
|
-
}
|
209
|
-
}
|
210
|
-
});
|
211
|
-
luda.onOpposite('keyup', this._SELECTOR, function(e) {
|
212
|
-
return self.deactivateExcept();
|
213
|
-
});
|
214
|
-
luda.on('keyup', this._SELECTOR, function(e) {
|
215
|
-
var instance;
|
216
|
-
if (e.keyCode === luda.KEY_TAB && (instance = self.query(this))) {
|
217
|
-
self.deactivateExcept(instance);
|
218
|
-
return instance.activate();
|
219
|
-
}
|
220
|
-
});
|
221
|
-
luda.on('keydown', this._SELECTOR, function(e) {
|
222
|
-
var instance, ref;
|
223
|
-
if (e.keyCode === luda.KEY_ESC && (instance = self.query(this))) {
|
224
|
-
e.preventDefault();
|
225
|
-
if (instance._isActive()) {
|
226
|
-
return instance.deactivate(true);
|
227
|
-
} else {
|
228
|
-
return (ref = instance._parent) != null ? ref.deactivate(true) : void 0;
|
229
|
-
}
|
230
|
-
}
|
231
|
-
});
|
232
|
-
return luda.on('keydown', this._SELECTOR, function(e) {
|
233
|
-
var instance, ref, ref1;
|
234
|
-
if ([luda.KEY_LEFT, luda.KEY_UP].includes(e.keyCode) && (instance = self.query(this))) {
|
235
|
-
e.preventDefault();
|
236
|
-
if (instance._isActive()) {
|
237
|
-
return instance._prev();
|
238
|
-
} else {
|
239
|
-
return (ref = instance._parent) != null ? ref._prev() : void 0;
|
240
|
-
}
|
241
|
-
} else if ([luda.KEY_RIGHT, luda.KEY_DOWN].includes(e.keyCode) && (instance = self.query(this))) {
|
242
|
-
e.preventDefault();
|
243
|
-
if (instance._isActive()) {
|
244
|
-
return instance._next();
|
245
|
-
} else {
|
246
|
-
return (ref1 = instance._parent) != null ? ref1._next() : void 0;
|
247
|
-
}
|
248
142
|
}
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
_Class._SCOPE = 'dropdown';
|
255
|
-
|
256
|
-
_Class._SELECTOR = '.dropdown-fixed,.dropdown-absolute, .dropdown-static,.dropdown-absolute-m';
|
257
|
-
|
258
|
-
_Class._MENU_SELECTOR = '.dropdown-menu';
|
259
|
-
|
260
|
-
_Class._ITEMS_SELECTOR = 'a[href]:not([disabled]),button:not([disabled]), input:not([disabled]),[tabindex]:not([disabled])';
|
261
|
-
|
262
|
-
_Class._TOGGLE_ATTRIBUTE = 'data-dropdown-toggle';
|
263
|
-
|
264
|
-
_Class._TOGGLE_DISABLED_ATTRIBUTE = 'data-dropdown-toggle-disabled';
|
265
|
-
|
266
|
-
_Class._STANDALONE_ATTRIBUTE = 'data-dropdown-standalone';
|
267
|
-
|
268
|
-
_Class._SWITCHES_SELECTOR = `[${_Class._TOGGLE_ATTRIBUTE}]`;
|
269
|
-
|
270
|
-
_Class._NONE_SWITCHES_SELECTOR = `[${_Class._TOGGLE_DISABLED_ATTRIBUTE}]`;
|
271
|
-
|
272
|
-
_Class._ACTIVE_CSS_CLASS = 'dropdown-active';
|
273
|
-
|
274
|
-
_Class._observerConfig = {
|
275
|
-
childList: true,
|
276
|
-
attributes: true,
|
277
|
-
subtree: true,
|
278
|
-
attributeFilter: [_Class._TOGGLE_ATTRIBUTE, _Class._TOGGLE_DISABLED_ATTRIBUTE, _Class._STANDALONE_ATTRIBUTE]
|
279
|
-
};
|
280
|
-
|
281
|
-
_Class._$focused = [];
|
282
|
-
|
283
|
-
return _Class;
|
284
|
-
|
285
|
-
}).call(this));
|
143
|
+
]
|
144
|
+
];
|
145
|
+
}
|
146
|
+
});
|
286
147
|
|
287
148
|
})));
|
@@ -1,112 +1,67 @@
|
|
1
|
-
//= require ../
|
2
|
-
//= require ../
|
3
|
-
//= require
|
4
|
-
//= require ../factory
|
5
|
-
//= require ../behaviors/focus
|
6
|
-
//= require ../behaviors/enter
|
1
|
+
//= require ../kernel/index
|
2
|
+
//= require ../mixins/resetable
|
3
|
+
//= require ./dropdown
|
7
4
|
(function (global, factory) {
|
8
|
-
typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../
|
9
|
-
typeof define === 'function' && define.amd ? define(['../
|
5
|
+
typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../kernel/index.js'), require('../mixins/resetable.js'), require('./dropdown.js')) :
|
6
|
+
typeof define === 'function' && define.amd ? define(['../kernel/index.js', '../mixins/resetable.js', './dropdown.js'], factory) :
|
10
7
|
(factory());
|
11
8
|
}(this, (function () { 'use strict';
|
12
9
|
|
13
|
-
luda((
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
_setValueHolderValue() {
|
36
|
-
var values;
|
37
|
-
values = [];
|
38
|
-
this._$values.forEach(($value, index) => {
|
39
|
-
var value;
|
40
|
-
if ($value.checked) {
|
41
|
-
if ($value.hasAttribute(this.constructor._LABEL_ATTRIBUTE)) {
|
42
|
-
value = $value.getAttribute(this.constructor._LABEL_ATTRIBUTE);
|
43
|
-
} else {
|
44
|
-
value = this._$defaultValues[index].innerText;
|
45
|
-
}
|
46
|
-
}
|
47
|
-
if (value && !values.includes(value)) {
|
48
|
-
return values.push(value);
|
49
|
-
}
|
50
|
-
});
|
51
|
-
if (this._$valueHolder) {
|
52
|
-
return this._$valueHolder.value = values.join(this.constructor._VALUE_SPLITOR);
|
53
|
-
}
|
54
|
-
}
|
55
|
-
|
56
|
-
_setValueHolderAttribute() {
|
57
|
-
if (this._$valueHolder) {
|
58
|
-
return this._$valueHolder.setAttribute('readonly', '');
|
10
|
+
luda.component('fmDropdown').protect({
|
11
|
+
selector: {
|
12
|
+
options: '.dropdown-items .btn-radio input, .dropdown-items .btn-check input',
|
13
|
+
labels: '.dropdown-items .btn-radio label, .dropdown-items .btn-check label',
|
14
|
+
simulator: '.fm input'
|
15
|
+
},
|
16
|
+
data: {
|
17
|
+
label: 'fm-dropdown-label'
|
18
|
+
},
|
19
|
+
splitor: ' '
|
20
|
+
}).protect({
|
21
|
+
disableSimulator: function() {
|
22
|
+
return this.simulator.data('auto', false).attr('readonly', '');
|
23
|
+
},
|
24
|
+
updateValue: function() {
|
25
|
+
var values;
|
26
|
+
values = [];
|
27
|
+
this.options.els.forEach((input, index) => {
|
28
|
+
var label, value;
|
29
|
+
if (!input.checked) {
|
30
|
+
return;
|
59
31
|
}
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
self = this;
|
65
|
-
luda.enter._add(this._ENTER_BEHAVIOR_SELECTOR);
|
66
|
-
luda.on('change', `${this._SELECTOR} ${this._VALUE_SELECTOR}`, function(e) {
|
67
|
-
return self.query(luda.$parent(self._SELECTOR, this))._setValueHolderValue();
|
68
|
-
});
|
69
|
-
luda.on(luda._FORM_RESET, this._SELECTOR, function(e) {
|
70
|
-
return setTimeout(() => {
|
71
|
-
return self.query(this)._setValueHolderValue();
|
72
|
-
});
|
73
|
-
});
|
74
|
-
// prevent ios device pop out wired navigation pannel
|
75
|
-
if (/iphone/i.test(navigator.userAgent) || /ipad/i.test(navigator.userAgent)) {
|
76
|
-
return luda.on('focusin', this._ENTER_BEHAVIOR_SELECTOR, function(e) {
|
77
|
-
this.blur();
|
78
|
-
return this.classList.add(luda.focus._CSS_CLASS);
|
79
|
-
});
|
32
|
+
label = luda(this.labels.els[index]);
|
33
|
+
value = label.data(this.data.label) || label.text();
|
34
|
+
if (value && !values.includes(value)) {
|
35
|
+
return values.push(value);
|
80
36
|
}
|
81
|
-
}
|
82
|
-
|
83
|
-
}
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
}).call(this));
|
37
|
+
});
|
38
|
+
return this.simulator.attr('value', values.join(this.splitor));
|
39
|
+
},
|
40
|
+
triggerClick: function() {
|
41
|
+
return this.simulator.trigger('click');
|
42
|
+
}
|
43
|
+
}).help({
|
44
|
+
find: function() {
|
45
|
+
return {
|
46
|
+
options: this.selector.options,
|
47
|
+
labels: this.selector.labels,
|
48
|
+
simulator: this.selector.simulator
|
49
|
+
};
|
50
|
+
},
|
51
|
+
create: function() {
|
52
|
+
this.disableSimulator();
|
53
|
+
return this.updateValue();
|
54
|
+
},
|
55
|
+
watch: function() {
|
56
|
+
return {
|
57
|
+
dom: [[this.selector.options, this.updateValue]],
|
58
|
+
attr: [['checked', this.selector.options, this.updateValue]]
|
59
|
+
};
|
60
|
+
},
|
61
|
+
listen: function() {
|
62
|
+
luda.mixin('resetable').get('listen').call(this, this.updateValue);
|
63
|
+
return [['change', this.selector.options, this.updateValue], ['keydown@enter', this.selector.simulator, this.triggerClick]];
|
64
|
+
}
|
65
|
+
});
|
111
66
|
|
112
67
|
})));
|