mirror of
				https://github.com/flynx/ImageGrid.git
				synced 2025-10-31 19:30:07 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			574 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			574 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
			Executable File
		
	
	
	
	
| Priority work
 | |
| 	[_] 67% Preview II
 | |
| 		[_] BUG: moving the last image from a ribbon up will make the screen jump...
 | |
| 		[_] do something sensible when no images are loaded...
 | |
| 		| in the simplest case, just write something in the middle of 
 | |
| 		| the background...
 | |
| 		|
 | |
| 		| this might include a set of instructions...
 | |
| 		[_] 46% native client
 | |
| 			[_] 19% Generic
 | |
| 				[X] make cache generator accept command-line args...
 | |
| 				| very basic form...
 | |
| 				[_] 0% import UI
 | |
| 				| (a-la IrfanView fast browser)
 | |
| 					[_] directory
 | |
| 					[_] JSON
 | |
| 					[_] CouchDB URL
 | |
| 					| low priority at this point...
 | |
| 				[_] 0% export UI
 | |
| 					[_] JSON
 | |
| 					[_] directory
 | |
| 				[_] 33% export targets
 | |
| 					[X] whole tree
 | |
| 					[_] this ribbon and above
 | |
| 					[_] this ribbon/selection
 | |
| 				[_] default settings in platform-specific JSON file
 | |
| 				| this file should be auto-loaded on first run -- when no
 | |
| 				| other settings are present...
 | |
| 				|
 | |
| 				| should be something like:
 | |
| 				| 	loadDefaultSettings()
 | |
| 				|
 | |
| 				| that will load:
 | |
| 				| 	cef-defaults.json			- for CEF
 | |
| 				| 	phonegap-defaults.json		- for, you guessed it...
 | |
| 				| 	...
 | |
| 				[_] make platform detection an issue for the abstraction layer
 | |
| 				| as it is now the case with dumbJSONFile(...)
 | |
| 			[_] 50% Windows (CEF / CEFPython)
 | |
| 				[_] package a portable exe
 | |
| 				[_] 50% basic wrapper
 | |
| 					[X] JSON reader/writer
 | |
| 					[_] directory lister
 | |
| 				[X] basic test
 | |
| 			[_] 50% Android (PhoneGap)
 | |
| 				[_] 50% package as W3C widget to be compatible with PhoneGap builder...
 | |
| 					[X] make the basic test package...
 | |
| 					| https://github.com/flynx/ImageGrid-Viewer
 | |
| 					[_] automate the build and push process (sub-git?)
 | |
| 				[_] 0% basic wrapper
 | |
| 					[_] JSON reader/writer
 | |
| 					[_] directory lister
 | |
| 				[X] basic test
 | |
| 				[X] disable transitions...
 | |
| 				[_] 0% bugs
 | |
| 					[_] taps register as two taps
 | |
| 					| possibly a tap and a click...
 | |
| 			[_] 66% Standalone utils
 | |
| 				[X] generate cache
 | |
| 				| resize images and put them into .ImageGrid.cache/<size>px directory
 | |
| 				|
 | |
| 				| should rebuild JSON
 | |
| 				[X] generate JSON
 | |
| 				| build JSON data from a directory...
 | |
| 				[_] generate dir tree
 | |
| 				| use a json file to generate a fav dir tree
 | |
| 		[_] make the system more tolerant to missing or wrong fields in json data...
 | |
| 		[_] make loading of different resolution images smooth...
 | |
| 		| can be done in several ways:
 | |
| 		| 	- cache images before loading...
 | |
| 		| 	- two layers...
 | |
| 		| 	- always keep the lowest res image loaded...
 | |
| 		[_] BUG: click does not update the image counter...
 | |
| 		[_] 0% split functionality into modules...
 | |
| 			[_] core
 | |
| 			[_] extras
 | |
| 		[X] BUG: images.json data behaves sometimes loses data... 
 | |
| 		| possibly because some fields (ctime, preview, etc) are missing...
 | |
| 		[X] load sorted images from JSON data
 | |
| 		| curently the sort is as in file...
 | |
| 		[X] fix image ordering...
 | |
| 		[X] add basic image info display...
 | |
| 		[X] 100% dynamic loading of images
 | |
| 			[X] 100% stream on navigate
 | |
| 				| parameters that affect loading:
 | |
| 				| 	- current view size				-> image size must be closest
 | |
| 				| 										above this
 | |
| 				| 	- viewer width in images		-> number of widths (2-3) 
 | |
| 				| 										distance is used to trigger
 | |
| 				| 										loading or unloading of images
 | |
| 				| 										depending on direction
 | |
| 				| 										NOTE: this is done for each
 | |
| 				| 											  image size in use.
 | |
| 				|
 | |
| 				| NOTE: here the trigger must be proximity to the view as we 
 | |
| 				| 		can reach an image not just by navigating close but 
 | |
| 				| 		also by scrolling/dragging to it (without changing the
 | |
| 				| 		current image)...
 | |
| 				[X] store structure separately from ui (mirror context)
 | |
| 				| an alternative would be to store the whole thing (sans images)
 | |
| 				| in DOM, but that ma get very big.
 | |
| 				|
 | |
| 				| storing the structure will enable us to have partial structures
 | |
| 				| thus updating the structure of a very big set without the user
 | |
| 				| noticing.
 | |
| 				[X] 100% sync context (handle edit events)
 | |
| 					[X] identify action position
 | |
| 					| use id...
 | |
| 				[X] update ui structure (handle navigate/move events)
 | |
| 			[X] sizes on zoom
 | |
| 			| still needs work...
 | |
| 		[X] make shift up/down direction-aware...
 | |
| 		| i.e. if we are going through images in a direction select the 
 | |
| 		| next image in that direction when shifting...
 | |
| 		[X] 100% load state
 | |
| 			[X] load mechanics
 | |
| 			[X] auto-load last state on startup
 | |
| 			[X] manual (console)
 | |
| 			| loadJSON(loadJSONFile(...))
 | |
| 		[X] 100% load folder
 | |
| 			[X] drag'n'drop
 | |
| 		[X] 100% save state
 | |
| 			[X] minimal: Local Storage (manual)
 | |
| 			| works across all targets (CEF, PhoneGap, browser)
 | |
| 			[X] manual local JSON (file)
 | |
| 			[X] 100% autosave
 | |
| 				[X] on edit
 | |
| 				[X] on navigate
 | |
| 				| only save position to save time...
 | |
| 				[X] on timer
 | |
| 				[X] on unload
 | |
| 			[X] manual incremental save
 | |
| 			[X] manual named save
 | |
| 			[X] versions/history
 | |
| 		[X] 100% UI
 | |
| 			[X] 100% disable opacity for current ribbon
 | |
| 				[X] 1.0 opacity for current ribbon mode
 | |
| 				| automatically turned on for magnifications over 2 images 
 | |
| 				| per screen....
 | |
| 				[X] current image indicator
 | |
| 				| this can be:
 | |
| 				| 	- rectangle (not border)
 | |
| 				| 	- underline
 | |
| 				| 	- corner icon
 | |
| 			[X] 100% settings/help screen
 | |
| 				[X] keyboard config/help
 | |
| 				[X] auto-generated settings interface
 | |
| 			[X] "hide other ribbons" mode
 | |
| 			[X] fix single image mode
 | |
| 			| need to center the image correctly...
 | |
| 			[X] 100% add screen buttons for all actions...
 | |
| 				[X] navigation
 | |
| 				[X] actions
 | |
| 				[X] zooming
 | |
| 				[X] 100% zoom presets
 | |
| 					[X] single
 | |
| 					[X] three
 | |
| 					[X] wide
 | |
| 					| toggle...
 | |
| 			[X] 100% control single-image mode animations
 | |
| 				[X] scroll
 | |
| 				[X] switch (no transition)
 | |
| 			[X] 100% layout
 | |
| 				[X] 100% tablet
 | |
| 					[X] stretch to full screen
 | |
| 					| NOTE: viewer 0% sizes may break things...
 | |
| 					[X] make buttons semi-transparent and same color as bg in all modes
 | |
| 					| just like single image mode...
 | |
| 					[X] make bg color switching in all modes
 | |
| 					| black, white, gray
 | |
| 				[X] 100% PC
 | |
| 					[X] stretch to full screen
 | |
| 					[X] make view correctly resizable
 | |
| 					| appears to work correctly but need to click an image onResize...
 | |
| 					|
 | |
| 					| XXX find a way around always clicking things...
 | |
| 					[X] hide buttons for keyboard actions
 | |
| 				[X] web
 | |
| 				| is this is the same as the above two? (with auto-select)
 | |
| 			[X] add screen-width images next/prev navigation...
 | |
| 			[X] 100% debug mode
 | |
| 				[X] toggle cross-hair
 | |
| 		[X] 100% sorted images in ribbons
 | |
| 			[X] 100% stage I: position the promoted/demoted image correctly
 | |
| 			| and correct positioning on promote/demote
 | |
| 			|
 | |
| 			|	input:
 | |
| 			| 	[01][02][03][04][05][06][07][08][09][10][11] ... [19][20]
 | |
| 			|
 | |
| 			| 		single ribbon, nothing special here.
 | |
| 			|
 | |
| 			|
 | |
| 			|   general sort:
 | |
| 			| 	         [05]      [10][11][12]  [15] [19][20] 
 | |
| 			| 	[01]  [04]  [06][07][08]  [13][14]  [18]
 | |
| 			| 	 [02][03]              [09]    [16][17]
 | |
| 			|
 | |
| 			| 	 	each strip is positioned above or below the place it was 
 | |
| 			| 	 	shifted from.
 | |
| 			| 	 	if there is not enough space use weights to balance the 
 | |
| 			| 	 	thing.
 | |
| 			|
 | |
| 			|
 | |
| 			|   selected [08]:
 | |
| 			| 	                 [05] [10][11][12] [15] [19][20] 
 | |
| 			| 	[01] [04] [06][07][[08]] [13][14] [18]
 | |
| 			| 	             [02][03] [09] [16][17]
 | |
| 			|
 | |
| 			| 		above and below images are centered around the current 
 | |
| 			| 		image as axis, the rule is that the strips left are coming 
 | |
| 			| 		from the left of the axis and likewise for the right side. 
 | |
| 			|
 | |
| 			[X] 100% stage II: scroll ribbons correctly
 | |
| 				| this is simple:
 | |
| 				| - center the right edge of image returned
 | |
| 				|   by getImageBefore in all ribbons other than current...
 | |
| 				| - center current-image in current ribbon
 | |
| 				| - vertically center the current ribbon (negative margin?)
 | |
| 				[X] prototype and basic API
 | |
| 				[X] 100% migrate main code to the new system
 | |
| 					[X] basic navigation
 | |
| 					[X] basic actions
 | |
| 					[X] zooming
 | |
| 				[X] position other ribbons...
 | |
| 				| only prev/next for now...
 | |
| 		[X] 100% correct zooming and modes
 | |
| 			[X] zooming in ribbon view
 | |
| 			[X] 100% zoom presets for ribbon view
 | |
| 			| other possible presets:
 | |
| 			| 	- five
 | |
| 			| 	- all
 | |
| 			| 	- group
 | |
| 			| 	- day/month
 | |
| 			| 	- shoot
 | |
| 			| 	- tag
 | |
| 			| 	...
 | |
| 				[X] three
 | |
| 				[X] one (with zooming)
 | |
| 			[X] single image mode with zooming
 | |
| 			| ribbons are hidden
 | |
| 		[X] 100% fix layout and animations
 | |
| 			[X] zooming
 | |
| 			[X] navigation
 | |
| 			[X] 100% actions
 | |
| 				[X] bug: shifting up to new ribbon pushes the current row down...
 | |
| 				| before starting on a fix, need to cleanup the code from old hacks and workarounds...
 | |
| 	[_] 39% Preview II (optional features)
 | |
| 		[_] undo last action (action log)
 | |
| 		[_] mark positions and jump between marks (a-la vim's "m"/"'" commands)
 | |
| 		[_] 14% make things modular and reusable (independent widget)
 | |
| 			[X] make the keyboard handler local to selector (mode-aware)
 | |
| 			[_] prefix an ID to all selectors to make their actions "local"
 | |
| 			[_] avoid use of id html attr
 | |
| 			[_] avoid use of globals
 | |
| 			| ImageGrid.XXX is a primery target...
 | |
| 			[_] split as much of the work into events as possible
 | |
| 			| one example is the stuff that's done on $('.current.image').click(),
 | |
| 			| thinks like aligning ribbons, centering, etc.
 | |
| 			[_] make sets of actions for combination via $.update(...)
 | |
| 			| make things modular...
 | |
| 			[_] organize things into "features"
 | |
| 			| this will enable reuse as simple as combining only the desired 
 | |
| 			| features into a final entity...
 | |
| 		[_] handle edit events to update the internal state state -- sync with DOM (???)
 | |
| 		| this is needed only for keeping the state in order...
 | |
| 		|
 | |
| 		| NOTE: this is not that important as buildJSON(...)
 | |
| 		| 		already does the job correctly...
 | |
| 		[_] try a coffee-script version
 | |
| 		[_] 0% PhoneGap + Android Issues:
 | |
| 			[_] scrolling in overlays does not work
 | |
| 			[_] half the keyboard is not working...
 | |
| 			[_] screen buttons are very laggy
 | |
| 			| while swipe works super fast...
 | |
| 			[_] .dblclick(...) does not work...
 | |
| 			[_] .dragable(...) does not work...
 | |
| 		[_] slideshow...
 | |
| 		| this is needed to disable navigation keys in setup-mode, for example...
 | |
| 		[X] 100% serialization/deserialization
 | |
| 			[X] JSON loader/unloader
 | |
| 			[X] file reader/writer
 | |
| 		[X] flip ribbons relative to current -- reverse order
 | |
| 		[_] fade transition in single image mode...
 | |
| 		[_] "show all promoted/demoted images" mode
 | |
| 		| display images below or above but in a more transparent 
 | |
| 		| fashion...
 | |
| 		|
 | |
| 		| XXX should they be skipped on navigation?
 | |
| 		[_] 80% drag/move action...
 | |
| 			[X] basic infrastructure
 | |
| 			[X] action: center current image
 | |
| 			[X] while zoomed more than the screen
 | |
| 			[X] while zoomed out (ribbon view)
 | |
| 			[_] 0% cleanup...
 | |
| 				[_] disable click events while dragging
 | |
| 				[_] differentiate with gestures
 | |
| 				| might be nice to add a Ps-like "space-dragging" 
 | |
| 				| feature to differentiate nav gestures and 
 | |
| 				| dragging... 
 | |
| 				| ...this may not work for tablets
 | |
| 				|
 | |
| 				| for tablets might be good to add a small timeout to 
 | |
| 				| both gestures and dragging, small enough for things 
 | |
| 				| to feel natural...
 | |
| 				|
 | |
| 				| another way is to start dragging anyway but if the 
 | |
| 				| eventual action resembles a gesture then exec that.
 | |
| 				| ...this will need careful setup of timeouts and 
 | |
| 				| dynamic disabling/enabling of both drag and gestures
 | |
| 				| e.g. of large zooms dragging takes priority.
 | |
| 		[_] 50% return to current image / home (after drag)
 | |
| 			[_] button
 | |
| 			[X] keyboard
 | |
| 		[X] double tap/click to zoom (a-la iPad)
 | |
| 		| ribbon <-> single image mode
 | |
| 		|
 | |
| 		| XXX does not work in android...
 | |
| 		[_] pinch to zoom
 | |
| 		[X] BUG: rendering error when current ribbon images opacity is 1...
 | |
| 		| This happens when:
 | |
| 		| - opcity of .current.ribbon .image is 1
 | |
| 		| - there is atleast a ribbon above
 | |
| 		| - the view is zoomed-out a bit ~70%
 | |
| 		|
 | |
| 		| the view is partially re-rendered when navigating images...
 | |
| 		|
 | |
| 		| since this is a browser render error, think of a way to work 
 | |
| 		| around this.
 | |
| 		|
 | |
| 		| WORKAROUND: set the opacity to 0.9999 instead of 1 forces the 
 | |
| 		| browser to re-render the whole set correctly. need to find a 
 | |
| 		| better way...
 | |
| 		[X] 100% add sort/re-sort capability...
 | |
| 			[X] abstract out image id
 | |
| 			[X] replace id (use something else like filename)
 | |
| 			[X] re-arrange ribbons (reverse)
 | |
| 			[X] in-place sort images in ribbons
 | |
| 		[_] 50% option to disable processor intensive features
 | |
| 			[X] global transitions
 | |
| 			[_] global opacity -- do a layout without opacity
 | |
| 		[X] 100% refactoring (low priority)
 | |
| 			[X] cleanup legacy workarounds
 | |
| 			[X] ui.js, gallery-prototype.js either merge or revise split logic
 | |
| 		[_] make scrolling of other ribbons proportional to the gap...
 | |
| 	[_] 3% Preview III
 | |
| 		[_] use Caps Lock for edit mode...
 | |
| 		[_] infinite ribbons - dynamic structure construction and partial state
 | |
| 		| one way to do this is by:
 | |
| 		| 	- limiting the number of images per field
 | |
| 		| 	- adding new images to new fields to the left and right of current
 | |
| 		[_] 0% state
 | |
| 			[_] 0% save state
 | |
| 				[_] named manual
 | |
| 				[_] CouchDB
 | |
| 			[_] 0% export state
 | |
| 				[_] JSON file
 | |
| 				[_] directory tree
 | |
| 				[_] XMP
 | |
| 			[_] 0% load state
 | |
| 				[_] named manual
 | |
| 		[_] 25% directory browser
 | |
| 			[_] browser mode/ui
 | |
| 			[_] 50% import directory
 | |
| 				[_] build/rebuild cache
 | |
| 				[X] create JSON from cache
 | |
| 		[_] collection management
 | |
| 		[_] archive management
 | |
| 		[_] 0% native client
 | |
| 			[_] android
 | |
| 				[_] restrict layout to horizontal
 | |
| 				| leave doing a different vertical layout for later versions...
 | |
| 			[_] windows
 | |
| 			[_] MacOS (low priority)
 | |
| 			[_] iOS (low priority)
 | |
| 			[_] 0% unified build system
 | |
| 		[_] 0% bugs:
 | |
| 			[_] adding a new ribbon above the current is still jumpy...
 | |
| 	[_] 0% Preview III (optional features)
 | |
| 	[_] 0% Pre-Alpha
 | |
| 		[_] 0% finalize UI logic
 | |
| 			[_] unsorted images
 | |
| 	[_] 0% Alpha
 | |
| 	[_] 0% Beta
 | |
| 	[_] 0% 1.0
 | |
| 	
 | |
| 
 | |
| [_] 38% Main workflow
 | |
| 	[_] 33% image viewing
 | |
| 		[X] viewer
 | |
| 		[_] select source
 | |
| 		[_] slideshow
 | |
| 	[X] 100% image sorting
 | |
| 		[X] ribbon navigation
 | |
| 		[X] shift image between ribbons
 | |
| 		[X] 100% basic large scale operations
 | |
| 			[X] sort all images
 | |
| 			[X] reverse all images
 | |
| 			[X] reverse ribbons
 | |
| 	[_] 0% metadata
 | |
| 		[_] tag filtering
 | |
| 		[_] tag editing
 | |
| 		[_] EXIF/IPTC
 | |
| 	[_] 20% image/export export
 | |
| 		[X] JSON
 | |
| 		[_] XMP metadata
 | |
| 		[_] fav dirs
 | |
| 		[_] file list
 | |
| 		[_] image set
 | |
| 	
 | |
| 
 | |
| 
 | |
| Goals:
 | |
| 	main ribbon always consistent
 | |
| 	fast sorting via several simple passes
 | |
| 		binary
 | |
| 		| items are split into two ribbons.
 | |
| 		|
 | |
| 		| this can be done either by mandatorily shifting either up or 
 | |
| 		| down or by restricting shifting to just one direction.
 | |
| 		|
 | |
| 		| this is a bit too restrictive.
 | |
| 		|
 | |
| 		| essentially this is a combination in the ternary approach 
 | |
| 		| below as we can still shift images between levels.
 | |
| 		ternary
 | |
| 		| current ribbon and items are either sifted up, shifted down 
 | |
| 		| relative to it or left on, unshifted.
 | |
| 		|
 | |
| 		| main ribbon consistency is not always obvious, especially on 
 | |
| 		| partially sorted sets. e.g. while sorting part of the set where 
 | |
| 		| should the unsorted part be?
 | |
| 		|
 | |
| 		|			sorted section
 | |
| 		| 			+-------------------+
 | |
| 		|
 | |
| 		| 	  oooooooooooooooooooooooooooooooo
 | |
| 		| 	-	oooooooooooooooooooooooooooo
 | |
| 		|	>		oooooooooooooooooooooxxxxxxxxxxxxxxxxxxxxxxxxxxx... <
 | |
| 		| 	+		   oooooooooooooooo
 | |
| 		| 			         oooo
 | |
| 		|
 | |
| 		| 			         			 +----------------------------+
 | |
| 		| 			         			 which level should this go to?
 | |
| 		|
 | |
| 		| in the illustration, the ribbon marked by ">" and "<" is where 
 | |
| 		| the sorting started.
 | |
| 		|
 | |
| 		| there is also a question of how do we define the border between
 | |
| 		| sorted and unsorted zones and when? 
 | |
| 		| ...after the sort is done, and when is that?
 | |
| 		|
 | |
| 		| possible ways to go around this:
 | |
| 		| 	before sorting select the working batch
 | |
| 		| 		- adds an extra step
 | |
| 		| 		- restricts later sorting
 | |
| 		| 	restrict promotion over the main ribbon
 | |
| 		| 		+ sorting can be refined later in the same mode
 | |
| 		| 		- prevents the user to select the better images on first pass
 | |
| 		| 	split the sorted and unsorted batches and never mix them
 | |
| 		| 		- restricts later sorting
 | |
| 		| 	main ribbon always shows all the better images (from better levels)
 | |
| 		| 		o needs a way to move whole topologies up/down relative 
 | |
| 		| 		  to the main ribbon...
 | |
| 		| 		  one way to do this is select and shift multiple images
 | |
| 		| 		  will shift the whole pyramid (with all the "worse" images in between)
 | |
| 		| 		- introduces modes: sorting / viewing
 | |
| 		| 		- adds a separate stage -- move the topology to a correct
 | |
| 		| 		  main ribbon position
 | |
| 		|
 | |
| 		| Q: is this system applicable to sorting search results?
 | |
| 		| A: likely yes, but the farther one gets from the main ribbon 
 | |
| 		|    the more the difference can get between adjacent images.
 | |
| 	images are always sortable
 | |
| 	all levels always browsable
 | |
| 	make all the steps except the actual sorting implicit
 | |
| 	| i.e. no jumping through hoops for the human...
 | |
| 	use the same mechanism as used for sorting, for image selection
 | |
| 	| this can be used for tagging, exhibitions, ...etc.
 | |
| 		context
 | |
| 		| a context consists of two things:
 | |
| 		| - image selection (might be a product of another context, search or selection)
 | |
| 		| - a way the levels are interpreted within this context
 | |
| 		|
 | |
| 		| default contexts: 
 | |
| 		| - full view rating context
 | |
| 		|   this incorporates ALL the archive and the levels are interpreted as ratings.
 | |
| 		| - selection rating context
 | |
| 		|   same as full view but only part of the archive is rated
 | |
| 		|   XXX this will need to be merged correctly back into the archive...
 | |
| 		| - selection context
 | |
| 		|   this simply takes one set of images as input and shows a subset as output.
 | |
| 		|
 | |
| 		| contexts are persistent, much like a catalogue.
 | |
| 		|
 | |
| 		| a context can be cloned and re-used.
 | |
| 		|
 | |
| 		| contexts can be used to mark:
 | |
| 		| - shoots
 | |
| 		| - subjects
 | |
| 		| - exhibitions/shows
 | |
| 		| - portfolios
 | |
| 		| - ...
 | |
| 	
 | |
| 
 | |
| [[controls.otl]]
 | |
| 
 | |
| 
 | |
| 
 | |
| [_] 38% features
 | |
| 	[_] 55% views
 | |
| 		[_] 60% ribbon-based view
 | |
| 			[_] show all (very zoomed out view)
 | |
| 			| might be good to not show any images here at all, just replace them with their average color
 | |
| 			[X] show map
 | |
| 			[X] fit to ribbon
 | |
| 			[X] fit to image (square)
 | |
| 			[_] ribbon with promoted/demoted images
 | |
| 			| show semi-transparent images that were demoted/promoted from current ribbon
 | |
| 		[_] 50% single image view
 | |
| 			[_] image fit to screen
 | |
| 			[X] image fit to square
 | |
| 	| show parts of upper and lower ribbons
 | |
| 	[X] image zooming
 | |
| 	| fast zooming to stages:
 | |
| 	| 	fit
 | |
| 	| 	100%
 | |
| 	| 	200%
 | |
| 	| 	...
 | |
| 	[_] basic editing and manipulation
 | |
| 	| image unchanged, data saved to json...
 | |
| 		[_] crop
 | |
| 		[_] rotate
 | |
| 
 | |
| 
 | |
| 
 | |
| [_] 38% General ToDo
 | |
| 	[_] 80% image sorting
 | |
| 		[_] will affect:
 | |
| 			[X] promote
 | |
| 			[X] demote
 | |
| 			[X] shift up
 | |
| 			[X] shift down
 | |
| 			[_] ribbon merging
 | |
| 	[_] add promote/demote events (to attach structure editors)...
 | |
| 	| enable extension and use as a generic widget...
 | |
| 	[X] add real images...
 | |
| 	[_] make all the code relative to the current selection (multiple instances on a page support)
 | |
| 	[X] add ribbon relative scrolling...
 | |
| 	| each ribbon is positioned relative to the current selected image
 | |
| 	| 	below-left: closest image to the left of the current
 | |
| 	| 	bolow-right: same as above but right...
 | |
| 	|
 | |
| 	| this will demote/promote the image directly up or down...
 | |
| 	[_] make this into a jquery plugin...
 | |
| 	[_] add dynamic loading and unloading for very large sets...
 | |
| 	[X] gesture support...
 | |
| 	[_] add basic actions:
 | |
| 		[_] rotate left
 | |
| 		[_] rotate right
 | |
| 		[_] crop
 | |
| 		...
 | |
| 	[_] add info:
 | |
| 		[_] number of images in ribbon
 | |
| 		[_] position in ribbon
 | |
| 
 | |
| 
 | |
| 
 | |
| [_] % ISSUES and BUGS:
 | |
| 	[_] jumping on focus up/down...
 | |
| 	[_] demoting a first element (a ribbon is created) positions the field incorrectly (see demoteImage() for details)...
 | |
| 
 | |
| .
 | |
| | vim:set spell :
 |