data.min.js 4.2 KB

1
  1. (function(c){var b=c.each,a=function(d,e){this.init(d,e)};c.extend(a.prototype,{init:function(d,e){this.options=d;this.chartOptions=e;this.columns=d.columns||this.rowsToColumns(d.rows)||[];this.columns.length?this.dataFound():(this.parseCSV(),this.parseTable(),this.parseGoogleSpreadsheet())},getColumnDistribution:function(){var d=this.chartOptions,e=d&&d.chart&&d.chart.type,f=[];b(d&&d.series||[],function(g){f.push((c.seriesTypes[g.type||e||"line"].prototype.pointArrayMap||[0]).length)});this.valueCount={global:(c.seriesTypes[e||"line"].prototype.pointArrayMap||[0]).length,individual:f}},dataFound:function(){this.parseTypes();this.findHeaderRow();this.parsed();this.complete()},parseCSV:function(){var q=this,r=this.options,p=r.csv,o=this.columns,m=r.startRow||0,k=r.endRow||Number.MAX_VALUE,h=r.startColumn||0,n=r.endColumn||Number.MAX_VALUE,l=0;p&&(p=p.replace(/\r\n/g,"\n").replace(/\r/g,"\n").split(r.lineDelimiter||"\n"),b(p,function(g,d){var f=q.trim(g),e=f.indexOf("#")===0;d>=m&&d<=k&&!e&&f!==""&&(f=g.split(r.itemDelimiter||","),b(f,function(i,j){j>=h&&j<=n&&(o[j-h]||(o[j-h]=[]),o[j-h][l]=i)}),l+=1)}),this.dataFound())},parseTable:function(){var g=this.options,h=g.table,p=this.columns,o=g.startRow||0,m=g.endRow||Number.MAX_VALUE,l=g.startColumn||0,k=g.endColumn||Number.MAX_VALUE,n;h&&(typeof h==="string"&&(h=document.getElementById(h)),b(h.getElementsByTagName("tr"),function(e,d){n=0;d>=o&&d<=m&&b(e.childNodes,function(f){if((f.tagName==="TD"||f.tagName==="TH")&&n>=l&&n<=k){p[n]||(p[n]=[]),p[n][d-o]=f.innerHTML,n+=1}})}),this.dataFound())},parseGoogleSpreadsheet:function(){var s=this,t=this.options,r=t.googleSpreadsheetKey,q=this.columns,o=t.startRow||0,l=t.endRow||Number.MAX_VALUE,k=t.startColumn||0,p=t.endColumn||Number.MAX_VALUE,n,m;r&&jQuery.getJSON("https://spreadsheets.google.com/feeds/cells/"+r+"/"+(t.googleSpreadsheetWorksheet||"od6")+"/public/values?alt=json-in-script&callback=?",function(f){var f=f.feed.entry,i,g=f.length,d=0,h=0,e;for(e=0;e<g;e++){i=f[e],d=Math.max(d,i.gs$cell.col),h=Math.max(h,i.gs$cell.row)}for(e=0;e<d;e++){if(e>=k&&e<=p){q[e-k]=[],q[e-k].length=Math.min(h,l-o)}}for(e=0;e<g;e++){if(i=f[e],n=i.gs$cell.row-1,m=i.gs$cell.col-1,m>=k&&m<=p&&n>=o&&n<=l){q[m-k][n-o]=i.content.$t}}s.dataFound()})},findHeaderRow:function(){b(this.columns,function(){});this.headerRow=0},trim:function(d){return typeof d==="string"?d.replace(/^\s+|\s+$/g,""):d},parseTypes:function(){for(var e=this.columns,g=e.length,l,k,j,h;g--;){for(l=e[g].length;l--;){k=e[g][l],j=parseFloat(k),h=this.trim(k),h==j?(e[g][l]=j,j>31536000000?e[g].isDatetime=!0:e[g].isNumeric=!0):(k=this.parseDate(k),g===0&&typeof k==="number"&&!isNaN(k)?(e[g][l]=k,e[g].isDatetime=!0):e[g][l]=h===""?null:h)}}},dateFormats:{"YYYY-mm-dd":{regex:"^([0-9]{4})-([0-9]{2})-([0-9]{2})$",parser:function(d){return Date.UTC(+d[1],d[2]-1,+d[3])}}},parseDate:function(e){var g=this.options.parseDate,j,i,h;g&&(j=g(e));if(typeof e==="string"){for(i in this.dateFormats){g=this.dateFormats[i],(h=e.match(g.regex))&&(j=g.parser(h))}}return j},rowsToColumns:function(e){var g,l,k,j,h;if(e){h=[];l=e.length;for(g=0;g<l;g++){j=e[g].length;for(k=0;k<j;k++){h[k]||(h[k]=[]),h[k][g]=e[g][k]}}}return h},parsed:function(){this.options.parsed&&this.options.parsed.call(this,this.columns)},complete:function(){var s=this.columns,t,r,q=this.options,o,m,l,p,n,h;if(q.complete){this.getColumnDistribution();s.length>1&&(t=s.shift(),this.headerRow===0&&t.shift(),t.isDatetime?r="datetime":t.isNumeric||(r="category"));for(p=0;p<s.length;p++){if(this.headerRow===0){s[p].name=s[p].shift()}}m=[];for(p=0,h=0;p<s.length;h++){o=c.pick(this.valueCount.individual[h],this.valueCount.global);l=[];for(n=0;n<s[p].length;n++){l[n]=[t[n],s[p][n]!==void 0?s[p][n]:null],o>1&&l[n].push(s[p+1][n]!==void 0?s[p+1][n]:null),o>2&&l[n].push(s[p+2][n]!==void 0?s[p+2][n]:null),o>3&&l[n].push(s[p+3][n]!==void 0?s[p+3][n]:null),o>4&&l[n].push(s[p+4][n]!==void 0?s[p+4][n]:null)}m[h]={name:s[p].name,data:l};p+=o}q.complete({xAxis:{type:r},series:m})}}});c.Data=a;c.data=function(d,e){return new a(d,e)};c.wrap(c.Chart.prototype,"init",function(e,f,h){var g=this;f&&f.data?c.data(c.extend(f.data,{complete:function(d){f.series&&b(f.series,function(i,j){f.series[j]=c.merge(i,d.series[j])});f=c.merge(d,f);e.call(g,f,h)}}),f):e.call(g,f,h)})})(Highcharts);