var wmLogBuffer = new Array(); var wmSdListCounter = { FILES:0, FOLDERS:0, Reset: function() { wmSdListCounter.FILES = 0; wmSdListCounter.FOLDERS = 0; $('#list-sd-content').empty(); $('#div-sdlist-file-count').text(wmSdListCounter.FILES); $('#div-sdlist-folder-count').text(wmSdListCounter.FOLDERS); } }; var WmButtonGroups = { FileManagement: ["#btn-get-sdcontent","#btn-set-sdinit","#btn-set-sdrelease","#file-upload","#btn-file-upload"], FileActions: ["#btn-set-sdprint","#btn-set-sddelete"], FileProcess: ["#btn-file-proc","#btn-file-proc-cancel"], TempStatus: ["#set-auto-temp","#auto-temp-interval","#chart-show-extruder","#chart-show-bed"], FanSpeed: ["#fan-speed-range"], MoveHome: ["#btn-move-home-all","#btn-move-home-x","#btn-move-home-y","#btn-move-home-z"], Move: ["#btn-move-xl","#btn-move-xr","#btn-move-yf","#btn-move-yb","#btn-move-zu","#btn-move-zd"], StepperAll: ["#set-stepper-all","#set-stepper-x","#set-stepper-y","#set-stepper-z","#set-stepper-e"], Stepper: ["#set-stepper-x","#set-stepper-y","#set-stepper-z","#set-stepper-e"], All: function() { let all = []; all = all.concat( WmButtonGroups.FileManagement, WmButtonGroups.FileActions, WmButtonGroups.FileProcess, WmButtonGroups.TempStatus, WmButtonGroups.FanSpeed, WmButtonGroups.MoveHome, WmButtonGroups.Move, WmButtonGroups.StepperAll ); return all; } }; var wmWebSoket = { WSObject: null, Connect: function() { WsUrl=`ws://${location.host}/ws`; try { if(wmWebSoket.WSObject === null) { jsLog.Debug("WebSocket: Trying connecting to " + WsUrl); wmWebSoket.WSObject = new WebSocket(WsUrl); wmWebSoket.SetWsStatusBar(wmWebSoket.WSObject.readyState); wmWebSoket.WSObject.onopen = function () { jsLog.Info("WebSocket: Successfully connected to " + WsUrl); wmWebSoket.SetWsStatusBar(wmWebSoket.WSObject.readyState); WmControls.Enable(WmButtonGroups.All()); wmWebSoket.Send(wmGCommands.SdPrintStatus); }; wmWebSoket.WSObject.onclose = function () { jsLog.Info("WebSocket: Disconnected from "+WsUrl); wmWebSoket.SetWsStatusBar(null); wmWebSoket.WSObject = null; WmControls.Disable(WmButtonGroups.All()); }; wmWebSoket.WSObject.onerror = function () { jsLog.Error("WebSocket: Connection error"); WmConsole.Trace(new wmLogItem("WebSoket connection error", wmEnums.WSMsgDirection.RECEIVED, wmEnums.ConsoleLevels.ERROR)); }; wmWebSoket.WSObject.onmessage = function (event) { jsLog.Info("WebSocket: Message received: "+event.data); wmWebSoket.OnMessage(event.data.trim()); }; } } catch (exception) { jsLog.Error("WebSocket: Exception: "+exception); wmWebSoket.SetWsStatusBar(wmWebSoket.WSObject.readyState); WmConsole.Trace(new wmLogItem("WebSocket: Connection exception", wmEnums.WSMsgDirection.RECEIVED, wmEnums.ConsoleLevels.ERROR)); } }, Disconnect: function() { try { if(wmWebSoket.WSObject !== null && wmWebSoket.WSObject.readyState === wmEnums.WSSatuses.OPEN) { jsLog.Debug("WebSocket: Disconnecting from "+WsUrl); WmConsole.Trace(new wmLogItem("WebSoket disconnecting...", wmEnums.WSMsgDirection.SENT, wmEnums.ConsoleLevels.INFO)); wmWebSoket.WSObject.close(); wmWebSoket.WSObject = null; } } catch (exception) { jsLog.Error("WebSocket: Exception: "+exception); wmWebSoket.SetWsStatusBar(wmWebSoket.WSObject.readyState); WmConsole.Trace(new wmLogItem("WebSoket connection exception", wmEnums.WSMsgDirection.RECEIVED, wmEnums.ConsoleLevels.ERROR)); } }, Send: function(gCmd) { if(wmWebSoket.WSObject !== null && wmWebSoket.WSObject.readyState === wmEnums.WSSatuses.OPEN) { let strcmd = gCmd.GCode; if (gCmd.GParams === null) { jsLog.Verbose('WebSocket: Send: Command with no params detected'); } else { jsLog.Verbose('WebSocket: Send: Arguments detected:'+gCmd.GParams); gCmd.GParams = wmTools.StringFormat(gCmd.GParams, gCmd.Value); strcmd = strcmd +" "+gCmd.GParams; } jsLog.Debug('WebSocket: Send commandstring: '+strcmd); WmConsole.Trace(new wmLogItem("GCmd: " + strcmd + " " + gCmd.Description, wmEnums.WSMsgDirection.SENT, wmEnums.ConsoleLevels.SUCCESS)); try { wmWebSoket.WSObject.send(strcmd + '\n'); } catch (exception) { jsLog.Error('WebSocket: Exception:' + exception); WmConsole.Trace(new wmLogItem("WebSoket: Command exception: "+exception, wmEnums.WSMsgDirection.RECEIVED, wmEnums.ConsoleLevels.ERROR)); } } else { $('#modal-connect').modal('show'); } }, OnMessage: function(mdt) { if(mdt === "") { jsLog.Debug("WSMessage match: Empty message (skipped)"); } else { let litem = wmLogItem.ParseWsMessage(mdt); WmConsole.Trace(litem); if(litem.SdFile !== null) { WmConsole.TraceSdFile(litem); } } }, SetWsStatusBar: function(rs) { let cli = new wmLogItem(); let ctrls = { div:$('#div-conn-statusmsg'), ico:$('#div-conn-statusico'), btn:$('#btn-connect-status'), bar:$('#div-conn-statusbar') }; switch (rs) { case wmEnums.WSSatuses.CONNECTING: cli.SetValues("Connecting to "+WsUrl, wmEnums.WSMsgDirection.SENT, wmEnums.ConsoleLevels.INFO); ctrls.ico.html(""+wmIcons.Exchange.AddClass('')+""); ctrls.div.html("Connecting..."); ctrls.btn.html(""); ctrls.bar.removeClass('bg-success bg-warning bg-danger text-light text-dark').addClass("bg-warning text-dark"); break; case wmEnums.WSSatuses.OPEN: cli.SetValues("Connected to "+WsUrl, wmEnums.WSMsgDirection.RECEIVED, wmEnums.ConsoleLevels.SUCCESS); ctrls.ico.html(wmIcons.Wifi.AddClass('')); ctrls.div.html("Connected"); ctrls.btn.html(wmIcons.Ban.ToHtml()); ctrls.bar.removeClass('bg-success bg-warning bg-danger text-light text-dark').addClass("bg-success text-light"); break; case wmEnums.WSSatuses.CLOSED: cli.SetValues("Disconnected from "+WsUrl, wmEnums.WSMsgDirection.RECEIVED, wmEnums.ConsoleLevels.ERROR); ctrls.ico.html(wmIcons.Plug.AddClass('')); ctrls.div.html("Disconnected"); ctrls.btn.html(wmIcons.Bolt.ToHtml()); ctrls.bar.removeClass('bg-success bg-warning bg-danger text-light text-dark').addClass("bg-danger text-light"); break; case wmEnums.WSSatuses.CLOSING: cli.SetValues("Disconnecting from "+WsUrl, wmEnums.WSMsgDirection.SENT, wmEnums.ConsoleLevels.WARNING); ctrls.ico.html(""+wmIcons.Wifi.AddClass('')+""); ctrls.div.html("Disconnecting..."); ctrls.btn.html(""); ctrls.bar.removeClass('bg-success bg-warning bg-danger text-light text-dark').addClass("bg-warning text-dark"); break; default: cli.SetValues("Disconnected from "+WsUrl, wmEnums.WSMsgDirection.RECEIVED, wmEnums.ConsoleLevels.ERROR); ctrls.ico.html(wmIcons.Plug.AddClass('')); ctrls.div.html("Disconnected"); ctrls.btn.html(wmIcons.Bolt.ToHtml()); ctrls.bar.removeClass('bg-success bg-warning bg-danger text-light text-dark').addClass("bg-danger text-light"); break; } WmConsole.Trace(cli); } }; var WmUpload = { Reader: null, FileName: null, FileSize: null, FileContent: null, ReadyToWrite: false, Cancelled: false, Load: function() { let [fn,fe] = $("#file-upload-label").text().toUpperCase().split("."); WmUpload.FileName = fn.substring(0,7)+".GCO"; let input = $('#file-upload').get(0); if (input.files.length) { let tfile = input.files[0]; WmUpload.Reader = new FileReader(); WmUpload.Reader.onloadstart = function() { jsLog.Debug("File uploading starting"); $('#div-upload-fname').html(WmUpload.FileName); if(!$('#upload-process-collapse').hasClass("show")){ $('#upload-process-collapse').collapse('show'); } }; WmUpload.Reader.onload = function(e) { jsLog.Debug("File uploading completed"); WmUpload.FileSize = e.loaded; WmUpload.FileContent = e.target.result.split("\n"); WmUpload.Cancelled = false; $('#div-upload-fsize').html(wmTools.FileSizeFormat(WmUpload.FileSize)); $('#div-upload-fproc').html(wmTools.FormatNumber(WmUpload.FileContent.length,0)); WmControls.Enable(WmButtonGroups.FileProcess); WmUpload.FileProgress(0,"Ready to process..."); }; WmUpload.Reader.onloadend = function(e) { jsLog.Debug("File uploading finished"); jsLog.Debug("___________________onloadend"); }; WmUpload.Reader.readAsText(tfile); return true; } else { WmControls.ShowModalAlert('Please select the upload file before continuing'); WmControls.Enable(WmButtonGroups.FileManagement,WmButtonGroups.FileActions); return false; } }, Cancel: function() { jsLog.Debug("File uploading aborted"); WmUpload.Reader = null; WmUpload.FileName = null; WmUpload.FileSize = null; WmUpload.Cancelled = true; WmControls.Disable(WmButtonGroups.FileProcess); WmControls.Enable(WmButtonGroups.FileManagement,WmButtonGroups.FileActions); $('#div-upload-fsize').html("-"); $('#div-upload-fproc').html("-"); $('#div-upload-fname').html("-"); WmUpload.FileProgress(0," "); if($('#upload-process-collapse').hasClass("show")){ $('#upload-process-collapse').collapse('hide'); } }, FileProcess: function() { WmControls.Disable([$("#btn-file-proc")]); let fl = WmUpload.FileContent.length; jsLog.Debug("Start process GCode lines ("+WmUpload.FileSize+" total)"); WmUpload.FileProgress(0,"Start analyzing uploaded GCode..."); wmGCommands.SdFileStart.GParams = WmUpload.FileName; wmWebSoket.Send(wmGCommands.SdFileStart); var i = 0; var n = 1; (function pgline() { if(WmUpload.Cancelled){ wmWebSoket.Send(wmGCommands.SdFileStop); return; } else if(!WmUpload.ReadyToWrite){ jsLog.Debug("WmUpload.FileProcess: Waiting ready to write..."); WmUpload.FileProgress(0,"Waiting ready to write..."); setTimeout(pgline, 500); } else { let p = wmTools.GetPercentage(i+1,fl); WmUpload.FileProgress(p,"Analyzing line "+(i+1)+" of "+fl); let gitem = { line:WmUpload.FileContent[i], process:false, cksum:0 }; if(gitem.line.trim()==="" || gitem.line.match(/^ *$/)) { jsLog.Verbose("GLine: "+i+": "+gitem.line+" => Empty line (skip)"); } else if(gitem.line.substring(0,1)===";") { jsLog.Verbose("GLine: "+i+": "+gitem.line+" => Comment line (skip)"); } else if(gitem.line.indexOf(";") > -1) { gitem.line = gitem.line.substring(0,gitem.line.indexOf(";")); gitem.process=true; } else { gitem.process = true; } if(gitem.process) { gitem.line = "N"+n+" "+gitem.line.trim(); gitem.line = gitem.line+"*"+wmGCommandItem.CalcChecksum(gitem.line); jsLog.Verbose("GLINE TO SEND: "+gitem.line); wmGCommands.CustomCmd.GCode = gitem.line; wmWebSoket.Send(wmGCommands.CustomCmd); n++; } i++; if (i < fl) { setTimeout(pgline, 10); } else { WmUpload.FileProgress(100,"GCode Analysis completed!"); WmUpload.ReadyToWrite = false; wmWebSoket.Send(wmGCommands.SdFileStop); WmUpload.FileCompleted(); } } })(); }, FileProgress: function(p,m) { p = wmTools.FormatNumber(p,0); $('#upload-progressbar').text(p+"%"); $('#upload-progressbar').css('width',p+'%').attr('aria-valuenow', p); $('#upload-progress-text').html(m); if(p===100) { $('#upload-progressbar').removeClass("progress-bar-animated"); } }, FileCompleted: function() { WmControls.Disable(WmButtonGroups.FileProcess); WmButtons.GetSdContentList(); }, }; var WmButtons = { ConsoleListClear: function() { WmConsole.Clear(); }, ConsoleListExport: function() { WmConsole.Export(); }, DeleteSdConfirm: function() { $('#div-sdfile-delete-badge').html($('#txt-sdfile-selected').val()); }, DeleteSdSelected: function() { jsLog.Debug("DeleteSdSelected: Delete file:"+$("#txt-sdfile-selected").val()); WmControls.Disable(WmButtonGroups.FileActions); $('#div-sdfile-delete-rs').collapse('show'); wmGCommands.SdFileDel.GParams = $("#txt-sdfile-selected").val(); wmWebSoket.Send(wmGCommands.SdFileDel); setTimeout(function(){ $('#modal-sdfile-delete').modal('hide'); $('#div-sdfile-delete-rs').collapse('hide'); WmButtons.GetSdContentList(); }, 2000); }, GCommandSetPreset: function(gc) { jsLog.Debug("Set preset GCommand ("+gc+")"); $('#text-gcommand').val(gc); $('#modal-presets').modal('hide'); WmAutostart.SetGCommandChecksum(); }, GetSdContentList: function() { wmSdListCounter.Reset(); $('#txt-sdfile-selected').val(''); WmControls.Disable(WmButtonGroups.FileManagement); wmWebSoket.Send(wmGCommands.SdGetList); }, PrintSdConfirm: function() { $('#div-sdfile-print-badge').html($('#txt-sdfile-selected').val()); }, PrintSdSelected: function() { jsLog.Debug("PrintSdSelected: Print file:"+$("#txt-sdfile-selected").val()); WmControls.Disable(WmButtonGroups.FileActions); $('#div-sdfile-print-rs').collapse('show'); wmGCommands.SdFilePrint.GParams = $("#txt-sdfile-selected").val(); wmWebSoket.Send(wmGCommands.SdFilePrint); setTimeout(function(){ $('#modal-sdfile-print').modal('hide'); $('#div-sdfile-print-rs').collapse('hide'); WmAutostart.SetShownPanel(wmEnums.Panels.STATUS); }, 2000); }, SaveSettings: function() { jsLog.Verbose("Button 'btn-save-settings' clicked"); WmControls.Disable(['#btn-save-settings','#btn-close-settings']); wmSettings.AutoConnect = document.getElementById('set-auto-connect').checked; wmSettings.DefaultPanel = parseInt($('#set-default-panel').val()); wmSettings.LogLevel = parseInt($('#set-log-level').val()); wmSettings.SymbolMode = $('#set-log-symbol').val(); wmSettings.AutoTempInterval = $('#set-default-autotemp').val(); if($('#set-default-tempunit').val()===0) { wmSettings.TempUnit = wmEnums.TempUnits.CELSIUS; } else if($('#set-default-tempunit').val()===1) { wmSettings.TempUnit = wmEnums.TempUnits.FAHRENHEIT; } else if( $('#set-default-tempunit').val()===2) { wmSettings.TempUnit = wmEnums.TempUnits.KELVIN; } if(wmSettings.SymbolMode==='letter') { wmSettings.SymbolSend = wmEnums.WsMsgSymbols.SENT.LETTER; wmSettings.SymbolReceive = wmEnums.WsMsgSymbols.RECEIVED.LETTER; } else { wmSettings.SymbolSend = $('#div-log-symbol-icon-sample-s').html(); wmSettings.SymbolReceive = $('#div-log-symbol-icon-sample-r').html(); } if(document.getElementById('set-trace-mode-append').checked) { wmSettings.ConsoleDirection = wmEnums.ConsoleDirection.APPEND; } else { wmSettings.ConsoleDirection = wmEnums.ConsoleDirection.PREPEND; } wmCookie.Write(wmTools.StringFormatJson(wmSettings)); $('#div-save-setting-rs').collapse('show'); setTimeout(function(){ $('#modal-settings').modal('hide'); $('#div-save-setting-rs').collapse('hide'); WmControls.Enable(['#btn-save-settings','#btn-close-settings']); }, 2000); }, SdInit: function() { wmWebSoket.Send(wmGCommands.SdInit); }, SdRelease: function() { wmWebSoket.Send(wmGCommands.SdRelease); }, SendGcommand: function() { if(wmWebSoket.WSObject !== null && wmWebSoket.WSObject.readyState === wmEnums.WSSatuses.OPEN) { WmControls.Disable(["#btn-gcommand"]); let gcmd = $('#text-gcommand'); if (gcmd.val() === "") { gcmd.removeClass('border-dark').addClass('border-danger'); jsLog.Warning("Empty custom command string detected"); gcmd.focus(); } else { gcmd.removeClass('border-danger').addClass('border-dark'); let gc = wmGCommandItem.GetCommandItemByCode(gcmd.val().trim().toUpperCase()); if(gc === null) { wmGCommands.CustomCmd.GCode = gcmd.val().trim().toUpperCase(); jsLog.Debug("Sending custom command: " + wmGCommands.CustomCmd.GCode); wmWebSoket.Send(wmGCommands.CustomCmd); } else { if(gc.Supported) { wmGCommands.CustomCmd.GCode = gcmd.val().trim().toUpperCase(); jsLog.Debug("Sending custom command: " + wmGCommands.CustomCmd.GCode); wmWebSoket.Send(wmGCommands.CustomCmd); } else { jsLog.Warning("Unsupported command: " + wmGCommands.CustomCmd.GCode); WmConsole.Trace(new wmLogItem("GCmd: " + gcmd.val() + " Unsupported command", wmEnums.WSMsgDirection.RECEIVED, wmEnums.ConsoleLevels.ERROR)); } } gcmd.val(''); $('#checksum-gcommand-value').html(' '); WmControls.Enable(["#btn-gcommand"]); } } else { $('#modal-connect').modal('show'); } }, SetPositionHome: function(b) { if(b.id==="btn-move-home-all"){ wmWebSoket.Send(wmGCommands.MoveHome); } else if (b.id==="btn-move-home-x"){ wmWebSoket.Send(wmGCommands.MoveHomeX); } else if (b.id==="btn-move-home-y"){ wmWebSoket.Send(wmGCommands.MoveHomeY);} else if (b.id==="btn-move-home-z"){ wmWebSoket.Send(wmGCommands.MoveHomeZ);} }, SetSdSelected: function(sdi) { jsLog.Debug("SetSdSelected: Selected file:"+$(sdi).attr("data-sdfile")); $('#txt-sdfile-selected').val($(sdi).attr("data-sdfile")); let lip = document.getElementById("list-sd-content").getElementsByTagName("a"); for (let i=0; i 0) { for(let i=0; i 0) { for(let i=0; i"+fsv+""); $('#div-fan-speed-set').html(rv+"%"+fsv+""); if(rv===0) { wmWebSoket.Send(wmGCommands.FanOff); } else { wmGCommands.FanOn.GParams = "S"+fsv; wmWebSoket.Send(wmGCommands.FanOn); } WmChartsData.FanSpeed.DataUpdate(rv); }, ResetSdFileCounters() { $('#list-sd-content').empty(); $('#div-sdlist-file-count').text(0); $('#div-sdlist-folder-count').text(0); }, UpdateTemperatures: function(dt){ $('#div-temp-extruder-detect').text(dt.ExtruderTemp); $('#div-temp-extruder-set').text(dt.ExtruderSet); $('#div-temp-extruder-unit').text(wmSettings.TempUnit.LABEL); if(dt.BedTemp !== null) { $('#div-temp-bed-detect').text(dt.BedTemp); $('#div-temp-bed-set').text(dt.BedSet); $('#div-temp-bed-unit').text(wmSettings.TempUnit.LABEL); } }, SetPrinterStatusInfo: function(s, m) { if(!s) { $('#div-pstatus-sdprint').removeClass("badge-danger").addClass("badge-info"); $('#div-pstatus-sdprint').html("Ready to print"); $('#div-pstatus-timer').collapse('hide'); $('#div-pstatus-progress').collapse('hide'); } else { $('#div-pstatus-sdprint').removeClass("badge-danger badge-info").addClass("badge-success"); $('#div-pstatus-sdprint').html("Printing in progress"); $('#div-pstatus-timer').collapse('show'); $('#div-pstatus-progress').collapse('show'); } }, SetSteppers: function(o) { if(o.id==="set-stepper-all") { WmControls.SetCheckStatus(WmButtonGroups.Stepper,o.checked); if(o.checked) { wmWebSoket.Send(wmGCommands.StepEnableAll); } else { wmWebSoket.Send(wmGCommands.StepDisableAll); } } else { if(o.id==="set-stepper-x") { wmGCommands.StepEnable.GParams = "X"; } else if(o.id==="set-stepper-y") { wmGCommands.StepEnable.GParams = "Y"; } else if(o.id==="set-stepper-z") { wmGCommands.StepEnable.GParams = "Z"; } else if(o.id==="set-stepper-e") { wmGCommands.StepEnable.GParams = "E"; } if(o.checked) { wmWebSoket.Send(wmGCommands.StepEnable); } else { wmWebSoket.Send(wmGCommands.StepDisable); } } }, }; var WmChartsData = { Temperatures: { TimeFormat: 'HH:mm:ss', Speed: 1000, Scale: 1, Extruder: { Label: "Extruder", BorderColor: wmColors.RedCoral, BgColor: wmColors.RedCoral, Data:[] }, Bed: { Label: "Bed", BorderColor: wmColors.Blue, BgColor: wmColors.Blue, Data:[] }, AddEmpty: function(arr, n) { for(var i = 0; i < n; i++) { let xd = moment().subtract((n - i) * WmChartsData.Temperatures.Speed, 'milliseconds').toDate(); arr.push({ x: xd, y: null }); } }, DataUpdate(di) { let dt = new Date(); WmChartsData.Temperatures.Extruder.Data.push({ x: dt, y: di.ExtruderTemp }); WmChartsData.Temperatures.Extruder.Data.shift(); if(di.BedTemp !== null) { WmChartsData.Temperatures.Bed.Data.push({ x: dt, y: di.BedTemp }); WmChartsData.Temperatures.Bed.Data.shift(); } requestAnimationFrame(WmCharts.Advance); } }, FanSpeed: { Values: { Label: ["Fan speed",""], BgColor: [wmColors.GreenSuc, wmColors.Grey], Data: [0,100] }, DataUpdate(di) { WmChartsData.FanSpeed.Values.Data[0] = di; WmChartsData.FanSpeed.Values.Data[1] = 100 - di; if(di < 30) { WmChartsData.FanSpeed.Values.BgColor[0] = wmColors.GreenSuc; } else if(di < 60) { WmChartsData.FanSpeed.Values.BgColor[0] = wmColors.Yellow; } else if(di < 80) { WmChartsData.FanSpeed.Values.BgColor[0] = wmColors.Orange; } else { WmChartsData.FanSpeed.Values.BgColor[0] = wmColors.Red; } requestAnimationFrame(function() { WmCharts.FanSpeed.CanvasItem.update()}); } } }; var WmCharts = { Temperatures: { CanvasItem: null, Config: { type: 'line', data: { datasets: [{ label: WmChartsData.Temperatures.Extruder.Label, data: WmChartsData.Temperatures.Extruder.Data, backgroundColor: WmChartsData.Temperatures.Extruder.BgColor, borderColor: WmChartsData.Temperatures.Extruder.BorderColor, borderWidth: 2, fill: false, pointRadius: 1.5 },{ label: WmChartsData.Temperatures.Bed.Label, data: WmChartsData.Temperatures.Bed.Data, backgroundColor: WmChartsData.Temperatures.Bed.BgColor, borderColor: WmChartsData.Temperatures.Bed.BorderColor, borderWidth: 2, fill: false, pointRadius: 1.5 }] }, options: { responsive: true, animation: { duration: WmChartsData.Temperatures.Speed * 1.5, easing:'linear' }, scales: { xAxes: [{ type:'time', time:{ displayFormats: { second: 'HH:mm:ss'} }, scaleLabel: { display: false } }], yAxes: [{ ticks: { min: 0} }] } } }, DisplayAxis: function(ck) { if(ck.id==="chart-show-extruder") { WmCharts.Temperatures.CanvasItem.getDatasetMeta(0).hidden = ck.checked===true ? false : true; $('#chart-show-extruder-label').text(ck.checked===true ? "Show" : "Hide"); } else if(ck.id==="chart-show-bed") { WmCharts.Temperatures.CanvasItem.getDatasetMeta(1).hidden = ck.checked===true ? false : true; $('#chart-show-bed-label').text(ck.checked===true ? "Show" : "Hide"); } if(!$('#set-auto-temp').prop('checked')){ WmCharts.Temperatures.CanvasItem.update(); } } }, FanSpeed: { CanvasItem: null, Config: { type: 'doughnut', data: { datasets: [{ data: WmChartsData.FanSpeed.Values.Data, backgroundColor: WmChartsData.FanSpeed.Values.BgColor, }], labels: WmChartsData.FanSpeed.Values.Label }, options: { responsive: true, circumference: Math.PI, rotation: -Math.PI, legend: { display: false }, tooltips: { enabled: false }, title: { display: false }, animation: { animateScale: true, animateRotate: true, onComplete: function () { var ctx = this.chart.ctx; ctx.font = "14pt Verdana"; ctx.textAlign = 'center'; ctx.textBaseline = 'bottom'; ctx.fillStyle = wmColors.Black; let ds = this.data.datasets; let model = ds[0]._meta[Object.keys(ds[0]._meta)[0]].data[0]._model; let xp = wmTools.FormatNumber(model.x,0), yp = wmTools.FormatNumber(model.y,0); jsLog.Debug("Drawing speed gauge percentage label position (x,y): "+xp+","+yp); ctx.fillText(WmChartsData.FanSpeed.Values.Data[0]+'%', xp, yp); } } } } }, Init: function() { WmChartsData.Temperatures.AddEmpty(WmChartsData.Temperatures.Extruder.Data, 20); WmChartsData.Temperatures.AddEmpty(WmChartsData.Temperatures.Bed.Data, 20); WmCharts.Temperatures.CanvasItem = new Chart(document.getElementById('chart-temps'), WmCharts.Temperatures.Config); WmCharts.FanSpeed.CanvasItem = new Chart(document.getElementById('chart-fanspeed'), WmCharts.FanSpeed.Config); }, Advance: function() { if (WmChartsData.Temperatures.Extruder.Data[0] !== null && WmChartsData.Temperatures.Extruder.Scale < 4) { WmCharts.Temperatures.CanvasItem.update(); } WmCharts.Temperatures.CanvasItem.update(); }, SetTempReport: function(tr) { let temps = { ExtruderTemp: tr[0].replace(/T:/,""), ExtruderSet: tr[1], BedTemp: tr[2]==="undefined" ? null : tr[2].replace(/B:/,""), BedSet: tr[3]==="undefined" ? null : tr[3] }; WmChartsData.Temperatures.DataUpdate(temps); WmControls.UpdateTemperatures(temps); } }; var WmConsole = { Clear: function() { jsLog.Debug("Clearing console message list..."); $('#gcommand-console-list').empty(); wmLogBuffer.length = 0; WmConsole.Trace(new wmLogItem("Console list cleared by user", wmEnums.WSMsgDirection.RECEIVED, wmEnums.ConsoleLevels.SUCCESS)); }, Export: function() { jsLog.Debug("Exporting console message list..."); var fdt = new Array(); // DA FINIRE LA PRIMA RIGA NOMI CAMPI for(i=0; i-1) { wmSdListCounter.FOLDERS++; } } $('#list-sd-content').append(litem.ToSdFileList()); $('#div-sdlist-file-count').text(wmSdListCounter.FILES); $('#div-sdlist-folder-count').text(wmSdListCounter.FOLDERS); if(litem.SdFile === "End file list") { WmControls.Enable(WmButtonGroups.FileManagement); } } }; var WmAutostart = { SetDefaultPanel: function() { jsLog.Verbose("Set default shown panel ("+wmSettings.DefaultPanel+")"); if (wmSettings.DefaultPanel == wmEnums.Panels.STATUS) { $('#accordion-panel-status-body').addClass("show"); } else if (wmSettings.DefaultPanel === wmEnums.Panels.CONTROLS) { $('#accordion-panel-controls-body').addClass("show"); } else if (wmSettings.DefaultPanel === wmEnums.Panels.TEMP) { $('#accordion-panel-temp-body').addClass("show"); } else if (wmSettings.DefaultPanel === wmEnums.Panels.FILES) { $('#accordion-panel-file-body').addClass("show"); } else if (wmSettings.DefaultPanel === wmEnums.Panels.CONSOLE) { $('#accordion-panel-console-body').addClass("show"); } }, SetShownPanel: function(p) { jsLog.Verbose("Set shown panel ("+p+")"); if (p === wmEnums.Panels.STATUS) { $('#accordion-panel-status-body').removeClass("hide").addClass("show"); } else { $('#accordion-panel-status-body').removeClass("show").addClass("hide"); } if (p === wmEnums.Panels.CONTROLS) { $('#accordion-panel-controls-body').removeClass("hide").addClass("show"); } else { $('#accordion-panel-controls-body').removeClass("show").addClass("hide"); } if (p === wmEnums.Panels.TEMP) { $('#accordion-panel-temp-body').removeClass("hide").addClass("show"); } else { $('#accordion-panel-temp-body').removeClass("show").addClass("hide"); } if (p === wmEnums.Panels.FILES) { $('#accordion-panel-file-body').removeClass("hide").addClass("show"); } else { $('#accordion-panel-file-body').removeClass("show").addClass("hide"); } if (p === wmEnums.Panels.CONSOLE) { $('#accordion-panel-console-body').removeClass("hide").addClass("show"); } else { $('#accordion-panel-console-body').removeClass("show").addClass("hide"); } }, SetGCommandChecksum: function() { cs = wmGCommandItem.CalcChecksum($('#text-gcommand').val()); $('#checksum-gcommand-value').text(cs); jsLog.Debug("Set GCommand checksum ("+cs+")"); }, SetGCommandPresetList: function() { jsLog.Verbose("Fill GCommand preset list"); let lip = document.getElementById("list-presets").getElementsByTagName("li"); let i=0; if(lip.length === 1) { Object.keys(wmGCommands).forEach(key => { if(wmGCommands[key].GCode != "" && wmGCommands[key].Supported) { let gp = wmGCommands[key].GParams !== null ? wmTools.StringFormat(wmGCommands[key].GParams,wmGCommands[key].Values) : ''; var lib = ""; $('#list-presets').append(lib); i++; } }); } jsLog.Verbose("Fill GCommand preset list completed ("+i+" items)"); }, SetWmSettingsControls: function() { jsLog.Verbose("Set settings controls fields"); $('#set-default-panel').val(wmSettings.DefaultPanel); $('#set-auto-connect').bootstrapToggle(wmSettings.AutoConnect==true ? "on" : "off"); $('#set-default-autotemp').val(wmSettings.AutoTempInterval); $('#set-default-tempunit').val(wmSettings.TempUnit.VALUE); $('#set-log-level').val(wmSettings.LogLevel); if(wmSettings.ConsoleDirection===wmEnums.ConsoleDirection.APPEND) { $('#set-trace-mode-prepend').prop('checked',false); $('#set-trace-mode-append').prop('checked',true); } else { $('#set-trace-mode-append').prop('checked',false); $('#set-trace-mode-prepend').prop('checked',true); } $('#set-log-symbol').val(wmSettings.SymbolMode); if(wmSettings.SymbolMode==='letter') { $('#div-log-symbol-icon').collapse('hide'); } else { $('#div-log-symbol-icon').collapse('show'); SetConsoleSymbolIcon(); } }, SetAutotempDefault: function() { $('#auto-temp-interval').val(wmSettings.AutoTempInterval); } }; $(document).ready(function () { $('.accordion-always-open').on('show.bs.collapse', function () { $(this).data('isShowing', true); }); $('.accordion-always-open').on('hide.bs.collapse', function (event) { if (!$(this).data('isShowing')) { event.preventDefault(); } $(this).data('isShowing', false); }); jsLog.Debug("Browser in use: "+wmTools.GetBrowser()); jsLog.Debug("Browser sizes: "+wmTools.GetScreenSize()); // AutoStar Actions WmAutostart.SetWmSettingsControls(); WmAutostart.SetDefaultPanel(); WmAutostart.SetGCommandPresetList(); WmAutostart.SetAutotempDefault(); // EVENTS: Buttons $('#btn-clear-console').click(function() { WmButtons.ConsoleListClear(); }); $('#btn-export-console').click(function() { WmButtons.ConsoleListExport(); }); $('#btn-file-proc').click(function(){ WmUpload.FileProcess(); }); $('#btn-file-proc-cancel').click(function() { WmUpload.Cancel(); }); $('#btn-file-upload').click(function(){ WmButtons.UploadSdFile(); }); $('#btn-gcommand').click(function() { WmButtons.SendGcommand(); }); $('#btn-get-sdcontent').click(function() { WmButtons.GetSdContentList(); }); $('#btn-move-home-all').click(function() { WmButtons.SetPositionHome(this); }); $('#btn-move-home-x').click(function() { WmButtons.SetPositionHome(this); }); $('#btn-move-home-y').click(function() { WmButtons.SetPositionHome(this); }); $('#btn-move-home-z').click(function() { WmButtons.SetPositionHome(this); }); $('#btn-save-settings').click(function() { WmButtons.SaveSettings(); }); $('#btn-sdfile-delete-modal').click(function() { WmButtons.DeleteSdSelected(); }); $('#btn-sdfile-print-modal').click(function() { WmButtons.PrintSdSelected(); }); $('#btn-set-sdinit').click(function() { WmButtons.SdInit(); }); $('#btn-set-sdrelease').click(function() { WmButtons.SdRelease(); }); $('#btn-wsconnect').click(function() { WmButtons.WsConnect(); }); $('#btn-wsconnect-modal').click(function() { WmButtons.WsConnect(); }); // EVENTS: Inputs fields $('#text-gcommand').keyup(function() { WmAutostart.SetGCommandChecksum(); }); $('#text-gcommand').change(function() { WmAutostart.SetGCommandChecksum(); }); $('#set-log-symbol').change(function() { WmConsole.SetMessageSymbol(); }); $('#set-log-symbol-icon').change(function() { WmConsole.SetSymbolIcon(); }); $('#file-upload').change( function() { WmControls.SetUpload(); }); $('#set-auto-temp').change( function() { WmControls.SetAutoTemp(); }); $('#auto-temp-interval').change( function() { WmControls.SetAutoTemp();} ); $('#chart-show-extruder').change( function() { WmCharts.Temperatures.DisplayAxis(this); }); $('#chart-show-bed').change( function() { WmCharts.Temperatures.DisplayAxis(this); }); $('#fan-speed-range').on("change", function() { WmControls.SetFanSpeed(this.value); }); $('#set-stepper-all').change( function() { WmControls.SetSteppers(this); }); $('#set-stepper-e').change( function() { WmControls.SetSteppers(this); }); $('#set-stepper-x').change( function() { WmControls.SetSteppers(this); }); $('#set-stepper-y').change( function() { WmControls.SetSteppers(this); }); $('#set-stepper-z').change( function() { WmControls.SetSteppers(this); }); // Autorun onload WmConsole.Trace(new wmLogItem("Ready", wmEnums.WSMsgDirection.SENT, wmEnums.ConsoleLevels.SUCCESS)); if(wmSettings.AutoConnect===true) { wmWebSoket.Connect(); } window.onload = function() { WmCharts.Init(); WmCharts.Advance(); }; WmControls.Enable(WmButtonGroups.All()); });