Объединенный скрипт смены темы и переключения мобильного дизайна

Автоматическое применение тёмной темы, если на устройстве установлен dark mode
Встроенная кнопка переключения между мобильной и десктопной версиями
Сохранение выбранных настроек в локальном хранилище браузера
Подготовка:
Подразумевается, что мобильный дизайн у вас имеется и сделан с использованием медиа-запросов, а не подключением дополнительного файла стилей
1. Удалить иные переключатели темы/мобильного режима
2. Проверить, что в Администрировании -> Настройки включена вставка viewport. Без него скрипт работать не будет.

Установка:
Формы -> HTML-верх (самое начало)
Темы задаются в массиве window.gscript.themes двумя параметрами:
name -- название латиницей, без спецсимволов. Соответствует названию класса в используемой перекраске;
color -- цвет кнопки в любом удобном цветовом формате.
{ name: "light", color: "#9d9a96" },
| Тем может быть сколько угодно, новые добавляются в том же формате через запятую. ВАЖНО! При редактировании не забывайте фигурные скобки и запятые, это обязательно для корректной работы скрипта. |
Базовая настройка:
1. В переменную window.gscript.defaultTheme записать название той темы (из вашего предварительно настроенного списка тем), которая будет показываться пользователю по умолчанию. Если этот параметр отсутствует, темой по умолчанию станет первая в списке. Пример:
window.gscript.defaultTheme="light";
2. В переменную window.gscript.darkTheme записать название тёмной темы (из вашего предварительно настроенного списка тем). Даже если у вас всего две темы и ни одна из не тёмная по-настоящему, одну из них нужно назначить тёмной. Пример:
window.gscript.darkTheme="dark";
ВАЖНО! Если этот параметр отсутствует, скрипт будет пытаться применить тему с названием "dark", и форум, возможно, будет отображаться некорректно.
Как это будет работать? При нажатии на кнопку темы к элементу body применится соответствующий класс (или дата-атрибут к html, об этом ниже). Если тема называется UltimateThemeSecond, добавится класс UltimateThemeSecond и так далее.
Кнопка мобильной/полной версии отображается только для устройств с размером экрана меньше 768px. Регулируется этой частью кода, которую можно при желании унести в файл стилей:
@media (min-device-width: 768px) { /* скрывать кнопки переключения версий на десктопе */
#vtlThemeSelector .gv-viewport-toggler {
display: none;
}
}
Где появятся кнопки? без дополнительных стилей и настроек они будут болтаться в конце элемента body, то есть левом нижнем углу сайта, под всеми элементами. Если необходимо добавить кнопки, например, в объявление, то в нужное место разметки вставляем элемент-обёртку (альтернативный вариант описан ниже):
ВАЖНО! элемент-обёртка обязателен, если переключатель нужен в подвале форума (html-низ)
Продвинутая (необязательная) настройка:
Если параметры не заданы, то используются значения по умолчанию
window.gscript.fullVerText значение по умолчанию: full version | текст, который будет отображаться на кнопке перехода на полную версию. |
window.gscript.mobVerText значение по умолчанию: mobile version | текст, который будет отображаться на кнопке перехода в мобильную версию |
window.gscript.appendTo значение по умолчанию: body | CSS-селектор элемента, в самый конец которого который добавится панель выбора темы (например, "#html-header"). Если на странице уже есть элемент с id vtlThemeSelector, параметр игнорируется. |
window.gscript.scaleDesktop значение по умолчанию: 0.36 | коэфициент для десктопного вида -- дробное число c точкой в качестве десятичного разделителя. Как его рассчитать Поделить ширину мобильного устройства на ширину желательной области просмотра и округлить до двух знаков после запятой. При просмотре форума на устройстве с шириной экрана 375px коэффициент 0.36 примерно соответствует ширине области просмотра в 1040px и т.д.
|
window.gscript.useDataAttr значение по умолчанию: false | Указывает скрипту, что нужно добавлять не класс к body, а атрибут вида data-theme="themeName" к html. Как использовать в CSS :root { --color: black; } :root[data-theme="red"] { --color: red; }
Миграция с класса на атрибут: .dark --> [data-theme="dark"] body.dark --> [data-theme="dark"] body
|
Стилизация:
По умолчанию никаких стилей со скриптом не идет, кроме скрытия кнопки переключения размеров на десктопе, чтобы можно было настроить всё по своему вкусу. Примеры, как можно стилизовать:
1. Самый простой вариант, цветные кнопки, минимум оформления
активна синяя тема, мобильный режим
 | активна темная тема, режим десктопа
 |
полный код скрипта с настройками
код стилей
вставляется в первое окно стилей или в html-верх в теги <style>
2. Вариант немного посложнее, с иконками
активна светлая тема, мобильный режим
 | активна темная тема, режим десктопа
 |
полный код скрипта с настройками