summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRaindropsSys <contact@minteck.org>2023-07-20 18:29:09 +0200
committerRaindropsSys <contact@minteck.org>2023-07-20 18:29:09 +0200
commit46251292b5c8b431de66aeff473594ccec60e04c (patch)
treec9f2c196e50f064a66625813660148379212d9d7
parent93c96fd1d89782570de9478c26f17b406e9dd7a0 (diff)
downloadpluralconnect-46251292b5c8b431de66aeff473594ccec60e04c.tar.gz
pluralconnect-46251292b5c8b431de66aeff473594ccec60e04c.tar.bz2
pluralconnect-46251292b5c8b431de66aeff473594ccec60e04c.zip
Updated 19 files and added 26 files (automated)
-rw-r--r--assets/icons/new/add.svg1
-rw-r--r--assets/icons/new/alerts.svg1
-rw-r--r--assets/icons/new/documents.svg1
-rw-r--r--assets/icons/new/history.svg1
-rw-r--r--assets/icons/new/jobs.svg1
-rw-r--r--assets/icons/new/lists.svg1
-rw-r--r--assets/icons/new/login.svg1
-rw-r--r--assets/icons/new/money.svg1
-rw-r--r--assets/icons/new/relations.svg1
-rw-r--r--assets/icons/new/schedule.svg1
-rw-r--r--assets/icons/new/sessions.svg1
-rw-r--r--assets/icons/new/travelling.svg1
-rw-r--r--assets/icons/new/wave.svg1
-rw-r--r--assets/logo/custom-2023.css965
-rw-r--r--assets/logo/dark.svg49
-rw-r--r--assets/logo/light-2023.css182
-rw-r--r--assets/logo/light.svg47
-rw-r--r--icons.php29
-rw-r--r--includes/components/2023ui.inc114
-rw-r--r--includes/components/explicit.php20
-rw-r--r--includes/components/footer.inc10
-rw-r--r--includes/components/fullbanner.inc2
-rw-r--r--includes/components/header.inc464
-rw-r--r--includes/components/mobilenav.inc5
-rw-r--r--includes/components/navigation.inc814
-rw-r--r--includes/components/pane.inc5
-rw-r--r--includes/components/sysbanner.inc11
-rw-r--r--includes/flags.json3
-rw-r--r--includes/fragments/evening.inc245
-rw-r--r--includes/fragments/member.inc4
-rw-r--r--includes/fragments/system.inc4
-rw-r--r--includes/pages.json21
-rw-r--r--includes/themes.json69
-rw-r--r--includes/util/banner.inc23
-rw-r--r--includes/util/evening.inc68
-rw-r--r--pages/account.inc15
-rw-r--r--pages/alerts.inc15
-rw-r--r--pages/api/2023ui.php5
-rw-r--r--pages/docs.inc2
-rw-r--r--pages/evening.inc308
-rw-r--r--pages/jobs.inc12
-rw-r--r--pages/lists.inc15
-rw-r--r--pages/money.inc44
-rw-r--r--pages/schedules.inc10
-rw-r--r--pages/travelling.inc6
45 files changed, 2826 insertions, 773 deletions
diff --git a/assets/icons/new/add.svg b/assets/icons/new/add.svg
new file mode 100644
index 0000000..b44e6b3
--- /dev/null
+++ b/assets/icons/new/add.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="48" viewBox="0 -960 960 960" width="48"><path d="M453-280h60v-166h167v-60H513v-174h-60v174H280v60h173v166Zm27.266 200q-82.734 0-155.5-31.5t-127.266-86q-54.5-54.5-86-127.341Q80-397.681 80-480.5q0-82.819 31.5-155.659Q143-709 197.5-763t127.341-85.5Q397.681-880 480.5-880q82.819 0 155.659 31.5Q709-817 763-763t85.5 127Q880-563 880-480.266q0 82.734-31.5 155.5T763-197.684q-54 54.316-127 86Q563-80 480.266-80Zm.234-60Q622-140 721-239.5t99-241Q820-622 721.188-721 622.375-820 480-820q-141 0-240.5 98.812Q140-622.375 140-480q0 141 99.5 240.5t241 99.5Zm-.5-340Z"/></svg> \ No newline at end of file
diff --git a/assets/icons/new/alerts.svg b/assets/icons/new/alerts.svg
new file mode 100644
index 0000000..e408582
--- /dev/null
+++ b/assets/icons/new/alerts.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="48" viewBox="0 -960 960 960" width="48"><path d="M160-200v-60h80v-304q0-84 49.5-150.5T420-798v-22q0-25 17.5-42.5T480-880q25 0 42.5 17.5T540-820v22q81 17 130.5 83.5T720-564v304h80v60H160Zm320-302Zm0 422q-33 0-56.5-23.5T400-160h160q0 33-23.5 56.5T480-80ZM300-260h360v-304q0-75-52.5-127.5T480-744q-75 0-127.5 52.5T300-564v304Z"/></svg> \ No newline at end of file
diff --git a/assets/icons/new/documents.svg b/assets/icons/new/documents.svg
new file mode 100644
index 0000000..fcdbdfc
--- /dev/null
+++ b/assets/icons/new/documents.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="48" viewBox="0 -960 960 960" width="48"><path d="M319-250h322v-60H319v60Zm0-170h322v-60H319v60ZM220-80q-24 0-42-18t-18-42v-680q0-24 18-42t42-18h361l219 219v521q0 24-18 42t-42 18H220Zm331-554v-186H220v680h520v-494H551ZM220-820v186-186 680-680Z"/></svg> \ No newline at end of file
diff --git a/assets/icons/new/history.svg b/assets/icons/new/history.svg
new file mode 100644
index 0000000..dce57e4
--- /dev/null
+++ b/assets/icons/new/history.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="48" viewBox="0 -960 960 960" width="48"><path d="M477-120q-149 0-253-105.5T120-481h60q0 125 86 213t211 88q127 0 215-89t88-216q0-124-89-209.5T477-780q-68 0-127.5 31T246-667h105v60H142v-208h60v106q52-61 123.5-96T477-840q75 0 141 28t115.5 76.5Q783-687 811.5-622T840-482q0 75-28.5 141t-78 115Q684-177 618-148.5T477-120Zm128-197L451-469v-214h60v189l137 134-43 43Z"/></svg> \ No newline at end of file
diff --git a/assets/icons/new/jobs.svg b/assets/icons/new/jobs.svg
new file mode 100644
index 0000000..8a4226e
--- /dev/null
+++ b/assets/icons/new/jobs.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="48" viewBox="0 -960 960 960" width="48"><path d="M222-214 80-356l42-42 100 99 179-179 42 43-221 221Zm0-320L80-676l42-42 100 99 179-179 42 43-221 221Zm298 244v-60h360v60H520Zm0-320v-60h360v60H520Z"/></svg> \ No newline at end of file
diff --git a/assets/icons/new/lists.svg b/assets/icons/new/lists.svg
new file mode 100644
index 0000000..aa4ad37
--- /dev/null
+++ b/assets/icons/new/lists.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="48" viewBox="0 -960 960 960" width="48"><path d="M350-220h470v-137H350v137ZM140-603h150v-137H140v137Zm0 187h150v-127H140v127Zm0 196h150v-137H140v137Zm210-196h470v-127H350v127Zm0-187h470v-137H350v137ZM140-160q-24 0-42-18t-18-42v-520q0-24 18-42t42-18h680q24 0 42 18t18 42v520q0 24-18 42t-42 18H140Z"/></svg> \ No newline at end of file
diff --git a/assets/icons/new/login.svg b/assets/icons/new/login.svg
new file mode 100644
index 0000000..19d7374
--- /dev/null
+++ b/assets/icons/new/login.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="48" viewBox="0 -960 960 960" width="48"><path d="M481-120v-60h299v-600H481v-60h299q24 0 42 18t18 42v600q0 24-18 42t-42 18H481Zm-55-185-43-43 102-102H120v-60h363L381-612l43-43 176 176-174 174Z"/></svg> \ No newline at end of file
diff --git a/assets/icons/new/money.svg b/assets/icons/new/money.svg
new file mode 100644
index 0000000..72e14b3
--- /dev/null
+++ b/assets/icons/new/money.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="48" viewBox="0 -960 960 960" width="48"><path d="M652-416q25 0 44.5-19.5t19.5-45q0-25.5-19.5-44.5T652-544q-25 0-44.5 19T588-480.5q0 25.5 19.5 45T652-416ZM180-233v53-600 547Zm0 113q-23 0-41.5-18T120-180v-600q0-23 18.5-41.5T180-840h600q24 0 42 18.5t18 41.5v134h-60v-134H180v600h600v-133h60v133q0 24-18 42t-42 18H180Zm358-173q-34 0-54-20t-20-53v-227q0-34 20-53.5t54-19.5h270q34 0 54 19.5t20 53.5v227q0 33-20 53t-54 20H538Zm284-60v-253H524v253h298Z"/></svg> \ No newline at end of file
diff --git a/assets/icons/new/relations.svg b/assets/icons/new/relations.svg
new file mode 100644
index 0000000..9dbe309
--- /dev/null
+++ b/assets/icons/new/relations.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="48" viewBox="0 -960 960 960" width="48"><path d="M450-280H280q-83 0-141.5-58.5T80-480q0-83 58.5-141.5T280-680h170v60H280q-58.333 0-99.167 40.765-40.833 40.764-40.833 99Q140-422 180.833-381q40.834 41 99.167 41h170v60ZM325-450v-60h310v60H325Zm185 170v-60h170q58.333 0 99.167-40.765 40.833-40.764 40.833-99Q820-538 779.167-579 738.333-620 680-620H510v-60h170q83 0 141.5 58.5T880-480q0 83-58.5 141.5T680-280H510Z"/></svg> \ No newline at end of file
diff --git a/assets/icons/new/schedule.svg b/assets/icons/new/schedule.svg
new file mode 100644
index 0000000..88fe7c8
--- /dev/null
+++ b/assets/icons/new/schedule.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="48" viewBox="0 -960 960 960" width="48"><path d="M180-80q-24 0-42-18t-18-42v-620q0-24 18-42t42-18h65v-60h65v60h340v-60h65v60h65q24 0 42 18t18 42v620q0 24-18 42t-42 18H180Zm0-60h600v-430H180v430Zm0-490h600v-130H180v130Zm0 0v-130 130Zm300 230q-17 0-28.5-11.5T440-440q0-17 11.5-28.5T480-480q17 0 28.5 11.5T520-440q0 17-11.5 28.5T480-400Zm-160 0q-17 0-28.5-11.5T280-440q0-17 11.5-28.5T320-480q17 0 28.5 11.5T360-440q0 17-11.5 28.5T320-400Zm320 0q-17 0-28.5-11.5T600-440q0-17 11.5-28.5T640-480q17 0 28.5 11.5T680-440q0 17-11.5 28.5T640-400ZM480-240q-17 0-28.5-11.5T440-280q0-17 11.5-28.5T480-320q17 0 28.5 11.5T520-280q0 17-11.5 28.5T480-240Zm-160 0q-17 0-28.5-11.5T280-280q0-17 11.5-28.5T320-320q17 0 28.5 11.5T360-280q0 17-11.5 28.5T320-240Zm320 0q-17 0-28.5-11.5T600-280q0-17 11.5-28.5T640-320q17 0 28.5 11.5T680-280q0 17-11.5 28.5T640-240Z"/></svg> \ No newline at end of file
diff --git a/assets/icons/new/sessions.svg b/assets/icons/new/sessions.svg
new file mode 100644
index 0000000..0a4aceb
--- /dev/null
+++ b/assets/icons/new/sessions.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="48" viewBox="0 -960 960 960" width="48"><path d="M480-81q-140-35-230-162.5T160-523v-238l320-120 320 120v238q0 152-90 279.5T480-81Zm0-62q115-38 187.5-143.5T740-523v-196l-260-98-260 98v196q0 131 72.5 236.5T480-143Zm0-337Z"/></svg> \ No newline at end of file
diff --git a/assets/icons/new/travelling.svg b/assets/icons/new/travelling.svg
new file mode 100644
index 0000000..0f93c0e
--- /dev/null
+++ b/assets/icons/new/travelling.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="48" viewBox="0 -960 960 960" width="48"><path d="m612-120-263-93-179 71q-17 9-33.5-1T120-173v-558q0-13 7.5-23t19.5-15l202-71 263 92 178-71q17-8 33.5 1.5T840-788v565q0 11-7.5 19T814-192l-202 72Zm-34-75v-505l-196-66v505l196 66Zm60 0 142-47v-512l-142 54v505Zm-458-12 142-54v-505l-142 47v512Zm458-493v505-505Zm-316-66v505-505Z"/></svg> \ No newline at end of file
diff --git a/assets/icons/new/wave.svg b/assets/icons/new/wave.svg
new file mode 100644
index 0000000..39607d2
--- /dev/null
+++ b/assets/icons/new/wave.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="48" viewBox="0 -960 960 960" width="48"><path d="m434-498 276-275q9-9 21-9t21 9q9 9 9 21t-9 21L476-455l-42-43Zm104 104 247-247q9.067-9 21.533-9Q819-650 828-641.158q9 8.842 9 21T828-599L580-351l-42-43ZM195-199q-91-91-91.5-218T194-635l122-122 42 42q12 12 19.5 28t8.5 30l163-164q9.067-9 21.533-9Q583-830 592-820.947q9 9.052 9 21.5Q601-787 592-778L389-575l-65 65 26 26q42 42 40.5 100.5T347-283l-7 7-42-43 7-7q25-25 25.5-58.5T307-442l-47-47q-9-9.067-9-21.533Q251-523 260-532l56-55q17-17 17-42.5T316-672l-80 80q-73 73-72.5 175T237-242q74 74 177 75.5T590-238l241-241q9.067-9 21.533-9Q865-488 874-479.158q9 8.842 9 21T874-437L633-196q-91 91-219 89.5T195-199Zm217-217ZM689-40l1-60q71 0 120.5-49.5T860-270l60-1q0 95.851-67.575 163.425Q784.851-40 689-40ZM40-689q0-95.851 67.575-163.425Q175.149-920 271-920l-1 60q-71 0-120.5 49.5T100-690l-60 1Z"/></svg> \ No newline at end of file
diff --git a/assets/logo/custom-2023.css b/assets/logo/custom-2023.css
new file mode 100644
index 0000000..6ead16e
--- /dev/null
+++ b/assets/logo/custom-2023.css
@@ -0,0 +1,965 @@
+img {
+ image-rendering: pixelated !important;
+}
+
+.modal-dialog {
+ margin-bottom: 3.5rem !important;
+}
+
+#admin-page {
+ margin-left: 32px;
+}
+
+.debug-hidden {
+ display: none;
+}
+
+#system-banner-container, #member-banner-container {
+ z-index: -1;
+}
+
+.debug-outer:hover .debug-hidden {
+ display: inline-block;
+}
+
+.modal {
+ backdrop-filter: blur(30px);
+ -webkit-backdrop-filter: blur(30px);
+}
+
+nav.navbar {
+ background-color: rgba(0, 0, 0, .75) !important;
+ backdrop-filter: blur(10px);
+ -webkit-backdrop-filter: blur(10px);
+ border-bottom: 1px solid rgba(255, 255, 255, .25);
+}
+
+.hpd-item-card:hover {
+ background-color: rgba(255, 255, 255, .15) !important;
+}
+
+.hpd-item-card:active, .hpd-item-card:focus {
+ background-color: rgba(255, 255, 255, .2) !important;
+}
+
+.hpd-system {
+ transition: opacity 200ms;
+}
+
+.hpd-item-card {
+ outline-style: solid;
+ outline-width: 0;
+ transition: background-color 200ms, outline-width 200ms;
+}
+
+.hpd-item-card:hover {
+ outline-style: solid;
+ outline-width: 4px;
+}
+
+.hpd-item-card:active {
+ outline-style: solid;
+ outline-width: 6px;
+}
+
+.hpd-system:hover {
+ opacity: .9 !important;
+}
+
+.hpd-system:active, .hpd-system:focus {
+ opacity: .8 !important;
+}
+
+.hpd-link:hover {
+ background-color: rgba(255, 255, 255, .15) !important;
+}
+
+.hpd-link:active, .hpd-link:focus {
+ background-color: rgba(255, 255, 255, .2) !important;
+}
+
+.list-separator-mobile {
+ display: none;
+}
+
+@media (max-width: 991px) {
+ #hpd-cloudburst > div, #hpd-raindrops > div, #hpd-legacy > div, #hpd-other > div {
+ grid-template-columns: repeat(3, 1fr) !important;
+ }
+
+ .list-separator-desktop {
+ display: none;
+ }
+
+ span.list-separator-mobile {
+ display: inline;
+ }
+}
+
+@media (max-width: 768px) {
+ #hpd-cloudburst > div, #hpd-raindrops > div, #hpd-legacy > div, #hpd-other > div {
+ grid-template-columns: repeat(2, 1fr) !important;
+ }
+}
+
+@media (max-width: 575px) {
+ #hpd-cloudburst > div, #hpd-raindrops > div, #hpd-legacy > div, #hpd-other > div {
+ grid-template-columns: repeat(1, 1fr) !important;
+ }
+
+ .hpd-item-card img {
+ display: inline-block !important;
+ margin-right: 5px !important;
+ height: 32px !important;
+ width: 32px !important;
+ }
+
+ #hpd-cloudburst > div, #hpd-raindrops > div, #hpd-legacy > div, #hpd-other > div {
+ grid-gap: 5px !important;
+ }
+
+ .hpd-item-card div {
+ display: inline-block !important;
+ }
+
+ .hpd-item-card div:nth-child(3)::before {
+ content: "(";
+ padding-left: 5px;
+ color: white !important;
+ }
+
+ .hpd-item-card div:nth-child(3)::after {
+ content: ")";
+ color: white !important;
+ }
+}
+
+.dropdown-menu {
+ background-color: #222 !important;
+}
+
+.dropdown-item:hover {
+ background-color: rgba(255, 255, 255, .1) !important;
+}
+
+.dropdown-item:active, .dropdown-item:focus {
+ background-color: rgba(255, 255, 255, .2) !important;
+}
+
+.dropdown-item {
+ color: white !important;
+}
+
+.dropdown-icon {
+ filter: invert(1) !important;
+}
+
+.dropdown-toggle .dropdown-icon {
+ opacity: .5; !important;
+ transition: 200ms opacity !important;
+}
+
+.dropdown-toggle:hover .dropdown-icon, .dropdown-toggle:active .dropdown-icon, .dropdown-toggle:focus .dropdown-icon {
+ opacity: .75 !important;
+}
+
+dd {
+ margin-left: 20px;
+}
+
+#system-info a {
+ color: white !important;
+}
+
+#system-info a:hover {
+ opacity: .75;
+}
+
+#system-info a:active, #system-info a:focus {
+ opacity: .5;
+}
+
+@media (max-width: 991px) {
+ #member-card {
+ grid-template-columns: repeat(3, 1fr) !important;
+ }
+
+ .species-name {
+ display: none;
+ }
+}
+
+.member-small-only {
+ display: none;
+}
+
+@media (max-width: 767px) {
+ #member-card {
+ grid-template-columns: 1fr !important;
+ text-align: left;
+ }
+
+ #member-icon-mobile {
+ display: inline-block !important;
+ }
+
+ #mobile-left {
+ text-align: left !important;
+ }
+
+ #mobile-species {
+ display: inline-block !important;
+ }
+
+ #system-info {
+ grid-template-columns: 1fr !important;
+ }
+
+ #member-icon, #member-icon-outer {
+ display: none !important;
+ }
+
+ #member-relations {
+ grid-template-columns: 1fr !important;
+ text-align: left;
+ }
+
+ .member-small-separator {
+ display: none;
+ }
+
+ .member-small-only {
+ display: inline-block;
+ }
+}
+
+#page-content a {
+ color: #afd0ff;
+}
+
+#page-content .btn-outline-light:hover {
+ color: black !important;
+}
+
+#page-content a:hover {
+ opacity: .75;
+}
+
+#page-content a:active, #page-content a:focus {
+ opacity: .5;
+}
+
+.tooltip.show {
+ opacity: 1;
+}
+
+.tooltip-inner {
+ background: #151515;
+ box-shadow: 3px 4px 10px #ffffff26;
+}
+
+.alert {
+ filter: invert(1) hue-rotate(180deg);
+}
+
+.member-link {
+ color: white !important;
+ text-decoration: none !important;
+}
+
+.system-action {
+ border-radius: 10px;
+ color: white !important;
+ text-decoration: none !important;
+ cursor: pointer;
+ transition: background 200ms;
+}
+
+.system-action:hover {
+ background: rgba(255, 255, 255, .1);
+}
+
+.table-dark {
+ --bs-table-bg: #000000;
+}
+
+.comparison {
+ display: grid;
+ grid-template-columns: 3fr 1.5fr 1.5fr 2fr repeat(4, 1fr);
+}
+
+.comparison-header {
+ border-bottom: 2px solid rgba(255, 255, 255, .25);
+ font-weight: bold;
+}
+
+.comparison-item {
+ padding: 5px 10px;
+ text-align: center;
+}
+
+.comparison-item-clickable:hover {
+ background-color: rgba(255, 255, 255, .1);
+}
+
+.comparison-item-clickable:active, .comparison-item-clickable:focus {
+ background-color: rgba(255, 255, 255, .25);
+}
+
+@media (min-width: 1400px) {
+ .comparison-header-l0 {
+ display: inline;
+ }
+ .comparison-header-l1 {
+ display: none;
+ }
+ .comparison-header-l2 {
+ display: none;
+ }
+ .comparison-header-l3 {
+ display: none;
+ }
+ .comparison-header-l4 {
+ display: none;
+ }
+ .comparison-header-l5 {
+ display: none;
+ }
+ .comparison-name-full {
+ display: inline;
+ }
+ .comparison-name-small {
+ display: none;
+ }
+ .comparison-colors {
+ display: inline;
+ }
+ .comparison-relations-count {
+ display: none;
+ }
+ .comparison-relations-full {
+ display: inline;
+ }
+}
+
+@media (max-width: 1399px) {
+ .comparison-header-l0 {
+ display: none;
+ }
+ .comparison-header-l1 {
+ display: inline;
+ }
+ .comparison-header-l2 {
+ display: none;
+ }
+ .comparison-header-l3 {
+ display: none;
+ }
+ .comparison-header-l4 {
+ display: none;
+ }
+ .comparison-header-l5 {
+ display: none;
+ }
+ .comparison-name-full {
+ display: inline;
+ }
+ .comparison-name-small {
+ display: none;
+ }
+ .comparison-colors {
+ display: inline;
+ }
+ .comparison-relations-count {
+ display: none;
+ }
+ .comparison-relations-full {
+ display: inline;
+ }
+}
+
+@media (max-width: 1199px) {
+ .comparison-header-l0 {
+ display: none;
+ }
+ .comparison-header-l1 {
+ display: none;
+ }
+ .comparison-header-l2 {
+ display: initial;
+ }
+ .comparison-header-l3 {
+ display: none;
+ }
+ .comparison-header-l4 {
+ display: none;
+ }
+ .comparison-header-l5 {
+ display: none;
+ }
+ .comparison-name-full {
+ display: none;
+ }
+ .comparison-name-small {
+ display: inline;
+ }
+ .comparison-colors {
+ display: inline;
+ }
+ .comparison-relations-count {
+ display: inline;
+ }
+ .comparison-relations-full {
+ display: none;
+ }
+}
+
+@media (max-width: 991px) {
+ .comparison-header-l0 {
+ display: none;
+ }
+ .comparison-header-l1 {
+ display: none;
+ }
+ .comparison-header-l2 {
+ display: none;
+ }
+ .comparison-header-l3 {
+ display: initial;
+ }
+ .comparison-header-l4 {
+ display: none;
+ }
+ .comparison-header-l5 {
+ display: none;
+ }
+ .comparison-name-full {
+ display: none;
+ }
+ .comparison-name-small {
+ display: inline;
+ }
+ .comparison-colors {
+ display: none !important;
+ }
+ .comparison-relations-count {
+ display: inline;
+ }
+ .comparison-relations-full {
+ display: none;
+ }
+}
+
+@media (max-width: 767px) {
+ .comparison-header-l0 {
+ display: none;
+ }
+ .comparison-header-l1 {
+ display: none;
+ }
+ .comparison-header-l2 {
+ display: none;
+ }
+ .comparison-header-l3 {
+ display: none;
+ }
+ .comparison-header-l4 {
+ display: initial;
+ }
+ .comparison-header-l5 {
+ display: none;
+ }
+ .comparison-name-full {
+ display: none;
+ }
+ .comparison-name-small {
+ display: none;
+ }
+ .comparison-colors {
+ display: none !important;
+ }
+ .comparison-relations-count {
+ display: inline;
+ }
+ .comparison-relations-full {
+ display: none;
+ }
+}
+
+@media (max-width: 575px) {
+ .comparison-header-l0 {
+ display: none;
+ }
+ .comparison-header-l1 {
+ display: none;
+ }
+ .comparison-header-l2 {
+ display: none;
+ }
+ .comparison-header-l3 {
+ display: none;
+ }
+ .comparison-header-l4 {
+ display: none;
+ }
+ .comparison-header-l5 {
+ display: initial;
+ }
+ .comparison-name-full {
+ display: none;
+ }
+ .comparison-name-small {
+ display: none;
+ }
+ .comparison-colors {
+ display: none !important;
+ }
+ .comparison {
+ grid-template-columns: repeat(4, 2fr) repeat(4, 1fr) !important;
+ }
+ .comparison-relations-count {
+ display: inline;
+ }
+ .comparison-relations-full {
+ display: none;
+ }
+}
+
+.tree-first-separator {
+ height: 14px !important;
+ top: 0 !important;
+}
+
+.tree-l0-separator {
+ display: inline-block;
+ width: 20px;
+ margin-left: 35px;
+ border-bottom: 1px solid white;
+ border-left: 1px solid white;
+ height: 26px;
+ position: relative;
+ top: -12px;
+}
+
+.tree-l1 .tree-l0-separator {
+ border-bottom: none !important;
+}
+
+.tree-l1-separator {
+ display: inline-block;
+ width: 20px;
+ margin-left: 35px;
+ border-bottom: 1px solid white;
+ border-left: 1px solid white;
+ height: 26px;
+ position: relative;
+ top: -12px;
+ left: -10px;
+}
+
+.tree-l1 .tree-l0-separator {
+ width: 30px;
+}
+
+.tree-l1 .tree-inner {
+ position: relative;
+ left: -10px;
+}
+
+.tree-l1 .tree-l0-separator {
+ border-bottom: none !important;
+}
+
+.tree-l2-separator {
+ display: inline-block;
+ width: 20px;
+ margin-left: 35px;
+ border-bottom: 1px solid white;
+ border-left: 1px solid white;
+ height: 26px;
+ position: relative;
+ top: -12px;
+ left: -10px;
+}
+
+.tree-l2 .tree-l1-separator {
+ width: 30px;
+}
+
+.tree-l2 .tree-l0-separator {
+ width: 30px;
+}
+
+.tree-l2 .tree-inner {
+ position: relative;
+ left: -10px;
+}
+
+.tree-inner {
+ display: inline-block;
+}
+
+.navbar-collapse.collapse.show, .navbar-collapse.collapsing {
+ background: black;
+ margin: 7px -12px;
+ padding: 0 12px;
+ border-bottom: 1px solid rgba(255, 255, 255, .25);
+}
+
+.new-homepage-system-title:hover {
+ opacity: .85;
+}
+
+#new-homepage-systems {
+ display: grid;
+ grid-template-columns: repeat(2, 1fr);
+ grid-gap: 20px;
+}
+
+@media (max-width: 991px) {
+ #new-homepage-systems {
+ grid-template-columns: 1fr !important;
+ }
+}
+
+.new-homepage-system-list {
+ background-color: rgba(255, 255, 255, .1);
+ border-bottom-left-radius: 10px;
+ border-bottom-right-radius: 10px;
+ display: grid;
+}
+
+.new-homepage-link-last {
+ border-bottom-left-radius: 10px;
+ border-bottom-right-radius: 10px;
+}
+
+.new-homepage-link:hover {
+ opacity: .85;
+}
+
+.new-homepage-link:active {
+ opacity: .75;
+}
+
+.new-homepage-system-title:active {
+ opacity: .75;
+}
+
+peh-muted {
+ --bs-text-opacity: 1;
+ color: #6c757d!important;
+}
+
+.dropdown-toggle::after {
+ margin-bottom: -3px !important;
+}
+
+.navbar-nav {
+ width: 100%;
+}
+
+.card {
+ background-color: #111 !important;
+ border: 1px solid rgba(255, 255, 255, .125) !important;
+}
+
+#member-banner-container > #member-banner > #system-info {
+ border-bottom-right-radius: 0 !important;
+ border-bottom-left-radius: 0 !important;
+}
+
+#member-details {
+ background: rgba(255, 255, 255, .1);
+ border: 1px solid transparent;
+ border-top: none;
+ padding: 10px 20px;
+ border-bottom-left-radius: 10px;
+ border-bottom-right-radius: 10px;
+ display: grid;
+ grid-template-columns: repeat(4, 1fr);
+ text-align: center;
+}
+
+#member-details.member-details-loggedIn {
+ border-radius: 0;
+ padding-bottom: 0 !important;
+}
+
+#member-details-2 {
+ border-bottom-left-radius: 10px;
+ border-bottom-right-radius: 10px;
+ padding: 10px 20px;
+ text-align: center;
+ display: grid;
+ grid-template-columns: repeat(4, 1fr);
+ background: rgba(255, 255, 255, .1);
+ border: 1px solid transparent;
+ border-top: none;
+}
+
+.navbar-collapse.show {
+ z-index: 99999;
+}
+
+@media (max-width: 991px) {
+ div#member-details.member-details-loggedIn, div#member-details.member-details-loggedIn2 {
+ grid-template-columns: repeat(3, 1fr) !important;
+ text-align: center;
+ }
+
+ #member-details {
+ grid-template-columns: 1fr !important;
+ text-align: left;
+ }
+}
+
+@media (max-width: 767px) {
+ div#member-details.member-details-loggedIn, div#member-details.member-details-loggedIn2 {
+ grid-template-columns: repeat(2, 1fr) !important;
+ text-align: left;
+ }
+
+ #member-details-2 {
+ grid-template-columns: repeat(2, 1fr) !important;
+ text-align: left;
+ }
+
+ .member-detail-desktop {
+ display: none !important;
+ }
+
+ .member-detail-mobile {
+ display: initial !important;
+ }
+}
+
+.member-detail-desktop {
+ display: initial;
+}
+
+.member-detail-mobile {
+ display: none;
+}
+
+.linked-card {
+ opacity: 1 !important;
+ color: white !important;
+ text-decoration: none !important;
+}
+
+.linked-card:hover {
+ opacity: .75 !important;
+}
+
+.linked-card:active {
+ opacity: .5 !important;
+}
+
+.navbar-brand {
+ position: relative;
+ z-index: 9999;
+}
+
+html, body {
+ overflow-x: hidden;
+}
+
+.form-check-input {
+ filter: invert(1) hue-rotate(180deg);
+}
+
+body {
+ margin: 0 !important;
+}
+
+#app {
+ background-color: var(--palette-0);
+ position: fixed;
+ top: 52px;
+ right: 10px;
+ bottom: 10px;
+ overflow: auto;
+ left: 64px;
+ border-radius: 15px;
+}
+
+#app > #member-banner-container, #system-banner-container {
+ top: 52px !important;
+ width: calc(100% - 74px) !important;
+ border-top-left-radius: 15px !important;
+ border-top-right-radius: 15px !important;
+}
+
+div#member-banner-inner, div#system-banner-inner {
+ border-top-left-radius: 15px !important;
+ border-top-right-radius: 15px !important;
+ background: linear-gradient(180deg, rgba(var(--palette-0-rgb),0) 0%, rgba(var(--palette-0-rgb),.25) 50%, rgba(var(--palette-0-rgb),1) 100%) !important;
+}
+
+.alert, .btn-close, .text-danger, .text-success, .form-select, .ck-toolbar, .system-action img, #member-designs-inner img, .list-group-item img {
+ filter: none !important;
+}
+
+@media (prefers-color-scheme: light), (prefers-color-scheme: no-preference) {
+ .dark-only {
+ display: none !important;
+ }
+}
+
+@media (prefers-color-scheme: dark) {
+ .light-only {
+ display: none !important;
+ }
+}
+
+hr {
+ border-color: var(--bs-link-color) !important;
+}
+
+.modal {
+ z-index: 9999999 !important;
+}
+
+.modal-backdrop {
+ display: none !important;
+}
+
+:root {
+ /* Overrides the border radius setting in the theme. */
+ --ck-border-radius: 4px !important;
+
+ /* Overrides the default font size in the theme. */
+ --ck-font-size-base: 14px !important;
+
+ /* Helper variables to avoid duplication in the colors. */
+ --ck-custom-background: var(--bs-tertiary-bg) !important;
+ --ck-custom-foreground: var(--palette-5) !important;
+ --ck-custom-border: var(--palette-3) !important;
+ --ck-custom-white: hsl(0, 0%, 100%) !important;
+
+ /* -- Overrides generic colors. ------------------------------------------------------------- */
+
+ --ck-color-base-foreground: var(--ck-custom-background) !important;
+ --ck-color-focus-border: hsl(208, 90%, 62%) !important;
+ --ck-color-text: var(--palette-6) !important;
+ --ck-color-shadow-drop: hsla(0, 0%, 0%, 0.2) !important;
+ --ck-color-shadow-inner: hsla(0, 0%, 0%, 0.1) !important;
+
+ /* -- Overrides the default .ck-button class colors. ---------------------------------------- */
+
+ --ck-color-button-default-background: var(--ck-custom-background) !important;
+ --ck-color-button-default-active-shadow: hsl(270, 2%, 23%) !important;
+ --ck-color-button-default-disabled-background: var(--ck-custom-background) !important;
+
+ --ck-color-button-on-background: var(--ck-custom-foreground) !important;
+ --ck-color-button-on-active-background: hsl(255, 4%, 14%) !important;
+ --ck-color-button-on-active-shadow: hsl(240, 3%, 19%) !important;
+ --ck-color-button-on-disabled-background: var(--ck-custom-foreground) !important;
+
+ --ck-color-button-action-background: hsl(168, 76%, 42%) !important;
+ --ck-color-button-action-hover-background: hsl(168, 76%, 38%) !important;
+ --ck-color-button-action-active-background: hsl(168, 76%, 36%) !important;
+ --ck-color-button-action-active-shadow: hsl(168, 75%, 34%) !important;
+ --ck-color-button-action-disabled-background: hsl(168, 76%, 42%) !important;
+ --ck-color-button-action-text: var(--ck-custom-white) !important;
+
+ --ck-color-button-save: hsl(120, 100%, 46%) !important;
+ --ck-color-button-cancel: hsl(15, 100%, 56%) !important;
+
+ /* -- Overrides the default .ck-dropdown class colors. -------------------------------------- */
+
+ --ck-color-dropdown-panel-background: var(--ck-custom-background) !important;
+ --ck-color-dropdown-panel-border: var(--ck-custom-foreground) !important;
+
+ /* -- Overrides the default .ck-splitbutton class colors. ----------------------------------- */
+
+ --ck-color-split-button-hover-background: var(--ck-color-button-default-hover-background) !important;
+ --ck-color-split-button-hover-border: var(--ck-custom-foreground) !important;
+
+ /* -- Overrides the default .ck-input class colors. ----------------------------------------- */
+
+ --ck-color-input-background: var(--ck-custom-background) !important;
+ --ck-color-input-border: hsl(257, 3%, 43%) !important;
+ --ck-color-input-text: hsl(0, 0%, 98%) !important;
+ --ck-color-input-disabled-background: hsl(255, 4%, 21%) !important;
+ --ck-color-input-disabled-border: hsl(250, 3%, 38%) !important;
+ --ck-color-input-disabled-text: hsl(0, 0%, 78%) !important;
+
+ /* -- Overrides the default .ck-labeled-field-view class colors. ---------------------------- */
+
+ --ck-color-labeled-field-label-background: var(--ck-custom-background) !important;
+
+ /* -- Overrides the default .ck-list class colors. ------------------------------------------ */
+
+ --ck-color-list-background: var(--ck-custom-background) !important;
+ --ck-color-list-button-hover-background: var(--palette-5) !important;
+ --ck-color-list-button-on-background: var(--palette-5) !important;
+ --ck-color-list-button-on-text: var(--ck-color-base-background) !important;
+
+ /* -- Overrides the default .ck-balloon-panel class colors. --------------------------------- */
+
+ --ck-color-panel-background: var(--ck-custom-background) !important;
+ --ck-color-panel-border: var(--ck-custom-border) !important;
+
+ /* -- Overrides the default .ck-toolbar class colors. --------------------------------------- */
+
+ --ck-color-toolbar-background: var(--ck-custom-background) !important;
+ --ck-color-toolbar-border: var(--ck-custom-border) !important;
+
+ /* -- Overrides the default .ck-tooltip class colors. --------------------------------------- */
+
+ --ck-color-tooltip-background: hsl(252, 7%, 14%) !important;
+ --ck-color-tooltip-text: hsl(0, 0%, 93%) !important;
+
+ /* -- Overrides the default colors used by the ckeditor5-image package. --------------------- */
+
+ --ck-color-image-caption-background: var(--bs-body-bg) !important;
+ --ck-color-image-caption-text: var(--bs-body-color) !important;
+
+ /* -- Overrides the default colors used by the ckeditor5-widget package. -------------------- */
+
+ --ck-color-widget-blurred-border: hsl(0, 0%, 87%) !important;
+ --ck-color-widget-hover-border: hsl(43, 100%, 68%) !important;
+ --ck-color-widget-editable-focus-background: var(--ck-custom-white) !important;
+
+ /* -- Overrides the default colors used by the ckeditor5-link package. ---------------------- */
+
+ --ck-color-link-default: hsl(190, 100%, 75%) !important;
+
+ /* CUSTOM OPTIONS */
+ --ck-color-button-on-color: var(--bs-link-color) !important;
+ --ck-color-button-on-hover-background: var(--palette-3) !important;
+ --ck-color-button-default-hover-background: var(--palette-4) !important;
+ --ck-color-list-button-on-background-focus: var(--palette-1) !important;
+ --ck-color-base-background: transparent !important;
+ --ck-color-button-default-active-background: var(--palette-2) !important;
+}
+
+:root {
+ --ck-color-base-border: var(--bs-secondary-bg) !important;
+ --ck-focus-outer-shadow: transparent !important;
+ --ck-focus-ring: 1px solid transparent !important;
+}
+
+.ck.ck-button.ck-on.ck-button_with-text {
+ color: var(--bs-body-color) !important;
+}
+
+.ck.ck-content {
+ background-color: var(--bs-body-bg) !important;
+ color: var(--bs-body-color) !important;
+}
+
+.ck.ck-content.ck-focused {
+ border-color: var(--bs-link-color) !important;
+}
+
+.relation {
+ background-color: var(--palette-1) !important;
+}
+
+.relation-intro {
+ background-color: var(--palette-2) !important;
+ border-right: 1px solid var(--palette-3) !important;
+} \ No newline at end of file
diff --git a/assets/logo/dark.svg b/assets/logo/dark.svg
new file mode 100644
index 0000000..38557db
--- /dev/null
+++ b/assets/logo/dark.svg
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 27.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 4256 1080" style="enable-background:new 0 0 4256 1080;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#FFFFFF;}
+ .st1{opacity:0.25;fill:none;stroke:#FFFFFF;stroke-miterlimit:10;enable-background:new ;}
+ .st2{opacity:0.54;fill:#333232;enable-background:new ;}
+ .st3{fill:#333232;}
+ .st4{opacity:0.1;fill:#FFFFFF;enable-background:new ;}
+ .st5{fill:#212326;}
+ .st6{fill:#1B1B1B;}
+ .st7{fill:#292F35;}
+ .st8{fill:#25292D;}
+</style>
+<path class="st0" d="M2214.1,552.7h-219.5v-25h219.5l-103.5-103.5l17.5-17.5l133.6,133.6l-133.6,133.6l-17.5-17.5L2214.1,552.7z"/>
+<g>
+ <rect y="0.1" width="480.8" height="1080"/>
+ <rect x="479.1" y="0.3" width="1440.9" height="1080"/>
+ <line class="st1" x1="479.1" y1="0.3" x2="479.1" y2="1080.3"/>
+ <line class="st1" x1="0" y1="174.6" x2="479.1" y2="174.6"/>
+ <line class="st1" x1="0" y1="234.3" x2="479.1" y2="234.3"/>
+ <line class="st1" x1="0" y1="724.6" x2="479.1" y2="724.6"/>
+ <path class="st2" d="M1778.7,724.6H621.3c-11,0-20-9-20-20V294.3h1197.4v410.3C1798.7,715.7,1789.7,724.6,1778.7,724.6z"/>
+ <path class="st2" d="M621.3,755.6h343c11,0,20,9,20,20v304.5h-383V775.6C601.3,764.5,610.3,755.6,621.3,755.6z"/>
+ <path class="st2" d="M1027.9,755.6h343c11,0,20,9,20,20v304.5h-383V775.6C1007.9,764.5,1016.9,755.6,1027.9,755.6z"/>
+ <path class="st2" d="M1435.7,755.6h343c11,0,20,9,20,20v304.5h-383V775.6C1415.7,764.5,1424.7,755.6,1435.7,755.6z"/>
+ <path class="st3" d="M621.3,755.6h343c11,0,20,9,20,20v58.1h-383v-58.1C601.3,764.5,610.3,755.6,621.3,755.6z"/>
+ <path class="st3" d="M1028.5,755.6h343c11,0,20,9,20,20v58.1h-383v-58.1C1008.5,764.5,1017.5,755.6,1028.5,755.6z"/>
+ <path class="st3" d="M1435.7,755.6h343c11,0,20,9,20,20v58.1h-383v-58.1C1415.7,764.5,1424.7,755.6,1435.7,755.6z"/>
+ <rect y="0.1" class="st4" width="1920" height="1080.2"/>
+</g>
+<g>
+ <rect x="2336.2" y="0.3" class="st5" width="1920" height="1080"/>
+ <path class="st6" d="M4206.5,1052.2H2510.6c-11,0-20-9-20-20V114.5c0-11,9-20,20-20h1695.8c11,0,20,9,20,20v917.7
+ C4226.5,1043.2,4217.5,1052.2,4206.5,1052.2z"/>
+ <path class="st7" d="M2414.8,335.9L2414.8,335.9c-23.7,0-42.9-19.2-42.9-42.9V161.2c0-23.7,19.2-42.9,42.9-42.9l0,0
+ c23.7,0,42.9,19.2,42.9,42.9V293C2457.6,316.7,2438.4,335.9,2414.8,335.9z"/>
+ <path class="st7" d="M3620.4,78.4h-648.2c-5.5,0-10-4.5-10-10v-34c0-5.5,4.5-10,10-10h648.3c5.5,0,10,4.5,10,10v33.9
+ C3630.4,73.9,3625.9,78.4,3620.4,78.4z"/>
+ <path class="st5" d="M3936.7,696.7H2779.2c-11,0-20-9-20-20V266.4h1197.4v410.3C3956.7,687.8,3947.7,696.7,3936.7,696.7z"/>
+ <path class="st5" d="M2779.2,727.7h343c11,0,20,9,20,20v304.5h-383V747.7C2759.2,736.6,2768.2,727.7,2779.2,727.7z"/>
+ <path class="st5" d="M3185.9,727.7h343c11,0,20,9,20,20v304.5h-383V747.7C3165.9,736.6,3174.9,727.7,3185.9,727.7z"/>
+ <path class="st5" d="M3593.7,727.7h343c11,0,20,9,20,20v304.5h-383V747.7C3573.7,736.6,3582.7,727.7,3593.7,727.7z"/>
+ <path class="st8" d="M2779.2,727.7h343c11,0,20,9,20,20v58.1h-383v-58.1C2759.2,736.6,2768.2,727.7,2779.2,727.7z"/>
+ <path class="st8" d="M3186.4,727.7h343c11,0,20,9,20,20v58.1h-383v-58.1C3166.4,736.6,3175.4,727.7,3186.4,727.7z"/>
+ <path class="st8" d="M3593.7,727.7h343c11,0,20,9,20,20v58.1h-383v-58.1C3573.7,736.6,3582.7,727.7,3593.7,727.7z"/>
+</g>
+</svg>
diff --git a/assets/logo/light-2023.css b/assets/logo/light-2023.css
new file mode 100644
index 0000000..b082640
--- /dev/null
+++ b/assets/logo/light-2023.css
@@ -0,0 +1,182 @@
+@media (prefers-color-scheme: light) {
+ #banner-lower {
+ background: #dddddd8a !important;
+ }
+
+ #timeline-container {
+ background: #dddddd8a !important;
+ border-top-color: rgba(0, 0, 0, .1) !important;
+ }
+
+ #timeline a, .new-homepage-system-title, .new-homepage-link, .home-legacy, .member-card-name, .member-card-prefix, .member-card-prefix code, #navigation-pane *, #mobile-navigation-box-container *, .member-link, .relation-intro, .system-action, #member-banner code, #system-info a {
+ color: var(--bs-body-color) !important;
+ }
+
+ .timeline-indicator {
+ border-right-color: rgba(0, 0, 0, .5) !important;
+ }
+
+ .home-legacy-icon, #explicit-modal img {
+ filter: invert(1);
+ }
+
+ #hpd-legacy, .hpd-item-card {
+ background-color: rgba(0, 0, 0, .05) !important;
+ }
+
+ .hpd-item-card:hover {
+ background-color: rgba(0, 0, 0, .1) !important;
+ }
+
+ .hpd-item-card:active {
+ background-color: rgba(0, 0, 0, .15) !important;
+ }
+
+ #navigation-pane {
+ background-color: #ddd !important;
+ border-right: 1px solid rgba(0, 0, 0, .1) !important;
+ }
+
+ #mobile-navigation {
+ background-color: #ddd !important;
+ border-top: 1px solid rgba(0, 0, 0, .1) !important;
+ }
+
+ .dropdown-icon, #login-link img, .alert, .btn-close, .relation img, .text-danger, .text-success, .form-select, .ck-toolbar, .form-check-input, .system-action img, #member-designs-inner img, .form-control, .list-group-item img {
+ filter: none !important;
+ }
+
+ #login-link, #pane-header, .pane-group {
+ border-bottom: 1px solid rgba(0, 0, 0, .1) !important;
+ }
+
+ .pane-group-category {
+ background: rgba(0, 0, 0, .025) !important;
+ border: 1px solid rgba(0, 0, 0, .05) !important;
+ }
+
+ .pane-group-item:hover, .mobile-navigation-item:hover {
+ background-color: rgba(0, 0, 0, .05);
+ }
+
+ .mobile-navigation-item:active, .mobile-navigation-item.open {
+ background-color: rgba(0, 0, 0, .1);
+ }
+
+ #mobile-navigation-box-container {
+ background-color: rgba(255, 255, 255, .5) !important;
+ }
+
+ #page-content a {
+ color: var(--bs-link-color);
+ }
+
+ #btn-on {
+ background: hsl(0, 80%, 75%) !important;
+ }
+
+ .card {
+ background-color: #fff !important;
+ border: 1px solid rgba(0,0,0,.125) !important;
+ color: black;
+ }
+
+ .btn-outline-light, #page-content .btn-outline-light {
+ color: #212529 !important;
+ border-color: #212529 !important;
+ }
+
+ .btn-outline-light:hover, #page-content .btn-outline-light:hover {
+ color: #fff !important;
+ background-color: #212529 !important;
+ border-color: #212529 !important;
+ }
+
+ .btn-check:active+.btn-outline-light, .btn-check:checked+.btn-outline-light, .btn-outline-light.active, .btn-outline-light.dropdown-toggle.show, .btn-outline-light:active, #page-content .btn-outline-light:active {
+ color: #fff !important;
+ background-color: #212529 !important;
+ border-color: #212529 !important;
+ }
+
+ .form-control {
+ color: #212529 !important;
+ background-color: #fff !important;
+ background-clip: padding-box !important;
+ border: 1px solid #ced4da !important;
+ }
+
+ .contact-item {
+ background-color: #ddd;
+ }
+
+ .contact-method {
+ background-color: #ccc;
+ }
+
+ .dropdown-menu {
+ background-color: #fff !important;
+ }
+
+ .dropdown-item {
+ color: #212529 !important;
+ opacity: 1 !important;
+ }
+
+ .dropdown-item:focus, .dropdown-item:hover {
+ color: #1e2125 !important;
+ background-color: #e9ecef !important;
+ }
+
+ .day-gradient {
+ color: white;
+ }
+
+ #system-banner-inner, #member-banner-inner {
+ background: linear-gradient(180deg, rgba(239,239,239,0) 0%, rgba(239,239,239,.25) 50%, rgba(239,239,239,1) 100%) !important;
+ }
+
+ #system-page, #member-page {
+ background-color: rgba(226,226,226,0.8) !important;
+ }
+
+ .system-info-system {
+ background-color: rgba(0, 0, 0, .05) !important;
+ }
+
+ #system-actions {
+ background-color: rgba(0, 0, 0, .025) !important;
+ }
+
+ .system-action:hover {
+ background: rgba(0, 0, 0, .05) !important;
+ }
+
+ #member-designs-inner {
+ background-color: rgba(20, 20, 20, .05) !important;
+ }
+
+ .btn-dark {
+ color: #000 !important;
+ background-color: #f8f9fa !important;
+ border-color: #f8f9fa !important;
+ }
+
+ .btn-dark:hover {
+ color: #000 !important;
+ background-color: #f9fafb !important;
+ border-color: #f9fafb !important;
+ }
+
+ .btn-check:active+.btn-dark, .btn-check:checked+.btn-dark, .btn-dark.active, .btn-dark:active, .show>.btn-dark.dropdown-toggle {
+ color: #000 !important;
+ background-color: #f9fafb !important;
+ border-color: #f9fafb !important;
+ }
+
+ .btn-check:focus+.btn-dark, .btn-dark:focus {
+ color: #000 !important;
+ background-color: #f9fafb !important;
+ border-color: #f9fafb !important;
+ box-shadow: 0 0 0 0.25rem rgba(211,212,213,.5) !important;
+ }
+} \ No newline at end of file
diff --git a/assets/logo/light.svg b/assets/logo/light.svg
new file mode 100644
index 0000000..c76f07e
--- /dev/null
+++ b/assets/logo/light.svg
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 27.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 4256 1080" style="enable-background:new 0 0 4256 1080;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#DDDDDD;}
+ .st1{fill:#EFEFEF;}
+ .st2{opacity:0.1;fill:none;stroke:#231F20;stroke-miterlimit:10;enable-background:new ;}
+ .st3{opacity:0.54;fill:#DDDDDD;enable-background:new ;}
+ .st4{fill:#EFF4F7;}
+ .st5{fill:#FCFCFC;}
+ .st6{fill:#DEEAF0;}
+ .st7{fill:#E7EFF4;}
+</style>
+<g>
+ <rect y="0" class="st0" width="480.8" height="1080"/>
+ <rect x="479.1" y="0.2" class="st1" width="1440.9" height="1080"/>
+ <line class="st2" x1="479.1" y1="0.2" x2="479.1" y2="1080.2"/>
+ <line class="st2" x1="0" y1="174.5" x2="479.1" y2="174.5"/>
+ <line class="st2" x1="0" y1="234.2" x2="479.1" y2="234.2"/>
+ <line class="st2" x1="0" y1="724.5" x2="479.1" y2="724.5"/>
+ <path class="st3" d="M1778.7,724.5H621.3c-11,0-20-9-20-20V294.2h1197.4v410.3C1798.7,715.6,1789.7,724.5,1778.7,724.5z"/>
+ <path class="st3" d="M621.3,755.5h343c11,0,20,9,20,20V1080h-383V775.5C601.3,764.4,610.3,755.5,621.3,755.5z"/>
+ <path class="st3" d="M1027.9,755.5h343c11,0,20,9,20,20V1080h-383V775.5C1007.9,764.4,1016.9,755.5,1027.9,755.5z"/>
+ <path class="st3" d="M1435.7,755.5h343c11,0,20,9,20,20V1080h-383V775.5C1415.7,764.4,1424.7,755.5,1435.7,755.5z"/>
+ <path class="st0" d="M621.3,755.5h343c11,0,20,9,20,20v58.1h-383v-58.1C601.3,764.4,610.3,755.5,621.3,755.5z"/>
+ <path class="st0" d="M1028.5,755.5h343c11,0,20,9,20,20v58.1h-383v-58.1C1008.5,764.4,1017.5,755.5,1028.5,755.5z"/>
+ <path class="st0" d="M1435.7,755.5h343c11,0,20,9,20,20v58.1h-383v-58.1C1415.7,764.4,1424.7,755.5,1435.7,755.5z"/>
+</g>
+<g>
+ <rect x="2329.4" y="0.2" class="st4" width="1920" height="1080"/>
+ <path class="st5" d="M4199.6,1052.1H2503.8c-11,0-20-9-20-20V114.4c0-11,9-20,20-20h1695.8c11,0,20,9,20,20v917.7
+ C4219.6,1043.1,4210.6,1052.1,4199.6,1052.1z"/>
+ <path class="st6" d="M2407.9,335.8L2407.9,335.8c-23.7,0-42.9-19.2-42.9-42.9V161.1c0-23.7,19.2-42.9,42.9-42.9l0,0
+ c23.7,0,42.9,19.2,42.9,42.9v131.8C2450.7,316.6,2431.5,335.8,2407.9,335.8z"/>
+ <path class="st6" d="M3613.5,78.3h-648.2c-5.5,0-10-4.5-10-10v-34c0-5.5,4.5-10,10-10h648.3c5.5,0,10,4.5,10,10v33.9
+ C3623.5,73.8,3619.1,78.3,3613.5,78.3z"/>
+ <path class="st4" d="M3929.8,696.6H2772.4c-11,0-20-9-20-20V266.3h1197.4v410.3C3949.8,687.7,3940.8,696.6,3929.8,696.6z"/>
+ <path class="st4" d="M2772.4,727.6h343c11,0,20,9,20,20v304.5h-383V747.6C2752.4,736.5,2761.4,727.6,2772.4,727.6z"/>
+ <path class="st4" d="M3179,727.6h343c11,0,20,9,20,20v304.5h-383V747.6C3159,736.5,3168,727.6,3179,727.6z"/>
+ <path class="st4" d="M3586.8,727.6h343c11,0,20,9,20,20v304.5h-383V747.6C3566.8,736.5,3575.8,727.6,3586.8,727.6z"/>
+ <path class="st7" d="M2772.4,727.6h343c11,0,20,9,20,20v58.1h-383v-58.1C2752.4,736.5,2761.4,727.6,2772.4,727.6z"/>
+ <path class="st7" d="M3179.6,727.6h343c11,0,20,9,20,20v58.1h-383v-58.1C3159.6,736.5,3168.6,727.6,3179.6,727.6z"/>
+ <path class="st7" d="M3586.8,727.6h343c11,0,20,9,20,20v58.1h-383v-58.1C3566.8,736.5,3575.8,727.6,3586.8,727.6z"/>
+</g>
+<path d="M2214.1,552.7h-219.5v-25h219.5l-103.5-103.5l17.5-17.5l133.6,133.6l-133.6,133.6l-17.5-17.5L2214.1,552.7z"/>
+</svg>
diff --git a/icons.php b/icons.php
new file mode 100644
index 0000000..6babbdc
--- /dev/null
+++ b/icons.php
@@ -0,0 +1,29 @@
+<?php
+
+if (isset($_GET["_"])) {
+ $name = $_GET["_"];
+
+ if ($name === "." || $name === ".." || str_contains($name, "/")) {
+ die();
+ }
+
+ if (!file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/icons/new/" . $name)) {
+ die();
+ }
+} else {
+ die();
+}
+
+if (isset($_GET["color"])) {
+ if (hexdec($_GET["color"]) > 0 && hexdec($_GET["color"]) < 16777215) {
+ $color = trim($_GET["color"]);
+ } else {
+ $color = "000000";
+ }
+} else {
+ $color = "000000";
+}
+
+header("Content-Type: image/svg+xml");
+
+echo(str_replace(' width="48">', ' width="48" fill="#' . $color . '">', file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/assets/icons/new/" . $name))); \ No newline at end of file
diff --git a/includes/components/2023ui.inc b/includes/components/2023ui.inc
new file mode 100644
index 0000000..556a8b5
--- /dev/null
+++ b/includes/components/2023ui.inc
@@ -0,0 +1,114 @@
+<div id="menu-bar" style="position: fixed; top: 0; left: 101px; right: 20px; height: 52px; display: grid; grid-template-columns: 1fr 1fr 1fr;">
+ <div style="display: grid; grid-template-columns: max-content 1fr;">
+ <div style="height: 52px; display: flex; align-items: center;">
+ <a href="/" style="color: inherit; text-decoration: inherit;">
+ <img src="/assets/logo/newlogo.png" style="width: 32px;">
+ <span style="margin-left: 5px; vertical-align: middle; position: relative; top: -1px; font-weight: bold;">Cold Haze</span>
+ <span data-bs-toggle="tooltip" data-bs-placement="bottom" title="This is the new Cold Haze experience and it is currently experimental" class="badge bg-warning" style="margin-left: 5px; vertical-align: middle; position: relative; top: -1px; font-weight: bold;">Beta</span>
+ </a>
+ </div>
+ <div style="display: flex; align-items: center;">
+ <?php global $isLowerLoggedIn; global $isLoggedIn; global $_PROFILE; if ($isLoggedIn || $isLowerLoggedIn): ?>
+ <div style="margin-left: auto; margin-right: auto;">
+ <a data-bs-toggle="tooltip" data-bs-placement="bottom" title="Alerts" class="ui2023-side-bar-item" href="/-/alerts" style="padding: 10px; height: 48px; width: 48px; display: inline-block; border-radius: 999px;">
+ <img src="<?= icon("alerts") ?>" style="max-width: 28px; max-height: 28px;">
+ </a><a data-bs-toggle="tooltip" data-bs-placement="bottom" title="Member lists" class="ui2023-side-bar-item" href="/-/lists" style="padding: 10px; height: 48px; width: 48px; display: inline-block; border-radius: 999px;">
+ <img src="<?= icon("lists") ?>" style="max-width: 28px; max-height: 28px;">
+ </a>
+ </div>
+ <?php endif; ?>
+ </div>
+ </div>
+ <div style="height: 52px; display: flex; align-items: center;">
+ <form action="/-/search" style="width: 100%;">
+ <input name="q" class="form-control" type="text" value="" placeholder="Search on Cold Haze..." style="width: 100%; margin-left: auto; margin-right: auto; border-color: var(--palette-4) !important; background-color: var(--palette-4) !important;">
+ </form>
+ </div>
+ <div style="display: grid; grid-template-columns: 1fr max-content;">
+ <div style="display: flex; align-items: center;">
+ <?php global $isLowerLoggedIn; global $isLoggedIn; global $_PROFILE; if ($isLoggedIn || $isLowerLoggedIn): ?>
+ <div style="margin-left: auto; margin-right: auto;">
+ <a data-bs-toggle="tooltip" data-bs-placement="bottom" title="Jobs" class="ui2023-side-bar-item" href="/-/jobs" style="padding: 10px; height: 48px; width: 48px; display: inline-block; border-radius: 999px;">
+ <img src="<?= icon("jobs") ?>" style="max-width: 28px; max-height: 28px;">
+ </a><a data-bs-toggle="tooltip" data-bs-placement="bottom" title="Account" class="ui2023-side-bar-item" href="/-/account" style="padding: 10px; height: 48px; width: 48px; display: inline-block; border-radius: 999px;">
+ <img src="<?= icon("sessions") ?>" style="max-width: 28px; max-height: 28px;">
+ </a>
+ </div>
+ <?php endif; ?>
+ </div>
+ <div style="height: 52px; display: flex; align-items: center;">
+ <?php global $isLowerLoggedIn; global $isLoggedIn; global $_PROFILE; if ($isLoggedIn || $isLowerLoggedIn): ?>
+ <a href="https://account.equestria.dev/hub/users/<?= $_PROFILE["id"] ?>" target="_blank" style="color: inherit; text-decoration: inherit;">
+ <?php $fronters = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/" . ($_PROFILE["login"] === "raindrops" ? "gdapd" : ($_PROFILE["login"] === "cloudburst" ? "ynmuc" : "other")) . "/fronters.json"), true); if (isset($fronters["members"][0])): ?>
+ <span style="margin-right: 5px; vertical-align: middle; margin-top: -2px;"><?= $fronters["members"][0]["display_name"] ?? $fronters["members"][0]["name"] ?></span>
+ <img src="<?= getAsset(($_PROFILE["login"] === "raindrops" ? "gdapd" : ($_PROFILE["login"] === "cloudburst" ? "ynmuc" : "other")), $fronters["members"][0]["id"]) ?>" style="width: 32px; height: 32px; border-radius: 999px; background-color: var(--palette-2);">
+ <?php else: ?>
+ <span style="margin-right: 5px; vertical-align: middle; margin-top: -2px;"><?= $_PROFILE["name"] ?></span>
+ <img src="https://account.equestria.dev/hub/api/rest/avatar/<?= $_PROFILE["id"] ?>?dpr=2&size=32" style="width: 32px; height: 32px; border-radius: 999px; background-color: var(--palette-2);">
+ <?php endif; ?>
+ </a>
+ <?php else: ?>
+ <a href="/login" style="color: inherit; text-decoration: inherit;">
+ <span style="margin-right: 5px; vertical-align: middle; margin-top: -2px;">Log in</span>
+ <img src="<?= icon("login", false) ?>" class="light-only" style="width: 24px; height: 24px; margin: 4px;">
+ <img src="<?= icon("login", true) ?>" class="dark-only" style="width: 24px; height: 24px; margin: 4px;">
+ </a>
+ <?php endif; ?>
+ </div>
+ </div>
+</div>
+
+<style>
+ .ui2023-side-bar-system:hover, .ui2023-side-bar-item:hover {
+ background-color: var(--palette-2);
+ }
+
+ .ui2023-side-bar-system:active {
+ background-color: var(--palette-1);
+ }
+
+ .ui2023-side-bar-system:active {
+ background-color: var(--palette-3);
+ }
+</style>
+
+<div id="side-bar" style="position: fixed; top: 62px; bottom: 20px; left: 0; width: 64px; display: flex; justify-content: center;">
+ <div>
+ <div style="background-color: var(--palette-4); height: max-content; border-radius: 999px;">
+ <a data-bs-toggle="tooltip" data-bs-placement="right" title="Raindrops System" class="ui2023-side-bar-system" href="/raindrops" style="padding: 8px; height: 48px; width: 48px; display: block; border-top-left-radius: 999px; border-top-right-radius: 999px;">
+ <img src="<?= getAsset("gdapd") ?>" style="max-width: 32px; max-height: 32px;">
+ </a>
+ <?php global $app; if ($isLoggedIn || $isLowerLoggedIn): ?>
+ <a data-bs-toggle="tooltip" data-bs-placement="right" title="<?= $app["other"]["name"] ?>" class="ui2023-side-bar-system" href="/<?= $app["other"]["slug"] ?>" style="padding: 8px; height: 48px; width: 48px; display: block;">
+ <img src="<?= getAsset("other") ?>" style="max-width: 32px; max-height: 32px;">
+ </a>
+ <?php endif; ?>
+ <a data-bs-toggle="tooltip" data-bs-placement="right" title="Cloudburst System" class="ui2023-side-bar-system" href="/cloudburst" style="padding: 8px; height: 48px; width: 48px; display: block; border-bottom-left-radius: 999px; border-bottom-right-radius: 999px;">
+ <img src="<?= getAsset("ynmuc") ?>" style="max-width: 32px; max-height: 32px;">
+ </a>
+ </div>
+
+ <div style="margin-top: 20px;">
+ <a data-bs-toggle="tooltip" data-bs-placement="right" title="Relations" class="ui2023-side-bar-item" href="/-/relations" style="padding: 10px; height: 48px; width: 48px; display: block; border-radius: 999px;">
+ <img src="<?= icon("relations") ?>" style="max-width: 28px; max-height: 28px;">
+ </a>
+
+ <?php if ($isLowerLoggedIn || $isLoggedIn): ?>
+ <div style="margin: 10px 0; width: 48px; height: 2px; background-color: var(--palette-2);"></div>
+
+ <a data-bs-toggle="tooltip" data-bs-placement="right" title="Schedules" class="ui2023-side-bar-item" href="/-/schedules" style="padding: 10px; height: 48px; width: 48px; display: block; border-radius: 999px;">
+ <img src="<?= icon("schedule") ?>" style="max-width: 28px; max-height: 28px;">
+ </a>
+ <a data-bs-toggle="tooltip" data-bs-placement="right" title="Money tracker" class="ui2023-side-bar-item" href="/-/money" style="padding: 10px; height: 48px; width: 48px; display: block; border-radius: 999px;">
+ <img src="<?= icon("money") ?>" style="max-width: 28px; max-height: 28px;">
+ </a>
+ <a data-bs-toggle="tooltip" data-bs-placement="right" title="Documents" class="ui2023-side-bar-item" href="/-/docs" style="padding: 10px; height: 48px; width: 48px; display: block; border-radius: 999px;">
+ <img src="<?= icon("documents") ?>" style="max-width: 28px; max-height: 28px;">
+ </a>
+ <a data-bs-toggle="tooltip" data-bs-placement="right" title="System travelling" class="ui2023-side-bar-item" href="/-/travelling" style="padding: 10px; height: 48px; width: 48px; display: block; border-radius: 999px;">
+ <img src="<?= icon("travelling") ?>" style="max-width: 28px; max-height: 28px;">
+ </a>
+ <?php endif; ?>
+ </div>
+ </div>
+</div> \ No newline at end of file
diff --git a/includes/components/explicit.php b/includes/components/explicit.php
index 4c55896..3e7675c 100644
--- a/includes/components/explicit.php
+++ b/includes/components/explicit.php
@@ -21,16 +21,18 @@
</div>
</div>
-<style>
- #explicit-modal .modal-header {
- border-bottom: 1px solid #353738;
- }
+<?php global $use2023UI; if (!$use2023UI): ?>
+ <style>
+ #explicit-modal .modal-header {
+ border-bottom: 1px solid #353738;
+ }
- #explicit-modal .modal-content {
- border: 1px solid rgba(255, 255, 255, .2);
- background-color: #111;
- }
-</style>
+ #explicit-modal .modal-content {
+ border: 1px solid rgba(255, 255, 255, .2);
+ background-color: #111;
+ }
+ </style>
+<?php endif; ?>
<!--suppress JSVoidFunctionReturnValueUsed -->
<script>
diff --git a/includes/components/footer.inc b/includes/components/footer.inc
index 7cce7d4..26114a5 100644
--- a/includes/components/footer.inc
+++ b/includes/components/footer.inc
@@ -3,10 +3,12 @@ global $start;
$GLOBALS["ColdHazePerformance"]["page"] = (microtime(true) - $start) * 1000;
$start = microtime(true);
global $pageFile;
+global $use2023UI;
?>
<script src="/assets/editor/ua-parser.js"></script>
+<?php if (!$use2023UI): ?>
<div id="footer-pre"></div>
<div id="footer">
<hr>
@@ -22,9 +24,15 @@ global $pageFile;
?>
© 2022-<?= date("Y") ?> <a href="https://equestria.dev" target="_blank" class="text-muted"><?= $lang["footer"]["copyright"] ?></a> · build <?= $version["build"] ?>.<?= $version["revision"] ?>, took <?= round($time * 1000, 2) ?> ms
+ <?php global $use2023UI; if (($isLoggedIn || $isLowerLoggedIn) && !$use2023UI && isset($_COOKIE["enable2023UIcta"]) && $_COOKIE["enable2023UIcta"] === "yes") { ?>
+ <br>
+ <a class="text-muted" href="#" data-bs-toggle="modal" data-bs-target="#new-ui-cta" onclick="newShape();">Enable Cold Haze's experimental new shape</a>
+ <?php } ?>
<br><br><br><br><br>
</div>
</div>
+<?php else: ?><br><br><?php endif; ?>
+</main>
<script>
let tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'))
@@ -32,11 +40,13 @@ global $pageFile;
return new bootstrap.Tooltip(tooltipTriggerEl)
});
+ <?php if (!$use2023UI): ?>
Array.from(document.querySelectorAll('[data-bs-toggle="tooltip"]')).forEach((item) => {
if (!item.classList.contains("tooltip-nohelp")) {
item.style.cursor = "help";
}
});
+ <?php endif; ?>
//window.fetch("/api/rename?name=" + encodeURIComponent("Cold Haze Web (" + UAParser().browser.name + " on " + UAParser().os.name + ")"));
diff --git a/includes/components/fullbanner.inc b/includes/components/fullbanner.inc
index b8f1f27..99cdb53 100644
--- a/includes/components/fullbanner.inc
+++ b/includes/components/fullbanner.inc
@@ -18,11 +18,9 @@
<div class="alert alert-primary" style="margin-bottom: 0 !important;">
<?= getMiniName($memberData["display_name"] ?? $memberData["name"]) ?> <?= $lang["fullbanner"]["visit"][0] ?> <?= $systemID === "ynmuc" ? "Raindrops System" : "Cloudburst System" ?><?= str_replace("%1", getMemberPronouns($memberData["pronouns"])["subjective"], str_replace("%2", getMemberPronouns($memberData["pronouns"])["third"] ? "is" : "are", $lang["fullbanner"]["visit"][1])) ?><?= $systemCommonName ?>.
</div>
- <br>
<?php elseif ($travelling[$memberID]['travelling'] && $travelling[$memberID]['equestria']): ?>
<br>
<div class="alert alert-primary" style="margin-bottom: 0 !important;">
<?= getMiniName($memberData["display_name"] ?? $memberData["name"]) ?> is on a trip to <?= $metadata["fictive"] ? "Equestria" : "Celeste" ?>. <?= str_replace("%1", getMemberPronouns($memberData["pronouns"])["subjective"], str_replace("%2", getMemberPronouns($memberData["pronouns"])["third"] ? "is" : "are", "Therefore %1 %2 currently not in the ")) ?><?= $systemCommonName ?>.
</div>
- <br>
<?php endif; ?> \ No newline at end of file
diff --git a/includes/components/header.inc b/includes/components/header.inc
index 5179d54..0fa60ae 100644
--- a/includes/components/header.inc
+++ b/includes/components/header.inc
@@ -1,6 +1,12 @@
<?php global $title; global $pages; global $readOnly;
$start = microtime(true);
$useNewUI = !isset($_GET['old']);
+$use2023UI = isset($_COOKIE["new2023UI"]) && !isset($_GET["no2023"]);
+global $use2023UI;
+
+if (!isset($_COOKIE["new2023UIctaFirstVisit"])) {
+ setcookie("new2023UIctaFirstVisit", time(), time() + 86400*365, "/", "", true, true);
+}
$isNormallyLoggedIn = false;
@@ -53,25 +59,28 @@ require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/util/functions.inc";
<!doctype html>
<html lang="en">
<head>
- <link href="/assets/logo/custom.css" rel="preload" as="style">
- <link href="/assets/logo/light.css" rel="preload" as="style">
- <link href="/assets/logo/custom.css" rel="stylesheet">
+ <script>
+ document.cookie = "new2023UIDarkMode=" + (window.matchMedia("(prefers-color-scheme: dark)").matches ? "yes" : "no") + "; max-age=" + (60*60*24*365) + "; path=/; samesite; secure";
+ </script>
+ <link href="/assets/logo/custom<?= $use2023UI ? "-2023" : "" ?>.css" rel="preload" as="style">
+ <link href="/assets/logo/light<?= $use2023UI ? "-2023" : "" ?>.css" rel="preload" as="style">
+ <link href="/assets/logo/custom<?= $use2023UI ? "-2023" : "" ?>.css" rel="stylesheet">
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
- <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet">
- <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script>
+ <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet">
+ <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js"></script>
<title><?= $title && $title !== "-" ? $title . " · " : "" ?>Cold Haze</title>
<link rel="shortcut icon" href="/assets/logo/newlogo<?= $isLoggedIn || $isLowerLoggedIn ? "3" : "" ?>.png" type="image/png">
- <link href="/assets/logo/light.css" rel="stylesheet">
+ <link href="/assets/logo/light<?= $use2023UI ? "-2023" : "" ?>.css" rel="stylesheet">
</head>
-<body style="background-color: #000;">
+<body<?php if (!$use2023UI): ?> style="background-color: #000;"<?php else: ?> style="background-color: var(--palette-1);"<?php endif; ?>>
<?php require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/components/navigation.inc"; global $navigation; ?>
<?php if (!$useNewUI): ?>
<div style="margin-top: 60px;" id="top-of-page"></div>
<?php endif; ?>
- <?php if ($useNewUI): ?>
+ <?php if ($useNewUI && !$use2023UI): ?>
<aside id="navigation-pane">
<?php require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/components/pane.inc"; ?>
</aside>
@@ -230,6 +239,367 @@ require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/util/functions.inc";
</style>
<?php endif; ?>
+ <?php if ($use2023UI) {
+ $palettes = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/themes.json"), true);
+
+ $selectedPalette = $palettes["default"];
+
+ global $memberID; if (isset($memberID)) {
+ $member = getMemberWithoutSystem($memberID);
+
+ if (isset($_GET["debug"])) {
+ ob_clean();
+ echo("<pre>");
+
+ echo("Color difference debug\n======================\n\n");
+ echo("Member color: #" . $member["color"] . "\n\n");
+ }
+
+ $sr = hexdec(substr($member["color"], 0, 2));
+ $sg = hexdec(substr($member["color"], 2, 2));
+ $sb = hexdec(substr($member["color"], 4, 2));
+
+ $differencesAll = [];
+
+ foreach ($palettes["list"] as $id => $palette) {
+ $colors = [
+ ...explode(",", $palette["dark"]),
+ ...explode(",", $palette["light"])
+ ];
+
+ $importantColors = [
+ $colors[5],
+ $colors[9],
+ $colors[15],
+ $colors[19]
+ ];
+ $differences = [];
+
+ if (isset($_GET["debug"])) echo("Palette " . $id . ": " . implode(", ", array_map(function ($i) { return "#$i"; }, $importantColors)) . "\n");
+
+ foreach ($importantColors as $color) {
+ $r = hexdec(substr($color, 0, 2));
+ $g = hexdec(substr($color, 2, 2));
+ $b = hexdec(substr($color, 4, 2));
+
+ $dr = abs($r - $sr);
+ $dg = abs($g - $sg);
+ $db = abs($b - $sb);
+
+ $differences[] = $dr + $dg + $db;
+ }
+
+ $total = array_reduce($differences, function ($a, $b) { return $a + $b; }) / count($differences);
+
+ if (isset($_GET["debug"])) {
+ echo(" " . implode(", ", $differences) . "\n");
+ echo(" " . $total . "\n\n");
+ }
+
+ $differencesAll[] = [
+ "id" => $id,
+ "difference" => $total
+ ];
+ }
+
+ usort($differencesAll, function ($a, $b) {
+ return $a["difference"] - $b["difference"];
+ });
+
+ if (isset($_GET["debug"])) {
+ echo("Smaller: " . $differencesAll[0]["id"] . ", " . $differencesAll[0]["difference"]);
+ }
+
+ $selectedPalette = $differencesAll[0]["id"];
+
+ if (isset($_GET["debug"])) {
+ echo("</pre>");
+ die();
+ }
+ }
+
+ global $userPalette;
+ $userPalette = $palettes["list"][$selectedPalette];
+
+ function rgb($color) {
+ return hexdec(substr($color, 0, 2)) . "," . hexdec(substr($color, 2, 2)) . "," . hexdec(substr($color, 4, 2));
+ }
+
+ function icon($name, $dark = null, $body = false) {
+ global $userPalette;
+
+ if (isset($dark)) {
+ return "/assets/icons/new/" . $name . ".svg?color=" . explode(",", $userPalette[$dark ? "dark" : "light"])[$body ? 6 : 9];
+ } else {
+ return "/assets/icons/new/" . $name . ".svg?color=" . explode(",", $userPalette[isset($_COOKIE["new2023UIDarkMode"]) && $_COOKIE["new2023UIDarkMode"] === "yes" ? "dark" : "light"])[$body ? 6 : 9];
+ }
+ }
+
+ foreach ([ "dark", "light" ] as $theme) { $palette = explode(",", $userPalette[$theme]); ?>
+ <style>
+ @media (prefers-color-scheme: <?= $theme ?>)<?= $theme === "light" ? ", (prefers-color-scheme: no-preference)" : "" ?> {
+ :root {
+ --bs-body-color: #<?= $palette[6] ?> !important;
+ --bs-body-color-rgb: <?= rgb($palette[6]) ?> !important;
+ --bs-body-bg: #<?= $palette[0] ?> !important;
+ --bs-body-bg-rgb: <?= rgb($palette[0]) ?> !important;
+ --bs-white: #<?= $palette[0] ?> !important;
+ --bs-white-rgb: <?= rgb($palette[0]) ?> !important;
+
+ --bs-secondary-color: #<?= $palette[6] ?> !important;
+ --bs-secondary-color-rgb: <?= rgb($palette[6]) ?> !important;
+ --bs-secondary-bg: #<?= $palette[1] ?> !important;
+ --bs-secondary: #<?= $palette[6] ?> !important;
+ --bs-secondary-bg-rgb: <?= rgb($palette[1]) ?> !important;
+
+ --bs-tertiary-color: #<?= $palette[6] ?> !important;
+ --bs-tertiary-color-rgb: <?= rgb($palette[6]) ?> !important;
+ --bs-tertiary-bg: #<?= $palette[2] ?> !important;
+ --bs-tertiary-bg-rgb: <?= rgb($palette[2]) ?> !important;
+
+ --bs-light: #<?= $palette[2] ?> !important;
+ --bs-light-rgb: <?= rgb($palette[2]) ?> !important;
+
+ --bs-link-color: #<?= $palette[9] ?> !important;
+ --bs-link-hover-color: #<?= $palette[9] ?>77 !important;
+ --bs-link-active-color: #<?= $palette[9] ?>77 !important;
+
+ --palette-0: #<?= $palette[0] ?> !important;
+ --palette-1: #<?= $palette[1] ?> !important;
+ --palette-2: #<?= $palette[2] ?> !important;
+ --palette-3: #<?= $palette[3] ?> !important;
+ --palette-4: #<?= $palette[4] ?> !important;
+ --palette-5: #<?= $palette[5] ?> !important;
+ --palette-6: #<?= $palette[6] ?> !important;
+ --palette-7: #<?= $palette[7] ?> !important;
+ --palette-8: #<?= $palette[8] ?> !important;
+ --palette-9: #<?= $palette[9] ?> !important;
+
+ --palette-0-rgb: <?= rgb($palette[0]) ?> !important;
+ --palette-1-rgb: <?= rgb($palette[1]) ?> !important;
+ --palette-2-rgb: <?= rgb($palette[2]) ?> !important;
+ --palette-3-rgb: <?= rgb($palette[3]) ?> !important;
+ --palette-4-rgb: <?= rgb($palette[4]) ?> !important;
+ --palette-5-rgb: <?= rgb($palette[5]) ?> !important;
+ --palette-6-rgb: <?= rgb($palette[6]) ?> !important;
+ --palette-7-rgb: <?= rgb($palette[7]) ?> !important;
+ --palette-8-rgb: <?= rgb($palette[8]) ?> !important;
+ --palette-9-rgb: <?= rgb($palette[9]) ?> !important;
+ }
+
+ .dropdown-menu {
+ --bs-dropdown-bg: #<?= $palette[1] ?> !important;
+ --bs-dropdown-link-color: #<?= $palette[6] ?> !important;
+ --bs-dropdown-link-disabled-color: #<?= $palette[6] ?>77 !important;
+ --bs-dropdown-link-hover-color: #<?= $palette[6] ?> !important;
+ --bs-dropdown-link-hover-bg: #<?= $palette[3] ?> !important;
+ --bs-dropdown-link-active-bg: #<?= $palette[6] ?> !important;
+ --bs-dropdown-link-active-color: #<?= $palette[6] ?> !important;
+ }
+
+ .coins {
+ color: #<?= $palette[6] ?> !important;
+ background-color: #<?= $palette[1] ?> !important;
+ }
+
+ .list-group-item-primary {
+ color: var(--bs-body-bg);
+ background-color: #<?= $palette[6] ?>;
+ }
+
+ .list-group-item-action.list-group-item-primary:hover, .list-group-item-action.list-group-item-primary:active, .list-group-item-action.list-group-item-primary:focus {
+ background-color: #<?= $palette[6] ?>dd;
+ color: var(--bs-body-bg);
+ }
+
+ .profile-border-inner-active {
+ background-color: var(--bs-tertiary-bg) !important;
+ }
+
+ .bg-secondary {
+ background-color: #<?= $palette[9] ?> !important;
+ color: #<?= $palette[0] ?> !important;
+ }
+
+ .list-group-item-primary small {
+ color: #<?= $palette[0] ?>77 !important;
+ }
+
+ .dropdown-item:active span, .dropdown-item:active img {
+ filter: invert(1);
+ }
+
+ .list-group, .list-group-item, .list-group-item-action {
+ --bs-list-group-color: var(--bs-body-color) !important;
+ --bs-list-group-action-color: var(--bs-body-color) !important;
+ --bs-list-group-action-hover-color: var(--bs-body-color) !important;
+ --bs-list-group-action-active-color: var(--bs-body-color) !important;
+ --bs-list-group-border-color: #<?= $palette[5] ?> !important;
+ --bs-list-group-bg: #<?= $palette[2] ?> !important;
+ --bs-list-group-action-hover-bg: #<?= $palette[1] ?> !important;
+ --bs-list-group-action-active-bg: #<?= $palette[1] ?> !important;
+ }
+
+ .btn-outline-dark, .btn-outline-secondary {
+ --bs-btn-color: var(--bs-body-color);
+ --bs-btn-border-color: var(--bs-body-color);
+ --bs-btn-hover-color: var(--bs-body-bg);
+ --bs-btn-hover-bg: var(--bs-body-color);
+ --bs-btn-hover-border-color: var(--bs-body-color);
+ --bs-btn-focus-shadow-rgb: <?= rgb($palette[6]) ?>;
+ --bs-btn-active-color: var(--bs-body-bg);
+ --bs-btn-active-bg: var(--bs-body-color);
+ --bs-btn-active-border-color: var(--bs-body-color);
+ --bs-btn-active-shadow: inset 0 3px 5px rgba(<?= rgb($palette[6]) ?>, 0.125);
+ --bs-btn-disabled-color: #<?= $palette[6] ?>77;
+ --bs-btn-disabled-bg: transparent;
+ --bs-btn-disabled-border-color: #<?= $palette[6] ?>77;
+ --bs-gradient: none;
+ }
+
+ .alert-primary {
+ --bs-alert-color: var(--bs-body-bg);
+ --bs-alert-bg: var(--bs-body-color);
+ --bs-alert-border-color: var(--bs-body-color);
+ }
+
+ .alert-danger, .alert-success, .alert-warning, .list-group-item-warning {
+ --bs-alert-color: var(--bs-body-bg) !important;
+ --bs-alert-bg: #<?= $palette[9] ?> !important;
+ --bs-alert-border-color: #<?= $palette[9] ?> !important;
+ --bs-list-group-border-color: #<?= $palette[8] ?> !important;
+ }
+
+ .list-group-item-warning, .list-group-item-success, .list-group-item-danger, .list-group-item-warning:hover, .list-group-item-success:hover, .list-group-item-danger:hover, .list-group-item-warning:active, .list-group-item-success:active, .list-group-item-danger:active {
+ color: var(--bs-body-color) !important;
+ background-color: #<?= $palette[8] ?> !important;
+ }
+
+ .list-group-item-warning:hover, .list-group-item-success:hover, .list-group-item-danger:hover {
+ opacity: .75;
+ }
+
+ .list-group-item-warning:active, .list-group-item-success:active, .list-group-item-danger:active {
+ opacity: .5;
+ }
+
+ .list-group-item[open] {
+ opacity: 1 !important;
+ }
+
+ .alert-secondary {
+ --bs-alert-color: var(--bs-secondary-color);
+ --bs-alert-bg: var(--bs-secondary-bg);
+ --bs-alert-border-color: var(--bs-secondary-bg);
+ }
+
+ .badge.bg-success, .badge.bg-danger, .badge.bg-warning {
+ background-color: var(--bs-body-color) !important;
+ color: var(--bs-body-bg) !important;
+ }
+
+ .badge.bg-secondary, .badge.bg-black {
+ background-color: var(--bs-body-bg) !important;
+ color: var(--bs-body-color) !important;
+ }
+
+ .text-muted {
+ color: #<?= $palette[6] ?>77 !important;
+ }
+
+ body.bg-light {
+ background-color: var(--bs-body-bg) !important;
+ }
+
+ .btn-primary {
+ --bs-btn-color: #<?= $palette[8] ?>;
+ --bs-btn-bg: #<?= $palette[9] ?>;
+ --bs-btn-border-color: #<?= $palette[9] ?>;
+ --bs-btn-hover-color: #<?= $palette[8] ?>;
+ --bs-btn-hover-bg: #<?= $palette[9] ?>;
+ --bs-btn-hover-border-color: #<?= $palette[9] ?>;
+ --bs-btn-focus-shadow-rgb: <?= rgb($palette[9]) ?>;
+ --bs-btn-active-color: #<?= $palette[8] ?>;
+ --bs-btn-active-bg: #<?= $palette[9] ?>;
+ --bs-btn-active-border-color: #<?= $palette[9] ?>;
+ --bs-btn-active-shadow: inset 0 3px 5px rgba(<?= rgb($palette[9]) ?>, 0.25);
+ --bs-btn-disabled-color: #<?= $palette[8] ?>;
+ --bs-btn-disabled-bg: #<?= $palette[9] ?>77;
+ --bs-btn-disabled-border-color: #<?= $palette[9] ?>77;
+ }
+
+ .btn-outline-primary {
+ --bs-btn-color: #<?= $palette[9] ?>;
+ --bs-btn-border-color: #<?= $palette[9] ?>;
+ --bs-btn-hover-color: var(--bs-body-bg);
+ --bs-btn-hover-bg: #<?= $palette[9] ?>;
+ --bs-btn-hover-border-color: #<?= $palette[9] ?>;
+ --bs-btn-focus-shadow-rgb: <?= rgb($palette[6]) ?>;
+ --bs-btn-active-color: var(--bs-body-bg);
+ --bs-btn-active-bg: #<?= $palette[9] ?>;
+ --bs-btn-active-border-color: #<?= $palette[9] ?>;
+ --bs-btn-active-shadow: inset 0 3px 5px rgba(<?= rgb($palette[6]) ?>, 0.125);
+ --bs-btn-disabled-color: #<?= $palette[6] ?>77;
+ --bs-btn-disabled-bg: transparent;
+ --bs-btn-disabled-border-color: #<?= $palette[6] ?>77;
+ --bs-gradient: none;
+ }
+
+ .form-control, .form-control:focus, .form-select, .form-select:focus {
+ color: var(--bs-body-color);
+ background-color: #<?= $palette[2] ?>;
+ border-color: #<?= $palette[3] ?>;
+ }
+
+ .form-control:focus, .form-select:focus {
+ box-shadow: 0 0 0 0.25rem rgba(<?= rgb($palette[9]) ?>, .25);
+ }
+
+ .form-control::placeholder, .form-select::placeholder {
+ color: #<?= $palette[6] ?>77;
+ }
+
+ .modal {
+ --bs-modal-bg: #<?= $palette[1] ?> !important;
+ --bs-modal-header-border-color: #<?= $palette[3] ?> !important;
+ }
+
+ .card {
+ --bs-card-bg: #<?= $palette[1] ?> !important;
+ }
+
+ .btn-close {
+ background: transparent url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23<?= $palette[6] ?>'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e") center/1em auto no-repeat
+ }
+
+ .ck-editor {
+ color: var(--bs-black);
+ }
+
+ .alert-primary a, .alert-danger a, .alert-success a, .alert-warning a {
+ color: var(--bs-body-bg);
+ }
+
+ #plus-box, #plus-box > div > div > div > span, #plus-box h2 {
+ color: var(--bs-body-color);
+ }
+
+ #plus-box {
+ background: #<?= $palette[2] ?> !important;
+ }
+
+ #plus-box > div {
+ background-image: none !important;
+ }
+ }
+ </style>
+ <?php }
+ } ?>
+
+ <?php if ($use2023UI): ?>
+ <?php require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/components/2023ui.inc"; ?>
+ <?php endif; ?>
+
<?php if (isset($_GET["mini"]) || str_contains($_SERVER["HTTP_USER_AGENT"], "+ColdHazeDesktop")) {
?>
<style>
@@ -258,5 +628,83 @@ require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/util/functions.inc";
}
</style>
<?php }
+
+if (
+ (($isLoggedIn || $isLowerLoggedIn) && !$use2023UI && isset($_COOKIE["enable2023UIcta"]) && $_COOKIE["enable2023UIcta"] === "yes") ||
+ (isset($_COOKIE["force2023UIcta"]) && $_COOKIE["force2023UIcta"] === "yes" && !$use2023UI)
+) { ?>
+ <div class="modal fade" id="new-ui-cta">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-body">
+ <img src="/assets/logo/light.svg" style="width: 100%; margin-bottom: 20px;" class="cta-light">
+ <img src="/assets/logo/dark.svg" style="width: 100%; margin-bottom: 20px;" class="cta-dark">
+ <style>
+ @media (prefers-color-scheme: light) {
+ .cta-dark {
+ display: none;
+ }
+ }
+
+ @media (prefers-color-scheme: dark) {
+ .cta-light {
+ display: none;
+ }
+
+ #new-ui-cta .modal-header {
+ border-bottom: 1px solid #353738;
+ }
+
+ #new-ui-cta .modal-content {
+ border: 1px solid rgba(255, 255, 255, .2);
+ background-color: #111;
+ }
+ }
+ </style>
+ <h3 style="text-align: center;">There is more to it</h3>
+ <p style="text-align: center;">Cold Haze is getting a new shape. Help us improve it by testing it early before it is made publicly available.</p>
+ <p style="text-align: center;">The new design is colorful, clean, modern, simple, fast, and gives you access to what you need the most.</p>
+ <div style="text-align: center;"><a class="btn btn-primary" href="/api/2023ui">Try it now</a> <a data-bs-dismiss="modal" onclick="localStorage.setItem('dismissed2023cta', '')" class="btn btn-outline-secondary">Maybe later</a></div>
+ <hr>
+ <div class="small text-muted">Some features are not available in the new design. <a href="https://bugs.equestria.dev/articles/CH-A-1/New-design-FAQ" target="_blank">Learn more.</a></div>
+ <!-- Equestria.dev makes no guarantee whatsoever that, after turning on this experimental feature, Cold Haze will continue working as intended. Access to emergency features might be unavailable while this option is turned on. Temporarily turning it off is possible using the "no2023" URL parameter. -->
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <script>
+ if (localStorage.getItem("dismissed2023cta") === null) {
+ let modal = new bootstrap.Modal(document.getElementById("new-ui-cta"));
+ modal.show();
+ }
+ </script>
+<?php }
+
+if ($use2023UI && isset($_GET["ui2023intro"])) { ?>
+ <div class="modal fade" id="new-ui-success">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-body" style="text-align: center;">
+ <img src="<?= icon("wave", false) ?>" class="light-only" style="height: 56px; margin: 10px 0;">
+ <img src="<?= icon("wave", true) ?>" class="dark-only" style="height: 56px; margin: 10px 0;">
+ <h3 style="text-align: center;">Welcome to a new experience</h3>
+ <p style="text-align: center;">The new design is now activated and you can use it now.</p>
+ <p style="text-align: center;">Please remember that it is currently experimental and you should report any issue you encounter.</p>
+ <div style="text-align: center;"><a data-bs-dismiss="modal" onclick="localStorage.setItem('dismissed2023cta', '')" class="btn btn-outline-primary">Done</a></div>
+ <hr>
+ <div class="small text-muted">Some features are not available in the new design. <a href="">Learn more.</a></div>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <script>
+ let modal = new bootstrap.Modal(document.getElementById("new-ui-success"));
+ modal.show();
+ </script>
+<?php }
+
require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/components/explicit.php";
$GLOBALS["ColdHazePerformance"]["header"] = (microtime(true) - $start) * 1000; $start = microtime(true); ?>
+<main id="app" style="background-color: var(--palette-0);"> \ No newline at end of file
diff --git a/includes/components/mobilenav.inc b/includes/components/mobilenav.inc
index 7b49434..e42e9ab 100644
--- a/includes/components/mobilenav.inc
+++ b/includes/components/mobilenav.inc
@@ -1,4 +1,4 @@
-<?php global $navigation; global $isLoggedIn; global $isLowerLoggedIn; ?>
+<?php global $use2023UI; global $navigation; global $isLoggedIn; global $isLowerLoggedIn; if (!$use2023UI): ?>
<div id="mobile-navigation">
<div id="mobile-navigation-container" class="container" style="display: grid; grid-template-columns: repeat(<?= count(array_values(array_filter($navigation, function ($item) use ($isLoggedIn) {
return !$item["admin"] || $isLoggedIn;
@@ -85,4 +85,5 @@
closeMobileNavigation();
}
}
-</script> \ No newline at end of file
+</script>
+<?php endif; ?> \ No newline at end of file
diff --git a/includes/components/navigation.inc b/includes/components/navigation.inc
index 1761937..1d24dea 100644
--- a/includes/components/navigation.inc
+++ b/includes/components/navigation.inc
@@ -1,444 +1,448 @@
<?php
+global $use2023UI;
$pages = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/pages.json"), true);
global $navigation;
global $toplevel;
global $lang; global $pages; global $app; global $isLowerLoggedIn; global $isLoggedIn;
-$cache = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/cache/navigation.json"), true);
+if (!$use2023UI) {
-if (!isset($cache["raindrops"])) $cache["raindrops"] = [];
-if (!isset($cache["cloudburst"])) $cache["cloudburst"] = [];
-if (!isset($cache["other"])) $cache["other"] = [];
+ $cache = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/cache/navigation.json"), true);
-foreach ([
- [
- "name" => "raindrops",
- "id" => "gdapd"
- ],
- [
- "name" => "cloudburst",
- "id" => "ynmuc"
- ],
- [
- "name" => "other",
- "id" => $app["other"]["id"]
- ]
-] as $cacheSystem) {
- if (!isset($cache[$cacheSystem["name"]]["public"])) {
- $isLoggedInOldState = $isLoggedIn;
- $isLowerLoggedInOldState = $isLowerLoggedIn;
+ if (!isset($cache["raindrops"])) $cache["raindrops"] = [];
+ if (!isset($cache["cloudburst"])) $cache["cloudburst"] = [];
+ if (!isset($cache["other"])) $cache["other"] = [];
- $isLoggedIn = false;
- $isLowerLoggedIn = false;
-
- $cache[$cacheSystem["name"]]["public"] = array_map(function ($member) {
- return [
- "name" => $member['display_name'] ?? $member['name'],
- "icon" => getAsset($member["system"], $member["id"], "heads"),
- "invert" => false,
- "link" => "/$member[name]",
- "stepped" => null,
- "private" => false
- ];
- }, array_filter(scoreOrder(withTravelers(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$cacheSystem[id]/members.json"), true), "$cacheSystem[id]"), "$cacheSystem[id]"), function ($member) {
- return $member['name'] !== "unknown" && $member['name'] !== "fusion" && $member['name'] !== "new";
- }));
-
- $isLoggedIn = $isLoggedInOldState;
- $isLowerLoggedIn = $isLowerLoggedInOldState;
- }
+ foreach ([
+ [
+ "name" => "raindrops",
+ "id" => "gdapd"
+ ],
+ [
+ "name" => "cloudburst",
+ "id" => "ynmuc"
+ ],
+ [
+ "name" => "other",
+ "id" => $app["other"]["id"]
+ ]
+ ] as $cacheSystem) {
+ if (!isset($cache[$cacheSystem["name"]]["public"])) {
+ $isLoggedInOldState = $isLoggedIn;
+ $isLowerLoggedInOldState = $isLowerLoggedIn;
- if (!isset($cache[$cacheSystem["name"]]["private"])) {
- $isLoggedInOldState = $isLoggedIn;
- $isLowerLoggedInOldState = $isLowerLoggedIn;
+ $isLoggedIn = false;
+ $isLowerLoggedIn = false;
- $isLoggedIn = true;
- $isLowerLoggedIn = false;
+ $cache[$cacheSystem["name"]]["public"] = array_map(function ($member) {
+ return [
+ "name" => $member['display_name'] ?? $member['name'],
+ "icon" => getAsset($member["system"], $member["id"], "heads"),
+ "invert" => false,
+ "link" => "/$member[name]",
+ "stepped" => null,
+ "private" => false
+ ];
+ }, array_filter(scoreOrder(withTravelers(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$cacheSystem[id]/members.json"), true), "$cacheSystem[id]"), "$cacheSystem[id]"), function ($member) {
+ return $member['name'] !== "unknown" && $member['name'] !== "fusion" && $member['name'] !== "new";
+ }));
- $cache[$cacheSystem["name"]]["private"] = array_map(function ($member) {
- return [
- "name" => $member['display_name'] ?? $member['name'],
- "icon" => getAsset($member["system"], $member["id"], "heads"),
- "invert" => false,
- "link" => "/$member[name]",
- "stepped" => null,
- "private" => false
- ];
- }, array_filter(scoreOrder(withTravelers(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$cacheSystem[id]/members.json"), true), "$cacheSystem[id]"), "$cacheSystem[id]"), function ($member) {
- return $member['name'] !== "unknown" && $member['name'] !== "fusion" && $member['name'] !== "new";
- }));
+ $isLoggedIn = $isLoggedInOldState;
+ $isLowerLoggedIn = $isLowerLoggedInOldState;
+ }
- $isLoggedIn = $isLoggedInOldState;
- $isLowerLoggedIn = $isLowerLoggedInOldState;
- }
-}
+ if (!isset($cache[$cacheSystem["name"]]["private"])) {
+ $isLoggedInOldState = $isLoggedIn;
+ $isLowerLoggedInOldState = $isLowerLoggedIn;
-file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/cache/navigation.json", json_encode($cache));
+ $isLoggedIn = true;
+ $isLowerLoggedIn = false;
-$navigation_admin = [
- "admin" => !$isLowerLoggedIn,
- "name" => "Private utilities",
- "icon" => "/assets/icons/admin.svg",
- "invert" => true,
- "items" => [
- "alerts" => [
- "name" => null,
- "minimal" => true,
- "items" => [
- [
- "name" => $pages["emergency"]["name"][$lang["_name"]],
- "icon" => "/assets/icons/emergency.svg",
+ $cache[$cacheSystem["name"]]["private"] = array_map(function ($member) {
+ return [
+ "name" => $member['display_name'] ?? $member['name'],
+ "icon" => getAsset($member["system"], $member["id"], "heads"),
"invert" => false,
- "link" => "/-/emergency",
- "stepped" => null,
- "private" => false
- ],
- [
- "name" => $pages["wakeup"]["name"][$lang["_name"]],
- "icon" => "/assets/icons/wakeup.svg",
- "invert" => false,
- "link" => "/-/wakeup",
- "stepped" => null,
- "private" => true
- ],
- [
- "name" => $pages["pleasure"]["name"][$lang["_name"]],
- "icon" => "/assets/icons/pleasure.svg",
- "invert" => false,
- "link" => "/-/pleasure",
+ "link" => "/$member[name]",
"stepped" => null,
"private" => false
+ ];
+ }, array_filter(scoreOrder(withTravelers(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$cacheSystem[id]/members.json"), true), "$cacheSystem[id]"), "$cacheSystem[id]"), function ($member) {
+ return $member['name'] !== "unknown" && $member['name'] !== "fusion" && $member['name'] !== "new";
+ }));
+
+ $isLoggedIn = $isLoggedInOldState;
+ $isLowerLoggedIn = $isLowerLoggedInOldState;
+ }
+ }
+
+ file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/cache/navigation.json", json_encode($cache));
+
+ $navigation_admin = [
+ "admin" => !$isLowerLoggedIn,
+ "name" => "Private utilities",
+ "icon" => "/assets/icons/admin.svg",
+ "invert" => true,
+ "items" => [
+ "alerts" => [
+ "name" => null,
+ "minimal" => true,
+ "items" => [
+ [
+ "name" => $pages["emergency"]["name"][$lang["_name"]],
+ "icon" => "/assets/icons/emergency.svg",
+ "invert" => false,
+ "link" => "/-/emergency",
+ "stepped" => null,
+ "private" => false
+ ],
+ [
+ "name" => $pages["wakeup"]["name"][$lang["_name"]],
+ "icon" => "/assets/icons/wakeup.svg",
+ "invert" => false,
+ "link" => "/-/wakeup",
+ "stepped" => null,
+ "private" => true
+ ],
+ [
+ "name" => $pages["pleasure"]["name"][$lang["_name"]],
+ "icon" => "/assets/icons/pleasure.svg",
+ "invert" => false,
+ "link" => "/-/pleasure",
+ "stepped" => null,
+ "private" => false
+ ]
]
- ]
- ],
- "apps" => [
- "name" => $lang["navigation"]["apps"],
- "minimal" => false,
- "items" => [
- time() >= 1686787200 ? null : [
- "name" => "Front planner<span class='badge bg-warning text-black rounded-pill' style='position:relative;top:-1px; margin-left: 5px;'>EOL</span>",
- "icon" => "/assets/icons/fronting.svg",
- "invert" => true,
- "link" => "/-/fronting",
- "stepped" => null,
- "private" => false
- ],
- [
- "name" => $pages["evening"]["name"][$lang["_name"]] . (time() >= 1686787200 ? "" : "<span class='badge bg-info text-black rounded-pill' style='position:relative;top:-1px; margin-left: 5px;'>Beta</span>"),
- "icon" => "/assets/icons/evening.svg",
- "invert" => true,
- "link" => "/-/evening",
- "stepped" => null,
- "private" => false
- ],
- [
- "name" => $pages["profiles"]["name"][$lang["_name"]],
- "icon" => "/assets/icons/profiles.svg",
- "invert" => true,
- "link" => "/-/profiles",
- "stepped" => null,
- "private" => false
- ],
- [
- "name" => $pages["money"]["name"][$lang["_name"]],
- "icon" => "/assets/icons/money.svg",
- "invert" => true,
- "link" => "/-/money",
- "stepped" => null,
- "private" => true
- ],
- [
- "name" => $pages["contacts"]["name"][$lang["_name"]],
- "icon" => "/assets/icons/contacts.svg",
- "invert" => true,
- "link" => "/-/contacts",
- "stepped" => null,
- "private" => true
- ],
- [
- "name" => $pages["schedules"]["name"][$lang["_name"]],
- "icon" => "/assets/icons/schedules.svg",
- "invert" => true,
- "link" => "/-/schedules",
- "stepped" => null,
- "private" => false
- ],
- [
- "name" => $pages["docs"]["name"][$lang["_name"]],
- "icon" => "/assets/icons/docs.svg",
- "invert" => true,
- "link" => "/-/docs",
- "stepped" => null,
- "private" => true
- ],
- time() >= 1688169600 ? null : [
- "name" => "Devices<span class='badge bg-warning text-black rounded-pill' style='position:relative;top:-1px; margin-left: 5px;'>EOL</span>",
- "icon" => "/assets/icons/computers.svg",
- "invert" => true,
- "link" => "/-/computers",
- "stepped" => null,
- "private" => true
- ],
- [
- "name" => $pages["travelling"]["name"][$lang["_name"]],
- "icon" => "/assets/icons/travelling.svg",
- "invert" => true,
- "link" => "/-/travelling",
- "stepped" => null,
- "private" => false
- ],
- [
- "name" => $pages["stats"]["name"][$lang["_name"]],
- "icon" => "/assets/icons/stats.svg",
- "invert" => true,
- "link" => "/-/stats",
- "stepped" => null,
- "private" => true
- ],
- [
- "name" => $pages["pair"]["name"][$lang["_name"]],
- "icon" => "/assets/icons/pair.svg",
- "invert" => true,
- "link" => "/-/pair",
- "stepped" => null,
- "private" => true
- ],
- [
- "name" => $pages["sessions"]["name"][$lang["_name"]],
- "icon" => "/assets/icons/sessions.svg",
- "invert" => true,
- "link" => "/-/sessions",
- "stepped" => null,
- "private" => true
- ],
- [
- "name" => $pages["logout"]["name"][$lang["_name"]],
- "icon" => "/assets/icons/logout.svg",
- "invert" => true,
- "link" => "/-/logout",
- "stepped" => null,
- "private" => false
+ ],
+ "apps" => [
+ "name" => $lang["navigation"]["apps"],
+ "minimal" => false,
+ "items" => [
+ time() >= 1686787200 ? null : [
+ "name" => "Front planner<span class='badge bg-warning text-black rounded-pill' style='position:relative;top:-1px; margin-left: 5px;'>EOL</span>",
+ "icon" => "/assets/icons/fronting.svg",
+ "invert" => true,
+ "link" => "/-/fronting",
+ "stepped" => null,
+ "private" => false
+ ],
+ [
+ "name" => $pages["evening"]["name"][$lang["_name"]] . (time() >= 1686787200 ? "" : "<span class='badge bg-info text-black rounded-pill' style='position:relative;top:-1px; margin-left: 5px;'>Beta</span>"),
+ "icon" => "/assets/icons/evening.svg",
+ "invert" => true,
+ "link" => "/-/evening",
+ "stepped" => null,
+ "private" => false
+ ],
+ [
+ "name" => $pages["profiles"]["name"][$lang["_name"]],
+ "icon" => "/assets/icons/profiles.svg",
+ "invert" => true,
+ "link" => "/-/profiles",
+ "stepped" => null,
+ "private" => false
+ ],
+ [
+ "name" => $pages["money"]["name"][$lang["_name"]],
+ "icon" => "/assets/icons/money.svg",
+ "invert" => true,
+ "link" => "/-/money",
+ "stepped" => null,
+ "private" => true
+ ],
+ [
+ "name" => $pages["contacts"]["name"][$lang["_name"]],
+ "icon" => "/assets/icons/contacts.svg",
+ "invert" => true,
+ "link" => "/-/contacts",
+ "stepped" => null,
+ "private" => true
+ ],
+ [
+ "name" => $pages["schedules"]["name"][$lang["_name"]],
+ "icon" => "/assets/icons/schedules.svg",
+ "invert" => true,
+ "link" => "/-/schedules",
+ "stepped" => null,
+ "private" => false
+ ],
+ [
+ "name" => $pages["docs"]["name"][$lang["_name"]],
+ "icon" => "/assets/icons/docs.svg",
+ "invert" => true,
+ "link" => "/-/docs",
+ "stepped" => null,
+ "private" => true
+ ],
+ time() >= 1688169600 ? null : [
+ "name" => "Devices<span class='badge bg-warning text-black rounded-pill' style='position:relative;top:-1px; margin-left: 5px;'>EOL</span>",
+ "icon" => "/assets/icons/computers.svg",
+ "invert" => true,
+ "link" => "/-/computers",
+ "stepped" => null,
+ "private" => true
+ ],
+ [
+ "name" => $pages["travelling"]["name"][$lang["_name"]],
+ "icon" => "/assets/icons/travelling.svg",
+ "invert" => true,
+ "link" => "/-/travelling",
+ "stepped" => null,
+ "private" => false
+ ],
+ [
+ "name" => $pages["stats"]["name"][$lang["_name"]],
+ "icon" => "/assets/icons/stats.svg",
+ "invert" => true,
+ "link" => "/-/stats",
+ "stepped" => null,
+ "private" => true
+ ],
+ [
+ "name" => $pages["pair"]["name"][$lang["_name"]],
+ "icon" => "/assets/icons/pair.svg",
+ "invert" => true,
+ "link" => "/-/pair",
+ "stepped" => null,
+ "private" => true
+ ],
+ [
+ "name" => $pages["sessions"]["name"][$lang["_name"]],
+ "icon" => "/assets/icons/sessions.svg",
+ "invert" => true,
+ "link" => "/-/sessions",
+ "stepped" => null,
+ "private" => true
+ ],
+ [
+ "name" => $pages["logout"]["name"][$lang["_name"]],
+ "icon" => "/assets/icons/logout.svg",
+ "invert" => true,
+ "link" => "/-/logout",
+ "stepped" => null,
+ "private" => false
+ ]
+ ]
+ ],
+ "sort" => [
+ "name" => "Sorted members lists",
+ "minimal" => false,
+ "items" => [
+ [
+ "name" => $pages["splitting"]["name"][$lang["_name"]],
+ "icon" => "/assets/icons/splitting.svg",
+ "invert" => true,
+ "link" => "/-/splitting",
+ "stepped" => null,
+ "private" => false
+ ],
+ [
+ "name" => $pages["byfront"]["name"][$lang["_name"]],
+ "icon" => "/assets/icons/byfront.svg",
+ "invert" => true,
+ "link" => "/-/byfront",
+ "stepped" => null,
+ "private" => false
+ ],
+ [
+ "name" => $pages["alphabet"]["name"][$lang["_name"]],
+ "icon" => "/assets/icons/alphabet.svg",
+ "invert" => true,
+ "link" => "/-/alphabet",
+ "stepped" => null,
+ "private" => false
+ ],
+ [
+ "name" => $pages["s:species"]["name"][$lang["_name"]],
+ "icon" => "/assets/icons/species.svg",
+ "invert" => true,
+ "link" => "/-/byspecies",
+ "stepped" => null,
+ "private" => false
+ ],
]
- ]
- ],
- "sort" => [
- "name" => "Sorted members lists",
- "minimal" => false,
- "items" => [
- [
- "name" => $pages["splitting"]["name"][$lang["_name"]],
- "icon" => "/assets/icons/splitting.svg",
- "invert" => true,
- "link" => "/-/splitting",
- "stepped" => null,
- "private" => false
- ],
- [
- "name" => $pages["byfront"]["name"][$lang["_name"]],
- "icon" => "/assets/icons/byfront.svg",
- "invert" => true,
- "link" => "/-/byfront",
- "stepped" => null,
- "private" => false
- ],
- [
- "name" => $pages["alphabet"]["name"][$lang["_name"]],
- "icon" => "/assets/icons/alphabet.svg",
- "invert" => true,
- "link" => "/-/alphabet",
- "stepped" => null,
- "private" => false
- ],
- [
- "name" => $pages["s:species"]["name"][$lang["_name"]],
- "icon" => "/assets/icons/species.svg",
- "invert" => true,
- "link" => "/-/byspecies",
- "stepped" => null,
- "private" => false
- ],
]
]
- ]
-];
-$navigation_global = [
- "admin" => false,
- "name" => $lang["navigation"]["general"],
- "icon" => "/assets/icons/global.svg",
- "invert" => true,
- "items" => [
- "main" => [
- "name" => null,
- "minimal" => false,
- "items" => [
- [
- "name" => $pages["home"]["name"][$lang["_name"]],
- "icon" => "/assets/icons/home.svg",
- "invert" => true,
- "link" => "/",
- "stepped" => null,
- "private" => false
- ],
- [
- "name" => $pages["relations"]["name"][$lang["_name"]],
- "icon" => "/assets/icons/relations.svg",
- "invert" => true,
- "link" => "/-/relations",
- "stepped" => null,
- "private" => false
- ],
- [
- "name" => $pages["terminology"]["name"][$lang["_name"]],
- "icon" => "/assets/icons/terminology.svg",
- "invert" => true,
- "link" => "/-/terminology",
- "stepped" => null,
- "private" => false
+ ];
+ $navigation_global = [
+ "admin" => false,
+ "name" => $lang["navigation"]["general"],
+ "icon" => "/assets/icons/global.svg",
+ "invert" => true,
+ "items" => [
+ "main" => [
+ "name" => null,
+ "minimal" => false,
+ "items" => [
+ [
+ "name" => $pages["home"]["name"][$lang["_name"]],
+ "icon" => "/assets/icons/home.svg",
+ "invert" => true,
+ "link" => "/",
+ "stepped" => null,
+ "private" => false
+ ],
+ [
+ "name" => $pages["relations"]["name"][$lang["_name"]],
+ "icon" => "/assets/icons/relations.svg",
+ "invert" => true,
+ "link" => "/-/relations",
+ "stepped" => null,
+ "private" => false
+ ],
+ [
+ "name" => $pages["terminology"]["name"][$lang["_name"]],
+ "icon" => "/assets/icons/terminology.svg",
+ "invert" => true,
+ "link" => "/-/terminology",
+ "stepped" => null,
+ "private" => false
+ ]
]
]
]
- ]
-];
-$navigation_cloudburst = [
- "admin" => false,
- "name" => "Cloudburst System",
- "icon" => getAsset("ynmuc"),
- "invert" => false,
- "items" => [
- "header" => [
- "name" => null,
- "minimal" => false,
- "items" => [
- [
- "name" => $lang["navigation"]["about"],
- "icon" => "/assets/icons/about.svg",
- "invert" => true,
- "link" => "/cloudburst",
- "stepped" => null,
- "private" => false
- ],
- [
- "name" => $pages["s:history"]["name"][$lang["_name"]],
- "icon" => "/assets/icons/history.svg",
- "invert" => true,
- "link" => "/cloudburst/-/history",
- "stepped" => null,
- "private" => false
+ ];
+ $navigation_cloudburst = [
+ "admin" => false,
+ "name" => "Cloudburst System",
+ "icon" => getAsset("ynmuc"),
+ "invert" => false,
+ "items" => [
+ "header" => [
+ "name" => null,
+ "minimal" => false,
+ "items" => [
+ [
+ "name" => $lang["navigation"]["about"],
+ "icon" => "/assets/icons/about.svg",
+ "invert" => true,
+ "link" => "/cloudburst",
+ "stepped" => null,
+ "private" => false
+ ],
+ [
+ "name" => $pages["s:history"]["name"][$lang["_name"]],
+ "icon" => "/assets/icons/history.svg",
+ "invert" => true,
+ "link" => "/cloudburst/-/history",
+ "stepped" => null,
+ "private" => false
+ ]
]
+ ],
+ "members" => [
+ "name" => $lang["navigation"]["members"],
+ "minimal" => false,
+ "items" => $cache["cloudburst"][$isLoggedIn || $isLowerLoggedIn ? "private" : "public"]
]
- ],
- "members" => [
- "name" => $lang["navigation"]["members"],
- "minimal" => false,
- "items" => $cache["cloudburst"][$isLoggedIn || $isLowerLoggedIn ? "private" : "public"]
]
- ]
-];
-$navigation_other = [
- "admin" => !$isLowerLoggedIn,
- "name" => $app["other"]["name"],
- "icon" => getAsset($app["other"]["id"]),
- "invert" => false,
- "items" => [
- "header" => [
- "name" => null,
- "minimal" => false,
- "items" => [
- [
- "name" => $lang["navigation"]["about"],
- "icon" => "/assets/icons/about.svg",
- "invert" => true,
- "link" => "/" . $app["other"]["slug"],
- "stepped" => null,
- "private" => false
- ],
- [
- "name" => $pages["s:history"]["name"][$lang["_name"]],
- "icon" => "/assets/icons/history.svg",
- "invert" => true,
- "link" => "/" . $app["other"]["slug"] . "/-/history",
- "stepped" => null,
- "private" => false
+ ];
+ $navigation_other = [
+ "admin" => !$isLowerLoggedIn,
+ "name" => $app["other"]["name"],
+ "icon" => getAsset($app["other"]["id"]),
+ "invert" => false,
+ "items" => [
+ "header" => [
+ "name" => null,
+ "minimal" => false,
+ "items" => [
+ [
+ "name" => $lang["navigation"]["about"],
+ "icon" => "/assets/icons/about.svg",
+ "invert" => true,
+ "link" => "/" . $app["other"]["slug"],
+ "stepped" => null,
+ "private" => false
+ ],
+ [
+ "name" => $pages["s:history"]["name"][$lang["_name"]],
+ "icon" => "/assets/icons/history.svg",
+ "invert" => true,
+ "link" => "/" . $app["other"]["slug"] . "/-/history",
+ "stepped" => null,
+ "private" => false
+ ]
]
+ ],
+ "members" => [
+ "name" => $lang["navigation"]["members"],
+ "minimal" => false,
+ "items" => $cache["other"][$isLoggedIn || $isLowerLoggedIn ? "private" : "public"]
]
- ],
- "members" => [
- "name" => $lang["navigation"]["members"],
- "minimal" => false,
- "items" => $cache["other"][$isLoggedIn || $isLowerLoggedIn ? "private" : "public"]
]
- ]
-];
-$navigation_raindrops = [
- "admin" => false,
- "name" => "Raindrops System",
- "icon" => getAsset("gdapd"),
- "invert" => false,
- "items" => [
- "header" => [
- "name" => null,
- "minimal" => false,
- "items" => [
- [
- "name" => $lang["navigation"]["about"],
- "icon" => "/assets/icons/about.svg",
- "invert" => true,
- "link" => "/raindrops",
- "stepped" => null,
- "private" => false
- ],
- [
- "name" => $pages["s:history"]["name"][$lang["_name"]],
- "icon" => "/assets/icons/history.svg",
- "invert" => true,
- "link" => "/raindrops/-/history",
- "stepped" => null,
- "private" => false
+ ];
+ $navigation_raindrops = [
+ "admin" => false,
+ "name" => "Raindrops System",
+ "icon" => getAsset("gdapd"),
+ "invert" => false,
+ "items" => [
+ "header" => [
+ "name" => null,
+ "minimal" => false,
+ "items" => [
+ [
+ "name" => $lang["navigation"]["about"],
+ "icon" => "/assets/icons/about.svg",
+ "invert" => true,
+ "link" => "/raindrops",
+ "stepped" => null,
+ "private" => false
+ ],
+ [
+ "name" => $pages["s:history"]["name"][$lang["_name"]],
+ "icon" => "/assets/icons/history.svg",
+ "invert" => true,
+ "link" => "/raindrops/-/history",
+ "stepped" => null,
+ "private" => false
+ ]
]
+ ],
+ "members" => [
+ "name" => $lang["navigation"]["members"],
+ "minimal" => false,
+ "items" => $cache["raindrops"][$isLoggedIn || $isLowerLoggedIn ? "private" : "public"]
]
- ],
- "members" => [
- "name" => $lang["navigation"]["members"],
- "minimal" => false,
- "items" => $cache["raindrops"][$isLoggedIn || $isLowerLoggedIn ? "private" : "public"]
]
- ]
-];
+ ];
-global $parts;
+ global $parts;
-if (isset($parts) && isset($parts[0]) && $parts[0] === $app["other"]["slug"]) {
- $navigation = [
- "other" => $navigation_other,
- "cloudburst" => $navigation_cloudburst,
- "raindrops" => $navigation_raindrops,
- "admin" => $navigation_admin,
- "global" => $navigation_global
- ];
-} elseif (isset($parts) && isset($parts[0]) && $parts[0] === "cloudburst") {
- $navigation = [
- "cloudburst" => $navigation_cloudburst,
- "raindrops" => $navigation_raindrops,
- "other" => $navigation_other,
- "admin" => $navigation_admin,
- "global" => $navigation_global
- ];
-} elseif (isset($parts) && isset($parts[0]) && $parts[0] === "raindrops") {
- $navigation = [
- "raindrops" => $navigation_raindrops,
- "cloudburst" => $navigation_cloudburst,
- "other" => $navigation_other,
- "admin" => $navigation_admin,
- "global" => $navigation_global
- ];
-} else {
- $navigation = [
- "admin" => $navigation_admin,
- "global" => $navigation_global,
- "cloudburst" => $navigation_cloudburst,
- "raindrops" => $navigation_raindrops,
- "other" => $navigation_other,
- ];
+ if (isset($parts) && isset($parts[0]) && $parts[0] === $app["other"]["slug"]) {
+ $navigation = [
+ "other" => $navigation_other,
+ "cloudburst" => $navigation_cloudburst,
+ "raindrops" => $navigation_raindrops,
+ "admin" => $navigation_admin,
+ "global" => $navigation_global
+ ];
+ } elseif (isset($parts) && isset($parts[0]) && $parts[0] === "cloudburst") {
+ $navigation = [
+ "cloudburst" => $navigation_cloudburst,
+ "raindrops" => $navigation_raindrops,
+ "other" => $navigation_other,
+ "admin" => $navigation_admin,
+ "global" => $navigation_global
+ ];
+ } elseif (isset($parts) && isset($parts[0]) && $parts[0] === "raindrops") {
+ $navigation = [
+ "raindrops" => $navigation_raindrops,
+ "cloudburst" => $navigation_cloudburst,
+ "other" => $navigation_other,
+ "admin" => $navigation_admin,
+ "global" => $navigation_global
+ ];
+ } else {
+ $navigation = [
+ "admin" => $navigation_admin,
+ "global" => $navigation_global,
+ "cloudburst" => $navigation_cloudburst,
+ "raindrops" => $navigation_raindrops,
+ "other" => $navigation_other,
+ ];
+ }
} \ No newline at end of file
diff --git a/includes/components/pane.inc b/includes/components/pane.inc
index 1ecbcdf..a4b2d43 100644
--- a/includes/components/pane.inc
+++ b/includes/components/pane.inc
@@ -1,4 +1,4 @@
-<?php global $isLoggedIn; global $isLowerLoggedIn; global $pages; global $navigation; $byColor = getMembersByColor(); global $lang; global $pages; ?>
+<?php global $use2023UI; global $isLoggedIn; global $isLowerLoggedIn; global $pages; global $navigation; $byColor = getMembersByColor(); global $lang; global $pages; if (!$use2023UI): ?>
<div id="pane-header-background" style="background-image: linear-gradient(90deg, <?php
@@ -128,4 +128,5 @@ foreach ($list as $color) {
background-color: rgba(255, 255, 255, .1);
}
-</style> \ No newline at end of file
+</style>
+<?php endif; ?> \ No newline at end of file
diff --git a/includes/components/sysbanner.inc b/includes/components/sysbanner.inc
index 30babf0..2dd1dd4 100644
--- a/includes/components/sysbanner.inc
+++ b/includes/components/sysbanner.inc
@@ -34,14 +34,13 @@ $pages = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/pa
<?= count(scoreOrder(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$systemID/members.json"), true), $systemID)) ?> members<?php
if (count($travellers) > 0) {
- echo(" (+ " . count($travellers) . " " . (count($travellers) > 1 ? $lang["system"]["traveller"] : $lang["system"]["travellers"]) . ")");
+ echo(" (+ " . count($travellers) . " " . (count($travellers) > 1 ? $lang["system"]["travellers"] : $lang["system"]["traveller"]) . ")");
}
- ?>
- </span>
- <span>
-
- </span>
+ ?><br><?php $leaders = array_filter(scoreOrderGlobal(), function ($i) use ($systemID) {
+ return $i["_system"] === $systemID && isset($i["_metadata"]["leader2"]) && $i["_metadata"]["leader2"];
+ }); if (count($leaders) > 0): ?><span style="vertical-align: middle; height: 24px;">Leader<?= count($leaders) > 1 ? "s" : "" ?>: </span><?php foreach ($leaders as $index => $leader): ?><a href="/<?= $leader["name"] ?>" class="member-link"><img src="<?= getAsset($leader["_system"], $leader["id"], "heads") ?>"><span style="vertical-align: middle;"> <?= $leader["display_name"] ?? $leader["name"] ?></span></a><?= $index <= count($leaders) - 1 ? ", " : "" ?><?php endforeach; ?><?php endif; ?>
+ </span>
</div>
</div>
</div>
diff --git a/includes/flags.json b/includes/flags.json
index 6855dc5..a6373e6 100644
--- a/includes/flags.json
+++ b/includes/flags.json
@@ -6,7 +6,8 @@
"median": null,
"protector": "!!Protector",
- "leader": "Leader",
+ "leader": "Leader (legacy)",
+ "leader2": "Leader",
"fictive": "!!Equestrian",
"fictive2": "Fictive (Celeste)",
"sexual_features": "Enable sexual features (for ponies below 15)",
diff --git a/includes/fragments/evening.inc b/includes/fragments/evening.inc
new file mode 100644
index 0000000..851b69f
--- /dev/null
+++ b/includes/fragments/evening.inc
@@ -0,0 +1,245 @@
+<?php
+
+if (!file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/data/cache/evening.json")) file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/cache/evening.json", "{}");
+$cache = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/cache/evening.json"), true);
+
+if (!isset($cache["content"]) || date('Y-m-d') !== $cache["day"]) {
+ ob_start();
+
+ $members = $members = [
+ ...array_map(function ($i) {
+ $system = "ynmuc";
+ $i["_lastFronted"] = -1;
+ $id = $i["id"];
+ $memberData = $i;
+
+ $fronters = array_map(function ($item) {
+ return $item["id"];
+ }, json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$system/fronters.json"), true)["members"]);
+
+ if (in_array($id, $fronters)) {
+ $i["_lastFronted"] = time();
+ } else {
+ $switches = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$system/switches.json"), true);
+
+ $thisMember = array_filter($switches, function ($item) use ($memberData) {
+ return in_array($memberData["id"], $item["members"]);
+ });
+
+ $thisMember = array_values($thisMember);
+ $frontingEnd = null;
+
+ if (count($thisMember) > 0) {
+ $thisIndex = array_search($thisMember[0], $switches);
+
+ $frontingStart = $thisMember[0];
+ $frontingEnd = $switches[$thisIndex - 1];
+ }
+
+ if ($frontingEnd !== null && isset($frontingStart)) {
+ $i["_lastFronted"] = strtotime($frontingEnd["timestamp"]);
+ }
+ }
+
+ return $i;
+ }, array_values(array_filter(scoreOrderGlobal(), function ($i) {
+ return $i["_system"] === "ynmuc";
+ }))),
+ ...array_map(function ($i) {
+ $system = "gdapd";
+ $i["_lastFronted"] = -1;
+ $id = $i["id"];
+ $memberData = $i;
+
+ $fronters = array_map(function ($item) {
+ return $item["id"];
+ }, json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$system/fronters.json"), true)["members"]);
+
+ if (in_array($id, $fronters)) {
+ $i["_lastFronted"] = time();
+ } else {
+ $switches = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$system/switches.json"), true);
+
+ $thisMember = array_filter($switches, function ($item) use ($memberData) {
+ return in_array($memberData["id"], $item["members"]);
+ });
+
+ $thisMember = array_values($thisMember);
+ $frontingEnd = null;
+
+ if (count($thisMember) > 0) {
+ $thisIndex = array_search($thisMember[0], $switches);
+
+ $frontingStart = $thisMember[0];
+ $frontingEnd = $switches[$thisIndex - 1];
+ }
+
+ if ($frontingEnd !== null && isset($frontingStart)) {
+ $i["_lastFronted"] = strtotime($frontingEnd["timestamp"]);
+ }
+ }
+
+ return $i;
+ }, array_values(array_filter(scoreOrderGlobal(), function ($i) {
+ return $i["_system"] === "gdapd";
+ })))
+ ]; global $pages; global $lang; global $use2023UI; global $ignored; ?>
+
+<style>
+ @media (max-width: 767px) {
+ .member-name, .member-list-separator {
+ display: none;
+ }
+
+ .member-collection {
+ width: 100%;
+ text-align: center;
+ }
+ }
+
+ .member-link:hover {
+ opacity: .75;
+ }
+</style>
+
+<div class="container">
+ <div>
+ <?php global $use2023UI; if ($use2023UI): ?>
+ <h4>Evening schedule</h4>
+ <?php else: ?>
+ <h2>Evening schedule</h2>
+ <?php endif; ?>
+
+ <?php if (time() < 1686787200): ?>
+ <div class="alert alert-warning">
+ <b>The evening schedule will replace the fronting schedule starting June 15<sup>th</sup>.</b> The fronting schedule page contains more information and shows the schedule up to that date. The evening schedule is experimental until then.
+ </div>
+ <?php endif; ?>
+
+ <details>
+ <summary style="list-style: none; outline: none; cursor: text;">
+ <p>Click on the "Ignore" button to mark an evening as ignored and shift the schedule one day after. You can revert this by clicking on "Unignore".</p>
+ </summary>
+ <ul>
+ <?php usort($pairs, function ($a, $b) use ($members) {
+ $times = [];
+
+ foreach ($a[0] as $id) {
+ if (getLastFronted($members, $id) > 0) $times[] = getLastFronted($members, $id);
+ }
+ foreach ($a[1] as $id) {
+ if (getLastFronted($members, $id) > 0) $times[] = getLastFronted($members, $id);
+ }
+
+ $timeA = time() - min($times);
+ $times = [];
+
+ foreach ($b[0] as $id) {
+ if (getLastFronted($members, $id) > 0) $times[] = getLastFronted($members, $id);
+ }
+ foreach ($b[1] as $id) {
+ if (getLastFronted($members, $id) > 0) $times[] = getLastFronted($members, $id);
+ }
+
+ $timeB = time() - min($times);
+
+ return $timeB - $timeA;
+ }); $pairs = array_values($pairs); foreach ($pairs as $pair): $times = []; ?>
+ <li>
+ <?php foreach ($pair[0] as $id): ?>
+ <img style="width: 24px;" src="<?= getAsset("ynmuc", $id) ?>"> <?= getMemberWithoutSystem($id)["display_name"] ?>
+ <?php $times[] = getLastFronted($members, $id); endforeach; ?>
+ with
+ <?php foreach ($pair[1] as $id): ?>
+ <img style="width: 24px;" src="<?= getAsset("gdapd", $id) ?>"> <?= getMemberWithoutSystem($id)["display_name"] ?>
+ <?php $times[] = getLastFronted($members, $id); endforeach; ?>
+ (<?= time() - max($times) ?>)
+ </li>
+ <?php endforeach; ?>
+ </ul>
+ </details>
+
+ <?php $listI = 0; for ($i = 0; $i < 15; $i++): $pair = $pairs[$listI];
+ $realPair = $pair;
+
+ if (isset($locked[date('Y-m-d', time() + 86400 * $i)])) {
+ $pair = array_map(function ($i) {
+ return explode(",", $i);
+ }, explode("|", $locked[date('Y-m-d', time() + 86400 * $i)]));
+ }
+
+ if (time() + 86400 * $i >= 1686787200): ?>
+ <?php global $use2023UI; if ($use2023UI): ?>
+ <h6><?= date('l j', time() + 86400 * $i) ?></h6>
+ <?php else: ?>
+ <h4><?= date('l j', time() + 86400 * $i) ?></h4>
+ <?php endif; ?>
+ <div style="display: grid; grid-template-columns: repeat(2, 1fr) 100px 150px; grid-gap: 20px; margin-bottom: 10px;">
+ <div style="display: flex; align-items: center;<?php if (in_array(date('Y-m-d', time() + 86400 * $i), $ignored)): ?>opacity: .75; filter: saturate(0);<?php endif; ?>">
+ <div class="member-collection">
+ <?php foreach ($pair[0] as $id): ?>
+ <a class="member-link <?php if (isset($locked[date('Y-m-d', time() + 86400 * $i)])): ?>text-warning" style="font-weight: bold;<?php endif; ?>" href="/<?= getMemberWithoutSystem($id)["name"] ?>"><img style="width: 24px;" src="<?= getAsset("ynmuc", $id, "heads") ?>"> <span class="member-name" style="<?php if (in_array(date('Y-m-d', time() + 86400 * $i), $ignored)): ?>text-decoration: line-through;<?php endif; ?>"><?= getMemberWithoutSystem($id)["display_name"] ?></span></a><br class="member-list-separator">
+ <?php $times[] = getLastFronted($members, $id); endforeach; ?>
+ </div>
+ </div>
+ <div style="display: flex; align-items: center;<?php if (in_array(date('Y-m-d', time() + 86400 * $i), $ignored)): ?>opacity: .75; filter: saturate(0);<?php endif; ?>">
+ <div class="member-collection">
+ <?php foreach ($pair[1] as $id): ?>
+ <a class="member-link <?php if (isset($locked[date('Y-m-d', time() + 86400 * $i)])): ?>text-warning" style="font-weight: bold;<?php endif; ?>" href="/<?= getMemberWithoutSystem($id)["name"] ?>"><img style="width: 24px;" src="<?= getAsset("gdapd", $id, "heads") ?>"> <span class="member-name" style="<?php if (in_array(date('Y-m-d', time() + 86400 * $i), $ignored)): ?>text-decoration: line-through;<?php endif; ?>"><?= getMemberWithoutSystem($id)["display_name"] ?></span></a><br class="member-list-separator">
+ <?php $times[] = getLastFronted($members, $id); endforeach; ?>
+ </div>
+ </div>
+ <div style="display: flex; align-items: center; justify-content: center;">
+ <?php
+
+ $times = [];
+
+ foreach ($pair[0] as $id) {
+ if (getLastFronted($members, $id) > 0) $times[] = getLastFronted($members, $id);
+ }
+ foreach ($pair[1] as $id) {
+ if (getLastFronted($members, $id) > 0) $times[] = getLastFronted($members, $id);
+ }
+
+ $time = time() - min($times);
+ echo(timeAgo(time() - $time));
+
+ ?>
+ </div>
+ <div style="display: flex; align-items: center; justify-content: center;">
+ <?php if (isset($locked[date('Y-m-d', time() + 86400 * $i)])): ?>
+ <a href="?lock&day=<?= date('Y-m-d', time() + 86400 * $i) ?>&data=<?= implode(",", $pair[0]) . "|" . implode(",", $pair[1]) ?>" class="btn btn-outline-secondary">Unlock</a>
+ <?php else: ?>
+ <a href="?lock&day=<?= date('Y-m-d', time() + 86400 * $i) ?>&data=<?= implode(",", $pair[0]) . "|" . implode(",", $pair[1]) ?>" class="btn btn-outline-primary">Lock</a>
+ <?php endif; ?>&nbsp;&nbsp;
+ <?php if (in_array(date('Y-m-d', time() + 86400 * $i), $ignored)): ?>
+ <a href="?ignore=0&day=<?= date('Y-m-d', time() + 86400 * $i) ?>" class="btn btn-outline-<?= $use2023UI ? "secondary" : "success" ?>">Unignore</a>
+ <?php else: ?>
+ <a href="?ignore=1&day=<?= date('Y-m-d', time() + 86400 * $i) ?>" class="btn btn-outline-<?= $use2023UI ? "primary" : "danger" ?>">Ignore</a>
+ <?php endif; ?>
+ </div>
+ </div>
+ <?= $i < 14 ? "<hr>" : "" ?>
+ <?php endif;
+
+ if (
+ (!isset($locked[date('Y-m-d', time() + 86400 * $i)]) && !in_array(date('Y-m-d', time() + 86400 * $i), $ignored))
+ || (isset($locked[date('Y-m-d', time() + 86400 * $i)]) && $locked[date('Y-m-d', time() + 86400 * $i)] === implode(",", $realPair[0]) . "|" . implode(",", $realPair[1]))
+ ) {
+ $listI++;
+ }
+
+ if ($listI === count($pairs)) $listI = 0; endfor; ?>
+ </div>
+</div>
+<?php
+
+ $cache["content"] = ob_get_contents();
+ $cache["day"] = date('Y-m-d');
+ ob_end_clean();
+}
+
+echo($cache["content"]);
+file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/cache/evening.json", json_encode($cache));
+
+?> \ No newline at end of file
diff --git a/includes/fragments/member.inc b/includes/fragments/member.inc
index 9ebb4c2..7672529 100644
--- a/includes/fragments/member.inc
+++ b/includes/fragments/member.inc
@@ -79,8 +79,8 @@ if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/ponies/" . $memberID . ".pn
</style>
<script>
- window.onscroll = () => {
- document.getElementById("member-banner-container").style.height = (<?= !isset($memberData["banner"]) ? "33" : "65" ?> - ((window.scrollY / window.screen.availHeight) * 100)) + "vh";
+ document.getElementById("app").onscroll = () => {
+ document.getElementById("member-banner-container").style.height = (<?= !isset($memberData["banner"]) ? "33" : "65" ?> - ((document.getElementById("app").scrollTop / (window.screen.availHeight - 62)) * 100)) + "vh";
}
function showPrivate() {
diff --git a/includes/fragments/system.inc b/includes/fragments/system.inc
index ad7db76..8d31f4d 100644
--- a/includes/fragments/system.inc
+++ b/includes/fragments/system.inc
@@ -7,8 +7,8 @@
</div>
<script>
- window.onscroll = () => {
- document.getElementById("system-banner-container").style.height = (65 - ((window.scrollY / window.screen.availHeight) * 100)) + "vh";
+ document.getElementById("app").onscroll = () => {
+ document.getElementById("system-banner-container").style.height = (65 - ((document.getElementById("app").scrollTop / (window.screen.availHeight - 62)) * 100)) + "vh";
}
</script>
diff --git a/includes/pages.json b/includes/pages.json
index 9cb2bf5..fd4aae1 100644
--- a/includes/pages.json
+++ b/includes/pages.json
@@ -1,4 +1,18 @@
{
+ "account": {
+ "name": {
+ "en": "Account and security"
+ },
+ "admin": true,
+ "limited": true
+ },
+ "alerts": {
+ "name": {
+ "en": "Alerts"
+ },
+ "admin": true,
+ "limited": true
+ },
"alphabet": {
"name": {
"en": "By prefix letters"
@@ -90,6 +104,13 @@
"admin": true,
"limited": true
},
+ "lists": {
+ "name": {
+ "en": "Member lists"
+ },
+ "admin": true,
+ "limited": true
+ },
"login": {
"name": {
"en": "Login"
diff --git a/includes/themes.json b/includes/themes.json
new file mode 100644
index 0000000..b1af209
--- /dev/null
+++ b/includes/themes.json
@@ -0,0 +1,69 @@
+{
+ "default": 8,
+ "list": [
+ {
+ "light": "fefbff,f4f2f9,eeeef5,eaeaf3,e8e8f2,e4e5ef,44474f,1b1b1f,ffffff,435e91",
+ "dark": "1b1b1f,22232a,272931,2a2d36,2c2f39,2f323d,c4c6d0,e3e2e6,0f2f60,adc7ff"
+ },
+ {
+ "light": "fbfdf8,f0f5ef,e9f0e9,e4ede5,e1ebe3,dde8e0,404943,191c1a,ffffff,266a4a",
+ "dark": "191c1a,1f2521,222b26,252f29,27312b,29352e,c0c9c1,e1e3df,003822,91d5ad"
+ },
+ {
+ "light": "fffbff,f6f2f9,f1edf5,ede9f3,ebe7f2,e8e4ef,47464f,1c1b1f,ffffff,5d5791",
+ "dark": "1c1b1f,24232a,2a2831,2e2c36,302e39,33313d,c9c5d0,e5e1e6,2f295f,c7bfff"
+ },
+ {
+ "light": "fffbff,f8f2f3,f4edeb,f1e9e6,f0e7e3,ede4de,504539,1f1b16,ffffff,825514",
+ "dark": "1f1b16,2a231a,30281d,352b1f,382d20,3c3022,d4c4b5,ebe1d9,472a00,f8bb71"
+ },
+ {
+ "light": "fcfcfc,f7f2f2,f4eced,f1e8e9,f0e5e6,eee2e3,474747,1b1b1b,ffffff,9c4049",
+ "dark": "1b1b1b,262222,2d2727,332b2b,352c2d,3a2f30,c6c6c6,e2e2e2,5f121e,ffb3b6"
+ },
+ {
+ "light": "fcfcfc,f6f3ef,f2eee7,efeae1,eee8de,ece4d9,474747,1b1b1b,ffffff,885200",
+ "dark": "1b1b1b,26231e,2d2721,332b23,352d24,3a3025,c6c6c6,e2e2e2,482900,ffb869"
+ },
+ {
+ "light": "fcfcfc,f5f3ef,f0eee7,edebe1,ebe9de,e9e6d9,474747,1b1b1b,ffffff,735c00",
+ "dark": "1b1b1b,25231d,2b281e,302c1f,332e20,373221,c6c6c6,e2e2e2,3c2f00,e8c349"
+ },
+ {
+ "light": "fcfcfc,f2f4f0,ecefe9,e7ece4,e5eae1,e1e7dd,474747,1b1b1b,ffffff,3b6a1c",
+ "dark": "1b1b1b,21241f,252a22,292e25,2a3026,2d3428,c6c6c6,e2e2e2,163800,a0d57b"
+ },
+ {
+ "light": "fcfcfc,eff4f7,e7eff4,e1ebf1,deeaf0,d9e7ee,474747,1b1b1b,ffffff,00639b",
+ "dark": "1b1b1b,212326,25292d,282d33,292f35,2c333a,c6c6c6,e2e2e2,003353,97cbff"
+ },
+ {
+ "light": "fcfcfc,f4f3f7,efeef4,ebeaf2,e9e8f1,e6e4f0,474747,1b1b1b,ffffff,6152a6",
+ "dark": "1b1b1b,232326,29282d,2d2c33,2f2e35,33313a,c6c6c6,e2e2e2,322075,cabeff"
+ },
+ {
+ "light": "fcfcfc,f5f2f6,f2edf2,efe8f0,ede6ee,ebe3ec,474747,1b1b1b,ffffff,84468d",
+ "dark": "1b1b1b,262226,2d272d,322a32,342c35,392f3a,c6c6c6,e2e2e2,50145b,f7adfd"
+ },
+ {
+ "light": "fffbff,f9f1f2,f6eceb,f3e8e5,f2e5e3,f0e2de,4e472a,1f1b0d,ffffff,974811",
+ "dark": "1f1b0d,2a2213,312717,362b1a,392d1c,3d301e,d2c6a1,ebe2cb,542200,ffb68e"
+ },
+ {
+ "light": "fafeea,f3f5de,eff0d6,ececd1,ebeace,e8e7c9,414a33,191d11,ffffff,7d5700",
+ "dark": "191d11,242513,2b2a15,302d16,332f17,373218,c0caac,e0e5d1,422c00,f9bc49"
+ },
+ {
+ "light": "f9fdff,ecf5f6,e4f1f0,deedec,dbebea,d6e9e7,344a52,121d21,ffffff,006c51",
+ "dark": "121d21,162628,182c2c,1a3130,1b3332,1d3734,b3cad3,d8e4ea,003829,66dbb2"
+ },
+ {
+ "light": "fffbff,f2f3fa,eaeef7,e4eaf5,e1e8f4,dce5f2,4b4358,1e1a24,ffffff,0061a3",
+ "dark": "1e1a24,24222f,282836,2b2c3b,2d2e3d,2f3242,cdc2db,e8dfee,003258,9ecaff"
+ },
+ {
+ "light": "fffbff,f7f2fa,f2edf7,eee9f5,ece7f4,e9e3f2,58404d,24181f,ffffff,6351a5",
+ "dark": "24181f,2c202a,312531,352936,372b39,3b2e3d,debecd,f3dde6,341f74,ccbdff"
+ }
+ ]
+} \ No newline at end of file
diff --git a/includes/util/banner.inc b/includes/util/banner.inc
index dfda86d..63e30c6 100644
--- a/includes/util/banner.inc
+++ b/includes/util/banner.inc
@@ -24,6 +24,7 @@ function getMemberBannerData(string $id, string $system, bool $french = false) {
global $isLowerLoggedIn;
global $lang;
global $Parsedown;
+ global $use2023UI;
$french = $lang["_french"];
@@ -295,7 +296,7 @@ function getMemberBannerData(string $id, string $system, bool $french = false) {
$badges[] = [
"id" => "fictive",
"color" => "info",
- "html" => '<span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Equestrian</b><br>' . ucfirst(getMemberPronouns($member['pronouns'])["subjective"]) . ' ' . (getMemberPronouns($member['pronouns'])["third"] ? "is" : "are") . ' based on the personality, look and behavior of a character that is from Equestria." class="badge rounded-pill bg-info" style="height: 24px;"><img style="width: 16px;" src="/assets/logo/equestria.png"><span style="vertical-align: middle;">&nbsp;Equestrian</span></span>'
+ "html" => '<span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Equestrian</b><br>' . ucfirst(getMemberPronouns($member['pronouns'])["subjective"]) . ' ' . (getMemberPronouns($member['pronouns'])["third"] ? "is" : "are") . ' based on the personality, look and behavior of a character that is from Equestria." class="badge rounded-pill bg-' . ($use2023UI ? "success" : "info") . '" style="height: 24px;"><img style="width: 16px;" src="/assets/logo/equestria.png"><span style="vertical-align: middle;">&nbsp;Equestrian</span></span>'
];
}
@@ -303,7 +304,7 @@ function getMemberBannerData(string $id, string $system, bool $french = false) {
$badges[] = [
"id" => "fictive2",
"color" => "d63384",
- "html" => '<span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Fictive</b><br>' . ucfirst(getMemberPronouns($member['pronouns'])["subjective"]) . ' ' . (getMemberPronouns($member['pronouns'])["third"] ? "is" : "are") . ' based on the personality, look and behavior of a character that is from Celeste." class="badge rounded-pill" style="height: 24px;background-color: #d63384;"><img style="width: 16px;" src="/assets/logo/celeste.png"><span style="vertical-align: middle;">&nbsp;Fictive</span></span>'
+ "html" => '<span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Fictive</b><br>' . ucfirst(getMemberPronouns($member['pronouns'])["subjective"]) . ' ' . (getMemberPronouns($member['pronouns'])["third"] ? "is" : "are") . ' based on the personality, look and behavior of a character that is from Celeste." class="badge rounded-pill ' . ($use2023UI ? "bg-success" : "") . '" style="height: 24px;' . (!$use2023UI ? "background-color: #d63384;" : "") . '"><img style="width: 16px;" src="/assets/logo/celeste.png"><span style="vertical-align: middle;">&nbsp;Fictive</span></span>'
];
}
@@ -311,7 +312,7 @@ function getMemberBannerData(string $id, string $system, bool $french = false) {
$badges[] = [
"id" => "persecutor",
"color" => "danger",
- "html" => '<span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Persecutor</b><br>' . ucfirst(getMemberPronouns($member['pronouns'])["subjective"]) . ' ' . (getMemberPronouns($member['pronouns'])["third"] ? "acts" : "act") . ' harmfully towards other system members and/or others, potentially as a misguided attempt to protect the system." class="badge rounded-pill bg-danger" style="height:24px;display: inline-flex;align-items: center;position: relative;top: 1px;"><span>Persecutor</span></span>'
+ "html" => '<span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Persecutor</b><br>' . ucfirst(getMemberPronouns($member['pronouns'])["subjective"]) . ' ' . (getMemberPronouns($member['pronouns'])["third"] ? "acts" : "act") . ' harmfully towards other system members and/or others, potentially as a misguided attempt to protect the system." class="badge rounded-pill bg-' . ($use2023UI ? "success" : "danger") . '" style="height:24px;display: inline-flex;align-items: center;position: relative;top: 1px;"><span>Persecutor</span></span>'
];
}
@@ -319,7 +320,7 @@ function getMemberBannerData(string $id, string $system, bool $french = false) {
$badges[] = [
"id" => "nonverbal",
"color" => "#6610f2",
- "html" => '<span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Fronts less often</b><br>' . ucfirst(getMemberPronouns($member['pronouns'])["subjective"]) . ' ' . (getMemberPronouns($member['pronouns'])["third"] ? "front" : "fronts") . ' less often than ' . getMemberPronouns($member['pronouns'])["possessive_det"] . ' headmates, this can be due to various reasons." class="badge rounded-pill" style="background-color:#6610f2;height:24px;display: inline-flex;align-items: center;position: relative;top: 1px;"><span>Fronts less often</span></span>'
+ "html" => '<span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Fronts less often</b><br>' . ucfirst(getMemberPronouns($member['pronouns'])["subjective"]) . ' ' . (getMemberPronouns($member['pronouns'])["third"] ? "front" : "fronts") . ' less often than ' . getMemberPronouns($member['pronouns'])["possessive_det"] . ' headmates, this can be due to various reasons." class="badge rounded-pill ' . ($use2023UI ? "bg-success" : "") . '" style="' . (!$use2023UI ? "background-color:#6610f2;" : "") . 'height:24px;display: inline-flex;align-items: center;position: relative;top: 1px;"><span>Fronts less often</span></span>'
];
}
@@ -327,7 +328,7 @@ function getMemberBannerData(string $id, string $system, bool $french = false) {
$badges[] = [
"id" => "nonverbal",
"color" => "#20c997",
- "html" => '<span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Non verbal IRL</b><br>' . ucfirst(getMemberPronouns($member['pronouns'])["subjective"]) . ' ' . (getMemberPronouns($member['pronouns'])["third"] ? "is" : "are") . ' non verbal in real life, although text communication is still possible." class="badge rounded-pill" style="background-color:#20c997;height:24px;display: inline-flex;align-items: center;position: relative;top: 1px;"><span>Non verbal IRL</span></span>'
+ "html" => '<span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Non verbal IRL</b><br>' . ucfirst(getMemberPronouns($member['pronouns'])["subjective"]) . ' ' . (getMemberPronouns($member['pronouns'])["third"] ? "is" : "are") . ' non verbal in real life, although text communication is still possible." class="badge rounded-pill ' . ($use2023UI ? "bg-success" : "") . '" style="' . (!$use2023UI ? "background-color:#20c997;" : "") . 'height:24px;display: inline-flex;align-items: center;position: relative;top: 1px;"><span>Non verbal IRL</span></span>'
];
}
@@ -335,7 +336,7 @@ function getMemberBannerData(string $id, string $system, bool $french = false) {
$badges[] = [
"id" => "fusion",
"color" => "333333",
- "html" => '<span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Fusion</b><br>She is the result of multiple ponies purposefully merging in a way that makes them impossible to tell apart." class="badge rounded-pill" style="background-color:#333333;height:24px;display: inline-flex;align-items: center;position: relative;top: 1px;"><span>Fusion</span></span>'
+ "html" => '<span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Fusion</b><br>She is the result of multiple ponies purposefully merging in a way that makes them impossible to tell apart." class="badge rounded-pill ' . ($use2023UI ? "bg-success" : "") . '" style="' . (!$use2023UI ? "background-color:#333333;" : "") . 'height:24px;display: inline-flex;align-items: center;position: relative;top: 1px;"><span>Fusion</span></span>'
];
}
@@ -343,7 +344,7 @@ function getMemberBannerData(string $id, string $system, bool $french = false) {
$badges[] = [
"id" => "host",
"color" => "fc6735",
- "html" => '<span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Host</b><br>' . ucfirst(getMemberPronouns($member['pronouns'])["subjective"]) . ' ' . (getMemberPronouns($member['pronouns'])["third"] ? "is" : "are") . ' the host in ' . getMemberPronouns($member['pronouns'])["possessive_det"] . ' system." class="badge rounded-pill" style="background-color:#fc6735;height:24px;display:inline-flex;align-items:center;position:relative;top:1px;"><span>Host</span></span>'
+ "html" => '<span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Host</b><br>' . ucfirst(getMemberPronouns($member['pronouns'])["subjective"]) . ' ' . (getMemberPronouns($member['pronouns'])["third"] ? "is" : "are") . ' the host in ' . getMemberPronouns($member['pronouns'])["possessive_det"] . ' system." class="badge rounded-pill ' . ($use2023UI ? "bg-success" : "") . '" style="' . (!$use2023UI ? "background-color:#fc6735;" : "") . 'height:24px;display:inline-flex;align-items:center;position:relative;top:1px;"><span>Host</span></span>'
];
}
@@ -351,7 +352,7 @@ function getMemberBannerData(string $id, string $system, bool $french = false) {
$badges[] = [
"id" => "leader",
"color" => "d6a833",
- "html" => '<span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Leader</b><br>' . ucfirst(getMemberPronouns($member['pronouns'])["subjective"]) . ' ' . (getMemberPronouns($member['pronouns'])["third"] ? "is" : "are") . ' a leader in ' . getMemberPronouns($member['pronouns'])["possessive_det"] . ' system." class="badge rounded-pill" style="background-color:#fd7e14;height:24px;display: inline-flex;align-items: center;position: relative;top: 1px;"><span>Leader</span></span>'
+ "html" => '<span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Leader</b><br>' . ucfirst(getMemberPronouns($member['pronouns'])["subjective"]) . ' ' . (getMemberPronouns($member['pronouns'])["third"] ? "is" : "are") . ' a leader in ' . getMemberPronouns($member['pronouns'])["possessive_det"] . ' system." class="badge rounded-pill ' . ($use2023UI ? "bg-success" : "") . '" style="' . (!$use2023UI ? "background-color:#fd7e14;" : "") . 'height:24px;display: inline-flex;align-items: center;position: relative;top: 1px;"><span>Leader</span></span>'
];
}
@@ -359,7 +360,7 @@ function getMemberBannerData(string $id, string $system, bool $french = false) {
$badges[] = [
"id" => "protector",
"color" => "black",
- "html" => '<span style="height:24px;display: inline-flex;align-items: center;position: relative;top: 1px;" data-bs-toggle="tooltip" data-bs-html="true" title="<b>Protector</b><br>' . ucfirst(getMemberPronouns($member['pronouns'])["subjective"]) . ' ' . (getMemberPronouns($member['pronouns'])["third"] ? "is" : "are") . ' a protector in the system and will front when somepony cannot handle it anymore." class="badge rounded-pill bg-black"><span>Protector</span></span>'
+ "html" => '<span style="height:24px;display: inline-flex;align-items: center;position: relative;top: 1px;" data-bs-toggle="tooltip" data-bs-html="true" title="<b>Protector</b><br>' . ucfirst(getMemberPronouns($member['pronouns'])["subjective"]) . ' ' . (getMemberPronouns($member['pronouns'])["third"] ? "is" : "are") . ' a protector in the system and will front when somepony cannot handle it anymore." class="badge rounded-pill bg-' . ($use2023UI ? "success" : "black") . '"><span>Protector</span></span>'
];
}
@@ -375,7 +376,7 @@ function getMemberBannerData(string $id, string $system, bool $french = false) {
$badges[] = [
"id" => "younger",
"color" => "dark",
- "html" => '<span style="height:24px;display: inline-flex;align-items: center;position: relative;top: 1px;" data-bs-toggle="tooltip" data-bs-html="true" title="<b>Younger</b><br>' . ucfirst(getMemberPronouns($member['pronouns'])["subjective"]) . ' ' . (getMemberPronouns($member['pronouns'])["third"] ? "is" : "are") . ' younger than the body, but not young enough to be classified as a little." class="badge rounded-pill bg-dark"><span>Younger</span></span>'
+ "html" => '<span style="height:24px;display: inline-flex;align-items: center;position: relative;top: 1px;" data-bs-toggle="tooltip" data-bs-html="true" title="<b>Younger</b><br>' . ucfirst(getMemberPronouns($member['pronouns'])["subjective"]) . ' ' . (getMemberPronouns($member['pronouns'])["third"] ? "is" : "are") . ' younger than the body, but not young enough to be classified as a little." class="badge rounded-pill bg-' . ($use2023UI ? "success" : "dark") . '"><span>Younger</span></span>'
];
}
@@ -383,7 +384,7 @@ function getMemberBannerData(string $id, string $system, bool $french = false) {
$badges[] = [
"id" => "alcohol",
"color" => "secondary",
- "html" => '<span style="height:24px;display: inline-flex;align-items: center;position: relative;top: 1px;" data-bs-toggle="tooltip" data-bs-html="true" title="<b>Alcohol</b><br>' . ucfirst(getMemberPronouns($member['pronouns'])["subjective"]) . ' drinks alcohol, and thus may be drunk or hungover at times." class="badge rounded-pill bg-secondary"><span>Alcohol</span></span>'
+ "html" => '<span style="height:24px;display: inline-flex;align-items: center;position: relative;top: 1px;" data-bs-toggle="tooltip" data-bs-html="true" title="<b>Alcohol</b><br>' . ucfirst(getMemberPronouns($member['pronouns'])["subjective"]) . ' drinks alcohol, and thus may be drunk or hungover at times." class="badge rounded-pill bg-' . ($use2023UI ? "success" : "secondary") . '"><span>Alcohol</span></span>'
];
}
diff --git a/includes/util/evening.inc b/includes/util/evening.inc
new file mode 100644
index 0000000..58e511e
--- /dev/null
+++ b/includes/util/evening.inc
@@ -0,0 +1,68 @@
+<?php
+
+if (!file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/data/evening/ignored.json")) file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/evening/ignored.json", "[]");
+if (!file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/data/evening/locked.json")) file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/evening/locked.json", "{}");
+
+if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/data/cache/evening.json")) unlink($_SERVER['DOCUMENT_ROOT'] . "/includes/data/cache/evening.json");
+
+global $use2023UI;
+
+$pairs = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/evening/pairs.json"), true);
+$ignored = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/evening/ignored.json"), true);
+$locked = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/evening/locked.json"), true);
+
+if (isset($_GET["ignore"]) && isset($_GET["day"])) {
+ if ($_GET["ignore"] === "1") {
+ if (preg_match("/^\d{4}-\d{2}-\d{2}$/m", $_GET["day"]) === false) {
+ header("Location: /$_GET[_]");
+ die();
+ }
+
+ if (!in_array($_GET["day"], $ignored)) {
+ $ignored[] = $_GET["day"];
+ }
+
+ if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/data/cache/evening.json")) unlink($_SERVER['DOCUMENT_ROOT'] . "/includes/data/cache/evening.json");
+
+ file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/evening/ignored.json", json_encode($ignored));
+ header("Location: /$_GET[_]");
+ die();
+ } elseif ($_GET["ignore"] === "0") {
+ if (preg_match("/^\d{4}-\d{2}-\d{2}$/m", $_GET["day"]) === false) {
+ header("Location: /$_GET[_]");
+ die();
+ }
+
+ if (in_array($_GET["day"], $ignored)) {
+ unset($ignored[array_search($_GET["day"], $ignored)]);
+ }
+
+ if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/data/cache/evening.json")) unlink($_SERVER['DOCUMENT_ROOT'] . "/includes/data/cache/evening.json");
+
+ file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/evening/ignored.json", json_encode($ignored));
+ header("Location: /$_GET[_]");
+ die();
+ }
+
+ die();
+}
+
+if (isset($_GET["lock"]) && isset($_GET["day"]) && isset($_GET["data"])) {
+ if (isset($locked[$_GET["day"]])) {
+ unset($locked[$_GET["day"]]);
+
+ if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/data/cache/evening.json")) unlink($_SERVER['DOCUMENT_ROOT'] . "/includes/data/cache/evening.json");
+
+ file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/evening/locked.json", json_encode($locked));
+ header("Location: /$_GET[_]");
+ die();
+ } else {
+ $locked[$_GET["day"]] = $_GET["data"];
+
+ if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/data/cache/evening.json")) unlink($_SERVER['DOCUMENT_ROOT'] . "/includes/data/cache/evening.json");
+
+ file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/evening/locked.json", json_encode($locked));
+ header("Location: /$_GET[_]");
+ die();
+ }
+} \ No newline at end of file
diff --git a/pages/account.inc b/pages/account.inc
new file mode 100644
index 0000000..c1c5d52
--- /dev/null
+++ b/pages/account.inc
@@ -0,0 +1,15 @@
+<?php
+
+require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/init.inc"; global $title; global $isLoggedIn; global $lang; global $pages;
+require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/util/evening.inc";
+
+require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/components/header.inc'; ?>
+
+<br>
+<div class="container">
+ <div id="page-content">
+ <h2>Account and security</h2>
+ </div>
+</div>
+
+<?php require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/components/footer.inc'; ?>
diff --git a/pages/alerts.inc b/pages/alerts.inc
new file mode 100644
index 0000000..b58a9ce
--- /dev/null
+++ b/pages/alerts.inc
@@ -0,0 +1,15 @@
+<?php
+
+require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/init.inc"; global $title; global $isLoggedIn; global $lang; global $pages;
+require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/util/evening.inc";
+
+require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/components/header.inc'; ?>
+
+<br>
+<div class="container">
+ <div id="page-content">
+ <h2>Alerts</h2>
+ </div>
+</div>
+
+<?php require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/components/footer.inc'; ?>
diff --git a/pages/api/2023ui.php b/pages/api/2023ui.php
new file mode 100644
index 0000000..0501b9a
--- /dev/null
+++ b/pages/api/2023ui.php
@@ -0,0 +1,5 @@
+<?php
+
+setcookie("new2023UI", "yes", time() + 86400*365, "/", "", true, true);
+header("Location: /?ui2023intro");
+die(); \ No newline at end of file
diff --git a/pages/docs.inc b/pages/docs.inc
index 9fd9bf3..58256c7 100644
--- a/pages/docs.inc
+++ b/pages/docs.inc
@@ -395,6 +395,7 @@ function showDocument($item) { ?>
}
</script>
<style>
+ <?php global $use2023UI; if (!$use2023UI): ?>
.list-group-item {
color: #fff;
background-color: #222;
@@ -417,6 +418,7 @@ function showDocument($item) { ?>
background-color: #272727;
color: #bbb;
}
+ <?php endif; ?>
</style>
<?php require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/components/footer.inc'; ?>
diff --git a/pages/evening.inc b/pages/evening.inc
index f40cb20..59c34e4 100644
--- a/pages/evening.inc
+++ b/pages/evening.inc
@@ -1,311 +1,11 @@
<?php
-$emergencyHeader = true; require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/init.inc"; global $title; global $isLoggedIn; global $lang; global $pages;
+require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/init.inc"; global $title; global $isLoggedIn; global $lang; global $pages;
+require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/util/evening.inc";
-if (!file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/data/evening/ignored.json")) file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/evening/ignored.json", "[]");
-if (!file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/data/evening/locked.json")) file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/evening/locked.json", "{}");
-
-if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/data/cache/evening.json")) unlink($_SERVER['DOCUMENT_ROOT'] . "/includes/data/cache/evening.json");
-
-$pairs = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/evening/pairs.json"), true);
-$ignored = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/evening/ignored.json"), true);
-$locked = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/evening/locked.json"), true);
-
-if (isset($_GET["ignore"]) && isset($_GET["day"])) {
- if ($_GET["ignore"] === "1") {
- if (preg_match("/^\d{4}-\d{2}-\d{2}$/m", $_GET["day"]) === false) {
- header("Location: /-/evening");
- die();
- }
-
- if (!in_array($_GET["day"], $ignored)) {
- $ignored[] = $_GET["day"];
- }
-
- if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/data/cache/evening.json")) unlink($_SERVER['DOCUMENT_ROOT'] . "/includes/data/cache/evening.json");
-
- file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/evening/ignored.json", json_encode($ignored));
- header("Location: /-/evening");
- die();
- } elseif ($_GET["ignore"] === "0") {
- if (preg_match("/^\d{4}-\d{2}-\d{2}$/m", $_GET["day"]) === false) {
- header("Location: /-/evening");
- die();
- }
-
- if (in_array($_GET["day"], $ignored)) {
- unset($ignored[array_search($_GET["day"], $ignored)]);
- }
-
- if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/data/cache/evening.json")) unlink($_SERVER['DOCUMENT_ROOT'] . "/includes/data/cache/evening.json");
-
- file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/evening/ignored.json", json_encode($ignored));
- header("Location: /-/evening");
- die();
- }
-
- die();
-}
-
-if (isset($_GET["lock"]) && isset($_GET["day"]) && isset($_GET["data"])) {
- if (isset($locked[$_GET["day"]])) {
- unset($locked[$_GET["day"]]);
-
- if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/data/cache/evening.json")) unlink($_SERVER['DOCUMENT_ROOT'] . "/includes/data/cache/evening.json");
-
- file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/evening/locked.json", json_encode($locked));
- header("Location: /-/evening");
- die();
- } else {
- $locked[$_GET["day"]] = $_GET["data"];
-
- if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/data/cache/evening.json")) unlink($_SERVER['DOCUMENT_ROOT'] . "/includes/data/cache/evening.json");
-
- file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/evening/locked.json", json_encode($locked));
- header("Location: /-/evening");
- die();
- }
-}
-
-require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/components/header.inc';
-
-if (!file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/data/cache/evening.json")) file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/cache/evening.json", "{}");
-$cache = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/cache/evening.json"), true);
-
-if (!isset($cache["content"]) || date('Y-m-d') !== $cache["day"]) {
- ob_start();
-
- $members = $members = [
- ...array_map(function ($i) {
- $system = "ynmuc";
- $i["_lastFronted"] = -1;
- $id = $i["id"];
- $memberData = $i;
-
- $fronters = array_map(function ($item) {
- return $item["id"];
- }, json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$system/fronters.json"), true)["members"]);
-
- if (in_array($id, $fronters)) {
- $i["_lastFronted"] = time();
- } else {
- $switches = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$system/switches.json"), true);
-
- $thisMember = array_filter($switches, function ($item) use ($memberData) {
- return in_array($memberData["id"], $item["members"]);
- });
-
- $thisMember = array_values($thisMember);
- $frontingEnd = null;
-
- if (count($thisMember) > 0) {
- $thisIndex = array_search($thisMember[0], $switches);
-
- $frontingStart = $thisMember[0];
- $frontingEnd = $switches[$thisIndex - 1];
- }
-
- if ($frontingEnd !== null && isset($frontingStart)) {
- $i["_lastFronted"] = strtotime($frontingEnd["timestamp"]);
- }
- }
-
- return $i;
- }, array_values(array_filter(scoreOrderGlobal(), function ($i) {
- return $i["_system"] === "ynmuc";
- }))),
- ...array_map(function ($i) {
- $system = "gdapd";
- $i["_lastFronted"] = -1;
- $id = $i["id"];
- $memberData = $i;
-
- $fronters = array_map(function ($item) {
- return $item["id"];
- }, json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$system/fronters.json"), true)["members"]);
-
- if (in_array($id, $fronters)) {
- $i["_lastFronted"] = time();
- } else {
- $switches = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$system/switches.json"), true);
-
- $thisMember = array_filter($switches, function ($item) use ($memberData) {
- return in_array($memberData["id"], $item["members"]);
- });
-
- $thisMember = array_values($thisMember);
- $frontingEnd = null;
-
- if (count($thisMember) > 0) {
- $thisIndex = array_search($thisMember[0], $switches);
-
- $frontingStart = $thisMember[0];
- $frontingEnd = $switches[$thisIndex - 1];
- }
-
- if ($frontingEnd !== null && isset($frontingStart)) {
- $i["_lastFronted"] = strtotime($frontingEnd["timestamp"]);
- }
- }
-
- return $i;
- }, array_values(array_filter(scoreOrderGlobal(), function ($i) {
- return $i["_system"] === "gdapd";
- })))
- ];
-
- ?>
-
-<style>
- @media (max-width: 767px) {
- .member-name, .member-list-separator {
- display: none;
- }
-
- .member-collection {
- width: 100%;
- text-align: center;
- }
- }
-
- .member-link:hover {
- opacity: .75;
- }
-</style>
+require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/components/header.inc'; ?>
<br>
-<div class="container">
- <div>
- <h2><?= $pages["evening"]["name"][$lang["_name"]] ?><?= time() >= 1686787200 ? "" : " (Beta)" ?></h2>
-
- <?php if (time() < 1686787200): ?>
- <div class="alert alert-warning">
- <b>The evening schedule will replace the fronting schedule starting June 15<sup>th</sup>.</b> The fronting schedule page contains more information and shows the schedule up to that date. The evening schedule is experimental until then.
- </div>
- <?php endif; ?>
-
- <details>
- <summary style="list-style: none; outline: none; cursor: text;">
- <p>Click on the "Ignore" button to mark an evening as ignored and shift the schedule one day after. You can revert this by clicking on "Unignore".</p>
- </summary>
- <ul>
- <?php usort($pairs, function ($a, $b) use ($members) {
- $times = [];
-
- foreach ($a[0] as $id) {
- if (getLastFronted($members, $id) > 0) $times[] = getLastFronted($members, $id);
- }
- foreach ($a[1] as $id) {
- if (getLastFronted($members, $id) > 0) $times[] = getLastFronted($members, $id);
- }
-
- $timeA = time() - min($times);
- $times = [];
-
- foreach ($b[0] as $id) {
- if (getLastFronted($members, $id) > 0) $times[] = getLastFronted($members, $id);
- }
- foreach ($b[1] as $id) {
- if (getLastFronted($members, $id) > 0) $times[] = getLastFronted($members, $id);
- }
-
- $timeB = time() - min($times);
-
- return $timeB - $timeA;
- }); $pairs = array_values($pairs); foreach ($pairs as $pair): $times = []; ?>
- <li>
- <?php foreach ($pair[0] as $id): ?>
- <img style="width: 24px;" src="<?= getAsset("ynmuc", $id) ?>"> <?= getMemberWithoutSystem($id)["display_name"] ?>
- <?php $times[] = getLastFronted($members, $id); endforeach; ?>
- with
- <?php foreach ($pair[1] as $id): ?>
- <img style="width: 24px;" src="<?= getAsset("gdapd", $id) ?>"> <?= getMemberWithoutSystem($id)["display_name"] ?>
- <?php $times[] = getLastFronted($members, $id); endforeach; ?>
- (<?= time() - max($times) ?>)
- </li>
- <?php endforeach; ?>
- </ul>
- </details>
-
- <?php $listI = 0; for ($i = 0; $i < 15; $i++): $pair = $pairs[$listI];
- $realPair = $pair;
-
- if (isset($locked[date('Y-m-d', time() + 86400 * $i)])) {
- $pair = array_map(function ($i) {
- return explode(",", $i);
- }, explode("|", $locked[date('Y-m-d', time() + 86400 * $i)]));
- }
-
- if (time() + 86400 * $i >= 1686787200): ?>
- <h4><?= date('l j', time() + 86400 * $i) ?></h4>
- <div style="display: grid; grid-template-columns: repeat(2, 1fr) 100px 150px; grid-gap: 20px; margin-bottom: 10px;">
- <div style="display: flex; align-items: center;<?php if (in_array(date('Y-m-d', time() + 86400 * $i), $ignored)): ?>opacity: .75; filter: saturate(0);<?php endif; ?>">
- <div class="member-collection">
- <?php foreach ($pair[0] as $id): ?>
- <a class="member-link <?php if (isset($locked[date('Y-m-d', time() + 86400 * $i)])): ?>text-warning" style="font-weight: bold;<?php endif; ?>" href="/<?= getMemberWithoutSystem($id)["name"] ?>"><img style="width: 24px;" src="<?= getAsset("ynmuc", $id, "heads") ?>"> <span class="member-name" style="<?php if (in_array(date('Y-m-d', time() + 86400 * $i), $ignored)): ?>text-decoration: line-through;<?php endif; ?>"><?= getMemberWithoutSystem($id)["display_name"] ?></span></a><br class="member-list-separator">
- <?php $times[] = getLastFronted($members, $id); endforeach; ?>
- </div>
- </div>
- <div style="display: flex; align-items: center;<?php if (in_array(date('Y-m-d', time() + 86400 * $i), $ignored)): ?>opacity: .75; filter: saturate(0);<?php endif; ?>">
- <div class="member-collection">
- <?php foreach ($pair[1] as $id): ?>
- <a class="member-link <?php if (isset($locked[date('Y-m-d', time() + 86400 * $i)])): ?>text-warning" style="font-weight: bold;<?php endif; ?>" href="/<?= getMemberWithoutSystem($id)["name"] ?>"><img style="width: 24px;" src="<?= getAsset("gdapd", $id, "heads") ?>"> <span class="member-name" style="<?php if (in_array(date('Y-m-d', time() + 86400 * $i), $ignored)): ?>text-decoration: line-through;<?php endif; ?>"><?= getMemberWithoutSystem($id)["display_name"] ?></span></a><br class="member-list-separator">
- <?php $times[] = getLastFronted($members, $id); endforeach; ?>
- </div>
- </div>
- <div style="display: flex; align-items: center; justify-content: center;">
- <?php
-
- $times = [];
-
- foreach ($pair[0] as $id) {
- if (getLastFronted($members, $id) > 0) $times[] = getLastFronted($members, $id);
- }
- foreach ($pair[1] as $id) {
- if (getLastFronted($members, $id) > 0) $times[] = getLastFronted($members, $id);
- }
-
- $time = time() - min($times);
- echo(timeAgo(time() - $time));
-
- ?>
- </div>
- <div style="display: flex; align-items: center; justify-content: center;">
- <?php if (isset($locked[date('Y-m-d', time() + 86400 * $i)])): ?>
- <a href="?lock&day=<?= date('Y-m-d', time() + 86400 * $i) ?>&data=<?= implode(",", $pair[0]) . "|" . implode(",", $pair[1]) ?>" class="btn btn-outline-secondary">Unlock</a>
- <?php else: ?>
- <a href="?lock&day=<?= date('Y-m-d', time() + 86400 * $i) ?>&data=<?= implode(",", $pair[0]) . "|" . implode(",", $pair[1]) ?>" class="btn btn-outline-primary">Lock</a>
- <?php endif; ?>&nbsp;&nbsp;
- <?php if (in_array(date('Y-m-d', time() + 86400 * $i), $ignored)): ?>
- <a href="?ignore=0&day=<?= date('Y-m-d', time() + 86400 * $i) ?>" class="btn btn-outline-success">Unignore</a>
- <?php else: ?>
- <a href="?ignore=1&day=<?= date('Y-m-d', time() + 86400 * $i) ?>" class="btn btn-outline-danger">Ignore</a>
- <?php endif; ?>
- </div>
- </div>
- <?= $i < 14 ? "<hr>" : "" ?>
- <?php endif;
-
- if (
- (!isset($locked[date('Y-m-d', time() + 86400 * $i)]) && !in_array(date('Y-m-d', time() + 86400 * $i), $ignored))
- || (isset($locked[date('Y-m-d', time() + 86400 * $i)]) && $locked[date('Y-m-d', time() + 86400 * $i)] === implode(",", $realPair[0]) . "|" . implode(",", $realPair[1]))
- ) {
- $listI++;
- }
-
- if ($listI === count($pairs)) $listI = 0; endfor; ?>
- </div>
-</div>
-<?php
-
- $cache["content"] = ob_get_contents();
- $cache["day"] = date('Y-m-d');
- ob_end_clean();
-}
-
-echo($cache["content"]);
-file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/cache/evening.json", json_encode($cache));
-
-?>
+<?php require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/fragments/evening.inc"; ?>
<?php require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/components/footer.inc'; ?>
diff --git a/pages/jobs.inc b/pages/jobs.inc
index c00e35c..3c0bb3d 100644
--- a/pages/jobs.inc
+++ b/pages/jobs.inc
@@ -17,6 +17,7 @@ require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/components/header.inc';
?>
<style>
+ <?php global $use2023UI; if (!$use2023UI): ?>
.list-group-item {
color: #fff;
background-color: #222;
@@ -40,16 +41,27 @@ require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/components/header.inc';
color: #bbb;
}
+ <?php endif; ?>
+
details[open] summary {
font-weight: bold;
}
+ <?php if ($use2023UI): ?>
+ pre {
+ background: var(--palette-4);
+ color: var(--palette-6);
+ padding: 10px 20px;
+ margin-top: 10px;
+ }
+ <?php else: ?>
pre {
background: #000000;
color: #ffffff;
padding: 10px 20px;
margin-top: 10px;
}
+ <?php endif; ?>
pre.last {
margin-bottom: 0;
diff --git a/pages/lists.inc b/pages/lists.inc
new file mode 100644
index 0000000..2b507f4
--- /dev/null
+++ b/pages/lists.inc
@@ -0,0 +1,15 @@
+<?php
+
+require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/init.inc"; global $title; global $isLoggedIn; global $lang; global $pages;
+require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/util/evening.inc";
+
+require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/components/header.inc'; ?>
+
+<br>
+<div class="container">
+ <div id="page-content">
+ <h2>Member lists</h2>
+ </div>
+</div>
+
+<?php require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/components/footer.inc'; ?>
diff --git a/pages/money.inc b/pages/money.inc
index 7c6fc55..aa2e57e 100644
--- a/pages/money.inc
+++ b/pages/money.inc
@@ -185,6 +185,7 @@ function getMonthlyEarnings(): array {
opacity: .5;
}
+ <?php global $use2023UI; if (!$use2023UI): ?>
.list-group-item {
color: #fff;
background-color: #222;
@@ -216,6 +217,7 @@ function getMonthlyEarnings(): array {
border: 1px solid rgba(255, 255, 255, .2);
background-color: #111;
}
+ <?php endif; ?>
.btn-close {
filter: invert(1);
@@ -276,6 +278,8 @@ function getMonthlyEarnings(): array {
$dates[] = date('j M Y, H:i', strtotime($transaction["date"]));
}
+ global $palette;
+
?>
<script>
const ctx3 = document.getElementById('history').getContext('2d');
@@ -286,8 +290,9 @@ function getMonthlyEarnings(): array {
datasets: [{
label: 'Balance',
data: JSON.parse(`<?= json_encode($history) ?>`),
- borderColor: '#b9f1ef',
- backgroundColor: '#B9F1EF77'
+ borderColor: '#<?= $use2023UI ? $palette[9] : "b9f1ef" ?>',
+ backgroundColor: '#<?= $use2023UI ? $palette[9] : "b9f1ef77" ?>',
+ lineTension: 0.4
}]
},
options: {
@@ -308,7 +313,7 @@ function getMonthlyEarnings(): array {
},
elements: {
point: {
- radius: 5
+ radius: 0
}
},
plugins: {
@@ -420,8 +425,9 @@ function getMonthlyEarnings(): array {
datasets: [{
label: 'Balance',
data: JSON.parse(`<?= json_encode($history) ?>`),
- borderColor: '#ff6ae6',
- backgroundColor: '#ff6ae677'
+ borderColor: '#<?= $use2023UI ? $palette[9] : "ff6ae6" ?>',
+ backgroundColor: '#<?= $use2023UI ? $palette[9] : "ff6ae677" ?>',
+ lineTension: 0.4
}]
},
options: {
@@ -442,7 +448,7 @@ function getMonthlyEarnings(): array {
},
elements: {
point: {
- radius: 5
+ radius: 0
}
},
plugins: {
@@ -572,8 +578,9 @@ function getMonthlyEarnings(): array {
datasets: [{
label: 'Balance',
data: JSON.parse(`<?= json_encode($history) ?>`),
- borderColor: '#d7e1ff',
- backgroundColor: '#d7e1ff77'
+ borderColor: '#<?= $use2023UI ? $palette[9] : "d7e1ff" ?>',
+ backgroundColor: '#<?= $use2023UI ? $palette[9] : "d7e1ff77" ?>',
+ lineTension: 0.4
}]
},
options: {
@@ -594,7 +601,7 @@ function getMonthlyEarnings(): array {
},
elements: {
point: {
- radius: 5
+ radius: 0
}
},
plugins: {
@@ -617,7 +624,7 @@ function getMonthlyEarnings(): array {
<?php else: $account = array_values(array_filter($accounts, function ($i) use ($parts) { return $i["_name"] === $parts[2]; }))[0]; ?>
<h2>
<?= $account["owner"] === "cloudburst" ? "Cloudburst System" : "Raindrops System" ?> · <?= $account["name"] ?><?php if ($account["default"]): ?><span class="text-muted"> (default)</span><?php endif; ?>
- <a href="/-/money" class="small btn btn-outline-light" style="float:right;margin-top:5px;vertical-align:middle;opacity:1 !important; color:white;">Back</a>
+ <a href="/-/money" class="small btn btn-outline-<?= $use2023UI ? "primary" : "light" ?>" style="float:right;margin-top:5px;vertical-align:middle;opacity:1 !important; <?= $use2023UI ? "" : "color: white;" ?>">Back</a>
</h2>
<div style="display: grid; grid-template-columns: max-content 1fr; grid-gap: 15px;">
<h3 style="margin-bottom: 0; display: flex; align-items: center; justify-content: center;"><?= $account["currency"] === "gbp" ? "£" : "€" ?><?= calculateFullAmount($account) ?></h3>
@@ -644,6 +651,8 @@ function getMonthlyEarnings(): array {
$dates[] = date('j M Y, H:i', strtotime($transaction["date"]));
}
+ global $palette;
+
?>
<script>
const ctx = document.getElementById('history').getContext('2d');
@@ -654,8 +663,9 @@ function getMonthlyEarnings(): array {
datasets: [{
label: 'Balance',
data: JSON.parse(`<?= json_encode($history) ?>`),
- borderColor: '#<?= $account["owner"] === "cloudburst" ? "ff6ae6" : "d7e1ff" ?>',
- backgroundColor: '#<?= $account["owner"] === "cloudburst" ? "ff6ae6" : "d7e1ff" ?>77'
+ borderColor: '#<?= $use2023UI ? $palette[9] : ($account["owner"] === "cloudburst" ? "ff6ae6" : "d7e1ff") ?>',
+ backgroundColor: '#<?=$use2023UI ? $palette[9] : ($account["owner"] === "cloudburst" ? "ff6ae677" : "d7e1ff77") ?>',
+ lineTension: 0.4
}]
},
options: {
@@ -676,7 +686,7 @@ function getMonthlyEarnings(): array {
},
elements: {
point: {
- radius: 5
+ radius: 0
}
},
plugins: {
@@ -699,9 +709,9 @@ function getMonthlyEarnings(): array {
<hr>
<div class="list-group">
- <a href="#" data-bs-toggle="modal" data-bs-target="#create" class="list-group-item list-group-item-action" style="display: grid; grid-template-columns: max-content 1fr;"><img src="/assets/icons/add.svg" style="filter: invert(1); margin-right: 10px; height: 32px; width: 32px;"><div style="display: flex; align-items: center;"><b>Add new transaction</b></div></a>
+ <a href="#" data-bs-toggle="modal" data-bs-target="#create" class="list-group-item list-group-item-action" style="display: grid; grid-template-columns: max-content 1fr;"><img src="<?= $use2023UI ? icon('add', null, true) : "/assets/icons/add.svg" ?>" style="filter: invert(1); margin-right: 10px; height: 32px; width: 32px;"><div style="display: flex; align-items: center;"><b>Add new transaction</b></div></a>
<?php foreach ($account["transactions"] as $index => $transaction): $member = getMemberWithoutSystem($transaction["author"]) ?? getMemberWithoutSystem("zdtsg"); ?>
- <a id="transaction-<?= $index ?>" onclick="deleteTransaction(<?= $index ?>)" class="list-group-item list-group-item-action" style="display: grid; grid-template-columns: max-content 1fr;cursor:pointer;"><div style="display: flex; align-items: center;"><img src="<?= getAsset($member["_system"], $member["id"]) ?>" style="border-radius: 999px; width: 32px; height: 32px; margin-right: 10px;"></div><div style="display: flex; align-items: center;"><div><b><?= $member["display_name"] ?? $member["name"] ?></b><?= $transaction["amount"] < 0 ? " removed" : " added" ?>&nbsp;<span class="<?= $transaction["amount"] < 0 ? "text-danger" : "text-success" ?>"><?= $account["currency"] === "gbp" ? "£" : "€" ?><?= number_format(abs($transaction["amount"]), 2, '.', ',') ?>&nbsp;</span><?= timeAgo($transaction["date"]) ?><?php if (isset($transaction["description"]) && trim($transaction["description"]) !== "" && (!isset($transaction["initial"]) || !$transaction["initial"])): ?>: <?= strip_tags(trim($transaction["description"])) ?><?php endif; ?><?php if (isset($transaction["initial"]) && $transaction["initial"]): ?> <span class="badge bg-secondary rounded-pill">Initial amount</span><?php endif; ?></div></div></a>
+ <a id="transaction-<?= $index ?>" onclick="deleteTransaction(<?= $index ?>)" class="list-group-item list-group-item-action" style="display: grid; grid-template-columns: max-content 1fr;cursor:pointer;"><div style="display: flex; align-items: center;"><img src="<?= getAsset($member["_system"], $member["id"]) ?>" style="border-radius: 999px; width: 32px; height: 32px; margin-right: 10px;"></div><div style="display: flex; align-items: center;"><div><b><?= $member["display_name"] ?? $member["name"] ?></b><?= $transaction["amount"] < 0 ? " removed" : " added" ?>&nbsp;<span class="<?= $transaction["amount"] < 0 ? "text-danger" : "text-success" ?>"><?= $account["currency"] === "gbp" ? "£" : "€" ?><?= number_format(abs($transaction["amount"]), 2, '.', ',') ?>&nbsp;</span><?= timeAgo($transaction["date"]) ?><?php if (isset($transaction["description"]) && trim($transaction["description"]) !== "" && (!isset($transaction["initial"]) || !$transaction["initial"])): ?>: <?= strip_tags(trim($transaction["description"])) ?><?php endif; ?><?php if (isset($transaction["initial"]) && $transaction["initial"]): ?> <span class="badge bg-<?= $use2023UI ? "success" : "secondary" ?> rounded-pill">Initial amount</span><?php endif; ?></div></div></a>
<?php endforeach; ?>
</div>
@@ -733,7 +743,7 @@ function getMonthlyEarnings(): array {
</p>
<p>Deleting a transaction takes effect immediately and cannot be undone.</p>
- <a href="#" id="delete-link" class="btn btn-danger">Delete</a>
+ <a href="#" id="delete-link" class="btn btn-<?= $use2023UI ? "primary" : "danger" ?>">Delete</a>
</div>
</div>
</div>
@@ -769,7 +779,7 @@ function getMonthlyEarnings(): array {
</p>
<p>Adding a transaction takes effect immediately and cannot be modified afterwards.</p>
- <button id="delete-link" class="btn btn-success">Create</button>
+ <button id="delete-link" class="btn btn-<?= $use2023UI ? "primary" : "success" ?>">Create</button>
</form>
</div>
</div>
diff --git a/pages/schedules.inc b/pages/schedules.inc
index 55f7670..03277cc 100644
--- a/pages/schedules.inc
+++ b/pages/schedules.inc
@@ -1,8 +1,11 @@
<?php
+require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/util/evening.inc";
require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/init.inc"; global $title; global $isLoggedIn; global $lang; global $pages; global $app;
require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/components/header.inc'; global $readOnly; global $isNormallyLoggedIn;
+global $use2023UI;
+
?>
<style>
@@ -30,6 +33,8 @@ require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/components/header.inc'; glob
<div class="container">
<h2>Schedules</h2>
+ <h4>World clock</h4>
+
<div id="schedules" style="margin-top: 20px; display: grid; grid-template-columns: repeat(4, 1fr); grid-gap: 20px;">
<div>
<div id="live-time-other2-outer" class="day-gradient" style="text-align: center; background-color: rgba(255, 255, 255, .1); padding: 20px 0; border-radius: 10px; margin-bottom: 20px;">
@@ -143,4 +148,9 @@ require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/components/header.inc'; glob
}, 10000);
</script>
+<?php if ($use2023UI) {
+ echo "<div class='container'><hr></div>";
+ require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/fragments/evening.inc";
+} ?>
+
<?php require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/components/footer.inc'; ?>
diff --git a/pages/travelling.inc b/pages/travelling.inc
index 7eb3dfa..c7eaadf 100644
--- a/pages/travelling.inc
+++ b/pages/travelling.inc
@@ -106,6 +106,8 @@ if (isset($_GET['toggleTravel']) && $isLoggedIn) {
die();
}
+global $use2023UI;
+
require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/components/header.inc';
global $travelling;
@@ -163,7 +165,7 @@ global $travelling;
<div>
<?php if ($travelling[$member['id']]["travelling"]): ?>
<div class="dropdown">
- <button type="button" class="btn btn-outline-danger dropdown-toggle" data-bs-toggle="dropdown" <?= $isLowerLoggedIn ? "disabled" : "" ?>>
+ <button type="button" class="btn btn-outline-<?= $use2023UI ? "primary" : "danger" ?> dropdown-toggle" data-bs-toggle="dropdown" <?= $isLowerLoggedIn ? "disabled" : "" ?>>
Stop travelling
</button>
<ul class="dropdown-menu">
@@ -172,7 +174,7 @@ global $travelling;
</div>
<?php else: ?>
<div class="dropdown">
- <button type="button" class="btn btn-outline-success dropdown-toggle" data-bs-toggle="dropdown" <?= $isLowerLoggedIn ? "disabled" : "" ?>>
+ <button type="button" class="btn btn-outline-<?= $use2023UI ? "primary" : "success" ?> dropdown-toggle" data-bs-toggle="dropdown" <?= $isLowerLoggedIn ? "disabled" : "" ?>>
Start travelling
</button>
<ul class="dropdown-menu">