cpee 2.1.29 → 2.1.50

Sign up to get free protection for your applications and to get access to all the features.
Files changed (139) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +1 -1
  3. data/cockpit/config.json +1 -1
  4. data/cockpit/css/graph.css +13 -0
  5. data/cockpit/css/track.css +1 -1
  6. data/cockpit/css/wfadaptor.css +9 -2
  7. data/cockpit/edit.html +1 -1
  8. data/cockpit/graph.html +1 -0
  9. data/cockpit/index.html +2 -2
  10. data/cockpit/js/details.js +2 -2
  11. data/cockpit/js/instance.js +162 -112
  12. data/cockpit/js/wfadaptor.js +20 -14
  13. data/cockpit/js_libs.zip +0 -0
  14. data/cockpit/templates/Coopis 2010.xml +109 -14
  15. data/cockpit/templates/Frames.xml +297 -0
  16. data/cockpit/templates/Subprocess.xml +54 -6
  17. data/cockpit/templates/Wait.xml +5 -11
  18. data/cockpit/templates/Worklist.xml +58 -26
  19. data/cockpit/themes/compact/rngs/call.rng +127 -86
  20. data/cockpit/themes/compact/rngs/callmanipulate.rng +32 -7
  21. data/cockpit/themes/compact/rngs/closed_loop_control.rng +2 -2
  22. data/cockpit/themes/compact/rngs/closed_loop_measuring.rng +3 -3
  23. data/cockpit/themes/compact/rngs/start.rng +110 -72
  24. data/cockpit/themes/compact/symbols/call_sensor.svg +9 -0
  25. data/cockpit/themes/compact/symbols/callmanipulate.svg +3 -3
  26. data/cockpit/themes/compact/symbols/callmanipulate_sensor.svg +11 -0
  27. data/cockpit/themes/compact/symbols/delete.svg +4 -0
  28. data/cockpit/themes/compact/symbols/start_event.svg +5 -0
  29. data/cockpit/themes/compact/symbols/test.svg +74 -0
  30. data/cockpit/themes/compact/theme.js +105 -9
  31. data/cockpit/themes/control/rngs/call.rng +127 -86
  32. data/cockpit/themes/control/rngs/callmanipulate.rng +32 -7
  33. data/cockpit/themes/control/rngs/closed_loop_control.rng +2 -2
  34. data/cockpit/themes/control/rngs/closed_loop_measuring.rng +3 -3
  35. data/cockpit/themes/control/rngs/start.rng +110 -72
  36. data/cockpit/themes/control/symbols/call_sensor.svg +9 -0
  37. data/cockpit/themes/control/symbols/callmanipulate.svg +3 -3
  38. data/cockpit/themes/control/symbols/callmanipulate_sensor.svg +11 -0
  39. data/cockpit/themes/control/symbols/delete.svg +4 -0
  40. data/cockpit/themes/control/symbols/start_event.svg +5 -0
  41. data/cockpit/themes/control/symbols/test.svg +74 -0
  42. data/cockpit/themes/control/theme.js +53 -7
  43. data/cockpit/themes/default/rngs/call.rng +127 -86
  44. data/cockpit/themes/default/rngs/callmanipulate.rng +32 -7
  45. data/cockpit/themes/default/rngs/closed_loop_control.rng +2 -2
  46. data/cockpit/themes/default/rngs/closed_loop_measuring.rng +3 -3
  47. data/cockpit/themes/default/rngs/start.rng +110 -72
  48. data/cockpit/themes/default/symbols/call_sensor.svg +9 -0
  49. data/cockpit/themes/default/symbols/callmanipulate.svg +3 -3
  50. data/cockpit/themes/default/symbols/callmanipulate_sensor.svg +11 -0
  51. data/cockpit/themes/default/symbols/delete.svg +4 -0
  52. data/cockpit/themes/default/symbols/start_event.svg +5 -0
  53. data/cockpit/themes/default/symbols/test.svg +74 -0
  54. data/cockpit/themes/default/theme.js +105 -9
  55. data/cockpit/themes/extended/rngs/call.rng +127 -86
  56. data/cockpit/themes/extended/rngs/callmanipulate.rng +32 -7
  57. data/cockpit/themes/extended/rngs/closed_loop_control.rng +2 -2
  58. data/cockpit/themes/extended/rngs/closed_loop_measuring.rng +3 -3
  59. data/cockpit/themes/extended/rngs/start.rng +110 -72
  60. data/cockpit/themes/extended/symbols/call_sensor.svg +9 -0
  61. data/cockpit/themes/extended/symbols/callmanipulate.svg +3 -3
  62. data/cockpit/themes/extended/symbols/callmanipulate_sensor.svg +11 -0
  63. data/cockpit/themes/extended/symbols/delete.svg +4 -0
  64. data/cockpit/themes/extended/symbols/start_event.svg +5 -0
  65. data/cockpit/themes/extended/symbols/test.svg +74 -0
  66. data/cockpit/themes/extended/theme.js +105 -9
  67. data/cockpit/themes/model/symbols/call_sensor.svg +9 -0
  68. data/cockpit/themes/model/symbols/callmanipulate.svg +3 -3
  69. data/cockpit/themes/model/symbols/callmanipulate_sensor.svg +11 -0
  70. data/cockpit/themes/model/symbols/delete.svg +4 -0
  71. data/cockpit/themes/model/symbols/start_event.svg +5 -0
  72. data/cockpit/themes/model/symbols/test.svg +74 -0
  73. data/cockpit/themes/model/theme.js +50 -4
  74. data/cockpit/themes/packed/rngs/call.rng +127 -86
  75. data/cockpit/themes/packed/rngs/callmanipulate.rng +32 -7
  76. data/cockpit/themes/packed/rngs/closed_loop_control.rng +2 -2
  77. data/cockpit/themes/packed/rngs/closed_loop_measuring.rng +3 -3
  78. data/cockpit/themes/packed/rngs/start.rng +110 -72
  79. data/cockpit/themes/packed/symbols/call_sensor.svg +9 -0
  80. data/cockpit/themes/packed/symbols/callmanipulate.svg +3 -3
  81. data/cockpit/themes/packed/symbols/callmanipulate_sensor.svg +11 -0
  82. data/cockpit/themes/packed/symbols/delete.svg +4 -0
  83. data/cockpit/themes/packed/symbols/start_event.svg +5 -0
  84. data/cockpit/themes/packed/symbols/test.svg +74 -0
  85. data/cockpit/themes/packed/theme.js +105 -9
  86. data/cockpit/themes/preset/rngs/call.rng +127 -86
  87. data/cockpit/themes/preset/rngs/callmanipulate.rng +32 -7
  88. data/cockpit/themes/preset/rngs/closed_loop_control.rng +2 -2
  89. data/cockpit/themes/preset/rngs/closed_loop_measuring.rng +3 -3
  90. data/cockpit/themes/preset/rngs/start.rng +110 -72
  91. data/cockpit/themes/preset/symbols/call_sensor.svg +9 -0
  92. data/cockpit/themes/preset/symbols/callmanipulate.svg +3 -3
  93. data/cockpit/themes/preset/symbols/callmanipulate_sensor.svg +11 -0
  94. data/cockpit/themes/preset/symbols/delete.svg +4 -0
  95. data/cockpit/themes/preset/symbols/start_event.svg +5 -0
  96. data/cockpit/themes/preset/symbols/test.svg +74 -0
  97. data/cockpit/themes/preset/theme.js +105 -9
  98. data/cpee.gemspec +6 -5
  99. data/lib/cpee/fail.rb +23 -0
  100. data/lib/cpee/implementation.rb +144 -49
  101. data/lib/cpee/implementation_callbacks.rb +11 -10
  102. data/lib/cpee/implementation_notifications.rb +4 -3
  103. data/lib/cpee/implementation_properties.rb +2 -2
  104. data/lib/cpee/message.rb +49 -15
  105. data/lib/cpee/persistence.rb +34 -12
  106. data/lib/cpee.xml +1 -1
  107. data/server/executionhandlers/ruby/backend/instance.template +1 -1
  108. data/server/executionhandlers/ruby/backend/run +4 -4
  109. data/server/executionhandlers/ruby/connection.rb +93 -34
  110. data/server/executionhandlers/ruby/controller.rb +29 -19
  111. data/server/executionhandlers/ruby/desc.xml +107 -0
  112. data/server/executionhandlers/ruby/dsl_to_dslx.xsl +67 -24
  113. data/server/executionhandlers/ruby/execution.rb +1 -0
  114. data/server/resources/states.xml +3 -0
  115. data/server/resources/test.pdf +0 -0
  116. data/server/resources/topics.xml +4 -2
  117. data/server/routing/end.pid +1 -0
  118. data/server/routing/end.rb +3 -2
  119. data/server/routing/forward-events-00.pid +1 -0
  120. data/server/routing/forward-events.rb +26 -13
  121. data/server/routing/forward-votes.pid +1 -0
  122. data/server/routing/forward-votes.rb +4 -4
  123. data/server/routing/persist.pid +1 -0
  124. data/server/routing/persist.rb +41 -31
  125. data/server/server.pid +1 -0
  126. data/tools/cpee +99 -24
  127. metadata +80 -32
  128. data/cockpit/templates/Coopis 2010.xml.active +0 -1
  129. data/cockpit/templates/Coopis 2010.xml.active-uuid +0 -1
  130. data/cockpit/templates/Subprocess.xml.active +0 -1
  131. data/cockpit/templates/Subprocess.xml.active-uuid +0 -1
  132. data/cockpit/templates/Track Test.xml.active +0 -1
  133. data/cockpit/templates/Track Test.xml.active-uuid +0 -1
  134. data/cockpit/templates/UR-VUE 2020 Solution Baseline.xml.active +0 -1
  135. data/cockpit/templates/UR-VUE 2020 Solution Baseline.xml.active-uuid +0 -1
  136. data/cockpit/templates/Wait.xml.active +0 -1
  137. data/cockpit/templates/Wait.xml.active-uuid +0 -1
  138. data/cockpit/templates/Wait.xml.attrs +0 -13
  139. data/server/executionhandlers/ruby/test.xml +0 -43
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 56e67e4d9fd57c8c9b51f5c5e2dd281f37fc0c219fe607c41d56e8da68cf3802
4
- data.tar.gz: 5c537c87ed397e3da5a58fa9a06a410371408229d72f8302ac3f8d1aad07bddc
3
+ metadata.gz: ae076f6c9e29ad07d9fde309d7d442c217f4f5e6dc7d53a1568539ac8ab355b5
4
+ data.tar.gz: 848076eca4541d65022199637c8b49a01a27072a05217e953b56b260e131bbf3
5
5
  SHA512:
6
- metadata.gz: 1e2ffe8f6b2594b0d7badfef16628e2444df2762a639bbaf93f36191c44d69b81a120bd3ed66502f869689039fb8a5e1b0d7c10cfc36200101fc512678678a59
7
- data.tar.gz: 6eca82caf6987dd5e17c0629be864747444efd7e0d03e202d98c4759e2b5d2d29625911d08fe11c222e8b8a8d05211f7880645c260987b9225216daa93948a82
6
+ metadata.gz: 9fb987297935bf548bd59a0547bf11b1b4b2a333d7064d7b4e1b124ece5372384c39263550476d474cf1b255a58a2dfb59ce8858d4b15f5572b7277cccfd755c
7
+ data.tar.gz: c7ce6bcb5a7d798ea680c160941fd3d2a76c990ee7a32c9ee55da99eff9dc9f75c5073c05cf6b01066d6a05e7afa31e8a13717ffb32e4382e2e3bd8f91c622f7
data/Rakefile CHANGED
@@ -28,6 +28,6 @@ end
28
28
  desc "Clean instances"
29
29
  task :clean do
30
30
  Dir.glob("server/instances/*").collect{ |i| i if i =~ /\/\d+$/ }.compact.each do |i|
31
- rm_rf i if File.exists?(i)
31
+ rm_rf i if File.exist?(i)
32
32
  end
33
33
  end
data/cockpit/config.json CHANGED
@@ -1,3 +1,3 @@
1
1
  {
2
- "res-url": "https://tango.wst.univie.ac.at/flow/resources/"
2
+ "res-url": "https://cpee.org/flow/resources/"
3
3
  }
@@ -0,0 +1,13 @@
1
+ #trackfull {
2
+ display: flex;
3
+ flex-direction:row;
4
+ align-items: stretch;
5
+ height: 100vh;
6
+ }
7
+ #graphcolumn {
8
+ flex: 0 1 auto;
9
+ width: 100vw;
10
+ min-width: 15em;
11
+ border-right: 0 none;
12
+ overflow: auto;
13
+ }
@@ -6,7 +6,7 @@
6
6
  }
7
7
  #graphcolumn {
8
8
  flex: 0 1 auto;
9
- width: 35em;
9
+ width: 40em;
10
10
  min-width: 15em;
11
11
  border-right: 0 none;
12
12
  overflow: auto;
@@ -27,7 +27,7 @@
27
27
  --wfadaptor-selected: #f57900;
28
28
  --wfadaptor-stripe: #e9e9e9;
29
29
  --wfadaptor-background: #ffffff;
30
- --wfadaptor-background-menu: #ff7f7f;
30
+ --wfadaptor-menu: #ef2929;
31
31
  --wfadaptor-border: #a1a1a1;
32
32
  }
33
33
 
@@ -73,7 +73,11 @@ svg g.vote .rline {
73
73
  }
74
74
 
75
75
  svg .rfill.menu {
76
- fill: var(--wfadaptor-background-menu);
76
+ fill: var(--wfadaptor-menu);
77
+ fill-opacity:1;
78
+ }
79
+ svg .hfill.menu {
80
+ fill: var(--wfadaptor-menu);
77
81
  fill-opacity:1;
78
82
  }
79
83
 
@@ -130,6 +134,9 @@ svg .standfat {
130
134
  stroke-opacity:1;
131
135
  stroke-dasharray:none;
132
136
  }
137
+ svg .standfat.menu {
138
+ stroke: var(--wfadaptor-menu);
139
+ }
133
140
  svg .normal {
134
141
  fill: var(--wfadaptor-base);
135
142
  fill-opacity:1;
data/cockpit/edit.html CHANGED
@@ -253,7 +253,7 @@
253
253
  </ui-area>
254
254
  <ui-area data-belongs-to-tab="dsl" id="areadsl" class="inactive"></ui-area>
255
255
  <ui-area data-belongs-to-tab="log" id="arealog" class="inactive"> <!--{{{-->
256
- <div>Persistent Log: <a style='display:none' target='_blank' id='current-log'></a></div>
256
+ <div>Persistent Log: <a style='display:none' target='_blank' id='current-log'></a> [<a style='display:none' target='_blank' id='shifted-log'>S</a>]</div>
257
257
  <table id="dat_log" class="x-ui-layout"></table>
258
258
  </ui-area> <!--}}}-->
259
259
  </ui-content>
data/cockpit/graph.html CHANGED
@@ -56,6 +56,7 @@
56
56
  <script type="text/javascript" src="js/parameters.js"></script>
57
57
  <script type="text/javascript" src="js/modifiers.js"></script>
58
58
  <link rel="stylesheet" href="css/ui.css" type="text/css"/>
59
+ <link rel="stylesheet" href="css/graph.css" type="text/css"/>
59
60
  </head>
60
61
  <body data-base-port="8298" data-res-port="9303" data-theme-base="themes" is="x-ui-">
61
62
  <div class='hidden' id='relaxngworker'></div>
data/cockpit/index.html CHANGED
@@ -243,7 +243,7 @@
243
243
  <ui-behind ><a style='display:none' target='_blank' id='current-track'>T</a><a style='display:none' target='_blank' id='current-graph'>G</a></ui-behind>
244
244
  </ui-tabbar>
245
245
  <ui-content>
246
- <ui-area data-belongs-to-tab="details" id='graphcolumn'>
246
+ <ui-area data-belongs-to-tab="details" id='graphcolumn' oncontextmenu='return false'>
247
247
  <div id='graphgrid'>
248
248
  <svg xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:x="http://www.w3.org/1999/xlink" id='graphcanvas' width='1' height='1'></svg>
249
249
  </div>
@@ -254,7 +254,7 @@
254
254
  </ui-area>
255
255
  <ui-area data-belongs-to-tab="dsl" id="areadsl" class="inactive"></ui-area>
256
256
  <ui-area data-belongs-to-tab="log" id="arealog" class="inactive"> <!--{{{-->
257
- <div>Persistent Log: <a style='display:none' target='_blank' id='current-log'></a></div>
257
+ <div>Persistent Log: <a style='display:none' target='_blank' id='current-log'></a> [<a style='display:none' target='_blank' id='shifted-log'>S</a>]</div>
258
258
  <table id="dat_log" class="x-ui-layout"></table>
259
259
  </ui-area> <!--}}}-->
260
260
  </ui-content>
@@ -21,8 +21,8 @@ $(document).ready(function() {
21
21
  });
22
22
  $(document).on('keypress','#dat_details [contenteditable]',function(e){
23
23
  if (e.keyCode == 13) {
24
- document.execCommand('insertText', false, '\n');
25
- return false;
24
+ document.execCommand('insertLineBreak')
25
+ e.preventDefault()
26
26
  }
27
27
  });
28
28
  $(document).on('relaxngui_remove', '#dat_details', function(e){
@@ -17,9 +17,11 @@ function global_init() {
17
17
  loading = false;
18
18
  subscription = undefined;
19
19
  subscription_state = 'less';
20
+ save['states']= {};
20
21
  save['state']= undefined;
21
22
  save['dsl'] = undefined;
22
- save['activity_states'] = {}
23
+ save['activity_red_states'] = {}
24
+ save['activity_blue_states'] = {}
23
25
  save['graph'] = undefined;
24
26
  save['graph_theme'] = undefined;
25
27
  save['graph_adaptor'] = undefined;
@@ -270,7 +272,7 @@ function sse() { //{{{
270
272
  if (data['type'] == 'event') {
271
273
  switch(data['topic']) {
272
274
  case 'dataelements':
273
- monitor_instance_values("dataelements");
275
+ monitor_instance_values("dataelements",data.content.values);
274
276
  break;
275
277
  case 'description':
276
278
  monitor_instance_dsl();
@@ -291,6 +293,7 @@ function sse() { //{{{
291
293
  }
292
294
  break;
293
295
  case 'state':
296
+ save['states'][data['content']['state']] = Date.parse(data.timestamp);
294
297
  monitor_instance_state_change(data['content']['state']);
295
298
  break;
296
299
  case 'position':
@@ -390,82 +393,110 @@ function monitor_instance(cin,rep,load,exec) {// {{{
390
393
  });
391
394
  }// }}}
392
395
 
393
- function monitor_instance_values(val) {// {{{
396
+ function monitor_instance_values(type,vals) {// {{{
394
397
  var url = $('body').attr('current-instance');
395
398
  var rep = $('body').attr('current-resources');
396
399
  var bas = $('body').attr('current-base');
397
400
 
398
- $.ajax({
399
- type: "GET",
400
- url: url + "/properties/" + val + "/",
401
- success: function(res){
402
- save[val].content(res);
403
- if (val == "endpoints") {
404
- save['endpoints_list'] = {};
405
- var tmp = {};
406
- $(res).find(" > endpoints > *").each(function(k,v) {
407
- save['endpoints_list'][v.localName] = v.lastChild.nodeValue;
408
- $.ajax({
409
- url: rep + 'endpoints/' + encodeURIComponent($(v).text()),
410
- success: function() {
411
- tmp[v.tagName] = {};
412
- var deferreds = [new $.Deferred(), new $.Deferred(), new $.Deferred()];
413
- $.ajax({
414
- url: rep + 'endpoints/' + encodeURIComponent($(v).text()) + "/symbol.svg",
415
- success: function(res) {
416
- tmp[v.tagName]['symbol'] = res;
417
- deferreds[0].resolve(true);
418
- },
419
- error: deferreds[0].resolve
420
- })
421
- $.ajax({
422
- url: rep + 'endpoints/' + encodeURIComponent($(v).text()) + "/schema.rng",
423
- success: function(res) {
424
- tmp[v.tagName]['schema'] = res;
425
- deferreds[1].resolve(true);
426
- },
427
- error: deferreds[1].resolve
428
- })
429
- $.ajax({
430
- url: rep + 'endpoints/' + encodeURIComponent($(v).text()) + "/properties.json",
431
- success: function(res) {
432
- tmp[v.tagName]['properties'] = res;
433
- deferreds[2].resolve(true);
434
- },
435
- error: deferreds[2].resolve
436
- })
437
- $.when.apply($, deferreds).then(function(x) {
438
- save['endpoints_cache'] = tmp;
439
- // when updating attributes clear the attributes, because they might change as well. New arguments are possible.
440
- $('#dat_details').empty();
441
- adaptor_update();
442
- });
443
- }
444
- });
445
- });
446
- } else if(val == "attributes") {
447
- if ($('#modifiers > div').length == 0) {
448
- modifiers_display().then(function(){ modifiers_select(); });
401
+ if (type == "dataelements" && save['state'] == "running") {
402
+ let de = save[type].save();
403
+ Object.entries(vals).forEach(([key,value]) => {
404
+ let entry = $(de).find(' > dataelements > ' + key);
405
+ if (entry.length > 0) {
406
+ if (typeof value === 'string' || typeof value === 'boolean' || typeof value === 'number') {
407
+ entry.text(value)
449
408
  } else {
450
- modifiers_select();
409
+ entry.text(JSON.stringify(value))
451
410
  }
452
- var text = $(" > attributes > info",res).text() + " (" + url.replace(/\/$/,'').split(/[\\/]/).pop() + ")";
453
- $('#title').text(text);
454
- document.title = text;
455
- if ($('body').attr('current-save')) {
456
- $('body').attr('current-save-dir',$(" > attributes > design_dir",res).text());
411
+ } else {
412
+ let ele = $X('<' + key + ' xmlns="http://cpee.org/ns/properties/2.0"/>')
413
+ if (typeof value === 'string' || typeof value === 'boolean' || typeof value === 'number') {
414
+ $(ele).text(value)
415
+ } else {
416
+ $(ele).text(JSON.stringify(value))
457
417
  }
458
- if ($('body').attr('current-logs')) {
459
- var uuid = $(" > attributes > uuid",res).text();
460
- $("#current-log").show();
461
- $("#current-log").attr('href',$('body').attr('current-logs') + uuid + '.xes.yaml');
462
- if ($("#current-log").text() == '') {
463
- $("#current-log").text(uuid + '.xes.yaml');
418
+ $(de).find(' > dataelements').append(ele)
419
+ }
420
+ });
421
+ save[type].content(de);
422
+ } else {
423
+ $.ajax({
424
+ type: "GET",
425
+ url: url + "/properties/" + type + "/",
426
+ success: function(res){
427
+ save[type].content(res);
428
+ if (type == "endpoints") {
429
+ save['endpoints_list'] = {};
430
+ var tmp = {};
431
+ $(res).find(" > endpoints > *").each(function(k,v) {
432
+ save['endpoints_list'][v.localName] = v.lastChild.nodeValue;
433
+ $.ajax({
434
+ url: rep + 'endpoints/' + encodeURIComponent($(v).text()),
435
+ success: function() {
436
+ tmp[v.tagName] = {};
437
+ var deferreds = [new $.Deferred(), new $.Deferred(), new $.Deferred()];
438
+ $.ajax({
439
+ url: rep + 'endpoints/' + encodeURIComponent($(v).text()) + "/symbol.svg",
440
+ success: function(res) {
441
+ tmp[v.tagName]['symbol'] = res;
442
+ deferreds[0].resolve(true);
443
+ },
444
+ error: deferreds[0].resolve
445
+ })
446
+ $.ajax({
447
+ url: rep + 'endpoints/' + encodeURIComponent($(v).text()) + "/schema.rng",
448
+ success: function(res) {
449
+ tmp[v.tagName]['schema'] = res;
450
+ deferreds[1].resolve(true);
451
+ },
452
+ error: deferreds[1].resolve
453
+ })
454
+ $.ajax({
455
+ url: rep + 'endpoints/' + encodeURIComponent($(v).text()) + "/properties.json",
456
+ success: function(res) {
457
+ tmp[v.tagName]['properties'] = res;
458
+ deferreds[2].resolve(true);
459
+ },
460
+ error: deferreds[2].resolve
461
+ })
462
+ $.when.apply($, deferreds).then(function(x) {
463
+ save['endpoints_cache'] = tmp;
464
+ // when updating attributes clear the attributes, because they might change as well. New arguments are possible.
465
+ $('#dat_details').empty();
466
+ adaptor_update();
467
+ });
468
+ }
469
+ });
470
+ });
471
+ } else if(type == "attributes") {
472
+ if ($('#modifiers > div').length == 0) {
473
+ modifiers_display().then(function(){ modifiers_select(); });
474
+ } else {
475
+ modifiers_select();
476
+ }
477
+ var text = $(" > attributes > info",res).text() + " (" + url.replace(/\/$/,'').split(/[\\/]/).pop() + ")";
478
+ $('#title').text(text);
479
+ document.title = text;
480
+ if ($('body').attr('current-save')) {
481
+ $('body').attr('current-save-dir',$(" > attributes > design_dir",res).text());
482
+ }
483
+ if ($('body').attr('current-logs')) {
484
+ var uuid = $(" > attributes > uuid",res).text();
485
+ $("#current-log").show();
486
+ $("#shifted-log").show();
487
+ $("#current-log").attr('href',$('body').attr('current-logs') + uuid + '.xes.yaml');
488
+ $("#shifted-log").attr('href',$('body').attr('current-logs') + uuid + '.xes.shift.yaml');
489
+ if ($("#current-log").text() == '') {
490
+ $("#current-log").text(uuid + '.xes.yaml');
491
+ }
492
+ if ($("#shifted-log").text() == '') {
493
+ $("#shifted-log").text(uuid + '.xes.shift.yaml');
494
+ }
464
495
  }
465
496
  }
466
497
  }
467
- }
468
- });
498
+ });
499
+ }
469
500
  } // }}}
470
501
 
471
502
  function adaptor_update() { //{{{
@@ -519,24 +550,24 @@ function adaptor_init(url,theme,dslx) { //{{{
519
550
  });
520
551
  $('#graphgrid').css({
521
552
  'grid-template-rows': (shift/2) + 'px repeat(' + max.row + ', 1fr) ' + (shift/2) + 'px',
522
- 'grid-template-columns': 'max-content' + (tcolumns.length > 0 ? ' repeat(' + tcolumns.length.toString() + ',max-content)' : '') + ' auto'
553
+ 'grid-template-columns': 'max-content' + (tcolumns.length > 0 ? ' repeat(' + tcolumns.length.toString() + ',max-content)' : '') + ' auto'
523
554
  });
524
555
  for (var i = 0; i < max.row; i++) {
525
- for (var j =0; j < tcolumns.length; j++) {
556
+ for (var j = 0; j < tcolumns.length; j++) {
526
557
  if (tlabels[i+1] != undefined && tlabels[i+1][j] != undefined && tlabels[i+1][j].label != undefined && tlabels[i+1][j].label != '') {
527
558
  var col = tlabels[i+1][j];
528
- var ele = $('<div class="graphlabel ' + (i % 2 == 0 ? 'odd' : 'even') + '" element-type="' + col.type + '" element-id="' + col.id + '" style="grid-column: ' + (j+2) + '; grid-row: ' + (i+2) + '"><span>' + col.label + '</span></div>');
529
- graphrealization.illustrator.draw.bind_event(ele,col.type,false);
559
+ var ele = $('<div element-row="' + i + '" class="graphlabel ' + (i % 2 == 0 ? 'odd' : 'even') + '" element-type="' + col.type + '" element-id="' + col.id + '" style="grid-column: ' + (j+2) + '; grid-row: ' + (i+2) + '"><span>' + col.label + '</span></div>');
560
+ graphrealization.illustrator.draw.bind_event(ele, col.type, false);
530
561
  $('#graphgrid').append(ele);
531
562
  } else {
532
563
  if (tcolumncount[tcolumns[j]] != 0) {
533
- var ele = $('<div class="graphempty ' + (i % 2 == 0 ? 'odd' : 'even') + '" style="grid-column: ' + (j+2) + '; grid-row: ' + (i+2) + '; padding-bottom: ' + shift + 'px">&#032;</div>');
564
+ var ele = $('<div element-row="' + i + '" class="graphempty ' + (i % 2 == 0 ? 'odd' : 'even') + '" style="grid-column: ' + (j+2) + '; grid-row: ' + (i+2) + '; padding-bottom: ' + shift + 'px">&#032;</div>');
534
565
  $('#graphgrid').append(ele);
535
566
  }
536
567
  }
537
568
  }
538
569
  var j = tcolumns.length;
539
- var ele = $('<div class="graphlast ' + (i % 2 == 0 ? 'odd' : 'even') + '" style="grid-column: ' + (j+2) + '; grid-row: ' + (i+2) + '; padding-bottom: ' + shift + 'px">&#032;</div>');
570
+ var ele = $('<div element-row="' + i + '" class="graphlast ' + (i % 2 == 0 ? 'odd' : 'even') + '" style="grid-column: ' + (j+2) + '; grid-row: ' + (i+2) + '; padding-bottom: ' + shift + 'px">&#032;</div>');
540
571
  $('#graphgrid').append(ele);
541
572
  }
542
573
  };
@@ -658,26 +689,64 @@ function monitor_instance_pos() {// {{{
658
689
  }// }}}
659
690
 
660
691
  function monitor_instance_running(content,event) {// {{{
661
- if (save['state'] == "stopping") return;
662
692
  if (event == "calling") {
663
- if (!save['activity_states'][content['activity-uuid']]) {
664
- save['activity_states'][content['activity-uuid']] = true
693
+ if (!save['activity_red_states'][content['activity-uuid']]) {
694
+ save['activity_red_states'][content['activity-uuid']] = true
665
695
  format_visual_add(content.activity,"active")
666
696
  }
667
697
  } else if (event == "manipulating") {
668
- if (!save['activity_states'][content['activity-uuid']]) {
669
- save['activity_states'][content['activity-uuid']] = true
698
+ if (!save['activity_red_states'][content['activity-uuid']]) {
699
+ save['activity_red_states'][content['activity-uuid']] = true
670
700
  format_visual_add(content.activity,"active")
671
701
  }
672
702
  } else if (event == "done") {
673
- if (save['activity_states'][content['activity-uuid']]) {
674
- save['activity_states'][content['activity-uuid']] = true
675
- format_visual_remove(content.activity,"active")
676
- setTimeout(() => {delete save['activity_states'][content['activity-uuid']]},5000);
703
+ if (save['activity_red_states'][content['activity-uuid']]) {
704
+ format_visual_remove(content.activity,"active");
677
705
  }
706
+ save['activity_red_states'][content['activity-uuid']] = true
707
+ setTimeout(() => {delete save['activity_red_states'][content['activity-uuid']]},5000);
708
+ }
709
+ } // }}}
710
+ function monitor_instance_pos_change(content) {// {{{
711
+ if (content['at']) {
712
+ $.each(content['at'],function(a,b){
713
+ if (!save['activity_blue_states'][b.uuid]) {
714
+ save['activity_blue_states'][b.uuid] = true
715
+ format_visual_add(b.position,"passive");
716
+ }
717
+ });
718
+ }
719
+ if (content['after']) {
720
+ $.each(content['after'],function(a,b){
721
+ if (!save['activity_blue_states'][b.uuid]) {
722
+ save['activity_blue_states'][b.uuid] = true
723
+ format_visual_add(b.position,"passive");
724
+ }
725
+ });
726
+ }
727
+ if (content['unmark']) {
728
+ $.each(content['unmark'],function(a,b){
729
+ if (save['activity_blue_states'][b.uuid]) {
730
+ format_visual_remove(b.position,"passive")
731
+ }
732
+ save['activity_blue_states'][b.uuid] = true
733
+ setTimeout(() => {delete save['activity_blue_states'][b.uuid]},5000);
734
+ });
735
+ }
736
+ if (!content['at'] && !content['unmark'] && !content['after'] && !content['wait']) {
737
+ monitor_instance_pos();
678
738
  }
679
739
  } // }}}
740
+
741
+
680
742
  function monitor_instance_state_change(notification) { //{{{
743
+ // sometimes, out of sheer network routingness, stopping comes after stopped, which fucks the UI hard
744
+ // thus, we are having none of it
745
+ if (notification == 'stopping' && save['states']['stopping'] - save['states']['stopped'] < 10)
746
+ notification = 'stopped';
747
+ if (notification == 'stopping' && save['state'] == 'stopped')
748
+ return;
749
+
681
750
  if ($('#trackcolumn').length > 0) {
682
751
  if (notification == "finished" || notification == "abandoned") {
683
752
  parent.closeIFrame(window.location.search);
@@ -687,19 +756,15 @@ function monitor_instance_state_change(notification) { //{{{
687
756
  $("#state button").removeAttr('disabled');
688
757
  }
689
758
 
690
- // sometimes, out of sheer network routingness, stopping comes after stopped, which fucks the UI hard
691
- // thus, we are having none of it
692
- if (notification == 'stopping' && save['state'] == 'stopped')
693
- return;
694
759
  if (notification != save['state']) {
695
760
  save['state'] = notification;
696
761
 
697
762
  if (notification == "stopped") {
698
763
  monitor_instance_pos();
699
764
  }
700
- if (notification == "running") {
701
- format_visual_clear();
702
- }
765
+ // if (notification == "running") {
766
+ // format_visual_clear();
767
+ // }
703
768
 
704
769
  var but = "";
705
770
  if (notification == "ready" || notification == "stopped") {
@@ -739,22 +804,6 @@ function monitor_instance_state_change(notification) { //{{{
739
804
  $("#state_text").text(notification);
740
805
  }
741
806
  } //}}}
742
- function monitor_instance_pos_change(content) {// {{{
743
- if (content['unmark']) {
744
- $.each(content['unmark'],function(a,b){
745
- format_visual_remove(b.position,"passive")
746
- });
747
- }
748
- if (content['at']) {
749
- $.each(content['at'],function(a,b){
750
- format_visual_add(b.position,"passive");
751
- });
752
- }
753
- if (!content['at'] && !content['unmark'] && !content['after'] && !content['wait']) {
754
- monitor_instance_pos();
755
- }
756
- } // }}}
757
-
758
807
  function monitor_instance_vote_add(parts) {// {{{
759
808
  var ctv = $("#votes");
760
809
 
@@ -1194,9 +1243,10 @@ function format_visual_remove(what,cls) {//{{{
1194
1243
  }//}}}
1195
1244
 
1196
1245
  function scroll_into_view(what) { //{{{
1197
- var tcontainer = $('#graphcanvas').parent()[0];
1246
+ if (save['state'] != "running") return;
1247
+ var tcontainer = $('#graphcolumn')[0];
1198
1248
  if ($('g[element-id="' + what + '"]').length > 0) {
1199
- var telement = $('g[element-id="' + what + '"]')[0].getBBox().y;
1249
+ var telement = $('g[element-id="' + what + '"]')[0].getBBox().y;
1200
1250
  if (tcontainer.scrollTop > telement) {
1201
1251
  tcontainer.scroll( { top: telement - 5, behavior: 'smooth' } );
1202
1252
  }
@@ -1390,12 +1440,12 @@ function ui_pos(e,bl) {
1390
1440
  var url = $('body').attr('current-instance');
1391
1441
  var coll = [];
1392
1442
  $('g.element.primitive > g.activities.active, g.element.primitive > g.activities.passive').each(function(a,b){
1393
- coll.push($(b).parent().attr('element-id'));
1443
+ coll.push([$(b).parent().attr('element-id'), $(b).parent().attr('element-type') == 'stop' ? 'after' : 'at']);
1394
1444
  });
1395
1445
  coll = bl(coll);
1396
1446
  var vals = "";
1397
1447
  $(coll).each(function(k,ele){
1398
- vals += "<" + ele + ">at</" + ele + ">";
1448
+ vals += "<" + ele[0] + ">" + ele[1] + "</" + ele[0] + ">";
1399
1449
  });
1400
1450
  vals = "<positions xmlns='http://cpee.org/ns/properties/2.0'>" + vals + "</positions>";
1401
1451
  $.ajax({
@@ -1413,13 +1463,13 @@ function ui_pos(e,bl) {
1413
1463
  }
1414
1464
  function del_ui_pos(e) {
1415
1465
  ui_pos(e,function(coll){
1416
- coll.splice(coll.indexOf($(e).attr('id')),1);
1466
+ coll.splice(coll.findIndex((ele)=>ele[0] == $(e).attr('id')),1);
1417
1467
  return coll;
1418
1468
  });
1419
1469
  }
1420
1470
  function add_ui_pos(e) {
1421
1471
  ui_pos(e,function(coll){
1422
- coll.push($(e).attr('id'));
1472
+ coll.push([$(e).attr('id'), e.nodeName == 'stop' ? 'after' : 'at']);
1423
1473
  return coll;
1424
1474
  });
1425
1475
  }
@@ -217,9 +217,13 @@ function WfIllustrator(wf_adaptor) { // View {{{
217
217
  } // }}}
218
218
  // }}}
219
219
  // Helper Functions {{{
220
+ var get_y = this.draw.get_y = function (row) { // {{{
221
+ return { y: row * self.height - self.height, height_shift: self.height_shift};
222
+ } // }}}
223
+
220
224
  var draw_stripe = this.draw.draw_stripe = function (row, maxcol) { // {{{
221
225
  if (maxcol < 1) maxcol = 1;
222
- var g = $X('<rect class="stripe ' + (row % 2 == 0 ? 'even' : 'odd') + '" x="0" y="' + String(row*self.height+self.height_shift/2) + '" width="' + (self.width * maxcol + self.width - self.width_shift) + '" height="' + (self.height) + '" xmlns="http://www.w3.org/2000/svg"></rect>');
226
+ var g = $X('<rect element-row="' + row + '" class="stripe ' + (row % 2 == 0 ? 'even' : 'odd') + '" x="0" y="' + String(row*self.height+self.height_shift/2) + '" width="' + (self.width * maxcol + self.width - self.width_shift) + '" height="' + (self.height) + '" xmlns="http://www.w3.org/2000/svg"></rect>');
223
227
  self.svg.container.prepend(g);
224
228
  return g;
225
229
  } // }}}
@@ -366,16 +370,16 @@ function WfDescription(wf_adaptor, wf_illustrator) { // Model {{{
366
370
 
367
371
  // Set Labels //{{{
368
372
  this.set_labels = function(graph) {
369
- if (illustrator.compact == false) {
370
- adaptor.draw_labels(graph.max,labels,illustrator.height_shift,illustrator.striped == true ? true : false);
371
- } else {
372
- adaptor.draw_labels(graph.max,[],illustrator.height_shift,false);
373
- }
374
373
  if (illustrator.striped == true && illustrator.compact == false) {
375
374
  for (var i=0; i < graph.max.row; i++) {
376
375
  illustrator.draw.draw_stripe(i,graph.max.col);
377
376
  }
378
377
  }
378
+ if (illustrator.compact == false) {
379
+ adaptor.draw_labels(graph.max,labels,illustrator.height_shift,illustrator.striped == true ? true : false);
380
+ } else {
381
+ adaptor.draw_labels(graph.max,[],illustrator.height_shift,false);
382
+ }
379
383
  if (illustrator.compact == false) {
380
384
  if (labels.length > 0) {
381
385
  _.each(labels,function(a,key) {
@@ -402,9 +406,9 @@ function WfDescription(wf_adaptor, wf_illustrator) { // Model {{{
402
406
  labels = [];
403
407
  illustrator.clear();
404
408
  var graph = parse(description.children('description').get(0), {'row':0,'col':0,final:false,wide:false});
405
- self.set_labels(graph);
406
- // set labels
407
409
  illustrator.set_svg(graph);
410
+ // set labels
411
+ self.set_labels(graph);
408
412
  } // }}}
409
413
  var gd = this.get_description = function() { // public {{{
410
414
  var serxml = $(description.get(0).documentElement).clone(true);
@@ -454,9 +458,9 @@ function WfDescription(wf_adaptor, wf_illustrator) { // Model {{{
454
458
  labels = [];
455
459
  illustrator.clear();
456
460
  var graph = parse(description.children('description').get(0), {'row':0,'col':0});
457
- self.set_labels(graph);
458
- // set labels
459
461
  illustrator.set_svg(graph);
462
+ // set labels
463
+ self.set_labels(graph);
460
464
  doit(self);
461
465
  }
462
466
  var update = this.update = function(svgid) { // {{{
@@ -465,8 +469,8 @@ function WfDescription(wf_adaptor, wf_illustrator) { // Model {{{
465
469
  labels = [];
466
470
  illustrator.clear();
467
471
  var graph = parse(description.children('description').get(0), {'row':0,'col':0});
468
- self.set_labels(graph);
469
472
  illustrator.set_svg(graph);
473
+ self.set_labels(graph);
470
474
  }
471
475
 
472
476
  var newn = $('*[new=true]',description);
@@ -563,9 +567,10 @@ function WfDescription(wf_adaptor, wf_illustrator) { // Model {{{
563
567
  $(root).attr('svg-subtype','description');
564
568
  group.attr('element-id','group-description');
565
569
  if (illustrator.elements[sname].label) {
566
- labels.push({row: pos.row, element_id: 'start', tname: 'start', label: illustrator.elements[sname].label(root)});
570
+ // javascript object spread syntax is my new weird crush - the JS designers must be serious people
571
+ labels.push({...{row: pos.row, element_id: 'start', tname: 'start', label: illustrator.elements[sname].label(root)},...illustrator.draw.get_y(pos.row)});
567
572
  }
568
- illustrator.draw.draw_symbol('start', 'description', 'START', pos.row, pos.col, group);
573
+ illustrator.draw.draw_symbol(sname, 'description', 'START', pos.row, pos.col, group);
569
574
  } // }}}
570
575
 
571
576
  $(root).children().filter(function(){ return this.localName[0] != '_'; }).each(function() {
@@ -658,6 +663,7 @@ function WfDescription(wf_adaptor, wf_illustrator) { // Model {{{
658
663
  else if(typeof illustrator.elements[tname].resolve_symbol == 'function') {sname = illustrator.elements[tname].resolve_symbol(context,illustrator.elements[tname].col_shift ? illustrator.elements[tname].col_shift(context) : undefined);}
659
664
  else if(typeof illustrator.elements[tname].resolve_symbol == 'string') {sname = illustrator.elements[tname].resolve_symbol;}
660
665
  else {sname = tname;}
666
+ if (sname == null) {sname = tname;}
661
667
  return sname;
662
668
  } //}}}
663
669
  var set_details = function(tname,sname,pos,context,simple) { //{{{
@@ -674,7 +680,7 @@ function WfDescription(wf_adaptor, wf_illustrator) { // Model {{{
674
680
  if (lab && lab[0] && lab[0].value && lab[0].column == 'Label' && lab[0].value != '') {
675
681
  $(context).attr('svg-label', lab[0].value);
676
682
  }
677
- labels.push({row: pos.row, element_id: $(context).attr('svg-id'), tname: tname, label: lab});
683
+ labels.push({...{row: pos.row, element_id: $(context).attr('svg-id'), tname: tname, label: lab},...illustrator.draw.get_y(pos.row)});
678
684
  }
679
685
  } //}}}
680
686
  var draw_position = function(tname,pos,prev,block,group,endnodes,context,second) { // private {{{
Binary file