template/html/jquery-tablesorter.js
function( c, init ) {
         var parsed, totalRows, $tbody, $curTbody, rowIndex, tbodyIndex, appendTime,
          table = c.table,
          wo = c.widgetOptions,
          $tbodies = c.$tbodies,
          rows = [],
          cache = c.cache;
         // empty table - fixes #206/#346
         if ( ts.isEmptyObject( cache ) ) {
            // run pager appender in case the table was just emptied
            return c.appender ? c.appender( table, rows ) :
             table.isUpdating ? c.$table.triggerHandler( 'updateComplete', table ) : ''; // Fixes #532
         }
         if ( c.debug ) {
            appendTime = new Date();
         }
         for ( tbodyIndex = 0; tbodyIndex < $tbodies.length; tbodyIndex++ ) {
            $tbody = $tbodies.eq( tbodyIndex );
            if ( $tbody.length ) {
               // detach tbody for manipulation
               $curTbody = ts.processTbody( table, $tbody, true );
               parsed = cache[ tbodyIndex ].normalized;
               totalRows = parsed.length;
               for ( rowIndex = 0; rowIndex < totalRows; rowIndex++ ) {
                  rows[rows.length] = parsed[ rowIndex ][ c.columns ].$row;
                  // removeRows used by the pager plugin; don't render if using ajax - fixes #411
                  if ( !c.appender || ( c.pager && ( !c.pager.removeRows || !wo.pager_removeRows ) && !c.pager.ajax ) ) {
                     $curTbody.append( parsed[ rowIndex ][ c.columns ].$row );
                  }
               }
               // restore tbody
               ts.processTbody( table, $curTbody, false );
            }
         }
         if ( c.appender ) {
            c.appender( table, rows );
         }
         if ( c.debug ) {
            console.log( 'Rebuilt table' + ts.benchmark( appendTime ) );
         }
         // apply table widgets; but not before ajax completes
         if ( !init && !c.appender ) {
            ts.applyWidget( table );
         }
         if ( table.isUpdating ) {
            c.$table.triggerHandler( 'updateComplete', table );
         }
      }
function( c, init ) {
         var parsed, totalRows, $tbody, $curTbody, rowIndex, tbodyIndex, appendTime,
          table = c.table,
          wo = c.widgetOptions,
          $tbodies = c.$tbodies,
          rows = [],
          cache = c.cache;
         // empty table - fixes #206/#346
         if ( ts.isEmptyObject( cache ) ) {
            // run pager appender in case the table was just emptied
            return c.appender ? c.appender( table, rows ) :
             table.isUpdating ? c.$table.triggerHandler( 'updateComplete', table ) : ''; // Fixes #532
         }
         if ( c.debug ) {
            appendTime = new Date();
         }
         for ( tbodyIndex = 0; tbodyIndex < $tbodies.length; tbodyIndex++ ) {
            $tbody = $tbodies.eq( tbodyIndex );
            if ( $tbody.length ) {
               // detach tbody for manipulation
               $curTbody = ts.processTbody( table, $tbody, true );
               parsed = cache[ tbodyIndex ].normalized;
               totalRows = parsed.length;
               for ( rowIndex = 0; rowIndex < totalRows; rowIndex++ ) {
                  rows[rows.length] = parsed[ rowIndex ][ c.columns ].$row;
                  // removeRows used by the pager plugin; don't render if using ajax - fixes #411
                  if ( !c.appender || ( c.pager && ( !c.pager.removeRows || !wo.pager_removeRows ) && !c.pager.ajax ) ) {
                     $curTbody.append( parsed[ rowIndex ][ c.columns ].$row );
                  }
               }
               // restore tbody
               ts.processTbody( table, $curTbody, false );
            }
         }
         if ( c.appender ) {
            c.appender( table, rows );
         }
         if ( c.debug ) {
            console.log( 'Rebuilt table' + ts.benchmark( appendTime ) );
         }
         // apply table widgets; but not before ajax completes
         if ( !init && !c.appender ) {
            ts.applyWidget( table );
         }
         if ( table.isUpdating ) {
            c.$table.triggerHandler( 'updateComplete', table );
         }
      }
init flag (true) used by pager plugin to prevent widget application renamed from appendToTable