Permalink
Commits on Jan 5, 2017
  1. Enable pan/zoom on categorical scales (#3137)

    * Enable pan/zoom on categorical scales
    
    Introduces new interface `TransformableScale`. This interface abstracts the
    necessary API for implementing pan/zoom on various types of scales.
    
    Due to some limitations of d3, for example category scales can't invert screen
    space coordinates, we nevertheless allow the scale types to support pan/zoom if
    they implement this interface.
    
    Implemented `TransformableScale` interface on `Linear`, `Log`, `Time` and
    `Category` Scales. The three `Quantitative` scales have fairly trivial
    implementations, but the `Category` scale requires special handling.
    
    Added an intermediate coordinate space called the *Transformation Space* to the
    `Category` scale. The conversion from data to screen coordinates is as follows:
    
    Data Space -> _d3Scale -> Transformation Space -> _d3TransformationScale -> Screen Space.
    
    The *Transformation Space* coordinates are initialized to [0, 1].
    
    Notably, range band calculations are internally computed in *Transformation
    Space* and transformed to screen space in methods like `rangeBand()` and
    `stepWidth()`.
    
    
    * Hide category axis labels that overflow
    
    Now that category axes can be pan/zoomed, the
    labels and ticks can overflow the bounds of
    the axis.
    
    This change pulls out the code used in numericAxis
    into the base axis class and then is re-used in
    categoryAxis.
    
    * Move TransformableScale interface to Plottable.Scales
    themadcreator committed on GitHub Jan 5, 2017