cpee 1.3.209 → 1.3.211

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +5 -5
  3. data/cockpit/contrib/transformation1.xsl +9 -9
  4. data/cockpit/index.html +6 -4
  5. data/cockpit/js/details.js +54 -56
  6. data/cockpit/js/instance.js +15 -5
  7. data/cockpit/js/parameters.js +28 -28
  8. data/cockpit/js/wfadaptor.js +32 -16
  9. data/cockpit/testsets/Centurio.xml +72 -0
  10. data/cockpit/testsets/Lego Plate.xml +1 -1
  11. data/cockpit/testsets/Lego Transporter.xml +11 -147
  12. data/cockpit/testsets/Linear.xml +3 -0
  13. data/cockpit/testsets/Syncing P34 1.xml +9 -1
  14. data/cockpit/testsets/Syncing P34 2.xml +9 -1
  15. data/cockpit/testsets/Syncing P34 3.xml +9 -1
  16. data/cockpit/testsets/Syncing P34.xml +9 -1
  17. data/cockpit/testsets/testsets.xml +1 -0
  18. data/cockpit/themes/default/theme.js +22 -21
  19. data/cockpit/themes/labels/theme.js +786 -0
  20. data/cpee.gemspec +4 -2
  21. data/lib/cpee/controller.rb +0 -5
  22. data/server/handlerwrappers/default.rb +9 -15
  23. data/server/handlerwrappers/soap.rb +10 -10
  24. data/server/instances/10/notifications/182434032285ca1d06a8b6554b8889c8/consumer-secret +1 -0
  25. data/server/instances/10/notifications/182434032285ca1d06a8b6554b8889c8/producer-secret +1 -0
  26. data/server/instances/{6/notifications/0e9f3728f00c0562870110697bd8819c → 10/notifications/182434032285ca1d06a8b6554b8889c8}/subscription.xml +6 -21
  27. data/server/instances/10/notifications/512a3785631a5245dbb45fa150ea72ed/consumer-secret +1 -0
  28. data/server/instances/10/notifications/512a3785631a5245dbb45fa150ea72ed/producer-secret +1 -0
  29. data/server/instances/10/notifications/512a3785631a5245dbb45fa150ea72ed/subscription.xml +6 -0
  30. data/server/instances/10/properties.xml +187 -0
  31. data/server/instances/11/properties.xml +191 -0
  32. data/server/instances/12/properties.xml +191 -0
  33. data/server/instances/13/properties.xml +204 -0
  34. data/server/instances/14/properties.xml +31 -0
  35. data/server/instances/15/properties.xml +30 -0
  36. data/server/instances/16/properties.xml +29 -0
  37. data/server/instances/17/properties.xml +29 -0
  38. data/server/instances/18/properties.xml +31 -0
  39. data/server/instances/19/properties.xml +31 -0
  40. data/server/instances/20/properties.xml +191 -0
  41. data/server/instances/7/properties.xml +120 -0
  42. data/server/instances/8/properties.xml +118 -0
  43. data/server/instances/9/properties.xml +120 -0
  44. data/test/callback.rb +2 -2
  45. data/tools/cpee +38 -0
  46. data/tools/server/resources/notifications/logging/consumer-secret +1 -0
  47. data/tools/server/resources/notifications/logging/producer-secret +1 -0
  48. data/tools/server/resources/notifications/logging/subscription.xml +7 -0
  49. data/tools/server/resources/properties.init +47 -0
  50. data/tools/server/server.rb +14 -0
  51. metadata +33 -7
  52. data/server/instances/6/notifications/0e9f3728f00c0562870110697bd8819c/consumer-secret +0 -1
  53. data/server/instances/6/notifications/0e9f3728f00c0562870110697bd8819c/producer-secret +0 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a77dac895eb3b43e3a4ff6003396bcfb96891dd7
4
- data.tar.gz: 6ad70edf841754df24eb208b3a6566bdba9b4ec5
3
+ metadata.gz: f9dfbc4a7336bc2c8c2362dcbf908e405513651b
4
+ data.tar.gz: 1a598ec52063b0be720385d56ad43a6a34a5675b
5
5
  SHA512:
6
- metadata.gz: 1f39786faa2ebe4521088503fc27596d9ae59bf3d732704102e6dd42e2c2852142bb6cdb8e94eec546d98ea95def01b4c101235a976d22eef06468b8c5c0467e
7
- data.tar.gz: 6bf701d6ec695824c3019ee40ef80e7d781d3e23c64b3ad1b728409f924da0e59f572a737a708f68306907309f8c1833e66a6c2d4b5a62e5a1c78828d376e07b
6
+ metadata.gz: 51fa98d57404c06840e661579968c1972320fa78c164e972a2d3d29c85a8fc2aeff9ecc82b397b4a093e1d6acc76e025cdf5f97989f97492255e5eb4daa1804c
7
+ data.tar.gz: c44f85f3d3596ffc9fb9c8b70d3ee1570a37c0a8121e156d3b67c00485a8a2b265a0e316604f7dca675850594c413eb05db20c18fe488e847aa2f77c65116dda
data/Rakefile CHANGED
@@ -18,15 +18,15 @@ end
18
18
 
19
19
  task :push => :gem do |r|
20
20
  `gem push pkg/cpee.gem`
21
- end
21
+ end
22
22
 
23
23
  task :install => :gem do |r|
24
- `sudo gem install pkg/cpee.gem`
25
- end
24
+ `gem install pkg/cpee.gem`
25
+ end
26
26
 
27
27
  desc "Clean instances"
28
28
  task :clean do
29
29
  Dir.glob("server/instances/*").collect{ |i| i if i =~ /\/\d+$/ }.compact.each do |i|
30
- rm_rf i if File.exists?(i)
30
+ rm_rf i if File.exists?(i)
31
31
  end
32
- end
32
+ end
@@ -10,7 +10,7 @@
10
10
  <xsl:template match="//d:description">
11
11
  <xsl:apply-templates>
12
12
  <xsl:with-param name="myspace"><xsl:value-of select="-1*$myspacemultiplier"/></xsl:with-param>
13
- </xsl:apply-templates>
13
+ </xsl:apply-templates>
14
14
  </xsl:template>
15
15
 
16
16
  <xsl:template match="*">
@@ -20,7 +20,7 @@
20
20
  <xsl:with-param name="count"><xsl:value-of select="$myspace+$myspacemultiplier"/></xsl:with-param>
21
21
  </xsl:call-template>
22
22
  <xsl:if test="name()='call' or name()='manipulate'">
23
- <xsl:choose>
23
+ <xsl:choose>
24
24
  <xsl:when test="@lay">
25
25
  <xsl:text>activity [:</xsl:text>
26
26
  <xsl:value-of select="@id"/>
@@ -106,7 +106,7 @@
106
106
  <xsl:call-template name="print-newline"/>
107
107
  </xsl:if>
108
108
  </xsl:template>
109
-
109
+
110
110
  <xsl:template match="d:alternative">
111
111
  <xsl:param name="myspace"/>
112
112
  <xsl:call-template name="print-space">
@@ -179,12 +179,12 @@
179
179
  <xsl:template match="d:parameters">
180
180
  <xsl:apply-templates select="d:*" mode="parameter"/>
181
181
  </xsl:template>
182
-
182
+
183
183
  <xsl:template match="d:*" mode="parameter">
184
184
  <xsl:text>, :</xsl:text>
185
185
  <xsl:value-of select="name()"/>
186
186
  <xsl:text> => </xsl:text>
187
- <xsl:choose>
187
+ <xsl:choose>
188
188
  <xsl:when test="count(*) > 0">
189
189
  <xsl:text>[</xsl:text>
190
190
  <xsl:apply-templates select="d:*" mode="sub-parameter"/>
@@ -195,23 +195,23 @@
195
195
  <xsl:value-of select="text()"/>
196
196
  <xsl:text>"</xsl:text>
197
197
  </xsl:otherwise>
198
- </xsl:choose>
198
+ </xsl:choose>
199
199
  </xsl:template>
200
-
200
+
201
201
  <xsl:template match="d:*" mode="sub-parameter">
202
202
  <xsl:text> { :</xsl:text>
203
203
  <xsl:value-of select="name()"/>
204
204
  <xsl:text> => </xsl:text>
205
205
  <xsl:value-of select="text()"/>
206
206
  <xsl:text> }</xsl:text>
207
- <xsl:choose>
207
+ <xsl:choose>
208
208
  <xsl:when test=". = ../*[last()]">
209
209
  <xsl:text> </xsl:text>
210
210
  </xsl:when>
211
211
  <xsl:otherwise>
212
212
  <xsl:text>,</xsl:text>
213
213
  </xsl:otherwise>
214
- </xsl:choose>
214
+ </xsl:choose>
215
215
  </xsl:template>
216
216
 
217
217
  <xsl:template match="d:manipulate" mode="part-of-call">
data/cockpit/index.html CHANGED
@@ -189,7 +189,9 @@
189
189
  <ui-area data-belongs-to-tab="instance" id="areainstance" class="inactive"> <!--{{{-->
190
190
  <div class='section'>
191
191
  <div>
192
- <input type='file' name='testsetfile' id='testsetfile'/>
192
+ <form id='fuckchrome'>
193
+ <input type='file' name='testsetfile' id='testsetfile'/>
194
+ </form>
193
195
  <button title='a testset includes various setting, subscriptions and a model' name="loadtestset">load predefined testset</button><button title='a testset includes various setting, subscriptions and a model' name="loadtestsetfile">load testset file</button>
194
196
  </div>
195
197
  <div>
@@ -220,7 +222,7 @@
220
222
  </tbody>
221
223
  <tbody class='exe'>
222
224
  <tr>
223
- <td>Execution State:</td>
225
+ <td>State:</td>
224
226
  <td id='state'></td>
225
227
  </tr>
226
228
  <tr>
@@ -239,7 +241,7 @@
239
241
  <ui-tab class="" data-tab="dataelements" id="tabdataelements">Data Elements</ui-tab>
240
242
  <ui-tab class="inactive" data-tab="endpoints" id="tabendpoints" >Endpoints</ui-tab>
241
243
  <ui-tab class="inactive" data-tab="attributes" id="tabattributes" >Attributes</ui-tab>
242
- <ui-behind ><button title='Ctrl-N while editing entry'>New</button><button title='Ctrl-S while editing entry'>Save</button></ui-behind>
244
+ <ui-behind ><button title='add entry'>New</button></ui-behind>
243
245
  </ui-tabbar>
244
246
  <ui-content>
245
247
  <ui-area data-belongs-to-tab="dataelements" id="areadataelements"> <!--{{{-->
@@ -262,7 +264,7 @@
262
264
  <ui-tab class="" data-tab="details" id="tabdetails">Graph</ui-tab>
263
265
  <ui-tab class="inactive" data-tab="dsl" id="tabdsl" >Description</ui-tab>
264
266
  <ui-tab class="inactive" data-tab="log" id="tablog" >Log</ui-tab>
265
- <ui-behind ><button title='Ctrl-S while editing entry'>Save</button></ui-behind>
267
+ <ui-behind ></ui-behind>
266
268
  </ui-tabbar>
267
269
  <ui-content>
268
270
  <ui-area data-belongs-to-tab="details" id='graphcolumn'>
@@ -1,65 +1,63 @@
1
1
  $(document).ready(function() {
2
- $('#main ui-tabbar ui-behind button').hide();
3
-
4
- // save button shown or not //{{{
5
- $('#main ui-tabbar ui-tab:not(.switch)').click(function(event){
6
- var me = $(event.target);
7
- if ($('#state').text() != 'finished') {
8
- if (me.data('tab') == 'details') {
9
- if (!$("#dat_details").is(':empty')) {
10
- $('#main ui-tabbar ui-behind button').show();
11
- }
12
- } else {
13
- $('#main ui-tabbar ui-behind button').hide();
14
- }
2
+ var timer;
3
+
4
+ $(document).on('input','#dat_details input, #dat_details textarea',function(e){
5
+ clearTimeout(timer);
6
+ timer = setTimeout(do_main_save, 5000);
7
+ });
8
+ $(document).on('change','#dat_details select',function(e){
9
+ clearTimeout(timer);
10
+ do_main_save();
11
+ });
12
+ $(document).on('blur','#dat_details input, #dat_details textarea',function(e){
13
+ clearTimeout(timer);
14
+ do_main_save();
15
+ });
16
+ $(document).on('keypress','#dat_details input',function(e){
17
+ if (e.keyCode == 13) {
18
+ clearTimeout(timer);
19
+ do_main_save();
15
20
  }
16
- }); //}}}
17
-
18
- $('#main ui-tabbar ui-behind button').click(function(event){
19
- if (save['details'].has_changed()) {
20
- var visid = 'details';
21
- var svgid = save[visid + '_target'].svgid;
22
- var desc = save[visid + '_target'].model;
23
- var node = desc.get_node_by_svg_id(svgid);
24
-
25
- var url = $("#current-instance").text();
26
- $('#main ui-tabbar ui-behind button').removeClass('highlight');
27
- save['details'].set_checkpoint();
28
-
29
- // pull out xml and add XMLNS
30
- // sadly we have to serialze, add in string and then parse again
31
- // as adding namespaces to nodes is not supported
32
- // serialization and reparsing is faster and more robust than xslt option
33
- var nnew = $(save['details'].save().documentElement);
34
- nnew.attr('svg-id',svgid);
35
- nnew.attr('trans-xmlns','http://cpee.org/ns/description/1.0');
36
-
37
- if ($('*[svg-id]',node).length > 0) {
38
- // TODO maybe not all children. Maybe only thingies that have svg-id but nothing with svg-id between it and node.
39
- nnew.append(node.children());
40
- }
41
-
42
- var ntxt = nnew.serializeXML();
43
- ntxt = ntxt.replace(/trans-xmlns/,'xmlns');
21
+ });
22
+ $(document).on('relaxngui_remove', '#dat_details', function(e){
23
+ clearTimeout(timer);
24
+ do_main_save();
25
+ });
26
+ });
44
27
 
45
- node.replaceWith($X(ntxt));
28
+ function do_main_save() { //{{{
29
+ if (save['details'].has_changed()) {
30
+ var visid = 'details';
31
+ var svgid = save[visid + '_target'].svgid;
32
+ var desc = save[visid + '_target'].model;
33
+ var node = desc.get_node_by_svg_id(svgid);
46
34
 
47
- $.ajax({
48
- type: "PUT",
49
- url: url + "/properties/values/description/",
50
- data: ({'content': '<content>' + desc.get_description() + '</content>'})
51
- });
35
+ var url = $("#current-instance").text();
36
+ $('#main ui-tabbar ui-behind button').removeClass('highlight');
37
+ save['details'].set_checkpoint();
38
+
39
+ // pull out xml and add XMLNS
40
+ // sadly we have to serialze, add in string and then parse again
41
+ // as adding namespaces to nodes is not supported
42
+ // serialization and reparsing is faster and more robust than xslt option
43
+ var nnew = $(save['details'].save().documentElement);
44
+ nnew.attr('svg-id',svgid);
45
+ nnew.attr('trans-xmlns','http://cpee.org/ns/description/1.0');
46
+
47
+ if ($('*[svg-id]',node).length > 0) {
48
+ // TODO maybe not all children. Maybe only thingies that have svg-id but nothing with svg-id between it and node.
49
+ nnew.append(node.children());
52
50
  }
53
- }); //}}}
54
51
 
55
- $(document).on('input','#dat_details input, #dat_details textarea, #dat_details select',function(e){ mark_main_save(); });
56
- $(document).on('change','#dat_details select',function(e){ mark_main_save(); });
57
- });
52
+ var ntxt = nnew.serializeXML();
53
+ ntxt = ntxt.replace(/trans-xmlns/,'xmlns');
58
54
 
59
- function mark_main_save() { //{{{
60
- if (save['details'].has_changed()) {
61
- $('#main ui-tabbar ui-behind button').addClass('highlight');
62
- } else {
63
- $('#main ui-tabbar ui-behind button').removeClass('highlight');
55
+ node.replaceWith($X(ntxt));
56
+
57
+ $.ajax({
58
+ type: "PUT",
59
+ url: url + "/properties/values/description/",
60
+ data: ({'content': '<content>' + desc.get_description() + '</content>'})
61
+ });
64
62
  }
65
63
  } //}}}
@@ -56,7 +56,12 @@ var sub_less = 'topic' + '=' + 'activity' + '&' +// {{{
56
56
  'events' + '=' + 'change';// }}}
57
57
 
58
58
  $(document).ready(function() {// {{{
59
- $("input[name=base-url]").val(location.protocol + "//" + location.host + ":" + $('body').data('defaultport'));
59
+ console.log(location.protocol);
60
+ if (location.protocol.match(/^file/)) {
61
+ $("input[name=base-url]").val("http://localhost:" + $('body').data('defaultport'));
62
+ } else {
63
+ $("input[name=base-url]").val(location.protocol + "//" + location.host + ":" + $('body').data('defaultport'));
64
+ }
60
65
  $("button[name=base]").click(function(){ create_instance(null,false); });
61
66
  $("button[name=instance]").click(function(){ ui_activate_tab("#tabinstance"); monitor_instance(false,false); });
62
67
  $("button[name=loadtestset]").click(function(e){new CustomMenu(e).menu($('#predefinedtestsets'),function(){ load_testset(false) } ); });
@@ -78,6 +83,10 @@ $(document).ready(function() {// {{{
78
83
  $('#predefinedtestsets').append($("<div class='menuitem'></div>").text(ts));
79
84
  });
80
85
  var q = $.parseQuerySimple();
86
+ if (q.min || q.min == "") {
87
+ ui_toggle_vis_tab($('#instance ui-tabbar'));
88
+ ui_toggle_vis_tab($('#parameters ui-tabbar'));
89
+ }
81
90
  if (q.monitor && q.load) {
82
91
  $("input[name=instance-url]").val(q.monitor);
83
92
  $("#predefinedtestsets div.menuitem").each(function(k,v){
@@ -194,7 +203,8 @@ function monitor_instance(load,exec) {// {{{
194
203
  $("#current-instance-subscriptions").text('S');
195
204
  $("#current-instance-callbacks").attr('href',url + 'callbacks/');
196
205
  $("#current-instance-callbacks").text('C');
197
- history.replaceState({}, '', '?monitor='+url);
206
+ var q = $.parseQuerySimple();
207
+ history.replaceState({}, '', '?' + (q.min || q.min=="" ? "min&" : "") + 'monitor='+url);
198
208
 
199
209
  // Change url to return to current instance when reloading (because new subscription is made)
200
210
  $("input[name=votecontinue]").removeAttr('checked');
@@ -597,7 +607,6 @@ function save_svg() {// {{{
597
607
  });
598
608
  }// }}}
599
609
  function set_testset(testset,exec) {// {{{
600
- console.log(exec);
601
610
  var url = $("#current-instance").text();
602
611
 
603
612
  $.ajax({
@@ -669,10 +678,11 @@ function load_testsetfile_after() { //{{{
669
678
  var reader = new FileReader();
670
679
  reader.onload = function(){
671
680
  set_testset($.parseXML(reader.result),false);
681
+ document.getElementById("fuckchrome").reset();
672
682
  running = false;
673
683
  }
674
- reader.onerror = function(){ running = false; }
675
- reader.onabort = function(){ running = false; }
684
+ reader.onerror = function(){ console.log('error reading file'); running = false; }
685
+ reader.onabort = function(){ console.log('abort reading file'); running = false; }
676
686
  reader.readAsText(files[0]);
677
687
  } //}}}
678
688
  function load_testsetfile() {// {{{
@@ -27,26 +27,6 @@ $(document).ready(function() {
27
27
  }
28
28
  }); //}}}
29
29
 
30
- // color of save button when changeing tabs //{{{
31
- $('#parameters ui-tabbar ui-tab:not(.switch)').click(function(event){
32
- highlight_save_button(event);
33
- }); //}}}
34
-
35
- // save entries //{{{
36
- $('#parameters ui-behind button:nth-child(2)').click(function(event){
37
- var visid = $('ui-tabbar ui-tab',$(event.target).parents('ui-tabbed')).not('.switch').not('.inactive').attr('data-tab');
38
- if (save[visid].has_changed()) {
39
- var url = $("#current-instance").text();
40
- $('#parameters ui-tabbar ui-behind button:nth-child(2)').removeClass('highlight');
41
- save[visid].set_checkpoint();
42
- $.ajax({
43
- type: "PUT",
44
- url: url + "/properties/values/" + visid + "/",
45
- data: ({'content': save[visid].save_text()}),
46
- });
47
- }
48
- }); //}}}
49
-
50
30
  // new entry //{{{
51
31
  $('#parameters ui-behind button:nth-child(1)').click(function(event){
52
32
  var but = $(document).find('#parameters ui-content ui-area:not(.inactive) button');
@@ -56,17 +36,37 @@ $(document).ready(function() {
56
36
  are.animate({ scrollTop: tab.height() }, "slow");
57
37
  }); //}}}
58
38
 
59
- // when keyup in one of the inputs, highlight the save button //{{{
60
- $(document).on('keyup','#dat_dataelements input, #dat_endpoints input, #dat_attributes input',function(event){
61
- highlight_save_button(event);
39
+ var timer;
40
+ // when input in one of the inputs, save
41
+ $(document).on('input','#dat_dataelements input, #dat_endpoints input, #dat_attributes input',function(event){
42
+ clearTimeout(timer);
43
+ timer = setTimeout(function(){ do_parameters_save(event); }, 5000);
44
+ });
45
+ $(document).on('blur','#dat_dataelements input, #dat_endpoints input, #dat_attributes input',function(event){
46
+ clearTimeout(timer);
47
+ do_parameters_save(event);
48
+ }); //}}}
49
+ $(document).on('keypress','#dat_dataelements input, #dat_endpoints input, #dat_attributes input',function(event){
50
+ if (event.keyCode == 13) {
51
+ clearTimeout(timer);
52
+ do_parameters_save(event);
53
+ }
62
54
  }); //}}}
55
+ $(document).on('relaxngui_remove', '#dat_dataelements, #dat_endpoints, #dat_attributes', function(event){
56
+ clearTimeout(timer);
57
+ do_parameters_save(event);
58
+ });
63
59
  });
64
60
 
65
- function highlight_save_button(event) {
61
+ function do_parameters_save(event) { //{{{
66
62
  var visid = $('ui-tabbar ui-tab',$(event.target).parents('ui-tabbed')).not('.switch').not('.inactive').attr('data-tab');
67
63
  if (save[visid].has_changed()) {
68
- $('#parameters ui-tabbar ui-behind button:nth-child(2)').addClass('highlight');
69
- } else {
70
- $('#parameters ui-tabbar ui-behind button:nth-child(2)').removeClass('highlight');
64
+ var url = $("#current-instance").text();
65
+ save[visid].set_checkpoint();
66
+ $.ajax({
67
+ type: "PUT",
68
+ url: url + "/properties/values/" + visid + "/",
69
+ data: ({'content': save[visid].save_text()}),
70
+ });
71
71
  }
72
- }
72
+ } //}}}
@@ -59,6 +59,7 @@ function WfAdaptor(theme_base,doit) { // Controller {{{
59
59
  $.getScript(theme_base, function() {
60
60
  manifestation = new WFAdaptorManifestation(self);
61
61
  illustrator.noarrow = manifestation.noarrow;
62
+ illustrator.compact = manifestation.compact == true ? true : false;
62
63
  description.source = manifestation.source;
63
64
  var deferreds = [];
64
65
  // copy parent stuff
@@ -135,6 +136,7 @@ function WfIllustrator(wf_adaptor) { // View {{{
135
136
  this.elements = {}; // the svgs
136
137
  this.svg = {};
137
138
  this.draw = {};
139
+ this.compact = true;
138
140
  // private
139
141
  var self = this;
140
142
  var adaptor = null;
@@ -226,31 +228,38 @@ function WfIllustrator(wf_adaptor) { // View {{{
226
228
  );
227
229
  } else if (end['row']-start['row'] > 0) { // downwards
228
230
  if (end['col']-start['col'] > 0) {// left - right
229
- line.attr("d", "M " + String(start['col']*self.width) + "," + String(start['row']*self.height-15) +" "+
230
- String(start['col']*self.width+14) + "," + String((end['row']-1)*self.height) +" "+ // first turn of hotizontal-line going away from node
231
- String(end['col']*self.width) + "," + String((end['row']-1)*self.height) +" "+
232
- String(end['col']*self.width) + "," + String(end['row']*self.height-15)
233
- );
231
+ if (self.compact) {
232
+ line.attr("d", "M " + String(start['col']*self.width) + "," + String(start['row']*self.height-15) +" "+
233
+ String(start['col']*self.width+14) + "," + String((end['row']-1)*self.height) +" "+ // first turn of hotizontal-line going away from node
234
+ String(end['col']*self.width) + "," + String((end['row']-1)*self.height) +" "+
235
+ String(end['col']*self.width) + "," + String(end['row']*self.height-15)
236
+ );
237
+ } else {
238
+ line.attr("d", "M " + String(start['col']*self.width) + "," + String(start['row']*self.height-15) +" "+
239
+ String(end['col']*self.width) + "," + String(start['row']*self.height-15) +" "+
240
+ String(end['col']*self.width) + "," + String(end['row']*self.height-15)
241
+ );
242
+ }
234
243
  } else { // right - left
235
244
  line.attr("d", "M " + String(start['col']*self.width) + "," + String(start['row']*self.height-15) +" "+
236
- String(start['col']*self.width) + "," + String(end['row']*self.height-35) +" "+
237
- String(end['col']*self.width+14) + "," + String(end['row']*self.height-35) +" "+ // last turn of horizontal-line going into the node
238
- String(end['col']*self.width) + "," + String(end['row']*self.height-15)
245
+ String(start['col']*self.width) + "," + String(end['row']*self.height-35) +" "+
246
+ String(end['col']*self.width+14) + "," + String(end['row']*self.height-35) +" "+ // last turn of horizontal-line going into the node
247
+ String(end['col']*self.width) + "," + String(end['row']*self.height-15)
239
248
  );
240
249
  }
241
250
  } else if(end['row']-start['row'] < 0) { // upwards
242
251
  if(num_lines > 1) {// ??? no idea
243
252
  line.attr("d", "M " + String(start['col']*self.width) + "," + String(start['row']*self.height-15) +" "+
244
- String(start['col']*self.width) + "," + String((max_line-1)*self.height+5) +" "+
245
- String(end['col']*self.width+20) + "," + String((max_line-1)*self.height+5) +" "+
246
- String(end['col']*self.width+20) + "," + String(end['row']*self.height+25)+" "+
247
- String(end['col']*self.width) + "," + String(end['row']*self.height-15)
253
+ String(start['col']*self.width) + "," + String((max_line-1)*self.height+5) +" "+
254
+ String(end['col']*self.width+20) + "," + String((max_line-1)*self.height+5) +" "+
255
+ String(end['col']*self.width+20) + "," + String(end['row']*self.height+25)+" "+
256
+ String(end['col']*self.width) + "," + String(end['row']*self.height-15)
248
257
  );
249
258
  } else {
250
259
  line.attr("d", "M " + String(start['col']*self.width) + "," + String(start['row']*self.height-15) +" "+
251
- String(end['col']*self.width+20) + "," + String(start['row']*self.height-15) +" "+
252
- String(end['col']*self.width+20) + "," + String(end['row']*self.height+25)+" "+
253
- String(end['col']*self.width) + "," + String(end['row']*self.height-15)
260
+ String(end['col']*self.width+20) + "," + String(start['row']*self.height-15) +" "+
261
+ String(end['col']*self.width+20) + "," + String(end['row']*self.height+25)+" "+
262
+ String(end['col']*self.width) + "," + String(end['row']*self.height-15)
254
263
  );
255
264
  }
256
265
  }
@@ -449,7 +458,14 @@ function WfDescription(wf_adaptor, wf_illustrator) { // Model {{{
449
458
  if($(this).attr('collapsed') == undefined || $(this).attr('collapsed') == 'false') { collapsed = false; }
450
459
  else { collapsed = true; }
451
460
  if(root_expansion == 'vertical') pos.row++;
452
- if(root_expansion == 'horizontal') pos.col++;
461
+ if(root_expansion == 'horizontal') {
462
+ pos.col++;
463
+ if (!illustrator.compact) {
464
+ if (block.max.row) {
465
+ pos.row = block.max.row + 1;
466
+ }
467
+ }
468
+ }
453
469
  if(illustrator.elements[tname] != undefined && illustrator.elements[tname].type == 'complex' && !collapsed) {
454
470
  if(illustrator.elements[tname] != undefined && !illustrator.elements[tname].svg) pos.row--;
455
471
  // TODO: Remaining problem is the order inside the svg. Thats why the connection is above the icon