; (function($) { // @todo Document this. $.extend($, {placeholder: { browser_supported: function() { return this._supported !== undefined ? this._supported : (this._supported = !!('placeholder' in $('')[0])); }, shim: function(opts) { var config = { color: '#888', cls: 'placeholder', selector: 'input[placeholder], textarea[placeholder]' }; $.extend(config, opts); return !this.browser_supported() && $(config.selector)._placeholder_shim(config); } }}); $.extend($.fn, { _placeholder_shim: function(config) { function calcPositionCss(target) { var op = $(target).offsetParent().offset(); var ot = $(target).offset(); return { top: ot.top - op.top, left: ot.left - op.left, width: $(target).width() }; } function adjustToResizing(label) { var $target = label.data('target'); if (typeof $target !== "undefined") { label.css(calcPositionCss($target)); $(window).one("resize", function() { adjustToResizing(label); }); } } return this.each(function() { var $this = $(this); if ($this.is(':visible')) { if ($this.data('placeholder')) { var $ol = $this.data('placeholder'); $ol.css(calcPositionCss($this)); return true; } var possible_line_height = {}; if (!$this.is('textarea') && $this.css('height') != 'auto') { possible_line_height = {lineHeight: $this.css('height'), whiteSpace: 'nowrap'}; } var ol = $('') .text($this.attr('placeholder')) .addClass(config.cls) .css($.extend({ position: 'absolute', display: 'inline', float: 'none', overflow: 'hidden', textAlign: 'left', color: config.color, cursor: 'text', paddingTop: $this.css('padding-top'), paddingRight: $this.css('padding-right'), paddingBottom: $this.css('padding-bottom'), paddingLeft: $this.css('padding-left'), fontSize: $this.css('font-size'), fontFamily: $this.css('font-family'), fontStyle: $this.css('font-style'), fontWeight: $this.css('font-weight'), textTransform: $this.css('text-transform'), backgroundColor: 'transparent', zIndex: 99 }, possible_line_height)) .css(calcPositionCss(this)) .attr('for', this.id) .data('target', $this) .click(function() { $(this).data('target').focus(); }) .insertBefore(this); $this .data('placeholder', ol) .focus(function() { ol.hide(); }).blur(function() { ol[$this.val().length ? 'hide' : 'show'](); }).triggerHandler('blur'); $(window).one("resize", function() { adjustToResizing(ol); }); } }); } }); })(jQuery); jQuery(document).add(window).bind('ready load', function() { if (jQuery.placeholder) { jQuery.placeholder.shim(); } });