main.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. 'use strict'
  2. import { marshalActionButtonsJsonToHtml, marshalLogsJsonToHtml } from './js/marshaller.js'
  3. import { checkWebsocketConnection } from './js/websocket.js'
  4. function showSection (name) {
  5. for (const otherName of ['Actions', 'Logs']) {
  6. document.getElementById('show' + otherName).classList.remove('activeSection')
  7. document.getElementById('content' + otherName).hidden = true
  8. }
  9. document.getElementById('show' + name).classList.add('activeSection')
  10. document.getElementById('content' + name).hidden = false
  11. }
  12. function setupSections () {
  13. document.getElementById('showActions').onclick = () => { showSection('Actions') }
  14. document.getElementById('showLogs').onclick = () => { showSection('Logs') }
  15. showSection('Actions')
  16. }
  17. function refreshLoop () {
  18. if (window.websocketAvailable) {
  19. document.querySelector('#serverConnection').classList.remove('error')
  20. document.querySelector('#serverConnection').innerText = 'websocket'
  21. // Websocket updates are streamed live, not updated on a loop.
  22. } else if (window.restAvailable) {
  23. // Fallback to rest, but try to reconnect the websocket anyway.
  24. fetchGetDashboardComponents()
  25. checkWebsocketConnection()
  26. document.querySelector('#serverConnection').classList.remove('error')
  27. document.querySelector('#serverConnection').innerText = 'rest'
  28. fetchGetLogs()
  29. } else {
  30. document.querySelector('#serverConnection').innerText = 'disconnected, trying to reconnect...'
  31. document.querySelector('#serverConnection').classList.add('error')
  32. // Still try to fetch the dashboard, if successfull window.restAvailable = true
  33. fetchGetDashboardComponents()
  34. }
  35. }
  36. function fetchGetDashboardComponents () {
  37. window.fetch(window.restBaseUrl + 'GetDashboardComponents', {
  38. cors: 'cors'
  39. }).then(res => {
  40. return res.json()
  41. }).then(res => {
  42. window.restAvailable = true
  43. marshalActionButtonsJsonToHtml(res)
  44. }).catch(() => { // err is 1st arg
  45. window.restAvailable = false
  46. // window.showBigError('fetch-buttons', 'getting buttons', err, 'blat')
  47. })
  48. }
  49. function fetchGetLogs () {
  50. window.fetch(window.restBaseUrl + 'GetLogs', {
  51. cors: 'cors'
  52. }).then(res => {
  53. return res.json()
  54. }).then(res => {
  55. marshalLogsJsonToHtml(res)
  56. }).catch(err => {
  57. window.showBigError('fetch-buttons', 'getting buttons', err, 'blat')
  58. })
  59. }
  60. function processWebuiSettingsJson (settings) {
  61. window.restBaseUrl = settings.Rest
  62. if (settings.ThemeName) {
  63. const themeCss = document.createElement('link')
  64. themeCss.setAttribute('rel', 'stylesheet')
  65. themeCss.setAttribute('type', 'text/css')
  66. themeCss.setAttribute('href', '/themes/' + settings.ThemeName + '/theme.css')
  67. document.head.appendChild(themeCss)
  68. }
  69. document.querySelector('#currentVersion').innerText = settings.CurrentVersion
  70. if (settings.ShowNewVersions && settings.AvailableVersion !== 'none') {
  71. document.querySelector('#available-version').innerText = 'New Version Available: ' + settings.AvailableVersion
  72. document.querySelector('#available-version').hidden = false
  73. }
  74. document.querySelector('#perma-widget').hidden = !settings.ShowNavigation
  75. document.querySelector('footer[title="footer"]').hidden = !settings.ShowFooter
  76. if (settings.PageTitle) {
  77. document.title = settings.PageTitle
  78. const titleElem = document.querySelector('#page-title')
  79. if (titleElem) titleElem.innerText = settings.PageTitle
  80. }
  81. }
  82. function main () {
  83. setupSections()
  84. window.fetch('webUiSettings.json').then(res => {
  85. return res.json()
  86. }).then(res => {
  87. processWebuiSettingsJson(res)
  88. window.restAvailable = true
  89. window.refreshLoop = refreshLoop
  90. window.refreshLoop()
  91. setInterval(refreshLoop, 3000)
  92. }).catch(err => {
  93. window.showBigError('fetch-webui-settings', 'getting webui settings', err)
  94. })
  95. }
  96. main() // call self