From f61b6e8ad0c3224389f87c48aa5f8ad855477578 Mon Sep 17 00:00:00 2001 From: Philipp Engel Date: Tue, 11 Nov 2014 13:51:43 -0800 Subject: [PATCH] moved svg 'slicing' dialog to plugin code added some more files --- src/octoprint/plugins/svgtogcode/__init__.py | 2 +- .../static/js/vectorgraphicsconversion.js | 153 ++++++++++++++++++ .../svgtogcode/templates/svgtogcode.jinja2 | 24 +++ .../static/js/app/viewmodels/files.js | 2 +- src/octoprint/templates/dialogs.jinja2 | 37 ----- 5 files changed, 179 insertions(+), 39 deletions(-) create mode 100644 src/octoprint/plugins/svgtogcode/static/js/vectorgraphicsconversion.js create mode 100644 src/octoprint/plugins/svgtogcode/templates/svgtogcode.jinja2 diff --git a/src/octoprint/plugins/svgtogcode/__init__.py b/src/octoprint/plugins/svgtogcode/__init__.py index 744bdc73..92f2010b 100644 --- a/src/octoprint/plugins/svgtogcode/__init__.py +++ b/src/octoprint/plugins/svgtogcode/__init__.py @@ -144,7 +144,7 @@ class SvgToGcodePlugin(octoprint.plugin.SlicerPlugin, def get_assets(self): return { - "js": ["js/svgtogcode.js"], + "js": ["js/svgtogcode.js", "js/vectorgraphicsconversion.js"], "less": ["less/svgtogcode.less"], "css": ["css/svgtogcode.css"] } diff --git a/src/octoprint/plugins/svgtogcode/static/js/vectorgraphicsconversion.js b/src/octoprint/plugins/svgtogcode/static/js/vectorgraphicsconversion.js new file mode 100644 index 00000000..2184adda --- /dev/null +++ b/src/octoprint/plugins/svgtogcode/static/js/vectorgraphicsconversion.js @@ -0,0 +1,153 @@ +$(function() { +function VectorGraphicsConversionViewModel(loginStateViewModel) { + var self = this; + + self.loginState = loginStateViewModel; + + self.target = undefined; + self.file = undefined; + self.data = undefined; + + self.defaultSlicer = undefined; + self.defaultProfile = undefined; + + self.gcodeFilename = ko.observable(); + + self.title = ko.observable(); + self.slicer = ko.observable(); + self.slicers = ko.observableArray(); + self.profile = ko.observable(); + self.profiles = ko.observableArray(); + + self.show = function(target, file) { + self.target = target; + self.file = file; + self.title(_.sprintf(gettext("Convert %(filename)s"), {filename: self.file})); + self.gcodeFilename(self.file.substr(0, self.file.lastIndexOf("."))); + $("#slicing_configuration_dialog").modal("show"); + }; + + self.slicer.subscribe(function(newValue) { + self.profilesForSlicer(newValue); + }); + + self.enableSliceButton = ko.computed(function() { + return self.gcodeFilename() != undefined + && self.gcodeFilename().trim() != "" + && self.slicer() != undefined + && self.profile() != undefined; + }); + + self.requestData = function() { + $.ajax({ + url: API_BASEURL + "slicing", + type: "GET", + dataType: "json", + success: self.fromResponse + }) + }; + + self.fromResponse = function(data) { + self.data = data; + + var selectedSlicer = undefined; + self.slicers.removeAll(); + _.each(_.values(data), function(slicer) { + var name = slicer.displayName; + if (name == undefined) { + name = slicer.key; + } + + if (slicer.default) { + selectedSlicer = slicer.key; + } + + self.slicers.push({ + key: slicer.key, + name: name + }); + }); + + if (selectedSlicer != undefined) { + self.slicer(selectedSlicer); + } + + self.defaultSlicer = selectedSlicer; + }; + + self.profilesForSlicer = function(key) { + if (key == undefined) { + key = self.slicer(); + } + if (key == undefined || !self.data.hasOwnProperty(key)) { + return; + } + var slicer = self.data[key]; + + var selectedProfile = undefined; + self.profiles.removeAll(); + _.each(_.values(slicer.profiles), function(profile) { + var name = profile.displayName; + if (name == undefined) { + name = profile.key; + } + + if (profile.default) { + selectedProfile = profile.key; + } + + self.profiles.push({ + key: profile.key, + name: name + }) + }); + + if (selectedProfile != undefined) { + self.profile(selectedProfile); + } + + self.defaultProfile = selectedProfile; + }; + + self.slice = function() { + var gcodeFilename = self._sanitize(self.gcodeFilename()); + if (!_.endsWith(gcodeFilename.toLowerCase(), ".gco") + && !_.endsWith(gcodeFilename.toLowerCase(), ".gcode") + && !_.endsWith(gcodeFilename.toLowerCase(), ".g")) { + gcodeFilename = gcodeFilename + ".gco"; + } + + var data = { + command: "slice", + slicer: self.slicer(), + profile: self.profile(), + gcode: gcodeFilename + }; + + $.ajax({ + url: API_BASEURL + "files/" + self.target + "/" + self.file, + type: "POST", + dataType: "json", + contentType: "application/json; charset=UTF-8", + data: JSON.stringify(data) + }); + + $("#slicing_configuration_dialog").modal("hide"); + + self.gcodeFilename(undefined); + self.slicer(self.defaultSlicer); + self.profile(self.defaultProfile); + }; + + self._sanitize = function(name) { + return name.replace(/[^a-zA-Z0-9\-_\.\(\) ]/g, "").replace(/ /g, "_"); + }; + + self.onStartup = function() { + self.requestData(); + }; +} + + ADDITIONAL_VIEWMODELS.push([VectorGraphicsConversionViewModel, ["loginStateViewModel", "settingsViewModel", "slicingViewModel"], document.getElementById("dialog_vector_graphics_conversion")]); + +}); \ No newline at end of file diff --git a/src/octoprint/plugins/svgtogcode/templates/svgtogcode.jinja2 b/src/octoprint/plugins/svgtogcode/templates/svgtogcode.jinja2 new file mode 100644 index 00000000..1208dcdf --- /dev/null +++ b/src/octoprint/plugins/svgtogcode/templates/svgtogcode.jinja2 @@ -0,0 +1,24 @@ + \ No newline at end of file diff --git a/src/octoprint/static/js/app/viewmodels/files.js b/src/octoprint/static/js/app/viewmodels/files.js index c2194ea0..2bb97ff7 100644 --- a/src/octoprint/static/js/app/viewmodels/files.js +++ b/src/octoprint/static/js/app/viewmodels/files.js @@ -192,7 +192,7 @@ function GcodeFilesViewModel(printerStateViewModel, loginStateViewModel, slicing self.convertSVG = function(file) { if (!file) return; - self.slicing.show(file.origin, file.name); + self.svgconversion.show(file.origin, file.name); }; self.initSdCard = function() { diff --git a/src/octoprint/templates/dialogs.jinja2 b/src/octoprint/templates/dialogs.jinja2 index feaaea7f..fa7a322a 100644 --- a/src/octoprint/templates/dialogs.jinja2 +++ b/src/octoprint/templates/dialogs.jinja2 @@ -134,40 +134,3 @@ {{ _('Keep Access Control Enabled') }} - - \ No newline at end of file