-
March 14th, 2024, 20:15
#1
عضو جدید
قابلیت دارک مود جوملا ۵
این قابلیت جدید در جوملا ۵ به ظاهر خیلی زیبا و قابلیتی با یوایکس جذاب به شمار میرود. اما این قابلیت به دو دلیل فعلا آزار دهنده شده است. و اما دو دلیل
۱. دستور از سیستم
مشکلی اول این سیستم دارک مود در نسخهی ۵ جوملا، بهرهگیری از سیستمعامل یا مرورگر برا ایجاد دارک مود روی سایت است. به عبارتی شما گزینهای برای غیر فعال کردن این قابلیت ندارید مگر اینکه کلا سیستم عامل خود را در حالت Light قرار دهید.
۲. عدم سازگاری
هنوز افزونههای خود جوملا و حتی قالب جوملا درک درستی از دارک مود ندارند و برخی از نوشتهها در حالت دارک مود به یک حالت ناخوانا نمایش داده میشوند. هر چند که دستورات باید توسط CSS های خود قالب باطل شوند چرا که دارک مود ویندوز چندان جالب نیست و خوانایی جداول و دکمهها سخت و دشوار است.
خبر خوب این است که کنترل دارک مود قرار است در بخش قالب جوملا قابل کنترل شود و دکمهی غیر فعال کردن این ویژگی اضافه شود. همچنین سازگاری افزونهها نیز بهبود پیدا کند.
راهکارها:
- غیر فعال کردن دارک مود ویندوز: سادهترین روش که شاید برای علاقهمندان به زمینهی مشکی چندان جالب نباشد، غیر فعال کردن این ویژگی در ویندوز است. ناگفته نماند که دارک مود ویندوز هم چنگی به دل نمیزند و ممکن است برخی از المانها مانند رنگ متن دکمههایی که بک گراند سفید دارند را سفید نشان دهد.
- تغییر استایلهای قالب پیشفرض مدیریت: با این روش شما المانهایی که برای دارک مود خوب نمایش نمیدهد را مثتثنی میکنید و استایلهای جداگانهای برای آن مینویسید. برای مثال جداول در برخی از افزونهها به خوبی نمایش نمیدهد. شما میتوانید سلکتور مورد نظر را انتخاب کرده و به آن استایل سفارشی بدهید. این راهکار موقت است تا زمانی که افزونهها همگی برای جوملا ۵ سازگار شوند و دارک مود را به رسمیت بشناسند.
- ایجاد یک دکمهی سفارشی در پنل مدیریت: برای اینکار ابتدا ویرایشگر خود را در حالت Code Mirror قرار دهید و به قسمت مدیریت ماژولهای مدیریت بروید.
سپس یک ماژول از نوع Custom HTML یا همان HTML سفارشی ایجاد کنید و یک عنوان دلخواه برای آن بگذارید.
کد زیر را در محتوای HTML وارد کنید و ماژول را در موقعیت Status و با سطح دسترسی Special قرار دهید:
کد PHP:
<button type="button" class="header-item-content dms-button" style="border: none;">
<span class="header-item-icon">
<span style="margin: 3px; font-size: 1.2rem; transition: all .6s ease;">🌓</span>
</span>
<span class="header-item-text">Dark Mode Switcher</span>
</button>
(() => {
'use strict';
// Run script only once
if (typeof window.jDarkMode !== "undefined") return;
// Initial settings
let darkMode = window.jDarkMode = (getDarkModeLocalStorage() === "true");
setDarkModeLocalStorage(darkMode);
// Update the first visible "Dark Mode Switcher" button to avoid flickering
updateButton(document.querySelector("button.dms-button"), darkMode);
updateMode(darkMode);
function updateButton(btn, darkMode) {
const icon = btn.querySelector(".header-item-icon > span");
const text = btn.querySelector(".header-item-text");
if (darkMode) {
icon = "🌙"
icon.style.backgroundColor = "rgb(31, 48, 71)"
text = " Dark Mode"
} else {
icon = "☀️"
icon.style.backgroundColor = "transparent"
text = "Light Mode"
}
}
function updateMode(darkMode) {
for (const sheet of document.styleSheets) {
//if (sheet.href && sheet.href.includes("atum/css/template")) {
for (let i = sheet.cssRules.length - 1; i >= 0; i--) {
let rule = sheet.cssRules[i].media;
if (typeof rule !== "undefined" && rule.mediaText.includes("prefers-color-scheme")) {
if (darkMode) {
if (!rule.mediaText.includes("(prefers-color-scheme: light)")) rule.appendMedium("(prefers-color-scheme: light)");
if (!rule.mediaText.includes("(prefers-color-scheme: dark)")) rule.appendMedium("(prefers-color-scheme: dark)");
if (rule.mediaText.includes("original")) rule.deleteMedium("original-prefers-color-scheme");
} else { //else if (!darkMode) {
rule.appendMedium("original-prefers-color-scheme");
if (rule.mediaText.includes("light")) rule.deleteMedium("(prefers-color-scheme: light)");
if (rule.mediaText.includes("dark")) rule.deleteMedium("(prefers-color-scheme: dark)");
} /*else {
rule.appendMedium("(prefers-color-scheme: dark)");
if (rule.mediaText.includes("light")) rule.deleteMedium("(prefers-color-scheme: light)");
if (rule.mediaText.includes("original")) rule.deleteMedium("original-prefers-color-scheme");
}*/
}
}
//}
}
}
// Sets localStorage state
function setDarkModeLocalStorage(state) {
localStorage.setItem("jDarkMode", state);
}
// Gets localStorage state
function getDarkModeLocalStorage() {
return localStorage.getItem("jDarkMode");
}
// Update all "Dark Mode Switcher" buttons after DOMContentLoaded
document.addEventListener('DOMContentLoaded', () => {
const dmsBtns = document.querySelectorAll("button.dms-button");
dmsBtns.forEach((dmsBtn) => {
updateButton(dmsBtn, darkMode);
// Set eventListeners for all "dark-mode"-toggle-buttons on click and set localStorage
dmsBtn.addEventListener("click", () => {
let darkMode = window.jDarkMode = (getDarkModeLocalStorage() === "false");
setDarkModeLocalStorage(darkMode);
dmsBtns.forEach((dmsBtn) => updateButton(dmsBtn, darkMode));
updateMode(darkMode);
});
});
});
})();
با این کد یک دکمه در موقعیت status ایجاد میشود که با کلیک روی آن به حالت لایت و دارک سوییچ میشود.
البته همهی این راهکارها موقت است و بزودی در نسخههای جدید شاهد بهبود وضعیت این قابلیت خواهیم بود.
منبع: ویرگول جوملا
-
-
March 14th, 2024 20:15
# ADS