cpee 2.0.19 → 2.0.20

Sign up to get free protection for your applications and to get access to all the features.
Files changed (236) hide show
  1. checksums.yaml +4 -4
  2. data/cockpit/css/wfadaptor.css +17 -0
  3. data/cockpit/js/instance.js +0 -1
  4. data/cockpit/js_libs.zip +0 -0
  5. data/cockpit/themes/model/rngs/call.rng +2 -1
  6. data/cockpit/themes/model/rngs/callmanipulate.rng +2 -1
  7. data/cockpit/themes/model/theme.js +1 -1
  8. data/cpee.gemspec +2 -2
  9. data/lib/cpee/controller.rb +6 -3
  10. data/lib/cpee/implementation.rb +23 -8
  11. data/lib/cpee/implementation_notifications.rb +1 -1
  12. data/lib/cpee/persistence.rb +2 -1
  13. data/lib/cpee/redis.rb +57 -0
  14. data/server/routing/end.rb +16 -4
  15. data/server/routing/forward-events.rb +19 -7
  16. data/server/routing/forward-votes.rb +19 -7
  17. data/server/routing/persist.rb +26 -14
  18. data/tools/cpee +5 -5
  19. data/tools/test/README +4 -0
  20. data/tools/test/config.json +3 -0
  21. data/tools/test/contrib/graph_example.svg +1166 -0
  22. data/tools/test/contrib/legend.svg +817 -0
  23. data/tools/test/contrib/symbols.svg +224 -0
  24. data/tools/test/contrib/transformation1.xsl +264 -0
  25. data/tools/test/contrib/transformation2.xsl +10 -0
  26. data/tools/test/contrib/tree_example.svg +788 -0
  27. data/tools/test/css/model.css +24 -0
  28. data/tools/test/css/track.css +60 -0
  29. data/tools/test/css/ui.css +214 -0
  30. data/tools/test/css/wfadaptor.css +422 -0
  31. data/tools/test/edit.html +258 -0
  32. data/tools/test/graph.html +69 -0
  33. data/tools/test/index.html +258 -0
  34. data/tools/test/js/details.js +109 -0
  35. data/tools/test/js/instance.js +1344 -0
  36. data/tools/test/js/model.js +41 -0
  37. data/tools/test/js/parameters.js +82 -0
  38. data/tools/test/js/track.js +18 -0
  39. data/tools/test/js/ui.js +104 -0
  40. data/tools/test/js/wfadaptor.js +763 -0
  41. data/tools/test/js_libs.zip +0 -0
  42. data/tools/test/js_libs/Makefile +2 -0
  43. data/tools/test/js_libs/ansi_up.js +333 -0
  44. data/tools/test/js_libs/console.js +80 -0
  45. data/tools/test/js_libs/custommenu.css +84 -0
  46. data/tools/test/js_libs/custommenu.js +104 -0
  47. data/tools/test/js_libs/experiments1/relaxngui.css +185 -0
  48. data/tools/test/js_libs/experiments1/relaxngui.js +488 -0
  49. data/tools/test/js_libs/experiments1/rngtest9.html +60 -0
  50. data/tools/test/js_libs/experiments1/rngtest9.rng +35 -0
  51. data/tools/test/js_libs/experiments1/rngtest9.xml +8 -0
  52. data/tools/test/js_libs/jquery-2.2.4.min.js +4 -0
  53. data/tools/test/js_libs/jquery-3.2.1.min.js +4 -0
  54. data/tools/test/js_libs/jquery-3.3.1.min.js +2 -0
  55. data/tools/test/js_libs/jquery.browser.js +40 -0
  56. data/tools/test/js_libs/jquery.caret.min.js +10 -0
  57. data/tools/test/js_libs/jquery.cookie.js +117 -0
  58. data/tools/test/js_libs/jquery.min.js +1 -0
  59. data/tools/test/js_libs/jquery.svg.min.js +6 -0
  60. data/tools/test/js_libs/jquery.svgdom.min.js +6 -0
  61. data/tools/test/js_libs/markdown.min.js +1 -0
  62. data/tools/test/js_libs/parsequery.js +21 -0
  63. data/tools/test/js_libs/printf.js +368 -0
  64. data/tools/test/js_libs/relaxngui.css +213 -0
  65. data/tools/test/js_libs/relaxngui.js +543 -0
  66. data/tools/test/js_libs/strftime.min.js +1 -0
  67. data/tools/test/js_libs/tests/dataelements.html +59 -0
  68. data/tools/test/js_libs/tests/dataelements.rng +8 -0
  69. data/tools/test/js_libs/tests/dataelements.xml +3 -0
  70. data/tools/test/js_libs/tests/relaxngui.css +203 -0
  71. data/tools/test/js_libs/tests/relaxngui.js +502 -0
  72. data/tools/test/js_libs/tests/rngtest1.html +66 -0
  73. data/tools/test/js_libs/tests/rngtest1.rng +147 -0
  74. data/tools/test/js_libs/tests/rngtest1.xml +13 -0
  75. data/tools/test/js_libs/tests/rngtest2.html +60 -0
  76. data/tools/test/js_libs/tests/rngtest2.rng +6 -0
  77. data/tools/test/js_libs/tests/rngtest2.xml +3 -0
  78. data/tools/test/js_libs/tests/rngtest3.html +60 -0
  79. data/tools/test/js_libs/tests/rngtest3.rng +23 -0
  80. data/tools/test/js_libs/tests/rngtest3.xml +9 -0
  81. data/tools/test/js_libs/tests/rngtest4.html +60 -0
  82. data/tools/test/js_libs/tests/rngtest4.rng +19 -0
  83. data/tools/test/js_libs/tests/rngtest4.xml +12 -0
  84. data/tools/test/js_libs/tests/rngtest5.html +60 -0
  85. data/tools/test/js_libs/tests/rngtest5.rng +75 -0
  86. data/tools/test/js_libs/tests/rngtest5.xml +40 -0
  87. data/tools/test/js_libs/tests/rngtest6.html +60 -0
  88. data/tools/test/js_libs/tests/rngtest6.rng +24 -0
  89. data/tools/test/js_libs/tests/rngtest6.xml +6 -0
  90. data/tools/test/js_libs/tests/rngtest8.html +60 -0
  91. data/tools/test/js_libs/tests/rngtest8.rng +13 -0
  92. data/tools/test/js_libs/tests/rngtest8.xml +2 -0
  93. data/tools/test/js_libs/tests/rngtest9.html +60 -0
  94. data/tools/test/js_libs/tests/rngtest9.rng +31 -0
  95. data/tools/test/js_libs/tests/rngtest9.xml +8 -0
  96. data/tools/test/js_libs/ui.css +333 -0
  97. data/tools/test/js_libs/ui.html +168 -0
  98. data/tools/test/js_libs/ui.js +177 -0
  99. data/tools/test/js_libs/underscore.min.js +27 -0
  100. data/tools/test/js_libs/util.js +81 -0
  101. data/tools/test/js_libs/vkbeautify.0.99.00.beta.js +358 -0
  102. data/tools/test/js_libs/vkbeautify.js +1 -0
  103. data/tools/test/js_libs/webcomponents.min.js +196 -0
  104. data/tools/test/model.html +192 -0
  105. data/tools/test/rngs/attributes.rng +8 -0
  106. data/tools/test/rngs/dataelements.rng +8 -0
  107. data/tools/test/rngs/endpoints.rng +8 -0
  108. data/tools/test/templates.legacy/Async.xml +46 -0
  109. data/tools/test/templates.legacy/BCO.xml +70 -0
  110. data/tools/test/templates.legacy/BCS.xml +70 -0
  111. data/tools/test/templates.legacy/Centurio.xml +75 -0
  112. data/tools/test/templates.legacy/Concurrent.xml +40 -0
  113. data/tools/test/templates.legacy/Coopis Testset.xml +76 -0
  114. data/tools/test/templates.legacy/Endpoints and Data Manipulation.xml +30 -0
  115. data/tools/test/templates.legacy/ICSOC Testset.xml +95 -0
  116. data/tools/test/templates.legacy/Infinity.xml +28 -0
  117. data/tools/test/templates.legacy/Lego Boxer.xml +31 -0
  118. data/tools/test/templates.legacy/Lego Conveyor.xml +31 -0
  119. data/tools/test/templates.legacy/Lego Crane.xml +87 -0
  120. data/tools/test/templates.legacy/Lego Ejector.xml +55 -0
  121. data/tools/test/templates.legacy/Lego Full.xml +142 -0
  122. data/tools/test/templates.legacy/Lego Liddy.xml +40 -0
  123. data/tools/test/templates.legacy/Lego Plate.xml +31 -0
  124. data/tools/test/templates.legacy/Lego Transporter.xml +43 -0
  125. data/tools/test/templates.legacy/Lego_Part_1.xml +85 -0
  126. data/tools/test/templates.legacy/LgLinear.xml +65 -0
  127. data/tools/test/templates.legacy/Linear.xml +77 -0
  128. data/tools/test/templates.legacy/Log.xml +117 -0
  129. data/tools/test/templates.legacy/Mangler 1.xml +87 -0
  130. data/tools/test/templates.legacy/Mangler 2.xml +103 -0
  131. data/tools/test/templates.legacy/Manuel Labels.xml +55 -0
  132. data/tools/test/templates.legacy/Promise.xml +275 -0
  133. data/tools/test/templates.legacy/SOPROMO Test Sonification.xml +83 -0
  134. data/tools/test/templates.legacy/Subprocess.xml +56 -0
  135. data/tools/test/templates.legacy/Syncing P34 1.xml +77 -0
  136. data/tools/test/templates.legacy/Syncing P34 2.xml +77 -0
  137. data/tools/test/templates.legacy/Syncing P34 3.xml +77 -0
  138. data/tools/test/templates.legacy/Syncing P34.xml +77 -0
  139. data/tools/test/templates.legacy/TEST - Bad Loop.xml +173 -0
  140. data/tools/test/templates.legacy/TEST - Wrong Positions.xml +174 -0
  141. data/tools/test/templates.legacy/Take_5.xml +48 -0
  142. data/tools/test/templates.legacy/Update.xml +32 -0
  143. data/tools/test/templates.legacy/Worklist Parallel.xml +104 -0
  144. data/tools/test/templates.legacy/Worklist Test CPEE.xml +40 -0
  145. data/tools/test/templates.legacy/Worklist Test.xml +42 -0
  146. data/tools/test/templates.legacy/Worklist Test2.xml +43 -0
  147. data/tools/test/templates.legacy/convert_cpee2.rb +15 -0
  148. data/tools/test/templates.legacy/convert_preset.rb +32 -0
  149. data/tools/test/templates.legacy/testsets.xml +37 -0
  150. data/tools/test/templates.legacy/transformations.xml +4 -0
  151. data/tools/test/templates/Coopis 2010.xml +76 -0
  152. data/tools/test/templates/IUPC arXiv:1104.3609 P34 1.xml +77 -0
  153. data/tools/test/templates/IUPC arXiv:1104.3609 P34 2.xml +77 -0
  154. data/tools/test/templates/IUPC arXiv:1104.3609 P34 3.xml +77 -0
  155. data/tools/test/templates/Track Test Local.xml +82 -0
  156. data/tools/test/templates/Track Test.xml +82 -0
  157. data/tools/test/templates/UR-VUE 2020 Manual Adjust.xml +182 -0
  158. data/tools/test/templates/UR-VUE 2020 Solution Baseline.xml +203 -0
  159. data/tools/test/templates/UR-VUE 2020 Solution NN.xml +197 -0
  160. data/tools/test/templates/UR-VUE 2020 Solution View.xml +151 -0
  161. data/tools/test/templates/UR-VUE 2020.xml +26 -0
  162. data/tools/test/templates/Worklist.xml +42 -0
  163. data/tools/test/templates/instantiate.local/Take_Sub.xml +59 -0
  164. data/tools/test/templates/instantiate/Take_Perf.xml +46 -0
  165. data/tools/test/templates/instantiate/Take_Sub.xml +58 -0
  166. data/tools/test/templates/instantiate/Take_X.xml +48 -0
  167. data/tools/test/themes/compact/theme.js +1285 -0
  168. data/tools/test/themes/diana/theme.js +1650 -0
  169. data/tools/test/themes/extended/theme.js +1325 -0
  170. data/tools/test/themes/model/rngs/alternative.rng +1 -0
  171. data/tools/test/themes/model/rngs/call.rng +67 -0
  172. data/tools/test/themes/model/rngs/callmanipulate.rng +72 -0
  173. data/tools/test/themes/model/rngs/choose.rng +1 -0
  174. data/tools/test/themes/model/rngs/critical.rng +1 -0
  175. data/tools/test/themes/model/rngs/escape.rng +1 -0
  176. data/tools/test/themes/model/rngs/group.rng +1 -0
  177. data/tools/test/themes/model/rngs/loop.rng +1 -0
  178. data/tools/test/themes/model/rngs/manipulate.rng +1 -0
  179. data/tools/test/themes/model/rngs/otherwise.rng +1 -0
  180. data/tools/test/themes/model/rngs/parallel.rng +1 -0
  181. data/tools/test/themes/model/rngs/parallel_branch.rng +1 -0
  182. data/tools/test/themes/model/rngs/scripts.rng +7 -0
  183. data/tools/test/themes/model/rngs/stop.rng +1 -0
  184. data/tools/test/themes/model/rngs/terminate.rng +1 -0
  185. data/tools/test/themes/model/theme.js +1268 -0
  186. data/tools/test/themes/packed/theme.js +1286 -0
  187. data/tools/test/themes/preset/rngs/alternative.rng +25 -0
  188. data/tools/test/themes/preset/rngs/call.rng +122 -0
  189. data/tools/test/themes/preset/rngs/callmanipulate.rng +145 -0
  190. data/tools/test/themes/preset/rngs/choose.rng +14 -0
  191. data/tools/test/themes/preset/rngs/closed_loop.rng +62 -0
  192. data/tools/test/themes/preset/rngs/closed_loop_cancel.rng +5 -0
  193. data/tools/test/themes/preset/rngs/closed_loop_control.rng +31 -0
  194. data/tools/test/themes/preset/rngs/closed_loop_measuring.rng +12 -0
  195. data/tools/test/themes/preset/rngs/critical.rng +5 -0
  196. data/tools/test/themes/preset/rngs/escape.rng +1 -0
  197. data/tools/test/themes/preset/rngs/group.rng +3 -0
  198. data/tools/test/themes/preset/rngs/loop.rng +22 -0
  199. data/tools/test/themes/preset/rngs/manipulate.rng +9 -0
  200. data/tools/test/themes/preset/rngs/otherwise.rng +22 -0
  201. data/tools/test/themes/preset/rngs/parallel.rng +21 -0
  202. data/tools/test/themes/preset/rngs/parallel_branch.rng +8 -0
  203. data/tools/test/themes/preset/rngs/scripts.rng +23 -0
  204. data/tools/test/themes/preset/rngs/stop.rng +5 -0
  205. data/tools/test/themes/preset/rngs/terminate.rng +1 -0
  206. data/tools/test/themes/preset/symbols/alternative.svg +5 -0
  207. data/tools/test/themes/preset/symbols/arrow.svg +3 -0
  208. data/tools/test/themes/preset/symbols/call.svg +6 -0
  209. data/tools/test/themes/preset/symbols/callmanipulate.svg +8 -0
  210. data/tools/test/themes/preset/symbols/choose.svg +5 -0
  211. data/tools/test/themes/preset/symbols/choose_exclusive.svg +5 -0
  212. data/tools/test/themes/preset/symbols/choose_inclusive.svg +4 -0
  213. data/tools/test/themes/preset/symbols/closed_loop.svg +5 -0
  214. data/tools/test/themes/preset/symbols/closed_loop_cancel.svg +5 -0
  215. data/tools/test/themes/preset/symbols/closed_loop_control.svg +5 -0
  216. data/tools/test/themes/preset/symbols/closed_loop_measuring.svg +6 -0
  217. data/tools/test/themes/preset/symbols/complex.svg +8 -0
  218. data/tools/test/themes/preset/symbols/critical.svg +4 -0
  219. data/tools/test/themes/preset/symbols/end.svg +3 -0
  220. data/tools/test/themes/preset/symbols/escape.svg +5 -0
  221. data/tools/test/themes/preset/symbols/event_end.svg +3 -0
  222. data/tools/test/themes/preset/symbols/loop.svg +5 -0
  223. data/tools/test/themes/preset/symbols/manipulate.svg +4 -0
  224. data/tools/test/themes/preset/symbols/otherwise.svg +5 -0
  225. data/tools/test/themes/preset/symbols/parallel.svg +5 -0
  226. data/tools/test/themes/preset/symbols/parallel_branch.svg +5 -0
  227. data/tools/test/themes/preset/symbols/parallel_branch_compact.svg +4 -0
  228. data/tools/test/themes/preset/symbols/parallel_branch_event.svg +14 -0
  229. data/tools/test/themes/preset/symbols/parallel_branch_normal.svg +5 -0
  230. data/tools/test/themes/preset/symbols/scripts.svg +4 -0
  231. data/tools/test/themes/preset/symbols/start.svg +3 -0
  232. data/tools/test/themes/preset/symbols/stop.svg +5 -0
  233. data/tools/test/themes/preset/symbols/terminate.svg +4 -0
  234. data/tools/test/themes/preset/theme.js +1287 -0
  235. data/tools/test/track.html +142 -0
  236. metadata +221 -2
@@ -0,0 +1,46 @@
1
+ <testset xmlns="http://cpee.org/ns/properties/2.0">
2
+ <dataelements>
3
+ <time>5</time>
4
+ </dataelements>
5
+ <handlerwrapper>DefaultHandlerWrapper</handlerwrapper>
6
+ <endpoints>
7
+ <fetch>https://cpee.org/perf</fetch>
8
+ </endpoints>
9
+ <positions/>
10
+ <description>
11
+ <description xmlns="http://cpee.org/ns/description/1.0">
12
+ <call id="a1" endpoint="fetch">
13
+ <parameters>
14
+ <label/>
15
+ <method>:get</method>
16
+ <arguments/>
17
+ </parameters>
18
+ <_timing>
19
+ <_timing_min/>
20
+ <_timing_max/>
21
+ <_timing_avg/>
22
+ </_timing>
23
+ <_notes>
24
+ <_notes_general/>
25
+ <_attachments/>
26
+ </_notes>
27
+ <code>
28
+ <finalize output="result"/>
29
+ <update output="result"/>
30
+ </code>
31
+ </call>
32
+ </description>
33
+ </description>
34
+ <transformation>
35
+ <description type="copy"/>
36
+ <dataelements type="none"/>
37
+ <endpoints type="none"/>
38
+ </transformation>
39
+ <attributes>
40
+ <info/>
41
+ <modeltype>CPEE</modeltype>
42
+ <theme>default</theme>
43
+ <customer>pilotfabrik</customer>
44
+ <status>development</status>
45
+ </attributes>
46
+ </testset>
@@ -0,0 +1,58 @@
1
+ <testset xmlns="http://cpee.org/ns/properties/2.0">
2
+ <dataelements/>
3
+ <handlerwrapper>DefaultHandlerWrapper</handlerwrapper>
4
+ <endpoints>
5
+ <start_url>https://cpee.org/flow/start/url/</start_url>
6
+ <timeout>https://cpee.org/services/timeout.php</timeout>
7
+ </endpoints>
8
+ <positions/>
9
+ <description>
10
+ <description xmlns="http://cpee.org/ns/description/1.0">
11
+ <call id="a1" endpoint="start_url">
12
+ <parameters>
13
+ <label>Start</label>
14
+ <method>:post</method>
15
+ <arguments>
16
+ <behavior>wait_running</behavior>
17
+ <url>https://cpee.org/flow/templates/instantiate/Take_X.xml</url>
18
+ <init/>
19
+ <endpoints/>
20
+ <stream/>
21
+ </arguments>
22
+ <stream>
23
+ <sensors/>
24
+ <aggregators/>
25
+ <costs/>
26
+ </stream>
27
+ <report>
28
+ <url/>
29
+ </report>
30
+ </parameters>
31
+ <annotations>
32
+ <_timing>
33
+ <_timing_wait/>
34
+ <_timing_threshold/>
35
+ <_timing_min/>
36
+ <_timing_max/>
37
+ <_timing_avg/>
38
+ </_timing>
39
+ <_notes>
40
+ <_notes_general/>
41
+ </_notes>
42
+ </annotations>
43
+ </call>
44
+ </description>
45
+ </description>
46
+ <transformation>
47
+ <description type="copy"/>
48
+ <dataelements type="none"/>
49
+ <endpoints type="none"/>
50
+ </transformation>
51
+ <attributes>
52
+ <info/>
53
+ <modeltype>CPEE</modeltype>
54
+ <theme>default</theme>
55
+ <customer>pilotfabrik</customer>
56
+ <status>development</status>
57
+ </attributes>
58
+ </testset>
@@ -0,0 +1,48 @@
1
+ <testset xmlns="http://cpee.org/ns/properties/2.0">
2
+ <dataelements>
3
+ <time>15</time>
4
+ </dataelements>
5
+ <handlerwrapper>DefaultHandlerWrapper</handlerwrapper>
6
+ <endpoints>
7
+ <timeout>https://cpee.org/services/timeout.php</timeout>
8
+ </endpoints>
9
+ <positions/>
10
+ <description>
11
+ <description xmlns="http://cpee.org/ns/description/1.0">
12
+ <call id="a1" endpoint="timeout">
13
+ <parameters>
14
+ <label/>
15
+ <method>:get</method>
16
+ <arguments>
17
+ <timeout>!data.time</timeout>
18
+ </arguments>
19
+ </parameters>
20
+ <_timing>
21
+ <_timing_min/>
22
+ <_timing_max/>
23
+ <_timing_avg/>
24
+ </_timing>
25
+ <_notes>
26
+ <_notes_general/>
27
+ <_attachments/>
28
+ </_notes>
29
+ <code>
30
+ <finalize output="result">data.duration = data.time</finalize>
31
+ <update output="result"/>
32
+ </code>
33
+ </call>
34
+ </description>
35
+ </description>
36
+ <transformation>
37
+ <description type="copy"/>
38
+ <dataelements type="none"/>
39
+ <endpoints type="none"/>
40
+ </transformation>
41
+ <attributes>
42
+ <info/>
43
+ <modeltype>CPEE</modeltype>
44
+ <theme>default</theme>
45
+ <customer>pilotfabrik</customer>
46
+ <status>development</status>
47
+ </attributes>
48
+ </testset>
@@ -0,0 +1,1285 @@
1
+ function WFAdaptorManifestation(adaptor) {
2
+ var self = this;
3
+
4
+ this.adaptor = adaptor;
5
+ this.resources = {};
6
+ this.elements = {};
7
+ this.events = {};
8
+ this.compact = false;
9
+ this.striped = false;
10
+ this.endpoints = {};
11
+
12
+ //{{{ transform the details data to description parts based on rng
13
+ this.source = function(base,opts) {
14
+ if (base[0].namespaceURI == "http://relaxng.org/ns/structure/1.0") {
15
+ $('#relaxngworker').empty();
16
+ var rngw = new RelaxNGui(base,$('#relaxngworker'),self.adaptor.description.context_eval);
17
+ var nnew = $(rngw.save().documentElement);
18
+ nnew.attr('trans-xmlns','http://cpee.org/ns/description/1.0');
19
+ var ntxt = nnew.serializeXML();
20
+ ntxt = ntxt.replace(/trans-xmlns/,'xmlns');
21
+
22
+ return($X(ntxt));
23
+ } else {
24
+ if (opts && opts == 'clone') {
25
+ base = base.clone();
26
+ if (base.attr('id')) {
27
+ base.attr('id',self.adaptor.description.get_free_id());
28
+ }
29
+ base.find('*[id]').each(function(k,v){
30
+ $(v).attr('id',self.adaptor.description.get_free_id(base));
31
+ });
32
+ }
33
+ return base;
34
+ }
35
+ }; //}}}
36
+ //{{{ Return the svgid for the selected task
37
+ this.selected = function(){
38
+ var svgid = 'unknown';
39
+ _.each(self.adaptor.illustrator.get_elements(),function(value,key) {
40
+ if ($(value).hasClass('selected')) {
41
+ svgid = $(value).attr('element-id');
42
+ }
43
+ });
44
+ return svgid;
45
+ }; //}}}
46
+ //{{{ Return the svgids for all marked tasks
47
+ this.marked = function(){
48
+ var svgid = [];
49
+ _.each(self.adaptor.illustrator.get_elements(),function(value,key) {
50
+ if ($(value).hasClass('marked')) {
51
+ svgid.push($(value).attr('element-id'));
52
+ }
53
+ });
54
+ return svgid;
55
+ }; //}}}
56
+ //{{{ Render the details from rng (right hand side of graph tab)
57
+ this.update_details = function(svgid){
58
+ var tab = $('#dat_details');
59
+ var node = self.adaptor.description.get_node_by_svg_id(svgid).get(0);
60
+ tab.empty();
61
+ if (self.adaptor.description.elements[$(node).attr('svg-subtype')]) {
62
+ save['details_target'] = { 'svgid': svgid, 'model': self.adaptor.description };
63
+ var rng = self.adaptor.description.elements[$(node).attr('svg-subtype')].clone();
64
+ if (save['endpoints_cache'][$(node).attr('endpoint')] && save['endpoints_cache'][$(node).attr('endpoint')].schema) {
65
+ var schema = save['endpoints_cache'][$(node).attr('endpoint')].schema.documentElement;
66
+ $(rng).find(' > element[name="parameters"] > element[name="arguments"]').replaceWith($(schema).clone());
67
+ }
68
+ if (save['endpoints_list'][$(node).attr('endpoint')] && (!save['endpoints_list'][$(node).attr('endpoint')].startsWith('http') || save['endpoints_list'][$(node).attr('endpoint')].match(/^https?-/))) {
69
+ $(rng).find(' > element[name="parameters"] > element[name="method"]').remove();
70
+ }
71
+ save['details'] = new RelaxNGui(rng,tab,self.adaptor.description.context_eval,true);
72
+ save['details'].content(node);
73
+ format_visual_forms();
74
+ }
75
+ }; //}}}
76
+
77
+ function copyOrMove(menu,group,xml_node,mode) { //{{{
78
+ var markymark = _.uniq(self.marked());
79
+ var check1 = [];
80
+ var check2 = [];
81
+ $(markymark).each(function(key,svgid){
82
+ var node = self.adaptor.description.get_node_by_svg_id(svgid);
83
+ check1.push($(node).attr('svg-type'));
84
+ });
85
+ $(group).each(function(key,value){
86
+ check2.push(value.type);
87
+ });
88
+
89
+ if (markymark.length > 0 && _.uniq(check1).length == _.intersection(check1,check2).length) {
90
+ var nodes = [];
91
+ $(markymark).each(function(key,svgid){
92
+ var node = self.adaptor.description.get_node_by_svg_id(svgid);
93
+ nodes.unshift(node);
94
+ });
95
+
96
+ var iconm = self.resources['arrow'].clone();
97
+ var iconc = self.resources['arrow'].clone();
98
+ iconm.children('.rfill').addClass('menu');
99
+ menu.push(
100
+ {
101
+ 'label': '<em>Move Marked Elements</em>',
102
+ 'function_call': mode,
103
+ 'menu_icon': iconm,
104
+ 'type': undefined,
105
+ 'params': [nodes, xml_node]
106
+ },
107
+ {
108
+ 'label': '<em>Copy Marked Elements</em>',
109
+ 'function_call': mode,
110
+ 'menu_icon': iconc,
111
+ 'type': undefined,
112
+ 'params': [nodes, xml_node, 'clone']
113
+ }
114
+ );
115
+ }
116
+ } //}}}
117
+
118
+ // Events
119
+ this.events.mousedown = function(svgid, e, child, sibling) { // {{{
120
+ if(e.button == 0) { // left-click
121
+ } else if(e.button == 1) { // middle-click
122
+ } else if(e.button == 2) { // right-click
123
+ if (save['state'] != "ready" && save['state'] != "stopped") { return false; }
124
+
125
+ var xml_node = self.adaptor.description.get_node_by_svg_id(svgid);
126
+ var group = null;
127
+ var menu = {};
128
+
129
+ if (child) {
130
+ group = self.elements[xml_node.get(0).tagName].permissible_children(xml_node,'into');
131
+ if(group.length > 0) {
132
+ menu['Insert into'] = group;
133
+ copyOrMove(menu['Insert into'],group,xml_node,self.adaptor.description.insert_first_into);
134
+ }
135
+ if (self.elements[xml_node.get(0).tagName].permissible_children_expert) {
136
+ group = self.elements[xml_node.get(0).tagName].permissible_children_expert(xml_node,'into');
137
+ if(group.length > 0) {
138
+ menu['Insert into (Experts Only!)'] = group;
139
+ copyOrMove(menu['Insert into (Experts Only!)'],group,xml_node,self.adaptor.description.insert_first_into);
140
+ }
141
+ }
142
+ }
143
+ if (sibling) {
144
+ group = self.elements[xml_node.parent().get(0).tagName].permissible_children(xml_node,'after');
145
+ if(group.length > 0) {
146
+ menu['Insert after'] = group;
147
+ copyOrMove(menu['Insert after'],group,xml_node,self.adaptor.description.insert_after);
148
+ }
149
+ if (self.elements[xml_node.parent().get(0).tagName].permissible_children_expert) {
150
+ group = self.elements[xml_node.parent().get(0).tagName].permissible_children_expert(xml_node,'after');
151
+ if(group.length > 0) {
152
+ menu['Insert after (Experts Only!)'] = group;
153
+ copyOrMove(menu['Insert after (Experts Only!)'],group,xml_node,self.adaptor.description.insert_after);
154
+ }
155
+ }
156
+ }
157
+
158
+ if(xml_node.get(0).tagName != 'description' && !self.elements[xml_node.get(0).tagName].neverdelete) {
159
+ var icon = self.elements[xml_node.get(0).tagName].illustrator.svg.clone();
160
+ icon.children('.rfill').addClass('menu');
161
+ menu['Delete'] = [{
162
+ 'label': 'Remove Element',
163
+ 'function_call': function(selector,target,selected){ self.adaptor.description.remove(selector,target); self.adaptor.illustrator.get_label_by_svg_id(selected).addClass('selected'); },
164
+ 'menu_icon': icon,
165
+ 'type': undefined,
166
+ 'params': [null, xml_node, self.selected()]
167
+ }];
168
+ }
169
+ if($('> code', xml_node).length > 0 && xml_node.get(0).tagName == 'call') {
170
+ var icon = self.elements.callmanipulate.illustrator.svg.clone();
171
+ icon.children('.rfill:last').addClass('menu');
172
+ menu['Delete'].push({
173
+ 'label': 'Remove Scripts',
174
+ 'function_call': self.adaptor.description.remove,
175
+ 'menu_icon': icon,
176
+ 'type': undefined,
177
+ 'params': ['> code', xml_node]
178
+ });
179
+ }
180
+ if (xml_node.get(0).tagName == "call" || xml_node.get(0).tagName == "manipulate" || xml_node.get(0).tagName == "stop") {
181
+ var icon = self.elements.call.illustrator.svg.clone();
182
+ icon.children('g.replace').addClass('active');
183
+ var vtarget = self.adaptor.illustrator.get_node_by_svg_id(svgid);
184
+ if (vtarget.length > 0) {
185
+ if (vtarget.parents('g.activities.passive, g.activities.active').length > 0) {
186
+ menu['Position'] = [{
187
+ 'label': 'No Execution from here',
188
+ 'function_call': del_ui_pos,
189
+ 'menu_icon': icon,
190
+ 'type': undefined,
191
+ 'params': xml_node
192
+ }];
193
+ } else {
194
+ menu['Position'] = [{
195
+ 'label': 'Execute from here',
196
+ 'function_call': add_ui_pos,
197
+ 'menu_icon': icon,
198
+ 'type': undefined,
199
+ 'params': xml_node
200
+ }];
201
+ }
202
+ }
203
+ }
204
+ new CustomMenu(e).contextmenu(menu);
205
+ }
206
+ return false;
207
+ } // }}}
208
+ this.events.suppress = function(svgid, e, child, sibling) { // {{{
209
+ return false;
210
+ } // }}}
211
+ this.events.click = function(svgid, e) { // {{{
212
+ if (self.adaptor.description.get_node_by_svg_id(svgid).length == 0) {
213
+ return;
214
+ }
215
+
216
+ self.adaptor.illustrator.get_elements().removeClass('selected');
217
+ self.adaptor.illustrator.get_labels().removeClass('selected');
218
+
219
+ if (e && e.ctrlKey) {
220
+ if (save['state'] != "ready" && save['state'] != "stopped") { return false; }
221
+ var tab = $('#dat_details');
222
+ tab.empty();
223
+ var vtarget = self.adaptor.illustrator.get_node_by_svg_id(svgid);
224
+ if (vtarget.length > 0) {
225
+ vtarget.parents('g.element[element-id]').toggleClass('marked');
226
+ }
227
+ } else {
228
+ self.adaptor.illustrator.get_elements().removeClass('marked');
229
+
230
+ var vtarget = self.adaptor.illustrator.get_node_by_svg_id(svgid);
231
+ if (vtarget.length > 0) {
232
+ vtarget.parents('g.element[element-id]').addClass('selected');
233
+ }
234
+ self.adaptor.illustrator.get_label_by_svg_id(svgid).addClass('selected');
235
+
236
+ self.update_details(svgid);
237
+ }
238
+ } // }}}
239
+ this.events.dblclick = function(svgid, e) { // {{{
240
+ } // }}}
241
+ this.events.mouseover = function(svgid, e) { // {{{
242
+ self.adaptor.illustrator.svg.container.find('.tile[element-id = "' + svgid + '"]').css('display','block');
243
+ self.adaptor.illustrator.svg.container.find('[element-id = "' + svgid + '"]').addClass('hover');
244
+ self.adaptor.illustrator.svg.label_container.find('[element-id = "' + svgid + '"]').addClass('hover');
245
+ return false;
246
+ } // }}}
247
+ this.events.mouseout = function(svgid, e) { // {{{
248
+ self.adaptor.illustrator.svg.container.find('.tile[element-id = "' + svgid + '"]').css('display','none');
249
+ self.adaptor.illustrator.svg.container.find('[element-id = "' + svgid + '"]').removeClass('hover');
250
+ self.adaptor.illustrator.svg.label_container.find('[element-id = "' + svgid + '"]').removeClass('hover');
251
+ return false;
252
+ } // }}}
253
+ this.events.dragstart = function (svgid, e) { //{{{
254
+ } //}}}
255
+
256
+ // other resources
257
+ this.resources.arrow = self.adaptor.theme_dir + 'symbols/arrow.svg';
258
+
259
+ // Primitive Elements
260
+ this.elements.call = { /*{{{*/
261
+ 'type': 'primitive',
262
+ 'illustrator': {//{{{
263
+ 'endnodes': 'this',
264
+ 'label': function(node){
265
+ var ret = [ { column: 'Label', value: $('> label',$(node).children('parameters')).text().replace(/^['"]/,'').replace(/['"]$/,'') } ];
266
+ return ret;
267
+ },
268
+ 'info': function(node){ return { 'element-endpoint': $(node).attr('endpoint') }; },
269
+ 'resolve_symbol': function(node) {
270
+ if($('code', node).length > 0) {
271
+ return 'callmanipulate';
272
+ } else {
273
+ return 'call';
274
+ }
275
+ },
276
+ 'svg': self.adaptor.theme_dir + 'symbols/call.svg'
277
+ },//}}}
278
+ 'description': self.adaptor.theme_dir + 'rngs/call.rng',
279
+ 'permissible_children': function(node,mode) { //{{{
280
+ if(node.children('code').length < 1)
281
+ return [
282
+ {'label': 'Scripts',
283
+ 'function_call': self.adaptor.description.insert_last_into,
284
+ 'menu_icon': self.elements.callmanipulate.illustrator.svg.clone(),
285
+ 'type': undefined,
286
+ 'params': [self.adaptor.description.elements.scripts, node]}
287
+ ];
288
+ return [];
289
+ }, //}}}
290
+ 'adaptor': {//{{{
291
+ 'mousedown': function (node,e) { self.events.mousedown(node,e,true,true); },
292
+ 'click': self.events.click,
293
+ 'dragstart': self.events.dragstart,
294
+ 'mouseover': self.events.mouseover,
295
+ 'mouseout': self.events.mouseout
296
+ }//}}}
297
+ }; /*}}}*/
298
+ this.elements.manipulate = { /*{{{*/
299
+ 'type': 'primitive',
300
+ 'illustrator': {//{{{
301
+ 'endnodes': 'this',
302
+ 'label': function(node){
303
+ var lab = $(node).attr('label');
304
+ if (lab) {
305
+ return [ { column: 'Label', value: lab.replace(/^['"]/,'').replace(/['"]$/,'') } ];
306
+ } else {
307
+ return [];
308
+ }
309
+ },
310
+ 'svg': self.adaptor.theme_dir + 'symbols/manipulate.svg'
311
+ },//}}}
312
+ 'description': self.adaptor.theme_dir + 'rngs/manipulate.rng',
313
+ 'permissible_children': function(node,mode) { //{{{
314
+ return [];
315
+ }, //}}}
316
+ 'adaptor': {//{{{
317
+ 'mousedown': function (node,e) { self.events.mousedown(node,e,false,true); },
318
+ 'click': self.events.click,
319
+ 'mouseover': self.events.mouseover,
320
+ 'mouseout': self.events.mouseout
321
+ }//}}}
322
+ }; /*}}}*/
323
+ this.elements.escape = { /*{{{*/
324
+ 'type': 'primitive',
325
+ 'illustrator': {//{{{
326
+ 'endnodes': 'this',
327
+ 'svg': self.adaptor.theme_dir + 'symbols/escape.svg'
328
+ },//}}}
329
+ 'description': self.adaptor.theme_dir + 'rngs/escape.rng',
330
+ 'permissible_children': function(node,mode) { //{{{
331
+ return [];
332
+ }, //}}}
333
+ 'adaptor': {//{{{
334
+ 'mousedown': function (node,e) { self.events.mousedown(node,e,false,true); },
335
+ 'click': self.events.click,
336
+ 'mouseover': self.events.mouseover,
337
+ 'mouseout': self.events.mouseout
338
+ }//}}}
339
+ }; /*}}}*/
340
+ this.elements.stop = { /*{{{*/
341
+ 'type': 'primitive',
342
+ 'illustrator': {//{{{
343
+ 'endnodes': 'this',
344
+ 'svg': self.adaptor.theme_dir + 'symbols/stop.svg'
345
+ },//}}}
346
+ 'description': self.adaptor.theme_dir + 'rngs/stop.rng',
347
+ 'permissible_children': function(node,mode) { //{{{
348
+ return [];
349
+ }, //}}}
350
+ 'adaptor': {//{{{
351
+ 'mousedown': function (node,e) { self.events.mousedown(node,e,false,true); },
352
+ 'click': self.events.click,
353
+ 'mouseover': self.events.mouseover,
354
+ 'mouseout': self.events.mouseout
355
+ }//}}}
356
+ }; /*}}}*/
357
+ this.elements.terminate = { /*{{{*/
358
+ 'type': 'primitive',
359
+ 'illustrator': {//{{{
360
+ 'endnodes': 'this',
361
+ 'final': true,
362
+ 'svg': self.adaptor.theme_dir + 'symbols/terminate.svg'
363
+ },//}}}
364
+ 'description': self.adaptor.theme_dir + 'rngs/terminate.rng',
365
+ 'permissible_children': function(node,mode) { //{{{
366
+ return [];
367
+ }, //}}}
368
+ 'adaptor': {//{{{
369
+ 'mousedown': function (node,e) { self.events.mousedown(node,e,false,false); },
370
+ 'mouseover': self.events.mouseover,
371
+ 'mouseout': self.events.mouseout
372
+ }//}}}
373
+ }; /*}}}*/
374
+ this.elements.end = { /*{{{*/
375
+ 'type': 'primitive',
376
+ 'illustrator': {//{{{
377
+ 'endnodes': 'this',
378
+ 'svg': self.adaptor.theme_dir + 'symbols/end.svg'
379
+ }, //}}}
380
+ 'adaptor': {//{{{
381
+ 'mousedown': function (node,e) {
382
+ self.events.suppress();
383
+ }
384
+ }//}}}
385
+ }; /*}}}*/
386
+ this.elements.event_end = { /*{{{*/
387
+ 'type': 'primitive',
388
+ 'illustrator': {//{{{
389
+ 'endnodes': 'this',
390
+ 'svg': self.adaptor.theme_dir + 'symbols/event_end.svg'
391
+ }, //}}}
392
+ 'adaptor': {//{{{
393
+ 'mousedown': function (node,e) {
394
+ self.events.suppress();
395
+ },
396
+ 'click': self.events.click,
397
+ 'dblclick': self.events.dblclick,
398
+ 'mouseover': self.events.mouseover,
399
+ 'mouseout': self.events.mouseout
400
+ }//}}}
401
+ }; /*}}}*/
402
+ this.elements.choose_finish = { /*{{{*/
403
+ 'type': 'primitive',
404
+ 'illustrator': {//{{{
405
+ 'endnodes': 'this',
406
+ 'svg': self.adaptor.theme_dir + 'symbols/choose_inclusive.svg',
407
+ 'resolve_symbol': function(node) {
408
+ if($(node).attr('mode') == 'exclusive') {
409
+ return 'choose_exclusive_finish';
410
+ } else {
411
+ return 'choose_inclusive_finish';
412
+ }
413
+ },
414
+ }, //}}}
415
+ 'adaptor': {//{{{
416
+ 'mousedown': function (node,e) {
417
+ self.events.mousedown(node,e,true,true);
418
+ },
419
+ 'click': self.events.click,
420
+ 'dblclick': self.events.dblclick,
421
+ 'mouseover': self.events.mouseover,
422
+ 'mouseout': self.events.mouseout
423
+ }//}}}
424
+ }; /*}}}*/
425
+ this.elements.loop_finish = { /*{{{*/
426
+ 'type': 'primitive',
427
+ 'illustrator': {//{{{
428
+ 'endnodes': 'this',
429
+ 'closeblock': true,
430
+ 'label': function(node){
431
+ var ret = [ { column: 'Label', value: $(node).attr('condition') } ];
432
+ return ret;
433
+ },
434
+ 'svg': self.adaptor.theme_dir + 'symbols/choose_exclusive.svg',
435
+ }, //}}}
436
+ 'adaptor': {//{{{
437
+ 'mousedown': function (node,e) {
438
+ self.events.mousedown(node,e,true,true);
439
+ },
440
+ 'click': self.events.click,
441
+ 'dblclick': self.events.dblclick,
442
+ 'mouseover': self.events.mouseover,
443
+ 'mouseout': self.events.mouseout
444
+ }//}}}
445
+ }; /*}}}*/
446
+ this.elements.parallel_finish = { /*{{{*/
447
+ 'type': 'primitive',
448
+ 'illustrator': {//{{{
449
+ 'endnodes': 'this',
450
+ 'svg': self.adaptor.theme_dir + 'symbols/parallel.svg',
451
+ 'resolve_symbol': function(node) {
452
+ if($(node).attr('wait') == '-1') {
453
+ return 'parallel_simple';
454
+ } else {
455
+ return 'parallel_complex';
456
+ }
457
+ },
458
+ }, //}}}
459
+ 'adaptor': {//{{{
460
+ 'mousedown': function (node,e) {
461
+ self.events.mousedown(node,e,true,true);
462
+ },
463
+ 'click': self.events.click,
464
+ 'dblclick': self.events.dblclick,
465
+ 'mouseover': self.events.mouseover,
466
+ 'mouseout': self.events.mouseout
467
+ }//}}}
468
+ }; /*}}}*/
469
+
470
+ // Complex Elements
471
+ this.elements.choose = { /*{{{*/
472
+ 'type': 'complex',
473
+ 'illustrator': {//{{{
474
+ 'label': function(node){ return [ { column: 'Label', value: $(node).attr('mode') == 'exclusive' ? 'exclusive' : 'inclusive' } ]; },
475
+ 'endnodes': 'aggregate',
476
+ 'closeblock': false,
477
+ 'expansion': function(node) {
478
+ return 'horizontal';
479
+ },
480
+ 'resolve_symbol': function(node) {
481
+ if($(node).attr('mode') == 'exclusive') {
482
+ return 'choose_exclusive';
483
+ } else {
484
+ return 'choose_inclusive';
485
+ }
486
+ },
487
+ 'col_shift': function(node) {
488
+ return false;
489
+ },
490
+ 'svg': self.adaptor.theme_dir + 'symbols/choose.svg'
491
+ },//}}}
492
+ 'description': self.adaptor.theme_dir + 'rngs/choose.rng',
493
+ 'permissible_children': function(node,mode) { //{{{
494
+ var func = null;
495
+ if (mode == 'into') { func = self.adaptor.description.insert_first_into }
496
+ else { func = self.adaptor.description.insert_after }
497
+ if(node.children('parallel_branch').length > 0) {
498
+ return [{'label': 'Parallel Branch',
499
+ 'function_call': func,
500
+ 'menu_icon': self.elements.parallel_branch.illustrator.svg.clone(),
501
+ 'type': 'parallel_branch',
502
+ 'params': [self.adaptor.description.elements.parallel_branch, node]}];
503
+ }
504
+ var childs = [{'label': 'Alternative',
505
+ 'function_call': func,
506
+ 'menu_icon': self.elements.alternative.illustrator.svg.clone(),
507
+ 'type': 'alternative',
508
+ 'params': [self.adaptor.description.elements.alternative, node]}];
509
+ if((node.children('otherwise').length == 0) && node.parents('parallel').length == node.parents('parallel_branch').length && node.parent('choose').length == 0)
510
+ childs.push({'label': 'Otherwise',
511
+ 'function_call': self.adaptor.description.insert_last_into,
512
+ 'menu_icon': self.elements.otherwise.illustrator.svg.clone(),
513
+ 'type': 'otherwise',
514
+ 'params': [self.adaptor.description.elements.otherwise, node]});
515
+ if(node.parents('parallel').length > node.parents('parallel_branch').length)
516
+ childs.push({'label': 'Parallel Branch',
517
+ 'function_call': func,
518
+ 'menu_icon': self.elements.parallel_branch.illustrator.svg.clone(),
519
+ 'type': 'parallel_branch',
520
+ 'params': [self.adaptor.description.elements.parallel_branch, node]});
521
+ return childs;
522
+ }, //}}}
523
+ 'adaptor': {//{{{
524
+ 'mousedown': function (node,e) {
525
+ self.events.mousedown(node,e,true,true);
526
+ },
527
+ 'click': self.events.click,
528
+ 'dblclick': self.events.dblclick,
529
+ 'mouseover': self.events.mouseover,
530
+ 'mouseout': self.events.mouseout
531
+ }//}}}
532
+ }; /*}}}*/
533
+ this.elements.otherwise = { /*{{{*/
534
+ 'type': 'complex',
535
+ 'illustrator': {//{{{
536
+ 'endnodes': 'passthrough',
537
+ 'closeblock': false,
538
+ 'noarrow': true,
539
+ 'expansion': function(node) {
540
+ return 'vertical';
541
+ },
542
+ 'col_shift': function(node) {
543
+ return false;
544
+ },
545
+ 'svg': self.adaptor.theme_dir + 'symbols/otherwise.svg'
546
+ },//}}}
547
+ 'description': self.adaptor.theme_dir + 'rngs/otherwise.rng',
548
+ 'neverdelete': true,
549
+ 'permissible_children': function(node,mode) { //{{{
550
+ var func = null;
551
+ var childs = null;
552
+ if (mode == 'into') { func = self.adaptor.description.insert_first_into }
553
+ else { func = self.adaptor.description.insert_after }
554
+ var childs = [
555
+ {'label': 'Service Call with Scripts',
556
+ 'function_call': func,
557
+ 'menu_icon': self.elements.callmanipulate.illustrator.svg.clone(),
558
+ 'type': 'callmanipulate',
559
+ 'params': [self.adaptor.description.elements.callmanipulate, node]},
560
+ {'label': 'Service Call',
561
+ 'function_call': func,
562
+ 'menu_icon': self.elements.call.illustrator.svg.clone(),
563
+ 'type': 'call',
564
+ 'params': [self.adaptor.description.elements.call, node]},
565
+ {'label': 'Script',
566
+ 'function_call': func,
567
+ 'menu_icon': self.elements.manipulate.illustrator.svg.clone(),
568
+ 'type': 'manipulate',
569
+ 'params': [self.adaptor.description.elements.manipulate, node]},
570
+ {'label': 'Parallel',
571
+ 'function_call': func,
572
+ 'menu_icon': self.elements.parallel.illustrator.svg.clone(),
573
+ 'type': 'parallel',
574
+ 'params': [self.adaptor.description.elements.parallel, node]},
575
+ {'label': 'Decision',
576
+ 'function_call': func,
577
+ 'menu_icon': self.elements.choose.illustrator.svg.clone(),
578
+ 'type': 'choose',
579
+ 'params': [self.adaptor.description.elements.choose, node]},
580
+ {'label': 'Loop',
581
+ 'function_call': func,
582
+ 'menu_icon': self.elements.loop.illustrator.svg.clone(),
583
+ 'type': 'loop',
584
+ 'params': [self.adaptor.description.elements.loop, node]},
585
+ {'label': 'Terminate',
586
+ 'function_call': func,
587
+ 'menu_icon': self.elements.terminate.illustrator.svg.clone(),
588
+ 'type': 'terminate',
589
+ 'params': [self.adaptor.description.elements.terminate, node]},
590
+ {'label': 'Stop',
591
+ 'function_call': func,
592
+ 'menu_icon': self.elements.stop.illustrator.svg.clone(),
593
+ 'type': 'stop',
594
+ 'params': [self.adaptor.description.elements.stop, node]}
595
+ ];
596
+ if(node.parent('parallel_branch').length > 0) {
597
+ childs.push({
598
+ 'label': 'Critical',
599
+ 'function_call': func,
600
+ 'menu_icon': self.elements.critical.illustrator.svg.clone(),
601
+ 'type': 'critical',
602
+ 'params': [self.adaptor.description.elements.critical, node]
603
+ });
604
+ }
605
+ return childs;
606
+ }, //}}}
607
+ 'adaptor': {//{{{
608
+ 'mousedown': function (node,e) {
609
+ self.events.mousedown(node,e,true,false);
610
+ },
611
+ 'click': self.events.click,
612
+ 'dblclick': self.events.dblclick,
613
+ 'mouseover': self.events.mouseover,
614
+ 'mouseout': self.events.mouseout,
615
+ }//}}}
616
+ }; /*}}}*/
617
+ this.elements.alternative = { /*{{{*/
618
+ 'type': 'complex',
619
+ 'illustrator': {//{{{
620
+ 'label': function(node){
621
+ var ret = [ { column: 'Label', value: $(node).attr('condition') } ];
622
+ return ret;
623
+ },
624
+ 'endnodes': 'passthrough',
625
+ 'noarrow': true,
626
+ 'closeblock':false,
627
+ 'expansion': function(node) {
628
+ return 'vertical';
629
+ },
630
+ 'col_shift': function(node) {
631
+ return false;
632
+ },
633
+ 'svg': self.adaptor.theme_dir + 'symbols/alternative.svg'
634
+ },//}}}
635
+ 'description': self.adaptor.theme_dir + 'rngs/alternative.rng',
636
+ 'permissible_children': function(node,mode) { //{{{
637
+ if (mode == 'into') { func = self.adaptor.description.insert_first_into }
638
+ else { func = self.adaptor.description.insert_after }
639
+ if(node.parents('parallel').length > node.parents('parallel_branch').length && node.get(0).tagName == 'alternative') {
640
+ return [{'label': 'Parallel Branch',
641
+ 'function_call': func,
642
+ 'menu_icon': self.elements.parallel_branch.illustrator.svg.clone(),
643
+ 'type': 'parallel_branch',
644
+ 'params': [self.adaptor.description.elements.parallel_branch, node]}];
645
+ }
646
+ var childs = [
647
+ {'label': 'Service Call with Scripts',
648
+ 'function_call': func,
649
+ 'menu_icon': self.elements.callmanipulate.illustrator.svg.clone(),
650
+ 'type': 'callmanipulate',
651
+ 'params': [self.adaptor.description.elements.callmanipulate, node]},
652
+ {'label': 'Service Call',
653
+ 'function_call': func,
654
+ 'menu_icon': self.elements.call.illustrator.svg.clone(),
655
+ 'type': 'call',
656
+ 'params': [self.adaptor.description.elements.call, node]},
657
+ {'label': 'Script',
658
+ 'function_call': func,
659
+ 'menu_icon': self.elements.manipulate.illustrator.svg.clone(),
660
+ 'type': 'manipulate',
661
+ 'params': [self.adaptor.description.elements.manipulate, node]},
662
+ {'label': 'Parallel',
663
+ 'function_call': func,
664
+ 'menu_icon': self.elements.parallel.illustrator.svg.clone(),
665
+ 'type': 'parallel',
666
+ 'params': [self.adaptor.description.elements.parallel, node]},
667
+ {'label': 'Decision',
668
+ 'function_call': func,
669
+ 'menu_icon': self.elements.choose.illustrator.svg.clone(),
670
+ 'type': 'choose',
671
+ 'params': [self.adaptor.description.elements.choose, node]},
672
+ {'label': 'Loop',
673
+ 'function_call': func,
674
+ 'menu_icon': self.elements.loop.illustrator.svg.clone(),
675
+ 'type': 'loop',
676
+ 'params': [self.adaptor.description.elements.loop, node]},
677
+ {'label': 'Terminate',
678
+ 'function_call': func,
679
+ 'menu_icon': self.elements.terminate.illustrator.svg.clone(),
680
+ 'type': 'terminate',
681
+ 'params': [self.adaptor.description.elements.terminate, node]},
682
+ {'label': 'Stop',
683
+ 'function_call': func,
684
+ 'menu_icon': self.elements.stop.illustrator.svg.clone(),
685
+ 'type': 'stop',
686
+ 'params': [self.adaptor.description.elements.stop, node]}
687
+ ];
688
+ if(node.parent('parallel_branch').length > 0) {
689
+ childs.push({
690
+ 'label': 'Critical',
691
+ 'function_call': func,
692
+ 'menu_icon': self.elements.critical.illustrator.svg.clone(),
693
+ 'type': 'critical',
694
+ 'params': [self.adaptor.description.elements.critical, node]
695
+ });
696
+ }
697
+ return childs;
698
+ }, //}}}
699
+ 'adaptor': {//{{{
700
+ 'mousedown': function (node,e) {
701
+ self.events.mousedown(node,e,true,true);
702
+ },
703
+ 'click': self.events.click,
704
+ 'dblclick': self.events.dblclick,
705
+ 'mouseover': self.events.mouseover,
706
+ 'mouseout': self.events.mouseout,
707
+ }//}}}
708
+ }; /*}}}*/
709
+ this.elements.loop = { /*{{{*/
710
+ 'type': 'complex',
711
+ 'illustrator': {//{{{
712
+ 'resolve_symbol': function(node) {
713
+ if($(node).attr('mode') == 'pre_test') {
714
+ return 'loop_head';
715
+ } else {
716
+ return 'loop_tail';
717
+ }
718
+ },
719
+ 'expansion': function(node) {
720
+ return 'vertical';
721
+ },
722
+ 'col_shift': function(node) {
723
+ return true;
724
+ },
725
+ 'svg': self.adaptor.theme_dir + 'symbols/loop.svg'
726
+ },// }}}
727
+ 'description': self.adaptor.theme_dir + 'rngs/loop.rng',
728
+ 'permissible_children': function(node,mode) { //{{{
729
+ var func = null;
730
+ if (mode == 'into') { func = self.adaptor.description.insert_first_into }
731
+ else { func = self.adaptor.description.insert_after }
732
+ var childs = [
733
+ {'label': 'Service Call with Scripts',
734
+ 'function_call': func,
735
+ 'menu_icon': self.elements.callmanipulate.illustrator.svg.clone(),
736
+ 'type': 'callmanipulate',
737
+ 'params': [self.adaptor.description.elements.callmanipulate, node]},
738
+ {'label': 'Service Call',
739
+ 'function_call': func,
740
+ 'menu_icon': self.elements.call.illustrator.svg.clone(),
741
+ 'type': 'call',
742
+ 'params': [self.adaptor.description.elements.call, node]},
743
+ {'label': 'Script',
744
+ 'function_call': func,
745
+ 'menu_icon': self.elements.manipulate.illustrator.svg.clone(),
746
+ 'type': 'manipulate',
747
+ 'params': [self.adaptor.description.elements.manipulate, node]},
748
+ {'label': 'Decision',
749
+ 'function_call': func,
750
+ 'menu_icon': self.elements.choose.illustrator.svg.clone(),
751
+ 'type': 'choose',
752
+ 'params': [self.adaptor.description.elements.choose, node]},
753
+ {'label': 'Loop',
754
+ 'function_call': func,
755
+ 'menu_icon': self.elements.loop.illustrator.svg.clone(),
756
+ 'type': 'loop',
757
+ 'params': [self.adaptor.description.elements.loop, node]},
758
+ {'label': 'Terminate',
759
+ 'function_call': func,
760
+ 'menu_icon': self.elements.terminate.illustrator.svg.clone(),
761
+ 'type': 'terminate',
762
+ 'params': [self.adaptor.description.elements.terminate, node]},
763
+ {'label': 'Stop',
764
+ 'function_call': func,
765
+ 'menu_icon': self.elements.stop.illustrator.svg.clone(),
766
+ 'type': 'stop',
767
+ 'params': [self.adaptor.description.elements.stop, node]}
768
+ ];
769
+ if(node.parent('parallel_branch').length > 0) {
770
+ childs.push({
771
+ 'label': 'Critical',
772
+ 'function_call': func,
773
+ 'menu_icon': self.elements.critical.illustrator.svg.clone(),
774
+ 'type': 'critical',
775
+ 'params': [self.adaptor.description.elements.critical, node]
776
+ });
777
+ }
778
+ if(node.parent('parallel').length > node.parent('parallel_branch').length) {
779
+ childs.push({'label': 'Parallel Branch',
780
+ 'function_call': func,
781
+ 'menu_icon': self.elements.parallel_branch.illustrator.svg.clone(),
782
+ 'type': 'parallel_branch',
783
+ 'params': [self.adaptor.description.elements.parallel_branch, node]}
784
+ );
785
+ } else {
786
+ childs.push({'label': 'Parallel',
787
+ 'function_call': func,
788
+ 'menu_icon': self.elements.parallel.illustrator.svg.clone(),
789
+ 'type': 'parallel',
790
+ 'params': [self.adaptor.description.elements.parallel, node]}
791
+ );
792
+ }
793
+ return childs;
794
+ }, //}}}
795
+ 'adaptor': {//{{{
796
+ 'mousedown': function (node,e) {
797
+ self.events.mousedown(node,e,true,true);
798
+ },
799
+ 'click': self.events.click,
800
+ 'dblclick': self.events.dblclick,
801
+ 'mouseover': self.events.mouseover,
802
+ 'mouseout': self.events.mouseout,
803
+ }//}}}
804
+ }; /*}}}*/
805
+ this.elements.parallel = { /*{{{*/
806
+ 'type': 'complex',
807
+ 'illustrator': {//{{{
808
+ 'endnodes': 'aggregate',
809
+ 'closeblock': false,
810
+ 'closing_symbol': 'parallel_finish',
811
+ 'expansion': function(node) {
812
+ // check if any sibling other than 'parallel_branch' is present
813
+ if($(node).children(':not(parallel_branch)').length > 0) return 'vertical';
814
+ return 'horizontal';
815
+ },
816
+ 'col_shift': function(node) {
817
+ return true;
818
+ },
819
+ 'svg': self.adaptor.theme_dir + 'symbols/parallel.svg'
820
+ },//}}}
821
+ 'description': self.adaptor.theme_dir + 'rngs/parallel.rng',
822
+ 'permissible_children': function(node,mode) { //{{{
823
+ var func = null;
824
+ if (mode == 'into') { func = self.adaptor.description.insert_first_into }
825
+ else { func = self.adaptor.description.insert_after }
826
+ var childs = [
827
+ {'label': 'Parallel Branch',
828
+ 'function_call': func,
829
+ 'menu_icon': self.elements.parallel_branch.illustrator.svg.clone(),
830
+ 'type': 'parallel_branch',
831
+ 'params': [self.adaptor.description.elements.parallel_branch, node]},
832
+ ];
833
+ return childs;
834
+ }, //}}}
835
+ 'permissible_children_expert': function(node,mode) { //{{{
836
+ var func = null;
837
+ if (mode.match(/into/)) { func = self.adaptor.description.insert_first_into }
838
+ else { func = self.adaptor.description.insert_after }
839
+ var childs = [
840
+ {'label': 'Service Call with Scripts',
841
+ 'function_call': func,
842
+ 'menu_icon': self.elements.callmanipulate.illustrator.svg.clone(),
843
+ 'type': 'callmanipulate',
844
+ 'params': [self.adaptor.description.elements.callmanipulate, node]},
845
+ {'label': 'Service Call',
846
+ 'function_call': func,
847
+ 'menu_icon': self.elements.call.illustrator.svg.clone(),
848
+ 'type': 'call',
849
+ 'params': [self.adaptor.description.elements.call, node]},
850
+ {'label': 'Script',
851
+ 'function_call': func,
852
+ 'menu_icon': self.elements.manipulate.illustrator.svg.clone(),
853
+ 'type': 'manipulate',
854
+ 'params': [self.adaptor.description.elements.manipulate, node]},
855
+ {'label': 'Decision',
856
+ 'function_call': func,
857
+ 'menu_icon': self.elements.choose.illustrator.svg.clone(),
858
+ 'type': 'choose',
859
+ 'params': [self.adaptor.description.elements.choose, node]},
860
+ {'label': 'Loop',
861
+ 'function_call': func,
862
+ 'menu_icon': self.elements.loop.illustrator.svg.clone(),
863
+ 'type': 'loop',
864
+ 'params': [self.adaptor.description.elements.loop, node]},
865
+ {'label': 'Stop',
866
+ 'function_call': func,
867
+ 'menu_icon': self.elements.stop.illustrator.svg.clone(),
868
+ 'type': 'stop',
869
+ 'params': [self.adaptor.description.elements.stop, node]}
870
+ ];
871
+ if(node.get(0).tagName != 'parallel')
872
+ childs.push({'label': 'Parallel',
873
+ 'function_call': self.adaptor.description.insert_last_into,
874
+ 'menu_icon': self.elements.parallel.illustrator.svg.clone(),
875
+ 'type': 'parallel',
876
+ 'params': [self.adaptor.description.elements.parallel, node]});
877
+ return childs;
878
+ }, //}}}
879
+ 'adaptor': {//{{{
880
+ 'mousedown': function (node,e) {
881
+ self.events.mousedown(node,e,true,true);
882
+ },
883
+ 'click': self.events.click,
884
+ 'dblclick': self.events.dblclick,
885
+ 'mouseover': self.events.mouseover,
886
+ 'mouseout': self.events.mouseout,
887
+ }//}}}
888
+ }; /*}}}*/
889
+ this.elements.parallel_branch = { /*{{{*/
890
+ 'type': 'complex',
891
+ 'illustrator': {//{{{
892
+ 'endnodes': 'passthrough',
893
+ 'closeblock': false,
894
+ 'noarrow': true,
895
+ 'expansion': function(node) {
896
+ return 'vertical';
897
+ },
898
+ 'resolve_symbol': function(node,shift) {
899
+ if(shift == true) {
900
+ return 'parallel_branch_compact';
901
+ } else {
902
+ return 'parallel_branch_normal';
903
+ }
904
+ },
905
+ 'col_shift': function(node) {
906
+ if(node.parentNode.tagName == 'choose') return false;
907
+ if($(node).parents('parallel').first().children(':not(parallel_branch)').length > 0) return true;
908
+ return false;
909
+ },
910
+ 'svg': self.adaptor.theme_dir + 'symbols/parallel_branch.svg'
911
+ },//}}}
912
+ 'description': self.adaptor.theme_dir + 'rngs/parallel_branch.rng',
913
+ 'permissible_children': function(node,mode) { //{{{
914
+ var func = null;
915
+ if (mode == 'into') { func = self.adaptor.description.insert_first_into }
916
+ else { func = self.adaptor.description.insert_after }
917
+ var childs = [
918
+ {'label': 'Service Call with Scripts',
919
+ 'function_call': func,
920
+ 'menu_icon': self.elements.callmanipulate.illustrator.svg.clone(),
921
+ 'type': 'callmanipulate',
922
+ 'params': [self.adaptor.description.elements.callmanipulate, node]},
923
+ {'label': 'Service Call',
924
+ 'function_call': func,
925
+ 'menu_icon': self.elements.call.illustrator.svg.clone(),
926
+ 'type': 'call',
927
+ 'params': [self.adaptor.description.elements.call, node]},
928
+ {'label': 'Script',
929
+ 'function_call': func,
930
+ 'menu_icon': self.elements.manipulate.illustrator.svg.clone(),
931
+ 'type': 'manipulate',
932
+ 'params': [self.adaptor.description.elements.manipulate, node]},
933
+ {'label': 'Parallel',
934
+ 'function_call': func,
935
+ 'menu_icon': self.elements.parallel.illustrator.svg.clone(),
936
+ 'type': 'parallel',
937
+ 'params': [self.adaptor.description.elements.parallel, node]},
938
+ {'label': 'Decision',
939
+ 'function_call': func,
940
+ 'menu_icon': self.elements.choose.illustrator.svg.clone(),
941
+ 'type': 'choose',
942
+ 'params': [self.adaptor.description.elements.choose, node]},
943
+ {'label': 'Loop',
944
+ 'function_call': func,
945
+ 'menu_icon': self.elements.loop.illustrator.svg.clone(),
946
+ 'type': 'loop',
947
+ 'params': [self.adaptor.description.elements.loop, node]},
948
+ {'label': 'Terminate',
949
+ 'function_call': func,
950
+ 'menu_icon': self.elements.terminate.illustrator.svg.clone(),
951
+ 'type': 'terminate',
952
+ 'params': [self.adaptor.description.elements.terminate, node]},
953
+ {'label': 'Stop',
954
+ 'function_call': func,
955
+ 'menu_icon': self.elements.stop.illustrator.svg.clone(),
956
+ 'type': 'stop',
957
+ 'params': [self.adaptor.description.elements.stop, node]},
958
+ {'label': 'Critical',
959
+ 'function_call': func,
960
+ 'menu_icon': self.elements.critical.illustrator.svg.clone(),
961
+ 'type': 'critical',
962
+ 'params': [self.adaptor.description.elements.critical, node]}
963
+ ];
964
+ if(node.parents('choose').length > node.parents('alternative, otherwise').length && node.get(0).tagName == 'parallel_branch') {
965
+ return [{'label': 'Alternative',
966
+ 'function_call': func,
967
+ 'menu_icon': self.elements.alternative.illustrator.svg.clone(),
968
+ 'type': 'alternative',
969
+ 'params': [self.adaptor.description.elements.alternative, node]}];
970
+ }
971
+ return childs;
972
+ }, //}}}
973
+ 'adaptor': {//{{{
974
+ 'mousedown': function (node,e) {
975
+ self.events.mousedown(node,e,true,true);
976
+ },
977
+ 'click': self.events.click,
978
+ 'dblclick': self.events.dblclick,
979
+ 'mouseover': self.events.mouseover,
980
+ 'mouseout': self.events.mouseout,
981
+ }//}}}
982
+ }; /*}}}*/
983
+ this.elements.critical = { /*{{{*/
984
+ 'type': 'complex',
985
+ 'illustrator': {//{{{
986
+ 'endnodes': 'aggregate',
987
+ 'closeblock': false,
988
+ 'border': true,
989
+ 'expansion': function(node) {
990
+ return 'vertical';
991
+ },
992
+ 'col_shift': function(node) {
993
+ return true;
994
+ },
995
+ 'svg': self.adaptor.theme_dir + 'symbols/critical.svg'
996
+ },//}}}
997
+ 'description': self.adaptor.theme_dir + 'rngs/critical.rng',
998
+ 'permissible_children': function(node,mode) { //{{{
999
+ var func = null;
1000
+ if (mode == 'into') { func = self.adaptor.description.insert_first_into }
1001
+ else { func = self.adaptor.description.insert_after }
1002
+ var childs = [
1003
+ {'label': 'Service Call with Scripts',
1004
+ 'function_call': func,
1005
+ 'menu_icon': self.elements.callmanipulate.illustrator.svg.clone(),
1006
+ 'type': 'callmanipulate',
1007
+ 'params': [self.adaptor.description.elements.callmanipulate, node]},
1008
+ {'label': 'Service Call',
1009
+ 'function_call': func,
1010
+ 'menu_icon': self.elements.call.illustrator.svg.clone(),
1011
+ 'type': 'call',
1012
+ 'params': [self.adaptor.description.elements.call, node]},
1013
+ {'label': 'Script',
1014
+ 'function_call': func,
1015
+ 'menu_icon': self.elements.manipulate.illustrator.svg.clone(),
1016
+ 'type': 'manipulate',
1017
+ 'params': [self.adaptor.description.elements.manipulate, node]},
1018
+ {'label': 'Parallel',
1019
+ 'function_call': func,
1020
+ 'menu_icon': self.elements.parallel.illustrator.svg.clone(),
1021
+ 'type': 'parallel',
1022
+ 'params': [self.adaptor.description.elements.parallel, node]},
1023
+ {'label': 'Decision',
1024
+ 'function_call': func,
1025
+ 'menu_icon': self.elements.choose.illustrator.svg.clone(),
1026
+ 'type': 'choose',
1027
+ 'params': [self.adaptor.description.elements.choose, node]},
1028
+ {'label': 'Loop',
1029
+ 'function_call': func,
1030
+ 'menu_icon': self.elements.loop.illustrator.svg.clone(),
1031
+ 'type': 'loop',
1032
+ 'params': [self.adaptor.description.elements.loop, node]},
1033
+ {'label': 'Terminate',
1034
+ 'function_call': func,
1035
+ 'menu_icon': self.elements.terminate.illustrator.svg.clone(),
1036
+ 'type': 'terminate',
1037
+ 'params': [self.adaptor.description.elements.terminate, node]},
1038
+ {'label': 'Stop',
1039
+ 'function_call': func,
1040
+ 'menu_icon': self.elements.stop.illustrator.svg.clone(),
1041
+ 'type': 'stop',
1042
+ 'params': [self.adaptor.description.elements.stop, node]}
1043
+ ];
1044
+ if(node.parent('parallel_branch').length > 0) {
1045
+ childs.push({
1046
+ 'label': 'Critical',
1047
+ 'function_call': func,
1048
+ 'menu_icon': self.elements.critical.illustrator.svg.clone(),
1049
+ 'type': 'critical',
1050
+ 'params': [self.adaptor.description.elements.critical, node]
1051
+ });
1052
+ }
1053
+ return childs;
1054
+ }, //}}}
1055
+ 'adaptor': {//{{{
1056
+ 'mousedown': function (node,e) {
1057
+ self.events.mousedown(node,e,true,true);
1058
+ },
1059
+ 'click': self.events.click,
1060
+ 'dblclick': self.events.dblclick,
1061
+ 'mouseover': self.events.mouseover,
1062
+ 'mouseout': self.events.mouseout,
1063
+ }//}}}
1064
+ }; /*}}}*/
1065
+ this.elements.group = { /*{{{*/
1066
+ 'type': 'complex',
1067
+ 'illustrator': {//{{{
1068
+ 'endnodes': 'aggregate',
1069
+ 'closeblock': false,
1070
+ 'border': 'injectiongroup', // other value than true,false inidcates the used class for the svg-object
1071
+ 'expansion': function(node) {
1072
+ return 'vertical';
1073
+ },
1074
+ 'col_shift': function(node) {
1075
+ return true;
1076
+ },
1077
+ 'svg': null
1078
+ },//}}}
1079
+ 'description': self.adaptor.theme_dir + 'rngs/group.rng',
1080
+ 'permissible_children': function(node,mode) { //{{{
1081
+ var func = null;
1082
+ if (mode == 'into') { func = self.adaptor.description.insert_first_into }
1083
+ else { func = self.adaptor.description.insert_after }
1084
+ return [
1085
+ ];
1086
+ }, //}}}
1087
+ 'adaptor': {//{{{
1088
+ 'mousedown': function (node,e) {
1089
+ self.events.mousedown(node,e,true,true);
1090
+ },
1091
+ 'click': self.events.click,
1092
+ 'dblclick': self.events.dblclick,
1093
+ 'mouseover': self.events.mouseover,
1094
+ 'mouseout': self.events.mouseout,
1095
+ }//}}}
1096
+ }; /*}}}*/
1097
+ this.elements.start = this.elements.description = { /*{{{*/
1098
+ 'type': 'description',
1099
+ 'illustrator': {//{{{
1100
+ 'endnodes': 'passthrough',
1101
+ 'closeblock': false,
1102
+ 'balance': true,
1103
+ 'expansion': function(node) {
1104
+ return 'vertical';
1105
+ },
1106
+ 'closing_symbol': 'end',
1107
+ 'col_shift': function(node) {
1108
+ return true;
1109
+ },
1110
+ 'svg': self.adaptor.theme_dir + 'symbols/start.svg'
1111
+ },//}}}
1112
+ 'description': null,
1113
+ 'permissible_children': function(node,mode) { //{{{
1114
+ var func = null;
1115
+ if (mode == 'into') { func = self.adaptor.description.insert_first_into }
1116
+ else { func = self.adaptor.description.insert_after }
1117
+ var childs = [
1118
+ {'label': 'Service Call with Scripts',
1119
+ 'function_call': func,
1120
+ 'menu_icon': self.elements.callmanipulate.illustrator.svg.clone(),
1121
+ 'type': 'callmanipulate',
1122
+ 'params': [self.adaptor.description.elements.callmanipulate, node]},
1123
+ {'label': 'Service Call',
1124
+ 'function_call': func,
1125
+ 'menu_icon': self.elements.call.illustrator.svg.clone(),
1126
+ 'type': 'call',
1127
+ 'params': [self.adaptor.description.elements.call, node]},
1128
+ {'label': 'Script',
1129
+ 'function_call': func,
1130
+ 'menu_icon': self.elements.manipulate.illustrator.svg.clone(),
1131
+ 'type': 'manipulate',
1132
+ 'params': [self.adaptor.description.elements.manipulate, node]},
1133
+ {'label': 'Parallel',
1134
+ 'function_call': func,
1135
+ 'menu_icon': self.elements.parallel.illustrator.svg.clone(),
1136
+ 'type': 'parallel',
1137
+ 'params': [self.adaptor.description.elements.parallel, node]},
1138
+ {'label': 'Decision',
1139
+ 'function_call': func,
1140
+ 'menu_icon': self.elements.choose.illustrator.svg.clone(),
1141
+ 'type': 'choose',
1142
+ 'params': [self.adaptor.description.elements.choose, node]},
1143
+ {'label': 'Loop',
1144
+ 'function_call': func,
1145
+ 'menu_icon': self.elements.loop.illustrator.svg.clone(),
1146
+ 'type': 'loop',
1147
+ 'params': [self.adaptor.description.elements.loop, node]},
1148
+ {'label': 'Stop',
1149
+ 'function_call': func,
1150
+ 'menu_icon': self.elements.stop.illustrator.svg.clone(),
1151
+ 'type': 'stop',
1152
+ 'params': [self.adaptor.description.elements.stop, node]}
1153
+ ];
1154
+ if(node.parent('parallel_branch').length > 0) {
1155
+ childs.push({
1156
+ 'label': 'Critical',
1157
+ 'function_call': func,
1158
+ 'menu_icon': self.elements.critical.illustrator.svg.clone(),
1159
+ 'type': 'critical',
1160
+ 'params': [self.adaptor.description.elements.critical, node]
1161
+ });
1162
+ }
1163
+ return childs;
1164
+ }, //}}}
1165
+ 'adaptor': {//{{{
1166
+ 'mousedown': function (node,e) {
1167
+ self.events.mousedown(node,e,true,false);
1168
+ },
1169
+ 'click': self.events.click,
1170
+ 'dblclick': self.events.dblclick,
1171
+ 'mouseover': self.events.mouseover,
1172
+ 'mouseout': self.events.mouseout,
1173
+ }//}}}
1174
+ }; /*}}}*/
1175
+
1176
+ // Abstract Elements
1177
+ // * they may only have an illustrator (or other parts)
1178
+ // * they HAVE TO have a parent
1179
+ this.elements.callmanipulate = { /*{{{*/
1180
+ 'parent': 'call',
1181
+ 'description': self.adaptor.theme_dir + 'rngs/callmanipulate.rng',
1182
+ 'illustrator': {//{{{
1183
+ 'info': function(node){ return { 'element-endpoint': $(node).attr('endpoint') }; },
1184
+ 'svg': self.adaptor.theme_dir + 'symbols/callmanipulate.svg'
1185
+ },//}}}
1186
+ }; /*}}}*/
1187
+ this.elements.loop_head = { /*{{{*/
1188
+ 'parent': 'loop',
1189
+ 'illustrator': {//{{{
1190
+ 'endnodes': 'this',
1191
+ 'closeblock': true,
1192
+ 'label': function(node){
1193
+ var ret = [ { column: 'Label', value: $(node).attr('condition') } ];
1194
+ return ret;
1195
+ },
1196
+ }//}}}
1197
+ }; /*}}}*/
1198
+ this.elements.loop_tail = { /*{{{*/
1199
+ 'parent': 'loop',
1200
+ 'illustrator': {//{{{
1201
+ 'endnodes': 'aggregate',
1202
+ 'closeblock': false,
1203
+ 'closing_symbol': 'loop_finish'
1204
+ },//}}}
1205
+ }; /*}}}*/
1206
+ this.elements.choose_inclusive = { /*{{{*/
1207
+ 'parent': 'choose',
1208
+ 'illustrator': {//{{{
1209
+ 'svg': self.adaptor.theme_dir + 'symbols/choose_inclusive.svg'
1210
+ }//}}}
1211
+ }; /*}}}*/
1212
+ this.elements.choose_exclusive = { /*{{{*/
1213
+ 'parent': 'choose',
1214
+ 'illustrator': {//{{{
1215
+ 'svg': self.adaptor.theme_dir + 'symbols/choose_exclusive.svg'
1216
+ },//}}}
1217
+ }; /*}}}*/
1218
+ this.elements.choose_inclusive_finish = { /*{{{*/
1219
+ 'parent': 'choose_finish',
1220
+ 'illustrator': {//{{{
1221
+ 'svg': self.adaptor.theme_dir + 'symbols/choose_inclusive.svg'
1222
+ }//}}}
1223
+ }; /*}}}*/
1224
+ this.elements.choose_exclusive_finish = { /*{{{*/
1225
+ 'parent': 'choose_finish',
1226
+ 'illustrator': {//{{{
1227
+ 'svg': self.adaptor.theme_dir + 'symbols/choose_exclusive.svg'
1228
+ },//}}}
1229
+ }; /*}}}*/
1230
+ this.elements.loop_head_finish = { /*{{{*/
1231
+ 'parent': 'loop_finish',
1232
+ 'illustrator': {//{{{
1233
+ 'endnodes': 'this',
1234
+ 'closeblock': true,
1235
+ 'svg': self.adaptor.theme_dir + 'symbols/choose_exclusive.svg'
1236
+ }//}}}
1237
+ }; /*}}}*/
1238
+ this.elements.loop_tail_finish = { /*{{{*/
1239
+ 'parent': 'loop_finish',
1240
+ 'illustrator': {//{{{
1241
+ 'endnodes': 'this',
1242
+ 'closeblock': false,
1243
+ 'svg': self.adaptor.theme_dir + 'symbols/choose_exclusive.svg'
1244
+ },//}}}
1245
+ }; /*}}}*/
1246
+ this.elements.parallel_simple = { /*{{{*/
1247
+ 'parent': 'parallel_finish',
1248
+ 'illustrator': {//{{{
1249
+ 'svg': self.adaptor.theme_dir + 'symbols/parallel.svg'
1250
+ }//}}}
1251
+ }; /*}}}*/
1252
+ this.elements.parallel_complex = { /*{{{*/
1253
+ 'parent': 'parallel_finish',
1254
+ 'illustrator': {//{{{
1255
+ 'svg': self.adaptor.theme_dir + 'symbols/complex.svg'
1256
+ },//}}}
1257
+ }; /*}}}*/
1258
+ this.elements.parallel_branch_normal = { /*{{{*/
1259
+ 'parent': 'parallel_branch',
1260
+ 'illustrator': {//{{{
1261
+ 'svg': self.adaptor.theme_dir + 'symbols/parallel_branch_normal.svg'
1262
+ }//}}}
1263
+ }; /*}}}*/
1264
+ this.elements.parallel_branch_event = { /*{{{*/
1265
+ 'parent': 'parallel_branch',
1266
+ 'illustrator': {//{{{
1267
+ 'endnodes': 'this',
1268
+ 'noarrow': false,
1269
+ 'border': true,
1270
+ 'wide': true,
1271
+ 'closing_symbol': 'event_end',
1272
+ 'svg': self.adaptor.theme_dir + 'symbols/parallel_branch_event.svg'
1273
+ }//}}}
1274
+ }; /*}}}*/
1275
+ this.elements.parallel_branch_compact = { /*{{{*/
1276
+ 'parent': 'parallel_branch',
1277
+ 'illustrator': {//{{{
1278
+ 'endnodes': 'this',
1279
+ 'svg': self.adaptor.theme_dir + 'symbols/parallel_branch_compact.svg'
1280
+ }//}}}
1281
+ }; /*}}}*/
1282
+ this.elements.scripts = { /*{{{*/
1283
+ 'description': [self.adaptor.theme_dir + 'rngs/scripts.rng']
1284
+ }; /*}}}*/
1285
+ }