MDL-35616 import YUI 3.7.2
[moodle.git] / lib / yuilib / 3.7.2 / build / graphics-vml / graphics-vml-coverage.js
blob3d44c406867b5fc4190eb61138754e758d12dd79
1 /*
2 YUI 3.7.2 (build 5639)
3 Copyright 2012 Yahoo! Inc. All rights reserved.
4 Licensed under the BSD License.
5 http://yuilibrary.com/license/
6 */
7 if (typeof _yuitest_coverage == "undefined"){
8     _yuitest_coverage = {};
9     _yuitest_coverline = function(src, line){
10         var coverage = _yuitest_coverage[src];
11         if (!coverage.lines[line]){
12             coverage.calledLines++;
13         }
14         coverage.lines[line]++;
15     };
16     _yuitest_coverfunc = function(src, name, line){
17         var coverage = _yuitest_coverage[src],
18             funcId = name + ":" + line;
19         if (!coverage.functions[funcId]){
20             coverage.calledFunctions++;
21         }
22         coverage.functions[funcId]++;
23     };
25 _yuitest_coverage["build/graphics-vml/graphics-vml.js"] = {
26     lines: {},
27     functions: {},
28     coveredLines: 0,
29     calledLines: 0,
30     coveredFunctions: 0,
31     calledFunctions: 0,
32     path: "build/graphics-vml/graphics-vml.js",
33     code: []
35 _yuitest_coverage["build/graphics-vml/graphics-vml.js"].code=["YUI.add('graphics-vml', function (Y, NAME) {","","var IMPLEMENTATION = \"vml\",","    SHAPE = \"shape\",","      SPLITPATHPATTERN = /[a-z][^a-z]*/ig,","    SPLITARGSPATTERN = /[-]?[0-9]*[0-9|\\.][0-9]*/g,","    Y_LANG = Y.Lang,","    IS_NUM = Y_LANG.isNumber,","    IS_ARRAY = Y_LANG.isArray,","    IS_STRING = Y_LANG.isString,","    Y_DOM = Y.DOM,","    Y_SELECTOR = Y.Selector,","    DOCUMENT = Y.config.doc,","    AttributeLite = Y.AttributeLite,","     VMLShape,","    VMLCircle,","   VMLPath,","     VMLRect,","     VMLEllipse,","  VMLGraphic,","    VMLPieSlice,","    _getClassName = Y.ClassNameManager.getClassName;","","function VMLDrawing() {}","","/**"," * <a href=\"http://www.w3.org/TR/NOTE-VML\">VML</a> implementation of the <a href=\"Drawing.html\">`Drawing`</a> class. "," * `VMLDrawing` is not intended to be used directly. Instead, use the <a href=\"Drawing.html\">`Drawing`</a> class. "," * If the browser lacks <a href=\"http://www.w3.org/TR/SVG/\">SVG</a> and <a href=\"http://www.w3.org/TR/html5/the-canvas-element.html\">Canvas</a> "," * capabilities, the <a href=\"Drawing.html\">`Drawing`</a> class will point to the `VMLDrawing` class."," *"," * @module graphics"," * @class VMLDrawing"," * @constructor"," */","VMLDrawing.prototype = {","    /**","     * Maps path to methods","     *","     * @property _pathSymbolToMethod","     * @type Object","     * @private","     */","    _pathSymbolToMethod: {","        M: \"moveTo\",","        m: \"relativeMoveTo\",","        L: \"lineTo\",","        l: \"relativeLineTo\",","        C: \"curveTo\",","        c: \"relativeCurveTo\",","        Q: \"quadraticCurveTo\",","        q: \"relativeQuadraticCurveTo\",","        z: \"closePath\",","        Z: \"closePath\"","    },","","    /**","     * Value for rounding up to coordsize","     *","     * @property _coordSpaceMultiplier","     * @type Number","     * @private","     */","    _coordSpaceMultiplier: 100,","","    /**","     * Rounds dimensions and position values based on the coordinate space.","     *","     * @method _round","     * @param {Number} The value for rounding","     * @return Number","     * @private","     */","    _round:function(val)","    {","        return Math.round(val * this._coordSpaceMultiplier);","    },","","    /**","     * Concatanates the path.","     *","     * @method _addToPath","     * @param {String} val The value to add to the path string.","     * @private","     */","    _addToPath: function(val)","    {","        this._path = this._path || \"\";","        if(this._movePath)","        {","            this._path += this._movePath;","            this._movePath = null;","        }","        this._path += val;","    },","","    /**","     * Current x position of the drawing.","     *","     * @property _currentX","     * @type Number","     * @private","     */","    _currentX: 0,","","    /**","     * Current y position of the drqwing.","     *","     * @property _currentY","     * @type Number","     * @private","     */","    _currentY: 0,","    ","    /**","     * Draws a bezier curve.","     *","     * @method curveTo","     * @param {Number} cp1x x-coordinate for the first control point.","     * @param {Number} cp1y y-coordinate for the first control point.","     * @param {Number} cp2x x-coordinate for the second control point.","     * @param {Number} cp2y y-coordinate for the second control point.","     * @param {Number} x x-coordinate for the end point.","     * @param {Number} y y-coordinate for the end point.","     */","    curveTo: function() {","        this._curveTo.apply(this, [Y.Array(arguments), false]);","    },","","    /**","     * Draws a bezier curve.","     *","     * @method relativeCurveTo","     * @param {Number} cp1x x-coordinate for the first control point.","     * @param {Number} cp1y y-coordinate for the first control point.","     * @param {Number} cp2x x-coordinate for the second control point.","     * @param {Number} cp2y y-coordinate for the second control point.","     * @param {Number} x x-coordinate for the end point.","     * @param {Number} y y-coordinate for the end point.","     */","    relativeCurveTo: function() {","        this._curveTo.apply(this, [Y.Array(arguments), true]);","    },","    ","    /**","     * Implements curveTo methods.","     *","     * @method _curveTo","     * @param {Array} args The arguments to be used.","     * @param {Boolean} relative Indicates whether or not to use relative coordinates.","     * @private","     */","    _curveTo: function(args, relative) {","        var w,","            h,","            x,","            y,","            cp1x,","            cp1y,","            cp2x,","            cp2y,","            pts,","            right,","            left,","            bottom,","            top,","            i,","            len,","            path,","            command = relative ? \" v \" : \" c \",","            relativeX = relative ? parseFloat(this._currentX) : 0,","            relativeY = relative ? parseFloat(this._currentY) : 0;","        len = args.length - 5;","        path = command; ","        for(i = 0; i < len; i = i + 6)","        {","            cp1x = parseFloat(args[i]);","            cp1y = parseFloat(args[i + 1]);","            cp2x = parseFloat(args[i + 2]);","            cp2y = parseFloat(args[i + 3]);","            x = parseFloat(args[i + 4]);","            y = parseFloat(args[i + 5]);","            if(i > 0)","            {","                path = path + \", \";","            }","            path = path + this._round(cp1x) + \", \" + this._round(cp1y) + \", \" + this._round(cp2x) + \", \" + this._round(cp2y) + \", \" + this._round(x) + \", \" + this._round(y); ","            cp1x = cp1x + relativeX;","            cp1y = cp1y + relativeY;","            cp2x = cp2x + relativeX;","            cp2y = cp2y + relativeY;","            x = x + relativeX;","            y = y + relativeY;","            right = Math.max(x, Math.max(cp1x, cp2x));","            bottom = Math.max(y, Math.max(cp1y, cp2y));","            left = Math.min(x, Math.min(cp1x, cp2x));","            top = Math.min(y, Math.min(cp1y, cp2y));","            w = Math.abs(right - left);","            h = Math.abs(bottom - top);","            pts = [[this._currentX, this._currentY] , [cp1x, cp1y], [cp2x, cp2y], [x, y]]; ","            this._setCurveBoundingBox(pts, w, h);","            this._currentX = x;","            this._currentY = y;","        }","        this._addToPath(path);","    },","","    /**","     * Draws a quadratic bezier curve.","     *","     * @method quadraticCurveTo","     * @param {Number} cpx x-coordinate for the control point.","     * @param {Number} cpy y-coordinate for the control point.","     * @param {Number} x x-coordinate for the end point.","     * @param {Number} y y-coordinate for the end point.","     */","    quadraticCurveTo: function() {","        this._quadraticCurveTo.apply(this, [Y.Array(arguments), false]);","    },","","    /**","     * Draws a quadratic bezier curve relative to the current position.","     *","     * @method relativeQuadraticCurveTo","     * @param {Number} cpx x-coordinate for the control point.","     * @param {Number} cpy y-coordinate for the control point.","     * @param {Number} x x-coordinate for the end point.","     * @param {Number} y y-coordinate for the end point.","     */","    relativeQuadraticCurveTo: function() {","        this._quadraticCurveTo.apply(this, [Y.Array(arguments), true]);","    },","","    /**","     * Implements quadraticCurveTo methods.","     *","     * @method _quadraticCurveTo","     * @param {Array} args The arguments to be used.","     * @param {Boolean} relative Indicates whether or not to use relative coordinates.","     * @private","     */","    _quadraticCurveTo: function(args, relative) {","        var cpx, ","            cpy,","            cp1x,","            cp1y,","            cp2x,","            cp2y,","            x, ","            y,","            currentX = this._currentX,","            currentY = this._currentY,","            i,","            len = args.length - 3,","            bezierArgs = [],","            relativeX = relative ? parseFloat(this._currentX) : 0,","            relativeY = relative ? parseFloat(this._currentY) : 0;","        for(i = 0; i < len; i = i + 4)","        {","            cpx = parseFloat(args[i]) + relativeX;","            cpy = parseFloat(args[i + 1]) + relativeY;","            x = parseFloat(args[i + 2]) + relativeX;","            y = parseFloat(args[i + 3]) + relativeY;","            cp1x = currentX + 0.67*(cpx - currentX);","            cp1y = currentY + 0.67*(cpy - currentY);","            cp2x = cp1x + (x - currentX) * 0.34;","            cp2y = cp1y + (y - currentY) * 0.34;","            bezierArgs.push(cp1x);","            bezierArgs.push(cp1y);","            bezierArgs.push(cp2x);","            bezierArgs.push(cp2y);","            bezierArgs.push(x);","            bezierArgs.push(y);","        }","        this._curveTo.apply(this, [bezierArgs, false]);","    },","","    /**","     * Draws a rectangle.","     *","     * @method drawRect","     * @param {Number} x x-coordinate","     * @param {Number} y y-coordinate","     * @param {Number} w width","     * @param {Number} h height","     */","    drawRect: function(x, y, w, h) {","        this.moveTo(x, y);","        this.lineTo(x + w, y);","        this.lineTo(x + w, y + h);","        this.lineTo(x, y + h);","        this.lineTo(x, y);","        this._currentX = x;","        this._currentY = y;","        return this;","    },","","    /**","     * Draws a rectangle with rounded corners.","     * ","     * @method drawRect","     * @param {Number} x x-coordinate","     * @param {Number} y y-coordinate","     * @param {Number} w width","     * @param {Number} h height","     * @param {Number} ew width of the ellipse used to draw the rounded corners","     * @param {Number} eh height of the ellipse used to draw the rounded corners","     */","    drawRoundRect: function(x, y, w, h, ew, eh) {","        this.moveTo(x, y + eh);","        this.lineTo(x, y + h - eh);","        this.quadraticCurveTo(x, y + h, x + ew, y + h);","        this.lineTo(x + w - ew, y + h);","        this.quadraticCurveTo(x + w, y + h, x + w, y + h - eh);","        this.lineTo(x + w, y + eh);","        this.quadraticCurveTo(x + w, y, x + w - ew, y);","        this.lineTo(x + ew, y);","        this.quadraticCurveTo(x, y, x, y + eh);","        return this;","    },","","    /**","     * Draws a circle. Used internally by `CanvasCircle` class.","     *","     * @method drawCircle","     * @param {Number} x y-coordinate","     * @param {Number} y x-coordinate","     * @param {Number} r radius","     * @protected","     */","       drawCircle: function(x, y, radius) {","        var startAngle = 0,","            endAngle = 360,","            circum = radius * 2;","","        endAngle *= 65535;","        this._drawingComplete = false;","        this._trackSize(x + circum, y + circum);","        this.moveTo((x + circum), (y + radius));","        this._addToPath(\" ae \" + this._round(x + radius) + \", \" + this._round(y + radius) + \", \" + this._round(radius) + \", \" + this._round(radius) + \", \" + startAngle + \", \" + endAngle);","        return this;","    },","    ","    /**","     * Draws an ellipse.","     *","     * @method drawEllipse","     * @param {Number} x x-coordinate","     * @param {Number} y y-coordinate","     * @param {Number} w width","     * @param {Number} h height","     * @protected","     */","      drawEllipse: function(x, y, w, h) {","        var startAngle = 0,","            endAngle = 360,","            radius = w * 0.5,","            yRadius = h * 0.5;","        endAngle *= 65535;","        this._drawingComplete = false;","        this._trackSize(x + w, y + h);","        this.moveTo((x + w), (y + yRadius));","        this._addToPath(\" ae \" + this._round(x + radius) + \", \" + this._round(x + radius) + \", \" + this._round(y + yRadius) + \", \" + this._round(radius) + \", \" + this._round(yRadius) + \", \" + startAngle + \", \" + endAngle);","        return this;","    },","    ","    /**","     * Draws a diamond.     ","     * ","     * @method drawDiamond","     * @param {Number} x y-coordinate","     * @param {Number} y x-coordinate","     * @param {Number} width width","     * @param {Number} height height","     * @protected","     */","    drawDiamond: function(x, y, width, height)","    {","        var midWidth = width * 0.5,","            midHeight = height * 0.5;","        this.moveTo(x + midWidth, y);","        this.lineTo(x + width, y + midHeight);","        this.lineTo(x + midWidth, y + height);","        this.lineTo(x, y + midHeight);","        this.lineTo(x + midWidth, y);","        return this;","    },","","    /**","     * Draws a wedge.","     *","     * @method drawWedge","     * @param {Number} x x-coordinate of the wedge's center point","     * @param {Number} y y-coordinate of the wedge's center point","     * @param {Number} startAngle starting angle in degrees","     * @param {Number} arc sweep of the wedge. Negative values draw clockwise.","     * @param {Number} radius radius of wedge. If [optional] yRadius is defined, then radius is the x radius.","     * @param {Number} yRadius [optional] y radius for wedge.","     * @private","     */","    drawWedge: function(x, y, startAngle, arc, radius)","    {","        var diameter = radius * 2;","        if(Math.abs(arc) > 360)","        {","            arc = 360;","        }","        this._currentX = x;","        this._currentY = y;","        startAngle *= -65535;","        arc *= 65536;","        startAngle = Math.round(startAngle);","        arc = Math.round(arc);","        this.moveTo(x, y);","        this._addToPath(\" ae \" + this._round(x) + \", \" + this._round(y) + \", \" + this._round(radius) + \" \" + this._round(radius) + \", \" +  startAngle + \", \" + arc);","        this._trackSize(diameter, diameter); ","        return this;","    },","","    /**","     * Draws a line segment from the current drawing position to the specified x and y coordinates.","     * ","     * @method lineTo","     * @param {Number} point1 x-coordinate for the end point.","     * @param {Number} point2 y-coordinate for the end point.","     */","    lineTo: function()","    {","        this._lineTo.apply(this, [Y.Array(arguments), false]);","    },","","    /**","     * Draws a line segment using the current line style from the current drawing position to the relative x and y coordinates.","     * ","     * @method relativeLineTo","     * @param {Number} point1 x-coordinate for the end point.","     * @param {Number} point2 y-coordinate for the end point.","     */","    relativeLineTo: function()","    {","        this._lineTo.apply(this, [Y.Array(arguments), true]);","    },","","    /**","     * Implements lineTo methods.","     *","     * @method _lineTo","     * @param {Array} args The arguments to be used.","     * @param {Boolean} relative Indicates whether or not to use relative coordinates.","     * @private","     */","    _lineTo: function(args, relative) {","        var point1 = args[0],","            i,","            len,","            x,","            y,","            path = relative ? \" r \" : \" l \",","            relativeX = relative ? parseFloat(this._currentX) : 0,","            relativeY = relative ? parseFloat(this._currentY) : 0;","        if (typeof point1 == \"string\" || typeof point1 == \"number\") {","            len = args.length - 1;","            for (i = 0; i < len; i = i + 2) {","                x = parseFloat(args[i]);","                y = parseFloat(args[i + 1]);","                path += ' ' + this._round(x) + ', ' + this._round(y);","                x = x + relativeX;","                y = y + relativeY;","                this._currentX = x;","                this._currentY = y;","                this._trackSize.apply(this, [x, y]);","            }","        }","        else","        {","            len = args.length;","            for (i = 0; i < len; i = i + 1) {","                x = parseFloat(args[i][0]);","                y = parseFloat(args[i][1]);","                path += ' ' + this._round(x) + ', ' + this._round(y);","                x = x + relativeX;","                y = y + relativeY;","                this._currentX = x;","                this._currentY = y;","                this._trackSize.apply(this, [x, y]);","            }","        }","        this._addToPath(path);","        return this;","    },","    ","    /**","     * Moves the current drawing position to specified x and y coordinates.","     *","     * @method moveTo","     * @param {Number} x x-coordinate for the end point.","     * @param {Number} y y-coordinate for the end point.","     */","    moveTo: function()","    {","        this._moveTo.apply(this, [Y.Array(arguments), false]);","    },","","    /**","     * Moves the current drawing position relative to specified x and y coordinates.","     *","     * @method relativeMoveTo","     * @param {Number} x x-coordinate for the end point.","     * @param {Number} y y-coordinate for the end point.","     */","    relativeMoveTo: function()","    {","        this._moveTo.apply(this, [Y.Array(arguments), true]);","    },","","    /**","     * Implements moveTo methods.","     *","     * @method _moveTo","     * @param {Array} args The arguments to be used.","     * @param {Boolean} relative Indicates whether or not to use relative coordinates.","     * @private","     */","    _moveTo: function(args, relative) {","        var x = parseFloat(args[0]),","            y = parseFloat(args[1]),","            command = relative ? \" t \" : \" m \",","            relativeX = relative ? parseFloat(this._currentX) : 0,","            relativeY = relative ? parseFloat(this._currentY) : 0;","        this._movePath = command + this._round(x) + \", \" + this._round(y);","        x = x + relativeX;","        y = y + relativeY;","        this._trackSize(x, y);","        this._currentX = x;","        this._currentY = y;","    },","","    /**","     * Draws the graphic.","     *","     * @method _draw","     * @private","     */","    _closePath: function()","    {","        var fill = this.get(\"fill\"),","            stroke = this.get(\"stroke\"),","            node = this.node,","            w = this.get(\"width\"),","            h = this.get(\"height\"),","            path = this._path,","            pathEnd = \"\",","            multiplier = this._coordSpaceMultiplier;","        this._fillChangeHandler();","        this._strokeChangeHandler();","        if(path)","        {","            if(fill && fill.color)","            {","                pathEnd += ' x';","            }","            if(stroke)","            {","                pathEnd += ' e';","            }","        }","        if(path)","        {","            node.path = path + pathEnd;","        }","        if(!isNaN(w) && !isNaN(h))","        {","            node.coordOrigin = this._left + \", \" + this._top;","            node.coordSize = (w * multiplier) + \", \" + (h * multiplier);","            node.style.position = \"absolute\";","            node.style.width =  w + \"px\";","            node.style.height =  h + \"px\";","        }","        this._path = path;","        this._movePath = null;","        this._updateTransform();","    },","","    /**","     * Completes a drawing operation. ","     *","     * @method end","     */","    end: function()","    {","        this._closePath();","    },","","    /**","     * Ends a fill and stroke","     *","     * @method closePath","     */","    closePath: function()","    {","        this._addToPath(\" x e\");","    },","","    /**","     * Clears the path.","     *","     * @method clear","     */","    clear: function()","    {","         this._right = 0;","        this._bottom = 0;","        this._width = 0;","        this._height = 0;","        this._left = 0;","        this._top = 0;","        this._path = \"\";","        this._movePath = null;","    },","    ","    /**","     * Returns the points on a curve","     *","     * @method getBezierData","     * @param Array points Array containing the begin, end and control points of a curve.","     * @param Number t The value for incrementing the next set of points.","     * @return Array","     * @private","     */","    getBezierData: function(points, t) {  ","        var n = points.length,","            tmp = [],","            i,","            j;","","        for (i = 0; i < n; ++i){","            tmp[i] = [points[i][0], points[i][1]]; // save input","        }","        ","        for (j = 1; j < n; ++j) {","            for (i = 0; i < n - j; ++i) {","                tmp[i][0] = (1 - t) * tmp[i][0] + t * tmp[parseInt(i + 1, 10)][0];","                tmp[i][1] = (1 - t) * tmp[i][1] + t * tmp[parseInt(i + 1, 10)][1]; ","            }","        }","        return [ tmp[0][0], tmp[0][1] ]; ","    },","  ","    /**","     * Calculates the bounding box for a curve","     *","     * @method _setCurveBoundingBox","     * @param Array pts Array containing points for start, end and control points of a curve.","     * @param Number w Width used to calculate the number of points to describe the curve.","     * @param Number h Height used to calculate the number of points to describe the curve.","     * @private","     */","    _setCurveBoundingBox: function(pts, w, h)","    {","        var i,","            left = this._currentX,","            right = left,","            top = this._currentY,","            bottom = top,","            len = Math.round(Math.sqrt((w * w) + (h * h))),","            t = 1/len,","            xy;","        for(i = 0; i < len; ++i)","        {","            xy = this.getBezierData(pts, t * i);","            left = isNaN(left) ? xy[0] : Math.min(xy[0], left);","            right = isNaN(right) ? xy[0] : Math.max(xy[0], right);","            top = isNaN(top) ? xy[1] : Math.min(xy[1], top);","            bottom = isNaN(bottom) ? xy[1] : Math.max(xy[1], bottom);","        }","        left = Math.round(left * 10)/10;","        right = Math.round(right * 10)/10;","        top = Math.round(top * 10)/10;","        bottom = Math.round(bottom * 10)/10;","        this._trackSize(right, bottom);","        this._trackSize(left, top);","    },","","    /**","     * Updates the size of the graphics object","     *","     * @method _trackSize","     * @param {Number} w width","     * @param {Number} h height","     * @private","     */","    _trackSize: function(w, h) {","        if (w > this._right) {","            this._right = w;","        }","        if(w < this._left)","        {","            this._left = w;    ","        }","        if (h < this._top)","        {","            this._top = h;","        }","        if (h > this._bottom) ","        {","            this._bottom = h;","        }","        this._width = this._right - this._left;","        this._height = this._bottom - this._top;","    },","","    _left: 0,","","    _right: 0,","","    _top: 0,","","    _bottom: 0,","","    _width: 0,","","    _height: 0","};","Y.VMLDrawing = VMLDrawing;","/**"," * <a href=\"http://www.w3.org/TR/NOTE-VML\">VML</a> implementation of the <a href=\"Shape.html\">`Shape`</a> class. "," * `VMLShape` is not intended to be used directly. Instead, use the <a href=\"Shape.html\">`Shape`</a> class. "," * If the browser lacks <a href=\"http://www.w3.org/TR/SVG/\">SVG</a> and <a href=\"http://www.w3.org/TR/html5/the-canvas-element.html\">Canvas</a> "," * capabilities, the <a href=\"Shape.html\">`Shape`</a> class will point to the `VMLShape` class."," *"," * @module graphics"," * @class VMLShape"," * @constructor"," * @param {Object} cfg (optional) Attribute configs"," */","VMLShape = function() ","{","    this._transforms = [];","    this.matrix = new Y.Matrix();","    this._normalizedMatrix = new Y.Matrix();","    VMLShape.superclass.constructor.apply(this, arguments);","};","","VMLShape.NAME = \"shape\";","","Y.extend(VMLShape, Y.GraphicBase, Y.mix({","   /**","   * Indicates the type of shape","        *","    * @property _type","    * @type String","     * @private","     */","  _type: \"shape\",","    ","    /**","     * Init method, invoked during construction.","     * Calls `initializer` method.","     *","     * @method init","     * @protected","     */","      init: function()","     {","            this.initializer.apply(this, arguments);","     },","","        /**","   * Initializes the shape","      *","    * @private","   * @method _initialize","        */","  initializer: function(cfg)","   {","            var host = this,","            graphic = cfg.graphic,","            data = this.get(\"data\");","               host.createNode();","        if(graphic)","        {","            this._setGraphic(graphic);","        }","        if(data)","        {","            host._parsePathData(data);","        }","        this._updateHandler();","       },"," ","    /**","     * Set the Graphic instance for the shape.","     *","     * @method _setGraphic","     * @param {Graphic | Node | HTMLElement | String} render This param is used to determine the graphic instance. If it is a `Graphic` instance, it will be assigned","     * to the `graphic` attribute. Otherwise, a new Graphic instance will be created and rendered into the dom element that the render represents.","     * @private","     */","    _setGraphic: function(render)","    {","        var graphic;","        if(render instanceof Y.VMLGraphic)","        {","             this._graphic = render;","        }","        else","        {","            render = Y.one(render);","            graphic = new Y.VMLGraphic({","                render: render","            });","            graphic._appendShape(this);","            this._graphic = graphic;","            this._appendStrokeAndFill();","        }","    },","    ","    /**","     * Appends fill and stroke nodes to the shape.","     *","     * @method _appendStrokeAndFill","     * @private","     */","    _appendStrokeAndFill: function()","    {","        if(this._strokeNode)","        {","            this.node.appendChild(this._strokeNode);","        }","        if(this._fillNode)","        {","            this.node.appendChild(this._fillNode);","        }","    },","    ","      /**","   * Creates the dom node for the shape.","        *","     * @method createNode","        * @return HTMLElement","        * @private","   */","  createNode: function()","       {","        var node,","            concat = this._camelCaseConcat,","                  x = this.get(\"x\"),","                 y = this.get(\"y\"),","            w = this.get(\"width\"),","            h = this.get(\"height\"),","                  id,","                  type,","                        name = this.name,","            nodestring,","            visibility = this.get(\"visible\") ? \"visible\" : \"hidden\",","                     strokestring,","                        classString,","                 stroke,","                      endcap,","                      opacity,","                     joinstyle,","                   miterlimit,","                  dashstyle,","                   fill,","                        fillstring;","                  id = this.get(\"id\");","                       type = this._type == \"path\" ? \"shape\" : this._type;","                  classString = _getClassName(SHAPE) + \" \" + _getClassName(concat(IMPLEMENTATION, SHAPE)) + \" \" + _getClassName(name) + \" \" + _getClassName(concat(IMPLEMENTATION, name)) + \" \" + IMPLEMENTATION + type; ","                  stroke = this._getStrokeProps();","                     fill = this._getFillProps();","                 ","                     nodestring  = '<' + type + '  xmlns=\"urn:schemas-microsft.com:vml\" id=\"' + id + '\" class=\"' + classString + '\" style=\"behavior:url(#default#VML);display:inline-block;position:absolute;left:' + x + 'px;top:' + y + 'px;width:' + w + 'px;height:' + h + 'px;visibility:' + visibility + '\"';","","                if(stroke && stroke.weight && stroke.weight > 0)","                 {","                            endcap = stroke.endcap;","                              opacity = parseFloat(stroke.opacity);","                                joinstyle = stroke.joinstyle;","                                miterlimit = stroke.miterlimit;","                              dashstyle = stroke.dashstyle;","                                nodestring += ' stroked=\"t\" strokecolor=\"' + stroke.color + '\" strokeWeight=\"' + stroke.weight + 'px\"';","                                ","                             strokestring = '<stroke class=\"vmlstroke\" xmlns=\"urn:schemas-microsft.com:vml\" on=\"t\" style=\"behavior:url(#default#VML);display:inline-block;\"';","                             strokestring += ' opacity=\"' + opacity + '\"';","                              if(endcap)","                           {","                                    strokestring += ' endcap=\"' + endcap + '\"';","                                }","                            if(joinstyle)","                                {","                                    strokestring += ' joinstyle=\"' + joinstyle + '\"';","                          }","                            if(miterlimit)","                               {","                                    strokestring += ' miterlimit=\"' + miterlimit + '\"';","                                }","                            if(dashstyle)","                                {","                                    strokestring += ' dashstyle=\"' + dashstyle + '\"';","                          }","                            strokestring += '></stroke>';","                                this._strokeNode = DOCUMENT.createElement(strokestring);","                             nodestring += ' stroked=\"t\"';","                      }","                    else","                 {","                            nodestring += ' stroked=\"f\"';","                      }","                    if(fill)","                     {","                            if(fill.node)","                                {","                                    fillstring = fill.node;","                                      this._fillNode = DOCUMENT.createElement(fillstring);","                         }","                            if(fill.color)","                               {","                                    nodestring += ' fillcolor=\"' + fill.color + '\"';","                           }","                            nodestring += ' filled=\"' + fill.filled + '\"';","                     }","                    ","                     ","                     nodestring += '>';","                   nodestring += '</' + type + '>';","                     ","                     node = DOCUMENT.createElement(nodestring);","","            this.node = node;","            this._strokeFlag = false;","            this._fillFlag = false;","  },","","        /**","   * Add a class name to each node.","     *","    * @method addClass","   * @param {String} className the class name to add to the node's class attribute ","     */","  addClass: function(className)","        {","            var node = this.node;","                Y_DOM.addClass(node, className);","     },","","        /**","   * Removes a class name from each node.","       *","    * @method removeClass","        * @param {String} className the class name to remove from the node's class attribute","         */","  removeClass: function(className)","     {","            var node = this.node;","                Y_DOM.removeClass(node, className);","  },","","        /**","   * Gets the current position of the node in page coordinates.","         *","    * @method getXY","      * @return Array The XY position of the shape.","        */","  getXY: function()","    {","            var graphic = this._graphic,","                 parentXY = graphic.getXY(),","                  x = this.get(\"x\"),","                 y = this.get(\"y\");","         return [parentXY[0] + x, parentXY[1] + y];","   },","","        /**","   * Set the position of the shape in page coordinates, regardless of how the node is positioned.","       *","    * @method setXY","      * @param {Array} Contains x & y values for new position (coordinates are page-based)","     *","        */","  setXY: function(xy)","  {","            var graphic = this._graphic,","                 parentXY = graphic.getXY();","          this.set(\"x\", xy[0] - parentXY[0]);","                this.set(\"y\", xy[1] - parentXY[1]);","        },","","        /**","   * Determines whether the node is an ancestor of another HTML element in the DOM hierarchy. ","  *","    * @method contains","   * @param {VMLShape | HTMLElement} needle The possible node or descendent","     * @return Boolean Whether or not this shape is the needle or its ancestor.","   */","  contains: function(needle)","   {","            return needle === Y.one(this.node);","  },","","        /**","   * Compares nodes to determine if they match.","         * Node instances can be compared to each other and/or HTMLElements.","  * @method compareTo","  * @param {HTMLElement | Node} refNode The reference node to compare to the node.","     * @return {Boolean} True if the nodes match, false if they do not.","   */","  compareTo: function(refNode) {","               var node = this.node;","","             return node === refNode;","     },","","        /**","   * Test if the supplied node matches the supplied selector.","   *","    * @method test","       * @param {String} selector The CSS selector to test against.","         * @return Boolean Wheter or not the shape matches the selector.","      */","  test: function(selector)","     {","            return Y_SELECTOR.test(this.node, selector);"," },","","        /**","     * Calculates and returns properties for setting an initial stroke.","     *","     * @method _getStrokeProps","     * @return Object","     *","      * @private","   */","   _getStrokeProps: function()","  {","           var props,","                   stroke = this.get(\"stroke\"),","                       strokeOpacity,","                       dashstyle,","                   dash = \"\",","                 val,","                 i = 0,","                       len,","                 linecap,","                     linejoin;","        if(stroke && stroke.weight && stroke.weight > 0)","         {","                    props = {};","                  linecap = stroke.linecap || \"flat\";","                        linejoin = stroke.linejoin || \"round\";","                     if(linecap != \"round\" && linecap != \"square\")","                    {","                            linecap = \"flat\";","                  }","                    strokeOpacity = parseFloat(stroke.opacity);","                  dashstyle = stroke.dashstyle || \"none\";","                    stroke.color = stroke.color || \"#000000\";","                  stroke.weight = stroke.weight || 1;","                  stroke.opacity = IS_NUM(strokeOpacity) ? strokeOpacity : 1;","                  props.stroked = true;","                        props.color = stroke.color;","                  props.weight = stroke.weight;","                        props.endcap = linecap;","                      props.opacity = stroke.opacity;","                      if(IS_ARRAY(dashstyle))","                      {","                            dash = [];","                           len = dashstyle.length;","                              for(i = 0; i < len; ++i)","                             {","                                    val = dashstyle[i];","                                  dash[i] = val / stroke.weight;","                               }","                    }","                    if(linejoin == \"round\" || linejoin == \"bevel\")","                   {","                            props.joinstyle = linejoin;","                  }","                    else","                 {","                            linejoin = parseInt(linejoin, 10);","                           if(IS_NUM(linejoin))","                         {","                                    props.miterlimit = Math.max(linejoin, 1);","                                    props.joinstyle = \"miter\";","                         }","                    }","                    props.dashstyle = dash;","              }","            return props;","         },","","       /**","   * Adds a stroke to the shape node.","   *","    * @method _strokeChangeHandler","       * @private","   */","  _strokeChangeHandler: function(e)","    {","        if(!this._strokeFlag)","        {","            return;","        }","              var node = this.node,","                        stroke = this.get(\"stroke\"),","                       strokeOpacity,","                       dashstyle,","                   dash = \"\",","                 val,","                 i = 0,","                       len,","                 linecap,","                     linejoin;","            if(stroke && stroke.weight && stroke.weight > 0)","             {","                    linecap = stroke.linecap || \"flat\";","                        linejoin = stroke.linejoin || \"round\";","                     if(linecap != \"round\" && linecap != \"square\")","                    {","                            linecap = \"flat\";","                  }","                    strokeOpacity = parseFloat(stroke.opacity);","                  dashstyle = stroke.dashstyle || \"none\";","                    stroke.color = stroke.color || \"#000000\";","                  stroke.weight = stroke.weight || 1;","                  stroke.opacity = IS_NUM(strokeOpacity) ? strokeOpacity : 1;","                  node.stroked = true;","                 node.strokeColor = stroke.color;","                     node.strokeWeight = stroke.weight + \"px\";","                  if(!this._strokeNode)","                        {","                            this._strokeNode = this._createGraphicNode(\"stroke\");","                              node.appendChild(this._strokeNode);","                  }","                    this._strokeNode.endcap = linecap;","                   this._strokeNode.opacity = stroke.opacity;","                   if(IS_ARRAY(dashstyle))","                      {","                            dash = [];","                           len = dashstyle.length;","                              for(i = 0; i < len; ++i)","                             {","                                    val = dashstyle[i];","                                  dash[i] = val / stroke.weight;","                               }","                    }","                    if(linejoin == \"round\" || linejoin == \"bevel\")","                   {","                            this._strokeNode.joinstyle = linejoin;","                       }","                    else","                 {","                            linejoin = parseInt(linejoin, 10);","                           if(IS_NUM(linejoin))","                         {","                                    this._strokeNode.miterlimit = Math.max(linejoin, 1);","                                 this._strokeNode.joinstyle = \"miter\";","                              }","                    }","                    this._strokeNode.dashstyle = dash;","            this._strokeNode.on = true;","         }","            else","         {","            if(this._strokeNode)","            {","                this._strokeNode.on = false;","            }","                  node.stroked = false;","                }","        this._strokeFlag = false;","        },","","        /**","     * Calculates and returns properties for setting an initial fill.","     *","     * @method _getFillProps","     * @return Object","     *","  * @private","   */","  _getFillProps: function()","    {","            var fill = this.get(\"fill\"),","                       fillOpacity,","                 props,","                       gradient,","                    i,","                   fillstring,","                  filled = false;","              if(fill)","             {","                    props = {};","                  ","                     if(fill.type == \"radial\" || fill.type == \"linear\")","                       {","                            fillOpacity = parseFloat(fill.opacity);","                              fillOpacity = IS_NUM(fillOpacity) ? fillOpacity : 1;","                         filled = true;","                               gradient = this._getGradientFill(fill);","                              fillstring = '<fill xmlns=\"urn:schemas-microsft.com:vml\" class=\"vmlfill\" style=\"behavior:url(#default#VML);display:inline-block;\" opacity=\"' + fillOpacity + '\"';","                            for(i in gradient)","                           {","                                    if(gradient.hasOwnProperty(i))","                                       {","                                            fillstring += ' ' + i + '=\"' + gradient[i] + '\"';","                                  }","                            }","                            fillstring += ' />';","                         props.node = fillstring;","                     }","                    else if(fill.color)","                  {","                            fillOpacity = parseFloat(fill.opacity);","                              filled = true;","                props.color = fill.color;","                           if(IS_NUM(fillOpacity))","                              {","                                    fillOpacity = Math.max(Math.min(fillOpacity, 1), 0);","                    props.opacity = fillOpacity;    ","                              if(fillOpacity < 1)","                    {","                        props.node = '<fill xmlns=\"urn:schemas-microsft.com:vml\" class=\"vmlfill\" style=\"behavior:url(#default#VML);display:inline-block;\" type=\"solid\" opacity=\"' + fillOpacity + '\"/>';","                             }","                }","                    }","                    props.filled = filled;","               }","            return props;","        },","","        /**","   * Adds a fill to the shape node.","     *","    * @method _fillChangeHandler","         * @private","   */","  _fillChangeHandler: function(e)","      {","        if(!this._fillFlag)","        {","            return;","        }","                var node = this.node,","                        fill = this.get(\"fill\"),","                   fillOpacity,","                 fillstring,","                  filled = false,","            i,","            gradient;","             if(fill)","             {","                    if(fill.type == \"radial\" || fill.type == \"linear\")","                       {","                            filled = true;","                               gradient = this._getGradientFill(fill);","                if(this._fillNode)","                {","                    for(i in gradient)","                    {","                        if(gradient.hasOwnProperty(i))","                        {","                            if(i == \"colors\")","                            {","                                this._fillNode.colors.value = gradient[i];","                            }","                            else","                            {","                                this._fillNode[i] = gradient[i];","                            }","                        }","                    }","                }","                else","                {","                    fillstring = '<fill xmlns=\"urn:schemas-microsft.com:vml\" class=\"vmlfill\" style=\"behavior:url(#default#VML);display:inline-block;\"';","                    for(i in gradient)","                    {","                        if(gradient.hasOwnProperty(i))","                        {","                            fillstring += ' ' + i + '=\"' + gradient[i] + '\"';","                        }","                    }","                    fillstring += ' />';","                    this._fillNode = DOCUMENT.createElement(fillstring);","                    node.appendChild(this._fillNode);","                }","                 }","                    else if(fill.color)","                  {","                node.fillcolor = fill.color;","                             fillOpacity = parseFloat(fill.opacity);","                              filled = true;","                               if(IS_NUM(fillOpacity) && fillOpacity < 1)","                           {","                                    fill.opacity = fillOpacity;","                    if(this._fillNode)","                                 {","                        if(this._fillNode.getAttribute(\"type\") != \"solid\")","                        {","                            this._fillNode.type = \"solid\";","                        }","                                            this._fillNode.opacity = fillOpacity;","                                        }","                                    else","                                 {     ","                        fillstring = '<fill xmlns=\"urn:schemas-microsft.com:vml\" class=\"vmlfill\" style=\"behavior:url(#default#VML);display:inline-block;\" type=\"solid\" opacity=\"' + fillOpacity + '\"/>';","                        this._fillNode = DOCUMENT.createElement(fillstring);","                        node.appendChild(this._fillNode);","                                       }","                            }","                            else if(this._fillNode)","                {   ","                    this._fillNode.opacity = 1;","                    this._fillNode.type = \"solid\";","                              }","                    }","            }","            node.filled = filled;","        this._fillFlag = false;","      },","","        //not used. remove next release.","    _updateFillNode: function(node)","       {","            if(!this._fillNode)","          {","                    this._fillNode = this._createGraphicNode(\"fill\");","                  node.appendChild(this._fillNode);","            }","    },","","    /**","     * Calculates and returns an object containing gradient properties for a fill node. ","     *","     * @method _getGradientFill","     * @param {Object} fill Object containing fill properties.","     * @return Object","     * @private","     */","   _getGradientFill: function(fill)","     {","            var gradientProps = {},","                      gradientBoxWidth,","                    gradientBoxHeight,","                   type = fill.type,","                    w = this.get(\"width\"),","                     h = this.get(\"height\"),","                    isNumber = IS_NUM,","                   stop,","                        stops = fill.stops,","                  len = stops.length,","                  opacity,","                     color,","                       i,","                   oi,","                  colorstring = \"\",","                  cx = fill.cx,","                        cy = fill.cy,","                        fx = fill.fx,","                        fy = fill.fy,","                        r = fill.r,","            pct,","                       rotation = fill.rotation || 0;","               if(type === \"linear\")","              {","            if(rotation <= 270)","            {","                rotation = Math.abs(rotation - 270);","            }","                   else if(rotation < 360)","            {","                rotation = 270 + (360 - rotation);","            }","            else","            {","                rotation = 270;","            }","            gradientProps.type = \"gradient\";//\"gradientunscaled\";","                    gradientProps.angle = rotation;","              }","            else if(type === \"radial\")","         {","                    gradientBoxWidth = w * (r * 2);","                      gradientBoxHeight = h * (r * 2);","                     fx = r * 2 * (fx - 0.5);","                     fy = r * 2 * (fy - 0.5);","                     fx += cx;","                    fy += cy;","                    gradientProps.focussize = (gradientBoxWidth/w)/10 + \"% \" + (gradientBoxHeight/h)/10 + \"%\";","                       gradientProps.alignshape = false;","                    gradientProps.type = \"gradientradial\";","                     gradientProps.focus = \"100%\";","                      gradientProps.focusposition = Math.round(fx * 100) + \"% \" + Math.round(fy * 100) + \"%\";","          }","            for(i = 0;i < len; ++i) {","                    stop = stops[i];","                     color = stop.color;","                  opacity = stop.opacity;","                      opacity = isNumber(opacity) ? opacity : 1;","                   pct = stop.offset || i/(len-1);","                      pct *= (r * 2);","            pct = Math.round(100 * pct) + \"%\";","            oi = i > 0 ? i + 1 : \"\";","            gradientProps[\"opacity\" + oi] = opacity + \"\";","            colorstring += \", \" + pct + \" \" + color;","               }","            if(parseFloat(pct) < 100)","            {","                    colorstring += \", 100% \" + color;","          }","            gradientProps.colors = colorstring.substr(2);","                return gradientProps;","        },","","    /**","     * Adds a transform to the shape.","     *","     * @method _addTransform","     * @param {String} type The transform being applied.","     * @param {Array} args The arguments for the transform.","      * @private","   */","  _addTransform: function(type, args)","  {","        args = Y.Array(args);","        this._transform = Y_LANG.trim(this._transform + \" \" + type + \"(\" + args.join(\", \") + \")\");","        args.unshift(type);","        this._transforms.push(args);","        if(this.initialized)","        {","            this._updateTransform();","        }","    },","   ","     /**","     * Applies all transforms.","     *","     * @method _updateTransform","       * @private","   */","  _updateTransform: function()"," {","            var node = this.node,","            key,","                     transform,","                   transformOrigin,","            x = this.get(\"x\"),","            y = this.get(\"y\"),","            tx,","            ty,","            matrix = this.matrix,","            normalizedMatrix = this._normalizedMatrix,","            isPathShape = this instanceof Y.VMLPath,","            i,","            len = this._transforms.length;","        if(this._transforms && this._transforms.length > 0)","           {","            transformOrigin = this.get(\"transformOrigin\");","       ","            if(isPathShape)","            {","                normalizedMatrix.translate(this._left, this._top);","            }","            //vml skew matrix transformOrigin ranges from -0.5 to 0.5.","            //subtract 0.5 from values","            tx = transformOrigin[0] - 0.5;","            ty = transformOrigin[1] - 0.5;","            ","            //ensure the values are within the appropriate range to avoid errors","            tx = Math.max(-0.5, Math.min(0.5, tx));","            ty = Math.max(-0.5, Math.min(0.5, ty));","            for(i = 0; i < len; ++i)","            {","                key = this._transforms[i].shift();","                if(key)","                {","                    normalizedMatrix[key].apply(normalizedMatrix, this._transforms[i]); ","                    matrix[key].apply(matrix, this._transforms[i]); ","                }","                      }","            if(isPathShape)","            {","                normalizedMatrix.translate(-this._left, -this._top);","            }","            transform = normalizedMatrix.a + \",\" + ","                        normalizedMatrix.c + \",\" + ","                        normalizedMatrix.b + \",\" + ","                        normalizedMatrix.d + \",\" + ","                        0 + \",\" +","                        0;","            }","        this._graphic.addToRedrawQueue(this);    ","        if(transform)","        {","            if(!this._skew)","            {","                this._skew = DOCUMENT.createElement( '<skew class=\"vmlskew\" xmlns=\"urn:schemas-microsft.com:vml\" on=\"false\" style=\"behavior:url(#default#VML);display:inline-block;\" />');","                this.node.appendChild(this._skew); ","            }","            this._skew.matrix = transform;","            this._skew.on = true;","            //this._skew.offset = this._getSkewOffsetValue(normalizedMatrix.dx) + \"px, \" + this._getSkewOffsetValue(normalizedMatrix.dy) + \"px\";","            this._skew.origin = tx + \", \" + ty;","        }","        if(this._type != \"path\")","        {","            this._transforms = [];","        }","        //add the translate to the x and y coordinates","        node.style.left = (x + this._getSkewOffsetValue(normalizedMatrix.dx)) + \"px\";","        node.style.top =  (y + this._getSkewOffsetValue(normalizedMatrix.dy)) + \"px\";","    },","    ","    /**","     * Normalizes the skew offset values between -32767 and 32767.","     *","     * @method _getSkewOffsetValue","     * @param {Number} val The value to normalize","     * @return Number","     * @private","     */","    _getSkewOffsetValue: function(val)","    {","        var sign = Y.MatrixUtil.sign(val),","            absVal = Math.abs(val);","        val = Math.min(absVal, 32767) * sign;","        return val;","    },","    ","     /**","   * Storage for translateX","     *","     * @property _translateX","     * @type Number","       * @private","   */","  _translateX: 0,","","   /**","   * Storage for translateY","     *","     * @property _translateY","     * @type Number","       * @private","   */","  _translateY: 0,","    ","    /**","     * Storage for the transform attribute.","     *","     * @property _transform","     * @type String","     * @private","     */","    _transform: \"\",","      ","    /**","    * Specifies a 2d translation.","        *","    * @method translate","  * @param {Number} x The value to translate on the x-axis.","    * @param {Number} y The value to translate on the y-axis.","    */","  translate: function(x, y)","    {","            this._translateX += x;","               this._translateY += y;","               this._addTransform(\"translate\", arguments);","        },","","        /**","   * Translates the shape along the x-axis. When translating x and y coordinates,","       * use the `translate` method.","        *","    * @method translateX","         * @param {Number} x The value to translate.","  */","  translateX: function(x)","    {","        this._translateX += x;","        this._addTransform(\"translateX\", arguments);","    },","","        /**","   * Performs a translate on the y-coordinate. When translating x and y coordinates,","    * use the `translate` method.","        *","    * @method translateY","         * @param {Number} y The value to translate.","  */","  translateY: function(y)","    {","        this._translateY += y;","        this._addTransform(\"translateY\", arguments);","    },","","    /**","     * Skews the shape around the x-axis and y-axis.","     *","     * @method skew","     * @param {Number} x The value to skew on the x-axis.","     * @param {Number} y The value to skew on the y-axis.","     */","    skew: function(x, y)","    {","        this._addTransform(\"skew\", arguments);","    },","","    /**","   * Skews the shape around the x-axis.","         *","    * @method skewX","      * @param {Number} x x-coordinate","     */","   skewX: function(x)","   {","           this._addTransform(\"skewX\", arguments);","     },","","       /**","   * Skews the shape around the y-axis.","         *","    * @method skewY","      * @param {Number} y y-coordinate","     */","   skewY: function(y)","   {","           this._addTransform(\"skewY\", arguments);","     },","","       /**","   * Rotates the shape clockwise around it transformOrigin.","     *","    * @method rotate","     * @param {Number} deg The degree of the rotation.","    */","   rotate: function(deg)","        {","           this._addTransform(\"rotate\", arguments);","    },","","       /**","   * Specifies a 2d scaling operation.","  *","    * @method scale","      * @param {Number} val","        */","  scale: function(x, y)","        {","            this._addTransform(\"scale\", arguments);","    },","","        /**","     * Overrides default `on` method. Checks to see if its a dom interaction event. If so, ","     * return an event attached to the `node` element. If not, return the normal functionality.","     *","     * @method on","     * @param {String} type event type","     * @param {Object} callback function","  * @private","   */","  on: function(type, fn)","       {","            if(Y.Node.DOM_EVENTS[type])","          {","                    return Y.one(\"#\" +  this.get(\"id\")).on(type, fn);","                }","            return Y.on.apply(this, arguments);","  },","","        /**","   * Draws the shape.","   *","    * @method _draw","      * @private","   */","  _draw: function()","    {","    },","","        /**","     * Updates `Shape` based on attribute changes.","     *","     * @method _updateHandler","     * @private","   */","  _updateHandler: function(e)","  {","            var host = this,","            node = host.node;","        host._fillChangeHandler();","        host._strokeChangeHandler();","        node.style.width = this.get(\"width\") + \"px\";","        node.style.height = this.get(\"height\") + \"px\"; ","        this._draw();","                host._updateTransform();","     },","","        /**","   * Creates a graphic node","     *","    * @method _createGraphicNode","         * @param {String} type node type to create","   * @return HTMLElement","        * @private","   */","  _createGraphicNode: function(type)","   {","            type = type || this._type;","           return DOCUMENT.createElement('<' + type + ' xmlns=\"urn:schemas-microsft.com:vml\" style=\"behavior:url(#default#VML);display:inline-block;\" class=\"vml' + type + '\"/>');","        },","","        /**","   * Value function for fill attribute","  *","    * @private","   * @method _getDefaultFill","    * @return Object","     */","  _getDefaultFill: function() {","                return {","                     type: \"solid\",","                     opacity: 1,","                  cx: 0.5,","                     cy: 0.5,","                     fx: 0.5,","                     fy: 0.5,","                     r: 0.5","               };","   },","","        /**","   * Value function for stroke attribute","        *","    * @private","   * @method _getDefaultStroke","  * @return Object","     */","  _getDefaultStroke: function() ","       {","            return {","                     weight: 1,","                   dashstyle: \"none\",","                 color: \"#000\",","                     opacity: 1.0","         };","   },","","    /**","     * Sets the value of an attribute.","     *","     * @method set","     * @param {String|Object} name The name of the attribute. Alternatively, an object of key value pairs can ","     * be passed in to set multiple attributes at once.","     * @param {Any} value The value to set the attribute to. This value is ignored if an object is received as ","     * the name param.","     */","       set: function() ","     {","            var host = this;","             AttributeLite.prototype.set.apply(host, arguments);","          if(host.initialized)","         {","                    host._updateHandler();","               }","    },","","        /**","   * Returns the bounds for a shape.","    *","     * Calculates the a new bounding box from the original corner coordinates (base on size and position) and the transform matrix.","     * The calculated bounding box is used by the graphic instance to calculate its viewBox. ","     *","     * @method getBounds","  * @return Object","     */","  getBounds: function()","        {","            var isPathShape = this instanceof Y.VMLPath,","                 w = this.get(\"width\"),","                     h = this.get(\"height\"),","            x = this.get(\"x\"),","            y = this.get(\"y\");","        if(isPathShape)","        {","            x = x + this._left;","            y = y + this._top;","            w = this._right - this._left;","            h = this._bottom - this._top;","        }","        return this._getContentRect(w, h, x, y);","      },","","    /**","     * Calculates the bounding box for the shape.","     *","     * @method _getContentRect","     * @param {Number} w width of the shape","     * @param {Number} h height of the shape","     * @param {Number} x x-coordinate of the shape","     * @param {Number} y y-coordinate of the shape","     * @private","     */","    _getContentRect: function(w, h, x, y)","    {","        var transformOrigin = this.get(\"transformOrigin\"),","            transformX = transformOrigin[0] * w,","            transformY = transformOrigin[1] * h,","                transforms = this.matrix.getTransformArray(this.get(\"transform\")),","            matrix = new Y.Matrix(),","            i,","            len = transforms.length,","            transform,","            key,","            contentRect,","            isPathShape = this instanceof Y.VMLPath;","        if(isPathShape)","        {","            matrix.translate(this._left, this._top);","        }","        transformX = !isNaN(transformX) ? transformX : 0;","        transformY = !isNaN(transformY) ? transformY : 0;","        matrix.translate(transformX, transformY);","        for(i = 0; i < len; i = i + 1)","        {","            transform = transforms[i];","            key = transform.shift();","            if(key)","            {","                matrix[key].apply(matrix, transform); ","            }","        }","        matrix.translate(-transformX, -transformY);","        if(isPathShape)","        {","            matrix.translate(-this._left, -this._top);","        }","        contentRect = matrix.getContentRect(w, h, x, y);","        return contentRect;","    },","","    /**","     * Places the shape above all other shapes.","     *","     * @method toFront","     */","    toFront: function()","    {","        var graphic = this.get(\"graphic\");","        if(graphic)","        {","            graphic._toFront(this);","        }","    },","","    /**","     * Places the shape underneath all other shapes.","     *","     * @method toFront","     */","    toBack: function()","    {","        var graphic = this.get(\"graphic\");","        if(graphic)","        {","            graphic._toBack(this);","        }","    },","","    /**","     * Parses path data string and call mapped methods.","     *","     * @method _parsePathData","     * @param {String} val The path data","     * @private","     */","    _parsePathData: function(val)","    {","        var method,","            methodSymbol,","            args,","            commandArray = Y.Lang.trim(val.match(SPLITPATHPATTERN)),","            i,","            len, ","            str,","            symbolToMethod = this._pathSymbolToMethod;","        if(commandArray)","        {","            this.clear();","            len = commandArray.length || 0;","            for(i = 0; i < len; i = i + 1)","            {","                str = commandArray[i];","                methodSymbol = str.substr(0, 1);","                args = str.substr(1).match(SPLITARGSPATTERN);","                method = symbolToMethod[methodSymbol];","                if(method)","                {","                    if(args)","                    {","                        this[method].apply(this, args);","                    }","                    else","                    {","                        this[method].apply(this);","                    }","                }","            }","            this.end();","        }","    },","   ","    /**","     *  Destroys shape","     *","     *  @method destroy","     */","    destroy: function()","    {","        var graphic = this.get(\"graphic\");","        if(graphic)","        {","            graphic.removeShape(this);","        }","        else","        {","            this._destroy();","        }","    },","","    /**","     *  Implementation for shape destruction","     *","     *  @method destroy","     *  @protected","     */","    _destroy: function()","    {","        if(this.node)","        {   ","            if(this._fillNode)","            {","                this.node.removeChild(this._fillNode);","                this._fillNode = null;","            }","            if(this._strokeNode)","            {","                this.node.removeChild(this._strokeNode);","                this._strokeNode = null;","            }","            Y.one(this.node).remove(true);","        }","    }","}, Y.VMLDrawing.prototype));","","VMLShape.ATTRS = {","  /**","   * An array of x, y values which indicates the transformOrigin in which to rotate the shape. Valid values range between 0 and 1 representing a ","       * fraction of the shape's corresponding bounding box dimension. The default value is [0.5, 0.5].","     *","    * @config transformOrigin","    * @type Array","        */","  transformOrigin: {","           valueFn: function()","          {","                    return [0.5, 0.5];","           }","    },","   ","    /**","     * <p>A string containing, in order, transform operations applied to the shape instance. The `transform` string can contain the following values:","     *     ","     *    <dl>","     *        <dt>rotate</dt><dd>Rotates the shape clockwise around it transformOrigin.</dd>","     *        <dt>translate</dt><dd>Specifies a 2d translation.</dd>","     *        <dt>skew</dt><dd>Skews the shape around the x-axis and y-axis.</dd>","     *        <dt>scale</dt><dd>Specifies a 2d scaling operation.</dd>","     *        <dt>translateX</dt><dd>Translates the shape along the x-axis.</dd>","     *        <dt>translateY</dt><dd>Translates the shape along the y-axis.</dd>","     *        <dt>skewX</dt><dd>Skews the shape around the x-axis.</dd>","     *        <dt>skewY</dt><dd>Skews the shape around the y-axis.</dd>","     *        <dt>matrix</dt><dd>Specifies a 2D transformation matrix comprised of the specified six values.</dd>      ","     *    </dl>","     * </p>","     * <p>Applying transforms through the transform attribute will reset the transform matrix and apply a new transform. The shape class also contains corresponding methods for each transform","     * that will apply the transform to the current matrix. The below code illustrates how you might use the `transform` attribute to instantiate a recangle with a rotation of 45 degrees.</p>","            var myRect = new Y.Rect({","                type:\"rect\",","                width: 50,","                height: 40,","                transform: \"rotate(45)\"","            };","     * <p>The code below would apply `translate` and `rotate` to an existing shape.</p>","    ","        myRect.set(\"transform\", \"translate(40, 50) rotate(45)\");","         * @config transform","     * @type String  ","  */","  transform: {","         setter: function(val)","                {","            var i,","                len,","                transform;","            this.matrix.init();    ","            this._normalizedMatrix.init();   ","            this._transforms = this.matrix.getTransformArray(val);","            len = this._transforms.length;","            for(i = 0;i < len; ++i)","            {","                transform = this._transforms[i];","            }","            this._transform = val;","            return val;","           },","","        getter: function()","        {","            return this._transform;","        }","     },","","        /**","   * Indicates the x position of shape.","         *","    * @config x","  * @type Number","       */","  x: {","         value: 0","     },","","        /**","   * Indicates the y position of shape.","         *","    * @config y","  * @type Number","       */","  y: {","         value: 0","     },","","        /**","   * Unique id for class instance.","      *","    * @config id","         * @type String","       */","  id: {","                valueFn: function()","          {","                    return Y.guid();","             },","","                setter: function(val)","                {","                    var node = this.node;","                        if(node)","                     {","                            node.setAttribute(\"id\", val);","                      }","                    return val;","          }","    },","   ","     /**","   * ","   * @config width","      */","  width: {","             value: 0","     },","","        /**","   * ","   * @config height","     */","  height: {","            value: 0","     },","","        /**","   * Indicates whether the shape is visible.","    *","    * @config visible","    * @type Boolean","      */","  visible: {","           value: true,","","              setter: function(val){","                       var node = this.node,","                                visibility = val ? \"visible\" : \"hidden\";","                 if(node)","                     {","                            node.style.visibility = visibility;","                  }","                    return val;","          }","    },","","        /**","   * Contains information about the fill of the shape. ","     *  <dl>","     *      <dt>color</dt><dd>The color of the fill.</dd>","     *      <dt>opacity</dt><dd>Number between 0 and 1 that indicates the opacity of the fill. The default value is 1.</dd>","     *      <dt>type</dt><dd>Type of fill.","     *          <dl>","     *              <dt>solid</dt><dd>Solid single color fill. (default)</dd>","     *              <dt>linear</dt><dd>Linear gradient fill.</dd>","     *              <dt>radial</dt><dd>Radial gradient fill.</dd>","     *          </dl>","     *      </dd>","     *  </dl>","     *  <p>If a `linear` or `radial` is specified as the fill type. The following additional property is used:","     *  <dl>","     *      <dt>stops</dt><dd>An array of objects containing the following properties:","     *          <dl>","     *              <dt>color</dt><dd>The color of the stop.</dd>","     *              <dt>opacity</dt><dd>Number between 0 and 1 that indicates the opacity of the stop. The default value is 1. Note: No effect for IE 6 - 8</dd>","     *              <dt>offset</dt><dd>Number between 0 and 1 indicating where the color stop is positioned.</dd> ","     *          </dl>","     *      </dd>","     *      <p>Linear gradients also have the following property:</p>","     *      <dt>rotation</dt><dd>Linear gradients flow left to right by default. The rotation property allows you to change the flow by rotation. (e.g. A rotation of 180 would make the gradient pain from right to left.)</dd>","     *      <p>Radial gradients have the following additional properties:</p>","     *      <dt>r</dt><dd>Radius of the gradient circle.</dd>","     *      <dt>fx</dt><dd>Focal point x-coordinate of the gradient.</dd>","     *      <dt>fy</dt><dd>Focal point y-coordinate of the gradient.</dd>","     *  </dl>","     *  <p>The corresponding `SVGShape` class implements the following additional properties.</p>","     *  <dl>","     *      <dt>cx</dt><dd>","     *          <p>The x-coordinate of the center of the gradient circle. Determines where the color stop begins. The default value 0.5.</p>","     *      </dd>","     *      <dt>cy</dt><dd>","     *          <p>The y-coordinate of the center of the gradient circle. Determines where the color stop begins. The default value 0.5.</p>","     *      </dd>","     *  </dl>","     *  <p>These properties are not currently implemented in `CanvasShape` or `VMLShape`.</p> ","       *","    * @config fill","       * @type Object ","      */","  fill: {","              valueFn: \"_getDefaultFill\",","                ","             setter: function(val)","                {","                    var i,","                               fill,","                                tmpl = this.get(\"fill\") || this._getDefaultFill();","                 ","                     if(val)","                      {","                            //ensure, fill type is solid if color is explicitly passed.","                          if(val.hasOwnProperty(\"color\"))","                            {","                                    val.type = \"solid\";","                                }","                            for(i in val)","                                {","                                    if(val.hasOwnProperty(i))","                                    {   ","                                         tmpl[i] = val[i];","                                    }","                            }","                    }","                    fill = tmpl;","                 if(fill && fill.color)","                       {","                            if(fill.color === undefined || fill.color == \"none\")","                               {","                                    fill.color = null;","                           }","                    }","                    this._fillFlag = true;","            return fill;","            }","    },","","        /**","   * Contains information about the stroke of the shape.","     *  <dl>","     *      <dt>color</dt><dd>The color of the stroke.</dd>","     *      <dt>weight</dt><dd>Number that indicates the width of the stroke.</dd>","     *      <dt>opacity</dt><dd>Number between 0 and 1 that indicates the opacity of the stroke. The default value is 1.</dd>","     *      <dt>dashstyle</dt>Indicates whether to draw a dashed stroke. When set to \"none\", a solid stroke is drawn. When set to an array, the first index indicates the","     *  length of the dash. The second index indicates the length of gap.","     *      <dt>linecap</dt><dd>Specifies the linecap for the stroke. The following values can be specified:","     *          <dl>","     *              <dt>butt (default)</dt><dd>Specifies a butt linecap.</dd>","     *              <dt>square</dt><dd>Specifies a sqare linecap.</dd>","     *              <dt>round</dt><dd>Specifies a round linecap.</dd>","     *          </dl>","     *      </dd>","     *      <dt>linejoin</dt><dd>Specifies a linejoin for the stroke. The following values can be specified:","     *          <dl>","     *              <dt>round (default)</dt><dd>Specifies that the linejoin will be round.</dd>","     *              <dt>bevel</dt><dd>Specifies a bevel for the linejoin.</dd>","     *              <dt>miter limit</dt><dd>An integer specifying the miter limit of a miter linejoin. If you want to specify a linejoin of miter, you simply specify the limit as opposed to having","     *  separate miter and miter limit values.</dd>","     *          </dl>","     *      </dd>","     *  </dl>","       *","    * @config stroke","     * @type Object","       */","  stroke: {","            valueFn: \"_getDefaultStroke\",","              ","             setter: function(val)","                {","                    var i,","                               stroke,","                wt,","                                tmpl = this.get(\"stroke\") || this._getDefaultStroke();","                     if(val)","                      {","                if(val.hasOwnProperty(\"weight\"))","                {","                    wt = parseInt(val.weight, 10);","                    if(!isNaN(wt))","                    {","                        val.weight = wt;","                    }","                }","                          for(i in val)","                                {","                                    if(val.hasOwnProperty(i))","                                    {   ","                                         tmpl[i] = val[i];","                                    }","                            }","                    }","                    stroke = tmpl;","            this._strokeFlag = true;","                        return stroke;","               }","    },","   ","     //Not used. Remove in future.","    autoSize: {","              value: false"," },","","        // Only implemented in SVG","   // Determines whether the instance will receive mouse events.","        // ","  // @config pointerEvents","     // @type string","      //","   pointerEvents: {","             value: \"visiblePainted\"","    },","","        /**","   * Dom node for the shape.","    *","    * @config node","       * @type HTMLElement","  * @readOnly","  */","  node: {","              readOnly: true,","","           getter: function()","           {","                    return this.node;","            }","    },","","    /**","     * Represents an SVG Path string. This will be parsed and added to shape's API to represent the SVG data across all implementations. Note that when using VML or SVG ","     * implementations, part of this content will be added to the DOM using respective VML/SVG attributes. If your content comes from an untrusted source, you will need ","     * to ensure that no malicious code is included in that content. ","     *","     * @config data","     * @type String","     */","    data: {","        setter: function(val)","        {","            if(this.get(\"node\"))","            {","                this._parsePathData(val);","            }","            return val;","        }","    },","","  /**","   * Reference to the container Graphic.","        *","    * @config graphic","    * @type Graphic","      */","  graphic: {","           readOnly: true,","","           getter: function()","           {","                    return this._graphic;","                }","    }","};","Y.VMLShape = VMLShape;","/**"," * <a href=\"http://www.w3.org/TR/NOTE-VML\">VML</a> implementation of the <a href=\"Path.html\">`Path`</a> class. "," * `VMLPath` is not intended to be used directly. Instead, use the <a href=\"Path.html\">`Path`</a> class. "," * If the browser lacks <a href=\"http://www.w3.org/TR/SVG/\">SVG</a> and <a href=\"http://www.w3.org/TR/html5/the-canvas-element.html\">Canvas</a> "," * capabilities, the <a href=\"Path.html\">`Path`</a> class will point to the `VMLPath` class."," *"," * @module graphics"," * @class VMLPath"," * @extends VMLShape"," */","VMLPath = function()","{","     VMLPath.superclass.constructor.apply(this, arguments);","};","","VMLPath.NAME = \"path\";","Y.extend(VMLPath, Y.VMLShape);","VMLPath.ATTRS = Y.merge(Y.VMLShape.ATTRS, {","     /**","   * Indicates the width of the shape","   * ","   * @config width","      * @type Number","       */","  width: {","             getter: function()","           {","                    var val = Math.max(this._right - this._left, 0);","                     return val;","          }","    },","","        /**","   * Indicates the height of the shape","  * ","   * @config height","     * @type Number","       */","  height: {","            getter: function()","           {","                    return Math.max(this._bottom - this._top, 0);","                }","    },","   ","     /**","   * Indicates the path used for the node.","      *","    * @config path","       * @type String","     * @readOnly","    */","  path: {","              readOnly: true,","","           getter: function()","           {","                    return this._path;","           }","    }","});","Y.VMLPath = VMLPath;","/**"," * <a href=\"http://www.w3.org/TR/NOTE-VML\">VML</a> implementation of the <a href=\"Rect.html\">`Rect`</a> class. "," * `VMLRect` is not intended to be used directly. Instead, use the <a href=\"Rect.html\">`Rect`</a> class. "," * If the browser lacks <a href=\"http://www.w3.org/TR/SVG/\">SVG</a> and <a href=\"http://www.w3.org/TR/html5/the-canvas-element.html\">Canvas</a> "," * capabilities, the <a href=\"Rect.html\">`Rect`</a> class will point to the `VMLRect` class."," *"," * @module graphics"," * @class VMLRect"," * @constructor"," */","VMLRect = function()","{","   VMLRect.superclass.constructor.apply(this, arguments);","};","VMLRect.NAME = \"rect\"; ","Y.extend(VMLRect, Y.VMLShape, {","    /**","   * Indicates the type of shape","        *","    * @property _type","    * @type String","     * @private","     */","  _type: \"rect\"","});","VMLRect.ATTRS = Y.VMLShape.ATTRS;","Y.VMLRect = VMLRect;","/**"," * <a href=\"http://www.w3.org/TR/NOTE-VML\">VML</a> implementation of the <a href=\"Ellipse.html\">`Ellipse`</a> class. "," * `VMLEllipse` is not intended to be used directly. Instead, use the <a href=\"Ellipse.html\">`Ellipse`</a> class. "," * If the browser lacks <a href=\"http://www.w3.org/TR/SVG/\">SVG</a> and <a href=\"http://www.w3.org/TR/html5/the-canvas-element.html\">Canvas</a> "," * capabilities, the <a href=\"Ellipse.html\">`Ellipse`</a> class will point to the `VMLEllipse` class."," *"," * @module graphics"," * @class VMLEllipse"," * @constructor"," */","VMLEllipse = function()","{","   VMLEllipse.superclass.constructor.apply(this, arguments);","};","","VMLEllipse.NAME = \"ellipse\";","","Y.extend(VMLEllipse, Y.VMLShape, {","   /**","   * Indicates the type of shape","        *","    * @property _type","    * @type String","     * @private","     */","  _type: \"oval\"","});","VMLEllipse.ATTRS = Y.merge(Y.VMLShape.ATTRS, {","       /**","   * Horizontal radius for the ellipse. ","        *","    * @config xRadius","    * @type Number","       */","  xRadius: {","           lazyAdd: false,","","           getter: function()","           {","                    var val = this.get(\"width\");","                       val = Math.round((val/2) * 100)/100;","                 return val;","          },","           ","             setter: function(val)","                {","                    var w = val * 2; ","                    this.set(\"width\", w);","                      return val;","          }","    },","","        /**","   * Vertical radius for the ellipse. ","  *","    * @config yRadius","    * @type Number","       * @readOnly","  */","  yRadius: {","           lazyAdd: false,","              ","             getter: function()","           {","                    var val = this.get(\"height\");","                      val = Math.round((val/2) * 100)/100;","                 return val;","          },","","                setter: function(val)","                {","                    var h = val * 2;","                     this.set(\"height\", h);","                     return val;","          }","    }","});","Y.VMLEllipse = VMLEllipse;","/**"," * <a href=\"http://www.w3.org/TR/NOTE-VML\">VML</a> implementation of the <a href=\"Circle.html\">`Circle`</a> class. "," * `VMLCircle` is not intended to be used directly. Instead, use the <a href=\"Circle.html\">`Circle`</a> class. "," * If the browser lacks <a href=\"http://www.w3.org/TR/SVG/\">SVG</a> and <a href=\"http://www.w3.org/TR/html5/the-canvas-element.html\">Canvas</a> "," * capabilities, the <a href=\"Circle.html\">`Circle`</a> class will point to the `VMLCircle` class."," *"," * @module graphics"," * @class VMLCircle"," * @constructor"," */","VMLCircle = function(cfg)","{","      VMLCircle.superclass.constructor.apply(this, arguments);","};","","VMLCircle.NAME = \"circle\";","","Y.extend(VMLCircle, VMLShape, {"," /**","   * Indicates the type of shape","        *","    * @property _type","    * @type String","     * @private","     */","  _type: \"oval\"","});","","VMLCircle.ATTRS = Y.merge(VMLShape.ATTRS, {","       /**","   * Radius for the circle.","     *","    * @config radius","     * @type Number","       */","  radius: {","            lazyAdd: false,","","           value: 0","     },","","        /**","   * Indicates the width of the shape","   *","    * @config width","      * @type Number","       */","  width: {","        setter: function(val)","        {","            this.set(\"radius\", val/2);","            return val;","        },","","            getter: function()","           {   ","                 var radius = this.get(\"radius\"),","                   val = radius && radius > 0 ? radius * 2 : 0;","                 return val;","          }","    },","","        /**","   * Indicates the height of the shape","  *","    * @config height","     * @type Number","       */","  height: {","        setter: function(val)","        {","            this.set(\"radius\", val/2);","            return val;","        },","","           getter: function()","           {   ","                 var radius = this.get(\"radius\"),","                   val = radius && radius > 0 ? radius * 2 : 0;","                 return val;","          }","    }","});","Y.VMLCircle = VMLCircle;","/**"," * Draws pie slices"," *"," * @module graphics"," * @class VMLPieSlice"," * @constructor"," */","VMLPieSlice = function()","{","     VMLPieSlice.superclass.constructor.apply(this, arguments);","};","VMLPieSlice.NAME = \"vmlPieSlice\";","Y.extend(VMLPieSlice, Y.VMLShape, Y.mix({","    /**","     * Indicates the type of shape","     *","     * @property _type","     * @type String","     * @private","     */","    _type: \"shape\",","","      /**","   * Change event listener","      *","    * @private","   * @method _updateHandler","     */","  _draw: function(e)","   {","        var x = this.get(\"cx\"),","            y = this.get(\"cy\"),","            startAngle = this.get(\"startAngle\"),","            arc = this.get(\"arc\"),","            radius = this.get(\"radius\");","        this.clear();","        this.drawWedge(x, y, startAngle, arc, radius);","          this.end();","  }"," }, Y.VMLDrawing.prototype));","VMLPieSlice.ATTRS = Y.mix({","    cx: {","        value: 0","    },","","    cy: {","        value: 0","    },","    /**","     * Starting angle in relation to a circle in which to begin the pie slice drawing.","     *","     * @config startAngle","     * @type Number","     */","    startAngle: {","        value: 0","    },","","    /**","     * Arc of the slice.","     *","     * @config arc","     * @type Number","     */","    arc: {","        value: 0","    },","","    /**","     * Radius of the circle in which the pie slice is drawn","     *","     * @config radius","     * @type Number","     */","    radius: {","        value: 0","    }","}, Y.VMLShape.ATTRS);","Y.VMLPieSlice = VMLPieSlice;","/**"," * <a href=\"http://www.w3.org/TR/NOTE-VML\">VML</a> implementation of the <a href=\"Graphic.html\">`Graphic`</a> class. "," * `VMLGraphic` is not intended to be used directly. Instead, use the <a href=\"Graphic.html\">`Graphic`</a> class. "," * If the browser lacks <a href=\"http://www.w3.org/TR/SVG/\">SVG</a> and <a href=\"http://www.w3.org/TR/html5/the-canvas-element.html\">Canvas</a> "," * capabilities, the <a href=\"Graphic.html\">`Graphic`</a> class will point to the `VMLGraphic` class."," *"," * @module graphics"," * @class VMLGraphic"," * @constructor"," */","VMLGraphic = function() {","    VMLGraphic.superclass.constructor.apply(this, arguments);    ","};","","VMLGraphic.NAME = \"vmlGraphic\";","","VMLGraphic.ATTRS = {","    /**","     * Whether or not to render the `Graphic` automatically after to a specified parent node after init. This can be a Node instance or a CSS selector string.","     * ","     * @config render","     * @type Node | String ","     */","    render: {},","     ","    /**","    * Unique id for class instance.","      *","    * @config id","         * @type String","       */","  id: {","                valueFn: function()","          {","                    return Y.guid();","             },","","                setter: function(val)","                {","                    var node = this._node;","                       if(node)","                     {","                            node.setAttribute(\"id\", val);","                      }","                    return val;","          }","    },","","    /**","     * Key value pairs in which a shape instance is associated with its id.","     *","     *  @config shapes","     *  @type Object","     *  @readOnly","     */","    shapes: {","        readOnly: true,","","        getter: function()","        {","            return this._shapes;","        }","    },","","    /**","     *  Object containing size and coordinate data for the content of a Graphic in relation to the coordSpace node.","     *","     *  @config contentBounds","     *  @type Object","     */","    contentBounds: {","        readOnly: true,","","        getter: function()","        {","            return this._contentBounds;","        }","    },","","    /**","     *  The html element that represents to coordinate system of the Graphic instance.","     *","     *  @config node","     *  @type HTMLElement","     */","    node: {","        readOnly: true,","","        getter: function()","        {","            return this._node;","        }","    },",""," /**","   * Indicates the width of the `Graphic`. ","     *","    * @config width","      * @type Number","       */","    width: {","        setter: function(val)","        {","            if(this._node)","            {","                this._node.style.width = val + \"px\";","            }","            return val;","        }","    },","","       /**","   * Indicates the height of the `Graphic`. ","    *","    * @config height ","    * @type Number","       */","    height: {","        setter: function(val)","        {","            if(this._node)","            {","                this._node.style.height = val + \"px\";","            }","            return val;","        }","    },","","    /**","     *  Determines the sizing of the Graphic. ","     *","     *  <dl>","     *      <dt>sizeContentToGraphic</dt><dd>The Graphic's width and height attributes are, either explicitly set through the <code>width</code> and <code>height</code>","     *      attributes or are determined by the dimensions of the parent element. The content contained in the Graphic will be sized to fit with in the Graphic instance's ","     *      dimensions. When using this setting, the <code>preserveAspectRatio</code> attribute will determine how the contents are sized.</dd>","     *      <dt>sizeGraphicToContent</dt><dd>(Also accepts a value of true) The Graphic's width and height are determined by the size and positioning of the content.</dd>","     *      <dt>false</dt><dd>The Graphic's width and height attributes are, either explicitly set through the <code>width</code> and <code>height</code>","     *      attributes or are determined by the dimensions of the parent element. The contents of the Graphic instance are not affected by this setting.</dd>","     *  </dl>","     *","     *","     *  @config autoSize","     *  @type Boolean | String","     *  @default false","     */","    autoSize: {","        value: false","    },","","    /**","     * Determines how content is sized when <code>autoSize</code> is set to <code>sizeContentToGraphic</code>.","     *","     *  <dl>","     *      <dt>none<dt><dd>Do not force uniform scaling. Scale the graphic content of the given element non-uniformly if necessary ","     *      such that the element's bounding box exactly matches the viewport rectangle.</dd>","     *      <dt>xMinYMin</dt><dd>Force uniform scaling position along the top left of the Graphic's node.</dd>","     *      <dt>xMidYMin</dt><dd>Force uniform scaling horizontally centered and positioned at the top of the Graphic's node.<dd>","     *      <dt>xMaxYMin</dt><dd>Force uniform scaling positioned horizontally from the right and vertically from the top.</dd>","     *      <dt>xMinYMid</dt>Force uniform scaling positioned horizontally from the left and vertically centered.</dd>","     *      <dt>xMidYMid (the default)</dt><dd>Force uniform scaling with the content centered.</dd>","     *      <dt>xMaxYMid</dt><dd>Force uniform scaling positioned horizontally from the right and vertically centered.</dd>","     *      <dt>xMinYMax</dt><dd>Force uniform scaling positioned horizontally from the left and vertically from the bottom.</dd>","     *      <dt>xMidYMax</dt><dd>Force uniform scaling horizontally centered and position vertically from the bottom.</dd>","     *      <dt>xMaxYMax</dt><dd>Force uniform scaling positioned horizontally from the right and vertically from the bottom.</dd>","     *  </dl>","     * ","     * @config preserveAspectRatio","     * @type String","     * @default xMidYMid","     */","    preserveAspectRatio: {","        value: \"xMidYMid\"","    },","","    /**","     * The contentBounds will resize to greater values but not values. (for performance)","     * When resizing the contentBounds down is desirable, set the resizeDown value to true.","     *","     * @config resizeDown ","     * @type Boolean","     */","    resizeDown: {","        resizeDown: false","    },","","    /**","   * Indicates the x-coordinate for the instance.","       *","    * @config x","  * @type Number","       */","    x: {","        getter: function()","        {","            return this._x;","        },","","        setter: function(val)","        {","            this._x = val;","            if(this._node)","            {","                this._node.style.left = val + \"px\";","            }","            return val;","        }","    },","","        /**","   * Indicates the y-coordinate for the instance.","       *","    * @config y","  * @type Number","       */","    y: {","        getter: function()","        {","            return this._y;","        },","","        setter: function(val)","        {","            this._y = val;","            if(this._node)","            {","                this._node.style.top = val + \"px\";","            }","            return val;","        }","    },","","    /**","     * Indicates whether or not the instance will automatically redraw after a change is made to a shape.","     * This property will get set to false when batching operations.","     *","     * @config autoDraw","     * @type Boolean","     * @default true","     * @private","     */","    autoDraw: {","        value: true","    },","","    visible: {","        value: true,","","        setter: function(val)","        {","            this._toggleVisible(val);","            return val;","        }","    }","};","","Y.extend(VMLGraphic, Y.GraphicBase, {","    /**","     * Sets the value of an attribute.","     *","     * @method set","     * @param {String|Object} name The name of the attribute. Alternatively, an object of key value pairs can ","     * be passed in to set multiple attributes at once.","     * @param {Any} value The value to set the attribute to. This value is ignored if an object is received as ","     * the name param.","     */","     set: function(attr, value) ","  {","            var host = this,","            redrawAttrs = {","                autoDraw: true,","                autoSize: true,","                preserveAspectRatio: true,","                resizeDown: true","            },","            key,","            forceRedraw = false;","            AttributeLite.prototype.set.apply(host, arguments);     ","        if(host._state.autoDraw === true && Y.Object.size(this._shapes) > 0)","        {","            if(Y_LANG.isString && redrawAttrs[attr])","            {","                forceRedraw = true;","            }","            else if(Y_LANG.isObject(attr))","            {","                for(key in redrawAttrs)","                {","                    if(redrawAttrs.hasOwnProperty(key) && attr[key])","                    {","                        forceRedraw = true;","                        break;","                    }","                }","            }","        }","        if(forceRedraw)","        {","            host._redraw();","        }","    },","","    /**","     * Storage for `x` attribute.","     *","     * @property _x","     * @type Number","     * @private","     */","    _x: 0,","","    /**","     * Storage for `y` attribute.","     *","     * @property _y","     * @type Number","     * @private","     */","    _y: 0,","","    /**","     * Gets the current position of the graphic instance in page coordinates.","     *","     * @method getXY","     * @return Array The XY position of the shape.","     */","    getXY: function()","    {","        var node = this.parentNode,","            x = this.get(\"x\"),","            y = this.get(\"y\"),","            xy;","        if(node)","        {","            xy = Y.one(node).getXY();","            xy[0] += x;","            xy[1] += y;","        }","        else","        {","            xy = Y.DOM._getOffset(this._node);","        }","        return xy;","    },","","    /**","     * Initializes the class.","     *","     * @method initializer","     * @private","     */","    initializer: function(config) {","        var render = this.get(\"render\"),","            visibility = this.get(\"visible\") ? \"visible\" : \"hidden\";","        this._shapes = {};","          this._contentBounds = {","            left: 0,","            top: 0,","            right: 0,","            bottom: 0","        };","        this._node = this._createGraphic();","        this._node.style.left = this.get(\"x\") + \"px\";","        this._node.style.top = this.get(\"y\") + \"px\";","        this._node.style.visibility = visibility;","        this._node.setAttribute(\"id\", this.get(\"id\"));","        if(render)","        {","            this.render(render);","        }","    },","    ","    /**","     * Adds the graphics node to the dom.","     * ","     * @method render","     * @param {HTMLElement} parentNode node in which to render the graphics node into.","     */","    render: function(render) {","        var parentNode = Y.one(render),","            w = this.get(\"width\") || parseInt(parentNode.getComputedStyle(\"width\"), 10),","            h = this.get(\"height\") || parseInt(parentNode.getComputedStyle(\"height\"), 10);","        parentNode = parentNode || DOCUMENT.body;","        parentNode.appendChild(this._node);","        this.parentNode = parentNode;","        this.set(\"width\", w);","        this.set(\"height\", h);","        return this;","    },","","    /**","     * Removes all nodes.","     *","     * @method destroy","     */","    destroy: function()","    {","        this.clear();","        Y.one(this._node).remove(true);","    },","","    /**","     * Generates a shape instance by type.","     *","     * @method addShape","     * @param {Object} cfg attributes for the shape","     * @return Shape","     */","    addShape: function(cfg)","    {","        cfg.graphic = this;","        if(!this.get(\"visible\"))","        {","            cfg.visible = false;","        }","        var shapeClass = this._getShapeClass(cfg.type),","            shape = new shapeClass(cfg);","        this._appendShape(shape);","        shape._appendStrokeAndFill();","        return shape;","    },","","    /**","     * Adds a shape instance to the graphic instance.","     *","     * @method _appendShape","     * @param {Shape} shape The shape instance to be added to the graphic.","     * @private","     */","    _appendShape: function(shape)","    {","        var node = shape.node,","            parentNode = this._frag || this._node;","        if(this.get(\"autoDraw\") || this.get(\"autoSize\") == \"sizeContentToGraphic\") ","        {","            parentNode.appendChild(node);","        }","        else","        {","            this._getDocFrag().appendChild(node);","        }","    },","","    /**","     * Removes a shape instance from from the graphic instance.","     *","     * @method removeShape","     * @param {Shape|String} shape The instance or id of the shape to be removed.","     */","    removeShape: function(shape)","    {","        if(!(shape instanceof VMLShape))","        {","            if(Y_LANG.isString(shape))","            {","                shape = this._shapes[shape];","            }","        }","        if(shape && (shape instanceof VMLShape))","        {","            shape._destroy();","            this._shapes[shape.get(\"id\")] = null;","            delete this._shapes[shape.get(\"id\")];","        }","        if(this.get(\"autoDraw\"))","        {","            this._redraw();","        }","    },","","    /**","     * Removes all shape instances from the dom.","     *","     * @method removeAllShapes","     */","    removeAllShapes: function()","    {","        var shapes = this._shapes,","            i;","        for(i in shapes)","        {","            if(shapes.hasOwnProperty(i))","            {","                shapes[i].destroy();","            }","        }","        this._shapes = {};","    },","","    /**","     * Removes all child nodes.","     *","     * @method _removeChildren","     * @param node","     * @private","     */","    _removeChildren: function(node)","    {","        if(node.hasChildNodes())","        {","            var child;","            while(node.firstChild)","            {","                child = node.firstChild;","                this._removeChildren(child);","                node.removeChild(child);","            }","        }","    },","","    /**","     * Clears the graphics object.","     *","     * @method clear","     */","    clear: function() {","        this.removeAllShapes();","        this._removeChildren(this._node);","    },","","    /**","     * Toggles visibility","     *","     * @method _toggleVisible","     * @param {Boolean} val indicates visibilitye","     * @private","     */","    _toggleVisible: function(val)","    {","        var i,","            shapes = this._shapes,","            visibility = val ? \"visible\" : \"hidden\";","        if(shapes)","        {","            for(i in shapes)","            {","                if(shapes.hasOwnProperty(i))","                {","                    shapes[i].set(\"visible\", val);","                }","            }","        }","        if(this._node)","        {","            this._node.style.visibility = visibility;","        }","        if(this._node)","        {","            this._node.style.visibility = visibility;","        }","    },","","    /**","     * Sets the size of the graphics object.","     * ","     * @method setSize","     * @param w {Number} width to set for the instance.","     * @param h {Number} height to set for the instance.","     */","    setSize: function(w, h) {","        w = Math.round(w);","        h = Math.round(h);","        this._node.style.width = w + 'px';","        this._node.style.height = h + 'px';","    },","","    /**","     * Sets the positon of the graphics object.","     *","     * @method setPosition","     * @param {Number} x x-coordinate for the object.","     * @param {Number} y y-coordinate for the object.","     */","    setPosition: function(x, y)","    {","        x = Math.round(x);","        y = Math.round(y);","        this._node.style.left = x + \"px\";","        this._node.style.top = y + \"px\";","    },","","    /**","     * Creates a group element","     *","     * @method _createGraphic","     * @private","     */","    _createGraphic: function() {","        var group = DOCUMENT.createElement('<group xmlns=\"urn:schemas-microsft.com:vml\" style=\"behavior:url(#default#VML);padding:0px 0px 0px 0px;display:block;position:absolute;top:0px;left:0px;zoom:1;\" />');","        return group;","    },","","    /**","     * Creates a graphic node","     *","     * @method _createGraphicNode","     * @param {String} type node type to create","     * @param {String} pe specified pointer-events value","     * @return HTMLElement","     * @private","     */","    _createGraphicNode: function(type)","    {","        return DOCUMENT.createElement('<' + type + ' xmlns=\"urn:schemas-microsft.com:vml\" style=\"behavior:url(#default#VML);display:inline-block;zoom:1;\" />');","    ","    },","","    /**","     * Returns a shape based on the id of its dom node.","     *","     * @method getShapeById","     * @param {String} id Dom id of the shape's node attribute.","     * @return Shape","     */","    getShapeById: function(id)","    {","        return this._shapes[id];","    },","","    /**","     * Returns a shape class. Used by `addShape`. ","     *","     * @method _getShapeClass","     * @param {Shape | String} val Indicates which shape class. ","     * @return Function ","     * @private","     */","    _getShapeClass: function(val)","    {","        var shape = this._shapeClass[val];","        if(shape)","        {","            return shape;","        }","        return val;","    },","","    /**","     * Look up for shape classes. Used by `addShape` to retrieve a class for instantiation.","     *","     * @property _shapeClass","     * @type Object","     * @private","     */","    _shapeClass: {","        circle: Y.VMLCircle,","        rect: Y.VMLRect,","        path: Y.VMLPath,","        ellipse: Y.VMLEllipse,","        pieslice: Y.VMLPieSlice","    },","","     /**","   * Allows for creating multiple shapes in order to batch appending and redraw operations.","     *","    * @method batch","      * @param {Function} method Method to execute.","        */","    batch: function(method)","    {","        var autoDraw = this.get(\"autoDraw\");","        this.set(\"autoDraw\", false);","        method.apply();","        this.set(\"autoDraw\", autoDraw);","    },","    ","    /**","     * Returns a document fragment to for attaching shapes.","     *","     * @method _getDocFrag","     * @return DocumentFragment","     * @private","     */","    _getDocFrag: function()","    {","        if(!this._frag)","        {","            this._frag = DOCUMENT.createDocumentFragment();","        }","        return this._frag;","    },","","    /**","     * Adds a shape to the redraw queue and calculates the contentBounds. ","     *","     * @method addToRedrawQueue","     * @param shape {VMLShape}","     * @protected","     */","    addToRedrawQueue: function(shape)","    {","        var shapeBox,","            box;","        this._shapes[shape.get(\"id\")] = shape;","        if(!this.get(\"resizeDown\"))","        {","            shapeBox = shape.getBounds();","            box = this._contentBounds;","            box.left = box.left < shapeBox.left ? box.left : shapeBox.left;","            box.top = box.top < shapeBox.top ? box.top : shapeBox.top;","            box.right = box.right > shapeBox.right ? box.right : shapeBox.right;","            box.bottom = box.bottom > shapeBox.bottom ? box.bottom : shapeBox.bottom;","            box.width = box.right - box.left;","            box.height = box.bottom - box.top;","            this._contentBounds = box;","        }","        if(this.get(\"autoDraw\")) ","        {","            this._redraw();","        }","    },","","    /**","     * Redraws all shapes.","     *","     * @method _redraw","     * @private","     */","    _redraw: function()","    {","        var autoSize = this.get(\"autoSize\"),","            preserveAspectRatio,","            node = this.parentNode,","            nodeWidth = parseFloat(node.getComputedStyle(\"width\")),","            nodeHeight = parseFloat(node.getComputedStyle(\"height\")),","            xCoordOrigin = 0,","            yCoordOrigin = 0,","            box = this.get(\"resizeDown\") ? this._getUpdatedContentBounds() : this._contentBounds,","            left = box.left,","            right = box.right,","            top = box.top,","            bottom = box.bottom,","            contentWidth = right - left,","            contentHeight = bottom - top,","            aspectRatio,","            xCoordSize,","            yCoordSize,","            scaledWidth,","            scaledHeight,","            visible = this.get(\"visible\");","        this._node.style.visibility = \"hidden\";","        if(autoSize)","        {","            if(autoSize == \"sizeContentToGraphic\")","            {","                preserveAspectRatio = this.get(\"preserveAspectRatio\");","                if(preserveAspectRatio == \"none\" || contentWidth/contentHeight === nodeWidth/nodeHeight)","                {","                    xCoordOrigin = left;","                    yCoordOrigin = top;","                    xCoordSize = contentWidth;","                    yCoordSize = contentHeight;","                }","                else ","                {","                    if(contentWidth * nodeHeight/contentHeight > nodeWidth)","                    {","                        aspectRatio = nodeHeight/nodeWidth;","                        xCoordSize = contentWidth;","                        yCoordSize = contentWidth * aspectRatio;","                        scaledHeight = (nodeWidth * (contentHeight/contentWidth)) * (yCoordSize/nodeHeight);","                        yCoordOrigin = this._calculateCoordOrigin(preserveAspectRatio.slice(5).toLowerCase(), scaledHeight, yCoordSize);","                        yCoordOrigin = top + yCoordOrigin;","                        xCoordOrigin = left;","                    }","                    else","                    {","                        aspectRatio = nodeWidth/nodeHeight;","                        xCoordSize = contentHeight * aspectRatio;","                        yCoordSize = contentHeight;","                        scaledWidth = (nodeHeight * (contentWidth/contentHeight)) * (xCoordSize/nodeWidth);","                        xCoordOrigin = this._calculateCoordOrigin(preserveAspectRatio.slice(1, 4).toLowerCase(), scaledWidth, xCoordSize);","                        xCoordOrigin = xCoordOrigin + left;","                        yCoordOrigin = top;","                    }","                }","                this._node.style.width = nodeWidth + \"px\";","                this._node.style.height = nodeHeight + \"px\";","                this._node.coordOrigin = xCoordOrigin + \", \" + yCoordOrigin;","            }","            else ","            {","                xCoordSize = contentWidth;","                yCoordSize = contentHeight;","                this._node.style.width = contentWidth + \"px\";","                this._node.style.height = contentHeight + \"px\";","                this._state.width = contentWidth;","                this._state.height =  contentHeight;","","            }","            this._node.coordSize = xCoordSize + \", \" + yCoordSize;","        }","        else","        {","            this._node.style.width = nodeWidth + \"px\";","            this._node.style.height = nodeHeight + \"px\";","            this._node.coordSize = nodeWidth + \", \" + nodeHeight;","        }","        if(this._frag)","        {","            this._node.appendChild(this._frag);","            this._frag = null;","        }","        if(visible)","        {","            this._node.style.visibility = \"visible\";","        }","    },","    ","    /**","     * Determines the value for either an x or y coordinate to be used for the <code>coordOrigin</code> of the Graphic.","     *","     * @method _calculateCoordOrigin","     * @param {String} position The position for placement. Possible values are min, mid and max.","     * @param {Number} size The total scaled size of the content.","     * @param {Number} coordsSize The coordsSize for the Graphic.","     * @return Number","     * @private","     */","    _calculateCoordOrigin: function(position, size, coordsSize)","    {","        var coord;","        switch(position)","        {","            case \"min\" :","                coord = 0;","            break;","            case \"mid\" :","                coord = (size - coordsSize)/2;","            break;","            case \"max\" :","                coord = (size - coordsSize);","            break;","        }","        return coord;","    },","","    /**","     * Recalculates and returns the `contentBounds` for the `Graphic` instance.","     *","     * @method _getUpdatedContentBounds","     * @return {Object} ","     * @private","     */","    _getUpdatedContentBounds: function()","    {","        var bounds,","            i,","            shape,","            queue = this._shapes,","            box = {};","        for(i in queue)","        {","            if(queue.hasOwnProperty(i))","            {","                shape = queue[i];","                bounds = shape.getBounds();","                box.left = Y_LANG.isNumber(box.left) ? Math.min(box.left, bounds.left) : bounds.left;","                box.top = Y_LANG.isNumber(box.top) ? Math.min(box.top, bounds.top) : bounds.top;","                box.right = Y_LANG.isNumber(box.right) ? Math.max(box.right, bounds.right) : bounds.right;","                box.bottom = Y_LANG.isNumber(box.bottom) ? Math.max(box.bottom, bounds.bottom) : bounds.bottom;","            }","        }","        box.left = Y_LANG.isNumber(box.left) ? box.left : 0;","        box.top = Y_LANG.isNumber(box.top) ? box.top : 0;","        box.right = Y_LANG.isNumber(box.right) ? box.right : 0;","        box.bottom = Y_LANG.isNumber(box.bottom) ? box.bottom : 0;","        this._contentBounds = box;","        return box;","    },","","    /**","     * Inserts shape on the top of the tree.","     *","     * @method _toFront","     * @param {VMLShape} Shape to add.","     * @private","     */","    _toFront: function(shape)","    {","        var contentNode = this._node;","        if(shape instanceof Y.VMLShape)","        {","            shape = shape.get(\"node\");","        }","        if(contentNode && shape)","        {","            contentNode.appendChild(shape);","        }","    },","","    /**","     * Inserts shape as the first child of the content node.","     *","     * @method _toBack","     * @param {VMLShape} Shape to add.","     * @private","     */","    _toBack: function(shape)","    {","        var contentNode = this._node,","            targetNode;","        if(shape instanceof Y.VMLShape)","        {","            shape = shape.get(\"node\");","        }","        if(contentNode && shape)","        {","            targetNode = contentNode.firstChild;","            if(targetNode)","            {","                contentNode.insertBefore(shape, targetNode);","            }","            else","            {","                contentNode.appendChild(shape);","            }","        }","    }","});","Y.VMLGraphic = VMLGraphic;","","","","}, '3.7.2', {\"requires\": [\"graphics\"]});"];
36 _yuitest_coverage["build/graphics-vml/graphics-vml.js"].lines = {"1":0,"3":0,"24":0,"36":0,"76":0,"88":0,"89":0,"91":0,"92":0,"94":0,"127":0,"142":0,"154":0,"173":0,"174":0,"175":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"185":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":0,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0,"205":0,"218":0,"231":0,"243":0,"258":0,"260":0,"261":0,"262":0,"263":0,"264":0,"265":0,"266":0,"267":0,"268":0,"269":0,"270":0,"271":0,"272":0,"273":0,"275":0,"288":0,"289":0,"290":0,"291":0,"292":0,"293":0,"294":0,"295":0,"310":0,"311":0,"312":0,"313":0,"314":0,"315":0,"316":0,"317":0,"318":0,"319":0,"332":0,"336":0,"337":0,"338":0,"339":0,"340":0,"341":0,"355":0,"359":0,"360":0,"361":0,"362":0,"363":0,"364":0,"379":0,"381":0,"382":0,"383":0,"384":0,"385":0,"386":0,"403":0,"404":0,"406":0,"408":0,"409":0,"410":0,"411":0,"412":0,"413":0,"414":0,"415":0,"416":0,"417":0,"429":0,"441":0,"453":0,"461":0,"462":0,"463":0,"464":0,"465":0,"466":0,"467":0,"468":0,"469":0,"470":0,"471":0,"476":0,"477":0,"478":0,"479":0,"480":0,"481":0,"482":0,"483":0,"484":0,"485":0,"488":0,"489":0,"501":0,"513":0,"525":0,"530":0,"531":0,"532":0,"533":0,"534":0,"535":0,"546":0,"554":0,"555":0,"556":0,"558":0,"560":0,"562":0,"564":0,"567":0,"569":0,"571":0,"573":0,"574":0,"575":0,"576":0,"577":0,"579":0,"580":0,"581":0,"591":0,"601":0,"611":0,"612":0,"613":0,"614":0,"615":0,"616":0,"617":0,"618":0,"631":0,"636":0,"637":0,"640":0,"641":0,"642":0,"643":0,"646":0,"660":0,"668":0,"670":0,"671":0,"672":0,"673":0,"674":0,"676":0,"677":0,"678":0,"679":0,"680":0,"681":0,"693":0,"694":0,"696":0,"698":0,"700":0,"702":0,"704":0,"706":0,"708":0,"709":0,"724":0,"736":0,"738":0,"739":0,"740":0,"741":0,"744":0,"746":0,"765":0,"776":0,"779":0,"780":0,"782":0,"784":0,"786":0,"788":0,"801":0,"802":0,"804":0,"808":0,"809":0,"812":0,"813":0,"814":0,"826":0,"828":0,"830":0,"832":0,"845":0,"866":0,"867":0,"868":0,"869":0,"870":0,"872":0,"874":0,"876":0,"877":0,"878":0,"879":0,"880":0,"881":0,"883":0,"884":0,"885":0,"887":0,"889":0,"891":0,"893":0,"895":0,"897":0,"899":0,"901":0,"902":0,"903":0,"907":0,"909":0,"911":0,"913":0,"914":0,"916":0,"918":0,"920":0,"924":0,"925":0,"927":0,"929":0,"930":0,"931":0,"942":0,"943":0,"954":0,"955":0,"966":0,"970":0,"982":0,"984":0,"985":0,"997":0,"1008":0,"1010":0,"1022":0,"1035":0,"1045":0,"1047":0,"1048":0,"1049":0,"1050":0,"1052":0,"1054":0,"1055":0,"1056":0,"1057":0,"1058":0,"1059":0,"1060":0,"1061":0,"1062":0,"1063":0,"1064":0,"1066":0,"1067":0,"1068":0,"1070":0,"1071":0,"1074":0,"1076":0,"1080":0,"1081":0,"1083":0,"1084":0,"1087":0,"1089":0,"1100":0,"1102":0,"1104":0,"1114":0,"1116":0,"1117":0,"1118":0,"1120":0,"1122":0,"1123":0,"1124":0,"1125":0,"1126":0,"1127":0,"1128":0,"1129":0,"1130":0,"1132":0,"1133":0,"1135":0,"1136":0,"1137":0,"1139":0,"1140":0,"1141":0,"1143":0,"1144":0,"1147":0,"1149":0,"1153":0,"1154":0,"1156":0,"1157":0,"1160":0,"1161":0,"1165":0,"1167":0,"1169":0,"1171":0,"1184":0,"1191":0,"1193":0,"1195":0,"1197":0,"1198":0,"1199":0,"1200":0,"1201":0,"1202":0,"1204":0,"1206":0,"1209":0,"1210":0,"1212":0,"1214":0,"1215":0,"1216":0,"1217":0,"1219":0,"1220":0,"1221":0,"1223":0,"1227":0,"1229":0,"1240":0,"1242":0,"1244":0,"1251":0,"1253":0,"1255":0,"1256":0,"1257":0,"1259":0,"1261":0,"1263":0,"1265":0,"1269":0,"1276":0,"1277":0,"1279":0,"1281":0,"1284":0,"1285":0,"1286":0,"1289":0,"1291":0,"1292":0,"1293":0,"1294":0,"1296":0,"1297":0,"1299":0,"1301":0,"1303":0,"1307":0,"1308":0,"1309":0,"1312":0,"1314":0,"1315":0,"1319":0,"1320":0,"1326":0,"1328":0,"1329":0,"1343":0,"1365":0,"1367":0,"1369":0,"1371":0,"1373":0,"1377":0,"1379":0,"1380":0,"1382":0,"1384":0,"1385":0,"1386":0,"1387":0,"1388":0,"1389":0,"1390":0,"1391":0,"1392":0,"1393":0,"1394":0,"1396":0,"1397":0,"1398":0,"1399":0,"1400":0,"1401":0,"1402":0,"1403":0,"1404":0,"1405":0,"1406":0,"1408":0,"1410":0,"1412":0,"1413":0,"1426":0,"1427":0,"1428":0,"1429":0,"1430":0,"1432":0,"1444":0,"1457":0,"1459":0,"1461":0,"1463":0,"1467":0,"1468":0,"1471":0,"1472":0,"1473":0,"1475":0,"1476":0,"1478":0,"1479":0,"1482":0,"1484":0,"1486":0,"1493":0,"1494":0,"1496":0,"1498":0,"1499":0,"1501":0,"1502":0,"1504":0,"1506":0,"1508":0,"1511":0,"1512":0,"1525":0,"1527":0,"1528":0,"1567":0,"1568":0,"1569":0,"1581":0,"1582":0,"1594":0,"1595":0,"1607":0,"1618":0,"1629":0,"1640":0,"1651":0,"1665":0,"1667":0,"1669":0,"1690":0,"1692":0,"1693":0,"1694":0,"1695":0,"1696":0,"1697":0,"1710":0,"1711":0,"1722":0,"1742":0,"1761":0,"1762":0,"1763":0,"1765":0,"1780":0,"1785":0,"1787":0,"1788":0,"1789":0,"1790":0,"1792":0,"1807":0,"1818":0,"1820":0,"1822":0,"1823":0,"1824":0,"1825":0,"1827":0,"1828":0,"1829":0,"1831":0,"1834":0,"1835":0,"1837":0,"1839":0,"1840":0,"1850":0,"1851":0,"1853":0,"1864":0,"1865":0,"1867":0,"1880":0,"1888":0,"1890":0,"1891":0,"1892":0,"1894":0,"1895":0,"1896":0,"1897":0,"1898":0,"1900":0,"1902":0,"1906":0,"1910":0,"1921":0,"1922":0,"1924":0,"1928":0,"1940":0,"1942":0,"1944":0,"1945":0,"1947":0,"1949":0,"1950":0,"1952":0,"1957":0,"1968":0,"2004":0,"2007":0,"2008":0,"2009":0,"2010":0,"2011":0,"2013":0,"2015":0,"2016":0,"2021":0,"2054":0,"2059":0,"2060":0,"2062":0,"2064":0,"2094":0,"2096":0,"2098":0,"2100":0,"2152":0,"2156":0,"2159":0,"2161":0,"2163":0,"2165":0,"2167":0,"2171":0,"2172":0,"2174":0,"2176":0,"2179":0,"2180":0,"2217":0,"2221":0,"2223":0,"2225":0,"2226":0,"2228":0,"2231":0,"2233":0,"2235":0,"2239":0,"2240":0,"2241":0,"2272":0,"2287":0,"2289":0,"2291":0,"2306":0,"2310":0,"2321":0,"2323":0,"2326":0,"2327":0,"2328":0,"2338":0,"2339":0,"2352":0,"2368":0,"2372":0,"2383":0,"2385":0,"2387":0,"2388":0,"2398":0,"2399":0,"2410":0,"2412":0,"2415":0,"2417":0,"2427":0,"2439":0,"2440":0,"2441":0,"2446":0,"2447":0,"2448":0,"2464":0,"2465":0,"2466":0,"2471":0,"2472":0,"2473":0,"2477":0,"2488":0,"2490":0,"2493":0,"2495":0,"2506":0,"2528":0,"2529":0,"2534":0,"2536":0,"2549":0,"2550":0,"2555":0,"2557":0,"2561":0,"2569":0,"2571":0,"2573":0,"2574":0,"2592":0,"2597":0,"2598":0,"2599":0,"2602":0,"2640":0,"2651":0,"2652":0,"2655":0,"2657":0,"2675":0,"2680":0,"2681":0,"2683":0,"2685":0,"2701":0,"2716":0,"2731":0,"2744":0,"2746":0,"2748":0,"2761":0,"2763":0,"2765":0,"2835":0,"2840":0,"2841":0,"2843":0,"2845":0,"2858":0,"2863":0,"2864":0,"2866":0,"2868":0,"2890":0,"2891":0,"2896":0,"2908":0,"2917":0,"2918":0,"2920":0,"2922":0,"2924":0,"2926":0,"2928":0,"2930":0,"2931":0,"2936":0,"2938":0,"2968":0,"2972":0,"2974":0,"2975":0,"2976":0,"2980":0,"2982":0,"2992":0,"2994":0,"2995":0,"3001":0,"3002":0,"3003":0,"3004":0,"3005":0,"3006":0,"3008":0,"3019":0,"3022":0,"3023":0,"3024":0,"3025":0,"3026":0,"3027":0,"3037":0,"3038":0,"3050":0,"3051":0,"3053":0,"3055":0,"3057":0,"3058":0,"3059":0,"3071":0,"3073":0,"3075":0,"3079":0,"3091":0,"3093":0,"3095":0,"3098":0,"3100":0,"3101":0,"3102":0,"3104":0,"3106":0,"3117":0,"3119":0,"3121":0,"3123":0,"3126":0,"3138":0,"3140":0,"3141":0,"3143":0,"3144":0,"3145":0,"3156":0,"3157":0,"3169":0,"3172":0,"3174":0,"3176":0,"3178":0,"3182":0,"3184":0,"3186":0,"3188":0,"3200":0,"3201":0,"3202":0,"3203":0,"3215":0,"3216":0,"3217":0,"3218":0,"3228":0,"3229":0,"3243":0,"3256":0,"3269":0,"3270":0,"3272":0,"3274":0,"3300":0,"3301":0,"3302":0,"3303":0,"3315":0,"3317":0,"3319":0,"3331":0,"3333":0,"3334":0,"3336":0,"3337":0,"3338":0,"3339":0,"3340":0,"3341":0,"3342":0,"3343":0,"3344":0,"3346":0,"3348":0,"3360":0,"3380":0,"3381":0,"3383":0,"3385":0,"3386":0,"3388":0,"3389":0,"3390":0,"3391":0,"3395":0,"3397":0,"3398":0,"3399":0,"3400":0,"3401":0,"3402":0,"3403":0,"3407":0,"3408":0,"3409":0,"3410":0,"3411":0,"3412":0,"3413":0,"3416":0,"3417":0,"3418":0,"3422":0,"3423":0,"3424":0,"3425":0,"3426":0,"3427":0,"3430":0,"3434":0,"3435":0,"3436":0,"3438":0,"3440":0,"3441":0,"3443":0,"3445":0,"3461":0,"3462":0,"3465":0,"3466":0,"3468":0,"3469":0,"3471":0,"3472":0,"3474":0,"3486":0,"3491":0,"3493":0,"3495":0,"3496":0,"3497":0,"3498":0,"3499":0,"3500":0,"3503":0,"3504":0,"3505":0,"3506":0,"3507":0,"3508":0,"3520":0,"3521":0,"3523":0,"3525":0,"3527":0,"3540":0,"3542":0,"3544":0,"3546":0,"3548":0,"3549":0,"3551":0,"3555":0,"3560":0};
37 _yuitest_coverage["build/graphics-vml/graphics-vml.js"].functions = {"VMLDrawing:24":0,"_round:74":0,"_addToPath:86":0,"curveTo:126":0,"relativeCurveTo:141":0,"_curveTo:153":0,"quadraticCurveTo:217":0,"relativeQuadraticCurveTo:230":0,"_quadraticCurveTo:242":0,"drawRect:287":0,"drawRoundRect:309":0,"drawCircle:331":0,"drawEllipse:354":0,"drawDiamond:377":0,"drawWedge:401":0,"lineTo:427":0,"relativeLineTo:439":0,"_lineTo:452":0,"moveTo:499":0,"relativeMoveTo:511":0,"_moveTo:524":0,"_closePath:544":0,"end:589":0,"closePath:599":0,"clear:609":0,"getBezierData:630":0,"_setCurveBoundingBox:658":0,"_trackSize:692":0,"VMLShape:736":0,"init:763":0,"initializer:774":0,"_setGraphic:799":0,"_appendStrokeAndFill:824":0,"createNode:843":0,"addClass:940":0,"removeClass:952":0,"getXY:964":0,"setXY:980":0,"contains:995":0,"compareTo:1007":0,"test:1020":0,"_getStrokeProps:1033":0,"_strokeChangeHandler:1098":0,"_getFillProps:1182":0,"_fillChangeHandler:1238":0,"_updateFillNode:1324":0,"_getGradientFill:1341":0,"_addTransform:1424":0,"_updateTransform:1442":0,"_getSkewOffsetValue:1523":0,"translate:1565":0,"translateX:1579":0,"translateY:1592":0,"skew:1605":0,"skewX:1616":0,"skewY:1627":0,"rotate:1638":0,"scale:1649":0,"on:1663":0,"_updateHandler:1688":0,"_createGraphicNode:1708":0,"_getDefaultFill:1721":0,"_getDefaultStroke:1740":0,"set:1759":0,"getBounds:1778":0,"_getContentRect:1805":0,"toFront:1848":0,"toBack:1862":0,"_parsePathData:1878":0,"destroy:1919":0,"_destroy:1938":0,"valueFn:1966":0,"setter:2002":0,"getter:2019":0,"valueFn:2052":0,"setter:2057":0,"setter:2093":0,"setter:2150":0,"setter:2215":0,"getter:2270":0,"setter:2285":0,"getter:2304":0,"VMLPath:2321":0,"getter:2336":0,"getter:2350":0,"getter:2366":0,"VMLRect:2383":0,"VMLEllipse:2410":0,"getter:2437":0,"setter:2444":0,"getter:2462":0,"setter:2469":0,"VMLCircle:2488":0,"setter:2526":0,"getter:2532":0,"setter:2547":0,"getter:2553":0,"VMLPieSlice:2569":0,"_draw:2590":0,"VMLGraphic:2651":0,"valueFn:2673":0,"setter:2678":0,"getter:2699":0,"getter:2714":0,"getter:2729":0,"setter:2742":0,"setter:2759":0,"getter:2833":0,"setter:2838":0,"getter:2856":0,"setter:2861":0,"setter:2888":0,"set:2906":0,"getXY:2966":0,"initializer:2991":0,"render:3018":0,"destroy:3035":0,"addShape:3048":0,"_appendShape:3069":0,"removeShape:3089":0,"removeAllShapes:3115":0,"_removeChildren:3136":0,"clear:3155":0,"_toggleVisible:3167":0,"setSize:3199":0,"setPosition:3213":0,"_createGraphic:3227":0,"_createGraphicNode:3241":0,"getShapeById:3254":0,"_getShapeClass:3267":0,"batch:3298":0,"_getDocFrag:3313":0,"addToRedrawQueue:3329":0,"_redraw:3358":0,"_calculateCoordOrigin:3459":0,"_getUpdatedContentBounds:3484":0,"_toFront:3518":0,"_toBack:3538":0,"(anonymous 1):1":0};
38 _yuitest_coverage["build/graphics-vml/graphics-vml.js"].coveredLines = 924;
39 _yuitest_coverage["build/graphics-vml/graphics-vml.js"].coveredFunctions = 139;
40 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1);
41 YUI.add('graphics-vml', function (Y, NAME) {
43 _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "(anonymous 1)", 1);
44 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3);
45 var IMPLEMENTATION = "vml",
46     SHAPE = "shape",
47         SPLITPATHPATTERN = /[a-z][^a-z]*/ig,
48     SPLITARGSPATTERN = /[-]?[0-9]*[0-9|\.][0-9]*/g,
49     Y_LANG = Y.Lang,
50     IS_NUM = Y_LANG.isNumber,
51     IS_ARRAY = Y_LANG.isArray,
52     IS_STRING = Y_LANG.isString,
53     Y_DOM = Y.DOM,
54     Y_SELECTOR = Y.Selector,
55     DOCUMENT = Y.config.doc,
56     AttributeLite = Y.AttributeLite,
57         VMLShape,
58         VMLCircle,
59         VMLPath,
60         VMLRect,
61         VMLEllipse,
62         VMLGraphic,
63     VMLPieSlice,
64     _getClassName = Y.ClassNameManager.getClassName;
66 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 24);
67 function VMLDrawing() {}
69 /**
70  * <a href="http://www.w3.org/TR/NOTE-VML">VML</a> implementation of the <a href="Drawing.html">`Drawing`</a> class. 
71  * `VMLDrawing` is not intended to be used directly. Instead, use the <a href="Drawing.html">`Drawing`</a> class. 
72  * If the browser lacks <a href="http://www.w3.org/TR/SVG/">SVG</a> and <a href="http://www.w3.org/TR/html5/the-canvas-element.html">Canvas</a> 
73  * capabilities, the <a href="Drawing.html">`Drawing`</a> class will point to the `VMLDrawing` class.
74  *
75  * @module graphics
76  * @class VMLDrawing
77  * @constructor
78  */
79 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 36);
80 VMLDrawing.prototype = {
81     /**
82      * Maps path to methods
83      *
84      * @property _pathSymbolToMethod
85      * @type Object
86      * @private
87      */
88     _pathSymbolToMethod: {
89         M: "moveTo",
90         m: "relativeMoveTo",
91         L: "lineTo",
92         l: "relativeLineTo",
93         C: "curveTo",
94         c: "relativeCurveTo",
95         Q: "quadraticCurveTo",
96         q: "relativeQuadraticCurveTo",
97         z: "closePath",
98         Z: "closePath"
99     },
101     /**
102      * Value for rounding up to coordsize
103      *
104      * @property _coordSpaceMultiplier
105      * @type Number
106      * @private
107      */
108     _coordSpaceMultiplier: 100,
110     /**
111      * Rounds dimensions and position values based on the coordinate space.
112      *
113      * @method _round
114      * @param {Number} The value for rounding
115      * @return Number
116      * @private
117      */
118     _round:function(val)
119     {
120         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "_round", 74);
121 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 76);
122 return Math.round(val * this._coordSpaceMultiplier);
123     },
125     /**
126      * Concatanates the path.
127      *
128      * @method _addToPath
129      * @param {String} val The value to add to the path string.
130      * @private
131      */
132     _addToPath: function(val)
133     {
134         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "_addToPath", 86);
135 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 88);
136 this._path = this._path || "";
137         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 89);
138 if(this._movePath)
139         {
140             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 91);
141 this._path += this._movePath;
142             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 92);
143 this._movePath = null;
144         }
145         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 94);
146 this._path += val;
147     },
149     /**
150      * Current x position of the drawing.
151      *
152      * @property _currentX
153      * @type Number
154      * @private
155      */
156     _currentX: 0,
158     /**
159      * Current y position of the drqwing.
160      *
161      * @property _currentY
162      * @type Number
163      * @private
164      */
165     _currentY: 0,
166     
167     /**
168      * Draws a bezier curve.
169      *
170      * @method curveTo
171      * @param {Number} cp1x x-coordinate for the first control point.
172      * @param {Number} cp1y y-coordinate for the first control point.
173      * @param {Number} cp2x x-coordinate for the second control point.
174      * @param {Number} cp2y y-coordinate for the second control point.
175      * @param {Number} x x-coordinate for the end point.
176      * @param {Number} y y-coordinate for the end point.
177      */
178     curveTo: function() {
179         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "curveTo", 126);
180 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 127);
181 this._curveTo.apply(this, [Y.Array(arguments), false]);
182     },
184     /**
185      * Draws a bezier curve.
186      *
187      * @method relativeCurveTo
188      * @param {Number} cp1x x-coordinate for the first control point.
189      * @param {Number} cp1y y-coordinate for the first control point.
190      * @param {Number} cp2x x-coordinate for the second control point.
191      * @param {Number} cp2y y-coordinate for the second control point.
192      * @param {Number} x x-coordinate for the end point.
193      * @param {Number} y y-coordinate for the end point.
194      */
195     relativeCurveTo: function() {
196         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "relativeCurveTo", 141);
197 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 142);
198 this._curveTo.apply(this, [Y.Array(arguments), true]);
199     },
200     
201     /**
202      * Implements curveTo methods.
203      *
204      * @method _curveTo
205      * @param {Array} args The arguments to be used.
206      * @param {Boolean} relative Indicates whether or not to use relative coordinates.
207      * @private
208      */
209     _curveTo: function(args, relative) {
210         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "_curveTo", 153);
211 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 154);
212 var w,
213             h,
214             x,
215             y,
216             cp1x,
217             cp1y,
218             cp2x,
219             cp2y,
220             pts,
221             right,
222             left,
223             bottom,
224             top,
225             i,
226             len,
227             path,
228             command = relative ? " v " : " c ",
229             relativeX = relative ? parseFloat(this._currentX) : 0,
230             relativeY = relative ? parseFloat(this._currentY) : 0;
231         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 173);
232 len = args.length - 5;
233         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 174);
234 path = command; 
235         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 175);
236 for(i = 0; i < len; i = i + 6)
237         {
238             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 177);
239 cp1x = parseFloat(args[i]);
240             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 178);
241 cp1y = parseFloat(args[i + 1]);
242             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 179);
243 cp2x = parseFloat(args[i + 2]);
244             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 180);
245 cp2y = parseFloat(args[i + 3]);
246             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 181);
247 x = parseFloat(args[i + 4]);
248             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 182);
249 y = parseFloat(args[i + 5]);
250             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 183);
251 if(i > 0)
252             {
253                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 185);
254 path = path + ", ";
255             }
256             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 187);
257 path = path + this._round(cp1x) + ", " + this._round(cp1y) + ", " + this._round(cp2x) + ", " + this._round(cp2y) + ", " + this._round(x) + ", " + this._round(y); 
258             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 188);
259 cp1x = cp1x + relativeX;
260             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 189);
261 cp1y = cp1y + relativeY;
262             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 190);
263 cp2x = cp2x + relativeX;
264             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 191);
265 cp2y = cp2y + relativeY;
266             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 192);
267 x = x + relativeX;
268             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 193);
269 y = y + relativeY;
270             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 194);
271 right = Math.max(x, Math.max(cp1x, cp2x));
272             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 195);
273 bottom = Math.max(y, Math.max(cp1y, cp2y));
274             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 196);
275 left = Math.min(x, Math.min(cp1x, cp2x));
276             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 197);
277 top = Math.min(y, Math.min(cp1y, cp2y));
278             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 198);
279 w = Math.abs(right - left);
280             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 199);
281 h = Math.abs(bottom - top);
282             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 200);
283 pts = [[this._currentX, this._currentY] , [cp1x, cp1y], [cp2x, cp2y], [x, y]]; 
284             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 201);
285 this._setCurveBoundingBox(pts, w, h);
286             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 202);
287 this._currentX = x;
288             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 203);
289 this._currentY = y;
290         }
291         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 205);
292 this._addToPath(path);
293     },
295     /**
296      * Draws a quadratic bezier curve.
297      *
298      * @method quadraticCurveTo
299      * @param {Number} cpx x-coordinate for the control point.
300      * @param {Number} cpy y-coordinate for the control point.
301      * @param {Number} x x-coordinate for the end point.
302      * @param {Number} y y-coordinate for the end point.
303      */
304     quadraticCurveTo: function() {
305         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "quadraticCurveTo", 217);
306 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 218);
307 this._quadraticCurveTo.apply(this, [Y.Array(arguments), false]);
308     },
310     /**
311      * Draws a quadratic bezier curve relative to the current position.
312      *
313      * @method relativeQuadraticCurveTo
314      * @param {Number} cpx x-coordinate for the control point.
315      * @param {Number} cpy y-coordinate for the control point.
316      * @param {Number} x x-coordinate for the end point.
317      * @param {Number} y y-coordinate for the end point.
318      */
319     relativeQuadraticCurveTo: function() {
320         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "relativeQuadraticCurveTo", 230);
321 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 231);
322 this._quadraticCurveTo.apply(this, [Y.Array(arguments), true]);
323     },
325     /**
326      * Implements quadraticCurveTo methods.
327      *
328      * @method _quadraticCurveTo
329      * @param {Array} args The arguments to be used.
330      * @param {Boolean} relative Indicates whether or not to use relative coordinates.
331      * @private
332      */
333     _quadraticCurveTo: function(args, relative) {
334         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "_quadraticCurveTo", 242);
335 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 243);
336 var cpx, 
337             cpy,
338             cp1x,
339             cp1y,
340             cp2x,
341             cp2y,
342             x, 
343             y,
344             currentX = this._currentX,
345             currentY = this._currentY,
346             i,
347             len = args.length - 3,
348             bezierArgs = [],
349             relativeX = relative ? parseFloat(this._currentX) : 0,
350             relativeY = relative ? parseFloat(this._currentY) : 0;
351         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 258);
352 for(i = 0; i < len; i = i + 4)
353         {
354             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 260);
355 cpx = parseFloat(args[i]) + relativeX;
356             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 261);
357 cpy = parseFloat(args[i + 1]) + relativeY;
358             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 262);
359 x = parseFloat(args[i + 2]) + relativeX;
360             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 263);
361 y = parseFloat(args[i + 3]) + relativeY;
362             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 264);
363 cp1x = currentX + 0.67*(cpx - currentX);
364             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 265);
365 cp1y = currentY + 0.67*(cpy - currentY);
366             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 266);
367 cp2x = cp1x + (x - currentX) * 0.34;
368             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 267);
369 cp2y = cp1y + (y - currentY) * 0.34;
370             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 268);
371 bezierArgs.push(cp1x);
372             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 269);
373 bezierArgs.push(cp1y);
374             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 270);
375 bezierArgs.push(cp2x);
376             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 271);
377 bezierArgs.push(cp2y);
378             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 272);
379 bezierArgs.push(x);
380             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 273);
381 bezierArgs.push(y);
382         }
383         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 275);
384 this._curveTo.apply(this, [bezierArgs, false]);
385     },
387     /**
388      * Draws a rectangle.
389      *
390      * @method drawRect
391      * @param {Number} x x-coordinate
392      * @param {Number} y y-coordinate
393      * @param {Number} w width
394      * @param {Number} h height
395      */
396     drawRect: function(x, y, w, h) {
397         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "drawRect", 287);
398 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 288);
399 this.moveTo(x, y);
400         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 289);
401 this.lineTo(x + w, y);
402         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 290);
403 this.lineTo(x + w, y + h);
404         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 291);
405 this.lineTo(x, y + h);
406         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 292);
407 this.lineTo(x, y);
408         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 293);
409 this._currentX = x;
410         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 294);
411 this._currentY = y;
412         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 295);
413 return this;
414     },
416     /**
417      * Draws a rectangle with rounded corners.
418      * 
419      * @method drawRect
420      * @param {Number} x x-coordinate
421      * @param {Number} y y-coordinate
422      * @param {Number} w width
423      * @param {Number} h height
424      * @param {Number} ew width of the ellipse used to draw the rounded corners
425      * @param {Number} eh height of the ellipse used to draw the rounded corners
426      */
427     drawRoundRect: function(x, y, w, h, ew, eh) {
428         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "drawRoundRect", 309);
429 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 310);
430 this.moveTo(x, y + eh);
431         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 311);
432 this.lineTo(x, y + h - eh);
433         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 312);
434 this.quadraticCurveTo(x, y + h, x + ew, y + h);
435         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 313);
436 this.lineTo(x + w - ew, y + h);
437         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 314);
438 this.quadraticCurveTo(x + w, y + h, x + w, y + h - eh);
439         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 315);
440 this.lineTo(x + w, y + eh);
441         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 316);
442 this.quadraticCurveTo(x + w, y, x + w - ew, y);
443         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 317);
444 this.lineTo(x + ew, y);
445         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 318);
446 this.quadraticCurveTo(x, y, x, y + eh);
447         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 319);
448 return this;
449     },
451     /**
452      * Draws a circle. Used internally by `CanvasCircle` class.
453      *
454      * @method drawCircle
455      * @param {Number} x y-coordinate
456      * @param {Number} y x-coordinate
457      * @param {Number} r radius
458      * @protected
459      */
460         drawCircle: function(x, y, radius) {
461         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "drawCircle", 331);
462 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 332);
463 var startAngle = 0,
464             endAngle = 360,
465             circum = radius * 2;
467         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 336);
468 endAngle *= 65535;
469         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 337);
470 this._drawingComplete = false;
471         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 338);
472 this._trackSize(x + circum, y + circum);
473         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 339);
474 this.moveTo((x + circum), (y + radius));
475         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 340);
476 this._addToPath(" ae " + this._round(x + radius) + ", " + this._round(y + radius) + ", " + this._round(radius) + ", " + this._round(radius) + ", " + startAngle + ", " + endAngle);
477         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 341);
478 return this;
479     },
480     
481     /**
482      * Draws an ellipse.
483      *
484      * @method drawEllipse
485      * @param {Number} x x-coordinate
486      * @param {Number} y y-coordinate
487      * @param {Number} w width
488      * @param {Number} h height
489      * @protected
490      */
491         drawEllipse: function(x, y, w, h) {
492         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "drawEllipse", 354);
493 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 355);
494 var startAngle = 0,
495             endAngle = 360,
496             radius = w * 0.5,
497             yRadius = h * 0.5;
498         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 359);
499 endAngle *= 65535;
500         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 360);
501 this._drawingComplete = false;
502         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 361);
503 this._trackSize(x + w, y + h);
504         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 362);
505 this.moveTo((x + w), (y + yRadius));
506         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 363);
507 this._addToPath(" ae " + this._round(x + radius) + ", " + this._round(x + radius) + ", " + this._round(y + yRadius) + ", " + this._round(radius) + ", " + this._round(yRadius) + ", " + startAngle + ", " + endAngle);
508         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 364);
509 return this;
510     },
511     
512     /**
513      * Draws a diamond.     
514      * 
515      * @method drawDiamond
516      * @param {Number} x y-coordinate
517      * @param {Number} y x-coordinate
518      * @param {Number} width width
519      * @param {Number} height height
520      * @protected
521      */
522     drawDiamond: function(x, y, width, height)
523     {
524         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "drawDiamond", 377);
525 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 379);
526 var midWidth = width * 0.5,
527             midHeight = height * 0.5;
528         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 381);
529 this.moveTo(x + midWidth, y);
530         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 382);
531 this.lineTo(x + width, y + midHeight);
532         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 383);
533 this.lineTo(x + midWidth, y + height);
534         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 384);
535 this.lineTo(x, y + midHeight);
536         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 385);
537 this.lineTo(x + midWidth, y);
538         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 386);
539 return this;
540     },
542     /**
543      * Draws a wedge.
544      *
545      * @method drawWedge
546      * @param {Number} x x-coordinate of the wedge's center point
547      * @param {Number} y y-coordinate of the wedge's center point
548      * @param {Number} startAngle starting angle in degrees
549      * @param {Number} arc sweep of the wedge. Negative values draw clockwise.
550      * @param {Number} radius radius of wedge. If [optional] yRadius is defined, then radius is the x radius.
551      * @param {Number} yRadius [optional] y radius for wedge.
552      * @private
553      */
554     drawWedge: function(x, y, startAngle, arc, radius)
555     {
556         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "drawWedge", 401);
557 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 403);
558 var diameter = radius * 2;
559         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 404);
560 if(Math.abs(arc) > 360)
561         {
562             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 406);
563 arc = 360;
564         }
565         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 408);
566 this._currentX = x;
567         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 409);
568 this._currentY = y;
569         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 410);
570 startAngle *= -65535;
571         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 411);
572 arc *= 65536;
573         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 412);
574 startAngle = Math.round(startAngle);
575         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 413);
576 arc = Math.round(arc);
577         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 414);
578 this.moveTo(x, y);
579         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 415);
580 this._addToPath(" ae " + this._round(x) + ", " + this._round(y) + ", " + this._round(radius) + " " + this._round(radius) + ", " +  startAngle + ", " + arc);
581         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 416);
582 this._trackSize(diameter, diameter); 
583         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 417);
584 return this;
585     },
587     /**
588      * Draws a line segment from the current drawing position to the specified x and y coordinates.
589      * 
590      * @method lineTo
591      * @param {Number} point1 x-coordinate for the end point.
592      * @param {Number} point2 y-coordinate for the end point.
593      */
594     lineTo: function()
595     {
596         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "lineTo", 427);
597 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 429);
598 this._lineTo.apply(this, [Y.Array(arguments), false]);
599     },
601     /**
602      * Draws a line segment using the current line style from the current drawing position to the relative x and y coordinates.
603      * 
604      * @method relativeLineTo
605      * @param {Number} point1 x-coordinate for the end point.
606      * @param {Number} point2 y-coordinate for the end point.
607      */
608     relativeLineTo: function()
609     {
610         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "relativeLineTo", 439);
611 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 441);
612 this._lineTo.apply(this, [Y.Array(arguments), true]);
613     },
615     /**
616      * Implements lineTo methods.
617      *
618      * @method _lineTo
619      * @param {Array} args The arguments to be used.
620      * @param {Boolean} relative Indicates whether or not to use relative coordinates.
621      * @private
622      */
623     _lineTo: function(args, relative) {
624         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "_lineTo", 452);
625 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 453);
626 var point1 = args[0],
627             i,
628             len,
629             x,
630             y,
631             path = relative ? " r " : " l ",
632             relativeX = relative ? parseFloat(this._currentX) : 0,
633             relativeY = relative ? parseFloat(this._currentY) : 0;
634         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 461);
635 if (typeof point1 == "string" || typeof point1 == "number") {
636             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 462);
637 len = args.length - 1;
638             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 463);
639 for (i = 0; i < len; i = i + 2) {
640                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 464);
641 x = parseFloat(args[i]);
642                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 465);
643 y = parseFloat(args[i + 1]);
644                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 466);
645 path += ' ' + this._round(x) + ', ' + this._round(y);
646                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 467);
647 x = x + relativeX;
648                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 468);
649 y = y + relativeY;
650                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 469);
651 this._currentX = x;
652                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 470);
653 this._currentY = y;
654                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 471);
655 this._trackSize.apply(this, [x, y]);
656             }
657         }
658         else
659         {
660             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 476);
661 len = args.length;
662             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 477);
663 for (i = 0; i < len; i = i + 1) {
664                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 478);
665 x = parseFloat(args[i][0]);
666                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 479);
667 y = parseFloat(args[i][1]);
668                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 480);
669 path += ' ' + this._round(x) + ', ' + this._round(y);
670                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 481);
671 x = x + relativeX;
672                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 482);
673 y = y + relativeY;
674                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 483);
675 this._currentX = x;
676                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 484);
677 this._currentY = y;
678                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 485);
679 this._trackSize.apply(this, [x, y]);
680             }
681         }
682         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 488);
683 this._addToPath(path);
684         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 489);
685 return this;
686     },
687     
688     /**
689      * Moves the current drawing position to specified x and y coordinates.
690      *
691      * @method moveTo
692      * @param {Number} x x-coordinate for the end point.
693      * @param {Number} y y-coordinate for the end point.
694      */
695     moveTo: function()
696     {
697         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "moveTo", 499);
698 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 501);
699 this._moveTo.apply(this, [Y.Array(arguments), false]);
700     },
702     /**
703      * Moves the current drawing position relative to specified x and y coordinates.
704      *
705      * @method relativeMoveTo
706      * @param {Number} x x-coordinate for the end point.
707      * @param {Number} y y-coordinate for the end point.
708      */
709     relativeMoveTo: function()
710     {
711         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "relativeMoveTo", 511);
712 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 513);
713 this._moveTo.apply(this, [Y.Array(arguments), true]);
714     },
716     /**
717      * Implements moveTo methods.
718      *
719      * @method _moveTo
720      * @param {Array} args The arguments to be used.
721      * @param {Boolean} relative Indicates whether or not to use relative coordinates.
722      * @private
723      */
724     _moveTo: function(args, relative) {
725         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "_moveTo", 524);
726 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 525);
727 var x = parseFloat(args[0]),
728             y = parseFloat(args[1]),
729             command = relative ? " t " : " m ",
730             relativeX = relative ? parseFloat(this._currentX) : 0,
731             relativeY = relative ? parseFloat(this._currentY) : 0;
732         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 530);
733 this._movePath = command + this._round(x) + ", " + this._round(y);
734         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 531);
735 x = x + relativeX;
736         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 532);
737 y = y + relativeY;
738         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 533);
739 this._trackSize(x, y);
740         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 534);
741 this._currentX = x;
742         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 535);
743 this._currentY = y;
744     },
746     /**
747      * Draws the graphic.
748      *
749      * @method _draw
750      * @private
751      */
752     _closePath: function()
753     {
754         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "_closePath", 544);
755 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 546);
756 var fill = this.get("fill"),
757             stroke = this.get("stroke"),
758             node = this.node,
759             w = this.get("width"),
760             h = this.get("height"),
761             path = this._path,
762             pathEnd = "",
763             multiplier = this._coordSpaceMultiplier;
764         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 554);
765 this._fillChangeHandler();
766         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 555);
767 this._strokeChangeHandler();
768         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 556);
769 if(path)
770         {
771             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 558);
772 if(fill && fill.color)
773             {
774                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 560);
775 pathEnd += ' x';
776             }
777             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 562);
778 if(stroke)
779             {
780                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 564);
781 pathEnd += ' e';
782             }
783         }
784         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 567);
785 if(path)
786         {
787             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 569);
788 node.path = path + pathEnd;
789         }
790         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 571);
791 if(!isNaN(w) && !isNaN(h))
792         {
793             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 573);
794 node.coordOrigin = this._left + ", " + this._top;
795             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 574);
796 node.coordSize = (w * multiplier) + ", " + (h * multiplier);
797             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 575);
798 node.style.position = "absolute";
799             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 576);
800 node.style.width =  w + "px";
801             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 577);
802 node.style.height =  h + "px";
803         }
804         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 579);
805 this._path = path;
806         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 580);
807 this._movePath = null;
808         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 581);
809 this._updateTransform();
810     },
812     /**
813      * Completes a drawing operation. 
814      *
815      * @method end
816      */
817     end: function()
818     {
819         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "end", 589);
820 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 591);
821 this._closePath();
822     },
824     /**
825      * Ends a fill and stroke
826      *
827      * @method closePath
828      */
829     closePath: function()
830     {
831         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "closePath", 599);
832 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 601);
833 this._addToPath(" x e");
834     },
836     /**
837      * Clears the path.
838      *
839      * @method clear
840      */
841     clear: function()
842     {
843                 _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "clear", 609);
844 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 611);
845 this._right = 0;
846         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 612);
847 this._bottom = 0;
848         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 613);
849 this._width = 0;
850         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 614);
851 this._height = 0;
852         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 615);
853 this._left = 0;
854         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 616);
855 this._top = 0;
856         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 617);
857 this._path = "";
858         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 618);
859 this._movePath = null;
860     },
861     
862     /**
863      * Returns the points on a curve
864      *
865      * @method getBezierData
866      * @param Array points Array containing the begin, end and control points of a curve.
867      * @param Number t The value for incrementing the next set of points.
868      * @return Array
869      * @private
870      */
871     getBezierData: function(points, t) {  
872         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "getBezierData", 630);
873 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 631);
874 var n = points.length,
875             tmp = [],
876             i,
877             j;
879         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 636);
880 for (i = 0; i < n; ++i){
881             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 637);
882 tmp[i] = [points[i][0], points[i][1]]; // save input
883         }
884         
885         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 640);
886 for (j = 1; j < n; ++j) {
887             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 641);
888 for (i = 0; i < n - j; ++i) {
889                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 642);
890 tmp[i][0] = (1 - t) * tmp[i][0] + t * tmp[parseInt(i + 1, 10)][0];
891                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 643);
892 tmp[i][1] = (1 - t) * tmp[i][1] + t * tmp[parseInt(i + 1, 10)][1]; 
893             }
894         }
895         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 646);
896 return [ tmp[0][0], tmp[0][1] ]; 
897     },
898   
899     /**
900      * Calculates the bounding box for a curve
901      *
902      * @method _setCurveBoundingBox
903      * @param Array pts Array containing points for start, end and control points of a curve.
904      * @param Number w Width used to calculate the number of points to describe the curve.
905      * @param Number h Height used to calculate the number of points to describe the curve.
906      * @private
907      */
908     _setCurveBoundingBox: function(pts, w, h)
909     {
910         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "_setCurveBoundingBox", 658);
911 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 660);
912 var i,
913             left = this._currentX,
914             right = left,
915             top = this._currentY,
916             bottom = top,
917             len = Math.round(Math.sqrt((w * w) + (h * h))),
918             t = 1/len,
919             xy;
920         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 668);
921 for(i = 0; i < len; ++i)
922         {
923             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 670);
924 xy = this.getBezierData(pts, t * i);
925             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 671);
926 left = isNaN(left) ? xy[0] : Math.min(xy[0], left);
927             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 672);
928 right = isNaN(right) ? xy[0] : Math.max(xy[0], right);
929             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 673);
930 top = isNaN(top) ? xy[1] : Math.min(xy[1], top);
931             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 674);
932 bottom = isNaN(bottom) ? xy[1] : Math.max(xy[1], bottom);
933         }
934         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 676);
935 left = Math.round(left * 10)/10;
936         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 677);
937 right = Math.round(right * 10)/10;
938         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 678);
939 top = Math.round(top * 10)/10;
940         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 679);
941 bottom = Math.round(bottom * 10)/10;
942         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 680);
943 this._trackSize(right, bottom);
944         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 681);
945 this._trackSize(left, top);
946     },
948     /**
949      * Updates the size of the graphics object
950      *
951      * @method _trackSize
952      * @param {Number} w width
953      * @param {Number} h height
954      * @private
955      */
956     _trackSize: function(w, h) {
957         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "_trackSize", 692);
958 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 693);
959 if (w > this._right) {
960             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 694);
961 this._right = w;
962         }
963         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 696);
964 if(w < this._left)
965         {
966             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 698);
967 this._left = w;    
968         }
969         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 700);
970 if (h < this._top)
971         {
972             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 702);
973 this._top = h;
974         }
975         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 704);
976 if (h > this._bottom) 
977         {
978             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 706);
979 this._bottom = h;
980         }
981         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 708);
982 this._width = this._right - this._left;
983         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 709);
984 this._height = this._bottom - this._top;
985     },
987     _left: 0,
989     _right: 0,
991     _top: 0,
993     _bottom: 0,
995     _width: 0,
997     _height: 0
999 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 724);
1000 Y.VMLDrawing = VMLDrawing;
1002  * <a href="http://www.w3.org/TR/NOTE-VML">VML</a> implementation of the <a href="Shape.html">`Shape`</a> class. 
1003  * `VMLShape` is not intended to be used directly. Instead, use the <a href="Shape.html">`Shape`</a> class. 
1004  * If the browser lacks <a href="http://www.w3.org/TR/SVG/">SVG</a> and <a href="http://www.w3.org/TR/html5/the-canvas-element.html">Canvas</a> 
1005  * capabilities, the <a href="Shape.html">`Shape`</a> class will point to the `VMLShape` class.
1007  * @module graphics
1008  * @class VMLShape
1009  * @constructor
1010  * @param {Object} cfg (optional) Attribute configs
1011  */
1012 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 736);
1013 VMLShape = function() 
1015     _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "VMLShape", 736);
1016 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 738);
1017 this._transforms = [];
1018     _yuitest_coverline("build/graphics-vml/graphics-vml.js", 739);
1019 this.matrix = new Y.Matrix();
1020     _yuitest_coverline("build/graphics-vml/graphics-vml.js", 740);
1021 this._normalizedMatrix = new Y.Matrix();
1022     _yuitest_coverline("build/graphics-vml/graphics-vml.js", 741);
1023 VMLShape.superclass.constructor.apply(this, arguments);
1026 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 744);
1027 VMLShape.NAME = "shape";
1029 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 746);
1030 Y.extend(VMLShape, Y.GraphicBase, Y.mix({
1031         /**
1032          * Indicates the type of shape
1033          *
1034          * @property _type
1035          * @type String
1036      * @private
1037          */
1038         _type: "shape",
1039     
1040     /**
1041      * Init method, invoked during construction.
1042      * Calls `initializer` method.
1043      *
1044      * @method init
1045      * @protected
1046      */
1047         init: function()
1048         {
1049                 _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "init", 763);
1050 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 765);
1051 this.initializer.apply(this, arguments);
1052         },
1054         /**
1055          * Initializes the shape
1056          *
1057          * @private
1058          * @method _initialize
1059          */
1060         initializer: function(cfg)
1061         {
1062                 _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "initializer", 774);
1063 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 776);
1064 var host = this,
1065             graphic = cfg.graphic,
1066             data = this.get("data");
1067                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 779);
1068 host.createNode();
1069         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 780);
1070 if(graphic)
1071         {
1072             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 782);
1073 this._setGraphic(graphic);
1074         }
1075         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 784);
1076 if(data)
1077         {
1078             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 786);
1079 host._parsePathData(data);
1080         }
1081         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 788);
1082 this._updateHandler();
1083         },
1085     /**
1086      * Set the Graphic instance for the shape.
1087      *
1088      * @method _setGraphic
1089      * @param {Graphic | Node | HTMLElement | String} render This param is used to determine the graphic instance. If it is a `Graphic` instance, it will be assigned
1090      * to the `graphic` attribute. Otherwise, a new Graphic instance will be created and rendered into the dom element that the render represents.
1091      * @private
1092      */
1093     _setGraphic: function(render)
1094     {
1095         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "_setGraphic", 799);
1096 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 801);
1097 var graphic;
1098         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 802);
1099 if(render instanceof Y.VMLGraphic)
1100         {
1101                     _yuitest_coverline("build/graphics-vml/graphics-vml.js", 804);
1102 this._graphic = render;
1103         }
1104         else
1105         {
1106             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 808);
1107 render = Y.one(render);
1108             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 809);
1109 graphic = new Y.VMLGraphic({
1110                 render: render
1111             });
1112             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 812);
1113 graphic._appendShape(this);
1114             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 813);
1115 this._graphic = graphic;
1116             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 814);
1117 this._appendStrokeAndFill();
1118         }
1119     },
1120     
1121     /**
1122      * Appends fill and stroke nodes to the shape.
1123      *
1124      * @method _appendStrokeAndFill
1125      * @private
1126      */
1127     _appendStrokeAndFill: function()
1128     {
1129         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "_appendStrokeAndFill", 824);
1130 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 826);
1131 if(this._strokeNode)
1132         {
1133             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 828);
1134 this.node.appendChild(this._strokeNode);
1135         }
1136         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 830);
1137 if(this._fillNode)
1138         {
1139             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 832);
1140 this.node.appendChild(this._fillNode);
1141         }
1142     },
1143     
1144         /**
1145          * Creates the dom node for the shape.
1146          *
1147      * @method createNode
1148          * @return HTMLElement
1149          * @private
1150          */
1151         createNode: function()
1152         {
1153         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "createNode", 843);
1154 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 845);
1155 var node,
1156             concat = this._camelCaseConcat,
1157                         x = this.get("x"),
1158                         y = this.get("y"),
1159             w = this.get("width"),
1160             h = this.get("height"),
1161                         id,
1162                         type,
1163                         name = this.name,
1164             nodestring,
1165             visibility = this.get("visible") ? "visible" : "hidden",
1166                         strokestring,
1167                         classString,
1168                         stroke,
1169                         endcap,
1170                         opacity,
1171                         joinstyle,
1172                         miterlimit,
1173                         dashstyle,
1174                         fill,
1175                         fillstring;
1176                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 866);
1177 id = this.get("id");
1178                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 867);
1179 type = this._type == "path" ? "shape" : this._type;
1180                     _yuitest_coverline("build/graphics-vml/graphics-vml.js", 868);
1181 classString = _getClassName(SHAPE) + " " + _getClassName(concat(IMPLEMENTATION, SHAPE)) + " " + _getClassName(name) + " " + _getClassName(concat(IMPLEMENTATION, name)) + " " + IMPLEMENTATION + type; 
1182                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 869);
1183 stroke = this._getStrokeProps();
1184                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 870);
1185 fill = this._getFillProps();
1186                         
1187                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 872);
1188 nodestring  = '<' + type + '  xmlns="urn:schemas-microsft.com:vml" id="' + id + '" class="' + classString + '" style="behavior:url(#default#VML);display:inline-block;position:absolute;left:' + x + 'px;top:' + y + 'px;width:' + w + 'px;height:' + h + 'px;visibility:' + visibility + '"';
1190                     _yuitest_coverline("build/graphics-vml/graphics-vml.js", 874);
1191 if(stroke && stroke.weight && stroke.weight > 0)
1192                         {
1193                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 876);
1194 endcap = stroke.endcap;
1195                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 877);
1196 opacity = parseFloat(stroke.opacity);
1197                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 878);
1198 joinstyle = stroke.joinstyle;
1199                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 879);
1200 miterlimit = stroke.miterlimit;
1201                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 880);
1202 dashstyle = stroke.dashstyle;
1203                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 881);
1204 nodestring += ' stroked="t" strokecolor="' + stroke.color + '" strokeWeight="' + stroke.weight + 'px"';
1205                                 
1206                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 883);
1207 strokestring = '<stroke class="vmlstroke" xmlns="urn:schemas-microsft.com:vml" on="t" style="behavior:url(#default#VML);display:inline-block;"';
1208                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 884);
1209 strokestring += ' opacity="' + opacity + '"';
1210                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 885);
1211 if(endcap)
1212                                 {
1213                                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 887);
1214 strokestring += ' endcap="' + endcap + '"';
1215                                 }
1216                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 889);
1217 if(joinstyle)
1218                                 {
1219                                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 891);
1220 strokestring += ' joinstyle="' + joinstyle + '"';
1221                                 }
1222                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 893);
1223 if(miterlimit)
1224                                 {
1225                                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 895);
1226 strokestring += ' miterlimit="' + miterlimit + '"';
1227                                 }
1228                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 897);
1229 if(dashstyle)
1230                                 {
1231                                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 899);
1232 strokestring += ' dashstyle="' + dashstyle + '"';
1233                                 }
1234                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 901);
1235 strokestring += '></stroke>';
1236                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 902);
1237 this._strokeNode = DOCUMENT.createElement(strokestring);
1238                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 903);
1239 nodestring += ' stroked="t"';
1240                         }
1241                         else
1242                         {
1243                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 907);
1244 nodestring += ' stroked="f"';
1245                         }
1246                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 909);
1247 if(fill)
1248                         {
1249                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 911);
1250 if(fill.node)
1251                                 {
1252                                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 913);
1253 fillstring = fill.node;
1254                                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 914);
1255 this._fillNode = DOCUMENT.createElement(fillstring);
1256                                 }
1257                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 916);
1258 if(fill.color)
1259                                 {
1260                                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 918);
1261 nodestring += ' fillcolor="' + fill.color + '"';
1262                                 }
1263                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 920);
1264 nodestring += ' filled="' + fill.filled + '"';
1265                         }
1266                         
1267                         
1268                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 924);
1269 nodestring += '>';
1270                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 925);
1271 nodestring += '</' + type + '>';
1272                         
1273                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 927);
1274 node = DOCUMENT.createElement(nodestring);
1276             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 929);
1277 this.node = node;
1278             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 930);
1279 this._strokeFlag = false;
1280             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 931);
1281 this._fillFlag = false;
1282         },
1284         /**
1285          * Add a class name to each node.
1286          *
1287          * @method addClass
1288          * @param {String} className the class name to add to the node's class attribute 
1289          */
1290         addClass: function(className)
1291         {
1292                 _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "addClass", 940);
1293 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 942);
1294 var node = this.node;
1295                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 943);
1296 Y_DOM.addClass(node, className);
1297         },
1299         /**
1300          * Removes a class name from each node.
1301          *
1302          * @method removeClass
1303          * @param {String} className the class name to remove from the node's class attribute
1304          */
1305         removeClass: function(className)
1306         {
1307                 _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "removeClass", 952);
1308 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 954);
1309 var node = this.node;
1310                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 955);
1311 Y_DOM.removeClass(node, className);
1312         },
1314         /**
1315          * Gets the current position of the node in page coordinates.
1316          *
1317          * @method getXY
1318          * @return Array The XY position of the shape.
1319          */
1320         getXY: function()
1321         {
1322                 _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "getXY", 964);
1323 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 966);
1324 var graphic = this._graphic,
1325                         parentXY = graphic.getXY(),
1326                         x = this.get("x"),
1327                         y = this.get("y");
1328                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 970);
1329 return [parentXY[0] + x, parentXY[1] + y];
1330         },
1332         /**
1333          * Set the position of the shape in page coordinates, regardless of how the node is positioned.
1334          *
1335          * @method setXY
1336          * @param {Array} Contains x & y values for new position (coordinates are page-based)
1337      *
1338          */
1339         setXY: function(xy)
1340         {
1341                 _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "setXY", 980);
1342 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 982);
1343 var graphic = this._graphic,
1344                         parentXY = graphic.getXY();
1345                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 984);
1346 this.set("x", xy[0] - parentXY[0]);
1347                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 985);
1348 this.set("y", xy[1] - parentXY[1]);
1349         },
1351         /**
1352          * Determines whether the node is an ancestor of another HTML element in the DOM hierarchy. 
1353          *
1354          * @method contains
1355          * @param {VMLShape | HTMLElement} needle The possible node or descendent
1356          * @return Boolean Whether or not this shape is the needle or its ancestor.
1357          */
1358         contains: function(needle)
1359         {
1360                 _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "contains", 995);
1361 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 997);
1362 return needle === Y.one(this.node);
1363         },
1365         /**
1366          * Compares nodes to determine if they match.
1367          * Node instances can be compared to each other and/or HTMLElements.
1368          * @method compareTo
1369          * @param {HTMLElement | Node} refNode The reference node to compare to the node.
1370          * @return {Boolean} True if the nodes match, false if they do not.
1371          */
1372         compareTo: function(refNode) {
1373                 _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "compareTo", 1007);
1374 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1008);
1375 var node = this.node;
1377                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1010);
1378 return node === refNode;
1379         },
1381         /**
1382          * Test if the supplied node matches the supplied selector.
1383          *
1384          * @method test
1385          * @param {String} selector The CSS selector to test against.
1386          * @return Boolean Wheter or not the shape matches the selector.
1387          */
1388         test: function(selector)
1389         {
1390                 _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "test", 1020);
1391 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1022);
1392 return Y_SELECTOR.test(this.node, selector);
1393         },
1395         /**
1396      * Calculates and returns properties for setting an initial stroke.
1397      *
1398      * @method _getStrokeProps
1399      * @return Object
1400      *
1401          * @private
1402          */
1403          _getStrokeProps: function()
1404          {
1405                 _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "_getStrokeProps", 1033);
1406 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1035);
1407 var props,
1408                         stroke = this.get("stroke"),
1409                         strokeOpacity,
1410                         dashstyle,
1411                         dash = "",
1412                         val,
1413                         i = 0,
1414                         len,
1415                         linecap,
1416                         linejoin;
1417         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1045);
1418 if(stroke && stroke.weight && stroke.weight > 0)
1419                 {
1420                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1047);
1421 props = {};
1422                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1048);
1423 linecap = stroke.linecap || "flat";
1424                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1049);
1425 linejoin = stroke.linejoin || "round";
1426                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1050);
1427 if(linecap != "round" && linecap != "square")
1428                         {
1429                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1052);
1430 linecap = "flat";
1431                         }
1432                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1054);
1433 strokeOpacity = parseFloat(stroke.opacity);
1434                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1055);
1435 dashstyle = stroke.dashstyle || "none";
1436                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1056);
1437 stroke.color = stroke.color || "#000000";
1438                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1057);
1439 stroke.weight = stroke.weight || 1;
1440                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1058);
1441 stroke.opacity = IS_NUM(strokeOpacity) ? strokeOpacity : 1;
1442                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1059);
1443 props.stroked = true;
1444                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1060);
1445 props.color = stroke.color;
1446                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1061);
1447 props.weight = stroke.weight;
1448                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1062);
1449 props.endcap = linecap;
1450                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1063);
1451 props.opacity = stroke.opacity;
1452                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1064);
1453 if(IS_ARRAY(dashstyle))
1454                         {
1455                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1066);
1456 dash = [];
1457                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1067);
1458 len = dashstyle.length;
1459                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1068);
1460 for(i = 0; i < len; ++i)
1461                                 {
1462                                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1070);
1463 val = dashstyle[i];
1464                                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1071);
1465 dash[i] = val / stroke.weight;
1466                                 }
1467                         }
1468                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1074);
1469 if(linejoin == "round" || linejoin == "bevel")
1470                         {
1471                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1076);
1472 props.joinstyle = linejoin;
1473                         }
1474                         else
1475                         {
1476                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1080);
1477 linejoin = parseInt(linejoin, 10);
1478                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1081);
1479 if(IS_NUM(linejoin))
1480                                 {
1481                                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1083);
1482 props.miterlimit = Math.max(linejoin, 1);
1483                                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1084);
1484 props.joinstyle = "miter";
1485                                 }
1486                         }
1487                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1087);
1488 props.dashstyle = dash;
1489                 }
1490                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1089);
1491 return props;
1492          },
1494         /**
1495          * Adds a stroke to the shape node.
1496          *
1497          * @method _strokeChangeHandler
1498          * @private
1499          */
1500         _strokeChangeHandler: function(e)
1501         {
1502         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "_strokeChangeHandler", 1098);
1503 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1100);
1504 if(!this._strokeFlag)
1505         {
1506             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1102);
1507 return;
1508         }
1509                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1104);
1510 var node = this.node,
1511                         stroke = this.get("stroke"),
1512                         strokeOpacity,
1513                         dashstyle,
1514                         dash = "",
1515                         val,
1516                         i = 0,
1517                         len,
1518                         linecap,
1519                         linejoin;
1520                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1114);
1521 if(stroke && stroke.weight && stroke.weight > 0)
1522                 {
1523                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1116);
1524 linecap = stroke.linecap || "flat";
1525                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1117);
1526 linejoin = stroke.linejoin || "round";
1527                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1118);
1528 if(linecap != "round" && linecap != "square")
1529                         {
1530                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1120);
1531 linecap = "flat";
1532                         }
1533                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1122);
1534 strokeOpacity = parseFloat(stroke.opacity);
1535                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1123);
1536 dashstyle = stroke.dashstyle || "none";
1537                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1124);
1538 stroke.color = stroke.color || "#000000";
1539                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1125);
1540 stroke.weight = stroke.weight || 1;
1541                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1126);
1542 stroke.opacity = IS_NUM(strokeOpacity) ? strokeOpacity : 1;
1543                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1127);
1544 node.stroked = true;
1545                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1128);
1546 node.strokeColor = stroke.color;
1547                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1129);
1548 node.strokeWeight = stroke.weight + "px";
1549                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1130);
1550 if(!this._strokeNode)
1551                         {
1552                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1132);
1553 this._strokeNode = this._createGraphicNode("stroke");
1554                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1133);
1555 node.appendChild(this._strokeNode);
1556                         }
1557                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1135);
1558 this._strokeNode.endcap = linecap;
1559                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1136);
1560 this._strokeNode.opacity = stroke.opacity;
1561                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1137);
1562 if(IS_ARRAY(dashstyle))
1563                         {
1564                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1139);
1565 dash = [];
1566                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1140);
1567 len = dashstyle.length;
1568                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1141);
1569 for(i = 0; i < len; ++i)
1570                                 {
1571                                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1143);
1572 val = dashstyle[i];
1573                                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1144);
1574 dash[i] = val / stroke.weight;
1575                                 }
1576                         }
1577                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1147);
1578 if(linejoin == "round" || linejoin == "bevel")
1579                         {
1580                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1149);
1581 this._strokeNode.joinstyle = linejoin;
1582                         }
1583                         else
1584                         {
1585                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1153);
1586 linejoin = parseInt(linejoin, 10);
1587                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1154);
1588 if(IS_NUM(linejoin))
1589                                 {
1590                                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1156);
1591 this._strokeNode.miterlimit = Math.max(linejoin, 1);
1592                                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1157);
1593 this._strokeNode.joinstyle = "miter";
1594                                 }
1595                         }
1596                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1160);
1597 this._strokeNode.dashstyle = dash;
1598             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1161);
1599 this._strokeNode.on = true;
1600                 }
1601                 else
1602                 {
1603             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1165);
1604 if(this._strokeNode)
1605             {
1606                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1167);
1607 this._strokeNode.on = false;
1608             }
1609                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1169);
1610 node.stroked = false;
1611                 }
1612         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1171);
1613 this._strokeFlag = false;
1614         },
1616         /**
1617      * Calculates and returns properties for setting an initial fill.
1618      *
1619      * @method _getFillProps
1620      * @return Object
1621      *
1622          * @private
1623          */
1624         _getFillProps: function()
1625         {
1626                 _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "_getFillProps", 1182);
1627 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1184);
1628 var fill = this.get("fill"),
1629                         fillOpacity,
1630                         props,
1631                         gradient,
1632                         i,
1633                         fillstring,
1634                         filled = false;
1635                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1191);
1636 if(fill)
1637                 {
1638                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1193);
1639 props = {};
1640                         
1641                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1195);
1642 if(fill.type == "radial" || fill.type == "linear")
1643                         {
1644                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1197);
1645 fillOpacity = parseFloat(fill.opacity);
1646                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1198);
1647 fillOpacity = IS_NUM(fillOpacity) ? fillOpacity : 1;
1648                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1199);
1649 filled = true;
1650                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1200);
1651 gradient = this._getGradientFill(fill);
1652                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1201);
1653 fillstring = '<fill xmlns="urn:schemas-microsft.com:vml" class="vmlfill" style="behavior:url(#default#VML);display:inline-block;" opacity="' + fillOpacity + '"';
1654                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1202);
1655 for(i in gradient)
1656                                 {
1657                                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1204);
1658 if(gradient.hasOwnProperty(i))
1659                                         {
1660                                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1206);
1661 fillstring += ' ' + i + '="' + gradient[i] + '"';
1662                                         }
1663                                 }
1664                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1209);
1665 fillstring += ' />';
1666                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1210);
1667 props.node = fillstring;
1668                         }
1669                         else {_yuitest_coverline("build/graphics-vml/graphics-vml.js", 1212);
1670 if(fill.color)
1671                         {
1672                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1214);
1673 fillOpacity = parseFloat(fill.opacity);
1674                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1215);
1675 filled = true;
1676                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1216);
1677 props.color = fill.color;
1678                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1217);
1679 if(IS_NUM(fillOpacity))
1680                                 {
1681                                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1219);
1682 fillOpacity = Math.max(Math.min(fillOpacity, 1), 0);
1683                     _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1220);
1684 props.opacity = fillOpacity;    
1685                                     _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1221);
1686 if(fillOpacity < 1)
1687                     {
1688                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1223);
1689 props.node = '<fill xmlns="urn:schemas-microsft.com:vml" class="vmlfill" style="behavior:url(#default#VML);display:inline-block;" type="solid" opacity="' + fillOpacity + '"/>';
1690                                     }
1691                 }
1692                         }}
1693                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1227);
1694 props.filled = filled;
1695                 }
1696                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1229);
1697 return props;
1698         },
1700         /**
1701          * Adds a fill to the shape node.
1702          *
1703          * @method _fillChangeHandler
1704          * @private
1705          */
1706         _fillChangeHandler: function(e)
1707         {
1708         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "_fillChangeHandler", 1238);
1709 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1240);
1710 if(!this._fillFlag)
1711         {
1712             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1242);
1713 return;
1714         }
1715                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1244);
1716 var node = this.node,
1717                         fill = this.get("fill"),
1718                         fillOpacity,
1719                         fillstring,
1720                         filled = false,
1721             i,
1722             gradient;
1723                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1251);
1724 if(fill)
1725                 {
1726                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1253);
1727 if(fill.type == "radial" || fill.type == "linear")
1728                         {
1729                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1255);
1730 filled = true;
1731                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1256);
1732 gradient = this._getGradientFill(fill);
1733                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1257);
1734 if(this._fillNode)
1735                 {
1736                     _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1259);
1737 for(i in gradient)
1738                     {
1739                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1261);
1740 if(gradient.hasOwnProperty(i))
1741                         {
1742                             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1263);
1743 if(i == "colors")
1744                             {
1745                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1265);
1746 this._fillNode.colors.value = gradient[i];
1747                             }
1748                             else
1749                             {
1750                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1269);
1751 this._fillNode[i] = gradient[i];
1752                             }
1753                         }
1754                     }
1755                 }
1756                 else
1757                 {
1758                     _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1276);
1759 fillstring = '<fill xmlns="urn:schemas-microsft.com:vml" class="vmlfill" style="behavior:url(#default#VML);display:inline-block;"';
1760                     _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1277);
1761 for(i in gradient)
1762                     {
1763                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1279);
1764 if(gradient.hasOwnProperty(i))
1765                         {
1766                             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1281);
1767 fillstring += ' ' + i + '="' + gradient[i] + '"';
1768                         }
1769                     }
1770                     _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1284);
1771 fillstring += ' />';
1772                     _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1285);
1773 this._fillNode = DOCUMENT.createElement(fillstring);
1774                     _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1286);
1775 node.appendChild(this._fillNode);
1776                 }
1777                         }
1778                         else {_yuitest_coverline("build/graphics-vml/graphics-vml.js", 1289);
1779 if(fill.color)
1780                         {
1781                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1291);
1782 node.fillcolor = fill.color;
1783                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1292);
1784 fillOpacity = parseFloat(fill.opacity);
1785                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1293);
1786 filled = true;
1787                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1294);
1788 if(IS_NUM(fillOpacity) && fillOpacity < 1)
1789                                 {
1790                                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1296);
1791 fill.opacity = fillOpacity;
1792                     _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1297);
1793 if(this._fillNode)
1794                                         {
1795                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1299);
1796 if(this._fillNode.getAttribute("type") != "solid")
1797                         {
1798                             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1301);
1799 this._fillNode.type = "solid";
1800                         }
1801                                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1303);
1802 this._fillNode.opacity = fillOpacity;
1803                                         }
1804                                         else
1805                                         {     
1806                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1307);
1807 fillstring = '<fill xmlns="urn:schemas-microsft.com:vml" class="vmlfill" style="behavior:url(#default#VML);display:inline-block;" type="solid" opacity="' + fillOpacity + '"/>';
1808                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1308);
1809 this._fillNode = DOCUMENT.createElement(fillstring);
1810                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1309);
1811 node.appendChild(this._fillNode);
1812                                         }
1813                                 }
1814                                 else {_yuitest_coverline("build/graphics-vml/graphics-vml.js", 1312);
1815 if(this._fillNode)
1816                 {   
1817                     _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1314);
1818 this._fillNode.opacity = 1;
1819                     _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1315);
1820 this._fillNode.type = "solid";
1821                                 }}
1822                         }}
1823                 }
1824                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1319);
1825 node.filled = filled;
1826         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1320);
1827 this._fillFlag = false;
1828         },
1830         //not used. remove next release.
1831     _updateFillNode: function(node)
1832         {
1833                 _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "_updateFillNode", 1324);
1834 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1326);
1835 if(!this._fillNode)
1836                 {
1837                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1328);
1838 this._fillNode = this._createGraphicNode("fill");
1839                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1329);
1840 node.appendChild(this._fillNode);
1841                 }
1842         },
1844     /**
1845      * Calculates and returns an object containing gradient properties for a fill node. 
1846      *
1847      * @method _getGradientFill
1848      * @param {Object} fill Object containing fill properties.
1849      * @return Object
1850      * @private
1851      */
1852         _getGradientFill: function(fill)
1853         {
1854                 _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "_getGradientFill", 1341);
1855 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1343);
1856 var gradientProps = {},
1857                         gradientBoxWidth,
1858                         gradientBoxHeight,
1859                         type = fill.type,
1860                         w = this.get("width"),
1861                         h = this.get("height"),
1862                         isNumber = IS_NUM,
1863                         stop,
1864                         stops = fill.stops,
1865                         len = stops.length,
1866                         opacity,
1867                         color,
1868                         i,
1869                         oi,
1870                         colorstring = "",
1871                         cx = fill.cx,
1872                         cy = fill.cy,
1873                         fx = fill.fx,
1874                         fy = fill.fy,
1875                         r = fill.r,
1876             pct,
1877                         rotation = fill.rotation || 0;
1878                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1365);
1879 if(type === "linear")
1880                 {
1881             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1367);
1882 if(rotation <= 270)
1883             {
1884                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1369);
1885 rotation = Math.abs(rotation - 270);
1886             }
1887                         else {_yuitest_coverline("build/graphics-vml/graphics-vml.js", 1371);
1888 if(rotation < 360)
1889             {
1890                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1373);
1891 rotation = 270 + (360 - rotation);
1892             }
1893             else
1894             {
1895                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1377);
1896 rotation = 270;
1897             }}
1898             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1379);
1899 gradientProps.type = "gradient";//"gradientunscaled";
1900                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1380);
1901 gradientProps.angle = rotation;
1902                 }
1903                 else {_yuitest_coverline("build/graphics-vml/graphics-vml.js", 1382);
1904 if(type === "radial")
1905                 {
1906                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1384);
1907 gradientBoxWidth = w * (r * 2);
1908                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1385);
1909 gradientBoxHeight = h * (r * 2);
1910                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1386);
1911 fx = r * 2 * (fx - 0.5);
1912                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1387);
1913 fy = r * 2 * (fy - 0.5);
1914                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1388);
1915 fx += cx;
1916                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1389);
1917 fy += cy;
1918                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1390);
1919 gradientProps.focussize = (gradientBoxWidth/w)/10 + "% " + (gradientBoxHeight/h)/10 + "%";
1920                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1391);
1921 gradientProps.alignshape = false;
1922                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1392);
1923 gradientProps.type = "gradientradial";
1924                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1393);
1925 gradientProps.focus = "100%";
1926                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1394);
1927 gradientProps.focusposition = Math.round(fx * 100) + "% " + Math.round(fy * 100) + "%";
1928                 }}
1929                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1396);
1930 for(i = 0;i < len; ++i) {
1931                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1397);
1932 stop = stops[i];
1933                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1398);
1934 color = stop.color;
1935                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1399);
1936 opacity = stop.opacity;
1937                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1400);
1938 opacity = isNumber(opacity) ? opacity : 1;
1939                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1401);
1940 pct = stop.offset || i/(len-1);
1941                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1402);
1942 pct *= (r * 2);
1943             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1403);
1944 pct = Math.round(100 * pct) + "%";
1945             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1404);
1946 oi = i > 0 ? i + 1 : "";
1947             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1405);
1948 gradientProps["opacity" + oi] = opacity + "";
1949             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1406);
1950 colorstring += ", " + pct + " " + color;
1951                 }
1952                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1408);
1953 if(parseFloat(pct) < 100)
1954                 {
1955                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1410);
1956 colorstring += ", 100% " + color;
1957                 }
1958                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1412);
1959 gradientProps.colors = colorstring.substr(2);
1960                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1413);
1961 return gradientProps;
1962         },
1964     /**
1965      * Adds a transform to the shape.
1966      *
1967      * @method _addTransform
1968      * @param {String} type The transform being applied.
1969      * @param {Array} args The arguments for the transform.
1970          * @private
1971          */
1972         _addTransform: function(type, args)
1973         {
1974         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "_addTransform", 1424);
1975 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1426);
1976 args = Y.Array(args);
1977         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1427);
1978 this._transform = Y_LANG.trim(this._transform + " " + type + "(" + args.join(", ") + ")");
1979         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1428);
1980 args.unshift(type);
1981         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1429);
1982 this._transforms.push(args);
1983         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1430);
1984 if(this.initialized)
1985         {
1986             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1432);
1987 this._updateTransform();
1988         }
1989         },
1990         
1991         /**
1992      * Applies all transforms.
1993      *
1994      * @method _updateTransform
1995          * @private
1996          */
1997         _updateTransform: function()
1998         {
1999                 _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "_updateTransform", 1442);
2000 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1444);
2001 var node = this.node,
2002             key,
2003                         transform,
2004                         transformOrigin,
2005             x = this.get("x"),
2006             y = this.get("y"),
2007             tx,
2008             ty,
2009             matrix = this.matrix,
2010             normalizedMatrix = this._normalizedMatrix,
2011             isPathShape = this instanceof Y.VMLPath,
2012             i,
2013             len = this._transforms.length;
2014         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1457);
2015 if(this._transforms && this._transforms.length > 0)
2016                 {
2017             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1459);
2018 transformOrigin = this.get("transformOrigin");
2019        
2020             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1461);
2021 if(isPathShape)
2022             {
2023                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1463);
2024 normalizedMatrix.translate(this._left, this._top);
2025             }
2026             //vml skew matrix transformOrigin ranges from -0.5 to 0.5.
2027             //subtract 0.5 from values
2028             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1467);
2029 tx = transformOrigin[0] - 0.5;
2030             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1468);
2031 ty = transformOrigin[1] - 0.5;
2032             
2033             //ensure the values are within the appropriate range to avoid errors
2034             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1471);
2035 tx = Math.max(-0.5, Math.min(0.5, tx));
2036             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1472);
2037 ty = Math.max(-0.5, Math.min(0.5, ty));
2038             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1473);
2039 for(i = 0; i < len; ++i)
2040             {
2041                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1475);
2042 key = this._transforms[i].shift();
2043                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1476);
2044 if(key)
2045                 {
2046                     _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1478);
2047 normalizedMatrix[key].apply(normalizedMatrix, this._transforms[i]); 
2048                     _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1479);
2049 matrix[key].apply(matrix, this._transforms[i]); 
2050                 }
2051                         }
2052             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1482);
2053 if(isPathShape)
2054             {
2055                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1484);
2056 normalizedMatrix.translate(-this._left, -this._top);
2057             }
2058             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1486);
2059 transform = normalizedMatrix.a + "," + 
2060                         normalizedMatrix.c + "," + 
2061                         normalizedMatrix.b + "," + 
2062                         normalizedMatrix.d + "," + 
2063                         0 + "," +
2064                         0;
2065                 }
2066         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1493);
2067 this._graphic.addToRedrawQueue(this);    
2068         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1494);
2069 if(transform)
2070         {
2071             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1496);
2072 if(!this._skew)
2073             {
2074                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1498);
2075 this._skew = DOCUMENT.createElement( '<skew class="vmlskew" xmlns="urn:schemas-microsft.com:vml" on="false" style="behavior:url(#default#VML);display:inline-block;" />');
2076                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1499);
2077 this.node.appendChild(this._skew); 
2078             }
2079             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1501);
2080 this._skew.matrix = transform;
2081             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1502);
2082 this._skew.on = true;
2083             //this._skew.offset = this._getSkewOffsetValue(normalizedMatrix.dx) + "px, " + this._getSkewOffsetValue(normalizedMatrix.dy) + "px";
2084             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1504);
2085 this._skew.origin = tx + ", " + ty;
2086         }
2087         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1506);
2088 if(this._type != "path")
2089         {
2090             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1508);
2091 this._transforms = [];
2092         }
2093         //add the translate to the x and y coordinates
2094         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1511);
2095 node.style.left = (x + this._getSkewOffsetValue(normalizedMatrix.dx)) + "px";
2096         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1512);
2097 node.style.top =  (y + this._getSkewOffsetValue(normalizedMatrix.dy)) + "px";
2098     },
2099     
2100     /**
2101      * Normalizes the skew offset values between -32767 and 32767.
2102      *
2103      * @method _getSkewOffsetValue
2104      * @param {Number} val The value to normalize
2105      * @return Number
2106      * @private
2107      */
2108     _getSkewOffsetValue: function(val)
2109     {
2110         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "_getSkewOffsetValue", 1523);
2111 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1525);
2112 var sign = Y.MatrixUtil.sign(val),
2113             absVal = Math.abs(val);
2114         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1527);
2115 val = Math.min(absVal, 32767) * sign;
2116         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1528);
2117 return val;
2118     },
2119         
2120         /**
2121          * Storage for translateX
2122          *
2123      * @property _translateX
2124      * @type Number
2125          * @private
2126          */
2127         _translateX: 0,
2129         /**
2130          * Storage for translateY
2131          *
2132      * @property _translateY
2133      * @type Number
2134          * @private
2135          */
2136         _translateY: 0,
2137     
2138     /**
2139      * Storage for the transform attribute.
2140      *
2141      * @property _transform
2142      * @type String
2143      * @private
2144      */
2145     _transform: "",
2146         
2147     /**
2148          * Specifies a 2d translation.
2149          *
2150          * @method translate
2151          * @param {Number} x The value to translate on the x-axis.
2152          * @param {Number} y The value to translate on the y-axis.
2153          */
2154         translate: function(x, y)
2155         {
2156                 _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "translate", 1565);
2157 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1567);
2158 this._translateX += x;
2159                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1568);
2160 this._translateY += y;
2161                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1569);
2162 this._addTransform("translate", arguments);
2163         },
2165         /**
2166          * Translates the shape along the x-axis. When translating x and y coordinates,
2167          * use the `translate` method.
2168          *
2169          * @method translateX
2170          * @param {Number} x The value to translate.
2171          */
2172         translateX: function(x)
2173     {
2174         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "translateX", 1579);
2175 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1581);
2176 this._translateX += x;
2177         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1582);
2178 this._addTransform("translateX", arguments);
2179     },
2181         /**
2182          * Performs a translate on the y-coordinate. When translating x and y coordinates,
2183          * use the `translate` method.
2184          *
2185          * @method translateY
2186          * @param {Number} y The value to translate.
2187          */
2188         translateY: function(y)
2189     {
2190         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "translateY", 1592);
2191 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1594);
2192 this._translateY += y;
2193         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1595);
2194 this._addTransform("translateY", arguments);
2195     },
2197     /**
2198      * Skews the shape around the x-axis and y-axis.
2199      *
2200      * @method skew
2201      * @param {Number} x The value to skew on the x-axis.
2202      * @param {Number} y The value to skew on the y-axis.
2203      */
2204     skew: function(x, y)
2205     {
2206         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "skew", 1605);
2207 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1607);
2208 this._addTransform("skew", arguments);
2209     },
2211         /**
2212          * Skews the shape around the x-axis.
2213          *
2214          * @method skewX
2215          * @param {Number} x x-coordinate
2216          */
2217          skewX: function(x)
2218          {
2219                 _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "skewX", 1616);
2220 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1618);
2221 this._addTransform("skewX", arguments);
2222          },
2224         /**
2225          * Skews the shape around the y-axis.
2226          *
2227          * @method skewY
2228          * @param {Number} y y-coordinate
2229          */
2230          skewY: function(y)
2231          {
2232                 _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "skewY", 1627);
2233 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1629);
2234 this._addTransform("skewY", arguments);
2235          },
2237         /**
2238          * Rotates the shape clockwise around it transformOrigin.
2239          *
2240          * @method rotate
2241          * @param {Number} deg The degree of the rotation.
2242          */
2243          rotate: function(deg)
2244          {
2245                 _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "rotate", 1638);
2246 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1640);
2247 this._addTransform("rotate", arguments);
2248          },
2250         /**
2251          * Specifies a 2d scaling operation.
2252          *
2253          * @method scale
2254          * @param {Number} val
2255          */
2256         scale: function(x, y)
2257         {
2258                 _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "scale", 1649);
2259 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1651);
2260 this._addTransform("scale", arguments);
2261         },
2263         /**
2264      * Overrides default `on` method. Checks to see if its a dom interaction event. If so, 
2265      * return an event attached to the `node` element. If not, return the normal functionality.
2266      *
2267      * @method on
2268      * @param {String} type event type
2269      * @param {Object} callback function
2270          * @private
2271          */
2272         on: function(type, fn)
2273         {
2274                 _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "on", 1663);
2275 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1665);
2276 if(Y.Node.DOM_EVENTS[type])
2277                 {
2278                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1667);
2279 return Y.one("#" +  this.get("id")).on(type, fn);
2280                 }
2281                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1669);
2282 return Y.on.apply(this, arguments);
2283         },
2285         /**
2286          * Draws the shape.
2287          *
2288          * @method _draw
2289          * @private
2290          */
2291         _draw: function()
2292         {
2293         },
2295         /**
2296      * Updates `Shape` based on attribute changes.
2297      *
2298      * @method _updateHandler
2299          * @private
2300          */
2301         _updateHandler: function(e)
2302         {
2303                 _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "_updateHandler", 1688);
2304 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1690);
2305 var host = this,
2306             node = host.node;
2307         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1692);
2308 host._fillChangeHandler();
2309         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1693);
2310 host._strokeChangeHandler();
2311         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1694);
2312 node.style.width = this.get("width") + "px";
2313         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1695);
2314 node.style.height = this.get("height") + "px"; 
2315         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1696);
2316 this._draw();
2317                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1697);
2318 host._updateTransform();
2319         },
2321         /**
2322          * Creates a graphic node
2323          *
2324          * @method _createGraphicNode
2325          * @param {String} type node type to create
2326          * @return HTMLElement
2327          * @private
2328          */
2329         _createGraphicNode: function(type)
2330         {
2331                 _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "_createGraphicNode", 1708);
2332 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1710);
2333 type = type || this._type;
2334                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1711);
2335 return DOCUMENT.createElement('<' + type + ' xmlns="urn:schemas-microsft.com:vml" style="behavior:url(#default#VML);display:inline-block;" class="vml' + type + '"/>');
2336         },
2338         /**
2339          * Value function for fill attribute
2340          *
2341          * @private
2342          * @method _getDefaultFill
2343          * @return Object
2344          */
2345         _getDefaultFill: function() {
2346                 _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "_getDefaultFill", 1721);
2347 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1722);
2348 return {
2349                         type: "solid",
2350                         opacity: 1,
2351                         cx: 0.5,
2352                         cy: 0.5,
2353                         fx: 0.5,
2354                         fy: 0.5,
2355                         r: 0.5
2356                 };
2357         },
2359         /**
2360          * Value function for stroke attribute
2361          *
2362          * @private
2363          * @method _getDefaultStroke
2364          * @return Object
2365          */
2366         _getDefaultStroke: function() 
2367         {
2368                 _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "_getDefaultStroke", 1740);
2369 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1742);
2370 return {
2371                         weight: 1,
2372                         dashstyle: "none",
2373                         color: "#000",
2374                         opacity: 1.0
2375                 };
2376         },
2378     /**
2379      * Sets the value of an attribute.
2380      *
2381      * @method set
2382      * @param {String|Object} name The name of the attribute. Alternatively, an object of key value pairs can 
2383      * be passed in to set multiple attributes at once.
2384      * @param {Any} value The value to set the attribute to. This value is ignored if an object is received as 
2385      * the name param.
2386      */
2387         set: function() 
2388         {
2389                 _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "set", 1759);
2390 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1761);
2391 var host = this;
2392                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1762);
2393 AttributeLite.prototype.set.apply(host, arguments);
2394                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1763);
2395 if(host.initialized)
2396                 {
2397                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1765);
2398 host._updateHandler();
2399                 }
2400         },
2402         /**
2403          * Returns the bounds for a shape.
2404          *
2405      * Calculates the a new bounding box from the original corner coordinates (base on size and position) and the transform matrix.
2406      * The calculated bounding box is used by the graphic instance to calculate its viewBox. 
2407      *
2408          * @method getBounds
2409          * @return Object
2410          */
2411         getBounds: function()
2412         {
2413                 _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "getBounds", 1778);
2414 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1780);
2415 var isPathShape = this instanceof Y.VMLPath,
2416                         w = this.get("width"),
2417                         h = this.get("height"),
2418             x = this.get("x"),
2419             y = this.get("y");
2420         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1785);
2421 if(isPathShape)
2422         {
2423             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1787);
2424 x = x + this._left;
2425             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1788);
2426 y = y + this._top;
2427             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1789);
2428 w = this._right - this._left;
2429             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1790);
2430 h = this._bottom - this._top;
2431         }
2432         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1792);
2433 return this._getContentRect(w, h, x, y);
2434         },
2436     /**
2437      * Calculates the bounding box for the shape.
2438      *
2439      * @method _getContentRect
2440      * @param {Number} w width of the shape
2441      * @param {Number} h height of the shape
2442      * @param {Number} x x-coordinate of the shape
2443      * @param {Number} y y-coordinate of the shape
2444      * @private
2445      */
2446     _getContentRect: function(w, h, x, y)
2447     {
2448         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "_getContentRect", 1805);
2449 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1807);
2450 var transformOrigin = this.get("transformOrigin"),
2451             transformX = transformOrigin[0] * w,
2452             transformY = transformOrigin[1] * h,
2453                     transforms = this.matrix.getTransformArray(this.get("transform")),
2454             matrix = new Y.Matrix(),
2455             i,
2456             len = transforms.length,
2457             transform,
2458             key,
2459             contentRect,
2460             isPathShape = this instanceof Y.VMLPath;
2461         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1818);
2462 if(isPathShape)
2463         {
2464             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1820);
2465 matrix.translate(this._left, this._top);
2466         }
2467         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1822);
2468 transformX = !isNaN(transformX) ? transformX : 0;
2469         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1823);
2470 transformY = !isNaN(transformY) ? transformY : 0;
2471         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1824);
2472 matrix.translate(transformX, transformY);
2473         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1825);
2474 for(i = 0; i < len; i = i + 1)
2475         {
2476             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1827);
2477 transform = transforms[i];
2478             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1828);
2479 key = transform.shift();
2480             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1829);
2481 if(key)
2482             {
2483                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1831);
2484 matrix[key].apply(matrix, transform); 
2485             }
2486         }
2487         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1834);
2488 matrix.translate(-transformX, -transformY);
2489         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1835);
2490 if(isPathShape)
2491         {
2492             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1837);
2493 matrix.translate(-this._left, -this._top);
2494         }
2495         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1839);
2496 contentRect = matrix.getContentRect(w, h, x, y);
2497         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1840);
2498 return contentRect;
2499     },
2501     /**
2502      * Places the shape above all other shapes.
2503      *
2504      * @method toFront
2505      */
2506     toFront: function()
2507     {
2508         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "toFront", 1848);
2509 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1850);
2510 var graphic = this.get("graphic");
2511         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1851);
2512 if(graphic)
2513         {
2514             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1853);
2515 graphic._toFront(this);
2516         }
2517     },
2519     /**
2520      * Places the shape underneath all other shapes.
2521      *
2522      * @method toFront
2523      */
2524     toBack: function()
2525     {
2526         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "toBack", 1862);
2527 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1864);
2528 var graphic = this.get("graphic");
2529         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1865);
2530 if(graphic)
2531         {
2532             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1867);
2533 graphic._toBack(this);
2534         }
2535     },
2537     /**
2538      * Parses path data string and call mapped methods.
2539      *
2540      * @method _parsePathData
2541      * @param {String} val The path data
2542      * @private
2543      */
2544     _parsePathData: function(val)
2545     {
2546         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "_parsePathData", 1878);
2547 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1880);
2548 var method,
2549             methodSymbol,
2550             args,
2551             commandArray = Y.Lang.trim(val.match(SPLITPATHPATTERN)),
2552             i,
2553             len, 
2554             str,
2555             symbolToMethod = this._pathSymbolToMethod;
2556         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1888);
2557 if(commandArray)
2558         {
2559             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1890);
2560 this.clear();
2561             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1891);
2562 len = commandArray.length || 0;
2563             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1892);
2564 for(i = 0; i < len; i = i + 1)
2565             {
2566                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1894);
2567 str = commandArray[i];
2568                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1895);
2569 methodSymbol = str.substr(0, 1);
2570                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1896);
2571 args = str.substr(1).match(SPLITARGSPATTERN);
2572                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1897);
2573 method = symbolToMethod[methodSymbol];
2574                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1898);
2575 if(method)
2576                 {
2577                     _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1900);
2578 if(args)
2579                     {
2580                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1902);
2581 this[method].apply(this, args);
2582                     }
2583                     else
2584                     {
2585                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1906);
2586 this[method].apply(this);
2587                     }
2588                 }
2589             }
2590             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1910);
2591 this.end();
2592         }
2593     },
2594         
2595     /**
2596      *  Destroys shape
2597      *
2598      *  @method destroy
2599      */
2600     destroy: function()
2601     {
2602         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "destroy", 1919);
2603 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1921);
2604 var graphic = this.get("graphic");
2605         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1922);
2606 if(graphic)
2607         {
2608             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1924);
2609 graphic.removeShape(this);
2610         }
2611         else
2612         {
2613             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1928);
2614 this._destroy();
2615         }
2616     },
2618     /**
2619      *  Implementation for shape destruction
2620      *
2621      *  @method destroy
2622      *  @protected
2623      */
2624     _destroy: function()
2625     {
2626         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "_destroy", 1938);
2627 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1940);
2628 if(this.node)
2629         {   
2630             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1942);
2631 if(this._fillNode)
2632             {
2633                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1944);
2634 this.node.removeChild(this._fillNode);
2635                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1945);
2636 this._fillNode = null;
2637             }
2638             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1947);
2639 if(this._strokeNode)
2640             {
2641                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1949);
2642 this.node.removeChild(this._strokeNode);
2643                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1950);
2644 this._strokeNode = null;
2645             }
2646             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1952);
2647 Y.one(this.node).remove(true);
2648         }
2649     }
2650 }, Y.VMLDrawing.prototype));
2652 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1957);
2653 VMLShape.ATTRS = {
2654         /**
2655          * An array of x, y values which indicates the transformOrigin in which to rotate the shape. Valid values range between 0 and 1 representing a 
2656          * fraction of the shape's corresponding bounding box dimension. The default value is [0.5, 0.5].
2657          *
2658          * @config transformOrigin
2659          * @type Array
2660          */
2661         transformOrigin: {
2662                 valueFn: function()
2663                 {
2664                         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "valueFn", 1966);
2665 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 1968);
2666 return [0.5, 0.5];
2667                 }
2668         },
2669         
2670     /**
2671      * <p>A string containing, in order, transform operations applied to the shape instance. The `transform` string can contain the following values:
2672      *     
2673      *    <dl>
2674      *        <dt>rotate</dt><dd>Rotates the shape clockwise around it transformOrigin.</dd>
2675      *        <dt>translate</dt><dd>Specifies a 2d translation.</dd>
2676      *        <dt>skew</dt><dd>Skews the shape around the x-axis and y-axis.</dd>
2677      *        <dt>scale</dt><dd>Specifies a 2d scaling operation.</dd>
2678      *        <dt>translateX</dt><dd>Translates the shape along the x-axis.</dd>
2679      *        <dt>translateY</dt><dd>Translates the shape along the y-axis.</dd>
2680      *        <dt>skewX</dt><dd>Skews the shape around the x-axis.</dd>
2681      *        <dt>skewY</dt><dd>Skews the shape around the y-axis.</dd>
2682      *        <dt>matrix</dt><dd>Specifies a 2D transformation matrix comprised of the specified six values.</dd>      
2683      *    </dl>
2684      * </p>
2685      * <p>Applying transforms through the transform attribute will reset the transform matrix and apply a new transform. The shape class also contains corresponding methods for each transform
2686      * that will apply the transform to the current matrix. The below code illustrates how you might use the `transform` attribute to instantiate a recangle with a rotation of 45 degrees.</p>
2687             var myRect = new Y.Rect({
2688                 type:"rect",
2689                 width: 50,
2690                 height: 40,
2691                 transform: "rotate(45)"
2692             };
2693      * <p>The code below would apply `translate` and `rotate` to an existing shape.</p>
2694     
2695         myRect.set("transform", "translate(40, 50) rotate(45)");
2696          * @config transform
2697      * @type String  
2698          */
2699         transform: {
2700                 setter: function(val)
2701                 {
2702             _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "setter", 2002);
2703 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2004);
2704 var i,
2705                 len,
2706                 transform;
2707             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2007);
2708 this.matrix.init();     
2709             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2008);
2710 this._normalizedMatrix.init();  
2711             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2009);
2712 this._transforms = this.matrix.getTransformArray(val);
2713             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2010);
2714 len = this._transforms.length;
2715             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2011);
2716 for(i = 0;i < len; ++i)
2717             {
2718                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2013);
2719 transform = this._transforms[i];
2720             }
2721             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2015);
2722 this._transform = val;
2723             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2016);
2724 return val;
2725                 },
2727         getter: function()
2728         {
2729             _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "getter", 2019);
2730 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2021);
2731 return this._transform;
2732         }
2733         },
2735         /**
2736          * Indicates the x position of shape.
2737          *
2738          * @config x
2739          * @type Number
2740          */
2741         x: {
2742                 value: 0
2743         },
2745         /**
2746          * Indicates the y position of shape.
2747          *
2748          * @config y
2749          * @type Number
2750          */
2751         y: {
2752                 value: 0
2753         },
2755         /**
2756          * Unique id for class instance.
2757          *
2758          * @config id
2759          * @type String
2760          */
2761         id: {
2762                 valueFn: function()
2763                 {
2764                         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "valueFn", 2052);
2765 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2054);
2766 return Y.guid();
2767                 },
2769                 setter: function(val)
2770                 {
2771                         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "setter", 2057);
2772 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2059);
2773 var node = this.node;
2774                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2060);
2775 if(node)
2776                         {
2777                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2062);
2778 node.setAttribute("id", val);
2779                         }
2780                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2064);
2781 return val;
2782                 }
2783         },
2784         
2785         /**
2786          * 
2787          * @config width
2788          */
2789         width: {
2790                 value: 0
2791         },
2793         /**
2794          * 
2795          * @config height
2796          */
2797         height: {
2798                 value: 0
2799         },
2801         /**
2802          * Indicates whether the shape is visible.
2803          *
2804          * @config visible
2805          * @type Boolean
2806          */
2807         visible: {
2808                 value: true,
2810                 setter: function(val){
2811                         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "setter", 2093);
2812 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2094);
2813 var node = this.node,
2814                                 visibility = val ? "visible" : "hidden";
2815                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2096);
2816 if(node)
2817                         {
2818                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2098);
2819 node.style.visibility = visibility;
2820                         }
2821                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2100);
2822 return val;
2823                 }
2824         },
2826         /**
2827          * Contains information about the fill of the shape. 
2828      *  <dl>
2829      *      <dt>color</dt><dd>The color of the fill.</dd>
2830      *      <dt>opacity</dt><dd>Number between 0 and 1 that indicates the opacity of the fill. The default value is 1.</dd>
2831      *      <dt>type</dt><dd>Type of fill.
2832      *          <dl>
2833      *              <dt>solid</dt><dd>Solid single color fill. (default)</dd>
2834      *              <dt>linear</dt><dd>Linear gradient fill.</dd>
2835      *              <dt>radial</dt><dd>Radial gradient fill.</dd>
2836      *          </dl>
2837      *      </dd>
2838      *  </dl>
2839      *  <p>If a `linear` or `radial` is specified as the fill type. The following additional property is used:
2840      *  <dl>
2841      *      <dt>stops</dt><dd>An array of objects containing the following properties:
2842      *          <dl>
2843      *              <dt>color</dt><dd>The color of the stop.</dd>
2844      *              <dt>opacity</dt><dd>Number between 0 and 1 that indicates the opacity of the stop. The default value is 1. Note: No effect for IE 6 - 8</dd>
2845      *              <dt>offset</dt><dd>Number between 0 and 1 indicating where the color stop is positioned.</dd> 
2846      *          </dl>
2847      *      </dd>
2848      *      <p>Linear gradients also have the following property:</p>
2849      *      <dt>rotation</dt><dd>Linear gradients flow left to right by default. The rotation property allows you to change the flow by rotation. (e.g. A rotation of 180 would make the gradient pain from right to left.)</dd>
2850      *      <p>Radial gradients have the following additional properties:</p>
2851      *      <dt>r</dt><dd>Radius of the gradient circle.</dd>
2852      *      <dt>fx</dt><dd>Focal point x-coordinate of the gradient.</dd>
2853      *      <dt>fy</dt><dd>Focal point y-coordinate of the gradient.</dd>
2854      *  </dl>
2855      *  <p>The corresponding `SVGShape` class implements the following additional properties.</p>
2856      *  <dl>
2857      *      <dt>cx</dt><dd>
2858      *          <p>The x-coordinate of the center of the gradient circle. Determines where the color stop begins. The default value 0.5.</p>
2859      *      </dd>
2860      *      <dt>cy</dt><dd>
2861      *          <p>The y-coordinate of the center of the gradient circle. Determines where the color stop begins. The default value 0.5.</p>
2862      *      </dd>
2863      *  </dl>
2864      *  <p>These properties are not currently implemented in `CanvasShape` or `VMLShape`.</p> 
2865          *
2866          * @config fill
2867          * @type Object 
2868          */
2869         fill: {
2870                 valueFn: "_getDefaultFill",
2871                 
2872                 setter: function(val)
2873                 {
2874                         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "setter", 2150);
2875 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2152);
2876 var i,
2877                                 fill,
2878                                 tmpl = this.get("fill") || this._getDefaultFill();
2879                         
2880                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2156);
2881 if(val)
2882                         {
2883                                 //ensure, fill type is solid if color is explicitly passed.
2884                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2159);
2885 if(val.hasOwnProperty("color"))
2886                                 {
2887                                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2161);
2888 val.type = "solid";
2889                                 }
2890                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2163);
2891 for(i in val)
2892                                 {
2893                                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2165);
2894 if(val.hasOwnProperty(i))
2895                                         {   
2896                                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2167);
2897 tmpl[i] = val[i];
2898                                         }
2899                                 }
2900                         }
2901                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2171);
2902 fill = tmpl;
2903                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2172);
2904 if(fill && fill.color)
2905                         {
2906                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2174);
2907 if(fill.color === undefined || fill.color == "none")
2908                                 {
2909                                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2176);
2910 fill.color = null;
2911                                 }
2912                         }
2913                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2179);
2914 this._fillFlag = true;
2915             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2180);
2916 return fill;
2917                 }
2918         },
2920         /**
2921          * Contains information about the stroke of the shape.
2922      *  <dl>
2923      *      <dt>color</dt><dd>The color of the stroke.</dd>
2924      *      <dt>weight</dt><dd>Number that indicates the width of the stroke.</dd>
2925      *      <dt>opacity</dt><dd>Number between 0 and 1 that indicates the opacity of the stroke. The default value is 1.</dd>
2926      *      <dt>dashstyle</dt>Indicates whether to draw a dashed stroke. When set to "none", a solid stroke is drawn. When set to an array, the first index indicates the
2927      *  length of the dash. The second index indicates the length of gap.
2928      *      <dt>linecap</dt><dd>Specifies the linecap for the stroke. The following values can be specified:
2929      *          <dl>
2930      *              <dt>butt (default)</dt><dd>Specifies a butt linecap.</dd>
2931      *              <dt>square</dt><dd>Specifies a sqare linecap.</dd>
2932      *              <dt>round</dt><dd>Specifies a round linecap.</dd>
2933      *          </dl>
2934      *      </dd>
2935      *      <dt>linejoin</dt><dd>Specifies a linejoin for the stroke. The following values can be specified:
2936      *          <dl>
2937      *              <dt>round (default)</dt><dd>Specifies that the linejoin will be round.</dd>
2938      *              <dt>bevel</dt><dd>Specifies a bevel for the linejoin.</dd>
2939      *              <dt>miter limit</dt><dd>An integer specifying the miter limit of a miter linejoin. If you want to specify a linejoin of miter, you simply specify the limit as opposed to having
2940      *  separate miter and miter limit values.</dd>
2941      *          </dl>
2942      *      </dd>
2943      *  </dl>
2944          *
2945          * @config stroke
2946          * @type Object
2947          */
2948         stroke: {
2949                 valueFn: "_getDefaultStroke",
2950                 
2951                 setter: function(val)
2952                 {
2953                         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "setter", 2215);
2954 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2217);
2955 var i,
2956                                 stroke,
2957                 wt,
2958                                 tmpl = this.get("stroke") || this._getDefaultStroke();
2959                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2221);
2960 if(val)
2961                         {
2962                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2223);
2963 if(val.hasOwnProperty("weight"))
2964                 {
2965                     _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2225);
2966 wt = parseInt(val.weight, 10);
2967                     _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2226);
2968 if(!isNaN(wt))
2969                     {
2970                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2228);
2971 val.weight = wt;
2972                     }
2973                 }
2974                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2231);
2975 for(i in val)
2976                                 {
2977                                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2233);
2978 if(val.hasOwnProperty(i))
2979                                         {   
2980                                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2235);
2981 tmpl[i] = val[i];
2982                                         }
2983                                 }
2984                         }
2985                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2239);
2986 stroke = tmpl;
2987             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2240);
2988 this._strokeFlag = true;
2989                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2241);
2990 return stroke;
2991                 }
2992         },
2993         
2994         //Not used. Remove in future.
2995     autoSize: {
2996                 value: false
2997         },
2999         // Only implemented in SVG
3000         // Determines whether the instance will receive mouse events.
3001         // 
3002         // @config pointerEvents
3003         // @type string
3004         //
3005         pointerEvents: {
3006                 value: "visiblePainted"
3007         },
3009         /**
3010          * Dom node for the shape.
3011          *
3012          * @config node
3013          * @type HTMLElement
3014          * @readOnly
3015          */
3016         node: {
3017                 readOnly: true,
3019                 getter: function()
3020                 {
3021                         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "getter", 2270);
3022 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2272);
3023 return this.node;
3024                 }
3025         },
3027     /**
3028      * Represents an SVG Path string. This will be parsed and added to shape's API to represent the SVG data across all implementations. Note that when using VML or SVG 
3029      * implementations, part of this content will be added to the DOM using respective VML/SVG attributes. If your content comes from an untrusted source, you will need 
3030      * to ensure that no malicious code is included in that content. 
3031      *
3032      * @config data
3033      * @type String
3034      */
3035     data: {
3036         setter: function(val)
3037         {
3038             _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "setter", 2285);
3039 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2287);
3040 if(this.get("node"))
3041             {
3042                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2289);
3043 this._parsePathData(val);
3044             }
3045             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2291);
3046 return val;
3047         }
3048     },
3050         /**
3051          * Reference to the container Graphic.
3052          *
3053          * @config graphic
3054          * @type Graphic
3055          */
3056         graphic: {
3057                 readOnly: true,
3059                 getter: function()
3060                 {
3061                         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "getter", 2304);
3062 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2306);
3063 return this._graphic;
3064                 }
3065         }
3067 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2310);
3068 Y.VMLShape = VMLShape;
3070  * <a href="http://www.w3.org/TR/NOTE-VML">VML</a> implementation of the <a href="Path.html">`Path`</a> class. 
3071  * `VMLPath` is not intended to be used directly. Instead, use the <a href="Path.html">`Path`</a> class. 
3072  * If the browser lacks <a href="http://www.w3.org/TR/SVG/">SVG</a> and <a href="http://www.w3.org/TR/html5/the-canvas-element.html">Canvas</a> 
3073  * capabilities, the <a href="Path.html">`Path`</a> class will point to the `VMLPath` class.
3075  * @module graphics
3076  * @class VMLPath
3077  * @extends VMLShape
3078  */
3079 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2321);
3080 VMLPath = function()
3082         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "VMLPath", 2321);
3083 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2323);
3084 VMLPath.superclass.constructor.apply(this, arguments);
3087 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2326);
3088 VMLPath.NAME = "path";
3089 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2327);
3090 Y.extend(VMLPath, Y.VMLShape);
3091 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2328);
3092 VMLPath.ATTRS = Y.merge(Y.VMLShape.ATTRS, {
3093         /**
3094          * Indicates the width of the shape
3095          * 
3096          * @config width
3097          * @type Number
3098          */
3099         width: {
3100                 getter: function()
3101                 {
3102                         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "getter", 2336);
3103 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2338);
3104 var val = Math.max(this._right - this._left, 0);
3105                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2339);
3106 return val;
3107                 }
3108         },
3110         /**
3111          * Indicates the height of the shape
3112          * 
3113          * @config height
3114          * @type Number
3115          */
3116         height: {
3117                 getter: function()
3118                 {
3119                         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "getter", 2350);
3120 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2352);
3121 return Math.max(this._bottom - this._top, 0);
3122                 }
3123         },
3124         
3125         /**
3126          * Indicates the path used for the node.
3127          *
3128          * @config path
3129          * @type String
3130      * @readOnly
3131          */
3132         path: {
3133                 readOnly: true,
3135                 getter: function()
3136                 {
3137                         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "getter", 2366);
3138 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2368);
3139 return this._path;
3140                 }
3141         }
3143 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2372);
3144 Y.VMLPath = VMLPath;
3146  * <a href="http://www.w3.org/TR/NOTE-VML">VML</a> implementation of the <a href="Rect.html">`Rect`</a> class. 
3147  * `VMLRect` is not intended to be used directly. Instead, use the <a href="Rect.html">`Rect`</a> class. 
3148  * If the browser lacks <a href="http://www.w3.org/TR/SVG/">SVG</a> and <a href="http://www.w3.org/TR/html5/the-canvas-element.html">Canvas</a> 
3149  * capabilities, the <a href="Rect.html">`Rect`</a> class will point to the `VMLRect` class.
3151  * @module graphics
3152  * @class VMLRect
3153  * @constructor
3154  */
3155 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2383);
3156 VMLRect = function()
3158         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "VMLRect", 2383);
3159 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2385);
3160 VMLRect.superclass.constructor.apply(this, arguments);
3162 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2387);
3163 VMLRect.NAME = "rect"; 
3164 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2388);
3165 Y.extend(VMLRect, Y.VMLShape, {
3166         /**
3167          * Indicates the type of shape
3168          *
3169          * @property _type
3170          * @type String
3171      * @private
3172          */
3173         _type: "rect"
3175 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2398);
3176 VMLRect.ATTRS = Y.VMLShape.ATTRS;
3177 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2399);
3178 Y.VMLRect = VMLRect;
3180  * <a href="http://www.w3.org/TR/NOTE-VML">VML</a> implementation of the <a href="Ellipse.html">`Ellipse`</a> class. 
3181  * `VMLEllipse` is not intended to be used directly. Instead, use the <a href="Ellipse.html">`Ellipse`</a> class. 
3182  * If the browser lacks <a href="http://www.w3.org/TR/SVG/">SVG</a> and <a href="http://www.w3.org/TR/html5/the-canvas-element.html">Canvas</a> 
3183  * capabilities, the <a href="Ellipse.html">`Ellipse`</a> class will point to the `VMLEllipse` class.
3185  * @module graphics
3186  * @class VMLEllipse
3187  * @constructor
3188  */
3189 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2410);
3190 VMLEllipse = function()
3192         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "VMLEllipse", 2410);
3193 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2412);
3194 VMLEllipse.superclass.constructor.apply(this, arguments);
3197 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2415);
3198 VMLEllipse.NAME = "ellipse";
3200 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2417);
3201 Y.extend(VMLEllipse, Y.VMLShape, {
3202         /**
3203          * Indicates the type of shape
3204          *
3205          * @property _type
3206          * @type String
3207      * @private
3208          */
3209         _type: "oval"
3211 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2427);
3212 VMLEllipse.ATTRS = Y.merge(Y.VMLShape.ATTRS, {
3213         /**
3214          * Horizontal radius for the ellipse. 
3215          *
3216          * @config xRadius
3217          * @type Number
3218          */
3219         xRadius: {
3220                 lazyAdd: false,
3222                 getter: function()
3223                 {
3224                         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "getter", 2437);
3225 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2439);
3226 var val = this.get("width");
3227                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2440);
3228 val = Math.round((val/2) * 100)/100;
3229                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2441);
3230 return val;
3231                 },
3232                 
3233                 setter: function(val)
3234                 {
3235                         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "setter", 2444);
3236 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2446);
3237 var w = val * 2; 
3238                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2447);
3239 this.set("width", w);
3240                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2448);
3241 return val;
3242                 }
3243         },
3245         /**
3246          * Vertical radius for the ellipse. 
3247          *
3248          * @config yRadius
3249          * @type Number
3250          * @readOnly
3251          */
3252         yRadius: {
3253                 lazyAdd: false,
3254                 
3255                 getter: function()
3256                 {
3257                         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "getter", 2462);
3258 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2464);
3259 var val = this.get("height");
3260                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2465);
3261 val = Math.round((val/2) * 100)/100;
3262                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2466);
3263 return val;
3264                 },
3266                 setter: function(val)
3267                 {
3268                         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "setter", 2469);
3269 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2471);
3270 var h = val * 2;
3271                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2472);
3272 this.set("height", h);
3273                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2473);
3274 return val;
3275                 }
3276         }
3278 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2477);
3279 Y.VMLEllipse = VMLEllipse;
3281  * <a href="http://www.w3.org/TR/NOTE-VML">VML</a> implementation of the <a href="Circle.html">`Circle`</a> class. 
3282  * `VMLCircle` is not intended to be used directly. Instead, use the <a href="Circle.html">`Circle`</a> class. 
3283  * If the browser lacks <a href="http://www.w3.org/TR/SVG/">SVG</a> and <a href="http://www.w3.org/TR/html5/the-canvas-element.html">Canvas</a> 
3284  * capabilities, the <a href="Circle.html">`Circle`</a> class will point to the `VMLCircle` class.
3286  * @module graphics
3287  * @class VMLCircle
3288  * @constructor
3289  */
3290 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2488);
3291 VMLCircle = function(cfg)
3293         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "VMLCircle", 2488);
3294 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2490);
3295 VMLCircle.superclass.constructor.apply(this, arguments);
3298 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2493);
3299 VMLCircle.NAME = "circle";
3301 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2495);
3302 Y.extend(VMLCircle, VMLShape, {
3303         /**
3304          * Indicates the type of shape
3305          *
3306          * @property _type
3307          * @type String
3308      * @private
3309          */
3310         _type: "oval"
3313 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2506);
3314 VMLCircle.ATTRS = Y.merge(VMLShape.ATTRS, {
3315         /**
3316          * Radius for the circle.
3317          *
3318          * @config radius
3319          * @type Number
3320          */
3321         radius: {
3322                 lazyAdd: false,
3324                 value: 0
3325         },
3327         /**
3328          * Indicates the width of the shape
3329          *
3330          * @config width
3331          * @type Number
3332          */
3333         width: {
3334         setter: function(val)
3335         {
3336             _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "setter", 2526);
3337 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2528);
3338 this.set("radius", val/2);
3339             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2529);
3340 return val;
3341         },
3343                 getter: function()
3344                 {   
3345                         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "getter", 2532);
3346 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2534);
3347 var radius = this.get("radius"),
3348                         val = radius && radius > 0 ? radius * 2 : 0;
3349                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2536);
3350 return val;
3351                 }
3352         },
3354         /**
3355          * Indicates the height of the shape
3356          *
3357          * @config height
3358          * @type Number
3359          */
3360         height: {
3361         setter: function(val)
3362         {
3363             _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "setter", 2547);
3364 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2549);
3365 this.set("radius", val/2);
3366             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2550);
3367 return val;
3368         },
3370                 getter: function()
3371                 {   
3372                         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "getter", 2553);
3373 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2555);
3374 var radius = this.get("radius"),
3375                         val = radius && radius > 0 ? radius * 2 : 0;
3376                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2557);
3377 return val;
3378                 }
3379         }
3381 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2561);
3382 Y.VMLCircle = VMLCircle;
3384  * Draws pie slices
3386  * @module graphics
3387  * @class VMLPieSlice
3388  * @constructor
3389  */
3390 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2569);
3391 VMLPieSlice = function()
3393         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "VMLPieSlice", 2569);
3394 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2571);
3395 VMLPieSlice.superclass.constructor.apply(this, arguments);
3397 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2573);
3398 VMLPieSlice.NAME = "vmlPieSlice";
3399 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2574);
3400 Y.extend(VMLPieSlice, Y.VMLShape, Y.mix({
3401     /**
3402      * Indicates the type of shape
3403      *
3404      * @property _type
3405      * @type String
3406      * @private
3407      */
3408     _type: "shape",
3410         /**
3411          * Change event listener
3412          *
3413          * @private
3414          * @method _updateHandler
3415          */
3416         _draw: function(e)
3417         {
3418         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "_draw", 2590);
3419 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2592);
3420 var x = this.get("cx"),
3421             y = this.get("cy"),
3422             startAngle = this.get("startAngle"),
3423             arc = this.get("arc"),
3424             radius = this.get("radius");
3425         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2597);
3426 this.clear();
3427         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2598);
3428 this.drawWedge(x, y, startAngle, arc, radius);
3429                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2599);
3430 this.end();
3431         }
3432  }, Y.VMLDrawing.prototype));
3433 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2602);
3434 VMLPieSlice.ATTRS = Y.mix({
3435     cx: {
3436         value: 0
3437     },
3439     cy: {
3440         value: 0
3441     },
3442     /**
3443      * Starting angle in relation to a circle in which to begin the pie slice drawing.
3444      *
3445      * @config startAngle
3446      * @type Number
3447      */
3448     startAngle: {
3449         value: 0
3450     },
3452     /**
3453      * Arc of the slice.
3454      *
3455      * @config arc
3456      * @type Number
3457      */
3458     arc: {
3459         value: 0
3460     },
3462     /**
3463      * Radius of the circle in which the pie slice is drawn
3464      *
3465      * @config radius
3466      * @type Number
3467      */
3468     radius: {
3469         value: 0
3470     }
3471 }, Y.VMLShape.ATTRS);
3472 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2640);
3473 Y.VMLPieSlice = VMLPieSlice;
3475  * <a href="http://www.w3.org/TR/NOTE-VML">VML</a> implementation of the <a href="Graphic.html">`Graphic`</a> class. 
3476  * `VMLGraphic` is not intended to be used directly. Instead, use the <a href="Graphic.html">`Graphic`</a> class. 
3477  * If the browser lacks <a href="http://www.w3.org/TR/SVG/">SVG</a> and <a href="http://www.w3.org/TR/html5/the-canvas-element.html">Canvas</a> 
3478  * capabilities, the <a href="Graphic.html">`Graphic`</a> class will point to the `VMLGraphic` class.
3480  * @module graphics
3481  * @class VMLGraphic
3482  * @constructor
3483  */
3484 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2651);
3485 VMLGraphic = function() {
3486     _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "VMLGraphic", 2651);
3487 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2652);
3488 VMLGraphic.superclass.constructor.apply(this, arguments);    
3491 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2655);
3492 VMLGraphic.NAME = "vmlGraphic";
3494 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2657);
3495 VMLGraphic.ATTRS = {
3496     /**
3497      * Whether or not to render the `Graphic` automatically after to a specified parent node after init. This can be a Node instance or a CSS selector string.
3498      * 
3499      * @config render
3500      * @type Node | String 
3501      */
3502     render: {},
3503         
3504     /**
3505          * Unique id for class instance.
3506          *
3507          * @config id
3508          * @type String
3509          */
3510         id: {
3511                 valueFn: function()
3512                 {
3513                         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "valueFn", 2673);
3514 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2675);
3515 return Y.guid();
3516                 },
3518                 setter: function(val)
3519                 {
3520                         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "setter", 2678);
3521 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2680);
3522 var node = this._node;
3523                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2681);
3524 if(node)
3525                         {
3526                                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2683);
3527 node.setAttribute("id", val);
3528                         }
3529                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2685);
3530 return val;
3531                 }
3532         },
3534     /**
3535      * Key value pairs in which a shape instance is associated with its id.
3536      *
3537      *  @config shapes
3538      *  @type Object
3539      *  @readOnly
3540      */
3541     shapes: {
3542         readOnly: true,
3544         getter: function()
3545         {
3546             _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "getter", 2699);
3547 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2701);
3548 return this._shapes;
3549         }
3550     },
3552     /**
3553      *  Object containing size and coordinate data for the content of a Graphic in relation to the coordSpace node.
3554      *
3555      *  @config contentBounds
3556      *  @type Object
3557      */
3558     contentBounds: {
3559         readOnly: true,
3561         getter: function()
3562         {
3563             _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "getter", 2714);
3564 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2716);
3565 return this._contentBounds;
3566         }
3567     },
3569     /**
3570      *  The html element that represents to coordinate system of the Graphic instance.
3571      *
3572      *  @config node
3573      *  @type HTMLElement
3574      */
3575     node: {
3576         readOnly: true,
3578         getter: function()
3579         {
3580             _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "getter", 2729);
3581 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2731);
3582 return this._node;
3583         }
3584     },
3586         /**
3587          * Indicates the width of the `Graphic`. 
3588          *
3589          * @config width
3590          * @type Number
3591          */
3592     width: {
3593         setter: function(val)
3594         {
3595             _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "setter", 2742);
3596 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2744);
3597 if(this._node)
3598             {
3599                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2746);
3600 this._node.style.width = val + "px";
3601             }
3602             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2748);
3603 return val;
3604         }
3605     },
3607         /**
3608          * Indicates the height of the `Graphic`. 
3609          *
3610          * @config height 
3611          * @type Number
3612          */
3613     height: {
3614         setter: function(val)
3615         {
3616             _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "setter", 2759);
3617 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2761);
3618 if(this._node)
3619             {
3620                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2763);
3621 this._node.style.height = val + "px";
3622             }
3623             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2765);
3624 return val;
3625         }
3626     },
3628     /**
3629      *  Determines the sizing of the Graphic. 
3630      *
3631      *  <dl>
3632      *      <dt>sizeContentToGraphic</dt><dd>The Graphic's width and height attributes are, either explicitly set through the <code>width</code> and <code>height</code>
3633      *      attributes or are determined by the dimensions of the parent element. The content contained in the Graphic will be sized to fit with in the Graphic instance's 
3634      *      dimensions. When using this setting, the <code>preserveAspectRatio</code> attribute will determine how the contents are sized.</dd>
3635      *      <dt>sizeGraphicToContent</dt><dd>(Also accepts a value of true) The Graphic's width and height are determined by the size and positioning of the content.</dd>
3636      *      <dt>false</dt><dd>The Graphic's width and height attributes are, either explicitly set through the <code>width</code> and <code>height</code>
3637      *      attributes or are determined by the dimensions of the parent element. The contents of the Graphic instance are not affected by this setting.</dd>
3638      *  </dl>
3639      *
3640      *
3641      *  @config autoSize
3642      *  @type Boolean | String
3643      *  @default false
3644      */
3645     autoSize: {
3646         value: false
3647     },
3649     /**
3650      * Determines how content is sized when <code>autoSize</code> is set to <code>sizeContentToGraphic</code>.
3651      *
3652      *  <dl>
3653      *      <dt>none<dt><dd>Do not force uniform scaling. Scale the graphic content of the given element non-uniformly if necessary 
3654      *      such that the element's bounding box exactly matches the viewport rectangle.</dd>
3655      *      <dt>xMinYMin</dt><dd>Force uniform scaling position along the top left of the Graphic's node.</dd>
3656      *      <dt>xMidYMin</dt><dd>Force uniform scaling horizontally centered and positioned at the top of the Graphic's node.<dd>
3657      *      <dt>xMaxYMin</dt><dd>Force uniform scaling positioned horizontally from the right and vertically from the top.</dd>
3658      *      <dt>xMinYMid</dt>Force uniform scaling positioned horizontally from the left and vertically centered.</dd>
3659      *      <dt>xMidYMid (the default)</dt><dd>Force uniform scaling with the content centered.</dd>
3660      *      <dt>xMaxYMid</dt><dd>Force uniform scaling positioned horizontally from the right and vertically centered.</dd>
3661      *      <dt>xMinYMax</dt><dd>Force uniform scaling positioned horizontally from the left and vertically from the bottom.</dd>
3662      *      <dt>xMidYMax</dt><dd>Force uniform scaling horizontally centered and position vertically from the bottom.</dd>
3663      *      <dt>xMaxYMax</dt><dd>Force uniform scaling positioned horizontally from the right and vertically from the bottom.</dd>
3664      *  </dl>
3665      * 
3666      * @config preserveAspectRatio
3667      * @type String
3668      * @default xMidYMid
3669      */
3670     preserveAspectRatio: {
3671         value: "xMidYMid"
3672     },
3674     /**
3675      * The contentBounds will resize to greater values but not values. (for performance)
3676      * When resizing the contentBounds down is desirable, set the resizeDown value to true.
3677      *
3678      * @config resizeDown 
3679      * @type Boolean
3680      */
3681     resizeDown: {
3682         resizeDown: false
3683     },
3685         /**
3686          * Indicates the x-coordinate for the instance.
3687          *
3688          * @config x
3689          * @type Number
3690          */
3691     x: {
3692         getter: function()
3693         {
3694             _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "getter", 2833);
3695 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2835);
3696 return this._x;
3697         },
3699         setter: function(val)
3700         {
3701             _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "setter", 2838);
3702 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2840);
3703 this._x = val;
3704             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2841);
3705 if(this._node)
3706             {
3707                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2843);
3708 this._node.style.left = val + "px";
3709             }
3710             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2845);
3711 return val;
3712         }
3713     },
3715         /**
3716          * Indicates the y-coordinate for the instance.
3717          *
3718          * @config y
3719          * @type Number
3720          */
3721     y: {
3722         getter: function()
3723         {
3724             _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "getter", 2856);
3725 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2858);
3726 return this._y;
3727         },
3729         setter: function(val)
3730         {
3731             _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "setter", 2861);
3732 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2863);
3733 this._y = val;
3734             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2864);
3735 if(this._node)
3736             {
3737                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2866);
3738 this._node.style.top = val + "px";
3739             }
3740             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2868);
3741 return val;
3742         }
3743     },
3745     /**
3746      * Indicates whether or not the instance will automatically redraw after a change is made to a shape.
3747      * This property will get set to false when batching operations.
3748      *
3749      * @config autoDraw
3750      * @type Boolean
3751      * @default true
3752      * @private
3753      */
3754     autoDraw: {
3755         value: true
3756     },
3758     visible: {
3759         value: true,
3761         setter: function(val)
3762         {
3763             _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "setter", 2888);
3764 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2890);
3765 this._toggleVisible(val);
3766             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2891);
3767 return val;
3768         }
3769     }
3772 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2896);
3773 Y.extend(VMLGraphic, Y.GraphicBase, {
3774     /**
3775      * Sets the value of an attribute.
3776      *
3777      * @method set
3778      * @param {String|Object} name The name of the attribute. Alternatively, an object of key value pairs can 
3779      * be passed in to set multiple attributes at once.
3780      * @param {Any} value The value to set the attribute to. This value is ignored if an object is received as 
3781      * the name param.
3782      */
3783         set: function(attr, value) 
3784         {
3785                 _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "set", 2906);
3786 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2908);
3787 var host = this,
3788             redrawAttrs = {
3789                 autoDraw: true,
3790                 autoSize: true,
3791                 preserveAspectRatio: true,
3792                 resizeDown: true
3793             },
3794             key,
3795             forceRedraw = false;
3796                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2917);
3797 AttributeLite.prototype.set.apply(host, arguments);     
3798         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2918);
3799 if(host._state.autoDraw === true && Y.Object.size(this._shapes) > 0)
3800         {
3801             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2920);
3802 if(Y_LANG.isString && redrawAttrs[attr])
3803             {
3804                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2922);
3805 forceRedraw = true;
3806             }
3807             else {_yuitest_coverline("build/graphics-vml/graphics-vml.js", 2924);
3808 if(Y_LANG.isObject(attr))
3809             {
3810                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2926);
3811 for(key in redrawAttrs)
3812                 {
3813                     _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2928);
3814 if(redrawAttrs.hasOwnProperty(key) && attr[key])
3815                     {
3816                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2930);
3817 forceRedraw = true;
3818                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2931);
3819 break;
3820                     }
3821                 }
3822             }}
3823         }
3824         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2936);
3825 if(forceRedraw)
3826         {
3827             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2938);
3828 host._redraw();
3829         }
3830         },
3832     /**
3833      * Storage for `x` attribute.
3834      *
3835      * @property _x
3836      * @type Number
3837      * @private
3838      */
3839     _x: 0,
3841     /**
3842      * Storage for `y` attribute.
3843      *
3844      * @property _y
3845      * @type Number
3846      * @private
3847      */
3848     _y: 0,
3850     /**
3851      * Gets the current position of the graphic instance in page coordinates.
3852      *
3853      * @method getXY
3854      * @return Array The XY position of the shape.
3855      */
3856     getXY: function()
3857     {
3858         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "getXY", 2966);
3859 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2968);
3860 var node = this.parentNode,
3861             x = this.get("x"),
3862             y = this.get("y"),
3863             xy;
3864         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2972);
3865 if(node)
3866         {
3867             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2974);
3868 xy = Y.one(node).getXY();
3869             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2975);
3870 xy[0] += x;
3871             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2976);
3872 xy[1] += y;
3873         }
3874         else
3875         {
3876             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2980);
3877 xy = Y.DOM._getOffset(this._node);
3878         }
3879         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2982);
3880 return xy;
3881     },
3883     /**
3884      * Initializes the class.
3885      *
3886      * @method initializer
3887      * @private
3888      */
3889     initializer: function(config) {
3890         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "initializer", 2991);
3891 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2992);
3892 var render = this.get("render"),
3893             visibility = this.get("visible") ? "visible" : "hidden";
3894         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2994);
3895 this._shapes = {};
3896                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 2995);
3897 this._contentBounds = {
3898             left: 0,
3899             top: 0,
3900             right: 0,
3901             bottom: 0
3902         };
3903         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3001);
3904 this._node = this._createGraphic();
3905         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3002);
3906 this._node.style.left = this.get("x") + "px";
3907         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3003);
3908 this._node.style.top = this.get("y") + "px";
3909         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3004);
3910 this._node.style.visibility = visibility;
3911         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3005);
3912 this._node.setAttribute("id", this.get("id"));
3913         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3006);
3914 if(render)
3915         {
3916             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3008);
3917 this.render(render);
3918         }
3919     },
3920     
3921     /**
3922      * Adds the graphics node to the dom.
3923      * 
3924      * @method render
3925      * @param {HTMLElement} parentNode node in which to render the graphics node into.
3926      */
3927     render: function(render) {
3928         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "render", 3018);
3929 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3019);
3930 var parentNode = Y.one(render),
3931             w = this.get("width") || parseInt(parentNode.getComputedStyle("width"), 10),
3932             h = this.get("height") || parseInt(parentNode.getComputedStyle("height"), 10);
3933         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3022);
3934 parentNode = parentNode || DOCUMENT.body;
3935         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3023);
3936 parentNode.appendChild(this._node);
3937         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3024);
3938 this.parentNode = parentNode;
3939         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3025);
3940 this.set("width", w);
3941         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3026);
3942 this.set("height", h);
3943         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3027);
3944 return this;
3945     },
3947     /**
3948      * Removes all nodes.
3949      *
3950      * @method destroy
3951      */
3952     destroy: function()
3953     {
3954         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "destroy", 3035);
3955 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3037);
3956 this.clear();
3957         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3038);
3958 Y.one(this._node).remove(true);
3959     },
3961     /**
3962      * Generates a shape instance by type.
3963      *
3964      * @method addShape
3965      * @param {Object} cfg attributes for the shape
3966      * @return Shape
3967      */
3968     addShape: function(cfg)
3969     {
3970         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "addShape", 3048);
3971 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3050);
3972 cfg.graphic = this;
3973         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3051);
3974 if(!this.get("visible"))
3975         {
3976             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3053);
3977 cfg.visible = false;
3978         }
3979         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3055);
3980 var shapeClass = this._getShapeClass(cfg.type),
3981             shape = new shapeClass(cfg);
3982         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3057);
3983 this._appendShape(shape);
3984         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3058);
3985 shape._appendStrokeAndFill();
3986         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3059);
3987 return shape;
3988     },
3990     /**
3991      * Adds a shape instance to the graphic instance.
3992      *
3993      * @method _appendShape
3994      * @param {Shape} shape The shape instance to be added to the graphic.
3995      * @private
3996      */
3997     _appendShape: function(shape)
3998     {
3999         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "_appendShape", 3069);
4000 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3071);
4001 var node = shape.node,
4002             parentNode = this._frag || this._node;
4003         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3073);
4004 if(this.get("autoDraw") || this.get("autoSize") == "sizeContentToGraphic") 
4005         {
4006             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3075);
4007 parentNode.appendChild(node);
4008         }
4009         else
4010         {
4011             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3079);
4012 this._getDocFrag().appendChild(node);
4013         }
4014     },
4016     /**
4017      * Removes a shape instance from from the graphic instance.
4018      *
4019      * @method removeShape
4020      * @param {Shape|String} shape The instance or id of the shape to be removed.
4021      */
4022     removeShape: function(shape)
4023     {
4024         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "removeShape", 3089);
4025 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3091);
4026 if(!(shape instanceof VMLShape))
4027         {
4028             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3093);
4029 if(Y_LANG.isString(shape))
4030             {
4031                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3095);
4032 shape = this._shapes[shape];
4033             }
4034         }
4035         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3098);
4036 if(shape && (shape instanceof VMLShape))
4037         {
4038             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3100);
4039 shape._destroy();
4040             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3101);
4041 this._shapes[shape.get("id")] = null;
4042             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3102);
4043 delete this._shapes[shape.get("id")];
4044         }
4045         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3104);
4046 if(this.get("autoDraw"))
4047         {
4048             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3106);
4049 this._redraw();
4050         }
4051     },
4053     /**
4054      * Removes all shape instances from the dom.
4055      *
4056      * @method removeAllShapes
4057      */
4058     removeAllShapes: function()
4059     {
4060         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "removeAllShapes", 3115);
4061 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3117);
4062 var shapes = this._shapes,
4063             i;
4064         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3119);
4065 for(i in shapes)
4066         {
4067             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3121);
4068 if(shapes.hasOwnProperty(i))
4069             {
4070                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3123);
4071 shapes[i].destroy();
4072             }
4073         }
4074         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3126);
4075 this._shapes = {};
4076     },
4078     /**
4079      * Removes all child nodes.
4080      *
4081      * @method _removeChildren
4082      * @param node
4083      * @private
4084      */
4085     _removeChildren: function(node)
4086     {
4087         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "_removeChildren", 3136);
4088 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3138);
4089 if(node.hasChildNodes())
4090         {
4091             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3140);
4092 var child;
4093             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3141);
4094 while(node.firstChild)
4095             {
4096                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3143);
4097 child = node.firstChild;
4098                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3144);
4099 this._removeChildren(child);
4100                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3145);
4101 node.removeChild(child);
4102             }
4103         }
4104     },
4106     /**
4107      * Clears the graphics object.
4108      *
4109      * @method clear
4110      */
4111     clear: function() {
4112         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "clear", 3155);
4113 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3156);
4114 this.removeAllShapes();
4115         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3157);
4116 this._removeChildren(this._node);
4117     },
4119     /**
4120      * Toggles visibility
4121      *
4122      * @method _toggleVisible
4123      * @param {Boolean} val indicates visibilitye
4124      * @private
4125      */
4126     _toggleVisible: function(val)
4127     {
4128         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "_toggleVisible", 3167);
4129 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3169);
4130 var i,
4131             shapes = this._shapes,
4132             visibility = val ? "visible" : "hidden";
4133         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3172);
4134 if(shapes)
4135         {
4136             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3174);
4137 for(i in shapes)
4138             {
4139                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3176);
4140 if(shapes.hasOwnProperty(i))
4141                 {
4142                     _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3178);
4143 shapes[i].set("visible", val);
4144                 }
4145             }
4146         }
4147         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3182);
4148 if(this._node)
4149         {
4150             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3184);
4151 this._node.style.visibility = visibility;
4152         }
4153         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3186);
4154 if(this._node)
4155         {
4156             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3188);
4157 this._node.style.visibility = visibility;
4158         }
4159     },
4161     /**
4162      * Sets the size of the graphics object.
4163      * 
4164      * @method setSize
4165      * @param w {Number} width to set for the instance.
4166      * @param h {Number} height to set for the instance.
4167      */
4168     setSize: function(w, h) {
4169         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "setSize", 3199);
4170 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3200);
4171 w = Math.round(w);
4172         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3201);
4173 h = Math.round(h);
4174         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3202);
4175 this._node.style.width = w + 'px';
4176         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3203);
4177 this._node.style.height = h + 'px';
4178     },
4180     /**
4181      * Sets the positon of the graphics object.
4182      *
4183      * @method setPosition
4184      * @param {Number} x x-coordinate for the object.
4185      * @param {Number} y y-coordinate for the object.
4186      */
4187     setPosition: function(x, y)
4188     {
4189         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "setPosition", 3213);
4190 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3215);
4191 x = Math.round(x);
4192         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3216);
4193 y = Math.round(y);
4194         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3217);
4195 this._node.style.left = x + "px";
4196         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3218);
4197 this._node.style.top = y + "px";
4198     },
4200     /**
4201      * Creates a group element
4202      *
4203      * @method _createGraphic
4204      * @private
4205      */
4206     _createGraphic: function() {
4207         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "_createGraphic", 3227);
4208 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3228);
4209 var group = DOCUMENT.createElement('<group xmlns="urn:schemas-microsft.com:vml" style="behavior:url(#default#VML);padding:0px 0px 0px 0px;display:block;position:absolute;top:0px;left:0px;zoom:1;" />');
4210         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3229);
4211 return group;
4212     },
4214     /**
4215      * Creates a graphic node
4216      *
4217      * @method _createGraphicNode
4218      * @param {String} type node type to create
4219      * @param {String} pe specified pointer-events value
4220      * @return HTMLElement
4221      * @private
4222      */
4223     _createGraphicNode: function(type)
4224     {
4225         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "_createGraphicNode", 3241);
4226 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3243);
4227 return DOCUMENT.createElement('<' + type + ' xmlns="urn:schemas-microsft.com:vml" style="behavior:url(#default#VML);display:inline-block;zoom:1;" />');
4228     
4229     },
4231     /**
4232      * Returns a shape based on the id of its dom node.
4233      *
4234      * @method getShapeById
4235      * @param {String} id Dom id of the shape's node attribute.
4236      * @return Shape
4237      */
4238     getShapeById: function(id)
4239     {
4240         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "getShapeById", 3254);
4241 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3256);
4242 return this._shapes[id];
4243     },
4245     /**
4246      * Returns a shape class. Used by `addShape`. 
4247      *
4248      * @method _getShapeClass
4249      * @param {Shape | String} val Indicates which shape class. 
4250      * @return Function 
4251      * @private
4252      */
4253     _getShapeClass: function(val)
4254     {
4255         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "_getShapeClass", 3267);
4256 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3269);
4257 var shape = this._shapeClass[val];
4258         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3270);
4259 if(shape)
4260         {
4261             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3272);
4262 return shape;
4263         }
4264         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3274);
4265 return val;
4266     },
4268     /**
4269      * Look up for shape classes. Used by `addShape` to retrieve a class for instantiation.
4270      *
4271      * @property _shapeClass
4272      * @type Object
4273      * @private
4274      */
4275     _shapeClass: {
4276         circle: Y.VMLCircle,
4277         rect: Y.VMLRect,
4278         path: Y.VMLPath,
4279         ellipse: Y.VMLEllipse,
4280         pieslice: Y.VMLPieSlice
4281     },
4283         /**
4284          * Allows for creating multiple shapes in order to batch appending and redraw operations.
4285          *
4286          * @method batch
4287          * @param {Function} method Method to execute.
4288          */
4289     batch: function(method)
4290     {
4291         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "batch", 3298);
4292 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3300);
4293 var autoDraw = this.get("autoDraw");
4294         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3301);
4295 this.set("autoDraw", false);
4296         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3302);
4297 method.apply();
4298         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3303);
4299 this.set("autoDraw", autoDraw);
4300     },
4301     
4302     /**
4303      * Returns a document fragment to for attaching shapes.
4304      *
4305      * @method _getDocFrag
4306      * @return DocumentFragment
4307      * @private
4308      */
4309     _getDocFrag: function()
4310     {
4311         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "_getDocFrag", 3313);
4312 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3315);
4313 if(!this._frag)
4314         {
4315             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3317);
4316 this._frag = DOCUMENT.createDocumentFragment();
4317         }
4318         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3319);
4319 return this._frag;
4320     },
4322     /**
4323      * Adds a shape to the redraw queue and calculates the contentBounds. 
4324      *
4325      * @method addToRedrawQueue
4326      * @param shape {VMLShape}
4327      * @protected
4328      */
4329     addToRedrawQueue: function(shape)
4330     {
4331         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "addToRedrawQueue", 3329);
4332 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3331);
4333 var shapeBox,
4334             box;
4335         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3333);
4336 this._shapes[shape.get("id")] = shape;
4337         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3334);
4338 if(!this.get("resizeDown"))
4339         {
4340             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3336);
4341 shapeBox = shape.getBounds();
4342             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3337);
4343 box = this._contentBounds;
4344             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3338);
4345 box.left = box.left < shapeBox.left ? box.left : shapeBox.left;
4346             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3339);
4347 box.top = box.top < shapeBox.top ? box.top : shapeBox.top;
4348             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3340);
4349 box.right = box.right > shapeBox.right ? box.right : shapeBox.right;
4350             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3341);
4351 box.bottom = box.bottom > shapeBox.bottom ? box.bottom : shapeBox.bottom;
4352             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3342);
4353 box.width = box.right - box.left;
4354             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3343);
4355 box.height = box.bottom - box.top;
4356             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3344);
4357 this._contentBounds = box;
4358         }
4359         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3346);
4360 if(this.get("autoDraw")) 
4361         {
4362             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3348);
4363 this._redraw();
4364         }
4365     },
4367     /**
4368      * Redraws all shapes.
4369      *
4370      * @method _redraw
4371      * @private
4372      */
4373     _redraw: function()
4374     {
4375         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "_redraw", 3358);
4376 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3360);
4377 var autoSize = this.get("autoSize"),
4378             preserveAspectRatio,
4379             node = this.parentNode,
4380             nodeWidth = parseFloat(node.getComputedStyle("width")),
4381             nodeHeight = parseFloat(node.getComputedStyle("height")),
4382             xCoordOrigin = 0,
4383             yCoordOrigin = 0,
4384             box = this.get("resizeDown") ? this._getUpdatedContentBounds() : this._contentBounds,
4385             left = box.left,
4386             right = box.right,
4387             top = box.top,
4388             bottom = box.bottom,
4389             contentWidth = right - left,
4390             contentHeight = bottom - top,
4391             aspectRatio,
4392             xCoordSize,
4393             yCoordSize,
4394             scaledWidth,
4395             scaledHeight,
4396             visible = this.get("visible");
4397         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3380);
4398 this._node.style.visibility = "hidden";
4399         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3381);
4400 if(autoSize)
4401         {
4402             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3383);
4403 if(autoSize == "sizeContentToGraphic")
4404             {
4405                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3385);
4406 preserveAspectRatio = this.get("preserveAspectRatio");
4407                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3386);
4408 if(preserveAspectRatio == "none" || contentWidth/contentHeight === nodeWidth/nodeHeight)
4409                 {
4410                     _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3388);
4411 xCoordOrigin = left;
4412                     _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3389);
4413 yCoordOrigin = top;
4414                     _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3390);
4415 xCoordSize = contentWidth;
4416                     _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3391);
4417 yCoordSize = contentHeight;
4418                 }
4419                 else 
4420                 {
4421                     _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3395);
4422 if(contentWidth * nodeHeight/contentHeight > nodeWidth)
4423                     {
4424                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3397);
4425 aspectRatio = nodeHeight/nodeWidth;
4426                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3398);
4427 xCoordSize = contentWidth;
4428                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3399);
4429 yCoordSize = contentWidth * aspectRatio;
4430                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3400);
4431 scaledHeight = (nodeWidth * (contentHeight/contentWidth)) * (yCoordSize/nodeHeight);
4432                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3401);
4433 yCoordOrigin = this._calculateCoordOrigin(preserveAspectRatio.slice(5).toLowerCase(), scaledHeight, yCoordSize);
4434                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3402);
4435 yCoordOrigin = top + yCoordOrigin;
4436                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3403);
4437 xCoordOrigin = left;
4438                     }
4439                     else
4440                     {
4441                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3407);
4442 aspectRatio = nodeWidth/nodeHeight;
4443                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3408);
4444 xCoordSize = contentHeight * aspectRatio;
4445                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3409);
4446 yCoordSize = contentHeight;
4447                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3410);
4448 scaledWidth = (nodeHeight * (contentWidth/contentHeight)) * (xCoordSize/nodeWidth);
4449                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3411);
4450 xCoordOrigin = this._calculateCoordOrigin(preserveAspectRatio.slice(1, 4).toLowerCase(), scaledWidth, xCoordSize);
4451                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3412);
4452 xCoordOrigin = xCoordOrigin + left;
4453                         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3413);
4454 yCoordOrigin = top;
4455                     }
4456                 }
4457                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3416);
4458 this._node.style.width = nodeWidth + "px";
4459                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3417);
4460 this._node.style.height = nodeHeight + "px";
4461                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3418);
4462 this._node.coordOrigin = xCoordOrigin + ", " + yCoordOrigin;
4463             }
4464             else 
4465             {
4466                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3422);
4467 xCoordSize = contentWidth;
4468                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3423);
4469 yCoordSize = contentHeight;
4470                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3424);
4471 this._node.style.width = contentWidth + "px";
4472                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3425);
4473 this._node.style.height = contentHeight + "px";
4474                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3426);
4475 this._state.width = contentWidth;
4476                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3427);
4477 this._state.height =  contentHeight;
4479             }
4480             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3430);
4481 this._node.coordSize = xCoordSize + ", " + yCoordSize;
4482         }
4483         else
4484         {
4485             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3434);
4486 this._node.style.width = nodeWidth + "px";
4487             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3435);
4488 this._node.style.height = nodeHeight + "px";
4489             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3436);
4490 this._node.coordSize = nodeWidth + ", " + nodeHeight;
4491         }
4492         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3438);
4493 if(this._frag)
4494         {
4495             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3440);
4496 this._node.appendChild(this._frag);
4497             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3441);
4498 this._frag = null;
4499         }
4500         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3443);
4501 if(visible)
4502         {
4503             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3445);
4504 this._node.style.visibility = "visible";
4505         }
4506     },
4507     
4508     /**
4509      * Determines the value for either an x or y coordinate to be used for the <code>coordOrigin</code> of the Graphic.
4510      *
4511      * @method _calculateCoordOrigin
4512      * @param {String} position The position for placement. Possible values are min, mid and max.
4513      * @param {Number} size The total scaled size of the content.
4514      * @param {Number} coordsSize The coordsSize for the Graphic.
4515      * @return Number
4516      * @private
4517      */
4518     _calculateCoordOrigin: function(position, size, coordsSize)
4519     {
4520         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "_calculateCoordOrigin", 3459);
4521 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3461);
4522 var coord;
4523         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3462);
4524 switch(position)
4525         {
4526             case "min" :
4527                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3465);
4528 coord = 0;
4529             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3466);
4530 break;
4531             case "mid" :
4532                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3468);
4533 coord = (size - coordsSize)/2;
4534             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3469);
4535 break;
4536             case "max" :
4537                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3471);
4538 coord = (size - coordsSize);
4539             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3472);
4540 break;
4541         }
4542         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3474);
4543 return coord;
4544     },
4546     /**
4547      * Recalculates and returns the `contentBounds` for the `Graphic` instance.
4548      *
4549      * @method _getUpdatedContentBounds
4550      * @return {Object} 
4551      * @private
4552      */
4553     _getUpdatedContentBounds: function()
4554     {
4555         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "_getUpdatedContentBounds", 3484);
4556 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3486);
4557 var bounds,
4558             i,
4559             shape,
4560             queue = this._shapes,
4561             box = {};
4562         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3491);
4563 for(i in queue)
4564         {
4565             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3493);
4566 if(queue.hasOwnProperty(i))
4567             {
4568                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3495);
4569 shape = queue[i];
4570                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3496);
4571 bounds = shape.getBounds();
4572                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3497);
4573 box.left = Y_LANG.isNumber(box.left) ? Math.min(box.left, bounds.left) : bounds.left;
4574                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3498);
4575 box.top = Y_LANG.isNumber(box.top) ? Math.min(box.top, bounds.top) : bounds.top;
4576                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3499);
4577 box.right = Y_LANG.isNumber(box.right) ? Math.max(box.right, bounds.right) : bounds.right;
4578                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3500);
4579 box.bottom = Y_LANG.isNumber(box.bottom) ? Math.max(box.bottom, bounds.bottom) : bounds.bottom;
4580             }
4581         }
4582         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3503);
4583 box.left = Y_LANG.isNumber(box.left) ? box.left : 0;
4584         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3504);
4585 box.top = Y_LANG.isNumber(box.top) ? box.top : 0;
4586         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3505);
4587 box.right = Y_LANG.isNumber(box.right) ? box.right : 0;
4588         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3506);
4589 box.bottom = Y_LANG.isNumber(box.bottom) ? box.bottom : 0;
4590         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3507);
4591 this._contentBounds = box;
4592         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3508);
4593 return box;
4594     },
4596     /**
4597      * Inserts shape on the top of the tree.
4598      *
4599      * @method _toFront
4600      * @param {VMLShape} Shape to add.
4601      * @private
4602      */
4603     _toFront: function(shape)
4604     {
4605         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "_toFront", 3518);
4606 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3520);
4607 var contentNode = this._node;
4608         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3521);
4609 if(shape instanceof Y.VMLShape)
4610         {
4611             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3523);
4612 shape = shape.get("node");
4613         }
4614         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3525);
4615 if(contentNode && shape)
4616         {
4617             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3527);
4618 contentNode.appendChild(shape);
4619         }
4620     },
4622     /**
4623      * Inserts shape as the first child of the content node.
4624      *
4625      * @method _toBack
4626      * @param {VMLShape} Shape to add.
4627      * @private
4628      */
4629     _toBack: function(shape)
4630     {
4631         _yuitest_coverfunc("build/graphics-vml/graphics-vml.js", "_toBack", 3538);
4632 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3540);
4633 var contentNode = this._node,
4634             targetNode;
4635         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3542);
4636 if(shape instanceof Y.VMLShape)
4637         {
4638             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3544);
4639 shape = shape.get("node");
4640         }
4641         _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3546);
4642 if(contentNode && shape)
4643         {
4644             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3548);
4645 targetNode = contentNode.firstChild;
4646             _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3549);
4647 if(targetNode)
4648             {
4649                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3551);
4650 contentNode.insertBefore(shape, targetNode);
4651             }
4652             else
4653             {
4654                 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3555);
4655 contentNode.appendChild(shape);
4656             }
4657         }
4658     }
4660 _yuitest_coverline("build/graphics-vml/graphics-vml.js", 3560);
4661 Y.VMLGraphic = VMLGraphic;
4665 }, '3.7.2', {"requires": ["graphics"]});