/* Copyright (c) 2010, Yahoo! Inc. All rights reserved. Code licensed under the BSD License: http://developer.yahoo.com/yui/license.html version: 3.3.0 build: 3167 */ YUI.add('shim-plugin', function(Y) { /** * 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 Shim.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 Shim.TEMPLATE * @type String * @static */ Shim.TEMPLATE = ''; 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; }, '3.3.0' ,{requires:['node-style', 'node-pluginhost']});