Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Newer
Older
100644 350 lines (251 sloc) 13.103 kb
09d957d textilized the README so that it looks pretty pretty on GitHub
Justin French authored
1 h1. Formtastic Sneaky Preview
dcf8beb Initial Commit
Justin French authored
2
3 Formtastic is a Rails FormBuilder DSL (with some other goodies) to make it far easier to create beautiful, semantically rich, syntactically awesome, readily stylable and wonderfully accessible HTML forms in your Rails applications.
4
09d957d textilized the README so that it looks pretty pretty on GitHub
Justin French authored
5 h2. The Story
dcf8beb Initial Commit
Justin French authored
6
2d4a72b Justin French big update to the README
authored
7 One day, I finally had enough, so I opened up my text editor, and wrote a DSL for how I'd like to author forms:
dcf8beb Initial Commit
Justin French authored
8
09d957d textilized the README so that it looks pretty pretty on GitHub
Justin French authored
9 <pre>
7e3874a Justin French trying to fix README formatting of <'s at the start of lines
authored
10 <% semantic_form_for @article do |form| %>
353618e Mark Mansour Extending Formtastic can be done by overriding the semantic_form_builder...
markmansour authored
11
0b370ba Justin French Renamed input_field_set() to just inputs() and added a shorthand version...
authored
12 <% form.inputs :name => "Basic" do %>
353618e Mark Mansour Extending Formtastic can be done by overriding the semantic_form_builder...
markmansour authored
13 <%= form.input :title %>
14 <%= form.input :body %>
1db292f Jeff Smick update README to reflect association attribute changes
sprsquish authored
15 <%= form.input :section %>
16 <%= form.input :publication_state, :as => :radio %>
17 <%= form.input :author %>
353618e Mark Mansour Extending Formtastic can be done by overriding the semantic_form_builder...
markmansour authored
18 <%= form.input :allow_comments, :label => "Allow commenting on this article" %>
19 <% end %>
20
0b370ba Justin French Renamed input_field_set() to just inputs() and added a shorthand version...
authored
21 <% form.inputs :name => "Advanced" do %>
353618e Mark Mansour Extending Formtastic can be done by overriding the semantic_form_builder...
markmansour authored
22 <%= form.input :keywords, :required => false, :hint => "Example: ruby, rails, forms" %>
7e3874a Justin French trying to fix README formatting of <'s at the start of lines
authored
23 <%= form.input :extract, :required => false %>
24 <%= form.input :description, :required => false %>
353618e Mark Mansour Extending Formtastic can be done by overriding the semantic_form_builder...
markmansour authored
25 <%= form.input :url_title, :required => false %>
7e3874a Justin French trying to fix README formatting of <'s at the start of lines
authored
26 <% end %>
27
353618e Mark Mansour Extending Formtastic can be done by overriding the semantic_form_builder...
markmansour authored
28 <% form.buttons do %>
29 <%= form.commit_button %>
7e3874a Justin French trying to fix README formatting of <'s at the start of lines
authored
30 <% end %>
09d957d textilized the README so that it looks pretty pretty on GitHub
Justin French authored
31
dcf8beb Initial Commit
Justin French authored
32 <% end %>
09d957d textilized the README so that it looks pretty pretty on GitHub
Justin French authored
33 </pre>
34
6734cfd Justin French sme typos and cleanups in the readme
authored
35 I also wrote the accompanying HTML output I expected, favoring something very similar to the fieldsets, lists and other semantic elements Aaron Gustafson presented in "Learning to Love Forms":http://www.slideshare.net/AaronGustafson/learning-to-love-forms-web-directions-south-07, hacking together enough Ruby to prove it could be done.
dcf8beb Initial Commit
Justin French authored
36
37
15e0bd9 updated the README a little to match last night's slides
Justin French authored
38 h2. Why?
39
40 * web apps = lots of forms
41 * forms are so friggin' boring to code
42 * semantically rich & accessible forms really are possible
43 * the "V" is way behind the "M" and "C" in Rails' MVC – it's the ugly sibling
dcf8beb Initial Commit
Justin French authored
44 * best practices and common patterns have to start somewhere
15e0bd9 updated the README a little to match last night's slides
Justin French authored
45 * i need a challenge
dcf8beb Initial Commit
Justin French authored
46
47
15e0bd9 updated the README a little to match last night's slides
Justin French authored
48 h2. Opinions
49
50 * it should be easier to do things the right way than the wrong way
51 * sometimes _more mark-up_ is better
52 * elements and attribute hooks are _gold_ for stylesheet authors
53 * make the common things we do easy, yet still ensure uncommon things are still possible
54
dcf8beb Initial Commit
Justin French authored
55
5a39443 Justin French bulking up the documentation and readme with the different inputs availa...
authored
56 h2. The Available Inputs
57
1db292f Jeff Smick update README to reflect association attribute changes
sprsquish authored
58 * :select (a select menu for belongs_to associations) - default for association attributes (belongs_to, has_many, has_and_belongs_to_many)
59 * :radio (a set of radio inputs for belongs_to associations) - alternative association attributes (belongs_to)
5a39443 Justin French bulking up the documentation and readme with the different inputs availa...
authored
60 * :password (a password input) - default for :string column types with 'password' in the method name
61 * :text (a textarea) - default for :text column types
62 * :date (a date select) - default for :date column types
63 * :datetime (a date and time select) - default for :datetime and :timestamp column types
64 * :time (a time select) - default for :time column types
65 * :boolean (a checkbox) - default for :boolean column types
2007904 Justin French added a new boolean_select input, for boolean fields that work better wi...
authored
66 * :boolean_select (a yes/no select box)
5a39443 Justin French bulking up the documentation and readme with the different inputs availa...
authored
67 * :string (a text field) - default for :string column types
68 * :numeric (a text field, like string) - default for :integer, :float and :decimal column types
945b76c Jeff Smick Add detection for Paperclip and AttachmentFu attributes.
sprsquish authored
69 * :file (a file field) - default for paperclip or attachment_fu attributes
5a39443 Justin French bulking up the documentation and readme with the different inputs availa...
authored
70
827d9ac Justin French typo fix
authored
71 The documentation is pretty good for each of these (what it does, what the output is, etc) so go check it out.
5a39443 Justin French bulking up the documentation and readme with the different inputs availa...
authored
72
73
2d4a72b Justin French big update to the README
authored
74 h3. Fields without database columns and non-ActiveRecord objects
5a39443 Justin French bulking up the documentation and readme with the different inputs availa...
authored
75
76 Formtastic is pretty tightly coupled to ActiveRecord database columns, but it will at least _attempt_ to play nicely with your models other methods (like a virtual column 'full_name' which is split into first_name and last_name in a before save callback), and I'd like this to continue and improve.
77
78
79 h2. Configuration
80
81 If you wish, put something like this in config/initializers/formtastic_config.rb:
82
83 <pre>
2d4a72b Justin French big update to the README
authored
84 # Should all fields be considered "required" by default
85 # Defaults to true, see ValidationReflection notes below
ee26f18 Jeff Smick Remove JustinFrench namespace and add deprecation message for anyone sti...
sprsquish authored
86 Formtastic::SemanticFormBuilder.all_fields_required_by_default = false
2d4a72b Justin French big update to the README
authored
87
88 # Set the string that will be appended to the labels/fieldsets which are required
89 # Default is '<abbr title="required">*</abbr>'
ee26f18 Jeff Smick Remove JustinFrench namespace and add deprecation message for anyone sti...
sprsquish authored
90 Formtastic::SemanticFormBuilder.required_string = "(required)"
2d4a72b Justin French big update to the README
authored
91
92 # Set the string that will be appended to the labels/fieldsets which are optional
93 # Defaults to an empty string ("")
ee26f18 Jeff Smick Remove JustinFrench namespace and add deprecation message for anyone sti...
sprsquish authored
94 Formtastic::SemanticFormBuilder.optional_string = "(optional)"
5d072fa Andy Pearson Updating README to include a note about configuring inline errors
andypearson authored
95
2d4a72b Justin French big update to the README
authored
96 # Set the way inline errors will be displayed.
d3d53d0 Justin French typo fix in README
authored
97 # Defaults to :sentence, valid options are :sentence, :list and :none
2d4a72b Justin French big update to the README
authored
98 Formtastic::SemanticFormBuilder.inline_errors = :list
282b28c Jeff Smick Add I18n support
sprsquish authored
99
2d4a72b Justin French big update to the README
authored
100 # Set the method to call on label text to transform or format it for human-friendly reading
101 # Defaults to :titleize, but you might want :humanize, :to_s, etc
282b28c Jeff Smick Add I18n support
sprsquish authored
102 Formtastic::SemanticFormBuilder.label_str_method = :titleize
30cfc86 Jeff Smick Add Formtastic::SemanticFormBuilder.collection_label_methods to allow fo...
sprsquish authored
103
2d4a72b Justin French big update to the README
authored
104 # Set the array of methods to try calling on parent objects in :select and :radio inputs
105 # for the text inside each @<option>@ tag or alongside each radio @<input>@. The first method
106 # that is found on the object will be used.
107 # Defaults to ["to_label", "display_name", "full_name", "name", "title", "username", "login", "value", "to_s"]
108 Formtastic::SemanticFormBuilder.collection_label_methods = ["title_and_author", "display_name", "login", "to_s"]
5a39443 Justin French bulking up the documentation and readme with the different inputs availa...
authored
109 </pre>
110
111
2d4a72b Justin French big update to the README
authored
112 h2. ValidationReflection plugin
113
114 If you have the "ValidationReflection":http://github.com/redinger/validation_reflection plugin installed, you won't have to specify the :required option (it checks the validations on the model instead).
115
5a39443 Justin French bulking up the documentation and readme with the different inputs availa...
authored
116
09d957d textilized the README so that it looks pretty pretty on GitHub
Justin French authored
117 h2. Status
dcf8beb Initial Commit
Justin French authored
118
2d4a72b Justin French big update to the README
authored
119 *THIS IS DEFINITELY NOT PRODUCTION-READY. THINGS ARE GOING TO CHANGE A BIT BEFORE WE HIT 1.0.*
dcf8beb Initial Commit
Justin French authored
120
2d4a72b Justin French big update to the README
authored
121 It's opinionated, incomplete, a work in progress and a bit rough around the edges stiull, but I hope you try it and offer some suggestions and improvements any way.
122
123 On the plus side, it has a comprehensive spec suite and contributions from at least ten independent developers.
dcf8beb Initial Commit
Justin French authored
124
125
25d0c7a Justin French fleshed out a 'roadmap to 1.0' in the README
authored
126 h2. Roadmap to 1.0
dcf8beb Initial Commit
Justin French authored
127
2d4a72b Justin French big update to the README
authored
128 "Wishlist":http://wiki.github.com/justinfrench/formtastic/wishlist on the wiki is serving as pretty good documentation for the roadmap to 1.0 and beyond right now, but I'll work on getting a real tracking system or something happening soon.
c5d02e6 Justin French link to the wiki for the roadmap to 1.0 in README
authored
129
dcf8beb Initial Commit
Justin French authored
130
09d957d textilized the README so that it looks pretty pretty on GitHub
Justin French authored
131 h2. Usage
dcf8beb Initial Commit
Justin French authored
132
133 The smallest example:
134
09d957d textilized the README so that it looks pretty pretty on GitHub
Justin French authored
135 <pre>
92e5fc3 Justin French Updates to the README with better examples and output samples.
authored
136 <% semantic_form_for @post do |form| %>
0b370ba Justin French Renamed input_field_set() to just inputs() and added a shorthand version...
authored
137 <% form.inputs do %>
92e5fc3 Justin French Updates to the README with better examples and output samples.
authored
138 <%= form.input :title %>
139 <%= form.input :body %>
1db292f Jeff Smick update README to reflect association attribute changes
sprsquish authored
140 <%= form.input :section, :as => :radio %>
92e5fc3 Justin French Updates to the README with better examples and output samples.
authored
141 <% end %>
142 <% form.buttons do %>
143 <%= form.commit_button %>
7e3874a Justin French trying to fix README formatting of <'s at the start of lines
authored
144 <% end %>
dcf8beb Initial Commit
Justin French authored
145 <% end %>
09d957d textilized the README so that it looks pretty pretty on GitHub
Justin French authored
146 </pre>
dcf8beb Initial Commit
Justin French authored
147
2d4a72b Justin French big update to the README
authored
148 Yes, *it'll even handle belongs_to associations*, rendering a radio list or select box with the right set of choices! The output is something like:
dcf8beb Initial Commit
Justin French authored
149
09d957d textilized the README so that it looks pretty pretty on GitHub
Justin French authored
150 <pre>
92e5fc3 Justin French Updates to the README with better examples and output samples.
authored
151 <form action="/posts" class="formtastic new_post" id="new_post" method="post">
09d957d textilized the README so that it looks pretty pretty on GitHub
Justin French authored
152 <fieldset class="inputs">
153 <ol>
92e5fc3 Justin French Updates to the README with better examples and output samples.
authored
154 <li class="string required" id="post_title_input">
155 <label for="post_title">Title<abbr title="required">*</abbr></label>
156 <input id="post_title" maxlength="255" name="post[title]" size="50" type="text" />
157 </li>
158 <li class="text optional" id="post_body_input">
159 <label for="post_body">Body</label>
160 <textarea cols="40" id="post_body" name="post[body]" rows="20"></textarea>
09d957d textilized the README so that it looks pretty pretty on GitHub
Justin French authored
161 </li>
92e5fc3 Justin French Updates to the README with better examples and output samples.
authored
162 <li class="radio required" id="post_author_id_input">
163 <fieldset>
164 <legend><span>Author<abbr title="required">*</abbr></span></legend>
165 <ol>
166 <li>
167 <label for="post_author_id_37">
168 <input id="post_author_id_37" name="post[author_id]" type="radio" value="37" />
169 Fred Smith
170 </label>
171 </li>
172 <li>
173 <label for="post_author_id_42">
174 <input id="post_author_id_42" name="post[author_id]" type="radio" value="42" />
175 Bob Rock
176 </label>
177 </li>
178 </ol>
179 </fieldset>
09d957d textilized the README so that it looks pretty pretty on GitHub
Justin French authored
180 </li>
181 </ol>
dcf8beb Initial Commit
Justin French authored
182 </fieldset>
92e5fc3 Justin French Updates to the README with better examples and output samples.
authored
183 <fieldset class="buttons">
184 <ol>
185 <li class="commit">
186 <input name="commit" type="submit" value="Create Post" />
187 </li>
188 </ol>
189 </fieldset>
190 </form></pre>
0c71a46 mentioned to_label in the README
Justin French authored
191
0b370ba Justin French Renamed input_field_set() to just inputs() and added a shorthand version...
authored
192 If you're happy to accept the default input types and labels, there's a shorthand version too:
193
194 <pre>
195 <% semantic_form_for @user do |form| %>
1db292f Jeff Smick update README to reflect association attribute changes
sprsquish authored
196 <%= form.inputs :title, :body, :section, :created_at %>
92e5fc3 Justin French Updates to the README with better examples and output samples.
authored
197 <%= form.buttons :commit %>
0b370ba Justin French Renamed input_field_set() to just inputs() and added a shorthand version...
authored
198 <% end %>
199 </pre>
200
92e5fc3 Justin French Updates to the README with better examples and output samples.
authored
201 You don't even have to specify the field list (Formtastic will simply render and input for each column in the database table) or button list (usually you only need one commit button to create/save):
0b370ba Justin French Renamed input_field_set() to just inputs() and added a shorthand version...
authored
202
203 <pre>
204 <% semantic_form_for @user do |form| %>
205 <%= form.inputs %>
92e5fc3 Justin French Updates to the README with better examples and output samples.
authored
206 <%= form.buttons %>
0b370ba Justin French Renamed input_field_set() to just inputs() and added a shorthand version...
authored
207 <% end %>
208 </pre>
209
92e5fc3 Justin French Updates to the README with better examples and output samples.
authored
210 Pretty soon we won't have to write any code at all ;)
211
2d4a72b Justin French big update to the README
authored
212
085e22f Jeff Smick Add support for nested forms (http://ryandaigle.com/articles/2009/2/1/wh...
sprsquish authored
213 h2. Nested forms (Rails 2.3+)
214
215 Nested forms are supported:
216
217 <pre>
218 <% semantic_form_for @post do |post| %>
219 <%= post.semantic_fields_for :author do |author| %>
220 <%= author.inputs %>
221 <%= end %>
222 <%= post.buttons %>
223 <% end %>
224 </pre>
282b28c Jeff Smick Add I18n support
sprsquish authored
225
2d4a72b Justin French big update to the README
authored
226
282b28c Jeff Smick Add I18n support
sprsquish authored
227 h2. Internationalization (I18n)
228
229 Supports I18n! ActiveRecord object names and attributes are, by default, taken from calling @object.human_name and @object.human_attribute_name(attr) respectively. There are a few words specific to Formtastic that can be translated.
230
231 Here is an example locale file:
232
233 <pre>
2d4a72b Justin French big update to the README
authored
234 en:
235 formtastic:
236 yes: 'Yes'
237 no: 'No'
238 create: 'Create'
239 save: 'Save'
240 year: 'Year'
241 month: 'Month'
242 day: 'Day'
243 hour: 'Hour'
244 minute: 'Minute'
245 second: 'Second'
282b28c Jeff Smick Add I18n support
sprsquish authored
246 </pre>
085e22f Jeff Smick Add support for nested forms (http://ryandaigle.com/articles/2009/2/1/wh...
sprsquish authored
247
2d4a72b Justin French big update to the README
authored
248
353618e Mark Mansour Extending Formtastic can be done by overriding the semantic_form_builder...
markmansour authored
249 h2. Extending Formtastic
250
6ba950e Mark Mansour created example which doesn't use the JustinFrench::Formtastic namespace...
markmansour authored
251 Adding functionality to Formtastic can be done by extending SemanticFormBuilder and configuring formtastic's builder.
252
2d4a72b Justin French big update to the README
authored
253 To create a new form method that displayed a star rating define the new builder by subclassing SemanticFormBuilder:
353618e Mark Mansour Extending Formtastic can be done by overriding the semantic_form_builder...
markmansour authored
254
255 <pre>
2d4a72b Justin French big update to the README
authored
256 # lib/rating_semantic_form_builder.rb
257 class RatingBuilder < Formtastic::SemanticFormBuilder
258 # new method to be added allowing full control over the label and value
259 def rating(stars, options = {})
260 options[:label] ||= 'rating'
261 content = input_label(options[:label], options)
262 content += @template.content_tag(:span, '*' * stars.to_i, :id => "#{@object_name}_#{options[:label]}")
263 @template.content_tag(:li, content)
264 end
353618e Mark Mansour Extending Formtastic can be done by overriding the semantic_form_builder...
markmansour authored
265 end
266 </pre>
267
2d4a72b Justin French big update to the README
authored
268 Set Formtastic's builder to your newly defined RatingBuilder
353618e Mark Mansour Extending Formtastic can be done by overriding the semantic_form_builder...
markmansour authored
269 <pre>
2d4a72b Justin French big update to the README
authored
270 # RAILS_ROOT/config/initializers/override_formtastic_builder.rb
271 require 'rating_semantic_form_builder.rb'
272
273 # set the formtastic builder to a customized version of the formtastic builder
274 Formtastic::SemanticFormHelper.builder = RatingBuilder
6ba950e Mark Mansour created example which doesn't use the JustinFrench::Formtastic namespace...
markmansour authored
275 </pre>
353618e Mark Mansour Extending Formtastic can be done by overriding the semantic_form_builder...
markmansour authored
276
2d4a72b Justin French big update to the README
authored
277 Use @semantic_form_for@ just like you would with Formtastic.
353618e Mark Mansour Extending Formtastic can be done by overriding the semantic_form_builder...
markmansour authored
278 <pre>
6ba950e Mark Mansour created example which doesn't use the JustinFrench::Formtastic namespace...
markmansour authored
279 <% semantic_form_for Project.new do |form| %>
280 <% form.input_field_set :name => "ratings" do %>
281 <%= form.rating 5 %>
282 <%= form.rating 11, :label => 'awesomeness (out of 10)' %>
283 <% end %>
2d4a72b Justin French big update to the README
authored
284 <%= form.buttons %>
6ba950e Mark Mansour created example which doesn't use the JustinFrench::Formtastic namespace...
markmansour authored
285 <% end %>
353618e Mark Mansour Extending Formtastic can be done by overriding the semantic_form_builder...
markmansour authored
286 </pre>
0c71a46 mentioned to_label in the README
Justin French authored
287
288
b03d5b7 Justin French Cleaned up the code and specs around the validation_reflection, includin...
authored
289 h2. Dependencies
290
49485da Justin French updated the dependencies in the README to cover the test suite
authored
291 There are none, but...
292
293 * if you have the "ValidationReflection":http://github.com/redinger/validation_reflection plugin is installed, you won't have to specify the :required option (it checks the validations on the model instead)
294 * rspec, rspec_hpricot_matchers and rcov gems (plus any of their own dependencies) are required for the test suite
b03d5b7 Justin French Cleaned up the code and specs around the validation_reflection, includin...
authored
295
0c71a46 mentioned to_label in the README
Justin French authored
296
09d957d textilized the README so that it looks pretty pretty on GitHub
Justin French authored
297 h2. What about Stylesheets?
dcf8beb Initial Commit
Justin French authored
298
9525ac2 updated the README a little to walk through stylesheet usage
Justin French authored
299 A proof-of-concept (very much a work-in-progress) stylesheet is provided which you can include in your layout. Customisation is best achieved by overriding these styles in an additional stylesheet so that the formtastic styles can be updated without clobbering your changes.
dcf8beb Initial Commit
Justin French authored
300
ef95eff Justin French updated README to refelct the generated formtastic_changes.css
authored
301 1. Use the generator to copy the formtastic.css and formtastic_changes.css into your public directory
4f147ea added some stylsheet usage help to the README and to formtastic.css, not...
Justin French authored
302
9525ac2 updated the README a little to walk through stylesheet usage
Justin French authored
303 <pre>
4f147ea added some stylsheet usage help to the README and to formtastic.css, not...
Justin French authored
304 ./script/generate formtastic_stylesheets
9525ac2 updated the README a little to walk through stylesheet usage
Justin French authored
305 </pre>
306
519b640 Justin French no need for yahoo's reset.css any more... doing my own resets
authored
307 2. Add both formtastic.css and formtastic_changes.css to your layout:
4f147ea added some stylsheet usage help to the README and to formtastic.css, not...
Justin French authored
308
09d957d textilized the README so that it looks pretty pretty on GitHub
Justin French authored
309 <pre>
310 <%= stylesheet_link_tag "formtastic" %>
9525ac2 updated the README a little to walk through stylesheet usage
Justin French authored
311 <%= stylesheet_link_tag "formtastic_changes" %>
09d957d textilized the README so that it looks pretty pretty on GitHub
Justin French authored
312 </pre>
dcf8beb Initial Commit
Justin French authored
313
9525ac2 updated the README a little to walk through stylesheet usage
Justin French authored
314
315
09d957d textilized the README so that it looks pretty pretty on GitHub
Justin French authored
316 h2. Compatibility
dcf8beb Initial Commit
Justin French authored
317
2d4a72b Justin French big update to the README
authored
318 I'm only testing Formtastic with the latest Rails 2.2.x stable release, and it should be fine under Rails 2.3 as well (including nested forms).
dcf8beb Initial Commit
Justin French authored
319
320
09d957d textilized the README so that it looks pretty pretty on GitHub
Justin French authored
321 h2. But it doesn't do that thing I really need!
dcf8beb Initial Commit
Justin French authored
322
2d4a72b Justin French big update to the README
authored
323 It might not ever do it either, there are no silver bullets. I want to make the usual stuff easy, and the unusual stuff possible. That might mean that some of the inputs on your form still have to be hard-coded, but some is better than all, right?
dcf8beb Initial Commit
Justin French authored
324
325
326
2d4a72b Justin French big update to the README
authored
327 h2. Many thanks to Formtastic's contributors
ba3ce05 Justin French updated the README a little with contributors and some other busy work
authored
328
5a39443 Justin French bulking up the documentation and readme with the different inputs availa...
authored
329 * "Justin French":http://justinfrench.com
330 * "Xavier Shay":http://rhnh.net
0c50ce3 Justin French Updated contributors list in the README. Thanks Everyone\!
authored
331 * "Bin Dong":http://github.com/dongbin
dc3ace9 Justin French more on the README
authored
332 * "Ben Hamill":http://blog.benhamill.com/
15ff964 Justin French Added Pat and negonicrac to contributors.
authored
333 * "Pat Allan":http://github.com/freelancing-god
334 * "negonicrac":http://github.com/negonicrac
0c50ce3 Justin French Updated contributors list in the README. Thanks Everyone\!
authored
335 * "Andy Pearson":http://github.com/andypearson
1587c56 Justin French Vanity commit for Mark ;)
authored
336 * "Mark Mansour":http://stateofflux.com
0c50ce3 Justin French Updated contributors list in the README. Thanks Everyone\!
authored
337 * "Tien Dung":http://github.com/tiendung
c8d721e Justin French Updated the contributors list
authored
338 * "Sascha Hoellger":http://github.com/mitnal
339 * "Jeff Smick":http://github.com/sprsquish
ba3ce05 Justin French updated the README a little with contributors and some other busy work
authored
340
2d4a72b Justin French big update to the README
authored
341
ba3ce05 Justin French updated the README a little with contributors and some other busy work
authored
342 h2. Project Info
343
dc3ace9 Justin French more on the README
authored
344 Formtastic is hosted on Github: http://github.com/justinfrench/formtastic/, where your contributions, forkings, comments and feedback are greatly welcomed.
ba3ce05 Justin French updated the README a little with contributors and some other busy work
authored
345
324a875 Justin French link to the google group from the README
authored
346 There's also a newly created "Formtastic Google Group":http://groups.google.com.au/group/formtastic.
347
ba3ce05 Justin French updated the README a little with contributors and some other busy work
authored
348
25d0c7a Justin French fleshed out a 'roadmap to 1.0' in the README
authored
349 Copyright (c) 2007-2008 Justin French, released under the MIT license.
Something went wrong with that request. Please try again.