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,1650 @@
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 = true;
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 Scripts',
175
+ 'function_call': self.adaptor.description.remove,
176
+ 'menu_icon': icon,
177
+ 'type': undefined,
178
+ 'params': ['> code', xml_node]
179
+ });
180
+ }
181
+ if (xml_node.get(0).tagName == "call" || xml_node.get(0).tagName == "manipulate" || xml_node.get(0).tagName == "stop") {
182
+ var icon = self.elements.call.illustrator.svg.clone();
183
+ icon.children('g.replace').addClass('active');
184
+ var vtarget = self.adaptor.illustrator.get_node_by_svg_id(svgid);
185
+ if (vtarget.length > 0) {
186
+ if (vtarget.parents('g.activities.passive, g.activities.active').length > 0) {
187
+ menu['Position'] = [{
188
+ 'label': 'No Execution from here',
189
+ 'function_call': del_ui_pos,
190
+ 'menu_icon': icon,
191
+ 'type': undefined,
192
+ 'params': xml_node
193
+ }];
194
+ } else {
195
+ menu['Position'] = [{
196
+ 'label': 'Execute from here',
197
+ 'function_call': add_ui_pos,
198
+ 'menu_icon': icon,
199
+ 'type': undefined,
200
+ 'params': xml_node
201
+ }];
202
+ }
203
+ }
204
+ }
205
+ new CustomMenu(e).contextmenu(menu);
206
+ }
207
+ return false;
208
+ } // }}}
209
+ this.events.suppress = function(svgid, e, child, sibling) { // {{{
210
+ return false;
211
+ } // }}}
212
+ this.events.click = function(svgid, e) { // {{{
213
+ if (self.adaptor.description.get_node_by_svg_id(svgid).length == 0) {
214
+ return;
215
+ }
216
+
217
+ self.adaptor.illustrator.get_elements().removeClass('selected');
218
+ self.adaptor.illustrator.get_labels().removeClass('selected');
219
+
220
+ if (e && e.ctrlKey) {
221
+ if (save['state'] != "ready" && save['state'] != "stopped") { return false; }
222
+ var tab = $('#dat_details');
223
+ tab.empty();
224
+ var vtarget = self.adaptor.illustrator.get_node_by_svg_id(svgid);
225
+ if (vtarget.length > 0) {
226
+ vtarget.parents('g.element[element-id]').toggleClass('marked');
227
+ }
228
+ } else {
229
+ self.adaptor.illustrator.get_elements().removeClass('marked');
230
+
231
+ var vtarget = self.adaptor.illustrator.get_node_by_svg_id(svgid);
232
+ if (vtarget.length > 0) {
233
+ vtarget.parents('g.element[element-id]').addClass('selected');
234
+ }
235
+ self.adaptor.illustrator.get_label_by_svg_id(svgid).addClass('selected');
236
+
237
+ self.update_details(svgid);
238
+ }
239
+ } // }}}
240
+ this.events.dblclick = function(svgid, e) { // {{{
241
+ } // }}}
242
+ this.events.mouseover = function(svgid, e) { // {{{
243
+ self.adaptor.illustrator.svg.container.find('.tile[element-id = "' + svgid + '"]').css('display','block');
244
+ self.adaptor.illustrator.svg.container.find('[element-id = "' + svgid + '"]').addClass('hover');
245
+ self.adaptor.illustrator.svg.label_container.find('[element-id = "' + svgid + '"]').addClass('hover');
246
+ return false;
247
+ } // }}}
248
+ this.events.mouseout = function(svgid, e) { // {{{
249
+ self.adaptor.illustrator.svg.container.find('.tile[element-id = "' + svgid + '"]').css('display','none');
250
+ self.adaptor.illustrator.svg.container.find('[element-id = "' + svgid + '"]').removeClass('hover');
251
+ self.adaptor.illustrator.svg.label_container.find('[element-id = "' + svgid + '"]').removeClass('hover');
252
+ return false;
253
+ } // }}}
254
+ this.events.dragstart = function (svgid, e) { //{{{
255
+ } //}}}
256
+
257
+ // other resources
258
+ this.resources.arrow = self.adaptor.theme_dir + 'symbols/arrow.svg';
259
+
260
+ // Primitive Elements
261
+ this.elements.call = { /*{{{*/
262
+ 'type': 'primitive',
263
+ 'illustrator': {//{{{
264
+ 'endnodes': 'this',
265
+ 'label': function(node){
266
+ var rep = $('body').attr('current-resources');
267
+ var ep = self.endpoints[$(node).attr('endpoint')];
268
+ var wait = $('_timing_wait',$(node).children('annotations')).text();
269
+ var threshold = $('_timing_threshold',$(node).children('annotations')).text();
270
+ var adur = $('_timing_avg',$(node).children('annotations')).text();
271
+ var lab = $('> label',$(node).children('parameters')).text().replace(/^['"]/,'').replace(/['"]$/,'');
272
+ var ret = [ { column: 'ID', value: $(node).attr('id') } ];
273
+ if (lab != '') {
274
+ ret.unshift( { column: 'Label', value: lab } );
275
+ }
276
+ if (wait != '') {
277
+ ret.push({ column: 'Wait', value: 'ω = ' + wait });
278
+ }
279
+ if (threshold != '') {
280
+ ret.push({ column: 'Threshold', value: 'κ = ' + threshold });
281
+ }
282
+ if (adur != '') {
283
+ ret.push({ column: 'Duration', value: '~T = ' + adur + 'm' });
284
+ }
285
+ return ret;
286
+ },
287
+ 'info': function(node){ return { 'element-endpoint': $(node).attr('endpoint') }; },
288
+ 'resolve_symbol': function(node) {
289
+ if($('code', node).length > 0) {
290
+ return 'callmanipulate';
291
+ } else {
292
+ return 'call';
293
+ }
294
+ },
295
+ 'svg': self.adaptor.theme_dir + 'symbols/call.svg'
296
+ },//}}}
297
+ 'description': self.adaptor.theme_dir + 'rngs/call.rng',
298
+ 'permissible_children': function(node,mode) { //{{{
299
+ if(node.children('code').length < 1)
300
+ return [
301
+ {'label': 'Scripts',
302
+ 'function_call': self.adaptor.description.insert_last_into,
303
+ 'menu_icon': self.elements.callmanipulate.illustrator.svg.clone(),
304
+ 'type': undefined,
305
+ 'params': [self.adaptor.description.elements.scripts, node]}
306
+ ];
307
+ return [];
308
+ }, //}}}
309
+ 'adaptor': {//{{{
310
+ 'mousedown': function (node,e) { self.events.mousedown(node,e,true,true); },
311
+ 'click': self.events.click,
312
+ 'dragstart': self.events.dragstart,
313
+ 'mouseover': self.events.mouseover,
314
+ 'mouseout': self.events.mouseout
315
+ }//}}}
316
+ }; /*}}}*/
317
+ this.elements.manipulate = { /*{{{*/
318
+ 'type': 'primitive',
319
+ 'illustrator': {//{{{
320
+ 'endnodes': 'this',
321
+ 'label': function(node){
322
+ var lab = $(node).attr('label');
323
+ if (lab) {
324
+ return [ { column: 'Label', value: lab.replace(/^['"]/,'').replace(/['"]$/,'') }, { column: 'ID', value: $(node).attr('id') } ];
325
+ } else {
326
+ return [ { column: 'ID', value: $(node).attr('id') } ];
327
+ }
328
+ },
329
+ 'svg': self.adaptor.theme_dir + 'symbols/manipulate.svg'
330
+ },//}}}
331
+ 'description': self.adaptor.theme_dir + 'rngs/manipulate.rng',
332
+ 'permissible_children': function(node,mode) { //{{{
333
+ return [];
334
+ }, //}}}
335
+ 'adaptor': {//{{{
336
+ 'mousedown': function (node,e) { self.events.mousedown(node,e,false,true); },
337
+ 'click': self.events.click,
338
+ 'mouseover': self.events.mouseover,
339
+ 'mouseout': self.events.mouseout
340
+ }//}}}
341
+ }; /*}}}*/
342
+ this.elements.escape = { /*{{{*/
343
+ 'type': 'primitive',
344
+ 'illustrator': {//{{{
345
+ 'endnodes': 'this',
346
+ 'svg': self.adaptor.theme_dir + 'symbols/escape.svg'
347
+ },//}}}
348
+ 'description': self.adaptor.theme_dir + 'rngs/escape.rng',
349
+ 'permissible_children': function(node,mode) { //{{{
350
+ return [];
351
+ }, //}}}
352
+ 'adaptor': {//{{{
353
+ 'mousedown': function (node,e) { self.events.mousedown(node,e,false,true); },
354
+ 'click': self.events.click,
355
+ 'mouseover': self.events.mouseover,
356
+ 'mouseout': self.events.mouseout
357
+ }//}}}
358
+ }; /*}}}*/
359
+ this.elements.stop = { /*{{{*/
360
+ 'type': 'primitive',
361
+ 'illustrator': {//{{{
362
+ 'endnodes': 'this',
363
+ 'label': function(node){
364
+ return [ { column: 'ID', value: $(node).attr('id') } ];
365
+ },
366
+ 'svg': self.adaptor.theme_dir + 'symbols/stop.svg'
367
+ },//}}}
368
+ 'description': self.adaptor.theme_dir + 'rngs/stop.rng',
369
+ 'permissible_children': function(node,mode) { //{{{
370
+ return [];
371
+ }, //}}}
372
+ 'adaptor': {//{{{
373
+ 'mousedown': function (node,e) { self.events.mousedown(node,e,false,true); },
374
+ 'click': self.events.click,
375
+ 'mouseover': self.events.mouseover,
376
+ 'mouseout': self.events.mouseout
377
+ }//}}}
378
+ }; /*}}}*/
379
+ this.elements.terminate = { /*{{{*/
380
+ 'type': 'primitive',
381
+ 'illustrator': {//{{{
382
+ 'endnodes': 'this',
383
+ 'final': true,
384
+ 'svg': self.adaptor.theme_dir + 'symbols/terminate.svg'
385
+ },//}}}
386
+ 'description': self.adaptor.theme_dir + 'rngs/terminate.rng',
387
+ 'permissible_children': function(node,mode) { //{{{
388
+ return [];
389
+ }, //}}}
390
+ 'adaptor': {//{{{
391
+ 'mousedown': function (node,e) { self.events.mousedown(node,e,false,false); },
392
+ 'mouseover': self.events.mouseover,
393
+ 'mouseout': self.events.mouseout
394
+ }//}}}
395
+ }; /*}}}*/
396
+ this.elements.end = { /*{{{*/
397
+ 'type': 'primitive',
398
+ 'illustrator': {//{{{
399
+ 'endnodes': 'this',
400
+ 'svg': self.adaptor.theme_dir + 'symbols/end.svg'
401
+ }, //}}}
402
+ 'adaptor': {//{{{
403
+ 'mousedown': function (node,e) {
404
+ self.events.suppress();
405
+ }
406
+ }//}}}
407
+ }; /*}}}*/
408
+ this.elements.event_end = { /*{{{*/
409
+ 'type': 'primitive',
410
+ 'illustrator': {//{{{
411
+ 'endnodes': 'this',
412
+ 'svg': self.adaptor.theme_dir + 'symbols/event_end.svg'
413
+ }, //}}}
414
+ 'adaptor': {//{{{
415
+ 'mousedown': function (node,e) {
416
+ self.events.suppress();
417
+ },
418
+ 'click': self.events.click,
419
+ 'dblclick': self.events.dblclick,
420
+ 'mouseover': self.events.mouseover,
421
+ 'mouseout': self.events.mouseout
422
+ }//}}}
423
+ }; /*}}}*/
424
+ this.elements.choose_finish = { /*{{{*/
425
+ 'type': 'primitive',
426
+ 'illustrator': {//{{{
427
+ 'endnodes': 'this',
428
+ 'svg': self.adaptor.theme_dir + 'symbols/choose_inclusive.svg',
429
+ 'resolve_symbol': function(node) {
430
+ if($(node).attr('mode') == 'exclusive') {
431
+ return 'choose_exclusive_finish';
432
+ } else {
433
+ return 'choose_inclusive_finish';
434
+ }
435
+ },
436
+ }, //}}}
437
+ 'adaptor': {//{{{
438
+ 'mousedown': function (node,e) {
439
+ self.events.mousedown(node,e,true,true);
440
+ },
441
+ 'click': self.events.click,
442
+ 'dblclick': self.events.dblclick,
443
+ 'mouseover': self.events.mouseover,
444
+ 'mouseout': self.events.mouseout
445
+ }//}}}
446
+ }; /*}}}*/
447
+ this.elements.loop_finish = { /*{{{*/
448
+ 'type': 'primitive',
449
+ 'illustrator': {//{{{
450
+ 'endnodes': 'this',
451
+ 'closeblock': true,
452
+ 'label': function(node){
453
+ var avg = $('> _probability_avg',$(node).children('_probability')).text();
454
+ var ret = [ { column: 'Label', value: $(node).attr('condition') } ];
455
+ if (avg != '') {
456
+ ret.push({ column: 'Average', value: avg + 'x' });
457
+ }
458
+ return ret;
459
+ },
460
+ 'svg': self.adaptor.theme_dir + 'symbols/choose_exclusive.svg',
461
+ }, //}}}
462
+ 'adaptor': {//{{{
463
+ 'mousedown': function (node,e) {
464
+ self.events.mousedown(node,e,true,true);
465
+ },
466
+ 'click': self.events.click,
467
+ 'dblclick': self.events.dblclick,
468
+ 'mouseover': self.events.mouseover,
469
+ 'mouseout': self.events.mouseout
470
+ }//}}}
471
+ }; /*}}}*/
472
+ this.elements.parallel_finish = { /*{{{*/
473
+ 'type': 'primitive',
474
+ 'illustrator': {//{{{
475
+ 'endnodes': 'this',
476
+ 'svg': self.adaptor.theme_dir + 'symbols/parallel.svg',
477
+ 'resolve_symbol': function(node) {
478
+ if($(node).attr('wait') == '-1') {
479
+ return 'parallel_simple';
480
+ } else {
481
+ return 'parallel_complex';
482
+ }
483
+ },
484
+ }, //}}}
485
+ 'adaptor': {//{{{
486
+ 'mousedown': function (node,e) {
487
+ self.events.mousedown(node,e,true,true);
488
+ },
489
+ 'click': self.events.click,
490
+ 'dblclick': self.events.dblclick,
491
+ 'mouseover': self.events.mouseover,
492
+ 'mouseout': self.events.mouseout
493
+ }//}}}
494
+ }; /*}}}*/
495
+
496
+ // Complex Elements
497
+ this.elements.choose = { /*{{{*/
498
+ 'type': 'complex',
499
+ 'illustrator': {//{{{
500
+ 'label': function(node){ return [ { column: 'Label', value: $(node).attr('mode') == 'exclusive' ? 'exclusive' : 'inclusive' } ]; },
501
+ 'endnodes': 'aggregate',
502
+ 'closeblock': false,
503
+ 'closing_symbol': 'choose_finish',
504
+ 'expansion': function(node) {
505
+ return 'horizontal';
506
+ },
507
+ 'resolve_symbol': function(node) {
508
+ if($(node).attr('mode') == 'exclusive') {
509
+ return 'choose_exclusive';
510
+ } else {
511
+ return 'choose_inclusive';
512
+ }
513
+ },
514
+ 'col_shift': function(node) {
515
+ return false;
516
+ },
517
+ 'svg': self.adaptor.theme_dir + 'symbols/choose.svg'
518
+ },//}}}
519
+ 'description': self.adaptor.theme_dir + 'rngs/choose.rng',
520
+ 'permissible_children': function(node,mode) { //{{{
521
+ var func = null;
522
+ if (mode == 'into') { func = self.adaptor.description.insert_first_into }
523
+ else { func = self.adaptor.description.insert_after }
524
+ if(node.children('parallel_branch').length > 0) {
525
+ return [{'label': 'Parallel Branch',
526
+ 'function_call': func,
527
+ 'menu_icon': self.elements.parallel_branch.illustrator.svg.clone(),
528
+ 'type': 'parallel_branch',
529
+ 'params': [self.adaptor.description.elements.parallel_branch, node]}];
530
+ }
531
+ var childs = [{'label': 'Alternative',
532
+ 'function_call': func,
533
+ 'menu_icon': self.elements.alternative.illustrator.svg.clone(),
534
+ 'type': 'alternative',
535
+ 'params': [self.adaptor.description.elements.alternative, node]}];
536
+ if((node.children('otherwise').length == 0) && node.parents('parallel').length == node.parents('parallel_branch').length && node.parent('choose').length == 0)
537
+ childs.push({'label': 'Otherwise',
538
+ 'function_call': self.adaptor.description.insert_last_into,
539
+ 'menu_icon': self.elements.otherwise.illustrator.svg.clone(),
540
+ 'type': 'otherwise',
541
+ 'params': [self.adaptor.description.elements.otherwise, node]});
542
+ if(node.parents('parallel').length > node.parents('parallel_branch').length)
543
+ childs.push({'label': 'Parallel Branch',
544
+ 'function_call': func,
545
+ 'menu_icon': self.elements.parallel_branch.illustrator.svg.clone(),
546
+ 'type': 'parallel_branch',
547
+ 'params': [self.adaptor.description.elements.parallel_branch, node]});
548
+ return childs;
549
+ }, //}}}
550
+ 'adaptor': {//{{{
551
+ 'mousedown': function (node,e) {
552
+ self.events.mousedown(node,e,true,true);
553
+ },
554
+ 'click': self.events.click,
555
+ 'dblclick': self.events.dblclick,
556
+ 'mouseover': self.events.mouseover,
557
+ 'mouseout': self.events.mouseout
558
+ }//}}}
559
+ }; /*}}}*/
560
+ this.elements.otherwise = { /*{{{*/
561
+ 'type': 'complex',
562
+ 'illustrator': {//{{{
563
+ 'label': function(node){
564
+ var avg = $('> _probability_avg',$(node).children('_probability')).text();
565
+ return (avg == '' ? [] : [ { column: 'Average', value: avg + '%' } ]);
566
+ },
567
+ 'endnodes': 'passthrough',
568
+ 'closeblock': false,
569
+ 'noarrow': true,
570
+ 'expansion': function(node) {
571
+ return 'vertical';
572
+ },
573
+ 'col_shift': function(node) {
574
+ return false;
575
+ },
576
+ 'svg': self.adaptor.theme_dir + 'symbols/otherwise.svg'
577
+ },//}}}
578
+ 'description': self.adaptor.theme_dir + 'rngs/otherwise.rng',
579
+ 'neverdelete': true,
580
+ 'permissible_children': function(node,mode) { //{{{
581
+ var func = null;
582
+ var childs = null;
583
+ if (mode == 'into') { func = self.adaptor.description.insert_first_into }
584
+ else { func = self.adaptor.description.insert_after }
585
+ var childs = [
586
+ {'label': 'Service Call with Scripts',
587
+ 'function_call': func,
588
+ 'menu_icon': self.elements.callmanipulate.illustrator.svg.clone(),
589
+ 'type': 'callmanipulate',
590
+ 'params': [self.adaptor.description.elements.callmanipulate, node]},
591
+ {'label': 'Service Call',
592
+ 'function_call': func,
593
+ 'menu_icon': self.elements.call.illustrator.svg.clone(),
594
+ 'type': 'call',
595
+ 'params': [self.adaptor.description.elements.call, node]},
596
+ {'label': 'Script',
597
+ 'function_call': func,
598
+ 'menu_icon': self.elements.manipulate.illustrator.svg.clone(),
599
+ 'type': 'manipulate',
600
+ 'params': [self.adaptor.description.elements.manipulate, node]},
601
+ {'label': 'Parallel',
602
+ 'function_call': func,
603
+ 'menu_icon': self.elements.parallel.illustrator.svg.clone(),
604
+ 'type': 'parallel',
605
+ 'params': [self.adaptor.description.elements.parallel, node]},
606
+ {'label': 'Decision',
607
+ 'function_call': func,
608
+ 'menu_icon': self.elements.choose.illustrator.svg.clone(),
609
+ 'type': 'choose',
610
+ 'params': [self.adaptor.description.elements.choose, node]},
611
+ {'label': 'Loop',
612
+ 'function_call': func,
613
+ 'menu_icon': self.elements.loop.illustrator.svg.clone(),
614
+ 'type': 'loop',
615
+ 'params': [self.adaptor.description.elements.loop, node]},
616
+ {'label': 'Closed Loop',
617
+ 'function_call': func,
618
+ 'menu_icon': self.elements.closed_loop.illustrator.svg.clone(),
619
+ 'type': 'closed_loop',
620
+ 'params': [self.adaptor.description.elements.closed_loop, node]},
621
+ {'label': 'Terminate',
622
+ 'function_call': func,
623
+ 'menu_icon': self.elements.terminate.illustrator.svg.clone(),
624
+ 'type': 'terminate',
625
+ 'params': [self.adaptor.description.elements.terminate, node]},
626
+ {'label': 'Stop',
627
+ 'function_call': func,
628
+ 'menu_icon': self.elements.stop.illustrator.svg.clone(),
629
+ 'type': 'stop',
630
+ 'params': [self.adaptor.description.elements.stop, node]}
631
+ ];
632
+ if(node.parent('parallel_branch').length > 0) {
633
+ childs.push({
634
+ 'label': 'Critical',
635
+ 'function_call': func,
636
+ 'menu_icon': self.elements.critical.illustrator.svg.clone(),
637
+ 'type': 'critical',
638
+ 'params': [self.adaptor.description.elements.critical, node]
639
+ });
640
+ }
641
+ return childs;
642
+ }, //}}}
643
+ 'adaptor': {//{{{
644
+ 'mousedown': function (node,e) {
645
+ self.events.mousedown(node,e,true,false);
646
+ },
647
+ 'click': self.events.click,
648
+ 'dblclick': self.events.dblclick,
649
+ 'mouseover': self.events.mouseover,
650
+ 'mouseout': self.events.mouseout,
651
+ }//}}}
652
+ }; /*}}}*/
653
+ this.elements.alternative = { /*{{{*/
654
+ 'type': 'complex',
655
+ 'illustrator': {//{{{
656
+ 'label': function(node){
657
+ var avg = $('> _probability_avg',$(node).children('_probability')).text();
658
+ var ret = [ { column: 'Label', value: $(node).attr('condition') } ];
659
+ if (avg != '') {
660
+ ret.push({ column: 'Average', value: avg + '%' });
661
+ }
662
+ return ret;
663
+ },
664
+ 'endnodes': 'passthrough',
665
+ 'noarrow': true,
666
+ 'closeblock':false,
667
+ 'expansion': function(node) {
668
+ return 'vertical';
669
+ },
670
+ 'col_shift': function(node) {
671
+ return false;
672
+ },
673
+ 'svg': self.adaptor.theme_dir + 'symbols/alternative.svg'
674
+ },//}}}
675
+ 'description': self.adaptor.theme_dir + 'rngs/alternative.rng',
676
+ 'permissible_children': function(node,mode) { //{{{
677
+ if (mode == 'into') { func = self.adaptor.description.insert_first_into }
678
+ else { func = self.adaptor.description.insert_after }
679
+ if(node.parents('parallel').length > node.parents('parallel_branch').length && node.get(0).tagName == 'alternative') {
680
+ return [{'label': 'Parallel Branch',
681
+ 'function_call': func,
682
+ 'menu_icon': self.elements.parallel_branch.illustrator.svg.clone(),
683
+ 'type': 'parallel_branch',
684
+ 'params': [self.adaptor.description.elements.parallel_branch, node]}];
685
+ }
686
+ var childs = [
687
+ {'label': 'Service Call with Scripts',
688
+ 'function_call': func,
689
+ 'menu_icon': self.elements.callmanipulate.illustrator.svg.clone(),
690
+ 'type': 'callmanipulate',
691
+ 'params': [self.adaptor.description.elements.callmanipulate, node]},
692
+ {'label': 'Service Call',
693
+ 'function_call': func,
694
+ 'menu_icon': self.elements.call.illustrator.svg.clone(),
695
+ 'type': 'call',
696
+ 'params': [self.adaptor.description.elements.call, node]},
697
+ {'label': 'Script',
698
+ 'function_call': func,
699
+ 'menu_icon': self.elements.manipulate.illustrator.svg.clone(),
700
+ 'type': 'manipulate',
701
+ 'params': [self.adaptor.description.elements.manipulate, node]},
702
+ {'label': 'Parallel',
703
+ 'function_call': func,
704
+ 'menu_icon': self.elements.parallel.illustrator.svg.clone(),
705
+ 'type': 'parallel',
706
+ 'params': [self.adaptor.description.elements.parallel, node]},
707
+ {'label': 'Decision',
708
+ 'function_call': func,
709
+ 'menu_icon': self.elements.choose.illustrator.svg.clone(),
710
+ 'type': 'choose',
711
+ 'params': [self.adaptor.description.elements.choose, node]},
712
+ {'label': 'Loop',
713
+ 'function_call': func,
714
+ 'menu_icon': self.elements.loop.illustrator.svg.clone(),
715
+ 'type': 'loop',
716
+ 'params': [self.adaptor.description.elements.loop, node]},
717
+ {'label': 'Closed Loop',
718
+ 'function_call': func,
719
+ 'menu_icon': self.elements.closed_loop.illustrator.svg.clone(),
720
+ 'type': 'closed_loop',
721
+ 'params': [self.adaptor.description.elements.closed_loop, node]},
722
+ {'label': 'Terminate',
723
+ 'function_call': func,
724
+ 'menu_icon': self.elements.terminate.illustrator.svg.clone(),
725
+ 'type': 'terminate',
726
+ 'params': [self.adaptor.description.elements.terminate, node]},
727
+ {'label': 'Stop',
728
+ 'function_call': func,
729
+ 'menu_icon': self.elements.stop.illustrator.svg.clone(),
730
+ 'type': 'stop',
731
+ 'params': [self.adaptor.description.elements.stop, node]}
732
+ ];
733
+ if(node.parent('parallel_branch').length > 0) {
734
+ childs.push({
735
+ 'label': 'Critical',
736
+ 'function_call': func,
737
+ 'menu_icon': self.elements.critical.illustrator.svg.clone(),
738
+ 'type': 'critical',
739
+ 'params': [self.adaptor.description.elements.critical, node]
740
+ });
741
+ }
742
+ return childs;
743
+ }, //}}}
744
+ 'adaptor': {//{{{
745
+ 'mousedown': function (node,e) {
746
+ self.events.mousedown(node,e,true,true);
747
+ },
748
+ 'click': self.events.click,
749
+ 'dblclick': self.events.dblclick,
750
+ 'mouseover': self.events.mouseover,
751
+ 'mouseout': self.events.mouseout,
752
+ }//}}}
753
+ }; /*}}}*/
754
+ this.elements.loop = { /*{{{*/
755
+ 'type': 'complex',
756
+ 'illustrator': {//{{{
757
+ 'resolve_symbol': function(node) {
758
+ if($(node).attr('mode') == 'pre_test') {
759
+ return 'loop_head';
760
+ } else {
761
+ return 'loop_tail';
762
+ }
763
+ },
764
+ 'expansion': function(node) {
765
+ return 'vertical';
766
+ },
767
+ 'col_shift': function(node) {
768
+ return true;
769
+ },
770
+ 'svg': self.adaptor.theme_dir + 'symbols/loop.svg'
771
+ },// }}}
772
+ 'description': self.adaptor.theme_dir + 'rngs/loop.rng',
773
+ 'permissible_children': function(node,mode) { //{{{
774
+ var func = null;
775
+ if (mode == 'into') { func = self.adaptor.description.insert_first_into }
776
+ else { func = self.adaptor.description.insert_after }
777
+ var childs = [
778
+ {'label': 'Service Call with Scripts',
779
+ 'function_call': func,
780
+ 'menu_icon': self.elements.callmanipulate.illustrator.svg.clone(),
781
+ 'type': 'callmanipulate',
782
+ 'params': [self.adaptor.description.elements.callmanipulate, node]},
783
+ {'label': 'Service Call',
784
+ 'function_call': func,
785
+ 'menu_icon': self.elements.call.illustrator.svg.clone(),
786
+ 'type': 'call',
787
+ 'params': [self.adaptor.description.elements.call, node]},
788
+ {'label': 'Script',
789
+ 'function_call': func,
790
+ 'menu_icon': self.elements.manipulate.illustrator.svg.clone(),
791
+ 'type': 'manipulate',
792
+ 'params': [self.adaptor.description.elements.manipulate, node]},
793
+ {'label': 'Decision',
794
+ 'function_call': func,
795
+ 'menu_icon': self.elements.choose.illustrator.svg.clone(),
796
+ 'type': 'choose',
797
+ 'params': [self.adaptor.description.elements.choose, node]},
798
+ {'label': 'Loop',
799
+ 'function_call': func,
800
+ 'menu_icon': self.elements.loop.illustrator.svg.clone(),
801
+ 'type': 'loop',
802
+ 'params': [self.adaptor.description.elements.loop, node]},
803
+ {'label': 'Closed Loop',
804
+ 'function_call': func,
805
+ 'menu_icon': self.elements.closed_loop.illustrator.svg.clone(),
806
+ 'type': 'closed_loop',
807
+ 'params': [self.adaptor.description.elements.closed_loop, node]},
808
+ {'label': 'Terminate',
809
+ 'function_call': func,
810
+ 'menu_icon': self.elements.terminate.illustrator.svg.clone(),
811
+ 'type': 'terminate',
812
+ 'params': [self.adaptor.description.elements.terminate, node]},
813
+ {'label': 'Stop',
814
+ 'function_call': func,
815
+ 'menu_icon': self.elements.stop.illustrator.svg.clone(),
816
+ 'type': 'stop',
817
+ 'params': [self.adaptor.description.elements.stop, node]}
818
+ ];
819
+ if(node.parent('parallel_branch').length > 0) {
820
+ childs.push({
821
+ 'label': 'Critical',
822
+ 'function_call': func,
823
+ 'menu_icon': self.elements.critical.illustrator.svg.clone(),
824
+ 'type': 'critical',
825
+ 'params': [self.adaptor.description.elements.critical, node]
826
+ });
827
+ }
828
+ if(node.parent('parallel').length > node.parent('parallel_branch').length) {
829
+ childs.push({'label': 'Parallel Branch',
830
+ 'function_call': func,
831
+ 'menu_icon': self.elements.parallel_branch.illustrator.svg.clone(),
832
+ 'type': 'parallel_branch',
833
+ 'params': [self.adaptor.description.elements.parallel_branch, node]}
834
+ );
835
+ } else {
836
+ childs.push({'label': 'Parallel',
837
+ 'function_call': func,
838
+ 'menu_icon': self.elements.parallel.illustrator.svg.clone(),
839
+ 'type': 'parallel',
840
+ 'params': [self.adaptor.description.elements.parallel, node]}
841
+ );
842
+ }
843
+ return childs;
844
+ }, //}}}
845
+ 'adaptor': {//{{{
846
+ 'mousedown': function (node,e) {
847
+ self.events.mousedown(node,e,true,true);
848
+ },
849
+ 'click': self.events.click,
850
+ 'dblclick': self.events.dblclick,
851
+ 'mouseover': self.events.mouseover,
852
+ 'mouseout': self.events.mouseout,
853
+ }//}}}
854
+ }; /*}}}*/
855
+ this.elements.closed_loop = { /*{{{*/
856
+ 'type': 'complex',
857
+ 'illustrator': {//{{{
858
+ 'endnodes': 'aggregate',
859
+ 'closeblock': false,
860
+ 'col_shift': function(node) {
861
+ return true;
862
+ },
863
+ 'closing_symbol': 'closed_loop_finish',
864
+ 'expansion': function(node) {
865
+ return 'horizontal';
866
+ },
867
+ 'label': function(node){
868
+ var avg = $('> _probability_avg',$(node).children('_probability')).text();
869
+ var ret = [ { column: 'Label', value: 'f = ' + $(node).attr('frequency') + ' Hz (' + $(node).attr('overrun') + ')' } ];
870
+ if (avg != '') {
871
+ ret.push({ column: 'Average', value: avg + '%' });
872
+ }
873
+ return ret;
874
+ },
875
+ 'svg': self.adaptor.theme_dir + 'symbols/closed_loop.svg'
876
+ },//}}}
877
+ 'description': self.adaptor.theme_dir + 'rngs/closed_loop.rng',
878
+ 'permissible_children': function(node,mode) { //{{{
879
+ var func = null;
880
+ if (mode == 'into') { func = self.adaptor.description.insert_first_into }
881
+ else { func = self.adaptor.description.insert_after }
882
+ var childs = [
883
+ {'label': 'Measuring',
884
+ 'function_call': func,
885
+ 'menu_icon': self.elements.closed_loop_measuring.illustrator.svg.clone(),
886
+ 'type': 'closed_loop_measuring',
887
+ 'params': [self.adaptor.description.elements.closed_loop_measuring, node]} ,
888
+ {'label': 'Control',
889
+ 'function_call': func,
890
+ 'menu_icon': self.elements.closed_loop_control.illustrator.svg.clone(),
891
+ 'type': 'closed_loop_control',
892
+ 'params': [self.adaptor.description.elements.closed_loop_control, node]},
893
+ {'label': 'Cancel',
894
+ 'function_call': func,
895
+ 'menu_icon': self.elements.closed_loop_cancel.illustrator.svg.clone(),
896
+ 'type': 'closed_loop_cancel',
897
+ 'params': [self.adaptor.description.elements.closed_loop_cancel, node]}
898
+ ];
899
+ return childs;
900
+ }, //}}}
901
+ 'adaptor': {//{{{
902
+ 'mousedown': function (node,e) {
903
+ self.events.mousedown(node,e,true,true);
904
+ },
905
+ 'click': self.events.click,
906
+ 'dblclick': self.events.dblclick,
907
+ 'mouseover': self.events.mouseover,
908
+ 'mouseout': self.events.mouseout,
909
+ }//}}}
910
+ }; /*}}}*/
911
+ this.elements.closed_loop_measuring = { /*{{{*/
912
+ 'type': 'complex',
913
+ 'illustrator': {//{{{
914
+ 'endnodes': 'passthrough',
915
+ 'closeblock': false,
916
+ 'noarrow': true,
917
+ 'expansion': function(node) {
918
+ return 'vertical';
919
+ },
920
+ 'col_shift': function(node) {
921
+ return false;
922
+ },
923
+ 'label': function(node){
924
+ var vals = $('> value',$(node).children('_expected')).text();
925
+ var ret = [ { column: 'Label', value: 'measure ' + vals } ];
926
+ return ret;
927
+ },
928
+ 'svg': self.adaptor.theme_dir + 'symbols/closed_loop_measuring.svg'
929
+ },//}}}
930
+ 'description': self.adaptor.theme_dir + 'rngs/closed_loop_measuring.rng',
931
+ 'permissible_children': function(node,mode) { //{{{
932
+ var func = null;
933
+ if (mode == 'into') { func = self.adaptor.description.insert_first_into }
934
+ else { func = self.adaptor.description.insert_after }
935
+ var childs = [
936
+ {'label': 'Service Call with Scripts',
937
+ 'function_call': func,
938
+ 'menu_icon': self.elements.callmanipulate.illustrator.svg.clone(),
939
+ 'type': 'callmanipulate',
940
+ 'params': [self.adaptor.description.elements.callmanipulate, node]},
941
+ {'label': 'Service Call',
942
+ 'function_call': func,
943
+ 'menu_icon': self.elements.call.illustrator.svg.clone(),
944
+ 'type': 'call',
945
+ 'params': [self.adaptor.description.elements.call, node]},
946
+ {'label': 'Script',
947
+ 'function_call': func,
948
+ 'menu_icon': self.elements.manipulate.illustrator.svg.clone(),
949
+ 'type': 'manipulate',
950
+ 'params': [self.adaptor.description.elements.manipulate, node]},
951
+ {'label': 'Parallel',
952
+ 'function_call': func,
953
+ 'menu_icon': self.elements.parallel.illustrator.svg.clone(),
954
+ 'type': 'parallel',
955
+ 'params': [self.adaptor.description.elements.parallel, node]},
956
+ {'label': 'Decision',
957
+ 'function_call': func,
958
+ 'menu_icon': self.elements.choose.illustrator.svg.clone(),
959
+ 'type': 'choose',
960
+ 'params': [self.adaptor.description.elements.choose, node]},
961
+ {'label': 'Loop',
962
+ 'function_call': func,
963
+ 'menu_icon': self.elements.loop.illustrator.svg.clone(),
964
+ 'type': 'loop',
965
+ 'params': [self.adaptor.description.elements.loop, node]},
966
+ {'label': 'Stop',
967
+ 'function_call': func,
968
+ 'menu_icon': self.elements.stop.illustrator.svg.clone(),
969
+ 'type': 'stop',
970
+ 'params': [self.adaptor.description.elements.stop, node]}
971
+ ];
972
+ return childs;
973
+ }, //}}}
974
+ 'adaptor': {//{{{
975
+ 'mousedown': function (node,e) {
976
+ self.events.mousedown(node,e,true,true);
977
+ },
978
+ 'click': self.events.click,
979
+ 'dblclick': self.events.dblclick,
980
+ 'mouseover': self.events.mouseover,
981
+ 'mouseout': self.events.mouseout,
982
+ }//}}}
983
+ }; /*}}}*/
984
+ this.elements.closed_loop_control = { /*{{{*/
985
+ 'type': 'complex',
986
+ 'illustrator': {//{{{
987
+ 'endnodes': 'passthrough',
988
+ 'closeblock': false,
989
+ 'noarrow': true,
990
+ 'expansion': function(node) {
991
+ return 'vertical';
992
+ },
993
+ 'col_shift': function(node) {
994
+ return false;
995
+ },
996
+ 'label': function(node){
997
+ var vals = [];
998
+ $('> change > value',$(node).children('_expected')).each((k,v) => {
999
+ vals.push($(v).text());
1000
+ });
1001
+ var ret = [ { column: 'Label', value: 'control ' + vals.join(', ') } ];
1002
+ return ret;
1003
+ },
1004
+ 'svg': self.adaptor.theme_dir + 'symbols/closed_loop_control.svg'
1005
+ },//}}}
1006
+ 'description': self.adaptor.theme_dir + 'rngs/closed_loop_control.rng',
1007
+ 'permissible_children': function(node,mode) { //{{{
1008
+ var func = null;
1009
+ if (mode == 'into') { func = self.adaptor.description.insert_first_into }
1010
+ else { func = self.adaptor.description.insert_after }
1011
+ var childs = [
1012
+ {'label': 'Service Call with Scripts',
1013
+ 'function_call': func,
1014
+ 'menu_icon': self.elements.callmanipulate.illustrator.svg.clone(),
1015
+ 'type': 'callmanipulate',
1016
+ 'params': [self.adaptor.description.elements.callmanipulate, node]},
1017
+ {'label': 'Service Call',
1018
+ 'function_call': func,
1019
+ 'menu_icon': self.elements.call.illustrator.svg.clone(),
1020
+ 'type': 'call',
1021
+ 'params': [self.adaptor.description.elements.call, node]},
1022
+ {'label': 'Script',
1023
+ 'function_call': func,
1024
+ 'menu_icon': self.elements.manipulate.illustrator.svg.clone(),
1025
+ 'type': 'manipulate',
1026
+ 'params': [self.adaptor.description.elements.manipulate, node]},
1027
+ {'label': 'Parallel',
1028
+ 'function_call': func,
1029
+ 'menu_icon': self.elements.parallel.illustrator.svg.clone(),
1030
+ 'type': 'parallel',
1031
+ 'params': [self.adaptor.description.elements.parallel, node]},
1032
+ {'label': 'Decision',
1033
+ 'function_call': func,
1034
+ 'menu_icon': self.elements.choose.illustrator.svg.clone(),
1035
+ 'type': 'choose',
1036
+ 'params': [self.adaptor.description.elements.choose, node]},
1037
+ {'label': 'Loop',
1038
+ 'function_call': func,
1039
+ 'menu_icon': self.elements.loop.illustrator.svg.clone(),
1040
+ 'type': 'loop',
1041
+ 'params': [self.adaptor.description.elements.loop, node]},
1042
+ {'label': 'Closed Loop',
1043
+ 'function_call': func,
1044
+ 'menu_icon': self.elements.closed_loop.illustrator.svg.clone(),
1045
+ 'type': 'closed_loop',
1046
+ 'params': [self.adaptor.description.elements.closed_loop, node]},
1047
+ {'label': 'Stop',
1048
+ 'function_call': func,
1049
+ 'menu_icon': self.elements.stop.illustrator.svg.clone(),
1050
+ 'type': 'stop',
1051
+ 'params': [self.adaptor.description.elements.stop, node]}
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.closed_loop_cancel = { /*{{{*/
1066
+ 'type': 'complex',
1067
+ 'illustrator': {//{{{
1068
+ 'endnodes': 'passthrough',
1069
+ 'closeblock': false,
1070
+ 'noarrow': true,
1071
+ 'expansion': function(node) {
1072
+ return 'vertical';
1073
+ },
1074
+ 'col_shift': function(node) {
1075
+ return false;
1076
+ },
1077
+ 'label': function(node){
1078
+ var ret = [ { column: 'Label', value: $(node).attr('condition') } ];
1079
+ return ret;
1080
+ },
1081
+ 'svg': self.adaptor.theme_dir + 'symbols/closed_loop_cancel.svg'
1082
+ },//}}}
1083
+ 'description': self.adaptor.theme_dir + 'rngs/closed_loop_cancel.rng',
1084
+ 'permissible_children': function(node,mode) { //{{{
1085
+ var func = null;
1086
+ if (mode == 'into') { func = self.adaptor.description.insert_first_into }
1087
+ else { func = self.adaptor.description.insert_after }
1088
+ var childs = [
1089
+ {'label': 'Service Call with Scripts',
1090
+ 'function_call': func,
1091
+ 'menu_icon': self.elements.callmanipulate.illustrator.svg.clone(),
1092
+ 'type': 'callmanipulate',
1093
+ 'params': [self.adaptor.description.elements.callmanipulate, node]},
1094
+ {'label': 'Service Call',
1095
+ 'function_call': func,
1096
+ 'menu_icon': self.elements.call.illustrator.svg.clone(),
1097
+ 'type': 'call',
1098
+ 'params': [self.adaptor.description.elements.call, node]},
1099
+ {'label': 'Script',
1100
+ 'function_call': func,
1101
+ 'menu_icon': self.elements.manipulate.illustrator.svg.clone(),
1102
+ 'type': 'manipulate',
1103
+ 'params': [self.adaptor.description.elements.manipulate, node]},
1104
+ {'label': 'Parallel',
1105
+ 'function_call': func,
1106
+ 'menu_icon': self.elements.parallel.illustrator.svg.clone(),
1107
+ 'type': 'parallel',
1108
+ 'params': [self.adaptor.description.elements.parallel, node]},
1109
+ {'label': 'Decision',
1110
+ 'function_call': func,
1111
+ 'menu_icon': self.elements.choose.illustrator.svg.clone(),
1112
+ 'type': 'choose',
1113
+ 'params': [self.adaptor.description.elements.choose, node]},
1114
+ {'label': 'Loop',
1115
+ 'function_call': func,
1116
+ 'menu_icon': self.elements.loop.illustrator.svg.clone(),
1117
+ 'type': 'loop',
1118
+ 'params': [self.adaptor.description.elements.loop, node]},
1119
+ {'label': 'Stop',
1120
+ 'function_call': func,
1121
+ 'menu_icon': self.elements.stop.illustrator.svg.clone(),
1122
+ 'type': 'stop',
1123
+ 'params': [self.adaptor.description.elements.stop, node]}
1124
+ ];
1125
+ return childs;
1126
+ }, //}}}
1127
+ 'adaptor': {//{{{
1128
+ 'mousedown': function (node,e) {
1129
+ self.events.mousedown(node,e,true,true);
1130
+ },
1131
+ 'click': self.events.click,
1132
+ 'dblclick': self.events.dblclick,
1133
+ 'mouseover': self.events.mouseover,
1134
+ 'mouseout': self.events.mouseout,
1135
+ }//}}}
1136
+ }; /*}}}*/
1137
+ this.elements.parallel = { /*{{{*/
1138
+ 'type': 'complex',
1139
+ 'illustrator': {//{{{
1140
+ 'endnodes': 'aggregate',
1141
+ 'closeblock': false,
1142
+ 'closing_symbol': 'parallel_finish',
1143
+ 'expansion': function(node) {
1144
+ // check if any sibling other than 'parallel_branch' is present
1145
+ if($(node).children(':not(parallel_branch)').length > 0) return 'vertical';
1146
+ return 'horizontal';
1147
+ },
1148
+ 'col_shift': function(node) {
1149
+ return true;
1150
+ },
1151
+ 'svg': self.adaptor.theme_dir + 'symbols/parallel.svg'
1152
+ },//}}}
1153
+ 'description': self.adaptor.theme_dir + 'rngs/parallel.rng',
1154
+ 'permissible_children': function(node,mode) { //{{{
1155
+ var func = null;
1156
+ if (mode == 'into') { func = self.adaptor.description.insert_first_into }
1157
+ else { func = self.adaptor.description.insert_after }
1158
+ var childs = [
1159
+ {'label': 'Parallel Branch',
1160
+ 'function_call': func,
1161
+ 'menu_icon': self.elements.parallel_branch.illustrator.svg.clone(),
1162
+ 'type': 'parallel_branch',
1163
+ 'params': [self.adaptor.description.elements.parallel_branch, node]},
1164
+ ];
1165
+ return childs;
1166
+ }, //}}}
1167
+ 'permissible_children_expert': function(node,mode) { //{{{
1168
+ var func = null;
1169
+ if (mode.match(/into/)) { func = self.adaptor.description.insert_first_into }
1170
+ else { func = self.adaptor.description.insert_after }
1171
+ var childs = [
1172
+ {'label': 'Service Call with Scripts',
1173
+ 'function_call': func,
1174
+ 'menu_icon': self.elements.callmanipulate.illustrator.svg.clone(),
1175
+ 'type': 'callmanipulate',
1176
+ 'params': [self.adaptor.description.elements.callmanipulate, node]},
1177
+ {'label': 'Service Call',
1178
+ 'function_call': func,
1179
+ 'menu_icon': self.elements.call.illustrator.svg.clone(),
1180
+ 'type': 'call',
1181
+ 'params': [self.adaptor.description.elements.call, node]},
1182
+ {'label': 'Script',
1183
+ 'function_call': func,
1184
+ 'menu_icon': self.elements.manipulate.illustrator.svg.clone(),
1185
+ 'type': 'manipulate',
1186
+ 'params': [self.adaptor.description.elements.manipulate, node]},
1187
+ {'label': 'Decision',
1188
+ 'function_call': func,
1189
+ 'menu_icon': self.elements.choose.illustrator.svg.clone(),
1190
+ 'type': 'choose',
1191
+ 'params': [self.adaptor.description.elements.choose, node]},
1192
+ {'label': 'Loop',
1193
+ 'function_call': func,
1194
+ 'menu_icon': self.elements.loop.illustrator.svg.clone(),
1195
+ 'type': 'loop',
1196
+ 'params': [self.adaptor.description.elements.loop, node]},
1197
+ {'label': 'Closed Loop',
1198
+ 'function_call': func,
1199
+ 'menu_icon': self.elements.closed_loop.illustrator.svg.clone(),
1200
+ 'type': 'closed_loop',
1201
+ 'params': [self.adaptor.description.elements.closed_loop, node]},
1202
+ {'label': 'Stop',
1203
+ 'function_call': func,
1204
+ 'menu_icon': self.elements.stop.illustrator.svg.clone(),
1205
+ 'type': 'stop',
1206
+ 'params': [self.adaptor.description.elements.stop, node]}
1207
+ ];
1208
+ if(node.get(0).tagName != 'parallel')
1209
+ childs.push({'label': 'Parallel',
1210
+ 'function_call': self.adaptor.description.insert_last_into,
1211
+ 'menu_icon': self.elements.parallel.illustrator.svg.clone(),
1212
+ 'type': 'parallel',
1213
+ 'params': [self.adaptor.description.elements.parallel, node]});
1214
+ return childs;
1215
+ }, //}}}
1216
+ 'adaptor': {//{{{
1217
+ 'mousedown': function (node,e) {
1218
+ self.events.mousedown(node,e,true,true);
1219
+ },
1220
+ 'click': self.events.click,
1221
+ 'dblclick': self.events.dblclick,
1222
+ 'mouseover': self.events.mouseover,
1223
+ 'mouseout': self.events.mouseout,
1224
+ }//}}}
1225
+ }; /*}}}*/
1226
+ this.elements.parallel_branch = { /*{{{*/
1227
+ 'type': 'complex',
1228
+ 'illustrator': {//{{{
1229
+ 'endnodes': 'passthrough',
1230
+ 'closeblock': false,
1231
+ 'noarrow': true,
1232
+ 'expansion': function(node) {
1233
+ return 'vertical';
1234
+ },
1235
+ 'resolve_symbol': function(node,shift) {
1236
+ if(shift == true) {
1237
+ return 'parallel_branch_event';
1238
+ } else {
1239
+ return 'parallel_branch_normal';
1240
+ }
1241
+ },
1242
+ 'col_shift': function(node) {
1243
+ if(node.parentNode.tagName == 'choose') return false;
1244
+ if($(node).parents('parallel').first().children(':not(parallel_branch)').length > 0) return true;
1245
+ return false;
1246
+ },
1247
+ 'svg': self.adaptor.theme_dir + 'symbols/parallel_branch.svg'
1248
+ },//}}}
1249
+ 'description': self.adaptor.theme_dir + 'rngs/parallel_branch.rng',
1250
+ 'permissible_children': function(node,mode) { //{{{
1251
+ var func = null;
1252
+ if (mode == 'into') { func = self.adaptor.description.insert_first_into }
1253
+ else { func = self.adaptor.description.insert_after }
1254
+ var childs = [
1255
+ {'label': 'Service Call with Scripts',
1256
+ 'function_call': func,
1257
+ 'menu_icon': self.elements.callmanipulate.illustrator.svg.clone(),
1258
+ 'type': 'callmanipulate',
1259
+ 'params': [self.adaptor.description.elements.callmanipulate, node]},
1260
+ {'label': 'Service Call',
1261
+ 'function_call': func,
1262
+ 'menu_icon': self.elements.call.illustrator.svg.clone(),
1263
+ 'type': 'call',
1264
+ 'params': [self.adaptor.description.elements.call, node]},
1265
+ {'label': 'Script',
1266
+ 'function_call': func,
1267
+ 'menu_icon': self.elements.manipulate.illustrator.svg.clone(),
1268
+ 'type': 'manipulate',
1269
+ 'params': [self.adaptor.description.elements.manipulate, node]},
1270
+ {'label': 'Parallel',
1271
+ 'function_call': func,
1272
+ 'menu_icon': self.elements.parallel.illustrator.svg.clone(),
1273
+ 'type': 'parallel',
1274
+ 'params': [self.adaptor.description.elements.parallel, node]},
1275
+ {'label': 'Decision',
1276
+ 'function_call': func,
1277
+ 'menu_icon': self.elements.choose.illustrator.svg.clone(),
1278
+ 'type': 'choose',
1279
+ 'params': [self.adaptor.description.elements.choose, node]},
1280
+ {'label': 'Loop',
1281
+ 'function_call': func,
1282
+ 'menu_icon': self.elements.loop.illustrator.svg.clone(),
1283
+ 'type': 'loop',
1284
+ 'params': [self.adaptor.description.elements.loop, node]},
1285
+ {'label': 'Closed Loop',
1286
+ 'function_call': func,
1287
+ 'menu_icon': self.elements.closed_loop.illustrator.svg.clone(),
1288
+ 'type': 'closed_loop',
1289
+ 'params': [self.adaptor.description.elements.closed_loop, node]},
1290
+ {'label': 'Terminate',
1291
+ 'function_call': func,
1292
+ 'menu_icon': self.elements.terminate.illustrator.svg.clone(),
1293
+ 'type': 'terminate',
1294
+ 'params': [self.adaptor.description.elements.terminate, node]},
1295
+ {'label': 'Stop',
1296
+ 'function_call': func,
1297
+ 'menu_icon': self.elements.stop.illustrator.svg.clone(),
1298
+ 'type': 'stop',
1299
+ 'params': [self.adaptor.description.elements.stop, node]},
1300
+ {'label': 'Critical',
1301
+ 'function_call': func,
1302
+ 'menu_icon': self.elements.critical.illustrator.svg.clone(),
1303
+ 'type': 'critical',
1304
+ 'params': [self.adaptor.description.elements.critical, node]}
1305
+ ];
1306
+ if(node.parents('choose').length > node.parents('alternative, otherwise').length && node.get(0).tagName == 'parallel_branch') {
1307
+ return [{'label': 'Alternative',
1308
+ 'function_call': func,
1309
+ 'menu_icon': self.elements.alternative.illustrator.svg.clone(),
1310
+ 'type': 'alternative',
1311
+ 'params': [self.adaptor.description.elements.alternative, node]}];
1312
+ }
1313
+ return childs;
1314
+ }, //}}}
1315
+ 'adaptor': {//{{{
1316
+ 'mousedown': function (node,e) {
1317
+ self.events.mousedown(node,e,true,true);
1318
+ },
1319
+ 'click': self.events.click,
1320
+ 'dblclick': self.events.dblclick,
1321
+ 'mouseover': self.events.mouseover,
1322
+ 'mouseout': self.events.mouseout,
1323
+ }//}}}
1324
+ }; /*}}}*/
1325
+ this.elements.critical = { /*{{{*/
1326
+ 'type': 'complex',
1327
+ 'illustrator': {//{{{
1328
+ 'endnodes': 'aggregate',
1329
+ 'closeblock': false,
1330
+ 'border': true,
1331
+ 'expansion': function(node) {
1332
+ return 'vertical';
1333
+ },
1334
+ 'col_shift': function(node) {
1335
+ return true;
1336
+ },
1337
+ 'svg': self.adaptor.theme_dir + 'symbols/critical.svg'
1338
+ },//}}}
1339
+ 'description': self.adaptor.theme_dir + 'rngs/critical.rng',
1340
+ 'permissible_children': function(node,mode) { //{{{
1341
+ var func = null;
1342
+ if (mode == 'into') { func = self.adaptor.description.insert_first_into }
1343
+ else { func = self.adaptor.description.insert_after }
1344
+ var childs = [
1345
+ {'label': 'Service Call with Scripts',
1346
+ 'function_call': func,
1347
+ 'menu_icon': self.elements.callmanipulate.illustrator.svg.clone(),
1348
+ 'type': 'callmanipulate',
1349
+ 'params': [self.adaptor.description.elements.callmanipulate, node]},
1350
+ {'label': 'Service Call',
1351
+ 'function_call': func,
1352
+ 'menu_icon': self.elements.call.illustrator.svg.clone(),
1353
+ 'type': 'call',
1354
+ 'params': [self.adaptor.description.elements.call, node]},
1355
+ {'label': 'Script',
1356
+ 'function_call': func,
1357
+ 'menu_icon': self.elements.manipulate.illustrator.svg.clone(),
1358
+ 'type': 'manipulate',
1359
+ 'params': [self.adaptor.description.elements.manipulate, node]},
1360
+ {'label': 'Parallel',
1361
+ 'function_call': func,
1362
+ 'menu_icon': self.elements.parallel.illustrator.svg.clone(),
1363
+ 'type': 'parallel',
1364
+ 'params': [self.adaptor.description.elements.parallel, node]},
1365
+ {'label': 'Decision',
1366
+ 'function_call': func,
1367
+ 'menu_icon': self.elements.choose.illustrator.svg.clone(),
1368
+ 'type': 'choose',
1369
+ 'params': [self.adaptor.description.elements.choose, node]},
1370
+ {'label': 'Loop',
1371
+ 'function_call': func,
1372
+ 'menu_icon': self.elements.loop.illustrator.svg.clone(),
1373
+ 'type': 'loop',
1374
+ 'params': [self.adaptor.description.elements.loop, node]},
1375
+ {'label': 'Closed Loop',
1376
+ 'function_call': func,
1377
+ 'menu_icon': self.elements.closed_loop.illustrator.svg.clone(),
1378
+ 'type': 'closed_loop',
1379
+ 'params': [self.adaptor.description.elements.closed_loop, node]},
1380
+ {'label': 'Terminate',
1381
+ 'function_call': func,
1382
+ 'menu_icon': self.elements.terminate.illustrator.svg.clone(),
1383
+ 'type': 'terminate',
1384
+ 'params': [self.adaptor.description.elements.terminate, node]},
1385
+ {'label': 'Stop',
1386
+ 'function_call': func,
1387
+ 'menu_icon': self.elements.stop.illustrator.svg.clone(),
1388
+ 'type': 'stop',
1389
+ 'params': [self.adaptor.description.elements.stop, node]}
1390
+ ];
1391
+ if(node.parent('parallel_branch').length > 0) {
1392
+ childs.push({
1393
+ 'label': 'Critical',
1394
+ 'function_call': func,
1395
+ 'menu_icon': self.elements.critical.illustrator.svg.clone(),
1396
+ 'type': 'critical',
1397
+ 'params': [self.adaptor.description.elements.critical, node]
1398
+ });
1399
+ }
1400
+ return childs;
1401
+ }, //}}}
1402
+ 'adaptor': {//{{{
1403
+ 'mousedown': function (node,e) {
1404
+ self.events.mousedown(node,e,true,true);
1405
+ },
1406
+ 'click': self.events.click,
1407
+ 'dblclick': self.events.dblclick,
1408
+ 'mouseover': self.events.mouseover,
1409
+ 'mouseout': self.events.mouseout,
1410
+ }//}}}
1411
+ }; /*}}}*/
1412
+ this.elements.group = { /*{{{*/
1413
+ 'type': 'complex',
1414
+ 'illustrator': {//{{{
1415
+ 'endnodes': 'aggregate',
1416
+ 'closeblock': false,
1417
+ 'border': 'injectiongroup', // other value than true,false inidcates the used class for the svg-object
1418
+ 'expansion': function(node) {
1419
+ return 'vertical';
1420
+ },
1421
+ 'col_shift': function(node) {
1422
+ return true;
1423
+ },
1424
+ 'svg': null
1425
+ },//}}}
1426
+ 'description': self.adaptor.theme_dir + 'rngs/group.rng',
1427
+ 'permissible_children': function(node,mode) { //{{{
1428
+ var func = null;
1429
+ if (mode == 'into') { func = self.adaptor.description.insert_first_into }
1430
+ else { func = self.adaptor.description.insert_after }
1431
+ return [
1432
+ ];
1433
+ }, //}}}
1434
+ 'adaptor': {//{{{
1435
+ 'mousedown': function (node,e) {
1436
+ self.events.mousedown(node,e,true,true);
1437
+ },
1438
+ 'click': self.events.click,
1439
+ 'dblclick': self.events.dblclick,
1440
+ 'mouseover': self.events.mouseover,
1441
+ 'mouseout': self.events.mouseout,
1442
+ }//}}}
1443
+ }; /*}}}*/
1444
+ this.elements.start = this.elements.description = { /*{{{*/
1445
+ 'type': 'description',
1446
+ 'illustrator': {//{{{
1447
+ 'endnodes': 'passthrough',
1448
+ 'label': function(node){ return [ { column: 'Label'}, { column: 'ID' }, { column: 'Resource' }, { column: 'RP' }, { column: 'R#' } ]; },
1449
+ 'closeblock': false,
1450
+ 'balance': true,
1451
+ 'expansion': function(node) {
1452
+ return 'vertical';
1453
+ },
1454
+ 'closing_symbol': 'end',
1455
+ 'col_shift': function(node) {
1456
+ return true;
1457
+ },
1458
+ 'svg': self.adaptor.theme_dir + 'symbols/start.svg'
1459
+ },//}}}
1460
+ 'description': null,
1461
+ 'permissible_children': function(node,mode) { //{{{
1462
+ var func = null;
1463
+ if (mode == 'into') { func = self.adaptor.description.insert_first_into }
1464
+ else { func = self.adaptor.description.insert_after }
1465
+ var childs = [
1466
+ {'label': 'Service Call with Scripts',
1467
+ 'function_call': func,
1468
+ 'menu_icon': self.elements.callmanipulate.illustrator.svg.clone(),
1469
+ 'type': 'callmanipulate',
1470
+ 'params': [self.adaptor.description.elements.callmanipulate, node]},
1471
+ {'label': 'Service Call',
1472
+ 'function_call': func,
1473
+ 'menu_icon': self.elements.call.illustrator.svg.clone(),
1474
+ 'type': 'call',
1475
+ 'params': [self.adaptor.description.elements.call, node]},
1476
+ {'label': 'Script',
1477
+ 'function_call': func,
1478
+ 'menu_icon': self.elements.manipulate.illustrator.svg.clone(),
1479
+ 'type': 'manipulate',
1480
+ 'params': [self.adaptor.description.elements.manipulate, node]},
1481
+ {'label': 'Parallel',
1482
+ 'function_call': func,
1483
+ 'menu_icon': self.elements.parallel.illustrator.svg.clone(),
1484
+ 'type': 'parallel',
1485
+ 'params': [self.adaptor.description.elements.parallel, node]},
1486
+ {'label': 'Decision',
1487
+ 'function_call': func,
1488
+ 'menu_icon': self.elements.choose.illustrator.svg.clone(),
1489
+ 'type': 'choose',
1490
+ 'params': [self.adaptor.description.elements.choose, node]},
1491
+ {'label': 'Loop',
1492
+ 'function_call': func,
1493
+ 'menu_icon': self.elements.loop.illustrator.svg.clone(),
1494
+ 'type': 'loop',
1495
+ 'params': [self.adaptor.description.elements.loop, node]},
1496
+ {'label': 'Closed Loop',
1497
+ 'function_call': func,
1498
+ 'menu_icon': self.elements.closed_loop.illustrator.svg.clone(),
1499
+ 'type': 'closed_loop',
1500
+ 'params': [self.adaptor.description.elements.closed_loop, node]},
1501
+ {'label': 'Stop',
1502
+ 'function_call': func,
1503
+ 'menu_icon': self.elements.stop.illustrator.svg.clone(),
1504
+ 'type': 'stop',
1505
+ 'params': [self.adaptor.description.elements.stop, node]}
1506
+ ];
1507
+ if(node.parent('parallel_branch').length > 0) {
1508
+ childs.push({
1509
+ 'label': 'Critical',
1510
+ 'function_call': func,
1511
+ 'menu_icon': self.elements.critical.illustrator.svg.clone(),
1512
+ 'type': 'critical',
1513
+ 'params': [self.adaptor.description.elements.critical, node]
1514
+ });
1515
+ }
1516
+ return childs;
1517
+ }, //}}}
1518
+ 'adaptor': {//{{{
1519
+ 'mousedown': function (node,e) {
1520
+ self.events.mousedown(node,e,true,false);
1521
+ },
1522
+ 'click': self.events.click,
1523
+ 'dblclick': self.events.dblclick,
1524
+ 'mouseover': self.events.mouseover,
1525
+ 'mouseout': self.events.mouseout,
1526
+ }//}}}
1527
+ }; /*}}}*/
1528
+
1529
+ // Abstract Elements
1530
+ // * they may only have an illustrator (or other parts)
1531
+ // * they HAVE TO have a parent
1532
+ this.elements.callmanipulate = { /*{{{*/
1533
+ 'parent': 'call',
1534
+ 'description': self.adaptor.theme_dir + 'rngs/callmanipulate.rng',
1535
+ 'illustrator': {//{{{
1536
+ 'info': function(node){ return { 'element-endpoint': $(node).attr('endpoint') }; },
1537
+ 'svg': self.adaptor.theme_dir + 'symbols/callmanipulate.svg'
1538
+ },//}}}
1539
+ }; /*}}}*/
1540
+ this.elements.loop_head = { /*{{{*/
1541
+ 'parent': 'loop',
1542
+ 'illustrator': {//{{{
1543
+ 'endnodes': 'this',
1544
+ 'closeblock': true,
1545
+ 'label': function(node){
1546
+ var avg = $('> _probability_avg',$(node).children('_probability')).text();
1547
+ var ret = [ { column: 'Label', value: $(node).attr('condition') } ];
1548
+ if (avg != '') {
1549
+ ret.push({ column: 'Average', value: avg + 'x' });
1550
+ }
1551
+ return ret;
1552
+ },
1553
+ }//}}}
1554
+ }; /*}}}*/
1555
+ this.elements.loop_tail = { /*{{{*/
1556
+ 'parent': 'loop',
1557
+ 'illustrator': {//{{{
1558
+ 'endnodes': 'aggregate',
1559
+ 'closeblock': false,
1560
+ 'closing_symbol': 'loop_finish'
1561
+ },//}}}
1562
+ }; /*}}}*/
1563
+ this.elements.choose_inclusive = { /*{{{*/
1564
+ 'parent': 'choose',
1565
+ 'illustrator': {//{{{
1566
+ 'svg': self.adaptor.theme_dir + 'symbols/choose_inclusive.svg'
1567
+ }//}}}
1568
+ }; /*}}}*/
1569
+ this.elements.choose_exclusive = { /*{{{*/
1570
+ 'parent': 'choose',
1571
+ 'illustrator': {//{{{
1572
+ 'svg': self.adaptor.theme_dir + 'symbols/choose_exclusive.svg'
1573
+ },//}}}
1574
+ }; /*}}}*/
1575
+ this.elements.choose_inclusive_finish = { /*{{{*/
1576
+ 'parent': 'choose_finish',
1577
+ 'illustrator': {//{{{
1578
+ 'svg': self.adaptor.theme_dir + 'symbols/choose_inclusive.svg'
1579
+ }//}}}
1580
+ }; /*}}}*/
1581
+ this.elements.choose_exclusive_finish = { /*{{{*/
1582
+ 'parent': 'choose_finish',
1583
+ 'illustrator': {//{{{
1584
+ 'svg': self.adaptor.theme_dir + 'symbols/choose_exclusive.svg'
1585
+ },//}}}
1586
+ }; /*}}}*/
1587
+ this.elements.loop_head_finish = { /*{{{*/
1588
+ 'parent': 'loop_finish',
1589
+ 'illustrator': {//{{{
1590
+ 'endnodes': 'this',
1591
+ 'closeblock': true,
1592
+ 'svg': self.adaptor.theme_dir + 'symbols/choose_exclusive.svg'
1593
+ }//}}}
1594
+ }; /*}}}*/
1595
+ this.elements.loop_tail_finish = { /*{{{*/
1596
+ 'parent': 'loop_finish',
1597
+ 'illustrator': {//{{{
1598
+ 'endnodes': 'this',
1599
+ 'closeblock': false,
1600
+ 'svg': self.adaptor.theme_dir + 'symbols/choose_exclusive.svg'
1601
+ },//}}}
1602
+ }; /*}}}*/
1603
+ this.elements.closed_loop_finish = { /*{{{*/
1604
+ 'parent': 'closed_loop_finish',
1605
+ 'illustrator': {//{{{
1606
+ 'endnodes': 'this',
1607
+ 'closeblock': true,
1608
+ 'svg': self.adaptor.theme_dir + 'symbols/closed_loop.svg'
1609
+ }//}}}
1610
+ }; /*}}}*/
1611
+ this.elements.parallel_simple = { /*{{{*/
1612
+ 'parent': 'parallel_finish',
1613
+ 'illustrator': {//{{{
1614
+ 'svg': self.adaptor.theme_dir + 'symbols/parallel.svg'
1615
+ }//}}}
1616
+ }; /*}}}*/
1617
+ this.elements.parallel_complex = { /*{{{*/
1618
+ 'parent': 'parallel_finish',
1619
+ 'illustrator': {//{{{
1620
+ 'svg': self.adaptor.theme_dir + 'symbols/complex.svg'
1621
+ },//}}}
1622
+ }; /*}}}*/
1623
+ this.elements.parallel_branch_normal = { /*{{{*/
1624
+ 'parent': 'parallel_branch',
1625
+ 'illustrator': {//{{{
1626
+ 'svg': self.adaptor.theme_dir + 'symbols/parallel_branch_normal.svg'
1627
+ }//}}}
1628
+ }; /*}}}*/
1629
+ this.elements.parallel_branch_event = { /*{{{*/
1630
+ 'parent': 'parallel_branch',
1631
+ 'illustrator': {//{{{
1632
+ 'endnodes': 'this',
1633
+ 'noarrow': false,
1634
+ 'border': true,
1635
+ 'wide': true,
1636
+ 'closing_symbol': 'event_end',
1637
+ 'svg': self.adaptor.theme_dir + 'symbols/parallel_branch_event.svg'
1638
+ }//}}}
1639
+ }; /*}}}*/
1640
+ this.elements.parallel_branch_compact = { /*{{{*/
1641
+ 'parent': 'parallel_branch',
1642
+ 'illustrator': {//{{{
1643
+ 'endnodes': 'this',
1644
+ 'svg': self.adaptor.theme_dir + 'symbols/parallel_branch_compact.svg'
1645
+ }//}}}
1646
+ }; /*}}}*/
1647
+ this.elements.scripts = { /*{{{*/
1648
+ 'description': [self.adaptor.theme_dir + 'rngs/scripts.rng']
1649
+ }; /*}}}*/
1650
+ }