basant307/AI_Governance_Project
048
1import * as is from '../is.mjs';2 3const elesfn = {};4 5function defineSwitchFunction( params ){6 return function(){7 let args = arguments;8 let changedEles = [];9 10 // e.g. cy.nodes().select( data, handler )11 if( args.length === 2 ){12 let data = args[0];13 let handler = args[1];14 this.on( params.event, data, handler );15 }16 17 // e.g. cy.nodes().select( handler )18 else if( args.length === 1 && is.fn(args[0]) ){19 let handler = args[0];20 this.on( params.event, handler );21 }22 23 // e.g. cy.nodes().select()24 // e.g. (private) cy.nodes().select(['tapselect'])25 else if( args.length === 0 || (args.length === 1 && is.array(args[0])) ){26 let addlEvents = args.length === 1 ? args[0] : null;27 28 for( let i = 0; i < this.length; i++ ){29 let ele = this[ i ];30 let able = !params.ableField || ele._private[ params.ableField ];31 let changed = ele._private[ params.field ] != params.value;32 33 if( params.overrideAble ){34 let overrideAble = params.overrideAble( ele );35 36 if( overrideAble !== undefined ){37 able = overrideAble;38 39 if( !overrideAble ){ return this; } // to save cycles assume not able for all on override40 }41 }42 43 if( able ){44 ele._private[ params.field ] = params.value;45 46 if( changed ){47 changedEles.push( ele );48 }49 }50 }51 52 let changedColl = this.spawn( changedEles );53 changedColl.updateStyle(); // change of state => possible change of style54 changedColl.emit( params.event );55 56 if( addlEvents ){57 changedColl.emit( addlEvents );58 }59 }60 61 return this;62 };63}64 65function defineSwitchSet( params ){66 elesfn[ params.field ] = function(){67 let ele = this[0];68 69 if( ele ){70 if( params.overrideField ){71 let val = params.overrideField( ele );72 73 if( val !== undefined ){74 return val;75 }76 }77 78 return ele._private[ params.field ];79 }80 };81 82 elesfn[ params.on ] = defineSwitchFunction( {83 event: params.on,84 field: params.field,85 ableField: params.ableField,86 overrideAble: params.overrideAble,87 value: true88 } );89 90 elesfn[ params.off ] = defineSwitchFunction( {91 event: params.off,92 field: params.field,93 ableField: params.ableField,94 overrideAble: params.overrideAble,95 value: false96 } );97}98 99defineSwitchSet( {100 field: 'locked',101 overrideField: function( ele ){102 return ele.cy().autolock() ? true : undefined;103 },104 on: 'lock',105 off: 'unlock'106} );107 108defineSwitchSet( {109 field: 'grabbable',110 overrideField: function( ele ){111 return ele.cy().autoungrabify() || ele.pannable() ? false : undefined;112 },113 on: 'grabify',114 off: 'ungrabify'115} );116 117defineSwitchSet( {118 field: 'selected',119 ableField: 'selectable',120 overrideAble: function( ele ){121 return ele.cy().autounselectify() ? false : undefined;122 },123 on: 'select',124 off: 'unselect'125} );126 127defineSwitchSet( {128 field: 'selectable',129 overrideField: function( ele ){130 return ele.cy().autounselectify() ? false : undefined;131 },132 on: 'selectify',133 off: 'unselectify'134} );135 136elesfn.deselect = elesfn.unselect;137 138elesfn.grabbed = function(){139 let ele = this[0];140 if( ele ){141 return ele._private.grabbed;142 }143};144 145defineSwitchSet( {146 field: 'active',147 on: 'activate',148 off: 'unactivate'149} );150 151defineSwitchSet( {152 field: 'pannable',153 on: 'panify',154 off: 'unpanify'155} );156 157elesfn.inactive = function(){158 let ele = this[0];159 if( ele ){160 return !ele._private.active;161 }162};163 164export default elesfn;165 