diff --git a/static/js/utils/showHide.js b/static/js/utils/showHide.js index 094ff1d5c..9f7a4a4df 100644 --- a/static/js/utils/showHide.js +++ b/static/js/utils/showHide.js @@ -3,6 +3,7 @@ window.utils = window.utils || {}; + var JS_INITIALIZED_CLASS = 'js-show-hide-initialized'; var LOCAL_STORAGE_SHOW_HIDE = 'SHOW_HIDE'; var SHOW_HIDE_TOGGLE_CLASS = 'js-show-hide__toggle'; var SHOW_HIDE_COLLAPSED_CLASS = 'js-show-hide--collapsed'; @@ -18,7 +19,6 @@ window.utils.showHide = function(wrapper, options) { options = options || {}; - // make function addEventHandler(el) { el.addEventListener('click', function elClickListener() { @@ -31,32 +31,41 @@ if (!index) { return false; } - var lsData = fromLocalStorage(); + var lsData = getLocalStorageData(); lsData[index] = state; window.localStorage.setItem(LOCAL_STORAGE_SHOW_HIDE, JSON.stringify(lsData)); } function collapsedStateInLocalStorage(index) { - return fromLocalStorage()[index] || null; + var lsState = getLocalStorageData(); + return lsState[index]; } - function fromLocalStorage() { + function getLocalStorageData() { return JSON.parse(window.localStorage.getItem(LOCAL_STORAGE_SHOW_HIDE)) || {}; } Array .from(wrapper.querySelectorAll('.' + SHOW_HIDE_TOGGLE_CLASS)) .forEach(function(el) { + if (el.classList.contains(JS_INITIALIZED_CLASS)) { + return false; + } + var index = el.dataset.shIndex || null; - el.parentElement.classList.toggle( - SHOW_HIDE_COLLAPSED_CLASS, - collapsedStateInLocalStorage(index) || el.dataset.collapsed === 'true' - ); + var isCollapsed = el.dataset.collapsed === 'true'; + var lsCollapsedState = collapsedStateInLocalStorage(index); + if (typeof lsCollapsedState !== 'undefined') { + isCollapsed = lsCollapsedState; + } + el.parentElement.classList.toggle(SHOW_HIDE_COLLAPSED_CLASS, isCollapsed); + Array.from(el.parentElement.children).forEach(function(el) { if (!el.classList.contains('' + SHOW_HIDE_TOGGLE_CLASS)) { el.classList.add(SHOW_HIDE_TARGET_CLASS); } }); + el.classList.add(JS_INITIALIZED_CLASS); addEventHandler(el); }); diff --git a/templates/table/layout-filter-default.hamlet b/templates/table/layout-filter-default.hamlet index d09a586af..b4a9641e1 100644 --- a/templates/table/layout-filter-default.hamlet +++ b/templates/table/layout-filter-default.hamlet @@ -1,6 +1,6 @@ $newline never