[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
теперь никак не влияет на ширину окна.