luda 0.3.0 → 0.3.1
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.
- checksums.yaml +4 -4
- data/README.md +25 -10
- data/assets/javascripts/luda-degradation.js +1 -1
- data/assets/javascripts/luda-degradation.min.js +1 -1
- data/assets/javascripts/luda.js +364 -233
- 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/enter.js +8 -6
- data/assets/javascripts/luda/behaviors/focus.js +8 -9
- data/assets/javascripts/luda/behaviors/tabulate.js +7 -5
- data/assets/javascripts/luda/elements/form-file.js +37 -19
- data/assets/javascripts/luda/elements/form-select.js +49 -27
- data/assets/javascripts/luda/kernel/index.js +126 -84
- data/assets/javascripts/luda/mixins/disable.js +10 -9
- data/assets/javascripts/luda/mixins/tabable.js +25 -25
- data/assets/javascripts/luda/mixins/toggleable.js +32 -32
- data/assets/javascripts/luda/patterns/carousel.js +28 -10
- data/assets/javascripts/luda/patterns/dropdown.js +6 -0
- data/assets/javascripts/luda/patterns/form-dropdown.js +28 -7
- data/assets/stylesheets/luda/default/_banner.sass +1 -1
- data/assets/stylesheets/luda/kernel/patterns/_navigation.sass +1 -0
- data/lib/luda/version.rb +1 -1
- metadata +2 -2
@@ -12,22 +12,23 @@
|
|
12
12
|
// data:
|
13
13
|
// disable:
|
14
14
|
// tabIndex: string # required
|
15
|
+
disableTargetProp: function() {
|
16
|
+
var ref;
|
17
|
+
return ((ref = this.attr) != null ? ref.disable : void 0) || 'disabled';
|
18
|
+
},
|
15
19
|
disableCreate: function() {
|
16
|
-
var dataAttr,
|
17
|
-
|
18
|
-
tabIndex = rootEl.tabIndex;
|
20
|
+
var dataAttr, tabIndex;
|
21
|
+
tabIndex = this.root.prop('tabIndex');
|
19
22
|
dataAttr = this.data.disable.tabIndex;
|
20
23
|
if (!this.root.hasData(dataAttr)) {
|
21
24
|
this.root.data(dataAttr, tabIndex);
|
22
25
|
}
|
23
|
-
|
24
|
-
return rootEl[((ref = this.attr) != null ? ref.disable : void 0) || 'disabled'] = true;
|
26
|
+
return this.root.prop('tabIndex', -1).prop(this.disableTargetProp(), true);
|
25
27
|
},
|
26
28
|
disableDestroy: function() {
|
27
|
-
var
|
28
|
-
|
29
|
-
|
30
|
-
return rootEl[((ref = this.attr) != null ? ref.disable : void 0) || 'disabled'] = false;
|
29
|
+
var tabIndex;
|
30
|
+
tabIndex = this.root.data(this.data.disable.tabIndex);
|
31
|
+
return this.root.prop('tabIndex', tabIndex).prop(this.disableTargetProp(), false);
|
31
32
|
}
|
32
33
|
});
|
33
34
|
|
@@ -36,6 +36,30 @@
|
|
36
36
|
// indicators: string # required
|
37
37
|
// prevCtrl: string # optional
|
38
38
|
// nextCtrl: string # optional
|
39
|
+
tabableActiveIndex: function() {
|
40
|
+
var index, ref, ref1;
|
41
|
+
index = ((ref = this.default) != null ? (ref1 = ref.tabable) != null ? ref1.activeIndex : void 0 : void 0) || 0;
|
42
|
+
this.tabableTargets.els.some((it, i) => {
|
43
|
+
if (!luda(it).hasClass(this.cls.tabable.active)) {
|
44
|
+
return false;
|
45
|
+
}
|
46
|
+
index = i;
|
47
|
+
return true;
|
48
|
+
});
|
49
|
+
return index;
|
50
|
+
},
|
51
|
+
tabableWrapable: function() {
|
52
|
+
var ref, ref1, wrapAttr, wrapable;
|
53
|
+
wrapAttr = this.data.tabable.wrap;
|
54
|
+
if (!wrapAttr) {
|
55
|
+
return false;
|
56
|
+
}
|
57
|
+
wrapable = this.root.data(wrapAttr);
|
58
|
+
if (wrapable === false) {
|
59
|
+
return false;
|
60
|
+
}
|
61
|
+
return (ref = this.default) != null ? (ref1 = ref.tabable) != null ? ref1.wrap : void 0 : void 0;
|
62
|
+
},
|
39
63
|
tabableActivate: function(index) {
|
40
64
|
var direction;
|
41
65
|
if (!luda.isNumeric(index)) {
|
@@ -127,30 +151,6 @@
|
|
127
151
|
this.tabableSetDirectionCtrlsState();
|
128
152
|
return true;
|
129
153
|
},
|
130
|
-
tabableActiveIndex: function() {
|
131
|
-
var index, ref, ref1;
|
132
|
-
index = ((ref = this.default) != null ? (ref1 = ref.tabable) != null ? ref1.activeIndex : void 0 : void 0) || 0;
|
133
|
-
this.tabableTargets.els.some((it, i) => {
|
134
|
-
if (!luda(it).hasClass(this.cls.tabable.active)) {
|
135
|
-
return false;
|
136
|
-
}
|
137
|
-
index = i;
|
138
|
-
return true;
|
139
|
-
});
|
140
|
-
return index;
|
141
|
-
},
|
142
|
-
tabableWrapable: function() {
|
143
|
-
var ref, ref1, wrapAttr, wrapable;
|
144
|
-
wrapAttr = this.data.tabable.wrap;
|
145
|
-
if (!wrapAttr) {
|
146
|
-
return false;
|
147
|
-
}
|
148
|
-
wrapable = this.root.data(wrapAttr);
|
149
|
-
if (wrapable === false) {
|
150
|
-
return false;
|
151
|
-
}
|
152
|
-
return (ref = this.default) != null ? (ref1 = ref.tabable) != null ? ref1.wrap : void 0 : void 0;
|
153
|
-
},
|
154
154
|
tabableTransitioning: function() {
|
155
155
|
return 'tabableActivating' in this || 'tabableDeactivating' in this;
|
156
156
|
},
|
@@ -255,7 +255,7 @@
|
|
255
255
|
wrapAttr && attr.push([wrapAttr, this.tabableSetDirectionControlState]);
|
256
256
|
return {
|
257
257
|
attr: attr,
|
258
|
-
|
258
|
+
node: [[this.selector.tabable.targets, this.tabableLayout], [this.selector.tabable.indicators, this.tabableSetIndicatorsState]]
|
259
259
|
};
|
260
260
|
},
|
261
261
|
tabableListen: function() {
|
@@ -29,6 +29,38 @@
|
|
29
29
|
// selector:
|
30
30
|
// toggleable:
|
31
31
|
// target: string # optional
|
32
|
+
toggleableActive: function() {
|
33
|
+
return this.root.hasClass(this.cls.toggleable.active);
|
34
|
+
},
|
35
|
+
toggleableTriggerable: function(e) {
|
36
|
+
var evtPath, index, ref, ref1, toggleAttr, trigger;
|
37
|
+
if (this.toggleableTransitioning()) {
|
38
|
+
return;
|
39
|
+
}
|
40
|
+
if (/key/.test(e.type)) {
|
41
|
+
return true;
|
42
|
+
}
|
43
|
+
if (!this.root.els[0].contains(e.target)) {
|
44
|
+
return true;
|
45
|
+
}
|
46
|
+
trigger = (ref = this.default) != null ? (ref1 = ref.toggleable) != null ? ref1.trigger : void 0 : void 0;
|
47
|
+
toggleAttr = this.data.toggleable.trigger;
|
48
|
+
if (!toggleAttr) {
|
49
|
+
return trigger;
|
50
|
+
}
|
51
|
+
evtPath = e.eventPath();
|
52
|
+
index = evtPath.indexOf(this.root.els[0]) + 1;
|
53
|
+
evtPath.slice(0, index).some(function(el) {
|
54
|
+
var ins;
|
55
|
+
ins = luda(el);
|
56
|
+
if (!ins.hasData(toggleAttr)) {
|
57
|
+
return;
|
58
|
+
}
|
59
|
+
trigger = ins.data(toggleAttr) !== false;
|
60
|
+
return true;
|
61
|
+
});
|
62
|
+
return trigger;
|
63
|
+
},
|
32
64
|
toggleableActivate: function() {
|
33
65
|
var evt;
|
34
66
|
if (this.toggleableActive()) {
|
@@ -78,41 +110,9 @@
|
|
78
110
|
return this.toggleableActivate();
|
79
111
|
}
|
80
112
|
},
|
81
|
-
toggleableActive: function() {
|
82
|
-
return this.root.hasClass(this.cls.toggleable.active);
|
83
|
-
},
|
84
113
|
toggleableTransitioning: function() {
|
85
114
|
return 'toggleableActivating' in this || 'toggleableDeactivating' in this;
|
86
115
|
},
|
87
|
-
toggleableTriggerable: function(e) {
|
88
|
-
var evtPath, index, ref, ref1, toggleAttr, trigger;
|
89
|
-
if (this.toggleableTransitioning()) {
|
90
|
-
return;
|
91
|
-
}
|
92
|
-
if (/key/.test(e.type)) {
|
93
|
-
return true;
|
94
|
-
}
|
95
|
-
if (!this.root.els[0].contains(e.target)) {
|
96
|
-
return true;
|
97
|
-
}
|
98
|
-
trigger = (ref = this.default) != null ? (ref1 = ref.toggleable) != null ? ref1.trigger : void 0 : void 0;
|
99
|
-
toggleAttr = this.data.toggleable.trigger;
|
100
|
-
if (!toggleAttr) {
|
101
|
-
return trigger;
|
102
|
-
}
|
103
|
-
evtPath = e.eventPath();
|
104
|
-
index = evtPath.indexOf(this.root.els[0]) + 1;
|
105
|
-
evtPath.slice(0, index).some(function(el) {
|
106
|
-
var ins;
|
107
|
-
ins = luda(el);
|
108
|
-
if (!ins.hasData(toggleAttr)) {
|
109
|
-
return;
|
110
|
-
}
|
111
|
-
trigger = ins.data(toggleAttr) !== false;
|
112
|
-
return true;
|
113
|
-
});
|
114
|
-
return trigger;
|
115
|
-
},
|
116
116
|
toggleableFocusOpener: function(e) {
|
117
117
|
var ins;
|
118
118
|
if (this.toggleableActive()) {
|
@@ -45,6 +45,15 @@
|
|
45
45
|
nextCtrl: '.carousel-next'
|
46
46
|
}
|
47
47
|
}
|
48
|
+
}).protect({
|
49
|
+
interval: function() {
|
50
|
+
var duration;
|
51
|
+
duration = this.root.data(this.data.interval);
|
52
|
+
if (duration === false) {
|
53
|
+
return false;
|
54
|
+
}
|
55
|
+
return Math.abs(parseInt(duration, 10)) || this.default.interval;
|
56
|
+
}
|
48
57
|
}).include(luda.mixin('tabable').alias({
|
49
58
|
activate: 'tabableActivate',
|
50
59
|
next: 'tabableNext',
|
@@ -83,17 +92,26 @@
|
|
83
92
|
return this.intervaling = setTimeout(handler, this.nextInterval);
|
84
93
|
}
|
85
94
|
}).protect(luda.mixin('tabable').all()).protect({
|
86
|
-
|
87
|
-
var
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
95
|
+
togglePath: function(path, action) {
|
96
|
+
var targets;
|
97
|
+
targets = path.filter((el) => {
|
98
|
+
return this.con.contains(el);
|
99
|
+
});
|
100
|
+
return this.con.create(targets).forEach(function(ins) {
|
101
|
+
return ins[action]();
|
102
|
+
});
|
103
|
+
},
|
104
|
+
pauseOnEvt: function(e) {
|
105
|
+
return this.togglePath(e.eventPath(), 'pause');
|
106
|
+
},
|
107
|
+
playOnEvt: function(e) {
|
108
|
+
return this.togglePath(e.eventPath(), 'play');
|
93
109
|
},
|
94
|
-
|
110
|
+
playOnTouchend: function(e) {
|
111
|
+
var path;
|
112
|
+
path = e.eventPath();
|
95
113
|
return setTimeout(() => {
|
96
|
-
return this.play
|
114
|
+
return this.togglePath(path, 'play');
|
97
115
|
});
|
98
116
|
}
|
99
117
|
}).help({
|
@@ -115,7 +133,7 @@
|
|
115
133
|
return watches;
|
116
134
|
},
|
117
135
|
listen: function() {
|
118
|
-
return this.tabableListen().concat([['swipeleft', this.tabableNextOnEvent], ['swiperight', this.tabablePrevOnEvent], ['touchstart mouseover', this.
|
136
|
+
return this.tabableListen().concat([['swipeleft', this.tabableNextOnEvent], ['swiperight', this.tabablePrevOnEvent], ['touchstart mouseover', this.pauseOnEvt], ['mouseout', this.playOnEvt], ['touchend', this.playOnTouchend]]);
|
119
137
|
}
|
120
138
|
});
|
121
139
|
|
@@ -16,12 +16,15 @@
|
|
16
16
|
data: {
|
17
17
|
label: 'fm-dropdown-label'
|
18
18
|
},
|
19
|
+
evt: {
|
20
|
+
changed: 'luda:fmDropdown:changed'
|
21
|
+
},
|
19
22
|
splitor: ' '
|
20
23
|
}).protect({
|
21
|
-
|
24
|
+
initSimulator: function() {
|
22
25
|
return this.simulator.data('auto', false).attr('readonly', '');
|
23
26
|
},
|
24
|
-
|
27
|
+
updateSimulatorValue: function() {
|
25
28
|
var values;
|
26
29
|
values = [];
|
27
30
|
this.options.els.forEach((input, index) => {
|
@@ -29,13 +32,31 @@
|
|
29
32
|
if (!input.checked) {
|
30
33
|
return;
|
31
34
|
}
|
32
|
-
label =
|
35
|
+
label = this.labels.eq(index);
|
33
36
|
value = label.data(this.data.label) || label.text();
|
34
37
|
if (value && !values.includes(value)) {
|
35
38
|
return values.push(value);
|
36
39
|
}
|
37
40
|
});
|
38
|
-
return this.simulator.
|
41
|
+
return this.simulator.val(values.join(this.splitor));
|
42
|
+
},
|
43
|
+
updateValue: function() {
|
44
|
+
var checked, oldVal;
|
45
|
+
this.updateSimulatorValue();
|
46
|
+
oldVal = this.selectedVal;
|
47
|
+
checked = this.options.els.filter(function(input) {
|
48
|
+
return input.checked;
|
49
|
+
});
|
50
|
+
this.selectedVal = checked.map(function(input) {
|
51
|
+
return luda(input).val();
|
52
|
+
});
|
53
|
+
if (!oldVal || luda.arrayEqual(this.selectedVal, oldVal)) {
|
54
|
+
return;
|
55
|
+
}
|
56
|
+
return this.root.trigger(this.evt.changed, {
|
57
|
+
value: this.selectedVal,
|
58
|
+
selected: checked
|
59
|
+
});
|
39
60
|
},
|
40
61
|
triggerClick: function() {
|
41
62
|
return this.simulator.trigger('click');
|
@@ -49,13 +70,13 @@
|
|
49
70
|
};
|
50
71
|
},
|
51
72
|
create: function() {
|
52
|
-
this.
|
73
|
+
this.initSimulator();
|
53
74
|
return this.updateValue();
|
54
75
|
},
|
55
76
|
watch: function() {
|
56
77
|
return {
|
57
|
-
|
58
|
-
attr: [['checked', this.selector.options, this.updateValue]]
|
78
|
+
node: [[this.selector.options, this.updateValue]],
|
79
|
+
attr: [['checked', this.selector.options, this.updateValue], ['type', this.selector.options, this.updateValue]]
|
59
80
|
};
|
60
81
|
},
|
61
82
|
listen: function() {
|
@@ -1,7 +1,7 @@
|
|
1
1
|
// sass-lint:disable no-empty-rulesets
|
2
2
|
+install(banner)
|
3
3
|
/*!
|
4
|
-
* Luda 0.3.
|
4
|
+
* Luda 0.3.1 | Theme default | https://oatw.github.io/luda
|
5
5
|
* Copyright 2019 Oatw | https://oatw.blog
|
6
6
|
* MIT license | http://opensource.org/licenses/MIT
|
7
7
|
*/
|
data/lib/luda/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: luda
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- oatw
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-12-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sass
|