portal.dashboard: working
[myslice.git] / plugins / lists / simplelist.js
index 11f812b..9cd5129 100644 (file)
     // complexity here is mostly because a datatables-enabled table cannot
     // be updated in a "normal" way using .html()
     function update_plugin(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 $plugindiv=e.data;
-       // locate the <table> element; with datatables in the way,
-       // this might not be a direct son of the div-plugin
-       var $table=$plugindiv.find("table.simplelist").first();
-       // also we may or may not have a header
-       var $tbody=$table.find("tbody.simplelist").first();
-       var use_datatables = $table.hasClass("with-datatables");
-       if (debug) messages.debug($plugindiv.attr('id') + " udt= " + use_datatables);
+        // e.data is what we passed in second argument to subscribe
+        // so here it is the jquery object attached to the plugin <div>
+        var $plugindiv = e.data;
+        // locate the <table> element; with datatables in the way,
+        // this might not be a direct son of the div-plugin
+        var $table = $plugindiv.find("table.simplelist").first();
+        // also we may or may not have a header
+        var $tbody = $table.find("tbody.simplelist").first();
+        var use_datatables = $table.hasClass("with-datatables");
+        if (debug) 
+            messages.debug($plugindiv.attr('id') + " udt= " + use_datatables);
        
        // clear the spinning wheel: look up an ancestor that has the need-spin class
        // do this before we might return
-       $plugindiv.closest('.need-spin').spin(false);
+           $plugindiv.closest('.need-spin').spin(false);
 
         if (rows.length == 0) {
-           if (use_datatables) datatables_set_message ($table, $tbody, unfold.warning("No result"));
-           else                regular_set_message ($table, $tbody, unfold.warning("No result"));
+               if (use_datatables)
+                 datatables_set_message ($table, $tbody, unfold.warning("No result"));
+               else
+                       regular_set_message ($table, $tbody, unfold.warning("No result"));
             return;
         }
+
         if (typeof rows[0].error != 'undefined') {
-           var error="ERROR: " + rows[0].error;
-           if (use_datatables) datatables_set_message ($table, $tbody, unfold.error(error));
-           else                regular_set_message ($table, $tbody, unfold.error(error));
+               var error="ERROR: " + rows[0].error;
+               if (use_datatables) 
+                datatables_set_message ($table, $tbody, unfold.error(error));
+               else
+                       regular_set_message ($table, $tbody, unfold.error(error));
             return;
         }
+
         var options = $plugindiv.data().SimpleList;
-       if (use_datatables)     datatables_update_table ($table,$tbody,rows,options.key);
-       else                    regular_update_table ($table,$tbody,rows,options.key);
+           if (use_datatables) 
+            datatables_update_table($table, $tbody, rows, options.key);
+           else
+                       regular_update_table($table, $tbody, rows, options.key);
 
-    }
+        }
 
     // hard-wire a separate presentation depending on the key being used....
     function cell(key, value) {
-        if (key == 'slice_hrn') {
+        if (key == 'slice.slice_hrn') {
             return "<i class='icon-play-circle'></i><a href='/slice/" + value + "'>" + value + "</a>";
         } else if (key == 'network_hrn') {
             return "<i class='icon-play-circle'></i>" + value ;
     }
 
     function regular_update_table ($table, $tbody, rows, key) {
-       if (debug) messages.debug('regular_update_table ' + rows.length + " rows");
-       var html=$.map(rows, function (row) { return html_row ( cell (key, row[key])); }).join();
-       $tbody.html(html);
+        if (debug)
+            messages.debug('regular_update_table ' + rows.length + " rows");
+           var html=$.map(rows, function (row) {
+            value = row;
+            $.each(key.split('.'), function(i, k) {
+                if ($.isArray(value)) {
+                    value = $.map(value, function(val, i) { return val[k]});
+                } else {
+                    value = value[k];
+                }
+            });
+            if ($.isArray(value)) {
+                x = $.map(value, function(val, i) { return html_row ( cell (key, val)); });
+                return x;
+            } else {
+                return html_row ( cell (key, value));
+            }
+        }).join();
+       $tbody.html(html);
     }
     
     function datatables_set_message ($table, $tbody, message) {
-       $table.dataTable().fnClearTable();
-       $table.dataTable().fnAddData( [ message ] );
-       $table.dataTable().fnDraw();
+        $table.dataTable().fnClearTable();
+        $table.dataTable().fnAddData( [ message ] );
+        $table.dataTable().fnDraw();
     }
 
     function datatables_update_table ($table, $tbody, rows, key) {
        $table.dataTable().fnDraw();
     }  
     
-    function html_row (cell) { return "<tr><td class='simplelist'>"+cell+"</td></tr>"; }
+    function html_row (cell) { 
+        return "<tr><td class='simplelist'>"+cell+"</td></tr>"; 
+    }
     
 })( jQuery );