1
0
mirror of https://github.com/twbs/bootstrap.git synced 2025-08-17 19:06:40 +02:00

Move dropdown offset function logic into private function. (#28138)

This commit is contained in:
Jason Golieb
2019-02-05 03:31:18 -05:00
committed by XhmikosR
parent 1139f62ca2
commit e44d0475e0
3 changed files with 73 additions and 7 deletions

View File

@@ -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
}

View File

@@ -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')
})
})