From fc02932946424e986a72bb7b47044eab815851cb Mon Sep 17 00:00:00 2001 From: Johann-S Date: Tue, 23 Jul 2019 21:15:00 +0200 Subject: use get selector from element only when needed --- js/src/util/index.js | 23 ++++++++++++++++++----- js/src/util/index.spec.js | 48 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+), 5 deletions(-) (limited to 'js/src/util') diff --git a/js/src/util/index.js b/js/src/util/index.js index 5788c8749..537b391dc 100644 --- a/js/src/util/index.js +++ b/js/src/util/index.js @@ -28,20 +28,32 @@ const getUID = prefix => { return prefix } -const getSelectorFromElement = element => { +const getSelector = element => { let selector = element.getAttribute('data-target') if (!selector || selector === '#') { const hrefAttr = element.getAttribute('href') - selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : '' + selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null } - try { + return selector +} + +const getSelectorFromElement = element => { + const selector = getSelector(element) + + if (selector) { return document.querySelector(selector) ? selector : null - } catch (error) { - return null } + + return null +} + +const getElementFromSelector = element => { + const selector = getSelector(element) + + return selector ? document.querySelector(selector) : null } const getTransitionDurationFromElement = element => { @@ -169,6 +181,7 @@ export { TRANSITION_END, getUID, getSelectorFromElement, + getElementFromSelector, getTransitionDurationFromElement, triggerTransitionEnd, isElement, diff --git a/js/src/util/index.spec.js b/js/src/util/index.spec.js index bf450ee36..b667c270e 100644 --- a/js/src/util/index.spec.js +++ b/js/src/util/index.spec.js @@ -64,6 +64,54 @@ describe('Util', () => { expect(Util.getSelectorFromElement(testEl)).toBeNull() }) + + it('should return null if no selector', () => { + fixtureEl.innerHTML = '
' + + const testEl = fixtureEl.querySelector('div') + + expect(Util.getSelectorFromElement(testEl)).toBeNull() + }) + }) + + describe('getElementFromSelector', () => { + it('should get element from data-target', () => { + fixtureEl.innerHTML = [ + '
', + '
' + ].join('') + + const testEl = fixtureEl.querySelector('#test') + + expect(Util.getElementFromSelector(testEl)).toEqual(fixtureEl.querySelector('.target')) + }) + + it('should get element from href if no data-target set', () => { + fixtureEl.innerHTML = [ + '', + '
' + ].join('') + + const testEl = fixtureEl.querySelector('#test') + + expect(Util.getElementFromSelector(testEl)).toEqual(fixtureEl.querySelector('.target')) + }) + + it('should return null if element not found', () => { + fixtureEl.innerHTML = '' + + const testEl = fixtureEl.querySelector('#test') + + expect(Util.getElementFromSelector(testEl)).toBeNull() + }) + + it('should return null if no selector', () => { + fixtureEl.innerHTML = '
' + + const testEl = fixtureEl.querySelector('div') + + expect(Util.getElementFromSelector(testEl)).toBeNull() + }) }) describe('getTransitionDurationFromElement', () => { -- cgit v1.2.3