/* ** This file is part of ChartViz. ** ** ChartViz is free software: you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** ** ChartViz is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with ChartViz. If not, see . ** ** Copyright (C) 2016 ChartViz - Donato Pirozzi (donatopirozzi@gmail.com) ** Distributed under the GNU GPL v3. For full terms see the file LICENSE. ** License: http://www.gnu.org/licenses/gpl.html GPL version 3 or higher **/ //. Find a batter way to include dependent scripts. //document.write(''); //document.write(''); function ChartProcessor() { } ChartProcessor.TYPES = { TEXT : { value: 0, name: "TEXT" }, NUMBER : { value: 1, name: "NUMBER" }, LATITUDE : { value: 2, name: "LATITUDE" }, LONGITUDE : { value: 2, name: "LONGITUDE" }, BOOL : { value: 3, name: "BOOL"}, CONST : { value: 4, name: "BOOL" }, CATEGORY : { value: 5, name: "CATEGORY" } }; ChartProcessor.prototype = (function () { var _fields = []; var _numOfRows = 0; var _arrUtil = new ArrayUtils(); var _dataTypesUtils = new DataTypesUtils(); /*** * Make an asynchronous call to load the content. * @param theUrl * @param callback */ var httpGetAsync = function(theUrl, callbackOnFinish) { var xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function() { if (xhttp.readyState == 4 && xhttp.status == 200) _processDataset(xhttp.responseText, callbackOnFinish); } xhttp.open("GET", theUrl, true); // true for asynchronous xhttp.send(null); };//EndFunction. var _processDataset = function (datasetContent, callbackOnFinish) { //Split the dataset rows. var rows = datasetContent.split("\n"); //The assumption is that the first row is the header. _processHeader(rows[0]); //Loop through the dataset's rows. var i; for (i=1; i lastval; }); field.type = max.key; field.typeConfidence = field._inferredTypes[max.key] / _numOfRows; //TODO: improve this piece of code. //LAT/LNG. var fieldName = field.name.toLowerCase(); var isLatType = (field.type === ChartProcessor.TYPES.LATITUDE.name); var fieldNameContainsLat = fieldName.indexOf('lat') >= 0; var fieldNameContainsLon = fieldName.indexOf('ng') >= 0; //It could be 'lng'. if (isLatType == true && fieldNameContainsLat == false && fieldNameContainsLon == true) { field.type = ChartProcessor.TYPES.LONGITUDE.name; } //BOOLEAN. var numOfValues = Object.keys(field._inferredValues).length; if (field.type === ChartProcessor.TYPES.TEXT.name) { if (numOfValues == 1) field.type = ChartProcessor.TYPES.CONST.name; else if (numOfValues == 2) field.type = ChartProcessor.TYPES.BOOL.name; else if (numOfValues < _numOfRows * 0.10) field.type = ChartProcessor.TYPES.CATEGORY.name; } console.log("ccc"); }); //Call the user function. callbackOnFinish(_fields); };//EndFunction. var _processHeader = function(header) { var fields = _processSplitRow(header); fields.map( function(item) { _fields.push({ name: item, _inferredTypes: [], _inferredValues: [] }); }); };//EndFunction. var _processRow = function(row) { //Avoid empty rows if (typeof row === 'undefined') return; row = row.trim(); if (row.length == 0) return; //Process the ROW. var values = _processSplitRow(row); var i; for (i=0; i