| 
									
										
										
										
											2012-06-17 16:46:46 +04:00
										 |  |  | // XXX need a uniform way to address images (filename?)
 | 
					
						
							| 
									
										
										
										
											2012-08-04 20:26:38 +04:00
										 |  |  | /******************************************* Setup Data and Globals **/ | 
					
						
							| 
									
										
										
										
											2012-06-17 16:46:46 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-04 20:26:38 +04:00
										 |  |  | // key configuration...
 | 
					
						
							|  |  |  | // XXX need to make this handle modifiers gracefully...
 | 
					
						
							|  |  |  | var keys = { | 
					
						
							|  |  |  | 	toggleHelp: [72], | 
					
						
							|  |  |  | 	toggleSingleImageMode: [70, 13],	// ???, Enter
 | 
					
						
							| 
									
										
										
										
											2012-08-04 21:34:59 +04:00
										 |  |  | 	toggleSingleImageModeTransitions: [65],	// a
 | 
					
						
							| 
									
										
										
										
											2012-08-04 20:26:38 +04:00
										 |  |  | 	close: [27, 88, 67], | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// zooming...
 | 
					
						
							|  |  |  | 	zoomIn: [187], | 
					
						
							|  |  |  | 	zoomOut: [189], | 
					
						
							|  |  |  | 	// zoom presets...
 | 
					
						
							|  |  |  | 	fitOne: [49], | 
					
						
							|  |  |  | 	fitThree: [51], | 
					
						
							|  |  |  | 	// XXX is this relivant?
 | 
					
						
							|  |  |  | 	zoomOriginal: [48], | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	first: [36], | 
					
						
							|  |  |  | 	last: [35], | 
					
						
							|  |  |  | 	previous: [37, 80, 188, 8], | 
					
						
							|  |  |  | 	next: [39, 78, 190, 32], | 
					
						
							|  |  |  | 	// these work with ctrl and shift modifiers...
 | 
					
						
							|  |  |  | 	down: [40], | 
					
						
							|  |  |  | 	up: [38], | 
					
						
							|  |  |  | 	// these work with ctrl modifier...
 | 
					
						
							|  |  |  | 	promote: [45], | 
					
						
							|  |  |  | 	demote: [46], | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// XXX should these be s-up, s-down, ... ??
 | 
					
						
							|  |  |  | 	moveViewUp: [75],				//	k
 | 
					
						
							|  |  |  | 	moveViewDown: [74],				//	j
 | 
					
						
							|  |  |  | 	moveViewLeft: [72],				//	h
 | 
					
						
							|  |  |  | 	moveViewRight: [76],			//	l
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// keys to be ignored...
 | 
					
						
							|  |  |  | 	ignore: [16, 17, 18], | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	helpShowOnUnknownKey: true | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // this sets the zooming factor used in manual zooming...
 | 
					
						
							|  |  |  | var ZOOM_FACTOR = 2 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // sets the amoun of move when a key is pressed...
 | 
					
						
							|  |  |  | var MOVE_DELTA = 50 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /************************************************** Setup Functions **/ | 
					
						
							|  |  |  | // XXX is this a correct place for these?
 | 
					
						
							| 
									
										
										
										
											2012-06-17 16:46:46 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | function setDefaultInitialState(){ | 
					
						
							| 
									
										
										
										
											2012-07-24 14:55:10 +04:00
										 |  |  | 	if($('.current.ribbon').length == 0){ | 
					
						
							|  |  |  | 		$('.ribbon').first().addClass('current') | 
					
						
							| 
									
										
										
										
											2012-06-08 18:30:54 +04:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2012-07-24 14:55:10 +04:00
										 |  |  | 	if($('.current.image').length == 0){ | 
					
						
							|  |  |  | 		$('.current.ribbon').children('.image').first().addClass('current') | 
					
						
							| 
									
										
										
										
											2012-06-08 18:30:54 +04:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2012-06-17 16:46:46 +04:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2012-06-08 18:30:54 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-06-17 16:46:46 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function setupKeyboard(){ | 
					
						
							| 
									
										
										
										
											2012-06-08 18:30:54 +04:00
										 |  |  | 	$(document) | 
					
						
							|  |  |  | 		.keydown(handleKeys) | 
					
						
							| 
									
										
										
										
											2012-06-17 16:46:46 +04:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function setupGestures(){ | 
					
						
							| 
									
										
										
										
											2012-06-08 18:30:54 +04:00
										 |  |  | 	$('.viewer') | 
					
						
							| 
									
										
										
										
											2012-06-13 15:16:43 +04:00
										 |  |  | 		.swipe({ | 
					
						
							|  |  |  | 			swipeLeft: nextImage, | 
					
						
							|  |  |  | 			swipeRight: prevImage, | 
					
						
							| 
									
										
										
										
											2012-06-16 21:52:23 +04:00
										 |  |  | 			swipeUp: shiftImageUp, | 
					
						
							| 
									
										
										
										
											2012-08-04 20:26:38 +04:00
										 |  |  | 			swipeDown: shiftImageDown | 
					
						
							| 
									
										
										
										
											2012-06-13 15:16:43 +04:00
										 |  |  | 		}) | 
					
						
							| 
									
										
										
										
											2012-06-17 16:46:46 +04:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function setupControlElements(){ | 
					
						
							|  |  |  | 	// images...
 | 
					
						
							| 
									
										
										
										
											2012-07-24 15:38:54 +04:00
										 |  |  | 	$(".image").click(setCurrentImage) | 
					
						
							| 
									
										
										
										
											2012-06-08 18:30:54 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-06-17 16:46:46 +04:00
										 |  |  | 	// buttons...
 | 
					
						
							| 
									
										
										
										
											2012-08-04 16:07:08 +04:00
										 |  |  | 	$('.screen-button.next-image').click(nextImage) | 
					
						
							|  |  |  | 	$('.screen-button.prev-image').click(prevImage) | 
					
						
							|  |  |  | 	$('.screen-button.demote').click(shiftImageUp) | 
					
						
							|  |  |  | 	$('.screen-button.promote').click(shiftImageDown) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	$('.screen-button.zoom-in').click(function(){scaleContainerBy(ZOOM_FACTOR)}) | 
					
						
							|  |  |  | 	$('.screen-button.zoom-out').click(function(){scaleContainerBy(1/ZOOM_FACTOR)}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	$('.screen-button.toggle-wide').click(toggleWideView) | 
					
						
							|  |  |  | 	$('.screen-button.toggle-single').click(toggleSingleImageMode) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	$('.screen-button.fit-three').click(fitThreeImages) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	$('.screen-button.settings').click(function(){alert('not implemented yet...')}) | 
					
						
							| 
									
										
										
										
											2012-06-17 16:46:46 +04:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2012-06-08 18:30:54 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-06-16 21:52:23 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-06-08 18:30:54 +04:00
										 |  |  | function loadImages(json){ | 
					
						
							|  |  |  | 	var images = json.images | 
					
						
							|  |  |  | 	var ribbon = $('.ribbon').last() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	$('.image').remove() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	for(var i = 0; i < images.length; i++){ | 
					
						
							|  |  |  | 		$('<div class="image"></div>') | 
					
						
							|  |  |  | 			.css({ 'background-image': 'url('+images[i]+')' }) | 
					
						
							| 
									
										
										
										
											2012-07-03 03:38:28 +04:00
										 |  |  | 			// set a unique id for each image...
 | 
					
						
							| 
									
										
										
										
											2012-07-14 00:00:16 +04:00
										 |  |  | 			.attr({'id': i}) | 
					
						
							| 
									
										
										
										
											2012-07-24 15:38:54 +04:00
										 |  |  | 			.click(setCurrentImage) | 
					
						
							| 
									
										
										
										
											2012-06-08 18:30:54 +04:00
										 |  |  | 			.appendTo(ribbon) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	ribbon.children().first().click() | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-06-16 21:52:23 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-06-17 16:46:46 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | /*************************************************** Event Handlers **/ | 
					
						
							| 
									
										
										
										
											2012-08-04 20:26:38 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-24 15:38:54 +04:00
										 |  |  | function setCurrentImage(){ | 
					
						
							|  |  |  | 	// set classes...
 | 
					
						
							|  |  |  | 	$('.current').removeClass('current') | 
					
						
							|  |  |  | 	$(this) | 
					
						
							|  |  |  | 		.addClass('current') | 
					
						
							|  |  |  | 		.parents('.ribbon') | 
					
						
							|  |  |  | 			.addClass('current') | 
					
						
							|  |  |  | 	// position the field and ribbons...
 | 
					
						
							|  |  |  | 	centerSquare() | 
					
						
							| 
									
										
										
										
											2012-07-31 17:41:54 +04:00
										 |  |  | 	alignRibbons() | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-04 20:26:38 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-04 19:15:35 +04:00
										 |  |  | function clickAfterTransitionsDone(img){ | 
					
						
							|  |  |  | 	if(img == null){ | 
					
						
							|  |  |  | 		img = $('.current.image') | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	$('.viewer') | 
					
						
							|  |  |  | 		.one("webkitTransitionEnd oTransitionEnd msTransitionEnd transitionend", function(){ | 
					
						
							|  |  |  | 			img.click() | 
					
						
							|  |  |  | 			return true | 
					
						
							|  |  |  | 		}) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-04 20:26:38 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-31 17:41:54 +04:00
										 |  |  | // center other ribbons relative to current image...
 | 
					
						
							| 
									
										
										
										
											2012-08-04 20:26:38 +04:00
										 |  |  | // NOTE: only two ribbons are positioned at this point...
 | 
					
						
							| 
									
										
										
										
											2012-07-31 17:41:54 +04:00
										 |  |  | function alignRibbons(){ | 
					
						
							| 
									
										
										
										
											2012-08-04 18:57:54 +04:00
										 |  |  | 	// XXX might be good to move this to a more generic location...
 | 
					
						
							| 
									
										
										
										
											2012-07-31 17:38:50 +04:00
										 |  |  | 	var id = $('.current.image').attr('id') | 
					
						
							|  |  |  | 	var directions = ['prev', 'next'] | 
					
						
							|  |  |  | 	for(var i in directions){ | 
					
						
							|  |  |  | 		var ribbon = $('.current.ribbon')[directions[i]]('.ribbon') | 
					
						
							|  |  |  | 		if(ribbon.length == 1){ | 
					
						
							|  |  |  | 			var img = getImageBefore(id, ribbon) | 
					
						
							|  |  |  | 			if(img != null){ | 
					
						
							|  |  |  | 				alignRibbon(img, 'before') | 
					
						
							|  |  |  | 			} else { | 
					
						
							|  |  |  | 				// there are no images before...
 | 
					
						
							|  |  |  | 				alignRibbon(ribbon.children('.image').first(), 'after') | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2012-07-24 15:38:54 +04:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-06-17 16:46:46 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-06-17 16:51:02 +04:00
										 |  |  | // XXX revise...
 | 
					
						
							| 
									
										
										
										
											2012-06-08 18:30:54 +04:00
										 |  |  | function handleKeys(event){ | 
					
						
							|  |  |  | 	var code = event.keyCode, fn = $.inArray; | 
					
						
							| 
									
										
										
										
											2012-07-31 15:25:05 +04:00
										 |  |  | 	var _ = (fn(code, keys.close) >= 0) ? function(){}() | 
					
						
							|  |  |  | 		: (fn(code, keys.first) >= 0) ? firstImage() | 
					
						
							|  |  |  | 		: (fn(code, keys.next) >= 0) ? nextImage() | 
					
						
							|  |  |  | 		: (fn(code, keys.previous) >= 0) ? prevImage() | 
					
						
							|  |  |  | 		: (fn(code, keys.last) >= 0) ? lastImage() | 
					
						
							|  |  |  | 		: (fn(code, keys.promote) >= 0) ? function(){ | 
					
						
							| 
									
										
										
										
											2012-06-08 20:41:14 +04:00
										 |  |  | 			if(event.ctrlKey){ | 
					
						
							| 
									
										
										
										
											2012-06-16 21:40:36 +04:00
										 |  |  | 				createRibbon('next') | 
					
						
							| 
									
										
										
										
											2012-06-08 20:41:14 +04:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2012-06-16 21:52:23 +04:00
										 |  |  | 			shiftImageDown() | 
					
						
							| 
									
										
										
										
											2012-06-08 20:41:14 +04:00
										 |  |  | 		}() | 
					
						
							| 
									
										
										
										
											2012-07-31 15:25:05 +04:00
										 |  |  | 		: (fn(code, keys.demote) >= 0) ? function(){ | 
					
						
							| 
									
										
										
										
											2012-06-08 20:41:14 +04:00
										 |  |  | 			if(event.ctrlKey){ | 
					
						
							| 
									
										
										
										
											2012-06-16 21:40:36 +04:00
										 |  |  | 				createRibbon('prev') | 
					
						
							| 
									
										
										
										
											2012-06-08 20:41:14 +04:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2012-06-16 21:52:23 +04:00
										 |  |  | 			shiftImageUp() | 
					
						
							| 
									
										
										
										
											2012-06-08 20:41:14 +04:00
										 |  |  | 		}() | 
					
						
							| 
									
										
										
										
											2012-07-31 15:25:05 +04:00
										 |  |  | 		: (fn(code, keys.down) >= 0) ? function(){ | 
					
						
							| 
									
										
										
										
											2012-06-08 18:30:54 +04:00
										 |  |  | 			if(event.shiftKey){ | 
					
						
							|  |  |  | 				if(event.ctrlKey){ | 
					
						
							| 
									
										
										
										
											2012-06-16 21:40:36 +04:00
										 |  |  | 					createRibbon('next') | 
					
						
							| 
									
										
										
										
											2012-06-08 18:30:54 +04:00
										 |  |  | 				} | 
					
						
							| 
									
										
										
										
											2012-06-16 21:52:23 +04:00
										 |  |  | 				shiftImageDown() | 
					
						
							| 
									
										
										
										
											2012-06-08 18:30:54 +04:00
										 |  |  | 			} else { | 
					
						
							|  |  |  | 				focusBelowRibbon() | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		}() | 
					
						
							| 
									
										
										
										
											2012-07-31 15:25:05 +04:00
										 |  |  | 		: (fn(code, keys.up) >= 0) ? function(){ | 
					
						
							| 
									
										
										
										
											2012-06-08 18:30:54 +04:00
										 |  |  | 			if(event.shiftKey){ | 
					
						
							|  |  |  | 				if(event.ctrlKey){ | 
					
						
							| 
									
										
										
										
											2012-06-16 21:40:36 +04:00
										 |  |  | 					createRibbon('prev') | 
					
						
							| 
									
										
										
										
											2012-06-08 18:30:54 +04:00
										 |  |  | 				} | 
					
						
							| 
									
										
										
										
											2012-06-16 21:52:23 +04:00
										 |  |  | 				shiftImageUp() | 
					
						
							| 
									
										
										
										
											2012-06-08 18:30:54 +04:00
										 |  |  | 			} else { | 
					
						
							|  |  |  | 				focusAboveRibbon() | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		}() | 
					
						
							| 
									
										
										
										
											2012-07-31 15:25:05 +04:00
										 |  |  | 		// zooming...
 | 
					
						
							| 
									
										
										
										
											2012-08-04 14:59:54 +04:00
										 |  |  | 		: (fn(code, keys.zoomIn) >= 0) ? scaleContainerBy(ZOOM_FACTOR) | 
					
						
							|  |  |  | 		: (fn(code, keys.zoomOut) >= 0) ? scaleContainerBy(1/ZOOM_FACTOR) | 
					
						
							| 
									
										
										
										
											2012-07-31 15:25:05 +04:00
										 |  |  | 		// zoom presets...
 | 
					
						
							| 
									
										
										
										
											2012-08-04 14:59:54 +04:00
										 |  |  | 		: (fn(code, keys.zoomOriginal) >= 0) ? setContainerScale(1) | 
					
						
							| 
									
										
										
										
											2012-07-31 15:25:05 +04:00
										 |  |  | 		: (fn(code, keys.fitOne) >= 0) ? fitImage() | 
					
						
							|  |  |  | 		: (fn(code, keys.fitThree) >= 0) ? fitThreeImages() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-02 17:54:40 +04:00
										 |  |  | 		// moving view...
 | 
					
						
							|  |  |  | 		: (fn(code, keys.moveViewUp) >= 0) ? moveViewUp() | 
					
						
							|  |  |  | 		: (fn(code, keys.moveViewDown) >= 0) ? moveViewDown() | 
					
						
							|  |  |  | 		: (fn(code, keys.moveViewLeft) >= 0) ? moveViewLeft() | 
					
						
							|  |  |  | 		: (fn(code, keys.moveViewRight) >= 0) ? moveViewRight() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-04 14:59:54 +04:00
										 |  |  | 		: (fn(code, keys.toggleSingleImageMode) >= 0) ? toggleSingleImageMode() | 
					
						
							| 
									
										
										
										
											2012-08-04 21:34:59 +04:00
										 |  |  | 		: (fn(code, keys.toggleSingleImageModeTransitions) >= 0) ? toggleSingleImageModeTransitions() | 
					
						
							| 
									
										
										
										
											2012-07-31 15:25:05 +04:00
										 |  |  | 		: (fn(code, keys.ignore) >= 0) ? false | 
					
						
							| 
									
										
										
										
											2012-06-08 18:30:54 +04:00
										 |  |  | 		// XXX
 | 
					
						
							|  |  |  | 		: (keys.helpShowOnUnknownKey) ? function(){alert(code)}() | 
					
						
							|  |  |  | 		: false; | 
					
						
							|  |  |  | 	return false; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-06-16 21:52:23 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-06-17 16:46:46 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | /************************************************************ Modes **/ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-06-16 22:12:50 +04:00
										 |  |  | // mode switchers...
 | 
					
						
							|  |  |  | function unsetViewerMode(mode){ | 
					
						
							|  |  |  | 	$('.' + mode) | 
					
						
							|  |  |  | 		.removeClass(mode) | 
					
						
							| 
									
										
										
										
											2012-08-04 19:15:35 +04:00
										 |  |  | 	clickAfterTransitionsDone() | 
					
						
							| 
									
										
										
										
											2012-06-08 18:30:54 +04:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2012-08-04 20:26:38 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-06-16 22:12:50 +04:00
										 |  |  | function setViewerMode(mode){ | 
					
						
							|  |  |  | 	$('.viewer').not('.' + mode) | 
					
						
							|  |  |  | 		.addClass(mode) | 
					
						
							| 
									
										
										
										
											2012-08-04 19:15:35 +04:00
										 |  |  | 	clickAfterTransitionsDone() | 
					
						
							| 
									
										
										
										
											2012-06-08 18:30:54 +04:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2012-06-16 22:12:50 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-06-17 16:46:46 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-06-16 22:12:50 +04:00
										 |  |  | // ribbon/single view modes...
 | 
					
						
							| 
									
										
										
										
											2012-08-04 20:26:38 +04:00
										 |  |  | // global: stores the scale before we went into single image mode...
 | 
					
						
							|  |  |  | // XXX HACK
 | 
					
						
							| 
									
										
										
										
											2012-08-04 14:59:54 +04:00
										 |  |  | var ORIGINAL_FIELD_SCALE = 1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function toggleSingleImageMode(){ | 
					
						
							| 
									
										
										
										
											2012-06-08 18:30:54 +04:00
										 |  |  | 	if($('.single-image-mode').length > 0){ | 
					
						
							| 
									
										
										
										
											2012-06-16 22:12:50 +04:00
										 |  |  | 		unsetViewerMode('single-image-mode') | 
					
						
							| 
									
										
										
										
											2012-08-04 14:59:54 +04:00
										 |  |  | 		setContainerScale(ORIGINAL_FIELD_SCALE) | 
					
						
							| 
									
										
										
										
											2012-06-08 18:30:54 +04:00
										 |  |  | 	} else { | 
					
						
							| 
									
										
										
										
											2012-06-16 22:12:50 +04:00
										 |  |  | 		setViewerMode('single-image-mode') | 
					
						
							| 
									
										
										
										
											2012-08-04 14:59:54 +04:00
										 |  |  | 		ORIGINAL_FIELD_SCALE = getElementScale($('.field')) | 
					
						
							|  |  |  | 		fitImage() | 
					
						
							| 
									
										
										
										
											2012-06-08 18:30:54 +04:00
										 |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-06-16 21:52:23 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-06-16 22:12:50 +04:00
										 |  |  | // wide view mode toggle...
 | 
					
						
							| 
									
										
										
										
											2012-06-08 18:30:54 +04:00
										 |  |  | function toggleWideView(){ | 
					
						
							|  |  |  | 	if($('.wide-view-mode').length > 0){ | 
					
						
							| 
									
										
										
										
											2012-08-04 16:07:08 +04:00
										 |  |  | 		setContainerScale(ORIGINAL_FIELD_SCALE) | 
					
						
							| 
									
										
										
										
											2012-08-01 01:37:58 +04:00
										 |  |  | 		$('.viewer').removeClass('wide-view-mode') | 
					
						
							|  |  |  | 	} else { | 
					
						
							| 
									
										
										
										
											2012-08-04 16:07:08 +04:00
										 |  |  | 		ORIGINAL_FIELD_SCALE = getElementScale($('.field')) | 
					
						
							| 
									
										
										
										
											2012-08-04 14:59:54 +04:00
										 |  |  | 		setContainerScale(0.1) | 
					
						
							| 
									
										
										
										
											2012-08-01 01:37:58 +04:00
										 |  |  | 		$('.viewer').addClass('wide-view-mode') | 
					
						
							| 
									
										
										
										
											2012-06-08 18:30:54 +04:00
										 |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-06-16 21:52:23 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-06-17 16:46:46 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-02 17:54:40 +04:00
										 |  |  | /********************************************************* Movement **/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // XXX for some odd reason these are not liner... something to do with origin?
 | 
					
						
							| 
									
										
										
										
											2012-08-04 20:26:38 +04:00
										 |  |  | // XXX virtually identical, see of can be merged...
 | 
					
						
							| 
									
										
										
										
											2012-08-02 17:54:40 +04:00
										 |  |  | function moveViewUp(){ | 
					
						
							|  |  |  | 	var t = parseInt($('.field').css('top')) | 
					
						
							|  |  |  | 	$('.field').css({'top': t-(MOVE_DELTA)}) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | function moveViewDown(){ | 
					
						
							|  |  |  | 	var t = parseInt($('.field').css('top')) | 
					
						
							|  |  |  | 	$('.field').css({'top': t+(MOVE_DELTA)}) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | function moveViewLeft(){ | 
					
						
							|  |  |  | 	var l = parseInt($('.field').css('left')) | 
					
						
							|  |  |  | 	$('.field').css({'left': l-(MOVE_DELTA)}) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | function moveViewRight(){ | 
					
						
							|  |  |  | 	var l = parseInt($('.field').css('left')) | 
					
						
							|  |  |  | 	$('.field').css({'left': l+(MOVE_DELTA)}) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-04 20:26:38 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-06-17 16:46:46 +04:00
										 |  |  | /******************************************************* Navigation **/ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-06-08 18:30:54 +04:00
										 |  |  | // basic navigation...
 | 
					
						
							|  |  |  | function firstImage(){ | 
					
						
							| 
									
										
										
										
											2012-07-24 14:55:10 +04:00
										 |  |  | 	$('.current.ribbon').children('.image').first().click() | 
					
						
							| 
									
										
										
										
											2012-06-08 18:30:54 +04:00
										 |  |  | } | 
					
						
							|  |  |  | function prevImage(){ | 
					
						
							| 
									
										
										
										
											2012-07-24 14:55:10 +04:00
										 |  |  | 	$('.current.image').prev('.image').click() | 
					
						
							| 
									
										
										
										
											2012-06-08 18:30:54 +04:00
										 |  |  | } | 
					
						
							|  |  |  | function nextImage(){ | 
					
						
							| 
									
										
										
										
											2012-07-24 14:55:10 +04:00
										 |  |  | 	$('.current.image').next('.image').click() | 
					
						
							| 
									
										
										
										
											2012-06-08 18:30:54 +04:00
										 |  |  | } | 
					
						
							|  |  |  | function lastImage(){ | 
					
						
							| 
									
										
										
										
											2012-07-24 14:55:10 +04:00
										 |  |  | 	$('.current.ribbon').children('.image').last().click() | 
					
						
							| 
									
										
										
										
											2012-06-08 18:30:54 +04:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2012-07-14 00:00:16 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-04 18:57:54 +04:00
										 |  |  | // XXX add skip N images back and forth handlers...
 | 
					
						
							| 
									
										
										
										
											2012-08-04 20:26:38 +04:00
										 |  |  | // XXX
 | 
					
						
							| 
									
										
										
										
											2012-08-04 18:57:54 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-02 17:54:40 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-14 00:00:16 +04:00
										 |  |  | function focusRibbon(direction){ | 
					
						
							| 
									
										
										
										
											2012-07-24 14:55:10 +04:00
										 |  |  | 	var id = $('.current.image').attr('id') | 
					
						
							|  |  |  | 	var prev = getImageBefore(id, $('.current.ribbon')[direction]('.ribbon')) | 
					
						
							| 
									
										
										
										
											2012-07-14 00:00:16 +04:00
										 |  |  | 	if(prev){ | 
					
						
							|  |  |  | 		var next = prev.next() | 
					
						
							| 
									
										
										
										
											2012-07-14 02:26:06 +04:00
										 |  |  | 		// NOTE: direction is accounted for to make the up/down shifts 
 | 
					
						
							|  |  |  | 		// 		 symmetrical in the general case...
 | 
					
						
							|  |  |  | 		if(next.length == 0 || direction == 'next'){ | 
					
						
							| 
									
										
										
										
											2012-07-14 00:00:16 +04:00
										 |  |  | 			prev.click() | 
					
						
							|  |  |  | 		} else { | 
					
						
							|  |  |  | 			next.click() | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} else { | 
					
						
							| 
									
										
										
										
											2012-07-24 14:55:10 +04:00
										 |  |  | 		$('.current.ribbon')[direction]('.ribbon').children('.image').first().click() | 
					
						
							| 
									
										
										
										
											2012-07-14 00:00:16 +04:00
										 |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2012-06-08 18:30:54 +04:00
										 |  |  | function focusAboveRibbon(){ | 
					
						
							| 
									
										
										
										
											2012-07-14 00:00:16 +04:00
										 |  |  | 	focusRibbon('prev') | 
					
						
							| 
									
										
										
										
											2012-06-08 18:30:54 +04:00
										 |  |  | } | 
					
						
							|  |  |  | function focusBelowRibbon(){ | 
					
						
							| 
									
										
										
										
											2012-07-14 00:00:16 +04:00
										 |  |  | 	focusRibbon('next') | 
					
						
							| 
									
										
										
										
											2012-06-08 18:30:54 +04:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-06-17 16:46:46 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-14 00:00:16 +04:00
										 |  |  | /********************************************************** Helpers **/ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-04 19:37:40 +04:00
										 |  |  | function doWithoutTransitions(obj, func){ | 
					
						
							|  |  |  | 	obj | 
					
						
							|  |  |  | 		.addClass('unanimated') | 
					
						
							|  |  |  | 		.one("webkitTransitionEnd oTransitionEnd msTransitionEnd transitionend", function(){ | 
					
						
							|  |  |  | 			func() | 
					
						
							|  |  |  | 			$('.viewer') | 
					
						
							|  |  |  | 				.one("webkitTransitionEnd oTransitionEnd msTransitionEnd transitionend", function(){ | 
					
						
							|  |  |  | 					obj.removeClass('unanimated') | 
					
						
							|  |  |  | 				}) | 
					
						
							|  |  |  | 		}) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-14 00:00:16 +04:00
										 |  |  | // find an image object after which to position image ID...
 | 
					
						
							|  |  |  | // used for two main tasks:
 | 
					
						
							| 
									
										
										
										
											2012-07-14 02:26:06 +04:00
										 |  |  | // 	- positioning promoted/demoted images
 | 
					
						
							| 
									
										
										
										
											2012-07-14 00:00:16 +04:00
										 |  |  | // 	- centering ribbons
 | 
					
						
							|  |  |  | // returns:
 | 
					
						
							|  |  |  | // 	- null		- empty ribbon or no element greater id should be first
 | 
					
						
							|  |  |  | // 	- element
 | 
					
						
							|  |  |  | // XXX do we need to make ids numbers for this to work?
 | 
					
						
							| 
									
										
										
										
											2012-08-01 01:22:26 +04:00
										 |  |  | function getImageBefore_lin(id, ribbon){ | 
					
						
							| 
									
										
										
										
											2012-07-14 00:00:16 +04:00
										 |  |  | 	// walk the ribbon till we find two images one with an ID less and 
 | 
					
						
							|  |  |  | 	// another greater that id...
 | 
					
						
							|  |  |  | 	id = parseInt(id) | 
					
						
							|  |  |  | 	var images = ribbon.children('.image') | 
					
						
							| 
									
										
										
										
											2012-08-01 01:22:26 +04:00
										 |  |  | 	var prev = null | 
					
						
							| 
									
										
										
										
											2012-07-14 00:00:16 +04:00
										 |  |  | 	for(var i=0; i < images.length; i++){ | 
					
						
							|  |  |  | 		if(parseInt($(images[i]).attr('id')) > id){ | 
					
						
							|  |  |  | 			return prev | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		prev = $(images[i]) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return prev | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-01 01:22:26 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-04 18:57:54 +04:00
										 |  |  | // generic binery search for element just before the id...
 | 
					
						
							| 
									
										
										
										
											2012-08-04 20:26:38 +04:00
										 |  |  | // NOTE: if id is in lst, this will return the element just before it.
 | 
					
						
							|  |  |  | // NOTE: lst must be sorted.
 | 
					
						
							| 
									
										
										
										
											2012-08-01 01:22:26 +04:00
										 |  |  | function binarySearch(id, lst, get){ | 
					
						
							|  |  |  | 	if(get == null){ | 
					
						
							|  |  |  | 		get = function(o){return o} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	// empty list...
 | 
					
						
							|  |  |  | 	if(lst.length == 0){ | 
					
						
							|  |  |  | 		return null | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	// current section length
 | 
					
						
							|  |  |  | 	var l = Math.round((lst.length-1)/2) | 
					
						
							|  |  |  | 	// current position...
 | 
					
						
							|  |  |  | 	var i = l | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	while(true){ | 
					
						
							|  |  |  | 		var i_id = get(lst[i]) | 
					
						
							|  |  |  | 		// beginning of the array...
 | 
					
						
							|  |  |  | 		if(i == 0){ | 
					
						
							|  |  |  | 			if(id > i_id){ | 
					
						
							|  |  |  | 				return i | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			return null | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		// we got a hit...
 | 
					
						
							|  |  |  | 		if(i_id == id){ | 
					
						
							|  |  |  | 			return i-1 | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		// we are at the end...
 | 
					
						
							|  |  |  | 		if(i == lst.length-1 && id > i_id){ | 
					
						
							|  |  |  | 			return i | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		var ii_id = get(lst[i+1]) | 
					
						
							|  |  |  | 		// test if id is between i and i+1...
 | 
					
						
							|  |  |  | 		if( i_id < id && id < ii_id ){ | 
					
						
							|  |  |  | 			return i | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		// prepare for next iteration...
 | 
					
						
							|  |  |  | 		// NOTE: we saturate the values so we will never get out of bounds.
 | 
					
						
							|  |  |  | 		l = Math.round(l/2) | 
					
						
							|  |  |  | 		if(id < i_id){ | 
					
						
							|  |  |  | 			// lower half...
 | 
					
						
							|  |  |  | 			i = Math.max(0, i-l) | 
					
						
							|  |  |  | 		} else { | 
					
						
							|  |  |  | 			// upper half...
 | 
					
						
							|  |  |  | 			i = Math.min(i+l, lst.length-1) | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // wrapper around binarySearch.
 | 
					
						
							|  |  |  | // this is here to make binarySearch simpler to test and debug...
 | 
					
						
							|  |  |  | function getImageBefore_bin(id, ribbon){ | 
					
						
							|  |  |  | 	var images = ribbon.children('.image')  | 
					
						
							|  |  |  | 	var i = binarySearch( | 
					
						
							|  |  |  | 					parseInt(id),  | 
					
						
							|  |  |  | 					images,  | 
					
						
							|  |  |  | 					function(o){return parseInt($(o).attr('id'))}) | 
					
						
							|  |  |  | 	if(i == null){ | 
					
						
							|  |  |  | 		return null | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return $(images[i]) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-01 01:37:58 +04:00
										 |  |  | // set the default search...
 | 
					
						
							| 
									
										
										
										
											2012-08-01 01:22:26 +04:00
										 |  |  | var getImageBefore = getImageBefore_bin | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-14 00:00:16 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-06-17 16:46:46 +04:00
										 |  |  | /********************************************************** Actions **/ | 
					
						
							| 
									
										
										
										
											2012-06-16 21:52:23 +04:00
										 |  |  | // basic actions...
 | 
					
						
							| 
									
										
										
										
											2012-08-04 19:47:13 +04:00
										 |  |  | // NOTE: below 'direction' argument is meant in the html sence, 
 | 
					
						
							|  |  |  | //       i.e. next/prev...
 | 
					
						
							| 
									
										
										
										
											2012-06-16 21:52:23 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-06-08 18:30:54 +04:00
										 |  |  | // create ribbon above/below helpers...
 | 
					
						
							| 
									
										
										
										
											2012-08-04 19:47:13 +04:00
										 |  |  | // XXX adding a ribbon above the current is still jumpy, need to devise 
 | 
					
						
							| 
									
										
										
										
											2012-08-04 20:26:38 +04:00
										 |  |  | // 		a cleaner way to do this...
 | 
					
						
							| 
									
										
										
										
											2012-06-16 21:40:36 +04:00
										 |  |  | function createRibbon(direction){ | 
					
						
							|  |  |  | 	if(direction == 'next'){ | 
					
						
							|  |  |  | 		var insert = 'insertAfter' | 
					
						
							|  |  |  | 	} else if(direction == 'prev') { | 
					
						
							|  |  |  | 		var insert = 'insertBefore' | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		return false | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-04 19:47:13 +04:00
										 |  |  | 	// adding a new ribbon above the current effectively pushes the 
 | 
					
						
							|  |  |  | 	// whole view down, so we need to compensate for this.
 | 
					
						
							|  |  |  | 	// NOTE: the problem is partly caused by clicks fiering BEFORE the 
 | 
					
						
							|  |  |  | 	// 		 animation is done...
 | 
					
						
							| 
									
										
										
										
											2012-08-04 19:37:40 +04:00
										 |  |  | 	$('.field').addClass('unanimated')	 | 
					
						
							|  |  |  | 	 | 
					
						
							| 
									
										
										
										
											2012-08-04 19:47:13 +04:00
										 |  |  | 	if(direction == 'prev'){ | 
					
						
							|  |  |  | 		$('.field').css({ | 
					
						
							| 
									
										
										
										
											2012-08-04 20:26:38 +04:00
										 |  |  | 			'margin-top': parseInt($('.field').css('margin-top')) - $('.ribbon').outerHeight() | 
					
						
							| 
									
										
										
										
											2012-08-04 19:47:13 +04:00
										 |  |  | 		}) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	// the actual insert...
 | 
					
						
							|  |  |  | 	var res = $('<div class="ribbon"></div>')[insert]('.current.ribbon') | 
					
						
							| 
									
										
										
										
											2012-08-04 19:37:40 +04:00
										 |  |  | 	 | 
					
						
							| 
									
										
										
										
											2012-08-04 19:47:13 +04:00
										 |  |  | 	// restore the animated state...
 | 
					
						
							| 
									
										
										
										
											2012-08-04 19:37:40 +04:00
										 |  |  | 	$('.field').removeClass('unanimated')	 | 
					
						
							| 
									
										
										
										
											2012-08-04 18:57:54 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-06-08 18:30:54 +04:00
										 |  |  | 	return res | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-04 20:09:19 +04:00
										 |  |  | // merge current and direction ribbon...
 | 
					
						
							|  |  |  | // NOTE: this will take all the elements from direction ribbon and add
 | 
					
						
							|  |  |  | //       them to current
 | 
					
						
							| 
									
										
										
										
											2012-08-04 19:47:13 +04:00
										 |  |  | // XXX this uses jquery animation...
 | 
					
						
							| 
									
										
										
										
											2012-08-04 20:26:38 +04:00
										 |  |  | // XXX one way to optimise this is to add the lesser ribbon to the 
 | 
					
						
							|  |  |  | //     greater disregarding their actual order...
 | 
					
						
							| 
									
										
										
										
											2012-06-16 21:24:11 +04:00
										 |  |  | function mergeRibbons(direction){ | 
					
						
							| 
									
										
										
										
											2012-08-04 20:09:19 +04:00
										 |  |  | 	var current_ribbon = $('.current.ribbon') | 
					
						
							|  |  |  | 	var images = $('.current.ribbon')[direction]('.ribbon').children() | 
					
						
							|  |  |  | 	for(var i=0; i < images.length; i++){ | 
					
						
							|  |  |  | 		var image = $(images[i]) | 
					
						
							| 
									
										
										
										
											2012-08-04 20:26:38 +04:00
										 |  |  | 		// get previous element after which we need to put the current...
 | 
					
						
							| 
									
										
										
										
											2012-08-04 20:09:19 +04:00
										 |  |  | 		var prev_elem = getImageBefore(image.attr('id'), current_ribbon) | 
					
						
							| 
									
										
										
										
											2012-08-04 20:26:38 +04:00
										 |  |  | 		// check if we need to be before the first element...
 | 
					
						
							| 
									
										
										
										
											2012-08-04 20:09:19 +04:00
										 |  |  | 		if(prev_elem == null){ | 
					
						
							|  |  |  | 			image | 
					
						
							|  |  |  | 				.detach() | 
					
						
							|  |  |  | 				.insertBefore(current_ribbon.children('.image').first()) | 
					
						
							|  |  |  | 		} else { | 
					
						
							|  |  |  | 			image | 
					
						
							|  |  |  | 				.detach() | 
					
						
							|  |  |  | 				.insertAfter(prev_elem) | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-06-16 21:52:23 +04:00
										 |  |  | 	// animate...
 | 
					
						
							| 
									
										
										
										
											2012-07-24 14:55:10 +04:00
										 |  |  | 	$('.current.ribbon')[direction]('.ribbon') | 
					
						
							| 
									
										
										
										
											2012-06-08 18:30:54 +04:00
										 |  |  | 			.slideUp(function(){ | 
					
						
							|  |  |  | 				$(this).remove() | 
					
						
							| 
									
										
										
										
											2012-07-24 14:55:10 +04:00
										 |  |  | 				$('.current.image').click() | 
					
						
							| 
									
										
										
										
											2012-06-08 18:30:54 +04:00
										 |  |  | 			}) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-04 21:34:59 +04:00
										 |  |  | function toggleSingleImageModeTransitions(){ | 
					
						
							|  |  |  | 	if( $('.no-single-image-transitions').length > 0 ){ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		$('.no-single-image-transitions').removeClass('no-single-image-transitions') | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		$('.viewer').addClass('no-single-image-transitions') | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-06-16 21:52:23 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-06-17 16:46:46 +04:00
										 |  |  | /*************************************************** Editor Actions **/ | 
					
						
							| 
									
										
										
										
											2012-06-16 21:52:23 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | // now the actual modifiers...
 | 
					
						
							| 
									
										
										
										
											2012-06-16 21:24:11 +04:00
										 |  |  | function shiftImage(direction){ | 
					
						
							| 
									
										
										
										
											2012-07-24 14:55:10 +04:00
										 |  |  | 	if($('.current.ribbon')[direction]('.ribbon').length == 0){ | 
					
						
							| 
									
										
										
										
											2012-06-16 21:40:36 +04:00
										 |  |  | 		createRibbon(direction) | 
					
						
							| 
									
										
										
										
											2012-06-08 18:30:54 +04:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2012-07-14 00:00:16 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// get previous element after which we need to put the current...
 | 
					
						
							|  |  |  | 	var prev_elem = getImageBefore( | 
					
						
							| 
									
										
										
										
											2012-07-24 14:55:10 +04:00
										 |  |  | 					$('.current.image').attr('id'),  | 
					
						
							|  |  |  | 					$('.current.ribbon')[direction]('.ribbon')) | 
					
						
							| 
									
										
										
										
											2012-07-14 00:00:16 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// last image in ribbon, merge...
 | 
					
						
							| 
									
										
										
										
											2012-07-24 14:55:10 +04:00
										 |  |  | 	if($('.current.ribbon').children('.image').length == 1){ | 
					
						
							| 
									
										
										
										
											2012-06-16 21:24:11 +04:00
										 |  |  | 		mergeRibbons(direction) | 
					
						
							| 
									
										
										
										
											2012-06-08 18:30:54 +04:00
										 |  |  | 	} else { | 
					
						
							| 
									
										
										
										
											2012-07-24 14:55:10 +04:00
										 |  |  | 		img = $('.current.image') | 
					
						
							| 
									
										
										
										
											2012-06-08 18:30:54 +04:00
										 |  |  | 		if(img.next('.image').length == 0){ | 
					
						
							|  |  |  | 			prevImage() | 
					
						
							|  |  |  | 		} else { | 
					
						
							|  |  |  | 			nextImage() | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2012-07-14 00:00:16 +04:00
										 |  |  | 		// do the actual move...
 | 
					
						
							|  |  |  | 		if(prev_elem){ | 
					
						
							|  |  |  | 			// insert element after current...
 | 
					
						
							|  |  |  | 			img | 
					
						
							|  |  |  | 				.detach() | 
					
						
							|  |  |  | 				.insertAfter(prev_elem) | 
					
						
							|  |  |  | 		} else { | 
					
						
							|  |  |  | 			// empty ribbon or fisrt element...
 | 
					
						
							|  |  |  | 			img | 
					
						
							|  |  |  | 				.detach() | 
					
						
							| 
									
										
										
										
											2012-07-24 14:55:10 +04:00
										 |  |  | 				.prependTo($('.current.ribbon')[direction]('.ribbon')) | 
					
						
							| 
									
										
										
										
											2012-07-14 00:00:16 +04:00
										 |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-06-08 18:30:54 +04:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2012-08-04 19:37:40 +04:00
										 |  |  | 	$('.current.image').click() | 
					
						
							| 
									
										
										
										
											2012-06-08 18:30:54 +04:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-06-16 22:12:50 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-06-16 21:52:23 +04:00
										 |  |  | function shiftImageDown(){ | 
					
						
							| 
									
										
										
										
											2012-06-16 21:24:11 +04:00
										 |  |  | 	return shiftImage('next') | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2012-06-16 21:52:23 +04:00
										 |  |  | function shiftImageUp(){ | 
					
						
							| 
									
										
										
										
											2012-06-16 21:24:11 +04:00
										 |  |  | 	return shiftImage('prev') | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2012-06-08 18:30:54 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-06-16 22:12:50 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-14 00:00:16 +04:00
										 |  |  | /*********************************************************************/ | 
					
						
							| 
									
										
										
										
											2012-06-08 18:30:54 +04:00
										 |  |  | // vim:set ts=4 sw=4 nowrap :
 |