Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
YUI.add('graphics-group', function (Y, NAME) {
2
 
3
/**
4
 * The graphics-group submodule allows from drawing a shape multiple times within a single instance.
5
 *
6
 * @module graphics
7
 * @submodule graphics-group
8
 */
9
var ShapeGroup,
10
    CircleGroup,
11
    RectGroup,
12
    EllipseGroup,
13
    DiamondGroup,
14
    Y_Lang = Y.Lang;
15
 
16
/**
17
 * Abstract class for creating groups of shapes with the same styles and dimensions.
18
 *
19
 * @class ShapeGroup
20
 * @constructor
21
 * @submodule graphics-group
22
 */
23
 
24
 ShapeGroup = function()
25
 {
26
    ShapeGroup.superclass.constructor.apply(this, arguments);
27
 };
28
 
29
 ShapeGroup.NAME = "shapeGroup";
30
 
31
 Y.extend(ShapeGroup, Y.Path, {
32
    /**
33
     * Updates the shape.
34
     *
35
     * @method _draw
36
     * @private
37
     */
38
    _draw: function()
39
    {
40
        var xvalues = this.get("xvalues"),
41
            yvalues = this.get("yvalues"),
42
            x,
43
            y,
44
            xRad,
45
            yRad,
46
            i = 0,
47
            len,
48
            dimensions = this.get("dimensions"),
49
            width = dimensions.width,
50
            height = dimensions.height,
51
            radius = dimensions.radius,
52
            yRadius = dimensions.yRadius,
53
            widthIsArray = Y_Lang.isArray(width),
54
            heightIsArray = Y_Lang.isArray(height),
55
            radiusIsArray = Y_Lang.isArray(radius),
56
            yRadiusIsArray = Y_Lang.isArray(yRadius);
57
        if(xvalues && yvalues && xvalues.length > 0)
58
        {
59
            this.clear();
60
 
61
            len = xvalues.length;
62
            for(; i < len; ++i)
63
            {
64
                x = xvalues[i];
65
                y = yvalues[i];
66
                xRad = radiusIsArray ? radius[i] : radius;
67
                yRad = yRadiusIsArray ? yRadius[i] : yRadius;
68
                if(!isNaN(x) && !isNaN(y) && !isNaN(xRad))
69
                {
70
                    this.drawShape({
71
                        x: x,
72
                        y: y,
73
                        width: widthIsArray ? width[i] : width,
74
                        height: heightIsArray ? height[i] : height,
75
                        radius: xRad,
76
                        yRadius: yRad
77
                    });
78
                    this.closePath();
79
                }
80
            }
81
            this._closePath();
82
        }
83
    },
84
 
85
    /**
86
     * Parses and array of lengths into radii
87
     *
88
     * @method _getRadiusCollection
89
     * @param {Array} val Array of lengths
90
     * @return Array
91
     * @private
92
     */
93
    _getRadiusCollection: function(val)
94
    {
95
        var i = 0,
96
            len = val.length,
97
            radii = [];
98
        for(; i < len; ++i)
99
        {
100
            radii[i] = val[i] * 0.5;
101
        }
102
        return radii;
103
    }
104
 });
105
 
106
ShapeGroup.ATTRS = Y.merge(Y.Path.ATTRS, {
107
    dimensions: {
108
        getter: function()
109
        {
110
            var dimensions = this._dimensions,
111
                radius,
112
                yRadius,
113
                width,
114
                height;
115
            if(dimensions.hasOwnProperty("radius"))
116
            {
117
                return dimensions;
118
            }
119
            else
120
            {
121
                width = dimensions.width;
122
                height = dimensions.height;
123
                radius = Y_Lang.isArray(width) ? this._getRadiusCollection(width) : (width * 0.5);
124
                yRadius = Y_Lang.isArray(height) ? this._getRadiusCollection(height) : (height * 0.5);
125
                return {
126
                    width: width,
127
                    height: height,
128
                    radius: radius,
129
                    yRadius: yRadius
130
                };
131
            }
132
        },
133
 
134
        setter: function(val)
135
        {
136
            this._dimensions = val;
137
            return val;
138
        }
139
    },
140
    xvalues: {
141
        getter: function()
142
        {
143
            return this._xvalues;
144
        },
145
        setter: function(val)
146
        {
147
            this._xvalues = val;
148
        }
149
    },
150
    yvalues: {
151
        getter: function()
152
        {
153
            return this._yvalues;
154
        },
155
        setter: function(val)
156
        {
157
            this._yvalues = val;
158
        }
159
    }
160
});
161
Y.ShapeGroup = ShapeGroup;
162
/**
163
 * Abstract class for creating groups of circles with the same styles and dimensions.
164
 *
165
 * @class CircleGroup
166
 * @constructor
167
 * @submodule graphics-group
168
 */
169
 CircleGroup = function()
170
 {
171
    CircleGroup.superclass.constructor.apply(this, arguments);
172
 };
173
 
174
 CircleGroup.NAME = "circleGroup";
175
 
176
 Y.extend(CircleGroup, Y.ShapeGroup, {
177
    /**
178
     * Algorithm for drawing shape.
179
     *
180
     * @method drawShape
181
     * @param {Object} cfg Parameters used to draw the shape.
182
     */
183
    drawShape: function(cfg)
184
    {
185
        this.drawCircle(cfg.x, cfg.y, cfg.radius);
186
    }
187
 });
188
 
189
CircleGroup.ATTRS = Y.merge(Y.ShapeGroup.ATTRS, {
190
    dimensions: {
191
        getter: function()
192
        {
193
            var dimensions = this._dimensions,
194
                radius,
195
                yRadius,
196
                width,
197
                height;
198
            if(dimensions.hasOwnProperty("radius"))
199
            {
200
                return dimensions;
201
            }
202
            else
203
            {
204
                width = dimensions.width;
205
                height = dimensions.height;
206
                radius = Y_Lang.isArray(width) ? this._getRadiusCollection(width) : (width * 0.5);
207
                yRadius = radius;
208
                return {
209
                    width: width,
210
                    height: height,
211
                    radius: radius,
212
                    yRadius: yRadius
213
                };
214
            }
215
        }
216
    }
217
});
218
 
219
CircleGroup.ATTRS = Y.ShapeGroup.ATTRS;
220
Y.CircleGroup = CircleGroup;
221
/**
222
 * Abstract class for creating groups of rects with the same styles and dimensions.
223
 *
224
 * @class GroupRect
225
 * @constructor
226
 * @submodule graphics-group
227
 */
228
 RectGroup = function()
229
 {
230
    RectGroup.superclass.constructor.apply(this, arguments);
231
 };
232
 
233
 RectGroup.NAME = "rectGroup";
234
 
235
 Y.extend(RectGroup, Y.ShapeGroup, {
236
    /**
237
     * Updates the rect.
238
     *
239
     * @method _draw
240
     * @private
241
     */
242
    drawShape: function(cfg)
243
    {
244
        this.drawRect(cfg.x, cfg.y, cfg.width, cfg.height);
245
    }
246
 });
247
 
248
RectGroup.ATTRS = Y.ShapeGroup.ATTRS;
249
Y.RectGroup = RectGroup;
250
/**
251
 * Abstract class for creating groups of diamonds with the same styles and dimensions.
252
 *
253
 * @class GroupDiamond
254
 * @constructor
255
 * @submodule graphics-group
256
 */
257
 DiamondGroup = function()
258
 {
259
    DiamondGroup.superclass.constructor.apply(this, arguments);
260
 };
261
 
262
 DiamondGroup.NAME = "diamondGroup";
263
 
264
 Y.extend(DiamondGroup, Y.ShapeGroup, {
265
    /**
266
     * Updates the diamond.
267
     *
268
     * @method _draw
269
     * @private
270
     */
271
    drawShape: function(cfg)
272
    {
273
        this.drawDiamond(cfg.x, cfg.y, cfg.width, cfg.height);
274
    }
275
 });
276
 
277
DiamondGroup.ATTRS = Y.ShapeGroup.ATTRS;
278
Y.DiamondGroup = DiamondGroup;
279
/**
280
 * Abstract class for creating groups of ellipses with the same styles and dimensions.
281
 *
282
 * @class EllipseGroup
283
 * @constructor
284
 * @submodule graphics-group
285
 */
286
 EllipseGroup = function()
287
 {
288
    EllipseGroup.superclass.constructor.apply(this, arguments);
289
 };
290
 
291
 EllipseGroup.NAME = "ellipseGroup";
292
 
293
 Y.extend(EllipseGroup, Y.ShapeGroup, {
294
    /**
295
     * Updates the ellipse.
296
     *
297
     * @method _draw
298
     * @private
299
     */
300
    drawShape: function(cfg)
301
    {
302
        this.drawEllipse(cfg.x, cfg.y, cfg.width, cfg.height);
303
    }
304
 });
305
 
306
EllipseGroup.ATTRS = Y.ShapeGroup.ATTRS;
307
Y.EllipseGroup = EllipseGroup;
308
 
309
 
310
}, '3.18.1', {"requires": ["graphics"]});