mirror of
https://github.com/flynx/ImageGrid.git
synced 2025-10-29 10:20:08 +00:00
rewrittern ribbon alighn via binary rather than liner search...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
parent
436da8bf93
commit
0c63c43862
@ -104,6 +104,7 @@ function alignRibbons(){
|
|||||||
for(var i in directions){
|
for(var i in directions){
|
||||||
var ribbon = $('.current.ribbon')[directions[i]]('.ribbon')
|
var ribbon = $('.current.ribbon')[directions[i]]('.ribbon')
|
||||||
if(ribbon.length == 1){
|
if(ribbon.length == 1){
|
||||||
|
// XXX this is not optimal...
|
||||||
var img = getImageBefore(id, ribbon)
|
var img = getImageBefore(id, ribbon)
|
||||||
if(img != null){
|
if(img != null){
|
||||||
alignRibbon(img, 'before')
|
alignRibbon(img, 'before')
|
||||||
@ -355,12 +356,12 @@ function focusBelowRibbon(){
|
|||||||
// - element
|
// - element
|
||||||
// XXX do we need to make ids numbers for this to work?
|
// XXX do we need to make ids numbers for this to work?
|
||||||
// XXX might be better to make this binary search in very large sets of data
|
// XXX might be better to make this binary search in very large sets of data
|
||||||
function getImageBefore(id, ribbon){
|
function getImageBefore_lin(id, ribbon){
|
||||||
// walk the ribbon till we find two images one with an ID less and
|
// walk the ribbon till we find two images one with an ID less and
|
||||||
// another greater that id...
|
// another greater that id...
|
||||||
id = parseInt(id)
|
id = parseInt(id)
|
||||||
var images = ribbon.children('.image')
|
var images = ribbon.children('.image')
|
||||||
var prev
|
var prev = null
|
||||||
for(var i=0; i < images.length; i++){
|
for(var i=0; i < images.length; i++){
|
||||||
if(parseInt($(images[i]).attr('id')) > id){
|
if(parseInt($(images[i]).attr('id')) > id){
|
||||||
return prev
|
return prev
|
||||||
@ -370,6 +371,75 @@ function getImageBefore(id, ribbon){
|
|||||||
return prev
|
return prev
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// binery search for element just before the id...
|
||||||
|
function binarySearch(id, lst, get){
|
||||||
|
if(get == null){
|
||||||
|
get = function(o){return o}
|
||||||
|
}
|
||||||
|
|
||||||
|
// empty list...
|
||||||
|
if(lst.length == 0){
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
// current section length
|
||||||
|
var l = Math.round((lst.length-1)/2)
|
||||||
|
// current position...
|
||||||
|
var i = l
|
||||||
|
|
||||||
|
while(true){
|
||||||
|
var i_id = get(lst[i])
|
||||||
|
// beginning of the array...
|
||||||
|
if(i == 0){
|
||||||
|
if(id > i_id){
|
||||||
|
return i
|
||||||
|
}
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
// we got a hit...
|
||||||
|
if(i_id == id){
|
||||||
|
return i-1
|
||||||
|
}
|
||||||
|
// we are at the end...
|
||||||
|
if(i == lst.length-1 && id > i_id){
|
||||||
|
return i
|
||||||
|
}
|
||||||
|
var ii_id = get(lst[i+1])
|
||||||
|
// test if id is between i and i+1...
|
||||||
|
if( i_id < id && id < ii_id ){
|
||||||
|
return i
|
||||||
|
}
|
||||||
|
// prepare for next iteration...
|
||||||
|
// NOTE: we saturate the values so we will never get out of bounds.
|
||||||
|
l = Math.round(l/2)
|
||||||
|
if(id < i_id){
|
||||||
|
// lower half...
|
||||||
|
i = Math.max(0, i-l)
|
||||||
|
} else {
|
||||||
|
// upper half...
|
||||||
|
i = Math.min(i+l, lst.length-1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// wrapper around binarySearch.
|
||||||
|
// this is here to make binarySearch simpler to test and debug...
|
||||||
|
function getImageBefore_bin(id, ribbon){
|
||||||
|
var images = ribbon.children('.image')
|
||||||
|
var i = binarySearch(
|
||||||
|
parseInt(id),
|
||||||
|
images,
|
||||||
|
function(o){return parseInt($(o).attr('id'))})
|
||||||
|
if(i == null){
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
return $(images[i])
|
||||||
|
}
|
||||||
|
|
||||||
|
var getImageBefore = getImageBefore_bin
|
||||||
|
|
||||||
|
|
||||||
// center a ribbon horizontally...
|
// center a ribbon horizontally...
|
||||||
// if id exists in ribbon make it the center, else center between the
|
// if id exists in ribbon make it the center, else center between the
|
||||||
// two images that id came from.
|
// two images that id came from.
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user