fetty-generators 1.7.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.
Files changed (75) hide show
  1. data/Gemfile +2 -0
  2. data/LICENSE +20 -0
  3. data/README.rdoc +69 -0
  4. data/Rakefile +3 -0
  5. data/lib/generators/fetty/layout/USAGE +26 -0
  6. data/lib/generators/fetty/layout/layout_generator.rb +44 -0
  7. data/lib/generators/fetty/layout/templates/application.js +55 -0
  8. data/lib/generators/fetty/layout/templates/error_messages_helper.rb +23 -0
  9. data/lib/generators/fetty/layout/templates/layout.html.erb +32 -0
  10. data/lib/generators/fetty/layout/templates/layout.html.haml +34 -0
  11. data/lib/generators/fetty/layout/templates/layout_helper.rb +22 -0
  12. data/lib/generators/fetty/layout/templates/no-devise-links-layout.html.erb +23 -0
  13. data/lib/generators/fetty/layout/templates/no-devise-links-layout.html.haml +23 -0
  14. data/lib/generators/fetty/layout/templates/stylesheet.css +166 -0
  15. data/lib/generators/fetty/layout/templates/stylesheet.sass +163 -0
  16. data/lib/generators/fetty/scaffold/USAGE +53 -0
  17. data/lib/generators/fetty/scaffold/scaffold_generator.rb +370 -0
  18. data/lib/generators/fetty/scaffold/templates/actions/create.rb +8 -0
  19. data/lib/generators/fetty/scaffold/templates/actions/destroy.rb +5 -0
  20. data/lib/generators/fetty/scaffold/templates/actions/edit.rb +3 -0
  21. data/lib/generators/fetty/scaffold/templates/actions/index.rb +10 -0
  22. data/lib/generators/fetty/scaffold/templates/actions/new.rb +3 -0
  23. data/lib/generators/fetty/scaffold/templates/actions/show.rb +3 -0
  24. data/lib/generators/fetty/scaffold/templates/actions/update.rb +8 -0
  25. data/lib/generators/fetty/scaffold/templates/controller.rb +7 -0
  26. data/lib/generators/fetty/scaffold/templates/fixtures.yml +9 -0
  27. data/lib/generators/fetty/scaffold/templates/helper.rb +2 -0
  28. data/lib/generators/fetty/scaffold/templates/migration.rb +16 -0
  29. data/lib/generators/fetty/scaffold/templates/model.rb +7 -0
  30. data/lib/generators/fetty/scaffold/templates/tests/rspec/actions/create.rb +11 -0
  31. data/lib/generators/fetty/scaffold/templates/tests/rspec/actions/destroy.rb +6 -0
  32. data/lib/generators/fetty/scaffold/templates/tests/rspec/actions/edit.rb +4 -0
  33. data/lib/generators/fetty/scaffold/templates/tests/rspec/actions/index.rb +4 -0
  34. data/lib/generators/fetty/scaffold/templates/tests/rspec/actions/new.rb +4 -0
  35. data/lib/generators/fetty/scaffold/templates/tests/rspec/actions/show.rb +4 -0
  36. data/lib/generators/fetty/scaffold/templates/tests/rspec/actions/update.rb +11 -0
  37. data/lib/generators/fetty/scaffold/templates/tests/rspec/controller.rb +8 -0
  38. data/lib/generators/fetty/scaffold/templates/tests/rspec/model.rb +7 -0
  39. data/lib/generators/fetty/scaffold/templates/tests/shoulda/actions/create.rb +13 -0
  40. data/lib/generators/fetty/scaffold/templates/tests/shoulda/actions/destroy.rb +8 -0
  41. data/lib/generators/fetty/scaffold/templates/tests/shoulda/actions/edit.rb +6 -0
  42. data/lib/generators/fetty/scaffold/templates/tests/shoulda/actions/index.rb +6 -0
  43. data/lib/generators/fetty/scaffold/templates/tests/shoulda/actions/new.rb +6 -0
  44. data/lib/generators/fetty/scaffold/templates/tests/shoulda/actions/show.rb +6 -0
  45. data/lib/generators/fetty/scaffold/templates/tests/shoulda/actions/update.rb +13 -0
  46. data/lib/generators/fetty/scaffold/templates/tests/shoulda/controller.rb +5 -0
  47. data/lib/generators/fetty/scaffold/templates/tests/shoulda/model.rb +7 -0
  48. data/lib/generators/fetty/scaffold/templates/tests/testunit/actions/create.rb +11 -0
  49. data/lib/generators/fetty/scaffold/templates/tests/testunit/actions/destroy.rb +6 -0
  50. data/lib/generators/fetty/scaffold/templates/tests/testunit/actions/edit.rb +4 -0
  51. data/lib/generators/fetty/scaffold/templates/tests/testunit/actions/index.rb +4 -0
  52. data/lib/generators/fetty/scaffold/templates/tests/testunit/actions/new.rb +4 -0
  53. data/lib/generators/fetty/scaffold/templates/tests/testunit/actions/show.rb +4 -0
  54. data/lib/generators/fetty/scaffold/templates/tests/testunit/actions/update.rb +11 -0
  55. data/lib/generators/fetty/scaffold/templates/tests/testunit/controller.rb +5 -0
  56. data/lib/generators/fetty/scaffold/templates/tests/testunit/model.rb +7 -0
  57. data/lib/generators/fetty/scaffold/templates/views/erb/_form.html.erb +22 -0
  58. data/lib/generators/fetty/scaffold/templates/views/erb/_table.html.erb +50 -0
  59. data/lib/generators/fetty/scaffold/templates/views/erb/edit.html.erb +12 -0
  60. data/lib/generators/fetty/scaffold/templates/views/erb/index.html.erb +13 -0
  61. data/lib/generators/fetty/scaffold/templates/views/erb/index.js.erb +1 -0
  62. data/lib/generators/fetty/scaffold/templates/views/erb/new.html.erb +9 -0
  63. data/lib/generators/fetty/scaffold/templates/views/erb/show.html.erb +26 -0
  64. data/lib/generators/fetty/scaffold/templates/views/haml/_form.html.haml +8 -0
  65. data/lib/generators/fetty/scaffold/templates/views/haml/_table.html.haml +33 -0
  66. data/lib/generators/fetty/scaffold/templates/views/haml/edit.html.haml +14 -0
  67. data/lib/generators/fetty/scaffold/templates/views/haml/index.html.haml +12 -0
  68. data/lib/generators/fetty/scaffold/templates/views/haml/index.js.haml +1 -0
  69. data/lib/generators/fetty/scaffold/templates/views/haml/new.html.haml +8 -0
  70. data/lib/generators/fetty/scaffold/templates/views/haml/show.html.haml +23 -0
  71. data/lib/generators/fetty/setup/USAGE +22 -0
  72. data/lib/generators/fetty/setup/setup_generator.rb +80 -0
  73. data/lib/generators/fetty/setup/templates/ability.rb +29 -0
  74. data/lib/generators/fetty.rb +38 -0
  75. metadata +137 -0
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source "http://rubygems.org"
2
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2010 Fajri Fachriansyah
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,69 @@
1
+ = Fetty Generators
2
+
3
+ If you are a fan of railscast.com by Ryan Bates, you could found so many useful plugins / gems that ryan covers to us how to use it,
4
+ and if you familiar with nifty_scaffold by ryanb, or always working with it alongside Devise + CanCan for authetication and authorization,
5
+ you may try to use this generators to build your basic Rails application quickly up-and-running.
6
+ This generators are inherited from nifty-generators, but change a little-bit in the result of scaffolding.
7
+
8
+ fetty (as i choose the name as a brother of nifty) have a little extra features like :
9
+ - using simple_form as a default generated form.
10
+ - add some extra AJAX features to search and sorting using meta_search, and pagination in your index page.
11
+ - using Devise(josevalim) for authentication and CanCan(ryanb) for authorizations [optional].
12
+ - giving the default checking abilities like ( can? :read ) in your views for authorizations.
13
+ - closable flash message.
14
+ - alow you pass custom field:type such as paperclip / tinymce in scaffolding.
15
+
16
+ it also provides for ERB and HAML template. Ups sorry this generators only works for Rails 3
17
+
18
+ == Setup
19
+
20
+ === Rails 3
21
+
22
+ require gems to be install first.
23
+
24
+ gem install meta_where meta_search simple_form will_paginate jquery-rails devise cancan paperclip tinymce
25
+
26
+ And add the gem to your Gemfile.
27
+
28
+ gem "fetty-generators", :group => :development
29
+
30
+ generate the setup first before you can generate layout / scaffolding
31
+
32
+ rails generate fetty:setup
33
+
34
+ Then you can run layout generator to generate your application layout.
35
+
36
+ rails generate fetty:layout
37
+
38
+ And then you just simply type the command "fetty:scaffold" for scaffolding
39
+
40
+ rails g fetty:scaffold Post title:string content:text
41
+
42
+ after that simply run the migration "rake db:migrate" and start your server "rails s"
43
+
44
+ == Additional field type
45
+
46
+ You could also passing custom field type in your arguments, 'for example you want to use paperclip for handle your attachment
47
+ and you also want to use tinymce for editor in your textarea'
48
+
49
+ rails g fetty:scaffold Post title:string content:tinymce photo:paperclip
50
+
51
+ this will generate the required column names for paperclip into your migration file and also configured the model, controller and views.
52
+
53
+ == Included Generators
54
+
55
+ * fetty:layout: generates generic layout, stylesheet, and helper files.
56
+ * fetty:scaffold: generates a controller and optional model/migration.
57
+ * fetty:setup: configure your gems needed by fetty-generators.
58
+
59
+ To view the README for each generator, run it with the +help+ option.
60
+
61
+ rails g fetty:layout --help
62
+
63
+
64
+ == Found a bug?
65
+
66
+ This is stil under development mode, if you are regularly work with ERB template, this generators will works fine,
67
+ But if you are having some problem with Fetty Generators, please submit an issue here.
68
+
69
+ http://github.com/fajrif/fetty-generators/issues
data/Rakefile ADDED
@@ -0,0 +1,3 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
3
+
@@ -0,0 +1,26 @@
1
+ Description:
2
+ The fetty_layout generator creates a basic layout, stylesheet and
3
+ helper which will give some structure to a starting Rails app.
4
+
5
+ The generator takes one argument which will be the name of the
6
+ layout and stylesheet files. If no argument is passed then it defaults
7
+ to "application".
8
+
9
+ The helper module includes some methods which can be called in any
10
+ template or partial to set variables to be used in the layout, such as
11
+ page title, javascript/stylesheet and also includes Devise SignIn and SignUp
12
+ link buttons.
13
+
14
+ Examples:
15
+ rails generate fetty:layout
16
+
17
+ Layout: app/views/layouts/application.html.erb
18
+ Stylesheet: public/stylesheets/application.css
19
+ Helper: app/helpers/layout_helper.rb
20
+
21
+
22
+ rails generate fetty:layout --haml
23
+
24
+ Layout: app/views/layouts/application.html.haml
25
+ Stylesheet: public/stylesheets/sass/application.sass
26
+ Helper: app/helpers/layout_helper.rb
@@ -0,0 +1,44 @@
1
+ require 'generators/fetty'
2
+
3
+ module Fetty
4
+ module Generators
5
+ class LayoutGenerator < Base
6
+ argument :layout_name, :type => :string, :default => 'application', :banner => 'layout_name'
7
+
8
+ class_option :haml, :desc => 'Generate HAML for view, and SASS for stylesheet.', :type => :boolean
9
+ class_option :with_devise_links, :desc => 'Generate Devise links in your application layout.', :type => :boolean, :default => true
10
+
11
+ def create_layout
12
+ %w( "app/views/layouts/application.html.erb" "app/views/layouts/#{file_name}.html.haml" "app/views/layouts/#{file_name}.html.erb" ).each do |path|
13
+ FileUtils.rm path if file_exists?(path)
14
+ end
15
+
16
+ if options.haml?
17
+ if options.with_devise_links?
18
+ template 'layout.html.haml', "app/views/layouts/#{file_name}.html.haml"
19
+ else
20
+ template 'no-devise-links-layout.html.haml', "app/views/layouts/#{file_name}.html.haml"
21
+ end
22
+ copy_file 'stylesheet.sass', "public/stylesheets/sass/#{file_name}.sass"
23
+ else
24
+ if options.with_devise_links?
25
+ template 'layout.html.erb', "app/views/layouts/#{file_name}.html.erb"
26
+ else
27
+ template 'no-devise-links-layout.html.erb', "app/views/layouts/#{file_name}.html.erb"
28
+ end
29
+ copy_file 'stylesheet.css', "public/stylesheets/#{file_name}.css"
30
+ end
31
+ copy_file 'layout_helper.rb', 'app/helpers/layout_helper.rb'
32
+ copy_file 'error_messages_helper.rb', 'app/helpers/error_messages_helper.rb'
33
+ copy_file 'application.js', 'public/javascripts/application.js'
34
+ end
35
+
36
+ private
37
+
38
+ def file_name
39
+ layout_name.underscore
40
+ end
41
+
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,55 @@
1
+ // Place your application-specific JavaScript functions and classes here
2
+ // This file is automatically included by javascript_include_tag :defaults
3
+
4
+ // jQuery Input Hints plugin
5
+ jQuery.fn.inputHints=function() {
6
+ // show the display text
7
+ $(this).each(function(i) {
8
+ $(this).val($(this).attr('title'))
9
+ .addClass('hint');
10
+ });
11
+
12
+ // hook up the blur & focus
13
+ return $(this).focus(function() {
14
+ if ($(this).val() == $(this).attr('title'))
15
+ $(this).val('')
16
+ .removeClass('hint');
17
+ }).blur(function() {
18
+ if ($(this).val() == '')
19
+ $(this).val($(this).attr('title'))
20
+ .addClass('hint');
21
+ });
22
+ };
23
+
24
+ $(function() {
25
+
26
+ // add hints on input text search
27
+ $('input[title]').inputHints();
28
+ // closable link for message
29
+ $('.closelink').click(function() {
30
+ $('div.flash').fadeOut(500, function() {
31
+ $('div.flash').hide();
32
+ });
33
+ });
34
+
35
+
36
+ if (history && history.pushState) {
37
+ // handle index sort and pagination using ajax
38
+ $("#index_table th a, #index_table .pagination a").live("click", function(e) {
39
+ $.getScript(this.href);
40
+ history.pushState(null, document.title, this.href);
41
+ e.preventDefault();
42
+ });
43
+ // handle index input search keyup using ajax
44
+ $("#index_search input").keyup(function(e) {
45
+ $.get($("#index_search").attr("action"), $("#index_search").serialize(), null, "script");
46
+ history.replaceState(null, document.title, $("#index_search").attr("action") + "?" + $("#index_search").serialize());
47
+ e.preventDefault();
48
+ });
49
+ //bind window for postate
50
+ $(window).bind("popstate", function() {
51
+ $.getScript(location.href);
52
+ });
53
+ }
54
+
55
+ });
@@ -0,0 +1,23 @@
1
+ module ErrorMessagesHelper
2
+ # Render error messages for the given objects. The :message and :header_message options are allowed.
3
+ def error_messages_for(*objects)
4
+ options = objects.extract_options!
5
+ options[:header_message] ||= I18n.t(:"activerecord.errors.header", :default => "Invalid Fields")
6
+ options[:message] ||= I18n.t(:"activerecord.errors.message", :default => "Correct the following errors and try again.")
7
+ messages = objects.compact.map { |o| o.errors.full_messages }.flatten
8
+ unless messages.empty?
9
+ content_tag(:div, :class => "error_messages") do
10
+ list_items = messages.map { |msg| content_tag(:li, msg) }
11
+ content_tag(:h2, options[:header_message]) + content_tag(:p, options[:message]) + content_tag(:ul, list_items.join.html_safe)
12
+ end
13
+ end
14
+ end
15
+
16
+ module FormBuilderAdditions
17
+ def error_messages(options = {})
18
+ @template.error_messages_for(@object, options)
19
+ end
20
+ end
21
+ end
22
+
23
+ ActionView::Helpers::FormBuilder.send(:include, ErrorMessagesHelper::FormBuilderAdditions)
@@ -0,0 +1,32 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title><%%= content_for?(:title) ? yield(:title) : "Untitled" %></title>
5
+ <%%= stylesheet_link_tag "<%= file_name %>" %>
6
+ <%%= javascript_include_tag :defaults %>
7
+ <%%= csrf_meta_tag %>
8
+ <%%= yield(:head) %>
9
+ </head>
10
+ <body>
11
+ <div id="container">
12
+ <%% flash.each do |name, msg| %>
13
+ <%%= content_tag(:div, :id => "flash_#{name}", :class => "flash closable") do %>
14
+ <%%=h msg %>
15
+ <%%= content_tag(:span, "[close]", :title => "close", :class => "closelink") %>
16
+ <%% end %>
17
+ <%% end %>
18
+
19
+ <div id="loginbox">
20
+ <%% if user_signed_in? %>
21
+ Signed in as <%%= current_user.email %> Not You?
22
+ <%%= link_to "Sign out", destroy_user_session_path %>
23
+ <%% else %>
24
+ <%%= link_to "Sign up", new_user_registration_path %> or <%%= link_to "sign in", new_user_session_path %>
25
+ <%% end %>
26
+ </div>
27
+
28
+ <%%= content_tag :h1, yield(:title) if show_title? %>
29
+ <%%= yield %>
30
+ </div>
31
+ </body>
32
+ </html>
@@ -0,0 +1,34 @@
1
+ !!!
2
+ %html
3
+
4
+ %head
5
+ %title
6
+ = yield(:title) || "Untitled"
7
+ %meta{"http-equiv"=>"Content-Type", :content=>"text/html; charset=utf-8"}/
8
+ = stylesheet_link_tag "application"
9
+ = javascript_include_tag :defaults
10
+ = csrf_meta_tag
11
+ = yield(:head)
12
+
13
+ %body
14
+ #container
15
+ - flash.each do |name, msg|
16
+ %div{:id => "flash_#{name}", :class => "flash closable"}
17
+ =h msg
18
+ = content_tag :span, "[close]", :title => "close", :class => "closelink"
19
+
20
+ #loginbox
21
+ - if user_signed_in?
22
+ Signed in as
23
+ = current_user.email
24
+ Not You?
25
+ = link_to "Sign out", destroy_user_session_path
26
+ - else
27
+ = link_to "Sign up", new_user_registration_path
28
+ or
29
+ = link_to "sign in", new_user_session_path
30
+
31
+ - if show_title?
32
+ %h1= yield(:title)
33
+
34
+ = yield
@@ -0,0 +1,22 @@
1
+ # These helper methods can be called in your template to set variables to be used in the layout
2
+ # This module should be included in all views globally,
3
+ # to do so you may need to add this line to your ApplicationController
4
+ # helper :layout
5
+ module LayoutHelper
6
+ def title(page_title, show_title = true)
7
+ content_for(:title) { h(page_title.to_s) }
8
+ @show_title = show_title
9
+ end
10
+
11
+ def show_title?
12
+ @show_title
13
+ end
14
+
15
+ def stylesheet(*args)
16
+ content_for(:head) { stylesheet_link_tag(*args) }
17
+ end
18
+
19
+ def javascript(*args)
20
+ content_for(:head) { javascript_include_tag(*args) }
21
+ end
22
+ end
@@ -0,0 +1,23 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title><%%= content_for?(:title) ? yield(:title) : "Untitled" %></title>
5
+ <%%= stylesheet_link_tag "<%= file_name %>" %>
6
+ <%%= javascript_include_tag :defaults %>
7
+ <%%= csrf_meta_tag %>
8
+ <%%= yield(:head) %>
9
+ </head>
10
+ <body>
11
+ <div id="container">
12
+ <%% flash.each do |name, msg| %>
13
+ <%%= content_tag(:div, :id => "flash_#{name}", :class => "flash closable") do %>
14
+ <%%=h msg %>
15
+ <%%= content_tag(:span, "[close]", :title => "close", :class => "closelink") %>
16
+ <%% end %>
17
+ <%% end %>
18
+
19
+ <%%= content_tag :h1, yield(:title) if show_title? %>
20
+ <%%= yield %>
21
+ </div>
22
+ </body>
23
+ </html>
@@ -0,0 +1,23 @@
1
+ !!!
2
+ %html
3
+
4
+ %head
5
+ %title
6
+ = yield(:title) || "Untitled"
7
+ %meta{"http-equiv"=>"Content-Type", :content=>"text/html; charset=utf-8"}/
8
+ = stylesheet_link_tag "application"
9
+ = javascript_include_tag :defaults
10
+ = csrf_meta_tag
11
+ = yield(:head)
12
+
13
+ %body
14
+ #container
15
+ - flash.each do |name, msg|
16
+ %div{:id => "flash_#{name}", :class => "flash closable"}
17
+ =h msg
18
+ = content_tag :span, "[close]", :title => "close", :class => "closelink"
19
+
20
+ - if show_title?
21
+ %h1= yield(:title)
22
+
23
+ = yield
@@ -0,0 +1,166 @@
1
+ body {
2
+ background-color: #D0D0D0;
3
+ font-family: Verdana, Helvetica, Arial;
4
+ font-size: 14px;
5
+ }
6
+
7
+ a img {
8
+ border: none;
9
+ }
10
+
11
+ a {
12
+ color: #0000FF;
13
+ }
14
+
15
+ input.hint {
16
+ color: #999;
17
+ font-style :italic;
18
+ }
19
+
20
+ .clear {
21
+ clear: both;
22
+ height: 0;
23
+ overflow: hidden;
24
+ }
25
+
26
+ #container {
27
+ width: 75%;
28
+ margin: 0 auto;
29
+ background-color: #FFF;
30
+ padding: 20px 40px;
31
+ border: solid 1px black;
32
+ margin-top: 20px;
33
+ }
34
+
35
+ #loginbox {
36
+ float: right;
37
+ }
38
+
39
+ #flash_notice {
40
+ background-color: #CCEECC;
41
+ color: #006600;
42
+ text-shadow: 1px 1px 1px #FFFFFF;
43
+ }
44
+
45
+ #flash_error {
46
+ background-color: #FFFFD7;
47
+ color: #555555;
48
+ text-shadow: 1px 1px 1px #FFFFFF;
49
+ }
50
+
51
+ #flash_alert {
52
+ background-color: #F7E1DF;
53
+ color: #B81010;
54
+ text-shadow: 1px 1px 1px #FCF4F3;
55
+ }
56
+
57
+ .flash {
58
+ border: 1px solid #D5D5D5;
59
+ color: #555555;
60
+ font-size: 13px;
61
+ font-weight: bold;
62
+ margin: 10px 0;
63
+ padding: 10px;
64
+ }
65
+
66
+ .closable {
67
+ position: relative;
68
+ }
69
+ .closable .closelink {
70
+ cursor: pointer;
71
+ height: 16px;
72
+ margin-top: -4px;
73
+ opacity: 0.3;
74
+ position: absolute;
75
+ right: 8px;
76
+ top: 15px;
77
+ }
78
+ .closelink:hover {
79
+ opacity: 1;
80
+ }
81
+
82
+
83
+ .fieldWithErrors {
84
+ display: inline;
85
+ }
86
+
87
+ .error_messages {
88
+ width: 400px;
89
+ border: 2px solid #CF0000;
90
+ padding: 0px;
91
+ padding-bottom: 12px;
92
+ margin-bottom: 20px;
93
+ background-color: #f0f0f0;
94
+ font-size: 12px;
95
+ }
96
+
97
+ .error_messages h2 {
98
+ text-align: left;
99
+ font-weight: bold;
100
+ padding: 5px 10px;
101
+ font-size: 12px;
102
+ margin: 0;
103
+ background-color: #c00;
104
+ color: #fff;
105
+ }
106
+
107
+ .error_messages p {
108
+ margin: 8px 10px;
109
+ }
110
+
111
+ .error_messages ul {
112
+ margin: 0;
113
+ }
114
+
115
+ /* pretty-table */
116
+ table.pretty {
117
+ border-collapse: collapse;
118
+ }
119
+
120
+ .pretty td, .pretty th {
121
+ padding: 4px 10px;
122
+ border: solid 1px #AAA;
123
+ }
124
+
125
+ /* simple-form */
126
+ .simple_form label {
127
+ float: left;
128
+ width: 100px;
129
+ text-align: right;
130
+ margin: 2px 10px;
131
+ }
132
+
133
+ .simple_form div.input {
134
+ margin-bottom: 10px;
135
+ }
136
+
137
+ .simple_form div.boolean, .simple_form input[type='submit'] {
138
+ margin-left: 120px;
139
+ }
140
+
141
+ .simple_form div.boolean label, .simple_form label.collection_radio {
142
+ float: none;
143
+ margin: 0;
144
+ }
145
+
146
+ .simple_form label.collection_radio {
147
+ margin-right: 10px;
148
+ margin-left: 2px;
149
+ }
150
+
151
+ .simple_form .error {
152
+ clear: left;
153
+ margin-left: 120px;
154
+ font-size: 12px;
155
+ color: #D00;
156
+ display: block;
157
+ }
158
+
159
+ .simple_form .hint {
160
+ clear: left;
161
+ margin-left: 120px;
162
+ font-size: 12px;
163
+ color: #555;
164
+ display: block;
165
+ font-style: italic;
166
+ }