| 
									
										
										
										
											2013-02-12 01:28:52 +04:00
										 |  |  | /********************************************************************** | 
					
						
							|  |  |  | * | 
					
						
							|  |  |  | * XXX add copyright and licence info... | 
					
						
							|  |  |  | * | 
					
						
							|  |  |  | **********************************************************************/ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-22 01:19:04 +04:00
										 |  |  | var SNAP_TO_PAGES_IN_RIBBON = false | 
					
						
							| 
									
										
										
										
											2013-02-27 16:49:47 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-22 01:19:04 +04:00
										 |  |  | var DEFAULT_TRANSITION_DURATION = 200 | 
					
						
							| 
									
										
										
										
											2013-02-27 16:49:47 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-22 01:19:04 +04:00
										 |  |  | var INNERTIA_SCALE = 0.25 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-12 02:23:29 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-27 16:49:47 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-12 01:28:52 +04:00
										 |  |  | /********************************************************** layout ***/ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-26 04:17:29 +04:00
										 |  |  | var toggleThemes = createCSSClassToggler('.chrome', [ | 
					
						
							|  |  |  | 	'light', | 
					
						
							|  |  |  | 	// this is the default (no class set)...
 | 
					
						
							|  |  |  | 	'none', | 
					
						
							|  |  |  | 	'dark' | 
					
						
							|  |  |  | ]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-12 01:28:52 +04:00
										 |  |  | var togglePageFitMode = createCSSClassToggler( | 
					
						
							| 
									
										
										
										
											2013-02-26 04:17:29 +04:00
										 |  |  | 		'.chrome',  | 
					
						
							| 
									
										
										
										
											2013-02-26 18:55:20 +04:00
										 |  |  | 		'page-fit-to-viewer',  | 
					
						
							| 
									
										
										
										
											2013-02-12 04:14:48 +04:00
										 |  |  | 		function(action){ | 
					
						
							|  |  |  | 			if(action == 'on'){ | 
					
						
							|  |  |  | 				var n = getPageNumber() | 
					
						
							|  |  |  | 				var scale = getMagazineScale() | 
					
						
							| 
									
										
										
										
											2013-02-27 15:26:02 +04:00
										 |  |  | 				$(RESIZABLE_PAGES) | 
					
						
							| 
									
										
										
										
											2013-02-26 22:50:52 +04:00
										 |  |  | 					.width($('.viewer').width() / scale) | 
					
						
							| 
									
										
										
										
											2013-02-12 04:14:48 +04:00
										 |  |  | 			} else { | 
					
						
							|  |  |  | 				var n = getPageNumber() | 
					
						
							| 
									
										
										
										
											2013-02-27 15:26:02 +04:00
										 |  |  | 				$(RESIZABLE_PAGES).width('') | 
					
						
							| 
									
										
										
										
											2013-02-12 04:14:48 +04:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2013-02-12 01:28:52 +04:00
										 |  |  | 			setCurrentPage(n) | 
					
						
							| 
									
										
										
										
											2013-02-12 04:14:48 +04:00
										 |  |  | 		}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var togglePageView = createCSSClassToggler( | 
					
						
							| 
									
										
										
										
											2013-02-26 04:17:29 +04:00
										 |  |  | 		'.chrome', | 
					
						
							| 
									
										
										
										
											2013-02-26 18:55:20 +04:00
										 |  |  | 		'full-page-view-mode', | 
					
						
							| 
									
										
										
										
											2013-02-12 04:14:48 +04:00
										 |  |  | 		function(action){ | 
					
						
							|  |  |  | 			var view = $('.viewer') | 
					
						
							|  |  |  | 			var page = $('.page') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-23 17:10:27 +04:00
										 |  |  | 			// XXX
 | 
					
						
							|  |  |  | 			setTransitionDuration($('.magazine'), 0) | 
					
						
							| 
									
										
										
										
											2013-02-26 04:17:29 +04:00
										 |  |  | 			var n = getPageNumber() | 
					
						
							| 
									
										
										
										
											2013-02-23 17:10:27 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-12 04:14:48 +04:00
										 |  |  | 			if(action == 'on'){ | 
					
						
							| 
									
										
										
										
											2013-02-23 17:10:27 +04:00
										 |  |  | 				var scale = getPageTargetScale(1).value | 
					
						
							| 
									
										
										
										
											2013-02-12 04:14:48 +04:00
										 |  |  | 				setMagazineScale(scale) | 
					
						
							| 
									
										
										
										
											2013-02-23 17:10:27 +04:00
										 |  |  | 				//unanimated($('.magazine, .viewer'), togglePageFitMode)('on')
 | 
					
						
							|  |  |  | 				togglePageFitMode('on') | 
					
						
							| 
									
										
										
										
											2013-02-12 04:14:48 +04:00
										 |  |  | 			} else { | 
					
						
							| 
									
										
										
										
											2013-02-23 17:10:27 +04:00
										 |  |  | 				//unanimated($('.magazine, .viewer'), togglePageFitMode)('off')
 | 
					
						
							|  |  |  | 				togglePageFitMode('off') | 
					
						
							|  |  |  | 				var scale = getPageTargetScale(PAGES_IN_RIBBON).value | 
					
						
							| 
									
										
										
										
											2013-02-12 04:14:48 +04:00
										 |  |  | 				setMagazineScale(scale) | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			// NOTE: can't disable transitions on this one because ScrollTo
 | 
					
						
							|  |  |  | 			// 		uses jQuery animation...
 | 
					
						
							| 
									
										
										
										
											2013-02-26 04:17:29 +04:00
										 |  |  | 			setCurrentPage(n) | 
					
						
							| 
									
										
										
										
											2013-02-12 04:14:48 +04:00
										 |  |  | 		}) | 
					
						
							| 
									
										
										
										
											2013-02-12 01:28:52 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-19 19:34:03 +04:00
										 |  |  | /************************************************** event handlers ***/ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-26 14:22:33 +04:00
										 |  |  | // Click
 | 
					
						
							|  |  |  | // 	- in full page do the default click, if clicked on other page, select
 | 
					
						
							|  |  |  | // 	- in ribbon, open clicked page in full mode
 | 
					
						
							| 
									
										
										
										
											2013-02-22 01:19:04 +04:00
										 |  |  | function handleClick(evt, data){ | 
					
						
							| 
									
										
										
										
											2013-02-26 00:25:01 +04:00
										 |  |  | 	var target = getPageNumber(data.orig_event.target) | 
					
						
							| 
									
										
										
										
											2013-02-22 01:19:04 +04:00
										 |  |  | 	if(target != -1){ | 
					
						
							|  |  |  | 		var mag = $('.magazine') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-26 00:25:01 +04:00
										 |  |  | 		if(togglePageView('?') == 'on'){ | 
					
						
							|  |  |  | 			setTransitionDuration(mag, DEFAULT_TRANSITION_DURATION) | 
					
						
							|  |  |  | 		} else { | 
					
						
							|  |  |  | 			togglePageView('on') | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		setCurrentPage(target) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		//setTransitionEasing(mag, 'ease')
 | 
					
						
							|  |  |  | 		setTransitionEasing(mag, 'cubic-bezier(0.33,0.66,0.66,1)') | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-26 14:22:33 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | // Long Click
 | 
					
						
							|  |  |  | // 	- in full page, go to ribbon
 | 
					
						
							|  |  |  | // 	- in ribbon, center clicked page
 | 
					
						
							| 
									
										
										
										
											2013-02-26 00:25:01 +04:00
										 |  |  | function handleLongClick(evt, data){ | 
					
						
							|  |  |  | 	var target = getPageNumber(data.orig_event.target) | 
					
						
							|  |  |  | 	if(target != -1){ | 
					
						
							|  |  |  | 		var mag = $('.magazine') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if(togglePageView('?') == 'on'){ | 
					
						
							|  |  |  | 			togglePageView('off') | 
					
						
							|  |  |  | 		} else { | 
					
						
							|  |  |  | 			setTransitionDuration(mag, DEFAULT_TRANSITION_DURATION) | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2013-02-22 01:19:04 +04:00
										 |  |  | 		setCurrentPage(target) | 
					
						
							| 
									
										
										
										
											2013-02-22 23:17:21 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-23 00:09:36 +04:00
										 |  |  | 		//setTransitionEasing(mag, 'ease')
 | 
					
						
							|  |  |  | 		setTransitionEasing(mag, 'cubic-bezier(0.33,0.66,0.66,1)') | 
					
						
							| 
									
										
										
										
											2013-02-22 01:19:04 +04:00
										 |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2013-02-21 21:30:56 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-26 14:22:33 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | // Swipe Left/Right
 | 
					
						
							|  |  |  | // 	- in full page, next/prev page select
 | 
					
						
							|  |  |  | // 	- in ribbon, kinetic scroll
 | 
					
						
							|  |  |  | // 	- with two fingers, select next/prev article
 | 
					
						
							| 
									
										
										
										
											2013-02-26 02:49:18 +04:00
										 |  |  | function makeSwipeHandler(actionA, actionB){ | 
					
						
							| 
									
										
										
										
											2013-02-22 01:19:04 +04:00
										 |  |  | 	return function(evt, data){ | 
					
						
							|  |  |  | 		// ribbon mode...
 | 
					
						
							| 
									
										
										
										
											2013-02-26 14:22:33 +04:00
										 |  |  | 		if(togglePageView('?') == 'off'){ | 
					
						
							| 
									
										
										
										
											2013-02-23 00:03:50 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-26 04:17:29 +04:00
										 |  |  | 			// article navigation...
 | 
					
						
							|  |  |  | 			if(data.touches >= 2){ | 
					
						
							|  |  |  | 				actionB($('.current.page')) | 
					
						
							|  |  |  | 				return | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-23 00:03:50 +04:00
										 |  |  | 			// this makes things snap...
 | 
					
						
							|  |  |  | 			if(SNAP_TO_PAGES_IN_RIBBON){ | 
					
						
							|  |  |  | 				setCurrentPage() | 
					
						
							|  |  |  | 				return | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-22 01:19:04 +04:00
										 |  |  | 			return handleScrollRelease(evt, data) | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		// full page view...
 | 
					
						
							|  |  |  | 		var mag = $('.magazine') | 
					
						
							| 
									
										
										
										
											2013-02-23 00:09:36 +04:00
										 |  |  | 		//setTransitionEasing(mag, 'ease-out')
 | 
					
						
							|  |  |  | 		setTransitionEasing(mag, 'cubic-bezier(0.33,0.66,0.66,1)') | 
					
						
							| 
									
										
										
										
											2013-02-22 01:19:04 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-26 03:29:06 +04:00
										 |  |  | 		if(data.touches >= 2){ | 
					
						
							|  |  |  | 			actionB($('.current.page')) | 
					
						
							| 
									
										
										
										
											2013-02-26 02:49:18 +04:00
										 |  |  | 		} else { | 
					
						
							|  |  |  | 			actionA($('.current.page')) | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2013-02-22 01:19:04 +04:00
										 |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2013-02-26 02:49:18 +04:00
										 |  |  | var handleSwipeLeft = makeSwipeHandler(prevPage, prevArticle) | 
					
						
							|  |  |  | var handleSwipeRight = makeSwipeHandler(nextPage, nextArticle) | 
					
						
							| 
									
										
										
										
											2013-02-22 01:19:04 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-26 14:22:33 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | // Scroll Release
 | 
					
						
							|  |  |  | // 	- check bounds and if out center first/last page
 | 
					
						
							|  |  |  | // 	- filter out "throw" speeds below threshold
 | 
					
						
							|  |  |  | // 	- do inertial scroll (within check bounds)
 | 
					
						
							|  |  |  | // 	- snap to pages
 | 
					
						
							|  |  |  | //
 | 
					
						
							| 
									
										
										
										
											2013-02-22 01:19:04 +04:00
										 |  |  | // NOTE: this will also handle swipeUp/swopeDown as we do not 
 | 
					
						
							|  |  |  | //		explicitly bind them...
 | 
					
						
							| 
									
										
										
										
											2013-02-26 14:22:33 +04:00
										 |  |  | // NOTE: at this point this ONLY handles horizontal scroll...
 | 
					
						
							| 
									
										
										
										
											2013-02-22 01:19:04 +04:00
										 |  |  | // XXX restore all the changed values...
 | 
					
						
							|  |  |  | function handleScrollRelease(evt, data){ | 
					
						
							|  |  |  | 	var speed = data.speed.x | 
					
						
							|  |  |  | 	var pages = $('.page') | 
					
						
							|  |  |  | 	var mag = $('.magazine') | 
					
						
							|  |  |  | 	// innertial scroll...
 | 
					
						
							|  |  |  | 	// XXX make this generic...
 | 
					
						
							|  |  |  | 	var t = DEFAULT_TRANSITION_DURATION * (1+Math.abs(speed)) | 
					
						
							| 
									
										
										
										
											2013-02-26 14:22:33 +04:00
										 |  |  | 	// XXX this is only horizontal at this point...
 | 
					
						
							| 
									
										
										
										
											2013-02-22 01:19:04 +04:00
										 |  |  | 	var at = getElementShift(mag).left | 
					
						
							|  |  |  | 	var to = (at + (t*speed*INNERTIA_SCALE)) | 
					
						
							|  |  |  | 	var first = getMagazineOffset(pages.first(), null, 'center') | 
					
						
							|  |  |  | 	var last = getMagazineOffset(pages.last(), null, 'center') | 
					
						
							| 
									
										
										
										
											2013-02-23 04:14:49 +04:00
										 |  |  | 	var easing | 
					
						
							| 
									
										
										
										
											2013-02-22 01:19:04 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// filter out really small speeds...
 | 
					
						
							|  |  |  | 	if(Math.abs(speed) > 0.5){ | 
					
						
							|  |  |  | 		// check bounds...
 | 
					
						
							|  |  |  | 		// NOTE: need to cut the distance and time if we are going the 
 | 
					
						
							|  |  |  | 		//		hit the bounds...
 | 
					
						
							|  |  |  | 		if(to > first){ | 
					
						
							|  |  |  | 			// trim the time proportionally...
 | 
					
						
							|  |  |  | 			var _t = t | 
					
						
							|  |  |  | 			t = Math.abs(t * ((at-first)/(at-to))) | 
					
						
							|  |  |  | 			to = first | 
					
						
							| 
									
										
										
										
											2013-02-23 04:14:49 +04:00
										 |  |  | 			//easing = 'linear'
 | 
					
						
							|  |  |  | 			easing = 'cubic-bezier(0.33,0.66,0.66,1)' | 
					
						
							| 
									
										
										
										
											2013-02-22 01:19:04 +04:00
										 |  |  | 		} else if(to < last){ | 
					
						
							|  |  |  | 			// trim the time proportionally...
 | 
					
						
							|  |  |  | 			var _t = t | 
					
						
							|  |  |  | 			t = Math.abs(t * ((at-last)/(at-to))) | 
					
						
							|  |  |  | 			to = last | 
					
						
							| 
									
										
										
										
											2013-02-23 04:14:49 +04:00
										 |  |  | 			//easing = 'linear'
 | 
					
						
							|  |  |  | 			easing = 'cubic-bezier(0.33,0.66,0.66,1)' | 
					
						
							| 
									
										
										
										
											2013-02-22 01:19:04 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		} else { | 
					
						
							| 
									
										
										
										
											2013-02-23 04:14:49 +04:00
										 |  |  | 			//easing = 'ease-out'
 | 
					
						
							|  |  |  | 			easing = 'cubic-bezier(0.33,0.66,0.66,1)' | 
					
						
							| 
									
										
										
										
											2013-02-22 01:19:04 +04:00
										 |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-25 18:02:18 +04:00
										 |  |  | 		animateElementTo(mag, to, t, easing, speed) | 
					
						
							| 
									
										
										
										
											2013-02-22 01:19:04 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// check scroll bounds...
 | 
					
						
							|  |  |  | 	// do not let the user scroll out of view...
 | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		if(at > first){ | 
					
						
							| 
									
										
										
										
											2013-02-23 04:14:49 +04:00
										 |  |  | 			//animateElementTo(mag, first, DEFAULT_TRANSITION_DURATION, 'ease-in')
 | 
					
						
							| 
									
										
										
										
											2013-02-26 22:50:52 +04:00
										 |  |  | 			animateElementTo(mag, first,  | 
					
						
							|  |  |  | 					DEFAULT_TRANSITION_DURATION,  | 
					
						
							|  |  |  | 					'cubic-bezier(0.33,0.66,0.66,1)') | 
					
						
							| 
									
										
										
										
											2013-02-22 01:19:04 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		} else if(at < last){ | 
					
						
							| 
									
										
										
										
											2013-02-23 04:14:49 +04:00
										 |  |  | 			//animateElementTo(mag, last, DEFAULT_TRANSITION_DURATION, 'ease-in')
 | 
					
						
							| 
									
										
										
										
											2013-02-26 22:50:52 +04:00
										 |  |  | 			animateElementTo(mag, last,  | 
					
						
							|  |  |  | 					DEFAULT_TRANSITION_DURATION,  | 
					
						
							|  |  |  | 					'cubic-bezier(0.33,0.66,0.66,1)') | 
					
						
							| 
									
										
										
										
											2013-02-22 01:19:04 +04:00
										 |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2013-02-21 21:30:56 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-12 01:28:52 +04:00
										 |  |  | /********************************************************* helpers ***/ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-19 19:34:03 +04:00
										 |  |  | // XXX there is something here that depends on scale that is either not 
 | 
					
						
							|  |  |  | // 		compensated, or is over compensated...
 | 
					
						
							|  |  |  | function getMagazineOffset(page, scale, align){ | 
					
						
							|  |  |  | 	if(page == null){ | 
					
						
							|  |  |  | 		page = $('.current.page') | 
					
						
							| 
									
										
										
										
											2013-02-25 23:37:28 +04:00
										 |  |  | 		// if no current page get the first...
 | 
					
						
							|  |  |  | 		if(page.length == 0){ | 
					
						
							|  |  |  | 			page = $('.page').first() | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2013-02-19 19:34:03 +04:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	if(scale == null){ | 
					
						
							|  |  |  | 		scale = getMagazineScale() | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	if(align == null){ | 
					
						
							|  |  |  | 		align = getPageAlign(page) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	var mag = $('.magazine') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// calculate the align offset...
 | 
					
						
							|  |  |  | 	if(align == 'left'){ | 
					
						
							|  |  |  | 		var offset = 0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	} else if(align == 'right'){ | 
					
						
							|  |  |  | 		var offset = $('.viewer').width() - page.width()*scale | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// center (default)
 | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		var offset = $('.viewer').width()/2 - (page.width()/2)*scale | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-20 04:37:47 +04:00
										 |  |  | 	// NOTE: this without scaling also represents the inner width of 
 | 
					
						
							|  |  |  | 	// 		the viewer...
 | 
					
						
							| 
									
										
										
										
											2013-02-19 19:34:03 +04:00
										 |  |  | 	var w = mag.outerWidth(true) | 
					
						
							|  |  |  | 	// XXX this depends on scale...
 | 
					
						
							|  |  |  | 	var pos = page.position().left//*scale
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-20 04:37:47 +04:00
										 |  |  | 	var l = 0 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-19 19:34:03 +04:00
										 |  |  | 	return -((w - w*scale)/2 + pos) + offset | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-12 01:28:52 +04:00
										 |  |  | function getPageNumber(page){ | 
					
						
							| 
									
										
										
										
											2013-02-26 01:27:31 +04:00
										 |  |  | 	// a page/element is given explicitly...
 | 
					
						
							| 
									
										
										
										
											2013-02-12 01:28:52 +04:00
										 |  |  | 	if(page != null){ | 
					
						
							| 
									
										
										
										
											2013-02-26 00:29:55 +04:00
										 |  |  | 		page = $(page) | 
					
						
							|  |  |  | 		if(!page.hasClass('page')){ | 
					
						
							|  |  |  | 			page = page.parents('.page') | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2013-02-26 00:25:01 +04:00
										 |  |  | 		return $('.page').index(page) | 
					
						
							| 
									
										
										
										
											2013-02-12 01:28:52 +04:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2013-02-12 18:50:40 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-26 14:22:33 +04:00
										 |  |  | 	// current page index...
 | 
					
						
							|  |  |  | 	if(togglePageView('?') == 'on'){ | 
					
						
							| 
									
										
										
										
											2013-02-12 02:23:29 +04:00
										 |  |  | 		return $('.page').index($('.current.page')) | 
					
						
							| 
									
										
										
										
											2013-02-12 18:50:40 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-19 20:08:05 +04:00
										 |  |  | 	// get the closest page to view center... 
 | 
					
						
							|  |  |  | 	// NOTE: this ignores page aligns and only gets the page who's center 
 | 
					
						
							|  |  |  | 	// 		is closer to view's center
 | 
					
						
							| 
									
										
										
										
											2013-02-12 02:23:29 +04:00
										 |  |  | 	} else { | 
					
						
							| 
									
										
										
										
											2013-02-19 20:08:05 +04:00
										 |  |  | 		var scale = getMagazineScale() | 
					
						
							| 
									
										
										
										
											2013-02-14 05:47:25 +04:00
										 |  |  | 		var o = -$($('.magazine')[0]).offset().left - $('.viewer').offset().left | 
					
						
							| 
									
										
										
										
											2013-02-12 02:23:29 +04:00
										 |  |  | 		var W = $('.viewer').width() | 
					
						
							|  |  |  | 		var cur = -1 | 
					
						
							|  |  |  | 		var res = $('.page').map(function(i, e){ | 
					
						
							|  |  |  | 			e = $(e) | 
					
						
							|  |  |  | 			var l = e.position().left | 
					
						
							|  |  |  | 			var w = e.width()*scale | 
					
						
							| 
									
										
										
										
											2013-02-14 05:47:25 +04:00
										 |  |  | 			return Math.abs((l+(w/2)) - (o+(W/2))) | 
					
						
							| 
									
										
										
										
											2013-02-19 19:34:03 +04:00
										 |  |  | 		}).toArray() | 
					
						
							|  |  |  | 		cur = res.indexOf(Math.min.apply(Math, res)) | 
					
						
							| 
									
										
										
										
											2013-02-12 02:23:29 +04:00
										 |  |  | 		return cur | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2013-02-12 01:28:52 +04:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-12 03:45:39 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-12 03:05:20 +04:00
										 |  |  | function getMagazineScale(){ | 
					
						
							|  |  |  | 	return getElementScale($('.magazine')) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | function setMagazineScale(scale){ | 
					
						
							|  |  |  | 	var mag = $('.magazine') | 
					
						
							| 
									
										
										
										
											2013-02-19 19:34:03 +04:00
										 |  |  | 	var cur = $('.current.page') | 
					
						
							| 
									
										
										
										
											2013-02-25 23:37:28 +04:00
										 |  |  | 	if(cur.length == 0){ | 
					
						
							|  |  |  | 		cur = $('.page').first() | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2013-02-19 19:34:03 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-19 20:08:05 +04:00
										 |  |  | 	// center-align ribbon view pages...
 | 
					
						
							| 
									
										
										
										
											2013-02-26 14:22:33 +04:00
										 |  |  | 	var align = togglePageView('?') == 'off' ? 'center' : null | 
					
						
							| 
									
										
										
										
											2013-02-19 20:08:05 +04:00
										 |  |  | 	var left = getMagazineOffset(cur, scale, align) | 
					
						
							| 
									
										
										
										
											2013-02-19 19:34:03 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	setElementTransform(mag, left, scale) | 
					
						
							| 
									
										
										
										
											2013-02-19 20:08:05 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	return mag | 
					
						
							| 
									
										
										
										
											2013-02-12 03:05:20 +04:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-12 01:28:52 +04:00
										 |  |  | /********************************************************* actions ***/ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-26 22:50:52 +04:00
										 |  |  | function setCurrentPage(n, use_transitions){ | 
					
						
							| 
									
										
										
										
											2013-02-12 01:28:52 +04:00
										 |  |  | 	if(n == null){ | 
					
						
							|  |  |  | 		n = getPageNumber() | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2013-02-26 02:49:18 +04:00
										 |  |  | 	if(typeof(n) != typeof(3)){ | 
					
						
							|  |  |  | 		n = getPageNumber(n) | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2013-02-12 01:28:52 +04:00
										 |  |  | 	var l = $('.page').length | 
					
						
							| 
									
										
										
										
											2013-02-19 20:48:39 +04:00
										 |  |  | 	// normalize the number...
 | 
					
						
							| 
									
										
										
										
											2013-02-12 01:28:52 +04:00
										 |  |  | 	n = n < 0 ? l - n : n | 
					
						
							|  |  |  | 	n = n < -l ? 0 : n | 
					
						
							|  |  |  | 	n = n >= l ? l - 1 : n | 
					
						
							| 
									
										
										
										
											2013-02-26 22:50:52 +04:00
										 |  |  | 	use_transitions = use_transitions != null ?  | 
					
						
							|  |  |  | 						use_transitions  | 
					
						
							|  |  |  | 						: USE_TRANSITIONS_FOR_ANIMATION | 
					
						
							| 
									
										
										
										
											2013-02-19 19:34:03 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-12 01:28:52 +04:00
										 |  |  | 	$('.current.page').removeClass('current') | 
					
						
							|  |  |  | 	$($('.page')[n]).addClass('current') | 
					
						
							| 
									
										
										
										
											2013-02-19 19:34:03 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-12 01:28:52 +04:00
										 |  |  | 	var cur = $('.current.page') | 
					
						
							| 
									
										
										
										
											2013-02-19 19:34:03 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-19 20:08:05 +04:00
										 |  |  | 	// center-align pages in ribbon view...
 | 
					
						
							| 
									
										
										
										
											2013-02-26 14:22:33 +04:00
										 |  |  | 	var align = togglePageView('?') == 'off' ? 'center' : null | 
					
						
							| 
									
										
										
										
											2013-02-19 20:08:05 +04:00
										 |  |  | 	var left = getMagazineOffset(cur, null, align) | 
					
						
							| 
									
										
										
										
											2013-02-19 19:34:03 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-26 22:50:52 +04:00
										 |  |  | 	if(use_transitions){ | 
					
						
							| 
									
										
										
										
											2013-02-25 18:48:46 +04:00
										 |  |  | 		setElementTransform($('.magazine'), left) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	} else { | 
					
						
							| 
									
										
										
										
											2013-02-25 23:37:28 +04:00
										 |  |  | 		animateElementTo($('.magazine'), left) | 
					
						
							| 
									
										
										
										
											2013-02-25 18:48:46 +04:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2013-02-19 19:34:03 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-26 04:17:29 +04:00
										 |  |  | 	$('.viewer').trigger('pageChanged', n) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-13 01:05:26 +04:00
										 |  |  | 	return cur | 
					
						
							| 
									
										
										
										
											2013-02-12 01:28:52 +04:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-19 05:35:42 +04:00
										 |  |  | function nextPage(page){ | 
					
						
							| 
									
										
										
										
											2013-02-25 23:37:28 +04:00
										 |  |  | 	// XXX is this the right place for this?
 | 
					
						
							|  |  |  | 	setTransitionDuration($('.magazine'), DEFAULT_TRANSITION_DURATION) | 
					
						
							| 
									
										
										
										
											2013-02-19 05:35:42 +04:00
										 |  |  | 	setCurrentPage(getPageNumber(page)+1) | 
					
						
							| 
									
										
										
										
											2013-02-12 01:28:52 +04:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2013-02-19 05:35:42 +04:00
										 |  |  | function prevPage(page){ | 
					
						
							| 
									
										
										
										
											2013-02-25 23:37:28 +04:00
										 |  |  | 	// XXX is this the right place for this?
 | 
					
						
							|  |  |  | 	setTransitionDuration($('.magazine'), DEFAULT_TRANSITION_DURATION) | 
					
						
							| 
									
										
										
										
											2013-02-19 05:35:42 +04:00
										 |  |  | 	var n = getPageNumber(page)-1 | 
					
						
							| 
									
										
										
										
											2013-02-12 01:28:52 +04:00
										 |  |  | 	n = n < 0 ? 0 : n | 
					
						
							|  |  |  | 	setCurrentPage(n) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function firstPage(){ | 
					
						
							| 
									
										
										
										
											2013-02-25 23:37:28 +04:00
										 |  |  | 	// XXX is this the right place for this?
 | 
					
						
							|  |  |  | 	setTransitionDuration($('.magazine'), DEFAULT_TRANSITION_DURATION) | 
					
						
							| 
									
										
										
										
											2013-02-12 01:28:52 +04:00
										 |  |  | 	setCurrentPage(0) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | function lastPage(){ | 
					
						
							| 
									
										
										
										
											2013-02-25 23:37:28 +04:00
										 |  |  | 	// XXX is this the right place for this?
 | 
					
						
							|  |  |  | 	setTransitionDuration($('.magazine'), DEFAULT_TRANSITION_DURATION) | 
					
						
							| 
									
										
										
										
											2013-02-12 01:28:52 +04:00
										 |  |  | 	setCurrentPage(-1) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-26 14:22:33 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | /********************************************************************** | 
					
						
							|  |  |  | * vim:set ts=4 sw=4 :												 */ |