spotlight.js 6.4 KB

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