Всплывающие окна могут быть полезны во многих ситуациях, но, честно говоря, стандартные оповещения JavaScript довольно уродливы и раздражают большинство людей. К счастью, есть действительно хорошая JS-библиотека под названием SweetAlert, которая решает все ваши проблемы с оповещениями. Сегодня я покажу вам, как работает новое расширение WebSharper для этой библиотеки.
Настройка ящика
Начнем с опций. Что мы можем настроить? Больше вещей, чем вы можете себе представить. Здесь я расскажу только о самых важных параметрах. Полный список см. в Документации по библиотеке JavaScript.
- TitleText: это заголовок вашего блока в виде текста (поэтому HTML не работает). Если вы хотите использовать HTML внутри, просто используйте вместо этого
Title
. - Текст: описание поля. Если вы хотите использовать HTML внутри описания, используйте Html вместо Text.
- Тип: тип ящика. Он определяет значок поля. Это может быть предупреждение, успех, информация, вопрос и ошибка.
- Ввод: первая интересная часть. Поле может содержать поля ввода следующих типов: текст, электронная почта, пароль, номер, телефон, диапазон, текстовое поле, выбор, радио, флажок, файл и URL-адрес.
- InputValidator: вы можете добавить валидатор ввода. Он должен вернуться с
SweetAlertProm
. (об этом чуть позже) - ImageUrl: если вам не нравятся какие-либо значки по умолчанию или вам нужно что-то другое, вы можете вместо этого использовать собственный значок. В этом случае можно указать размер значка с помощью ImageWidth и ImageHeight.
Вы можете установить необходимые конфигурации, создав экземпляр объекта Box
и задав его значения.
Допустим, вы хотите предупредить своих пользователей, когда они пытаются закрыть окно, чтобы уменьшить вероятность того, что они случайно закроют окно без сохранения:
let WarningBox = Box( Title = "Warning!", Text = "You are about to close this window!", Type = "warning", AllowOutsideClick = false, ShowCancelButton = true )
Хорошо, у нас есть Box
с необходимыми атрибутами. Что теперь? Ну, мы должны показать это пользователю. Именно это и делает функция SweetAlert.ShowBox
.
Вот и все? Не совсем. ShowBox
показывает переданный блок, но после этого возвращает объект SweetAlertProm
. Некоторым из вас Promise
из JavaScript покажется знакомым, в основном SweetAlertProm
— это Promise
. Для тех, кто не знает, что такое промисы, я рекомендую ознакомиться с документацией MDN.
Если вы просто хотите показать простое информационное или предупреждающее окно, вы не будете часто использовать возвращаемый SweetAlertProm
, поэтому вы можете просто сделать это:
SweetAlert.ShowBox WarningBox |> ignore
В следующем разделе мы будем использовать их.
Ящики с полями ввода
Да, ты можешь это сделать. Типы полей ввода могут быть следующими: текст, электронная почта, пароль, номер, телефон, диапазон, текстовое поле, выбор, радио, флажок, файл и URL-адрес.
Сначала давайте настроим новый Box:
let InputBox = Box ( TitleText= "Hey there", Text = "How can I call you?", Type = "question", Input = "text" )
После этого нам нужно будет использовать ShowBox
, чтобы сделать его видимым. Как я уже говорил, функция вернет значение SweetAlertProm
, которое мы будем использовать для получения пользовательского ввода.
let rName = Var.Create "" SweetAlert.ShowBox(InputBox).Then(fun (result: string) -> rName.Value <- x)|> ignore
Если в начале вашего кода стоит open WebSharper.UI.Next.Notation
, вы можете использовать rName := x
вместо rName.Value <- x
.
Ладно, что случилось? Сначала я создал новую реактивную переменную. Это будет содержать пользовательский ввод после его установки. Затем я сделал InputBox
видимым для пользователя. Как только пользователь нажимает кнопку подтверждения, вызывается функция Then
. Мы должны передать функцию Then
. Эта функция будет работать с пользовательским вводом, в нашем случае она поместит его в реактивную переменную rName
, так что я смогу использовать ее позже. Then
возвращается с SweetAlertProm
, поэтому, в конце концов, если мы не хотим делать с ним что-либо еще, мы можем ignore
его.
Другие особенности
У SweetAlert есть еще много методов и опций, о которых я не рассказал в сегодняшнем посте, если вам интересно, они есть в документации библиотеки. В расширении представлены все они с одинаковыми именами (за исключением того, что они начинаются с заглавной буквы).
Фрагмент на Try WebSharper
Подводя итог, я сделал сниппет на Try WebSharper. В нем идет речь обо всем, о чем я говорил в этом посте, поэтому, если что-то было не совсем понятно, я надеюсь, что это поможет, и вы сможете увидеть SweetAlert в действии и попробовать сами создать с его помощью что-то интересное. Примеры немного отличаются от тех, что в блоге, но основные функции те же.