',e.appendChild(d);var v=d.getElementsByTagName("div")[0],m=new r(v);m.onMove=function(e,n){s+e+u0&&(f=s+e,d.style.left=f+"px"),o+n+a0&&(l=o+n,d.style.top=l+"px")},m.onStop=function(){s=f,o=l};var g=d.getElementsByTagName("div")[1];g.addEventListener("mousedown",n,!1);var y=new r(g);y.onMove=function(e,n){s+e+u18&&(c=u+e,d.style.width=c+"px"),o+n+a18&&(h=a+n,d.style.height=h+"px")},y.onStop=function(){u=c,a=h}},o=0,u=0,a=0,f=!1,l=!1,c=null,h=this,p=e.offsetWidth,d=e.offsetHeight,v=function(e,t){if(e<-0.5||e>.5)throw"Invalid value: "+t+" must be between 0 and 1";return!0},m=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(e){window.setTimeout(e,1e3/60)},g=function(e){return b.getElementsByClassName(e)[0]},y=function(e){return document.createElement(e)},b=y("div");b.className="photobooth",b.innerHTML='
Sorry, Photobooth.js is not supported by your browser
Please give Photobooth permission to use your Webcam. Try again
';var w=y("canvas"),E=w.getContext("2d"),S=b.getElementsByTagName("canvas")[0],x=S.getContext("2d"),T=y("video");T.autoplay=!0;var N=g("noWebcam");N.getElementsByTagName("span")[0].onclick=function(){M()},new i(g("hue"),function(e){o=e}),new i(g("saturation"),function(e){u=e}),new i(g("brightness"),function(e){a=e});var C=new s(b,p,d),k=g("crop");k.onclick=function(){C.toggle(),k.className==="crop"?k.className="crop selected":k.className="crop"};var L=g("blind");g("trigger").onclick=function(){L.className="blind",L.style.opacity=1,setTimeout(function(){L.className="blind anim",L.style.opacity=0},50);var e={};C.isActive()?e=C.getData():f?e={x:(p-T.videoWidth)/2,y:(d-T.videoHeight)/2,width:T.videoWidth,height:T.videoHeight}:e={x:0,y:0,width:p,height:d};var t=y("canvas");t.width=e.width,t.height=e.height;if(f)t.getContext("2d").drawImage(T,Math.max(0,e.x-(p-T.videoWidth)/2),Math.max(e.y-(d-T.videoHeight)/2),e.width,e.height,0,0,e.width,e.height);else{var n=x.getImageData(e.x,e.y,e.width,e.height);t.getContext("2d").putImageData(n,0,0)}h.onImage(t.toDataURL())};var A=function(e){c=e;try{T.src=(window.URL||window.webkitURL).createObjectURL(c),m(H)}catch(t){T.mozSrcObject=c,h.forceHSB===!1?(f=!0,b.appendChild(T),b.getElementsByTagName("ul")[0].className="noHSB"):T.addEventListener("canplay",function(){m(H)},!1),T.play()}},O=function(e){N.style.display="block"},M=function(){N.style.display="none",t.call(navigator,{video:!0},A,O)},_=function(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e},D=function(e){return e>1?e-1:e<0?1+e:e},P=function(e){return e>1?1:e<0?0:e},H=function(){try{E.drawImage(T,0,0,p,d)}catch(e){}var t=E.getImageData(0,0,p,d),n=t.data;for(var r=0;r.5?b/(2-c-h):b/(c+h),c===i&&(v=((s-f)/b+(s 0) {
for (var i = 0; i < children.length; i++) {
var child = children[i];
diff --git a/src/octoprint/plugins/svgtogcode/static/js/render_fills.js b/src/octoprint/plugins/svgtogcode/static/js/render_fills.js
new file mode 100644
index 00000000..60b55bd6
--- /dev/null
+++ b/src/octoprint/plugins/svgtogcode/static/js/render_fills.js
@@ -0,0 +1,164 @@
+// render_fills.js - a snapsvg.io plugin to render the infill of svg files into a bitmap.
+// Copyright (C) 2015 Teja Philipp
+//
+// based on work by http://davidwalsh.name/convert-canvas-image
+// and http://getcontext.net/read/svg-images-on-a-html5-canvas
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
+
+
+
+Snap.plugin(function (Snap, Element, Paper, global) {
+
+
+
+ /**
+ * @param {elem} elem start point
+ *
+ * @returns {path}
+ */
+
+ Element.prototype.removeUnfilled = function(fillPaths){
+ var elem = this;
+ var selection = [];
+ var children = elem.children();
+
+
+ if (children.length > 0) {
+ var goRecursive = (elem.type !== "defs" && // ignore these tags
+ elem.type !== "clipPath" &&
+ elem.type !== "metadata" &&
+ elem.type !== "rdf:rdf" &&
+ elem.type !== "cc:work" &&
+ elem.type !== "sodipodi:namedview");
+
+ if(goRecursive) {
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ selection = selection.concat(child.removeUnfilled(fillPaths));
+ }
+ }
+ } else {
+ if(elem.type === 'image'){
+ selection.push(elem);
+ } else {
+ if(fillPaths && elem.is_filled()){
+ selection.push(elem);
+ } else {
+ elem.remove();
+ }
+ }
+ }
+ return selection;
+ };
+
+ Element.prototype.is_filled = function(){
+ var elem = this;
+
+ // TODO text support
+ // TODO opacity support
+ if (elem.type !== "circle" &&
+ elem.type !== "rect" &&
+ elem.type !== "ellipse" &&
+ elem.type !== "line" &&
+ elem.type !== "polygon" &&
+ elem.type !== "polyline" &&
+ elem.type !== "path" ){
+
+ return false;
+ }
+
+ var fill = elem.attr('fill');
+ var opacity = elem.attr('fill-opacity');
+
+ if(fill !== 'none'){
+ if(opacity === null || opacity > 0){
+ return true;
+ }
+ }
+ return false;
+ };
+
+ Element.prototype.embedImage = function(callback){
+ var elem = this;
+ if(elem.type !== 'image') return;
+
+ var url = elem.attr('href');
+ var image = new Image();
+
+ image.onload = function () {
+ var canvas = document.createElement('canvas');
+ canvas.width = this.naturalWidth; // or 'width' if you want a special/scaled size
+ canvas.height = this.naturalHeight; // or 'height' if you want a special/scaled size
+
+ canvas.getContext('2d').drawImage(this, 0, 0);
+ var dataUrl = canvas.toDataURL('image/png');
+ elem.attr('href', dataUrl);
+ canvas.remove();
+ if(typeof callback === 'function'){
+ callback(elem.attr('id'));
+ console.log('embedded img');
+ }
+ };
+
+ image.src = url;
+
+ };
+
+ Element.prototype.renderPNG = function (wMM, hMM, pxPerMM, callback) {
+ var elem = this;
+
+ // get svg as dataUrl
+ var svgStr = elem.outerSVG();
+ var svgDataUri = 'data:image/svg+xml;base64,' + window.btoa(svgStr);
+ var source = new Image();
+ source.src = svgDataUri;
+
+ // init render canvas and attach to page
+ var renderCanvas = document.createElement('canvas');
+ renderCanvas.id = "renderCanvas";
+ renderCanvas.width = wMM * pxPerMM;
+ renderCanvas.height = hMM * pxPerMM;
+ document.getElementsByTagName('body')[0].appendChild(renderCanvas);
+ var renderCanvasContext = renderCanvas.getContext('2d');
+
+ // render SVG image to the canvas once it loads.
+ source.onload = function () {
+ renderCanvasContext.drawImage(source, 0, 0, renderCanvas.width, renderCanvas.height);
+
+ // place fill bitmap into svg
+ var fillBitmap = renderCanvas.toDataURL("image/png");
+ if(typeof callback === 'function'){
+ callback(fillBitmap);
+ }
+ renderCanvas.remove();
+ };
+
+ // catch browsers without native svg support
+ source.onerror = function() {
+ console.error("Can't export! Maybe your browser doesn't support native SVG. Sorry.");
+ };
+ };
+
+
+});
+
+
+
+
+
+
+
+
+
diff --git a/src/octoprint/plugins/svgtogcode/static/js/working_area.js b/src/octoprint/plugins/svgtogcode/static/js/working_area.js
index b4888f54..3c0d93da 100644
--- a/src/octoprint/plugins/svgtogcode/static/js/working_area.js
+++ b/src/octoprint/plugins/svgtogcode/static/js/working_area.js
@@ -107,6 +107,8 @@ $(function(){
if(self.state.isOperational() && !self.state.isPrinting()){
var x = self.px2mm(event.offsetX);
var y = self.px2mm(event.toElement.ownerSVGElement.offsetHeight - event.offsetY); // hopefully this works across browsers
+ x = Math.min(x, self.workingAreaWidthMM());
+ y = Math.min(y, self.workingAreaHeightMM());
$.ajax({
url: API_BASEURL + "printer/printhead",
type: "POST",
@@ -310,13 +312,9 @@ $(function(){
var bbox = svg.getBBox();
var tx = self.px2mm(bbox.x * globalScale);
var ty = self.workingAreaHeightMM() - self.px2mm(bbox.y2 * globalScale);
-// var tx = self.px2mm(svg.data('tx')*globalScale).toFixed(1);
-// var ty = -self.px2mm(svg.data('ty')*globalScale).toFixed(1);
-// var rot = svg.data('angle') || 0;
var startIdx = transform.local.indexOf('r') + 1;
var endIdx = transform.local.indexOf(',', startIdx);
var rot = parseFloat(transform.local.substring(startIdx, endIdx)) || 0;
-// if(!rot) rot = 0; // avoid NaN
var horizontal = self.px2mm((bbox.x2 - bbox.x) * globalScale);
var vertical = self.px2mm((bbox.y2 - bbox.y) * globalScale);
var id = svg.attr('id');
@@ -392,7 +390,7 @@ $(function(){
});
};
-
+
self.placeIMG = function (file) {
var url = self._getIMGserveUrl(file);
var img = new Image();
@@ -412,7 +410,7 @@ $(function(){
newImg.attr({id: previewId, filter: 'url(#grayscale_filter)', 'data-serveurl': url});
snap.select("#userContent").append(newImg);
newImg.transformable();
- newImg.ftDisableRotate();
+ //newImg.ftDisableRotate();
newImg.ftRegisterCallback(self.svgTransformUpdate);
file.id = id;
file.previewId = previewId;
@@ -623,19 +621,36 @@ $(function(){
self.check_sizes_and_placements();
};
- self.getCompositionSVG = function(){
+ self.getCompositionSVG = function(fillAreas, callback){
self.abortFreeTransforms();
- var tmpsvg = snap.select("#userContent").innerSVG(); // get working area
- if(tmpsvg !== ''){
+ var wMM = self.workingAreaWidthMM();
+ var hMM = self.workingAreaHeightMM();
+ var wPT = wMM * 90 / 25.4;
+ var hPT = hMM * 90 / 25.4;
+ var compSvg = Snap(wPT, hPT);
+ compSvg.attr('id', 'compSvg');
+
+ var userContent = snap.select("#userContent").clone();
+ compSvg.append(userContent);
+
+ self.renderInfill(compSvg, fillAreas, wMM, hMM, 10, function(svgWithRenderedInfill){
+ callback( self._wrapInSvgAndScale(svgWithRenderedInfill));
+ $('#compSvg').remove();
+ });
+ };
+
+ self._wrapInSvgAndScale = function(content){
+ var svgStr = content.innerSVG();
+ if(svgStr !== ''){
var dpiFactor = self.svgDPI()/25.4; // convert mm to pix 90dpi for inkscape, 72 for illustrator
var w = dpiFactor * self.workingAreaWidthMM();
var h = dpiFactor * self.workingAreaHeightMM();
// TODO: look for better solution to solve this Firefox bug problem
- tmpsvg = tmpsvg.replace("(\\\"","(");
- tmpsvg = tmpsvg.replace("\\\")",")");
+ svgStr = svgStr.replace("(\\\"","(");
+ svgStr = svgStr.replace("\\\")",")");
- var svg = '';
+ var svg = '';
return svg;
} else {
return;
@@ -667,6 +682,19 @@ $(function(){
return gcodeFiles;
}, self);
+ self.hasFilledVectors = function(){
+ var el = snap.selectAll('#userContent *');
+ for (var i = 0; i < el.length; i++) {
+ var e = el[i];
+ var fill = e.attr('fill');
+ var op = e.attr('fill-opacity');
+ if(fill !== 'none' && op > 0){
+ return true;
+ }
+
+ }
+ return false;
+ };
self.draw_gcode = function(points, intensity, target){
var stroke_color = intensity === 0 ? '#BBBBBB' : '#FF0000';
@@ -680,11 +708,6 @@ $(function(){
};
self.draw_gcode_img_placeholder = function(x,y,w,h,url, target){
- var i = snap.rect(x,y,w,h).attr({
- stroke: '#AA0000',
- 'stroke-width': 1
- });
- snap.select(target).append(i);
if(url !== ""){
var p = snap.image(url,x,y,w,h).attr({
transform: 'matrix(1,0,0,-1,0,'+ String(h) +')',
@@ -698,7 +721,7 @@ $(function(){
self.clear_gcode = function(){
snap.select('#gCodePreview').clear();
};
-
+
self.onStartup = function(){
self.state.workingArea = self;
self.files.workingArea = self;
@@ -731,6 +754,79 @@ $(function(){
}
});
};
+
+ self._embedAllImages = function(svg, callback){
+
+ var allImages = svg.selectAll('image');
+ var linkedImages = allImages.items.filter(function(i){ return !i.attr('href').startsWith('data:') });
+ if(linkedImages.length > 0){
+ var callbackCounter = linkedImages.length;
+ for (var i = 0; i < linkedImages.length; i++) {
+ var img = linkedImages[i];
+ img.embedImage(function(){
+ callbackCounter--;
+ if(callbackCounter === 0 && typeof callback === 'function'){
+ callback();
+ }
+ });
+ }
+ } else {
+ // callback if nothing to embed
+ if(typeof callback === 'function'){
+ callback();
+ }
+ }
+ }
+
+ // render the infill and inject it as an image into the svg
+ self.renderInfill = function (svg, fillAreas, wMM, hMM, pxPerMM, callback) {
+ var wPT = wMM * 90 / 25.4;
+ var hPT = hMM * 90 / 25.4;
+ var tmpSvg = Snap(wPT, hPT).attr('id', 'tmpSvg');
+ // get only filled items and embed the images
+ var userContent = svg.clone();
+ tmpSvg.append(userContent);
+ self._embedAllImages(tmpSvg, function(){
+ var fillings = userContent.removeUnfilled(fillAreas);
+ for (var i = 0; i < fillings.length; i++) {
+ var item = fillings[i];
+
+ if (item.type === 'image') {
+ // remove filter effects on images for proper rendering
+ var style = item.attr('style');
+ if (style !== null) {
+ var strippedFilters = style.replace(/filter.+?;/, '');
+ item.attr('style', strippedFilters);
+ }
+ } else {
+ // remove stroke from other elements
+ //item.attr('fill', '#ff0000');
+ item.attr('stroke', 'none');
+ }
+ }
+
+ var cb = function(result) {
+ if(fillings.length > 0){
+ // replace all images with the fill rendering
+ svg.selectAll('image').remove();
+ var waBB = snap.select('#coordGrid').getBBox();
+ var fillImage = snap.image(result, 0, 0, waBB.w, waBB.h);
+ fillImage.attr('id', 'fillRendering');
+ svg.append(fillImage);
+ }
+ if (typeof callback === 'function') {
+ callback(svg);
+ }
+ self._cleanup_render_mess();
+ };
+
+ tmpSvg.renderPNG(wMM, hMM, pxPerMM, cb);
+ });
+ };
+
+ self._cleanup_render_mess = function(){
+ $('#tmpSvg').remove();
+ };
self.onBeforeBinding = function(){
self.files.workingArea = self;
diff --git a/src/octoprint/plugins/svgtogcode/templates/svgtogcode.jinja2 b/src/octoprint/plugins/svgtogcode/templates/svgtogcode.jinja2
index ee46cc96..0eba6848 100644
--- a/src/octoprint/plugins/svgtogcode/templates/svgtogcode.jinja2
+++ b/src/octoprint/plugins/svgtogcode/templates/svgtogcode.jinja2
@@ -38,6 +38,12 @@
The effect in general is dependent from the material and its color and surface.
+
+
+
+
@@ -176,7 +182,7 @@
- {{ _('Cancel') }}
+ {{ _('Cancel') }}{{ _('Convert') }}
\ No newline at end of file
diff --git a/src/octoprint/printer/__init__.py b/src/octoprint/printer/__init__.py
index b518cb20..2a4446db 100644
--- a/src/octoprint/printer/__init__.py
+++ b/src/octoprint/printer/__init__.py
@@ -23,7 +23,7 @@ __copyright__ = "Copyright (C) 2014 The OctoPrint Project - Released under terms
import re
-import octoprint.util.comm_acc as comm
+import octoprint.util.comm_acc2 as comm
import octoprint.util as util
from octoprint.settings import settings
diff --git a/src/octoprint/printer/standard.py b/src/octoprint/printer/standard.py
index b0827966..5fee8558 100644
--- a/src/octoprint/printer/standard.py
+++ b/src/octoprint/printer/standard.py
@@ -22,7 +22,7 @@ from octoprint.plugin import plugin_manager, ProgressPlugin
from octoprint.printer import PrinterInterface, PrinterCallback, UnknownScript
from octoprint.printer.estimation import TimeEstimationHelper
from octoprint.settings import settings
-from octoprint.util import comm_acc as comm
+from octoprint.util import comm_acc2 as comm
from octoprint.util import InvariantContainer
diff --git a/src/octoprint/static/js/app/viewmodels/control.js b/src/octoprint/static/js/app/viewmodels/control.js
index 71ecc7b4..cf3b18bf 100644
--- a/src/octoprint/static/js/app/viewmodels/control.js
+++ b/src/octoprint/static/js/app/viewmodels/control.js
@@ -108,11 +108,11 @@ $(function() {
});
}
};
-
+
self.rerenderControls = function () {
var allControls = self.controlsFromServer.concat(self.additionalControls);
- self.controls(self._processControls(allControls))
+ self.controls(self._processControls(allControls));
};
self.requestData = function () {
diff --git a/src/octoprint/static/js/app/viewmodels/files.js b/src/octoprint/static/js/app/viewmodels/files.js
index 45fe0290..b4f71d85 100644
--- a/src/octoprint/static/js/app/viewmodels/files.js
+++ b/src/octoprint/static/js/app/viewmodels/files.js
@@ -100,7 +100,7 @@ $(function() {
});
}
};
-
+
self.fromCurrentData = function(data) {
self._processStateData(data.state);
};
@@ -138,7 +138,7 @@ $(function() {
}
});
};
-
+
self.fromResponse = function(response, filenameToFocus, locationToFocus) {
var files = response.files;
_.each(files, function(element, index, list) {
@@ -267,7 +267,7 @@ $(function() {
return "files_template_dummy";
}
};
-
+
self.getEntryId = function(data) {
return "gcode_file_" + md5(data["origin"] + ":" + data["name"]);
};
@@ -344,7 +344,7 @@ $(function() {
}
return output;
};
-
+
self.performSearch = function(e) {
if (e !== undefined) {
e.preventDefault();
@@ -375,7 +375,7 @@ $(function() {
self.enableSVGConversion = function (data) {
return self.loginState.isUser() && !(self.isPrinting() || self.isPaused());
};
-
+
self.onStartup = function() {
$(".accordion-toggle[data-target='#files']").click(function() {
var files = $("#files");
@@ -603,6 +603,90 @@ $(function() {
}, 1000);
});
+ $('#take_photo_dialog').on('hide', function () {
+ $('#photo_preview').data("photobooth").destroy();
+ });
+
+
+ $('#take_photo_dialog').on('shown', function () {
+ $('#photo_preview').photobooth();
+ var w = $('#photo_preview').parent().width()*0.98;
+ var h = w*3.0/4.0;
+ $('#photo_preview').height(h);
+ $('#photo_preview').width(w);
+ $('#photo_preview').data('photobooth').resize(w, h);
+ });
+
+ $('#photo_preview').on("image", function (event, dataUrl) {
+ var photoBlob = self.dataUriToBlob(dataUrl);
+ var t = new Date();
+ var yyyy = t.getFullYear().toString();
+ var mm = (t.getMonth()+1).toString(); // getMonth() is zero-based
+ var dd = t.getDate().toString();
+ var hh = t.getHours().toString();
+ var m = t.getMinutes().toString();
+ var date = yyyy + (mm[1]?mm:"0"+mm[0]) + (dd[1]?dd:"0"+dd[0]) + '_' + (hh[1]?hh:"0"+hh[0])+(m[1]?m:"0"+m[0]); // padding
+
+ var filename = "Photo_" + date + ".png";
+ var data = new FormData();
+ data.append('file', photoBlob, filename);
+
+ jQuery.ajax({
+ url: API_BASEURL + "files/local",
+ data: data,
+ cache: false,
+ contentType: false,
+ processData: false,
+ type: 'POST',
+ success: function(data, resp){
+ gcode_upload_done(resp, {result: data});
+ $('#take_photo_dialog').modal("hide");
+ },
+ fail: gcode_upload_fail,
+ progressall: gcode_upload_progress
+ });
+ });
+
+ self.takePhoto = function () {
+ $('#take_photo_dialog').modal("show");
+ };
+
+ self.hasCamera = function () {
+ var fGetUserMedia = (
+ navigator.getUserMedia ||
+ navigator.webkitGetUserMedia ||
+ navigator.mozGetUserMedia ||
+ navigator.oGetUserMedia ||
+ navigator.msieGetUserMedia ||
+ false
+ );
+ return !!fGetUserMedia;
+ };
+
+ self.dataUriToBlob = function(dataURI) {
+ // serialize the base64/URLEncoded data
+ var byteString;
+ if (dataURI.split(',')[0].indexOf('base64') >= 0) {
+ byteString = atob(dataURI.split(',')[1]);
+ }
+ else {
+ byteString = unescape(dataURI.split(',')[1]);
+ }
+
+ // parse the mime type
+ var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];
+
+ // construct a Blob of the image data
+ var array = [];
+ for (var i = 0; i < byteString.length; i++) {
+ array.push(byteString.charCodeAt(i));
+ }
+ return new Blob(
+ [new Uint8Array(array)],
+ {type: mimeString}
+ );
+ };
+
self.requestData();
};
diff --git a/src/octoprint/static/js/app/viewmodels/printerstate.js b/src/octoprint/static/js/app/viewmodels/printerstate.js
index 1ceacb01..b6b8f6d5 100644
--- a/src/octoprint/static/js/app/viewmodels/printerstate.js
+++ b/src/octoprint/static/js/app/viewmodels/printerstate.js
@@ -34,6 +34,10 @@ $(function() {
self.currentHeight = ko.observable(undefined);
self.currentPos = ko.observable(undefined);
+ self.intensityOverride = ko.observable(100);
+ self.feedrateOverride = ko.observable(100);
+ self.intensityOverride.extend({ rateLimit: 500 });
+ self.feedrateOverride.extend({ rateLimit: 500 });
self.TITLE_PRINT_BUTTON_PAUSED = gettext("Restarts the print job from the beginning");
self.TITLE_PRINT_BUTTON_UNPAUSED = gettext("Starts the print job");
@@ -281,6 +285,62 @@ $(function() {
self.onEventRealTimeState = function(payload){
self.currentPos({x: payload.wx, y: payload.wy});
};
+
+ self.intensityOverride.subscribe(function(factor){
+ self._overrideCommand("/intensity "+factor);
+ });
+ self.feedrateOverride.subscribe(function(factor){
+ self._overrideCommand("/feedrate "+factor);
+ });
+
+ self._overrideCommand = function(command, callback) {
+ $.ajax({
+ url: API_BASEURL + "printer/command",
+ type: "POST",
+ dataType: "json",
+ contentType: "application/json; charset=UTF-8",
+ data: JSON.stringify({command: command}),
+ success: function(response) {
+ if (callback != undefined) {
+ callback();
+ }
+ }
+ });
+ };
+
+ self._configureOverrideSliders = function() {
+ self.intensityOverrideSlider = $("#intensity_override_slider").slider({
+ step: 1,
+ min: 10,
+ max: 200,
+ value: 100,
+// tooltip: 'hide'
+ }).on("slideStop", function(ev){
+ self.intensityOverride(ev.value);
+ });
+
+ self.feedrateOverrideSlider = $("#feedrate_override_slider").slider({
+ step: 1,
+ min: 10,
+ max: 200,
+ value: 100,
+// tooltip: 'hide'
+ }).on("slideStop", function(ev){
+ self.feedrateOverride(ev.value);
+ });
+
+ };
+
+ self.onEventPrintDone = function(){
+ self.feedrateOverrideSlider.slider('setValue', 100);
+ self.intensityOverrideSlider.slider('setValue', 100);
+ self.intensityOverride(100);
+ self.feedrateOverride(100);
+ };
+
+ self.onStartup = function() {
+ self._configureOverrideSliders();
+ };
}
OCTOPRINT_VIEWMODELS.push([
diff --git a/src/octoprint/templates/dialogs/take_photo.jinja2 b/src/octoprint/templates/dialogs/take_photo.jinja2
new file mode 100644
index 00000000..f91b94a5
--- /dev/null
+++ b/src/octoprint/templates/dialogs/take_photo.jinja2
@@ -0,0 +1,12 @@
+
\ No newline at end of file
diff --git a/src/octoprint/templates/index.jinja2 b/src/octoprint/templates/index.jinja2
index cae2ac47..d94d0733 100644
--- a/src/octoprint/templates/index.jinja2
+++ b/src/octoprint/templates/index.jinja2
@@ -15,27 +15,6 @@
{% include 'initscript.jinja2' %}
-