rails-ujs-form 0.1.0
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/README.md +4 -0
- data/Rakefile +3 -0
- data/app/assets/javascripts/ujs-form/rails_form.js +70 -0
- data/app/assets/javascripts/ujs-form/show-errors.js +24 -0
- data/app/assets/javascripts/ujs-form.js +1 -0
- data/lib/rails-ujs-form/version.rb +3 -0
- data/lib/rails-ujs-form.rb +4 -0
- data/rails-ujs-form.gemspec +18 -0
- metadata +85 -0
data/README.md
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
/**
|
2
|
+
* A small jQuery plugin to add 'rails-aware' form functionality.
|
3
|
+
*
|
4
|
+
* Basically, this understands the 'standard' rails way of structuring forms
|
5
|
+
* and makes some functions available to manipulate that.
|
6
|
+
*/
|
7
|
+
(function($) {
|
8
|
+
$.fn.rails_form = function(method) {
|
9
|
+
if (methods[method]) {
|
10
|
+
return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
|
11
|
+
} else {
|
12
|
+
$.error('Method ' + method + ' does not exist on rails_form');
|
13
|
+
}
|
14
|
+
};
|
15
|
+
|
16
|
+
// in these 'this' is the $form
|
17
|
+
var methods = {
|
18
|
+
fields: function() {
|
19
|
+
return this.find('input, textarea, select');
|
20
|
+
},
|
21
|
+
|
22
|
+
error_fields: function() {
|
23
|
+
var $form = this;
|
24
|
+
return this.rails_form('fields').filter(function() {
|
25
|
+
return $form.rails_form('has_error', $(this));
|
26
|
+
});
|
27
|
+
},
|
28
|
+
|
29
|
+
submits: function() {
|
30
|
+
return this.find('input[type=submit], button[type=submit]');
|
31
|
+
},
|
32
|
+
|
33
|
+
label_for: function($field) {
|
34
|
+
return this.find('label[for=' + $field.attr('id') + ']');
|
35
|
+
},
|
36
|
+
|
37
|
+
error_on: function($field) {
|
38
|
+
return this.rails_form('label_for', $field).parents('.field_with_errors').next('.formError');
|
39
|
+
},
|
40
|
+
|
41
|
+
has_error: function($field) {
|
42
|
+
return $field.parent('.field_with_errors').length > 0;
|
43
|
+
},
|
44
|
+
|
45
|
+
clear_error: function($field) {
|
46
|
+
var id = $field.attr('id');
|
47
|
+
if (this.rails_form('has_error', $field)) { $field.unwrap() }
|
48
|
+
|
49
|
+
this.find('.field_with_errors label[for=' + id + ']')
|
50
|
+
.unwrap()
|
51
|
+
.next('.formError').remove();
|
52
|
+
},
|
53
|
+
|
54
|
+
add_error: function($field, error) {
|
55
|
+
var id = $field.attr('id');
|
56
|
+
$field.wrap('<div class="field_with_errors">');
|
57
|
+
this.find('label[for=' + id + ']')
|
58
|
+
.after('<div class="formError">' + error + '</div>')
|
59
|
+
.wrap('<div class="field_with_errors">');
|
60
|
+
},
|
61
|
+
|
62
|
+
// display standard errors as returned by JSON
|
63
|
+
set_errors: function(errors) {
|
64
|
+
for (var name in errors) {
|
65
|
+
this.rails_form('add_error', this.fields().filter('[name*=' + name + ']'), errors[name][0]);
|
66
|
+
}
|
67
|
+
}
|
68
|
+
};
|
69
|
+
|
70
|
+
}(jQuery));
|
@@ -0,0 +1,24 @@
|
|
1
|
+
(function($) {
|
2
|
+
var showErrorSelector = 'form[data-show-errors]';
|
3
|
+
|
4
|
+
$(showErrorSelector).live('ajax:error', function(event, request, status, error) {
|
5
|
+
console.log(request);
|
6
|
+
// CLIENT ERROR -- server-side validation failed. -- FIXME -should this be 422 only?
|
7
|
+
if (request.status >= 400 && request.status < 500) {
|
8
|
+
// if data is html, we replace this content of the form with the content
|
9
|
+
// of the form that we've just received back
|
10
|
+
var contentType = request.getResponseHeader('Content-Type');
|
11
|
+
if (contentType =~ /html/) {
|
12
|
+
// wrap in a div incase there are a bunch of floating elements, pull the form out
|
13
|
+
var $new_form = $('<div>' + request.responseText + '</div>').find('#' + $(this).attr('id'));
|
14
|
+
$(this).html($new_form.html());
|
15
|
+
|
16
|
+
} else if (contentType =~ /json/) {
|
17
|
+
// we will be receiving an error object back, we can pass it straight into rails_form.js
|
18
|
+
this.rails_form('set_errors', $.parseJSON(request.responseText));
|
19
|
+
} else {
|
20
|
+
throw "ujs-form/show-errors: Don't know how to handle dataType " + request.dataType;
|
21
|
+
}
|
22
|
+
}
|
23
|
+
});
|
24
|
+
}(jQuery));
|
@@ -0,0 +1 @@
|
|
1
|
+
//= require_tree ./ujs-form
|
@@ -0,0 +1,18 @@
|
|
1
|
+
$:.push File.expand_path("../lib", __FILE__)
|
2
|
+
require "rails-ujs-form/version"
|
3
|
+
|
4
|
+
Gem::Specification.new do |s|
|
5
|
+
s.name = 'rails-ujs-form'
|
6
|
+
s.version = RailsUjsForm::VERSION
|
7
|
+
s.platform = Gem::Platform::RUBY
|
8
|
+
s.author = 'Tom Coleman'
|
9
|
+
s.email = 'tom@percolatestudio.com'
|
10
|
+
s.summary = 'Unobtrusive JS Form extensions'
|
11
|
+
|
12
|
+
s.add_dependency 'jquery-rails'
|
13
|
+
|
14
|
+
s.files = `git ls-files`.split("\n")
|
15
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
16
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
17
|
+
s.require_paths = ["lib"]
|
18
|
+
end
|
metadata
ADDED
@@ -0,0 +1,85 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rails-ujs-form
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 27
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
- 0
|
10
|
+
version: 0.1.0
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Tom Coleman
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2011-10-14 00:00:00 Z
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: jquery-rails
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
hash: 3
|
29
|
+
segments:
|
30
|
+
- 0
|
31
|
+
version: "0"
|
32
|
+
type: :runtime
|
33
|
+
version_requirements: *id001
|
34
|
+
description:
|
35
|
+
email: tom@percolatestudio.com
|
36
|
+
executables: []
|
37
|
+
|
38
|
+
extensions: []
|
39
|
+
|
40
|
+
extra_rdoc_files: []
|
41
|
+
|
42
|
+
files:
|
43
|
+
- README.md
|
44
|
+
- Rakefile
|
45
|
+
- app/assets/javascripts/ujs-form.js
|
46
|
+
- app/assets/javascripts/ujs-form/rails_form.js
|
47
|
+
- app/assets/javascripts/ujs-form/show-errors.js
|
48
|
+
- lib/rails-ujs-form.rb
|
49
|
+
- lib/rails-ujs-form/version.rb
|
50
|
+
- rails-ujs-form.gemspec
|
51
|
+
homepage:
|
52
|
+
licenses: []
|
53
|
+
|
54
|
+
post_install_message:
|
55
|
+
rdoc_options: []
|
56
|
+
|
57
|
+
require_paths:
|
58
|
+
- lib
|
59
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
60
|
+
none: false
|
61
|
+
requirements:
|
62
|
+
- - ">="
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
hash: 3
|
65
|
+
segments:
|
66
|
+
- 0
|
67
|
+
version: "0"
|
68
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
69
|
+
none: false
|
70
|
+
requirements:
|
71
|
+
- - ">="
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
hash: 3
|
74
|
+
segments:
|
75
|
+
- 0
|
76
|
+
version: "0"
|
77
|
+
requirements: []
|
78
|
+
|
79
|
+
rubyforge_project:
|
80
|
+
rubygems_version: 1.8.10
|
81
|
+
signing_key:
|
82
|
+
specification_version: 3
|
83
|
+
summary: Unobtrusive JS Form extensions
|
84
|
+
test_files: []
|
85
|
+
|