Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
7a659dd
changed log level for translation not found errors to debug
JacksonTheMaster Aug 13, 2025
fcb3cb9
added missing UIText_Login_HeaderTitle to english loc file
JacksonTheMaster Aug 13, 2025
f4ccf95
bump version to 5.5.9
JacksonTheMaster Aug 13, 2025
b47c5e6
updated readme, finally
JacksonTheMaster Aug 13, 2025
62b3bfc
fix mod time shenenigans: reliably make the gameserver load the resto…
JacksonTheMaster Aug 21, 2025
2595013
added feature request to customize "Login" text on loging page to som…
JacksonTheMaster Aug 21, 2025
4d03b81
added ability to change webUI port (https://discordapp.com/channels/1…
JacksonTheMaster Aug 21, 2025
b4b300a
oldHeadSaveBackups are now saved as re-restore-HEAD-timestamp-origina…
JacksonTheMaster Aug 22, 2025
094e305
add simple backup refresh button to the backup manager UI
JacksonTheMaster Aug 22, 2025
173eff8
refactor: update InstallAndRunSteamCMD to return exit status and erro…
JacksonTheMaster Aug 22, 2025
2f46165
removed unused script.js
JacksonTheMaster Aug 22, 2025
da40185
moved info notice css to its own file
JacksonTheMaster Aug 23, 2025
e67541e
added universal popup (currently only for steamcmd button)
JacksonTheMaster Aug 23, 2025
67412b3
improved main console tab button layout slightly
JacksonTheMaster Aug 23, 2025
9f1719a
corrected info-notice css
JacksonTheMaster Aug 23, 2025
6219f91
enhanced SteamServerUI info-notice:
JacksonTheMaster Aug 23, 2025
2cd10a2
fix double dot in UI Text "Proprietary License"
JacksonTheMaster Aug 23, 2025
998d1c9
UI: add animation to backup items and add ... to running SteamCMD sta…
JacksonTheMaster Aug 23, 2025
834f366
add Discord Rich Presence integration
JacksonTheMaster Aug 23, 2025
e8abf39
update go version to 1.25.0 (2025-08-12)
JacksonTheMaster Aug 23, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 25 additions & 8 deletions UIMod/onboard_bundled/assets/css/home.css
Original file line number Diff line number Diff line change
Expand Up @@ -204,6 +204,7 @@

/* Backups */
#backups {
position: relative;
margin-top: 40px;
background-color: rgba(0, 255, 171, 0.05);
padding: 20px;
Expand All @@ -216,6 +217,19 @@
transform: translateY(-2px);
}

#backupRefreshButton {
position: absolute;
top: 20px;
right: 20px;
padding: 5px 10px;
font-size: 1.3rem;
width: 40px;
height: 40px;
display: flex;
align-items: center;
justify-content: center;
}

.backup-item {
background-color: rgba(0, 0, 0, 0.4);
padding: 15px;
Expand All @@ -229,7 +243,11 @@
line-height: 1.6;
}

.backup-item:hover {
.backup-item.animate-in {
animation: slideIn 0.5s ease-out forwards;
}

.backup-item:hover, .backup-item.animate-in:hover {
background-color: rgba(0, 0, 0, 0.6);
border-color: var(--primary);
transform: translateX(5px);
Expand All @@ -252,14 +270,13 @@
color: #000;
}

@keyframes blink {

0%,
@keyframes slideIn {
0% {
opacity: 0;
transform: scale(0.95) translateX(-20px);
}
100% {
opacity: 1;
}

50% {
opacity: 0;
transform: scale(1) translateX(0);
}
}
108 changes: 108 additions & 0 deletions UIMod/onboard_bundled/assets/css/info-notice.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
.info-notice {
border: 1px solid #4a90e2;
border-radius: 8px;
padding: 15px;
margin: 15px 0;
background: rgba(74, 144, 226, 0.1);
color: #e0e0e0;
box-shadow: 0 2px 8px rgba(74, 144, 226, 0.2);
}

.info-notice h3 {
margin: 0;
font-size: 1.1em;
display: flex;
align-items: center;
gap: 8px;
color: #4a90e2;
cursor: pointer;
}

.info-notice h3::after {
content: '▶';
font-size: 0.9em;
transition: transform 0.2s ease;
}

.info-notice.open h3::after {
transform: rotate(90deg);
}

.info-notice .collapsible-content {
display: none;
margin-top: 12px;
}

.info-notice.open .collapsible-content {
display: block;
}

.info-notice p {
margin: 8px 0;
line-height: 1.4;
font-size: 0.9em;
}

.info-notice a {
color: #4a90e2;
text-decoration: underline;
}

.info-notice a:hover {
color: #7bb3f0;
}

.notice-icon {
display: inline-block;
font-size: 1.1em;
}

.update {
border: 1px solid #af534c;
border-radius: 8px;
padding: 12px;
margin: 10px 0;
background: #784a47;
color: #c8e6c9;
box-shadow: 0 2px 6px rgba(76, 175, 80, 0.2);
}

.update h3 {
margin: 0 0 8px 0;
font-size: 1em;
display: flex;
align-items: center;
gap: 6px;
color: #4caf50;
}

.update p {
margin: 5px 0;
font-size: 0.85em;
line-height: 1.3;
}

.status-good {
color: #4caf50;
font-weight: 600;
}

@media (max-width: 768px) {
.info-notice {
margin: 10px 5px;
padding: 12px;
}

.info-notice h3 {
font-size: 1em;
}

.info-notice p {
font-size: 0.85em;
}

.positive-update {
margin: 8px 5px;
padding: 10px;
}
}
78 changes: 78 additions & 0 deletions UIMod/onboard_bundled/assets/css/popup.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
@import '/static/css/variables.css';

.popup {
display: none;
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.6);
backdrop-filter: blur(8px);
justify-content: center;
align-items: center;
z-index: 1000;
}

.popup-content {
background-color: var(--bg-dark);
padding: 20px;
border-radius: 10px;
text-align: center;
max-width: 30vw;
box-shadow: 0 5px 30px var(--primary-glow);
overflow: hidden;
}
.popup-content h2 {
margin: 10px 0;
font-size: 1.5em;
}

.popup-content p {
margin: 10px 0;
}

.popup-content button {
margin-top: 15px;
padding: 10px 20px;
color: white;
border: none;
border-radius: 3px;
cursor: pointer;
}

.popup.error .popup-content {
border-left: 2px solid #ff4d4d;
}

.popup.error button {
background-color: #ff4d4d;
}

.popup.error button:hover {
background-color: #e60000;
}

.popup.success .popup-content {
border-left: 2px solid #28a745;
}

.popup.success button {
background-color: #28a745;
}

.popup.success button:hover {
background-color: #218838;
}

.popup.info .popup-content {
border-left: 2px solid #17a2b8;
}

.popup.info button {
background-color: #17a2b8;
}

.popup.info button:hover {
background-color: #138496;
}
8 changes: 4 additions & 4 deletions UIMod/onboard_bundled/assets/css/tabs.css
Original file line number Diff line number Diff line change
Expand Up @@ -7,34 +7,34 @@

.tab-buttons {
display: flex;
border-bottom: 2px solid var(--primary);
margin-bottom: 0;
}

.tab-button {
background: rgba(0, 0, 0, 0.3);
border: 2px solid var(--primary-dim);
border-bottom: none;
border-bottom: 2px solid #00000000;
padding: 10px 20px;
margin-right: 5px;
color: var(--primary);
cursor: pointer;
border-radius: 8px 8px 0 0;
border-radius: 8px 8px 8px 8px;
opacity: 0.7;
transition: all var(--transition-normal);
font-size: 0.9rem;
margin-bottom: -2px;
}

.tab-button:hover {
background-color: rgba(0, 255, 171, 0.1);
box-shadow: 0 -4px 10px rgba(0, 255, 171, 0.3);
border-bottom: 2px solid var(--primary-dim);
}

.tab-button.active {
background-color: rgba(0, 255, 171, 0.2);
opacity: 1;
box-shadow: 0 -4px 10px rgba(0, 255, 171, 0.5);
border-color: var(--primary);
}

.tab-content {
Expand Down
34 changes: 34 additions & 0 deletions UIMod/onboard_bundled/assets/js/popup.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
function showPopup(status, message) {
const popup = document.getElementById('universalPopup');
const popupTitle = document.getElementById('popupTitle');
const popupMessage = document.getElementById('popupMessage');

popup.className = 'popup';
popupTitle.textContent = '';
popupMessage.textContent = message;

switch(status.toLowerCase()) {
case 'error':
popup.classList.add('error');
popupTitle.textContent = 'Error';
break;
case 'success':
popup.classList.add('success');
popupTitle.textContent = 'Success';
break;
case 'info':
popup.classList.add('info');
popupTitle.textContent = 'Info';
break;
default:
popup.classList.add('info');
popupTitle.textContent = 'Info';
}

popup.style.display = 'flex';
}

function closePopup() {
const popup = document.getElementById('universalPopup');
popup.style.display = 'none';
}
16 changes: 10 additions & 6 deletions UIMod/onboard_bundled/assets/js/server-api.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,11 @@ function toggleServer(endpoint) {
function triggerSteamCMD() {
const status = document.getElementById('status');
status.hidden = false;
typeTextWithCallback(status, 'Triggering SteamCMD, please wait. SteamCMD will print log output only to the CLI ', 20, () => {
typeTextWithCallback(status, 'Running SteamCMD, please wait... ', 20, () => {
fetch('/api/v2/steamcmd/run')
.then(response => response.json())
.then(data => {
typeTextWithCallback(status, data.message, 20, () => {
setTimeout(() => status.hidden = true, 10000);
});
showPopup("info", data.message);
})
.catch(err => {
typeTextWithCallback(status, 'Error: Failed to trigger SteamCMD', 20, () => {
Expand All @@ -42,7 +40,6 @@ function triggerSteamCMD() {
});
}

// Backup management
function fetchBackups() {
fetch('/api/v2/backups?mode=classic')
.then(response => response.text())
Expand All @@ -53,11 +50,18 @@ function fetchBackups() {
if (data.trim() === "No valid backup files found.") {
backupList.textContent = data;
} else {
data.split('\n').filter(Boolean).forEach(backup => {
let animationCount = 0; // Track number of animated items
data.split('\n').filter(Boolean).forEach((backup) => {
const li = document.createElement('li');
li.className = 'backup-item';
li.innerHTML = `${backup} <button onclick="restoreBackup(${extractIndex(backup)})">Restore</button>`;
backupList.appendChild(li);
if (animationCount < 20) {
setTimeout(() => {
li.classList.add('animate-in');
}, animationCount * 100);
animationCount++;
}
});
}
})
Expand Down
9 changes: 8 additions & 1 deletion UIMod/onboard_bundled/assets/js/ui-utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -81,4 +81,11 @@ function getEventClassName(eventText) {
return checks.find(([text, , condition]) =>
condition ? eventText.includes(text) && eventText.includes(condition) : eventText.includes(text)
)?.[1] || '';
}
}

document.querySelectorAll('.info-notice h3').forEach(header => {
header.addEventListener('click', () => {
const notice = header.parentElement;
notice.classList.toggle('open');
});
});
Loading
Loading