UNPKG

highcharts

Version:
119 lines (118 loc) 3.19 kB
/* * * * (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 * * */ 'use strict'; 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;