more experimenting with ranges...

Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
Alex A. Naanou 2016-12-28 23:36:32 +03:00
parent cc82c0bddc
commit 72e1cad416
2 changed files with 141 additions and 24 deletions

View File

@ -69,6 +69,7 @@ core.ImageGridFeatures.Feature('viewer-testing', [
//'ui-indirect-control', //'ui-indirect-control',
'marks', 'marks',
'ui-range',
// local storage + url... // local storage + url...
'config-local-storage', 'config-local-storage',

View File

@ -1610,13 +1610,35 @@ var WidgetTestActions = actions.Actions({
}], }],
})
var WidgetTest =
module.WidgetTest = core.ImageGridFeatures.Feature({
title: '',
doc: '',
tag: 'ui-widget-test',
depends: [
'ui-browse-actions',
],
actions: WidgetTestActions,
})
//---------------------------------------------------------------------
// XXX move this to a more appropriate place...
var RangeActions = actions.Actions({
// .makeBrace('open') // .makeBrace('open')
// .makeBrace('open', image) // .makeBrace('open', image)
// .makeBrace('close') // .makeBrace('close')
// .makeBrace('close', image) // .makeBrace('close', image)
// //
// XXX this should not be here... // XXX this should not be here...
makeBrace: ['- Test/Range/', makeBrace: ['- Range/',
function(type, gid){ function(type, gid){
var cls = type == 'open' ? 'brace-open' : 'brace-close' var cls = type == 'open' ? 'brace-open' : 'brace-close'
var r = this.ribbons.viewer.find('.ribbon') var r = this.ribbons.viewer.find('.ribbon')
@ -1643,16 +1665,16 @@ var WidgetTestActions = actions.Actions({
this.ribbons.restoreTransitions(r) this.ribbons.restoreTransitions(r)
}], }],
__range: null,
// XXX add "brace off screen" indicators.... // XXX add "brace off screen" indicators....
updateRangeIndicators: ['- Test/Range/', updateRangeIndicators: ['- Range/',
function(){ function(){
var range = this.__range var update = false
var range = this.data.__range
// XXX not sure if this sweeping action is the right way to // XXX not sure if this sweeping action is the right way to
// go but it sure makes things simpler... // go but it sure makes things simpler...
if(range == null){ if(range == null){
update = true
this.ribbons.viewer this.ribbons.viewer
.find('.ribbon .mark.brace') .find('.ribbon .mark.brace')
.remove() .remove()
@ -1673,18 +1695,29 @@ var WidgetTestActions = actions.Actions({
// remove braces from ribbon... // remove braces from ribbon...
} else { } else {
update = true
that.ribbons.getRibbon(r) that.ribbons.getRibbon(r)
.find('.mark.brace') .find('.mark.brace')
.remove() .remove()
} }
}) })
} }
if(update){
var r = this.ribbons.viewer.find('.ribbon')
// XXX this does not work for non-current images ...
this.ribbons.preventTransitions(r)
// XXX is this correct here???
this.focusImage()
this.ribbons.restoreTransitions(r)
}
}], }],
clearRange: ['Test/Range/Clear range', clearRange: ['Range/Clear range',
function(image){ function(image){
var r = this.ribbons.viewer.find('.ribbon') var r = this.ribbons.viewer.find('.ribbon')
delete this.__range delete this.data.__range
this.updateRangeIndicators() this.updateRangeIndicators()
}], }],
// procedure: // procedure:
@ -1694,10 +1727,10 @@ var WidgetTestActions = actions.Actions({
// When a brace is set: // When a brace is set:
// - check brace orientation and set open/close to target // - check brace orientation and set open/close to target
// - update braces on all ribbons // - update braces on all ribbons
setRangeBorder: ['Test/Range/Set range border', setRangeBorder: ['Range/Set range border',
function(image, type){ function(image, type){
var image = this.data.getImage(image) var image = this.data.getImage(image)
var range = this.__range = this.__range || [] var range = this.data.__range = this.data.__range || []
// no range... // no range...
if(range.length == 0){ if(range.length == 0){
@ -1734,14 +1767,14 @@ var WidgetTestActions = actions.Actions({
this.updateRangeIndicators() this.updateRangeIndicators()
}], }],
openRange: ['Test/Range/Open range', openRange: ['Range/Open range',
function(image){ this.setRangeBorder(image, 'open') }], function(image){ this.setRangeBorder(image, 'open') }],
closeRange: ['Test/Range/Close range', closeRange: ['Range/Close range',
function(image){ this.setRangeBorder(image, 'close') }], function(image){ this.setRangeBorder(image, 'close') }],
cropRange: ['Test/Range|Crop/Crop range', cropRange: ['Range|Crop/Crop range',
function(){ function(){
var range = this.__range var range = this.data.__range
var order = this.data.order var order = this.data.order
range range
@ -1749,9 +1782,9 @@ var WidgetTestActions = actions.Actions({
order.indexOf(range[0]), order.indexOf(range[0]),
order.indexOf(range[1])+1)) order.indexOf(range[1])+1))
}], }],
cropRangeOut: ['Test/Range|Crop/Crop out range', cropRangeOut: ['Range|Crop/Crop out range',
function(){ function(){
var range = this.__range var range = this.data.__range
var order = this.data.order var order = this.data.order
range range
@ -1761,23 +1794,28 @@ var WidgetTestActions = actions.Actions({
}], }],
}) })
var WidgetTest =
module.WidgetTest = core.ImageGridFeatures.Feature({ var Range =
module.Range = core.ImageGridFeatures.Feature({
title: '', title: '',
doc: '', doc: '',
tag: 'ui-widget-test', tag: 'ui-range',
depends: [ depends: [
'ui-browse-actions', 'ui',
], ],
actions: WidgetTestActions, actions: RangeActions,
handlers: [ handlers: [
// Range stuff... [[
'crop',
'reload',
],
function(){ this.updateRangeIndicators() }],
['updateImage', ['updateImage',
function(_, gid){ function(_, gid){
var range = this.__range var range = this.data.__range
if(this.ribbons && range && gid){ if(this.ribbons && range && gid){
var r = this.data.getRibbon(gid) var r = this.data.getRibbon(gid)
@ -1801,7 +1839,7 @@ module.WidgetTest = core.ImageGridFeatures.Feature({
}], }],
['shiftImage.pre', ['shiftImage.pre',
function(gid){ function(gid){
var range = this.__range var range = this.data.__range
if(this.ribbons && range){ if(this.ribbons && range){
this.ribbons.getImageMarks(gid).filter('.brace').remove() this.ribbons.getImageMarks(gid).filter('.brace').remove()
@ -1811,11 +1849,89 @@ module.WidgetTest = core.ImageGridFeatures.Feature({
} }
} }
}], }],
// show/hide off-screen indicators...
// XXX STUB...
[[
'focusImage',
'setScale',
'updateRangeIndicators',
],
function(_, gid){
gid = gid || this.current
var that = this
var locator = this.ribbons.getRibbonLocator()
var range = this.data.__range
if(!this.ribbons || !range){
locator.find('.range-offscreen-indicator').remove()
return
}
var Wr = this.ribbons.viewer.width()
var W = (Wr / this.scale) / 2
var _make = function(gid, ribbon, direction){
var t = ribbon[0].offsetTop
var h = ribbon[0].offsetHeight / 2
var css = {}
// XXX STUB...
css = {
display: 'none',
position: 'fixed',
width: '100px',
height: '100px',
marginTop: '-50px',
background: 'blue',
zIndex: 9000,
transition: 'all 0.1s ease',
}
var indicator = locator
.find('.range-offscreen-indicator.'+direction+'[gid="'+gid+'"]')
if(direction == 'left'){
var brace = ribbon.find('.mark.brace-open')
if(brace.length == 0 || brace.offset().left >= 0){
return indicator.remove()
}
} else if(direction == 'right'){
var brace = ribbon.find('.mark.brace-close')
if(brace.length == 0 || brace.offset().left < Wr){
return indicator.remove()
}
}
if(indicator.length == 0){
locator.append($('<div>')
.addClass('range-offscreen-indicator '+direction)
.attr('gid', gid))
}
css.left = (direction == 'left'? -W : W-100) + 'px'
css.top = (t + h) + 'px'
return indicator
.css(css)
.show(0)
}
setTimeout(function(){
that.data.ribbon_order.forEach(function(gid){
var ribbon = that.ribbons.getRibbon(gid)
_make(gid, ribbon, 'left')
_make(gid, ribbon, 'right')
})
}, 400)
}],
], ],
}) })
/********************************************************************** /**********************************************************************
* vim:set ts=4 sw=4 : */ return module }) * vim:set ts=4 sw=4 : */ return module })