spotlight.js 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  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. let clusterName = "Inte vald"
  8. function getEByID(id) {
  9. return document.getElementById(id)
  10. }
  11. function shelfClick(id) {
  12. const clickedShelf = getEByID("b" + id.toString())
  13. console.log(chosenCluster >= 0)
  14. if (chosenCluster >= 0) {
  15. unselectAll()
  16. }
  17. chosenCluster = -1
  18. if (!occupiedLamps.includes(id)) { //If not id in clusters
  19. if (chosenShelves.includes(id)) { //If id in chosenShelves
  20. chosenShelves = chosenShelves.filter(e => {
  21. return e !== id;
  22. })
  23. clickedShelf.classList.remove("selected")
  24. clickedShelf.innerText = ""
  25. } else { //Else (if id not in chosenShelves
  26. chosenShelves.push(id)
  27. clickedShelf.classList.add("selected")
  28. }
  29. }
  30. chosenShelves.forEach((id, num) => {
  31. getEByID("b" + id.toString()).innerText = (num + 1).toString()
  32. })
  33. if (chosenShelves.length > 0) {
  34. makeClusterButton.classList.remove("hidden")
  35. } else {
  36. makeClusterButton.classList.add("hidden")
  37. }
  38. }
  39. function createCluster() {
  40. const shelves = chosenShelves
  41. const numLights = chosenShelves.length
  42. const sendDict = {
  43. ["numLights"]: numLights,
  44. ["lights"]: shelves
  45. }
  46. console.log(JSON.stringify(sendDict))
  47. sendWebRequest("http://192.168.1.170/api/create_cluster", JSON.stringify(sendDict), "POST")
  48. }
  49. window.onkeydown = function (event) {
  50. if (event.key === "Escape") {
  51. unselectAll()
  52. }
  53. }
  54. function deleteCluster() {
  55. if (chosenCluster >= 0) {
  56. const sendDict = {
  57. ["cluster"]: chosenCluster,
  58. }
  59. chosenCluster = -1
  60. sendWebRequest("http://192.168.1.170/api/delete_cluster", JSON.stringify(sendDict), "POST")
  61. }
  62. }
  63. function changeAnimation(animId) {
  64. const sendDict = {
  65. ["targetCluster"]: chosenCluster,
  66. ["animation"]: animId
  67. }
  68. console.log(JSON.stringify(sendDict))
  69. sendWebRequest("http://192.168.1.170/api/change_animation", JSON.stringify(sendDict), "POST")
  70. }
  71. function changeVar(value, setting) {
  72. let sendValue = 0
  73. if (value.substring(0,2) === "0x") {
  74. sendValue = parseInt(value, 16);
  75. } else if (value.substring(0,2) === "0c") {
  76. const r = parseInt(value.substring(2, 5));
  77. const g = parseInt(value.substring(5, 8));
  78. const b = parseInt(value.substring(8, 11));
  79. const w = parseInt(value.substring(11, 15));
  80. //console.log(r, g, b, w)
  81. sendValue = ((r << 24) + (g << 16) + (b << 8) + w) >>>0
  82. //console.log(sendValue)
  83. //console.log((sendValue >>> 0).toString(2))
  84. } else if (value.substring(0,2) === "0t") {
  85. const lowAndHigh = value.split(":")
  86. const lowTime = parseInt(lowAndHigh[0]);
  87. const highTime = parseInt(lowAndHigh[1]);
  88. sendValue = (lowTime << 16) + highTime >>>0
  89. } else {
  90. sendValue = Number(value)
  91. }
  92. if (!isNaN(sendValue) && sendValue >= 0) {
  93. const sendDict = {
  94. ["targetCluster"]: chosenCluster,
  95. ["newValue"]: sendValue,
  96. ["setting"]: setting
  97. }
  98. console.log(JSON.stringify(sendDict))
  99. sendWebRequest("http://192.168.1.170/api/change_setting", JSON.stringify(sendDict), "POST")
  100. }
  101. }
  102. function sendWebRequest(url, data, method) {
  103. /*const Http = new XMLHttpRequest()
  104. Http.open(method, url)
  105. Http.setRequestHeader("data", data)
  106. Http.send()
  107. Http.onreadystatechange = (e) => {
  108. console.log(Http.responseText)
  109. }*/
  110. fetch(url, {
  111. method: method,
  112. headers: new Headers({'data': data}),
  113. //mode: 'no-cors'
  114. })
  115. .then(res => {
  116. console.log(res)
  117. updateConfig()
  118. })
  119. }
  120. function chooseCluster(id) {
  121. if (id < 0) {
  122. return
  123. }
  124. unselectAll()
  125. getEByID("c" + id.toString()).classList.add("selected")
  126. chosenCluster = id
  127. let lampId = 0
  128. for (let lamp of clusters[id].lights) {
  129. console.log(lamp)
  130. getEByID("b" + lamp.toString()).classList.add("selected")
  131. getEByID("b" + lamp.toString()).innerText = (lampId + 1).toString()
  132. lampId += 1
  133. }
  134. getEByID("a" + clusters[id]["animation"].toString()).classList.add("selected")
  135. chosenShelves = clusters[id].lights
  136. }
  137. function unselectAll() {
  138. chosenCluster = -1
  139. chosenShelves.forEach(id => {
  140. getEByID("b" + id.toString()).innerText = ""
  141. getEByID("b" + id.toString()).classList.remove("selected")
  142. })
  143. const clustHTML = getEByID("clusters").children
  144. for (let b of clustHTML) {
  145. b.classList.remove("selected")
  146. }
  147. const animHTML = getEByID("spotlightAnimations").children
  148. for (let b of animHTML) {
  149. b.classList.remove("selected")
  150. }
  151. chosenShelves = Array()
  152. makeClusterButton.classList.add("hidden")
  153. }
  154. function updateConfig() {
  155. const preSelectCluster = chosenCluster
  156. unselectAll()
  157. fetch("http://192.168.1.170/api/get_config")
  158. .then(response => response.json())
  159. .then(data => {
  160. console.log(data)
  161. numClusters = data["numClusters"]
  162. clusters = data["clusters"]
  163. while (getEByID("clusters").firstChild) {
  164. getEByID("clusters").lastChild.remove()
  165. }
  166. occupiedLamps = Array()
  167. let id = -1
  168. for (const cluster of data.clusters) {
  169. id++
  170. for (let lamp of cluster.lights) {
  171. occupiedLamps.push(lamp)
  172. }
  173. let clusterButton = document.createElement("button")
  174. clusterButton.innerText = (id + 1).toString()
  175. clusterButton.id = "c" + id.toString()
  176. clusterButton.setAttribute("onclick", "chooseCluster(" + id.toString() + ")")
  177. getEByID("clusters").appendChild(clusterButton)
  178. }
  179. chosenCluster = preSelectCluster
  180. chooseCluster(chosenCluster)
  181. })
  182. }
  183. updateConfig()