active_form 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data.tar.gz.sig +2 -0
- data/History.txt +4 -0
- data/License.txt +20 -0
- data/MIT-LICENSE +19 -0
- data/Manifest.txt +181 -0
- data/README.txt +1 -0
- data/Rakefile +4 -0
- data/config/hoe.rb +71 -0
- data/config/requirements.rb +17 -0
- data/init.rb +5 -0
- data/lib/active_form.rb +86 -0
- data/lib/active_form/core_extensions.rb +179 -0
- data/lib/active_form/definition.rb +72 -0
- data/lib/active_form/element.rb +50 -0
- data/lib/active_form/elements/base.rb +67 -0
- data/lib/active_form/elements/builder.rb +103 -0
- data/lib/active_form/elements/button.rb +15 -0
- data/lib/active_form/elements/checkbox.rb +18 -0
- data/lib/active_form/elements/file.rb +15 -0
- data/lib/active_form/elements/hidden.rb +9 -0
- data/lib/active_form/elements/image.rb +7 -0
- data/lib/active_form/elements/input.rb +23 -0
- data/lib/active_form/elements/password.rb +12 -0
- data/lib/active_form/elements/radio.rb +18 -0
- data/lib/active_form/elements/reset.rb +15 -0
- data/lib/active_form/elements/section.rb +37 -0
- data/lib/active_form/elements/select.rb +42 -0
- data/lib/active_form/elements/submit.rb +19 -0
- data/lib/active_form/elements/text.rb +9 -0
- data/lib/active_form/elements/textarea.rb +18 -0
- data/lib/active_form/errors.rb +73 -0
- data/lib/active_form/facets/checkbox_group.rb +11 -0
- data/lib/active_form/facets/collection_input.rb +96 -0
- data/lib/active_form/facets/radio_group.rb +11 -0
- data/lib/active_form/facets/select_date.rb +10 -0
- data/lib/active_form/facets/select_datetime.rb +10 -0
- data/lib/active_form/facets/select_day.rb +17 -0
- data/lib/active_form/facets/select_from_model.rb +60 -0
- data/lib/active_form/facets/select_hour.rb +17 -0
- data/lib/active_form/facets/select_minute.rb +17 -0
- data/lib/active_form/facets/select_month.rb +46 -0
- data/lib/active_form/facets/select_numeric_range.rb +59 -0
- data/lib/active_form/facets/select_second.rb +17 -0
- data/lib/active_form/facets/select_time.rb +10 -0
- data/lib/active_form/facets/select_timebased.rb +145 -0
- data/lib/active_form/facets/select_weekday.rb +46 -0
- data/lib/active_form/facets/select_year.rb +24 -0
- data/lib/active_form/mixins/attribute_methods.rb +33 -0
- data/lib/active_form/mixins/casting.rb +152 -0
- data/lib/active_form/mixins/collection_element_methods.rb +204 -0
- data/lib/active_form/mixins/common_methods.rb +350 -0
- data/lib/active_form/mixins/container_methods.rb +417 -0
- data/lib/active_form/mixins/css_methods.rb +70 -0
- data/lib/active_form/mixins/element_methods.rb +314 -0
- data/lib/active_form/mixins/javascript_methods.rb +99 -0
- data/lib/active_form/mixins/loader_methods.rb +72 -0
- data/lib/active_form/mixins/option_element_methods.rb +61 -0
- data/lib/active_form/mixins/validation_methods.rb +253 -0
- data/lib/active_form/validator.rb +47 -0
- data/lib/active_form/validators/alpha.rb +9 -0
- data/lib/active_form/validators/alphanum.rb +9 -0
- data/lib/active_form/validators/base.rb +132 -0
- data/lib/active_form/validators/digits.rb +9 -0
- data/lib/active_form/validators/email.rb +29 -0
- data/lib/active_form/validators/format.rb +15 -0
- data/lib/active_form/validators/length_range.rb +24 -0
- data/lib/active_form/validators/number.rb +9 -0
- data/lib/active_form/validators/option_count.rb +24 -0
- data/lib/active_form/validators/proc.rb +22 -0
- data/lib/active_form/validators/required.rb +9 -0
- data/lib/active_form/validators/set.rb +21 -0
- data/lib/active_form/validators/time_range.rb +30 -0
- data/lib/active_form/validators/uri.rb +54 -0
- data/lib/active_form/version.rb +9 -0
- data/lib/active_form/views/fieldsets.rb +34 -0
- data/lib/active_form/views/plain.rb +32 -0
- data/lib/active_form/views/tables.rb +28 -0
- data/lib/active_form/widget.rb +43 -0
- data/lib/active_form/widgets/base.rb +28 -0
- data/lib/loob/uri_validator.rb +140 -0
- data/lib/rails/acts_as_dropdown/MIT-LICENSE +20 -0
- data/lib/rails/acts_as_dropdown/acts_as_dropdown.rb +119 -0
- data/lib/rails/acts_as_dropdown/dropdown.rb +27 -0
- data/lib/rails/controller_helper.rb +19 -0
- data/lib/rails/model/loader.rb +206 -0
- data/lib/rails/view_helper.rb +20 -0
- data/samples/html/css/style.css +175 -0
- data/samples/html/js/effects.js +958 -0
- data/samples/html/js/prototype.js +2006 -0
- data/samples/html/js/validation.js +228 -0
- data/samples/html/plain_view.html +77 -0
- data/samples/html/sample001.html +158 -0
- data/samples/html/sample002.html +76 -0
- data/samples/html/sample003.html +34 -0
- data/samples/layouts/default.rhtml +18 -0
- data/samples/layouts/plain.rhtml +21 -0
- data/samples/layouts/sample003.rhtml +25 -0
- data/samples/plain_view.rb +58 -0
- data/samples/sample001.rb +111 -0
- data/samples/sample002.rb +92 -0
- data/samples/sample003.rb +30 -0
- data/script/destroy +14 -0
- data/script/generate +14 -0
- data/script/txt2html +74 -0
- data/setup.rb +1585 -0
- data/tasks/deployment.rake +34 -0
- data/tasks/environment.rake +7 -0
- data/tasks/website.rake +17 -0
- data/test/elements/test_base_element.rb +159 -0
- data/test/elements/test_builder_element.rb +81 -0
- data/test/elements/test_button_element.rb +12 -0
- data/test/elements/test_checkbox_element.rb +233 -0
- data/test/elements/test_file_element.rb +20 -0
- data/test/elements/test_hidden_element.rb +11 -0
- data/test/elements/test_image_element.rb +11 -0
- data/test/elements/test_input_element.rb +39 -0
- data/test/elements/test_password_element.rb +16 -0
- data/test/elements/test_radio_element.rb +197 -0
- data/test/elements/test_reset_element.rb +12 -0
- data/test/elements/test_section_element.rb +162 -0
- data/test/elements/test_select_element.rb +364 -0
- data/test/elements/test_submit_element.rb +12 -0
- data/test/elements/test_text_element.rb +91 -0
- data/test/elements/test_textarea_element.rb +23 -0
- data/test/facets/test_checkbox_group_element.rb +388 -0
- data/test/facets/test_radio_group_element.rb +312 -0
- data/test/facets/test_select_date_element.rb +211 -0
- data/test/facets/test_select_datetime_element.rb +56 -0
- data/test/facets/test_select_day_element.rb +37 -0
- data/test/facets/test_select_from_model_element.rb +86 -0
- data/test/facets/test_select_hour_element.rb +37 -0
- data/test/facets/test_select_minute_element.rb +52 -0
- data/test/facets/test_select_month_element.rb +79 -0
- data/test/facets/test_select_numeric_range_element.rb +14 -0
- data/test/facets/test_select_second_element.rb +48 -0
- data/test/facets/test_select_time_element.rb +148 -0
- data/test/facets/test_select_weekday_element.rb +71 -0
- data/test/facets/test_select_year_element.rb +73 -0
- data/test/fixtures/author.rb +11 -0
- data/test/fixtures/authors.yml +0 -0
- data/test/fixtures/book.rb +14 -0
- data/test/fixtures/books.yml +8 -0
- data/test/fixtures/categories.yml +0 -0
- data/test/fixtures/categorization.rb +2 -0
- data/test/fixtures/categorizations.yml +0 -0
- data/test/fixtures/category.rb +8 -0
- data/test/fixtures/publisher.rb +5 -0
- data/test/fixtures/publishers.yml +10 -0
- data/test/fixtures/schema.rb +43 -0
- data/test/rails/test_model_autodefinition.rb +121 -0
- data/test/rails/test_model_loader.rb +61 -0
- data/test/resources/elements/chunky.rb +11 -0
- data/test/resources/forms/demo.rb +5 -0
- data/test/resources/models/book.rb +8 -0
- data/test/resources/models/register_publisher.rb +5 -0
- data/test/resources/sections/demo.rb +6 -0
- data/test/resources/sections/foo.rb +6 -0
- data/test/resources/validators/foo.rb +9 -0
- data/test/resources/widgets/custom.rb +13 -0
- data/test/test_active_form.rb +1050 -0
- data/test/test_casting.rb +124 -0
- data/test/test_definition.rb +68 -0
- data/test/test_definition_class.rb +118 -0
- data/test/test_element_class.rb +201 -0
- data/test/test_helper.rb +74 -0
- data/test/test_javascript.rb +234 -0
- data/test/test_load_definition.rb +68 -0
- data/test/test_load_element.rb +35 -0
- data/test/test_load_section_element.rb +43 -0
- data/test/test_load_validator.rb +31 -0
- data/test/test_load_widget.rb +93 -0
- data/test/test_validation.rb +722 -0
- data/test/validators/test_validates_as_alpha.rb +26 -0
- data/test/validators/test_validates_as_alphanum.rb +26 -0
- data/test/validators/test_validates_as_digits.rb +26 -0
- data/test/validators/test_validates_as_email.rb +29 -0
- data/test/validators/test_validates_as_number.rb +26 -0
- data/test/validators/test_validates_as_uri.rb +128 -0
- data/test/validators/test_validates_with_format.rb +26 -0
- data/test/validators/test_validates_within_length_range.rb +46 -0
- data/test/validators/test_validates_within_set.rb +46 -0
- data/test/validators/test_validates_within_time_range.rb +53 -0
- metadata +307 -0
- metadata.gz.sig +4 -0
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Really easy field validation with Prototype
|
|
3
|
+
* http://tetlaw.id.au/view/blog/really-easy-field-validation-with-prototype
|
|
4
|
+
* Andrew Tetlaw
|
|
5
|
+
* Version 1.5.3 (2006-07-15)
|
|
6
|
+
*
|
|
7
|
+
* Copyright (c) 2006 Andrew Tetlaw
|
|
8
|
+
* http://www.opensource.org/licenses/mit-license.php
|
|
9
|
+
*/
|
|
10
|
+
Validator = Class.create();
|
|
11
|
+
|
|
12
|
+
Validator.prototype = {
|
|
13
|
+
initialize : function(className, error, test, options) {
|
|
14
|
+
this.options = Object.extend({}, options || {});
|
|
15
|
+
this._test = test ? test : function(v,elm){ return true };
|
|
16
|
+
this.error = error ? error : 'Validation failed.';
|
|
17
|
+
this.className = className;
|
|
18
|
+
},
|
|
19
|
+
test : function(v, elm) {
|
|
20
|
+
return this._test(v,elm);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
var Validation = Class.create();
|
|
25
|
+
|
|
26
|
+
Validation.prototype = {
|
|
27
|
+
initialize : function(form, options){
|
|
28
|
+
this.options = Object.extend({
|
|
29
|
+
onSubmit : true,
|
|
30
|
+
stopOnFirst : false,
|
|
31
|
+
immediate : false,
|
|
32
|
+
focusOnError : true,
|
|
33
|
+
useTitles : false,
|
|
34
|
+
onFormValidate : function(result, form) {},
|
|
35
|
+
onElementValidate : function(result, elm) {}
|
|
36
|
+
}, options || {});
|
|
37
|
+
this.form = $(form);
|
|
38
|
+
if(this.options.onSubmit) Event.observe(this.form,'submit',this.onSubmit.bind(this),false);
|
|
39
|
+
if(this.options.immediate) {
|
|
40
|
+
var useTitles = this.options.useTitles;
|
|
41
|
+
var callback = this.options.onElementValidate;
|
|
42
|
+
Form.getElements(this.form).each(function(input) { // Thanks Mike!
|
|
43
|
+
Event.observe(input, 'blur', function(ev) { Validation.validate(Event.element(ev),{useTitle : useTitles, onElementValidate : callback}); });
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
onSubmit : function(ev){
|
|
48
|
+
if(!this.validate()) Event.stop(ev);
|
|
49
|
+
},
|
|
50
|
+
validate : function() {
|
|
51
|
+
var result = false;
|
|
52
|
+
var useTitles = this.options.useTitles;
|
|
53
|
+
var callback = this.options.onElementValidate;
|
|
54
|
+
if(this.options.stopOnFirst) {
|
|
55
|
+
result = Form.getElements(this.form).all(function(elm) { return Validation.validate(elm,{useTitle : useTitles, onElementValidate : callback}); });
|
|
56
|
+
} else {
|
|
57
|
+
result = Form.getElements(this.form).collect(function(elm) { return Validation.validate(elm,{useTitle : useTitles, onElementValidate : callback}); }).all();
|
|
58
|
+
}
|
|
59
|
+
if(!result && this.options.focusOnError) {
|
|
60
|
+
Form.getElements(this.form).findAll(function(elm){return $(elm).hasClassName('validation-failed')}).first().focus()
|
|
61
|
+
}
|
|
62
|
+
this.options.onFormValidate(result, this.form);
|
|
63
|
+
return result;
|
|
64
|
+
},
|
|
65
|
+
reset : function() {
|
|
66
|
+
Form.getElements(this.form).each(Validation.reset);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
Object.extend(Validation, {
|
|
71
|
+
validate : function(elm, options){
|
|
72
|
+
options = Object.extend({
|
|
73
|
+
useTitle : false,
|
|
74
|
+
onElementValidate : function(result, elm) {}
|
|
75
|
+
}, options || {});
|
|
76
|
+
elm = $(elm);
|
|
77
|
+
var cn = elm.classNames();
|
|
78
|
+
return result = cn.all(function(value) {
|
|
79
|
+
var test = Validation.test(value,elm,options.useTitle);
|
|
80
|
+
options.onElementValidate(test, elm);
|
|
81
|
+
return test;
|
|
82
|
+
});
|
|
83
|
+
},
|
|
84
|
+
test : function(name, elm, useTitle) {
|
|
85
|
+
var v = Validation.get(name);
|
|
86
|
+
var prop = '__advice'+name.camelize();
|
|
87
|
+
if(Validation.isVisible(elm) && !v.test($F(elm), elm)) {
|
|
88
|
+
if(!elm[prop]) {
|
|
89
|
+
var advice = Validation.getAdvice(name, elm);
|
|
90
|
+
if(typeof advice == 'undefined') {
|
|
91
|
+
var errorMsg = useTitle ? ((elm && elm.title) ? elm.title : v.error) : v.error;
|
|
92
|
+
advice = '<div class="validation-advice" id="advice-' + name + '-' + Validation.getElmID(elm) +'" style="display:none">' + errorMsg + '</div>'
|
|
93
|
+
switch (elm.type.toLowerCase()) {
|
|
94
|
+
case 'checkbox':
|
|
95
|
+
case 'radio':
|
|
96
|
+
var p = elm.parentNode;
|
|
97
|
+
if(p) {
|
|
98
|
+
new Insertion.Bottom(p, advice);
|
|
99
|
+
} else {
|
|
100
|
+
new Insertion.After(elm, advice);
|
|
101
|
+
}
|
|
102
|
+
break;
|
|
103
|
+
default:
|
|
104
|
+
new Insertion.After(elm, advice);
|
|
105
|
+
}
|
|
106
|
+
advice = $('advice-' + name + '-' + Validation.getElmID(elm));
|
|
107
|
+
}
|
|
108
|
+
if(typeof Effect == 'undefined') {
|
|
109
|
+
advice.style.display = 'block';
|
|
110
|
+
} else {
|
|
111
|
+
new Effect.Appear(advice, {duration : 1 });
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
elm[prop] = true;
|
|
115
|
+
elm.removeClassName('validation-passed');
|
|
116
|
+
elm.addClassName('validation-failed');
|
|
117
|
+
return false;
|
|
118
|
+
} else {
|
|
119
|
+
var advice = Validation.getAdvice(name, elm);
|
|
120
|
+
if(typeof advice != 'undefined') advice.hide();
|
|
121
|
+
elm[prop] = '';
|
|
122
|
+
elm.removeClassName('validation-failed');
|
|
123
|
+
elm.addClassName('validation-passed');
|
|
124
|
+
return true;
|
|
125
|
+
}
|
|
126
|
+
},
|
|
127
|
+
isVisible : function(elm) {
|
|
128
|
+
while(elm.tagName != 'BODY') {
|
|
129
|
+
if(!$(elm).visible()) return false;
|
|
130
|
+
elm = elm.parentNode;
|
|
131
|
+
}
|
|
132
|
+
return true;
|
|
133
|
+
},
|
|
134
|
+
getAdvice : function(name, elm) {
|
|
135
|
+
return Try.these(
|
|
136
|
+
function(){ return $('advice-' + name + '-' + Validation.getElmID(elm)) },
|
|
137
|
+
function(){ return $('advice-' + Validation.getElmID(elm)) }
|
|
138
|
+
);
|
|
139
|
+
},
|
|
140
|
+
getElmID : function(elm) {
|
|
141
|
+
return elm.id ? elm.id : elm.name;
|
|
142
|
+
},
|
|
143
|
+
reset : function(elm) {
|
|
144
|
+
elm = $(elm);
|
|
145
|
+
var cn = elm.classNames();
|
|
146
|
+
cn.each(function(value) {
|
|
147
|
+
var prop = '__advice'+value.camelize();
|
|
148
|
+
if(elm[prop]) {
|
|
149
|
+
var advice = Validation.getAdvice(value, elm);
|
|
150
|
+
advice.hide();
|
|
151
|
+
elm[prop] = '';
|
|
152
|
+
}
|
|
153
|
+
elm.removeClassName('validation-failed');
|
|
154
|
+
elm.removeClassName('validation-passed');
|
|
155
|
+
});
|
|
156
|
+
},
|
|
157
|
+
add : function(className, error, test, options) {
|
|
158
|
+
var nv = {};
|
|
159
|
+
nv[className] = new Validator(className, error, test, options);
|
|
160
|
+
Object.extend(Validation.methods, nv);
|
|
161
|
+
},
|
|
162
|
+
addAllThese : function(validators) {
|
|
163
|
+
var nv = {};
|
|
164
|
+
$A(validators).each(function(value) {
|
|
165
|
+
nv[value[0]] = new Validator(value[0], value[1], value[2], (value.length > 3 ? value[3] : {}));
|
|
166
|
+
});
|
|
167
|
+
Object.extend(Validation.methods, nv);
|
|
168
|
+
},
|
|
169
|
+
get : function(name) {
|
|
170
|
+
return Validation.methods[name] ? Validation.methods[name] : new Validator();
|
|
171
|
+
},
|
|
172
|
+
methods : {}
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
Validation.add('IsEmpty', '', function(v) {
|
|
176
|
+
return ((v == null) || (v.length == 0)); // || /^\s+$/.test(v));
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
Validation.addAllThese([
|
|
180
|
+
['required', 'This is a required field.', function(v) {
|
|
181
|
+
return !Validation.get('IsEmpty').test(v);
|
|
182
|
+
}],
|
|
183
|
+
['validate-number', 'Please enter a valid number in this field.', function(v) {
|
|
184
|
+
return Validation.get('IsEmpty').test(v) || (!isNaN(v) && !/^\s+$/.test(v));
|
|
185
|
+
}],
|
|
186
|
+
['validate-digits', 'Please use numbers only in this field. please avoid spaces or other characters such as dots or commas.', function(v) {
|
|
187
|
+
return Validation.get('IsEmpty').test(v) || !/[^\d]/.test(v);
|
|
188
|
+
}],
|
|
189
|
+
['validate-alpha', 'Please use letters only (a-z) in this field.', function (v) {
|
|
190
|
+
return Validation.get('IsEmpty').test(v) || /^[a-zA-Z]+$/.test(v)
|
|
191
|
+
}],
|
|
192
|
+
['validate-alphanum', 'Please use only letters (a-z) or numbers (0-9) only in this field. No spaces or other characters are allowed.', function(v) {
|
|
193
|
+
return Validation.get('IsEmpty').test(v) || /^[a-zA-Z0-9]+$/.test(v)
|
|
194
|
+
}],
|
|
195
|
+
['validate-date', 'Please enter a valid date.', function(v) {
|
|
196
|
+
var test = new Date(v);
|
|
197
|
+
return Validation.get('IsEmpty').test(v) || !isNaN(test);
|
|
198
|
+
}],
|
|
199
|
+
['validate-email', 'Please enter a valid email address. For example fred@domain.com.', function (v) {
|
|
200
|
+
return Validation.get('IsEmpty').test(v) || /\w{1,}[@][\w\-]{1,}([.]([\w\-]{1,})){1,3}$/.test(v)
|
|
201
|
+
}],
|
|
202
|
+
['validate-url', 'Please enter a valid URL.', function (v) {
|
|
203
|
+
return Validation.get('IsEmpty').test(v) || /^(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(:(\d+))?\/?/i.test(v)
|
|
204
|
+
}],
|
|
205
|
+
['validate-date-au', 'Please use this date format: dd/mm/yyyy. For example 17/03/2006 for the 17th of March, 2006.', function(v) {
|
|
206
|
+
if(Validation.get('IsEmpty').test(v)) return true;
|
|
207
|
+
var regex = /^(\d{2})\/(\d{2})\/(\d{4})$/;
|
|
208
|
+
if(!regex.test(v)) return false;
|
|
209
|
+
var d = new Date(v.replace(regex, '$2/$1/$3'));
|
|
210
|
+
return ( parseInt(RegExp.$2, 10) == (1+d.getMonth()) ) &&
|
|
211
|
+
(parseInt(RegExp.$1, 10) == d.getDate()) &&
|
|
212
|
+
(parseInt(RegExp.$3, 10) == d.getFullYear() );
|
|
213
|
+
}],
|
|
214
|
+
['validate-currency-dollar', 'Please enter a valid $ amount. For example $100.00 .', function(v) {
|
|
215
|
+
// [$]1[##][,###]+[.##]
|
|
216
|
+
// [$]1###+[.##]
|
|
217
|
+
// [$]0.##
|
|
218
|
+
// [$].##
|
|
219
|
+
return Validation.get('IsEmpty').test(v) || /^\$?\-?([1-9]{1}[0-9]{0,2}(\,[0-9]{3})*(\.[0-9]{0,2})?|[1-9]{1}\d*(\.[0-9]{0,2})?|0(\.[0-9]{0,2})?|(\.[0-9]{1,2})?)$/.test(v)
|
|
220
|
+
}],
|
|
221
|
+
['validate-one-required', 'Please select one of the above options.', function (v,elm) {
|
|
222
|
+
var p = elm.parentNode;
|
|
223
|
+
var options = p.getElementsByTagName('INPUT');
|
|
224
|
+
return $A(options).any(function(elm) {
|
|
225
|
+
return $F(elm);
|
|
226
|
+
});
|
|
227
|
+
}]
|
|
228
|
+
]);
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
|
2
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
|
3
|
+
|
|
4
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
|
5
|
+
<head>
|
|
6
|
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
|
7
|
+
<title>Plain View Sample</title>
|
|
8
|
+
<script src="js/prototype.js" type="text/javascript"></script>
|
|
9
|
+
<script src="js/effects.js" type="text/javascript"></script>
|
|
10
|
+
<script src="js/validation.js" type="text/javascript" ></script>
|
|
11
|
+
<style type="text/css" media="screen">
|
|
12
|
+
label { display: block };
|
|
13
|
+
.elem_text input, .elem_password input { display: block; }
|
|
14
|
+
</style>
|
|
15
|
+
</head>
|
|
16
|
+
<body>
|
|
17
|
+
<div id="container">
|
|
18
|
+
<form action="#my_form" class="active_form" id="my_form" method="post">
|
|
19
|
+
<h3>Plain View Sample</h3>
|
|
20
|
+
<div class="section">
|
|
21
|
+
<h4 class="section" id="section-my_form_person-title">Your details</h4>
|
|
22
|
+
<div id="section-my_form_person">
|
|
23
|
+
<div class="elem_text required" id="elem_my_form_person_first_name">
|
|
24
|
+
<label class="required" for="my_form_person_first_name">First Name</label>
|
|
25
|
+
<input class="required" id="my_form_person_first_name" name="my_form[person][first_name]" size="30" type="text"/>
|
|
26
|
+
</div>
|
|
27
|
+
<div class="elem_text required" id="elem_my_form_person_last_name">
|
|
28
|
+
<label class="required" for="my_form_person_last_name">Last Name</label>
|
|
29
|
+
<input class="required" id="my_form_person_last_name" name="my_form[person][last_name]" size="30" type="text"/>
|
|
30
|
+
</div>
|
|
31
|
+
<div class="elem_password required" id="elem_my_form_person_password">
|
|
32
|
+
<label class="required" for="my_form_person_password">Password</label>
|
|
33
|
+
<input class="required" id="my_form_person_password" name="my_form[person][password]" size="30" type="password"/>
|
|
34
|
+
</div>
|
|
35
|
+
<div class="elem_password required" id="elem_my_form_person_password_confirm">
|
|
36
|
+
<label class="required" for="my_form_person_password_confirm">Password Confirm</label>
|
|
37
|
+
<input class="required" id="my_form_person_password_confirm" name="my_form[person][password_confirm]" size="30" type="password"/>
|
|
38
|
+
</div>
|
|
39
|
+
<div class="elem_select" id="elem_my_form_person_country">
|
|
40
|
+
<label for="my_form_person_country">Country</label>
|
|
41
|
+
<select class="elem_select" id="my_form_person_country" name="my_form[person][country]">
|
|
42
|
+
<option value="nl">Nederland</option>
|
|
43
|
+
<option value="be">België</option>
|
|
44
|
+
</select>
|
|
45
|
+
</div>
|
|
46
|
+
<div class="elem_submit" id="elem_my_form_person_submit">
|
|
47
|
+
<input class="elem_submit" id="my_form_person_submit" name="my_form[person][submit]" type="submit" value="Send"/>
|
|
48
|
+
</div>
|
|
49
|
+
</div>
|
|
50
|
+
</div>
|
|
51
|
+
<div class="section">
|
|
52
|
+
<h4 class="section" id="section-my_form_message-title">Your message</h4>
|
|
53
|
+
<div id="section-my_form_message">
|
|
54
|
+
<div class="elem_text required" id="elem_my_form_message_subject">
|
|
55
|
+
<label class="required" for="my_form_message_subject">Subject</label>
|
|
56
|
+
<input class="required" id="my_form_message_subject" name="my_form[message][subject]" size="30" type="text"/>
|
|
57
|
+
</div>
|
|
58
|
+
<div class="elem_textarea required" id="elem_my_form_message_message">
|
|
59
|
+
<label class="required" for="my_form_message_message">Message</label>
|
|
60
|
+
<textarea class="required" cols="10" id="my_form_message_message" name="my_form[message][message]" rows="5"></textarea>
|
|
61
|
+
</div>
|
|
62
|
+
<div class="elem_submit" id="elem_my_form_message_submit">
|
|
63
|
+
<input class="elem_submit" id="my_form_message_submit" name="my_form[message][submit]" type="submit" value="Send"/>
|
|
64
|
+
</div>
|
|
65
|
+
</div>
|
|
66
|
+
</div>
|
|
67
|
+
<script type="text/javascript" charset="utf-8">//<![CDATA[
|
|
68
|
+
var fform_my_form=$('my_form');if(fform_my_form){
|
|
69
|
+
new Validation(fform_my_form, {stopOnFirst:false, useTitles:true});
|
|
70
|
+
}
|
|
71
|
+
//]]>
|
|
72
|
+
</script>
|
|
73
|
+
</form>
|
|
74
|
+
|
|
75
|
+
</div>
|
|
76
|
+
</body>
|
|
77
|
+
</html>
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
|
2
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
|
3
|
+
|
|
4
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
|
5
|
+
<head>
|
|
6
|
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
|
7
|
+
<title>Sample 001</title>
|
|
8
|
+
<script src="js/prototype.js" type="text/javascript"></script>
|
|
9
|
+
<script src="js/effects.js" type="text/javascript"></script>
|
|
10
|
+
<script src="js/validation.js" type="text/javascript" ></script>
|
|
11
|
+
<link rel="stylesheet" type="text/css" href="css/style.css" />
|
|
12
|
+
</head>
|
|
13
|
+
<body>
|
|
14
|
+
<div id="container">
|
|
15
|
+
<form action="#myform" class="active_form" id="myform" method="post">
|
|
16
|
+
<table>
|
|
17
|
+
<thead>
|
|
18
|
+
<tr>
|
|
19
|
+
<th colspan="2">Myform</th>
|
|
20
|
+
</tr>
|
|
21
|
+
</thead>
|
|
22
|
+
<tbody>
|
|
23
|
+
<tr class="header">
|
|
24
|
+
<td colspan="2">
|
|
25
|
+
<h3 onclick="$('section-myform_person').toggle()">
|
|
26
|
+
<span class="label">Your details</span>
|
|
27
|
+
</h3>
|
|
28
|
+
</td>
|
|
29
|
+
</tr>
|
|
30
|
+
<tr class="advice">
|
|
31
|
+
<td colspan="2">
|
|
32
|
+
<div class="validation-advice advice-required" id="advice-required-myform_person_first_name" style="display: none">First Name: can't be blank</div>
|
|
33
|
+
<div class="validation-advice advice-required" id="advice-required-myform_person_last_name" style="display: none">Last Name: can't be blank</div>
|
|
34
|
+
<div class="validation-advice advice-required" id="advice-required-myform_person_password" style="display: none">Password: can't be blank</div>
|
|
35
|
+
<div class="validation-advice advice-required" id="advice-required-myform_person_password_confirm" style="display: none">Password Confirm: can't be blank</div>
|
|
36
|
+
</td>
|
|
37
|
+
</tr>
|
|
38
|
+
<tr>
|
|
39
|
+
<td>
|
|
40
|
+
<div id="section-myform_person">
|
|
41
|
+
<table style="background: lightblue;">
|
|
42
|
+
<tr class="label">
|
|
43
|
+
<td colspan="2">
|
|
44
|
+
<label class="required" for="myform_person_first_name">First Name</label>
|
|
45
|
+
</td>
|
|
46
|
+
</tr>
|
|
47
|
+
<tr class="elem_text required" id="elem_myform_person_first_name">
|
|
48
|
+
<td class="elem" colspan="2">
|
|
49
|
+
<input class="required" id="myform_person_first_name" name="myform[person][first_name]" type="text"/>
|
|
50
|
+
</td>
|
|
51
|
+
</tr>
|
|
52
|
+
<tr class="label">
|
|
53
|
+
<td colspan="2">
|
|
54
|
+
<label class="required" for="myform_person_last_name">Last Name</label>
|
|
55
|
+
</td>
|
|
56
|
+
</tr>
|
|
57
|
+
<tr class="elem_text required" id="elem_myform_person_last_name">
|
|
58
|
+
<td class="elem" colspan="2">
|
|
59
|
+
<input class="required" id="myform_person_last_name" name="myform[person][last_name]" type="text"/>
|
|
60
|
+
</td>
|
|
61
|
+
</tr>
|
|
62
|
+
<tr class="label">
|
|
63
|
+
<td colspan="2">
|
|
64
|
+
<label class="required" for="myform_person_password">Password</label>
|
|
65
|
+
</td>
|
|
66
|
+
</tr>
|
|
67
|
+
<tr class="elem_password required" id="elem_myform_person_password">
|
|
68
|
+
<td class="elem" colspan="2">
|
|
69
|
+
<input class="required" id="myform_person_password" name="myform[person][password]" type="password"/>
|
|
70
|
+
</td>
|
|
71
|
+
</tr>
|
|
72
|
+
<tr class="label">
|
|
73
|
+
<td colspan="2">
|
|
74
|
+
<label class="required" for="myform_person_password_confirm">Password Confirm</label>
|
|
75
|
+
</td>
|
|
76
|
+
</tr>
|
|
77
|
+
<tr class="elem_password required" id="elem_myform_person_password_confirm">
|
|
78
|
+
<td class="elem" colspan="2">
|
|
79
|
+
<input class="required" id="myform_person_password_confirm" name="myform[person][password_confirm]" type="password"/>
|
|
80
|
+
</td>
|
|
81
|
+
</tr>
|
|
82
|
+
<tr id="elem-myform_person_country">
|
|
83
|
+
<td class="label">
|
|
84
|
+
<label for="myform_person_country">Country</label>
|
|
85
|
+
</td>
|
|
86
|
+
<td class="elem_select">
|
|
87
|
+
<select class="elem_select" id="myform_person_country" name="myform[person][country]">
|
|
88
|
+
<option value="nl">Nederland</option>
|
|
89
|
+
<option value="be">België</option>
|
|
90
|
+
</select>
|
|
91
|
+
</td>
|
|
92
|
+
</tr>
|
|
93
|
+
<tr id="elem-myform_person_submit">
|
|
94
|
+
<td class="elem_submit" colspan="2">
|
|
95
|
+
<input class="elem_submit" id="myform_person_submit" name="myform[person][submit]" type="submit" value="Send"/>
|
|
96
|
+
</td>
|
|
97
|
+
</tr>
|
|
98
|
+
</table>
|
|
99
|
+
</div>
|
|
100
|
+
</td>
|
|
101
|
+
</tr>
|
|
102
|
+
<tr class="header">
|
|
103
|
+
<td colspan="2">
|
|
104
|
+
<h3 onclick="$('section-myform_message').toggle()">
|
|
105
|
+
<span class="label">Your message</span>
|
|
106
|
+
</h3>
|
|
107
|
+
</td>
|
|
108
|
+
</tr>
|
|
109
|
+
<tr class="advice">
|
|
110
|
+
<td colspan="2">
|
|
111
|
+
<div class="validation-advice advice-required" id="advice-required-myform_message_subject" style="display: none">Subject: can't be blank</div>
|
|
112
|
+
<div class="validation-advice advice-required" id="advice-required-myform_message_message" style="display: none">Message: can't be blank</div>
|
|
113
|
+
</td>
|
|
114
|
+
</tr>
|
|
115
|
+
<tr>
|
|
116
|
+
<td>
|
|
117
|
+
<div id="section-myform_message">
|
|
118
|
+
<table style="background: lightblue;">
|
|
119
|
+
<tr id="elem-myform_message_subject">
|
|
120
|
+
<td class="label">
|
|
121
|
+
<label class="required" for="myform_message_subject">Subject</label>
|
|
122
|
+
</td>
|
|
123
|
+
<td class="elem_text required">
|
|
124
|
+
<input class="required" id="myform_message_subject" name="myform[message][subject]" type="text"/>
|
|
125
|
+
</td>
|
|
126
|
+
</tr>
|
|
127
|
+
<tr class="label">
|
|
128
|
+
<td colspan="2">
|
|
129
|
+
<label class="required" for="myform_message_message">Message</label>
|
|
130
|
+
</td>
|
|
131
|
+
</tr>
|
|
132
|
+
<tr class="elem_textarea required" id="elem_myform_message_message">
|
|
133
|
+
<td class="elem" colspan="2">
|
|
134
|
+
<textarea class="required" cols="10" id="myform_message_message" name="myform[message][message]" rows="5"></textarea>
|
|
135
|
+
</td>
|
|
136
|
+
</tr>
|
|
137
|
+
<tr id="elem-myform_message_submit">
|
|
138
|
+
<td class="elem_submit" colspan="2">
|
|
139
|
+
<input class="elem_submit" id="myform_message_submit" name="myform[message][submit]" type="submit" value="Send"/>
|
|
140
|
+
</td>
|
|
141
|
+
</tr>
|
|
142
|
+
</table>
|
|
143
|
+
</div>
|
|
144
|
+
</td>
|
|
145
|
+
</tr>
|
|
146
|
+
</tbody>
|
|
147
|
+
</table>
|
|
148
|
+
<script type="text/javascript" charset="utf-8">//<![CDATA[
|
|
149
|
+
var fform_myform=$('myform');if(fform_myform){
|
|
150
|
+
new Validation(fform_myform, {stopOnFirst:false, useTitles:true});
|
|
151
|
+
}
|
|
152
|
+
//]]>
|
|
153
|
+
</script>
|
|
154
|
+
</form>
|
|
155
|
+
|
|
156
|
+
</div>
|
|
157
|
+
</body>
|
|
158
|
+
</html>
|