mirror of
https://github.com/Doodle3D/doodle3d-client.git
synced 2024-12-25 06:23:47 +01:00
Merge branch 'develop'
This commit is contained in:
commit
f3577669d2
1
Makefile
1
Makefile
@ -62,6 +62,7 @@ define Package/doodle3d-client/install
|
||||
$(CP) $(PKG_BUILD_DIR)/www/index.html $(1)/www/
|
||||
$(CP) $(PKG_BUILD_DIR)/www/settings.html $(1)/www/
|
||||
$(CP) $(PKG_BUILD_DIR)/www/helpcontent.html $(1)/www/
|
||||
$(CP) $(PKG_BUILD_DIR)/www/redirect.html $(1)/www/
|
||||
|
||||
$(CP) $(PKG_BUILD_DIR)/www/css/debug.min.css $(1)/www/css/
|
||||
$(CP) $(PKG_BUILD_DIR)/www/css/settings.min.css $(1)/www/css/
|
||||
|
@ -7,38 +7,38 @@
|
||||
*/
|
||||
|
||||
function Message() {
|
||||
|
||||
|
||||
Message.ERROR = "error";
|
||||
Message.WARNING = "warning";
|
||||
Message.NOTICE = "notice";
|
||||
Message.INFO = "info";
|
||||
|
||||
|
||||
this.mode = "";
|
||||
|
||||
|
||||
this.$element;
|
||||
|
||||
|
||||
var self = this;
|
||||
var autoHideDelay = 5000;
|
||||
var autohideTimeout;
|
||||
|
||||
|
||||
this.init = function($element) {
|
||||
this.$element = $element;
|
||||
}
|
||||
this.set = function(text,mode,autoHide,disableEffect) {
|
||||
console.log("Message:set: ",text,mode,autoHide,disableEffect);
|
||||
this.set = function(contents,mode,autoHide,disableEffect) {
|
||||
console.log("Message:set: ",contents,mode,autoHide,disableEffect);
|
||||
if(disableEffect) {
|
||||
self.fill(text,mode,autoHide)
|
||||
self.fill(contents,mode,autoHide)
|
||||
} else{
|
||||
self.hide(function() {
|
||||
self.show();
|
||||
self.fill(text,mode,autoHide)
|
||||
self.fill(contents,mode,autoHide)
|
||||
});
|
||||
}
|
||||
}
|
||||
this.fill = function(text,mode,autoHide) {
|
||||
this.fill = function(contents,mode,autoHide) {
|
||||
//console.log("Message:fill: ",text,mode,autoHide);
|
||||
self.clear();
|
||||
self.$element.text(text);
|
||||
self.$element.html(contents);
|
||||
self.$element.addClass(mode);
|
||||
self.mode = mode;
|
||||
clearTimeout(autohideTimeout);
|
||||
@ -47,10 +47,10 @@ function Message() {
|
||||
}
|
||||
}
|
||||
this.clear = function($element) {
|
||||
this.$element.text("");
|
||||
this.$element.html("");
|
||||
this.$element.removeClass(this.mode);
|
||||
}
|
||||
|
||||
|
||||
this.show = function() {
|
||||
this.$element.fadeIn(200);
|
||||
}
|
||||
|
344
js/Printer.js
344
js/Printer.js
@ -11,51 +11,52 @@ var $printProgressContainer = $("#printProgressContainer");
|
||||
var $progressbar = $("#progressbar");
|
||||
var $progressAmount = $(".progressAmount");
|
||||
function setPrintprogress(val) {
|
||||
if (isNaN(val)) return;
|
||||
// console.log("f:setPrintprogress() >> val " + val);
|
||||
$progressbar.css("width", val*100 + "%");
|
||||
$progressAmount.text(Math.floor(val*100) + "%");
|
||||
if (isNaN(val)) return;
|
||||
// console.log("f:setPrintprogress() >> val " + val);
|
||||
$progressbar.css("width", val*100 + "%");
|
||||
$progressAmount.text(Math.floor(val*100) + "%");
|
||||
}
|
||||
//*/
|
||||
|
||||
function Printer() {
|
||||
|
||||
Printer.WIFIBOX_DISCONNECTED_STATE = "wifibox disconnected";
|
||||
Printer.UNKNOWN_STATE = "unknown"; // happens when a printer is connection but there isn't communication yet
|
||||
Printer.DISCONNECTED_STATE = "disconnected"; // printer disconnected
|
||||
Printer.IDLE_STATE = "idle"; // printer found, but idle
|
||||
Printer.BUFFERING_STATE = "buffering"; // printer is buffering (recieving) data, but not yet printing
|
||||
Printer.PRINTING_STATE = "printing";
|
||||
Printer.STOPPING_STATE = "stopping"; // when you stop (abort) a print it prints the endcode
|
||||
Printer.TOUR_STATE = "tour"; // when in joyride mode
|
||||
Printer.WIFIBOX_DISCONNECTED_STATE = "wifibox disconnected";
|
||||
Printer.UNKNOWN_STATE = "unknown"; // happens when a printer is connection but there isn't communication yet
|
||||
Printer.DISCONNECTED_STATE = "disconnected"; // printer disconnected
|
||||
Printer.CONNECTING_STATE = "connecting"; // printer connecting (printer found, but driver has not yet finished setting up the connection)
|
||||
Printer.IDLE_STATE = "idle"; // printer found and ready to use, but idle
|
||||
Printer.BUFFERING_STATE = "buffering"; // printer is buffering (recieving) data, but not yet printing
|
||||
Printer.PRINTING_STATE = "printing";
|
||||
Printer.STOPPING_STATE = "stopping"; // when you stop (abort) a print it prints the endcode
|
||||
Printer.TOUR_STATE = "tour"; // when in joyride mode
|
||||
|
||||
Printer.ON_BEFORE_UNLOAD_MESSAGE = "You're doodle is still being send to the printer, leaving will result in a incomplete 3D print";
|
||||
Printer.ON_BEFORE_UNLOAD_MESSAGE = "You're doodle is still being sent to the printer, leaving will result in a incomplete 3D print";
|
||||
|
||||
this.temperature = 0;
|
||||
this.temperature = 0;
|
||||
this.targetTemperature = 0;
|
||||
this.currentLine = 0;
|
||||
this.totalLines = 0;
|
||||
this.bufferedLines = 0;
|
||||
this.state = Printer.UNKNOWN_STATE;
|
||||
this.hasControl = true; // whether this client has control access
|
||||
this.currentLine = 0;
|
||||
this.totalLines = 0;
|
||||
this.bufferedLines = 0;
|
||||
this.state = Printer.UNKNOWN_STATE;
|
||||
this.hasControl = true; // whether this client has control access
|
||||
|
||||
this.wifiboxURL;
|
||||
|
||||
this.checkStatusInterval = 3000;
|
||||
this.checkStatusInterval = 3000;
|
||||
this.checkStatusDelay;
|
||||
this.timeoutTime = 3000;
|
||||
this.sendPrintPartTimeoutTime = 5000;
|
||||
this.timeoutTime = 3000;
|
||||
this.sendPrintPartTimeoutTime = 5000;
|
||||
|
||||
this.gcode; // gcode to be printed
|
||||
this.sendLength = 500; // max amount of gcode lines per post (limited because WiFi box can't handle to much)
|
||||
this.gcode; // gcode to be printed
|
||||
this.sendLength = 500; // max amount of gcode lines per post (limited because WiFi box can't handle too much)
|
||||
|
||||
this.retryDelay = 2000; // retry setTimout delay
|
||||
this.retrySendPrintPartDelay; // retry setTimout instance
|
||||
this.retryDelay = 2000; // retry setTimout delay
|
||||
this.retrySendPrintPartDelay; // retry setTimout instance
|
||||
this.retryCheckStatusDelay; // retry setTimout instance
|
||||
this.retryStopDelay; // retry setTimout instance
|
||||
this.retryPreheatDelay; // retry setTimout instance
|
||||
this.retryStopDelay; // retry setTimout instance
|
||||
this.retryPreheatDelay; // retry setTimout instance
|
||||
|
||||
Printer.MAX_GCODE_SIZE = 10; // max size of gcode in MB's (estimation)
|
||||
Printer.MAX_GCODE_SIZE = 10; // max size of gcode in MB's (estimation)
|
||||
|
||||
this.stateOverruled = false;
|
||||
|
||||
@ -65,40 +66,36 @@ function Printer() {
|
||||
var self = this;
|
||||
|
||||
this.init = function() {
|
||||
//console.log("Printer:init");
|
||||
//console.log("Printer:init");
|
||||
//this.wifiboxURL = "http://" + window.location.host + "/cgi-bin/d3dapi";
|
||||
//this.wifiboxURL = "http://192.168.5.1/cgi-bin/d3dapi";
|
||||
this.wifiboxURL = wifiboxURL;
|
||||
//this.wifiboxURL = "proxy5.php";
|
||||
//console.log(" wifiboxURL: ",this.wifiboxURL);
|
||||
//console.log(" wifiboxURL: ",this.wifiboxURL);
|
||||
|
||||
if(autoUpdate) {
|
||||
this.startStatusCheckInterval();
|
||||
}
|
||||
}
|
||||
if (autoUpdate) {
|
||||
this.startStatusCheckInterval();
|
||||
}
|
||||
}
|
||||
|
||||
this.preheat = function() {
|
||||
console.log("Printer:preheat");
|
||||
console.log("Printer:preheat");
|
||||
|
||||
if( this.state == Printer.BUFFERING_STATE ||
|
||||
this.state == Printer.PRINTING_STATE ||
|
||||
this.state == Printer.STOPPING_STATE) {
|
||||
return;
|
||||
}
|
||||
if (this.state != Printer.IDLE_STATE) return;
|
||||
|
||||
var self = this;
|
||||
if (communicateWithWifibox) {
|
||||
$.ajax({
|
||||
url: this.wifiboxURL + "/printer/heatup",
|
||||
type: "POST",
|
||||
dataType: 'json',
|
||||
timeout: this.timeoutTime,
|
||||
success: function(data){
|
||||
console.log("Printer:preheat response: ",data);
|
||||
if(data.status != "success") {
|
||||
clearTimeout(self.retryPreheatDelay);
|
||||
var self = this;
|
||||
if (communicateWithWifibox) {
|
||||
$.ajax({
|
||||
url: this.wifiboxURL + "/printer/heatup",
|
||||
type: "POST",
|
||||
dataType: 'json',
|
||||
timeout: this.timeoutTime,
|
||||
success: function(data){
|
||||
console.log("Printer:preheat response: ",data);
|
||||
if(data.status != "success") {
|
||||
clearTimeout(self.retryPreheatDelay);
|
||||
self.retryPreheatDelay = setTimeout(function() { self.preheat() },self.retryDelay); // retry after delay
|
||||
}
|
||||
}
|
||||
}
|
||||
}).fail(function() {
|
||||
console.log("Printer:preheat: failed");
|
||||
@ -106,99 +103,102 @@ function Printer() {
|
||||
self.retryPreheatDelay = setTimeout(function() { self.preheat() },self.retryDelay); // retry after delay
|
||||
});
|
||||
} else {
|
||||
console.log ("Printer >> f:preheat() >> communicateWithWifibox is false, so not executing this function");
|
||||
}
|
||||
console.log ("Printer >> f:preheat() >> communicateWithWifibox is false, so not executing this function");
|
||||
}
|
||||
}
|
||||
|
||||
this.print = function(gcode) {
|
||||
console.log("Printer:print");
|
||||
console.log(" gcode total # of lines: " + gcode.length);
|
||||
console.log("Printer:print");
|
||||
console.log(" gcode total # of lines: " + gcode.length);
|
||||
|
||||
message.set("Sending doodle to printer...",Message.NOTICE);
|
||||
self.addLeaveWarning();
|
||||
message.set("Sending doodle to printer...",Message.NOTICE);
|
||||
self.addLeaveWarning();
|
||||
|
||||
/*for (i = 0; i < gcode.length; i++) {
|
||||
/*for (i = 0; i < gcode.length; i++) {
|
||||
gcode[i] += " (" + i + ")";
|
||||
}*/
|
||||
|
||||
this.sendIndex = 0;
|
||||
this.gcode = gcode;
|
||||
this.gcode = gcode;
|
||||
|
||||
//console.log(" gcode[20]: ",gcode[20]);
|
||||
var gcodeLineSize = this.byteSize(gcode[20]);
|
||||
//console.log(" gcodeLineSize: ",gcodeLineSize);
|
||||
var gcodeSize = gcodeLineSize*gcode.length/1024/1024; // estimate gcode size in MB's
|
||||
console.log(" gcodeSize: ",gcodeSize);
|
||||
//console.log(" gcode[20]: ",gcode[20]);
|
||||
var gcodeLineSize = this.byteSize(gcode[20]);
|
||||
//console.log(" gcodeLineSize: ",gcodeLineSize);
|
||||
var gcodeSize = gcodeLineSize*gcode.length/1024/1024; // estimate gcode size in MB's
|
||||
console.log(" gcodeSize: ",gcodeSize);
|
||||
|
||||
if(gcodeSize > Printer.MAX_GCODE_SIZE) {
|
||||
alert("Error: Printer:print: gcode file is probably too big ("+gcodeSize+"MB) (max: "+Printer.MAX_GCODE_SIZE+"MB)");
|
||||
console.log("Error: Printer:print: gcode file is probably too big ("+gcodeSize+"MB) (max: "+Printer.MAX_GCODE_SIZE+"MB)");
|
||||
if(gcodeSize > Printer.MAX_GCODE_SIZE) {
|
||||
var msg = "Error: Printer:print: gcode file is probably too big ("+gcodeSize+"MB) (max: "+Printer.MAX_GCODE_SIZE+"MB)";
|
||||
alert(msg);
|
||||
console.log(msg);
|
||||
|
||||
this.overruleState(Printer.IDLE_STATE);
|
||||
this.startStatusCheckInterval();
|
||||
message.hide();
|
||||
self.removeLeaveWarning();
|
||||
this.overruleState(Printer.IDLE_STATE);
|
||||
this.startStatusCheckInterval();
|
||||
message.hide();
|
||||
self.removeLeaveWarning();
|
||||
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
//this.targetTemperature = settings["printer.temperature"]; // slight hack
|
||||
//this.targetTemperature = settings["printer.temperature"]; // slight hack
|
||||
|
||||
this.sendPrintPart(this.sendIndex, this.sendLength);
|
||||
}
|
||||
|
||||
this.byteSize = function(s){
|
||||
return~-encodeURI(s).split(/%..|./).length;
|
||||
}
|
||||
|
||||
this.sendPrintPart = function(sendIndex,sendLength) {
|
||||
console.log("Printer:sendPrintPart sendIndex: " + sendIndex + "/" + this.gcode.length + ", sendLength: " + sendLength);
|
||||
|
||||
|
||||
|
||||
var sendPercentage = Math.round(sendIndex/this.gcode.length*100);
|
||||
message.set("Sending doodle to printer: "+sendPercentage+"%",Message.NOTICE,false,true);
|
||||
|
||||
var firstOne = (sendIndex == 0)? true : false;
|
||||
var start = firstOne; // start printing right away
|
||||
|
||||
var completed = false;
|
||||
if (this.gcode.length < (sendIndex + sendLength)) {
|
||||
console.log(" sending less than max sendLength (and last)");
|
||||
sendLength = this.gcode.length - sendIndex;
|
||||
//lastOne = true;
|
||||
completed = true;
|
||||
}
|
||||
var gcodePart = this.gcode.slice(sendIndex, sendIndex+sendLength);
|
||||
|
||||
var postData = { gcode: gcodePart.join("\n"), first: firstOne, start: start};
|
||||
var self = this;
|
||||
if (communicateWithWifibox) {
|
||||
$.ajax({
|
||||
url: this.wifiboxURL + "/printer/print",
|
||||
type: "POST",
|
||||
data: postData,
|
||||
dataType: 'json',
|
||||
timeout: this.sendPrintPartTimeoutTime,
|
||||
success: function(data){
|
||||
console.log("Printer:sendPrintPart response: ",data);
|
||||
var firstOne = (sendIndex == 0)? true : false;
|
||||
var start = firstOne; // start printing right away
|
||||
|
||||
if(data.status == "success") {
|
||||
if (completed) {
|
||||
console.log("Printer:sendPrintPart:gcode sending completed");
|
||||
this.gcode = [];
|
||||
btnStop.css("display","block"); // hack
|
||||
self.removeLeaveWarning();
|
||||
message.set("Doodle has been sent to printer...",Message.INFO,true);
|
||||
//self.targetTemperature = settings["printer.temperature"]; // slight hack
|
||||
} else {
|
||||
// only if the state hasn't bin changed (by for example pressing stop) we send more gcode
|
||||
var completed = false;
|
||||
if (this.gcode.length < (sendIndex + sendLength)) {
|
||||
console.log(" sending less than max sendLength (and last)");
|
||||
sendLength = this.gcode.length - sendIndex;
|
||||
//lastOne = true;
|
||||
completed = true;
|
||||
}
|
||||
var gcodePart = this.gcode.slice(sendIndex, sendIndex+sendLength);
|
||||
|
||||
//console.log("Printer:sendPrintPart:gcode part received (state: ",self.state,")");
|
||||
if(self.state == Printer.PRINTING_STATE || self.state == Printer.BUFFERING_STATE) {
|
||||
//console.log("Printer:sendPrintPart:sending next part");
|
||||
self.sendPrintPart(sendIndex + sendLength, sendLength);
|
||||
}
|
||||
}
|
||||
}
|
||||
// after we know the first gcode packed has bin received or failed
|
||||
var postData = { gcode: gcodePart.join("\n"), first: firstOne, start: start};
|
||||
var self = this;
|
||||
if (communicateWithWifibox) {
|
||||
$.ajax({
|
||||
url: this.wifiboxURL + "/printer/print",
|
||||
type: "POST",
|
||||
data: postData,
|
||||
dataType: 'json',
|
||||
timeout: this.sendPrintPartTimeoutTime,
|
||||
success: function(data){
|
||||
console.log("Printer:sendPrintPart response: ",data);
|
||||
|
||||
if(data.status == "success") {
|
||||
if (completed) {
|
||||
console.log("Printer:sendPrintPart:gcode sending completed");
|
||||
this.gcode = [];
|
||||
btnStop.css("display","block"); // hack
|
||||
self.removeLeaveWarning();
|
||||
message.set("Doodle has been sent to printer...",Message.INFO,true);
|
||||
//self.targetTemperature = settings["printer.temperature"]; // slight hack
|
||||
} else {
|
||||
// only if the state hasn't been changed (by for example pressing stop) we send more gcode
|
||||
|
||||
//console.log("Printer:sendPrintPart:gcode part received (state: ",self.state,")");
|
||||
if(self.state == Printer.PRINTING_STATE || self.state == Printer.BUFFERING_STATE) {
|
||||
//console.log("Printer:sendPrintPart:sending next part");
|
||||
self.sendPrintPart(sendIndex + sendLength, sendLength);
|
||||
}
|
||||
}
|
||||
}
|
||||
// after we know the first gcode packed has bin received or failed
|
||||
// (and the driver had time to update the printer.state)
|
||||
// we start checking the status again
|
||||
if(sendIndex == 0) {
|
||||
@ -219,31 +219,31 @@ function Printer() {
|
||||
self.startStatusCheckInterval();
|
||||
});
|
||||
} else {
|
||||
console.log ("Printer >> f:sendPrintPart() >> communicateWithWifibox is false, so not executing this function");
|
||||
}
|
||||
console.log ("Printer >> f:sendPrintPart() >> communicateWithWifibox is false, so not executing this function");
|
||||
}
|
||||
}
|
||||
|
||||
this.stop = function() {
|
||||
console.log("Printer:stop");
|
||||
endCode = generateEndCode();
|
||||
console.log(" endCode: ",endCode);
|
||||
var postData = { gcode: endCode.join("\n")};
|
||||
console.log("Printer:stop");
|
||||
endCode = generateEndCode();
|
||||
console.log(" endCode: ",endCode);
|
||||
var postData = { gcode: endCode.join("\n")};
|
||||
var self = this;
|
||||
if (communicateWithWifibox) {
|
||||
$.ajax({
|
||||
url: this.wifiboxURL + "/printer/stop",
|
||||
type: "POST",
|
||||
data: postData,
|
||||
dataType: 'json',
|
||||
timeout: this.timeoutTime,
|
||||
success: function(data){
|
||||
console.log("Printer:stop response: ", data);
|
||||
$.ajax({
|
||||
url: this.wifiboxURL + "/printer/stop",
|
||||
type: "POST",
|
||||
data: postData,
|
||||
dataType: 'json',
|
||||
timeout: this.timeoutTime,
|
||||
success: function(data){
|
||||
console.log("Printer:stop response: ", data);
|
||||
|
||||
// after we know the stop has bin received or failed
|
||||
// after we know the stop has bin received or failed
|
||||
// (and the driver had time to update the printer.state)
|
||||
// we start checking the status again
|
||||
self.startStatusCheckInterval();
|
||||
}
|
||||
}
|
||||
}).fail(function() {
|
||||
console.log("Printer:stop: failed");
|
||||
clearTimeout(self.retryStopDelay);
|
||||
@ -255,9 +255,10 @@ function Printer() {
|
||||
self.startStatusCheckInterval();
|
||||
});
|
||||
} else {
|
||||
console.log ("Printer >> f:communicateWithWifibox() >> communicateWithWifibox is false, so not executing this function");
|
||||
}
|
||||
console.log ("Printer >> f:stop() >> communicateWithWifibox is false, so not executing this function");
|
||||
}
|
||||
}
|
||||
|
||||
this.startStatusCheckInterval = function() {
|
||||
console.log("Printer:startStatusCheckInterval");
|
||||
self.checkStatus();
|
||||
@ -265,42 +266,45 @@ function Printer() {
|
||||
clearTimeout(self.retryCheckStatusDelay);
|
||||
self.checkStatusDelay = setTimeout(function() { self.checkStatus() }, self.checkStatusInterval);
|
||||
}
|
||||
|
||||
this.stopStatusCheckInterval = function() {
|
||||
console.log("Printer:stopStatusCheckInterval");
|
||||
clearTimeout(self.checkStatusDelay);
|
||||
clearTimeout(self.retryCheckStatusDelay);
|
||||
}
|
||||
|
||||
this.checkStatus = function() {
|
||||
//console.log("Printer:checkStatus");
|
||||
this.stateOverruled = false;
|
||||
//console.log(" stateOverruled: ",this.stateOverruled);
|
||||
var self = this;
|
||||
if (communicateWithWifibox) {
|
||||
$.ajax({
|
||||
url: this.wifiboxURL + "/info/status",
|
||||
dataType: 'json',
|
||||
timeout: this.timeoutTime,
|
||||
success: function(response){
|
||||
//console.log(" Printer:status: ",response.data.state); //," response: ",response);
|
||||
var self = this;
|
||||
if (communicateWithWifibox) {
|
||||
$.ajax({
|
||||
url: this.wifiboxURL + "/info/status",
|
||||
dataType: 'json',
|
||||
timeout: this.timeoutTime,
|
||||
success: function(response){
|
||||
//console.log(" Printer:status: ",response.data.state); //," response: ",response);
|
||||
|
||||
self.handleStatusUpdate(response);
|
||||
self.handleStatusUpdate(response);
|
||||
|
||||
clearTimeout(self.checkStatusDelay);
|
||||
clearTimeout(self.retryCheckStatusDelay);
|
||||
self.checkStatusDelay = setTimeout(function() { self.checkStatus() }, self.checkStatusInterval);
|
||||
}
|
||||
}).fail(function() {
|
||||
console.log("Printer:checkStatus: failed");
|
||||
self.state = Printer.WIFIBOX_DISCONNECTED_STATE;
|
||||
clearTimeout(self.checkStatusDelay);
|
||||
clearTimeout(self.retryCheckStatusDelay);
|
||||
self.retryCheckStatusDelay = setTimeout(function() { self.checkStatus() },self.retryDelay); // retry after delay
|
||||
$(document).trigger(Printer.UPDATE);
|
||||
});
|
||||
} else {
|
||||
console.log ("Printer >> f:checkStatus() >> communicateWithWifibox is false, so not executing this function");
|
||||
}
|
||||
clearTimeout(self.checkStatusDelay);
|
||||
clearTimeout(self.retryCheckStatusDelay);
|
||||
self.checkStatusDelay = setTimeout(function() { self.checkStatus() }, self.checkStatusInterval);
|
||||
}
|
||||
}).fail(function() {
|
||||
console.log("Printer:checkStatus: failed");
|
||||
self.state = Printer.WIFIBOX_DISCONNECTED_STATE;
|
||||
clearTimeout(self.checkStatusDelay);
|
||||
clearTimeout(self.retryCheckStatusDelay);
|
||||
self.retryCheckStatusDelay = setTimeout(function() { self.checkStatus() },self.retryDelay); // retry after delay
|
||||
$(document).trigger(Printer.UPDATE);
|
||||
});
|
||||
} else {
|
||||
console.log ("Printer >> f:checkStatus() >> communicateWithWifibox is false, so not executing this function");
|
||||
}
|
||||
}
|
||||
|
||||
this.handleStatusUpdate = function(response) {
|
||||
//console.log("Printer:handleStatusUpdate response: ",response);
|
||||
var data = response.data;
|
||||
@ -310,21 +314,21 @@ function Printer() {
|
||||
// state
|
||||
//console.log(" stateOverruled: ",this.stateOverruled);
|
||||
if(!this.stateOverruled) {
|
||||
self.state = data.state;
|
||||
self.state = data.state;
|
||||
//console.log(" state > ",self.state);
|
||||
}
|
||||
|
||||
// temperature
|
||||
self.temperature = data.hotend;
|
||||
self.targetTemperature = data.hotend_target;
|
||||
self.temperature = data.hotend;
|
||||
self.targetTemperature = data.hotend_target;
|
||||
|
||||
// progress
|
||||
self.currentLine = data.current_line;
|
||||
self.totalLines = data.total_lines;
|
||||
self.bufferedLines = data.buffered_lines
|
||||
self.currentLine = data.current_line;
|
||||
self.totalLines = data.total_lines;
|
||||
self.bufferedLines = data.buffered_lines
|
||||
|
||||
// access
|
||||
self.hasControl = data.has_control;
|
||||
self.hasControl = data.has_control;
|
||||
|
||||
if(self.state == Printer.PRINTING_STATE || self.state == Printer.STOPPING_STATE) {
|
||||
console.log("progress: ",self.currentLine+"/"+self.totalLines+" ("+self.bufferedLines+") ("+self.state+")");
|
||||
@ -332,6 +336,7 @@ function Printer() {
|
||||
}
|
||||
$(document).trigger(Printer.UPDATE);
|
||||
}
|
||||
|
||||
this.overruleState = function(newState) {
|
||||
this.stateOverruled = true;
|
||||
console.log(" stateOverruled: ",this.stateOverruled);
|
||||
@ -346,10 +351,11 @@ function Printer() {
|
||||
this.removeLeaveWarning = function() {
|
||||
window.onbeforeunload = null;
|
||||
}
|
||||
|
||||
this.addLeaveWarning = function() {
|
||||
window.onbeforeunload = function() {
|
||||
console.log("WARNING:"+Printer.ON_BEFORE_UNLOAD_MESSAGE);
|
||||
return Printer.ON_BEFORE_UNLOAD_MESSAGE;
|
||||
console.log("WARNING:"+Printer.ON_BEFORE_UNLOAD_MESSAGE);
|
||||
return Printer.ON_BEFORE_UNLOAD_MESSAGE;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
@ -21,122 +21,126 @@ var hasControl;
|
||||
var gcodeGenerateDelayer;
|
||||
var gcodeGenerateDelay = 50;
|
||||
|
||||
|
||||
var preheatDelay;
|
||||
var preheatDelayTime = 15*1000;
|
||||
|
||||
function initButtonBehavior() {
|
||||
console.log("f:initButtonBehavior");
|
||||
var connectingHintDelay = null;
|
||||
var connectingHintDelayTime = 20 * 1000;
|
||||
|
||||
btnOops = new Button("#btnOops");
|
||||
btnInfo = new Button("#btnInfo");
|
||||
btnSettings = new Button("#btnSettings");
|
||||
btnNew = new Button("#btnNew");
|
||||
btnPrint= new Button("#btnPrint");
|
||||
btnStop = new Button("#btnStop");
|
||||
btnPrevious = new Button("#btnPrevious");
|
||||
btnNext = new Button("#btnNext");
|
||||
btnSave = new Button("#btnSave");
|
||||
buttonGroupAdd = $("#buttonGroupAdd");
|
||||
|
||||
function initButtonBehavior() {
|
||||
console.log("f:initButtonBehavior");
|
||||
|
||||
btnOops = new Button("#btnOops");
|
||||
btnInfo = new Button("#btnInfo");
|
||||
btnSettings = new Button("#btnSettings");
|
||||
btnNew = new Button("#btnNew");
|
||||
btnPrint= new Button("#btnPrint");
|
||||
btnStop = new Button("#btnStop");
|
||||
btnPrevious = new Button("#btnPrevious");
|
||||
btnNext = new Button("#btnNext");
|
||||
btnSave = new Button("#btnSave");
|
||||
buttonGroupAdd = $("#buttonGroupAdd");
|
||||
btnShape = new Button("#btnShape");
|
||||
btnWordArt = new Button("#btnWordArt");
|
||||
popupWordArt = $("#popupWordArt");
|
||||
popupShape = $("#popupShape");
|
||||
popupMask = $("#popupMask");
|
||||
logoPanel = $("#logopanel");
|
||||
btnToggleEdit = new Button("#btnToggleEdit");
|
||||
buttonGroupEdit = $("#buttonGroupEdit");
|
||||
btnZoom = new Button("#btnZoom");
|
||||
btnMove = new Button("#btnMove");
|
||||
btnRotate = new Button("#btnRotate");
|
||||
btnToggleVerticalShapes = new Button("#btnToggleVerticalShapes");
|
||||
buttonGroupVerticalShapes = $("#buttonGroupVerticalShapes");
|
||||
btnHeight = new Button("#btnHeight");
|
||||
btnTwist = new Button("#btnTwist");
|
||||
btnStraight = new Button("#btnStraight");
|
||||
btnDiv = new Button("#btnDiv");
|
||||
btnConv = new Button("#btnConv");
|
||||
btnSine = new Button("#btnSine");
|
||||
btnAdd = new Button("#btnAdd");
|
||||
|
||||
$(".btn").Button(); //initalize other buttons
|
||||
|
||||
logoPanel.on("onButtonClick", onLogo);
|
||||
btnNew.on("onButtonClick", onBtnNew);
|
||||
btnAdd.on("onButtonClick", onBtnAdd);
|
||||
btnWordArt.on("onButtonClick", onBtnWordArt);
|
||||
btnShape.on("onButtonClick", onBtnShape);
|
||||
btnPrint.on("onButtonClick", print);
|
||||
btnStop.on("onButtonClick", stopPrint);
|
||||
btnSave.on("onButtonClick", saveSketch);
|
||||
btnPrevious.on("onButtonClick", prevDoodle);
|
||||
btnNext.on("onButtonClick", nextDoodle);
|
||||
btnOops.on("onButtonHold", onBtnOops);
|
||||
// vertical shape buttons
|
||||
btnToggleVerticalShapes.on("onButtonClick", onBtnToggleVerticalShapes);
|
||||
btnHeight.on("onButtonHold", onBtnHeight);
|
||||
btnTwist.on("onButtonHold", onBtnTwist);
|
||||
btnStraight.on("onButtonClick", onBtnStraight);
|
||||
btnToggleEdit = new Button("#btnToggleEdit");
|
||||
buttonGroupEdit = $("#buttonGroupEdit");
|
||||
btnZoom = new Button("#btnZoom");
|
||||
btnMove = new Button("#btnMove");
|
||||
btnRotate = new Button("#btnRotate");
|
||||
btnToggleVerticalShapes = new Button("#btnToggleVerticalShapes");
|
||||
buttonGroupVerticalShapes = $("#buttonGroupVerticalShapes");
|
||||
btnHeight = new Button("#btnHeight");
|
||||
btnTwist = new Button("#btnTwist");
|
||||
btnStraight = new Button("#btnStraight");
|
||||
btnDiv = new Button("#btnDiv");
|
||||
btnConv = new Button("#btnConv");
|
||||
btnSine = new Button("#btnSine");
|
||||
btnAdd = new Button("#btnAdd");
|
||||
|
||||
$(".btn").Button(); //initalize other buttons
|
||||
|
||||
logoPanel.on("onButtonClick", onLogo);
|
||||
btnNew.on("onButtonClick", onBtnNew);
|
||||
btnAdd.on("onButtonClick", onBtnAdd);
|
||||
btnWordArt.on("onButtonClick", onBtnWordArt);
|
||||
btnShape.on("onButtonClick", onBtnShape);
|
||||
btnPrint.on("onButtonClick", print);
|
||||
btnStop.on("onButtonClick", stopPrint);
|
||||
btnSave.on("onButtonClick", saveSketch);
|
||||
btnPrevious.on("onButtonClick", prevDoodle);
|
||||
btnNext.on("onButtonClick", nextDoodle);
|
||||
btnOops.on("onButtonHold", onBtnOops);
|
||||
// vertical shape buttons
|
||||
btnToggleVerticalShapes.on("onButtonClick", onBtnToggleVerticalShapes);
|
||||
btnHeight.on("onButtonHold", onBtnHeight);
|
||||
btnTwist.on("onButtonHold", onBtnTwist);
|
||||
btnStraight.on("onButtonClick", onBtnStraight);
|
||||
btnDiv.on("onButtonClick", onBtnDiv);
|
||||
btnConv.on("onButtonClick", onBtnConv);
|
||||
btnSine.on("onButtonClick", onBtnSine);
|
||||
|
||||
btnToggleEdit.on("onButtonClick", onBtnToggleEdit);
|
||||
btnMove.on("onButtonHold", onBtnMove);
|
||||
btnZoom.on("onButtonHold", onBtnZoom);
|
||||
btnRotate.on("onButtonHold", onBtnRotate);
|
||||
|
||||
getSavedSketchStatus();
|
||||
setSketchModified(false);
|
||||
|
||||
function onBtnToggleVerticalShapes() {
|
||||
var btnImg;
|
||||
if(buttonGroupVerticalShapes.is(":hidden")) {
|
||||
btnImg = "img/buttons/btnArrowClose.png";
|
||||
} else {
|
||||
btnImg = "img/buttons/btnArrowOpen.png";
|
||||
}
|
||||
btnToggleVerticalShapes.attr("src",btnImg);
|
||||
|
||||
buttonGroupVerticalShapes.fadeToggle(BUTTON_GROUP_SHOW_DURATION);
|
||||
}
|
||||
btnToggleEdit.on("onButtonClick", onBtnToggleEdit);
|
||||
btnMove.on("onButtonHold", onBtnMove);
|
||||
btnZoom.on("onButtonHold", onBtnZoom);
|
||||
btnRotate.on("onButtonHold", onBtnRotate);
|
||||
|
||||
function onLogo() {
|
||||
location.reload();
|
||||
getSavedSketchStatus();
|
||||
setSketchModified(false);
|
||||
|
||||
function onBtnToggleVerticalShapes() {
|
||||
var btnImg;
|
||||
if (buttonGroupVerticalShapes.is(":hidden")) {
|
||||
btnImg = "img/buttons/btnArrowClose.png";
|
||||
} else {
|
||||
btnImg = "img/buttons/btnArrowOpen.png";
|
||||
}
|
||||
btnToggleVerticalShapes.attr("src",btnImg);
|
||||
|
||||
buttonGroupVerticalShapes.fadeToggle(BUTTON_GROUP_SHOW_DURATION);
|
||||
}
|
||||
function onBtnAdd() {
|
||||
buttonGroupAdd.fadeToggle(BUTTON_GROUP_SHOW_DURATION);
|
||||
}
|
||||
|
||||
function onBtnStraight() {
|
||||
setVerticalShape(verticalShapes.NONE);
|
||||
}
|
||||
function onBtnDiv() {
|
||||
setVerticalShape(verticalShapes.DIVERGING);
|
||||
}
|
||||
function onBtnConv() {
|
||||
setVerticalShape(verticalShapes.CONVERGING);
|
||||
}
|
||||
function onBtnSine() {
|
||||
setVerticalShape(verticalShapes.SINUS);
|
||||
}
|
||||
function onLogo() {
|
||||
location.reload();
|
||||
}
|
||||
|
||||
function hitTest(cursor,button,radius) {
|
||||
return distance(cursor.x,cursor.y,button.x,button.y)<radius;
|
||||
}
|
||||
|
||||
|
||||
function onBtnToggleEdit() {
|
||||
var btnImg;
|
||||
function onBtnAdd() {
|
||||
buttonGroupAdd.fadeToggle(BUTTON_GROUP_SHOW_DURATION);
|
||||
}
|
||||
|
||||
function onBtnStraight() {
|
||||
setVerticalShape(verticalShapes.NONE);
|
||||
}
|
||||
function onBtnDiv() {
|
||||
setVerticalShape(verticalShapes.DIVERGING);
|
||||
}
|
||||
function onBtnConv() {
|
||||
setVerticalShape(verticalShapes.CONVERGING);
|
||||
}
|
||||
function onBtnSine() {
|
||||
setVerticalShape(verticalShapes.SINUS);
|
||||
}
|
||||
|
||||
function hitTest(cursor,button,radius) {
|
||||
return distance(cursor.x,cursor.y,button.x,button.y)<radius;
|
||||
}
|
||||
|
||||
|
||||
function onBtnToggleEdit() {
|
||||
var btnImg;
|
||||
if(buttonGroupEdit.is(":hidden")) {
|
||||
btnImg = "img/buttons/btnArrowClose.png";
|
||||
} else {
|
||||
btnImg = "img/buttons/btnArrowOpen.png";
|
||||
}
|
||||
btnToggleEdit.attr("src",btnImg);
|
||||
|
||||
|
||||
buttonGroupEdit.fadeToggle(BUTTON_GROUP_SHOW_DURATION);
|
||||
}
|
||||
}
|
||||
function onBtnMove(e,cursor) {
|
||||
var w = btnMove.width();
|
||||
var h = btnMove.height();
|
||||
@ -153,86 +157,85 @@ function initButtonBehavior() {
|
||||
function onBtnRotate(e,cursor) {
|
||||
var h = btnZoom.height();
|
||||
var multiplier = (h/2-cursor.y)*0.003;
|
||||
rotateShape(-multiplier);
|
||||
rotateShape(-multiplier);
|
||||
}
|
||||
|
||||
function onBtnHeight(e,cursor) {
|
||||
var h = btnHeight.height();
|
||||
if(cursor.y < h/2) {
|
||||
previewUp(true);
|
||||
} else {
|
||||
previewDown(true);
|
||||
}
|
||||
}
|
||||
function onBtnTwist(e,cursor) {
|
||||
var h = btnTwist.height();
|
||||
|
||||
function onBtnHeight(e,cursor) {
|
||||
var h = btnHeight.height();
|
||||
if(cursor.y < h/2) {
|
||||
previewUp(true);
|
||||
} else {
|
||||
previewDown(true);
|
||||
}
|
||||
}
|
||||
function onBtnTwist(e,cursor) {
|
||||
var h = btnTwist.height();
|
||||
var multiplier = (cursor.y-h/2)*0.0005;
|
||||
previewTwist(multiplier,true);
|
||||
}
|
||||
}
|
||||
|
||||
function onBtnOops(e) {
|
||||
oopsUndo();
|
||||
}
|
||||
function onBtnOops(e) {
|
||||
oopsUndo();
|
||||
}
|
||||
|
||||
function onBtnNew(e) {
|
||||
clearDoodle();
|
||||
}
|
||||
|
||||
function onBtnWordArt(e) {
|
||||
showWordArtDialog();
|
||||
}
|
||||
function onBtnNew(e) {
|
||||
clearDoodle();
|
||||
}
|
||||
|
||||
function onBtnShape(e) {
|
||||
showShapeDialog();
|
||||
buttonGroupAdd.fadeOut();
|
||||
}
|
||||
function onBtnWordArt(e) {
|
||||
showWordArtDialog();
|
||||
}
|
||||
|
||||
btnSettings.on("onButtonClick", openSettingsWindow);
|
||||
|
||||
// 29-okt-2013 - we're not doing help for smartphones at the moment
|
||||
if (clientInfo.isSmartphone) {
|
||||
btnInfo.disable();
|
||||
} else {
|
||||
btnInfo.on("onButtonClick", function(e) {
|
||||
helpTours.startTour(helpTours.WELCOMETOUR);
|
||||
});
|
||||
}
|
||||
function onBtnShape(e) {
|
||||
showShapeDialog();
|
||||
buttonGroupAdd.fadeOut();
|
||||
}
|
||||
|
||||
btnSettings.on("onButtonClick", openSettingsWindow);
|
||||
|
||||
// 29-okt-2013 - we're not doing help for smartphones at the moment
|
||||
if (clientInfo.isSmartphone) {
|
||||
btnInfo.disable();
|
||||
} else {
|
||||
btnInfo.on("onButtonClick", function(e) {
|
||||
helpTours.startTour(helpTours.WELCOMETOUR);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function stopPrint() {
|
||||
console.log("f:stopPrint() >> sendPrintCommands = " + sendPrintCommands);
|
||||
//if (!confirm("Weet je zeker dat je huidige print wilt stoppen?")) return;
|
||||
if (sendPrintCommands) printer.stop();
|
||||
//setState(Printer.STOPPING_STATE,printer.hasControl);
|
||||
printer.overruleState(Printer.STOPPING_STATE);
|
||||
console.log("f:stopPrint() >> sendPrintCommands = " + sendPrintCommands);
|
||||
if (sendPrintCommands) printer.stop();
|
||||
//setState(Printer.STOPPING_STATE,printer.hasControl);
|
||||
printer.overruleState(Printer.STOPPING_STATE);
|
||||
}
|
||||
|
||||
|
||||
function print(e) {
|
||||
console.log("f:print() >> sendPrintCommands = " + sendPrintCommands);
|
||||
|
||||
//$(".btnPrint").css("display","none");
|
||||
//$(".btnPrint").css("display","none");
|
||||
|
||||
if (_points.length > 2) {
|
||||
if (_points.length > 2) {
|
||||
|
||||
//setState(Printer.BUFFERING_STATE,printer.hasControl);
|
||||
printer.overruleState(Printer.BUFFERING_STATE);
|
||||
//setState(Printer.BUFFERING_STATE,printer.hasControl);
|
||||
printer.overruleState(Printer.BUFFERING_STATE);
|
||||
|
||||
btnStop.css("display","none"); // hack
|
||||
btnStop.css("display","none"); // hack
|
||||
|
||||
// we put the gcode generation in a little delay
|
||||
// so that for example the print button is disabled right away
|
||||
clearTimeout(gcodeGenerateDelayer);
|
||||
gcodeGenerateDelayer = setTimeout(function() {
|
||||
// we put the gcode generation in a little delay
|
||||
// so that for example the print button is disabled right away
|
||||
clearTimeout(gcodeGenerateDelayer);
|
||||
gcodeGenerateDelayer = setTimeout(function() {
|
||||
|
||||
var gcode = generate_gcode();
|
||||
if (sendPrintCommands) {
|
||||
if(gcode.length > 0) {
|
||||
printer.print(gcode);
|
||||
} else {
|
||||
printer.overruleState(Printer.IDLE_STATE);
|
||||
printer.startStatusCheckInterval();
|
||||
}
|
||||
var gcode = generate_gcode();
|
||||
if (sendPrintCommands) {
|
||||
if(gcode.length > 0) {
|
||||
printer.print(gcode);
|
||||
} else {
|
||||
printer.overruleState(Printer.IDLE_STATE);
|
||||
printer.startStatusCheckInterval();
|
||||
}
|
||||
} else {
|
||||
console.log("sendPrintCommands is false: not sending print command to 3dprinter");
|
||||
}
|
||||
@ -242,75 +245,71 @@ function print(e) {
|
||||
// $("#textdump").text(gcode.join("\n"));
|
||||
// }
|
||||
|
||||
}, gcodeGenerateDelay);
|
||||
} else {
|
||||
console.log("f:print >> not enough points!");
|
||||
}
|
||||
}, gcodeGenerateDelay);
|
||||
} else {
|
||||
console.log("f:print >> not enough points!");
|
||||
}
|
||||
|
||||
//alert("Je tekening zal nu geprint worden");
|
||||
//$(".btnPrint").css("display","block");
|
||||
|
||||
|
||||
// $.post("/doodle3d.of", { data:output }, function(data) {
|
||||
// btnPrint.disabled = false;
|
||||
// });
|
||||
// $.post("/doodle3d.of", { data:output }, function(data) {
|
||||
// btnPrint.disabled = false;
|
||||
// });
|
||||
}
|
||||
|
||||
|
||||
function clearMainView() {
|
||||
// console.log("f:clearMainView()");
|
||||
ctx.save();
|
||||
ctx.clearRect(0,0,canvas.width, canvas.height);
|
||||
ctx.restore();
|
||||
// console.log("f:clearMainView()");
|
||||
ctx.save();
|
||||
ctx.clearRect(0,0,canvas.width, canvas.height);
|
||||
ctx.restore();
|
||||
}
|
||||
function resetPreview() {
|
||||
// console.log("f:resetPreview()");
|
||||
// console.log("f:resetPreview()");
|
||||
|
||||
// clear preview canvas
|
||||
previewCtx.save();
|
||||
previewCtx.clearRect(0,0,canvas.width, canvas.height);
|
||||
previewCtx.restore();
|
||||
// clear preview canvas
|
||||
previewCtx.save();
|
||||
previewCtx.clearRect(0,0,canvas.width, canvas.height);
|
||||
previewCtx.restore();
|
||||
|
||||
// also make new Image, otherwise the previously cached preview can be redrawn with move up/down or twist left/right
|
||||
doodleImageCapture = new Image();
|
||||
// also make new Image, otherwise the previously cached preview can be redrawn with move up/down or twist left/right
|
||||
doodleImageCapture = new Image();
|
||||
|
||||
// reset height and rotation to default values
|
||||
numLayers = previewDefaults.numLayers; // current number of preview layers
|
||||
rStep = previewDefaults.rotation; // Math.PI/180; //Math.PI/40; //
|
||||
// reset height and rotation to default values
|
||||
numLayers = previewDefaults.numLayers; // current number of preview layers
|
||||
rStep = previewDefaults.rotation; // Math.PI/180; //Math.PI/40; //
|
||||
}
|
||||
|
||||
function oopsUndo() {
|
||||
// console.log("f:oopsUndo()");
|
||||
_points.pop();
|
||||
// console.log("f:oopsUndo()");
|
||||
_points.pop();
|
||||
|
||||
if (clientInfo.isSmartphone) {
|
||||
// do not recalc the whole preview's bounds during undo if client device is a smartphone
|
||||
redrawDoodle(false);
|
||||
} else {
|
||||
// recalc the whole preview's bounds during if client device is not a smartphone
|
||||
redrawDoodle(true);
|
||||
}
|
||||
redrawPreview();
|
||||
if (clientInfo.isSmartphone) {
|
||||
// do not recalc the whole preview's bounds during undo if client device is a smartphone
|
||||
redrawDoodle(false);
|
||||
} else {
|
||||
// recalc the whole preview's bounds during if client device is not a smartphone
|
||||
redrawDoodle(true);
|
||||
}
|
||||
redrawPreview();
|
||||
}
|
||||
|
||||
function previewUp(redrawLess) {
|
||||
// console.log("f:previewUp()");
|
||||
if (numLayers < maxNumLayers) {
|
||||
numLayers++;
|
||||
}
|
||||
setSketchModified(true);
|
||||
// console.log("f:previewUp()");
|
||||
if (numLayers < maxNumLayers) {
|
||||
numLayers++;
|
||||
}
|
||||
setSketchModified(true);
|
||||
|
||||
// redrawPreview(redrawLess);
|
||||
redrawRenderedPreview(redrawLess);
|
||||
// redrawPreview(redrawLess);
|
||||
redrawRenderedPreview(redrawLess);
|
||||
}
|
||||
function previewDown(redrawLess) {
|
||||
// console.log("f:previewDown()");
|
||||
if (numLayers > minNumLayers) {
|
||||
numLayers--;
|
||||
}
|
||||
setSketchModified(true);
|
||||
// redrawPreview(redrawLess);
|
||||
redrawRenderedPreview(redrawLess);
|
||||
// console.log("f:previewDown()");
|
||||
if (numLayers > minNumLayers) {
|
||||
numLayers--;
|
||||
}
|
||||
setSketchModified(true);
|
||||
// redrawPreview(redrawLess);
|
||||
redrawRenderedPreview(redrawLess);
|
||||
}
|
||||
function previewTwistLeft(redrawLess) {
|
||||
previewTwist(-twistIncrement,true)
|
||||
@ -320,25 +319,23 @@ function previewTwistRight(redrawLess) {
|
||||
}
|
||||
function previewTwist(increment,redrawLess) {
|
||||
console.log("previewTwist: ",increment);
|
||||
if (redrawLess == undefined) redrawLess = false;
|
||||
|
||||
rStep += increment;
|
||||
if(rStep < -previewRotationLimit) rStep = -previewRotationLimit;
|
||||
else if(rStep > previewRotationLimit) rStep = previewRotationLimit;
|
||||
|
||||
redrawRenderedPreview(redrawLess);
|
||||
setSketchModified(true);
|
||||
if (redrawLess == undefined) redrawLess = false;
|
||||
|
||||
rStep += increment;
|
||||
if(rStep < -previewRotationLimit) rStep = -previewRotationLimit;
|
||||
else if(rStep > previewRotationLimit) rStep = previewRotationLimit;
|
||||
|
||||
redrawRenderedPreview(redrawLess);
|
||||
setSketchModified(true);
|
||||
}
|
||||
|
||||
function resetTwist() {
|
||||
rStep = 0;
|
||||
redrawRenderedPreview();
|
||||
setSketchModified(true);
|
||||
rStep = 0;
|
||||
redrawRenderedPreview();
|
||||
setSketchModified(true);
|
||||
}
|
||||
|
||||
function update() {
|
||||
|
||||
|
||||
setState(printer.state,printer.hasControl);
|
||||
|
||||
thermometer.update(printer.temperature, printer.targetTemperature);
|
||||
@ -371,54 +368,60 @@ function setState(newState,newHasControl) {
|
||||
|
||||
// thermometer
|
||||
switch(newState) {
|
||||
case Printer.IDLE_STATE: /* fall-through */
|
||||
case Printer.BUFFERING_STATE: /* fall-through */
|
||||
case Printer.PRINTING_STATE: /* fall-through */
|
||||
case Printer.STOPPING_STATE:
|
||||
thermometer.show();
|
||||
break;
|
||||
default:
|
||||
thermometer.hide();
|
||||
break;
|
||||
case Printer.IDLE_STATE: /* fall-through */
|
||||
case Printer.BUFFERING_STATE: /* fall-through */
|
||||
case Printer.PRINTING_STATE: /* fall-through */
|
||||
case Printer.STOPPING_STATE:
|
||||
thermometer.show();
|
||||
break;
|
||||
default:
|
||||
thermometer.hide();
|
||||
break;
|
||||
}
|
||||
|
||||
// progress indicator
|
||||
switch(newState) {
|
||||
case Printer.PRINTING_STATE:
|
||||
progressbar.show();
|
||||
break;
|
||||
default:
|
||||
progressbar.hide();
|
||||
break;
|
||||
case Printer.PRINTING_STATE:
|
||||
progressbar.show();
|
||||
break;
|
||||
default:
|
||||
progressbar.hide();
|
||||
break;
|
||||
}
|
||||
|
||||
/* settings button */
|
||||
switch(newState) {
|
||||
case Printer.IDLE_STATE:
|
||||
btnSettings.enable();
|
||||
break;
|
||||
case Printer.WIFIBOX_DISCONNECTED_STATE: /* fall-through */
|
||||
case Printer.BUFFERING_STATE: /* fall-through */
|
||||
case Printer.PRINTING_STATE: /* fall-through */
|
||||
case Printer.STOPPING_STATE:
|
||||
btnSettings.disable();
|
||||
break;
|
||||
default:
|
||||
btnSettings.enable();
|
||||
break;
|
||||
}
|
||||
|
||||
case Printer.CONNECTING_STATE: /* fall-through */
|
||||
case Printer.IDLE_STATE:
|
||||
btnSettings.enable();
|
||||
break;
|
||||
case Printer.WIFIBOX_DISCONNECTED_STATE: /* fall-through */
|
||||
case Printer.BUFFERING_STATE: /* fall-through */
|
||||
case Printer.PRINTING_STATE: /* fall-through */
|
||||
case Printer.STOPPING_STATE:
|
||||
btnSettings.disable();
|
||||
break;
|
||||
default:
|
||||
btnSettings.enable();
|
||||
break;
|
||||
}
|
||||
|
||||
/* save, next and prev buttons */
|
||||
switch(newState) {
|
||||
case Printer.WIFIBOX_DISCONNECTED_STATE:
|
||||
btnPrevious.disable();
|
||||
btnNext.disable()
|
||||
btnSave.disable();
|
||||
break;
|
||||
default:
|
||||
updatePrevNextButtonState();
|
||||
if (isModified) btnSave.enable();
|
||||
break;
|
||||
case Printer.WIFIBOX_DISCONNECTED_STATE:
|
||||
btnPrevious.disable();
|
||||
btnNext.disable()
|
||||
btnSave.disable();
|
||||
break;
|
||||
default:
|
||||
updatePrevNextButtonState();
|
||||
if (isModified) btnSave.enable();
|
||||
break;
|
||||
}
|
||||
|
||||
if(connectingHintDelay && newState != Printer.CONNECTING_STATE) {
|
||||
clearTimeout(connectingHintDelay);
|
||||
connectingHintDelay = null;
|
||||
}
|
||||
|
||||
if(newState == Printer.WIFIBOX_DISCONNECTED_STATE) {
|
||||
@ -427,12 +430,22 @@ function setState(newState,newHasControl) {
|
||||
message.set("Connected to WiFi box",Message.INFO,true);
|
||||
} else if(newState == Printer.DISCONNECTED_STATE) {
|
||||
message.set("Printer disconnected",Message.WARNING,true);
|
||||
} else if(newState == Printer.CONNECTING_STATE) {
|
||||
message.set("Printer connecting...",Message.INFO,false);
|
||||
if (prevState != Printer.CONNECTING_STATE) { //enable 'watchdog' if we entered from a different state
|
||||
clearTimeout(connectingHintDelay);
|
||||
connectingHintDelay = setTimeout(function() {
|
||||
message.set("Printer still not connected, did you<br/>select the correct printer type?", Message.WARNING, false);
|
||||
connectingHintDelay = null;
|
||||
}, connectingHintDelayTime);
|
||||
}
|
||||
} else if(prevState == Printer.DISCONNECTED_STATE && newState == Printer.IDLE_STATE ||
|
||||
prevState == Printer.UNKNOWN_STATE && newState == Printer.IDLE_STATE) {
|
||||
prevState == Printer.UNKNOWN_STATE && newState == Printer.IDLE_STATE ||
|
||||
prevState == Printer.CONNECTING_STATE && newState == Printer.IDLE_STATE) {
|
||||
message.set("Printer connected",Message.INFO,true);
|
||||
console.log(" preheat: ",settings["printer.heatup.enabled"]);
|
||||
if(settings["printer.heatup.enabled"]) {
|
||||
// HACK: we delay the preheat because the driver needs time to connect
|
||||
// HACK: we delay the preheat because the makerbot driver needs time to connect
|
||||
clearTimeout(preheatDelay);
|
||||
preheatDelay = setTimeout(printer.preheat,preheatDelayTime); // retry after delay
|
||||
}
|
||||
|
@ -7,61 +7,80 @@
|
||||
*/
|
||||
|
||||
function UpdatePanel() {
|
||||
var _form = new FormPanel();
|
||||
|
||||
this.wifiboxURL;
|
||||
this.element;
|
||||
|
||||
this.statusCheckInterval = 1000;
|
||||
this.statusCheckDelayer; // setTimout instance
|
||||
this.installedDelay = 90*1000; // Since we can't retrieve status during installation we show the installed text after a fixed delay
|
||||
this.installedDelayer; // setTimout instance
|
||||
this.retryDelay = 1000;
|
||||
this.retryDelayer; // setTimout instance
|
||||
//this.timeoutTime = 3000;
|
||||
|
||||
this.canUpdate = false;
|
||||
this.currentVersion = "";
|
||||
this.newestVersion;
|
||||
|
||||
this.statusCheckInterval = 1000;
|
||||
this.statusCheckDelayer; // setTimout instance
|
||||
this.installedDelay = 90*1000; // Since we can't retrieve status during installation we show the installed text after a fixed delay
|
||||
this.installedDelayer; // setTimout instance
|
||||
this.retryDelay = 1000;
|
||||
this.retryDelayer; // setTimout instance
|
||||
//this.timeoutTime = 3000;
|
||||
|
||||
this.canUpdate = false;
|
||||
this.currentVersion = "";
|
||||
this.newestVersion;
|
||||
this.currentReleaseDate;
|
||||
this.newestReleaseDate;
|
||||
this.progress;
|
||||
this.imageSize;
|
||||
var _inAccessPointMode;
|
||||
|
||||
|
||||
// states from api, see Doodle3D firmware src/script/d3d-updater.lua
|
||||
UpdatePanel.NONE = 1; // default state
|
||||
UpdatePanel.DOWNLOADING = 2;
|
||||
UpdatePanel.DOWNLOAD_FAILED = 3;
|
||||
UpdatePanel.IMAGE_READY = 4; // download successfull and checked
|
||||
UpdatePanel.INSTALLING = 5;
|
||||
UpdatePanel.INSTALLED = 6;
|
||||
UpdatePanel.INSTALL_FAILED = 7;
|
||||
|
||||
this.state; // update state from api
|
||||
this.stateText = ""; // update state text from api
|
||||
|
||||
UpdatePanel.NONE = 1; // default state
|
||||
UpdatePanel.DOWNLOADING = 2;
|
||||
UpdatePanel.DOWNLOAD_FAILED = 3;
|
||||
UpdatePanel.IMAGE_READY = 4; // download successful and checked
|
||||
UpdatePanel.INSTALLING = 5;
|
||||
UpdatePanel.INSTALLED = 6;
|
||||
UpdatePanel.INSTALL_FAILED = 7;
|
||||
|
||||
this.state; // update state from api
|
||||
this.stateText = ""; // update state text from api
|
||||
|
||||
var self = this;
|
||||
|
||||
this.init = function(wifiboxURL,updatePanelElement) {
|
||||
|
||||
_form.init(wifiboxURL,wifiboxURL,updatePanelElement);
|
||||
|
||||
this.wifiboxURL = wifiboxURL;
|
||||
|
||||
|
||||
this.element = updatePanelElement;
|
||||
this.retainCheckbox = this.element.find("#retainConfiguration");
|
||||
this.includeBetasCheckbox = this.element.find("#includeBetas");
|
||||
this.btnUpdate = this.element.find("#update");
|
||||
this.statusDisplay = this.element.find("#updateState");
|
||||
this.infoDisplay = this.element.find("#updateInfo");
|
||||
|
||||
|
||||
this.retainCheckbox.change(this.retainChanged);
|
||||
this.includeBetasCheckbox.change(this.includeBetasChanged);
|
||||
this.btnUpdate.click(this.update);
|
||||
|
||||
|
||||
this.checkStatus(false);
|
||||
}
|
||||
|
||||
this.retainChanged = function(e) {
|
||||
//console.log("UpdatePanel:retainChanged");
|
||||
//this call ensures that the update button gets enabled if (!retainChanged && !canUpdate)
|
||||
self.setState(self.state,true);
|
||||
}
|
||||
|
||||
this.includeBetasChanged = function() {
|
||||
//console.log("UpdatePanel:includeBetasChanged");
|
||||
_form.saveSettings(_form.readForm(),function(validated, data) {
|
||||
if(validated) self.checkStatus(false);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
this.update = function() {
|
||||
console.log("UpdatePanel:update");
|
||||
self.downloadUpdate();
|
||||
}
|
||||
|
||||
this.downloadUpdate = function() {
|
||||
console.log("UpdatePanel:downloadUpdate");
|
||||
$.ajax({
|
||||
@ -77,13 +96,14 @@ function UpdatePanel() {
|
||||
self.setState(UpdatePanel.DOWNLOADING);
|
||||
self.startCheckingStatus();
|
||||
}
|
||||
|
||||
this.installUpdate = function() {
|
||||
console.log("UpdatePanel:installUpdate");
|
||||
|
||||
|
||||
// should personal sketches and settings be retained over update?
|
||||
var retain = self.retainCheckbox.prop('checked');
|
||||
console.log(" retain: ",retain);
|
||||
|
||||
|
||||
self.stopCheckingStatus();
|
||||
postData = {no_retain:!retain}
|
||||
$.ajax({
|
||||
@ -98,22 +118,25 @@ function UpdatePanel() {
|
||||
//console.log("UpdatePanel:installUpdate: no respons (there shouldn't be)");
|
||||
});
|
||||
self.setState(UpdatePanel.INSTALLING);
|
||||
|
||||
|
||||
clearTimeout(self.installedDelayer);
|
||||
self.installedDelayer = setTimeout(function() { self.setState(UpdatePanel.INSTALLED) },self.installedDelay);
|
||||
}
|
||||
|
||||
|
||||
|
||||
this.startCheckingStatus = function() {
|
||||
clearTimeout(self.statusCheckDelayer);
|
||||
clearTimeout(self.retryDelayer);
|
||||
self.statusCheckDelayer = setTimeout(function() { self.checkStatus(true) },self.statusCheckInterval);
|
||||
}
|
||||
|
||||
this.stopCheckingStatus = function() {
|
||||
clearTimeout(self.statusCheckDelayer);
|
||||
clearTimeout(self.retryDelayer);
|
||||
}
|
||||
|
||||
this.checkStatus = function(keepChecking) {
|
||||
if (!communicateWithWifibox) return;
|
||||
if (!communicateWithWifibox) return;
|
||||
$.ajax({
|
||||
url: self.wifiboxURL + "/update/status",
|
||||
type: "GET",
|
||||
@ -121,21 +144,23 @@ function UpdatePanel() {
|
||||
//timeout: self.timeoutTime,
|
||||
success: function(response){
|
||||
console.log("UpdatePanel:checkStatus response: ",response);
|
||||
|
||||
|
||||
// Keep checking ?
|
||||
if(keepChecking) {
|
||||
switch(self.state){
|
||||
case UpdatePanel.DOWNLOADING:
|
||||
case UpdatePanel.DOWNLOADING:
|
||||
case UpdatePanel.INSTALLING:
|
||||
clearTimeout(self.statusCheckDelayer);
|
||||
self.statusCheckDelayer = setTimeout(function() { self.checkStatus(keepChecking) },self.statusCheckInterval);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(response.status != "error") {
|
||||
var data = response.data;
|
||||
self.handleStatusData(data);
|
||||
} else {
|
||||
console.log("API update/status call returned an error: '" + response.msg + "'");
|
||||
}
|
||||
}
|
||||
}).fail(function() {
|
||||
@ -146,47 +171,54 @@ function UpdatePanel() {
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
this.handleStatusData = function(data) {
|
||||
//console.log("UpdatePanel:handleStatusData");
|
||||
//status texts and button state might have to be updated if the newest version changes (e.g., after (un)ticking include betas checkbox)
|
||||
var refreshUI = (self.newestVersion != data.newest_version);
|
||||
|
||||
self.canUpdate = data.can_update;
|
||||
|
||||
|
||||
if(self.currentVersion != data.current_version || self.newestVersion != data.newest_version) {
|
||||
self.currentVersion = data.current_version;
|
||||
self.newestVersion = data.newest_version;
|
||||
self.currentReleaseDate = data.current_release_date; // not always available (for older versions)
|
||||
self.newestReleaseDate = data.newest_release_date; // not always available (for older versions)
|
||||
self.updateInfoDisplay();
|
||||
}
|
||||
|
||||
|
||||
self.stateText = data.state_text;
|
||||
self.progress = data.progress; // not always available
|
||||
self.imageSize = data.image_size; // not always available
|
||||
|
||||
self.setState(data.state_code);
|
||||
|
||||
|
||||
self.setState(data.state_code, refreshUI);
|
||||
|
||||
switch(this.state){
|
||||
case UpdatePanel.IMAGE_READY:
|
||||
self.installUpdate();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
this.setState = function(newState,refresh) {
|
||||
//console.log("UpdatePanel:setState");
|
||||
if(!refresh && this.state == newState) return;
|
||||
console.log("UpdatePanel:setState: ",this.state," > ",newState,"(",this.stateText,") (in Access Point Mode: ",_inAccessPointMode,") (newestVersion: ",self.newestVersion,") (refresh: ",refresh,")");
|
||||
this.state = newState;
|
||||
|
||||
|
||||
// should personal sketches and settings be retained over update?
|
||||
var retain = self.retainCheckbox.prop('checked');
|
||||
//console.log(" retain", retain);
|
||||
|
||||
|
||||
// download button
|
||||
// if there isn't newestVersion data something went wrong,
|
||||
// if there isn't newestVersion data something went wrong,
|
||||
// probably accessing the internet
|
||||
//console.log(" self.newestVersion: ",self.newestVersion);
|
||||
if(self.newestVersion != undefined) {
|
||||
//console.log(" this.state: ",this.state);
|
||||
switch(this.state){
|
||||
case UpdatePanel.NONE:
|
||||
case UpdatePanel.NONE:
|
||||
case UpdatePanel.DOWNLOAD_FAILED:
|
||||
case UpdatePanel.INSTALL_FAILED:
|
||||
//console.log(" self.canUpdate: ",self.canUpdate);
|
||||
@ -198,41 +230,53 @@ function UpdatePanel() {
|
||||
break;
|
||||
default:
|
||||
self.btnUpdate.attr("disabled", true);
|
||||
break;
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
self.btnUpdate.attr("disabled", true);
|
||||
}
|
||||
this.updateStatusDisplay();
|
||||
}
|
||||
|
||||
this.updateStatusDisplay = function() {
|
||||
var text = "";
|
||||
if(self.newestVersion != undefined) {
|
||||
switch(this.state){
|
||||
case UpdatePanel.NONE:
|
||||
if(self.canUpdate) {
|
||||
text = "Update(s) available.";
|
||||
var currIsBeta = self.versionIsBeta(self.currentVersion);
|
||||
var newIsBeta = self.versionIsBeta(self.newestVersion);
|
||||
var relIsNewer = (self.newestReleaseDate && self.currentReleaseDate) ? (self.newestReleaseDate - self.currentReleaseDate > 0) : true;
|
||||
|
||||
if (!newIsBeta) {
|
||||
if (relIsNewer) text = "Update available.";
|
||||
else text = "You can switch back to the latest stable release."; //this case is always a beta->stable 'downgrade'
|
||||
} else {
|
||||
//NOTE: actually, an older beta will never be presented as update by the API
|
||||
var prefixText = currIsBeta ? "A" : (relIsNewer ? "A newer" : "An older");
|
||||
text = prefixText + " beta release is available.";
|
||||
}
|
||||
} else {
|
||||
text = "You're up to date.";
|
||||
}
|
||||
break;
|
||||
case UpdatePanel.DOWNLOADING:
|
||||
case UpdatePanel.DOWNLOADING:
|
||||
text = "Downloading update...";
|
||||
break;
|
||||
case UpdatePanel.DOWNLOAD_FAILED:
|
||||
case UpdatePanel.DOWNLOAD_FAILED:
|
||||
text = "Downloading update failed.";
|
||||
break;
|
||||
case UpdatePanel.IMAGE_READY:
|
||||
case UpdatePanel.IMAGE_READY:
|
||||
text = "Update downloaded.";
|
||||
break;
|
||||
case UpdatePanel.INSTALLING:
|
||||
case UpdatePanel.INSTALLING:
|
||||
text = "Installing update... (will take a minute)";
|
||||
break;
|
||||
case UpdatePanel.INSTALLED:
|
||||
text = "Update complete, please reconnect by connecting your device to the access point of your WiFi box and going to <a href='http://draw.doodle3d.com'>draw.doodle3d.com</a>";
|
||||
//text = "Update complete, please <a href='javascript:location.reload(true);'>refresh Page</a>.";
|
||||
case UpdatePanel.INSTALLED:
|
||||
//text = "Update complete, please reconnect by connecting your device to the access point of your WiFi box and going to <a href='http://draw.doodle3d.com'>draw.doodle3d.com</a>";
|
||||
text = "Update complete, please <a href='javascript:location.reload(true);'>refresh Page</a>.";
|
||||
break;
|
||||
case UpdatePanel.INSTALL_FAILED:
|
||||
case UpdatePanel.INSTALL_FAILED:
|
||||
text = "Installing update failed.";
|
||||
break;
|
||||
}
|
||||
@ -245,18 +289,36 @@ function UpdatePanel() {
|
||||
}
|
||||
this.statusDisplay.html(text);
|
||||
}
|
||||
|
||||
this.updateInfoDisplay = function() {
|
||||
var html = 'Current version: ' + self.currentVersion +
|
||||
' (<a target="d3d-curr-relnotes" href="ReleaseNotes.html">release notes</a>). ';
|
||||
var html = 'Current version: ' + self.currentVersion;
|
||||
if (self.currentReleaseDate) html += '; released: ' + self.formatDate(self.currentReleaseDate);
|
||||
html += ' (<a target="d3d-curr-relnotes" href="ReleaseNotes.html">release notes</a>).';
|
||||
|
||||
if(self.canUpdate) {
|
||||
html += 'Latest version: ' + self.newestVersion +
|
||||
' (<a target="d3d-new-relnotes" href="http://doodle3d.com/updates/images/ReleaseNotes.md">release notes</a>).';
|
||||
html += '<br/>Latest version: ' + self.newestVersion;
|
||||
if (self.newestReleaseDate) html += '; released: ' + self.formatDate(self.newestReleaseDate);
|
||||
html += ' (<a target="d3d-new-relnotes" href="http://doodle3d.com/updates/images/ReleaseNotes.md">release notes</a>).';
|
||||
}
|
||||
self.infoDisplay.html(html);
|
||||
}
|
||||
|
||||
|
||||
this.setInAccessPointMode = function(inAccessPointMode) {
|
||||
_inAccessPointMode = inAccessPointMode;
|
||||
self.updateStatusDisplay();
|
||||
}
|
||||
|
||||
this.formatDate = function(ts) {
|
||||
if (!ts || ts.length != 8 || !/^[0-9]+$/.test(ts)) return null;
|
||||
var fields = [ ts.substr(0, 4), ts.substr(4, 2), ts.substr(6, 2) ];
|
||||
if (!fields || fields.length != 3 || fields[1] > 12) return null;
|
||||
|
||||
var abbrMonths = [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Sep', 'Aug', 'Oct', 'Nov', 'Dec' ];
|
||||
return abbrMonths[fields[1] - 1] + " " + fields[2] + ", " + fields[0];
|
||||
}
|
||||
|
||||
this.versionIsBeta = function(version) {
|
||||
return version ? /.*-.*/g.test(version) : null;
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
#message {
|
||||
position: absolute;
|
||||
text-align: right;
|
||||
top: 0;
|
||||
right: 0;
|
||||
|
||||
@ -14,7 +15,7 @@
|
||||
white-space:nowrap;
|
||||
|
||||
//z-index: 5;
|
||||
|
||||
|
||||
display:none;
|
||||
|
||||
&.error {
|
||||
|
@ -1,143 +1,172 @@
|
||||
form {
|
||||
margin: 10px;
|
||||
max-width: 600px;
|
||||
margin: 10px;
|
||||
max-width: 600px;
|
||||
}
|
||||
|
||||
form input {
|
||||
margin: 1px;
|
||||
margin: 1px;
|
||||
}
|
||||
|
||||
body,th,td {
|
||||
font-family: Helvetica, Arial, "Nimbus Sans L", sans-serif;
|
||||
font-size: 13px;
|
||||
font-family: Helvetica, Arial, "Nimbus Sans L", sans-serif;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.settingsContainer {
|
||||
position:relative;
|
||||
/*min-width: 370px;*/
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
position: relative;
|
||||
/*min-width: 370px;*/
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
/*form#settingsForm {*/
|
||||
/*width: 100% auto;*/
|
||||
/*width: 100% auto;*/
|
||||
/*}*/
|
||||
form fieldset {
|
||||
max-width: 600px;
|
||||
border: 1px solid rgb(187, 187, 187);
|
||||
max-width: 600px;
|
||||
border: 1px solid rgb(187, 187, 187);
|
||||
border-radius: 5px;
|
||||
-webkit-border-radius: 5px;
|
||||
-moz-border-radius: 5px;
|
||||
margin-bottom: 20px;
|
||||
padding: 8px;
|
||||
/*padding-right: 8px;*/
|
||||
-webkit-border-radius: 5px;
|
||||
-moz-border-radius: 5px;
|
||||
margin-bottom: 20px;
|
||||
padding: 8px;
|
||||
/*padding-right: 8px;*/
|
||||
}
|
||||
form fieldset fieldset{
|
||||
|
||||
form fieldset fieldset {
|
||||
max-width: 580px;
|
||||
margin: 15px 0 5px 0;
|
||||
clear: left;
|
||||
float: left;
|
||||
}
|
||||
|
||||
form fieldset.collapsed {
|
||||
border-radius: 0;
|
||||
-webkit-border-radius: 0;
|
||||
-moz-border-radius: 0;
|
||||
border-width: 1px 0 0 0;
|
||||
float:none;
|
||||
float: none;
|
||||
}
|
||||
|
||||
form fieldset.collapsible {
|
||||
padding: 0;
|
||||
}
|
||||
form fieldset.collapsible div{
|
||||
|
||||
form fieldset.collapsible div {
|
||||
margin: 8px;
|
||||
}
|
||||
|
||||
form fieldset legend {
|
||||
margin-left: 10px;
|
||||
font-weight: bold;
|
||||
margin-left: 10px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
form fieldset.collapsible legend {
|
||||
padding-left: 10px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
form fieldset.expanded legend {
|
||||
background: transparent url(../img/buttons/expanded.gif) no-repeat center left;
|
||||
background: transparent url(../img/buttons/expanded.gif) no-repeat
|
||||
center left;
|
||||
}
|
||||
|
||||
form fieldset.collapsed legend {
|
||||
background: transparent url(../img/buttons/collapsed.gif) no-repeat center left;
|
||||
background: transparent url(../img/buttons/collapsed.gif) no-repeat
|
||||
center left;
|
||||
}
|
||||
|
||||
form label {
|
||||
min-width: 150px;
|
||||
display: block;
|
||||
float: left;
|
||||
margin: 1px 0 0 0;
|
||||
min-width: 150px;
|
||||
display: block;
|
||||
float: left;
|
||||
margin: 1px 0 0 0;
|
||||
clear: left;
|
||||
}
|
||||
|
||||
form div {
|
||||
float: left;
|
||||
}
|
||||
form input[type="text"], form input[type="number"], form input[type="password"] {
|
||||
border: 1px solid rgb(144, 192, 255);
|
||||
margin-right: 5px;
|
||||
-webkit-border-radius: 4px;
|
||||
|
||||
form input[type="text"],form input[type="number"], form input[type="password"]
|
||||
{
|
||||
border: 1px solid rgb(144, 192, 255);
|
||||
margin-right: 5px;
|
||||
-webkit-border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
form input[type="text"].small, form input[type="number"].small, form input[type="password"].small {
|
||||
width: 50px;
|
||||
|
||||
form input[type="text"].small,form input[type="number"].small, form input[type="password"].small
|
||||
{
|
||||
width: 50px;
|
||||
}
|
||||
form input[type="text"].large, form input[type="number"].large, form input[type="password"].large {
|
||||
width: 250px;
|
||||
|
||||
form input[type="text"].large,form input[type="number"].large, form input[type="password"].large
|
||||
{
|
||||
width: 250px;
|
||||
}
|
||||
|
||||
form input[type="radio"] {
|
||||
margin: 4px 4px 0 0;
|
||||
margin: 4px 4px 0 0;
|
||||
}
|
||||
|
||||
form textarea {
|
||||
border: 1px solid rgb(144, 192, 255);
|
||||
-webkit-border-radius: 5px;
|
||||
border: 1px solid rgb(144, 192, 255);
|
||||
-webkit-border-radius: 5px;
|
||||
-moz-border-radius: 5px;
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
form .startgcode_left {
|
||||
float:left;
|
||||
margin-right: 20px;
|
||||
float: left;
|
||||
margin-right: 20px;
|
||||
}
|
||||
|
||||
form textarea.gcode {
|
||||
width: 252px;
|
||||
/*max-width: 262px;*/
|
||||
/*min-width: 200px;*/
|
||||
height: 150px;
|
||||
width: 252px;
|
||||
/*max-width: 262px;*/
|
||||
/*min-width: 200px;*/
|
||||
height: 150px;
|
||||
}
|
||||
|
||||
form small {
|
||||
margin: 3px 0 0 0;
|
||||
display: block;
|
||||
clear: left;
|
||||
}
|
||||
|
||||
form .button {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
form #passwordLabel, form #password {
|
||||
form #passwordLabel,form #password {
|
||||
display: none;
|
||||
}
|
||||
|
||||
form input.error, form textarea.error, form select.error {
|
||||
border: #f00 solid 2px;
|
||||
}
|
||||
|
||||
form .errorMsg {
|
||||
color: #f00;
|
||||
margin: 0 0 0 1em;
|
||||
}
|
||||
|
||||
form .intro {
|
||||
margin: 0 0 0.5em 0;
|
||||
}
|
||||
form dl {
|
||||
|
||||
form dl {
|
||||
margin: 0.5em 0 0 0;
|
||||
}
|
||||
|
||||
form dl dt {
|
||||
float: left;
|
||||
font-style: italic;
|
||||
width: 10em;
|
||||
}
|
||||
#updatePanel #retainConfigurationLabel {
|
||||
|
||||
#updatePanel #retainConfigurationLabel, #updatePanel #includeBetasLabel {
|
||||
display: inline;
|
||||
float: none;
|
||||
}
|
||||
}
|
||||
|
@ -5,10 +5,13 @@
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<meta name="apple-mobile-web-app-capable" content="yes" />
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="black" />
|
||||
<meta name="mobile-web-app-capable" content="yes" />
|
||||
<meta id="Viewport" name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no,minimal-ui">
|
||||
|
||||
<link rel="icon" type="image/ico" href="./favicon_alt.ico"/>
|
||||
<link rel="apple-touch-icon-precomposed" href="./img/webpage_icons/apple-touch-icon-144x144-precomposed.png"/>
|
||||
<link rel="apple-touch-icon-precomposed" href="./img/webpage_icons/apple-touch-icon-144x144-precomposed.png" sizes="144x144" />
|
||||
<meta id="Viewport" name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no">
|
||||
|
||||
<link href="css/styles.min.css" rel="stylesheet" media="screen">
|
||||
<link href="css/debug.min.css" rel="stylesheet" media="screen">
|
||||
|
||||
@ -36,7 +39,7 @@
|
||||
|
||||
<div id="buttonGroupAdd" class="buttonGroup">
|
||||
<img id="btnWordArt" class="btn" src="img/buttons/btnWordArt.png" />
|
||||
<img id="btnShape" class="btn" src="img/buttons/btnShape.png" />
|
||||
<img id="btnShape" class="btn" src="img/buttons/btnShape.png" />
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@ -63,18 +66,16 @@
|
||||
|
||||
</div>
|
||||
|
||||
<div id="message"></div>
|
||||
|
||||
<!-- center panel -->
|
||||
<div id="centerpanel">
|
||||
|
||||
|
||||
<div id="logopanel" class="btn">
|
||||
<img id="pencil" src="img/logo/pencil.png"/>
|
||||
<img id="logo" src="img/logo/doodle3d.png"/>
|
||||
</div>
|
||||
|
||||
<div id="drawareacontainer">
|
||||
|
||||
|
||||
<div id="canvasContainers">
|
||||
<div id="mycanvasContainer">
|
||||
<canvas id="mycanvas"></canvas>
|
||||
@ -92,20 +93,20 @@
|
||||
<img id="btnStraight" class="btn" src="img/buttons/btnStraight.png" />
|
||||
</div>
|
||||
</div>
|
||||
<img id="btnToggleVerticalShapes" class="btn" src="img/buttons/btnArrowClose.png" />
|
||||
<img id="btnToggleVerticalShapes" class="btn" src="img/buttons/btnArrowClose.png" />
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
<canvas id="preview_tmp"></canvas>
|
||||
|
||||
|
||||
<div id="buttonGroupEdit" class="buttonGroup">
|
||||
<img id="btnMove" class="btn" src="img/buttons/btnMove.png" />
|
||||
<img id="btnZoom" class="btn" src="img/buttons/btnZoom.png" />
|
||||
<img id="btnRotate" class="btn" src="img/buttons/btnRotate.png" />
|
||||
</div>
|
||||
<img id="btnToggleEdit" class="btn" src="img/buttons/btnArrowOpen.png" />
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="debug_textArea">
|
||||
@ -153,6 +154,8 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="message"></div>
|
||||
</div>
|
||||
|
||||
<div id="portrait">
|
||||
|
@ -52,7 +52,7 @@
|
||||
<option value="marlin_generic">Generic Marlin Printer</option>
|
||||
<option value="makerbot_generic">Generic Makerbot Printer</option>
|
||||
</select> --><br/>
|
||||
|
||||
|
||||
<label for="printerDimensionsX">Dimensions:</label>
|
||||
x:<input id="printerDimensionsX" type="number" class="small" name="printer.dimensions.x" placeholder="x">mm<br>
|
||||
<label for="printerDimensionsY"></label>
|
||||
@ -80,7 +80,7 @@
|
||||
<dt>{preheatBedTemp}</dt><dd>Preheat bed temperature</dd>
|
||||
<dt>{printerType}</dt><dd>Printer type</dd>
|
||||
<dt>{if heatedBed}</dt><dd>Enable line if printer has heated bed</dd>
|
||||
|
||||
|
||||
</dl>
|
||||
</small>
|
||||
</div>
|
||||
@ -165,8 +165,9 @@
|
||||
|
||||
<fieldset id="updatePanel">
|
||||
<legend>Update</legend>
|
||||
<input id="retainConfiguration" type="checkbox" name="" value="retainConfiguration" checked="true"> <label for="retainConfiguration" id="retainConfigurationLabel">Preserve personal sketches and settings</label>
|
||||
<br/><br/>
|
||||
<input id="retainConfiguration" type="checkbox" name="" value="retainConfiguration" checked="true"> <label for="retainConfiguration" id="retainConfigurationLabel">Preserve personal sketches and settings</label><br/>
|
||||
<input id="includeBetas" type="checkbox" name="doodle3d.update.includeBetas" value="includeBetas"> <label for="includeBetas" id="includeBetasLabel">Include beta releases (<a target="beta-info" href="http://doodle3d.com/help/beta">read more</a>)</label><br/>
|
||||
<br/>
|
||||
<input type="button" name="update" value="Update" class="button" id="update"/>
|
||||
<span id="updateState"></span><br/>
|
||||
<small id="updateInfo"></small>
|
||||
@ -178,7 +179,7 @@
|
||||
<input type="button" onclick="settingsWindow.downloadGcode()" name="downloadGcode" value="Download GCODE" class="button" id="downloadGcode"/>
|
||||
<input type="button" onclick="settingsWindow.downloadSvg()" name="downloadSvg" value="Download SVG" class="button" id="downloadSvg"/>
|
||||
</fieldset>
|
||||
|
||||
|
||||
<fieldset id="restorePanel">
|
||||
<legend>Restore</legend>
|
||||
<input type="button" name="restoresettings" value="Restore settings to defaults" class="button" id="restoreSettings"/>
|
||||
|
Loading…
Reference in New Issue
Block a user