mirror of
https://github.com/Mottie/tablesorter.git
synced 2024-11-15 23:54:22 +00:00
34 lines
5.9 KiB
JavaScript
34 lines
5.9 KiB
JavaScript
/*!
|
|
Copyright (C) 2011 T. Connell & Associates, Inc.
|
|
|
|
Dual-licensed under the MIT and GPL licenses
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
|
|
FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
|
|
Resizable scroller widget for the jQuery tablesorter plugin
|
|
|
|
Version 2.0 - modified by Rob Garrison 4/12/2013; updated 3/5/2015 (v2.21.0)
|
|
Requires jQuery v1.7+
|
|
Requires the tablesorter plugin, v2.8+, available at http://mottie.github.com/tablesorter/docs/
|
|
|
|
Usage:
|
|
|
|
$(function() {
|
|
|
|
$('table.tablesorter').tablesorter({
|
|
widgets: ['zebra', 'scroller'],
|
|
widgetOptions : {
|
|
scroller_height : 300, // height of scroll window
|
|
scroller_barWidth : 18, // scroll bar width
|
|
scroller_jumpToHeader : true, // header snap to browser top when scrolling the tbody
|
|
}
|
|
});
|
|
|
|
});
|
|
|
|
Website: www.tconnell.com
|
|
*/
|
|
!function(a,b){"use strict";a.fn.hasScrollBar=function(){return this.get(0).scrollHeight>this.height()};var c=a.tablesorter;c.window_resize=function(){this.resize_timer&&clearTimeout(this.resize_timer),this.resize_timer=setTimeout(function(){a(this).trigger("resizeEnd")},250)},a(function(){var b="<style>.tablesorter-scrollbar-measure { width: 100px; height: 100px; overflow: scroll; position: absolute; top: -9999px; } .tablesorter-scroller-reset { width: auto !important; } .tablesorter-scroller { text-align: left; overflow: hidden; }.tablesorter-scroller-header { overflow: hidden; }.tablesorter-scroller-header table.tablesorter { margin-bottom: 0; }.tablesorter-scroller-footer table.tablesorter thead { visibility: hidden, height: 0; overflow: hidden; }.tablesorter-scroller-table { overflow-y: scroll; }.tablesorter-scroller-table table.tablesorter { margin-top: 0; margin-bottom: 0; overflow: scroll; } .tablesorter-scroller-table .tablesorter-filter-row,.tablesorter-scroller-footer .tablesorter-filter-row,.tablesorter-scroller-table tfoot { display: none; }.tablesorter-scroller-table table.tablesorter thead tr.tablesorter-headerRow *,.tablesorter-scroller-footer table.tablesorter thead * {line-height:0;height:0;border:none;background-image:none;padding-top:0;padding-bottom:0;margin-top:0;margin-bottom:0;overflow:hidden;}</style>";a(b).appendTo("body")}),c.addWidget({id:"scroller",priority:60,options:{scroller_height:300,scroller_jumpToHeader:!0,scroller_upAfterSort:!0,scroller_barWidth:null},init:function(d,e,f){var g=a(b),h=f.namespace+"tsscroller";g.bind("resize"+h,c.window_resize).bind("resizeEnd"+h,function(){a.isFunction(d.config.widgetOptions.scroller_resizeWidth)&&(g.unbind("resize"+h,c.window_resize),d.config.widgetOptions.scroller_resizeWidth(),g.bind("resize"+h,c.window_resize))})},format:function(d,e,f){var g,h,i,j,k,l,m,n,o=[],p=e.namespace.slice(1)+"tsscroller",q=a(b),r=e.$table;e.isScrolling||(e.widthFixed=!0,g=f.scroller_height||300,h=r.children("tbody").height(),0!==h&&g>h&&(g=h+10),i=a('<table class="'+r.attr("class")+'" cellpadding=0 cellspacing=0>'+r.children("thead")[0].outerHTML+"</table>"),j=r.children("tfoot"),j.length&&(o=a('<table class="'+r.attr("class")+'" cellpadding=0 cellspacing=0 style="margin-top:0"></table>').append(j.clone(!0)).append(r.children("thead")[0].outerHTML).wrap('<div class="tablesorter-scroller-footer"/>'),n=o.children("tfoot").eq(0).children("tr").children()),e.$extraTables=e.$extraTables&&e.$extraTables.length?e.$extraTables.add(i).add(o):i.add(o),r.wrap('<div id="'+p+'" class="tablesorter-scroller" />').before(i).find(".tablesorter-filter-row").addClass("hideme"),o.length&&r.after(o.parent()),m=i.wrap('<div class="tablesorter-scroller-header" />').find("."+c.css.header),r.wrap('<div class="tablesorter-scroller-table" style="max-height:'+g+'px;" />'),c.bindEvents(d,m),r.hasClass("hasFilters")&&c.filter.bindSearch(r,i.find("."+c.css.filter)),l=function(){var b=a('<div class="tablesorter-scrollbar-measure">').appendTo("body"),c=b[0],d=c.offsetWidth-c.clientWidth;return b.remove(),d},k=function(){var b,c,e,g,h=a('div.tablesorter-scroller[id != "'+p+'"]').hide();r.children("thead").show(),r.add(i).add(o).children("colgroup").remove(),r.addClass("tablesorter-scroller-reset").children("thead").find(".tablesorter-header-inner").addClass("tablesorter-scroller-reset").end().find(".tablesorter-filter-row").show(),b=r.parent(),b.addClass("tablesorter-scroller-reset"),b.parent().trigger("resize"),c=parseInt(r.css("border-left-width"),10)+parseInt(r.css("border-right-width"),10),g=(f.scroller_barWidth||l())+c,b.width(b.parent().innerWidth()-(b.parent().hasScrollBar()?g:0)),g=b.innerWidth()-(b.hasScrollBar()?g:0),r.add(i).add(i.parent()).add(o).width(g),r.closest(".tablesorter-scroller").find(".tablesorter-scroller-reset").removeClass("tablesorter-scroller-reset"),a.tablesorter.fixColumnWidth(d),e=r.children("colgroup"),e.length&&(c=e[0].outerHTML,i.prepend(c),o.length&&o.prepend(c)),r.children("thead").find(".tablesorter-filter-row").hide(),h.show()},f.scroller_resizeWidth=k,k(),r.find("thead").css("visibility","hidden"),e.isScrolling=!0,h=r.parent().parent().height(),r.parent().bind("scroll",function(){if(f.scroller_jumpToHeader){var b=q.scrollTop()-i.offset().top;0!==a(this).scrollTop()&&h>b&&b>0&&q.scrollTop(i.offset().top)}i.parent().scrollLeft(a(this).scrollLeft())})),f.scroller_upAfterSort&&r.parent().animate({scrollTop:0},"fast")},remove:function(c,d){var e=d.$table,f=d.namespace+"tsscroller";e.closest(".tablesorter-scroller").find(".tablesorter-scroller-header").remove(),e.closest(".tablesorter-scroller").find(".tablesorter-scroller-footer").remove(),e.unwrap().find(".tablesorter-filter-row").removeClass("hideme").end().find("thead").show().css("visibility","visible"),a(b).unbind("resize"+f+" resizeEnd"+f),d.isScrolling=!1}})}(jQuery,window); |