diff options
Diffstat (limited to 'source/bower_components/jquery-placeholder')
10 files changed, 526 insertions, 0 deletions
diff --git a/source/bower_components/jquery-placeholder/.bower.json b/source/bower_components/jquery-placeholder/.bower.json new file mode 100644 index 0000000..ac1d011 --- /dev/null +++ b/source/bower_components/jquery-placeholder/.bower.json @@ -0,0 +1,17 @@ +{ + "name": "jquery-placeholder", + "version": "2.0.8", + "main": [ + "jquery.placeholder.js" + ], + "homepage": "https://github.com/mathiasbynens/jquery-placeholder", + "_release": "2.0.8", + "_resolution": { + "type": "version", + "tag": "v2.0.8", + "commit": "051f21ef5279f4887d9caf6af7af211d933ba670" + }, + "_source": "git://github.com/mathiasbynens/jquery-placeholder.git", + "_target": "~2.0.7", + "_originalSource": "jquery-placeholder" +}
\ No newline at end of file diff --git a/source/bower_components/jquery-placeholder/.gitattributes b/source/bower_components/jquery-placeholder/.gitattributes new file mode 100644 index 0000000..44b4224 --- /dev/null +++ b/source/bower_components/jquery-placeholder/.gitattributes @@ -0,0 +1 @@ +* eol=lf
\ No newline at end of file diff --git a/source/bower_components/jquery-placeholder/.gitignore b/source/bower_components/jquery-placeholder/.gitignore new file mode 100644 index 0000000..496ee2c --- /dev/null +++ b/source/bower_components/jquery-placeholder/.gitignore @@ -0,0 +1 @@ +.DS_Store
\ No newline at end of file diff --git a/source/bower_components/jquery-placeholder/LICENSE-MIT.txt b/source/bower_components/jquery-placeholder/LICENSE-MIT.txt new file mode 100644 index 0000000..8d4d070 --- /dev/null +++ b/source/bower_components/jquery-placeholder/LICENSE-MIT.txt @@ -0,0 +1,20 @@ +Copyright Mathias Bynens <http://mathiasbynens.be/> + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file diff --git a/source/bower_components/jquery-placeholder/README.md b/source/bower_components/jquery-placeholder/README.md new file mode 100644 index 0000000..fa7ea38 --- /dev/null +++ b/source/bower_components/jquery-placeholder/README.md @@ -0,0 +1,76 @@ +# HTML5 Placeholder jQuery Plugin + +## Demo & Examples + +[http://mathiasbynens.be/demo/placeholder](http://mathiasbynens.be/demo/placeholder) + +## Example Usage + +### HTML + +```html +<input type="text" name="name" placeholder="e.g. John Doe"> +<input type="email" name="email" placeholder="e.g. address@example.ext"> +<input type="url" name="url" placeholder="e.g. http://mathiasbynens.be/"> +<input type="tel" name="tel" placeholder="e.g. +32 472 77 69 88"> +<input type="password" name="password" placeholder="e.g. h4x0rpr00fz"> +<input type="search" name="search" placeholder="Search this site…"> +<textarea name="message" placeholder="Your message goes here"></textarea> +``` + +### jQuery + +Use the plugin as follows: + +```js +$('input, textarea').placeholder(); +``` + +You’ll still be able to use `jQuery#val()` to get and set the input values. If the element is currently showing a placeholder, `.val()` will return an empty string instead of the placeholder text, just like it does in browsers with a native `@placeholder` implementation. Calling `.val('')` to set an element’s value to the empty string will result in the placeholder text (re)appearing. + +### CSS + +The plugin automatically adds `class="placeholder"` to the elements who are currently showing their placeholder text. You can use this to style placeholder text differently: + +```css +input, textarea { color: #000; } +.placeholder { color: #aaa; } +``` + +I’d suggest sticking to the `#aaa` color for placeholder text, as it’s the default in most browsers that support `@placeholder`. If you really want to, though, you can [style the placeholder text in some of the browsers that natively support it](http://stackoverflow.com/questions/2610497/change-an-inputs-html5-placeholder-color-with-css/2610741#2610741). + +## Installation + +You can install jquery-placeholder by using [Bower](http://bower.io). + +```bash +bower install jquery-placeholder +``` + +## Notes + +* Requires jQuery 1.6+. For an older version of this plugin that works under jQuery 1.4.2+, see [v1.8.7](https://github.com/mathiasbynens/jquery-placeholder/tree/v1.8.7). +* Works in all A-grade browsers, including IE6. +* Automatically checks if the browser natively supports the HTML5 `placeholder` attribute for `input` and `textarea` elements. If this is the case, the plugin won’t do anything. If `@placeholder` is only supported for `input` elements, the plugin will leave those alone and apply to `textarea`s exclusively. (This is the case for Safari 4, Opera 11.00, and possibly other browsers.) +* Caches the results of its two feature tests in `jQuery.fn.placeholder.input` and `jQuery.fn.placeholder.textarea`. For example, if `@placeholder` is natively supported for `input` elements, `jQuery.fn.placeholder.input` will be `true`. After loading the plugin, you can re-use these properties in your own code. +* Makes sure it never causes duplicate IDs in your DOM, even in browsers that need an extra `input` element to fake `@placeholder` for password inputs. This means you can safely do stuff like: + + ```html + <label for="bar">Example label</label> + <input type="password" placeholder="foo" id="bar"> + ``` + + And the `<label>` will always point to the `<input>` element you’d expect. Also, all CSS styles based on the ID will just work™. + +## License + +This plugin is available under [the MIT license](http://mths.be/mit). + +## Thanks to… + +* [Paul Irish](http://paulirish.com/) for his inspiring snippet in [jQuery 1.4 Hawtness #1](http://jquery14.com/day-05/jquery-1-4-hawtness-1-with-paul-irish) +* everyone from [#jquery](http://webchat.freenode.net/?channels=jquery) for the tips, ideas and patches +* temp01 for his major contributions +* anyone who [contributed a patch](https://github.com/mathiasbynens/jquery-placeholder/contributors) or [made a helpful suggestion](https://github.com/mathiasbynens/jquery-placeholder/issues) + +_– [Mathias](http://mathiasbynens.be/)_ diff --git a/source/bower_components/jquery-placeholder/bower.json b/source/bower_components/jquery-placeholder/bower.json new file mode 100644 index 0000000..4e5a390 --- /dev/null +++ b/source/bower_components/jquery-placeholder/bower.json @@ -0,0 +1,5 @@ +{ + "name": "jquery-placeholder", + "version": "2.0.8", + "main": ["jquery.placeholder.js"] +} diff --git a/source/bower_components/jquery-placeholder/demo.html b/source/bower_components/jquery-placeholder/demo.html new file mode 100644 index 0000000..a25df40 --- /dev/null +++ b/source/bower_components/jquery-placeholder/demo.html @@ -0,0 +1,55 @@ +<!DOCTYPE html> +<!-- If you’re looking for the online demo, it’s here: http://mathiasbynens.be/demo/placeholder --> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>HTML5 placeholder jQuery Plugin</title> + <style> + body, input, textarea { font: 1em/1.4 Helvetica, Arial; } + label code { cursor: pointer; float: left; width: 150px; } + input { width: 14em; } + textarea { height: 5em; width: 20em; } + .placeholder { color: #aaa; } + .note { border: 1px solid orange; padding: 1em; background: #ffffe0; } + /* #p { background: lime; } */ + </style> + </head> + <body> + <h1>HTML5 Placeholder jQuery Plugin</h1> + <p>Check out <a href="http://mths.be/placeholder">the HTML5 Placeholder jQuery Plugin project page on GitHub</a>.</p> + <pre><code>$(function() {<br> $('input, textarea').placeholder();<br>});</code></pre> + <form> + <p><label><code>type=search</code> <input type="search" name="search" placeholder="Search this site…"></label></p> + <p><label><code>type=text</code> <input type="text" name="name" placeholder="e.g. John Doe"></label></p> + <p><label><code>type=email</code> <input type="email" name="email" placeholder="e.g. address@example.ext"></label></p> + <p><label><code>type=url</code> <input type="url" name="url" placeholder="e.g. http://mathiasbynens.be/"></label></p> + <p><label><code>type=tel</code> <input type="tel" name="tel" placeholder="e.g. +32 472 77 69 88"></label></p> + <p><label for="p"><code>type=password</code> </label><input type="password" name="password" placeholder="e.g. hunter2" id="p"></p> + <p><label><code>textarea</code> <textarea name="message" placeholder="Your message goes here"></textarea></label></p> + <p><input type="submit" value="type=submit"></p> + </form> + <p>— <a href="http://mathiasbynens.be/" title="Mathias Bynens, front-end developer">Mathias</a></p> + <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> + <script src="jquery.placeholder.js"></script> + <script> + // To test the @id toggling on password inputs in browsers that don’t support changing an input’s @type dynamically (e.g. Firefox 3.6 or IE), uncomment this: + // $.fn.hide = function() { return this; } + // Then uncomment the last rule in the <style> element (in the <head>). + $(function() { + // Invoke the plugin + $('input, textarea').placeholder(); + // That’s it, really. + // Now display a message if the browser supports placeholder natively + var html; + if ($.fn.placeholder.input && $.fn.placeholder.textarea) { + html = '<strong>Your current browser natively supports <code>placeholder</code> for <code>input</code> and <code>textarea</code> elements.</strong> The plugin won’t run in this case, since it’s not needed. If you want to test the plugin, use an older browser ;)'; + } else if ($.fn.placeholder.input) { + html = '<strong>Your current browser natively supports <code>placeholder</code> for <code>input</code> elements, but not for <code>textarea</code> elements.</strong> The plugin will only do its thang on the <code>textarea</code>s.'; + } + if (html) { + $('<p class="note">' + html + '</p>').insertAfter('form'); + } + }); + </script> + </body> +</html> diff --git a/source/bower_components/jquery-placeholder/jquery.placeholder.js b/source/bower_components/jquery-placeholder/jquery.placeholder.js new file mode 100644 index 0000000..c951197 --- /dev/null +++ b/source/bower_components/jquery-placeholder/jquery.placeholder.js @@ -0,0 +1,185 @@ +/*! http://mths.be/placeholder v2.0.8 by @mathias */ +;(function(window, document, $) { + + // 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 prototype = $.fn; + var valHooks = $.valHooks; + var propHooks = $.propHooks; + var hooks; + var placeholder; + + if (isInputSupported && isTextareaSupported) { + + placeholder = prototype.placeholder = function() { + return this; + }; + + placeholder.input = placeholder.textarea = true; + + } else { + + placeholder = prototype.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().next().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().prev().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) {} + } + +}(this, document, jQuery)); diff --git a/source/bower_components/jquery-placeholder/tests/index.html b/source/bower_components/jquery-placeholder/tests/index.html new file mode 100644 index 0000000..160e3e8 --- /dev/null +++ b/source/bower_components/jquery-placeholder/tests/index.html @@ -0,0 +1,32 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8"> + <title>jquery-placeholder test suite</title> + <link rel="stylesheet" href="http://code.jquery.com/qunit/qunit-1.12.0.css"> + <style> + .placeholder { color: #aaa; } + #input-type-password { border: 5px solid lime; } + </style> + </head> + <body> + <div id="qunit"></div> + <div id="fixtures"> + <!-- I explicitly want these to be visible in the page, for easier debugging. --> + <form> + <p><label><code>type=search</code> <input id="input-type-search" type="search" name="search" placeholder="Search this site..."></label></p> + <p><label><code>type=text</code> <input id="input-type-text" type="text" name="name" placeholder="e.g. John Doe"></label></p> + <p><label><code>type=email</code> <input id="input-type-email" type="email" name="email" placeholder="e.g. address@example.ext"></label></p> + <p><label><code>type=url</code> <input id="input-type-url" type="url" name="url" placeholder="e.g. http://mathiasbynens.be/"></label></p> + <p><label><code>type=tel</code> <input id="input-type-tel" type="tel" name="tel" placeholder="e.g. +32 472 77 69 88"></label></p> + <p><label for="input-type-password"><code>type=password</code> </label><input id="input-type-password" type="password" name="password" placeholder="e.g. hunter2"></p> + <p><label><code>textarea</code> <textarea id="textarea" name="message" placeholder="Your message goes here"></textarea></label></p> + <p><input type="submit" value="type=submit"></p> + </form> + </div> + <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> + <script src="http://code.jquery.com/qunit/qunit-1.12.0.js"></script> + <script src="../jquery.placeholder.js"></script> + <script src="tests.js"></script> + </body> +</html> diff --git a/source/bower_components/jquery-placeholder/tests/tests.js b/source/bower_components/jquery-placeholder/tests/tests.js new file mode 100644 index 0000000..f721564 --- /dev/null +++ b/source/bower_components/jquery-placeholder/tests/tests.js @@ -0,0 +1,134 @@ +(function($) { + + module('jQuery#placeholder'); + + test('caches results of feature tests', function() { + strictEqual(typeof $.fn.placeholder.input, 'boolean', '$.fn.placeholder.input'); + strictEqual(typeof $.fn.placeholder.textarea, 'boolean', '$.fn.placeholder.textarea'); + }); + + if ($.fn.placeholder.input && $.fn.placeholder.textarea) { + return; + } + + var testElement = function($el) { + + var el = $el[0]; + var placeholder = el.getAttribute('placeholder'); + + strictEqual($el.placeholder(), $el, 'should be chainable'); + + strictEqual(el.value, placeholder, 'should set `placeholder` text as `value`'); + strictEqual($el.prop('value'), '', 'propHooks works properly'); + strictEqual($el.val(), '', 'valHooks works properly'); + ok($el.hasClass('placeholder'), 'should have `placeholder` class'); + + // test on focus + $el.focus(); + strictEqual(el.value, '', '`value` should be the empty string on focus'); + strictEqual($el.prop('value'), '', 'propHooks works properly'); + strictEqual($el.val(), '', 'valHooks works properly'); + ok(!$el.hasClass('placeholder'), 'should not have `placeholder` class on focus'); + + // and unfocus (blur) again + $el.blur(); + + strictEqual(el.value, placeholder, 'should set `placeholder` text as `value`'); + strictEqual($el.prop('value'), '', 'propHooks works properly'); + strictEqual($el.val(), '', 'valHooks works properly'); + ok($el.hasClass('placeholder'), 'should have `placeholder` class'); + + // change the value + $el.val('lorem ipsum'); + strictEqual($el.prop('value'), 'lorem ipsum', '`$el.val(string)` should change the `value` property'); + strictEqual(el.value, 'lorem ipsum', '`$el.val(string)` should change the `value` attribute'); + ok(!$el.hasClass('placeholder'), '`$el.val(string)` should remove `placeholder` class'); + + // and clear it again + $el.val(''); + strictEqual($el.prop('value'), '', '`$el.val("")` should change the `value` property'); + strictEqual(el.value, placeholder, '`$el.val("")` should change the `value` attribute'); + ok($el.hasClass('placeholder'), '`$el.val("")` should re-enable `placeholder` class'); + + // make sure the placeholder property works as expected. + strictEqual($el.prop('placeholder'), placeholder, '$el.prop(`placeholder`) should return the placeholder value'); + $el.prop('placeholder', 'new placeholder'); + strictEqual($el.prop('placeholder'), 'new placeholder', '$el.prop(`placeholder`, <string>) should set the placeholder value'); + strictEqual($el.value, 'new placeholder', '$el.prop(`placeholder`, <string>) should update the displayed placeholder value'); + $el.prop('placeholder', placeholder); + }; + + test('emulates placeholder for <input type=text>', function() { + testElement( $('#input-type-text') ); + }); + + test('emulates placeholder for <input type=search>', function() { + testElement( $('#input-type-search') ); + }); + + test('emulates placeholder for <input type=email>', function() { + testElement( $('#input-type-email') ); + }); + + test('emulates placeholder for <input type=url>', function() { + testElement( $('#input-type-url') ); + }); + + test('emulates placeholder for <input type=tel>', function() { + testElement( $('#input-type-tel') ); + }); + + test('emulates placeholder for <input type=tel>', function() { + testElement( $('#input-type-tel') ); + }); + + test('emulates placeholder for <input type=password>', function() { + var selector = '#input-type-password'; + + var $el = $(selector); + var el = $el[0]; + + var placeholder = el.getAttribute('placeholder'); + + strictEqual($el.placeholder(), $el, 'should be chainable'); + + // Re-select the element, as it gets replaced by another one in some browsers + $el = $(selector); + el = $el[0]; + + strictEqual(el.value, placeholder, 'should set `placeholder` text as `value`'); + strictEqual($el.prop('value'), '', 'propHooks works properly'); + strictEqual($el.val(), '', 'valHooks works properly'); + ok($el.hasClass('placeholder'), 'should have `placeholder` class'); + + // test on focus + $el.focus(); + + // Re-select the element, as it gets replaced by another one in some browsers + $el = $(selector); + el = $el[0]; + + strictEqual(el.value, '', '`value` should be the empty string on focus'); + strictEqual($el.prop('value'), '', 'propHooks works properly'); + strictEqual($el.val(), '', 'valHooks works properly'); + ok(!$el.hasClass('placeholder'), 'should not have `placeholder` class on focus'); + + // and unfocus (blur) again + $el.blur(); + + // Re-select the element, as it gets replaced by another one in some browsers + $el = $(selector); + el = $el[0]; + + strictEqual(el.value, placeholder, 'should set `placeholder` text as `value`'); + strictEqual($el.prop('value'), '', 'propHooks works properly'); + strictEqual($el.val(), '', 'valHooks works properly'); + ok($el.hasClass('placeholder'), 'should have `placeholder` class'); + + }); + + test('emulates placeholder for <textarea></textarea>', function() { + testElement( $('#textarea') ); + }); + +}(jQuery)); |