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