highcharts
Version:
JavaScript charting framework
119 lines (118 loc) • 3.19 kB
JavaScript
/* *
*
* (c) 2009-2026 Highsoft AS
*
* A commercial license may be required depending on use.
* See www.highcharts.com/license
*
*
* Authors:
* - Torstein Hønsi
* - Gøran Slettemark
* - Wojciech Chmiel
* - Sophie Bremer
* - Kamil Kubik
*
* */
;
import DataConnector from './DataConnector.js';
import HTMLTableConverter from '../Converters/HTMLTableConverter.js';
import H from '../../Core/Globals.js';
import { merge } from '../../Shared/Utilities.js';
const { win } = H;
/* *
*
* Class
*
* */
/**
* Class that handles creating a data connector from an HTML table.
*
* @private
*/
class HTMLTableConnector extends DataConnector {
/* *
*
* Constructor
*
* */
/**
* Constructs an instance of HTMLTableConnector.
*
* @param {CombinedHTMLTableConnectorOptions} [options]
* Options for the connector and converter.
*/
constructor(options) {
const mergedOptions = merge(HTMLTableConnector.defaultOptions, options);
super(mergedOptions);
this.options = mergedOptions;
this.converter = new HTMLTableConverter(mergedOptions);
}
/**
* Initiates creating the dataconnector from the HTML table
*
* @param {DataEventDetail} [eventDetail]
* Custom information for pending events.
*
* @emits HTMLTableConnector#load
* @emits HTMLTableConnector#afterLoad
* @emits HTMLTableConnector#loadError
*/
async load(eventDetail) {
const connector = this;
const options = connector.options;
const converter = connector.converter;
const table = connector.getTable();
const htmlTable = options.htmlTable;
connector.emit({
type: 'load',
detail: eventDetail
});
let tableElement;
if (typeof htmlTable === 'string') {
connector.tableID = htmlTable;
tableElement = win.document.getElementById(htmlTable);
}
else {
tableElement = htmlTable;
connector.tableID = tableElement.id;
}
connector.tableElement = tableElement || void 0;
if (!connector.tableElement) {
const error = 'HTML table not provided, or element with ID not found';
connector.emit({
type: 'loadError',
detail: eventDetail,
error
});
return Promise.reject(new Error(error));
}
const columns = converter.parse(merge({ tableElement: connector.tableElement }, options), eventDetail);
// If already loaded, clear the current rows
table.deleteColumns();
table.setColumns(columns);
await connector.applyTableModifiers();
connector.emit({
type: 'afterLoad',
detail: eventDetail
});
return connector;
}
}
/* *
*
* Static Properties
*
* */
HTMLTableConnector.defaultOptions = {
id: 'HTML-table-connector',
type: 'HTMLTable',
htmlTable: ''
};
DataConnector.registerType('HTMLTable', HTMLTableConnector);
/* *
*
* Default Export
*
* */
export default HTMLTableConnector;