initial commit
This commit is contained in:
281
static/vendor/jquery-placeholder/jquery-placeholder.js
vendored
Normal file
281
static/vendor/jquery-placeholder/jquery-placeholder.js
vendored
Normal file
@@ -0,0 +1,281 @@
|
||||
/*!
|
||||
* jQuery Placeholder Plugin v2.3.1
|
||||
* https://github.com/mathiasbynens/jquery-placeholder
|
||||
*
|
||||
* Copyright 2011, 2015 Mathias Bynens
|
||||
* Released under the MIT license
|
||||
*/
|
||||
(function(factory) {
|
||||
if (typeof define === 'function' && define.amd) {
|
||||
// AMD
|
||||
define(['jquery'], factory);
|
||||
} else if (typeof module === 'object' && module.exports) {
|
||||
factory(require('jquery'));
|
||||
} else {
|
||||
// Browser globals
|
||||
factory(jQuery);
|
||||
}
|
||||
}(function($) {
|
||||
|
||||
/****
|
||||
* Allows plugin behavior simulation in modern browsers for easier debugging.
|
||||
* When setting to true, use attribute "placeholder-x" rather than the usual "placeholder" in your inputs/textareas
|
||||
* i.e. <input type="text" placeholder-x="my placeholder text" />
|
||||
*/
|
||||
var debugMode = false;
|
||||
|
||||
// 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 && !debugMode;
|
||||
var isTextareaSupported = 'placeholder' in document.createElement('textarea') && !isOperaMini && !debugMode;
|
||||
var valHooks = $.valHooks;
|
||||
var propHooks = $.propHooks;
|
||||
var hooks;
|
||||
var placeholder;
|
||||
var settings = {};
|
||||
|
||||
if (isInputSupported && isTextareaSupported) {
|
||||
|
||||
placeholder = $.fn.placeholder = function() {
|
||||
return this;
|
||||
};
|
||||
|
||||
placeholder.input = true;
|
||||
placeholder.textarea = true;
|
||||
|
||||
} else {
|
||||
|
||||
placeholder = $.fn.placeholder = function(options) {
|
||||
|
||||
var defaults = {customClass: 'placeholder'};
|
||||
settings = $.extend({}, defaults, options);
|
||||
|
||||
return this.filter((isInputSupported ? 'textarea' : ':input') + '[' + (debugMode ? 'placeholder-x' : 'placeholder') + ']')
|
||||
.not('.'+settings.customClass)
|
||||
.not(':radio, :checkbox, [type=hidden]')
|
||||
.bind({
|
||||
'focus.placeholder': clearPlaceholder,
|
||||
'blur.placeholder': setPlaceholder
|
||||
})
|
||||
.data('placeholder-enabled', true)
|
||||
.trigger('blur.placeholder');
|
||||
};
|
||||
|
||||
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(settings.customClass) ? '' : element.value;
|
||||
},
|
||||
'set': function(element, value) {
|
||||
|
||||
var $element = $(element);
|
||||
var $replacement;
|
||||
var $passwordInput;
|
||||
|
||||
if (value !== '') {
|
||||
|
||||
$replacement = $element.data('placeholder-textinput');
|
||||
$passwordInput = $element.data('placeholder-password');
|
||||
|
||||
if ($replacement) {
|
||||
clearPlaceholder.call($replacement[0], true, value) || (element.value = value);
|
||||
$replacement[0].value = value;
|
||||
|
||||
} else if ($passwordInput) {
|
||||
clearPlaceholder.call(element, true, value) || ($passwordInput[0].value = value);
|
||||
element.value = value;
|
||||
}
|
||||
}
|
||||
|
||||
if (!$element.data('placeholder-enabled')) {
|
||||
element.value = value;
|
||||
return $element;
|
||||
}
|
||||
|
||||
if (value === '') {
|
||||
|
||||
element.value = value;
|
||||
|
||||
// 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(settings.customClass)) {
|
||||
clearPlaceholder.call(element);
|
||||
}
|
||||
|
||||
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 = $('.'+settings.customClass, this).each(function() {
|
||||
clearPlaceholder.call(this, true, '');
|
||||
});
|
||||
|
||||
setTimeout(function() {
|
||||
$inputs.each(setPlaceholder);
|
||||
}, 10);
|
||||
});
|
||||
});
|
||||
|
||||
// Clear placeholder values upon page reload
|
||||
$(window).bind('beforeunload.placeholder', function() {
|
||||
|
||||
var clearPlaceholders = true;
|
||||
|
||||
try {
|
||||
// Prevent IE javascript:void(0) anchors from causing cleared values
|
||||
if (document.activeElement.toString() === 'javascript:void(0)') {
|
||||
clearPlaceholders = false;
|
||||
}
|
||||
} catch (exception) { }
|
||||
|
||||
if (clearPlaceholders) {
|
||||
$('.'+settings.customClass).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 = $(this);
|
||||
|
||||
if (input.value === $input.attr((debugMode ? 'placeholder-x' : 'placeholder')) && $input.hasClass(settings.customClass)) {
|
||||
|
||||
input.value = '';
|
||||
$input.removeClass(settings.customClass);
|
||||
|
||||
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) {
|
||||
$input[0].value = value;
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
$input.focus();
|
||||
|
||||
} else {
|
||||
input == safeActiveElement() && input.select();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function setPlaceholder(event) {
|
||||
var $replacement;
|
||||
var input = this;
|
||||
var $input = $(this);
|
||||
var id = input.id;
|
||||
|
||||
// If the placeholder is activated, triggering blur event (`$input.trigger('blur')`) should do nothing.
|
||||
if (event && event.type === 'blur' && $input.hasClass(settings.customClass)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (input.value === '') {
|
||||
if (input.type === 'password') {
|
||||
if (!$input.data('placeholder-textinput')) {
|
||||
|
||||
try {
|
||||
$replacement = $input.clone().prop({ 'type': 'text' });
|
||||
} catch(e) {
|
||||
$replacement = $('<input>').attr($.extend(args(this), { 'type': 'text' }));
|
||||
}
|
||||
|
||||
$replacement
|
||||
.removeAttr('name')
|
||||
.data({
|
||||
'placeholder-enabled': true,
|
||||
'placeholder-password': $input,
|
||||
'placeholder-id': id
|
||||
})
|
||||
.bind('focus.placeholder', clearPlaceholder);
|
||||
|
||||
$input
|
||||
.data({
|
||||
'placeholder-textinput': $replacement,
|
||||
'placeholder-id': id
|
||||
})
|
||||
.before($replacement);
|
||||
}
|
||||
|
||||
input.value = '';
|
||||
$input = $input.removeAttr('id').hide().prevAll('input[type="text"]:first').attr('id', $input.data('placeholder-id')).show();
|
||||
|
||||
} else {
|
||||
|
||||
var $passwordInput = $input.data('placeholder-password');
|
||||
|
||||
if ($passwordInput) {
|
||||
$passwordInput[0].value = '';
|
||||
$input.attr('id', $input.data('placeholder-id')).show().nextAll('input[type="password"]:last').hide().removeAttr('id');
|
||||
}
|
||||
}
|
||||
|
||||
$input.addClass(settings.customClass);
|
||||
$input[0].value = $input.attr((debugMode ? 'placeholder-x' : 'placeholder'));
|
||||
|
||||
} else {
|
||||
$input.removeClass(settings.customClass);
|
||||
}
|
||||
}
|
||||
|
||||
function safeActiveElement() {
|
||||
// Avoid IE9 `document.activeElement` of death
|
||||
try {
|
||||
return document.activeElement;
|
||||
} catch (exception) {}
|
||||
}
|
||||
}));
|
Reference in New Issue
Block a user