I got a chance to spend some time hammering away at things that have bugged me in the LaserWeb UI, and gaining JS, node and React skills for my CV at the same time
TL;DR (I mean it)
I have done a lot of UI/Options work, adding more machine-level defaults for common operation settings, split Laser/Mill start codes, fluid control. Deleting Gcode now asks for confirmation, default gcode and workspace save filenames can be set, with strftime() alike date-time formatting. The gcode extension can be changed if desired. Gcode entry fields now use monospace, ‘copy to all ops’ is on pretty much every operation field. Almost all options now have expanded help.
I fixed a few bugs; the webcam now stays dismissed, and there was a nasty bug in A-Axis raster generation that caused the first move to use the Y axis instead of A. Reconnecting to a running server with a big job is no longer a UI disaster involving huge popups.
Speaking of popups; I’ve fixed the Gcode viewer so it is not blocked by the browser and opens a new tab. It will also ask for confirmation if the gcode file is >1Mb to avoid bottlenecking the browser.
I corrected the main project links in the about box, but didnt know what to do with the developers contact links, so I left them alone. Displaying of machine-profile specific info is also improved and a ‘machine logo’ can now be provided for pre-defined systems. I have a default machine profile for grbl-esp32 ready.
A corresponding slightly updated lw.comms-server also supports client-side setting of whether to send ‘Ctrl-X’ on machine connect, turning this into a machine settingin LW. Another small change stops the server returning the full job gcode when a client reconnects, returning a report of job size, start time, progress and the originators IP address instead (the old behaviour is configurable).
I have not changed anything functional in the actual Gcode generation libraries, so basic gcode generation is the same (apart from fluid on/off additions to mill/lathe cuts).
The simulator bar has been de-decorated, settings moved to ‘settings->application’ and the slider width can be reduced/expanded to give more/less console. Clicking on the sim button gives a time estimate.
There are other things I’m forgetting too; small typos, changed texts, updated modules. Basically I have been pouring through the code and fixing/improving the things within my capabilities.
The preview above is fully functional and can produce gcode for saving to disk. This preview was actually built on a Pi4, and the UI works quite well in chromium on the same Pi4 too.
(It needs the corresponding updated lw.comm-server for the ‘firmware detection’ options to take effect, they have no effect without it.)
I’ve actually tested this in Chrome on Fedora, Raspian, Windows10 and Android (tablet), it worked perfectly on them all. It also works in Firefox on Fedora and Win10 (with some ugly buttons and sliders). I was amused to find it worked perfectly on Edge in Win10 too; amused, but not surprised.
I’m getting ready to PR the main LW project with my mods. But wanted to get this out for a beta, and to cheer myself up. I need to think about the PR’s too, since I have been pretty atomic on my commits, but have not been branching per-feature.
Everything is public on Github