oscript-ui
oscript-ui

Поле из конфига

Поле из конфига показывает настройку, значение которой задано снаружи — файлом свойств или переменной окружения. Конфиг — эталон, интерфейс — зеркало: значение видно, но не правится, а рядом сказано, где его поменять.

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

  • Настройка приходит из autumn-properties.json или из переменной окружения, и правка в интерфейсе откатилась бы на перезапуске.
  • Администратору нужно увидеть действующее значение и понять, откуда оно взялось.

Не берите его для значения, которое правится в интерфейсе, — это поле формы. Если значение просто нельзя менять и источника у него нет, хватит заблокированного поля формы. Команду, которую надо выполнить, показывает блок команды.

В дереве холста метку, значение, подсказку и секретность пишут слова (см. Язык узлов). Источник — Деталька и Переменная — слов не имеет и задаётся структурой модели.

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

значение задано конфигурациейapp.storage.root
APP_STORAGE_ROOT=/var/lib/приложение
HTML = Кит.ПолеИзКонфига(Новый Структура("Деталька, Переменная", "app.storage.root", "APP_STORAGE_ROOT")) .Метка("Каталог данных").Значение("/var/lib/приложение").Рендер();

Значение из детальки#

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

Значение из детальки

значение задано конфигурациейapp.storage.root
APP_STORAGE_ROOT=/var/lib/приложение
HTML = Набор.ПолеИзКонфига().Отрисовать( Новый Структура("Метка, Значение, Деталька, Переменная", "Каталог данных", "/var/lib/приложение", "app.storage.root", "APP_STORAGE_ROOT"));

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

С подсказкой — без переменной окружения

значение задано конфигурациейapp.http.port
HTML = Набор.ПолеИзКонфига().Отрисовать( Новый Структура("Метка, Значение, Деталька, Подсказка", "Порт", "8080", "app.http.port", "меняется в файле свойств, вступает в силу после перезапуска"));

Секрет#

Секрет прячет значение: в поле его нет, вместо него плейсхолдер «значение скрыто», а в строке переменной стоит <значение>. Значения нет и в разметке страницы, поэтому оно не утечёт через «просмотр кода» или кэш.

Секрет

значение задано конфигурациейapp.admin.password
APP_ADMIN_PASSWORD=<значение>
HTML = Набор.ПолеИзКонфига().Отрисовать( Новый Структура("Метка, Значение, Деталька, Переменная, Секрет", "Пароль админа", "s3cret", "app.admin.password", "APP_ADMIN_PASSWORD", Истина));

Гайдлайны#

APP_API_KEY=<значение>
ДелайтеПароли и ключи — с флагом Секрет
Код
HTML = Набор.ПолеИзКонфига().Отрисовать(
	Новый Структура("Метка, Значение, Переменная, Секрет",
		"Ключ API", "sk-12345", "APP_API_KEY", Истина));
APP_API_KEY=sk-12345
Не делайтеСекрет без флага: ключ виден на экране и в коде страницы
Код
HTML = Набор.ПолеИзКонфига().Отрисовать(
	Новый Структура("Метка, Значение, Переменная",
		"Ключ API", "sk-12345", "APP_API_KEY"));
значение задано конфигурациейapp.storage.root
APP_STORAGE_ROOT=/var/lib/приложение
ДелайтеНазовите источник: человек видит, где поменять
Код
HTML = Набор.ПолеИзКонфига().Отрисовать(
	Новый Структура("Метка, Значение, Деталька, Переменная",
		"Каталог данных", "/var/lib/приложение",
		"app.storage.root", "APP_STORAGE_ROOT"));
Не делайтеЗаблокированное поле без источника: непонятно, почему не правится
Код
HTML = Набор.Поле().Отрисовать(Новый Структура("Метка, Значение, Заблокировано",
	"Каталог данных", "/var/lib/приложение", Истина));

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

  • Значок замка у источника несёт подпись «значение задано конфигурацией»: скринридер читает, почему поле не правится.
  • Поле заблокировано атрибутом disabled: оно не берёт фокус и не отправляется.
  • Кнопка копирования переменной — <button type="button"> с видимой надписью «Копировать»; её оживляет скрипт страницы по data-copy. Без скрипта строку можно выделить мышью.

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

Поле из конфига узлом дерева

значение задано конфигурациейapp.storage.root
HTML = Кит.ПолеИзКонфига(Новый Структура("Деталька", "app.storage.root")) .Метка("Каталог данных").Значение("/var/lib/приложение").Рендер();

Модель#

Поля модели — из комментария в исходнике компонента. Структура — прежний вид модели: в дереве холста Метка, Значение, Подсказка и Секрет пишут слова Кит.ПолеИзКонфига, а источник остаётся в структуре.

Кит.ПолеИзКонфига()src/Классы/холст/Кит.os

Поле, значение которого задано конфигурацией: показывается, но не правится. Слова:
Метка, Значение, Подсказка, Секрет.

Параметры:
 Модель - Структура - модель компонента «Поле из конфига».

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

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

Отрисовывает заблокированное поле со ссылкой на источник и ENV-сниппетом.

Параметры:
 Модель - Структура - Метка, Значение (действующее, экранируется), Деталька (имя
          детальки-источника), Переменная (имя переменной окружения), Подсказка,
          Секрет (значение не показывать).

Возвращаемое значение:
 Строка - фрагмент <div class="from-config">.