Skip to content

Commit 2b97d84

Browse files
committed
Change panels toggle button to checkbox
1 parent 008fe8b commit 2b97d84

3 files changed

Lines changed: 101 additions & 36 deletions

File tree

assets/css/styles.css

Lines changed: 80 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -597,10 +597,26 @@ svg {
597597
}
598598
}
599599

600+
.sr-only {
601+
position: absolute;
602+
width: 1px;
603+
height: 1px;
604+
padding: 0;
605+
margin: -1px;
606+
overflow: hidden;
607+
clip: rect(0, 0, 0, 0);
608+
white-space: nowrap;
609+
border-width: 0;
610+
}
611+
600612
.fixed {
601613
position: fixed;
602614
}
603615

616+
.absolute {
617+
position: absolute;
618+
}
619+
604620
.relative {
605621
position: relative;
606622
}
@@ -621,6 +637,14 @@ svg {
621637
right: 0px;
622638
}
623639

640+
.left-1 {
641+
left: 0.25rem;
642+
}
643+
644+
.top-1 {
645+
top: 0.25rem;
646+
}
647+
624648
.z-50 {
625649
z-index: 50;
626650
}
@@ -703,14 +727,14 @@ svg {
703727
margin-bottom: 1.25rem;
704728
}
705729

706-
.mr-3 {
707-
margin-right: 0.75rem;
708-
}
709-
710730
.ml-1 {
711731
margin-left: 0.25rem;
712732
}
713733

734+
.mr-3 {
735+
margin-right: 0.75rem;
736+
}
737+
714738
.ml-64 {
715739
margin-left: 16rem;
716740
}
@@ -739,14 +763,18 @@ svg {
739763
display: none;
740764
}
741765

742-
.h-20 {
743-
height: 5rem;
766+
.h-6 {
767+
height: 1.5rem;
744768
}
745769

746770
.h-4 {
747771
height: 1rem;
748772
}
749773

774+
.h-20 {
775+
height: 5rem;
776+
}
777+
750778
.min-h-full {
751779
min-height: 100%;
752780
}
@@ -763,6 +791,14 @@ svg {
763791
width: 4rem;
764792
}
765793

794+
.w-10 {
795+
width: 2.5rem;
796+
}
797+
798+
.w-4 {
799+
width: 1rem;
800+
}
801+
766802
.w-20 {
767803
width: 5rem;
768804
}
@@ -771,10 +807,6 @@ svg {
771807
width: 0.75rem;
772808
}
773809

774-
.w-4 {
775-
width: 1rem;
776-
}
777-
778810
.w-24 {
779811
width: 6rem;
780812
}
@@ -836,6 +868,10 @@ svg {
836868
align-items: center;
837869
}
838870

871+
.justify-center {
872+
justify-content: center;
873+
}
874+
839875
.justify-between {
840876
justify-content: space-between;
841877
}
@@ -982,6 +1018,11 @@ svg {
9821018
background-color: rgb(226 232 240 / var(--tw-bg-opacity));
9831019
}
9841020

1021+
.bg-gray-300 {
1022+
--tw-bg-opacity: 1;
1023+
background-color: rgb(209 213 219 / var(--tw-bg-opacity));
1024+
}
1025+
9851026
.bg-sky-500 {
9861027
--tw-bg-opacity: 1;
9871028
background-color: rgb(14 165 233 / var(--tw-bg-opacity));
@@ -1418,6 +1459,12 @@ svg {
14181459
--tw-ring-color: rgb(125 211 252 / var(--tw-ring-opacity));
14191460
}
14201461

1462+
.transition-transform {
1463+
transition-property: transform;
1464+
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
1465+
transition-duration: 150ms;
1466+
}
1467+
14211468
.select {
14221469
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%231f2937' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e");
14231470
background-repeat: no-repeat;
@@ -1911,3 +1958,26 @@ svg {
19111958
.\[\&\:last-child\>\*\]\:border-0:last-child>* {
19121959
border-width: 0px;
19131960
}
1961+
1962+
.\[\&\:checked\~\.dot\]\:translate-x-full:checked~.dot {
1963+
--tw-translate-x: 100%;
1964+
transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
1965+
}
1966+
1967+
.\[\&\:checked\~\.dot\]\:bg-gray-900:checked~.dot {
1968+
--tw-bg-opacity: 1;
1969+
background-color: rgb(17 24 39 / var(--tw-bg-opacity));
1970+
}
1971+
1972+
.\[\&\:checked\~\.dot\]\:text-white:checked~.dot {
1973+
--tw-text-opacity: 1;
1974+
color: rgb(255 255 255 / var(--tw-text-opacity));
1975+
}
1976+
1977+
.\[\&\:checked\~\.dot\>\.open\]\:block:checked~.dot>.open {
1978+
display: block;
1979+
}
1980+
1981+
.\[\&\:checked\~\.dot\>\.close\]\:hidden:checked~.dot>.close {
1982+
display: none;
1983+
}

assets/js/scripts.js

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -56,36 +56,27 @@ document.querySelectorAll('[data-panel]').forEach(panel => {
5656

5757
let toggle_panels = document.getElementById('toggle-panels');
5858
if (toggle_panels) {
59-
let text = toggle_panels.querySelector('.text');
6059
let current_dashboard = document.querySelector('[data-dashboard]');
6160
let panels_state = 'panels_state_' + current_dashboard.dataset.dashboard;
62-
let open_state = 'open_' + current_dashboard.dataset.dashboard;
63-
let close_state = 'close_' + current_dashboard.dataset.dashboard;
6461

6562
if (!(panels_state in localStorage)) {
66-
localStorage.setItem(panels_state, open_state);
63+
localStorage.setItem(panels_state, 'open');
6764
}
6865

69-
if (localStorage.getItem(panels_state) === close_state) {
70-
text.innerHTML = 'Show panels';
71-
toggle_panels.querySelector('.icon-open').classList.remove('hidden');
72-
toggle_panels.querySelector('.icon-close').classList.add('hidden');
66+
if (localStorage.getItem(panels_state) === 'close') {
67+
toggle_panels.checked = true;
7368
document.getElementById('infopanels').style.display = 'none';
7469
}
7570

7671
toggle_panels.addEventListener('click', () => {
77-
if (localStorage.getItem(panels_state) === open_state) {
78-
text.innerHTML = 'Show panels';
79-
toggle_panels.querySelector('.icon-open').classList.remove('hidden');
80-
toggle_panels.querySelector('.icon-close').classList.add('hidden');
72+
if (localStorage.getItem(panels_state) === 'open') {
73+
toggle_panels.checked = true;
8174
document.getElementById('infopanels').style.display = 'none';
82-
localStorage.setItem(panels_state, close_state);
75+
localStorage.setItem(panels_state, 'close');
8376
} else {
84-
text.innerHTML = 'Hide panels';
85-
toggle_panels.querySelector('.icon-open').classList.add('hidden');
86-
toggle_panels.querySelector('.icon-close').classList.remove('hidden');
77+
toggle_panels.checked = false;
8778
document.getElementById('infopanels').style.display = 'block';
88-
localStorage.setItem(panels_state, open_state);
79+
localStorage.setItem(panels_state, 'open');
8980
}
9081
});
9182
}

templates/partials/info.twig

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,23 @@
11
{% if extension_version %}
2-
<div class="text-xl mb-5">
2+
<div class="text-xl mb-3">
33
PHP <span class="font-semibold">{{ title }}</span> extension
44
{{ include('components/badge.twig', {text: 'v' ~ extension_version, text_sm: true, bg: 'bg-' ~ color ~ '-500'}) }}
55
</div>
66
{% endif %}
77

88
{% if panels_toggler is not defined %}
9-
<div class="mb-3">
10-
<button type="button" id="toggle-panels"
11-
class="shadow text-xs py-1.5 px-3 text-white focus:ring-4 bg-{{ color }}-500 hover:bg-{{ color }}-600 focus:ring-{{ color }}-300 font-semibold rounded inline-flex items-center">
12-
<span class="text mr-1">Hide panels</span>
13-
<span class="icon-open hidden">{{ svg('open') }}</span>
14-
<span class="icon-close">{{ svg('close') }}</span>
15-
</button>
16-
</div>
9+
<label for="toggle-panels" class="flex items-center cursor-pointer mb-3">
10+
<span class="relative block bg-gray-300 w-10 h-6 rounded-full">
11+
<input type="checkbox" id="toggle-panels"
12+
class="sr-only [&:checked~.dot]:translate-x-full
13+
[&:checked~.dot]:bg-gray-900 [&:checked~.dot]:text-white [&:checked~.dot>.open]:block [&:checked~.dot>.close]:hidden">
14+
<span class="dot absolute left-1 top-1 bg-gray-50 w-4 h-4 rounded-full transition-transform inline-flex items-center justify-center">
15+
{{ svg('open', 10, 'open hidden') }}
16+
{{ svg('close', 10, 'close') }}
17+
</span>
18+
</span>
19+
<span class="ml-1 text-sm">Toggle panels</span>
20+
</label>
1721
{% endif %}
1822

1923
{% if info.panels %}

0 commit comments

Comments
 (0)