Lots of work on Web control interface
authorJoseph Coffland <joseph@cauldrondevelopment.com>
Tue, 5 Apr 2016 18:39:59 +0000 (11:39 -0700)
committerJoseph Coffland <joseph@cauldrondevelopment.com>
Tue, 5 Apr 2016 18:39:59 +0000 (11:39 -0700)
src/jade/templates/axis-control.jade
src/jade/templates/control-view.jade
src/js/app.js
src/js/axis-control.js
src/js/control-view.js
src/stylus/style.styl

index a81c10baabc59606a1193d01c81fa913a90edd3c..286e6e6572fe42319af39faa9884b04d059e6ba2 100644 (file)
@@ -3,24 +3,32 @@ script#axis-control-template(type="text/x-template")
     width="200", height="200", transform="scale(0.8, 0.8)",
     xmlns:xlink="http://www.w3.org/1999/xlink")
     defs
-      lineargradient#gold
-        stop(offset="0", stop-color="#ded99d")
-        stop(offset="1", stop-color="#b7b287")
+      lineargradient#red
+        stop(offset="0", stop-color="#d26969")
+        stop(offset="1", stop-color="#ff7f7f")
+
+      lineargradient#green
+        stop(offset="0", stop-color="#69d269")
+        stop(offset="1", stop-color="#7fff7f")
 
       lineargradient#blue
-        stop(offset="0", stop-color="#b4b8e4")
-        stop(offset="1", stop-color="#868ab6")
+        stop(offset="0", stop-color="#6969d2")
+        stop(offset="1", stop-color="#7f7fff")
 
-      lineargradient#green
-        stop(offset="0", stop-color="#a1cca1")
-        stop(offset="1", stop-color="#6ba469")
+      lineargradient#orange
+        stop(offset="0", stop-color="#d29d69")
+        stop(offset="1", stop-color="#ffbf7f")
 
-      lineargradient#red
-        stop(offset="0", stop-color="#f88")
-        stop(offset="1", stop-color="#ea5858")
+      lineargradient#cyan
+        stop(offset="0", stop-color="#69d2d2")
+        stop(offset="1", stop-color="#7fffff")
+
+      lineargradient#purple
+        stop(offset="0", stop-color="#d269d2")
+        stop(offset="1", stop-color="#ff7fff")
 
 
-      each color in 'gold blue green red'.split(' ')
+      each color in 'red green blue orange cyan purple'.split(' ')
         lineargradient(xlink:href="##{color}", id="#{color}-1",
           gradientunits="userSpaceOnUse", gradienttransform="rotate(180 7 5)",
           x1="0", y1="0", x2="15", y2="10")
@@ -65,7 +73,7 @@ script#axis-control-template(type="text/x-template")
 
     // Home A
     g.button(@click="home(0)", title="Home {{axes[0]}} axis",
-      filter="url(#shadow)")
+      filter="url(#shadow)", v-if="enabled[0]")
       use(xlink:href="#corner-button", fill="url(#{{colors[0]}}-2)",
         transform="matrix(1 0 0 1 9 9)")
       text(font-size="14", x="34", y="25") {{axes[0]}}
@@ -74,7 +82,7 @@ script#axis-control-template(type="text/x-template")
 
     // Home B
     g.button(@click="home(1)", title="Home {{axes[1]}} axis",
-      filter="url(#shadow)")
+      filter="url(#shadow)", v-if="enabled[1]")
       use(xlink:href="#corner-button", fill="url(#{{colors[1]}}-2)",
         transform="matrix(-1 0 0 1 241 9)")
       text(font-size="14", x="205", y="25") {{axes[1]}}
@@ -83,7 +91,7 @@ script#axis-control-template(type="text/x-template")
 
     // Zero A
     g.button(@click="zero(0)", title="Zero {{axes[0]}} axes",
-      filter="url(#shadow)")
+      filter="url(#shadow)", v-if="enabled[0]")
       use(xlink:href="#corner-button", fill="url(#{{colors[0]}}-2)",
         transform="matrix(1 0 0 -1 9 231)")
       text(font-size="20", x="12", y="227") &empty;
@@ -92,7 +100,7 @@ script#axis-control-template(type="text/x-template")
 
     // Zero B
     g.button(@click="zero(1)", title="Zero {{axes[1]}} axis",
-      filter="url(#shadow)")
+      filter="url(#shadow)", v-if="enabled[1]")
       use(xlink:href="#corner-button", fill="url(#{{colors[1]}}-2)",
         transform="matrix(-1 0 0 -1 241 231)")
       text(font-size="14", x="208", y="227") {{axes[1]}}
@@ -101,15 +109,16 @@ script#axis-control-template(type="text/x-template")
 
     // 100 ring
     g.ring(fill="#9f9f9f", filter="url(#shadow-ring)")
-      use.button(xlink:href="#pie-1",
+      use.button(xlink:href="#pie-1", v-if="enabled[0]",
         transform="translate(134 121) rotate(-45)",
         @click="jog(0, 100)", title="Jog +100 {{axes[0]}}")
 
-      use.button(xlink:href="#pie-1",
+      use.button(xlink:href="#pie-1", v-if="enabled[0]",
         transform="translate(115 121) rotate(135)",
         @click="jog(0, -100)", title="Jog -100 {{axes[0]}}")
 
-      g.button(@click="jog(1, 100)", title="Jog +100 {{axes[1]}}")
+      g.button(@click="jog(1, 100)", title="Jog +100 {{axes[1]}}",
+        v-if="enabled[1]")
         use.button(xlink:href="#pie-1",
           transform="translate(124 111) rotate(-135)")
         text(x="125", y="24", transform="rotate(20 125 125)") 100
@@ -117,86 +126,89 @@ script#axis-control-template(type="text/x-template")
         use.button(xlink:href="#pie-1", fill="transparent",
           transform="translate(124 111) rotate(-135)")
 
-      use.button(xlink:href="#pie-1",
+      use.button(xlink:href="#pie-1", v-if="enabled[1]",
         transform="translate(124 130) rotate(45)",
         @click="jog(1, -100)", title="Jog -100 {{axes[1]}}")
 
     // 10 ring
     g.ring(fill="#c5c5c5", filter="url(#shadow-ring)")
-      use.button(xlink:href="#pie-2",
+      use.button(xlink:href="#pie-2", v-if="enabled[0]",
         transform="translate(134 121) rotate(-45)",
         @click="jog(0, 10)", title="Jog +10 {{axes[0]}}")
 
-      use.button(xlink:href="#pie-2",
+      use.button(xlink:href="#pie-2", v-if="enabled[0]",
         transform="translate(115 121) rotate(135)",
         @click="jog(0, -10)", title="Jog -10 {{axes[0]}}")
 
-      g.button(@click="jog(1, 10)", title="Jog +10 {{axes[1]}}")
+      g.button(@click="jog(1, 10)", title="Jog +10 {{axes[1]}}",
+        v-if="enabled[1]")
         use.button(xlink:href="#pie-2",
           transform="translate(124 111) rotate(-135)")
         text(x="125", y="50") 10
         use.button(xlink:href="#pie-2", fill="transparent",
           transform="translate(124 111) rotate(-135)")
 
-      use.button(xlink:href="#pie-2",
+      use.button(xlink:href="#pie-2", v-if="enabled[1]",
         transform="translate(124 130) rotate(45)",
         @click="jog(1, -10)", title="Jog -10 {{axes[1]}}")
 
 
     // 1 ring
     g.ring(fill="#e2e2e2", filter="url(#shadow-ring)")
-      use.button(xlink:href="#pie-3",
+      use.button(xlink:href="#pie-3", v-if="enabled[0]",
         transform="translate(134 121) rotate(-45)",
         @click="jog(0, 1)", title="Jog +1 {{axes[0]}}")
 
-      use.button(xlink:href="#pie-3",
+      use.button(xlink:href="#pie-3", v-if="enabled[0]",
         transform="translate(115 121) rotate(135)",
         @click="jog(0, -1)", title="Jog -1 {{axes[0]}}")
 
-      g.button(@click="jog(1, 1)", title="Jog +1 {{axes[1]}}")
+      g.button(@click="jog(1, 1)", title="Jog +1 {{axes[1]}}",
+        v-if="enabled[1]")
         use.button(xlink:href="#pie-3",
           transform="translate(124 111) rotate(-135)")
         text(x="125", y="75") 1
         use.button(xlink:href="#pie-3", fill="transparent",
           transform="translate(124 111) rotate(-135)")
 
-      use.button(xlink:href="#pie-3",
+      use.button(xlink:href="#pie-3", v-if="enabled[1]",
         transform="translate(124 130) rotate(45)",
         @click="jog(1, -1)", title="Jog -1 {{axes[1]}}")
 
 
     // 0.1 ring
     g.ring(fill="#f7f7f7", filter="url(#shadow-ring)")
-      use.button(xlink:href="#pie-4",
+      use.button(xlink:href="#pie-4", v-if="enabled[0]",
         transform="translate(134 121) rotate(-45)",
         @click="jog(0, 0.1)", title="Jog +0.1 {{axes[0]}}")
 
-      use.button(xlink:href="#pie-4",
+      use.button(xlink:href="#pie-4", v-if="enabled[0]",
         transform="translate(115 121) rotate(135)",
         @click="jog(0, -0.1)", title="Jog -0.1 {{axes[0]}}")
 
-      g.button(@click="jog(1, 0.1)", title="Jog +0.1 {{axes[1]}}")
+      g.button(@click="jog(1, 0.1)", title="Jog +0.1 {{axes[1]}}",
+        v-if="enabled[1]")
         use.button(xlink:href="#pie-4",
           transform="translate(124 111) rotate(-135)")
         text(x="125", y="95") 0.1
         use.button(xlink:href="#pie-4", fill="transparent",
           transform="translate(124 111) rotate(-135)")
 
-      use.button(xlink:href="#pie-4",
+      use.button(xlink:href="#pie-4", v-if="enabled[1]",
         transform="translate(124 130) rotate(45)",
         @click="jog(1, -0.1)", title="Jog -0.1 {{axes[1]}}")
 
 
     // +A
     g.button.arrow(@click="jog(0, 100)", title="Jog +100 {{axes[0]}}",
-      transform="translate(230 120)")
+      transform="translate(230 120)", v-if="enabled[0]")
       use(xlink:href="#arrow", fill="url(#{{colors[0]}}-1)")
       text(x="-12", y="5", font-size="14", textLength="21") +{{axes[0]}}
 
 
     // -A
     g.button.arrow(@click="jog(0, -100)", title="Jog -100 {{axes[0]}}",
-      transform="translate(20 120)")
+      transform="translate(20 120)", v-if="enabled[0]")
       use(xlink:href="#arrow", fill="url(#{{colors[0]}}-1)",
         transform="rotate(180)")
       text(x="-8", y="5", font-size="14", textLength="16") -{{axes[0]}}
@@ -204,7 +216,7 @@ script#axis-control-template(type="text/x-template")
 
     // +B
     g.button.arrow(@click="jog(1, 100)", title="Jog +100 {{axes[1]}}",
-      transform="translate(125, 18)")
+      transform="translate(125, 18)", v-if="enabled[1]")
       use(xlink:href="#arrow", fill="url(#{{colors[1]}}-1)",
         transform="rotate(-90)")
       text(x="-8", y="5", font-size="12", textLength="16") +{{axes[1]}}
@@ -212,7 +224,7 @@ script#axis-control-template(type="text/x-template")
 
     // -B
     g.button.arrow(@click="jog(1, -100)", title="Jog -100 {{axes[1]}}",
-      transform="translate(125, 225)")
+      transform="translate(125, 225)", v-if="enabled[1]")
       use(xlink:href="#arrow", fill="url(#{{colors[1]}}-1)",
         transform="rotate(90)")
       text(x="-7", y="5", font-size="12", textLength="14") -{{axes[1]}}
index ea58588270b07e57a3a4de7bccf9429852fee71b..c502df55ea8537d75b3690deb8fa87884066cd5d 100644 (file)
@@ -1,7 +1,14 @@
 script#control-view-template(type="text/x-template")
   .jog
-    axis-control(axes="XY", :colors="['gold', 'blue']")
-    axis-control(axes="AZ", :colors="['red', 'green']")
+    axis-control(axes="XY", :colors="['red', 'green']",
+      :enabled="[enabled('x'), enabled('y')]",
+      v-if="enabled('x') || enabled('y')")
+    axis-control(axes="AZ", :colors="['orange', 'blue']",
+      :enabled="[enabled('a'), enabled('z')]",
+      v-if="enabled('a') || enabled('z')")
+    axis-control(axes="BC", :colors="['cyan', 'purple']",
+      :enabled="[enabled('b'), enabled('c')]",
+      v-if="enabled('b') || enabled('c')")
 
 
   .estop(:class="{active: state.es}")
@@ -34,6 +41,7 @@ script#control-view-template(type="text/x-template")
 
   table.axes
     tr
+      th Actions
       th Axis
       th Position
       th Offset
@@ -41,7 +49,12 @@ script#control-view-template(type="text/x-template")
       th StallGuard
 
     each axis in 'xyzabc'
-      tr.axis(class="axis-#{axis}")
+      tr.axis(class="axis-#{axis}", v-if="enabled('#{axis}')")
+        th.actions
+          button.pure-button
+            .fa.fa-home
+          button.pure-button
+            .fa.fa-dot-circle-o
         th.name #{axis}
         td.position {{state.#{axis}p || 0 | fixed 4}}
         td.offset {{state.#{axis}o || 0 | fixed 4}}
@@ -72,29 +85,34 @@ script#control-view-template(type="text/x-template")
 
 
   .toolbar
+    button.pure-button(@click="home", :disabled="running")
+      .fa.fa-home
+
     button.pure-button(@click="play_pause()", :disabled="!file")
       .fa(:class="running ? 'fa-pause' : 'fa-play'")
 
     button.pure-button(@click="stop", :disabled="!running")
       .fa.fa-stop
 
+    button.pure-button(@click="optional_stop", :disabled="!file")
+      .fa.fa-stop-circle-o
+
     button.pure-button(@click="step", :disabled="running || !file")
       .fa.fa-step-forward
 
-    button.pure-button(@click="optional_stop", :disabled="!file")
-      .fa.fa-stop-circle-o
+    .spacer
 
-    button.pure-button(@click="open")
+    button.pure-button(@click="open", :disabled="running")
       .fa.fa-folder-open
 
     input.gcode-file-input(type="file", @change="upload", style="display:none",
       accept=".nc,.gcode,.gc,.ngc")
 
-    select(v-model="file", @change="load")
-      option(v-for="file in files", :value="file") {{file}}
-
     button.pure-button(@click="delete", :disabled="!file")
       .fa.fa-trash
 
+    select(v-model="file", @change="load", :disabled="running")
+      option(v-for="file in files", :value="file") {{file}}
+
 
   .gcode {{gcode || 'GCode displays here.'}}
index 6becffcb870edb2d25d40670eebbeadd6787a504..e92a07c2e888e9bf244533601ae6621c8c806a89 100644 (file)
@@ -12,8 +12,8 @@ module.exports = new Vue({
       currentView: 'loading',
       index: -1,
       modified: false,
-      template: {"motors": {}, "axes": {}},
-      config: {"motors": [{}]}
+      template: {motors: {}, axes: {}},
+      config: {motors: [{}]}
     }
   },
 
index d43a8b84e97294f9b5742ac642d4f2b6ee5d6233..78434fe9e26af08ebd0040db9531dc3feeb60619 100644 (file)
@@ -3,7 +3,7 @@
 
 module.exports = {
   template: '#axis-control-template',
-  props: ['axes', 'colors'],
+  props: ['axes', 'colors', 'enabled'],
 
 
   methods: {
index 08329a46b4420d87d5115f12c8f19bd29b236af9..29481938aa8e7d3e8cf6e272564890a82923709c 100644 (file)
@@ -10,6 +10,7 @@ function is_array(x) {
 
 module.exports = {
   template: '#control-view-template',
+  props: ['config'],
 
 
   data: function () {
@@ -75,6 +76,13 @@ module.exports = {
 
 
   methods: {
+    enabled: function (axis) {
+      var axis = axis.toLowerCase();
+      return axis in this.config.axes &&
+        this.config.axes[axis].mode != 'disabled';
+    },
+
+
     estop: function () {
       this.$set('state.es', !this.state.es);
     },
index 1a96039c9ce0189bc2af16ceeadbfb5d913e2af7..12a30aa009b080ef3f8f410c06466e7356bf8916 100644 (file)
@@ -59,6 +59,7 @@ body
 
 .control-view
   table
+    margin 0.5em 0
     border-collapse collapse
 
     td, th
@@ -67,17 +68,26 @@ body
 
 .axes
   .axis-x .name
-    color red
+    color #f00
 
   .axis-y .name
-    color green
+    color #0f0
 
   .axis-z .name
-    color blue
+    color #00f
+
+  .axis-a .name
+    color #f80
+
+  .axis-b .name
+    color #0ff
+
+  .axis-c .name
+    color #f0f
 
   td, th
     text-align center
-    padding 8px
+    padding 2px
 
   .axis
     .name
@@ -85,15 +95,16 @@ body
 
     .name, .position
       font-size 36pt
+      line-height 36pt
 
 @keyframes blink
   50%
     fill #ff9d00
 
 .estop
-  width 130px
-  transition 250ms
   display inline-block
+  width 190px
+  transition 250ms
 
   &.active .ring
     animation blink 2s step-start 0s infinite
@@ -108,8 +119,6 @@ body
   float right
 
 .jog svg
-  margin-left 2em
-
   text
     font-family Sans
     font-weight bold
@@ -154,17 +163,20 @@ body
   th
     text-align right
 
-.overrides .override
-  margin 0.5em
-  display inline-block
+.overrides
+  clear both
 
-  .percent
+  .override
+    margin 0.5em
     display inline-block
-    width 3em
 
-  input
-    border-radius 0
-    margin -0.4em 0.5em
+    .percent
+      display inline-block
+      width 3em
+
+    input
+      border-radius 0
+      margin -0.4em 0.5em
 
 .mdi
   clear both
@@ -175,8 +187,15 @@ body
     width 90%
 
 .toolbar
+  clear both
   margin 0.5em 0
 
+  .spacer
+    display inline-block
+    width 1px
+    height 1px
+    margin 0 1em
+
 .gcode
   clear both
   border 2px inset #ccc