12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232 |
- /*
- * jQuery Booklet Plugin
- * Copyright (c) 2010 W. Grauvogel (http://builtbywill.com/)
- *
- * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
- * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
- *
- * Version : 1.2.0
- *
- * Originally based on the work of:
- * 1) Charles Mangin (http://clickheredammit.com/pageflip/)
- */
- ;(function($) {
-
- $.fn.booklet = function(options){
-
- var o = $.extend({}, $.fn.booklet.defaults, options);
-
- return $(this).each(function()
- {
- var command, config, obj, id, i, target;
-
- //option type string - api call
- if(typeof options == 'string')
- {
- //check if booklet has been initialized
- if($(this).data('booklet')){
- command = options.toLowerCase();
- obj = $.fn.booklet.interfaces[$(this).data('id')];
-
- if(command == 'next'){ obj.next() }
- else if(command == 'prev'){ obj.prev() }
-
- }
- }
- //option type number - api call
- else if(typeof options == 'number')
- {
- //check if booklet has been initialized
- if($(this).data('booklet')){
- target = options;
- obj = $.fn.booklet.interfaces[$(this).data('id')];
-
- if(target % 2 != 0) {
- target-= 1;
- }
-
- obj.gotoPage(target);
- }
-
- }
- //else build new booklet
- else
- {
- config = $.extend(true, {}, o);
-
- // Determine ID (Reuse array slots if possible)
- id = $.fn.booklet.interfaces.length;
- for(i = 0; i < id; i++)
- {
- if(typeof $.fn.booklet.interfaces[i] == 'undefined'){ id = i; break; }
- }
-
- // Instantiate the booklet
- obj = new booklet($(this), config, id);
-
- // Add API references
- $.fn.booklet.interfaces[id] = obj;
- }
- });
- }
- function booklet(target, options, id){
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //VARS + STRUCTURE
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- var self, opts, b, src,
- hash, i, j, p, diff, busy, init, rhover, lhover, h, a, playing,
- titles = new Array(), chapters = new Array(),
- pN, p0, p1, p2, p3, p4, pNwrap, p0wrap, p1wrap, p2wrap, p3wrap, p4wrap, wraps, sF, sB,
- p3drag, p0drag, temp, relativeX,
- overlaysB, overlayN, overlayP, tabs, tabN, tabP, arrows, arrowN, arrowP, next, prev, ctrlsN, ctrlsP,
- menu, chapter, dd, ddUL, ddH, ddLI, ddA, ddT, ddC, ddCUL, ddCH, ddCLI, ddCA, ddCT,
- empty = '<div class="b-page-empty" title="" rel=""></div>', blank = '<div class="b-page-blank" title="" rel=""></div>'
- ;
-
- busy = false;
- playing = false;
- init = false;
- rhover = lhover = false;
- self = this;
- self.options = options;
- self.id = id;
- self.hash = '';
- opts = self.options;
- b = target.addClass('booklet');
- src = b.children('.b-load');
-
- //save page titles and chapter names, add page numbers
- initPages();
-
- //store data for api calls
- b.data('booklet',true);
- b.data('id', id);
- b.data('total', src.children().length);
-
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // SETUP OPTIONS
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //set width + height
- if(!opts.width){
- opts.width = b.width();
- }else if(typeof opts.width == 'string' && opts.width.indexOf("%") != -1){
- opts.wPercent = true;
- opts.wOrig = opts.width;
- opts.width = (opts.width.replace('%','')/100) * parseFloat(b.parent().css('width'));
- }
- if(!opts.height){
- opts.height = b.height();
- }else if(typeof opts.height == 'string' && opts.height.indexOf("%") != -1){
- opts.hPercent = true;
- opts.hOrig = opts.height;
- opts.height = (opts.height.replace('%','')/100) * parseFloat(b.parent().css('height'));
- }
- b.width(opts.width);
- b.height(opts.height);
-
- //save page sizes and other vars
- opts.pWidth = opts.width/2;
- opts.pWidthN = '-'+(opts.pWidth)+'px';
- opts.pWidthH = opts.pWidth/2;
- opts.pHeight = opts.height;
- opts.pTotal = src.children().length;
- opts.speedH = opts.speed/2;
-
- //set startingPage
- if(opts.direction == 'LTR'){
- opts.curr = 0;
- }else if(opts.direction == 'RTL'){
- opts.curr = opts.pTotal-2;
- }
- if(!isNaN(opts.startingPage) && opts.startingPage <= opts.pTotal && opts.startingPage > 0){
- if((opts.startingPage % 2) != 0){opts.startingPage--};
- opts.curr = opts.startingPage;
- }
-
- //set position
- if(opts.closed && opts.autoCenter){
- if(opts.curr == 0){
- b.width(opts.pWidth);
- }else if(opts.curr >= opts.pTotal-2){
- b.width(opts.pWidth);
- }
- }
-
- //set booklet opts.name
- if(opts.name){
- document.title = opts.name;
- }else{
- opts.name = document.title;
- }
-
- //save shadow widths for anim
- if(opts.shadows){
- opts.shadowTopFwdWidth = '-'+opts.shadowTopFwdWidth+'px';
- opts.shadowTopBackWidth = '-'+opts.shadowTopBackWidth+'px';
- }
-
- //setup menu
- if(opts.menu){
- menu = $(opts.menu).addClass('b-menu');
- p = opts.curr;
- //setup page selctor
- if(opts.pageSelector){
- //add selector
- dd = $('<div class="b-selector b-selector-page"><span class="b-current">'+ (p+1) +' - '+ (p+2) +'</span></div>').appendTo(menu);
- ddUL = $('<ul></ul>').appendTo(dd).empty().css('height','auto');
- //loop through all pages
- for(i=0; i < opts.pTotal; i+=2){
- j = i;
- //nums for normal view
- nums = (j+1) +'-'+ (j+2);
- if(opts.closed){
- //nums for closed book
- j--;
- if(i==0){nums='1'}
- else if(i==opts.pTotal-2){nums=opts.pTotal-2}
- else {nums = (j+1) +'-'+ (j+2);}
- //nums for closed book with covers
- if(opts.covers){
- j--;
- if(i==0){nums=''}
- else if(i==opts.pTotal-2){nums=''}
- else {nums = (j+1) +'-'+ (j+2);}
- }
- }
- //nums for RTL direction
- if(opts.direction == 'RTL'){
- nums = (Math.abs(j - opts.pTotal)-1) +' - '+ ((Math.abs(j - opts.pTotal)));
- if(opts.closed){
- if(i==opts.pTotal-2){nums='1'}
- else if(i==0){nums=opts.pTotal-2}
- else{nums = (Math.abs(j - opts.pTotal)-3) +' - '+ ((Math.abs(j - opts.pTotal)-2));}
-
- if(opts.covers){
- if(i==opts.pTotal-2){nums=''}
- else if(i==0){nums=''}
- else{nums = (Math.abs(j - opts.pTotal)-5) +' - '+ ((Math.abs(j - opts.pTotal)-4));}
- }
- }
- dd.find('.b-current').text(nums);
- ddLI = $('<li><a href="#/page/'+ (i+1) +'" id="selector-page-'+i+'"><span class="b-text">'+ titles[i+1] +'</span><span class="b-num">'+ nums +'</span></a></li>').prependTo(ddUL);
- }else{
- if(i==0){dd.find('.b-current').text(nums);}
- ddLI = $('<li><a href="#/page/'+ (i+1) +'" id="selector-page-'+i+'"><span class="b-text">'+ titles[i] +'</span><span class="b-num">'+ nums +'</span></a></li>').appendTo(ddUL);
- }
-
- ddA = ddLI.find('a');
- if(!opts.hash){
- ddA.click(function(){
- if(opts.direction == 'RTL'){dd.find('.b-current').text($(this).find('.b-num').text());}
- ddT = parseInt($(this).attr('id').replace('selector-page-',''));
- self.gotoPage(ddT);
- return false;
- });
- }
- }
-
- //set height
- ddH = ddUL.height();
- ddUL.css({'height':0, 'padding-bottom':0});
-
- //add hover effects
- dd.unbind('hover').hover(function(){
- ddUL.stop().animate({height:ddH, paddingBottom:10}, 500);
- },function(){
- ddUL.stop().animate({height:0, paddingBottom:0}, 500);
- });
- }
-
- //setup chapter selctor
- if(opts.chapterSelector){
-
- chapter = chapters[opts.curr];
- if(chapter == ""){ chapter = chapters[opts.curr+1]; }
-
- ddC = $('<div class="b-selector b-selector-chapter"><span class="b-current">'+chapter+'</span></div>').appendTo(menu);
- ddCUL = $('<ul></ul>').appendTo(ddC).empty().css('height','auto');
- for(i=0; i < opts.pTotal; i+=1){
- if(chapters[i] != "" && typeof chapters[i] != "undefined"){
- if(opts.direction == 'RTL'){
- j = i;
- if(j % 2 != 0){j--;}
- ddC.find('.b-current').text(chapters[i]);
- ddCLI = $('<li><a href="#/page/'+ (j+1) +'" id="selector-page-'+(j)+'"><span class="b-text">'+ chapters[i] +'</span></a></li>').prependTo(ddCUL);
- }else{
- ddCLI = $('<li><a href="#/page/'+ (i+1) +'" id="selector-page-'+i+'"><span class="b-text">'+ chapters[i] +'</span></a></li>').appendTo(ddCUL);
- }
- ddCA = ddCLI.find('a');
- if(!opts.hash){
- ddCA.click(function(){
- if(opts.direction == 'RTL'){ddC.find('.b-current').text($(this).find('.b-text').text());}
- ddCT = parseInt($(this).attr('id').replace('selector-page-',''));
- self.gotoPage(ddCT);
- return false;
- });
- }
- }
- }
-
- ddCH = ddCUL.height();
- ddCUL.css({'height':0, 'padding-bottom':0});
-
- ddC.unbind('hover').hover(function(){
- ddCUL.stop().animate({height:ddCH, paddingBottom:10}, 500);
- },function(){
- ddCUL.stop().animate({height:0, paddingBottom:0}, 500);
- });
- }
- }
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // API METHODS
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- $.extend(self,
- {
- next : function(){
- if(!busy){
- self.gotoPage(opts.curr+2);
- }
- },
- prev : function(){
- if(!busy){
- self.gotoPage(opts.curr-2);
- }
- },
- gotoPage : function(num){
- //moving forward (increasing number)
- if(num > opts.curr && num < opts.pTotal && num >= 0 && !busy){
- busy = true;
- diff = num - opts.curr;
- opts.curr = num;
- opts.before.call(self, opts);
- updatePager();
- updateCtrls();
- updateHash(opts.curr+1, opts);
- initAnim(diff, true, sF);
-
- //hide p2 as p3 moves across it
- if(opts.closed && opts.autoCenter && num-diff == 0){
- p2.stop().animate({width:0, left:opts.pWidth}, opts.speed, opts.easing);
- p4.stop().animate({left:opts.pWidth}, opts.speed, opts.easing);
- }else{
- p2.stop().animate({width:0}, opts.speedH, opts.easeIn);
- }
-
- //animate p3 from right to left (left: movement, width: reveal slide, paddingLeft: shadow underneath)
- //call setuppages at end of animation to reset pages
-
- //animation if dragging forward
- if(p3drag){
- p3.stop().animate({left:opts.pWidth/4, width:opts.pWidth*.75, paddingLeft: opts.shadowBtmWidth}, opts.speedH, opts.easeIn)
- .animate({left:0, width:opts.pWidth, paddingLeft:0}, opts.speedH);
- }else{
- p3.stop().animate({left:opts.pWidthH, width:opts.pWidthH, paddingLeft: opts.shadowBtmWidth}, opts.speedH, opts.easeIn)
- .animate({left:0, width:opts.pWidth, paddingLeft:0}, opts.speedH);
- }
- p3wrap.animate({left:opts.shadowBtmWidth}, opts.speedH, opts.easeIn)
- .animate({left:0}, opts.speedH, opts.easeOut, function(){updateAfter()});
-
- //moving backward (decreasing number)
- }else if(num < opts.curr && num < opts.pTotal && num >= 0 && !busy){
- busy = true;
- diff = opts.curr - num;
- opts.curr = num;
- opts.before.call(self, opts);
- updatePager();
- updateCtrls();
- updateHash(opts.curr+1, opts);
- initAnim(diff, false, sB);
-
- //animation if dragging backwards
- if(p0drag){
- //hide p1 as p0 moves across it
- p1.animate({left:opts.pWidth, width:0}, opts.speed, opts.easing);
- p1wrap.animate({left:opts.pWidthN}, opts.speed, opts.easing);
-
- //animate p0 from left to right (right: movement, width: reveal slide, paddingLeft: shadow underneath)
- if(opts.closed && opts.autoCenter && opts.curr == 0){
- p0.animate({left:opts.pWidthH, width:opts.pWidthH}, opts.speedH, opts.easeIn)
- .animate({left:0, width:opts.pWidth}, opts.speedH, opts.easeOut);
- p2.stop().animate({left:0}, opts.speed, opts.easing);
- }else{
- p0.animate({left:opts.pWidth, width:opts.pWidth}, opts.speed, opts.easing);
- }
- //animate .wrapper content with p0 to keep content right aligned throughout
- //call setuppages at end of animation to reset pages
- p0wrap.animate({right:0}, opts.speed, opts.easing, function(){updateAfter()});
- }else{
- //hide p1 as p0 moves across it
- p1.animate({left:opts.pWidth, width:0}, opts.speed, opts.easing);
- p1wrap.animate({left:opts.pWidthN}, opts.speed, opts.easing);
-
- //animate p0 from left to right (right: movement, width: reveal slide, paddingLeft: shadow underneath)
- if(opts.closed && opts.autoCenter && opts.curr == 0){
- p0.animate({left:opts.pWidthH, width:opts.pWidthH}, opts.speedH, opts.easeIn)
- .animate({left:0, width:opts.pWidth}, opts.speedH, opts.easeOut);
- p2.stop().animate({left:0}, opts.speed, opts.easing);
- }else{
- p0.animate({left:opts.pWidthH, width:opts.pWidthH}, opts.speedH, opts.easeIn)
- .animate({left:opts.pWidth, width:opts.pWidth}, opts.speedH, opts.easeOut);
- }
- //animate .wrapper content with p0 to keep content right aligned throughout
- //call setuppages at end of animation to reset pages
- p0wrap.animate({right:opts.shadowBtmWidth}, opts.speedH,opts. easeIn)
- .animate({right:0}, opts.speedH, opts.easeOut, function(){updateAfter()});
- }
- }
- }
- });
-
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // SETUP CONTROLS
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
- if(opts.manual && $.ui){
- opts.overlays = false;
- }
-
- //add prev next user defined controls
- if(opts.next){
- next = $(opts.next);
- next.click(function(e){e.preventDefault(); self.next();});
- }
- if(opts.prev){
- prev = $(opts.prev);
- prev.click(function(e){e.preventDefault(); self.prev();});
- }
-
- //add overlays
- if(opts.overlays){
- overlayP = $('<div class="b-overlay b-overlay-prev b-prev" title="Previous Page"></div>').appendTo(b);
- overlayN = $('<div class="b-overlay b-overlay-next b-next" title="Next Page"></div>').appendTo(b);
- overlaysB = b.find('.b-overlay');
-
- if ($.browser.msie) {
- overlaysB.css({'background':'#fff','filter':'progid:DXImageTransform.Microsoft.Alpha(opacity=0) !important'});
- }
- }
-
- //add tabs
- if(opts.tabs){
- tabP = $('<div class="b-tab b-tab-prev b-prev" title="Previous Page">Previous</div>').appendTo(b);
- tabN = $('<div class="b-tab b-tab-next b-next" title="Next Page">Next</div>').appendTo(b);
- tabs = b.find('.b-tab');
-
- if(opts.tabWidth){
- tabs.width(opts.tabWidth);
- }
- if(opts.tabHeight){
- tabs.height(opts.tabHeight);
- }
-
- tabs.css({'top': '-'+tabN.outerHeight()+'px'});
- b.css({'marginTop': tabN.outerHeight()});
-
- //update ctrls for RTL direction
- if(opts.direction == 'RTL'){
- tabN.html('Previous').attr('title','Previous Page');
- tabP.html('Next').attr('title','Next Page');
- }
- }else{
- b.css({'marginTop': 0});
- }
-
- //add arrows
- if(opts.arrows){
- arrowP = $('<div class="b-arrow b-arrow-prev b-prev" title="Previous Page"><div>Previous</div></div>').appendTo(b);
- arrowN = $('<div class="b-arrow b-arrow-next b-next" title="Next Page"><div>Next</div></div>').appendTo(b);
- arrows = b.find('.b-arrow');
-
- //update ctrls for RTL direction
- if(opts.direction == 'RTL'){
- arrowN.html('<div>Previous</div>').attr('title','Previous Page');
- arrowP.html('<div>Next</div>').attr('title','Next Page');
- }
- }
-
- //save all "b-prev" and "b-next" controls
- ctrlsN = b.find('.b-next');
- ctrlsP = b.find('.b-prev');
-
- //add click actions
- ctrlsN.click(function(e){e.preventDefault(); self.next();});
- ctrlsP.click(function(e){e.preventDefault(); self.prev();});
-
- //add page hover animations
- if(opts.overlays && opts.hovers){
- //hovers to start draggable forward
- ctrlsN.unbind("mouseover mouseout").bind("mouseover",function(){
- hoverAnimStart(true);
- })
- .bind("mouseout",function(){
- hoverAnimEnd(true);
- });
-
- //hovers to start draggable backwards
- ctrlsP.unbind("mouseover mouseout").bind("mouseover",function(){
- hoverAnimStart(false);
- })
- .bind("mouseout",function(){
- hoverAnimEnd(false);
- });
- }
-
- //arrow animations
- if(opts.arrows){
- if(opts.arrowsHide){
- if($.support.opacity){
- ctrlsN.hover(
- function(){arrowN.find('div').stop().fadeTo('fast', 1);},
- function(){arrowN.find('div').stop().fadeTo('fast', 0);
- });
- ctrlsP.hover(
- function(){arrowP.find('div').stop().fadeTo('fast', 1);},
- function(){arrowP.find('div').stop().fadeTo('fast', 0);
- });
- }else{
- ctrlsN.hover(
- function(){arrowN.find('div').show();},
- function(){arrowN.find('div').hide();
- });
- ctrlsP.hover(
- function(){arrowP.find('div').show();},
- function(){arrowP.find('div').hide();
- });
- }
- }else{
- arrowN.find('div').show();
- arrowP.find('div').show();
- }
- }
- //keyboard ctrls
- if(opts.keyboard){
- //keyboard ctrls
- $(document).keyup(function(event){
- if(event.keyCode == 37){self.prev();}
- else if(event.keyCode == 39){self.next();}
- });
- }
-
- //hash ctrls
- if(opts.hash){
- setupHash();
- clearInterval(h);
- h = setInterval(function(){pollHash()}, 250);
- }
-
- //percentage resizing
- if(opts.wPercent || opts.hPercent){
- $(window).resize(function() {
- resetSize();
- });
- }
-
- //auto flip book controls
- if(opts.auto && opts.delay){
- clearTimeout(a);
- a = setTimeout(function(){self.next();},opts.delay);
- playing = true;
-
- if(opts.pause){
- pause = $(opts.pause);
- pause.click(function(e){
- e.preventDefault();
- if(playing){
- clearTimeout(a);
- playing = false;
- }
- });
- }
- if(opts.play){
- play = $(opts.play);
- play.click(function(e){
- e.preventDefault();
- if(!playing){
- clearTimeout(a);
- a = setTimeout(function(){self.next();},opts.delay);
- playing = true;
- }
- });
- }
- }
-
- //first time setup
- resetPages();
- updateCtrls();
- updatePager();
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //General Functions
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- function initPages(){
- //fix for odd number of pages
- if((src.children().length % 2) != 0){
- //if book is closed and using covers, add page before back cover, else after last page
- if(opts.closed && opts.covers){
- src.children().last().before(blank);
- }else{
- src.children().last().after(blank);
- }
- }
-
- //if closed book, add empty pages to start and end
- if(opts.closed){
- $(empty).attr({'title':opts.closedFrontTitle || "Beginning", 'rel':opts.closedFrontChapter || "Beginning of Book"}).prependTo(src);
- src.children().last().attr({'title':opts.closedBackTitle || "End", 'rel':opts.closedBackChapter || "End of Book"});
- src.append(empty);
- }
- if(opts.direction == 'LTR'){
- j = 0;
- }else{
- j = src.children().length;
- if(opts.closed){j-=2;}
- if(opts.covers){j-=2;}
- $(src.children().get().reverse()).each(function(){
- $(this).appendTo(src);
- });
- }
-
- //save titles and chapters
- src.children().each(function(i){
- //save chapter title
- if($(this).attr('rel')){
- chapters[i] = $(this).attr('rel');
- }else{
- chapters[i] = "";
- }
- //save page title
- titles[i] = $(this).attr('title');
-
- //give content the correct wrapper and page wrapper
- if($(this).hasClass('b-page-empty')){
- $(this).wrap('<div class="b-page"><div class="b-wrap"></div></div>');
- }else if(opts.closed && opts.covers && (i == 1 || i == src.children().length-2)){
- $(this).wrap('<div class="b-page"><div class="b-wrap b-page-cover"></div></div>');
- }else if(i % 2 != 0){
- $(this).wrap('<div class="b-page"><div class="b-wrap b-wrap-right"></div></div>');
- }else{
- $(this).wrap('<div class="b-page"><div class="b-wrap b-wrap-left"></div></div>');
- }
-
- $(this).parents('.b-page').addClass('b-page-'+i).data('page',i);
-
- //add page numbers
- if(opts.pageNumbers && !$(this).hasClass('b-page-empty') && (!opts.closed || (opts.closed && !opts.covers) || (opts.closed && opts.covers && i != 1 && i != src.children().length-2))){
- if(opts.direction == 'LTR'){j++;}
- $(this).parent().append('<div class="b-counter">'+(j)+'</div>');
- if(opts.direction == 'RTL'){j--;}
- }
- });
- }
- function resetSize(){
- //recalculate size for percentage values
- if(opts.wPercent){
- opts.width = (opts.wOrig.replace('%','')/100) * parseFloat(b.parent().css('width'));
- b.width(opts.width);
- opts.pWidth = opts.width/2;
- opts.pWidthN = '-'+(opts.pWidth)+'px';
- opts.pWidthH = opts.pWidth/2;
- }
- if(opts.hPercent){
- opts.height = (opts.hOrig.replace('%','')/100) * parseFloat(b.parent().css('height'));
- b.height(opts.height);
- opts.pHeight = opts.height;
- }
- resetCSS();
- }
-
- function resetCSS(){
- //update css
- b.find('.b-shadow-f, .b-shadow-b, .b-p0, .b-p3').css({'filter':'','zoom':''});
- if(opts.manual && $.ui){
- b.find('.b-page').draggable('destroy').removeClass('b-grab b-grabbing');
- }
- wraps.attr('style','');
- wraps.css({'left':0,'width':opts.pWidth-(opts.pagePadding*2), 'height':opts.pHeight-(opts.pagePadding*2), 'padding': opts.pagePadding});
- p0wrap.css({'right':0,'left':'auto'});
- p1.css({'left':0,'width':opts.pWidth, 'height':opts.pHeight});
- p2.css({'left':opts.pWidth, 'width':opts.pWidth, 'opacity':1, 'height':opts.pHeight});
- pN.css({'left':0, 'width':opts.pWidth, 'height':opts.pHeight});
- p0.css({'left':0, 'width':0, 'height':opts.pHeight});
- p3.stop().css({'left':opts.pWidth*2, 'width':0, 'height':opts.pHeight, paddingLeft:0});
- p4.css({'left':opts.pWidth, 'width':opts.pWidth, 'height':opts.pHeight});
-
- if(opts.closed && opts.autoCenter && opts.curr == 0){
- pN.css({'left':0});
- p1.css({'left':opts.pWidthN});
- p2.css({'left':0});
- p3.css({'left':opts.pWidth});
- p4.css({'left':0});
- }
-
- if(opts.closed && opts.autoCenter && (opts.curr == 0 || opts.curr >= opts.pTotal-2)){
- if(opts.overlays){overlaysB.width('100%');}
- b.width(opts.pWidth);
- }else{
- if(opts.overlays){overlaysB.width('50%');}
- b.width(opts.width);
- }
-
- }
-
- function resetPages(){
- //reset page order
- if(init){
- if(p1.data('page')-1 < 0){
- src.prepend(p2.detach());
- src.prepend(p1.detach());
- }else{
- b.find('.b-page-'+(p1.data('page')-1)).after(p1.detach());
- b.find('.b-page-'+(p2.data('page')-1)).after(p2.detach());
- }
- if(p3.data('page')-1 <= opts.pTotal){
- b.find('.b-page-'+(p3.data('page')-1)).after(p3.detach());
- b.find('.b-page-'+(p4.data('page')-1)).after(p4.detach());
- }
- if(pN.data('page')-1 >= 0){
- b.find('.b-page-'+(pN.data('page')-1)).after(pN.detach());
- b.find('.b-page-'+(p0.data('page')-1)).after(p0.detach());
- }else{
- src.prepend(pN.detach());
- pN.after(p0.detach());
- }
- }
- //reset all content
- b.find('.b-page').removeClass('b-pN b-p0 b-p1 b-p2 b-p3 b-p4').hide();
-
- //add page classes
- if(opts.curr-2 >= 0){
- b.find('.b-page-'+(opts.curr-2)).addClass('b-pN').show();
- b.find('.b-page-'+(opts.curr-1)).addClass('b-p0').show();
- }
- b.find('.b-page-'+(opts.curr)).addClass('b-p1').show();
- b.find('.b-page-'+(opts.curr+1)).addClass('b-p2').show();
- if(opts.curr+3 <= opts.pTotal){
- b.find('.b-page-'+(opts.curr+2)).addClass('b-p3').show();
- b.find('.b-page-'+(opts.curr+3)).addClass('b-p4').show();
- }
-
- //save structure elems to vars
- pN = b.find('.b-pN');
- p0 = b.find('.b-p0');
- p1 = b.find('.b-p1');
- p2 = b.find('.b-p2');
- p3 = b.find('.b-p3');
- p4 = b.find('.b-p4');
- pNwrap = b.find('.b-pN .b-wrap');
- p0wrap = b.find('.b-p0 .b-wrap');
- p1wrap = b.find('.b-p1 .b-wrap');
- p2wrap = b.find('.b-p2 .b-wrap');
- p3wrap = b.find('.b-p3 .b-wrap');
- p4wrap = b.find('.b-p4 .b-wrap');
- wraps = b.find('.b-wrap');
-
- resetCSS();
-
- //update page order for animations
- if(opts.curr+3 <= opts.pTotal){
- p3.after(p0.detach());
- p1.after(p4.detach());
- }else{
- p0.detach().appendTo(src);
- }
- init = true;
-
- if(opts.shadows){
- b.find('.b-shadow-f, .b-shadow-b').remove();
- sF = $('<div class="b-shadow-f"></div>').css({'right':0,'width':opts.pWidth, 'height':opts.pHeight}).appendTo(p3);
- sB = $('<div class="b-shadow-b"></div>').appendTo(p0).css({'left':0,'width':opts.pWidth, 'height':opts.pHeight});
- }
-
- //reset vars
- rhover = lhover = p3drag = p0drag = false;
-
- //manual page turning, check if jQuery UI is loaded
- if(opts.manual && $.ui){
-
- //implement draggable forward
- p3.draggable({
- axis: "x",
- containment: [p2.offset().left-opts.pWidthH,0,p2.offset().left+opts.pWidth-50,opts.pHeight],
- drag: function(event, ui) {
- p3drag = true;
- temp = ui.originalPosition.left - ui.position.left;
- p3.removeClass('b-grab').addClass('b-grabbing');
- p3.width(40+(temp/2));
- p3wrap.css({'left':10+(temp/8)});
- p2.width(opts.pWidth-p3.width()+10);
- if(opts.shadows){
- sF.css({'right':'-'+(20+temp/4)+'px'});
- if($.support.opacity){
- sF.css({'opacity':0.5*(temp/opts.pWidthH)});
- }else{
- sF.css({'right':'auto','left':0.1*p3.width()});
- }
- }
- },
- stop: function(event, ui) {
- hoverAnimEnd(false);
- var temp = ui.originalPosition.left - ui.position.left;
- if(temp>opts.pWidthH/4){
- if(opts.shadows && !$.support.opacity){
- sF.css({'left':'auto'});
- }
- self.next();
- p3.removeClass('b-grab b-grabbing');
- }else{
- p3drag = false;
- p3.removeClass('b-grabbing').addClass('b-grab');
- }
- }
- });
-
- //implement draggable backwards
- p0.draggable({
- axis: "x",
- containment: [p1.offset().left+10,0,p1.offset().left+opts.pWidth*.75,opts.pHeight],
- drag: function(event, ui) {
- p0drag = true;
- temp = ui.position.left - ui.originalPosition.left;
- p0.removeClass('b-grab').addClass('b-grabbing');
- p0.css({left:40+(temp)/1.5, width:40+(temp)});
- p0wrap.css({right:10+temp/4});
- p1.css({left:ui.position.left+20, width:opts.pWidth-ui.position.left-10});
- p1wrap.css({left:-1*(temp+30)});
- if(opts.shadows){
- if($.support.opacity){
- sB.css({'opacity':0.5*(temp/opts.pWidthH)});
- }else{
- sB.css({'left':-0.38*opts.pWidth});
- }
- }
- },
- stop: function(event, ui) {
- hoverAnimEnd(true);
- temp = ui.position.left - ui.originalPosition.left;
- if(temp>opts.pWidthH/4){
- self.prev();
- p0.removeClass('b-grab b-grabbing');
- }else{
- p0drag = false;
- p0.removeClass('b-grabbing').addClass('b-grab');
- }
- }
- });
-
- //mousetracking for page movement
- $(b).unbind('mousemove mouseout').bind('mousemove',function(e){
- relativeX = e.pageX - b.offset().left;
- if(relativeX < 50){
- hoverAnimStart(false);
- }else if(relativeX > opts.pWidth-50 && opts.curr == 0 && opts.autoCenter && opts.closed){
- hoverAnimStart(true);
- }else if(relativeX > 50 && relativeX < opts.width-50){
- hoverAnimEnd(false);
- hoverAnimEnd(true);
- }else if(relativeX > opts.width-50){
- hoverAnimStart(true);
- }
- }).bind('mouseout',function(){
- hoverAnimEnd(false);
- hoverAnimEnd(true);
- });
-
- }
- }
-
- function hoverAnimStart(inc){
- if(inc){
- if(!busy && !rhover &&!lhover && !p3drag && opts.curr+2 <= opts.pTotal-2){
- //animate
- p2.stop().animate({'width':opts.pWidth-40}, 500, opts.easing);
- p3.addClass('b-grab');
- if(opts.closed && opts.autoCenter && opts.curr == 0){
- p3.stop().animate({'left':opts.pWidth-50, 'width':40}, 500, opts.easing);
- }else{
- p3.stop().animate({'left':opts.width-50, 'width':40}, 500, opts.easing);
- }
- p3wrap.stop().animate({'left':10}, 500, opts.easing);
- if(opts.shadows && !$.support.opacity){
- sF.css({'right':'auto','left':'-40%'});
- }
- rhover = true;
- }
- }else{
- if(!busy && !lhover && !rhover && !p0drag && opts.curr-2 >= 0){
- //animate
- p1.stop().animate({left:10, width:opts.pWidth-10}, 400, opts.easing);
- p0.addClass('b-grab');
- p1wrap.stop().animate({left:"-10px"}, 400, opts.easing);
- p0.stop().animate({left:10, width:40}, 400, opts.easing);
- p0wrap.stop().animate({right:10}, 400, opts.easing);
- if(opts.shadows && !$.support.opacity){
- sB.css({'left':-0.38*opts.pWidth});
- }
- lhover = true;
- }
- }
- }
- function hoverAnimEnd(inc){
- if(inc){
- if(!busy && rhover && !p3drag && opts.curr+2 <= opts.pTotal-2){
- p2.stop().animate({'width':opts.pWidth}, 500, opts.easing);
- if(opts.closed && opts.autoCenter && opts.curr == 0){
- p3.stop().animate({'left':opts.pWidth, 'width':0}, 500, opts.easing);
- }else{
- p3.stop().animate({'left':opts.width, 'width':0}, 500, opts.easing);
- }
- p3wrap.stop().animate({'left':0}, 500, opts.easing);
- if(opts.shadows && !$.support.opacity){
- sF.css({'left':'auto'});
- }
- rhover = false;
- }
- }else{
- if(!busy && lhover && !p0drag && opts.curr-2 >= 0){
- p1.stop().animate({left:0, width:opts.pWidth}, 400, opts.easing);
- p1wrap.stop().animate({left:0}, 400, opts.easing);
- p0.stop().animate({left:0, width:0}, 400, opts.easing);
- p0wrap.stop().animate({right:0}, 400, opts.easing);
- lhover = false;
- }
- }
- }
- function initAnim(diff, inc, shadow){
-
- //setup content
- if(inc && diff > 2){
- b.find('.b-page-'+(p3.data('page')-1)).after(p3.detach());
- b.find('.b-page-'+(p4.data('page')-1)).after(p4.detach());
-
- b.find('.b-p3, .b-p4').removeClass('b-p3 b-p4').hide();
- b.find('.b-page-'+opts.curr).addClass('b-p3').show().stop().css({'left':opts.pWidth*2, 'width':0, 'height':opts.pHeight, paddingLeft:0});
- b.find('.b-page-'+(opts.curr+1)).addClass('b-p4').show().css({'left':opts.pWidth, 'width':opts.pWidth, 'height':opts.pHeight});
- b.find('.b-page-'+opts.curr+' .b-wrap').show().css({'width':opts.pWidth-(opts.pagePadding*2), 'height':opts.pHeight-(opts.pagePadding*2), 'padding': opts.pagePadding});
- b.find('.b-page-'+(opts.curr+1)+' .b-wrap').show().css({'width':opts.pWidth-(opts.pagePadding*2), 'height':opts.pHeight-(opts.pagePadding*2), 'padding': opts.pagePadding});
-
- p3 = b.find('.b-p3');
- p4 = b.find('.b-p4');
- p3wrap = b.find('.b-p3 .b-wrap');
- p4wrap = b.find('.b-p4 .b-wrap');
-
- if(rhover){
- p3.css({'left':opts.width-40, 'width':20, 'padding-left': 10});
- }
-
- p1.after(p4.detach());
- p2.after(p3.detach());
-
- if (opts.shadows) {
- b.find('.b-shadow-f').remove();
- sF = $('<div class="b-shadow-f"></div>').css({
- 'right': 0,
- 'width': opts.pWidth,
- 'height': opts.pHeight
- }).appendTo(p3);
- shadow = sF;
- }
-
- }else if(!inc && diff > 2){
-
- b.find('.b-page-'+(pN.data('page')-1)).after(pN.detach());
- b.find('.b-page-'+(p0.data('page')-1)).after(p0.detach());
-
- b.find('.b-pN, .b-p0').removeClass('b-pN b-p0').hide();
- b.find('.b-page-'+opts.curr).addClass('b-pN').show().css({'left':0, 'width':opts.pWidth, 'height':opts.pHeight});
- b.find('.b-page-'+(opts.curr+1)).addClass('b-p0').show().css({'left':0, 'width':0, 'height':opts.pHeight});
- b.find('.b-page-'+opts.curr+' .b-wrap').show().css({'width':opts.pWidth-(opts.pagePadding*2), 'height':opts.pHeight-(opts.pagePadding*2), 'padding': opts.pagePadding});
- b.find('.b-page-'+(opts.curr+1)+' .b-wrap').show().css({'width':opts.pWidth-(opts.pagePadding*2), 'height':opts.pHeight-(opts.pagePadding*2), 'padding': opts.pagePadding});
-
- pN = b.find('.b-pN');
- p0 = b.find('.b-p0');
- pNwrap = b.find('.b-pN .b-wrap');
- p0wrap = b.find('.b-p0 .b-wrap');
-
- if(lhover){
- p0.css({left:10, width:40});
- p0wrap.css({right:10});
- }
-
- p0.detach().appendTo(src);
-
- if (opts.shadows) {
- b.find('.b-shadow-b, .b-shadow-f').remove();
- sB = $('<div class="b-shadow-b"></div>').appendTo(p0).css({
- 'left': 0,
- 'width': opts.pWidth,
- 'height': opts.pHeight
- });
- shadow = sB;
- }
- }
-
- //update page visibility
- //if moving to start and end of book
- if(opts.closed){
- if(!inc && opts.curr == 0){
- pN.hide();
- }else if(!inc){
- pN.show();
- }
- if(inc && opts.curr >= opts.pTotal-2){
- p4.hide();
- }else if(inc){
- p4.show();
- }
- }
-
- //init shadows
- if(opts.shadows){
- //check for opacity support -> animate shadow overlay on moving slide
- if($.support.opacity){
- shadow.animate({opacity:1}, opts.speedH, opts.easeIn)
- .animate({opacity:0}, opts.speedH, opts.easeOut);
- }else{
- if(inc){
- shadow.animate({right:opts.shadowTopFwdWidth}, opts.speed, opts.easeIn);
- }else{
- shadow.animate({left:opts.shadowTopBackWidth}, opts.speed, opts.easeIn);
- }
- }
- }
-
- //init position anim
- if(opts.closed && opts.autoCenter){
- if(opts.curr == 0){
- p3.hide();
- p4.hide();
- b.animate({width:opts.pWidth}, opts.speed, opts.easing);
- }else if(opts.curr >= opts.pTotal-2){
- p0.hide();
- pN.hide();
- b.animate({width:opts.pWidth}, opts.speed, opts.easing);
- }else{
- b.animate({width:opts.width}, opts.speed, opts.easing);
- }
- }
- }
-
- function updateAfter(){
- resetPages();
- updatePager();
- updateCtrls();
- opts.after.call(self, opts);
- busy = false;
-
- //update auto play timer
- if(opts.auto && opts.delay){
- if(playing && opts.curr < opts.pTotal-2){
- clearTimeout(a);
- a = setTimeout(function(){self.next();},opts.delay);
- console.log("continue...");
- }
- if(opts.curr >= opts.pTotal-2){
- playing = false;
- }
- }
- }
-
- function updateCtrls(){
- //update ctrls, cursors and visibility
- if(opts.overlays || opts.tabs || opts.arrows){
- if($.support.opacity){
- if(opts.curr < opts.pTotal-2){
- ctrlsN.fadeIn('fast').css('cursor',opts.cursor);
- }else{
- ctrlsN.fadeOut('fast').css('cursor','default');
- }
- if(opts.curr >= 2 && opts.curr != 0){
- ctrlsP.fadeIn('fast').css('cursor',opts.cursor);
- }else{
- ctrlsP.fadeOut('fast').css('cursor','default');
- }
- }else{
- if(opts.curr < opts.pTotal-2){
- ctrlsN.show().css('cursor',opts.cursor);
- }else{
- ctrlsN.hide().css('cursor','default');
- }
- if(opts.curr >= 2 && opts.curr != 0){
- ctrlsP.show().css('cursor',opts.cursor);
- }else{
- ctrlsP.hide().css('cursor','default');
- }
- }
- }
- }
-
- function updatePager(){
- if(opts.pageSelector){
- if(opts.direction == 'RTL'){
- nums = (Math.abs(opts.curr - opts.pTotal)-1) +' - '+ ((Math.abs(opts.curr - opts.pTotal)));
- if(opts.closed){
- if(opts.curr==opts.pTotal-2){nums='1'}
- else if(opts.curr==0){nums=opts.pTotal-2}
- else{nums = (Math.abs(opts.curr - opts.pTotal)-2) +' - '+ ((Math.abs(opts.curr - opts.pTotal)-1));}
-
- if(opts.covers){
- if(opts.curr==opts.pTotal-2){nums=''}
- else if(opts.curr==0){nums=''}
- else{nums = (Math.abs(opts.curr - opts.pTotal)-3) +' - '+ ((Math.abs(opts.curr - opts.pTotal)-2));}
- }
- }
- $(opts.menu+' .b-selector-page .b-current').text(nums);
- }else{
- nums = (opts.curr+1) +' - '+ (opts.curr+2);
- if(opts.closed){
- if(opts.curr==0){nums='1'}
- else if(opts.curr==opts.pTotal-2){nums=opts.pTotal-2}
- else {nums = (opts.curr) +'-'+ (opts.curr+1);}
-
- if(opts.covers){
- if(opts.curr==0){nums=''}
- else if(opts.curr==opts.pTotal-2){nums=''}
- else {nums = (opts.curr-1) +'-'+ (opts.curr);}
- }
- }
- $(opts.menu+' .b-selector-page .b-current').text(nums);
- }
- }
- if(opts.chapterSelector){
- if(chapters[opts.curr]!=""){
- $(opts.menu+' .b-selector-chapter .b-current').text(chapters[opts.curr]);
- }else if(chapters[opts.curr+1]!=""){
- $(opts.menu+' .b-selector-chapter .b-current').text(chapters[opts.curr+1]);
- }
-
- if(opts.direction == 'RTL' && chapters[opts.curr+1]!=""){
- $(opts.menu+' .b-selector-chapter .b-current').text(chapters[opts.curr+1]);
- }else if(chapters[opts.curr]!=""){
- $(opts.menu+' .b-selector-chapter .b-current').text(chapters[opts.curr]);
- }
- }
- }
-
- function setupHash(){
- hash = getHashNum();
-
- if(!isNaN(hash) && hash <= opts.pTotal-1 && hash >= 0 && hash != ''){
- if((hash % 2) != 0){
- hash--;
- }
- opts.curr = hash;
- }else{
- updateHash(opts.curr+1, opts);
- }
-
- self.hash = hash;
- }
-
- function pollHash(){
- hash = getHashNum();
- //check page num
- if(!isNaN(hash) && hash <= opts.pTotal-1 && hash >= 0){
- if(hash != opts.curr && hash.toString()!=self.hash){
- if((hash % 2) != 0){hash--};
-
- document.title = opts.name + " - Page "+ (hash+1);
-
- if(!busy){
- self.gotoPage(hash);
- self.hash = hash;
- }
- }
- }
- }
-
- //get page number from hash tag, last element
- function getHashNum(){
- var hash = window.location.hash.split('/');
- if(hash.length > 1){
- return parseInt(hash[2])-1;
- }else{
- return '';
- }
- }
-
- //set the hash
- function updateHash(hash, opts){
- if(opts.hash){
- window.location.hash = "/page/" + hash;
- }
- }
-
- }
- //define empty array to hold API references
- $.fn.booklet.interfaces = [];
- //define default options
- $.fn.booklet.defaults = {
- name: null, // name of the booklet to display in the document title bar
- width: 600, // container width
- height: 400, // container height
- speed: 1000, // speed of the transition between pages
- direction: 'LTR', // direction of the overall content organization, default LTR, left to right, can be RTL for languages which read right to left
- startingPage: 0, // index of the first page to be displayed
- easing: 'easeInOutQuad', // easing method for complete transition
- easeIn: 'easeInQuad', // easing method for first half of transition
- easeOut: 'easeOutQuad', // easing method for second half of transition
-
- closed: false, // start with the book "closed", will add empty pages to beginning and end of book
- closedFrontTitle: null, // used with "closed", "menu" and "pageSelector", determines title of blank starting page
- closedFrontChapter: null, // used with "closed", "menu" and "chapterSelector", determines chapter name of blank starting page
- closedBackTitle: null, // used with "closed", "menu" and "pageSelector", determines chapter name of blank ending page
- closedBackChapter: null, // used with "closed", "menu" and "chapterSelector", determines chapter name of blank ending page
- covers: false, // used with "closed", makes first and last pages into covers, without page numbers (if enabled)
- autoCenter: false, // used with "closed", makes book position in center of container when closed
- pagePadding: 10, // padding for each page wrapper
- pageNumbers: true, // display page numbers on each page
-
- manual: true, // enables manual page turning, requires jQuery UI to function
-
- hovers: true, // enables preview pageturn hover animation, shows a small preview of previous or next page on hover
- overlays: true, // enables navigation using a page sized overlay, when enabled links inside the content will not be clickable
- tabs: false, // adds tabs along the top of the pages
- tabWidth: 60, // set the width of the tabs
- tabHeight: 20, // set the height of the tabs
- arrows: false, // adds arrows overlayed over the book edges
- arrowsHide: false, // auto hides arrows when controls are not hovered
- cursor: 'pointer', // cursor css setting for side bar areas
-
- hash: false, // enables navigation using a hash string, ex: #/page/1 for page 1, will affect all booklets with 'hash' enabled
- keyboard: true, // enables navigation with arrow keys (left: previous, right: next)
- next: null, // selector for element to use as click trigger for next page
- prev: null, // selector for element to use as click trigger for previous page
- auto: false, // enables automatic navigation, requires "delay"
- delay: 5000, // amount of time between automatic page flipping
- pause: null, // selector for element to use as click trigger for pausing auto page flipping
- play: null, // selector for element to use as click trigger for restarting auto page flipping
- menu: null, // selector for element to use as the menu area, required for 'pageSelector'
- pageSelector: false, // enables navigation with a dropdown menu of pages, requires 'menu'
- chapterSelector: false, // enables navigation with a dropdown menu of chapters, determined by the "rel" attribute, requires 'menu'
- shadows: true, // display shadows on page animations
- shadowTopFwdWidth: 166, // shadow width for top forward anim
- shadowTopBackWidth: 166, // shadow width for top back anim
- shadowBtmWidth: 50, // shadow width for bottom shadow
-
- before: function(){}, // callback invoked before each page turn animation
- after: function(){} // callback invoked after each page turn animation
- }
-
- })(jQuery);
|