/* * datawrapper / vis / data-table v1.7.1 * generated on 2014-12-19T17:15:04+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');tr=$('');var colType=[];dataset.eachColumn(function(column){th=$(''+column.title()+'');if(isHighlighted(column)){th.addClass('highlight');} var number_count=0;column.each(function(val){if(_.isNumber(val))number_count++;});colType.push(column.type());tr.append(th);});$('thead',table).append(tr);_.each(_.range(dataset.numRows()),function(r){tr=$('');var highlighted_rows=me.get('highlighted-rows');if(_.isArray(highlighted_rows)&&_.indexOf(highlighted_rows,"Row "+(me.chart().rowLabel(r)+1))>=0){tr.addClass('highlight');} dataset.eachColumn(function(column,s){var cell_content=me.chart().columnFormatter(column)(column.val(r),true);if(cell_content=="n/a"){cell_content="—";} if(column.type()=='number'){cell_content+=''+column.val(r)+'';}else if(column.type()=='date'){cell_content+='';if(_.isDate(column.val(r)))cell_content+=column.val(r).getTime();cell_content+='';} td=$(''+cell_content+'');if(isHighlighted(column)){td.addClass('highlight');} td.addClass(column.type());if(cell_content=="—")td.addClass("not-available");td.attr('title',column.title());tr.append(td);});$('tbody',table).append(tr);});el.append(table);if(me.get('table-responsive')){table.addClass('responsive');} var datatable_i18n={"sEmptyTable":me.translate("sEmptyTable"),"sInfo":me.translate("sInfo"),"sInfoEmpty":me.translate("sInfoEmpty"),"sInfoFiltered":me.translate("sInfoFiltered"),"sInfoPostFix":"","sInfoThousands":me.translate("sInfoThousands"),"sLengthMenu":me.translate("sLengthMenu"),"sLoadingRecords":me.translate("sLoadingRecords"),"sProcessing":me.translate("sProcessing"),"sSearch":me.translate("sSearch"),"sZeroRecords":me.translate("sZeroRecords"),"oPaginate":{"sFirst":me.translate("oPaginate_sFirst"),"sLast":me.translate("oPaginate_sLast"),"sNext":me.translate("oPaginate_sNext"),"sPrevious":me.translate("oPaginate_sPrevious")},"oAria":{"sSortAscending":me.translate("oAria_sSortAscending"),"sSortDescending":me.translate("oAria_sSortDescending")}};jQuery.extend(jQuery.fn.dataTableExt.oSort,{"formatted-num-pre":function(a){return parseFloat($('span.raw-sortable',''+a+'').html());},"formatted-num-asc":function(a,b){return(isNaN(a)?0:a)-(isNaN(b)?0:b);},"formatted-num-desc":function(b,a){return(isNaN(a)?0:a)-(isNaN(b)?0:b);},"formatted-date-pre":function(a){return parseInt($('span.raw-sortable',''+a+'').html(),10);},"formatted-date-asc":function(a,b){return(isNaN(a)?0:a)-(isNaN(b)?0:b);},"formatted-date-desc":function(b,a){return(isNaN(a)?0:a)-(isNaN(b)?0:b);},});var colum_types=[];_.each(colType,function(type,s){if(type=="number"){colum_types.push({"sType":"formatted-num"});}else if(type=="date"){colum_types.push({"sType":"formatted-date"});}else{colum_types.push({"sType":null});}});table.dataTable({"bPaginate":me.get('paginate',false),"bInfo":me.get('paginate',false),"bFilter":me.get('filter',false),"bSort":me.get('sortable',false),"oLanguage":datatable_i18n,"aoColumns":colum_types});if(!last_sort&&me.get('sort-by',false)){last_sort=[dataset.indexOf(me.get('sort-by')),me.get('sort-asc')?'asc':'desc'];} if(last_sort){table.fnSort([last_sort]);} $('thead th').click(function(){var th=$('th[aria-sort]',table),dir=th.attr('aria-sort');last_sort=[th.index(),dir.substr(0,dir.charAt(0)=='a'?3:4)];});el.append('
');me.renderingComplete();},keys:function(){return _.map(this.dataset.columns(),function(c){return c.name();});}});}).call(this);