split the gen1 and gen3 ui...

Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
Alex A. Naanou 2013-05-28 15:22:05 +04:00
parent 95ae5d223d
commit 1487b4c5d4
328 changed files with 6021 additions and 1270 deletions

573
ui (gen1)/TODO.otl Executable file
View File

@ -0,0 +1,573 @@
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 :

1330
ui (gen1)/images.js Executable file

File diff suppressed because it is too large Load Diff

1330
ui (gen1)/images.json Executable file

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Some files were not shown because too many files have changed in this diff Show More