oscript-ui
oscript-ui

Плашка

Плашка — короткая метка у объекта: его состояние, тип или источник одним-двумя словами. В Material это малый чип высотой 24 пикселя; цвет состояния он несёт тональным контейнером своей роли.

Когда использовать#

  • Нужно показать состояние записи: «черновик», «готово», «отозвано».
  • У объекта есть признак, по которому его отличают от соседей: «внешний», «основное».
  • Человек снимает применённую метку или отбор — плашка с крестиком.

Не берите плашку для действия — для этого есть кнопка. Для фразы о результате действия подойдёт тост. Признак, который принадлежит самому имени объекта (подписан, закреплён), ставят значком у имени в шапке объекта.

В дереве холста плашка собирается словами: текст позицией, вид, адрес и подсказка — цепочкой (см. Язык узлов).

Узлом холста — словами

устаревший
HTML = Кит.Плашка("устаревший").Вид("warn").Подсказка("Есть редакция новее — 1.1.0").Рендер();

Виды#

Нейтральная плашка — признак без оценки. Её заливка — surface-container-highest, текст — приглушённый.

Нейтральная

черновик
HTML = Набор.Тег().Отрисовать("черновик");

Статусные виды берут тональные контейнеры Material: заливка — контейнер роли, текст — цвет «на контейнере». Цвет узнаётся издалека, а текст на нём остаётся читаемым в обеих темах.

Вид ok — успех, всё в порядке

готово
HTML = Набор.Тег().Отрисовать(Новый Структура("Текст, Вид", "готово", "ok"));

Вид warn — внимание, но не авария

устаревший
HTML = Набор.Тег().Отрисовать(Новый Структура("Текст, Вид", "устаревший", "warn"));

Вид err — ошибка или отказ

отозвано
HTML = Набор.Тег().Отрисовать(Новый Структура("Текст, Вид", "отозвано", "err"));

Вид accent — выделенное, текущее

текущее
HTML = Набор.Тег().Отрисовать(Новый Структура("Текст, Вид", "текущее", "accent"));

Вид можно назвать и по-русски: «успех», «предупреждение», «ошибка», «акцент». Неизвестный вид даёт нейтральную плашку: в CSS-класс попадает только значение из списка.

Ссылка и подсказка#

С Адресом плашка становится ссылкой: на наведении её заливку накрывает слой состояния. Так плашка «внешний» ведёт к списку всех внешних объектов.

Ссылка с иконкой

HTML = Набор.Тег().Отрисовать(Новый Структура("Текст, Адрес, Иконка", "внешний", "/проекты", "тег"));

Подсказка печатается атрибутом title — всплывающей подсказкой мыши. Она поясняет, но не заменяет текст плашки.

С подсказкой

устаревший
HTML = Набор.Тег().Отрисовать(Новый Структура("Текст, Вид, Подсказка", "устаревший", "warn", "Есть редакция новее — 1.1.0"));

Крестик снятия#

Действие — разметка управления, которая печатается ВНУТРИ плашки. Поэтому перенос строки не отрывает крестик от подписи. Крестик — обычная кнопка-значок с подписью.

С крестиком снятия — кнопка живёт внутри плашки

избранное
Крестик = Набор.Кнопка().Отрисовать( Новый Структура("Подпись, Вариант, Размер, Иконка, ТолькоИконка", "Снять метку", "ссылка", "малый", "закрыть", Истина)); HTML = Набор.Тег().Отрисовать(Новый Структура("Текст, Вид, Действие", "избранное", "accent", Крестик));

Действие вместе с Адресом кит не соберёт: кнопка внутри ссылки не нажимается, и компонент бросает исключение.

Крестик тихой формой#

Чаще всего крестик что-то снимает на сервере: исключение из рассылки, отбор, метку. Слово Снять(Адрес, Поле, Значение) (дев-сборка 8) печатает плашку внутри её маленькой тихой формы: форма уходит POST на Адрес без перезагрузки, скрытым полем Поле=Значение, а крестик — кнопка её отправки. Токен форма берёт у предков, как любая форма холста (слово Токен, дом настроек); адрес — как у слова Форма: относительный дописывается к адресу контекста. Полей несколько — вторым аргументом структура. Имя крестика для скринридера — четвёртым аргументом, по умолчанию «Снять «текст плашки»» (ключ словаря tag.remove).

Ряд таких плашек раскладывает Кит.РядПлашек: формы встают в него, как сами плашки, и переносятся вместе. Без скрипта крестик отправляет форму обычной навигацией.

Плашки с крестиком — каждая своей тихой формой

− Борис Седых
+ Анна Белых
ещё 3
HTML = Кит.Холст( Кит.РядПлашек( Кит.Плашка("− Борис Седых").Снять("/образец-получателей", "включить", "alpha-003"), Кит.Плашка("+ Анна Белых").Вид("accent").Снять("/образец-получателей", "снять", "gamma-052"), Кит.Плашка("ещё 3"))).Токен("образец").Рендер();

Снять вместе с Адресом или Действием кит не соберёт, а форму без токена не напечатает: она выглядела бы рабочей, а получила бы 403.

Ряд плашек#

Несколько плашек печатаются одним элементом Ряд: они стоят в строку и переносятся вместе. Соседними детьми контейнера их не ставят — вертикальный отступ контейнера достался бы каждой и опустил бы строку.

Ряд плашек — один элемент разметки

ОсновноеОткрытое
Плашки = Новый Массив(); Плашки.Добавить(Новый Структура("Текст, Вид", "Основное", "accent")); Плашки.Добавить(Новый Структура("Текст, Вид", "Открытое", "ok")); HTML = Набор.Тег().Ряд(Плашки);

Неопределено вместо модели — признака нет, и плашка не печатается. Это правило живёт в компоненте, поэтому в ряд можно класть признаки как есть, без проверок.

Неопределено в ряду пропускается

ОсновноеОткрытое
Плашки = Новый Массив(); Плашки.Добавить(Новый Структура("Текст, Вид", "Основное", "accent")); Плашки.Добавить(Неопределено); Плашки.Добавить("Открытое"); HTML = Набор.Тег().Ряд(Плашки);

Гайдлайны#

устаревший
ДелайтеОдно-два слова: состояние читается с одного взгляда
Код
HTML = Набор.Тег().Отрисовать(Новый Структура("Текст, Вид", "устаревший", "warn"));
Эта редакция устарела, обновитесь до 1.1.0 как можно скорее
Не делайтеФраза в плашке: это уже сообщение, а не метка
Код
HTML = Набор.Тег().Отрисовать(Новый Структура("Текст, Вид",
	"Эта редакция устарела, обновитесь до 1.1.0 как можно скорее", "warn"));
черновикотозвано
ДелайтеЦвет по смыслу, нейтральное — без цвета
Код
Плашки = Новый Массив();
Плашки.Добавить("черновик");
Плашки.Добавить(Новый Структура("Текст, Вид", "отозвано", "err"));

HTML = Набор.Тег().Ряд(Плашки);
черновикотозвано
Не делайтеЦвет для красоты: красный «черновик» пугает зря
Код
Плашки = Новый Массив();
Плашки.Добавить(Новый Структура("Текст, Вид", "черновик", "err"));
Плашки.Добавить(Новый Структура("Текст, Вид", "отозвано", "accent"));

HTML = Набор.Тег().Ряд(Плашки);
внешний
ДелайтеКрестик — внутри плашки, через Действие
Код
Крестик = Набор.Кнопка().Отрисовать(
	Новый Структура("Подпись, Вариант, Размер, Иконка, ТолькоИконка",
		"Снять отбор «внешний»", "ссылка", "малый", "закрыть", Истина));

HTML = Набор.Тег().Отрисовать(Новый Структура("Текст, Действие", "внешний", Крестик));
внешний
Не делайтеКрестик отдельной кнопкой рядом: при переносе он уедет от подписи
Код
HTML = Набор.Тег().Отрисовать("внешний")
	+ Набор.Кнопка().Отрисовать(
		Новый Структура("Подпись, Вариант, Размер, Иконка, ТолькоИконка",
			"Снять", "ссылка", "малый", "закрыть", Истина));

Доступность#

  • Смысл плашки несёт её текст, а цвет только повторяет его. Плашку без слов не ставьте: скринридер прочтёт пустоту. Нет признака — передайте Неопределено, и плашки не будет.
  • Подпись крестика уходит в aria-label. Называйте в ней, что снимается: «Снять отбор «внешний»», а не «Закрыть». У крестика тихой формой подпись по умолчанию так и названа — «Снять «текст плашки»».
  • Подсказка в title не видна с клавиатуры и на телефоне. Не кладите туда то, без чего плашку не понять.
  • Плашка-ссылка — обычная ссылка с текстом: её находит обход по Tab и список ссылок скринридера.

Узлом холста#

На холсте плашка и ряд плашек — узлы. Их кладут в ячейку таблицы, в ряд шапки, в сводку.

Плашка узлом дерева

свежий
HTML = Кит.Плашка("свежий").Вид("ok").Рендер();

Ряд плашек узлом дерева

ОсновноеОткрытое
Плашки = Новый Массив(); Плашки.Добавить(Новый Структура("Текст, Вид", "Основное", "accent")); Плашки.Добавить(Новый Структура("Текст", "Открытое")); HTML = Кит.РядПлашек(Плашки).Рендер();

Дети узла-плашки печатаются ВМЕСТО значка и текста модели. Так плашку собирают из своих узлов — например, с кодом версии внутри: строка среди детей становится текстом.

Плашка, собранная из узлов

обновите до 1.1.0
HTML = Кит.Плашка("обновите до ", Кит.Код("1.1.0")).Вид("warn").Рендер();

Модель#

В наборе компонентов плашка зовётся Набор.Тег(), а класс компонента — Плашка: имя Тег в OneScript занято. Структура с этими полями — прежний вид модели: в дереве холста Вид, Адрес, Иконка и Подсказка пишут слова Кит.Плашка. Слова для Действия нет — крестик снятия собирают компонентом строкой, а крестик, который снимает на сервере, — словом Снять (поле модели Снять).

Плашка.Отрисовать()src/Классы/компоненты/Плашка.os

Отрисовывает плашку.

Параметры:
 Модель - Структура, Строка, Неопределено - текст плашки либо структура: Текст
          (экранируется), Вид ("" | "ok" | "warn" | "err" | "accent"), Адрес (плашка
          становится ссылкой), Иконка, Подсказка (атрибут title), Действие —
          ДОВЕРЕННЫЙ HTML управления при плашке (крестик снятия): печатается ВНУТРИ
          неё, поэтому перенос строки не отрывает его от подписи. С Адресом
          несовместимо. Неопределено — признака нет, плашка не печатается. Внутри —
          ДОВЕРЕННЫЙ HTML содержимого: печатается ВМЕСТО значка и текста, когда плашку
          собирают из своих узлов. Снять (дев-сборка 8) — Структура: Действие (адрес
          формы), Скрытые (ДОВЕРЕННЫЙ HTML скрытых полей формы, токен среди них), Подпись
          (имя крестика; по умолчанию словарь tag.remove с текстом плашки): плашка
          печатается внутри своей маленькой тихой формы (form.tag-form, data-quiet), а
          крестик — кнопкой её отправки. На холсте её собирает слово Снять.

Возвращаемое значение:
 Строка - HTML-фрагмент; "" для Неопределено. Кидается исключением, если Действие
          задано вместе с Адресом или Снять — вместе с Адресом или Действием.

Плашка.Ряд()src/Классы/компоненты/Плашка.os

Отрисовывает ряд плашек одним элементом: они стоят в строку и переносятся вместе.
Соседними детьми контейнера плашки не печатаются — вертикальный ритм контейнера
достался бы каждой из них и опустил бы строку.

Параметры:
 Список - Массив - модели плашек (см. Отрисовать); Неопределено в списке пропускается.

Возвращаемое значение:
 Строка - фрагмент div.tag-row либо пустая строка для пустого ряда. Имя класса без
          кавычек намеренно: закавыченное сканер мёртвых правил CSS зачтёт за разметку.

Кит.Плашка()src/Классы/холст/Кит.os

Плашка — короткий признак: состояние, тип, источник. Содержимое можно собрать узлами:
они печатаются ВМЕСТО значка и текста модели. Слова: Вид, Адрес, Иконка, Подсказка.

Параметры:
 Модель - Строка, ЭлементЭкрана, Структура, Неопределено - текст плашки либо первый
          узел её содержимого; Структура — прежний вид модели; Неопределено — плашки
          нет, узел печатается пустой строкой.
 Р2…Р8  - ЭлементЭкрана, Строка - (необязательные) ещё узлы содержимого.

Возвращаемое значение:
 ЭлементЭкрана

Кит.РядПлашек()src/Классы/холст/Кит.os

Ряд плашек одним элементом: они стоят в строку и переносятся вместе. Дев-сборка 8: плашки
узлами (Кит.Плашка, в том числе со словом Снять — каждая в своей тихой форме) — ряд узлом
«ряд» вида «плашки»: формы плашек встают в него, как сами плашки.

Параметры:
 Список - Массив, ЭлементЭкрана - модели компонента «Плашка», узлы плашек (можно вперемешку)
          либо первая плашка-узел.
 Р2…Р8  - ЭлементЭкрана - (необязательные) следующие плашки-узлы.

Возвращаемое значение:
 ЭлементЭкрана

ЭлементЭкрана.Снять()src/Классы/холст/ЭлементЭкрана.os

Крестик плашки — снятие её тихой формой: плашка печатается внутри своей маленькой формы,
которая уходит POST на Адрес без перезагрузки, а крестик — кнопка её отправки. Токен форма
берёт у предков, как любая форма холста (слово Токен, дом настроек); адрес — как у слова
Форма: относительный дописывается к адресу контекста. Ряд таких плашек раскладывает
Кит.РядПлашек.

Параметры:
 Адрес_ - Строка - куда уходит форма.
 Поле - Строка, Структура, Соответствие - имя скрытого поля формы либо все её поля.
 Значение_ - Строка - (необязательный) значение поля.
 Подпись_ - Строка - (необязательный) имя крестика для скринридера; по умолчанию словарь
            tag.remove с текстом плашки.

Возвращаемое значение:
 ЭлементЭкрана - этот же элемент.