show-hide cleanup and more interactive asidenav
This commit is contained in:
parent
ef4bfad40e
commit
8f9ddd1137
@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* div.js-show-hide
|
* div
|
||||||
* div.js-show-hide-toggle
|
* div.js-show-hide__toggle
|
||||||
* toggle here
|
* toggle here
|
||||||
* div
|
* div
|
||||||
* content here
|
* content here
|
||||||
@ -9,42 +9,19 @@
|
|||||||
document.addEventListener('DOMContentLoaded', function() {
|
document.addEventListener('DOMContentLoaded', function() {
|
||||||
|
|
||||||
var elements = Array.from(document.querySelectorAll('.js-show-hide__toggle')),
|
var elements = Array.from(document.querySelectorAll('.js-show-hide__toggle')),
|
||||||
toggles = [],
|
toggles = [];
|
||||||
path = new URL(window.location.href).pathname;
|
|
||||||
|
|
||||||
|
|
||||||
function addEventHandler(el) {
|
function addEventHandler(el) {
|
||||||
el.addEventListener('click', function elClickListener() {
|
el.addEventListener('click', function elClickListener() {
|
||||||
var toggle = toggles[el.dataset.index];
|
var toggle = toggles[el.dataset.index];
|
||||||
toggle.collapsed = !toggle.collapsed;
|
toggle.collapsed = !toggle.collapsed;
|
||||||
toggle.parent.classList.toggle('js-show-hide--collapsed', toggle.collapsed);
|
toggle.parent.classList.toggle('js-show-hide--collapsed', toggle.collapsed);
|
||||||
updateLocalStorage();
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateLocalStorage(id) {
|
|
||||||
var lsData = getStateFromLocalStorage();
|
|
||||||
lsData[path] = toggles.map(t => {
|
|
||||||
return {id: t.index, collapsed: t.collapsed};
|
|
||||||
});
|
|
||||||
window.localStorage.setItem('showHidesToggles', JSON.stringify(lsData));
|
|
||||||
}
|
|
||||||
|
|
||||||
function collapsedStateInLocalStorage(id, fallBack) {
|
|
||||||
var lsData = getStateFromLocalStorage();
|
|
||||||
if (lsData[path] && lsData[path][id] && lsData[path][id].id === id) {
|
|
||||||
return lsData[path][id].collapsed;
|
|
||||||
}
|
|
||||||
return fallBack;
|
|
||||||
}
|
|
||||||
|
|
||||||
function getStateFromLocalStorage() {
|
|
||||||
return JSON.parse(window.localStorage.getItem('showHidesToggles')) || {};
|
|
||||||
}
|
|
||||||
|
|
||||||
elements.forEach(function(el, i) {
|
elements.forEach(function(el, i) {
|
||||||
el.dataset.index = i;
|
el.dataset.index = i;
|
||||||
var coll = collapsedStateInLocalStorage(i, el.dataset.collapsed === 'true');
|
var coll = el.dataset.collapsed === 'true';
|
||||||
if (coll) {
|
if (coll) {
|
||||||
el.parentElement.classList.add('js-show-hide--collapsed')
|
el.parentElement.classList.add('js-show-hide--collapsed')
|
||||||
}
|
}
|
||||||
|
|||||||
@ -4,9 +4,6 @@
|
|||||||
|
|
||||||
.js-show-hide__toggle {
|
.js-show-hide__toggle {
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
|
||||||
|
|
||||||
.js-show-hide__toggle:hover {
|
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -15,35 +12,33 @@
|
|||||||
position: absolute;
|
position: absolute;
|
||||||
width: 0;
|
width: 0;
|
||||||
height: 0;
|
height: 0;
|
||||||
border-right: 8px solid transparent;
|
|
||||||
border-bottom: 8px solid transparent;
|
|
||||||
}
|
|
||||||
|
|
||||||
.js-show-hide__toggle::before,
|
|
||||||
.js-show-hide--collapsed .js-show-hide__toggle:hover::before {
|
|
||||||
left: -28px;
|
left: -28px;
|
||||||
top: 10px;
|
top: 6px;
|
||||||
border-left: 8px solid transparent;
|
color: var(--color-primary);
|
||||||
border-top: 8px solid var(--color-light);
|
border-right: 8px solid transparent;
|
||||||
}
|
|
||||||
|
|
||||||
.js-show-hide__toggle:hover::before,
|
|
||||||
.js-show-hide--collapsed .js-show-hide__toggle::before {
|
|
||||||
border-left: 8px solid var(--color-light);
|
|
||||||
border-top: 8px solid transparent;
|
border-top: 8px solid transparent;
|
||||||
top: 5px;
|
border-left: 8px solid transparent;
|
||||||
left: -22px;
|
border-bottom: 8px solid currentColor;
|
||||||
|
transition: transform .2s ease;
|
||||||
|
transform-origin: 8px 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.js-show-hide__target {
|
.js-show-hide__target {
|
||||||
transition: all .2s ease;
|
transition: all .2s ease;
|
||||||
overflow: hidden;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.js-show-hide--collapsed > .js-show-hide__target {
|
.js-show-hide--collapsed {
|
||||||
display: block;
|
|
||||||
height: 0;
|
.js-show-hide__toggle::before {
|
||||||
margin: 0;
|
transform: rotate(180deg);
|
||||||
padding: 0;
|
}
|
||||||
max-height: 0;
|
|
||||||
|
.js-show-hide__target {
|
||||||
|
display: block;
|
||||||
|
height: 0;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
max-height: 0;
|
||||||
|
overflow-y: hidden;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,9 +1,9 @@
|
|||||||
$newline never
|
$newline never
|
||||||
<aside .main__aside>
|
<aside .main__aside>
|
||||||
<div .asidenav>
|
<div .asidenav>
|
||||||
<div .asidenav__box>
|
$forall tid@TermIdentifier{..} <- favouriteTerms
|
||||||
$forall tid@TermIdentifier{..} <- favouriteTerms
|
<div .asidenav__box>
|
||||||
<h3 .asidenav__box-title>
|
<h3 .asidenav__box-title.js-show-hide__toggle>
|
||||||
$case season
|
$case season
|
||||||
$of Winter
|
$of Winter
|
||||||
_{MsgWinterTermShort year}
|
_{MsgWinterTermShort year}
|
||||||
|
|||||||
@ -36,6 +36,15 @@
|
|||||||
&:not(.main__aside--expanded) {
|
&:not(.main__aside--expanded) {
|
||||||
transform: translateX(-110%);
|
transform: translateX(-110%);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.asidenav__box-title {
|
||||||
|
font-size: 18px;
|
||||||
|
padding-left: 10px;
|
||||||
|
|
||||||
|
&.js-show-hide__toggle::before {
|
||||||
|
top: 25px;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -45,6 +54,10 @@
|
|||||||
|
|
||||||
.asidenav__box {
|
.asidenav__box {
|
||||||
transition: opacity .2s ease;
|
transition: opacity .2s ease;
|
||||||
|
|
||||||
|
+ .asidenav__box {
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.asidenav__box-title {
|
.asidenav__box-title {
|
||||||
@ -54,7 +67,17 @@
|
|||||||
transition: all .2s ease;
|
transition: all .2s ease;
|
||||||
padding: 30px 13px 10px;
|
padding: 30px 13px 10px;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
background-color: var(--color-darker);
|
border-bottom: 1px solid var(--color-lightwhite);
|
||||||
|
|
||||||
|
&.js-show-hide__toggle {
|
||||||
|
|
||||||
|
&::before {
|
||||||
|
left: auto;
|
||||||
|
right: 20px;
|
||||||
|
top: 30px;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.asidenav__list-item {
|
.asidenav__list-item {
|
||||||
@ -87,10 +110,6 @@
|
|||||||
width: 200px;
|
width: 200px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
+ .asidenav__list-item {
|
|
||||||
margin-top: 4px;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* small list-item-padding for medium to large screens */
|
/* small list-item-padding for medium to large screens */
|
||||||
@ -173,8 +192,8 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* STATE COLLAPSED */
|
/* TABLET */
|
||||||
@media (max-width: 768px) and (min-width: 425px) {
|
@media (min-width: 425px) and (max-width: 768px) {
|
||||||
|
|
||||||
.main__aside {
|
.main__aside {
|
||||||
width: 50px;
|
width: 50px;
|
||||||
@ -187,6 +206,8 @@
|
|||||||
font-size: 18px;
|
font-size: 18px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
padding: 10px 1px;
|
padding: 10px 1px;
|
||||||
|
word-break: break-all;
|
||||||
|
background-color: var(--color-darker);
|
||||||
}
|
}
|
||||||
|
|
||||||
.asidenav__link-shorthand {
|
.asidenav__link-shorthand {
|
||||||
@ -233,5 +254,8 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.js-show-hide__toggle::before {
|
||||||
|
content: none;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user