aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Remeika <[email protected]>2020-11-20 04:56:16 -0500
committerGitHub <[email protected]>2020-11-20 11:56:16 +0200
commit2d8c02eb1024ef2ce8877d6484a9ea8a4d9cd67f (patch)
tree1f4a1277f06bd474a76865f301cc1b8c223264fd
parentffa88deb85b406fc32b3abd4b66169405634bfbe (diff)
downloadbootstrap-2d8c02eb1024ef2ce8877d6484a9ea8a4d9cd67f.tar.xz
bootstrap-2d8c02eb1024ef2ce8877d6484a9ea8a4d9cd67f.zip
tooltip/popover: add a `customClass` option (#31834)
Co-authored-by: XhmikosR <[email protected]>
-rw-r--r--js/src/tooltip.js7
-rw-r--r--js/tests/unit/popover.js13
-rw-r--r--js/tests/unit/tooltip.js50
-rw-r--r--site/content/docs/4.5/components/popovers.md9
-rw-r--r--site/content/docs/4.5/components/tooltips.md9
5 files changed, 88 insertions, 0 deletions
diff --git a/js/src/tooltip.js b/js/src/tooltip.js
index 4b58f3156..a77034038 100644
--- a/js/src/tooltip.js
+++ b/js/src/tooltip.js
@@ -41,6 +41,7 @@ const DefaultType = {
container: '(string|element|boolean)',
fallbackPlacement: '(string|array)',
boundary: '(string|element)',
+ customClass: '(string|function)',
sanitize: 'boolean',
sanitizeFn: '(null|function)',
whiteList: 'object',
@@ -70,6 +71,7 @@ const Default = {
container: false,
fallbackPlacement: 'flip',
boundary: 'scrollParent',
+ customClass: '',
sanitize: true,
sanitizeFn: null,
whiteList: DefaultWhitelist,
@@ -284,6 +286,7 @@ class Tooltip {
this._popper = new Popper(this.element, tip, this._getPopperConfig(attachment))
$(tip).addClass(CLASS_NAME_SHOW)
+ $(tip).addClass(this._getCustomClass())
// If this is a touch-enabled device we add extra
// empty mouseover listeners to the body's immediate children;
@@ -731,6 +734,10 @@ class Tooltip {
this.config.animation = initConfigAnimation
}
+ _getCustomClass() {
+ return this.element.getAttribute('data-custom-class') || this.config.customClass
+ }
+
// Static
static _jQueryInterface(config) {
diff --git a/js/tests/unit/popover.js b/js/tests/unit/popover.js
index a5981e45f..102f37f8d 100644
--- a/js/tests/unit/popover.js
+++ b/js/tests/unit/popover.js
@@ -61,6 +61,19 @@ $(function () {
.bootstrapPopover('show')
})
+ QUnit.test('should render popover element with additional classes', function (assert) {
+ assert.expect(2)
+ var done = assert.async()
+ $('<a href="#" title="mdo" data-content="https://twitter.com/mdo" data-custom-class="a b">@mdo</a>')
+ .appendTo('#qunit-fixture')
+ .on('shown.bs.popover', function () {
+ assert.strictEqual($('.popover').hasClass('popover fade bs-popover-right show'), true, 'has default classes')
+ assert.strictEqual($('.popover').hasClass('a b'), true, 'has custom classes')
+ done()
+ })
+ .bootstrapPopover('show')
+ })
+
QUnit.test('should store popover instance in popover data object', function (assert) {
assert.expect(1)
var $popover = $('<a href="#" title="mdo" data-content="https://twitter.com/mdo">@mdo</a>').bootstrapPopover()
diff --git a/js/tests/unit/tooltip.js b/js/tests/unit/tooltip.js
index 4f55007c7..b6a40b873 100644
--- a/js/tests/unit/tooltip.js
+++ b/js/tests/unit/tooltip.js
@@ -1283,4 +1283,54 @@ $(function () {
assert.strictEqual(popperConfig.placement, 'left')
})
+
+ QUnit.test('additional classes can be applied via data attribute', function (assert) {
+ assert.expect(2)
+
+ $('<a href="#" rel="tooltip" data-trigger="click" title="Another tooltip" data-custom-class="a b"/>')
+ .appendTo('#qunit-fixture')
+ .bootstrapTooltip()
+ .bootstrapTooltip('show')
+
+ var tooltip = $('.tooltip')
+
+ assert.strictEqual(tooltip.hasClass('a b'), true)
+ assert.strictEqual(tooltip.hasClass('tooltip fade bs-tooltip-top show'), true)
+ })
+
+ QUnit.test('additional classes can be applied via config string', function (assert) {
+ assert.expect(2)
+
+ $('<a href="#" rel="tooltip" data-trigger="click" title="Another tooltip" />')
+ .appendTo('#qunit-fixture')
+ .bootstrapTooltip({
+ customClass: 'a b'
+ })
+ .bootstrapTooltip('show')
+
+ var tooltip = $('.tooltip')
+
+ assert.strictEqual(tooltip.hasClass('a b'), true)
+ assert.strictEqual(tooltip.hasClass('tooltip fade bs-tooltip-top show'), true)
+ })
+
+ QUnit.test('additional classes can be applied via function', function (assert) {
+ assert.expect(2)
+
+ var getClasses = function () {
+ return 'a b'
+ }
+
+ $('<a href="#" rel="tooltip" data-trigger="click" title="Another tooltip" />')
+ .appendTo('#qunit-fixture')
+ .bootstrapTooltip({
+ customClass: getClasses
+ })
+ .bootstrapTooltip('show')
+
+ var tooltip = $('.tooltip')
+
+ assert.strictEqual(tooltip.hasClass('a b'), true)
+ assert.strictEqual(tooltip.hasClass('tooltip fade bs-tooltip-top show'), true)
+ })
})
diff --git a/site/content/docs/4.5/components/popovers.md b/site/content/docs/4.5/components/popovers.md
index e06a81769..a44bbf8c9 100644
--- a/site/content/docs/4.5/components/popovers.md
+++ b/site/content/docs/4.5/components/popovers.md
@@ -270,6 +270,15 @@ Note that for security reasons the `sanitize`, `sanitizeFn` and `whiteList` opti
Popper.js's <a href="https://popper.js.org/docs/v1/#modifiers..flip.behavior">behavior docs</a></td>
</tr>
<tr>
+ <td>customClass</td>
+ <td>string | function</td>
+ <td>''</td>
+ <td>
+ <p>Add classes to the popover when it is shown. Note that these classes will be added in addition to any classes specified in the template. To add mutiple classes, separate them with spaces: <code>'a b'</code>.</p>
+ <p>You can also pass a function that should return a single string containing additional class names.</p>
+ </td>
+ </tr>
+ <tr>
<td>boundary</td>
<td>string | element</td>
<td>'scrollParent'</td>
diff --git a/site/content/docs/4.5/components/tooltips.md b/site/content/docs/4.5/components/tooltips.md
index c297eea16..fdb926bce 100644
--- a/site/content/docs/4.5/components/tooltips.md
+++ b/site/content/docs/4.5/components/tooltips.md
@@ -251,6 +251,15 @@ Note that for security reasons the `sanitize`, `sanitizeFn` and `whiteList` opti
Popper.js's <a href="https://popper.js.org/docs/v1/#modifiers..flip.behavior">behavior docs</a></td>
</tr>
<tr>
+ <td>customClass</td>
+ <td>string | function</td>
+ <td>''</td>
+ <td>
+ <p>Add classes to the popover when it is shown. Note that these classes will be added in addition to any classes specified in the template. To add mutiple classes, separate them with spaces: <code>'a b'</code>.</p>
+ <p>You can also pass a function that should return a single string containing additional class names.</p>
+ </td>
+ </tr>
+ <tr>
<td>boundary</td>
<td>string | element</td>
<td>'scrollParent'</td>