ShadowBelmolve-formtastic 0.1.6 → 0.2.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/README.textile +179 -40
- data/Rakefile +1 -1
- data/generators/formtastic_stylesheets/formtastic_stylesheets_generator.rb +21 -0
- data/generators/formtastic_stylesheets/templates/formtastic.css +136 -0
- data/generators/formtastic_stylesheets/templates/formtastic_changes.css +10 -0
- data/lib/formtastic.rb +351 -170
- data/lib/justin_french/formtastic.rb +3 -3
- data/spec/formtastic_spec.rb +775 -274
- metadata +9 -6
- data/spec/spec.opts +0 -2
data/README.textile
CHANGED
@@ -1,7 +1,10 @@
|
|
1
|
-
h1. Formtastic
|
1
|
+
h1. Formtastic
|
2
2
|
|
3
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
4
|
|
5
|
+
* This fork: http://github.com/ShadowBelmolve/formtastic
|
6
|
+
* Forked from: http://github.com/justinfrench/formtastic/tree/master
|
7
|
+
|
5
8
|
h2. The Story
|
6
9
|
|
7
10
|
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:
|
@@ -72,6 +75,11 @@ h2. Opinions
|
|
72
75
|
* make the common things we do easy, yet still ensure uncommon things are still possible
|
73
76
|
|
74
77
|
|
78
|
+
h2. Documentation
|
79
|
+
|
80
|
+
RDoc documentation _should_ be automatically generated after each commit and made available on the "rdoc.info website":http://rdoc.info/projects/justinfrench/formtastic.
|
81
|
+
|
82
|
+
|
75
83
|
h2. Installation
|
76
84
|
|
77
85
|
You can (and should) get it as a gem:
|
@@ -91,7 +99,7 @@ And then add it as a dependency in your environment.rb file:
|
|
91
99
|
If you're a little more old school, install it as a plugin:
|
92
100
|
|
93
101
|
<pre>
|
94
|
-
./script/plugin install git://github.com/
|
102
|
+
./script/plugin install git://github.com/justinfrench/formtastic.git
|
95
103
|
</pre>
|
96
104
|
|
97
105
|
|
@@ -155,48 +163,30 @@ If you want to customize the label text, or render some hint text below the fiel
|
|
155
163
|
<% end %>
|
156
164
|
</pre>
|
157
165
|
|
158
|
-
If you want to customize html elements for any non button inputs you just need
|
159
|
-
to specify the :input_html options hash.
|
160
|
-
|
161
|
-
<pre>
|
162
|
-
<% semantic_form_for @post do |form| %>
|
163
|
-
<%= form.input :title, :input_html => {:size => 60} %>
|
164
|
-
<%= form.input :body %>
|
165
|
-
<%= form.input :created_at, :input_html => {:disabled => true} %>
|
166
|
-
<%= form.buttons %>
|
167
|
-
<% end %>
|
168
|
-
</pre>
|
169
|
-
|
170
|
-
To customize buttons, :button_html is available.
|
171
166
|
|
172
167
|
Nested forms (Rails 2.3) are also supported. You can do it in the Rails way:
|
173
168
|
|
174
169
|
<pre>
|
175
170
|
<% semantic_form_for @post do |form| %>
|
176
171
|
<%= form.inputs :title, :body, :created_at %>
|
177
|
-
|
178
172
|
<% form.semantic_fields_for :author do |author| %>
|
179
173
|
<%= author.inputs :first_name, :last_name, :name => 'Author' %>
|
180
174
|
<% end %>
|
181
|
-
|
182
175
|
<%= form.buttons %>
|
183
176
|
<% end %>
|
184
177
|
</pre>
|
185
178
|
|
186
|
-
Or
|
179
|
+
Or the Formtastic way with the @:for@ option:
|
187
180
|
|
188
181
|
<pre>
|
189
182
|
<% semantic_form_for @post do |form| %>
|
190
183
|
<%= form.inputs :title, :body, :created_at %>
|
191
|
-
|
192
184
|
<%= form.inputs :first_name, :last_name, :for => :author, :name => "Author" %>
|
193
|
-
|
194
185
|
<%= form.buttons %>
|
195
186
|
<% end %>
|
196
187
|
</pre>
|
197
188
|
|
198
|
-
When working in has many association, you can even supply "%i" in your fieldset
|
199
|
-
name that it will be properly interpolated with the child index. For example:
|
189
|
+
When working in has many association, you can even supply "%i" in your fieldset name that it will be properly interpolated with the child index. For example:
|
200
190
|
|
201
191
|
<pre>
|
202
192
|
<% semantic_form_for @post do |form| %>
|
@@ -206,27 +196,180 @@ name that it will be properly interpolated with the child index. For example:
|
|
206
196
|
<% end %>
|
207
197
|
</pre>
|
208
198
|
|
209
|
-
|
210
|
-
|
199
|
+
|
200
|
+
Customize HTML attributes for any input using the @:input_html@ option. Typically his is used to disable the input, change the size of a text field, change the rows in a textarea, or even to add a special class to an input to attach special behavior like "autogrow":http://plugins.jquery.com/project/autogrow textareas:
|
201
|
+
|
202
|
+
<pre>
|
203
|
+
<% semantic_form_for @post do |form| %>
|
204
|
+
<%= form.input :title, :input_html => { :size => 60 } %>
|
205
|
+
<%= form.input :body, :input_html => { :class => 'autogrow' } %>
|
206
|
+
<%= form.input :created_at, :input_html => { :disabled => true } %>
|
207
|
+
<%= form.buttons %>
|
208
|
+
<% end %>
|
209
|
+
</pre>
|
210
|
+
|
211
|
+
The same can be done for buttons with the @:button_html@ option:
|
212
|
+
|
213
|
+
<pre>
|
214
|
+
<% semantic_form_for @post do |form| %>
|
215
|
+
...
|
216
|
+
<% form.buttons do %>
|
217
|
+
<%= form.commit_button :button_html => { :class => "primary" } %>
|
218
|
+
<% end %>
|
219
|
+
<% end %>
|
220
|
+
</pre>
|
221
|
+
|
222
|
+
Customize the HTML attributes for the @<li>@ wrapper around every input with the @:wrapper_html@ option hash. There's one special key in the hash (:class), which will actually _append_ your string of classes to the existing classes provided by Formtastic (like "required string error")
|
223
|
+
|
224
|
+
<pre>
|
225
|
+
<% semantic_form_for @post do |form| %>
|
226
|
+
<%= form.input :title, :wrapper_html => { :class => "important" } %>
|
227
|
+
<%= form.input :body %>
|
228
|
+
<%= form.input :description, :wrapper_html => { :style => "display:none;" } %>
|
229
|
+
...
|
230
|
+
<% end %>
|
231
|
+
</pre>
|
232
|
+
|
233
|
+
|
211
234
|
|
212
235
|
h2. The Available Inputs
|
213
236
|
|
214
237
|
* :select (a select menu) - default for ActiveRecord associations (belongs_to, has_many, has_and_belongs_to_many)
|
238
|
+
* :check_boxes (a set of check_box inputs) - alternative to :select has_many and has_and_belongs_to_many associations
|
215
239
|
* :radio (a set of radio inputs) - alternative to :select for ActiveRecord belongs_to associations
|
240
|
+
* :time_zone (a select input) - default for :string column types with 'time_zone' in the method name
|
216
241
|
* :password (a password input) - default for :string column types with 'password' in the method name
|
217
242
|
* :text (a textarea) - default for :text column types
|
218
243
|
* :date (a date select) - default for :date column types
|
219
244
|
* :datetime (a date and time select) - default for :datetime and :timestamp column types
|
220
245
|
* :time (a time select) - default for :time column types
|
221
246
|
* :boolean (a checkbox) - default for :boolean column types
|
222
|
-
* :boolean_select (a yes/no select box)
|
223
247
|
* :string (a text field) - default for :string column types
|
224
248
|
* :numeric (a text field, like string) - default for :integer, :float and :decimal column types
|
225
249
|
* :file (a file field) - default for paperclip or attachment_fu attributes
|
226
|
-
* :
|
250
|
+
* :country (a select menu of country names) - default for :string columns named "country", requires a country_select plugin to be installed
|
251
|
+
* :hidden (a hidden field) - creates a hidden field (added for compatibility)
|
252
|
+
|
227
253
|
|
228
254
|
The documentation is pretty good for each of these (what it does, what the output is, what the options are, etc) so go check it out.
|
229
255
|
|
256
|
+
h2. Internationalization (I18n)
|
257
|
+
|
258
|
+
Formtastic got some neat I18n-features. 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. See lib/locale/en.yml for more information.
|
259
|
+
|
260
|
+
h3. Label/Hint-localization
|
261
|
+
|
262
|
+
Formtastic supports localized *labels* and *hints* using the I18n API for more advanced usage. Your forms can now be DRYer and more flexible than ever, and still fully localized. This is how:
|
263
|
+
|
264
|
+
Basic localization (labels only):
|
265
|
+
|
266
|
+
<pre>
|
267
|
+
<% semantic_form_for @post do |form| %>
|
268
|
+
<%= form.input :title %> # => :label => I18n.t('activerecord.attributes.user.title') or 'Title'
|
269
|
+
<%= form.input :body %> # => :label => I18n.t('activerecord.attributes.user.body') or 'Body'
|
270
|
+
<%= form.input :section %> # => :label => I18n.t('activerecord.attributes.user.section') or 'Section'
|
271
|
+
<% end %>
|
272
|
+
</pre>
|
273
|
+
|
274
|
+
*Note:* This is perfectly fine if you just want your labels to be translated using *ActiveRecord I18n attribute translations*, and you don't use input hints. But what if you do? And what if you don't want same labels in all forms?
|
275
|
+
|
276
|
+
Enhanced localization (labels and hints):
|
277
|
+
|
278
|
+
1. Enable I18n lookups by default (@config/initializers/formtastic.rb@):
|
279
|
+
|
280
|
+
<pre>
|
281
|
+
Formtastic::SemanticFormBuilder.i18n_lookups_by_default = true
|
282
|
+
</pre>
|
283
|
+
|
284
|
+
2. Add some cool label-translations/variants (@config/locale/en.yml@):
|
285
|
+
|
286
|
+
<pre>
|
287
|
+
en:
|
288
|
+
formtastic:
|
289
|
+
labels:
|
290
|
+
post:
|
291
|
+
title: "Choose a title..."
|
292
|
+
body: "Write something..."
|
293
|
+
hints:
|
294
|
+
post:
|
295
|
+
title: "Choose a good title for you post."
|
296
|
+
body: "Write something inspiring here."
|
297
|
+
</pre>
|
298
|
+
|
299
|
+
*Note:* We are using English here still, but you get the point.
|
300
|
+
|
301
|
+
3. ...and now you'll get:
|
302
|
+
|
303
|
+
<pre>
|
304
|
+
<% semantic_form_for @post do |form| %>
|
305
|
+
<%= form.input :title %> # => :label => "Choose a title...", :hint => "Choose a good title for you post."
|
306
|
+
<%= form.input :body %> # => :label => "Write something...", :hint => "Write something inspiring here."
|
307
|
+
<%= form.input :section %> # => :label => I18n.t('activerecord.attributes.user.section') or 'Section'
|
308
|
+
<% end %>
|
309
|
+
</pre>
|
310
|
+
|
311
|
+
4. Override I18n settings:
|
312
|
+
|
313
|
+
<pre>
|
314
|
+
<% semantic_form_for @post do |form| %>
|
315
|
+
<%= form.input :title %> # => :label => "Choose a title...", :hint => "Choose a good title for you post."
|
316
|
+
<%= form.input :body, :hint => false %> # => :label => "Write something..."
|
317
|
+
<%= form.input :section %> # => :label => I18n.t('activerecord.attributes.user.section') or 'Section'
|
318
|
+
<% end %>
|
319
|
+
</pre>
|
320
|
+
|
321
|
+
If I18n-lookups is disabled, i.e.:
|
322
|
+
|
323
|
+
<pre>
|
324
|
+
Formtastic::SemanticFormBuilder.i18n_lookups_by_default = false
|
325
|
+
</pre>
|
326
|
+
|
327
|
+
...then you can enable I18n within the forms instead:
|
328
|
+
|
329
|
+
<pre>
|
330
|
+
<% semantic_form_for @post do |form| %>
|
331
|
+
<%= form.input :title, :label => true %> # => :label => "Choose a title..."
|
332
|
+
<%= form.input :body, :label => true %> # => :label => "Write something..."
|
333
|
+
<%= form.input :section, :label => true %> # => :label => I18n.t('activerecord.attributes.user.section') or 'Section'
|
334
|
+
<% end %>
|
335
|
+
</pre>
|
336
|
+
|
337
|
+
5. Advanced I18n lookups
|
338
|
+
|
339
|
+
For more flexible forms; Formtastic find translations using a bottom-up approach taking the following variables in account:
|
340
|
+
|
341
|
+
* @model@, e.g. "post"
|
342
|
+
* @action@, e.g. "edit"
|
343
|
+
* @attribute@, e.g. "title"
|
344
|
+
|
345
|
+
...in the following order:
|
346
|
+
|
347
|
+
1. @formtastic.{labels,hints}.MODEL.ACTION.ATTRIBUTE@ # By model and action
|
348
|
+
2. @formtastic.{labels,hints}.MODEL.ATTRIBUTE@ # By model
|
349
|
+
3. @formtastic.{labels,hints}.ATTRIBUTE@ # Global default
|
350
|
+
|
351
|
+
...which means that you can define translations like this:
|
352
|
+
|
353
|
+
<pre>
|
354
|
+
en:
|
355
|
+
formtastic:
|
356
|
+
labels:
|
357
|
+
title: "Title" # Default global value
|
358
|
+
article:
|
359
|
+
body: "Article content"
|
360
|
+
post:
|
361
|
+
new:
|
362
|
+
title: "Choose a title..."
|
363
|
+
body: "Write something..."
|
364
|
+
edit:
|
365
|
+
title: "Edit title"
|
366
|
+
body: "Edit body"
|
367
|
+
...
|
368
|
+
</pre>
|
369
|
+
|
370
|
+
h2. ValidationReflection plugin
|
371
|
+
|
372
|
+
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).
|
230
373
|
|
231
374
|
h2. Configuration
|
232
375
|
|
@@ -270,19 +413,16 @@ If you wish, put something like this in config/initializers/formtastic_config.rb
|
|
270
413
|
# the input, in the following order: hints, input and errors. You can
|
271
414
|
# customize it doing just as below:
|
272
415
|
Formtastic::SemanticFormBuilder.inline_order = [:hints, :input, :errors]
|
416
|
+
|
417
|
+
# Set the default "priority countries" to suit your user base when using :as => :country
|
418
|
+
Formtastic::SemanticFormBuilder.priority_countries = ["Australia", "New Zealand"]
|
419
|
+
|
420
|
+
# Specifies if labels/hints for input fields automatically be looked up using I18n.
|
421
|
+
# Default value: false. Overridden for specific fields by setting value to true,
|
422
|
+
# i.e. :label => true, or :hint => true (or opposite depending on initialized value)
|
423
|
+
# Formtastic::SemanticFormBuilder.i18n_lookups_by_default = false
|
273
424
|
</pre>
|
274
425
|
|
275
|
-
|
276
|
-
h2. Internationalization (I18n)
|
277
|
-
|
278
|
-
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. See lib/locale/en.yml for more information.
|
279
|
-
|
280
|
-
|
281
|
-
h2. ValidationReflection plugin
|
282
|
-
|
283
|
-
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).
|
284
|
-
|
285
|
-
|
286
426
|
h2. Status
|
287
427
|
|
288
428
|
*THINGS ARE GOING TO CHANGE A BIT BEFORE WE HIT 1.0.*
|
@@ -299,6 +439,7 @@ h2. Dependencies
|
|
299
439
|
There are none, but...
|
300
440
|
|
301
441
|
* 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)
|
442
|
+
* if you want to use the :country input, you'll need to install the "iso-3166-country-select plugin":http://github.com/rails/iso-3166-country-select (or any other country_select plugin with the same API)
|
302
443
|
* rspec, rspec_hpricot_matchers and rcov gems (plus any of their own dependencies) are required for the test suite
|
303
444
|
|
304
445
|
|
@@ -328,10 +469,8 @@ A proof-of-concept (very much a work-in-progress) stylesheet is provided which y
|
|
328
469
|
|
329
470
|
h2. Contributors
|
330
471
|
|
331
|
-
Formtastic wouldn't be as awesome as it is today if it weren't for the wonderful contributions of these fine, fine coders.
|
472
|
+
Formtastic is maintained by "Justin French":http://justinfrench.com and "José Valim":http://github.com/josevalim, but it wouldn't be as awesome as it is today if it weren't for the wonderful contributions of these fine, fine coders.
|
332
473
|
|
333
|
-
* "Justin French":http://justinfrench.com
|
334
|
-
* "José Valim":http://github.com/josevalim
|
335
474
|
* "Jeff Smick":http://github.com/sprsquish
|
336
475
|
* "Tien Dung":http://github.com/tiendung
|
337
476
|
* "Mark Mansour":http://stateofflux.com
|
data/Rakefile
CHANGED
@@ -20,7 +20,7 @@ begin
|
|
20
20
|
|
21
21
|
s.require_path = 'lib'
|
22
22
|
s.autorequire = GEM
|
23
|
-
s.files = %w(MIT-LICENSE README.textile Rakefile) + Dir.glob("{rails,lib,spec}/**/*")
|
23
|
+
s.files = %w(MIT-LICENSE README.textile Rakefile) + Dir.glob("{rails,lib,generators,spec}/**/*")
|
24
24
|
end
|
25
25
|
rescue LoadError
|
26
26
|
puts "Jeweler, or one of its dependencies, is not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
|
@@ -0,0 +1,21 @@
|
|
1
|
+
class FormtasticStylesheetsGenerator < Rails::Generator::Base
|
2
|
+
|
3
|
+
def initialize(*runtime_args)
|
4
|
+
super
|
5
|
+
end
|
6
|
+
|
7
|
+
def manifest
|
8
|
+
record do |m|
|
9
|
+
m.directory File.join('public', 'stylesheets')
|
10
|
+
m.template 'formtastic.css', File.join('public', 'stylesheets', 'formtastic.css')
|
11
|
+
m.template 'formtastic_changes.css', File.join('public', 'stylesheets', 'formtastic_changes.css')
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
protected
|
16
|
+
|
17
|
+
def banner
|
18
|
+
%{Usage: #{$0} #{spec.name}\nCopies formtastic.css and formtastic_changes.css to public/}
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
@@ -0,0 +1,136 @@
|
|
1
|
+
/* -------------------------------------------------------------------------------------------------
|
2
|
+
|
3
|
+
It's *strongly* suggested that you don't modify this file. Instead, load a new stylesheet after
|
4
|
+
this one in your layouts (eg formtastic_changes.css) and override the styles to suit your needs.
|
5
|
+
This will allow you to update formtastic.css with new releases without clobbering your own changes.
|
6
|
+
|
7
|
+
This stylesheet forms part of the Formtastic Rails Plugin
|
8
|
+
(c) 2008 Justin French
|
9
|
+
|
10
|
+
--------------------------------------------------------------------------------------------------*/
|
11
|
+
|
12
|
+
|
13
|
+
/* NORMALIZE AND RESET - obviously inspired by Yahoo's reset.css, but scoped to just form.formtastic
|
14
|
+
--------------------------------------------------------------------------------------------------*/
|
15
|
+
form.formtastic, form.formtastic ul, form.formtastic ol, form.formtastic li, form.formtastic fieldset, form.formtastic legend, form.formtastic input, form.formtastic textarea, form.formtastic select, form.formtastic p { margin:0; padding:0; }
|
16
|
+
form.formtastic fieldset { border:0; }
|
17
|
+
form.formtastic em, form.formtastic strong { font-style:normal; font-weight:normal; }
|
18
|
+
form.formtastic ol, form.formtastic ul { list-style:none; }
|
19
|
+
form.formtastic abbr, form.formtastic acronym { border:0; font-variant:normal; }
|
20
|
+
form.formtastic input, form.formtastic textarea, form.formtastic select { font-family:inherit; font-size:inherit; font-weight:inherit; }
|
21
|
+
form.formtastic input, form.formtastic textarea, form.formtastic select { font-size:100%; }
|
22
|
+
form.formtastic legend { color:#000; }
|
23
|
+
|
24
|
+
|
25
|
+
/* FIELDSETS & LISTS
|
26
|
+
--------------------------------------------------------------------------------------------------*/
|
27
|
+
form.formtastic fieldset { }
|
28
|
+
form.formtastic fieldset.inputs { }
|
29
|
+
form.formtastic fieldset.buttons { padding-left:25%; }
|
30
|
+
form.formtastic fieldset ol { }
|
31
|
+
form.formtastic fieldset.buttons li { float:left; padding-right:0.5em; }
|
32
|
+
|
33
|
+
/* clearfixing the fieldsets */
|
34
|
+
form.formtastic fieldset { display: inline-block; }
|
35
|
+
form.formtastic fieldset:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
|
36
|
+
html[xmlns] form.formtastic fieldset { display: block; }
|
37
|
+
* html form.formtastic fieldset { height: 1%; }
|
38
|
+
|
39
|
+
|
40
|
+
/* INPUT LIs
|
41
|
+
--------------------------------------------------------------------------------------------------*/
|
42
|
+
form.formtastic fieldset ol li { margin-bottom:1.5em; }
|
43
|
+
|
44
|
+
/* clearfixing the li's */
|
45
|
+
form.formtastic fieldset ol li { display: inline-block; }
|
46
|
+
form.formtastic fieldset ol li:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
|
47
|
+
html[xmlns] form.formtastic fieldset ol li { display: block; }
|
48
|
+
* html form.formtastic fieldset ol li { height: 1%; }
|
49
|
+
|
50
|
+
form.formtastic fieldset ol li.required { }
|
51
|
+
form.formtastic fieldset ol li.optional { }
|
52
|
+
form.formtastic fieldset ol li.error { }
|
53
|
+
|
54
|
+
|
55
|
+
/* LABELS
|
56
|
+
--------------------------------------------------------------------------------------------------*/
|
57
|
+
form.formtastic fieldset ol li label { display:block; width:25%; float:left; padding-top:.2em; }
|
58
|
+
form.formtastic fieldset ol li li label { line-height:100%; padding-top:0; }
|
59
|
+
form.formtastic fieldset ol li li label input { line-height:100%; vertical-align:middle; margin-top:-0.1em;}
|
60
|
+
|
61
|
+
|
62
|
+
/* NESTED FIELDSETS AND LEGENDS (radio, check boxes and date/time inputs use nested fieldsets)
|
63
|
+
--------------------------------------------------------------------------------------------------*/
|
64
|
+
form.formtastic fieldset ol li fieldset { position:relative; }
|
65
|
+
form.formtastic fieldset ol li fieldset legend { position:absolute; width:25%; padding-top:0.1em; }
|
66
|
+
form.formtastic fieldset ol li fieldset legend span { position:absolute; }
|
67
|
+
form.formtastic fieldset ol li fieldset ol { float:left; width:74%; margin:0; padding:0 0 0 25%; }
|
68
|
+
form.formtastic fieldset ol li fieldset ol li { padding:0; border:0; }
|
69
|
+
|
70
|
+
|
71
|
+
/* INLINE HINTS
|
72
|
+
--------------------------------------------------------------------------------------------------*/
|
73
|
+
form.formtastic fieldset ol li p.inline-hints { color:#666; margin:0.5em 0 0 25%; }
|
74
|
+
|
75
|
+
|
76
|
+
/* INLINE ERRORS
|
77
|
+
--------------------------------------------------------------------------------------------------*/
|
78
|
+
form.formtastic fieldset ol li p.inline-errors { color:#cc0000; margin:0.5em 0 0 25%; }
|
79
|
+
form.formtastic fieldset ol li ul.errors { color:#cc0000; margin:0.5em 0 0 25%; list-style:square; }
|
80
|
+
form.formtastic fieldset ol li ul.errors li { padding:0; border:none; display:list-item; }
|
81
|
+
|
82
|
+
|
83
|
+
/* STRING & NUMERIC OVERRIDES
|
84
|
+
--------------------------------------------------------------------------------------------------*/
|
85
|
+
form.formtastic fieldset ol li.string input { width:74%; }
|
86
|
+
form.formtastic fieldset ol li.numeric input { width:74%; }
|
87
|
+
|
88
|
+
|
89
|
+
/* TEXTAREA OVERRIDES
|
90
|
+
--------------------------------------------------------------------------------------------------*/
|
91
|
+
form.formtastic fieldset ol li.text textarea { width:74%; }
|
92
|
+
|
93
|
+
|
94
|
+
/* HIDDEN OVERRIDES
|
95
|
+
--------------------------------------------------------------------------------------------------*/
|
96
|
+
form.formtastic fieldset ol li.hidden { display:none; }
|
97
|
+
|
98
|
+
|
99
|
+
/* BOOLEAN OVERRIDES
|
100
|
+
--------------------------------------------------------------------------------------------------*/
|
101
|
+
form.formtastic fieldset ol li.boolean label { padding-left:25%; width:auto; }
|
102
|
+
form.formtastic fieldset ol li.boolean label input { margin:0 0.5em 0 0.2em; }
|
103
|
+
|
104
|
+
|
105
|
+
/* RADIO OVERRIDES
|
106
|
+
--------------------------------------------------------------------------------------------------*/
|
107
|
+
form.formtastic fieldset ol li.radio { }
|
108
|
+
form.formtastic fieldset ol li.radio fieldset ol { margin-bottom:-0.6em; }
|
109
|
+
form.formtastic fieldset ol li.radio fieldset ol li { margin:0.1em 0 0.5em 0; }
|
110
|
+
form.formtastic fieldset ol li.radio fieldset ol li label { float:none; width:100%; }
|
111
|
+
form.formtastic fieldset ol li.radio fieldset ol li label input { margin-right:0.2em; }
|
112
|
+
|
113
|
+
|
114
|
+
/* CHECK BOXES (COLLECTION) OVERRIDES
|
115
|
+
--------------------------------------------------------------------------------------------------*/
|
116
|
+
form.formtastic fieldset ol li.check_boxes { }
|
117
|
+
form.formtastic fieldset ol li.check_boxes fieldset ol { margin-bottom:-0.6em; }
|
118
|
+
form.formtastic fieldset ol li.check_boxes fieldset ol li { margin:0.1em 0 0.5em 0; }
|
119
|
+
form.formtastic fieldset ol li.check_boxes fieldset ol li label { float:none; width:100%; }
|
120
|
+
form.formtastic fieldset ol li.check_boxes fieldset ol li label input { margin-right:0.2em; }
|
121
|
+
|
122
|
+
|
123
|
+
|
124
|
+
/* DATE & TIME OVERRIDES
|
125
|
+
--------------------------------------------------------------------------------------------------*/
|
126
|
+
form.formtastic fieldset ol li.date fieldset ol li,
|
127
|
+
form.formtastic fieldset ol li.time fieldset ol li,
|
128
|
+
form.formtastic fieldset ol li.datetime fieldset ol li { float:left; width:auto; margin:0 .3em 0 0; }
|
129
|
+
|
130
|
+
form.formtastic fieldset ol li.date fieldset ol li label,
|
131
|
+
form.formtastic fieldset ol li.time fieldset ol li label,
|
132
|
+
form.formtastic fieldset ol li.datetime fieldset ol li label { display:none; }
|
133
|
+
|
134
|
+
form.formtastic fieldset ol li.date fieldset ol li label input,
|
135
|
+
form.formtastic fieldset ol li.time fieldset ol li label input,
|
136
|
+
form.formtastic fieldset ol li.datetime fieldset ol li label input { display:inline; margin:0; padding:0; }
|