mirror of
https://github.com/flynx/ImageGrid.git
synced 2025-11-02 12:20:08 +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...
|
// add a bookmark...
|
||||||
if(action == 'on'){
|
if(action == 'on'){
|
||||||
if(BOOKMARKS.indexOf(gid) == -1){
|
if(BOOKMARKS.indexOf(gid) == -1){
|
||||||
|
/*
|
||||||
BOOKMARKS.push(gid)
|
BOOKMARKS.push(gid)
|
||||||
// XXX is this too expensive???
|
// XXX is this too expensive???
|
||||||
// ...a way to avoid sorting is to:
|
// ...a way to avoid sorting is to:
|
||||||
// BOOKMARKS.splice(
|
// BOOKMARKS.splice(
|
||||||
// getGIDBefore(gid, BOOKMARKS)+1, 0, gid)
|
// getGIDBefore(gid, BOOKMARKS)+1, 0, gid)
|
||||||
BOOKMARKS.sort(imageOrderCmp)
|
BOOKMARKS.sort(imageOrderCmp)
|
||||||
|
*/
|
||||||
|
insertGIDToPosition(gid, BOOKMARKS)
|
||||||
}
|
}
|
||||||
|
|
||||||
// remove a bookmark...
|
// 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...
|
// Same as getImageBefore(...), but uses gids and searches in DATA...
|
||||||
//
|
//
|
||||||
// Return:
|
// Return:
|
||||||
@ -608,7 +632,7 @@ function getGIDOrder(gid){
|
|||||||
//
|
//
|
||||||
// NOTE: if gid is present in the searched ribbon this will return it.
|
// NOTE: if gid is present in the searched ribbon this will return it.
|
||||||
// NOTE: this uses it's own predicate...
|
// NOTE: this uses it's own predicate...
|
||||||
function getGIDBefore(gid, ribbon, search, data){
|
function getGIDBefore(gid, ribbon, data, search){
|
||||||
gid = gid == null ? getImageGID() : gid
|
gid = gid == null ? getImageGID() : gid
|
||||||
data = data == null ? DATA : data
|
data = data == null ? DATA : data
|
||||||
// XXX get a ribbon without getting into DOM...
|
// 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]
|
var ribbon_data = data.ribbons[ribbon]
|
||||||
// get a gid that's in the current 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...
|
// calculate the bounds...
|
||||||
var i = ribbon_data.indexOf(gid)
|
var i = ribbon_data.indexOf(gid)
|
||||||
@ -1329,7 +1353,7 @@ function splitData(data, gid1){
|
|||||||
// XXX revise...
|
// XXX revise...
|
||||||
for(var j=0; j<gids.length; j++){
|
for(var j=0; j<gids.length; j++){
|
||||||
var prev = cur
|
var prev = cur
|
||||||
var gid = getGIDBefore(gids[j], i, null, data)
|
var gid = getGIDBefore(gids[j], i, data)
|
||||||
if(gid == gids[j]){
|
if(gid == gids[j]){
|
||||||
var cur = r.indexOf(gid)
|
var cur = r.indexOf(gid)
|
||||||
} else {
|
} else {
|
||||||
@ -1686,7 +1710,7 @@ function loadImagesAround(count, gid, ribbon, data, force_count){
|
|||||||
ribbon = typeof(ribbon) != typeof(123) ? getRibbonIndex(ribbon) : ribbon
|
ribbon = typeof(ribbon) != typeof(123) ? getRibbonIndex(ribbon) : ribbon
|
||||||
count = count == null ? Math.round(CONFIG.load_screens * getScreenWidthInImages()) : count
|
count = count == null ? Math.round(CONFIG.load_screens * getScreenWidthInImages()) : count
|
||||||
// get a gid that exists in the current ribbon...
|
// 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)
|
var ribbon_elem = getRibbon(ribbon)
|
||||||
|
|
||||||
|
|||||||
18
ui/marks.js
18
ui/marks.js
@ -221,7 +221,6 @@ var toggleMarkesView = createCSSClassToggler(
|
|||||||
* Actions
|
* Actions
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
var toggleMark = makeMarkToggler(
|
var toggleMark = makeMarkToggler(
|
||||||
'marked',
|
'marked',
|
||||||
'selected',
|
'selected',
|
||||||
@ -230,8 +229,7 @@ var toggleMark = makeMarkToggler(
|
|||||||
// add marked image to list...
|
// add marked image to list...
|
||||||
if(action == 'on'){
|
if(action == 'on'){
|
||||||
if(MARKED.indexOf(gid) == -1){
|
if(MARKED.indexOf(gid) == -1){
|
||||||
MARKED.push(gid)
|
insertGIDToPosition(gid, MARKED)
|
||||||
MARKED.sort(imageOrderCmp)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// remove marked image from list...
|
// remove marked image from list...
|
||||||
@ -251,7 +249,7 @@ function toggleAllMarks(action, mode){
|
|||||||
if(action == 'on'){
|
if(action == 'on'){
|
||||||
var _update = function(e){
|
var _update = function(e){
|
||||||
if(MARKED.indexOf(e) < 0){
|
if(MARKED.indexOf(e) < 0){
|
||||||
MARKED.push(e)
|
insertGIDToPosition(e, MARKED)
|
||||||
updated.push(e)
|
updated.push(e)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -276,10 +274,6 @@ function toggleAllMarks(action, mode){
|
|||||||
|
|
||||||
res.forEach(_update)
|
res.forEach(_update)
|
||||||
|
|
||||||
if(action == 'on'){
|
|
||||||
MARKED.sort(imageOrderCmp)
|
|
||||||
}
|
|
||||||
|
|
||||||
updateImages(updated)
|
updateImages(updated)
|
||||||
|
|
||||||
$('.viewer').trigger('togglingMarks', [updated, action])
|
$('.viewer').trigger('togglingMarks', [updated, action])
|
||||||
@ -316,8 +310,7 @@ function invertImageMarks(){
|
|||||||
var i = MARKED.indexOf(e)
|
var i = MARKED.indexOf(e)
|
||||||
if(i == -1){
|
if(i == -1){
|
||||||
on.push(e)
|
on.push(e)
|
||||||
MARKED.push(e)
|
insertGIDToPosition(e, MARKED)
|
||||||
MARKED.sort(imageOrderCmp)
|
|
||||||
} else {
|
} else {
|
||||||
off.push(e)
|
off.push(e)
|
||||||
MARKED.splice(i, 1)
|
MARKED.splice(i, 1)
|
||||||
@ -355,7 +348,7 @@ function toggleMarkBlock(image){
|
|||||||
}
|
}
|
||||||
// do the toggle...
|
// do the toggle...
|
||||||
if(state){
|
if(state){
|
||||||
MARKED.push(e)
|
insertGIDToPosition(e, MARKED)
|
||||||
} else {
|
} else {
|
||||||
MARKED.splice(MARKED.indexOf(e), 1)
|
MARKED.splice(MARKED.indexOf(e), 1)
|
||||||
}
|
}
|
||||||
@ -372,9 +365,6 @@ function toggleMarkBlock(image){
|
|||||||
$.each(right, _convert)
|
$.each(right, _convert)
|
||||||
|
|
||||||
updateImages(updated)
|
updateImages(updated)
|
||||||
if(state){
|
|
||||||
MARKED.sort(imageOrderCmp)
|
|
||||||
}
|
|
||||||
|
|
||||||
$('.viewer')
|
$('.viewer')
|
||||||
.trigger('togglingImageBlockMarks', [image, updated, state])
|
.trigger('togglingImageBlockMarks', [image, updated, state])
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user