(function (root, factory) { if (typeof define === "function" && define.amd) { define([], factory(root)); } else if (typeof exports === "object") { module.exports = factory(root); } else if (window.layui && layui.define) { layui.define(function (exports) { exports("toast", factory(root)); }); } else { root.iziToast = factory(root); } })( typeof global !== "undefined" ? global : window || this.window || this.global, function (root) { "use strict"; var $iziToast = {}, PLUGIN_NAME = "iziToast", BODY = document.querySelector("body"), ISMOBILE = /Mobi/.test(navigator.userAgent) ? true : false, ISCHROME = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor), ISFIREFOX = typeof InstallTrigger !== "undefined", ACCEPTSTOUCH = "ontouchstart" in document.documentElement, POSITIONS = [ "bottomRight", "bottomLeft", "bottomCenter", "topRight", "topLeft", "topCenter", "center", ], THEMES = { info: { color: "blue", icon: "ico-info", }, success: { color: "green", icon: "ico-success", }, warning: { color: "orange", icon: "ico-warning", }, error: { color: "red", icon: "ico-error", }, question: { color: "yellow", icon: "ico-question", }, }, MOBILEWIDTH = 568, CONFIG = {}; $iziToast.children = {}; // Default settings var defaults = { id: null, class: "", title: "", titleColor: "", titleSize: "", titleLineHeight: "", message: "", messageColor: "", messageSize: "", messageLineHeight: "", backgroundColor: "", theme: "light", // dark color: "", // blue, red, green, yellow icon: "", iconText: "", iconColor: "", iconUrl: null, image: "", imageWidth: 50, maxWidth: null, zindex: null, layout: 2, balloon: false, close: true, closeOnEscape: false, closeOnClick: false, displayMode: 0, position: "topCenter", // bottomRight, bottomLeft, topRight, topLeft, topCenter, bottomCenter, center target: "", targetFirst: true, timeout: 3000, // 默认3秒 rtl: false, animateInside: false, // 动画效果 drag: true, pauseOnHover: true, resetOnHover: false, progressBar: false, progressBarColor: "", progressBarEasing: "linear", overlay: false, overlayClose: false, overlayColor: "rgba(0, 0, 0, 0.6)", transitionIn: "fadeInDown", // bounceInLeft, bounceInRight, bounceInUp, bounceInDown, fadeIn, fadeInDown, fadeInUp, fadeInLeft, fadeInRight, flipInX transitionOut: "fadeOut", // fadeOut, fadeOutUp, fadeOutDown, fadeOutLeft, fadeOutRight, flipOutX transitionInMobile: "bounceInDown", transitionOutMobile: "fadeOutUp", buttons: {}, inputs: {}, onOpening: function () {}, onOpened: function () {}, onClosing: function () {}, onClosed: function () {}, }; if (!("remove" in Element.prototype)) { Element.prototype.remove = function () { if (this.parentNode) { this.parentNode.removeChild(this); } }; } if (typeof window.CustomEvent !== "function") { var CustomEventPolyfill = function (event, params) { params = params || { bubbles: false, cancelable: false, detail: undefined, }; var evt = document.createEvent("CustomEvent"); evt.initCustomEvent( event, params.bubbles, params.cancelable, params.detail, ); return evt; }; CustomEventPolyfill.prototype = window.Event.prototype; window.CustomEvent = CustomEventPolyfill; } var forEach = function (collection, callback, scope) { if (Object.prototype.toString.call(collection) === "[object Object]") { for (var prop in collection) { if (Object.prototype.hasOwnProperty.call(collection, prop)) { callback.call(scope, collection[prop], prop, collection); } } } else { if (collection) { for (var i = 0, len = collection.length; i < len; i++) { callback.call(scope, collection[i], i, collection); } } } }; var extend = function (defaults, options) { var extended = {}; forEach(defaults, function (value, prop) { extended[prop] = defaults[prop]; }); forEach(options, function (value, prop) { extended[prop] = options[prop]; }); return extended; }; var createFragElem = function (htmlStr) { var frag = document.createDocumentFragment(), temp = document.createElement("div"); temp.innerHTML = htmlStr; while (temp.firstChild) { frag.appendChild(temp.firstChild); } return frag; }; var generateId = function (params) { var newId = btoa(encodeURIComponent(params)); return newId.replace(/=/g, ""); }; var isColor = function (color) { if ( color.substring(0, 1) == "#" || color.substring(0, 3) == "rgb" || color.substring(0, 3) == "hsl" ) { return true; } else { return false; } }; var isBase64 = function (str) { try { return btoa(atob(str)) == str; } catch (err) { return false; } }; var drag = (function () { return { move: function (toast, instance, settings, xpos) { var opacity, opacityRange = 0.3, distance = 180; if (xpos !== 0) { toast.classList.add(PLUGIN_NAME + "-dragged"); toast.style.transform = "translateX(" + xpos + "px)"; if (xpos > 0) { opacity = (distance - xpos) / distance; if (opacity < opacityRange) { instance.hide( extend(settings, { transitionOut: "fadeOutRight", transitionOutMobile: "fadeOutRight", }), toast, "drag", ); } } else { opacity = (distance + xpos) / distance; if (opacity < opacityRange) { instance.hide( extend(settings, { transitionOut: "fadeOutLeft", transitionOutMobile: "fadeOutLeft", }), toast, "drag", ); } } toast.style.opacity = opacity; if (opacity < opacityRange) { if (ISCHROME || ISFIREFOX) toast.style.left = xpos + "px"; toast.parentNode.style.opacity = opacityRange; this.stopMoving(toast, null); } } }, startMoving: function (toast, instance, settings, e) { e = e || window.event; var posX = ACCEPTSTOUCH ? e.touches[0].clientX : e.clientX, toastLeft = toast.style.transform.replace("px)", ""); toastLeft = toastLeft.replace("translateX(", ""); var offsetX = posX - toastLeft; if (settings.transitionIn) { toast.classList.remove(settings.transitionIn); } if (settings.transitionInMobile) { toast.classList.remove(settings.transitionInMobile); } toast.style.transition = ""; if (ACCEPTSTOUCH) { document.ontouchmove = function (e) { e.preventDefault(); e = e || window.event; var posX = e.touches[0].clientX, finalX = posX - offsetX; drag.move(toast, instance, settings, finalX); }; } else { document.onmousemove = function (e) { e.preventDefault(); e = e || window.event; var posX = e.clientX, finalX = posX - offsetX; drag.move(toast, instance, settings, finalX); }; } }, stopMoving: function (toast, e) { if (ACCEPTSTOUCH) { document.ontouchmove = function () {}; } else { document.onmousemove = function () {}; } toast.style.opacity = ""; toast.style.transform = ""; if (toast.classList.contains(PLUGIN_NAME + "-dragged")) { toast.classList.remove(PLUGIN_NAME + "-dragged"); toast.style.transition = "transform 0.4s ease, opacity 0.4s ease"; setTimeout(function () { toast.style.transition = ""; }, 400); } }, }; })(); $iziToast.setSetting = function (ref, option, value) { $iziToast.children[ref][option] = value; }; $iziToast.getSetting = function (ref, option) { return $iziToast.children[ref][option]; }; $iziToast.destroy = function () { forEach( document.querySelectorAll("." + PLUGIN_NAME + "-overlay"), function (element, index) { element.remove(); }, ); forEach( document.querySelectorAll("." + PLUGIN_NAME + "-wrapper"), function (element, index) { element.remove(); }, ); forEach( document.querySelectorAll("." + PLUGIN_NAME), function (element, index) { element.remove(); }, ); this.children = {}; // Remove event listeners document.removeEventListener(PLUGIN_NAME + "-opened", {}, false); document.removeEventListener(PLUGIN_NAME + "-opening", {}, false); document.removeEventListener(PLUGIN_NAME + "-closing", {}, false); document.removeEventListener(PLUGIN_NAME + "-closed", {}, false); document.removeEventListener("keyup", {}, false); // Reset variables CONFIG = {}; }; /** * Initialize Plugin * @public * @param {Object} options User settings */ $iziToast.settings = function (options) { // Destroy any existing initializations $iziToast.destroy(); CONFIG = options; defaults = extend(defaults, options || {}); }; /** * Building themes functions. * @public * @param {Object} options User settings */ forEach(THEMES, function (theme, name) { $iziToast[name] = function (options) { var settings = extend(CONFIG, options || {}); settings = extend(theme, settings || {}); this.show(settings); }; }); /** * Do the calculation to move the progress bar * @private */ $iziToast.progress = function (options, $toast, callback) { var that = this, ref = $toast.getAttribute("data-iziToast-ref"), settings = extend(this.children[ref], options || {}), $elem = $toast.querySelector("." + PLUGIN_NAME + "-progressbar div"); return { start: function () { if (typeof settings.time.REMAINING == "undefined") { $toast.classList.remove(PLUGIN_NAME + "-reseted"); if ($elem !== null) { $elem.style.transition = "width " + settings.timeout + "ms " + settings.progressBarEasing; $elem.style.width = "0%"; } settings.time.START = new Date().getTime(); settings.time.END = settings.time.START + settings.timeout; settings.time.TIMER = setTimeout(function () { clearTimeout(settings.time.TIMER); if (!$toast.classList.contains(PLUGIN_NAME + "-closing")) { that.hide(settings, $toast, "timeout"); if (typeof callback === "function") { callback.apply(that); } } }, settings.timeout); that.setSetting(ref, "time", settings.time); } }, pause: function () { if ( typeof settings.time.START !== "undefined" && !$toast.classList.contains(PLUGIN_NAME + "-paused") && !$toast.classList.contains(PLUGIN_NAME + "-reseted") ) { $toast.classList.add(PLUGIN_NAME + "-paused"); settings.time.REMAINING = settings.time.END - new Date().getTime(); clearTimeout(settings.time.TIMER); that.setSetting(ref, "time", settings.time); if ($elem !== null) { var computedStyle = window.getComputedStyle($elem), propertyWidth = computedStyle.getPropertyValue("width"); $elem.style.transition = "none"; $elem.style.width = propertyWidth; } if (typeof callback === "function") { setTimeout(function () { callback.apply(that); }, 10); } } }, resume: function () { if (typeof settings.time.REMAINING !== "undefined") { $toast.classList.remove(PLUGIN_NAME + "-paused"); if ($elem !== null) { $elem.style.transition = "width " + settings.time.REMAINING + "ms " + settings.progressBarEasing; $elem.style.width = "0%"; } settings.time.END = new Date().getTime() + settings.time.REMAINING; settings.time.TIMER = setTimeout(function () { clearTimeout(settings.time.TIMER); if (!$toast.classList.contains(PLUGIN_NAME + "-closing")) { that.hide(settings, $toast, "timeout"); if (typeof callback === "function") { callback.apply(that); } } }, settings.time.REMAINING); that.setSetting(ref, "time", settings.time); } else { this.start(); } }, reset: function () { clearTimeout(settings.time.TIMER); delete settings.time.REMAINING; that.setSetting(ref, "time", settings.time); $toast.classList.add(PLUGIN_NAME + "-reseted"); $toast.classList.remove(PLUGIN_NAME + "-paused"); if ($elem !== null) { $elem.style.transition = "none"; $elem.style.width = "100%"; } if (typeof callback === "function") { setTimeout(function () { callback.apply(that); }, 10); } }, }; }; /** * Close the specific Toast * @public * @param {Object} options User settings */ $iziToast.hide = function (options, $toast, closedBy) { if (typeof $toast != "object") { $toast = document.querySelector($toast); } var that = this, settings = extend( this.children[$toast.getAttribute("data-iziToast-ref")], options || {}, ); settings.closedBy = closedBy || null; delete settings.time.REMAINING; $toast.classList.add(PLUGIN_NAME + "-closing"); // Overlay (function () { var $overlay = document.querySelector("." + PLUGIN_NAME + "-overlay"); if ($overlay !== null) { var refs = $overlay.getAttribute("data-iziToast-ref"); refs = refs.split(","); var index = refs.indexOf(String(settings.ref)); if (index !== -1) { refs.splice(index, 1); } $overlay.setAttribute("data-iziToast-ref", refs.join()); if (refs.length === 0) { $overlay.classList.remove("fadeIn"); $overlay.classList.add("fadeOut"); setTimeout(function () { $overlay.remove(); }, 700); } } })(); if (settings.transitionIn) { $toast.classList.remove(settings.transitionIn); } if (settings.transitionInMobile) { $toast.classList.remove(settings.transitionInMobile); } if (ISMOBILE || window.innerWidth <= MOBILEWIDTH) { if (settings.transitionOutMobile) $toast.classList.add(settings.transitionOutMobile); } else { if (settings.transitionOut) $toast.classList.add(settings.transitionOut); } var H = $toast.parentNode.offsetHeight; $toast.parentNode.style.height = H + "px"; $toast.style.pointerEvents = "none"; if (!ISMOBILE || window.innerWidth > MOBILEWIDTH) { $toast.parentNode.style.transitionDelay = "0.2s"; } try { var event = new CustomEvent(PLUGIN_NAME + "-closing", { detail: settings, bubbles: true, cancelable: true, }); document.dispatchEvent(event); } catch (ex) { console.warn(ex); } setTimeout(function () { $toast.parentNode.style.height = "0px"; $toast.parentNode.style.overflow = ""; setTimeout(function () { delete that.children[settings.ref]; $toast.parentNode.remove(); try { var event = new CustomEvent(PLUGIN_NAME + "-closed", { detail: settings, bubbles: true, cancelable: true, }); document.dispatchEvent(event); } catch (ex) { console.warn(ex); } if (typeof settings.onClosed !== "undefined") { settings.onClosed.apply(null, [settings, $toast, closedBy]); } }, 1000); }, 200); if (typeof settings.onClosing !== "undefined") { settings.onClosing.apply(null, [settings, $toast, closedBy]); } }; /** * Create and show the Toast * @public * @param {Object} options User settings */ $iziToast.show = function (options) { var that = this; // Merge user options with defaults var settings = extend(CONFIG, options || {}); settings = extend(defaults, settings); settings.time = {}; if (settings.id === null) { settings.id = generateId( settings.title + settings.message + settings.color, ); } if (settings.displayMode === 1 || settings.displayMode == "once") { try { if ( document.querySelectorAll("." + PLUGIN_NAME + "#" + settings.id) .length > 0 ) { return false; } } catch (exc) { console.warn( "[" + PLUGIN_NAME + "] Could not find an element with this selector: " + "#" + settings.id + ". Try to set an valid id.", ); } } if (settings.displayMode === 2 || settings.displayMode == "replace") { try { forEach( document.querySelectorAll("." + PLUGIN_NAME + "#" + settings.id), function (element, index) { that.hide(settings, element, "replaced"); }, ); } catch (exc) { console.warn( "[" + PLUGIN_NAME + "] Could not find an element with this selector: " + "#" + settings.id + ". Try to set an valid id.", ); } } settings.ref = new Date().getTime() + Math.floor(Math.random() * 10000000 + 1); $iziToast.children[settings.ref] = settings; var $DOM = { body: document.querySelector("body"), overlay: document.createElement("div"), toast: document.createElement("div"), toastBody: document.createElement("div"), toastTexts: document.createElement("div"), toastCapsule: document.createElement("div"), cover: document.createElement("div"), buttons: document.createElement("div"), inputs: document.createElement("div"), icon: !settings.iconUrl ? document.createElement("i") : document.createElement("img"), wrapper: null, }; $DOM.toast.setAttribute("data-iziToast-ref", settings.ref); $DOM.toast.appendChild($DOM.toastBody); $DOM.toastCapsule.appendChild($DOM.toast); // CSS Settings (function () { $DOM.toast.classList.add(PLUGIN_NAME); $DOM.toast.classList.add(PLUGIN_NAME + "-opening"); $DOM.toastCapsule.classList.add(PLUGIN_NAME + "-capsule"); $DOM.toastBody.classList.add(PLUGIN_NAME + "-body"); $DOM.toastTexts.classList.add(PLUGIN_NAME + "-texts"); if (ISMOBILE || window.innerWidth <= MOBILEWIDTH) { if (settings.transitionInMobile) $DOM.toast.classList.add(settings.transitionInMobile); } else { if (settings.transitionIn) $DOM.toast.classList.add(settings.transitionIn); } if (settings.class) { var classes = settings.class.split(" "); forEach(classes, function (value, index) { $DOM.toast.classList.add(value); }); } if (settings.id) { $DOM.toast.id = settings.id; } if (settings.rtl) { $DOM.toast.classList.add(PLUGIN_NAME + "-rtl"); $DOM.toast.setAttribute("dir", "rtl"); } if (settings.layout > 1) { $DOM.toast.classList.add(PLUGIN_NAME + "-layout" + settings.layout); } if (settings.balloon) { $DOM.toast.classList.add(PLUGIN_NAME + "-balloon"); } if (settings.maxWidth) { if (!isNaN(settings.maxWidth)) { $DOM.toast.style.maxWidth = settings.maxWidth + "px"; } else { $DOM.toast.style.maxWidth = settings.maxWidth; } } if (settings.theme !== "" || settings.theme !== "light") { $DOM.toast.classList.add(PLUGIN_NAME + "-theme-" + settings.theme); } if (settings.color) { //#, rgb, rgba, hsl if (isColor(settings.color)) { $DOM.toast.style.background = settings.color; } else { $DOM.toast.classList.add(PLUGIN_NAME + "-color-" + settings.color); } } if (settings.backgroundColor) { $DOM.toast.style.background = settings.backgroundColor; if (settings.balloon) { $DOM.toast.style.borderColor = settings.backgroundColor; } } })(); // Cover image (function () { if (settings.image) { $DOM.cover.classList.add(PLUGIN_NAME + "-cover"); $DOM.cover.style.width = settings.imageWidth + "px"; if (isBase64(settings.image.replace(/ /g, ""))) { $DOM.cover.style.backgroundImage = "url(data:image/png;base64," + settings.image.replace(/ /g, "") + ")"; } else { $DOM.cover.style.backgroundImage = "url(" + settings.image + ")"; } if (settings.rtl) { $DOM.toastBody.style.marginRight = settings.imageWidth + 10 + "px"; } else { $DOM.toastBody.style.marginLeft = settings.imageWidth + 10 + "px"; } $DOM.toast.appendChild($DOM.cover); } })(); // Button close (function () { if (settings.close) { $DOM.buttonClose = document.createElement("button"); $DOM.buttonClose.type = "button"; $DOM.buttonClose.classList.add(PLUGIN_NAME + "-close"); $DOM.buttonClose.addEventListener("click", function (e) { var button = e.target; that.hide(settings, $DOM.toast, "button"); }); $DOM.toast.appendChild($DOM.buttonClose); } else { if (settings.rtl) { $DOM.toast.style.paddingLeft = "18px"; } else { $DOM.toast.style.paddingRight = "18px"; } } })(); // Progress Bar & Timeout (function () { if (settings.progressBar) { $DOM.progressBar = document.createElement("div"); $DOM.progressBarDiv = document.createElement("div"); $DOM.progressBar.classList.add(PLUGIN_NAME + "-progressbar"); $DOM.progressBarDiv.style.background = settings.progressBarColor; $DOM.progressBar.appendChild($DOM.progressBarDiv); $DOM.toast.appendChild($DOM.progressBar); } if (settings.timeout) { if (settings.pauseOnHover && !settings.resetOnHover) { $DOM.toast.addEventListener("mouseenter", function (e) { that.progress(settings, $DOM.toast).pause(); }); $DOM.toast.addEventListener("mouseleave", function (e) { that.progress(settings, $DOM.toast).resume(); }); } if (settings.resetOnHover) { $DOM.toast.addEventListener("mouseenter", function (e) { that.progress(settings, $DOM.toast).reset(); }); $DOM.toast.addEventListener("mouseleave", function (e) { that.progress(settings, $DOM.toast).start(); }); } } })(); // Icon (function () { if (settings.iconUrl) { $DOM.icon.setAttribute("class", PLUGIN_NAME + "-icon"); $DOM.icon.setAttribute("src", settings.iconUrl); } else if (settings.icon) { $DOM.icon.setAttribute( "class", PLUGIN_NAME + "-icon " + settings.icon, ); if (settings.iconText) { $DOM.icon.appendChild(document.createTextNode(settings.iconText)); } if (settings.iconColor) { $DOM.icon.style.color = settings.iconColor; } } if (settings.icon || settings.iconUrl) { if (settings.rtl) { $DOM.toastBody.style.paddingRight = "33px"; } else { $DOM.toastBody.style.paddingLeft = "33px"; } $DOM.toastBody.appendChild($DOM.icon); } })(); // Title & Message (function () { if (settings.title.length > 0) { $DOM.strong = document.createElement("strong"); $DOM.strong.classList.add(PLUGIN_NAME + "-title"); $DOM.strong.appendChild(createFragElem(settings.title)); $DOM.toastTexts.appendChild($DOM.strong); if (settings.titleColor) { $DOM.strong.style.color = settings.titleColor; } if (settings.titleSize) { if (!isNaN(settings.titleSize)) { $DOM.strong.style.fontSize = settings.titleSize + "px"; } else { $DOM.strong.style.fontSize = settings.titleSize; } } if (settings.titleLineHeight) { if (!isNaN(settings.titleSize)) { $DOM.strong.style.lineHeight = settings.titleLineHeight + "px"; } else { $DOM.strong.style.lineHeight = settings.titleLineHeight; } } } if (settings.message.length > 0) { $DOM.p = document.createElement("p"); $DOM.p.classList.add(PLUGIN_NAME + "-message"); $DOM.p.appendChild(createFragElem(settings.message)); $DOM.toastTexts.appendChild($DOM.p); if (settings.messageColor) { $DOM.p.style.color = settings.messageColor; } if (settings.messageSize) { if (!isNaN(settings.titleSize)) { $DOM.p.style.fontSize = settings.messageSize + "px"; } else { $DOM.p.style.fontSize = settings.messageSize; } } if (settings.messageLineHeight) { if (!isNaN(settings.titleSize)) { $DOM.p.style.lineHeight = settings.messageLineHeight + "px"; } else { $DOM.p.style.lineHeight = settings.messageLineHeight; } } } if (settings.title.length > 0 && settings.message.length > 0) { if (settings.rtl) { $DOM.strong.style.marginLeft = "10px"; } else if (settings.layout !== 2 && !settings.rtl) { $DOM.strong.style.marginRight = "10px"; } } })(); $DOM.toastBody.appendChild($DOM.toastTexts); // Inputs var $inputs; (function () { if (settings.inputs.length > 0) { $DOM.inputs.classList.add(PLUGIN_NAME + "-inputs"); forEach(settings.inputs, function (value, index) { $DOM.inputs.appendChild(createFragElem(value[0])); $inputs = $DOM.inputs.childNodes; $inputs[index].classList.add(PLUGIN_NAME + "-inputs-child"); if (value[3]) { setTimeout(function () { $inputs[index].focus(); }, 300); } $inputs[index].addEventListener(value[1], function (e) { var ts = value[2]; return ts(that, $DOM.toast, this, e); }); }); $DOM.toastBody.appendChild($DOM.inputs); } })(); // Buttons (function () { if (settings.buttons.length > 0) { $DOM.buttons.classList.add(PLUGIN_NAME + "-buttons"); forEach(settings.buttons, function (value, index) { $DOM.buttons.appendChild(createFragElem(value[0])); var $btns = $DOM.buttons.childNodes; $btns[index].classList.add(PLUGIN_NAME + "-buttons-child"); if (value[2]) { setTimeout(function () { $btns[index].focus(); }, 300); } $btns[index].addEventListener("click", function (e) { e.preventDefault(); var ts = value[1]; return ts(that, $DOM.toast, this, e, $inputs); }); }); } $DOM.toastBody.appendChild($DOM.buttons); })(); if ( settings.message.length > 0 && (settings.inputs.length > 0 || settings.buttons.length > 0) ) { $DOM.p.style.marginBottom = "0"; } if (settings.inputs.length > 0 || settings.buttons.length > 0) { if (settings.rtl) { $DOM.toastTexts.style.marginLeft = "10px"; } else { $DOM.toastTexts.style.marginRight = "10px"; } if (settings.inputs.length > 0 && settings.buttons.length > 0) { if (settings.rtl) { $DOM.inputs.style.marginLeft = "8px"; } else { $DOM.inputs.style.marginRight = "8px"; } } } // Wrap (function () { $DOM.toastCapsule.style.visibility = "hidden"; setTimeout(function () { var H = $DOM.toast.offsetHeight; var style = $DOM.toast.currentStyle || window.getComputedStyle($DOM.toast); var marginTop = style.marginTop; marginTop = marginTop.split("px"); marginTop = parseInt(marginTop[0]); var marginBottom = style.marginBottom; marginBottom = marginBottom.split("px"); marginBottom = parseInt(marginBottom[0]); $DOM.toastCapsule.style.visibility = ""; $DOM.toastCapsule.style.height = H + marginBottom + marginTop + "px"; setTimeout(function () { $DOM.toastCapsule.style.height = "auto"; if (settings.target) { $DOM.toastCapsule.style.overflow = "visible"; } }, 500); if (settings.timeout) { that.progress(settings, $DOM.toast).start(); } }, 100); })(); // Target (function () { var position = settings.position; if (settings.target) { $DOM.wrapper = document.querySelector(settings.target); $DOM.wrapper.classList.add(PLUGIN_NAME + "-target"); if (settings.targetFirst) { $DOM.wrapper.insertBefore( $DOM.toastCapsule, $DOM.wrapper.firstChild, ); } else { $DOM.wrapper.appendChild($DOM.toastCapsule); } } else { if (POSITIONS.indexOf(settings.position) == -1) { console.warn( "[" + PLUGIN_NAME + "] Incorrect position.\nIt can be › " + POSITIONS, ); return; } if (ISMOBILE || window.innerWidth <= MOBILEWIDTH) { if ( settings.position == "bottomLeft" || settings.position == "bottomRight" || settings.position == "bottomCenter" ) { position = PLUGIN_NAME + "-wrapper-bottomCenter"; } else if ( settings.position == "topLeft" || settings.position == "topRight" || settings.position == "topCenter" ) { position = PLUGIN_NAME + "-wrapper-topCenter"; } else { position = PLUGIN_NAME + "-wrapper-center"; } } else { position = PLUGIN_NAME + "-wrapper-" + position; } $DOM.wrapper = document.querySelector( "." + PLUGIN_NAME + "-wrapper." + position, ); if (!$DOM.wrapper) { $DOM.wrapper = document.createElement("div"); $DOM.wrapper.classList.add(PLUGIN_NAME + "-wrapper"); $DOM.wrapper.classList.add(position); document.body.appendChild($DOM.wrapper); } if ( settings.position == "topLeft" || settings.position == "topCenter" || settings.position == "topRight" ) { $DOM.wrapper.insertBefore( $DOM.toastCapsule, $DOM.wrapper.firstChild, ); } else { $DOM.wrapper.appendChild($DOM.toastCapsule); } } if (!isNaN(settings.zindex)) { $DOM.wrapper.style.zIndex = settings.zindex; } else { console.warn("[" + PLUGIN_NAME + "] Invalid zIndex."); } })(); // Overlay (function () { if (settings.overlay) { if ( document.querySelector("." + PLUGIN_NAME + "-overlay.fadeIn") !== null ) { $DOM.overlay = document.querySelector( "." + PLUGIN_NAME + "-overlay", ); $DOM.overlay.setAttribute( "data-iziToast-ref", $DOM.overlay.getAttribute("data-iziToast-ref") + "," + settings.ref, ); if (!isNaN(settings.zindex) && settings.zindex !== null) { $DOM.overlay.style.zIndex = settings.zindex - 1; } } else { $DOM.overlay.classList.add(PLUGIN_NAME + "-overlay"); $DOM.overlay.classList.add("fadeIn"); $DOM.overlay.style.background = settings.overlayColor; $DOM.overlay.setAttribute("data-iziToast-ref", settings.ref); if (!isNaN(settings.zindex) && settings.zindex !== null) { $DOM.overlay.style.zIndex = settings.zindex - 1; } document.querySelector("body").appendChild($DOM.overlay); } if (settings.overlayClose) { $DOM.overlay.removeEventListener("click", {}); $DOM.overlay.addEventListener("click", function (e) { that.hide(settings, $DOM.toast, "overlay"); }); } else { $DOM.overlay.removeEventListener("click", {}); } } })(); // Inside animations (function () { if (settings.animateInside) { $DOM.toast.classList.add(PLUGIN_NAME + "-animateInside"); var animationTimes = [200, 100, 300]; if ( settings.transitionIn == "bounceInLeft" || settings.transitionIn == "bounceInRight" ) { animationTimes = [400, 200, 400]; } if (settings.title.length > 0) { setTimeout(function () { $DOM.strong.classList.add("slideIn"); }, animationTimes[0]); } if (settings.message.length > 0) { setTimeout(function () { $DOM.p.classList.add("slideIn"); }, animationTimes[1]); } if (settings.icon || settings.iconUrl) { setTimeout(function () { $DOM.icon.classList.add("revealIn"); }, animationTimes[2]); } var counter = 150; if (settings.buttons.length > 0 && $DOM.buttons) { setTimeout( function () { forEach($DOM.buttons.childNodes, function (element, index) { setTimeout(function () { element.classList.add("revealIn"); }, counter); counter = counter + 150; }); }, settings.inputs.length > 0 ? 150 : 0, ); } if (settings.inputs.length > 0 && $DOM.inputs) { counter = 150; forEach($DOM.inputs.childNodes, function (element, index) { setTimeout(function () { element.classList.add("revealIn"); }, counter); counter = counter + 150; }); } } })(); settings.onOpening.apply(null, [settings, $DOM.toast]); try { var event = new CustomEvent(PLUGIN_NAME + "-opening", { detail: settings, bubbles: true, cancelable: true, }); document.dispatchEvent(event); } catch (ex) { console.warn(ex); } setTimeout(function () { $DOM.toast.classList.remove(PLUGIN_NAME + "-opening"); $DOM.toast.classList.add(PLUGIN_NAME + "-opened"); try { var event = new CustomEvent(PLUGIN_NAME + "-opened", { detail: settings, bubbles: true, cancelable: true, }); document.dispatchEvent(event); } catch (ex) { console.warn(ex); } settings.onOpened.apply(null, [settings, $DOM.toast]); }, 1000); if (settings.drag) { if (ACCEPTSTOUCH) { $DOM.toast.addEventListener( "touchstart", function (e) { drag.startMoving(this, that, settings, e); }, false, ); $DOM.toast.addEventListener( "touchend", function (e) { drag.stopMoving(this, e); }, false, ); } else { $DOM.toast.addEventListener( "mousedown", function (e) { e.preventDefault(); drag.startMoving(this, that, settings, e); }, false, ); $DOM.toast.addEventListener( "mouseup", function (e) { e.preventDefault(); drag.stopMoving(this, e); }, false, ); } } if (settings.closeOnEscape) { document.addEventListener("keyup", function (evt) { evt = evt || window.event; if (evt.keyCode == 27) { that.hide(settings, $DOM.toast, "esc"); } }); } if (settings.closeOnClick) { $DOM.toast.addEventListener("click", function (evt) { that.hide(settings, $DOM.toast, "toast"); }); } that.toast = $DOM.toast; }; return $iziToast; }, );