cpee-model-management 1.0.14 → 1.0.15

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: 9db0f107cad7e45a47d7d197523ebfcc9f493512f614777573c3d567c3270b6c
4
- data.tar.gz: fed6d38fc3a757e2dd074bad56f579a5a0b7d3863bb14a2ef325a5df28ca2526
3
+ metadata.gz: ce614812f4658c4e62170443af46efcd32843661fefc6f65d22be139e16cb5e4
4
+ data.tar.gz: 2e15d839338f8be623e9b536b067778d452e68a7b3e50359672099d7db382ef7
5
5
  SHA512:
6
- metadata.gz: 30d3c26a3b7a13afacf601ae8fa99178610ec37296be9ae4de888770a07245df77f031b5368f95dbd338cef03752d0c34c3e2ee7c62e79b05775dfc89bd53123
7
- data.tar.gz: e958d85ebbdf708c35accd0fcaed6fdd79f34702042c00f67aee5d3d39f6dcbfdd0fd81b8a64c0bce9728bbd1b55161a8fe85d8832bb98de55b4015153867f3e
6
+ metadata.gz: 45fae847a02d31b3332ddb8394192eae4e107ec6cdbd4287f3b2408bdb46ab38e55ee27c558f7bbd04ada97db1cc74b82d3294343bb40f0b2a166a43aba47774
7
+ data.tar.gz: 67b92d5bfe550a32aab89999ef5709b4928d277d7b4ef6ca75d6cf3f032a19b266aae72004580897c85088d2e4ad4017cf2bb931b8450424b797a20d115ee4af
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "cpee-model-management"
3
- s.version = "1.0.14"
3
+ s.version = "1.0.15"
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."
@@ -22,4 +22,5 @@ Gem::Specification.new do |s|
22
22
 
23
23
  s.add_runtime_dependency 'riddl', '~> 0.99'
24
24
  s.add_runtime_dependency 'json', '~> 2.1'
25
+ s.add_runtime_dependency 'cpee', '~> 2.1', '>= 2.1.7'
25
26
  end
@@ -41,9 +41,7 @@ module CPEE
41
41
  `git -c user.name='Christine Ashcreek' -c user.email=dev@null.com -c push.default=simple mv "#{told}" "#{tnew}" 2>/dev/null`
42
42
  `git -c user.name='Christine Ashcreek' -c user.email=dev@null.com -c push.default=simple rm -rf "#{told + '.active'}" 2>/dev/null`
43
43
  `git -c user.name='Christine Ashcreek' -c user.email=dev@null.com -c push.default=simple rm -rf "#{told + '.active-uuid'}" 2>/dev/null`
44
- `git -c user.name='Christine Ashcreek' -c user.email=dev@null.com -c push.default=simple mv "#{told + '.author'}" "#{tnew + '.author'}" 2>/dev/null`
45
- `git -c user.name='Christine Ashcreek' -c user.email=dev@null.com -c push.default=simple mv "#{told + '.creator'}" "#{tnew + '.creator'}" 2>/dev/null`
46
- `git -c user.name='Christine Ashcreek' -c user.email=dev@null.com -c push.default=simple mv "#{told + '.stage'}" "#{tnew + '.stage'}" 2>/dev/null`
44
+ `git -c user.name='Christine Ashcreek' -c user.email=dev@null.com -c push.default=simple mv "#{told + '.attrs'}" "#{tnew + '.author'}" 2>/dev/null`
47
45
  Dir.chdir(cdir)
48
46
  CPEE::ModelManagement::fs_mv(models,old,new) # fallback
49
47
  end
@@ -55,9 +53,7 @@ module CPEE
55
53
  FileUtils.rm_rf(tnew)
56
54
  `git -c user.name='Christine Ashcreek' -c user.email=dev@null.com -c push.default=simple rm -rf "#{tnew}.active" 2>/dev/null`
57
55
  `git -c user.name='Christine Ashcreek' -c user.email=dev@null.com -c push.default=simple rm -rf "#{tnew}.active-uuid" 2>/dev/null`
58
- `git -c user.name='Christine Ashcreek' -c user.email=dev@null.com -c push.default=simple rm -rf "#{tnew}.author" 2>/dev/null`
59
- `git -c user.name='Christine Ashcreek' -c user.email=dev@null.com -c push.default=simple rm -rf "#{tnew}.creator" 2>/dev/null`
60
- `git -c user.name='Christine Ashcreek' -c user.email=dev@null.com -c push.default=simple rm -rf "#{tnew}.stage" 2>/dev/null`
56
+ `git -c user.name='Christine Ashcreek' -c user.email=dev@null.com -c push.default=simple rm -rf "#{tnew}.attrs" 2>/dev/null`
61
57
  Dir.chdir(cdir)
62
58
  CPEE::ModelManagement::fs_rm(models,new) # fallback
63
59
  end
@@ -81,9 +77,7 @@ module CPEE
81
77
  FileUtils.mv(fname,fnname) rescue nil
82
78
  File.delete(fname + '.active',fnname + '.active') rescue nil
83
79
  File.delete(fname + '.active-uuid',fnname + '.active-uuid') rescue nil
84
- FileUtils.mv(fname + '.author',fnname + '.author') rescue nil
85
- FileUtils.mv(fname + '.creator',fnname + '.creator') rescue nil
86
- FileUtils.mv(fname + '.stage',fnname + '.stage') rescue nil
80
+ FileUtils.mv(fname + '.attrs',fnname + '.attrs') rescue nil
87
81
  end
88
82
  def self::fs_cp(models,old,new)
89
83
  fname = File.join(models,old)
@@ -91,18 +85,14 @@ module CPEE
91
85
  FileUtils.cp(fname,fnname)
92
86
  File.delete(fname + '.active',fnname + '.active') rescue nil
93
87
  File.delete(fname + '.active-uuid',fnname + '.active-uuid') rescue nil
94
- FileUtils.cp(fname + '.author',fnname + '.author') rescue nil
95
- FileUtils.cp(fname + '.creator',fnname + '.creator') rescue nil
96
- FileUtils.cp(fname + '.stage',fnname + '.stage') rescue nil
88
+ FileUtils.cp(fname + '.attrs',fnname + '.attrs') rescue nil
97
89
  end
98
90
  def self::fs_rm(models,new)
99
91
  fname = File.join(models,new)
100
92
  FileUtils.rm_rf(fname)
101
93
  File.delete(fname + '.active') rescue nil
102
94
  File.delete(fname + '.active-uuid') rescue nil
103
- File.delete(fname + '.author') rescue nil
104
- File.delete(fname + '.creator') rescue nil
105
- File.delete(fname + '.stage') rescue nil
95
+ File.delete(fname + '.attrs') rescue nil
106
96
  end
107
97
  def self::fs_shift(models,new)
108
98
  fname = File.join(models,new)
@@ -169,14 +159,16 @@ module CPEE
169
159
  if op == 'delete'
170
160
  { :op => op, :type => :dir, :name => File.basename(f) }
171
161
  else
172
- { :op => op, :type => :dir, :name => File.basename(f), :creator => File.read(f + '.creator'), :date => File.mtime(f).xmlschema }
162
+ attrs = JSON::load File.open(f + '.attrs')
163
+ { :op => op, :type => :dir, :name => File.basename(f), :creator => attrs['creator'], :date => File.mtime(f).xmlschema }
173
164
  end
174
165
  else
175
166
  if op == 'delete'
176
167
  { :op => op, :type => :file, :name => f.sub(Regexp.compile(File.join(models,'/')),'') }
177
168
  else
178
- fstage = File.read(f + '.stage').strip rescue 'draft'
179
- { :op => op, :type => :file, :name => f.sub(Regexp.compile(File.join(models,'/')),''), :creator => File.read(f + '.creator'), :author => File.read(f + '.author'), :stage => fstage, :date => File.mtime(f).xmlschema }
169
+ attrs = JSON::load File.open(f + '.attrs')
170
+ fstage = attrs['design_stage'] rescue 'draft'
171
+ { :op => op, :type => :file, :name => f.sub(Regexp.compile(File.join(models,'/')),''), :creator => attrs['creator'], :author => attrs['author'], :stage => fstage, :date => File.mtime(f).xmlschema }
180
172
  end
181
173
  end
182
174
  what[:source] = s.sub(/models\//,'') unless s.nil?
@@ -193,12 +185,13 @@ module CPEE
193
185
  stage = [@p[0]&.value] || ['draft']
194
186
  stage << views[stage[0]] if views && views[stage[0]]
195
187
 
196
-
197
188
  names = Dir.glob(File.join(models,where,'*.dir')).map do |f|
198
- { :type => :dir, :name => File.basename(f), :creator => File.read(f + '.creator'), :date => File.mtime(f).xmlschema }
189
+ attrs = JSON::load File.open(f + '.attrs')
190
+ { :type => :dir, :name => File.basename(f), :creator => attrs['creator'], :date => File.mtime(f).xmlschema }
199
191
  end.compact.uniq.sort_by{ |e| e[:name] } + Dir.glob(File.join(models,where,'*.xml')).map do |f|
200
- fstage = File.read(f + '.stage').strip rescue 'draft'
201
- { :type => :file, :name => File.basename(f), :creator => File.read(f + '.creator'), :author => File.read(f + '.author'), :stage => fstage, :date => File.mtime(f).xmlschema } if stage.include?(fstage)
192
+ attrs = JSON::load File.open(f + '.attrs')
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)
202
195
  end.compact.uniq.sort_by{ |e| e[:name] }
203
196
 
204
197
  Riddl::Parameter::Complex.new('list','application/json',JSON::pretty_generate(names))
@@ -212,10 +205,12 @@ module CPEE
212
205
  stage << views[stage[0]] if views && views[stage[0]]
213
206
 
214
207
  names = Dir.glob(File.join(models,'*.dir/*.xml')).map do |f|
215
- { :type => :file, :name => File.join(File.basename(File.dirname(f)),File.basename(f)), :creator => File.read(f + '.creator'), :date => File.mtime(f).xmlschema }
208
+ attrs = JSON::load File.open(f + '.attrs')
209
+ { :type => :file, :name => File.join(File.basename(File.dirname(f)),File.basename(f)), :creator => attrs['creator'], :date => File.mtime(f).xmlschema }
216
210
  end.compact.uniq.sort_by{ |e| e[:name] } + Dir.glob(File.join(models,'*.xml')).map do |f|
217
- fstage = File.read(f + '.stage').strip rescue 'draft'
218
- { :type => :file, :name => File.basename(f), :creator => File.read(f + '.creator'), :author => File.read(f + '.author'), :stage => fstage, :date => File.mtime(f).xmlschema } if stage.include?(fstage)
211
+ attrs = JSON::load File.open(f + '.attrs')
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)
219
214
  end.compact.uniq.sort_by{ |e| e[:name] }
220
215
 
221
216
  Riddl::Parameter::Complex.new('list','application/json',JSON::pretty_generate(names))
@@ -241,6 +236,7 @@ module CPEE
241
236
  dn = CPEE::ModelManagement::get_dn @h['DN']
242
237
  author = dn['GN'] + ' ' + dn['SN']
243
238
 
239
+ attrs = {}
244
240
  XML::Smart::modify(fname) do |doc|
245
241
  doc.register_namespace 'p', 'http://cpee.org/ns/properties/2.0'
246
242
  doc.find('/p:testset/p:attributes/p:author').each do |ele|
@@ -252,9 +248,11 @@ module CPEE
252
248
  doc.find('/p:testset/p:attributes/p:theme').each do |ele|
253
249
  ele.text = themes[nstage] || 'model'
254
250
  end
251
+ attrs = doc.find('/p:testset/p:attributes/*').map do |e|
252
+ [e.qname.name,e.text]
253
+ end.to_h
255
254
  end
256
- File.write(fname + '.author',author)
257
- File.write(fname + '.stage',nstage)
255
+ File.write(fname + '.attrs',JSON::pretty_generate(attrs))
258
256
 
259
257
  CPEE::ModelManagement::op author, 'shift', models, File.join('.', where, name + '.xml'), File.join('.', where, name + '.xml')
260
258
  CPEE::ModelManagement::notify conns, 'shift', models, fname, fname
@@ -281,6 +279,7 @@ module CPEE
281
279
  dn = CPEE::ModelManagement::get_dn @h['DN']
282
280
  author = dn['GN'] + ' ' + dn['SN']
283
281
 
282
+ attrs = {}
284
283
  XML::Smart::modify(fname) do |doc|
285
284
  doc.register_namespace 'p', 'http://cpee.org/ns/properties/2.0'
286
285
  doc.find('/p:testset/p:attributes/p:info').each do |ele|
@@ -289,8 +288,11 @@ module CPEE
289
288
  doc.find('/p:testset/p:attributes/p:author').each do |ele|
290
289
  ele.text = author
291
290
  end
291
+ attrs = doc.find('/p:testset/p:attributes/*').map do |e|
292
+ [e.qname.name,e.text]
293
+ end.to_h
292
294
  end
293
- File.write(fname + '.author',author)
295
+ File.write(fname + '.attrs',JSON::pretty_generate(attrs))
294
296
 
295
297
  CPEE::ModelManagement::op author, 'mv', models, File.join('.', where, nname + '.xml'), File.join('.', where, name + '.xml')
296
298
  CPEE::ModelManagement::notify conns, 'rename', models, fnname, fname
@@ -313,7 +315,10 @@ module CPEE
313
315
 
314
316
  dn = CPEE::ModelManagement::get_dn @h['DN']
315
317
  author = dn['GN'] + ' ' + dn['SN']
316
- File.write(fname + '.author',author)
318
+
319
+ attrs = JSON::load File.open(fname + '.attrs')
320
+ attrs['author'] = author
321
+ File.write(fname + '.attrs',JSON::pretty_generate(attrs))
317
322
 
318
323
  CPEE::ModelManagement::op author, 'mv', models, File.join(nname + '.dir'), File.join(name + '.dir')
319
324
  CPEE::ModelManagement::notify conns, 'rename', models, fnname, fname
@@ -339,8 +344,11 @@ module CPEE
339
344
 
340
345
  Dir.mkdir(fname)
341
346
  FileUtils.touch(File.join(fname,'.gitignore'))
342
- File.write(fname + '.creator',creator)
343
- File.write(fname + '.author',creator)
347
+
348
+ attrs = JSON::load File.open(fname + '.attrs')
349
+ attrs['creator'] = creator
350
+ attrs['author'] = creator
351
+ File.write(fname + '.attrs',JSON::pretty_generate(attrs))
344
352
 
345
353
  CPEE::ModelManagement::op creator, 'add', models, name + '.dir'
346
354
  CPEE::ModelManagement::notify conns, 'create', models, fname
@@ -364,7 +372,8 @@ module CPEE
364
372
  source = @p[1] ? File.join(models,where,@p[1].value) : (templates[stage] ? templates[stage] : 'testset.xml')
365
373
  fname = File.join(models,where,name + '.xml')
366
374
 
367
- stage = File.read(source + '.stage') if stage.nil? && File.exists?(source + '.stage')
375
+ attrs = JSON::load File.open(fname + '.attrs')
376
+ stage = attrs['design_stage'] if stage.nil? && attrs['design_stage']
368
377
  stage = views[stage] if views && views[stage]
369
378
 
370
379
  counter = 0
@@ -376,6 +385,7 @@ module CPEE
376
385
  dn = CPEE::ModelManagement::get_dn @h['DN']
377
386
  creator = dn['GN'] + ' ' + dn['SN']
378
387
  FileUtils.cp(source,fname)
388
+ attrs = {}
379
389
  XML::Smart::modify(fname) do |doc|
380
390
  doc.register_namespace 'p', 'http://cpee.org/ns/properties/2.0'
381
391
  doc.find('/p:testset/p:attributes/p:info').each do |ele|
@@ -398,10 +408,11 @@ module CPEE
398
408
  ele.text = stage
399
409
  end
400
410
  end
411
+ attrs = doc.find('/p:testset/p:attributes/*').map do |e|
412
+ [e.qname.name,e.text]
413
+ end.to_h
401
414
  end
402
- File.write(fname + '.creator',creator)
403
- File.write(fname + '.author',creator)
404
- File.write(fname + '.stage',stage)
415
+ File.write(fname + '.attrs',JSON::pretty_generate(attrs))
405
416
 
406
417
  CPEE::ModelManagement::op creator, 'add', models, File.join('.', where, name + '.xml')
407
418
  CPEE::ModelManagement::notify conns, 'create', models, fname
@@ -496,13 +507,17 @@ module CPEE
496
507
  dn = CPEE::ModelManagement::get_dn @h['DN']
497
508
  author = dn['GN'] + ' ' + dn['SN']
498
509
  if !File.exist?(File.join(models,to,name + '.xml'))
510
+ attrs = {}
499
511
  XML::Smart::modify(fname) do |doc|
500
512
  doc.register_namespace 'p', 'http://cpee.org/ns/properties/2.0'
501
513
  doc.find('/p:testset/p:attributes/p:design_dir').each do |ele|
502
514
  ele.text = to
503
515
  end
516
+ attrs = doc.find('/p:testset/p:attributes/*').map do |e|
517
+ [e.qname.name,e.text]
518
+ end.to_h
504
519
  end
505
- File.write(fname + '.author',author)
520
+ File.write(fname + '.attrs',JSON::pretty_generate(attrs))
506
521
 
507
522
  CPEE::ModelManagement::op author, 'mv', models, File.join('.', to, name + '.xml'), File.join('.', where, name + '.xml')
508
523
  CPEE::ModelManagement::notify conns, 'move', models, File.join(models,to,name + '.xml'), fname
@@ -522,20 +537,25 @@ module CPEE
522
537
 
523
538
  if File.exists?(fname)
524
539
  author = dn['GN'] + ' ' + dn['SN']
540
+ attrs = {}
525
541
  XML::Smart.string(cont) do |doc|
526
542
  doc.register_namespace 'p', 'http://cpee.org/ns/properties/2.0'
527
- unless File.exists?(File.join(models,where,name + '.xml.creator'))
528
- doc.find('/p:testset/p:attributes/p:author').each do |ele|
529
- File.write(File.join(models,where,name + '.xml.creator'),ele.text)
530
- end
531
- end
532
543
  doc.find('/p:testset/p:attributes/p:author').each do |ele|
533
544
  ele.text = dn['GN'] + ' ' + dn['SN']
534
545
  end
546
+ if doc.find('/p:testset/p:attributes/p:design_stage').empty?
547
+ doc.find('/p:testset/p:attributes').first.add('p:design_stage','draft')
548
+ else
549
+ doc.find('/p:testset/p:attributes/p:design_stage').each do |ele|
550
+ ele.text = 'draft' if ele.text.strip == ''
551
+ end
552
+ end
553
+ attrs = doc.find('/p:testset/p:attributes/*').map do |e|
554
+ [e.qname.name,e.text]
555
+ end.to_h
535
556
  File.write(fname,doc.to_s)
536
- File.write(fname + '.author',author)
537
- File.write(fname + '.stage',doc.find('string(/p:testset/p:attributes/p:design_stage)').sub(/^$/,'draft'))
538
557
  end
558
+ File.write(fname + '.attrs',JSON::pretty_generate(attrs))
539
559
  CPEE::ModelManagement::op author, 'add', models, File.join('.', where, name + '.xml')
540
560
  CPEE::ModelManagement::notify conns, 'put', models, fname
541
561
  else
data/server/moma.conf CHANGED
@@ -1,5 +1,6 @@
1
1
  :port: 9316
2
2
  :models: models
3
+ :location: https://cpee.org/design/server/
3
4
  :instantiate: https://cpee.org/flow/start/
4
5
  :cockpit:
5
6
  draft: https://cpee.org/flow/model.html?monitor=
data/tools/cpee-moma CHANGED
@@ -6,6 +6,7 @@ require 'fileutils'
6
6
  require 'xml/smart'
7
7
  require 'zip'
8
8
  require 'typhoeus'
9
+ require 'json'
9
10
  require 'securerandom'
10
11
 
11
12
  def wrap(s, width=78, indent=18)
@@ -85,7 +86,7 @@ if command == 'cpui'
85
86
  js_libs(p1)
86
87
  elsif command == 'convert'
87
88
  Dir['*.xml'].each do |f|
88
- XML::Smart.modify(f) do |doc|
89
+ XML::Smart.open(f) do |doc|
89
90
  doc.register_namespace 'x', 'http://cpee.org/ns/properties/2.0'
90
91
  if doc.root.qname.name == 'testset'
91
92
  name = File.basename(f,'.xml')
@@ -118,7 +119,6 @@ elsif command == 'convert'
118
119
  e.add('x:creator',creator)
119
120
  end
120
121
  end
121
- File.write(f + '.creator',creator)
122
122
 
123
123
  if (dt = doc.find('/x:testset/x:attributes/x:author')).length > 0
124
124
  dt.each do |e|
@@ -130,7 +130,6 @@ elsif command == 'convert'
130
130
  e.add('x:author',author)
131
131
  end
132
132
  end
133
- File.write(f + '.author',author)
134
133
 
135
134
  if (dt = doc.find('/x:testset/x:attributes/x:design_stage')).length > 0
136
135
  dt.each do |e|
@@ -142,7 +141,6 @@ elsif command == 'convert'
142
141
  e.add('x:design_stage',design_stage)
143
142
  end
144
143
  end
145
- File.write(f + '.stage',design_stage)
146
144
 
147
145
  dd = ENV['PWD'] || Dir.pwd
148
146
  ma = dd.scan(/\/([^\/]+\.dir)/)
@@ -162,9 +160,28 @@ elsif command == 'convert'
162
160
  e.text = name
163
161
  end
164
162
  end
163
+
164
+
165
+ attrs = doc.find('/x:testset/x:attributes/*').map do |e|
166
+ [e.qname.name,e.text]
167
+ end.to_h
168
+ File.write(f + '.attrs',JSON::pretty_generate(attrs))
169
+
170
+ File.unlink(f + '.creator') rescue nil
171
+ File.unlink(f + '.author') rescue nil
172
+ File.unlink(f + '.stage') rescue nil
165
173
  end
166
174
  end
167
175
  end
176
+ Dir['*.dir'].each do |f|
177
+ attrs = JSON::load File.open(f + '.attrs') rescue {}
178
+ attrs['creator'] = File.read(f + '.creator') if File.exists?(f + '.creator')
179
+ attrs['author'] = File.read(f + '.author') if File.exists?(f + '.author')
180
+ File.write(f + '.attrs',JSON::pretty_generate(attrs))
181
+
182
+ File.unlink(f + '.creator') rescue nil
183
+ File.unlink(f + '.author') rescue nil
184
+ end
168
185
  elsif command == 'new'
169
186
  if !File.exists?(p1)
170
187
  FileUtils.mkdir(File.join(p1)) rescue nil
data/ui/css/design.css CHANGED
@@ -22,6 +22,12 @@ form input {
22
22
 
23
23
  ui-behind {
24
24
  text-transform: capitalize;
25
+ font-weight: bold;
26
+ color: #d0d0d0;
27
+ }
28
+
29
+ ui-behind span {
30
+ cursor: pointer;
25
31
  }
26
32
 
27
33
  [is="x-ui-"] table.ui-table {
@@ -50,3 +56,7 @@ ui-behind {
50
56
  }
51
57
 
52
58
  [is="x-ui-"] ui-rest > ui-content > ui-area { padding: 1em; }
59
+
60
+ tr.contextmenuitem .capitalized {
61
+ text-transform: capitalize;
62
+ }
data/ui/index.html CHANGED
@@ -61,20 +61,35 @@
61
61
  <ui-tab class="" data-tab="models" >Models</ui-tab>
62
62
  <ui-tab class="inactive" data-tab="newmodel">New Model</ui-tab>
63
63
  <ui-tab class="inactive" data-tab="newdir" >New Dir</ui-tab>
64
- <ui-behind ></ui-behind>
64
+ <ui-space ></ui-space>
65
+ <ui-tab class="inactive" data-tab="running" >Running</ui-tab>
66
+ <ui-tab class="inactive" data-tab="stopped" >Stopped</ui-tab>
67
+ <ui-behind ><span></span></ui-behind>
65
68
  <ui-last ><a class="logo" href=".."></a></ui-last>
66
69
  </ui-tabbar>
67
70
  <ui-content class="noselect">
68
71
  <ui-area data-belongs-to-tab="models">
69
72
  <p>Your Models are saved/versioned in <a target='_blank' href='https://git-scm.com/'>GIT</a>. So fret not. Just send an email to <a href="mail:helpdesk@acdp.at">helpdesk@acdp.at</a> if you are lost. And as always: <a target='_blank' href='https://www.youtube.com/watch?v=kkxj5xVLyj0&feature=youtu.be&t=56'>get dressed for success</a>.</p>
70
73
  <table id="models" class='ui-table'>
74
+ <thead>
75
+ <th></th>
76
+ <th>Name</th>
77
+ <th><abbr title='force new instance'>F</abbr></th>
78
+ <th><abbr title='link to model source'>M</abbr></th>
79
+ <th>Changed By</th>
80
+ <th><abbr title='Guarded'>G</abbr></th>
81
+ <th><abbr title='Resource'>R</abbr></th>
82
+ <th>Changed At</th>
83
+ <th><abbr title='Operations'>Op</abbr></th>
84
+ </thead>
71
85
  <template id="up">
72
86
  <tr>
73
87
  <td data-class='folder' class="noselect">📁</td>
74
88
  <td data-class='name' data-full-name=''><a href=''></a></td>
75
89
  <td></td>
76
90
  <td></td>
77
- <td data-class='creator'></td>
91
+ <td></td>
92
+ <td></td>
78
93
  <td></td>
79
94
  <td data-class='date'></td>
80
95
  <td data-class=''></td>
@@ -86,7 +101,8 @@
86
101
  <td data-class='name' data-full-name=''><a href=''></a></td>
87
102
  <td></td>
88
103
  <td></td>
89
- <td data-class='creator'></td>
104
+ <td></td>
105
+ <td></td>
90
106
  <td></td>
91
107
  <td data-class='date'></td>
92
108
  <td data-class='ops' class="noselect"><span>…</span></td>
@@ -98,8 +114,9 @@
98
114
  <td data-class='name' data-full-name=''><a target='_blank' href=''></a></td>
99
115
  <td data-class='force'>[<a target='_blank' href='' title='force new instance'>F</a>]</td>
100
116
  <td data-class='raw'>[<a target='_blank' href='' title='link to model source'>M</a>]</td>
101
- <td data-class='creator'></td>
102
117
  <td data-class='author'></td>
118
+ <td data-class='guarded'><abbr title=''></abbr></td>
119
+ <td data-class='resource'></td>
103
120
  <td data-class='date'></td>
104
121
  <td data-class='ops' class="noselect"><span>…</span></td>
105
122
  </tr>
data/ui/js/design.js CHANGED
@@ -84,8 +84,12 @@ function paint(gdir,gstage) {
84
84
  $('[data-class=name] a',clone).attr('href','server/' + gdir + data['name'] + '/open?stage=' + 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
+
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']);
87
92
  }
88
- $('[data-class=creator]',clone).text(data['creator']);
89
93
  $('[data-class=author]',clone).text(data['author']);
90
94
  $('[data-class=date]',clone).text(new Date(data['date']).strftime('%Y-%m-%d, %H:%M:%S'));
91
95
  $('#models tbody').append(clone);
@@ -94,6 +98,10 @@ function paint(gdir,gstage) {
94
98
  });
95
99
  }
96
100
 
101
+ function change_it(gdir,gstage) {
102
+ window.location.href = window.location.pathname + '?stage=' + gstage + '&dir=' + gdir;
103
+ }
104
+
97
105
  $(document).ready(function() {
98
106
  const queryString = window.location.search;
99
107
  const urlParams = new URLSearchParams(queryString);
@@ -103,9 +111,39 @@ $(document).ready(function() {
103
111
 
104
112
  es_init(gdir,gstage);
105
113
 
114
+ var shifts = []
115
+ $.ajax({
116
+ type: "GET",
117
+ url: "server/",
118
+ data: { stages: 'stages' },
119
+ success: (r) => {
120
+ shifts = shifts.concat(r);
121
+ shifts = shifts.filter(item => item !== gstage);
122
+ }
123
+ });
124
+
106
125
  $('input[name=stage]').val(gstage);
107
126
  $('input[name=dir]').val(gdir);
108
- $('ui-behind').text(gstage);
127
+ $('ui-behind span').text(gstage);
128
+ $('ui-behind span').click((e) => {
129
+ if (shifts.length > 0) {
130
+ var menu = {};
131
+ menu['Change to'] = [];
132
+ shifts.forEach(ele => {
133
+ menu['Change to'].push(
134
+ {
135
+ 'label': ele,
136
+ 'function_call': change_it,
137
+ 'text_icon': '➔',
138
+ 'type': undefined,
139
+ 'class': 'capitalized',
140
+ 'params': [gdir,ele]
141
+ }
142
+ );
143
+ });
144
+ new CustomMenu(e).contextmenu(menu);
145
+ }
146
+ });
109
147
 
110
148
  var dragged;
111
149
  $('#models').on('drag','td[data-class=model]',false);
@@ -117,7 +155,6 @@ $(document).ready(function() {
117
155
  e.preventDefault();
118
156
  e.stopPropagation();
119
157
  if (dragged) {
120
- console.log(dragged);
121
158
  var todir = $(e.currentTarget).parents('tr').find('td[data-class=name]').text();
122
159
  todir = todir.replace(/\./g,'');
123
160
  if (todir != '') {
@@ -127,16 +164,6 @@ $(document).ready(function() {
127
164
  dragged = undefined;
128
165
  }
129
166
  });
130
- var shifts = []
131
- $.ajax({
132
- type: "GET",
133
- url: "server/",
134
- data: { stages: 'stages' },
135
- success: (r) => {
136
- shifts = shifts.concat(r);
137
- shifts = shifts.filter(item => item !== gstage);
138
- }
139
- });
140
167
  $('#models').on('click','td[data-class=ops]',(e) => {
141
168
  var menu = {};
142
169
  var name = $(e.currentTarget).parents('tr').find('td[data-class=name]').attr('data-full-name');
@@ -181,7 +208,6 @@ $(document).ready(function() {
181
208
  );
182
209
  });
183
210
  }
184
- console.log(shifts);
185
211
  new CustomMenu(e).contextmenu(menu);
186
212
  });
187
213
 
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.14
4
+ version: 1.0.15
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-17 00:00:00.000000000 Z
11
+ date: 2021-06-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: riddl
@@ -38,6 +38,26 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '2.1'
41
+ - !ruby/object:Gem::Dependency
42
+ name: cpee
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '2.1'
48
+ - - ">="
49
+ - !ruby/object:Gem::Version
50
+ version: 2.1.7
51
+ type: :runtime
52
+ prerelease: false
53
+ version_requirements: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - "~>"
56
+ - !ruby/object:Gem::Version
57
+ version: '2.1'
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: 2.1.7
41
61
  description: see http://cpee.org
42
62
  email: juergen.mangler@gmail.com
43
63
  executables: