Skip to content

Instantly share code, notes, and snippets.

@Septdir
Last active April 23, 2024 09:19
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Septdir/808504e255508306c3f2427beebcf727 to your computer and use it in GitHub Desktop.
Save Septdir/808504e255508306c3f2427beebcf727 to your computer and use it in GitHub Desktop.
Joomla! 5.1 Control panel change color scheme.

Русский

Создайте модуль HTML для панели управления в позиции status и вставите туда код

English

Create an HTML module for the control panel in the 'status' position and insert the code there.

<div class="header-item-content dms-button" data-color-scheme-changer="container">
<button type="button" class="header-item-icon bg-transparent border-0" data-color-scheme-changer="light">
<span style="margin: 3px; font-size: 1.2rem; transition: all .6s ease;">☀️</span>
</button>
<button type="button" class="header-item-icon bg-transparent border-0" data-color-scheme-changer="dark">
<span style="margin: 3px; font-size: 1.2rem; transition: all .6s ease;">🌙</span>
</button>
<button type="button" class="header-item-icon bg-transparent border-0" data-color-scheme-changer="auto">
<span style="margin: 3px; font-size: 1.2rem; transition: all .6s ease;">🌓</span>
</button>
</div>
<script>
(() => {
'use strict';
let documentElement = document.documentElement;
function changeScheme(colorScheme = 'light') {
if (colorScheme !== 'light' && colorScheme !== 'dark') {
return;
}
if (documentElement.dataset.colorScheme === colorScheme) {
return;
}
documentElement.dataset.colorScheme = colorScheme;
document.cookie = 'userColorScheme=' + colorScheme + '; SameSite=Strict;';
documentElement.dataset.colorScheme = colorScheme;
document.dispatchEvent(new CustomEvent('joomla:color-scheme-change', {bubbles: true}));
}
function initialization() {
checkButtons();
loadAutoScheme();
document.querySelectorAll('button[data-color-scheme-changer]').forEach((button) => {
let buttonScheme = button.getAttribute('data-color-scheme-changer');
button.addEventListener('click', (event) => {
event.preventDefault();
if (buttonScheme === 'dark' || buttonScheme === 'light') {
setLocalStorageValue(buttonScheme);
changeScheme(buttonScheme);
checkButtons();
} else if (buttonScheme === 'auto') {
setLocalStorageValue('auto');
loadAutoScheme();
checkButtons();
}
})
});
}
function loadAutoScheme() {
if (getLocalStorageValue() !== 'auto') {
return;
}
let hour = new Date().getHours(),
scheme = (hour >= 7 && hour < 19) ? 'light' : 'dark';
changeScheme(scheme);
}
function checkButtons() {
let currentScheme = getLocalStorageValue();
document.querySelectorAll('button[data-color-scheme-changer]').forEach((button) => {
if (button.getAttribute('data-color-scheme-changer') === currentScheme) {
button.style.opacity = 1;
} else {
button.style.opacity = 0.3;
}
})
}
function getLocalStorageValue() {
let storageValue = localStorage.getItem('colorSchemeChanger');
if (!storageValue && documentElement.dataset.colorScheme) {
storageValue = documentElement.dataset.colorScheme;
setLocalStorageValue(storageValue)
} else if (!storageValue) {
storageValue = 'light';
}
if (!documentElement.dataset.colorScheme && storageValue !== 'auto') {
changeScheme(storageValue);
}
return storageValue;
}
function setLocalStorageValue(value) {
localStorage.setItem('colorSchemeChanger', value);
}
document.addEventListener('DOMContentLoaded', initialization);
document.addEventListener('joomla:color-scheme-change', () => {
getLocalStorageValue();
checkButtons();
});
})();
</script>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment