doctype html
html(lang="en")
head
meta(charset="utf-8")
meta(name="viewport", content="width=device-width, initial-scale=1.0")
title Onefinity CNC - Web interface
style: include ../static/css/pure-min.css
style: include ../static/css/font-awesome.min.css
style: include ../static/css/Audiowide.css
style: include ../static/css/clusterize.css
style: include ../svelte-components/node_modules/svelte-material-ui/bare.css
style: include ../../build/http/svelte-components/smui.css
style: include ../../build/http/svelte-components/style.css
style: include:stylus ../stylus/style.styl
body(v-cloak)
#svelte-dialog-host
#overlay(v-if="status != 'connected'")
span {{status}}
.app-shell
header.app-head
.brand-blk
.brand-logo
.brand-name ONEFINITY
nav.tabs-host(role="tablist")
a.ktab(:class="{active: top_tab === 'control'}", href="#control",
title="Jog, DRO, macros")
.fa.fa-gamepad
span Control
a.ktab(:class="{active: top_tab === 'program'}", href="#program",
title="Run programs, files, toolpath preview")
.fa.fa-list-ol
span Program
a.ktab(:class="{active: top_tab === 'console'}", href="#console",
title="MDI, messages, indicators")
.fa.fa-terminal
span Console
span.ktab-badge(v-if="messages_count") {{messages_count}}
a.ktab(:class="{active: top_tab === 'settings'}", href="#settings",
title="Configuration, network, macros")
.fa.fa-sliders
span Settings
.head-spacer
.sys-btn(@click.stop="toggle_sys_popover", :class="{open: sys_open}")
span.pip(:class="sys_class")
span.sys-text {{sys_summary}}
.fa.fa-chevron-down
.pi-temp-warning(v-if="80 <= state.rpi_temp",
title="Raspberry Pi temperature too high.")
.fa.fa-thermometer-full
span.state-badge(:class="state_class", :title="mach_state_full")
span.dot
span {{state_label}}
.estop(:class="{active: state.es}")
estop(@click="estop")
// System popover (chip-soup destination)
.sys-popover(v-if="sys_open", @click.stop="")
.sp-row
.sp-icon: .fa.fa-microchip
.sp-text
.sp-label Firmware
.sp-val v{{config.full_version}}
a.sp-act(v-if="show_upgrade()", href="#admin-general")
| Upgrade to v{{latestVersion}}
.fa.fa-exclamation-circle.upgrade-attention
.sp-row
.sp-icon: .fa.fa-network-wired
.sp-text
.sp-label IP Address
.sp-val {{config.ip}}
.sp-row
.sp-icon: .fa.fa-wifi(:class="{'sp-warn': config.wifiName === 'not connected'}")
.sp-text
.sp-label WiFi
.sp-val {{config.wifiName}}
a.sp-act(href="#admin-network", @click="sys_open=false") Configure
.sp-row(v-if="enable_rotary")
.sp-icon: img(src="/images/rotary.svg", alt="rotary")
.sp-text
.sp-label Rotary
.sp-val {{is_rotary_active ? 'Active' : 'Inactive'}}
button.sp-act(@click="showSwitchRotaryModeDialog")
| {{is_rotary_active ? 'Disable' : 'Enable'}}
.sp-row(v-if="is_easy_adapter_active")
.sp-icon: .fa.fa-puzzle-piece
.sp-text
.sp-label Easy Adapter
.sp-val Active
.sp-row.video-row
.sp-icon: .fa.fa-video
.sp-text
.sp-label Camera
.sp-val {{has_camera ? 'Live' : 'Plug camera into USB'}}
.sp-act(v-if="has_camera", @click="toggle_video")
| {{video_size === 'small' ? 'Enlarge' : 'Shrink'}}
.video(v-if="sys_open && has_camera", title="Camera feed",
@click="toggle_video", @contextmenu="toggle_crosshair",
:class="video_size")
.crosshair(v-if="crosshair")
.vertical
.horizontal
.box
img(src="/api/video", @error="has_camera=false")
.sp-foot
button.sp-shutdown(@click="showShutdownDialog")
.fa.fa-power-off
| Shutdown
button.sp-save(:disabled="!modified", @click="save")
.fa.fa-save
| Save{{modified ? '*' : ''}}
// Routed view (no keep-alive: Vue 1 has issues re-evaluating
// dynamic :class / v-if bindings on cached components when the
// route changes within the same kept-alive tree)
.app-body
component(:is="currentView + '-view'", :index="index",
:config="config", :template="template", :state="state",
:sub-tab="sub_tab")
message.error-message(:show.sync="errorShow")
div(slot="header")
.estop(:class="{active: state.es}"): estop(@click="estop")
h3 ERROR: {{errorMessage}}
div(slot="body")
console
button.pure-button(@click="block_error_dialog")
.fa.fa-ban
| Stop
label showing errors for
input(style="width: 50px", v-model="errorTimeout", number)
label seconds.
div(slot="footer")
button.pure-button.pure-button-primary(@click="errorShow = false") OK
message(:show.sync="confirmUpgrade")
h3(slot="header") Upgrade Firmware?
div(slot="body")
p
| Are you sure you want to upgrade the firmware to version
| {{latestVersion}}?
div(slot="footer")
button.pure-button(@click="confirmUpgrade=false") Cancel
button.pure-button.pure-button-primary(@click="upgrade_confirmed")
| Upgrade
message(:show.sync="confirmUpload")
h3(slot="header") Upload Firmware?
div(slot="body")
p Are you sure you want to upload firmware #[em {{firmwareName}}]?
div(slot="footer")
button.pure-button(@click="confirmUpload=false") Cancel
button.pure-button.pure-button-primary(@click="upload_confirmed")
| Upload
message(:show.sync="firmwareUpgrading")
h3(slot="header") Firmware upgrading
div(slot="body")
h3 Please wait...
p This process should take less than 5 minutes. If it takes longer than this, please restart the controller and try via USB.
div(slot="footer")
message(v-if="popupMessages.length", show=true)
h3(slot="header") GCode message
div(slot="body")
ul
li(v-for="msg in popupMessages", track-by="$index") {{msg}}
div(slot="footer")
button.pure-button.button-success(v-if="state.xx != 'HOLDING'",
@click="close_messages('ok')") OK
div(v-if="state.xx == 'HOLDING'")
button.pure-button(@click="close_messages('stop')")
| Stop
.fa.fa-stop
button.pure-button(@click="close_messages('continue')")
| Continue
.fa.fa-play
#templates: include ../../build/templates.pug
iframe#download-target(style="display:none")
script: include ../static/js/vue.js
script: include ../static/js/sockjs.min.js
script: include ../static/js/clusterize.min.js
script: include ../static/js/three.min.js
script: include:browserify ../js/main.js
script: include ../../build/http/svelte-components/index.js
script: include ../static/js/ui.js