[ELMA4] Модальное окно (Popup)
Модальное окно состоит из:
- заголовка – строка текста;
- контента – html-разметка, имеет отступы 16px от краев окна;
- кнопок модального окна – располагаются в контейнере
<div class="popup-buttons">...</div>в нижней части модального окна.
Все модальные окна являются адаптивными:
- всегда выровнены по центру окна браузера;
- изменяют свой размер в зависимости от окна браузера. Так, при открытии окна на смартфоне оно будет занимать практически весь экран, в то время как при открытии окна на мониторе компьютера оно займет лишь часть экрана.
Для определения размера модального окна существует ряд дискретных значений: "xxs", "xs", "s", "m", "l", "xl", "xxl", "full". Они определяются в классе UIWindowSize.
Размер модального окна, сопоставляемый с этими значениями, варьируется от самого маленького ("xxs") до самого большого ("full").
Методы для работы с модальным окном
C#
Html.AdaptivePopupWindow – создание модального окна на странице со следующими параметрами:
id– идентификатор попапа на странице;header– текст заголовка попапа;content– содержимое попапа. Сюда можно передать html-разметку;widthMode– ширина попапа. Может иметь ряд дискретных значений из UIWindowSize;url– ссылка на содержимое для его динамической загрузки;showHeader– флаг, определяющий видимость заголовка окна.
Пример: на странице создаем модальное окно размера "m" с идентификатором AddQuestionPopup, заголовком "Задать вопрос" и html-содержимым <span>Текст в модальном окне</span>.
@Html.AdaptivePopupWindow("AddQuestionPopup",
SR.T("Задать вопрос"),
@<text>
<span>Текст в модальном окне</span>
</text>,
UIWindowSize.M)
Html.OpenPopup – создает JavaScript функцию, которая открывает модальное окно. Параметры:
id– идентификатор попапа на странице;onOpenScript– действие при открытии попапа;onCloseScript– действие при закрытии попапа.
Пример: с помощью Html.Button создает кнопку, при нажатии на которую будет открываться ранее созданое модальное окно с идентификатором AddQuestionPopup.
@Html.Button()
.Text(SR.T("Задать вопрос"))
.Click(Html.OpenPopup("AddQuestionPopup").ToString())
Html.RefreshPopup – cоздает JavaScript функцию, которая обновляет контент модального окна, используя заданный url, после чего открывает окно. Параметры:
id– идентификатор попапа на странице;url– ссылка на контент;onOpenScript– действие при открытии попапа;onCloseScript– действие при закрытии попапа.
Пример: с помощью Html.Button создает кнопку, при нажатии на которую будет открываться модальное окно c контентом, полученным по ссылке, заданной в параметрах через Url.Action.
@Html.Button()
.Text(SR.T("Задать вопрос"))
.Click(Html.RefreshPopup("AddQuestionPopup", Url.Action("CreatePopup", "Question", new { area = CommonAreaRegistration.AREA_NAME })).ToString())
Html.ClosePopup – создает JavaScript функцию, которая закрывает модальное окно. Параметры:
id– идентификатор попапа на странице;loaded– если указать fаlse, то при следующем открытии попапа через Html.OpenPopup его контент будет принудительно обновлен по заданному url. Если указать true, то попап загрузится с текущим контентом.
Пример: с помощью Html.Button создает кнопку, при нажатии на которую будет закрываться модальное окно.
@Html.Button()
.Text(SR.T("Задать вопрос"))
.Click(Html.ClosePopup("AddQuestionPopup").ToString())
JS
openWindow – открытие модального окна, эквивалент Html.OpenPopup.
refreshPopup – обновление модального окна, эквивалент Html.RefreshPopup.
closeWindow – закрытие модального окна, эквивалент Html.ClosePopup.
createAndLoadWindowWithSize – создание и открытие модального окна. Использует url для загрузки контента окна (по аналогии с refreshPopup); также позволяет задать ширину окна, используя константы UIWindowSize.
Основные изменения в модальных окнах в ELMA4 по сравнению с ELMA3
1. Для создания новых модальных окон нужно использовать метод Html.AdaptivePopupWindow вместо Html.PopupWindow.
// bad
@Html.PopupWindow("Id", "Name", @<text></text>)
// good
@Html.AdaptivePopupWindow("Id", "Name", @<text></text>, UIWindowSize.M)
2. Размер модального окна указывается с помощью констант из UIWindowSize вместо точного указания размера через пиксели.
// bad
@Html.PopupWindow("Id", "Name", @<text></text>, 900)
// good
@Html.AdaptivePopupWindow("Id", "Name", @<text></text>, UIWindowSize.M)
3. В блоке popup-buttons располагаются только кнопки.
// bad
<div class="popup-buttons">
<div>
Опции:
</div>
<input type="submit" value="Продолжить" />
<input type="button" value="Отмена" />
</div>
// good
<div class="popup-buttons">
<input type="submit" value="Продолжить" />
<input type="button" value="Отмена" />
</div>
4. Поведение функции refreshPopupWithWidth теперь эквивалентно функции refreshPopup. При использовании функции refreshPopupWithWidth параметр width теперь никак не влияет на ширину окна.