#

API Docs for: 3.10.3
Show: Inherited Protected Private Deprecated

# File: charts/js/Renderer.js

    /**
     * The Charts widget provides an api for displaying data
     * graphically.
     *
     * @module charts
     * @main charts
     */

    /**
     * Provides functionality for the handling of axis data in a chart.
     *
     * @module charts
     * @submodule axis-base
     */
    var Y_Lang = Y.Lang;

    /**
     * The Renderer class is a base class for chart components that use the `styles`
     * attribute.
     *
     * @module charts
     * @class Renderer
     * @constructor
     */
    function Renderer(){}

    Renderer.ATTRS = {
            /**
             * Style properties for class
             *
             * @attribute styles
             * @type Object
             */
            styles:
            {
                getter: function()
                {
                    this._styles = this._styles || this._getDefaultStyles();
                    return this._styles;
                },

                setter: function(val)
                {
                    this._styles = this._setStyles(val);
                }
            },

            /**
             * The graphic in which drawings will be rendered.
             *
             * @attribute graphic
             * @type Graphic
             */
            graphic: {}
    };
    Renderer.NAME = "renderer";

    Renderer.prototype = {
        /**
         * Storage for `styles` attribute.
         *
         * @property _styles
         * @type Object
         * @private
         */
    	_styles: null,

        /**
         * Method used by `styles` setter.
         *
         * @method _setStyles
         * @param {Object} newStyles Hash of properties to update.
         * @return Object
         * @protected
         */
    	_setStyles: function(newstyles)
    	{
    		var styles = this.get("styles");
            return this._mergeStyles(newstyles, styles);
    	},

        /**
         * Merges to object literals so that only specified properties are
         * overwritten.
         *
         * @method _mergeStyles
         * @param {Object} a Hash of new styles
         * @param {Object} b Hash of original styles
         * @return Object
         * @protected
         */
        _mergeStyles: function(a, b)
        {
            if(!b)
            {
                b = {};
            }
            var newstyles = Y.merge(b, {});
            Y.Object.each(a, function(value, key)
            {
                if(b.hasOwnProperty(key) && Y_Lang.isObject(value) && !Y_Lang.isFunction(value) && !Y_Lang.isArray(value))
                {
                    newstyles[key] = this._mergeStyles(value, b[key]);
                }
                else
                {
                    newstyles[key] = value;
                }
            }, this);
            return newstyles;
        },

        /**
         * Gets the default value for the `styles` attribute.
         *
         * @method _getDefaultStyles
         * @return Object
         * @protected
         */
        _getDefaultStyles: function()
        {
            return {padding:{
                top:0,
                right: 0,
                bottom: 0,
                left: 0
            }};
        }
    };

    Y.augment(Renderer, Y.Attribute);
    Y.Renderer = Renderer;