| 
									
										
										
										
											2013-05-28 15:22:05 +04:00
										 |  |  | /********************************************************************** | 
					
						
							|  |  |  | *  | 
					
						
							|  |  |  | * | 
					
						
							|  |  |  | * | 
					
						
							|  |  |  | **********************************************************************/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //var DEBUG = DEBUG != null ? DEBUG : true
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-01 07:41:53 +04:00
										 |  |  | var _STEPS_LEFT_TO_CHANGE_DIRECTION = CONFIG.steps_to_change_direction | 
					
						
							| 
									
										
										
										
											2013-05-28 15:22:05 +04:00
										 |  |  | var DIRECTION = 'next' | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-16 04:07:34 +04:00
										 |  |  | var ACTIONS = {} | 
					
						
							| 
									
										
										
										
											2013-05-28 15:22:05 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-02 20:28:42 +04:00
										 |  |  | /*********************************************************************/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function updateDirection(direction){ | 
					
						
							|  |  |  | 	if(DIRECTION != direction){ | 
					
						
							|  |  |  | 		_STEPS_LEFT_TO_CHANGE_DIRECTION-- | 
					
						
							|  |  |  | 		if(_STEPS_LEFT_TO_CHANGE_DIRECTION == 0){ | 
					
						
							|  |  |  | 			DIRECTION = direction | 
					
						
							| 
									
										
										
										
											2014-01-01 07:41:53 +04:00
										 |  |  | 			_STEPS_LEFT_TO_CHANGE_DIRECTION = CONFIG.steps_to_change_direction | 
					
						
							| 
									
										
										
										
											2013-06-02 20:28:42 +04:00
										 |  |  | 		} | 
					
						
							|  |  |  | 	} else { | 
					
						
							| 
									
										
										
										
											2014-01-01 07:41:53 +04:00
										 |  |  | 			_STEPS_LEFT_TO_CHANGE_DIRECTION = CONFIG.steps_to_change_direction | 
					
						
							| 
									
										
										
										
											2013-06-02 20:28:42 +04:00
										 |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-03 04:40:55 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-02 20:28:42 +04:00
										 |  |  | function directionImage(reverse){ | 
					
						
							|  |  |  | 	if(DIRECTION == (reverse ? 'prev' : 'next')){ | 
					
						
							|  |  |  | 		nextImage() | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		prevImage() | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-16 04:07:34 +04:00
										 |  |  | // XXX this is experimental...
 | 
					
						
							|  |  |  | // 		...not sure yet how to go about this...
 | 
					
						
							|  |  |  | function Action(text, func){ | 
					
						
							| 
									
										
										
										
											2014-01-18 11:26:29 +04:00
										 |  |  | 	var not_action = func === false ? true : false | 
					
						
							|  |  |  | 	func = !func ? function(){return true}: func | 
					
						
							| 
									
										
										
										
											2014-01-16 04:07:34 +04:00
										 |  |  | 	func.doc = text | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-18 05:26:06 +04:00
										 |  |  | 	var name = text.split('\n')[0].trim() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if(name in ACTIONS){ | 
					
						
							|  |  |  | 		console.warn('Action: "'+name+'" is defined more than once.') | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-18 11:26:29 +04:00
										 |  |  | 	if(!not_action){ | 
					
						
							|  |  |  | 		ACTIONS[name] = func | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2014-01-16 04:07:34 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	return func | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-18 11:26:29 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | var _doc = doc | 
					
						
							|  |  |  | var doc = Action | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-16 04:07:34 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-02 20:28:42 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-10 18:31:32 +04:00
										 |  |  | /*********************************************************************/ | 
					
						
							| 
									
										
										
										
											2012-08-28 02:45:32 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-28 15:22:05 +04:00
										 |  |  | var KEYBOARD_CONFIG = { | 
					
						
							| 
									
										
										
										
											2014-01-16 03:34:18 +04:00
										 |  |  | 	'Global bindings': { | 
					
						
							| 
									
										
										
										
											2013-10-20 01:55:20 +04:00
										 |  |  | 		doc: 'NOTE: binding priority is the same as the order of sections '+ | 
					
						
							|  |  |  | 			'on this page.', | 
					
						
							| 
									
										
										
										
											2014-01-16 03:34:18 +04:00
										 |  |  | 		pattern: '*', | 
					
						
							| 
									
										
										
										
											2013-10-04 01:02:35 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		F4: { | 
					
						
							|  |  |  | 			alt: doc('Close viewer',  | 
					
						
							|  |  |  | 				function(){  | 
					
						
							|  |  |  | 					closeWindow()  | 
					
						
							|  |  |  | 					return false | 
					
						
							|  |  |  | 				}), | 
					
						
							|  |  |  | 		}, | 
					
						
							| 
									
										
										
										
											2013-11-26 18:34:56 +04:00
										 |  |  | 		F5: doc('Full reload viewer',  | 
					
						
							| 
									
										
										
										
											2013-11-09 15:03:49 +04:00
										 |  |  | 			function(){  | 
					
						
							| 
									
										
										
										
											2014-01-23 06:56:17 +04:00
										 |  |  | 				killAllWorkers() | 
					
						
							|  |  |  | 					.done(function(){ | 
					
						
							|  |  |  | 						reload()  | 
					
						
							|  |  |  | 					}) | 
					
						
							| 
									
										
										
										
											2013-11-09 15:03:49 +04:00
										 |  |  | 				return false | 
					
						
							|  |  |  | 			}), | 
					
						
							|  |  |  | 		F12: doc('Show devTools',  | 
					
						
							|  |  |  | 			function(){  | 
					
						
							|  |  |  | 				showDevTools()  | 
					
						
							|  |  |  | 				return false | 
					
						
							|  |  |  | 			}), | 
					
						
							|  |  |  | 		// NOTE: these are for systems where F** keys are not available 
 | 
					
						
							|  |  |  | 		// 		or do other stuff...
 | 
					
						
							|  |  |  | 		R: { | 
					
						
							| 
									
										
										
										
											2013-11-12 02:43:12 +04:00
										 |  |  | 			'ctrl+alt': doc('Reload viewer',  | 
					
						
							| 
									
										
										
										
											2013-11-09 15:03:49 +04:00
										 |  |  | 				function(){  | 
					
						
							|  |  |  | 					reloadViewer()  | 
					
						
							|  |  |  | 					return false | 
					
						
							|  |  |  | 				}), | 
					
						
							|  |  |  | 			'ctrl+shift': 'F5', | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		P: { | 
					
						
							|  |  |  | 			'ctrl+shift': 'F12', | 
					
						
							|  |  |  | 		}, | 
					
						
							| 
									
										
										
										
											2013-11-09 20:55:03 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		// NOTE: this is handled by the wrapper at this point, so we do 
 | 
					
						
							|  |  |  | 		// 		not have to do anything here...
 | 
					
						
							| 
									
										
										
										
											2014-01-13 06:37:08 +04:00
										 |  |  | 		F11: doc('Toggle full screen view', function(){  | 
					
						
							|  |  |  | 				toggleFullscreenMode()  | 
					
						
							|  |  |  | 				return false | 
					
						
							|  |  |  | 			}), | 
					
						
							| 
									
										
										
										
											2014-08-12 07:48:44 +04:00
										 |  |  | 		Enter: { | 
					
						
							|  |  |  | 			alt: 'F11' | 
					
						
							|  |  |  | 		}, | 
					
						
							| 
									
										
										
										
											2013-11-09 20:55:03 +04:00
										 |  |  | 		F: { | 
					
						
							|  |  |  | 			ctrl: 'F11', | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-10-04 01:02:35 +04:00
										 |  |  | 	}, | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-30 19:15:38 +04:00
										 |  |  | 	// NOTE: this is here to prevent selecting images while trying to 
 | 
					
						
							|  |  |  | 	// 		select info text...
 | 
					
						
							| 
									
										
										
										
											2014-01-16 03:34:18 +04:00
										 |  |  | 	'Info overlay': { | 
					
						
							| 
									
										
										
										
											2013-06-01 21:06:10 +04:00
										 |  |  | 		doc: 'Displayed on bottom of the screen if enabled (toggle with '+ | 
					
						
							| 
									
										
										
										
											2013-06-05 01:19:19 +04:00
										 |  |  | 			'<b>I</b>) and/or inline, at bottom of an image when cursor '+ | 
					
						
							| 
									
										
										
										
											2013-10-20 01:55:20 +04:00
										 |  |  | 			'is over it (only in ribbon view, toggle with <b>alt-I</b>)'+ | 
					
						
							| 
									
										
										
										
											2013-06-01 21:06:10 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			'<p>NOTE: when the cursor is over the info overlay one can use '+ | 
					
						
							| 
									
										
										
										
											2013-05-30 19:15:38 +04:00
										 |  |  | 			'Ctrl-A and Ctrl-D for info text selection, without affecting '+ | 
					
						
							|  |  |  | 			'image selection/marks.', | 
					
						
							| 
									
										
										
										
											2014-01-16 03:34:18 +04:00
										 |  |  | 		pattern: '.overlay-info:hover', | 
					
						
							| 
									
										
										
										
											2013-06-01 21:06:10 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-18 11:26:29 +04:00
										 |  |  | 		ignore: [ 'A', 'C', 'D' ], | 
					
						
							| 
									
										
										
										
											2013-06-01 21:06:10 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-18 11:26:29 +04:00
										 |  |  | 		// NOTE: these are here only for documentation...
 | 
					
						
							| 
									
										
										
										
											2013-05-30 19:15:38 +04:00
										 |  |  | 		A: { | 
					
						
							| 
									
										
										
										
											2014-01-18 11:26:29 +04:00
										 |  |  | 			ctrl: doc('Select all', false), | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		C: { | 
					
						
							|  |  |  | 			ctrl: doc('Copy selection', false) | 
					
						
							| 
									
										
										
										
											2013-05-30 19:15:38 +04:00
										 |  |  | 		}, | 
					
						
							| 
									
										
										
										
											2014-01-18 11:26:29 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-30 19:15:38 +04:00
										 |  |  | 		D: { | 
					
						
							|  |  |  | 			ctrl: doc('Clear selection',  | 
					
						
							|  |  |  | 				function(){ | 
					
						
							| 
									
										
										
										
											2014-01-18 11:26:29 +04:00
										 |  |  | 					console.log('!!!') | 
					
						
							| 
									
										
										
										
											2013-05-30 19:15:38 +04:00
										 |  |  | 					document.getSelection().empty() | 
					
						
							|  |  |  | 				}) | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	}, | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-10-04 01:02:35 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-01 05:58:12 +04:00
										 |  |  | 	// NOTE: editor effects are not documented, but should be obvious...
 | 
					
						
							|  |  |  | 	// 		XXX is this the case?
 | 
					
						
							| 
									
										
										
										
											2014-01-16 03:34:18 +04:00
										 |  |  | 	'Dialog': { | 
					
						
							| 
									
										
										
										
											2013-06-20 02:54:31 +04:00
										 |  |  | 		doc: 'NOTE: to <i>close</i> a dialog, in addition to the keyaboard '+ | 
					
						
							|  |  |  | 			'shortcuts, one can also click anywhere outside the dialog.', | 
					
						
							| 
									
										
										
										
											2014-01-16 03:34:18 +04:00
										 |  |  | 		pattern: '.viewer.overlay .overlay-block.dialog, ' | 
					
						
							|  |  |  | 			+'.panel :focus', | 
					
						
							| 
									
										
										
										
											2013-06-20 02:54:31 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-13 02:02:24 +04:00
										 |  |  | 		ignore: '*', | 
					
						
							| 
									
										
										
										
											2013-06-10 19:20:35 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-18 11:26:29 +04:00
										 |  |  | 		'insert-return': doc('Insert return', false), | 
					
						
							| 
									
										
										
										
											2013-07-14 04:45:56 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-13 17:21:14 +04:00
										 |  |  | 		Enter: { | 
					
						
							| 
									
										
										
										
											2013-12-01 05:58:12 +04:00
										 |  |  | 				default: doc('Accept dialog', | 
					
						
							| 
									
										
										
										
											2013-09-13 17:21:14 +04:00
										 |  |  | 					function(){ | 
					
						
							|  |  |  | 						var f = $(':focus') | 
					
						
							| 
									
										
										
										
											2013-12-04 23:55:52 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-01 05:58:12 +04:00
										 |  |  | 						// trigger the default button/summary action...
 | 
					
						
							|  |  |  | 						// NOTE: for some reason checkboxes in dialogs do not work (not a biggie)...
 | 
					
						
							| 
									
										
										
										
											2013-09-13 17:21:14 +04:00
										 |  |  | 						if(f.length > 0  | 
					
						
							| 
									
										
										
										
											2013-12-01 05:44:00 +04:00
										 |  |  | 								&& (/button|summary/i.test(f[0].tagName)  | 
					
						
							|  |  |  | 									|| /button|checkbox/i.test(f.attr('type')))){ | 
					
						
							|  |  |  | 							f.click() | 
					
						
							|  |  |  | 							// prevent the key from propagating to the viewer...
 | 
					
						
							|  |  |  | 							return false | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-01 05:58:12 +04:00
										 |  |  | 						// accept the input -- e.g. remove focus from it...
 | 
					
						
							| 
									
										
										
										
											2013-12-01 05:44:00 +04:00
										 |  |  | 						} else if(toggleEditor('?') == 'on'){ | 
					
						
							|  |  |  | 							f.blur() | 
					
						
							|  |  |  | 							// prevent the key from propagating to the viewer...
 | 
					
						
							|  |  |  | 							return false | 
					
						
							| 
									
										
										
										
											2013-09-13 17:21:14 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 						// accept the dialog...
 | 
					
						
							| 
									
										
										
										
											2013-12-01 05:44:00 +04:00
										 |  |  | 						} else if(isOverlayVisible('.viewer')) { | 
					
						
							| 
									
										
										
										
											2013-09-13 17:21:14 +04:00
										 |  |  | 							getOverlay($('.viewer')).trigger('accept') | 
					
						
							|  |  |  | 							hideOverlay($('.viewer'))  | 
					
						
							|  |  |  | 						} | 
					
						
							|  |  |  | 					}), | 
					
						
							|  |  |  | 				shift: 'insert-return', | 
					
						
							|  |  |  | 				//ctrl: 'insert-return',
 | 
					
						
							|  |  |  | 			}, | 
					
						
							| 
									
										
										
										
											2013-06-10 19:20:35 +04:00
										 |  |  | 		Esc: doc('Close dialog',  | 
					
						
							|  |  |  | 			function(){  | 
					
						
							| 
									
										
										
										
											2013-12-01 05:58:12 +04:00
										 |  |  | 				// hide the overlay...
 | 
					
						
							| 
									
										
										
										
											2013-12-01 05:44:00 +04:00
										 |  |  | 				if(isOverlayVisible('.viewer')){ | 
					
						
							|  |  |  | 					//getOverlay($('.viewer')).trigger('close')
 | 
					
						
							|  |  |  | 					hideOverlay($('.viewer'))  | 
					
						
							|  |  |  | 					return false | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-01 05:58:12 +04:00
										 |  |  | 				// blur focused element, if nothing focused close...
 | 
					
						
							| 
									
										
										
										
											2013-12-01 05:44:00 +04:00
										 |  |  | 				} else if(toggleEditor('?') == 'on'){ | 
					
						
							| 
									
										
										
										
											2013-12-01 05:58:12 +04:00
										 |  |  | 					$(':focus').blur() | 
					
						
							| 
									
										
										
										
											2013-12-05 03:58:13 +04:00
										 |  |  | 					return false | 
					
						
							| 
									
										
										
										
											2013-12-01 05:44:00 +04:00
										 |  |  | 				} | 
					
						
							| 
									
										
										
										
											2013-06-10 19:20:35 +04:00
										 |  |  | 			}), | 
					
						
							|  |  |  | 	}, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-30 03:26:49 +04:00
										 |  |  | 	// NOTE: need to keep all info modes before the rest so as to give 
 | 
					
						
							|  |  |  | 	// 		their bindings priority...
 | 
					
						
							| 
									
										
										
										
											2014-01-16 03:34:18 +04:00
										 |  |  | 	'Drawer views': { | 
					
						
							| 
									
										
										
										
											2013-10-20 01:55:20 +04:00
										 |  |  | 		doc: 'NOTE: In this view all other key bindings are disabled, '+ | 
					
						
							| 
									
										
										
										
											2013-06-05 01:19:19 +04:00
										 |  |  | 			'except app defaults and the ones explicitly defined here.', | 
					
						
							| 
									
										
										
										
											2014-01-16 03:34:18 +04:00
										 |  |  | 		pattern: '.drawer-mode', | 
					
						
							| 
									
										
										
										
											2013-06-01 21:06:10 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-30 03:26:49 +04:00
										 |  |  | 		ignore: '*', | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-02 02:54:52 +04:00
										 |  |  | 		Esc: doc('Close drawer', | 
					
						
							| 
									
										
										
										
											2013-05-30 03:26:49 +04:00
										 |  |  | 			function(){  | 
					
						
							|  |  |  | 				toggleKeyboardHelp('off')  | 
					
						
							|  |  |  | 				return false | 
					
						
							|  |  |  | 			}), | 
					
						
							|  |  |  | 		Q: 'Esc', | 
					
						
							|  |  |  | 	}, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-16 03:34:18 +04:00
										 |  |  | 	'Slideshow view': { | 
					
						
							| 
									
										
										
										
											2013-10-20 01:55:20 +04:00
										 |  |  | 		doc: 'To enter this view press <b>S</b>.', | 
					
						
							| 
									
										
										
										
											2014-01-16 03:34:18 +04:00
										 |  |  | 		pattern: '.slideshow-mode', | 
					
						
							| 
									
										
										
										
											2013-06-01 19:54:46 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-01 20:16:45 +04:00
										 |  |  | 		// XXX think about what else to disable here...
 | 
					
						
							| 
									
										
										
										
											2013-06-01 19:54:46 +04:00
										 |  |  | 		ignore: [ | 
					
						
							| 
									
										
										
										
											2013-06-01 20:16:45 +04:00
										 |  |  | 			'Up', 'Down', 'Enter', 'R', 'L', | 
					
						
							| 
									
										
										
										
											2013-06-01 19:54:46 +04:00
										 |  |  | 			], | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-01 20:16:45 +04:00
										 |  |  | 		L: doc('Toggle slideshow looping', | 
					
						
							| 
									
										
										
										
											2013-06-01 21:06:10 +04:00
										 |  |  | 			function(){ | 
					
						
							|  |  |  | 				SLIDESHOW_LOOP = SLIDESHOW_LOOP ? false : true | 
					
						
							|  |  |  | 				showStatus('Slideshow: looping', SLIDESHOW_LOOP ? 'enabled...' : 'disabled...') | 
					
						
							|  |  |  | 				return false | 
					
						
							|  |  |  | 			}), | 
					
						
							|  |  |  | 		R: doc('Reverse slideshow direction', | 
					
						
							|  |  |  | 			function(){ | 
					
						
							|  |  |  | 				SLIDESHOW_DIRECTION = SLIDESHOW_DIRECTION == 'next' ? 'prev' : 'next' | 
					
						
							|  |  |  | 				showStatus('Slideshow: direction:', SLIDESHOW_DIRECTION + '...') | 
					
						
							|  |  |  | 				return false | 
					
						
							|  |  |  | 			}), | 
					
						
							| 
									
										
										
										
											2013-06-01 19:54:46 +04:00
										 |  |  | 		Esc: doc('Exit/stop slideshow',  | 
					
						
							| 
									
										
										
										
											2013-06-01 21:06:10 +04:00
										 |  |  | 			function(){  | 
					
						
							|  |  |  | 				toggleSlideShowMode('off')  | 
					
						
							|  |  |  | 				return false | 
					
						
							|  |  |  | 			}), | 
					
						
							| 
									
										
										
										
											2013-06-01 19:54:46 +04:00
										 |  |  | 		S: 'Esc', | 
					
						
							|  |  |  | 		Q: 'Esc', | 
					
						
							|  |  |  | 	}, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-16 03:34:18 +04:00
										 |  |  | 	'Single image view': { | 
					
						
							| 
									
										
										
										
											2013-10-20 01:55:20 +04:00
										 |  |  | 		doc: 'To toggle between this and ribbon view press <b>Enter</b>.', | 
					
						
							| 
									
										
										
										
											2014-01-16 03:34:18 +04:00
										 |  |  | 		pattern: '.single-image-mode', | 
					
						
							| 
									
										
										
										
											2013-05-28 15:22:05 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-10-20 01:55:20 +04:00
										 |  |  | 		Esc: doc('Exit single image view',  | 
					
						
							| 
									
										
										
										
											2013-05-30 03:26:49 +04:00
										 |  |  | 				function(){  | 
					
						
							|  |  |  | 					toggleSingleImageMode('off')  | 
					
						
							|  |  |  | 					return false | 
					
						
							|  |  |  | 				}), | 
					
						
							| 
									
										
										
										
											2013-05-28 15:22:05 +04:00
										 |  |  | 		Q: 'Esc', | 
					
						
							| 
									
										
										
										
											2012-09-10 04:23:48 +04:00
										 |  |  | 	}, | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-30 03:26:49 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-16 03:34:18 +04:00
										 |  |  | 	'Cropped ribbon views': { | 
					
						
							| 
									
										
										
										
											2013-11-26 18:34:56 +04:00
										 |  |  | 		doc: 'To crop marked images press <b>shift-F2</b> for '+ | 
					
						
							|  |  |  | 			'single ribbon crop view press <b>F3</b> and to open the crop '+ | 
					
						
							|  |  |  | 			'dialog for more options press <b>C</b>.'+ | 
					
						
							| 
									
										
										
										
											2013-10-20 01:55:20 +04:00
										 |  |  | 			'<p>NOTE: toggling crop views is only possible from ribbon view.', | 
					
						
							| 
									
										
										
										
											2014-02-02 05:23:13 +04:00
										 |  |  | 		pattern: '.cropped-view:not(.single-image-mode)', | 
					
						
							| 
									
										
										
										
											2012-09-10 04:23:48 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-21 03:09:19 +04:00
										 |  |  | 		Esc: { | 
					
						
							|  |  |  | 				default: doc('Uncrop to last state',  | 
					
						
							|  |  |  | 					function(){  | 
					
						
							| 
									
										
										
										
											2014-02-02 05:23:13 +04:00
										 |  |  | 						uncropData() | 
					
						
							| 
									
										
										
										
											2013-09-21 03:09:19 +04:00
										 |  |  | 						return false | 
					
						
							|  |  |  | 					}), | 
					
						
							| 
									
										
										
										
											2013-10-20 01:55:20 +04:00
										 |  |  | 				shift: doc('Exit crop view',  | 
					
						
							| 
									
										
										
										
											2013-09-21 03:09:19 +04:00
										 |  |  | 					function(){  | 
					
						
							|  |  |  | 						toggleMarkedOnlyView('off')  | 
					
						
							|  |  |  | 						toggleSingleRibbonMode('off')  | 
					
						
							|  |  |  | 						return false | 
					
						
							|  |  |  | 					}), | 
					
						
							|  |  |  | 			}, | 
					
						
							| 
									
										
										
										
											2013-05-30 07:29:07 +04:00
										 |  |  | 		Q: 'Esc', | 
					
						
							| 
									
										
										
										
											2013-05-28 15:22:05 +04:00
										 |  |  | 	}, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-05 15:39:18 +04:00
										 |  |  | 	// visible marks...
 | 
					
						
							|  |  |  | 	//
 | 
					
						
							| 
									
										
										
										
											2013-10-20 01:55:20 +04:00
										 |  |  | 	/* XXX does this work??? | 
					
						
							|  |  |  | 	 * 		...appears to be overtaken by every Esc definition before, | 
					
						
							|  |  |  | 	 * 		and every single one of them returns false... | 
					
						
							| 
									
										
										
										
											2013-06-05 15:39:18 +04:00
										 |  |  | 	'.marks-visible': { | 
					
						
							|  |  |  | 		title: 'Visible marks', | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		Esc: doc('Hide marks',  | 
					
						
							|  |  |  | 				function(){  | 
					
						
							| 
									
										
										
										
											2013-12-30 03:15:09 +04:00
										 |  |  | 					toggleMarksView('off') | 
					
						
							| 
									
										
										
										
											2013-06-05 15:39:18 +04:00
										 |  |  | 					return false | 
					
						
							|  |  |  | 				}), | 
					
						
							|  |  |  | 	}, | 
					
						
							| 
									
										
										
										
											2013-10-20 01:55:20 +04:00
										 |  |  | 	*/ | 
					
						
							| 
									
										
										
										
											2013-06-05 15:39:18 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-16 04:07:34 +04:00
										 |  |  | 	// NOTE: these bindings apply ONLY to ribbon view...
 | 
					
						
							| 
									
										
										
										
											2013-06-04 01:33:06 +04:00
										 |  |  | 	// XXX this breaks getKeyHandlers(...) when modes argument is given...
 | 
					
						
							| 
									
										
										
										
											2014-01-16 03:34:18 +04:00
										 |  |  | 	'Ribbon view': { | 
					
						
							|  |  |  | 		pattern: '.viewer:not(.overlay):not(.single-image-mode)', | 
					
						
							| 
									
										
										
										
											2014-01-18 11:37:08 +04:00
										 |  |  | 		ignore: [ '#1', '#2', '#3', '#4', '#5', '#6', '#7', '#8', '#9', '#0' ], | 
					
						
							| 
									
										
										
										
											2013-06-03 23:36:40 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		Left: { | 
					
						
							| 
									
										
										
										
											2014-01-01 07:41:53 +04:00
										 |  |  | 				// XXX revise...
 | 
					
						
							| 
									
										
										
										
											2013-06-03 23:36:40 +04:00
										 |  |  | 				alt: doc('Shift image left',  | 
					
						
							|  |  |  | 					function(){  | 
					
						
							|  |  |  | 						event.preventDefault() | 
					
						
							|  |  |  | 						shiftImageLeft()  | 
					
						
							|  |  |  | 						centerView(null, 'css') | 
					
						
							|  |  |  | 						// XXX for some odd reason centerRibbons does 
 | 
					
						
							| 
									
										
										
										
											2014-01-01 07:41:53 +04:00
										 |  |  | 						// 		something really odd here -- images get to
 | 
					
						
							|  |  |  | 						// 		correct positions but the align is totally 
 | 
					
						
							|  |  |  | 						// 		wrong...
 | 
					
						
							|  |  |  | 						// 		...race condition???
 | 
					
						
							| 
									
										
										
										
											2013-06-03 23:36:40 +04:00
										 |  |  | 						//centerRibbons()
 | 
					
						
							|  |  |  | 						// XXX HACK...
 | 
					
						
							|  |  |  | 						if(window._center_ribbon_delay != null){ | 
					
						
							|  |  |  | 							clearTimeout(_center_ribbon_delay) | 
					
						
							|  |  |  | 						} | 
					
						
							|  |  |  | 						_center_ribbon_delay = setTimeout( | 
					
						
							|  |  |  | 							function(){  | 
					
						
							|  |  |  | 								centerRibbons()  | 
					
						
							|  |  |  | 							}, 300) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 						return false | 
					
						
							|  |  |  | 					}), | 
					
						
							| 
									
										
										
										
											2013-12-04 23:33:35 +04:00
										 |  |  | 				ctrl: 'prev-screen', | 
					
						
							| 
									
										
										
										
											2013-06-03 23:36:40 +04:00
										 |  |  | 			}, | 
					
						
							|  |  |  | 		Right: { | 
					
						
							| 
									
										
										
										
											2014-01-01 07:41:53 +04:00
										 |  |  | 				// XXX revise...
 | 
					
						
							| 
									
										
										
										
											2013-06-03 23:36:40 +04:00
										 |  |  | 				alt: doc('Shift image right',  | 
					
						
							|  |  |  | 					function(){  | 
					
						
							|  |  |  | 						event.preventDefault() | 
					
						
							|  |  |  | 						shiftImageRight()  | 
					
						
							|  |  |  | 						centerView(null, 'css') | 
					
						
							|  |  |  | 						// XXX for some odd reason centerRibbons does 
 | 
					
						
							| 
									
										
										
										
											2014-01-01 07:41:53 +04:00
										 |  |  | 						// 		something really odd here -- images get to
 | 
					
						
							|  |  |  | 						// 		correct positions but the align is totally 
 | 
					
						
							|  |  |  | 						// 		wrong...
 | 
					
						
							|  |  |  | 						// 		...race condition???
 | 
					
						
							| 
									
										
										
										
											2013-06-03 23:36:40 +04:00
										 |  |  | 						//centerRibbons()
 | 
					
						
							|  |  |  | 						// XXX HACK...
 | 
					
						
							|  |  |  | 						if(window._center_ribbon_delay != null){ | 
					
						
							|  |  |  | 							clearTimeout(_center_ribbon_delay) | 
					
						
							|  |  |  | 						} | 
					
						
							|  |  |  | 						_center_ribbon_delay = setTimeout( | 
					
						
							|  |  |  | 							function(){  | 
					
						
							|  |  |  | 								centerRibbons()  | 
					
						
							|  |  |  | 							}, 300) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 						return false | 
					
						
							|  |  |  | 					}), | 
					
						
							| 
									
										
										
										
											2013-12-04 23:33:35 +04:00
										 |  |  | 				ctrl: 'next-screen', | 
					
						
							|  |  |  | 			}, | 
					
						
							| 
									
										
										
										
											2014-10-09 03:22:27 +04:00
										 |  |  | 		PgUp: 'next-screen', | 
					
						
							|  |  |  | 		PgDown: 'prev-screen', | 
					
						
							| 
									
										
										
										
											2013-12-04 23:33:35 +04:00
										 |  |  | 		'prev-screen': doc('Previous screen', | 
					
						
							|  |  |  | 				function(){  | 
					
						
							|  |  |  | 					event.preventDefault() | 
					
						
							|  |  |  | 					prevScreenImages() | 
					
						
							|  |  |  | 					centerRibbons() | 
					
						
							|  |  |  | 				}), | 
					
						
							|  |  |  | 		'next-screen': doc('Next screen', | 
					
						
							|  |  |  | 				function(){  | 
					
						
							|  |  |  | 					event.preventDefault() | 
					
						
							|  |  |  | 					nextScreenImages() | 
					
						
							|  |  |  | 					centerRibbons() | 
					
						
							|  |  |  | 				}), | 
					
						
							|  |  |  | 		Space: { | 
					
						
							|  |  |  | 				// screen-oriented movement...
 | 
					
						
							|  |  |  | 				ctrl: 'Right', | 
					
						
							|  |  |  | 				'ctrl+shift': 'prev-screen', | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 		Backspace: { | 
					
						
							|  |  |  | 				// screen-oriented movement...
 | 
					
						
							|  |  |  | 				ctrl: 'Left', | 
					
						
							|  |  |  | 				'ctrl+shift': 'next-screen', | 
					
						
							| 
									
										
										
										
											2013-06-03 23:36:40 +04:00
										 |  |  | 			}, | 
					
						
							| 
									
										
										
										
											2013-06-08 21:32:22 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-14 18:07:41 +04:00
										 |  |  | 		// align to base ribbon...
 | 
					
						
							|  |  |  | 		// XXX base ribbon concept is not yet fully defined...
 | 
					
						
							| 
									
										
										
										
											2015-03-03 22:40:07 +03:00
										 |  |  | 		'align-to-ribbon': doc('Align sorted section to current ribbon (EXPERIMENTAL)', | 
					
						
							|  |  |  | 			function(){ | 
					
						
							|  |  |  | 				alignRibbons() | 
					
						
							|  |  |  | 			}), | 
					
						
							| 
									
										
										
										
											2014-01-14 18:07:41 +04:00
										 |  |  | 		Down: { | 
					
						
							| 
									
										
										
										
											2015-03-03 22:40:07 +03:00
										 |  |  | 				'ctrl+alt': 'align-to-ribbon', | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 		A: { | 
					
						
							|  |  |  | 				'ctrl+alt': 'align-to-ribbon', | 
					
						
							| 
									
										
										
										
											2014-01-14 18:07:41 +04:00
										 |  |  | 			}, | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-08 21:32:22 +04:00
										 |  |  | 		// zooming...
 | 
					
						
							| 
									
										
										
										
											2014-01-18 11:37:08 +04:00
										 |  |  | 		'#1': doc('Fit one image', function(){ fitNImages(1) }), | 
					
						
							|  |  |  | 		'#2': doc('Fit two images', function(){ fitNImages(2) }), | 
					
						
							|  |  |  | 		'#3': doc('Fit three images', function(){ fitNImages(3) }), | 
					
						
							|  |  |  | 		'#4': doc('Fit four images', function(){ fitNImages(4) }), | 
					
						
							|  |  |  | 		'#5': doc('Fit five images', function(){ fitNImages(5) }), | 
					
						
							|  |  |  | 		'#6': doc('Fit six images', function(){ fitNImages(6) }), | 
					
						
							|  |  |  | 		'#7': doc('Fit seven images', function(){ fitNImages(7) }), | 
					
						
							|  |  |  | 		'#8': doc('Fit eight images', function(){ fitNImages(8) }), | 
					
						
							|  |  |  | 		'#9': doc('Fit nine images', function(){ fitNImages(9) }), | 
					
						
							|  |  |  | 		'#0': doc('Fit maximum images', function(){ fitNImages(getScreenWidthInImages(CONFIG.min_image_size)) }), | 
					
						
							| 
									
										
										
										
											2013-06-08 21:32:22 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-21 06:44:22 +04:00
										 |  |  | 		// cropping...
 | 
					
						
							| 
									
										
										
										
											2013-11-26 18:34:56 +04:00
										 |  |  | 		C: doc('Show ribbon crop dialog', cropImagesDialog), | 
					
						
							| 
									
										
										
										
											2014-01-13 06:37:08 +04:00
										 |  |  | 		F: doc('Filter images', filterImagesDialog), | 
					
						
							| 
									
										
										
										
											2013-11-16 02:26:40 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-11-09 15:03:49 +04:00
										 |  |  | 		// XXX add a non FXX key for macs...
 | 
					
						
							| 
									
										
										
										
											2013-09-21 06:44:22 +04:00
										 |  |  | 		F2: { | 
					
						
							|  |  |  | 				shift: doc('Crop marked only images',  | 
					
						
							|  |  |  | 					function(){ | 
					
						
							|  |  |  | 						toggleMarkedOnlyView('on') | 
					
						
							|  |  |  | 						// prevent the default from the main mode from 
 | 
					
						
							|  |  |  | 						// getting called...
 | 
					
						
							|  |  |  | 						return false | 
					
						
							|  |  |  | 					}), | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-11-09 15:03:49 +04:00
										 |  |  | 		// XXX add a non FXX key for macs...
 | 
					
						
							| 
									
										
										
										
											2013-09-21 06:44:22 +04:00
										 |  |  | 		F3: doc('Crop single ribbon',  | 
					
						
							|  |  |  | 			function(){ | 
					
						
							|  |  |  | 				event.preventDefault() | 
					
						
							|  |  |  | 				toggleSingleRibbonMode('on') | 
					
						
							|  |  |  | 			}), | 
					
						
							| 
									
										
										
										
											2013-06-03 23:36:40 +04:00
										 |  |  | 	}, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-16 04:07:34 +04:00
										 |  |  | 	// general bindings...
 | 
					
						
							| 
									
										
										
										
											2013-05-30 19:15:38 +04:00
										 |  |  | 	//
 | 
					
						
							| 
									
										
										
										
											2014-01-16 03:34:18 +04:00
										 |  |  | 	'Viewer': { | 
					
						
							| 
									
										
										
										
											2013-10-20 01:55:20 +04:00
										 |  |  | 		doc: 'These key bindings work in most other viewer views.'+ | 
					
						
							| 
									
										
										
										
											2013-06-03 21:10:42 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-05 01:19:19 +04:00
										 |  |  | 			'<p>NOTE: shifting all marked images from different ribbons will '+ | 
					
						
							| 
									
										
										
										
											2013-06-02 23:07:18 +04:00
										 |  |  | 			'perform the operations on ALL marked images but relative '+ | 
					
						
							| 
									
										
										
										
											2013-06-05 01:19:19 +04:00
										 |  |  | 			'the the current ribbon. i.e. some images might get promoted, '+ | 
					
						
							|  |  |  | 			'others demoted while some will not change position. ', | 
					
						
							| 
									
										
										
										
											2014-01-16 03:34:18 +04:00
										 |  |  | 		pattern: '.viewer:not(.overlay)', | 
					
						
							| 
									
										
										
										
											2013-06-02 20:28:42 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-02 18:29:56 +04:00
										 |  |  | 		// Basics...
 | 
					
						
							|  |  |  | 		// XXX STUB: use a real path browser...
 | 
					
						
							|  |  |  | 		O: doc('Open a directory path', | 
					
						
							|  |  |  | 			function(){ | 
					
						
							| 
									
										
										
										
											2013-06-22 17:54:15 +04:00
										 |  |  | 				loadDirectoryDialog() | 
					
						
							| 
									
										
										
										
											2013-06-02 18:29:56 +04:00
										 |  |  | 			}), | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-28 15:22:05 +04:00
										 |  |  | 		// Navigation...
 | 
					
						
							|  |  |  | 		// XXX need to cancel the animation of the prev action...
 | 
					
						
							|  |  |  | 		Left: { | 
					
						
							|  |  |  | 				default: doc('Previous image', | 
					
						
							|  |  |  | 					function(){  | 
					
						
							|  |  |  | 						event.preventDefault() | 
					
						
							|  |  |  | 						// update direction...
 | 
					
						
							| 
									
										
										
										
											2013-06-02 20:28:42 +04:00
										 |  |  | 						updateDirection('prev') | 
					
						
							| 
									
										
										
										
											2013-05-28 15:22:05 +04:00
										 |  |  | 						prevImage()  | 
					
						
							|  |  |  | 						centerRibbons() | 
					
						
							|  |  |  | 					}), | 
					
						
							| 
									
										
										
										
											2013-11-25 06:57:40 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 				// XXX button not final...
 | 
					
						
							|  |  |  | 				'ctrl+shift': doc('Previous URL in history', loadURLHistoryPrev ), | 
					
						
							| 
									
										
										
										
											2013-05-28 15:22:05 +04:00
										 |  |  | 			}, | 
					
						
							|  |  |  | 		Right: { | 
					
						
							|  |  |  | 				default: doc('Next image', | 
					
						
							|  |  |  | 					function(){  | 
					
						
							|  |  |  | 						event.preventDefault() | 
					
						
							|  |  |  | 						// update direction...
 | 
					
						
							| 
									
										
										
										
											2013-06-02 20:28:42 +04:00
										 |  |  | 						updateDirection('next') | 
					
						
							| 
									
										
										
										
											2013-05-28 15:22:05 +04:00
										 |  |  | 						nextImage()  | 
					
						
							|  |  |  | 						centerRibbons() | 
					
						
							|  |  |  | 					}), | 
					
						
							| 
									
										
										
										
											2013-11-25 06:57:40 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 				// XXX button not final...
 | 
					
						
							|  |  |  | 				'ctrl+shift': doc('Next URL in history', loadURLHistoryNext ), | 
					
						
							| 
									
										
										
										
											2013-05-28 15:22:05 +04:00
										 |  |  | 			}, | 
					
						
							|  |  |  | 		Space: { | 
					
						
							|  |  |  | 				default: 'Right', | 
					
						
							|  |  |  | 				shift: 'Left', | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 		Backspace: { | 
					
						
							|  |  |  | 				default: 'Left', | 
					
						
							|  |  |  | 				shift: 'Right', | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 		Home: doc('First image',  | 
					
						
							|  |  |  | 			function(){ | 
					
						
							|  |  |  | 				event.preventDefault() | 
					
						
							|  |  |  | 				firstImage() | 
					
						
							|  |  |  | 				centerRibbons() | 
					
						
							|  |  |  | 			}), | 
					
						
							|  |  |  | 		End: doc('Last image', | 
					
						
							|  |  |  | 			function(){ | 
					
						
							|  |  |  | 				event.preventDefault() | 
					
						
							|  |  |  | 				lastImage() | 
					
						
							|  |  |  | 				centerRibbons() | 
					
						
							|  |  |  | 			}), | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-02 10:07:04 +04:00
										 |  |  | 		// bookmark navigation...
 | 
					
						
							|  |  |  | 		'[': doc('Previous bookmarked image',  | 
					
						
							|  |  |  | 				function(){ prevBookmark() }), | 
					
						
							|  |  |  | 		']': doc('Next bookmarked image',  | 
					
						
							|  |  |  | 				function(){ nextBookmark() }), | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		// marked/unmarked navigation...
 | 
					
						
							|  |  |  | 		',': { | 
					
						
							|  |  |  | 				default: doc('Previous marked image',  | 
					
						
							|  |  |  | 					function(){ prevMark() }), | 
					
						
							|  |  |  | 				shift: doc('Previous unmarked image', | 
					
						
							|  |  |  | 					function(){ prevUnmarked() }), | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 		'.': { | 
					
						
							|  |  |  | 				default: doc('Next marked image',  | 
					
						
							|  |  |  | 					function(){ nextMark() }), | 
					
						
							|  |  |  | 				shift: doc('Next unmarked image', | 
					
						
							|  |  |  | 					function(){ nextUnmarked() }), | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		// sorted section navigation...
 | 
					
						
							|  |  |  | 		'{': doc('Previous unsorted section edge',  | 
					
						
							|  |  |  | 				function(){ prevUnsortedSection() }), | 
					
						
							|  |  |  | 		'}': doc('Next unsorted section edge',  | 
					
						
							|  |  |  | 				function(){ nextUnsortedSection() }), | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-28 15:22:05 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		// combined navigation and editor actions...
 | 
					
						
							|  |  |  | 		Up: { | 
					
						
							|  |  |  | 				default: doc('Go to ribbon above',  | 
					
						
							|  |  |  | 					function(){  | 
					
						
							|  |  |  | 						event.preventDefault() | 
					
						
							|  |  |  | 						prevRibbon()  | 
					
						
							|  |  |  | 						centerRibbons() | 
					
						
							|  |  |  | 					}), | 
					
						
							|  |  |  | 				shift: doc('Shift image up', | 
					
						
							|  |  |  | 					function(){  | 
					
						
							|  |  |  | 						event.preventDefault() | 
					
						
							|  |  |  | 						shiftImageUp(null, DIRECTION)  | 
					
						
							|  |  |  | 						centerRibbons() | 
					
						
							|  |  |  | 					}), | 
					
						
							| 
									
										
										
										
											2014-01-02 10:20:44 +04:00
										 |  |  | 				'ctrl+shift': doc('Shift image up to new ribbon', | 
					
						
							| 
									
										
										
										
											2013-05-28 15:22:05 +04:00
										 |  |  | 					function(){ | 
					
						
							|  |  |  | 						event.preventDefault() | 
					
						
							|  |  |  | 						shiftImageUpNewRibbon(null, DIRECTION)  | 
					
						
							|  |  |  | 						centerRibbons() | 
					
						
							|  |  |  | 					}), | 
					
						
							| 
									
										
										
										
											2013-06-02 23:07:18 +04:00
										 |  |  | 				alt: doc('Shift marked images up', | 
					
						
							|  |  |  | 					function(){ | 
					
						
							| 
									
										
										
										
											2013-12-30 03:15:09 +04:00
										 |  |  | 						toggleMarksView('on') | 
					
						
							| 
									
										
										
										
											2013-06-02 23:57:30 +04:00
										 |  |  | 						shiftMarkedImagesUp() | 
					
						
							| 
									
										
										
										
											2013-06-02 23:07:18 +04:00
										 |  |  | 					}), | 
					
						
							| 
									
										
										
										
											2014-01-02 10:20:44 +04:00
										 |  |  | 				'alt+shift': doc('Shift marked images up to new ribbon', | 
					
						
							| 
									
										
										
										
											2013-06-02 23:07:18 +04:00
										 |  |  | 					function(){ | 
					
						
							|  |  |  | 						// XXX
 | 
					
						
							|  |  |  | 					}), | 
					
						
							| 
									
										
										
										
											2013-05-28 15:22:05 +04:00
										 |  |  | 			}, | 
					
						
							|  |  |  | 		Down: { | 
					
						
							|  |  |  | 				default: doc('Go to ribbon below',  | 
					
						
							|  |  |  | 					function(){ | 
					
						
							|  |  |  | 						event.preventDefault() | 
					
						
							|  |  |  | 						nextRibbon()  | 
					
						
							|  |  |  | 						centerRibbons() | 
					
						
							|  |  |  | 					}), | 
					
						
							|  |  |  | 				shift: doc('Shift image down', | 
					
						
							|  |  |  | 					function(){  | 
					
						
							|  |  |  | 						event.preventDefault() | 
					
						
							|  |  |  | 						shiftImageDown(null, DIRECTION)  | 
					
						
							|  |  |  | 						centerRibbons() | 
					
						
							|  |  |  | 					}), | 
					
						
							| 
									
										
										
										
											2014-01-02 10:20:44 +04:00
										 |  |  | 				'ctrl+shift': doc('Shift image down to new ribbon', | 
					
						
							| 
									
										
										
										
											2013-05-28 15:22:05 +04:00
										 |  |  | 					function(){ | 
					
						
							|  |  |  | 						event.preventDefault() | 
					
						
							|  |  |  | 						shiftImageDownNewRibbon(null, DIRECTION)  | 
					
						
							|  |  |  | 						centerRibbons() | 
					
						
							|  |  |  | 					}), | 
					
						
							| 
									
										
										
										
											2013-06-02 23:07:18 +04:00
										 |  |  | 				alt: doc('Shift marked images down', | 
					
						
							|  |  |  | 					function(){ | 
					
						
							| 
									
										
										
										
											2013-12-30 03:15:09 +04:00
										 |  |  | 						toggleMarksView('on') | 
					
						
							| 
									
										
										
										
											2013-06-02 23:57:30 +04:00
										 |  |  | 						shiftMarkedImagesDown() | 
					
						
							| 
									
										
										
										
											2013-06-02 23:07:18 +04:00
										 |  |  | 					}), | 
					
						
							| 
									
										
										
										
											2014-01-02 10:20:44 +04:00
										 |  |  | 				'alt+shift': doc('Shift marked images down to new ribbon', | 
					
						
							| 
									
										
										
										
											2013-06-02 23:07:18 +04:00
										 |  |  | 					function(){ | 
					
						
							|  |  |  | 						// XXX
 | 
					
						
							|  |  |  | 					}), | 
					
						
							| 
									
										
										
										
											2013-05-28 15:22:05 +04:00
										 |  |  | 			}, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		L: doc('Rotate image left', function(){ rotateLeft() }), | 
					
						
							| 
									
										
										
										
											2013-06-01 23:12:32 +04:00
										 |  |  | 		R: { | 
					
						
							|  |  |  | 				default: doc('Rotate image right',  | 
					
						
							|  |  |  | 					function(){ rotateRight() }), | 
					
						
							|  |  |  | 				ctrl: doc('Reverse image order',  | 
					
						
							| 
									
										
										
										
											2013-06-02 20:14:39 +04:00
										 |  |  | 					function(){  | 
					
						
							|  |  |  | 						event.preventDefault() | 
					
						
							|  |  |  | 						reverseImageOrder()  | 
					
						
							|  |  |  | 					}), | 
					
						
							| 
									
										
										
										
											2013-06-01 23:12:32 +04:00
										 |  |  | 			}, | 
					
						
							| 
									
										
										
										
											2013-11-26 18:34:56 +04:00
										 |  |  | 		H: { | 
					
						
							|  |  |  | 			   default: doc('Flip image horizontally',  | 
					
						
							|  |  |  | 					function(){  | 
					
						
							|  |  |  | 						var o = getImage().attr('orientation') | 
					
						
							|  |  |  | 						// need to rotate relative to user, not relative to image...
 | 
					
						
							|  |  |  | 						if(o == 90 || o == 270){ | 
					
						
							|  |  |  | 						   flipVertical()  | 
					
						
							|  |  |  | 						} else { | 
					
						
							|  |  |  | 							flipHorizontal()  | 
					
						
							|  |  |  | 						} | 
					
						
							|  |  |  | 					}), | 
					
						
							|  |  |  | 				ctrl: doc('Show recently opend urls', | 
					
						
							|  |  |  | 					function(){ | 
					
						
							|  |  |  | 						recentlyOpenedDialog() | 
					
						
							|  |  |  | 					}), | 
					
						
							|  |  |  | 		   }, | 
					
						
							| 
									
										
										
										
											2013-06-04 21:45:36 +04:00
										 |  |  | 		V: doc('Flip image vertically',  | 
					
						
							| 
									
										
										
										
											2014-01-16 04:07:34 +04:00
										 |  |  | 				function(){  | 
					
						
							|  |  |  | 					var o = getImage().attr('orientation') | 
					
						
							|  |  |  | 					// need to rotate relative to user, not relative to image...
 | 
					
						
							|  |  |  | 					if(o == 90 || o == 270){ | 
					
						
							|  |  |  | 						flipHorizontal()  | 
					
						
							|  |  |  | 					} else { | 
					
						
							|  |  |  | 						flipVertical()  | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 				}), | 
					
						
							| 
									
										
										
										
											2013-05-28 15:22:05 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-09-10 04:23:48 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-09-10 03:02:34 +04:00
										 |  |  | 		// zooming...
 | 
					
						
							| 
									
										
										
										
											2013-06-10 07:49:20 +04:00
										 |  |  | 		'#1': doc('Fit image to screen', function(){ fitNImages(1) }), | 
					
						
							| 
									
										
										
										
											2014-01-16 04:07:34 +04:00
										 |  |  | 		'#2': doc('Show big image',  | 
					
						
							|  |  |  | 				function(){  | 
					
						
							|  |  |  | 					fitNImages(CONFIG.single_image_view_scale_2)  | 
					
						
							|  |  |  | 				}), | 
					
						
							|  |  |  | 		'#3': doc('Show small image',  | 
					
						
							|  |  |  | 				function(){  | 
					
						
							|  |  |  | 					fitNImages(CONFIG.single_image_view_scale_3)  | 
					
						
							|  |  |  | 				}), | 
					
						
							| 
									
										
										
										
											2013-06-09 02:26:22 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-28 15:22:05 +04:00
										 |  |  | 		'-': doc('Zoom in', function(){ zoomOut() }), | 
					
						
							|  |  |  | 		'=': doc('Zoom out', function(){ zoomIn() }), | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		Enter: doc('Toggle single image view',  | 
					
						
							|  |  |  | 				function(){ toggleSingleImageMode() }), | 
					
						
							| 
									
										
										
										
											2013-12-13 03:39:23 +04:00
										 |  |  | 		B: { | 
					
						
							|  |  |  | 				default: doc('Toggle theme',  | 
					
						
							|  |  |  | 					function(){ toggleTheme() }), | 
					
						
							|  |  |  | 				ctrl: doc('Toggle bookmark',  | 
					
						
							|  |  |  | 					function(){ toggleBookmark() }), | 
					
						
							| 
									
										
										
										
											2014-02-10 05:10:55 +04:00
										 |  |  | 				'ctrl+shift': doc('Remove all bookmarks', | 
					
						
							|  |  |  | 					function(){ removeAllBookmarks() }), | 
					
						
							| 
									
										
										
										
											2013-12-13 03:39:23 +04:00
										 |  |  | 			}, | 
					
						
							| 
									
										
										
										
											2013-05-28 15:22:05 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		S: { | 
					
						
							| 
									
										
										
										
											2013-06-01 19:54:46 +04:00
										 |  |  | 				default: doc('Start slideshow',  | 
					
						
							|  |  |  | 					function(){ toggleSlideShowMode('on') }), | 
					
						
							| 
									
										
										
										
											2013-06-22 17:54:15 +04:00
										 |  |  | 				shift: doc('Sort images', | 
					
						
							|  |  |  | 					function(){ | 
					
						
							|  |  |  | 						sortImagesDialog() | 
					
						
							|  |  |  | 					}), | 
					
						
							| 
									
										
										
										
											2013-05-28 15:22:05 +04:00
										 |  |  | 				ctrl: doc('Save current state',  | 
					
						
							|  |  |  | 					function(){ | 
					
						
							|  |  |  | 						event.preventDefault() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-08 01:48:22 +04:00
										 |  |  | 						showStatusQ('Saving: localStorage: Settings.') | 
					
						
							| 
									
										
										
										
											2013-05-28 15:22:05 +04:00
										 |  |  | 						saveLocalStorageSettings() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 						saveFileState() | 
					
						
							| 
									
										
										
										
											2013-06-08 01:48:22 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 						showStatusQ('Saving: Done.') | 
					
						
							| 
									
										
										
										
											2013-06-21 16:58:33 +04:00
										 |  |  | 					}), | 
					
						
							|  |  |  | 				'ctrl+shift': doc('Export', | 
					
						
							|  |  |  | 					function(){ | 
					
						
							| 
									
										
										
										
											2013-06-22 17:54:15 +04:00
										 |  |  | 						exportPreviewsDialog() | 
					
						
							| 
									
										
										
										
											2013-06-21 16:58:33 +04:00
										 |  |  | 					}),  | 
					
						
							| 
									
										
										
										
											2014-01-14 05:18:44 +04:00
										 |  |  | 				// NOTE: this will not delete anything, just merge all the diffs 
 | 
					
						
							|  |  |  | 				// 		into a single, redundent images.json.
 | 
					
						
							|  |  |  | 				// 		this will make loading faster...
 | 
					
						
							|  |  |  | 				'ctrl+alt': doc('Compact image data.', | 
					
						
							|  |  |  | 					function(){ | 
					
						
							|  |  |  | 						showStatusQ('Merging: images diffs.') | 
					
						
							|  |  |  | 						saveFileImages() | 
					
						
							|  |  |  | 					}), | 
					
						
							| 
									
										
										
										
											2013-05-28 15:22:05 +04:00
										 |  |  | 			}, | 
					
						
							|  |  |  | 		Z: { | 
					
						
							|  |  |  | 				ctrl: doc('Restore to last saved state',  | 
					
						
							|  |  |  | 					function(){ | 
					
						
							|  |  |  | 						loadLocalStorage() | 
					
						
							|  |  |  | 						loadLocalStorageMarks() | 
					
						
							|  |  |  | 					}) | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		// marking...
 | 
					
						
							|  |  |  | 		// XXX not final, think of a better way to do this...
 | 
					
						
							|  |  |  | 		// XXX need mark navigation...
 | 
					
						
							|  |  |  | 		// 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...
 | 
					
						
							|  |  |  | 		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...
 | 
					
						
							| 
									
										
										
										
											2013-06-08 00:33:21 +04:00
										 |  |  | 				// XXX  should this toggle or set mark to on?
 | 
					
						
							| 
									
										
										
										
											2013-05-28 15:22:05 +04:00
										 |  |  | 				default: doc('Mark current image and advance', | 
					
						
							| 
									
										
										
										
											2015-02-15 21:59:14 +03:00
										 |  |  | 					function(){ toggleMark() }), | 
					
						
							| 
									
										
										
										
											2013-12-05 03:58:13 +04:00
										 |  |  | 				ctrl: doc('Show mark dialog', function(){ markImagesDialog() }), | 
					
						
							| 
									
										
										
										
											2013-05-28 15:22:05 +04:00
										 |  |  | 			}, | 
					
						
							| 
									
										
										
										
											2013-12-14 06:29:22 +04:00
										 |  |  | 		Ins: doc('Toggle mark on current image', function(){ toggleMark() }), | 
					
						
							| 
									
										
										
										
											2015-02-15 21:59:14 +03:00
										 |  |  | 		'invert-marks': doc('Invert image marks', function(){ invertImageMarks() }), | 
					
						
							| 
									
										
										
										
											2013-05-28 15:22:05 +04:00
										 |  |  | 		A: { | 
					
						
							| 
									
										
										
										
											2013-05-30 19:15:38 +04:00
										 |  |  | 			  	// XXX does not yet work with DATA (???)
 | 
					
						
							|  |  |  | 				//shift: doc('Toggle marks in current contagious block', 
 | 
					
						
							| 
									
										
										
										
											2013-12-14 06:29:22 +04:00
										 |  |  | 				//	function(){ toggleMarkBlock() }),
 | 
					
						
							| 
									
										
										
										
											2013-05-30 19:15:38 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-28 15:22:05 +04:00
										 |  |  | 				ctrl: doc('Mark current ribbon',  | 
					
						
							| 
									
										
										
										
											2013-06-16 02:42:29 +04:00
										 |  |  | 					function(){  | 
					
						
							| 
									
										
										
										
											2013-12-30 03:15:09 +04:00
										 |  |  | 						toggleMarksView('on') | 
					
						
							| 
									
										
										
										
											2013-06-16 02:42:29 +04:00
										 |  |  | 						markAll('ribbon')  | 
					
						
							|  |  |  | 					}), | 
					
						
							| 
									
										
										
										
											2013-05-30 19:15:38 +04:00
										 |  |  | 				'ctrl+shift': doc('Mark all images',  | 
					
						
							| 
									
										
										
										
											2013-06-16 02:42:29 +04:00
										 |  |  | 					function(){  | 
					
						
							| 
									
										
										
										
											2013-12-30 03:15:09 +04:00
										 |  |  | 						toggleMarksView('on') | 
					
						
							| 
									
										
										
										
											2013-06-16 02:42:29 +04:00
										 |  |  | 						markAll('all')  | 
					
						
							|  |  |  | 					}), | 
					
						
							| 
									
										
										
										
											2013-05-30 19:15:38 +04:00
										 |  |  | 			}, | 
					
						
							| 
									
										
										
										
											2014-01-20 06:18:36 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-18 05:26:06 +04:00
										 |  |  | 		'unmark-ribbon': doc('Unmark current ribbon',  | 
					
						
							|  |  |  | 				function(){  | 
					
						
							|  |  |  | 					event.preventDefault() | 
					
						
							| 
									
										
										
										
											2014-01-20 06:18:36 +04:00
										 |  |  | 					unmarkAll('ribbon')  | 
					
						
							| 
									
										
										
										
											2014-01-18 05:26:06 +04:00
										 |  |  | 				}), | 
					
						
							| 
									
										
										
										
											2014-01-20 06:18:36 +04:00
										 |  |  | 		'unmark-all': doc('Unmark all images',  | 
					
						
							|  |  |  | 				function(){ unmarkAll('all') }), | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-30 19:15:38 +04:00
										 |  |  | 		D: { | 
					
						
							| 
									
										
										
										
											2014-01-18 05:26:06 +04:00
										 |  |  | 				ctrl: 'unmark-ribbon', | 
					
						
							| 
									
										
										
										
											2014-01-20 06:18:36 +04:00
										 |  |  | 				'ctrl+shift': 'unmark-all',  | 
					
						
							|  |  |  | 		 | 
					
						
							| 
									
										
										
										
											2013-05-28 15:22:05 +04:00
										 |  |  | 			}, | 
					
						
							|  |  |  | 		U: { | 
					
						
							| 
									
										
										
										
											2013-06-08 00:33:21 +04:00
										 |  |  | 				default: doc('Unmark current image', | 
					
						
							| 
									
										
										
										
											2013-12-14 06:29:22 +04:00
										 |  |  | 					function(){ toggleMark('off') }),  | 
					
						
							| 
									
										
										
										
											2014-01-18 05:26:06 +04:00
										 |  |  | 				ctrl: 'unmark-ribbon', | 
					
						
							| 
									
										
										
										
											2014-01-20 06:18:36 +04:00
										 |  |  | 				shift: 'unmark-all', | 
					
						
							| 
									
										
										
										
											2013-05-28 15:22:05 +04:00
										 |  |  | 			}, | 
					
						
							| 
									
										
										
										
											2013-06-08 00:33:21 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-11-09 15:03:49 +04:00
										 |  |  | 		// XXX add a non FXX key for macs...
 | 
					
						
							| 
									
										
										
										
											2013-09-21 06:44:22 +04:00
										 |  |  | 		F2: doc('Toggle mark visibility',  | 
					
						
							| 
									
										
										
										
											2013-12-30 03:15:09 +04:00
										 |  |  | 				function(){ toggleMarksView() }), | 
					
						
							| 
									
										
										
										
											2013-09-21 06:44:22 +04:00
										 |  |  | 		// XXX should we be able to toggle crop modes from single image mode???
 | 
					
						
							|  |  |  | 		// 		...if yes, then remove the F2 & F3 definitions form ribbon
 | 
					
						
							|  |  |  | 		// 		mode...
 | 
					
						
							|  |  |  | 		// 		one way to go is to exit single-image-mode on s-f2 or f3...
 | 
					
						
							|  |  |  | 		/* | 
					
						
							| 
									
										
										
										
											2013-05-28 15:22:05 +04:00
										 |  |  | 		F2: { | 
					
						
							|  |  |  | 				default: doc('Toggle mark visibility',  | 
					
						
							| 
									
										
										
										
											2013-12-30 03:15:09 +04:00
										 |  |  | 					function(){ toggleMarksView() }), | 
					
						
							| 
									
										
										
										
											2013-09-21 03:09:19 +04:00
										 |  |  | 				shift: doc('Crop marked only images',  | 
					
						
							| 
									
										
										
										
											2013-06-16 02:42:29 +04:00
										 |  |  | 					function(){ | 
					
						
							| 
									
										
										
										
											2013-09-21 03:09:19 +04:00
										 |  |  | 						toggleMarkedOnlyView('on') | 
					
						
							| 
									
										
										
										
											2013-06-16 02:42:29 +04:00
										 |  |  | 					}), | 
					
						
							| 
									
										
										
										
											2013-05-28 15:22:05 +04:00
										 |  |  | 			}, | 
					
						
							| 
									
										
										
										
											2013-06-16 02:42:29 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-21 03:09:19 +04:00
										 |  |  | 		F3: doc('Crop single ribbon',  | 
					
						
							| 
									
										
										
										
											2013-06-08 00:17:16 +04:00
										 |  |  | 			function(){ | 
					
						
							| 
									
										
										
										
											2013-06-16 02:42:29 +04:00
										 |  |  | 				event.preventDefault() | 
					
						
							| 
									
										
										
										
											2013-09-21 03:09:19 +04:00
										 |  |  | 				toggleSingleRibbonMode('on') | 
					
						
							| 
									
										
										
										
											2013-06-08 00:17:16 +04:00
										 |  |  | 			}), | 
					
						
							| 
									
										
										
										
											2013-09-21 06:44:22 +04:00
										 |  |  | 		*/ | 
					
						
							| 
									
										
										
										
											2013-05-28 15:22:05 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-11-30 05:43:08 +04:00
										 |  |  | 		E: { | 
					
						
							|  |  |  | 				default: doc('Open image in external software', openImage), | 
					
						
							| 
									
										
										
										
											2013-11-30 22:24:56 +04:00
										 |  |  | 				// XXX Experimental
 | 
					
						
							| 
									
										
										
										
											2013-12-01 05:44:00 +04:00
										 |  |  | 				ctrl: doc('Open preview editor panel (Experimental)',  | 
					
						
							|  |  |  | 					function(){ toggleEditor() }), | 
					
						
							| 
									
										
										
										
											2013-11-30 05:43:08 +04:00
										 |  |  | 			}, | 
					
						
							| 
									
										
										
										
											2013-06-08 00:33:21 +04:00
										 |  |  | 		// XXX make F4 a default editor and E a default viewer...
 | 
					
						
							| 
									
										
										
										
											2013-10-04 01:02:35 +04:00
										 |  |  | 		F4: 'E', | 
					
						
							| 
									
										
										
										
											2013-06-02 18:29:56 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-08 00:33:21 +04:00
										 |  |  | 		// info...
 | 
					
						
							|  |  |  | 		I: { | 
					
						
							| 
									
										
										
										
											2013-07-30 23:27:07 +04:00
										 |  |  | 				default: doc('Show current image info', | 
					
						
							| 
									
										
										
										
											2013-06-11 03:10:01 +04:00
										 |  |  | 					function(){  | 
					
						
							|  |  |  | 						showImageInfo() | 
					
						
							|  |  |  | 						//toggleImageInfoDrawer() 
 | 
					
						
							|  |  |  | 					}), | 
					
						
							| 
									
										
										
										
											2013-07-30 23:27:07 +04:00
										 |  |  | 				shift: doc('Toggle image info display', | 
					
						
							|  |  |  | 					function(){ toggleImageInfo() }), | 
					
						
							| 
									
										
										
										
											2013-06-08 00:33:21 +04:00
										 |  |  | 				alt: doc('Toggle inline image info display', | 
					
						
							|  |  |  | 					function(){ | 
					
						
							|  |  |  | 						toggleInlineImageInfo() | 
					
						
							|  |  |  | 					}), | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				// marking...
 | 
					
						
							|  |  |  | 				ctrl: 'invert-marks', | 
					
						
							|  |  |  | 			}, | 
					
						
							| 
									
										
										
										
											2013-06-20 02:54:31 +04:00
										 |  |  | 		P: { | 
					
						
							| 
									
										
										
										
											2014-01-13 08:57:44 +04:00
										 |  |  | 				default: doc('Show panel list', | 
					
						
							|  |  |  | 					function(){  | 
					
						
							|  |  |  | 						panelListDialog() | 
					
						
							|  |  |  | 					}), | 
					
						
							|  |  |  | 				shift: doc('Show options', | 
					
						
							|  |  |  | 					function(){  | 
					
						
							|  |  |  | 						toggleOptionsUI()  | 
					
						
							|  |  |  | 					}), | 
					
						
							| 
									
										
										
										
											2013-06-20 02:54:31 +04:00
										 |  |  | 				ctrl: doc('Print keyboard help', | 
					
						
							|  |  |  | 					function(){ | 
					
						
							|  |  |  | 						toggleKeyboardHelp('on') | 
					
						
							|  |  |  | 						// NOTE: on chrome this is blocking...
 | 
					
						
							|  |  |  | 						print() | 
					
						
							|  |  |  | 						toggleKeyboardHelp('off') | 
					
						
							|  |  |  | 					}), | 
					
						
							|  |  |  | 			}, | 
					
						
							| 
									
										
										
										
											2013-05-31 00:13:49 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-02 23:07:18 +04:00
										 |  |  | 		// Help and info...
 | 
					
						
							|  |  |  | 		'?': doc('Show keyboard bindings', | 
					
						
							|  |  |  | 			function(){ toggleKeyboardHelp() }), | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-11-09 15:03:49 +04:00
										 |  |  | 		// XXX add a non FXX key for macs...
 | 
					
						
							| 
									
										
										
										
											2013-06-02 23:07:18 +04:00
										 |  |  | 		F1: doc('Show help', | 
					
						
							|  |  |  | 			function(){ toggleHelp() }), | 
					
						
							| 
									
										
										
										
											2013-06-02 18:29:56 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-08 16:02:47 +04:00
										 |  |  | 		// XXX DEBUG MODE...
 | 
					
						
							|  |  |  | 		// 		...remove these in production...
 | 
					
						
							| 
									
										
										
										
											2013-10-04 01:02:35 +04:00
										 |  |  | 		//F12: doc('Show devTools', function(){ showDevTools() }),
 | 
					
						
							|  |  |  | 		//F5: doc('Reload app', function(){ reload() }),
 | 
					
						
							| 
									
										
										
										
											2013-06-08 16:02:47 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-31 00:13:49 +04:00
										 |  |  | 		/* testing the shift-key feature... | 
					
						
							|  |  |  | 		'~': { | 
					
						
							|  |  |  | 			default: function(){ alert('~') }, | 
					
						
							|  |  |  | 			// this is inaccessible...
 | 
					
						
							|  |  |  | 			shift: function(){ alert('shift-~') }, | 
					
						
							|  |  |  | 			ctrl: function(){ alert('ctrl-~') }, | 
					
						
							|  |  |  | 			'ctrl+alt': function(){ alert('ctrl-alt-~') }, | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		'`': { | 
					
						
							|  |  |  | 			default: function(){ alert('`') }, | 
					
						
							|  |  |  | 			// this is also not accessible as it is shadowed by '''...
 | 
					
						
							|  |  |  | 			shift: function(){ alert('shift-`') }, | 
					
						
							|  |  |  | 			ctrl: function(){ alert('ctrl-`') }, | 
					
						
							|  |  |  | 			'ctrl+alt': function(){ alert('ctrl-alt-`') }, | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		*/ | 
					
						
							| 
									
										
										
										
											2014-01-18 11:26:29 +04:00
										 |  |  | 	}, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	'.image': { | 
					
						
							|  |  |  | 		'#1': doc('mooo!') | 
					
						
							| 
									
										
										
										
											2012-09-10 03:02:34 +04:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2012-08-08 23:19:40 +04:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2012-08-10 18:31:32 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-08 23:19:40 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-28 15:22:05 +04:00
										 |  |  | /********************************************************************** | 
					
						
							|  |  |  | * vim:set ts=4 sw=4 :                                                */ |