Merge branch 'szzh' into develop

memcached_alan v20150312
sw 11 years ago
commit c52eebe6f4

@ -25,8 +25,10 @@ gem 'rufus-scheduler'
#gem 'dalli', path: 'lib/dalli-2.7.2' #gem 'dalli', path: 'lib/dalli-2.7.2'
group :development do group :development do
gem 'grape-swagger' gem 'grape-swagger'
gem 'grape-swagger-ui', git: 'https://github.com/guange2015/grape-swagger-ui.git' #gem 'grape-swagger-ui', git: 'https://github.com/guange2015/grape-swagger-ui.git'
#gem 'puma' #gem 'puma'
gem 'pry-rails'
gem 'pry-byebug'
gem 'better_errors', path: 'lib/better_errors' gem 'better_errors', path: 'lib/better_errors'
gem 'rack-mini-profiler', path: 'lib/rack-mini-profiler' gem 'rack-mini-profiler', path: 'lib/rack-mini-profiler'
end end
@ -50,8 +52,8 @@ group :test do
#end #end
end end
gem 'rspec-rails' , '2.13.1' # gem 'rspec-rails' , '2.13.1'
gem 'guard-rspec','2.5.0' # gem 'guard-rspec','2.5.0'
# Gems used only for assets and not required # Gems used only for assets and not required
# in production environments by default. # in production environments by default.
group :assets do group :assets do
@ -95,7 +97,7 @@ if File.exist?(database_file)
adapters.each do |adapter| adapters.each do |adapter|
case adapter case adapter
when 'mysql2' when 'mysql2'
gem "mysql2", "= 0.3.11", :platforms => [:mri, :mingw] gem "mysql2", "= 0.3.18", :platforms => [:mri, :mingw]
gem "activerecord-jdbcmysql-adapter", :platforms => :jruby gem "activerecord-jdbcmysql-adapter", :platforms => :jruby
when 'mysql' when 'mysql'
gem "mysql", "~> 2.8.1", :platforms => [:mri, :mingw] gem "mysql", "~> 2.8.1", :platforms => [:mri, :mingw]

@ -40,6 +40,17 @@ module Mobile
{status: 0} {status: 0}
end end
desc "忘记密码"
params do
requires :mail,type: String
end
post 'lost_password' do
us = UsersService.new
message = us.lost_password params
present :message, message
present :status, 0
end
end end
end end
end end

@ -97,12 +97,10 @@ class AttachmentsController < ApplicationController
end end
if candown || User.current.admin? || User.current.id == @attachment.author_id if candown || User.current.admin? || User.current.id == @attachment.author_id
@attachment.increment_download @attachment.increment_download
if stale?(:etag => @attachment.digest) if stale?(:etag => @attachment.digest)
# images are sent inline
send_file @attachment.diskfile, :filename => filename_for_content_disposition(@attachment.filename), send_file @attachment.diskfile, :filename => filename_for_content_disposition(@attachment.filename),
:type => detect_content_type(@attachment), :type => detect_content_type(@attachment),
:disposition => (@attachment.image? ? 'inline' : 'attachment') :disposition => 'attachment' #inline can open in browser
end end
else else

@ -21,6 +21,7 @@ class FilesController < ApplicationController
menu_item :files menu_item :files
before_filter :auth_login1, :only => [:index] before_filter :auth_login1, :only => [:index]
before_filter :logged_user_by_apptoken,:only => [:index]
before_filter :find_project_by_project_id#, :except => [:getattachtype] before_filter :find_project_by_project_id#, :except => [:getattachtype]
before_filter :authorize, :except => [:getattachtype,:quote_resource_show,:search] before_filter :authorize, :except => [:getattachtype,:quote_resource_show,:search]
@ -98,6 +99,7 @@ class FilesController < ApplicationController
end end
def index def index
@flag = params[:flag] || false
#sort_init 'filename', 'asc' #sort_init 'filename', 'asc'
sort_init 'created_on', 'desc' sort_init 'created_on', 'desc'
sort_update 'created_on' => "#{Attachment.table_name}.created_on", sort_update 'created_on' => "#{Attachment.table_name}.created_on",
@ -143,11 +145,16 @@ class FilesController < ApplicationController
end end
end end
@containers = [ Project.includes(:attachments).reorder(sort).find(@project.id)] @containers = [ Project.includes(:attachments).find(@project.id)]
@containers += @project.versions.includes(:attachments).reorder(sort).all @containers += @project.versions.includes(:attachments).all
show_attachments @containers ids = []
@containers.each do |c|
ids += c.attachments.pluck(:id)
end
@containers = [Struct.new(:attachments).new(Attachment.where('id in (?)',ids).reorder(sort))]
show_attachments @containers
respond_to do |format| respond_to do |format|
format.html format.html

@ -107,17 +107,24 @@ class MembersController < ApplicationController
AppliedProject.deleteappiled(member.user_id, @project.id) AppliedProject.deleteappiled(member.user_id, @project.id)
end end
end end
respond_to do |format| if params[:flag]
format.html { redirect_to_settings_in_projects } flash[:notice] = l(:label_invite_success)
format.js { @members = members; @applied_members = applied_members; } respond_to do |format|
format.api { format.html { redirect_to invite_members_project_url(@project) }
@member = members.first end
if @member.valid? else
render :action => 'show', :status => :created, :location => membership_url(@member) respond_to do |format|
else format.html { redirect_to_settings_in_projects }
render_validation_errors(@member) format.js { @members = members; @applied_members = applied_members; }
end format.api {
} @member = members.first
if @member.valid?
render :action => 'show', :status => :created, :location => membership_url(@member)
else
render_validation_errors(@member)
end
}
end
end end
elsif @course elsif @course
course_info = [] course_info = []
@ -310,6 +317,7 @@ class MembersController < ApplicationController
end end
def autocomplete def autocomplete
@flag = params[:flag] || false
respond_to do |format| respond_to do |format|
format.js format.js
end end

@ -180,6 +180,7 @@ class ProjectsController < ApplicationController
@project = Project.new @project = Project.new
@project.safe_attributes = params[:project] @project.safe_attributes = params[:project]
@project.organization_id = params[:organization_id] @project.organization_id = params[:organization_id]
@project.user_id = User.current.id
if validate_parent_id && @project.save if validate_parent_id && @project.save
@project.set_allowed_parent!(params[:project]['parent_id']) if params[:project].has_key?('parent_id') @project.set_allowed_parent!(params[:project]['parent_id']) if params[:project].has_key?('parent_id')
# Add current user as a project member if he is not admin # Add current user as a project member if he is not admin
@ -333,30 +334,41 @@ class ProjectsController < ApplicationController
end end
def send_mail_to_member def send_mail_to_member
if !params[:mail].blank? && User.find_by_mail(params[:mail].to_s).nil?
if !params[:mail].nil? && User.find_by_mail(params[:mail].to_s).nil?
email = params[:mail] email = params[:mail]
Mailer.send_invite_in_project(email, @project, User.current).deliver Mailer.send_invite_in_project(email, @project, User.current).deliver
@is_zhuce =false @is_zhuce =false
flash[:notice] = l(:notice_email_sent, :value => email)
else else
@is_zhuce = true @is_zhuce = true
end end
respond_to do |format| respond_to do |format|
format.js format.html{redirect_to invite_members_by_mail_project_url(@project)}
end end
end end
#发送邮件邀请新用户 #发送邮件邀请新用户
def invite_members_by_mail def invite_members_by_mail
@is_zhuce =false if User.current.member_of?(@project) || User.current.admin?
respond_to do |format| @is_zhuce = false
format.html respond_to do |format|
format.js format.html
format.js
end
else
render_403
end end
end end
# 邀请Trustie注册用户 # 邀请Trustie注册用户
def invite_members def invite_members
@member ||= @project.members.new if User.current.member_of?(@project) || User.current.admin?
@member ||= @project.members.new
respond_to do |format|
format.html
end
else
render_403
end
end end
def edit def edit

@ -28,7 +28,8 @@ class WelcomeController < ApplicationController
# 企业版定制: params[:project]为传过来的参数 # 企业版定制: params[:project]为传过来的参数
unless params[:organization].nil? unless params[:organization].nil?
@organization = Organization.find params[:organization] @organization = Organization.find params[:organization]
@organization_projects = Project.visible.joins(:project_status).joins("LEFT JOIN project_scores ON projects.id = project_scores.project_id").where("projects.organization_id = ?", @organization.id).order("score DESC").limit(10).all # @organization_projects = Project.joins(:project_status).joins("LEFT JOIN project_scores ON projects.id = project_scores.project_id").where("projects.organization_id = ?", @organization.id).order("score DESC").limit(10).all
@organization_projects = @organization.projects.visible.joins("LEFT JOIN project_scores ON projects.id = project_scores.project_id").order("project_scores.score DESC").limit(10).all
@part_projects = @organization_projects.count < 9 ? find_miracle_project( 9 - @organization_projects.count, 3,"score desc") : [] @part_projects = @organization_projects.count < 9 ? find_miracle_project( 9 - @organization_projects.count, 3,"score desc") : []
# @cur_projects = Project.find(params[:organization]) # @cur_projects = Project.find(params[:organization])
# @organization = @cur_projects.enterprise_name # @organization = @cur_projects.enterprise_name

@ -490,6 +490,15 @@ module ApplicationHelper
s.html_safe s.html_safe
end end
#项目成员列表复选框生成
def project_member_check_box_tags_ex name, principals
s = ''
principals.each do |principal|
s << "<li>#{ check_box_tag name, principal.id, false, :id => nil } #{h link_to principal.userInfo, user_path( principal.id)}</li>\n"
end
s.html_safe
end
#扩展的checkbox生成 #扩展的checkbox生成
def principals_check_box_tags_ex(name, principals) def principals_check_box_tags_ex(name, principals)
s = '' s = ''
@ -1198,6 +1207,17 @@ module ApplicationHelper
html_safe html_safe
end end
def wiki_simple_format_without_paragraph(text)
text.to_s.
gsub(/\r\n?/, "\n"). # \r\n and \r -> \n
gsub(/\n\n+/, "<br /><br />"). # 2+ newline -> 2 br
gsub(/([^\n]\n)(?=[^\n])/, '\1<br />'). # 1 newline -> br
gsub("&amp;nbsp", " "). #gsub(/<\/?.*?>/,"").
gsub(/&lt;\/?.*?&gt;/, "").
gsub("&quot;", "'").
html_safe
end
def lang_options_for_select(blank=true) def lang_options_for_select(blank=true)
{ 'Chinese简体中文 '=> 'zh', :English => :en} { 'Chinese简体中文 '=> 'zh', :English => :en}
end end

@ -48,7 +48,7 @@ module FilesHelper
def courses_check_box_tags(name,courses,current_course,attachment) def courses_check_box_tags(name,courses,current_course,attachment)
s = '' s = ''
courses.each do |course| courses.each do |course|
if !(attachment.container_type && attachment.container_id == course.id) && is_course_teacher(User.current,course) && course_in_current_or_next_term(course) if !course_contains_attachment?(course,attachment) && is_course_teacher(User.current,course) && course_in_current_or_next_term(course)
s << "<label>#{ check_box_tag name, course.id, false, :id => nil } #{h course.name}</label>&nbsp;[#{get_course_term course}]<br/>" s << "<label>#{ check_box_tag name, course.id, false, :id => nil } #{h course.name}</label>&nbsp;[#{get_course_term course}]<br/>"
end end
end end

@ -23,15 +23,22 @@ module MembersHelper
principal_count = scope.count principal_count = scope.count
principal_pages = Redmine::Pagination::Paginator.new principal_count, 10, params['page'] #by young principal_pages = Redmine::Pagination::Paginator.new principal_count, 10, params['page'] #by young
principals = scope.offset(principal_pages.offset).limit(principal_pages.per_page).all principals = scope.offset(principal_pages.offset).limit(principal_pages.per_page).all
s = content_tag('div', principals_check_box_tags_ex('membership[user_ids][]', principals), :id => 'principals') s = content_tag('div', principals_check_box_tags_ex('membership[user_ids][]', principals), :id => 'principals')
links = pagination_links_full(principal_pages, principal_count, :per_page_links => false) {|text, parameters, options| links = pagination_links_full(principal_pages, principal_count, :per_page_links => false) {|text, parameters, options|
link_to text, autocomplete_project_memberships_path(project, parameters.merge(:q => params[:q], :format => 'js')), :remote => true link_to text, autocomplete_project_memberships_path(project, parameters.merge(:q => params[:q], :format => 'js')), :remote => true
} }
s + content_tag('div', content_tag('ul', links), :class => 'pagination_new') s + content_tag('div', content_tag('ul', links), :class => 'pagination_new')
end
#获取项目可邀请的成员列表
def render_project_members project
scope = Principal.active.sorted.not_member_of(project).like(params[:q])
principals = paginateHelper scope,10
s = content_tag('ul', project_member_check_box_tags_ex('membership[user_ids][]', principals), :class => 'mb5', :style => "margin-left: -40px;")
links = pagination_links_full(@obj_pages, @obj_count, :per_page_links => false, :remote => false, :flag => true){|text, parameters, options|
link_to text, autocomplete_project_memberships_path(project, parameters.merge(:q => params[:q],:flag => true, :format => 'js')), :remote => true
}
s + content_tag('ul', links,:class => 'wlist')
end end
# add by nwb # add by nwb
@ -71,4 +78,18 @@ module MembersHelper
s + content_tag('div', content_tag('ul', links), :class => 'applied_new') s + content_tag('div', content_tag('ul', links), :class => 'applied_new')
end end
private
def paginateHelper obj, pre_size=20
@obj_count = obj.count
@obj_pages = Redmine::Pagination::Paginator.new @obj_count, pre_size, params['page']
if obj.kind_of? ActiveRecord::Base or obj.kind_of? ActiveRecord::Relation
obj.limit(@obj_pages.per_page).offset(@obj_pages.offset)
elsif obj.kind_of? Array
obj[@obj_pages.offset, @obj_pages.per_page]
else
logger.error "[ApplicationController] Error : application_controller#paginateHelper ===> unknow category: #{obj.class}"
raise RuntimeError, 'unknow type, Please input you type into this helper.'
end
end
end end

@ -283,6 +283,6 @@ module WatchersHelper
def exit_project_link(project) def exit_project_link(project)
link_to(l(:label_exit_project),exit_cur_project_path(project.id), link_to(l(:label_exit_project),exit_cur_project_path(project.id),
:remote => true, :confirm => l(:lable_sure_exit_project), :style => "color: #fff; display:block; padding: 0px 5px;margin-right:10px;height:22px;background:none repeat scroll 0% 0% #64BDD9;TES" ) :remote => true, :confirm => l(:lable_sure_exit_project), :style => "color: #fff; display:block; padding: 0px 5px; margin-right: 10px; height: 22px; line-height: 22px; background: none repeat scroll 0% 0% #64BDD9; TES" )
end end
end end

@ -41,7 +41,7 @@ class Project < ActiveRecord::Base
has_many :principals, :through => :member_principals, :source => :principal has_many :principals, :through => :member_principals, :source => :principal
has_many :enabled_modules, :dependent => :delete_all has_many :enabled_modules, :dependent => :delete_all
has_and_belongs_to_many :trackers, :order => "#{Tracker.table_name}.position" has_and_belongs_to_many :trackers, :order => "#{Tracker.table_name}.position"
has_many :issues, :dependent => :destroy, :include => [:status, :tracker],:order => "id ASC" has_many :issues, :dependent => :destroy, :include => [:status, :tracker],:order => "issues.id ASC"
has_many :issue_changes, :through => :issues, :source => :journals has_many :issue_changes, :through => :issues, :source => :journals
has_many :versions, :dependent => :destroy, :order => "#{Version.table_name}.effective_date DESC, #{Version.table_name}.name DESC" has_many :versions, :dependent => :destroy, :order => "#{Version.table_name}.effective_date DESC, #{Version.table_name}.name DESC"
has_many :time_entries, :dependent => :delete_all has_many :time_entries, :dependent => :delete_all

@ -1,4 +1,3 @@
#coding=utf-8
class CoursesService class CoursesService
include ApplicationHelper include ApplicationHelper
include CoursesHelper include CoursesHelper
@ -355,19 +354,19 @@ class CoursesService
latest_course_dynamics = [] latest_course_dynamics = []
latest_news = course.news.order("created_on desc").first latest_news = course.news.order("created_on desc").first
unless latest_news.nil? unless latest_news.nil?
latest_course_dynamics << {:type => 1,:time => latest_news.created_on,:message => '最近更新了通知' }#l(:label_recently_updated_notification,:locale => current_user.language.nil? ? 'zh':current_user.language)} latest_course_dynamics << {:type => 1,:time => latest_news.created_on,:message => l(:label_recently_updated_notification,:locale => current_user.language.nil? ? 'zh':current_user.language)}
end end
latest_message = course.journals_for_messages.order("created_on desc").first latest_message = course.journals_for_messages.order("created_on desc").first
unless latest_message.nil? unless latest_message.nil?
latest_course_dynamics << {:type => 2,:time => latest_message.created_on,:message => '最近更新了留言'}#l(:label_recently_updated_message,:locale => current_user.language.nil? ? 'zh':current_user.language)} latest_course_dynamics << {:type => 2,:time => latest_message.created_on,:message => l(:label_recently_updated_message,:locale => current_user.language.nil? ? 'zh':current_user.language)}
end end
latest_attachment = course.attachments.order("created_on desc").first latest_attachment = course.attachments.order("created_on desc").first
unless latest_attachment.nil? unless latest_attachment.nil?
latest_course_dynamics << {:type => 3,:time => latest_attachment.created_on,:message => '最近更新了课件'}#l(:label_recently_updated_courseware,:locale => current_user.language.nil? ? 'zh':current_user.language)} latest_course_dynamics << {:type => 3,:time => latest_attachment.created_on,:message => l(:label_recently_updated_courseware,:locale => current_user.language.nil? ? 'zh':current_user.language)}
end end
latest_bid = course.homeworks.order('updated_on DESC').first latest_bid = course.homeworks.order('updated_on DESC').first
unless latest_bid.nil? unless latest_bid.nil?
latest_course_dynamics << {:type => 4,:time => latest_bid.updated_on,:message => '最近更新了作业'}#l(:label_recently_updated_homework,:locale => current_user.language.nil? ? 'zh':current_user.language)} latest_course_dynamics << {:type => 4,:time => latest_bid.updated_on,:message => l(:label_recently_updated_homework,:locale => current_user.language.nil? ? 'zh':current_user.language)}
end end
#每个作业中的最新留言 #每个作业中的最新留言
messages = [] messages = []
@ -382,7 +381,7 @@ class CoursesService
end end
latest_bid_message = messages.first latest_bid_message = messages.first
unless latest_bid_message.nil? unless latest_bid_message.nil?
latest_course_dynamics << {:type => 2,:time => latest_bid_message.created_on,:message => '最近更新了留言'}#l(:label_recently_updated_message,:locale => current_user.language.nil? ? 'zh':current_user.language)} latest_course_dynamics << {:type => 4,:time => latest_bid_message.created_on,:message => '最近更新了作业'}#l(:label_recently_updated_message,:locale => current_user.language.nil? ? 'zh':current_user.language)}
end end
#每个作业中学生最后提交的作业 #每个作业中学生最后提交的作业
homeworks = [] homeworks = []

@ -80,6 +80,28 @@ class UsersService
{:id => @user.id, :img_url => img_url, :nickname => @user.login, :gender => gender, :work_unit => work_unit, :mail => @user.mail, :location => location, :brief_introduction => @user.user_extensions.brief_introduction} {:id => @user.id, :img_url => img_url, :nickname => @user.login, :gender => gender, :work_unit => work_unit, :mail => @user.mail, :location => location, :brief_introduction => @user.user_extensions.brief_introduction}
end end
#忘记密码
def lost_password params
user = ::User.find_by_mail(params[:mail].to_s)
# user not found or not active
unless user && user.active?
raise l(:notice_account_unknown_email,:locale => 'zh')
end
# user cannot change its password
unless user.change_password_allowed?
raise l(:notice_can_t_change_password,:locale => user.language)
return
end
# create a new token for password recovery
token = Token.new(:user => user, :action => "recovery")
if token.save
Thread.new do
Mailer.lost_password(token).deliver
end
return l(:notice_account_lost_email_sent,:locale => user.language)
end
end
#编辑用户 #编辑用户
#gender 1female 0male 其他male #gender 1female 0male 其他male
def edit_user params def edit_user params

@ -36,7 +36,7 @@
<% end %> <% end %>
</tbody> </tbody>
</table> </table>
<% if @versions.first.attachments.any?%> <% if !@versions.first.nil? && @versions.first.attachments.any?%>
<% options = {:author => true, :deletable => true } %> <% options = {:author => true, :deletable => true } %>
<%= render :partial => 'attachments/links', :locals => {:attachments => @versions.first.attachments, :options => options, :is_float => true} %> <%= render :partial => 'attachments/links', :locals => {:attachments => @versions.first.attachments, :options => options, :is_float => true} %>
<% end %> <% end %>

@ -1,6 +1,6 @@
<span id="attachments_fields" xmlns="http://www.w3.org/1999/html"> <span id="attachments_fields" xmlns="http://www.w3.org/1999/html">
<% if defined?(container) && container && container.saved_attachments %> <% if defined?(container) && container && container.saved_attachments %>
<% container.attachments.each_with_index do |attachment, i| %> <% container.saved_attachments.each_with_index do |attachment, i| %>
<span id="attachments_p<%= i %>" class="attachment"> <span id="attachments_p<%= i %>" class="attachment">
<%= text_field_tag("attachments[p#{i}][filename]", attachment.filename, :class => 'filename readonly', :readonly=>'readonly')%> <%= text_field_tag("attachments[p#{i}][filename]", attachment.filename, :class => 'filename readonly', :readonly=>'readonly')%>
<%= text_field_tag("attachments[p#{i}][description]", attachment.description, :maxlength => 254, :placeholder => l(:label_optional_description), :class => 'description', :style=>"display: inline-block;") %> <%= text_field_tag("attachments[p#{i}][description]", attachment.description, :maxlength => 254, :placeholder => l(:label_optional_description), :class => 'description', :style=>"display: inline-block;") %>

@ -34,7 +34,8 @@
<%= link_to image_tag('delete.png'), {:controller => 'attachments', :action => 'delete_homework', :id => attachment.id}, <%= link_to image_tag('delete.png'), {:controller => 'attachments', :action => 'delete_homework', :id => attachment.id},
:data => {:confirm => l(:text_are_you_sure)}, :data => {:confirm => l(:text_are_you_sure)},
:method => :delete, :method => :delete,
:class => 'delete', :class => 'delete delete-homework-icon',
:remote => true,
:title => l(:button_delete) %> :title => l(:button_delete) %>
<% else %> <% else %>
<%= link_to image_tag('delete.png'), attachment_path(attachment), <%= link_to image_tag('delete.png'), attachment_path(attachment),

@ -172,9 +172,9 @@
<tr> <tr>
<td style="text-align: left" colspan="2"> <td style="text-align: left" colspan="2">
<span class="font_lighter"> <span class="font_lighter">
<%= l(:label_create_time) %> <%= l(:label_end_time) %>
:&nbsp; :&nbsp;
<%=format_time bid.created_on %> <%= bid.deadline %>
</span> </span>
<span style="float: right"> <span style="float: right">
<% if betweentime(bid.deadline) < 0 %> <% if betweentime(bid.deadline) < 0 %>

@ -28,7 +28,7 @@
</div> </div>
<% if @grouped.empty? %> <% if @grouped.empty? %>
<p class="nodata"> <p class="nodata" style="margin-top: 30px;">
<%= l(:label_no_data) %> <%= l(:label_no_data) %>
</p> </p>
<% end %> <% end %>

@ -1,38 +1,45 @@
<div class="project_r_h"> <div class="project_r_h">
<h2 class="project_h2"><%=h @document.title %></h2> <h2 class="project_h2"><%= l(:project_module_documents) %></h2>
</div> </div>
<div class="frame-wiki"> <div class="frame-wiki">
<div class="contextual">
<% if User.current.allowed_to?(:edit_documents, @project) %>
<%= link_to l(:button_edit), edit_document_path(@document), :class => 'icon icon-edit', :accesskey => accesskey(:edit) %>
<% end %>
<% if User.current.allowed_to?(:delete_documents, @project) %>
<%= delete_link document_path(@document) %>
<% end %>
</div>
<p style="padding-top: 5px">
<%= h @document.title %>
</p>
<p>
<em><%#=h @document.category.name %>
<br />
<%= format_date @document.created_on %></em>
</p>
<div class="wiki">
<%= textilizable @document, :description, :attachments => @document.attachments %>
</div>
<div class="contextual"> <div style="border-top:solid 1px #C6E9F1;"></div>
<% if User.current.allowed_to?(:edit_documents, @project) %> <h3><%= l(:label_attachment_plural) %></h3>
<%= link_to l(:button_edit), edit_document_path(@document), :class => 'icon icon-edit', :accesskey => accesskey(:edit) %> <%= link_to_attachments @document %>
<% end %>
<% if User.current.allowed_to?(:delete_documents, @project) %>
<%= delete_link document_path(@document) %>
<% end %>
</div>
<p><em><%#=h @document.category.name %><br />
<%= format_date @document.created_on %></em></p>
<div class="wiki">
<%= textilizable @document, :description, :attachments => @document.attachments %>
</div>
<div style="border-top:solid 1px #C6E9F1;"></div>
<h3><%= l(:label_attachment_plural) %></h3>
<%= link_to_attachments @document %>
<% if authorize_for('documents', 'add_attachment') %> <% if authorize_for('documents', 'add_attachment') %>
<p><%= link_to l(:label_attachment_new), {}, :onclick => "$('#add_attachment_form').show(); return false;", <p>
:id => 'attach_files_link' %></p> <%= link_to l(:label_attachment_new), {}, :onclick => "$('#add_attachment_form').show(); return false;",
<%= form_tag({ :controller => 'documents', :action => 'add_attachment', :id => @document }, :multipart => true, :id => "add_attachment_form", :style => "display:none;") do %> :id => 'attach_files_link' %>
<div class="box"> </p>
<p><%= render :partial => 'attachments/form' %></p> <%= form_tag({ :controller => 'documents', :action => 'add_attachment', :id => @document }, :multipart => true, :id => "add_attachment_form", :style => "display:none;") do %>
</div> <div class="box">
<%= submit_tag l(:button_add) %> <p>
<% end %> <%= render :partial => 'attachments/form' %>
<% end %> </p>
</div>
<%= submit_tag l(:button_add) %>
<% end %>
<% end %>
<% html_title @document.title -%> <% html_title @document.title -%>
</div> </div>

@ -11,7 +11,7 @@
<%= link_to(l(:label_upload_files), 'javascript:void(0);', :class => 'icon m5p5 button_submit', :onclick => "$('#relation_file_div').slideUp();$('#upload_file_div').slideToggle('slow');") if User.current.allowed_to?(:manage_files, @project) %> <%= link_to(l(:label_upload_files), 'javascript:void(0);', :class => 'icon m5p5 button_submit', :onclick => "$('#relation_file_div').slideUp();$('#upload_file_div').slideToggle('slow');") if User.current.allowed_to?(:manage_files, @project) %>
<%= link_to(l(:label_relation_files), 'javascript:void(0);', :onclick => "$('#upload_file_div').slideUp();$('#relation_file_div').slideToggle();", :class => 'icon m5p5 button_submit') if User.current.allowed_to?(:manage_files, @project) %> <%= link_to(l(:label_relation_files), 'javascript:void(0);', :onclick => "$('#upload_file_div').slideUp();$('#relation_file_div').slideToggle();", :class => 'icon m5p5 button_submit') if User.current.allowed_to?(:manage_files, @project) %>
<p></p> <p></p>
<div id="upload_file_div" class="relation_file_div hidden"> <div id="upload_file_div" class="relation_file_div <%= !@flag.nil?&&@flag=="true" ? '' : 'hidden'%>">
<%= render :partial => 'new', locals: {project: @project} %> <%= render :partial => 'new', locals: {project: @project} %>
</div> </div>
<div id="relation_file_div" class="relation_file_div hidden"> <div id="relation_file_div" class="relation_file_div hidden">

@ -1,5 +1,5 @@
<div class="project_r_h"> <div class="project_r_h">
<h2 class="project_h2"><%=l(:label_attachment_new)%></h2> <h2 class="project_h2"><%= l(:label_course_file) %></h2>
</div> </div>
<%= error_messages_for 'attachment' %> <%= error_messages_for 'attachment' %>
@ -8,11 +8,10 @@
<% if @versions.any? %> <% if @versions.any? %>
<p><label for="version_id"><%=l(:field_version)%></label> <p><label for="version_id"><%=l(:field_version)%></label>
<%= select_tag "version_id", content_tag('option', '') + <%= select_tag "version_id", content_tag('option', '') + options_from_collection_for_select(@versions, "id", "name") %></p>
options_from_collection_for_select(@versions, "id", "name") %></p>
<% end %> <% end %>
<p><label><%=l(:label_attachment_plural)%></label><%= render :partial => 'attachments/form' %></p> <p><label><%= l(:label_attachment_plural) %></label><%= render :partial => 'attachments/form' %></p>
</div> </div>
<%= submit_tag l(:button_add) %> <%= submit_tag l(:button_add) %>
<% end %> <% end %>

@ -1,6 +1,6 @@
$(function(){ $(function(){
$("#button1").click(function(){ $("#button1").click(function(){
myTips(<%= l(:label_feedback_success)%>,"success"); myTips(<%= l(:label_forums_feedback_success)%>,"success");
}); });
}) })

@ -2,7 +2,7 @@
<h2 class="project_h2">问题跟踪</h2> <h2 class="project_h2">问题跟踪</h2>
</div> </div>
<div class="problem_top"> <div class="problem_top">
<% if @project.enabled_modules.where("name = 'issue_tracking'").count > 0 %> <% unless @project.enabled_modules.where("name = 'issue_tracking'").empty? %>
<span> <span>
<% if User.current.member_of?(@project) %> <% if User.current.member_of?(@project) %>
<%= link_to l(:label_issue_new), {:controller => 'issues', :action => 'new', :copy_from => nil}, :param => :project_id, :caption => :label_issue_new, <%= link_to l(:label_issue_new), {:controller => 'issues', :action => 'new', :copy_from => nil}, :param => :project_id, :caption => :label_issue_new,

@ -5,4 +5,6 @@
per_page: number of items to fetch per page per_page: number of items to fetch per page
remote: data-remote remote: data-remote
-%> -%>
<span class="spacer">
<%= raw(t 'views.pagination.truncate') %>
</span>

@ -62,7 +62,7 @@
$.fn.fix = function(options){ $.fn.fix = function(options){
var defaults = { var defaults = {
float : 'right', float : 'right',
minStatue : false, minStatue : true,
skin : 'blue', skin : 'blue',
durationTime : 1000 durationTime : 1000
} }
@ -107,7 +107,7 @@
$(function(){ $(function(){
$("#button1").click(function(){ $("#button1").click(function(){
myTips("您的意见已经反馈到公共贴吧的新手讨论吧,我们会第一时间解决您的问题,谢谢支持!","success"); myTips("<%= l(:label_feedback_success) %>","success");
}); });
}) })
@ -153,7 +153,7 @@ function cookieget(n)
<html xmlns="http://www.w3.org/1999/xhtml"> <html xmlns="http://www.w3.org/1999/xhtml">
<head> <head>
<title>意见反馈</title> <title><%= l(:label_feedback) %></title>
</head> </head>
<body style="height:auto" > <body style="height:auto" >
@ -161,15 +161,15 @@ function cookieget(n)
<div class="scrollsidebar" id="scrollsidebar" style="float: right"> <div class="scrollsidebar" id="scrollsidebar" style="float: right">
<div class="side_content"> <div class="side_content">
<div class="side_list"> <div class="side_list">
<div class="side_title"><a title="意见反馈" class="close_btn"><span><%= l(:label_feedback) %></span></a></div> <div class="side_title"><a title="<%= l(:label_feedback) %>" class="close_btn"><span><%= l(:label_feedback) %></span></a></div>
<div class="side_center"> <div class="side_center">
<div class="custom_service"> <div class="custom_service">
<% get_memo %> <% get_memo %>
<%= form_for(@new_memo, :url => create_feedback_forum_path(@public_forum)) do |f| %> <%= form_for(@new_memo, :url => create_feedback_forum_path(@public_forum)) do |f| %>
<%= f.text_area :subject, :class => "opnionText",:placeholder => "有什么想说的,尽管来咆哮吧~~"%> <%= f.text_area :subject, :class => "opnionText", :placeholder => l(:label_feedback_tips) %>
<%= f.hidden_field :content, :required => true ,:value=>'该贴来自用户反馈!'%> <%= f.hidden_field :content, :required => true , :value => l(:label_feedback_value) %>
<%#= f.submit :value => l(:label_memo_create), :class => "opnionButton", :id => "button1" %> <%#= f.submit :value => l(:label_memo_create), :class => "opnionButton", :id => "button1" %>
<a href="javascript:void(0);" class="opnionButton" style=" color:#fff;" id="" onclick="f_submit();">提&nbsp;&nbsp;交</a> <a href="javascript:void(0);" class="opnionButton" style=" color:#fff;" id="" onclick="f_submit();"><%= l(:label_submit)%></a>
<% end %> <% end %>
</div> </div>
<div class="msgserver"> <div class="msgserver">
@ -180,7 +180,7 @@ function cookieget(n)
<div class="side_bottom"></div> <div class="side_bottom"></div>
</div> </div>
</div> </div>
<div class="show_btn"><span>提交</span></div> <div class="show_btn"><span><%= l(:label_submit)%></span></div>
</div> </div>
<!-- ?ú?? ?á?? --> <!-- ?ú?? ?á?? -->
<script type="text/javascript"> <script type="text/javascript">

@ -154,7 +154,7 @@
<!--description--> <!--description-->
<div class="inf_user_context"> <div class="inf_user_context">
<div class="font_title_left"> <div class="font_title_left">
<%= l(:label_project_overview) %> <%= l(:label_overview) %>
</div> </div>
<div style="padding-bottom: 8px"> <div style="padding-bottom: 8px">
<% if @bid.description.size>0 %> <% if @bid.description.size>0 %>

@ -174,7 +174,7 @@
<div class="inf_user_context" style="line-height: normal;margin-top: 10px;"> <div class="inf_user_context" style="line-height: normal;margin-top: 10px;">
<div class="font_title_left"> <div class="font_title_left">
<%= l(:label_project_overview) %> <%= l(:label_overview) %>
</div> </div>
<div style="padding-bottom: 8px"> <div style="padding-bottom: 8px">
<% if @contest.description.size>0 %> <% if @contest.description.size>0 %>

@ -86,7 +86,7 @@
<div class="inf_user_context"> <div class="inf_user_context">
<div class="font_title_left"> <div class="font_title_left">
<%= l(:label_project_overview) %> <%= l(:label_overview) %>
</div> </div>
<div style="padding-bottom: 8px"> <div style="padding-bottom: 8px">

@ -29,7 +29,7 @@
<div class="top-content"> <div class="top-content">
<table> <table>
<tr> <tr>
<td class="info_font" style="width: 240px;" rowspan="2"><a href="http://<%= Setting.host_name%>" style="color: #15bccf;"> 软件项目托管社区 </a></td> <td class="info_font" style="width: 240px;" rowspan="2"><a href="http://<%= Setting.host_name%>" style="color: #15bccf;"> <%= l(:label_projects_community)%> </a></td>
<td style="width: 430px; color: #15bccf"><strong><%= l(:label_user_location) %> : </strong></td> <td style="width: 430px; color: #15bccf"><strong><%= l(:label_user_location) %> : </strong></td>
<td rowspan="2" width="250px"> <td rowspan="2" width="250px">
<div class="top-content-search"> <div class="top-content-search">
@ -50,12 +50,22 @@
return true; return true;
} }
} }
// 项目描述超过展开
$(function(){
$(".subNav").click(function(){
$(this).toggleClass("currentDd").siblings(".subNav").removeClass("currentDd")
$(this).toggleClass("currentDt").siblings(".subNav").removeClass("currentDt")
// 修改数字控制速度, slideUp(500)控制卷起速度
$(this).next(".navContent").slideToggle(500).siblings(".navContent").slideUp(500);
})
})
function submitSerch() function show_more_msg()
{ {$("#course_description").toggleClass("course_description_none");}
if(regexName()){$("#project_search_form").submit();}
}
</script> </script>
<%= form_tag(projects_search_path, :method => :get, :id => "project_search_form") do %> <%= form_tag(projects_search_path, :method => :get, :id => "project_search_form") do %>
<%= text_field_tag 'name', params[:name], :size => 20, :onkeyup => "regexName();", :style => "float:left" %> <%= text_field_tag 'name', params[:name], :size => 20, :onkeyup => "regexName();", :style => "float:left" %>
<%= hidden_field_tag 'project_type', params[:project_type] %> <%= hidden_field_tag 'project_type', params[:project_type] %>
@ -77,17 +87,6 @@
</div> </div>
<!-- 左边侧栏内容 --> <!-- 左边侧栏内容 -->
<div id="sidebar"> <div id="sidebar">
<script type="text/javascript">
$(function() {
$(".subNav").click(function() {
$(this).toggleClass("currentDd").siblings(".subNav").removeClass("currentDd")
$(this).toggleClass("currentDt").siblings(".subNav").removeClass("currentDt")
// 修改数字控制速度, slideUp(500)控制卷起速度
$(this).next(".navContent").slideToggle(500).siblings(".navContent").slideUp(500);
})
})
</script>
<div class="project_left"> <div class="project_left">
<div class="project_info"> <div class="project_info">
<div class="pr_info_logo fl mr10 mb5"> <div class="pr_info_logo fl mr10 mb5">
@ -105,65 +104,79 @@
<div class="pr_info_name"> <div class="pr_info_name">
<%= link_to @project.name, project_path(@project) %> <%= link_to @project.name, project_path(@project) %>
<% if !@project.is_public? %> <% if !@project.is_public? %>
<span class="img_private">私有</span> <span class="img_private"><%= l(:label_private)%></span>
<% end %> <% end %>
</div> </div>
<div class="cl"></div> <div class="cl"></div>
<div class="pr_info_score"> <div class="pr_info_score">
<% if @project.project_type == 0 %> <% if @project.project_type == 0 %>
<%= l(:label_project_grade)%> : <%= l(:label_project_score)%> :
<%= link_to(format("%.2f" ,project_scores(@project) ).to_i, {:controller => 'projects', <%= link_to(format("%.2f" ,project_scores(@project) ).to_i, {:controller => 'projects',
:action => 'show_projects_score', :action => 'show_projects_score',
:remote => true, :remote => true,
:id => @project.id }, :id => @project.id },
:style => "color: #EC6300;")%> :style => "color: #EC6300;") %>
<% end %> <% end %>
</div> </div>
<div class="pr_info_foot"> <div class="pr_info_foot">
<%= l(:label_member) %><a class="info_foot_num" href="#" target="_blank"><%= link_to "#{@project.members.count}", project_member_path(@project) %></a> <%= l(:label_member) %><span class="info_foot_num" >
<span>| </span><%= l(:label_user_watchered) %><a class="info_foot_num" href="#" target="_blank"><%= link_to @project.watcher_users.count, :controller=>"projects", :action=>"watcherlist", :id => @project %></a> <%= link_to "#{@project.members.count}", project_member_path(@project), :style => "color:#3CA5C6;font-weight:bold" %></span>
<span>| </span><%= l(:project_module_attachments) %><a class="info_foot_num" href="#" target="_blank"><%= link_to "#{@project.attachments.count}", project_files_path(@project) %></a></div> <span>| </span>
<%= l(:label_user_watcher) %><span class="info_foot_num">
<%= link_to "#{@project.watcher_users.count}", {:controller=>"projects", :action=>"watcherlist", :id => @project.id}, :style => "color:#3CA5C6;font-weight:bold" %></span>
<span>| </span>
<%= l(:project_module_attachments) %><span class="info_foot_num" >
<%= link_to "#{@project.attachments.count}", project_files_path(@project), :style => "color:#3CA5C6;font-weight:bold" %></a></div>
<div class="cl"></div> <div class="cl"></div>
</div><!--项目信息 end--> </div><!--项目信息 end-->
<div class="subNavBox"> <div class="subNavBox">
<% if User.current.member_of?(@project) %> <% if User.current.member_of?(@project) %>
<div class="subNav currentDd currentDt subNav_jiantou">邀请</div> <div class="subNav currentDd currentDt subNav_jiantou"><%= l(:label_invite)%></div>
<ul class="navContent " style="display:block; padding-left: 0px; margin-top:0px;"> <ul class="navContent " style="display:block; padding-left: 0px; margin-top:0px;">
<li><%= link_to "发送邮件邀请新用户", :controller=>"projects", :action=>"invite_members_by_mail", :id => @project %></li> <li><%= link_to l(:label_invite_new_user), :controller=>"projects", :action=>"invite_members_by_mail", :id => @project %></li>
<li><%= link_to "邀请Trustie注册用户", :controller=>"projects", :action=>"invite_members", :id => @project %></li> <li><%= link_to l(:label_invite_trustie_user), :controller=>"projects", :action=>"invite_members", :id => @project %></li>
</ul> </ul>
<% end %> <% end %>
<div class="subNav"> <div class="subNav">
<%= link_to l(:label_activity), {:controller => 'projects', :action => 'show', :id => @project.id}, :style => "color:#3CA5C6" %> <%= link_to l(:label_activity), {:controller => 'projects', :action => 'show', :id => @project.id}, :style => "color:#3CA5C6" %>
<span class="subnav_num">(<%= ForgeActivity.where("project_id = ?", @project.id).count %>)</span>
</div> </div>
<% unless @project.enabled_modules.where("name = 'issue_tracking'").empty? %>
<div class="subNav"> <div class="subNav">
<%= link_to l(:label_issue_tracking), project_issues_path(@project), :style => "color:#3CA5C6" %><span class="subnav_num">(<%= @project.issues.count %>)</span> <%= link_to l(:label_issue_tracking), project_issues_path(@project), :style => "color:#3CA5C6" %><span class="subnav_num">(<%= @project.issues.count %>)</span>
<span> <span>
<% if User.current.logged? && User.current.member_of?(@project) %> <% if User.current.member_of?(@project) %>
<%= link_to "+发布问题", new_project_issue_path(@project) , :style => "font-size:12px;color:#fff; padding:1px 3px 3px 3px;height:18px;margin-top:3px;background:#28be6c;float:right;line-height:20px;" %></span> <%= link_to "+"+l(:label_release_issue), new_project_issue_path(@project) , :style => "font-size:12px;color:#fff; padding:1px 3px 3px 3px;height:18px;margin-top:3px;background:#28be6c;float:right;line-height:20px;" %></span>
<% end %> <% end %>
</div> </div>
<% end %>
<% unless @project.enabled_modules.where("name = 'boards'").empty? %>
<div class="subNav"> <div class="subNav">
<%= link_to "讨论区", project_boards_path(@project), :style => "color:#3CA5C6" %> <%= link_to l(:project_module_boards), project_boards_path(@project), :style => "color:#3CA5C6" %>
<span class="subnav_num">(<%= @project.boards.first.topics.count %>)</span> <span class="subnav_num">(<%= @project.boards.first.topics.count %>)</span>
<% if User.current.logged? && User.current.member_of?(@project) %> <% if User.current.member_of?(@project) %>
<%= link_to "+发贴", project_boards_path(@project, :flag => true), :layout => 'base_projects',:style => "font-size:12px;color:#fff; padding:1px 3px 3px 3px;height:18px;margin-top:4px;background:#28be6c;float:right;line-height:20px;" %> <%= link_to "+"+l(:project_module_boards_post), project_boards_path(@project, :flag => true), :layout => 'base_projects',:style => "font-size:12px;color:#fff; padding:1px 3px 3px 3px;height:18px;margin-top:4px;background:#28be6c;float:right;line-height:20px;" %>
<% end %> <% end %>
</div> </div>
<% end%>
<% unless @project.enabled_modules.where("name = 'files'").empty? %>
<div class="subNav"> <div class="subNav">
<%= link_to l(:label_course_file), project_files_path(@project), :style => "color:#3CA5C6" %><span class="subnav_num">(<%= @project.attachments.count %>)</span> <%= link_to l(:label_course_file), project_files_path(@project), :style => "color:#3CA5C6" %><span class="subnav_num">(<%= @project.attachments.count %>)</span>
<% if User.current.logged? && User.current.member_of?(@project) %> <% if User.current.member_of?(@project) %>
<%= link_to "+上传资源", new_project_file_path(@project),:style => "font-size:12px;color:#fff; padding:1px 3px 3px 3px;height:18px;margin-top:3px;background:#28be6c;float:right;line-height:20px;" %> <%= link_to "+"+l(:label_upload_files), project_files_path(@project,:flag => true),:style => "font-size:12px;color:#fff; padding:1px 3px 3px 3px;height:18px;margin-top:3px;background:#28be6c;float:right;line-height:20px;" %>
<% end %> <% end %>
</div> </div>
<% end%>
<% unless @project.enabled_modules.where("name = 'repository'").empty? %>
<div class="subNav"> <div class="subNav">
<%= link_to l(:field_user_active_changeset), {:controller => 'repositories', :action => 'show', :id => @project.id}, :style => "color:#3CA5C6" %> <%= link_to l(:project_module_repository), {:controller => 'repositories', :action => 'show', :id => @project.id}, :style => "color:#3CA5C6" %>
<span class="subnav_num">(<%= @project.repositories.count %>)</span> <span class="subnav_num">(<%= @project.repositories.count %>)</span>
<% if User.current.logged? && User.current.member_of?(@project) %> <%# if User.current.member_of?(@project) %>
<%= link_to "+创建版本库", new_project_repository_path(@project),:style => "font-size:12px;color:#fff; padding:1px 3px 3px 3px;height:18px;margin-top:3px;background:#28be6c;float:right;line-height:20px;" %> <%#= link_to "+"+l(:project_module_create_repository), new_project_repository_path(@project),:style => "font-size:12px;color:#fff; padding:1px 3px 3px 3px;height:18px;margin-top:3px;background:#28be6c;float:right;line-height:20px;" %>
<% end %> <%# end %>
</div> </div>
<% end %>
<div class="subNav subNav_jiantou"><%= l(:label_more) %></div> <div class="subNav subNav_jiantou"><%= l(:label_more) %></div>
<ul class="navContent" style="padding-left: 0px"> <ul class="navContent" style="padding-left: 0px">
@ -171,14 +184,16 @@
</ul> </ul>
</div><!--项目侧导航 end--> </div><!--项目侧导航 end-->
<div class="cl"></div> <div class="cl"></div>
<!-- 项目描述 -->
<div class="project_intro"> <div class="project_intro">
<h4 class="project_h4">项目简介:</h4><%= @project.description %> <div id="course_description" class="course_description">
<div class="lg-foot"> <h4 ><%= l(:label_project_overview) %></h4><%= @project.description %>
展开更多信息 <span class="g-arr-down"><img src="/images/new_project/jiantou.jpg" width="12" height="6" /></span>
</div> </div>
</div><!--项目简介 end--> <div class="lg-foot" onclick="show_more_msg();"><%= l(:label_expend_information) %><span class="g-arr-down"><img src="/images/jiantou.jpg" width="12" height="6" /></span></div>
</div>
<!-- tag模块 -->
<div class="project_Label"> <div class="project_Label">
<h4 class="project_h4">标签:</h4> <h4 class="project_h4"><%= l(:label_tag)%>:</h4>
<div class="tag_h" > <div class="tag_h" >
<div class="user_tags"> <div class="user_tags">
<div id="tags"> <div id="tags">

@ -217,7 +217,7 @@
</td> </td>
</tr> </tr>
<% end %> <% end %>
<% unless @user.user_extensions.location.empty?%> <% unless @user.user_extensions.nil?&&@user.user_extensions.location.empty?%>
<tr> <tr>
<td style=" float: right" width="70px"> <td style=" float: right" width="70px">

@ -1,12 +1,16 @@
<% if @project%> <% if @project%>
$('#principals_for_new_member').html('<%= escape_javascript(render_principals_for_new_members(@project)) %>'); <% if @flag == "true"%>
$('#principals_for_new_member').html('<%= escape_javascript(render_project_members(@project)) %>');
<% else%>
$('#principals_for_new_member').html('<%= escape_javascript(render_principals_for_new_members(@project)) %>');
<% end%>
<% elsif @course%> <% elsif @course%>
var checked = $("#principals input:checked").size(); var checked = $("#principals input:checked").size();
if(checked > 0) if(checked > 0)
{ {
alert('翻页或搜索后将丢失当前选择的用户数据!'); alert('翻页或搜索后将丢失当前选择的用户数据!');
} }
$('#principals_for_new_member').html('<%= escape_javascript(render_principals_for_new_course_members(@course)) %>'); $('#principals_for_new_member').html('<%= escape_javascript(render_principals_for_new_course_members(@course)) %>');
<%end%> <%end%>
var collection=$("#principals_for_new_member").children("#principals").children("label"); var collection=$("#principals_for_new_member").children("#principals").children("label");
collection.css("text-overflow","ellipsis"); collection.css("text-overflow","ellipsis");

@ -4,27 +4,45 @@
<% end %> <% end %>
</li> </li>
<li> <li>
<%= link_to l(:field_user_active_news), project_news_index_path(@project) %> <% unless @project.enabled_modules.where("name = 'news'").empty? %>
<%= link_to l(:project_module_news), project_news_index_path(@project) %>
<% end %>
</li> </li>
<li> <li>
<% unless @project.enabled_modules.where("name = 'wiki'").empty? %>
<%= link_to l(:project_module_wiki), project_wiki_path(@project) %> <%= link_to l(:project_module_wiki), project_wiki_path(@project) %>
<% end %>
</li> </li>
<li> <li>
<% unless @project.enabled_modules.where("name = 'code_review'").empty? %>
<%= link_to l(:project_module_code_review), {controller: 'code_review', action: 'index', id: @project.id} %> <%= link_to l(:project_module_code_review), {controller: 'code_review', action: 'index', id: @project.id} %>
<% end %>
</li> </li>
<li> <li>
<% unless @project.enabled_modules.where("name = 'calendar'").empty? %>
<%= link_to l(:project_module_calendar),project_calendar_path(@project) %> <%= link_to l(:project_module_calendar),project_calendar_path(@project) %>
<% end %>
</li> </li>
<li> <li>
<% unless @project.enabled_modules.where("name = 'gantt'").empty? %>
<%= link_to l(:project_module_gantt) ,project_gantt_path(@project) %> <%= link_to l(:project_module_gantt) ,project_gantt_path(@project) %>
<% end %>
</li> </li>
<li> <li>
<% unless @project.enabled_modules.where("name = 'documents'").empty? %>
<%= link_to l(:project_module_documents), project_documents_path(@project) %> <%= link_to l(:project_module_documents), project_documents_path(@project) %>
<% end %>
</li>
<li>
<%= link_to l(:label_roadmap) ,project_roadmap_path(@project) %>
</li> </li>
<li> <li>
<%= link_to l(:label_project_tool_response) ,project_feedback_path(@project)%> <%= link_to l(:label_project_tool_response) ,project_feedback_path(@project)%>
</li> </li>
<li> <li>
<% unless @project.enabled_modules.where("name = 'dts'").empty? %>
<%= link_to l(:label_module_share) ,share_show_path(@project) %> <%= link_to l(:label_module_share) ,share_show_path(@project) %>
<% end %>
</li> </li>

@ -1,7 +1,8 @@
<div class="project_r_h"> <div class="project_r_h">
<h2 class="project_h2">邀请加入</h2> <h2 class="project_h2">邀请加入</h2>
</div> </div>
<%= error_messages_for 'member' %> <%#= render_flash_messages %>
<% <%
roles = Role.givable.all roles = Role.givable.all
if @project.project_type == Project::ProjectType_course if @project.project_type == Project::ProjectType_course
@ -14,36 +15,46 @@
<div style="margin-left: 30px" > <div style="margin-left: 30px" >
<div class="floatbox" style="margin:100px;"> <div class="floatbox" style="margin:100px;">
<div ><a href="#" class="box_close"></a></div> <div >
<a href="#" class="box_close"></a>
</div>
<div class="cl"></div> <div class="cl"></div>
<div class="box_main"> <div class="box_main">
<h3 class="box_h3">邀请Trustie注册用户</h3> <h3 class="box_h3">邀请Trustie注册用户</h3>
<% if roles.any? %> <% if roles.any? %>
<%= form_for(@member, {:as => :membership, :url => project_memberships_path(@project), :remote => true, :method => :post}) do |f| %> <%= form_for(@member, {:as => :membership, :url => project_memberships_path(@project), :method => :post}) do |f| %>
<div class="invi_search">
<input hidden="hidden" value="true" name="flag">
<input id="principal_search" class="invi_search_input fl" type="text" placeholder="输入用户名称搜索好友">
<%= javascript_tag "observeSearchfield('principal_search', null, '#{ escape_javascript autocomplete_project_memberships_path(@project, :format => 'js',:flag => true) }')" %>
<div class="cl"></div>
<div class="invi_search"> <div id="principals_for_new_member">
<%= label_tag "principal_search", l(:label_principal_search) %> <%= render_project_members(@project) %>
<%= text_field_tag 'principal_search', nil %> </div>
<%= javascript_tag "observeSearchfield('principal_search', null, '#{ escape_javascript autocomplete_project_memberships_path(@project, :format => 'js') }')" %> <div class="cl"></div>
<div id="principals_for_new_member"> <ul class="rolebox">
<%= render_principals_for_new_members(@project) %> <li class="fl mr5">
</div> <%= l(:label_role_plural) %>:
<p style="padding-top: 5px"> </li>
<%= l(:label_role_plural) %>: <% roles.each do |role| %>
<% roles.each do |role| %> <li class="fl mr5">
<label> <%= check_box_tag 'membership[role_ids][]', role.id %>
<%= check_box_tag 'membership[role_ids][]', role.id %> <%= h role %>
<%= h role %> </li>
</label> <% end %>
</ul>
<div class="cl mb10"></div>
<a href="#" class="btn_free" onclick="$('#new_membership').submit();">
<%= l(:label_invite_members)%>
</a>
</div>
<!--<p>-->
<!--<%#= submit_tag l(:label_invite_members), :id => 'member-add-submit', :style => 'display:block; width:80px; text-align:center; color:#fff; height:26px; padding-top:3px; margin-bottom:10px;' %>-->
<!--</p>-->
<% end %> <% end %>
</p>
<p>
<%= submit_tag l(:label_invite_members), :id => 'member-add-submit', :style => 'display:block; width:80px; text-align:center; color:#fff; height:26px; padding-top:3px; margin-bottom:10px;' %>
</p>
<% end %>
<% end %> <% end %>
</div>
</div> </div>
</div> </div>
</div> </div>

@ -1,3 +1,27 @@
<script>
function verifyAddress() {
var email = $('#mail').val();
var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
if (email == "" || filter.test(email)) {
$("#valid_email").html("");
}
else
{
$("#valid_email").html("您所填写的电子邮件格式不正确");
}
}
// if (filter.test(email)&& !(email.value == null)) return true;
// else
// {
// document.getElementById('valid_email').innerHTML = "您所填写的电子邮件格式不正确";
// document.getElementById('valid_email').style.color = "#FF0000";
// return false;
// }
//
// }
</script>
<div class="project_r_h"> <div class="project_r_h">
<h2 class="project_h2">邀请加入</h2> <h2 class="project_h2">邀请加入</h2>
</div> </div>
@ -9,16 +33,20 @@
<div class="box_main"> <div class="box_main">
<h3 class="box_h3">发送邮件邀请新用户</h3> <h3 class="box_h3">发送邮件邀请新用户</h3>
<p class="box_p"> <p class="box_p">
输入好友邮箱地址Trustie帮您免费发送 输入好友邮箱地址Trustie会自动为该邮箱注册用户
</p> </p>
<div id="is_registed"> <div id="is_registed">
<%= render :partial => 'regested', locals: { :isregisted => false} %> <%= render :partial => 'regested', locals: { :isregisted => false} %>
</div> </div>
<%= form_tag('send_mail_to_member', :controller => 'projects',:action => 'send_mail_to_member', method: 'get',:remote=>true) do %> <%= form_tag('send_mail_to_member', :controller => 'projects',:action => 'send_mail_to_member', method: 'get') do %>
<%= text_field_tag 'mail', '邮箱', :class => "fb_item fl" %> <span id="valid_email" style="color: #FF0000;"></span>
<div class="cl"></div> <%= text_field_tag 'mail', '', :class => "fb_item fl", :placeholder => l(:label_input_email), :onblur => "verifyAddress();" %>
<div class="cl"></div> <div class="cl"></div>
<%= submit_tag '免费发送', :style => "display:block; width:80px; text-align:center; color:#fff; height:26px; padding-top:3px; margin-bottom:10px;" %> <div class="cl"></div>
<a href="#" class="btn_free" onclick="$(this).parent().submit();">
<%= l(:label_send_email)%>
</a>
<%#= submit_tag '免费发送', :style => "display:block; width:80px; text-align:center; color:#fff; height:26px; padding-top:3px; margin-bottom:10px;" %>
<% end %> <% end %>
</div> </div>
</div> </div>

@ -210,4 +210,4 @@
</div> </div>
</div> </div>
<%= paginate @events_pages, :window => 3%> <%= paginate @events_pages, :left => 3, :right => 3%>

@ -2,19 +2,31 @@
<%= render :partial => "tags/tag_name",:locals => {:obj => obj,:non_list_all => false ,:object_flag => object_flag} %> <%= render :partial => "tags/tag_name",:locals => {:obj => obj,:non_list_all => false ,:object_flag => object_flag} %>
</div> </div>
<% if User.current.logged? %> <% if User.current.logged? %>
<span> <%= toggle_link ("+ 添加标签"), 'put-tag-form', {:focus => 'tags_name'} %> </span> <span> <%= toggle_link (l(:label_add_tag)), 'put-tag-form', {:focus => 'tags_name'} %> </span>
<% end %> <% end %>
<div id="put-tag-form" style="display: none;text-align: center"> <div id="put-tag-form" style="display: none;text-align: center">
<%= form_for "tag_for_save",:remote=>true,:url=>tag_path, <%= form_for "tag_for_save",:remote=>true,:url=>tag_path,
:update => "tags_show", :update => "tags_show",
:complete => '$("#put-tag-form").slideUp();' do |f| %> :complete => '$("#put-tag-form").slideUp();' do |f| %>
<%= f.text_field :name ,:id => "tags_name",:size=>"20", <table>
<tr>
<td>
<%= f.text_field :name ,:id => "tags_name",:size=>"20",
:require=>true, :require=>true,
:maxlength => Setting.tags_max_length, :maxlength => Setting.tags_max_length,
:minlength=>Setting.tags_min_length %> :minlength=>Setting.tags_min_length %>
<%= f.text_field :object_id,:value=> obj.id,:style=>"display:none"%> </td>
<%= f.text_field :object_flag,:value=> object_flag,:style=>"display:none"%>
<a href="#" onclick='$("#tags_name").parent().submit();' type="button" class="submit f_l" style="margin-top: 10px;"></a> <%= f.text_field :object_id,:value=> obj.id,:style=>"display:none"%>
<%= f.text_field :object_flag,:value=> object_flag,:style=>"display:none"%>
<td style="margin-left: 5px">
<a href="#" onclick='$("#tags_name").parent().submit();' type="button" class="submit f_l"></a>
</td>
<tr>
</table>
<% end %> <% end %>
</div> </div>

@ -1,4 +1,7 @@
<!--modified by young--> <!--modified by young-->
<div class="project_r_h">
<h2 class="project_h2"><%= l(:label_roadmap) %></h2>
</div>
<div class="content-title-top"> <div class="content-title-top">
<%= link_to l(:label_version_new), new_project_version_path(@project), :class => 'icon icon-add' if User.current.allowed_to?(:manage_versions, @project) %> <%= link_to l(:label_version_new), new_project_version_path(@project), :class => 'icon icon-add' if User.current.allowed_to?(:manage_versions, @project) %>
</div> </div>

@ -1,4 +1,7 @@
<!--modified by young--> <!--modified by young-->
<div class="project_r_h">
<h2 class="project_h2"><%= l(:label_roadmap) %></h2>
</div>
<div class="contextual" style="overflow: hidden;text-overflow: ellipsis;white-space: nowrap;"> <div class="contextual" style="overflow: hidden;text-overflow: ellipsis;white-space: nowrap;">
<%= link_to(l(:button_edit), edit_version_path(@version), :class => 'icon icon-edit') if User.current.allowed_to?(:manage_versions, @version.project) %> <%= link_to(l(:button_edit), edit_version_path(@version), :class => 'icon icon-edit') if User.current.allowed_to?(:manage_versions, @version.project) %>
<%= link_to_if_authorized(l(:button_edit_associated_wikipage, <%= link_to_if_authorized(l(:button_edit_associated_wikipage,

@ -29,5 +29,5 @@
</p> </p>
<div class="text-diff" style="word-break: break-all;word-wrap: break-word;"> <div class="text-diff" style="word-break: break-all;word-wrap: break-word;">
<%= simple_format_without_paragraph @diff.to_html %> <%= wiki_simple_format_without_paragraph @diff.to_html %>
</div> </div>

@ -23,7 +23,7 @@
Kaminari.configure do |config| Kaminari.configure do |config|
# config.default_per_page = 25 # config.default_per_page = 25
# config.max_per_page = nil # config.max_per_page = nil
config.window = 2 config.window = 0
# config.outer_window = 3 # config.outer_window = 3
# config.left = 2 # config.left = 2
# config.right = 2 # config.right = 2

@ -31,13 +31,13 @@ en:
# #
lable_user_name: Username lable_user_name: Username
label_login_prompt: Email/Trustie account label_login_prompt: Email/Trustie account
label_stay_logged_in: "Keep me signed in" label_stay_logged_in: "Remember me"
label_password_lost: "Forget password" label_password_lost: "Forget password"
button_login: Login button_login: Login
# account_controller中判断用户名或密码输入有误的提示信息 # account_controller中判断用户名或密码输入有误的提示信息
notice_account_invalid_creditentials: "Invalid user or password." notice_account_invalid_creditentials: "Invalid user or password."
# account_controller中判断未激活的提示信息 # account_controller中判断未激活的提示信息
notice_account_invalid_creditentials_new: "Please check your email to activate your account." notice_account_invalid_creditentials_new: "Please check your email to activate your account. Email verification helps our support team verify ownership if you lose account access and allows you to receive all the notifications you ask for. "
# #
@ -81,10 +81,10 @@ en:
# #
# 激活 # 激活
# #
label_regiter_account: Registering for an account label_regiter_account: Sign up for Trustie
label_email_valid: E-mail activation label_email_valid: Email verification
notice_email_register_time: "Please click on the link in the email to continue to complete the registration within 24 hours" notice_email_register_time: "Please click the link in verification email to complete the registration within 24 hours."
notice_email_arrival: "An activation email has been sent to the email address you register." notice_email_arrival: "An activation email has been sent to the email address you register."
label_check_email: "Now check your email" label_check_email: "Now check your email"
label_mail_resend: "Resend the activation email" label_mail_resend: "Resend verification email"
notice_account_activated: "Your Trustie account has been activated. You can now sign in." notice_account_activated: "Your Trustie account has been activated. You can now sign in."

@ -39,7 +39,7 @@ zh:
# account_controller中判断用户名或密码输入有误的提示信息 # account_controller中判断用户名或密码输入有误的提示信息
notice_account_invalid_creditentials: "无效的用户名或密码" notice_account_invalid_creditentials: "无效的用户名或密码"
# account_controller中判断未激活的提示信息 # account_controller中判断未激活的提示信息
notice_account_invalid_creditentials_new: "您还未到邮箱激活" notice_account_invalid_creditentials_new: "您还未到邮箱激活。如果您丢失帐户,电子邮件验证帮助我们的支持团队验证帐户的所有权,并允许您接收所有您要求的通知。"
# #
@ -84,7 +84,7 @@ zh:
# #
label_regiter_account: 注册帐号 label_regiter_account: 注册帐号
label_email_valid: 邮箱激活 label_email_valid: 邮箱激活
notice_email_register_time: 请在24小时内点击邮件中的链接继续完成注册 notice_email_register_time: 请在24小时内点击邮件中的链接完成注册
notice_email_arrival: 邮件已发送到邮箱 notice_email_arrival: 邮件已发送到邮箱
label_check_email: 立即查收邮件 label_check_email: 立即查收邮件
label_mail_resend: 重新发送激活邮件 label_mail_resend: 重新发送激活邮件

@ -188,7 +188,13 @@ en:
label_anonymous: Anonymous #作业和留言 模块 label_anonymous: Anonymous #作业和留言 模块
text_are_you_sure: Are you sure? #js 提示 text_are_you_sure: Are you sure? #js 提示
# 项目、课程、用户公用
label_settings: Settings
label_information_plural: Information
label_member_plural: Members
# #
# Trustie按钮类 # Trustie按钮类
# #
@ -200,7 +206,7 @@ en:
button_cancel: Cancel button_cancel: Cancel
label_submit: Submit label_submit: Submit
button_project_tags_add: Add button_project_tags_add: Add
label_more: More label_more: "More>>"
button_download: Download button_download: Download
button_delete: Delete button_delete: Delete
@ -226,7 +232,7 @@ en:
label_tag: Tag label_tag: Tag
label_tags_no: no tags now label_tags_no: no tags now
label_more_tags: More label_more_tags: More
label_add_tag: '+ Add tags' label_add_tag: "+ Add tags"
label_tags_count: "The total number of tags" label_tags_count: "The total number of tags"
@ -313,6 +319,18 @@ en:
label_question_sponsor: Sponsor label_question_sponsor: Sponsor
label_final_reply: Last-reply label_final_reply: Last-reply
#
# 项目托管平台
#
# 意见反馈
#
label_feedback: Feedback
label_feedback_tips: "Anything you want to say roar it here ~~"
label_technical_support: "Support: "
label_feedback_success: "Your comments have been posted back to the bar of discussion by newbie(in the Public Post Bar), we will be the first time to solve your problem, thanks for your support!"
label_feedback_value: "The posts comes from user feedback"
# #
# Trustie # Trustie

@ -6,166 +6,6 @@ zh:
direction: ltr direction: ltr
jquery: jquery:
locale: "zh-CN" locale: "zh-CN"
date:
formats:
# Use the strftime parameters for formats.
# When no format has been given, it uses default.
# You can provide other formats here if you like!
default: "%Y-%m-%d"
short: "%b%d日"
long: "%Y年%b%d日"
zh_date:
formats:
default: "%Y年%m月%d日"
day_names: [星期天, 星期一, 星期二, 星期三, 星期四, 星期五, 星期六]
abbr_day_names: [日, 一, 二, 三, 四, 五, 六]
# Don't forget the nil at the beginning; there's no such thing as a 0th month
month_names: [~, 一月, 二月, 三月, 四月, 五月, 六月, 七月, 八月, 九月, 十月, 十一月, 十二月]
abbr_month_names: [~, 1月, 2月, 3月, 4月, 5月, 6月, 7月, 8月, 9月, 10月, 11月, 12月]
# Used in date_select and datime_select.
order:
- :year
- :month
- :day
errors:
messages:
email_verifier:
email_not_real: 必须指定一个真实的邮箱地址
out_of_mail_server: 指向了一个已停用的邮箱服务器
no_mail_server: 域名地址没有邮件功能
failure: 邮箱地址不能被验证
exception: 邮箱不能发送成功
time:
formats:
default: "%Y年%b%d日 %A %H:%M:%S"
time: "%H:%M"
short: "%b%d日 %H:%M"
long: "%Y年%b%d日 %H:%M"
am: "上午"
pm: "下午"
datetime:
distance_in_words:
half_a_minute: "半分钟"
less_than_x_seconds:
one: "1秒内"
other: "少于 %{count} 秒"
x_seconds:
one: "1秒"
other: "%{count} 秒"
less_than_x_minutes:
one: "1分钟内"
other: "少于 %{count} 分钟"
x_minutes:
one: "1分钟"
other: "%{count} 分钟"
about_x_hours:
one: "大约1小时"
other: "大约 %{count} 小时"
x_hours:
one: "1 小时"
other: "%{count} 小时"
x_days:
one: "1天"
other: "%{count} 天"
about_x_months:
one: "大约1个月"
other: "大约 %{count} 个月"
x_months:
one: "1个月"
other: "%{count} 个月"
about_x_years:
one: "大约1年"
other: "大约 %{count} 年"
over_x_years:
one: "超过1年"
other: "超过 %{count} 年"
almost_x_years:
one: "将近 1 年"
other: "将近 %{count} 年"
number:
# Default format for numbers
format:
separator: "."
delimiter: ""
precision: 3
human:
format:
delimiter: ""
precision: 3
storage_units:
format: "%n %u"
units:
byte:
one: "Byte"
other: "Bytes"
kb: "KB"
mb: "MB"
gb: "GB"
tb: "TB"
# Used in array.to_sentence.
support:
array:
sentence_connector: "和"
skip_last_comma: false
activerecord:
errors:
template:
header:
one: "由于发生了一个错误 %{model} 无法保存"
other: "%{count} 个错误使得 %{model} 无法保存"
messages:
inclusion: "不包含于列表中"
exclusion: "是保留关键字"
invalid: "是无效的"
confirmation: "与确认值不匹配"
accepted: "必须是可被接受的"
empty: "不能留空"
blank: "不能为空字符"
too_long: "过长(最长为 %{count} 个字符)"
too_short: "过短(最短为 %{count} 个字符)"
wrong_length: "长度非法(必须为 %{count} 个字符)"
taken: "已经被使用"
not_a_number: "不是数字"
not_a_date: "不是合法日期"
greater_than: "必须大于 %{count}"
greater_than_or_equal_to: "必须大于或等于 %{count}"
equal_to: "必须等于 %{count}"
less_than: "必须小于 %{count}"
less_than_or_equal_to: "必须小于或等于 %{count}"
odd: "必须为单数"
even: "必须为双数"
greater_than_start_date: "必须在起始日期之后"
not_same_project: "不属于同一个项目"
circular_dependency: "此关联将导致循环依赖"
cant_link_an_issue_with_a_descendant: "问题不能关联到它的子任务"
groupname_repeat: "该班名已存在"
attachment_all: "全部"
attachment_sufix_browse: "文件类型"
attachment_browse: "内容类型"
attachment_type: '分类'
general_text_No: '否'
general_text_Yes: '是'
general_text_no: '否'
general_text_yes: '是'
general_lang_name: 'Simplified Chinese (简体中文)'
general_csv_separator: ','
general_csv_decimal_separator: '.'
general_csv_encoding: gb18030
general_pdf_encoding: gb18030
general_first_day_of_week: '7'
actionview_instancetag_blank_option: 请选择
# #
@ -194,6 +34,11 @@ zh:
text_are_you_sure: 您确定要删除吗? #js 提示 text_are_you_sure: 您确定要删除吗? #js 提示
# 项目、课程、用户公用
label_settings: 配置
label_information_plural: 信息
label_member_plural: 成员
# #
# Trustie按钮类 # Trustie按钮类
# #
@ -205,7 +50,7 @@ zh:
button_cancel: 取消 button_cancel: 取消
label_submit: 提交 label_submit: 提交
button_project_tags_add: 增加 button_project_tags_add: 增加
label_more: 更多>> label_more: "更多>>"
button_download: 下载 button_download: 下载
button_more: 更多 button_more: 更多
button_delete: 删除 button_delete: 删除
@ -321,8 +166,22 @@ zh:
label_updated_time: " 更新于 %{value} 之前" label_updated_time: " 更新于 %{value} 之前"
label_question_sponsor: 楼主 label_question_sponsor: 楼主
label_final_reply: 最后回复 label_final_reply: 最后回复
#
# 项目托管平台
#
# 意见反馈
#
label_feedback: 意见反馈
label_feedback_tips: "有什么想说的,尽管来咆哮吧~~"
label_technical_support: "技术支持:"
label_feedback_success: "您的意见已经反馈到公共贴吧的新手讨论吧,我们会第一时间解决您的问题,谢谢支持!"
label_feedback_value: "该贴来自用户反馈!"
# #
# #
# #

@ -15,10 +15,10 @@ en:
label_course_term: 开课学期 label_course_term: 开课学期
label_join_course: 加入 label_join_course: 加入
label_exit_course: 退出
label_exit_course: exit course label_exit_course: exit course
# 资源库 (课程、项目按类型分)
label_course_file: File
label_upload_files: Upload
# #
# 课程托管平台主页 # 课程托管平台主页

@ -20,7 +20,9 @@ zh:
label_join_course: 加入 label_join_course: 加入
label_exit_course: 退出 label_exit_course: 退出
# 资源库 (课程、项目按类型分)
label_course_file: 资源库
label_upload_files: 上传资源
# #
# 课程托管平台主页 # 课程托管平台主页

@ -331,15 +331,8 @@ en:
project_module_issue_tracking: Issue tracking project_module_issue_tracking: Issue tracking
project_module_time_tracking: Time tracking project_module_time_tracking: Time tracking
project_module_news: News
project_module_documents: Documents
project_module_files: Files project_module_files: Files
project_module_wiki: Wiki project_module_boards: Forums
project_module_repository: Repository
project_module_boards: Forums
project_module_calendar: Calendar
project_module_gantt: Gantt
# edit by meng # edit by meng
lable_hot_course: Hot Courses lable_hot_course: Hot Courses
label_course_join_student: Join a course label_course_join_student: Join a course
@ -383,14 +376,9 @@ en:
label_commit_limit: Expired but can submit your work label_commit_limit: Expired but can submit your work
# steam the student # steam the student
label_current_group: Current group label_current_group: Current group
# DTS Test tool
project_module_dts: DTS Test tool
label_module_share: DTS Test tool
field_dts_test: DTS Test tool
# Feedback module
label_technical_support: Support
label_feedback: Feedback
#end
label_user_plural: Users label_user_plural: Users
label_user_new: New user label_user_new: New user
label_user_anonymous: Anonymous label_user_anonymous: Anonymous
@ -443,7 +431,6 @@ en:
label_role_non_member: Non member label_role_non_member: Non member
label_member: Members label_member: Members
label_member_new: New member label_member_new: New member
label_member_plural: Members
label_tracker: Tracker label_tracker: Tracker
label_tracker_plural: Trackers label_tracker_plural: Trackers
label_tracker_new: New tracker label_tracker_new: New tracker
@ -452,21 +439,17 @@ en:
label_issue_status_plural: Issue statuses label_issue_status_plural: Issue statuses
label_issue_status_new: New status label_issue_status_new: New status
label_issue_category: Issue category label_issue_category: Issue category
label_issue_category_plural: Issue categories
label_issue_category_new: New category label_issue_category_new: New category
label_custom_field: Custom field label_custom_field: Custom field
label_custom_field_plural: Custom fields label_custom_field_plural: Custom fields
label_custom_field_new: New custom field label_custom_field_new: New custom field
label_enumerations: Enumerations label_enumerations: Enumerations
label_enumeration_new: New value label_enumeration_new: New value
label_information: Information
label_information_plural: Information
label_please_login: Please log in label_please_login: Please log in
label_home: Home label_home: Home
label_my_page: My page label_my_page: My page
label_my_message: Msgs
label_my_projects: My projects
label_my_page_block: My page block label_my_page_block: My page block
label_administration: Administration label_administration: Administration
@ -519,7 +502,6 @@ en:
label_overview: Activities label_overview: Activities
label_version: Version label_version: Version
label_version_new: New version label_version_new: New version
label_version_plural: Versions
label_close_versions: Close completed versions label_close_versions: Close completed versions
label_confirmation: Confirmation label_confirmation: Confirmation
label_export_to: 'Also available in:' label_export_to: 'Also available in:'
@ -619,7 +601,7 @@ en:
label_repository_no: Have no repository label_repository_no: Have no repository
label_repository_new_repos: New repository label_repository_new_repos: New repository
#end #end
label_repository_plural: Repositories
label_browse: Browse label_browse: Browse
label_branch: Branch label_branch: Branch
label_revision: Revision label_revision: Revision
@ -644,7 +626,6 @@ en:
label_roadmap_due_in: "Due in %{value}" label_roadmap_due_in: "Due in %{value}"
label_roadmap_overdue: "%{value} late" label_roadmap_overdue: "%{value} late"
label_roadmap_no_issues: No issues for this version label_roadmap_no_issues: No issues for this version
label_search: Search
label_result_plural: Results label_result_plural: Results
label_all_words: All words label_all_words: All words
label_wiki: Wiki label_wiki: Wiki
@ -724,7 +705,6 @@ en:
label_feeds_access_key: RSS access key label_feeds_access_key: RSS access key
label_missing_feeds_access_key: Missing a RSS access key label_missing_feeds_access_key: Missing a RSS access key
label_feeds_access_key_created_on: "RSS access key created %{value} ago" label_feeds_access_key_created_on: "RSS access key created %{value} ago"
label_module_plural: Modules
label_added_time_by: "Added by %{author} %{age} ago" label_added_time_by: "Added by %{author} %{age} ago"
label_updated_time_by: "Updated by %{author} %{age} ago" label_updated_time_by: "Updated by %{author} %{age} ago"
label_jump_to_a_project: Jump to a project... label_jump_to_a_project: Jump to a project...
@ -980,7 +960,6 @@ en:
enumeration_issue_priorities: Issue priorities enumeration_issue_priorities: Issue priorities
enumeration_doc_categories: Document categories enumeration_doc_categories: Document categories
enumeration_activities: Activities
enumeration_system_activity: System Activity enumeration_system_activity: System Activity
description_filter: Filter description_filter: Filter
description_search: Searchfield description_search: Searchfield
@ -1027,15 +1006,13 @@ en:
#huang #huang
label_file_new: Download label_file_new: Download
label_my_course: "My Course"
label_user_commits: "Code commits" label_user_commits: "Code commits"
label_user_watchered: "Followed by" # huang添加的
label_user_mail: "E-mail:" label_user_mail: "E-mail:"
label_project_overview: "Overview" label_overview: "Overview"
label_project_tool: "Tool" label_project_tool: "Tool"
label_project_issues: "Issues" label_project_issues: "Issues"
label_project_newother: "See other comments" label_project_newother: "See other comments"
@ -1222,7 +1199,6 @@ en:
label_welcome_my_respond: Please leave your comments and suggestions here label_welcome_my_respond: Please leave your comments and suggestions here
label_no_current_fans: The user has no fans now label_no_current_fans: The user has no fans now
label_no_current_watchers: The user hasn't watched others label_no_current_watchers: The user hasn't watched others
label_project_tool_response: Response
label_course_feedback: Feedback label_course_feedback: Feedback
@ -1402,7 +1378,7 @@ en:
label_main_term: Term label_main_term: Term
label_teacher_work_unit: Position label_teacher_work_unit: Position
label_course_overview: Status label_course_overview: Status
label_course_file: File
label_course_news: News label_course_news: News
#wang #wang
@ -1474,24 +1450,9 @@ en:
label_issue_feedback_activities: Question&Feedback label_issue_feedback_activities: Question&Feedback
label_more_information: More... label_more_information: More...
label_release_time: Release-time label_release_time: Release-time
label_question_sponsor: Sponsor
label_final_reply: Final-reply
label_weixin: WeiXin label_weixin: WeiXin
# 项目托管平台
label_work_quantity: work label_work_quantity: work
label_contest_work: Competition work label_contest_work: Competition work
@ -1507,7 +1468,6 @@ en:
label_attendingcontestwork_deposit_project: Deposit project label_attendingcontestwork_deposit_project: Deposit project
label_attendingcontestwork_sorting_intimation: You can re-scoring, but just record the last scoring result! label_attendingcontestwork_sorting_intimation: You can re-scoring, but just record the last scoring result!
label_upload_files: Files-upload
label_upload_softwarepackage: Softwarepackage-upload label_upload_softwarepackage: Softwarepackage-upload
label_upload_cuttingphoto: Photo-upload label_upload_cuttingphoto: Photo-upload
label_system_platform: Platform label_system_platform: Platform
@ -1606,22 +1566,13 @@ en:
label_bidding_user_studentname: name label_bidding_user_studentname: name
# label_organizers: Organizer
# label_organizers_information: National Key Laboratory of Parallel and Distributed Processing, NUDT
# label_organizers_information_institute: Department of Computer Sciencer and Technology
# label_copyright: Copyright
# label_contact_us: Contact us
# label_record: 湘ICP备09019772
label_check_comment: Check comment label_check_comment: Check comment
label_notification: Notification label_notification: Notification
label_must_answer: Will answer label_must_answer: Will answer
label_poll_title: The questionnaire survey _ questionnaire page label_poll_title: The questionnaire survey _ questionnaire page
label_question_number: 'question %{question_number}:' label_question_number: 'question %{question_number}:'
label_complete_question: The answer has been completed label_complete_question: The answer has been completed
#end #end
# ajax异步验证 # ajax异步验证
modal_valid_passing: can be used. modal_valid_passing: can be used.
@ -1639,7 +1590,6 @@ en:
label_my_school: My school label_my_school: My school
label_all_schol: All school label_all_schol: All school
label_select_province: Please select the provinces label_select_province: Please select the provinces
label_search_conditions_not_null: The search conditions cannot be blank
label_attachment: attachment label_attachment: attachment
label_max_length: A maximum of 250 characters label_max_length: A maximum of 250 characters
@ -1653,8 +1603,6 @@ en:
label_course_empty_select: You have not selected course label_course_empty_select: You have not selected course
label_enterprise_page_made: enterprise_page label_enterprise_page_made: enterprise_page
label_add_tag: Add Tag
#api #api
label_recently_updated_notification: Recently updated notification label_recently_updated_notification: Recently updated notification
label_recently_updated_homework: Recently updated the homework label_recently_updated_homework: Recently updated the homework

@ -12,6 +12,10 @@ en:
label_company_name: Company Name label_company_name: Company Name
label_location: Location label_location: Location
label_identity: Identity label_identity: Identity
# top_menu 个人相关
label_my_course: My Course
label_my_message: Msgs
label_my_projects: My projects
# #
@ -22,8 +26,6 @@ en:
label_my_account: My account label_my_account: My account
label_my_photo: My photo label_my_photo: My photo
label_information_plural: Information
label_account_identity_teacher: Teacher label_account_identity_teacher: Teacher
label_account_identity_student: Student label_account_identity_student: Student

@ -6,12 +6,15 @@ zh:
# Trustie个人账户模块 # Trustie个人账户模块
# #
# 公共类 # 公共类
# #
field_occupation: 工作单位 field_occupation: 工作单位
label_company_name: 组织名 label_company_name: 组织名
label_location: 位置 label_location: 位置
label_identity: 身份 label_identity: 身份
# top_menu 个人相关
label_my_course: 我的课程
label_my_projects: 我的项目
label_my_message: 留言
# #
# Trustie个人账户模块 # Trustie个人账户模块
@ -21,8 +24,6 @@ zh:
label_my_account: 我的帐号 label_my_account: 我的帐号
label_my_photo: 我的头像 label_my_photo: 我的头像
label_information_plural: 信息
label_account_identity_choose: --请选择身份-- label_account_identity_choose: --请选择身份--
label_account_identity_teacher: 教师 label_account_identity_teacher: 教师

@ -50,6 +50,7 @@ en:
# #
# 搜索 # 搜索
# #
label_search: Search
welcome: welcome:
search: search:
information: "Please input the keywords!" # 搜索提示信息 information: "Please input the keywords!" # 搜索提示信息
@ -62,6 +63,7 @@ en:
showname: name showname: name
email: email email: email
label_search_conditions_not_null: The search conditions cannot be blank
label_resources_search_all: "Search all files in the website, while will not search the contents of private items." # 资源搜索提示信息 label_resources_search_all: "Search all files in the website, while will not search the contents of private items." # 资源搜索提示信息
# #

@ -53,6 +53,7 @@ zh:
# #
# 搜索 # 搜索
# #
label_search: 搜索
welcome: welcome:
search: search:
information: 请输入要搜索的关键字 # 搜索提示信息 information: 请输入要搜索的关键字 # 搜索提示信息
@ -65,6 +66,7 @@ zh:
showname: 姓名 showname: 姓名
email: 邮箱 email: 邮箱
label_search_conditions_not_null: 搜索条件不能为空
label_resources_search_all: "全站文件搜索,不会搜索私有项目中的内容。" # 资源搜索提示信息 label_resources_search_all: "全站文件搜索,不会搜索私有项目中的内容。" # 资源搜索提示信息

@ -24,6 +24,76 @@ en:
label_project_score: Score label_project_score: Score
#
# 项目托管平台主页
#
# 左边栏
#
label_id: "ID:"
label_apply_project: Apply to Join
label_exit_project: Exit
label_apply_project_waiting: "Application has been processed, please wait for administrator review."
label_unapply_project: Cancel the application
label_member: Members
project_module_attachments: Resources
label_invite: Invitation
label_invite_new_user: "Send e-mail to invite new user"
label_invite_trustie_user: "Invite the Trustie registered user"
label_issue_tracking: Issue Tracking
label_release_issue: New Issue
project_module_boards: Forums
project_module_boards_post: New Post
# 与课程公用资源库
project_module_repository: Repository
project_module_create_repository: New Repository
project_module_news: News
project_module_wiki: Wiki
project_module_code_review: Code Review
project_module_calendar: Calendar
project_module_gantt: Gantt
project_module_documents: Documents
label_project_tool_response: Response
label_module_share: DTS Test Tool
label_project_overview: "Profile:"
label_expend_information: More Information
#
# 项目托管平台
#
# 项目配置
#
label_module_plural: Modules
label_version_plural: Versions
label_issue_category_plural: Issue categories
label_repository_plural: Repositories
enumeration_activities: Activities
#
# 项目托管平台
#
# 邀请
#
label_invite_new_user: "发送邮件邀请新用户"
label_invite_join: 邀请加入
label_invite_email_tips: 输入好友邮箱地址Trustie会自动为该邮箱注册用户
label_email: 邮箱
notice_registed_success: 您所填写的电子邮件格式不正确或者该邮箱已被注册!
label_send_email_free: 免费发送
label_email_format_error: 您所填写的电子邮件格式不正确
label_invite_trustie_user: "邀请Trustie注册用户"
# #
# 项目托管平台 # 项目托管平台
# #
@ -33,8 +103,8 @@ en:
field_name: Name field_name: Name
field_description: Description field_description: Description
field_identifier: Identifier field_identifier: Identifier
field_enterprise_name: Eterprise field_enterprise_name: Enterprise
label_organization_choose: "- Please select an organization -"
text_length_between: "Length between %{min} and %{max} characters." text_length_between: "Length between %{min} and %{max} characters."
text_project_identifier_info: "Only lower case letters (a-z), numbers, dashes and underscores are allowed, must start with a lower case letter.<br />Once saved, the identifier cannot be changed." text_project_identifier_info: "Only lower case letters (a-z), numbers, dashes and underscores are allowed, must start with a lower case letter.<br />Once saved, the identifier cannot be changed."
@ -50,11 +120,36 @@ en:
# #
project: project:
join: join:
title: 快速进入项目通道 title: Quickly Join to Project
description: "只要持有项目的ID就可快速申请加入所在项目。项目页面搜索不到的私有项目只能从此通道进入哦" description: "Just hold the project ID, while you can quickly apply to join the project.Private projects can only join by this channel!"
id: id:
label: "Project ID:" label: "Project ID:"
tips: "Project ID is the number within the project's url" tips: "Project ID is the number within project URL"
#
# 项目托管平台
#
# 项目得分
#
label_projects_score: 项目综合得分
label_issue_score: issue得分
label_issue_number: issue的数量
label_issue_journal_number: issue的留言数量
label_news_score: 新闻得分
label_new_number: 新闻的数量
label_file_score: 文档得分
label_file_number: 文档的数量
label_code_submit_score: 代码提交得分
label_code_submit_number: 代码提交数量
label_topic_score: 讨论区得分
label_topic_number: 讨论区帖子数量

@ -15,11 +15,6 @@ zh:
label_join_project: 加入项目 label_join_project: 加入项目
# #
# 项目托管平台主页 # 项目托管平台主页
# #
@ -31,6 +26,71 @@ zh:
label_project_score_tips: 项目得分,综合考虑了项目的各项活动,反映了该项目的活跃程度 label_project_score_tips: 项目得分,综合考虑了项目的各项活动,反映了该项目的活跃程度
label_project_score: 项目评分 label_project_score: 项目评分
#
# 项目托管平台主页
#
# 左边栏
#
label_id: "ID:"
label_apply_project: 申请加入
label_exit_project: 退出项目
label_apply_project_waiting: 已处理申请,请等待管理员审核
label_unapply_project: 取消申请
label_member: 成员
project_module_attachments: 资源
label_invite: 邀请
label_issue_tracking: 问题跟踪
label_release_issue: 发布问题
project_module_boards: 讨论区
project_module_boards_post: 发帖
# 与课程公用资源库
project_module_repository: 版本库
project_module_create_repository: 创建版本库
project_module_news: 新闻
project_module_wiki: Wiki
project_module_code_review: 代码审查
project_module_calendar: 日历
project_module_gantt: 甘特图
project_module_documents: 文档
label_project_tool_response: 用户反馈
label_module_share: DTS测试工具
label_project_overview: "项目简介:"
label_expend_information: 展开更多信息
#
# 项目托管平台
#
# 项目配置
#
label_module_plural: 模块
label_version_plural: 版本
label_issue_category_plural: 问题类别
label_repository_plural: 版本库
enumeration_activities: 活动(时间跟踪)
#
# 项目托管平台
#
# 邀请
#
label_invite_new_user: "发送邮件邀请新用户"
label_invite_join: 邀请加入
label_invite_email_tips: 输入好友邮箱地址Trustie会自动为该邮箱注册用户
notice_registed_success: 您输入的邮箱为空或者该邮箱已被注册!
label_send_email_free: 免费发送
label_email_format_error: 您所填写的电子邮件格式不正确
label_invite_trustie_user: "邀请Trustie注册用户"
# #
# 项目托管平台 # 项目托管平台
@ -42,10 +102,9 @@ zh:
field_description: 描述 field_description: 描述
field_identifier: 标识 field_identifier: 标识
field_enterprise_name: 组织名称 field_enterprise_name: 组织名称
label_organization_choose: --请选择组织--
text_length_between: "长度必须在 %{min} 到 %{max} 个字符之间。" text_length_between: "长度必须在 %{min} 到 %{max} 个字符之间。"
text_project_identifier_info: "小写字母a-z、数字、破折号-和下划线_可以使用。<br />一旦保存,标识无法修改。" text_project_identifier_info: "小写字母a-z、数字、破折号-和下划线_可以使用。<br />一旦保存,标识无法修改。"
field_is_public: 公开 field_is_public: 公开
field_hidden_repo: 隐藏代码库 field_hidden_repo: 隐藏代码库
button_create: 提交 button_create: 提交

@ -16,7 +16,18 @@ zh:
# #
label_user_home: 创客空间 label_user_home: 创客空间
#
# Trustie用户主页
#
# 菜单栏 (公共)
#
label_activity: 动态
label_user_course: 课程
label_user_project: 项目
label_user_newfeedback: 留言
# #
# Trustie用户主页 # Trustie用户主页
# #
@ -85,17 +96,6 @@ zh:
label_no_current_watchers: 该用户暂未关注其他用户 label_no_current_watchers: 该用户暂未关注其他用户
#
# Trustie用户主页
#
# 菜单栏
#
label_activity: 动态
label_user_course: 课程
label_user_project: 项目
label_user_newfeedback: 留言
# #
# Trustie用户主页 # Trustie用户主页
# #

@ -3,174 +3,10 @@
# by tsechingho (http://github.com/tsechingho) # by tsechingho (http://github.com/tsechingho)
zh: zh:
# Text direction: Left-to-Right (ltr) or Right-to-Left (rtl) # Text direction: Left-to-Right (ltr) or Right-to-Left (rtl)
direction: ltr direction: ltr
jquery: jquery:
locale: "zh-CN" locale: "zh-CN"
date:
formats:
# Use the strftime parameters for formats.
# When no format has been given, it uses default.
# You can provide other formats here if you like!
default: "%Y-%m-%d"
short: "%b%d日"
long: "%Y年%b%d日"
zh_date:
formats:
default: "%Y年%m月%d日"
day_names: [星期天, 星期一, 星期二, 星期三, 星期四, 星期五, 星期六]
abbr_day_names: [日, 一, 二, 三, 四, 五, 六]
# Don't forget the nil at the beginning; there's no such thing as a 0th month
month_names: [~, 一月, 二月, 三月, 四月, 五月, 六月, 七月, 八月, 九月, 十月, 十一月, 十二月]
abbr_month_names: [~, 1月, 2月, 3月, 4月, 5月, 6月, 7月, 8月, 9月, 10月, 11月, 12月]
# Used in date_select and datime_select.
order:
- :year
- :month
- :day
errors:
messages:
email_verifier:
email_not_real: 必须指定一个真实的邮箱地址
out_of_mail_server: 指向了一个已停用的邮箱服务器
no_mail_server: 域名地址没有邮件功能
failure: 邮箱地址不能被验证
exception: 邮箱不能发送成功
time:
formats:
default: "%Y年%b%d日 %A %H:%M:%S"
time: "%H:%M"
short: "%b%d日 %H:%M"
long: "%Y年%b%d日 %H:%M"
am: "上午"
pm: "下午"
datetime:
distance_in_words:
half_a_minute: "半分钟"
less_than_x_seconds:
one: "1秒内"
other: "少于 %{count} 秒"
x_seconds:
one: "1秒"
other: "%{count} 秒"
less_than_x_minutes:
one: "1分钟内"
other: "少于 %{count} 分钟"
x_minutes:
one: "1分钟"
other: "%{count} 分钟"
about_x_hours:
one: "大约1小时"
other: "大约 %{count} 小时"
x_hours:
one: "1 小时"
other: "%{count} 小时"
x_days:
one: "1天"
other: "%{count} 天"
about_x_months:
one: "大约1个月"
other: "大约 %{count} 个月"
x_months:
one: "1个月"
other: "%{count} 个月"
about_x_years:
one: "大约1年"
other: "大约 %{count} 年"
over_x_years:
one: "超过1年"
other: "超过 %{count} 年"
almost_x_years:
one: "将近 1 年"
other: "将近 %{count} 年"
number:
# Default format for numbers
format:
separator: "."
delimiter: ""
precision: 3
human:
format:
delimiter: ""
precision: 3
storage_units:
format: "%n %u"
units:
byte:
one: "Byte"
other: "Bytes"
kb: "KB"
mb: "MB"
gb: "GB"
tb: "TB"
# Used in array.to_sentence.
support:
array:
sentence_connector: "和"
skip_last_comma: false
activerecord:
errors:
template:
header:
one: "由于发生了一个错误 %{model} 无法保存"
other: "%{count} 个错误使得 %{model} 无法保存"
messages:
inclusion: "不包含于列表中"
exclusion: "是保留关键字"
invalid: "是无效的"
confirmation: "与确认值不匹配"
accepted: "必须是可被接受的"
empty: "不能留空"
blank: "不能为空字符"
too_long: "过长(最长为 %{count} 个字符)"
too_short: "过短(最短为 %{count} 个字符)"
wrong_length: "长度非法(必须为 %{count} 个字符)"
taken: "已经被使用"
not_a_number: "不是数字"
not_a_date: "不是合法日期"
greater_than: "必须大于 %{count}"
greater_than_or_equal_to: "必须大于或等于 %{count}"
equal_to: "必须等于 %{count}"
less_than: "必须小于 %{count}"
less_than_or_equal_to: "必须小于或等于 %{count}"
odd: "必须为单数"
even: "必须为双数"
greater_than_start_date: "必须在起始日期之后"
not_same_project: "不属于同一个项目"
circular_dependency: "此关联将导致循环依赖"
cant_link_an_issue_with_a_descendant: "问题不能关联到它的子任务"
groupname_repeat: "该班名已存在"
actionview_instancetag_blank_option: 请选择
attachment_all: "全部"
attachment_sufix_browse: "文件类型"
attachment_browse: "内容类型"
attachment_type: '分类'
general_text_No: '否'
general_text_Yes: '是'
general_text_no: '否'
general_text_yes: '是'
general_lang_name: 'Simplified Chinese (简体中文)'
general_csv_separator: ','
general_csv_decimal_separator: '.'
general_csv_encoding: gb18030
general_pdf_encoding: gb18030
general_first_day_of_week: '7'
label_approve: 批准 label_approve: 批准
label_refusal: 拒绝 label_refusal: 拒绝
@ -181,7 +17,7 @@ zh:
notice_successful_create: 创建成功 notice_successful_create: 创建成功
notice_successful_update: 更新成功 notice_successful_update: 更新成功
notice_successful_delete: 删除成功 notice_successful_delete: 删除成功
notice_registed_success: 该邮箱已被注册,请直接邀请注册用户 notice_registed_success: 您输入的邮箱为空或者该邮箱已被注册!
notice_failed_delete: 删除失败 notice_failed_delete: 删除失败
notice_successful_connection: 连接成功 notice_successful_connection: 连接成功
notice_successful_join: 加入成功 notice_successful_join: 加入成功
@ -520,19 +356,14 @@ zh:
project_module_issue_tracking: 问题跟踪 project_module_issue_tracking: 问题跟踪
project_moule_boards_show: 项目论坛 project_moule_boards_show: 项目论坛
project_module_time_tracking: 时间跟踪 project_module_time_tracking: 时间跟踪
project_module_news: 新闻
project_module_documents: 文档
project_module_files: 作品下载
project_module_attachments: 资源
project_module_wiki: Wiki
project_module_repository: 版本库
project_module_boards: 讨论区
project_module_calendar: 日历
project_module_gantt: 甘特图
project_module_course: 课程 project_module_course: 课程
project_module_dts: DTS测试工具
label_module_share: DTS测试工具
project_module_code_review: 代码审查
label_user: 用户 label_user: 用户
label_user_plural: 用户列表 label_user_plural: 用户列表
@ -594,7 +425,7 @@ zh:
label_role_plural: 角色 label_role_plural: 角色
label_role_new: 新建角色 label_role_new: 新建角色
label_role_and_permissions: 角色和权限 label_role_and_permissions: 角色和权限
label_member: 成员
label_search_member: 搜索 label_search_member: 搜索
label_search_member_count: 共搜索到 label_search_member_count: 共搜索到
label_member_people: label_member_people:
@ -604,7 +435,6 @@ zh:
label_groupname_repeat: 该班名已存在 label_groupname_repeat: 该班名已存在
label_limit_groupname_null: 班名不能为空 label_limit_groupname_null: 班名不能为空
label_member_new: 添加成员 label_member_new: 添加成员
label_member_plural: 成员
label_tracker: 跟踪标签 label_tracker: 跟踪标签
label_tracker_plural: 跟踪标签 label_tracker_plural: 跟踪标签
label_tracker_new: 新建跟踪标签 label_tracker_new: 新建跟踪标签
@ -613,15 +443,14 @@ zh:
label_issue_status_plural: 问题状态 label_issue_status_plural: 问题状态
label_issue_status_new: 新建问题状态 label_issue_status_new: 新建问题状态
label_issue_category: 问题类别 label_issue_category: 问题类别
label_issue_category_plural: 问题类别
label_issue_category_new: 新建问题类别 label_issue_category_new: 新建问题类别
label_custom_field: 自定义属性 label_custom_field: 自定义属性
label_custom_field_plural: 自定义属性 label_custom_field_plural: 自定义属性
label_custom_field_new: 新建自定义属性 label_custom_field_new: 新建自定义属性
label_enumerations: 枚举值 label_enumerations: 枚举值
label_enumeration_new: 新建枚举值 label_enumeration_new: 新建枚举值
label_information: 信息
label_information_plural: 信息
label_please_login: 请登录 label_please_login: 请登录
label_login_with_open_id_option: 或使用OpenID登录 label_login_with_open_id_option: 或使用OpenID登录
label_home: 主页 label_home: 主页
@ -710,8 +539,6 @@ zh:
#end #end
label_my_page: 我的工作台 label_my_page: 我的工作台
label_my_account: 我的帐号 label_my_account: 我的帐号
label_my_message: 留言
label_my_projects: 我的项目
label_my_page_block: 我的工作台模块 label_my_page_block: 我的工作台模块
label_administration: 管理 label_administration: 管理
label_login: 登录 label_login: 登录
@ -720,7 +547,6 @@ zh:
label_assigned_to_me_issues: 指派给我的问题 label_assigned_to_me_issues: 指派给我的问题
label_last_login: 最后登录 label_last_login: 最后登录
label_registered_on: 注册于 label_registered_on: 注册于
label_activity: 动态 # modified by bai
label_overall_activity: 活动概览 label_overall_activity: 活动概览
label_new: 新建 label_new: 新建
@ -765,7 +591,7 @@ zh:
label_news_latest: 最近的新闻 label_news_latest: 最近的新闻
label_news_view_all: 查看所有新闻 label_news_view_all: 查看所有新闻
label_news_added: 新闻已添加 label_news_added: 新闻已添加
label_settings: 配置
label_overview: 近期动态 label_overview: 近期动态
label_course_overview: "课程动态" label_course_overview: "课程动态"
label_project_overview_new: "项目动态" label_project_overview_new: "项目动态"
@ -779,7 +605,7 @@ zh:
label_course_board: 讨论区 label_course_board: 讨论区
label_version: 版本 label_version: 版本
label_version_new: 新建版本 label_version_new: 新建版本
label_version_plural: 版本
label_close_versions: 关闭已完成的版本 label_close_versions: 关闭已完成的版本
label_confirmation: 确认 label_confirmation: 确认
label_export_to: 导出 label_export_to: 导出
@ -861,7 +687,6 @@ zh:
label_day_plural: label_day_plural:
label_repository: 版本库 label_repository: 版本库
label_course_repository: 代码库 label_course_repository: 代码库
label_repository_plural: 版本库
label_browse: 浏览 label_browse: 浏览
label_branch: 分支 label_branch: 分支
label_tag: 标签 label_tag: 标签
@ -892,7 +717,6 @@ zh:
label_search_by_login: 登录名 label_search_by_login: 登录名
label_search_by_name: 名字 label_search_by_name: 名字
label_search_by_email: 邮箱 label_search_by_email: 邮箱
label_search: 搜索
label_result_plural: 结果 label_result_plural: 结果
label_all_words: 所有单词 label_all_words: 所有单词
label_wiki: Wiki label_wiki: Wiki
@ -906,7 +730,6 @@ zh:
label_preview: 预览 label_preview: 预览
label_feed_plural: Feeds label_feed_plural: Feeds
label_changes_details: 所有变更的详情 label_changes_details: 所有变更的详情
label_issue_tracking: 问题跟踪
label_spent_time: 耗时 label_spent_time: 耗时
label_overall_spent_time: 总体耗时 label_overall_spent_time: 总体耗时
label_f_hour: "%{value} 小时" label_f_hour: "%{value} 小时"
@ -969,7 +792,6 @@ zh:
label_feeds_access_key: RSS存取键 label_feeds_access_key: RSS存取键
label_missing_feeds_access_key: 缺少RSS存取键 label_missing_feeds_access_key: 缺少RSS存取键
label_feeds_access_key_created_on: "RSS存取键是在 %{value} 之前建立的" label_feeds_access_key_created_on: "RSS存取键是在 %{value} 之前建立的"
label_module_plural: 模块
label_added_time_by: "由 %{author} 在 %{age} 之前添加" label_added_time_by: "由 %{author} 在 %{age} 之前添加"
label_added_time: "在 %{age} 之前添加" label_added_time: "在 %{age} 之前添加"
label_updated_time_by: "由 %{author} 更新于 %{age} 之前" label_updated_time_by: "由 %{author} 更新于 %{age} 之前"
@ -989,23 +811,14 @@ zh:
label_poll_title: 问卷调查_问卷页面 label_poll_title: 问卷调查_问卷页面
#huang #huang
label_file_new: 下载 label_file_new: 下载
label_user_edit: "修改资料"
label_user_info: "个人简介" #huang 添加
label_user_watcher: "关注" # huang添加的
label_user_fans: "粉丝"
# modify by men
label_x_user_fans:
zero: 粉丝
one: 粉丝
other: 粉丝
#end
label_x_join_in_contest: label_x_join_in_contest:
zero: 参与者 zero: 参与者
one: 参与者 one: 参与者
other: 参与者 other: 参与者
#end #end
label_user_commits: "代码提交" label_user_commits: "代码提交"
label_user_watchered: "关注" # huang添加的
label_user_newfeedback: "留言" ## huang添加的 label_user_newfeedback: "留言" ## huang添加的
label_feedback_success: "留言成功" label_feedback_success: "留言成功"
label_feedback_fail: "留言失败" label_feedback_fail: "留言失败"
@ -1014,7 +827,7 @@ zh:
label_user_joinin: "加入时间" label_user_joinin: "加入时间"
label_project_overview: "概述" label_overview: "概述"
label_project_tool: "项目工具集" label_project_tool: "项目工具集"
label_project_issues: "问题" label_project_issues: "问题"
label_project_newother: "查看其他评论" label_project_newother: "查看其他评论"
@ -1226,7 +1039,7 @@ zh:
enumeration_issue_priorities: 问题优先级 enumeration_issue_priorities: 问题优先级
enumeration_doc_categories: 文档类别 enumeration_doc_categories: 文档类别
enumeration_activities: 活动(时间跟踪)
enumeration_system_activity: 系统活动 enumeration_system_activity: 系统活动
field_warn_on_leaving_unsaved: 当离开未保存内容的页面时,提示我 field_warn_on_leaving_unsaved: 当离开未保存内容的页面时,提示我
@ -1473,10 +1286,6 @@ zh:
label_tags_bid_description: 需求描述 label_tags_bid_description: 需求描述
label_tags_issue_description: 问题描述 label_tags_issue_description: 问题描述
label_tags_all_objects: 所有 label_tags_all_objects: 所有
label_apply_project: 申请加入
label_exit_project: 退出项目
label_apply_project_waiting: 已处理申请,请等待管理员审核
label_unapply_project: 取消申请
#fq #fq
@ -1650,7 +1459,6 @@ zh:
label_issue_appraise_over: 只能评价一次哦! label_issue_appraise_over: 只能评价一次哦!
label_welcome_my_respond: 请在此留下你的意见和建议! label_welcome_my_respond: 请在此留下你的意见和建议!
label_project_tool_response: 用户反馈
label_course_feedback: 留言 label_course_feedback: 留言
label_tags_search_result: 搜索结果 label_tags_search_result: 搜索结果
label_tags_call: 需求 label_tags_call: 需求
@ -1768,7 +1576,6 @@ zh:
label_i_new_activity: 有了新活动在 label_i_new_activity: 有了新活动在
label_choose_course: 选择课程 label_choose_course: 选择课程
button_submit_homework: 提交作业 button_submit_homework: 提交作业
label_my_course: 我的课程
button_submit_bid: 参与竞标 button_submit_bid: 参与竞标
label_requirement_from: 需求来源 label_requirement_from: 需求来源
label_course_view: 作业界面 label_course_view: 作业界面
@ -1832,7 +1639,7 @@ zh:
label_course_open_student_info: (打钩为“学生列表公开”,不打钩为不公开,若不公开,则课程外部人员看不到学生列表) label_course_open_student_info: (打钩为“学生列表公开”,不打钩为不公开,若不公开,则课程外部人员看不到学生列表)
label_course_view_student: 查看其他课程 label_course_view_student: 查看其他课程
label_course_student: 学生 label_course_student: 学生
label_course_file: 资源库 #资料共享
label_course_new_homework: 新建作业 label_course_new_homework: 新建作业
label_course_homework_list: 作业列表 label_course_homework_list: 作业列表
label_course_homework_new: 发布作业 label_course_homework_new: 发布作业
@ -1912,6 +1719,7 @@ zh:
label_bids_task_list: 作业列表 label_bids_task_list: 作业列表
label_join_course: 加入 label_join_course: 加入
label_invite_project: 邀请您加入项目 label_invite_project: 邀请您加入项目
label_invite_success: 邀请成功
label_invite_members: 邀请用户 label_invite_members: 邀请用户
label_exit_course: 退出 label_exit_course: 退出
label_exit_group: 退出当前分班 label_exit_group: 退出当前分班
@ -1965,8 +1773,6 @@ zh:
label_course_brief_introduction: 课程简介 label_course_brief_introduction: 课程简介
field_teacher_name: 教 师 field_teacher_name: 教 师
field_dts_test: DTS测试工具
label_newbie_faq: '新手指引 & 问答' label_newbie_faq: '新手指引 & 问答'
label_hot_project: '热门项目' label_hot_project: '热门项目'
label_borad_project: 项目讨论区 label_borad_project: 项目讨论区
@ -2087,7 +1893,7 @@ zh:
zero: 个动态 zero: 个动态
one: 个动态 one: 个动态
other: 个动态 other: 个动态
label_upload_files: 上传资源
label_relation_files: 关联已有资源 label_relation_files: 关联已有资源
label_contest_settings: 配置竞赛 label_contest_settings: 配置竞赛
label_contest_delete: 删除竞赛 label_contest_delete: 删除竞赛
@ -2153,94 +1959,16 @@ zh:
label_release_time: 发布时间 label_release_time: 发布时间
label_weixin: 微信扫码 label_weixin: 微信扫码
# 项目托管平台 >新建项目
label_project_new_description: '(项目为您和您的团队提供一个面向分布式协作的专有空间,可以设置为公开或私有。)'
field_name: 名称
field_description: 描述
field_identifier: 标识
text_length_between: "长度必须在 %{min} 到 %{max} 个字符之间。"
text_project_identifier_info: "小写字母a-z、数字、破折号-和下划线_可以使用。<br />一旦保存,标识无法修改。"
field_is_public: 公开
field_hidden_repo: 隐藏代码库
button_create: 提交
# 项目托管平台 >加入项目
# 课程托管平台
# 课程托管平台主页 >主旨
label_course_trustie: Trustie在线课程实践平台
label_course_trustie_theme: ", 面向中国高校教师与大学生,提供社交化的课程管理、资源共享、合作实验、协同研究。"
# 课程托管平台主页 >
# 竞赛托管平台
# 竞赛托管平台主页 >主旨
label_contest_trustie: Trustie在线竞赛实战平台
label_contest_trustie_theme: ", 面向中国大学生与编程爱好者,提供社交化的竞赛管理、应用管理、代码托管、合作交流。"
# 竞赛托管平台主页 >
# 邮件系统
# 邮件 >激活邮件
# edit by meng
# 邮件中文格式
mail_issue_greetings: "亲爱的Trustie用户您好"
mail_issue_footer: "退订该邮件!"
mail_issue_title_userin: "在"
mail_issue_title_active: "中有了一个与您相关的最新活动,请您关注!"
mail_issue_subject: "标题:"
mail_issue_content: "内容:"
mail_issue_sent_from: "来源:"
mail_issue_from_project: "项目问题跟踪"
mail_issue_attachments: "附件:"
mail_issue_reply: "我要回复"
mail_footer: "退订Trustie社区任务提醒"
# 课程资源上传
# edit by meng
# 课程资源上传>
label_file_upload: 资源文件
label_file_upload_error_messages: "上传出现错误,请您检查您的网络环境,并刷新页面重新上传。"
button_confirm: 确认
label_work_quantity: 个作品 label_work_quantity: 个作品
# label_organizers: 主办单位
# label_organizers_information: 国防科学技术大学并行与分布处理国家重点实验室
# label_organizers_information_institute: 计算机科学与技术系
# label_copyright: 版权
# label_contact_us: 联系我们
# label_record: 湘ICP备09019772
label_check_comment: 查看通知评论 label_check_comment: 查看通知评论
label_notification: 通知公告 label_notification: 通知公告
label_course_ad_description: 课程模块正在优化中,使用过程中如有问题请您与我们联系,感谢大家的支持! label_course_ad_description: 课程模块正在优化中,使用过程中如有问题请您与我们联系,感谢大家的支持!
label_course_adcolick: 请点击: label_course_adcolick: 请点击:
label_coursejoin_tip: 提示:加入课程才有权限查看或提交作业,“加入”按钮见课程图标右侧! label_coursejoin_tip: 提示:加入课程才有权限查看或提交作业,“加入”按钮见课程图标右侧!
#end
#end
# ajax异步验证 # ajax异步验证
modal_valid_passing: 可以使用 modal_valid_passing: 可以使用
@ -2260,7 +1988,6 @@ zh:
label_all_schol: 全部学校 label_all_schol: 全部学校
label_school_all: 中国高校 label_school_all: 中国高校
label_select_province: 请选择省份 label_select_province: 请选择省份
label_search_conditions_not_null: 搜索条件不能为空
lable_hot_course: 活跃课程 lable_hot_course: 活跃课程
lable_student_list_visable: 学生列表是否公开 lable_student_list_visable: 学生列表是否公开
@ -2326,36 +2053,8 @@ zh:
label_answer_total: 总计: label_answer_total: 总计:
label_join_project: 加入项目 label_join_project: 加入项目
label_technical_support: 技术支持:
label_feedback: 意见反馈
label_feedback_success: "您的意见已经反馈到公共贴吧的新手讨论吧,我们会第一时间解决您的问题,谢谢支持!"
# 项目企业模块
# #
# #
# 项目企业模块 # 项目企业模块
@ -2368,7 +2067,6 @@ zh:
label_enterprise_nil: 该模块为最新上线模块,目前还没有创建企业项目! label_enterprise_nil: 该模块为最新上线模块,目前还没有创建企业项目!
label_enterprises: 组织 label_enterprises: 组织
label_add_tag: 添加标签
label_tags_opensource: 开源项目 label_tags_opensource: 开源项目
label_attachment_category: 所属分类 label_attachment_category: 所属分类
label_attachment_download_num: 下载 label_attachment_download_num: 下载
@ -2383,4 +2081,7 @@ zh:
label_recently_updated_message: 最近更新了留言 label_recently_updated_message: 最近更新了留言
label_recently_updated_courseware: 最近更新了课件 label_recently_updated_courseware: 最近更新了课件
label_no_courses: 您没有参与任何课程,请搜索课程、加入课程,或者创建课程吧! label_no_courses: 您没有参与任何课程,请搜索课程、加入课程,或者创建课程吧!
label_end_time: 截止时间
label_send_email: 免费发送
label_input_email: 请输入邮箱地址

@ -1,9 +1,11 @@
class AddDataToProjectIssuesIndexsInIssue < ActiveRecord::Migration class AddDataToProjectIssuesIndexsInIssue < ActiveRecord::Migration
def change def change
for i in 1 ... 1000 do i transaction do
Issue.page(i).per(10).each do |e| for i in 1 ... 1000 do i
index = e.project.issues.index(e).to_i + 1 Issue.page(i).per(10).each do |e|
execute("update issues set project_issues_index = #{index} where id = #{e.id}") index = e.project.issues.index(e).to_i + 1
execute("update issues set project_issues_index = #{index} where id = #{e.id}")
end
end end
end end
end end

@ -0,0 +1,21 @@
# Time 2015-03-11 14:25:45
# Author lizanle
# Description 给每个项目添加一条初始创建信息如果有menber最早加进来的就算创始人,并给projects表的更新创建人
class AddProjectCreateInfoToForgeActivities < ActiveRecord::Migration
def change
Project.all.each do |e|
user = e.members.order("members.created_on asc").first
next if user.nil?
execute("insert into forge_activities(forge_act_id,
forge_act_type,
project_id,
user_id,
created_at,
updated_at)
values(#{e.id},'ProjectCreateInfo',#{e.id},#{user.user_id},
'#{user.created_on.to_s.gsub("+0800","").to_datetime.strftime("%Y-%m-%d %H:%M:%S")}',
'#{user.created_on.to_s.gsub("+0800","").to_datetime.strftime("%Y-%m-%d %H:%M:%S")}')")
execute("update projects set user_id=#{user.user_id} where id =#{e.id}")
end
end
end

@ -11,7 +11,7 @@
# #
# It's strongly recommended to check this file into your version control system. # It's strongly recommended to check this file into your version control system.
ActiveRecord::Schema.define(:version => 20150305081132) do ActiveRecord::Schema.define(:version => 20150311013036) do
create_table "activities", :force => true do |t| create_table "activities", :force => true do |t|
t.integer "act_id", :null => false t.integer "act_id", :null => false

@ -55,10 +55,11 @@ zh:
label_auto_assign_settings: 自动分派 label_auto_assign_settings: 自动分派
label_candidates_of_reviewer: 候选评审员 label_candidates_of_reviewer: 候选评审员
label_auto_assignment_filters: 过滤器 label_auto_assignment_filters: 过滤器
auto_assign_filter_expression: '路径(Regular expression:ex. "/src/.*\.java$")' auto_assign_filter_expression: '路径(正则表达式:ex. "/src/.*\.java$")'
auto_assign_filter_assign: 指派 auto_assign_filter_assign: 指派
auto_assign_filter_drop: 移除 auto_assign_filter_drop: 移除
label_parent_suggestion: Maybe "%{issue_id}" ? label_parent_suggestion: "可能是 '%{issue_id}' ?"
label_assign_review: "分配给" label_assign_review: "分配给"
field_tracker_in_review_dialog: "允许创建代码审查时选择跟踪者?"

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

@ -480,7 +480,7 @@ function observeAutocompleteField(fieldId, url, options) {
$('#'+fieldId).autocomplete($.extend({ $('#'+fieldId).autocomplete($.extend({
source: url, source: url,
select: function(e,ui){self.location="/issues/"+ui.item.value;}, select: function(e,ui){self.location="/issues/"+ui.item.value;},
minLength: 2, minLength: 1,
search: function(){$('#'+fieldId).addClass('ajax-loading');}, search: function(){$('#'+fieldId).addClass('ajax-loading');},
response: function(){$('#'+fieldId).removeClass('ajax-loading'); response: function(){$('#'+fieldId).removeClass('ajax-loading');
} }
@ -850,3 +850,13 @@ function HS_setDate(inputObj){
function redo() { function redo() {
window.location.reload() window.location.reload()
} }
//// 作业附件删除
$(function(){
$('.attachments a.delete-homework-icon').bind('ajax:complete', //this will work
function(event, data, status, xhr) { //note parametes
$(this).parent('p').remove();
console.log("delete complete.");
});
});

@ -8,6 +8,13 @@ h3, .wiki h2 {font-size: 15px; padding-left: 5px}
h4, .wiki h3 {font-size: 13px;} h4, .wiki h3 {font-size: 13px;}
h4 {border-bottom: 1px dotted #bbb;} h4 {border-bottom: 1px dotted #bbb;}
/****翻页***/
ul.wlist{ margin-left: -40px; border-bottom:none; }
ul.wlist li{float: left;}
ul.wlist li a{ border:1px solid #15bccf; padding:4px; margin-left:3px;}
ul.wlist li a:hover{ background:#15bccf; color:#fff; text-decoration:none;}
.wlist_select { background-color:#64bdd9; color:#fff; padding: 4px 3px 3px 3px; margin-left:3px;margin-top: -5px; border:1px solid #64bdd9;}
/*20150203项目界面优化样式 By: huangjignquan*/ /*20150203项目界面优化样式 By: huangjignquan*/
.project_new{font-size: 15px; padding: 5px;} .project_new{font-size: 15px; padding: 5px;}
.project_new .description{font-size: 12px; color: #ff7450; margin-bottom: 2px;} .project_new .description{font-size: 12px; color: #ff7450; margin-bottom: 2px;}
@ -63,6 +70,8 @@ a:hover.subnav_green{ background:#14ad5a;}
/*简介*/ /*简介*/
.project_intro{ width:220px; padding:10px; background:#fff; padding-top:5px; color:#6d6d6d;} .project_intro{ width:220px; padding:10px; background:#fff; padding-top:5px; color:#6d6d6d;}
.course_description{max-height: 105px;overflow:hidden;}
.course_description_none{max-height: none;}
.lg-foot{ border:1px solid #e8eef2; color: #929598; text-align:center; width:220px; height:23px; cursor:pointer;} .lg-foot{ border:1px solid #e8eef2; color: #929598; text-align:center; width:220px; height:23px; cursor:pointer;}
.lg-foot:hover{ color:#787b7e;} .lg-foot:hover{ color:#787b7e;}
/*右侧内容--动态*/ /*右侧内容--动态*/
@ -92,20 +101,21 @@ a:hover.more{ color:#64bdd9;}
.box_close:hover{background:url(../images/img_floatbox.png) -22px 0 no-repeat;} .box_close:hover{background:url(../images/img_floatbox.png) -22px 0 no-repeat;}
/*邮件邀请*/ /*邮件邀请*/
.box_main{ width:345px; margin:0 auto;padding-left:40px;} .box_main{ width:345px; margin:0 auto;padding-left:40px;}
.box_h3{ color:#15bccf; text-align:center; font-size:16px;} .box_h3{ color:#15bccf; text-align:center; font-size:16px;margin-right:40px;}
.box_p{ color:#404040; margin-bottom:5px;} .box_p{ color:#404040; margin-bottom:5px;}
.fb_item{ color:#919191; border:1px solid #919191; height:28px; margin-bottom:10px; padding-left:5px; width:290px;} .fb_item{ color:#919191; border:1px solid #919191; height:28px; margin-bottom:10px; padding-left:5px; width:290px;}
.icon_addm{ background:url(../images/img_floatbox.png) 0 -33px no-repeat; width:16px; height:16px; display:block; margin:5px 0 0 5px;} .icon_addm{ background:url(../images/img_floatbox.png) 0 -33px no-repeat; width:16px; height:16px; display:block; margin:5px 0 0 5px;}
.icon_addm:hover{background:url(../images/img_floatbox.png) 0 -61px no-repeat; } .icon_addm:hover{background:url(../images/img_floatbox.png) 0 -61px no-repeat; }
.icon_removem{ background:url(../images/img_floatbox.png) -22px -33px no-repeat;width:16px; height:16px; display:block; margin:5px 0 0 5px} .icon_removem{ background:url(../images/img_floatbox.png) -22px -33px no-repeat;width:16px; height:16px; display:block; margin:5px 0 0 5px}
.icon_removem:hover{background:url(../images/img_floatbox.png) -22px -61px no-repeat;} .icon_removem:hover{background:url(../images/img_floatbox.png) -22px -61px no-repeat;}
.btn_free{ background:#ff5722; display:block; width:80px; text-align:center; color:#fff; height:26px; padding-top:3px; margin-bottom:10px;} .btn_free{ background:#ff5722; display:block; width:80px; text-align:center; color:#fff !important; height:26px; padding-top:8px; margin-bottom:10px;}
.btn_free:hover{ background:#d63502;} .btn_free:hover{ background:#d63502;}
/*成员邀请*/ /*成员邀请*/
.invi_search{ width:295px; margin:0 auto;} .invi_search{ width:345px; margin:0 auto;}
.invi_search_input{ border:1px solid #15bccf; width:180px; height:24px; color:#9b9b9b; padding-left:5px; margin-bottom:10px;} .invi_search_input{ border:1px solid #15bccf; width:180px; height:24px; color:#9b9b9b; padding-left:5px; margin-bottom:10px;}
.invi_search_btn{ background:#15bccf; color:#fff; text-align: center; width:40px; height:22px;border:1px solid #15bccf; padding-top:2px; cursor:pointer;} .invi_search_btn{ background:#15bccf; color:#fff; text-align: center; width:40px; height:22px;border:1px solid #15bccf; padding-top:2px; cursor:pointer;}
.invi_search_btn:hover{ background:#0da1b2; border:1px solid #0da1b2;} .invi_search_btn:hover{ background:#0da1b2; border:1px solid #0da1b2;}
.rolebox{ margin-left: -40px;}
/*问题跟踪*/ /*问题跟踪*/
.problem_top{ margin:10px 0 ;} .problem_top{ margin:10px 0 ;}
.problem_search_input{ border:1px solid #64bdd9; width:180px; height:24px; color:#9b9b9b; padding-left:5px; margin-bottom:10px;} .problem_search_input{ border:1px solid #64bdd9; width:180px; height:24px; color:#9b9b9b; padding-left:5px; margin-bottom:10px;}

Loading…
Cancel
Save