spotlight.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. const makeClusterButton = document.getElementById("makeCluster")
  2. let numClusters
  3. let clusters = {}
  4. let occupiedLamps = Array()
  5. let chosenShelves = Array()
  6. let chosenCluster = -1
  7. function getEByID(id) {
  8. return document.getElementById(id)
  9. }
  10. function shelfClick(id) {
  11. const clickedShelf = getEByID("b" + id.toString())
  12. console.log(chosenCluster >= 0)
  13. if (chosenCluster >= 0) {
  14. unselectAll()
  15. }
  16. chosenCluster = -1
  17. if (!occupiedLamps.includes(id)) { //If not id in clusters
  18. if (chosenShelves.includes(id)) { //If id in chosenShelves
  19. chosenShelves = chosenShelves.filter(e => {
  20. return e !== id;
  21. })
  22. clickedShelf.classList.remove("selected")
  23. clickedShelf.innerText = ""
  24. } else { //Else (if id not in chosenShelves
  25. chosenShelves.push(id)
  26. clickedShelf.classList.add("selected")
  27. }
  28. }
  29. chosenShelves.forEach((id, num) => {
  30. getEByID("b" + id.toString()).innerText = (num + 1).toString()
  31. })
  32. if (chosenShelves.length > 0) {
  33. makeClusterButton.classList.remove("hidden")
  34. } else {
  35. makeClusterButton.classList.add("hidden")
  36. }
  37. }
  38. function unselectAll() {
  39. chosenCluster = -1
  40. chosenShelves.forEach(id => {
  41. getEByID("b" + id.toString()).innerText = ""
  42. getEByID("b" + id.toString()).classList.remove("selected")
  43. })
  44. chosenShelves = Array()
  45. makeClusterButton.classList.add("hidden")
  46. }
  47. function createCluster() {
  48. const shelves = JSON.stringify(chosenShelves)
  49. const numLights = chosenShelves.length
  50. const sendDict = {
  51. ["numLights"]: numLights,
  52. ["lights"]: shelves
  53. }
  54. console.log(JSON.stringify(sendDict))
  55. sendWebRequest("http://192.168.1.170/api/create_cluster", JSON.stringify(sendDict), "POST")
  56. }
  57. window.onkeydown = function (event) {
  58. if (event.key === "Escape") {
  59. unselectAll()
  60. }
  61. }
  62. function deleteCluster() {
  63. if (chosenCluster >= 0) {
  64. const sendDict = {
  65. ["cluster"]: chosenCluster,
  66. }
  67. sendWebRequest("http://192.168.1.170/api/delete_cluster", JSON.stringify(sendDict), "POST")
  68. }
  69. }
  70. function sendWebRequest(url, data, method) {
  71. /*const Http = new XMLHttpRequest()
  72. Http.open(method, url)
  73. Http.setRequestHeader("data", data)
  74. Http.send()
  75. Http.onreadystatechange = (e) => {
  76. console.log(Http.responseText)
  77. }*/
  78. fetch(url, {
  79. method: method,
  80. headers: new Headers({'data': data}),
  81. //mode: 'no-cors'
  82. })
  83. .then(res => {
  84. console.log(res)
  85. //updateConfig()
  86. })
  87. }
  88. function updateConfig() {
  89. unselectAll()
  90. fetch("http://192.168.1.170/api/get_config")
  91. .then(response => response.json())
  92. .then(data => {
  93. console.log(data)
  94. numClusters = data["numClusters"]
  95. clusters = data["clusters"]
  96. occupiedLamps = Array()
  97. let id = -1
  98. for (const cluster of data.clusters) {
  99. id++
  100. for (let lamp of cluster.lights) {
  101. occupiedLamps.push(lamp)
  102. }
  103. const clusterButton = document.createElement("button")
  104. clusterButton.innerText = (id+1).toString()
  105. clusterButton.onclick = function () {
  106. unselectAll()
  107. clusterButton.classList.add("selected")
  108. chosenCluster = id
  109. let lampId = 0
  110. for (let lamp of cluster.lights) {
  111. console.log(lamp)
  112. getEByID("b" + lamp.toString()).classList.add("selected")
  113. getEByID("b" + lamp.toString()).innerText = (lampId+1).toString()
  114. lampId += 1
  115. }
  116. chosenShelves = cluster.lights
  117. }
  118. getEByID("clusters").appendChild(clusterButton)
  119. }
  120. })
  121. }
  122. updateConfig()