UNPKG

3.6 kBJavaScriptView Raw
1import * as is from '../is';
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 override
40 }
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 style
54 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: true
88 } );
89
90 elesfn[ params.off ] = defineSwitchFunction( {
91 event: params.off,
92 field: params.field,
93 ableField: params.ableField,
94 overrideAble: params.overrideAble,
95 value: false
96 } );
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;