[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/lib/yuilib/3.17.2/series-bar-stacked/ -> series-bar-stacked-debug.js (source)

   1  /*
   2  YUI 3.17.2 (build 9c3c78e)
   3  Copyright 2014 Yahoo! Inc. All rights reserved.
   4  Licensed under the BSD License.
   5  http://yuilibrary.com/license/
   6  */
   7  
   8  YUI.add('series-bar-stacked', function (Y, NAME) {
   9  
  10  /**
  11   * Provides functionality for creating a stacked bar series.
  12   *
  13   * @module charts
  14   * @submodule series-bar-stacked
  15   */
  16  var Y_Lang = Y.Lang;
  17  
  18  /**
  19   * The StackedBarSeries renders bar chart in which series are stacked horizontally to show
  20   * their contribution to the cumulative total.
  21   *
  22   * @class StackedBarSeries
  23   * @extends BarSeries
  24   * @uses StackingUtil
  25   * @constructor
  26   * @param {Object} config (optional) Configuration parameters.
  27   * @submodule series-bar-stacked
  28   */
  29  Y.StackedBarSeries = Y.Base.create("stackedBarSeries", Y.BarSeries, [Y.StackingUtil], {
  30      /**
  31       * @protected
  32       *
  33       * Draws the series.
  34       *
  35       * @method drawSeries
  36       */
  37      drawSeries: function()
  38      {
  39          if(this.get("xcoords").length < 1)
  40          {
  41              return;
  42          }
  43  
  44          var isNumber = Y_Lang.isNumber,
  45              style = this._copyObject(this.get("styles").marker),
  46              w = style.width,
  47              h = style.height,
  48              xcoords = this.get("xcoords"),
  49              ycoords = this.get("ycoords"),
  50              i = 0,
  51              len = xcoords.length,
  52              top = ycoords[0],
  53              seriesCollection = this.get("seriesTypeCollection"),
  54              ratio,
  55              order = this.get("order"),
  56              graphOrder = this.get("graphOrder"),
  57              left,
  58              marker,
  59              lastCollection,
  60              negativeBaseValues,
  61              positiveBaseValues,
  62              fillColors,
  63              borderColors,
  64              useOrigin = order === 0,
  65              totalHeight = len * h,
  66              dimensions = {
  67                  width: [],
  68                  height: []
  69              },
  70              xvalues = [],
  71              yvalues = [],
  72              groupMarkers = this.get("groupMarkers");
  73          if(Y_Lang.isArray(style.fill.color))
  74          {
  75              fillColors = style.fill.color.concat();
  76          }
  77          if(Y_Lang.isArray(style.border.color))
  78          {
  79              borderColors = style.border.color.concat();
  80          }
  81          this._createMarkerCache();
  82          if(totalHeight > this.get("height"))
  83          {
  84              ratio = this.get("height")/totalHeight;
  85              h *= ratio;
  86              h = Math.max(h, 1);
  87          }
  88          if(!useOrigin)
  89          {
  90              lastCollection = seriesCollection[order - 1];
  91              negativeBaseValues = lastCollection.get("negativeBaseValues");
  92              positiveBaseValues = lastCollection.get("positiveBaseValues");
  93              if(!negativeBaseValues || !positiveBaseValues)
  94              {
  95                  useOrigin = true;
  96                  positiveBaseValues = [];
  97                  negativeBaseValues = [];
  98              }
  99          }
 100          else
 101          {
 102              negativeBaseValues = [];
 103              positiveBaseValues = [];
 104          }
 105          this.set("negativeBaseValues", negativeBaseValues);
 106          this.set("positiveBaseValues", positiveBaseValues);
 107          for(i = 0; i < len; ++i)
 108          {
 109              top = ycoords[i];
 110              left = xcoords[i];
 111              if(!isNumber(top) || !isNumber(left))
 112              {
 113                  if(useOrigin)
 114                  {
 115                      positiveBaseValues[i] = this._leftOrigin;
 116                      negativeBaseValues[i] = this._leftOrigin;
 117                  }
 118                  this._markers.push(null);
 119                  continue;
 120              }
 121              if(useOrigin)
 122              {
 123                  w = Math.abs(left - this._leftOrigin);
 124                  if(left > this._leftOrigin)
 125                  {
 126                      positiveBaseValues[i] = left;
 127                      negativeBaseValues[i] = this._leftOrigin;
 128                      left -= w;
 129                  }
 130                  else if(left < this._leftOrigin)
 131                  {
 132                      positiveBaseValues[i] = this._leftOrigin;
 133                      negativeBaseValues[i] = left;
 134                  }
 135                  else
 136                  {
 137                      positiveBaseValues[i] = left;
 138                      negativeBaseValues[i] = this._leftOrigin;
 139                  }
 140              }
 141              else
 142              {
 143                  if(left < this._leftOrigin)
 144                  {
 145                      left = negativeBaseValues[i] - (this._leftOrigin - xcoords[i]);
 146                      w = negativeBaseValues[i] - left;
 147                      negativeBaseValues[i] = left;
 148                  }
 149                  else if(left >= this._leftOrigin)
 150                  {
 151                      left += (positiveBaseValues[i] - this._leftOrigin);
 152                      w = left - positiveBaseValues[i];
 153                      positiveBaseValues[i] = left;
 154                      left -= w;
 155                  }
 156              }
 157              if(!isNaN(w) && w > 0)
 158              {
 159                  top -= h/2;
 160                  if(groupMarkers)
 161                  {
 162                      dimensions.width[i] = w;
 163                      dimensions.height[i] = h;
 164                      xvalues.push(left);
 165                      yvalues.push(top);
 166                  }
 167                  else
 168                  {
 169                      style.width = w;
 170                      style.height = h;
 171                      style.x = left;
 172                      style.y = top;
 173                      if(fillColors)
 174                      {
 175                          style.fill.color = fillColors[i % fillColors.length];
 176                      }
 177                      if(borderColors)
 178                      {
 179                          style.border.color = borderColors[i % borderColors.length];
 180                      }
 181                      marker = this.getMarker(style, graphOrder, i);
 182                  }
 183              }
 184              else if(!groupMarkers)
 185              {
 186                  this._markers.push(null);
 187              }
 188          }
 189          if(groupMarkers)
 190          {
 191              this._createGroupMarker({
 192                  fill: style.fill,
 193                  border: style.border,
 194                  dimensions: dimensions,
 195                  xvalues: xvalues,
 196                  yvalues: yvalues,
 197                  shape: style.shape
 198              });
 199          }
 200          else
 201          {
 202              this._clearMarkerCache();
 203          }
 204      },
 205  
 206      /**
 207       * @protected
 208       *
 209       * Resizes and positions markers based on a mouse interaction.
 210       *
 211       * @method updateMarkerState
 212       * @param {String} type state of the marker
 213       * @param {Number} i index of the marker
 214       */
 215      updateMarkerState: function(type, i)
 216      {
 217          if(this._markers[i])
 218          {
 219              var state = this._getState(type),
 220                  ycoords = this.get("ycoords"),
 221                  marker = this._markers[i],
 222                  styles = this.get("styles").marker,
 223                  h = styles.height,
 224                  markerStyles = state === "off" || !styles[state] ? this._copyObject(styles) : this._copyObject(styles[state]),
 225                  fillColor,
 226                  borderColor;
 227              markerStyles.y = (ycoords[i] - h/2);
 228              markerStyles.x = marker.get("x");
 229              markerStyles.width = marker.get("width");
 230              markerStyles.id = marker.get("id");
 231              fillColor = markerStyles.fill.color;
 232              borderColor = markerStyles.border.color;
 233              if(Y_Lang.isArray(fillColor))
 234              {
 235                  markerStyles.fill.color = fillColor[i % fillColor.length];
 236              }
 237              else
 238              {
 239                  markerStyles.fill.color = this._getItemColor(markerStyles.fill.color, i);
 240              }
 241              if(Y_Lang.isArray(borderColor))
 242              {
 243                  markerStyles.border.color = borderColor[i % borderColor.length];
 244              }
 245              else
 246              {
 247                  markerStyles.border.color = this._getItemColor(markerStyles.border.color, i);
 248              }
 249              marker.set(markerStyles);
 250          }
 251      },
 252  
 253      /**
 254       * @protected
 255       *
 256       * Returns default values for the `styles` attribute.
 257       *
 258       * @method _getPlotDefaults
 259       * @return Object
 260       */
 261      _getPlotDefaults: function()
 262      {
 263          var defs = {
 264              fill:{
 265                  type: "solid",
 266                  alpha: 1,
 267                  colors:null,
 268                  alphas: null,
 269                  ratios: null
 270              },
 271              border:{
 272                  weight: 0,
 273                  alpha: 1
 274              },
 275              width: 24,
 276              height: 24,
 277              shape: "rect",
 278  
 279              padding:{
 280                  top: 0,
 281                  left: 0,
 282                  right: 0,
 283                  bottom: 0
 284              }
 285          };
 286          defs.fill.color = this._getDefaultColor(this.get("graphOrder"), "fill");
 287          defs.border.color = this._getDefaultColor(this.get("graphOrder"), "border");
 288          return defs;
 289      }
 290  }, {
 291      ATTRS: {
 292          /**
 293           * Read-only attribute indicating the type of series.
 294           *
 295           * @attribute type
 296           * @type String
 297           * @default stackedBar
 298           */
 299          type: {
 300              value: "stackedBar"
 301          },
 302  
 303          /**
 304           * Direction of the series
 305           *
 306           * @attribute direction
 307           * @type String
 308           * @default vertical
 309           */
 310          direction: {
 311              value: "vertical"
 312          },
 313  
 314          /**
 315           * @private
 316           *
 317           * @attribute negativeBaseValues
 318           * @type Array
 319           * @default null
 320           */
 321          negativeBaseValues: {
 322              value: null
 323          },
 324  
 325          /**
 326           * @private
 327           *
 328           * @attribute positiveBaseValues
 329           * @type Array
 330           * @default null
 331           */
 332          positiveBaseValues: {
 333              value: null
 334          }
 335  
 336          /**
 337           * Style properties used for drawing markers. This attribute is inherited from `BarSeries`. Below are the default values:
 338           *  <dl>
 339           *      <dt>fill</dt><dd>A hash containing the following values:
 340           *          <dl>
 341           *              <dt>color</dt><dd>Color of the fill. The default value is determined by the order of the series on the graph. The color
 342           *              will be retrieved from the below array:<br/>
 343           *              `["#66007f", "#a86f41", "#295454", "#996ab2", "#e8cdb7", "#90bdbd","#000000","#c3b8ca", "#968373", "#678585"]`
 344           *              </dd>
 345           *              <dt>alpha</dt><dd>Number from 0 to 1 indicating the opacity of the marker fill. The default value is 1.</dd>
 346           *          </dl>
 347           *      </dd>
 348           *      <dt>border</dt><dd>A hash containing the following values:
 349           *          <dl>
 350           *              <dt>color</dt><dd>Color of the border. The default value is determined by the order of the series on the graph. The color
 351           *              will be retrieved from the below array:<br/>
 352           *              `["#205096", "#b38206", "#000000", "#94001e", "#9d6fa0", "#e55b00", "#5e85c9", "#adab9e", "#6ac291", "#006457"]`
 353           *              <dt>alpha</dt><dd>Number from 0 to 1 indicating the opacity of the marker border. The default value is 1.</dd>
 354           *              <dt>weight</dt><dd>Number indicating the width of the border. The default value is 1.</dd>
 355           *          </dl>
 356           *      </dd>
 357           *      <dt>height</dt><dd>indicates the width of the marker. The default value is 24.</dd>
 358           *      <dt>over</dt><dd>hash containing styles for markers when highlighted by a `mouseover` event. The default
 359           *      values for each style is null. When an over style is not set, the non-over value will be used. For example,
 360           *      the default value for `marker.over.fill.color` is equivalent to `marker.fill.color`.</dd>
 361           *  </dl>
 362           *
 363           * @attribute styles
 364           * @type Object
 365           */
 366      }
 367  });
 368  
 369  
 370  
 371  }, '3.17.2', {"requires": ["series-stacked", "series-bar"]});


Generated: Thu Aug 11 10:00:09 2016 Cross-referenced by PHPXref 0.7.1