diff --git a/static/css/utils/asidenav.scss b/static/css/utils/asidenav.scss index 1ac580d58..101bf5506 100644 --- a/static/css/utils/asidenav.scss +++ b/static/css/utils/asidenav.scss @@ -55,10 +55,6 @@ .asidenav__box-title { font-size: 18px; padding-left: 10px; - - &.js-show-hide__toggle::before { - z-index: 1; - } } } } @@ -94,18 +90,9 @@ margin-top: 30px; background-color: transparent; transition: all .2s ease; - padding: 30px 13px 10px; + padding: 10px 13px; margin: 0; border-bottom: 1px solid var(--color-grey); - - &.js-show-hide__toggle { - - &::before { - left: auto; - right: 20px; - color: var(--color-font); - } - } } /* LOGO */ @@ -361,9 +348,5 @@ background-color: var(--color-lightwhite); } } - - .js-show-hide__toggle::before { - content: none; - } } } diff --git a/static/css/utils/showHide.scss b/static/css/utils/showHide.scss index ab82286b8..1f85fbf36 100644 --- a/static/css/utils/showHide.scss +++ b/static/css/utils/showHide.scss @@ -1,10 +1,9 @@ $show-hide-toggle-size: 6px; -.js-show-hide__toggle { +.show-hide__toggle { position: relative; cursor: pointer; - padding: 3px 7px; &:hover { background-color: var(--color-grey-lighter); @@ -12,32 +11,33 @@ $show-hide-toggle-size: 6px; } } -.js-show-hide__toggle::before { +.show-hide__toggle::before { content: ''; position: absolute; width: $show-hide-toggle-size; height: $show-hide-toggle-size; left: -15px; - top: 12px - $show-hide-toggle-size / 2; + top: 50%; color: var(--color-primary); border-right: 2px solid currentColor; border-top: 2px solid currentColor; transition: transform .2s ease; - transform-origin: ($show-hide-toggle-size / 2); - transform: translateY($show-hide-toggle-size) rotate(-45deg); + transform: translateY(-50%) rotate(-45deg); } -.js-show-hide__target { - transition: all .2s ease; +.show-hide__toggle--right::before { + left: auto; + right: 20px; + color: var(--color-font); } -.js-show-hide--collapsed { +.show-hide--collapsed { - .js-show-hide__toggle::before { - transform: translateY($show-hide-toggle-size / 3) rotate(135deg); + .show-hide__toggle::before { + transform: translateY(-50%) rotate(135deg); } - .js-show-hide__target { + :not(.show-hide__toggle) { display: block; height: 0; margin: 0; diff --git a/static/js/utils/modal.js b/static/js/utils/modal.js index a5971edf7..50307f3db 100644 --- a/static/js/utils/modal.js +++ b/static/js/utils/modal.js @@ -2,6 +2,20 @@ 'use strict'; window.utils = window.utils || {}; + // ######################## + // TODO: make use of selector + // or think of a different way to dynamically initialize widgets + // with selectors with specific ids like #modal-hident69 + // + // Idee: + // Alles wegschmeißen zu dynamischen IDs. Util init rein über Selector '[uw-...]' + // bedarf Änderung in Templates. + // Ausserdem müssen sich Utils bei Event 'util-setup-ready' registrieren als Util + // utils.setup wird dann überflüssig, bzw. wird zu einer Registry / Controller + // der die utils bei DomCOntentLoaded intialisiert. + // + // ######################## + var SELECTOR = '[uw-modal]'; var JS_INITIALIZED_CLASS = 'js-modal-initialized'; var MODAL_OPEN_CLASS = 'modal--open'; @@ -17,7 +31,7 @@ var OVERLAY_OPEN_CLASS = 'modal__overlay--open'; var CLOSER_CLASS = 'modal__closer'; - window.utils.modal = function(modalElement, options) { + window.utils.modal = function(scope, options) { if (!modalElement || modalElement.classList.contains(JS_INITIALIZED_CLASS)) { return; diff --git a/static/js/utils/registry.js b/static/js/utils/registry.js index 775b58fe4..9acff588d 100644 --- a/static/js/utils/registry.js +++ b/static/js/utils/registry.js @@ -55,7 +55,14 @@ const elements = _findUtilElements(util, scope); elements.forEach(function(element) { - var utilInstance = util.setup(element); + var utilInstance = null; + + try { + utilInstance = util.setup(element); + } catch(err) { + console.warn('Error while trying to initialize a utility!', { util , element, err }); + } + if (utilInstance) { activeUtilInstances.push(utilInstance); } diff --git a/static/js/utils/showHide.js b/static/js/utils/showHide.js index 6689b83bd..cd3a6e4ac 100644 --- a/static/js/utils/showHide.js +++ b/static/js/utils/showHide.js @@ -1,98 +1,113 @@ (function() { 'use strict'; - var UTIL_NAME = 'showHide'; - var UTIL_SELECTOR = '[uw-show-hide]'; + var SHOW_HIDE_UTIL_NAME = 'showHide'; + var SHOW_HIDE_UTIL_SELECTOR = '[uw-show-hide]'; - var JS_INITIALIZED_CLASS = 'js-show-hide-initialized'; - var LOCAL_STORAGE_SHOW_HIDE = 'SHOW_HIDE'; - var SHOW_HIDE_COLLAPSED_CLASS = 'js-show-hide--collapsed'; - var SHOW_HIDE_TARGET_CLASS = 'js-show-hide__target'; + var SHOW_HIDE_LOCAL_STORAGE_KEY = 'SHOW_HIDE'; + var SHOW_HIDE_INITIALIZED_CLASS = 'show-hide--initialized'; + var SHOW_HIDE_COLLAPSED_CLASS = 'show-hide--collapsed'; + var SHOW_HIDE_TOGGLE_CLASS = 'show-hide__toggle'; + var SHOW_HIDE_TOGGLE_RIGHT_CLASS = 'show-hide__toggle--right'; /** + * + * ShowHide Utility + * + * Attribute: uw-show-hide + * + * Params: (all optional) + * data-show-hide-id: string + * If this param is given the state of the utility will be persisted in the clients local storage. + * data-show-hide-collapsed: boolean property + * If this param is present the ShowHide utility will be collapsed. This value will be overruled by any value stored in the LocalStorage. + * data-show-hide-align: 'right' + * Where to put the arrow that marks the element as a ShowHide toggle. Left of toggle by default. + * + * Example usage: *