changeset 4163:5046b724a140 rhodecode-2.2.5-gpl

rhodecode.js: implement YUI_datatable(data, fields, columns, countnode, sortkey) with body from repos.html Use datatable_list_wrap for the DataTable and _TM['MSG_X'] for localized strings.
author Mads Kiilerich <madski@unity3d.com>
date Wed, 02 Jul 2014 19:03:27 -0400
parents a1b80a0a3e15
children 197bfc8a4f03
files rhodecode/public/js/rhodecode.js
diffstat 1 files changed, 72 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/rhodecode/public/js/rhodecode.js	Wed Jul 02 19:03:26 2014 -0400
+++ b/rhodecode/public/js/rhodecode.js	Wed Jul 02 19:03:27 2014 -0400
@@ -2080,6 +2080,78 @@
     return pagi
 }
 
+var YUI_datatable = function(data, fields, columns, countnode, sortkey){
+    var myDataSource = new YAHOO.util.DataSource(data);
+    myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
+    myDataSource.responseSchema = {
+        resultsList: "records",
+        fields: fields,
+        };
+    myDataSource.doBeforeCallback = function(req, raw, res, cb) {
+        // This is the filter function
+        var data     = res.results || [],
+            filtered = [],
+            i, l;
+
+        if (req) {
+            req = req.toLowerCase();
+            for (i = 0; i<data.length; i++) {
+                var pos = data[i].raw_name.toLowerCase().indexOf(req)
+                if (pos != -1) {
+                    filtered.push(data[i]);
+                }
+            }
+            res.results = filtered;
+        }
+        $(countnode).html(res.results.length);
+        return res;
+    }
+
+    var myDataTable = new YAHOO.widget.DataTable("datatable_list_wrap", columns, myDataSource, {
+        sortedBy: {key:sortkey, dir:"asc"},
+        paginator: YUI_paginator(25, ['user-paginator']),
+        MSG_SORTASC: _TM['MSG_SORTASC'],
+        MSG_SORTDESC: _TM['MSG_SORTDESC'],
+        MSG_EMPTY: _TM['MSG_EMPTY'],
+        MSG_ERROR: _TM['MSG_ERROR'],
+        MSG_LOADING: _TM['MSG_LOADING'],
+        });
+    myDataTable.subscribe('postRenderEvent',function(oArgs) {
+        tooltip_activate();
+        quick_repo_menu();
+        });
+
+    var filterTimeout = null;
+    var $q_filter = $('#q_filter');
+
+    updateFilter  = function () {
+        // Reset timeout
+        filterTimeout = null;
+
+        // Reset sort
+        var state = myDataTable.getState();
+        state.sortedBy = {key:sortkey, dir:YAHOO.widget.DataTable.CLASS_ASC};
+
+        // Get filtered data
+        myDataSource.sendRequest($q_filter.val(), {
+            success : myDataTable.onDataReturnInitializeTable,
+            failure : myDataTable.onDataReturnInitializeTable,
+            scope   : myDataTable,
+            argument: state});
+        };
+
+    $q_filter.click(function(){
+            if(!$q_filter.hasClass('loaded')){
+                //TODO: load here full list later to do search within groups
+                $q_filter.addClass('loaded');
+            }
+        });
+
+    $q_filter.keyup(function (e) {
+            clearTimeout(filterTimeout);
+            filterTimeout = setTimeout(updateFilter, 600);
+        });
+}
 
 // global hooks after DOM is loaded