123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 |
- /*
- Formalize - version 1.2
- Note: This file depends on the jQuery library.
- */
- // Module pattern:
- // http://yuiblog.com/blog/2007/06/12/module-pattern
- var FORMALIZE = (function($, window, document, undefined) {
- // Internet Explorer detection.
- function IE(version) {
- var b = document.createElement('b');
- b.innerHTML = '<!--[if IE ' + version + ']><br><![endif]-->';
- return !!b.getElementsByTagName('br').length;
- }
- // Private constants.
- var PLACEHOLDER_SUPPORTED = 'placeholder' in document.createElement('input');
- var AUTOFOCUS_SUPPORTED = 'autofocus' in document.createElement('input');
- var IE6 = IE(6);
- var IE7 = IE(7);
- // Expose innards of FORMALIZE.
- return {
- // FORMALIZE.go
- go: function() {
- var i, j = this.init;
- for (i in j) {
- j.hasOwnProperty(i) && j[i]();
- }
- },
- // FORMALIZE.init
- init: {
- // FORMALIZE.init.full_input_size
- full_input_size: function() {
- if (!IE7 || !$('textarea, input.input_full').length) {
- return;
- }
- // This fixes width: 100% on <textarea> and class="input_full".
- // It ensures that form elements don't go wider than container.
- $('textarea, input.input_full').wrap('<span class="input_full_wrap"></span>');
- },
- // FORMALIZE.init.ie6_skin_inputs
- ie6_skin_inputs: function() {
- // Test for Internet Explorer 6.
- if (!IE6 || !$('input, select, textarea').length) {
- // Exit if the browser is not IE6,
- // or if no form elements exist.
- return;
- }
- // For <input type="submit" />, etc.
- var button_regex = /button|submit|reset/;
- // For <input type="text" />, etc.
- var type_regex = /date|datetime|datetime-local|email|month|number|password|range|search|tel|text|time|url|week/;
- $('input').each(function() {
- var el = $(this);
- // Is it a button?
- if (this.getAttribute('type').match(button_regex)) {
- el.addClass('ie6_button');
- /* Is it disabled? */
- if (this.disabled) {
- el.addClass('ie6_button_disabled');
- }
- }
- // Or is it a textual input?
- else if (this.getAttribute('type').match(type_regex)) {
- el.addClass('ie6_input');
- /* Is it disabled? */
- if (this.disabled) {
- el.addClass('ie6_input_disabled');
- }
- }
- });
- $('textarea, select').each(function() {
- /* Is it disabled? */
- if (this.disabled) {
- $(this).addClass('ie6_input_disabled');
- }
- });
- },
- // FORMALIZE.init.autofocus
- autofocus: function() {
- if (AUTOFOCUS_SUPPORTED || !$(':input[autofocus]').length) {
- return;
- }
- $(':input[autofocus]:visible:first').focus();
- },
- // FORMALIZE.init.placeholder
- placeholder: function() {
- if (PLACEHOLDER_SUPPORTED || !$(':input[placeholder]').length) {
- // Exit if placeholder is supported natively,
- // or if page does not have any placeholder.
- return;
- }
- FORMALIZE.misc.add_placeholder();
- $(':input[placeholder]').each(function() {
- // Placeholder obscured in older browsers,
- // so there's no point adding to password.
- if (this.type === 'password') {
- return;
- }
- var el = $(this);
- var text = el.attr('placeholder');
- el.focus(function() {
- if (el.val() === text) {
- el.val('').removeClass('placeholder_text');
- }
- }).blur(function() {
- FORMALIZE.misc.add_placeholder();
- });
- // Prevent <form> from accidentally
- // submitting the placeholder text.
- el.closest('form').submit(function() {
- if (el.val() === text) {
- el.val('').removeClass('placeholder_text');
- }
- }).bind('reset', function() {
- setTimeout(FORMALIZE.misc.add_placeholder, 50);
- });
- });
- }
- },
- // FORMALIZE.misc
- misc: {
- // FORMALIZE.misc.add_placeholder
- add_placeholder: function() {
- if (PLACEHOLDER_SUPPORTED || !$(':input[placeholder]').length) {
- // Exit if placeholder is supported natively,
- // or if page does not have any placeholder.
- return;
- }
- $(':input[placeholder]').each(function() {
- // Placeholder obscured in older browsers,
- // so there's no point adding to password.
- if (this.type === 'password') {
- return;
- }
- var el = $(this);
- var text = el.attr('placeholder');
- if (!el.val() || el.val() === text) {
- el.val(text).addClass('placeholder_text');
- }
- });
- }
- }
- };
- // Alias jQuery, window, document.
- })(jQuery, this, this.document);
- // Automatically calls all functions in FORMALIZE.init
- jQuery(document).ready(function() {
- FORMALIZE.go();
- });
|