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