Carga
Carga
This commit is contained in:
@@ -0,0 +1,224 @@
|
||||
/* *
|
||||
*
|
||||
* (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, uniqueKey = U.uniqueKey;
|
||||
/* *
|
||||
*
|
||||
* Class
|
||||
*
|
||||
* */
|
||||
/**
|
||||
* Handles parsing and transformation of an Google Sheets to a table.
|
||||
*
|
||||
* @private
|
||||
*/
|
||||
var GoogleSheetsParser = /** @class */ (function (_super) {
|
||||
__extends(GoogleSheetsParser, _super);
|
||||
/* *
|
||||
*
|
||||
* Constructor
|
||||
*
|
||||
* */
|
||||
/**
|
||||
* Constructs an instance of the GoogleSheetsParser.
|
||||
*
|
||||
* @param {GoogleSheetsParser.OptionsType} [options]
|
||||
* Options for the Google Sheets parser.
|
||||
*
|
||||
* @param {DataConverter} converter
|
||||
* Parser data converter.
|
||||
*/
|
||||
function GoogleSheetsParser(options, converter) {
|
||||
var _this = _super.call(this) || this;
|
||||
_this.columns = [];
|
||||
_this.headers = [];
|
||||
_this.options = merge(GoogleSheetsParser.defaultOptions, options);
|
||||
_this.converter = converter || new DataConverter();
|
||||
return _this;
|
||||
}
|
||||
/* *
|
||||
*
|
||||
* Functions
|
||||
*
|
||||
* */
|
||||
GoogleSheetsParser.prototype.getSheetColumns = function (json) {
|
||||
var parser = this, _a = parser.options, startColumn = _a.startColumn, endColumn = _a.endColumn, startRow = _a.startRow, endRow = _a.endRow, columns = [], cells = json.feed.entry, cellCount = (cells || []).length;
|
||||
var cell, colCount = 0, rowCount = 0, val, gr, gc, cellInner, i, j;
|
||||
// First, find the total number of columns and rows that
|
||||
// are actually filled with data
|
||||
for (i = 0; i < cellCount; i++) {
|
||||
cell = cells[i];
|
||||
colCount = Math.max(colCount, cell.gs$cell.col);
|
||||
rowCount = Math.max(rowCount, cell.gs$cell.row);
|
||||
}
|
||||
// Set up arrays containing the column data
|
||||
for (i = 0; i < colCount; i++) {
|
||||
if (i >= startColumn && i <= endColumn) {
|
||||
// Create new columns with the length of either
|
||||
// end-start or rowCount
|
||||
columns[i - startColumn] = [];
|
||||
}
|
||||
}
|
||||
// Loop over the cells and assign the value to the right
|
||||
// place in the column arrays
|
||||
for (i = 0; i < cellCount; i++) {
|
||||
cell = cells[i];
|
||||
gr = cell.gs$cell.row - 1; // rows start at 1
|
||||
gc = cell.gs$cell.col - 1; // columns start at 1
|
||||
// If both row and col falls inside start and end set the
|
||||
// transposed cell value in the newly created columns
|
||||
if (gc >= startColumn && gc <= endColumn &&
|
||||
gr >= startRow && gr <= endRow) {
|
||||
cellInner = cell.gs$cell || cell.content;
|
||||
val = null;
|
||||
if (cellInner.numericValue) {
|
||||
if (cellInner.$t.indexOf('/') >= 0 || (cellInner.$t.indexOf('-') >= 0 &&
|
||||
cellInner.$t.indexOf('.') === -1)) {
|
||||
// This is a date - for future reference.
|
||||
val = cellInner.$t;
|
||||
}
|
||||
else if (cellInner.$t.indexOf('%') > 0) {
|
||||
// Percentage
|
||||
val = parseFloat(cellInner.numericValue) * 100;
|
||||
}
|
||||
else {
|
||||
val = parseFloat(cellInner.numericValue);
|
||||
}
|
||||
}
|
||||
else if (cellInner.$t && cellInner.$t.length) {
|
||||
val = cellInner.$t;
|
||||
}
|
||||
columns[gc - startColumn][gr - startRow] = val;
|
||||
}
|
||||
}
|
||||
// Insert null for empty spreadsheet cells (#5298)
|
||||
for (i = 0; i < colCount; i++) {
|
||||
var column = columns[i];
|
||||
// TODO: should this check be necessary?
|
||||
if (column.length) {
|
||||
for (i = 0; i < column.length; i++) {
|
||||
if (typeof column[i] === 'undefined') {
|
||||
column[i] = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return columns;
|
||||
};
|
||||
/**
|
||||
* Initiates the parsing of the Google Sheet
|
||||
*
|
||||
* @param {GoogleSheetsParser.OptionsType}[options]
|
||||
* Options for the parser
|
||||
*
|
||||
* @param {DataEventEmitter.EventDetail} [eventDetail]
|
||||
* Custom information for pending events.
|
||||
*
|
||||
* @emits GoogleSheetsParser#parse
|
||||
* @emits GoogleSheetsParser#afterParse
|
||||
*/
|
||||
GoogleSheetsParser.prototype.parse = function (jsonProp, eventDetail) {
|
||||
var parser = this, parserOptions = merge(true, parser.options, { json: jsonProp }), converter = parser.converter, json = parserOptions.json, cells = json.feed.entry, headers = parser.headers;
|
||||
var column;
|
||||
if (!cells || cells.length === 0) {
|
||||
return false;
|
||||
}
|
||||
parser.headers = [];
|
||||
parser.columns = [];
|
||||
parser.emit({
|
||||
type: 'parse',
|
||||
columns: parser.columns,
|
||||
detail: eventDetail,
|
||||
headers: parser.headers
|
||||
});
|
||||
parser.columns = parser.getSheetColumns(json);
|
||||
for (var i = 0, iEnd = parser.columns.length; i < iEnd; i++) {
|
||||
column = parser.columns[i];
|
||||
parser.headers[i] = parserOptions.firstRowAsNames ?
|
||||
column.splice(0, 1).toString() :
|
||||
uniqueKey();
|
||||
for (var j = 0, jEnd = column.length; j < jEnd; ++j) {
|
||||
if (column[j] && typeof column[j] === 'string') {
|
||||
var cellValue = converter.asGuessedType(column[j]);
|
||||
if (cellValue instanceof Date) {
|
||||
cellValue = cellValue.getTime();
|
||||
}
|
||||
parser.columns[i][j] = cellValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
parser.emit({
|
||||
type: 'afterParse',
|
||||
columns: parser.columns,
|
||||
detail: eventDetail,
|
||||
headers: parser.headers
|
||||
});
|
||||
};
|
||||
/**
|
||||
* Handles converting the parsed data to a table.
|
||||
*
|
||||
* @return {DataTable}
|
||||
* Table from the parsed Google Sheet
|
||||
*/
|
||||
GoogleSheetsParser.prototype.getTable = function () {
|
||||
return DataParser.getTableFromColumns(this.columns, this.headers);
|
||||
};
|
||||
/* *
|
||||
*
|
||||
* Static Properties
|
||||
*
|
||||
* */
|
||||
/**
|
||||
* Default options
|
||||
*/
|
||||
GoogleSheetsParser.defaultOptions = __assign(__assign({}, DataParser.defaultOptions), { json: {} });
|
||||
return GoogleSheetsParser;
|
||||
}(DataParser));
|
||||
/* *
|
||||
*
|
||||
* Export
|
||||
*
|
||||
* */
|
||||
export default GoogleSheetsParser;
|
||||
Reference in New Issue
Block a user