diff options
| author | Jason Golieb <[email protected]> | 2019-02-05 03:31:18 -0500 |
|---|---|---|
| committer | XhmikosR <[email protected]> | 2019-02-05 10:31:18 +0200 |
| commit | e44d0475e07113dfb21b555658de6eac53083f98 (patch) | |
| tree | c35b6620da0cb0b3c9948d6a0a56800e9ca8e22a /js | |
| parent | 1139f62ca26be2057ff15550061adf6ac201b2a8 (diff) | |
| download | bootstrap-e44d0475e07113dfb21b555658de6eac53083f98.tar.xz bootstrap-e44d0475e07113dfb21b555658de6eac53083f98.zip | |
Move dropdown offset function logic into private function. (#28138)
Diffstat (limited to 'js')
| -rw-r--r-- | js/src/dropdown.js | 19 | ||||
| -rw-r--r-- | js/tests/unit/dropdown.js | 55 |
2 files changed, 68 insertions, 6 deletions
diff --git a/js/src/dropdown.js b/js/src/dropdown.js index 9aaf5a339..31deaa725 100644 --- a/js/src/dropdown.js +++ b/js/src/dropdown.js @@ -319,24 +319,30 @@ class Dropdown { return $(this._element).closest('.navbar').length > 0 } - _getPopperConfig() { - const offsetConf = {} + _getOffset() { + const offset = {} + if (typeof this._config.offset === 'function') { - offsetConf.fn = (data) => { + offset.fn = (data) => { data.offsets = { ...data.offsets, - ...this._config.offset(data.offsets) || {} + ...this._config.offset(data.offsets, this._element) || {} } + return data } } else { - offsetConf.offset = this._config.offset + offset.offset = this._config.offset } + return offset + } + + _getPopperConfig() { const popperConfig = { placement: this._getPlacement(), modifiers: { - offset: offsetConf, + offset: this._getOffset(), flip: { enabled: this._config.flip }, @@ -352,6 +358,7 @@ class Dropdown { enabled: false } } + return popperConfig } diff --git a/js/tests/unit/dropdown.js b/js/tests/unit/dropdown.js index fd9b7f962..1ecfd1f8b 100644 --- a/js/tests/unit/dropdown.js +++ b/js/tests/unit/dropdown.js @@ -1361,4 +1361,59 @@ $(function () { $dropdown.hide() assert.ok($dropdown.parent('.dropdown').hasClass('show')) }) + + QUnit.test('should create offset modifier correctly when offset option is a function', function (assert) { + assert.expect(2) + + var getOffset = function (offsets) { + return offsets + } + + var dropdownHTML = + '<div class="dropdown">' + + ' <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a>' + + ' <div class="dropdown-menu">' + + ' <a class="dropdown-item" href="#">Another link</a>' + + ' </div>' + + '</div>' + + var $dropdown = $(dropdownHTML) + .appendTo('#qunit-fixture') + .find('[data-toggle="dropdown"]') + .bootstrapDropdown({ + offset: getOffset + }) + + var dropdown = $dropdown.data('bs.dropdown') + var offset = dropdown._getOffset() + + assert.ok(typeof offset.offset === 'undefined') + assert.ok(typeof offset.fn === 'function') + }) + + QUnit.test('should create offset modifier correctly when offset option is not a function', function (assert) { + assert.expect(2) + + var dropdownHTML = + '<div class="dropdown">' + + ' <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a>' + + ' <div class="dropdown-menu">' + + ' <a class="dropdown-item" href="#">Another link</a>' + + ' </div>' + + '</div>' + + var myOffset = 42 + var $dropdown = $(dropdownHTML) + .appendTo('#qunit-fixture') + .find('[data-toggle="dropdown"]') + .bootstrapDropdown({ + offset: myOffset + }) + + var dropdown = $dropdown.data('bs.dropdown') + var offset = dropdown._getOffset() + + assert.strictEqual(offset.offset, myOffset) + assert.ok(typeof offset.fn === 'undefined') + }) }) |
