mirror of
https://github.com/twbs/bootstrap.git
synced 2025-02-24 20:02:53 +01:00
change the export pattern to protect against leaking globals
This commit is contained in:
parent
0724bd91ff
commit
c3a79b1a8c
320
js/dist/alert.js
vendored
320
js/dist/alert.js
vendored
@ -4,167 +4,173 @@ var _createClass = (function () { function defineProperties(target, props) { for
|
|||||||
|
|
||||||
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
|
||||||
|
|
||||||
/**
|
|
||||||
* --------------------------------------------------------------------------
|
|
||||||
* Constants
|
|
||||||
* --------------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
|
|
||||||
var NAME = 'alert';
|
|
||||||
var VERSION = '4.0.0';
|
|
||||||
var DATA_KEY = 'bs.alert';
|
|
||||||
var JQUERY_NO_CONFLICT = $.fn[NAME];
|
|
||||||
var TRANSITION_DURATION = 150;
|
|
||||||
|
|
||||||
var Selector = {
|
|
||||||
DISMISS: '[data-dismiss="alert"]'
|
|
||||||
};
|
|
||||||
|
|
||||||
var Event = {
|
|
||||||
CLOSE: 'close.bs.alert',
|
|
||||||
CLOSED: 'closed.bs.alert',
|
|
||||||
CLICK: 'click.bs.alert.data-api'
|
|
||||||
};
|
|
||||||
|
|
||||||
var ClassName = {
|
|
||||||
ALERT: 'alert',
|
|
||||||
FADE: 'fade',
|
|
||||||
IN: 'in'
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* --------------------------------------------------------------------------
|
|
||||||
* Class Definition
|
|
||||||
* --------------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
|
|
||||||
var Alert = (function () {
|
|
||||||
function Alert(element) {
|
|
||||||
_classCallCheck(this, Alert);
|
|
||||||
|
|
||||||
if (element) {
|
|
||||||
this.element = element;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
_createClass(Alert, [{
|
|
||||||
key: 'close',
|
|
||||||
|
|
||||||
// public
|
|
||||||
|
|
||||||
value: function close(element) {
|
|
||||||
var rootElement = this._getRootElement(element);
|
|
||||||
var customEvent = this._triggerCloseEvent(rootElement);
|
|
||||||
|
|
||||||
if (customEvent.isDefaultPrevented()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
this._removeElement(rootElement);
|
|
||||||
}
|
|
||||||
}, {
|
|
||||||
key: '_getRootElement',
|
|
||||||
|
|
||||||
// private
|
|
||||||
|
|
||||||
value: function _getRootElement(element) {
|
|
||||||
var parent = false;
|
|
||||||
var selector = Util.getSelectorFromElement(element);
|
|
||||||
|
|
||||||
if (selector) {
|
|
||||||
parent = $(selector)[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!parent) {
|
|
||||||
parent = $(element).closest('.' + ClassName.ALERT)[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
return parent;
|
|
||||||
}
|
|
||||||
}, {
|
|
||||||
key: '_triggerCloseEvent',
|
|
||||||
value: function _triggerCloseEvent(element) {
|
|
||||||
var closeEvent = $.Event(Event.CLOSE);
|
|
||||||
$(element).trigger(closeEvent);
|
|
||||||
return closeEvent;
|
|
||||||
}
|
|
||||||
}, {
|
|
||||||
key: '_removeElement',
|
|
||||||
value: function _removeElement(element) {
|
|
||||||
$(element).removeClass(ClassName.IN);
|
|
||||||
|
|
||||||
if (!Util.supportsTransitionEnd() || !$(element).hasClass(ClassName.FADE)) {
|
|
||||||
this._destroyElement(element);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
$(element).one(Util.TRANSITION_END, this._destroyElement.bind(this, element)).emulateTransitionEnd(TRANSITION_DURATION);
|
|
||||||
}
|
|
||||||
}, {
|
|
||||||
key: '_destroyElement',
|
|
||||||
value: function _destroyElement(element) {
|
|
||||||
$(element).detach().trigger(Event.CLOSED).remove();
|
|
||||||
}
|
|
||||||
}], [{
|
|
||||||
key: '_jQueryInterface',
|
|
||||||
|
|
||||||
// static
|
|
||||||
|
|
||||||
value: function _jQueryInterface(config) {
|
|
||||||
return this.each(function () {
|
|
||||||
var $element = $(this);
|
|
||||||
var data = $element.data(DATA_KEY);
|
|
||||||
|
|
||||||
if (!data) {
|
|
||||||
data = new Alert(this);
|
|
||||||
$element.data(DATA_KEY, data);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (config === 'close') {
|
|
||||||
data[config](this);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}, {
|
|
||||||
key: '_handleDismiss',
|
|
||||||
value: function _handleDismiss(alertInstance) {
|
|
||||||
return function (event) {
|
|
||||||
if (event) {
|
|
||||||
event.preventDefault();
|
|
||||||
}
|
|
||||||
|
|
||||||
alertInstance.close(this);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}]);
|
|
||||||
|
|
||||||
return Alert;
|
|
||||||
})();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* --------------------------------------------------------------------------
|
|
||||||
* Data Api implementation
|
|
||||||
* --------------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
|
|
||||||
$(document).on(Event.CLICK, Selector.DISMISS, Alert._handleDismiss(new Alert()));
|
|
||||||
|
|
||||||
/**
|
|
||||||
* --------------------------------------------------------------------------
|
|
||||||
* jQuery
|
|
||||||
* --------------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
|
|
||||||
$.fn[NAME] = Alert._jQueryInterface;
|
|
||||||
$.fn[NAME].Constructor = Alert;
|
|
||||||
$.fn[NAME].noConflict = function () {
|
|
||||||
$.fn[NAME] = Alert._JQUERY_NO_CONFLICT;
|
|
||||||
return Alert._jQueryInterface;
|
|
||||||
};
|
|
||||||
/**
|
/**
|
||||||
* --------------------------------------------------------------------------
|
* --------------------------------------------------------------------------
|
||||||
* Bootstrap (v4.0.0): alert.js
|
* Bootstrap (v4.0.0): alert.js
|
||||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||||
* --------------------------------------------------------------------------
|
* --------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
var Alert = (function () {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ------------------------------------------------------------------------
|
||||||
|
* Constants
|
||||||
|
* ------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
var NAME = 'alert';
|
||||||
|
var VERSION = '4.0.0';
|
||||||
|
var DATA_KEY = 'bs.alert';
|
||||||
|
var JQUERY_NO_CONFLICT = $.fn[NAME];
|
||||||
|
var TRANSITION_DURATION = 150;
|
||||||
|
|
||||||
|
var Selector = {
|
||||||
|
DISMISS: '[data-dismiss="alert"]'
|
||||||
|
};
|
||||||
|
|
||||||
|
var Event = {
|
||||||
|
CLOSE: 'close.bs.alert',
|
||||||
|
CLOSED: 'closed.bs.alert',
|
||||||
|
CLICK: 'click.bs.alert.data-api'
|
||||||
|
};
|
||||||
|
|
||||||
|
var ClassName = {
|
||||||
|
ALERT: 'alert',
|
||||||
|
FADE: 'fade',
|
||||||
|
IN: 'in'
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ------------------------------------------------------------------------
|
||||||
|
* Class Definition
|
||||||
|
* ------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
var Alert = (function () {
|
||||||
|
function Alert(element) {
|
||||||
|
_classCallCheck(this, Alert);
|
||||||
|
|
||||||
|
if (element) {
|
||||||
|
this.element = element;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_createClass(Alert, [{
|
||||||
|
key: 'close',
|
||||||
|
|
||||||
|
// public
|
||||||
|
|
||||||
|
value: function close(element) {
|
||||||
|
var rootElement = this._getRootElement(element);
|
||||||
|
var customEvent = this._triggerCloseEvent(rootElement);
|
||||||
|
|
||||||
|
if (customEvent.isDefaultPrevented()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this._removeElement(rootElement);
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
key: '_getRootElement',
|
||||||
|
|
||||||
|
// private
|
||||||
|
|
||||||
|
value: function _getRootElement(element) {
|
||||||
|
var parent = false;
|
||||||
|
var selector = Util.getSelectorFromElement(element);
|
||||||
|
|
||||||
|
if (selector) {
|
||||||
|
parent = $(selector)[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!parent) {
|
||||||
|
parent = $(element).closest('.' + ClassName.ALERT)[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
return parent;
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
key: '_triggerCloseEvent',
|
||||||
|
value: function _triggerCloseEvent(element) {
|
||||||
|
var closeEvent = $.Event(Event.CLOSE);
|
||||||
|
$(element).trigger(closeEvent);
|
||||||
|
return closeEvent;
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
key: '_removeElement',
|
||||||
|
value: function _removeElement(element) {
|
||||||
|
$(element).removeClass(ClassName.IN);
|
||||||
|
|
||||||
|
if (!Util.supportsTransitionEnd() || !$(element).hasClass(ClassName.FADE)) {
|
||||||
|
this._destroyElement(element);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$(element).one(Util.TRANSITION_END, this._destroyElement.bind(this, element)).emulateTransitionEnd(TRANSITION_DURATION);
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
key: '_destroyElement',
|
||||||
|
value: function _destroyElement(element) {
|
||||||
|
$(element).detach().trigger(Event.CLOSED).remove();
|
||||||
|
}
|
||||||
|
}], [{
|
||||||
|
key: '_jQueryInterface',
|
||||||
|
|
||||||
|
// static
|
||||||
|
|
||||||
|
value: function _jQueryInterface(config) {
|
||||||
|
return this.each(function () {
|
||||||
|
var $element = $(this);
|
||||||
|
var data = $element.data(DATA_KEY);
|
||||||
|
|
||||||
|
if (!data) {
|
||||||
|
data = new Alert(this);
|
||||||
|
$element.data(DATA_KEY, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (config === 'close') {
|
||||||
|
data[config](this);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
key: '_handleDismiss',
|
||||||
|
value: function _handleDismiss(alertInstance) {
|
||||||
|
return function (event) {
|
||||||
|
if (event) {
|
||||||
|
event.preventDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
alertInstance.close(this);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}]);
|
||||||
|
|
||||||
|
return Alert;
|
||||||
|
})();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ------------------------------------------------------------------------
|
||||||
|
* Data Api implementation
|
||||||
|
* ------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
$(document).on(Event.CLICK, Selector.DISMISS, Alert._handleDismiss(new Alert()));
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ------------------------------------------------------------------------
|
||||||
|
* jQuery
|
||||||
|
* ------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
$.fn[NAME] = Alert._jQueryInterface;
|
||||||
|
$.fn[NAME].Constructor = Alert;
|
||||||
|
$.fn[NAME].noConflict = function () {
|
||||||
|
$.fn[NAME] = Alert._JQUERY_NO_CONFLICT;
|
||||||
|
return Alert._jQueryInterface;
|
||||||
|
};
|
||||||
|
|
||||||
|
return Alert;
|
||||||
|
})();
|
||||||
//# sourceMappingURL=alert.js.map
|
//# sourceMappingURL=alert.js.map
|
2
js/dist/alert.js.map
vendored
2
js/dist/alert.js.map
vendored
File diff suppressed because one or more lines are too long
175
js/dist/util.js
vendored
175
js/dist/util.js
vendored
@ -5,120 +5,119 @@
|
|||||||
* --------------------------------------------------------------------------
|
* --------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
|
||||||
* ------------------------------------------------------------------------
|
|
||||||
* Public Util Api
|
|
||||||
* ------------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
var Util = {
|
var Util = (function () {
|
||||||
|
|
||||||
TRANSITION_END: 'bsTransitionEnd',
|
/**
|
||||||
|
* ------------------------------------------------------------------------
|
||||||
|
* Private TransitionEnd Helpers
|
||||||
|
* ------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
getUID: function getUID(prefix) {
|
var transition = false;
|
||||||
do prefix += ~ ~(Math.random() * 1000000); while (document.getElementById(prefix));
|
|
||||||
return prefix;
|
|
||||||
},
|
|
||||||
|
|
||||||
getSelectorFromElement: function getSelectorFromElement(element) {
|
var TransitionEndEvent = {
|
||||||
var selector = element.getAttribute('data-target');
|
WebkitTransition: 'webkitTransitionEnd',
|
||||||
|
MozTransition: 'transitionend',
|
||||||
|
OTransition: 'oTransitionEnd otransitionend',
|
||||||
|
transition: 'transitionend'
|
||||||
|
};
|
||||||
|
|
||||||
if (!selector) {
|
function getSpecialTransitionEndEvent() {
|
||||||
selector = element.getAttribute('href') || '';
|
return {
|
||||||
selector = /^#[a-z]/i.test(selector) ? selector : null;
|
bindType: transition.end,
|
||||||
}
|
delegateType: transition.end,
|
||||||
|
handle: function handle(event) {
|
||||||
return selector;
|
if ($(event.target).is(this)) {
|
||||||
},
|
return event.handleObj.handler.apply(this, arguments);
|
||||||
|
}
|
||||||
reflow: function reflow(element) {
|
}
|
||||||
new Function('bs', 'return bs')(element.offsetHeight);
|
};
|
||||||
},
|
|
||||||
|
|
||||||
supportsTransitionEnd: function supportsTransitionEnd() {
|
|
||||||
return !!transition;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
function transitionEndTest() {
|
||||||
|
if (window.QUnit) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
var el = document.createElement('bootstrap');
|
||||||
* ------------------------------------------------------------------------
|
|
||||||
* Private TransitionEnd Helpers
|
|
||||||
* ------------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
|
|
||||||
var transition = false;
|
for (var name in TransitionEndEvent) {
|
||||||
|
if (el.style[name] !== undefined) {
|
||||||
var TransitionEndEvent = {
|
return { end: TransitionEndEvent[name] };
|
||||||
WebkitTransition: 'webkitTransitionEnd',
|
|
||||||
MozTransition: 'transitionend',
|
|
||||||
OTransition: 'oTransitionEnd otransitionend',
|
|
||||||
transition: 'transitionend'
|
|
||||||
};
|
|
||||||
|
|
||||||
function getSpecialTransitionEndEvent() {
|
|
||||||
return {
|
|
||||||
bindType: transition.end,
|
|
||||||
delegateType: transition.end,
|
|
||||||
handle: function handle(event) {
|
|
||||||
if ($(event.target).is(this)) {
|
|
||||||
return event.handleObj.handler.apply(this, arguments);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
function transitionEndTest() {
|
|
||||||
if (window.QUnit) {
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
var el = document.createElement('bootstrap');
|
function transitionEndEmulator(duration) {
|
||||||
|
var _this = this;
|
||||||
|
|
||||||
for (var name in TransitionEndEvent) {
|
var called = false;
|
||||||
if (el.style[name] !== undefined) {
|
|
||||||
return { end: TransitionEndEvent[name] };
|
$(this).one(Util.TRANSITION_END, function () {
|
||||||
|
called = true;
|
||||||
|
});
|
||||||
|
|
||||||
|
setTimeout(function () {
|
||||||
|
if (!called) {
|
||||||
|
$(_this).trigger(transition.end);
|
||||||
|
}
|
||||||
|
}, duration);
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
function setTransitionEndSupport() {
|
||||||
|
transition = transitionEndTest();
|
||||||
|
|
||||||
|
$.fn.emulateTransitionEnd = transitionEndEmulator;
|
||||||
|
|
||||||
|
if (Util.supportsTransitionEnd()) {
|
||||||
|
$.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
/**
|
||||||
}
|
* --------------------------------------------------------------------------
|
||||||
|
* Public Util Api
|
||||||
|
* --------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
function transitionEndEmulator(duration) {
|
var Util = {
|
||||||
var _this = this;
|
|
||||||
|
|
||||||
var called = false;
|
TRANSITION_END: 'bsTransitionEnd',
|
||||||
|
|
||||||
$(this).one(Util.TRANSITION_END, function () {
|
getUID: function getUID(prefix) {
|
||||||
called = true;
|
do prefix += ~ ~(Math.random() * 1000000); while (document.getElementById(prefix));
|
||||||
});
|
return prefix;
|
||||||
|
},
|
||||||
|
|
||||||
setTimeout(function () {
|
getSelectorFromElement: function getSelectorFromElement(element) {
|
||||||
if (!called) {
|
var selector = element.getAttribute('data-target');
|
||||||
$(_this).trigger(transition.end);
|
|
||||||
|
if (!selector) {
|
||||||
|
selector = element.getAttribute('href') || '';
|
||||||
|
selector = /^#[a-z]/i.test(selector) ? selector : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return selector;
|
||||||
|
},
|
||||||
|
|
||||||
|
reflow: function reflow(element) {
|
||||||
|
new Function('bs', 'return bs')(element.offsetHeight);
|
||||||
|
},
|
||||||
|
|
||||||
|
supportsTransitionEnd: function supportsTransitionEnd() {
|
||||||
|
return !!transition;
|
||||||
}
|
}
|
||||||
}, duration);
|
|
||||||
|
|
||||||
return this;
|
};
|
||||||
}
|
|
||||||
|
|
||||||
function setTransitionEndSupport() {
|
setTransitionEndSupport();
|
||||||
transition = transitionEndTest();
|
|
||||||
|
|
||||||
$.fn.emulateTransitionEnd = transitionEndEmulator;
|
return Util;
|
||||||
|
})();
|
||||||
if (Util.supportsTransitionEnd()) {
|
|
||||||
$.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
setTransitionEndSupport();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* ------------------------------------------------------------------------
|
|
||||||
* Export Api
|
|
||||||
* ------------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
//# sourceMappingURL=util.js.map
|
//# sourceMappingURL=util.js.map
|
2
js/dist/util.js.map
vendored
2
js/dist/util.js.map
vendored
File diff suppressed because one or more lines are too long
305
js/script-compiled.js
Normal file
305
js/script-compiled.js
Normal file
@ -0,0 +1,305 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
Object.defineProperty(exports, '__esModule', {
|
||||||
|
value: true
|
||||||
|
});
|
||||||
|
|
||||||
|
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
|
||||||
|
|
||||||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
|
||||||
|
|
||||||
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* --------------------------------------------------------------------------
|
||||||
|
* Bootstrap (v4.0.0): alert.js
|
||||||
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||||
|
* --------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
var _util = require('util');
|
||||||
|
|
||||||
|
var _util2 = _interopRequireDefault(_util);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* --------------------------------------------------------------------------
|
||||||
|
* Constants
|
||||||
|
* --------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
var NAME = 'alert';
|
||||||
|
var VERSION = '4.0.0';
|
||||||
|
var DATA_KEY = 'bs.alert';
|
||||||
|
var JQUERY_NO_CONFLICT = $.fn[NAME];
|
||||||
|
var TRANSITION_DURATION = 150;
|
||||||
|
|
||||||
|
var Selector = {
|
||||||
|
DISMISS: '[data-dismiss="alert"]'
|
||||||
|
};
|
||||||
|
|
||||||
|
var Event = {
|
||||||
|
CLOSE: 'close.bs.alert',
|
||||||
|
CLOSED: 'closed.bs.alert',
|
||||||
|
CLICK: 'click.bs.alert.data-api'
|
||||||
|
};
|
||||||
|
|
||||||
|
var ClassName = {
|
||||||
|
ALERT: 'alert',
|
||||||
|
FADE: 'fade',
|
||||||
|
IN: 'in'
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* --------------------------------------------------------------------------
|
||||||
|
* Class Definition
|
||||||
|
* --------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
var Alert = (function () {
|
||||||
|
function Alert(element) {
|
||||||
|
_classCallCheck(this, Alert);
|
||||||
|
|
||||||
|
if (element) {
|
||||||
|
this.element = element;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_createClass(Alert, [{
|
||||||
|
key: 'close',
|
||||||
|
|
||||||
|
// public
|
||||||
|
|
||||||
|
value: function close(element) {
|
||||||
|
var rootElement = this._getRootElement(element);
|
||||||
|
var customEvent = this._triggerCloseEvent(rootElement);
|
||||||
|
|
||||||
|
if (customEvent.isDefaultPrevented()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this._removeElement(rootElement);
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
key: '_getRootElement',
|
||||||
|
|
||||||
|
// private
|
||||||
|
|
||||||
|
value: function _getRootElement(element) {
|
||||||
|
var parent = false;
|
||||||
|
var selector = _util2['default'].getSelectorFromElement(element);
|
||||||
|
|
||||||
|
if (selector) {
|
||||||
|
parent = $(selector)[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!parent) {
|
||||||
|
parent = $(element).closest('.' + ClassName.ALERT)[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
return parent;
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
key: '_triggerCloseEvent',
|
||||||
|
value: function _triggerCloseEvent(element) {
|
||||||
|
var closeEvent = $.Event(Event.CLOSE);
|
||||||
|
$(element).trigger(closeEvent);
|
||||||
|
return closeEvent;
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
key: '_removeElement',
|
||||||
|
value: function _removeElement(element) {
|
||||||
|
$(element).removeClass(ClassName.IN);
|
||||||
|
|
||||||
|
if (!_util2['default'].supportsTransitionEnd() || !$(element).hasClass(ClassName.FADE)) {
|
||||||
|
this._destroyElement(element);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$(element).one(_util2['default'].TRANSITION_END, this._destroyElement.bind(this, element)).emulateTransitionEnd(TRANSITION_DURATION);
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
key: '_destroyElement',
|
||||||
|
value: function _destroyElement(element) {
|
||||||
|
$(element).detach().trigger(Event.CLOSED).remove();
|
||||||
|
}
|
||||||
|
}], [{
|
||||||
|
key: '_jQueryInterface',
|
||||||
|
|
||||||
|
// static
|
||||||
|
|
||||||
|
value: function _jQueryInterface(config) {
|
||||||
|
return this.each(function () {
|
||||||
|
var $element = $(this);
|
||||||
|
var data = $element.data(DATA_KEY);
|
||||||
|
|
||||||
|
if (!data) {
|
||||||
|
data = new Alert(this);
|
||||||
|
$element.data(DATA_KEY, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (config === 'close') {
|
||||||
|
data[config](this);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
key: '_handleDismiss',
|
||||||
|
value: function _handleDismiss(alertInstance) {
|
||||||
|
return function (event) {
|
||||||
|
if (event) {
|
||||||
|
event.preventDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
alertInstance.close(this);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}]);
|
||||||
|
|
||||||
|
return Alert;
|
||||||
|
})();
|
||||||
|
|
||||||
|
exports.Alert = Alert;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* --------------------------------------------------------------------------
|
||||||
|
* Data Api implementation
|
||||||
|
* --------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
$(document).on(Event.CLICK, Selector.DISMISS, Alert._handleDismiss(new Alert()));
|
||||||
|
|
||||||
|
/**
|
||||||
|
* --------------------------------------------------------------------------
|
||||||
|
* jQuery
|
||||||
|
* --------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
$.fn[NAME] = Alert._jQueryInterface;
|
||||||
|
$.fn[NAME].Constructor = Alert;
|
||||||
|
$.fn[NAME].noConflict = function () {
|
||||||
|
$.fn[NAME] = Alert._JQUERY_NO_CONFLICT;
|
||||||
|
return Alert._jQueryInterface;
|
||||||
|
};
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
Object.defineProperty(exports, '__esModule', {
|
||||||
|
value: true
|
||||||
|
});
|
||||||
|
/**
|
||||||
|
* --------------------------------------------------------------------------
|
||||||
|
* Bootstrap (v4.0.0): util.js
|
||||||
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||||
|
* --------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* --------------------------------------------------------------------------
|
||||||
|
* Public Util Api
|
||||||
|
* --------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
var Util = {
|
||||||
|
|
||||||
|
TRANSITION_END: 'bsTransitionEnd',
|
||||||
|
|
||||||
|
getUID: function getUID(prefix) {
|
||||||
|
do prefix += ~ ~(Math.random() * 1000000); while (document.getElementById(prefix));
|
||||||
|
return prefix;
|
||||||
|
},
|
||||||
|
|
||||||
|
getSelectorFromElement: function getSelectorFromElement(element) {
|
||||||
|
var selector = element.getAttribute('data-target');
|
||||||
|
|
||||||
|
if (!selector) {
|
||||||
|
selector = element.getAttribute('href') || '';
|
||||||
|
selector = /^#[a-z]/i.test(selector) ? selector : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return selector;
|
||||||
|
},
|
||||||
|
|
||||||
|
reflow: function reflow(element) {
|
||||||
|
new Function('bs', 'return bs')(element.offsetHeight);
|
||||||
|
},
|
||||||
|
|
||||||
|
supportsTransitionEnd: function supportsTransitionEnd() {
|
||||||
|
return !!transition;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
exports['default'] = Util;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* --------------------------------------------------------------------------
|
||||||
|
* Private TransitionEnd Helpers
|
||||||
|
* --------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
var transition = false;
|
||||||
|
|
||||||
|
var TransitionEndEvent = {
|
||||||
|
WebkitTransition: 'webkitTransitionEnd',
|
||||||
|
MozTransition: 'transitionend',
|
||||||
|
OTransition: 'oTransitionEnd otransitionend',
|
||||||
|
transition: 'transitionend'
|
||||||
|
};
|
||||||
|
|
||||||
|
function getSpecialTransitionEndEvent() {
|
||||||
|
return {
|
||||||
|
bindType: transition.end,
|
||||||
|
delegateType: transition.end,
|
||||||
|
handle: function handle(event) {
|
||||||
|
if ($(event.target).is(this)) {
|
||||||
|
return event.handleObj.handler.apply(this, arguments);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function transitionEndTest() {
|
||||||
|
if (window.QUnit) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
var el = document.createElement('bootstrap');
|
||||||
|
|
||||||
|
for (var name in TransitionEndEvent) {
|
||||||
|
if (el.style[name] !== undefined) {
|
||||||
|
return { end: TransitionEndEvent[name] };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function transitionEndEmulator(duration) {
|
||||||
|
var _this = this;
|
||||||
|
|
||||||
|
var called = false;
|
||||||
|
|
||||||
|
$(this).one(Util.TRANSITION_END, function () {
|
||||||
|
called = true;
|
||||||
|
});
|
||||||
|
|
||||||
|
setTimeout(function () {
|
||||||
|
if (!called) {
|
||||||
|
$(_this).trigger(transition.end);
|
||||||
|
}
|
||||||
|
}, duration);
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
function setTransitionEndSupport() {
|
||||||
|
transition = transitionEndTest();
|
||||||
|
|
||||||
|
$.fn.emulateTransitionEnd = transitionEndEmulator;
|
||||||
|
|
||||||
|
if (Util.supportsTransitionEnd()) {
|
||||||
|
$.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
setTransitionEndSupport();
|
||||||
|
module.exports = exports['default'];
|
278
js/src/alert.js
278
js/src/alert.js
@ -1,3 +1,6 @@
|
|||||||
|
import Util from './util'
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* --------------------------------------------------------------------------
|
* --------------------------------------------------------------------------
|
||||||
* Bootstrap (v4.0.0): alert.js
|
* Bootstrap (v4.0.0): alert.js
|
||||||
@ -5,164 +8,171 @@
|
|||||||
* --------------------------------------------------------------------------
|
* --------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import Util from 'util'
|
const Alert = (() => {
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* --------------------------------------------------------------------------
|
* ------------------------------------------------------------------------
|
||||||
* Constants
|
* Constants
|
||||||
* --------------------------------------------------------------------------
|
* ------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const NAME = 'alert'
|
const NAME = 'alert'
|
||||||
const VERSION = '4.0.0'
|
const VERSION = '4.0.0'
|
||||||
const DATA_KEY = 'bs.alert'
|
const DATA_KEY = 'bs.alert'
|
||||||
const JQUERY_NO_CONFLICT = $.fn[NAME]
|
const JQUERY_NO_CONFLICT = $.fn[NAME]
|
||||||
const TRANSITION_DURATION = 150
|
const TRANSITION_DURATION = 150
|
||||||
|
|
||||||
const Selector = {
|
const Selector = {
|
||||||
DISMISS : '[data-dismiss="alert"]'
|
DISMISS : '[data-dismiss="alert"]'
|
||||||
}
|
}
|
||||||
|
|
||||||
const Event = {
|
const Event = {
|
||||||
CLOSE : 'close.bs.alert',
|
CLOSE : 'close.bs.alert',
|
||||||
CLOSED : 'closed.bs.alert',
|
CLOSED : 'closed.bs.alert',
|
||||||
CLICK : 'click.bs.alert.data-api'
|
CLICK : 'click.bs.alert.data-api'
|
||||||
}
|
}
|
||||||
|
|
||||||
const ClassName = {
|
const ClassName = {
|
||||||
ALERT : 'alert',
|
ALERT : 'alert',
|
||||||
FADE : 'fade',
|
FADE : 'fade',
|
||||||
IN : 'in'
|
IN : 'in'
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* --------------------------------------------------------------------------
|
|
||||||
* Class Definition
|
|
||||||
* --------------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
|
|
||||||
export class Alert {
|
|
||||||
|
|
||||||
constructor(element) {
|
|
||||||
if (element) {
|
|
||||||
this.element = element
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// public
|
/**
|
||||||
|
* ------------------------------------------------------------------------
|
||||||
|
* Class Definition
|
||||||
|
* ------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
close(element) {
|
class Alert {
|
||||||
let rootElement = this._getRootElement(element)
|
|
||||||
let customEvent = this._triggerCloseEvent(rootElement)
|
|
||||||
|
|
||||||
if (customEvent.isDefaultPrevented()) {
|
constructor(element) {
|
||||||
return
|
if (element) {
|
||||||
|
this.element = element
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this._removeElement(rootElement)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
// public
|
||||||
|
|
||||||
// private
|
close(element) {
|
||||||
|
let rootElement = this._getRootElement(element)
|
||||||
|
let customEvent = this._triggerCloseEvent(rootElement)
|
||||||
|
|
||||||
_getRootElement(element) {
|
if (customEvent.isDefaultPrevented()) {
|
||||||
let parent = false
|
return
|
||||||
let selector = Util.getSelectorFromElement(element)
|
|
||||||
|
|
||||||
if (selector) {
|
|
||||||
parent = $(selector)[0]
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!parent) {
|
|
||||||
parent = $(element).closest('.' + ClassName.ALERT)[0]
|
|
||||||
}
|
|
||||||
|
|
||||||
return parent
|
|
||||||
}
|
|
||||||
|
|
||||||
_triggerCloseEvent(element) {
|
|
||||||
var closeEvent = $.Event(Event.CLOSE)
|
|
||||||
$(element).trigger(closeEvent)
|
|
||||||
return closeEvent
|
|
||||||
}
|
|
||||||
|
|
||||||
_removeElement(element) {
|
|
||||||
$(element).removeClass(ClassName.IN)
|
|
||||||
|
|
||||||
if (!Util.supportsTransitionEnd() || !$(element).hasClass(ClassName.FADE)) {
|
|
||||||
this._destroyElement(element)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
$(element)
|
|
||||||
.one(Util.TRANSITION_END, this._destroyElement.bind(this, element))
|
|
||||||
.emulateTransitionEnd(TRANSITION_DURATION)
|
|
||||||
}
|
|
||||||
|
|
||||||
_destroyElement(element) {
|
|
||||||
$(element)
|
|
||||||
.detach()
|
|
||||||
.trigger(Event.CLOSED)
|
|
||||||
.remove()
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// static
|
|
||||||
|
|
||||||
static _jQueryInterface(config) {
|
|
||||||
return this.each(function () {
|
|
||||||
let $element = $(this)
|
|
||||||
let data = $element.data(DATA_KEY)
|
|
||||||
|
|
||||||
if (!data) {
|
|
||||||
data = new Alert(this)
|
|
||||||
$element.data(DATA_KEY, data)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (config === 'close') {
|
this._removeElement(rootElement)
|
||||||
data[config](this)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
static _handleDismiss(alertInstance) {
|
|
||||||
return function (event) {
|
|
||||||
if (event) {
|
|
||||||
event.preventDefault()
|
|
||||||
}
|
|
||||||
|
|
||||||
alertInstance.close(this)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// private
|
||||||
|
|
||||||
|
_getRootElement(element) {
|
||||||
|
let parent = false
|
||||||
|
let selector = Util.getSelectorFromElement(element)
|
||||||
|
|
||||||
|
if (selector) {
|
||||||
|
parent = $(selector)[0]
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!parent) {
|
||||||
|
parent = $(element).closest('.' + ClassName.ALERT)[0]
|
||||||
|
}
|
||||||
|
|
||||||
|
return parent
|
||||||
|
}
|
||||||
|
|
||||||
|
_triggerCloseEvent(element) {
|
||||||
|
var closeEvent = $.Event(Event.CLOSE)
|
||||||
|
$(element).trigger(closeEvent)
|
||||||
|
return closeEvent
|
||||||
|
}
|
||||||
|
|
||||||
|
_removeElement(element) {
|
||||||
|
$(element).removeClass(ClassName.IN)
|
||||||
|
|
||||||
|
if (!Util.supportsTransitionEnd() ||
|
||||||
|
!$(element).hasClass(ClassName.FADE)) {
|
||||||
|
this._destroyElement(element)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
$(element)
|
||||||
|
.one(Util.TRANSITION_END, this._destroyElement.bind(this, element))
|
||||||
|
.emulateTransitionEnd(TRANSITION_DURATION)
|
||||||
|
}
|
||||||
|
|
||||||
|
_destroyElement(element) {
|
||||||
|
$(element)
|
||||||
|
.detach()
|
||||||
|
.trigger(Event.CLOSED)
|
||||||
|
.remove()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// static
|
||||||
|
|
||||||
|
static _jQueryInterface(config) {
|
||||||
|
return this.each(function () {
|
||||||
|
let $element = $(this)
|
||||||
|
let data = $element.data(DATA_KEY)
|
||||||
|
|
||||||
|
if (!data) {
|
||||||
|
data = new Alert(this)
|
||||||
|
$element.data(DATA_KEY, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (config === 'close') {
|
||||||
|
data[config](this)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
static _handleDismiss(alertInstance) {
|
||||||
|
return function (event) {
|
||||||
|
if (event) {
|
||||||
|
event.preventDefault()
|
||||||
|
}
|
||||||
|
|
||||||
|
alertInstance.close(this)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
|
/**
|
||||||
|
* ------------------------------------------------------------------------
|
||||||
|
* Data Api implementation
|
||||||
|
* ------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
$(document).on(
|
||||||
|
Event.CLICK,
|
||||||
|
Selector.DISMISS,
|
||||||
|
Alert._handleDismiss(new Alert())
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* --------------------------------------------------------------------------
|
* ------------------------------------------------------------------------
|
||||||
* Data Api implementation
|
* jQuery
|
||||||
* --------------------------------------------------------------------------
|
* ------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
$(document).on(
|
$.fn[NAME] = Alert._jQueryInterface
|
||||||
Event.CLICK,
|
$.fn[NAME].Constructor = Alert
|
||||||
Selector.DISMISS,
|
$.fn[NAME].noConflict = function () {
|
||||||
Alert._handleDismiss(new Alert())
|
$.fn[NAME] = Alert._JQUERY_NO_CONFLICT
|
||||||
)
|
return Alert._jQueryInterface
|
||||||
|
}
|
||||||
|
|
||||||
|
return Alert
|
||||||
|
|
||||||
/**
|
})()
|
||||||
* --------------------------------------------------------------------------
|
|
||||||
* jQuery
|
|
||||||
* --------------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
|
|
||||||
$.fn[NAME] = Alert._jQueryInterface
|
export default Alert
|
||||||
$.fn[NAME].Constructor = Alert
|
|
||||||
$.fn[NAME].noConflict = function () {
|
|
||||||
$.fn[NAME] = Alert._JQUERY_NO_CONFLICT
|
|
||||||
return Alert._jQueryInterface
|
|
||||||
}
|
|
||||||
|
180
js/src/util.js
180
js/src/util.js
@ -5,114 +5,120 @@
|
|||||||
* --------------------------------------------------------------------------
|
* --------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
const Util = (() => {
|
||||||
|
|
||||||
/**
|
|
||||||
* --------------------------------------------------------------------------
|
|
||||||
* Public Util Api
|
|
||||||
* --------------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
|
|
||||||
var Util = {
|
/**
|
||||||
|
* ------------------------------------------------------------------------
|
||||||
|
* Private TransitionEnd Helpers
|
||||||
|
* ------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
TRANSITION_END: 'bsTransitionEnd',
|
let transition = false
|
||||||
|
|
||||||
getUID(prefix) {
|
const TransitionEndEvent = {
|
||||||
do prefix += ~~(Math.random() * 1000000)
|
WebkitTransition : 'webkitTransitionEnd',
|
||||||
while (document.getElementById(prefix))
|
MozTransition : 'transitionend',
|
||||||
return prefix
|
OTransition : 'oTransitionEnd otransitionend',
|
||||||
},
|
transition : 'transitionend'
|
||||||
|
|
||||||
getSelectorFromElement(element) {
|
|
||||||
let selector = element.getAttribute('data-target')
|
|
||||||
|
|
||||||
if (!selector) {
|
|
||||||
selector = element.getAttribute('href') || ''
|
|
||||||
selector = /^#[a-z]/i.test(selector) ? selector : null
|
|
||||||
}
|
|
||||||
|
|
||||||
return selector
|
|
||||||
},
|
|
||||||
|
|
||||||
reflow(element) {
|
|
||||||
new Function('bs', 'return bs')(element.offsetHeight)
|
|
||||||
},
|
|
||||||
|
|
||||||
supportsTransitionEnd() {
|
|
||||||
return !!transition
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
function getSpecialTransitionEndEvent() {
|
||||||
|
return {
|
||||||
export default Util
|
bindType: transition.end,
|
||||||
|
delegateType: transition.end,
|
||||||
|
handle: function (event) {
|
||||||
/**
|
if ($(event.target).is(this)) {
|
||||||
* --------------------------------------------------------------------------
|
return event.handleObj.handler.apply(this, arguments)
|
||||||
* Private TransitionEnd Helpers
|
}
|
||||||
* --------------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
|
|
||||||
let transition = false
|
|
||||||
|
|
||||||
const TransitionEndEvent = {
|
|
||||||
WebkitTransition : 'webkitTransitionEnd',
|
|
||||||
MozTransition : 'transitionend',
|
|
||||||
OTransition : 'oTransitionEnd otransitionend',
|
|
||||||
transition : 'transitionend'
|
|
||||||
}
|
|
||||||
|
|
||||||
function getSpecialTransitionEndEvent() {
|
|
||||||
return {
|
|
||||||
bindType: transition.end,
|
|
||||||
delegateType: transition.end,
|
|
||||||
handle: function (event) {
|
|
||||||
if ($(event.target).is(this)) {
|
|
||||||
return event.handleObj.handler.apply(this, arguments)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
function transitionEndTest() {
|
function transitionEndTest() {
|
||||||
if (window.QUnit) {
|
if (window.QUnit) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
let el = document.createElement('bootstrap')
|
||||||
|
|
||||||
|
for (var name in TransitionEndEvent) {
|
||||||
|
if (el.style[name] !== undefined) {
|
||||||
|
return { end: TransitionEndEvent[name] }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
let el = document.createElement('bootstrap')
|
function transitionEndEmulator(duration) {
|
||||||
|
let called = false
|
||||||
|
|
||||||
for (var name in TransitionEndEvent) {
|
$(this).one(Util.TRANSITION_END, function () {
|
||||||
if (el.style[name] !== undefined) {
|
called = true
|
||||||
return { end: TransitionEndEvent[name] }
|
})
|
||||||
|
|
||||||
|
setTimeout(() => {
|
||||||
|
if (!called) {
|
||||||
|
$(this).trigger(transition.end)
|
||||||
|
}
|
||||||
|
}, duration)
|
||||||
|
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
function setTransitionEndSupport() {
|
||||||
|
transition = transitionEndTest()
|
||||||
|
|
||||||
|
$.fn.emulateTransitionEnd = transitionEndEmulator
|
||||||
|
|
||||||
|
if (Util.supportsTransitionEnd()) {
|
||||||
|
$.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
function transitionEndEmulator(duration) {
|
/**
|
||||||
let called = false
|
* --------------------------------------------------------------------------
|
||||||
|
* Public Util Api
|
||||||
|
* --------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
$(this).one(Util.TRANSITION_END, function () {
|
let Util = {
|
||||||
called = true
|
|
||||||
})
|
|
||||||
|
|
||||||
setTimeout(() => {
|
TRANSITION_END: 'bsTransitionEnd',
|
||||||
if (!called) {
|
|
||||||
$(this).trigger(transition.end)
|
getUID(prefix) {
|
||||||
|
do prefix += ~~(Math.random() * 1000000)
|
||||||
|
while (document.getElementById(prefix))
|
||||||
|
return prefix
|
||||||
|
},
|
||||||
|
|
||||||
|
getSelectorFromElement(element) {
|
||||||
|
let selector = element.getAttribute('data-target')
|
||||||
|
|
||||||
|
if (!selector) {
|
||||||
|
selector = element.getAttribute('href') || ''
|
||||||
|
selector = /^#[a-z]/i.test(selector) ? selector : null
|
||||||
|
}
|
||||||
|
|
||||||
|
return selector
|
||||||
|
},
|
||||||
|
|
||||||
|
reflow(element) {
|
||||||
|
new Function('bs', 'return bs')(element.offsetHeight)
|
||||||
|
},
|
||||||
|
|
||||||
|
supportsTransitionEnd() {
|
||||||
|
return !!transition
|
||||||
}
|
}
|
||||||
}, duration)
|
|
||||||
|
|
||||||
return this
|
|
||||||
}
|
|
||||||
|
|
||||||
function setTransitionEndSupport() {
|
|
||||||
transition = transitionEndTest()
|
|
||||||
|
|
||||||
$.fn.emulateTransitionEnd = transitionEndEmulator
|
|
||||||
|
|
||||||
if (Util.supportsTransitionEnd()) {
|
|
||||||
$.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent()
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
setTransitionEndSupport()
|
setTransitionEndSupport()
|
||||||
|
|
||||||
|
return Util
|
||||||
|
|
||||||
|
})()
|
||||||
|
|
||||||
|
export default Util
|
||||||
|
Loading…
x
Reference in New Issue
Block a user