mirror of
https://github.com/flynx/ImageGrid.git
synced 2025-10-29 10:20:08 +00:00
reworked shift image up/down viewer actions...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
parent
5646b3fc81
commit
741b3db47e
@ -1166,6 +1166,7 @@ module.DataPrototype = {
|
||||
//
|
||||
shiftImageLeft: function(gid){ return this.shiftImage(gid, -1, 'offset') }, // Gen2
|
||||
shiftImageRight: function(gid){ return this.shiftImage(gid, 1, 'offset') }, // Gen2
|
||||
// XXX these can remove ribbons, do we need to shift base ribbon???
|
||||
shiftImageUp: function(gid){
|
||||
var g = gid.constructor === Array ? gid[0] : gid
|
||||
var r = this.getRibbonOrder(g)
|
||||
@ -1175,6 +1176,7 @@ module.DataPrototype = {
|
||||
}
|
||||
var res = this.shiftImage(gid, r-1)
|
||||
// clear empty ribbon...
|
||||
r = r == 0 ? 1 : r
|
||||
if(this.ribbons[this.ribbon_order[r]].len() == 0){
|
||||
r = this.ribbon_order.splice(r, 1)[0]
|
||||
delete this.ribbons[r]
|
||||
|
||||
@ -654,12 +654,13 @@ module.RibbonsPrototype = {
|
||||
ribbon = ribbon.length == 0 ? this.createRibbon(target) : ribbon
|
||||
|
||||
var ribbons = this.viewer.find('.ribbon')
|
||||
|
||||
// normalize the position...
|
||||
if(typeof(position) == typeof(123)){
|
||||
position = position < 0 ? ribbons.length + position + 1 : position
|
||||
position = position < 0 ? 0 : position
|
||||
} else {
|
||||
var p = this.getRibbonOrder(position)
|
||||
position = this.getRibbonOrder(position)
|
||||
// XXX what do we do if the target does not exist, i.e. p == -1 ????
|
||||
}
|
||||
|
||||
@ -671,7 +672,7 @@ module.RibbonsPrototype = {
|
||||
if(ribbons.length == 0 || ribbons.length <= position){
|
||||
this.viewer.find('.ribbon-set').append(ribbon)
|
||||
|
||||
} else if(i > position) {
|
||||
} else if(i == -1 || i > position) {
|
||||
ribbons.eq(position).before(ribbon)
|
||||
|
||||
// for placing after need to account for target ribbon removal...
|
||||
|
||||
@ -30,6 +30,58 @@ function reloadAfter(transitions){
|
||||
}
|
||||
}
|
||||
|
||||
var updateImagePosition =
|
||||
module.updateImagePosition =
|
||||
function updateImagePosition(actions, target){
|
||||
target = target instanceof jQuery ? actions.ribbons.getElemGID(target) : target
|
||||
target = target || actions.current
|
||||
|
||||
var source_ribbon = actions.ribbons.getElemGID(actions.ribbons.getRibbon(target))
|
||||
var source_order = actions.data.getImageOrder(target)
|
||||
|
||||
return function(){
|
||||
actions.ribbons.preventTransitions()
|
||||
|
||||
var target_ribbon = actions.data.getRibbon(target)
|
||||
|
||||
// nothing changed...
|
||||
if(source_ribbon == target_ribbon
|
||||
&& actions.data.getImageOrder(target) == source_order){
|
||||
return
|
||||
}
|
||||
|
||||
var to = actions.data.getImage(target, 'next')
|
||||
if(to != null){
|
||||
actions.ribbons.placeImage(target, to, 'before')
|
||||
|
||||
} else {
|
||||
to = actions.data.getImage(target, 'prev')
|
||||
if(to != null){
|
||||
actions.ribbons.placeImage(target, to, 'after')
|
||||
|
||||
// new ribbon...
|
||||
} else {
|
||||
to = actions.data.getRibbon(target)
|
||||
|
||||
if(actions.ribbons.getRibbon(to).length == 0){
|
||||
actions.ribbons.placeRibbon(to, actions.data.getRibbonOrder(target))
|
||||
}
|
||||
|
||||
actions.ribbons.placeImage(target, to)
|
||||
}
|
||||
}
|
||||
|
||||
if(actions.data.getImages(source_ribbon).length == 0){
|
||||
actions.ribbons.getRibbon(source_ribbon).remove()
|
||||
}
|
||||
|
||||
actions.focusImage()
|
||||
|
||||
actions.ribbons.restoreTransitions(true)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*********************************************************************/
|
||||
//
|
||||
@ -479,6 +531,11 @@ actions.Actions(Client, {
|
||||
this.reload()
|
||||
}
|
||||
}],
|
||||
// XXX make this better support partial data view...
|
||||
// ...at this point this first loads the full data and then
|
||||
// .focusImage(..) triggers a reload...
|
||||
// .....another approach would be to avoid .reload() where
|
||||
// possible...
|
||||
reload: ['Reload viewer',
|
||||
function(){
|
||||
this.ribbons.preventTransitions()
|
||||
@ -487,6 +544,7 @@ actions.Actions(Client, {
|
||||
this.ribbons.updateData(this.data)
|
||||
this.focusImage()
|
||||
|
||||
//this.ribbons.restoreTransitions(true)
|
||||
this.ribbons.restoreTransitions()
|
||||
}
|
||||
}],
|
||||
@ -788,9 +846,13 @@ actions.Actions(Client, {
|
||||
function(){ }],
|
||||
|
||||
|
||||
// XXX are these cheating???
|
||||
shiftImageUp: [ reloadAfter() ],
|
||||
shiftImageDown: [ reloadAfter() ],
|
||||
// NOTE: these work by getting the target position from .data...
|
||||
shiftImageTo: [
|
||||
function(target){ return updateImagePosition(this, target) }],
|
||||
shiftImageUp: [
|
||||
function(target){ return updateImagePosition(this, target) }],
|
||||
shiftImageDown: [
|
||||
function(target){ return updateImagePosition(this, target) }],
|
||||
|
||||
shiftImageLeft: [
|
||||
function(target){
|
||||
@ -961,14 +1023,14 @@ actions.Actions({
|
||||
})
|
||||
|
||||
|
||||
// XXX I do not fully understand it yet, but PartialRibbons must be
|
||||
// NOTE: I do not fully understand it yet, but PartialRibbons must be
|
||||
// setup BEFORE RibbonAlignToFirst, otherwise the later will break
|
||||
// on shifting an image to a new ribbon...
|
||||
// To reproduce:
|
||||
// - setupe RibbonAlignToFirst first
|
||||
// - go to top ribbon
|
||||
// - shift image up
|
||||
// The two should be completely independent....
|
||||
// XXX The two should be completely independent....
|
||||
// XXX need to test and tweak with actual images...
|
||||
var PartialRibbons =
|
||||
module.PartialRibbons = Feature({
|
||||
@ -1114,13 +1176,37 @@ module.BoundsIndicators = Feature({
|
||||
.on('prevRibbon.pre firstRibbon.pre', tag, didAdvance('top'))
|
||||
|
||||
// vertical shifting...
|
||||
.on('shiftImageUp.post', tag,
|
||||
function(){
|
||||
that.flashIndicator(actions.ribbons.viewer, 'up')
|
||||
.on('shiftImageUp.pre', tag,
|
||||
function(target){
|
||||
target = target || this.current
|
||||
var r0 = this.data.getRibbonOrder(target)
|
||||
var l = this.data.getImages(r0).length
|
||||
|
||||
return function(){
|
||||
var r1 = this.data.getRibbonOrder(target)
|
||||
// when shifting last image of top ribbon (i.e. length == 1)
|
||||
// up the state essentially will not change...
|
||||
if(r0 == 0 && r1 == 0 && l == 1){
|
||||
that.flashIndicator(this.ribbons.viewer, 'top')
|
||||
} else {
|
||||
that.flashIndicator(this.ribbons.viewer, 'up')
|
||||
}
|
||||
}
|
||||
})
|
||||
.on('shiftImageDown.post', tag,
|
||||
function(){
|
||||
that.flashIndicator(actions.ribbons.viewer, 'down')
|
||||
.on('shiftImageDown.pre', tag,
|
||||
function(target){
|
||||
target = target || this.current
|
||||
var r0 = this.data.getRibbonOrder(target)
|
||||
var l = this.data.getImages(r0).length
|
||||
|
||||
return function(){
|
||||
var r1 = this.data.getRibbonOrder(target)
|
||||
if(r0 == r1 && r0 == this.data.ribbon_order.length-1 && l == 1){
|
||||
that.flashIndicator(this.ribbons.viewer, 'bottom')
|
||||
} else {
|
||||
that.flashIndicator(this.ribbons.viewer, 'down')
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
// horizontal shifting...
|
||||
@ -1128,15 +1214,15 @@ module.BoundsIndicators = Feature({
|
||||
function(target){
|
||||
if(target == null
|
||||
//&& actions.data.getImageOrder('ribbon') == 0){
|
||||
&& actions.data.getImage('prev') == null){
|
||||
that.flashIndicator(actions.ribbons.viewer, 'start')
|
||||
&& this.data.getImage('prev') == null){
|
||||
that.flashIndicator(this.ribbons.viewer, 'start')
|
||||
}
|
||||
})
|
||||
.on('shiftImageRight.pre', tag,
|
||||
function(target){
|
||||
if(target == null
|
||||
&& actions.data.getImage('next') == null){
|
||||
that.flashIndicator(actions.ribbons.viewer, 'end')
|
||||
&& this.data.getImage('next') == null){
|
||||
that.flashIndicator(this.ribbons.viewer, 'end')
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user