cpee 1.3.181 → 1.3.183

Sign up to get free protection for your applications and to get access to all the features.
Files changed (190) hide show
  1. checksums.yaml +4 -4
  2. data/cockpit/css/ui.css +19 -60
  3. data/cockpit/css/wfadaptor.css +11 -0
  4. data/cockpit/index.html +45 -71
  5. data/cockpit/js/details.js +50 -139
  6. data/cockpit/js/instance.js +133 -185
  7. data/cockpit/js/parameters.js +57 -55
  8. data/cockpit/js/ui.js +4 -29
  9. data/cockpit/js/wfadaptor.js +190 -108
  10. data/cockpit/rngs/attributes.rng +8 -0
  11. data/cockpit/rngs/dataelements.rng +8 -0
  12. data/cockpit/rngs/endpoints.rng +8 -0
  13. data/cockpit/testsets/Concurrent.xml +6 -6
  14. data/cockpit/testsets/Coopis Testset.xml +12 -12
  15. data/cockpit/testsets/ICSOC Testset.xml +27 -27
  16. data/cockpit/testsets/Infinity.xml +4 -4
  17. data/cockpit/testsets/Linear.xml +10 -10
  18. data/cockpit/testsets/Mangler 1.xml +20 -20
  19. data/cockpit/testsets/Mangler 2.xml +18 -18
  20. data/cockpit/testsets/Promise.xml +258 -0
  21. data/cockpit/testsets/SOPROMO Test Sonification.xml +11 -11
  22. data/cockpit/testsets/Syncing P34 1.xml +12 -12
  23. data/cockpit/testsets/Syncing P34 2.xml +12 -12
  24. data/cockpit/testsets/Syncing P34 3.xml +12 -12
  25. data/cockpit/testsets/Syncing P34.xml +12 -12
  26. data/cockpit/testsets/TEST - Bad Loop.xml +39 -39
  27. data/cockpit/testsets/Update.xml +1 -1
  28. data/cockpit/testsets/Worklist Parallel.xml +8 -8
  29. data/cockpit/testsets/Worklist Test CPEE.xml +2 -2
  30. data/cockpit/testsets/Worklist Test.xml +2 -2
  31. data/cockpit/testsets/testsets.xml +2 -0
  32. data/cockpit/themes/adventure/rngs/alternative.rng +5 -0
  33. data/cockpit/themes/adventure/rngs/call.rng +29 -0
  34. data/cockpit/{rngtest2.rng → themes/adventure/rngs/callmanipulate.rng} +9 -9
  35. data/cockpit/themes/adventure/rngs/choose.rng +8 -0
  36. data/cockpit/themes/adventure/rngs/critical.rng +5 -0
  37. data/cockpit/themes/adventure/rngs/escape.rng +1 -0
  38. data/cockpit/themes/adventure/rngs/finalize.rng +6 -0
  39. data/cockpit/themes/adventure/rngs/group.rng +3 -0
  40. data/cockpit/themes/adventure/rngs/loop.rng +11 -0
  41. data/cockpit/themes/adventure/rngs/manipulate.rng +6 -0
  42. data/cockpit/themes/adventure/rngs/otherwise.rng +1 -0
  43. data/cockpit/themes/adventure/rngs/parallel.rng +5 -0
  44. data/cockpit/themes/adventure/rngs/parallel_branch.rng +8 -0
  45. data/cockpit/themes/adventure/rngs/update.rng +6 -0
  46. data/cockpit/themes/adventure/symbols/alternative.svg +4 -0
  47. data/cockpit/themes/adventure/symbols/call.svg +4 -0
  48. data/cockpit/themes/adventure/symbols/callmanipulate.svg +6 -0
  49. data/cockpit/themes/adventure/symbols/choose.svg +5 -0
  50. data/cockpit/themes/adventure/symbols/choose_exclusive.svg +5 -0
  51. data/cockpit/themes/adventure/symbols/choose_inclusive.svg +4 -0
  52. data/cockpit/themes/adventure/symbols/critical.svg +4 -0
  53. data/cockpit/themes/adventure/symbols/escape.svg +5 -0
  54. data/cockpit/themes/adventure/symbols/loop.svg +5 -0
  55. data/cockpit/themes/adventure/symbols/manipulate.svg +4 -0
  56. data/cockpit/themes/adventure/symbols/otherwise.svg +4 -0
  57. data/cockpit/themes/adventure/symbols/parallel.svg +5 -0
  58. data/cockpit/themes/adventure/symbols/parallel_branch.svg +4 -0
  59. data/cockpit/themes/adventure/symbols/scripts.svg +4 -0
  60. data/cockpit/themes/adventure/symbols/start.svg +3 -0
  61. data/cockpit/themes/adventure/theme.js +729 -0
  62. data/cockpit/themes/default/rngs/alternative.rng +5 -0
  63. data/cockpit/themes/default/rngs/call.rng +29 -0
  64. data/cockpit/themes/default/rngs/callmanipulate.rng +41 -0
  65. data/cockpit/themes/default/rngs/choose.rng +8 -0
  66. data/cockpit/themes/default/rngs/critical.rng +5 -0
  67. data/cockpit/themes/default/rngs/escape.rng +1 -0
  68. data/cockpit/themes/default/rngs/finalize.rng +6 -0
  69. data/cockpit/themes/default/rngs/group.rng +3 -0
  70. data/cockpit/themes/default/rngs/loop.rng +11 -0
  71. data/cockpit/themes/default/rngs/manipulate.rng +6 -0
  72. data/cockpit/themes/default/rngs/otherwise.rng +1 -0
  73. data/cockpit/themes/default/rngs/parallel.rng +5 -0
  74. data/cockpit/themes/default/rngs/parallel_branch.rng +8 -0
  75. data/cockpit/themes/default/rngs/update.rng +6 -0
  76. data/cockpit/themes/default/symbols/alternative.svg +4 -0
  77. data/cockpit/themes/default/symbols/call.svg +4 -0
  78. data/cockpit/themes/default/symbols/callmanipulate.svg +6 -0
  79. data/cockpit/themes/default/symbols/choose.svg +5 -0
  80. data/cockpit/themes/default/symbols/choose_exclusive.svg +5 -0
  81. data/cockpit/themes/default/symbols/choose_inclusive.svg +4 -0
  82. data/cockpit/themes/default/symbols/critical.svg +4 -0
  83. data/cockpit/themes/default/symbols/escape.svg +5 -0
  84. data/cockpit/themes/default/symbols/loop.svg +5 -0
  85. data/cockpit/themes/default/symbols/manipulate.svg +4 -0
  86. data/cockpit/themes/default/symbols/otherwise.svg +4 -0
  87. data/cockpit/themes/default/symbols/parallel.svg +5 -0
  88. data/cockpit/themes/default/symbols/parallel_branch.svg +4 -0
  89. data/cockpit/themes/default/symbols/scripts.svg +4 -0
  90. data/cockpit/themes/default/symbols/start.svg +3 -0
  91. data/cockpit/themes/default/theme.js +729 -0
  92. data/cockpit/themes/lego/rngs/alternative.rng +5 -0
  93. data/cockpit/themes/lego/rngs/call.rng +41 -0
  94. data/cockpit/themes/lego/rngs/choose.rng +8 -0
  95. data/cockpit/themes/lego/rngs/critical.rng +5 -0
  96. data/cockpit/themes/lego/rngs/loop.rng +11 -0
  97. data/cockpit/themes/lego/rngs/manipulate.rng +6 -0
  98. data/cockpit/themes/lego/rngs/parallel.rng +5 -0
  99. data/cockpit/themes/lego/rngs/parallel_branch.rng +8 -0
  100. data/cockpit/themes/lego/symbols/alternative.svg +4 -0
  101. data/cockpit/themes/lego/symbols/call.svg +4 -0
  102. data/cockpit/themes/lego/symbols/callmanipulate.svg +6 -0
  103. data/cockpit/themes/lego/symbols/callori.svg +4 -0
  104. data/cockpit/themes/lego/symbols/choose.svg +4 -0
  105. data/cockpit/themes/lego/symbols/choose_exclusive.svg +5 -0
  106. data/cockpit/themes/lego/symbols/choose_inclusive.svg +4 -0
  107. data/cockpit/themes/lego/symbols/critical.svg +4 -0
  108. data/cockpit/themes/lego/symbols/escape.svg +5 -0
  109. data/cockpit/themes/lego/symbols/lego.svg +72 -0
  110. data/cockpit/themes/lego/symbols/loop.svg +5 -0
  111. data/cockpit/themes/lego/symbols/manipulate.svg +4 -0
  112. data/cockpit/themes/lego/symbols/otherwise.svg +4 -0
  113. data/cockpit/themes/lego/symbols/parallel.svg +6 -0
  114. data/cockpit/themes/lego/symbols/parallel_branch.svg +4 -0
  115. data/cockpit/themes/lego/symbols/scripts.svg +4 -0
  116. data/cockpit/themes/lego/symbols/start.svg +3 -0
  117. data/cockpit/themes/lego/theme.js +742 -0
  118. data/cockpit/themes/promise/rngs/alternative.rng +5 -0
  119. data/cockpit/themes/promise/rngs/call.rng +41 -0
  120. data/cockpit/themes/promise/rngs/choose.rng +8 -0
  121. data/cockpit/themes/promise/rngs/critical.rng +5 -0
  122. data/cockpit/themes/promise/rngs/loop.rng +11 -0
  123. data/cockpit/themes/promise/rngs/manipulate.rng +6 -0
  124. data/cockpit/themes/promise/rngs/parallel.rng +5 -0
  125. data/cockpit/themes/promise/rngs/parallel_branch.rng +8 -0
  126. data/cockpit/themes/promise/symbols/alternative.svg +4 -0
  127. data/cockpit/themes/promise/symbols/call.svg +4 -0
  128. data/cockpit/themes/promise/symbols/callmanipulate.svg +6 -0
  129. data/cockpit/themes/promise/symbols/choose.svg +4 -0
  130. data/cockpit/themes/promise/symbols/choose_exclusive.svg +5 -0
  131. data/cockpit/themes/promise/symbols/choose_inclusive.svg +4 -0
  132. data/cockpit/themes/promise/symbols/critical.svg +4 -0
  133. data/cockpit/themes/promise/symbols/escape.svg +5 -0
  134. data/cockpit/themes/promise/symbols/loop.svg +5 -0
  135. data/cockpit/themes/promise/symbols/manipulate.svg +4 -0
  136. data/cockpit/themes/promise/symbols/otherwise.svg +4 -0
  137. data/cockpit/themes/promise/symbols/parallel.svg +6 -0
  138. data/cockpit/themes/promise/symbols/parallel_branch.svg +4 -0
  139. data/cockpit/themes/promise/symbols/preminder.svg +6 -0
  140. data/cockpit/themes/promise/symbols/scripts.svg +4 -0
  141. data/cockpit/themes/promise/symbols/start.svg +3 -0
  142. data/cockpit/themes/promise/theme.js +742 -0
  143. data/cpee.gemspec +2 -2
  144. data/lib/cpee/implementation.rb +15 -15
  145. data/server/handlerwrappers/default.rb +19 -19
  146. data/server/handlerwrappers/log.rb +264 -0
  147. data/server/instances/10/properties.xml +148 -0
  148. data/server/instances/11/properties.xml +149 -0
  149. data/server/instances/12/properties.xml +149 -0
  150. data/server/instances/13/properties.xml +149 -0
  151. data/server/instances/14/properties.xml +111 -0
  152. data/server/instances/15/properties.xml +113 -0
  153. data/server/instances/16/properties.xml +113 -0
  154. data/server/instances/17/properties.xml +149 -0
  155. data/server/instances/18/properties.xml +149 -0
  156. data/server/instances/19/properties.xml +114 -0
  157. data/server/instances/2/properties.xml +1 -1
  158. data/server/instances/20/properties.xml +113 -0
  159. data/server/instances/21/notifications/0851248d60c898cadd743d0dd5b6d273/consumer-secret +1 -0
  160. data/server/instances/21/notifications/0851248d60c898cadd743d0dd5b6d273/producer-secret +1 -0
  161. data/server/instances/21/notifications/0851248d60c898cadd743d0dd5b6d273/subscription.xml +6 -0
  162. data/server/instances/21/notifications/b7bac3f3010d433ce5d8f29338a06f9a/consumer-secret +1 -0
  163. data/server/instances/21/notifications/b7bac3f3010d433ce5d8f29338a06f9a/producer-secret +1 -0
  164. data/server/instances/21/notifications/b7bac3f3010d433ce5d8f29338a06f9a/subscription.xml +23 -0
  165. data/server/instances/21/properties.xml +149 -0
  166. data/server/instances/22/properties.xml +113 -0
  167. data/server/instances/23/properties.xml +88 -0
  168. data/server/instances/24/properties.xml +168 -0
  169. data/server/instances/25/properties.xml +149 -0
  170. data/server/instances/26/properties.xml +113 -0
  171. data/server/instances/27/properties.xml +141 -0
  172. data/server/instances/3/properties.xml +46 -0
  173. data/server/instances/4/properties.xml +148 -0
  174. data/server/instances/5/properties.xml +148 -0
  175. data/server/instances/6/properties.xml +148 -0
  176. data/server/instances/7/properties.xml +148 -0
  177. data/server/instances/8/properties.xml +148 -0
  178. data/server/instances/9/properties.xml +46 -0
  179. data/server/resources/properties.init +2 -1
  180. data/server/resources/transformation_dslx.xsl +12 -12
  181. data/server/server.pid +1 -0
  182. data/server/server.rb +2 -0
  183. metadata +152 -12
  184. data/cockpit/js/wfadaptor.cpee.js +0 -936
  185. data/cockpit/rngtest1.html +0 -53
  186. data/cockpit/rngtest1.rng +0 -38
  187. data/cockpit/rngtest1.xml +0 -16
  188. data/cockpit/rngtest2.html +0 -53
  189. data/cockpit/rngtest2.xml +0 -11
  190. data/cockpit/test.html +0 -46
@@ -1,67 +1,69 @@
1
1
  $(document).ready(function() {
2
- // Color of save buttons for parameter area //{{{
3
- $('#parameters ui-tabbar ui-tab:not(.switch)').click(function(event){
4
- mark_parameters_save($(event.target).parents('ui-tabbed'));
2
+ // hook up dataelements with relaxngui //{{{
3
+ $.ajax({
4
+ type: "GET",
5
+ url: "rngs/dataelements.rng",
6
+ success: function(rng){
7
+ save['dataelements'] = new RelaxNGui(rng,$('#dat_dataelements'));
8
+ }
9
+ }); //}}}
10
+ // hook up endpoints with relaxngui //{{{
11
+ $.ajax({
12
+ type: "GET",
13
+ url: "rngs/endpoints.rng",
14
+ success: function(rng){
15
+ save['endpoints'] = new RelaxNGui(rng,$('#dat_endpoints'));
16
+ }
5
17
  }); //}}}
6
-
7
- // Delete entries //{{{
8
- $(document).on('click','#parameters td.del a',function(event){
9
- var top = $(event.target).parents('ui-tabbed');
10
- remove_entry($("input",$(event.target).parents('tr')).get(0),false);
11
- mark_parameters_save(top);
12
- return false;
18
+ // hook up attributes with relaxngui //{{{
19
+ $.ajax({
20
+ type: "GET",
21
+ url: "rngs/attributes.rng",
22
+ success: function(rng){
23
+ save['attributes'] = new RelaxNGui(rng,$('#dat_attributes'));
24
+ }
13
25
  }); //}}}
14
26
 
15
- // New entry //{{{
16
- $('#parameters ui-behind button:nth-child(1)').click(function(){
17
- new_entry($(this).parents('ui-tabbed'));
27
+ // color of save button when changeing tabs //{{{
28
+ $('#parameters ui-tabbar ui-tab:not(.switch)').click(function(event){
29
+ highlight_save_button(event);
18
30
  }); //}}}
19
31
 
20
- // Save entries //{{{
32
+ // save entries //{{{
21
33
  $('#parameters ui-behind button:nth-child(2)').click(function(event){
22
- save_parameters($(event.target).parents('ui-tabbed'));
34
+ var visid = $('ui-tabbar ui-tab',$(event.target).parents('ui-tabbed')).not('.switch').not('.inactive').attr('data-tab');
35
+ if (save[visid].has_changed()) {
36
+ var url = $("#current-instance").text();
37
+ $('#parameters ui-tabbar ui-behind button:nth-child(2)').removeClass('highlight');
38
+ save[visid].set_checkpoint();
39
+ $.ajax({
40
+ type: "PUT",
41
+ url: url + "/properties/values/" + visid + "/",
42
+ data: ({'content': save[visid].save_text()}),
43
+ });
44
+ }
23
45
  }); //}}}
24
46
 
25
- $(document).on('keyup','#dat_dataelements input',function(e){ mark_parameters_save($(e.target).parents('ui-tabbed')); });
26
- $(document).on('keyup','#dat_endpoints input',function(e){ mark_parameters_save($(e.target).parents('ui-tabbed')); });
27
- $(document).on('keyup','#dat_attributes input',function(e){ mark_parameters_save($(e.target).parents('ui-tabbed')); });
28
- });
29
-
30
- function mark_parameters_save(top) { //{{{
31
- var visid = $('ui-tabbar ui-tab',top).not('.switch').not('.inactive').attr('data-tab');
32
- var tab = $('#dat_' + visid);
33
- if (serialize_inputs(tab) != save[visid]) {
34
- $('ui-tabbar ui-behind button:nth-child(2)',top).addClass('highlight');
35
- } else {
36
- $('ui-tabbar ui-behind button:nth-child(2)',top).removeClass('highlight');
37
- }
38
- } //}}}
39
- function save_parameters(top) { //{{{
40
- var visid = $('ui-tabbar ui-tab',top).not('.switch').not('.inactive').attr('id').replace(/tab/,'');
41
- var table = $('#dat_' + visid);
42
- var serxml = serialize_inputs(table);
47
+ // new entry //{{{
48
+ $('#parameters ui-behind button:nth-child(1)').click(function(event){
49
+ var but = $(document).find('#parameters ui-content ui-area:not(.inactive) button');
50
+ but.click();
51
+ var are = $(document).find('#parameters ui-content ui-area:not(.inactive)');
52
+ var tab = $(document).find('#parameters ui-content ui-area:not(.inactive) .relaxngui_table');
53
+ are.animate({ scrollTop: tab.height() }, "slow");
54
+ }); //}}}
43
55
 
44
- if (serxml != save[visid]) {
45
- save[visid] = serxml;
46
- var url = $("#current-instance").text();
47
- $('ui-tabbar ui-behind button:nth-child(2)',top).removeClass('highlight');
48
- $.ajax({
49
- type: "PUT",
50
- url: url + "/properties/values/" + visid + "/",
51
- data: ({'content': serxml}),
52
- });
53
- }
54
- } //}}}
56
+ // when keyup in one of the inputs, highlight the save button //{{{
57
+ $(document).on('keyup','#dat_dataelements input, #dat_endpoints input, #dat_attributes input',function(event){
58
+ highlight_save_button(event);
59
+ }); //}}}
60
+ });
55
61
 
56
- function serialize_inputs(parent) { //{{{
57
- var xml = $X('<content/>');
58
- var fields = $('input',parent);
59
- for (var i=0;i<fields.length; i+=2) {
60
- var k = $(fields[i]).val();
61
- var v = $(fields[i+1]).val();
62
- if (k.match(/^[a-zA-Z][a-zA-Z0-9_]*$/)) {
63
- xml.append($X('<' + k + '>' + v + '</' + k + '>'));
64
- }
62
+ function highlight_save_button(event) {
63
+ var visid = $('ui-tabbar ui-tab',$(event.target).parents('ui-tabbed')).not('.switch').not('.inactive').attr('data-tab');
64
+ if (save[visid].has_changed()) {
65
+ $('#parameters ui-tabbar ui-behind button:nth-child(2)').addClass('highlight');
66
+ } else {
67
+ $('#parameters ui-tabbar ui-behind button:nth-child(2)').removeClass('highlight');
65
68
  }
66
- return xml.serializeXML();
67
- } //}}}
69
+ }
@@ -4,17 +4,17 @@ $(document).ready(function() {
4
4
 
5
5
  $('body').children().each(function(key,c){
6
6
  if (skip) {
7
- $(c).remove();
7
+ $(c).remove();
8
8
  } else {
9
9
  $(c).removeClass('hidden');
10
- }
10
+ }
11
11
  skip = true;
12
12
  });
13
13
 
14
14
  $("#iagree").click(function(){
15
15
  if($(this).is(':checked')){
16
16
  $("#icontinue").prop("disabled", false);
17
- } else {
17
+ } else {
18
18
  $("#icontinue").prop("disabled", true);
19
19
  }
20
20
  });
@@ -22,30 +22,5 @@ $(document).ready(function() {
22
22
  $.cookie('cpee_iagree','yes');
23
23
  location.reload();
24
24
  });
25
- }
25
+ }
26
26
  });
27
-
28
- // flexible parameter input
29
-
30
- function remove_entry(target,foc) { //{{{
31
- var tr = $($(target).parents('tr').get(0));
32
- if (foc) {
33
- var par = tr.parent();
34
- $('input.' + $(target).attr('class'),par).each(function(){
35
- if (this == target) {
36
- if (prev) prev.focus();
37
- return false;
38
- }
39
- prev = this;
40
- });
41
- }
42
- tr.remove();
43
- } //}}}
44
-
45
- function new_entry(top) { //{{{
46
- var visid = $('ui-tabbar ui-tab',top).not('.switch').not('.inactive').attr('id').replace(/tab/,'');
47
- var node = $('#dat_template_pair tr').clone();
48
- var vnode = $('#dat_' + visid).append(node);
49
- $('.pair_name',vnode).focus();
50
- return node;
51
- } //}}}
@@ -19,22 +19,25 @@
19
19
  // 2) creation of svg-container (Bug: arrows on lines)
20
20
  // 3) after-function to insert using namespace of description
21
21
 
22
- // WfAdaptor:
23
- // Handles interaction between Illustartor and Description
22
+ // WfAdaptor:
23
+ // Handles interaction between Illustartor and Description
24
24
  // e.g. Event fires to Adaptor to insert Element and Illustrator and Description do it
25
- function WfAdaptor(manifesto) { // Controller {{{
26
-
25
+ function WfAdaptor(theme_base,doit) { // Controller {{{
26
+
27
27
  // public variables {{{
28
28
  this.illustrator;
29
29
  this.description;
30
30
  this.elements = {};
31
+ this.theme_base = theme_base;
32
+ this.theme_dir = theme_base.replace(/theme.js/,'');
31
33
  // }}}
32
34
 
33
- // public variables {{{
35
+ // private variables {{{
34
36
  var illustrator;
35
37
  var description;
38
+ var self = this;
36
39
  // }}}
37
-
40
+
38
41
  // helper funtions
39
42
  this.set_description = function(desc) { // public {{{
40
43
  this.description.set_description(desc);
@@ -48,74 +51,133 @@ function WfAdaptor(manifesto) { // Controller {{{
48
51
  illustrator.set_container(container); // TODO: shadowing the container element
49
52
  } // }}}
50
53
 
54
+
51
55
  // initialze
52
56
  this.illustrator = illustrator = new WfIllustrator(this);
53
57
  this.description = description = new WfDescription(this, this.illustrator);
54
58
 
55
- manifestation = new manifesto(this);
56
- this.illustrator.noarrow = manifestation.noarrow;
57
- for(element in manifestation.elements) {
58
- this.illustrator.elements[element] = manifestation.elements[element].illustrator;
59
- this.description.elements[element] = manifestation.elements[element].description;
60
- this.elements[element] = manifestation.elements[element].adaptor;
61
- }
62
- } // }}}
59
+ $.getScript(theme_base, function() {
60
+ manifestation = new WFAdaptorManifestation(self);
61
+ illustrator.noarrow = manifestation.noarrow;
62
+ description.source = manifestation.source;
63
+ var deferreds = [];
64
+ // copy parent stuff
65
+ for(element in manifestation.elements) {
66
+ if (!manifestation.elements[element].description) {
67
+ if (manifestation.elements[element].parent) { // take from parent if empty
68
+ manifestation.elements[element].description = manifestation.elements[manifestation.elements[element].parent].description;
69
+ }
70
+ }
71
+ if (!manifestation.elements[element].adaptor) {
72
+ if (manifestation.elements[element].parent) { // take from parent if empty
73
+ manifestation.elements[element].adaptor = manifestation.elements[manifestation.elements[element].parent].adaptor;
74
+ }
75
+ }
76
+ }
77
+ // doit
78
+ for(element in manifestation.elements) {
79
+ if (manifestation.elements[element].illustrator) {
80
+ if (manifestation.elements[element].illustrator.svg) {
81
+ deferreds.push(
82
+ $.ajax({
83
+ type: "GET",
84
+ url: manifestation.elements[element].illustrator.svg,
85
+ context: element,
86
+ success: function(res){
87
+ manifestation.elements[this].illustrator.svg = $(res.documentElement);
88
+ }
89
+ })
90
+ );
91
+ }
92
+ illustrator.elements[element] = manifestation.elements[element].illustrator;
93
+ illustrator.elements[element].type = manifestation.elements[element].type || 'abstract';
94
+ }
95
+ if (manifestation.elements[element].description) {
96
+ if ( typeof manifestation.elements[element].description === 'string' ) {
97
+ manifestation.elements[element].description = [ manifestation.elements[element].description ];
98
+ }
99
+ if ($.isArray(manifestation.elements[element].description)) {
100
+ _.each(manifestation.elements[element].description,function(val,ind){
101
+ deferreds.push(
102
+ $.ajax({
103
+ type: "GET",
104
+ url: val,
105
+ context: element,
106
+ success: function(res){
107
+ manifestation.elements[this].description = $(res.documentElement);
108
+ description.elements[this] = manifestation.elements[this].description;
109
+ }
110
+ })
111
+ );
112
+ });
113
+ }
114
+ }
115
+ if (manifestation.elements[element].adaptor) {
116
+ self.elements[element] = manifestation.elements[element].adaptor;
117
+ }
118
+ }
119
+ $.when.apply($, deferreds).then(function(x) {
120
+ doit(self);
121
+ });
122
+ });
123
+ } // }}}
63
124
 
64
- // WfIllustrator:
125
+ // WfIllustrator:
65
126
  // Is in charge of displaying the Graph. It is further able insert and remove elements with given ID's from the illsutration.
66
127
  function WfIllustrator(wf_adaptor) { // View {{{
67
128
  // Variable {{{
68
129
  // public
69
- var height = this.height = 40;
70
- var width = this.width = 40;
71
- var noarrow = this.noarrow = [];
72
- var elements = this.elements = {};
73
- var svg = this.svg = {};
130
+ this.height = 40;
131
+ this.width = 40;
132
+ this.noarrow = [];
133
+ this.elements = {}; // the svgs
134
+ this.svg = {};
74
135
  this.draw = {};
75
136
  // private
137
+ var self = this;
76
138
  var adaptor = null;
77
- // }}}
139
+ // }}}
78
140
  // Generic Functions {{{
79
141
  this.set_container = function(con) { // {{{
80
- svg.container = con;
81
- svg.container.append($X('<defs xmlns="http://www.w3.org/2000/svg">' +
142
+ self.svg.container = con;
143
+ self.svg.container.append($X('<defs xmlns="http://www.w3.org/2000/svg">' +
82
144
  '<marker id="arrow" viewBox="0 0 10 10" refX="33" refY="5" orient="auto" markerUnits="strokeWidth" markerWidth="4.5" makerHeight="4.5">' +
83
145
  '<path d="m 2 2 l 6 3 l -6 3 z"/>' +
84
146
  '</marker>' +
85
147
  '</defs>'));
86
- svg.defs = {};
87
- svg.defs['unknown'] = $X('<g xmlns="http://www.w3.org/2000/svg" class="unknown">' +
148
+ self.svg.defs = {};
149
+ self.svg.defs['unknown'] = $X('<g xmlns="http://www.w3.org/2000/svg" class="unknown">' +
88
150
  '<circle cx="15" cy="15" r="14" class="unkown"/>' +
89
151
  '<text transform="translate(15,20)" class="normal">?</text>' +
90
152
  '</g>');
91
- for(element in elements)
92
- if(elements[element].svg() != false) {
93
- var sym = $X('<g xmlns="http://www.w3.org/2000/svg"/>').append(elements[element].svg().children()); // append all children to symbol
94
- $.each(elements[element].svg().attr('class').split(/\s+/), function(index, item) { sym.addClass(item); }); // copy all classes from the root node
95
- svg.defs[element] = sym;
153
+ for(element in self.elements)
154
+ if(self.elements[element].svg) {
155
+ var sym = $X('<g xmlns="http://www.w3.org/2000/svg"/>').append(self.elements[element].svg.clone().children()); // append all children to symbol
156
+ $.each(self.elements[element].svg.attr('class').split(/\s+/), function(index, item) { sym.addClass(item); }); // copy all classes from the root node
157
+ self.svg.defs[element] = sym;
96
158
  }
97
159
  } // }}}
98
160
  var clear = this.clear = function() { // {{{
99
- $('> :not(defs)', svg.container).each(function() {$(this).remove()});
161
+ $('> :not(defs)', self.svg.container).each(function() {$(this).remove()});
100
162
  } // }}}
101
163
  this.set_svg = function(graph) { // {{{
102
164
  if(graph.max.row < 1) graph.max.row = 1;
103
165
  if(graph.max.col < 1) graph.max.col = 1;
104
- svg.container.attr({'height': (graph.max.row+0.3)*height, 'width':(graph.max.col+0.65)*width});
105
- svg.container.append(graph.svg);
166
+ self.svg.container.attr({'height': (graph.max.row+0.3)*self.height, 'width':(graph.max.col+0.65)*self.width});
167
+ self.svg.container.append(graph.svg);
106
168
  } // }}}
107
169
  // }}}
108
170
  // Helper Functions {{{
109
171
  var draw_symbol = this.draw.draw_symbol = function (tname, sym_name, id, title, row, col, group) { // {{{
110
- if(elements[sym_name] == undefined || elements[sym_name].svg == undefined) sym_name = 'unknown';
111
- var g = $X('<g class="element" element-id="' + id + '" transform="translate(' + String((col*width)-((width*0.39))) + ',' + String(row*height-((height*0.74))) + ')" xmlns="http://www.w3.org/2000/svg">' +
172
+ if(self.elements[sym_name] == undefined || self.elements[sym_name].svg == undefined) sym_name = 'unknown';
173
+ var g = $X('<g class="element" element-type="' + sym_name + '" element-id="' + id + '" transform="translate(' + String((col*self.width)-((self.width*0.39))) + ',' + String(row*self.height-((self.height*0.74))) + ')" xmlns="http://www.w3.org/2000/svg">' +
112
174
  '<text class="super" transform="translate(30,8.4)">' +
113
175
  '<tspan class="active">0</tspan>' +
114
176
  '<tspan class="colon">,</tspan>' +
115
177
  '<tspan class="vote">0</tspan>' +
116
178
  '</text>' +
117
- '</g>');
118
- var sym = svg.defs[sym_name].clone();
179
+ '</g>');
180
+ var sym = self.svg.defs[sym_name].clone();
119
181
  sym.prepend($X('<title xmlns="http://www.w3.org/2000/svg">' + title + '</title>'));
120
182
  sym.attr('class','activities');
121
183
  g.append(sym);
@@ -126,21 +188,21 @@ function WfIllustrator(wf_adaptor) { // View {{{
126
188
  if(event_name == 'mousedown') sym.bind('contextmenu', false);
127
189
  }
128
190
  if(group) {group.append(g);}
129
- else {svg.container.children('g:first').append(g);}
191
+ else {self.svg.container.children('g:first').append(g);}
130
192
  return g;
131
- } // }}}
193
+ } // }}}
132
194
  var draw_border = this.draw.draw_border = function(id, p1, p2, group) { // {{{
133
- group.prepend($X('<rect element-id="' + id + '" x="' + (p1.col-0.50)*width + '" ' +
134
- 'y="' + (p1.row-0.80)*height + '" ' +
135
- 'width="' + ((p2.col+1.00)-p1.col)*width + '" ' +
136
- 'height="' + ((p2.row+1.00)-p1.row)*height +'" ' +
195
+ group.prepend($X('<rect element-id="' + id + '" x="' + (p1.col-0.50)*self.width + '" ' +
196
+ 'y="' + (p1.row-0.80)*self.height + '" ' +
197
+ 'width="' + ((p2.col+1.00)-p1.col)*self.width + '" ' +
198
+ 'height="' + ((p2.row+1.00)-p1.row)*self.height +'" ' +
137
199
  'class="block" rx="15" ry="15" xmlns="http://www.w3.org/2000/svg"/>'));
138
- } // }}}
200
+ } // }}}
139
201
  var draw_tile = this.draw.draw_tile = function(id, p1, p2, group) { // {{{
140
- group.prepend($X('<rect element-id="' + id + '" x="' + (p1.col-0.50)*width + '" ' +
141
- 'y="' + (p1.row-0.80)*height + '" ' +
142
- 'width="' + ((p2.col+1.00)-p1.col)*width + '" ' +
143
- 'height="' + ((p2.row+1.00)-p1.row)*height +'" ' +
202
+ group.prepend($X('<rect element-id="' + id + '" x="' + (p1.col-0.50)*self.width + '" ' +
203
+ 'y="' + (p1.row-0.80)*self.height + '" ' +
204
+ 'width="' + ((p2.col+1.00)-p1.col)*self.width + '" ' +
205
+ 'height="' + ((p2.row+1.00)-p1.row)*self.height +'" ' +
144
206
  'class="tile" rx="15" ry="15" xmlns="http://www.w3.org/2000/svg"/>'));
145
207
  } // }}}
146
208
  var draw_connection = this.draw.draw_connection = function(group, start, end, max_line, num_lines, arrow) { // {{{
@@ -148,46 +210,46 @@ function WfIllustrator(wf_adaptor) { // View {{{
148
210
  var line;
149
211
  if (arrow)
150
212
  line = $X('<path xmlns="http://www.w3.org/2000/svg" class="ourline" marker-end="url(#arrow)"/>');
151
- else
213
+ else
152
214
  line = $X('<path xmlns="http://www.w3.org/2000/svg" class="ourline"/>');
153
215
  if (end['row']-start['row'] == 0 || end['col']-start['col'] == 0) { // straight line
154
- line.attr("d", "M " + String(start['col']*width) + "," + String(start['row']*height-15) +" "+
155
- String(end['col']*width) + "," + String(end['row']*height-15)
216
+ line.attr("d", "M " + String(start['col']*self.width) + "," + String(start['row']*self.height-15) +" "+
217
+ String(end['col']*self.width) + "," + String(end['row']*self.height-15)
156
218
  );
157
219
  } else if (end['row']-start['row'] > 0) { // downwards
158
220
  if (end['col']-start['col'] > 0) {// left - right
159
- line.attr("d", "M " + String(start['col']*width) + "," + String(start['row']*height-15) +" "+
160
- String(start['col']*width+14) + "," + String((end['row']-1)*height) +" "+ // first turn of hotizontal-line going away from node
161
- String(end['col']*width) + "," + String((end['row']-1)*height) +" "+
162
- String(end['col']*width) + "," + String(end['row']*height-15)
221
+ line.attr("d", "M " + String(start['col']*self.width) + "," + String(start['row']*self.height-15) +" "+
222
+ String(start['col']*self.width+14) + "," + String((end['row']-1)*self.height) +" "+ // first turn of hotizontal-line going away from node
223
+ String(end['col']*self.width) + "," + String((end['row']-1)*self.height) +" "+
224
+ String(end['col']*self.width) + "," + String(end['row']*self.height-15)
163
225
  );
164
226
  } else { // right - left
165
- line.attr("d", "M " + String(start['col']*width) + "," + String(start['row']*height-15) +" "+
166
- String(start['col']*width) + "," + String(end['row']*height-35) +" "+
167
- String(end['col']*width+14) + "," + String(end['row']*height-35) +" "+ // last turn of horizontal-line going into the node
168
- String(end['col']*width) + "," + String(end['row']*height-15)
227
+ line.attr("d", "M " + String(start['col']*self.width) + "," + String(start['row']*self.height-15) +" "+
228
+ String(start['col']*self.width) + "," + String(end['row']*self.height-35) +" "+
229
+ String(end['col']*self.width+14) + "," + String(end['row']*self.height-35) +" "+ // last turn of horizontal-line going into the node
230
+ String(end['col']*self.width) + "," + String(end['row']*self.height-15)
169
231
  );
170
232
  }
171
233
  } else if(end['row']-start['row'] < 0) { // upwards
172
234
  if(num_lines > 1) {// ??? no idea
173
- line.attr("d", "M " + String(start['col']*width) + "," + String(start['row']*height-15) +" "+
174
- String(start['col']*width) + "," + String((max_line-1)*height+5) +" "+
175
- String(end['col']*width+20) + "," + String((max_line-1)*height+5) +" "+
176
- String(end['col']*width+20) + "," + String(end['row']*height+25)+" "+
177
- String(end['col']*width) + "," + String(end['row']*height-15)
235
+ line.attr("d", "M " + String(start['col']*self.width) + "," + String(start['row']*self.height-15) +" "+
236
+ String(start['col']*self.width) + "," + String((max_line-1)*self.height+5) +" "+
237
+ String(end['col']*self.width+20) + "," + String((max_line-1)*self.height+5) +" "+
238
+ String(end['col']*self.width+20) + "," + String(end['row']*self.height+25)+" "+
239
+ String(end['col']*self.width) + "," + String(end['row']*self.height-15)
178
240
  );
179
241
  } else {
180
- line.attr("d", "M " + String(start['col']*width) + "," + String(start['row']*height-15) +" "+
181
- String(end['col']*width+20) + "," + String(start['row']*height-15) +" "+
182
- String(end['col']*width+20) + "," + String(end['row']*height+25)+" "+
183
- String(end['col']*width) + "," + String(end['row']*height-15)
242
+ line.attr("d", "M " + String(start['col']*self.width) + "," + String(start['row']*self.height-15) +" "+
243
+ String(end['col']*self.width+20) + "," + String(start['row']*self.height-15) +" "+
244
+ String(end['col']*self.width+20) + "," + String(end['row']*self.height+25)+" "+
245
+ String(end['col']*self.width) + "," + String(end['row']*self.height-15)
184
246
  );
185
247
  }
186
248
  }
187
249
  // Seems to solve injection groups-line problem, but I guess it will caus problem when collapsing elements
188
250
  //if(group) {group.prepend(line);}
189
- //else
190
- {svg.container.append(line);}
251
+ //else
252
+ {self.svg.container.append(line);}
191
253
  } // }}}
192
254
  // }}}
193
255
  // Initialize {{{
@@ -195,17 +257,19 @@ function WfIllustrator(wf_adaptor) { // View {{{
195
257
  // }}}
196
258
  } // }}}
197
259
 
198
- // WfDescription:
260
+ // WfDescription:
199
261
  // Manages the description. Is is further able to add/remove elements from the controlflow description.
200
262
  function WfDescription(wf_adaptor, wf_illustrator) { // Model {{{
201
263
  // public variables
202
- var elements = this.elements = {};
264
+ this.elements = {}; // the rngs
265
+ this.source = null;
203
266
  // private variables
267
+ var self = this;
204
268
  var adaptor;
205
269
  var illustrator;
206
270
  var description;
207
271
  var id_counter = {};
208
- var update_illustrator = true;
272
+ var update_illustrator = true;
209
273
 
210
274
  // Generic Functions {{{
211
275
  this.set_description = function(desc, auto_update) { // public {{{
@@ -226,23 +290,34 @@ function WfDescription(wf_adaptor, wf_illustrator) { // Model {{{
226
290
  var gd = this.get_description = function() { // public {{{
227
291
  var serxml = $(description.get(0).documentElement).clone(true);
228
292
  serxml.removeAttr('svg-id');
293
+ serxml.removeAttr('svg-type');
294
+ serxml.removeAttr('svg-label');
229
295
  $('*[svg-id]',serxml).each(function(){
230
296
  $(this).removeAttr('svg-id');
231
297
  });
298
+ $('*[svg-type]',serxml).each(function(){
299
+ $(this).removeAttr('svg-type');
300
+ });
301
+ $('*[svg-label]',serxml).each(function(){
302
+ $(this).removeAttr('svg-label');
303
+ });
232
304
  return serxml.serializeXML();
233
305
  } // }}}
234
306
  this.get_node_by_svg_id = function(svg_id) { // {{{
235
307
  return $('[svg-id = \'' + svg_id + '\']', description);
236
308
  } // }}}
309
+ var context_eval = this.context_eval = function(what) { // {{{
310
+ return eval(what);
311
+ } // }}}
237
312
  var get_free_id = this.get_free_id = function() { // {{{
238
313
  var existing = new Array();
239
314
  $('*[id]', description).each(function(){existing.push($(this).attr('id'))});
240
315
  var id = 1;
241
316
  while ($.inArray('a' + id,existing) != -1) {
242
- id += 1;
317
+ id += 1;
243
318
  }
244
319
  return 'a' + id;
245
- } // }}}
320
+ } // }}}
246
321
  var update = this.update = function(svgid) { // {{{
247
322
  id_counter = {};
248
323
  if(update_illustrator){
@@ -250,27 +325,30 @@ function WfDescription(wf_adaptor, wf_illustrator) { // Model {{{
250
325
  var graph = parse(description.children('description').get(0), {'row':0,'col':0});
251
326
  illustrator.set_svg(graph);
252
327
  }
328
+
253
329
  var newn = $('*[new=true]',description);
254
330
  newn.removeAttr('new');
255
331
 
256
- $.each(newn,function(k,nn){
257
- if ($(nn).attr('svg-id') != undefined)
258
- adaptor.notify($(nn).attr('svg-id'));
259
- else if (svgid != undefined)
260
- adaptor.notify(svgid);
261
- });
332
+ if (newn.attr('svg-id') != undefined)
333
+ adaptor.notify(newn.attr('svg-id'));
334
+ else if (svgid != undefined)
335
+ adaptor.notify(svgid);
336
+ else if (newn.parent('[svg-id]').length > 0)
337
+ adaptor.notify(newn.parent('[svg-id]').attr('svg-id'));
338
+ else
339
+ console.info('Something went horribly wrong');
262
340
  } // }}}
263
341
  // }}}
264
342
  // Adaption functions {{{
265
343
  this.insert_after = function(new_node, target) { // {{{
266
344
  if ($.isArray(new_node)) {
267
345
  $.each(new_node,function(k,v){
268
- var nn = $X(v.replace(/###/,get_free_id()));
346
+ var nn = self.source(v);
269
347
  target.after(nn);
270
348
  nn.attr('new','true');
271
349
  });
272
350
  } else {
273
- var nn = $X(new_node.replace(/###/,get_free_id()));
351
+ var nn = self.source(new_node);
274
352
  target.after(nn);
275
353
  nn.attr('new','true');
276
354
  }
@@ -279,12 +357,12 @@ function WfDescription(wf_adaptor, wf_illustrator) { // Model {{{
279
357
  this.insert_first_into = function(new_node, target, selector) { // {{{
280
358
  if ($.isArray(new_node)) {
281
359
  $.each(new_node,function(k,v){
282
- var nn = $X(v.replace(/###/,get_free_id()));
360
+ var nn = self.source(v);
283
361
  target.prepend(nn);
284
362
  nn.attr('new','true');
285
363
  });
286
364
  } else {
287
- var nn = $X(new_node.replace(/###/,get_free_id()));
365
+ var nn = self.source(new_node);
288
366
  target.prepend(nn);
289
367
  nn.attr('new','true');
290
368
  }
@@ -293,12 +371,12 @@ function WfDescription(wf_adaptor, wf_illustrator) { // Model {{{
293
371
  this.insert_last_into = function(new_node, target, selector) { // {{{
294
372
  if ($.isArray(new_node)) {
295
373
  $.each(new_node,function(k,v){
296
- var nn = $X(v.replace(/###/,get_free_id()));
374
+ var nn = self.source(v);
297
375
  target.append(nn);
298
376
  nn.attr('new','true');
299
377
  });
300
378
  } else {
301
- var nn = $X(new_node.replace(/###/,get_free_id()));
379
+ var nn = self.source(new_node);
302
380
  target.append(nn);
303
381
  nn.attr('new','true');
304
382
  }
@@ -309,8 +387,11 @@ function WfDescription(wf_adaptor, wf_illustrator) { // Model {{{
309
387
  if(selector == undefined) {
310
388
  svgid = target.attr('svg-id');
311
389
  target.remove()
312
- } else {
390
+ } else {
313
391
  svgid = $(selector, target).attr('svg-id');
392
+ if (!svgid) {
393
+ svgid = target.attr('svg-id');
394
+ }
314
395
  $(selector, target).remove();
315
396
  }
316
397
  update(svgid);
@@ -322,15 +403,15 @@ function WfDescription(wf_adaptor, wf_illustrator) { // Model {{{
322
403
  var pos = jQuery.extend(true, {}, parent_pos);
323
404
  var max = {'row': 0,'col': 0};
324
405
  var prev = [parent_pos]; // connects parent with child(s), depending on the expansion
325
- var endnodes = [];
406
+ var endnodes = [];
326
407
  var root_expansion = illustrator.elements[root.tagName].expansion(root);
327
408
  var block = {'max':{}}; // e.g. {'max':{'row':0,'col':0}, 'endpoints':[]};
328
409
  var collapsed = false;
329
410
 
330
411
  var group = $X('<g class="group" xmlns="http://www.w3.org/2000/svg"/>');
331
412
 
332
- if(root_expansion == 'horizontal') pos.row++;
333
- if(illustrator.elements[root.tagName].col_shift(root) == true && root_expansion != 'horizontal') pos.col++;
413
+ if(root_expansion == 'horizontal') pos.row++;
414
+ if(illustrator.elements[root.tagName].col_shift(root) == true && root_expansion != 'horizontal') pos.col++;
334
415
 
335
416
  if(root.tagName == 'description') { // First parsing {{{
336
417
  pos.row++;
@@ -340,7 +421,7 @@ function WfDescription(wf_adaptor, wf_illustrator) { // Model {{{
340
421
  illustrator.draw.draw_symbol('start', 'start', 'description', 'START', pos.row, pos.col, group);
341
422
  } // }}}
342
423
 
343
- $(root).children().each(function() {
424
+ $(root).children().each(function() {
344
425
  var tname = this.tagName;
345
426
 
346
427
  // Set SVG-ID {{{
@@ -348,13 +429,13 @@ function WfDescription(wf_adaptor, wf_illustrator) { // Model {{{
348
429
  if(id_counter[tname] == undefined) id_counter[tname] = -1;
349
430
  $(this).attr('svg-id', tname + '_' + (++id_counter[tname]));
350
431
  $(this).attr('svg-label', '');
351
- } else {
432
+ } else {
352
433
  $(this).attr('svg-id', $(this).attr('id'));
353
434
  if ($(this).children('parameters').length > 0) {
354
435
  $(this).attr('svg-label', $('label',$(this).children('parameters')).text().replace(/^['"]/,'').replace(/['"]$/,''));
355
- } else {
436
+ } else {
356
437
  $(this).attr('svg-label', '');
357
- }
438
+ }
358
439
  } // }}}
359
440
  // Calculate next position {{{
360
441
  if($(this).attr('collapsed') == undefined || $(this).attr('collapsed') == 'false') { collapsed = false; }
@@ -362,14 +443,14 @@ function WfDescription(wf_adaptor, wf_illustrator) { // Model {{{
362
443
  if(root_expansion == 'vertical') pos.row++;
363
444
  if(root_expansion == 'horizontal') pos.col++;
364
445
  if(illustrator.elements[tname] != undefined && illustrator.elements[tname].type == 'complex' && !collapsed) {
365
- if(illustrator.elements[tname] != undefined && !illustrator.elements[tname].svg()) pos.row--;
366
- // TODO: Remaining problem is the order inside the svg. Thats why the connection is above the icon
446
+ if(illustrator.elements[tname] != undefined && !illustrator.elements[tname].svg) pos.row--;
447
+ // TODO: Remaining problem is the order inside the svg. Thats why the connection is above the icon
367
448
  block = parse(this, jQuery.extend(true, {}, pos));
368
449
  group.append(block.svg);
369
- block.svg.attr('id', 'group-' + $(this).attr('svg-id'));
370
- if(illustrator.elements[tname].endnodes == 'aggregate') endnodes = []; // resets endpoints e.g. potential preceding primitive
450
+ block.svg.attr('id', 'group-' + $(this).attr('svg-id'));
451
+ if(illustrator.elements[tname].endnodes == 'aggregate') endnodes = []; // resets endpoints e.g. potential preceding primitive
371
452
  } else {
372
- if(illustrator.elements[tname] != undefined && illustrator.elements[tname].type == 'primitive' && illustrator.elements[tname].svg()) { // This enables "invisble" elements, by returning false in the SVG function (e.g. constraints)
453
+ if(illustrator.elements[tname] != undefined && illustrator.elements[tname].type == 'primitive' && illustrator.elements[tname].svg) { // This enables "invisble" elements, by returning undefined in the SVG function (e.g. constraints)
373
454
  block.max.row = pos.row;
374
455
  block.max.col = pos.col;
375
456
  block.endnodes = (!collapsed ? [pos] : [jQuery.extend(true, {}, pos)]);
@@ -383,27 +464,28 @@ function WfDescription(wf_adaptor, wf_illustrator) { // Model {{{
383
464
  else if(typeof illustrator.elements[tname].resolve_symbol == 'function') {sym_name = illustrator.elements[tname].resolve_symbol(this);}
384
465
  else if(typeof illustrator.elements[tname].resolve_symbol == 'string') {sym_name = illustrator.elements[tname].resolve_symbol;}
385
466
  else {sym_name = tname;}
386
- if((illustrator.elements[tname] && illustrator.elements[tname].svg()) || sym_name == 'unknown') {
467
+ $(this).attr('svg-type',sym_name);
468
+ if((illustrator.elements[tname] && illustrator.elements[tname].svg) || sym_name == 'unknown') {
387
469
  illustrator.draw.draw_symbol(tname, sym_name, $(this).attr('svg-id'), $(this).attr('svg-label'), pos.row, pos.col, block.svg).addClass(illustrator.elements[tname] ? illustrator.elements[tname].type : 'primitive unknown');
388
470
  } else { console.log("no icon "+ tname);}
389
471
  if(illustrator.elements[tname] && illustrator.elements[tname].border) illustrator.draw.draw_border($(this).attr('svg-id'), pos, block.max, block.svg);
390
472
  if(illustrator.elements[tname] && illustrator.elements[tname].type == 'complex') illustrator.draw.draw_tile($(this).attr('svg-id'), pos, block.max, block.svg);
391
473
  // }}}
392
474
  // Calculate Connection {{{
393
- if(illustrator.elements[tname] != undefined && illustrator.elements[tname].closeblock) { // Close Block if element e.g. loop
475
+ if(illustrator.elements[tname] != undefined && illustrator.elements[tname].closeblock) { // Close Block if element e.g. loop
394
476
  for(node in block.endnodes) illustrator.draw.draw_connection(group, block.endnodes[node], pos, block.max.row+1, block.endnodes.length, true);
395
477
  }
396
- if(illustrator.elements[tname] != undefined && illustrator.elements[tname].endnodes != 'this') {
397
- for(i in block.endnodes) endnodes.push(block.endnodes[i]); // collects all endpoints from different childs e.g. alternatives from choose
478
+ if(illustrator.elements[tname] != undefined && illustrator.elements[tname].endnodes != 'this') {
479
+ for(i in block.endnodes) endnodes.push(block.endnodes[i]); // collects all endpoints from different childs e.g. alternatives from choose
398
480
  } else { endnodes = [jQuery.extend(true, {}, pos)]; } // sets this element as only endpoint (aggreagte)
399
481
  if(prev[0].row == 0 || prev[0].col == 0) { // this enforces the connection from description to the first element
400
482
  illustrator.draw.draw_connection(group, { row: 1, col: 1 }, pos, null, null, true);
401
483
  } else {
402
- if ($.inArray(tname,noarrow) == -1)
484
+ if ($.inArray(tname,illustrator.noarrow) == -1)
403
485
  for(node in prev) illustrator.draw.draw_connection(group, prev[node], pos, null, null, true);
404
- else
486
+ else
405
487
  for(node in prev) illustrator.draw.draw_connection(group, prev[node], pos, null, null, false);
406
- }
488
+ }
407
489
  // }}}
408
490
  // Prepare next iteration {{{
409
491
  if(root_expansion == 'vertical') { prev = jQuery.extend(true, {}, endnodes); pos.row = block.max.row;} // covers e.g. input's for alternative, parallel_branch, ... everything with horizontal expansion
@@ -427,4 +509,4 @@ function WfDescription(wf_adaptor, wf_illustrator) { // Model {{{
427
509
  adaptor = wf_adaptor;
428
510
  illustrator = wf_illustrator;
429
511
  // }}}
430
- } // }}}
512
+ } // }}}