aboutsummaryrefslogtreecommitdiff
path: root/js
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 /js
parentffa88deb85b406fc32b3abd4b66169405634bfbe (diff)
downloadbootstrap-2d8c02eb1024ef2ce8877d6484a9ea8a4d9cd67f.tar.xz
bootstrap-2d8c02eb1024ef2ce8877d6484a9ea8a4d9cd67f.zip
tooltip/popover: add a `customClass` option (#31834)
Co-authored-by: XhmikosR <[email protected]>
Diffstat (limited to 'js')
-rw-r--r--js/src/tooltip.js7
-rw-r--r--js/tests/unit/popover.js13
-rw-r--r--js/tests/unit/tooltip.js50
3 files changed, 70 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)
+ })
})