diff --git a/turn.js b/turn.js index 603b8a8..4ecdd9e 100644 --- a/turn.js +++ b/turn.js @@ -243,6 +243,52 @@ var has3d, return page.data().f; }, + // Small internal rendering helpers. They centralize common jQuery DOM + // operations without changing the public API or replacing jQuery. + + renderer = { + createWrapper: function(className, attrs, styles) { + return $('
', $.extend({'class': className}, attrs || {})).css(styles || {}); + }, + + applyStyles: function(element, styles) { + return element.css(styles); + }, + + removeNode: function(element) { + if (element) + element.remove(); + }, + + append: function(parent, child) { + return parent.append(child); + }, + + prepend: function(parent, child) { + return parent.prepend(child); + }, + + transformProperties: function(transform, origin) { + var properties = {}; + + if (origin) { + if (vendor) + properties[vendor+'transform-origin'] = origin; + properties['transform-origin'] = origin; + } + + if (vendor) + properties[vendor+'transform'] = transform; + properties.transform = transform; + + return properties; + }, + + applyTransform: function(element, transform, origin) { + return renderer.applyStyles(element, renderer.transformProperties(transform, origin)); + } + }, + // Gets the CSS3 vendor prefix getPrefix = function() { @@ -400,7 +446,7 @@ var has3d, gradient = function(obj, p0, p1, colors, numColors) { - obj.css({'background-image': buildLinearGradient(p0, p1, colors, numColors)}); + renderer.applyStyles(obj, {'background-image': buildLinearGradient(p0, p1, colors, numColors)}); }, turnMethods = { @@ -449,7 +495,7 @@ turnMethods = { this.on(i + turnEventNamespace, opts.when[i]); - this.css({position: 'relative', width: opts.width, height: opts.height}); + renderer.applyStyles(this, {position: 'relative', width: opts.width, height: opts.height}); this.turn('display', opts.display); @@ -520,14 +566,14 @@ turnMethods = { for (page in data.pageObjs) { if (!has(page, data.pageObjs) || page==='0' || !data.pageObjs[page]) continue; turnMethods._destroyPage.call(this, page); - this.append(data.pageObjs[page]); + renderer.append(this, data.pageObjs[page]); } if (data.pageObjs[0]) turnMethods._destroyPage.call(this, 0); if (data.fparent) - data.fparent.remove(); + renderer.removeNode(data.fparent); original = data.turnOriginal || {}; @@ -594,13 +640,13 @@ turnMethods = { var data = turnData(this); - data.pageWrap[page] = $('', {'class': 'turn-page-wrapper', - page: page, - css: {width: width, - height: height}}). - css(pagePosition[(data.display=='double') ? page%2 : 0]); + data.pageWrap[page] = renderer.createWrapper('turn-page-wrapper', + {page: page}, + {width: width, height: height}); - this.append(data.pageWrap[page]); + renderer.applyStyles(data.pageWrap[page], pagePosition[(data.display=='double') ? page%2 : 0]); + + renderer.append(this, data.pageWrap[page]); return data.pageWrap[page]; }, @@ -612,7 +658,7 @@ turnMethods = { var data = turnData(this); if (data.pageWrap && data.pageWrap[page]) - data.pageWrap[page].remove(); + renderer.removeNode(data.pageWrap[page]); if (data.pageWrap) delete data.pageWrap[page]; @@ -629,10 +675,10 @@ turnMethods = { return; if (data.fwrapper) - data.fwrapper.remove(); + renderer.removeNode(data.fwrapper); if (data.wrapper) - data.wrapper.remove(); + renderer.removeNode(data.wrapper); }, // Adds a page from external data @@ -704,7 +750,7 @@ turnMethods = { var pageWidth = (data.display=='double') ? this.width()/2 : this.width(), pageHeight = this.height(); - element.css({width:pageWidth, height:pageHeight}); + renderer.applyStyles(element, {width: pageWidth, height: pageHeight}); // Place data.pagePlace[page] = page; @@ -724,7 +770,7 @@ turnMethods = { // Remove element from the DOM if (data.pageObjs[page]) - data.pageObjs[page].remove(); + renderer.removeNode(data.pageObjs[page]); } @@ -749,8 +795,8 @@ turnMethods = { var single = data.display=='single', even = page%2; - data.pages[page] = data.pageObjs[page]. - css({width: (single) ? this.width() : this.width()/2, height: this.height()}). + data.pages[page] = renderer.applyStyles(data.pageObjs[page], + {width: (single) ? this.width() : this.width()/2, height: this.height()}). flip({page: page, next: (single && page === data.totalPages) ? page -1 : ((even || single) ? page+1 : page-1), turn: this, @@ -919,7 +965,7 @@ turnMethods = { if (data.pagePlace[page] && data.pageWrap[page]) { data.pagePlace[next] = next; - data.pageWrap[next] = data.pageWrap[page].css(pagePosition[(single) ? 0 : odd]).attr('page', next); + data.pageWrap[next] = renderer.applyStyles(data.pageWrap[page], pagePosition[(single) ? 0 : odd]).attr('page', next); if (data.pages[page]) data.pages[next] = data.pages[page].flip('options', { @@ -961,15 +1007,14 @@ turnMethods = { if (!data.pageObjs[0]) { this.turn('stop'). css({'overflow': 'hidden'}); - data.pageObjs[0] = $('', {'class': 'turn-page p-temporal'}). - css({width: this.width(), height: this.height()}). + data.pageObjs[0] = renderer.createWrapper('turn-page p-temporal', null, {width: this.width(), height: this.height()}). appendTo(this); } } else { if (data.pageObjs[0]) { this.turn('stop'). css({'overflow': ''}); - data.pageObjs[0].remove(); + renderer.removeNode(data.pageObjs[0]); delete data.pageObjs[0]; } } @@ -1024,17 +1069,17 @@ turnMethods = { var data = this.data(), pageWidth = (data.display=='double') ? width/2 : width, page; - this.css({width: width, height: height}); + renderer.applyStyles(this, {width: width, height: height}); if (data.pageObjs[0]) - data.pageObjs[0].css({width: pageWidth, height: height}); + renderer.applyStyles(data.pageObjs[0], {width: pageWidth, height: height}); for (page in data.pageWrap) { if (!has(page, data.pageWrap)) continue; - data.pageObjs[page].css({width: pageWidth, height: height}); - data.pageWrap[page].css({width: pageWidth, height: height}); + renderer.applyStyles(data.pageObjs[page], {width: pageWidth, height: height}); + renderer.applyStyles(data.pageWrap[page], {width: pageWidth, height: height}); if (data.pages[page]) - data.pages[page].css({width: pageWidth, height: height}); + renderer.applyStyles(data.pages[page], {width: pageWidth, height: height}); } this.turn('resize'); @@ -1055,7 +1100,7 @@ turnMethods = { var page, data = this.data(); if (data.pages[0]) { - data.pageWrap[0].css({left: -this.width()}); + renderer.applyStyles(data.pageWrap[0], {left: -this.width()}); data.pages[0].flip('resize', true); } @@ -1465,7 +1510,7 @@ turnMethods = { if (!has(page, data.pageWrap)) continue; - data.pageWrap[page].css({display: (pos.pageV[page]) ? '' : 'none', 'z-index': pos.pageZ[page] || 0}); + renderer.applyStyles(data.pageWrap[page], {display: (pos.pageV[page]) ? '' : 'none', 'z-index': pos.pageZ[page] || 0}); if (data.pages[page]) { data.pages[page].flip('z', pos.partZ[page] || null); @@ -1500,13 +1545,13 @@ turnMethods = { view = this.turn('view'); if (page==view[0] || page==view[1]) { - data.pageWrap[page].css({'z-index': data.totalPages, display: ''}); + renderer.applyStyles(data.pageWrap[page], {'z-index': data.totalPages, display: ''}); return 1; } else if ((data.display=='single' && page==view[0]+1) || (data.display=='double' && page==view[0]-2 || page==view[1]+2)) { - data.pageWrap[page].css({'z-index': data.totalPages-1, display: ''}); + renderer.applyStyles(data.pageWrap[page], {'z-index': data.totalPages-1, display: ''}); return 2; } else { - data.pageWrap[page].css({'z-index': 0, display: 'none'}); + renderer.applyStyles(data.pageWrap[page], {'z-index': 0, display: 'none'}); return 0; } } @@ -1563,7 +1608,7 @@ flipMethods = { var data = flipData(this); data.opts['z-index'] = z; - data.fwrapper.css({'z-index': z || parseInt(data.parent.css('z-index'), 10) || 0}); + renderer.applyStyles(data.fwrapper, {'z-index': z || parseInt(data.parent.css('z-index'), 10) || 0}); return this; }, @@ -1647,8 +1692,7 @@ flipMethods = { if (gradient && !data.bshadow) - data.bshadow = $('', {'class': 'turn-back-shadow'}). - css({width: this.width(), height: this.height()}). + data.bshadow = renderer.createWrapper('turn-back-shadow', null, {width: this.width(), height: this.height()}). appendTo(data.parent); return gradient; @@ -1665,12 +1709,12 @@ flipMethods = { fparent.data().flips = 0; if (data.opts.turn) { - fparent.css(divAtt(-data.opts.turn.offset().top, -data.opts.turn.offset().left, 'auto').css). + renderer.applyStyles(fparent, divAtt(-data.opts.turn.offset().top, -data.opts.turn.offset().left, 'auto').css). appendTo(data.opts.turn); turnData(data.opts.turn).fparent = fparent; } else { - fparent.css(divAtt(0, 0, 'auto').css). + renderer.applyStyles(fparent, divAtt(0, 0, 'auto').css). attr('id', 'turn-fwrappers'). appendTo($('body')); } @@ -1686,26 +1730,26 @@ flipMethods = { size = Math.round(Math.sqrt(Math.pow(width, 2)+Math.pow(height, 2))); if (full) { - data.wrapper.css({width: size, height: size}); - data.fwrapper.css({width: size, height: size}). + renderer.applyStyles(data.wrapper, {width: size, height: size}); + renderer.applyStyles(data.fwrapper, {width: size, height: size}). children(':first-child'). css({width: width, height: height}); - data.fpage.css({width: height, height: width}); + renderer.applyStyles(data.fpage, {width: height, height: width}); if (data.opts.frontGradient) - data.ashadow.css({width: height, height: width}); + renderer.applyStyles(data.ashadow, {width: height, height: width}); if (flipMethods._backGradient.call(this)) - data.bshadow.css({width: width, height: height}); + renderer.applyStyles(data.bshadow, {width: width, height: height}); } if (data.parent.is(':visible')) { - data.fwrapper.css({top: data.parent.offset().top, + renderer.applyStyles(data.fwrapper, {top: data.parent.offset().top, left: data.parent.offset().left}); if (data.opts.turn) - data.fparent.css({top: -data.opts.turn.offset().top, left: -data.opts.turn.offset().left}); + renderer.applyStyles(data.fparent, {top: -data.opts.turn.offset().top, left: -data.opts.turn.offset().left}); } this.flip('z', data.opts['z-index']); @@ -1734,26 +1778,22 @@ flipMethods = { if (!data.fparent) data.fparent = flipMethods._createFoldParent.call(this); - this.css({top: 0, left: 0, bottom: 'auto', right: 'auto'}); + renderer.applyStyles(this, {top: 0, left: 0, bottom: 'auto', right: 'auto'}); - data.wrapper = $('', {'class': 'turn-flip-wrapper'}). - css(divAtt(0, 0, this.css('z-index')).css). + data.wrapper = renderer.createWrapper('turn-flip-wrapper', null, divAtt(0, 0, this.css('z-index')).css). appendTo(parent). prepend(this); - data.fwrapper = $('', {'class': 'turn-fold-wrapper'}). - css(divAtt(parent.offset().top, parent.offset().left).css). + data.fwrapper = renderer.createWrapper('turn-fold-wrapper', null, divAtt(parent.offset().top, parent.offset().left).css). hide(). appendTo(data.fparent); - data.fpage = $('', {'class': 'turn-fold-page'}). - appendTo($('', {'class': 'turn-fold-inner'}). - css(divAtt(0, 0, 0).css). + data.fpage = renderer.createWrapper('turn-fold-page'). + appendTo(renderer.createWrapper('turn-fold-inner', null, divAtt(0, 0, 0).css). appendTo(data.fwrapper)); if (data.opts.frontGradient) - data.ashadow = $('', {'class': 'turn-shadow'}). - css(divAtt(0, 0, 1).css). + data.ashadow = renderer.createWrapper('turn-shadow', null, divAtt(0, 0, 1).css). appendTo(data.fpage); // Save data @@ -1809,9 +1849,9 @@ flipMethods = { x = x[0] + '% ' + x[1] + '%'; - that.css(v).transform(rotate(a) + translate(tr.x + aliasingFk, tr.y, ac), x); + renderer.applyStyles(that, v).transform(rotate(a) + translate(tr.x + aliasingFk, tr.y, ac), x); - data.fpage.parent().css(v); + renderer.applyStyles(data.fpage.parent(), v); data.wrapper.transform(translate(-tr.x + mvW-aliasingFk, -tr.y + mvH, ac) + rotate(-a), x); data.fwrapper.transform(translate(-tr.x + mv.x + mvW, -tr.y + mv.y + mvH, ac) + rotate(-a), x); @@ -1889,11 +1929,11 @@ flipMethods = { if (bool) { if (!data.fpage.children()[data.ashadow? '1' : '0']) { flipMethods.setData.call(this, {backParent: folding.parent()}); - data.fpage.prepend(folding); + renderer.prepend(data.fpage, folding); } } else { if (data.backParent) - data.backParent.prepend(folding); + renderer.prepend(data.backParent, folding); } } @@ -1958,7 +1998,7 @@ flipMethods = { if ((--data.fparent.data().flips)===0) data.fparent.hide(); - this.css({left: 0, top: 0, right: 'auto', bottom: 'auto'}).transform('', '0% 100%'); + renderer.applyStyles(this, {left: 0, top: 0, right: 'auto', bottom: 'auto'}).transform('', '0% 100%'); data.wrapper.transform('', '0% 100%'); @@ -2148,19 +2188,7 @@ $.extend($.fn, { transform: function(transform, origin) { - var properties = {}; - - if (origin) { - if (vendor) - properties[vendor+'transform-origin'] = origin; - properties['transform-origin'] = origin; - } - - if (vendor) - properties[vendor+'transform'] = transform; - properties.transform = transform; - - return this.css(properties); + return renderer.applyTransform(this, transform, origin); }, diff --git a/turn.min.js b/turn.min.js index a046754..5da3633 100644 --- a/turn.min.js +++ b/turn.min.js @@ -1 +1 @@ -!function(t){"use strict";var e,a="",r=Math.PI,i=r/2,n="PointerEvent"in window,s="ontouchstart"in window,o=!n&&s,p=n?{start:"pointerdown",move:"pointermove",end:"pointerup pointercancel"}:o?{start:"touchstart",move:"touchmove",end:"touchend"}:{start:"mousedown",move:"mousemove",end:"mouseup"},l=window.performance&&window.performance.now?function(){return window.performance.now()}:function(){return(new Date).getTime()},h=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||function(t){return window.setTimeout(function(){t(l())},16)},d=window.cancelAnimationFrame||window.webkitCancelAnimationFrame||window.mozCancelAnimationFrame||function(t){window.clearTimeout(t)},g=".turn",f=".turnFlip",c={backward:["bl","tl"],forward:["br","tr"],all:["tl","bl","tr","br"]},u=["single","double"],v={page:1,gradients:!0,duration:600,acceleration:!0,display:"double",when:null},w={folding:null,corners:"forward",cornerSize:100,gradients:!0,duration:600,acceleration:!0},m={0:{top:0,left:0,right:"auto",bottom:"auto"},1:{top:0,right:0,left:"auto",bottom:"auto"}},b="turn-js-base-css",y=[".turn-page{position:absolute;}",".turn-page-wrapper,.turn-flip-wrapper,.turn-fold-wrapper,.turn-shadow{position:absolute;overflow:hidden;}",".turn-fold-parent{position:absolute;overflow:visible;pointer-events:none;}",".turn-fold-inner{position:absolute;overflow:visible;}",".turn-fold-page{cursor:default;}",".turn-back-shadow{overflow:hidden;}"].join(""),P=function(){document.getElementById(b)||t("",{id:b,type:"text/css"}).text(y).appendTo(document.head||document.documentElement)},_=function(t,e,a){return{css:{top:t,left:e,"z-index":a||"auto"}}},x=function(t,e,a,r,i){var n=1-i,s=n*n*n,o=i*i*i;return O(Math.round(s*t.x+3*i*n*n*e.x+3*i*i*n*a.x+o*r.x),Math.round(s*t.y+3*i*n*n*e.y+3*i*i*n*a.y+o*r.y))},M=function(t){return t/r*180},O=function(t,e){return{x:t,y:e}},j=function(t,a,r){return e&&r?" translate3d("+t+"px,"+a+"px, 0px) ":" translate("+t+"px, "+a+"px) "},W=function(t){return" rotate("+t+"deg) "},F=function(t,e){return Object.prototype.hasOwnProperty.call(e,t)},z=function(e,a){return t.map(e.split(" "),function(t){return t+a}).join(" ")},k=function(t,e,a){return t=parseFloat(t),Math.max(e,Math.min(a,isNaN(t)?e:t))},A=function(t){return t.data()},D=function(t){return t.data().f},T=function(t){var e,a,n,s,o,p,l=0,h=0,d=O(0,0),g=O(0,0),f=O(0,0),c=t.width,u=t.height,v=t.wrapperHeight,w=t.origin,m=O(t.point.x,t.point.y),b="t"==t.point.corner.substr(0,1),y="l"==t.point.corner.substr(1,1);m.corner=t.point.corner,m.x=y?Math.max(m.x,1):Math.min(m.x,c-1);var P=function(){var _,x=O(w.x?w.x-m.x:m.x,w.y?w.y-m.y:m.y),j=Math.atan2(x.y,x.x);h=M(l=i-j),_=O(y?c-x.x/2:m.x+x.x/2,x.y/2);var W=l-Math.atan2(_.y,_.x),F=Math.max(0,Math.sin(W)*Math.sqrt(Math.pow(_.x,2)+Math.pow(_.y,2)));if(f=O(F*Math.sin(l),F*Math.cos(l)),l>i&&(f.x=f.x+Math.abs(f.y*Math.tan(j)),f.y=0,Math.round(f.x*Math.tan(r-l))i){var z=r-l,A=v-u/Math.sin(z);d=O(Math.round(A*Math.cos(z)),Math.round(A*Math.sin(z))),y&&(d.x=-d.x),b&&(d.y=-d.y)}e=Math.round(f.y/Math.tan(l)+f.x);var D=c-e,T=D*Math.cos(2*l),G=D*Math.sin(2*l);g=O(Math.round(y?D-T:e+T),Math.round(b?G:u-G)),o=D*Math.sin(l);var E=Math.sqrt(Math.pow(t.endingPoint.x-m.x,2)+Math.pow(t.endingPoint.y-m.y,2));return p=k(E=n-p))return!1;s.corner="b"}if(s.x<=p)s.corner+="l";else{if(!(s.x>=i-p))return!1;s.corner+="r"}return-1!=t.inArray(s.corner,l)&&s},_c:function(t,e){return{tl:O(e=e||0,e),tr:O(this.width()-e,e),bl:O(e,this.height()-e),br:O(this.width()-e,this.height()-e)}[t]},_c2:function(t){return{tl:O(2*this.width(),0),tr:O(-this.width(),0),bl:O(2*this.width(),this.height()),br:O(-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("
",{class:"turn-back-shadow"}).css({width:this.width(),height:this.height()}).appendTo(e.parent)),r},_createFoldParent:function(){var e=D(this),a=t("",{class:"turn-fold-parent"}).hide();return a.data().flips=0,e.opts.turn?(a.css(_(-e.opts.turn.offset().top,-e.opts.turn.offset().left,"auto").css).appendTo(e.opts.turn),A(e.opts.turn).fparent=a):a.css(_(0,0,"auto").css).attr("id","turn-fwrappers").appendTo(t("body")),a},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}),H._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)));e.parent=a,e.fparent=e.opts.turn?A(e.opts.turn).fparent:t("#turn-fwrappers"),e.fparent||(e.fparent=H._createFoldParent.call(this)),this.css({top:0,left:0,bottom:"auto",right:"auto"}),e.wrapper=t("",{class:"turn-flip-wrapper"}).css(_(0,0,this.css("z-index")).css).appendTo(a).prepend(this),e.fwrapper=t("",{class:"turn-fold-wrapper"}).css(_(a.offset().top,a.offset().left).css).hide().appendTo(e.fparent),e.fpage=t("",{class:"turn-fold-page"}).appendTo(t("",{class:"turn-fold-inner"}).css(_(0,0,0).css).appendTo(e.fwrapper)),e.opts.frontGradient&&(e.ashadow=t("",{class:"turn-shadow"}).css(_(0,0,1).css).appendTo(e.fpage)),H.setData.call(this,e),H.resize.call(this,!0)}},_fold:function(t){var e,a,r,i,n,s=this,o=O(0,0),p=O(0,0),l=O(0,0),h=this.width(),d=this.height(),g=H._foldingPage.call(this),f=this.data().f,c=f.opts.acceleration,u=f.wrapper.height(),v=H._c.call(this,t.corner),w=H._backGradient.call(this),m=T({point:t,width:h,height:d,wrapperHeight:u,origin:v,endingPoint:H._c2.call(this,t.corner),frontGradient:f.opts.frontGradient,backGradient:w}),b="t"==t.corner.substr(0,1),y="l"==t.corner.substr(1,1),P=function(t,e,l,g){var v=["0","auto"],m=(h-u)*l[0]/100,P=(d-u)*l[1]/100,_={left:v[e[0]],top:v[e[1]],right:v[e[2]],bottom:v[e[3]]},x=90!=g&&-90!=g?y?-1:1:0;l=l[0]+"% "+l[1]+"%",s.css(_).transform(W(g)+j(t.x+x,t.y,c),l),f.fpage.parent().css(_),f.wrapper.transform(j(-t.x+m-x,-t.y+P,c)+W(-g),l),f.fwrapper.transform(j(-t.x+o.x+m,-t.y+o.y+P,c)+W(-g),l),f.fpage.parent().transform(W(g)+j(t.x+p.x-o.x,t.y+p.y-o.y,c),l),f.opts.frontGradient&&E(f.ashadow,O(y?100:0,b?100:0),O(a.x,a.y),[[i,"rgba(0,0,0,0)"],[.9*(1-i)+i,"rgba(0,0,0,"+.12*n+")"],[1,"rgba(0,0,0,0)"]],3),w&&E(f.bshadow,O(y?0:100,b?0:100),O(r.x,r.y),[[.7,"rgba(0,0,0,0)"],[.9,"rgba(0,0,0,"+.18*n+")"],[1,"rgba(0,0,0,0)"]],3)};switch(t.x=m.point.x,t.y=m.point.y,m.alpha,e=m.angle,l=m.tr,o=m.move,p=m.df,b=m.top,y=m.left,a=m.gradient.endPointA,r=m.gradient.endPointB,i=m.gradient.startV,n=m.gradient.opacity,t.corner){case"tl":P(l,[1,0,0,1],[100,0],e),f.fpage.transform(j(-d,-h,c)+W(90-2*e),"100% 100%"),g.transform(W(90)+j(0,-d,c),"0% 0%");break;case"tr":P(O(-l.x,l.y),[0,0,0,1],[0,0],-e),f.fpage.transform(j(0,-h,c)+W(2*e-90),"0% 100%"),g.transform(W(270)+j(-h,0,c),"0% 0%");break;case"bl":P(O(l.x,-l.y),[1,1,0,0],[100,100],-e),f.fpage.transform(j(-d,0,c)+W(2*e-90),"100% 0%"),g.transform(W(270)+j(-h,0,c),"0% 0%");break;case"br":P(O(-l.x,-l.y),[0,1,1,0],[0,100],e),f.fpage.transform(W(90-2*e),"0% 0%"),g.transform(W(90)+j(0,-d,c),"0% 0%")}f.point=t},_moveFoldingPage:function(t){var e=this.data().f,a=H._foldingPage.call(this);a&&(t?e.fpage.children()[e.ashadow?"1":"0"]||(H.setData.call(this,{backParent:a.parent()}),e.fpage.prepend(a)):e.backParent&&e.backParent.prepend(a))},_showFoldedPage:function(e,a){var r=H._foldingPage.call(this),i=this.data(),n=i.f;if(!n.point||n.point.corner!=e.corner){var s=t.Event("start");if(this.trigger(s,[n.opts,e.corner]),s.isDefaultPrevented())return!1}if(r){if(a){var o=this,p=n.point&&n.point.corner==e.corner?n.point:H._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]),H._fold.call(o,e)}})}else H._fold.call(this,e),i.effect&&!i.effect.turning&&this.animatef(!1);return n.fwrapper.is(":visible")||(n.fparent.show().data().flips++,H._moveFoldingPage.call(this,!0),n.fwrapper.show(),n.bshadow&&n.bshadow.show()),!0}return!1},hide:function(){var t=this.data().f,e=H._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 n=H._c.call(this,r.corner),s="t"==r.corner.substr(0,1)?Math.min(0,r.y-n.y)/2:Math.max(0,r.y-n.y)/2,o=O(r.x,r.y+s),p=O(n.x,n.y-s);this.animatef({from:0,to:1,frame:function(t){var e=x(r,o,p,n,t);r.x=e.x,r.y=e.y,H._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||H._cAllowed.call(this)[0]};var r=a.point||H._c.call(this,t.corner,a.opts.turn?a.opts.turn.data().opts.elevation:0),i=H._c2.call(this,t.corner);this.trigger("flip").animatef({from:0,to:1,frame:function(a){var n=x(r,r,i,i,a);t.x=n.x,t.y=n.y,H._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=H._cornerActivated.call(this,t),e.corner&&H._foldingPage.call(this,e.corner))return H._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=o?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,H._showFoldedPage.call(this,e.corner)}else if(!this.data().effect&&this.is(":visible")){var r=H._cornerActivated.call(this,t[0]);if(r){var i=H._c.call(this,r.corner,e.opts.cornerSize/2);r.x=i.x,r.y=i.y,H._showFoldedPage.call(this,r,!0)}else H.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()||H.hideFoldedPage.call(this,!0)}e.corner=null},disable:function(t){return H.setData.call(this,{disabled:t}),this}},q=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 q(this,H,arguments)},turn:function(t){return q(this,S,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&&d(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,n=this,s=l(),o=function(a){if(n.data().effect===t){a=a||l();var p,d=Math.min(t.duration,Math.max(0,a-s)),g=[];for(p=0;p",{id:m,type:"text/css"}).text(b).appendTo(document.head||document.documentElement)},_=function(t,e,a){return{css:{top:t,left:e,"z-index":a||"auto"}}},x=function(t,e,a,r,n){var i=1-n,s=i*i*i,o=n*n*n;return O(Math.round(s*t.x+3*n*i*i*e.x+3*n*n*i*a.x+o*r.x),Math.round(s*t.y+3*n*i*i*e.y+3*n*n*i*a.y+o*r.y))},M=function(t){return t/r*180},O=function(t,e){return{x:t,y:e}},W=function(t,a,r){return e&&r?" translate3d("+t+"px,"+a+"px, 0px) ":" translate("+t+"px, "+a+"px) "},S=function(t){return" rotate("+t+"deg) "},j=function(t,e){return Object.prototype.hasOwnProperty.call(e,t)},F=function(e,a){return t.map(e.split(" "),function(t){return t+a}).join(" ")},z=function(t,e,a){return t=parseFloat(t),Math.max(e,Math.min(a,isNaN(t)?e:t))},T=function(t){return t.data()},k=function(t){return t.data().f},A={createWrapper:function(e,a,r){return t("",t.extend({class:e},a||{})).css(r||{})},applyStyles:function(t,e){return t.css(e)},removeNode:function(t){t&&t.remove()},append:function(t,e){return t.append(e)},prepend:function(t,e){return t.prepend(e)},transformProperties: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,r},applyTransform:function(t,e,a){return A.applyStyles(t,A.transformProperties(e,a))}},D=function(t){var e,a,i,s,o,p,l=0,h=0,d=O(0,0),g=O(0,0),f=O(0,0),u=t.width,c=t.height,v=t.wrapperHeight,y=t.origin,w=O(t.point.x,t.point.y),m="t"==t.point.corner.substr(0,1),b="l"==t.point.corner.substr(1,1);w.corner=t.point.corner,w.x=b?Math.max(w.x,1):Math.min(w.x,u-1);var P=function(){var _,x=O(y.x?y.x-w.x:w.x,y.y?y.y-w.y:w.y),W=Math.atan2(x.y,x.x);h=M(l=n-W),_=O(b?u-x.x/2:w.x+x.x/2,x.y/2);var S=l-Math.atan2(_.y,_.x),j=Math.max(0,Math.sin(S)*Math.sqrt(Math.pow(_.x,2)+Math.pow(_.y,2)));if(f=O(j*Math.sin(l),j*Math.cos(l)),l>n&&(f.x=f.x+Math.abs(f.y*Math.tan(W)),f.y=0,Math.round(f.x*Math.tan(r-l))=i-p))return!1;s.corner="b"}if(s.x<=p)s.corner+="l";else{if(!(s.x>=n-p))return!1;s.corner+="r"}return-1!=t.inArray(s.corner,l)&&s},_c:function(t,e){return{tl:O(e=e||0,e),tr:O(this.width()-e,e),bl:O(e,this.height()-e),br:O(this.width()-e,this.height()-e)}[t]},_c2:function(t){return{tl:O(2*this.width(),0),tr:O(-this.width(),0),bl:O(2*this.width(),this.height()),br:O(-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 t=this.data().f,e=t.opts.turn,a=t.opts.backGradient&&(!e||"single"==e.data().display||2!=t.opts.page&&t.opts.page!=e.data().totalPages-1);return a&&!t.bshadow&&(t.bshadow=A.createWrapper("turn-back-shadow",null,{width:this.width(),height:this.height()}).appendTo(t.parent)),a},_createFoldParent:function(){var e=k(this),a=t("
",{class:"turn-fold-parent"}).hide();return a.data().flips=0,e.opts.turn?(A.applyStyles(a,_(-e.opts.turn.offset().top,-e.opts.turn.offset().left,"auto").css).appendTo(e.opts.turn),T(e.opts.turn).fparent=a):A.applyStyles(a,_(0,0,"auto").css).attr("id","turn-fwrappers").appendTo(t("body")),a},resize:function(t){var e=this.data().f,a=this.width(),r=this.height(),n=Math.round(Math.sqrt(Math.pow(a,2)+Math.pow(r,2)));t&&(A.applyStyles(e.wrapper,{width:n,height:n}),A.applyStyles(e.fwrapper,{width:n,height:n}).children(":first-child").css({width:a,height:r}),A.applyStyles(e.fpage,{width:r,height:a}),e.opts.frontGradient&&A.applyStyles(e.ashadow,{width:r,height:a}),N._backGradient.call(this)&&A.applyStyles(e.bshadow,{width:a,height:r})),e.parent.is(":visible")&&(A.applyStyles(e.fwrapper,{top:e.parent.offset().top,left:e.parent.offset().left}),e.opts.turn&&A.applyStyles(e.fparent,{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(),n=this.height();Math.round(Math.sqrt(Math.pow(r,2)+Math.pow(n,2)));e.parent=a,e.fparent=e.opts.turn?T(e.opts.turn).fparent:t("#turn-fwrappers"),e.fparent||(e.fparent=N._createFoldParent.call(this)),A.applyStyles(this,{top:0,left:0,bottom:"auto",right:"auto"}),e.wrapper=A.createWrapper("turn-flip-wrapper",null,_(0,0,this.css("z-index")).css).appendTo(a).prepend(this),e.fwrapper=A.createWrapper("turn-fold-wrapper",null,_(a.offset().top,a.offset().left).css).hide().appendTo(e.fparent),e.fpage=A.createWrapper("turn-fold-page").appendTo(A.createWrapper("turn-fold-inner",null,_(0,0,0).css).appendTo(e.fwrapper)),e.opts.frontGradient&&(e.ashadow=A.createWrapper("turn-shadow",null,_(0,0,1).css).appendTo(e.fpage)),N.setData.call(this,e),N.resize.call(this,!0)}},_fold:function(t){var e,a,r,n,i,s=this,o=O(0,0),p=O(0,0),l=O(0,0),h=this.width(),d=this.height(),g=N._foldingPage.call(this),f=this.data().f,u=f.opts.acceleration,c=f.wrapper.height(),v=N._c.call(this,t.corner),y=N._backGradient.call(this),w=D({point:t,width:h,height:d,wrapperHeight:c,origin:v,endingPoint:N._c2.call(this,t.corner),frontGradient:f.opts.frontGradient,backGradient:y}),m="t"==t.corner.substr(0,1),b="l"==t.corner.substr(1,1),P=function(t,e,l,g){var v=["0","auto"],w=(h-c)*l[0]/100,P=(d-c)*l[1]/100,_={left:v[e[0]],top:v[e[1]],right:v[e[2]],bottom:v[e[3]]},x=90!=g&&-90!=g?b?-1:1:0;l=l[0]+"% "+l[1]+"%",A.applyStyles(s,_).transform(S(g)+W(t.x+x,t.y,u),l),A.applyStyles(f.fpage.parent(),_),f.wrapper.transform(W(-t.x+w-x,-t.y+P,u)+S(-g),l),f.fwrapper.transform(W(-t.x+o.x+w,-t.y+o.y+P,u)+S(-g),l),f.fpage.parent().transform(S(g)+W(t.x+p.x-o.x,t.y+p.y-o.y,u),l),f.opts.frontGradient&&E(f.ashadow,O(b?100:0,m?100:0),O(a.x,a.y),[[n,"rgba(0,0,0,0)"],[.9*(1-n)+n,"rgba(0,0,0,"+.12*i+")"],[1,"rgba(0,0,0,0)"]],3),y&&E(f.bshadow,O(b?0:100,m?0:100),O(r.x,r.y),[[.7,"rgba(0,0,0,0)"],[.9,"rgba(0,0,0,"+.18*i+")"],[1,"rgba(0,0,0,0)"]],3)};switch(t.x=w.point.x,t.y=w.point.y,w.alpha,e=w.angle,l=w.tr,o=w.move,p=w.df,m=w.top,b=w.left,a=w.gradient.endPointA,r=w.gradient.endPointB,n=w.gradient.startV,i=w.gradient.opacity,t.corner){case"tl":P(l,[1,0,0,1],[100,0],e),f.fpage.transform(W(-d,-h,u)+S(90-2*e),"100% 100%"),g.transform(S(90)+W(0,-d,u),"0% 0%");break;case"tr":P(O(-l.x,l.y),[0,0,0,1],[0,0],-e),f.fpage.transform(W(0,-h,u)+S(2*e-90),"0% 100%"),g.transform(S(270)+W(-h,0,u),"0% 0%");break;case"bl":P(O(l.x,-l.y),[1,1,0,0],[100,100],-e),f.fpage.transform(W(-d,0,u)+S(2*e-90),"100% 0%"),g.transform(S(270)+W(-h,0,u),"0% 0%");break;case"br":P(O(-l.x,-l.y),[0,1,1,0],[0,100],e),f.fpage.transform(S(90-2*e),"0% 0%"),g.transform(S(90)+W(0,-d,u),"0% 0%")}f.point=t},_moveFoldingPage:function(t){var e=this.data().f,a=N._foldingPage.call(this);a&&(t?e.fpage.children()[e.ashadow?"1":"0"]||(N.setData.call(this,{backParent:a.parent()}),A.prepend(e.fpage,a)):e.backParent&&A.prepend(e.backParent,a))},_showFoldedPage:function(e,a){var r=N._foldingPage.call(this),n=this.data(),i=n.f;if(!i.point||i.point.corner!=e.corner){var s=t.Event("start");if(this.trigger(s,[i.opts,e.corner]),s.isDefaultPrevented())return!1}if(r){if(a){var o=this,p=i.point&&i.point.corner==e.corner?i.point:N._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]),N._fold.call(o,e)}})}else N._fold.call(this,e),n.effect&&!n.effect.turning&&this.animatef(!1);return i.fwrapper.is(":visible")||(i.fparent.show().data().flips++,N._moveFoldingPage.call(this,!0),i.fwrapper.show(),i.bshadow&&i.bshadow.show()),!0}return!1},hide:function(){var t=this.data().f,e=N._foldingPage.call(this);return 0===--t.fparent.data().flips&&t.fparent.hide(),A.applyStyles(this,{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,n=function(){e.point=null,a.flip("hide"),a.trigger("end",[!1])};if(t){var i=N._c.call(this,r.corner),s="t"==r.corner.substr(0,1)?Math.min(0,r.y-i.y)/2:Math.max(0,r.y-i.y)/2,o=O(r.x,r.y+s),p=O(i.x,i.y-s);this.animatef({from:0,to:1,frame:function(t){var e=x(r,o,p,i,t);r.x=e.x,r.y=e.y,N._fold.call(a,r)},complete:n,duration:800,hiding:!0})}else this.animatef(!1),n()}},turnPage:function(t){var e=this,a=this.data().f;t={corner:a.corner?a.corner.corner:t||N._cAllowed.call(this)[0]};var r=a.point||N._c.call(this,t.corner,a.opts.turn?a.opts.turn.data().opts.elevation:0),n=N._c2.call(this,t.corner);this.trigger("flip").animatef({from:0,to:1,frame:function(a){var i=x(r,r,n,n,a);t.x=i.x,t.y=i.y,N._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=N._cornerActivated.call(this,t),e.corner&&N._foldingPage.call(this,e.corner))return N._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=o?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,N._showFoldedPage.call(this,e.corner)}else if(!this.data().effect&&this.is(":visible")){var r=N._cornerActivated.call(this,t[0]);if(r){var n=N._c.call(this,r.corner,e.opts.cornerSize/2);r.x=n.x,r.y=n.y,N._showFoldedPage.call(this,r,!0)}else N.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()||N.hideFoldedPage.call(this,!0)}e.corner=null},disable:function(t){return N.setData.call(this,{disabled:t}),this}},q=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 q(this,N,arguments)},turn:function(t){return q(this,H,arguments)},transform:function(t,e){return A.applyTransform(this,t,e)},animatef:function(t){var e=this.data();if(e.effect&&d(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,n){return r*Math.sqrt(1-(e=e/n-1)*e)+a});var a,r=[],n=t.to.length,i=this,s=l(),o=function(a){if(i.data().effect===t){a=a||l();var p,d=Math.min(t.duration,Math.max(0,a-s)),g=[];for(p=0;p