aboutsummaryrefslogtreecommitdiff
path: root/kvision-modules/kvision-toast/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'kvision-modules/kvision-toast/src/main')
-rw-r--r--kvision-modules/kvision-toast/src/main/kotlin/pl/treksoft/kvision/KVManagerToast.kt38
-rw-r--r--kvision-modules/kvision-toast/src/main/kotlin/pl/treksoft/kvision/toast/Toast.kt178
2 files changed, 216 insertions, 0 deletions
diff --git a/kvision-modules/kvision-toast/src/main/kotlin/pl/treksoft/kvision/KVManagerToast.kt b/kvision-modules/kvision-toast/src/main/kotlin/pl/treksoft/kvision/KVManagerToast.kt
new file mode 100644
index 00000000..5c6e1441
--- /dev/null
+++ b/kvision-modules/kvision-toast/src/main/kotlin/pl/treksoft/kvision/KVManagerToast.kt
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2017-present Robert Jaros
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+package pl.treksoft.kvision
+
+internal val kVManagerToastInit = KVManagerToast.init()
+
+/**
+ * Internal singleton object which initializes and configures KVision Toast module.
+ */
+internal object KVManagerToast {
+
+ init {
+ require("toastr/build/toastr.min.css")
+ }
+
+ internal val toastr = require("toastr/build/toastr.min.js")
+
+ internal fun init() {}
+}
diff --git a/kvision-modules/kvision-toast/src/main/kotlin/pl/treksoft/kvision/toast/Toast.kt b/kvision-modules/kvision-toast/src/main/kotlin/pl/treksoft/kvision/toast/Toast.kt
new file mode 100644
index 00000000..99201dc5
--- /dev/null
+++ b/kvision-modules/kvision-toast/src/main/kotlin/pl/treksoft/kvision/toast/Toast.kt
@@ -0,0 +1,178 @@
+/*
+ * Copyright (c) 2017-present Robert Jaros
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+package pl.treksoft.kvision.toast
+
+import pl.treksoft.kvision.KVManagerToast
+import pl.treksoft.kvision.utils.obj
+
+/**
+ * Toast message types.
+ */
+internal enum class ToastType(internal val type: String) {
+ INFO("info"),
+ SUCCESS("success"),
+ WARNING("warning"),
+ ERROR("error")
+}
+
+/**
+ * Toast positions.
+ */
+enum class ToastPosition(internal val position: String) {
+ TOPRIGHT("toast-top-right"),
+ BOTTOMRIGHT("toast-bottom-right"),
+ BOTTOMLEFT("toast-bottom-left"),
+ TOPLEFT("toast-top-left"),
+ TOPFULLWIDTH("toast-top-full-width"),
+ BOTTOMFULLWIDTH("toast-bottom-full-width"),
+ TOPCENTER("toast-top-center"),
+ BOTTOMCENTER("toast-bottom-center")
+}
+
+/**
+ * Toast easings.
+ */
+enum class ToastEasing(internal val easing: String) {
+ SWING("swing"),
+ LINEAR("linear")
+}
+
+/**
+ * Toast animation methods.
+ */
+enum class ToastMethod(internal val method: String) {
+ FADEIN("fadeIn"),
+ FADEOUT("fadeOut"),
+ SLIDEUP("slideUp"),
+ SLIDEDOWN("slideDown"),
+ SHOW("show"),
+ HIDE("hide")
+}
+
+/**
+ * Toast options.
+ */
+data class ToastOptions(
+ val positionClass: ToastPosition? = null,
+ val escapeHtml: Boolean? = null,
+ val closeButton: Boolean? = null,
+ val closeHtml: String? = null,
+ val closeDuration: Int? = null,
+ val newestOnTop: Boolean? = null,
+ val showEasing: ToastEasing? = null,
+ val hideEasing: ToastEasing? = null,
+ val closeEasing: ToastEasing? = null,
+ val showMethod: ToastMethod? = null,
+ val hideMethod: ToastMethod? = null,
+ val closeMethod: ToastMethod? = null,
+ val preventDuplicates: Boolean? = null,
+ val timeOut: Int? = null,
+ val extendedTimeOut: Int? = null,
+ val progressBar: Boolean? = null,
+ val rtl: Boolean? = null,
+ val onShown: (() -> Unit)? = null,
+ val onHidden: (() -> Unit)? = null,
+ val onClick: (() -> Unit)? = null,
+ val onCloseClick: (() -> Unit)? = null
+)
+
+internal fun ToastOptions.toJs(): dynamic {
+ return obj {
+ if (positionClass != null) this.positionClass = positionClass.position
+ if (escapeHtml != null) this.escapeHtml = escapeHtml
+ if (closeButton != null) this.closeButton = closeButton
+ if (closeHtml != null) this.closeHtml = closeHtml
+ if (closeDuration != null) this.closeDuration = closeDuration
+ if (newestOnTop != null) this.newestOnTop = newestOnTop
+ if (showEasing != null) this.showEasing = showEasing.easing
+ if (hideEasing != null) this.hideEasing = hideEasing.easing
+ if (closeEasing != null) this.closeEasing = closeEasing.easing
+ if (showMethod != null) this.showMethod = showMethod.method
+ if (hideMethod != null) this.hideMethod = hideMethod.method
+ if (closeMethod != null) this.closeMethod = closeMethod.method
+ if (preventDuplicates != null) this.preventDuplicates = preventDuplicates
+ if (timeOut != null) this.timeOut = timeOut
+ if (extendedTimeOut != null) this.extendedTimeOut = extendedTimeOut
+ if (progressBar != null) this.progressBar = progressBar
+ if (rtl != null) this.rtl = rtl
+ if (onShown != null) this.onShown = onShown
+ if (onHidden != null) this.onHidden = onHidden
+ if (onClick != null) this.onClick = onClick
+ if (onCloseClick != null) this.onCloseClick = onCloseClick
+ }
+}
+
+/**
+ * Toast component object.
+ */
+object Toast {
+
+ /**
+ * Shows a success toast.
+ * @param message a toast message
+ * @param title a toast title
+ * @param options toast options
+ */
+ fun success(message: String, title: String? = null, options: ToastOptions? = null) {
+ show(ToastType.SUCCESS, message, title, options)
+ }
+
+ /**
+ * Shows an info toast.
+ * @param message a toast message
+ * @param title a toast title
+ * @param options toast options
+ */
+ fun info(message: String, title: String? = null, options: ToastOptions? = null) {
+ show(ToastType.INFO, message, title, options)
+ }
+
+ /**
+ * Shows a warning toast.
+ * @param message a toast message
+ * @param title a toast title
+ * @param options toast options
+ */
+ fun warning(message: String, title: String? = null, options: ToastOptions? = null) {
+ show(ToastType.WARNING, message, title, options)
+ }
+
+ /**
+ * Shows an error toast.
+ * @param message a toast message
+ * @param title a toast title
+ * @param options toast options
+ */
+ fun error(message: String, title: String? = null, options: ToastOptions? = null) {
+ show(ToastType.ERROR, message, title, options)
+ }
+
+ private fun show(type: ToastType, message: String, title: String? = null, options: ToastOptions? = null) {
+ if (options != null) {
+ KVManagerToast.toastr[type.type](message, title, options.toJs())
+ } else {
+ KVManagerToast.toastr[type.type](message, title)
+ }
+ }
+
+}