luda 0.1.11 → 0.1.12
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/assets/javascripts/luda-degradation.js +2 -2
- data/assets/javascripts/luda-degradation.min.js +2 -2
- data/assets/javascripts/luda-sprockets.js +2 -2
- data/assets/javascripts/luda.js +719 -250
- data/assets/javascripts/luda.js.map +1 -1
- data/assets/javascripts/luda.min.js +3 -3
- data/assets/javascripts/luda.min.js.map +1 -1
- data/assets/javascripts/luda/behaviors/{enter-click.js → enter.js} +8 -6
- data/assets/javascripts/luda/behaviors/focus.js +14 -8
- data/assets/javascripts/luda/behaviors/readonly.js +4 -4
- data/assets/javascripts/luda/behaviors/{radio-tab.js → tabulate.js} +8 -6
- data/assets/javascripts/luda/behaviors/toggle.js +72 -18
- data/assets/javascripts/luda/dom.js +62 -0
- data/assets/javascripts/luda/elements/form-file.js +13 -4
- data/assets/javascripts/luda/elements/form-select.js +9 -5
- data/assets/javascripts/luda/event.js +11 -3
- data/assets/javascripts/luda/{component.js → factory.js} +149 -55
- data/assets/javascripts/luda/index.js +4 -4
- data/assets/javascripts/luda/install.js +2 -2
- data/assets/javascripts/luda/patterns/carousel.js +85 -59
- data/assets/javascripts/luda/patterns/dropdown.js +86 -68
- data/assets/javascripts/luda/patterns/form-dropdown.js +8 -8
- data/assets/javascripts/luda/patterns/tab.js +62 -23
- data/assets/javascripts/luda/static.js +224 -0
- data/assets/stylesheets/luda/_core/_functions.sass +11 -19
- data/assets/stylesheets/luda/_core/_variables.sass +140 -131
- data/assets/stylesheets/luda/_core/behaviors/_focus.sass +2 -2
- data/assets/stylesheets/luda/_core/elements/_button.sass +1 -1
- data/assets/stylesheets/luda/_core/elements/_grid.sass +0 -3
- data/assets/stylesheets/luda/_core/elements/_scrollbar.sass +8 -2
- data/assets/stylesheets/luda/_core/elements/form/_form-check-radio.sass +22 -31
- data/assets/stylesheets/luda/_core/elements/form/_form-element.sass +1 -1
- data/assets/stylesheets/luda/_core/elements/form/_form-helper.sass +19 -19
- data/assets/stylesheets/luda/_core/elements/form/_form-range.sass +19 -19
- data/assets/stylesheets/luda/_core/elements/form/_form-row.sass +43 -59
- data/assets/stylesheets/luda/_core/elements/typography/_quote.sass +1 -1
- data/assets/stylesheets/luda/_core/elements/typography/_typography.sass +9 -9
- data/assets/stylesheets/luda/_core/mixins/_dropdown.sass +8 -6
- data/assets/stylesheets/luda/_core/mixins/_form.sass +12 -12
- data/assets/stylesheets/luda/_core/mixins/_media-query.sass +12 -12
- data/assets/stylesheets/luda/_core/mixins/_typography.sass +4 -4
- data/assets/stylesheets/luda/_core/patterns/_breadcrumb.sass +2 -2
- data/assets/stylesheets/luda/_core/patterns/_button-group.sass +1 -1
- data/assets/stylesheets/luda/_core/patterns/_button-icon.sass +2 -2
- data/assets/stylesheets/luda/_core/patterns/_carousel.sass +13 -13
- data/assets/stylesheets/luda/_core/patterns/_dropdown.sass +5 -1
- data/assets/stylesheets/luda/_core/patterns/_form-dropdown.sass +3 -3
- data/assets/stylesheets/luda/_core/patterns/_form-group.sass +11 -11
- data/assets/stylesheets/luda/_core/patterns/_form-icon.sass +13 -19
- data/assets/stylesheets/luda/_core/patterns/_navigation.sass +5 -5
- data/assets/stylesheets/luda/_core/patterns/_search-bar.sass +2 -2
- data/assets/stylesheets/luda/_core/patterns/_tab.sass +1 -3
- data/assets/stylesheets/luda/_core/utilities/_border.sass +15 -15
- data/assets/stylesheets/luda/_core/utilities/_color.sass +4 -1
- data/assets/stylesheets/luda/_core/utilities/_display.sass +1 -1
- data/assets/stylesheets/luda/_core/utilities/_flex.sass +3 -0
- data/assets/stylesheets/luda/_core/utilities/_shadow.sass +12 -12
- data/assets/stylesheets/luda/_core/utilities/_spacing.sass +227 -0
- data/assets/stylesheets/luda/_core/utilities/_visibility.sass +1 -1
- data/assets/stylesheets/luda/_default.sass +1 -1
- data/assets/stylesheets/luda/default/_banner.sass +2 -2
- data/assets/stylesheets/luda/default/index.sass +1 -1
- data/assets/stylesheets/luda/default/utilities/_border.sass +4 -4
- data/assets/stylesheets/luda/default/utilities/_shadow.sass +4 -4
- data/assets/stylesheets/luda/default/utilities/_spacing.sass +5 -0
- data/lib/luda/version.rb +1 -1
- metadata +9 -11
- data/assets/javascripts/luda/singleton.js +0 -77
- data/assets/stylesheets/luda/_core/patterns/_form-button.sass +0 -23
- data/assets/stylesheets/luda/_core/patterns/_nav.sass +0 -165
- data/assets/stylesheets/luda/default/patterns/_form-button.sass +0 -9
- data/assets/stylesheets/luda/default/patterns/_nav.sass +0 -10
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 1054ce023a6863675d67d8ecccb446ff7518e4e7cb4e5f6f9128afdd577ddcd2
|
|
4
|
+
data.tar.gz: dcd03dd757ca3d475f69358f096beaff38a219b356080e948f5183df75e867a2
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 2c8c265427e255b307f7f43f44de490b8e1d2429cb7482b75b05c28b051de20b6741ab744e873b589489175f6c53b361a885f1cb7e0fd070eb796345a804e564
|
|
7
|
+
data.tar.gz: 5d63d0d5a87a6dda234e346c01a3dd62787813feb64db91dadae948998b65ff3ba97f7a218356f2de548792e9b47a8c43e45d80dabfa26234fb1d47a0f72e330
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Luda degradation script 0.1.
|
|
3
|
-
* Copyright
|
|
2
|
+
* Luda degradation script 0.1.12 | https://luda.dev
|
|
3
|
+
* Copyright 2019 Oatw | https://oatw.blog
|
|
4
4
|
* MIT license | http://opensource.org/licenses/MIT
|
|
5
5
|
*/
|
|
6
6
|
(function (global, factory) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Luda degradation script 0.1.
|
|
3
|
-
* Copyright
|
|
2
|
+
* Luda degradation script 0.1.12 | https://luda.dev
|
|
3
|
+
* Copyright 2019 Oatw | https://oatw.blog
|
|
4
4
|
* MIT license | http://opensource.org/licenses/MIT
|
|
5
5
|
*/
|
|
6
6
|
(function(global,factory){typeof exports==="object"&&typeof module!=="undefined"?factory():typeof define==="function"&&define.amd?define(factory):factory()})(this,function(){"use strict";var Degradation;Degradation={_URL_ATTRIBUTE:"data-degradation-url",_HTML:['<div id="luda-degradation-html" ','style="padding:100px 30px;text-align:center">',"<h1>Your Browser Is Too Old!</h1>","<p>","Please visit this site with a modern browser ",'<a target="_blank" href="https://www.google.com/chrome/">',"(Chrome recommended)","</a>",".</p>","</div>"].join(""),_CSS_PROPERTIES:[{display:"flex",position:["sticky||-webkit-sticky","fixed"]},"transition","animation"],_JS_PROPERTIES:{es6Class:"class X {}",es6ArrowFunction:"((x) => x)()",mutationObserver:"new MutationObserver(function(){})"},_NOTIFY_MILLSECONDS:500,check:function(){this._checkEnv();this._checkJS(this._JS_PROPERTIES);return this._checkCSS(this._CSS_PROPERTIES)},_eval:eval,_checkEnv:function(){if(typeof document!=="undefined"){if(typeof window!=="undefined"){return window}if(typeof global!=="undefined"){return global}}throw new Error("Unsupported runtime environment.")},_checkJS:function(properties){var err,property,results,value;results=[];for(property in properties){value=properties[property];try{results.push(this._eval(value))}catch(error){err=error;this._notify();throw new Error(property+" "+err)}}return results},_checkCSS:function(properties){var ele,i,len,name,property,results,value,valueEle;ele=document.createElement("div");results=[];for(i=0,len=properties.length;i<len;i++){property=properties[i];if(typeof property==="string"){results.push(this._CSSPropertySupported(ele,property))}else{results.push(function(){var results1;results1=[];for(name in property){value=property[name];this._CSSPropertySupported(ele,name);if(value instanceof Array){results1.push(function(){var j,len1,results2;results2=[];for(j=0,len1=value.length;j<len1;j++){valueEle=value[j];results2.push(this._CSSValueSupported(ele,name,valueEle))}return results2}.call(this))}else{results1.push(this._CSSValueSupported(ele,name,value))}}return results1}.call(this))}}return results},_CSSPropertySupported:function(ele,property){if(typeof ele.style[property]!=="string"){this._notify();throw new Error("Unsupported CSS property: "+property)}},_CSSValueSupported:function(ele,property,valueStr){var i,len,value,values;values=valueStr.split("||");for(i=0,len=values.length;i<len;i++){value=values[i];ele.style[property]=value;if(ele.style[property]===value){return}}this._notify();throw new Error("Unsupported CSS property value: "+property+" "+valueStr)},_notify:function(){var _self,i,len,redirectUrl,ref,script;redirectUrl=document.documentElement.getAttribute(this._URL_ATTRIBUTE);if(redirectUrl){return location.href=redirectUrl}ref=document.scripts;for(i=0,len=ref.length;i<len;i++){script=ref[i];redirectUrl=script.getAttribute(this._URL_ATTRIBUTE);if(redirectUrl){return location.href=redirectUrl}}_self=this;return setInterval(function(){if(!document.getElementById("luda-degradation-html")){if(document.body){return document.body.innerHTML=_self._HTML}}},this._NOTIFY_MILLSECONDS)}};Degradation.check()});
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
//= require luda/behaviors/enter
|
|
1
|
+
//= require luda/behaviors/enter
|
|
2
2
|
//= require luda/behaviors/focus
|
|
3
|
-
//= require luda/behaviors/
|
|
3
|
+
//= require luda/behaviors/tabulate
|
|
4
4
|
//= require luda/behaviors/readonly
|
|
5
5
|
//= require luda/behaviors/toggle
|
|
6
6
|
//= require luda/elements/form-file
|
data/assets/javascripts/luda.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Luda 0.1.
|
|
3
|
-
* Copyright
|
|
2
|
+
* Luda 0.1.12 | https://luda.dev
|
|
3
|
+
* Copyright 2019 Oatw | https://oatw.blog
|
|
4
4
|
* MIT license | http://opensource.org/licenses/MIT
|
|
5
5
|
*/
|
|
6
6
|
(function (global, factory) {
|
|
@@ -152,6 +152,68 @@
|
|
|
152
152
|
},
|
|
153
153
|
reflow: function($element) {
|
|
154
154
|
return $element.offsetHeight;
|
|
155
|
+
},
|
|
156
|
+
_getTransitionDurations: function(style, propertyLength) {
|
|
157
|
+
var durationArray;
|
|
158
|
+
durationArray = style.split(',');
|
|
159
|
+
while (durationArray.length < propertyLength) {
|
|
160
|
+
durationArray = durationArray.concat(durationArray);
|
|
161
|
+
}
|
|
162
|
+
if (durationArray.length > propertyLength) {
|
|
163
|
+
durationArray = durationArray.slice(0, propertyLength);
|
|
164
|
+
}
|
|
165
|
+
return durationArray.map(function(durationStr) {
|
|
166
|
+
var duration;
|
|
167
|
+
duration = parseFloat(durationStr);
|
|
168
|
+
if (!duration) {
|
|
169
|
+
return 0;
|
|
170
|
+
}
|
|
171
|
+
if (durationStr.match('ms')) {
|
|
172
|
+
return duration;
|
|
173
|
+
} else {
|
|
174
|
+
return duration * 1000;
|
|
175
|
+
}
|
|
176
|
+
});
|
|
177
|
+
},
|
|
178
|
+
getTransitionDuration: function($element) {
|
|
179
|
+
var delays, durations, finalDurations, length, styles;
|
|
180
|
+
styles = window.getComputedStyle($element);
|
|
181
|
+
length = styles.transitionProperty.split(',').length;
|
|
182
|
+
if (!length) {
|
|
183
|
+
return 0;
|
|
184
|
+
}
|
|
185
|
+
delays = this._getTransitionDurations(styles.transitionDelay, length);
|
|
186
|
+
durations = this._getTransitionDurations(styles.transitionDuration, length);
|
|
187
|
+
finalDurations = durations.map(function(duration, index) {
|
|
188
|
+
return duration + delays[index];
|
|
189
|
+
});
|
|
190
|
+
return Math.max.apply(null, finalDurations);
|
|
191
|
+
},
|
|
192
|
+
_observeDom: function(onNodeAdded, onNodeRemoved) {
|
|
193
|
+
var observer, observerConfig;
|
|
194
|
+
observerConfig = {
|
|
195
|
+
childList: true,
|
|
196
|
+
subtree: true
|
|
197
|
+
};
|
|
198
|
+
observer = new MutationObserver(function(mutations) {
|
|
199
|
+
return mutations.forEach(function(mutation) {
|
|
200
|
+
var $addedNodes, $removedNodes;
|
|
201
|
+
$removedNodes = Array.from(mutation.removedNodes);
|
|
202
|
+
$addedNodes = Array.from(mutation.addedNodes);
|
|
203
|
+
$removedNodes.forEach(function($node) {
|
|
204
|
+
if ($node instanceof Element && onNodeRemoved) {
|
|
205
|
+
return onNodeRemoved($node);
|
|
206
|
+
}
|
|
207
|
+
});
|
|
208
|
+
return $addedNodes.forEach(function($node) {
|
|
209
|
+
if ($node instanceof Element && onNodeAdded) {
|
|
210
|
+
return onNodeAdded($node);
|
|
211
|
+
}
|
|
212
|
+
});
|
|
213
|
+
});
|
|
214
|
+
});
|
|
215
|
+
observer.observe(document.documentElement, observerConfig);
|
|
216
|
+
return observer;
|
|
155
217
|
}
|
|
156
218
|
});
|
|
157
219
|
|
|
@@ -210,7 +272,7 @@
|
|
|
210
272
|
}
|
|
211
273
|
});
|
|
212
274
|
},
|
|
213
|
-
dispatch: function($target, type, detail, options = {}) {
|
|
275
|
+
dispatch: function($target, type, detail, delayMilliseconds, options = {}) {
|
|
214
276
|
var evt;
|
|
215
277
|
if (typeof options.bubbles !== 'boolean') {
|
|
216
278
|
options.bubbles = true;
|
|
@@ -223,8 +285,16 @@
|
|
|
223
285
|
}
|
|
224
286
|
evt = new Event(`${this._EVENT_TYPE_PREFIX}:${type}`, options);
|
|
225
287
|
evt.detail = detail;
|
|
226
|
-
|
|
227
|
-
|
|
288
|
+
if (typeof delayMilliseconds === 'number') {
|
|
289
|
+
return setTimeout(function() {
|
|
290
|
+
if ($target) {
|
|
291
|
+
return $target.dispatchEvent(evt);
|
|
292
|
+
}
|
|
293
|
+
}, delayMilliseconds);
|
|
294
|
+
} else {
|
|
295
|
+
$target.dispatchEvent(evt);
|
|
296
|
+
return evt;
|
|
297
|
+
}
|
|
228
298
|
},
|
|
229
299
|
_onDocReady: function(handler) {
|
|
230
300
|
if (document.readyState === 'loading') {
|
|
@@ -347,16 +417,32 @@
|
|
|
347
417
|
}
|
|
348
418
|
});
|
|
349
419
|
|
|
350
|
-
var
|
|
420
|
+
var Static;
|
|
351
421
|
|
|
352
|
-
luda(
|
|
353
|
-
class
|
|
354
|
-
static
|
|
355
|
-
return this.
|
|
422
|
+
luda(Static = (function() {
|
|
423
|
+
class Static {
|
|
424
|
+
static _ACTIVATE_EVENT_TYPE() {
|
|
425
|
+
return `${this._SCOPE}:activate`;
|
|
356
426
|
}
|
|
357
427
|
|
|
358
|
-
static
|
|
359
|
-
return this.
|
|
428
|
+
static _ACTIVATED_EVENT_TYPE() {
|
|
429
|
+
return `${this._SCOPE}:activated`;
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
static _DEACTIVATE_EVENT_TYPE() {
|
|
433
|
+
return `${this._SCOPE}:deactivate`;
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
static _DEACTIVATED_EVENT_TYPE() {
|
|
437
|
+
return `${this._SCOPE}:deactivated`;
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
static _ACTIVATING_MARK_ATTRIBUTE() {
|
|
441
|
+
return `data-${this._SCOPE}-activating`;
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
static _DEACTIVATING_MARK_ATTRIBUTE() {
|
|
445
|
+
return `data-${this._SCOPE}-deactivating`;
|
|
360
446
|
}
|
|
361
447
|
|
|
362
448
|
static _add(selector) {
|
|
@@ -381,9 +467,133 @@
|
|
|
381
467
|
return this._selector = this._SELECTORS.join(',');
|
|
382
468
|
}
|
|
383
469
|
|
|
470
|
+
static _activatePrevented($ele, detail) {
|
|
471
|
+
var activateEvent;
|
|
472
|
+
activateEvent = luda.dispatch($ele, this._ACTIVATE_EVENT_TYPE(), detail);
|
|
473
|
+
return activateEvent.defaultPrevented;
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
static _deactivatePrevented($ele, detail) {
|
|
477
|
+
var deactivateEvent;
|
|
478
|
+
deactivateEvent = luda.dispatch($ele, this._DEACTIVATE_EVENT_TYPE(), detail);
|
|
479
|
+
return deactivateEvent.defaultPrevented;
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
static _handleActivateEnd($ele, detail) {
|
|
483
|
+
var activateDuration;
|
|
484
|
+
this._setActivatingMark($ele, detail);
|
|
485
|
+
activateDuration = luda.getTransitionDuration($ele);
|
|
486
|
+
luda.dispatch($ele, this._ACTIVATED_EVENT_TYPE(), detail, activateDuration);
|
|
487
|
+
setTimeout(() => {
|
|
488
|
+
if ($ele) {
|
|
489
|
+
return this._removeActivatingMark($ele);
|
|
490
|
+
}
|
|
491
|
+
}, activateDuration);
|
|
492
|
+
return activateDuration;
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
static _handleDeactivateEnd($ele, detail) {
|
|
496
|
+
var deactivateDuration;
|
|
497
|
+
this._setDeactivatingMark($ele, detail);
|
|
498
|
+
deactivateDuration = luda.getTransitionDuration($ele);
|
|
499
|
+
luda.dispatch($ele, this._DEACTIVATED_EVENT_TYPE(), detail, deactivateDuration);
|
|
500
|
+
setTimeout(() => {
|
|
501
|
+
if ($ele) {
|
|
502
|
+
return this._removeDeactivatingMark($ele);
|
|
503
|
+
}
|
|
504
|
+
}, deactivateDuration);
|
|
505
|
+
return deactivateDuration;
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
static _handleActivateCancel($ele, detail) {
|
|
509
|
+
if (this._isActivating($ele)) {
|
|
510
|
+
luda.dispatch($ele, this._ACTIVATED_EVENT_TYPE(), detail);
|
|
511
|
+
return this._removeActivatingMark($ele);
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
static _handleDeactivateCancel($ele, detail) {
|
|
516
|
+
if (this._isDeactivating($ele)) {
|
|
517
|
+
luda.dispatch($ele, this._DEACTIVATED_EVENT_TYPE(), detail);
|
|
518
|
+
return this._removeDeactivatingMark($ele);
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
|
|
522
|
+
static _isActivating($ele) {
|
|
523
|
+
return $ele.hasAttribute(this._ACTIVATING_MARK_ATTRIBUTE());
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
static _isDeactivating($ele) {
|
|
527
|
+
return $ele.hasAttribute(this._DEACTIVATING_MARK_ATTRIBUTE());
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
static _isTransitioning($ele) {
|
|
531
|
+
return this._isActivating($ele) || this._isDeactivating($ele);
|
|
532
|
+
}
|
|
533
|
+
|
|
534
|
+
static _getActivatingMark($ele) {
|
|
535
|
+
return $ele.getAttribute(this._ACTIVATING_MARK_ATTRIBUTE());
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
static _getDeactivatingMark($ele) {
|
|
539
|
+
return $ele.getAttribute(this._DEACTIVATING_MARK_ATTRIBUTE());
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
static _removeActivatingMark($ele) {
|
|
543
|
+
return $ele.removeAttribute(this._ACTIVATING_MARK_ATTRIBUTE());
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
static _removeDeactivatingMark($ele) {
|
|
547
|
+
return $ele.removeAttribute(this._DEACTIVATING_MARK_ATTRIBUTE());
|
|
548
|
+
}
|
|
549
|
+
|
|
550
|
+
static _setActivatingMark($ele, value) {
|
|
551
|
+
return $ele.setAttribute(this._ACTIVATING_MARK_ATTRIBUTE(), value);
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
static _setDeactivatingMark($ele, value) {
|
|
555
|
+
return $ele.setAttribute(this._DEACTIVATING_MARK_ATTRIBUTE(), value);
|
|
556
|
+
}
|
|
557
|
+
|
|
558
|
+
static _onEleAdded($ele) {
|
|
559
|
+
return Static._onEleAddedOrRemoved($ele, '_onElementAdded');
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
static _onEleRemoved($ele) {
|
|
563
|
+
return Static._onEleAddedOrRemoved($ele, '_onElementRemoved');
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
static _onEleAddedOrRemoved($ele, action) {
|
|
567
|
+
return Static._Observed.forEach(function(Observed) {
|
|
568
|
+
var $matched;
|
|
569
|
+
if (!Observed[action]) {
|
|
570
|
+
return;
|
|
571
|
+
}
|
|
572
|
+
$matched = luda.$children(Observed._selector, $ele);
|
|
573
|
+
if ($ele.matches(Observed._selector)) {
|
|
574
|
+
$matched.unshift($ele);
|
|
575
|
+
}
|
|
576
|
+
return $matched.forEach(function($target) {
|
|
577
|
+
return Observed[action]($target);
|
|
578
|
+
});
|
|
579
|
+
});
|
|
580
|
+
}
|
|
581
|
+
|
|
582
|
+
static _observe(classObj) {
|
|
583
|
+
if (!Static._observer) {
|
|
584
|
+
Static._observer = luda._observeDom(Static._onEleAdded, Static._onEleRemoved);
|
|
585
|
+
}
|
|
586
|
+
if (classObj._onElementAdded || classObj._onElementRemoved && classObj._selector) {
|
|
587
|
+
if (!Static._Observed.includes(classObj)) {
|
|
588
|
+
return Static._Observed.push(classObj);
|
|
589
|
+
}
|
|
590
|
+
}
|
|
591
|
+
}
|
|
592
|
+
|
|
384
593
|
static _install() {
|
|
385
|
-
var exposed;
|
|
386
|
-
|
|
594
|
+
var exposed, self;
|
|
595
|
+
self = this;
|
|
596
|
+
if (this === Static) {
|
|
387
597
|
return this;
|
|
388
598
|
}
|
|
389
599
|
if (!this.hasOwnProperty('_SELECTORS')) {
|
|
@@ -393,6 +603,9 @@
|
|
|
393
603
|
if (typeof this._init === 'function') {
|
|
394
604
|
exposed = this._init();
|
|
395
605
|
}
|
|
606
|
+
luda.on(luda._DOC_READY, function() {
|
|
607
|
+
return Static._observe(self);
|
|
608
|
+
});
|
|
396
609
|
if (exposed) {
|
|
397
610
|
return exposed;
|
|
398
611
|
} else {
|
|
@@ -401,29 +614,31 @@
|
|
|
401
614
|
}
|
|
402
615
|
|
|
403
616
|
}
|
|
404
|
-
|
|
617
|
+
Static._SCOPE = 'Static';
|
|
618
|
+
|
|
619
|
+
Static._SELECTOR_INVALID_ERROR = '@param selector must be a css selector string';
|
|
405
620
|
|
|
406
|
-
|
|
621
|
+
Static._SELECTORS = [];
|
|
407
622
|
|
|
408
|
-
|
|
623
|
+
Static._Observed = [];
|
|
409
624
|
|
|
410
|
-
|
|
625
|
+
Static._observer = null;
|
|
411
626
|
|
|
412
|
-
|
|
627
|
+
Static._selector = '';
|
|
413
628
|
|
|
414
|
-
return
|
|
629
|
+
return Static;
|
|
415
630
|
|
|
416
631
|
}).call(this));
|
|
417
632
|
|
|
418
633
|
luda((function() {
|
|
419
634
|
var _Class;
|
|
420
635
|
|
|
421
|
-
_Class = class extends luda.
|
|
636
|
+
_Class = class extends luda.Static {
|
|
422
637
|
static _init() {
|
|
423
638
|
var self;
|
|
424
639
|
self = this;
|
|
425
640
|
return luda.on('keydown', function(e) {
|
|
426
|
-
if (self.
|
|
641
|
+
if (!document.documentElement.hasAttribute(self._DISABLED_ATTRIBUTE) && e.keyCode === luda.KEY_ENTER && e.target.matches(self._selector)) {
|
|
427
642
|
e.preventDefault();
|
|
428
643
|
return setTimeout(function() {
|
|
429
644
|
return e.target.click();
|
|
@@ -434,10 +649,12 @@
|
|
|
434
649
|
|
|
435
650
|
};
|
|
436
651
|
|
|
437
|
-
_Class._SCOPE = '
|
|
652
|
+
_Class._SCOPE = 'enter';
|
|
438
653
|
|
|
439
654
|
_Class._SELECTORS = ['input[type=checkbox]', 'input[type=radio]', '[tabindex]'];
|
|
440
655
|
|
|
656
|
+
_Class._DISABLED_ATTRIBUTE = 'data-enter-disabled';
|
|
657
|
+
|
|
441
658
|
return _Class;
|
|
442
659
|
|
|
443
660
|
}).call(this));
|
|
@@ -445,7 +662,11 @@
|
|
|
445
662
|
luda((function() {
|
|
446
663
|
var _Class;
|
|
447
664
|
|
|
448
|
-
_Class = class extends luda.
|
|
665
|
+
_Class = class extends luda.Static {
|
|
666
|
+
static _isActive() {
|
|
667
|
+
return !document.documentElement.hasAttribute(this._DISABLED_ATTRIBUTE);
|
|
668
|
+
}
|
|
669
|
+
|
|
449
670
|
static _removeFocusClassExcept($exception) {
|
|
450
671
|
return Array.from(this._$focus).forEach(($focus) => {
|
|
451
672
|
if ($focus !== $exception) {
|
|
@@ -461,7 +682,7 @@
|
|
|
461
682
|
}
|
|
462
683
|
|
|
463
684
|
static _changeFocusStateOnKeyEvent(e) {
|
|
464
|
-
if (this.
|
|
685
|
+
if (this._isActive()) {
|
|
465
686
|
this._removeFocusClassExcept(e.target);
|
|
466
687
|
return this._addFocusClassExceptHtmlAndBody(e.target);
|
|
467
688
|
}
|
|
@@ -469,7 +690,7 @@
|
|
|
469
690
|
|
|
470
691
|
static _changeFocusStateOnMouseDownEvent(e) {
|
|
471
692
|
var target;
|
|
472
|
-
if (this.
|
|
693
|
+
if (this._isActive()) {
|
|
473
694
|
if (e.target.matches(this._PARENT_FOCUS_CHILDREN_SELECTOR)) {
|
|
474
695
|
target = luda.$parent(this._PARENT_FOCUS_SELECTOR, e.target);
|
|
475
696
|
} else {
|
|
@@ -491,14 +712,14 @@
|
|
|
491
712
|
self = this;
|
|
492
713
|
HTMLElement.prototype.focus = function() {
|
|
493
714
|
focus.apply(this, arguments);
|
|
494
|
-
if (self.
|
|
715
|
+
if (self._isActive() && document.activeElement === this) {
|
|
495
716
|
self._removeFocusClassExcept(this);
|
|
496
717
|
return self._addFocusClassExceptHtmlAndBody(this);
|
|
497
718
|
}
|
|
498
719
|
};
|
|
499
720
|
return HTMLElement.prototype.blur = function() {
|
|
500
721
|
blur.apply(this, arguments);
|
|
501
|
-
if (self.
|
|
722
|
+
if (self._isActive()) {
|
|
502
723
|
return this.classList.remove(self._CSS_CLASS);
|
|
503
724
|
}
|
|
504
725
|
};
|
|
@@ -528,6 +749,8 @@
|
|
|
528
749
|
|
|
529
750
|
_Class._PARENT_FOCUS_CHILDREN_SELECTOR = `${_Class._PARENT_FOCUS_SELECTOR} *`;
|
|
530
751
|
|
|
752
|
+
_Class._DISABLED_ATTRIBUTE = 'data-focus-disabled';
|
|
753
|
+
|
|
531
754
|
_Class._$focus = document.getElementsByClassName(_Class._CSS_CLASS);
|
|
532
755
|
|
|
533
756
|
return _Class;
|
|
@@ -537,7 +760,7 @@
|
|
|
537
760
|
luda((function() {
|
|
538
761
|
var _Class;
|
|
539
762
|
|
|
540
|
-
_Class = class extends luda.
|
|
763
|
+
_Class = class extends luda.Static {
|
|
541
764
|
static _querySameName$radios($radio) {
|
|
542
765
|
var $inputs, selector;
|
|
543
766
|
if ($radio.name) {
|
|
@@ -565,7 +788,7 @@
|
|
|
565
788
|
self = this;
|
|
566
789
|
return luda.on('keydown', function(e) {
|
|
567
790
|
var $next, $prev;
|
|
568
|
-
if (self.
|
|
791
|
+
if (!document.documentElement.hasAttribute(self._DISABLED_ATTRIBUTE) && e.keyCode === luda.KEY_TAB && e.target.nodeName.toUpperCase() === 'INPUT' && e.target.type === 'radio') {
|
|
569
792
|
if (e.shiftKey) {
|
|
570
793
|
if ($prev = self._query$prev$next(e.target).$prev) {
|
|
571
794
|
e.preventDefault();
|
|
@@ -583,18 +806,44 @@
|
|
|
583
806
|
|
|
584
807
|
};
|
|
585
808
|
|
|
586
|
-
_Class._SCOPE = '
|
|
809
|
+
_Class._SCOPE = 'tabulate';
|
|
587
810
|
|
|
588
811
|
_Class._SELECTORS = ['input[type=radio]:not([disabled])'];
|
|
589
812
|
|
|
813
|
+
_Class._DISABLED_ATTRIBUTE = 'data-tabulate-disabled';
|
|
814
|
+
|
|
590
815
|
return _Class;
|
|
591
816
|
|
|
592
817
|
}).call(this));
|
|
593
818
|
|
|
594
|
-
var
|
|
819
|
+
var Factory;
|
|
820
|
+
|
|
821
|
+
luda(Factory = (function() {
|
|
822
|
+
class Factory {
|
|
823
|
+
static _ACTIVATE_EVENT_TYPE() {
|
|
824
|
+
return `${this._SCOPE}:activate`;
|
|
825
|
+
}
|
|
826
|
+
|
|
827
|
+
static _ACTIVATED_EVENT_TYPE() {
|
|
828
|
+
return `${this._SCOPE}:activated`;
|
|
829
|
+
}
|
|
830
|
+
|
|
831
|
+
static _DEACTIVATE_EVENT_TYPE() {
|
|
832
|
+
return `${this._SCOPE}:deactivate`;
|
|
833
|
+
}
|
|
834
|
+
|
|
835
|
+
static _DEACTIVATED_EVENT_TYPE() {
|
|
836
|
+
return `${this._SCOPE}:deactivated`;
|
|
837
|
+
}
|
|
838
|
+
|
|
839
|
+
static _ACTIVATING_MARK_ATTRIBUTE() {
|
|
840
|
+
return `data-${this._SCOPE}-activating`;
|
|
841
|
+
}
|
|
842
|
+
|
|
843
|
+
static _DEACTIVATING_MARK_ATTRIBUTE() {
|
|
844
|
+
return `data-${this._SCOPE}-deactivating`;
|
|
845
|
+
}
|
|
595
846
|
|
|
596
|
-
luda(Component = (function() {
|
|
597
|
-
class Component {
|
|
598
847
|
_hasDescendant(descendant) {
|
|
599
848
|
if (this._children.length && descendant) {
|
|
600
849
|
if (this._children.includes(descendant)) {
|
|
@@ -618,6 +867,94 @@
|
|
|
618
867
|
return this._observer = null;
|
|
619
868
|
}
|
|
620
869
|
|
|
870
|
+
_activatePrevented($ele, detail) {
|
|
871
|
+
var activateEvent;
|
|
872
|
+
activateEvent = luda.dispatch($ele, this.constructor._ACTIVATE_EVENT_TYPE(), detail);
|
|
873
|
+
return activateEvent.defaultPrevented;
|
|
874
|
+
}
|
|
875
|
+
|
|
876
|
+
_deactivatePrevented($ele, detail) {
|
|
877
|
+
var deactivateEvent;
|
|
878
|
+
deactivateEvent = luda.dispatch($ele, this.constructor._DEACTIVATE_EVENT_TYPE(), detail);
|
|
879
|
+
return deactivateEvent.defaultPrevented;
|
|
880
|
+
}
|
|
881
|
+
|
|
882
|
+
_handleActivateEnd($ele, detail) {
|
|
883
|
+
var activateDuration;
|
|
884
|
+
this._setActivatingMark(detail);
|
|
885
|
+
activateDuration = luda.getTransitionDuration($ele);
|
|
886
|
+
luda.dispatch($ele, this.constructor._ACTIVATED_EVENT_TYPE(), detail, activateDuration);
|
|
887
|
+
setTimeout(() => {
|
|
888
|
+
if (this._$component) {
|
|
889
|
+
return this._removeActivatingMark();
|
|
890
|
+
}
|
|
891
|
+
}, activateDuration);
|
|
892
|
+
return activateDuration;
|
|
893
|
+
}
|
|
894
|
+
|
|
895
|
+
_handleDeactivateEnd($ele, detail) {
|
|
896
|
+
var deactivateDuration;
|
|
897
|
+
this._setDeactivatingMark(detail);
|
|
898
|
+
deactivateDuration = luda.getTransitionDuration($ele);
|
|
899
|
+
luda.dispatch($ele, this.constructor._DEACTIVATED_EVENT_TYPE(), detail, deactivateDuration);
|
|
900
|
+
setTimeout(() => {
|
|
901
|
+
if (this._$component) {
|
|
902
|
+
return this._removeDeactivatingMark();
|
|
903
|
+
}
|
|
904
|
+
}, deactivateDuration);
|
|
905
|
+
return deactivateDuration;
|
|
906
|
+
}
|
|
907
|
+
|
|
908
|
+
_handleActivateCancel($ele, detail) {
|
|
909
|
+
if (this._isActivating()) {
|
|
910
|
+
luda.dispatch($ele, this.constructor._ACTIVATED_EVENT_TYPE(), detail);
|
|
911
|
+
return this._removeActivatingMark();
|
|
912
|
+
}
|
|
913
|
+
}
|
|
914
|
+
|
|
915
|
+
_handleDeactivateCancel($ele, detail) {
|
|
916
|
+
if (this._isDeactivating()) {
|
|
917
|
+
luda.dispatch($ele, this.constructor._DEACTIVATED_EVENT_TYPE(), detail);
|
|
918
|
+
return this._removeDeactivatingMark();
|
|
919
|
+
}
|
|
920
|
+
}
|
|
921
|
+
|
|
922
|
+
_isActivating() {
|
|
923
|
+
return this._$component.hasAttribute(this.constructor._ACTIVATING_MARK_ATTRIBUTE());
|
|
924
|
+
}
|
|
925
|
+
|
|
926
|
+
_isDeactivating() {
|
|
927
|
+
return this._$component.hasAttribute(this.constructor._DEACTIVATING_MARK_ATTRIBUTE());
|
|
928
|
+
}
|
|
929
|
+
|
|
930
|
+
_isTransitioning() {
|
|
931
|
+
return this._isActivating() || this._isDeactivating();
|
|
932
|
+
}
|
|
933
|
+
|
|
934
|
+
_getActivatingMark() {
|
|
935
|
+
return this._$component.getAttribute(this.constructor._ACTIVATING_MARK_ATTRIBUTE());
|
|
936
|
+
}
|
|
937
|
+
|
|
938
|
+
_getDeactivatingMark() {
|
|
939
|
+
return this._$component.getAttribute(this.constructor._DEACTIVATING_MARK_ATTRIBUTE());
|
|
940
|
+
}
|
|
941
|
+
|
|
942
|
+
_removeActivatingMark() {
|
|
943
|
+
return this._$component.removeAttribute(this.constructor._ACTIVATING_MARK_ATTRIBUTE());
|
|
944
|
+
}
|
|
945
|
+
|
|
946
|
+
_removeDeactivatingMark() {
|
|
947
|
+
return this._$component.removeAttribute(this.constructor._DEACTIVATING_MARK_ATTRIBUTE());
|
|
948
|
+
}
|
|
949
|
+
|
|
950
|
+
_setActivatingMark(value) {
|
|
951
|
+
return this._$component.setAttribute(this.constructor._ACTIVATING_MARK_ATTRIBUTE(), value);
|
|
952
|
+
}
|
|
953
|
+
|
|
954
|
+
_setDeactivatingMark(value) {
|
|
955
|
+
return this._$component.setAttribute(this.constructor._DEACTIVATING_MARK_ATTRIBUTE(), value);
|
|
956
|
+
}
|
|
957
|
+
|
|
621
958
|
static create($component) {
|
|
622
959
|
var $family, componentIsElementInstance, instance, parent;
|
|
623
960
|
componentIsElementInstance = $component instanceof Element;
|
|
@@ -722,56 +1059,38 @@
|
|
|
722
1059
|
return instance;
|
|
723
1060
|
}
|
|
724
1061
|
|
|
725
|
-
static
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
return $destroies.forEach(function($destroy) {
|
|
741
|
-
return Observed.destroy($destroy);
|
|
742
|
-
});
|
|
743
|
-
}
|
|
744
|
-
});
|
|
745
|
-
}
|
|
746
|
-
});
|
|
747
|
-
return $addedNodes.forEach(function($node) {
|
|
748
|
-
if ($node instanceof Element) {
|
|
749
|
-
return Component._Observed.forEach(function(Observed) {
|
|
750
|
-
var $creates;
|
|
751
|
-
if ($node.matches(Observed._SELECTOR)) {
|
|
752
|
-
return Observed.create($node);
|
|
753
|
-
} else {
|
|
754
|
-
$creates = luda.$children(Observed._SELECTOR, $node);
|
|
755
|
-
return $creates.forEach(function($create) {
|
|
756
|
-
return Observed.create($create);
|
|
757
|
-
});
|
|
758
|
-
}
|
|
759
|
-
});
|
|
760
|
-
}
|
|
761
|
-
});
|
|
762
|
-
});
|
|
1062
|
+
static _onEleAdded($ele) {
|
|
1063
|
+
return Factory._onEleAddedOrRemoved($ele, 'create');
|
|
1064
|
+
}
|
|
1065
|
+
|
|
1066
|
+
static _onEleRemoved($ele) {
|
|
1067
|
+
return Factory._onEleAddedOrRemoved($ele, 'destroy');
|
|
1068
|
+
}
|
|
1069
|
+
|
|
1070
|
+
static _onEleAddedOrRemoved($ele, action) {
|
|
1071
|
+
return Factory._Observed.forEach(function(Observed) {
|
|
1072
|
+
if ($ele.matches(Observed._SELECTOR)) {
|
|
1073
|
+
return Observed[action]($ele);
|
|
1074
|
+
}
|
|
1075
|
+
return luda.$children(Observed._SELECTOR, $ele).forEach(function($child) {
|
|
1076
|
+
return Observed[action]($child);
|
|
763
1077
|
});
|
|
764
|
-
|
|
1078
|
+
});
|
|
1079
|
+
}
|
|
1080
|
+
|
|
1081
|
+
static _observe(classObj) {
|
|
1082
|
+
if (!Factory._observer) {
|
|
1083
|
+
Factory._observer = luda._observeDom(Factory._onEleAdded, Factory._onEleRemoved);
|
|
765
1084
|
}
|
|
766
|
-
if (!
|
|
767
|
-
return
|
|
1085
|
+
if (!Factory._Observed.includes(classObj)) {
|
|
1086
|
+
return Factory._Observed.push(classObj);
|
|
768
1087
|
}
|
|
769
1088
|
}
|
|
770
1089
|
|
|
771
1090
|
static _install() {
|
|
772
1091
|
var exposed, self;
|
|
773
1092
|
self = this;
|
|
774
|
-
if (this ===
|
|
1093
|
+
if (this === Factory) {
|
|
775
1094
|
return this;
|
|
776
1095
|
}
|
|
777
1096
|
if (!(this._SELECTOR || typeof this._SELECTOR !== 'string')) {
|
|
@@ -787,7 +1106,7 @@
|
|
|
787
1106
|
luda.$children(self._SELECTOR).forEach(function($component) {
|
|
788
1107
|
return self.create($component);
|
|
789
1108
|
});
|
|
790
|
-
return
|
|
1109
|
+
return Factory._observe(self);
|
|
791
1110
|
});
|
|
792
1111
|
if (exposed) {
|
|
793
1112
|
return exposed;
|
|
@@ -797,33 +1116,33 @@
|
|
|
797
1116
|
}
|
|
798
1117
|
|
|
799
1118
|
}
|
|
800
|
-
|
|
1119
|
+
Factory._SCOPE = 'Factory';
|
|
801
1120
|
|
|
802
|
-
|
|
1121
|
+
Factory._COMPONENT_NO_SELECTOR_ERROR = 'Extended component must has a css selector';
|
|
803
1122
|
|
|
804
|
-
|
|
1123
|
+
Factory._$COMPONENT_INVALID_ERROR = '@param $component must be an instance of Element';
|
|
805
1124
|
|
|
806
|
-
|
|
1125
|
+
Factory._SELECTOR = '';
|
|
807
1126
|
|
|
808
|
-
|
|
1127
|
+
Factory._instances = [];
|
|
809
1128
|
|
|
810
|
-
|
|
1129
|
+
Factory._Observed = [];
|
|
811
1130
|
|
|
812
|
-
|
|
1131
|
+
Factory._observer = null;
|
|
813
1132
|
|
|
814
|
-
|
|
1133
|
+
Factory._observerConfig = {
|
|
815
1134
|
childList: true,
|
|
816
1135
|
subtree: true
|
|
817
1136
|
};
|
|
818
1137
|
|
|
819
|
-
return
|
|
1138
|
+
return Factory;
|
|
820
1139
|
|
|
821
1140
|
}).call(this));
|
|
822
1141
|
|
|
823
1142
|
luda((function() {
|
|
824
1143
|
var _Class;
|
|
825
1144
|
|
|
826
|
-
_Class = class extends luda.
|
|
1145
|
+
_Class = class extends luda.Factory {
|
|
827
1146
|
_getConfig() {
|
|
828
1147
|
var _isReadonly, _originalTabIndex, readonly;
|
|
829
1148
|
readonly = this._$component.getAttribute(this.constructor._READONLY_ATTRIBUTE);
|
|
@@ -871,31 +1190,77 @@
|
|
|
871
1190
|
luda((function() {
|
|
872
1191
|
var _Class;
|
|
873
1192
|
|
|
874
|
-
_Class = class extends luda.
|
|
875
|
-
static
|
|
1193
|
+
_Class = class extends luda.Static {
|
|
1194
|
+
static activate(name$target) {
|
|
876
1195
|
return this._query$targets(name$target).forEach(($target) => {
|
|
1196
|
+
if ($target.classList.contains(this._ACTIVE_CSS_CLASS)) {
|
|
1197
|
+
return;
|
|
1198
|
+
}
|
|
1199
|
+
if (this._isTransitioning($target)) {
|
|
1200
|
+
return;
|
|
1201
|
+
}
|
|
1202
|
+
if (this._activatePrevented($target)) {
|
|
1203
|
+
return;
|
|
1204
|
+
}
|
|
877
1205
|
$target.classList.add(this._ACTIVE_CSS_CLASS);
|
|
878
|
-
|
|
1206
|
+
this._handleActivateEnd($target);
|
|
1207
|
+
if (this._shouldAutoDeactivate($target)) {
|
|
1208
|
+
return this._delayDeactivate($target);
|
|
1209
|
+
}
|
|
879
1210
|
});
|
|
880
1211
|
}
|
|
881
1212
|
|
|
882
|
-
static
|
|
1213
|
+
static deactivate(name$target) {
|
|
883
1214
|
return this._query$targets(name$target).forEach(($target) => {
|
|
1215
|
+
if (!$target.classList.contains(this._ACTIVE_CSS_CLASS)) {
|
|
1216
|
+
return;
|
|
1217
|
+
}
|
|
1218
|
+
if (this._isTransitioning($target)) {
|
|
1219
|
+
return;
|
|
1220
|
+
}
|
|
1221
|
+
if (this._deactivatePrevented($target)) {
|
|
1222
|
+
return;
|
|
1223
|
+
}
|
|
884
1224
|
$target.classList.remove(this._ACTIVE_CSS_CLASS);
|
|
885
|
-
return
|
|
1225
|
+
return this._handleDeactivateEnd($target);
|
|
886
1226
|
});
|
|
887
1227
|
}
|
|
888
1228
|
|
|
889
1229
|
static toggle(name$target) {
|
|
890
1230
|
return this._query$targets(name$target).forEach(($target) => {
|
|
891
1231
|
if ($target.classList.contains(this._ACTIVE_CSS_CLASS)) {
|
|
892
|
-
return this.
|
|
1232
|
+
return this.deactivate($target);
|
|
893
1233
|
} else {
|
|
894
|
-
return this.
|
|
1234
|
+
return this.activate($target);
|
|
895
1235
|
}
|
|
896
1236
|
});
|
|
897
1237
|
}
|
|
898
1238
|
|
|
1239
|
+
static _onElementAdded($ele) {
|
|
1240
|
+
this._handleActivateCancel($ele);
|
|
1241
|
+
this._handleDeactivateCancel($ele);
|
|
1242
|
+
if (this._shouldAutoDeactivate($ele)) {
|
|
1243
|
+
return this._delayDeactivate($ele);
|
|
1244
|
+
}
|
|
1245
|
+
}
|
|
1246
|
+
|
|
1247
|
+
static _shouldAutoDeactivate($target) {
|
|
1248
|
+
return $target.hasAttribute(this._AUTO_DEACTIVATE_ATTRIBUTE);
|
|
1249
|
+
}
|
|
1250
|
+
|
|
1251
|
+
static _delayDeactivate($target) {
|
|
1252
|
+
var delay;
|
|
1253
|
+
delay = parseInt($target.getAttribute(this._AUTO_DEACTIVATE_ATTRIBUTE), 10);
|
|
1254
|
+
if (!delay) {
|
|
1255
|
+
delay = this._AUTO_DEACTIVATE_DURATION;
|
|
1256
|
+
}
|
|
1257
|
+
return setTimeout(() => {
|
|
1258
|
+
if ($target) {
|
|
1259
|
+
return this.deactivate($target);
|
|
1260
|
+
}
|
|
1261
|
+
}, delay);
|
|
1262
|
+
}
|
|
1263
|
+
|
|
899
1264
|
static _query$targets(name$target) {
|
|
900
1265
|
if (name$target instanceof Element) {
|
|
901
1266
|
return [name$target];
|
|
@@ -905,9 +1270,17 @@
|
|
|
905
1270
|
}
|
|
906
1271
|
|
|
907
1272
|
static _init() {
|
|
908
|
-
var self;
|
|
1273
|
+
var clickEventSelector, self;
|
|
909
1274
|
self = this;
|
|
910
|
-
|
|
1275
|
+
clickEventSelector = `[${this._TOGGLE_FOR_ATTRIBUTE}],[${this._TOGGLE_ATTRIBUTE}]`;
|
|
1276
|
+
luda.on(luda._DOC_READY, function() {
|
|
1277
|
+
return luda.$children(self._selector).forEach(function($target) {
|
|
1278
|
+
if (self._shouldAutoDeactivate($target)) {
|
|
1279
|
+
return self._delayDeactivate($target);
|
|
1280
|
+
}
|
|
1281
|
+
});
|
|
1282
|
+
});
|
|
1283
|
+
return luda.on('click', clickEventSelector, function(e) {
|
|
911
1284
|
var toggleChecked;
|
|
912
1285
|
toggleChecked = false;
|
|
913
1286
|
return luda.eventPath(e).some(function($path) {
|
|
@@ -929,7 +1302,7 @@
|
|
|
929
1302
|
return toggleChecked = true;
|
|
930
1303
|
}
|
|
931
1304
|
}
|
|
932
|
-
} else if ($path.hasAttribute(self.
|
|
1305
|
+
} else if ($path.hasAttribute(self._TOGGLE_DISABLED_ATTRIBUTE)) {
|
|
933
1306
|
return toggleChecked = true;
|
|
934
1307
|
}
|
|
935
1308
|
}
|
|
@@ -947,15 +1320,15 @@
|
|
|
947
1320
|
|
|
948
1321
|
_Class._TOGGLE_FOR_ATTRIBUTE = 'data-toggle-for';
|
|
949
1322
|
|
|
950
|
-
_Class.
|
|
1323
|
+
_Class._TOGGLE_DISABLED_ATTRIBUTE = 'data-toggle-disabled';
|
|
951
1324
|
|
|
952
|
-
_Class.
|
|
1325
|
+
_Class._AUTO_DEACTIVATE_ATTRIBUTE = 'data-toggle-auto-deactivate';
|
|
953
1326
|
|
|
954
|
-
_Class.
|
|
1327
|
+
_Class._AUTO_DEACTIVATE_DURATION = 3000;
|
|
955
1328
|
|
|
956
|
-
_Class.
|
|
1329
|
+
_Class._ACTIVE_CSS_CLASS = 'toggle-active';
|
|
957
1330
|
|
|
958
|
-
_Class.
|
|
1331
|
+
_Class._SELECTORS = [`[${_Class._TOGGLE_TARGET_ATTRIBUTE}]`];
|
|
959
1332
|
|
|
960
1333
|
return _Class;
|
|
961
1334
|
|
|
@@ -964,7 +1337,12 @@
|
|
|
964
1337
|
luda((function() {
|
|
965
1338
|
var _Class;
|
|
966
1339
|
|
|
967
|
-
_Class = class extends luda.
|
|
1340
|
+
_Class = class extends luda.Factory {
|
|
1341
|
+
reset() {
|
|
1342
|
+
this._$file.value = '';
|
|
1343
|
+
return this._$simulator.value = '';
|
|
1344
|
+
}
|
|
1345
|
+
|
|
968
1346
|
_getConfig() {
|
|
969
1347
|
var _$file, _$simulator;
|
|
970
1348
|
_$file = luda.$child(this.constructor._FILE_SELECTOR, this._$component);
|
|
@@ -1016,6 +1394,10 @@
|
|
|
1016
1394
|
}
|
|
1017
1395
|
}
|
|
1018
1396
|
|
|
1397
|
+
static reset($file) {
|
|
1398
|
+
return this.query($file).reset();
|
|
1399
|
+
}
|
|
1400
|
+
|
|
1019
1401
|
static _init() {
|
|
1020
1402
|
var self;
|
|
1021
1403
|
self = this;
|
|
@@ -1057,7 +1439,7 @@
|
|
|
1057
1439
|
luda((function() {
|
|
1058
1440
|
var _Class;
|
|
1059
1441
|
|
|
1060
|
-
_Class = class extends luda.
|
|
1442
|
+
_Class = class extends luda.Factory {
|
|
1061
1443
|
select(indexOrIndexArray) {
|
|
1062
1444
|
var selectedIndexes;
|
|
1063
1445
|
if (this._$select.multiple) {
|
|
@@ -1073,7 +1455,7 @@
|
|
|
1073
1455
|
});
|
|
1074
1456
|
return this._markSelectedOption();
|
|
1075
1457
|
} else {
|
|
1076
|
-
this._$select.selectedIndex =
|
|
1458
|
+
this._$select.selectedIndex = indexOrIndexArray;
|
|
1077
1459
|
this._setSingleSelectSimulatorValue();
|
|
1078
1460
|
return this._markSelectedOption();
|
|
1079
1461
|
}
|
|
@@ -1208,6 +1590,10 @@
|
|
|
1208
1590
|
}
|
|
1209
1591
|
}
|
|
1210
1592
|
|
|
1593
|
+
static select($select, indexOrIndexArray) {
|
|
1594
|
+
return this.query($select).select(indexOrIndexArray);
|
|
1595
|
+
}
|
|
1596
|
+
|
|
1211
1597
|
static _init() {
|
|
1212
1598
|
var self;
|
|
1213
1599
|
self = this;
|
|
@@ -1258,55 +1644,58 @@
|
|
|
1258
1644
|
luda((function() {
|
|
1259
1645
|
var _Class;
|
|
1260
1646
|
|
|
1261
|
-
_Class = class extends luda.
|
|
1647
|
+
_Class = class extends luda.Factory {
|
|
1262
1648
|
|
|
1263
1649
|
// public
|
|
1264
|
-
|
|
1265
|
-
var action,
|
|
1266
|
-
if (this._$items.length && !this.
|
|
1267
|
-
|
|
1268
|
-
if ((index != null) && index !== this._activeIndex && (0 <= index && index <= this._$items.length - 1)) {
|
|
1269
|
-
this._transiting = true;
|
|
1650
|
+
activate(index) {
|
|
1651
|
+
var action, activatedIndex;
|
|
1652
|
+
if (this._$items.length && !this._isTransitioning()) {
|
|
1653
|
+
activatedIndex = this._activeIndex;
|
|
1654
|
+
if ((index != null) && index !== this._activeIndex && (0 <= index && index <= this._$items.length - 1) && this._canTransition(index, activatedIndex)) {
|
|
1270
1655
|
this._activeIndex = index;
|
|
1271
|
-
action = index <
|
|
1272
|
-
return this[action](
|
|
1656
|
+
action = index < activatedIndex ? '_slidePrev' : '_slideNext';
|
|
1657
|
+
return this[action](activatedIndex);
|
|
1273
1658
|
}
|
|
1274
1659
|
}
|
|
1275
1660
|
}
|
|
1276
1661
|
|
|
1277
1662
|
next() {
|
|
1278
|
-
var
|
|
1279
|
-
if (this._$items.length && !this.
|
|
1280
|
-
|
|
1281
|
-
index =
|
|
1663
|
+
var activatedIndex, index;
|
|
1664
|
+
if (this._$items.length && !this._isTransitioning()) {
|
|
1665
|
+
activatedIndex = this._activeIndex;
|
|
1666
|
+
index = activatedIndex + 1;
|
|
1282
1667
|
if (index > this._$items.length - 1) {
|
|
1283
1668
|
if (!this._wrap) {
|
|
1284
1669
|
return;
|
|
1285
1670
|
}
|
|
1286
1671
|
index = 0;
|
|
1287
1672
|
}
|
|
1288
|
-
this.
|
|
1673
|
+
if (!this._canTransition(index, activatedIndex)) {
|
|
1674
|
+
return;
|
|
1675
|
+
}
|
|
1289
1676
|
this._activeIndex = index;
|
|
1290
|
-
this._slideNext(
|
|
1677
|
+
this._slideNext(activatedIndex);
|
|
1291
1678
|
this._playTimeStamp = Date.now();
|
|
1292
1679
|
return this._pausedRemainTime = this._interval;
|
|
1293
1680
|
}
|
|
1294
1681
|
}
|
|
1295
1682
|
|
|
1296
1683
|
prev() {
|
|
1297
|
-
var
|
|
1298
|
-
if (this._$items.length && !this.
|
|
1299
|
-
|
|
1300
|
-
index =
|
|
1684
|
+
var activatedIndex, index;
|
|
1685
|
+
if (this._$items.length && !this._isTransitioning()) {
|
|
1686
|
+
activatedIndex = this._activeIndex;
|
|
1687
|
+
index = activatedIndex - 1;
|
|
1301
1688
|
if (index < 0) {
|
|
1302
1689
|
if (!this._wrap) {
|
|
1303
1690
|
return;
|
|
1304
1691
|
}
|
|
1305
1692
|
index = this._$items.length - 1;
|
|
1306
1693
|
}
|
|
1307
|
-
this.
|
|
1694
|
+
if (!this._canTransition(index, activatedIndex)) {
|
|
1695
|
+
return;
|
|
1696
|
+
}
|
|
1308
1697
|
this._activeIndex = index;
|
|
1309
|
-
this._slidePrev(
|
|
1698
|
+
this._slidePrev(activatedIndex);
|
|
1310
1699
|
this._playTimeStamp = Date.now();
|
|
1311
1700
|
return this._pausedRemainTime = this._interval;
|
|
1312
1701
|
}
|
|
@@ -1357,11 +1746,11 @@
|
|
|
1357
1746
|
|
|
1358
1747
|
_constructor() {
|
|
1359
1748
|
({_$items: this._$items, _$indicators: this._$indicators, _$prevControl: this._$prevControl, _$nextControl: this._$nextControl, _activeIndex: this._activeIndex, _interval: this._interval, _wrap: this._wrap} = this._getConfig());
|
|
1360
|
-
this._transiting = false;
|
|
1361
1749
|
this._intervaling = null;
|
|
1362
1750
|
this._playTimeStamp = 0;
|
|
1363
1751
|
this._pausedRemainTime = this._interval;
|
|
1364
1752
|
this._layout();
|
|
1753
|
+
this._handleTransitionCancel();
|
|
1365
1754
|
return this.play();
|
|
1366
1755
|
}
|
|
1367
1756
|
|
|
@@ -1388,7 +1777,6 @@
|
|
|
1388
1777
|
$item.classList.remove(this.constructor._ITEM_NEXT_CSS_CLASS);
|
|
1389
1778
|
$item.classList.remove(this.constructor._ITEM_ACTIVE_CSS_CLASS);
|
|
1390
1779
|
} else {
|
|
1391
|
-
luda.dispatch($item, this.constructor._ACTIVED_EVENT_TYPE, index);
|
|
1392
1780
|
$item.classList.add(this.constructor._ITEM_ACTIVE_CSS_CLASS);
|
|
1393
1781
|
$item.classList.remove(this.constructor._ITEM_NEXT_CSS_CLASS);
|
|
1394
1782
|
$item.classList.remove(this.constructor._ITEM_PREV_CSS_CLASS);
|
|
@@ -1400,11 +1788,11 @@
|
|
|
1400
1788
|
return this._setDirectionControlState();
|
|
1401
1789
|
}
|
|
1402
1790
|
|
|
1403
|
-
_slideNext(
|
|
1404
|
-
var $item;
|
|
1791
|
+
_slideNext(activatedIndex) {
|
|
1792
|
+
var $activatedItem, $item;
|
|
1405
1793
|
if (this._$items.length > 1) {
|
|
1406
1794
|
$item = this._$items[this._activeIndex];
|
|
1407
|
-
|
|
1795
|
+
$activatedItem = this._$items[activatedIndex];
|
|
1408
1796
|
$item.style.transition = 'none';
|
|
1409
1797
|
$item.classList.remove(this.constructor._ITEM_PREV_CSS_CLASS);
|
|
1410
1798
|
$item.classList.add(this.constructor._ITEM_NEXT_CSS_CLASS);
|
|
@@ -1412,19 +1800,19 @@
|
|
|
1412
1800
|
$item.style.transition = '';
|
|
1413
1801
|
$item.classList.remove(this.constructor._ITEM_NEXT_CSS_CLASS);
|
|
1414
1802
|
$item.classList.add(this.constructor._ITEM_ACTIVE_CSS_CLASS);
|
|
1415
|
-
|
|
1416
|
-
$
|
|
1417
|
-
|
|
1803
|
+
$activatedItem.classList.remove(this.constructor._ITEM_ACTIVE_CSS_CLASS);
|
|
1804
|
+
$activatedItem.classList.add(this.constructor._ITEM_PREV_CSS_CLASS);
|
|
1805
|
+
this._handleTransitionEnd(this._activeIndex, activatedIndex);
|
|
1418
1806
|
this._setIndicatorsState();
|
|
1419
1807
|
return this._setDirectionControlState();
|
|
1420
1808
|
}
|
|
1421
1809
|
}
|
|
1422
1810
|
|
|
1423
|
-
_slidePrev(
|
|
1424
|
-
var $item;
|
|
1811
|
+
_slidePrev(activatedIndex) {
|
|
1812
|
+
var $activatedItem, $item;
|
|
1425
1813
|
if (this._$items.length > 1) {
|
|
1426
1814
|
$item = this._$items[this._activeIndex];
|
|
1427
|
-
|
|
1815
|
+
$activatedItem = this._$items[activatedIndex];
|
|
1428
1816
|
$item.style.transition = 'none';
|
|
1429
1817
|
$item.classList.remove(this.constructor._ITEM_NEXT_CSS_CLASS);
|
|
1430
1818
|
$item.classList.add(this.constructor._ITEM_PREV_CSS_CLASS);
|
|
@@ -1432,14 +1820,36 @@
|
|
|
1432
1820
|
$item.style.transition = '';
|
|
1433
1821
|
$item.classList.remove(this.constructor._ITEM_PREV_CSS_CLASS);
|
|
1434
1822
|
$item.classList.add(this.constructor._ITEM_ACTIVE_CSS_CLASS);
|
|
1435
|
-
|
|
1436
|
-
$
|
|
1437
|
-
|
|
1823
|
+
$activatedItem.classList.remove(this.constructor._ITEM_ACTIVE_CSS_CLASS);
|
|
1824
|
+
$activatedItem.classList.add(this.constructor._ITEM_NEXT_CSS_CLASS);
|
|
1825
|
+
this._handleTransitionEnd(this._activeIndex, activatedIndex);
|
|
1438
1826
|
this._setIndicatorsState();
|
|
1439
1827
|
return this._setDirectionControlState();
|
|
1440
1828
|
}
|
|
1441
1829
|
}
|
|
1442
1830
|
|
|
1831
|
+
_canTransition(activeIndex, activatedIndex) {
|
|
1832
|
+
return !this._activatePrevented(this._$items[activeIndex], activeIndex) && !this._deactivatePrevented(this._$items[activatedIndex], activatedIndex);
|
|
1833
|
+
}
|
|
1834
|
+
|
|
1835
|
+
_handleTransitionEnd(activeIndex, activatedIndex) {
|
|
1836
|
+
var activateDuration, deactivateDuration;
|
|
1837
|
+
activateDuration = this._handleActivateEnd(this._$items[activeIndex], activeIndex);
|
|
1838
|
+
return deactivateDuration = this._handleDeactivateEnd(this._$items[activatedIndex], activatedIndex);
|
|
1839
|
+
}
|
|
1840
|
+
|
|
1841
|
+
_handleTransitionCancel() {
|
|
1842
|
+
var activatedIndex, index;
|
|
1843
|
+
if (this._isActivating()) {
|
|
1844
|
+
index = parseInt(this._getActivatingMark(), 10);
|
|
1845
|
+
this._handleActivateCancel(this._$items[index], index);
|
|
1846
|
+
}
|
|
1847
|
+
if (this._isDeactivating()) {
|
|
1848
|
+
activatedIndex = parseInt(this._getDeactivatingMark(), 10);
|
|
1849
|
+
return this._handleDeactivateCancel(this._$items[activatedIndex], activatedIndex);
|
|
1850
|
+
}
|
|
1851
|
+
}
|
|
1852
|
+
|
|
1443
1853
|
_setIndicatorsState() {
|
|
1444
1854
|
return this._$indicators.forEach(($indicator, index) => {
|
|
1445
1855
|
return $indicator.disabled = index === this._activeIndex;
|
|
@@ -1458,26 +1868,34 @@
|
|
|
1458
1868
|
}
|
|
1459
1869
|
}
|
|
1460
1870
|
|
|
1461
|
-
|
|
1871
|
+
static activate($carousel, index) {
|
|
1872
|
+
return this.query($carousel).activate(index);
|
|
1873
|
+
}
|
|
1874
|
+
|
|
1875
|
+
static next($carousel) {
|
|
1876
|
+
return this.query($carousel).next();
|
|
1877
|
+
}
|
|
1878
|
+
|
|
1879
|
+
static prev($carousel) {
|
|
1880
|
+
return this.query($carousel).prev();
|
|
1881
|
+
}
|
|
1882
|
+
|
|
1883
|
+
static pause($carousel) {
|
|
1884
|
+
return this.query($carousel).pause();
|
|
1885
|
+
}
|
|
1886
|
+
|
|
1887
|
+
static play($carousel) {
|
|
1888
|
+
return this.query($carousel).play();
|
|
1889
|
+
}
|
|
1890
|
+
|
|
1462
1891
|
// static private
|
|
1463
1892
|
static _init() {
|
|
1464
1893
|
var self;
|
|
1465
1894
|
self = this;
|
|
1466
|
-
luda.on('transitionend', this._ITEMS_SELECTOR, function(e) {
|
|
1467
|
-
var index, instance;
|
|
1468
|
-
instance = self.query(luda.$parent(self._SELECTOR, this));
|
|
1469
|
-
instance._transiting = false;
|
|
1470
|
-
index = instance._$items.indexOf(this);
|
|
1471
|
-
if (this.classList.contains(self._ITEM_ACTIVE_CSS_CLASS)) {
|
|
1472
|
-
return luda.dispatch(this, self._ACTIVED_EVENT_TYPE, index);
|
|
1473
|
-
} else {
|
|
1474
|
-
return luda.dispatch(this, self._DEACTIVED_EVENT_TYPE, index);
|
|
1475
|
-
}
|
|
1476
|
-
});
|
|
1477
1895
|
luda.on('click', this._INDICATORS_SELECTOR, function(e) {
|
|
1478
1896
|
var instance;
|
|
1479
1897
|
instance = self.query(luda.$parent(self._SELECTOR, this));
|
|
1480
|
-
return instance.
|
|
1898
|
+
return instance.activate(instance._$indicators.indexOf(this));
|
|
1481
1899
|
});
|
|
1482
1900
|
luda.on('touchstart', this._SELECTOR, function(e) {
|
|
1483
1901
|
return self.query(this).pause();
|
|
@@ -1525,6 +1943,8 @@
|
|
|
1525
1943
|
|
|
1526
1944
|
_Class._WRAP_ATTRIBUTE = 'data-carousel-wrap';
|
|
1527
1945
|
|
|
1946
|
+
_Class._ACTIVATED_INDEX_ATTRIBUTE = 'data-carousel-activated-index';
|
|
1947
|
+
|
|
1528
1948
|
_Class._ITEM_ACTIVE_CSS_CLASS = 'carousel-item-active';
|
|
1529
1949
|
|
|
1530
1950
|
_Class._ITEM_NEXT_CSS_CLASS = 'carousel-item-next';
|
|
@@ -1539,14 +1959,6 @@
|
|
|
1539
1959
|
|
|
1540
1960
|
_Class._FALSE = 'false';
|
|
1541
1961
|
|
|
1542
|
-
_Class._ACTIVE_EVENT_TYPE = `${_Class._SCOPE}:active`;
|
|
1543
|
-
|
|
1544
|
-
_Class._ACTIVED_EVENT_TYPE = `${_Class._SCOPE}:actived`;
|
|
1545
|
-
|
|
1546
|
-
_Class._DEACTIVE_EVENT_TYPE = `${_Class._SCOPE}:deactive`;
|
|
1547
|
-
|
|
1548
|
-
_Class._DEACTIVED_EVENT_TYPE = `${_Class._SCOPE}:deactived`;
|
|
1549
|
-
|
|
1550
1962
|
_Class._observerConfig = {
|
|
1551
1963
|
childList: true,
|
|
1552
1964
|
attributes: true,
|
|
@@ -1561,47 +1973,55 @@
|
|
|
1561
1973
|
luda((function() {
|
|
1562
1974
|
var _Class;
|
|
1563
1975
|
|
|
1564
|
-
_Class = class extends luda.
|
|
1565
|
-
|
|
1976
|
+
_Class = class extends luda.Factory {
|
|
1977
|
+
activate() {
|
|
1566
1978
|
var ref;
|
|
1567
|
-
if (
|
|
1568
|
-
|
|
1569
|
-
this.constructor._$focused.push(document.activeElement);
|
|
1570
|
-
if ((ref = this._parent) != null) {
|
|
1571
|
-
ref.active();
|
|
1572
|
-
}
|
|
1573
|
-
return luda.dispatch(this._$component, this.constructor._ACTIVED_EVENT_TYPE);
|
|
1979
|
+
if (this._isActive() || this._isTransitioning()) {
|
|
1980
|
+
return;
|
|
1574
1981
|
}
|
|
1982
|
+
if (this._activatePrevented(this._$menu)) {
|
|
1983
|
+
return;
|
|
1984
|
+
}
|
|
1985
|
+
this._$component.classList.add(this.constructor._ACTIVE_CSS_CLASS);
|
|
1986
|
+
this.constructor._$focused.push(document.activeElement);
|
|
1987
|
+
if ((ref = this._parent) != null) {
|
|
1988
|
+
ref.activate();
|
|
1989
|
+
}
|
|
1990
|
+
return this._handleActivateEnd(this._$menu);
|
|
1575
1991
|
}
|
|
1576
1992
|
|
|
1577
|
-
|
|
1993
|
+
deactivate(focus) {
|
|
1578
1994
|
var ref;
|
|
1579
|
-
if (this.
|
|
1580
|
-
|
|
1581
|
-
|
|
1582
|
-
|
|
1583
|
-
|
|
1584
|
-
|
|
1585
|
-
|
|
1586
|
-
|
|
1587
|
-
|
|
1995
|
+
if (!(this._isActive() && !this._isTransitioning())) {
|
|
1996
|
+
return;
|
|
1997
|
+
}
|
|
1998
|
+
if (this._deactivatePrevented(this._$menu)) {
|
|
1999
|
+
return;
|
|
2000
|
+
}
|
|
2001
|
+
this._$component.classList.remove(this.constructor._ACTIVE_CSS_CLASS);
|
|
2002
|
+
this._children.forEach(function(child) {
|
|
2003
|
+
return child.deactivate();
|
|
2004
|
+
});
|
|
2005
|
+
if (focus) {
|
|
2006
|
+
if ((ref = this.constructor._$focused[this.constructor._$focused.length - 1]) != null) {
|
|
2007
|
+
ref.focus();
|
|
1588
2008
|
}
|
|
1589
|
-
this.constructor._$focused.splice(this.constructor._$focused.length - 1, 1);
|
|
1590
|
-
return luda.dispatch(this._$component, this.constructor._DEACTIVED_EVENT_TYPE);
|
|
1591
2009
|
}
|
|
2010
|
+
this.constructor._$focused.splice(this.constructor._$focused.length - 1, 1);
|
|
2011
|
+
return this._handleDeactivateEnd(this._$menu);
|
|
1592
2012
|
}
|
|
1593
2013
|
|
|
1594
2014
|
toggle(focus) {
|
|
1595
|
-
if (this.
|
|
1596
|
-
return this.
|
|
2015
|
+
if (this._isActive()) {
|
|
2016
|
+
return this.deactivate(focus);
|
|
1597
2017
|
} else {
|
|
1598
|
-
return this.
|
|
2018
|
+
return this.activate();
|
|
1599
2019
|
}
|
|
1600
2020
|
}
|
|
1601
2021
|
|
|
1602
|
-
|
|
2022
|
+
_prev() {
|
|
1603
2023
|
var focusIndex;
|
|
1604
|
-
if (this._$items.length && this.
|
|
2024
|
+
if (this._$items.length && this._isActive()) {
|
|
1605
2025
|
focusIndex = this._$items.indexOf(document.activeElement) - 1;
|
|
1606
2026
|
if (focusIndex < 0) {
|
|
1607
2027
|
focusIndex = 0;
|
|
@@ -1610,9 +2030,9 @@
|
|
|
1610
2030
|
}
|
|
1611
2031
|
}
|
|
1612
2032
|
|
|
1613
|
-
|
|
2033
|
+
_next() {
|
|
1614
2034
|
var focusIndex;
|
|
1615
|
-
if (this._$items.length && this.
|
|
2035
|
+
if (this._$items.length && this._isActive()) {
|
|
1616
2036
|
focusIndex = this._$items.indexOf(document.activeElement) + 1;
|
|
1617
2037
|
if (focusIndex > this._$items.length - 1) {
|
|
1618
2038
|
focusIndex = this._$items.length - 1;
|
|
@@ -1628,41 +2048,55 @@
|
|
|
1628
2048
|
_$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));
|
|
1629
2049
|
_$items = luda.$unnested(this.constructor._ITEMS_SELECTOR, _$menu, this.constructor._MENU_SELECTOR);
|
|
1630
2050
|
_isStandalone = this._$component.hasAttribute(this.constructor._STANDALONE_ATTRIBUTE);
|
|
1631
|
-
return {_$items, _$switches, _$noneSwitches, _isStandalone};
|
|
2051
|
+
return {_$menu, _$items, _$switches, _$noneSwitches, _isStandalone};
|
|
1632
2052
|
}
|
|
1633
2053
|
|
|
1634
2054
|
_constructor() {
|
|
1635
|
-
|
|
2055
|
+
this._onMutations();
|
|
2056
|
+
this._handleActivateCancel(this._$menu);
|
|
2057
|
+
return this._handleDeactivateCancel(this._$menu);
|
|
1636
2058
|
}
|
|
1637
2059
|
|
|
1638
2060
|
_onMutations(mutations) {
|
|
1639
|
-
return this.
|
|
2061
|
+
return ({_$menu: this._$menu, _$items: this._$items, _$switches: this._$switches, _$noneSwitches: this._$noneSwitches, _isStandalone: this._isStandalone} = this._getConfig());
|
|
1640
2062
|
}
|
|
1641
2063
|
|
|
1642
|
-
|
|
2064
|
+
_isActive() {
|
|
1643
2065
|
return this._$component.classList.contains(this.constructor._ACTIVE_CSS_CLASS);
|
|
1644
2066
|
}
|
|
1645
2067
|
|
|
1646
|
-
|
|
2068
|
+
_deactivateChildrenExcept(exceptions) {
|
|
1647
2069
|
if (exceptions && !(exceptions instanceof Array)) {
|
|
1648
2070
|
exceptions = [exceptions];
|
|
1649
2071
|
}
|
|
1650
2072
|
if (exceptions) {
|
|
1651
2073
|
return this._children.forEach(function(child) {
|
|
1652
|
-
if (child.
|
|
1653
|
-
return child.
|
|
2074
|
+
if (child._isActive() && !exceptions.includes(child)) {
|
|
2075
|
+
return child.deactivate();
|
|
1654
2076
|
}
|
|
1655
2077
|
});
|
|
1656
2078
|
} else {
|
|
1657
2079
|
return this._children.forEach(function(child) {
|
|
1658
|
-
if (child.
|
|
1659
|
-
return child.
|
|
2080
|
+
if (child._isActive()) {
|
|
2081
|
+
return child.deactivate();
|
|
1660
2082
|
}
|
|
1661
2083
|
});
|
|
1662
2084
|
}
|
|
1663
2085
|
}
|
|
1664
2086
|
|
|
1665
|
-
static
|
|
2087
|
+
static activate($dropdown) {
|
|
2088
|
+
return this.query($dropdown).activate();
|
|
2089
|
+
}
|
|
2090
|
+
|
|
2091
|
+
static deactivate($dropdown, focus) {
|
|
2092
|
+
return this.query($dropdown).deactivate(focus);
|
|
2093
|
+
}
|
|
2094
|
+
|
|
2095
|
+
static toggle($dropdown, focus) {
|
|
2096
|
+
return this.query($dropdown).toggle(focus);
|
|
2097
|
+
}
|
|
2098
|
+
|
|
2099
|
+
static deactivateExcept(instances$dropdowns) {
|
|
1666
2100
|
var exceptions;
|
|
1667
2101
|
exceptions = [];
|
|
1668
2102
|
if (instances$dropdowns && !(instances$dropdowns instanceof Array)) {
|
|
@@ -1683,14 +2117,14 @@
|
|
|
1683
2117
|
instanceHasntExceptionChild = exceptions.every(function(exception) {
|
|
1684
2118
|
return !instance._hasDescendant(exception);
|
|
1685
2119
|
});
|
|
1686
|
-
if (instance.
|
|
1687
|
-
return instance.
|
|
2120
|
+
if (instance._isActive() && instanceIsntInExceptions && instanceHasntExceptionChild) {
|
|
2121
|
+
return instance.deactivate();
|
|
1688
2122
|
}
|
|
1689
2123
|
});
|
|
1690
2124
|
} else {
|
|
1691
2125
|
return this._instances.forEach(function(instance) {
|
|
1692
|
-
if (instance.
|
|
1693
|
-
return instance.
|
|
2126
|
+
if (instance._isActive()) {
|
|
2127
|
+
return instance.deactivate();
|
|
1694
2128
|
}
|
|
1695
2129
|
});
|
|
1696
2130
|
}
|
|
@@ -1708,17 +2142,17 @@
|
|
|
1708
2142
|
var self;
|
|
1709
2143
|
self = this;
|
|
1710
2144
|
luda.onOpposite('click', this._SELECTOR, function(e) {
|
|
1711
|
-
return self.
|
|
2145
|
+
return self.deactivateExcept(self._standaloneInstances());
|
|
1712
2146
|
});
|
|
1713
2147
|
luda.on('click', this._SELECTOR, function(e) {
|
|
1714
2148
|
var focus, instance, toggleChecked;
|
|
1715
2149
|
if (instance = self.query(this)) {
|
|
1716
2150
|
toggleChecked = false;
|
|
1717
2151
|
focus = !e.detail;
|
|
1718
|
-
self.
|
|
1719
|
-
instance.
|
|
2152
|
+
self.deactivateExcept(self._standaloneInstances().concat(instance));
|
|
2153
|
+
instance._deactivateChildrenExcept();
|
|
1720
2154
|
if (instance._parent) {
|
|
1721
|
-
instance._parent.
|
|
2155
|
+
instance._parent._deactivateChildrenExcept(instance);
|
|
1722
2156
|
}
|
|
1723
2157
|
if (instance._$switches.length || instance._$noneSwitches.length) {
|
|
1724
2158
|
luda.eventPath(e).some(function($path) {
|
|
@@ -1736,23 +2170,23 @@
|
|
|
1736
2170
|
}
|
|
1737
2171
|
});
|
|
1738
2172
|
luda.onOpposite('keyup', this._SELECTOR, function(e) {
|
|
1739
|
-
return self.
|
|
2173
|
+
return self.deactivateExcept();
|
|
1740
2174
|
});
|
|
1741
2175
|
luda.on('keyup', this._SELECTOR, function(e) {
|
|
1742
2176
|
var instance;
|
|
1743
2177
|
if (e.keyCode === luda.KEY_TAB && (instance = self.query(this))) {
|
|
1744
|
-
self.
|
|
1745
|
-
return instance.
|
|
2178
|
+
self.deactivateExcept(instance);
|
|
2179
|
+
return instance.activate();
|
|
1746
2180
|
}
|
|
1747
2181
|
});
|
|
1748
2182
|
luda.on('keydown', this._SELECTOR, function(e) {
|
|
1749
2183
|
var instance, ref;
|
|
1750
2184
|
if (e.keyCode === luda.KEY_ESC && (instance = self.query(this))) {
|
|
1751
2185
|
e.preventDefault();
|
|
1752
|
-
if (instance.
|
|
1753
|
-
return instance.
|
|
2186
|
+
if (instance._isActive()) {
|
|
2187
|
+
return instance.deactivate(true);
|
|
1754
2188
|
} else {
|
|
1755
|
-
return (ref = instance._parent) != null ? ref.
|
|
2189
|
+
return (ref = instance._parent) != null ? ref.deactivate(true) : void 0;
|
|
1756
2190
|
}
|
|
1757
2191
|
}
|
|
1758
2192
|
});
|
|
@@ -1760,17 +2194,17 @@
|
|
|
1760
2194
|
var instance, ref, ref1;
|
|
1761
2195
|
if ([luda.KEY_LEFT, luda.KEY_UP].includes(e.keyCode) && (instance = self.query(this))) {
|
|
1762
2196
|
e.preventDefault();
|
|
1763
|
-
if (instance.
|
|
1764
|
-
return instance.
|
|
2197
|
+
if (instance._isActive()) {
|
|
2198
|
+
return instance._prev();
|
|
1765
2199
|
} else {
|
|
1766
|
-
return (ref = instance._parent) != null ? ref.
|
|
2200
|
+
return (ref = instance._parent) != null ? ref._prev() : void 0;
|
|
1767
2201
|
}
|
|
1768
2202
|
} else if ([luda.KEY_RIGHT, luda.KEY_DOWN].includes(e.keyCode) && (instance = self.query(this))) {
|
|
1769
2203
|
e.preventDefault();
|
|
1770
|
-
if (instance.
|
|
1771
|
-
return instance.
|
|
2204
|
+
if (instance._isActive()) {
|
|
2205
|
+
return instance._next();
|
|
1772
2206
|
} else {
|
|
1773
|
-
return (ref1 = instance._parent) != null ? ref1.
|
|
2207
|
+
return (ref1 = instance._parent) != null ? ref1._next() : void 0;
|
|
1774
2208
|
}
|
|
1775
2209
|
}
|
|
1776
2210
|
});
|
|
@@ -1788,25 +2222,21 @@
|
|
|
1788
2222
|
|
|
1789
2223
|
_Class._TOGGLE_ATTRIBUTE = 'data-dropdown-toggle';
|
|
1790
2224
|
|
|
1791
|
-
_Class.
|
|
2225
|
+
_Class._TOGGLE_DISABLED_ATTRIBUTE = 'data-dropdown-toggle-disabled';
|
|
1792
2226
|
|
|
1793
2227
|
_Class._STANDALONE_ATTRIBUTE = 'data-dropdown-standalone';
|
|
1794
2228
|
|
|
1795
2229
|
_Class._SWITCHES_SELECTOR = `[${_Class._TOGGLE_ATTRIBUTE}]`;
|
|
1796
2230
|
|
|
1797
|
-
_Class._NONE_SWITCHES_SELECTOR = `[${_Class.
|
|
2231
|
+
_Class._NONE_SWITCHES_SELECTOR = `[${_Class._TOGGLE_DISABLED_ATTRIBUTE}]`;
|
|
1798
2232
|
|
|
1799
2233
|
_Class._ACTIVE_CSS_CLASS = 'dropdown-active';
|
|
1800
2234
|
|
|
1801
|
-
_Class._ACTIVED_EVENT_TYPE = `${_Class._SCOPE}:actived`;
|
|
1802
|
-
|
|
1803
|
-
_Class._DEACTIVED_EVENT_TYPE = `${_Class._SCOPE}:deactived`;
|
|
1804
|
-
|
|
1805
2235
|
_Class._observerConfig = {
|
|
1806
2236
|
childList: true,
|
|
1807
2237
|
attributes: true,
|
|
1808
2238
|
subtree: true,
|
|
1809
|
-
attributeFilter: [_Class._TOGGLE_ATTRIBUTE, _Class.
|
|
2239
|
+
attributeFilter: [_Class._TOGGLE_ATTRIBUTE, _Class._TOGGLE_DISABLED_ATTRIBUTE, _Class._STANDALONE_ATTRIBUTE]
|
|
1810
2240
|
};
|
|
1811
2241
|
|
|
1812
2242
|
_Class._$focused = [];
|
|
@@ -1818,7 +2248,7 @@
|
|
|
1818
2248
|
luda((function() {
|
|
1819
2249
|
var _Class;
|
|
1820
2250
|
|
|
1821
|
-
_Class = class extends luda.
|
|
2251
|
+
_Class = class extends luda.Factory {
|
|
1822
2252
|
_getConfig() {
|
|
1823
2253
|
var _$defaultValues, _$valueHolder, _$values;
|
|
1824
2254
|
_$values = luda.$children(this.constructor._VALUE_SELECTOR, this._$component);
|
|
@@ -1867,7 +2297,7 @@
|
|
|
1867
2297
|
static _init() {
|
|
1868
2298
|
var self;
|
|
1869
2299
|
self = this;
|
|
1870
|
-
luda.
|
|
2300
|
+
luda.enter._add(this._ENTER_BEHAVIOR_SELECTOR);
|
|
1871
2301
|
luda.on('change', `${this._SELECTOR} ${this._VALUE_SELECTOR}`, function(e) {
|
|
1872
2302
|
return self.query(luda.$parent(self._SELECTOR, this))._setValueHolderValue();
|
|
1873
2303
|
});
|
|
@@ -1878,7 +2308,7 @@
|
|
|
1878
2308
|
});
|
|
1879
2309
|
// prevent ios device pop out wired navigation pannel
|
|
1880
2310
|
if (/iphone/i.test(navigator.userAgent) || /ipad/i.test(navigator.userAgent)) {
|
|
1881
|
-
return luda.on('focusin', this.
|
|
2311
|
+
return luda.on('focusin', this._ENTER_BEHAVIOR_SELECTOR, function(e) {
|
|
1882
2312
|
this.blur();
|
|
1883
2313
|
return this.classList.add(luda.focus._CSS_CLASS);
|
|
1884
2314
|
});
|
|
@@ -1901,7 +2331,7 @@
|
|
|
1901
2331
|
|
|
1902
2332
|
_Class._VALUE_HOLDER_SELECTOR = '.fm input';
|
|
1903
2333
|
|
|
1904
|
-
_Class.
|
|
2334
|
+
_Class._ENTER_BEHAVIOR_SELECTOR = '.fm-dropdown .fm input';
|
|
1905
2335
|
|
|
1906
2336
|
_Class._observerConfig = {
|
|
1907
2337
|
childList: true,
|
|
@@ -1917,16 +2347,19 @@
|
|
|
1917
2347
|
luda((function() {
|
|
1918
2348
|
var _Class;
|
|
1919
2349
|
|
|
1920
|
-
_Class = class extends luda.
|
|
2350
|
+
_Class = class extends luda.Factory {
|
|
1921
2351
|
|
|
1922
2352
|
// public
|
|
1923
|
-
|
|
1924
|
-
var
|
|
1925
|
-
if (this._$panes.length) {
|
|
1926
|
-
|
|
2353
|
+
activate(index) {
|
|
2354
|
+
var activatedIndex;
|
|
2355
|
+
if (this._$panes.length && !this._isTransitioning()) {
|
|
2356
|
+
activatedIndex = this._activeIndex;
|
|
1927
2357
|
if ((index != null) && index !== this._activeIndex && (0 <= index && index <= this._$panes.length - 1)) {
|
|
2358
|
+
if (!this._canTransition(index, activatedIndex)) {
|
|
2359
|
+
return;
|
|
2360
|
+
}
|
|
1928
2361
|
this._activeIndex = index;
|
|
1929
|
-
return this.
|
|
2362
|
+
return this._activate(activatedIndex);
|
|
1930
2363
|
}
|
|
1931
2364
|
}
|
|
1932
2365
|
}
|
|
@@ -1948,38 +2381,77 @@
|
|
|
1948
2381
|
|
|
1949
2382
|
_constructor() {
|
|
1950
2383
|
({_$panes: this._$panes, _$indicators: this._$indicators, _activeIndex: this._activeIndex} = this._getConfig());
|
|
1951
|
-
|
|
2384
|
+
this._layout();
|
|
2385
|
+
return this._handleTransitionCancel();
|
|
1952
2386
|
}
|
|
1953
2387
|
|
|
1954
2388
|
_onMutations(mutations) {
|
|
1955
|
-
|
|
2389
|
+
({_$panes: this._$panes, _$indicators: this._$indicators, _activeIndex: this._activeIndex} = this._getConfig());
|
|
2390
|
+
return this._setIndicatorsState();
|
|
1956
2391
|
}
|
|
1957
2392
|
|
|
1958
|
-
|
|
2393
|
+
_layout() {
|
|
1959
2394
|
this._$panes.forEach(($pane, index) => {
|
|
2395
|
+
$pane.style.transition = 'none';
|
|
1960
2396
|
if (index === this._activeIndex) {
|
|
1961
2397
|
$pane.classList.add(this.constructor._PANE_ACTIVE_CSS_CLASS);
|
|
1962
|
-
return luda.dispatch($pane, this.constructor._ACTIVED_EVENT_TYPE, index);
|
|
1963
2398
|
} else {
|
|
1964
2399
|
$pane.classList.remove(this.constructor._PANE_ACTIVE_CSS_CLASS);
|
|
1965
|
-
if (index === activedIndex) {
|
|
1966
|
-
return luda.dispatch($pane, this.constructor._DEACTIVED_EVENT_TYPE, index);
|
|
1967
|
-
}
|
|
1968
2400
|
}
|
|
2401
|
+
luda.reflow($pane);
|
|
2402
|
+
return $pane.style.transition = '';
|
|
1969
2403
|
});
|
|
1970
2404
|
return this._setIndicatorsState();
|
|
1971
2405
|
}
|
|
1972
2406
|
|
|
2407
|
+
_activate(activatedIndex) {
|
|
2408
|
+
var $activatedPane, $pane;
|
|
2409
|
+
$pane = this._$panes[this._activeIndex];
|
|
2410
|
+
$activatedPane = this._$panes[activatedIndex];
|
|
2411
|
+
$pane.classList.add(this.constructor._PANE_ACTIVE_CSS_CLASS);
|
|
2412
|
+
$activatedPane.classList.remove(this.constructor._PANE_ACTIVE_CSS_CLASS);
|
|
2413
|
+
this._handleTransitionEnd(this._activeIndex, activatedIndex);
|
|
2414
|
+
return this._setIndicatorsState();
|
|
2415
|
+
}
|
|
2416
|
+
|
|
2417
|
+
_canTransition(activeIndex, activatedIndex) {
|
|
2418
|
+
return !this._activatePrevented(this._$panes[activeIndex], activeIndex) && !this._deactivatePrevented(this._$panes[activatedIndex], activatedIndex);
|
|
2419
|
+
}
|
|
2420
|
+
|
|
2421
|
+
_handleTransitionEnd(activeIndex, activatedIndex) {
|
|
2422
|
+
var activateDuration, deactivateDuration;
|
|
2423
|
+
activateDuration = this._handleActivateEnd(this._$panes[activeIndex], activeIndex);
|
|
2424
|
+
return deactivateDuration = this._handleDeactivateEnd(this._$panes[activatedIndex], activatedIndex);
|
|
2425
|
+
}
|
|
2426
|
+
|
|
2427
|
+
_handleTransitionCancel() {
|
|
2428
|
+
var activatedIndex, index;
|
|
2429
|
+
if (this._isActivating()) {
|
|
2430
|
+
index = parseInt(this._getActivatingMark(), 10);
|
|
2431
|
+
this._handleActivateCancel(this._$panes[index], index);
|
|
2432
|
+
}
|
|
2433
|
+
if (this._isDeactivating()) {
|
|
2434
|
+
activatedIndex = parseInt(this._getDeactivatingMark(), 10);
|
|
2435
|
+
return this._handleDeactivateCancel(this._$panes[activatedIndex], activatedIndex);
|
|
2436
|
+
}
|
|
2437
|
+
}
|
|
2438
|
+
|
|
1973
2439
|
_setIndicatorsState() {
|
|
1974
2440
|
return this._$indicators.forEach(($indicator, index) => {
|
|
1975
2441
|
if (index === this._activeIndex) {
|
|
1976
|
-
|
|
2442
|
+
$indicator.setAttribute('checked', '');
|
|
2443
|
+
return $indicator.checked = true;
|
|
1977
2444
|
} else {
|
|
1978
|
-
|
|
2445
|
+
$indicator.removeAttribute('checked');
|
|
2446
|
+
return $indicator.checked = false;
|
|
1979
2447
|
}
|
|
1980
2448
|
});
|
|
1981
2449
|
}
|
|
1982
2450
|
|
|
2451
|
+
static activate($tab, index) {
|
|
2452
|
+
return this.query($tab).activate(index);
|
|
2453
|
+
}
|
|
2454
|
+
|
|
1983
2455
|
// static private
|
|
1984
2456
|
static _init() {
|
|
1985
2457
|
var self;
|
|
@@ -1988,7 +2460,8 @@
|
|
|
1988
2460
|
var instance;
|
|
1989
2461
|
if (this.checked) {
|
|
1990
2462
|
instance = self.query(luda.$parent(self._SELECTOR, this));
|
|
1991
|
-
|
|
2463
|
+
instance._setIndicatorsState();
|
|
2464
|
+
return instance.activate(instance._$indicators.indexOf(this));
|
|
1992
2465
|
}
|
|
1993
2466
|
});
|
|
1994
2467
|
}
|
|
@@ -2007,10 +2480,6 @@
|
|
|
2007
2480
|
|
|
2008
2481
|
_Class._ACTIVE_INDEX = 0;
|
|
2009
2482
|
|
|
2010
|
-
_Class._ACTIVED_EVENT_TYPE = `${_Class._SCOPE}:actived`;
|
|
2011
|
-
|
|
2012
|
-
_Class._DEACTIVED_EVENT_TYPE = `${_Class._SCOPE}:deactived`;
|
|
2013
|
-
|
|
2014
2483
|
_Class._observerConfig = {
|
|
2015
2484
|
childList: true,
|
|
2016
2485
|
subtree: true
|