/* * datawrapper / vis / line-chart v1.5.0 * generated on 2014-11-21T14:56:10+01:00 */ (function(){var root=this,dw={};if(typeof exports!=='undefined'){if(typeof module!=='undefined'&&module.exports){exports=module.exports=dw;} exports.dw=dw;}else{window.dw=dw;} dw.dataset=function(columns,opts){var columnsByName={},origColumns=columns.slice(0);_.each(columns,function(col){uniqueName(col);columnsByName[col.name()]=col;});opts=_.extend(opts,{});function uniqueName(col){var origColName=col.name(),colName=origColName,appendix=1;while(columnsByName.hasOwnProperty(colName)){colName=origColName+'.'+(appendix++);} if(colName!=origColName)col.name(colName);} var dataset={columns:function(){return columns;},column:function(x){if(_.isString(x)){if(columnsByName[x]!==undefined)return columnsByName[x];throw'No column found with that name: "'+x+'"';} if(columns[x]!==undefined)return columns[x];throw'No column found with that index: '+x;},numColumns:function(){return columns.length;},numRows:function(){return columns[0].length;},eachColumn:function(func){_.each(columns,func);},hasColumn:function(x){return(_.isString(x)?columnsByName[x]:columns[x])!==undefined;},indexOf:function(column_name){if(!dataset.hasColumn(column_name))return-1;return _.indexOf(columns,columnsByName[column_name]);},toCSV:function(){var csv="",sep=",",quote="\"";_.each(columns,function(col,i){var t=col.title();if(t.indexOf(quote)>-1)t.replace(quote,'\\'+quote);if(t.indexOf(sep)>-1)t=quote+t+quote;csv+=(i>0?sep:'')+t;});_.each(_.range(dataset.numRows()),function(row){csv+='\n';_.each(columns,function(col,i){var t=''+(col.type()=='date'?col.raw(row):col.val(row));if(t.indexOf(quote)>-1)t.replace(quote,'\\'+quote);if(t.indexOf(sep)>-1)t=quote+t+quote;csv+=(i>0?sep:'')+t;});});return csv;},filterColumns:function(ignore){columns=_.filter(columns,function(c){return!ignore[c.name()];});_.each(ignore,function(ign,key){if(ign&&columnsByName[key])delete columnsByName[key];});return dataset;},eachRow:function(func){var i;for(i=0;irange[1])range[1]=v;});range[0]=type.fromNum(range[0]);range[1]=type.fromNum(range[1]);} return range;},total:function(){if(!type.toNum)return false;if(!total){total=0;column.each(function(v){total+=type.toNum(v);});total=type.fromNum(total);} return total;},filterRows:function(r){rows=[];if(arguments.length){_.each(r,function(i){rows.push(origRows[i]);});}else{rows=origRows.slice(0);} column.length=rows.length;range=total=false;return column;},toString:function(){return name+' ('+type.name()+')';},indexOf:function(val){return _.find(_.range(rows.length),function(i){return column.val(i)==val;});}};return column;};dw.column.types={};dw.column.types.text=function(){return{parse:_.identity,errors:function(){return 0;},name:function(){return'text';},formatter:function(){return _.identity;},isValid:function(){return true;},format:function(){}};};dw.column.types.number=function(sample){function signDigitsDecimalPlaces(num,sig){if(num===0)return 0;return Math.round(sig-Math.ceil(Math.log(Math.abs(num))/ Math.LN10));} var format,errors=0,knownFormats={'-.':/^ *[-–—]?[0-9]*(\.[0-9]+)?(e[\+\-][0-9]+)?%? *$/,'-,':/^ *[-–—]?[0-9]*(,[0-9]+)?%? *$/,',.':/^ *[-–—]?[0-9]{1,3}(,[0-9]{3})*(\.[0-9]+)?%? *$/,'.,':/^ *[-–—]?[0-9]{1,3}(\.[0-9]{3})*(,[0-9]+)?%? *$/,' .':/^ *[-–—]?[0-9]{1,3}( [0-9]{3})*(\.[0-9]+)?%? *$/,' ,':/^ *[-–—]?[0-9]{1,3}( [0-9]{3})*(,[0-9]+)?%? *$/,' .':/^ *[-–—]?[0-9]{1,3}( [0-9]{3})*(\.[0-9]+)?%? *$/,' ,':/^ *[-–—]?[0-9]{1,3}( [0-9]{3})*(,[0-9]+)?%? *$/},formatLabels={'-.':'1234.56','-,':'1234,56',',.':'1,234.56','.,':'1.234,56',' .':'1 234.56',' ,':'1 234,56',' .':'1 234.56',' ,':'1 234,56'},naStrings={'na':1,'n/a':1,'-':1,':':1};var matches={},bestMatch=['-.',0];sample=sample||[];_.each(sample,function(n){_.each(knownFormats,function(regex,fmt){if(matches[fmt]===undefined)matches[fmt]=0;if(regex.test(n)){matches[fmt]+=1;if(matches[fmt]>bestMatch[1]){bestMatch[0]=fmt;bestMatch[1]=matches[fmt];}}});});format=bestMatch[0];var type={parse:function(raw){if(_.isNumber(raw)||_.isUndefined(raw)||_.isNull(raw))return raw;var number=raw.replace("%","").replace('–','-').replace('—','-');if(format[0]!='-'){number=number.replace(format[0],'');} if(format[1]!='.'){number=number.replace(format[1],'.');} if(isNaN(number)||number===""){if(!naStrings[number.toLowerCase()]&&number!=="")errors++;return raw;} return Number(number);},toNum:function(i){return i;},fromNum:function(i){return i;},errors:function(){return errors;},name:function(){return'number';},formatter:function(config){var format=config['number-format']||'-',div=Number(config['number-divisor']||0),append=(config['number-append']||'').replace(/ /g,'\u00A0'),prepend=(config['number-prepend']||'').replace(/ /g,'\u00A0');if(div==60) {return function(val){if(isNaN(val))return val;var minutes=Math.floor(val);var minutePart=minutes%60;var hours=Math.floor(minutes / 60);if(hours>0) return hours+'u'+minutePart+'m';return minutePart+'m';};} return function(val,full,round){if(isNaN(val))return val;var _fmt=format;if(div!==0&&_fmt=='-')_fmt='n1';if(div!==0)val=Number(val)/ Math.pow(10,div);if(_fmt.substr(0,1)=='s'){var sig=+_fmt.substr(1);_fmt='n'+Math.max(0,signDigitsDecimalPlaces(val,sig));} if(round)_fmt='n0';val=Globalize.format(val,_fmt!='-'?_fmt:null);return full?prepend+val+append:val;};},isValid:function(val){return val===""||naStrings[String(val).toLowerCase()]||_.isNumber(type.parse(val));},ambiguousFormats:function(){var candidates=[];_.each(matches,function(cnt,fmt){if(cnt==bestMatch[1]){candidates.push([fmt,formatLabels[fmt]]);}});return candidates;},format:function(fmt){if(arguments.length){format=fmt;return type;} return format;}};return type;};dw.column.types.date=function(sample){var format,errors=0,matches={},bestMatch=['',0],knownFormats={'YYYY':{test:/^ *(?:1[7-9]|20)\d{2} *$/,parse:/^ *(\d{4}) *$/,precision:'year'},'YYYY-H':{test:/^ *[12]\d{3}[ \-\/]?[hH][12] *$/,parse:/^ *(\d{4})[ \-\/]?[hH]([12]) *$/,precision:'half'},'H-YYYY':{test:/^ *[hH][12][ \-\/][12]\d{3} *$/,parse:/^ *[hH]([12])[ \-\/](\d{4}) *$/,precision:'half'},'YYYY-Q':{test:/^ *[12]\d{3}[ \-\/]?[qQ][1234] *$/,parse:/^ *(\d{4})[ \-\/]?[qQ]([1234]) *$/,precision:'quarter'},'Q-YYYY':{test:/^ *[qQ]([1234])[ \-\/][12]\d{3} *$/,parse:/^ *[qQ]([1234])[ \-\/](\d{4}) *$/,precision:'quarter'},'YYYY-M':{test:/^ *([12]\d{3}) ?[ \-\/\.mM](0?[1-9]|1[0-2]) *$/,parse:/^ *(\d{4}) ?[ \-\/\.mM](0?[1-9]|1[0-2]) *$/,precision:'month'},'M-YYYY':{test:/^ *(0?[1-9]|1[0-2]) ?[ \-\/\.][12]\d{3} *$/,parse:/^ *(0?[1-9]|1[0-2]) ?[ \-\/\.](\d{4}) *$/,precision:'month'},'YYYY-WW':{test:/^ *[12]\d{3}[ -]?[wW](0?[1-9]|[1-4]\d|5[0-3]) *$/,parse:/^ *(\d{4})[ -]?[wW](0?[1-9]|[1-4]\d|5[0-3]) *$/,precision:'week'},'MM/DD/YYYY':{test:/^ *(0?[1-9]|1[0-2])([\-\/] ?)(0?[1-9]|[1-2]\d|3[01])\2([12]\d{3})$/,parse:/^ *(0?[1-9]|1[0-2])([\-\/] ?)(0?[1-9]|[1-2]\d|3[01])\2(\d{4})$/,precision:'day'},'DD/MM/YYYY':{test:/^ *(0?[1-9]|[1-2]\d|3[01])([\-\.\/ ?])(0?[1-9]|1[0-2])\2([12]\d{3})$/,parse:/^ *(0?[1-9]|[1-2]\d|3[01])([\-\.\/ ?])(0?[1-9]|1[0-2])\2(\d{4})$/,precision:'day'},'YYYY-MM-DD':{test:/^ *([12]\d{3})([\-\/\. ?])(0?[1-9]|1[0-2])\2(0?[1-9]|[1-2]\d|3[01])$/,parse:/^ *(\d{4})([\-\/\. ?])(0?[1-9]|1[0-2])\2(0?[1-9]|[1-2]\d|3[01])$/,precision:'day'},'YYYY-WW-d':{test:/^ *[12]\d{3}[ \-]?[wW](0?[1-9]|[1-4]\d|5[0-3])(?:[ \-]?[1-7]) *$/,parse:/^ *(\d{4})[ \-]?[wW](0?[1-9]|[1-4]\d|5[0-3])(?:[ \-]?([1-7])) *$/,precision:'day'},'MM/DD/YYYY HH:MM':{test:/^ *(0?[1-9]|1[0-2])([-\/] ?)(0?[1-9]|[1-2]\d|3[01])\2([12]\d{3}) *[ \-\|] *(0?\d|1\d|2[0-3]):([0-5]\d) *$/,parse:/^ *(0?[1-9]|1[0-2])([-\/] ?)(0?[1-9]|[1-2]\d|3[01])\2(\d{4}) *[ \-\|] *(0?\d|1\d|2[0-3]):([0-5]\d) *$/,precision:'day-minutes'},'DD.MM.YYYY HH:MM':{test:/^ *(0?[1-9]|[1-2]\d|3[01])([-\.\/ ?])(0?[1-9]|1[0-2])\2([12]\d{3}) *[ \-\|] *(0?\d|1\d|2[0-3]):([0-5]\d) *$/,parse:/^ *(0?[1-9]|[1-2]\d|3[01])([-\.\/ ?])(0?[1-9]|1[0-2])\2(\d{4}) *[ \-\|] *(0?\d|1\d|2[0-3]):([0-5]\d) *$/,precision:'day-minutes'},'YYYY-MM-DD HH:MM':{test:/^ *([12]\d{3})([-\/\. ?])(0?[1-9]|1[0-2])\2(0?[1-9]|[1-2]\d|3[01]) *[ \-\|] *(0?\d|1\d|2[0-3]):([0-5]\d) *$/,parse:/^ *(\d{4})([-\/\. ?])(0?[1-9]|1[0-2])\2(0?[1-9]|[1-2]\d|3[01]) *[ \-\|] *(0?\d|1\d|2[0-3]):([0-5]\d) *$/,precision:'day-minutes'},'MM/DD/YYYY HH:MM:SS':{test:/^ *(0?[1-9]|1[0-2])([-\/] ?)(0?[1-9]|[1-2]\d|3[01])\2([12]\d{3}) *[ \-\|] *(0?\d|1\d|2[0-3]):([0-5]\d)(?::([0-5]\d))? *$/,parse:/^ *(0?[1-9]|1[0-2])([-\/] ?)(0?[1-9]|[1-2]\d|3[01])\2(\d{4}) *[ \-\|] *(0?\d|1\d|2[0-3]):([0-5]\d)(?::([0-5]\d))? *$/,precision:'day-seconds'},'DD.MM.YYYY HH:MM:SS':{test:/^ *(0?[1-9]|[1-2]\d|3[01])([-\.\/ ?])(0?[1-9]|1[0-2])\2([12]\d{3}) *[ \-\|] *(0?\d|1\d|2[0-3]):([0-5]\d)(?::([0-5]\d))? *$/,parse:/^ *(0?[1-9]|[1-2]\d|3[01])([-\.\/ ?])(0?[1-9]|1[0-2])\2(\d{4}) *[ \-\|] *(0?\d|1\d|2[0-3]):([0-5]\d)(?::([0-5]\d))? *$/,precision:'day-seconds'},'YYYY-MM-DD HH:MM:SS':{test:/^ *([12]\d{3})([-\/\. ?])(0?[1-9]|1[0-2])\2(0?[1-9]|[1-2]\d|3[01]) *[ \-\|] *(0?\d|1\d|2[0-3]):([0-5]\d)(?::([0-5]\d))? *$/,parse:/^ *(\d{4})([-\/\. ?])(0?[1-9]|1[0-2])\2(0?[1-9]|[1-2]\d|3[01]) *[ \-\|] *(0?\d|1\d|2[0-3]):([0-5]\d)(?::([0-5]\d))? *$/,precision:'day-seconds'}};function test(str,key){var fmt=knownFormats[key];if(_.isRegExp(fmt.test)){return fmt.test.test(str);}else{return fmt.test(str,key);}} function parse(str,key){var fmt=knownFormats[key];if(_.isRegExp(fmt.parse)){return str.match(fmt.parse);}else{return fmt.parse(str,key);}} sample=sample||[];_.each(knownFormats,function(format,key){_.each(sample,function(n){if(matches[key]===undefined)matches[key]=0;if(test(n,key)){matches[key]+=1;if(matches[key]>bestMatch[1]){bestMatch[0]=key;bestMatch[1]=matches[key];}}});});format=bestMatch[0];function dateFromIsoWeek(year,week,day){var d=new Date(Date.UTC(year,0,3));d.setUTCDate(3-d.getUTCDay()+(week-1)*7+parseInt(day,10));return d;} function dateToIsoWeek(date){var d=date.getUTCDay(),t=new Date(date.valueOf());t.setDate(t.getDate()-((d+6)%7)+3);var iso_year=t.getUTCFullYear(),w=Math.floor((t.getTime()-new Date(iso_year,0,1,-6))/ 864e5);return[iso_year,1+Math.floor(w/7),d>0?d:7];} var type={parse:function(raw){if(_.isDate(raw)||_.isUndefined(raw))return raw;if(!format||!_.isString(raw)){errors++;return raw;} var m=parse(raw,format);if(!m){errors++;return raw;}else{if(!test(raw,format))errors++;} switch(format){case'YYYY':return new Date(m[1],0,1);case'YYYY-H':return new Date(m[1],(m[2]-1)*6,1);case'H-YYYY':return new Date(m[2],(m[1]-1)*6,1);case'YYYY-Q':return new Date(m[1],(m[2]-1)*3,1);case'Q-YYYY':return new Date(m[2],(m[1]-1)*3,1);case'YYYY-M':return new Date(m[1],(m[2]-1),1);case'M-YYYY':return new Date(m[2],(m[1]-1),1);case'YYYY-WW':return dateFromIsoWeek(m[1],m[2],1);case'YYYY-WW-d':return dateFromIsoWeek(m[1],m[2],m[3]);case'YYYY-MM-DD':return new Date(m[1],(m[3]-1),m[4]);case'DD/MM/YYYY':return new Date(m[4],(m[3]-1),m[1]);case'MM/DD/YYYY':return new Date(m[4],(m[1]-1),m[3]);case'YYYY-MM-DD HH:MM':return new Date(m[1],(m[3]-1),m[4],m[5]||0,m[6]||0,0);case'DD.MM.YYYY HH:MM':return new Date(m[4],(m[3]-1),m[1],m[5]||0,m[6]||0,0);case'MM/DD/YYYY HH:MM':return new Date(m[4],(m[1]-1),m[3],m[5]||0,m[6]||0,0);case'YYYY-MM-DD HH:MM:SS':return new Date(m[1],(m[3]-1),m[4],m[5]||0,m[6]||0,m[7]||0);case'DD.MM.YYYY HH:MM:SS':return new Date(m[4],(m[3]-1),m[1],m[5]||0,m[6]||0,m[7]||0);case'MM/DD/YYYY HH:MM:SS':return new Date(m[4],(m[1]-1),m[3],m[5]||0,m[6]||0,m[7]||0);} errors++;return raw;},toNum:function(d){return d.getTime();},fromNum:function(i){return new Date(i);},errors:function(){return errors;},name:function(){return'date';},format:function(fmt){if(arguments.length){format=fmt;return type;} return format;},precision:function(){return knownFormats[format].precision;},formatter:function(config){if(!format)return _.identity;var M_pattern=Globalize.culture().calendar.patterns.M.replace('MMMM','MMM');switch(knownFormats[format].precision){case'year':return function(d){return!_.isDate(d)?d:d.getFullYear();};case'half':return function(d){return!_.isDate(d)?d:d.getFullYear()+' H'+(d.getMonth()/6+1);};case'quarter':return function(d){return!_.isDate(d)?d:d.getFullYear()+' Q'+(d.getMonth()/3+1);};case'month':return function(d){return!_.isDate(d)?d:Globalize.format(d,'MMM yy');};case'week':return function(d){return!_.isDate(d)?d:dateToIsoWeek(d).slice(0,2).join(' W');};case'day':return function(d,verbose){return!_.isDate(d)?d:Globalize.format(d,verbose?'D':'d');};case'day-minutes':return function(d){return!_.isDate(d)?d:Globalize.format(d,M_pattern).replace(' ',' ')+' - '+Globalize.format(d,'t').replace(' ',' ');};case'day-seconds':return function(d){return!_.isDate(d)?d:Globalize.format(d,'T').replace(' ',' ');};}},isValid:function(val){return _.isDate(type.parse(val));},ambiguousFormats:function(){var candidates=[];_.each(matches,function(cnt,fmt){if(cnt==bestMatch[1]){candidates.push([fmt,fmt]);}});return candidates;}};return type;};dw.datasource={};dw.datasource.delimited=function(opts){function loadAndParseCsv(){if(opts.url){return $.ajax({url:opts.url,method:'GET',dataType:"text"}).then(function(raw){return new DelimitedParser(opts).parse(raw);});}else if(opts.csv){var dfd=$.Deferred(),parsed=dfd.then(function(raw){return new DelimitedParser(opts).parse(raw);});dfd.resolve(opts.csv);return parsed;} throw'you need to provide either an URL or CSV data.';} var delimited={dataset:loadAndParseCsv};return delimited;};var DelimitedParser=function(opts){opts=_.extend({delimiter:"auto",quoteChar:"\"",skipRows:0,emptyValue:null,transpose:false,firstRowIsHeader:true},opts);this.__delimiterPatterns=getDelimiterPatterns(opts.delimiter,opts.quoteChar);this.opts=opts;};function getDelimiterPatterns(delimiter,quoteChar){return new RegExp(("(\\"+delimiter+"|\\r?\\n|\\r|^)"+"(?:"+quoteChar+"([^"+quoteChar+"]*(?:"+quoteChar+"\"[^"+quoteChar+"]*)*)"+quoteChar+"|"+"([^"+quoteChar+"\\"+delimiter+"\\r\\n]*))"),"gi");} _.extend(DelimitedParser.prototype,{parse:function(data){var me=this,opts=this.opts;me.__rawData=data;if(opts.delimiter=='auto'){opts.delimiter=me.guessDelimiter(data,opts.skipRows);me.__delimiterPatterns=getDelimiterPatterns(opts.delimiter,opts.quoteChar);} var closure=opts.delimiter!='|'?'|':'#',arrData;data=closure+data.replace(/\s+$/g,'')+closure;function parseCSV(delimiterPattern,strData,strDelimiter){strDelimiter=(strDelimiter||",");var arrData=[[]];var arrMatches=null,strMatchedValue;while(arrMatches=delimiterPattern.exec(strData)){var strMatchedDelimiter=arrMatches[1];if(strMatchedDelimiter.length&&(strMatchedDelimiter!=strDelimiter)){arrData.push([]);} if(arrMatches[2]){strMatchedValue=arrMatches[2].replace(new RegExp("\"\"","g"),"\"");}else{strMatchedValue=arrMatches[3];} arrData[arrData.length-1].push(strMatchedValue);} if(arrData[0][0].substr(0,1)==closure){arrData[0][0]=arrData[0][0].substr(1);} var p=arrData.length-1,q=arrData[p].length-1,r=arrData[p][q].length-1;if(arrData[p][q].substr(r)==closure){arrData[p][q]=arrData[p][q].substr(0,r);} return(arrData);} function transpose(arrMatrix){var a=arrMatrix,w=a.length?a.length:0,h=a[0]instanceof Array?a[0].length:0;if(h===0||w===0){return[];} var i,j,t=[];for(i=0;imaxMatchCount){maxMatchCount=c;k=i;}});return delimiters[k];}});dw.utils={minMax:function(columns){var minmax=[Number.MAX_VALUE,-Number.MAX_VALUE];_.each(columns,function(column){minmax[0]=Math.min(minmax[0],column.range()[0]);minmax[1]=Math.max(minmax[1],column.range()[1]);});return minmax;},dateFormat:function(daysDelta){var new_month=true,last_date=false;function timeFormat(formats){return function(date){new_month=!last_date||date.getMonth()!=last_date.getMonth();last_date=date;var i=formats.length-1,f=formats[i];while(!f[1](date))f=formats[--i];return f[0](date);};} function time_fmt(fmt){var format=function(date){var r=Globalize.format(date,fmt);return fmt!='htt'?r:r.toLowerCase();};return format;} var fmt=(function(lang){return{date:lang=='de'?"dd.":"dd",hour:lang!='en'?"H:00":"htt",minute:lang=='de'?"H:mm":'h:mm',mm:lang=='de'?'d.M.':'MM/dd',mmm:lang=='de'?'d.MMM':'MMM dd',mmmm:lang=='de'?'d. MMMM':'MMMM dd'};})(Globalize.culture().language);return timeFormat([[time_fmt("yyyy"),function(){return true;}],[time_fmt(daysDelta>70?"MMM":"MMM"),function(d){return d.getMonth()!==0;}],[time_fmt(fmt.date),function(d){return d.getDate()!=1;}],[time_fmt(daysDelta<7?fmt.mm:daysDelta>70?fmt.mmm:fmt.mmm),function(d){return d.getDate()!=1&&new_month;}],[time_fmt(fmt.hour),function(d){return d.getHours();}],[time_fmt(fmt.minute),function(d){return d.getMinutes();}],[time_fmt(":ss"),function(d){return d.getSeconds();}],[time_fmt(".fff"),function(d){return d.getMilliseconds();}]]);},longDateFormat:function(column){return function(d){if(column.type()=='date'){switch(column.type(true).precision()){case'year':return d.getFullYear();case'quarter':return d.getFullYear()+' Q'+(d.getMonth()/3+1);case'month':return Globalize.format(d,'MMM yy');case'day':return Globalize.format(d,'MMM d');case'minute':return Globalize.format(d,'t');case'second':return Globalize.format(d,'T');}}else{return d;}};},columnNameColumn:function(columns){var names=_.map(columns,function(col){return col.title();});return dw.column('',names);},name:function(obj){return _.isFunction(obj.name)?obj.name():_.isString(obj.name)?obj.name:obj;},getMaxChartHeight:function(el){function margin(el,type){if($(el).css('margin-'+type)=='auto')return 0;return+$(el).css('margin-'+type).replace('px','');} var ch=0,bottom=0;$('body > *').each(function(i,el){var t=el.tagName.toLowerCase();if(t!='script'&&el.id!='chart'&&!$(el).hasClass('tooltip')&&!$(el).hasClass('qtip')&&!$(el).hasClass('container')&&!$(el).hasClass('noscript')){ch+=$(el).outerHeight(false);} ch+=Math.max(margin(el,'top'),bottom);bottom=margin(el,'bottom');});ch+=bottom;var mt=$('#chart').css('margin-top').replace('px',''),mb=$('#chart').css('margin-bottom').replace('px',''),maxH=$(window).height()-ch-8;if(!$.support.leadingWhitespace)maxH-=15;maxH-=$('body').css('padding-top').replace('px','');maxH-=$('body').css('padding-bottom').replace('px','');return maxH;},purifyHtml:function(input,allowed){var tags=/<\/?([a-z][a-z0-9]*)\b[^>]*>/gi,commentsAndPhpTags=/|<\?(?:php)?[\s\S]*?\?>/gi,default_allowed="

",allowed_split={};if(allowed===undefined)allowed=default_allowed;allowed_split[allowed]=(((allowed||"")+"").toLowerCase().match(/<[a-z][a-z0-9]*>/g)||[]).join('');function purifyHtml(input,allowed){if(!_.isString(input)||input.indexOf("<")<0){return input;} if(allowed===undefined){allowed=default_allowed;} if(!allowed_split[allowed]){allowed_split[allowed]=(((allowed||"")+"").toLowerCase().match(/<[a-z][a-z0-9]*>/g)||[]).join('');} return input.replace(commentsAndPhpTags,'').replace(tags,function($0,$1){return allowed_split[allowed].indexOf('<'+$1.toLowerCase()+'>')>-1?$0:'';});} dw.utils.purifyHtml=purifyHtml;return purifyHtml(input,allowed);},significantDimension:function(values){var result=[],dimension=0,uniqValues=_.uniq(values),check,diff;if(uniqValues.length==1){return-1*Math.floor(Math.log(uniqValues[0])/Math.LN10);} if(_.uniq(_.map(uniqValues,round)).length==uniqValues.length){check=function(){return _.uniq(result).length==uniqValues.length;};diff=-1;}else{check=function(){return _.uniq(result).length0);if(max_iter<10){console.warn('maximum iteration reached',values,result,dimension);} if(diff<0)dimension+=2;else dimension--;function round(v){return dw.utils.round(v,dimension);} return dimension;},round:function(value,dimension){var base=Math.pow(10,dimension);return Math.round(value*base)/ base;},smartRound:function(values,add_precision){var dim=dw.utils.significantDimension(values);dim+=add_precision||0;return _.map(values,function(v){return dw.utils.round(v,dim);});},nearest:function(array,value){var min_diff=Number.MAX_VALUE,min_diff_val;_.each(array,function(v){var d=Math.abs(v-value);if(d');column.each(function(val,i){var lbl=format(val);if(!lbl)return;select.append('');});select.change(function(evt){var cur=select.val();update(cur);});select.addClass('filter-ui filter-select');return select;};if(type=='buttons')f=function(vis){var div=$('
');div.addClass('filter-ui filter-links');column.each(function(val,i){var lbl=format(val);if(!lbl)return;var a=$(''+(_.isString(lbl)?$.trim(lbl):lbl)+'').data('row',i);div.append(a);});$('a',div).click(function(e){var a=$(e.target);e.preventDefault();if(a.hasClass('active'))return;$('a',div).removeClass('active');a.addClass('active');update(a.data('row'));});div.appendTo('body');var fy=$('a:first',div).offset().top,ly=$('a:last',div).offset().top;if(fy!=ly){div.remove();return getFilterUI('select')(vis);} return div;};if(type=='timescale')f=function(vis){var w=Math.min(vis.__w-30,Math.max(300,vis.__w*0.7)),timescale=d3.time.scale().domain([column.val(0),column.val(-1)]).range([0,w]),timesel=$('
').css({position:'relative',height:45,'margin-left':3}).addClass('filter-ui'),nticks=w / 80,ticks=timescale.ticks(nticks),daysDelta=Math.round((column.val(-1).getTime()-column.val(0).getTime())/ 86400000),fmt=dw.utils.dateFormat(daysDelta),lfmt=column.type(true).formatter(),dots=timescale.ticks(w / 8),lbl_x=function(i){return Math.max(-18,timescale(column.val(i))-40);};_.each(ticks,function(d){var s=$(''+fmt(d)+''),x=timescale(d)-40,lw=vis.labelWidth(fmt(d));if(40-lw*0.5+x<0)x=-40+0.5*lw;s.css({position:'absolute',top:0,width:80,left:x,'text-align':'center',opacity:0.55});timesel.append(s);});_.each(dots,function(d){if(d.getTime()column.val(-1).getTime())return;var s=$('');s.css({position:'absolute',bottom:19,width:1,height:'1ex','border-left':'1px solid #000','vertical-align':'bottom',left:Math.round(timescale(d))+0.5});if(!_.find(ticks,function(td){return d.getTime()==td.getTime();})){s.css({height:'0.6ex',opacity:0.5});} timesel.append(s);});var pointer=$('
').css({position:'absolute',width:20,bottom:2,left:timescale(column.val(active))-9,'text-align':'center'});timesel.append(pointer);var lbl=$('
').css({position:'absolute',width:80,top:0,left:lbl_x(active),'text-align':'center'}).data('last-txt',lfmt(column.val(active))).data('last-left',lbl_x(active));$('span',lbl).css({background:vis.theme().colors.background,'font-weight':'bold','padding':'0 1ex'}).html(lfmt(column.val(active)));timesel.append(lbl);$('
').css({position:'absolute',width:w+1,bottom:15,height:2,'border-bottom':'1px solid #000'}).appendTo(timesel);var bar=$('
').css({position:'absolute',left:0,width:w,height:40});timesel.append(bar);function nearest(rel_x){var x_date=timescale.invert(rel_x),min_dist=Number.MAX_VALUE,nearest_row=0;column.each(function(date,i){var dist=Math.abs(date.getTime()-x_date.getTime());if(dist0;},isHighlighted:function(obj){if(_.isUndefined(obj)===undefined)return false;var hl=this.get('metadata.visualize.highlighted-series'),obj_name=dw.utils.name(obj);return!_.isArray(hl)||hl.length===0||_.indexOf(hl,obj_name)>=0;},locale:function(_locale){if(arguments.length){locale=_locale;Globalize.culture(locale);return chart;} return locale;},metricPrefix:function(_metric_prefix){if(arguments.length){metric_prefix=_metric_prefix;return chart;} return metric_prefix;},formatValue:function(val,full,round){var format=chart.get('metadata.describe.number-format'),div=Number(chart.get('metadata.describe.number-divisor')),append=chart.get('metadata.describe.number-append','').replace(' ',' '),prepend=chart.get('metadata.describe.number-prepend','').replace(' ',' ');if(div!==0)val=Number(val)/ Math.pow(10,div);if(format!='-'){if(round||val==Math.round(val))format=format.substr(0,1)+'0';val=Globalize.format(val,format);}else if(div!==0){val=val.toFixed(1);} return full?prepend+val+append:val;},render:function(container){if(!visualization||!theme||!dataset){throw'cannot render the chart!';} visualization.chart(chart);visualization.__init();var $cont=$(container);$cont.parent().addClass('vis-'+visualization.id).addClass('theme-'+theme.id);visualization.render($cont);},attributes:function(attrs){if(arguments.length){attributes=attrs;return chart;} return attributes;},onChange:change_callbacks.add,columnFormatter:function(column){var colFormat=chart.get('metadata.data.column-format',{});colFormat=colFormat[column.name()]||{};if(column.type()=='number'&&colFormat=='auto'){var mtrSuf=dw.utils.metricSuffix(chart.locale()),values=column.values(),dim=dw.utils.significantDimension(values),div=dim<-2?(Math.round((dim*-1)/ 3)*3):(dim>2?dim*-1:0),ndim=dw.utils.significantDimension(_.map(values,function(v){return v / Math.pow(10,div);}));colFormat={'number-divisor':div,'number-append':div?mtrSuf[div]||' × 10'+div+'':'','number-format':'n'+Math.max(0,ndim)};} return column.type(true).formatter(colFormat);}};function applyChanges(dataset){var changes=chart.get('metadata.data.changes',[]);var transpose=chart.get('metadata.data.transpose',false);_.each(changes,function(change){var row="row",column="column";if(transpose){row="column";column="row";} if(dataset.hasColumn(change[column])){if(change[row]===0){dataset.column(change[column]).title(change.value);} else{dataset.column(change[column]).raw(change[row]-1,change.value);}}});var columnFormats=chart.get('metadata.data.column-format',{});_.each(columnFormats,function(columnFormat,key){if(columnFormat.type&&dataset.hasColumn(key)){dataset.column(key).type(columnFormat.type);} if(columnFormat['input-format']&&dataset.hasColumn(key)){dataset.column(key).type(true).format(columnFormat['input-format']);}});return dataset;} return chart;};dw.visualization=(function(){var __vis={};var visualization=function(id){return new __vis[id]();};visualization.register=function(id){var parent=arguments.length==3?__vis[arguments[1]].prototype:dw.visualization.base,props=arguments[arguments.length-1],vis=__vis[id]=function(){};_.extend(vis.prototype,parent,{id:id},props);};return visualization;})();dw.visualization.base=(function(){}).prototype;_.extend(dw.visualization.base,{__init:function(){this.__renderedDfd=$.Deferred();if(window.parent&&window.parent['postMessage']){window.parent.postMessage('datawrapper:vis:init','*');} return this;},render:function(el){$(el).html('implement me!');},theme:function(theme){if(!arguments.length)return this.__theme;this.__theme=theme;var attr_properties=['horizontalGrid','verticalGrid','yAxis','xAxis'];_.each(attr_properties,function(prop){if(theme.hasOwnProperty(prop)){for(var key in theme[prop]){var lkey=key.replace(/([A-Z])/g,"-$1").toLowerCase();if(!theme[prop].hasOwnProperty(lkey)){theme[prop][lkey]=theme[prop][key];}}}});return this;},size:function(width,height){var me=this;if(!arguments.length)return[me.__w,me.__h];me.__w=width;me.__h=height;return me;},get:function(str,_default){return this.chart().get('metadata.visualize.'+str,_default);},notify:function(str){if(dw.backend&&_.isFunction(dw.backend.notify)){return dw.backend.notify(str);}else{if(window.parent&&window.parent['postMessage']){window.parent.postMessage('notify:'+str,'*');}else if(window['console']){console.log(str);}}},signature:function(){},translate:function(str){var locale=this.meta.locale,lang=this.lang;return locale[str]?locale[str][lang]||locale[str]:str;},checkBrowserCompatibility:function(){return true;},chart:function(chart){var me=this;if(!arguments.length)return me.__chart;me.dataset=chart.dataset();me.theme(chart.theme());me.__chart=chart;var columnFormat=chart.get('metadata.data.column-format',{});var ignore={};_.each(columnFormat,function(format,key){ignore[key]=!!format.ignore;});me.dataset.filterColumns(ignore);return me;},axes:function(returnAsColumns){var me=this,dataset=me.dataset,usedColumns={},axes={},axesDef,axesAsColumns={},errors=[];axesDef=me.chart().get('metadata.axes',{});_.each(me.meta.axes,function(o,key){if(axesDef[key]){var columns=axesDef[key];if(columnExists(columns)){axes[key]=columns;if(!_.isArray(columns))columns=[columns];_.each(columns,function(column){usedColumns[column]=true;});}}});_.each(me.meta.axes,function(axisDef,key){function checkColumn(col){return!usedColumns[col.name()]&&_.indexOf(axisDef.accepts,col.type())>=0;} function errMissingColumn(){var msg=dw.backend?dw.backend.messages.insufficientData:'The visualization needs at least one column of the type %type to populate axis %key';errors.push(msg.replace('%type',axisDef.accepts).replace('%key',key));} if(axes[key])return;if(!axisDef.optional){if(!axisDef.multiple){var c=_.find(dataset.columns(),checkColumn);if(c){usedColumns[c.name()]=true;axes[key]=c.name();}else{if(_.indexOf(axisDef.accepts,'text')>=0){var col=dw.column(key,_.map(_.range(dataset.numRows()),function(i){return(i>25?String.fromCharCode(64+i/26):'')+String.fromCharCode(65+(i%26));}),'text');dataset.add(col);me.chart().dataset(dataset);usedColumns[col.name()]=true;axes[key]=col.name();}else{errMissingColumn();}}}else{axes[key]=[];dataset.eachColumn(function(c){if(checkColumn(c)){usedColumns[c.name()]=true;axes[key].push(c.name());}});if(!axes[key].length){errMissingColumn();}}}else{axes[key]=false;}});if(errors.length){me.notify(errors.join('
'));} _.each(axes,function(columns,key){if(!_.isArray(columns)){axesAsColumns[key]=columns!==false?me.dataset.column(columns):null;}else{axesAsColumns[key]=[];_.each(columns,function(column,i){axesAsColumns[key][i]=column!==false?me.dataset.column(column):null;});}});me.axes=function(returnAsColumns){return returnAsColumns?axesAsColumns:axes;};function columnExists(columns){if(!_.isArray(columns))columns=[columns];for(var i=0;i'+txt+'
');lbl.css(attrs.css);lbl.css({'text-align':attrs.align});attrs.root.append(lbl);function position(){var w=attrs.w||me.labelWidth(attrs.txt,attrs.cl,attrs.size),h=attrs.h||lbl.height(),x=attrs.x,y=attrs.y,rot_w=100;var css=attrs.rotate==-90?{left:x-rot_w*0.5,top:attrs.valign=='top'?y+rot_w*0.5:y-rot_w*0.5,width:rot_w,height:20,'text-align':attrs.valign=='top'?'right':'left'}:{left:attrs.align=='left'?x:attrs.align=='center'?x-w*0.5:x-w,top:y-h*(attrs.valign=='top'?0:attrs.valign=='middle'?0.5:1),width:w,height:h};if(attrs.size){css['font-size']=attrs.size;} return css;} lbl.css($.extend({},attrs.css,position()));if(attrs.rotate==-90){lbl.css({'-moz-transform':'rotate(-90deg)','-webkit-transform':'rotate(-90deg)','-ms-transform':'rotate(-90deg)','-o-transform':'rotate(-90deg)','filter':'progid:DXImageTransform.Microsoft.BasicImage(rotation=3)'});} var label={el:lbl};label.text=function(txt){if(arguments.length){$('span',lbl).html(txt);return label;} return $('span',lbl).html();};label.animate=function(_attrs,duration,easing){if(_attrs.align!=attrs.align){setTimeout(function(){lbl.css({'text-align':_attrs.align});},duration?duration*0.5:10);} if(attrs.rotate&&_attrs.valign!=attrs.valign){setTimeout(function(){lbl.css({'text-align':_attrs.valign=='top'?'right':'left'});},duration?duration*0.5:10);} if(_attrs.txt!=attrs.txt)label.text(_attrs.txt);$.extend(attrs,_attrs);var _css=$.extend({},attrs.css,position());return duration?lbl.stop().animate(_css,duration,easing):lbl.css(_css);};label.attr=label.animate;label.data=function(){return lbl.data.apply(lbl,arguments);};label.hide=function(){return lbl.hide.apply(lbl,arguments);};label.show=function(){return lbl.show.apply(lbl,arguments);};label.width=function(){return lbl.width.apply(lbl,arguments);};label.height=function(){return lbl.height.apply(lbl,arguments);};label.left=function(){return lbl.offset().left;};label.top=function(){return lbl.offset().top;};label.on=function(){return lbl.on.apply(lbl,arguments);};label.hasClass=function(){return lbl.hasClass.apply(lbl,arguments);};label.addClass=function(){return lbl.addClass.apply(lbl,arguments);};label.removeClass=function(){return lbl.removeClass.apply(lbl,arguments);};label.remove=function(){return lbl.remove.apply(lbl,arguments);};lbl.data('label',label);return label;},labelWidth:function(txt,className,fontSize){var lbl,span,$span,ow,root=this.__root.get(0);lbl=document.createElement('div');lbl.style.position='absolute';lbl.style.left='-10000px';span=document.createElement('span');lbl.appendChild(span);$span=$(span);root.appendChild(lbl);ow=!_.isUndefined(span.offsetWidth)?function(){return span.offsetWidth;}:function(){return $span.outerWidth();};function labelWidth(txt,className,fontSize){lbl.setAttribute('class','label '+(className?' '+className:''));span.style.fontSize=fontSize?fontSize:null;span.innerHTML=txt;return ow();} this.labelWidth=labelWidth;return labelWidth(txt,className,fontSize);},labelHeight:function(txt,className,width,fontSize){var lbl,span,$span,oh,root=this.__root.get(0);lbl=document.createElement('div');lbl.style.position='absolute';lbl.style.left='-10000px';span=document.createElement('span');lbl.appendChild(span);$span=$(span);root.appendChild(lbl);oh=!_.isUndefined(span.offsetHeight)?function(){return span.offsetHeight;}:function(){return $span.height();};function labelHeight(txt,className,width,fontSize){lbl.setAttribute('class','label '+(className?' '+className:''));lbl.style.width=width+'px';span.style.fontSize=fontSize?fontSize:null;span.innerHTML=txt;return oh();} this.labelHeight=labelHeight;return labelHeight(txt,className,width,fontSize);},orderSeriesElements:function(){var me=this;_.each(me.dataset.columns(),function(column){if(me.chart().isHighlighted(column)){_.each(me.__elements[column.name()],function(el){el.toFront();});}});},getKeyByPoint:function(x,y,evt){var me=this,el=me.__canvas.paper.getElementByPoint(x,y);if(!el){el=$(evt.target);if(!el.hasClass('label'))el=el.parents('.label');} if(el&&el.data('key'))return el.data('key');return null;},getKeyByLabel:function(){var me=this;if(me.__hoveredLabel){lbl=$(me.__hoveredLabel);if(me.__hoveredLabel.nodeName.toLowerCase()=='span')lbl=lbl.parent();if(lbl.data('key'))return lbl.data('key');} return null;},getDataRowByPoint:function(x,y){throw'getDataRowByPoint() needs to be implemented by each visualization';},_baseColor:function(){var me=this,base=me.get('base-color',0),palette=me.theme().colors.palette,fromPalette=!_.isString(base);return fromPalette?palette[base]:base;},_getColor:function(series,row,opts){var me=this,key=opts.key;if(!key&&series){key=series.name();} if(key){var customColors=me.get('custom-colors',{});if(customColors[key])return customColors[key];} if(opts.byValue&&series){return opts.byValue(series.val(row));} if(series&&me.__colors&&me.__colors[key]){return me.__colors[key];} var palette=me.theme().colors.palette,baseColor=me._baseColor();if(opts.usePalette){return palette[(Math.max(0,palette.indexOf(baseColor))+row)%palette.length];} if(opts.varyLightness){var lab=chroma.color(baseColor).lab(),minL=Math.min(lab[0],50),maxL=91,f=row /(me.dataset.numRows()-1);return chroma.lab(minL+f*(maxL-minL),lab[1],lab[2]).hex();} return baseColor;},getColor:function(series,row,opts){var me=this,chart=me.chart(),color=me._getColor(series,row,opts);if(series&&chart.hasHighlight()&&!chart.isHighlighted(series)){return chroma.interpolate(color,me.theme().colors.background,0.65,'rgb').hex();} return color;},getKeyColor:function(_key,_value,_useNegativeColor,_colorful){var me=this,palette=me.theme().colors.palette,colorByRow=me.meta['color-by']=='row',colorCache={};function keyColor(key,value,useNegativeColor,colorful){var color;key=String(key);var userCustomColors=me.get('custom-colors',{});if(userCustomColors[key]){color=userCustomColors[key];}else if(value&&useNegativeColor){color=me.theme().colors[value<0?'negative':'positive'];}else{if(key&&me.__customColors&&me.__customColors[key]) color=me.__customColors[key];else color=me._baseColor();} var key_color=chroma.hex(color),bg_color=chroma.hex(me.theme().colors.background),bg_lch=bg_color.lch();if(key&&!me.chart().isHighlighted(key)){if(!colorCache[color+'-hl']){colorCache[color+'-hl']=chroma.interpolate(key_color,bg_color,bg_lch[0]<60?0.7:0.63);} return colorCache[color+'-hl'];} return color;} me.getKeyColor=keyColor;return keyColor(_key,_value,_useNegativeColor,_colorful);},setKeyColor:function(key,color){var me=this;if(!me.__customColors)me.__customColors={};me.__customColors[key]=color;},getYTicks:function(yscale,h,noDomain,useLogScale){var me=this,domain=yscale.domain(),ticks=useLogScale?dw.utils.logTicks(domain[0],domain[1]):yscale.ticks(h / 80),bt=yscale(ticks[0]),tt=yscale(ticks[ticks.length-1]);if(!noDomain){if(Math.abs(yscale(domain[0])-bt)<30)ticks.shift();if(Math.abs(tt-yscale(domain[1]))<30)ticks.pop();ticks.unshift(domain[0]);ticks.push(domain[1]);} return ticks;},invertLabel:function(col){var c=chroma.color(col),bg=chroma.color(this.theme().colors.background);return bg.lab()[0]>60?c.lab()[0]<80:c.lab()[0]>60;},signature:function(){var me=this,sig={type:'raphael-chart',el:{}};$.each(me.__elements,function(key,elements){sig.el[key]=elements.length;});return sig;},addLegend:function(items,container){var me=this,l=$('
'),xo=me.__canvas.lpad;_.each(items,function(item){div=$('
');div.css({background:item.color,width:12,height:12,position:'absolute',left:xo,top:1});l.append(div);lbl=me.label(xo+15,0,item.label,{valign:'left',root:l});xo+=me.labelWidth(item.label)+30;});l.css({position:'relative'});container.append(l);},optimizeLabelPositions:function(labels,pad,valign){if(!labels.length)return;var i=1,c=valign=='top'?0:valign=='middle'?0.5:1,min_y=labels[0].el.parent().offset().top,max_y=min_y+labels[0].el.parent().height();labels=_.filter(labels,function(lbl){return lbl.el.is(":visible");});if(!labels.length)return;_.each(labels,function(lbl){lbl.__noverlap={otop:lbl.top(),top:lbl.top(),dy:0};lbl.height('auto');});(function loop(){var overlap=false;_.each(labels,function(lbl0,p){_.each(labels,function(lbl1,q){if(q>p){var l0=lbl0.left(),l1=lbl1.left(),r0=l0+lbl0.width(),r1=l1+lbl1.width(),t0=lbl0.__noverlap.top-pad,t1=lbl1.__noverlap.top-pad,b0=t0+lbl0.height()+pad*2,b1=t1+lbl1.height()+pad*2,dy,l0up;if(!(l1>r0||r1b0||b1').addClass('legend').appendTo(el).css({position:'absolute',top:0,left:0});_.each(all_series,renderLine);if(axesDef.y1.length>1){if(legend.pos=='direct'){vis.optimizeLabelPositions(legend_labels,3,'top');}else if(legend.pos=='inside-right'){legend.cont.css({left:c.w-legend.xoffset-c.rpad});}} addAreaFills();vis.orderSeriesElements();initMouseActions();if(theme.frameStrokeOnTop){if(theme.frame&&vis.get('show-grid',false)){frame().attr({fill:false});}} if(vis.get('user-change-scale',false))addScaleChangeUI();vis.renderingComplete();if(axesDef.y1.length>1&&!lineLabelsVisible()){vis.notify(vis.translate('tooManyLinesToLabel'));} function initMargins(){c=vis.initCanvas({h:h,bpad:vis.get('rotate-x-labels')?bpad+20:bpad});if(lineLabelsVisible()&&legend.pos!='direct'&&legend.pos!='right'){c.tpad+=20;c.rpad=0;} if(vis.get('user-change-scale',false)){c.bpad+=25;} if(lineLabelsVisible()&&(legend.pos=='direct'||legend.pos=='right')){c.labelWidth=0;dataset.eachColumn(function(col){c.labelWidth=Math.max(c.labelWidth,vis.labelWidth(col.name(),'series highlighted'));});if(c.labelWidth>this.__w*0.25){c.labelWidth=this.__w*0.25;} c.rpad+=c.labelWidth+20;if(legend.pos=='right')c.rpad+=15;}else{c.rpad+=5;} if(legend.pos!='direct'&&legend.pos!='right'){c.rpad+=0.25*vis.labelWidth(vis.axes(true).x.val(-1));legend.xoffset+=c.lpad;} c.lpad2=yAxisWidth(h);} function frame(){return c.paper.rect(c.lpad+c.lpad2,c.tpad,c.w-c.rpad-c.lpad-c.lpad2,c.h-c.bpad-c.tpad).attr(theme.frame);} function renderLine(col,index){var paths=[],pts_=[],pts=[],x,y,sw,connectMissingValuePath=[],last_valid_y;col.each(buildPathPoints);if(pts.length>0)pts_.push(pts);_.each(pts_,function(pts){paths.push("M"+[pts.shift(),pts.shift()]+(vis.get('line-mode')=='curved'?"R":"L")+pts);});sw=lineWidth(col);var palette=theme.colors.palette.slice();if(legend.pos!='direct'&&all_series.length>1){vis.setKeyColor(col.name(),palette[(seriesColIndex+baseCol)%palette.length]);seriesColIndex++;} var strokeColor=lineColor(col);all_paths.push(paths);_.each(paths,renderPath);renderMissingValueConnections();if(lineLabelsVisible())renderLabels();function buildPathPoints(val,i){if(!_.isNumber(val)){if(pts.length>0){pts_.push(pts);pts=[];} return;} x=scales.x(useDateFormat()?rowName(i):i);y=scales.y(val);if(pts.length===0&&pts_.length>0){var lp=pts_[pts_.length-1],s=lp.length-2;connectMissingValuePath.push('M'+[lp[s],lp[s+1]]+'L'+[x,y]);} if(vis.get('line-mode')=='stepped'&&last_valid_y!==undefined){pts.push(x,last_valid_y);} pts.push(x,y);last_valid_y=y;} function renderPath(path){vis.registerElement(c.paper.path(path).attr({'stroke-width':sw,'stroke-linecap':'round','stroke-linejoin':'round','stroke-opacity':1,'stroke':strokeColor}),col.name());vis.registerElement(c.paper.path(path).attr({'stroke-width':sw*4,'opacity':0}),col.name());} function renderMissingValueConnections(){if(vis.get('connect-missing-values',false)){vis.registerElement(c.paper.path(connectMissingValuePath).attr({'stroke-width':sw*0.35,'stroke-dasharray':'- ',stroke:strokeColor}),col.name());}} function renderLabels(){var visible=all_series.length<10||chart.isHighlighted(col),div,lbl,lblx=x+10,lbly=last_valid_y,valign='top';if(visible){if(legend.pos=='right'){lblx+=15;lbly=legend.yoffset;div=$('
');div.css({background:strokeColor,width:10,height:10,position:'absolute',left:x+10,top:lbly+3});legend.cont.append(div);}else if(legend.pos=='top'||legend.pos.substr(0,6)=='inside'){lblx=legend.xoffset+15;lbly=legend.yoffset;div=$('
');div.css({background:strokeColor,width:10,height:10,position:'absolute',left:legend.xoffset,top:lbly+3});legend.cont.append(div);legend.xoffset+=vis.labelWidth(col.name(),'series')+30;}} lbl=vis.label(lblx,lbly,col.title(),{cl:chart.isHighlighted(col)?'highlighted series':'series',w:c.labelWidth,valign:valign,root:legend.cont});legend_labels.push(lbl);if(!visible)lbl.hide();if(legend.pos=='right'){legend.yoffset+=lbl.height('auto').height()+5;} lbl.data('highlighted',chart.isHighlighted(col));vis.registerLabel(lbl,col.name(),col.name(),-1);}} function initMouseActions(){el.mousemove(onMouseMove);$('.chart').mouseenter(function(){$('.label.x-axis').css({opacity:0.4});$('.label.tooltip').show();}).mouseleave(function(){$('.label.x-axis').css({opacity:1});if(vis.__xlab)vis.__xlab.remove();vis.__xlab=null;$('.label.tooltip').hide();_.each(vis.__labels,function(labels){_.each(labels,function(l){l.show();});});});} function useDateFormat(){return axesDef.x.type()=='date'&&_.filter(axesDef.x.values(),_.isDate).length==axesDef.x.length;} function rowName(r){return axesDef.x.val(r);} function xScale(){if(useDateFormat()){return d3.time.scale().domain([rowName(0),rowName(-1)]);}else{if(axesDef.x.type()=='date'){vis.notify(vis.translate('couldNotParseAllDates'));} return d3.scale.linear().domain([0,dataset.numRows()-1]);}} function yScale(){var scale,domain=[Number.MAX_VALUE,Number.MAX_VALUE*-1];_.each(axesDef.y1,function(col){domain[0]=Math.min(domain[0],col.range()[0]);domain[1]=Math.max(domain[1],col.range()[1]);});y1Domain=domain;if(vis.get('baseline-zero',false)||vis.get('fill-below',false)){if(domain[0]>0)domain[0]=0;if(domain[1]<0)domain[1]=0;} scale=useLogScale?'log':'linear';if(scale=='log'&&domain[0]===0)domain[0]=0.03;return d3.scale[scale]().domain(domain);} function lineLabelsVisible(){return axesDef.y1.length>1&&(axesDef.y1.length<15||chart.hasHighlight());} function yAxisWidth(h){var ticks=vis.getYTicks(scales.y,h,extendRange,useLogScale),maxw=0;_.each(ticks,function(val,t){val=formatter.y1(val,false);maxw=Math.max(maxw,vis.labelWidth(val));});return maxw+20;} function drawYAxis(){var domain=y1Domain,styles=vis.__styles,ticks=vis.getYTicks(scales.y,c.h,extendRange,useLogScale);if(!extendRange&&ticks[ticks.length-1]!=domain[1])ticks.push(domain[1]);if($('body').hasClass('fullscreen')){theme.horizontalGrid['stroke-width']=2;} _.each(ticks,function(val,t){var y=scales.y(val),x=c.lpad;if(val>=domain[0]&&val<=domain[1]||extendRange){vis.label(x+2,y-10,formatter.y1(val,t==ticks.length-1),{align:'left',cl:'axis'});if(theme.yTicks){vis.path([['M',c.lpad-25,y],['L',c.lpad-20,y]],'tick');} if(theme.horizontalGrid){vis.path([['M',c.lpad,y],['L',c.w-c.rpad,y]],'grid').attr(theme.horizontalGrid);}}});if(domain[0]<=0&&domain[1]>=0){y=scales.y(0);vis.path([['M',c.lpad,y],['L',c.w-c.rpad,y]],'axis').attr(theme.xAxis);}} function drawXAxis(){var rotate45=vis.get('rotate-x-labels'),labels=axesDef.x.raw(),k=labels.length-1;if(useDateFormat())return drawDateAxis();var last_label_x=-100,min_label_distance=rotate45?30:0;axesDef.x.each(function(val,i){min_label_distance=Math.max(min_label_distance,vis.labelWidth(val));});function addlbl(x,val,i,low){var y=c.h-c.bpad+theme.lineChart.xLabelOffset,lbl;if(!val)return;if(rotate45)x-=5;lbl=vis.label(x,y,val,{align:'center',cl:'axis x-axis'+(rotate45?' rotate45':'')});} addlbl(scales.x(0),labels[0],0);var cl='axis x-axis',lw,x,l0=scales.x(0)+vis.labelWidth(labels[0],cl)*0.6,l1=scales.x(k)-vis.labelWidth(labels[k],cl)*0.6;for(var i=1;il0&&x+lw*0.6axesDef.x.length){ticks=axesDef.x.values();real_data_as_ticks=true;} _.each(ticks,function(date,i){new_day=date.getDate()!=last_day;new_month=date.getMonth()!=last_month;new_quarter=new_month&&(date.getMonth()%3===0);new_year=date.getFullYear()!=last_year;new_decade=new_year&&date.getFullYear()%10===0;var x=scales.x(date),y=c.h-c.bpad+theme.lineChart.xLabelOffset,lbl=tickFormat(date);if(fmt=='YYYY'&&i>0&&i9&&daysDelta<=35&&date.getDay()==Globalize.culture().calendar.firstDay)||(daysDelta>35&&daysDelta<=180&&new_month)||(daysDelta>180&&daysDelta<=500&&new_quarter)||(daysDelta>500&&daysDelta<3650&&new_year)||(daysDelta>=3650&&new_decade))||real_data_as_ticks){if(theme.horizontalGrid){vis.path('M'+[x,c.h-c.bpad]+'V'+c.tpad,'grid').attr(theme.horizontalGrid);}}else{l.el.addClass('minor-tick');} last_day=date.getDate();last_month=date.getMonth();last_year=date.getFullYear();});} function lineWidth(column){var fs_scale=$('body').hasClass('fullscreen')?1.5:1,scale=chart.hasHighlight()?chart.isHighlighted(column)?1:0.65:1;return theme.lineChart.strokeWidth*fs_scale*scale;} function lineColor(column){var bgcol=chroma.hex(theme.colors.background),bglum=bgcol.luminance(),col=chroma.hex(vis.getKeyColor(column.name())),min_contrast=chart.hasHighlight()?(chart.isHighlighted(column)?4.5:1.45):1.7,i=0;while(chroma.contrast(bgcol,col)0.5)col=col.darken(5);else col=col.brighten(5);} return col.hex();} function onMouseMove(e){var x=e.pageX,y=e.pageY,moKey=vis.getKeyByPoint(x,y,e),moColumn=moKey?dataset.column(moKey):null,row=dataRowByPoint(x,y,e),hoveredNode=moColumn!==null,xLabelTop=c.h-c.bpad+theme.lineChart.xLabelOffset,xlabel=vis.__xlab=vis.__xlab||vis.label(x,xLabelTop,'foo',{cl:'axis x-axis h',align:'center',css:{background:theme.colors.background,zIndex:100}});var lx=scales.x(useDateFormat()?rowName(row):row),lfmt=formatter.x,lw=vis.labelWidth(lfmt(rowName(row)),'axis x-axis')+10;xlabel.text(lfmt(rowName(row)));xlabel.attr({x:lx,y:xLabelTop,w:lw});var spaghetti=dataset.numColumns()>3;var valueLabels=[];_.each(axesDef.y1,function(column){var lbl;if(column.__label&&column.__label.el.parent().length){lbl=column.__label;}else{if(column.__label)delete column.__label;lbl=column.__label=vis.label(0,0,'0',{cl:'tooltip'+(vis.getKeyColor(column.name())?' inverted':''),align:'center',valign:'middle',css:{background:lineColor(column)}});} var val=formatter.y1(column.val(row));lbl.data('key',column.name());lbl.data('row',0);lbl.text(val);lbl.attr({x:lx,y:scales.y(column.val(row))-21,w:vis.labelWidth(val)+10});if(isNaN(column.val(row))){lbl.hide();}else{lbl.show();} valueLabels.push(lbl);if(spaghetti){if(!(column==moColumn||chart.hasHighlight()&&chart.isHighlighted(column)))lbl.hide();var hide_label=chart.hasHighlight()&&!chart.isHighlighted(column)&&(column!=moColumn);if(vis.get('direct-labeling')){if(hide_label){$.each(vis.getLabels(column.name()),function(i,l){l.hide();});}else{$.each(vis.getLabels(column.name()),function(i,l){l.show();});}}else{if(hide_label){$.each(vis.getLabels(column.name()),function(i,l){l.el.css('text-decoration','none');});}else{if(!chart.isHighlighted(column.name()))$.each(vis.getLabels(column.name()),function(i,l){l.el.css('text-decoration','underline');});}}}});vis.optimizeLabelPositions(valueLabels,3,'middle');return;} function dataRowByPoint(x,y){x-=vis.__root.offset().left;y-=vis.__root.offset().top;if(useDateFormat()){var mouse_date=scales.x.invert(x),min_dist=Number.MAX_VALUE,closest_row=0;axesDef.x.each(function(date,i){var dist=Math.abs(date.getTime()-mouse_date.getTime());if(dist2?'R'+h1+'R'+h2:'L'+h1+'L'+h2));h1=[pt.x,pt.y];h2=[pt.x,pt.y];});while(s1*22?'R'+h1+'L'+[h2.shift(),h2.shift()]+'R'+h2:'L'+h1+'L'+h2));$.each([f1,f2],function(i,fills){_.each(fills,function(path){addFill(all_series[i],path);});});}}else vis.warn('Warning: Area filling is not supported for lines with missing values.');}else vis.warn('Warning: Filling is only supported for exactly two lines.');} function addFill(series,path){c.paper.path(path).attr({fill:lineColor(series),'fill-opacity':theme.lineChart.fillOpacity,stroke:false});}} function addScaleChangeUI(){var div=$('
').addClass('filter-ui').appendTo($('#header')),id="use-log-"+_.random(10000),chk=$('').attr('id',id).prop('checked',useLogScale).appendTo(div),lbl=$('