main.js 4.0 KB

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