From 48ec70250cd63f5558f30698723555656eceff64 Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Tue, 1 Aug 2017 11:55:37 +0100 Subject: reverted the JS timeout code improved specs so that they pass --- app/assets/javascripts/fly_out_nav.js | 52 ++++++----------------------------- 1 file changed, 8 insertions(+), 44 deletions(-) (limited to 'app/assets/javascripts/fly_out_nav.js') diff --git a/app/assets/javascripts/fly_out_nav.js b/app/assets/javascripts/fly_out_nav.js index 93101f123b5..67a58493fae 100644 --- a/app/assets/javascripts/fly_out_nav.js +++ b/app/assets/javascripts/fly_out_nav.js @@ -1,16 +1,3 @@ -let hideTimeoutInterval = 0; -let hideTimeout; -let subitems; - -export const getHideTimeoutInterval = () => hideTimeoutInterval; - -export const hideAllSubItems = () => { - subitems.forEach((el) => { - el.parentNode.classList.remove('is-over'); - el.style.display = 'none'; // eslint-disable-line no-param-reassign - }); -}; - export const calculateTop = (boundingRect, outerHeight) => { const windowHeight = window.innerHeight; const bottomOverflow = windowHeight - (boundingRect.top + outerHeight); @@ -24,14 +11,8 @@ export const showSubLevelItems = (el) => { if (!$subitems) return; - hideAllSubItems(); - - if (el.classList.contains('is-over')) { - clearTimeout(hideTimeout); - } else { - $subitems.style.display = 'block'; - el.classList.add('is-over'); - } + $subitems.style.display = 'block'; + el.classList.add('is-over'); const boundingRect = el.getBoundingClientRect(); const top = calculateTop(boundingRect, $subitems.offsetHeight); @@ -46,37 +27,20 @@ export const showSubLevelItems = (el) => { export const hideSubLevelItems = (el) => { const $subitems = el.querySelector('.sidebar-sub-level-items'); - const hideFn = () => { - el.classList.remove('is-over'); - $subitems.style.display = 'none'; - $subitems.classList.remove('is-above'); - hideTimeoutInterval = 0; - }; - - if ($subitems && hideTimeoutInterval) { - hideTimeout = setTimeout(hideFn, hideTimeoutInterval); - } else if ($subitems) { - hideFn(); - } -}; + if (!$subitems) return; -export const setMouseOutTimeout = (el) => { - if (el.closest('.sidebar-sub-level-items')) { - hideTimeoutInterval = 250; - } else { - hideTimeoutInterval = 0; - } + el.classList.remove('is-over'); + $subitems.style.display = 'none'; + $subitems.classList.remove('is-above'); }; export default () => { - const items = [...document.querySelectorAll('.sidebar-top-level-items > li:not(.active)')]; - subitems = [...document.querySelectorAll('.sidebar-top-level-items > li:not(.active) .sidebar-sub-level-items')]; + const items = [...document.querySelectorAll('.sidebar-top-level-items > li:not(.active)')] + .filter(el => el.querySelector('.sidebar-sub-level-items')); items.forEach((el) => { el.addEventListener('mouseenter', e => showSubLevelItems(e.currentTarget)); el.addEventListener('mouseleave', e => hideSubLevelItems(e.currentTarget)); }); - - subitems.forEach(el => el.addEventListener('mouseleave', e => setMouseOutTimeout(e.target))); }; -- cgit v1.2.1