mirror of
				https://github.com/flynx/ImageGrid.git
				synced 2025-10-29 18:30:09 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			1229 lines
		
	
	
		
			41 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			1229 lines
		
	
	
		
			41 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
			Executable File
		
	
	
	
	
| Roadmap
 | |
| 	[_] 64% Pre-Alpha - limited preview
 | |
| 		[_] 50% Supported formats
 | |
| 			[X] jpeg
 | |
| 			[_] RAW
 | |
| 		[_] 33% Usecases
 | |
| 			[_] view unprepared dir (read-only / tmp-cache / mem-cache)
 | |
| 			| XXX initially lags for hi-res images...
 | |
| 			[_] view unprepared dir (cache in background)
 | |
| 			| XXX initially lags for hi-res images...
 | |
| 			[X] view prepared dir
 | |
| 		[_] 57% UI
 | |
| 			[_] 0% Tablet-specific
 | |
| 				[_] screen buttons
 | |
| 			[X] 100% modes
 | |
| 				[X] single image
 | |
| 				[X] slideshow (single image)
 | |
| 				[X] ribbon
 | |
| 				[X] cropped mode
 | |
| 				| show only selected images
 | |
| 			[_] 71% other
 | |
| 				[X] load/open
 | |
| 				[X] browse for location (open)
 | |
| 				[X] select saved set
 | |
| 				[X] keyboard help
 | |
| 				[_] general help
 | |
| 				[_] settings
 | |
| 				[X] image info
 | |
| 		[X] 100% navigation
 | |
| 			[X] image next/prev
 | |
| 			[X] ribbon next/prev
 | |
| 			[X] screen next/prev
 | |
| 			[X] bookmarks next/prev
 | |
| 		[X] slideshow
 | |
| 		[_] 71% editing
 | |
| 			[X] 100% ribbon
 | |
| 				[X] merge up/down
 | |
| 				| via. marking... 
 | |
| 				|
 | |
| 				| still thinking if this is the right way...
 | |
| 				[X] sort
 | |
| 			[_] 92% image
 | |
| 				[X] shift up/down
 | |
| 				[X] shift left/right
 | |
| 				[X] mark/unmark (selection)
 | |
| 				[X] rotate left/right
 | |
| 				[X] flip H/V
 | |
| 				[_] 50% metadata
 | |
| 					[_] tag
 | |
| 					[X] note
 | |
| 				[X] open with external software
 | |
| 			[_] 42% marked (selected) set
 | |
| 				[X] crop (marked only mode)
 | |
| 				[_] tag
 | |
| 				[X] shift up/down
 | |
| 				[_] shift left/right
 | |
| 				[_] group
 | |
| 				[_] note
 | |
| 				[X] save as set
 | |
| 			[_] 50% crop selection via
 | |
| 				[X] marked
 | |
| 				[X] ribbon
 | |
| 				[_] tag
 | |
| 				[_] date
 | |
| 		[_] 54% storage and loading
 | |
| 			[_] 75% ImageGrid cache
 | |
| 				[X] generate
 | |
| 				[X] load
 | |
| 				[X] save
 | |
| 				[_] update
 | |
| 				| needs revision...
 | |
| 			[_] 75% fav tree
 | |
| 				[X] generate
 | |
| 				[X] load
 | |
| 				[X] save
 | |
| 				[_] update
 | |
| 				| at this time images are added to the tree but not removed...
 | |
| 			[_] 0% xmp files
 | |
| 				[_] generate
 | |
| 				| XXX make this native
 | |
| 				[_] load
 | |
| 				[_] save
 | |
| 				[_] update
 | |
| 			[_] 66% raw directory tree
 | |
| 				[X] load
 | |
| 				[X] save
 | |
| 				[_] update
 | |
| 		[_] 50% build targets
 | |
| 			[X] 100% Windows
 | |
| 				[X] CEF (Python/...)
 | |
| 				[X] node-webkit
 | |
| 			[X] MacOS X (node-webkit)
 | |
| 			| needs more work...
 | |
| 			[_] Android (PhoneGap)
 | |
| 			[_] iOS (PhoneGap)
 | |
| 			[_] Windows 8 (Native?)
 | |
| 			[X] Linux ia32 (node-webkit)
 | |
| 			[X] Linux x64 (node-webkit)
 | |
| 			[_] Windows Phone 8 (PhoneGap/Native)
 | |
| 	[_] 0% Alpha - limited preview
 | |
| 		[_] 0% editing
 | |
| 			[_] 0% ribbon
 | |
| 				[_] flatten
 | |
| 			[_] 0% image
 | |
| 				[_] crop
 | |
| 	[_] 0% Beta - public?
 | |
| 	[_] 0% 1.0 - public
 | |
| 	
 | |
| 
 | |
| 
 | |
| [_] 32% Gen 3 current todo
 | |
| 	[_] 64% High priority
 | |
| 		[_] BUG: preview generation progress reporting is broken...
 | |
| 		| - the progress bar is generated
 | |
| 		| - the previews are created
 | |
| 		| - no progress is reported
 | |
| 		|
 | |
| 		| Appears to be the same symptoms as the las worker bug (export)...
 | |
| 		| ...i.e. workers running but not being removed from pool...
 | |
| 		[_] BUG: prev/next ribbon in single image view after long jump is wrong...
 | |
| 		| to reproduce:
 | |
| 		| 	- ribbon counts:
 | |
| 		| 		- current: ~146
 | |
| 		| 		- target: ~108
 | |
| 		| 	- Home
 | |
| 		| 	- Enter (to single image mode)
 | |
| 		| 	- End
 | |
| 		| 	- Up/Down
 | |
| 		|
 | |
| 		| expected:
 | |
| 		| 	- loaded image is above current...
 | |
| 		|
 | |
| 		| result:
 | |
| 		| 	- loaded image is somewhere in the middle...
 | |
| 		|
 | |
| 		| reason:
 | |
| 		| 	we are not updating invisible ribbons...
 | |
| 		|
 | |
| 		| projected solution:
 | |
| 		| 	load adjacent ribbons on long jumps or when they reach end...
 | |
| 		| 	use showImage to load the correct image...
 | |
| 		[_] BUG: close button does not work on stalled progress bars...
 | |
| 		[_] BUG: chrome 32 / nw 0.9.1: flicker on preview swap...
 | |
| 		| an image get's repainted black and only then the new preview 
 | |
| 		| is loaded, this is barely noticeable for one image but slows 
 | |
| 		| things down for a set...
 | |
| 		|
 | |
| 		| appears to be related to load thread organization as for multiple
 | |
| 		| images they get reloaded in blocks...
 | |
| 		|
 | |
| 		| can't reproduce on a simple example, yet...
 | |
| 		| can't narrow it down to either Blink or node-webkit...
 | |
| 		|
 | |
| 		|
 | |
| 		| to reproduce:
 | |
| 		| 	- load a set of images
 | |
| 		| 		enough to fill screen width with a couple of ribbons 
 | |
| 		| 		at least, the more the better
 | |
| 		| 	- press 0 in ribbon mode
 | |
| 		| 	- use updateImages(null, 1000) and updateImages(null, 100)
 | |
| 		| 		to switch preview sizes
 | |
| 		|
 | |
| 		| expected (as in <0.9.1):
 | |
| 		| 	- seamless and barely noticeable change
 | |
| 		|
 | |
| 		| getting:
 | |
| 		| 	- images unloaded then loaded in blocks
 | |
| 		| 		flicker: image -> black-bg -> image
 | |
| 		| 		also, this is slower
 | |
| 		|
 | |
| 		|
 | |
| 		| temporary fix: stick with nw0.8.4 
 | |
| 		| 	it's is both faster and does not exhibit the bug.
 | |
| 		|
 | |
| 		| mid-term strategy:
 | |
| 		| 	- investigate, if cause found file a bug report and/or fix 
 | |
| 		| 		depending on origin
 | |
| 		| 	- do not spend too much resources (low to mid priority) until
 | |
| 		| 		new nw version comes out...
 | |
| 		[_] BUG: info dialog breaks when using a self-generated data...
 | |
| 		| Procedure:
 | |
| 		| 	- open: file:///L:/mnt/hdd13 (photo)/NTFS2/media/img/my/work/- 20140203Y.001 - Gordosevich opening, Kiril,/DCIM/preview (RAW)/Gordosevich-opening-select/
 | |
| 		| 	- press 'I'
 | |
| 		|
 | |
| 		| Expected:
 | |
| 		| 	info dialog...
 | |
| 		|
 | |
| 		| Getting:
 | |
| 		| 	error @ 84* line: .length of undefined...
 | |
| 		|
 | |
| 		| XXX make info fool proof...
 | |
| 		[_] make buildcache sort images via data AND file name...
 | |
| 		[_] buildcache: keep the existing order when adding new images...
 | |
| 		[_] BUG: panels: open/close events get triggered on panel drag/sort...
 | |
| 		[_] buildcache: add option to control image sort...
 | |
| 		[_] 50% ASAP: Need visual indicators for long operations...
 | |
| 			[X] progress bars...
 | |
| 			[_] spinners...
 | |
| 		[_] 66% tags
 | |
| 			[X] local tags
 | |
| 			[_] global tag list
 | |
| 			[X] 100% actions
 | |
| 				[X] add
 | |
| 				[X] remove
 | |
| 				[X] update
 | |
| 				[X] select
 | |
| 				[X] list operations
 | |
| 				[X] ribbon (list) operations
 | |
| 				[X] marked (list) operations
 | |
| 				[X] bookmarked (list) operations
 | |
| 				[X] mark/unmark tagged
 | |
| 				[X] crop
 | |
| 		[_] 51% Panels
 | |
| 			[X] 100% panel constructors
 | |
| 				[X] panel
 | |
| 				[X] side-panel
 | |
| 				[X] sub-panel
 | |
| 			[_] 0% panel state
 | |
| 				[_] track panel state
 | |
| 				[_] use panel state for defaults when opening panels
 | |
| 			[_] 75% actions
 | |
| 				[X] 100% openPanel
 | |
| 					[X] if panel is not loaded load it
 | |
| 					[X] if a panel is not open, open it and all parents
 | |
| 					| XXX need to open auto-hidden side panels...
 | |
| 					[X] blink panel
 | |
| 				[_] openPanels
 | |
| 				[X] closePanel
 | |
| 				| collapse a panel...
 | |
| 				[X] removePanel
 | |
| 				| remove a panel
 | |
| 			[X] open panel dialog
 | |
| 			| list all registered panels...
 | |
| 			[_] 0% mechanics
 | |
| 				[_] serialization -- save/load panel state
 | |
| 				[_] sub-panel-oriented actions / key bindings
 | |
| 				| open a sub panel should:
 | |
| 				| 	- if it does not exist create it and create a parent panel
 | |
| 				| 	- if it exists, show it (open all parents)
 | |
| 				[_] data handlers work only if a panel is loaded/visible/open
 | |
| 				| and not break stuff when it's closed (as is now)...
 | |
| 				[_] show hide all panels (TAB key)
 | |
| 			[_] 33% new panels
 | |
| 				[_] info
 | |
| 					[_] general info
 | |
| 					[_] EXIF
 | |
| 					[_] IPCT / comment
 | |
| 				[_] tags
 | |
| 					[_] cloud
 | |
| 					[_] search
 | |
| 					[_] tree
 | |
| 				[X] editor
 | |
| 					[X] filters
 | |
| 					[X] snapshots
 | |
| 		[_] BUG: closing editor panel breaks next/prev image in single image mode
 | |
| 		| caused by editor action breaking and affecting image move...
 | |
| 		|
 | |
| 		| Procedure:
 | |
| 		| 	- Enter		- single image mode
 | |
| 		| 	- ctrl-e	- open editor
 | |
| 		| 	- close editor panel (destroy editor sub-panels)
 | |
| 		| 	- left or right
 | |
| 		|
 | |
| 		| This will produce an error in editor functionality that will break
 | |
| 		| image loading...
 | |
| 		|
 | |
| 		| NOTE: not fixing this right away as the way panel infrastructure 
 | |
| 		| 		is connected to the system needs a rewrite that will likely
 | |
| 		| 		fix this and other connected bugs...
 | |
| 		|
 | |
| 		[_] BUG: showImage(..) does not load the ribbons correctly...
 | |
| 		|
 | |
| 		| Procedure:
 | |
| 		| 	Load ribbon with ~28 images @ 4 images per screen width:
 | |
| 		|	lastImage()
 | |
| 		|	showImage(getImageGID(getRibbon().find('.image').first()))
 | |
| 		| or:
 | |
| 		| 	Load ribbon with ~28 images @ 4 images per screen width:
 | |
| 		|	firstImage()
 | |
| 		|	showImage(getImageGID(getRibbon().find('.image').last()))
 | |
| 		|
 | |
| 		| Expected:
 | |
| 		| 	- ribbon loaded and fills screen
 | |
| 		|
 | |
| 		| Effect:
 | |
| 		| 	- ribbon not loaded after current image
 | |
| 		| 	- reloadViewer() loads the state correctly
 | |
| 		|
 | |
| 		[_] BUG: OSX: unable to load absolute paths...
 | |
| 		[_] OSX: add alternatives to function buttons...
 | |
| 		[_] 75% normalize ribbons -- top-align sorted chunks
 | |
| 			[X] basic mechanics
 | |
| 			| splitData(...)
 | |
| 			| mergeData(...)
 | |
| 			| alignDataToRibbon(...)
 | |
| 			| shiftRibbonBy(...)
 | |
| 			[X] manual invoke mechanics
 | |
| 			| ctrl-alt-down
 | |
| 			[_] auto-invoke mechanics (???)
 | |
| 			[X] 100% 'unsorted' tag mechanics...
 | |
| 				[X] remove tag on shift
 | |
| 				[X] remove tag on alignToRibbon(..)
 | |
| 				[X] add tag for new images (buildcache)
 | |
| 		[_] 33% FAST thumbnail generation strategies
 | |
| 			[_] 0% pass 1: generate really fast previews
 | |
| 				[_] ~1/3 screen - for ribbon
 | |
| 				[_] ~1 screen - for single image mode
 | |
| 			[X] pass 2: generate normal previews
 | |
| 			[_] extract existing raw thumbnails/previews (for RAW files)
 | |
| 		[_] EXTERNAL BUG: Chrome: CSS filters degrade scaled images. 
 | |
| 		| ...if at least one filter is applied, appears to only affect 
 | |
| 		| scaled images.
 | |
| 		|
 | |
| 		| Actual cause:
 | |
| 		| 	Bug in Blink-CSS-filters (BUG#329091) causing filters to 
 | |
| 		| 	mess up scaled (via CSS transforms) images.
 | |
| 		| 	Filed at:
 | |
| 		| 		https://code.google.com/p/chromium/issues/detail?id=329091&thanks=329091&ts=1387246111
 | |
| 		|
 | |
| 		| Status:
 | |
| 		| 	- Waiting for feedback...
 | |
| 		| 	- got a "Wont Fix" status, still negotiating...
 | |
| 		|
 | |
| 		| Workaround:
 | |
| 		| 	Make image size similar to screen size, in the best case 
 | |
| 		| 	scenario dynamic (too complex for what it gives), in the 
 | |
| 		| 	worse, just big enough.
 | |
| 		[_] 66% Bookmarks
 | |
| 			[X] toggle
 | |
| 			[X] save/load
 | |
| 			[X] 100% navigate
 | |
| 				[X] next/prev
 | |
| 			[X] crop
 | |
| 			[_] global
 | |
| 			[_] 0% metadata
 | |
| 				[_] comment
 | |
| 				[_] tags
 | |
| 		[_] add universal set of events to viewer...
 | |
| 		| viewerLoaded
 | |
| 		| viewerClosing
 | |
| 		| ...
 | |
| 		[_] BUG: opening a dir form history sometimes loads wrong size previews
 | |
| 		| this happens in part of the view and a refresh, reload or image
 | |
| 		| update (updateImages()) fixes the issue...
 | |
| 		[_] BUG: Something is causing previews to reload...
 | |
| 		|
 | |
| 		| Procedure:
 | |
| 		| 	- moving left/right in one ribbon
 | |
| 		| 	- adjacent ribbon is not moving
 | |
| 		|
 | |
| 		| Expected:
 | |
| 		| 	- all unmoving ribbons remain static
 | |
| 		|
 | |
| 		| Effect:
 | |
| 		| 	- previews get reloaded/redrawn
 | |
| 		|
 | |
| 		[_] UI: touch controls / toolbars...
 | |
| 		|
 | |
| 		| 	+-+-----------------------+-+
 | |
| 		| 	| |    				  	  | |
 | |
| 		| 	| |    				  	  | |
 | |
| 		| 	| |    	+-----------+ 	  | |
 | |
| 		| 	| |    	|			| 	  |<--- Button bar
 | |
| 		| 	| |    	|	Image	| 	  | |
 | |
| 		| 	| |    	|			| 	  | |
 | |
| 		| 	| |    	+-----------+ 	  | |
 | |
| 		| 	| |    				  	  | |
 | |
| 		| 	| |    				  	  | |
 | |
| 		| 	+-+-----------------------+-+
 | |
| 		|
 | |
| 		|
 | |
| 		| Basic layout:
 | |
| 		| 		Left bar			Right bar
 | |
| 		| 			help				config		+ low priority
 | |
| 		|
 | |
| 		| 			up					up			+
 | |
| 		| 			prev				next		| main controls
 | |
| 		| 			down				down		+  (under thumbs)
 | |
| 		|
 | |
| 		|											+
 | |
| 		| 			...					...			| misc controls
 | |
| 		|											+
 | |
| 		|
 | |
| 		| Things to have in buttons:
 | |
| 		| 	- navigation
 | |
| 		| 	- shift
 | |
| 		| 	- crop select / exit crop
 | |
| 		| 	- modes
 | |
| 		| 		- slideshow
 | |
| 		| 		- image/ribbon toggle
 | |
| 		| 	- zoom
 | |
| 		| 	- tags/metadata editor toggle
 | |
| 		| 	- image editor toggle
 | |
| 		| 	- open/history/...
 | |
| 		| 	- sort
 | |
| 		| 	- export
 | |
| 		[_] editable list of external commands...
 | |
| 		| to add things like exportdirs.py etc.
 | |
| 		[_] Export data...
 | |
| 		| same as export dirs but also include .ImageGrid/ dir with current
 | |
| 		| data and images...
 | |
| 		[_] BUG: after loading a non-existing dir, opening a new dir raises an error
 | |
| 		| i.e. the open dialog does not close, while the images are loaded...
 | |
| 		[_] BUG: sometimes opening a dir (open dialog) does not do anything...
 | |
| 		| Uncaught TypeError: Cannot call method 'indexOf' of undefined -- data.js:576
 | |
| 		[_] would be good to unify buildcache and viewer to use the same code...
 | |
| 		| rewrite buildcache in js?
 | |
| 		|
 | |
| 		| XXX this will need code reorganization to support node.js' require(...)
 | |
| 		| 		mechanics...
 | |
| 		[_] 75% add data updating to buildcache
 | |
| 			[X] non-destructive updates...
 | |
| 			| force create new data-set, backup old data 
 | |
| 			| default: update
 | |
| 			|
 | |
| 			| find and add new images to images.json and data.json
 | |
| 			| should be added as updates, i.e. 201310101445-data.json
 | |
| 			| and 201310101445-images-diff.json
 | |
| 			|
 | |
| 			| add new images to base ribbon
 | |
| 			|
 | |
| 			| NOTE: fav dirs are ignored by buildcache
 | |
| 			[X] --base-ribbon=N
 | |
| 			| default N=0 i.e. top ribbon
 | |
| 			[_] --reset-gids (???)
 | |
| 			| replace gids in data.json and images.json
 | |
| 			[X] fast update by default
 | |
| 			| - store a file-list in .ImageGrid/filelist.json
 | |
| 			| - make a pedantic update (current) optional via
 | |
| 			|   	--force-full-scan
 | |
| 		[_] add data updating to viewer...
 | |
| 		| make this separate from ribbonsFromFavDirs(...)
 | |
| 		|
 | |
| 		| might be good to make this semi-manual:
 | |
| 		| 	- notify user of "directory updated, load new data?"
 | |
| 		| 	- ctrl-r reload and load new data
 | |
| 		[_] 66% plugins -- isolate functionality:
 | |
| 			[X] register setup/init function...
 | |
| 			| a module can register setup function...
 | |
| 			[X] register image update functions...
 | |
| 			[_] isolate context key bindings...
 | |
| 			| essentially this may consist of:
 | |
| 			| 	injecting new config
 | |
| 			| 	shadowing 
 | |
| 		[_] update data set...
 | |
| 		| - add new images to the set
 | |
| 		| - update changed images
 | |
| 		[_] merge data sets...
 | |
| 		| combine two or more separate data.json and images.json sets...
 | |
| 		|
 | |
| 		| this can be done in two ways:
 | |
| 		| 	- live
 | |
| 		| 		the view jumps between sets and saves the changes to its 
 | |
| 		| 		origin set.
 | |
| 		| 		some operations like shifting left/right would be difficult
 | |
| 		| 	- full merge (preferred)
 | |
| 		| 		save a new data set.
 | |
| 		| 		not different to single data set.
 | |
| 		| 		will eventually need fragmenting...
 | |
| 		[_] fragmenting of data/images/marks support...
 | |
| 		| split data into chunks...
 | |
| 		|
 | |
| 		| need a simple way to split chunks to:
 | |
| 		| 	1) make the scheme as simple as possible
 | |
| 		| 	2) make things fast -- minimal read/write/cache
 | |
| 		| 	3) try not to depend on sort order
 | |
| 		|
 | |
| 		| a possible simple way out of this is to use a DB
 | |
| 		| 	- CouchDB
 | |
| 		| 	- SQL
 | |
| 		| 	- file-db
 | |
| 			[_] add ability to save/load ranges of images and the structures around them
 | |
| 			| e.g.load image 100 to current ribbon -> will load 100 images
 | |
| 			| for current ribbon and all the in between images from other
 | |
| 			| ribbons above and below...
 | |
| 		[_] BUG CLASS: everything should work with empty ribbons...
 | |
| 		| currently some code breaks when seeing an empty ribbon...
 | |
| 		[_] BUG: sometimes loading a raw directory stops at "error loading data.json"
 | |
| 		| and some times it does not err..
 | |
| 		|
 | |
| 		| Q: did not see this for some time, is this resolved???
 | |
| 		[_] BUG: sometimes images.json folder is created...
 | |
| 		| can't repeat this yet, and seen only once...
 | |
| 		[_] 0% full archive index
 | |
| 			[_] segmented loading of images and data
 | |
| 			[_] ribbon separation
 | |
| 			| split ribbon into manageable chunks
 | |
| 			|
 | |
| 			| this can be done naturally by:
 | |
| 			| 	- date
 | |
| 			| 	- event
 | |
| 			|	- tag
 | |
| 			[_] index and group ALL files in an archive
 | |
| 			[_] import metadata
 | |
| 			[_] real GIDs
 | |
| 		[_] save settings to config.json
 | |
| 		[_] Q: do we need separate theme settings?
 | |
| 		| ...for ribbon and single-image modes?
 | |
| 		[_] 0% keyboard.js
 | |
| 			[_] multiple key handler...
 | |
| 			| handle multiple key presses...
 | |
| 			|
 | |
| 			| one way to do this:
 | |
| 			| 	- a generic handler with timeout
 | |
| 			| 		- if key N pressed before timeout kandle it's action
 | |
| 			| 		- if timeout handle default action
 | |
| 			|
 | |
| 			| Q: how do we organize the config for this?
 | |
| 			| 	a) <key-spec> syntax, some thing like 'A, B'
 | |
| 			| 	b) complex handler with keys (in addition to modifiers)
 | |
| 			|
 | |
| 			[_] 0% online config editor API...
 | |
| 				[_] onKey(<key-spec>, handler[, mode])
 | |
| 				| <key-spec> should be something simple like a string
 | |
| 				|
 | |
| 				| Examples that should work:
 | |
| 				| 	'Enter'
 | |
| 				| 	'alt-F4'
 | |
| 				|
 | |
| 				| NOTE: with current config structure this is not that 
 | |
| 				| 		trivial
 | |
| 				[_] offKey(<key-spec>[, mode])
 | |
| 				[_] introspection
 | |
| 				| this is partially done already, need a simpler API for 
 | |
| 				| the user...
 | |
| 		[_] 50% Undo/Redo
 | |
| 			[X] basic one step (revert to last save)
 | |
| 			[_] push/pop state stack
 | |
| 		[_] revise reporting scheme...
 | |
| 		| showStatus(...) should be called uniformly, either at the source 
 | |
| 		| or a specific reporting layer...
 | |
| 		[_] side-by side view...
 | |
| 		[_] Simplify tool-tip structure in dialogs...
 | |
| 		| might also bee good to unify tool-tips across the app...
 | |
| 		[_] 55% mark-based operations
 | |
| 			[_] 75% cropping selection
 | |
| 				[X] marked
 | |
| 				[X] ribbon
 | |
| 				[X] by tag/collection
 | |
| 				[_] by group
 | |
| 			[X] shift up/down
 | |
| 			[X] tag
 | |
| 			[_] group
 | |
| 			| a group should behave as a single image but is 
 | |
| 			| viewable/expandable as a ribbon...
 | |
| 			|
 | |
| 			| should be two types of groups:
 | |
| 			| 	- strict - always as a single image
 | |
| 			| 		like a set of versions, processed and processing 
 | |
| 			| 		versions of the same image.
 | |
| 			| 		(auto-group?)
 | |
| 			| 	- loose - similar images, could be named collections
 | |
| 			| 		viewed individually, but can be accessed either from 
 | |
| 			| 		a list or a member image (primary).
 | |
| 			[_] collection
 | |
| 			| make or add to existing collection
 | |
| 		[_] 0% grouping / meta-image
 | |
| 			[_] versions w. label image
 | |
| 			| a set of images that is represented by one of the group
 | |
| 			[_] collection
 | |
| 		[_] 0% CSS
 | |
| 			[_] cleanup
 | |
| 			[_] split themes and layout
 | |
| 		[_] workflow editor (external app?)...
 | |
| 		| edit sequence of actions and events...
 | |
| 		|
 | |
| 		| Example:	
 | |
| 		| 	- on mount volume name X
 | |
| 		| 		-> make previews
 | |
| 		| 		-> make cache
 | |
| 		| 		-> import to index
 | |
| 		| 		-> run Viewer
 | |
| 		| 	- on Viewer data change
 | |
| 		| 		-> run exportdirs.py
 | |
| 		| 	- on tweak 
 | |
| 		| 		-> run Irfan view
 | |
| 		| 	- on edit
 | |
| 		| 		-> run Photoshop
 | |
| 		| 	- on PSD created
 | |
| 		| 		-> make preview
 | |
| 		| 		-> add to index
 | |
| 		| 		-> group with preview
 | |
| 		| 	...
 | |
| 		|
 | |
| 		|
 | |
| 		[_] BUG (low priority): dragging a sub-panel, over and out again is odd..
 | |
| 		| i.e. if the placeholder moves...
 | |
| 		|
 | |
| 		| Expected:
 | |
| 		| 	create a new panel and drop into it or revert
 | |
| 		|
 | |
| 		| Actual:
 | |
| 		| 	drops to last placeholder
 | |
| 		|
 | |
| 		[_] single image mode transition (alpha-blend/fade/none)
 | |
| 		[X] BUG: deferredPool breaks on exporting previews and a preview exists...
 | |
| 		| export in place (default settings) runs through an initial set of 
 | |
| 		| workers and stops in an odd state:
 | |
| 		| 	- pool is full
 | |
| 		| 	- al workers resolved
 | |
| 		|
 | |
| 		| this appears to be the result of exportImageTo(..) not overwriting
 | |
| 		| a preview...
 | |
| 		[X] BUG: export: if lots of images already exist, the pool triggers depleted early...
 | |
| 		| this happens if we are clearing the pool out faster than adding
 | |
| 		| new tasks to queue...
 | |
| 		[X] buildcache: add ability to process multiple dirs...
 | |
| 		[X] BUG: progress bars do not handle errors...
 | |
| 		[X] BUG: sorting (dialog) will mess up the order...
 | |
| 		| Procedure:
 | |
| 		| 	- shift-s + sort in a way that changes the order
 | |
| 		| 	- move next till the spot where the order changed
 | |
| 		|		-- the next/prev action will jump around...
 | |
| 		|
 | |
| 		| probably due to a bug in reloading...
 | |
| 		|
 | |
| 		| NOTE: sorting is done correctly...
 | |
| 		|
 | |
| 		| Workaround:
 | |
| 		| 	- sort, save, then F5
 | |
| 		| 	
 | |
| 		[X] BUG: sorting breaks when at or near the end of a ribbon...
 | |
| 		|
 | |
| 		| Race condition...
 | |
| 		|
 | |
| 		| Procedure:
 | |
| 		| 	- go to end of a ribbon
 | |
| 		| 	- shift-s 
 | |
| 		| 		- select a sort method
 | |
| 		| 		- click "OK"
 | |
| 		|
 | |
| 		| NOTE: this will not break of sorting will not change the order of
 | |
| 		| 		visible images...
 | |
| 		| 		thus, if this the above procedure does not break do one of:
 | |
| 		| 			- ctrl-r (reverse) before sorting
 | |
| 		| 			- check "Descending" in the sort dialog
 | |
| 		| NOTE: this breaks because current the current image is not 
 | |
| 		| 		yet loaded/created when reloadViewer(..) tries to focus it...
 | |
| 		|
 | |
| 		| Temporary workaround:
 | |
| 		| 	because there is nothing wrong with sorting itself, just the
 | |
| 		| 	UI, the resulting state can be fixed by simply reloading the 
 | |
| 		| 	viewer (reloadViewer(true) or ctrl-alt-r)
 | |
| 		| 
 | |
| 		| NOTE: appears to affect beginning of the ribbon too...
 | |
| 		[X] BUG: sorting mis-aligns ribbons in some cases...
 | |
| 		| Example:
 | |
| 		| 				 oooo...	--[reverse]->	   ...oooo
 | |
| 		| 		...oooo[o]oooo...					...oooo[o]oooo...
 | |
| 		|
 | |
| 		| 		Should be:
 | |
| 		| 				 oooo...	--[reverse]->	 ...oooo
 | |
| 		| 		...oooo[o]oooo...					...oooo[o]oooo...
 | |
| 		|
 | |
| 		| 	The above can happen when, for example, sorting the images via data
 | |
| 		| 	and then sorting them in the same way with reverse checked...
 | |
| 		|
 | |
| 		| XXX is this related to?
 | |
| 		|	BUG: sorting breaks when at or near the end of a ribbon...
 | |
| 		[X] BUG: shifting image left/right marks and bookmarks it...
 | |
| 		[X] Might be a good idea to use sparse arrays for things like marks...
 | |
| 		| eliminate:	
 | |
| 		| 	- need for keeping things sorted all the time
 | |
| 		| 	- speed-up access -- everything has the same index
 | |
| 		| 	- speed-up modification -- just mirror all the operations
 | |
| 		| 	- searching in more than one place
 | |
| 		|
 | |
| 		| introduce:
 | |
| 		| 	- conversion on import, export and crop
 | |
| 		| 		need to clear / insert all the nulls
 | |
| 		|
 | |
| 		| candidates:
 | |
| 		| 	- marks
 | |
| 		| 	- bookmarks
 | |
| 		| 	- tags
 | |
| 		[X] crop/filter/search dialog...
 | |
| 		| make a number of fields each accepting a filter -- string/regexp
 | |
| 		[X] Q: how do we mark unsorted sections in base ribbon after aligning?
 | |
| 		| - there is a big gap in the ribbon below, but it's not visible...
 | |
| 		| - can we "mark" big gaps? ...what's the threshold of "big"?
 | |
| 		|
 | |
| 		| Possible approaches:
 | |
| 		| 	- do not mark
 | |
| 		| 		In theory the base ribbon is always "final", thus marking and 
 | |
| 		| 		sorted/unsorted categories are un-needed complexity.
 | |
| 		| 		This plays well with the "auto-align" mechanics...
 | |
| 		| 		This may play well with bookmarking...
 | |
| 		| 	- sorted/unsorted images marking (viewed/unviewed)
 | |
| 		| 		This can be done in several ways:
 | |
| 		| 			- track viewing
 | |
| 		| 			- anything in the aligned group is "sorted"
 | |
| 		| 			- ...
 | |
| 		| 		Added complexity
 | |
| 		| 	- manual bookmarking
 | |
| 		|
 | |
| 		| Approach used:
 | |
| 		| 	- tag all new images with 'unsorted'
 | |
| 		| 	- remove tag on:
 | |
| 		| 		- shift up/down (i.e. on sort)
 | |
| 		| 		- align to ribbon
 | |
| 		| 		  this will remove the tag form images that were not 
 | |
| 		| 		  shifted.
 | |
| 		|
 | |
| 		| NOTE: with this approach effectively the base ribbon is the one,
 | |
| 		| 		and the only one, that contains 'unsorted' images.
 | |
| 		[X] 100% UI: side-panels...
 | |
| 			|
 | |
| 			| 	+-----+---------------+-----+
 | |
| 			| 	|	  |				  |		|
 | |
| 			| 	|	  |				  |		|
 | |
| 			| 	|	  |	+-----------+ |		|
 | |
| 			| 	|	  |	|			| |	  <---- side-panel
 | |
| 			| 	|	  |	|	Image	| |		|
 | |
| 			| 	|	  |	|			| |		|
 | |
| 			| 	|	  |	+-----------+ |		|
 | |
| 			| 	|	  |				  |		|
 | |
| 			| 	|	  |				  |		|
 | |
| 			| 	+-----+---------------+-----+
 | |
| 			|
 | |
| 			|		  +---------------+
 | |
| 			|			Viewer
 | |
| 			|
 | |
| 			|
 | |
| 			| NOTE: panes should be outside the viewer, so as not to overlap
 | |
| 			| 		with the image...
 | |
| 			| NOTE: we can also try and use top and bottom panes, but that 
 | |
| 			| 		might over-complicate things...
 | |
| 			[X] construct
 | |
| 			[X] style
 | |
| 			[X] lock/pin
 | |
| 			[X] autohide
 | |
| 		[X] BUG: shifting around images in very short ribbons produces lots of errors
 | |
| 		| Procedure:
 | |
| 		| 	- crop a ribbon of two-three images
 | |
| 		| 	- start shifting
 | |
| 		|
 | |
| 		| Problems:
 | |
| 		| 	- wrong alignment
 | |
| 		| 	- sometimes by shifting an image up the focus shifts to the 
 | |
| 		| 	  upper ribbon
 | |
| 		|
 | |
| 		| The direct cause of the problem:
 | |
| 		| 	- errors:
 | |
| 		| 		- SyntaxError - likely the JSON parser in getImageGID()
 | |
| 		| 		- TypeError - property of null
 | |
| 		|
 | |
| 		| Likely causes:
 | |
| 		| 	- we access images BEFORE they are initialized properly...
 | |
| 		|
 | |
| 		| Solution strategy:
 | |
| 		| 	- make aligning independent of DOM state where possible...
 | |
| 		| 	- make parts of the code wait for updates to finish...
 | |
| 		|
 | |
| 		|
 | |
| 		| Actual case:
 | |
| 		| 	- this was not a problem with race conditions...
 | |
| 		| 	- essentially all this took is a careful look at event and 
 | |
| 		| 	  action ordering, and a forgotten filter...
 | |
| 		| 	  (filtering for images is a possible bug class)
 | |
| 		[X] BUG: appear to be leaking memory on very large sets of images (>8K)
 | |
| 		| don't remember it before, so it might be due to the new 
 | |
| 		| loadImagesAround(..)
 | |
| 		|
 | |
| 		| Another place to check is pre-caching...
 | |
| 		|
 | |
| 		| Ran a test session -- we appear to never invalidate cache...
 | |
| 		|
 | |
| 		| Actual Cause: range check bug in getGIDsAfter(..) that caused
 | |
| 		| 		wrapping around 0 and caching of all images in the ribbon
 | |
| 		| 		by preCacheRibbonImages(..)...
 | |
| 		[X] BUG: shifting last image out of a ribbon misaligns the current ribbon
 | |
| 		| i.e. the prev ribbon was deleted and the new focused ribbon
 | |
| 		| is aligned as if it was not current...
 | |
| 		|
 | |
| 		| this is due to a race condition -- the alignment is done BEFORE 
 | |
| 		| the current image is set...
 | |
| 		[X] BUG: zooming vertical images in single image view results in size jumping...
 | |
| 		| Reason:
 | |
| 		| 	This is due to the proportion ratio changing in one step...
 | |
| 		|
 | |
| 		| Solution:
 | |
| 		| 	Make the proportion transition smoothly, at least in two zoom-steps
 | |
| 		[X] BUG: jumping more than one image in single image view messes up scale...
 | |
| 		|
 | |
| 		| Procedure:
 | |
| 		| 	- load: file:///L:/mnt/hdd13 (photo)/NTFS2/media/img/my/work/- 20131122Y.001/DCIM/preview (RAW)/
 | |
| 		| 	- go to single image mode
 | |
| 		| 	- press 2
 | |
| 		| 	- go to end
 | |
| 		| 	- press [ until a long jump between vertical and horizontal pics
 | |
| 		|
 | |
| 		| Effect:
 | |
| 		| 	- the size of the images will change
 | |
| 		|
 | |
| 		| Solution:
 | |
| 		| 	moved the proportions mode switch to preFittingImages handler
 | |
| 		|
 | |
| 		| Side-effect:
 | |
| 		| 	vertical images, in horizontal viewer, and vice-versa jump 
 | |
| 		| 	in size a bit when zooming past the threshold...
 | |
| 		| 	the amount of "jump" depends on viewer proportions vs. image
 | |
| 		| 	proportions...
 | |
| 		[X] BUG: history dialog is focused on a disabled field...
 | |
| 		| Procedure:
 | |
| 		| 	- open a dir
 | |
| 		| 	- rename dir
 | |
| 		| 	- ctrl-H
 | |
| 		|
 | |
| 		| Expected:
 | |
| 		| 	- current dir disabled and current
 | |
| 		| 	- first enabled field focused/checked
 | |
| 		|
 | |
| 		| Result:
 | |
| 		| 	- current dir is both focused/checked and disabled
 | |
| 		|
 | |
| 		[X] devise a better strategy to pruneBaseURLHistory(..)...
 | |
| 		| currently it will remove anything that does not exist.
 | |
| 		|
 | |
| 		| consider:
 | |
| 		|	- push non-existing to back
 | |
| 		|	- mark non-existing and show as disabled 
 | |
| 		[X] Feature: basic editor...
 | |
| 		| use CSS3 filters to edit and save edit values for:
 | |
| 		| 	- brightness
 | |
| 		| 	- contrast
 | |
| 		| 	- saturation
 | |
| 		| 	- hue
 | |
| 		| 	- grayscale
 | |
| 		| 	- sepia
 | |
| 		| 	- invert
 | |
| 		| 	- blur
 | |
| 		|
 | |
| 		| save settings and load them on a per preview basis...
 | |
| 		|
 | |
| 		| see: http://html5-demos.appspot.com/static/css/filters/index.html
 | |
| 		|
 | |
| 		| For UI use a left/right pane to "hold" the sliders...
 | |
| 		[X] BUG: editor also affects the image background and border...
 | |
| 		| to view just set invert to 1
 | |
| 		| 	- background turns white...
 | |
| 		| 	- red border turns blue...
 | |
| 		|
 | |
| 		| need to either compensate or figure out a way to work around 
 | |
| 		| this without adding ne tags...
 | |
| 		[X] URL history...
 | |
| 		[X] BUG: ribbons above and below are still sometimes loaded incorrectly
 | |
| 		| likely due to trying to align 
 | |
| 		[X] BUG: cropping in single image mode will change image scale...
 | |
| 		| likely a problem with reloadViewer(...)
 | |
| 		[X] BUG: align problems are back...
 | |
| 		| default data set (browser/images.js) same images #4 (going 
 | |
| 		| from right) & #5 (going from left) of 18 in the first ribbon 
 | |
| 		| get aligned wrong...
 | |
| 		|
 | |
| 		| this is at a zoom level with screen proportions...
 | |
| 		|
 | |
| 		| zooming to a different level affects which images are 
 | |
| 		| misaligned, at "max" #2 and #5 are affected...
 | |
| 		|
 | |
| 		| centerView() fixes this, but only for the current image...
 | |
| 		[X] BUG CLASS: file-name auto escaping...
 | |
| 		| mostly fixed, but need to check more thoroughly...
 | |
| 		[X] BUG: @ 9 image width, jumping to end of ribbon length 39 messes up loading...
 | |
| 		| problem likely in loadImagesAround(...)
 | |
| 		|
 | |
| 		|	- ribbon length 178 also ends up messing things up, while 68 and
 | |
| 		|	  69 pose no problems...
 | |
| 		|	- 19 images @ 5 per ribbon also breaks things...
 | |
| 		|
 | |
| 		| was a bug in rollImages(...)
 | |
| 		[X] BUG CLASS (ASAP!): race conditions due to browser rendering lag...
 | |
| 		| this happens when updating/adding lots of elements:
 | |
| 		| 
 | |
| 		| the update code is done and returns BEFORE the browser is done 
 | |
| 		| rendering the updates...
 | |
| 		|
 | |
| 		| one of the side-effects is that the updates or added elements
 | |
| 		| do not yet exist when the code is done and returned.
 | |
| 		|
 | |
| 		| XXX I do not know why or how but this appears to have gotten fixed
 | |
| 		| 		by rewriting loadImages(...) to loadImagesAround(...)
 | |
| 		[X] BUG: reloadViewer(...) loses image focus...
 | |
| 		| ...if the image is not near ribbon start.
 | |
| 		|
 | |
| 		| This is due to the fact that we are trying to focus an image
 | |
| 		| before the DOM is ready...
 | |
| 		|
 | |
| 		| To fix:
 | |
| 		| 	- make focusImage(...) in reload viewer run AFTER all the 
 | |
| 		| 	  images are created...
 | |
| 		|
 | |
| 		| XXX this is the cause for several other bugs...
 | |
| 		[X] BUG: sometimes duplicate images get loaded...
 | |
| 		| this happens when jumping back and forth on the mid ribbon until
 | |
| 		| the last element shows up and then moving left until the frame
 | |
| 		| around the image disappears...
 | |
| 		| at this point, this will return 2:
 | |
| 		|
 | |
| 		| 	$('[order='+$('.current.image').attr('order')+']').length
 | |
| 		|
 | |
| 		| happens when:
 | |
| 		| 	ribbon length: ~42
 | |
| 		| 	screen width: 4
 | |
| 		| 	jumping to end from start of ribbon
 | |
| 		|
 | |
| 		| Example 1:
 | |
| 		| 	1) first ribbon in (loaded at first image):
 | |
| 		|	 "F:\work\ImageGrid\cur\ImageGrid\src\ui\BUGS\ribbon loading error\"
 | |
| 		|	2) ctrl-end (error state in "jumping ribbon .." bug)
 | |
| 		|	3) left/right (next/prev image)
 | |
| 		|	now the last portion of the ribbon is loaded twice
 | |
| 		|
 | |
| 		| XXX possibly related to 
 | |
| 		|		 BUG CLASS (ASAP!): race conditions due to browser rendering lag...
 | |
| 		[X] BUG: jumping in ribbon sometimes does not load the ribbon correctly...
 | |
| 		| Example 1:
 | |
| 		| 	first ribbon in (loaded at first image):
 | |
| 		|	 "F:\work\ImageGrid\cur\ImageGrid\src\ui\BUGS\ribbon loading error\"
 | |
| 		|	jumping to the end will result in an inconsistent view:
 | |
| 		|		- ribbon not aligned at the correct spot
 | |
| 		|		- wrong image is .current
 | |
| 		|		- part of the images appear to be loaded but misaligned...
 | |
| 		|
 | |
| 		| Example 2:
 | |
| 		| 	load same data at same position as in #1
 | |
| 		| 		- shift-F2 to marked-only view
 | |
| 		| 		- go to end of ribbon (any means work)
 | |
| 		| 		- shift-F2 or Esc out of marked-only mode
 | |
| 		| 	this will result in a state very similar (if not identical) to
 | |
| 		| 	example #1...
 | |
| 		|
 | |
| 		|
 | |
| 		| NOTE: jumping back and forth several times will make this problem
 | |
| 		| 		go away...
 | |
| 		| 		Q: could this be initial load/state error?
 | |
| 		|
 | |
| 		| XXX possibly related to 
 | |
| 		|		 BUG CLASS (ASAP!): race conditions due to browser rendering lag...
 | |
| 		|
 | |
| 		| Appears to be fixed...
 | |
| 		[X] BUG: something wrong with the export dialog...
 | |
| 		| when a different destination is specified nothing is copied 
 | |
| 		| form the base ribbon...
 | |
| 		[X] BUG: need to prioretize marks loading...
 | |
| 		| if no markes.json is empty then localstorage marks will get 
 | |
| 		| loaded...
 | |
| 		[X] rework the marks.js/modes.js to enable multi-level ribbon cropping...
 | |
| 		[X] add indicator to ribbon up/down navigation in full screen...
 | |
| 		| this might be a number or some kind of animation...
 | |
| 		[X] BUG: scaling #2 in single image mode fits image to screen on wide screens
 | |
| 		[X] BUG: cropping in cropped mode will not save the whole data...
 | |
| 		[X] 100% BUG: sometimes the previews are not updated...
 | |
| 			[X] wrong resolution preview is loaded
 | |
| 			| when coming out of single-image-mode after moving to a 
 | |
| 			| different position (so as ribbons go reloaded)
 | |
| 			[X] previews do not get replaced at all, e.g. everything 
 | |
| 			| behaves correctly (order, etc.) but the previews are 
 | |
| 			| from wrong (ones before re-attaching) images
 | |
| 			| (this I can't repeat at this point)
 | |
| 			|
 | |
| 			| Example:
 | |
| 			|	URL: "file:///L:/mnt/P7000 (photo)/PHOTOS/Last week of September 2011/"
 | |
| 			|	going through the previews in the top row forward and backward
 | |
| 			|	watch the ribbon below -- on the way back everything is aligned
 | |
| 			|	correctly but the images are different.
 | |
| 			|	also, there are times when the ribbon below is partially loaded 
 | |
| 			|	or at it's edge when there are other images...
 | |
| 			|	NOTE: calling updateImages() will load the correct previews.
 | |
| 			|
 | |
| 			| The mechanics of this bug:
 | |
| 			| 	- sometimes the .onload handler gets the right image ref in 
 | |
| 			| 	  the closue but a wrong p_url, how can this happen I do not
 | |
| 			| 	  know.
 | |
| 			| 	- slowing down the browser appears to make this happen 
 | |
| 			| 	  less often, is this a race condition?
 | |
| 			|
 | |
| 			| Might be caused by fast sequential updating/reloading of an image:
 | |
| 			| 	- call the updateImage(...) in order several times
 | |
| 			| 	- cache .onload events get called in order of images loading 
 | |
| 			| 	  not in order of updateImage(...) calls...
 | |
| 			| (this cause is not confirmed)
 | |
| 			|
 | |
| 			| Apparently fixed by storing the preview URL in image.data(), this 
 | |
| 			| is slower but avoids problems with multiple updates and races...
 | |
| 		[X] make tooltip balloons on top of everything else...
 | |
| 		| currently a tooltip balloon is bellow the next tooltip...
 | |
| 		[X] add min-height to tooltips
 | |
| 		| one line tooltip-right get messed-up...
 | |
| 		[X] add option to export either original or preview (exportDialog)
 | |
| 		[X] BUG: when creating previews for small-ish pics the original is not used
 | |
| 		| after updating the image...
 | |
| 		|
 | |
| 		| e.g. for a 900px image, 150px and 350px images are created and
 | |
| 		| the 350px is used in full screen.
 | |
| 		[X] 100% basic dialogs
 | |
| 			[X] select from list
 | |
| 			[X] alert
 | |
| 			[X] prompt
 | |
| 			[X] open directory (native)
 | |
| 		[X] BUG: context status does not get updated on Ctrl-D
 | |
| 		[X] single ribbon mode
 | |
| 		| should this have up/down navigation?
 | |
| 		|
 | |
| 		| something like showGidsAsRibbon(gids) would be generic and logical...
 | |
| 		[X] build cache in background...
 | |
| 		| this must be done while updating IMAGES live...
 | |
| 		[X] 100% dialog constructor
 | |
| 			[X] widget: text
 | |
| 			[X] widget: bool
 | |
| 			[X] widget: choice
 | |
| 			[X] widget: dir/ndir
 | |
| 			| browser native (dir) and custom (ndir) directory selector...
 | |
| 		[X] 100% image sorting (date/name/...)
 | |
| 			[X] 100% sort by:
 | |
| 				[X] date
 | |
| 				[X] name
 | |
| 				[X] manual shift left/right/position
 | |
| 				| position shift is mark and shift here..
 | |
| 			[X] 100% Sort ui
 | |
| 				[X] reverse
 | |
| 				[X] select sort method
 | |
| 		[X] usable empty view -- w.o. data...
 | |
| 		[X] 100% UI elements
 | |
| 			[X] indicators
 | |
| 			[X] image info
 | |
| 			[X] stub info dialog
 | |
| 			[X] detailed image info
 | |
| 		[X] build for windows (node-webkit)
 | |
| 		[X] BUG: scaling is again broken with rotated images
 | |
| 		| - rotate an image
 | |
| 		| - scale it to 1 (press 1)
 | |
| 		[X] BUG: BASE_URL seems to gain a new trailing '/' on each save...
 | |
| 		| low priority as this does not affect anything...
 | |
| 		[X] 100% gesture support
 | |
| 			[X] up/down - navigate
 | |
| 			[X] left/right - navigate
 | |
| 		[X] make the marks in single image mode show in corner of viewer, not image
 | |
| 		| and think of a uniform indicator position...
 | |
| 		|
 | |
| 		| 	+---------------------------+
 | |
| 		| 	|					   oooo	| <-- global indicators
 | |
| 		| 	|							|		(all modes)
 | |
| 		| 	|							|
 | |
| 		| 	|							|
 | |
| 		| 	|							|
 | |
| 		| 	|							|
 | |
| 		| 	|							|
 | |
| 		| 	|							|
 | |
| 		| 	|							|
 | |
| 		| 	|					   oooo	| <-- context indicators
 | |
| 		| 	+---------------------------+		(single image mode)
 | |
| 		|
 | |
| 		| make global indicators semi-transparent in single-image-mode, so as to 
 | |
| 		| indicate their lesser priority than context/image indicators...
 | |
| 		|
 | |
| 		| keep image indicators within the image square for ribbon mode...
 | |
| 		|
 | |
| 		| possible indicator styles:
 | |
| 		| 	- letter, expand on hover
 | |
| 		| 	- colored circle -- show text of same color under or to the side on hover
 | |
| 		|
 | |
| 		| might bee nice too use both styles, one for images one for global...
 | |
| 		[X] BUG: shifting ribbon left sometimes results in wrong order...
 | |
| 		| i.e. an image with order 12 before image with order 11
 | |
| 		|
 | |
| 		| Example:
 | |
| 		| 	- default image set
 | |
| 		| 	- move first image 2 positions right
 | |
| 		|
 | |
| 		| Resulting state:
 | |
| 		| 	- current image order: 12
 | |
| 		| 	- next image order: 11
 | |
| 		| 	- prev image order: 10
 | |
| 		|
 | |
| 		| This is stably reproducible.
 | |
| 		[X] BUG: changing window size (F11) in single image modes messes things up...
 | |
| 		| some images are of different sizes (newly loaded) and aligned in a wrong way...
 | |
| 		|
 | |
| 		| appears not to affect square-fit view...
 | |
| 		|
 | |
| 		| until we cycle to ribbon mode and back...
 | |
| 		| 
 | |
| 		| Q: does this trigger the on-resize event???
 | |
| 		| A: no, not connected...
 | |
| 		|
 | |
| 		| possible that this is connected with the align/load bug...
 | |
| 		|
 | |
| 		| appears to be a state leak, this affects:
 | |
| 		| 	- correctImageProportionsForRotation(image) -- mis-alignes images
 | |
| 		| 	  while after cycling single image mode, behaves correctly...
 | |
| 		| 	- affects finNImages(...) -- uses old size of viewer...
 | |
| 		[X] BUG: aligning still sometimes gets off...
 | |
| 		| ...after rotating a number of images
 | |
| 		|
 | |
| 		| happens when:
 | |
| 		| 	- getScreenWidthInImages() < 2
 | |
| 		| 	- looking through images in one direction and back, some get misaligned
 | |
| 		| 		...this is stable behaviour by centerRibbon(...), 
 | |
| 		| 		calling it again will not fix this.
 | |
| 		| 		moving next/prev will fix the issue until it comes back again
 | |
| 		| 	- affected by LOAD_SCREENS and number of images in ribbon
 | |
| 		| 		current figures:
 | |
| 		| 			Ribbon: 18
 | |
| 		| 			Position going forward: 4
 | |
| 		| 			Position going back: 1
 | |
| 		| 			LOAD_SCREENS: 6
 | |
| 		| 	NOTE: changing LOAD_SCREENS moves the affected positions.
 | |
| 		| 	NOTE: had a similar bug where some images still kept their 
 | |
| 		| 			prior sizing after recycling...
 | |
| 		| 			...check if centerRibbon(...) and correctImageProportionsForRotation(...)
 | |
| 		| 			are called in right sequence...
 | |
| 		[X] BUG: keyboard.js, some combinations resolve problems...
 | |
| 		| in current help shows E, F4, alt-F4 as "Open image in ..."
 | |
| 		| 	- E and F4 work OK
 | |
| 		| 	- alt-F4 both close the viewer (default) and open an image.
 | |
| 		|
 | |
| 		| Example:
 | |
| 		| 	E: doc('Open image in external software', openImage),
 | |
| 		|	F4: {
 | |
| 		|			default: 'E',
 | |
| 		|			alt: doc('Close viewer'),
 | |
| 		|		},
 | |
| 		|
 | |
| 		[X] reverse ribbons...
 | |
| 		[X] slideshow mode...
 | |
| 		[X] default STUB image...
 | |
| 		| or a loading animation..
 | |
| 		|
 | |
| 		| ...would be good to make something pixilated so as to look nise 
 | |
| 		| on various magnifications.
 | |
| 		|
 | |
| 		| keep always cached.
 | |
| 		[X] import fav dirs (wo. index)...
 | |
| 		[X] ASAP: load/view un-cached directories...
 | |
| 		[X] ASAP: support relative paths in cache...
 | |
| 		[X] ASAP: account for image rotation with screen proportions while positioning
 | |
| 		| getRelativeVisualPosition(...) gives an odd position when:
 | |
| 		| 	- image is rotated
 | |
| 		| 	- image is screen-proportioned
 | |
| 		[X] NOTE: rotating might still produce alignment errors
 | |
| 		| this is due:
 | |
| 		| 	- most outerWidth/outerHeight being used do not account for margins...
 | |
| 		[X] ASAP: rotate images in the viewer...
 | |
| 		| This is a tad complicated by:
 | |
| 		| 	- marks
 | |
| 		| 	- image elem proportions that can change
 | |
| 		[X] 100% themes
 | |
| 			[X] light
 | |
| 			[X] gray
 | |
| 			[X] dark
 | |
| 		[X] make focus up/down chose a closest independently of direction...
 | |
| 		| navigation should be stable and moving up then down should yield 
 | |
| 		| exactly the same result...
 | |
| 		[X] ASAP: rewrite binSearch!! 
 | |
| 		| linSearch obviously is not usable for large sets of data...
 | |
| 		[X] split saving/loading into files and localStorage
 | |
| 		| DATA
 | |
| 		| 	- stored in localStorage
 | |
| 		| 	- stored in file
 | |
| 		| IMAGES
 | |
| 		| 	- stored only in files (does not change)
 | |
| 		|
 | |
| 		[X] 100% modes
 | |
| 			[X] ribbon
 | |
| 			[X] single-image
 | |
| 		[X] Save/load state
 | |
| 		[X] 100% action visual indication
 | |
| 			[X] first/last image
 | |
| 			[X] shift up/down
 | |
| 	[_] Low priority
 | |
| 		[_] Help
 | |
| 		[_] Keyboard config
 | |
| 		[_] general config
 | |
| 		
 | |
| 
 | |
| 
 | |
| [_] 74% Gen 3 UI implementation
 | |
| 	[X] 100% Infinite ribbon (lib)
 | |
| 		[X] cyclic ribbon
 | |
| 		[X] image block generation
 | |
| 		[X] image block update
 | |
| 		[X] ribbon head/tail management
 | |
| 		| must be adaptive to current user scroll speed...
 | |
| 		|
 | |
| 		| at least a couple of screens at current zoom level...
 | |
| 	[_] Partial save/load
 | |
| 	| save only a block or changed data...
 | |
| 	[X] Adaptive preview size (lib)
 | |
| 	[X] Multiple ribbon (reuse)
 | |
| 	[_] 44% User actions
 | |
| 		| see [[controls.otl]] for basic actions...
 | |
| 		|
 | |
| 		| additional actions:
 | |
| 		[X] 100% toggle mark image
 | |
| 			[X] mark between
 | |
| 			| mark all images between closest marks
 | |
| 			[X] mark all/none
 | |
| 			[X] mark invert
 | |
| 		[X] show marked only in ribbon (crop selection)
 | |
| 		[_] crop image
 | |
| 		| shows a red/blue rectangle around image
 | |
| 		|
 | |
| 		| can be:
 | |
| 		| 	turned +/- 90 deg
 | |
| 		| 	turned arbitrarily
 | |
| 		| 	scaled with constrained proportions
 | |
| 			[_] show crop as red rectangle
 | |
| 			[_] show only cropped area
 | |
| 			[_] show crop as black veil
 | |
| 		[X] add note to image
 | |
| 		| a-la flickr notes...
 | |
| 		[_] edit IPCT
 | |
| 		[_] add/edit tags (set of images)
 | |
| 		[_] add/edit tags (single image)
 | |
| 		[X] rotate image
 | |
| 	[X] 100% UI modes
 | |
| 		[X] 100% single ribbon
 | |
| 			[X] show marked only
 | |
| 			[X] show current ribbon
 | |
| 			[X] show images shifted (all / above only / below only) in current ribbon
 | |
| 		[X] 100% multiple ribbons
 | |
| 			[X] show images above/below
 | |
| 			[X] show marked only
 | |
| 		[X] 100% single image
 | |
| 
 | |
| 
 | |
| .
 | |
| | vim:set spell :
 |