--- jquery.tablesorter.js.svn 2007-02-20 04:34:25.000000000 +0000 +++ jquery.tablesorter.js 2007-02-20 04:48:39.000000000 +0000 @@ -1,4 +1,4 @@ -/* +/* vim: sts=4:ts=4:sw=4:noet:fenc=utf-8 * * TableSorter - Client-side table sorting with ease! * @@ -33,8 +33,12 @@ bind: true, addHeaderLink: false, lockedSortDir: false, + minToScroll: false, dateFormat: 'mm/dd/yyyy' /** us default, uk dd/mm/yyyy */ }; + + var ieDivID = 0; + var enableScrollHasRun = false; return this.each(function(){ /** add a class name for identifiying the table for companion plugins */ @@ -58,6 +62,70 @@ /** table object holder.*/ var oTable = this; + function enableScroll() { + if ( defaults.minToScroll ) { + if ( jQuery.browser.mozilla ) { if (enableScrollHasRun) { return; }; mozScroll(); }; + if ( jQuery.browser.msie ) { ieScroll() }; + }; + enableScrollHasRun = true; + }; + + function mozScroll() { + for (i=0; i < oTable.tBodies.length; i++) { + finalSetup = false; + var rows = oTable.tBodies[i].rows; + if (rows.length > defaults.minToScroll) { + finalSetup = true; + var lastChilds = jQuery(oTable.tBodies[i]).find('td:last-child'); + jQuery(lastChilds).css('padding-right', '16px'); + var rows_height = jQuery(rows).height(); + if ( rows_height == 0 ) { rows_height = 32; }; + var tbody_height = (rows_height * defaults.minToScroll) + 'px'; + jQuery(oTable.tBodies[i]).css({ overflow: 'auto', overflowX: 'hidden', height: tbody_height }); + }; + if (finalSetup) { jQuery(oTable).css('border-collapse', 'separate'); }; + }; + }; + + function ieScroll () { + var rows = 0; + for ( i=0; i < oTable.tBodies.length; i++) { + rows += oTable.tBodies[i].rows.length; + }; + var tDivID = 'scrollWrapper-'; + var scrollTop_ = 0; + if (rows > defaults.minToScroll) { + var createDiv = true; + var div_id = tDivID + ieDivID; + if ( jQuery(oTable).parent().is('div') && jQuery(oTable).parent().attr('id') == tDivID + (ieDivID-1) ) { + createDiv = false; + scrollTop_ = oTable.parentNode.scrollTop + }; + if ( createDiv ) { jQuery(oTable).wrap('
'); }; + jQuery(oTable).css({ + margin: '0px', marginRight: '22px', top: '0px', left: '0px' + }); + jQuery(oTable.tHead).css('position', 'relative'); + jQuery(oTable.tHead.rows).css({ + top: '0px', bottom: '0px', position: 'relative' + }); + var rows_height = jQuery(oTable.tBodies[0].rows).height(); + if ( rows_height == 0 ) { rows_height = 32; }; + var div_height = (rows_height * defaults.minToScroll) + 'px'; + jQuery('#'+div_id).css({ + width: '100%', overflow: 'auto', overflowX: 'hidden', height: div_height + }); + oTable.parentNode.scrollTop = scrollTop_; + jQuery(oTable.tHead.rows).css('top', scrollTop_ + 'px'); + if ( createDiv ) { ieDivID++; }; + var div_width = jQuery('#'+div_id).width(); + var table_width = (div_width-18)*100/div_width; + jQuery(oTable).css('width', table_width+'%'); + }; + return; + }; + + if(defaults.stripeRowsOnStartUp && defaults.stripingRowClass) { jQuery.tableSorter.utils.stripeRows(oTable,defaults); } @@ -132,11 +200,13 @@ jQuery(".sorter",oCell).click(function(e) { sortOnColumn( jQuery(this).parent(), ((defaults.lockedSortDir) ? defaults.lockedSortDir : jQuery(this).parent()[0].count++) % 2, jQuery(this).parent()[0].index ); + enableScroll() return false; }); } else { jQuery(oCell).click(function(e) { sortOnColumn( jQuery(this), ((defaults.lockedSortDir) ? defaults.lockedSortDir : jQuery(this)[0].count++) % 2, jQuery(this)[0].index ); + enableScroll() return false; }); } @@ -254,6 +324,7 @@ jQuery.event.trigger("sortStop",[COLUMN_INDEX]); } COLUMN_LAST_INDEX = COLUMN_INDEX; + enableScroll(); } } });