cpee 2.1.43 → 2.1.45
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.
- checksums.yaml +4 -4
- data/cockpit/css/wfadaptor.css +9 -2
- data/cockpit/js/instance.js +45 -29
- data/cockpit/templates/Coopis 2010.xml +69 -10
- data/cockpit/themes/compact/symbols/delete.svg +4 -0
- data/cockpit/themes/compact/theme.js +31 -4
- data/cockpit/themes/control/symbols/delete.svg +4 -0
- data/cockpit/themes/control/theme.js +31 -4
- data/cockpit/themes/default/symbols/delete.svg +4 -0
- data/cockpit/themes/default/theme.js +31 -4
- data/cockpit/themes/extended/symbols/delete.svg +4 -0
- data/cockpit/themes/extended/theme.js +31 -4
- data/cockpit/themes/model/symbols/delete.svg +4 -0
- data/cockpit/themes/model/theme.js +30 -3
- data/cockpit/themes/packed/symbols/delete.svg +4 -0
- data/cockpit/themes/packed/theme.js +31 -4
- data/cockpit/themes/preset/symbols/delete.svg +4 -0
- data/cockpit/themes/preset/theme.js +31 -4
- data/cpee.gemspec +1 -1
- data/server/executionhandlers/ruby/backend/instance.template +1 -1
- data/server/executionhandlers/ruby/connection.rb +4 -0
- data/server/routing/forward-events.lock +0 -0
- metadata +10 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 310a80c81a71084a7728c434c6e6e94f87f6af6f5f335385d7ed894bac4ae969
|
4
|
+
data.tar.gz: 8f154ce48422441b0cb2fe74e6a4c3f49ca55e650bef9d9e5f89b3b0b01becef
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f839d65b84a85fce540360accafd66641a39481354e237e874d18e43d1c7b2193b644430f7f481ea49bf101886768e2b3d732b644d17d359d030d380a6f37d40
|
7
|
+
data.tar.gz: d13397de40eb2e07287e760399b9d9107bdf2ee4cdc290a222f027e5fd4c2c68e8b09bd170aa1c7d76f4a353da9196666f329addc68410e7c95462c2308553ce
|
data/cockpit/css/wfadaptor.css
CHANGED
@@ -27,7 +27,7 @@
|
|
27
27
|
--wfadaptor-selected: #f57900;
|
28
28
|
--wfadaptor-stripe: #e9e9e9;
|
29
29
|
--wfadaptor-background: #ffffff;
|
30
|
-
--wfadaptor-
|
30
|
+
--wfadaptor-menu: #ef2929;
|
31
31
|
--wfadaptor-border: #a1a1a1;
|
32
32
|
}
|
33
33
|
|
@@ -73,7 +73,11 @@ svg g.vote .rline {
|
|
73
73
|
}
|
74
74
|
|
75
75
|
svg .rfill.menu {
|
76
|
-
fill: var(--wfadaptor-
|
76
|
+
fill: var(--wfadaptor-menu);
|
77
|
+
fill-opacity:1;
|
78
|
+
}
|
79
|
+
svg .hfill.menu {
|
80
|
+
fill: var(--wfadaptor-menu);
|
77
81
|
fill-opacity:1;
|
78
82
|
}
|
79
83
|
|
@@ -130,6 +134,9 @@ svg .standfat {
|
|
130
134
|
stroke-opacity:1;
|
131
135
|
stroke-dasharray:none;
|
132
136
|
}
|
137
|
+
svg .standfat.menu {
|
138
|
+
stroke: var(--wfadaptor-menu);
|
139
|
+
}
|
133
140
|
svg .normal {
|
134
141
|
fill: var(--wfadaptor-base);
|
135
142
|
fill-opacity:1;
|
data/cockpit/js/instance.js
CHANGED
@@ -19,7 +19,8 @@ function global_init() {
|
|
19
19
|
subscription_state = 'less';
|
20
20
|
save['state']= undefined;
|
21
21
|
save['dsl'] = undefined;
|
22
|
-
save['
|
22
|
+
save['activity_red_states'] = {}
|
23
|
+
save['activity_blue_states'] = {}
|
23
24
|
save['graph'] = undefined;
|
24
25
|
save['graph_theme'] = undefined;
|
25
26
|
save['graph_adaptor'] = undefined;
|
@@ -682,25 +683,56 @@ function monitor_instance_pos() {// {{{
|
|
682
683
|
}// }}}
|
683
684
|
|
684
685
|
function monitor_instance_running(content,event) {// {{{
|
685
|
-
if (save['state'] == "stopping") return;
|
686
686
|
if (event == "calling") {
|
687
|
-
if (!save['
|
688
|
-
save['
|
687
|
+
if (!save['activity_red_states'][content['activity-uuid']]) {
|
688
|
+
save['activity_red_states'][content['activity-uuid']] = true
|
689
689
|
format_visual_add(content.activity,"active")
|
690
690
|
}
|
691
691
|
} else if (event == "manipulating") {
|
692
|
-
if (!save['
|
693
|
-
save['
|
692
|
+
if (!save['activity_red_states'][content['activity-uuid']]) {
|
693
|
+
save['activity_red_states'][content['activity-uuid']] = true
|
694
694
|
format_visual_add(content.activity,"active")
|
695
695
|
}
|
696
696
|
} else if (event == "done") {
|
697
|
-
if (save['
|
698
|
-
|
699
|
-
format_visual_remove(content.activity,"active")
|
700
|
-
setTimeout(() => {delete save['activity_states'][content['activity-uuid']]},5000);
|
697
|
+
if (save['activity_red_states'][content['activity-uuid']]) {
|
698
|
+
format_visual_remove(content.activity,"active");
|
701
699
|
}
|
700
|
+
save['activity_red_states'][content['activity-uuid']] = true
|
701
|
+
setTimeout(() => {delete save['activity_red_states'][content['activity-uuid']]},5000);
|
702
702
|
}
|
703
703
|
} // }}}
|
704
|
+
function monitor_instance_pos_change(content) {// {{{
|
705
|
+
if (content['at']) {
|
706
|
+
$.each(content['at'],function(a,b){
|
707
|
+
if (!save['activity_blue_states'][b.uuid]) {
|
708
|
+
save['activity_blue_states'][b.uuid] = true
|
709
|
+
format_visual_add(b.position,"passive");
|
710
|
+
}
|
711
|
+
});
|
712
|
+
}
|
713
|
+
if (content['after']) {
|
714
|
+
$.each(content['after'],function(a,b){
|
715
|
+
if (!save['activity_blue_states'][b.uuid]) {
|
716
|
+
save['activity_blue_states'][b.uuid] = true
|
717
|
+
format_visual_add(b.position,"passive");
|
718
|
+
}
|
719
|
+
});
|
720
|
+
}
|
721
|
+
if (content['unmark']) {
|
722
|
+
$.each(content['unmark'],function(a,b){
|
723
|
+
if (save['activity_blue_states'][b.uuid]) {
|
724
|
+
format_visual_remove(b.position,"passive")
|
725
|
+
}
|
726
|
+
save['activity_blue_states'][b.uuid] = true
|
727
|
+
setTimeout(() => {delete save['activity_blue_states'][b.uuid]},5000);
|
728
|
+
});
|
729
|
+
}
|
730
|
+
if (!content['at'] && !content['unmark'] && !content['after'] && !content['wait']) {
|
731
|
+
monitor_instance_pos();
|
732
|
+
}
|
733
|
+
} // }}}
|
734
|
+
|
735
|
+
|
704
736
|
function monitor_instance_state_change(notification) { //{{{
|
705
737
|
if ($('#trackcolumn').length > 0) {
|
706
738
|
if (notification == "finished" || notification == "abandoned") {
|
@@ -763,22 +795,6 @@ function monitor_instance_state_change(notification) { //{{{
|
|
763
795
|
$("#state_text").text(notification);
|
764
796
|
}
|
765
797
|
} //}}}
|
766
|
-
function monitor_instance_pos_change(content) {// {{{
|
767
|
-
if (content['unmark']) {
|
768
|
-
$.each(content['unmark'],function(a,b){
|
769
|
-
format_visual_remove(b.position,"passive")
|
770
|
-
});
|
771
|
-
}
|
772
|
-
if (content['at']) {
|
773
|
-
$.each(content['at'],function(a,b){
|
774
|
-
format_visual_add(b.position,"passive");
|
775
|
-
});
|
776
|
-
}
|
777
|
-
if (!content['at'] && !content['unmark'] && !content['after'] && !content['wait']) {
|
778
|
-
monitor_instance_pos();
|
779
|
-
}
|
780
|
-
} // }}}
|
781
|
-
|
782
798
|
function monitor_instance_vote_add(parts) {// {{{
|
783
799
|
var ctv = $("#votes");
|
784
800
|
|
@@ -1415,12 +1431,12 @@ function ui_pos(e,bl) {
|
|
1415
1431
|
var url = $('body').attr('current-instance');
|
1416
1432
|
var coll = [];
|
1417
1433
|
$('g.element.primitive > g.activities.active, g.element.primitive > g.activities.passive').each(function(a,b){
|
1418
|
-
coll.push($(b).parent().attr('element-id'));
|
1434
|
+
coll.push([$(b).parent().attr('element-id'), $(b).parent().attr('element-type') == 'stop' ? 'after' : 'at']);
|
1419
1435
|
});
|
1420
1436
|
coll = bl(coll);
|
1421
1437
|
var vals = "";
|
1422
1438
|
$(coll).each(function(k,ele){
|
1423
|
-
vals += "<" + ele + ">
|
1439
|
+
vals += "<" + ele[0] + ">" + ele[1] + "</" + ele[0] + ">";
|
1424
1440
|
});
|
1425
1441
|
vals = "<positions xmlns='http://cpee.org/ns/properties/2.0'>" + vals + "</positions>";
|
1426
1442
|
$.ajax({
|
@@ -1444,7 +1460,7 @@ function del_ui_pos(e) {
|
|
1444
1460
|
}
|
1445
1461
|
function add_ui_pos(e) {
|
1446
1462
|
ui_pos(e,function(coll){
|
1447
|
-
coll.push($(e).attr('id'));
|
1463
|
+
coll.push([$(e).attr('id'), e.nodeName == 'stop' ? 'after' : 'at']);
|
1448
1464
|
return coll;
|
1449
1465
|
});
|
1450
1466
|
}
|
@@ -4,7 +4,7 @@
|
|
4
4
|
<dataelements>
|
5
5
|
<persons>3</persons>
|
6
6
|
<card>Visa_12345</card>
|
7
|
-
<airline
|
7
|
+
<airline/>
|
8
8
|
<hotels>[]</hotels>
|
9
9
|
<from>Vienna</from>
|
10
10
|
<to>Prague</to>
|
@@ -37,9 +37,9 @@
|
|
37
37
|
<label>Book Airline 1</label>
|
38
38
|
<method>:post</method>
|
39
39
|
<arguments>
|
40
|
-
<from
|
41
|
-
<to
|
42
|
-
<persons
|
40
|
+
<from>!data.from</from>
|
41
|
+
<to>!data.to</to>
|
42
|
+
<persons>!data.persons</persons>
|
43
43
|
</arguments>
|
44
44
|
</parameters>
|
45
45
|
<code>
|
@@ -56,6 +56,9 @@ status.update 1, 'Hotel'</finalize>
|
|
56
56
|
<_timing_avg/>
|
57
57
|
<explanations/>
|
58
58
|
</_timing>
|
59
|
+
<_shifting>
|
60
|
+
<_shifting_type>Duration</_shifting_type>
|
61
|
+
</_shifting>
|
59
62
|
<_context_data_analysis>
|
60
63
|
<probes/>
|
61
64
|
<ips/>
|
@@ -86,15 +89,46 @@ status.update 1, 'Hotel'</finalize>
|
|
86
89
|
<label>Book Hotel</label>
|
87
90
|
<method>:post</method>
|
88
91
|
<arguments>
|
89
|
-
<to
|
92
|
+
<to>!data.to</to>
|
90
93
|
</arguments>
|
91
94
|
</parameters>
|
92
95
|
<code>
|
96
|
+
<prepare/>
|
93
97
|
<finalize output="result">data.hotels << result.value('id')
|
94
98
|
data.costs += result.value('costs').to_f</finalize>
|
99
|
+
<update output="result"/>
|
100
|
+
<rescue output="result"/>
|
95
101
|
</code>
|
96
|
-
<annotations
|
97
|
-
|
102
|
+
<annotations>
|
103
|
+
<_timing>
|
104
|
+
<_timing_weight/>
|
105
|
+
<_timing_avg/>
|
106
|
+
<explanations/>
|
107
|
+
</_timing>
|
108
|
+
<_shifting>
|
109
|
+
<_shifting_type>Duration</_shifting_type>
|
110
|
+
</_shifting>
|
111
|
+
<_context_data_analysis>
|
112
|
+
<probes/>
|
113
|
+
<ips/>
|
114
|
+
</_context_data_analysis>
|
115
|
+
<report>
|
116
|
+
<url/>
|
117
|
+
</report>
|
118
|
+
<_notes>
|
119
|
+
<_notes_general/>
|
120
|
+
</_notes>
|
121
|
+
</annotations>
|
122
|
+
<documentation>
|
123
|
+
<input/>
|
124
|
+
<output/>
|
125
|
+
<implementation>
|
126
|
+
<description/>
|
127
|
+
</implementation>
|
128
|
+
<code>
|
129
|
+
<description/>
|
130
|
+
</code>
|
131
|
+
</documentation>
|
98
132
|
</call>
|
99
133
|
</parallel_branch>
|
100
134
|
<manipulate id="a3">data.persons -= 1</manipulate>
|
@@ -107,11 +141,36 @@ data.costs += result.value('costs').to_f</finalize>
|
|
107
141
|
<label>Approve Hotel</label>
|
108
142
|
<method>:post</method>
|
109
143
|
<arguments>
|
110
|
-
<costs
|
144
|
+
<costs>!data.costs</costs>
|
111
145
|
</arguments>
|
112
146
|
</parameters>
|
113
|
-
<annotations
|
114
|
-
|
147
|
+
<annotations>
|
148
|
+
<_timing>
|
149
|
+
<_timing_weight/>
|
150
|
+
<_timing_avg/>
|
151
|
+
<explanations/>
|
152
|
+
</_timing>
|
153
|
+
<_shifting>
|
154
|
+
<_shifting_type>Duration</_shifting_type>
|
155
|
+
</_shifting>
|
156
|
+
<_context_data_analysis>
|
157
|
+
<probes/>
|
158
|
+
<ips/>
|
159
|
+
</_context_data_analysis>
|
160
|
+
<report>
|
161
|
+
<url/>
|
162
|
+
</report>
|
163
|
+
<_notes>
|
164
|
+
<_notes_general/>
|
165
|
+
</_notes>
|
166
|
+
</annotations>
|
167
|
+
<documentation>
|
168
|
+
<input/>
|
169
|
+
<output/>
|
170
|
+
<implementation>
|
171
|
+
<description/>
|
172
|
+
</implementation>
|
173
|
+
</documentation>
|
115
174
|
</call>
|
116
175
|
</alternative>
|
117
176
|
</choose>
|
@@ -93,7 +93,7 @@ function WFAdaptorManifestation(adaptor) {
|
|
93
93
|
|
94
94
|
nodes = JSON.parse(nodes);
|
95
95
|
$(nodes).each(function(key,str) {
|
96
|
-
nodes[key] = $X(str)
|
96
|
+
nodes[key] = $X(str);
|
97
97
|
});
|
98
98
|
|
99
99
|
var check1 = [];
|
@@ -176,14 +176,40 @@ function WFAdaptorManifestation(adaptor) {
|
|
176
176
|
|
177
177
|
if(xml_node.get(0).tagName != 'description' && !self.elements[xml_node.get(0).tagName].neverdelete) {
|
178
178
|
var icon = self.elements[xml_node.get(0).tagName].illustrator.svg.clone();
|
179
|
-
icon.
|
179
|
+
icon.find('.rfill').addClass('menu');
|
180
|
+
icon.find('.hfill').addClass('menu');
|
180
181
|
menu['Delete'] = [{
|
181
182
|
'label': 'Remove Element',
|
182
|
-
'function_call': function(selector,target,selected){
|
183
|
+
'function_call': function(selector,target,selected){
|
184
|
+
del_ui_pos(target)
|
185
|
+
self.adaptor.description.remove(selector,target);
|
186
|
+
},
|
183
187
|
'menu_icon': icon,
|
184
188
|
'type': undefined,
|
185
189
|
'params': [null, xml_node, self.selected()]
|
186
190
|
}];
|
191
|
+
var nodes = localStorage.getItem('marked');
|
192
|
+
nodes = JSON.parse(nodes);
|
193
|
+
if (nodes && nodes.length > 0) {
|
194
|
+
var icond = self.resources['delete'].clone();
|
195
|
+
icond.children('.standfat').addClass('menu');
|
196
|
+
menu['Delete'].push({
|
197
|
+
'label': 'Remove Marked Elements',
|
198
|
+
'function_call': function(){
|
199
|
+
$(nodes).each(function(key,str) {
|
200
|
+
nodes[key] = $X(str);
|
201
|
+
});
|
202
|
+
$(nodes).each(function(key,node){
|
203
|
+
var target = self.adaptor.description.get_node_by_svg_id($(node).attr('svg-id'));
|
204
|
+
del_ui_pos(target)
|
205
|
+
self.adaptor.description.remove(null,target);
|
206
|
+
});
|
207
|
+
},
|
208
|
+
'menu_icon': icond,
|
209
|
+
'type': undefined,
|
210
|
+
'params': []
|
211
|
+
})
|
212
|
+
}
|
187
213
|
}
|
188
214
|
if($('> code', xml_node).length > 0 && xml_node.get(0).tagName == 'call') {
|
189
215
|
var icon = self.elements.callmanipulate.illustrator.svg.clone();
|
@@ -198,7 +224,7 @@ function WFAdaptorManifestation(adaptor) {
|
|
198
224
|
}
|
199
225
|
if (xml_node.get(0).tagName == "call" || xml_node.get(0).tagName == "manipulate" || xml_node.get(0).tagName == "stop") {
|
200
226
|
var icon = self.elements.call.illustrator.svg.clone();
|
201
|
-
icon.children('g.replace').addClass('
|
227
|
+
icon.children('g.replace').addClass('passive');
|
202
228
|
var vtarget = self.adaptor.illustrator.get_node_by_svg_id(svgid);
|
203
229
|
if (vtarget.length > 0) {
|
204
230
|
if (vtarget.parents('g.activities.passive, g.activities.active').length > 0) {
|
@@ -299,6 +325,7 @@ function WFAdaptorManifestation(adaptor) {
|
|
299
325
|
|
300
326
|
// other resources
|
301
327
|
this.resources.arrow = self.adaptor.theme_dir + 'symbols/arrow.svg';
|
328
|
+
this.resources.delete = self.adaptor.theme_dir + 'symbols/delete.svg';
|
302
329
|
|
303
330
|
// Primitive Elements
|
304
331
|
this.elements.call = { /*{{{*/
|
@@ -93,7 +93,7 @@ function WFAdaptorManifestation(adaptor) {
|
|
93
93
|
|
94
94
|
nodes = JSON.parse(nodes);
|
95
95
|
$(nodes).each(function(key,str) {
|
96
|
-
nodes[key] = $X(str)
|
96
|
+
nodes[key] = $X(str);
|
97
97
|
});
|
98
98
|
|
99
99
|
var check1 = [];
|
@@ -176,14 +176,40 @@ function WFAdaptorManifestation(adaptor) {
|
|
176
176
|
|
177
177
|
if(xml_node.get(0).tagName != 'description' && !self.elements[xml_node.get(0).tagName].neverdelete) {
|
178
178
|
var icon = self.elements[xml_node.get(0).tagName].illustrator.svg.clone();
|
179
|
-
icon.
|
179
|
+
icon.find('.rfill').addClass('menu');
|
180
|
+
icon.find('.hfill').addClass('menu');
|
180
181
|
menu['Delete'] = [{
|
181
182
|
'label': 'Remove Element',
|
182
|
-
'function_call': function(selector,target,selected){
|
183
|
+
'function_call': function(selector,target,selected){
|
184
|
+
del_ui_pos(target)
|
185
|
+
self.adaptor.description.remove(selector,target);
|
186
|
+
},
|
183
187
|
'menu_icon': icon,
|
184
188
|
'type': undefined,
|
185
189
|
'params': [null, xml_node, self.selected()]
|
186
190
|
}];
|
191
|
+
var nodes = localStorage.getItem('marked');
|
192
|
+
nodes = JSON.parse(nodes);
|
193
|
+
if (nodes && nodes.length > 0) {
|
194
|
+
var icond = self.resources['delete'].clone();
|
195
|
+
icond.children('.standfat').addClass('menu');
|
196
|
+
menu['Delete'].push({
|
197
|
+
'label': 'Remove Marked Elements',
|
198
|
+
'function_call': function(){
|
199
|
+
$(nodes).each(function(key,str) {
|
200
|
+
nodes[key] = $X(str);
|
201
|
+
});
|
202
|
+
$(nodes).each(function(key,node){
|
203
|
+
var target = self.adaptor.description.get_node_by_svg_id($(node).attr('svg-id'));
|
204
|
+
del_ui_pos(target)
|
205
|
+
self.adaptor.description.remove(null,target);
|
206
|
+
});
|
207
|
+
},
|
208
|
+
'menu_icon': icond,
|
209
|
+
'type': undefined,
|
210
|
+
'params': []
|
211
|
+
})
|
212
|
+
}
|
187
213
|
}
|
188
214
|
if($('> code', xml_node).length > 0 && xml_node.get(0).tagName == 'call') {
|
189
215
|
var icon = self.elements.callmanipulate.illustrator.svg.clone();
|
@@ -198,7 +224,7 @@ function WFAdaptorManifestation(adaptor) {
|
|
198
224
|
}
|
199
225
|
if (xml_node.get(0).tagName == "call" || xml_node.get(0).tagName == "manipulate" || xml_node.get(0).tagName == "stop") {
|
200
226
|
var icon = self.elements.call.illustrator.svg.clone();
|
201
|
-
icon.children('g.replace').addClass('
|
227
|
+
icon.children('g.replace').addClass('passive');
|
202
228
|
var vtarget = self.adaptor.illustrator.get_node_by_svg_id(svgid);
|
203
229
|
if (vtarget.length > 0) {
|
204
230
|
if (vtarget.parents('g.activities.passive, g.activities.active').length > 0) {
|
@@ -299,6 +325,7 @@ function WFAdaptorManifestation(adaptor) {
|
|
299
325
|
|
300
326
|
// other resources
|
301
327
|
this.resources.arrow = self.adaptor.theme_dir + 'symbols/arrow.svg';
|
328
|
+
this.resources.delete = self.adaptor.theme_dir + 'symbols/delete.svg';
|
302
329
|
|
303
330
|
// Primitive Elements
|
304
331
|
this.elements.call = { /*{{{*/
|
@@ -93,7 +93,7 @@ function WFAdaptorManifestation(adaptor) {
|
|
93
93
|
|
94
94
|
nodes = JSON.parse(nodes);
|
95
95
|
$(nodes).each(function(key,str) {
|
96
|
-
nodes[key] = $X(str)
|
96
|
+
nodes[key] = $X(str);
|
97
97
|
});
|
98
98
|
|
99
99
|
var check1 = [];
|
@@ -176,14 +176,40 @@ function WFAdaptorManifestation(adaptor) {
|
|
176
176
|
|
177
177
|
if(xml_node.get(0).tagName != 'description' && !self.elements[xml_node.get(0).tagName].neverdelete) {
|
178
178
|
var icon = self.elements[xml_node.get(0).tagName].illustrator.svg.clone();
|
179
|
-
icon.
|
179
|
+
icon.find('.rfill').addClass('menu');
|
180
|
+
icon.find('.hfill').addClass('menu');
|
180
181
|
menu['Delete'] = [{
|
181
182
|
'label': 'Remove Element',
|
182
|
-
'function_call': function(selector,target,selected){
|
183
|
+
'function_call': function(selector,target,selected){
|
184
|
+
del_ui_pos(target)
|
185
|
+
self.adaptor.description.remove(selector,target);
|
186
|
+
},
|
183
187
|
'menu_icon': icon,
|
184
188
|
'type': undefined,
|
185
189
|
'params': [null, xml_node, self.selected()]
|
186
190
|
}];
|
191
|
+
var nodes = localStorage.getItem('marked');
|
192
|
+
nodes = JSON.parse(nodes);
|
193
|
+
if (nodes && nodes.length > 0) {
|
194
|
+
var icond = self.resources['delete'].clone();
|
195
|
+
icond.children('.standfat').addClass('menu');
|
196
|
+
menu['Delete'].push({
|
197
|
+
'label': 'Remove Marked Elements',
|
198
|
+
'function_call': function(){
|
199
|
+
$(nodes).each(function(key,str) {
|
200
|
+
nodes[key] = $X(str);
|
201
|
+
});
|
202
|
+
$(nodes).each(function(key,node){
|
203
|
+
var target = self.adaptor.description.get_node_by_svg_id($(node).attr('svg-id'));
|
204
|
+
del_ui_pos(target)
|
205
|
+
self.adaptor.description.remove(null,target);
|
206
|
+
});
|
207
|
+
},
|
208
|
+
'menu_icon': icond,
|
209
|
+
'type': undefined,
|
210
|
+
'params': []
|
211
|
+
})
|
212
|
+
}
|
187
213
|
}
|
188
214
|
if($('> code', xml_node).length > 0 && xml_node.get(0).tagName == 'call') {
|
189
215
|
var icon = self.elements.callmanipulate.illustrator.svg.clone();
|
@@ -198,7 +224,7 @@ function WFAdaptorManifestation(adaptor) {
|
|
198
224
|
}
|
199
225
|
if (xml_node.get(0).tagName == "call" || xml_node.get(0).tagName == "manipulate" || xml_node.get(0).tagName == "stop") {
|
200
226
|
var icon = self.elements.call.illustrator.svg.clone();
|
201
|
-
icon.children('g.replace').addClass('
|
227
|
+
icon.children('g.replace').addClass('passive');
|
202
228
|
var vtarget = self.adaptor.illustrator.get_node_by_svg_id(svgid);
|
203
229
|
if (vtarget.length > 0) {
|
204
230
|
if (vtarget.parents('g.activities.passive, g.activities.active').length > 0) {
|
@@ -299,6 +325,7 @@ function WFAdaptorManifestation(adaptor) {
|
|
299
325
|
|
300
326
|
// other resources
|
301
327
|
this.resources.arrow = self.adaptor.theme_dir + 'symbols/arrow.svg';
|
328
|
+
this.resources.delete = self.adaptor.theme_dir + 'symbols/delete.svg';
|
302
329
|
|
303
330
|
// Primitive Elements
|
304
331
|
this.elements.call = { /*{{{*/
|
@@ -93,7 +93,7 @@ function WFAdaptorManifestation(adaptor) {
|
|
93
93
|
|
94
94
|
nodes = JSON.parse(nodes);
|
95
95
|
$(nodes).each(function(key,str) {
|
96
|
-
nodes[key] = $X(str)
|
96
|
+
nodes[key] = $X(str);
|
97
97
|
});
|
98
98
|
|
99
99
|
var check1 = [];
|
@@ -176,14 +176,40 @@ function WFAdaptorManifestation(adaptor) {
|
|
176
176
|
|
177
177
|
if(xml_node.get(0).tagName != 'description' && !self.elements[xml_node.get(0).tagName].neverdelete) {
|
178
178
|
var icon = self.elements[xml_node.get(0).tagName].illustrator.svg.clone();
|
179
|
-
icon.
|
179
|
+
icon.find('.rfill').addClass('menu');
|
180
|
+
icon.find('.hfill').addClass('menu');
|
180
181
|
menu['Delete'] = [{
|
181
182
|
'label': 'Remove Element',
|
182
|
-
'function_call': function(selector,target,selected){
|
183
|
+
'function_call': function(selector,target,selected){
|
184
|
+
del_ui_pos(target)
|
185
|
+
self.adaptor.description.remove(selector,target);
|
186
|
+
},
|
183
187
|
'menu_icon': icon,
|
184
188
|
'type': undefined,
|
185
189
|
'params': [null, xml_node, self.selected()]
|
186
190
|
}];
|
191
|
+
var nodes = localStorage.getItem('marked');
|
192
|
+
nodes = JSON.parse(nodes);
|
193
|
+
if (nodes && nodes.length > 0) {
|
194
|
+
var icond = self.resources['delete'].clone();
|
195
|
+
icond.children('.standfat').addClass('menu');
|
196
|
+
menu['Delete'].push({
|
197
|
+
'label': 'Remove Marked Elements',
|
198
|
+
'function_call': function(){
|
199
|
+
$(nodes).each(function(key,str) {
|
200
|
+
nodes[key] = $X(str);
|
201
|
+
});
|
202
|
+
$(nodes).each(function(key,node){
|
203
|
+
var target = self.adaptor.description.get_node_by_svg_id($(node).attr('svg-id'));
|
204
|
+
del_ui_pos(target)
|
205
|
+
self.adaptor.description.remove(null,target);
|
206
|
+
});
|
207
|
+
},
|
208
|
+
'menu_icon': icond,
|
209
|
+
'type': undefined,
|
210
|
+
'params': []
|
211
|
+
})
|
212
|
+
}
|
187
213
|
}
|
188
214
|
if($('> code', xml_node).length > 0 && xml_node.get(0).tagName == 'call') {
|
189
215
|
var icon = self.elements.callmanipulate.illustrator.svg.clone();
|
@@ -198,7 +224,7 @@ function WFAdaptorManifestation(adaptor) {
|
|
198
224
|
}
|
199
225
|
if (xml_node.get(0).tagName == "call" || xml_node.get(0).tagName == "manipulate" || xml_node.get(0).tagName == "stop") {
|
200
226
|
var icon = self.elements.call.illustrator.svg.clone();
|
201
|
-
icon.children('g.replace').addClass('
|
227
|
+
icon.children('g.replace').addClass('passive');
|
202
228
|
var vtarget = self.adaptor.illustrator.get_node_by_svg_id(svgid);
|
203
229
|
if (vtarget.length > 0) {
|
204
230
|
if (vtarget.parents('g.activities.passive, g.activities.active').length > 0) {
|
@@ -299,6 +325,7 @@ function WFAdaptorManifestation(adaptor) {
|
|
299
325
|
|
300
326
|
// other resources
|
301
327
|
this.resources.arrow = self.adaptor.theme_dir + 'symbols/arrow.svg';
|
328
|
+
this.resources.delete = self.adaptor.theme_dir + 'symbols/delete.svg';
|
302
329
|
|
303
330
|
// Primitive Elements
|
304
331
|
this.elements.call = { /*{{{*/
|
@@ -93,7 +93,7 @@ function WFAdaptorManifestation(adaptor) {
|
|
93
93
|
|
94
94
|
nodes = JSON.parse(nodes);
|
95
95
|
$(nodes).each(function(key,str) {
|
96
|
-
nodes[key] = $X(str)
|
96
|
+
nodes[key] = $X(str);
|
97
97
|
});
|
98
98
|
|
99
99
|
var check1 = [];
|
@@ -176,14 +176,40 @@ function WFAdaptorManifestation(adaptor) {
|
|
176
176
|
|
177
177
|
if(xml_node.get(0).tagName != 'description' && !self.elements[xml_node.get(0).tagName].neverdelete) {
|
178
178
|
var icon = self.elements[xml_node.get(0).tagName].illustrator.svg.clone();
|
179
|
-
icon.
|
179
|
+
icon.find('.rfill').addClass('menu');
|
180
|
+
icon.find('.hfill').addClass('menu');
|
180
181
|
menu['Delete'] = [{
|
181
182
|
'label': 'Remove Element',
|
182
|
-
'function_call': function(selector,target,selected){
|
183
|
+
'function_call': function(selector,target,selected){
|
184
|
+
del_ui_pos(target)
|
185
|
+
self.adaptor.description.remove(selector,target);
|
186
|
+
},
|
183
187
|
'menu_icon': icon,
|
184
188
|
'type': undefined,
|
185
189
|
'params': [null, xml_node, self.selected()]
|
186
190
|
}];
|
191
|
+
var nodes = localStorage.getItem('marked');
|
192
|
+
nodes = JSON.parse(nodes);
|
193
|
+
if (nodes && nodes.length > 0) {
|
194
|
+
var icond = self.resources['delete'].clone();
|
195
|
+
icond.children('.standfat').addClass('menu');
|
196
|
+
menu['Delete'].push({
|
197
|
+
'label': 'Remove Marked Elements',
|
198
|
+
'function_call': function(){
|
199
|
+
$(nodes).each(function(key,str) {
|
200
|
+
nodes[key] = $X(str);
|
201
|
+
});
|
202
|
+
$(nodes).each(function(key,node){
|
203
|
+
var target = self.adaptor.description.get_node_by_svg_id($(node).attr('svg-id'));
|
204
|
+
del_ui_pos(target)
|
205
|
+
self.adaptor.description.remove(null,target);
|
206
|
+
});
|
207
|
+
},
|
208
|
+
'menu_icon': icond,
|
209
|
+
'type': undefined,
|
210
|
+
'params': []
|
211
|
+
})
|
212
|
+
}
|
187
213
|
}
|
188
214
|
if($('> code', xml_node).length > 0 && xml_node.get(0).tagName == 'call') {
|
189
215
|
var icon = self.elements.callmanipulate.illustrator.svg.clone();
|
@@ -275,6 +301,7 @@ function WFAdaptorManifestation(adaptor) {
|
|
275
301
|
|
276
302
|
// other resources
|
277
303
|
this.resources.arrow = self.adaptor.theme_dir + 'symbols/arrow.svg';
|
304
|
+
this.resources.delete = self.adaptor.theme_dir + 'symbols/delete.svg';
|
278
305
|
|
279
306
|
// Primitive Elements
|
280
307
|
this.elements.call = { /*{{{*/
|
@@ -93,7 +93,7 @@ function WFAdaptorManifestation(adaptor) {
|
|
93
93
|
|
94
94
|
nodes = JSON.parse(nodes);
|
95
95
|
$(nodes).each(function(key,str) {
|
96
|
-
nodes[key] = $X(str)
|
96
|
+
nodes[key] = $X(str);
|
97
97
|
});
|
98
98
|
|
99
99
|
var check1 = [];
|
@@ -176,14 +176,40 @@ function WFAdaptorManifestation(adaptor) {
|
|
176
176
|
|
177
177
|
if(xml_node.get(0).tagName != 'description' && !self.elements[xml_node.get(0).tagName].neverdelete) {
|
178
178
|
var icon = self.elements[xml_node.get(0).tagName].illustrator.svg.clone();
|
179
|
-
icon.
|
179
|
+
icon.find('.rfill').addClass('menu');
|
180
|
+
icon.find('.hfill').addClass('menu');
|
180
181
|
menu['Delete'] = [{
|
181
182
|
'label': 'Remove Element',
|
182
|
-
'function_call': function(selector,target,selected){
|
183
|
+
'function_call': function(selector,target,selected){
|
184
|
+
del_ui_pos(target)
|
185
|
+
self.adaptor.description.remove(selector,target);
|
186
|
+
},
|
183
187
|
'menu_icon': icon,
|
184
188
|
'type': undefined,
|
185
189
|
'params': [null, xml_node, self.selected()]
|
186
190
|
}];
|
191
|
+
var nodes = localStorage.getItem('marked');
|
192
|
+
nodes = JSON.parse(nodes);
|
193
|
+
if (nodes && nodes.length > 0) {
|
194
|
+
var icond = self.resources['delete'].clone();
|
195
|
+
icond.children('.standfat').addClass('menu');
|
196
|
+
menu['Delete'].push({
|
197
|
+
'label': 'Remove Marked Elements',
|
198
|
+
'function_call': function(){
|
199
|
+
$(nodes).each(function(key,str) {
|
200
|
+
nodes[key] = $X(str);
|
201
|
+
});
|
202
|
+
$(nodes).each(function(key,node){
|
203
|
+
var target = self.adaptor.description.get_node_by_svg_id($(node).attr('svg-id'));
|
204
|
+
del_ui_pos(target)
|
205
|
+
self.adaptor.description.remove(null,target);
|
206
|
+
});
|
207
|
+
},
|
208
|
+
'menu_icon': icond,
|
209
|
+
'type': undefined,
|
210
|
+
'params': []
|
211
|
+
})
|
212
|
+
}
|
187
213
|
}
|
188
214
|
if($('> code', xml_node).length > 0 && xml_node.get(0).tagName == 'call') {
|
189
215
|
var icon = self.elements.callmanipulate.illustrator.svg.clone();
|
@@ -198,7 +224,7 @@ function WFAdaptorManifestation(adaptor) {
|
|
198
224
|
}
|
199
225
|
if (xml_node.get(0).tagName == "call" || xml_node.get(0).tagName == "manipulate" || xml_node.get(0).tagName == "stop") {
|
200
226
|
var icon = self.elements.call.illustrator.svg.clone();
|
201
|
-
icon.children('g.replace').addClass('
|
227
|
+
icon.children('g.replace').addClass('passive');
|
202
228
|
var vtarget = self.adaptor.illustrator.get_node_by_svg_id(svgid);
|
203
229
|
if (vtarget.length > 0) {
|
204
230
|
if (vtarget.parents('g.activities.passive, g.activities.active').length > 0) {
|
@@ -299,6 +325,7 @@ function WFAdaptorManifestation(adaptor) {
|
|
299
325
|
|
300
326
|
// other resources
|
301
327
|
this.resources.arrow = self.adaptor.theme_dir + 'symbols/arrow.svg';
|
328
|
+
this.resources.delete = self.adaptor.theme_dir + 'symbols/delete.svg';
|
302
329
|
|
303
330
|
// Primitive Elements
|
304
331
|
this.elements.call = { /*{{{*/
|
@@ -93,7 +93,7 @@ function WFAdaptorManifestation(adaptor) {
|
|
93
93
|
|
94
94
|
nodes = JSON.parse(nodes);
|
95
95
|
$(nodes).each(function(key,str) {
|
96
|
-
nodes[key] = $X(str)
|
96
|
+
nodes[key] = $X(str);
|
97
97
|
});
|
98
98
|
|
99
99
|
var check1 = [];
|
@@ -176,14 +176,40 @@ function WFAdaptorManifestation(adaptor) {
|
|
176
176
|
|
177
177
|
if(xml_node.get(0).tagName != 'description' && !self.elements[xml_node.get(0).tagName].neverdelete) {
|
178
178
|
var icon = self.elements[xml_node.get(0).tagName].illustrator.svg.clone();
|
179
|
-
icon.
|
179
|
+
icon.find('.rfill').addClass('menu');
|
180
|
+
icon.find('.hfill').addClass('menu');
|
180
181
|
menu['Delete'] = [{
|
181
182
|
'label': 'Remove Element',
|
182
|
-
'function_call': function(selector,target,selected){
|
183
|
+
'function_call': function(selector,target,selected){
|
184
|
+
del_ui_pos(target)
|
185
|
+
self.adaptor.description.remove(selector,target);
|
186
|
+
},
|
183
187
|
'menu_icon': icon,
|
184
188
|
'type': undefined,
|
185
189
|
'params': [null, xml_node, self.selected()]
|
186
190
|
}];
|
191
|
+
var nodes = localStorage.getItem('marked');
|
192
|
+
nodes = JSON.parse(nodes);
|
193
|
+
if (nodes && nodes.length > 0) {
|
194
|
+
var icond = self.resources['delete'].clone();
|
195
|
+
icond.children('.standfat').addClass('menu');
|
196
|
+
menu['Delete'].push({
|
197
|
+
'label': 'Remove Marked Elements',
|
198
|
+
'function_call': function(){
|
199
|
+
$(nodes).each(function(key,str) {
|
200
|
+
nodes[key] = $X(str);
|
201
|
+
});
|
202
|
+
$(nodes).each(function(key,node){
|
203
|
+
var target = self.adaptor.description.get_node_by_svg_id($(node).attr('svg-id'));
|
204
|
+
del_ui_pos(target)
|
205
|
+
self.adaptor.description.remove(null,target);
|
206
|
+
});
|
207
|
+
},
|
208
|
+
'menu_icon': icond,
|
209
|
+
'type': undefined,
|
210
|
+
'params': []
|
211
|
+
})
|
212
|
+
}
|
187
213
|
}
|
188
214
|
if($('> code', xml_node).length > 0 && xml_node.get(0).tagName == 'call') {
|
189
215
|
var icon = self.elements.callmanipulate.illustrator.svg.clone();
|
@@ -198,7 +224,7 @@ function WFAdaptorManifestation(adaptor) {
|
|
198
224
|
}
|
199
225
|
if (xml_node.get(0).tagName == "call" || xml_node.get(0).tagName == "manipulate" || xml_node.get(0).tagName == "stop") {
|
200
226
|
var icon = self.elements.call.illustrator.svg.clone();
|
201
|
-
icon.children('g.replace').addClass('
|
227
|
+
icon.children('g.replace').addClass('passive');
|
202
228
|
var vtarget = self.adaptor.illustrator.get_node_by_svg_id(svgid);
|
203
229
|
if (vtarget.length > 0) {
|
204
230
|
if (vtarget.parents('g.activities.passive, g.activities.active').length > 0) {
|
@@ -299,6 +325,7 @@ function WFAdaptorManifestation(adaptor) {
|
|
299
325
|
|
300
326
|
// other resources
|
301
327
|
this.resources.arrow = self.adaptor.theme_dir + 'symbols/arrow.svg';
|
328
|
+
this.resources.delete = self.adaptor.theme_dir + 'symbols/delete.svg';
|
302
329
|
|
303
330
|
// Primitive Elements
|
304
331
|
this.elements.call = { /*{{{*/
|
data/cpee.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = "cpee"
|
3
|
-
s.version = "2.1.
|
3
|
+
s.version = "2.1.45"
|
4
4
|
s.platform = Gem::Platform::RUBY
|
5
5
|
s.license = "LGPL-3.0"
|
6
6
|
s.summary = "Preliminary release of cloud process execution engine (cpee.org). If you just need workflow execution, without a rest service exposing it, then use WEEL."
|
@@ -11,7 +11,7 @@ class Instance < WEEL
|
|
11
11
|
<% end -%>
|
12
12
|
|
13
13
|
<% unless positions.nil? || positions.empty? -%>
|
14
|
-
search <% positions.each_with_index { |de,i| %><%= (i > 0 ? ', ' : '') %>Position.new(:<%= de[0] %>, :<%=de[1] %>, <%= de[2].nil? || de[2].strip.empty? ? 'nil' : '"' + de[2] + '"' %>)<% } %>
|
14
|
+
search <% positions.each_with_index { |de,i| %><%= (i > 0 ? ', ' : '') %>Position.new(:<%= de[0] %>, 0, :<%=de[1] %>, <%= de[2].nil? || de[2].strip.empty? ? 'nil' : '"' + de[2] + '"' %>)<% } %>
|
15
15
|
<% end -%>
|
16
16
|
|
17
17
|
<%= dsl.strip.gsub(/\n/,"\n ") %>
|
@@ -200,6 +200,10 @@ class ConnectionWrapper < WEEL::ConnectionWrapperBase
|
|
200
200
|
true
|
201
201
|
end # }}}
|
202
202
|
|
203
|
+
def activity_uuid
|
204
|
+
@handler_activity_uuid
|
205
|
+
end
|
206
|
+
|
203
207
|
def inform_activity_done # {{{
|
204
208
|
@controller.notify("activity/done", :'activity-uuid' => @handler_activity_uuid, :endpoint => @handler_endpoint, :label => @label, :activity => @handler_position)
|
205
209
|
@controller.notify("status/resource_utilization", :mib => GetProcessMem.new.mb, **Process.times.to_h)
|
File without changes
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cpee
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.
|
4
|
+
version: 2.1.45
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Juergen eTM Mangler
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: tools
|
12
12
|
cert_chain: []
|
13
|
-
date: 2023-03-
|
13
|
+
date: 2023-03-13 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: riddl
|
@@ -293,6 +293,7 @@ files:
|
|
293
293
|
- cockpit/themes/compact/symbols/closed_loop_measuring.svg
|
294
294
|
- cockpit/themes/compact/symbols/complex.svg
|
295
295
|
- cockpit/themes/compact/symbols/critical.svg
|
296
|
+
- cockpit/themes/compact/symbols/delete.svg
|
296
297
|
- cockpit/themes/compact/symbols/end.svg
|
297
298
|
- cockpit/themes/compact/symbols/escape.svg
|
298
299
|
- cockpit/themes/compact/symbols/event_end.svg
|
@@ -348,6 +349,7 @@ files:
|
|
348
349
|
- cockpit/themes/control/symbols/closed_loop_measuring.svg
|
349
350
|
- cockpit/themes/control/symbols/complex.svg
|
350
351
|
- cockpit/themes/control/symbols/critical.svg
|
352
|
+
- cockpit/themes/control/symbols/delete.svg
|
351
353
|
- cockpit/themes/control/symbols/end.svg
|
352
354
|
- cockpit/themes/control/symbols/escape.svg
|
353
355
|
- cockpit/themes/control/symbols/event_end.svg
|
@@ -403,6 +405,7 @@ files:
|
|
403
405
|
- cockpit/themes/default/symbols/closed_loop_measuring.svg
|
404
406
|
- cockpit/themes/default/symbols/complex.svg
|
405
407
|
- cockpit/themes/default/symbols/critical.svg
|
408
|
+
- cockpit/themes/default/symbols/delete.svg
|
406
409
|
- cockpit/themes/default/symbols/end.svg
|
407
410
|
- cockpit/themes/default/symbols/escape.svg
|
408
411
|
- cockpit/themes/default/symbols/event_end.svg
|
@@ -458,6 +461,7 @@ files:
|
|
458
461
|
- cockpit/themes/extended/symbols/closed_loop_measuring.svg
|
459
462
|
- cockpit/themes/extended/symbols/complex.svg
|
460
463
|
- cockpit/themes/extended/symbols/critical.svg
|
464
|
+
- cockpit/themes/extended/symbols/delete.svg
|
461
465
|
- cockpit/themes/extended/symbols/end.svg
|
462
466
|
- cockpit/themes/extended/symbols/escape.svg
|
463
467
|
- cockpit/themes/extended/symbols/event_end.svg
|
@@ -508,6 +512,7 @@ files:
|
|
508
512
|
- cockpit/themes/model/symbols/closed_loop_measuring.svg
|
509
513
|
- cockpit/themes/model/symbols/complex.svg
|
510
514
|
- cockpit/themes/model/symbols/critical.svg
|
515
|
+
- cockpit/themes/model/symbols/delete.svg
|
511
516
|
- cockpit/themes/model/symbols/end.svg
|
512
517
|
- cockpit/themes/model/symbols/escape.svg
|
513
518
|
- cockpit/themes/model/symbols/event_end.svg
|
@@ -563,6 +568,7 @@ files:
|
|
563
568
|
- cockpit/themes/packed/symbols/closed_loop_measuring.svg
|
564
569
|
- cockpit/themes/packed/symbols/complex.svg
|
565
570
|
- cockpit/themes/packed/symbols/critical.svg
|
571
|
+
- cockpit/themes/packed/symbols/delete.svg
|
566
572
|
- cockpit/themes/packed/symbols/end.svg
|
567
573
|
- cockpit/themes/packed/symbols/escape.svg
|
568
574
|
- cockpit/themes/packed/symbols/event_end.svg
|
@@ -618,6 +624,7 @@ files:
|
|
618
624
|
- cockpit/themes/preset/symbols/closed_loop_measuring.svg
|
619
625
|
- cockpit/themes/preset/symbols/complex.svg
|
620
626
|
- cockpit/themes/preset/symbols/critical.svg
|
627
|
+
- cockpit/themes/preset/symbols/delete.svg
|
621
628
|
- cockpit/themes/preset/symbols/end.svg
|
622
629
|
- cockpit/themes/preset/symbols/escape.svg
|
623
630
|
- cockpit/themes/preset/symbols/event_end.svg
|
@@ -708,6 +715,7 @@ files:
|
|
708
715
|
- server/resources/topics.xml
|
709
716
|
- server/resources/transformation.xml
|
710
717
|
- server/routing/end.rb
|
718
|
+
- server/routing/forward-events.lock
|
711
719
|
- server/routing/forward-events.rb
|
712
720
|
- server/routing/forward-votes.rb
|
713
721
|
- server/routing/persist.rb
|