Merge branch 'master' of ssh://git.onelab.eu/git/myslice-django
authorThierry Parmentelat <thierry.parmentelat@inria.fr>
Tue, 12 Mar 2013 11:48:14 +0000 (12:48 +0100)
committerThierry Parmentelat <thierry.parmentelat@inria.fr>
Tue, 12 Mar 2013 11:48:14 +0000 (12:48 +0100)
myslice/settings.py
plugins/simplelist.py
plugins/static/js/simplelist.js
slice/__init__.py [deleted file]
slice/models.py [deleted file]
slice/tests.py [deleted file]
trash/dashboard.py
trash/pluginview.py

index 8d61570..20cdbed 100644 (file)
@@ -148,7 +148,7 @@ INSTALLED_APPS = (
     'auth',
     'engine',
     'plugins',
-    'slice',
+    'trash',
     # Uncomment the next line to enable the admin:
     # 'django.contrib.admin',
     # Uncomment the next line to enable admin documentation:
index d3ec876..c8fbdb2 100644 (file)
@@ -17,6 +17,7 @@ class SimpleList (Plugin) :
         env={}
         header=getattr(self,'header',None)
         if header: env['header']=header
+        env['with_datatables']= "yes" if self.with_datatables else ""
         return env
 
     def requirements (self):
index d7f1d92..2c05345 100644 (file)
@@ -9,7 +9,7 @@
  * License: GPLv3
  */
 
-simplelist_debug=false;
+simplelist_debug=true;
 
 (function($){
     var methods = {
@@ -24,7 +24,7 @@ simplelist_debug=false;
                    /* Subscribe to query updates */
                    var channel='/results/' + options.query_uuid + '/changed';
                    /* passing $this as 2nd arg: callbacks will retrieve $this as e.data */
-                   $.subscribe(channel, $this, update_list);
+                   $.subscribe(channel, $this, update_table);
                    if (simplelist_debug) window.console.log('subscribing to ' + channel);
                    $this.data('SimpleList', {options: options, SimpleList : SimpleList});
                }
@@ -53,8 +53,9 @@ simplelist_debug=false;
     };
 
     /* Private methods */
-    function update_list(e, rows) {
+    function update_table(e, rows) {
        // e.data is what we passed in second argument to subscribe
+       // so here it is the jquery object attached to the plugin <div>
        var $this=e.data;
        // locate the <tbody>, expected layout being
        // <div class='plugin'> <table> <thead /> <tbody /tbody> </table> </div>
@@ -77,10 +78,20 @@ simplelist_debug=false;
        html_code=myslice_html_tbody(rows, options.key, options.value, is_cached);
        // locate the tbody from the template, set its text
         $tbody.html(html_code);
-       // clear the spinning wheel
-       var $elt = e.data;
-       if (simplelist_debug) console.log("about to unspin with elt #" + $elt.attr('id') + " class " + $elt.attr('class'));
-       $elt.closest('.need-spin').spin(false);
+
+       // clear the spinning wheel: look up an ancestor that has the need-spin class
+       $this.closest('.need-spin').spin(false);
+
+       // in case we run in datatables mode
+       // xxx this is not working yet
+       // http://datatables.net/forums/discussion/14556/can039t-get-my-table-to-refresh-properly#Item_1
+       // http://live.datatables.net/ufihuc/2/edit#javascript,html
+       // most likely when using datatables we'll have to change the contents using some other way..
+       var datatables_table=$this.find("table.with-datatables");
+       if (simplelist_debug) console.log ("running fnDraw() on " + datatables_table.length + " items");
+       // only try this if needed as datatables might not be loaded at all
+       if (datatables_table.length >0) datatables_table.dataTable().fnDraw();
+
     }
 
     function myslice_html_tbody(data, key, value, is_cached) {
@@ -93,7 +104,9 @@ simplelist_debug=false;
     }
     
     function myslice_html_tr(key, value,is_cached) {
-        var cached = is_cached ? "(cached)" : "";
+// could not understand what sense this 'cache' stuff could actually make      
+//        var cached = is_cached ? "(cached)" : "";
+        var cached = "";
         if (key == 'slice_hrn') {
             return "<tr><td class='simplelist'><i class='icon-play-circle'></i><a href='/slice/" + value + "'>" + value + cached + "</a></td></tr>";
         } else if (key == 'network_hrn') {
diff --git a/slice/__init__.py b/slice/__init__.py
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/slice/models.py b/slice/models.py
deleted file mode 100644 (file)
index 71a8362..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-from django.db import models
-
-# Create your models here.
diff --git a/slice/tests.py b/slice/tests.py
deleted file mode 100644 (file)
index 501deb7..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-"""
-This file demonstrates writing tests using the unittest module. These will pass
-when you run "manage.py test".
-
-Replace this with more appropriate tests for your application.
-"""
-
-from django.test import TestCase
-
-
-class SimpleTest(TestCase):
-    def test_basic_addition(self):
-        """
-        Tests that 1 + 1 always equals 2.
-        """
-        self.assertEqual(1 + 1, 2)
index 0d4de1d..297133e 100644 (file)
@@ -35,12 +35,10 @@ def dashboard_view (request):
         pluginset=pluginset,
         title='Asynchroneous SliceList',
         header='slices list', 
-        with_datatables=True,
+        with_datatables=False,
         toggled=True,
-        # this is required for the javascript code
+        # this is the query at the core of the slice list
         query=slices_query,
-#        key='slice_hrn',
-#        value='slice_hrn',
         )
 
     # variables that will get passed to the view-plugin.html template
@@ -65,8 +63,29 @@ def dashboard_view (request):
     # so we can sho who is logged
     template_env [ 'username' ] = the_user (request) 
 
+    ##########
+    # lacks a/href to /slice/%s
+    related_plugin = SliceList (
+        pluginset=pluginset,
+        title='Same request, other layout',
+        domid='sidelist',
+        with_datatables=True, 
+        header='paginated slices',
+        # share the query
+        query=slices_query,
+        )
+    # likewise but on the side view
+    template_env [ 'content_related' ] = related_plugin.render (request)
+    
+    # add our own css in the mix
+    pluginset.add_css_files ( 'css/dashboard.css')
+    
+    # don't forget to run the requests
     pluginset.exec_queue_asynchroneously ()
 
+    # xxx create another plugin with the same query and a different layout (with_datatables)
+    # show that it worls as expected, one single api call to backend and 2 refreshed views
+
     # the prelude object in pluginset contains a summary of the requirements() for all plugins
     # define {js,css}_{files,chunks}
     prelude_env = pluginset.template_env()
index fa3336f..413e126 100644 (file)
@@ -63,7 +63,6 @@ def test_plugin_view (request):
     template_env [ 'content_main' ] = main_plugin.render(request)
 
     ##########
-    # lacks a/href to /slice/%s
     related_plugin = StaticList (pluginset=pluginset,
                                  title='SliceList plugin',domid='slicelist1',
                                  with_datatables='yes', 
@@ -77,6 +76,7 @@ def test_plugin_view (request):
     template_env [ 'topmenu_items' ] = topmenu_items('plugin', request) 
     template_env [ 'username' ] = the_user (request) 
 
+    # we don't have anythong asynchroneous, but that doesn't hurt...
     pluginset.exec_queue_asynchroneously ()
 
     # the prelude object in pluginset contains a summary of the requirements() for all plugins