1
1
/*! Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
2
SPDX-License-Identifier: Apache-2.0 */
3
3
define ( [ "jquery" , "lodash" , "app/ui/util" , "app/model" , "app/ui/layout" , "app/ui/diagram_statemachine_factory" , "app/ui/alert" , "app/settings" , "app/ui/vis_options" ] ,
4
- function ( $ , _ , ui_util , model , layout , diagram_statemachine_factory , alert , settings , vis_options ) {
4
+ function ( $ , _ , ui_util , model , layout , diagram_statemachine_factory , alert , settings , vis_options ) {
5
5
class Diagram {
6
6
7
7
constructor ( name , view_id ) {
@@ -33,11 +33,13 @@ define(["jquery", "lodash", "app/ui/util", "app/model", "app/ui/layout", "app/ui
33
33
// this.drawingSurfaceImageData;
34
34
// other state
35
35
this . first_fit = false ;
36
+ // locking some functions (move, add, delete)
37
+ this . locked = false ;
36
38
// This FSM manages the startup and state restoration
37
39
this . statemachine = diagram_statemachine_factory . create ( this ) ;
38
40
// development logging
39
- this . statemachine . on ( "transition" , ( function ( ) {
40
- return function ( data ) {
41
+ this . statemachine . on ( "transition" , ( function ( ) {
42
+ return function ( data ) {
41
43
// log the state transitions of the FSMs
42
44
console . log ( data ) ;
43
45
} ;
@@ -54,12 +56,12 @@ define(["jquery", "lodash", "app/ui/util", "app/model", "app/ui/layout", "app/ui
54
56
55
57
layout_vertical ( save ) {
56
58
var my_diagram = this ;
57
- settings . get ( "layout-method" ) . then ( function ( response ) {
59
+ settings . get ( "layout-method" ) . then ( function ( response ) {
58
60
var method = response . method ;
59
61
var options = vis_options . vertical_layout ;
60
62
options . layout . hierarchical . sortMethod = method ;
61
- my_diagram . network . once ( "afterDrawing" , ( function ( ) {
62
- return function ( ) {
63
+ my_diagram . network . once ( "afterDrawing" , ( function ( ) {
64
+ return function ( ) {
63
65
console . log ( "layout finished" ) ;
64
66
my_diagram . network . setOptions ( vis_options . without_layout ) ;
65
67
my_diagram . layout_isolated ( false ) ;
@@ -76,12 +78,12 @@ define(["jquery", "lodash", "app/ui/util", "app/model", "app/ui/layout", "app/ui
76
78
77
79
layout_horizontal ( save ) {
78
80
var my_diagram = this ;
79
- settings . get ( "layout-method" ) . then ( function ( response ) {
81
+ settings . get ( "layout-method" ) . then ( function ( response ) {
80
82
var method = response . method ;
81
83
var options = vis_options . horizontal_layout ;
82
84
options . layout . hierarchical . sortMethod = method ;
83
- my_diagram . network . once ( "afterDrawing" , ( function ( ) {
84
- return function ( ) {
85
+ my_diagram . network . once ( "afterDrawing" , ( function ( ) {
86
+ return function ( ) {
85
87
console . log ( "layout finished" ) ;
86
88
my_diagram . network . setOptions ( vis_options . without_layout ) ;
87
89
my_diagram . layout_isolated ( false ) ;
@@ -200,13 +202,13 @@ define(["jquery", "lodash", "app/ui/util", "app/model", "app/ui/layout", "app/ui
200
202
201
203
restore_nodes ( ) {
202
204
var diagram = this ;
203
- return new Promise ( function ( resolve , reject ) {
204
- layout . retrieve_layout ( diagram ) . then ( function ( layout_items ) {
205
+ return new Promise ( function ( resolve , reject ) {
206
+ layout . retrieve_layout ( diagram ) . then ( function ( layout_items ) {
205
207
var node_ids = _ . map ( layout_items , "id" ) ;
206
208
var nodes = _ . compact ( model . nodes . get ( node_ids ) ) ;
207
209
diagram . nodes . update ( nodes ) ;
208
210
resolve ( layout_items ) ;
209
- } ) . catch ( function ( error ) {
211
+ } ) . catch ( function ( error ) {
210
212
console . log ( error ) ;
211
213
reject ( error ) ;
212
214
} ) ;
@@ -215,22 +217,22 @@ define(["jquery", "lodash", "app/ui/util", "app/model", "app/ui/layout", "app/ui
215
217
216
218
restore_layout ( layout_items ) {
217
219
var diagram = this ;
218
- return new Promise ( function ( resolve , reject ) {
220
+ return new Promise ( function ( resolve , reject ) {
219
221
var inner_promise ;
220
222
if ( ! layout_items ) {
221
223
inner_promise = layout . retrieve_layout ( diagram ) ;
222
224
} else {
223
225
inner_promise = Promise . resolve ( layout_items ) ;
224
226
}
225
- inner_promise . then ( function ( layout_items ) {
227
+ inner_promise . then ( function ( layout_items ) {
226
228
for ( let item of layout_items ) {
227
229
var node = diagram . nodes . get ( item . id ) ;
228
230
if ( node ) {
229
231
diagram . network . moveNode ( item . id , item . x , item . y ) ;
230
232
}
231
233
}
232
234
resolve ( layout_items ) ;
233
- } ) . catch ( function ( error ) {
235
+ } ) . catch ( function ( error ) {
234
236
console . log ( error ) ;
235
237
reject ( error ) ;
236
238
} ) ;
@@ -241,8 +243,8 @@ define(["jquery", "lodash", "app/ui/util", "app/model", "app/ui/layout", "app/ui
241
243
for ( let node_id of this . nodes . getIds ( ) ) {
242
244
// find all edges connected to this node
243
245
var matches = model . edges . get ( {
244
- filter : ( function ( local_node_id ) {
245
- return function ( edge ) {
246
+ filter : ( function ( local_node_id ) {
247
+ return function ( edge ) {
246
248
return ( edge . to == local_node_id || edge . from == local_node_id ) ;
247
249
} ;
248
250
} ) ( node_id )
@@ -267,8 +269,8 @@ define(["jquery", "lodash", "app/ui/util", "app/model", "app/ui/layout", "app/ui
267
269
for ( let id of node_ids ) {
268
270
// query all edges from the model with this node
269
271
let filtered = _ . filter ( model . edges . get ( ) ,
270
- ( function ( local_id ) {
271
- return function ( edge ) { return edge . to == local_id || edge . from == local_id ; } ;
272
+ ( function ( local_id ) {
273
+ return function ( edge ) { return edge . to == local_id || edge . from == local_id ; } ;
272
274
} ) ( id )
273
275
) ;
274
276
for ( let edge of filtered ) {
@@ -279,30 +281,30 @@ define(["jquery", "lodash", "app/ui/util", "app/model", "app/ui/layout", "app/ui
279
281
diagram . edges . update ( edge ) ;
280
282
}
281
283
} else
282
- if ( edge . from == id ) {
283
- // check 'to' node is on diagram
284
- if ( diagram . nodes . get ( edge . to ) ) {
285
- // console.log(`${diagram.name} diagram connecting nodes ${edge.from} ${edge.to}`);
286
- diagram . edges . update ( edge ) ;
284
+ if ( edge . from == id ) {
285
+ // check 'to' node is on diagram
286
+ if ( diagram . nodes . get ( edge . to ) ) {
287
+ // console.log(`${diagram.name} diagram connecting nodes ${edge.from} ${edge.to}`);
288
+ diagram . edges . update ( edge ) ;
289
+ }
287
290
}
288
- }
289
291
}
290
292
}
291
293
} else
292
- if ( event == "remove" ) {
293
- for ( let id of node_ids ) {
294
- // query all edges on the diagram
295
- let filtered = _ . filter ( model . edges . get ( ) ,
296
- ( function ( local_id ) {
297
- return function ( edge ) { return edge . to == local_id || edge . from == local_id ; } ;
298
- } ) ( id )
299
- ) ;
300
- for ( let edge of filtered ) {
301
- console . log ( "removing unneeded edge" ) ;
302
- diagram . edges . remove ( edge . id ) ;
294
+ if ( event == "remove" ) {
295
+ for ( let id of node_ids ) {
296
+ // query all edges on the diagram
297
+ let filtered = _ . filter ( model . edges . get ( ) ,
298
+ ( function ( local_id ) {
299
+ return function ( edge ) { return edge . to == local_id || edge . from == local_id ; } ;
300
+ } ) ( id )
301
+ ) ;
302
+ for ( let edge of filtered ) {
303
+ console . log ( "removing unneeded edge" ) ;
304
+ diagram . edges . remove ( edge . id ) ;
305
+ }
303
306
}
304
307
}
305
- }
306
308
}
307
309
308
310
synchronize_content ( event , node_ids ) {
@@ -311,9 +313,9 @@ define(["jquery", "lodash", "app/ui/util", "app/model", "app/ui/layout", "app/ui
311
313
if ( event == "add" ) {
312
314
layout . save_layout ( diagram , node_ids ) ;
313
315
} else
314
- if ( event == "remove" ) {
315
- layout . delete_layout ( diagram , node_ids ) ;
316
- }
316
+ if ( event == "remove" ) {
317
+ layout . delete_layout ( diagram , node_ids ) ;
318
+ }
317
319
}
318
320
319
321
hide_div ( ) {
@@ -473,7 +475,7 @@ define(["jquery", "lodash", "app/ui/util", "app/model", "app/ui/layout", "app/ui
473
475
var diagram = this ;
474
476
if ( blinks > 0 ) {
475
477
setTimeout (
476
- function ( ) {
478
+ function ( ) {
477
479
if ( blinks % 2 == 0 ) {
478
480
diagram . network . selectNodes ( ids , false ) ;
479
481
} else {
@@ -493,14 +495,39 @@ define(["jquery", "lodash", "app/ui/util", "app/model", "app/ui/layout", "app/ui
493
495
$ ( "#" + this . tab_icon_id ) . text ( "image_aspect_ratio" ) ;
494
496
}
495
497
}
498
+
499
+ lock ( state ) {
500
+ const key = `diagram-lock-${ window . btoa ( this . name ) } ` ;
501
+ this . locked = Boolean ( state ) . valueOf ( ) ;
502
+ const promise = settings . put ( key , { "name" : this . name , "locked" : this . locked } ) ;
503
+ return promise ;
504
+ }
505
+
506
+ isLocked ( ) {
507
+ const key = `diagram-lock-${ window . btoa ( this . name ) } ` ;
508
+ return new Promise ( ( resolve , reject ) => {
509
+ const my_diagram = this ;
510
+ settings . get ( key ) . then ( function ( value ) {
511
+ if ( value ) {
512
+ my_diagram . locked = value . locked ;
513
+ }
514
+ else {
515
+ my_diagram . locked = false ;
516
+ }
517
+ resolve ( my_diagram . locked ) ;
518
+ } ) . catch ( ( error ) => {
519
+ reject ( error ) ;
520
+ } ) ;
521
+ } ) ;
522
+ }
496
523
}
497
524
498
525
function create ( name , view_id ) {
499
526
return new Diagram ( name , view_id ) ;
500
527
}
501
528
502
529
// this shuts down the browser's context menu
503
- document . body . oncontextmenu = function ( ) {
530
+ document . body . oncontextmenu = function ( ) {
504
531
return false ;
505
532
} ;
506
533
0 commit comments