diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb
index ea8109dd0..4b7f04547 100644
--- a/app/controllers/users_controller.rb
+++ b/app/controllers/users_controller.rb
@@ -222,10 +222,9 @@ class UsersController < ApplicationController
# modified by fq
def user_newfeedback
- @jours = @user.journals_for_messages.reverse
- @jours.each do |jour|
- jour.update_attribute(:status, false)
- end
+ @jours = @user.journals_for_messages.where('m_parent_id IS NULL').order('created_on DESC')
+ @jours.update_all(:is_readed => true, :status => false)
+
@limit = 10
@feedback_count = @jours.count
@feedback_pages = Paginator.new @feedback_count, @limit, params['page']
diff --git a/app/controllers/words_controller.rb b/app/controllers/words_controller.rb
index 113adecc5..7c05c5af5 100644
--- a/app/controllers/words_controller.rb
+++ b/app/controllers/words_controller.rb
@@ -1,3 +1,4 @@
+# encoding: utf-8
#####leave message fq
class WordsController < ApplicationController
@@ -25,7 +26,7 @@ class WordsController < ApplicationController
# @message_count = a_message.count
end
end
- @jours = @user.journals_for_messages.reverse
+ @jours = @user.journals_for_messages.where('m_parent_id IS NULL').reverse
@limit = 10
@feedback_count = @jours.count
@feedback_pages = Paginator.new @feedback_count, @limit, params['page']
@@ -39,6 +40,38 @@ class WordsController < ApplicationController
end
end
+ def create_reply
+ # deny api. api useless
+ user_id = request.headers["Referer"].match((%r|/([0-9]{1,})/|))[1]
+ @user = User.find(user_id)
+ parent_id = params[:reference_id]
+ author_id = User.current.id
+ reply_user_id = params[:reference_user_id]
+ reply_id = params[:reference_message_id] # 暂时不实现
+ content = params[:user_notes]
+ options = {:user_id => author_id,
+ :m_parent_id => parent_id,
+ :m_reply_id => reply_id,
+ :reply_id => reply_user_id,
+ :notes => content,
+ :is_readed => false}
+ @jfm = @user.add_jour(nil, nil, nil, options)
+
+ respond_to do |format|
+ # format.html {
+ # if @jfm.errors.empty?
+ # flash.now.notice = l(:label_feedback_success)
+ # else
+ # flash.now.errors = l(:label_feedback_fail)
+ # end
+ # render 'test/index'
+ # }
+ format.js{
+ @save_succ = true if @jfm.errors.empty?
+ }
+ end
+ end
+
def destroy
if User.current.admin? || User.current.id == @user.id
JournalsForMessage.delete_message(params[:object_id])
diff --git a/app/helpers/words_helper.rb b/app/helpers/words_helper.rb
index 167c78e2c..a183f5a26 100644
--- a/app/helpers/words_helper.rb
+++ b/app/helpers/words_helper.rb
@@ -1,47 +1,56 @@
-########fq
-module WordsHelper
- def message_list(object, state, user)
- unless state
- if object.size > 5
- object = object[-5, 5]
- end
- end
- object = object.reverse
- remove_allowed = (User.current.id == object.first.user_id)
- content = ''.html_safe
- lis = object.each do |t_object|
- s = ''.html_safe
- s << link_to(t_object.indice, {}, :class => "journal-link")
- s << avatar(t_object.user, :size => "16").to_s
- s << link_to_user(t_object.user, :class => 'user')
- time = time_tag(t_object.created_at)
- s << l(:field_add, :time => time).html_safe
- if !t_object.notes.blank?
- s << link_to(image_tag('comment.png'),
- {:controller => 'words', :action => 'new', :id => user, :journal_id => t_object},
- :remote => true,
- :method => 'post',
- :title => l(:button_quote))
- if remove_allowed || t_object.jour_id == User.current.id
- url = {:controller => 'words',
- :action => 'destroy',
- :object_id => t_object,
- :user_id => user}
- s << ' '
- s << link_to(image_tag('delete.png'), url,
- :remote => true, :method => 'delete', :class => "delete", :title => l(:button_delete))
- end
- end
- #time = '更新于' + time_tag(t_object.created_at) + '之前'
-
-
- # s << content_tag('div', time)
-
- content << content_tag('li', s, :class => "user-#{t_object.jour_id}")
- content << textilizable(t_object.notes)
- end
- # content.present? ? content_tag('ul', content, :class => 'watchers') : content
- content
- end
-end
-
\ No newline at end of file
+########fq
+module WordsHelper
+ def message_list(object, state, user)
+ unless state
+ if object.size > 5
+ object = object[-5, 5]
+ end
+ end
+ object = object.reverse
+ remove_allowed = (User.current.id == object.first.user_id)
+ content = ''.html_safe
+ lis = object.each do |t_object|
+ s = ''.html_safe
+ s << link_to(t_object.indice, {}, :class => "journal-link")
+ s << avatar(t_object.user, :size => "16").to_s
+ s << link_to_user(t_object.user, :class => 'user')
+ time = time_tag(t_object.created_at)
+ s << l(:field_add, :time => time).html_safe
+ if !t_object.notes.blank?
+ s << link_to(image_tag('comment.png'),
+ {:controller => 'words', :action => 'new', :id => user, :journal_id => t_object},
+ :remote => true,
+ :method => 'post',
+ :title => l(:button_quote))
+ if remove_allowed || t_object.jour_id == User.current.id
+ url = {:controller => 'words',
+ :action => 'destroy',
+ :object_id => t_object,
+ :user_id => user}
+ s << ' '
+ s << link_to(image_tag('delete.png'), url,
+ :remote => true, :method => 'delete', :class => "delete", :title => l(:button_delete))
+ end
+ end
+ #time = '更新于' + time_tag(t_object.created_at) + '之前'
+
+
+ # s << content_tag('div', time)
+
+ content << content_tag('li', s, :class => "user-#{t_object.jour_id}")
+ content << textilizable(t_object.notes)
+ end
+ # content.present? ? content_tag('ul', content, :class => 'watchers') : content
+ content
+ end
+
+ def fetch_user_leaveWord_reply leaveWordObj
+ if leaveWordObj.kind_of? JournalsForMessage
+ leaveWordObj.children
+ elsif leaveWordObj.kind_of? Fixnum
+ JournalsForMessage.find(leaveWordObj).children
+ else
+ []
+ end
+ end
+end
diff --git a/app/models/journals_for_message.rb b/app/models/journals_for_message.rb
index bb03ad121..e00564f18 100644
--- a/app/models/journals_for_message.rb
+++ b/app/models/journals_for_message.rb
@@ -1,12 +1,33 @@
# fq
+# 数据库字段中带有m前缀和is_readed是二次开发添加,之前的字段基本复用
+# 注意reply_id 是提到人的id,不是留言id, Base中叫做 at_user
class JournalsForMessage < ActiveRecord::Base
- attr_accessible :jour_id, :jour_type, :notes, :reply_id, :status, :user_id
- attr_accessor :indice
- validates :notes, presence: true
+ include Redmine::SafeAttributes
+ safe_attributes "jour_type", # 留言所属类型
+ "jour_id", # 留言所属类型的id
+ "notes", # 留言内容
+ "reply_id", # 留言被回复留言者的用户id(用户a回复了用户b,这是b的id,用以查询谁给b留言了)
+ "status", # 留言是否被查看(弃用)
+ "user_id", # 留言者的id
+ "m_parent_id", # 留言信息的父留言id
+ "is_readed", # 留言是否已读
+ "m_reply_count", # 留言的回复数量
+ "m_reply_id" # 回复某留言的留言id(a留言回复了b留言,这是b留言的id)
+ acts_as_tree :foreign_key => 'm_parent_id', :counter_cache => :m_reply_count, :order => "#{JournalsForMessage.table_name}.created_on ASC"
+
belongs_to :jour, :polymorphic => true
belongs_to :user
+ belongs_to :at_user, :class_name => "User", :foreign_key => 'reply_id'
+
has_many :acts, :class_name => 'Activity', :as => :act, :dependent => :destroy
+ has_many :reply_for_journals, :dependent => :destroy
+
+ validates :notes, presence: true
after_create :act_as_activity #huang
+ after_create :reset_counters!
+ after_destroy :reset_counters!
+
+ # default_scope { where('m_parent_id IS NULL') }
def self.delete_message(message_id)
self.delete_all "id = #{message_id}"
@@ -24,9 +45,18 @@ class JournalsForMessage < ActiveRecord::Base
def act_as_activity
if self.jour_type == 'Principal'
- unless self.user_id == self.jour.id && self.user_id != self.reply_id && self.reply_id !=0
+ unless self.user_id == self.jour.id && self.user_id != self.reply_id && self.reply_id != 0
self.acts << Activity.new(:user_id => self.user_id)
end
end
end
+
+ def reset_counters!
+ self.class.reset_counters!(self)
+ end
+ def self.reset_counters! journals_for_messages
+ # jfm_id = journals_for_messages.id.to_i
+ count = find_all_by_m_parent_id(journals_for_messages.m_parent_id).count #(SELECT COUNT(*) FROM #{JournalsForMessage.table_name} WHERE m_parent_id = #{jfm_id} )
+ update_all("m_reply_count = #{count.to_i}", ["id = ?", journals_for_messages.m_parent_id])
+ end
end
diff --git a/app/models/memo.rb b/app/models/memo.rb
index 284d2ba1b..6841cc0fd 100644
--- a/app/models/memo.rb
+++ b/app/models/memo.rb
@@ -6,7 +6,7 @@ class Memo < ActiveRecord::Base
validates_presence_of :author_id, :forum_id, :subject
validates :content, presence: true
validates_length_of :subject, maximum: 50
- validates_length_of :content, maximum: 3072
+ #validates_length_of :content, maximum: 3072
validate :cannot_reply_to_locked_topic, :on => :create
acts_as_tree :counter_cache => :replies_count, :order => "#{Memo.table_name}.created_at ASC"
diff --git a/app/models/reply_for_journal.rb b/app/models/reply_for_journal.rb
new file mode 100644
index 000000000..0ea6a04c7
--- /dev/null
+++ b/app/models/reply_for_journal.rb
@@ -0,0 +1,4 @@
+class ReplyForJournal < ActiveRecord::Base
+ # attr_accessible :title, :body
+ belongs_to :journals_for_messages
+end
diff --git a/app/models/user.rb b/app/models/user.rb
index 6b1ee3d1b..3ee601b6a 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -164,8 +164,14 @@ class User < Principal
###添加留言 fq
- def add_jour(user, notes, reference_user_id = 0)
- self.journals_for_messages << JournalsForMessage.new(:user_id => user.id, :notes => notes, :reply_id => reference_user_id, :status => true)
+ def add_jour(user, notes, reference_user_id = 0, options = {})
+ if options.count == 0
+ self.journals_for_messages << JournalsForMessage.new(:user_id => user.id, :notes => notes, :reply_id => reference_user_id, :status => true)
+ else
+ jfm = self.journals_for_messages.build(options)
+ jfm.save
+ jfm
+ end
end
# 判断用户是否加入了竞赛中 fq
@@ -204,7 +210,12 @@ class User < Principal
def count_new_jour
count = self.new_jours.count
end
-
+
+ #added by nie
+ def count_new_journal_reply
+ count = self.journal_reply.count
+ end
+
def set_mail_notification
##add byxianbo
thread=Thread.new do
diff --git a/app/views/layouts/base_users.html.erb b/app/views/layouts/base_users.html.erb
index 8db091278..ad4876de5 100644
--- a/app/views/layouts/base_users.html.erb
+++ b/app/views/layouts/base_users.html.erb
@@ -67,14 +67,10 @@
-
<%= link_to l(:label_user_watcher)+"("+User.watched_by(@user.id).count.to_s+")" ,:controller=>"users", :action=>"user_watchlist"%>
-
<%= link_to l(:label_x_user_fans, :count => User.current.watcher_users(User.current.id).count)+"("+@user.watcher_users(@user.id).count.to_s+")", :controller=>"users", :action=>"user_fanslist" %>
-
<%= link_to l(:label_requirement_focus)+"("+Bid.watched_by(@user).where('reward_type = ?', 1).count.to_s+")" ,:controller=>"users", :action=>"watch_bids"%>
-
<% if @user.id == User.current.id %>
@@ -89,9 +85,7 @@
<%= form_for('new_form', :method => :post,
:url => {:controller => 'words', :action => 'add_brief_introdution'}) do |f|%>
-
-
<%= f.text_area 'user_introduction', :rows => 3,
:cols => 65,
@@ -109,9 +103,7 @@
<% end %>
-
-
@@ -126,10 +118,8 @@
|
<%= l(:label_user_mail) %>: |
-
-
<% unless @user.user_extensions.nil? %>
<% unless @user.user_extensions.identity == 2 %>
diff --git a/app/views/test/index.html.erb b/app/views/test/index.html.erb
index 97634e965..01c60e1bf 100644
--- a/app/views/test/index.html.erb
+++ b/app/views/test/index.html.erb
@@ -1,3 +1,3 @@
-test
-
+test
+<%= debug @params %>
\ No newline at end of file
diff --git a/app/views/words/_journal_reply.html.erb b/app/views/words/_journal_reply.html.erb
new file mode 100644
index 000000000..a909362d9
--- /dev/null
+++ b/app/views/words/_journal_reply.html.erb
@@ -0,0 +1,7 @@
+
+<% id = "journal_reply_ul_" + journal.id.to_s%>
+ >
+ <% fetch_user_leaveWord_reply(journal).each do |reply|%>
+ <%= render :partial => "words/journal_reply_items", :locals => {:reply => reply, :journal => journal, :m_reply_id => reply.id} %>
+ <% end %>
+
diff --git a/app/views/words/_journal_reply_items.html.erb b/app/views/words/_journal_reply_items.html.erb
new file mode 100644
index 000000000..92ed24c65
--- /dev/null
+++ b/app/views/words/_journal_reply_items.html.erb
@@ -0,0 +1,24 @@
+
+
+ <%= image_tag url_to_avatar(reply.user), :class => "avatar-3" %>
+
+
+ <% id = 'project_respond_form_'+ reply.id.to_s %>
+
<%= link_to reply.user.name, user_path(reply.user) %>:
+
<%= reply.notes %>
+ <% ids = 'project_respond_form_'+ journal.id.to_s%>
+
+ <%= format_time reply.created_on %>
+
+ <%#= toggle_link l(:label_projects_feedback_respond), id, {:focus => 'project_respond'} %>
+ <%= link_to l(:label_projects_feedback_respond),'',
+ {:focus => 'project_respond', :onclick => "toggleAndSettingWordsVal($('##{id}'), $('##{id} textarea'), '#{l(:label_reply_plural)} #{reply.user.show_name}: '); return false;"}
+ %>
+
+
+
+
+ <%= render :partial => "words/new_respond", :locals => {:journal => journal, :m_reply_id => m_reply_id} %>
+
+
+
\ No newline at end of file
diff --git a/app/views/words/_message.html.erb b/app/views/words/_message.html.erb
index 1201bae22..b756141bd 100644
--- a/app/views/words/_message.html.erb
+++ b/app/views/words/_message.html.erb
@@ -1,45 +1,37 @@
-
+
<% if jour.size >0 %>
<% remove_allowed = (User.current.id == jour.first.user_id) %>
-
+
<% for journal in jour%>
-
-
- <%= image_tag(url_to_avatar(journal.user), :class => "avatar") %> |
-
-
-
- <%= link_to journal.user, user_path(journal.user)%>
- <% if @user == User.current %>
- <%= l(:label_leave_me_message) %>
- <% else %>
- <%= l(:label_leave_others_message) %>
- <% end %> |
-
-
-
-
- <%= textilizable journal.notes%>
- |
-
-
- <%= l :label_comment_time %>: <%= format_time journal.created_on %> |
-
- <% if @user == User.current %>
- <%= link_to(l(:label_newfeedback_quote), {:controller => 'words', :action => 'new', :id => user, :journal_id => journal}, :remote => true,
- :method => 'post', :title => l(:button_quote))%>
- <%= link_to(l(:label_newfeedback_delete), {:controller => 'words', :action => 'destroy', :object_id => journal, :user_id => user},
- :remote => true, :confirm => l(:text_are_you_sure), :method => 'delete', :class => "delete", :title => l(:button_delete)) if remove_allowed || journal.jour_id == User.current.id %> |
- <% else %>
- <%= link_to(l(:label_newfeedback_quote), {:controller => 'words', :action => 'new', :id => user, :journal_id => journal}, :remote => true,
- :method => 'post', :title => l(:button_quote))%>
- <% end %>
-
-
- |
-
-
-
+ -
+ <%= image_tag(url_to_avatar(journal.user), :class => "avatar") %>
+
+ <%= link_to journal.user, user_path(journal.user)%>
+ <% if @user == User.current %>
+ <%= l(:label_leave_me_message) %>
+ <% else %>
+ <%= l(:label_leave_others_message) %>
+ <% end %>
+
+ <%= textilizable journal.notes%>
+
+ <%= l :label_comment_time %>: <%= format_time journal.created_on %>
+ <% ids = 'project_respond_form_'+ journal.id.to_s%>
+ <%#= toggle_link l(:label_projects_feedback_respond), ids, {:focus => 'project_respond'} %>
+
+ <%= link_to l(:label_projects_feedback_respond),'',
+ {:focus => 'project_respond', :onclick => "toggleAndSettingWordsVal($('##{ids}'), $('##{ids} textarea'), '#{l(:label_reply_plural)} #{journal.user.show_name}:'); return false;"}
+ %>
+
+
+
class="respond-form">
+ <%= render :partial => 'words/new_respond', :locals => {:journal => journal, :m_reply_id => journal.id} %>
+
+
+ <%= render :partial => "words/journal_reply", :locals => {:journal => journal } %>
+
+
<% end %>
+
<% end %>
diff --git a/app/views/words/_new_respond.html.erb b/app/views/words/_new_respond.html.erb
new file mode 100644
index 000000000..61953457a
--- /dev/null
+++ b/app/views/words/_new_respond.html.erb
@@ -0,0 +1,9 @@
+<%= form_tag({:controller => 'words', :action => 'create_reply'}, :remote => true) do %>
+<%= text_area_tag 'user_notes', "", :class => 'noline', :style => "resize: none;", :rows => 4, :placeholder => l(:label_projects_feedback_respond_content) %>
+
+<%= hidden_field_tag 'reference_id', params[:reference_id], :value => journal.id %>
+<%= hidden_field_tag 'reference_user_id', params[:reference_user_id], :value => journal.user.id %>
+<%= hidden_field_tag 'reference_message_id', params[:reference_message_id], :value => m_reply_id %>
+<%= submit_tag l(:button_projects_feedback_respond), :name => nil , :class => "bid_btn", :style => "margin-top: 1px;"%>
+
+<% end %>
\ No newline at end of file
diff --git a/app/views/words/create_reply.js.erb b/app/views/words/create_reply.js.erb
new file mode 100644
index 000000000..20964d9b0
--- /dev/null
+++ b/app/views/words/create_reply.js.erb
@@ -0,0 +1,11 @@
+<% if @save_succ %>
+ $('#journal_reply_ul_<%=@jfm.m_parent_id%>').append(
+ '<%= j(
+ render :partial => "words/journal_reply_items",
+ :locals => {:reply => @jfm, :journal => @jfm.parent, :m_reply_id => @jfm.id}
+ ) %>');
+ $('#project_respond_form_<%=@jfm.m_reply_id.to_s%> textarea').val('');
+ $('#project_respond_form_<%=@jfm.m_reply_id.to_s%>').hide();
+<% else %>
+ alert("<%= l(:label_feedback_fail) %>");
+<% end %>
\ No newline at end of file
diff --git a/app/views/words/new.js.erb b/app/views/words/new.js.erb
index e08615fc1..b7c2d6295 100644
--- a/app/views/words/new.js.erb
+++ b/app/views/words/new.js.erb
@@ -1,3 +1,4 @@
$('#pre_show').html('<%= escape_javascript(render(:partial => 'pre_show', :locals => {:content => @content})) %>');
$('#new_form_reference_user_id').val("<%= @id %>");
showAndScrollTo("pre_show", "new_form_user_message");
+
diff --git a/config/routes.rb b/config/routes.rb
index d4d9b4f92..6b5edb16d 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -452,6 +452,7 @@ RedmineApp::Application.routes.draw do
post 'words/new', :to => 'words#new'
post 'words/create', :to => 'words#create'
post 'words/append', :to => 'words#append'
+ post 'words/create_reply', :to => 'words#create_reply'
delete 'words/destroy', :to => 'words#destroy'
get 'words/more', :to => 'words#more'
get 'words/back', :to=> 'words#back'
diff --git a/db/migrate/20131224021723_add_missing_attribute_to_journals_for_messages.rb b/db/migrate/20131224021723_add_missing_attribute_to_journals_for_messages.rb
new file mode 100644
index 000000000..3b492922a
--- /dev/null
+++ b/db/migrate/20131224021723_add_missing_attribute_to_journals_for_messages.rb
@@ -0,0 +1,8 @@
+class AddMissingAttributeToJournalsForMessages < ActiveRecord::Migration
+ def change
+ add_column :journals_for_messages, :m_parent_id, :string
+ add_column :journals_for_messages, :is_readed, :boolean
+ add_column :journals_for_messages, :m_reply_count, :int
+ add_column :journals_for_messages, :m_reply_id, :int
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 7690b922f..2bda4fcc1 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -11,7 +11,7 @@
#
# It's strongly recommended to check this file into your version control system.
-ActiveRecord::Schema.define(:version => 20131215065910) do
+ActiveRecord::Schema.define(:version => 20131224021723) do
create_table "activities", :force => true do |t|
t.integer "act_id", :null => false
@@ -401,8 +401,12 @@ ActiveRecord::Schema.define(:version => 20131215065910) do
t.text "notes"
t.integer "status"
t.integer "reply_id"
- t.datetime "created_on", :null => false
- t.datetime "updated_on", :null => false
+ t.datetime "created_on", :null => false
+ t.datetime "updated_on", :null => false
+ t.string "m_parent_id"
+ t.boolean "is_readed"
+ t.integer "m_reply_count"
+ t.integer "m_reply_id"
end
create_table "member_roles", :force => true do |t|
diff --git a/public/javascripts/application.js b/public/javascripts/application.js
index fea17ee12..65af8714e 100644
--- a/public/javascripts/application.js
+++ b/public/javascripts/application.js
@@ -590,6 +590,11 @@ function blockEventPropagation(event) {
event.preventDefault();
}
+function toggleAndSettingWordsVal(parent_widget, text_widget, value){
+ text_widget.val(value)
+ parent_widget.toggle(400)
+}
+
$(document).ready(setupAjaxIndicator);
$(document).ready(hideOnLoad);
$(document).ready(addFormObserversForDoubleSubmit);
diff --git a/public/stylesheets/application.css b/public/stylesheets/application.css
index 533126eb2..65c8be921 100644
--- a/public/stylesheets/application.css
+++ b/public/stylesheets/application.css
@@ -2676,3 +2676,5 @@ div.repos_explain{
#admin-index{
margin-left: -220px;
}
+
+
diff --git a/public/themes/redpenny-master/stylesheets/application.css b/public/themes/redpenny-master/stylesheets/application.css
index cf1a76d72..437720c5c 100644
--- a/public/themes/redpenny-master/stylesheets/application.css
+++ b/public/themes/redpenny-master/stylesheets/application.css
@@ -310,7 +310,7 @@ ul.projects li.root
padding:5%; /*项目界面的宽度 */
height:25px;
background-color:#0ee; /* 项目界面 #eee*/
- margin:0 0 10px;
+ margin:0 0 0 10px;
display:inline-block;
width:90%;
vertical-align:top;
@@ -2035,7 +2035,7 @@ div.avatar_user{
.teacher {
display: inline-block;
word-spacing: 22px;
- width: 55px;
+ width: 60px;
text-justify:inter-ideograph;
text-align: justify;
}
@@ -2048,4 +2048,81 @@ div.avatar_user{
white-space: nowrap;
text-overflow: ellipsis;
-o-text-overflow: ellipsis;
+}
+
+/*
+ * *
+ *Designed for message.
+ */
+li {
+ list-style-type: none;
+}
+.avatar-3{
+ width: 35px;
+ height: 35px;
+}
+.inner-right{
+ float: left;
+}
+.messages-for-user-reply{
+ margin-top: 10px;
+ padding-left: 60px;
+}
+
+ul.message-for-user {
+ list-style-type: none;
+ margin: 0px;
+ padding: 0px;
+ font-family: 微软雅黑,Verdana,sans-serif,宋体;
+ text-align: left;
+ font-size: 10pt;
+ width: 100%;
+
+}
+
+ul.message-for-user li.outer-message-for-user {
+ margin-left: 20px;
+ border-bottom: 1px solid rgb(213, 222, 233);
+ margin-bottom: 10px;
+ margin-top: 10px;
+}
+
+.portrait{
+ float: left;
+ width: 40px;
+ padding-top: 3px;
+ margin: 0px;
+ padding: 0px;
+ display: block;
+ }
+
+span.body{
+ float: left;
+ width: 80%;
+ overflow: hidden;
+ font-size: 9pt;
+ margin: 0px 10px;
+ padding: 0px;
+ display: block;
+ margin-left: 20px;
+ }
+
+ span.time{
+ color: rgb(172,174,174);
+ }
+
+ .message-notes{
+ max-width: 80%;
+ word-wrap: break-word;
+ }
+
+ul.messages-for-user-reply li {
+ padding-bottom: 4px;
+}
+
+.respond-form{
+ display: none;
+ width: 100%;
+ margin: auto;
+ clear:both;
}
\ No newline at end of file