TextBox
Наряду с компонентом «кнопка» (Button), текстовое поле является одним из самых базовых и популярных компонентов графического пользовательского интерфейса. Речь идёт о вводе текста без форматирования (такого как выделение жирным или курсивом), а текстовый редактор с поддержкой форматирования текста — это отдельный и довольно сложный тема. Но несмотря на отсутствие форматирования, есть много данных, которые принимаются от пользователя через данный компонент: имена, адреса, всевозможные названия. Более того под «текстом» подразумевается не только набор завершённых предложений, но и любая информация, которая может быть представлена в виде последовательности символов:
- Адреса электронной почты
- Пароли
- Ссылки
Кроме того, данный компонент иногда применяется и для ввода числовых данных, правда зачастую это не числа, а последовательности цифр иногда вперемешку в вспомогательными символами:
- Телефонные номера
- Почтовые индексы
- Номера кредитных карт
В большинстве случаев, данный компонент не предусматривает перенос строки, а при вводе большого количества символов отображается лишь часть из них, хотя с помощью клавиш по стрелками возможна прокрутка. Однако в случаях, когда от пользователя требуется ввести именно завершенные предложения (может даже абзацы), требуется возможность переноса строки, что иногда может рассматриваться как простое форматирование текста. С точки зрения HTML, для многострочного текста используется отдельный вид элемента (причём автоматической регулировки высоты изначально не предусмотрено), однако в YDF для поддержки многострочного режима нужно лишь указать соответствующую опцию, и автоматическая регулировка высоты также доступна.
Как и в случае с кнопками, простота текстового поле обманчива. Во-первых, текстовое поле ввода — это валидируемый компонент, а потому вся сложность задачи валидации вводимых данных имеет к нему прямое отношение. В YDF текстовое поле ввода, как и другие компоненты, обёрнутые в компонент ValidatableControlShell включает в себя опциональные вспомогательные элементы, такие как надпись, комментарий, список ошибок валидации и так далее, хотя с точки зрения HTML это всё отдельные элементы.
У текстового поля ввода много состояний. Визуально различимы должны быть как минимум:
:hover- Активируется при наведение курсора мыши, давая понять пользователю, что система реагирует на его действия и если кликнуть по полю ввода, то можно будет начать ввод.
:focus- Активируется, когда текстовое поле приняло фокус, то есть ввод с клавиатуры будет приниматься внутрь данного текстового поля.
:readonly/:disabled- Активно, когда поле ввода доступно только для чтения. Данная функциональность не такая редкая, как кажется, потому что во многих приложениях есть режим просмотра и режим редактирования.
- Невалидное состояние
- Активно, когда введённое значение не является валидным, а также если при этом активен режим отображения валидности состояния. Если поле ввода изначально пустое, при этом обязательно для ввода, то пустой значение невалидно изначально, однако перед тем подсвечивать поле красным и сообщать ещё ничего не сделавшему пользователю об ошибках валидации, следует дать пользователю заполнить это поле, и только когда он уберёт фокус из поля ввода, можно активировать режим отображения валидности состояния. Заметим, что такой концепции с точки зрения HTML/CSS нет, а потому если определить валидацию через HTML-атрибуты наподобие
requiredиminlengthи стили для псевдокласса:invalid, то эти стили будут применяться вне зависимости от того, начал ли пользователь вводить данные в пустые поля или ещё нет.
Более того, часть этих состояний может возникать одновременно. Например состоянии hover может возникнуть одновременно с focus, причём оба этих состояния могут возникнуть поверх invalid. Тут возникает вопрос о приоритете стилей.
Также, на практике для поле ввода востребована следующая дополнительная функциональность:
- Иконки, которые в зависимости от дизайна могут быть как слева, так и справа
- Кнопка отображения/сокрытия пароля
- Кнопка копирования введённого значения
Вся эта функциональность доступна в компоненте TextBox.
Обзор
- Pug-примесь
TextBox--YDF- Live template-ы Pug-примеси (официальный плагин для семейства сред разработки IntelliJ IDEA)
- Наподобие автодополнения
TextBox--YDF- Сокращённый
tb-ydf- Loading Placeholder
- Stylus-примесь для генерации стилей
generateTextBoxYDF_GUI_ComponentStyles- Готовые темы
TextBox__YDF.Themes.regular- Базовая (по умолчанию)
- Готовые геометрические вариации
TextBox__YDF.GeometricVariations.regular- Базовая (по умолчанию)
TextBox__YDF.GeometricVariations.small- Компактная
TextBox__YDF.GeometricVariations.labelLike- Похожая на обычную надпись
- Геометрические модификаторы
TextBox__YDF.GeometricModifiers.noRoundings- Отсутствие скруглений
- Готовые декоративные вариации
TextBox__YDF.DecorativeVariations.regular- Базовая (по умолчанию)
TextBox__YDF.DecorativeVariations.labelLike- Похожая на обычную надпись
- Loading placeholder
- Недоступен
Использование
Разметка
Подключение в проект
Разметка данного GUI-компонента поставляется в виде Pug-примеси TextBox--YDF. Способ подключения — стандартный: путём включения Pug-файла Components.pug в Ваш pug-файл, при этом туда же предварительно должен быть включён файл Functionality.pug (последний уже входит в шаблоны страниц , повторное включение приведёт к ошибке).
include ../../node_modules/@yamato-daiwa/frontend/Functionality.pug
include ../../node_modules/@yamato-daiwa/frontend/Components.pugВ Вашем случае относительный путь к директории node_modules может быть другим в в зависимости от того, насколько глубже корневой директории проекта находится Ваш Pug-файл с этим кодом.
Напомним, что одно только включение этих файлов никакого выходного HTML-кода не даст: чтобы сгенерировать HTML-код компонента TextBox, нужно вызывать Pug-примесь TextBox--YDF. Кроме того, если на данном этапе пока ещё не подключены стили, то при вызове этой примеси HTML-код хотя и будет сгенерирован, но корректного отображения пока не будет. Но если Вы ещё не знаете, как подключать стили, то не волнуйтесь, так ниже это будет обязательно описано.
Pug-примесь TextBox--YDF
- Общее техническое наименование
- properties
- Русскоязычное имя
- Свойства
- Тип
- Properties
- Общее техническое наименование
- statesSimulations
- Русскоязычное имя
- Симуляции состояний
- Тип
- StatesSimulations
- HTML_Type
- Русскоязычное наименование
- HTML-тип
- Тип
- string
- Замещение значения undefined
- "text"
- Запрещён ли null
- Да
- Допустимые варианты
- TextBox__YDF.HTML_Types.regular
- TextBox__YDF.HTML_Types.email
- TextBox__YDF.HTML_Types.number
- TextBox__YDF.HTML_Types.password
- TextBox__YDF.HTML_Types.phoneNumber
- TextBox__YDF.HTML_Types.URI
- label
- Русскоязычное наименование
- Заголовочная надпись
- Тип
- string
- Запрещён ли undefined
- Нет
- Запрещён ли null
- Да
- Минимум символов
- 1
- guidance
- Русскоязычное наименование
- Комментарий
- Тип
- string
- Запрещён ли undefined
- Нет
- Запрещён ли null
- Да
- Минимум символов
- 1
- accessibilityGuidance
- Русскоязычное наименование
- Текст для ассистивных технологий
- Тип
- string
- Запрещён ли undefined
- Нет
- Запрещён ли null
- Да
- Минимум символов
- 1
- externalLabelHTML_ID
- Русскоязычное наименование
- HTML-идентификатор внешней заголовочной надписи
- Тип
- string
- Запрещён ли undefined
- Нет
- Запрещён ли null
- Да
- Минимум символов
- 1
- placeholder
- Русскоязычное наименование
- Текст отображающийся при пустом значении
- Тип
- string
- Запрещён ли undefined
- Нет
- Запрещён ли null
- Да
- Минимум символов
- 1
- autocomplete
- Русскоязычное наименование
- Значение атрибута «autocomplete»
- Тип
- string
- Запрещён ли undefined
- Нет
- Запрещён ли null
- Да
- value
- Русскоязычное наименование
- Начальное значение
- Тип
- string
- Замещение значения undefined
- ""
- Запрещён ли null
- Да
- multiline
- Русскоязычное наименование
- Нужна ли поддержка многострочного режима
- Тип
- boolean
- Замещение значения undefined
- false
- Запрещён ли null
- Да
- autoResizingForMultilineMode
- Русскоязычное наименование
- Нужна ли автоматическая регулировка высоты в многострочном режиме
- Тип
- boolean
- Замещение значения undefined
- true
- Запрещён ли null
- Да
- disabled
- Русскоязычное наименование
- Находится ли в неактивном состоянии
- Тип
- boolean
- Запрещён ли undefined
- Нет
- Запрещён ли null
- Да
- readonly
- Русскоязычное наименование
- Доступен ли только для чтения
- Тип
- boolean
- Запрещён ли undefined
- Нет
- Запрещён ли null
- Да
- required
- Русскоязычное наименование
- Является ли ввод обязательным
- Тип
- boolean
- Замещение значения undefined
- false
- Запрещён ли null
- Да
- mustDisplayAppropriateBadgeIfInputIsRequired
- Русскоязычное наименование
- Нужно ли отображать надпись «обязательное» когда ввод обязателен
- Тип
- boolean
- Замещение значения undefined
- false
- Запрещён ли null
- Да
- mustDisplayAppropriateBadgeIfInputIsOptional
- Русскоязычное наименование
- Нужно ли отображать надпись «необязательное» когда ввод необязателен
- Тип
- boolean
- Замещение значения undefined
- false
- Запрещён ли null
- Да
- mustAddInvisibleBadgeForHeightEqualizingWhenNoBadge
- Русскоязычное наименование
- Нужно ли добавлять невидимый значок для выравнивание высоты
- Тип
- boolean
- Замещение значения undefined
- false
- Запрещён ли null
- Да
- minimalCharactersCount
- Русскоязычное наименование
- Минимальное число символов
- Тип
- number
- Запрещён ли undefined
- Нет
- Запрещён ли null
- Да
- Множество чисел
- Положительное целое число либо ноль
- maximalCharactersCount
- Русскоязычное наименование
- Максимальное число символов
- Тип
- number
- Запрещён ли undefined
- Нет
- Запрещён ли null
- Да
- Множество чисел
- Положительное целое число либо ноль
- minimalNumericValue
- Русскоязычное наименование
- Минимальное числовое значение
- Тип
- number
- Запрещён ли undefined
- Нет
- Запрещён ли null
- Да
- Множество чисел
- Положительное целое число либо ноль
- maximalNumericValue
- Русскоязычное наименование
- Максимальное числовое значение
- Тип
- number
- Запрещён ли undefined
- Нет
- Запрещён ли null
- Да
- Множество чисел
- Положительное целое число либо ноль
- hasValueCopyingButton
- Русскоязычное наименование
- Нужна ли кнопка копирования введённого значения
- Тип
- boolean
- Замещение значения undefined
- false
- Запрещён ли null
- Да
- hasPasswordDisplayingToggle
- Русскоязычное наименование
- Нужен ли переключатель отображения пароля
- Тип
- boolean
- Замещение значения undefined
- false
- Запрещён ли null
- Да
- instanceID_UniqueDynamicPart
- Русскоязычное наименование
- Уникальная динамическая часть идентификатор экземпляра
- Тип
- string
- Запрещён ли undefined
- Нет
- Запрещён ли null
- Да
- Минимум символов
- 1
- HTML_IDs
- Русскоязычное наименование
- HTML-идентификаторы
- Тип
- объект фиксированной структуры
- Запрещён ли undefined
- Нет
- Запрещён ли null
- Да
- Структура объекта
- {
- inputOrTextArea
- Тип
- string
- Запрещён ли undefined
- Нет
- Запрещён ли null
- Да
- Минимум символов
- 1
- label
- Тип
- string
- Запрещён ли undefined
- Нет
- Запрещён ли null
- Да
- Минимум символов
- 1
- theme
- Русскоязычное наименование
- Тема
- Тип
- string
- Замещение значения undefined
- TextBox__YDF.Themes.regular
- Запрещён ли null
- Да
- Допустимые варианты
- TextBox__YDF.Themes.regular
- (Любые, определённые через `TextBox__YDF.defineThemes(themesNames)`)
- areThemesCSS_ClassesCommon
- Русскоязычное наименование
- Являются ли CSS-классы тем общими для всех компонентов
- Тип
- boolean
- Замещение значения undefined
- TextBox__YDF.areThemesCSS_ClassesCommon
- Запрещён ли null
- Да
- geometricVariation
- Русскоязычное наименование
- Геометрическая вариация
- Тип
- string
- Замещение значения undefined
- TextBox__YDF.GeometricVariations.regular
- Запрещён ли null
- Да
- Допустимые варианты
- TextBox__YDF.GeometricVariations.regular
- TextBox__YDF.GeometricVariations.small
- TextBox__YDF.GeometricVariations.labelLike
- (Любые, определённые через `TextBox__YDF.defineGeometricVariations(geometricVariationsNames)`)
- geometricModifiers
- Русскоязычное наименование
- Геометрические модификаторы
- Тип
- индексный массив
- Замещение значения undefined
- []
- Запрещён ли null
- Да
- Запрещены ли элементы типа undefined
- Да
- Запрещены ли элементы типа null
- Да
- Элементы массива
- Тип
- string
- Допустимые варианты
- TextBox__YDF.GeometricModifiers.pillShape
- TextBox__YDF.GeometricModifiers.squareShape
- TextBox__YDF.GeometricModifiers.squareShapeUnlessOverflowed
- TextBox__YDF.GeometricModifiers.singleLine
- TextBox__YDF.GeometricModifiers.noLeftBorderAndRoundings
- TextBox__YDF.GeometricModifiers.noRightBorderAndRoundings
- TextBox__YDF.GeometricModifiers.noTopBorderAndRoundings
- TextBox__YDF.GeometricModifiers.noBottomBorderAndRoundings
- TextBox__YDF.GeometricModifiers.noRoundings
- TextBox__YDF.GeometricModifiers.horizontallyShrinkable
- decorativeVariation
- Русскоязычное наименование
- Декоративная вариация
- Тип
- string
- Замещение значения undefined
- TextBox__YDF.DecorativeVariations.regular
- Запрещён ли null
- Да
- Допустимые варианты
- Button__YDF.DecorativeVariations.regular
- Button__YDF.DecorativeVariations.labelLike
- (Любые, определённые через `TextBox__YDF.defineDecorativeVariations(decorativeVariationsNames)`)
- invalidInputHighlightingIfAnyValidationErrorsMessages
- Русскоязычное наименование
- Нужна ли подсветка невалидного ввода если есть хотя бы одно сообщение об ошибке валидации
- Тип
- boolean
- Замещение значения undefined
- false
- Запрещён ли null
- Да
- validValueHighlightingIfNoValidationErrorsMessages
- Русскоязычное наименование
- Нужна ли подсветка валидного ввода нет ни одного сообщения об ошибке валидации
- Тип
- boolean
- Замещение значения undefined
- false
- Запрещён ли null
- Да
- validationErrorsMessages
- Русскоязычное наименование
- Сообщения об ошибках валидации
- Тип
- полиморфный
- Замещение значения undefined
- false
- Запрещён ли null
- Да
- Варианты
- Тип
- индексный массив
- Запрещены ли элементы типа undefined
- Да
- Запрещены ли элементы типа null
- Да
- Элементы массива
- Тип
- string
- Минимум символов
- 1
- Тип
- boolean
- asynchronousValidationsStatuses
- Русскоязычное наименование
- Статусы асинхронной валидации
- Тип
- полиморфный
- Замещение значения undefined
- false
- Запрещён ли null
- Да
- Варианты
- Тип
- индексный массив
- Запрещены ли элементы типа undefined
- Да
- Запрещены ли элементы типа null
- Да
- Элементы массива
- Тип
- объект фиксированной структуры
- Структура объекта
- {
- ID
- Тип
- string
- Запрещён ли undefined
- Да
- Запрещён ли null
- Да
- Допустимые варианты
- IN_PROGRESS
- FINISHED_AND_VALID
- FINISHED_BUT_INVALID
- MALFUNCTION
- message
- Тип
- string
- Запрещён ли undefined
- Да
- Запрещён ли null
- Да
- Минимум символов
- 1
- Тип
- boolean