social_engine 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.
Files changed (68) hide show
  1. data/Gemfile +13 -0
  2. data/LICENSE.txt +20 -0
  3. data/README.md +340 -0
  4. data/VERSION +1 -0
  5. data/app/controllers/comments_controller.rb +13 -0
  6. data/app/controllers/favorites_controller.rb +21 -0
  7. data/app/controllers/ratings_controller.rb +15 -0
  8. data/app/controllers/reputation_actions_controller.rb +13 -0
  9. data/app/controllers/social_engine_controller.rb +32 -0
  10. data/app/controllers/votes_controller.rb +15 -0
  11. data/app/helpers/social_engine_helper.rb +82 -0
  12. data/app/models/comment.rb +10 -0
  13. data/app/models/favorite.rb +4 -0
  14. data/app/models/friending.rb +21 -0
  15. data/app/models/rating.rb +6 -0
  16. data/app/models/reputation.rb +24 -0
  17. data/app/models/reputation_action.rb +15 -0
  18. data/app/models/social_engine/commentable.rb +14 -0
  19. data/app/models/social_engine/favoriteable.rb +14 -0
  20. data/app/models/social_engine/friendable.rb +56 -0
  21. data/app/models/social_engine/helpers.rb +37 -0
  22. data/app/models/social_engine/rateable.rb +33 -0
  23. data/app/models/social_engine/reputatable.rb +14 -0
  24. data/app/models/social_engine/sociable.rb +17 -0
  25. data/app/models/social_engine/social_user.rb +16 -0
  26. data/app/models/social_engine/voteable.rb +28 -0
  27. data/app/models/vote.rb +13 -0
  28. data/app/views/comments/_comment.haml +11 -0
  29. data/app/views/comments/_form.haml +8 -0
  30. data/app/views/comments/_list.haml +4 -0
  31. data/app/views/comments/new.haml +1 -0
  32. data/app/views/common/_user_attributes.haml +6 -0
  33. data/app/views/favorites/_widget.haml +8 -0
  34. data/app/views/ratings/_form.haml +6 -0
  35. data/app/views/ratings/_rating.haml +3 -0
  36. data/app/views/ratings/new.haml +1 -0
  37. data/app/views/reputation_actions/_form.haml +5 -0
  38. data/app/views/reputation_actions/edit.haml +3 -0
  39. data/app/views/reputation_actions/index.haml +21 -0
  40. data/app/views/reputation_actions/new.haml +9 -0
  41. data/app/views/third_party/_fb_friend_box.html.erb +5 -0
  42. data/app/views/third_party/_fb_javascript_sdk.html.erb +13 -0
  43. data/app/views/third_party/_fb_og_tags.html.erb +10 -0
  44. data/app/views/third_party/_fblike.html.erb +3 -0
  45. data/app/views/third_party/_tweetme.html.erb +6 -0
  46. data/app/views/votes/_widget.haml +13 -0
  47. data/config/routes.rb +3 -0
  48. data/lib/generators/social_engine/install/USAGE +17 -0
  49. data/lib/generators/social_engine/install/install_generator.rb +34 -0
  50. data/lib/generators/social_engine/install/templates/create_comments_table.rb +23 -0
  51. data/lib/generators/social_engine/install/templates/create_favorites_table.rb +19 -0
  52. data/lib/generators/social_engine/install/templates/create_friendings_table.rb +20 -0
  53. data/lib/generators/social_engine/install/templates/create_ratings_table.rb +21 -0
  54. data/lib/generators/social_engine/install/templates/create_reputation_actions_table.rb +14 -0
  55. data/lib/generators/social_engine/install/templates/create_reputations_table.rb +19 -0
  56. data/lib/generators/social_engine/install/templates/create_votes_table.rb +21 -0
  57. data/lib/generators/social_engine/install/templates/formtastic.css +145 -0
  58. data/lib/generators/social_engine/install/templates/social_engine.css +26 -0
  59. data/lib/generators/social_engine/install/templates/social_engine_yetting.yml +89 -0
  60. data/lib/generators/social_engine/user_reputation/templates/add_reputation_to_users_table.rb +9 -0
  61. data/lib/generators/social_engine/user_reputation/user_reputation_generator.rb +22 -0
  62. data/lib/social_engine.rb +11 -0
  63. data/lib/social_engine/core_ext/array.rb +13 -0
  64. data/lib/social_engine/core_ext/hash.rb +26 -0
  65. data/lib/social_engine/engine.rb +44 -0
  66. data/lib/social_engine/railties/tasks.rake +0 -0
  67. data/social_engine.gemspec +126 -0
  68. metadata +211 -0
@@ -0,0 +1,13 @@
1
+ class Vote < ActiveRecord::Base
2
+ belongs_to :voteable, :polymorphic=>true
3
+ validates_uniqueness_of :voteable_type, :scope=> SocialEngine::Helpers::Fingerprint.fingerprint_type(:voteable_id),
4
+ :if => Proc.new { |x| SocialEngineYetting.fingerprint_method != "none" }
5
+
6
+ def up?
7
+ self.value>0
8
+ end
9
+
10
+ def down?
11
+ self.value<0
12
+ end
13
+ end
@@ -0,0 +1,11 @@
1
+ .se-comment{:id=>div_id(comment)}
2
+ .se-comment-body
3
+ =comment.comment
4
+ -if options[:show_posted_by] or options[:date]
5
+ .se-comment-info
6
+ -if options[:show_posted_by]
7
+ .se-comment-posted-by
8
+ \Posted by #{comment.name}
9
+ -if options[:date]
10
+ .se-comment-date
11
+ =comment.created_at.strftime(options[:date])
@@ -0,0 +1,8 @@
1
+ .se-comment-form
2
+ =semantic_form_for [commentable,comment] do |f|
3
+ = f.inputs do
4
+ -unless current_user
5
+ = render "common/user_attributes", options: options, f: f
6
+ = f.input :comment, :label=> options[:comment][:label]
7
+ = f.buttons do
8
+ =f.commit_button options[:comment][:button_text]
@@ -0,0 +1,4 @@
1
+ .se-comments-list
2
+ %ul
3
+ - comments.each do |comment|
4
+ %li= render partial: "comments/comment", locals:{comment: comment, options:options}
@@ -0,0 +1 @@
1
+ =render "comments/form", commentable: @commentable, comment: Comment.new
@@ -0,0 +1,6 @@
1
+ -if options[:name]
2
+ = f.input :unauthenticated_name, :label=> options[:name][:label], :required=>options[:name][:required]
3
+ -if options[:email]
4
+ = f.input :unauthenticated_email, :label=> options[:email][:label], :required=>options[:email][:required]
5
+ -if options[:website]
6
+ = f.input :unauthenticated_website, :label=> options[:website][:label], :required=>options[:website][:required]
@@ -0,0 +1,8 @@
1
+ - if current_user
2
+ .se-favorite{:id=>"favorite-#{div_id(favoriteable)}"}
3
+ - if current_user.favorites.include?(favorite)
4
+ =button_to options[:remove_text], "/#{favoriteable.class.to_s.underscore.pluralize}/#{favoriteable.id}/favorites/#{favorite.id}", :method=>:delete, :class=>"se-favorite-delete"
5
+ - else
6
+ =semantic_form_for [favoriteable,Favorite.new] do |f|
7
+ = f.buttons do
8
+ =f.commit_button options[:add_text], :class=>"se-favorite-add"
@@ -0,0 +1,6 @@
1
+ .se-rating-form
2
+ =semantic_form_for [rateable,rating] do |f|
3
+ = f.inputs do
4
+ = f.input :value, :as=>:radio, :collection=>(1..options[:max_value]).to_a, :label=>""
5
+ = f.buttons do
6
+ =f.commit_button options[:button_text]
@@ -0,0 +1,3 @@
1
+ %div{:id=>div_id(rating),:class=>"se-rating-value#{rating.value}"}
2
+ .se-rating-value-text
3
+ = rating.value
@@ -0,0 +1 @@
1
+ =render "ratings/form", rateable: @rateable, rating: Rating.new
@@ -0,0 +1,5 @@
1
+ #se-reputation-action-form
2
+ =semantic_form_for @reputation_action do |f|
3
+ = f.inputs
4
+ = f.buttons do
5
+ =f.commit_button "Save Reputation Action"
@@ -0,0 +1,3 @@
1
+ #se-edit-reputation-action
2
+ %h1 Edit Reputation Action
3
+ =render "form"
@@ -0,0 +1,21 @@
1
+ #se-reputation-actions-list
2
+ %h1 Reputation Actions
3
+ #se-new-reputation-action-link
4
+ =link_to "Add New Reputation Action", new_reputation_action_url
5
+ %table{:id=>"businesses-table"}
6
+ %thead
7
+ %tr
8
+ %th Name
9
+ %th Value
10
+ %th
11
+ %th
12
+ %tbody
13
+ - @reputation_actions.each do |rep_action|
14
+ %tr
15
+ %td= rep_action.name
16
+ %td= rep_action.value
17
+ %td= link_to "Edit", edit_reputation_action_url(rep_action)
18
+ %td= link_to "Edit", edit_reputation_action_url(rep_action), :method=>"destroy", :confirm=>"Are you sure you want to delete"
19
+
20
+
21
+
@@ -0,0 +1,9 @@
1
+ #se-new-reputation-action
2
+ %h1 New Reputation Action
3
+ =render "form"
4
+ #se-reputation-action-source-list
5
+ %h2 Source Actions
6
+ - ReputationAction.list_from_rails_source.each do |action|
7
+ = action
8
+ ,
9
+
@@ -0,0 +1,5 @@
1
+ <div class="<%=options[:div_class]%>">
2
+ <script src="http://connect.facebook.net/en_US/all.js#xfbml=1"></script>
3
+ <fb:like-box href="<%=options[:fb_page_url]%>" width="<%=options[:width]%>" show_faces="<%=options[:faces]%>" stream="<%=options[:stream]%>" header="<%=options[:header]%>">
4
+ </fb:like-box>
5
+ </div>
@@ -0,0 +1,13 @@
1
+ <div id="fb-root"></div>
2
+ <script>
3
+ window.fbAsyncInit = function() {
4
+ FB.init({appId: '<%=options[:app_id]%>', status: true, cookie: true,
5
+ xfbml: true});
6
+ };
7
+ (function() {
8
+ var e = document.createElement('script'); e.async = true;
9
+ e.src = document.location.protocol +
10
+ '//connect.facebook.net/en_US/all.js';
11
+ document.getElementById('fb-root').appendChild(e);
12
+ }());
13
+ </script>
@@ -0,0 +1,10 @@
1
+ <meta property="og:title" content="<%=options[:title]%>" />
2
+ <meta property="og:type" content="<%=options[:type]%>" />
3
+ <meta property="og:url" content="<%=options[:url]%>" />
4
+ <meta property="og:image" content="<%=options[:image]%>" />
5
+ <meta property="og:site_name" content="<%=options[:site_name]%>" />
6
+ <% if options[:app_id] %>
7
+ <meta property="fb:app_id" content="<%=options[:app_id]%>" />
8
+ <% else %>
9
+ <meta property="fb:admins" content="<%=options[:admins]%>" />
10
+ <% end %>
@@ -0,0 +1,3 @@
1
+ <div class="<%=options[:div_class]%>">
2
+ <script src="http://connect.facebook.net/en_US/all.js#xfbml=1"></script><fb:like href="<%= options[:url] %>" layout="<%=options[:layout]%>" show_faces="<%=options[:faces]%>" width="<%=options[:width]%>" action="<%=options[:action]%>" font="<%=options[:font]%>" colorscheme="<%=options[:colorscheme]%>"></fb:like>
3
+ </div>
@@ -0,0 +1,6 @@
1
+ <div class="<%=options[:div_class]%>">
2
+ <a href="http://twitter.com/share" class="twitter-share-button" data-count="<%=options[:count] %>"
3
+ <% if options[:url] %> data-url="<%=options[:url] %>"<% end %>
4
+ <% if options[:text] %> data-text="<%=options[:text] %>"<% end %>
5
+ <% if options[:via] %> data-via="<%=options[:via]%>"<% end %>
6
+ >Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div>
@@ -0,0 +1,13 @@
1
+ .se-vote-widget
2
+ .se-vote-up
3
+ =semantic_form_for [voteable,Vote.new(value:1)] do |f|
4
+ = f.input :value, :as=>:hidden
5
+ = f.buttons do
6
+ =f.commit_button options[:upvote_text]
7
+ .se-vote-score
8
+ =voteable.vote_sum
9
+ .se-vote-down
10
+ =semantic_form_for [voteable,Vote.new(value:-1)] do |f|
11
+ = f.input :value, :as=>:hidden
12
+ = f.buttons do
13
+ =f.commit_button options[:downvote_text]
data/config/routes.rb ADDED
@@ -0,0 +1,3 @@
1
+ Rails.application.routes.draw do
2
+ resources :comments, :ratings, :votes, :favorites, :reputation_actions
3
+ end
@@ -0,0 +1,17 @@
1
+ Description:
2
+ This generator creates your db migrations, configuration file and css used by social_engine
3
+
4
+ Example:
5
+ rails generate social_engine
6
+
7
+ This will create:
8
+ db/migrations/create_comments_table.rb
9
+ db/migrations/create_votes_table.rb
10
+ db/migrations/create_ratings_table.rb
11
+ db/migrations/create_favorites_table.rb
12
+ db/migrations/create_reputations_table.rb
13
+ db/migrations/create_reputation_actions_table.rb
14
+ db/migrations/create_friendings_table.rb
15
+ public/stylesheets/social_engine.css
16
+ public/stylesheets/formtastic.css
17
+ config/yettings/social_engine.yml
@@ -0,0 +1,34 @@
1
+ require 'rails/generators'
2
+ require 'rails/generators/migration'
3
+
4
+ module SocialEngine
5
+ class InstallGenerator < Rails::Generators::Base
6
+ include Rails::Generators::Migration
7
+ source_root File.join(File.dirname(__FILE__), 'templates')
8
+
9
+ def self.next_migration_number(dirname)
10
+ sleep 1
11
+ if ActiveRecord::Base.timestamped_migrations
12
+ Time.now.utc.strftime("%Y%m%d%H%M%S")
13
+ else
14
+ "%.3d" % (current_migration_number(dirname) + 1)
15
+ end
16
+ end
17
+
18
+ def create_migration_file
19
+ migration_template 'create_comments_table.rb', 'db/migrate/create_comments_table.rb'
20
+ migration_template 'create_votes_table.rb', 'db/migrate/create_votes_table.rb'
21
+ migration_template 'create_ratings_table.rb', 'db/migrate/create_ratings_table.rb'
22
+ migration_template 'create_favorites_table.rb', 'db/migrate/create_favorites_table.rb'
23
+ migration_template 'create_reputations_table.rb', 'db/migrate/create_reputations_table.rb'
24
+ migration_template 'create_reputation_actions_table.rb', 'db/migrate/create_reputation_actions_table.rb'
25
+ migration_template 'create_friendings_table.rb', 'db/migrate/create_friendings_table.rb'
26
+ end
27
+
28
+ def create_static_assets
29
+ copy_file "social_engine_yetting.yml", "config/yettings/social_engine.yml"
30
+ copy_file "social_engine.css", "public/stylesheets/social_engine.css"
31
+ copy_file "formtastic.css", "public/stylesheets/formtastic.css"
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,23 @@
1
+ class CreateCommentsTable < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :comments, :force => true do |t|
4
+ t.string :commentable_type
5
+ t.integer :commentable_id
6
+ t.integer :user_id
7
+ t.text :comment
8
+ t.string :unauthenticated_name
9
+ t.string :unauthenticated_email
10
+ t.string :unauthenticated_website
11
+ t.string :ip_address
12
+ t.string :session_hash
13
+ t.string :browser_fingerprint
14
+ t.timestamps
15
+ end
16
+ add_index :comments, [:commentable_type, :commentable_id, :ip_address, :browser_fingerprint], :name => "comments_index", :unique => false
17
+ end
18
+
19
+ def self.down
20
+ remove_index :comments, :name=> :comments_index
21
+ drop_table :comments
22
+ end
23
+ end
@@ -0,0 +1,19 @@
1
+ class CreateFavoritesTable < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :favorites, :force => true do |t|
4
+ t.string :favoriteable_type
5
+ t.integer :favoriteable_id
6
+ t.integer :user_id
7
+ t.string :ip_address
8
+ t.string :session_hash
9
+ t.string :browser_fingerprint
10
+ t.timestamps
11
+ end
12
+ add_index :favorites, [:favoriteable_type, :favoriteable_id, :ip_address, :browser_fingerprint], :name => "favorites_index", :unique => false
13
+ end
14
+
15
+ def self.down
16
+ remove_index :favorites, :name=> :favorites_index
17
+ drop_table :favorites
18
+ end
19
+ end
@@ -0,0 +1,20 @@
1
+ class CreateFriendingsTable < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :friendings, :force => true do |t|
4
+ t.integer :friendor_id
5
+ t.integer :friendee_id
6
+ t.boolean :confirmed, :default => false
7
+ t.boolean :rejected, :default => false
8
+ t.timestamps
9
+ end
10
+
11
+ add_index :friendings, :friendor_id
12
+ add_index :friendings, :friendee_id
13
+ end
14
+
15
+ def self.down
16
+ remove_index :friendings, :friendor_id
17
+ remove_index :friendings, :friendee_id
18
+ drop_table :friendings
19
+ end
20
+ end
@@ -0,0 +1,21 @@
1
+ class CreateRatingsTable < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :ratings, :force => true do |t|
4
+ t.string :rateable_type
5
+ t.integer :rateable_id
6
+ t.integer :value
7
+ t.integer :user_id
8
+ t.string :ip_address
9
+ t.string :session_hash
10
+ t.string :browser_fingerprint
11
+ t.timestamps
12
+ end
13
+
14
+ add_index :ratings, [:rateable_type, :rateable_id, :ip_address, :browser_fingerprint], :name => "ratings_index", :unique => false
15
+ end
16
+
17
+ def self.down
18
+ remove_index :ratings, :name=> :ratings_index
19
+ drop_table :ratings
20
+ end
21
+ end
@@ -0,0 +1,14 @@
1
+ class CreateReputationActionsTable < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :reputation_actions, :force => true do |t|
4
+ t.string :name
5
+ t.text :description
6
+ t.integer :value
7
+ t.timestamps
8
+ end
9
+ end
10
+
11
+ def self.down
12
+ drop_table :reputation_actions
13
+ end
14
+ end
@@ -0,0 +1,19 @@
1
+ class CreateReputationsTable < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :reputations, :force => true do |t|
4
+ t.integer :user_id
5
+ t.integer :reputation_action_id
6
+ t.integer :value
7
+ t.timestamps
8
+ end
9
+
10
+ add_index :reputations, [:user_id,:reputation_action_id], :name => "user_reputation", :unique => false
11
+ add_index :reputations, :reputation_action_id
12
+ end
13
+
14
+ def self.down
15
+ remove_index :reputations, :reputation_action_id
16
+ remove_index :reputations, :name=> :user_reputation
17
+ drop_table :reputations
18
+ end
19
+ end
@@ -0,0 +1,21 @@
1
+ class CreateVotesTable < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :votes, :force => true do |t|
4
+ t.string :voteable_type
5
+ t.integer :voteable_id
6
+ t.integer :user_id
7
+ t.integer :value
8
+ t.string :ip_address
9
+ t.string :session_hash
10
+ t.string :browser_fingerprint
11
+ t.timestamps
12
+ end
13
+
14
+ add_index :votes, [:voteable_type, :voteable_id, :ip_address, :browser_fingerprint], :name => "votes_index", :unique => false
15
+ end
16
+
17
+ def self.down
18
+ remove_index :votes, :name=> :votes_index
19
+ drop_table :votes
20
+ end
21
+ end
@@ -0,0 +1,145 @@
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 { white-space:normal; color:#000; }
23
+
24
+
25
+ /* SEMANTIC ERRORS
26
+ --------------------------------------------------------------------------------------------------*/
27
+ form.formtastic ul.errors { color:#cc0000; margin:0.5em 0 1.5em 25%; list-style:square; }
28
+ form.formtastic ul.errors li { padding:0; border:none; display:list-item; }
29
+
30
+
31
+ /* FIELDSETS & LISTS
32
+ --------------------------------------------------------------------------------------------------*/
33
+ form.formtastic fieldset { overflow:auto; } /* clearing contained floats */
34
+ form.formtastic fieldset.inputs { }
35
+ form.formtastic fieldset.buttons { padding-left:25%; }
36
+ form.formtastic fieldset ol { }
37
+ form.formtastic fieldset.buttons li { float:left; padding-right:0.5em; }
38
+
39
+ /* INPUT LIs
40
+ --------------------------------------------------------------------------------------------------*/
41
+ form.formtastic fieldset > ol > li { padding:0.5em 0; margin-top:-0.5em; margin-bottom:1em; } /* padding and negative margin juggling is for Firefox */
42
+ form.formtastic fieldset > ol > li { overflow:auto; } /* clearing contained floats */
43
+
44
+ form.formtastic fieldset > ol > li.required { }
45
+ form.formtastic fieldset > ol > li.optional { }
46
+ form.formtastic fieldset > ol > li.error { }
47
+
48
+
49
+ /* LABELS
50
+ --------------------------------------------------------------------------------------------------*/
51
+ form.formtastic fieldset > ol > li label { display:block; width:25%; float:left; padding-top:.2em; }
52
+ form.formtastic fieldset > ol > li > li label { line-height:100%; padding-top:0; }
53
+ form.formtastic fieldset > ol > li > li label input { line-height:100%; vertical-align:middle; margin-top:-0.1em;}
54
+
55
+
56
+ /* NESTED FIELDSETS AND LEGENDS (radio, check boxes and date/time inputs use nested fieldsets)
57
+ --------------------------------------------------------------------------------------------------*/
58
+ form.formtastic fieldset > ol > li fieldset { position:relative; }
59
+ form.formtastic fieldset > ol > li fieldset legend { position:absolute; width:95%; left: 0px; }
60
+ form.formtastic fieldset > ol > li fieldset legend span { position:absolute; }
61
+ form.formtastic fieldset > ol > li fieldset legend.label label { position:absolute; }
62
+ form.formtastic fieldset > ol > li fieldset ol { float:left; width:74%; margin:0; padding:0 0 0 25%; }
63
+ form.formtastic fieldset > ol > li fieldset ol li { padding:0; border:0; }
64
+
65
+
66
+ /* INLINE HINTS
67
+ --------------------------------------------------------------------------------------------------*/
68
+ form.formtastic fieldset > ol > li p.inline-hints { color:#666; margin:0.5em 0 0 25%; }
69
+
70
+
71
+ /* INLINE ERRORS
72
+ --------------------------------------------------------------------------------------------------*/
73
+ form.formtastic fieldset > ol > li p.inline-errors { color:#cc0000; margin:0.5em 0 0 25%; }
74
+ form.formtastic fieldset > ol > li ul.errors { color:#cc0000; margin:0.5em 0 0 25%; list-style:square; }
75
+ form.formtastic fieldset > ol > li ul.errors li { padding:0; border:none; display:list-item; }
76
+
77
+
78
+ /* STRING, NUMERIC, PASSWORD, EMAIL, URL, PHONE & SEARCH OVERRIDES
79
+ --------------------------------------------------------------------------------------------------*/
80
+ form.formtastic fieldset > ol > li.string input,
81
+ form.formtastic fieldset > ol > li.password input,
82
+ form.formtastic fieldset > ol > li.numeric input,
83
+ form.formtastic fieldset > ol > li.email input,
84
+ form.formtastic fieldset > ol > li.url input,
85
+ form.formtastic fieldset > ol > li.phone input,
86
+ form.formtastic fieldset > ol > li.search input { width:72%; }
87
+
88
+ form.formtastic fieldset > ol > li.string input[size],
89
+ form.formtastic fieldset > ol > li.password input[size],
90
+ form.formtastic fieldset > ol > li.numeric input[size],
91
+ form.formtastic fieldset > ol > li.email input[size],
92
+ form.formtastic fieldset > ol > li.url input[size],
93
+ form.formtastic fieldset > ol > li.phone input[size],
94
+ form.formtastic fieldset > ol > li.search input[size] { width:auto; max-width:72%; }
95
+
96
+
97
+ /* TEXTAREA OVERRIDES
98
+ --------------------------------------------------------------------------------------------------*/
99
+ form.formtastic fieldset > ol > li.text textarea { width:72%; }
100
+ form.formtastic fieldset > ol > li.text textarea[cols] { width:auto; max-width:72%; }
101
+
102
+
103
+ /* HIDDEN OVERRIDES
104
+ --------------------------------------------------------------------------------------------------*/
105
+ form.formtastic fieldset ol li.hidden { display:none; }
106
+
107
+ /* BOOLEAN OVERRIDES
108
+ --------------------------------------------------------------------------------------------------*/
109
+ form.formtastic fieldset > ol > li.boolean label { padding-left:25%; width:auto; }
110
+ form.formtastic fieldset > ol > li.boolean label input { margin:0 0.5em 0 0.2em; }
111
+
112
+
113
+ /* RADIO OVERRIDES
114
+ --------------------------------------------------------------------------------------------------*/
115
+ form.formtastic fieldset > ol > li.radio { }
116
+ form.formtastic fieldset > ol > li.radio fieldset { overflow:visible; }
117
+ form.formtastic fieldset > ol > li.radio fieldset ol { margin-bottom:-0.5em; }
118
+ form.formtastic fieldset > ol > li.radio fieldset ol li { margin:0.1em 0 0.5em 0; overflow:visible; }
119
+ form.formtastic fieldset > ol > li.radio fieldset ol li label { float:none; width:100%; }
120
+ form.formtastic fieldset > ol > li.radio fieldset ol li label input { margin-right:0.2em; }
121
+
122
+
123
+ /* CHECK BOXES (COLLECTION) OVERRIDES
124
+ --------------------------------------------------------------------------------------------------*/
125
+ form.formtastic fieldset > ol > li.check_boxes { }
126
+ form.formtastic fieldset > ol > li.check_boxes fieldset { overflow:visible; }
127
+ form.formtastic fieldset > ol > li.check_boxes fieldset ol { margin-bottom:-0.5em; }
128
+ form.formtastic fieldset > ol > li.check_boxes fieldset ol li { margin:0.1em 0 0.5em 0; overflow:visible; }
129
+ form.formtastic fieldset > ol > li.check_boxes fieldset ol li label { float:none; width:100%; }
130
+ form.formtastic fieldset > ol > li.check_boxes fieldset ol li label input { margin-right:0.2em; }
131
+
132
+
133
+ /* DATE & TIME OVERRIDES
134
+ --------------------------------------------------------------------------------------------------*/
135
+ form.formtastic fieldset > ol > li.date fieldset ol li,
136
+ form.formtastic fieldset > ol > li.time fieldset ol li,
137
+ form.formtastic fieldset > ol > li.datetime fieldset ol li { float:left; width:auto; margin:0 .3em 0 0; }
138
+
139
+ form.formtastic fieldset > ol > li.date fieldset ol li label,
140
+ form.formtastic fieldset > ol > li.time fieldset ol li label,
141
+ form.formtastic fieldset > ol > li.datetime fieldset ol li label { display:none; }
142
+
143
+ form.formtastic fieldset > ol > li.date fieldset ol li label input,
144
+ form.formtastic fieldset > ol > li.time fieldset ol li label input,
145
+ form.formtastic fieldset > ol > li.datetime fieldset ol li label input { display:inline; margin:0; padding:0; }