0
0
mirror of https://github.com/twbs/bootstrap.git synced 2025-01-28 20:52:21 +01:00

Add support for tooltip offset option to be a function.

This commit is contained in:
Jason Golieb 2019-01-28 22:55:21 +02:00 committed by XhmikosR
parent 1accd37aa0
commit 88a34aacbe
3 changed files with 55 additions and 6 deletions

View File

@ -32,7 +32,7 @@ const DefaultType = {
html : 'boolean',
selector : '(string|boolean)',
placement : '(string|function)',
offset : '(number|string)',
offset : '(number|string|function)',
container : '(string|element|boolean)',
fallbackPlacement : '(string|array)',
boundary : '(string|element)'
@ -273,6 +273,16 @@ class Tooltip {
const attachment = this._getAttachment(placement)
this.addAttachmentClass(attachment)
const offsetConf = {}
if (typeof this.config.offset === 'function') {
offsetConf.fn = (data) => {
data.offsets = $.extend({}, data.offsets, this.config.offset(data.offsets, this.element) || {})
return data
}
} else {
offsetConf.offset = this.config.offset
}
const container = this._getContainer()
$(tip).data(this.constructor.DATA_KEY, this)
@ -285,9 +295,7 @@ class Tooltip {
this._popper = new Popper(this.element, tip, {
placement: attachment,
modifiers: {
offset: {
offset: this.config.offset
},
offset: offsetConf,
flip: {
behavior: this.config.fallbackPlacement
},

View File

@ -1069,4 +1069,41 @@ $(function () {
assert.strictEqual(tooltip._isEnabled, true)
})
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 $trigger = $('<a href="#" rel="tooltip" data-trigger="click" title="Another tooltip"/>')
.appendTo('#qunit-fixture')
.bootstrapTooltip({
offset: getOffset
})
var tooltip = $trigger.data('bs.tooltip')
var offset = tooltip._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 myOffset = 42
var $trigger = $('<a href="#" rel="tooltip" data-trigger="click" title="Another tooltip"/>')
.appendTo('#qunit-fixture')
.bootstrapTooltip({
offset: myOffset
})
var tooltip = $trigger.data('bs.tooltip')
var offset = tooltip._getOffset()
assert.strictEqual(offset.offset, myOffset)
assert.ok(typeof offset.fn === 'undefined')
})
})

View File

@ -234,9 +234,13 @@ Options can be passed via data attributes or JavaScript. For data attributes, ap
</tr>
<tr>
<td>offset</td>
<td>number | string</td>
<td>number | string | function</td>
<td>0</td>
<td>Offset of the tooltip relative to its target. For more information refer to Popper.js's <a href="https://popper.js.org/popper-documentation.html#modifiers..offset.offset">offset docs</a>.</td>
<td>
<p>Offset of the tooltip relative to its target.</p>
<p>When a function is used to determine the offset, it is called with an object containing the offset data as its first argument. The function must return an object with the same structure. The triggering element DOM node is passed as the second argument.</p>
<p>For more information refer to Popper.js's <a href="https://popper.js.org/popper-documentation.html#modifiers..offset.offset">offset docs</a>.</p>
</td>
</tr>
<tr>
<td>fallbackPlacement</td>