From 686b88c505540a8ce0a260c18bd327865cad81c4 Mon Sep 17 00:00:00 2001 From: Johann-S Date: Sat, 27 Jun 2020 00:28:32 +0200 Subject: use only data target to query elements in our plugin --- js/src/collapse.js | 1 - js/src/scrollspy.js | 14 ++++- js/src/util/index.js | 8 +-- js/tests/unit/collapse.spec.js | 24 +++---- js/tests/unit/dropdown.spec.js | 20 +++--- js/tests/unit/scrollspy.spec.js | 24 ++++++- js/tests/unit/tab.spec.js | 86 +++++++++++++------------- js/tests/unit/util/index.spec.js | 43 +------------ js/tests/visual/carousel.html | 4 +- js/tests/visual/collapse.html | 8 +-- js/tests/visual/modal.html | 6 +- js/tests/visual/tab.html | 48 +++++++------- site/content/docs/5.0/components/carousel.md | 22 +++---- site/content/docs/5.0/components/collapse.md | 12 ++-- site/content/docs/5.0/components/list-group.md | 36 +++++------ site/content/docs/5.0/components/modal.md | 2 +- site/content/docs/5.0/components/navs.md | 72 ++++++++++----------- site/content/docs/5.0/migration.md | 1 + site/layouts/partials/docs-sidebar.html | 2 +- 19 files changed, 212 insertions(+), 221 deletions(-) diff --git a/js/src/collapse.js b/js/src/collapse.js index 693e7ee2c8..3b8c15212c 100644 --- a/js/src/collapse.js +++ b/js/src/collapse.js @@ -72,7 +72,6 @@ class Collapse { this._element = element this._config = this._getConfig(config) this._triggerArray = SelectorEngine.find( - `${SELECTOR_DATA_TOGGLE}[href="#${element.id}"],` + `${SELECTOR_DATA_TOGGLE}[data-target="#${element.id}"]` ) diff --git a/js/src/scrollspy.js b/js/src/scrollspy.js index 90e03b0007..ff80de7674 100644 --- a/js/src/scrollspy.js +++ b/js/src/scrollspy.js @@ -121,7 +121,7 @@ class ScrollSpy { targets .map(element => { let target - const targetSelector = getSelectorFromElement(element) + const targetSelector = this._getSelectorFromElement(element) if (targetSelector) { target = SelectorEngine.findOne(targetSelector) @@ -163,6 +163,18 @@ class ScrollSpy { // Private + _getSelectorFromElement(element) { + let selector = getSelectorFromElement(element) + + if (!selector) { + const hrefAttr = element.getAttribute('href') + + selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null + } + + return selector + } + _getConfig(config) { config = { ...Default, diff --git a/js/src/util/index.js b/js/src/util/index.js index d9a975554c..e508908c43 100644 --- a/js/src/util/index.js +++ b/js/src/util/index.js @@ -33,12 +33,10 @@ const getUID = prefix => { } const getSelector = element => { - let selector = element.getAttribute('data-target') + const selector = element.getAttribute('data-target') - if (!selector || selector === '#') { - const hrefAttr = element.getAttribute('href') - - selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null + if (!selector) { + return null } return selector diff --git a/js/tests/unit/collapse.spec.js b/js/tests/unit/collapse.spec.js index a5e101aad1..fcf3adfa57 100644 --- a/js/tests/unit/collapse.spec.js +++ b/js/tests/unit/collapse.spec.js @@ -376,7 +376,7 @@ describe('Collapse', () => { describe('data-api', () => { it('should show multiple collapsed elements', done => { fixtureEl.innerHTML = [ - '', + '', '
', '
' ].join('') @@ -398,7 +398,7 @@ describe('Collapse', () => { it('should hide multiple collapsed elements', done => { fixtureEl.innerHTML = [ - '', + '', '
', '
' ].join('') @@ -466,11 +466,11 @@ describe('Collapse', () => { fixtureEl.innerHTML = [ '
', '
', - ' ', + ' ', '
', '
', '
', - ' ', + ' ', '
', '
', '
' @@ -521,13 +521,13 @@ describe('Collapse', () => { '
', '
', '
', - ' ', + ' ', '
', '
', '
', '
', '
', - ' ', + ' ', '
', '
', '
', @@ -647,18 +647,18 @@ describe('Collapse', () => { fixtureEl.innerHTML = [ '
', '
', - ' ', + ' ', '
', '
', '
', - ' ', + ' ', '
', '
', '
', '
', '
', '
', - ' ', + ' ', '
', '
', '
' @@ -703,9 +703,9 @@ describe('Collapse', () => { it('should add "collapsed" class and set aria-expanded to triggers only when all the targeted collapse are hidden', done => { fixtureEl.innerHTML = [ - '', - '', - '', + '', + '', + '', '
', '
' ].join('') diff --git a/js/tests/unit/dropdown.spec.js b/js/tests/unit/dropdown.spec.js index c7f05ed22a..cf32c56c0e 100644 --- a/js/tests/unit/dropdown.spec.js +++ b/js/tests/unit/dropdown.spec.js @@ -1086,9 +1086,9 @@ describe('Dropdown', () => { fixtureEl.innerHTML = [ '', @@ -1138,9 +1138,9 @@ describe('Dropdown', () => { it('should remove "show" class if body if tabbing outside of menu, with multiple dropdowns', done => { fixtureEl.innerHTML = [ '', '
', @@ -1199,7 +1199,7 @@ describe('Dropdown', () => { '' ].join('') @@ -1231,7 +1231,7 @@ describe('Dropdown', () => { '