/* * datawrapper / vis / bar-chart v1.5.1 * generated on 2014-01-20T14:58:40+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;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');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 columns=[],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){var me=this;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,nonEqual=true,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||b1me.axesDef.bars.length?0:row;} me.__lastRow=row;if(!me.getBarColumn())return;var sliceColumns=_.map(me.axesDef.bars,function(i){return dataset.column(i);}),filter=dw.utils.filter(dw.utils.columnNameColumn(sliceColumns),row),filterUI=filter.ui(me);if(filterUI){$('#header').append(filterUI);filter.change(function(val,i){me.__lastRow=i;me.update(i);});} var c=me.initCanvas({h:Math.max(dw.utils.getMaxChartHeight(el)+5,18*1.35*me.getBarColumn().length+5)});var chart_width=c.w-c.lpad-c.rpad,series_gap=0.05,row_gap=0.01,formatValue=me.chart().columnFormatter(me.getBarColumn()),barvalues=me.getBarValues(sortBars,reverse);me.init();me.initDimensions();$('.tooltip').hide();c.lastBarY=0;function render(barv){var d=me.barDimensions(barv,s,row),lpos=me.labelPosition(barv,s,row),fill=me.getKeyColor(barv.name,barv.value,useNegativeColor),stroke=chroma.color(fill).darken(14).hex();var bar=me.registerElement(c.paper.rect(d.x,d.y,d.width,d.height).attr({'stroke':stroke,'fill':fill}).data('strokeCol',stroke),barv.name);if(me.theme().barChart.barAttrs){bar.attr(me.theme().barChart.barAttrs);} if(lpos.show_val){me.registerLabel(me.label(lpos.val_x,lpos.top,formatValue(barv.value,true),{align:lpos.val_align,cl:'value'+lpos.lblClass}),barv.name);} if(lpos.show_lbl){me.registerLabel(me.label(lpos.lbl_x,lpos.top,barv.name,{w:Math.min(me.labelWidth(barv.name,'series')+20,MAX_LABEL_WIDTH),align:lpos.lbl_align,valign:'middle',cl:'series'+lpos.lblClass}),barv.name,me.axes().labels,barv.row);} c.lastBarY=Math.max(c.lastBarY,d.y+d.height);if(s==barvalues.length-1)complete();s++;} var barGroups=_.groupBy(barvalues,function(bar,i){return Math.floor(i/10);});var s=0;_.each(barGroups,function(bars){_.defer(function(){_.each(bars,render);});});function complete(){if(me.__domain[0]<0){var x=c.lpad+c.zero;me.__yaxis=me.path('M'+[x,c.tpad]+'V'+c.lastBarY,'axis').attr(me.theme().yAxis);} el.mousemove(_.bind(me.onMouseMove,me));me.renderingComplete();}},getBarValues:function(sortBars,reverse){var me=this,values=[],filter=me.__lastRow,labels=me.axes(true).labels,column=me.getBarColumn(filter),fmt=me.chart().columnFormatter(labels);column.each(function(val,i){values.push({name:fmt(labels.val(i)),value:val,row:i});});if(sortBars)values.sort(function(a,b){return(isNaN(b.value)?0:b.value)-(isNaN(a.value)?0:a.value);});if(reverse)values.reverse();return values;},getBarColumn:function(){var me=this,filter=me.__lastRow;if(_.isUndefined(filter))throw'filter must not be undefined';return me.axes(true).bars[filter];},update:function(row){var me=this,formatValue=me.chart().columnFormatter(me.getBarColumn());me.initDimensions();_.each(me.getBarValues(me.get('sort-values',false)),function(bar,s){_.each(me.__elements[bar.name],function(rect){var dim=me.barDimensions(bar,s,row);dim.fill=me.getKeyColor(bar.name,bar.value,me.get('negative-color',false));dim.stroke=chroma.color(dim.fill).darken(14).hex();rect.animate(dim,me.theme().duration,me.theme().easing);});_.each(me.__labels[bar.name],function(lbl){var pos=me.labelPosition(bar,s,row),lpos;if(lbl.hasClass('value')){lbl.text(formatValue(bar.value));lpos={halign:pos.val_align,left:pos.val_x,top:pos.top};}else if(lbl.hasClass('series')){lpos={halign:pos.lbl_align,left:pos.lbl_x,top:pos.top};} if(lpos){lbl.animate({align:lpos.halign,x:lpos.left,y:lpos.top},me.theme().duration,me.theme().easing);}});});if(me.__domain[0]<0){var c=me.__canvas,x=c.lpad+c.zero,p='M'+[x,c.tpad]+'V'+c.lastBarY;if(me.__yaxis){me.__yaxis.animate({path:p,opacity:1},me.theme().duration,me.theme().easing);}else{me.__yaxis=me.path(p,'axis').attr(me.theme().yAxis);}}else if(me.__yaxis){me.__yaxis.animate({opacity:0},me.theme().duration*0.5,me.theme().easing);}},initDimensions:function(){var me=this,c=me.__canvas,w=c.w-c.lpad-c.rpad-30,column=me.getBarColumn(),bars=me.getBarValues(),formatValue=me.chart().columnFormatter(column),domain=me.get('absolute-scale',false)?dw.utils.minMax(_.map(me.axesDef.bars,function(c){return me.dataset.column(c);})):column.range();if(domain[0]>0)domain[0]=0;if(domain[1]<0)domain[1]=0;me.__domain=domain;me.__scales={y:d3.scale.linear().domain(domain)};var maxw=[0,0,0,0],ratio,largestVal=[0,0],lw;_.each(bars,function(bar){if(isNaN(bar.value))return;var neg=bar.value<0;largestVal[neg?1:0]=Math.max(largestVal[neg?1:0],Math.abs(bar.value));});me.__longLabels=false;_.each(_.first(bars,50),function(bar){if(isNaN(bar.value))return;var neg=bar.value<0,t=neg?2:0,bw;bw=Math.abs(bar.value)/(largestVal[0]+largestVal[1])*w;lw=me.labelWidth(bar.name,'series');if(lw>MAX_LABEL_WIDTH)me.__longLabels=true;maxw[t]=Math.max(maxw[t],Math.min(lw,MAX_LABEL_WIDTH)+20);maxw[t+1]=Math.max(maxw[t+1],me.labelWidth(me.chart().formatValue(bar.value,true),'value')+20+bw);});c.left=0;c.right=0;c.zero=largestVal[1]/(largestVal[0]+largestVal[1])*w;var maxNegBar=c.zero;c.left=Math.max(maxw[0],maxw[3])-c.zero;c.right=Math.max(maxw[1],maxw[2])-(w-c.zero);w-=c.left+c.right;c.zero=c.left+largestVal[1]/(largestVal[0]+largestVal[1])*w;c.maxSeriesLabelWidth=[maxw[0],maxw[2]];c.maxValueLabelWidth=[maxw[1],maxw[3]];me.__scales.y.rangeRound([c.lpad,w]);},barDimensions:function(bar,s,r){var me=this,w,h,x,y,i,cw,n=me.getBarValues().length,sc=me.__scales,c=me.__canvas,bw,pad=0.35,vspace=0.1,val=bar.value;if(isNaN(val))val=0;cw=c.h-c.bpad-c.tpad;bw=Math.max(18,Math.min(50,cw/(n+(n-1)*pad)));w=sc.y(val)-sc.y(0);h=bw;if(w>0){x=c.lpad+c.zero;}else{x=c.lpad+c.zero+w;w*=-1;} if(val!==0)w=Math.max(1,w);y=Math.round(c.tpad+s*(bw+bw*pad));return{width:w,height:h,x:x,y:y};},labelPosition:function(bar,s,r){var me=this,d=me.barDimensions(bar,s,r),formatValue=me.chart().columnFormatter(me.getBarColumn()),c=me.__canvas,val=bar.value,lbl_left=val>=0||isNaN(val),lbl_x=lbl_left?c.zero-10:c.zero+10,lbl_align=lbl_left?'right':'left',val_x=lbl_left?d.x+d.width+10:d.x-10,val_align=lbl_left?'left':'right',show_lbl=true,show_val=true,lblClass=me.chart().hasHighlight()&&me.chart().isHighlighted(bar)?' highlighted':'';if(me.__longLabels&&me.__domain[0]>=0){lbl_align=lbl_left?'left':'right';lbl_x=c.lpad;} return{lblClass:lblClass,val_align:val_align,show_lbl:show_lbl,show_val:show_val,lbl_align:lbl_align,lbl_x:lbl_x,val_x:val_x,top:d.y+d.height*0.5};},getDataRowByPoint:function(x,y){return 0;},showTooltip:function(){},hideTooltip:function(){},hover:function(hover_key){var me=this,barvalues=me.getBarValues(),l=barvalues.length;_.each(barvalues,function(bar){_.each(me.__labels[bar.name],function(lbl){if(hover_key!==undefined&&bar.name==hover_key){lbl.addClass('hover');}else{lbl.removeClass('hover');}});if(l>50)return;_.each(me.__elements[bar.name],function(el){var fill=me.getKeyColor(bar.name,bar.value,me.get('negative-color',false)),stroke;if(hover_key!==undefined&&bar.name==hover_key)fill=chroma.color(fill).darken(14).hex();stroke=chroma.color(fill).darken(14).hex();if(el.attrs.fill!=fill||el.attrs.stroke!=stroke) el.animate({fill:fill,stroke:stroke},50);});});},unhoverSeries:function(){this.hoverSeries();}});}).call(this);