From 932ad198ecc9f0310c3c13adce7647ceaf376671 Mon Sep 17 00:00:00 2001 From: peteruithoven Date: Tue, 4 Feb 2014 21:06:25 +0100 Subject: [PATCH] Refactored PrinterPanel into using FormPanel superclass --- js/api/ConfigAPI.js | 19 +++++++ js/settings/FormPanel.js | 13 +++-- js/settings/PrinterPanel.js | 97 +++++++++++++---------------------- js/settings/SettingsWindow.js | 2 +- 4 files changed, 61 insertions(+), 70 deletions(-) diff --git a/js/api/ConfigAPI.js b/js/api/ConfigAPI.js index 50bb2ac..74f1b26 100644 --- a/js/api/ConfigAPI.js +++ b/js/api/ConfigAPI.js @@ -40,6 +40,25 @@ function ConfigAPI() { failedHandler(); }); }; + this.load = function(targetSettings,completeHandler,failedHandler) { + console.log("ConfigAPI:load"); + $.ajax({ + url: _wifiboxURL + "/config/", + type: "GET", + dataType: 'json', + data: targetSettings, + timeout: _timeoutTime, + success: function(response){ + if(response.status == "error" || response.status == "fail") { + failedHandler(); + } else { + completeHandler(response.data); + } + } + }).fail(function() { + failedHandler(); + }); + }; this.save = function(newSettings,completeHandler,failedHandler) { console.log("ConfigAPI:save"); $.ajax({ diff --git a/js/settings/FormPanel.js b/js/settings/FormPanel.js index 7c5376b..6bd323b 100644 --- a/js/settings/FormPanel.js +++ b/js/settings/FormPanel.js @@ -17,7 +17,6 @@ function FormPanel() { var _self; FormPanel.prototype.init = function(wifiboxURL,wifiboxCGIBinURL,panelElement) { - console.log("FormPanel:init"); // make _self the scope of which init was called? // needed to have the subclass instance access the same counter _self = this; @@ -27,7 +26,6 @@ function FormPanel() { //this.readForm = function(form) { FormPanel.prototype.readForm = function(form) { - console.log("FormPanel:readForm"); if(!form) form = _element; // if no form specified, read whole panel form //console.log("FormPanel"); var settings = {}; @@ -62,15 +60,12 @@ function FormPanel() { var elem = $(element); settings[elem.attr('name')] = elem.val(); }); - console.log(" settings: ",settings); return settings; }; - this.fillForm = function(settings,form) { - console.log("FormPanel:fillForm"); + FormPanel.prototype.fill = function(settings,form) { if(!form) form = _element; // if no form specified, fill whole panel form - console.log(" settings: ",settings); - console.log(" form: ",form); + //fill form with loaded settings var selects = form.find("select"); selects.each( function(index,element) { @@ -132,4 +127,8 @@ function FormPanel() { _element.find(".errorMsg").remove(); _element.find(".error").removeClass("error"); }; + + this.loadSettings = function(targetSettings,complete) { + _configAPI.load(targetSettings,complete); + }; } diff --git a/js/settings/PrinterPanel.js b/js/settings/PrinterPanel.js index 8c95ded..fbdae05 100644 --- a/js/settings/PrinterPanel.js +++ b/js/settings/PrinterPanel.js @@ -6,79 +6,52 @@ * See file LICENSE.txt or visit http://www.gnu.org/licenses/gpl.html for full license details. */ +// prototype inheritance +// http://robertnyman.com/2008/10/06/javascript-inheritance-how-and-why/ +PrinterPanel.prototype = new FormPanel(); function PrinterPanel() { - this.wifiboxURL; - this.element; - - this.retryDelay = 1000; - this.retryDelayer; // setTimout instance - //this.timeoutTime = 3000; this.printerType; - this.printerSettingsNames; - var self = this; + // ui elements + var _element; + var _printerSelector; + var _printerSettings; + + var _self = this; - this.init = function(wifiboxURL,element) { - self.wifiboxURL = wifiboxURL; - self.element = element; + this.init = function(wifiboxURL,wifiboxCGIBinURL,panelElement) { + console.log("PrinterPanel:init"); + console.log(" panelElement: ",panelElement); + console.log(" _self: ",_self); + // super call: + _self.constructor.prototype.init.call(_self,wifiboxURL,wifiboxCGIBinURL,panelElement); - self.printerSelector = element.find("#printerType"); - self.printerSelector.change(self.printerSelectorChanged); + _element = panelElement; - var formElements = element.find("[name]"); - self.printerSettingsNames = []; - formElements.each( function(index,element) { - self.printerSettingsNames.push(element.name); - }); + _printerSelector = _element.find("#printerType"); + _printerSelector.change(_self.printerSelectorChanged); - var gcodePanel = element.find("#gcodePanel"); + // we use readForm to get all the settings we need to + // reload after changing printer type + _printerSettings = _self.readForm(); + console.log(" _printerSettings: ",_printerSettings); + + var gcodePanel = _element.find("#gcodePanel"); gcodePanel.coolfieldset({collapsed:true}); } this.printerSelectorChanged = function(e) { - console.log("PrinterPanel:printerSelectorChanged"); - console.log("self: ", self); - self.printerType = self.printerSelector.find("option:selected").val(); - self.savePrinterType(self.loadPrinterSettings); - } - - this.savePrinterType = function(complete) { - console.log("PrinterPanel:savePrinterType"); - var postData = {}; - postData[self.printerSelector.attr("name")] = self.printerType; - console.log("postData: ",postData); - $.ajax({ - url: self.wifiboxURL + "/config/", - type: "POST", - dataType: 'json', - data: postData, - success: function(response){ - console.log("PrinterPanel:savePrinterType response: ",response); - if(complete) complete(); - } - }).fail(function() { - console.log("PrinterPanel:savePrinterType: failed"); - }); - } - this.loadPrinterSettings = function() { - console.log("PrinterPanel:loadPrinterSettings"); - console.log(" self.printerSettingsNames: ",self.printerSettingsNames); - var getData = {}; - $.each(self.printerSettingsNames, function(key, val) { - getData[val] = ""; - }); - console.log("getData: ",getData); - $.ajax({ - url: self.wifiboxURL + "/config/", - dataType: 'json', - data: getData, - success: function(response){ - console.log("PrinterPanel:loadPrinterSettings response: ",response); - - self.fillForm(response.data,self.element); - } - }).fail(function() { - console.log("PrinterPanel:loadPrinterSettings: failed"); + //console.log("PrinterPanel:printerSelectorChanged"); + _self.printerType = _printerSelector.find("option:selected").val(); + //_self.savePrinterType(self.loadPrinterSettings); + var settings = {}; + settings[_printerSelector.attr("name")] = _self.printerType; + + _self.saveSettings(settings,function(validated) { + if(!validated) return; + _self.loadSettings(_printerSettings,function(settings) { + _self.fill(settings); + }); }); } } diff --git a/js/settings/SettingsWindow.js b/js/settings/SettingsWindow.js index 622d245..a9f37cb 100644 --- a/js/settings/SettingsWindow.js +++ b/js/settings/SettingsWindow.js @@ -93,7 +93,7 @@ function SettingsWindow() { // printer panel var $printerPanelElement = self.form.find("#printerPanel"); - self.printerPanel.init(wifiboxURL,$printerPanelElement); + self.printerPanel.init(wifiboxURL,wifiboxCGIBinURL,$printerPanelElement); self.printerPanel.fillForm = self.fillForm;