sogilis-moxie_forum 0.2.8

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 (44) hide show
  1. data/README.rdoc +47 -0
  2. data/app/controllers/moxie/admin/forums_controller.rb +71 -0
  3. data/app/controllers/moxie/admin_controller.rb +10 -0
  4. data/app/controllers/moxie/forums_controller.rb +29 -0
  5. data/app/controllers/moxie/posts_controller.rb +52 -0
  6. data/app/controllers/moxie/topics_controller.rb +62 -0
  7. data/app/helpers/moxie/application_helper.rb +3 -0
  8. data/app/helpers/moxie/forums_helper.rb +5 -0
  9. data/app/models/moxie/forum.rb +16 -0
  10. data/app/models/moxie/post.rb +34 -0
  11. data/app/models/moxie/topic.rb +39 -0
  12. data/app/views/layouts/forums.html.erb +14 -0
  13. data/app/views/moxie/admin/forums/_form.html.erb +28 -0
  14. data/app/views/moxie/admin/forums/edit.html.erb +6 -0
  15. data/app/views/moxie/admin/forums/index.html.erb +28 -0
  16. data/app/views/moxie/admin/forums/new.html.erb +5 -0
  17. data/app/views/moxie/admin/forums/show.html.erb +20 -0
  18. data/app/views/moxie/admin/index.html.erb +3 -0
  19. data/app/views/moxie/forums/authorization_error.html.erb +4 -0
  20. data/app/views/moxie/forums/index.html.erb +20 -0
  21. data/app/views/moxie/forums/show.html.erb +38 -0
  22. data/app/views/moxie/posts/_form.html.erb +51 -0
  23. data/app/views/moxie/posts/_post.html.erb +23 -0
  24. data/app/views/moxie/topics/_form.html.erb +50 -0
  25. data/app/views/moxie/topics/new.html.erb +1 -0
  26. data/app/views/moxie/topics/show.html.erb +12 -0
  27. data/config/routes.rb +26 -0
  28. data/lib/application_helper.rb +15 -0
  29. data/lib/moxie_forum/acts_as_moxie_user/base.rb +57 -0
  30. data/lib/moxie_forum/engine.rb +52 -0
  31. data/lib/moxie_forum.rb +4 -0
  32. data/lib/rails/generators/moxie_forum/moxie_forum_generator.rb +130 -0
  33. data/lib/rails/generators/moxie_forum/templates/config.yml +5 -0
  34. data/lib/rails/generators/moxie_forum/templates/initializer.rb +14 -0
  35. data/lib/rails/generators/moxie_forum/templates/migration.rb +20 -0
  36. data/lib/rails/generators/moxie_forum/templates/schema.rb +43 -0
  37. data/lib/rails/railties/tasks.rake +8 -0
  38. data/lib/tasks/tasks.rb +9 -0
  39. data/public/images/gradient_grey.png +0 -0
  40. data/public/stylesheets/moxie_forum.css +223 -0
  41. data/test/generators/moxie_forum_generator_test.rb +10 -0
  42. data/test/test_helper.rb +77 -0
  43. data/test/unit/forum_test.rb +75 -0
  44. metadata +108 -0
@@ -0,0 +1,50 @@
1
+
2
+ <%= form_for [ @topic ] do |f| %>
3
+ <% if @topic.errors.any? %>
4
+ <div id="errorExplanation">
5
+ <h2><%= pluralize(@topic.errors.count, "error") %> prohibited this forum from being saved:</h2>
6
+ <ul>
7
+ <% @topic.errors.full_messages.each do |msg| %>
8
+ <li><%= msg %></li>
9
+ <% end %>
10
+ </ul>
11
+ </div>
12
+ <% end %>
13
+
14
+ <div class="m_post clearfix">
15
+
16
+ <div class="m_user">
17
+ <%= raw current_user.profile_pic %>
18
+ </div>
19
+
20
+ <div class="m_contents">
21
+ <div class="m_meta">
22
+ <div class="m_prompt field"><%= f.label :title, MoxieForum::Engine.config.prompt_for_new_topic_creation %></div>
23
+ <%= f.text_field :title %>
24
+ <div class="m_prompt_explanation"></div>
25
+ </div>
26
+
27
+ <%= f.fields_for :posts do |p| %>
28
+
29
+ <div class="m_body">
30
+ <div class="m_prompt field"><%= p.label :body, "Explanation" %></div>
31
+ <%= p.text_area :body %>
32
+ </div>
33
+
34
+ <% end %>
35
+
36
+ <%= hidden_field_tag 'moxie_topic[forum_id]', @forum.id %>
37
+
38
+ <div class="m_actions">
39
+ <%= f.submit "Create #{moxie_topic_name.titleize}" %>
40
+ or <%= link_to "Cancel",
41
+ moxie_forum_path( @forum ),
42
+ :class => "action" %>
43
+ </div>
44
+
45
+ </div> <!-- contents -->
46
+ </div> <!-- post -->
47
+
48
+
49
+
50
+ <% end %>
@@ -0,0 +1 @@
1
+ <%= render 'form' %>
@@ -0,0 +1,12 @@
1
+ <div class="m_nav">< <%= link_to "All #{moxie_topic_name.titleize.pluralize} in #{@topic.forum.title}", moxie_forum_path( @topic.forum ), :class => "always_underlined "%></div>
2
+
3
+ <div class="m_header"><%= @topic.title %></div>
4
+
5
+ <div>
6
+
7
+ <%= render :partial => 'moxie/posts/post',
8
+ :collection => @topic.posts %>
9
+
10
+ </div>
11
+
12
+ <%= render :partial => 'moxie/posts/form' %>
data/config/routes.rb ADDED
@@ -0,0 +1,26 @@
1
+ Rails.application.routes.draw do |map|
2
+
3
+ mount_at = MoxieForum::Engine.config.mount_at
4
+
5
+ match mount_at => 'moxie/forums#index'
6
+
7
+ scope mount_at do
8
+ scope :module => 'moxie', :as => 'moxie' do
9
+ resources :forums, :only => [ :index, :show ] do
10
+ match 'topics/new', :to => 'topics#new', :module => 'moxie', :as => 'new_moxie_topic'
11
+ end
12
+ resources :topics, :only => [ :create, :show ] do
13
+ get :show_postable, :as => 'show_postable_moxie_topic'
14
+ end
15
+ resources :posts
16
+
17
+ namespace :admin, :name_prefix => 'admin' do
18
+ resources :forums
19
+ end
20
+ end
21
+ end
22
+
23
+ match "#{mount_at}/authorization_error" => 'moxie/forums#authorization_error',
24
+ :as => 'moxie_authorization_error'
25
+
26
+ end
@@ -0,0 +1,15 @@
1
+ module ApplicationHelper
2
+
3
+ def moxie_forum_name
4
+ MoxieForum::Engine.config.forum_entity_name
5
+ end
6
+
7
+ def moxie_topic_name
8
+ MoxieForum::Engine.config.topic_entity_name
9
+ end
10
+
11
+ def moxie_post_name
12
+ MoxieForum::Engine.config.post_entity_name
13
+ end
14
+
15
+ end
@@ -0,0 +1,57 @@
1
+ module MoxieForum
2
+ module ActsAsMoxieUser
3
+
4
+ module Base
5
+ def self.included(klass)
6
+ klass.class_eval do
7
+ extend Config
8
+ end
9
+ end
10
+
11
+ module Config
12
+ def acts_as_moxie_user
13
+
14
+ has_many :posts, :foreign_key => 'author_id',
15
+ :order => "created_at",
16
+ :class_name => 'Moxie::Post'
17
+
18
+ has_many :topics, :foreign_key => 'author_id',
19
+ :order => "created_at",
20
+ :class_name => 'Moxie::Topic'
21
+
22
+ def self.i_am_moxie_user
23
+ true
24
+ end
25
+
26
+ include MoxieForum::ActsAsMoxieUser::Base::InstanceMethods
27
+ end
28
+ end
29
+
30
+ module InstanceMethods
31
+
32
+ def profile_pic
33
+ if self.id == nil
34
+ "<span style='color: red;'><b>WARNING:</b> There is no current_user helper method within your application_controller.rb. Create this method such that it returns the instance of your logged in user object. The forum will not work correctly until you do this.</span>"
35
+ else
36
+ "[user.profile_pic]"
37
+ end
38
+ end
39
+
40
+ def display_name
41
+ "[user.display_name]"
42
+ end
43
+
44
+ def admin?
45
+ false
46
+ end
47
+
48
+ def moderator?
49
+ false
50
+ end
51
+
52
+ end # InstanceMethods
53
+ end
54
+ end
55
+ end
56
+
57
+ ::ActiveRecord::Base.send :include, MoxieForum::ActsAsMoxieUser::Base
@@ -0,0 +1,52 @@
1
+ require 'moxie_forum'
2
+ require 'rails'
3
+ require 'action_controller'
4
+ require 'application_helper'
5
+
6
+ module MoxieForum
7
+ class Engine < Rails::Engine
8
+
9
+ # Defaults
10
+ config.mount_at = "/"
11
+ config.user_model = :user
12
+ config.forum_entity_name = 'forum'
13
+ config.topic_entity_name = 'discussion'
14
+ config.prompt_for_new_topic_creation = "What's your question?"
15
+ config.post_entity_name = 'post'
16
+
17
+ rake_tasks do
18
+ load File.join(File.dirname(__FILE__), '../rails/railties/tasks.rake')
19
+ end
20
+
21
+ initializer "moxie_forum.check_config" do |app|
22
+
23
+ # load all the models in the app
24
+ Dir.glob(RAILS_ROOT + '/app/models/**/*.rb').each { |file| require file }
25
+
26
+ # Figure out which one is the official user class
27
+ config.user_model = ActiveRecord::Base.send(:subclasses).select { |c| c.respond_to? :i_am_moxie_user }.first
28
+ config.user_model_name = config.user_model.to_s
29
+
30
+ # make sure mount_at ends with trailing slash
31
+ config.mount_at += '/' unless config.mount_at.last == '/'
32
+ end
33
+
34
+ initializer "static assets" do |app|
35
+ app.middleware.use ::ActionDispatch::Static, "#{root}/public"
36
+
37
+ # ActionController::Base.helpers_path << "#{RAILS_ROOT}/vendor/plugins/moxieforum/app/helpers/moxie"
38
+ end
39
+
40
+ end
41
+ end
42
+
43
+ # app_config_file = "#{Rails.root}/config/moxie_forum.yml"
44
+ # if File.exists?( app_config_file )
45
+ # open app_config_file do |f|
46
+ # YAML.load( f ).each do |e,c|
47
+ # if e == RAILS_ENV
48
+ # @mount_at = c['mount_at']
49
+ # end
50
+ # end
51
+ # end
52
+ # end
@@ -0,0 +1,4 @@
1
+ module MoxieForum
2
+ require 'moxie_forum/engine' if defined?(Rails) && Rails::VERSION::MAJOR == 3
3
+ require 'moxie_forum/acts_as_moxie_user/base'
4
+ end
@@ -0,0 +1,130 @@
1
+ require 'rails/generators'
2
+ require 'rails/generators/migration'
3
+
4
+ class MoxieForumGenerator < Rails::Generators::Base
5
+ include Rails::Generators::Migration
6
+
7
+ def self.source_root
8
+ File.join(File.dirname(__FILE__), 'templates')
9
+ end
10
+
11
+ # Implement the required interface for Rails::Generators::Migration.
12
+ # taken from http://github.com/rails/rails/blob/master/activerecord/lib/generators/active_record.rb
13
+ # examples: http://caffeinedd.com/guides/331-making-generators-for-rails-3-with-thor
14
+
15
+ def self.next_migration_number(dirname) #:nodoc:
16
+ if ActiveRecord::Base.timestamped_migrations
17
+ Time.now.utc.strftime("%Y%m%d%H%M%S")
18
+ else
19
+ "%.3d" % (current_migration_number(dirname) + 1)
20
+ end
21
+ end
22
+
23
+ def create_migration_file
24
+ f = File.open File.join(File.dirname(__FILE__), 'templates', 'schema.rb')
25
+ schema = f.read; f.close
26
+
27
+ schema.gsub!(/ActiveRecord::Schema.*\n/, '')
28
+ schema.gsub!(/^end\n*$/, '')
29
+
30
+ f = File.open File.join(File.dirname(__FILE__), 'templates', 'migration.rb')
31
+ migration = f.read; f.close
32
+ migration.gsub!(/INSERT_SCHEMA/, schema)
33
+
34
+ tmp = File.open "tmp/~migration_ready.rb", "w"
35
+ tmp.write migration
36
+ tmp.close
37
+
38
+ migration_template '../../../tmp/~migration_ready.rb',
39
+ 'db/migrate/create_moxie_forum_tables.rb'
40
+ remove_file 'tmp/~migration_ready.rb'
41
+ end
42
+
43
+ def copy_initializer_file
44
+ copy_file 'initializer.rb', 'config/initializers/moxie_forum.rb'
45
+ end
46
+
47
+ def initialize_user_model
48
+ begin
49
+ print " \e[1m\e[34mquestion\e[0m What's the name of your user model? [user.rb] > "
50
+ model_name = gets.chomp
51
+ model_name = "user.rb" if model_name.empty?
52
+ end while not model_name =~ /\.rb/i
53
+
54
+ begin
55
+ print " \e[1m\e[34mquestion\e[0m Would you to auto-add a few necessary lines to the top of #{model_name} [y/n] "
56
+ answer = gets.chomp
57
+ end while not answer =~ /[yn]/i
58
+
59
+ if answer =~ /y/i
60
+ begin
61
+ f = File.open "app/models/#{model_name}"
62
+ file = f.read; f.close
63
+
64
+ # Create the initializer file
65
+ file.gsub!(/class User < ActiveRecord::Base\n/,
66
+ "class User < ActiveRecord::Base\n\n" +
67
+ "\tacts_as_moxie_user\n\n" +
68
+ "\t# MoxieForum looks for the following optional methods within this class.\n" +
69
+ "\t#\n" +
70
+ "\t# def moderator?\n" +
71
+ "\t# def admin?\n" +
72
+ "\t# def display_name\n" +
73
+ "\t# def profile_pic" )
74
+
75
+ tmp = File.open "tmp/~model.rb", "w"
76
+ tmp.write file; tmp.close
77
+
78
+ remove_file "app/models/#{model_name}"
79
+ copy_file '../../../tmp/~model.rb', "app/models/#{model_name}"
80
+ remove_file 'tmp/~model.rb'
81
+ rescue
82
+ puts " \e[1m\e[31merror\e[0m Unable to open #{model_name}, visit ##### for instructions to manually connect your user model"
83
+ end
84
+ else
85
+ puts " \e[1m\e[33mskipping\e[0m Visit ##### for instructions to connect your user model"
86
+ end
87
+
88
+ end
89
+
90
+ def update_application_template
91
+ f = File.open "app/views/layouts/application.html.erb"
92
+ layout = f.read; f.close
93
+
94
+ if layout =~ /<%=[ ]+yield[ ]+%>/
95
+ print " \e[1m\e[34mquestion\e[0m Your layouts/application.html.erb layout currently has the " +
96
+ "line <%= yield %>. MoxieForum needs to change this line to <%= content_for?(:content) ? " +
97
+ "yield(:content) : yield %> to support its nested layouts. This change should not affect " +
98
+ "any of your existing layouts or views. "
99
+ begin
100
+ print "Is this okay? [y/n] "
101
+ answer = gets.chomp
102
+ end while not answer =~ /[yn]/i
103
+
104
+ if answer =~ /y/i
105
+
106
+ layout.gsub!(/<%=[ ]+yield[ ]+%>/, '<%= content_for?(:content) ? yield(:content) : yield %>')
107
+
108
+ tmp = File.open "tmp/~application.html.erb", "w"
109
+ tmp.write layout; tmp.close
110
+
111
+ remove_file 'app/views/layouts/application.html.erb'
112
+ copy_file '../../../tmp/~application.html.erb',
113
+ 'app/views/layouts/application.html.erb'
114
+ remove_file 'tmp/~application.html.erb'
115
+ end
116
+ elsif layout =~ /<%=[ ]+content_for\?\(:content\) \? yield\(:content\) : yield[ ]+%>/
117
+ puts " \e[1m\e[33mskipping\e[0m layouts/application.html.erb modification is already done."
118
+ else
119
+ puts " \e[1m\e[31mconflict\e[0m MoxieForum is confused by your " +
120
+ "layouts/application.html.erb. It does not contain the default line <%= yield %>, you " +
121
+ "may need to make manual changes to get MoxieForum's nested layouts working. Visit " +
122
+ "###### for details."
123
+ end
124
+ end
125
+
126
+ def done
127
+ puts "\n \e[1m\e[32mdone\e[0m Installation complete! Run rake db:migrate and start up your web server. You can try the forum at http://localhost:3000/forum but full functionality requires you to have a current_user application method. In addition, open your user model rb file for a few comments near the top.\n\n"
128
+ end
129
+
130
+ end
@@ -0,0 +1,5 @@
1
+ development:
2
+ mount_at: /keithie
3
+
4
+ production:
5
+ mount_at: /keither
@@ -0,0 +1,14 @@
1
+ module MoxieForum
2
+ class Engine < Rails::Engine
3
+
4
+ config.mount_at = '/forum'
5
+ config.forum_entity_name = 'forum'
6
+ config.topic_entity_name = 'discussion'
7
+ config.prompt_for_new_topic_creation = "What's your question?"
8
+ config.post_entity_name = 'post'
9
+
10
+ # need a link to the login page for messages that direct the user there
11
+ # need a link to the user's profile page so names are clickable
12
+
13
+ end
14
+ end
@@ -0,0 +1,20 @@
1
+ class CreateMoxieForumTables < ActiveRecord::Migration
2
+ def self.up
3
+ INSERT_SCHEMA
4
+
5
+ # Seed with some initial data
6
+
7
+ f = Moxie::Forum.create( :title => "Sample forum", :description => "Description of this forum" )
8
+ t1 = Moxie::Topic.create( :forum => f, :title => "First topic" )
9
+ t2 = Moxie::Topic.create( :forum => f, :title => "Second topic" )
10
+ Moxie::Post.create( :topic => t1, :body => "First post in the first topic" )
11
+ Moxie::Post.create( :topic => t1, :body => "Second post in the first topic" )
12
+ Moxie::Post.create( :topic => t2, :body => "First post in the second topic" )
13
+ end
14
+
15
+ def self.down
16
+ drop_table :moxie_forums
17
+ drop_table :moxie_topics
18
+ drop_table :moxie_posts
19
+ end
20
+ end
@@ -0,0 +1,43 @@
1
+ ActiveRecord::Schema.define(:version => 0) do
2
+
3
+ create_table :moxie_forums, :force => true do |t|
4
+ t.string :title
5
+ t.text :description
6
+ t.integer :position, :default => 1
7
+ t.integer :topic_count, :default => 0
8
+ t.datetime :created_at
9
+ t.datetime :updated_at
10
+ end
11
+
12
+ create_table :moxie_topics, :force => true do |t|
13
+ t.integer :forum_id
14
+ t.integer :author_id
15
+ t.string :title
16
+ t.integer :post_count, :default => 0
17
+ t.integer :views, :default => 0
18
+ t.boolean :locked, :default => false
19
+ t.boolean :sticky, :default => false
20
+ t.integer :last_post_author_id
21
+ t.datetime :last_post_at
22
+ t.datetime :created_at
23
+ t.datetime :updated_at
24
+ end
25
+
26
+ add_index :moxie_topics, [:author_id], :name => "topics_author_id"
27
+ add_index :moxie_topics, [:created_at], :name => "topics_created_at"
28
+ add_index :moxie_topics, [:forum_id], :name => "topics_forum_id"
29
+ add_index :moxie_topics, [:last_post_at], :name => "topics_last_post_at"
30
+
31
+ create_table :moxie_posts, :force => true do |t|
32
+ t.integer :topic_id
33
+ t.integer :author_id
34
+ t.text :body
35
+ t.string :browser
36
+ t.datetime :created_at
37
+ t.datetime :updated_at
38
+ end
39
+
40
+ add_index :moxie_posts, [:author_id], :name => "posts_author_id"
41
+ add_index :moxie_posts, [:created_at], :name => "posts_created_at"
42
+
43
+ end
@@ -0,0 +1,8 @@
1
+ namespace :moxie_forum do
2
+
3
+ desc "test task"
4
+ task :install do
5
+ puts "hi"
6
+ end
7
+
8
+ end
@@ -0,0 +1,9 @@
1
+ namespace :planting do
2
+ namespace :reports do
3
+
4
+ desc "results from a specific install campaign"
5
+ task :campaign => :environment do
6
+ puts "hi"
7
+ end
8
+ end
9
+ end
Binary file
@@ -0,0 +1,223 @@
1
+ /* Moxie Forum Wrapper: all classes in Moxie Forum are contained
2
+ within an mfw div so you can scope all CSS declarations to that
3
+ */
4
+
5
+ .mfw {
6
+ font-family: "Lucida Sans","Lucida Grande",verdana,sans-serif;
7
+ padding: 20px 40px 30px 30px;
8
+ text-rendering: optimizelegibility;
9
+ border: 1px solid #CCCCCC;
10
+ -moz-border-radius: 10px 10px 10px 10px;
11
+ -moz-box-shadow: 1px 1px 7px rgba(0, 0, 0, 0.4);
12
+ }
13
+
14
+ .mfw a,
15
+ .mfw a:link,
16
+ .mfw a:visited,
17
+ .mfw a:hover,
18
+ .mfw a:active {
19
+ color: #000000;
20
+ text-decoration: none;
21
+ background-color: transparent;
22
+ }
23
+
24
+ .mfw a:hover {
25
+ text-decoration: underline;
26
+ background-color: transparent;
27
+ }
28
+
29
+ .mfw a.always_underlined,
30
+ .mfw a.always_underlined:link,
31
+ .mfw a.always_underlined:visited,
32
+ .mfw a.always_underlined:hover,
33
+ .mfw a.always_underlined:active {
34
+ text-decoration: underline;
35
+ }
36
+
37
+ .mfw a.action {
38
+ font-size: 14px;
39
+ color: #DD0000;
40
+ }
41
+
42
+ .mfw .m_body a {
43
+ color: #DD0000;
44
+ }
45
+
46
+ /* Forum layout */
47
+
48
+ .mfw .m_nav {
49
+ margin-bottom: 8px;
50
+ font-size: 11px;
51
+ }
52
+
53
+ .mfw .m_header {
54
+ font-size: 18px;
55
+ line-height: 21px;
56
+ font-weight: bold;
57
+ background-color: #EEEEEE;
58
+ padding: 8px 10px;
59
+ }
60
+
61
+ .mfw .m_header_links {
62
+ padding: 5px 10px 0 10px;
63
+ text-align: right;
64
+ }
65
+
66
+ .mfw .m_forum,
67
+ .mfw .m_topic,
68
+ .mfw .m_post {
69
+ padding: 15px 0 10px 0;
70
+ border-top: 1px solid #E5E5E5;
71
+ }
72
+
73
+ .mfw .m_forum:first-child,
74
+ .mfw .m_topic:first-child,
75
+ .mfw .m_post:first-child {
76
+ border-top: none;
77
+ }
78
+
79
+ .mfw .m_topic,
80
+ .mfw .m_post {
81
+ margin-left: 10px;
82
+ }
83
+
84
+ .mfw .m_forum .m_name,
85
+ .mfw .m_topic .m_name, {
86
+ float: left;
87
+ }
88
+
89
+ .mfw .m_forum .m_name .m_title,
90
+ .mfw .m_topic .m_name .m_title {
91
+ font-size: 16px;
92
+ line-height: 20px;
93
+ font-weight: bold;
94
+ margin-bottom: 5px;
95
+ }
96
+
97
+ .mfw .m_forum .m_name .m_description,
98
+ .mfw .m_topic .m_name .m_description {
99
+ font-size: 11px;
100
+ line-height: 13px;
101
+ color: #777777;
102
+ margin-bottom: 10px;
103
+ }
104
+
105
+ .mfw .m_forum .m_info,
106
+ .mfw .m_topic .m_info {
107
+ float: right;
108
+ display: none;
109
+ }
110
+
111
+ .mfw .m_post .m_user {
112
+ float: left;
113
+ width: 100px;
114
+ }
115
+
116
+ .mfw .m_post .m_contents {
117
+ margin-left: 110px;
118
+ }
119
+
120
+ .mfw .m_post .m_meta {
121
+ margin-bottom: 8px;
122
+ }
123
+
124
+ .mfw .m_post .m_meta .m_author {
125
+ font-size: 14px;
126
+ font-weight: bold;
127
+ line-height: 19px;
128
+ }
129
+
130
+ .mfw .m_post .m_meta .m_datetime {
131
+ font-size: 11px;
132
+ color: #777777;
133
+ }
134
+
135
+ .mfw .m_post .m_body {
136
+ font-size: 13px;
137
+ color: #444444;
138
+ }
139
+
140
+ .mfw .m_post .m_prompt {
141
+ font-weight: bold;
142
+ font-size: 16px;
143
+ padding: 5px 0;
144
+ }
145
+
146
+ .mfw .m_post input.text,
147
+ .mfw .m_post textarea {
148
+ font-size: 14px;
149
+ padding: 3px;
150
+ width: 500px;
151
+ }
152
+
153
+ .mfw .m_post .m_actions {
154
+ margin-top: 10px;
155
+ font-size: 12px;
156
+ }
157
+
158
+ .mfw .m_post .m_actions input {
159
+ font-size: 12px;
160
+ }
161
+
162
+ .mfw .m_newpost {
163
+ -moz-border-radius-bottomleft:10px;
164
+ -moz-border-radius-bottomright:10px;
165
+ background:url("/images/gradient_grey.png") repeat-x scroll left bottom #F5F5F5;
166
+ border-top:1px solid #DDDDDD;
167
+ font-size:14px;
168
+ margin:25px -40px -30px -30px;
169
+ padding:20px 40px 10px 40px;
170
+ }
171
+
172
+ /* Utility classes */
173
+
174
+ .mfw .clearfix:after {
175
+ content:"\0020";
176
+ display:block;
177
+ height:0;
178
+ clear:both;
179
+ visibility:hidden;
180
+ overflow:hidden;
181
+ }
182
+ .mfw .clearfix {
183
+ display:block;
184
+ }
185
+
186
+ .mfw .m_hidden {
187
+ display: none;
188
+ }
189
+
190
+ .mfw .error {
191
+ color: red;
192
+ }
193
+
194
+
195
+ .mfw .m_success_msg {
196
+ background: #FFF9D7 none repeat scroll 0% 50%;
197
+ border: 1px solid #E2C822;
198
+ }
199
+
200
+ .mfw .m_error_msg {
201
+ background: #FFEBE8 none repeat scroll 0% 50%;
202
+ border: 1px solid #DD3C10;
203
+ }
204
+
205
+ .mfw .m_success_msg,
206
+ .mfw .m_error_msg {
207
+ margin: 10px 0;
208
+ font-size: 14px;
209
+ padding: 10px;
210
+ font-weight: bold;
211
+ position: relative;
212
+ }
213
+
214
+ .mfw .m_success_msg p,
215
+ .mfw .m_error_msg p {
216
+ font-weight: normal;
217
+ margin: 5px 0 0 0;
218
+ }
219
+
220
+ .mfw .m_success_msg p a,
221
+ .mfw .m_error_msg p a {
222
+ font-weight: bold;
223
+ }