4
0

main.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. 'use strict'
  2. import {
  3. initMarshaller,
  4. setupSectionNavigation,
  5. marshalDashboardComponentsJsonToHtml,
  6. marshalLogsJsonToHtml
  7. } from './js/marshaller.js'
  8. import { checkWebsocketConnection } from './js/websocket.js'
  9. function searchLogs (e) {
  10. document.getElementById('searchLogsClear').disabled = false
  11. const searchText = e.target.value.toLowerCase()
  12. for (const row of document.querySelectorAll('tr.log-row')) {
  13. const actionTitle = row.getAttribute('title').toLowerCase()
  14. row.hidden = !actionTitle.includes(searchText)
  15. }
  16. }
  17. function searchLogsClear () {
  18. for (const row of document.querySelectorAll('tr.log-row')) {
  19. row.hidden = false
  20. }
  21. document.getElementById('searchLogsClear').disabled = true
  22. document.getElementById('logSearchBox').value = ''
  23. }
  24. function setupLogSearchBox () {
  25. document.getElementById('logSearchBox').oninput = searchLogs
  26. document.getElementById('searchLogsClear').onclick = searchLogsClear
  27. }
  28. function refreshLoop () {
  29. if (window.websocketAvailable) {
  30. // Websocket updates are streamed live, not updated on a loop.
  31. } else if (window.restAvailable) {
  32. // Fallback to rest, but try to reconnect the websocket anyway.
  33. fetchGetDashboardComponents()
  34. fetchGetLogs()
  35. checkWebsocketConnection()
  36. } else {
  37. // Still try to fetch the dashboard, if successfull window.restAvailable = true
  38. fetchGetDashboardComponents()
  39. }
  40. refreshServerConnectionLabel()
  41. }
  42. function refreshServerConnectionLabel () {
  43. if (window.restAvailable) {
  44. document.querySelector('#serverConnectionRest').classList.remove('error')
  45. } else {
  46. document.querySelector('#serverConnectionRest').classList.add('error')
  47. }
  48. if (window.websocketAvailable) {
  49. document.querySelector('#serverConnectionWebSocket').classList.remove('error')
  50. } else {
  51. document.querySelector('#serverConnectionWebSocket').classList.add('error')
  52. }
  53. }
  54. function fetchGetDashboardComponents () {
  55. window.fetch(window.restBaseUrl + 'GetDashboardComponents', {
  56. cors: 'cors'
  57. }).then(res => {
  58. return res.json()
  59. }).then(res => {
  60. if (!window.restAvailable) {
  61. window.clearBigErrors()
  62. }
  63. window.restAvailable = true
  64. marshalDashboardComponentsJsonToHtml(res)
  65. refreshServerConnectionLabel() // in-case it changed, update the label quicker
  66. }).catch((err) => { // err is 1st arg
  67. window.restAvailable = false
  68. window.showBigError('fetch-buttons', 'getting buttons', err, false)
  69. })
  70. }
  71. function fetchGetLogs () {
  72. window.fetch(window.restBaseUrl + 'GetLogs', {
  73. cors: 'cors'
  74. }).then(res => {
  75. return res.json()
  76. }).then(res => {
  77. marshalLogsJsonToHtml(res)
  78. }).catch(err => {
  79. window.showBigError('fetch-buttons', 'getting buttons', err, false)
  80. })
  81. }
  82. function processWebuiSettingsJson (settings) {
  83. setupSectionNavigation(settings.SectionNavigationStyle)
  84. window.restBaseUrl = settings.Rest
  85. document.querySelector('#currentVersion').innerText = settings.CurrentVersion
  86. if (settings.ShowNewVersions && settings.AvailableVersion !== 'none') {
  87. document.querySelector('#available-version').innerText = 'New Version Available: ' + settings.AvailableVersion
  88. document.querySelector('#available-version').hidden = false
  89. }
  90. if (!settings.ShowNavigation) {
  91. document.querySelector('header').style.display = 'none'
  92. }
  93. if (!settings.ShowFooter) {
  94. document.querySelector('footer[title="footer"]').style.display = 'none'
  95. }
  96. window.pageTitle = 'OliveTin'
  97. if (settings.PageTitle) {
  98. window.pageTitle = settings.PageTitle
  99. document.title = window.pageTitle
  100. const titleElem = document.querySelector('#page-title')
  101. if (titleElem) titleElem.innerText = window.pageTitle
  102. }
  103. }
  104. function main () {
  105. initMarshaller()
  106. setupLogSearchBox()
  107. window.addEventListener('EventConfigChanged', fetchGetDashboardComponents) // For websocket
  108. window.fetch('webUiSettings.json').then(res => {
  109. return res.json()
  110. }).then(res => {
  111. processWebuiSettingsJson(res)
  112. window.restAvailable = true
  113. window.refreshLoop = refreshLoop
  114. window.refreshLoop()
  115. setInterval(refreshLoop, 3000)
  116. }).catch(err => {
  117. window.showBigError('fetch-webui-settings', 'getting webui settings', err)
  118. })
  119. }
  120. main() // call self