| 
									
										
										
										
											2014-07-13 04:00:23 +04:00
										 |  |  | /********************************************************************** | 
					
						
							|  |  |  | *  | 
					
						
							|  |  |  | * | 
					
						
							|  |  |  | * | 
					
						
							|  |  |  | **********************************************************************/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //var DEBUG = DEBUG != null ? DEBUG : true
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-18 20:48:40 +04:00
										 |  |  | /*********************************************************************/ | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // Might also be a good idea to add "relative terms" to be used as 
 | 
					
						
							|  |  |  | // arguments for actions (a-la jQuery collections):
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // 	Image			- current image
 | 
					
						
							|  |  |  | // 	Images			- all images
 | 
					
						
							|  |  |  | // 	Ribbon			- ribbon or ribbon images
 | 
					
						
							|  |  |  | // 	Marked			- marked images
 | 
					
						
							|  |  |  | // 	Bookmarked		- bookmarked images
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // NOTE: these can also beused as a basis for actions...
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | //
 | 
					
						
							| 
									
										
										
										
											2014-07-13 04:00:23 +04:00
										 |  |  | /*********************************************************************/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // NOTE: context is dynamic.
 | 
					
						
							|  |  |  | function Action(context, name, doc, code){ | 
					
						
							|  |  |  | 	var action = function(){ | 
					
						
							|  |  |  | 		var args = args2array(arguments) | 
					
						
							|  |  |  | 		var c = $(context) | 
					
						
							|  |  |  | 			.trigger(name + '.pre', args) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		// run compound action content...
 | 
					
						
							|  |  |  | 		if(code != null){ | 
					
						
							|  |  |  | 			// code is a function...
 | 
					
						
							|  |  |  | 			if(typeof(code) == typeof(function(){})){ | 
					
						
							|  |  |  | 				code.apply(this, [c].concat(args)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			// code is an object...
 | 
					
						
							|  |  |  | 			} else { | 
					
						
							|  |  |  | 				for(var a in code){ | 
					
						
							|  |  |  | 					var sargs = code[a] | 
					
						
							|  |  |  | 					sargs = sargs.constructor.name != 'Array' ? [sargs] : sargs | 
					
						
							|  |  |  | 					this[a].apply(this, sargs) | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return c | 
					
						
							|  |  |  | 			.trigger(name, args) | 
					
						
							|  |  |  | 			.trigger(name + '.post', args) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	action.doc = doc == null ? name : doc | 
					
						
							|  |  |  | 	return action | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // if actions is given this will extend that action object, else a new 
 | 
					
						
							|  |  |  | // action object will be created.
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // names format:
 | 
					
						
							|  |  |  | // 	{
 | 
					
						
							|  |  |  | // 		// basic action...
 | 
					
						
							|  |  |  | // 		<action-name>: <doc>,
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // 		// compound action...
 | 
					
						
							|  |  |  | // 		<action-name>: [<doc>, {
 | 
					
						
							|  |  |  | // 			<action-name>: <args>,
 | 
					
						
							|  |  |  | // 			...
 | 
					
						
							|  |  |  | // 		}],
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // 		// compound action with a JS function...
 | 
					
						
							|  |  |  | // 		<action-name>: [<doc>, 
 | 
					
						
							|  |  |  | // 			// this is run in the context of the action set...
 | 
					
						
							|  |  |  | // 			// NOTE: this will get the same arguments passed to the action
 | 
					
						
							|  |  |  | // 			//		preceded with the action event context.
 | 
					
						
							|  |  |  | // 			function(evt_context, ...){
 | 
					
						
							|  |  |  | // 				...
 | 
					
						
							|  |  |  | // 			}],
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // 		...
 | 
					
						
							|  |  |  | // 	}
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // NOTE: context is dynamic.
 | 
					
						
							|  |  |  | function Actions(context, names, actions){ | 
					
						
							|  |  |  | 	actions = actions == null ? {} : actions | 
					
						
							|  |  |  | 	Object.keys(names).forEach(function(e){ | 
					
						
							|  |  |  | 		var doc = names[e] | 
					
						
							|  |  |  | 		var code = doc.constructor.name == 'Array' ? doc[1] : null | 
					
						
							|  |  |  | 		doc = code != null ? doc : doc[0] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		actions[e] = Action(context, e, doc, code) | 
					
						
							|  |  |  | 	}) | 
					
						
							|  |  |  | 	return actions | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*********************************************************************/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // XXX need a way to define compound actions...
 | 
					
						
							|  |  |  | // 		- compound action is like a normal action with a set of other 
 | 
					
						
							|  |  |  | // 			actions chanined to it's main event.
 | 
					
						
							|  |  |  | // 		- actions should accept arguments, both optional and required
 | 
					
						
							|  |  |  | var BASE_ACTIONS = { | 
					
						
							|  |  |  | 	// basic editing...
 | 
					
						
							|  |  |  | 	shiftImageUp:  | 
					
						
							|  |  |  | 		'Shift image to the ribbon above current, creating one if ' | 
					
						
							|  |  |  | 		+'it does not exist', | 
					
						
							|  |  |  | 	shiftImageDown: | 
					
						
							|  |  |  | 		'Shift image to the ribbon below current, creating one if ' | 
					
						
							|  |  |  | 		+'it does not exist', | 
					
						
							|  |  |  | 	shiftImageLeft: 'Shift image to the left', | 
					
						
							|  |  |  | 	shiftImageRight: 'Shift image to the right', | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	moveRibbonUp: 'Move current ribbon one position up', | 
					
						
							|  |  |  | 	moveRibbonDown: 'Move current ribbon one position down', | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	sortImages: '', | 
					
						
							|  |  |  | 	reverseImages: '', | 
					
						
							|  |  |  | 	setAsBaseRibbon: '', | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// image adjustments...
 | 
					
						
							| 
									
										
										
										
											2014-07-18 20:48:40 +04:00
										 |  |  | 	rotateCW: '', | 
					
						
							|  |  |  | 	rotateCCW: '', | 
					
						
							| 
									
										
										
										
											2014-07-13 04:00:23 +04:00
										 |  |  | 	flipVertical: '', | 
					
						
							|  |  |  | 	flipHorizontal: '', | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// external editors/viewers...
 | 
					
						
							|  |  |  | 	systemOpen: '', | 
					
						
							|  |  |  | 	openWith: '', | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// crop...
 | 
					
						
							|  |  |  | 	// XXX should this be here on in a crop pligin...
 | 
					
						
							|  |  |  | 	cropRibbon: '', | 
					
						
							|  |  |  | 	uncropView: '', | 
					
						
							|  |  |  | 	uncropAll: '', | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-18 20:48:40 +04:00
										 |  |  | 	openURL: '', | 
					
						
							|  |  |  | 	openHistory: '', | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	saveState: '', | 
					
						
							|  |  |  | 	exportImages: '', | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	exit: '', | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // XXX think of a better name...
 | 
					
						
							|  |  |  | function setupBaseActions(context, actions){ | 
					
						
							|  |  |  | 	return Actions(context, BASE_ACTIONS, actions) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*********************************************************************/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var UI_ACTIONS = { | 
					
						
							|  |  |  | 	// basic navigation...
 | 
					
						
							|  |  |  | 	nextImage: 'Focus next image in current ribbon', | 
					
						
							|  |  |  | 	nextRibbon: 'Focus next ribbon (down)', | 
					
						
							|  |  |  | 	nextScreen: 'Show next screen width of images', | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	prevImage: 'Focus previous image in current ribbon', | 
					
						
							|  |  |  | 	prevRibbon: 'Focus previous ribbon (up)', | 
					
						
							|  |  |  | 	prevScreen: 'Show previous screen width of images', | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	firstImage: 'Focus first image in ribbon', | 
					
						
							|  |  |  | 	lastImage: 'Focus last image in ribbon', | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// zooming...
 | 
					
						
							|  |  |  | 	zoomIn: 'Zoom in', | 
					
						
							|  |  |  | 	zoomOut: 'Zoom out', | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// NOTE: if this gets a count argument it will fit count images, 
 | 
					
						
							|  |  |  | 	// 		default is one.
 | 
					
						
							|  |  |  | 	fitImage: 'Fit image', | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// XXX should these be relative to screen rather than actual image counts?
 | 
					
						
							|  |  |  | 	fitTwo: ['Fit two images', { fitImage: 2, }], | 
					
						
							|  |  |  | 	fitThree: ['Fit three images', { fitImage: 3, }], | 
					
						
							|  |  |  | 	fitFour: ['Fit four images', { fitImage: 4, }], | 
					
						
							|  |  |  | 	fitFive: ['Fit five images', { fitImage: 5, }], | 
					
						
							|  |  |  | 	fitSix: ['Fit six images', { fitImage: 6, }], | 
					
						
							|  |  |  | 	fitSeven: ['Fit seven images', { fitImage: 7, }], | 
					
						
							|  |  |  | 	fitEight: ['Fit eight images', { fitImage: 8, }], | 
					
						
							|  |  |  | 	fitNine: ['Fit nine images', { fitImage: 9, }], | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	fitMax: 'Fit the maximum number of images', | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	fitSmall: 'Show small image', | 
					
						
							|  |  |  | 	fitNormal: 'Show normal image', | 
					
						
							|  |  |  | 	fitScreen: 'Fit image to screen', | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-13 04:00:23 +04:00
										 |  |  | 	// modes...
 | 
					
						
							|  |  |  | 	singleImageMode: '', | 
					
						
							|  |  |  | 	ribbonMode: '', | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	toggleTheme: '', | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// panels...
 | 
					
						
							|  |  |  | 	togglePanels: '', | 
					
						
							|  |  |  | 	showInfoPanel: '', | 
					
						
							|  |  |  | 	showTagsPanel: '', | 
					
						
							|  |  |  | 	showSearchPanel: '', | 
					
						
							|  |  |  | 	showQuickEditPanel: '', | 
					
						
							|  |  |  | 	showStatesPanel: '', | 
					
						
							|  |  |  | 	showConsolePanel: '', | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// developer actions...
 | 
					
						
							|  |  |  | 	showConsole: '', | 
					
						
							|  |  |  | 	showDevTools: '', | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // XXX think of a better name...
 | 
					
						
							| 
									
										
										
										
											2014-07-18 20:48:40 +04:00
										 |  |  | function setupUIActions(context, actions){ | 
					
						
							|  |  |  | 	return Actions(context, UI_ACTIONS, actions) | 
					
						
							| 
									
										
										
										
											2014-07-13 04:00:23 +04:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*********************************************************************/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Marks actions...
 | 
					
						
							|  |  |  | // XXX move to marks.js
 | 
					
						
							|  |  |  | var MARKS_ACTIONS = { | 
					
						
							|  |  |  | 	toggleMark: '', | 
					
						
							|  |  |  | 	toggleMarkBlock: '', | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	markRibbon: '', | 
					
						
							|  |  |  | 	unmarkRibbon: '', | 
					
						
							|  |  |  | 	markAll: '', | 
					
						
							|  |  |  | 	unmarkAll: '', | 
					
						
							|  |  |  | 	invertMarkedRibbon: '', | 
					
						
							|  |  |  | 	invertMarkedAll: '', | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	shiftMarkedUp: '', | 
					
						
							|  |  |  | 	shiftMarkedDown: '', | 
					
						
							|  |  |  | 	shiftMarkedLeft: '', | 
					
						
							|  |  |  | 	shiftMarkedRight: '', | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	cropMarkedImages: '', | 
					
						
							|  |  |  | 	cropMarkedImagesToSingleRibbon: '', | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function setupMarksActions(context, actions){ | 
					
						
							|  |  |  | 	return Actions(context, MARKS_ACTIONS, actions) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*********************************************************************/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Bookmarks actions...
 | 
					
						
							|  |  |  | // XXX move to bookmarks.js
 | 
					
						
							|  |  |  | var BOOKMARKS_ACTIONS = { | 
					
						
							|  |  |  | 	toggleBookmark: 'Toggle image bookmark', | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	bookmarkMarked: 'Bookmark marked images', | 
					
						
							|  |  |  | 	unbookmarkMarked: 'Remove bookmarks from marked images', | 
					
						
							|  |  |  | 	toggleBookmarkMarked: 'Toggle bookmarks on marked images', | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	clearRibbonBookmarks: 'Remove bookmarks in ribbon', | 
					
						
							|  |  |  | 	clearAllBookmarks: 'Clear all bookmarks', | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	cropBookmarkedImages: '', | 
					
						
							|  |  |  | 	cropBookmarkedImagesToSingleRibbon: '', | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function setupBookmarksActions(context, actions){ | 
					
						
							|  |  |  | 	return Actions(context, BOOKMARKS_ACTIONS, actions) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /********************************************************************** | 
					
						
							|  |  |  | * vim:set ts=4 sw=4 :                                                */ |