aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Golieb <[email protected]>2019-01-28 22:55:21 +0200
committerXhmikosR <[email protected]>2019-02-05 10:24:49 +0200
commit88a34aacbee09417252c804f7cded926a496904a (patch)
treed604f307ea420b376b4a41f8f32052faaab7804c
parent1accd37aa07fa15485a85a9e2ff316aaba51333e (diff)
downloadbootstrap-88a34aacbee09417252c804f7cded926a496904a.tar.xz
bootstrap-88a34aacbee09417252c804f7cded926a496904a.zip
Add support for tooltip offset option to be a function.
-rw-r--r--js/src/tooltip.js16
-rw-r--r--js/tests/unit/tooltip.js37
-rw-r--r--site/docs/4.2/components/tooltips.md8
3 files changed, 55 insertions, 6 deletions
diff --git a/js/src/tooltip.js b/js/src/tooltip.js
index 366781b3e..0b6e21085 100644
--- a/js/src/tooltip.js
+++ b/js/src/tooltip.js
@@ -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
},
diff --git a/js/tests/unit/tooltip.js b/js/tests/unit/tooltip.js
index 54dbe57bd..30829d24d 100644
--- a/js/tests/unit/tooltip.js
+++ b/js/tests/unit/tooltip.js
@@ -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')
+ })
})
diff --git a/site/docs/4.2/components/tooltips.md b/site/docs/4.2/components/tooltips.md
index e49db5634..0a6be4758 100644
--- a/site/docs/4.2/components/tooltips.md
+++ b/site/docs/4.2/components/tooltips.md
@@ -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>