mirror of
https://github.com/flynx/ImageGrid.git
synced 2026-01-08 11:21:09 +00:00
added liner search for testing...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
parent
8a99050d6b
commit
82e09a707f
@ -187,6 +187,30 @@ function isBetween(a, i, lst){
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Basic liner search...
|
||||||
|
function linSearch(target, lst, check, return_position, disable_direct_indexing){
|
||||||
|
// XXX is this the correct default?
|
||||||
|
check = check == null ? isBetween : check
|
||||||
|
// special case: target in the list directly...
|
||||||
|
if(disable_direct_indexing
|
||||||
|
&& check(target, lst.indexOf(target), lst) == 0){
|
||||||
|
return target
|
||||||
|
}
|
||||||
|
// special case: tail...
|
||||||
|
if(check(target, lst.length-1, lst) >= 0){
|
||||||
|
return lst[lst.length-1]
|
||||||
|
}
|
||||||
|
|
||||||
|
for(var i=0; i < lst.length; i++){
|
||||||
|
if(check(target, i, lst) == 0){
|
||||||
|
return return_position ? i : lst[i]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// no hit...
|
||||||
|
return return_position ? -1 : null
|
||||||
|
}
|
||||||
|
|
||||||
// Basic binary search implementation...
|
// Basic binary search implementation...
|
||||||
//
|
//
|
||||||
// NOTE: this will return the object by default, to return position set
|
// NOTE: this will return the object by default, to return position set
|
||||||
@ -194,7 +218,7 @@ function isBetween(a, i, lst){
|
|||||||
// NOTE: by default this will use isBetween as a predicate.
|
// NOTE: by default this will use isBetween as a predicate.
|
||||||
// NOTE: this still depends on .indexOf(...), to disable set
|
// NOTE: this still depends on .indexOf(...), to disable set
|
||||||
// disable_direct_indexing to true
|
// disable_direct_indexing to true
|
||||||
// XXX BUG this tends to fall into infinite loops...
|
// XXX BUGGY
|
||||||
// XXX this is a mess, needs revision...
|
// XXX this is a mess, needs revision...
|
||||||
function binSearch(target, lst, check, return_position, disable_direct_indexing){
|
function binSearch(target, lst, check, return_position, disable_direct_indexing){
|
||||||
// XXX is this the correct default?
|
// XXX is this the correct default?
|
||||||
@ -241,13 +265,14 @@ function binSearch(target, lst, check, return_position, disable_direct_indexing)
|
|||||||
|
|
||||||
|
|
||||||
// Same as getImageBefore, but uses gids and searches in DATA...
|
// Same as getImageBefore, but uses gids and searches in DATA...
|
||||||
function getGIDBefore(gid, ribbon){
|
function getGIDBefore(gid, ribbon, search){
|
||||||
|
search = search == null ? linSearch : search
|
||||||
ribbon = DATA.ribbons[ribbon]
|
ribbon = DATA.ribbons[ribbon]
|
||||||
var order = DATA.order
|
var order = DATA.order
|
||||||
|
|
||||||
var target = order.indexOf(gid)
|
var target = order.indexOf(gid)
|
||||||
|
|
||||||
return binSearch(target, ribbon, function (a, i, lst){
|
return search(target, ribbon, function (a, i, lst){
|
||||||
var b = order.indexOf(lst[i])
|
var b = order.indexOf(lst[i])
|
||||||
var c = order.indexOf(lst[i+1])
|
var c = order.indexOf(lst[i+1])
|
||||||
// hit...
|
// hit...
|
||||||
|
|||||||
@ -267,8 +267,19 @@ $(function(){
|
|||||||
// XXX update this depending on zoom and navigation speed...
|
// XXX update this depending on zoom and navigation speed...
|
||||||
var LOAD_SCREENS = 2
|
var LOAD_SCREENS = 2
|
||||||
// XXX update this depending on zoom and navigation speed...
|
// XXX update this depending on zoom and navigation speed...
|
||||||
var LOAD_THRESHOLD = 0.5
|
var LOAD_THRESHOLD = 1
|
||||||
$('.viewer')
|
$('.viewer')
|
||||||
|
// XXX still some times does not load the needed ribbon section
|
||||||
|
// on the first try...
|
||||||
|
// Example state:
|
||||||
|
// 0 [50] 99
|
||||||
|
// .. .. .. .. .. .. ..
|
||||||
|
// in this case moving between the top ribbon images
|
||||||
|
// does not center the bottom ribbon right away, needs
|
||||||
|
// several clicks on the current image to get there...
|
||||||
|
// ...also when going down from 50 lastImage() behaves
|
||||||
|
// in a very odd way, going back and froth rather than
|
||||||
|
// reaching 98 right away...
|
||||||
.on('preCenteringRibbon', function(evt, ribbon, image){
|
.on('preCenteringRibbon', function(evt, ribbon, image){
|
||||||
// NOTE: we do not need to worry about centering the ribbon
|
// NOTE: we do not need to worry about centering the ribbon
|
||||||
// here, just ball-park-load the correct batch...
|
// here, just ball-park-load the correct batch...
|
||||||
@ -276,25 +287,28 @@ $(function(){
|
|||||||
// check if we are in the right range...
|
// check if we are in the right range...
|
||||||
var gid = getImageGID(image)
|
var gid = getImageGID(image)
|
||||||
var r = getRibbonIndex(ribbon)
|
var r = getRibbonIndex(ribbon)
|
||||||
|
var gr = DATA.ribbons[r]
|
||||||
var img_before = getImageBefore(image, ribbon)
|
var img_before = getImageBefore(image, ribbon)
|
||||||
var gid_before = getGIDBefore(gid, r)
|
var gid_before = getGIDBefore(gid, r)
|
||||||
|
|
||||||
// load the head of the images...
|
// load the head of the images...
|
||||||
if(img_before.length == 0 && gid_before == null){
|
if(gid_before == null){
|
||||||
var gr = DATA.ribbons[r]
|
|
||||||
// NOTE: rolling to any number of positions greater than length
|
// NOTE: rolling to any number of positions greater than length
|
||||||
// of the ribbon will set the ribbon to its start/end
|
// of the ribbon will set the ribbon to its start/end
|
||||||
// depending on the sign...
|
// depending on the sign...
|
||||||
rollImages(-gr.length, ribbon)
|
rollImages(-gr.length, ribbon)
|
||||||
|
|
||||||
|
// load the tail...
|
||||||
|
// XXX for some reason this does not work (see XXX on top of the binding)
|
||||||
|
} else if(gid_before == gr[gr.length-1]){
|
||||||
|
rollImages(gr.length, ribbon)
|
||||||
|
|
||||||
// load a new set of images...
|
// load a new set of images...
|
||||||
} else if(img_before.length == 0
|
} else if(getImageGID(img_before) != gid_before){
|
||||||
|| (getImageGID(img_before)
|
|
||||||
&& getImageGID(img_before) != gid_before)){
|
|
||||||
var images = ribbon.find('.image')
|
var images = ribbon.find('.image')
|
||||||
// middle image...
|
//var cur = getImageGID(images.eq(Math.round(images.length/2)))
|
||||||
var cur = getImageGID(images.eq(Math.round(images.length/2)))
|
var cur = getImageGID(images.first())
|
||||||
var gr = DATA.ribbons[r]
|
// XXX this sometimes misses...
|
||||||
rollImages(gr.indexOf(gid_before) - gr.indexOf(cur), ribbon)
|
rollImages(gr.indexOf(gid_before) - gr.indexOf(cur), ribbon)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@ -350,6 +364,7 @@ $(function(){
|
|||||||
.index(ribbon.find('[gid='+JSON.stringify(gid)+']'))
|
.index(ribbon.find('[gid='+JSON.stringify(gid)+']'))
|
||||||
DATA.ribbons[to].splice(index, 0, gid)
|
DATA.ribbons[to].splice(index, 0, gid)
|
||||||
})
|
})
|
||||||
|
|
||||||
.on('createdRibbon', function(evt, index){
|
.on('createdRibbon', function(evt, index){
|
||||||
index = getRibbonIndex(index)
|
index = getRibbonIndex(index)
|
||||||
|
|
||||||
@ -360,28 +375,18 @@ $(function(){
|
|||||||
console.log('removing ribbon...')
|
console.log('removing ribbon...')
|
||||||
DATA.ribbons.splice(index, 1)
|
DATA.ribbons.splice(index, 1)
|
||||||
})
|
})
|
||||||
|
|
||||||
.on('requestedFirstImage', function(evt, ribbon){
|
.on('requestedFirstImage', function(evt, ribbon){
|
||||||
var r = getRibbonIndex(ribbon)
|
var r = getRibbonIndex(ribbon)
|
||||||
|
|
||||||
// XXX this result in an infinite loop somewhere...
|
|
||||||
//var target = DATA.ribbons[r][0]
|
|
||||||
//
|
|
||||||
//loadImages(target, 30, ribbon)
|
|
||||||
|
|
||||||
var gr = DATA.ribbons[r]
|
var gr = DATA.ribbons[r]
|
||||||
rollImages(-gr.length, ribbon)
|
rollImages(-gr.length, ribbon)
|
||||||
})
|
})
|
||||||
.on('requestedLastImage', function(evt, ribbon){
|
.on('requestedLastImage', function(evt, ribbon){
|
||||||
var r = getRibbonIndex(ribbon)
|
var r = getRibbonIndex(ribbon)
|
||||||
|
|
||||||
// XXX this result in an infinite loop somewhere...
|
|
||||||
//var target = DATA.ribbons[r][DATA.ribbons[r].length-1]
|
|
||||||
//
|
|
||||||
//loadImages(target, 30, ribbon)
|
|
||||||
|
|
||||||
var gr = DATA.ribbons[r]
|
var gr = DATA.ribbons[r]
|
||||||
rollImages(gr.length, ribbon)
|
rollImages(gr.length, ribbon)
|
||||||
})
|
})
|
||||||
|
|
||||||
// XXX do we need to make this less global?
|
// XXX do we need to make this less global?
|
||||||
.on('fittingImages', function(evt, n){
|
.on('fittingImages', function(evt, n){
|
||||||
updateImages()
|
updateImages()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user