minor
authorThierry Parmentelat <thierry.parmentelat@inria.fr>
Tue, 9 Apr 2013 06:43:23 +0000 (08:43 +0200)
committerThierry Parmentelat <thierry.parmentelat@inria.fr>
Tue, 9 Apr 2013 06:43:23 +0000 (08:43 +0200)
plugins/updater/updater.js
plugins/updater/updater.py

index c61c205..7c587e9 100644 (file)
@@ -6,7 +6,7 @@
 
 ( function ( $ ) {
     
-    $.fn.Updater = function( method ) {
+    $.fn.Updater = function ( method ) {
         /* Method calling logic */
         if ( methods[method] ) {
             return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ));
             return methods.init.apply( this, arguments );
         } else {
             $.error( 'Method ' +  method + ' does not exist on $.Updater' );
-        }    
-       
+        }
     };
     
     var methods = {
-       
        init : function( options ) {
            return this.each(function(){
                var $this = $(this);
                /* Subscribe to query updates */
                 var results_channel = '/results/' + options.query_uuid + '/changed';
                $.subscribe(results_channel, function (e,rows) { updater.update_slice (e,rows); } );
-
-
-       // xxx - here -- here -- xxx
-
-            $('#updater-' + options.plugin_uuid).click({instance: $this}, function (e) {
-                var data = e.data.instance.data().Slices;
-                tophat_async_exec([{'query': data.update_query, 'id': null}]);
-                //$('#updateslice-' + options.plugin_uuid).prop('disabled', true);
-            });
-
-            /* End of plugin initialization */
-
-            $(this).data('Slices', {
-                options: options,
-                target : $this,
-                update_query : null,
-                child_subscribe: false, /* Are we listening for children updates */
-                Slices : Slices
+               updater.arm_button();
+           });
+       },
+       destroy : function( ) {
+            return this.each(function(){
+               var $this = $(this);
+               $(window).unbind('Updater');
+               data.Updater.remove();
+               $this.removeData('Updater');
             });
+       },
 
-         }
-       });
-     },
-    destroy : function( ) {
-
-        return this.each(function(){
-            var $this = $(this), data = $this.data('Slices');
-            $(window).unbind('Slices');
-            data.Slices.remove();
-            $this.removeData('Slices');
-        })
-
-    },
-
-    show : function( content ) { }
-  };
+       show : function( content ) { }
+    };
+    
+    function Updater (options) {
+       this.options=options;
+       // xxx should try to locate update_query first, in case we have several Updaters
+       // on the same query
+       // however the mental model behind the global manifold object for now is 
+       // to unambiguously find a query based on its query_uuid, which in the joomla
+       // implementation wouldn't fly
+       // we keep this for a later improvement
+       var query=manifold.find_query (options.query_uuid);
+       // very rough way of filling this for now
+       this.update_query = 
+           new ManifoldQuery ("update", query.subject, null, query.filters, 
+                              {}, // params
+                              query.fields, 
+                              undefined, /* unique */ 
+                              query.query_uuid, /* tmp */
+                              undefined, undefined /* maybe some day I'll get that one */);
+
+       this.arm_button = function () {
+           $('#updater-' + this.options.plugin_uuid).click(this, this.submit_update_request);
+       },
+       this.submit_update_request = function (e) {
+           var update_query = e.data.update_query;
+           $.publish("messages:debug","Updater.submit_update_request " + update_query.__repr());
+           // xxx here - we need a valid query_uuid so the results will make it
+           manifold.asynchroneous_exec ( [ {'query_uuid': xxx, 'id': null}]);
+           // looks like a previous attempt to disable the button while the query is flying
+            //$('#updateslice-' + options.plugin_uuid).prop('disabled', true);
+        }
+    };
 
     /* Private methods */
 
-    function update_resources(e, resources, change)
-    {
+    function update_resources(e, resources, change) {
         data = e.data.instance.data().Slices;
 
         data.update_query.params['resource'] = resources
         $.publish('/update/' + data.options.query_uuid, [data.update_query, true]);
     }
 
-    function update_leases(e, leases, change)
-    {
-        data = e.data.instance.data().Slices;
-
-        data.update_query.params['lease'] = leases
-        $.publish('/update/' + data.options.query_uuid, [data.update_query, true]);
-    }
-
-    function update_slice(e, rows, query) {
-        /* This function is called twice : get and update */
-
-        var data = e.data.instance.data().Slices;
-
-        /* Update placeholders and trigger subqueries updates */
-        if (rows.length == 0) {
-            alert("no result");
-            return;
-        }
-        var slice = rows[0];
-
-        /* for get */
-        if (data.update_query == null) {
-            data.update_query = new Query('update','slice', 'now', query.filter, {"resource": null, "lease": null}, query.fields, 0, data.options.query_uuid);
-        }
-        /* In case of update the list of resources and leases should be updated accordingly */
-
-        /* only for get ? */
-        $.each(slice, function(key, value) {
-            if (typeof value == 'string') {
-                $('#myslice__' + key).html(value);
-            }
-        });
-
-        /* TODO avoid repetitions + made this code generic and plugin-independent */
-
-        if (query.method == 'update') {
-            // XXX NON, les uuid doivent etre les memes que dans la query Get, cet appel devrait etre fait avant.
-            query.analyzed_subqueries();
-        }
-
-        /* NOTE: Dans le cadre d'un update, on n'a pas besoin de refaire tout
-         * le query plan et obtenir toutes les infos, par contre on ne peut pas
-         * savoir d'avance quels parametres ont été accordés, changés, etc.
-         * Dans le cas général, ca pourrait affecter le query plan...
-         * Par contre on n'a pas d'information sur toutes les resources, mais
-         * uniquement celles dans la liste. Comment gérer ?
-         */
+  function update_leases(e, leases, change) {
+      data = e.data.instance.data().Slices;
+      
+      data.update_query.params['lease'] = leases
+      $.publish('/update/' + data.options.query_uuid, [data.update_query, true]);
+  }
+  
+  function update_slice(e, rows, query) {
+      /* This function is called twice : get and update */
+      
+      var data = e.data.instance.data().Slices;
+      
+      /* Update placeholders and trigger subqueries updates */
+      if (rows.length == 0) {
+          alert("no result");
+          return;
+      }
+      var slice = rows[0];
+      
+      /* for get */
+      if (data.update_query == null) {
+          data.update_query = new Query('update','slice', 'now', query.filter, {"resource": null, "lease": null}, query.fields, 0, data.options.query_uuid);
+      }
+      /* In case of update the list of resources and leases should be updated accordingly */
+      
+      /* only for get ? */
+      $.each(slice, function(key, value) {
+          if (typeof value == 'string') {
+              $('#myslice__' + key).html(value);
+          }
+      });
+      
+      /* TODO avoid repetitions + made this code generic and plugin-independent */
+      
+      if (query.method == 'update') {
+          // XXX NON, les uuid doivent etre les memes que dans la query Get, cet appel devrait etre fait avant.
+          query.analyzed_subqueries();
+      }
+      
+      /* NOTE: Dans le cadre d'un update, on n'a pas besoin de refaire tout
+       * le query plan et obtenir toutes les infos, par contre on ne peut pas
+       * savoir d'avance quels parametres ont été accordés, changés, etc.
+       * Dans le cas général, ca pourrait affecter le query plan...
+       * Par contre on n'a pas d'information sur toutes les resources, mais
+       * uniquement celles dans la liste. Comment gérer ?
+       */
 
         /* Inform child plugins about their respective parts of the results */
         /* Only for get */
index f7e4ddb..506416b 100644 (file)
@@ -13,7 +13,7 @@ class Updater (Plugin):
 
     def requirements (self):
         return {
-            'js_files' :  [ "js/updater.js" ],
+            'js_files' :  [ "js/updater.js" , "js/manifold.js", "js/manifold-query.js", ],
             'css_files' : "css/updater.css",
             }