#

API Docs for: 3.10.3
Show: Inherited Protected Private Deprecated

# File: node/js/shim-plugin.js

        /**
         * Provides shimming support for Node via a Plugin.
         * This fixes SELECT bleedthrough for IE6 & Mac scrollbars
         * @module shim-plugin
         */

        /**
         * Node plugin which can be used to add shim support.
         *
         * @class Plugin.Shim
         * @param {Object} User configuration object
         */
        function Shim(config) {
            this.init(config);
        }

        /**
         * Default class used to mark the shim element
         *
         * @property CLASS_NAME
         * @type String
         * @static
         * @default "yui-node-shim"
         */
        // TODO: use ClassNameManager
        Shim.CLASS_NAME = 'yui-node-shim';

        /**
         * Default markup template used to generate the shim element.
         *
         * @property TEMPLATE
         * @type String
         * @static
         */
        Shim.TEMPLATE = '<iframe class="' + Shim.CLASS_NAME +
                '" frameborder="0" title="Node Stacking Shim"' +
                'src="javascript:false" tabindex="-1" role="presentation"' +
                'style="position:absolute; z-index:-1;"></iframe>';

        Shim.prototype = {
            init: function(config) {
                this._host = config.host;
                this.initEvents();
                this.insert();
                this.sync();
            },

            initEvents: function() {
                this._resizeHandle = this._host.on('resize', this.sync, this);
            },

            getShim: function() {
                return this._shim || (
                    this._shim = Y.Node.create(
                        Shim.TEMPLATE,
                        this._host.get('ownerDocument')
                    )
                );
            },

            insert: function() {
                var node = this._host;
                this._shim = node.insertBefore( this.getShim(),
                        node.get('firstChild'));
            },

            /**
             * Updates the size of the shim to fill its container
             * @method sync
             */
            sync: function() {
                var shim = this._shim,
                    node = this._host;

                if (shim) {
                    shim.setAttrs({
                        width: node.getStyle('width'),
                        height: node.getStyle('height')
                    });
                }
            },

            /**
             * Removes the shim and destroys the plugin
             * @method destroy
             */
            destroy: function() {
                var shim = this._shim;
                if (shim) {
                    shim.remove(true);
                }

                this._resizeHandle.detach();
            }
        };

        Shim.NAME = 'Shim';
        Shim.NS = 'shim';

        Y.namespace('Plugin');
        Y.Plugin.Shim = Shim;