/* 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.disable_link_button disable_link_button: function() { $(document.documentElement).on('click', 'a.button_disabled', function() { return false; }); }, // 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; } var el = $('[autofocus]')[0]; if (!el.disabled) { el.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'); } }).on('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(); });