UNPKG

jquery-page

Version:

jQuery Page Transitions for HTML5 Single-Page-Apps

1 lines 6.77 kB
!function(p){function a(e){this.root=e}a.prototype={insert:function(e,t){if(2!==arguments.length)throw new Error("invalid number of arguments");if("string"!=typeof e)throw new Error("invalid page id argument (string expected)");return p("> .jquery-page-container",this.root).append(p(t).attr("data-jquery-page-name",e).addClass("jquery-page-disabled")),this},remove:function(r){var e=this;if(1!==arguments.length)throw new Error("invalid number of arguments");if("string"!=typeof r)throw new Error("invalid page id argument (string expected)");var t=p("> .jquery-page-container > *",e.root).filter(function(e,t){return p(t).attr("data-jquery-page-name")===r});if(0===t.length)throw new Error('no such page "'+r+'" found');if(p(t).hasClass("jquery-page-active")){var a=e.existing().filter(function(e){return e!==r});0<a.length&&e.transition(a[0],"none")}return p(t).remove(),this},fetch:function(r){if(0===arguments.length)throw new Error("missing page id");if(1===arguments.length&&"string"!=typeof r)throw new Error("invalid page id argument (string expected)");var e=p("> .jquery-page-container > *",this.root).filter(function(e,t){return p(t).attr("data-jquery-page-name")===r});if(1<e.length)throw new Error('more than one page with id "'+r+'" found');return 0===e.length?null:e.get(0)},existing:function(){if(0!==arguments.length)throw new Error("invalid number of arguments");var e=[];return p("> .jquery-page-container > *",this.root).each(function(){e.push(p(this).attr("data-jquery-page-name"))}),e},active:function(){if(0!==arguments.length)throw new Error("invalid number of arguments");var e=p("> .jquery-page-container > .jquery-page-active",this.root);if(0===e.length)throw new Error("internal error: no active page found");if(1<e.length)throw new Error("internal error: more than one active page found");return e.attr("data-jquery-page-name")},shake:function(t){if(arguments.length<0||1<arguments.length)throw new Error("invalid number of arguments (0 or 1 expected)");if(1===arguments.length&&"function"!=typeof t)throw new Error("invalid complete argument (function expected)");var r=p("> .jquery-page-container",this.root),e=p(this.root).width(),a=function(e){e.target===this&&(p(r).css("width","").removeClass("jquery-page-shake"),"function"==typeof t&&t.call(this),p(r).off("animationend",a))};return p(r).width(e).addClass("jquery-page-shake").on("animationend",a),this},transition:function(r,e,t){var a=this;if(arguments.length<2||3<arguments.length)throw new Error("invalid number of arguments (2 or 3 expected)");if("string"!=typeof r)throw new Error("invalid page id argument (string expected)");if("string"!=typeof e)throw new Error("invalid transition type argument (string expected)");if(3===arguments.length&&"function"!=typeof t)throw new Error("invalid complete argument (function expected)");var n=p("> .jquery-page-container",a.root),i=p("> .jquery-page-container > .jquery-page-active",a.root);if("none"!==e&&0===i.length)throw new Error("internal error: no active page found");if("none"!==e&&1<i.length)throw new Error("internal error: more than one active page found");var o=p("> .jquery-page-container > *",a.root).filter(function(e,t){return p(t).attr("data-jquery-page-name")===r});if(0===o.length)throw new Error('no such page "'+r+'" found');if(1<o.length)throw new Error('more than one page with id "'+r+'" found');var s,l,g,d=p(a.root).width(),u=p(a.root).height();if("none"===e)p(i).removeClass("jquery-page-active").addClass("jquery-page-disabled"),p(o).removeClass("jquery-page-disabled").addClass("jquery-page-active"),"function"==typeof t&&t.call(this,r);else if(null!==(s=e.match(/^slide-in-from-(left|right)$/)))l=s[1],p(n).width(2*d).css("left","left"===l?-d:0).addClass("jquery-page-horizontal"),p(i).width(d).addClass("left"===l?"jquery-page-right":"jquery-page-left"),p(o).width(d).addClass("left"===l?"jquery-page-left":"jquery-page-right").removeClass("jquery-page-disabled"),g=function(e){e.target===this&&(p(i).addClass("jquery-page-disabled").removeClass("left"===l?"jquery-page-right":"jquery-page-left").removeClass("jquery-page-active").css("width",""),p(o).removeClass("left"===l?"jquery-page-left":"jquery-page-right").addClass("jquery-page-active").css("width",""),p(n).css("width","").css("transform","").css("left","").removeClass("jquery-page-horizontal").removeClass("jquery-page-slide"),"function"==typeof t&&t.call(this,r),p(n).off("transitionend",g))},p(n).addClass("jquery-page-slide").css("transform","translate("+("left"===l?"":"-")+d+"px,0)").on("transitionend",g);else if(null!==(s=e.match(/^slide-in-from-(top|bottom)$/)))l=s[1],p(n).height(2*u).css("top","top"===l?-u:0).addClass("jquery-page-vertical"),p(i).addClass("top"===l?"jquery-page-bottom":"jquery-page-top").height(u),p(o).addClass("top"===l?"jquery-page-top":"jquery-page-bottom").removeClass("jquery-page-disabled").height(u),g=function(e){e.target===this&&(p(i).addClass("jquery-page-disabled").removeClass("top"===l?"jquery-page-bottom":"jquery-page-top").removeClass("jquery-page-active").css("height",""),p(o).removeClass("top"===l?"jquery-page-top":"jquery-page-bottom").addClass("jquery-page-active").css("height",""),p(n).css("height","").removeClass("jquery-page-vertical").removeClass("jquery-page-slide").css("transform","").css("top",0),"function"==typeof t&&t.call(this,r),p(n).off("transitionend",g))},p(n).addClass("jquery-page-slide").css("transform","translate(0,"+("top"===l?"":"-")+u+"px)").on("transitionend",g);else{if(null===(s=e.match(/^flip-towards-(left|right)$/)))throw new Error("invalid transition type");l=s[1],p(n).addClass("jquery-page-stacked").width(d),p(i).addClass("jquery-page-front").width(d),p(o).addClass("jquery-page-back").removeClass("jquery-page-disabled").width(d),g=function(e){e.target===this&&(p(i).addClass("jquery-page-disabled").removeClass("jquery-page-front").removeClass("jquery-page-active").css("width",""),p(o).removeClass("jquery-page-back").addClass("jquery-page-active").css("width",""),p(n).css("width","").removeClass("jquery-page-stacked").removeClass("jquery-page-flip-"+l),"function"==typeof t&&t.call(this,r),p(n).off("transitionend",g))},p(n).addClass("jquery-page-flip-"+l).on("transitionend",g)}return this}},p.fn.extend({page:function(){var r=null;return this.each(function(){var e=p(this).data("jquery-page-api");if(!e){e=new a(this),p(this).data("jquery-page-api",e).addClass("jquery-page");var t=p("> *",this);if(0===t.length)t=p("<div></div>"),p(this).append(t);else if(1!==t.length)throw new Error("require a single container element under jQuery Page root element");p(t).addClass("jquery-page-container"),p("> *",t).addClass("jquery-page-disabled"),p("> *:first",t).removeClass("jquery-page-disabled").addClass("jquery-page-active")}r=e}),r}})}(jQuery);