From 0b4e590a5b9da7bde68858e5e11ba9829eea67ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Mon, 28 Sep 2015 13:01:47 +0200 Subject: [PATCH] Refactored drop zone processing in GcodeFilesViewModel --- .../static/js/app/viewmodels/files.js | 151 +++++++----------- 1 file changed, 58 insertions(+), 93 deletions(-) diff --git a/src/octoprint/static/js/app/viewmodels/files.js b/src/octoprint/static/js/app/viewmodels/files.js index 885f5a40..313b8cf3 100644 --- a/src/octoprint/static/js/app/viewmodels/files.js +++ b/src/octoprint/static/js/app/viewmodels/files.js @@ -53,6 +53,7 @@ $(function() { }); self.uploadButton = undefined; + self.uploadSdButton = undefined; // initialize list helper self.listHelper = new ItemListHelper( @@ -357,10 +358,16 @@ $(function() { self.onUserLoggedIn = function(user) { self.uploadButton.fileupload("enable"); + if (self.uploadSdButton) { + self.uploadSdButton.fileupload("enable"); + } }; self.onUserLoggedOut = function() { self.uploadButton.fileupload("disable"); + if (self.uploadSdButton) { + self.uploadSdButton.fileupload("disable"); + } }; self.onStartup = function() { @@ -387,6 +394,31 @@ $(function() { //~~ Gcode upload self.uploadButton = $("#gcode_upload"); + self.uploadSdButton = $("#gcode_upload_sd"); + if (!self.uploadSdButton.length) { + self.uploadSdButton = undefined; + } + + var uploadProgress = $("#gcode_upload_progress"); + var uploadProgressBar = uploadProgress.find(".bar"); + + var localTarget = CONFIG_SD_SUPPORT ? $("#drop_locally") : $("#drop"); + var sdTarget = $("#drop_sd"); + + function setProgressBar(percentage, text, active) { + uploadProgressBar + .css("width", percentage + "%") + .text(text); + + if (active) { + uploadProgress + .addClass("progress-striped active"); + } else { + uploadProgress + .removeClass("progress-striped active"); + } + } + function gcode_upload_done(e, data) { var filename = undefined; var location = undefined; @@ -404,9 +436,7 @@ $(function() { } if (data.result.done) { - $("#gcode_upload_progress .bar").css("width", "0%"); - $("#gcode_upload_progress").removeClass("progress-striped").removeClass("active"); - $("#gcode_upload_progress .bar").text(""); + setProgressBar(0, "", false); } } @@ -419,109 +449,44 @@ $(function() { type: "error", hide: false }); - $("#gcode_upload_progress .bar").css("width", "0%"); - $("#gcode_upload_progress").removeClass("progress-striped").removeClass("active"); - $("#gcode_upload_progress .bar").text(""); + setProgressBar(0, "", false); } function gcode_upload_progress(e, data) { var progress = parseInt(data.loaded / data.total * 100, 10); - $("#gcode_upload_progress .bar").css("width", progress + "%"); - $("#gcode_upload_progress .bar").text(gettext("Uploading ...")); - if (progress >= 100) { - $("#gcode_upload_progress").addClass("progress-striped").addClass("active"); - $("#gcode_upload_progress .bar").text(gettext("Saving ...")); - } + var uploaded = progress >= 100; + + setProgressBar(progress, uploaded ? gettext("Saving ...") : gettext("Uploading ..."), uploaded); } - function enable_local_dropzone() { - $("#gcode_upload").fileupload({ - url: API_BASEURL + "files/local", + function setDropzone(dropzone, enable) { + var button = (dropzone == "local") ? self.uploadButton : self.uploadSdButton; + var drop = (dropzone == "local") ? localTarget : sdTarget; + var url = API_BASEURL + "files/" + dropzone; + + button.fileupload({ + url: url, dataType: "json", - dropZone: localTarget, + dropZone: enable ? drop : null, + drop: function(e, data) { + + }, done: gcode_upload_done, fail: gcode_upload_fail, progressall: gcode_upload_progress }); } - function disable_local_dropzone() { - $("#gcode_upload").fileupload({ - url: API_BASEURL + "files/local", - dataType: "json", - dropZone: null, - done: gcode_upload_done, - fail: gcode_upload_fail, - progressall: gcode_upload_progress - }); - } - - function enable_sd_dropzone() { - $("#gcode_upload_sd").fileupload({ - url: API_BASEURL + "files/sdcard", - dataType: "json", - dropZone: $("#drop_sd"), - done: gcode_upload_done, - fail: gcode_upload_fail, - progressall: gcode_upload_progress - }); - } - - function disable_sd_dropzone() { - $("#gcode_upload_sd").fileupload({ - url: API_BASEURL + "files/sdcard", - dataType: "json", - dropZone: null, - done: gcode_upload_done, - fail: gcode_upload_fail, - progressall: gcode_upload_progress - }); - } - - var localTarget; - if (CONFIG_SD_SUPPORT) { - localTarget = $("#drop_locally"); - } else { - localTarget = $("#drop"); - } - - self.loginState.isUser.subscribe(function(newValue) { - if (newValue === true) { - enable_local_dropzone(); - } else { - disable_local_dropzone(); - } - }); - - if (self.loginState.isUser()) { - enable_local_dropzone(); - } else { - disable_local_dropzone(); - } - - if (CONFIG_SD_SUPPORT) { - self.printerState.isSdReady.subscribe(function(newValue) { - if (newValue === true && self.loginState.isUser()) { - enable_sd_dropzone(); - } else { - disable_sd_dropzone(); - } - }); - - self.loginState.isUser.subscribe(function(newValue) { - if (newValue === true && self.printerState.isSdReady()) { - enable_sd_dropzone(); - } else { - disable_sd_dropzone(); - } - }); - - if (self.printerState.isSdReady() && self.loginState.isUser()) { - enable_sd_dropzone(); - } else { - disable_sd_dropzone(); - } + function evaluateDropzones() { + var enableLocal = self.loginState.isUser(); + var enableSd = enableLocal && CONFIG_SD_SUPPORT && self.printerState.isSdReady(); + + setDropzone("local", enableLocal); + setDropzone("sdcard", enableSd); } + self.loginState.isUser.subscribe(evaluateDropzones); + self.printerState.isSdReady.subscribe(evaluateDropzones); + evaluateDropzones(); $(document).bind("dragover", function (e) { var dropOverlay = $("#drop_overlay"); @@ -534,7 +499,7 @@ $(function() { var timeout = window.dropZoneTimeout; if (!timeout) { - dropOverlay.addClass('in'); + dropOverlay.addClass("in"); } else { clearTimeout(timeout); }