2012-06-18 13:58:59 +00:00
( function ( ) { function c ( a , b , c ) { return function ( d , e , f ) { var g = a ( d ) , h = [ ] ; g < d && b ( g ) ; if ( f > 1 ) while ( g < e ) { var i = new Date ( + g ) ; c ( i ) % f || h . push ( i ) , b ( g ) } else while ( g < e ) h . push ( new Date ( + g ) ) , b ( g ) ; return h } } function b ( a , b ) { var c = [ 31 , 28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31 ] ; if ( a != 2 ) return c [ a - 1 ] ; if ( b % 4 != 0 ) return c [ 1 ] ; if ( b % 100 == 0 && b % 400 != 0 ) return c [ 1 ] ; return c [ 1 ] + 1 } var a = { version : "0.0.1a" , dev : ! 0 } ; window . nv = a , a . tooltip = { } , a . utils = { } , a . models = { } , a . charts = { } , a . graphs = [ ] , a . log = { } , a . dispatch = d3 . dispatch ( "render_start" , "render_end" ) , a . dispatch . on ( "render_start" , function ( b ) { a . log . startTime = + ( new Date ) } ) , a . dispatch . on ( "render_end" , function ( b ) { a . log . endTime = + ( new Date ) , a . log . totalTime = a . log . endTime - a . log . startTime , a . dev && console . log && console . log ( "total" , a . log . totalTime ) } ) , a . render = function b ( c ) { c = c || 1 , b . active = ! 0 , a . dispatch . render _start ( ) , setTimeout ( function ( ) { var d ; for ( var e = 0 ; e < c && ( graph = b . queue [ e ] ) ; e ++ ) d = graph . generate ( ) , typeof graph . callback == "function" && graph . callback ( d ) , a . graphs . push ( d ) ; b . queue . splice ( 0 , e ) , b . queue . length ? setTimeout ( arguments . callee , 0 ) : ( a . render . active = ! 1 , a . dispatch . render _end ( ) ) } , 0 ) } , a . render . queue = [ ] , a . addGraph = function ( b ) { typeof arguments [ 0 ] == "function" && ( b = { generate : arguments [ 0 ] , callback : arguments [ 1 ] } ) , a . render . queue . push ( b ) , a . render . active || a . render ( ) } , a . identity = function ( a ) { return a } , a . strip = function ( a ) { return a . replace ( /(\s|&)/g , "" ) } , d3 . time . monthEnd = function ( a ) { return new Date ( a . getFullYear ( ) , a . getMonth ( ) , 0 ) } , d3 . time . monthEnds = c ( d3 . time . monthEnd , function ( a ) { a . setUTCDate ( a . getUTCDate ( ) + 1 ) , a . setDate ( b ( a . getMonth ( ) + 1 , a . getFullYear ( ) ) ) } , function ( a ) { return a . getMonth ( ) } ) , function ( ) { var b = window . nv . tooltip = { } ; b . show = function ( b , c , d , e ) { var f = document . createElement ( "div" ) ; f . className = "nvtooltip" , d = d || "s" , e = e || 20 ; var g = document . getElementsByTagName ( "body" ) [ 0 ] ; f . innerHTML = c , f . style . left = 1 , f . style . top = 1 , f . style . opacity = 0 , g . appendChild ( f ) ; var h = parseInt ( f . offsetHeight ) , i = parseInt ( f . offsetWidth ) , j = a . utils . windowSize ( ) . width , k = a . utils . windowSize ( ) . height , l = g . scrollTop , m = g . scrollLeft , n , o ; switch ( d ) { case "e" : n = b [ 0 ] - i - e , o = b [ 1 ] - h / 2 , n < m && ( n = b [ 0 ] + e ) , o < l && ( o = l + 5 ) , o + h > l + k && ( o = l - h - 5 ) ; break ; case "w" : n = b [ 0 ] + e , o = b [ 1 ] - h / 2 , n + i > j && ( n = b [ 0 ] - i - e ) , o < l && ( o = l + 5 ) , o + h > l + k && ( o = l - h - 5 ) ; break ; case "n" : n = b [ 0 ] - i / 2 , o = b [ 1 ] + e , n < m && ( n = m + 5 ) , n + i > j && ( n = j - i - 5 ) , o + h > l + k && ( o = b [ 1 ] - h - e ) ; break ; case "s" : n = b [ 0 ] - i / 2 , o = b [ 1 ] - h - e , n < m && ( n = m + 5 ) , n + i > j && ( n = j - i - 5 ) , l > o && ( o = b [ 1 ] + 20 ) } f . style . left = n + "px" , f . style . top = o + "px" , f . style . opacity = 1 ; return f } , b . cleanup = function ( ) { var a = document . getElementsByClassName ( "nvtooltip" ) , b = [ ] ; while ( a . length ) b . push ( a [ 0 ] ) , a [ 0 ] . style . transitionDelay = "0 !important" , a [ 0 ] . style . opacity = 0 , a [ 0 ] . className = "nvtooltip-pending-removal" ; setTimeout ( function ( ) { while ( b . length ) { var a = b . pop ( ) ; a . parentNode . removeChild ( a ) } } , 500 ) } } ( ) , a . utils . windowSize = function ( ) { var a = { width : 640 , height : 480 } ; document . body && document . body . offsetWidth && ( a . width = document . body . offsetWidth , a . height = document . body . offsetHeight ) , document . compatMode == "CSS1Compat" && document . documentElement && document . documentElement . offsetWidth && ( a . width = document . documentElement . offsetWidth , a . height = document . documentElement . offsetHeight ) , window . innerWidth && window . innerHeight && ( a . width = window . innerWidth , a . height = window . innerHeight ) ; return a } , a . utils . windowResize = function ( a ) { var b = window . onresize ; window . onresize = function ( c ) { typeof b == "function" && b ( c ) , a ( c ) } } , a . models . axis = function ( ) { function e ( f ) { f . each ( function ( e ) { ( d . orient ( ) == "top" || d . orient ( ) == "bottom" ) && d . ticks ( Math . abs ( a . range ( ) [ 1 ] - a . range ( ) [ 0 ] ) / 100 ) ; var f = d3 . select ( this ) . selectAll ( "text.axislabel" ) . data ( [ b || null ] ) ; f . exit ( ) . remove ( ) ; switch ( d . orient ( ) ) { case "top" : f . enter ( ) . append ( "text" ) . attr ( "class" , "axislabel" ) . attr ( "text-anchor" , "middle" ) . attr ( "y" , 0 ) , f . attr ( "x" , a . range ( ) [ 1 ] / 2 ) ; break ; case "right" : f . enter ( ) . append ( "text" ) . attr ( "class" , "axislabel" ) . attr ( "transform" , "rotate(90)" ) . attr ( "y" , - 40 ) , f . attr ( "x" , - a . range ( ) [ 0 ] / 2 ) ; break ; case "bottom" : f . enter ( ) . append ( "text" ) . attr ( "class" , "axislabel" ) . attr ( "text-anchor" , "middle" ) . attr ( "y" , 25 ) , f . attr ( "x" , a . range ( ) [ 1 ] / 2 ) ; break ; case "left" : f . enter ( ) . append ( "text" ) . attr ( "class" , "axislabel" ) . attr ( "transform" , "rotate(-90)" ) . attr ( "y" , - 40 ) , f . attr ( "x" , - a . ra
2012-06-18 17:36:12 +00:00
d - b . top - b . bottom , q = d3 . select ( this ) . selectAll ( "g.wrap.line" ) . data ( [ a ] ) , r = q . enter ( ) . append ( "g" ) . attr ( "class" , "wrap nvd3 line" ) , s = r . append ( "defs" ) , t = r . append ( "g" ) , u = q . select ( "g" ) ; r . append ( "g" ) . attr ( "class" , "scatterWrap" ) ; var v = q . select ( ".scatterWrap" ) . datum ( a ) ; t . append ( "g" ) . attr ( "class" , "groups" ) , j . width ( o ) . height ( p ) , d3 . transition ( v ) . call ( j ) , q . attr ( "transform" , "translate(" + b . left + "," + b . top + ")" ) , s . append ( "clipPath" ) . attr ( "id" , "edge-clip-" + f ) . append ( "rect" ) , q . select ( "#edge-clip-" + f + " rect" ) . attr ( "width" , o ) . attr ( "height" , p ) , u . attr ( "clip-path" , i ? "url(#edge-clip-" + f + ")" : "" ) , v . attr ( "clip-path" , i ? "url(#edge-clip-" + f + ")" : "" ) ; var w = q . select ( ".groups" ) . selectAll ( ".group" ) . data ( function ( a ) { return a } , function ( a ) { return a . key } ) ; w . enter ( ) . append ( "g" ) . style ( "stroke-opacity" , 1e-6 ) . style ( "fill-opacity" , 1e-6 ) , d3 . transition ( w . exit ( ) ) . style ( "stroke-opacity" , 1e-6 ) . style ( "fill-opacity" , 1e-6 ) . remove ( ) , w . attr ( "class" , function ( a , b ) { return "group series-" + b } ) . classed ( "hover" , function ( a ) { return a . hover } ) . style ( "fill" , function ( a , b ) { return e [ b % 20 ] } ) . style ( "stroke" , function ( a , b ) { return e [ b % 20 ] } ) , d3 . transition ( w ) . style ( "stroke-opacity" , 1 ) . style ( "fill-opacity" , . 5 ) ; var z = w . selectAll ( "path" ) . data ( function ( a , b ) { return [ a . values ] } ) ; z . enter ( ) . append ( "path" ) . attr ( "class" , "line" ) . attr ( "d" , d3 . svg . line ( ) . x ( function ( a , b ) { return m ( g ( a , b ) ) } ) . y ( function ( a , b ) { return n ( h ( a , b ) ) } ) ) , d3 . transition ( w . exit ( ) . selectAll ( "path" ) ) . attr ( "d" , d3 . svg . line ( ) . x ( function ( a , b ) { return k ( g ( a , b ) ) } ) . y ( function ( a , b ) { return l ( h ( a , b ) ) } ) ) . remove ( ) , d3 . transition ( z ) . attr ( "d" , d3 . svg . line ( ) . x ( function ( a , b ) { return k ( g ( a , b ) ) } ) . y ( function ( a , b ) { return l ( h ( a , b ) ) } ) ) , m = k . copy ( ) , n = l . copy ( ) } ) ; return p } var b = { top : 0 , right : 0 , bottom : 0 , left : 0 } , c = 960 , d = 500 , e = d3 . scale . category20 ( ) . range ( ) , f = Math . floor ( Math . random ( ) * 1e4 ) , g = function ( a ) { return a . x } , h = function ( a ) { return a . y } , i = ! 1 , j = a . models . scatter ( ) . id ( f ) . size ( 16 ) . sizeDomain ( [ 16 , 256 ] ) , k = j . xScale ( ) , l = j . yScale ( ) , m = k , n = l , o ; p . dispatch = j . dispatch , d3 . rebind ( p , j , "interactive" , "size" , "xScale" , "yScale" , "zScale" , "xDomain" , "yDomain" , "sizeDomain" , "forceX" , "forceY" , "forceSize" , "clipVoronoi" , "clipRadius" ) , p . margin = function ( a ) { if ( ! arguments . length ) return b ; b = a ; return p } , p . width = function ( a ) { if ( ! arguments . length ) return c ; c = a ; return p } , p . height = function ( a ) { if ( ! arguments . length ) return d ; d = a ; return p } , p . x = function ( a ) { if ( ! arguments . length ) return g ; g = a , j . x ( a ) ; return p } , p . y = function ( a ) { if ( ! arguments . length ) return h ; h = a , j . y ( a ) ; return p } , p . clipEdge = function ( a ) { if ( ! arguments . length ) return i ; i = a ; return p } , p . color = function ( a ) { if ( ! arguments . length ) return e ; e = a , j . color ( a ) ; return p } , p . id = function ( a ) { if ( ! arguments . length ) return f ; f = a ; return p } ; return p } , a . models . lineChart = function ( ) { function q ( h ) { h . each ( function ( j ) { var r = d3 . select ( this ) , s = ( d || parseInt ( r . style ( "width" ) ) || 960 ) - b . left - b . right , t = ( e || parseInt ( r . style ( "height" ) ) || 400 ) - b . top - b . bottom , u = r . selectAll ( "g.wrap.lineChart" ) . data ( [ j ] ) , v = u . enter ( ) . append ( "g" ) . attr ( "class" , "wrap nvd3 lineChart" ) . append ( "g" ) ; v . append ( "g" ) . attr ( "class" , "x axis" ) , v . append ( "g" ) . attr ( "class" , "y axis" ) , v . append ( "g" ) . attr ( "class" , "linesWrap" ) , v . append ( "g" ) . attr ( "class" , "legendWrap" ) ; var w = u . select ( "g" ) ; f && ( n . width ( s ) , w . select ( ".legendWrap" ) . datum ( j ) . call ( n ) , b . top != n . height ( ) && ( b . top = n . height ( ) , t = ( e || parseInt ( r . style ( "height" ) ) || 400 ) - b . top - b . bottom ) , w . select ( ".legendWrap" ) . attr ( "transform" , "translate(0," + - b . top + ")" ) ) , i . width ( s ) . height ( t ) . color ( j . map ( function ( a , b ) { return a . color || c [ b % 10 ] } ) . filter ( function ( a , b ) { return ! j [ b ] . disabled } ) ) , w . attr ( "transform" , "translate(" + b . left + "," + b . top + ")" ) ; var x = w . select ( ".linesWrap" ) . datum ( j . filter ( function ( a ) { return ! a . disabled } ) ) ; d3 . transition ( x ) . call ( i ) , l . ticks ( s / 100 ) . tickSize ( - t , 0 ) , w . select ( ".x.axis" ) . attr ( "transform" , "translate(0," + k . range ( ) [ 0 ] + ")" ) , d3 . transition ( w . select ( ".x.axis" ) ) . call ( l ) , m . ticks ( t / 36 ) . tickSize ( - s , 0 ) , d3 . transition ( w . select ( ".y.axis" ) ) . call ( m ) , n . dispatch . on ( "legendClick" , function ( a , b ) { a . disabled = ! a . disabled , j . filter ( function ( a ) { return ! a . disabled } ) . length || j . map ( function ( a ) { a . disabled = ! 1 , u . selectAll ( ".series" ) . classed ( "disabled" , ! 1 ) ; return a } ) , h . transition ( ) . call ( q ) } ) , i . dispatch . on ( "elementMouseover.tooltip" , function ( a ) { a
] > 0 ? n : 0 ) ] ) : f . range ( [ 0 , w ] ) ; var B = d3 . select ( this ) . selectAll ( "g.wrap.multibarHorizontal" ) . data ( [ v ] ) , C = B . enter ( ) . append ( "g" ) . attr ( "class" , "wrap nvd3 multibarHorizontal" ) , D = C . append ( "defs" ) , E = C . append ( "g" ) ; E . append ( "g" ) . attr ( "class" , "groups" ) ; var F = B . select ( "g" ) ; B . attr ( "transform" , "translate(" + a . left + "," + a . top + ")" ) ; var G = B . select ( ".groups" ) . selectAll ( ".group" ) . data ( function ( a ) { return a } , function ( a ) { return a . key } ) ; G . enter ( ) . append ( "g" ) . style ( "stroke-opacity" , 1e-6 ) . style ( "fill-opacity" , 1e-6 ) , d3 . transition ( G . exit ( ) ) . style ( "stroke-opacity" , 1e-6 ) . style ( "fill-opacity" , 1e-6 ) . remove ( ) , G . attr ( "class" , function ( a , b ) { return "group series-" + b } ) . classed ( "hover" , function ( a ) { return a . hover } ) . style ( "fill" , function ( a , b ) { return k [ b % 10 ] } ) . style ( "stroke" , function ( a , b ) { return k [ b % 10 ] } ) , d3 . transition ( G ) . style ( "stroke-opacity" , 1 ) . style ( "fill-opacity" , . 75 ) ; var H = G . selectAll ( "g.bar" ) . data ( function ( a ) { return a . values } ) ; H . exit ( ) . remove ( ) ; var I = H . enter ( ) . append ( "g" ) . attr ( "transform" , function ( a , b , c ) { return "translate(" + s ( l ? a . y0 : 0 ) + "," + ( l ? 0 : c * e . rangeBand ( ) / v . length + e ( g ( a , b ) ) ) + ")" } ) . on ( "mouseover" , function ( a , b ) { d3 . select ( this ) . classed ( "hover" , ! 0 ) , t . elementMouseover ( { value : h ( a , b ) , point : a , series : v [ a . series ] , pos : [ f ( h ( a , b ) + ( l ? a . y0 : 0 ) ) , e ( g ( a , b ) ) + e . rangeBand ( ) * ( l ? v . length / 2 : a . series + . 5 ) / v . length ] , pointIndex : b , seriesIndex : a . series , e : d3 . event } ) } ) . on ( "mouseout" , function ( a , b ) { d3 . select ( this ) . classed ( "hover" , ! 1 ) , t . elementMouseout ( { value : h ( a , b ) , point : a , series : v [ a . series ] , pointIndex : b , seriesIndex : a . series , e : d3 . event } ) } ) . on ( "click" , function ( a , b ) { t . elementClick ( { value : h ( a , b ) , point : a , series : v [ a . series ] , pos : [ e ( g ( a , b ) ) + e . rangeBand ( ) * ( l ? v . length / 2 : a . series + . 5 ) / v . length , f ( h ( a , b ) + ( l ? a . y0 : 0 ) ) ] , pointIndex : b , seriesIndex : a . series , e : d3 . event } ) , d3 . event . stopPropagation ( ) } ) . on ( "dblclick" , function ( a , b ) { t . elementDblClick ( { value : h ( a , b ) , point : a , series : v [ a . series ] , pos : [ e ( g ( a , b ) ) + e . rangeBand ( ) * ( l ? v . length / 2 : a . series + . 5 ) / v . length , f ( h ( a , b ) + ( l ? a . y0 : 0 ) ) ] , pointIndex : b , seriesIndex : a . series , e : d3 . event } ) , d3 . event . stopPropagation ( ) } ) ; I . append ( "rect" ) . attr ( "width" , 0 ) . attr ( "height" , e . rangeBand ( ) / ( l ? 1 : v . length ) ) , m && ! l ? ( I . append ( "text" ) . attr ( "text-anchor" , function ( a , b ) { return h ( a , b ) < 0 ? "end" : "start" } ) , H . selectAll ( "text" ) . attr ( "y" , e . rangeBand ( ) / 2 ) . attr ( "dy" , "-.5em" ) . text ( function ( a , b ) { return o ( h ( a , b ) ) } ) , d3 . transition ( H ) . delay ( function ( a , b ) { return b * 1e3 / v [ 0 ] . values . length } ) . selectAll ( "text" ) . attr ( "dx" , function ( a , b ) { return h ( a , b ) < 0 ? - 4 : f ( h ( a , b ) ) - f ( 0 ) + 4 } ) ) : H . selectAll ( "text" ) . remove ( ) , H . attr ( "class" , function ( a , b ) { return h ( a , b ) < 0 ? "bar negative" : "bar positive" } ) , l ? d3 . transition ( H ) . delay ( function ( a , b ) { return b * 1e3 / v [ 0 ] . values . length } ) . attr ( "transform" , function ( a , b ) { return "translate(" + f ( a . y0 ) + "," + ( l ? 0 : j * e . rangeBand ( ) / v . length ) + ")" } ) . selectAll ( "rect" ) . attr ( "width" , function ( a , b ) { return Math . abs ( f ( h ( a , b ) + a . y0 ) - f ( a . y0 ) ) } ) . attr ( "height" , e . rangeBand ( ) ) : d3 . transition ( H ) . delay ( function ( a , b ) { return b * 1200 / v [ 0 ] . values . length } ) . attr ( "transform" , function ( a , b ) { return "translate(" + ( h ( a , b ) < 0 ? f ( h ( a , b ) ) : f ( 0 ) ) + "," + ( a . series * e . rangeBand ( ) / v . length + e ( g ( a , b ) ) ) + ")" } ) . selectAll ( "rect" ) . attr ( "height" , e . rangeBand ( ) / v . length ) . attr ( "width" , function ( a , b ) { return Math . abs ( f ( h ( a , b ) ) - f ( 0 ) ) } ) , u . update = function ( ) { d . transition ( ) . call ( u ) } , r = e . copy ( ) , s = f . copy ( ) } ) ; return u } var a = { top : 0 , right : 0 , bottom : 0 , left : 0 } , b = 960 , c = 500 , d = Math . floor ( Math . random ( ) * 1e4 ) , e = d3 . scale . ordinal ( ) , f = d3 . scale . linear ( ) , g = function ( a ) { return a . x } , h = function ( a ) { return a . y } , i = [ 0 ] , k = d3 . scale . category20 ( ) . range ( ) , l = ! 1 , m = ! 1 , n = 60 , o = d3 . format ( ",.2f" ) , p , q , r , s , t = d3 . dispatch ( "chartClick" , "elementClick" , "elementDblClick" , "elementMouseover" , "elementMouseout" ) ; u . dispatch = t , u . x = function ( a ) { if ( ! arguments . length ) return g ; g = a ; return u } , u . y = function ( a ) { if ( ! arguments . length ) return h ; h = a ; return u } , u . margin = function ( b ) { if ( ! arguments . length ) return a ; a = b ; return u } , u . width = function ( a ) { if ( ! arguments . length ) return b ; b = a ; return u } , u . height = function ( a ) { if ( ! arguments . length ) return c ; c = a ; return u } , u . xScale = function ( a ) { if ( ! arguments . length ) return e ; e = a ; return u } , u . yScale = function ( a ) { if ( ! arguments . length ) return f ; f = a ; return u } , u . xDomain = function ( a ) { if ( ! arguments . length ) return p ; p = a ; return u } , u . yDomain = function (
a ) { return ! a . disabled } ) . length || i . map ( function ( a ) { a . disabled = ! 1 ; return a } ) , e . transition ( ) . call ( t ) } ) , p . dispatch . on ( "legendClick" , function ( a , b ) { if ( ! ! a . disabled ) { r = r . map ( function ( a ) { a . disabled = ! 0 ; return a } ) , a . disabled = ! 1 ; switch ( a . key ) { case "Stacked" : j . style ( "stack" ) ; break ; case "Stream" : j . style ( "stream" ) ; break ; case "Expanded" : j . style ( "expand" ) } e . transition ( ) . call ( t ) } } ) , j . dispatch . on ( "tooltipShow" , function ( a ) { if ( ! Math . round ( j . y ( ) ( a . point ) * 100 ) ) { setTimeout ( function ( ) { d3 . selectAll ( ".point.hover" ) . classed ( "hover" , ! 1 ) } , 0 ) ; return ! 1 } a . pos = [ a . pos [ 0 ] + b . left , a . pos [ 1 ] + b . top ] , q . tooltipShow ( a ) } ) , h && q . on ( "tooltipShow" , function ( a ) { s ( a , k [ 0 ] [ 0 ] ) } ) , j . dispatch . on ( "tooltipHide" , function ( a ) { q . tooltipHide ( a ) } ) , h && q . on ( "tooltipHide" , a . tooltip . cleanup ) } ) ; return t } var b = { top : 30 , right : 20 , bottom : 50 , left : 60 } , c = null , d = null , e = d3 . scale . category20 ( ) . range ( ) , f = ! 0 , g = ! 0 , h = ! 0 , i = function ( a , b , c , d , e ) { return "<h3>" + a + "</h3>" + "<p>" + c + " on " + b + "</p>" } , j = a . models . stackedArea ( ) , k = j . xScale ( ) , l = j . yScale ( ) , m = a . models . axis ( ) . scale ( k ) . orient ( "bottom" ) , n = a . models . axis ( ) . scale ( l ) . orient ( "left" ) , o = a . models . legend ( ) . height ( 30 ) , p = a . models . legend ( ) . height ( 30 ) , q = d3 . dispatch ( "tooltipShow" , "tooltipHide" ) , r = [ { key : "Stacked" } , { key : "Stream" , disabled : ! 0 } , { key : "Expanded" , disabled : ! 0 } ] , s = function ( b , c ) { var d = b . pos [ 0 ] + ( c . offsetLeft || 0 ) , e = b . pos [ 1 ] + ( c . offsetTop || 0 ) , f = m . tickFormat ( ) ( j . x ( ) ( b . point ) ) , g = n . tickFormat ( ) ( j . y ( ) ( b . point ) ) , h = i ( b . series . key , f , g , b , t ) ; a . tooltip . show ( [ d , e ] , h , b . value < 0 ? "n" : "s" ) } ; t . dispatch = q , t . stacked = j , t . xAxis = m , t . yAxis = n , d3 . rebind ( t , j , "x" , "y" , "interactive" , "offset" , "order" , "style" , "clipEdge" , "size" , "forceX" , "forceY" , "forceSize" ) , t . margin = function ( a ) { if ( ! arguments . length ) return b ; b = a ; return t } , t . width = function ( a ) { if ( ! arguments . length ) return getWidth ; c = a ; return t } , t . height = function ( a ) { if ( ! arguments . length ) return getHeight ; d = a ; return t } , t . color = function ( a ) { if ( ! arguments . length ) return e ; e = a , o . color ( a ) ; return t } , t . showControls = function ( a ) { if ( ! arguments . length ) return f ; f = a ; return t } , t . showLegend = function ( a ) { if ( ! arguments . length ) return g ; g = a ; return t } , t . tooltips = function ( a ) { if ( ! arguments . length ) return h ; h = a ; return t } , t . tooltipContent = function ( a ) { if ( ! arguments . length ) return i ; i = a ; return t } ; return t } } ) ( )