      1 (function ($, rf) {
      2
      3     rf.ui = rf.ui || {};
      4
      5     rf.ui.DataTable = function(id, options) {
      6         $super.constructor.call(this, id);
      7         this.options = $.extend(this.options, options || {});
      8         this.attachToDom();
      9
     10     };
     11
     12     rf.BaseComponent.extend(rf.ui.DataTable);
     13     var $super = rf.ui.DataTable.$super;
     14
     15     $.extend(rf.ui.DataTable, {
     16             SORTING: "rich:sorting",
     17             FILTERING: "rich:filtering",
     18             SUBTABLE_SELECTOR:".rf-cst"
     19         });
     20
     21     $.extend(rf.ui.DataTable.prototype, ( function () {
     22
     23         var invoke = function(event, attributes) {
     24             rf.ajax(this.id, event, {"parameters" : attributes});
     25         };
     26
     27         var createParameters = function(type, id, arg1, arg2) {
     28             var parameters = {};
     29             var key = this.id + type;
     30             parameters[key] = (id + ":" + (arg1 || "") + ":" + arg2);
     31
     32             var eventOptions = this.options.ajaxEventOption;
     33             for (key in eventOptions) {
     34                 if (!parameters[key]) {
     35                     parameters[key] = eventOptions[key];
     36                 }
     37             }
     38             return parameters;
     39         };
     40
     41
     42         return {
     43
     44             name : "RichFaces.ui.DataTable",
     45
     46             sort: function(columnId, direction, isClear) {
     47                 invoke.call(this, null, createParameters.call(this, rf.ui.DataTable.SORTING, columnId, direction, isClear));
     48             },
     49
     50             clearSorting: function() {
     51                 this.sort("", "", true);
     52             },
     53
     54             filter: function(columnId, filterValue, isClear) {
     55                 invoke.call(this, null, createParameters.call(this, rf.ui.DataTable.FILTERING, columnId, filterValue, isClear));
     56             },
     57
     58             clearFiltering: function() {
     59                 this.filter("", "", true);
     60             },
     61
     62             expandAllSubTables: function() {
     63                 this.invokeOnSubTables('expand');
     64             },
     65
     66             collapseAllSubTables: function() {
     67                 this.invokeOnSubTables('collapse');
     68             },
     69
     70             switchSubTable: function(id) {
     71                 this.getSubTable(id).switchState();
     72             },
     73
     74             getSubTable: function(id) {
     75                 return rf.component(id);
     76             },
     77
     78             invokeOnSubTables: function(funcName) {
     79                 var elements = $(document.getElementById(this.id)).children(rf.ui.DataTable.SUBTABLE_SELECTOR);
     80                 var invokeOnComponent = this.invokeOnComponent;
     81                 elements.each(
     82                     function() {
     83                         if (this.firstChild && this.firstChild[rf.RICH_CONTAINER] && this.firstChild[rf.RICH_CONTAINER].component) {
     84                             var component = this.firstChild[rf.RICH_CONTAINER].component;
     85                             if (component instanceof RichFaces.ui.CollapsibleSubTable) {
     86                                 invokeOnComponent(component, funcName);
     87                             }
     88                         }
     89                     }
     90                 );
     91             },
     92
     93             invokeOnSubTable: function(id, funcName) {
     94                 var subtable = this.getSubTable(id);
     95                 this.invokeOnComponent(subtable, funcName);
     96             },
     97
     98             invokeOnComponent: function(component, funcName) {
     99                 if (component) {
    100                     var func = component[funcName];
    101                     if (typeof func == 'function') {
    102                         func.call(component);
    103                     }
    104                 }
    105             },
    106             destroy: function() {
    107                 $super.destroy.call(this);
    108             }
    109         }
    110
    111     })());
    112
    113 })(RichFaces.jQuery, window.RichFaces);
    114
    115