diff --git a/README.fr.md b/README.fr.md index 9a3ac70..102e783 100644 --- a/README.fr.md +++ b/README.fr.md @@ -27,6 +27,10 @@ La compatibilité avec tous les navigateurs et appareils modernes n'est pas enco - supprime les données jQuery internes de turn.js sans effacer les données utilisateur sans lien. - Remplacement de la boucle d'animation interne `setInterval` par `requestAnimationFrame`. - Correction de `animatef(false)` pour que l'annulation d'une animation annule bien la frame planifiée. +- Modernisation des sorties CSS : + - les gradients utilisent maintenant la syntaxe standard `linear-gradient(...deg, ...)` ; + - les gradients de pli conservent des stops normalisés entre `0` et `100%` avec des ombres plus douces, sans highlight blanc ; + - les transforms écrivent maintenant les propriétés standard `transform` et `transform-origin`, avec fallback préfixé quand il est détecté. - Ajout d'une démo navigateur minimale avec jQuery `4.0.0`. - Ajout de texte et d'images locales dans la démo minimale. - Correction de la mise en page de la démo minimale afin que les dimensions mesurées par turn.js correspondent à la taille réellement rendue des pages. @@ -169,6 +173,8 @@ La suite actuelle couvre : - l'enregistrement des namespaces d'événements ; - le nettoyage `destroy` et la réinitialisation ; - la planification et l'annulation `requestAnimationFrame` dans `animatef` ; +- l'écriture des propriétés CSS standard pour les transforms ; +- les gradients de pli bornés et uniquement ombrés pendant l'animation ; - le rendu de la démo minimale ; - le rendu après page tournée ; - la géométrie en viewport compact ; diff --git a/readme.md b/readme.md index 57009f7..19f8dc2 100644 --- a/readme.md +++ b/readme.md @@ -27,6 +27,10 @@ Compatibility is not yet guaranteed for every modern browser or device. Safari/W - removes turn.js internal jQuery data while preserving unrelated user data. - Replaced the internal `setInterval` animation loop with `requestAnimationFrame`. - Fixed `animatef(false)` so cancelling an animation cancels the scheduled animation frame. +- Modernized CSS output: + - gradients now use standard `linear-gradient(...deg, ...)`; + - fold gradients keep normalized `0-100%` stops and use softer shadow-only colors; + - transforms now write standard `transform` and `transform-origin` properties, with a prefixed fallback when detected. - Added a minimal browser demo using jQuery `4.0.0`. - Added text and local images to the minimal demo. - Fixed minimal demo layout so turn.js page measurements match the real rendered page size. @@ -169,6 +173,8 @@ The current suite covers: - event namespace registration; - `destroy` cleanup and re-initialization; - `requestAnimationFrame` scheduling and cancellation in `animatef`; +- standard CSS transform property writing; +- bounded, shadow-only fold gradients during animation; - minimal demo rendering; - page turn rendering; - compact viewport geometry; diff --git a/tests/unit/turn.unit.test.js b/tests/unit/turn.unit.test.js index 52ebb38..dbd57f0 100644 --- a/tests/unit/turn.unit.test.js +++ b/tests/unit/turn.unit.test.js @@ -220,6 +220,16 @@ describe('turn.js jQuery plugin', () => { expect(complete).not.toHaveBeenCalled(); }); + it('writes modern CSS transform properties', () => { + const { $ } = fixture; + const element = $('
')[0]; + + $(element).transform('translate(12px, 24px)', '10% 20%'); + + expect(element.style.transform).toBe('translate(12px, 24px)'); + expect(element.style.transformOrigin).toBe('10% 20%'); + }); + it('registers internal handlers with event namespaces', () => { fixture.window.close(); fixture = createFixture(); diff --git a/tests/visual/minimal.spec.js b/tests/visual/minimal.spec.js index d714a5a..9152ee3 100644 --- a/tests/visual/minimal.spec.js +++ b/tests/visual/minimal.spec.js @@ -113,7 +113,7 @@ test('minimal demo keeps page measurements aligned during a page turn', async ({ await expect(page.locator('#status')).toHaveText('Page 4 / 6'); await page.locator('#next').click(); - await page.waitForTimeout(160); + await page.waitForTimeout(80); const metrics = await page.evaluate(() => { const book = document.querySelector('#book').getBoundingClientRect(); @@ -144,5 +144,22 @@ test('minimal demo keeps page measurements aligned during a page turn', async ({ expect(item.jqueryHeight, item.page).toBe(metrics.pageHeight); } + const gradientImages = await page.evaluate(() => ( + [...document.querySelectorAll('[style*="linear-gradient"]')] + .map(element => element.style.backgroundImage) + .filter(Boolean) + )); + + expect(gradientImages.length).toBeGreaterThan(0); + for (const backgroundImage of gradientImages) { + expect(backgroundImage).not.toContain('255, 255, 255'); + + for (const match of backgroundImage.matchAll(/([0-9.]+)%/g)) { + const stop = Number(match[1]); + expect(stop).toBeGreaterThanOrEqual(0); + expect(stop).toBeLessThanOrEqual(100); + } + } + await expect(page.locator('#book')).toHaveScreenshot('minimal-book-turning-page-4.png'); }); diff --git a/turn.js b/turn.js index ed03106..c8bfd9d 100644 --- a/turn.js +++ b/turn.js @@ -209,41 +209,19 @@ var has3d, gradient = function(obj, p0, p1, colors, numColors) { - var j, cols = []; + var j, cols = [], + dx = p1.x-p0.x, + dy = p1.y-p0.y, + angle = Math.atan2(dy, dx), + stop; - if (vendor=='-webkit-') { - - for (j = 0; js)throw new Error('It is impossible to add the page "'+e+'", the maximum value is: "'+s+'"')}else e=s,r=!0;return e>=1&&e<=s&&(i.done&&this.turn("stop"),e in i.pageObjs&&_._movePages.call(this,e,1),r&&(i.totalPages=s),i.pageObjs[e]=t(a),i.pageDefaults[e]={style:i.pageObjs[e].attr("style"),class:i.pageObjs[e].attr("class")},i.pageObjs[e].addClass("turn-page p"+e),_._addPage.call(this,e),i.done&&this.turn("update"),_._removeFromDOM.call(this)),this},_addPage:function(a){var e=this.data(),r=e.pageObjs[a];if(r)if(_._necessPage.call(this,a)){if(!e.pageWrap[a]){var i="double"==e.display?this.width()/2:this.width(),s=this.height();r.css({width:i,height:s}),e.pagePlace[a]=a,e.pageWrap[a]=t("
",{class:"turn-page-wrapper",page:a,css:{position:"absolute",overflow:"hidden",width:i,height:s}}).css(v["double"==e.display?a%2:0]),this.append(e.pageWrap[a]),e.pageWrap[a].prepend(e.pageObjs[a])}a&&1!=_._setPageLoc.call(this,a)||_._makeFlip.call(this,a)}else e.pagePlace[a]=0,e.pageObjs[a]&&e.pageObjs[a].remove()},hasPage:function(t){return t in this.data().pageObjs},_makeFlip:function(t){var a=this.data();if(!a.pages[t]&&a.pagePlace[t]==t){var e="single"==a.display,r=t%2;a.pages[t]=a.pageObjs[t].css({width:e?this.width():this.width()/2,height:this.height()}).flip({page:t,next:e&&t===a.totalPages?t-1:r||e?t+1:t-1,turn:this,duration:a.opts.duration,acceleration:a.opts.acceleration,corners:e?"all":r?"forward":"backward",backGradient:a.opts.gradients,frontGradient:a.opts.gradients}).flip("disable",a.disabled).on("pressed"+d,_._pressed).on("released"+d,_._released).on("start"+d,_._start).on("end"+d,_._end).on("flip"+d,_._flip)}return a.pages[t]},_makeRange:function(){this.data();var t,a=this.turn("range");for(t=a[0];t<=a[1];t++)_._addPage.call(this,t)},range:function(t){var a,e,r,i=this.data();t=t||i.tpage||i.page;var s=_._view.call(this,t);if(t<1||t>i.totalPages)throw new Error('"'+t+'" is not a page for range');return s[1]=s[1]||s[0],s[0]>=1&&s[1]<=i.totalPages?(a=Math.floor(2),i.totalPages-s[1]>s[0]?r=2*a-(e=Math.min(s[0]-1,a)):e=2*a-(r=Math.min(i.totalPages-s[1],a))):(e=5,r=5),[Math.max(1,s[0]-e),Math.min(i.totalPages,s[1]+r)]},_necessPage:function(t){if(0===t)return!0;var a=this.turn("range");return t>=a[0]&&t<=a[1]},_removeFromDOM:function(){var t,a=this.data();for(t in a.pageWrap)P(t,a.pageWrap)&&!_._necessPage.call(this,t)&&_._removePageFromDOM.call(this,t)},_removePageFromDOM:function(t){var a=this.data();if(a.pages[t]){var e=a.pages[t].data();e.f&&e.f.fwrapper&&e.f.fwrapper.remove(),a.pages[t].remove(),delete a.pages[t]}a.pageObjs[t]&&a.pageObjs[t].remove(),a.pageWrap[t]&&(a.pageWrap[t].remove(),delete a.pageWrap[t]),delete a.pagePlace[t]},removePage:function(t){var a=this.data();return a.pageObjs[t]&&(this.turn("stop"),_._removePageFromDOM.call(this,t),delete a.pageObjs[t],_._movePages.call(this,t,-1),a.totalPages=a.totalPages-1,_._makeRange.call(this),a.page>a.totalPages&&this.turn("page",a.totalPages)),this},_movePages:function(t,a){var e,r=this.data(),i="single"==r.display,s=function(t){var e=t+a,s=e%2;r.pageObjs[t]&&(r.pageObjs[e]=r.pageObjs[t].removeClass("page"+t).addClass("page"+e)),r.pagePlace[t]&&r.pageWrap[t]&&(r.pagePlace[e]=e,r.pageWrap[e]=r.pageWrap[t].css(v[i?0:s]).attr("page",e),r.pages[t]&&(r.pages[e]=r.pages[t].flip("options",{page:e,next:i||s?e+1:e-1,corners:i?"all":s?"forward":"backward"})),a&&(delete r.pages[t],delete r.pagePlace[t],delete r.pageObjs[t],delete r.pageWrap[t],delete r.pageObjs[t]))};if(a>0)for(e=r.totalPages;e>=t;e--)s(e);else for(e=t;e<=r.totalPages;e++)s(e)},display:function(a){var e=this.data(),r=e.display;if(a){if(-1==t.inArray(a,f))throw new Error('"'+a+'" is not a value for display');if("single"==a?e.pageObjs[0]||(this.turn("stop").css({overflow:"hidden"}),e.pageObjs[0]=t("
",{class:"turn-page p-temporal"}).css({width:this.width(),height:this.height()}).appendTo(this)):e.pageObjs[0]&&(this.turn("stop").css({overflow:""}),e.pageObjs[0].remove(),delete e.pageObjs[0]),e.display=a,r){var i=this.turn("size");_._movePages.call(this,1,0),this.turn("size",i.width,i.height).turn("update")}return this}return r},animating:function(){return this.data().pageMv.length>0},disable:function(a){var e,r=this.data(),i=this.turn("view");for(e in r.disabled=void 0===a||!0===a,r.pages)P(e,r.pages)&&r.pages[e].flip("disable",!!a&&t.inArray(e,i));return this},size:function(t,a){if(t&&a){var e,r=this.data(),i="double"==r.display?t/2:t;for(e in this.css({width:t,height:a}),r.pageObjs[0]&&r.pageObjs[0].css({width:i,height:a}),r.pageWrap)P(e,r.pageWrap)&&(r.pageObjs[e].css({width:i,height:a}),r.pageWrap[e].css({width:i,height:a}),r.pages[e]&&r.pages[e].css({width:i,height:a}));return this.turn("resize"),this}return{width:this.width(),height:this.height()}},resize:function(){var t,a=this.data();for(a.pages[0]&&(a.pageWrap[0].css({left:-this.width()}),a.pages[0].flip("resize",!0)),t=1;t<=a.totalPages;t++)a.pages[t]&&a.pages[t].flip("resize",!0)},_removeMv:function(t){var a,e=this.data();for(a=0;a0?e[0]:0,e[1]<=a.totalPages?e[1]:0]:[e[0]>0&&e[0]<=a.totalPages?e[0]:0]},stop:function(t){var a,e,r=this.data(),i=r.pageMv;for(a in r.pageMv=[],r.tpage&&(r.page=r.tpage,delete r.tpage),i)P(a,i)&&(e=r.pages[i[a]].data().f.opts,O._moveFoldingPage.call(r.pages[i[a]],null),r.pages[i[a]].flip("hideFoldedPage"),r.pagePlace[e.next]=e.next,e.force&&(e.next=e.page%2==0?e.page-1:e.page+1,delete e.force));return this.turn("update"),this},pages:function(t){var a=this.data();if(t){if(tt&&this.turn("page",t)}return a.totalPages=t,this}return a.totalPages},_fitPage:function(a,e){var r=this.data(),i=this.turn("view",a);r.page!=a&&(this.trigger("turning",[a,i]),-1!=t.inArray(1,i)&&this.trigger("first"),-1!=t.inArray(r.totalPages,i)&&this.trigger("last")),r.pageObjs[a]&&(r.tpage=a,this.turn("stop",e),_._removeFromDOM.call(this),_._makeRange.call(this),this.trigger("turned",[a,i]))},_turnPage:function(a){var e,r,i=this.data(),s=this.turn("view"),n=this.turn("view",a);if(i.page!=a&&(this.trigger("turning",[a,n]),-1!=t.inArray(1,n)&&this.trigger("first"),-1!=t.inArray(i.totalPages,n)&&this.trigger("last")),i.pageObjs[a]&&(i.tpage=a,this.turn("stop"),_._makeRange.call(this),"single"==i.display?(e=s[0],r=n[0]):s[1]&&a>s[1]?(e=s[1],r=n[0]):s[0]&&as[0]?"br":"bl"):i.pages[e].flip("turnPage")}},page:function(a){a=parseInt(a,10);var e=this.data();return a>0&&a<=e.totalPages?(e.done&&-1==t.inArray(a,this.turn("view"))?_._turnPage.call(this,a):_._fitPage.call(this,a),this):e.page},next:function(){var t=this.data();return this.turn("page",_._view.call(this,t.page).pop()+1)},previous:function(){var t=this.data();return this.turn("page",_._view.call(this,t.page).shift()-1)},_addMotionPage:function(){var a=t(this).data().f.opts,e=a.turn,r=e.data();a.pageMv=a.page,_._addMv.call(e,a.pageMv),r.pagePlace[a.next]=a.page,e.turn("update")},_start:function(a,e,r){var i=e.turn.data(),s=t.Event("start");if(a.stopPropagation(),e.turn.trigger(s,[e,r]),s.isDefaultPrevented())a.preventDefault();else{if("single"==i.display){var n="l"==r.charAt(1);1==e.page&&n||e.page==i.totalPages&&!n?a.preventDefault():n?(e.next=e.nexte.page?e.next:e.page+1}_._addMotionPage.call(this)}},_end:function(a,e){var r=t(this).data().f.opts,i=r.turn,s=i.data();a.stopPropagation(),e||s.tpage?s.tpage!=r.next&&s.tpage!=r.page||(delete s.tpage,_._fitPage.call(i,s.tpage||r.next,!0)):(_._removeMv.call(i,r.pageMv),i.turn("update"))},_pressed:function(){var a,e=t(this).data().f,r=e.opts.turn.data().pages;for(a in r)a!=e.opts.page&&r[a].flip("disable",!0);return e.time=(new Date).getTime()},_released:function(a,e){var r=t(this),i=r.data().f;a.stopPropagation(),((new Date).getTime()-i.time<200||e.x<0||e.x>t(this).width())&&(a.preventDefault(),i.opts.turn.data().tpage=i.opts.next,i.opts.turn.turn("update"),t(r).flip("turnPage"))},_flip:function(){var a=t(this).data().f.opts;a.turn.trigger("turn",[a.next])},calculateZ:function(t){var a,e,r,i,s,n=this,o=this.data(),p=this.turn("view"),h=p[0]||p[1],l={pageZ:{},partZ:{},pageV:{}},d=function(t){var a=n.turn("view",t);a[0]&&(l.pageV[a[0]]=!0),a[1]&&(l.pageV[a[1]]=!0)};for(a=0;a=i||o.y>=n)return!1;if(o.y=n-p))return!1;o.corner="b"}if(o.x<=p)o.corner+="l";else{if(!(o.x>=i-p))return!1;o.corner+="r"}return-1!=t.inArray(o.corner,h)&&o},_c:function(t,a){return{tl:b(a=a||0,a),tr:b(this.width()-a,a),bl:b(a,this.height()-a),br:b(this.width()-a,this.height()-a)}[t]},_c2:function(t){return{tl:b(2*this.width(),0),tr:b(-this.width(),0),bl:b(2*this.width(),this.height()),br:b(-this.width(),this.height())}[t]},_foldingPage:function(t){var a=this.data().f.opts;if(a.folding)return a.folding;if(a.turn){var e=a.turn.data();return"single"==e.display?e.pageObjs[a.next]?e.pageObjs[0]:null:e.pageObjs[a.next]}},_backGradient:function(){var a=this.data().f,e=a.opts.turn,r=a.opts.backGradient&&(!e||"single"==e.data().display||2!=a.opts.page&&a.opts.page!=e.data().totalPages-1);return r&&!a.bshadow&&(a.bshadow=t("
",w(0,0,1)).css({position:"",width:this.width(),height:this.height()}).appendTo(a.parent)),r},resize:function(t){var a=this.data().f,e=this.width(),r=this.height(),i=Math.round(Math.sqrt(Math.pow(e,2)+Math.pow(r,2)));t&&(a.wrapper.css({width:i,height:i}),a.fwrapper.css({width:i,height:i}).children(":first-child").css({width:e,height:r}),a.fpage.css({width:r,height:e}),a.opts.frontGradient&&a.ashadow.css({width:r,height:e}),O._backGradient.call(this)&&a.bshadow.css({width:e,height:r})),a.parent.is(":visible")&&(a.fwrapper.css({top:a.parent.offset().top,left:a.parent.offset().left}),a.opts.turn&&a.fparent.css({top:-a.opts.turn.offset().top,left:-a.opts.turn.offset().left})),this.flip("z",a.opts["z-index"])},_addPageWrapper:function(){var a=this.data().f,e=this.parent();if(!a.wrapper){this.css("left"),this.css("top");var r=this.width(),i=this.height();Math.round(Math.sqrt(Math.pow(r,2)+Math.pow(i,2)));if(a.parent=e,a.fparent=a.opts.turn?a.opts.turn.data().fparent:t("#turn-fwrappers"),!a.fparent){var s=t("
",{css:{"pointer-events":"none"}}).hide();s.data().flips=0,a.opts.turn?(s.css(w(-a.opts.turn.offset().top,-a.opts.turn.offset().left,"auto","visible").css).appendTo(a.opts.turn),a.opts.turn.data().fparent=s):s.css(w(0,0,"auto","visible").css).attr("id","turn-fwrappers").appendTo(t("body")),a.fparent=s}this.css({position:"absolute",top:0,left:0,bottom:"auto",right:"auto"}),a.wrapper=t("
",w(0,0,this.css("z-index"))).appendTo(e).prepend(this),a.fwrapper=t("
",w(e.offset().top,e.offset().left)).hide().appendTo(a.fparent),a.fpage=t("
",{css:{cursor:"default"}}).appendTo(t("
",w(0,0,0,"visible")).appendTo(a.fwrapper)),a.opts.frontGradient&&(a.ashadow=t("
",w(0,0,1)).appendTo(a.fpage)),O.setData.call(this,a),O.resize.call(this,!0)}},_fold:function(t){var a,e,s,n,o,p,h=this,l=0,d=0,g=b(0,0),f=b(0,0),c=b(0,0),u=this.width(),v=this.height(),w=O._foldingPage.call(this),m=(Math.tan(d),this.data().f),P=m.opts.acceleration,_=m.wrapper.height(),j=O._c.call(this,t.corner),W="t"==t.corner.substr(0,1),z="l"==t.corner.substr(1,1),k=function(){var w,y=b(j.x?j.x-t.x:t.x,j.y?j.y-t.y:t.y),x=Math.atan2(y.y,y.x);l=(d=i-x)/r*180,w=b(z?u-y.x/2:t.x+y.x/2,y.y/2);var P=d-Math.atan2(w.y,w.x),M=Math.max(0,Math.sin(P)*Math.sqrt(Math.pow(w.x,2)+Math.pow(w.y,2)));if(c=b(M*Math.sin(d),M*Math.cos(d)),d>i&&(c.x=c.x+Math.abs(c.y*Math.tan(x)),c.y=0,Math.round(c.x*Math.tan(r-d))i){var D=r-d,F=_-v/Math.sin(D);g=b(Math.round(F*Math.cos(D)),Math.round(F*Math.sin(D))),z&&(g.x=-g.x),W&&(g.y=-g.y)}a=Math.round(c.y/Math.tan(d)+c.x);var A=u-a,T=A*Math.cos(2*d),G=A*Math.sin(2*d);f=b(Math.round(z?A-T:a+T),Math.round(W?G:v-G)),o=A*Math.sin(d);var q=O._c2.call(h,t.corner),E=Math.sqrt(Math.pow(q.x-t.x,2)+Math.pow(q.y-t.y,2));return p=E100?(o-100)/o:0,e=b(o*Math.sin(i-d)/v*100,o*Math.cos(i-d)/u*100),W&&(e.y=100-e.y),z&&(e.x=100-e.x)),O._backGradient.call(h)&&(s=b(o*Math.sin(d)/u*100,o*Math.cos(d)/v*100),z||(s.x=100-s.x),W||(s.y=100-s.y)),c.x=Math.round(c.x),c.y=Math.round(c.y),!0},D=function(t,a,r,i){var o=["0","auto"],l=(u-_)*r[0]/100,d=(v-_)*r[1]/100,c={left:o[a[0]],top:o[a[1]],right:o[a[2]],bottom:o[a[3]]},w=90!=i&&-90!=i?z?-1:1:0;r=r[0]+"% "+r[1]+"%",h.css(c).transform(x(i)+y(t.x+w,t.y,P),r),m.fpage.parent().css(c),m.wrapper.transform(y(-t.x+l-w,-t.y+d,P)+x(-i),r),m.fwrapper.transform(y(-t.x+g.x+l,-t.y+g.y+d,P)+x(-i),r),m.fpage.parent().transform(x(i)+y(t.x+f.x-g.x,t.y+f.y-g.y,P),r),m.opts.frontGradient&&M(m.ashadow,b(z?100:0,W?100:0),b(e.x,e.y),[[n,"rgba(0,0,0,0)"],[.8*(1-n)+n,"rgba(0,0,0,"+.2*p+")"],[1,"rgba(255,255,255,"+.2*p+")"]],3),O._backGradient.call(h)&&M(m.bshadow,b(z?0:100,W?0:100),b(s.x,s.y),[[.8,"rgba(0,0,0,0)"],[1,"rgba(0,0,0,"+.3*p+")"],[1,"rgba(0,0,0,0)"]],3)};switch(t.corner){case"tl":t.x=Math.max(t.x,1),k(),D(c,[1,0,0,1],[100,0],l),m.fpage.transform(y(-v,-u,P)+x(90-2*l),"100% 100%"),w.transform(x(90)+y(0,-v,P),"0% 0%");break;case"tr":t.x=Math.min(t.x,u-1),k(),D(b(-c.x,c.y),[0,0,0,1],[0,0],-l),m.fpage.transform(y(0,-u,P)+x(2*l-90),"0% 100%"),w.transform(x(270)+y(-u,0,P),"0% 0%");break;case"bl":t.x=Math.max(t.x,1),k(),D(b(c.x,-c.y),[1,1,0,0],[100,100],-l),m.fpage.transform(y(-v,0,P)+x(2*l-90),"100% 0%"),w.transform(x(270)+y(-u,0,P),"0% 0%");break;case"br":t.x=Math.min(t.x,u-1),k(),D(b(-c.x,-c.y),[0,1,1,0],[0,100],l),m.fpage.transform(x(90-2*l),"0% 0%"),w.transform(x(90)+y(0,-v,P),"0% 0%")}m.point=t},_moveFoldingPage:function(t){var a=this.data().f,e=O._foldingPage.call(this);e&&(t?a.fpage.children()[a.ashadow?"1":"0"]||(O.setData.call(this,{backParent:e.parent()}),a.fpage.prepend(e)):a.backParent&&a.backParent.prepend(e))},_showFoldedPage:function(a,e){var r=O._foldingPage.call(this),i=this.data(),s=i.f;if(!s.point||s.point.corner!=a.corner){var n=t.Event("start");if(this.trigger(n,[s.opts,a.corner]),n.isDefaultPrevented())return!1}if(r){if(e){var o=this,p=s.point&&s.point.corner==a.corner?s.point:O._c.call(this,a.corner,1);this.animatef({from:[p.x,p.y],to:[a.x,a.y],duration:500,frame:function(t){a.x=Math.round(t[0]),a.y=Math.round(t[1]),O._fold.call(o,a)}})}else O._fold.call(this,a),i.effect&&!i.effect.turning&&this.animatef(!1);return s.fwrapper.is(":visible")||(s.fparent.show().data().flips++,O._moveFoldingPage.call(this,!0),s.fwrapper.show(),s.bshadow&&s.bshadow.show()),!0}return!1},hide:function(){var t=this.data().f,a=O._foldingPage.call(this);return 0===--t.fparent.data().flips&&t.fparent.hide(),this.css({left:0,top:0,right:"auto",bottom:"auto"}).transform("","0% 100%"),t.wrapper.transform("","0% 100%"),t.fwrapper.hide(),t.bshadow&&t.bshadow.hide(),a.transform("","0% 0%"),this},hideFoldedPage:function(t){var a=this.data().f;if(a.point){var e=this,r=a.point,i=function(){a.point=null,e.flip("hide"),e.trigger("end",[!1])};if(t){var s=O._c.call(this,r.corner),n="t"==r.corner.substr(0,1)?Math.min(0,r.y-s.y)/2:Math.max(0,r.y-s.y)/2,o=b(r.x,r.y+n),p=b(s.x,s.y-n);this.animatef({from:0,to:1,frame:function(t){var a=m(r,o,p,s,t);r.x=a.x,r.y=a.y,O._fold.call(e,r)},complete:i,duration:800,hiding:!0})}else this.animatef(!1),i()}},turnPage:function(t){var a=this,e=this.data().f;t={corner:e.corner?e.corner.corner:t||O._cAllowed.call(this)[0]};var r=e.point||O._c.call(this,t.corner,e.opts.turn?e.opts.turn.data().opts.elevation:0),i=O._c2.call(this,t.corner);this.trigger("flip").animatef({from:0,to:1,frame:function(e){var s=m(r,r,i,i,e);t.x=s.x,t.y=s.y,O._showFoldedPage.call(a,t)},complete:function(){a.trigger("end",[!0])},duration:e.opts.duration,turning:!0}),e.corner=null},moving:function(){return"effect"in this.data()},isTurning:function(){return this.flip("moving")&&this.data().effect.turning},_eventStart:function(t){var a=this.data().f;if(!a.disabled&&!this.flip("isTurning")){if(a.corner=O._cornerActivated.call(this,t),a.corner&&O._foldingPage.call(this,a.corner))return O._moveFoldingPage.call(this,!0),this.trigger("pressed",[a.point]),!1;a.corner=null}},_eventMove:function(t){var a=this.data().f;if(!a.disabled)if(t=s?t.originalEvent.touches:[t],a.corner){var e=a.parent.offset();a.corner.x=t[0].pageX-e.left,a.corner.y=t[0].pageY-e.top,O._showFoldedPage.call(this,a.corner)}else if(!this.data().effect&&this.is(":visible")){var r=O._cornerActivated.call(this,t[0]);if(r){var i=O._c.call(this,r.corner,a.opts.cornerSize/2);r.x=i.x,r.y=i.y,O._showFoldedPage.call(this,r,!0)}else O.hideFoldedPage.call(this,!0)}},_eventEnd:function(){var a=this.data().f;if(!a.disabled&&a.point){var e=t.Event("released");this.trigger(e,[a.point]),e.isDefaultPrevented()||O.hideFoldedPage.call(this,!0)}a.corner=null},disable:function(t){return O.setData.call(this,{disabled:t}),this}},j=function(t,a,e){if(e[0]&&"object"!=typeof e[0]){if(a[e[0]]&&"_"!=e[0].toString().substr(0,1))return a[e[0]].apply(t,Array.prototype.slice.call(e,1));throw e[0]+" is an invalid value"}return a.init.apply(t,e)};t.extend(t.fn,{flip:function(t,a){return j(this,O,arguments)},turn:function(t){return j(this,_,arguments)},transform:function(t,a){var r={};return a&&(r[e+"transform-origin"]=a),r[e+"transform"]=t,this.css(r)},animatef:function(t){var a=this.data();if(a.effect&&h(a.effect.handle),t){t.to.length||(t.to=[t.to]),t.from.length||(t.from=[t.from]),t.easing||(t.easing=function(t,a,e,r,i){return r*Math.sqrt(1-(a=a/i-1)*a)+e});var e,r=[],i=t.to.length,s=this,n=o(),l=function(e){if(s.data().effect===t){e=e||o();var h,d=Math.min(t.duration,Math.max(0,e-n)),g=[];for(h=0;hs)throw new Error('It is impossible to add the page "'+a+'", the maximum value is: "'+s+'"')}else a=s,r=!0;return a>=1&&a<=s&&(i.done&&this.turn("stop"),a in i.pageObjs&&O._movePages.call(this,a,1),r&&(i.totalPages=s),i.pageObjs[a]=t(e),i.pageDefaults[a]={style:i.pageObjs[a].attr("style"),class:i.pageObjs[a].attr("class")},i.pageObjs[a].addClass("turn-page p"+a),O._addPage.call(this,a),i.done&&this.turn("update"),O._removeFromDOM.call(this)),this},_addPage:function(e){var a=this.data(),r=a.pageObjs[e];if(r)if(O._necessPage.call(this,e)){if(!a.pageWrap[e]){var i="double"==a.display?this.width()/2:this.width(),s=this.height();r.css({width:i,height:s}),a.pagePlace[e]=e,a.pageWrap[e]=t("
",{class:"turn-page-wrapper",page:e,css:{position:"absolute",overflow:"hidden",width:i,height:s}}).css(v["double"==a.display?e%2:0]),this.append(a.pageWrap[e]),a.pageWrap[e].prepend(a.pageObjs[e])}e&&1!=O._setPageLoc.call(this,e)||O._makeFlip.call(this,e)}else a.pagePlace[e]=0,a.pageObjs[e]&&a.pageObjs[e].remove()},hasPage:function(t){return t in this.data().pageObjs},_makeFlip:function(t){var e=this.data();if(!e.pages[t]&&e.pagePlace[t]==t){var a="single"==e.display,r=t%2;e.pages[t]=e.pageObjs[t].css({width:a?this.width():this.width()/2,height:this.height()}).flip({page:t,next:a&&t===e.totalPages?t-1:r||a?t+1:t-1,turn:this,duration:e.opts.duration,acceleration:e.opts.acceleration,corners:a?"all":r?"forward":"backward",backGradient:e.opts.gradients,frontGradient:e.opts.gradients}).flip("disable",e.disabled).on("pressed"+g,O._pressed).on("released"+g,O._released).on("start"+g,O._start).on("end"+g,O._end).on("flip"+g,O._flip)}return e.pages[t]},_makeRange:function(){this.data();var t,e=this.turn("range");for(t=e[0];t<=e[1];t++)O._addPage.call(this,t)},range:function(t){var e,a,r,i=this.data();t=t||i.tpage||i.page;var s=O._view.call(this,t);if(t<1||t>i.totalPages)throw new Error('"'+t+'" is not a page for range');return s[1]=s[1]||s[0],s[0]>=1&&s[1]<=i.totalPages?(e=Math.floor(2),i.totalPages-s[1]>s[0]?r=2*e-(a=Math.min(s[0]-1,e)):a=2*e-(r=Math.min(i.totalPages-s[1],e))):(a=5,r=5),[Math.max(1,s[0]-a),Math.min(i.totalPages,s[1]+r)]},_necessPage:function(t){if(0===t)return!0;var e=this.turn("range");return t>=e[0]&&t<=e[1]},_removeFromDOM:function(){var t,e=this.data();for(t in e.pageWrap)M(t,e.pageWrap)&&!O._necessPage.call(this,t)&&O._removePageFromDOM.call(this,t)},_removePageFromDOM:function(t){var e=this.data();if(e.pages[t]){var a=e.pages[t].data();a.f&&a.f.fwrapper&&a.f.fwrapper.remove(),e.pages[t].remove(),delete e.pages[t]}e.pageObjs[t]&&e.pageObjs[t].remove(),e.pageWrap[t]&&(e.pageWrap[t].remove(),delete e.pageWrap[t]),delete e.pagePlace[t]},removePage:function(t){var e=this.data();return e.pageObjs[t]&&(this.turn("stop"),O._removePageFromDOM.call(this,t),delete e.pageObjs[t],O._movePages.call(this,t,-1),e.totalPages=e.totalPages-1,O._makeRange.call(this),e.page>e.totalPages&&this.turn("page",e.totalPages)),this},_movePages:function(t,e){var a,r=this.data(),i="single"==r.display,s=function(t){var a=t+e,s=a%2;r.pageObjs[t]&&(r.pageObjs[a]=r.pageObjs[t].removeClass("page"+t).addClass("page"+a)),r.pagePlace[t]&&r.pageWrap[t]&&(r.pagePlace[a]=a,r.pageWrap[a]=r.pageWrap[t].css(v[i?0:s]).attr("page",a),r.pages[t]&&(r.pages[a]=r.pages[t].flip("options",{page:a,next:i||s?a+1:a-1,corners:i?"all":s?"forward":"backward"})),e&&(delete r.pages[t],delete r.pagePlace[t],delete r.pageObjs[t],delete r.pageWrap[t],delete r.pageObjs[t]))};if(e>0)for(a=r.totalPages;a>=t;a--)s(a);else for(a=t;a<=r.totalPages;a++)s(a)},display:function(e){var a=this.data(),r=a.display;if(e){if(-1==t.inArray(e,f))throw new Error('"'+e+'" is not a value for display');if("single"==e?a.pageObjs[0]||(this.turn("stop").css({overflow:"hidden"}),a.pageObjs[0]=t("
",{class:"turn-page p-temporal"}).css({width:this.width(),height:this.height()}).appendTo(this)):a.pageObjs[0]&&(this.turn("stop").css({overflow:""}),a.pageObjs[0].remove(),delete a.pageObjs[0]),a.display=e,r){var i=this.turn("size");O._movePages.call(this,1,0),this.turn("size",i.width,i.height).turn("update")}return this}return r},animating:function(){return this.data().pageMv.length>0},disable:function(e){var a,r=this.data(),i=this.turn("view");for(a in r.disabled=void 0===e||!0===e,r.pages)M(a,r.pages)&&r.pages[a].flip("disable",!!e&&t.inArray(a,i));return this},size:function(t,e){if(t&&e){var a,r=this.data(),i="double"==r.display?t/2:t;for(a in this.css({width:t,height:e}),r.pageObjs[0]&&r.pageObjs[0].css({width:i,height:e}),r.pageWrap)M(a,r.pageWrap)&&(r.pageObjs[a].css({width:i,height:e}),r.pageWrap[a].css({width:i,height:e}),r.pages[a]&&r.pages[a].css({width:i,height:e}));return this.turn("resize"),this}return{width:this.width(),height:this.height()}},resize:function(){var t,e=this.data();for(e.pages[0]&&(e.pageWrap[0].css({left:-this.width()}),e.pages[0].flip("resize",!0)),t=1;t<=e.totalPages;t++)e.pages[t]&&e.pages[t].flip("resize",!0)},_removeMv:function(t){var e,a=this.data();for(e=0;e0?a[0]:0,a[1]<=e.totalPages?a[1]:0]:[a[0]>0&&a[0]<=e.totalPages?a[0]:0]},stop:function(t){var e,a,r=this.data(),i=r.pageMv;for(e in r.pageMv=[],r.tpage&&(r.page=r.tpage,delete r.tpage),i)M(e,i)&&(a=r.pages[i[e]].data().f.opts,j._moveFoldingPage.call(r.pages[i[e]],null),r.pages[i[e]].flip("hideFoldedPage"),r.pagePlace[a.next]=a.next,a.force&&(a.next=a.page%2==0?a.page-1:a.page+1,delete a.force));return this.turn("update"),this},pages:function(t){var e=this.data();if(t){if(tt&&this.turn("page",t)}return e.totalPages=t,this}return e.totalPages},_fitPage:function(e,a){var r=this.data(),i=this.turn("view",e);r.page!=e&&(this.trigger("turning",[e,i]),-1!=t.inArray(1,i)&&this.trigger("first"),-1!=t.inArray(r.totalPages,i)&&this.trigger("last")),r.pageObjs[e]&&(r.tpage=e,this.turn("stop",a),O._removeFromDOM.call(this),O._makeRange.call(this),this.trigger("turned",[e,i]))},_turnPage:function(e){var a,r,i=this.data(),s=this.turn("view"),n=this.turn("view",e);if(i.page!=e&&(this.trigger("turning",[e,n]),-1!=t.inArray(1,n)&&this.trigger("first"),-1!=t.inArray(i.totalPages,n)&&this.trigger("last")),i.pageObjs[e]&&(i.tpage=e,this.turn("stop"),O._makeRange.call(this),"single"==i.display?(a=s[0],r=n[0]):s[1]&&e>s[1]?(a=s[1],r=n[0]):s[0]&&es[0]?"br":"bl"):i.pages[a].flip("turnPage")}},page:function(e){e=parseInt(e,10);var a=this.data();return e>0&&e<=a.totalPages?(a.done&&-1==t.inArray(e,this.turn("view"))?O._turnPage.call(this,e):O._fitPage.call(this,e),this):a.page},next:function(){var t=this.data();return this.turn("page",O._view.call(this,t.page).pop()+1)},previous:function(){var t=this.data();return this.turn("page",O._view.call(this,t.page).shift()-1)},_addMotionPage:function(){var e=t(this).data().f.opts,a=e.turn,r=a.data();e.pageMv=e.page,O._addMv.call(a,e.pageMv),r.pagePlace[e.next]=e.page,a.turn("update")},_start:function(e,a,r){var i=a.turn.data(),s=t.Event("start");if(e.stopPropagation(),a.turn.trigger(s,[a,r]),s.isDefaultPrevented())e.preventDefault();else{if("single"==i.display){var n="l"==r.charAt(1);1==a.page&&n||a.page==i.totalPages&&!n?e.preventDefault():n?(a.next=a.nexta.page?a.next:a.page+1}O._addMotionPage.call(this)}},_end:function(e,a){var r=t(this).data().f.opts,i=r.turn,s=i.data();e.stopPropagation(),a||s.tpage?s.tpage!=r.next&&s.tpage!=r.page||(delete s.tpage,O._fitPage.call(i,s.tpage||r.next,!0)):(O._removeMv.call(i,r.pageMv),i.turn("update"))},_pressed:function(){var e,a=t(this).data().f,r=a.opts.turn.data().pages;for(e in r)e!=a.opts.page&&r[e].flip("disable",!0);return a.time=(new Date).getTime()},_released:function(e,a){var r=t(this),i=r.data().f;e.stopPropagation(),((new Date).getTime()-i.time<200||a.x<0||a.x>t(this).width())&&(e.preventDefault(),i.opts.turn.data().tpage=i.opts.next,i.opts.turn.turn("update"),t(r).flip("turnPage"))},_flip:function(){var e=t(this).data().f.opts;e.turn.trigger("turn",[e.next])},calculateZ:function(t){var e,a,r,i,s,n=this,o=this.data(),p=this.turn("view"),l=p[0]||p[1],h={pageZ:{},partZ:{},pageV:{}},g=function(t){var e=n.turn("view",t);e[0]&&(h.pageV[e[0]]=!0),e[1]&&(h.pageV[e[1]]=!0)};for(e=0;e=i||o.y>=n)return!1;if(o.y=n-p))return!1;o.corner="b"}if(o.x<=p)o.corner+="l";else{if(!(o.x>=i-p))return!1;o.corner+="r"}return-1!=t.inArray(o.corner,l)&&o},_c:function(t,e){return{tl:y(e=e||0,e),tr:y(this.width()-e,e),bl:y(e,this.height()-e),br:y(this.width()-e,this.height()-e)}[t]},_c2:function(t){return{tl:y(2*this.width(),0),tr:y(-this.width(),0),bl:y(2*this.width(),this.height()),br:y(-this.width(),this.height())}[t]},_foldingPage:function(t){var e=this.data().f.opts;if(e.folding)return e.folding;if(e.turn){var a=e.turn.data();return"single"==a.display?a.pageObjs[e.next]?a.pageObjs[0]:null:a.pageObjs[e.next]}},_backGradient:function(){var e=this.data().f,a=e.opts.turn,r=e.opts.backGradient&&(!a||"single"==a.data().display||2!=e.opts.page&&e.opts.page!=a.data().totalPages-1);return r&&!e.bshadow&&(e.bshadow=t("
",w(0,0,1)).css({position:"",width:this.width(),height:this.height()}).appendTo(e.parent)),r},resize:function(t){var e=this.data().f,a=this.width(),r=this.height(),i=Math.round(Math.sqrt(Math.pow(a,2)+Math.pow(r,2)));t&&(e.wrapper.css({width:i,height:i}),e.fwrapper.css({width:i,height:i}).children(":first-child").css({width:a,height:r}),e.fpage.css({width:r,height:a}),e.opts.frontGradient&&e.ashadow.css({width:r,height:a}),j._backGradient.call(this)&&e.bshadow.css({width:a,height:r})),e.parent.is(":visible")&&(e.fwrapper.css({top:e.parent.offset().top,left:e.parent.offset().left}),e.opts.turn&&e.fparent.css({top:-e.opts.turn.offset().top,left:-e.opts.turn.offset().left})),this.flip("z",e.opts["z-index"])},_addPageWrapper:function(){var e=this.data().f,a=this.parent();if(!e.wrapper){this.css("left"),this.css("top");var r=this.width(),i=this.height();Math.round(Math.sqrt(Math.pow(r,2)+Math.pow(i,2)));if(e.parent=a,e.fparent=e.opts.turn?e.opts.turn.data().fparent:t("#turn-fwrappers"),!e.fparent){var s=t("
",{css:{"pointer-events":"none"}}).hide();s.data().flips=0,e.opts.turn?(s.css(w(-e.opts.turn.offset().top,-e.opts.turn.offset().left,"auto","visible").css).appendTo(e.opts.turn),e.opts.turn.data().fparent=s):s.css(w(0,0,"auto","visible").css).attr("id","turn-fwrappers").appendTo(t("body")),e.fparent=s}this.css({position:"absolute",top:0,left:0,bottom:"auto",right:"auto"}),e.wrapper=t("
",w(0,0,this.css("z-index"))).appendTo(a).prepend(this),e.fwrapper=t("
",w(a.offset().top,a.offset().left)).hide().appendTo(e.fparent),e.fpage=t("
",{css:{cursor:"default"}}).appendTo(t("
",w(0,0,0,"visible")).appendTo(e.fwrapper)),e.opts.frontGradient&&(e.ashadow=t("
",w(0,0,1)).appendTo(e.fpage)),j.setData.call(this,e),j.resize.call(this,!0)}},_fold:function(t){var e,a,s,n,o,p,l=this,h=0,g=0,d=y(0,0),f=y(0,0),c=y(0,0),u=this.width(),v=this.height(),w=j._foldingPage.call(this),m=(Math.tan(g),this.data().f),M=m.opts.acceleration,O=m.wrapper.height(),W=j._c.call(this,t.corner),z="t"==t.corner.substr(0,1),D="l"==t.corner.substr(1,1),F=function(){var w,x=y(W.x?W.x-t.x:t.x,W.y?W.y-t.y:t.y),P=Math.atan2(x.y,x.x);h=b(g=i-P),w=y(D?u-x.x/2:t.x+x.x/2,x.y/2);var M=g-Math.atan2(w.y,w.x),_=Math.max(0,Math.sin(M)*Math.sqrt(Math.pow(w.x,2)+Math.pow(w.y,2)));if(c=y(_*Math.sin(g),_*Math.cos(g)),g>i&&(c.x=c.x+Math.abs(c.y*Math.tan(P)),c.y=0,Math.round(c.x*Math.tan(r-g))i){var k=r-g,A=O-v/Math.sin(k);d=y(Math.round(A*Math.cos(k)),Math.round(A*Math.sin(k))),D&&(d.x=-d.x),z&&(d.y=-d.y)}e=Math.round(c.y/Math.tan(g)+c.x);var T=u-e,G=T*Math.cos(2*g),E=T*Math.sin(2*g);f=y(Math.round(D?T-G:e+G),Math.round(z?E:v-E)),o=T*Math.sin(g);var q=j._c2.call(l,t.corner),H=Math.sqrt(Math.pow(q.x-t.x,2)+Math.pow(q.y-t.y,2));return p=H100?(o-100)/o:0,a=y(o*Math.sin(i-g)/v*100,o*Math.cos(i-g)/u*100),z&&(a.y=100-a.y),D&&(a.x=100-a.x)),j._backGradient.call(l)&&(s=y(o*Math.sin(g)/u*100,o*Math.cos(g)/v*100),D||(s.x=100-s.x),z||(s.y=100-s.y)),c.x=Math.round(c.x),c.y=Math.round(c.y),!0},k=function(t,e,r,i){var o=["0","auto"],h=(u-O)*r[0]/100,g=(v-O)*r[1]/100,c={left:o[e[0]],top:o[e[1]],right:o[e[2]],bottom:o[e[3]]},w=90!=i&&-90!=i?D?-1:1:0;r=r[0]+"% "+r[1]+"%",l.css(c).transform(P(i)+x(t.x+w,t.y,M),r),m.fpage.parent().css(c),m.wrapper.transform(x(-t.x+h-w,-t.y+g,M)+P(-i),r),m.fwrapper.transform(x(-t.x+d.x+h,-t.y+d.y+g,M)+P(-i),r),m.fpage.parent().transform(P(i)+x(t.x+f.x-d.x,t.y+f.y-d.y,M),r),m.opts.frontGradient&&_(m.ashadow,y(D?100:0,z?100:0),y(a.x,a.y),[[n,"rgba(0,0,0,0)"],[.9*(1-n)+n,"rgba(0,0,0,"+.12*p+")"],[1,"rgba(0,0,0,0)"]],3),j._backGradient.call(l)&&_(m.bshadow,y(D?0:100,z?0:100),y(s.x,s.y),[[.7,"rgba(0,0,0,0)"],[.9,"rgba(0,0,0,"+.18*p+")"],[1,"rgba(0,0,0,0)"]],3)};switch(t.corner){case"tl":t.x=Math.max(t.x,1),F(),k(c,[1,0,0,1],[100,0],h),m.fpage.transform(x(-v,-u,M)+P(90-2*h),"100% 100%"),w.transform(P(90)+x(0,-v,M),"0% 0%");break;case"tr":t.x=Math.min(t.x,u-1),F(),k(y(-c.x,c.y),[0,0,0,1],[0,0],-h),m.fpage.transform(x(0,-u,M)+P(2*h-90),"0% 100%"),w.transform(P(270)+x(-u,0,M),"0% 0%");break;case"bl":t.x=Math.max(t.x,1),F(),k(y(c.x,-c.y),[1,1,0,0],[100,100],-h),m.fpage.transform(x(-v,0,M)+P(2*h-90),"100% 0%"),w.transform(P(270)+x(-u,0,M),"0% 0%");break;case"br":t.x=Math.min(t.x,u-1),F(),k(y(-c.x,-c.y),[0,1,1,0],[0,100],h),m.fpage.transform(P(90-2*h),"0% 0%"),w.transform(P(90)+x(0,-v,M),"0% 0%")}m.point=t},_moveFoldingPage:function(t){var e=this.data().f,a=j._foldingPage.call(this);a&&(t?e.fpage.children()[e.ashadow?"1":"0"]||(j.setData.call(this,{backParent:a.parent()}),e.fpage.prepend(a)):e.backParent&&e.backParent.prepend(a))},_showFoldedPage:function(e,a){var r=j._foldingPage.call(this),i=this.data(),s=i.f;if(!s.point||s.point.corner!=e.corner){var n=t.Event("start");if(this.trigger(n,[s.opts,e.corner]),n.isDefaultPrevented())return!1}if(r){if(a){var o=this,p=s.point&&s.point.corner==e.corner?s.point:j._c.call(this,e.corner,1);this.animatef({from:[p.x,p.y],to:[e.x,e.y],duration:500,frame:function(t){e.x=Math.round(t[0]),e.y=Math.round(t[1]),j._fold.call(o,e)}})}else j._fold.call(this,e),i.effect&&!i.effect.turning&&this.animatef(!1);return s.fwrapper.is(":visible")||(s.fparent.show().data().flips++,j._moveFoldingPage.call(this,!0),s.fwrapper.show(),s.bshadow&&s.bshadow.show()),!0}return!1},hide:function(){var t=this.data().f,e=j._foldingPage.call(this);return 0===--t.fparent.data().flips&&t.fparent.hide(),this.css({left:0,top:0,right:"auto",bottom:"auto"}).transform("","0% 100%"),t.wrapper.transform("","0% 100%"),t.fwrapper.hide(),t.bshadow&&t.bshadow.hide(),e.transform("","0% 0%"),this},hideFoldedPage:function(t){var e=this.data().f;if(e.point){var a=this,r=e.point,i=function(){e.point=null,a.flip("hide"),a.trigger("end",[!1])};if(t){var s=j._c.call(this,r.corner),n="t"==r.corner.substr(0,1)?Math.min(0,r.y-s.y)/2:Math.max(0,r.y-s.y)/2,o=y(r.x,r.y+n),p=y(s.x,s.y-n);this.animatef({from:0,to:1,frame:function(t){var e=m(r,o,p,s,t);r.x=e.x,r.y=e.y,j._fold.call(a,r)},complete:i,duration:800,hiding:!0})}else this.animatef(!1),i()}},turnPage:function(t){var e=this,a=this.data().f;t={corner:a.corner?a.corner.corner:t||j._cAllowed.call(this)[0]};var r=a.point||j._c.call(this,t.corner,a.opts.turn?a.opts.turn.data().opts.elevation:0),i=j._c2.call(this,t.corner);this.trigger("flip").animatef({from:0,to:1,frame:function(a){var s=m(r,r,i,i,a);t.x=s.x,t.y=s.y,j._showFoldedPage.call(e,t)},complete:function(){e.trigger("end",[!0])},duration:a.opts.duration,turning:!0}),a.corner=null},moving:function(){return"effect"in this.data()},isTurning:function(){return this.flip("moving")&&this.data().effect.turning},_eventStart:function(t){var e=this.data().f;if(!e.disabled&&!this.flip("isTurning")){if(e.corner=j._cornerActivated.call(this,t),e.corner&&j._foldingPage.call(this,e.corner))return j._moveFoldingPage.call(this,!0),this.trigger("pressed",[e.point]),!1;e.corner=null}},_eventMove:function(t){var e=this.data().f;if(!e.disabled)if(t=s?t.originalEvent.touches:[t],e.corner){var a=e.parent.offset();e.corner.x=t[0].pageX-a.left,e.corner.y=t[0].pageY-a.top,j._showFoldedPage.call(this,e.corner)}else if(!this.data().effect&&this.is(":visible")){var r=j._cornerActivated.call(this,t[0]);if(r){var i=j._c.call(this,r.corner,e.opts.cornerSize/2);r.x=i.x,r.y=i.y,j._showFoldedPage.call(this,r,!0)}else j.hideFoldedPage.call(this,!0)}},_eventEnd:function(){var e=this.data().f;if(!e.disabled&&e.point){var a=t.Event("released");this.trigger(a,[e.point]),a.isDefaultPrevented()||j.hideFoldedPage.call(this,!0)}e.corner=null},disable:function(t){return j.setData.call(this,{disabled:t}),this}},W=function(t,e,a){if(a[0]&&"object"!=typeof a[0]){if(e[a[0]]&&"_"!=a[0].toString().substr(0,1))return e[a[0]].apply(t,Array.prototype.slice.call(a,1));throw a[0]+" is an invalid value"}return e.init.apply(t,a)};t.extend(t.fn,{flip:function(t,e){return W(this,j,arguments)},turn:function(t){return W(this,O,arguments)},transform:function(t,e){var r={};return e&&(a&&(r[a+"transform-origin"]=e),r["transform-origin"]=e),a&&(r[a+"transform"]=t),r.transform=t,this.css(r)},animatef:function(t){var e=this.data();if(e.effect&&l(e.effect.handle),t){t.to.length||(t.to=[t.to]),t.from.length||(t.from=[t.from]),t.easing||(t.easing=function(t,e,a,r,i){return r*Math.sqrt(1-(e=e/i-1)*e)+a});var a,r=[],i=t.to.length,s=this,n=o(),h=function(a){if(s.data().effect===t){a=a||o();var l,g=Math.min(t.duration,Math.max(0,a-n)),d=[];for(l=0;l