From e8701195e66f2d27ffe17fb514eae8173795aaf7 Mon Sep 17 00:00:00 2001 From: Georgiy Bondarenko <69736697+nehilo@users.noreply.github.com> Date: Thu, 4 Mar 2021 22:54:23 +0500 Subject: Initial commit --- data/www/webmarlin.js | 872 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 872 insertions(+) create mode 100644 data/www/webmarlin.js (limited to 'data/www/webmarlin.js') diff --git a/data/www/webmarlin.js b/data/www/webmarlin.js new file mode 100644 index 0000000..943f7b9 --- /dev/null +++ b/data/www/webmarlin.js @@ -0,0 +1,872 @@ +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()); +}); -- cgit v1.2.3