Carga
Carga
This commit is contained in:
@@ -0,0 +1,215 @@
|
||||
/* *
|
||||
*
|
||||
* (c) 2012-2021 Highsoft AS
|
||||
*
|
||||
* License: www.highcharts.com/license
|
||||
*
|
||||
* !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
|
||||
*
|
||||
* Authors:
|
||||
* - Torstein Hønsi
|
||||
* - Gøran Slettemark
|
||||
* - Wojciech Chmiel
|
||||
* - Sophie Bremer
|
||||
*
|
||||
* */
|
||||
'use strict';
|
||||
var __extends = (this && this.__extends) || (function () {
|
||||
var extendStatics = function (d, b) {
|
||||
extendStatics = Object.setPrototypeOf ||
|
||||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
||||
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
||||
return extendStatics(d, b);
|
||||
};
|
||||
return function (d, b) {
|
||||
if (typeof b !== "function" && b !== null)
|
||||
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
||||
extendStatics(d, b);
|
||||
function __() { this.constructor = d; }
|
||||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||||
};
|
||||
})();
|
||||
var __assign = (this && this.__assign) || function () {
|
||||
__assign = Object.assign || function(t) {
|
||||
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
||||
s = arguments[i];
|
||||
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
||||
t[p] = s[p];
|
||||
}
|
||||
return t;
|
||||
};
|
||||
return __assign.apply(this, arguments);
|
||||
};
|
||||
import DataParser from './DataParser.js';
|
||||
import DataConverter from '../DataConverter.js';
|
||||
import U from '../../Core/Utilities.js';
|
||||
var merge = U.merge;
|
||||
/* *
|
||||
*
|
||||
* Class
|
||||
*
|
||||
* */
|
||||
/**
|
||||
* Handles parsing and transformation of an HTML table to a table.
|
||||
*
|
||||
* @private
|
||||
*/
|
||||
var HTMLTableParser = /** @class */ (function (_super) {
|
||||
__extends(HTMLTableParser, _super);
|
||||
/* *
|
||||
*
|
||||
* Constructor
|
||||
*
|
||||
* */
|
||||
/**
|
||||
* Constructs an instance of the HTML table parser.
|
||||
*
|
||||
* @param {HTMLTableParser.OptionsType} [options]
|
||||
* Options for the CSV parser.
|
||||
*
|
||||
* @param {HTMLElement | null} tableElement
|
||||
* The HTML table to parse
|
||||
*
|
||||
* @param {DataConverter} converter
|
||||
* Parser data converter.
|
||||
*/
|
||||
function HTMLTableParser(options, tableElement, converter) {
|
||||
if (tableElement === void 0) { tableElement = null; }
|
||||
var _this = _super.call(this) || this;
|
||||
_this.columns = [];
|
||||
_this.headers = [];
|
||||
_this.options = merge(HTMLTableParser.defaultOptions, options);
|
||||
_this.converter = converter || new DataConverter();
|
||||
if (tableElement) {
|
||||
_this.tableElement = tableElement;
|
||||
_this.tableElementID = tableElement.id;
|
||||
}
|
||||
else if (options && options.tableHTML) {
|
||||
_this.tableElement = options.tableHTML;
|
||||
_this.tableElementID = options.tableHTML.id;
|
||||
}
|
||||
return _this;
|
||||
}
|
||||
/* *
|
||||
*
|
||||
* Functions
|
||||
*
|
||||
* */
|
||||
/**
|
||||
* Initiates the parsing of the HTML table
|
||||
*
|
||||
* @param {HTMLTableParser.OptionsType}[options]
|
||||
* Options for the parser
|
||||
*
|
||||
* @param {DataEventEmitter.EventDetail} [eventDetail]
|
||||
* Custom information for pending events.
|
||||
*
|
||||
* @emits CSVDataParser#parse
|
||||
* @emits CSVDataParser#afterParse
|
||||
* @emits HTMLTableParser#parseError
|
||||
*/
|
||||
HTMLTableParser.prototype.parse = function (options, eventDetail) {
|
||||
var parser = this, converter = this.converter, columns = [], headers = [], parseOptions = merge(parser.options, options), endRow = parseOptions.endRow, startColumn = parseOptions.startColumn, endColumn = parseOptions.endColumn, firstRowAsNames = parseOptions.firstRowAsNames, tableHTML = parseOptions.tableHTML || this.tableElement;
|
||||
if (!(tableHTML instanceof HTMLElement)) {
|
||||
parser.emit({
|
||||
type: 'parseError',
|
||||
columns: columns,
|
||||
detail: eventDetail,
|
||||
headers: headers,
|
||||
error: 'Not a valid HTML Table'
|
||||
});
|
||||
return;
|
||||
}
|
||||
parser.tableElement = this.tableElement;
|
||||
parser.tableElementID = tableHTML.id;
|
||||
this.emit({
|
||||
type: 'parse',
|
||||
columns: parser.columns,
|
||||
detail: eventDetail,
|
||||
headers: parser.headers
|
||||
});
|
||||
var rows = tableHTML.getElementsByTagName('tr'), rowsCount = rows.length;
|
||||
var rowIndex = 0, item, startRow = parseOptions.startRow;
|
||||
// Insert headers from the first row
|
||||
if (firstRowAsNames && rowsCount) {
|
||||
var items = rows[0].children, itemsLength = items.length;
|
||||
for (var i = startColumn; i < itemsLength; i++) {
|
||||
if (i > endColumn) {
|
||||
break;
|
||||
}
|
||||
item = items[i];
|
||||
if (item.tagName === 'TD' ||
|
||||
item.tagName === 'TH') {
|
||||
headers.push(item.innerHTML);
|
||||
}
|
||||
}
|
||||
startRow++;
|
||||
}
|
||||
while (rowIndex < rowsCount) {
|
||||
if (rowIndex >= startRow && rowIndex <= endRow) {
|
||||
var columnsInRow = rows[rowIndex].children, columnsInRowLength = columnsInRow.length;
|
||||
var columnIndex = 0;
|
||||
while (columnIndex < columnsInRowLength) {
|
||||
var relativeColumnIndex = columnIndex - startColumn, row = columns[relativeColumnIndex];
|
||||
item = columnsInRow[columnIndex];
|
||||
if ((item.tagName === 'TD' ||
|
||||
item.tagName === 'TH') &&
|
||||
(columnIndex >= startColumn &&
|
||||
columnIndex <= endColumn)) {
|
||||
if (!columns[relativeColumnIndex]) {
|
||||
columns[relativeColumnIndex] = [];
|
||||
}
|
||||
var cellValue = converter.asGuessedType(item.innerHTML);
|
||||
if (cellValue instanceof Date) {
|
||||
cellValue = cellValue.getTime();
|
||||
}
|
||||
columns[relativeColumnIndex][rowIndex - startRow] = cellValue;
|
||||
// Loop over all previous indices and make sure
|
||||
// they are nulls, not undefined.
|
||||
var i = 1;
|
||||
while (rowIndex - startRow >= i &&
|
||||
row[rowIndex - startRow - i] === void 0) {
|
||||
row[rowIndex - startRow - i] = null;
|
||||
i++;
|
||||
}
|
||||
}
|
||||
columnIndex++;
|
||||
}
|
||||
}
|
||||
rowIndex++;
|
||||
}
|
||||
this.columns = columns;
|
||||
this.headers = headers;
|
||||
this.emit({
|
||||
type: 'afterParse',
|
||||
columns: columns,
|
||||
detail: eventDetail,
|
||||
headers: headers
|
||||
});
|
||||
};
|
||||
/**
|
||||
* Handles converting the parsed data to a table.
|
||||
*
|
||||
* @return {DataTable}
|
||||
* Table from the parsed HTML table
|
||||
*/
|
||||
HTMLTableParser.prototype.getTable = function () {
|
||||
return DataParser.getTableFromColumns(this.columns, this.headers);
|
||||
};
|
||||
/* *
|
||||
*
|
||||
* Static Properties
|
||||
*
|
||||
* */
|
||||
/**
|
||||
* Default options
|
||||
*/
|
||||
HTMLTableParser.defaultOptions = __assign({}, DataParser.defaultOptions);
|
||||
return HTMLTableParser;
|
||||
}(DataParser));
|
||||
/* *
|
||||
*
|
||||
* Export
|
||||
*
|
||||
* */
|
||||
export default HTMLTableParser;
|
||||
Reference in New Issue
Block a user