From 328f723008cc39292a9f355e2eafb0fd04740656 Mon Sep 17 00:00:00 2001 From: GeoSot Date: Tue, 7 Dec 2021 15:51:56 +0200 Subject: Tooltip: remove title attribute before show & add tests (#35456) --- js/src/tooltip.js | 14 +++++++++++--- js/tests/unit/tooltip.spec.js | 22 ++++++++++++++++++++++ 2 files changed, 33 insertions(+), 3 deletions(-) (limited to 'js') diff --git a/js/src/tooltip.js b/js/src/tooltip.js index 2f3acda384..19a9b31685 100644 --- a/js/src/tooltip.js +++ b/js/src/tooltip.js @@ -394,7 +394,7 @@ class Tooltip extends BaseComponent { } _getTitle() { - return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('title') + return this._config.title } // Private @@ -510,11 +510,17 @@ class Tooltip extends BaseComponent { } _fixTitle() { - const title = this._element.getAttribute('title') + const title = this._config.originalTitle - if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) { + if (!title) { + return + } + + if (!this._element.getAttribute('aria-label') && !this._element.textContent) { this._element.setAttribute('aria-label', title) } + + this._element.removeAttribute('title') } _enter() { @@ -579,6 +585,8 @@ class Tooltip extends BaseComponent { } } + config.originalTitle = this._element.getAttribute('title') || '' + config.title = this._resolvePossibleFunction(config.title) || config.originalTitle if (typeof config.title === 'number') { config.title = config.title.toString() } diff --git a/js/tests/unit/tooltip.spec.js b/js/tests/unit/tooltip.spec.js index f92b74d963..9054c0f642 100644 --- a/js/tests/unit/tooltip.spec.js +++ b/js/tests/unit/tooltip.spec.js @@ -180,6 +180,15 @@ describe('Tooltip', () => { expect(getPopperConfig).toHaveBeenCalled() expect(popperConfig.placement).toEqual('left') }) + + it('should use original title, if not "data-bs-title" is given', () => { + fixtureEl.innerHTML = '' + + const tooltipEl = fixtureEl.querySelector('a') + const tooltip = new Tooltip(tooltipEl) + + expect(tooltip._config.title).toEqual('Another tooltip') + }) }) describe('enable', () => { @@ -855,6 +864,19 @@ describe('Tooltip', () => { tooltip.show() }) + + it('should remove `title` attribute if exists', done => { + fixtureEl.innerHTML = '' + + const tooltipEl = fixtureEl.querySelector('a') + const tooltip = new Tooltip(tooltipEl) + + tooltipEl.addEventListener('shown.bs.tooltip', () => { + expect(tooltipEl.getAttribute('title')).toBeNull() + done() + }) + tooltip.show() + }) }) describe('hide', () => { -- cgit v1.2.3