      1 (function ($, rf) {
      2
      3     rf.ui = rf.ui || {};
      4
      5     var initButtons = function(buttons, css, component) {
      6         var id;
      7
      8         var fn = function(e) {
      9             e.data.fn.call(e.data.component, e);
     10         };
     11
     12         var data = {};
     13         data.component = component;
     14
     15         for (id in buttons) {
     16             var element = $(document.getElementById(id));
     17
     18             data.id = id;
     19             data.page = buttons[id];
     20             data.element = element;
     21             data.fn = component.processClick;
     22
     23             element.bind('click', copy(data), fn);
     24         }
     25     };
     26
     27     var copy = function(data) {
     28         var key;
     29         var eventData = {};
     30
     31         for (key in data) {
     32             eventData[key] = data[key];
     33         }
     34
     35         return eventData;
     36     };
     37
     38     var togglePressClass = function(el, event) {
     39         if (event.type == 'mousedown') {
     40             el.addClass('rf-ds-press');
     41         } else if (event.type == 'mouseup' || event.type == 'mouseout') {
     42             el.removeClass('rf-ds-press');
     43         }
     44     };
     45
     46     rf.ui.DataScroller = function(id, submit, options) {
     47
     48         $super.constructor.call(this, id);
     49
     50         var dataScrollerElement = this.attachToDom();
     51
     52         this.options = options;
     53         this.currentPage = options.currentPage;
     54
     55         if (submit && typeof submit == 'function') {
     56             RichFaces.Event.bindById(id, this.getScrollEventName(), submit);
     57         }
     58
     59         var css = {};
     60
     61         if (options.buttons) {
     62
     63             $(dataScrollerElement).delegate('.rf-ds-btn', 'mouseup mousedown mouseout', function(event) {
     64                 if ($(this).hasClass('rf-ds-dis')) {
     65                     $(this).removeClass('rf-ds-press');
     66                 } else {
     67                     togglePressClass($(this), event);
     68                 }
     69             });
     70
     71             initButtons(options.buttons.left, css, this);
     72             initButtons(options.buttons.right, css, this);
     73         }
     74
     75         if (options.digitals) {
     76
     77             $(dataScrollerElement).delegate('.rf-ds-nmb-btn', 'mouseup mousedown mouseout', function(event) {
     78                 togglePressClass($(this), event);
     79             });
     80
     81             initButtons(options.digitals, css, this);
     82         }
     83     };
     84
     85     rf.BaseComponent.extend(rf.ui.DataScroller);
     86     var $super = rf.ui.DataScroller.$super;
     87
     88     $.extend(rf.ui.DataScroller.prototype, (function () {
     89
     90         var scrollEventName = "rich:datascroller:onscroll";
     91
     92         return {
     93
     94             name: "RichFaces.ui.DataScroller",
     95
     96             processClick: function(event) {
     97                 var data = event.data;
     98                 if (data) {
     99                     var page = data.page;
    100                     if (page) {
    101                         this.switchToPage(page);
    102                     }
    103                 }
    104             },
    105
    106             switchToPage: function(page) {
    107                 if (typeof page != 'undefined' && page != null) {
    108                     RichFaces.Event.fireById(this.id, this.getScrollEventName(), {'page' : page});
    109                 }
    110             },
    111
    112             fastForward: function() {
    113                 this.switchToPage("fastforward");
    114             },
    115
    116             fastRewind: function() {
    117                 this.switchToPage("fastrewind");
    118             },
    119
    120             next: function() {
    121                 this.switchToPage("next");
    122             },
    123
    124             previous: function() {
    125                 this.switchToPage("previous");
    126             },
    127
    128             first: function() {
    129                 this.switchToPage("first");
    130             },
    131
    132             last: function() {
    133                 this.switchToPage("last");
    134             },
    135
    136             getScrollEventName: function() {
    137                 return scrollEventName;
    138             },
    139             destroy: function() {
    140                 $super.destroy.call(this);
    141             }
    142         }
    143
    144     })());
    145
    146 })(RichFaces.jQuery, window.RichFaces);