cpee-model-management 1.1.4 → 1.2.0
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/cpee-model-management.gemspec +1 -1
- data/lib/cpee-model-management/implementation.rb +66 -35
- data/lib/cpee-model-management/implementation.xml +15 -15
- data/server/redis.rdb +0 -0
- data/ui/css/moma.css +114 -0
- data/ui/index.html +21 -35
- data/ui/instances.html +1 -1
- data/ui/instances_view.html +1 -1
- data/ui/js/moma.js +379 -0
- data/ui/js/stats.js +1 -0
- metadata +6 -5
- data/ui/css/design.css +0 -67
- data/ui/js/design.js +0 -245
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7844d39f8bdb0619c97fc35b4b4f030cb200cab9fbf74182db415cd8ca601ae3
|
4
|
+
data.tar.gz: 97ca85020b275d58fc533173c824f44c239dfcd967eee996e8ed85c0f86b14f9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fdf7e58b10267d03897965ece7f14f01c3868d1ff1a5814acc85573d52d38b2e072ebaa4fbaeeb69ab76e4dcd97fdac50355a2f514739a6a698030611352bcec
|
7
|
+
data.tar.gz: 557f02d4df9dc953dd0cb17328c2b33b9a75930bd4df4f0bea3dc3e0da322f53dfd7a54fec8aee36f5934e8b976661d9454a3a8d1ebc1f3b8a3a174dba6982cf
|
@@ -26,6 +26,7 @@ require 'pathname'
|
|
26
26
|
require 'shellwords'
|
27
27
|
require 'securerandom'
|
28
28
|
require 'cpee/redis'
|
29
|
+
require 'digest/sha1'
|
29
30
|
|
30
31
|
module CPEE
|
31
32
|
module ModelManagement
|
@@ -180,7 +181,7 @@ module CPEE
|
|
180
181
|
|
181
182
|
class GetList < Riddl::Implementation #{{{
|
182
183
|
def response
|
183
|
-
where = @a[0] == :main ? '' : Riddl::Protocols::Utils::unescape(
|
184
|
+
where = @a[0] == :main ? '' : @r.map{ |d| Riddl::Protocols::Utils::unescape(d) }.join('/')
|
184
185
|
views = @a[1]
|
185
186
|
models = @a[2]
|
186
187
|
stage = [@p[0]&.value] || ['draft']
|
@@ -195,7 +196,10 @@ module CPEE
|
|
195
196
|
{ :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)
|
196
197
|
end.compact.uniq.sort_by{ |e| e[:name] }
|
197
198
|
|
198
|
-
|
199
|
+
ret = JSON::pretty_generate(names)
|
200
|
+
@headers << Riddl::Header.new('CPEE-MOMA-FINGERPRINT', Digest::SHA1.hexdigest(ret))
|
201
|
+
|
202
|
+
Riddl::Parameter::Complex.new('list','application/json',ret)
|
199
203
|
end
|
200
204
|
end #}}}
|
201
205
|
class GetListFull < Riddl::Implementation #{{{
|
@@ -226,7 +230,7 @@ module CPEE
|
|
226
230
|
|
227
231
|
class ShiftItem < Riddl::Implementation #{{{
|
228
232
|
def response
|
229
|
-
where = @a[0] == :main ? '' : Riddl::Protocols::Utils::unescape(
|
233
|
+
where = @a[0] == :main ? '' : @r[0..-2].map{ |d| Riddl::Protocols::Utils::unescape(d) }.join('/')
|
230
234
|
conns = @a[1]
|
231
235
|
themes = @a[2]
|
232
236
|
models = @a[3]
|
@@ -263,7 +267,7 @@ module CPEE
|
|
263
267
|
|
264
268
|
class RenameItem < Riddl::Implementation #{{{
|
265
269
|
def response
|
266
|
-
where = @a[0] == :main ? '' : Riddl::Protocols::Utils::unescape(
|
270
|
+
where = @a[0] == :main ? '' : @r[0..-2].map{ |d| Riddl::Protocols::Utils::unescape(d) }.join('/')
|
267
271
|
conns = @a[1]
|
268
272
|
models = @a[2]
|
269
273
|
name = File.basename(@r.last,'.xml')
|
@@ -302,10 +306,11 @@ module CPEE
|
|
302
306
|
end #}}}
|
303
307
|
class RenameDir < Riddl::Implementation #{{{
|
304
308
|
def response
|
309
|
+
where = @r[0..-2].map{ |d| Riddl::Protocols::Utils::unescape(d) }.join('/')
|
305
310
|
conns = @a[0]
|
306
311
|
models = @a[1]
|
307
|
-
name = File.basename(@r.last,'.dir')
|
308
|
-
nname =
|
312
|
+
name = File.join(where,File.basename(@r.last,'.dir'))
|
313
|
+
nname = File.join(where,@p[0].value)
|
309
314
|
fname = File.join(models,name + '.dir')
|
310
315
|
fnname = File.join(models,nname + '.dir')
|
311
316
|
counter = 0
|
@@ -342,15 +347,16 @@ module CPEE
|
|
342
347
|
|
343
348
|
class CreateDir < Riddl::Implementation #{{{
|
344
349
|
def response
|
350
|
+
where = @a[0] == :main ? '' : @r.map{ |d| Riddl::Protocols::Utils::unescape(d) }.join('/')
|
345
351
|
name = @p[0].value
|
346
|
-
conns = @a[
|
347
|
-
models = @a[
|
352
|
+
conns = @a[1]
|
353
|
+
models = @a[2]
|
348
354
|
|
349
|
-
fname = File.join(models,name + '.dir')
|
355
|
+
fname = File.join(models,where,name + '.dir')
|
350
356
|
counter = 0
|
351
357
|
while File.exist?(fname)
|
352
358
|
counter += 1
|
353
|
-
fname = File.join(models,name + counter.to_s + '.dir')
|
359
|
+
fname = File.join(models,where,name + counter.to_s + '.dir')
|
354
360
|
end
|
355
361
|
|
356
362
|
dn = CPEE::ModelManagement::get_dn @h['DN']
|
@@ -371,19 +377,23 @@ module CPEE
|
|
371
377
|
end #}}}
|
372
378
|
class Create < Riddl::Implementation #{{{
|
373
379
|
def response
|
374
|
-
|
375
|
-
|
376
|
-
|
380
|
+
models = @a[4]
|
381
|
+
views = @a[1]
|
382
|
+
conns = @a[2]
|
383
|
+
templates = @a[3]
|
384
|
+
if @p.first.name == 'stage'
|
385
|
+
where = @a[0] == :main ? '' : @r.map{ |d| Riddl::Protocols::Utils::unescape(d) }.join('/')
|
386
|
+
stage = @p.shift.value
|
387
|
+
name = @p[0].value
|
388
|
+
source = templates[stage] ? templates[stage] : 'testset.xml'
|
377
389
|
else
|
378
|
-
|
390
|
+
where = @r[0..-2].map{ |d| Riddl::Protocols::Utils::unescape(d) }.join('/')
|
391
|
+
stage = nil
|
392
|
+
name = @r[-1].sub(/\.xml$/,'')
|
393
|
+
source = File.join(models,where,name + '.xml')
|
394
|
+
where = @p[0].value
|
379
395
|
end
|
380
|
-
views = @a[2]
|
381
|
-
conns = @a[3]
|
382
|
-
templates = @a[4]
|
383
|
-
models = @a[5]
|
384
396
|
|
385
|
-
name = @p[0].value
|
386
|
-
source = @p[1] ? File.join(models,where,@p[1].value) : (templates[stage] ? templates[stage] : 'testset.xml')
|
387
397
|
fname = File.join(models,where,name + '.xml')
|
388
398
|
|
389
399
|
attrs = JSON::load File.open(fname + '.attrs') rescue {}
|
@@ -436,7 +446,7 @@ module CPEE
|
|
436
446
|
|
437
447
|
class GetItem < Riddl::Implementation #{{{
|
438
448
|
def response
|
439
|
-
where = @a[0] == :main ? '' : Riddl::Protocols::Utils::unescape(
|
449
|
+
where = @a[0] == :main ? '' : @r[0..-2].map{ |d| Riddl::Protocols::Utils::unescape(d) }.join('/')
|
440
450
|
models = @a[1]
|
441
451
|
name = File.basename(@r[-1],'.xml')
|
442
452
|
fname = File.join(models,where,name + '.xml')
|
@@ -449,7 +459,7 @@ module CPEE
|
|
449
459
|
end #}}}
|
450
460
|
class OpenItem < Riddl::Implementation #{{{
|
451
461
|
def response
|
452
|
-
where = @a[0] == :main ? '' : Riddl::Protocols::Utils::unescape(
|
462
|
+
where = @a[0] == :main ? '' : @r[0..-3].map{ |d| Riddl::Protocols::Utils::unescape(d) }.join('/')
|
453
463
|
name = File.basename(@r[-2],'.xml')
|
454
464
|
insta = @a[1]
|
455
465
|
cock = @a[2]
|
@@ -530,7 +540,7 @@ module CPEE
|
|
530
540
|
|
531
541
|
class MoveItem < Riddl::Implementation #{{{
|
532
542
|
def response
|
533
|
-
where = @a[0] == :main ? '' : Riddl::Protocols::Utils::unescape(
|
543
|
+
where = @a[0] == :main ? '' : @r[0..-2].map{ |d| Riddl::Protocols::Utils::unescape(d) }.join('/')
|
534
544
|
conns = @a[1]
|
535
545
|
models = @a[2]
|
536
546
|
|
@@ -560,7 +570,7 @@ module CPEE
|
|
560
570
|
end #}}}
|
561
571
|
class PutItem < Riddl::Implementation #{{{
|
562
572
|
def response
|
563
|
-
where = @a[0] == :main ? '' : Riddl::Protocols::Utils::unescape(
|
573
|
+
where = @a[0] == :main ? '' : @r[0..-2].map{ |d| Riddl::Protocols::Utils::unescape(d) }.join('/')
|
564
574
|
conns = @a[1]
|
565
575
|
models = @a[2]
|
566
576
|
name = File.basename(@r.last,'.xml')
|
@@ -569,6 +579,8 @@ module CPEE
|
|
569
579
|
|
570
580
|
fname = File.join(models,where,name + '.xml')
|
571
581
|
|
582
|
+
p fname
|
583
|
+
|
572
584
|
if File.exist?(fname)
|
573
585
|
author = dn['GN'] + ' ' + dn['SN']
|
574
586
|
attrs = {}
|
@@ -599,7 +611,7 @@ module CPEE
|
|
599
611
|
end #}}}
|
600
612
|
class DeleteItem < Riddl::Implementation #{{{
|
601
613
|
def response
|
602
|
-
where = @a[0] == :main ? '' : Riddl::Protocols::Utils::unescape(
|
614
|
+
where = @a[0] == :main ? '' : @r[0..-2].map{ |d| Riddl::Protocols::Utils::unescape(d) }.join('/')
|
603
615
|
conns = @a[1]
|
604
616
|
models = @a[2]
|
605
617
|
name = File.basename(@r.last,'.xml')
|
@@ -614,15 +626,16 @@ module CPEE
|
|
614
626
|
end #}}}
|
615
627
|
class DeleteDir < Riddl::Implementation #{{{
|
616
628
|
def response
|
629
|
+
where = @r[0..-2].map{ |d| Riddl::Protocols::Utils::unescape(d) }.join('/')
|
617
630
|
conns = @a[0]
|
618
631
|
models = @a[1]
|
619
632
|
name = File.basename(@r.last,'.dir')
|
620
|
-
fname = File.join(models,name + '.dir')
|
633
|
+
fname = File.join(models,where,name + '.dir')
|
621
634
|
|
622
635
|
dn = CPEE::ModelManagement::get_dn @h['DN']
|
623
636
|
author = dn['GN'] + ' ' + dn['SN']
|
624
637
|
|
625
|
-
CPEE::ModelManagement::op author, 'rm', models, File.join(name + '.dir')
|
638
|
+
CPEE::ModelManagement::op author, 'rm', models, File.join(where,name + '.dir')
|
626
639
|
CPEE::ModelManagement::notify conns, 'delete', models, fname
|
627
640
|
end
|
628
641
|
end #}}}
|
@@ -856,30 +869,47 @@ module CPEE
|
|
856
869
|
|
857
870
|
CPEE::redis_connect opts, 'Server Main'
|
858
871
|
|
872
|
+
opts[:sse_keepalive_frequency] ||= 10
|
873
|
+
|
859
874
|
Proc.new do
|
875
|
+
|
876
|
+
parallel do
|
877
|
+
EM.add_periodic_timer(opts[:sse_keepalive_frequency]) do
|
878
|
+
opts[:management_receivers].each do |sse|
|
879
|
+
sse.send_with_id('heartbeat', '42') unless sse&.closed?
|
880
|
+
end
|
881
|
+
opts[:stat_receivers].each do |sse|
|
882
|
+
sse.send_with_id('heartbeat', '42') unless sse&.closed?
|
883
|
+
end
|
884
|
+
end
|
885
|
+
end
|
886
|
+
|
860
887
|
interface 'events' do
|
861
888
|
run StatReceive, opts[:redis], opts[:stat_receivers] if post 'event'
|
862
889
|
end
|
890
|
+
|
863
891
|
interface 'implementation' do
|
864
892
|
run GetList, :main, opts[:views], opts[:models] if get 'stage'
|
865
893
|
run GetListFull, opts[:views], opts[:models] if get 'full'
|
866
894
|
run GetStages, opts[:themes] if get 'stages'
|
867
|
-
run Create, :main,
|
868
|
-
run
|
869
|
-
|
870
|
-
|
895
|
+
run Create, :main, opts[:views], opts[:management_receivers], opts[:templates], opts[:models] if post 'item'
|
896
|
+
run CreateDir, :main, opts[:management_receivers], opts[:models] if post 'dir'
|
897
|
+
on resource 'management' do
|
898
|
+
run ManagementSend, opts[:management_receivers] if sse
|
899
|
+
end
|
871
900
|
on resource '[a-zA-Z0-9öäüÖÄÜ _-]+\.dir' do
|
872
901
|
run GetList, :sub, opts[:views], opts[:models] if get 'stage'
|
873
|
-
run Create, :sub,
|
874
|
-
run Create, :sub, :dup, opts[:views], opts[:management_receivers], opts[:templates], opts[:models] if post 'duplicate'
|
902
|
+
run Create, :sub, opts[:views], opts[:management_receivers], opts[:templates], opts[:models] if post 'item'
|
875
903
|
run DeleteDir, opts[:management_receivers], opts[:models] if delete
|
876
904
|
run RenameDir, opts[:management_receivers], opts[:models] if put 'name'
|
905
|
+
run CreateDir, :sub, opts[:management_receivers], opts[:models] if post 'dir'
|
877
906
|
on resource '[a-zA-Z0-9öäüÖÄÜ _-]+\.xml' do
|
878
907
|
run DeleteItem, :sub, opts[:management_receivers], opts[:models] if delete
|
879
908
|
run GetItem, :sub, opts[:models] if get
|
880
909
|
run PutItem, :sub, opts[:management_receivers], opts[:models] if put 'content'
|
881
910
|
run RenameItem, :sub, opts[:management_receivers], opts[:models] if put 'name'
|
882
|
-
run MoveItem, :sub, opts[:management_receivers], opts[:models] if put '
|
911
|
+
run MoveItem, :sub, opts[:management_receivers], opts[:models] if put 'movedir'
|
912
|
+
run Create, :sub, opts[:views], opts[:management_receivers], opts[:templates], opts[:models] if put 'dupdir'
|
883
913
|
run ShiftItem, :sub, opts[:management_receivers], opts[:themes], opts[:models] if put 'newstage'
|
884
914
|
on resource 'open' do
|
885
915
|
run OpenItem, :sub, opts[:instantiate], opts[:cockpit], opts[:views], false, opts[:models] if get 'stage'
|
@@ -894,7 +924,8 @@ module CPEE
|
|
894
924
|
run GetItem, :main, opts[:models] if get
|
895
925
|
run PutItem, :main, opts[:management_receivers], opts[:models] if put 'content'
|
896
926
|
run RenameItem, :main, opts[:management_receivers], opts[:models] if put 'name'
|
897
|
-
run MoveItem, :main, opts[:management_receivers], opts[:models] if put '
|
927
|
+
run MoveItem, :main, opts[:management_receivers], opts[:models] if put 'movedir'
|
928
|
+
run Create, :main, opts[:views], opts[:management_receivers], opts[:templates], opts[:models] if put 'dupdir'
|
898
929
|
run ShiftItem, :main, opts[:management_receivers], opts[:themes], opts[:models] if put 'newstage'
|
899
930
|
on resource 'open' do
|
900
931
|
run OpenItem, :main, opts[:instantiate], opts[:cockpit], opts[:views], false, opts[:models] if get 'stage'
|
@@ -32,17 +32,14 @@
|
|
32
32
|
<param name="pattern">([a-zA-Z0-9öäüÖÄÜ _-]+)|</param>
|
33
33
|
</parameter>
|
34
34
|
</message>
|
35
|
-
<message name="
|
36
|
-
<parameter name="
|
37
|
-
<param name="pattern">([a-zA-Z0-9öäüÖÄÜ _-]+)\.dir|</param>
|
35
|
+
<message name="movedir">
|
36
|
+
<parameter name="movedir" type="string">
|
37
|
+
<param name="pattern">(([a-zA-Z0-9öäüÖÄÜ _-]+)\.dir(\/([a-zA-Z0-9öäüÖÄÜ _-]+)\.dir)*)(\/?)|</param>
|
38
38
|
</parameter>
|
39
39
|
</message>
|
40
|
-
<message name="
|
41
|
-
<parameter name="
|
42
|
-
<param name="pattern">[a-zA-Z0-9öäüÖÄÜ _-]
|
43
|
-
</parameter>
|
44
|
-
<parameter name="old" type="string">
|
45
|
-
<param name="pattern">[a-zA-Z0-9öäüÖÄÜ _-]+\.xml</param>
|
40
|
+
<message name="dupdir">
|
41
|
+
<parameter name="dupdir" type="string">
|
42
|
+
<param name="pattern">(([a-zA-Z0-9öäüÖÄÜ _-]+)\.dir(\/([a-zA-Z0-9öäüÖÄÜ _-]+)\.dir)*)(\/?)|</param>
|
46
43
|
</parameter>
|
47
44
|
</message>
|
48
45
|
<message name="stages">
|
@@ -77,14 +74,15 @@
|
|
77
74
|
<resource>
|
78
75
|
<post in="item"/>
|
79
76
|
<post in="dir"/>
|
80
|
-
<post in="duplicate"/>
|
81
77
|
<get in="stage" out="list"/>
|
82
78
|
<get in="full" out="list"/>
|
83
79
|
<get in="stages" out="list"/>
|
84
|
-
<
|
85
|
-
|
80
|
+
<resource relative="management">
|
81
|
+
<sse/>
|
82
|
+
</resource>
|
83
|
+
<resource relative="[a-zA-Z0-9öäüÖÄÜ _-]+\.dir" recursive="true">
|
86
84
|
<post in="item"/>
|
87
|
-
<post in="
|
85
|
+
<post in="dir"/>
|
88
86
|
<get in="stage" out="list"/>
|
89
87
|
<delete/>
|
90
88
|
<put in="name"/> <!-- rename -->
|
@@ -93,8 +91,9 @@
|
|
93
91
|
<delete/>
|
94
92
|
<put in="content"/>
|
95
93
|
<put in="name"/> <!-- rename -->
|
96
|
-
<put in="
|
94
|
+
<put in="movedir"/> <!-- move -->
|
97
95
|
<put in="newstage"/> <!-- shift -->
|
96
|
+
<put in="dupdir"/> <!-- duplicate -->
|
98
97
|
<resource relative="open"><get in="stage"/></resource>
|
99
98
|
<resource relative="open-new"><get in="stage"/></resource>
|
100
99
|
</resource>
|
@@ -104,7 +103,8 @@
|
|
104
103
|
<delete/>
|
105
104
|
<put in="content"/>
|
106
105
|
<put in="name"/> <!-- rename -->
|
107
|
-
<put in="
|
106
|
+
<put in="movedir"/> <!-- move -->
|
107
|
+
<put in="dupdir"/> <!-- duplicate -->
|
108
108
|
<put in="newstage"/> <!-- shift -->
|
109
109
|
<resource relative="open"><get in="stage"/></resource>
|
110
110
|
<resource relative="open-new"><get in="stage"/></resource>
|
data/server/redis.rdb
ADDED
Binary file
|
data/ui/css/moma.css
ADDED
@@ -0,0 +1,114 @@
|
|
1
|
+
:root {
|
2
|
+
--x-ui-selection-background-light: #ef29297f;
|
3
|
+
--x-ui-selection-background: #ef2929;
|
4
|
+
}
|
5
|
+
|
6
|
+
[data-class=model] { min-width: 1.5em; text-align: center; font-size: 1.7em; cursor: pointer; }
|
7
|
+
[data-class=folder] { min-width: 1.5em; text-align: center; font-size: 1.7em; }
|
8
|
+
[data-class=model]:hover { background-color: var(--x-ui-selection-background-light) !important; }
|
9
|
+
[data-class=ops] { cursor: pointer; }
|
10
|
+
[data-class=special] { cursor: pointer; min-width: 1.5em; text-align: center !important; font-size: 1.7em; }
|
11
|
+
[data-class=special].invisible { cursor: auto; visibility: hidden; }
|
12
|
+
[data-class=special]:hover { background-color: var(--x-ui-selection-background-light) !important; }
|
13
|
+
|
14
|
+
[data-class=special] {
|
15
|
+
position: relative;
|
16
|
+
z-index: 0;
|
17
|
+
animation: important 0.2s infinite;
|
18
|
+
}
|
19
|
+
@keyframes important {
|
20
|
+
0% { transform: rotate(0deg); }
|
21
|
+
|
22
|
+
8% { transform: rotate(3deg); }
|
23
|
+
16% { transform: rotate(6deg); }
|
24
|
+
24% { transform: rotate(9deg); }
|
25
|
+
32% { transform: rotate(6deg); }
|
26
|
+
38% { transform: rotate(3deg); }
|
27
|
+
|
28
|
+
50% { transform: rotate(0deg); }
|
29
|
+
|
30
|
+
58% { transform: rotate(-3deg); }
|
31
|
+
66% { transform: rotate(-6deg); }
|
32
|
+
74% { transform: rotate(-9deg); }
|
33
|
+
82% { transform: rotate(-6deg); }
|
34
|
+
88% { transform: rotate(-3deg); }
|
35
|
+
|
36
|
+
100% { transform: rotate(0deg); }
|
37
|
+
}
|
38
|
+
|
39
|
+
td.selected {
|
40
|
+
background-color: var(--x-ui-selection-background) !important;
|
41
|
+
}
|
42
|
+
|
43
|
+
div.fixed {
|
44
|
+
position: sticky;
|
45
|
+
z-index: 1;
|
46
|
+
top: 0;
|
47
|
+
width: 100%;
|
48
|
+
background-color: var(--x-ui-background-color);
|
49
|
+
}
|
50
|
+
div.text { padding-top: 1em; }
|
51
|
+
div.breadcrumb { padding-top: 0.5em; padding-bottom: 1em; }
|
52
|
+
div.breadcrumb span.separator {
|
53
|
+
padding-left: 1em;
|
54
|
+
padding-right: 1em;
|
55
|
+
}
|
56
|
+
div.breadcrumb span.crumb:last-child { }
|
57
|
+
div.breadcrumb span.crumb:not(:last-child) {
|
58
|
+
color: var(--x-ui-link-color);
|
59
|
+
cursor: pointer;
|
60
|
+
}
|
61
|
+
div.breadcrumb span.crumb:not(:last-child):hover {
|
62
|
+
color: var(--x-ui-light-text-color);
|
63
|
+
text-decoration: underline;
|
64
|
+
}
|
65
|
+
|
66
|
+
form input {
|
67
|
+
width: 45em !important;
|
68
|
+
}
|
69
|
+
|
70
|
+
ui-behind {
|
71
|
+
text-transform: capitalize;
|
72
|
+
font-weight: bold;
|
73
|
+
color: #d0d0d0;
|
74
|
+
}
|
75
|
+
|
76
|
+
ui-behind span {
|
77
|
+
cursor: pointer;
|
78
|
+
}
|
79
|
+
|
80
|
+
[is="x-ui-"] table.ui-table {
|
81
|
+
border-collapse: collapse;
|
82
|
+
}
|
83
|
+
[is="x-ui-"] table.ui-table thead th {
|
84
|
+
font-weight: bold;
|
85
|
+
text-align: left;
|
86
|
+
padding: 0.3em 0.5em;
|
87
|
+
}
|
88
|
+
|
89
|
+
[is="x-ui-"] table.ui-table tbody td {
|
90
|
+
padding: 0.1em 0.5em;
|
91
|
+
}
|
92
|
+
[is="x-ui-"] table.ui-table tbody tr:nth-child(odd) td {
|
93
|
+
background-color: var(--x-ui-content-light-background);
|
94
|
+
}
|
95
|
+
[is="x-ui-"] table.ui-table tbody tr:hover td {
|
96
|
+
background-color: var(--x-ui-content-hover-background);
|
97
|
+
}
|
98
|
+
[is="x-ui-"] table.ui-table tbody td[data-class=ops] {
|
99
|
+
text-align: center;
|
100
|
+
}
|
101
|
+
[is="x-ui-"] table.ui-table tbody tr:nth-child(odd) td[data-class=ops] {
|
102
|
+
background-color: #d0d0d0;
|
103
|
+
}
|
104
|
+
[is="x-ui-"] table.ui-table tbody tr:hover td[data-class=ops] {
|
105
|
+
background-color: #99cee6b0;
|
106
|
+
}
|
107
|
+
|
108
|
+
[is="x-ui-"] ui-rest > ui-content > ui-area {
|
109
|
+
padding: 0em 1em 1em 1em;
|
110
|
+
}
|
111
|
+
|
112
|
+
tr.contextmenuitem .capitalized {
|
113
|
+
text-transform: capitalize;
|
114
|
+
}
|
data/ui/index.html
CHANGED
@@ -20,7 +20,7 @@
|
|
20
20
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
|
21
21
|
<head>
|
22
22
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
23
|
-
<title>Process Hub</title>
|
23
|
+
<title data-orig="Process Hub">Process Hub</title>
|
24
24
|
<link rel="icon" type="image/x-icon" href="favicon.ico">
|
25
25
|
|
26
26
|
<!-- libs, do not modify. When local than load local libs. -->
|
@@ -53,9 +53,9 @@
|
|
53
53
|
<link rel="stylesheet" href="/js_libs/relaxngui.css" type="text/css"/>
|
54
54
|
|
55
55
|
<!-- custom stuff, play arround -->
|
56
|
-
<link rel="stylesheet" href="css/
|
56
|
+
<link rel="stylesheet" href="css/moma.css" type="text/css"/>
|
57
57
|
<link rel="stylesheet" href="css/stats.css" type="text/css"/>
|
58
|
-
<script type="text/javascript" src="js/
|
58
|
+
<script type="text/javascript" src="js/moma.js"></script>
|
59
59
|
<script type="text/javascript" src="js/stats.js"></script>
|
60
60
|
</head>
|
61
61
|
<body is="x-ui-">
|
@@ -73,10 +73,13 @@
|
|
73
73
|
</ui-tabbar>
|
74
74
|
<ui-content class="noselect">
|
75
75
|
<ui-area data-belongs-to-tab="models">
|
76
|
-
<
|
76
|
+
<div class="fixed">
|
77
|
+
<div class="text">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@cpee.org">helpdesk@cpee.org</a> if you are lost. Click on <strong>Icons</strong> of directory entries, to mark them. Then change to a different directory and move/copy them there. And as always: <a target='_blank' href='https://www.youtube.com/watch?v=kkxj5xVLyj0&feature=youtu.be&t=56'>get dressed for success</a>.</div>
|
78
|
+
<div class="breadcrumb"><span class="crumb" onclick="">⌂ Home</span></div>
|
79
|
+
</div>
|
77
80
|
<table id="models" class='ui-table'>
|
78
81
|
<thead>
|
79
|
-
<th
|
82
|
+
<th data-class='special' class='invisible' title='click for operations'>🔧</th>
|
80
83
|
<th>Name</th>
|
81
84
|
<th><abbr title='force new instance'>F</abbr></th>
|
82
85
|
<th><abbr title='link to model source'>M</abbr></th>
|
@@ -86,22 +89,9 @@
|
|
86
89
|
<th>Changed At</th>
|
87
90
|
<th><abbr title='Operations'>Op</abbr></th>
|
88
91
|
</thead>
|
89
|
-
<template id="up">
|
90
|
-
<tr>
|
91
|
-
<td data-class='folder' class="noselect">📁</td>
|
92
|
-
<td data-class='name' data-full-name=''><a href=''></a></td>
|
93
|
-
<td></td>
|
94
|
-
<td></td>
|
95
|
-
<td></td>
|
96
|
-
<td></td>
|
97
|
-
<td></td>
|
98
|
-
<td data-class='date'></td>
|
99
|
-
<td data-class=''></td>
|
100
|
-
</tr>
|
101
|
-
</template>
|
102
92
|
<template id="folder">
|
103
93
|
<tr>
|
104
|
-
<td data-class='folder' class="noselect">📁</td>
|
94
|
+
<td data-class='folder' class="noselect" title='click to mark'>📁</td>
|
105
95
|
<td data-class='name' data-full-name=''><a href=''></a></td>
|
106
96
|
<td></td>
|
107
97
|
<td></td>
|
@@ -109,12 +99,12 @@
|
|
109
99
|
<td></td>
|
110
100
|
<td></td>
|
111
101
|
<td data-class='date'></td>
|
112
|
-
<td data-class='ops' class="noselect"><span
|
102
|
+
<td data-class='ops' class="noselect" title='click for operations'><span>🔧</span></td>
|
113
103
|
</tr>
|
114
104
|
</template>
|
115
105
|
<template id="model">
|
116
106
|
<tr>
|
117
|
-
<td data-class='model' class="noselect"
|
107
|
+
<td data-class='model' class="noselect" title='click to mark'>𝌭</td>
|
118
108
|
<td data-class='name' data-full-name=''><a target='_blank' href=''></a></td>
|
119
109
|
<td data-class='force'>[<a target='_blank' href='' title='force new instance'>F</a>]</td>
|
120
110
|
<td data-class='raw'>[<a target='_blank' href='' title='link to model source'>M</a>]</td>
|
@@ -122,7 +112,7 @@
|
|
122
112
|
<td data-class='guarded'><abbr title=''></abbr></td>
|
123
113
|
<td data-class='resource'></td>
|
124
114
|
<td data-class='date'></td>
|
125
|
-
<td data-class='ops' class="noselect"><span
|
115
|
+
<td data-class='ops' class="noselect" title='click for operations'><span>🔧</span></td>
|
126
116
|
</tr>
|
127
117
|
</template>
|
128
118
|
<tbody>
|
@@ -130,18 +120,17 @@
|
|
130
120
|
</table>
|
131
121
|
</ui-area>
|
132
122
|
<ui-area data-belongs-to-tab="newmodel" class="inactive">
|
133
|
-
<
|
123
|
+
<div class="text">
|
134
124
|
Create an empty model. Beware, if a model of the same name already
|
135
125
|
exists in one of the categories (e.g. draft, development,
|
136
126
|
production, archive) it can not be created. To protect you from
|
137
127
|
getting confused and shooting yourself in the foot in your little
|
138
128
|
modelling world we allow only unique names. Better safe than sorry.
|
139
|
-
</
|
129
|
+
</div>
|
130
|
+
<div class="breadcrumb"><span class="crumb" onclick="">⌂ Home</span></div>
|
140
131
|
<form id="newmod">
|
141
|
-
<input type="hidden" name="stage" value=""/>
|
142
|
-
<input type="hidden" name="dir" value=""/>
|
143
132
|
<p>
|
144
|
-
<input type="text" name="new" required pattern="^[a-zA-Z0-9öäüÖÄÜ _
|
133
|
+
<input type="text" name="new" required pattern="^[a-zA-Z0-9öäüÖÄÜ _\-]+" placeholder="Filename (no extension necessary). Only use characters, spaces, underlines and dashes."/>
|
145
134
|
</p>
|
146
135
|
<p>
|
147
136
|
<button>New Model</button>
|
@@ -149,17 +138,14 @@
|
|
149
138
|
</form>
|
150
139
|
</ui-area>
|
151
140
|
<ui-area data-belongs-to-tab="newdir" class="inactive">
|
152
|
-
<
|
141
|
+
<div class="text">
|
153
142
|
Create an empty directory. Beware, if a directory of the same name
|
154
|
-
already exists
|
155
|
-
|
156
|
-
|
157
|
-
modelling world we allow only unique names. Better safe than sorry.
|
158
|
-
</p>
|
143
|
+
already exists it can not be created.
|
144
|
+
</div>
|
145
|
+
<div class="breadcrumb"><span class="crumb" onclick="">⌂ Home</span></div>
|
159
146
|
<form id="newdir">
|
160
|
-
<input type="hidden" name="stage" value=""/>
|
161
147
|
<p>
|
162
|
-
<input type="text" name="newdir" required pattern="^[a-zA-Z0-9öäüÖÄÜ _
|
148
|
+
<input type="text" name="newdir" required pattern="^[a-zA-Z0-9öäüÖÄÜ _\-]+" placeholder="Directory name. Only use characters, spaces, underlines and dashes."/>
|
163
149
|
</p>
|
164
150
|
<p>
|
165
151
|
<button>New Directory</button>
|
data/ui/instances.html
CHANGED
@@ -53,7 +53,7 @@
|
|
53
53
|
<link rel="stylesheet" href="/js_libs/relaxngui.css" type="text/css"/>
|
54
54
|
|
55
55
|
<!-- custom stuff, play arround -->
|
56
|
-
<link rel="stylesheet" href="css/
|
56
|
+
<link rel="stylesheet" href="css/moma.css" type="text/css"/>
|
57
57
|
<link rel="stylesheet" href="css/stats.css" type="text/css"/>
|
58
58
|
<link rel="stylesheet" href="css/stats_standalone.css" type="text/css"/>
|
59
59
|
<script type="text/javascript" src="js/stats.js"></script>
|
data/ui/instances_view.html
CHANGED
@@ -53,7 +53,7 @@
|
|
53
53
|
<link rel="stylesheet" href="/js_libs/relaxngui.css" type="text/css"/>
|
54
54
|
|
55
55
|
<!-- custom stuff, play arround -->
|
56
|
-
<link rel="stylesheet" href="css/
|
56
|
+
<link rel="stylesheet" href="css/moma.css" type="text/css"/>
|
57
57
|
<link rel="stylesheet" href="css/stats.css" type="text/css"/>
|
58
58
|
<link rel="stylesheet" href="css/stats_standalone.css" type="text/css"/>
|
59
59
|
<script type="text/javascript" src="js/stats.js"></script>
|