| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 | /*! http://mths.be/placeholder v2.0.9 by @mathias */(function(factory) {	if (typeof define === 'function' && define.amd) {		// AMD		define(['jquery'], factory);	} else {		// Browser globals		factory(jQuery);	}}(function($) {	// Opera Mini v7 doesn’t support placeholder although its DOM seems to indicate so	var isOperaMini = Object.prototype.toString.call(window.operamini) == '[object OperaMini]';	var isInputSupported = 'placeholder' in document.createElement('input') && !isOperaMini;	var isTextareaSupported = 'placeholder' in document.createElement('textarea') && !isOperaMini;	var valHooks = $.valHooks;	var propHooks = $.propHooks;	var hooks;	var placeholder;	if (isInputSupported && isTextareaSupported) {		placeholder = $.fn.placeholder = function() {			return this;		};		placeholder.input = placeholder.textarea = true;	} else {		placeholder = $.fn.placeholder = function() {			var $this = this;			$this				.filter((isInputSupported ? 'textarea' : ':input') + '[placeholder]')				.not('.placeholder')				.bind({					'focus.placeholder': clearPlaceholder,					'blur.placeholder': setPlaceholder				})				.data('placeholder-enabled', true)				.trigger('blur.placeholder');			return $this;		};		placeholder.input = isInputSupported;		placeholder.textarea = isTextareaSupported;		hooks = {			'get': function(element) {				var $element = $(element);				var $passwordInput = $element.data('placeholder-password');				if ($passwordInput) {					return $passwordInput[0].value;				}				return $element.data('placeholder-enabled') && $element.hasClass('placeholder') ? '' : element.value;			},			'set': function(element, value) {				var $element = $(element);				var $passwordInput = $element.data('placeholder-password');				if ($passwordInput) {					return $passwordInput[0].value = value;				}				if (!$element.data('placeholder-enabled')) {					return element.value = value;				}				if (value === '') {					element.value = value;					// Issue #56: Setting the placeholder causes problems if the element continues to have focus.					if (element != safeActiveElement()) {						// We can't use `triggerHandler` here because of dummy text/password inputs :(						setPlaceholder.call(element);					}				} else if ($element.hasClass('placeholder')) {					clearPlaceholder.call(element, true, value) || (element.value = value);				} else {					element.value = value;				}				// `set` can not return `undefined`; see http://jsapi.info/jquery/1.7.1/val#L2363				return $element;			}		};		if (!isInputSupported) {			valHooks.input = hooks;			propHooks.value = hooks;		}		if (!isTextareaSupported) {			valHooks.textarea = hooks;			propHooks.value = hooks;		}		$(function() {			// Look for forms			$(document).delegate('form', 'submit.placeholder', function() {				// Clear the placeholder values so they don't get submitted				var $inputs = $('.placeholder', this).each(clearPlaceholder);				setTimeout(function() {					$inputs.each(setPlaceholder);				}, 10);			});		});		// Clear placeholder values upon page reload		$(window).bind('beforeunload.placeholder', function() {			$('.placeholder').each(function() {				this.value = '';			});		});	}	function args(elem) {		// Return an object of element attributes		var newAttrs = {};		var rinlinejQuery = /^jQuery\d+$/;		$.each(elem.attributes, function(i, attr) {			if (attr.specified && !rinlinejQuery.test(attr.name)) {				newAttrs[attr.name] = attr.value;			}		});		return newAttrs;	}	function clearPlaceholder(event, value) {		var input = this;		var $input = $(input);		if (input.value == $input.attr('placeholder') && $input.hasClass('placeholder')) {			if ($input.data('placeholder-password')) {				$input = $input.hide().nextAll('input[type="password"]:first').show().attr('id', $input.removeAttr('id').data('placeholder-id'));				// If `clearPlaceholder` was called from `$.valHooks.input.set`				if (event === true) {					return $input[0].value = value;				}				$input.focus();			} else {				input.value = '';				$input.removeClass('placeholder');				input == safeActiveElement() && input.select();			}		}	}	function setPlaceholder() {		var $replacement;		var input = this;		var $input = $(input);		var id = this.id;		if (input.value === '') {			if (input.type === 'password') {				if (!$input.data('placeholder-textinput')) {					try {						$replacement = $input.clone().attr({ 'type': 'text' });					} catch(e) {						$replacement = $('<input>').attr($.extend(args(this), { 'type': 'text' }));					}					$replacement						.removeAttr('name')						.data({							'placeholder-password': $input,							'placeholder-id': id						})						.bind('focus.placeholder', clearPlaceholder);					$input						.data({							'placeholder-textinput': $replacement,							'placeholder-id': id						})						.before($replacement);				}				$input = $input.removeAttr('id').hide().prevAll('input[type="text"]:first').attr('id', id).show();				// Note: `$input[0] != input` now!			}			$input.addClass('placeholder');			$input[0].value = $input.attr('placeholder');		} else {			$input.removeClass('placeholder');		}	}	function safeActiveElement() {		// Avoid IE9 `document.activeElement` of death		// https://github.com/mathiasbynens/jquery-placeholder/pull/99		try {			return document.activeElement;		} catch (exception) {}	}}));
 |