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