moxie_forum 0.2.4
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.rdoc +47 -0
- data/app/controllers/moxie/admin/forums_controller.rb +71 -0
- data/app/controllers/moxie/admin_controller.rb +10 -0
- data/app/controllers/moxie/forums_controller.rb +29 -0
- data/app/controllers/moxie/posts_controller.rb +52 -0
- data/app/controllers/moxie/topics_controller.rb +63 -0
- data/app/helpers/moxie/application_helper.rb +3 -0
- data/app/helpers/moxie/forums_helper.rb +5 -0
- data/app/models/moxie/forum.rb +16 -0
- data/app/models/moxie/post.rb +34 -0
- data/app/models/moxie/topic.rb +39 -0
- data/app/views/layouts/forums.html.erb +14 -0
- data/app/views/moxie/admin/forums/_form.html.erb +28 -0
- data/app/views/moxie/admin/forums/edit.html.erb +6 -0
- data/app/views/moxie/admin/forums/index.html.erb +28 -0
- data/app/views/moxie/admin/forums/new.html.erb +5 -0
- data/app/views/moxie/admin/forums/show.html.erb +20 -0
- data/app/views/moxie/admin/index.html.erb +3 -0
- data/app/views/moxie/forums/authorization_error.html.erb +4 -0
- data/app/views/moxie/forums/index.html.erb +20 -0
- data/app/views/moxie/forums/show.html.erb +38 -0
- data/app/views/moxie/posts/_form.html.erb +51 -0
- data/app/views/moxie/posts/_post.html.erb +23 -0
- data/app/views/moxie/topics/_form.html.erb +50 -0
- data/app/views/moxie/topics/new.html.erb +1 -0
- data/app/views/moxie/topics/show.html.erb +12 -0
- data/config/routes.rb +26 -0
- data/lib/application_helper.rb +24 -0
- data/lib/moxie_forum/acts_as_moxie_user/base.rb +53 -0
- data/lib/moxie_forum/engine.rb +54 -0
- data/lib/moxie_forum.rb +4 -0
- data/lib/rails/generators/moxie_forum/moxie_forum_generator.rb +76 -0
- data/lib/rails/generators/moxie_forum/templates/config.yml +5 -0
- data/lib/rails/generators/moxie_forum/templates/initializer.rb +15 -0
- data/lib/rails/generators/moxie_forum/templates/migration.rb +20 -0
- data/lib/rails/generators/moxie_forum/templates/schema.rb +43 -0
- data/lib/rails/railties/tasks.rake +8 -0
- data/lib/tasks/tasks.rb +9 -0
- data/public/images/gradient_grey.png +0 -0
- data/public/stylesheets/moxie_forum.css +223 -0
- data/test/generators/moxie_forum_generator_test.rb +10 -0
- data/test/test_helper.rb +77 -0
- data/test/unit/forum_test.rb +78 -0
- metadata +111 -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,24 @@
|
|
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
|
+
def current_user
|
16
|
+
if defined?( MoxieForum::Engine.config.user_model ) == 'constant' &&
|
17
|
+
MoxieForum::Engine.config.user_model.class == Class
|
18
|
+
MoxieForum::Engine.config.user_model.create
|
19
|
+
else
|
20
|
+
nil
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
@@ -0,0 +1,53 @@
|
|
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
|
+
include MoxieForum::ActsAsMoxieUser::Base::InstanceMethods
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
module InstanceMethods
|
27
|
+
|
28
|
+
def profile_pic
|
29
|
+
if self.id == nil
|
30
|
+
"<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>"
|
31
|
+
else
|
32
|
+
"[user.profile_pic]"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def display_name
|
37
|
+
"[user.display_name]"
|
38
|
+
end
|
39
|
+
|
40
|
+
def admin?
|
41
|
+
false
|
42
|
+
end
|
43
|
+
|
44
|
+
def moderator?
|
45
|
+
false
|
46
|
+
end
|
47
|
+
|
48
|
+
end # InstanceMethods
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
::ActiveRecord::Base.send :include, MoxieForum::ActsAsMoxieUser::Base
|
@@ -0,0 +1,54 @@
|
|
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
|
+
# convert symbol to a string and upcase first letter
|
24
|
+
if config.user_model.is_a? Symbol
|
25
|
+
config.user_model_name = config.user_model.to_s.classify # [0..0].upcase + config.user_model.to_s[1..9]
|
26
|
+
end
|
27
|
+
|
28
|
+
if defined?( config.user_model ) == 'constant'
|
29
|
+
config.user_model = eval config.user_model_name
|
30
|
+
end
|
31
|
+
|
32
|
+
# make sure mount_at ends with trailing slash
|
33
|
+
config.mount_at += '/' unless config.mount_at.last == '/'
|
34
|
+
end
|
35
|
+
|
36
|
+
initializer "static assets" do |app|
|
37
|
+
app.middleware.use ::ActionDispatch::Static, "#{root}/public"
|
38
|
+
|
39
|
+
# ActionController::Base.helpers_path << "#{RAILS_ROOT}/vendor/plugins/moxieforum/app/helpers/moxie"
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
# app_config_file = "#{Rails.root}/config/moxie_forum.yml"
|
46
|
+
# if File.exists?( app_config_file )
|
47
|
+
# open app_config_file do |f|
|
48
|
+
# YAML.load( f ).each do |e,c|
|
49
|
+
# if e == RAILS_ENV
|
50
|
+
# @mount_at = c['mount_at']
|
51
|
+
# end
|
52
|
+
# end
|
53
|
+
# end
|
54
|
+
# end
|
data/lib/moxie_forum.rb
ADDED
@@ -0,0 +1,76 @@
|
|
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 update_application_template
|
48
|
+
f = File.open "app/views/layouts/application.html.erb"
|
49
|
+
layout = f.read; f.close
|
50
|
+
|
51
|
+
if layout =~ /<%=[ ]+yield[ ]+%>/
|
52
|
+
print " \e[1m\e[34mquestion\e[0m Your layouts/application.html.erb layout currently has the line <%= yield %>. MoxieForum needs to change this line to <%= content_for?(:content) ? yield(:content) : yield %> to support its nested layouts. This change should not affect any of your existing layouts or views. Is this okay? [y/n] "
|
53
|
+
begin
|
54
|
+
answer = gets.chomp
|
55
|
+
end while not answer =~ /[yn]/i
|
56
|
+
|
57
|
+
if answer =~ /y/i
|
58
|
+
|
59
|
+
layout.gsub!(/<%=[ ]+yield[ ]+%>/, '<%= content_for?(:content) ? yield(:content) : yield %>')
|
60
|
+
|
61
|
+
tmp = File.open "tmp/~application.html.erb", "w"
|
62
|
+
tmp.write layout; tmp.close
|
63
|
+
|
64
|
+
remove_file 'app/views/layouts/application.html.erb'
|
65
|
+
copy_file '../../../tmp/~application.html.erb',
|
66
|
+
'app/views/layouts/application.html.erb'
|
67
|
+
remove_file 'tmp/~application.html.erb'
|
68
|
+
end
|
69
|
+
elsif layout =~ /<%=[ ]+content_for\?\(:content\) \? yield\(:content\) : yield[ ]+%>/
|
70
|
+
puts " \e[1m\e[33mskipping\e[0m layouts/application.html.erb modification is already done."
|
71
|
+
else
|
72
|
+
puts " \e[1m\e[31mconflict\e[0m MoxieForum is confused by your layouts/application.html.erb. It does not contain the default line <%= yield %>, you may need to make manual changes to get MoxieForum's nested layouts working. Visit ###### for details."
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module MoxieForum
|
2
|
+
class Engine < Rails::Engine
|
3
|
+
|
4
|
+
config.mount_at = '/forum'
|
5
|
+
config.user_model = :user
|
6
|
+
config.forum_entity_name = 'forum'
|
7
|
+
config.topic_entity_name = 'discussion'
|
8
|
+
config.prompt_for_new_topic_creation = "What's your question?"
|
9
|
+
config.post_entity_name = 'post'
|
10
|
+
|
11
|
+
# need a link to the login page for messages that direct the user there
|
12
|
+
# need a link to the user's profile page so names are clickable
|
13
|
+
|
14
|
+
end
|
15
|
+
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
|
data/lib/tasks/tasks.rb
ADDED
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
|
+
}
|