| 
									
										
										
										
											2013-05-03 01:29:43 +04:00
										 |  |  | /********************************************************************** | 
					
						
							|  |  |  | *  | 
					
						
							|  |  |  | * | 
					
						
							|  |  |  | * | 
					
						
							|  |  |  | **********************************************************************/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //var DEBUG = DEBUG != null ? DEBUG : true
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var STEPS_TO_CHANGE_DIRECTION = 2 | 
					
						
							|  |  |  | var _STEPS_LEFT_TO_CHANGE_DIRECTION = STEPS_TO_CHANGE_DIRECTION | 
					
						
							|  |  |  | // XXX code related to this needs testing...
 | 
					
						
							|  |  |  | var DIRECTION = 'next' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-03 02:11:24 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | /*********************************************************************/ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-03 01:29:43 +04:00
										 |  |  | var KEYBOARD_CONFIG = { | 
					
						
							|  |  |  | 	// general setup...
 | 
					
						
							|  |  |  | 	'.viewer': { | 
					
						
							|  |  |  | 		// Navigation...
 | 
					
						
							|  |  |  | 		// XXX need to cancel the animation of the prev action...
 | 
					
						
							|  |  |  | 		Left: { | 
					
						
							|  |  |  | 				default: function(){  | 
					
						
							| 
									
										
										
										
											2013-05-03 15:58:22 +04:00
										 |  |  | 					// update direction...
 | 
					
						
							| 
									
										
										
										
											2013-05-03 01:29:43 +04:00
										 |  |  | 					if(DIRECTION != 'prev'){ | 
					
						
							|  |  |  | 						_STEPS_LEFT_TO_CHANGE_DIRECTION-- | 
					
						
							|  |  |  | 						if(_STEPS_LEFT_TO_CHANGE_DIRECTION == 0){ | 
					
						
							|  |  |  | 							DIRECTION = 'prev' | 
					
						
							|  |  |  | 							_STEPS_LEFT_TO_CHANGE_DIRECTION = 2 | 
					
						
							|  |  |  | 						} | 
					
						
							|  |  |  | 					} else { | 
					
						
							|  |  |  | 							_STEPS_LEFT_TO_CHANGE_DIRECTION = 2 | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 					prevImage()  | 
					
						
							| 
									
										
										
										
											2013-05-03 05:38:40 +04:00
										 |  |  | 					centerRibbons() | 
					
						
							| 
									
										
										
										
											2013-05-03 01:29:43 +04:00
										 |  |  | 				}, | 
					
						
							|  |  |  | 				ctrl: function(){  | 
					
						
							| 
									
										
										
										
											2013-05-03 02:27:54 +04:00
										 |  |  | 					prevScreenImages() | 
					
						
							| 
									
										
										
										
											2013-05-03 05:38:40 +04:00
										 |  |  | 					centerRibbons() | 
					
						
							| 
									
										
										
										
											2013-05-03 01:29:43 +04:00
										 |  |  | 				}, | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 		Right: { | 
					
						
							|  |  |  | 				default: function(){  | 
					
						
							| 
									
										
										
										
											2013-05-03 15:58:22 +04:00
										 |  |  | 					// update direction...
 | 
					
						
							| 
									
										
										
										
											2013-05-03 01:29:43 +04:00
										 |  |  | 					if(DIRECTION != 'next'){ | 
					
						
							|  |  |  | 						_STEPS_LEFT_TO_CHANGE_DIRECTION-- | 
					
						
							|  |  |  | 						if(_STEPS_LEFT_TO_CHANGE_DIRECTION == 0){ | 
					
						
							|  |  |  | 							DIRECTION = 'next' | 
					
						
							|  |  |  | 							_STEPS_LEFT_TO_CHANGE_DIRECTION = 2 | 
					
						
							|  |  |  | 						} | 
					
						
							|  |  |  | 					} else { | 
					
						
							|  |  |  | 							_STEPS_LEFT_TO_CHANGE_DIRECTION = 2 | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 					nextImage()  | 
					
						
							| 
									
										
										
										
											2013-05-03 05:38:40 +04:00
										 |  |  | 					centerRibbons() | 
					
						
							| 
									
										
										
										
											2013-05-03 01:29:43 +04:00
										 |  |  | 				}, | 
					
						
							|  |  |  | 				ctrl: function(){  | 
					
						
							| 
									
										
										
										
											2013-05-03 02:27:54 +04:00
										 |  |  | 					nextScreenImages() | 
					
						
							| 
									
										
										
										
											2013-05-03 05:38:40 +04:00
										 |  |  | 					centerRibbons() | 
					
						
							| 
									
										
										
										
											2013-05-03 01:29:43 +04:00
										 |  |  | 				}, | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 		Space: { | 
					
						
							|  |  |  | 				default: 'Right', | 
					
						
							|  |  |  | 				shift: 'Left', | 
					
						
							| 
									
										
										
										
											2013-05-03 02:30:51 +04:00
										 |  |  | 				// screen-oriented movement...
 | 
					
						
							|  |  |  | 				ctrl: 'Right', | 
					
						
							|  |  |  | 				'ctrl+shift': 'Left', | 
					
						
							| 
									
										
										
										
											2013-05-03 01:29:43 +04:00
										 |  |  | 			}, | 
					
						
							|  |  |  | 		/* XXX for some reason this does not work,,, | 
					
						
							|  |  |  | 		// XXX for some odd reason, returning false does not cancel 
 | 
					
						
							|  |  |  | 		//		default behaviour here...
 | 
					
						
							|  |  |  | 		Backspace: { | 
					
						
							|  |  |  | 				default: 'Left', | 
					
						
							|  |  |  | 				shift: 'Right', | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 		*/ | 
					
						
							|  |  |  | 		Home: function(){ | 
					
						
							| 
									
										
										
										
											2013-05-07 02:16:57 +04:00
										 |  |  | 				event.preventDefault() | 
					
						
							| 
									
										
										
										
											2013-05-03 01:29:43 +04:00
										 |  |  | 				firstImage() | 
					
						
							| 
									
										
										
										
											2013-05-03 05:38:40 +04:00
										 |  |  | 				centerRibbons() | 
					
						
							| 
									
										
										
										
											2013-05-03 01:29:43 +04:00
										 |  |  | 			}, | 
					
						
							|  |  |  | 		End: function(){ | 
					
						
							| 
									
										
										
										
											2013-05-07 02:16:57 +04:00
										 |  |  | 				event.preventDefault() | 
					
						
							| 
									
										
										
										
											2013-05-03 01:29:43 +04:00
										 |  |  | 				lastImage() | 
					
						
							| 
									
										
										
										
											2013-05-03 05:38:40 +04:00
										 |  |  | 				centerRibbons() | 
					
						
							| 
									
										
										
										
											2013-05-03 01:29:43 +04:00
										 |  |  | 			}, | 
					
						
							| 
									
										
										
										
											2013-05-03 02:11:24 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		// combined navigation and editor actions...
 | 
					
						
							| 
									
										
										
										
											2013-05-03 01:29:43 +04:00
										 |  |  | 		Up: { | 
					
						
							| 
									
										
										
										
											2013-05-03 05:38:40 +04:00
										 |  |  | 				default: function(){  | 
					
						
							| 
									
										
										
										
											2013-05-07 02:16:57 +04:00
										 |  |  | 					event.preventDefault() | 
					
						
							| 
									
										
										
										
											2013-05-03 05:38:40 +04:00
										 |  |  | 					prevRibbon(DIRECTION)  | 
					
						
							|  |  |  | 					centerRibbons() | 
					
						
							|  |  |  | 				}, | 
					
						
							|  |  |  | 				shift: function(){  | 
					
						
							| 
									
										
										
										
											2013-05-07 02:16:57 +04:00
										 |  |  | 					event.preventDefault() | 
					
						
							| 
									
										
										
										
											2013-05-03 05:38:40 +04:00
										 |  |  | 					shiftImageUp(null, DIRECTION)  | 
					
						
							|  |  |  | 					centerRibbons() | 
					
						
							|  |  |  | 				}, | 
					
						
							|  |  |  | 				'ctrl+shift': function(){ | 
					
						
							| 
									
										
										
										
											2013-05-07 02:16:57 +04:00
										 |  |  | 					event.preventDefault() | 
					
						
							| 
									
										
										
										
											2013-05-03 05:38:40 +04:00
										 |  |  | 					shiftImageUpNewRibbon(null, DIRECTION)  | 
					
						
							|  |  |  | 					centerRibbons() | 
					
						
							|  |  |  | 				}, | 
					
						
							| 
									
										
										
										
											2013-05-03 01:29:43 +04:00
										 |  |  | 			}, | 
					
						
							|  |  |  | 		Down: { | 
					
						
							| 
									
										
										
										
											2013-05-03 05:38:40 +04:00
										 |  |  | 				default: function(){ | 
					
						
							| 
									
										
										
										
											2013-05-07 02:16:57 +04:00
										 |  |  | 					event.preventDefault() | 
					
						
							| 
									
										
										
										
											2013-05-03 05:38:40 +04:00
										 |  |  | 					nextRibbon(DIRECTION)  | 
					
						
							|  |  |  | 					centerRibbons() | 
					
						
							|  |  |  | 				}, | 
					
						
							|  |  |  | 				shift: function(){ | 
					
						
							| 
									
										
										
										
											2013-05-07 02:16:57 +04:00
										 |  |  | 					event.preventDefault() | 
					
						
							| 
									
										
										
										
											2013-05-03 05:38:40 +04:00
										 |  |  | 					shiftImageDown(null, DIRECTION)  | 
					
						
							|  |  |  | 					centerRibbons() | 
					
						
							|  |  |  | 				}, | 
					
						
							|  |  |  | 				'ctrl+shift': function(){ | 
					
						
							| 
									
										
										
										
											2013-05-07 02:16:57 +04:00
										 |  |  | 					event.preventDefault() | 
					
						
							| 
									
										
										
										
											2013-05-03 05:38:40 +04:00
										 |  |  | 					shiftImageDownNewRibbon(null, DIRECTION)  | 
					
						
							|  |  |  | 					centerRibbons() | 
					
						
							|  |  |  | 				}, | 
					
						
							| 
									
										
										
										
											2013-05-03 01:29:43 +04:00
										 |  |  | 			}, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		// zooming...
 | 
					
						
							|  |  |  | 		'1': function(){ fitNImages(1) }, | 
					
						
							|  |  |  | 		'2': function(){ fitNImages(2) }, | 
					
						
							|  |  |  | 		'3': function(){ fitNImages(3) }, | 
					
						
							|  |  |  | 		'4': function(){ fitNImages(4) }, | 
					
						
							|  |  |  | 		'5': function(){ fitNImages(5) }, | 
					
						
							|  |  |  | 		'6': function(){ fitNImages(6) }, | 
					
						
							|  |  |  | 		'7': function(){ fitNImages(7) }, | 
					
						
							|  |  |  | 		// XXX for some reason this also hooks the Backspace key (80)...
 | 
					
						
							|  |  |  | 		'8': function(){ fitNImages(8) }, | 
					
						
							|  |  |  | 		'9': function(){ fitNImages(9) }, | 
					
						
							| 
									
										
										
										
											2013-05-06 23:43:38 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		'-': function(){ zoomOut() }, | 
					
						
							|  |  |  | 		'=': function(){ zoomIn() }, | 
					
						
							| 
									
										
										
										
											2013-05-03 01:29:43 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-17 15:34:45 +04:00
										 |  |  | 		Enter: function(){ toggleSingleImageMode() }, | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-03 01:29:43 +04:00
										 |  |  | 		// XXX this should only work on single image mode...
 | 
					
						
							| 
									
										
										
										
											2013-05-03 05:38:40 +04:00
										 |  |  | 		F: function(){  | 
					
						
							|  |  |  | 				toggleImageProportions()  | 
					
						
							|  |  |  | 				centerRibbons() | 
					
						
							|  |  |  | 			}, | 
					
						
							| 
									
										
										
										
											2013-05-03 01:29:43 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-17 18:20:38 +04:00
										 |  |  | 		B: function(){ toggleTheme() }, | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-17 15:48:39 +04:00
										 |  |  | 		S: { | 
					
						
							|  |  |  | 				ctrl: function(){ | 
					
						
							|  |  |  | 					saveLocalStorage() | 
					
						
							|  |  |  | 					saveLocalStorageMarks() | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 		Z: { | 
					
						
							|  |  |  | 				ctrl: function(){ | 
					
						
							|  |  |  | 					loadLocalStorage() | 
					
						
							|  |  |  | 					loadLocalStorageMarks() | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-03 01:29:43 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		// marking...
 | 
					
						
							|  |  |  | 		// XXX not final, think of a better way to do this...
 | 
					
						
							|  |  |  | 		// XXX need mark navigation...
 | 
					
						
							| 
									
										
										
										
											2013-05-03 02:11:24 +04:00
										 |  |  | 		// XXX need marked image shift up/down actions...
 | 
					
						
							|  |  |  | 		// XXX unmarking an image in marked-only mode results in nothing
 | 
					
						
							|  |  |  | 		// 		visible focused if we unmark the first or last image in 
 | 
					
						
							|  |  |  | 		// 		the ribbon...
 | 
					
						
							| 
									
										
										
										
											2013-05-03 01:29:43 +04:00
										 |  |  | 		M: { | 
					
						
							|  |  |  | 				// NOTE: marking moves in the same direction as the last
 | 
					
						
							|  |  |  | 				//		move...
 | 
					
						
							|  |  |  | 				//		i.e. marking can change direction depending on where
 | 
					
						
							|  |  |  | 				//		we moved last...
 | 
					
						
							|  |  |  | 				// NOTE: marking does not change move direction...
 | 
					
						
							|  |  |  | 				default: function(){  | 
					
						
							|  |  |  | 					toggleImageMark() | 
					
						
							|  |  |  | 					if(DIRECTION == 'next'){ | 
					
						
							|  |  |  | 						nextImage() | 
					
						
							|  |  |  | 					} else { | 
					
						
							|  |  |  | 						prevImage() | 
					
						
							|  |  |  | 					} | 
					
						
							| 
									
										
										
										
											2013-05-03 03:43:43 +04:00
										 |  |  | 					if($('.current.image').filter(':visible').length == 0){ | 
					
						
							|  |  |  | 						centerImage(focusImage(getImageBefore())) | 
					
						
							|  |  |  | 					} | 
					
						
							| 
									
										
										
										
											2013-05-03 01:29:43 +04:00
										 |  |  | 				}, | 
					
						
							|  |  |  | 				// same as default but in reverse direction...
 | 
					
						
							|  |  |  | 				shift: function(){ | 
					
						
							|  |  |  | 					toggleImageMark() | 
					
						
							|  |  |  | 					if(DIRECTION == 'prev'){ | 
					
						
							|  |  |  | 						nextImage() | 
					
						
							|  |  |  | 					} else { | 
					
						
							|  |  |  | 						prevImage() | 
					
						
							|  |  |  | 					} | 
					
						
							| 
									
										
										
										
											2013-05-03 03:43:43 +04:00
										 |  |  | 					if($('.current.image').filter(':visible').length == 0){ | 
					
						
							|  |  |  | 						centerImage(focusImage(getImageBefore())) | 
					
						
							|  |  |  | 					}  | 
					
						
							| 
									
										
										
										
											2013-05-03 01:29:43 +04:00
										 |  |  | 				}, | 
					
						
							| 
									
										
										
										
											2013-05-03 02:11:24 +04:00
										 |  |  | 				ctrl: function(){  | 
					
						
							|  |  |  | 					var action = toggleImageMark()  | 
					
						
							|  |  |  | 					// focus an image instead of the one that just vanished...
 | 
					
						
							|  |  |  | 					if(action == 'off' && toggleMarkedOnlyView('?') == 'on'){ | 
					
						
							|  |  |  | 						if(DIRECTION == 'next'){ | 
					
						
							|  |  |  | 							nextImage() | 
					
						
							|  |  |  | 						} else { | 
					
						
							|  |  |  | 							prevImage() | 
					
						
							|  |  |  | 						} | 
					
						
							|  |  |  | 						if($('.current.image').filter(':visible').length == 0){ | 
					
						
							|  |  |  | 							centerImage(focusImage(getImageBefore())) | 
					
						
							|  |  |  | 						}  | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 				}, | 
					
						
							| 
									
										
										
										
											2013-05-03 01:29:43 +04:00
										 |  |  | 			}, | 
					
						
							|  |  |  | 		I: { | 
					
						
							| 
									
										
										
										
											2013-05-17 23:01:05 +04:00
										 |  |  | 				// XXX STUB -- replace with a real info window...
 | 
					
						
							|  |  |  | 				default: function(){ | 
					
						
							|  |  |  | 					var gid = getImageGID($('.current.image')) | 
					
						
							|  |  |  | 					var r = getRibbonIndex(getRibbon()) | 
					
						
							|  |  |  | 					var data = DATA.images[gid] | 
					
						
							|  |  |  | 					var order = DATA.order.indexOf(gid) | 
					
						
							|  |  |  | 					var name = data.path.split('/').pop() | 
					
						
							|  |  |  | 					alert('"'+ name +'"\n'+ | 
					
						
							|  |  |  | 							'GID: '+ gid +'\n'+ | 
					
						
							|  |  |  | 							'Path: "'+ data.path +'"\n'+ | 
					
						
							|  |  |  | 							'Order: '+ order +'\n'+ | 
					
						
							|  |  |  | 							'Position (ribbon): '+ DATA.ribbons[r].indexOf(gid) + | 
					
						
							|  |  |  | 								'/'+ DATA.ribbons[r].length +'\n'+ | 
					
						
							|  |  |  | 							'Position (global): '+ order +'/'+ DATA.order.length +'\n'+ | 
					
						
							|  |  |  | 							'') | 
					
						
							|  |  |  | 				}, | 
					
						
							| 
									
										
										
										
											2013-05-03 01:29:43 +04:00
										 |  |  | 				ctrl: function(){ invertImageMarks() }, | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 		A: { | 
					
						
							|  |  |  | 				shift: function(){ toggleImageMarkBlock() }, | 
					
						
							|  |  |  | 				ctrl: function(){ markAll('ribbon') }, | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 		U: { | 
					
						
							|  |  |  | 				ctrl: function(){ removeImageMarks('ribbon') }, | 
					
						
							|  |  |  | 				shift: function(){ removeImageMarks('all') }, | 
					
						
							|  |  |  | 			}, | 
					
						
							| 
									
										
										
										
											2013-05-17 04:52:43 +04:00
										 |  |  | 		F2: { | 
					
						
							|  |  |  | 				default: function(){ toggleMarkesView() }, | 
					
						
							|  |  |  | 				shift: function(){ | 
					
						
							|  |  |  | 					toggleMarkedOnlyView() | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2013-05-03 05:38:40 +04:00
										 |  |  | 			}, | 
					
						
							| 
									
										
										
										
											2013-05-03 01:29:43 +04:00
										 |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /********************************************************************** | 
					
						
							|  |  |  | * vim:set ts=4 sw=4 :                                                */ |