mirror of
https://github.com/flynx/ImageGrid.git
synced 2025-11-01 03:40:09 +00:00
replaces constant resorting with careful positional insert for marks...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
parent
5e4498ca79
commit
bca0486319
@ -78,12 +78,15 @@ var toggleBookmark = makeMarkToggler(
|
||||
// add a bookmark...
|
||||
if(action == 'on'){
|
||||
if(BOOKMARKS.indexOf(gid) == -1){
|
||||
/*
|
||||
BOOKMARKS.push(gid)
|
||||
// XXX is this too expensive???
|
||||
// ...a way to avoid sorting is to:
|
||||
// BOOKMARKS.splice(
|
||||
// getGIDBefore(gid, BOOKMARKS)+1, 0, gid)
|
||||
BOOKMARKS.sort(imageOrderCmp)
|
||||
*/
|
||||
insertGIDToPosition(gid, BOOKMARKS)
|
||||
}
|
||||
|
||||
// remove a bookmark...
|
||||
|
||||
32
ui/data.js
32
ui/data.js
@ -600,6 +600,30 @@ function getGIDOrder(gid){
|
||||
}
|
||||
|
||||
|
||||
// Insert gid to it's position on list...
|
||||
//
|
||||
// This saves us from very expensive large list sorting via imageOrderCmp
|
||||
//
|
||||
// These are equivalent:
|
||||
//
|
||||
// insertGIDToPosition(gid, MARKED)
|
||||
//
|
||||
// and
|
||||
//
|
||||
// MARKED.push(gid)
|
||||
// MARKED.sort(imageOrderCmp)
|
||||
//
|
||||
// NOTE: this positions the element via DATA.order.
|
||||
function insertGIDToPosition(gid, lst, data){
|
||||
data = data == null ? DATA : data
|
||||
gid = gid == null ? getImageGID() : gid
|
||||
var i = lst.indexOf(getGIDBefore(gid, lst, data))
|
||||
i = i == null ? 0 : i+1
|
||||
lst.splice(i, 0, gid)
|
||||
return i
|
||||
}
|
||||
|
||||
|
||||
// Same as getImageBefore(...), but uses gids and searches in DATA...
|
||||
//
|
||||
// Return:
|
||||
@ -608,7 +632,7 @@ function getGIDOrder(gid){
|
||||
//
|
||||
// NOTE: if gid is present in the searched ribbon this will return it.
|
||||
// NOTE: this uses it's own predicate...
|
||||
function getGIDBefore(gid, ribbon, search, data){
|
||||
function getGIDBefore(gid, ribbon, data, search){
|
||||
gid = gid == null ? getImageGID() : gid
|
||||
data = data == null ? DATA : data
|
||||
// XXX get a ribbon without getting into DOM...
|
||||
@ -791,7 +815,7 @@ function getGIDsAround(count, gid, ribbon, data, force_count){
|
||||
|
||||
var ribbon_data = data.ribbons[ribbon]
|
||||
// get a gid that's in the current ribbon...
|
||||
gid = ribbon_data.indexOf(gid) < 0 ? getGIDBefore(gid, ribbon, null, data) : gid
|
||||
gid = ribbon_data.indexOf(gid) < 0 ? getGIDBefore(gid, ribbon, data) : gid
|
||||
|
||||
// calculate the bounds...
|
||||
var i = ribbon_data.indexOf(gid)
|
||||
@ -1329,7 +1353,7 @@ function splitData(data, gid1){
|
||||
// XXX revise...
|
||||
for(var j=0; j<gids.length; j++){
|
||||
var prev = cur
|
||||
var gid = getGIDBefore(gids[j], i, null, data)
|
||||
var gid = getGIDBefore(gids[j], i, data)
|
||||
if(gid == gids[j]){
|
||||
var cur = r.indexOf(gid)
|
||||
} else {
|
||||
@ -1686,7 +1710,7 @@ function loadImagesAround(count, gid, ribbon, data, force_count){
|
||||
ribbon = typeof(ribbon) != typeof(123) ? getRibbonIndex(ribbon) : ribbon
|
||||
count = count == null ? Math.round(CONFIG.load_screens * getScreenWidthInImages()) : count
|
||||
// get a gid that exists in the current ribbon...
|
||||
gid = getGIDBefore(gid, ribbon, null, data)
|
||||
gid = getGIDBefore(gid, ribbon, data)
|
||||
|
||||
var ribbon_elem = getRibbon(ribbon)
|
||||
|
||||
|
||||
18
ui/marks.js
18
ui/marks.js
@ -221,7 +221,6 @@ var toggleMarkesView = createCSSClassToggler(
|
||||
* Actions
|
||||
*/
|
||||
|
||||
|
||||
var toggleMark = makeMarkToggler(
|
||||
'marked',
|
||||
'selected',
|
||||
@ -230,8 +229,7 @@ var toggleMark = makeMarkToggler(
|
||||
// add marked image to list...
|
||||
if(action == 'on'){
|
||||
if(MARKED.indexOf(gid) == -1){
|
||||
MARKED.push(gid)
|
||||
MARKED.sort(imageOrderCmp)
|
||||
insertGIDToPosition(gid, MARKED)
|
||||
}
|
||||
|
||||
// remove marked image from list...
|
||||
@ -251,7 +249,7 @@ function toggleAllMarks(action, mode){
|
||||
if(action == 'on'){
|
||||
var _update = function(e){
|
||||
if(MARKED.indexOf(e) < 0){
|
||||
MARKED.push(e)
|
||||
insertGIDToPosition(e, MARKED)
|
||||
updated.push(e)
|
||||
}
|
||||
}
|
||||
@ -276,10 +274,6 @@ function toggleAllMarks(action, mode){
|
||||
|
||||
res.forEach(_update)
|
||||
|
||||
if(action == 'on'){
|
||||
MARKED.sort(imageOrderCmp)
|
||||
}
|
||||
|
||||
updateImages(updated)
|
||||
|
||||
$('.viewer').trigger('togglingMarks', [updated, action])
|
||||
@ -316,8 +310,7 @@ function invertImageMarks(){
|
||||
var i = MARKED.indexOf(e)
|
||||
if(i == -1){
|
||||
on.push(e)
|
||||
MARKED.push(e)
|
||||
MARKED.sort(imageOrderCmp)
|
||||
insertGIDToPosition(e, MARKED)
|
||||
} else {
|
||||
off.push(e)
|
||||
MARKED.splice(i, 1)
|
||||
@ -355,7 +348,7 @@ function toggleMarkBlock(image){
|
||||
}
|
||||
// do the toggle...
|
||||
if(state){
|
||||
MARKED.push(e)
|
||||
insertGIDToPosition(e, MARKED)
|
||||
} else {
|
||||
MARKED.splice(MARKED.indexOf(e), 1)
|
||||
}
|
||||
@ -372,9 +365,6 @@ function toggleMarkBlock(image){
|
||||
$.each(right, _convert)
|
||||
|
||||
updateImages(updated)
|
||||
if(state){
|
||||
MARKED.sort(imageOrderCmp)
|
||||
}
|
||||
|
||||
$('.viewer')
|
||||
.trigger('togglingImageBlockMarks', [image, updated, state])
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user