src/HTMLTableWrapper.js
/**
 * 
 * @constructor 
 * @param {HTMLTableElement} table Table element this `HTMLTableWrapper` is to process.
 * @throws {ReferenceError} If `table` is not defined, or does not have any table body sections.
 * @classdesc
 *
 * Wrapper for `HTMLTableElement`s that provides a limited set of extended functionality, most notably the capibility of {@link HTMLTableWrapper#sort sorting} and 
 * {@link HTMLTableWrapper#filter filtering} the first table body section.
 *
 * As the description implies, the given `table` must define at least one table body section, and that section should contain the table's primary data set
 * (any subsequent table body sections are ignored). It is also assumed all the cells for each column are aligned (i.e. they all define the same `colSpan`;
 * any misaligned rows will likely result in `RangeError`s). 
 *
 */
@constructor
@param {HTMLTableElement} table Table element this `HTMLTableWrapper` is to process.
@throws {ReferenceError} If `table` is not defined, or does not have any table body sections.
@classdesc

Wrapper for `HTMLTableElement`s that provides a limited set of extended functionality, most notably the capibility of  HTMLTableWrapper#sort sorting and
HTMLTableWrapper#filter filtering the first table body section.

As the description implies, the given `table` must define at least one table body section, and that section should contain the table's primary data set
(any subsequent table body sections are ignored). It is also assumed all the cells for each column are aligned .
@constructor @param { HTMLTableElement } table Table element this ` HTMLTableWrapper ` is to process . @throws { ReferenceError } If ` table ` is not defined or does not have any table body sections . @classdesc Wrapper for ` HTMLTableElement ` s that provides a limited set of extended functionality most notably the capibility of HTMLTableWrapper#sort sorting and HTMLTableWrapper#filter filtering the first table body section . As the description implies the given ` table ` must define at least one table body section and that section should contain the table ' s primary data set ( any subsequent table body sections are ignored ) . It is also assumed all the cells for each column are aligned .
function HTMLTableWrapper(table) {
    'use strict';
    if (!table || !table.tBodies || !table.tBodies.length) {
        throw new ReferenceError('Table must be an defined and have a body.');
    }
    this.table = table;
    this.initialOrder = HTMLTableWrapper.copy(table.tBodies[0].rows);
}
function HTMLTableWrapper ( table ) { 'use strict' ; if ( ! table || ! table . tBodies || ! table . tBodies . length ) { throw new ReferenceError ( 'Table must be an defined and have a body.' ) ; } this . table = table ; this . initialOrder = HTMLTableWrapper . copy ( table . tBodies [ 0 ] . rows ) ; }
@constructor
 @param {HTMLTableElement} table Table element this `HTMLTableWrapper` is to process.
@constructor @param { HTMLTableElement } table Table element this ` HTMLTableWrapper ` is to process .
/**
     * Backing `HTMLTableElement`.
     *
     * @private
     * @type {HTMLTableElement}
     */ /**
     * Cache of the initial state of the table's rows. Used when sort parameters are {@link HTMLTableWrapper#clearSort cleared}.
     *
     * @private
     * @type {Array}
     */