cpee 2.1.129 → 2.1.130

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. checksums.yaml +4 -4
  2. data/cockpit/css/llm.css +19 -23
  3. data/cockpit/css/ui.css +1 -3
  4. data/cockpit/js/details.js +1 -1
  5. data/cockpit/js/instance.js +11 -8
  6. data/cockpit/js/wfadaptor.js +75 -67
  7. data/cockpit/llm.html +1 -1
  8. data/cockpit/llmmodel.html +1 -2
  9. data/cockpit/themes/base.js +21 -5
  10. data/cockpit/themes/control/symbols/alternative.svg +2 -2
  11. data/cockpit/themes/control/symbols/closed_loop.svg +1 -1
  12. data/cockpit/themes/control/symbols/closed_loop_cancel.svg +1 -1
  13. data/cockpit/themes/control/symbols/closed_loop_control.svg +1 -1
  14. data/cockpit/themes/control/symbols/closed_loop_measuring.svg +1 -1
  15. data/cockpit/themes/control/symbols/critical.svg +13 -3
  16. data/cockpit/themes/control/symbols/parallel_branch.svg +1 -1
  17. data/cockpit/themes/control/symbols/parallel_branch_normal.svg +1 -1
  18. data/cockpit/themes/control/symbols/terminate.svg +1 -1
  19. data/cockpit/themes/dataflow/symbols/alternative.svg +2 -2
  20. data/cockpit/themes/dataflow/symbols/closed_loop.svg +1 -1
  21. data/cockpit/themes/dataflow/symbols/closed_loop_cancel.svg +1 -1
  22. data/cockpit/themes/dataflow/symbols/closed_loop_control.svg +1 -1
  23. data/cockpit/themes/dataflow/symbols/closed_loop_measuring.svg +1 -1
  24. data/cockpit/themes/dataflow/symbols/critical.svg +13 -3
  25. data/cockpit/themes/dataflow/symbols/parallel_branch.svg +1 -1
  26. data/cockpit/themes/dataflow/symbols/parallel_branch_normal.svg +1 -1
  27. data/cockpit/themes/dataflow/symbols/terminate.svg +1 -1
  28. data/cockpit/themes/default/symbols/alternative.svg +2 -2
  29. data/cockpit/themes/default/symbols/closed_loop.svg +1 -1
  30. data/cockpit/themes/default/symbols/closed_loop_cancel.svg +1 -1
  31. data/cockpit/themes/default/symbols/closed_loop_control.svg +1 -1
  32. data/cockpit/themes/default/symbols/closed_loop_measuring.svg +1 -1
  33. data/cockpit/themes/default/symbols/critical.svg +13 -3
  34. data/cockpit/themes/default/symbols/parallel_branch.svg +1 -1
  35. data/cockpit/themes/default/symbols/parallel_branch_normal.svg +1 -1
  36. data/cockpit/themes/default/symbols/terminate.svg +1 -1
  37. data/cockpit/themes/extended/symbols/alternative.svg +2 -2
  38. data/cockpit/themes/extended/symbols/closed_loop.svg +1 -1
  39. data/cockpit/themes/extended/symbols/closed_loop_cancel.svg +1 -1
  40. data/cockpit/themes/extended/symbols/closed_loop_control.svg +1 -1
  41. data/cockpit/themes/extended/symbols/closed_loop_measuring.svg +1 -1
  42. data/cockpit/themes/extended/symbols/critical.svg +13 -3
  43. data/cockpit/themes/extended/symbols/parallel_branch.svg +1 -1
  44. data/cockpit/themes/extended/symbols/parallel_branch_normal.svg +1 -1
  45. data/cockpit/themes/extended/symbols/terminate.svg +1 -1
  46. data/cockpit/themes/felix/symbols/alternative.svg +2 -2
  47. data/cockpit/themes/felix/symbols/closed_loop.svg +1 -1
  48. data/cockpit/themes/felix/symbols/closed_loop_cancel.svg +1 -1
  49. data/cockpit/themes/felix/symbols/closed_loop_control.svg +1 -1
  50. data/cockpit/themes/felix/symbols/closed_loop_measuring.svg +1 -1
  51. data/cockpit/themes/felix/symbols/critical.svg +13 -3
  52. data/cockpit/themes/felix/symbols/parallel_branch.svg +1 -1
  53. data/cockpit/themes/felix/symbols/parallel_branch_normal.svg +1 -1
  54. data/cockpit/themes/felix/symbols/terminate.svg +1 -1
  55. data/cockpit/themes/model/symbols/alternative.svg +2 -2
  56. data/cockpit/themes/model/symbols/closed_loop.svg +1 -1
  57. data/cockpit/themes/model/symbols/closed_loop_cancel.svg +1 -1
  58. data/cockpit/themes/model/symbols/closed_loop_control.svg +1 -1
  59. data/cockpit/themes/model/symbols/closed_loop_measuring.svg +1 -1
  60. data/cockpit/themes/model/symbols/critical.svg +13 -3
  61. data/cockpit/themes/model/symbols/parallel_branch.svg +1 -1
  62. data/cockpit/themes/model/symbols/parallel_branch_normal.svg +1 -1
  63. data/cockpit/themes/model/symbols/terminate.svg +1 -1
  64. data/cockpit/themes/packed/symbols/alternative.svg +2 -2
  65. data/cockpit/themes/packed/symbols/closed_loop.svg +1 -1
  66. data/cockpit/themes/packed/symbols/closed_loop_cancel.svg +1 -1
  67. data/cockpit/themes/packed/symbols/closed_loop_control.svg +1 -1
  68. data/cockpit/themes/packed/symbols/closed_loop_measuring.svg +1 -1
  69. data/cockpit/themes/packed/symbols/critical.svg +13 -3
  70. data/cockpit/themes/packed/symbols/parallel_branch.svg +1 -1
  71. data/cockpit/themes/packed/symbols/parallel_branch_normal.svg +1 -1
  72. data/cockpit/themes/packed/symbols/terminate.svg +1 -1
  73. data/cockpit/themes/preset/symbols/alternative.svg +2 -2
  74. data/cockpit/themes/preset/symbols/closed_loop.svg +1 -1
  75. data/cockpit/themes/preset/symbols/closed_loop_cancel.svg +1 -1
  76. data/cockpit/themes/preset/symbols/closed_loop_control.svg +1 -1
  77. data/cockpit/themes/preset/symbols/closed_loop_measuring.svg +1 -1
  78. data/cockpit/themes/preset/symbols/critical.svg +13 -3
  79. data/cockpit/themes/preset/symbols/parallel_branch.svg +1 -1
  80. data/cockpit/themes/preset/symbols/parallel_branch_normal.svg +1 -1
  81. data/cockpit/themes/preset/symbols/terminate.svg +1 -1
  82. data/cockpit/themes/preset_model/symbols/alternative.svg +2 -2
  83. data/cockpit/themes/preset_model/symbols/parallel_branch.svg +1 -1
  84. data/cockpit/themes/preset_model/symbols/parallel_branch_normal.svg +1 -1
  85. data/cockpit/themes/preset_model/symbols/terminate.svg +1 -1
  86. data/cockpit/themes/presetaltid/symbols/alternative.svg +2 -2
  87. data/cockpit/themes/presetaltid/symbols/closed_loop.svg +1 -1
  88. data/cockpit/themes/presetaltid/symbols/closed_loop_cancel.svg +1 -1
  89. data/cockpit/themes/presetaltid/symbols/closed_loop_control.svg +1 -1
  90. data/cockpit/themes/presetaltid/symbols/closed_loop_measuring.svg +1 -1
  91. data/cockpit/themes/presetaltid/symbols/critical.svg +13 -3
  92. data/cockpit/themes/presetaltid/symbols/parallel_branch.svg +1 -1
  93. data/cockpit/themes/presetaltid/symbols/parallel_branch_normal.svg +1 -1
  94. data/cockpit/themes/presetaltid/symbols/terminate.svg +1 -1
  95. data/cockpit/themes/presetid/symbols/alternative.svg +2 -2
  96. data/cockpit/themes/presetid/symbols/closed_loop.svg +1 -1
  97. data/cockpit/themes/presetid/symbols/closed_loop_cancel.svg +1 -1
  98. data/cockpit/themes/presetid/symbols/closed_loop_control.svg +1 -1
  99. data/cockpit/themes/presetid/symbols/closed_loop_measuring.svg +1 -1
  100. data/cockpit/themes/presetid/symbols/critical.svg +13 -3
  101. data/cockpit/themes/presetid/symbols/parallel_branch.svg +1 -1
  102. data/cockpit/themes/presetid/symbols/parallel_branch_normal.svg +1 -1
  103. data/cockpit/themes/presetid/symbols/terminate.svg +1 -1
  104. data/cockpit/themes/reduced/symbols/alternative.svg +2 -2
  105. data/cockpit/themes/reduced/symbols/closed_loop.svg +1 -1
  106. data/cockpit/themes/reduced/symbols/closed_loop_cancel.svg +1 -1
  107. data/cockpit/themes/reduced/symbols/closed_loop_control.svg +1 -1
  108. data/cockpit/themes/reduced/symbols/closed_loop_measuring.svg +1 -1
  109. data/cockpit/themes/reduced/symbols/critical.svg +13 -3
  110. data/cockpit/themes/reduced/symbols/parallel_branch.svg +1 -1
  111. data/cockpit/themes/reduced/symbols/parallel_branch_normal.svg +1 -1
  112. data/cockpit/themes/reduced/symbols/terminate.svg +1 -1
  113. data/cpee.gemspec +1 -1
  114. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 13fd2a50076a688c934f6d3bf45de28fc8c2210fc614a6649084dddcde149b03
4
- data.tar.gz: b070e1ffd7a84a7db5565bc13bb8fe576523c4119e2ca863258c05abd1e5098a
3
+ metadata.gz: 825594df724f06da6073b554297121d71ca0e6745788bf29ef403eb58abdd134
4
+ data.tar.gz: 785e81f35516662bc94bb7b3861e4f8c54cb21d3d9cf131fe8488aa68ec99bc1
5
5
  SHA512:
6
- metadata.gz: 8ec3aaa6b85df17d74fbb29a5156f4f147990cbe108f00765868a2a4bf6abf6817935be81cdf5d1709ecdb757f5df9c5fa2fde130af805222beac8a1d53cd2c9
7
- data.tar.gz: a55634e47a29a505831c1850f6fe82fdf3b934cca4e7638aab38f2e4ecedbe497d3bfe3d214d36c39c7f937b8b669f4b1bca47ce83fa5bb8e63b2161581303d2
6
+ metadata.gz: f47fa192c73abb9072247b58e7e67a975dc794ecfd4efa31b8444c80e995fa3468de253c766e2d667bac028475b6396bdad0af67703a161f3cda033dcaa391a1
7
+ data.tar.gz: 1c9e2df7f50f90ec733b6a004907d8a2d53a6b4ab8669c723bd3828800383abc20fe616f3e6a4369caac5f1724026a29fc6445474e70b46c6303bb6ba2282a73
data/cockpit/css/llm.css CHANGED
@@ -30,17 +30,6 @@
30
30
  animation: dotty steps(1,end) 1s infinite;
31
31
  content: '';
32
32
  }
33
-
34
- @keyframes dotty {
35
- 0% { content: ''; }
36
- 16% { content: '.'; }
37
- 32% { content: '..'; }
38
- 48% { content: '...'; }
39
- 64% { content: '..'; }
40
- 80% { content: '.'; }
41
- 100% { content: ''; }
42
- }
43
-
44
33
  @keyframes dotty {
45
34
  0% { content: 'ₒₒₒ'; }
46
35
  16% { content: 'ₒₒ∘'; }
@@ -54,22 +43,37 @@
54
43
  #prompt_container {
55
44
  padding: 0.2em 0.5em;
56
45
  outline: none;
57
- min-height: 7.3em;
58
46
  display: flex;
47
+ align-items: stretch;
59
48
  flex-wrap: nowrap;
49
+ flex: 1 1 auto;
50
+ min-height: 0;
60
51
  }
61
52
 
62
- .max {
63
- max-height: 2.66em;
53
+ #input {
54
+ flex: 1 0 auto;
55
+ display: flex;
56
+ flex-direction: column;
57
+ min-height: 9.5em;
64
58
  }
65
59
 
66
60
  .stand_alone {
67
61
  height: 100%;
68
62
  }
63
+
64
+ #details {
65
+ padding-left: 1.5em;
66
+ min-height: 9em;
67
+ }
69
68
  #prompt {
70
69
  flex: 1 1 auto;
70
+ height: 100%;
71
+ overflow: scroll;
71
72
  outline: none;
72
- overflow-y: scroll;
73
+ }
74
+ #prompt_submit_container {
75
+ flex: 0 0 auto;
76
+ align-self: stretch;
73
77
  }
74
78
  #prompt:empty:before {
75
79
  font-family: adwaita-sans;
@@ -85,10 +89,6 @@
85
89
  min-height: 2.66em;
86
90
  }
87
91
 
88
- #llmlabel {
89
- width: 20%;
90
- }
91
-
92
92
  .single {
93
93
  width: 2.3em;
94
94
  height: 2.3em;
@@ -119,7 +119,3 @@
119
119
  #detailcolumn {
120
120
  padding-left: 0em !important;
121
121
  }
122
- #details {
123
- padding-left: 1.5em;
124
- min-height: 7em;
125
- }
data/cockpit/css/ui.css CHANGED
@@ -186,12 +186,9 @@ span.vote {
186
186
  }
187
187
 
188
188
  #details {
189
- flex: 0 1 auto;
190
- height: 100%;
191
189
  overflow: scroll;
192
190
  }
193
191
  #modelling {
194
- flex: 0 1 auto;
195
192
  height: 100%;
196
193
  overflow: scroll;
197
194
  }
@@ -221,6 +218,7 @@ span.vote {
221
218
  padding-left: 1.5em;
222
219
  display: flex;
223
220
  flex-direction: column;
221
+ overflow: hidden;
224
222
  }
225
223
 
226
224
  #dat_log tr:nth-child(odd) { background-color: #e8e8e8; color: #333; }
@@ -82,7 +82,7 @@ function do_main_work(svgid) { //{{{
82
82
  var tnewnode = ttarget.parents('g.element[element-id]');
83
83
  var tnewtype = tnewnode.attr('element-type') + '_' + tnewnode.attr('element-endpoint');
84
84
 
85
- desc.refresh(function(graphrealization){
85
+ desc.redraw(function(graphrealization){
86
86
  var vtarget = manifestation.adaptor.illustrator.get_node_by_svg_id(svgid);
87
87
  if (vtarget.length > 0) {
88
88
  vtarget.parents('g.element[element-id]').addClass('selected');
@@ -360,6 +360,7 @@ async function sse() { //{{{
360
360
  case 'description':
361
361
  monitor_instance_dsl();
362
362
  monitor_graph_change(false);
363
+ document.dispatchEvent(graph_changed);
363
364
  break;
364
365
  case 'endpoints':
365
366
  monitor_instance_values("endpoints");
@@ -559,7 +560,11 @@ function monitor_instance_values(type,vals) {// {{{
559
560
  });
560
561
  }
561
562
  });
562
- $.when.apply($, deferreds).done();
563
+ $.when.apply($, deferreds).done(function(){
564
+ if (save['graph_adaptor'] && !suspended_redrawing) {
565
+ save['graph_adaptor'].redraw();
566
+ }
567
+ });
563
568
  } else if(type == "attributes") {
564
569
  $(" > attributes > *",res).each((k,v)=>{
565
570
  save['attributes_raw'][v.nodeName] = v.textContent;
@@ -723,12 +728,10 @@ function adaptor_init(url,theme,dslx) { //{{{
723
728
  suspended_redrawing = false;
724
729
  });
725
730
  } else {
726
- save['graph_adaptor'].update(function(graphrealization){
727
- var svgid = manifestation.selected();
728
- graphrealization.set_description($(dslx));
729
- manifestation.events.click(svgid);
730
- format_instance_pos();
731
- });
731
+ var svgid = manifestation.selected();
732
+ save['graph_adaptor'].set_description($(dslx));
733
+ manifestation.events.click(svgid);
734
+ format_instance_pos();
732
735
  }
733
736
  } //}}}
734
737
 
@@ -1402,7 +1405,7 @@ function format_visual_remove(what,cls,sum=true) {//{{{
1402
1405
 
1403
1406
  function scroll_into_view(what) { //{{{
1404
1407
  if (save['state'] != "running") return;
1405
- var tcontainer = $('#graphcolumn')[0];
1408
+ var tcontainer = $('#modelling')[0];
1406
1409
  if ($('g[element-id="' + what + '"]').length > 0) {
1407
1410
  var telement = $('g[element-id="' + what + '"]')[0].getBBox().y;
1408
1411
  if (tcontainer.scrollTop > telement) {
@@ -191,8 +191,6 @@ function WfAdaptor(theme_base,doit) { // Controller {{{
191
191
  this.illustrator = illustrator = new WfIllustrator(this);
192
192
  this.description = description = new WfDescription(this, this.illustrator);
193
193
 
194
- this.update = function(doit){ doit(self); };
195
-
196
194
  this.draw_element = function(type,id,label) {
197
195
  let pos = {'row': 1,'col': 0};
198
196
  let block = { 'max': {'row': pos.row, 'col': pos.col}, 'endnodes': [], 'svg': $X('<g class="group" xmlns="http://www.w3.org/2000/svg"/>') };
@@ -200,8 +198,8 @@ function WfAdaptor(theme_base,doit) { // Controller {{{
200
198
  self.illustrator.set_svg(block);
201
199
  }
202
200
 
203
- this.redraw = function(){
204
- description.redraw();
201
+ this.redraw = function(doit){
202
+ description.redraw(doit);
205
203
  }
206
204
 
207
205
  $.getScript(self.theme_base).done(function() {
@@ -230,6 +228,7 @@ function WfIllustrator(wf_adaptor) { // View {{{
230
228
  this.width_shift = this.width * 0.39;
231
229
  this.width_shift_label = 7;
232
230
  this.group_extend = 1;
231
+ this.structural_tighten = 3; // 'structural' borders are smaller in y
233
232
  this.elements = {}; // the svgs
234
233
  this.svg = {};
235
234
  this.draw = {};
@@ -254,6 +253,9 @@ function WfIllustrator(wf_adaptor) { // View {{{
254
253
  ' <marker id="arrow" viewBox="0 0 10 10" refX="28.5" refY="5" orient="auto" markerUnits="strokeWidth" markerWidth="14" markerHeight="3.5">' +
255
254
  ' <path d="m 2 2 l 6 3 l -6 3 z"/>' +
256
255
  ' </marker>' +
256
+ ' <marker id="endarrow" viewBox="0 0 10 10" refX="7" refY="5" orient="auto" markerUnits="strokeWidth" markerWidth="14" markerHeight="5.2">' +
257
+ ' <path d="M 2,2 L 6.21,4.11 Q 8,5 6.21,5.89 L 2,8 Z"/>' +
258
+ ' </marker>' +
257
259
  ' <clipPath id="startclip">' +
258
260
  ' <rect x="-4" y="-4" width="35" height="38"/>' +
259
261
  ' </clipPath>' +
@@ -774,22 +776,23 @@ function WfIllustrator(wf_adaptor) { // View {{{
774
776
 
775
777
  return g;
776
778
  } // }}}
777
- var draw_border = this.draw.draw_border = function(id, p1, p2, group) { // {{{
779
+ var draw_border = this.draw.draw_border = function(id, p1, p2, group, yshrink) { // {{{
780
+ yshrink = yshrink || 0;
778
781
  let bstart = get_x(p1.row,p1.col,'border from');
779
782
  let bend = get_x_plus(p1.row,p2.row,p2.col,'border to');
780
783
  group.prepend($X('<rect element-id="' + id + '" x="' + (bstart - 1.1 * self.width_shift - self.group_extend) + '" ' +
781
- 'y="' + ((p1.row-1)*self.height+self.height_shift/2-self.group_extend) + '" ' +
784
+ 'y="' + ((p1.row-1)*self.height+self.height_shift/2-self.group_extend+yshrink) + '" ' +
782
785
  'width="' + (bend-bstart+2*self.group_extend) + '" ' +
783
- 'height="' + (((p2.row+1)-p1.row)*self.height+2*self.group_extend) + '" ' +
786
+ 'height="' + (((p2.row+1)-p1.row)*self.height+2*self.group_extend-2*yshrink) + '" ' +
784
787
  'class="block" rx="12" ry="12" xmlns="http://www.w3.org/2000/svg"/>'));
785
788
  } // }}}
786
- var draw_tile = this.draw.draw_tile = function(id, p1, p2, group) { // {{{
789
+ var draw_tile = this.draw.draw_tile = function(id, p1, p2, group, yshrink=0) { // {{{
787
790
  let bstart = get_x(p1.row,p1.col,'tile from');
788
791
  let bend = get_x_plus(p1.row,p2.row,p2.col,'tile to');
789
792
  group.prepend($X('<rect element-id="' + id + '" x="' + (bstart - 1.1 * self.width_shift - self.group_extend) + '" ' +
790
- 'y="' + ((p1.row-1)*self.height+self.height_shift/2-self.group_extend) + '" ' +
793
+ 'y="' + ((p1.row-1)*self.height+self.height_shift/2-self.group_extend+yshrink) + '" ' +
791
794
  'width="' + (bend-bstart+2*self.group_extend) + '" ' +
792
- 'height="' + (((p2.row+1)-p1.row)*self.height+2*self.group_extend) + '" ' +
795
+ 'height="' + (((p2.row+1)-p1.row)*self.height+2*self.group_extend-2*yshrink) + '" ' +
793
796
  'class="tile" rx="12" ry="12" xmlns="http://www.w3.org/2000/svg"/>'));
794
797
  } // }}}
795
798
  var draw_connection = this.draw.draw_connection = function(group, start, end, context_row, arrow) { // {{{
@@ -801,40 +804,40 @@ function WfIllustrator(wf_adaptor) { // View {{{
801
804
  if(((end['row']-start['row']) == 0) && ((end['col']-start['col']) == 0)) return;
802
805
  var line;
803
806
  if (arrow)
804
- line = $X('<path xmlns="http://www.w3.org/2000/svg" class="edge" marker-end="url(#arrow)"/>');
807
+ line = $X('<path xmlns="http://www.w3.org/2000/svg" class="edge" marker-end="url(#' + (end.structural ? 'endarrow' : 'arrow') + ')"/>');
805
808
  else
806
809
  line = $X('<path xmlns="http://www.w3.org/2000/svg" class="edge"/>');
807
810
  if (end['row']-start['row'] == 0 || end['col']-start['col'] == 0) { // straight line
808
- line.attr("d", "M " + String(cstart) + "," + String(start['row']*self.height-15) +" "+
809
- String(cend) + "," + String(end['row']*self.height-15)
811
+ line.attr("d", "M " + String(cstart) + "," + String(start['row']*self.height-15+start.yoffset) +" "+
812
+ String(cend) + "," + String(end['row']*self.height-15+end.yoffset)
810
813
  );
811
814
  } else if (end['row']-start['row'] > 0) { // downwards
812
815
  if (end['col']-start['col'] > 0) {// left - right
813
816
  if (self.compact) {
814
- line.attr("d", "M " + String(cstart) + "," + String(start['row']*self.height-15) +" "+
817
+ line.attr("d", "M " + String(cstart) + "," + String(start['row']*self.height-15+start.yoffset) +" "+
815
818
  String(cstart+14) + "," + String((end['row']-1)*self.height) +" "+ // first turn of horizontal-line going away from node
816
819
  String(cend) + "," + String((end['row']-1)*self.height) +" "+
817
- String(cend) + "," + String(end['row']*self.height-15)
820
+ String(cend) + "," + String(end['row']*self.height-15+end.yoffset)
818
821
  );
819
822
  } else {
820
- line.attr("d", "M " + String(cstart) + "," + String(start['row']*self.height-15) +" "+
821
- String(cend) + "," + String(start['row']*self.height-15) +" "+
822
- String(cend) + "," + String(end['row']*self.height-15)
823
+ line.attr("d", "M " + String(cstart) + "," + String(start['row']*self.height-15+start.yoffset) +" "+
824
+ String(cend) + "," + String(start['row']*self.height-15+start.yoffset) +" "+
825
+ String(cend) + "," + String(end['row']*self.height-15+end.yoffset)
823
826
  );
824
827
  }
825
828
  } else { // right - left
826
- line.attr("d", "M " + String(cstart) + "," + String(start['row']*self.height-15) +" "+
829
+ line.attr("d", "M " + String(cstart) + "," + String(start['row']*self.height-15+start.yoffset) +" "+
827
830
  String(cstart) + "," + String(end['row']*self.height-32) +" "+
828
831
  String(cend+14) + "," + String(end['row']*self.height-32) +" "+ // last turn of horizontal-line going into the node
829
- String(cend) + "," + String(end['row']*self.height-15)
832
+ String(cend) + "," + String(end['row']*self.height-15+end.yoffset)
830
833
  );
831
834
  }
832
835
  } else if(end['row']-start['row'] < 0) { // upwards
833
- line.attr("d", "M " + String(cstart) + "," + String(start['row']*self.height-15) +" "+
836
+ line.attr("d", "M " + String(cstart) + "," + String(start['row']*self.height-15+start.yoffset) +" "+
834
837
  String(cstart) + "," + String((self.dim.symbols.length-1)*self.height+4) +" "+
835
838
  String(cend+15) + "," + String((self.dim.symbols.length-1)*self.height+4) +" "+
836
839
  String(cend+15) + "," + String(end['row']*self.height+15)+" "+
837
- String(cend) + "," + String(end['row']*self.height-15)
840
+ String(cend) + "," + String(end['row']*self.height-15+end.yoffset)
838
841
  );
839
842
  }
840
843
  self.svg.container.append(line);
@@ -890,7 +893,7 @@ function WfDescription(wf_adaptor, wf_illustrator) { // Model {{{
890
893
  labels = [];
891
894
  let start = performance.now();
892
895
  illustrator.clear();
893
- var graph = parse(description.children('description').get(0), {'row':0,'col':0,final:false,wide:false});
896
+ var graph = parse(description.children('description').get(0), {'row':0,'col':0,final:false,wide:false,yoffset:0});
894
897
  illustrator.set_svg(graph);
895
898
  self.set_labels(graph);
896
899
  illustrator.set_duration(start);
@@ -946,53 +949,38 @@ function WfDescription(wf_adaptor, wf_illustrator) { // Model {{{
946
949
  used_id_list.push(prefix + id);
947
950
  return prefix + id;
948
951
  } // }}}
949
- var refresh = this.refresh = function(doit) {
950
- id_counter = {};
951
- labels = [];
952
- let start = performance.now();
953
- illustrator.clear();
954
- clean_description();
955
- var graph = parse(description.children('description').get(0), {'row':0,'col':0,final:false,wide:false});
956
- illustrator.set_svg(graph);
957
- self.set_labels(graph);
958
- illustrator.set_duration(start);
959
- doit(self);
960
- }
961
- var redraw = this.redraw = function(){
952
+ var redraw = this.redraw = function(doit) {
962
953
  id_counter = {};
963
954
  let start = performance.now();
964
955
  labels = [];
965
956
  illustrator.clear();
966
957
  clean_description();
967
- var graph = parse(description.children('description').get(0), {'row':0,'col':0,final:false,wide:false});
958
+ var graph = parse(description.children('description').get(0), {'row':0,'col':0,final:false,wide:false,yoffset:0});
968
959
  illustrator.set_svg(graph);
969
960
  self.set_labels(graph);
970
961
  illustrator.set_duration(start);
962
+ if (doit) doit(self);
971
963
  }
972
964
  var update = this.update = function(svgid) { // {{{
973
965
  id_counter = {};
974
- if(update_illustrator){
975
- let start = performance.now();
976
- labels = [];
977
- illustrator.clear();
978
- clean_description();
979
- var graph = parse(description.children('description').get(0), {'row':0,'col':0,final:false,wide:false});
980
- illustrator.set_svg(graph);
981
- self.set_labels(graph);
982
- illustrator.set_duration(start);
966
+ var notify_target = () => {
967
+ var newn = $('*[new=true]',description);
968
+ newn.removeAttr('new');
969
+
970
+ if (newn.attr('svg-id') != undefined)
971
+ adaptor.notify(newn.attr('svg-id'));
972
+ else if (svgid != undefined)
973
+ adaptor.notify(svgid);
974
+ else if (newn.parents('[svg-id]').length > 0)
975
+ adaptor.notify(newn.parent('[svg-id]').attr('svg-id'));
976
+ else
977
+ console.info('Something went horribly wrong');
978
+ };
979
+ if (update_illustrator) {
980
+ self.redraw(notify_target);
981
+ } else {
982
+ notify_target();
983
983
  }
984
-
985
- var newn = $('*[new=true]',description);
986
- newn.removeAttr('new');
987
-
988
- if (newn.attr('svg-id') != undefined)
989
- adaptor.notify(newn.attr('svg-id'));
990
- else if (svgid != undefined)
991
- adaptor.notify(svgid);
992
- else if (newn.parents('[svg-id]').length > 0)
993
- adaptor.notify(newn.parent('[svg-id]').attr('svg-id'));
994
- else
995
- console.info('Something went horribly wrong');
996
984
  } // }}}
997
985
  // }}}
998
986
  // Adaption functions {{{
@@ -1181,6 +1169,16 @@ function WfDescription(wf_adaptor, wf_illustrator) { // Model {{{
1181
1169
  [undefined, endnodes] = draw_position(ctname,parent_pos,pos,prev,block,[],context,{svg: g, pos: origpos});
1182
1170
  }
1183
1171
  prev = JSON.parse(JSON.stringify(endnodes));
1172
+ if (illustrator.elements[sname].border == 'structural') {
1173
+ // structural border: outgoing arrow starts at the group border instead of leaving from the icon
1174
+ // small y offset
1175
+ prev = prev.map(function(p) {
1176
+ if (!p) return p;
1177
+ var np = JSON.parse(JSON.stringify(p));
1178
+ np.yoffset = illustrator.height_shift/2 + illustrator.group_extend + 15 - illustrator.structural_tighten;
1179
+ return np;
1180
+ });
1181
+ }
1184
1182
  }
1185
1183
  });
1186
1184
 
@@ -1255,18 +1253,20 @@ function WfDescription(wf_adaptor, wf_illustrator) { // Model {{{
1255
1253
  } else { console.log("no icon "+ sname);}
1256
1254
  if (illustrator.elements[sname] && illustrator.elements[sname].border) {
1257
1255
  let wide = (illustrator.elements[sname].wide == true && block.max.col == pos.col) ? pos.col + 1 : block.max.col;
1256
+ let yshrink = illustrator.elements[sname].border == 'structural' ? illustrator.structural_tighten : 0;
1258
1257
  if (illustrator.elements[sname].closing_symbol) {
1259
- illustrator.draw.draw_border($(context).attr('svg-id'), pos, { col: wide, row: block.max.row + 1 }, block.svg);
1258
+ illustrator.draw.draw_border($(context).attr('svg-id'), pos, { col: wide, row: block.max.row + 1 }, block.svg, yshrink);
1260
1259
  } else {
1261
- illustrator.draw.draw_border($(context).attr('svg-id'), pos, { col: wide, row: block.max.row }, block.svg);
1260
+ illustrator.draw.draw_border($(context).attr('svg-id'), pos, { col: wide, row: block.max.row }, block.svg, yshrink);
1262
1261
  }
1263
1262
  }
1264
1263
  if (illustrator.elements[sname] && illustrator.elements[sname].type == 'complex') {
1265
1264
  let wide = (illustrator.elements[sname].wide == true && block.max.col == pos.col) ? pos.col + 1 : block.max.col;
1265
+ let yshrink = illustrator.elements[sname].border == 'structural' ? illustrator.structural_tighten : 0;
1266
1266
  if (illustrator.elements[sname].closing_symbol) {
1267
- illustrator.draw.draw_tile($(context).attr('svg-id'), pos, { col: wide, row: block.max.row + 1 }, block.svg);
1267
+ illustrator.draw.draw_tile($(context).attr('svg-id'), pos, { col: wide, row: block.max.row + 1 }, block.svg, yshrink);
1268
1268
  } else {
1269
- illustrator.draw.draw_tile($(context).attr('svg-id'), pos, { col: wide, row: block.max.row }, block.svg);
1269
+ illustrator.draw.draw_tile($(context).attr('svg-id'), pos, { col: wide, row: block.max.row }, block.svg, yshrink);
1270
1270
  }
1271
1271
  }
1272
1272
  }
@@ -1274,6 +1274,14 @@ function WfDescription(wf_adaptor, wf_illustrator) { // Model {{{
1274
1274
 
1275
1275
  // Calculate Connection {{{
1276
1276
  let connection_case = 0;
1277
+ var conn_target = pos;
1278
+ if (illustrator.elements[sname].border == 'structural' && !second) {
1279
+ // structural border: incoming arrow stops at the group border instead of reaching into the icon
1280
+ // (only a pixel-level yoffset, row/col stay integers so get_x() column lookups stay correct)
1281
+ conn_target = JSON.parse(JSON.stringify(pos));
1282
+ conn_target.yoffset = -illustrator.height + illustrator.height_shift/2 - illustrator.group_extend + 15 + illustrator.structural_tighten;
1283
+ conn_target.structural = true;
1284
+ }
1277
1285
  if(illustrator.elements[sname] != undefined && illustrator.elements[sname].closeblock == true) { // Close Block if element e.g. loop
1278
1286
  if (second) {
1279
1287
  if (second.pos.row+1 < pos.row) { // when no content, dont paint the up arrow
@@ -1296,7 +1304,7 @@ function WfDescription(wf_adaptor, wf_illustrator) { // Model {{{
1296
1304
  } else { endnodes = [JSON.parse(JSON.stringify(pos))]; } // sets this element as only endpoint (aggregate)
1297
1305
  if(prev[0].row == 0 || prev[0].col == 0) { // this enforces the connection from description to the first element
1298
1306
  connection_case = 3;
1299
- illustrator.draw.draw_connection(block.svg, { row: 1, col: 1 }, pos, 0, true);
1307
+ illustrator.draw.draw_connection(block.svg, { row: 1, col: 1, yoffset: 0 }, conn_target, 0, true);
1300
1308
  } else {
1301
1309
  if (illustrator.elements[sname].noarrow == undefined || illustrator.elements[sname].noarrow == false) {
1302
1310
  for (let node=0; node < prev.length; node++) {
@@ -1308,15 +1316,15 @@ function WfDescription(wf_adaptor, wf_illustrator) { // Model {{{
1308
1316
  }
1309
1317
  connection_case = 4;
1310
1318
  // console.log('++ case 4',prev[node].row,pos.row,illustrator.dim.debug());
1311
- illustrator.draw.draw_connection(block.svg, pn, pos, 0, true);
1319
+ illustrator.draw.draw_connection(block.svg, pn, conn_target, 0, true);
1312
1320
  } else {
1313
1321
  connection_case = 5;
1314
1322
  if (prev.length == 1) {
1315
1323
  // console.log('++ case 5a',parent_pos.row, '---', prev[node].row,pos.row,illustrator.dim.debug());
1316
- illustrator.draw.draw_connection(block.svg, prev[node], pos, 0, true);
1324
+ illustrator.draw.draw_connection(block.svg, prev[node], conn_target, 0, true);
1317
1325
  } else {
1318
1326
  // console.log('++ case 5b',prev[node].row,pos.row,illustrator.dim.debug());
1319
- illustrator.draw.draw_connection(block.svg, prev[node], pos, 0, true);
1327
+ illustrator.draw.draw_connection(block.svg, prev[node], conn_target, 0, true);
1320
1328
  }
1321
1329
  }
1322
1330
  }
@@ -1326,7 +1334,7 @@ function WfDescription(wf_adaptor, wf_illustrator) { // Model {{{
1326
1334
  if (prev[node] && !prev[node].final) {
1327
1335
  connection_case = 6;
1328
1336
  // console.log('++ case 6',prev[node].row,pos.row,illustrator.dim.debug());
1329
- illustrator.draw.draw_connection(block.svg, prev[node], pos, prev[node].row, false);
1337
+ illustrator.draw.draw_connection(block.svg, prev[node], conn_target, prev[node].row, false);
1330
1338
  }
1331
1339
  }
1332
1340
  }
data/cockpit/llm.html CHANGED
@@ -279,7 +279,7 @@
279
279
  <ui-resizehandle class='hidden'>drag to resize</ui-resizehandle>
280
280
  <ui-part id='input'>
281
281
  <div id='status'></div>
282
- <div id='prompt_container' class="max">
282
+ <div id='prompt_container'>
283
283
  <div id='prompt' contenteditable="true" title="Please enter your modelling instructions here..." placeholder="Please enter your modelling instructions here..."></div>
284
284
  <div id='prompt_submit_container' class="single">
285
285
  <select name="generation" id="generation" class='hidden'>
@@ -64,7 +64,6 @@
64
64
 
65
65
  <script type="text/javascript" src="js/llm.js"></script>
66
66
  <link rel="stylesheet" href="css/llm.css" type="text/css"/>
67
- <link rel="stylesheet" href="css/llmmodel.css" type="text/css"/>
68
67
 
69
68
  <link rel="stylesheet" href="css/ui.css" type="text/css"/>
70
69
  <link rel="stylesheet" href="css/extended_columns-label.css" type="text/css"/>
@@ -178,7 +177,7 @@
178
177
  <ui-resizehandle class='hidden'>drag to resize</ui-resizehandle>
179
178
  <ui-part id='input'>
180
179
  <div id='status'></div>
181
- <div id='prompt_container' class="max">
180
+ <div id='prompt_container'>
182
181
  <div id='prompt' contenteditable="true" title="Please enter your modelling instructions here..." placeholder="Please enter your modelling instructions here..."></div>
183
182
  <div id='prompt_submit_container' class="single">
184
183
  <select name="generation" id="generation" class='hidden'>
@@ -277,7 +277,6 @@ function WFAdaptorManifestationBase(adaptor) {
277
277
 
278
278
  if (xml_node.get(0).tagName == "call" || xml_node.get(0).tagName == "manipulate" || xml_node.get(0).tagName == "stop") {
279
279
  let exec_icon = contextMenuHandling_clean_icon(self.elements.call.illustrator.svg);
280
- let mark_icon = self.resources.mark;
281
280
  exec_icon.find('.part-normal').addClass('passive');
282
281
  var vtarget = self.adaptor.illustrator.get_node_by_svg_id(svgid);
283
282
  if (vtarget.length > 0) {
@@ -298,6 +297,14 @@ function WFAdaptorManifestationBase(adaptor) {
298
297
  'params': xml_node
299
298
  }];
300
299
  }
300
+ }
301
+ }
302
+
303
+ if (xml_node.get(0).tagName != 'description' && !self.elements[xml_node.get(0).tagName].neverdelete) {
304
+ let mark_icon = self.resources.mark;
305
+ var vtarget = self.adaptor.illustrator.get_node_by_svg_id(svgid);
306
+ if (vtarget.length > 0) {
307
+ if (!menu['Position']) { menu['Position'] = []; }
301
308
  if (vtarget.parents('g.element.marked').length > 0) {
302
309
  menu['Position'].push({
303
310
  'label': 'Unmark for copy/move (' + ($.pressCmd() ? '⌘-Click' : 'CTRL-Click') + ')',
@@ -1243,14 +1250,16 @@ function WFAdaptorManifestationBase(adaptor) {
1243
1250
  this.elements.critical = { /*{{{*/
1244
1251
  'type': 'complex',
1245
1252
  'illustrator': {//{{{
1253
+ 'label': function(node){ return [ { column: 'Label', value: $(node).attr('sid') } ]; },
1246
1254
  'endnodes': 'aggregate',
1247
1255
  'closeblock': false,
1248
- 'border': true,
1256
+ 'border': 'structural',
1257
+ 'closing_symbol': 'critical_finish',
1249
1258
  'expansion': function(node) {
1250
1259
  return 'vertical';
1251
1260
  },
1252
1261
  'col_shift': function(node) {
1253
- return true;
1262
+ return false;
1254
1263
  },
1255
1264
  'svg': self.adaptor.theme_dir + 'symbols/critical.svg'
1256
1265
  },//}}}
@@ -1327,12 +1336,19 @@ function WFAdaptorManifestationBase(adaptor) {
1327
1336
  'mouseout': self.events.mouseout,
1328
1337
  }//}}}
1329
1338
  }; /*}}}*/
1339
+ this.elements.critical_finish = { /*{{{*/
1340
+ 'type': 'primitive',
1341
+ 'illustrator': {//{{{
1342
+ 'endnodes': 'this',
1343
+ 'svg': self.adaptor.theme_dir + 'symbols/event_end.svg'
1344
+ }//}}}
1345
+ }; /*}}}*/
1330
1346
  this.elements.group = { /*{{{*/
1331
1347
  'type': 'complex',
1332
1348
  'illustrator': {//{{{
1333
1349
  'endnodes': 'aggregate',
1334
1350
  'closeblock': false,
1335
- 'border': 'injectiongroup', // other value than true,false inidcates the used class for the svg-object
1351
+ 'border': 'visual',
1336
1352
  'expansion': function(node) {
1337
1353
  return 'vertical';
1338
1354
  },
@@ -1650,7 +1666,7 @@ function WFAdaptorManifestationBase(adaptor) {
1650
1666
  'illustrator': {//{{{
1651
1667
  'endnodes': 'this',
1652
1668
  'noarrow': false,
1653
- 'border': true,
1669
+ 'border': 'visual',
1654
1670
  'wide': true,
1655
1671
  'closing_symbol': 'event_end',
1656
1672
  'svg': self.adaptor.theme_dir + 'symbols/parallel_branch_event.svg'
@@ -1,12 +1,12 @@
1
1
  <svg class="clickable" xmlns="http://www.w3.org/2000/svg">
2
2
  <g class="part-normal">
3
3
  <rect x="11" y="6" width="9" height="18" rx="0" class="white"/>
4
- <path class="stand" d="M 11,5 C 2,9 2,21 11,25 M 20,5 C 29,9 29,21 20,25" style="stroke-dasharray:1,4;"/>
4
+ <path class="stand colorstyle" d="M 11,5 C 2,9 2,21 11,25 M 20,5 C 29,9 29,21 20,25" style="stroke-dasharray:1,4;"/>
5
5
  <line x1="15.6" y1="4" x2="15.6" y2="27" class="edge"/>
6
6
  </g>
7
7
  <g class="part-start">
8
8
  <rect x="11" y="6" width="9" height="18" rx="0" class="white"/>
9
- <path class="stand" d="M 11,5 C 2,9 2,21 11,25 M 20,5 C 29,9 29,21 20,25" style="stroke-dasharray:1,4;"/>
9
+ <path class="stand colorstyle" d="M 11,5 C 2,9 2,21 11,25 M 20,5 C 29,9 29,21 20,25" style="stroke-dasharray:1,4;"/>
10
10
  <line x1="15.6" y1="4" x2="15.6" y2="27" class="edge"/>
11
11
  </g>
12
12
  <g class="part-middle" transform="translate(30,0)">
@@ -1,5 +1,5 @@
1
1
  <svg class="clickable" xmlns="http://www.w3.org/2000/svg">
2
- <rect transform="rotate(45,14,12)" x="7" y="3" width="21" height="21" class="stand"/>
2
+ <rect transform="rotate(45,14,12)" x="7" y="3" width="21" height="21" class="colorstyle stand"/>
3
3
  <path d="m 17.620194,6.2873424 c 7.577463,7.5774646 -7.577463,10.5124376 0,18.0898996" class="stand" style="fill-opacity: 0"/>
4
4
  <path d="m 14.036033,6.2873424 c 7.577463,7.5774646 -7.5774629,10.5124376 0,18.0898996" class="stand" style="fill-opacity: 0"/>
5
5
  </svg>
@@ -1,5 +1,5 @@
1
1
  <svg class="clickable" xmlns="http://www.w3.org/2000/svg">
2
- <circle cx="15" cy="15" r="14" class="stand"/>
2
+ <circle cx="15" cy="15" r="14" class="colorstyle stand"/>
3
3
  <circle cx="15" cy="15" r="11" class="execstyle stand"/>
4
4
  <path d="M 7.8583963,10.061007 10.29692,7.6153325 15.17399,12.506704 20.051062,7.6153325 22.489583,10.06103 17.612536,14.952378 22.489583,19.84375 20.051062,22.289424 15.17399,17.398076 10.296942,22.289424 7.8583963,19.84375 12.735466,14.952378 Z" class="stand"/>
5
5
  </svg>
@@ -1,5 +1,5 @@
1
1
  <svg class="clickable" xmlns="http://www.w3.org/2000/svg">
2
- <circle cx="15" cy="15" r="14" class="stand"/>
2
+ <circle cx="15" cy="15" r="14" class="colorstyle stand"/>
3
3
  <circle cx="15" cy="15" r="11" class="execstyle stand"/>
4
4
  <circle cx="15" cy="15" r="7" class="stand"/> <path d="M 17,17 19.84375,19.84375" class="black stand"/>
5
5
  </svg>
@@ -1,5 +1,5 @@
1
1
  <svg class="clickable" xmlns="http://www.w3.org/2000/svg">
2
- <circle cx="15" cy="15" r="14" class="stand"/>
2
+ <circle cx="15" cy="15" r="14" class="colorstyle stand"/>
3
3
  <circle cx="15" cy="15" r="11" class="execstyle stand"/>
4
4
  <path d="M 14.904335,6.0646408 A 9.0152948,9.0152948 0 0 0 5.9550908,15.079625 H 23.985106 a 9.0152948,9.0152948 0 0 0 -9.015008,-9.0149842 9.0152948,9.0152948 0 0 0 -0.06567,0 z" class="standfat"/>
5
5
  <path d="M 14.970098,15.079625 11.963937,10.870986" class="black stand"/>
@@ -1,5 +1,15 @@
1
1
  <svg class="clickable" xmlns="http://www.w3.org/2000/svg">
2
- <path class="colorstyle execstyle stand" d="m 3.5 27 l 12 -24 l 12 24 z"/>
3
- <path class="normal" style="fill:#000000;" d="m 16.5 11 l 0 8 l -2 0 l 0 -8 z"/>
4
- <path class="normal" style="fill:#000000;" d="m 16.5 21 l 0 2 l -2 0 l 0 -2 z"/>
2
+ <g class="part-normal">
3
+ <circle cx="15" cy="15" r="14" class="colorstyle execstyle stand"/>
4
+ <path d="M 11,14 L 11,10 A 4,4 0 0 1 19,10 L 19,14" class="stand" style="fill:none;"/>
5
+ <rect x="9.5" y="13.5" width="11" height="9" rx="1.5" class="black"/>
6
+ </g>
7
+ <g class="part-start">
8
+ <circle cx="15" cy="15" r="14" class="colorstyle execstyle stand"/>
9
+ <path d="M 11,14 L 11,10 A 4,4 0 0 1 19,10 L 19,14" class="stand" style="fill:none;"/>
10
+ <rect x="9.5" y="13.5" width="11" height="9" rx="1.5" class="black"/>
11
+ </g>
12
+ <g class="part-middle" transform="translate(32,0)">
13
+ <text transform="translate(0,20)" class="label"></text>
14
+ </g>
5
15
  </svg>