ImageGrid/ui/TODO.otl
Alex A. Naanou bd8e266f46 now slidesow mode disables mark view and resets it on exit...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
2014-03-05 01:57:51 +04:00

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 :