@reldens/cms 0.4.0 → 0.6.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.
Files changed (48) hide show
  1. package/README.md +1 -1
  2. package/admin/assets/admin/filters.png +0 -0
  3. package/admin/assets/admin/list.png +0 -0
  4. package/admin/reldens-admin-client.css +830 -0
  5. package/admin/reldens-admin-client.js +272 -0
  6. package/admin/templates/dashboard.html +1 -0
  7. package/admin/templates/default-copyright.html +5 -0
  8. package/admin/templates/edit.html +25 -0
  9. package/admin/templates/fields/edit/button.html +3 -0
  10. package/admin/templates/fields/edit/checkbox.html +1 -0
  11. package/admin/templates/fields/edit/file.html +2 -0
  12. package/admin/templates/fields/edit/radio.html +1 -0
  13. package/admin/templates/fields/edit/select.html +5 -0
  14. package/admin/templates/fields/edit/text.html +1 -0
  15. package/admin/templates/fields/edit/textarea.html +1 -0
  16. package/admin/templates/fields/view/boolean.html +1 -0
  17. package/admin/templates/fields/view/image.html +4 -0
  18. package/admin/templates/fields/view/images.html +7 -0
  19. package/admin/templates/fields/view/link.html +1 -0
  20. package/admin/templates/fields/view/links.html +6 -0
  21. package/admin/templates/fields/view/text.html +1 -0
  22. package/admin/templates/layout.html +37 -0
  23. package/admin/templates/list-content.html +70 -0
  24. package/admin/templates/list.html +35 -0
  25. package/admin/templates/login.html +19 -0
  26. package/admin/templates/management.html +22 -0
  27. package/admin/templates/maps-wizard-maps-selection.html +85 -0
  28. package/admin/templates/maps-wizard.html +341 -0
  29. package/admin/templates/objects-import.html +143 -0
  30. package/admin/templates/pagination-link.html +1 -0
  31. package/admin/templates/sidebar-header.html +4 -0
  32. package/admin/templates/sidebar-item.html +3 -0
  33. package/admin/templates/sidebar.html +11 -0
  34. package/admin/templates/skills-import.html +201 -0
  35. package/admin/templates/view.html +23 -0
  36. package/bin/reldens-cms.js +19 -7
  37. package/index.js +2 -2
  38. package/install/index.html +5 -7
  39. package/lib/entities-loader.js +45 -0
  40. package/lib/{storefront.js → frontend.js} +10 -6
  41. package/lib/installer.js +150 -49
  42. package/lib/manager.js +65 -26
  43. package/migrations/default-user.sql +2 -1
  44. package/package.json +2 -2
  45. package/templates/.env.dist +11 -11
  46. package/templates/css/styles.css +1 -1
  47. package/templates/index.js.dist +32 -0
  48. package/templates/js/scripts.js +1 -1
@@ -0,0 +1,830 @@
1
+ /*
2
+ * Reldens - Administration Panel
3
+ */
4
+
5
+
6
+ :root {
7
+ --normalFont: Verdana, Geneva, sans-serif;
8
+ --reldensFont: "Play", sans-serif;
9
+ --bold: 600;
10
+ --black: #000000;
11
+ --white: #ffffff;
12
+ --red: #ff0000;
13
+ --orange: #d38200;
14
+ --darkGrey: #333333;
15
+ --grey: #7f8c8d;
16
+ --lightGrey: #ecf0f1;
17
+ --lightGrey2: #f9f9f9;
18
+ --lightBlue: #3498db;
19
+ --darkBlue: #34495e;
20
+ --green: #05c459;
21
+ --darkGreen: #27ae60;
22
+ }
23
+
24
+ .reldens-admin-panel {
25
+ font-family: var(--normalFont);
26
+ background-color: var(--lightGrey);
27
+ margin: 0;
28
+ padding: 0;
29
+ font-size: 12px;
30
+
31
+ & .wrapper {
32
+ display: flex;
33
+ flex-direction: column;
34
+ min-height: 100vh;
35
+ }
36
+
37
+ & .notification {
38
+ display: none;
39
+ position: absolute;
40
+ top: 1.5rem;
41
+ right: 0;
42
+ padding: 1rem 5rem 1rem 2rem;
43
+ border-radius: 8px 0 0 8px;
44
+ font-size: 14px;
45
+
46
+ &.success, &.error {
47
+ display: block;
48
+ }
49
+
50
+ &.error {
51
+ background-color: var(--red);
52
+ color: var(--white);
53
+ }
54
+
55
+ &.success {
56
+ background-color: var(--darkGreen);
57
+ color: var(--white);
58
+ }
59
+
60
+ & .close {
61
+ position: absolute;
62
+ top: 1rem;
63
+ right: 1rem;
64
+ cursor: pointer;
65
+ font-weight: var(--bold);
66
+ }
67
+ }
68
+
69
+ & .header {
70
+ background-color: var(--darkGrey);
71
+ padding: 1.5rem;
72
+ text-align: center;
73
+
74
+ & .title a {
75
+ color: var(--white);
76
+ text-decoration: none;
77
+ font-size: 24px;
78
+ font-weight: var(--bold);
79
+ font-family: var(--reldensFont);
80
+ }
81
+ }
82
+
83
+ & .content {
84
+ display: flex;
85
+ position: relative;
86
+ }
87
+
88
+ & .button {
89
+
90
+ padding: 0.5rem 1rem;
91
+ border: none;
92
+ border-radius: 4px;
93
+ font-size: 14px;
94
+ cursor: pointer;
95
+ text-decoration: none;
96
+
97
+ &-primary {
98
+ color: var(--white);
99
+ background-color: var(--lightBlue);
100
+
101
+ &:hover {
102
+ background-color: var(--lightBlue);
103
+ }
104
+ }
105
+
106
+ &-secondary {
107
+ color: var(--white);
108
+ background-color: var(--grey);
109
+
110
+ &:hover {
111
+ background-color: var(--grey);
112
+ }
113
+ }
114
+
115
+ &-warning {
116
+ color: var(--white);
117
+ background-color: var(--orange);
118
+
119
+ &:hover {
120
+ background-color: var(--orange);
121
+ }
122
+ }
123
+
124
+ &-danger {
125
+ color: var(--white);
126
+ background-color: var(--red);
127
+
128
+ &:hover {
129
+ background-color: var(--red);
130
+ }
131
+ }
132
+
133
+ &:disabled {
134
+ background-color: var(--grey) !important;
135
+ }
136
+ }
137
+
138
+ & .icon {
139
+ &-sm {
140
+ width: 32px;
141
+ }
142
+ }
143
+
144
+ & .clickable {
145
+ cursor: pointer;
146
+ }
147
+
148
+ & .modal-overlay {
149
+ display: flex;
150
+ align-items: center;
151
+ justify-content: center;
152
+ position: fixed;
153
+ top: 0;
154
+ left: 0;
155
+ z-index: 9999;
156
+ width: 100vw;
157
+ height: 100vh;
158
+ background-color: rgba(0, 0, 0, 0.5);
159
+ }
160
+
161
+ & .modal {
162
+ max-width: 92vw;
163
+ max-height: 92vh;
164
+ padding: 1rem;
165
+ overflow: auto;
166
+ cursor: pointer;
167
+ background-color: #fff;
168
+ border-radius: 8px;
169
+
170
+ & canvas {
171
+ max-width: 100%;
172
+ }
173
+ }
174
+
175
+ & .response-error {
176
+ color: var(--red);
177
+ font-weight: var(--bold);
178
+ }
179
+
180
+ & .side-bar {
181
+ min-width: 230px;
182
+ padding: 1.4rem;
183
+ background-color: var(--darkBlue);
184
+ color: var(--lightGrey);
185
+ box-shadow: 2px 0 5px rgba(0, 0, 0, 0.1);
186
+ }
187
+
188
+ & .with-sub-items {
189
+ &.active {
190
+ & .side-bar-item {
191
+ display: block;
192
+
193
+ &:first-of-type {
194
+ margin-top: 1rem;
195
+ }
196
+
197
+ &.active {
198
+ & a {
199
+ border-left: 3px solid var(--white);
200
+ }
201
+ }
202
+ }
203
+ }
204
+
205
+ & .side-bar-item {
206
+ display: none;
207
+
208
+ & a {
209
+ display: block;
210
+ color: var(--lightGrey);
211
+ text-decoration: none;
212
+ border-left: 3px solid transparent;
213
+ font-size: 12px;
214
+ border-left: 3px solid #0000;
215
+ padding: 0.1rem 0.1rem 0.1rem 1rem;
216
+ margin-top: 0.3rem;
217
+ margin-bottom: 0.5rem;
218
+
219
+ &:hover, &:focus, &:active {
220
+ background-color: var(--darkBlue);
221
+ border-left: 3px solid var(--lightBlue);
222
+ }
223
+ }
224
+ }
225
+ }
226
+
227
+ & .side-bar-item {
228
+ margin-bottom: 0.2rem;
229
+
230
+ &:first-child {
231
+ & h3 {
232
+ margin-top: 0;
233
+ }
234
+ }
235
+
236
+ & h3, a {
237
+ display: block;
238
+ margin: 1rem 0 0;
239
+ border: none;
240
+ padding: 0;
241
+ color: var(--lightGrey);
242
+ text-decoration: none;
243
+ cursor: pointer;
244
+ font-size: 14px;
245
+ font-weight: 400;
246
+ border-bottom: 1px solid var(--darkBlue);
247
+
248
+ &:hover {
249
+ font-weight: var(--bold);
250
+ }
251
+ }
252
+ }
253
+
254
+ & .user-area {
255
+ margin-top: 1.5rem;
256
+ }
257
+
258
+ & .main-content {
259
+ padding: 2rem;
260
+ background-color: var(--white);
261
+ box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
262
+ border-radius: 8px;
263
+ margin: 1.4rem;
264
+ overflow: auto;
265
+ width: 100%;
266
+ }
267
+
268
+ & .entity-list {
269
+ overflow: auto;
270
+
271
+ & .actions {
272
+ display: flex;
273
+ justify-content: end;
274
+ margin-bottom: 1rem;
275
+ }
276
+ }
277
+
278
+ & .forms-container {
279
+ width: 96%;
280
+ max-width: 400px;
281
+ margin: auto;
282
+ }
283
+
284
+ & .form-title {
285
+ font-size: 22px;
286
+ margin-bottom: 2%;
287
+ color: var(--darkGrey);
288
+ text-align: center;
289
+ }
290
+
291
+ & .input-box {
292
+ margin: 0 auto 4%;
293
+
294
+ & label {
295
+ display: block;
296
+ font-weight: 600;
297
+ margin-bottom: 1%;
298
+ }
299
+
300
+ & input[type='text'], input[type='password'] {
301
+ width: 96%;
302
+ padding: 2%;
303
+ border: 1px solid #ccc;
304
+ border-radius: 4px;
305
+ }
306
+
307
+ & input[type='submit'] {
308
+ margin: 0 auto;
309
+ display: flex;
310
+
311
+ &:hover {
312
+ background-color: var(--lightBlue);
313
+ }
314
+ }
315
+ }
316
+
317
+ & .table-container {
318
+ width: 96%;
319
+ margin: auto;
320
+ }
321
+
322
+ & h2 {
323
+ font-size: 22px;
324
+ margin: 0 0 2rem;
325
+ color: var(--darkGrey);
326
+ text-align: center;
327
+ }
328
+
329
+ & .list {
330
+ width: 100%;
331
+ border-collapse: collapse;
332
+ margin-bottom: 2%;
333
+ color: var(--darkGrey);
334
+ table-layout: auto;
335
+
336
+ & .row {
337
+ background-color: var(--white);
338
+
339
+ &.row-header {
340
+ background-color: var(--darkBlue);
341
+ color: var(--white);
342
+ }
343
+
344
+ &:nth-child(even) {
345
+ background-color: var(--lightGrey);
346
+ }
347
+ }
348
+
349
+ & th.field {
350
+ padding: 1.5rem 0;
351
+
352
+ & span {
353
+ color: var(--white);
354
+ }
355
+ }
356
+
357
+ & .field {
358
+ padding: 0.5rem 0;
359
+ min-width: min-content;
360
+ white-space: nowrap;
361
+ height: auto;
362
+ border: 1px solid #ccc;
363
+ text-align: left;
364
+
365
+ & .button-list-delete {
366
+ border: none;
367
+ background-color: transparent;
368
+ cursor: pointer;
369
+ }
370
+
371
+ & .field-actions-container {
372
+ display: flex;
373
+ flex-direction: column;
374
+ justify-content: center;
375
+ align-items: center;
376
+ margin: 0 1rem;
377
+
378
+ & .button {
379
+ margin-bottom: 1rem;
380
+
381
+ &.list-delete-selection {
382
+ margin-bottom: 0;
383
+ }
384
+ }
385
+ }
386
+
387
+ & a, a:visited {
388
+ color: var(--black);
389
+ text-decoration: none;
390
+ }
391
+
392
+ & a:active, a:hover {
393
+ color: var(--lightBlue);
394
+ }
395
+
396
+ & span {
397
+ padding: 0 1rem;
398
+ color: var(--black);
399
+ }
400
+
401
+ &-edit, &-delete {
402
+ & span {
403
+ display: block;
404
+ text-align: center;
405
+ cursor: pointer;
406
+ }
407
+ }
408
+
409
+ &-edit {
410
+ & span {
411
+ & svg, path {
412
+ width: 24px;
413
+ color: var(--lightBlue);
414
+ }
415
+ }
416
+ }
417
+
418
+ &-delete {
419
+ & span {
420
+ & svg, path {
421
+ width: 24px;
422
+ fill: var(--lightBlue);
423
+ }
424
+ }
425
+ }
426
+ }
427
+ }
428
+
429
+ & .filters-toggle {
430
+ cursor: pointer;
431
+ }
432
+
433
+ & .filters-toggle-content {
434
+ display: flex;
435
+ flex-wrap: wrap;
436
+ justify-content: flex-start;
437
+
438
+ &.hidden {
439
+ display: none;
440
+ }
441
+ }
442
+
443
+ & .pagination {
444
+ width: 100%;
445
+ display: flex;
446
+ flex-flow: wrap;
447
+ justify-content: center;
448
+ padding: 1rem 0;
449
+ text-align: center;
450
+
451
+ & a {
452
+ margin: 0.2rem;
453
+ padding: 1rem 1.4rem;
454
+ border: 1px solid #ccc;
455
+ color: var(--lightBlue);
456
+ text-decoration: none;
457
+
458
+ &:hover, &:focus, &:active {
459
+ background-color: var(--lightBlue);
460
+ color: var(--white);
461
+ }
462
+ }
463
+ }
464
+
465
+ & .footer {
466
+ text-align: center;
467
+ padding: 2%;
468
+ background-color: var(--darkGrey);
469
+ color: var(--white);
470
+
471
+ & a {
472
+ color: var(--white);
473
+ text-decoration: none;
474
+
475
+ &:hover {
476
+ text-decoration: underline;
477
+ }
478
+ }
479
+ }
480
+
481
+ & .copyright {
482
+ position: relative;
483
+ display: block;
484
+ width: 100%;
485
+ margin: 0;
486
+ padding: 0;
487
+ text-align: center;
488
+
489
+ & a, a:hover, a:visited {
490
+ display: block;
491
+ color: var(--white);
492
+ text-decoration: none;
493
+ padding: 0;
494
+ }
495
+
496
+ }
497
+
498
+ & .alert {
499
+ font-weight: var(--bold);
500
+ color: var(--red);
501
+ }
502
+
503
+ & .shutting-down {
504
+ margin-bottom: 1rem;
505
+ }
506
+
507
+ & .sub-content {
508
+ background-color: var(--lightGrey2);
509
+ padding: 1rem;
510
+ margin-bottom: 1rem;
511
+ border: 1px solid #ccc;
512
+ border-radius: 4px;
513
+
514
+ & .sub-content-form {
515
+ display: flex;
516
+ flex-wrap: wrap;
517
+ align-items: flex-end;
518
+ justify-content: space-between;
519
+
520
+ & h4 {
521
+ display: flex;
522
+ flex-direction: row;
523
+ vertical-align: middle;
524
+ align-items: center;
525
+ width: 100%;
526
+ margin: 0 0 1rem 0;
527
+ font-size: 14px;
528
+ color: var(--darkGrey);
529
+
530
+ &.filters-toggle {
531
+ & img {
532
+ max-width: 30px;
533
+ margin-right: 1rem;
534
+ }
535
+ }
536
+ }
537
+
538
+ & .actions {
539
+ display: flex;
540
+ width: 100%;
541
+ margin: 1rem 0 0 0;
542
+ }
543
+
544
+ & .sub-content-box {
545
+ display: flex;
546
+ flex-direction: column;
547
+ margin-bottom: 1rem;
548
+ margin-right: 1rem;
549
+
550
+ & label {
551
+ font-weight: 600;
552
+ margin-bottom: 0.5rem;
553
+ }
554
+
555
+ & input[type="text"] {
556
+ padding: 0.5rem;
557
+ border: 1px solid #ccc;
558
+ border-radius: 4px;
559
+ min-width: 150px; /* Minimum width for input fields */
560
+ }
561
+ }
562
+
563
+ & input[type="submit"] {
564
+ margin-right: 1.4rem;
565
+
566
+ }
567
+ }
568
+
569
+ & textarea {
570
+ position: relative;
571
+ display: block;
572
+ width: 98%;
573
+ padding: 1%;
574
+ margin: 1rem 0;
575
+ }
576
+ }
577
+
578
+ & .maps-wizard {
579
+ & .main-action-container.maps-selection {
580
+ width: 100%;
581
+
582
+ & .wizard-options-container {
583
+ display: flex;
584
+ justify-content: space-between;
585
+ flex-wrap: wrap;
586
+ width: 100%;
587
+
588
+ /* 3 or more items => 4 columns */
589
+ & .wizard-map-option-container {
590
+ flex: 0 0 22%;
591
+ padding: 1rem 1% 0;
592
+ margin: 1.5rem 0 0;
593
+ border: 1px solid #ccc;
594
+ }
595
+
596
+ /* 1 child => 1 columns */
597
+ & .wizard-map-option-container:only-child {
598
+ flex: 0 0 100%;
599
+ padding: 1rem 0 0;
600
+ border: none;
601
+ }
602
+
603
+ /* 2 children => 2 columns */
604
+ .wizard-map-option-container:first-child:nth-last-child(2),
605
+ & .wizard-map-option-container:last-child:nth-child(2) {
606
+ flex: 0 0 47%;
607
+ }
608
+
609
+ & input.map-wizard-option {
610
+ top: 2px;
611
+ margin-right: 0;
612
+ }
613
+ }
614
+ }
615
+
616
+ & .checkbox-container {
617
+ display: flex;
618
+ flex-direction: row;
619
+ font-weight: var(--bold);
620
+ }
621
+
622
+ & .wizard-options-container {
623
+ padding: 0;
624
+ margin-bottom: 1rem;
625
+
626
+ & input.map-wizard-option {
627
+ position: relative;
628
+ top: -2px;
629
+ margin-right: 6px;
630
+ }
631
+
632
+ & .wizard-map-option-container {
633
+ display: flex;
634
+ flex-direction: column;
635
+ list-style: none;
636
+ padding-top: 1rem;
637
+ margin-top: 1.5rem;
638
+ border-top: 1px solid #ccc;
639
+
640
+ & label {
641
+ cursor: pointer;
642
+ }
643
+
644
+ & canvas {
645
+ width: 100%;
646
+ margin-top: 1rem;
647
+ }
648
+ }
649
+
650
+ & .wizard-option-container {
651
+ list-style: none;
652
+ margin-bottom: 1rem;
653
+
654
+ & .main-option {
655
+ display: inline-block;
656
+ cursor: pointer;
657
+ }
658
+
659
+ & .maps-wizard-option-content {
660
+ display: none;
661
+ padding-left: 1.6rem;
662
+ }
663
+
664
+ &.active {
665
+ & .maps-wizard-option-content {
666
+ display: block;
667
+ }
668
+ }
669
+ }
670
+ }
671
+
672
+ & .maps-wizard-form {
673
+ align-items: flex-start;
674
+ flex-direction: column;
675
+ justify-content: flex-start;
676
+
677
+ & .submit-container {
678
+ display: flex;
679
+ }
680
+ }
681
+
682
+ & .sub-map-option-description {
683
+ display: flex;
684
+ align-items: center;
685
+
686
+ & img.icon-sm {
687
+ margin-right: 1rem;
688
+ }
689
+ }
690
+
691
+ & .sub-maps-container {
692
+ display: block;
693
+
694
+ &.hidden {
695
+ display: none;
696
+ }
697
+
698
+ & p {
699
+ margin: 1.5rem 0 0;
700
+ }
701
+ }
702
+ }
703
+
704
+ & .loading {
705
+ max-width: 50px;
706
+
707
+ &.hidden {
708
+ display: none;
709
+ }
710
+ }
711
+
712
+ & .entity-view, .entity-edit {
713
+ & h2 {
714
+ font-size: 22px;
715
+ margin-bottom: 2rem;
716
+ color: var(--darkGrey);
717
+ text-align: center;
718
+ }
719
+
720
+ & .view-field, .edit-field {
721
+ display: flex;
722
+ justify-content: space-between;
723
+ padding: 0;
724
+ margin-bottom: 1rem;
725
+
726
+ & span, label, input {
727
+ padding: 0.5rem;
728
+
729
+ &.field-name {
730
+ font-weight: var(--bold);
731
+ color: var(--darkGrey);
732
+ flex: 1;
733
+ }
734
+
735
+ &.field-value {
736
+ flex: 2;
737
+ color: var(--darkBlue);
738
+ background-color: var(--lightGrey);
739
+
740
+ &.with-button {
741
+ margin: auto;
742
+ vertical-align: middle;
743
+
744
+ & button {
745
+ width: max-content;
746
+ margin: 0 0.5rem;
747
+ }
748
+ }
749
+
750
+ & input[type="checkbox"] {
751
+ max-width: max-content;
752
+ margin-left: 0.5rem;
753
+ margin-top: 0.5rem;
754
+ }
755
+ }
756
+ }
757
+ }
758
+
759
+ & .view-field .field-value img {
760
+ max-width: 200px;
761
+ }
762
+
763
+ & .edit-field {
764
+ & span, input {
765
+ &.field-value {
766
+ display: flex;
767
+ flex-direction: column;
768
+ padding: 0;
769
+
770
+ & p {
771
+ margin-left: 0.5rem;
772
+ }
773
+
774
+ & input, select {
775
+ margin: 0;
776
+ padding: 0.5rem;
777
+ border: none;
778
+ background: transparent;
779
+
780
+ &:not([disabled]) {
781
+ margin: 0;
782
+ border: 1px solid #7f8c8d;
783
+ background: #fff;
784
+
785
+ &[type="checkbox"] {
786
+ max-width: max-content;
787
+ margin-left: 0.5rem;
788
+ margin-top: 0.5rem;
789
+ }
790
+ }
791
+ }
792
+ }
793
+ }
794
+ }
795
+
796
+ & .actions {
797
+ margin-top: 2rem;
798
+ text-align: center;
799
+
800
+ & form {
801
+ display: inline;
802
+ }
803
+
804
+ & .button {
805
+ display: inline-block;
806
+ margin: 0 0.5rem;
807
+ }
808
+ }
809
+ }
810
+
811
+ & .extra-content-container, .default-room-container {
812
+ display: flex;
813
+ flex-direction: column;
814
+ padding: 1rem 0;
815
+ margin-top: 1rem;
816
+ text-align: left;
817
+
818
+ & h3 {
819
+ text-align: center;
820
+ }
821
+ }
822
+
823
+ & .association-maps-container {
824
+ display: block;
825
+ width: 100%;
826
+ max-height: 500px;
827
+ overflow: auto;
828
+ }
829
+
830
+ }