Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
YUI.add('series-candlestick', function (Y, NAME) {
2
 
3
/**
4
 * Provides functionality for creating a candlestick series.
5
 *
6
 * @module charts
7
 * @submodule series-candlestick
8
 */
9
/**
10
 * The CandlestickSeries class renders columns (candles) and lines (wicks) representing the open, high, low and close
11
 * values for a chart.
12
 *
13
 * @class CandlestickSeries
14
 * @extends RangeSeries
15
 * @constructor
16
 * @param {Object} config (optional) Configuration parameters.
17
 * @submodule series-candlestick
18
 */
19
function CandlestickSeries()
20
{
21
    CandlestickSeries.superclass.constructor.apply(this, arguments);
22
}
23
 
24
CandlestickSeries.NAME = "candlestickSeries";
25
 
26
CandlestickSeries.ATTRS = {
27
    /**
28
     * Read-only attribute indicating the type of series.
29
     *
30
     * @attribute type
31
     * @type String
32
     * @readOnly
33
     * @default candlestick
34
     */
35
    type: {
36
        value: "candlestick"
37
    },
38
 
39
    /**
40
     * The graphic in which drawings will be rendered.
41
     *
42
     * @attribute graphic
43
     * @type Graphic
44
     */
45
    graphic: {
46
        lazyAdd: false,
47
 
48
        setter: function(val) {
49
            //woraround for Attribute order of operations bug
50
            if(!this.get("rendered")) {
51
                this.set("rendered", true);
52
            }
53
            this.set("upcandle", val.addShape({
54
               type: "path"
55
            }));
56
            this.set("downcandle", val.addShape({
57
               type: "path"
58
            }));
59
            this.set("wick", val.addShape({
60
               type: "path"
61
            }));
62
            return val;
63
        }
64
    },
65
 
66
    /**
67
     * Reference to the candlestick used when the close value is higher than the open value.
68
     *
69
     * @attribute upcandle
70
     * @type Path
71
     */
72
    upcandle: {},
73
 
74
    /**
75
     * Reference to the candlestick used when the open value is higher than the close value.
76
     *
77
     * @attribute downcandle
78
     * @type Path
79
     */
80
    downcandle: {},
81
 
82
    /**
83
     * Reference to the line drawn between the high and low values.
84
     *
85
     * @attribute wick
86
     * @type Path
87
     */
88
    wick: {}
89
 
90
    /**
91
     * Style properties used for drawing candles and wicks. This attribute is inherited from `RangeSeries`. Below are the default values:
92
     *  <dl>
93
     *      <dt>upcandle</dt><dd>Properties for a candle representing a period that closes higher than it opens.
94
     *          <dl>
95
     *              <dt>fill</dt><dd>A hash containing the following values:
96
     *                  <dl>
97
     *                      <dt>color</dt><dd>Color of the fill. The default value is "#00aa00".</dd>
98
     *                      </dd>
99
     *                      <dt>alpha</dt><dd>Number from 0 to 1 indicating the opacity of the marker fill. The default value is 1.</dd>
100
     *                  </dl>
101
     *              </dd>
102
     *              <dt>border</dt><dd>A hash containing the following values:
103
     *                  <dl>
104
     *                      <dt>color</dt><dd>Color of the border. The default value is "#000000".</dd>
105
     *                      <dt>alpha</dt><dd>Number from 0 to 1 indicating the opacity of the marker border. The default value is 1.</dd>
106
     *                      <dt>weight</dt><dd>Number indicating the width of the border. The default value is 0.</dd>
107
     *                  </dl>
108
     *              </dd>
109
     *          </dl>
110
     *      </dd>
111
     *      <dt>downcandle</dt><dd>Properties for a candle representing a period that opens higher than it closes.
112
     *          <dl>
113
     *              <dt>fill</dt><dd>A hash containing the following values:
114
     *                  <dl>
115
     *                      <dt>color</dt><dd>Color of the fill. The default value is "#aa0000".</dd>
116
     *                      </dd>
117
     *                      <dt>alpha</dt><dd>Number from 0 to 1 indicating the opacity of the marker fill. The default value is 1.</dd>
118
     *                  </dl>
119
     *              </dd>
120
     *              <dt>border</dt><dd>A hash containing the following values:
121
     *                  <dl>
122
     *                      <dt>color</dt><dd>Color of the border. The default value is "#000000".</dd>
123
     *                      <dt>alpha</dt><dd>Number from 0 to 1 indicating the opacity of the marker border. The default value is 1.</dd>
124
     *                      <dt>weight</dt><dd>Number indicating the width of the border. The default value is 0.</dd>
125
     *                  </dl>
126
     *              </dd>
127
     *          </dl>
128
     *      </dd>
129
     *      <dt>wick</dt><dd>Properties for the wick, which is a line drawn from the high point of the period to the low point of the period.
130
     *          <dl>
131
     *              <dt>color</dt><dd>The color of the wick. The default value is "#000000".</dd>
132
     *              <dt>weight</dt><dd>The weight of the wick. The default value is 1.</dd>
133
     *              <dt>alpha</dt><dd>Number from 0 to 1 indicating the opacity of the wick. The default value is 1.</dd>
134
     *          </dl>
135
     *      </dd>
136
     *  </dl>
137
     *
138
     * @attribute styles
139
     * @type Object
140
     */
141
};
142
 
143
Y.extend(CandlestickSeries, Y.RangeSeries, {
144
    /**
145
     * Draws markers for an Candlestick series.
146
     *
147
     * @method
148
     * @param {Array} xcoords The xcoordinates to be plotted.
149
     * @param {Array} opencoords The coordinates representing the open values.
150
     * @param {Array} highcoords The coordinates representing the high values.
151
     * @param {Array} lowcoords The coordinates representing the low values.
152
     * @param {Array} closecoords The coordinates representing the close values.
153
     * @param {Number} len The number of x coordinates to plot.
154
     * @param {Number} width The width of each candlestick marker.
155
     * @param {Number} halfwidth Half the width of each candlestick marker.
156
     * @param {Object} styles The styles for the series.
157
     * @private
158
     */
159
    _drawMarkers: function(xcoords, opencoords, highcoords, lowcoords, closecoords, len, width, halfwidth, styles)
160
    {
161
        var upcandle = this.get("upcandle"),
162
            downcandle = this.get("downcandle"),
163
            candle,
164
            wick = this.get("wick"),
165
            wickStyles = styles.wick,
166
            wickWidth = wickStyles.width,
167
            cx,
168
            opencoord,
169
            highcoord,
170
            lowcoord,
171
            closecoord,
172
            left,
173
            right,
174
            top,
175
            bottom,
176
            height,
177
            leftPadding = styles.padding.left,
178
            up,
179
            i,
180
            isNumber = Y.Lang.isNumber;
181
        upcandle.set(styles.upcandle);
182
        downcandle.set(styles.downcandle);
183
        wick.set({
184
            fill: wickStyles.fill,
185
            stroke: wickStyles.stroke,
186
            shapeRendering: wickStyles.shapeRendering
187
        });
188
        upcandle.clear();
189
        downcandle.clear();
190
        wick.clear();
191
        for(i = 0; i < len; i = i + 1)
192
        {
193
            cx = Math.round(xcoords[i] + leftPadding);
194
            left = cx - halfwidth;
195
            right = cx + halfwidth;
196
            opencoord = Math.round(opencoords[i]);
197
            highcoord = Math.round(highcoords[i]);
198
            lowcoord = Math.round(lowcoords[i]);
199
            closecoord = Math.round(closecoords[i]);
200
            up = opencoord > closecoord;
201
            top = up ? closecoord : opencoord;
202
            bottom = up ? opencoord : closecoord;
203
            height = bottom - top;
204
            candle = up ? upcandle : downcandle;
205
            if(candle && isNumber(left) && isNumber(top) && isNumber(width) && isNumber(height))
206
            {
207
                candle.drawRect(left, top, width, height);
208
            }
209
            if(isNumber(cx) && isNumber(highcoord) && isNumber(lowcoord))
210
            {
211
                wick.drawRect(cx - wickWidth/2, highcoord, wickWidth, lowcoord - highcoord);
212
            }
213
        }
214
        upcandle.end();
215
        downcandle.end();
216
        wick.end();
217
        wick.toBack();
218
    },
219
 
220
    /**
221
     * Toggles visibility
222
     *
223
     * @method _toggleVisible
224
     * @param {Boolean} visible indicates visibilitye
225
     * @private
226
     */
227
    _toggleVisible: function(visible)
228
    {
229
        this.get("upcandle").set("visible", visible);
230
        this.get("downcandle").set("visible", visible);
231
        this.get("wick").set("visible", visible);
232
    },
233
 
234
    /**
235
     * Destructor implementation for the CartesianSeries class. Calls destroy on all Graphic instances.
236
     *
237
     * @method destructor
238
     * @protected
239
     */
240
    destructor: function()
241
    {
242
        var upcandle = this.get("upcandle"),
243
            downcandle = this.get("downcandle"),
244
            wick = this.get("wick");
245
        if(upcandle)
246
        {
247
            upcandle.destroy();
248
        }
249
        if(downcandle)
250
        {
251
            downcandle.destroy();
252
        }
253
        if(wick)
254
        {
255
            wick.destroy();
256
        }
257
    },
258
 
259
    /**
260
     * Gets the default value for the `styles` attribute. Overrides
261
     * base implementation.
262
     *
263
     * @method _getDefaultStyles
264
     * @return Object
265
     * @private
266
     */
267
    _getDefaultStyles: function()
268
    {
269
        var styles = {
270
            upcandle: {
271
                shapeRendering: "crispEdges",
272
                fill: {
273
                    color: "#00aa00",
274
                    alpha: 1
275
                },
276
                stroke: {
277
                    color: "#000000",
278
                    alpha: 1,
279
                    weight: 0
280
                }
281
            },
282
            downcandle: {
283
                shapeRendering: "crispEdges",
284
                fill: {
285
                    color: "#aa0000",
286
                    alpha: 1
287
                },
288
                stroke: {
289
                    color: "#000000",
290
                    alpha: 1,
291
                    weight: 0
292
                }
293
            },
294
            wick: {
295
                shapeRendering: "crispEdges",
296
                width: 1,
297
                fill: {
298
                    color: "#000000",
299
                    alpha: 1
300
                },
301
                stroke: {
302
                    color: "#000000",
303
                    alpha: 1,
304
                    weight: 0
305
                }
306
            }
307
        };
308
        return this._mergeStyles(styles, CandlestickSeries.superclass._getDefaultStyles());
309
    }
310
});
311
Y.CandlestickSeries = CandlestickSeries;
312
 
313
 
314
}, '3.18.1', {"requires": ["series-range"]});