diff --git a/buildcache.py b/buildcache.py index 1b689ceb..cd54f006 100755 --- a/buildcache.py +++ b/buildcache.py @@ -1,7 +1,7 @@ #======================================================================= __version__ = '''0.0.01''' -__sub_version__ = '''20130522224619''' +__sub_version__ = '''20130525140732''' __copyright__ = '''(c) Alex A. Naanou 2011''' @@ -345,7 +345,7 @@ def build_data(images, path, config=CONFIG): #---------------------------------------------------------build_cache--- ##!!! DO NOT OVERWRITE EXISTING DATA... def build_cache(path, config=CONFIG, gid_generator=hash_gid, - report_progress=report_progress, dry_run=False, verbosity=0): + report_progress=report_progress, dry_run=False, images_only=False, verbosity=0): ''' ''' cache_dir = config['cache-dir'] @@ -371,7 +371,17 @@ def build_cache(path, config=CONFIG, gid_generator=hash_gid, if verbosity >= 1: print - for n, d in {images_file: images, data_file: data, marked_file: marked}.items(): + if images_only: + files = { + images_file: images, + } + else: + files = { + images_file: images, + data_file: data, + marked_file: marked, + } + for n, d in files.items(): n = os.path.join(path, n) if verbosity >= 1: print 'Writing: %s' % n @@ -422,6 +432,10 @@ if __name__ == '__main__': output_configuration = OptionGroup(parser, 'Output configuration') + output_configuration.add_option('--images-only', + action='store_true', + default=False, + help='Create only images.json file, skip the rest.') output_configuration.add_option('--path-mode', default='absolute' if CONFIG['absolute-path'] else 'relative', help='Path generation mode (default: "%default").') @@ -492,6 +506,7 @@ if __name__ == '__main__': verbosity = options.verbosity # bool... dry_run = options.dry_run + images_only = options.images_only # configuration stuff... # write a local configuration... @@ -534,8 +549,9 @@ if __name__ == '__main__': config, hash_gid, report, - dry_run, - verbosity) + dry_run=dry_run, + images_only=images_only, + verbosity=verbosity) # report results... if verbosity >= 1: diff --git a/ui/Gen3-TODO.otl b/ui/Gen3-TODO.otl index a9dfa52c..12aed956 100755 --- a/ui/Gen3-TODO.otl +++ b/ui/Gen3-TODO.otl @@ -2,6 +2,24 @@ [_] 48% High priority [_] 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... [_] ASAP: support relative paths in cache... [_] ASAP: load/view un-cached directories... [_] import fav dirs (wo. index)... diff --git a/ui/base.js b/ui/base.js index 7bb428be..af3e4e04 100755 --- a/ui/base.js +++ b/ui/base.js @@ -592,7 +592,7 @@ function centerView(image, mode){ // XXX this needs the image to exist... should be GID compatible... (???) function centerRibbon(ribbon, image, mode){ mode = mode == null ? TRANSITION_MODE_DEFAULT : mode - ribbon = $(ribbon) + ribbon = ribbon == null ? getRibbon() : $(ribbon) image = image == null ? $('.current.image') : $(image) $('.viewer').trigger('preCenteringRibbon', [ribbon, image]) @@ -611,15 +611,15 @@ function centerRibbon(ribbon, image, mode){ if(target.length > 0){ var dl = getRelativeVisualPosition(target, image).left/scale - //var dl = getRelativeImagePosition(target, image).left/scale l = { left: l + dl - (w/2) + offset } + // we are at the start of a ribbon -- nothing before... } else { + // get first image in ribbon... target = ribbon.find('.image').filter(NAV_DEFAULT).first() var dl = getRelativeVisualPosition(target, image).left/scale - //var dl = getRelativeImagePosition(target, image).left/scale l = { left: l + dl + (w/2) + offset } @@ -790,22 +790,6 @@ function nextRibbon(mode){ /******************************************************** Rotating ***/ -var cw = { - null: 0, - 0: 90, - 90: 180, - 180: 270, - 270: 0, -} - -var ccw = { - null: 0, - 0: 270, - 90: 0, - 180: 90, - 270: 180, -} - function correctImageProportionsForRotation(images){ var viewer = $('.viewer') var W = viewer.innerWidth() @@ -867,8 +851,25 @@ function correctImageProportionsForRotation(images){ }) } + +var _cw = { + null: 0, + 0: 90, + 90: 180, + 180: 270, + 270: 0, +} + +var _ccw = { + null: 0, + 0: 270, + 90: 0, + 180: 90, + 270: 180, +} + function rotateImage(direction, image){ - var r_table = direction == 'left' ? cw : ccw + var r_table = direction == 'left' ? _cw : _ccw image = image == null ? $('.current.image') : $(image) image.each(function(i, e){ var img = $(this) diff --git a/ui/data.js b/ui/data.js index 69fbc930..a9ff5cb6 100755 --- a/ui/data.js +++ b/ui/data.js @@ -8,7 +8,8 @@ //var DEBUG = DEBUG != null ? DEBUG : true var LOAD_SCREENS = 6 -var LOAD_THRESHOLD = 2 +//var LOAD_THRESHOLD = 2 + var DEFAULT_SCREEN_IMAGES = 4 var MAX_SCREEN_IMAGES = 12 @@ -72,6 +73,8 @@ var SETTINGS = { 'single-image-mode-proportions': null, } +var BASE_URL = '.' + /********************************************************************** @@ -287,6 +290,8 @@ function getImageGIDs(from, count, ribbon, inclusive){ // Select best preview by size... // // NOTE: this will use the original if everything else is smaller... +// +// XXX make this both relative and absolute URL compatible... function getBestPreview(gid, size){ size = size == null ? getVisibleImageSize('max') : size var s @@ -304,12 +309,46 @@ function getBestPreview(gid, size){ } } return { - url: url, + //url: url, + url: normalizePath(url), size: preview_size } } +// NOTE: mode can be either 'absolute' (default) or 'relative'... +// XXX need to account for '.' base +function normalizePath(url, base, mode){ + mode = mode == null ? 'absolute' : mode + base = base == null ? BASE_URL : base + + // absolute path... + if(/^(file|http|https):\/\/.*$/.test(url)){ + // check if we start with base, and remove it if so... + if(mode == 'relative' && url.substring(0, base.length) == base){ + url = url.substring(base.length - 1) + return url[0] == '/' ? url.substring(1) : url + + // if it's a different path, return as-is + } else if(mode == 'absolute'){ + return url + } + + // make an absolute path... + } else if(mode == 'absolute') { + // if base ends and url starts with '.' avoid making it a '..' + if(base[base.length-1] == '.' && url[0] == '.'){ + return base + url.substring(1) + // avoid creating '//'... + } else if(base[base.length-1] != '/' && url[0] != '/'){ + return base + '/' + url + } else { + return base + url + } + } +} + + /********************************************************************** * Loaders @@ -710,6 +749,7 @@ function loadFileImages(path, callback){ } +// XXX add relative path support (via. normalizePath(...)) function loadFile(data_path, image_path, callback){ // CEF return $.getJSON(data_path) @@ -873,6 +913,7 @@ function setupDataBindings(viewer){ var img_before = getImageBefore(image, ribbon) var gid_before = getGIDBefore(gid, r) var screen_size = getScreenWidthInImages() + screen_size = screen_size < 1 ? 1 : screen_size var l = ribbon.find('.image').length // load images if we do a long jump -- start, end or some mark @@ -892,12 +933,22 @@ function setupDataBindings(viewer){ // NOTE: if this is greater than the number of images currently // loaded, it might lead to odd effects... - var frame_size = (screen_size * LOAD_SCREENS) / 2 - var threshold = Math.ceil(screen_size * LOAD_THRESHOLD) + var frame_size = Math.ceil((screen_size * LOAD_SCREENS) / 2) + //var threshold = Math.ceil(screen_size * LOAD_THRESHOLD) + var threshold = Math.floor(frame_size / 2) + threshold = threshold < 1 ? 1 : threshold // do the loading... - // XXX need to expand/contract the ribbon depending on zoom and speed... + // XXX need to expand/contract the ribbon depending on speed... + // ...might also be a good idea to load smaller images + // while scrolling really fast... // XXX use extendRibbon, to both roll and expand/contract... + // XXX BUG: when rolling a ribbon, this will sometimes + // misalign an image... + // ...where exactly this happens in the ribbon depends on + // its size and LOAD_SCREENS... + // NOTE: calling centerView() will fix this. + // ...the problem is in centerRibbon if(tail.length < threshold){ var rolled = rollImages(frame_size, ribbon) } diff --git a/ui/marks.js b/ui/marks.js index 03e240fc..d2416590 100755 --- a/ui/marks.js +++ b/ui/marks.js @@ -24,13 +24,13 @@ function loadMarkedOnlyData(cmp, no_cleanout_marks){ // NOTE: if IMAGES contains only part of the data loadable this will // be wrong... if(!no_cleanout_marks){ - for(var i=0; i < marks.length;){ - if(marks[i] in IMAGES){ + for(var i=0; i < marked.length;){ + if(marked[i] in IMAGES){ i++ continue } // NOTE: we do not need to advance i here... - marks.splice(i, 1) + marked.splice(i, 1) } } ALL_DATA = DATA