cpee 2.0.23 → 2.0.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. checksums.yaml +4 -4
  2. data/cockpit/css/model.css +2 -0
  3. data/cockpit/css/replay.css +55 -0
  4. data/cockpit/edit.html +1 -0
  5. data/cockpit/index.html +2 -0
  6. data/cockpit/js/instance.js +0 -13
  7. data/cockpit/js/replay.js +40 -0
  8. data/cockpit/model.html +3 -1
  9. data/cockpit/replay.html +52 -0
  10. data/cockpit/templates/instantiate.local/Take_Sub.xml +1 -1
  11. data/cockpit/themes/compact/rngs/call.rng +67 -40
  12. data/cockpit/themes/compact/rngs/callmanipulate.rng +81 -38
  13. data/cockpit/themes/control/rngs/alternative.rng +25 -0
  14. data/cockpit/themes/control/rngs/call.rng +149 -0
  15. data/cockpit/themes/control/rngs/callmanipulate.rng +188 -0
  16. data/cockpit/themes/control/rngs/choose.rng +14 -0
  17. data/cockpit/themes/control/rngs/closed_loop.rng +62 -0
  18. data/cockpit/themes/control/rngs/closed_loop_cancel.rng +5 -0
  19. data/cockpit/themes/control/rngs/closed_loop_control.rng +31 -0
  20. data/cockpit/themes/control/rngs/closed_loop_measuring.rng +12 -0
  21. data/cockpit/themes/control/rngs/critical.rng +5 -0
  22. data/cockpit/themes/control/rngs/escape.rng +1 -0
  23. data/cockpit/themes/control/rngs/group.rng +3 -0
  24. data/cockpit/themes/control/rngs/loop.rng +22 -0
  25. data/cockpit/themes/control/rngs/manipulate.rng +9 -0
  26. data/cockpit/themes/control/rngs/otherwise.rng +22 -0
  27. data/cockpit/themes/control/rngs/parallel.rng +21 -0
  28. data/cockpit/themes/control/rngs/parallel_branch.rng +8 -0
  29. data/cockpit/themes/control/rngs/scripts.rng +23 -0
  30. data/cockpit/themes/control/rngs/stop.rng +5 -0
  31. data/cockpit/themes/control/rngs/terminate.rng +1 -0
  32. data/cockpit/themes/control/symbols/alternative.svg +5 -0
  33. data/cockpit/themes/control/symbols/arrow.svg +3 -0
  34. data/cockpit/themes/control/symbols/call.svg +6 -0
  35. data/cockpit/themes/control/symbols/callmanipulate.svg +8 -0
  36. data/cockpit/themes/control/symbols/choose.svg +5 -0
  37. data/cockpit/themes/control/symbols/choose_exclusive.svg +5 -0
  38. data/cockpit/themes/control/symbols/choose_inclusive.svg +4 -0
  39. data/cockpit/themes/control/symbols/closed_loop.svg +5 -0
  40. data/cockpit/themes/control/symbols/closed_loop_cancel.svg +5 -0
  41. data/cockpit/themes/control/symbols/closed_loop_control.svg +5 -0
  42. data/cockpit/themes/control/symbols/closed_loop_measuring.svg +6 -0
  43. data/cockpit/themes/control/symbols/complex.svg +8 -0
  44. data/cockpit/themes/control/symbols/critical.svg +4 -0
  45. data/cockpit/themes/control/symbols/end.svg +3 -0
  46. data/cockpit/themes/control/symbols/escape.svg +5 -0
  47. data/cockpit/themes/control/symbols/event_end.svg +3 -0
  48. data/cockpit/themes/control/symbols/loop.svg +5 -0
  49. data/cockpit/themes/control/symbols/manipulate.svg +4 -0
  50. data/cockpit/themes/control/symbols/otherwise.svg +5 -0
  51. data/cockpit/themes/control/symbols/parallel.svg +5 -0
  52. data/cockpit/themes/control/symbols/parallel_branch.svg +5 -0
  53. data/cockpit/themes/control/symbols/parallel_branch_compact.svg +4 -0
  54. data/cockpit/themes/control/symbols/parallel_branch_event.svg +14 -0
  55. data/cockpit/themes/control/symbols/parallel_branch_normal.svg +5 -0
  56. data/cockpit/themes/control/symbols/scripts.svg +4 -0
  57. data/cockpit/themes/control/symbols/start.svg +3 -0
  58. data/cockpit/themes/control/symbols/stop.svg +5 -0
  59. data/cockpit/themes/control/symbols/terminate.svg +4 -0
  60. data/cockpit/themes/control/theme.js +1665 -0
  61. data/cockpit/themes/default/rngs/call.rng +67 -40
  62. data/cockpit/themes/default/rngs/callmanipulate.rng +81 -38
  63. data/cockpit/themes/default/theme.js +1287 -0
  64. data/cockpit/themes/diana/rngs/call.rng +67 -40
  65. data/cockpit/themes/diana/rngs/callmanipulate.rng +81 -38
  66. data/cockpit/themes/extended/rngs/call.rng +67 -40
  67. data/cockpit/themes/extended/rngs/callmanipulate.rng +81 -38
  68. data/cockpit/themes/packed/rngs/call.rng +67 -40
  69. data/cockpit/themes/packed/rngs/callmanipulate.rng +81 -38
  70. data/cockpit/themes/preset/rngs/call.rng +67 -40
  71. data/cockpit/themes/preset/rngs/callmanipulate.rng +81 -38
  72. data/cockpit/track.html +0 -7
  73. data/cpee.gemspec +2 -2
  74. data/server/handlerwrappers/default.rb +2 -2
  75. data/server/routing/end.pid +1 -0
  76. data/server/routing/forward-events.pid +1 -0
  77. data/server/routing/forward-votes.pid +1 -0
  78. data/server/routing/persist.pid +1 -0
  79. data/server/server.pid +1 -0
  80. metadata +60 -2
@@ -26,7 +26,8 @@
26
26
  </zeroOrMore>
27
27
  </element>
28
28
  <element name="stream" rngui:header="Data Stream Handling" rngui:fold="closed">
29
- <element name="sensors" rngui:header="Sensors" rngui:fold="closed">
29
+
30
+ <element name="sensors" rngui:header="Sensor Data Streams" rngui:fold="closed">
30
31
  <zeroOrMore rngui:label="Add Sensor">
31
32
  <element name="sensor">
32
33
  <element name="name" rngui:label="Label">
@@ -35,13 +36,18 @@
35
36
  <element name="extractor_url" rngui:label="Extractor Url">
36
37
  <data type="string" rngui:label="Service Url"/>
37
38
  </element>
38
- <element name="extractor_arg" rngui:label="Extractor Argument">
39
- <data type="string" rngui:label="Value / Json"/>
39
+ <element name="extractor_params" rngui:label="Extractor Arguments:">
40
+ <zeroOrMore rngui:label="Create Extractor Argument Pairs">
41
+ <element rngui:label="Name">
42
+ <anyName/>
43
+ <data type="string" rngui:label="Value / Json"/>
44
+ </element>
45
+ </zeroOrMore>
40
46
  </element>
41
47
  <element name="visualizer_url" rngui:label="Visualizer Url">
42
48
  <data type="string" rngui:label="Service Url"/>
43
49
  </element>
44
- <element name="visualizer_params" rngui:header="Visualizer Arguments">
50
+ <element name="visualizer_params" rngui:label="Visualizer Arguments">
45
51
  <zeroOrMore rngui:label="Create Visualizer Argument Pairs">
46
52
  <element rngui:label="Name">
47
53
  <anyName/>
@@ -52,42 +58,44 @@
52
58
  </element>
53
59
  </zeroOrMore>
54
60
  </element>
55
- <element name="aggregators" rngui:header="Aggregators" rngui:fold="closed">
56
- <zeroOrMore rngui:label="Add Aggregator">
57
- <element name="aggregator">
58
- <element name="name" rngui:label="Label">
59
- <data type="string" rngui:label="Label"/>
60
- </element>
61
- <element name="aggregator_url" rngui:label="Aggregator Url">
62
- <data type="string" rngui:label="Service Url"/>
63
- </element>
64
- <element name="aggregator_arg" rngui:label="Aggregator Argument">
65
- <data type="string" rngui:label="Value / Json"/>
66
- </element>
67
- </element>
68
- </zeroOrMore>
69
- </element>
70
- <element name="costs" rngui:header="Costs" rngui:fold="closed">
71
- <zeroOrMore rngui:label="Create Cost Factor">
72
- <element name="cost_factor">
61
+
62
+ <element name="ips" rngui:header="Impact Profiles" rngui:fold="closed">
63
+ <zeroOrMore rngui:label="Add Impact Profile">
64
+ <element name="ip">
73
65
  <element name="name" rngui:label="Label">
74
66
  <data type="string" rngui:label="Label"/>
75
67
  </element>
76
68
  <element name="target" rngui:label="Target Value">
77
69
  <data type="string" rngui:label="Value"/>
78
70
  </element>
79
- <element name="vfunc_url" rngui:label="Violation Function Url">
80
- <data type="string" rngui:label="Service Url"/>
81
- </element>
82
- <element name="vfunc_arg" rngui:label="Violation Function Argument">
83
- <data type="string" rngui:label="Service Url"/>
71
+ <element name="ifs" rngui:header="Impact Factors">
72
+ <zeroOrMore rngui:label="Add Impact Factor">
73
+ <element name="if">
74
+ <element name="ivs" rngui:header="Impact Values">
75
+ <zeroOrMore rngui:label="Add Impact Value ">
76
+ <element name="iv">
77
+ <element name="extractor_url" rngui:label="Extractor Url">
78
+ <data type="string" rngui:label="Service Url + Parameters"/>
79
+ </element>
80
+ <element name="aggregator_url" rngui:label="Aggregator Url">
81
+ <data type="string" rngui:label="Service Url + Parameters"/>
82
+ </element>
83
+ </element>
84
+ </zeroOrMore>
85
+ </element>
86
+ <element name="aggregator_url" rngui:label="Impact Function Url">
87
+ <data type="string" rngui:label="Service Url + Parameters"/>
88
+ </element>
89
+ </element>
90
+ </zeroOrMore>
84
91
  </element>
85
- <element name="vcost" rngui:label="Violation Cost">
86
- <data type="string" rngui:label="Value"/>
92
+ <element name="vfunc_url" rngui:label="Violation Function Url">
93
+ <data type="string" rngui:label="Service Url + Parameters"/>
87
94
  </element>
88
95
  </element>
89
96
  </zeroOrMore>
90
97
  </element>
98
+
91
99
  </element>
92
100
  <element name="report" rngui:header="Reporting Annotation" rngui:fold="closed">
93
101
  <element name="url" rngui:label='HTML Snippet'>
@@ -97,21 +105,40 @@
97
105
  </element>
98
106
  <element name="annotations" rngui:header="Annotations">
99
107
  <element name="_timing" rngui:header="Timing" rngui:fold="closed">
100
- <element name="_timing_wait" rngui:label="&#x3C9; - Wait">
101
- <data type="float" rngui:label="[0,1]" rngui:default="0.5"/>
102
- </element>
103
- <element name="_timing_threshold" rngui:label="&#x3BA; - Threshold">
104
- <data type="float" rngui:label="[0,3,n]" rngui:default="3"/>
105
- </element>
106
- <element name="_timing_min" rngui:label="Min in min">
107
- <data type="float" rngui:label="Minutes"/>
108
- </element>
109
- <element name="_timing_max" rngui:label="Max in min">
110
- <data type="float" rngui:label="Minutes"/>
108
+ <element name="_timing_weight" rngui:label="&#x3C9; - Weight">
109
+ <data type="float" rngui:label="[0,1]"/>
111
110
  </element>
112
111
  <element name="_timing_avg" rngui:label="Avg in min">
113
112
  <data type="float" rngui:label="Minutes"/>
114
113
  </element>
114
+ <element name="explanations" rngui:header="Explanations">
115
+ <zeroOrMore rngui:label="Add Explanation">
116
+ <element name="explanation">
117
+ <element name="type" rngui:label="Type">
118
+ <choice>
119
+ <value>&gt;</value>
120
+ <value>&lt;</value>
121
+ </choice>
122
+ </element>
123
+ <element name="deviation" rngui:label="Deviation">
124
+ <data type="float" rngui:label="Minutes"/>
125
+ </element>
126
+ <element name="behaviour" rngui:label="Behaviour">
127
+ <choice>
128
+ <value>Immediately</value>
129
+ <value>Wait until next</value>
130
+ <value>Use grace period value</value>
131
+ </choice>
132
+ </element>
133
+ <element name="grace" rngui:label="Grace Period" rngui:default="0.0">
134
+ <data type="float" rngui:label="Minutes"/>
135
+ </element>
136
+ <element name="text" rngui:label="Explanation">
137
+ <data type="string" rngui:label="Patterns"/>
138
+ </element>
139
+ </element>
140
+ </zeroOrMore>
141
+ </element>
115
142
  </element>
116
143
  <element name="_notes" rngui:header="Notes" rngui:fold="closed">
117
144
  <element name="_notes_general" rngui:label="General">
@@ -26,7 +26,8 @@
26
26
  </zeroOrMore>
27
27
  </element>
28
28
  <element name="stream" rngui:header="Data Stream Handling" rngui:fold="closed">
29
- <element name="sensors" rngui:header="Sensors" rngui:fold="closed">
29
+
30
+ <element name="sensors" rngui:header="Sensor Data Streams" rngui:fold="closed">
30
31
  <zeroOrMore rngui:label="Add Sensor">
31
32
  <element name="sensor">
32
33
  <element name="name" rngui:label="Label">
@@ -35,8 +36,13 @@
35
36
  <element name="extractor_url" rngui:label="Extractor Url">
36
37
  <data type="string" rngui:label="Service Url"/>
37
38
  </element>
38
- <element name="extractor_arg" rngui:label="Extractor Argument">
39
- <data type="string" rngui:label="Value / Json"/>
39
+ <element name="extractor_params" rngui:label="Extractor Arguments:">
40
+ <zeroOrMore rngui:label="Create Extractor Argument Pairs">
41
+ <element rngui:label="Name">
42
+ <anyName/>
43
+ <data type="string" rngui:label="Value / Json"/>
44
+ </element>
45
+ </zeroOrMore>
40
46
  </element>
41
47
  <element name="visualizer_url" rngui:label="Visualizer Url">
42
48
  <data type="string" rngui:label="Service Url"/>
@@ -52,42 +58,60 @@
52
58
  </element>
53
59
  </zeroOrMore>
54
60
  </element>
55
- <element name="aggregators" rngui:header="Aggregators" rngui:fold="closed">
56
- <zeroOrMore rngui:label="Add Aggregator">
57
- <element name="aggregator">
58
- <element name="name" rngui:label="Label">
59
- <data type="string" rngui:label="Label"/>
60
- </element>
61
- <element name="aggregator_url" rngui:label="Aggregator Url">
62
- <data type="string" rngui:label="Service Url"/>
63
- </element>
64
- <element name="aggregator_arg" rngui:label="Aggregator Argument">
65
- <data type="string" rngui:label="Value / Json"/>
66
- </element>
67
- </element>
68
- </zeroOrMore>
69
- </element>
70
- <element name="costs" rngui:header="Costs" rngui:fold="closed">
71
- <zeroOrMore rngui:label="Create Cost Factor">
72
- <element name="cost_factor">
61
+
62
+ <element name="ips" rngui:header="Impact Profiles" rngui:fold="closed">
63
+ <zeroOrMore rngui:label="Add Impact Profile">
64
+ <element name="ip">
73
65
  <element name="name" rngui:label="Label">
74
66
  <data type="string" rngui:label="Label"/>
75
67
  </element>
76
68
  <element name="target" rngui:label="Target Value">
77
69
  <data type="string" rngui:label="Value"/>
78
70
  </element>
79
- <element name="vfunc_url" rngui:label="Violation Function Url">
80
- <data type="string" rngui:label="Service Url"/>
81
- </element>
82
- <element name="vfunc_arg" rngui:label="Violation Function Argument">
83
- <data type="string" rngui:label="Service Url"/>
71
+ <element name="ifs" rngui:header="Impact Factors">
72
+ <zeroOrMore rngui:label="Add Impact Factor">
73
+ <element name="if">
74
+ <element name="ivs" rngui:header="Impact Values">
75
+ <zeroOrMore rngui:label="Add Impact Value ">
76
+ <element name="iv">
77
+ <element name="extractor_url" rngui:label="Extractor Url">
78
+ <data type="string" rngui:label="Service Url + Parameters"/>
79
+ </element>
80
+ <element name="extractor_params" rngui:header="Extractor Arguments">
81
+ <zeroOrMore rngui:label="Create Extractor Argument Pairs">
82
+ <element rngui:label="Name">
83
+ <anyName/>
84
+ <data type="string" rngui:label="Value / Json"/>
85
+ </element>
86
+ </zeroOrMore>
87
+ </element>
88
+ <element name="aggregator_url" rngui:label="Aggregator Url">
89
+ <data type="string" rngui:label="Service Url + Parameters"/>
90
+ </element>
91
+ <element name="aggregator_params" rngui:header="Extractor Arguments">
92
+ <zeroOrMore rngui:label="Create Aggregator Argument Pairs">
93
+ <element rngui:label="Name">
94
+ <anyName/>
95
+ <data type="string" rngui:label="Value / Json"/>
96
+ </element>
97
+ </zeroOrMore>
98
+ </element>
99
+ </element>
100
+ </zeroOrMore>
101
+ </element>
102
+ <element name="aggregator_url" rngui:label="Impact Function Url">
103
+ <data type="string" rngui:label="Service Url + Parameters"/>
104
+ </element>
105
+ </element>
106
+ </zeroOrMore>
84
107
  </element>
85
- <element name="vcost" rngui:label="Violation Cost">
86
- <data type="string" rngui:label="Value"/>
108
+ <element name="vfunc_url" rngui:label="Violation Function Url">
109
+ <data type="string" rngui:label="Service Url + Parameters"/>
87
110
  </element>
88
111
  </element>
89
112
  </zeroOrMore>
90
113
  </element>
114
+
91
115
  </element>
92
116
  <element name="report" rngui:header="Reporting Annotation" rngui:fold="closed">
93
117
  <element name="url" rngui:label='HTML Snippet'>
@@ -120,21 +144,40 @@
120
144
  </element>
121
145
  <element name="annotations" rngui:header="Annotations">
122
146
  <element name="_timing" rngui:header="Timing" rngui:fold="closed">
123
- <element name="_timing_wait" rngui:label="&#x3C9; - Wait">
147
+ <element name="_timing_weight" rngui:label="&#x3C9; - Weight">
124
148
  <data type="float" rngui:label="[0,1]"/>
125
149
  </element>
126
- <element name="_timing_threshold" rngui:label="&#x3BA; - Threshold">
127
- <data type="float" rngui:label="[0,3,n]"/>
128
- </element>
129
- <element name="_timing_min" rngui:label="Min in min">
130
- <data type="float" rngui:label="Minutes"/>
131
- </element>
132
- <element name="_timing_max" rngui:label="Max in min">
133
- <data type="float" rngui:label="Minutes"/>
134
- </element>
135
150
  <element name="_timing_avg" rngui:label="Avg in min">
136
151
  <data type="float" rngui:label="Minutes"/>
137
152
  </element>
153
+ <element name="explanations" rngui:header="Explanations">
154
+ <zeroOrMore rngui:label="Add Explanation">
155
+ <element name="explanation">
156
+ <element name="type" rngui:label="Type">
157
+ <choice>
158
+ <value>&gt;</value>
159
+ <value>&lt;</value>
160
+ </choice>
161
+ </element>
162
+ <element name="deviation" rngui:label="Deviation">
163
+ <data type="float" rngui:label="Minutes"/>
164
+ </element>
165
+ <element name="behaviour" rngui:label="Behaviour">
166
+ <choice>
167
+ <value>Immediately</value>
168
+ <value>Wait until next</value>
169
+ <value>Use grace period value</value>
170
+ </choice>
171
+ </element>
172
+ <element name="grace" rngui:label="Grace Period" rngui:default="0.0">
173
+ <data type="float" rngui:label="Minutes"/>
174
+ </element>
175
+ <element name="text" rngui:label="Explanation">
176
+ <data type="string" rngui:label="Patterns"/>
177
+ </element>
178
+ </element>
179
+ </zeroOrMore>
180
+ </element>
138
181
  </element>
139
182
  <element name="_notes" rngui:header="Notes" rngui:fold="closed">
140
183
  <element name="_notes_general" rngui:label="General">
@@ -0,0 +1,1287 @@
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 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 || e.metaKey)) {
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 ret = [ { column: 'Label', value: $('> label',$(node).children('parameters')).text().replace(/^['"]/,'').replace(/['"]$/,'') } ];
267
+ return ret;
268
+ },
269
+ 'info': function(node){ return { 'element-endpoint': $(node).attr('endpoint') }; },
270
+ 'resolve_symbol': function(node) {
271
+ if($('code', node).length > 0) {
272
+ return 'callmanipulate';
273
+ } else {
274
+ return 'call';
275
+ }
276
+ },
277
+ 'svg': self.adaptor.theme_dir + 'symbols/call.svg'
278
+ },//}}}
279
+ 'description': self.adaptor.theme_dir + 'rngs/call.rng',
280
+ 'permissible_children': function(node,mode) { //{{{
281
+ if(node.children('code').length < 1)
282
+ return [
283
+ {'label': 'Scripts',
284
+ 'function_call': self.adaptor.description.insert_last_into,
285
+ 'menu_icon': self.elements.callmanipulate.illustrator.svg.clone(),
286
+ 'type': undefined,
287
+ 'params': [self.adaptor.description.elements.scripts, node]}
288
+ ];
289
+ return [];
290
+ }, //}}}
291
+ 'adaptor': {//{{{
292
+ 'mousedown': function (node,e) { self.events.mousedown(node,e,true,true); },
293
+ 'click': self.events.click,
294
+ 'dragstart': self.events.dragstart,
295
+ 'mouseover': self.events.mouseover,
296
+ 'mouseout': self.events.mouseout
297
+ }//}}}
298
+ }; /*}}}*/
299
+ this.elements.manipulate = { /*{{{*/
300
+ 'type': 'primitive',
301
+ 'illustrator': {//{{{
302
+ 'endnodes': 'this',
303
+ 'label': function(node){
304
+ var lab = $(node).attr('label');
305
+ if (lab) {
306
+ return [ { column: 'Label', value: lab.replace(/^['"]/,'').replace(/['"]$/,'') } ];
307
+ } else {
308
+ return [];
309
+ }
310
+ },
311
+ 'svg': self.adaptor.theme_dir + 'symbols/manipulate.svg'
312
+ },//}}}
313
+ 'description': self.adaptor.theme_dir + 'rngs/manipulate.rng',
314
+ 'permissible_children': function(node,mode) { //{{{
315
+ return [];
316
+ }, //}}}
317
+ 'adaptor': {//{{{
318
+ 'mousedown': function (node,e) { self.events.mousedown(node,e,false,true); },
319
+ 'click': self.events.click,
320
+ 'mouseover': self.events.mouseover,
321
+ 'mouseout': self.events.mouseout
322
+ }//}}}
323
+ }; /*}}}*/
324
+ this.elements.escape = { /*{{{*/
325
+ 'type': 'primitive',
326
+ 'illustrator': {//{{{
327
+ 'endnodes': 'this',
328
+ 'svg': self.adaptor.theme_dir + 'symbols/escape.svg'
329
+ },//}}}
330
+ 'description': self.adaptor.theme_dir + 'rngs/escape.rng',
331
+ 'permissible_children': function(node,mode) { //{{{
332
+ return [];
333
+ }, //}}}
334
+ 'adaptor': {//{{{
335
+ 'mousedown': function (node,e) { self.events.mousedown(node,e,false,true); },
336
+ 'click': self.events.click,
337
+ 'mouseover': self.events.mouseover,
338
+ 'mouseout': self.events.mouseout
339
+ }//}}}
340
+ }; /*}}}*/
341
+ this.elements.stop = { /*{{{*/
342
+ 'type': 'primitive',
343
+ 'illustrator': {//{{{
344
+ 'endnodes': 'this',
345
+ 'svg': self.adaptor.theme_dir + 'symbols/stop.svg'
346
+ },//}}}
347
+ 'description': self.adaptor.theme_dir + 'rngs/stop.rng',
348
+ 'permissible_children': function(node,mode) { //{{{
349
+ return [];
350
+ }, //}}}
351
+ 'adaptor': {//{{{
352
+ 'mousedown': function (node,e) { self.events.mousedown(node,e,false,true); },
353
+ 'click': self.events.click,
354
+ 'mouseover': self.events.mouseover,
355
+ 'mouseout': self.events.mouseout
356
+ }//}}}
357
+ }; /*}}}*/
358
+ this.elements.terminate = { /*{{{*/
359
+ 'type': 'primitive',
360
+ 'illustrator': {//{{{
361
+ 'endnodes': 'this',
362
+ 'final': true,
363
+ 'svg': self.adaptor.theme_dir + 'symbols/terminate.svg'
364
+ },//}}}
365
+ 'description': self.adaptor.theme_dir + 'rngs/terminate.rng',
366
+ 'permissible_children': function(node,mode) { //{{{
367
+ return [];
368
+ }, //}}}
369
+ 'adaptor': {//{{{
370
+ 'mousedown': function (node,e) { self.events.mousedown(node,e,false,false); },
371
+ 'mouseover': self.events.mouseover,
372
+ 'mouseout': self.events.mouseout
373
+ }//}}}
374
+ }; /*}}}*/
375
+ this.elements.end = { /*{{{*/
376
+ 'type': 'primitive',
377
+ 'illustrator': {//{{{
378
+ 'endnodes': 'this',
379
+ 'svg': self.adaptor.theme_dir + 'symbols/end.svg'
380
+ }, //}}}
381
+ 'adaptor': {//{{{
382
+ 'mousedown': function (node,e) {
383
+ self.events.suppress();
384
+ }
385
+ }//}}}
386
+ }; /*}}}*/
387
+ this.elements.event_end = { /*{{{*/
388
+ 'type': 'primitive',
389
+ 'illustrator': {//{{{
390
+ 'endnodes': 'this',
391
+ 'svg': self.adaptor.theme_dir + 'symbols/event_end.svg'
392
+ }, //}}}
393
+ 'adaptor': {//{{{
394
+ 'mousedown': function (node,e) {
395
+ self.events.suppress();
396
+ },
397
+ 'click': self.events.click,
398
+ 'dblclick': self.events.dblclick,
399
+ 'mouseover': self.events.mouseover,
400
+ 'mouseout': self.events.mouseout
401
+ }//}}}
402
+ }; /*}}}*/
403
+ this.elements.choose_finish = { /*{{{*/
404
+ 'type': 'primitive',
405
+ 'illustrator': {//{{{
406
+ 'endnodes': 'this',
407
+ 'svg': self.adaptor.theme_dir + 'symbols/choose_inclusive.svg',
408
+ 'resolve_symbol': function(node) {
409
+ if($(node).attr('mode') == 'exclusive') {
410
+ return 'choose_exclusive_finish';
411
+ } else {
412
+ return 'choose_inclusive_finish';
413
+ }
414
+ },
415
+ }, //}}}
416
+ 'adaptor': {//{{{
417
+ 'mousedown': function (node,e) {
418
+ self.events.mousedown(node,e,true,true);
419
+ },
420
+ 'click': self.events.click,
421
+ 'dblclick': self.events.dblclick,
422
+ 'mouseover': self.events.mouseover,
423
+ 'mouseout': self.events.mouseout
424
+ }//}}}
425
+ }; /*}}}*/
426
+ this.elements.loop_finish = { /*{{{*/
427
+ 'type': 'primitive',
428
+ 'illustrator': {//{{{
429
+ 'endnodes': 'this',
430
+ 'closeblock': true,
431
+ 'label': function(node){
432
+ var ret = [ { column: 'Label', value: $(node).attr('condition') } ];
433
+ return ret;
434
+ },
435
+ 'svg': self.adaptor.theme_dir + 'symbols/choose_exclusive.svg',
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.parallel_finish = { /*{{{*/
448
+ 'type': 'primitive',
449
+ 'illustrator': {//{{{
450
+ 'endnodes': 'this',
451
+ 'svg': self.adaptor.theme_dir + 'symbols/parallel.svg',
452
+ 'resolve_symbol': function(node) {
453
+ if($(node).attr('wait') == '-1') {
454
+ return 'parallel_simple';
455
+ } else {
456
+ return 'parallel_complex';
457
+ }
458
+ },
459
+ }, //}}}
460
+ 'adaptor': {//{{{
461
+ 'mousedown': function (node,e) {
462
+ self.events.mousedown(node,e,true,true);
463
+ },
464
+ 'click': self.events.click,
465
+ 'dblclick': self.events.dblclick,
466
+ 'mouseover': self.events.mouseover,
467
+ 'mouseout': self.events.mouseout
468
+ }//}}}
469
+ }; /*}}}*/
470
+
471
+ // Complex Elements
472
+ this.elements.choose = { /*{{{*/
473
+ 'type': 'complex',
474
+ 'illustrator': {//{{{
475
+ 'label': function(node){ return [ { column: 'Label', value: $(node).attr('mode') == 'exclusive' ? 'exclusive' : 'inclusive' } ]; },
476
+ 'endnodes': 'aggregate',
477
+ 'closeblock': false,
478
+ 'closing_symbol': 'choose_finish',
479
+ 'expansion': function(node) {
480
+ return 'horizontal';
481
+ },
482
+ 'resolve_symbol': function(node) {
483
+ if($(node).attr('mode') == 'exclusive') {
484
+ return 'choose_exclusive';
485
+ } else {
486
+ return 'choose_inclusive';
487
+ }
488
+ },
489
+ 'col_shift': function(node) {
490
+ return false;
491
+ },
492
+ 'svg': self.adaptor.theme_dir + 'symbols/choose.svg'
493
+ },//}}}
494
+ 'description': self.adaptor.theme_dir + 'rngs/choose.rng',
495
+ 'permissible_children': function(node,mode) { //{{{
496
+ var func = null;
497
+ if (mode == 'into') { func = self.adaptor.description.insert_first_into }
498
+ else { func = self.adaptor.description.insert_after }
499
+ if(node.children('parallel_branch').length > 0) {
500
+ return [{'label': 'Parallel Branch',
501
+ 'function_call': func,
502
+ 'menu_icon': self.elements.parallel_branch.illustrator.svg.clone(),
503
+ 'type': 'parallel_branch',
504
+ 'params': [self.adaptor.description.elements.parallel_branch, node]}];
505
+ }
506
+ var childs = [{'label': 'Alternative',
507
+ 'function_call': func,
508
+ 'menu_icon': self.elements.alternative.illustrator.svg.clone(),
509
+ 'type': 'alternative',
510
+ 'params': [self.adaptor.description.elements.alternative, node]}];
511
+ if((node.children('otherwise').length == 0) && node.parents('parallel').length == node.parents('parallel_branch').length && node.parent('choose').length == 0)
512
+ childs.push({'label': 'Otherwise',
513
+ 'function_call': self.adaptor.description.insert_last_into,
514
+ 'menu_icon': self.elements.otherwise.illustrator.svg.clone(),
515
+ 'type': 'otherwise',
516
+ 'params': [self.adaptor.description.elements.otherwise, node]});
517
+ if(node.parents('parallel').length > node.parents('parallel_branch').length)
518
+ childs.push({'label': 'Parallel Branch',
519
+ 'function_call': func,
520
+ 'menu_icon': self.elements.parallel_branch.illustrator.svg.clone(),
521
+ 'type': 'parallel_branch',
522
+ 'params': [self.adaptor.description.elements.parallel_branch, node]});
523
+ return childs;
524
+ }, //}}}
525
+ 'adaptor': {//{{{
526
+ 'mousedown': function (node,e) {
527
+ self.events.mousedown(node,e,true,true);
528
+ },
529
+ 'click': self.events.click,
530
+ 'dblclick': self.events.dblclick,
531
+ 'mouseover': self.events.mouseover,
532
+ 'mouseout': self.events.mouseout
533
+ }//}}}
534
+ }; /*}}}*/
535
+ this.elements.otherwise = { /*{{{*/
536
+ 'type': 'complex',
537
+ 'illustrator': {//{{{
538
+ 'endnodes': 'passthrough',
539
+ 'closeblock': false,
540
+ 'noarrow': true,
541
+ 'expansion': function(node) {
542
+ return 'vertical';
543
+ },
544
+ 'col_shift': function(node) {
545
+ return false;
546
+ },
547
+ 'svg': self.adaptor.theme_dir + 'symbols/otherwise.svg'
548
+ },//}}}
549
+ 'description': self.adaptor.theme_dir + 'rngs/otherwise.rng',
550
+ 'neverdelete': true,
551
+ 'permissible_children': function(node,mode) { //{{{
552
+ var func = null;
553
+ var childs = null;
554
+ if (mode == 'into') { func = self.adaptor.description.insert_first_into }
555
+ else { func = self.adaptor.description.insert_after }
556
+ var childs = [
557
+ {'label': 'Service Call with Scripts',
558
+ 'function_call': func,
559
+ 'menu_icon': self.elements.callmanipulate.illustrator.svg.clone(),
560
+ 'type': 'callmanipulate',
561
+ 'params': [self.adaptor.description.elements.callmanipulate, node]},
562
+ {'label': 'Service Call',
563
+ 'function_call': func,
564
+ 'menu_icon': self.elements.call.illustrator.svg.clone(),
565
+ 'type': 'call',
566
+ 'params': [self.adaptor.description.elements.call, node]},
567
+ {'label': 'Script',
568
+ 'function_call': func,
569
+ 'menu_icon': self.elements.manipulate.illustrator.svg.clone(),
570
+ 'type': 'manipulate',
571
+ 'params': [self.adaptor.description.elements.manipulate, node]},
572
+ {'label': 'Parallel',
573
+ 'function_call': func,
574
+ 'menu_icon': self.elements.parallel.illustrator.svg.clone(),
575
+ 'type': 'parallel',
576
+ 'params': [self.adaptor.description.elements.parallel, node]},
577
+ {'label': 'Decision',
578
+ 'function_call': func,
579
+ 'menu_icon': self.elements.choose.illustrator.svg.clone(),
580
+ 'type': 'choose',
581
+ 'params': [self.adaptor.description.elements.choose, node]},
582
+ {'label': 'Loop',
583
+ 'function_call': func,
584
+ 'menu_icon': self.elements.loop.illustrator.svg.clone(),
585
+ 'type': 'loop',
586
+ 'params': [self.adaptor.description.elements.loop, node]},
587
+ {'label': 'Terminate',
588
+ 'function_call': func,
589
+ 'menu_icon': self.elements.terminate.illustrator.svg.clone(),
590
+ 'type': 'terminate',
591
+ 'params': [self.adaptor.description.elements.terminate, node]},
592
+ {'label': 'Stop',
593
+ 'function_call': func,
594
+ 'menu_icon': self.elements.stop.illustrator.svg.clone(),
595
+ 'type': 'stop',
596
+ 'params': [self.adaptor.description.elements.stop, node]}
597
+ ];
598
+ if(node.parent('parallel_branch').length > 0) {
599
+ childs.push({
600
+ 'label': 'Critical',
601
+ 'function_call': func,
602
+ 'menu_icon': self.elements.critical.illustrator.svg.clone(),
603
+ 'type': 'critical',
604
+ 'params': [self.adaptor.description.elements.critical, node]
605
+ });
606
+ }
607
+ return childs;
608
+ }, //}}}
609
+ 'adaptor': {//{{{
610
+ 'mousedown': function (node,e) {
611
+ self.events.mousedown(node,e,true,false);
612
+ },
613
+ 'click': self.events.click,
614
+ 'dblclick': self.events.dblclick,
615
+ 'mouseover': self.events.mouseover,
616
+ 'mouseout': self.events.mouseout,
617
+ }//}}}
618
+ }; /*}}}*/
619
+ this.elements.alternative = { /*{{{*/
620
+ 'type': 'complex',
621
+ 'illustrator': {//{{{
622
+ 'label': function(node){
623
+ var ret = [ { column: 'Label', value: $(node).attr('condition') } ];
624
+ return ret;
625
+ },
626
+ 'endnodes': 'passthrough',
627
+ 'noarrow': true,
628
+ 'closeblock':false,
629
+ 'expansion': function(node) {
630
+ return 'vertical';
631
+ },
632
+ 'col_shift': function(node) {
633
+ return false;
634
+ },
635
+ 'svg': self.adaptor.theme_dir + 'symbols/alternative.svg'
636
+ },//}}}
637
+ 'description': self.adaptor.theme_dir + 'rngs/alternative.rng',
638
+ 'permissible_children': function(node,mode) { //{{{
639
+ if (mode == 'into') { func = self.adaptor.description.insert_first_into }
640
+ else { func = self.adaptor.description.insert_after }
641
+ if(node.parents('parallel').length > node.parents('parallel_branch').length && node.get(0).tagName == 'alternative') {
642
+ return [{'label': 'Parallel Branch',
643
+ 'function_call': func,
644
+ 'menu_icon': self.elements.parallel_branch.illustrator.svg.clone(),
645
+ 'type': 'parallel_branch',
646
+ 'params': [self.adaptor.description.elements.parallel_branch, node]}];
647
+ }
648
+ var childs = [
649
+ {'label': 'Service Call with Scripts',
650
+ 'function_call': func,
651
+ 'menu_icon': self.elements.callmanipulate.illustrator.svg.clone(),
652
+ 'type': 'callmanipulate',
653
+ 'params': [self.adaptor.description.elements.callmanipulate, node]},
654
+ {'label': 'Service Call',
655
+ 'function_call': func,
656
+ 'menu_icon': self.elements.call.illustrator.svg.clone(),
657
+ 'type': 'call',
658
+ 'params': [self.adaptor.description.elements.call, node]},
659
+ {'label': 'Script',
660
+ 'function_call': func,
661
+ 'menu_icon': self.elements.manipulate.illustrator.svg.clone(),
662
+ 'type': 'manipulate',
663
+ 'params': [self.adaptor.description.elements.manipulate, node]},
664
+ {'label': 'Parallel',
665
+ 'function_call': func,
666
+ 'menu_icon': self.elements.parallel.illustrator.svg.clone(),
667
+ 'type': 'parallel',
668
+ 'params': [self.adaptor.description.elements.parallel, node]},
669
+ {'label': 'Decision',
670
+ 'function_call': func,
671
+ 'menu_icon': self.elements.choose.illustrator.svg.clone(),
672
+ 'type': 'choose',
673
+ 'params': [self.adaptor.description.elements.choose, node]},
674
+ {'label': 'Loop',
675
+ 'function_call': func,
676
+ 'menu_icon': self.elements.loop.illustrator.svg.clone(),
677
+ 'type': 'loop',
678
+ 'params': [self.adaptor.description.elements.loop, node]},
679
+ {'label': 'Terminate',
680
+ 'function_call': func,
681
+ 'menu_icon': self.elements.terminate.illustrator.svg.clone(),
682
+ 'type': 'terminate',
683
+ 'params': [self.adaptor.description.elements.terminate, node]},
684
+ {'label': 'Stop',
685
+ 'function_call': func,
686
+ 'menu_icon': self.elements.stop.illustrator.svg.clone(),
687
+ 'type': 'stop',
688
+ 'params': [self.adaptor.description.elements.stop, node]}
689
+ ];
690
+ if(node.parent('parallel_branch').length > 0) {
691
+ childs.push({
692
+ 'label': 'Critical',
693
+ 'function_call': func,
694
+ 'menu_icon': self.elements.critical.illustrator.svg.clone(),
695
+ 'type': 'critical',
696
+ 'params': [self.adaptor.description.elements.critical, node]
697
+ });
698
+ }
699
+ return childs;
700
+ }, //}}}
701
+ 'adaptor': {//{{{
702
+ 'mousedown': function (node,e) {
703
+ self.events.mousedown(node,e,true,true);
704
+ },
705
+ 'click': self.events.click,
706
+ 'dblclick': self.events.dblclick,
707
+ 'mouseover': self.events.mouseover,
708
+ 'mouseout': self.events.mouseout,
709
+ }//}}}
710
+ }; /*}}}*/
711
+ this.elements.loop = { /*{{{*/
712
+ 'type': 'complex',
713
+ 'illustrator': {//{{{
714
+ 'resolve_symbol': function(node) {
715
+ if($(node).attr('mode') == 'pre_test') {
716
+ return 'loop_head';
717
+ } else {
718
+ return 'loop_tail';
719
+ }
720
+ },
721
+ 'expansion': function(node) {
722
+ return 'vertical';
723
+ },
724
+ 'col_shift': function(node) {
725
+ return true;
726
+ },
727
+ 'svg': self.adaptor.theme_dir + 'symbols/loop.svg'
728
+ },// }}}
729
+ 'description': self.adaptor.theme_dir + 'rngs/loop.rng',
730
+ 'permissible_children': function(node,mode) { //{{{
731
+ var func = null;
732
+ if (mode == 'into') { func = self.adaptor.description.insert_first_into }
733
+ else { func = self.adaptor.description.insert_after }
734
+ var childs = [
735
+ {'label': 'Service Call with Scripts',
736
+ 'function_call': func,
737
+ 'menu_icon': self.elements.callmanipulate.illustrator.svg.clone(),
738
+ 'type': 'callmanipulate',
739
+ 'params': [self.adaptor.description.elements.callmanipulate, node]},
740
+ {'label': 'Service Call',
741
+ 'function_call': func,
742
+ 'menu_icon': self.elements.call.illustrator.svg.clone(),
743
+ 'type': 'call',
744
+ 'params': [self.adaptor.description.elements.call, node]},
745
+ {'label': 'Script',
746
+ 'function_call': func,
747
+ 'menu_icon': self.elements.manipulate.illustrator.svg.clone(),
748
+ 'type': 'manipulate',
749
+ 'params': [self.adaptor.description.elements.manipulate, node]},
750
+ {'label': 'Decision',
751
+ 'function_call': func,
752
+ 'menu_icon': self.elements.choose.illustrator.svg.clone(),
753
+ 'type': 'choose',
754
+ 'params': [self.adaptor.description.elements.choose, node]},
755
+ {'label': 'Loop',
756
+ 'function_call': func,
757
+ 'menu_icon': self.elements.loop.illustrator.svg.clone(),
758
+ 'type': 'loop',
759
+ 'params': [self.adaptor.description.elements.loop, node]},
760
+ {'label': 'Terminate',
761
+ 'function_call': func,
762
+ 'menu_icon': self.elements.terminate.illustrator.svg.clone(),
763
+ 'type': 'terminate',
764
+ 'params': [self.adaptor.description.elements.terminate, node]},
765
+ {'label': 'Stop',
766
+ 'function_call': func,
767
+ 'menu_icon': self.elements.stop.illustrator.svg.clone(),
768
+ 'type': 'stop',
769
+ 'params': [self.adaptor.description.elements.stop, node]}
770
+ ];
771
+ if(node.parent('parallel_branch').length > 0) {
772
+ childs.push({
773
+ 'label': 'Critical',
774
+ 'function_call': func,
775
+ 'menu_icon': self.elements.critical.illustrator.svg.clone(),
776
+ 'type': 'critical',
777
+ 'params': [self.adaptor.description.elements.critical, node]
778
+ });
779
+ }
780
+ if(node.parent('parallel').length > node.parent('parallel_branch').length) {
781
+ childs.push({'label': 'Parallel Branch',
782
+ 'function_call': func,
783
+ 'menu_icon': self.elements.parallel_branch.illustrator.svg.clone(),
784
+ 'type': 'parallel_branch',
785
+ 'params': [self.adaptor.description.elements.parallel_branch, node]}
786
+ );
787
+ } else {
788
+ childs.push({'label': 'Parallel',
789
+ 'function_call': func,
790
+ 'menu_icon': self.elements.parallel.illustrator.svg.clone(),
791
+ 'type': 'parallel',
792
+ 'params': [self.adaptor.description.elements.parallel, node]}
793
+ );
794
+ }
795
+ return childs;
796
+ }, //}}}
797
+ 'adaptor': {//{{{
798
+ 'mousedown': function (node,e) {
799
+ self.events.mousedown(node,e,true,true);
800
+ },
801
+ 'click': self.events.click,
802
+ 'dblclick': self.events.dblclick,
803
+ 'mouseover': self.events.mouseover,
804
+ 'mouseout': self.events.mouseout,
805
+ }//}}}
806
+ }; /*}}}*/
807
+ this.elements.parallel = { /*{{{*/
808
+ 'type': 'complex',
809
+ 'illustrator': {//{{{
810
+ 'endnodes': 'aggregate',
811
+ 'closeblock': false,
812
+ 'closing_symbol': 'parallel_finish',
813
+ 'expansion': function(node) {
814
+ // check if any sibling other than 'parallel_branch' is present
815
+ if($(node).children(':not(parallel_branch)').length > 0) return 'vertical';
816
+ return 'horizontal';
817
+ },
818
+ 'col_shift': function(node) {
819
+ return true;
820
+ },
821
+ 'svg': self.adaptor.theme_dir + 'symbols/parallel.svg'
822
+ },//}}}
823
+ 'description': self.adaptor.theme_dir + 'rngs/parallel.rng',
824
+ 'permissible_children': function(node,mode) { //{{{
825
+ var func = null;
826
+ if (mode == 'into') { func = self.adaptor.description.insert_first_into }
827
+ else { func = self.adaptor.description.insert_after }
828
+ var childs = [
829
+ {'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
+ return childs;
836
+ }, //}}}
837
+ 'permissible_children_expert': function(node,mode) { //{{{
838
+ var func = null;
839
+ if (mode.match(/into/)) { func = self.adaptor.description.insert_first_into }
840
+ else { func = self.adaptor.description.insert_after }
841
+ var childs = [
842
+ {'label': 'Service Call with Scripts',
843
+ 'function_call': func,
844
+ 'menu_icon': self.elements.callmanipulate.illustrator.svg.clone(),
845
+ 'type': 'callmanipulate',
846
+ 'params': [self.adaptor.description.elements.callmanipulate, node]},
847
+ {'label': 'Service Call',
848
+ 'function_call': func,
849
+ 'menu_icon': self.elements.call.illustrator.svg.clone(),
850
+ 'type': 'call',
851
+ 'params': [self.adaptor.description.elements.call, node]},
852
+ {'label': 'Script',
853
+ 'function_call': func,
854
+ 'menu_icon': self.elements.manipulate.illustrator.svg.clone(),
855
+ 'type': 'manipulate',
856
+ 'params': [self.adaptor.description.elements.manipulate, node]},
857
+ {'label': 'Decision',
858
+ 'function_call': func,
859
+ 'menu_icon': self.elements.choose.illustrator.svg.clone(),
860
+ 'type': 'choose',
861
+ 'params': [self.adaptor.description.elements.choose, node]},
862
+ {'label': 'Loop',
863
+ 'function_call': func,
864
+ 'menu_icon': self.elements.loop.illustrator.svg.clone(),
865
+ 'type': 'loop',
866
+ 'params': [self.adaptor.description.elements.loop, node]},
867
+ {'label': 'Stop',
868
+ 'function_call': func,
869
+ 'menu_icon': self.elements.stop.illustrator.svg.clone(),
870
+ 'type': 'stop',
871
+ 'params': [self.adaptor.description.elements.stop, node]}
872
+ ];
873
+ if(node.get(0).tagName != 'parallel')
874
+ childs.push({'label': 'Parallel',
875
+ 'function_call': self.adaptor.description.insert_last_into,
876
+ 'menu_icon': self.elements.parallel.illustrator.svg.clone(),
877
+ 'type': 'parallel',
878
+ 'params': [self.adaptor.description.elements.parallel, node]});
879
+ return childs;
880
+ }, //}}}
881
+ 'adaptor': {//{{{
882
+ 'mousedown': function (node,e) {
883
+ self.events.mousedown(node,e,true,true);
884
+ },
885
+ 'click': self.events.click,
886
+ 'dblclick': self.events.dblclick,
887
+ 'mouseover': self.events.mouseover,
888
+ 'mouseout': self.events.mouseout,
889
+ }//}}}
890
+ }; /*}}}*/
891
+ this.elements.parallel_branch = { /*{{{*/
892
+ 'type': 'complex',
893
+ 'illustrator': {//{{{
894
+ 'endnodes': 'passthrough',
895
+ 'closeblock': false,
896
+ 'noarrow': true,
897
+ 'expansion': function(node) {
898
+ return 'vertical';
899
+ },
900
+ 'resolve_symbol': function(node,shift) {
901
+ if(shift == true) {
902
+ return 'parallel_branch_event';
903
+ } else {
904
+ return 'parallel_branch_normal';
905
+ }
906
+ },
907
+ 'col_shift': function(node) {
908
+ if(node.parentNode.tagName == 'choose') return false;
909
+ if($(node).parents('parallel').first().children(':not(parallel_branch)').length > 0) return true;
910
+ return false;
911
+ },
912
+ 'svg': self.adaptor.theme_dir + 'symbols/parallel_branch.svg'
913
+ },//}}}
914
+ 'description': self.adaptor.theme_dir + 'rngs/parallel_branch.rng',
915
+ 'permissible_children': function(node,mode) { //{{{
916
+ var func = null;
917
+ if (mode == 'into') { func = self.adaptor.description.insert_first_into }
918
+ else { func = self.adaptor.description.insert_after }
919
+ var childs = [
920
+ {'label': 'Service Call with Scripts',
921
+ 'function_call': func,
922
+ 'menu_icon': self.elements.callmanipulate.illustrator.svg.clone(),
923
+ 'type': 'callmanipulate',
924
+ 'params': [self.adaptor.description.elements.callmanipulate, node]},
925
+ {'label': 'Service Call',
926
+ 'function_call': func,
927
+ 'menu_icon': self.elements.call.illustrator.svg.clone(),
928
+ 'type': 'call',
929
+ 'params': [self.adaptor.description.elements.call, node]},
930
+ {'label': 'Script',
931
+ 'function_call': func,
932
+ 'menu_icon': self.elements.manipulate.illustrator.svg.clone(),
933
+ 'type': 'manipulate',
934
+ 'params': [self.adaptor.description.elements.manipulate, node]},
935
+ {'label': 'Parallel',
936
+ 'function_call': func,
937
+ 'menu_icon': self.elements.parallel.illustrator.svg.clone(),
938
+ 'type': 'parallel',
939
+ 'params': [self.adaptor.description.elements.parallel, node]},
940
+ {'label': 'Decision',
941
+ 'function_call': func,
942
+ 'menu_icon': self.elements.choose.illustrator.svg.clone(),
943
+ 'type': 'choose',
944
+ 'params': [self.adaptor.description.elements.choose, node]},
945
+ {'label': 'Loop',
946
+ 'function_call': func,
947
+ 'menu_icon': self.elements.loop.illustrator.svg.clone(),
948
+ 'type': 'loop',
949
+ 'params': [self.adaptor.description.elements.loop, node]},
950
+ {'label': 'Terminate',
951
+ 'function_call': func,
952
+ 'menu_icon': self.elements.terminate.illustrator.svg.clone(),
953
+ 'type': 'terminate',
954
+ 'params': [self.adaptor.description.elements.terminate, node]},
955
+ {'label': 'Stop',
956
+ 'function_call': func,
957
+ 'menu_icon': self.elements.stop.illustrator.svg.clone(),
958
+ 'type': 'stop',
959
+ 'params': [self.adaptor.description.elements.stop, node]},
960
+ {'label': 'Critical',
961
+ 'function_call': func,
962
+ 'menu_icon': self.elements.critical.illustrator.svg.clone(),
963
+ 'type': 'critical',
964
+ 'params': [self.adaptor.description.elements.critical, node]}
965
+ ];
966
+ if(node.parents('choose').length > node.parents('alternative, otherwise').length && node.get(0).tagName == 'parallel_branch') {
967
+ return [{'label': 'Alternative',
968
+ 'function_call': func,
969
+ 'menu_icon': self.elements.alternative.illustrator.svg.clone(),
970
+ 'type': 'alternative',
971
+ 'params': [self.adaptor.description.elements.alternative, node]}];
972
+ }
973
+ return childs;
974
+ }, //}}}
975
+ 'adaptor': {//{{{
976
+ 'mousedown': function (node,e) {
977
+ self.events.mousedown(node,e,true,true);
978
+ },
979
+ 'click': self.events.click,
980
+ 'dblclick': self.events.dblclick,
981
+ 'mouseover': self.events.mouseover,
982
+ 'mouseout': self.events.mouseout,
983
+ }//}}}
984
+ }; /*}}}*/
985
+ this.elements.critical = { /*{{{*/
986
+ 'type': 'complex',
987
+ 'illustrator': {//{{{
988
+ 'endnodes': 'aggregate',
989
+ 'closeblock': false,
990
+ 'border': true,
991
+ 'expansion': function(node) {
992
+ return 'vertical';
993
+ },
994
+ 'col_shift': function(node) {
995
+ return true;
996
+ },
997
+ 'svg': self.adaptor.theme_dir + 'symbols/critical.svg'
998
+ },//}}}
999
+ 'description': self.adaptor.theme_dir + 'rngs/critical.rng',
1000
+ 'permissible_children': function(node,mode) { //{{{
1001
+ var func = null;
1002
+ if (mode == 'into') { func = self.adaptor.description.insert_first_into }
1003
+ else { func = self.adaptor.description.insert_after }
1004
+ var childs = [
1005
+ {'label': 'Service Call with Scripts',
1006
+ 'function_call': func,
1007
+ 'menu_icon': self.elements.callmanipulate.illustrator.svg.clone(),
1008
+ 'type': 'callmanipulate',
1009
+ 'params': [self.adaptor.description.elements.callmanipulate, node]},
1010
+ {'label': 'Service Call',
1011
+ 'function_call': func,
1012
+ 'menu_icon': self.elements.call.illustrator.svg.clone(),
1013
+ 'type': 'call',
1014
+ 'params': [self.adaptor.description.elements.call, node]},
1015
+ {'label': 'Script',
1016
+ 'function_call': func,
1017
+ 'menu_icon': self.elements.manipulate.illustrator.svg.clone(),
1018
+ 'type': 'manipulate',
1019
+ 'params': [self.adaptor.description.elements.manipulate, node]},
1020
+ {'label': 'Parallel',
1021
+ 'function_call': func,
1022
+ 'menu_icon': self.elements.parallel.illustrator.svg.clone(),
1023
+ 'type': 'parallel',
1024
+ 'params': [self.adaptor.description.elements.parallel, node]},
1025
+ {'label': 'Decision',
1026
+ 'function_call': func,
1027
+ 'menu_icon': self.elements.choose.illustrator.svg.clone(),
1028
+ 'type': 'choose',
1029
+ 'params': [self.adaptor.description.elements.choose, node]},
1030
+ {'label': 'Loop',
1031
+ 'function_call': func,
1032
+ 'menu_icon': self.elements.loop.illustrator.svg.clone(),
1033
+ 'type': 'loop',
1034
+ 'params': [self.adaptor.description.elements.loop, node]},
1035
+ {'label': 'Terminate',
1036
+ 'function_call': func,
1037
+ 'menu_icon': self.elements.terminate.illustrator.svg.clone(),
1038
+ 'type': 'terminate',
1039
+ 'params': [self.adaptor.description.elements.terminate, node]},
1040
+ {'label': 'Stop',
1041
+ 'function_call': func,
1042
+ 'menu_icon': self.elements.stop.illustrator.svg.clone(),
1043
+ 'type': 'stop',
1044
+ 'params': [self.adaptor.description.elements.stop, node]}
1045
+ ];
1046
+ if(node.parent('parallel_branch').length > 0) {
1047
+ childs.push({
1048
+ 'label': 'Critical',
1049
+ 'function_call': func,
1050
+ 'menu_icon': self.elements.critical.illustrator.svg.clone(),
1051
+ 'type': 'critical',
1052
+ 'params': [self.adaptor.description.elements.critical, node]
1053
+ });
1054
+ }
1055
+ return childs;
1056
+ }, //}}}
1057
+ 'adaptor': {//{{{
1058
+ 'mousedown': function (node,e) {
1059
+ self.events.mousedown(node,e,true,true);
1060
+ },
1061
+ 'click': self.events.click,
1062
+ 'dblclick': self.events.dblclick,
1063
+ 'mouseover': self.events.mouseover,
1064
+ 'mouseout': self.events.mouseout,
1065
+ }//}}}
1066
+ }; /*}}}*/
1067
+ this.elements.group = { /*{{{*/
1068
+ 'type': 'complex',
1069
+ 'illustrator': {//{{{
1070
+ 'endnodes': 'aggregate',
1071
+ 'closeblock': false,
1072
+ 'border': 'injectiongroup', // other value than true,false inidcates the used class for the svg-object
1073
+ 'expansion': function(node) {
1074
+ return 'vertical';
1075
+ },
1076
+ 'col_shift': function(node) {
1077
+ return true;
1078
+ },
1079
+ 'svg': null
1080
+ },//}}}
1081
+ 'description': self.adaptor.theme_dir + 'rngs/group.rng',
1082
+ 'permissible_children': function(node,mode) { //{{{
1083
+ var func = null;
1084
+ if (mode == 'into') { func = self.adaptor.description.insert_first_into }
1085
+ else { func = self.adaptor.description.insert_after }
1086
+ return [
1087
+ ];
1088
+ }, //}}}
1089
+ 'adaptor': {//{{{
1090
+ 'mousedown': function (node,e) {
1091
+ self.events.mousedown(node,e,true,true);
1092
+ },
1093
+ 'click': self.events.click,
1094
+ 'dblclick': self.events.dblclick,
1095
+ 'mouseover': self.events.mouseover,
1096
+ 'mouseout': self.events.mouseout,
1097
+ }//}}}
1098
+ }; /*}}}*/
1099
+ this.elements.start = this.elements.description = { /*{{{*/
1100
+ 'type': 'description',
1101
+ 'illustrator': {//{{{
1102
+ 'endnodes': 'passthrough',
1103
+ 'closeblock': false,
1104
+ 'balance': true,
1105
+ 'expansion': function(node) {
1106
+ return 'vertical';
1107
+ },
1108
+ 'closing_symbol': 'end',
1109
+ 'col_shift': function(node) {
1110
+ return true;
1111
+ },
1112
+ 'svg': self.adaptor.theme_dir + 'symbols/start.svg'
1113
+ },//}}}
1114
+ 'description': null,
1115
+ 'permissible_children': function(node,mode) { //{{{
1116
+ var func = null;
1117
+ if (mode == 'into') { func = self.adaptor.description.insert_first_into }
1118
+ else { func = self.adaptor.description.insert_after }
1119
+ var childs = [
1120
+ {'label': 'Service Call with Scripts',
1121
+ 'function_call': func,
1122
+ 'menu_icon': self.elements.callmanipulate.illustrator.svg.clone(),
1123
+ 'type': 'callmanipulate',
1124
+ 'params': [self.adaptor.description.elements.callmanipulate, node]},
1125
+ {'label': 'Service Call',
1126
+ 'function_call': func,
1127
+ 'menu_icon': self.elements.call.illustrator.svg.clone(),
1128
+ 'type': 'call',
1129
+ 'params': [self.adaptor.description.elements.call, node]},
1130
+ {'label': 'Script',
1131
+ 'function_call': func,
1132
+ 'menu_icon': self.elements.manipulate.illustrator.svg.clone(),
1133
+ 'type': 'manipulate',
1134
+ 'params': [self.adaptor.description.elements.manipulate, node]},
1135
+ {'label': 'Parallel',
1136
+ 'function_call': func,
1137
+ 'menu_icon': self.elements.parallel.illustrator.svg.clone(),
1138
+ 'type': 'parallel',
1139
+ 'params': [self.adaptor.description.elements.parallel, node]},
1140
+ {'label': 'Decision',
1141
+ 'function_call': func,
1142
+ 'menu_icon': self.elements.choose.illustrator.svg.clone(),
1143
+ 'type': 'choose',
1144
+ 'params': [self.adaptor.description.elements.choose, node]},
1145
+ {'label': 'Loop',
1146
+ 'function_call': func,
1147
+ 'menu_icon': self.elements.loop.illustrator.svg.clone(),
1148
+ 'type': 'loop',
1149
+ 'params': [self.adaptor.description.elements.loop, node]},
1150
+ {'label': 'Stop',
1151
+ 'function_call': func,
1152
+ 'menu_icon': self.elements.stop.illustrator.svg.clone(),
1153
+ 'type': 'stop',
1154
+ 'params': [self.adaptor.description.elements.stop, node]}
1155
+ ];
1156
+ if(node.parent('parallel_branch').length > 0) {
1157
+ childs.push({
1158
+ 'label': 'Critical',
1159
+ 'function_call': func,
1160
+ 'menu_icon': self.elements.critical.illustrator.svg.clone(),
1161
+ 'type': 'critical',
1162
+ 'params': [self.adaptor.description.elements.critical, node]
1163
+ });
1164
+ }
1165
+ return childs;
1166
+ }, //}}}
1167
+ 'adaptor': {//{{{
1168
+ 'mousedown': function (node,e) {
1169
+ self.events.mousedown(node,e,true,false);
1170
+ },
1171
+ 'click': self.events.click,
1172
+ 'dblclick': self.events.dblclick,
1173
+ 'mouseover': self.events.mouseover,
1174
+ 'mouseout': self.events.mouseout,
1175
+ }//}}}
1176
+ }; /*}}}*/
1177
+
1178
+ // Abstract Elements
1179
+ // * they may only have an illustrator (or other parts)
1180
+ // * they HAVE TO have a parent
1181
+ this.elements.callmanipulate = { /*{{{*/
1182
+ 'parent': 'call',
1183
+ 'description': self.adaptor.theme_dir + 'rngs/callmanipulate.rng',
1184
+ 'illustrator': {//{{{
1185
+ 'info': function(node){ return { 'element-endpoint': $(node).attr('endpoint') }; },
1186
+ 'svg': self.adaptor.theme_dir + 'symbols/callmanipulate.svg'
1187
+ },//}}}
1188
+ }; /*}}}*/
1189
+ this.elements.loop_head = { /*{{{*/
1190
+ 'parent': 'loop',
1191
+ 'illustrator': {//{{{
1192
+ 'endnodes': 'this',
1193
+ 'closeblock': true,
1194
+ 'label': function(node){
1195
+ var ret = [ { column: 'Label', value: $(node).attr('condition') } ];
1196
+ return ret;
1197
+ },
1198
+ }//}}}
1199
+ }; /*}}}*/
1200
+ this.elements.loop_tail = { /*{{{*/
1201
+ 'parent': 'loop',
1202
+ 'illustrator': {//{{{
1203
+ 'endnodes': 'aggregate',
1204
+ 'closeblock': false,
1205
+ 'closing_symbol': 'loop_finish'
1206
+ },//}}}
1207
+ }; /*}}}*/
1208
+ this.elements.choose_inclusive = { /*{{{*/
1209
+ 'parent': 'choose',
1210
+ 'illustrator': {//{{{
1211
+ 'svg': self.adaptor.theme_dir + 'symbols/choose_inclusive.svg'
1212
+ }//}}}
1213
+ }; /*}}}*/
1214
+ this.elements.choose_exclusive = { /*{{{*/
1215
+ 'parent': 'choose',
1216
+ 'illustrator': {//{{{
1217
+ 'svg': self.adaptor.theme_dir + 'symbols/choose_exclusive.svg'
1218
+ },//}}}
1219
+ }; /*}}}*/
1220
+ this.elements.choose_inclusive_finish = { /*{{{*/
1221
+ 'parent': 'choose_finish',
1222
+ 'illustrator': {//{{{
1223
+ 'svg': self.adaptor.theme_dir + 'symbols/choose_inclusive.svg'
1224
+ }//}}}
1225
+ }; /*}}}*/
1226
+ this.elements.choose_exclusive_finish = { /*{{{*/
1227
+ 'parent': 'choose_finish',
1228
+ 'illustrator': {//{{{
1229
+ 'svg': self.adaptor.theme_dir + 'symbols/choose_exclusive.svg'
1230
+ },//}}}
1231
+ }; /*}}}*/
1232
+ this.elements.loop_head_finish = { /*{{{*/
1233
+ 'parent': 'loop_finish',
1234
+ 'illustrator': {//{{{
1235
+ 'endnodes': 'this',
1236
+ 'closeblock': true,
1237
+ 'svg': self.adaptor.theme_dir + 'symbols/choose_exclusive.svg'
1238
+ }//}}}
1239
+ }; /*}}}*/
1240
+ this.elements.loop_tail_finish = { /*{{{*/
1241
+ 'parent': 'loop_finish',
1242
+ 'illustrator': {//{{{
1243
+ 'endnodes': 'this',
1244
+ 'closeblock': false,
1245
+ 'svg': self.adaptor.theme_dir + 'symbols/choose_exclusive.svg'
1246
+ },//}}}
1247
+ }; /*}}}*/
1248
+ this.elements.parallel_simple = { /*{{{*/
1249
+ 'parent': 'parallel_finish',
1250
+ 'illustrator': {//{{{
1251
+ 'svg': self.adaptor.theme_dir + 'symbols/parallel.svg'
1252
+ }//}}}
1253
+ }; /*}}}*/
1254
+ this.elements.parallel_complex = { /*{{{*/
1255
+ 'parent': 'parallel_finish',
1256
+ 'illustrator': {//{{{
1257
+ 'svg': self.adaptor.theme_dir + 'symbols/complex.svg'
1258
+ },//}}}
1259
+ }; /*}}}*/
1260
+ this.elements.parallel_branch_normal = { /*{{{*/
1261
+ 'parent': 'parallel_branch',
1262
+ 'illustrator': {//{{{
1263
+ 'svg': self.adaptor.theme_dir + 'symbols/parallel_branch_normal.svg'
1264
+ }//}}}
1265
+ }; /*}}}*/
1266
+ this.elements.parallel_branch_event = { /*{{{*/
1267
+ 'parent': 'parallel_branch',
1268
+ 'illustrator': {//{{{
1269
+ 'endnodes': 'this',
1270
+ 'noarrow': false,
1271
+ 'border': true,
1272
+ 'wide': true,
1273
+ 'closing_symbol': 'event_end',
1274
+ 'svg': self.adaptor.theme_dir + 'symbols/parallel_branch_event.svg'
1275
+ }//}}}
1276
+ }; /*}}}*/
1277
+ this.elements.parallel_branch_compact = { /*{{{*/
1278
+ 'parent': 'parallel_branch',
1279
+ 'illustrator': {//{{{
1280
+ 'endnodes': 'this',
1281
+ 'svg': self.adaptor.theme_dir + 'symbols/parallel_branch_compact.svg'
1282
+ }//}}}
1283
+ }; /*}}}*/
1284
+ this.elements.scripts = { /*{{{*/
1285
+ 'description': [self.adaptor.theme_dir + 'rngs/scripts.rng']
1286
+ }; /*}}}*/
1287
+ }