Darken navbar active slightly for more contrast, move mirobot script to a file
authorNick Downing <nick.downing@lifx.co>
Wed, 18 Mar 2020 16:48:54 +0000 (03:48 +1100)
committerNick Downing <nick.downing@lifx.co>
Wed, 18 Mar 2020 16:48:54 +0000 (03:48 +1100)
css/bootstrap/variables.less
js/mirobot.js.min [new file with mode: 0644]
navbar.jst

index 48270b5..e15370b 100644 (file)
 @navbar-default-link-hover-color:          #333; //#000; // Nick #333;
 @navbar-default-link-hover-bg:             #ccc; // Nick transparent;
 @navbar-default-link-active-color:         #fff; // Nick #555;
-@navbar-default-link-active-bg:            #ccc; //darken(@navbar-default-bg, 6.5%);
+@navbar-default-link-active-bg:            #888; //darken(@navbar-default-bg, 6.5%);
 @navbar-default-link-disabled-color:       #ccc;
 @navbar-default-link-disabled-bg:          transparent;
 
diff --git a/js/mirobot.js.min b/js/mirobot.js.min
new file mode 100644 (file)
index 0000000..b23436e
--- /dev/null
@@ -0,0 +1,190 @@
+let sleep = ms => {
+  return new Promise(resolve => setTimeout(resolve, ms));
+}
+
+let rx_active = false
+let rx_cont = false
+let rx_buf = ''
+let rx_task = async device => {
+  console.log('rx_task')
+  rx_active = true
+  try {
+    while (rx_cont) {
+      transfer_result = await device.transferIn(2, 1)
+      //console.log('transfer_result', transfer_result)
+      if (transfer_result.status === 'ok')
+        for (let i = 0; i < transfer_result.data.byteLength; ++i) {
+          if (rx_buf.length >= 1024) {
+            console.log('rx_task overrun')
+            break
+          }
+          rx_buf += String.fromCharCode(
+            transfer_result.data.getUint8(0)
+          )
+        }
+    }
+  }
+  catch (err) {
+    console.log('rx_task err', err.message)
+  }
+  console.log('rx_task done')
+  rx_active = false
+}
+let rx_stop = async () => {
+  console.log('rx_stop')
+  rx_cont = false
+  while (rx_active)
+    await sleep(100)
+  console.log('rx_stop done')
+}
+
+let tx_immediate = async (device, text) => {
+  console.log('tx_immediate', text)
+  data = new Uint8Array(text.length);
+  for (var i = 0; i < text.length; ++i)
+    data[i] = text.charCodeAt(i);
+  await device.transferOut(2, data.buffer)
+}
+
+document.addEventListener(
+  'DOMContentLoaded',
+  () => {
+    let device, device_busy = false
+    let axes = [
+      {
+        slider: document.getElementById("slider-a"),
+        value: document.getElementById("value-a"),
+        min_degrees: -90,
+        min_position: 14578,
+        max_degrees: 90,
+        max_position: 35733
+      },
+      {
+        slider: document.getElementById("slider-b"),
+        value: document.getElementById("value-b"),
+        min_degrees: -50,
+        min_position: 31031.88888888889,
+        max_degrees: 75,
+        max_position: 16340.91666666667
+      },
+      {
+        slider: document.getElementById("slider-c"),
+        value: document.getElementById("value-c"),
+        min_degrees: 0,
+        min_position: 25155.5,
+        max_degrees: 90,
+        max_position: 14578
+      },
+      {
+        slider: document.getElementById("slider-d"),
+        value: document.getElementById("value-d"),
+        min_degrees: -45,
+        min_position: 30444.25,
+        max_degrees: 45,
+        max_position: 19866.75
+      },
+      {
+        slider: document.getElementById("slider-e"),
+        value: document.getElementById("value-e"),
+        min_degrees: -45,
+        min_position: 30444.25,
+        max_degrees: 45,
+        max_position: 19866.75
+      },
+      {
+        slider: document.getElementById("slider-f"),
+        value: document.getElementById("value-f"),
+        min_degrees: 0,
+        min_position: 25155.5,
+        max_degrees: 60,
+        max_position: 18103.833333333333
+      }
+    ]
+    for (let i = 0; i < axes.length; ++i) {
+      axes[i].value.innerHTML = axes[i].slider.value
+
+      let axis = i
+      axes[i].slider.oninput = function() {
+        axes[axis].value.innerHTML = this.value
+        if (device && !device_busy) {
+          axes[axis].position =
+            Math.round(axes[axis].min_position +
+              (this.value - axes[axis].min_degrees) *
+              (axes[axis].max_position - axes[axis].min_position) /
+              (axes[axis].max_degrees - axes[axis].min_degrees))
+          tx_immediate(
+            device,
+            `${String.fromCharCode(97 + axis)}32000 ${String.fromCharCode(65 + axis)}${axes[axis].position}\n`
+          )
+        }
+      }
+    }
+
+    document.getElementById('connect-disconnect').addEventListener(
+      'click',
+      () => {
+        ;(
+          async () => {
+            if (!device_busy) {
+              device_busy = true
+              if (device === undefined) {
+                // connect request
+                try {
+                  device = await navigator.usb.requestDevice(
+                    {filters: [{vendorId: 0x1a86, productId: 0x7523}]}
+                  )
+                  await device.open()
+                  try {
+                    await device.selectConfiguration(1)
+                    await device.claimInterface(0)
+      
+                    console.assert(!rx_active, '!rx_active')
+                    rx_cont = true
+                    rx_task(device)
+      
+                    await sleep(100)
+                    rx_buf = ''
+      
+                    tx_immediate(device, '\n')
+                    await sleep(100)
+                    if (rx_buf.slice(0, 1) === '>') {
+                      console.log('prompt detected')
+                      rx_buf = rx_buf.slice(1)
+                      document.getElementById('connection-status').innerHTML = 'Connected'
+                      document.getElementById('connect-disconnect').innerHTML = 'Disconnect'
+                    }
+                    else {
+                      console.log('no prompt detected')
+                      device.close()
+                      await rx_stop()
+                      device = undefined
+                    }
+                  }
+                  catch (err) {
+                    console.log('exception', err.message)
+                    device.close()
+                    await rx_stop()
+                    device = undefined
+                  }
+                }
+                catch (err) {
+                  console.log('exception', err.message)
+                  device = undefined
+                }
+              }
+              else {
+                // disconnect request
+                device.close()
+                await rx_stop()
+                device = undefined
+                document.getElementById('connection-status').innerHTML = 'Disconnected'
+                document.getElementById('connect-disconnect').innerHTML = 'Connect'
+              }
+              device_busy = false
+            }
+          }
+        )()
+      }
+    )
+  }
+)
index e259d2d..d197793 100644 (file)
@@ -132,198 +132,7 @@ return async (env, head, body, scripts) => {
     },
     // scripts
     async _out => {
-      script {
-        let sleep = ms => {
-          return new Promise(resolve => setTimeout(resolve, ms));
-        }
-
-        let rx_active = false
-        let rx_cont = false
-        let rx_buf = ''
-        let rx_task = async device => {
-          console.log('rx_task')
-          rx_active = true
-          try {
-            while (rx_cont) {
-              transfer_result = await device.transferIn(2, 1)
-              //console.log('transfer_result', transfer_result)
-              if (transfer_result.status === 'ok')
-                for (let i = 0; i < transfer_result.data.byteLength; ++i) {
-                  if (rx_buf.length >= 1024) {
-                    console.log('rx_task overrun')
-                    break
-                  }
-                  rx_buf += String.fromCharCode(
-                    transfer_result.data.getUint8(0)
-                  )
-                }
-            }
-          }
-          catch (err) {
-            console.log('rx_task err', err.message)
-          }
-          console.log('rx_task done')
-          rx_active = false
-        }
-        let rx_stop = async () => {
-          console.log('rx_stop')
-          rx_cont = false
-          while (rx_active)
-            await sleep(100)
-          console.log('rx_stop done')
-        }
-
-        let tx_immediate = async (device, text) => {
-          console.log('tx_immediate', text)
-          data = new Uint8Array(text.length);
-          for (var i = 0; i < text.length; ++i)
-            data[i] = text.charCodeAt(i);
-          await device.transferOut(2, data.buffer)
-        }
-
-        document.addEventListener(
-          'DOMContentLoaded',
-          () => {
-            let device, device_busy = false
-            let axes = [
-              {
-                slider: document.getElementById("slider-a"),
-                value: document.getElementById("value-a"),
-                min_degrees: -90,
-                min_position: 14578,
-                max_degrees: 90,
-                max_position: 35733
-              },
-              {
-                slider: document.getElementById("slider-b"),
-                value: document.getElementById("value-b"),
-                min_degrees: -50,
-                min_position: 31031.88888888889,
-                max_degrees: 75,
-                max_position: 16340.91666666667
-              },
-              {
-                slider: document.getElementById("slider-c"),
-                value: document.getElementById("value-c"),
-                min_degrees: 0,
-                min_position: 25155.5,
-                max_degrees: 90,
-                max_position: 14578
-              },
-              {
-                slider: document.getElementById("slider-d"),
-                value: document.getElementById("value-d"),
-                min_degrees: -45,
-                min_position: 30444.25,
-                max_degrees: 45,
-                max_position: 19866.75
-              },
-              {
-                slider: document.getElementById("slider-e"),
-                value: document.getElementById("value-e"),
-                min_degrees: -45,
-                min_position: 30444.25,
-                max_degrees: 45,
-                max_position: 19866.75
-              },
-              {
-                slider: document.getElementById("slider-f"),
-                value: document.getElementById("value-f"),
-                min_degrees: 0,
-                min_position: 25155.5,
-                max_degrees: 60,
-                max_position: 18103.833333333333
-              }
-            ]
-            for (let i = 0; i < axes.length; ++i) {
-              axes[i].value.innerHTML = axes[i].slider.value
-
-              let axis = i
-              axes[i].slider.oninput = function() {
-                axes[axis].value.innerHTML = this.value
-                if (device && !device_busy) {
-                  axes[axis].position =
-                    Math.round(axes[axis].min_position +
-                      (this.value - axes[axis].min_degrees) *
-                      (axes[axis].max_position - axes[axis].min_position) /
-                      (axes[axis].max_degrees - axes[axis].min_degrees))
-                  tx_immediate(
-                    device,
-                    `${String.fromCharCode(97 + axis)}32000 ${String.fromCharCode(65 + axis)}${axes[axis].position}\n`
-                  )
-                }
-              }
-            }
-
-            document.getElementById('connect-disconnect').addEventListener(
-              'click',
-              () => {
-                ;(
-                  async () => {
-                    if (!device_busy) {
-                      device_busy = true
-                      if (device === undefined) {
-                        // connect request
-                        try {
-                          device = await navigator.usb.requestDevice(
-                            {filters: [{vendorId: 0x1a86, productId: 0x7523}]}
-                          )
-                          await device.open()
-                          try {
-                            await device.selectConfiguration(1)
-                            await device.claimInterface(0)
-      
-                            console.assert(!rx_active, '!rx_active')
-                            rx_cont = true
-                            rx_task(device)
-      
-                            await sleep(100)
-                            rx_buf = ''
-      
-                            tx_immediate(device, '\n')
-                            await sleep(100)
-                            if (rx_buf.slice(0, 1) === '>') {
-                              console.log('prompt detected')
-                              rx_buf = rx_buf.slice(1)
-                              document.getElementById('connection-status').innerHTML = 'Connected'
-                              document.getElementById('connect-disconnect').innerHTML = 'Disconnect'
-                            }
-                            else {
-                              console.log('no prompt detected')
-                              device.close()
-                              await rx_stop()
-                              device = undefined
-                            }
-                          }
-                          catch (err) {
-                            console.log('exception', err.message)
-                            device.close()
-                            await rx_stop()
-                            device = undefined
-                          }
-                        }
-                        catch (err) {
-                          console.log('exception', err.message)
-                          device = undefined
-                        }
-                      }
-                      else {
-                        // disconnect request
-                        device.close()
-                        await rx_stop()
-                        device = undefined
-                        document.getElementById('connection-status').innerHTML = 'Disconnected'
-                        document.getElementById('connect-disconnect').innerHTML = 'Connect'
-                      }
-                      device_busy = false
-                    }
-                  }
-                )()
-              }
-            )
-          }
-        )
-      }
+      script(src="/js/mirobot.js") {}
 
       scripts(_out)
     }