updated plugins
authorJordan Augé <jordan.auge@lip6.fr>
Tue, 11 Jun 2013 09:28:22 +0000 (11:28 +0200)
committerJordan Augé <jordan.auge@lip6.fr>
Tue, 11 Jun 2013 09:28:22 +0000 (11:28 +0200)
manifold/js/manifold.js
plugins/form/__init__.py
plugins/form/form.js
plugins/wizard/wizard.js

index c5779c1..d24211c 100644 (file)
@@ -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': <query_uuid>, 'id': <possibly null>}
     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.
index 734652e..cbbac20 100644 (file)
@@ -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):
index e877e57..8cec174 100644 (file)
@@ -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;
 
             /* 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 ... ?)
             return false;
         }
 
+        /**
+         * \brief Disable the form entirely, during a create query for example
+         */
+        this.disable = function() {
+
+        }
+
     }
 
 })( jQuery );
index de0643d..f974259 100644 (file)
            \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;
         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");
                }
             } 
         }                
-                    
+
+        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);
         }