/*! Ply 0.3.0 - MIT | git://github.com/rubaxa/Ply.git */ !function (a) { window.Ply = a(window) }(function (a, b) { "use strict"; function c(a) { return"function" == typeof a } function d(a) { if (O)return new O(a); var b = P.Deferred(); return a(b.resolve, b.reject), b } function e(a) { return O ? O.all(a) : P.when.apply(P, a) } function f(a) { return d(function (b) { return b(a) }) } function g(a) { return a && a.then ? a : f(a) } function h(a, b) { if (a)for (var c in a)a.hasOwnProperty(c) && b(a[c], c, a) } function i(a) { var b = {}; return h(a, function (a, d) { b[d] = c(a) ? a : a instanceof Object ? i(a) : a }), b } function j(a) { for (var b = Array.prototype.slice, c = b.call(arguments, 1), d = 0, e = c.length; e > d; d++)h(c[d], function (b, c) { a[c] = b }); return a } function k(a, b) { try { return(b || H).querySelector(a) } catch (c) { return P(a, b)[0] } } function l(a, b) { return a.getElementsByTagName(b) } function m(a, b) { try { a && b && a.appendChild(b) } catch (c) { } } function n(a) { a && a.parentNode && a.parentNode.removeChild(a) } function o(a, b, c) { var d = c.handle = c.handle || function (b) { b.target || (b.target = b.srcElement || H), 3 === b.target.nodeType && (b.target = b.target.parentNode), b.preventDefault || (b.preventDefault = function () { b.returnValue = !1 }), b.stopPropagation || (b.stopPropagation = function () { b.cancelBubble = !0 }), c.call(a, b) }; a.addEventListener ? a.addEventListener(b, d, !1) : a.attachEvent("on" + b, d) } function p(a, b, c) { var d = c.handle; d && (a.removeEventListener ? a.removeEventListener(b, d, !1) : a.detachEvent("on" + b, d)) } function q(a) { if (null == a && (a = "div"), a.appendChild)return a; if (a.skip)return H.createDocumentFragment(); "string" == typeof a && (a = {tag: a}); var b, c = a.children, d = Q.exec(a.tag || ""); return delete a.children, a.tag = d[1] || "div", a.id = a.id || (d[2] || "").substr(1), d = (d[3] || "").split("."), d[0] = a.className || "", a.className = d.join(" "), b = H.createElement(a.tag), delete a.tag, h(a, function (c, d) { if (c)if ("css" === d)t(b, a.css); else if ("text" === d)null != c && m(b, H.createTextNode(c)); else if ("html" === d)null != c && (b.innerHTML = c); else if ("ply" === d)b.setAttribute(M, c); else if (d in b)try { b[d] = c } catch (e) { b.setAttribute(d, c) } else/^data-/.test(d) && b.setAttribute(d, c) }), c && c.appendChild ? m(b, c) : h(c, function (a, c) { a && ("string" == typeof a ? a = {text: a} : "object" != typeof a && (a = {}), "string" == typeof c && (a.tag = a.tag || c), m(b, q(a))) }), b } function r(a) { for (var b, c, d = l(a, "input"), e = 0, f = d.length; f > e; e++)if (b = d[e], "submit" === b.type)!c && (c = b); else if (!/hidden|check|radio/.test(b.type) && "" == b.value) { c = b; break } c || (c = l(a, "button")[0]); try { c.focus() } catch (g) { } } function s(a) { return u(!0), d(function (b) { for (var c, d = l(a, "img"), e = d.length, f = e, g = function () { if (--f <= 0) { for (e = d.length; e--;)c = d[e], p(c, "load", g), p(c, "error", g); u(!1), b() } }; e--;)c = d[e], c.complete ? f-- : (o(c, "load", g), o(c, "error", g)); !f && g() }) } function t(a, b, c) { if (a && a.style && b)if (b instanceof Object)for (var d in b)t(a, d, b[d]); else { if (void 0 === c)return H.defaultView && H.defaultView.getComputedStyle ? c = H.defaultView.getComputedStyle(a, "") : a.currentStyle && (c = a.currentStyle), void 0 === b ? c : c[b]; R[b] ? R[b](a.style, c) : a.style[K[b] || b] = c } } function u(a) { var b = u.get(); clearTimeout(u.pid), u.pid = a ? I(function () { m(H.body, b) }, 100) : I(function () { n(b) }, 100) } function v(a, b) { return q({css: {padding: "20px 20px 40px", display: "inline-block", position: "relative", textAlign: "left", whiteSpace: "normal", verticalAlign: "middle", transform: "translate3d(0, 0, 0)"}, children: b.baseHtml ? [ {ply: ":layer", tag: ".ply-layer", className: b.mod, css: j({overflow: "hidden", position: "relative", backfaceVisibility: "hidden"}, b.layer), children: [b.flags.closeBtn && {ply: ":close", tag: ".ply-x", text: J.cross}, {tag: ".ply-inside", children: a}]} ] : a}) } function w(a) { return q({ply: ":overlay", tag: ".ply-overlay", css: {top: 0, left: 0, right: 0, bottom: 0, position: "fixed"}, children: [ {tag: "div", css: j({width: "100%", height: "100%"}, a)} ]}) } function x(a, b, c) { a.wrapEl = q({tag: "form", css: {whiteSpace: "nowrap", zIndex: b.zIndex}}), c || (a.overlayEl = w(b.overlay), a.overlayBoxEl = a.overlayEl.firstChild, m(a.wrapEl, a.overlayEl)); var d = q(); t(d, {height: "100%", display: "inline-block", verticalAlign: "middle"}), m(a.wrapEl, d); var e = b.el; return a.el = e && e.cloneNode ? e.cloneNode(!0) : q({html: e || ""}), a.layerEl = v(a.el, b), a.contentEl = y(a.layerEl), a.context = new A(a.layerEl), m(a.wrapEl, a.layerEl), a.bodyEl = b.body && k(b.body) || H.body, a.wrapEl.tabIndex = -1, t(a.wrapEl, {top: 0, left: 0, right: 0, bottom: 0, position: "fixed", textAlign: "center", overflow: "auto", outline: 0}), a } function y(a) { return a.firstChild.lastChild.firstChild } function z(a, b) { b = a instanceof Object ? a : b || {}, b.el = b.el || a; var c = this; c.cid = "c" + F++, N.zIndex++, c.options = b = j({}, N, b), b.flags = j({}, N.flags, b.flags), x(c, b), c.setEffect(b.effect), c.fx = function (a) { return!(c.fx.queue = c.fx.queue.then(a, a).then(function () { return c })) }, c.fx.queue = f(), c.on("click", ":overlay", function () { c.hasFlag("closeByOverlay") && c.closeBy("overlay") }), c.on("click", ":close", function (a, b) { a.preventDefault(), c.closeBy("BUTTON" === b.nodeName ? "cancel" : "x") }), c.options.init(this) } function A(a) { this.el = a } function B(a, b) { return null == a ? {skip: !0} : ("string" == typeof a && (a = {text: a}), "object" == typeof a && (a.name = a.name || b), a) } function C(a, b, c) { var d, e = C[a]; return e || (a = a.split(/\s+/).slice(0, -1).join(" "), e = b && (C[a + " [name=" + b.name + "]"] || C[a + " [type=" + b.type + "]"]) || C[a + " *"] || C[":default"]), d = q(e(b, c)), b && b.name && d.setAttribute(M + "-name", b.name), d.className += " ply-ui", d } function D(a, b) { D["_" + a] = b, D[a] = function (a, c) { return d(function (d, e) { b(a, c, d, e) }).then(function (a) { return a.appendChild || (a = C(":root", a)), a }) } } function E(a, b, c, d) { return b.mod = a, b.effect = b.effect || "slide", b.flags = j({closeBtn: !1}, b.flags), {header: c.title, content: c.form ? {"dialog-form": {children: c.form}} : {el: c.text || c}, ctrls: {ok: c.ok || d.ok, cancel: c.cancel === !1 ? null : c.cancel || d.cancel}} } var F = 1, G = function () { }, H = a.document, I = a.setTimeout, J = {ok: "OK", cancel: "Cancel", cross: "✖"}, K = function () { var a = {}, b = H.createElement("div").style, c = "opacity transition transform perspective transformStyle transformOrigin backfaceVisibility".split(" "), d = ["Webkit", "Moz", "O", "MS"]; return h(c, function (c, e) { if (a[c] = c in b && c, !a[c])for (e = 0; 4 > e; e++) { var f = d[e] + c.charAt(0).toUpperCase() + c.substr(1); if (a[c] = f in b && f)break } }), a }(), L = {esc: 27}, M = "data-ply", N = {zIndex: 1e4, layer: {}, overlay: {opacity: .6, backgroundColor: "rgb(0, 0, 0)"}, flags: {closeBtn: !0, bodyScroll: !1, closeByEsc: !0, closeByOverlay: !0, hideLayerInStack: !0, visibleOverlayInStack: !1}, baseHtml: !0, init: G, open: G, close: G, destroy: G, callback: G}, O = b || a.Promise, P = a.jQuery || a.Zepto || a.ender || a.$, Q = /^(\w+)?(#\w+)?((?:\.[\w_-]+)*)/i, R = {opacity: !K.opacity && function (a, b) { a.zoom = 1, a.filter = "alpha(opacity=" + 100 * b + ")" }}; u.get = function () { return u.el || (u.el = q({tag: ".ply-loading", children: {".ply-loading-spinner": !0}})) }, z.fn = z.prototype = {constructor: z, _activate: function () { if (!this.hasFlag("bodyScroll")) { var a = this.bodyEl, b = q({css: {overflow: "auto", visibility: "hidden", height: "5px"}, children: [ {tag: "div", css: {height: "100px"}} ]}); this.__overflow = t(a, "overflow"), this.__paddingRight = t(a, "paddingRight"), m(a, b), t(a, {overflow: "hidden", paddingRight: b.offsetWidth - b.firstChild.offsetWidth + "px"}), n(b) } o(this.wrapEl, "submit", this._getHandleEvent("submit")) }, _deactivate: function () { this.hasFlag("bodyScroll") || t(this.bodyEl, {overflow: this.__overflow, paddingRight: this.__paddingRight}), p(this.layerEl, "submit", this._getHandleEvent("submit")) }, _getHandleEvent: function (a) { var b = this, c = b.__handleEvent || (b.__handleEvent = {}); return c[a] || (c[a] = function (c) { b._handleEvent(a, c) }), c[a] }, _handleEvent: function (a, b) { b.preventDefault(), this.closeBy(a) }, applyEffect: function (a, b, c) { return a = this[a] || a, a.nodeType || (c = b, b = a, a = this.layerEl), c = z.effects.get(c || this.effects), z.effects.apply.call(c, a, b) }, closeBy: function (a) { var b = this, c = {by: a, state: "submit" === a, layer: this, data: this.context.toJSON(), context: this.context}, d = this.options.callback(c); g(d).then(function (a) { a !== !1 && (b.result = c, b.close()) }) }, on: function (a, b, c) { var d = this; return c || (c = b, b = ":layer"), c["_" + b] = function (a) { var e = a.target; do if (1 === e.nodeType && e.getAttribute(M) === b)return c.call(d, a, e); while (e !== d.wrapEl && (e = e.parentNode)) }, o(d.wrapEl, a, c["_" + b]), d }, off: function (a, b, c) { return c || (c = b, b = "layer"), p(this.wrapEl, a, c["_" + b] || G), this }, hasFlag: function (a) { return!!this.options.flags[a] }, setEffect: function (a) { return this.effects = z.effects.get(a), this }, _toggleState: function (a, b) { var c = this, d = a ? "open" : "close", f = z.stack.last; return c.visible != a && (c.visible = a, c[a ? "_activate" : "_deactivate"](), z.stack[a ? "add" : "remove"](c), c.fx(function () { return s(c.wrapEl).then(function () { var g = z.stack.length === (a ? 1 : 0), h = f && f.hasFlag("hideLayerInStack"), i = g || c.hasFlag("visibleOverlayInStack"); return a ? (!i && n(c.overlayBoxEl), m(c.bodyEl, c.wrapEl), c.wrapEl.focus(), r(c.layerEl), h && f.applyEffect("close.layer", b).then(function () { n(f.layerEl) })) : (f = z.stack.last) && (m(f.wrapEl, f.layerEl), f.hasFlag("hideLayerInStack") && f.applyEffect("open.layer", b).then(function () { r(f.el) })), e([c.applyEffect(d + ".layer", b), i && c.applyEffect("overlayEl", d + ".overlay", b)]).then(function () { a || (n(c.wrapEl), m(c.overlayEl, c.overlayBoxEl)), c.options[d](c) }) }) })), c.fx.queue }, open: function (a) { return this.result = null, this._toggleState(!0, a) }, close: function (a) { return this._toggleState(!1, a) }, _swap: function (a, b, c, d, f) { var g = this; return g.visible ? g.fx(function () { return s(b).then(function () { return d(), e([g.applyEffect(a, "close.layer", c), g.applyEffect(b, "open.layer", c)]).then(function () { n(a), f(), g.wrapEl.focus(), r(b) }) }) }) : f(), g.fx.queue }, swap: function (a, b) { a = j({}, this.options, a); var c = this, d = x({}, a, !0), e = b || a.effect ? z.effects.get(b || a.effect) : c.effects, f = c.layerEl, g = d.layerEl; return c._swap(f, g, e, function () { m(c.bodyEl, c.wrapEl), m(c.bodyEl, d.wrapEl) }, function () { n(d.wrapEl), m(c.wrapEl, g), c.el = d.el, c.layerEl = g, c.contentEl = y(g), c.context.el = g }) }, innerSwap: function (a, b) { a = j({}, this.options, a); var c = this, d = x({}, a, !0), e = b || a.effect ? z.effects.get(b || a.effect) : c.effects, f = k(".ply-inside", d.layerEl), g = k(".ply-inside", c.layerEl); return c._swap(g, f, e, function () { t(g, {width: g.offsetWidth + "px", position: "absolute"}), m(g.parentNode, f) }, G) }, destroy: function () { n(this.wrapEl), this._deactivate(), z.stack.remove(this), this.visible = !1, this.options.destroy(this) }}; var S = [], T = S.push, U = S.splice; return z.stack = {_idx: {}, last: null, length: 0, _pop: function (a) { var b = z.stack.last; a.keyCode === L.esc && b.hasFlag("closeByEsc") && b.closeBy("esc") }, add: function (a) { var b = T.call(this, a); this.last = a, this._idx[a.cid] = b - 1, 1 === b && o(H, "keyup", this._pop) }, remove: function (a) { var b = this._idx[a.cid]; b >= 0 && (U.call(this, b, 1), delete this._idx[a.cid], this.last = this[this.length - 1], this.last || p(H, "keyup", this._pop)) }}, z.effects = {defaults: {duration: 300, open: {layer: null, overlay: null}, close: {layer: null, overlay: null}}, setup: function (a) { this.defaults = this.get(a) }, set: function (a) { j(this, a) }, get: function (a) { function b(a) { var b = /^([\w_-]+)(?::(\d+%?))?(\[[^\]]+\])?/.exec(a) || []; return{name: b[1] || a, duration: b[2] || null, args: JSON.parse(b[3] || "null") || {}} } function c(c, d, e) { var f = b(d), g = c[f.name] || e || {}, h = f.duration || g.duration || c.duration || a.duration; return"string" == typeof g && (g = b(g), delete g.args), /%/.test(g.duration) && (g.duration = parseInt(g.duration, 10) / 100 * h), g.duration = 0 | (g.duration || h), g } var d = i(this.defaults); if ("string" == typeof a) { var e = b(a); a = i(this[e.name] || {open: {}, close: {}}), a.duration = e.duration || a.duration, a.open.args = e.args[0], a.close.args = e.args[1] } else if (a instanceof Array) { var f = b(a[0]), g = b(a[1]), h = this[f.name], j = this[g.name]; a = {open: i(h && h.open || {layer: a[0], overlay: a[0]}), close: i(j && j.close || {layer: a[1], overlay: a[1]})}, a.open.args = f.args[0], a.close.args = g.args[0] } else a instanceof Object || (a = {}); a.duration = 0 | (a.duration || d.duration); for (var k in{open: 0, close: 0}) { var l = a[k] || d[k] || {}; "string" == typeof l && (l = {layer: l}), l.layer = c(l, "layer", d[k].layer), l.overlay = c(l, "overlay", d[k].overlay), void 0 === l.args && delete l.args, a[k] = l } return a }, apply: function (a, b) { b = b.split("."); var e, g, j = this[b[0]], k = a.firstChild, l = [a.getAttribute("style"), k && k.getAttribute("style")]; return K.transition && j && (g = j[b[1]]) && (e = z.effects[g.name]) && (e.to || e.from) ? (e = i(e), t(a, "transition", "none"), t(k, "transition", "none"), h(e.to, function (b, c, d) { "&" === b && (d[c] = t(a, c)) }), c(e.from) ? e.from(a, j.args) : e.from && t(a, e.from), d(function (b) { e.width = a.offsetWidth, t(a, "transition", "all " + g.duration + "ms"), t(k, "transition", "all " + g.duration + "ms"), c(e.to) ? e.to(a, j.args) : t(a, e.to), I(b, g.duration) }).then(function () { a.setAttribute("style", l[0]), k && k.setAttribute("style", l[1]) })) : f() }}, z.effects.set({fade: {open: {layer: "fade-in:80%", overlay: "fade-in:100%"}, close: {layer: "fade-out:60%", overlay: "fade-out:60%"}}, scale: {open: {layer: "scale-in", overlay: "fade-in"}, close: {layer: "scale-out", overlay: "fade-out"}}, fall: {open: {layer: "fall-in", overlay: "fade-in"}, close: {layer: "fall-out", overlay: "fade-out"}}, slide: {open: {layer: "slide-in", overlay: "fade-in"}, close: {layer: "slide-out", overlay: "fade-out"}}, "3d-flip": {open: {layer: "3d-flip-in", overlay: "fade-in"}, close: {layer: "3d-flip-out", overlay: "fade-out"}}, "3d-sign": {open: {layer: "3d-sign-in", overlay: "fade-in"}, close: {layer: "3d-sign-out", overlay: "fade-out"}}, inner: {open: {layer: "inner-in"}, close: {layer: "inner-out"}}, "fade-in": {from: {opacity: 0}, to: {opacity: "&"}}, "fade-out": {to: {opacity: 0}}, "slide-in": {from: {opacity: 0, transform: "translateY(20%)"}, to: {opacity: "&", transform: "translateY(0)"}}, "slide-out": {to: {opacity: 0, transform: "translateY(20%)"}}, "fall-in": {from: {opacity: 0, transform: "scale(1.3)"}, to: {opacity: "&", transform: "scale(1)"}}, "fall-out": {to: {opacity: 0, transform: "scale(1.3)"}}, "scale-in": {from: {opacity: 0, transform: "scale(0.7)"}, to: {opacity: "&", transform: "scale(1)"}}, "scale-out": {to: {opacity: 0, transform: "scale(0.7)"}}, rotate3d: function (a, b, c, d, e) { t(a, {perspective: "1300px"}), t(a.firstChild, {opacity: b, transform: "rotate" + c + "(" + d + "deg)", transformStyle: "preserve-3d", transformOrigin: e ? "50% 0" : "50%"}) }, "3d-sign-in": {from: function (a) { z.effects.rotate3d(a, 0, "X", -60, "50% 0") }, to: function (a) { t(a.firstChild, {opacity: 1, transform: "rotateX(0)"}) }}, "3d-sign-out": {from: function (a) { z.effects.rotate3d(a, 1, "X", 0, "50% 0") }, to: function (a) { t(a.firstChild, {opacity: 0, transform: "rotateX(-60deg)"}) }}, "3d-flip-in": {from: function (a, b) { z.effects.rotate3d(a, 0, "Y", b || -70) }, to: function (a) { t(a.firstChild, {opacity: 1, transform: "rotateY(0)"}) }}, "3d-flip-out": {from: function (a) { z.effects.rotate3d(a, 1, "Y", 0) }, to: function (a, b) { t(a.firstChild, {opacity: 0, transform: "rotateY(" + (b || 70) + "deg)"}) }}, "inner-in": {from: function (a) { t(a, "transform", "translateX(100%)") }, to: function (a) { t(a, "transform", "translateX(0%)") }}, "inner-out": {from: function (a) { t(a, "transform", "translateX(0%)") }, to: function (a) { t(a, "transform", "translateX(-100%)") }}}), A.fn = A.prototype = {constructor: A, getEl: function (a) { return this.el ? k("[" + M + '-name="' + a + '"]', this.el) : void 0 }, val: function (a, b) { var c = "string" == typeof a ? this.getEl(a) : a; return c && null == c.value && (c = l(c, "input")[0] || l(c, "textarea")[0] || l(c, "select")[0]), c && null != b && (c.value = b), c && c.value || "" }, toJSON: function () { for (var a, b = this.el.querySelectorAll("[" + M + "-name]"), c = {}, d = b.length; d--;)a = b[d], c[a.getAttribute(M + "-name")] = this.val(a); return c }}, C.factory = function (a, b, c) { C[a.replace(/^\s+|\s+$/g, "").replace(/\s+/g, " ")] = function (d, e) { var f = H.createDocumentFragment(); if (null != d || ":root" === a) { d = c ? d : B(d), h(c ? d : d.children, function (b, c) { var d = ((e || a) + " " + c).replace(/^:\w+\s+/, ""), g = C(d, B(b, c), d); m(f, g) }), c || delete d.children; var g = b(d, f); return g.appendChild || j(g, d), g } return f } }, C.factory(":default", function (a, b) { return a.children = b, a }), C.factory(":root", function (a) { return{tag: ".ply-form", className: a.mod, children: [C(":header", a.header), C(":content", a.content), a.ctrls && C(":default", {tag: "div.ply-footer", children: a.ctrls})]} }), C.factory(":header", function (a, b) { return{tag: ".ply-header", text: a.text, children: b} }), C.factory(":content", function (a, b) { return{tag: ".ply-content", children: b} }, !0), C.factory("ok", function (a) { return{ply: ":ok", tag: "button.ply-ctrl.ply-ok", text: a === !0 ? J.ok : a} }), C.factory("cancel", function (a) { return{ply: ":close", tag: "button.ply-ctrl.ply-cancel", type: "reset", text: a === !0 ? J.cancel : a} }), D.use = function (a, b, c, d, e) { D["_" + a](b, c, d, e) }, D("default", function (a, b, c) { c(b || {}) }), D("alert", function (a, b, c) { c(E("alert", a, b, {ok: !0})) }), D("confirm", function (a, b, c) { c(E("confirm", a, b, {ok: !0, cancel: !0})) }), D("prompt", function (a, b, c) { c(E("prompt", a, b, {ok: !0, cancel: !0})) }), C.factory("dialog-form *", function (a) { return{tag: "input.ply-input", type: a.type || "text", name: a.name, value: a.value, required: !0, placeholder: a.hint || a.text} }), z.create = function (a, b, c) { c || (c = b, b = {}); var d = D[a] || D["default"]; return d(b, c).then(function (a) { return new z(j(b, {el: a})) }) }, z.open = function (a, b, c) { return z.create(a, b, c).then(function (a) { return a.open() }) }, z.dialog = function (a, b, c) { return a instanceof Object ? (b = b || {}, d(function (c, d) { var e, f, g, i = b.initState, k = a, l = {}, m = function (a, c) { (b.progress || G)(j({name: e.$name, index: e.$index, length: o, stack: k, current: e, layer: c}, a), l) }, n = function (a, b, c) { var d = JSON.parse(JSON.stringify(a.data)); e = a, g = !0, (a.prepare || G)(d, l), z.create(a.ui || "alert", a.options || {}, d).then(function (d) { var e; f ? e = f[/^inner/.test(b) ? "innerSwap" : "swap"](d, b) : (f = d, e = f.open()), e.then(function () { l[a.$name].el = f.layerEl, g = !1 }), c(f) }) }, o = 0; h(k, function (a, b) { i = i || b, a.effects = a.effects || {}, a.$name = b, a.$index = o++, l[b] = new z.Context }), k.$length = o, n(k[i], null, function (a) { m({}, a), f.options.callback = function (a) { if (g)return!1; var b = a.state || "next" === e.back, f = k[e[b ? "next" : "back"]]; return f ? (n(f, e[b ? "nextEffect" : "backEffect"], function (b) { m(a, b) }), !1) : void(a.state ? c : d)(a, l) } }) })) : (c || (c = b || {}, b = {}), z.open(a, b, c).then(function (a) { return d(function (b) { a.options.close = function () { b(a.result) } }) })) }, z.ui = C, z.factory = D, z.lang = J, z.css = t, z.cssHooks = R, z.keys = L, z.noop = G, z.each = h, z.extend = j, z.promise = d, z.support = K, z.defaults = N, z.attrName = M, z.Context = A, z.dom = {build: q, append: m, remove: n, addEvent: o, removeEvent: p}, z });