From 02b4adc22f4be31f0f846aea95a7e7ac4a806ae8 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jordan=20Aug=C3=A9?= Date: Tue, 11 Jun 2013 11:28:22 +0200 Subject: [PATCH] updated plugins --- manifold/js/manifold.js | 42 +++++++++++++++++++++----- plugins/form/__init__.py | 4 ++- plugins/form/form.js | 23 +++++++++++---- plugins/wizard/wizard.js | 64 +++++++++++++++++++++++----------------- 4 files changed, 93 insertions(+), 40 deletions(-) diff --git a/manifold/js/manifold.js b/manifold/js/manifold.js index c5779c1c..d24211ca 100644 --- a/manifold/js/manifold.js +++ b/manifold/js/manifold.js @@ -25,6 +25,19 @@ function debug_query (msg, query) { */ var manifold = { + spin_presets: {}, + + spin: function(locator, active /*= true */) { + active = typeof active !== 'undefined' ? active : true; + try { + if (active) { + $(locator).spin(manifold.spin_presets); + } else { + $locator.spin(false); + } + } catch (err) { messages.debug("Cannot turn spins on/off " + err); } + }, + /*! * Associative array storing the set of queries active on the page * \memberof Manifold @@ -60,6 +73,17 @@ var manifold = { asynchroneous_debug : true, + /** + * \brief We use js function closure to be able to pass the query (array) + * to the callback function used when data is received + */ + success_closure: function(query, publish_uuid, domid) + { + return function(data, textStatus) { + manifold.asynchroneous_success(data, query, publish_uuid, domid); + } + }, + // Executes all async. queries // input queries are specified as a list of {'query_uuid': , 'id': } asynchroneous_exec : function (query_publish_dom_tuples) { @@ -69,13 +93,8 @@ var manifold = { try { if (manifold.asynchroneous_debug) messages.debug("Turning on spin with " + jQuery(".need-spin").length + " matches for .need-spin"); - jQuery('.need-spin').spin(spin_presets); + jQuery('.need-spin').spin(manifold.spin_presets); } catch (err) { messages.debug("Cannot turn on spins " + err); } - - // We use js function closure to be able to pass the query (array) to the - // callback function used when data is received - var success_closure = function(query, publish_uuid, domid) { - return function(data, textStatus) {manifold.asynchroneous_success(data, query, publish_uuid, domid);}}; // Loop through input array, and use publish_uuid to publish back results jQuery.each(query_publish_dom_tuples, function(index, tuple) { @@ -90,10 +109,19 @@ var manifold = { } // not quite sure what happens if we send a string directly, as POST data is named.. // this gets reconstructed on the proxy side with ManifoldQuery.fill_from_POST - jQuery.post(manifold.proxy_url, {'json':query_json} , success_closure(query, publish_uuid, tuple.domid)); + jQuery.post(manifold.proxy_url, {'json':query_json} , manifold.success_closure(query, publish_uuid, tuple.domid)); }) }, + /** + * \brief Forward a query to the manifold backend + * \param query (dict) the query to be executed asynchronously + * \param domid (string) the domid to be notified about the results (null for using the pub/sub system + */ + forward: function(query, domid) { + var query_json = JSON.stringify(query); + $.post(manifold.proxy_url, {'json': query_json} , manifold.success_closure(query, query.query_uuid, domid)); + }, /*! * Returns whether a query expects a unique results. diff --git a/plugins/form/__init__.py b/plugins/form/__init__.py index 734652e7..cbbac201 100644 --- a/plugins/form/__init__.py +++ b/plugins/form/__init__.py @@ -30,7 +30,9 @@ class CreateForm (Plugin): self.columns.append(c) def requirements (self): - return { 'js_files' : ['js/form.js', 'js/jquery.validate.js', ], + # Some should be included by default by manifold + return { 'js_files' : ['js/manifold.js', 'js/spin.presets.js', 'js/spin.min.js', 'js/jquery.spin.js', + 'js/form.js', 'js/jquery.validate.js', ], 'css_files' : ['css/form.css'] } def export_json_settings(self): diff --git a/plugins/form/form.js b/plugins/form/form.js index e877e578..8cec1746 100644 --- a/plugins/form/form.js +++ b/plugins/form/form.js @@ -46,9 +46,6 @@ var form = new CreateForm(options); $this.data('plugin', form); - $(this).on('validate.Form', form.validate); - $(this).on('validate', form.validate); - }); // this.each }, // init @@ -61,7 +58,8 @@ function CreateForm(options) { /* save a reference to this */ - var obj = this; + var $this = this; + var $obj = $('#' + options.plugin_uuid); /* member variables */ this.options = options; @@ -99,10 +97,18 @@ /* If the form correctly validates, we issue a create query */ if (!err) { + var query = { + 'action': 'create', + 'object': 'local:user', + 'params': params, + }; + /* Inform user about ongoing query: spinner */ + this.disable(); + manifold.spin($obj); /* Issue json query and wait for callback */ - // this.on_result() + manifold.forward(query, this.onresult); } /* Note, if the create has already been done (or fails, or ... ?) @@ -113,6 +119,13 @@ return false; } + /** + * \brief Disable the form entirely, during a create query for example + */ + this.disable = function() { + + } + } })( jQuery ); diff --git a/plugins/wizard/wizard.js b/plugins/wizard/wizard.js index de0643db..f974259e 100644 --- a/plugins/wizard/wizard.js +++ b/plugins/wizard/wizard.js @@ -106,26 +106,9 @@ \param stepIdx (integer) : step identifier (0-based) \returns jQuery selector */ - this.get_step = function(stepIdx) - { - return $('.plugin', $(stepIdx.attr('href'))); - } + this.get_step = function(stepIdx) { return $('.plugin', $(stepIdx.attr('href'))); } - this.get_plugin = function(step) - { - return step.data().plugin; - } - - this.onLeaveStep = function(stepIdx) - { - /* does the plugin has a validate entry ? */ - var step = this.get_step(stepIdx); - var plugin = this.get_plugin(step); - if (plugin.validate) { - plugin.validate(); - } - } - + this.get_plugin = function(step) { return step.data().plugin; } this.init1 = function() { $this.curStepIdx = options.selected; @@ -153,9 +136,6 @@ this.init = function() { this.init1(); - /* additonal init */ - this.options.onLeaveStep = this.onLeaveStep; - var allDivs =obj.children('div'); //$("div", obj); obj.children('ul').addClass("anchor"); allDivs.addClass("content"); @@ -370,15 +350,45 @@ } } } - + + this.validate_callback = function(validated) { + /* In case of failure, inform the user of what went wrong */ + if (!validated) { + return; + } + + /* Otherwise, proceed to next step */ + this.GoToNextStep(); + } + this.doForwardProgress = function() + { + var curStep = this.steps.eq($this.curStepIdx); + var step = this.get_step(curStep); + var plugin = this.get_plugin(step); + + /* If the plugin has a validate method, trigger it and wait for + * callback */ + if (plugin.validate) { + /* Trigger validation code and wait for callback */ + // XXX We should inform the user about progress and disable buttons + plugin.validate(this.validate_callback); + return; + } + + /* Otherwise, proceed to next step */ + this.GoToNextStep(); + } + + this.GoToNextStep = function() { var nextStepIdx = $this.curStepIdx + 1; + if(this.steps.length <= nextStepIdx){ - if(!options.cycleSteps){ - return false; - } - nextStepIdx = 0; + if (!options.cycleSteps) { + return false; + } + nextStepIdx = 0; } this.LoadContent(nextStepIdx); } -- 2.43.0