|
import * as is from '../is'; |
|
|
|
const elesfn = {}; |
|
|
|
function defineSwitchFunction( params ){ |
|
return function(){ |
|
let args = arguments; |
|
let changedEles = []; |
|
|
|
|
|
if( args.length === 2 ){ |
|
let data = args[0]; |
|
let handler = args[1]; |
|
this.on( params.event, data, handler ); |
|
} |
|
|
|
|
|
else if( args.length === 1 && is.fn(args[0]) ){ |
|
let handler = args[0]; |
|
this.on( params.event, handler ); |
|
} |
|
|
|
|
|
|
|
else if( args.length === 0 || (args.length === 1 && is.array(args[0])) ){ |
|
let addlEvents = args.length === 1 ? args[0] : null; |
|
|
|
for( let i = 0; i < this.length; i++ ){ |
|
let ele = this[ i ]; |
|
let able = !params.ableField || ele._private[ params.ableField ]; |
|
let changed = ele._private[ params.field ] != params.value; |
|
|
|
if( params.overrideAble ){ |
|
let overrideAble = params.overrideAble( ele ); |
|
|
|
if( overrideAble !== undefined ){ |
|
able = overrideAble; |
|
|
|
if( !overrideAble ){ return this; } |
|
} |
|
} |
|
|
|
if( able ){ |
|
ele._private[ params.field ] = params.value; |
|
|
|
if( changed ){ |
|
changedEles.push( ele ); |
|
} |
|
} |
|
} |
|
|
|
let changedColl = this.spawn( changedEles ); |
|
changedColl.updateStyle(); |
|
changedColl.emit( params.event ); |
|
|
|
if( addlEvents ){ |
|
changedColl.emit( addlEvents ); |
|
} |
|
} |
|
|
|
return this; |
|
}; |
|
} |
|
|
|
function defineSwitchSet( params ){ |
|
elesfn[ params.field ] = function(){ |
|
let ele = this[0]; |
|
|
|
if( ele ){ |
|
if( params.overrideField ){ |
|
let val = params.overrideField( ele ); |
|
|
|
if( val !== undefined ){ |
|
return val; |
|
} |
|
} |
|
|
|
return ele._private[ params.field ]; |
|
} |
|
}; |
|
|
|
elesfn[ params.on ] = defineSwitchFunction( { |
|
event: params.on, |
|
field: params.field, |
|
ableField: params.ableField, |
|
overrideAble: params.overrideAble, |
|
value: true |
|
} ); |
|
|
|
elesfn[ params.off ] = defineSwitchFunction( { |
|
event: params.off, |
|
field: params.field, |
|
ableField: params.ableField, |
|
overrideAble: params.overrideAble, |
|
value: false |
|
} ); |
|
} |
|
|
|
defineSwitchSet( { |
|
field: 'locked', |
|
overrideField: function( ele ){ |
|
return ele.cy().autolock() ? true : undefined; |
|
}, |
|
on: 'lock', |
|
off: 'unlock' |
|
} ); |
|
|
|
defineSwitchSet( { |
|
field: 'grabbable', |
|
overrideField: function( ele ){ |
|
return ele.cy().autoungrabify() || ele.pannable() ? false : undefined; |
|
}, |
|
on: 'grabify', |
|
off: 'ungrabify' |
|
} ); |
|
|
|
defineSwitchSet( { |
|
field: 'selected', |
|
ableField: 'selectable', |
|
overrideAble: function( ele ){ |
|
return ele.cy().autounselectify() ? false : undefined; |
|
}, |
|
on: 'select', |
|
off: 'unselect' |
|
} ); |
|
|
|
defineSwitchSet( { |
|
field: 'selectable', |
|
overrideField: function( ele ){ |
|
return ele.cy().autounselectify() ? false : undefined; |
|
}, |
|
on: 'selectify', |
|
off: 'unselectify' |
|
} ); |
|
|
|
elesfn.deselect = elesfn.unselect; |
|
|
|
elesfn.grabbed = function(){ |
|
let ele = this[0]; |
|
if( ele ){ |
|
return ele._private.grabbed; |
|
} |
|
}; |
|
|
|
defineSwitchSet( { |
|
field: 'active', |
|
on: 'activate', |
|
off: 'unactivate' |
|
} ); |
|
|
|
defineSwitchSet( { |
|
field: 'pannable', |
|
on: 'panify', |
|
off: 'unpanify' |
|
} ); |
|
|
|
elesfn.inactive = function(){ |
|
let ele = this[0]; |
|
if( ele ){ |
|
return !ele._private.active; |
|
} |
|
}; |
|
|
|
export default elesfn; |
|
|