From 53e8ccc29438fe891ae6650330b8f8c825859dfd Mon Sep 17 00:00:00 2001 From: peteruithoven Date: Thu, 17 Oct 2013 14:09:09 +0200 Subject: [PATCH 1/7] Save settings before connect to network / create access point and display validation errors and only close settings when settings are saved --- css/settings.css | 8 ++ js/SettingsWindow.js | 189 +++++++++++++++++++++++++------------------ 2 files changed, 117 insertions(+), 80 deletions(-) diff --git a/css/settings.css b/css/settings.css index 88a070a..7747b58 100644 --- a/css/settings.css +++ b/css/settings.css @@ -93,4 +93,12 @@ form .button { 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; } \ No newline at end of file diff --git a/js/SettingsWindow.js b/js/SettingsWindow.js index 6be02d2..b2a6ed5 100644 --- a/js/SettingsWindow.js +++ b/js/SettingsWindow.js @@ -113,8 +113,9 @@ function SettingsWindow() { this.submitwindow = function(e) { e.preventDefault(); e.stopPropagation(); - self.saveSettings(); - self.hideSettings(); + self.saveSettings(self.readForm(),function(){ + self.hideSettings(); + }); clearTimeout(self.retryRetrieveNetworkStatusDelay); } @@ -162,45 +163,6 @@ function SettingsWindow() { this.refreshNetworks(); this.retrieveNetworkStatus(false); } - - this.saveSettings = function(callback) { - console.log("Settings:saveSettings"); - - this.readForm(); - - if (communicateWithWifibox) { - $.ajax({ - url: this.wifiboxURL + "/config", - type: "POST", - data: settings, - dataType: 'json', - timeout: this.timeoutTime, - success: function(data){ - console.log("Settings:saveSettings response: ",data); - if(data.status == "error") { - clearTimeout(self.retrySaveSettingsDelay); - self.retrySaveSettingsDelay = setTimeout(function() { self.saveSettings() },self.retryDelay); // retry after delay - } else { - var savedSettings = data.data; - $.each(savedSettings, function(index, val) { - if (val != "ok") { - console.log("ERROR: value '" + index + "' not successfully set. Message: " + val); - } - }); - // TODO something like a callback or feedback that saving went well / or failed - if (callback != undefined) { - callback(); - } - } - } - }).fail(function() { - console.log("Settings:saveSettings: failed"); - clearTimeout(self.retrySaveSettingsDelay); - self.retrySaveSettingsDelay = setTimeout(function() { self.saveSettings() },self.retryDelay); // retry after delay - }); - } - } - this.fillForm = function() { console.log("SettingsWindow:fillForm"); @@ -232,15 +194,72 @@ function SettingsWindow() { }); } + this.saveSettings = function(newSettings,complete) { + if (communicateWithWifibox) { + $.ajax({ + url: this.wifiboxURL + "/config", + type: "POST", + data: newSettings, + dataType: 'json', + timeout: this.timeoutTime, + success: function(data){ + console.log("Settings:saveSettings response: ",data); + if(data.status == "error") { + clearTimeout(self.retrySaveSettingsDelay); + self.retrySaveSettingsDelay = setTimeout(function() { self.saveSettings(settings) },self.retryDelay); // retry after delay + } else { + var savedSettings = data.data; + self.clearValidationErrors(); + var validated = true; + $.each(savedSettings, function(key, val) { + if (val != "ok") { + console.log("ERROR: setting '" + key + "' not successfully set. Message: " + val); + self.displayValidationError(key,val); + validated = false; + } + }); + if(complete && validated) complete(); + } + } + }).fail(function() { + console.log("Settings:saveSettings: failed"); + clearTimeout(self.retrySaveSettingsDelay); + self.retrySaveSettingsDelay = setTimeout(function() { self.saveSettings(settings) },self.retryDelay); // retry after delay + }); + } + } + this.displayValidationError = function(key,msg) { + var formElement = self.form.find("[name|='"+key+"']"); + console.log("formElement: ",formElement); + formElement.addClass("error"); + var errorMsg = "

"+msg+"

" + formElement.after(errorMsg); + } + this.clearValidationErrors = function() { + console.log("clearValidationErrors"); + console.log(" remove: ",self.form.find(".errorMsg").remove()); + var formElements = self.form.find(".error"); + console.log(" formElements: ",formElements); + formElements.each( function(index,element) { + + var element = $(element); + console.log(" element: ",element); + element.removeClass("error"); + }); + } + this.readForm = function() { - console.log("SettingsWindow:readForm"); - var selects = this.form.find("select"); + //console.log("SettingsWindow:readForm"); + var settings = {}; + var selects = self.form.find("select"); selects.each( function(index,element) { var element = $(element); - settings[element.attr('name')] = element.val(); + if(element.attr('name') != "network.client.network") { + settings[element.attr('name')] = element.val(); + } }); - var inputs = this.form.find("input"); + var inputs = self.form.find("input"); inputs.each( function(index,element) { var element = $(element); switch(element.attr("type")) { @@ -254,15 +273,15 @@ function SettingsWindow() { } }); - var textareas = this.form.find("textarea"); + var textareas = self.form.find("textarea"); textareas.each( function(index,element) { var element = $(element); settings[element.attr('name')] = element.val(); }); - console.log(settings); + //console.log(settings); + return settings; } - /* * Networks ui */ @@ -514,26 +533,31 @@ function SettingsWindow() { this.connectToNetwork = function() { console.log("connectToNetwork"); if(self.selectedNetwork == undefined) return; - postData = { + var postData = { ssid:self.selectedNetwork, phrase:self.form.find("#password").val(), recreate:true } console.log(" postData: ",postData); if (communicateWithWifibox) { - $.ajax({ - url: self.wifiboxCGIBinURL + "/network/associate", - type: "POST", - data: postData, - dataType: 'json', - timeout: self.timeoutTime, - success: function(response){ - console.log("Settings:connectToNetwork response: ",response); - } - }).fail(function() { - console.log("Settings:connectToNetwork: timeout (normal behavior)"); - //clearTimeout(self.retrySaveSettingsDelay); - //self.retrySaveSettingsDelay = setTimeout(function() { self.saveSettings() },self.retryDelay); // retry after delay + + // save network related settings and on complete, connect to network + self.saveSettings(self.readForm(),function() { + + $.ajax({ + url: self.wifiboxCGIBinURL + "/network/associate", + type: "POST", + data: postData, + dataType: 'json', + timeout: self.timeoutTime, + success: function(response){ + console.log("Settings:connectToNetwork response: ",response); + } + }).fail(function() { + console.log("Settings:connectToNetwork: timeout (normal behavior)"); + //clearTimeout(self.retrySaveSettingsDelay); + //self.retrySaveSettingsDelay = setTimeout(function() { self.saveSettings() },self.retryDelay); // retry after delay + }); }); } self.setClientModeState(SettingsWindow.CONNECTING,""); @@ -545,28 +569,33 @@ function SettingsWindow() { } this.createAP = function() { + console.log("createAP"); if (communicateWithWifibox) { - $.ajax({ - url: self.wifiboxCGIBinURL + "/network/openap", - type: "POST", - dataType: 'json', - timeout: self.timeoutTime, - success: function(response){ - console.log("Settings:createAP response: ",response); + + // save network related settings and on complete, create access point + self.saveSettings(self.readForm(),function() { + $.ajax({ + url: self.wifiboxCGIBinURL + "/network/openap", + type: "POST", + dataType: 'json', + timeout: self.timeoutTime, + success: function(response){ + console.log("Settings:createAP response: ",response); + } + }).fail(function() { + console.log("Settings:createAP: timeout (normal behavior)"); + //clearTimeout(self.retrySaveSettingsDelay); + //self.retrySaveSettingsDelay = setTimeout(function() { self.saveSettings() },self.retryDelay); // retry after delay + }); + + self.setAPModeState(SettingsWindow.CREATING_AP,""); - } - }).fail(function() { - console.log("Settings:createAP: timeout (normal behavior)"); - //clearTimeout(self.retrySaveSettingsDelay); - //self.retrySaveSettingsDelay = setTimeout(function() { self.saveSettings() },self.retryDelay); // retry after delay + // after switching wifi network or creating a access point we delay the status retrieval + // because the webserver needs time to switch + clearTimeout(self.retrieveNetworkStatusDelay); + self.retrieveNetworkStatusDelay = setTimeout(function() { self.retrieveNetworkStatus(true) },self.retrieveNetworkStatusDelayTime); }); } - self.setAPModeState(SettingsWindow.CREATING_AP,""); - - // after switching wifi network or creating a access point we delay the status retrieval - // because the webserver needs time to switch - clearTimeout(self.retrieveNetworkStatusDelay); - self.retrieveNetworkStatusDelay = setTimeout(function() { self.retrieveNetworkStatus(true) },self.retrieveNetworkStatusDelayTime); } } From b978b5ada57ce1e6dfdb5a78957b557a3eee774f Mon Sep 17 00:00:00 2001 From: peteruithoven Date: Thu, 17 Oct 2013 14:40:33 +0200 Subject: [PATCH 2/7] Integrated progressbar --- js/buttonbehaviors.js | 9 +++------ js/main.js | 8 +++----- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/js/buttonbehaviors.js b/js/buttonbehaviors.js index 1a97e3b..c604b38 100644 --- a/js/buttonbehaviors.js +++ b/js/buttonbehaviors.js @@ -12,7 +12,6 @@ var btnOops, btnStop, btnClear; var btnMoveUp, btnMoveDown, btnTwistLeft, btnTwistRight; var btnInfo, btnSettings; //var btnDebug; // debug -var displayTemp, displayProgress; var state; var prevState; @@ -35,8 +34,6 @@ function initButtonBehavior() { btnNew = $(".btnNew"); btnPrint= $(".btnPrint"); btnStop = $(".btnStop"); - displayTemp = $("#thermometerContainer"); - displayProgress = $("#printProgressContainer"); btnPrevious = $(".btnPrevious"); btnNext = $(".btnNext"); @@ -317,7 +314,7 @@ function update() { setState(printer.state,printer.hasControl); thermometer.update(printer.temperature, printer.targetTemperature); - //TODO: update progress + progressbar.update(printer.currentLine, printer.totalLines); } function setState(newState,newHasControl) { //TODO add hasControl @@ -362,10 +359,10 @@ function setState(newState,newHasControl) { //TODO add hasControl // progress indicator switch(newState) { case Printer.PRINTING_STATE: - displayProgress.show(); // TODO: Show progress + progressbar.show(); break; default: - displayProgress.hide(); // TODO: hide progress + progressbar.hide(); break; } diff --git a/js/main.js b/js/main.js index 2fcf0ff..af4f505 100644 --- a/js/main.js +++ b/js/main.js @@ -53,8 +53,6 @@ $(function() { initVerticalShapes(); thermometer.init($("#thermometerCanvas"), $("#thermometerContainer")); - - progressbar = new Progressbar(); progressbar.init($("#progressbarCanvas"), $("#progressbarCanvasContainer")); @@ -98,10 +96,10 @@ $(function() { }, 1000); //*/ } - showhideInterval = setInterval(showOrHideThermo, 2500); + //showhideInterval = setInterval(showOrHideThermo, 2500); }); -var showhideInterval; +/*var showhideInterval; var showOrHide = false; function showOrHideThermo() { @@ -115,7 +113,7 @@ function showOrHideThermo() { } showOrHide = !showOrHide; -} +}*/ function settingsLoaded() { console.log("settingsLoaded"); From 10ca22d7e9a98a12e90cf3d17e06a8be9ebb3d3c Mon Sep 17 00:00:00 2001 From: peteruithoven Date: Fri, 18 Oct 2013 13:23:50 +0200 Subject: [PATCH 3/7] Added network reconnect hint --- js/SettingsWindow.js | 39 ++++++++++++++++++--------------------- settings.html | 13 +++++++++---- 2 files changed, 27 insertions(+), 25 deletions(-) diff --git a/js/SettingsWindow.js b/js/SettingsWindow.js index b2a6ed5..6dfd53c 100644 --- a/js/SettingsWindow.js +++ b/js/SettingsWindow.js @@ -147,9 +147,9 @@ function SettingsWindow() { url: this.wifiboxURL + "/config/all", dataType: 'json', timeout: this.timeoutTime, - success: function(data){ - console.log("Settings:loadSettings response: ",data); - settings = data.data; + success: function(response){ + console.log("Settings:loadSettings response: ",response); + settings = response.data; console.log(" settings: ",settings); self.fillForm(); $(document).trigger(SettingsWindow.SETTINGS_LOADED); @@ -202,22 +202,24 @@ function SettingsWindow() { data: newSettings, dataType: 'json', timeout: this.timeoutTime, - success: function(data){ - console.log("Settings:saveSettings response: ",data); - if(data.status == "error") { + success: function(response){ + console.log("Settings:saveSettings response: ",response); + if(response.status == "error") { clearTimeout(self.retrySaveSettingsDelay); self.retrySaveSettingsDelay = setTimeout(function() { self.saveSettings(settings) },self.retryDelay); // retry after delay } else { - var savedSettings = data.data; + var data = response.data; + var validation = data.validation; self.clearValidationErrors(); var validated = true; - $.each(savedSettings, function(key, val) { + $.each(validation, function(key, val) { if (val != "ok") { console.log("ERROR: setting '" + key + "' not successfully set. Message: " + val); self.displayValidationError(key,val); validated = false; } }); + settings.substituted_ssid = data.substituted_ssid; if(complete && validated) complete(); } } @@ -236,15 +238,9 @@ function SettingsWindow() { formElement.after(errorMsg); } this.clearValidationErrors = function() { - console.log("clearValidationErrors"); - console.log(" remove: ",self.form.find(".errorMsg").remove()); var formElements = self.form.find(".error"); - console.log(" formElements: ",formElements); formElements.each( function(index,element) { - - var element = $(element); - console.log(" element: ",element); - element.removeClass("error"); + $(element).removeClass("error"); }); } @@ -398,7 +394,7 @@ function SettingsWindow() { var networkSelector = self.form.find("#network"); networkSelector.val(SettingsWindow.NOT_CONNECTED); - if(data.ssid) { + if(data.ssid && data.status == SettingsWindow.API_CREATED) { self.currentAP = data.ssid; } break; @@ -492,16 +488,16 @@ function SettingsWindow() { case SettingsWindow.CONNECTED: btnConnect.removeAttr("disabled"); - var fieldText = "Connected to: "+this.currentNetwork+"."; + var fieldText = "Connected to: "+this.currentNetwork+"."; if(this.currentLocalIP != undefined && this.currentLocalIP != "") { var a = ""+this.currentLocalIP+""; - fieldText += " Local ip: "+a; + fieldText += " (IP: "+a+")"; } field.html(fieldText); break; case SettingsWindow.CONNECTING: btnConnect.attr("disabled", true); - field.html("Connecting..."); + field.html("Connecting... Reconnect by connecting your device to "+this.selectedNetwork+" and going to connect.doodle3d.com"); break; case SettingsWindow.CONNECTING_FAILED: btnConnect.removeAttr("disabled"); @@ -520,11 +516,11 @@ function SettingsWindow() { break; case SettingsWindow.AP: btnCreate.removeAttr("disabled"); - field.html("Is access point: "+this.currentAP); + field.html("Is access point: "+this.currentAP+""); break; case SettingsWindow.CREATING_AP: btnCreate.attr("disabled", true); - field.html("Creating access point..."); + field.html("Creating access point... Reconnect by connecting your device to "+settings.substituted_ssid+" and going to draw.doodle3d.com"); break; } this.apModeState = state; @@ -574,6 +570,7 @@ function SettingsWindow() { // save network related settings and on complete, create access point self.saveSettings(self.readForm(),function() { + self.setAPModeState(SettingsWindow.CREATING_AP); // get latest substituted ssid $.ajax({ url: self.wifiboxCGIBinURL + "/network/openap", type: "POST", diff --git a/settings.html b/settings.html index 84ec703..7f90eb7 100755 --- a/settings.html +++ b/settings.html @@ -97,16 +97,23 @@ Access point settings
* The text %%MAC_ADDR_TAIL%% will be replaced by the last 6 digits of your Doodle3D Wi-Fi box's MAC address. +



- +
+
+ When you can't connect to your device, you can always use an ethernet cable and go to connect.doodle3d.com.
Client mode settings +
+ * Is used on connect.doodle3d.com.
+ The text %%MAC_ADDR_TAIL%% will be replaced by the last 6 digits of your Doodle3D Wi-Fi box's MAC address.
+
@@ -115,9 +122,7 @@

-
- * Is used on connect.doodle3d.com.
- The text %%MAC_ADDR_TAIL%% will be replaced by the last 6 digits of your Doodle3D Wi-Fi box's MAC address.
+ When you can't connect to your device, you can always use an ethernet cable and go to connect.doodle3d.com.
From 5ceabf41bafef6918a2ef30e74dfcb44d2938291 Mon Sep 17 00:00:00 2001 From: peteruithoven Date: Fri, 18 Oct 2013 15:55:11 +0200 Subject: [PATCH 4/7] Added heatup in startgcode and replace {printingTemp} and {preheatTemp} for settings --- js/gcodeGenerating.js | 56 +++++++++++++------------------------------ settings.html | 18 +------------- 2 files changed, 18 insertions(+), 56 deletions(-) diff --git a/js/gcodeGenerating.js b/js/gcodeGenerating.js index 32908fc..6dd50be 100644 --- a/js/gcodeGenerating.js +++ b/js/gcodeGenerating.js @@ -31,39 +31,6 @@ var gcode = []; function generate_gcode() { console.log("f:generategcode()"); - var startGcode = []; - var endGcode = []; - - // get gcode start statements - /*console.log("settings['printer.startgcode']: ",settings["printer.startgcode"]); - console.log("settings['printer.endgcode']: ",settings["printer.endgcode"]); - - if ($("#startgcode").val().trim().length != 0) { - console.log(" found contents for start-gcode in settings.html") - startGcode = $("#startgcode").val().trim().split("\n"); - } else { - console.log(" no start-gcode in settings.html, using defaults") - startGcode = startGcode.concat(gcodeStart); - } - - // get gcode end statements - if ($("#endgcode").val().trim().length != 0) { - console.log(" found contents for end-gcode in settings.html") - endGcode = $("#endgcode").val().trim().split("\n"); - } else { - console.log(" no end-gcode in settings.html, using defaults") - endGcode = endGcode.concat(gcodeEnd); - } - - console.log("f:generate_gcode() >> startGcode:"); - console.log(startGcode); - console.log(""); - console.log("f:generate_gcode() >> endGcode:"); - console.log(endGcode);*/ - - startGcode = settings["printer.startgcode"].split("\n"); - endGcode = settings["printer.endgcode"].split("\n"); - // TODO 2013-09-18 evaluate if this should stay here // this was added when Rick mailed us wrt the Ultimaker delivery of Doodle3D var gCodeOffsetX = 110; // mm @@ -88,7 +55,18 @@ function generate_gcode() { var retractionspeed = settings["printer.retraction.speed"]; var retractionminDistance = settings["printer.retraction.minDistance"]; var retractionamount = settings["printer.retraction.amount"]; - + var preheatTemperature = settings["printer.heatup.temperature"]; + + var startGcode = settings["printer.startgcode"]; + startGcode = startGcode.replace("{printingTemp}",temperature); + startGcode = startGcode.replace("{preheatTemp}",preheatTemperature); + startGcode = startGcode.split("\n"); + + var endGcode = settings["printer.endgcode"]; + endGcode = endGcode.replace("{printingTemp}",temperature); + endGcode = endGcode.replace("{preheatTemp}",preheatTemperature); + endGcode = endGcode.split("\n"); + /* console.log("f:generate_gcode >> EFFE CHECKEN:"); console.log(" speed: " + speed); @@ -130,13 +108,13 @@ function generate_gcode() { // console.log("f:generategcode() >> paths: " + paths.toString()); // console.log("paths.toString(): " + paths.toString()); // return; - - console.log("printer temperature: ",temperature); - //gcode.push("M104 S" + temperature); // set target temperature and do not wait for the extruder to reach it - gcode.push("M109 S" + temperature); // set target temperature and wait for the extruder to reach it + + //gcode.push("M104 S" + temperature); // set target temperature and do not wait for the extruder to reach it + //gcode.push("M109 S" + temperature); // set target temperature and wait for the extruder to reach it + // add gcode begin commands gcode = gcode.concat(startGcode); - + //gcode.push("M109 S" + temperature); // set target temperature and wait for the extruder to reach it var layers = maxObjectHeight / layerHeight; //maxObjectHeight instead of objectHeight diff --git a/settings.html b/settings.html index 7f90eb7..5097302 100755 --- a/settings.html +++ b/settings.html @@ -139,23 +139,7 @@ - + The text {printingTemp} will be replaced by the printing temperature and {preheatTemp} will be replaced by the preaheat temperature.
From 46d2ae4bfc9f40d9e7e0874138c79747f65ac000 Mon Sep 17 00:00:00 2001 From: peteruithoven Date: Fri, 18 Oct 2013 16:38:20 +0200 Subject: [PATCH 5/7] Leave warning while sending --- js/Printer.js | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/js/Printer.js b/js/Printer.js index 5149dd6..22dd89c 100644 --- a/js/Printer.js +++ b/js/Printer.js @@ -19,6 +19,8 @@ function Printer() { Printer.PRINTING_STATE = "printing"; Printer.STOPPING_STATE = "stopping"; // when you stop (abort) a print it prints the endcode + Printer.ON_BEFORE_UNLOAD_MESSAGE = "You're doodle is still being send to the printer, leaving will result in a incomplete 3D print"; + this.temperature = 0; this.targetTemperature = 0; this.currentLine = 0; @@ -95,6 +97,8 @@ function Printer() { console.log("Printer:print"); console.log(" gcode total # of lines: " + gcode.length); + self.addLeaveWarning(); + /*for (i = 0; i < gcode.length; i++) { gcode[i] += " (" + i + ")"; }*/ @@ -151,7 +155,8 @@ function Printer() { if (completed) { console.log("Printer:sendPrintPart:gcode sending completed"); this.gcode = []; - btnStop.css("display","block"); // hack + btnStop.css("display","block"); // hack + self.removeLeaveWarning(); //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 @@ -302,4 +307,13 @@ function Printer() { this.stopStatusCheckInterval(); } + + this.removeLeaveWarning = function() { + window.onbeforeunload = null; + } + this.addLeaveWarning = function() { + window.onbeforeunload = function() { + return Printer.ON_BEFORE_UNLOAD_MESSAGE; + }; + } } \ No newline at end of file From 10724b17469371570f49804a7aed5ee2c0641ce6 Mon Sep 17 00:00:00 2001 From: peteruithoven Date: Fri, 18 Oct 2013 19:11:10 +0200 Subject: [PATCH 6/7] Messages! Showing info about buffering, connection to wifibox and printer --- css/styles.css | 33 +++++++++++++++++++++++++++ css/styles.min.css | 2 +- index.html | 3 +++ js/Printer.js | 28 +++++++++++++---------- js/Progressbar.js | 4 ++-- js/buttonbehaviors.js | 30 ++++++++++++++++++------- js/main.js | 6 +++-- js/message.js | 52 +++++++++++++++++++++++++++++++++++++++++++ less/message.less | 30 +++++++++++++++++++++++++ less/styles.less | 1 + 10 files changed, 164 insertions(+), 25 deletions(-) create mode 100644 js/message.js create mode 100644 less/message.less diff --git a/css/styles.css b/css/styles.css index a41946f..ecc5178 100644 --- a/css/styles.css +++ b/css/styles.css @@ -658,6 +658,39 @@ SETTINGS POPUP cursor: pointer; } +#message { + position: absolute; + top: 0; + right: 0; + padding: 0.4em 0.5em; + border-radius: 0 0 0 10px; + border: 2px solid #333; + font-weight: bold; + + -webkit-box-shadow: 0px 2px 6px 0px rgba(16, 16, 16, 0.65); + box-shadow: 0px 2px 6px 0px rgba(16, 16, 16, 0.65); + color: #333; + white-space: nowrap; + display: none; +} + +#message.error { + background: #EB313C; + color: #fff; +} + +#message.warning { + background: #E9A86E; +} + +#message.notice { + background: #93CAF4; +} + +#message.info { + background: #97DD8A; +} + @media only screen and (max-width: 480px),only screen and (max-width: 720px) and (min-device-pixel-ratio: 1.5),only screen and (max-width: 720px) and (-webkit-min-device-pixel-ratio: 1.5) { /* TOP LOGO diff --git a/css/styles.min.css b/css/styles.min.css index c966d05..bd85134 100644 --- a/css/styles.min.css +++ b/css/styles.min.css @@ -1 +1 @@ -body{background-color:#fcfcfc;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;}img{z-index:5;}.btn{background-repeat:no-repeat;cursor:pointer;}#landscape{position:absolute;background-color:#fff;width:100%;max-width:1024px;max-height:768px;top:0px;bottom:0px;left:0px;right:0px;z-index:5;overflow:hidden;margin:0px auto;outline:2px solid #5e8c71;-webkit-box-shadow:0 0 8px rgba(8, 8, 8, 0.25);box-shadow:0 0 8px rgba(8, 8, 8, 0.25);}#portrait{display:none;}.bgContainer{position:absolute;width:100%;height:100%;overflow:hidden;}.bgTop,.bgMiddle,.bgBottom{-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);opacity:1.0;-webkit-transition:opacity .35s linear;-moz-transition:opacity .35s linear;-o-transition:opacity .35s linear;-ms-transition:opacity .35s linear;transition:opacity .35s linear;position:absolute;left:0px;z-index:-5;}.bgTop{top:0px;}.bgMiddle{top:30%;}.bgBottom{bottom:0px;}.centerpanel{position:absolute;left:50%;margin-left:-33%;width:66%;height:100%;z-index:5;}.logopanel{height:25%;}.d3dlogo{position:relative;top:15%;width:100%;height:100%;margin:0px auto;max-width:399px;height:139px;background:url('../img/logo/logo_full.png') no-repeat center center;cursor:pointer;}#verticalShapes{position:absolute;right:0;bottom:15px;margin-right:-8.5%;width:8%;}#verticalShapes > div{border:2px solid #333;border-radius:0px 5px 5px 0px;margin-top:4px;background-color:#fff;cursor:pointer;}#verticalShapes > div img.verticalshape{width:100%;max-width:50px;height:auto;vertical-align:bottom;}.drawareacontainer{position:relative;width:100%;height:65%;background-color:#fff;border:4px solid #000;border-radius:15px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;z-index:15;}#canvasContainers{position:absolute;top:0;bottom:0;left:0;right:0;width:100%;height:100%;padding:0;margin:0;}#mycanvasContainer{position:absolute;top:0;left:0;width:78%;height:100%;}#mycanvas{width:100%;height:100%;margin:0;padding:0;border-right:2px solid #333;}#previewContainer{position:absolute;top:0;right:0;width:22%;height:100%;}#preview{min-width:50px;width:100%;height:100%;margin:0;padding:0;}#preview_tmp{position:absolute;top:0px;left:0px;z-index:500;border:1px solid #f80;display:none;}.bottompanel{position:relative;bottom:0px;width:100%;height:10%;}.manipulationBtns{margin:2px 5px;position:absolute;right:0;top:0;max-width:340px;max-height:70px;width:45%;}.manipulationBtn{width:45%;height:auto;cursor:pointer;}#btnsUpDown{float:left;width:45%;}#btnsUpDown > div{float:left;padding-right:8px;background-repeat:no-repeat;}#btnsTurnLeftRight{float:right;width:45%;}#btnsTurnLeftRight > div{float:left;padding-right:8px;background-repeat:no-repeat;}#btnMoveUp{max-width:65px;}#btnMoveDown{max-width:64px;}#btnTwistLeft{max-width:59px;}#btnTwistRight{max-width:64px;}@media screen and (max-height: 700px){.logopanel{height:22%;}.doodlecontainer{height:68%;}.d3dlogo{top:25%;max-width:399px;height:74px;background-image:url('../img/logo/logo_small.png');}}@media screen and (max-height: 655px){.bgMiddle{-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);opacity:0;}}@media screen and (max-height: 525px){.d3dlogo{top:20%;height:57px;max-width:307px;background-image:url('../img/logo/logo_smaller.png');}}@media screen and (max-height: 375px){.d3dlogo{height:40px;max-width:216px;background-image:url('../img/logo/logo_smallest.png');}}.leftpanel{position:absolute;width:17%;top:0px;left:0px;bottom:0px;}.btnNew{margin:5% 0% 1% 5%;width:100%;max-width:180px;height:auto;}.btnsPrevNext{margin:1% 7%;max-width:160px;}.btnPrevious{width:40%;max-width:56px;height:auto;}.btnNext{width:40%;max-width:56px;height:auto;float:right;}.btnSave{margin:5% 5% 1% 5%;width:90%;max-width:144px;height:auto;}.btnOops{margin:5% 5% 1% 5%;width:90%;max-width:144px;height:auto;}.rightpanel{position:absolute;width:17%;top:0;right:0;bottom:0;}.btnPrint{margin:1% 5% 5% 0%;width:100%;max-width:163px;height:auto;float:right;}.btnStop{margin:5% 10% 1% 5%;float:right;width:90%;max-width:98px;height:auto;}.btnsSettingsInfo{position:absolute;bottom:25px;right:5px;width:80%;margin:1% 5%;max-width:160px;}.btnInfo{width:40%;max-width:53px;height:auto;}.btnSettings{width:40%;max-width:53px;height:auto;float:right;}.progressbarAppear{right:-0.5% !important;}.thermometerAppear{right:-6.5% !important;}.progressbarCanvasContainerParent{position:relative;width:100%;padding-top:5px;}#progressbarCanvasContainer{position:relative;width:50%;float:right;border:solid #000;border-width:2px 0 2px 2px;border-radius:15px 0 0 15px;padding:5px;background-color:#fff;-webkit-box-shadow:0 2px 5px rgba(37, 37, 37, 0.35);box-shadow:0 2px 5px rgba(37, 37, 37, 0.35);-webkit-transition:right 0.4s cubic-bezier(0.68, -0.55, 0.265, 1.55);-moz-transition:right 0.4s cubic-bezier(0.68, -0.55, 0.265, 1.55);-o-transition:right 0.4s cubic-bezier(0.68, -0.55, 0.265, 1.55);-ms-transition:right 0.4s cubic-bezier(0.68, -0.55, 0.265, 1.55);transition:right 0.4s cubic-bezier(0.68, -0.55, 0.265, 1.55);right:-60%;}#progressbarCanvas{top:0;right:0;bottom:0;left:0;width:100%;height:auto;background-color:#fff;}.thermometerContainerParent{position:relative;width:100%;padding-top:5px;}#thermometerContainer{position:relative;width:45%;float:right;background-color:#fff;border:solid #000;border-width:2px 0 2px 2px;border-radius:15px 0 0 15px;padding:5px;-webkit-box-shadow:0 2px 5px rgba(37, 37, 37, 0.35);box-shadow:0 2px 5px rgba(37, 37, 37, 0.35);-webkit-transition:right 0.5s cubic-bezier(0.68, -0.55, 0.265, 1.55);-moz-transition:right 0.5s cubic-bezier(0.68, -0.55, 0.265, 1.55);-o-transition:right 0.5s cubic-bezier(0.68, -0.55, 0.265, 1.55);-ms-transition:right 0.5s cubic-bezier(0.68, -0.55, 0.265, 1.55);transition:right 0.5s cubic-bezier(0.68, -0.55, 0.265, 1.55);right:-55%;}#thermometerCanvas{top:0;right:0;bottom:0;left:0;width:100%;height:auto;background-color:#fff;}.disabled{-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=30)";filter:alpha(opacity=30);opacity:0.3;cursor:default;}#btnStop.disabled{display:none;}.clearfix:before,.clearfix:after{content:" ";display:table;}.clearfix:after{clear:both;}.clearfix{*zoom:1;}#contentOverlay{background-color:rgba(255, 255, 255, 0.65);z-index:20;position:absolute;top:0;left:0;right:0;bottom:0;width:100%;height:100%;display:none;}#contentOverlay #settings{background-color:#fff;position:absolute;top:0;left:0;right:0;bottom:0;z-index:15;max-width:775px;max-height:540px;width:80%;height:75%;margin:7% 8%;-webkit-box-shadow:0px 2px 6px 0px rgba(16, 16, 16, 0.65);box-shadow:0px 2px 6px 0px rgba(16, 16, 16, 0.65);border:2px solid #222;border-radius:15px;padding:2%;}#contentOverlay #settings .toppanel{height:10%;}#contentOverlay #settings .toppanel .settingsLabelContainer{width:100%;height:auto;margin-bottom:1%;}#contentOverlay #settings .toppanel .settingsLabelContainer .settingsLabelImg{width:45%;max-width:373px;height:auto;}#contentOverlay #settings .bottompanel{width:100%;height:90%;}#contentOverlay #settings .bottompanel > .settingsContainer{float:left;width:83%;height:98%;margin:.5%;-ms-overflow-y:scroll;overflow-y:scroll;border:1px solid #bbbbbb;border-radius:5px;}#contentOverlay #settings .bottompanel > .btnContainer{width:15%;height:100%;float:right;position:relative;right:0;}#contentOverlay #settings .bottompanel > .btnContainer > .btnOK{position:absolute;bottom:3%;right:7%;max-width:85px;min-width:42px;width:88%;height:auto;margin:0 2% 2% 0;cursor:pointer;}@media only screen and (max-width: 480px),only screen and (max-width: 720px) and (min-device-pixel-ratio: 1.5),only screen and (max-width: 720px) and (-webkit-min-device-pixel-ratio: 1.5){.centerpanel{left:0;margin-left:0;width:100%;}.logopanel{height:40px;}.d3dlogo{top:0;height:40px;max-width:216px;background-image:url('../img/logo/logo_smallest.png');}.drawareacontainer{height:70%;}.bottompanel{height:10%;}.bottompanel .manipulationBtns{margin:2px -27;right:22%;width:38%;}.leftpanel{width:100px;background-color:#fff;z-index:50;-webkit-transition:left 0.3s ease-out;-moz-transition:left 0.3s ease-out;-o-transition:left 0.3s ease-out;-ms-transition:left 0.3s ease-out;transition:left 0.3s ease-out;}.hideleft{left:-101px;}.shadowright{-webkit-box-shadow:2px 0 4px rgba(42, 42, 41, 0.6);box-shadow:2px 0 4px rgba(42, 42, 41, 0.6);}.btnNew{margin:5% 5% 1% 5%;width:90%;}.btnSave{margin-left:9%;width:75%;}.btnOops{margin-left:6%;width:71%;}.rightpanel{width:100px;background-color:#fff;z-index:50;-webkit-transition:right 0.3s ease-out;-moz-transition:right 0.3s ease-out;-o-transition:right 0.3s ease-out;-ms-transition:right 0.3s ease-out;transition:right 0.3s ease-out;}.hideright{right:-101px;}.shadowleft{-webkit-box-shadow:-2px 0 4px rgba(42, 42, 41, 0.6);box-shadow:-2px 0 4px rgba(42, 42, 41, 0.6);}.btnPrint{margin:1% 5% 5% 5%;width:90%;}.btnStop{margin:5% 6% 1% 5%;width:70%;}.sidebutton{display:block;position:absolute;top:40px;width:25px;height:38px;border:1px solid #808;background:url('../img/arrows.png') no-repeat;background-color:#eee;cursor:pointer;}.sidebutton:active{background-color:#aaa;}.leftpanel .sidebutton{right:-27px;background-position:0px 0px;}.rightpanel .sidebutton{left:-27px;background-position:-25px 0px;}.sidebuttonin:active{background-color:#888;}.leftpanel .sidebuttonin{background-color:#ccc;background-position:-25px 0px;}.rightpanel .sidebuttonin{background-color:#ccc;background-position:0px 0px;}#contentOverlay{z-index:200;}#contentOverlay #settings{width:87%;height:82%;margin:6% 4%;}#contentOverlay #settings > .right{width:14%;}}@media only screen and (orientation: portrait){#landscape{display:none;}#portrait{display:block;}.vertImage{margin:0px;padding:0px;max-width:100%;height:auto;width:auto;}} \ No newline at end of file +body{background-color:#fcfcfc;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;}img{z-index:5;}.btn{background-repeat:no-repeat;cursor:pointer;}#landscape{position:absolute;background-color:#fff;width:100%;max-width:1024px;max-height:768px;top:0px;bottom:0px;left:0px;right:0px;z-index:5;overflow:hidden;margin:0px auto;outline:2px solid #5e8c71;-webkit-box-shadow:0 0 8px rgba(8, 8, 8, 0.25);box-shadow:0 0 8px rgba(8, 8, 8, 0.25);}#portrait{display:none;}.bgContainer{position:absolute;width:100%;height:100%;overflow:hidden;}.bgTop,.bgMiddle,.bgBottom{-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);opacity:1.0;-webkit-transition:opacity .35s linear;-moz-transition:opacity .35s linear;-o-transition:opacity .35s linear;-ms-transition:opacity .35s linear;transition:opacity .35s linear;position:absolute;left:0px;z-index:-5;}.bgTop{top:0px;}.bgMiddle{top:30%;}.bgBottom{bottom:0px;}.centerpanel{position:absolute;left:50%;margin-left:-33%;width:66%;height:100%;z-index:5;}.logopanel{height:25%;}.d3dlogo{position:relative;top:15%;width:100%;height:100%;margin:0px auto;max-width:399px;height:139px;background:url('../img/logo/logo_full.png') no-repeat center center;cursor:pointer;}#verticalShapes{position:absolute;right:0;bottom:15px;margin-right:-8.5%;width:8%;}#verticalShapes > div{border:2px solid #333;border-radius:0px 5px 5px 0px;margin-top:4px;background-color:#fff;cursor:pointer;}#verticalShapes > div img.verticalshape{width:100%;max-width:50px;height:auto;vertical-align:bottom;}.drawareacontainer{position:relative;width:100%;height:65%;background-color:#fff;border:4px solid #000;border-radius:15px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;z-index:15;}#canvasContainers{position:absolute;top:0;bottom:0;left:0;right:0;width:100%;height:100%;padding:0;margin:0;}#mycanvasContainer{position:absolute;top:0;left:0;width:78%;height:100%;}#mycanvas{width:100%;height:100%;margin:0;padding:0;border-right:2px solid #333;}#previewContainer{position:absolute;top:0;right:0;width:22%;height:100%;}#preview{min-width:50px;width:100%;height:100%;margin:0;padding:0;}#preview_tmp{position:absolute;top:0px;left:0px;z-index:500;border:1px solid #f80;display:none;}.bottompanel{position:relative;bottom:0px;width:100%;height:10%;}.manipulationBtns{margin:2px 5px;position:absolute;right:0;top:0;max-width:340px;max-height:70px;width:45%;}.manipulationBtn{width:45%;height:auto;cursor:pointer;}#btnsUpDown{float:left;width:45%;}#btnsUpDown > div{float:left;padding-right:8px;background-repeat:no-repeat;}#btnsTurnLeftRight{float:right;width:45%;}#btnsTurnLeftRight > div{float:left;padding-right:8px;background-repeat:no-repeat;}#btnMoveUp{max-width:65px;}#btnMoveDown{max-width:64px;}#btnTwistLeft{max-width:59px;}#btnTwistRight{max-width:64px;}@media screen and (max-height: 700px){.logopanel{height:22%;}.doodlecontainer{height:68%;}.d3dlogo{top:25%;max-width:399px;height:74px;background-image:url('../img/logo/logo_small.png');}}@media screen and (max-height: 655px){.bgMiddle{-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);opacity:0;}}@media screen and (max-height: 525px){.d3dlogo{top:20%;height:57px;max-width:307px;background-image:url('../img/logo/logo_smaller.png');}}@media screen and (max-height: 375px){.d3dlogo{height:40px;max-width:216px;background-image:url('../img/logo/logo_smallest.png');}}.leftpanel{position:absolute;width:17%;top:0px;left:0px;bottom:0px;}.btnNew{margin:5% 0% 1% 5%;width:100%;max-width:180px;height:auto;}.btnsPrevNext{margin:1% 7%;max-width:160px;}.btnPrevious{width:40%;max-width:56px;height:auto;}.btnNext{width:40%;max-width:56px;height:auto;float:right;}.btnSave{margin:5% 5% 1% 5%;width:90%;max-width:144px;height:auto;}.btnOops{margin:5% 5% 1% 5%;width:90%;max-width:144px;height:auto;}.rightpanel{position:absolute;width:17%;top:0;right:0;bottom:0;}.btnPrint{margin:1% 5% 5% 0%;width:100%;max-width:163px;height:auto;float:right;}.btnStop{margin:5% 10% 1% 5%;float:right;width:90%;max-width:98px;height:auto;}.btnsSettingsInfo{position:absolute;bottom:25px;right:5px;width:80%;margin:1% 5%;max-width:160px;}.btnInfo{width:40%;max-width:53px;height:auto;}.btnSettings{width:40%;max-width:53px;height:auto;float:right;}.progressbarAppear{right:-0.5% !important;}.thermometerAppear{right:-6.5% !important;}.progressbarCanvasContainerParent{position:relative;width:100%;padding-top:5px;}#progressbarCanvasContainer{position:relative;width:50%;float:right;border:solid #000;border-width:2px 0 2px 2px;border-radius:15px 0 0 15px;padding:5px;background-color:#fff;-webkit-box-shadow:0 2px 5px rgba(37, 37, 37, 0.35);box-shadow:0 2px 5px rgba(37, 37, 37, 0.35);-webkit-transition:right 0.4s cubic-bezier(0.68, -0.55, 0.265, 1.55);-moz-transition:right 0.4s cubic-bezier(0.68, -0.55, 0.265, 1.55);-o-transition:right 0.4s cubic-bezier(0.68, -0.55, 0.265, 1.55);-ms-transition:right 0.4s cubic-bezier(0.68, -0.55, 0.265, 1.55);transition:right 0.4s cubic-bezier(0.68, -0.55, 0.265, 1.55);right:-60%;}#progressbarCanvas{top:0;right:0;bottom:0;left:0;width:100%;height:auto;background-color:#fff;}.thermometerContainerParent{position:relative;width:100%;padding-top:5px;}#thermometerContainer{position:relative;width:45%;float:right;background-color:#fff;border:solid #000;border-width:2px 0 2px 2px;border-radius:15px 0 0 15px;padding:5px;-webkit-box-shadow:0 2px 5px rgba(37, 37, 37, 0.35);box-shadow:0 2px 5px rgba(37, 37, 37, 0.35);-webkit-transition:right 0.5s cubic-bezier(0.68, -0.55, 0.265, 1.55);-moz-transition:right 0.5s cubic-bezier(0.68, -0.55, 0.265, 1.55);-o-transition:right 0.5s cubic-bezier(0.68, -0.55, 0.265, 1.55);-ms-transition:right 0.5s cubic-bezier(0.68, -0.55, 0.265, 1.55);transition:right 0.5s cubic-bezier(0.68, -0.55, 0.265, 1.55);right:-55%;}#thermometerCanvas{top:0;right:0;bottom:0;left:0;width:100%;height:auto;background-color:#fff;}.disabled{-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=30)";filter:alpha(opacity=30);opacity:0.3;cursor:default;}#btnStop.disabled{display:none;}.clearfix:before,.clearfix:after{content:" ";display:table;}.clearfix:after{clear:both;}.clearfix{*zoom:1;}#contentOverlay{background-color:rgba(255, 255, 255, 0.65);z-index:20;position:absolute;top:0;left:0;right:0;bottom:0;width:100%;height:100%;display:none;}#contentOverlay #settings{background-color:#fff;position:absolute;top:0;left:0;right:0;bottom:0;z-index:15;max-width:775px;max-height:540px;width:80%;height:75%;margin:7% 8%;-webkit-box-shadow:0px 2px 6px 0px rgba(16, 16, 16, 0.65);box-shadow:0px 2px 6px 0px rgba(16, 16, 16, 0.65);border:2px solid #222;border-radius:15px;padding:2%;}#contentOverlay #settings .toppanel{height:10%;}#contentOverlay #settings .toppanel .settingsLabelContainer{width:100%;height:auto;margin-bottom:1%;}#contentOverlay #settings .toppanel .settingsLabelContainer .settingsLabelImg{width:45%;max-width:373px;height:auto;}#contentOverlay #settings .bottompanel{width:100%;height:90%;}#contentOverlay #settings .bottompanel > .settingsContainer{float:left;width:83%;height:98%;margin:.5%;-ms-overflow-y:scroll;overflow-y:scroll;border:1px solid #bbbbbb;border-radius:5px;}#contentOverlay #settings .bottompanel > .btnContainer{width:15%;height:100%;float:right;position:relative;right:0;}#contentOverlay #settings .bottompanel > .btnContainer > .btnOK{position:absolute;bottom:3%;right:7%;max-width:85px;min-width:42px;width:88%;height:auto;margin:0 2% 2% 0;cursor:pointer;}#message{position:absolute;top:0;right:0;padding:0.4em 0.5em;border-radius:0 0 0 10px;border:2px solid #333;font-weight:bold;-webkit-box-shadow:0px 2px 6px 0px rgba(16, 16, 16, 0.65);box-shadow:0px 2px 6px 0px rgba(16, 16, 16, 0.65);color:#333;white-space:nowrap;display:none;}#message.error{background:#EB313C;color:#fff;}#message.warning{background:#E9A86E;}#message.notice{background:#93CAF4;}#message.info{background:#97DD8A;}@media only screen and (max-width: 480px),only screen and (max-width: 720px) and (min-device-pixel-ratio: 1.5),only screen and (max-width: 720px) and (-webkit-min-device-pixel-ratio: 1.5){.centerpanel{left:0;margin-left:0;width:100%;}.logopanel{height:40px;}.d3dlogo{top:0;height:40px;max-width:216px;background-image:url('../img/logo/logo_smallest.png');}.drawareacontainer{height:70%;}.bottompanel{height:10%;}.bottompanel .manipulationBtns{margin:2px -27;right:22%;width:38%;}.leftpanel{width:100px;background-color:#fff;z-index:50;-webkit-transition:left 0.3s ease-out;-moz-transition:left 0.3s ease-out;-o-transition:left 0.3s ease-out;-ms-transition:left 0.3s ease-out;transition:left 0.3s ease-out;}.hideleft{left:-101px;}.shadowright{-webkit-box-shadow:2px 0 4px rgba(42, 42, 41, 0.6);box-shadow:2px 0 4px rgba(42, 42, 41, 0.6);}.btnNew{margin:5% 5% 1% 5%;width:90%;}.btnSave{margin-left:9%;width:75%;}.btnOops{margin-left:6%;width:71%;}.rightpanel{width:100px;background-color:#fff;z-index:50;-webkit-transition:right 0.3s ease-out;-moz-transition:right 0.3s ease-out;-o-transition:right 0.3s ease-out;-ms-transition:right 0.3s ease-out;transition:right 0.3s ease-out;}.hideright{right:-101px;}.shadowleft{-webkit-box-shadow:-2px 0 4px rgba(42, 42, 41, 0.6);box-shadow:-2px 0 4px rgba(42, 42, 41, 0.6);}.btnPrint{margin:1% 5% 5% 5%;width:90%;}.btnStop{margin:5% 6% 1% 5%;width:70%;}.sidebutton{display:block;position:absolute;top:40px;width:25px;height:38px;border:1px solid #808;background:url('../img/arrows.png') no-repeat;background-color:#eee;cursor:pointer;}.sidebutton:active{background-color:#aaa;}.leftpanel .sidebutton{right:-27px;background-position:0px 0px;}.rightpanel .sidebutton{left:-27px;background-position:-25px 0px;}.sidebuttonin:active{background-color:#888;}.leftpanel .sidebuttonin{background-color:#ccc;background-position:-25px 0px;}.rightpanel .sidebuttonin{background-color:#ccc;background-position:0px 0px;}#contentOverlay{z-index:200;}#contentOverlay #settings{width:87%;height:82%;margin:6% 4%;}#contentOverlay #settings > .right{width:14%;}}@media only screen and (orientation: portrait){#landscape{display:none;}#portrait{display:block;}.vertImage{margin:0px;padding:0px;max-width:100%;height:auto;width:auto;}} \ No newline at end of file diff --git a/index.html b/index.html index a4cc261..b17cfe4 100755 --- a/index.html +++ b/index.html @@ -79,6 +79,8 @@ + +
@@ -154,6 +156,7 @@ + diff --git a/js/Printer.js b/js/Printer.js index 22dd89c..5cf9e78 100644 --- a/js/Printer.js +++ b/js/Printer.js @@ -12,12 +12,13 @@ function setPrintprogress(val) { function Printer() { - Printer.UNKNOWN_STATE = "unknown"; - Printer.DISCONNECTED_STATE = "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.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.ON_BEFORE_UNLOAD_MESSAGE = "You're doodle is still being send to the printer, leaving will result in a incomplete 3D print"; @@ -97,6 +98,7 @@ function Printer() { console.log("Printer:print"); console.log(" gcode total # of lines: " + gcode.length); + message.set("Sending doodle to printer...",Message.NOTICE); self.addLeaveWarning(); /*for (i = 0; i < gcode.length; i++) { @@ -157,6 +159,7 @@ function Printer() { this.gcode = []; btnStop.css("display","block"); // hack self.removeLeaveWarning(); + message.set("Doodle is send 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 @@ -239,7 +242,7 @@ function Printer() { this.checkStatus = function() { console.log("Printer:checkStatus"); this.stateOverruled = false; - console.log(" stateOverruled: ",this.stateOverruled); + //console.log(" stateOverruled: ",this.stateOverruled); var self = this; if (communicateWithWifibox) { $.ajax({ @@ -247,7 +250,7 @@ function Printer() { dataType: 'json', timeout: this.timeoutTime, success: function(response){ - console.log(" Printer:status: ",response.data.state); //," response: ",response); + //console.log(" Printer:status: ",response.data.state); //," response: ",response); self.handleStatusUpdate(response); @@ -257,26 +260,27 @@ function Printer() { } }).fail(function() { console.log("Printer:checkStatus: failed"); - self.state = Printer.UNKNOWN_STATE; + 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"); + console.log("Printer:handleStatusUpdate response: ",response); var data = response.data; if(response.status != "success") { self.state = Printer.UNKNOWN_STATE; } else { // state - console.log(" stateOverruled: ",this.stateOverruled); + //console.log(" stateOverruled: ",this.stateOverruled); if(!this.stateOverruled) { self.state = data.state; - console.log(" state > ",self.state); + //console.log(" state > ",self.state); } // temperature diff --git a/js/Progressbar.js b/js/Progressbar.js index aaa7dc1..a148ea8 100644 --- a/js/Progressbar.js +++ b/js/Progressbar.js @@ -49,7 +49,7 @@ function Progressbar() { } this.update = function(part, total) { - console.log("Progressbar.update(" + part + "," + total + ")"); + //console.log("Progressbar.update(" + part + "," + total + ")"); var pct = part / total; if (this.isInitted) { @@ -59,7 +59,7 @@ function Progressbar() { var progress = part / total; progress = Math.min(progress, 1.0); progress = Math.max(progress, 0); - console.log("progressbar >> f:update() >> progress: " + progress); + //console.log("progressbar >> f:update() >> progress: " + progress); // clear this.context.clearRect(0, 0, this.canvas.width, this.canvas.height); diff --git a/js/buttonbehaviors.js b/js/buttonbehaviors.js index c604b38..1cb2fdd 100644 --- a/js/buttonbehaviors.js +++ b/js/buttonbehaviors.js @@ -317,10 +317,12 @@ function update() { progressbar.update(printer.currentLine, printer.totalLines); } -function setState(newState,newHasControl) { //TODO add hasControl +function setState(newState,newHasControl) { if(newState == state && newHasControl == hasControl) return; - console.log("setState: ",state," > ",newState," ( ",newHasControl,")"); + prevState = state; + + console.log("setState: ",prevState," > ",newState," ( ",newHasControl,")"); setDebugText("State: "+newState); // print button @@ -347,12 +349,14 @@ function setState(newState,newHasControl) { //TODO add hasControl // thermometer switch(newState) { - case Printer.UNKNOWN_STATE: - case Printer.DISCONNECTED_STATE: - thermometer.hide(); + case Printer.IDLE_STATE: + case Printer.BUFFERING_STATE: + case Printer.PRINTING_STATE: + case Printer.STOPPING_STATE: + thermometer.show(); break; default: - thermometer.show(); + thermometer.hide(); break; } @@ -365,8 +369,18 @@ function setState(newState,newHasControl) { //TODO add hasControl progressbar.hide(); break; } - - prevState = state; + + if(newState == Printer.WIFIBOX_DISCONNECTED_STATE) { + message.set("Lost connection to WiFi box",Message.ERROR); + } else if(prevState == Printer.WIFIBOX_DISCONNECTED_STATE) { + message.set("Connected to WiFi box",Message.INFO,true); + } else if(newState == Printer.DISCONNECTED_STATE) { + message.set("Printer disconnected",Message.WARNING,true); + } else if(prevState == Printer.DISCONNECTED_STATE && newState == Printer.IDLE_STATE || + prevState == Printer.UNKNOWN_STATE && newState == Printer.IDLE_STATE) { + message.set("Printer connected",Message.INFO,true); + } + state = newState; hasControl = newHasControl; } diff --git a/js/main.js b/js/main.js index af4f505..0ff71ff 100644 --- a/js/main.js +++ b/js/main.js @@ -8,6 +8,7 @@ var printer = new Printer(); var progressbar = new Progressbar(); var thermometer = new Thermometer(); var settingsWindow = new SettingsWindow(); +var message = new Message(); var firstTimeSettingsLoaded = true; @@ -55,7 +56,8 @@ $(function() { thermometer.init($("#thermometerCanvas"), $("#thermometerContainer")); progressbar.init($("#progressbarCanvas"), $("#progressbarCanvasContainer")); - + message.init($("#message")); + printer.init(); $(document).on(Printer.UPDATE,update); @@ -128,4 +130,4 @@ function settingsLoaded() { function setDebugText(text) { $("#debug_display").text(text); -} +} \ No newline at end of file diff --git a/js/message.js b/js/message.js new file mode 100644 index 0000000..dc3cab3 --- /dev/null +++ b/js/message.js @@ -0,0 +1,52 @@ +function Message() { + + Message.ERROR = "error"; + Message.WARNING = "warning"; + Message.NOTICE = "notice"; + Message.INFO = "info"; + + this.mode = ""; + + this.$element; + + var self = this; + var autoHideDelay = 2000; + var autohideTimeout; + + this.init = function($element) { + console.log("Message:init"); + + this.$element = $element; + console.log("$element: ",$element); + } + + this.set = function(text,mode,autoHide) { + console.log("Message:set: ",text,mode,autoHide); + self.hide(function() { + self.show(); + self.clear(); + + self.$element.text(text); + self.$element.addClass(mode); + self.show(); + + self.mode = mode; + + clearTimeout(autohideTimeout); + if(autoHide) { + autohideTimeout = setTimeout(function(){ self.hide()},autoHideDelay); + } + }); + } + this.clear = function($element) { + this.$element.text(""); + this.$element.removeClass(this.mode); + } + + this.show = function() { + this.$element.fadeIn(200); + } + this.hide = function(complete) { + this.$element.fadeOut(200,complete); + } +} \ No newline at end of file diff --git a/less/message.less b/less/message.less new file mode 100644 index 0000000..8378d5f --- /dev/null +++ b/less/message.less @@ -0,0 +1,30 @@ +#message { + position: absolute; + top: 0; + right: 0; + + padding: 0.4em 0.5em; + border-radius: 0 0 0 10px; + border: 2px solid #333; + font-weight: bold; + box-shadow: 0px 2px 6px 0px rgba(16, 16, 16, 0.65); + + color: #333; + white-space:nowrap; + + display:none; + + &.error { + background: #EB313C; + color: #fff; + } + &.warning { + background: #E9A86E; + } + &.notice { + background: #93CAF4; + } + &.info { + background: #97DD8A; + } +} \ No newline at end of file diff --git a/less/styles.less b/less/styles.less index ed4d2a5..bfaef91 100644 --- a/less/styles.less +++ b/less/styles.less @@ -2,6 +2,7 @@ //@import "normalize.min.less"; @import "base.less"; @import "settingsPopup.less"; +@import "message.less"; // MOBILE From 29506388736114c8b312b3fe36fd9f969e1321e8 Mon Sep 17 00:00:00 2001 From: peteruithoven Date: Fri, 18 Oct 2013 23:57:06 +0200 Subject: [PATCH 7/7] Small css tweak --- css/styles.css | 1 + css/styles.min.css | 2 +- less/message.less | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/css/styles.css b/css/styles.css index ecc5178..5868970 100644 --- a/css/styles.css +++ b/css/styles.css @@ -665,6 +665,7 @@ SETTINGS POPUP padding: 0.4em 0.5em; border-radius: 0 0 0 10px; border: 2px solid #333; + border-width: 0 0 2px 2px; font-weight: bold; -webkit-box-shadow: 0px 2px 6px 0px rgba(16, 16, 16, 0.65); diff --git a/css/styles.min.css b/css/styles.min.css index bd85134..0d84ed4 100644 --- a/css/styles.min.css +++ b/css/styles.min.css @@ -1 +1 @@ -body{background-color:#fcfcfc;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;}img{z-index:5;}.btn{background-repeat:no-repeat;cursor:pointer;}#landscape{position:absolute;background-color:#fff;width:100%;max-width:1024px;max-height:768px;top:0px;bottom:0px;left:0px;right:0px;z-index:5;overflow:hidden;margin:0px auto;outline:2px solid #5e8c71;-webkit-box-shadow:0 0 8px rgba(8, 8, 8, 0.25);box-shadow:0 0 8px rgba(8, 8, 8, 0.25);}#portrait{display:none;}.bgContainer{position:absolute;width:100%;height:100%;overflow:hidden;}.bgTop,.bgMiddle,.bgBottom{-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);opacity:1.0;-webkit-transition:opacity .35s linear;-moz-transition:opacity .35s linear;-o-transition:opacity .35s linear;-ms-transition:opacity .35s linear;transition:opacity .35s linear;position:absolute;left:0px;z-index:-5;}.bgTop{top:0px;}.bgMiddle{top:30%;}.bgBottom{bottom:0px;}.centerpanel{position:absolute;left:50%;margin-left:-33%;width:66%;height:100%;z-index:5;}.logopanel{height:25%;}.d3dlogo{position:relative;top:15%;width:100%;height:100%;margin:0px auto;max-width:399px;height:139px;background:url('../img/logo/logo_full.png') no-repeat center center;cursor:pointer;}#verticalShapes{position:absolute;right:0;bottom:15px;margin-right:-8.5%;width:8%;}#verticalShapes > div{border:2px solid #333;border-radius:0px 5px 5px 0px;margin-top:4px;background-color:#fff;cursor:pointer;}#verticalShapes > div img.verticalshape{width:100%;max-width:50px;height:auto;vertical-align:bottom;}.drawareacontainer{position:relative;width:100%;height:65%;background-color:#fff;border:4px solid #000;border-radius:15px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;z-index:15;}#canvasContainers{position:absolute;top:0;bottom:0;left:0;right:0;width:100%;height:100%;padding:0;margin:0;}#mycanvasContainer{position:absolute;top:0;left:0;width:78%;height:100%;}#mycanvas{width:100%;height:100%;margin:0;padding:0;border-right:2px solid #333;}#previewContainer{position:absolute;top:0;right:0;width:22%;height:100%;}#preview{min-width:50px;width:100%;height:100%;margin:0;padding:0;}#preview_tmp{position:absolute;top:0px;left:0px;z-index:500;border:1px solid #f80;display:none;}.bottompanel{position:relative;bottom:0px;width:100%;height:10%;}.manipulationBtns{margin:2px 5px;position:absolute;right:0;top:0;max-width:340px;max-height:70px;width:45%;}.manipulationBtn{width:45%;height:auto;cursor:pointer;}#btnsUpDown{float:left;width:45%;}#btnsUpDown > div{float:left;padding-right:8px;background-repeat:no-repeat;}#btnsTurnLeftRight{float:right;width:45%;}#btnsTurnLeftRight > div{float:left;padding-right:8px;background-repeat:no-repeat;}#btnMoveUp{max-width:65px;}#btnMoveDown{max-width:64px;}#btnTwistLeft{max-width:59px;}#btnTwistRight{max-width:64px;}@media screen and (max-height: 700px){.logopanel{height:22%;}.doodlecontainer{height:68%;}.d3dlogo{top:25%;max-width:399px;height:74px;background-image:url('../img/logo/logo_small.png');}}@media screen and (max-height: 655px){.bgMiddle{-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);opacity:0;}}@media screen and (max-height: 525px){.d3dlogo{top:20%;height:57px;max-width:307px;background-image:url('../img/logo/logo_smaller.png');}}@media screen and (max-height: 375px){.d3dlogo{height:40px;max-width:216px;background-image:url('../img/logo/logo_smallest.png');}}.leftpanel{position:absolute;width:17%;top:0px;left:0px;bottom:0px;}.btnNew{margin:5% 0% 1% 5%;width:100%;max-width:180px;height:auto;}.btnsPrevNext{margin:1% 7%;max-width:160px;}.btnPrevious{width:40%;max-width:56px;height:auto;}.btnNext{width:40%;max-width:56px;height:auto;float:right;}.btnSave{margin:5% 5% 1% 5%;width:90%;max-width:144px;height:auto;}.btnOops{margin:5% 5% 1% 5%;width:90%;max-width:144px;height:auto;}.rightpanel{position:absolute;width:17%;top:0;right:0;bottom:0;}.btnPrint{margin:1% 5% 5% 0%;width:100%;max-width:163px;height:auto;float:right;}.btnStop{margin:5% 10% 1% 5%;float:right;width:90%;max-width:98px;height:auto;}.btnsSettingsInfo{position:absolute;bottom:25px;right:5px;width:80%;margin:1% 5%;max-width:160px;}.btnInfo{width:40%;max-width:53px;height:auto;}.btnSettings{width:40%;max-width:53px;height:auto;float:right;}.progressbarAppear{right:-0.5% !important;}.thermometerAppear{right:-6.5% !important;}.progressbarCanvasContainerParent{position:relative;width:100%;padding-top:5px;}#progressbarCanvasContainer{position:relative;width:50%;float:right;border:solid #000;border-width:2px 0 2px 2px;border-radius:15px 0 0 15px;padding:5px;background-color:#fff;-webkit-box-shadow:0 2px 5px rgba(37, 37, 37, 0.35);box-shadow:0 2px 5px rgba(37, 37, 37, 0.35);-webkit-transition:right 0.4s cubic-bezier(0.68, -0.55, 0.265, 1.55);-moz-transition:right 0.4s cubic-bezier(0.68, -0.55, 0.265, 1.55);-o-transition:right 0.4s cubic-bezier(0.68, -0.55, 0.265, 1.55);-ms-transition:right 0.4s cubic-bezier(0.68, -0.55, 0.265, 1.55);transition:right 0.4s cubic-bezier(0.68, -0.55, 0.265, 1.55);right:-60%;}#progressbarCanvas{top:0;right:0;bottom:0;left:0;width:100%;height:auto;background-color:#fff;}.thermometerContainerParent{position:relative;width:100%;padding-top:5px;}#thermometerContainer{position:relative;width:45%;float:right;background-color:#fff;border:solid #000;border-width:2px 0 2px 2px;border-radius:15px 0 0 15px;padding:5px;-webkit-box-shadow:0 2px 5px rgba(37, 37, 37, 0.35);box-shadow:0 2px 5px rgba(37, 37, 37, 0.35);-webkit-transition:right 0.5s cubic-bezier(0.68, -0.55, 0.265, 1.55);-moz-transition:right 0.5s cubic-bezier(0.68, -0.55, 0.265, 1.55);-o-transition:right 0.5s cubic-bezier(0.68, -0.55, 0.265, 1.55);-ms-transition:right 0.5s cubic-bezier(0.68, -0.55, 0.265, 1.55);transition:right 0.5s cubic-bezier(0.68, -0.55, 0.265, 1.55);right:-55%;}#thermometerCanvas{top:0;right:0;bottom:0;left:0;width:100%;height:auto;background-color:#fff;}.disabled{-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=30)";filter:alpha(opacity=30);opacity:0.3;cursor:default;}#btnStop.disabled{display:none;}.clearfix:before,.clearfix:after{content:" ";display:table;}.clearfix:after{clear:both;}.clearfix{*zoom:1;}#contentOverlay{background-color:rgba(255, 255, 255, 0.65);z-index:20;position:absolute;top:0;left:0;right:0;bottom:0;width:100%;height:100%;display:none;}#contentOverlay #settings{background-color:#fff;position:absolute;top:0;left:0;right:0;bottom:0;z-index:15;max-width:775px;max-height:540px;width:80%;height:75%;margin:7% 8%;-webkit-box-shadow:0px 2px 6px 0px rgba(16, 16, 16, 0.65);box-shadow:0px 2px 6px 0px rgba(16, 16, 16, 0.65);border:2px solid #222;border-radius:15px;padding:2%;}#contentOverlay #settings .toppanel{height:10%;}#contentOverlay #settings .toppanel .settingsLabelContainer{width:100%;height:auto;margin-bottom:1%;}#contentOverlay #settings .toppanel .settingsLabelContainer .settingsLabelImg{width:45%;max-width:373px;height:auto;}#contentOverlay #settings .bottompanel{width:100%;height:90%;}#contentOverlay #settings .bottompanel > .settingsContainer{float:left;width:83%;height:98%;margin:.5%;-ms-overflow-y:scroll;overflow-y:scroll;border:1px solid #bbbbbb;border-radius:5px;}#contentOverlay #settings .bottompanel > .btnContainer{width:15%;height:100%;float:right;position:relative;right:0;}#contentOverlay #settings .bottompanel > .btnContainer > .btnOK{position:absolute;bottom:3%;right:7%;max-width:85px;min-width:42px;width:88%;height:auto;margin:0 2% 2% 0;cursor:pointer;}#message{position:absolute;top:0;right:0;padding:0.4em 0.5em;border-radius:0 0 0 10px;border:2px solid #333;font-weight:bold;-webkit-box-shadow:0px 2px 6px 0px rgba(16, 16, 16, 0.65);box-shadow:0px 2px 6px 0px rgba(16, 16, 16, 0.65);color:#333;white-space:nowrap;display:none;}#message.error{background:#EB313C;color:#fff;}#message.warning{background:#E9A86E;}#message.notice{background:#93CAF4;}#message.info{background:#97DD8A;}@media only screen and (max-width: 480px),only screen and (max-width: 720px) and (min-device-pixel-ratio: 1.5),only screen and (max-width: 720px) and (-webkit-min-device-pixel-ratio: 1.5){.centerpanel{left:0;margin-left:0;width:100%;}.logopanel{height:40px;}.d3dlogo{top:0;height:40px;max-width:216px;background-image:url('../img/logo/logo_smallest.png');}.drawareacontainer{height:70%;}.bottompanel{height:10%;}.bottompanel .manipulationBtns{margin:2px -27;right:22%;width:38%;}.leftpanel{width:100px;background-color:#fff;z-index:50;-webkit-transition:left 0.3s ease-out;-moz-transition:left 0.3s ease-out;-o-transition:left 0.3s ease-out;-ms-transition:left 0.3s ease-out;transition:left 0.3s ease-out;}.hideleft{left:-101px;}.shadowright{-webkit-box-shadow:2px 0 4px rgba(42, 42, 41, 0.6);box-shadow:2px 0 4px rgba(42, 42, 41, 0.6);}.btnNew{margin:5% 5% 1% 5%;width:90%;}.btnSave{margin-left:9%;width:75%;}.btnOops{margin-left:6%;width:71%;}.rightpanel{width:100px;background-color:#fff;z-index:50;-webkit-transition:right 0.3s ease-out;-moz-transition:right 0.3s ease-out;-o-transition:right 0.3s ease-out;-ms-transition:right 0.3s ease-out;transition:right 0.3s ease-out;}.hideright{right:-101px;}.shadowleft{-webkit-box-shadow:-2px 0 4px rgba(42, 42, 41, 0.6);box-shadow:-2px 0 4px rgba(42, 42, 41, 0.6);}.btnPrint{margin:1% 5% 5% 5%;width:90%;}.btnStop{margin:5% 6% 1% 5%;width:70%;}.sidebutton{display:block;position:absolute;top:40px;width:25px;height:38px;border:1px solid #808;background:url('../img/arrows.png') no-repeat;background-color:#eee;cursor:pointer;}.sidebutton:active{background-color:#aaa;}.leftpanel .sidebutton{right:-27px;background-position:0px 0px;}.rightpanel .sidebutton{left:-27px;background-position:-25px 0px;}.sidebuttonin:active{background-color:#888;}.leftpanel .sidebuttonin{background-color:#ccc;background-position:-25px 0px;}.rightpanel .sidebuttonin{background-color:#ccc;background-position:0px 0px;}#contentOverlay{z-index:200;}#contentOverlay #settings{width:87%;height:82%;margin:6% 4%;}#contentOverlay #settings > .right{width:14%;}}@media only screen and (orientation: portrait){#landscape{display:none;}#portrait{display:block;}.vertImage{margin:0px;padding:0px;max-width:100%;height:auto;width:auto;}} \ No newline at end of file +body{background-color:#fcfcfc;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;}img{z-index:5;}.btn{background-repeat:no-repeat;cursor:pointer;}#landscape{position:absolute;background-color:#fff;width:100%;max-width:1024px;max-height:768px;top:0px;bottom:0px;left:0px;right:0px;z-index:5;overflow:hidden;margin:0px auto;outline:2px solid #5e8c71;-webkit-box-shadow:0 0 8px rgba(8, 8, 8, 0.25);box-shadow:0 0 8px rgba(8, 8, 8, 0.25);}#portrait{display:none;}.bgContainer{position:absolute;width:100%;height:100%;overflow:hidden;}.bgTop,.bgMiddle,.bgBottom{-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);opacity:1.0;-webkit-transition:opacity .35s linear;-moz-transition:opacity .35s linear;-o-transition:opacity .35s linear;-ms-transition:opacity .35s linear;transition:opacity .35s linear;position:absolute;left:0px;z-index:-5;}.bgTop{top:0px;}.bgMiddle{top:30%;}.bgBottom{bottom:0px;}.centerpanel{position:absolute;left:50%;margin-left:-33%;width:66%;height:100%;z-index:5;}.logopanel{height:25%;}.d3dlogo{position:relative;top:15%;width:100%;height:100%;margin:0px auto;max-width:399px;height:139px;background:url('../img/logo/logo_full.png') no-repeat center center;cursor:pointer;}#verticalShapes{position:absolute;right:0;bottom:15px;margin-right:-8.5%;width:8%;}#verticalShapes > div{border:2px solid #333;border-radius:0px 5px 5px 0px;margin-top:4px;background-color:#fff;cursor:pointer;}#verticalShapes > div img.verticalshape{width:100%;max-width:50px;height:auto;vertical-align:bottom;}.drawareacontainer{position:relative;width:100%;height:65%;background-color:#fff;border:4px solid #000;border-radius:15px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;z-index:15;}#canvasContainers{position:absolute;top:0;bottom:0;left:0;right:0;width:100%;height:100%;padding:0;margin:0;}#mycanvasContainer{position:absolute;top:0;left:0;width:78%;height:100%;}#mycanvas{width:100%;height:100%;margin:0;padding:0;border-right:2px solid #333;}#previewContainer{position:absolute;top:0;right:0;width:22%;height:100%;}#preview{min-width:50px;width:100%;height:100%;margin:0;padding:0;}#preview_tmp{position:absolute;top:0px;left:0px;z-index:500;border:1px solid #f80;display:none;}.bottompanel{position:relative;bottom:0px;width:100%;height:10%;}.manipulationBtns{margin:2px 5px;position:absolute;right:0;top:0;max-width:340px;max-height:70px;width:45%;}.manipulationBtn{width:45%;height:auto;cursor:pointer;}#btnsUpDown{float:left;width:45%;}#btnsUpDown > div{float:left;padding-right:8px;background-repeat:no-repeat;}#btnsTurnLeftRight{float:right;width:45%;}#btnsTurnLeftRight > div{float:left;padding-right:8px;background-repeat:no-repeat;}#btnMoveUp{max-width:65px;}#btnMoveDown{max-width:64px;}#btnTwistLeft{max-width:59px;}#btnTwistRight{max-width:64px;}@media screen and (max-height: 700px){.logopanel{height:22%;}.doodlecontainer{height:68%;}.d3dlogo{top:25%;max-width:399px;height:74px;background-image:url('../img/logo/logo_small.png');}}@media screen and (max-height: 655px){.bgMiddle{-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);opacity:0;}}@media screen and (max-height: 525px){.d3dlogo{top:20%;height:57px;max-width:307px;background-image:url('../img/logo/logo_smaller.png');}}@media screen and (max-height: 375px){.d3dlogo{height:40px;max-width:216px;background-image:url('../img/logo/logo_smallest.png');}}.leftpanel{position:absolute;width:17%;top:0px;left:0px;bottom:0px;}.btnNew{margin:5% 0% 1% 5%;width:100%;max-width:180px;height:auto;}.btnsPrevNext{margin:1% 7%;max-width:160px;}.btnPrevious{width:40%;max-width:56px;height:auto;}.btnNext{width:40%;max-width:56px;height:auto;float:right;}.btnSave{margin:5% 5% 1% 5%;width:90%;max-width:144px;height:auto;}.btnOops{margin:5% 5% 1% 5%;width:90%;max-width:144px;height:auto;}.rightpanel{position:absolute;width:17%;top:0;right:0;bottom:0;}.btnPrint{margin:1% 5% 5% 0%;width:100%;max-width:163px;height:auto;float:right;}.btnStop{margin:5% 10% 1% 5%;float:right;width:90%;max-width:98px;height:auto;}.btnsSettingsInfo{position:absolute;bottom:25px;right:5px;width:80%;margin:1% 5%;max-width:160px;}.btnInfo{width:40%;max-width:53px;height:auto;}.btnSettings{width:40%;max-width:53px;height:auto;float:right;}.progressbarAppear{right:-0.5% !important;}.thermometerAppear{right:-6.5% !important;}.progressbarCanvasContainerParent{position:relative;width:100%;padding-top:5px;}#progressbarCanvasContainer{position:relative;width:50%;float:right;border:solid #000;border-width:2px 0 2px 2px;border-radius:15px 0 0 15px;padding:5px;background-color:#fff;-webkit-box-shadow:0 2px 5px rgba(37, 37, 37, 0.35);box-shadow:0 2px 5px rgba(37, 37, 37, 0.35);-webkit-transition:right 0.4s cubic-bezier(0.68, -0.55, 0.265, 1.55);-moz-transition:right 0.4s cubic-bezier(0.68, -0.55, 0.265, 1.55);-o-transition:right 0.4s cubic-bezier(0.68, -0.55, 0.265, 1.55);-ms-transition:right 0.4s cubic-bezier(0.68, -0.55, 0.265, 1.55);transition:right 0.4s cubic-bezier(0.68, -0.55, 0.265, 1.55);right:-60%;}#progressbarCanvas{top:0;right:0;bottom:0;left:0;width:100%;height:auto;background-color:#fff;}.thermometerContainerParent{position:relative;width:100%;padding-top:5px;}#thermometerContainer{position:relative;width:45%;float:right;background-color:#fff;border:solid #000;border-width:2px 0 2px 2px;border-radius:15px 0 0 15px;padding:5px;-webkit-box-shadow:0 2px 5px rgba(37, 37, 37, 0.35);box-shadow:0 2px 5px rgba(37, 37, 37, 0.35);-webkit-transition:right 0.5s cubic-bezier(0.68, -0.55, 0.265, 1.55);-moz-transition:right 0.5s cubic-bezier(0.68, -0.55, 0.265, 1.55);-o-transition:right 0.5s cubic-bezier(0.68, -0.55, 0.265, 1.55);-ms-transition:right 0.5s cubic-bezier(0.68, -0.55, 0.265, 1.55);transition:right 0.5s cubic-bezier(0.68, -0.55, 0.265, 1.55);right:-55%;}#thermometerCanvas{top:0;right:0;bottom:0;left:0;width:100%;height:auto;background-color:#fff;}.disabled{-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=30)";filter:alpha(opacity=30);opacity:0.3;cursor:default;}#btnStop.disabled{display:none;}.clearfix:before,.clearfix:after{content:" ";display:table;}.clearfix:after{clear:both;}.clearfix{*zoom:1;}#contentOverlay{background-color:rgba(255, 255, 255, 0.65);z-index:20;position:absolute;top:0;left:0;right:0;bottom:0;width:100%;height:100%;display:none;}#contentOverlay #settings{background-color:#fff;position:absolute;top:0;left:0;right:0;bottom:0;z-index:15;max-width:775px;max-height:540px;width:80%;height:75%;margin:7% 8%;-webkit-box-shadow:0px 2px 6px 0px rgba(16, 16, 16, 0.65);box-shadow:0px 2px 6px 0px rgba(16, 16, 16, 0.65);border:2px solid #222;border-radius:15px;padding:2%;}#contentOverlay #settings .toppanel{height:10%;}#contentOverlay #settings .toppanel .settingsLabelContainer{width:100%;height:auto;margin-bottom:1%;}#contentOverlay #settings .toppanel .settingsLabelContainer .settingsLabelImg{width:45%;max-width:373px;height:auto;}#contentOverlay #settings .bottompanel{width:100%;height:90%;}#contentOverlay #settings .bottompanel > .settingsContainer{float:left;width:83%;height:98%;margin:.5%;-ms-overflow-y:scroll;overflow-y:scroll;border:1px solid #bbbbbb;border-radius:5px;}#contentOverlay #settings .bottompanel > .btnContainer{width:15%;height:100%;float:right;position:relative;right:0;}#contentOverlay #settings .bottompanel > .btnContainer > .btnOK{position:absolute;bottom:3%;right:7%;max-width:85px;min-width:42px;width:88%;height:auto;margin:0 2% 2% 0;cursor:pointer;}#message{position:absolute;top:0;right:0;padding:0.4em 0.5em;border-radius:0 0 0 10px;border:2px solid #333;border-width:0 0 2px 2px;font-weight:bold;-webkit-box-shadow:0px 2px 6px 0px rgba(16, 16, 16, 0.65);box-shadow:0px 2px 6px 0px rgba(16, 16, 16, 0.65);color:#333;white-space:nowrap;display:none;}#message.error{background:#EB313C;color:#fff;}#message.warning{background:#E9A86E;}#message.notice{background:#93CAF4;}#message.info{background:#97DD8A;}@media only screen and (max-width: 480px),only screen and (max-width: 720px) and (min-device-pixel-ratio: 1.5),only screen and (max-width: 720px) and (-webkit-min-device-pixel-ratio: 1.5){.centerpanel{left:0;margin-left:0;width:100%;}.logopanel{height:40px;}.d3dlogo{top:0;height:40px;max-width:216px;background-image:url('../img/logo/logo_smallest.png');}.drawareacontainer{height:70%;}.bottompanel{height:10%;}.bottompanel .manipulationBtns{margin:2px -27;right:22%;width:38%;}.leftpanel{width:100px;background-color:#fff;z-index:50;-webkit-transition:left 0.3s ease-out;-moz-transition:left 0.3s ease-out;-o-transition:left 0.3s ease-out;-ms-transition:left 0.3s ease-out;transition:left 0.3s ease-out;}.hideleft{left:-101px;}.shadowright{-webkit-box-shadow:2px 0 4px rgba(42, 42, 41, 0.6);box-shadow:2px 0 4px rgba(42, 42, 41, 0.6);}.btnNew{margin:5% 5% 1% 5%;width:90%;}.btnSave{margin-left:9%;width:75%;}.btnOops{margin-left:6%;width:71%;}.rightpanel{width:100px;background-color:#fff;z-index:50;-webkit-transition:right 0.3s ease-out;-moz-transition:right 0.3s ease-out;-o-transition:right 0.3s ease-out;-ms-transition:right 0.3s ease-out;transition:right 0.3s ease-out;}.hideright{right:-101px;}.shadowleft{-webkit-box-shadow:-2px 0 4px rgba(42, 42, 41, 0.6);box-shadow:-2px 0 4px rgba(42, 42, 41, 0.6);}.btnPrint{margin:1% 5% 5% 5%;width:90%;}.btnStop{margin:5% 6% 1% 5%;width:70%;}.sidebutton{display:block;position:absolute;top:40px;width:25px;height:38px;border:1px solid #808;background:url('../img/arrows.png') no-repeat;background-color:#eee;cursor:pointer;}.sidebutton:active{background-color:#aaa;}.leftpanel .sidebutton{right:-27px;background-position:0px 0px;}.rightpanel .sidebutton{left:-27px;background-position:-25px 0px;}.sidebuttonin:active{background-color:#888;}.leftpanel .sidebuttonin{background-color:#ccc;background-position:-25px 0px;}.rightpanel .sidebuttonin{background-color:#ccc;background-position:0px 0px;}#contentOverlay{z-index:200;}#contentOverlay #settings{width:87%;height:82%;margin:6% 4%;}#contentOverlay #settings > .right{width:14%;}}@media only screen and (orientation: portrait){#landscape{display:none;}#portrait{display:block;}.vertImage{margin:0px;padding:0px;max-width:100%;height:auto;width:auto;}} \ No newline at end of file diff --git a/less/message.less b/less/message.less index 8378d5f..0cccc60 100644 --- a/less/message.less +++ b/less/message.less @@ -6,6 +6,7 @@ padding: 0.4em 0.5em; border-radius: 0 0 0 10px; border: 2px solid #333; + border-width: 0 0 2px 2px; font-weight: bold; box-shadow: 0px 2px 6px 0px rgba(16, 16, 16, 0.65);