Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ opm install oscript-ui
В `packagedef` приложения:

```bsl
.ЗависитОт("oscript-ui", "0.7.3")
.ЗависитОт("oscript-ui", "0.7.4")
```

И подключаем:
Expand Down
2 changes: 1 addition & 1 deletion packagedef
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
// в момент НайтиЖелудь.

Описание.Имя("oscript-ui")
.Версия("0.7.3")
.Версия("0.7.4")
.Автор("Egor Ivanov")
.АдресРепозитория("https://github.com/Segate-ekb/oscript-ui")
.Описание("UI-кит на чистом OneScript: компоненты, каркас форм, токены темы, глифы и раскладка статики. Желуди ОСени, разметка на выходе, о предметной области не знает ничего.")
Expand Down
7 changes: 5 additions & 2 deletions src/Классы/оформление/ТокеныТемы.os
Original file line number Diff line number Diff line change
Expand Up @@ -41,26 +41,29 @@
Возврат "<style id=""токены-темы"">" + Переменные(Оформление) + "</style>";
КонецФункции

// CSS-текст переменных обеих палитр без тега <style>.
// CSS-текст обеих палитр без тега <style>: переменные и схема цветов, по которой браузер
// рисует свои элементы и выбирает цвет в light-dark().
//
// Параметры:
// Оформление - Структура, Неопределено - (необязательный, по умолчанию Неопределено)
// оформление, см. ПоУмолчанию.
//
// Возвращаемое значение:
// Строка - CSS-объявления переменных.
// Строка - CSS-объявления переменных и color-scheme.
//
Функция Переменные(Знач Оформление = Неопределено) Экспорт

Настройки = Нормализованное(Оформление);

Тёмная = ":root{"
+ "color-scheme:dark;"
+ ОбщиеПеременные(Настройки)
+ ТёмнаяПалитра()
+ ПереопределениеАкцента(Настройки)
+ "}";

Светлая = "html[data-theme=""light""]{"
+ "color-scheme:light;"
+ СветлаяПалитра()
+ ПереопределениеАкцента(Настройки)
+ "}";
Expand Down
18 changes: 18 additions & 0 deletions tests/БазовыйЛист_Тесты.os
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,24 @@

КонецПроцедуры

// Без color-scheme браузер не знает, тёмная страница или светлая: полосы прокрутки, поля
// ввода и цвета light-dark() он берёт из темы операционной системы, и на тёмной теме кита
// при светлой ОС они остаются светлыми.
&Тест
Процедура КаждаяПалитраОбъявляетБраузеруСвоюСхемуЦветов() Экспорт

Схемы = Новый Соответствие();
Для Каждого Правило Из Разбор.Правила(Токены.Переменные()) Цикл
// разбор снимает литералы, и селектор светлой палитры приходит как html[data-theme=""]
Палитра = ?(Правило.Селектор = ":root", "тёмная", "светлая");
Схемы.Вставить(Палитра, Правило.Объявления.Получить("color-scheme"));
КонецЦикла;

Ожидаем.Что(Схемы.Получить("тёмная"), "схема тёмной палитры").Равно("dark");
Ожидаем.Что(Схемы.Получить("светлая"), "схема светлой палитры").Равно("light");

КонецПроцедуры

// Сканер обязан читать КОД, а не текст: имя из пояснения и имя из строкового литерала
// живой переменной не делают, а «.button--link» — не объявление.
&Тест
Expand Down