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;
-