Files
OliveTin/webui.dev/main.js
James Read 1d446ace04 custom-webui and faster theme loading (#262)
* feature: custom-webui and faster theme loading

* feature: custom-webui and faster theme loading
2024-04-09 08:26:18 +00:00

153 lines
4.1 KiB
JavaScript

'use strict'
import {
initMarshaller,
setupSectionNavigation,
marshalDashboardComponentsJsonToHtml,
marshalLogsJsonToHtml
} from './js/marshaller.js'
import { checkWebsocketConnection } from './js/websocket.js'
function searchLogs (e) {
document.getElementById('searchLogsClear').disabled = false
const searchText = e.target.value.toLowerCase()
for (const row of document.querySelectorAll('tr.log-row')) {
const actionTitle = row.getAttribute('title').toLowerCase()
row.hidden = !actionTitle.includes(searchText)
}
}
function searchLogsClear () {
for (const row of document.querySelectorAll('tr.log-row')) {
row.hidden = false
}
document.getElementById('searchLogsClear').disabled = true
document.getElementById('logSearchBox').value = ''
}
function setupLogSearchBox () {
document.getElementById('logSearchBox').oninput = searchLogs
document.getElementById('searchLogsClear').onclick = searchLogsClear
}
function refreshLoop () {
if (window.websocketAvailable) {
// Websocket updates are streamed live, not updated on a loop.
} else if (window.restAvailable) {
// Fallback to rest, but try to reconnect the websocket anyway.
fetchGetDashboardComponents()
fetchGetLogs()
checkWebsocketConnection()
} else {
// Still try to fetch the dashboard, if successfull window.restAvailable = true
fetchGetDashboardComponents()
}
refreshServerConnectionLabel()
}
function refreshServerConnectionLabel () {
if (window.restAvailable) {
document.querySelector('#serverConnectionRest').classList.remove('error')
} else {
document.querySelector('#serverConnectionRest').classList.add('error')
}
if (window.websocketAvailable) {
document.querySelector('#serverConnectionWebSocket').classList.remove('error')
} else {
document.querySelector('#serverConnectionWebSocket').classList.add('error')
}
}
function fetchGetDashboardComponents () {
window.fetch(window.restBaseUrl + 'GetDashboardComponents', {
cors: 'cors'
}).then(res => {
return res.json()
}).then(res => {
if (!window.restAvailable) {
window.clearBigErrors()
}
window.restAvailable = true
marshalDashboardComponentsJsonToHtml(res)
refreshServerConnectionLabel() // in-case it changed, update the label quicker
}).catch((err) => { // err is 1st arg
window.restAvailable = false
window.showBigError('fetch-buttons', 'getting buttons', err, false)
})
}
function fetchGetLogs () {
window.fetch(window.restBaseUrl + 'GetLogs', {
cors: 'cors'
}).then(res => {
return res.json()
}).then(res => {
marshalLogsJsonToHtml(res)
}).catch(err => {
window.showBigError('fetch-buttons', 'getting buttons', err, false)
})
}
function processWebuiSettingsJson (settings) {
setupSectionNavigation(settings.SectionNavigationStyle)
window.restBaseUrl = settings.Rest
document.querySelector('#currentVersion').innerText = settings.CurrentVersion
if (settings.ShowNewVersions && settings.AvailableVersion !== 'none') {
document.querySelector('#available-version').innerText = 'New Version Available: ' + settings.AvailableVersion
document.querySelector('#available-version').hidden = false
}
if (!settings.ShowNavigation) {
document.querySelector('header').style.display = 'none'
}
if (!settings.ShowFooter) {
document.querySelector('footer[title="footer"]').style.display = 'none'
}
window.pageTitle = 'OliveTin'
if (settings.PageTitle) {
window.pageTitle = settings.PageTitle
document.title = window.pageTitle
const titleElem = document.querySelector('#page-title')
if (titleElem) titleElem.innerText = window.pageTitle
}
}
function main () {
initMarshaller()
setupLogSearchBox()
window.fetch('webUiSettings.json').then(res => {
return res.json()
}).then(res => {
processWebuiSettingsJson(res)
window.restAvailable = true
window.refreshLoop = refreshLoop
window.refreshLoop()
setInterval(refreshLoop, 3000)
}).catch(err => {
window.showBigError('fetch-webui-settings', 'getting webui settings', err)
})
}
main() // call self