Bug Tracker

Changes between Initial Version and Version 1 of Ticket #981


Ignore:
Timestamp:
Feb 20, 2007, 12:01:52 AM (16 years ago)
Author:
john
Comment:

Legend:

Unmodified
Added
Removed
Modified
  • Ticket #981 – Description

    initial v1  
    11Here's a patch that enables scrolling the table's `tbody` for both IE and Firefox, others are still left out because other hacks are needed.
    2 {{{
    3 #!diff
    4 --- jquery.tablesorter.js.svn   2007-02-20 04:34:25.000000000 +0000
    5 +++ jquery.tablesorter.js   2007-02-20 04:48:39.000000000 +0000
    6 @@ -1,4 +1,4 @@
    7 -/*
    8 +/* vim: sts=4:ts=4:sw=4:noet:fenc=utf-8
    9   *
    10   * TableSorter - Client-side table sorting with ease!
    11   *
    12 @@ -33,8 +33,12 @@
    13         bind: true,
    14         addHeaderLink: false,
    15         lockedSortDir: false,
    16 +       minToScroll: false,
    17         dateFormat: 'mm/dd/yyyy' /** us default, uk dd/mm/yyyy */
    18     };
    19 +
    20 +   var ieDivID = 0;
    21 +   var enableScrollHasRun = false;
    22 
    23     return this.each(function(){
    24     /** add a class name for identifiying the table for companion plugins */
    25 @@ -58,6 +62,70 @@
    26         /** table object holder.*/
    27         var oTable = this;
    28 
    29 +       function enableScroll() {
    30 +           if ( defaults.minToScroll ) {
    31 +               if ( jQuery.browser.mozilla ) { if (enableScrollHasRun) { return; }; mozScroll(); };
    32 +               if ( jQuery.browser.msie ) { ieScroll() };
    33 +           };
    34 +           enableScrollHasRun = true;
    35 +       };
    36 +
    37 +       function mozScroll() {
    38 +           for (i=0; i < oTable.tBodies.length; i++) {
    39 +               finalSetup = false;
    40 +               var rows = oTable.tBodies[i].rows;
    41 +                if (rows.length > defaults.minToScroll) {
    42 +                    finalSetup = true;
    43 +                    var lastChilds = jQuery(oTable.tBodies[i]).find('td:last-child');
    44 +                    jQuery(lastChilds).css('padding-right', '16px');
    45 +                    var rows_height = jQuery(rows).height();
    46 +                    if ( rows_height == 0 ) { rows_height = 32; };
    47 +                    var tbody_height = (rows_height * defaults.minToScroll) + 'px';
    48 +                    jQuery(oTable.tBodies[i]).css({ overflow: 'auto', overflowX: 'hidden', height: tbody_height });
    49 +                };
    50 +                if (finalSetup) { jQuery(oTable).css('border-collapse', 'separate'); };
    51 +            };
    52 +        };
    53 +
    54 +       function ieScroll () {
    55 +            var rows = 0;
    56 +            for ( i=0; i < oTable.tBodies.length; i++) {
    57 +                rows += oTable.tBodies[i].rows.length;
    58 +            };
    59 +            var tDivID = 'scrollWrapper-';
    60 +            var scrollTop_ = 0;
    61 +            if (rows > defaults.minToScroll) {
    62 +                var createDiv = true;
    63 +                var div_id = tDivID + ieDivID;
    64 +                if ( jQuery(oTable).parent().is('div') && jQuery(oTable).parent().attr('id') == tDivID + (ieDivID-1) ) {
    65 +                    createDiv = false;
    66 +                    scrollTop_ = oTable.parentNode.scrollTop
    67 +                };
    68 +                if ( createDiv ) { jQuery(oTable).wrap('<div id="' + div_id + '"></div>'); };
    69 +                jQuery(oTable).css({
    70 +                    margin: '0px', marginRight: '22px', top: '0px', left: '0px'
    71 +                });
    72 +                jQuery(oTable.tHead).css('position', 'relative');
    73 +                jQuery(oTable.tHead.rows).css({
    74 +                    top: '0px', bottom: '0px', position: 'relative'
    75 +                });
    76 +                var rows_height = jQuery(oTable.tBodies[0].rows).height();
    77 +                if ( rows_height == 0 ) { rows_height = 32; };
    78 +                var div_height = (rows_height * defaults.minToScroll) + 'px';
    79 +                jQuery('#'+div_id).css({
    80 +                    width: '100%', overflow: 'auto', overflowX: 'hidden', height: div_height
    81 +                });
    82 +                oTable.parentNode.scrollTop = scrollTop_;
    83 +                jQuery(oTable.tHead.rows).css('top', scrollTop_ + 'px');
    84 +                if ( createDiv ) { ieDivID++; };
    85 +                var div_width = jQuery('#'+div_id).width();
    86 +                var table_width = (div_width-18)*100/div_width;
    87 +                jQuery(oTable).css('width', table_width+'%');
    88 +            };
    89 +            return;
    90 +        };
    91 +
    92 +
    93         if(defaults.stripeRowsOnStartUp && defaults.stripingRowClass) {
    94             jQuery.tableSorter.utils.stripeRows(oTable,defaults);
    95         }
    96 @@ -132,11 +200,13 @@
    97 
    98                         jQuery(".sorter",oCell).click(function(e) {
    99                             sortOnColumn( jQuery(this).parent(), ((defaults.lockedSortDir) ? defaults.lockedSortDir : jQuery(this).parent()+                           enableScroll()
    100                             return false;
    101                         });
    102                     } else {
    103                         jQuery(oCell).click(function(e) {
    104                             sortOnColumn( jQuery(this), ((defaults.lockedSortDir) ? defaults.lockedSortDir : jQuery(this)[0].count++) % 2,
    105 +                           enableScroll()
    106                             return false;
    107                         });
    108                     }
    109 @@ -254,6 +324,7 @@
    110                     jQuery.event.trigger("sortStop",[COLUMN_INDEX]);
    111                 }
    112                 COLUMN_LAST_INDEX = COLUMN_INDEX;
    113 +               enableScroll();
    114             }
    115         }
    116     });
    117 }}}