formalize-rails 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +4 -0
- data/Gemfile +4 -0
- data/README.md +24 -0
- data/Rakefile +1 -0
- data/formalize-rails.gemspec +22 -0
- data/lib/formalize/rails/engine.rb +6 -0
- data/lib/formalize/rails/version.rb +5 -0
- data/lib/formalize/rails.rb +7 -0
- data/lib/formalize-rails.rb +1 -0
- data/vendor/assets/images/button.png +0 -0
- data/vendor/assets/images/select_arrow.gif +0 -0
- data/vendor/assets/javascripts/dojo.formalize.js +166 -0
- data/vendor/assets/javascripts/dojo.formalize.min.js +1 -0
- data/vendor/assets/javascripts/extjs.formalize.js +163 -0
- data/vendor/assets/javascripts/extjs.formalize.min.js +1 -0
- data/vendor/assets/javascripts/jquery.formalize.js +150 -0
- data/vendor/assets/javascripts/jquery.formalize.min.js +1 -0
- data/vendor/assets/javascripts/mootools.formalize.js +155 -0
- data/vendor/assets/javascripts/mootools.formalize.min.js +1 -0
- data/vendor/assets/javascripts/prototype.formalize.js +163 -0
- data/vendor/assets/javascripts/prototype.formalize.min.js +1 -0
- data/vendor/assets/javascripts/yui.formalize.js +160 -0
- data/vendor/assets/javascripts/yui.formalize.min.js +1 -0
- data/vendor/assets/stylesheets/formalize.css +356 -0
- metadata +83 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# Formalize Rails
|
2
|
+
|
3
|
+
This gem vendors Formalize to the asset pipeline. Therefore, this gem requires Rails 3.1 and
|
4
|
+
greater.
|
5
|
+
|
6
|
+
Add this gem to your gemfile:
|
7
|
+
|
8
|
+
gem 'formalize-rails'
|
9
|
+
|
10
|
+
And add `app/assets/stylesheets/application.css`:
|
11
|
+
|
12
|
+
//= require formalize
|
13
|
+
|
14
|
+
And add one of these lines to `app/assets/javascripts/application.js`, depending on which javascript
|
15
|
+
framework you are using:
|
16
|
+
|
17
|
+
//= dojo.formalize
|
18
|
+
//= extjs.formalize
|
19
|
+
//= jquery.formalize
|
20
|
+
//= mootools.formalize
|
21
|
+
//= prototype.formalize
|
22
|
+
//= yui.formalize
|
23
|
+
|
24
|
+
See [formalize.me](http://formalize.me) for more information.
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'bundler/gem_tasks'
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "formalize/rails/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "formalize-rails"
|
7
|
+
s.version = Formalize::Rails::VERSION
|
8
|
+
s.authors = ["Iain Hecker"]
|
9
|
+
s.email = ["iain@iain.nl"]
|
10
|
+
s.homepage = "https://github.com/iain/formalize-rails"
|
11
|
+
s.summary = %q{Use Formalize with the asset pipeline}
|
12
|
+
s.description = %q{This gem provides the assets for the formalize form styling, for easy usage with the Rails 3.1 asset pipeline.}
|
13
|
+
|
14
|
+
s.rubyforge_project = "formalize-rails"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
|
21
|
+
s.add_dependency "railties", "~> 3.1.0.rc1"
|
22
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'formalize/rails'
|
Binary file
|
Binary file
|
@@ -0,0 +1,166 @@
|
|
1
|
+
/*
|
2
|
+
Formalize - version 1.1
|
3
|
+
|
4
|
+
Note: This file depends on the Dojo library.
|
5
|
+
*/
|
6
|
+
|
7
|
+
// Module pattern:
|
8
|
+
// http://yuiblog.com/blog/2007/06/12/module-pattern
|
9
|
+
var FORMALIZE = (function(window, document, undefined) {
|
10
|
+
// Private constants.
|
11
|
+
var PLACEHOLDER_SUPPORTED = 'placeholder' in document.createElement('input');
|
12
|
+
var AUTOFOCUS_SUPPORTED = 'autofocus' in document.createElement('input');
|
13
|
+
var IE6 = parseInt(dojo.isIE, 10) === 6;
|
14
|
+
var IE7 = parseInt(dojo.isIE, 10) === 7;
|
15
|
+
|
16
|
+
// Expose innards of FORMALIZE.
|
17
|
+
return {
|
18
|
+
// FORMALIZE.go
|
19
|
+
go: function() {
|
20
|
+
for (var i in FORMALIZE.init) {
|
21
|
+
FORMALIZE.init[i]();
|
22
|
+
}
|
23
|
+
},
|
24
|
+
// FORMALIZE.init
|
25
|
+
init: {
|
26
|
+
// FORMALIZE.init.full_input_size
|
27
|
+
full_input_size: function() {
|
28
|
+
if (!IE7 || !dojo.query('textarea, input.input_full').length) {
|
29
|
+
return;
|
30
|
+
}
|
31
|
+
|
32
|
+
// This fixes width: 100% on <textarea> and class="input_full".
|
33
|
+
// It ensures that form elements don't go wider than container.
|
34
|
+
dojo.query('textarea, input.input_full').forEach(function(el) {
|
35
|
+
var new_el = el.cloneNode(false);
|
36
|
+
var span = document.createElement('span');
|
37
|
+
|
38
|
+
span.className = 'input_full_wrap';
|
39
|
+
span.appendChild(new_el);
|
40
|
+
el.parentNode.replaceChild(span, el);
|
41
|
+
});
|
42
|
+
},
|
43
|
+
// FORMALIZE.init.ie6_skin_inputs
|
44
|
+
ie6_skin_inputs: function() {
|
45
|
+
// Test for Internet Explorer 6.
|
46
|
+
if (!IE6 || !dojo.query('input, select, textarea').length) {
|
47
|
+
// Exit if the browser is not IE6,
|
48
|
+
// or if no form elements exist.
|
49
|
+
return;
|
50
|
+
}
|
51
|
+
|
52
|
+
// For <input type="submit" />, etc.
|
53
|
+
var button_regex = /button|submit|reset/;
|
54
|
+
|
55
|
+
// For <input type="text" />, etc.
|
56
|
+
var type_regex = /date|datetime|datetime-local|email|month|number|password|range|search|tel|text|time|url|week/;
|
57
|
+
|
58
|
+
dojo.query('input').forEach(function(el) {
|
59
|
+
// Is it a button?
|
60
|
+
if (el.getAttribute('type').match(button_regex)) {
|
61
|
+
dojo.addClass(el, 'ie6_button');
|
62
|
+
|
63
|
+
/* Is it disabled? */
|
64
|
+
if (el.disabled) {
|
65
|
+
dojo.addClass(el, 'ie6_button_disabled');
|
66
|
+
}
|
67
|
+
}
|
68
|
+
// Or is it a textual input?
|
69
|
+
else if (el.getAttribute('type').match(type_regex)) {
|
70
|
+
dojo.addClass(el, 'ie6_input');
|
71
|
+
|
72
|
+
/* Is it disabled? */
|
73
|
+
if (el.disabled) {
|
74
|
+
dojo.addClass(el, 'ie6_input_disabled');
|
75
|
+
}
|
76
|
+
}
|
77
|
+
});
|
78
|
+
|
79
|
+
dojo.query('textarea, select').forEach(function(el) {
|
80
|
+
/* Is it disabled? */
|
81
|
+
if (el.disabled) {
|
82
|
+
dojo.addClass(el, 'ie6_input_disabled');
|
83
|
+
}
|
84
|
+
});
|
85
|
+
},
|
86
|
+
// FORMALIZE.init.autofocus
|
87
|
+
autofocus: function() {
|
88
|
+
if (AUTOFOCUS_SUPPORTED || !dojo.query('[autofocus]').length) {
|
89
|
+
return;
|
90
|
+
}
|
91
|
+
|
92
|
+
dojo.query('[autofocus]')[0].focus();
|
93
|
+
},
|
94
|
+
// FORMALIZE.init.placeholder
|
95
|
+
placeholder: function() {
|
96
|
+
if (PLACEHOLDER_SUPPORTED || !dojo.query('[placeholder]').length) {
|
97
|
+
// Exit if placeholder is supported natively,
|
98
|
+
// or if page does not have any placeholder.
|
99
|
+
return;
|
100
|
+
}
|
101
|
+
|
102
|
+
FORMALIZE.misc.add_placeholder();
|
103
|
+
|
104
|
+
dojo.query('[placeholder]').forEach(function(el) {
|
105
|
+
dojo.connect(el, 'onfocus', function() {
|
106
|
+
var text = el.getAttribute('placeholder');
|
107
|
+
|
108
|
+
if (el.value === text) {
|
109
|
+
el.value = '';
|
110
|
+
dojo.removeClass(el, 'placeholder_text');
|
111
|
+
}
|
112
|
+
});
|
113
|
+
|
114
|
+
dojo.connect(el, 'onblur', function() {
|
115
|
+
FORMALIZE.misc.add_placeholder();
|
116
|
+
});
|
117
|
+
});
|
118
|
+
|
119
|
+
// Prevent <form> from accidentally
|
120
|
+
// submitting the placeholder text.
|
121
|
+
dojo.query('form').forEach(function(form) {
|
122
|
+
dojo.connect(form, 'onsubmit', function() {
|
123
|
+
dojo.query('[placeholder]', form).forEach(function(el) {
|
124
|
+
var text = el.getAttribute('placeholder');
|
125
|
+
|
126
|
+
if (el.value === text) {
|
127
|
+
el.value = '';
|
128
|
+
dojo.removeClass(el, 'placeholder_text');
|
129
|
+
}
|
130
|
+
});
|
131
|
+
});
|
132
|
+
|
133
|
+
dojo.connect(form, 'onreset', function() {
|
134
|
+
setTimeout(FORMALIZE.misc.add_placeholder, 50);
|
135
|
+
});
|
136
|
+
});
|
137
|
+
}
|
138
|
+
},
|
139
|
+
// FORMALIZE.misc
|
140
|
+
misc: {
|
141
|
+
// FORMALIZE.misc.add_placeholder
|
142
|
+
add_placeholder: function() {
|
143
|
+
if (PLACEHOLDER_SUPPORTED || !dojo.query('[placeholder]').length) {
|
144
|
+
// Exit if placeholder is supported natively,
|
145
|
+
// or if page does not have any placeholder.
|
146
|
+
return;
|
147
|
+
}
|
148
|
+
|
149
|
+
dojo.query('[placeholder]').forEach(function(el) {
|
150
|
+
var text = el.getAttribute('placeholder');
|
151
|
+
|
152
|
+
if (!el.value || el.value === text) {
|
153
|
+
el.value = text;
|
154
|
+
dojo.addClass(el, 'placeholder_text');
|
155
|
+
}
|
156
|
+
});
|
157
|
+
}
|
158
|
+
}
|
159
|
+
};
|
160
|
+
// Alias window, document.
|
161
|
+
})(this, this.document);
|
162
|
+
|
163
|
+
// Automatically calls all functions in FORMALIZE.init
|
164
|
+
dojo.addOnLoad(function() {
|
165
|
+
FORMALIZE.go();
|
166
|
+
});
|
@@ -0,0 +1 @@
|
|
1
|
+
var FORMALIZE=function(a,b,c){var d="placeholder"in b.createElement("input"),e="autofocus"in b.createElement("input"),f=parseInt(dojo.isIE,10)===6,g=parseInt(dojo.isIE,10)===7;return{go:function(){for(var a in FORMALIZE.init)FORMALIZE.init[a]()},init:{full_input_size:function(){!!g&&!!dojo.query("textarea, input.input_full").length&&dojo.query("textarea, input.input_full").forEach(function(a){var c=a.cloneNode(!1),d=b.createElement("span");d.className="input_full_wrap",d.appendChild(c),a.parentNode.replaceChild(d,a)})},ie6_skin_inputs:function(){if(!!f&&!!dojo.query("input, select, textarea").length){var a=/button|submit|reset/,b=/date|datetime|datetime-local|email|month|number|password|range|search|tel|text|time|url|week/;dojo.query("input").forEach(function(c){c.getAttribute("type").match(a)?(dojo.addClass(c,"ie6_button"),c.disabled&&dojo.addClass(c,"ie6_button_disabled")):c.getAttribute("type").match(b)&&(dojo.addClass(c,"ie6_input"),c.disabled&&dojo.addClass(c,"ie6_input_disabled"))}),dojo.query("textarea, select").forEach(function(a){a.disabled&&dojo.addClass(a,"ie6_input_disabled")})}},autofocus:function(){!e&&!!dojo.query("[autofocus]").length&&dojo.query("[autofocus]")[0].focus()},placeholder:function(){!d&&!!dojo.query("[placeholder]").length&&(FORMALIZE.misc.add_placeholder(),dojo.query("[placeholder]").forEach(function(a){dojo.connect(a,"onfocus",function(){var b=a.getAttribute("placeholder");a.value===b&&(a.value="",dojo.removeClass(a,"placeholder_text"))}),dojo.connect(a,"onblur",function(){FORMALIZE.misc.add_placeholder()})}),dojo.query("form").forEach(function(a){dojo.connect(a,"onsubmit",function(){dojo.query("[placeholder]",a).forEach(function(a){var b=a.getAttribute("placeholder");a.value===b&&(a.value="",dojo.removeClass(a,"placeholder_text"))})}),dojo.connect(a,"onreset",function(){setTimeout(FORMALIZE.misc.add_placeholder,50)})}))}},misc:{add_placeholder:function(){!d&&!!dojo.query("[placeholder]").length&&dojo.query("[placeholder]").forEach(function(a){var b=a.getAttribute("placeholder");if(!a.value||a.value===b)a.value=b,dojo.addClass(a,"placeholder_text")})}}}}(this,this.document);dojo.addOnLoad(function(){FORMALIZE.go()})
|
@@ -0,0 +1,163 @@
|
|
1
|
+
/*
|
2
|
+
Formalize - version 1.1
|
3
|
+
|
4
|
+
Note: This file depends on the ExtJS 3.x library.
|
5
|
+
*/
|
6
|
+
|
7
|
+
// Module pattern:
|
8
|
+
// http://yuiblog.com/blog/2007/06/12/module-pattern
|
9
|
+
var FORMALIZE = (function(window, document, undefined) {
|
10
|
+
// Private constants.
|
11
|
+
var PLACEHOLDER_SUPPORTED = 'placeholder' in document.createElement('input');
|
12
|
+
var AUTOFOCUS_SUPPORTED = 'autofocus' in document.createElement('input');
|
13
|
+
var IE6 = Ext.isIE6;
|
14
|
+
var IE7 = Ext.isIE7;
|
15
|
+
|
16
|
+
// Expose innards of FORMALIZE.
|
17
|
+
return {
|
18
|
+
// FORMALIZE.go
|
19
|
+
go: function() {
|
20
|
+
for (var i in FORMALIZE.init) {
|
21
|
+
FORMALIZE.init[i]();
|
22
|
+
}
|
23
|
+
},
|
24
|
+
// FORMALIZE.init
|
25
|
+
init: {
|
26
|
+
// FORMALIZE.init.full_input_size
|
27
|
+
full_input_size: function() {
|
28
|
+
if (!IE7 || !Ext.query('textarea, input.input_full')) {
|
29
|
+
return;
|
30
|
+
}
|
31
|
+
|
32
|
+
// This fixes width: 100% on <textarea> and class="input_full".
|
33
|
+
// It ensures that form elements don't go wider than container.
|
34
|
+
Ext.each(Ext.query('textarea, input.input_full'), function(el) {
|
35
|
+
Ext.get(el).wrap('<span class="input_full_wrap"></span>');
|
36
|
+
});
|
37
|
+
},
|
38
|
+
// FORMALIZE.init.ie6_skin_inputs
|
39
|
+
ie6_skin_inputs: function() {
|
40
|
+
// Test for Internet Explorer 6.
|
41
|
+
if (!IE6 || !Ext.query('input, select, textarea')) {
|
42
|
+
// Exit if the browser is not IE6,
|
43
|
+
// or if no form elements exist.
|
44
|
+
return;
|
45
|
+
}
|
46
|
+
|
47
|
+
// For <input type="submit" />, etc.
|
48
|
+
var button_regex = /button|submit|reset/;
|
49
|
+
|
50
|
+
// For <input type="text" />, etc.
|
51
|
+
var type_regex = /date|datetime|datetime-local|email|month|number|password|range|search|tel|text|time|url|week/;
|
52
|
+
|
53
|
+
Ext.each(Ext.query('input'), function(el) {
|
54
|
+
// Is it a button?
|
55
|
+
if (el.getAttribute('type').match(button_regex)) {
|
56
|
+
Ext.get(el).addClass('ie6_button');
|
57
|
+
|
58
|
+
/* Is it disabled? */
|
59
|
+
if (el.disabled) {
|
60
|
+
Ext.get(el).addClass('ie6_button_disabled');
|
61
|
+
}
|
62
|
+
}
|
63
|
+
// Or is it a textual input?
|
64
|
+
else if (el.getAttribute('type').match(type_regex)) {
|
65
|
+
Ext.get(el).addClass('ie6_input');
|
66
|
+
|
67
|
+
/* Is it disabled? */
|
68
|
+
if (el.disabled) {
|
69
|
+
Ext.get(el).addClass('ie6_input_disabled');
|
70
|
+
}
|
71
|
+
}
|
72
|
+
});
|
73
|
+
|
74
|
+
Ext.each(Ext.query('textarea, select'), function(el) {
|
75
|
+
/* Is it disabled? */
|
76
|
+
if (el.disabled) {
|
77
|
+
Ext.get(el).addClass('ie6_input_disabled');
|
78
|
+
}
|
79
|
+
});
|
80
|
+
},
|
81
|
+
// FORMALIZE.init.autofocus
|
82
|
+
autofocus: function() {
|
83
|
+
if (AUTOFOCUS_SUPPORTED || !Ext.query('[autofocus]')) {
|
84
|
+
return;
|
85
|
+
}
|
86
|
+
|
87
|
+
Ext.query('[autofocus]')[0].focus();
|
88
|
+
},
|
89
|
+
// FORMALIZE.init.placeholder
|
90
|
+
placeholder: function() {
|
91
|
+
if (PLACEHOLDER_SUPPORTED || !Ext.query('[placeholder]')) {
|
92
|
+
// Exit if placeholder is supported natively,
|
93
|
+
// or if page does not have any placeholder.
|
94
|
+
return;
|
95
|
+
}
|
96
|
+
|
97
|
+
FORMALIZE.misc.add_placeholder();
|
98
|
+
|
99
|
+
Ext.each(Ext.query('[placeholder]'), function(el) {
|
100
|
+
var text = el.getAttribute('placeholder');
|
101
|
+
var form = Ext.get(el).parent('form');
|
102
|
+
|
103
|
+
function add_placeholder() {
|
104
|
+
if (!el.value || el.value === text) {
|
105
|
+
el.value = text;
|
106
|
+
Ext.get(el).addClass('placeholder_text');
|
107
|
+
}
|
108
|
+
}
|
109
|
+
|
110
|
+
Ext.get(el).on('focus', function() {
|
111
|
+
if (el.value === text) {
|
112
|
+
el.value = '';
|
113
|
+
Ext.get(el).removeClass('placeholder_text');
|
114
|
+
}
|
115
|
+
});
|
116
|
+
|
117
|
+
Ext.get(el).on('blur', function() {
|
118
|
+
FORMALIZE.misc.add_placeholder();
|
119
|
+
});
|
120
|
+
|
121
|
+
// Prevent <form> from accidentally
|
122
|
+
// submitting the placeholder text.
|
123
|
+
form.on('submit', function() {
|
124
|
+
if (el.value === text) {
|
125
|
+
el.value = '';
|
126
|
+
Ext.get(el).removeClass('placeholder_text');
|
127
|
+
}
|
128
|
+
});
|
129
|
+
|
130
|
+
form.on('reset', function() {
|
131
|
+
setTimeout(FORMALIZE.misc.add_placeholder, 50);
|
132
|
+
});
|
133
|
+
});
|
134
|
+
}
|
135
|
+
},
|
136
|
+
// FORMALIZE.misc
|
137
|
+
misc: {
|
138
|
+
// FORMALIZE.misc.add_placeholder
|
139
|
+
add_placeholder: function() {
|
140
|
+
if (PLACEHOLDER_SUPPORTED || !Ext.query('[placeholder]')) {
|
141
|
+
// Exit if placeholder is supported natively,
|
142
|
+
// or if page does not have any placeholder.
|
143
|
+
return;
|
144
|
+
}
|
145
|
+
|
146
|
+
Ext.each(Ext.query('[placeholder]'), function(el) {
|
147
|
+
var text = el.getAttribute('placeholder');
|
148
|
+
|
149
|
+
if (!el.value || el.value === text) {
|
150
|
+
el.value = text;
|
151
|
+
Ext.get(el).addClass('placeholder_text');
|
152
|
+
}
|
153
|
+
});
|
154
|
+
}
|
155
|
+
}
|
156
|
+
};
|
157
|
+
// Alias window, document.
|
158
|
+
})(this, this.document);
|
159
|
+
|
160
|
+
// Automatically calls all functions in FORMALIZE.init
|
161
|
+
Ext.onReady(function() {
|
162
|
+
FORMALIZE.go();
|
163
|
+
});
|
@@ -0,0 +1 @@
|
|
1
|
+
var FORMALIZE=function(a,b,c){var d="placeholder"in b.createElement("input"),e="autofocus"in b.createElement("input"),f=Ext.isIE6,g=Ext.isIE7;return{go:function(){for(var a in FORMALIZE.init)FORMALIZE.init[a]()},init:{full_input_size:function(){!!g&&!!Ext.query("textarea, input.input_full")&&Ext.each(Ext.query("textarea, input.input_full"),function(a){Ext.get(a).wrap('<span class="input_full_wrap"></span>')})},ie6_skin_inputs:function(){if(!!f&&!!Ext.query("input, select, textarea")){var a=/button|submit|reset/,b=/date|datetime|datetime-local|email|month|number|password|range|search|tel|text|time|url|week/;Ext.each(Ext.query("input"),function(c){c.getAttribute("type").match(a)?(Ext.get(c).addClass("ie6_button"),c.disabled&&Ext.get(c).addClass("ie6_button_disabled")):c.getAttribute("type").match(b)&&(Ext.get(c).addClass("ie6_input"),c.disabled&&Ext.get(c).addClass("ie6_input_disabled"))}),Ext.each(Ext.query("textarea, select"),function(a){a.disabled&&Ext.get(a).addClass("ie6_input_disabled")})}},autofocus:function(){!e&&!!Ext.query("[autofocus]")&&Ext.query("[autofocus]")[0].focus()},placeholder:function(){!d&&!!Ext.query("[placeholder]")&&(FORMALIZE.misc.add_placeholder(),Ext.each(Ext.query("[placeholder]"),function(a){function d(){if(!a.value||a.value===b)a.value=b,Ext.get(a).addClass("placeholder_text")}var b=a.getAttribute("placeholder"),c=Ext.get(a).parent("form");Ext.get(a).on("focus",function(){a.value===b&&(a.value="",Ext.get(a).removeClass("placeholder_text"))}),Ext.get(a).on("blur",function(){FORMALIZE.misc.add_placeholder()}),c.on("submit",function(){a.value===b&&(a.value="",Ext.get(a).removeClass("placeholder_text"))}),c.on("reset",function(){setTimeout(FORMALIZE.misc.add_placeholder,50)})}))}},misc:{add_placeholder:function(){!d&&!!Ext.query("[placeholder]")&&Ext.each(Ext.query("[placeholder]"),function(a){var b=a.getAttribute("placeholder");if(!a.value||a.value===b)a.value=b,Ext.get(a).addClass("placeholder_text")})}}}}(this,this.document);Ext.onReady(function(){FORMALIZE.go()})
|
@@ -0,0 +1,150 @@
|
|
1
|
+
/*
|
2
|
+
Formalize - version 1.1
|
3
|
+
|
4
|
+
Note: This file depends on the jQuery library.
|
5
|
+
*/
|
6
|
+
|
7
|
+
// Module pattern:
|
8
|
+
// http://yuiblog.com/blog/2007/06/12/module-pattern
|
9
|
+
var FORMALIZE = (function($, window, document, undefined) {
|
10
|
+
// Private constants.
|
11
|
+
var PLACEHOLDER_SUPPORTED = 'placeholder' in document.createElement('input');
|
12
|
+
var AUTOFOCUS_SUPPORTED = 'autofocus' in document.createElement('input');
|
13
|
+
var IE6 = !!($.browser.msie && parseInt($.browser.version, 10) === 6);
|
14
|
+
var IE7 = !!($.browser.msie && parseInt($.browser.version, 10) === 7);
|
15
|
+
|
16
|
+
// Expose innards of FORMALIZE.
|
17
|
+
return {
|
18
|
+
// FORMALIZE.go
|
19
|
+
go: function() {
|
20
|
+
for (var i in FORMALIZE.init) {
|
21
|
+
FORMALIZE.init[i]();
|
22
|
+
}
|
23
|
+
},
|
24
|
+
// FORMALIZE.init
|
25
|
+
init: {
|
26
|
+
// FORMALIZE.init.full_input_size
|
27
|
+
full_input_size: function() {
|
28
|
+
if (!IE7 || !$('textarea, input.input_full').length) {
|
29
|
+
return;
|
30
|
+
}
|
31
|
+
|
32
|
+
// This fixes width: 100% on <textarea> and class="input_full".
|
33
|
+
// It ensures that form elements don't go wider than container.
|
34
|
+
$('textarea, input.input_full').wrap('<span class="input_full_wrap"></span>');
|
35
|
+
},
|
36
|
+
// FORMALIZE.init.ie6_skin_inputs
|
37
|
+
ie6_skin_inputs: function() {
|
38
|
+
// Test for Internet Explorer 6.
|
39
|
+
if (!IE6 || !$('input, select, textarea').length) {
|
40
|
+
// Exit if the browser is not IE6,
|
41
|
+
// or if no form elements exist.
|
42
|
+
return;
|
43
|
+
}
|
44
|
+
|
45
|
+
// For <input type="submit" />, etc.
|
46
|
+
var button_regex = /button|submit|reset/;
|
47
|
+
|
48
|
+
// For <input type="text" />, etc.
|
49
|
+
var type_regex = /date|datetime|datetime-local|email|month|number|password|range|search|tel|text|time|url|week/;
|
50
|
+
|
51
|
+
$('input').each(function() {
|
52
|
+
var el = $(this);
|
53
|
+
|
54
|
+
// Is it a button?
|
55
|
+
if (this.getAttribute('type').match(button_regex)) {
|
56
|
+
el.addClass('ie6_button');
|
57
|
+
|
58
|
+
/* Is it disabled? */
|
59
|
+
if (this.disabled) {
|
60
|
+
el.addClass('ie6_button_disabled');
|
61
|
+
}
|
62
|
+
}
|
63
|
+
// Or is it a textual input?
|
64
|
+
else if (this.getAttribute('type').match(type_regex)) {
|
65
|
+
el.addClass('ie6_input');
|
66
|
+
|
67
|
+
/* Is it disabled? */
|
68
|
+
if (this.disabled) {
|
69
|
+
el.addClass('ie6_input_disabled');
|
70
|
+
}
|
71
|
+
}
|
72
|
+
});
|
73
|
+
|
74
|
+
$('textarea, select').each(function() {
|
75
|
+
/* Is it disabled? */
|
76
|
+
if (this.disabled) {
|
77
|
+
$(this).addClass('ie6_input_disabled');
|
78
|
+
}
|
79
|
+
});
|
80
|
+
},
|
81
|
+
// FORMALIZE.init.autofocus
|
82
|
+
autofocus: function() {
|
83
|
+
if (AUTOFOCUS_SUPPORTED || !$(':input[autofocus]').length) {
|
84
|
+
return;
|
85
|
+
}
|
86
|
+
|
87
|
+
$(':input[autofocus]:visible:first').focus();
|
88
|
+
},
|
89
|
+
// FORMALIZE.init.placeholder
|
90
|
+
placeholder: function() {
|
91
|
+
if (PLACEHOLDER_SUPPORTED || !$(':input[placeholder]').length) {
|
92
|
+
// Exit if placeholder is supported natively,
|
93
|
+
// or if page does not have any placeholder.
|
94
|
+
return;
|
95
|
+
}
|
96
|
+
|
97
|
+
FORMALIZE.misc.add_placeholder();
|
98
|
+
|
99
|
+
$(':input[placeholder]').each(function() {
|
100
|
+
var el = $(this);
|
101
|
+
var text = el.attr('placeholder');
|
102
|
+
|
103
|
+
el.focus(function() {
|
104
|
+
if (el.val() === text) {
|
105
|
+
el.val('').removeClass('placeholder_text');
|
106
|
+
}
|
107
|
+
}).blur(function() {
|
108
|
+
FORMALIZE.misc.add_placeholder();
|
109
|
+
});
|
110
|
+
|
111
|
+
// Prevent <form> from accidentally
|
112
|
+
// submitting the placeholder text.
|
113
|
+
el.closest('form').submit(function() {
|
114
|
+
if (el.val() === text) {
|
115
|
+
el.val('').removeClass('placeholder_text');
|
116
|
+
}
|
117
|
+
}).bind('reset', function() {
|
118
|
+
setTimeout(FORMALIZE.misc.add_placeholder, 50);
|
119
|
+
});
|
120
|
+
});
|
121
|
+
}
|
122
|
+
},
|
123
|
+
// FORMALIZE.misc
|
124
|
+
misc: {
|
125
|
+
// FORMALIZE.misc.add_placeholder
|
126
|
+
add_placeholder: function() {
|
127
|
+
if (PLACEHOLDER_SUPPORTED || !$(':input[placeholder]').length) {
|
128
|
+
// Exit if placeholder is supported natively,
|
129
|
+
// or if page does not have any placeholder.
|
130
|
+
return;
|
131
|
+
}
|
132
|
+
|
133
|
+
$(':input[placeholder]').each(function() {
|
134
|
+
var el = $(this);
|
135
|
+
var text = el.attr('placeholder');
|
136
|
+
|
137
|
+
if (!el.val() || el.val() === text) {
|
138
|
+
el.val(text).addClass('placeholder_text');
|
139
|
+
}
|
140
|
+
});
|
141
|
+
}
|
142
|
+
}
|
143
|
+
};
|
144
|
+
// Alias jQuery, window, document.
|
145
|
+
})(jQuery, this, this.document);
|
146
|
+
|
147
|
+
// Automatically calls all functions in FORMALIZE.init
|
148
|
+
jQuery(document).ready(function() {
|
149
|
+
FORMALIZE.go();
|
150
|
+
});
|
@@ -0,0 +1 @@
|
|
1
|
+
var FORMALIZE=function(a,b,c,d){var e="placeholder"in c.createElement("input"),f="autofocus"in c.createElement("input"),g=!!a.browser.msie&&parseInt(a.browser.version,10)===6,h=!!a.browser.msie&&parseInt(a.browser.version,10)===7;return{go:function(){for(var a in FORMALIZE.init)FORMALIZE.init[a]()},init:{full_input_size:function(){!!h&&!!a("textarea, input.input_full").length&&a("textarea, input.input_full").wrap('<span class="input_full_wrap"></span>')},ie6_skin_inputs:function(){if(!!g&&!!a("input, select, textarea").length){var b=/button|submit|reset/,c=/date|datetime|datetime-local|email|month|number|password|range|search|tel|text|time|url|week/;a("input").each(function(){var d=a(this);this.getAttribute("type").match(b)?(d.addClass("ie6_button"),this.disabled&&d.addClass("ie6_button_disabled")):this.getAttribute("type").match(c)&&(d.addClass("ie6_input"),this.disabled&&d.addClass("ie6_input_disabled"))}),a("textarea, select").each(function(){this.disabled&&a(this).addClass("ie6_input_disabled")})}},autofocus:function(){!f&&!!a(":input[autofocus]").length&&a(":input[autofocus]:visible:first").focus()},placeholder:function(){!e&&!!a(":input[placeholder]").length&&(FORMALIZE.misc.add_placeholder(),a(":input[placeholder]").each(function(){var b=a(this),c=b.attr("placeholder");b.focus(function(){b.val()===c&&b.val("").removeClass("placeholder_text")}).blur(function(){FORMALIZE.misc.add_placeholder()}),b.closest("form").submit(function(){b.val()===c&&b.val("").removeClass("placeholder_text")}).bind("reset",function(){setTimeout(FORMALIZE.misc.add_placeholder,50)})}))}},misc:{add_placeholder:function(){!e&&!!a(":input[placeholder]").length&&a(":input[placeholder]").each(function(){var b=a(this),c=b.attr("placeholder");(!b.val()||b.val()===c)&&b.val(c).addClass("placeholder_text")})}}}}(jQuery,this,this.document);jQuery(document).ready(function(){FORMALIZE.go()})
|