/*! Widget: stickyHeaders - updated 10/31/2015 (v2.24.0) */ /* * Requires tablesorter v2.8+ and jQuery 1.4.3+ * by Rob Garrison */ !function(a,b){"use strict";var c=a.tablesorter||{};a.extend(c.css,{sticky:"tablesorter-stickyHeader",// stickyHeader stickyVis:"tablesorter-sticky-visible",stickyHide:"tablesorter-sticky-hidden",stickyWrap:"tablesorter-sticky-wrapper"}), // Add a resize event to table headers c.addHeaderResizeEvent=function(b,c,d){// make sure we're using a dom element if(b=a(b)[0],b.config){var e={timer:250},f=a.extend({},e,d),g=b.config,h=g.widgetOptions,i=function(a){var b,c,d,e,f,i,j=g.$headers.length;for(h.resize_flag=!0,c=[],b=0;j>b;b++)d=g.$headers.eq(b),e=d.data("savedSizes")||[0,0],f=d[0].offsetWidth,i=d[0].offsetHeight,(f!==e[0]||i!==e[1])&&(d.data("savedSizes",[f,i]),c.push(d[0]));c.length&&a!==!1&&g.$table.trigger("resize",[c]),h.resize_flag=!1};return i(!1),clearInterval(h.resize_timer),c?(h.resize_flag=!1,!1):void(h.resize_timer=setInterval(function(){h.resize_flag||i()},f.timer))}}, // Sticky headers based on this awesome article: // http://css-tricks.com/13465-persistent-headers/ // and https://github.com/jmosbech/StickyTableHeaders by Jonas Mosbech // ************************** c.addWidget({id:"stickyHeaders",priority:60,// sticky widget must be initialized after the filter widget! options:{stickyHeaders:"",// extra class name added to the sticky header row stickyHeaders_attachTo:null,// jQuery selector or object to attach sticky header to stickyHeaders_xScroll:null,// jQuery selector or object to monitor horizontal scroll position (defaults: xScroll > attachTo > window) stickyHeaders_yScroll:null,// jQuery selector or object to monitor vertical scroll position (defaults: yScroll > attachTo > window) stickyHeaders_offset:0,// number or jquery selector targeting the position:fixed element stickyHeaders_filteredToTop:!0,// scroll table top into view after filtering stickyHeaders_cloneId:"-sticky",// added to table ID, if it exists stickyHeaders_addResizeEvent:!0,// trigger 'resize' event on headers stickyHeaders_includeCaption:!0,// if false and a caption exist, it won't be included in the sticky header stickyHeaders_zIndex:2},format:function(d,e,f){ // filter widget doesn't initialize on an empty table. Fixes #449 if(!(e.$table.hasClass("hasStickyHeaders")||a.inArray("filter",e.widgets)>=0&&!e.$table.hasClass("hasFilters"))){var g,h,i,j,k=e.$table, // add position: relative to attach element, hopefully it won't cause trouble. l=a(f.stickyHeaders_attachTo),m=e.namespace+"stickyheaders ", // element to watch for the scroll event n=a(f.stickyHeaders_yScroll||f.stickyHeaders_attachTo||b),o=a(f.stickyHeaders_xScroll||f.stickyHeaders_attachTo||b),p=k.children("thead:first"),q=p.children("tr").not(".sticky-false").children(),r=k.children("tfoot"),s=isNaN(f.stickyHeaders_offset)?a(f.stickyHeaders_offset):"",t=s.length?s.height()||0:parseInt(f.stickyHeaders_offset,10)||0, // is this table nested? If so, find parent sticky header wrapper (div, not table) u=k.parent().closest("."+c.css.table).hasClass("hasStickyHeaders")?k.parent().closest("table.tablesorter")[0].config.widgetOptions.$sticky.parent():[],v=u.length?u.height():0, // clone table, then wrap to make sticky header w=f.$sticky=k.clone().addClass("containsStickyHeaders "+c.css.sticky+" "+f.stickyHeaders+" "+e.namespace.slice(1)+"_extra_table").wrap('