cpee-model-management 1.0.15 → 1.0.16

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ce614812f4658c4e62170443af46efcd32843661fefc6f65d22be139e16cb5e4
4
- data.tar.gz: 2e15d839338f8be623e9b536b067778d452e68a7b3e50359672099d7db382ef7
3
+ metadata.gz: eb4c3a55fe08f20e52d1908aa0285f9783d8413a470bd0b034829569d7d39620
4
+ data.tar.gz: f0eeae82d2bc796f2976375113f0bd8616cb59e9b4e95541f3175f9cbd6565d1
5
5
  SHA512:
6
- metadata.gz: 45fae847a02d31b3332ddb8394192eae4e107ec6cdbd4287f3b2408bdb46ab38e55ee27c558f7bbd04ada97db1cc74b82d3294343bb40f0b2a166a43aba47774
7
- data.tar.gz: 67b92d5bfe550a32aab89999ef5709b4928d277d7b4ef6ca75d6cf3f032a19b266aae72004580897c85088d2e4ad4017cf2bb931b8450424b797a20d115ee4af
6
+ metadata.gz: dce3271b164de9f31aa0aef4dde102501c448a93067f0259d787446facbc72a119e617f35c09a02778e20114a07acdb08a9b76493a297ac05130c7ad0b542786
7
+ data.tar.gz: 1eac23abe60a8d110ff7e2b154502b4756629576b7d6c2a225360160ab31288fcb4d9e4ba58eed489261fcd21334fac96d9b18aab355e8b60d5b2374cfea5d60
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "cpee-model-management"
3
- s.version = "1.0.15"
3
+ s.version = "1.0.16"
4
4
  s.platform = Gem::Platform::RUBY
5
5
  s.license = "LGPL-3.0"
6
6
  s.summary = "(Lifecycle) manage your process models in a directory or git repo."
@@ -191,7 +191,7 @@ module CPEE
191
191
  end.compact.uniq.sort_by{ |e| e[:name] } + Dir.glob(File.join(models,where,'*.xml')).map do |f|
192
192
  attrs = JSON::load File.open(f + '.attrs')
193
193
  fstage = attrs['design_stage'] rescue 'draft'
194
- { :type => :file, :name => File.basename(f), :creator => attrs['creator'], :author => attrs['author'], :guarded => attrs['resource_restriction'], :guarded_what => attrs['resource_id'], :stage => fstage, :date => File.mtime(f).xmlschema } if stage.include?(fstage)
194
+ { :type => :file, :name => File.basename(f), :creator => attrs['creator'], :author => attrs['author'], :guarded => attrs['guarded'], :guarded_id => attrs['guarded_id'], :stage => fstage, :date => File.mtime(f).xmlschema } if stage.include?(fstage)
195
195
  end.compact.uniq.sort_by{ |e| e[:name] }
196
196
 
197
197
  Riddl::Parameter::Complex.new('list','application/json',JSON::pretty_generate(names))
@@ -210,7 +210,7 @@ module CPEE
210
210
  end.compact.uniq.sort_by{ |e| e[:name] } + Dir.glob(File.join(models,'*.xml')).map do |f|
211
211
  attrs = JSON::load File.open(f + '.attrs')
212
212
  fstage = attrs['design_stage'] rescue 'draft'
213
- { :type => :file, :name => File.basename(f), :creator => attrs['creator'], :author => attrs['author'], :guarded => attrs['resource_restriction'], :guarded_what => attrs['resource_id'], :stage => fstage, :date => File.mtime(f).xmlschema } if stage.include?(fstage)
213
+ { :type => :file, :name => File.basename(f), :creator => attrs['creator'], :author => attrs['author'], :guarded => attrs['guarded'], :guarded_id => attrs['guarded_id'], :stage => fstage, :date => File.mtime(f).xmlschema } if stage.include?(fstage)
214
214
  end.compact.uniq.sort_by{ |e| e[:name] }
215
215
 
216
216
  Riddl::Parameter::Complex.new('list','application/json',JSON::pretty_generate(names))
@@ -372,7 +372,7 @@ module CPEE
372
372
  source = @p[1] ? File.join(models,where,@p[1].value) : (templates[stage] ? templates[stage] : 'testset.xml')
373
373
  fname = File.join(models,where,name + '.xml')
374
374
 
375
- attrs = JSON::load File.open(fname + '.attrs')
375
+ attrs = JSON::load File.open(fname + '.attrs') rescue {}
376
376
  stage = attrs['design_stage'] if stage.nil? && attrs['design_stage']
377
377
  stage = views[stage] if views && views[stage]
378
378
 
data/server/model.xml CHANGED
@@ -25,8 +25,8 @@
25
25
  <info>none</info>
26
26
  <creator>Juergen Mangler</creator>
27
27
  <author>Juergen Mangler</author>
28
- <resource_restriction>none</resource_restriction>
29
- <resource_id></resource_id>
28
+ <guarded>none</guarded>
29
+ <guarded_id></guarded_id>
30
30
  <model_uuid></model_uuid>
31
31
  <model_version></model_version>
32
32
  <modeltype>CPEE</modeltype>
data/server/testset.xml CHANGED
@@ -18,8 +18,8 @@
18
18
  <creator>Juergen Mangler</creator>
19
19
  <author>Juergen Mangler</author>
20
20
  <modeltype>CPEE</modeltype>
21
- <resource_restriction>none</resource_restriction>
22
- <resource_id></resource_id>
21
+ <guarded>none</guarded>
22
+ <guarded_id></guarded_id>
23
23
  <model_uuid></model_uuid>
24
24
  <model_version></model_version>
25
25
  <theme>extended</theme>
data/ui/design.js ADDED
@@ -0,0 +1,239 @@
1
+ var gstage;
2
+ var gdir;
3
+
4
+ function move_it(name,todir) {
5
+ $.ajax({
6
+ type: "PUT",
7
+ url: "server/" + gdir + name,
8
+ data: { dir: todir }
9
+ });
10
+ }
11
+ function shift_it(name,to) {
12
+ $.ajax({
13
+ type: "PUT",
14
+ url: "server/" + gdir + name,
15
+ data: { stage: to }
16
+ });
17
+ }
18
+ function rename_it(name) {
19
+ var newname;
20
+ if (newname = prompt('New name please!',name.replace(/\.xml$/,'').replace(/\.dir$/,''))) {
21
+ $.ajax({
22
+ type: "PUT",
23
+ url: "server/" + gdir + name,
24
+ data: { new: newname }
25
+ });
26
+ }
27
+ }
28
+ function duplicate_it(name) {
29
+ var newname;
30
+ if (newname = prompt('New name please!',name.replace(/\.xml$/,'').replace(/\.dir$/,''))) {
31
+ $.ajax({
32
+ type: "POST",
33
+ url: "server/" + gdir,
34
+ data: { new: newname, old: name }
35
+ });
36
+ }
37
+ }
38
+ function delete_it(name) {
39
+ if (confirm('Are you really, really, REALLY sure!')) {
40
+ $.ajax({
41
+ type: "DELETE",
42
+ url: "server/" + gdir + name
43
+ });
44
+ }
45
+ }
46
+
47
+ function es_init(gdir,gstage) {
48
+ var es = new EventSource('server/');
49
+ es.onopen = function() {
50
+ console.log('es open');
51
+ };
52
+ es.onmessage = function(e) {
53
+ paint(gdir,gstage);
54
+ };
55
+ es.onerror = function() {
56
+ console.log('es error');
57
+ // es_init();
58
+ };
59
+ }
60
+
61
+ function paint(gdir,gstage) {
62
+ $('#models tbody').empty();
63
+ if (gdir && gdir != '') {
64
+ var clone = document.importNode(document.querySelector('#up').content,true);
65
+ $('[data-class=name] a',clone).text('..');
66
+ $('[data-class=name] a',clone).attr('href',window.location.pathname + '?stage=' + gstage + '&dir=');
67
+ $('#models tbody').append(clone);
68
+ }
69
+ $.ajax({
70
+ type: "GET",
71
+ url: "server/" + gdir,
72
+ data: { stage: gstage },
73
+ success: function(res) {
74
+ $(res).each(function(k,data) {
75
+ if (data.type == 'dir') {
76
+ var clone = document.importNode(document.querySelector('#folder').content,true);
77
+ $('[data-class=name] a',clone).text(data['name'].replace(/\.dir$/,''));
78
+ $('[data-class=name]',clone).attr('data-full-name',data['name']);
79
+ $('[data-class=name] a',clone).attr('href',window.location.pathname + '?stage=' + gstage + '&dir=' + data['name']);
80
+ } else {
81
+ var clone = document.importNode(document.querySelector('#model').content,true);
82
+ $('[data-class=name] a',clone).text(data['name']);
83
+ $('[data-class=name]',clone).attr('data-full-name',data['name']);
84
+ $('[data-class=name] a',clone).attr('href','server/' + gdir + data['name'] + '/open?stage=' + gstage);
85
+ $('[data-class=force] a',clone).attr('href','server/' + gdir + data['name'] + '/open-new?stage=' + gstage);
86
+ $('[data-class=raw] a',clone).attr('href','server/' + gdir + data['name']);
87
+
88
+ $('[data-class=guarded] abbr',clone).attr('title',data['guarded'] || '');
89
+ $('[data-class=guarded] abbr',clone).text((data['guarded'] || '').match(/none/i) ? '' : (data['guarded'] || '').charAt(0).toUpperCase());
90
+ $('[data-class=resource]',clone).text(data['guarded_id'] || '');
91
+ }
92
+ $('[data-class=author]',clone).text(data['author']);
93
+ $('[data-class=date]',clone).text(new Date(data['date']).strftime('%Y-%m-%d, %H:%M:%S'));
94
+ $('#models tbody').append(clone);
95
+ });
96
+ }
97
+ });
98
+ }
99
+
100
+ function change_it(gdir,gstage) {
101
+ window.location.href = window.location.pathname + '?stage=' + gstage + '&dir=' + gdir;
102
+ }
103
+
104
+ $(document).ready(function() {
105
+ const queryString = window.location.search;
106
+ const urlParams = new URLSearchParams(queryString);
107
+
108
+ gstage = urlParams.get('stage') || 'draft';
109
+ gdir = urlParams.get('dir') ? (urlParams.get('dir') + '/').replace(/\/+/,'/') : '';
110
+
111
+ es_init(gdir,gstage);
112
+
113
+ var shifts = []
114
+ $.ajax({
115
+ type: "GET",
116
+ url: "server/",
117
+ data: { stages: 'stages' },
118
+ success: (r) => {
119
+ shifts = shifts.concat(r);
120
+ shifts = shifts.filter(item => item !== gstage);
121
+ }
122
+ });
123
+
124
+ $('input[name=stage]').val(gstage);
125
+ $('input[name=dir]').val(gdir);
126
+ $('ui-behind span').text(gstage);
127
+ $('ui-behind span').click((e) => {
128
+ if (shifts.length > 0) {
129
+ var menu = {};
130
+ menu['Change to'] = [];
131
+ shifts.forEach(ele => {
132
+ menu['Change to'].push(
133
+ {
134
+ 'label': ele,
135
+ 'function_call': change_it,
136
+ 'text_icon': '➔',
137
+ 'type': undefined,
138
+ 'class': 'capitalized',
139
+ 'params': [gdir,ele]
140
+ }
141
+ );
142
+ });
143
+ new CustomMenu(e).contextmenu(menu);
144
+ }
145
+ });
146
+
147
+ var dragged;
148
+ $('#models').on('drag','td[data-class=model]',false);
149
+ $('#models').on('dragstart','td[data-class=model]',(e) => {
150
+ dragged = $(e.currentTarget).parents('tr').find('td[data-class=name]').text();
151
+ });
152
+ $('#models').on('dragover','td[data-class=folder]',false);
153
+ $('#models').on('drop','td[data-class=folder]',(e) => {
154
+ e.preventDefault();
155
+ e.stopPropagation();
156
+ if (dragged) {
157
+ var todir = $(e.currentTarget).parents('tr').find('td[data-class=name]').text();
158
+ todir = todir.replace(/\./g,'');
159
+ if (todir != '') {
160
+ todir += '.dir';
161
+ }
162
+ move_it(dragged,todir);
163
+ dragged = undefined;
164
+ }
165
+ });
166
+ $('#models').on('click','td[data-class=ops]',(e) => {
167
+ var menu = {};
168
+ var name = $(e.currentTarget).parents('tr').find('td[data-class=name]').attr('data-full-name');
169
+ menu['Operations'] = [
170
+ {
171
+ 'label': 'Delete',
172
+ 'function_call': delete_it,
173
+ 'text_icon': '❌',
174
+ 'type': undefined,
175
+ 'params': [name]
176
+ },
177
+ {
178
+ 'label': 'Rename',
179
+ 'function_call': rename_it,
180
+ 'type': undefined,
181
+ 'text_icon': '📛',
182
+ 'params': [name]
183
+ }
184
+ ];
185
+ if (name.match(/\.xml$/)) {
186
+ menu['Operations'].unshift(
187
+ {
188
+ 'label': 'Duplicate',
189
+ 'function_call': duplicate_it,
190
+ 'text_icon': '➕',
191
+ 'type': undefined,
192
+ 'params': [name]
193
+ }
194
+ );
195
+ }
196
+ if (shifts.length > 0) {
197
+ menu['Shifting'] = [];
198
+ shifts.forEach(ele => {
199
+ menu['Shifting'].push(
200
+ {
201
+ 'label': 'Shift to ' + ele,
202
+ 'function_call': shift_it,
203
+ 'text_icon': '➔',
204
+ 'type': undefined,
205
+ 'params': [name,ele]
206
+ }
207
+ );
208
+ });
209
+ }
210
+ new CustomMenu(e).contextmenu(menu);
211
+ });
212
+
213
+ history.pushState({}, document.title, window.location.pathname + '?stage=' + gstage + '&dir=' + gdir);
214
+ paint(gdir,gstage);
215
+
216
+ $('#newmod').on('submit',(e) => {
217
+ $.ajax({
218
+ type: "POST",
219
+ url: "server/" + gdir,
220
+ data: { stage: gstage, new: $("#newmod input[name=new]").val() },
221
+ success: (r) => {
222
+ uidash_activate_tab($('ui-tab').first());
223
+ }
224
+ });
225
+ return false;
226
+ });
227
+
228
+ $('#newdir').on('submit',(e) => {
229
+ $.ajax({
230
+ type: "POST",
231
+ url: "server/",
232
+ data: { dir: $("#newdir input[name=newdir]").val() },
233
+ success: (r) => {
234
+ uidash_activate_tab($('ui-tab').first());
235
+ }
236
+ });
237
+ return false;
238
+ });
239
+ });
data/ui/js/design.js CHANGED
@@ -85,10 +85,9 @@ function paint(gdir,gstage) {
85
85
  $('[data-class=force] a',clone).attr('href','server/' + gdir + data['name'] + '/open-new?stage=' + gstage);
86
86
  $('[data-class=raw] a',clone).attr('href','server/' + gdir + data['name']);
87
87
 
88
- console.log(data);
89
- $('[data-class=guarded] abbr',clone).attr('title',data['guarded']);
90
- $('[data-class=guarded] abbr',clone).text(data['guarded'].match(/none/i) ? '' : data['guarded'].charAt(0).toUpperCase());
91
- $('[data-class=resource]',clone).text(data['guarded_what']);
88
+ $('[data-class=guarded] abbr',clone).attr('title',data['guarded'] || '');
89
+ $('[data-class=guarded] abbr',clone).text((data['guarded'] || '').match(/none/i) ? '' : (data['guarded'] || '').charAt(0).toUpperCase());
90
+ $('[data-class=resource]',clone).text(data['guarded_id'] || '');
92
91
  }
93
92
  $('[data-class=author]',clone).text(data['author']);
94
93
  $('[data-class=date]',clone).text(new Date(data['date']).strftime('%Y-%m-%d, %H:%M:%S'));
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cpee-model-management
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.15
4
+ version: 1.0.16
5
5
  platform: ruby
6
6
  authors:
7
7
  - Juergen eTM Mangler
8
8
  autorequire:
9
9
  bindir: tools
10
10
  cert_chain: []
11
- date: 2021-06-22 00:00:00.000000000 Z
11
+ date: 2021-07-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: riddl
@@ -81,6 +81,7 @@ files:
81
81
  - server/testset.xml
82
82
  - tools/cpee-moma
83
83
  - ui/css/design.css
84
+ - ui/design.js
84
85
  - ui/index.html
85
86
  - ui/js/design.js
86
87
  homepage: http://cpee.org/