docs: function Table(options, data) {
          options = options || {};
  
          // Updates indexes on the fly.
          if (!options.update) options.update = {};
  
          if ('undefined' === typeof options.update.indexes) {
              options.update.indexes = true;
          }
  
          NDDB.call(this, options, data);
  
  //         // ### Table.row
  //         // NDDB hash containing elements grouped by row index
  //         // @see NDDB.hash
  //         if (!this.row) {
  //             this.hash('row', function(c) {
  //                 return c.x;
  //             });
  //         }
  //
  //         // ### Table.col
  //         // NDDB hash containing elements grouped by column index
  //         // @see NDDB.hash
  //         if (!this.col) {
  //             this.hash('col', function(c) {
  //                 return c.y;
  //             });
  //         }
  
          // ### Table.rowcol
          // NDDB index to access elements with row.col notation
          // @see NDDB.hash
          if (!this.rowcol) {
              this.index('rowcol', function(c) {
                  return c.x + '.' + c.y;
              });
          }
  
          /**
           * ### Table.pointers
           *
           * References to last inserted cell coordinates
           */
          this.pointers = {
              x: options.pointerX || null,
              y: options.pointerY || null
          };
  
          /**
           * ### Table.header
           *
           * Array containing the header elements of the table
           */
          this.header = [];
  
          /**
           * ### Table.footer
           *
           * Array containing the footer elements of the table
           */
          this.footer = [];
  
          /**
           * ### Table.left
           *
           * Array containing elements to keep on the left border of the table
           */
          this.left = [];
  
          /**
           * ### Table.table
           *
           * Reference to the HTMLElement Table
           */
          this.table = options.table || document.createElement('table');
  
          if ('string' === typeof options.id) {
              this.table.id = options.id;
          }
          else if (options.id) {
              throw new TypeError('Table constructor: options.id must be ' +
                                  'string or undefined.');
          }
  
          if ('string' === typeof options.className) {
              this.table.className = options.className;
          }
          else if (J.isArray(options.className)) {
              this.table.className = options.className.join(' ');
          }
          else if (options.className) {
              throw new TypeError('Table constructor: options.className must ' +
                                  'be string, array, or undefined.');
          }
  
          /**
           * ### Table.missingClassName
           *
           * Class name for "missing" cells
           *
           * "Missing" cells are cells that are added automatically to complete
           * the table because one or more cells have been added with higher
           * row and column indexes.
           */
          this.missingClassName = 'missing';
  
          if ('string' === typeof options.missingClassName) {
              this.missingClassName = options.missingClassName;
          }
          else if (J.isArray(options.missingClassName)) {
              this.missingClassName = options.missingClassName.join(' ');
          }
          else if (options.missingClassName) {
              throw new TypeError('Table constructor: options.className must ' +
                                  'be string, array, or undefined.');
          }
  
          /**
           * ### Table.autoParse
           *
           * If TRUE, whenever a new cell is added the table is updated.
           * Default: FALSE
           */
          this.autoParse = 'undefined' !== typeof options.autoParse ?
              options.autoParse : false;
  
          /**
           * ### Table.trs
           *
           * List of TR elements indexed by their order in the parsed table
           */
          this.trs = {};
  
          /**
           * ### Table.trCb
           *
           * Callback function applied to each TR HTML element
           *
           * Callback receives the HTML element, and the row index, or
           * 'thead' and 'tfoot' for header and footer.
           */
          if ('function' === typeof options.tr) {
              this.trCb = options.tr;
          }
          else if ('undefined' === typeof options.tr) {
              this.trCb = null;
          }
          else {
              throw new TypeError('Table constructor: options.tr must be ' +
                                  'function or undefined.');
          }
  
          // Init renderer.
          this.initRenderer(options.render);
      }