Как следует из вчерашнего обновления (моего хостинга сервера по адресу https://doomemacs.discourse.group), ни один из моих пользовательских CSS-файлов не применяется. Изменения в моих темах или CSS-стилях компонентов не имеют эффекта (хотя изменения в тегах <head> или других разделах HTML работают нормально).
Есть один подозрительный тег link, указывающий на пустой файл стилей, хэш которого меняется каждый раз, когда я изменяю свой CSS. Похоже, что Discourse молча не может скомпилировать мои файлы стилей. В моих журналах ошибок нет упоминаний о сбоях, а загрузка discourse_theme моих файлов стилей проходит без замечаний, но безрезультатно.
Привет, @hlissner, я работаю над исправлением этой проблемы: недавнее обновление ядра сломало компонент темы на вашем экземпляре. Исправление будет готово в ближайшее время.
Исправление уже объединено в основной репозиторий, и ваш сайт развернут, @hlissner. Обратите внимание, что я отключил два компонента темы: компонент с пользовательскими стилями (вы можете включить его) и discourse-theme-category-homepage, который необходимо обновить в upstream, прежде чем вы сможете его включить. Подробнее об этом в Enhanced category-box display component - #7 by pmusaraj
Спасибо! Стили теперь загружаются корректно, однако переменные цвета SCSS не наследуют цветовую схему моей темы. Например, $secondary возвращает значение по умолчанию #ffffff вместо #282c34. Возможно, это ещё одна регрессия, вызванная коммитом e8b8272?
Да, это ещё одна регрессия. Исправление немного сложное… и для подавляющего большинства цветовых переменных компоненты тем должны использовать пользовательские свойства CSS. Вы можете ознакомиться с этим руководством Update themes and plugins to support automatic dark mode, чтобы получить общее представление и примеры того, как добавлять пользовательские цветовые вариации в специальном файле color_definitions.scss в вашем компоненте темы.
Есть ли лучший способ обойти это? Я мог бы добавить стили напрямую к каждой теме, но планирую иметь их множество, и предпочёл бы обрабатывать некоторые общие случаи из центрального глобального компонента, где это возможно.
Да, это имеет смысл. Вы пробовали добавить этот SCSS-код в новый файл common/color_definitions.scss? Если добавить его туда, всё должно заработать. (В интерфейсе также есть вкладка для этого специального стиля.)
Как раз собирался попробовать именно это, но Discourse упал с сообщением «Произошла непредвиденная проблема в программном обеспечении, управляющем этим форумом», ха-ха.
Это сработало! Переменные цвета корректно заданы в области видимости color_definitions.scss. Единственная проблема в том, что я не могу импортировать из него другие таблицы стилей. Например:
Возможно ли сделать то, что вы пытаетесь сделать, не наследуя переменные SCSS родительской темы? Это очень узкий сценарий использования, и я бы предпочел не добавлять такую сложность в ядро.
Это определённо возможно, просто неудобно, так как для каждой темы потребуется сотни строк шаблонного SCSS-кода (плюс система сборки для обмена переменными между всеми темами), что не было необходимо ещё неделю назад. Тем не менее, вероятно, лучше всё же сделать это, чтобы избежать проблем с будущими рефакторингами процесса сборки Discourse. Я займусь этим. Спасибо!
Да, это руководство немного устарело, однако проблема в вашем случае связана не с основными переменными, а с цветами SCSS в компоненте, который не наследует цветовую схему темы. (Тем не менее, я изучу руководство и обновлю его.)
Немного контекста: в августе–сентябре 2020 года мы перешли на использование пользовательских свойств CSS для цветов. Основная причина этого изменения заключалась в том, чтобы поддерживать автоматический темный режим легким и быстрым способом. Темы содержат CSS и JS, поэтому их нельзя быстро переключать, но с помощью пользовательских свойств CSS цветовые схемы можно менять на лету без перезагрузки страницы.
Я вижу на вашем сайте, что у вас есть 4 темы с индивидуальной цветовой схемой и общий компонент для стилей, используемый во всех темах. Вы можете достичь практически того же результата, используя одну основную тему (которая будет содержать все общие стили) и 4 выбираемые пользователем цветовые схемы. Вам нужно будет перенести все вычисления цветов в файл color_definitions.scss основной темы, но это вполне выполнимо. Я постараюсь найти время и попробую реализовать это завтра.
Это было бы идеально, но я пришел к текущей настройке, потому что несколько цветовых схем не работали для меня. Некоторые цветовые схемы дают неудачные цвета для автоматически генерируемых переменных, таких как --primary-low. Простое переопределение переменной может сработать для одной цветовой схемы, но не для другой. Более общее решение возможно, если переопределить её на основе $primary или условно — в зависимости от ID или названия цветовой схемы, но без этого необходимы несколько тем, чтобы иметь отдельный color_definitions.scss для каждой темы (дублирование, которого я хотел бы избежать). Или есть ли лучший вариант, который я упускаю?