mirror of
				https://github.com/flynx/ImageGrid.git
				synced 2025-10-31 03:10:07 +00:00 
			
		
		
		
	fixed a bug in keyboard.js and made the introspection better...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
		
							parent
							
								
									57e922c59c
								
							
						
					
					
						commit
						6ffd4e1e84
					
				| @ -39,7 +39,8 @@ function directionImage(reverse){ | ||||
| // XXX this is experimental...
 | ||||
| // 		...not sure yet how to go about this...
 | ||||
| function Action(text, func){ | ||||
| 	func = func == null ? function(){return true}: func | ||||
| 	var not_action = func === false ? true : false | ||||
| 	func = !func ? function(){return true}: func | ||||
| 	func.doc = text | ||||
| 
 | ||||
| 	var name = text.split('\n')[0].trim() | ||||
| @ -48,12 +49,17 @@ function Action(text, func){ | ||||
| 		console.warn('Action: "'+name+'" is defined more than once.') | ||||
| 	} | ||||
| 
 | ||||
| 	if(!not_action){ | ||||
| 		ACTIONS[name] = func | ||||
| 	} | ||||
| 
 | ||||
| 	return func | ||||
| } | ||||
| 
 | ||||
| doc = Action | ||||
| 
 | ||||
| var _doc = doc | ||||
| var doc = Action | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| /*********************************************************************/ | ||||
| @ -119,17 +125,21 @@ var KEYBOARD_CONFIG = { | ||||
| 			'image selection/marks.', | ||||
| 		pattern: '.overlay-info:hover', | ||||
| 
 | ||||
| 		ignore: [ 'A' ], | ||||
| 		ignore: [ 'A', 'C', 'D' ], | ||||
| 
 | ||||
| 		// NOTE: these are here only for documentation...
 | ||||
| 		A: { | ||||
| 			// NOTE: this is here only for documentation...
 | ||||
| 			ctrl: doc('Select all'), | ||||
| 			ctrl: doc('Select all', false), | ||||
| 		}, | ||||
| 		C: { | ||||
| 			ctrl: doc('Copy selection', false) | ||||
| 		}, | ||||
| 
 | ||||
| 		D: { | ||||
| 			ctrl: doc('Clear selection',  | ||||
| 				function(){ | ||||
| 					console.log('!!!') | ||||
| 					document.getSelection().empty() | ||||
| 					return false | ||||
| 				}) | ||||
| 		} | ||||
| 	}, | ||||
| @ -145,7 +155,7 @@ var KEYBOARD_CONFIG = { | ||||
| 
 | ||||
| 		ignore: '*', | ||||
| 
 | ||||
| 		'insert-return': doc('Insert return'), | ||||
| 		'insert-return': doc('Insert return', false), | ||||
| 
 | ||||
| 		Enter: { | ||||
| 				default: doc('Accept dialog', | ||||
| @ -387,16 +397,16 @@ var KEYBOARD_CONFIG = { | ||||
| 			}, | ||||
| 
 | ||||
| 		// zooming...
 | ||||
| 		'#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)) }), | ||||
| 		'#1': doc('Fit one image', function(){ return !fitNImages(1) }), | ||||
| 		'#2': doc('Fit two images', function(){ return !fitNImages(2) }), | ||||
| 		'#3': doc('Fit three images', function(){ return !fitNImages(3) }), | ||||
| 		'#4': doc('Fit four images', function(){ return !fitNImages(4) }), | ||||
| 		'#5': doc('Fit five images', function(){ return !fitNImages(5) }), | ||||
| 		'#6': doc('Fit six images', function(){ return !fitNImages(6) }), | ||||
| 		'#7': doc('Fit seven images', function(){ return !fitNImages(7) }), | ||||
| 		'#8': doc('Fit eight images', function(){ return !fitNImages(8) }), | ||||
| 		'#9': doc('Fit nine images', function(){ return !fitNImages(9) }), | ||||
| 		'#0': doc('Fit maximum images', function(){ return !fitNImages(getScreenWidthInImages(CONFIG.min_image_size)) }), | ||||
| 
 | ||||
| 		// cropping...
 | ||||
| 		C: doc('Show ribbon crop dialog', cropImagesDialog), | ||||
| @ -866,6 +876,10 @@ var KEYBOARD_CONFIG = { | ||||
| 			'ctrl+alt': function(){ alert('ctrl-alt-`') }, | ||||
| 		}, | ||||
| 		*/ | ||||
| 	}, | ||||
| 
 | ||||
| 	'.image': { | ||||
| 		'#1': doc('mooo!') | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -10,6 +10,17 @@ | ||||
| 
 | ||||
| /*********************************************************************/ | ||||
| 
 | ||||
| // Attributes to be ignored my the key handler...
 | ||||
| //
 | ||||
| // These are used for system tasks.
 | ||||
| var KEYBOARD_SYSTEM_ATTRS = [ | ||||
| 	'doc', | ||||
| 	'title', | ||||
| 	'ignore', | ||||
| 	'pattern' | ||||
| ] | ||||
| 
 | ||||
| 
 | ||||
| // Neither _SPECIAL_KEYS nor _KEY_CODES are meant for direct access, use
 | ||||
| // toKeyName(<code>) and toKeyCode(<name>) for a more uniform access.
 | ||||
| //
 | ||||
| @ -109,7 +120,7 @@ function toKeyCode(c){ | ||||
| 
 | ||||
| // documentation wrapper...
 | ||||
| function doc(text, func){ | ||||
| 	func = func == null ? function(){return true}: func | ||||
| 	func = !func ? function(){return true}: func | ||||
| 	func.doc = text | ||||
| 	return func | ||||
| } | ||||
| @ -152,12 +163,6 @@ function normalizeModifiers(c, a, s){ | ||||
|  * | ||||
|  * For doc on format see makeKeyboardHandler(...) | ||||
|  * | ||||
|  * modes can be: | ||||
|  * 	- 'any'	(default)	- Get list of all applicable handlers up until | ||||
|  * 							the first applicable ignore. | ||||
|  * 	- 'all'				- Get ALL handlers, including ignores | ||||
|  * 	- <mode>			- Get handlers for an explicit mode | ||||
|  * | ||||
|  * modifiers can be: | ||||
|  * 	- '' (default)		- No modifiers | ||||
|  * 	- '?'				- Return list of applicable modifiers per mode | ||||
| @ -171,6 +176,13 @@ function normalizeModifiers(c, a, s){ | ||||
|  * 							NOTE: normalizeModifiers(...) can be used as | ||||
|  * 								a reference, if in doubt. | ||||
|  * | ||||
|  * modes can be: | ||||
|  * 	- 'any'	(default)	- Get list of all applicable handlers up until | ||||
|  * 							the first applicable ignore. | ||||
|  * 	- 'all'				- Get ALL handlers, including ignores | ||||
|  * 	- <mode>			- Get handlers for an explicit mode | ||||
|  * | ||||
|  * | ||||
|  * This will also resolve several shifted keys by name, for example: | ||||
|  * 'shift-/' is the same as '?', and either can be used, but the shorter  | ||||
|  * direct notation has priority (see _SHIFT_KEYS for supported keys). | ||||
| @ -183,6 +195,19 @@ function normalizeModifiers(c, a, s){ | ||||
|  * 	} | ||||
|  * | ||||
|  * | ||||
|  * <handler> can be: | ||||
|  * 	- <function>		- handler | ||||
|  * 	- [<doc>, <function>] | ||||
|  * 						- lisp-style handler | ||||
|  * 	- 'IGNORE'			- if mode is 'all' and key is in .ignore | ||||
|  * 	- [<function>, 'IGNORE NEXT'] | ||||
|  * 						- if mode is 'all' and the key is both in .ignore | ||||
|  * 						  and a handler is defined in the current section | ||||
|  * 						  NOTE: in this case if this mode matches, all | ||||
|  * 						  		the subsequent handlers will get ignored | ||||
|  * 						  		in normal modes... | ||||
|  * | ||||
|  * | ||||
|  * NOTE: it is not possible to do a shift-? as it is already shifted. | ||||
|  * NOTE: if a key is not handled in a mode, that mode will not be  | ||||
|  * 		present in the resulting object. | ||||
| @ -191,17 +216,16 @@ function normalizeModifiers(c, a, s){ | ||||
|  * NOTE: modifiers can be a list of three bools... | ||||
|  * 		(see: normalizeModifiers(...) for further information) | ||||
|  * | ||||
|  * XXX need an explicit way to prioritize modes, avoiding object attr  | ||||
|  * 		ordering... | ||||
|  * XXX check do we need did_handling here... | ||||
|  * | ||||
|  * XXX BUG explicitly given modes do not yield results if the pattern  | ||||
|  * 		does not match... | ||||
|  */ | ||||
| function getKeyHandlers(key, modifiers, keybindings, modes, shifted_keys){ | ||||
| 	var chr = null | ||||
| 	var s_chr = null | ||||
| 	// XXX I do not understand why this is here...
 | ||||
| 	var did_handling = false | ||||
| 	var did_ignore = false | ||||
| 	modifiers = modifiers == null ? '' : modifiers | ||||
| 	modifiers = modifiers != '?' ? normalizeModifiers(modifiers) : modifiers | ||||
| 	modes = modes == null ? 'any' : modes | ||||
| @ -224,6 +248,24 @@ function getKeyHandlers(key, modifiers, keybindings, modes, shifted_keys){ | ||||
| 
 | ||||
| 	for(var title in keybindings){ | ||||
| 
 | ||||
| 		// If a key is ignored then look no further...
 | ||||
| 		/* | ||||
| 		if(did_ignore && modes != 'all'){ | ||||
| 			break | ||||
| 		} | ||||
| 		*/ | ||||
| 		if(did_ignore){ | ||||
| 			if(modes != 'all'){ | ||||
| 				break | ||||
| 			} else { | ||||
| 				did_ignore = false | ||||
| 				// XXX do we actually need this???
 | ||||
| 				if(modifiers != '?' && res[mode] != 'IGNORE'){ | ||||
| 					res[mode] = [ res[mode], 'IGNORE NEXT'] | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		// older version compatibility...
 | ||||
| 		if(keybindings[title].pattern != null){ | ||||
| 			var mode = keybindings[title].pattern | ||||
| @ -237,7 +279,7 @@ function getKeyHandlers(key, modifiers, keybindings, modes, shifted_keys){ | ||||
| 			|| modes == mode | ||||
| 			// 'any' means we need to check the mode...
 | ||||
| 			|| (modes == 'any' | ||||
| 				// '*' allways matches...
 | ||||
| 				// '*' always matches...
 | ||||
| 				&& mode == '*' | ||||
| 				// match the mode...
 | ||||
| 				|| $(mode).length != 0))){ | ||||
| @ -257,6 +299,7 @@ function getKeyHandlers(key, modifiers, keybindings, modes, shifted_keys){ | ||||
| 		} | ||||
| 
 | ||||
| 		// alias...
 | ||||
| 		// XXX should this be before after or combined with ignore handling...
 | ||||
| 		while( handler != null  | ||||
| 				&& (typeof(handler) == typeof(123)  | ||||
| 					|| typeof(handler) == typeof('str') | ||||
| @ -293,8 +336,6 @@ function getKeyHandlers(key, modifiers, keybindings, modes, shifted_keys){ | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		// no handler...
 | ||||
| 		if(handler == null){ | ||||
| 		// if something is ignored then just breakout and stop handling...
 | ||||
| 		if(bindings.ignore == '*'  | ||||
| 				|| bindings.ignore != null  | ||||
| @ -303,11 +344,16 @@ function getKeyHandlers(key, modifiers, keybindings, modes, shifted_keys){ | ||||
| 			did_handling = true | ||||
| 			// ignoring a key will stop processing it...
 | ||||
| 			if(modes == 'all' || mode == modes){ | ||||
| 				// NOTE: if a handler is defined in this section, this 
 | ||||
| 				// 		will be overwritten...
 | ||||
| 				// XXX need to add the handler to this if it's defined...
 | ||||
| 				res[mode] = 'IGNORE' | ||||
| 				} else { | ||||
| 					break | ||||
| 			} | ||||
| 			did_ignore = true | ||||
| 		} | ||||
| 
 | ||||
| 		// no handler...
 | ||||
| 		if(handler == null){ | ||||
| 			continue | ||||
| 		} | ||||
| 
 | ||||
| @ -531,7 +577,7 @@ function buildKeybindingsHelp(keybindings, shifted_keys){ | ||||
| 
 | ||||
| 		// handlers...
 | ||||
| 		for(var key in mode){ | ||||
| 			if(key == 'doc' || key == 'title' || key == 'ignore' || key == 'pattern'){ | ||||
| 			if(KEYBOARD_SYSTEM_ATTRS.indexOf(key) >= 0){ | ||||
| 				continue | ||||
| 			} | ||||
| 			var modifiers = getKeyHandlers(key, '?', keybindings, 'all')[pattern] | ||||
| @ -542,12 +588,16 @@ function buildKeybindingsHelp(keybindings, shifted_keys){ | ||||
| 
 | ||||
| 				var handler = getKeyHandlers(key, mod, keybindings, 'all')[pattern] | ||||
| 
 | ||||
| 				if(handler.constructor.name == 'Array' && handler[1] == 'IGNORE NEXT'){ | ||||
| 					handler = handler[0] | ||||
| 				} | ||||
| 
 | ||||
| 				// standard object doc...
 | ||||
| 				if('doc' in handler){ | ||||
| 					var doc = handler.doc | ||||
| 
 | ||||
| 				// lisp style...
 | ||||
| 				} else if(typeof(handler) == typeof([]) && handler.constructor.name == 'Array'){ | ||||
| 				} else if(handler.constructor.name == 'Array'){ | ||||
| 					var doc = handler[1] | ||||
| 
 | ||||
| 				// no doc...
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user