mirror of https://github.com/RubaXa/Ply.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2 lines
17 KiB
2 lines
17 KiB
/*! 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(G)return new G(a);var b=F.Deferred();return a(b.resolve,b.reject),b}function e(a){return G?G.all(a):F.when.apply(F,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||D).querySelector(a)}catch(c){return F(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||D),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,b,c){if(a&&a.style&&b)if(b instanceof Object)for(var d in b)q(a,d,b[d]);else{if(void 0===c)return D.defaultView&&D.defaultView.getComputedStyle?c=D.defaultView.getComputedStyle(a,""):a.currentStyle&&(c=a.currentStyle),void 0===b?c:c[b];K[b]?K[b](a.style,c):a.style[I[b]||b]=c}}function r(a){if(null==a&&(a="div"),a.appendChild)return a;if(a.skip)return D.createDocumentFragment();"string"==typeof a&&(a={tag:a});var b,c=a.children,d=H.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=D.createElement(a.tag),delete a.tag,h(a,function(c,d){if(c)if("css"===d)q(b,a.css);else if("text"===d)null!=c&&m(b,D.createTextNode(c));else if("html"===d)null!=c&&(b.innerHTML=c);else if("ply"===d)b.setAttribute(O,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,r(a)))}),b}function s(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 t(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 u(a){var b=u.get();clearTimeout(u.pid),u.pid=a?E(function(){m(D.body,b)},100):E(function(){n(b)},100)}function v(a,b){return r({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:z.lang.cross},{tag:".ply-inside",children:a}]}]:a})}function w(a){return r({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=r({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=r();q(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):r({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)||D.body,a.wrapEl.tabIndex=-1,q(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"+B++,P.zIndex++,c.options=b=j({},P,b),b.flags=j({},P.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}var B=1,C=function(){},D=a.document,E=a.setTimeout,F=a.jQuery||a.Zepto||a.ender||a.$,G=b||a.Promise,H=/^(\w+)?(#\w+)?((?:\.[\w_-]+)*)/i,I=function(){var a={},b=r().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}(),J={esc:27},K={},L=[],M=L.push,N=L.splice,O="data-ply";I.opacity||(K.opacity=function(a,b){a.zoom=1,a.filter="alpha(opacity="+100*b+")"}),u.get=function(){return u.el||(u.el=r({tag:".ply-loading",children:{".ply-loading-spinner":!0}}))};var P={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:C,open:C,close:C,destroy:C,callback:C};return z.fn=z.prototype={constructor:z,_activate:function(){if(!this.hasFlag("bodyScroll")){var a=this.bodyEl,b=r({css:{overflow:"auto",visibility:"hidden",height:"5px"},children:[{tag:"div",css:{height:"100px"}}]});this.__overflow=q(a,"overflow"),this.__paddingRight=q(a,"paddingRight"),m(a,b),q(a,{overflow:"hidden",paddingRight:b.offsetWidth-b.firstChild.offsetWidth+"px"}),n(b)}o(this.wrapEl,"submit",this._getHandleEvent("submit"))},_deactivate:function(){this.hasFlag("bodyScroll")||q(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(O)===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]||C),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 t(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(),s(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(){s(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 t(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(),s(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(){q(g,{width:g.offsetWidth+"px",position:"absolute"}),m(g.parentNode,f)},C)},destroy:function(){n(this.wrapEl),this._deactivate(),z.stack.remove(this),this.visible=!1,this.options.destroy(this)}},z.stack={_idx:{},last:null,length:0,_pop:function(a){var b=z.stack.last;a.keyCode===J.esc&&b.hasFlag("closeByEsc")&&b.closeBy("esc")},add:function(a){var b=M.call(this,a);this.last=a,this._idx[a.cid]=b-1,1===b&&o(D,"keyup",this._pop)},remove:function(a){var b=this._idx[a.cid];b>=0&&(N.call(this,b,1),delete this._idx[a.cid],this.last=this[this.length-1],this.last||p(D,"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)},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 I.transition&&j&&(g=j[b[1]])&&(e=z.effects[g.name])&&(e.to||e.from)?(e=i(e),q(a,"transition","none"),q(k,"transition","none"),h(e.to,function(b,c,d){"&"===b&&(d[c]=q(a,c))}),c(e.from)?e.from(a,j.args):e.from&&q(a,e.from),d(function(b){e.width=a.offsetWidth,q(a,"transition","all "+g.duration+"ms"),q(k,"transition","all "+g.duration+"ms"),c(e.to)?e.to(a,j.args):q(a,e.to),E(b,g.duration)}).then(function(){a.setAttribute("style",l[0]),k&&k.setAttribute("style",l[1])})):f()},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){q(a,{perspective:"1300px"}),q(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){q(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){q(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){q(a.firstChild,{opacity:1,transform:"rotateY(0)"})}},"3d-flip-out":{from:function(a){z.effects.rotate3d(a,1,"Y",0)},to:function(a,b){q(a.firstChild,{opacity:0,transform:"rotateY("+(b||70)+"deg)"})}},"inner-in":{from:function(a){q(a,"transform","translateX(100%)")},to:function(a){q(a,"transform","translateX(0%)")}},"inner-out":{from:function(a){q(a,"transform","translateX(0%)")},to:function(a){q(a,"transform","translateX(-100%)")}}},A.fn=A.prototype={constructor:A,getEl:function(a){return this.el?k("["+O+'-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("["+O+"-name]"),c={},d=b.length;d--;)a=b[d],c[a.getAttribute(O+"-name")]=this.val(a);return c}},z.lang={ok:"OK",cancel:"Cancel",cross:"✖"},z.css=q,z.cssHooks=K,z.keys=J,z.noop=C,z.each=h,z.extend=j,z.promise=d,z.support=I,z.defaults=P,z.attrName=O,z.Context=A,z.dom={build:r,append:m,remove:n,addEvent:o,removeEvent:p},z}),function(a){a(Ply)}(function(a){"use strict";function b(a,c,d){var f,g=b[a];return g||(a=a.split(/\s+/).slice(0,-1).join(" "),g=c&&(b[a+" [name="+c.name+"]"]||b[a+" [type="+c.type+"]"])||b[a+" *"]||b[":default"]),f=j(g(c,d)),c&&c.name&&f.setAttribute(e+"-name",c.name),f.className+=" ply-ui",f}function c(a,d){c["_"+a]=d,c[a]=function(a,c){return i(function(b,e){d(a,c,b,e)}).then(function(a){return a.appendChild||(a=b(":root",a)),a})}}function d(a,b,c,d){return b.mod=a,b.effect=b.effect||"slide",b.flags=h({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 e=a.attrName,f=a.noop,g=a.each,h=a.extend,i=a.promise,j=a.dom.build,k=a.dom.append,l=a.lang,m=function(a,b){return null==a?{skip:!0}:("string"==typeof a&&(a={text:a}),"object"==typeof a&&(a.name=a.name||b),a)};b.factory=function(a,c,d){b[a.replace(/^\s+|\s+$/g,"").replace(/\s+/g," ")]=function(e,f){var i=document.createDocumentFragment();if(null!=e||":root"===a){e=d?e:m(e),g(d?e:e.children,function(c,d){var e=((f||a)+" "+d).replace(/^:\w+\s+/,""),g=b(e,m(c,d),e);k(i,g)}),d||delete e.children;var j=c(e,i);return j.appendChild||h(j,e),j}return i}},b.factory(":default",function(a,b){return a.children=b,a}),b.factory(":root",function(a){return{tag:".ply-form",className:a.mod,children:[b(":header",a.header),b(":content",a.content),a.ctrls&&b(":default",{tag:"div.ply-footer",children:a.ctrls})]}}),b.factory(":header",function(a,b){return{tag:".ply-header",text:a.text,children:b}}),b.factory(":content",function(a,b){return{tag:".ply-content",children:b}},!0),b.factory("ok",function(a){return{ply:":ok",tag:"button.ply-ctrl.ply-ok",text:a===!0?l.ok:a}}),b.factory("cancel",function(a){return{ply:":close",tag:"button.ply-ctrl.ply-cancel",type:"reset",text:a===!0?l.cancel:a}}),c.use=function(a,b,d,e,f){c["_"+a](b,d,e,f)},c("default",function(a,b,c){c(b||{})}),c("alert",function(a,b,c){c(d("alert",a,b,{ok:!0}))}),c("confirm",function(a,b,c){c(d("confirm",a,b,{ok:!0,cancel:!0}))}),c("prompt",function(a,b,c){c(d("prompt",a,b,{ok:!0,cancel:!0}))}),b.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}}),a.create=function(b,d,e){e||(e=d,d={});var f=c[b]||c["default"];return f(d,e).then(function(b){return new a(h(d,{el:b}))})},a.open=function(b,c,d){return a.create(b,c,d).then(function(a){return a.open()})},a.dialog=function(b,c,d){return b instanceof Object?(c=c||{},i(function(d,e){var i,j,k,l=c.initState,m=b,n={},o=function(a,b){(c.progress||f)(h({name:i.$name,index:i.$index,length:q,stack:m,current:i,layer:b},a),n)},p=function(b,c,d){var e=JSON.parse(JSON.stringify(b.data));i=b,k=!0,(b.prepare||f)(e,n),a.create(b.ui||"alert",b.options||{},e).then(function(a){var e;j?e=j[/^inner/.test(c)?"innerSwap":"swap"](a,c):(j=a,e=j.open()),e.then(function(){n[b.$name].el=j.layerEl,k=!1}),d(j)})},q=0;g(m,function(b,c){l=l||c,b.effects=b.effects||{},b.$name=c,b.$index=q++,n[c]=new a.Context}),m.$length=q,p(m[l],null,function(a){o({},a),j.options.callback=function(a){if(k)return!1;var b=a.state||"next"===i.back,c=m[i[b?"next":"back"]];return c?(p(c,i[b?"nextEffect":"backEffect"],function(b){o(a,b)}),!1):void(a.state?d:e)(a,n)}})})):(d||(d=c||{},c={}),a.open(b,c,d).then(function(a){return i(function(b){a.options.close=function(){b(a.result)}})}))},a.ui=b,a.factory=c}); |