Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/twbs/bootstrap.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohann-S <johann.servoire@gmail.com>2017-05-16 10:59:44 +0300
committerJohann-S <johann.servoire@gmail.com>2017-05-16 11:09:48 +0300
commit3719ed4cb69fd8c75869158b086b4fc077e63e14 (patch)
tree20c4aa1021aacd824b752d5ab85377ac782b4d90 /js/dist/dropdown.js
parent183205afb87582bf905e1fac0b6c5353c0b2d28c (diff)
build
Diffstat (limited to 'js/dist/dropdown.js')
-rw-r--r--js/dist/dropdown.js141
1 files changed, 121 insertions, 20 deletions
diff --git a/js/dist/dropdown.js b/js/dist/dropdown.js
index 62df3f341d..3a4996992d 100644
--- a/js/dist/dropdown.js
+++ b/js/dist/dropdown.js
@@ -1,3 +1,5 @@
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
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 _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
@@ -12,6 +14,14 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons
var Dropdown = function ($) {
/**
+ * Check for Popper dependency
+ * Popper - https://popper.js.org
+ */
+ if (typeof Popper === 'undefined') {
+ throw new Error('Bootstrap dropdown require Popper.js (https://popper.js.org)');
+ }
+
+ /**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
@@ -55,6 +65,23 @@ var Dropdown = function ($) {
VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled)'
};
+ var AttachmentMap = {
+ TOP: 'top-start',
+ BOTTOM: 'bottom-start'
+ };
+
+ var Default = {
+ placement: AttachmentMap.BOTTOM,
+ offset: 0,
+ flip: true
+ };
+
+ var DefaultType = {
+ placement: 'string',
+ offset: '(number|string)',
+ flip: 'boolean'
+ };
+
/**
* ------------------------------------------------------------------------
* Class Definition
@@ -62,10 +89,13 @@ var Dropdown = function ($) {
*/
var Dropdown = function () {
- function Dropdown(element) {
+ function Dropdown(element, config) {
_classCallCheck(this, Dropdown);
this._element = element;
+ this._popper = null;
+ this._config = this._getConfig(config);
+ this._menu = this._getMenuElement();
this._addEventListeners();
}
@@ -75,30 +105,44 @@ var Dropdown = function ($) {
// public
Dropdown.prototype.toggle = function toggle() {
- if (this.disabled || $(this).hasClass(ClassName.DISABLED)) {
- return false;
+ if (this._element.disabled || $(this._element).hasClass(ClassName.DISABLED)) {
+ return;
}
- var parent = Dropdown._getParentFromElement(this);
- var isActive = $(parent).hasClass(ClassName.SHOW);
+ var parent = Dropdown._getParentFromElement(this._element);
+ var isActive = $(this._menu).hasClass(ClassName.SHOW);
Dropdown._clearMenus();
if (isActive) {
- return false;
+ return;
}
var relatedTarget = {
- relatedTarget: this
+ relatedTarget: this._element
};
var showEvent = $.Event(Event.SHOW, relatedTarget);
$(parent).trigger(showEvent);
if (showEvent.isDefaultPrevented()) {
- return false;
+ return;
}
+ // Handle dropup
+ var dropdownPlacement = $(this._element).parent().hasClass('dropup') ? AttachmentMap.TOP : this._config.placement;
+ this._popper = new Popper(this._element, this._menu, {
+ placement: dropdownPlacement,
+ modifiers: {
+ offset: {
+ offset: this._config.offset
+ },
+ flip: {
+ enabled: this._config.flip
+ }
+ }
+ });
+
// if this is a touch-enabled device we add extra
// empty mouseover listeners to the body's immediate children;
// only needed because of broken event delegation on iOS
@@ -107,25 +151,61 @@ var Dropdown = function ($) {
$('body').children().on('mouseover', null, $.noop);
}
- this.focus();
- this.setAttribute('aria-expanded', true);
+ this._element.focus();
+ this._element.setAttribute('aria-expanded', true);
- $(parent).toggleClass(ClassName.SHOW);
- $(parent).trigger($.Event(Event.SHOWN, relatedTarget));
-
- return false;
+ $(this._menu).toggleClass(ClassName.SHOW);
+ $(parent).toggleClass(ClassName.SHOW).trigger($.Event(Event.SHOWN, relatedTarget));
};
Dropdown.prototype.dispose = function dispose() {
$.removeData(this._element, DATA_KEY);
$(this._element).off(EVENT_KEY);
this._element = null;
+ this._menu = null;
+ if (this._popper !== null) {
+ this._popper.destroy();
+ }
+ this._popper = null;
+ };
+
+ Dropdown.prototype.update = function update() {
+ if (this._popper !== null) {
+ this._popper.scheduleUpdate();
+ }
};
// private
Dropdown.prototype._addEventListeners = function _addEventListeners() {
- $(this._element).on(Event.CLICK, this.toggle);
+ var _this = this;
+
+ $(this._element).on(Event.CLICK, function (event) {
+ event.preventDefault();
+ event.stopPropagation();
+ _this.toggle();
+ });
+ };
+
+ Dropdown.prototype._getConfig = function _getConfig(config) {
+ var elementData = $(this._element).data();
+ if (elementData.placement !== undefined) {
+ elementData.placement = AttachmentMap[elementData.placement.toUpperCase()];
+ }
+
+ config = $.extend({}, this.constructor.Default, $(this._element).data(), config);
+
+ Util.typeCheckConfig(NAME, config, this.constructor.DefaultType);
+
+ return config;
+ };
+
+ Dropdown.prototype._getMenuElement = function _getMenuElement() {
+ if (!this._menu) {
+ var parent = Dropdown._getParentFromElement(this._element);
+ this._menu = $(parent).find(Selector.MENU)[0];
+ }
+ return this._menu;
};
// static
@@ -133,9 +213,10 @@ var Dropdown = function ($) {
Dropdown._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () {
var data = $(this).data(DATA_KEY);
+ var _config = (typeof config === 'undefined' ? 'undefined' : _typeof(config)) === 'object' ? config : null;
if (!data) {
- data = new Dropdown(this);
+ data = new Dropdown(this, _config);
$(this).data(DATA_KEY, data);
}
@@ -143,7 +224,7 @@ var Dropdown = function ($) {
if (data[config] === undefined) {
throw new Error('No method named "' + config + '"');
}
- data[config].call(this);
+ data[config]();
}
});
};
@@ -154,13 +235,18 @@ var Dropdown = function ($) {
}
var toggles = $.makeArray($(Selector.DATA_TOGGLE));
-
for (var i = 0; i < toggles.length; i++) {
var parent = Dropdown._getParentFromElement(toggles[i]);
+ var context = $(toggles[i]).data(DATA_KEY);
var relatedTarget = {
relatedTarget: toggles[i]
};
+ if (!context) {
+ continue;
+ }
+
+ var dropdownMenu = context._menu;
if (!$(parent).hasClass(ClassName.SHOW)) {
continue;
}
@@ -183,6 +269,7 @@ var Dropdown = function ($) {
toggles[i].setAttribute('aria-expanded', 'false');
+ $(dropdownMenu).removeClass(ClassName.SHOW);
$(parent).removeClass(ClassName.SHOW).trigger($.Event(Event.HIDDEN, relatedTarget));
}
};
@@ -254,6 +341,16 @@ var Dropdown = function ($) {
get: function get() {
return VERSION;
}
+ }, {
+ key: 'Default',
+ get: function get() {
+ return Default;
+ }
+ }, {
+ key: 'DefaultType',
+ get: function get() {
+ return DefaultType;
+ }
}]);
return Dropdown;
@@ -265,7 +362,11 @@ var Dropdown = function ($) {
* ------------------------------------------------------------------------
*/
- $(document).on(Event.KEYDOWN_DATA_API, Selector.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event.KEYDOWN_DATA_API, Selector.MENU, Dropdown._dataApiKeydownHandler).on(Event.CLICK_DATA_API + ' ' + Event.KEYUP_DATA_API, Dropdown._clearMenus).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, Dropdown.prototype.toggle).on(Event.CLICK_DATA_API, Selector.FORM_CHILD, function (e) {
+ $(document).on(Event.KEYDOWN_DATA_API, Selector.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event.KEYDOWN_DATA_API, Selector.MENU, Dropdown._dataApiKeydownHandler).on(Event.CLICK_DATA_API + ' ' + Event.KEYUP_DATA_API, Dropdown._clearMenus).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {
+ event.preventDefault();
+ event.stopPropagation();
+ Dropdown._jQueryInterface.call($(this), 'toggle');
+ }).on(Event.CLICK_DATA_API, Selector.FORM_CHILD, function (e) {
e.stopPropagation();
});
@@ -283,5 +384,5 @@ var Dropdown = function ($) {
};
return Dropdown;
-}(jQuery);
+}(jQuery); /* global Popper */
//# sourceMappingURL=dropdown.js.map \ No newline at end of file