; (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 = $('