From df4327456554dd1b18143203a79fff7d65fbc21f Mon Sep 17 00:00:00 2001 From: huang Date: Tue, 7 Apr 2015 12:48:47 +0800 Subject: [PATCH 001/285] =?UTF-8?q?=E6=96=B0=E7=89=88=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E7=95=8C=E9=9D=A2=EF=BC=88=E9=83=A8=E5=88=86=E6=9C=AA=E5=AE=8C?= =?UTF-8?q?=E6=88=90=EF=BC=8C=E5=85=88=E5=90=88=E5=B9=B6=EF=BC=89=201?= =?UTF-8?q?=E3=80=81=E9=A1=B9=E7=9B=AE=E6=A1=86=E6=9E=B6=E6=95=B4=E7=90=86?= =?UTF-8?q?=202=E3=80=81=E5=90=84=E9=A1=B5=E9=9D=A2=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/application_helper.rb | 4 + app/helpers/attachments_helper.rb | 10 + app/helpers/members_helper.rb | 184 ++-- app/helpers/watchers_helper.rb | 6 +- app/views/attachments/_form_project.html.erb | 67 ++ .../attachments/_project_file_links.html.erb | 72 ++ app/views/boards/_project_show.html.erb | 47 +- app/views/courses/_course_members.html.erb | 96 +- app/views/issues/_list.html.erb | 87 +- app/views/issues/index.html.erb | 9 +- app/views/layouts/base_projects.html.erb | 397 ++++---- app/views/messages/_form_project.html.erb | 44 + app/views/messages/_project_show.html.erb | 279 ++---- app/views/messages/edit.html.erb | 28 +- app/views/news/_project_form.html.erb | 27 + app/views/news/_project_news.html.erb | 164 +--- app/views/news/new.html.erb | 23 +- app/views/projects/show.html.erb | 320 +++--- app/views/tags/_project_tag.html.erb | 39 +- app/views/tags/_tag_name.html.erb | 8 +- config/locales/projects/zh.yml | 20 +- config/locales/zh.yml | 1 + public/images/115960_50.jpg | Bin 1570 -> 0 bytes public/images/121944_50.jpg | Bin 1306 -> 0 bytes public/images/12_50.png | Bin 5867 -> 0 bytes public/images/233683_50.jpg | Bin 1446 -> 0 bytes public/images/28_50.jpg | Bin 1302 -> 0 bytes public/images/47318_50.jpg | Bin 1402 -> 0 bytes public/images/737521_50.jpg | Bin 1264 -> 0 bytes public/images/860270_50.jpg | Bin 1598 -> 0 bytes public/images/926055_50.jpg | Bin 1336 -> 0 bytes public/images/avatars/Project/0 | Bin 11934 -> 17726 bytes public/images/new_project/close.png | Bin 0 -> 1637 bytes public/images/new_project/pic_01.jpg | Bin 0 -> 168098 bytes public/images/new_project/pic_ad.png | Bin 0 -> 521 bytes public/images/new_project/pic_down.png | Bin 0 -> 714 bytes public/images/new_project/pic_project.jpg | Bin 0 -> 17726 bytes public/images/new_project/pic_question.png | Bin 0 -> 502 bytes public/javascripts/course.js | 742 +++++++------- public/javascripts/project.js | 129 +++ public/stylesheets/courses.css | 918 +++++++++--------- public/stylesheets/pleft.css | 63 ++ public/stylesheets/project.css | 271 ++++-- 43 files changed, 2091 insertions(+), 1964 deletions(-) create mode 100644 app/views/attachments/_form_project.html.erb create mode 100644 app/views/attachments/_project_file_links.html.erb create mode 100644 app/views/messages/_form_project.html.erb create mode 100644 app/views/news/_project_form.html.erb delete mode 100644 public/images/115960_50.jpg delete mode 100644 public/images/121944_50.jpg delete mode 100644 public/images/12_50.png delete mode 100644 public/images/233683_50.jpg delete mode 100644 public/images/28_50.jpg delete mode 100644 public/images/47318_50.jpg delete mode 100644 public/images/737521_50.jpg delete mode 100644 public/images/860270_50.jpg delete mode 100644 public/images/926055_50.jpg create mode 100644 public/images/new_project/close.png create mode 100644 public/images/new_project/pic_01.jpg create mode 100644 public/images/new_project/pic_ad.png create mode 100644 public/images/new_project/pic_down.png create mode 100644 public/images/new_project/pic_project.jpg create mode 100644 public/images/new_project/pic_question.png create mode 100644 public/javascripts/project.js create mode 100644 public/stylesheets/pleft.css diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index c8168455c..5bff62dcd 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -1921,6 +1921,8 @@ module ApplicationHelper forum_link = link_to l(:label_forum_all), {:controller => "forums", :action => "index"} stores_link = link_to l(:label_stores_index), {:controller => 'stores', :action=> 'index'} school_all_school_link = link_to l(:label_school_all), {:controller => 'school', :action => 'index'} + project_new_link = link_to l(:label_project_new), {:controller => 'projects', :action => 'new', :host => Setting.project_domain} + # project_mine_link = link_to l(:label_my_project), {:controller => 'users', :action => 'user_projects', :host => Setting.project_domain} #@nav_dispaly_project_label nav_list = Array.new @@ -1933,6 +1935,8 @@ module ApplicationHelper nav_list.push(main_contest_link) if @nav_dispaly_main_contest_label && @show_contest == 1 nav_list.push(courses_link) if @nav_dispaly_course_label && @show_course == 1 + nav_list.push(project_new_link) if @nav_dispaly_project_label + # nav_list.push(project_mine_link) if @nav_dispaly_main_project_label # nav_list.push(projects_link) if @nav_dispaly_project_label #nav_list.push(users_link) if @nav_dispaly_user_label # nav_list.push(contest_link) if @nav_dispaly_contest_label && @show_contest == 1 diff --git a/app/helpers/attachments_helper.rb b/app/helpers/attachments_helper.rb index 2e07421f8..529a00191 100644 --- a/app/helpers/attachments_helper.rb +++ b/app/helpers/attachments_helper.rb @@ -35,6 +35,16 @@ module AttachmentsHelper end end + def link_to_attachment_project(container, options = {}) + options.assert_valid_keys(:author, :thumbnails) + + if container.attachments.any? + options = {:deletable => container.attachments_deletable?, :author => true}.merge(options) + render :partial => 'attachments/project_file_links', + :locals => {:attachments => container.attachments, :options => options, :thumbnails => (options[:thumbnails] && Setting.thumbnails_enabled?)} + end + end + def link_to_attachments_course(container, options = {}) options.assert_valid_keys(:author, :thumbnails) diff --git a/app/helpers/members_helper.rb b/app/helpers/members_helper.rb index 29ba94924..f36c2a9a7 100644 --- a/app/helpers/members_helper.rb +++ b/app/helpers/members_helper.rb @@ -1,92 +1,92 @@ -# encoding: utf-8 -# -# Redmine - project management software -# Copyright (C) 2006-2013 Jean-Philippe Lang -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -module MembersHelper - def render_principals_for_new_members(project) - scope = Principal.active.sorted.not_member_of(project).like(params[:q]) - principal_count = scope.count - 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 - 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| - 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') - 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 - - # add by nwb - # 课程可添加的成员列表 - def render_principals_for_new_course_members(course) - scope = Principal.active.sorted.not_member_of_course(course).like(params[:q]) - principals = paginateHelper scope,10 - s = content_tag('ul', project_member_check_box_tags_ex('membership[user_ids][]', principals), :class => 'mb5', :id => 'principals') - - links = pagination_links_full(@obj_pages, @obj_count, :per_page_links => false, :remote => false, :flag => true) {|text, parameters, options| - link_to text, autocomplete_course_memberships_path(course, parameters.merge(:q => params[:q], :format => 'js')), :remote => true - } - - s + content_tag('ul', links,:class => 'wlist',:id => "course_member_pagination_links") - end - - - # 当前申请加入的成员名单 - def render_principals_for_applied_members(project) - scope = project.applied_projects.map(&:user) - principal_count = scope.count - principal_pages = Redmine::Pagination::Paginator.new principal_count, 10, params['page'] - offset ||= principal_pages.offset - principals = scope[offset, 10] - #principals = scope.offset(principal_pages.offset).limit(principal_pages.per_page).all - #principals = ApplicationController.new.paginateHelper scope,10 - - 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| - link_to text, appliedproject_project_memberships_path(project, parameters.merge(:q => params[:q], :format => 'js')), :remote => true - } - - s + content_tag('div', content_tag('ul', links), :class => 'applied_new') - 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 +# encoding: utf-8 +# +# Redmine - project management software +# Copyright (C) 2006-2013 Jean-Philippe Lang +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +module MembersHelper + def render_principals_for_new_members(project) + scope = Principal.active.sorted.not_member_of(project).like(params[:q]) + principal_count = scope.count + 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 + 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| + 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') + 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 + + # add by nwb + # 课程可添加的成员列表 + def render_principals_for_new_course_members(course) + scope = Principal.active.sorted.not_member_of_course(course).like(params[:q]) + principals = paginateHelper scope,10 + s = content_tag('ul', project_member_check_box_tags_ex('membership[user_ids][]', principals), :class => 'mb5', :id => 'principals') + + links = pagination_links_full(@obj_pages, @obj_count, :per_page_links => false, :remote => false, :flag => true) {|text, parameters, options| + link_to text, autocomplete_course_memberships_path(course, parameters.merge(:q => params[:q], :format => 'js')), :remote => true + } + + s + content_tag('ul', links,:class => 'wlist',:id => "course_member_pagination_links") + end + + + # 当前申请加入的成员名单 + def render_principals_for_applied_members(project) + scope = project.applied_projects.map(&:user) + principal_count = scope.count + principal_pages = Redmine::Pagination::Paginator.new principal_count, 10, params['page'] + offset ||= principal_pages.offset + principals = scope[offset, 10] + #principals = scope.offset(principal_pages.offset).limit(principal_pages.per_page).all + #principals = ApplicationController.new.paginateHelper scope,10 + + 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| + link_to text, appliedproject_project_memberships_path(project, parameters.merge(:q => params[:q], :format => 'js')), :remote => true + } + + s + content_tag('div', content_tag('ul', links), :class => 'applied_new') + 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 diff --git a/app/helpers/watchers_helper.rb b/app/helpers/watchers_helper.rb index 7995d7e68..38e42553b 100644 --- a/app/helpers/watchers_helper.rb +++ b/app/helpers/watchers_helper.rb @@ -304,7 +304,7 @@ module WatchersHelper def exit_project_link(project) 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;font-size:12px; padding: 0px 5px; margin-right: 10px; height: 20px; line-height: 22px; background: none repeat scroll 0% 0% #64BDD9; TES;padding-top:1px;" ) + :class => "pr_join_a" ) end #项目关注、取消关注 @@ -321,7 +321,7 @@ module WatchersHelper :object_id => (objects.size == 1 ? objects.first.id : objects.map(&:id).sort)) method = watched ? 'delete' : 'post' link_to text, url, :remote => true, :method => method, - :class => "project_watch_new" ,:id=>id + :class => "pr_join_a" ,:id=>id end #申请加入项目 @@ -339,7 +339,7 @@ module WatchersHelper :user_id => user.id, :project_id => project.id) method = applied ? 'delete' : 'post' - link_to text, url, :remote => true, :method => method , :class => "project_watch_new",:id => id + link_to text, url, :remote => true, :method => method , :class => "pr_join_a",:id => id end end diff --git a/app/views/attachments/_form_project.html.erb b/app/views/attachments/_form_project.html.erb new file mode 100644 index 000000000..da074f4d5 --- /dev/null +++ b/app/views/attachments/_form_project.html.erb @@ -0,0 +1,67 @@ + +<% if defined?(container) && container && container.saved_attachments %> + <% if isReply %> + <% container.saved_attachments.each_with_index do |attachment, i| %> + + <%= text_field_tag("attachments[p#{i}][filename]", attachment.filename, :class => 'filename readonly', :readonly=>'readonly')%> + <%= text_field_tag("attachments[p#{i}][description]", attachment.description, :maxlength => 255, :placeholder => l(:label_optional_description), :class => 'description', :style=>"display: inline-block;") + + link_to(' '.html_safe, attachment_path(attachment, :attachment_id => "p#{i}", :format => 'js'), :method => 'delete', :remote => true, :class => 'remove-upload') %> + <%#= render :partial => 'tags/tag', :locals => {:obj => attachment, :object_flag => "6"} %> + <%= l(:field_is_public)%>: + <%= check_box_tag("attachments[p#{i}][is_public_checkbox]", attachment.is_public,attachment.is_public == 1 ? true : false, :class => 'is_public')%> + <%= hidden_field_tag "attachments[p#{i}][token]", "#{attachment.token}" %> + + <% end %> + <% else %> + <% container.attachments.each_with_index do |attachment, i| %> + + <%= text_field_tag("attachments[p#{i}][filename]", attachment.filename, :class => 'filename readonly', :readonly=>'readonly')%> + <%= text_field_tag("attachments[p#{i}][description]", attachment.description, :maxlength => 255, :placeholder => l(:label_optional_description), :class => 'description', :style=>"display: inline-block;") + + link_to(' '.html_safe, attachment_path(attachment, :attachment_id => "p#{i}", :format => 'js'), :method => 'delete', :remote => true, :class => 'remove-upload') %> + <%#= render :partial => 'tags/tag', :locals => {:obj => attachment, :object_flag => "6"} %> + <%= l(:field_is_public)%>: + <%= check_box_tag("attachments[p#{i}][is_public_checkbox]", attachment.is_public,attachment.is_public == 1 ? true : false, :class => 'is_public')%> + <%= hidden_field_tag "attachments[p#{i}][token]", "#{attachment.token}" %> + + <% end %> + <% end %> +<% end %> +
+ + +<%#= button_tag "浏览", :type=>"button", :onclick=>"CompatibleSend();" %> + + <%= button_tag "浏览", :type=>"button", :onclick=>"_file.click()",:class =>"sub_btn",:style => ie8? ? 'display:none' : '' %> + <%= file_field_tag 'attachments[dummy][file]', + :id => '_file', + :class => 'file_selector', + :multiple => true, + :onchange => 'addInputFiles(this);', + :style => 'display:none', + :data => { + :max_file_size => Setting.attachment_max_size.to_i.kilobytes, + :max_file_size_message => l(:error_attachment_too_big, :max_size => number_to_human_size(Setting.attachment_max_size.to_i.kilobytes)), + :max_concurrent_uploads => Redmine::Configuration['max_concurrent_ajax_uploads'].to_i, + :upload_path => uploads_path(:format => 'js'), + :description_placeholder => l(:label_optional_description), + :field_is_public => l(:field_is_public), + :are_you_sure => l(:text_are_you_sure), + :file_count => l(:label_file_count), + :delete_all_files => l(:text_are_you_sure_all) + } %> + <%= l(:label_no_file_uploaded)%> +(<%= l(:label_max_size) %>: <%= number_to_human_size(Setting.attachment_max_size.to_i.kilobytes) %>) + + +<% content_for :header_tags do %> + <%= javascript_include_tag 'attachments' %> +<% end %> + + diff --git a/app/views/attachments/_project_file_links.html.erb b/app/views/attachments/_project_file_links.html.erb new file mode 100644 index 000000000..d32025787 --- /dev/null +++ b/app/views/attachments/_project_file_links.html.erb @@ -0,0 +1,72 @@ +
+ <% is_float ||= false %> + <% for attachment in attachments %> +

+ <%if is_float%> +

+ <% end%> + + <% if options[:length] %> + <%= link_to_short_attachment attachment, :class => ' link_file_board', :download => true,:length => options[:length] -%> + <% else %> + <%= link_to_short_attachment attachment, :class => ' link_file_board', :download => true -%> + <% end %> + + <%if is_float%> +
+ <% end%> + + <% if attachment.is_text? %> + <%= link_to image_tag('magnifier.png'), + :controller => 'attachments', + :action => 'show', + :id => attachment, + :filename => attachment.filename%> + <% end %> + + <%= h(truncate(" - #{attachment.description}", length: options[:length] ? options[:length]:15, omission: '...')) unless attachment.description.blank? %> + + ( + <%= number_to_human_size attachment.filesize %>) + + <% if options[:deletable] %> + <% if attachment.container_type == 'HomeworkAttach' %> + <%= link_to image_tag('delete.png'), {:controller => 'attachments', :action => 'delete_homework', :id => attachment.id}, + :data => {:confirm => l(:text_are_you_sure)}, + :method => :delete, + :class => 'delete delete-homework-icon', + :remote => true, + :title => l(:button_delete) %> + <% else %> + <%= link_to image_tag('delete.png'), attachment_path(attachment), + :data => {:confirm => l(:text_are_you_sure)}, + :method => :delete, + :class => 'delete', + #:remote => true, + #:id => "attachments_" + attachment.id.to_s, + :title => l(:button_delete) %> + <% end %> + <% end %> + <% if options[:wrap] %> +
+   + <% end %> + <% if options[:author] %> + + <%= link_to h(truncate(attachment.author.name, length: 10, omission: '...')),user_path(attachment.author) %>, + <%= format_time(attachment.created_on) %> + + <% end %> +

+ <% end %> + <% if defined?(thumbnails) && thumbnails %> + <% images = attachments.select(&:thumbnailable?) %> + <% if images.any? %> +
+ <% images.each do |attachment| %> +
<%= thumbnail_tag(attachment) %>
+ <% end %> +
+ <% end %> + <% end %> +
diff --git a/app/views/boards/_project_show.html.erb b/app/views/boards/_project_show.html.erb index 7ddd37ad6..92cae0074 100644 --- a/app/views/boards/_project_show.html.erb +++ b/app/views/boards/_project_show.html.erb @@ -1,4 +1,4 @@ - - - <%= 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" %> - <%= hidden_field_tag 'project_type', params[:project_type] %> - <%#= submit_tag l(:label_search), :class => "enterprise", :name => nil %> - <%= l(:label_search)%> -
- - <% end %> - - - - -

- <%= link_to l(:label_home),home_path %> > - <%= link_to @project, project_path(@project) %> -

- - - - - -
- - <%= render_flash_messages %> - <%= yield %> - <%= call_hook :view_layouts_base_content %> -
-
- <%= render :partial => 'layouts/base_footer'%> - - - - - - - <%= call_hook :view_layouts_base_body_bottom %> - +
+ <%= render_flash_messages %> + <%= yield %> + <%= call_hook :view_layouts_base_content %> +
+
+
+
+ <%= render :partial => 'layouts/new_footer'%> +
+ + + + <%= call_hook :view_layouts_base_body_bottom %> diff --git a/app/views/messages/_form_project.html.erb b/app/views/messages/_form_project.html.erb new file mode 100644 index 000000000..92eddaab7 --- /dev/null +++ b/app/views/messages/_form_project.html.erb @@ -0,0 +1,44 @@ +<%= error_messages_for 'message' %> +<% replying ||= false %> +<% extra_option = replying ? { readonly: true} : { maxlength: 200 } %> + +
  • + + <% if replying %> + <%= f.text_field :subject, { size: 60, id: "message_subject",:class=>"talk_input w585" }.merge(extra_option) %> + <% else %> + <%= f.text_field :subject, { size: 60, id: "message_subject", onkeyup: "regexSubject();",:class=>"talk_input w585" }.merge(extra_option) %> + <% end %> +

    +
  • +
  • + <% unless replying %> + <% if @message.safe_attribute? 'sticky' %> + <%= f.check_box :sticky %> + <%= label_tag 'message_sticky', l(:label_board_sticky) %> + <% end %> + <% if @message.safe_attribute? 'locked' %> + <%= f.check_box :locked %> + <%= label_tag 'message_locked', l(:label_board_locked) %> + <% end %> + <% end %> +
    +
  • +
  • +
    + + <%= text_area :quote,:quote,:style => 'display:none' %> + <%= f.text_area :content, :class => 'talk_text fl', :id => 'message_content', :onkeyup => "regexContent();", :maxlength => 5000,:placeholder => "最多3000个汉字(或6000个英文字符)" %> +
    +

    +
  • +
    +
  • + +
    + <%= render :partial => 'attachments/form_project', :locals => {:container => @message,:isReply => @isReply} %> +
    +
  • +
  • +
    +
  • diff --git a/app/views/messages/_project_show.html.erb b/app/views/messages/_project_show.html.erb index 01465188c..a157bb860 100644 --- a/app/views/messages/_project_show.html.erb +++ b/app/views/messages/_project_show.html.erb @@ -1,209 +1,114 @@ - - -
    -
    -

    <%= h @board.name %>

    -
    - - - <%= render :partial => "/praise_tread/praise_tread",:locals => {:obj => @topic,:show_flag => true,:user_id =>User.current.id,:horizontal => true}%> - -
    - <%= watcher_link(@topic, User.current) %> - <%= link_to( - l(:button_quote), - {:action => 'quote', :id => @topic}, - :remote => true, - :method => 'get', - :class => 'icon icon-comment', - :remote => true) if !@topic.locked? && authorize_for('messages', 'reply') %> - <%= link_to( - l(:button_edit), - {:action => 'edit', :id => @topic}, - :class => 'icon icon-edit' - ) if @message.editable_by?(User.current) %> - <%= link_to( - l(:button_delete), - {:action => 'destroy', :id => @topic}, - :method => :post, - :data => {:confirm => l(:text_are_you_sure)}, - :class => 'icon icon-del' - ) if @message.destroyable_by?(User.current) %> -
    - -
    -
    - <%= link_to image_tag(url_to_avatar(@topic.author), :class => "avatar"), user_path(@topic.author) %> -
    -

    - <%= link_to @topic.author, user_path(@topic.author) %> -

    -
    -
    -
    - <% if @project %> - <%= label_tag l(:field_subject) %>: - <%= link_to @topic.subject, project_boards_path(@topic.project),title: @topic.subject.to_s %> - <% elsif @course %> - <%= label_tag l(:field_subject) %>: - <%= link_to @topic.subject, course_boards_path(@topic.course),title: @topic.subject.to_s %> - <% end %> -
    -
    - <%= textilizable(@topic, :content) %> - <%= link_to_attachments @topic, :author => false %> -
    -
    -
    - <%= authoring @topic.created_on, @topic.author %> -
    -
    - <% if User.current.logged? %> - <%= toggle_link l(:button_reply), "reply", :focus => 'message_content' %> - <% else %> - <%= link_to l(:button_reply), signin_path %> - <% end %> -
    -
    -
    -
    +
    +

    <%= h @board.name %>

    - +
    +
    + <%=link_to image_tag(url_to_avatar(@topic.author), :width => "46", :height => "46"), user_path(@topic.author) %> +
    +
    +

    + <%= link_to @topic.subject, project_boards_path(@topic.project),title: @topic.subject.to_s %>

    +
    +

    由<%= link_to_user_header @topic.author,false,:class=> 'problem_name c_orange' %> 添加于<%= format_time(@topic.created_on) %>

    +
    + + <%#= watcher_link(@topic, User.current) %> + <%= link_to( + l(:button_edit), + {:action => 'edit', :id => @topic}, + :class => 'talk_edit fr' + ) if @message.editable_by?(User.current) %> + <%= link_to( + l(:button_delete), + {:action => 'destroy', :id => @topic}, + :method => :post, + :data => {:confirm => l(:text_are_you_sure)}, + :class => 'talk_edit fr' + ) if @message.destroyable_by?(User.current) %> +
    +
    <%= textilizable(@topic, :content) %>
    +
    <%= link_to_attachment_project @topic, :author => false %>
    + +
    + <% if User.current.logged? %> + <%= toggle_link l(:button_reply), "reply", :focus => 'message_content',:class => 'talk_edit fr' %> + <% else %> + <%= link_to l(:button_reply), signin_path,:class => 'talk_edit fr' %> + <% end %> + <%= link_to( + l(:button_quote), + {:action => 'quote', :id => @topic}, + :remote => true, + :method => 'get', + :class => 'talk_edit fr', + :remote => true) if !@topic.locked? && authorize_for('messages', 'reply') %> +
    +
    <% unless @replies.empty? %> -
    -
    -
    -
    -

    <%= l(:label_reply_plural) %> (<%= @reply_count %>)

    <% reply_count = 0 %> <% @replies.each do |message| %> -
    "> - - - - - - - - - - - -
    - <%= link_to image_tag(url_to_avatar(message.author), :class => "avatar"), user_path(message.author) %> - -
    - <%= link_to( - "引用", - {:action => 'quote', :id => message}, - :remote => true, - :method => 'get', - :title => l(:button_quote)) if !@topic.locked? && authorize_for('messages', 'reply') %> - <%= link_to( - #image_tag('edit.png'), - "编辑", - {:action => 'edit', :id => message}, - :title => l(:button_edit) - ) if message.editable_by?(User.current) %> - <%= link_to( - #image_tag('delete.png'), - "删除", - {:action => 'destroy', :id => message}, - :method => :post, - :data => {:confirm => l(:text_are_you_sure)}, - :title => l(:button_delete) - ) if message.destroyable_by?(User.current) %> -
    -
    -
    - <%= textilizable message,:content,:attachments => message.attachments %> -
    - <%= link_to_attachments message, :author => false %> -
    - <%= authoring message.created_on, message.author %> -
    -
    +
    "> +
    <%= link_to image_tag(url_to_avatar(message.author), :width => '46',:height => '46'), user_path(message.author) %>
    +
    +
    + <%= link_to_user_header message.author,false,:class => 'c_blue fb fl mb10 ' %> + <%= format_time(message.created_on) %> +
    +

    <%= textilizable message,:content,:attachments => message.attachments %>

    + <%= link_to_attachments message, :author => false %> +
    +
    + <%= link_to( + l(:button_quote), + {:action => 'quote', :id => message}, + :remote => true, + :method => 'get', + :title => l(:button_quote)) if !@topic.locked? && authorize_for('messages', 'reply') %> + <%= link_to( + #image_tag('edit.png'), + l(:button_edit), + {:action => 'edit', :id => message}, + :title => l(:button_edit) + ) if message.course_editable_by?(User.current) %> + <%= link_to( + #image_tag('delete.png'), + l(:button_delete), + {:action => 'destroy', :id => message}, + :method => :post, + :data => {:confirm => l(:text_are_you_sure)}, + :title => l(:button_delete) + ) if message.course_destroyable_by?(User.current) %> +
    +
    +
    +
    +
    <% end %> - <% end %> <% if !@topic.locked? && authorize_for('messages', 'reply') %> <% end %> + <% html_title @topic.subject %> + - <% - if @project.project_type == Project::ProjectType_course - btn_tips = l(:label_news_notice) - label_tips = l(:label_course_news) - else - btn_tips = l(:label_news_new) - label_tips = l(:label_news) - end + btn_tips = l(:label_news_new) + label_tips = l(:label_news) %> -<% if @project.enabled_modules.where("name = 'news'").count > 0 && User.current.member_of?(@project) %> - <%= link_to(btn_tips, - new_project_news_path(@project), - :class => 'icon icon-add', - :onclick => 'showAndScrollTo("add-news", "news_title"); return false;') %> -<% end %> -<% if @project && User.current.allowed_to?(:manage_news, @project) %> - -<% end %>
    <% if @newss.empty? %>

    @@ -97,58 +23,25 @@

    <% else %> <% @newss.each do |news| %> +
    + <%= link_to image_tag(url_to_avatar(news.author),:width => 42,:height => 42), user_path(news.author), :class => "problem_pic fl" %> +
    + <%= link_to_user_header(news.author,false,{:class=> 'problem_name c_orange fl'}) if news.respond_to?(:author) %> + <%= l(:label_release_news) %>:<%= link_to h(news.title), news_path(news),:class => 'problem_tit fl fb c_dblue' %>
    +
    +

    <%= news.description %>
    <%= l(:label_create_time) %> :<%= format_time(news.created_on) %>

    + +
    +
    +
    - - - - - -
    - <%= link_to image_tag(url_to_avatar(news.author), :class => "avatar"), user_path(news.author) %> - - - <% if @project.project_type == 1 %> - - - - <% else %> - - - - <% end %> - - - - - - - -
    - <%= link_to_user(news.author) if news.respond_to?(:author) %> - <%= l(:label_project_notice) %> - <%= link_to h(news.title), news_path(news) %> - <%= delete_link news_path(news) if User.current.allowed_to?(:manage_news, @project) %> -
    - <%= link_to_user(news.author) if news.respond_to?(:author) %> - <%= l(:label_project_newshare) %> - <%= link_to h(news.title), news_path(news) %> - - <%= delete_link news_path(news) if User.current.allowed_to?(:manage_news, @project) %> - -
    - <%= textilizable(news, :description) %>
    <%= l :label_update_time %> - : <%= format_time(news.created_on) %><%= link_to l(:label_project_newother), news_path(news) %><%= "(#{l(:label_x_comments, :count => news.comments_count)})" if news.comments_count >= 0 %>
    -
    <% end %> <% end %>
    -
    - +
      + <%= pagination_links_full @news_pages, @news_count, :per_page_links => false, :remote => false, :flag => true%> +
    <% other_formats_links do |f| %> <%= f.link_to 'Atom', :url => {:project_id => @project, :key => User.current.rss_key} %> @@ -160,7 +53,6 @@ <% end %> <% html_title(l(:label_news_plural)) -%> -
    -
    -
    - <% unless @events_pages.empty? %> + +<% unless @events_pages.empty? %> <% @events_pages.each do |e| -%> - <% if e.forge_act_type == "ProjectCreateInfo"%> -
    - - - - - -
    - <%= image_tag(url_to_avatar(e.user), :class => "avatar") %> - - - - - - -
    - - <%= link_to_user(e.user)%> - - <%= l(:label_project_new) %> - <%= link_to e.project.name %> - ! -
    - <%= l :label_create_time %>: - <%= format_time(e.project.created_on) %> -
    -
    + + <% if e.forge_act_type == "ProjectCreateInfo"%> +
    + <%= image_tag(url_to_avatar(e.user), :width => "42", :height => "42") %> +
    + <%= link_to e.user, user_path(e.user), :class => "problem_name c_orange fl" %> <%= l(:label_project_new) %> : + <%= link_to e.project.name, :class => "problem_tit fl fb" %>
    +


    <%= l :label_create_time %> :<%= format_time(e.project.created_on) %>

    - <% end %> - <% next if e.forge_act_type.safe_constantize.nil? - act = e.forge_act; - next if act.nil? %> - <% if e.forge_act_type == "Issue" %> -
    -
    - <%= image_tag(url_to_avatar(act.author), :class => "avatar") %> -
    - -
    - <%= h(e.project) if @project.nil? || @project.id != e.project_id %> - - <%= link_to_user(act.author) %> - <%= l(:label_new_activity) %> - - <%= link_to format_activity_title("#{act.source_from}##{act.project_issues_index} (#{act.status}): #{act.tracker.name} #{act.subject}"), - {:controller => 'issues', - :action => 'show', - :id => act.id} %> -
    - <%= textAreailizable act,:description %> -
    -
    - <%= l :label_activity_time %> - :  <%= format_activity_day(act.created_on) %> <%= format_time(act.created_on, false) %> -
    - <%= link_to l(:label_find_all_comments), issue_path(act.id) %> <%= l(:label_comments_count, :count => act.journals.count) %> -
    -
    -
    -
    - <% elsif e.forge_act_type == "Journal" %> -
    -
    - <%= image_tag(url_to_avatar(e.user), :class => "avatar") %> -
    - -
    - <%= h(e.project) if @project.nil? || @project.id != e.project_id %> - - <%= link_to(h(e.user), user_path(e.user_id)) %> - <%= l(:label_new_activity) %> - - <%= link_to(l(:label_activity_project)+act.issue.project.name, project_path(act.issue.project.id)) %> - <%= link_to format_activity_title("#{act.issue.tracker} ##{act.issue.project_issues_index}: #{act.issue.subject}"), - {:controller => 'issues', :action => 'show', :id => act.issue.id, :anchor => "change-#{act.id}"} %> -
    - <%= textAreailizable act,:notes %> +
    -
    - <%= l :label_activity_time %> - :  <%= format_activity_day(act.created_on) %> <%= format_time(act.created_on, false) %> -
    -
    -
    - <% elsif e.forge_act_type == "Message" %> -
    -
    - <%= image_tag(url_to_avatar(e.user), :class => "avatar") %> + <% end %> + <% next if e.forge_act_type.safe_constantize.nil? + act = e.forge_act; + next if act.nil? %> + + <% if e.forge_act_type == "Issue" %> +
    + <%= image_tag(url_to_avatar(act.author), :width => "42", :height => "42") %> + -
    - <%= h(e.project) if @project.nil? || @project.id != e.project_id %> - - <%= link_to(h(e.user), user_path(e.user_id)) %> - <%= l(:label_new_activity) %> - - <%= link_to format_activity_title("#{act.board.name}: #{act.subject}"), - {:controller => 'messages', - :action => 'show', - :board_id => act.board_id}.merge(act.parent_id.nil? ? {:id => act.id} : {:id => act.parent_id, :r => act.id, :anchor => "message-#{act.id}"}) %> -
    - <%= textAreailizable act,:content %> +
    - -
    - <% elsif e.forge_act_type == "News" %> -
    -
    - <%= image_tag(url_to_avatar(e.user), :class => "avatar") %> -
    -
    - <%= h(e.project) if @project.nil? || @project.id != e.project_id %> - - <%= link_to(h(e.user), user_path(e.user_id)) %> - <%= l(:label_new_activity) %> - - <% unless act.nil? %> - <%= link_to format_activity_title("#{l(:label_news)}: #{act.title}"), {:controller => 'news', :action => 'show', :id => act.id} %> - <% end %> -
    - <%= textAreailizable act,:description %> -
    -
    - <%= l :label_activity_time %> - :  <%= format_activity_day(act.created_on) %> <%= format_time(act.created_on, false) %> -
    - - <%= link_to l(:label_find_all_comments), {:controller => 'news', :action => 'show', :id => act.id} %> - - - <%= l(:label_comments_count, :count => act.comments_count) %> - -
    -
    -
    -
    - <% elsif e.forge_act_type == "Document" %> -
    -
    - <%= image_tag(url_to_avatar(e.user), :class => "avatar") %> -
    -
    - <%= h(e.project) if @project.nil? || @project.id != e.project_id %> - - <%= link_to(h(e.user), user_path(e.user_id)) %> - <%= l(:label_new_activity) %> - - <%= link_to format_activity_title("#{l(:label_document)}: #{act.title}"), {:controller => 'documents', :action => 'show', :id => act.id} %> -
    - <%= textAreailizable act,:description %> -
    -
    - <%= l :label_activity_time %> - :  <%= format_activity_day(act.created_on) %> <%= format_time(act.created_on, false) %> + + <% elsif e.forge_act_type == "Message" %> + -
    - <% elsif e.forge_act_type == "Attachment" %> -
    -
    - <%= image_tag(url_to_avatar(e.user), :class => "avatar") %> -
    -
    - <%= h(e.project) if @project.nil? || @project.id != e.project_id %> - - <%= link_to(h(e.user), user_path(e.user_id)) %> - <%= l(:label_new_activity) %> - - <%= link_to format_activity_title("#{l(:label_attachment)}: #{act.filename}"), {:controller => 'attachments', :action => 'show', :id => act.id} %> -
    - <%= textAreailizable act,:description %> -
    -
    - <%= l :label_activity_time %> - :  <%= format_activity_day(act.created_on) %> <%= format_time(act.created_on, false) %> + <%= link_to format_activity_title("#{act.board.name}: #{act.subject}"), + {:controller => 'messages', + :action => 'show', + :board_id => act.board_id}.merge(act.parent_id.nil? ? {:id => act.id} : {:id => act.parent_id, :r => act.id, :anchor => "message-#{act.id}"}), + :class => "problem_tit fl fb " %> +
    +

    <%= textAreailizable act,:content %>
    + <%= l :label_create_time %> :<%= format_activity_day(act.created_on) %> <%= format_time(act.created_on, false) %>

    +
    +
    +
    + + <% elsif e.forge_act_type == "News" %> + + + <% elsif e.forge_act_type == "Document" %> + -
    - <% end %> + <%= link_to format_activity_title("#{l(:label_document)}: #{act.title}"), {:controller => 'documents', :action => 'show', :id => act.id}, :class => "problem_tit fl fb" %>
    +

    <%= textAreailizable act,:description %>
    + <%= l :label_create_time %> :<%= format_activity_day(act.created_on) %> <%= format_time(act.created_on, false) %>

    +
    +
    +
    + + <% elsif e.forge_act_type == "Attachment" %> +
    + <%= image_tag(url_to_avatar(e.user), :width => "42", :height => "42") %> +
    + + <%= h(e.project) if @project.nil? || @project.id != e.project_id %> + <%= link_to h(e.user), user_path(e.user_id), :class => "problem_name c_orange fl" %> <%= l(:label_new_activity) %> : + <%= link_to format_activity_title("#{l(:label_attachment)}: #{act.filename}"), {:controller => 'attachments', :action => 'show', :id => act.id}, :class => "problem_tit fl fb" %>
    +

    <%= textAreailizable act,:description %>
    + <%= l :label_create_time %> :<%= format_activity_day(act.created_on) %> <%= format_time(act.created_on, false) %>

    +
    +
    +
    + <% end %> <% end %> - <% end %> -
    -
    - +<% end %> <%= paginate @events_pages, :left => 3, :right => 3%> \ No newline at end of file diff --git a/app/views/tags/_project_tag.html.erb b/app/views/tags/_project_tag.html.erb index d10506d0d..ce80e36ab 100644 --- a/app/views/tags/_project_tag.html.erb +++ b/app/views/tags/_project_tag.html.erb @@ -1,30 +1,15 @@ -
    +
    <%= render :partial => "tags/tag_name",:locals => {:obj => obj,:non_list_all => false ,:object_flag => object_flag} %>
    -
    -<% if User.current.logged? %> - <%= toggle_link (l(:label_add_tag)), 'put-tag-form', {:focus => 'tags_name'} %> -<% end %> +<% if User.current.logged?%> + <%= l(:label_add_tag)%> + +<% end%> - -
    diff --git a/app/views/tags/_tag_name.html.erb b/app/views/tags/_tag_name.html.erb index 2ee4d3f20..df4260a4d 100644 --- a/app/views/tags/_tag_name.html.erb +++ b/app/views/tags/_tag_name.html.erb @@ -31,13 +31,13 @@ <% if @tags.size > 0 %> <% @tags.each do |tag| %> - + <% if object_flag == '2' %> - <%= link_to tag, :controller => "tags", :action => "index", :q => tag, :object_flag => object_flag, :obj_id => obj.id %> - <% if (ProjectInfo.find_by_project_id(obj.id)).try(:user_id) == User.current.id %> + <%= link_to tag, :controller => "tags", :action => "index", :q => tag, :object_flag => object_flag, :obj_id => obj.id, :class => 'pt5' %> + <% if (ProjectInfo.find_by_project_id(obj.id)).try(:user_id) == User.current.id %> <%= link_to 'x', :controller => "tags", :action => "remove_tag", :remote => true, :tag_name => tag, - :taggable_id => obj.id, :taggable_type => object_flag %> + :taggable_id => obj.id, :taggable_type => object_flag %> <% end %> <% else %> diff --git a/config/locales/projects/zh.yml b/config/locales/projects/zh.yml index 9f1a95201..9e41e4de5 100644 --- a/config/locales/projects/zh.yml +++ b/config/locales/projects/zh.yml @@ -12,6 +12,9 @@ zh: # label_project_new: "新建项目" label_join_project: "加入项目" + label_my_project: "我的项目" + + # @@ -20,13 +23,23 @@ zh: # 热门项目栏 # lable_hot_projects: 热门项目 + label_project_name: 项目名称: label_private: 私有 + label_public: 公开 label_project_member_amount: one: "%{count}人" other: "%{count}人" label_project_score_tips: 项目得分,综合考虑了项目的各项活动,反映了该项目的活跃程度 label_project_score: 项目评分 + # + # 项目托管平台主页 + # + # TopBar + # + label_project_hosting_platform: 项目托管平台 + + # # 项目托管平台主页 @@ -36,7 +49,7 @@ zh: label_project_id: "项目ID:" label_apply_project: "+申请加入" - label_button_following: "+关注" + label_button_following: "+添加关注" label_exit_project: 退出项目 label_apply_project_waiting: 已处理申请,请等待管理员审核 label_unapply_project: 取消申请 @@ -52,7 +65,7 @@ zh: project_module_boards: 讨论区 - project_module_boards_post: 发帖 + project_module_boards_post: 发帖新帖 project_module_files: 资源库 project_module_repository: 版本库 project_module_create_repository: 创建版本库 @@ -253,7 +266,8 @@ zh: # 项目得分 # label_projects_score: 项目综合得分 - + label_project_new_list: 条项目新闻 + label_issue_score: issue得分 label_issue_number: issue的数量 label_issue_journal_number: issue的留言数量 diff --git a/config/locales/zh.yml b/config/locales/zh.yml index f1dbe7d3c..fd0fa1d06 100644 --- a/config/locales/zh.yml +++ b/config/locales/zh.yml @@ -1225,6 +1225,7 @@ zh: label_author_name: 由%{author_name}发表了 label_post_on: 发表了 + label_post_on_issue: 发表了问题 diff --git a/public/images/115960_50.jpg b/public/images/115960_50.jpg deleted file mode 100644 index aa45853f50ae3b601f55d37667340c4c08dc8af0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1570 zcmbW!c{tR090%~<9Lx+OhH;O^*$62^B8@X-(zd41&SEnvtTjEOT;te{oUMvnO$bHE zk#bDMt{7)>jAIx!#(lJw80A>AqxRW-p8acg-=F9E{pb66KF{a%d<8>-aX^Y_=U@kb zzyJUe79bb_Yyh~ZC`?oY4uioE2)Gy$ErAplM=DCoNTOAguzOXMFc?)$eVnSgo(2Y^ zePqAhAp;{LBP`C8V1hrUZ)k+y9Rfli5J+*Pf`o(uUJav$|IZOL04O+s2k;P(Isit2 zASjT41z?4Hihw=^_%k3d1S%p5gCoSmg$>nG02l;;fT0i(5hzsH9U*)NpePY(H3KVA z87EJeIt`7#mYfIIu&#V1OX^+LG^7MXA;je56%>`U_TjYm>lht2K4M~e)aJOYo&5<1 z;+eC~F0SXkB70r9c*)zx_uDI11A~G?Lg~@hV`Agt6B1MIq^6~3WZq@uKX_PB_^7D3 zY7^S^B0Xxtmc;1w)PHoU;n@$XK0wqo0y!Mo|&DSUs!p+y2fAs@Nr{v*98I~ zpIO5DGwdHOl+Xo+LLpGtt_uVX79I!+Dxzi}DsANi^Q6hB~9wrKte#m&x4=<3t)Czi|0c@>zFb*{Q^LNtXxkt zMNd1lzNsqIv{%wyPT2BUgS=VSVY6rm(yy+r_=H^p|iraKGo9M>+y}%_^ zhwb-JW_mHrT#f@JIhG={9?TU+QMkW%8H*CavQ#|8T|q7b1JqamGQDTFRPYlrf9j#&7b&NbJjN zaY+Yr-;*tg<$T<&ypmdD_K2Rp&abN=)!=R0z_-RdugeSb7o48Pdaa`F@bjNMv-RwV zP92CDssbui_t_J4l7`<*-6v}o7d#nb`OkGcO$cwm%1tWA(grK$=kmM8#4HB)jIFT~ obuN(b{2l$$hH-c+HiN0h4yS$p8QV diff --git a/public/images/121944_50.jpg b/public/images/121944_50.jpg deleted file mode 100644 index 26e7db3e7cbb4c2ef68bf5691c9777ab1f36f22c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1306 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}m3zzW#yRE}5L}b^7=%`atX5{mZYdPuelR z^V|FKhpVd{j=0)B$=0)85tdVzrLlKws_L0HmB%)Jj6O1J_5N?JJGX2(dFvpvrQDN` zKf`>dAK5Q)!+T$J``qGbk&9UB=4#hTC23*(Oxv+H+2u zoIZBHV|&}*%4_6&6}_aFwVq(t@Hry0^J~?heK0^;f71w85xzO;i32!UeXE6SI=W+fSZ>eD1 zObMQ^>sG`npIUQe$(#JYo4Q(ar>w9(uGDqmz=5m(Y_^}9h--*7zRZPUXd{|)lj7XAoc%b_~y>V2-Y^AGg@XNWDE zr?lHDZ?4{AGo{X8K{xSym7*J8j}?Ahml@bS_1ua_DvM85`uDF7vlo+CbN_VTHIXiR z-Hlt4?XRuOyk~eNmqTd7T=(xk>}RauzI{^v{qo&2H><3R-7nQ#X1Vrf=$hhf=UwCl z?E+_KTGgNT|F>22`Rul{R8EsGE4$P3>I~1NdCVG0On&W)c^nh diff --git a/public/images/12_50.png b/public/images/12_50.png deleted file mode 100644 index af618c6974b46d373509303c71a488986df55b18..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5867 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 diff --git a/public/images/233683_50.jpg b/public/images/233683_50.jpg deleted file mode 100644 index 65ef363cc478f197001e112fcf158f01d4272b41..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1446 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 Pr4}(|XdALy1b65U&HTR# diff --git a/public/images/926055_50.jpg b/public/images/926055_50.jpg deleted file mode 100644 index 90e0e84745921f6ce5380b5459a2333435e2053e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1336 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}GhwA#)8)GxmFV=>AJKR;+)w&cd`$s%O>t zNorG9xy`AZX*+kzx)rb5GnAj%@SoeuYI@c*N3r#t`;3MZR(1KQm4EcVb>CRLV}hgb zj<5;;88}wH%Tt=D0>!UiLcu-d6wUu6?st{Sb`#E$1cko zv3HB1GwYK?o9?M6IREfiXw}bu9Qk;|#-*7D?@B$`Xtc88Y~;)%JQuz1b$#x4=uw|> zu)6$L$ms%y--~70s<^rrrCX@?A6k9liQsvry)~@%>Hf1<+nfp6`8=;$I7|s2N{km!S z%sZ@Uw}r|=-^N6?d=y?QRr2(-?CsZ2dOvJ=xx&&jcBYxwhd43Dlati6UKCDE@Mj56 z7Tr_yvUqWGGqY8-)#v#q1bjH8999hU=!q8yHAC$n<<&zqIRVZ@=g*zh_gXy;-MR!1cK8O}*BeKfKE# zw#_d{+1h$Hx~+ue%iCFxe14>CXV>w2xAoo+-EX(O7>-pc?Jz96@M>Z4`mNE&FY4=< zoX!Y76C~xX7$`3DfY0;zHrv-Hq&)3zsuY=d8OERP`j*T0gl%X4Ro;rVpDU}bKKjpa zIqhHR;fPmDPFt^7buU%)TuxES9J$)8x7&Xm|Ibj?rTy~aqti(hp61&l--OH0tx|9P z&+v5pr7rE$$MS`@wFj@e*#9f${<~S9bmRZIN#FnVDr3>k>=Lu3J5FgV+IjZ;|C<1R Ca5O0Z diff --git a/public/images/avatars/Project/0 b/public/images/avatars/Project/0 index 585b4bfc01363247d795bbb5eff31260611ddaee..19a3ac4c64eacb92c0b59d72c3146fa61919bc88 100644 GIT binary patch literal 17726 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 literal 11934 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 diff --git a/public/images/new_project/close.png b/public/images/new_project/close.png new file mode 100644 index 0000000000000000000000000000000000000000..301ba5e85e4af660ec48808a6b3c37aac00e2f78 GIT binary patch literal 1637 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 literal 0 HcmV?d00001 diff --git a/public/images/new_project/pic_ad.png b/public/images/new_project/pic_ad.png new file mode 100644 index 0000000000000000000000000000000000000000..d3ef56d2609f2572c446e7585f8b3d202c8edc4d GIT binary patch literal 521 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 literal 0 HcmV?d00001 diff --git a/public/images/new_project/pic_question.png b/public/images/new_project/pic_question.png new file mode 100644 index 0000000000000000000000000000000000000000..2e48138424494a54411bcc7d949a337eeccb0623 GIT binary patch literal 502 zcmV(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ-d`Uz>RCwBq(=ljMQ4|K?@4Yt8e4dWA7N&D9ZaQ0Y%FNYSMeFcrF z$YQIev-R`nB^jKGP#WR7#a7K~H?jJ@H;gWashfr9?f))HhMf>^Mim&544n`!irB_f zkDQ;5)hCA9bQgO;x=iEgH=gx>c!b;8T}aRzHBLr%XONs< srUW-|5l^t0#(!ZQ_izRevK9Xf0R94Ck#p1PV*mgE07*qoM6N<$f?KHF{Qv*} literal 0 HcmV?d00001 diff --git a/public/javascripts/course.js b/public/javascripts/course.js index 4ca2c3403..4d60b9226 100644 --- a/public/javascripts/course.js +++ b/public/javascripts/course.js @@ -1,372 +1,372 @@ -//配置课程信息 -function course_setting(id) -{ - //alert(id); - $('#tb_'+id).removeClass().addClass("hwork_hovertab"); - $('#tbc_0'+id).removeClass().addClass("dis"); - $('#tb_'+(3-id)).removeClass().addClass("hwork_normaltab"); - $('#tbc_0'+(3-id)).removeClass().addClass("undis"); -} - -/////////////////////////////////////////////////////////////// -//添加分班 -function add_group(url,course_id) { - var group_name = $('#group_name').val(); - $.get( - url, - { valid: "name", - value: group_name, - course_id: course_id }, - function (data) { - if (data.valid) { - $("#add_group_name").submit(); - } - else - { - alert(data.message); - } - } - ); -} -//修改分班:修改分班时得考虑什么都不改但是点击确定的情况 -function edit_group(id,url,course_id,group_id) -{ - var group_name = $('#'+id).val(); - $.get( - url, - { - valid: "name", - value: group_name, - course_id: course_id, - group_id: group_id - }, - function (data) { - if (data.valid) { - $("#update_group_"+group_id).submit(); - } - else - { - alert(data.message); - } - } - ); -} -/////////////////////////////////////////////////////////////// -///////////////////////////////////////////////////////////////新建课程相关 -//验证课程名称 -function regex_course_name() -{ - var name = $.trim($("#course_name").val()); - if(name.length == 0) - { - $("#course_name_notice").show(); - return false; - } - else - { - $("#course_name_notice").hide(); - return true; - } -} -//验证课程学时 -function regex_course_class_period() -{ - var class_period = $.trim($("#class_period").val()); - var regex = /^\d*$/; - if(class_period.length == 0) - { - $("#course_class_period_notice").html("学时总数不能为空"); - $("#course_class_period_notice").show(); - return false; - } - else if (regex.test(class_period)) { - $("#course_class_period_notice").html(""); - $("#course_class_period_notice").hide(); - return true; - } - else - { - $("#course_class_period_notice").html("学时总数必须为数字"); - $("#course_class_period_notice").show(); - return false; - } -} -//提交新建课程 -function submit_new_course() -{ - if(regex_course_name()&®ex_course_class_period()) - { - $("#new_course").submit(); - } -} - -function submit_edit_course(id) -{ - if(regex_course_name()&®ex_course_class_period()) - { - $("#edit_course_"+id).submit(); - } -} - -/////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////课程讨论区 -function regexSubject() -{ - var content = $.trim($("#message_subject").val()); - if(content.length ==0) - { - $("#subject_span").text("主题不能为空"); - $("#subject_span").css('color','#ff0000'); - return false; - } - else - { - $("#subject_span").text("填写正确"); - $("#subject_span").css('color','#008000'); - return true; - } - return false; -} -function regexContent() -{ - var content = $.trim($("#message_content").val()); - if(content.length ==0) - { - $("#message_content_span").text("描述不能为空"); - $("#message_content_span").css('color','#ff0000'); - return false; - } - else - { - $("#message_content_span").text("填写正确"); - $("#message_content_span").css('color','#008000'); - return true; - } - return false; -} -function submitCoursesBoard() -{ - if(regexSubject()&®exContent()){$("#message-form").submit();} -} -/////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////// 课程通知 -function regexTitle() -{ - var name = $("#news_title").val(); - if(name.length ==0) - { - $("#title_notice_span").text("标题不能为空"); - $("#title_notice_span").css('color','#ff0000'); - $("#title_notice_span").focus(); - return false; - } - else if(name.length <= 60) - { - $("#title_notice_span").text("填写正确"); - $("#title_notice_span").css('color','#008000'); - return true; - } - else - { - $("#title_notice_span").text("标题超过60个字符"); - $("#title_notice_span").css('color','#ff0000'); - $("#title_notice_span").focus(); - return false; - } -} - -function regexDescription() -{ - var name = $("#news_description").val(); - if(name.length ==0) - { - $("#description_notice_span").text("描述不能为空"); - $("#description_notice_span").css('color','#ff0000'); - $("#description_notice_span").focus(); - return false; - } - else - { - $("#description_notice_span").text("填写正确"); - $("#description_notice_span").css('color','#008000'); - return true; - } -} - -function submitNews() -{ - if(regexTitle() && regexDescription()) - { - $("#news-form").submit(); - } -} - -function submitFocus(obj) -{ - $(obj).focus(); -} -/////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////// -//验证搜索时输入名字 -function regexName(content) -{ - var name = $.trim($("#name").val()); - if(name.length == 0) - { - $("#project_name_span").text(content); - $("#project_name_span").css('color','#ff0000'); - $("#project_name_span").focus(); - return false; - } - else - { - $("#project_name_span").text(""); - return true; - } -} -//提交搜索 -function submitSerch(content) -{ - if(regexName(content)){$("#course_search_form").submit();} -} -//课程描述显示更多信息 -function show_more_msg() -{ - $("#course_description").toggleClass("course_description_none"); -} -//作业描述显示更多信息 -function news_show_more_des(id) -{ - $('#news_description_' + id).toggleClass("news_description_none"); -} -function bid_show_more_des(id) -{ - $("#bid_description_" + id).toggleClass("news_description_none"); -} - -//课程作业结束时间倒计时 -function show_bid_dead_line(year,month,day,divname) -{ - var now = new Date(); - var endDate = new Date(year, month-1, day); - var leftTime=endDate.getTime()-now.getTime(); - var leftsecond = parseInt(leftTime/1000); - var day1=Math.floor(leftsecond/(60*60*24)); - var hour=Math.floor((leftsecond-day1*24*60*60)/3600); - var minute=Math.floor((leftsecond-day1*24*60*60-hour*3600)/60); - var second=Math.floor(leftsecond-day1*24*60*60-hour*3600-minute*60); - $("#"+divname).html("
    " - + " 天" - + " 小时" - + " 分" - + " 秒" - + "
    " - + "

    作业提交还剩:

    "); -} -//验证新建作业的名字 -function regex_bid_name() -{ - var name = $.trim($("#bid_name").val()); - - if(name=="") - { - $("#bid_name_span").text("名称不能为空"); - return false; - } - else - { - $("#bid_name_span").text(""); - return true; - } -} - -//验证匿评数量 -function regex_evaluation_num() -{ - var evaluation_num = $.trim($("#bid_evaluation_num").val()); - var regex = /^\d+$/; - if($("#bid_open_anonymous_evaluation").attr("checked") == "checked") - { - if(evaluation_num=="") - { - $("#bid_evaluation_num_span").text("匿评分配数量不能为空"); - return false; - } - else if(regex.test(evaluation_num)) - { - if(evaluation_num > 0) - { - $("#bid_evaluation_num_span").text(""); - return true; - } - else - { - $("#bid_evaluation_num_span").text("匿评分配数量必须为大于0"); - return false; - } - } - else - { - $("#bid_evaluation_num_span").text("匿评分配数量只能为数字"); - return false; - } - } - else - { - return true; - } -} - -//点击是否开启匿评单选框效果 -$(function(){ - $("#bid_open_anonymous_evaluation").click(function(){ - if($("#bid_open_anonymous_evaluation").attr("checked") == "checked") - { - $("#bid_evaluation_num_li").slideDown(); - } - else - { - $("#bid_evaluation_num_li").slideUp(); - } - }); -}); - -//老师提交新建作业 -function submit_new_bid(id) -{ - if(regex_bid_name()&®ex_evaluation_num()) - { - $("#"+id).submit(); - } -} - -function show_window (id1,id2,top,left) { - $('#'+ id1).css('top',top); - $('#'+ id1).css('left',left); - $('#'+ id1).css('display','block'); - $('#' + id2).css('display','block'); -} - -function close_window(id1,id2){ - $('#' + id1).css('display','none'); - $('#' + id2).css('display','none'); -} - -//隐藏提示狂 -function hidden_atert_form(cur_page,cur_type) -{ - hideModal($("#popbox")); -} - -//当课程描述长度小于112px时,不显示更多按钮 -$(function(){ - if($("#course_description_content").height()>112) - { - $("#lg-foot").show(); - } -}); - -//将右侧的最小高度设置成左侧高度,美化界面 -$(document).ready(function () { - $("#RSide").css("min-height",$("#LSide").height()-30); +//配置课程信息 +function course_setting(id) +{ + //alert(id); + $('#tb_'+id).removeClass().addClass("hwork_hovertab"); + $('#tbc_0'+id).removeClass().addClass("dis"); + $('#tb_'+(3-id)).removeClass().addClass("hwork_normaltab"); + $('#tbc_0'+(3-id)).removeClass().addClass("undis"); +} + +/////////////////////////////////////////////////////////////// +//添加分班 +function add_group(url,course_id) { + var group_name = $('#group_name').val(); + $.get( + url, + { valid: "name", + value: group_name, + course_id: course_id }, + function (data) { + if (data.valid) { + $("#add_group_name").submit(); + } + else + { + alert(data.message); + } + } + ); +} +//修改分班:修改分班时得考虑什么都不改但是点击确定的情况 +function edit_group(id,url,course_id,group_id) +{ + var group_name = $('#'+id).val(); + $.get( + url, + { + valid: "name", + value: group_name, + course_id: course_id, + group_id: group_id + }, + function (data) { + if (data.valid) { + $("#update_group_"+group_id).submit(); + } + else + { + alert(data.message); + } + } + ); +} +/////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////新建课程相关 +//验证课程名称 +function regex_course_name() +{ + var name = $.trim($("#course_name").val()); + if(name.length == 0) + { + $("#course_name_notice").show(); + return false; + } + else + { + $("#course_name_notice").hide(); + return true; + } +} +//验证课程学时 +function regex_course_class_period() +{ + var class_period = $.trim($("#class_period").val()); + var regex = /^\d*$/; + if(class_period.length == 0) + { + $("#course_class_period_notice").html("学时总数不能为空"); + $("#course_class_period_notice").show(); + return false; + } + else if (regex.test(class_period)) { + $("#course_class_period_notice").html(""); + $("#course_class_period_notice").hide(); + return true; + } + else + { + $("#course_class_period_notice").html("学时总数必须为数字"); + $("#course_class_period_notice").show(); + return false; + } +} +//提交新建课程 +function submit_new_course() +{ + if(regex_course_name()&®ex_course_class_period()) + { + $("#new_course").submit(); + } +} + +function submit_edit_course(id) +{ + if(regex_course_name()&®ex_course_class_period()) + { + $("#edit_course_"+id).submit(); + } +} + +/////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////课程讨论区 +function regexSubject() +{ + var content = $.trim($("#message_subject").val()); + if(content.length ==0) + { + $("#subject_span").text("主题不能为空"); + $("#subject_span").css('color','#ff0000'); + return false; + } + else + { + $("#subject_span").text("填写正确"); + $("#subject_span").css('color','#008000'); + return true; + } + return false; +} +function regexContent() +{ + var content = $.trim($("#message_content").val()); + if(content.length ==0) + { + $("#message_content_span").text("描述不能为空"); + $("#message_content_span").css('color','#ff0000'); + return false; + } + else + { + $("#message_content_span").text("填写正确"); + $("#message_content_span").css('color','#008000'); + return true; + } + return false; +} +function submitCoursesBoard() +{ + if(regexSubject()&®exContent()){$("#message-form").submit();} +} +/////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////// 课程通知 +function regexTitle() +{ + var name = $("#news_title").val(); + if(name.length ==0) + { + $("#title_notice_span").text("标题不能为空"); + $("#title_notice_span").css('color','#ff0000'); + $("#title_notice_span").focus(); + return false; + } + else if(name.length <= 60) + { + $("#title_notice_span").text("填写正确"); + $("#title_notice_span").css('color','#008000'); + return true; + } + else + { + $("#title_notice_span").text("标题超过60个字符"); + $("#title_notice_span").css('color','#ff0000'); + $("#title_notice_span").focus(); + return false; + } +} + +function regexDescription() +{ + var name = $("#news_description").val(); + if(name.length ==0) + { + $("#description_notice_span").text("描述不能为空"); + $("#description_notice_span").css('color','#ff0000'); + $("#description_notice_span").focus(); + return false; + } + else + { + $("#description_notice_span").text("填写正确"); + $("#description_notice_span").css('color','#008000'); + return true; + } +} + +function submitNews() +{ + if(regexTitle() && regexDescription()) + { + $("#news-form").submit(); + } +} + +function submitFocus(obj) +{ + $(obj).focus(); +} +/////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////// +//验证搜索时输入名字 +function regexName(content) +{ + var name = $.trim($("#name").val()); + if(name.length == 0) + { + $("#project_name_span").text(content); + $("#project_name_span").css('color','#ff0000'); + $("#project_name_span").focus(); + return false; + } + else + { + $("#project_name_span").text(""); + return true; + } +} +//提交搜索 +function submitSerch(content) +{ + if(regexName(content)){$("#course_search_form").submit();} +} +//课程描述显示更多信息 +function show_more_msg() +{ + $("#course_description").toggleClass("course_description_none"); +} +//作业描述显示更多信息 +function news_show_more_des(id) +{ + $('#news_description_' + id).toggleClass("news_description_none"); +} +function bid_show_more_des(id) +{ + $("#bid_description_" + id).toggleClass("news_description_none"); +} + +//课程作业结束时间倒计时 +function show_bid_dead_line(year,month,day,divname) +{ + var now = new Date(); + var endDate = new Date(year, month-1, day); + var leftTime=endDate.getTime()-now.getTime(); + var leftsecond = parseInt(leftTime/1000); + var day1=Math.floor(leftsecond/(60*60*24)); + var hour=Math.floor((leftsecond-day1*24*60*60)/3600); + var minute=Math.floor((leftsecond-day1*24*60*60-hour*3600)/60); + var second=Math.floor(leftsecond-day1*24*60*60-hour*3600-minute*60); + $("#"+divname).html("
    " + + " 天" + + " 小时" + + " 分" + + " 秒" + + "
    " + + "

    作业提交还剩:

    "); +} +//验证新建作业的名字 +function regex_bid_name() +{ + var name = $.trim($("#bid_name").val()); + + if(name=="") + { + $("#bid_name_span").text("名称不能为空"); + return false; + } + else + { + $("#bid_name_span").text(""); + return true; + } +} + +//验证匿评数量 +function regex_evaluation_num() +{ + var evaluation_num = $.trim($("#bid_evaluation_num").val()); + var regex = /^\d+$/; + if($("#bid_open_anonymous_evaluation").attr("checked") == "checked") + { + if(evaluation_num=="") + { + $("#bid_evaluation_num_span").text("匿评分配数量不能为空"); + return false; + } + else if(regex.test(evaluation_num)) + { + if(evaluation_num > 0) + { + $("#bid_evaluation_num_span").text(""); + return true; + } + else + { + $("#bid_evaluation_num_span").text("匿评分配数量必须为大于0"); + return false; + } + } + else + { + $("#bid_evaluation_num_span").text("匿评分配数量只能为数字"); + return false; + } + } + else + { + return true; + } +} + +//点击是否开启匿评单选框效果 +$(function(){ + $("#bid_open_anonymous_evaluation").click(function(){ + if($("#bid_open_anonymous_evaluation").attr("checked") == "checked") + { + $("#bid_evaluation_num_li").slideDown(); + } + else + { + $("#bid_evaluation_num_li").slideUp(); + } + }); +}); + +//老师提交新建作业 +function submit_new_bid(id) +{ + if(regex_bid_name()&®ex_evaluation_num()) + { + $("#"+id).submit(); + } +} + +function show_window (id1,id2,top,left) { + $('#'+ id1).css('top',top); + $('#'+ id1).css('left',left); + $('#'+ id1).css('display','block'); + $('#' + id2).css('display','block'); +} + +function close_window(id1,id2){ + $('#' + id1).css('display','none'); + $('#' + id2).css('display','none'); +} + +//隐藏提示狂 +function hidden_atert_form(cur_page,cur_type) +{ + hideModal($("#popbox")); +} + +//当课程描述长度小于112px时,不显示更多按钮 +$(function(){ + if($("#course_description_content").height()>112) + { + $("#lg-foot").show(); + } +}); + +//将右侧的最小高度设置成左侧高度,美化界面 +$(document).ready(function () { + $("#RSide").css("min-height",$("#LSide").height()-30); }); \ No newline at end of file diff --git a/public/javascripts/project.js b/public/javascripts/project.js new file mode 100644 index 000000000..bdeb446d0 --- /dev/null +++ b/public/javascripts/project.js @@ -0,0 +1,129 @@ +//验证搜索时输入字 +function regexName() { + var name = $.trim($("#name").val()); + if (name.length == 0) { + $("#project_name_span").text("<%= l(:label_search_conditions_not_null) %>"); + $("#project_name_span").css('color', '#ff0000'); + $("#project_name_span").focus(); + return false; + } + else { + $("#project_name_span").text(""); + 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 show_more_msg() +{$("#course_description").toggleClass("course_description_none");} + +/////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////项目讨论区 +function regexSubject() +{ + var content = $.trim($("#message_subject").val()); + if(content.length ==0) + { + $("#subject_span").text("主题不能为空"); + $("#subject_span").css('color','#ff0000'); + return false; + } + else + { + $("#subject_span").text("填写正确"); + $("#subject_span").css('color','#008000'); + return true; + } + return false; +} +function regexContent() +{ + var content = $.trim($("#message_content").val()); + if(content.length ==0) + { + $("#message_content_span").text("描述不能为空"); + $("#message_content_span").css('color','#ff0000'); + return false; + } + else + { + $("#message_content_span").text("填写正确"); + $("#message_content_span").css('color','#008000'); + return true; + } + return false; +} + +// 项目编辑和提交 +function submitProjectsBoard() +{ + if(regexSubject()&®exContent()){$("#message-form").submit();} +} + +// 提交新闻 +function regexTitle() +{ + var name = $("#news_title").val(); + if(name.length ==0) + { + $("#title_notice_span").text("标题不能为空"); + $("#title_notice_span").css('color','#ff0000'); + $("#title_notice_span").focus(); + return false; + } + else if(name.length <= 60) + { + $("#title_notice_span").text("填写正确"); + $("#title_notice_span").css('color','#008000'); + return true; + } + else + { + $("#title_notice_span").text("标题超过60个字符"); + $("#title_notice_span").css('color','#ff0000'); + $("#title_notice_span").focus(); + return false; + } +} + +function regexDescription() +{ + var name = $("#news_description").val(); + if(name.length ==0) + { + $("#description_notice_span").text("描述不能为空"); + $("#description_notice_span").css('color','#ff0000'); + $("#description_notice_span").focus(); + return false; + } + else + { + $("#description_notice_span").text("填写正确"); + $("#description_notice_span").css('color','#008000'); + return true; + } +} + +function submitNews() +{ + if(regexTitle() && regexDescription()) + { + $("#news-form").submit(); + } +} + +function submitFocus(obj) +{ + $(obj).focus(); +} diff --git a/public/stylesheets/courses.css b/public/stylesheets/courses.css index 6053940d6..cc451a760 100644 --- a/public/stylesheets/courses.css +++ b/public/stylesheets/courses.css @@ -1,459 +1,459 @@ - -/*右侧内容--动态*/ -.project_r_h{ width:670px; height:40px; background:#eaeaea; margin-bottom:10px;} -.project_r_h02{ width:920px; height:40px; background:#eaeaea; margin-bottom:10px;} -.project_h2{ background:#64bdd9; color:#fff; height:33px; width:90px; text-align:center; font-weight:normal; padding-top:7px; font-size:16px;} -.project_r_box{ border:1px solid #e2e1e1; width:670px; margin-top:10px;} -.project_h3 { color:#646464; font-size:14px; padding:0 10px; border-bottom:1px solid #e2e1e1;} -.more{ float:right; font-size:12px; font-weight:normal; color:#a9a9a9; margin-top:3px;} -.more:hover{ color:#64bdd9;} -.project_box_ul{ padding:0 10px;} -.project_box_list{ padding:10px 0; border-bottom:1px dashed #e2e1e1; padding-left:30px; color:#6f6c6c;} -.img_problem{ background:url(../images/new_project/img_project.png) 0 -20px no-repeat;} -.img_talk{ background:url(../images/new_project/img_project.png) 0 -62px no-repeat;} -.img_ziyuan{ background:url(../images/new_project/img_project.png) 0 -115px no-repeat;} -.img_edition{ background:url(../images/new_project/img_project.png) 0 -167px no-repeat;} -a.project_name{ color:#058c42;} -a:hover.project_name{ color:#016f33;} -.project_txt{ color:#0781b4; width:445px; display:block; float:left; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;} -a.project_txt02{ color:#0781b4; width:618px; display:block; float:left; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;} -a:hover.project_txt{ color:#066e9a;} -.noline{ border-bottom:none;} -.news_description{max-height: 38px;overflow:hidden; } -.news_description_none{max-height: none;} -a.news_foot{ border:1px solid #e8eef2; color: #929598; text-align:center; width:600px; height:20px; padding-top:3px; cursor:pointer;} -a:hover.news_foot{ color:#787b7e; border:1px solid #d4d4d4;} - - -/*邮件邀请*/ -.box_main{ width:345px; margin:0 auto;} -.box_h3{ color:#15bccf; text-align:center; font-size:16px;} -.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;} -/*.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_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;}*/ -a.btn_free{ background:#ff5722; display:block; width:80px; text-align:center; color:#fff; height:26px; padding-top:3px; margin-bottom:10px;} -a:hover.btn_free{ background:#d63502;} -/*成员邀请*/ -.invi_search{ width:230px; margin:0 auto;} -.invi_search_input{ border:1px solid #15bccf; width:180px; height:24px; color:#9b9b9b; padding-left:5px; margin-bottom:10px;} -a.invi_search_btn{ background:#15bccf; color:#fff; text-align: center; width:40px; height:22px;border:1px solid #15bccf; padding-top:2px; cursor:pointer;} -a:hover.invi_search_btn{ background:#0da1b2; border:1px solid #0da1b2;} -/*问题跟踪*/ -.problem_top{ margin:10px 0 ;} -.problem_search_input{ border:1px solid #64bdd9; width:180px; height:24px; color:#9b9b9b; padding-left:5px; margin-bottom:10px;} -a.problem_search_btn{ background:#64bdd9; color:#fff; text-align: center; width:40px; height:22px;border:1px solid #64bdd9; padding-top:2px; cursor:pointer;} -a:hover.problem_search_btn{ background:#3da1c1; border:1px solid #3da1c1;} -a.problem_new_btn{ margin-left:10px; border:1px solid #ff7143; color:#ff7143; padding:1px 3px; font-size:12px; text-align:center; padding-top:2px;} -a:hover.problem_new_btn{ background:#ff7143; color:#fff;} -.problem_p{ color:#535252; margin-top:5px;} -.problem_p span{ color:#ff3e00;} -a.problem_pic{ display:block; width:42px; height:42px; padding:3px; border:1px solid #e3e3e3;} -a:hover.problem_pic{border:1px solid #64bdd9;} -.problem_txt{ width:610px; margin-left:10px; color:#777777;word-break: break-all;word-wrap: break-word;} -a.problem_name{ color:#ff5722;} -a:hover.problem_name{ color:#d33503;} -a.problem_tit{ color:#0781b4; width:430px; display:block; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;} -a:hover.problem_tit{ color:#09658c; } -.problem_main{ border-bottom:1px dashed #d4d4d4; padding-bottom:10px; margin-bottom:10px;} -/****翻页***/ -ul.wlist{ float:right; border-bottom:none; height:30px; margin-top:20px; } -ul.wlist li{float: left;} -ul.wlist li a{ border:1px solid #15bccf; padding: 1px 4px 1px 4px; margin-left:3px;} -ul.wlist li a:hover{ background:#15bccf; color:#fff; text-decoration:none;} -/*.wlist_select { background-color:#64bdd9; color:#fff; padding: 1px 5px 0px 5px; margin-left:3px;margin-top: -2px; border:1px solid #64bdd9;}*/ -.wlist_select a{background-color: #64bdd9;cursor: default;} -/****讨论区***/ -.talk_top{ margin:10px 0; font-size:14px; color:#4c4c4c;} -.talk_top span{ color:#ff7143;} -.talk_txt{ width:460px; margin-left:10px; color:#676868;} -.talk_up{ color:#f63c00;} -a.talk_pic{ display:block; width:32px; height:32px; padding:3px; border:1px solid #e3e3e3;} -a:hover.talk_pic{border:1px solid #64bdd9;} -a.talk_btn{ background:#64bdd9; width:50px; height:20px; color:#fff; text-align:center; margin-top:12px; padding-top:3px;} -a:hover.talk_btn{ background:#2a9dc1;} -/****讨论区内页***/ -.mt0{ margin-top:0px;} -.talk_info{ color:#7d7d7d; margin-left:60px; margin-top:10px;} -a.talk_edit{ color:#426e9a; margin-right:5px;} -a:hover.talk_edit{ color:#ff5722;} -.talk_reply { background:#eeeeee; padding:10px; margin-bottom:10px;} -.talkpage_text{ border:1px solid #64bdd9; width:600px; color:#7d7d7d; padding:5px; margin:10px 0 10px 50px; background:#fff;} -/****新建讨论***/ -.talk_new{ color:#4c4c4c;} -.talk_input{ border:1px solid #64bdd9; height:16px; width:585px; background:#fff; margin-bottom:10px; padding:5px;} -.talk_text{ border:1px solid #64bdd9; height:100px;width:585px; background:#fff; margin-left:5px; padding:5px; margin-bottom:10px;} -.talk_new ul li{ } -.sb{width:70px; height:26px; color:#606060; cursor:pointer;} -a.blue_btn{ background:#64bdd9; display:block; font-size:14px;color:#fff; font-weight:normal; text-align:center; margin-left:10px; margin-bottom:10px; padding:2px 10px;} -a:hover.blue_btn{ background:#329cbd;} -a.grey_btn{ background:#d9d9d9; color:#656565;font-size:14px; font-weight:normal; text-align:center; margin-left:10px; margin-bottom:10px; padding:2px 10px;} -a:hover.grey_btn{ background:#717171; color:#fff;} -/****资源库***/ -.f_l{ float:left;} -.f_r{ float:right;} -.resource a{ text-align:center;} -.b_lblue{ background:#64bdd9;} -.b_dblue{ background:#55a1b9; cursor:pointer;} -.f_b{ font-weight: bold;} -.c_blue{ color:#64bdd9;} -.c_grey{ color:#999999;} -.c_grey02{ color:#666666;} -.f_14{ font-size:14px;} -.c_dblue{ color:#3e6d8e;} -.w90{width:90px;} -.w40{width:40px;} -.ml10{margin-left:10px;} -.resource{ width:670px;} -.re_top{width:660px; height:40px; background:#eaeaea; padding:5px;} -.re_top input{ float:left;} -.re_search{ margin-top:7px; margin-left:5px;} -.re_schbox{ width:240px; height:24px; border:1px solid #64bdd9; color:#666666;} -.re_schbtn{ width:60px; height:26px; color:#fff; margin-right:5px; border:none; margin-left:0px;padding-left: 0px;} -a.re_fabu { display:block; width:90px; height:30px; font-size:14px; color:#fff; text-align:center; padding-top:10px; } -a:hover.re_fabu{background:#55a1b9;} -.re_con{ margin:5px; width:665px;} -.re_con_top{color:#494949; } -.re_con_top span{ color:#999999; font-weight:bold;} -a.re_select{ display:block; height:20px; border:1px solid #ff9900; color:#ff9900; margin-left:10px; padding:2px 5px 1px;} -a:hover.re_select{ background:#ff9900; color:#fff; text-decoration:none;} -a.re_open{display:block; width:46px; height:19px; border:1px solid #64bdd9; color:#64bdd9; margin-left:10px;padding-top:3px;} -a:hover.re_open{ background:#64bdd9; color:#fff; text-decoration:none;} -a.re_de{ color:#6883b6; margin-left:15px;} -.re_con_box{ border-bottom:1px dashed #dadada; padding-bottom:10px; margin-bottom:10px;} -/****资源库***/ -/*.setting{ background:url(../images/setting.jpg) 0 0 no-repeat; width:670px; height:443px;}*/ - -/* 作业列表 */ -.ttl{ } -.ctt{height:820px;clear:both; } -#contentbox{float:right;clear:both;width:670px;/*滑动门的宽度*/} -/* TAB 切换效果 */ -.tb_{ background-color: #eaeaea; height:40px; } -.tb_ ul{height:40px; } -.tb_ li{float:left;height:34px;width: 90px;cursor:pointer; font-size:14px; padding-top:6px; text-align:center; } -a.tb_all{ margin-left:212px; font-size:12px; display:block; height:23px; padding-top:4px; width:90px; color:#7a7a7a; border:1px solid #cbcbcb; background:#fff; text-align: center;} -a:hover.tb_all{ background:#eaeaea; text-decoration:none;} - -.work_tb_{ background-color: #eaeaea; height:40px; } -a.work_edit{color: #64bdd9; display:block; padding:1px 5px; border:1px solid #64bdd9;} -a:hover.work_edit{color: #fff; background: #64bdd9;} - -/* 控制显示与隐藏css类 */ -.normaltab { color:#64bdd9 ; } -.hovertab { color:#fff; background-color:#64bdd9; } -.normaltab a { color:#64bdd9 ; } -.hovertab a{color:#fff; background-color:#64bdd9; text-decoration:none;} -.dis{display:block; } -.undis{display:none;} -.c_red{ color:#de030d;} -.f_12{ font-size:12px;} -.w_40{ width:40px; border:1px solid red;} -.dis_ul{ height:70px; border-bottom:1px dashed #d4d4d4; margin-bottom:10px;} -.dis_ul li{ float:left;} -.dis_ul li a{ display:block; color:#15bccf; } -.pic_head{ width:44px; padding:0px 15px 0 0px;} -.pic_head a{ text-align:center; width:44px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;} -.pic_head img{ border:1px solid #e3e3e3; width:40px; height:40px; padding:1px;} -.pic_head img:hover{border:1px solid #15bccf;} -.dis ul li.wname a{ width:260px; font-size:14px; color:#595959; padding:20px 0 0 0px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;} -.dis ul li.wdown a{padding-top:22px; color:#3d7ec2; margin-right:35px;} -.wscore{ padding-top:22px; color:#888888; width:96px;} -.dis ul li.wping{margin-left:12px; } -.dis ul li.wping a{ margin-top:18px; margin-bottom:3px; width:43px; height:22px; background:#15bccf; color:#fff; text-align:center; padding-top:4px;} -.dis ul li.wping a:hover{ background-color:#03a1b3;} -.code_list{ float:right; font-size:12px; color:#484848; padding:5px 3px; border-bottom:2px solid #15bccf; width:665px; margin-bottom:10px;} -.code_list a{ color:#787878;} -.fr{ float:right;} -.c_grey{ color:#999; font-weight:normal;} -.dis ul li.wname02 a{ width:200px; font-size:14px; color:#595959; padding:20px 0 0 15px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;} -.dis ul li.wmine{ margin:12px 0 0 10px;} -.dis ul li.wmine a{ color:#3d7ec2; text-align:center; width:50px; font-weight: bold;} -.wzan{ margin:15px 0 0 25px; width:32px; height:44px;} -.wzan a{ display: block;} -a.wzan_img{background:url(images/pic_zan.png) 0 -59px no-repeat; display:block; height:31px; width:30px; color:#fff;} -a.wzan_visited{background:url(images/pic_zan.png) 0 0 no-repeat;} -.msg_box{ width:670px; height:173px; border-bottom:1px dashed #CCC; padding-top:10px;} -.msg_box h4{ } -.msg_box textarea{width:658px;height:90px;padding:5px;overflow:hidden;background-color: #ffffff; border:1px solid #CCC; margin:5px 0px; color:#666; font-size:12px; } -/*.msg_box a{ float:right; display:block; width:50px; height:22px; background:#15bccf; padding-top:3px; color:#fff; margin-left:10px; text-align:center; margin-top:5px; }*/ -/*.msg_box a:hover{ background-color:#03a1b3; text-decoration:none;}*/ - - -/****评分弹框****/ -/*#popbox{width:488px;height:550px;position:absolute;z-index:100;left:50%;top:40%;margin:-215px 0 0 -300px; background:#fff; -moz-border-radius:5px; -webkit-border-radius:5px; border-radius:5px; box-shadow:0px 0px 8px #194a81; padding:5px; overflow:auto; }*/ -.alert .close{width:26px;height:26px;overflow:hidden;position:absolute;top:-10px;right:-502px;background:url(images/close.png) no-repeat;cursor:pointer;} -.alert .C{width:476px;height:296px;position:absolute;left:5px;top:5px; } -.ping_con{ margin:5px; border-bottom:1px dashed #CCC; padding-bottom:5px;} -.ping_con ul{ height:30px;} -.ping_con ul li{ float:left; color:#656767; font-weight:bold;} -.ping_con h2{ font-size:14px; color:#444443; margin-bottom:10px; float:left;} -.ping_con p{ color:#777777; font-size:12px; border-bottom:1px dashed #CCC; padding-bottom:5px;} -.ping_con p span a{ color:#777777;} -.ping_star{ width:160px; color:#333; font-weight:bold; margin-bottom:5px;} -.ping_star span a{ float:right; width:20px; height:20px; background:url(images/star.png) -2px 0 no-repeat; margin-right:3px;} -.ping_star span a:hover{background:url(images/star.png) -24px 0 no-repeat;} -.ping_con textarea{ width:455px; height:76px; border:1px solid #15bccf; margin-bottom:5px; color:#666; font-size:12px;} -a.ping_sub{ float:right; height:22px; width:60px; background:#15bccf; color:#fff; text-align:center;} -a:hover.ping_sub{ background:#14a8b9;} -.recall{ border-top:1px solid #CCC; padding:5px 0;} -.recall_head{ float:left;} -.recall_head a{ display:block; width:30px; height:30px; border:1px solid #CCC; padding:1px;} -.recall_head a:hover{border:1px solid #15bccf;} -.recall_con{ float:left;color:#777777; width:520px; margin-left:10px;word-break: break-all;word-wrap: break-word; } -.recall_con a{ color:#15bccf; } -.ping_list{ margin-top:15px;} -.ping_ttl{height:18px;} -.ping_ctt{height:auto;padding:6px;clear:both;} -.ping_tb_{ border-bottom:3px solid #e4e4e4; text-align:center;} -.ping_tb_ ul{height:24px;} -.ping_tb_ li{float:left;height: 24px;width: auto; padding:0 10px;cursor:pointer;} -.ping_normaltab { color:#15bccf ; border-bottom:3px solid #e4e4e4;} -.ping_hovertab { color:#656767; font-weight:bold; border-bottom:3px solid #15bccf; } -.ping_dis{display:block; } -.ping_undis{display:none;} -.ping_C{border-bottom:1px dashed #CCC; padding:10px 0 0px;} -.ping_dispic a{ display:block; height:46px; width:46px; border:1px solid #CCC; padding:1px; float:left;} -.ping_dispic a:hover{border:1px solid #15bccf;} -.ping_discon{ float:left; width:610px; margin-left:10px; } -/*.ping_distop span{ float:left;}*/ -.ping_distop p{ color:#5f5f5f;word-break: break-all;word-wrap: break-word;} -.ping_disfoot a{ float:right; color: #6883b6; margin-left:5px; margin-bottom:5px;} -/*.ping_distop span a{ float:right; width:20px; height:20px; background:url(images/star.png) -24px 0 no-repeat; margin-right:3px;}*/ - -/* 创建作品 work */ -.Newwork{ width:668px; height:418px;} -.N_top{ float:right; margin-left:390px; } -.N_con{ color:#484747; font-weight:bold; width:660px; margin-top:10px; } -.N_con p{ } -.w430{ width:470px;} -.w557{ width:557px;} -.w350{ width:350px;} -.w620{ width:480px; height:160px; border:1px solid #CCC;} -.bo{height:26px; border:1px solid #CCC; padding-left:5px; background:#fff;width:470px; } -.bo02{height:26px; border:1px solid #CCC; padding-left:5px; background:#fff;width:480px; margin-left:2px; color: #999; } -.hwork_txt{ width:560px; padding-left:5px; background:#fff;} -a.tijiao{ height:28px; display:block; width:80px; color:#fff; background:#15bccf; text-align:center; padding-top:4px; float:left; margin-right:10px;} -a:hover.tijiao{ background:#0f99a9;} -.members_left{ float:left; width:410px; margin-right:20px; text-align:center;} -.members_left{} -.members_left ul li{ height:30px; border-bottom:1px solid #E4E4E4; width:410px; padding-top:10px; } -.members_left ul li a{ float:left; text-align:center;} -.members_left ul li span{ float:left; text-align:center; color:#484747;} - -.w150{ text-align:center; width:150px;} -.f_b{ font-weight: bold;} -.members_right label{ margin-left:15px;} -.N_search{ height:20px; border:1px solid #999;} -/* 创建作品 homework */ -.hwork_new{ color:#4c4c4c;} -.c_red{ color:#F00;} -.hwork_input{ border:1px solid #64bdd9; height:22px; width:555px; background:#fff; margin-bottom:10px; padding:5px;} -.hwork_input02{ border:1px solid #64bdd9; height:15px; width:120px; background:#fff; margin-bottom:10px; padding:5px;} -.hwork_text{ border:1px solid #64bdd9; height:100px;width:555px; background:#fff; margin-left:5px; padding:5px; margin-bottom:10px;} -.hwork_new ul li{ } -.ml21{ margin-left:21px;} -.ml9{ margin-left:9px;} -.hwork_ttl{height:24px;} -.hwork_ctt{height:auto; padding-left:10px;clear:both;} -.hwork_tb_{ border-bottom:3px solid #e4e4e4; text-align:center;} -.hwork_tb_ ul{height:24px;} -.hwork_tb_ li{float:left;height: 24px;width: auto; padding:0 10px;cursor:pointer;} -.hwork_normaltab { color:#15bccf ; border-bottom:3px solid #e4e4e4; } -.hwork_hovertab { color:#656767; font-weight:bold; border-bottom:3px solid #15bccf; } -.hwork_dis{display:block; } -.hwork_undis{display:none;} -.project_none{ display:none;} -.about_project{ overflow:hidden;display:none;} -/*成员搜索*/ -.members_right{ float:left; margin-left:8px;} -.member_search{ width:220px; margin:0 auto;} -.member_search_input{ border:1px solid #15bccf; background:#fff; width:170px; height:24px; color:#9b9b9b; padding-left:5px; margin-bottom:10px;} -.member_search_btn{ background:#15bccf; color:#fff; text-align: center; width:40px; height:22px;border:1px solid #15bccf; padding-top:2px; cursor:pointer;} -.member_search_btn:hover{ background:#0da1b2; border:1px solid #0da1b2;} -a.member_btn{ padding: 3px 5px; background:#15bccf; color:#fff;} -a:hover.member_btn{ background:#329cbd;} -.hol{display: none;} - -/* 新建项目 */ -.pro_new{ } -.pro_new ul li{ margin-bottom:5px; width:auto; padding:2px 5px;} - -/* 匿名评分弹框 */ -/*.popbox02{width:480px;height:200px;position:absolute;z-index:100;left:50%;top:50%;margin:-215px 0 0 -300px; background:#fff; -moz-border-radius:5px; -webkit-border-radius:5px; border-radius:5px; box-shadow:0px 0px 8px #194a81; overflow:auto;}*/ -.alert .close02{width:26px;height:26px;overflow:hidden;position:absolute;top:-10px;right:-490px;background:url(images/close.png) no-repeat;cursor:pointer;} -.ni_con { width:425px; margin:25px 30px;} -.ni_con h2{ display:block; height:40px; width:188px; margin:0 auto;} -.ni_con p{ color:#808181;} -.ni_con a:hover{ text-decoration:none;} -a.xls{ margin-left:5px; color:#136b3b;} -/* 学生列表*/ -.st_list{ width:670px;} -.st_search{ } -.st_search span{ font-size:14px; font-weight:bold; color:#606060; margin-right:35px;} -.st_search_input{ border:1px solid #1c9ec7; background:#fff; height:20px; color:#c4c4c4; width:200px; padding-left:5px; margin-bottom:5px;} -.st_search a{ background:#1c9ec7; color:#fff;border:1px solid #1c9ec7; text-align:center; display:block; width:60px; height:20px; float:left; font-size:12px; } -.st_search a:hover{ background:#048fbb; text-decoration:none;} -.classbox{ border:1px solid #f8df8c; background:#fffce6; color:#0d90c3; padding:0 3px; float:left; margin-left:15px;} -.st_addclass{ margin-top:5px;} -.st_addclass ul li,.st_addclass a,.st_addclass img{ float:left;} -.st_addclass img{ margin-top:3px;} -.st_addclass a{ color:#0d90c3;} -.st_box{ margin-top:10px; border-top:1px solid #CCC; padding-top:10px;} -.st_box ul li{ float:left;} -.st_box_top a{ font-weight:bold; color:#7a7a7a; float:left; margin-bottom:5px;} -.st_box_top a:hover{ color:#1c9ec7;} -a.st_up{ display: block; width:8px; float:left; height:13px; background:url(../images/pic_up.png) 0 0 no-repeat; margin-top:5px; margin-left:3px;} -a.st_down{ display: block; width:8px; float:left; height:13px; background:url(../images/pic_up.png) 0 -22px no-repeat; margin-top:5px; margin-left:3px;} -a.st_img { display:block;width:32px; height:32px; border:1px solid #CCC; padding:1px;} -a:hover.st_img { border:1px solid #1c9ec7; } -.st_boxlist{ border-bottom:1px dashed #CCC; height:43px; margin-bottom:10px; } -.st_boxlist a{ float:left;} -.st_boxlist ul{ float:left; width:200px; margin-left:10px;} -.st_boxlist ul li a{ color:#5d5d5d;} -.st_boxlist ul li a span{ color:#1c9ec7;} -.st_boxlist ul li a:hover span{ color:#ff8e15;} -.ml50{ margin-left:50px;} -.ml358{ margin-left:358px;} -.ml258{ margin-left:254px;} -.ml65{ margin-left:65px;} -a:hover.st_add{ color:#ff8e15;} -.classbox_on{ border:1px solid #f8df8c; background:#f6f098; padding:0 3px; float:left; margin-left:15px;} -.classbox_on a{ color:#716cad;} -/* 创建课程courses*/ -.courses_input{ border:1px solid #64bdd9; height:16px; width:532px; background:#fff; margin-bottom:10px; padding:5px;} -.courses_input_w{ width:300px;} -.courses_text{ border:1px solid #64bdd9; height:100px;width:532px; background:#fff; margin-left:5px; padding:5px; margin-bottom:10px;} -.upimg{ border:1px solid #eaeaea; display:block; width:60px; height:60px; padding:1px;} -.upimg:hover{ border:1px solid #64bdd9; } -.upbtn{ margin:40px 0 0 15px; display:block; padding:2px 5px; border:1px solid #eaeaea;} -.upbtn:hover{border:1px solid #64bdd9; color:#64bdd9;cursor: pointer;} -.upload_file{margin-left: -60px;margin-top: 40px;width: 50px;position: absolute;height: 24px;opacity: 0;cursor: pointer} -/* 功能倒计时*/ -.w_img{ float:left; margin:10px 10px 15px 0px;} -.w_p{ float:left; color:#15bccf; font-size:16px; font-weight:bold; margin-top:70px; } -/* 新建项目弹框*/ -.table_left{ width:90px; text-align:right; color:#4c4c4c; font-weight:bold;} -/*上传资源弹出框样式*/ -.popbox_polls{width:300px;height:100px;position:fixed !important;z-index:100;left:50%;top:50%;margin:-100px 0 0 -150px; background:#fff; -moz-border-radius:5px; -webkit-border-radius:5px; border-radius:5px; box-shadow:0px 0px 8px #194a81; overflow:auto;} -.upload_con h2{ display:block; background:#eaeaea; font-size:14px; color:#343333; height:31px; width: auto; margin-top:25px; padding-left:20px; padding-top:5px;} -.upload_box{ width:430px; margin:15px auto;} - -a:hover.link_file{ background:url(../images/pic_file.png) 0 -25px no-repeat; color:#3ca5c6;} -.r_txt_tit{width:500px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;color:#15bccf; float:left; color:#09658c; font-size:14px;} - -blockquote {background: #eeeeee;padding: 10px;margin-bottom: 10px;} -.respond-form{display: none;margin: auto;clear: both;} - -.reply_btn{ cursor:pointer; -moz-border-radius:3px; -webkit-border-radius:3px; border:1px solid #ccc; color:#999; border-radius:3px; padding:2px 10px; margin-bottom:10px;display: block;margin-left: 470px;} -.reply_btn:hover{ background:#999; color:#fff; } - -#attachments_fields input.description {margin-left: 4px;width: 100px;} -#attachments_fields span.ispublic-label {display: inline-block;width: 30px;margin-left: 10px;} -a.remove-upload {background: url(../images/delete.png) no-repeat 1px 50%;width: 1px;display: inline-block;padding-left: 16px;} -#attachments_fields input.filename {border: 0;height: 1.8em;width: 150px;color: #555;background-color: inherit;background: url(../images/attachment.png) no-repeat 1px 50%;padding-left: 18px;padding-top: 2px;} -span.add_attachment {font-size: 80%;line-height: 2.5em;} -#attachments_fields span {display: block;white-space: nowrap;} -.file_selector{position: relative;opacity: 0;filter: alpha(opacity:0);} -#attachments_fields .ajax-waiting input.filename {background:url(../images/hourglass.png) no-repeat 0px 50%;} -#attachments_fields .ajax-loading input.filename {background:url(../images/loading.gif) no-repeat 0px 50%;} -.reply_btn{ cursor:pointer; -moz-border-radius:3px; -webkit-border-radius:3px; border:1px solid #ccc; color:#999; border-radius:3px; padding:2px 10px; margin-bottom:10px;display: block;margin-left: 470px;} -.reply_btn:hover{ background:#999; color:#fff; } - -#attachments_fields div.ui-progressbar { width: 100px; height:14px; margin: 2px 0 -5px 8px; display: inline-block; } -.ui-widget { - font-family: Verdana, sans-serif; - font-size: 1.1em; -} -.ui-widget-content { - border: 1px solid #ddd; - color: #333; -} -.ui-progressbar-value{margin:-1px;height:100%} -.ui-widget-header{border:1px solid #628db6;background:#759fcf url(jquery/images/ui-bg_gloss-wave_35_759fcf_500x100.png) 50% 50% repeat-x;color:#fff;font-weight:bold} -.ui-corner-left,.ui-corner-tl{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;-khtml-border-top-left-radius:4px;border-top-left-radius:4px} -.link_file{ background:url(../images/pic_file.png) 0 7px no-repeat !important; padding-left:20px !important; color:#64bdd9 !important; } -a:hover.link_file_board{ background:url(../images/pic_file.png) 0 -25px no-repeat; color:#3ca5c6;} -a.link_file_board{ background:url(../images/pic_file.png) 0 3px no-repeat !important; padding-left:20px !important; color:#64bdd9 !important; } - -#course_member_pagination_links{height: auto;float: left;} -#course_member_pagination_links li{margin-bottom: 5px;} - -/* colorbox -*******************************************************************************/ -/* - Colorbox Core Style: - The following CSS is consistent between example themes and should not be altered. -*/ -#colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:9999; overflow:hidden;} -#cboxWrapper {max-width:none;} -#cboxOverlay{position:fixed; width:100%; height:100%;} -#cboxMiddleLeft, #cboxBottomLeft{clear:left;} -#cboxContent{position:relative;} -#cboxLoadedContent{overflow:auto; -webkit-overflow-scrolling: touch;} -#cboxTitle{margin:0;} -#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%; height:100%;} -#cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;} -.cboxPhoto{float:left; margin:auto; border:0; display:block; max-width:none; -ms-interpolation-mode:bicubic;} -.cboxIframe{width:100%; height:100%; display:block; border:0; padding:0; margin:0;} -#colorbox, #cboxContent, #cboxLoadedContent{box-sizing:content-box; -moz-box-sizing:content-box; -webkit-box-sizing:content-box;} - -/* - User Style: - Change the following styles to modify the appearance of Colorbox. They are - ordered & tabbed in a way that represents the nesting of the generated HTML. -*/ -#cboxOverlay{background:#fff;} -#colorbox{outline:0;} -#cboxTopLeft{width:25px; height:25px; background:url(../images/colorbox/border1.png) no-repeat 0 0;} -#cboxTopCenter{height:25px; background:url(../images/colorbox/border1.png) repeat-x 0 -50px;} -#cboxTopRight{width:25px; height:25px; background:url(../images/colorbox/border1.png) no-repeat -25px 0;} -#cboxBottomLeft{width:25px; height:25px; background:url(../images/colorbox/border1.png) no-repeat 0 -25px;} -#cboxBottomCenter{height:25px; background:url(../images/colorbox/border1.png) repeat-x 0 -75px;} -#cboxBottomRight{width:25px; height:25px; background:url(../images/colorbox/border1.png) no-repeat -25px -25px;} -#cboxMiddleLeft{width:25px; background:url(../images/colorbox/border2.png) repeat-y 0 0;} -#cboxMiddleRight{width:25px; background:url(../images/colorbox/border2.png) repeat-y -25px 0;} -#cboxContent{background:#fff; overflow:hidden;} -.cboxIframe{background:#fff;} -#cboxError{padding:50px; border:1px solid #ccc;} -#cboxLoadedContent{margin-bottom:20px;} -#cboxTitle{position:absolute; bottom:0px; left:0; text-align:center; width:100%; color:#999;} -#cboxCurrent{position:absolute; bottom:0px; left:100px; color:#999;} -#cboxLoadingOverlay{background:#fff url(../images/colorbox/loading.gif) no-repeat 5px 5px;} - -/* these elements are buttons, and may need to have additional styles reset to avoid unwanted base styles */ -#cboxPrevious, #cboxNext, #cboxSlideshow, #cboxClose {border:0; padding:0; margin:0; overflow:visible; width:auto; background:none; } - -/* avoid outlines on :active (mouseclick), but preserve outlines on :focus (tabbed navigating) */ -#cboxPrevious:active, #cboxNext:active, #cboxSlideshow:active, #cboxClose:active {outline:0;} - -#cboxSlideshow{position:absolute; bottom:0px; right:42px; color:#444;} -#cboxPrevious{position:absolute; bottom:0px; left:0; color:#444;} -#cboxNext{position:absolute; bottom:0px; left:63px; color:#444;} -#cboxClose{position:absolute; bottom:0; right:0; display:block; color:#444;} - -/* - The following fixes a problem where IE7 and IE8 replace a PNG's alpha transparency with a black fill - when an alpha filter (opacity change) is set on the element or ancestor element. This style is not applied to or needed in IE9. - See: http://jacklmoore.com/notes/ie-transparency-problems/ -*/ -.cboxIE #cboxTopLeft, -.cboxIE #cboxTopCenter, -.cboxIE #cboxTopRight, -.cboxIE #cboxBottomLeft, -.cboxIE #cboxBottomCenter, -.cboxIE #cboxBottomRight, -.cboxIE #cboxMiddleLeft, -.cboxIE #cboxMiddleRight { - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#00FFFFFF,endColorstr=#00FFFFFF); -} - - - - - - - - + +/*右侧内容--动态*/ +.project_r_h{ width:670px; height:40px; background:#eaeaea; margin-bottom:10px;} +.project_r_h02{ width:920px; height:40px; background:#eaeaea; margin-bottom:10px;} +.project_h2{ background:#64bdd9; color:#fff; height:33px; width:90px; text-align:center; font-weight:normal; padding-top:7px; font-size:16px;} +.project_r_box{ border:1px solid #e2e1e1; width:670px; margin-top:10px;} +.project_h3 { color:#646464; font-size:14px; padding:0 10px; border-bottom:1px solid #e2e1e1;} +.more{ float:right; font-size:12px; font-weight:normal; color:#a9a9a9; margin-top:3px;} +.more:hover{ color:#64bdd9;} +.project_box_ul{ padding:0 10px;} +.project_box_list{ padding:10px 0; border-bottom:1px dashed #e2e1e1; padding-left:30px; color:#6f6c6c;} +.img_problem{ background:url(../images/new_project/img_project.png) 0 -20px no-repeat;} +.img_talk{ background:url(../images/new_project/img_project.png) 0 -62px no-repeat;} +.img_ziyuan{ background:url(../images/new_project/img_project.png) 0 -115px no-repeat;} +.img_edition{ background:url(../images/new_project/img_project.png) 0 -167px no-repeat;} +a.project_name{ color:#058c42;} +a:hover.project_name{ color:#016f33;} +.project_txt{ color:#0781b4; width:445px; display:block; float:left; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;} +a.project_txt02{ color:#0781b4; width:618px; display:block; float:left; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;} +a:hover.project_txt{ color:#066e9a;} +.noline{ border-bottom:none;} +.news_description{max-height: 38px;overflow:hidden; } +.news_description_none{max-height: none;} +a.news_foot{ border:1px solid #e8eef2; color: #929598; text-align:center; width:600px; height:20px; padding-top:3px; cursor:pointer;} +a:hover.news_foot{ color:#787b7e; border:1px solid #d4d4d4;} + + +/*邮件邀请*/ +.box_main{ width:345px; margin:0 auto;} +.box_h3{ color:#15bccf; text-align:center; font-size:16px;} +.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;} +/*.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_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;}*/ +a.btn_free{ background:#ff5722; display:block; width:80px; text-align:center; color:#fff; height:26px; padding-top:3px; margin-bottom:10px;} +a:hover.btn_free{ background:#d63502;} +/*成员邀请*/ +.invi_search{ width:230px; margin:0 auto;} +.invi_search_input{ border:1px solid #15bccf; width:180px; height:24px; color:#9b9b9b; padding-left:5px; margin-bottom:10px;} +a.invi_search_btn{ background:#15bccf; color:#fff; text-align: center; width:40px; height:22px;border:1px solid #15bccf; padding-top:2px; cursor:pointer;} +a:hover.invi_search_btn{ background:#0da1b2; border:1px solid #0da1b2;} +/*问题跟踪*/ +.problem_top{ margin:10px 0 ;} +.problem_search_input{ border:1px solid #64bdd9; width:180px; height:24px; color:#9b9b9b; padding-left:5px; margin-bottom:10px;} +a.problem_search_btn{ background:#64bdd9; color:#fff; text-align: center; width:40px; height:22px;border:1px solid #64bdd9; padding-top:2px; cursor:pointer;} +a:hover.problem_search_btn{ background:#3da1c1; border:1px solid #3da1c1;} +a.problem_new_btn{ margin-left:10px; border:1px solid #ff7143; color:#ff7143; padding:1px 3px; font-size:12px; text-align:center; padding-top:2px;} +a:hover.problem_new_btn{ background:#ff7143; color:#fff;} +.problem_p{ color:#535252; margin-top:5px;} +.problem_p span{ color:#ff3e00;} +a.problem_pic{ display:block; width:42px; height:42px; padding:3px; border:1px solid #e3e3e3;} +a:hover.problem_pic{border:1px solid #64bdd9;} +.problem_txt{ width:610px; margin-left:10px; color:#777777;word-break: break-all;word-wrap: break-word;} +a.problem_name{ color:#ff5722;} +a:hover.problem_name{ color:#d33503;} +a.problem_tit{ color:#0781b4; width:430px; display:block; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;} +a:hover.problem_tit{ color:#09658c; } +.problem_main{ border-bottom:1px dashed #d4d4d4; padding-bottom:10px; margin-bottom:10px;} +/****翻页***/ +ul.wlist{ float:right; border-bottom:none; height:30px; margin-top:20px; } +ul.wlist li{float: left;} +ul.wlist li a{ border:1px solid #15bccf; padding: 1px 4px 1px 4px; margin-left:3px;} +ul.wlist li a:hover{ background:#15bccf; color:#fff; text-decoration:none;} +/*.wlist_select { background-color:#64bdd9; color:#fff; padding: 1px 5px 0px 5px; margin-left:3px;margin-top: -2px; border:1px solid #64bdd9;}*/ +.wlist_select a{background-color: #64bdd9;cursor: default;} +/****讨论区***/ +.talk_top{ margin:10px 0; font-size:14px; color:#4c4c4c;} +.talk_top span{ color:#ff7143;} +.talk_txt{ width:460px; margin-left:10px; color:#676868;} +.talk_up{ color:#f63c00;} +a.talk_pic{ display:block; width:32px; height:32px; padding:3px; border:1px solid #e3e3e3;} +a:hover.talk_pic{border:1px solid #64bdd9;} +a.talk_btn{ background:#64bdd9; width:50px; height:20px; color:#fff; text-align:center; margin-top:12px; padding-top:3px;} +a:hover.talk_btn{ background:#2a9dc1;} +/****讨论区内页***/ +.mt0{ margin-top:0px;} +.talk_info{ color:#7d7d7d; margin-left:60px; margin-top:10px;} +a.talk_edit{ color:#426e9a; margin-right:5px;} +a:hover.talk_edit{ color:#ff5722;} +.talk_reply { background:#eeeeee; padding:10px; margin-bottom:10px;} +.talkpage_text{ border:1px solid #64bdd9; width:600px; color:#7d7d7d; padding:5px; margin:10px 0 10px 50px; background:#fff;} +/****新建讨论***/ +.talk_new{ color:#4c4c4c;} +.talk_input{ border:1px solid #64bdd9; height:16px; width:585px; background:#fff; margin-bottom:10px; padding:5px;} +.talk_text{ border:1px solid #64bdd9; height:100px;width:585px; background:#fff; margin-left:5px; padding:5px; margin-bottom:10px;} +.talk_new ul li{ } +.sb{width:70px; height:26px; color:#606060; cursor:pointer;} +a.blue_btn{ background:#64bdd9; display:block; font-size:14px;color:#fff; font-weight:normal; text-align:center; margin-left:10px; margin-bottom:10px; padding:2px 10px;} +a:hover.blue_btn{ background:#329cbd;} +a.grey_btn{ background:#d9d9d9; color:#656565;font-size:14px; font-weight:normal; text-align:center; margin-left:10px; margin-bottom:10px; padding:2px 10px;} +a:hover.grey_btn{ background:#717171; color:#fff;} +/****资源库***/ +.f_l{ float:left;} +.f_r{ float:right;} +.resource a{ text-align:center;} +.b_lblue{ background:#64bdd9;} +.b_dblue{ background:#55a1b9; cursor:pointer;} +.f_b{ font-weight: bold;} +.c_blue{ color:#64bdd9;} +.c_grey{ color:#999999;} +.c_grey02{ color:#666666;} +.f_14{ font-size:14px;} +.c_dblue{ color:#3e6d8e;} +.w90{width:90px;} +.w40{width:40px;} +.ml10{margin-left:10px;} +.resource{ width:670px;} +.re_top{width:660px; height:40px; background:#eaeaea; padding:5px;} +.re_top input{ float:left;} +.re_search{ margin-top:7px; margin-left:5px;} +.re_schbox{ width:240px; height:24px; border:1px solid #64bdd9; color:#666666;} +.re_schbtn{ width:60px; height:26px; color:#fff; margin-right:5px; border:none; margin-left:0px;padding-left: 0px;} +a.re_fabu { display:block; width:90px; height:30px; font-size:14px; color:#fff; text-align:center; padding-top:10px; } +a:hover.re_fabu{background:#55a1b9;} +.re_con{ margin:5px; width:665px;} +.re_con_top{color:#494949; } +.re_con_top span{ color:#999999; font-weight:bold;} +a.re_select{ display:block; height:20px; border:1px solid #ff9900; color:#ff9900; margin-left:10px; padding:2px 5px 1px;} +a:hover.re_select{ background:#ff9900; color:#fff; text-decoration:none;} +a.re_open{display:block; width:46px; height:19px; border:1px solid #64bdd9; color:#64bdd9; margin-left:10px;padding-top:3px;} +a:hover.re_open{ background:#64bdd9; color:#fff; text-decoration:none;} +a.re_de{ color:#6883b6; margin-left:15px;} +.re_con_box{ border-bottom:1px dashed #dadada; padding-bottom:10px; margin-bottom:10px;} +/****资源库***/ +/*.setting{ background:url(../images/setting.jpg) 0 0 no-repeat; width:670px; height:443px;}*/ + +/* 作业列表 */ +.ttl{ } +.ctt{height:820px;clear:both; } +#contentbox{float:right;clear:both;width:670px;/*滑动门的宽度*/} +/* TAB 切换效果 */ +.tb_{ background-color: #eaeaea; height:40px; } +.tb_ ul{height:40px; } +.tb_ li{float:left;height:34px;width: 90px;cursor:pointer; font-size:14px; padding-top:6px; text-align:center; } +a.tb_all{ margin-left:212px; font-size:12px; display:block; height:23px; padding-top:4px; width:90px; color:#7a7a7a; border:1px solid #cbcbcb; background:#fff; text-align: center;} +a:hover.tb_all{ background:#eaeaea; text-decoration:none;} + +.work_tb_{ background-color: #eaeaea; height:40px; } +a.work_edit{color: #64bdd9; display:block; padding:1px 5px; border:1px solid #64bdd9;} +a:hover.work_edit{color: #fff; background: #64bdd9;} + +/* 控制显示与隐藏css类 */ +.normaltab { color:#64bdd9 ; } +.hovertab { color:#fff; background-color:#64bdd9; } +.normaltab a { color:#64bdd9 ; } +.hovertab a{color:#fff; background-color:#64bdd9; text-decoration:none;} +.dis{display:block; } +.undis{display:none;} +.c_red{ color:#de030d;} +.f_12{ font-size:12px;} +.w_40{ width:40px; border:1px solid red;} +.dis_ul{ height:70px; border-bottom:1px dashed #d4d4d4; margin-bottom:10px;} +.dis_ul li{ float:left;} +.dis_ul li a{ display:block; color:#15bccf; } +.pic_head{ width:44px; padding:0px 15px 0 0px;} +.pic_head a{ text-align:center; width:44px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;} +.pic_head img{ border:1px solid #e3e3e3; width:40px; height:40px; padding:1px;} +.pic_head img:hover{border:1px solid #15bccf;} +.dis ul li.wname a{ width:260px; font-size:14px; color:#595959; padding:20px 0 0 0px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;} +.dis ul li.wdown a{padding-top:22px; color:#3d7ec2; margin-right:35px;} +.wscore{ padding-top:22px; color:#888888; width:96px;} +.dis ul li.wping{margin-left:12px; } +.dis ul li.wping a{ margin-top:18px; margin-bottom:3px; width:43px; height:22px; background:#15bccf; color:#fff; text-align:center; padding-top:4px;} +.dis ul li.wping a:hover{ background-color:#03a1b3;} +.code_list{ float:right; font-size:12px; color:#484848; padding:5px 3px; border-bottom:2px solid #15bccf; width:665px; margin-bottom:10px;} +.code_list a{ color:#787878;} +.fr{ float:right;} +.c_grey{ color:#999; font-weight:normal;} +.dis ul li.wname02 a{ width:200px; font-size:14px; color:#595959; padding:20px 0 0 15px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;} +.dis ul li.wmine{ margin:12px 0 0 10px;} +.dis ul li.wmine a{ color:#3d7ec2; text-align:center; width:50px; font-weight: bold;} +.wzan{ margin:15px 0 0 25px; width:32px; height:44px;} +.wzan a{ display: block;} +a.wzan_img{background:url(images/pic_zan.png) 0 -59px no-repeat; display:block; height:31px; width:30px; color:#fff;} +a.wzan_visited{background:url(images/pic_zan.png) 0 0 no-repeat;} +.msg_box{ width:670px; height:173px; border-bottom:1px dashed #CCC; padding-top:10px;} +.msg_box h4{ } +.msg_box textarea{width:658px;height:90px;padding:5px;overflow:hidden;background-color: #ffffff; border:1px solid #CCC; margin:5px 0px; color:#666; font-size:12px; } +/*.msg_box a{ float:right; display:block; width:50px; height:22px; background:#15bccf; padding-top:3px; color:#fff; margin-left:10px; text-align:center; margin-top:5px; }*/ +/*.msg_box a:hover{ background-color:#03a1b3; text-decoration:none;}*/ + + +/****评分弹框****/ +/*#popbox{width:488px;height:550px;position:absolute;z-index:100;left:50%;top:40%;margin:-215px 0 0 -300px; background:#fff; -moz-border-radius:5px; -webkit-border-radius:5px; border-radius:5px; box-shadow:0px 0px 8px #194a81; padding:5px; overflow:auto; }*/ +.alert .close{width:26px;height:26px;overflow:hidden;position:absolute;top:-10px;right:-502px;background:url(images/close.png) no-repeat;cursor:pointer;} +.alert .C{width:476px;height:296px;position:absolute;left:5px;top:5px; } +.ping_con{ margin:5px; border-bottom:1px dashed #CCC; padding-bottom:5px;} +.ping_con ul{ height:30px;} +.ping_con ul li{ float:left; color:#656767; font-weight:bold;} +.ping_con h2{ font-size:14px; color:#444443; margin-bottom:10px; float:left;} +.ping_con p{ color:#777777; font-size:12px; border-bottom:1px dashed #CCC; padding-bottom:5px;} +.ping_con p span a{ color:#777777;} +.ping_star{ width:160px; color:#333; font-weight:bold; margin-bottom:5px;} +.ping_star span a{ float:right; width:20px; height:20px; background:url(images/star.png) -2px 0 no-repeat; margin-right:3px;} +.ping_star span a:hover{background:url(images/star.png) -24px 0 no-repeat;} +.ping_con textarea{ width:455px; height:76px; border:1px solid #15bccf; margin-bottom:5px; color:#666; font-size:12px;} +a.ping_sub{ float:right; height:22px; width:60px; background:#15bccf; color:#fff; text-align:center;} +a:hover.ping_sub{ background:#14a8b9;} +.recall{ border-top:1px solid #CCC; padding:5px 0;} +.recall_head{ float:left;} +.recall_head a{ display:block; width:30px; height:30px; border:1px solid #CCC; padding:1px;} +.recall_head a:hover{border:1px solid #15bccf;} +.recall_con{ float:left;color:#777777; width:520px; margin-left:10px;word-break: break-all;word-wrap: break-word; } +.recall_con a{ color:#15bccf; } +.ping_list{ margin-top:15px;} +.ping_ttl{height:18px;} +.ping_ctt{height:auto;padding:6px;clear:both;} +.ping_tb_{ border-bottom:3px solid #e4e4e4; text-align:center;} +.ping_tb_ ul{height:24px;} +.ping_tb_ li{float:left;height: 24px;width: auto; padding:0 10px;cursor:pointer;} +.ping_normaltab { color:#15bccf ; border-bottom:3px solid #e4e4e4;} +.ping_hovertab { color:#656767; font-weight:bold; border-bottom:3px solid #15bccf; } +.ping_dis{display:block; } +.ping_undis{display:none;} +.ping_C{border-bottom:1px dashed #CCC; padding:10px 0 0px;} +.ping_dispic a{ display:block; height:46px; width:46px; border:1px solid #CCC; padding:1px; float:left;} +.ping_dispic a:hover{border:1px solid #15bccf;} +.ping_discon{ float:left; width:610px; margin-left:10px; } +/*.ping_distop span{ float:left;}*/ +.ping_distop p{ color:#5f5f5f;word-break: break-all;word-wrap: break-word;} +.ping_disfoot a{ float:right; color: #6883b6; margin-left:5px; margin-bottom:5px;} +/*.ping_distop span a{ float:right; width:20px; height:20px; background:url(images/star.png) -24px 0 no-repeat; margin-right:3px;}*/ + +/* 创建作品 work */ +.Newwork{ width:668px; height:418px;} +.N_top{ float:right; margin-left:390px; } +.N_con{ color:#484747; font-weight:bold; width:660px; margin-top:10px; } +.N_con p{ } +.w430{ width:470px;} +.w557{ width:557px;} +.w350{ width:350px;} +.w620{ width:480px; height:160px; border:1px solid #CCC;} +.bo{height:26px; border:1px solid #CCC; padding-left:5px; background:#fff;width:470px; } +.bo02{height:26px; border:1px solid #CCC; padding-left:5px; background:#fff;width:480px; margin-left:2px; color: #999; } +.hwork_txt{ width:560px; padding-left:5px; background:#fff;} +a.tijiao{ height:28px; display:block; width:80px; color:#fff; background:#15bccf; text-align:center; padding-top:4px; float:left; margin-right:10px;} +a:hover.tijiao{ background:#0f99a9;} +.members_left{ float:left; width:410px; margin-right:20px; text-align:center;} +.members_left{} +.members_left ul li{ height:30px; border-bottom:1px solid #E4E4E4; width:410px; padding-top:10px; } +.members_left ul li a{ float:left; text-align:center;} +.members_left ul li span{ float:left; text-align:center; color:#484747;} + +.w150{ text-align:center; width:150px;} +.f_b{ font-weight: bold;} +.members_right label{ margin-left:15px;} +.N_search{ height:20px; border:1px solid #999;} +/* 创建作品 homework */ +.hwork_new{ color:#4c4c4c;} +.c_red{ color:#F00;} +.hwork_input{ border:1px solid #64bdd9; height:22px; width:555px; background:#fff; margin-bottom:10px; padding:5px;} +.hwork_input02{ border:1px solid #64bdd9; height:15px; width:120px; background:#fff; margin-bottom:10px; padding:5px;} +.hwork_text{ border:1px solid #64bdd9; height:100px;width:555px; background:#fff; margin-left:5px; padding:5px; margin-bottom:10px;} +.hwork_new ul li{ } +.ml21{ margin-left:21px;} +.ml9{ margin-left:9px;} +.hwork_ttl{height:24px;} +.hwork_ctt{height:auto; padding-left:10px;clear:both;} +.hwork_tb_{ border-bottom:3px solid #e4e4e4; text-align:center;} +.hwork_tb_ ul{height:24px;} +.hwork_tb_ li{float:left;height: 24px;width: auto; padding:0 10px;cursor:pointer;} +.hwork_normaltab { color:#15bccf ; border-bottom:3px solid #e4e4e4; } +.hwork_hovertab { color:#656767; font-weight:bold; border-bottom:3px solid #15bccf; } +.hwork_dis{display:block; } +.hwork_undis{display:none;} +.project_none{ display:none;} +.about_project{ overflow:hidden;display:none;} +/*成员搜索*/ +.members_right{ float:left; margin-left:8px;} +.member_search{ width:220px; margin:0 auto;} +.member_search_input{ border:1px solid #15bccf; background:#fff; width:170px; height:24px; color:#9b9b9b; padding-left:5px; margin-bottom:10px;} +.member_search_btn{ background:#15bccf; color:#fff; text-align: center; width:40px; height:22px;border:1px solid #15bccf; padding-top:2px; cursor:pointer;} +.member_search_btn:hover{ background:#0da1b2; border:1px solid #0da1b2;} +a.member_btn{ padding: 3px 5px; background:#15bccf; color:#fff;} +a:hover.member_btn{ background:#329cbd;} +.hol{display: none;} + +/* 新建项目 */ +.pro_new{ } +.pro_new ul li{ margin-bottom:5px; width:auto; padding:2px 5px;} + +/* 匿名评分弹框 */ +/*.popbox02{width:480px;height:200px;position:absolute;z-index:100;left:50%;top:50%;margin:-215px 0 0 -300px; background:#fff; -moz-border-radius:5px; -webkit-border-radius:5px; border-radius:5px; box-shadow:0px 0px 8px #194a81; overflow:auto;}*/ +.alert .close02{width:26px;height:26px;overflow:hidden;position:absolute;top:-10px;right:-490px;background:url(images/close.png) no-repeat;cursor:pointer;} +.ni_con { width:425px; margin:25px 30px;} +.ni_con h2{ display:block; height:40px; width:188px; margin:0 auto;} +.ni_con p{ color:#808181;} +.ni_con a:hover{ text-decoration:none;} +a.xls{ margin-left:5px; color:#136b3b;} +/* 学生列表*/ +.st_list{ width:670px;} +.st_search{ } +.st_search span{ font-size:14px; font-weight:bold; color:#606060; margin-right:35px;} +.st_search_input{ border:1px solid #1c9ec7; background:#fff; height:20px; color:#c4c4c4; width:200px; padding-left:5px; margin-bottom:5px;} +.st_search a{ background:#1c9ec7; color:#fff;border:1px solid #1c9ec7; text-align:center; display:block; width:60px; height:20px; float:left; font-size:12px; } +.st_search a:hover{ background:#048fbb; text-decoration:none;} +.classbox{ border:1px solid #f8df8c; background:#fffce6; color:#0d90c3; padding:0 3px; float:left; margin-left:15px;} +.st_addclass{ margin-top:5px;} +.st_addclass ul li,.st_addclass a,.st_addclass img{ float:left;} +.st_addclass img{ margin-top:3px;} +.st_addclass a{ color:#0d90c3;} +.st_box{ margin-top:10px; border-top:1px solid #CCC; padding-top:10px;} +.st_box ul li{ float:left;} +.st_box_top a{ font-weight:bold; color:#7a7a7a; float:left; margin-bottom:5px;} +.st_box_top a:hover{ color:#1c9ec7;} +a.st_up{ display: block; width:8px; float:left; height:13px; background:url(../images/pic_up.png) 0 0 no-repeat; margin-top:5px; margin-left:3px;} +a.st_down{ display: block; width:8px; float:left; height:13px; background:url(../images/pic_up.png) 0 -22px no-repeat; margin-top:5px; margin-left:3px;} +a.st_img { display:block;width:32px; height:32px; border:1px solid #CCC; padding:1px;} +a:hover.st_img { border:1px solid #1c9ec7; } +.st_boxlist{ border-bottom:1px dashed #CCC; height:43px; margin-bottom:10px; } +.st_boxlist a{ float:left;} +.st_boxlist ul{ float:left; width:200px; margin-left:10px;} +.st_boxlist ul li a{ color:#5d5d5d;} +.st_boxlist ul li a span{ color:#1c9ec7;} +.st_boxlist ul li a:hover span{ color:#ff8e15;} +.ml50{ margin-left:50px;} +.ml358{ margin-left:358px;} +.ml258{ margin-left:254px;} +.ml65{ margin-left:65px;} +a:hover.st_add{ color:#ff8e15;} +.classbox_on{ border:1px solid #f8df8c; background:#f6f098; padding:0 3px; float:left; margin-left:15px;} +.classbox_on a{ color:#716cad;} +/* 创建课程courses*/ +.courses_input{ border:1px solid #64bdd9; height:16px; width:532px; background:#fff; margin-bottom:10px; padding:5px;} +.courses_input_w{ width:300px;} +.courses_text{ border:1px solid #64bdd9; height:100px;width:532px; background:#fff; margin-left:5px; padding:5px; margin-bottom:10px;} +.upimg{ border:1px solid #eaeaea; display:block; width:60px; height:60px; padding:1px;} +.upimg:hover{ border:1px solid #64bdd9; } +.upbtn{ margin:40px 0 0 15px; display:block; padding:2px 5px; border:1px solid #eaeaea;} +.upbtn:hover{border:1px solid #64bdd9; color:#64bdd9;cursor: pointer;} +.upload_file{margin-left: -60px;margin-top: 40px;width: 50px;position: absolute;height: 24px;opacity: 0;cursor: pointer} +/* 功能倒计时*/ +.w_img{ float:left; margin:10px 10px 15px 0px;} +.w_p{ float:left; color:#15bccf; font-size:16px; font-weight:bold; margin-top:70px; } +/* 新建项目弹框*/ +.table_left{ width:90px; text-align:right; color:#4c4c4c; font-weight:bold;} +/*上传资源弹出框样式*/ +.popbox_polls{width:300px;height:100px;position:fixed !important;z-index:100;left:50%;top:50%;margin:-100px 0 0 -150px; background:#fff; -moz-border-radius:5px; -webkit-border-radius:5px; border-radius:5px; box-shadow:0px 0px 8px #194a81; overflow:auto;} +.upload_con h2{ display:block; background:#eaeaea; font-size:14px; color:#343333; height:31px; width: auto; margin-top:25px; padding-left:20px; padding-top:5px;} +.upload_box{ width:430px; margin:15px auto;} + +a:hover.link_file{ background:url(../images/pic_file.png) 0 -25px no-repeat; color:#3ca5c6;} +.r_txt_tit{width:500px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;color:#15bccf; float:left; color:#09658c; font-size:14px;} + +blockquote {background: #eeeeee;padding: 10px;margin-bottom: 10px;} +.respond-form{display: none;margin: auto;clear: both;} + +.reply_btn{ cursor:pointer; -moz-border-radius:3px; -webkit-border-radius:3px; border:1px solid #ccc; color:#999; border-radius:3px; padding:2px 10px; margin-bottom:10px;display: block;margin-left: 470px;} +.reply_btn:hover{ background:#999; color:#fff; } + +#attachments_fields input.description {margin-left: 4px;width: 100px;} +#attachments_fields span.ispublic-label {display: inline-block;width: 30px;margin-left: 10px;} +a.remove-upload {background: url(../images/delete.png) no-repeat 1px 50%;width: 1px;display: inline-block;padding-left: 16px;} +#attachments_fields input.filename {border: 0;height: 1.8em;width: 150px;color: #555;background-color: inherit;background: url(../images/attachment.png) no-repeat 1px 50%;padding-left: 18px;padding-top: 2px;} +span.add_attachment {font-size: 80%;line-height: 2.5em;} +#attachments_fields span {display: block;white-space: nowrap;} +.file_selector{position: relative;opacity: 0;filter: alpha(opacity:0);} +#attachments_fields .ajax-waiting input.filename {background:url(../images/hourglass.png) no-repeat 0px 50%;} +#attachments_fields .ajax-loading input.filename {background:url(../images/loading.gif) no-repeat 0px 50%;} +.reply_btn{ cursor:pointer; -moz-border-radius:3px; -webkit-border-radius:3px; border:1px solid #ccc; color:#999; border-radius:3px; padding:2px 10px; margin-bottom:10px;display: block;margin-left: 470px;} +.reply_btn:hover{ background:#999; color:#fff; } + +#attachments_fields div.ui-progressbar { width: 100px; height:14px; margin: 2px 0 -5px 8px; display: inline-block; } +.ui-widget { + font-family: Verdana, sans-serif; + font-size: 1.1em; +} +.ui-widget-content { + border: 1px solid #ddd; + color: #333; +} +.ui-progressbar-value{margin:-1px;height:100%} +.ui-widget-header{border:1px solid #628db6;background:#759fcf url(jquery/images/ui-bg_gloss-wave_35_759fcf_500x100.png) 50% 50% repeat-x;color:#fff;font-weight:bold} +.ui-corner-left,.ui-corner-tl{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;-khtml-border-top-left-radius:4px;border-top-left-radius:4px} +.link_file{ background:url(../images/pic_file.png) 0 7px no-repeat !important; padding-left:20px !important; color:#64bdd9 !important; } +a:hover.link_file_board{ background:url(../images/pic_file.png) 0 -25px no-repeat; color:#3ca5c6;} +a.link_file_board{ background:url(../images/pic_file.png) 0 3px no-repeat !important; padding-left:20px !important; color:#64bdd9 !important; } + +#course_member_pagination_links{height: auto;float: left;} +#course_member_pagination_links li{margin-bottom: 5px;} + +/* colorbox +*******************************************************************************/ +/* + Colorbox Core Style: + The following CSS is consistent between example themes and should not be altered. +*/ +#colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:9999; overflow:hidden;} +#cboxWrapper {max-width:none;} +#cboxOverlay{position:fixed; width:100%; height:100%;} +#cboxMiddleLeft, #cboxBottomLeft{clear:left;} +#cboxContent{position:relative;} +#cboxLoadedContent{overflow:auto; -webkit-overflow-scrolling: touch;} +#cboxTitle{margin:0;} +#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%; height:100%;} +#cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;} +.cboxPhoto{float:left; margin:auto; border:0; display:block; max-width:none; -ms-interpolation-mode:bicubic;} +.cboxIframe{width:100%; height:100%; display:block; border:0; padding:0; margin:0;} +#colorbox, #cboxContent, #cboxLoadedContent{box-sizing:content-box; -moz-box-sizing:content-box; -webkit-box-sizing:content-box;} + +/* + User Style: + Change the following styles to modify the appearance of Colorbox. They are + ordered & tabbed in a way that represents the nesting of the generated HTML. +*/ +#cboxOverlay{background:#fff;} +#colorbox{outline:0;} +#cboxTopLeft{width:25px; height:25px; background:url(../images/colorbox/border1.png) no-repeat 0 0;} +#cboxTopCenter{height:25px; background:url(../images/colorbox/border1.png) repeat-x 0 -50px;} +#cboxTopRight{width:25px; height:25px; background:url(../images/colorbox/border1.png) no-repeat -25px 0;} +#cboxBottomLeft{width:25px; height:25px; background:url(../images/colorbox/border1.png) no-repeat 0 -25px;} +#cboxBottomCenter{height:25px; background:url(../images/colorbox/border1.png) repeat-x 0 -75px;} +#cboxBottomRight{width:25px; height:25px; background:url(../images/colorbox/border1.png) no-repeat -25px -25px;} +#cboxMiddleLeft{width:25px; background:url(../images/colorbox/border2.png) repeat-y 0 0;} +#cboxMiddleRight{width:25px; background:url(../images/colorbox/border2.png) repeat-y -25px 0;} +#cboxContent{background:#fff; overflow:hidden;} +.cboxIframe{background:#fff;} +#cboxError{padding:50px; border:1px solid #ccc;} +#cboxLoadedContent{margin-bottom:20px;} +#cboxTitle{position:absolute; bottom:0px; left:0; text-align:center; width:100%; color:#999;} +#cboxCurrent{position:absolute; bottom:0px; left:100px; color:#999;} +#cboxLoadingOverlay{background:#fff url(../images/colorbox/loading.gif) no-repeat 5px 5px;} + +/* these elements are buttons, and may need to have additional styles reset to avoid unwanted base styles */ +#cboxPrevious, #cboxNext, #cboxSlideshow, #cboxClose {border:0; padding:0; margin:0; overflow:visible; width:auto; background:none; } + +/* avoid outlines on :active (mouseclick), but preserve outlines on :focus (tabbed navigating) */ +#cboxPrevious:active, #cboxNext:active, #cboxSlideshow:active, #cboxClose:active {outline:0;} + +#cboxSlideshow{position:absolute; bottom:0px; right:42px; color:#444;} +#cboxPrevious{position:absolute; bottom:0px; left:0; color:#444;} +#cboxNext{position:absolute; bottom:0px; left:63px; color:#444;} +#cboxClose{position:absolute; bottom:0; right:0; display:block; color:#444;} + +/* + The following fixes a problem where IE7 and IE8 replace a PNG's alpha transparency with a black fill + when an alpha filter (opacity change) is set on the element or ancestor element. This style is not applied to or needed in IE9. + See: http://jacklmoore.com/notes/ie-transparency-problems/ +*/ +.cboxIE #cboxTopLeft, +.cboxIE #cboxTopCenter, +.cboxIE #cboxTopRight, +.cboxIE #cboxBottomLeft, +.cboxIE #cboxBottomCenter, +.cboxIE #cboxBottomRight, +.cboxIE #cboxMiddleLeft, +.cboxIE #cboxMiddleRight { + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#00FFFFFF,endColorstr=#00FFFFFF); +} + + + + + + + + diff --git a/public/stylesheets/pleft.css b/public/stylesheets/pleft.css new file mode 100644 index 000000000..54330ebae --- /dev/null +++ b/public/stylesheets/pleft.css @@ -0,0 +1,63 @@ +.topbar_info02{ margin:5px 10px;width:480px; } +.topbar_info02 p{color: #7f7f7f;} +.search{ margin-top:8px; margin-left:71px;} +/*信息*/ +.project_info{ background:#fff; padding:10px; padding-right:0px;width:222px; padding-right:8px; margin-bottom:10px;} +.pr_info_id{ width:137px; color:#5a5a5a; font-size:14px; margin-top:5px;} +.pr_info_logo{ border:1px solid #eaeaea; width:60px; height:60px; padding:1px;} +.pr_info_logo:hover{ border:1px solid #64bdd9; } +.pr_info_join{} +a.pr_join_a{ color:#fff; display:block; padding:0 5px 0 3px; padding-top:2px; height:20px; margin-right:5px; float:left; text-align:center; background-color:#64bdd9; float:left; } +a:hover.pr_join_a{ background:#41a8c8;} +.pr_join_span{color: #fff; display:block; padding:0 5px; padding-top:2px; height:20px; margin-right:5px; float:left; text-align:center; background: #CCC;} +.pr_setting{ display:block; background:url(../images/leftside.png) -1px 0 no-repeat; width:11px; height:11px; margin-top:3px; float:left; } +.pr_copy{ display:block; background:url(../images/leftside.png) -1px -23px no-repeat; width:11px; height:11px; margin-top:3px; float:left; } +.pr_close{ display:block; background:url(../images/leftside.png) -1px -49px no-repeat; width:11px; height:11px; margin-top:3px; float:left; } +.pr_add{display:block; background:url(../images/leftside.png) 0px -71px no-repeat; width:11px; height:11px; margin-top:3px; float:left; } +.pr_arrow{display:block; background:url(../images/leftside.png) 0px -90px no-repeat; width:11px; height:11px; margin-top:3px; float:left; } +.pr_info_name{ color:#3e4040; font-size:14px; line-height:1.5;} +.pr_info_name:hover{ color:#3ca5c6;} +.pr_info_score{ font-size:14px; color:#3e4040; } +.pr_info_score a{ color:#ff7143;} +.pr_info_score a:hover{ color:#64bdd9;} +.img_private{ background:url(../images/new_project/img_project.png) 0 0 no-repeat; width:33px; height:16px; color:#fff; font-size:12px; padding-left:7px; } +.info_foot_num{ color:#3ca5c6; } +.pr_info_foot{ color:#7f7f7f; margin-top:5px; } +.info_foot_num:hover{ color:#2390b2;} +.info_box{background:#fff; padding:10px;width:220px; } +.info_box ul li{ font-size:12px; color: #3e4040; line-height:1.7;} + +/*左侧导航*/ +.subNavBox{width:240px; background:#fff;margin:10px 10px 0 0;} +.subNav{border-bottom:solid 1px #e5e3da;cursor:pointer;font-weight:bold;font-size:14px;color:#3ca5c6; height:26px;padding-left:10px;background-color:#fff; padding-top:2px;} +a.subNav_jiantou{background:url(../images/jiantou1.jpg) no-repeat;background-position:95% 50%; background-color:#fff;} +a:hover.subNav_jiantou:hover{color:#0781b4; } +.currentDd{color:#0781b4; } +.currentDt{background-color:#fff; } +.navContent{display: none;border-bottom:solid 1px #e5e3da; } +.navContent li a{display:block;width:240px;heigh:28px;text-align:center;font-size:12px;line-height:28px;color:#333} +.navContent li a:hover{color:#fff;background-color:#b3e0ee} +a.subnav_num{ font-weight:normal; color:#ff7143; font-size:12px;} +a.subnav_green{ background:#28be6c; color:#fff; font-size:12px; font-weight:normal;height:18px; padding:0px 5px; padding-top:2px; display:block; margin-top:2px; margin-bottom:5px; float:right; margin-right:5px;} +a:hover.subnav_green{ background:#14ad5a;} + + +/*简介*/ +.project_intro{ width:220px; padding:10px; background:#fff; margin-top:10px; padding-top:5px; color:#6d6d6d; line-height:1.9;} +.course_description{max-height: 112px;overflow:hidden; word-break: break-all;word-wrap: break-word;} +.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:hover{ color:#787b7e; border:1px solid #d4d4d4;} +/****标签(和资源库的tag样式一致)***/ +.project_Label{ width:220px; padding:10px; background:#fff; margin-top:10px; padding-top:5px; margin-bottom:10px;} +a.yellowBtn{ display:inline-block;color:#0d90c3; height:22px;} +.submit{height:21px;border:0; cursor:pointer; background:url(../images/btn.png) no-repeat 0 0;width:42px; margin-top:2px; margin-left:3px; } +.isTxt{background:#fbfbfb url(../images/inputBg.png) repeat-x left top;height:22px;line-height:22px;border:1px solid #c1c1c1;padding:0 5px;color:#666666;} +.re_tag{ width: auto; padding:0 5px; padding-top:2px; height:20px; border:1px solid #f8df8c; background:#fffce6; margin-right:5px; } +.re_tag a{ color:#0d90c3;} +.tag_h{ } +.tag_h span,.tag_h a{ margin-bottom:5px;} + + + + diff --git a/public/stylesheets/project.css b/public/stylesheets/project.css index 2f249f4aa..4d684f145 100644 --- a/public/stylesheets/project.css +++ b/public/stylesheets/project.css @@ -1,72 +1,17 @@ -@charset "utf-8"; -/* CSS Document */ -body{ font-size:12px; font-family:"微软雅黑","宋体"; line-height:1.9; background:#eaebec; font-style:normal;} -div,html,img,ul,li,p,body,h1,h2,h3,h4,p,a,table,tr,td,fieldset,input,span,ol{ margin:0; padding:0;} -div,img,tr,td,table{ border:0;} -table,tr,td{border:0;cellspacing:0; cellpadding:0;} -ol,ul,li{ list-style-type:none} -.cl{ clear:both; overflow:hidden; } -a{ text-decoration:none; cursor:pointer;} -.ml10{ margin-left:10px;} -.ml20{ margin-left:20px;} -.mr10{ margin-right:10px;} -.mb5{ margin-bottom:5px;} -.mb10{ margin-bottom:10px;} -.fl{ float: left;} -.fr{ float:right;} + .project_h4{ font-size:14px; color:#3b3b3b;} - - .project_content{ width:940px; margin:10px auto;} .project_left{ float:left;} .project_right{ width:670px; float:left;background:#fff; padding:10px;} -/*项目信息*/ -.project_info{ background:#fff; padding:10px;width:222px; padding-right:8px;} -.pr_info_id{ width:137px; color:#5a5a5a; font-size:14px;} -.pr_info_join{} -.pr_info_join a{ color:#fff; display:block; padding:0 5px; margin-right:10px; float:left; height:22px; background:#64bdd9; text-align:center; } -.pr_info_join a:hover{ background:#41a8c8;} -a.pr_info_name{ color:#3e4040; font-size:14px; line-height:1.5;} -a:hover.pr_info_name{ color:#3ca5c6;} -.pr_info_score{ font-size:14px; color:#3e4040; } -.pr_info_score a{ color:#ff7143;} -.pr_info_score a:hover{ color:#64bdd9;} -.img_private{ background:url(../images/img_project.png) 0 0 no-repeat; width:32px; height:16px; color:#fff; font-size:12px; padding-left:7px; } -a.info_foot_num{ font-weight: bold; color:#3ca5c6; } -.pr_info_foot{ color:#7f7f7f; margin-top:5px; } -a:hover.info_foot_num{ color:#2390b2;} - -/*左侧导航*/ -.subNavBox{width:240px; background:#fff;margin:10px 10px 0 0;} -.subNav{border-bottom:solid 1px #e5e3da;cursor:pointer;font-weight:bold;font-size:14px;color:#3ca5c6;line-height:28px;padding-left:10px;background-color:#fff;} -.subNav_jiantou{background:url(../images/jiantou1.jpg) no-repeat;background-position:95% 50%; background-color:#fff;} -.subNav_jiantou:hover{color:#0781b4; } -.currentDd{color:#0781b4; } -.currentDt{background-color:#fff; } -.navContent{display: none;border-bottom:solid 1px #e5e3da; } -.navContent li a{display:block;width:240px;heigh:28px;text-align:center;font-size:12px;line-height:28px;color:#333} -.navContent li a:hover{color:#fff;background-color:#b3e0ee} -.subnav_num{ font-weight:normal; color:#ff7143; font-size:12px;} -a.subnav_green{ background:#28be6c; color:#fff; font-size:12px; font-weight:normal;height:20px; padding:0px 5px; text-align:center; margin-top:5px; margin-left:82px;} -a.ml95{ margin-left:97px;} -a.ml105{ margin-left:120px;} -a:hover.subnav_green{ background:#14ad5a;} /*简介*/ .project_intro{ width:220px; padding:10px; background:#fff; margin-top:10px; padding-top:5px; color:#6d6d6d;} -.lg-foot{ border:1px solid #e8eef2; color: #929598; text-align:center; width:220px; height:23px; cursor:pointer;} -.lg-foot:hover{ color:#787b7e;} -/****标签(和资源库的tag样式一致)***/ -.project_Label{ width:220px; padding:10px; background:#fff; margin-top:10px; padding-top:5px;} -a.yellowBtn{ display:inline-block;color:#0d90c3; height:22px;} -.submit{height:21px;border:0; cursor:pointer; background:url(../images/btn.png) no-repeat 0 0;width:42px; margin-top:2px; margin-left:3px; } -.isTxt{background:#fbfbfb url(../images/inputBg.png) repeat-x left top;height:22px;line-height:22px;border:1px solid #c1c1c1;padding:0 5px;color:#666666;} -.re_tag{ width: auto; padding:0 5px; height:22px; border:1px solid #f8df8c; background:#fffce6; margin-right:5px; } -.re_tag a{ color:#0d90c3;} -.tag_h span,.tag_h a{ margin-bottom:5px;} +a.lg-foot{ border:1px solid #e8eef2; color: #929598; text-align:center; width:220px; height:23px; cursor:pointer;} +a:hover.lg-foot{ color:#787b7e;} + /*右侧内容--动态*/ -.project_r_h{ width:670px; height:40px; background:#eaeaea;} -.project_h2{ background:#64bdd9; color:#fff; height:37px; width:90px; text-align:center; font-weight:normal; padding-top:3px; font-size:16px;} +.project_r_h{ width:670px; height:40px; background:#eaeaea; margin-bottom:10px;} +.project_h2{ background:#64bdd9; color:#fff; height:33px; width:90px; text-align:center; font-weight:normal; padding-top:7px; font-size:16px;} .project_r_box{ border:1px solid #e2e1e1; width:670px; margin-top:10px;} .project_h3 { color:#646464; font-size:14px; padding:0 10px; border-bottom:1px solid #e2e1e1;} a.more{ float:right; font-size:12px; font-weight:normal; color:#a9a9a9; margin-top:3px;} @@ -77,78 +22,95 @@ a:hover.more{ color:#64bdd9;} .img_talk{ background:url(../images/img_project.png) 0 -62px no-repeat;} .img_ziyuan{ background:url(../images/img_project.png) 0 -115px no-repeat;} .img_edition{ background:url(../images/img_project.png) 0 -167px no-repeat;} -.project_name{ color:#058c42;} -.project_name:hover{ color:#016f33;} -.project_txt{ color:#0781b4; width:445px; display:block; float:left; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;} -.project_txt02{ color:#0781b4; width:618px; display:block; float:left; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;} -.project_txt:hover{ color:#066e9a;} +a.project_name{ color:#058c42;} +a:hover.project_name{ color:#016f33;} +a.project_txt{ color:#0781b4; width:445px; display:block; float:left; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;} +a.project_txt02{ color:#0781b4; width:618px; display:block; float:left; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;} +a:hover.project_txt{ color:#066e9a;} .noline{ border-bottom:none;} /*弹框*/ .floatbox{ width:420px; border:3px solid #15bccf; background:#fff; padding:5px;} -.box_close{ display:block; float:right; width:16px; height:16px; background:url(../images/img_floatbox.png) 0 0 no-repeat;} -.box_close:hover{background:url(../images/img_floatbox.png) -22px 0 no-repeat;} +a.box_close{ display:block; float:right; width:16px; height:16px; background:url(../images/img_floatbox.png) 0 0 no-repeat;} +a:hover.box_close{background:url(../images/img_floatbox.png) -22px 0 no-repeat;} /*邮件邀请*/ .box_main{ width:345px; margin:0 auto;} +.box_main02{ width:390px; margin:15px auto;} .box_h3{ color:#15bccf; text-align:center; font-size:16px;} .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;} -.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_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;} -.btn_free{ background:#ff5722; display:block; width:80px; text-align:center; color:#fff; height:26px; padding-top:3px; margin-bottom:10px;} -.btn_free:hover{ background:#d63502;} +a.icon_addm{ background:url(../images/img_floatbox.png) 0 -33px no-repeat; width:16px; height:16px; display:block; margin:5px 0 0 5px;} +a:hover.icon_addm{background:url(../images/img_floatbox.png) 0 -61px no-repeat; } +a.icon_removem{ background:url(../images/img_floatbox.png) -22px -33px no-repeat;width:16px; height:16px; display:block; margin:5px 0 0 5px} +a:hover.icon_removem{background:url(../images/img_floatbox.png) -22px -61px no-repeat;} +a.btn_free{ background:#ff5722; display:block; text-align:center; color:#fff; padding:3px 0; width:80px; margin-bottom:10px;} +a:hover.btn_free{ background:#d63502;} /*成员邀请*/ -.invi_search{ width:230px; margin:0 auto;} +.invi_search{ margin-left:50px;} .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:hover{ background:#0da1b2; border:1px solid #0da1b2;} +a.invi_search_btn{ background:#15bccf; color:#fff; text-align: center; width:40px; height:22px;border:1px solid #15bccf; padding-top:2px; cursor:pointer;} +a:hover.invi_search_btn{ background:#0da1b2; border:1px solid #0da1b2;} +.rolebox{ 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_btn{ background:#64bdd9; color:#fff; text-align: center; width:40px; height:22px;border:1px solid #64bdd9; padding-top:2px; cursor:pointer;} -.problem_search_btn:hover{ background:#3da1c1; border:1px solid #3da1c1;} -.problem_new_btn{ margin-left:10px; border:1px solid #ff7143; color:#ff7143; width:60px; height:22px; font-size:12px; text-align:center; padding-top:2px;} -.problem_new_btn:hover{ background:#ff7143; color:#fff;} +a.problem_search_btn{ background:#64bdd9; color:#fff; text-align: center; width:40px; height:22px;border:1px solid #64bdd9; padding-top:2px; cursor:pointer;} +a:hover.problem_search_btn{ background:#3da1c1; border:1px solid #3da1c1;} +a.problem_new_btn{ margin-left:10px; border:1px solid #ff7143; color:#ff7143; padding:1px 3px; font-size:12px; text-align:center; padding-top:2px;} +a:hover.problem_new_btn{ background:#ff7143; color:#fff;} .problem_p{ color:#535252; margin-top:5px;} .problem_p span{ color:#ff3e00;} -.problem_pic{ display:block; width:42px; height:42px; padding:3px; border:1px solid #e3e3e3; margin-top:5px;} -.problem_pic:hover{border:1px solid #64bdd9;} +a.problem_pic{ display:block; width:42px; height:42px; padding:3px; border:1px solid #e3e3e3; margin-top:5px;} +a:hover.problem_pic{border:1px solid #64bdd9;} .problem_txt{ width:610px; margin-left:10px; color:#777777;} -.problem_name{ color:#ff5722;} -.problem_name:hover{ color:#d33503;} -.problem_tit{ color:#0781b4; width:430px; display:block; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;} -.problem_tit:hover{ color:#09658c; } +a.problem_name{ color:#ff5722;} +a:hover.problem_name{ color:#d33503;} +a.problem_tit{ color:#0781b4; width:430px; display:block; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;} +a:hover.problem_tit{ color:#09658c; } .problem_main{ border-bottom:1px dashed #d4d4d4; padding-bottom:10px; margin-bottom:10px;} /****翻页***/ -.wlist{} -.wlist a{ float:right; border:1px solid #64bdd9; padding:0 5px; margin-left:3px; color:#64bdd9;} -.wlist a:hover{border:1px solid #64bdd9; background-color:#64bdd9; color:#fff; text-decoration:none;} -.wlist_select a { background-color:#48aac9; color:#fff;} +ul.wlist{ float:right; border-bottom:none; height:30px; margin-top:20px; } +ul.wlist li{float: left;} +ul.wlist li a{ border:1px solid #15bccf; padding: 1px 4px 1px 4px; margin-left:3px;} +ul.wlist li a:hover{ background:#15bccf; color:#fff; text-decoration:none;} +/*.wlist_select { background-color:#64bdd9; color:#fff; padding: 1px 5px 0px 5px; margin-left:3px;margin-top: -2px; border:1px solid #64bdd9;}*/ +.wlist_select a{background-color: #64bdd9;cursor: default;} /****讨论区***/ .talk_top{ margin:10px 0; font-size:14px; color:#4c4c4c;} .talk_top span{ color:#ff7143;} .talk_txt{ width:460px; margin-left:10px; color:#676868;} .talk_up{ color:#f63c00;} -.talk_pic{width:32px; height:32px; padding:2px;} -.talk_btn{ background:#64bdd9; width:50px; height:22px; color:#fff; text-align:center; margin-top:12px; padding-top:2px;} -.talk_btn:hover{ background:#2a9dc1;} +a.talk_pic{ display:block; width:32px; height:32px; padding:3px; border:1px solid #e3e3e3;} +a:hover.talk_pic{border:1px solid #64bdd9;} +a.talk_btn{ background:#64bdd9; width:50px; height:20px; color:#fff; text-align:center; margin-top:12px; padding-top:3px;} +a:hover.talk_btn{ background:#2a9dc1;} /****讨论区内页***/ .mt0{ margin-top:0px;} -.talk_info{ color:#7d7d7d; margin-left:50px; margin-top:10px;} -.talk_edit{ color:#426e9a; margin-right:5px;} -.talk_edit:hover{ color:#ff5722;} +.talk_info{ color:#7d7d7d; margin-left:60px; margin-top:10px;} +a.talk_edit{ color:#426e9a; margin-right:5px;} +a:hover.talk_edit{ color:#ff5722;} .talk_reply { background:#eeeeee; padding:10px; margin-bottom:10px;} -.talk_text{ border:1px solid #64bdd9; width:600px; color:#7d7d7d; padding:5px; margin:10px 0 10px 50px;} +.talkpage_text{ border:1px solid #64bdd9; width:600px; color:#7d7d7d; padding:5px; margin:10px 0 10px 50px; background:#fff;} +/*.ping_dispic a{ display:block; height:46px; width:46px; border:1px solid #CCC; padding:1px; float:left;}*/ +/*.ping_dispic a:hover{border:1px solid #15bccf;}*/ +/****新建讨论***/ +.talk_new{ color:#4c4c4c;} +.talk_input{ border:1px solid #64bdd9; height:16px; width:585px; background:#fff; margin-bottom:10px; padding:5px;} +.talk_text{ border:1px solid #64bdd9; height:100px;width:585px; background:#fff; margin-left:5px; padding:5px; margin-bottom:10px;} +.talk_new ul li{ } +.sb{width:70px; height:26px; color:#606060; cursor:pointer;} +a.blue_btn{ background:#64bdd9; display:block; font-size:14px;color:#fff; font-weight:normal; text-align:center; margin-left:10px; margin-bottom:10px; padding:2px 10px;} +a:hover.blue_btn{ background:#329cbd;} +a.grey_btn{ background:#d9d9d9; color:#656565;font-size:14px; font-weight:normal; text-align:center; margin-left:10px; margin-bottom:10px; padding:2px 10px;} +a:hover.grey_btn{ background:#717171; color:#fff;} /****资源库***/ -.f_l{ float:left;} -.f_r{ float:right;} .resource a{ text-align:center;} .b_lblue{ background:#64bdd9;} .b_dblue{ background:#55a1b9; cursor:pointer;} .f_b{ font-weight: bold;} .c_blue{ color:#64bdd9;} +a.c_dblue{ color: #3ca5c6;} +a:hover.c_dblue{ color: #0781b4;} .c_grey{ color:#999999;} .c_grey02{ color:#666666;} .f_14{ font-size:14px;} @@ -166,17 +128,118 @@ a:hover.re_fabu{background:#55a1b9;} .re_con{ margin:5px; width:665px;} .re_con_top{color:#494949; } .re_con_top span{ color:#999999; font-weight:bold;} -a.re_select{ display:block; width:88px; height:22px; border:1px solid #ff9900; color:#ff9900; margin-left:10px;} +a.re_select{ display:block; padding:2px 10px; border:1px solid #ff9900; color:#ff9900; margin-left:10px;} a:hover.re_select{ background:#ff9900; color:#fff; text-decoration:none;} -.re_open{display:block; width:46px; height:22px; border:1px solid #64bdd9; color:#64bdd9; margin-left:10px;} +a.re_open{display:block; padding:2px 10px; border:1px solid #64bdd9; color:#64bdd9; margin-left:10px;} a:hover.re_open{ background:#64bdd9; color:#fff; text-decoration:none;} a.re_de{ color:#6883b6; margin-left:15px;} .re_con_box{ border-bottom:1px dashed #dadada; padding-bottom:10px; margin-bottom:10px;} -/****资源库***/ -.setting{ background:url(../images/setting.jpg) 0 0 no-repeat; width:670px; height:443px;} +.upload_con { } +.upload_con h2{ display:block; background:#eaeaea; font-size:14px; color:#343333; height:31px; width: auto; margin-top:25px; padding-left:20px; padding-top:5px;} +.upload_box{ width:430px; height:80px;} +a.upload_btn02{ display:block; float:left; margin-top:15px; width:80px; height:30px; text-align: center; color:#fff; font-size:14px; background:#15bccf; margin-right:15px;} +a:hover.upload_btn02{ background:#55a1b9;} +a.upload_btn_grey{background:#a3a3a3;} +a:hover.upload_btn_grey{background:#8a8a8a;} +.upload_btn{width:80px; height:26px;} +.upload_check{ margin-top:4px;} +a.link_file{ background:url(../images/courses/pic_file.png) 0 2px no-repeat; padding-left:20px; color:#64bdd9; } +a:hover.link_file{ background:url(../images/courses/pic_file.png) 0 -25px no-repeat; color:#3ca5c6;} +.r_txt_tit{width:510px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;color:#15bccf; float:left; color:#09658c; font-size:14px;} +/* 新建问题 */ +.newpro_box{ color:#6d6d6d;} +.newpro_box02{ color:#6d6d6d; margin-left:30px; margin-bottom:10px; } +.newpro_box ul li{ } +.newpro_box input{ height:26px; float:left; margin-bottom:10px;} +.newpro_box textarea{ height:150px; float:left; margin-bottom:10px;} +.newpro_box select{ height:26px; float:left; margin-bottom:10px;} +.label{ width:80px; text-align:right; font-size:14px; display:block; float:left;} +.label02{ width:110px; text-align:right; font-size:14px; display:block; float:left;} +.collapsible{ border-left:none;border-right:none;border-bottom:none; border-top:1px solid #e4e4e4; padding-left:30px; padding-top:10px; } +/* 弹框 新样式还没设计出来,暂时用的课程那边的样式 */ +.alert .close{width:26px;height:26px;overflow:hidden;position:absolute;top:-10px;right:-502px;background:url(images/close.png) no-repeat;cursor:pointer;} +.alert .C{width:476px;height:296px;position:absolute;left:5px;top:5px; } +.ping_con{ margin:5px; border-bottom:1px dashed #CCC; padding-bottom:5px;} +.ping_con ul{ height:30px;} +.ping_con ul li{ float:left; color:#656767; font-weight:bold;} +.ping_con h2{ font-size:14px; color:#444443; margin-bottom:10px; float:left;} +.ping_con p{ color:#777777; font-size:12px; border-bottom:1px dashed #CCC; padding-bottom:5px;} +.ping_con p span a{ color:#777777;} +.ping_star{ width:160px; color:#333; font-weight:bold; margin-bottom:5px;} +.ping_star span a{ float:right; width:20px; height:20px; background:url(images/star.png) -2px 0 no-repeat; margin-right:3px;} +.ping_star span a:hover{background:url(images/star.png) -24px 0 no-repeat;} +.ping_con textarea{ width:455px; height:76px; border:1px solid #15bccf; margin-bottom:5px; color:#666; font-size:12px;} +a.ping_sub{ float:right; height:22px; width:60px; background:#15bccf; color:#fff; text-align:center;} +a:hover.ping_sub{ background:#14a8b9;} +.recall{ border-top:1px solid #CCC; padding:5px 0;} +.recall_head{ float:left;} +.recall_head a{ display:block; width:30px; height:30px; border:1px solid #CCC; padding:1px;} +.recall_head a:hover{border:1px solid #15bccf;} +.recall_con{ float:left;color:#777777; width:520px; margin-left:10px;word-break: break-all;word-wrap: break-word; } +.recall_con a{ color:#15bccf; } +.ping_list{ margin-top:15px;} +.ping_ttl{height:18px;} +.ping_ctt{height:auto;padding:6px;clear:both;} +.ping_tb_{ border-bottom:3px solid #e4e4e4; text-align:center;} +.ping_tb_ ul{height:24px;} +.ping_tb_ li{float:left;height: 24px;width: auto; padding:0 10px;cursor:pointer;} +.ping_normaltab { color:#15bccf ; border-bottom:3px solid #e4e4e4;} +.ping_hovertab { color:#656767; font-weight:bold; border-bottom:3px solid #15bccf; } +.ping_dis{display:block; } +.ping_undis{display:none;} +.ping_C{border-bottom:1px dashed #CCC; padding:10px 0 0px;} +.ping_dispic a{ display:block; height:46px; width:46px; border:1px solid #CCC; padding:1px; float:left;} +.ping_dispic a:hover{border:1px solid #15bccf;} +.ping_discon{ float:left; width:610px; margin-left:10px; } +/*.ping_distop span{ float:left;}*/ +.ping_distop p{ color:#5f5f5f;word-break: break-all;word-wrap: break-word;} +.ping_disfoot a{ float:right; color: #6883b6; margin-left:5px; margin-bottom:5px;} +/*.ping_distop span a{ float:right; width:20px; height:20px; background:url(images/star.png) -24px 0 no-repeat; margin-right:3px;}*/ +/*上传资源弹出框样式*/ +.popbox_polls{width:300px;height:100px;position:fixed !important;z-index:100;left:50%;top:50%;margin:-100px 0 0 -150px; background:#fff; -moz-border-radius:5px; -webkit-border-radius:5px; border-radius:5px; box-shadow:0px 0px 8px #194a81; overflow:auto;} +.upload_con h2{ display:block; background:#eaeaea; font-size:14px; color:#343333; height:31px; width: auto; margin-top:25px; padding-left:20px; padding-top:5px;} +.upload_box{ width:430px; margin:15px auto;} +a:hover.link_file{ background:url(../images/pic_file.png) 0 -25px no-repeat; color:#3ca5c6;} +.r_txt_tit{width:500px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;color:#15bccf; float:left; color:#09658c; font-size:14px;} +blockquote {background: #eeeeee;padding: 10px;margin-bottom: 10px;} +.respond-form{display: none;margin: auto;clear: both;} + +.reply_btn{ cursor:pointer; -moz-border-radius:3px; -webkit-border-radius:3px; border:1px solid #ccc; color:#999; border-radius:3px; padding:2px 10px; margin-bottom:10px;display: block;margin-left: 470px;} +.reply_btn:hover{ background:#999; color:#fff; } + +#attachments_fields input.description {margin-left: 4px;width: 100px;} +#attachments_fields span.ispublic-label {display: inline-block;width: 30px;margin-left: 10px;} +a.remove-upload {background: url(../images/delete.png) no-repeat 1px 50%;width: 1px;display: inline-block;padding-left: 16px;} +#attachments_fields input.filename {border: 0;height: 1.8em;width: 150px;color: #555;background-color: inherit;background: url(../images/attachment.png) no-repeat 1px 50%;padding-left: 18px;padding-top: 2px;} +span.add_attachment {font-size: 80%;line-height: 2.5em;} +#attachments_fields span {display: block;white-space: nowrap;} +.file_selector{position: relative;opacity: 0;filter: alpha(opacity:0);} +#attachments_fields .ajax-waiting input.filename {background:url(../images/hourglass.png) no-repeat 0px 50%;} +#attachments_fields .ajax-loading input.filename {background:url(../images/loading.gif) no-repeat 0px 50%;} +.reply_btn{ cursor:pointer; -moz-border-radius:3px; -webkit-border-radius:3px; border:1px solid #ccc; color:#999; border-radius:3px; padding:2px 10px; margin-bottom:10px;display: block;margin-left: 470px;} +.reply_btn:hover{ background:#999; color:#fff; } + +#attachments_fields div.ui-progressbar { width: 100px; height:14px; margin: 2px 0 -5px 8px; display: inline-block; } +.ui-widget { + font-family: Verdana, sans-serif; + font-size: 1.1em; +} +.ui-widget-content { + border: 1px solid #ddd; + color: #333; +} +.ui-progressbar-value{margin:-1px;height:100%} +.ui-widget-header{border:1px solid #628db6;background:#759fcf url(jquery/images/ui-bg_gloss-wave_35_759fcf_500x100.png) 50% 50% repeat-x;color:#fff;font-weight:bold} +.ui-corner-left,.ui-corner-tl{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;-khtml-border-top-left-radius:4px;border-top-left-radius:4px} +.link_file{ background:url(../images/pic_file.png) 0 7px no-repeat !important; padding-left:20px !important; color:#64bdd9 !important; } +a:hover.link_file_board{ background:url(../images/pic_file.png) 0 -25px no-repeat; color:#3ca5c6;} +a.link_file_board{ background:url(../images/pic_file.png) 0 3px no-repeat !important; padding-left:20px !important; color:#64bdd9 !important; } + +#course_member_pagination_links{height: auto;float: left;} +#course_member_pagination_links li{margin-bottom: 5px;} From c1fea1c7e21675b924e87b86fc511c81c79fbe6f Mon Sep 17 00:00:00 2001 From: huang Date: Tue, 7 Apr 2015 14:48:36 +0800 Subject: [PATCH 002/285] =?UTF-8?q?=E8=AF=BE=E7=A8=8B=E8=B5=84=E6=BA=90?= =?UTF-8?q?=E6=96=B0=E7=95=8C=E9=9D=A2=20=E9=A1=B9=E7=9B=AE=E5=8A=A8?= =?UTF-8?q?=E6=80=81=E5=88=86=E9=A1=B5=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/files/index.html.erb | 2 +- app/views/kaminari/_first_page.html.erb | 2 +- public/stylesheets/project.css | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/views/files/index.html.erb b/app/views/files/index.html.erb index 4b6df47cb..aefa1a5a9 100644 --- a/app/views/files/index.html.erb +++ b/app/views/files/index.html.erb @@ -1,6 +1,6 @@
    <% end; reset_cycle %> diff --git a/app/views/projects/_project_member_list.html.erb b/app/views/projects/_project_member_list.html.erb new file mode 100644 index 000000000..72dd4ded2 --- /dev/null +++ b/app/views/projects/_project_member_list.html.erb @@ -0,0 +1,23 @@ +
    +
    + 加入时间 +
    + + <% members.each do |member| %> +
    + + <%= member.user.nil? ? '' : (image_tag(url_to_avatar(member.user), :width => 32, :height => 32)) %> + + <%= l(:label_username)%> + <%= link_to(member.user.name, user_path(member.user),:class => "ml10 c_blue02") %> + <%= format_date(member.created_on)%> +
    +
    + <% end%> + +
      + <%= pagination_links_full @obj_pages, @obj_count, :per_page_links => false, :remote => false, :flag => true%> +
    +
    +
    +
    \ No newline at end of file diff --git a/app/views/projects/member.html.erb b/app/views/projects/member.html.erb index c47ba7ebc..e6760d3b3 100644 --- a/app/views/projects/member.html.erb +++ b/app/views/projects/member.html.erb @@ -3,6 +3,6 @@
    <% if @isproject %> - <%= render :partial => 'project_file', locals: {project: @project} %> + <%= render :partial => 'project_file_new', locals: {project: @project} %> <% else %> <%= render :partial => 'course_file', locals: {course: @course} %> <% end %> diff --git a/app/views/kaminari/_first_page.html.erb b/app/views/kaminari/_first_page.html.erb index 3a5b3e2dc..dcf930996 100644 --- a/app/views/kaminari/_first_page.html.erb +++ b/app/views/kaminari/_first_page.html.erb @@ -7,6 +7,6 @@ remote: data-remote -%>
  • - <%= link_to_unless current_page.first?, l('views.pagination.first').html_safe, url, :remote => remote, :class => 'next c_blue' %> + <%= link_to_unless current_page.first?, l('views.pagination.first').html_safe, url, :rel => 'next', :remote => remote, :class => 'next c_blue' %>
  • diff --git a/public/stylesheets/project.css b/public/stylesheets/project.css index 4d684f145..55be9cd4d 100644 --- a/public/stylesheets/project.css +++ b/public/stylesheets/project.css @@ -123,7 +123,7 @@ a:hover.c_dblue{ color: #0781b4;} .re_search{ margin-top:7px; margin-left:5px;} .re_schbox{ width:240px; height:24px; border:1px solid #64bdd9; color:#666666;} .re_schbtn{ width:60px; height:26px; color:#fff; margin-right:5px; border:none; margin-left:0px; } -a.re_fabu { display:block; width:90px; height:35px; font-size:14px; color:#fff; text-align:center; padding-top:5px; } +a.re_fabu { display:block; width:90px; height:30px; font-size:14px; color:#fff; text-align:center; padding-top:10px; } a:hover.re_fabu{background:#55a1b9;} .re_con{ margin:5px; width:665px;} .re_con_top{color:#494949; } From 8b379711d9a99b28c267f631c7de10d3863c731d Mon Sep 17 00:00:00 2001 From: huang Date: Tue, 7 Apr 2015 17:45:00 +0800 Subject: [PATCH 003/285] =?UTF-8?q?1=E3=80=81=E4=BF=AE=E6=94=B9=E9=99=84?= =?UTF-8?q?=E4=BB=B6=E5=88=97=E8=A1=A8=E6=8E=92=E5=88=97=E5=92=8C=E6=A0=B7?= =?UTF-8?q?=E5=BC=8F=202=E3=80=81=E8=B0=88=E8=AE=BA=E5=8C=BA=E6=A0=B7?= =?UTF-8?q?=E5=BC=8F=E6=98=BE=E7=A4=BA=203=E3=80=81=E8=AE=A8=E8=AE=BA?= =?UTF-8?q?=E5=8C=BA=EF=BC=9A=E2=80=9C=E7=BC=96=E8=BE=91=E2=80=9D=20?= =?UTF-8?q?=E2=80=9C=E5=BC=95=E7=94=A8=E2=80=9D=EF=BC=8C=20=E2=80=9C?= =?UTF-8?q?=E5=9B=9E=E5=A4=8D=E2=80=9D=204=E3=80=81=E8=AE=A8=E8=AE=BA?= =?UTF-8?q?=E5=8C=BA=E4=B8=8E=E8=AF=BE=E7=A8=8B=E5=88=86=E7=A6=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/attachments/_form_project.html.erb | 6 +- app/views/boards/_project_show.html.erb | 22 +-- app/views/messages/_form_project.html.erb | 4 +- app/views/messages/_project_show.html.erb | 4 +- app/views/messages/new.html.erb | 4 +- public/stylesheets/public.css | 183 +++++-------------- 6 files changed, 66 insertions(+), 157 deletions(-) diff --git a/app/views/attachments/_form_project.html.erb b/app/views/attachments/_form_project.html.erb index da074f4d5..9778d3242 100644 --- a/app/views/attachments/_form_project.html.erb +++ b/app/views/attachments/_form_project.html.erb @@ -2,7 +2,7 @@ <% if defined?(container) && container && container.saved_attachments %> <% if isReply %> <% container.saved_attachments.each_with_index do |attachment, i| %> - + <%= text_field_tag("attachments[p#{i}][filename]", attachment.filename, :class => 'filename readonly', :readonly=>'readonly')%> <%= text_field_tag("attachments[p#{i}][description]", attachment.description, :maxlength => 255, :placeholder => l(:label_optional_description), :class => 'description', :style=>"display: inline-block;") + link_to(' '.html_safe, attachment_path(attachment, :attachment_id => "p#{i}", :format => 'js'), :method => 'delete', :remote => true, :class => 'remove-upload') %> @@ -26,7 +26,7 @@ <% end %> <% end %> <% end %> -
    +
    -
    +
    +

    <%= h @board.name %>

    +
    +
    <% if User.current.logged? %> -
    -

    <%= l(:label_message_new) %>

    -
    <%= form_for @message, :url => new_board_message_path(@board), :html => {:multipart => true, :id => 'message-form'} do |f| %> - <%= render :partial => 'messages/form', :locals => {:f => f} %> + <%= render :partial => 'messages/form_project', :locals => {:f => f} %>

    - <%= l(:button_submit)%> - <%= link_to l(:button_cancel), "#", :onclick => '$("#add-message").hide(); return false;', :class => 'ButtonColor m3p10' %> + <%= l(:button_submit)%> + <%= link_to l(:button_cancel), "#", :onclick => '$("#add-message").hide(); return false;', :class => 'grey_btn ml10 fl' %>

    <% end %>
    +

    <% end %>
    @@ -37,15 +38,12 @@ <% end %> -
    -

    <%= h @board.name %>

    -
    项目讨论区共有<%= @topic_count %>个帖子
    <% if @project.enabled_modules.where("name = 'boards'").count > 0 && User.current.member_of?(@project) %> <%= link_to l(:label_message_new), new_board_message_path(@board), - :class => 'problem_new_btn fl c_dorange', - :onclick => 'showAndScrollTo("add-message", "message_subject"); return false;' if User.current.logged? %> + :class => 'problem_new_btn fl c_dorange', + :onclick => 'showAndScrollTo("add-message", "message_subject"); return false;' if User.current.logged? %> <% end %>
    diff --git a/app/views/messages/_form_project.html.erb b/app/views/messages/_form_project.html.erb index 92eddaab7..af8aeb3a5 100644 --- a/app/views/messages/_form_project.html.erb +++ b/app/views/messages/_form_project.html.erb @@ -1,7 +1,7 @@ <%= error_messages_for 'message' %> <% replying ||= false %> <% extra_option = replying ? { readonly: true} : { maxlength: 200 } %> - +

    <%= l(:label_message_new) %>

  • <% if replying %> @@ -41,4 +41,4 @@
  • -
  • + \ No newline at end of file diff --git a/app/views/messages/_project_show.html.erb b/app/views/messages/_project_show.html.erb index a157bb860..7df8fd389 100644 --- a/app/views/messages/_project_show.html.erb +++ b/app/views/messages/_project_show.html.erb @@ -7,7 +7,7 @@

    - <%= link_to @topic.subject, project_boards_path(@topic.project),title: @topic.subject.to_s %>

    + <%= @topic.subject %>


    由<%= link_to_user_header @topic.author,false,:class=> 'problem_name c_orange' %> 添加于<%= format_time(@topic.created_on) %>

    @@ -88,7 +88,7 @@ <% if !@topic.locked? && authorize_for('messages', 'reply') %> <% end %> - + <%= call_hook(:view_projects_settings_members_table_row, { :project => @project, :member => member}) %>
    <%= error_messages_for 'member' %> - <%= render :partial => @render_file, :locals => {:members => @members} %> + <%= render :partial => @render_file, :locals => {:members => @members} %>
    diff --git a/public/stylesheets/project.css b/public/stylesheets/project.css index 62c370b43..c6445971d 100644 --- a/public/stylesheets/project.css +++ b/public/stylesheets/project.css @@ -247,4 +247,37 @@ a.link_file_board{ background:url(../images/pic_file.png) 0 3px no-repeat !impor /*新闻*/ .hwork_new{ color:#4c4c4c;} .hwork_text{ border:1px solid #64bdd9; height:100px;width:555px; background:#fff; margin-left:5px; padding:5px; margin-bottom:10px;} -.hwork_input{ border:1px solid #64bdd9; height:22px; width:555px; background:#fff; margin-bottom:10px; padding:5px;} \ No newline at end of file +.hwork_input{ border:1px solid #64bdd9; height:22px; width:555px; background:#fff; margin-bottom:10px; padding:5px;} +/* 学生列表*/ +.st_list{ width:670px;} +.st_search{ } +.st_search span{ font-size:14px; font-weight:bold; color:#606060; margin-right:35px;} +.st_search_input{ border:1px solid #1c9ec7; background:#fff; height:20px; color:#c4c4c4; width:200px; padding-left:5px; margin-bottom:5px;} +.st_search a{ background:#1c9ec7; color:#fff;border:1px solid #1c9ec7; text-align:center; display:block; width:60px; height:20px; float:left; font-size:12px; } +.st_search a:hover{ background:#048fbb; text-decoration:none;} +.classbox{ border:1px solid #f8df8c; background:#fffce6; color:#0d90c3; padding:0 3px; float:left; margin-left:15px;} +.st_addclass{ margin-top:5px;} +.st_addclass ul li,.st_addclass a,.st_addclass img{ float:left;} +.st_addclass img{ margin-top:3px;} +.st_addclass a{ color:#0d90c3;} +.st_box{ margin-top:10px; border-top:1px solid #CCC; padding-top:10px;} +.st_box ul li{ float:left;} +.st_box_top a{ font-weight:bold; color:#7a7a7a; float:left; margin-bottom:5px;} +.st_box_top a:hover{ color:#1c9ec7;} +a.st_up{ display: block; width:8px; float:left; height:13px; background:url(../images/pic_up.png) 0 0 no-repeat; margin-top:5px; margin-left:3px;} +a.st_down{ display: block; width:8px; float:left; height:13px; background:url(../images/pic_up.png) 0 -22px no-repeat; margin-top:5px; margin-left:3px;} +a.st_img { display:block;width:32px; height:32px; border:1px solid #CCC; padding:1px;} +a:hover.st_img { border:1px solid #1c9ec7; } +.st_boxlist{ border-bottom:1px dashed #CCC; height:43px; margin-bottom:10px; } +.st_boxlist a{ float:left;} +.st_boxlist ul{ float:left; width:200px; margin-left:10px;} +.st_boxlist ul li a{ color:#5d5d5d;} +.st_boxlist ul li a span{ color:#1c9ec7;} +.st_boxlist ul li a:hover span{ color:#ff8e15;} +.ml50{ margin-left:50px;} +.ml358{ margin-left:358px;} +.ml258{ margin-left:254px;} +.ml65{ margin-left:65px;} +a:hover.st_add{ color:#ff8e15;} +.classbox_on{ border:1px solid #f8df8c; background:#f6f098; padding:0 3px; float:left; margin-left:15px;} +.classbox_on a{ color:#716cad;} \ No newline at end of file From be07c2c961d6f40fb3b88e7ced567b6ea7815358 Mon Sep 17 00:00:00 2001 From: huang Date: Wed, 8 Apr 2015 11:48:29 +0800 Subject: [PATCH 006/285] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E5=85=B3=E6=B3=A8=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/projects/watcherlist.html.erb | 53 ++++++++++--------------- 1 file changed, 22 insertions(+), 31 deletions(-) diff --git a/app/views/projects/watcherlist.html.erb b/app/views/projects/watcherlist.html.erb index 0a7a222d4..4eacf836f 100644 --- a/app/views/projects/watcherlist.html.erb +++ b/app/views/projects/watcherlist.html.erb @@ -1,36 +1,27 @@ -

    <%= l(:label_user_watcher)%>

    -
    - <% for user in @project.watcher_users %> -
      -
    • - - - - - -
      <%= image_tag(url_to_avatar(user), :class => "avatar") %> - - - - - - - - - -

      <%= content_tag "div", link_to_user(user), :class =>"project_avatar_name" %>

      -

      - <% unless user.memberships.empty? %> - <%= l(:label_contribute_to, :count => user.memberships.count) %> - <% for member in user.memberships %> - <%= link_to_project(member.project) %><%= (user.memberships.last == member) ? '' : ',' %> - <% end %> - <% end %> -

      <%= l(:label_user_joinin) %> <%= format_date(user.created_on) %> -
    -<% end %> +
    +
    + 加入时间 +
    + + <% for user in @project.watcher_users %> +
    + + <%= user.nil? ? '' : (image_tag(url_to_avatar(user), :width => 32, :height => 32)) %> + + <%= l(:label_username)%> + <%= link_to_user(user) %> + + <%= format_date(user.created_on) %> +
    +
    + <% end%> + + +
    +
    + <% html_title(l(:label_followers)) -%> \ No newline at end of file From 34321d35eccff379af036dd6f255d2a0c89c3450 Mon Sep 17 00:00:00 2001 From: huang Date: Wed, 8 Apr 2015 12:01:46 +0800 Subject: [PATCH 007/285] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E5=9B=BE=E7=89=87=20=E5=8A=A8=E6=80=81=E7=AE=AD=E5=A4=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/images/close.png | Bin 121 -> 1637 bytes public/images/img_project.png | Bin 0 -> 2047 bytes public/images/logo.jpg | Bin 0 -> 172650 bytes public/images/logo.png | Bin 6624 -> 2388 bytes public/images/pic_01.jpg | Bin 0 -> 168098 bytes public/images/public_icon.png | Bin 0 -> 2949 bytes public/images/sidebar_bg.png | Bin 9042 -> 9114 bytes public/stylesheets/pleft.css | 2 +- 8 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 public/images/img_project.png create mode 100644 public/images/logo.jpg create mode 100644 public/images/pic_01.jpg create mode 100644 public/images/public_icon.png diff --git a/public/images/close.png b/public/images/close.png index 3dd76e69cb5fc8068e2a9db4ce105ff704894cfb..301ba5e85e4af660ec48808a6b3c37aac00e2f78 100644 GIT binary patch literal 1637 zcmeAS@N?(olHy`uVBq!ia0vp^QXtI11|(N{`J4k%k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+m=!WZB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxKsVXI%s|1+P|wiV z#N6CmN5ROz&_Lh7NZ-&%*U;R`*vQJjKmiJrfVLH-q*(>IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8EkR}&8R-I5=oVMzl_XZ^<`pZ$OmImpPAEg{v+u2}(t{7puX=A(aKG z`a!A1`K3k4z=%sz23b{L$o& z6x?nx#;I2y=oo!av?4__ObD2EKuma|1#;lYJ~a=R){B6NI_pLIVFm`K+nz3tAr-gQ zOuL^QlqhlhyyfLPr%dmt)IW(4T9osmwcN90vVva(OPq*so8KOfkMf4^%N{>9(`EO1 zSPn6vJd`)|f?75E_KMy=V^jYrQ_2;$w&i~%C#6v}i z#fejg;d6t;4Awe^`v&=q{68e~Cos2MIG)c?+)^-y@%MpjJ4ZdmFYDh%WL){dX~W!i zlUrEC)v!LE?Hz;Gqx(rr7noxo7|*{TQXoD-@W1?udAbjl{BM|fE;pe~BL2=HH!Jlm z2iAFNh+Ohk5z3mOAGJ1Y=Kc5k&u#2ApXsDhc712T&X{Q_MlS_~B4c8vIv%1%9 z@#_++@(``7F=n$%H(dwvO(uG*nd-IFdH(tB)(V+ZI%XVtS?IPm?){CNZSGvHPRB%? zm2Tg@y}H%u;epp*FEQ=zmI`&{v|M{LXP%`@pRCF>ucdF)CTCVDX(2-lSe*I-< zs{*#UJp3CJ+1es>)QWfBv7PI;eTv`m`D{#$)0HFsingBDJa{3)WU`8GN;h(8G z#p~&sh8xvsy{q0_EwFgwq9oV<-15G7K=5L_;MG?@Wte0=tysz~G9&qs_J$VzL;Gh} zRaFUfx}0*FeLrt|wTW+d_1-x4Z97gzxhc87;atr;?YM>7J_i3^sfm31*y=3o*#uJ> zc;w#BS^P(MUQg7u02$NCJiG00I06v^1kLrQHXdPd6B=u;&Qx zy1iGjs^KjR*T6%C9| z4;dX;16&JyPZSksintb(o``8tTBGN@oiA8c%v^AF$A(fD%Q-6)6a;1*ap7iQlPV6d TNK=vnn#JJh>gTe~DWM4fxqKr7 diff --git a/public/images/img_project.png b/public/images/img_project.png new file mode 100644 index 0000000000000000000000000000000000000000..b0e5a495f44b623250ab235c8aa4208fc3177e89 GIT binary patch literal 2047 zcmZvd`#;l*AICp7mlcbQgD|7()n*0{|tB|3?NWDnaa&2B8E$F95h~0sv|00I>dJ$1?yx#{s}B z4FK$J1AxwjeCnTW0HBcJfp_vx7@03kJ$oVy@yc=T1~UZVY<@~v(*<`c0|!?Q)iW{I zcFjX%mYceA^~`U}UDz0V!dkpkHnqK+d`CKPjm7%nv)l~QFW}0CcyU=}G~}%anZVq| zKw{&S65r44C}#2CFy^;IGG!p*qqi}#^O(EUMVpcnVmWcrvt1;|rT^4Ir~in5(Ew?( z*-d`q5ckO>kO9{&k_#ki2Sq}AF@Ja?E1dp`r&g+%QW33 z)ui!G71bt1l8;(}FMtG0f#T}hs}Iv7$(!V((elyY@X%ST zY&4Jx{sFu)MOVuHb8$_v+>3(SRZVkR;DqlIs@SZ65Ud8Ui@Nint(}z z4hze|h$^3886IKE?|>x7jJcsHiuKI`)bZ}%!xeS@l}*BWJ$G)%0oug^PRMUcsyP><7hI#HiS~!1ZDs%9=n;6&4GQX;Qzfa19|t zW(@^_w818e3aRc_*TJo^bn$w(!T`m!J1dyR>7H~MiHy~&B{7j-rM|1o=GHnpR@HRm zWBqqQ>-0L0PWcG-KL`uX_5#aX9H~3wuw==z_CIH
    inMY*6d@7H>~W2oDoXi>hv zmw8Wi>2>L+S!szd-X9actZvq4Zq2JzCt7zODO9yBRy0)H^Rhw$OC6u{ZRicmF_6k6 zdN#Eqgmvwc3qN7Y$)BC9d{q6e^4jV(A_768|@YFj5)<2A%6Ep*l-Gul@QT@;YY2F)e!JK$>M9o4wQNq zT<1=0<{B>B7|P%n%+r$vWvqtLP_zlvZiTbXUN7&5cjn2yOnO~db}h5T>inO+d#-#c z@7D}{ylOY0ONZH3Y@el!eRvE`a39xqmk26&m8ejufIxOt$yv{do(RZ>w0J!@pAml8 z=^a&tkQSZ1yN|m7s+CPJjwM&WK~7bCdsf)$`Kv~jd#uwGGyME0 z+!dNPUP{$A2zpIq!-hie88#Gb-6kUc#EMnE_t0;5UoABg*TyV3nOmqepz~x=?zBx1 zyJu1dZZ0k&zOm_$$6pR&Nkn|(gI~^=oP*nvWWxJ3#pZd85tgSl z9yE_Um{qY{HlHf3aXq>*8`tetxsepmjN`XP8{SM(ligO*yUC(I@? zW)u@gFmsEjOcGk}^1yt^UMzi!?mlK1N8ll69};!xZjiQy$eDfc$^*wctk4%W&6Yeo zw*%3YJf{RbTl-LBq4fbGL0|3m5W57cx@4?=`li1f8}g{Y%rIQb{Clqv*1~`56J$A0 z!DJWd=fKZv!4COOBzj|HxqZ;kNGMZXAfHzXUF_BoB zO5cWj2PlkD zK{SgMbd?TebRn^Wi?YvqxaDV5;*DEY-mQR*U>fc05ep+}0Rx47Gdihe8Hqd38}M)? K;j5i#SN;ZTPN{Phz6d#|p!8U*0&T`f6kT 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 diff --git a/public/images/pic_01.jpg b/public/images/pic_01.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bf6678e2250793e119a97d174d4844cbe6bec6ba GIT binary patch literal 168098 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 literal 0 HcmV?d00001 diff --git a/public/images/public_icon.png b/public/images/public_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..7134ded4218dec8f9b259eadb7d6b0369fbd5a56 GIT binary patch literal 2949 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 literal 0 HcmV?d00001 diff --git a/public/images/sidebar_bg.png b/public/images/sidebar_bg.png index 014b14466f58ffb652be8db956f280d9c90ce8df..2704727d7d7984e6fb748b28a35ee9e14cf25d84 100644 GIT binary patch delta 6142 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 diff --git a/public/stylesheets/pleft.css b/public/stylesheets/pleft.css index 4a6ecc5bf..9a20a97d3 100644 --- a/public/stylesheets/pleft.css +++ b/public/stylesheets/pleft.css @@ -31,7 +31,7 @@ a:hover.pr_join_a{ background:#41a8c8;} /*左侧导航*/ .subNavBox{width:240px; background:#fff;margin:10px 10px 0 0;} .subNav{border-bottom:solid 1px #e5e3da;cursor:pointer;font-weight:bold;font-size:14px;color:#3ca5c6; height:26px;padding-left:10px;background-color:#fff; padding-top:2px;} -a.subNav_jiantou{background:url(../images/jiantou1.jpg) no-repeat;background-position:95% 50%; background-color:#fff;} +.subNav_jiantou{background:url(../images/jiantou1.jpg) no-repeat;background-position:95% 50%; background-color:#fff;} a:hover.subNav_jiantou:hover{color:#0781b4; } .currentDd{color:#0781b4; } .currentDt{background-color:#fff; } From 069f59805d23fe040e26236d4b4afe646f373eef Mon Sep 17 00:00:00 2001 From: huang Date: Wed, 8 Apr 2015 12:59:24 +0800 Subject: [PATCH 008/285] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=B7=A6=E4=BE=A7?= =?UTF-8?q?=E6=96=B0=E5=BB=BA=E6=8C=89=E9=92=AE=E5=B1=85=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/stylesheets/pleft.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/stylesheets/pleft.css b/public/stylesheets/pleft.css index 9a20a97d3..f20a123c9 100644 --- a/public/stylesheets/pleft.css +++ b/public/stylesheets/pleft.css @@ -39,7 +39,7 @@ a:hover.subNav_jiantou:hover{color:#0781b4; } .navContent li a{display:block;width:240px;heigh:28px;text-align:center;font-size:12px;line-height:28px;color:#333} .navContent li a:hover{color:#fff;background-color:#b3e0ee} a.subnav_num{ font-weight:normal; color:#ff7143; font-size:12px;} -a.subnav_green{ background:#28be6c; color:#fff; font-size:12px; font-weight:normal;height:18px; padding:0px 5px; padding-top:2px; display:block; margin-top:2px; margin-bottom:5px; float:right; margin-right:5px;} +a.subnav_green{ background:#28be6c; color:#fff; font-size:12px; font-weight:normal;height:18px; padding:0px 5px; padding-top:2px; display:block; margin-top:2px; margin-bottom:5px; float:right; margin-right:5px;line-height:1.4 !important;} a:hover.subnav_green{ background:#14ad5a;} From b415575e0e80e58b6f1f2eedd7abc0eb6bed6636 Mon Sep 17 00:00:00 2001 From: huang Date: Thu, 9 Apr 2015 08:43:51 +0800 Subject: [PATCH 009/285] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=96=B0=E7=BC=BA?= =?UTF-8?q?=E9=99=B7=E5=88=97=E8=A1=A8=20=E5=AE=8C=E6=88=90=E9=83=A8?= =?UTF-8?q?=E5=88=86=E9=A1=B9=E7=9B=AE=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/application_helper.rb | 8 +++ app/helpers/issues_helper.rb | 12 ++++ app/helpers/projects_helper.rb | 2 +- app/views/common/_project_tab.html.erb | 28 ++++++++ app/views/issues/_form.html.erb | 5 +- app/views/issues/_list.html.erb | 12 ++-- app/views/issues/new.html.erb | 4 +- app/views/layouts/base_projects.html.erb | 17 +++-- app/views/projects/_project_members.html.erb | 49 +++++++++++++ app/views/projects/settings.html.erb | 2 +- public/javascripts/project.js | 18 +++++ public/stylesheets/project.css | 62 +++++++++++++--- public/stylesheets/public.css | 74 ++++++++++++++------ 13 files changed, 247 insertions(+), 46 deletions(-) create mode 100644 app/views/common/_project_tab.html.erb create mode 100644 app/views/projects/_project_members.html.erb diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 7fb0dcb7e..823db4729 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -488,6 +488,14 @@ module ApplicationHelper end end + def render_project_settings_tabs(tabs) + if tabs.any? + render :partial => 'common/project_tab', :locals => {:tabs => tabs} + else + content_tag 'p', l(:label_no_data), :class => "nodata" + end + end + # Renders the project quick-jump box def render_project_jump_box return unless User.current.logged? diff --git a/app/helpers/issues_helper.rb b/app/helpers/issues_helper.rb index 6a708051a..17c39b3fe 100644 --- a/app/helpers/issues_helper.rb +++ b/app/helpers/issues_helper.rb @@ -67,6 +67,18 @@ module IssuesHelper s.html_safe end + def link_to_issue_type + if column_content[1].to_s == "缺陷" + class_type = "red_btn_cir ml10" + elsif column_content[1] == "功能" + class="blue_btn_cir ml10" + elsif column_content[1] == "支持" + class="green_btn_cir ml10" + else + class_type="orange_btn_cir ml10"> + end + end + def render_issue_subject_with_tree(issue) s = '' ancestors = issue.root? ? [] : issue.ancestors.visible.all diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb index 3c1663fcb..4a790790e 100644 --- a/app/helpers/projects_helper.rb +++ b/app/helpers/projects_helper.rb @@ -29,7 +29,7 @@ module ProjectsHelper {:name => 'modules', :action => :select_project_modules, :partial => 'projects/settings/modules', :label => :label_module_plural}, {:name => 'members', :action => :manage_members, :partial => 'projects/settings/members', :label => :label_member_plural}, {:name => 'versions', :action => :manage_versions, :partial => 'projects/settings/versions', :label => :label_version_plural}, - {:name => 'categories', :action => :manage_categories, :partial => 'projects/settings/issue_categories', :label => :label_issue_category_plural}, + # {:name => 'categories', :action => :manage_categories, :partial => 'projects/settings/issue_categories', :label => :label_issue_category_plural}, # {:name => 'wiki', :action => :manage_wiki, :partial => 'projects/settings/wiki', :label => :label_wiki}, {:name => 'repositories', :action => :manage_repository, :partial => 'projects/settings/repositories', :label => :label_repository_plural}, #{:name => 'boards', :action => :manage_boards, :partial => 'projects/settings/boards', :label => :label_board_plural}, diff --git a/app/views/common/_project_tab.html.erb b/app/views/common/_project_tab.html.erb new file mode 100644 index 000000000..95ac48c59 --- /dev/null +++ b/app/views/common/_project_tab.html.erb @@ -0,0 +1,28 @@ +<% selected_tab = params[:tab] ? params[:tab].to_s : tabs.first[:name] %> +
    +
    +
      + <% tabs.each do |tab| -%> +
    • <%= link_to l(tab[:label]), { :tab => tab[:name] }, + :id => "tab-#{tab[:name]}", + :class => (tab[:name] != selected_tab ? 'hwork_normaltab' : 'hwork_hovertab'), + :onclick => "showTab('#{tab[:name]}'); this.blur(); return false;" %>
    • + <% end -%> +
    + +
    +
    + + +<% tabs.each do |tab| -%> + <%= content_tag('div', render(:partial => tab[:partial], :locals => {:tab => tab} ), + :id => "tab-content-#{tab[:name]}", + :style => (tab[:name] != selected_tab ? 'display:none' : nil), + :class => 'hwork_normaltab') %> +<% end -%> diff --git a/app/views/issues/_form.html.erb b/app/views/issues/_form.html.erb index fb2fa9e55..0f86f466e 100644 --- a/app/views/issues/_form.html.erb +++ b/app/views/issues/_form.html.erb @@ -6,6 +6,7 @@ //issue_project_id } + <%= labelled_fields_for :issue, @issue do |f| %> <%= call_hook(:view_issues_form_details_top, { :issue => @issue, :form => f }) %> @@ -22,8 +23,8 @@ <% if @issue.safe_attribute? 'tracker_id' %>

    <%= f.select :tracker_id, @issue.project.trackers.collect {|t| [t.name, t.id]}, {:required => true}, - :onchange => "updateIssueFrom('#{escape_javascript project_issue_form_path(@project, :id => @issue, :format => 'js')}')" %>

    - + :onchange => "updateIssueFrom('#{escape_javascript project_issue_form_path(@project, :id => @issue, :format => 'js')}')" %>

    + <% end %> diff --git a/app/views/issues/_list.html.erb b/app/views/issues/_list.html.erb index 727e7a1a5..5a05501d9 100644 --- a/app/views/issues/_list.html.erb +++ b/app/views/issues/_list.html.erb @@ -5,15 +5,15 @@ <% end %>
    - <% column_content = ( query.inline_columns.map {|column| "#{column_content_new(column, issue)}"}) %> <% unless issue.author.nil? || issue.author.name == "Anonymous" %> - <%= image_tag(url_to_avatar(issue.author), :width => "42", :height => "42") %> +
    <%= link_to issue.author.name, user_path(issue.author), :class => "problem_name c_orange fl" %> - <%= l(:label_post_on_issue) %>(<%= "#{raw column_content[2]}" %>): - <%=link_to column_content[4], issue_path(issue.id), :class => "problem_tit fl" %>
    -

    <%= textilizable issue, :description %>


    + <%= l(:label_post_on_issue) %>(<%= "#{raw column_content[2]}" %>): + <%=link_to column_content[4], issue_path(issue.id), :class => "problem_tit02 fl" %> + +

    <% unless issue.assigned_to_id.nil? %> <%= l(:field_assigned_to) %> @@ -22,6 +22,8 @@ <%= l(:label_updated_time_on, format_date(issue.updated_on)).html_safe %>

    + 001 +
    <% end %>
    diff --git a/app/views/issues/new.html.erb b/app/views/issues/new.html.erb index 51ebd139e..a2facd5ab 100644 --- a/app/views/issues/new.html.erb +++ b/app/views/issues/new.html.erb @@ -26,9 +26,9 @@

    <% end %> - +

    <%= render :partial => 'attachments/form', :locals => {:container => @issue} %>

    - + <% if @issue.safe_attribute? 'watcher_user_ids' -%>

    <% end %> @@ -170,10 +167,18 @@
    -

    <%= l(:label_project_overview) %>

    <%= @project.description %> +

    <%= l(:label_course_brief_introduction)%>:

    +
    + <%= textilizable(@project.description) if @project.description && !@project.description.blank? %> +
    -
    <%= l(:label_expend_information) %>
    -
    +
    + <%= l(:label_expend_information)%> + + + +
    +

    <%= l(:label_tag)%>:

    diff --git a/app/views/projects/_project_members.html.erb b/app/views/projects/_project_members.html.erb new file mode 100644 index 000000000..3f91f9269 --- /dev/null +++ b/app/views/projects/_project_members.html.erb @@ -0,0 +1,49 @@ +
    +
      +
    • + + 用户 + + + 角色 + + +
    • + +
      + <%= render :partial => "courses/member" %> +
      +
    +
    +
    +

    添加成员

    + <%= form_for(@member, {:as => :membership, :url => course_memberships_path(@project), :remote => true, :method => :post}) do |f| %> + + <% end%> +
    \ No newline at end of file diff --git a/app/views/projects/settings.html.erb b/app/views/projects/settings.html.erb index a5ecac20a..68f49689b 100644 --- a/app/views/projects/settings.html.erb +++ b/app/views/projects/settings.html.erb @@ -4,6 +4,6 @@ <% if @project.project_type == 1 %> <%= render_tabs course_settings_tabs %> <% else %> - <%= render_tabs project_settings_tabs %> + <%= render_project_settings_tabs project_settings_tabs %> <% end %> <% html_title(l(:label_settings)) -%> diff --git a/public/javascripts/project.js b/public/javascripts/project.js index bdeb446d0..6dc772f1e 100644 --- a/public/javascripts/project.js +++ b/public/javascripts/project.js @@ -127,3 +127,21 @@ function submitFocus(obj) { $(obj).focus(); } + +//当项目描述长度小于112px时,不显示更多按钮 +$(function(){ + if($("#course_description_content").height()>112) + { + $("#lg-foot").show(); + } +}); + +//配置项目信息 +function course_setting(id) +{ + //alert(id); + $('#tb_'+id).removeClass().addClass("hwork_hovertab"); + $('#tbc_0'+id).removeClass().addClass("dis"); + $('#tb_'+(3-id)).removeClass().addClass("hwork_normaltab"); + $('#tbc_0'+(3-id)).removeClass().addClass("undis"); +} \ No newline at end of file diff --git a/public/stylesheets/project.css b/public/stylesheets/project.css index c6445971d..b79b78beb 100644 --- a/public/stylesheets/project.css +++ b/public/stylesheets/project.css @@ -52,22 +52,37 @@ a.invi_search_btn{ background:#15bccf; color:#fff; text-align: center; width:40p a:hover.invi_search_btn{ background:#0da1b2; border:1px solid #0da1b2;} .rolebox{ 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_top{ margin:10px 0 ;} +.problem_search_input{ border:1px solid #64bdd9; width:180px; height:24px; color:#9b9b9b; padding-left:5px; margin-bottom:5px;} a.problem_search_btn{ background:#64bdd9; color:#fff; text-align: center; width:40px; height:22px;border:1px solid #64bdd9; padding-top:2px; cursor:pointer;} a:hover.problem_search_btn{ background:#3da1c1; border:1px solid #3da1c1;} -a.problem_new_btn{ margin-left:10px; border:1px solid #ff7143; color:#ff7143; padding:1px 3px; font-size:12px; text-align:center; padding-top:2px;} +a.problem_new_btn{ margin-left:10px; border:1px solid #ff7143; color:#ff7143; width:60px; height:21px; font-size:12px; text-align:center; padding-top:3px;} a:hover.problem_new_btn{ background:#ff7143; color:#fff;} .problem_p{ color:#535252; margin-top:5px;} .problem_p span{ color:#ff3e00;} a.problem_pic{ display:block; width:42px; height:42px; padding:3px; border:1px solid #e3e3e3; margin-top:5px;} a:hover.problem_pic{border:1px solid #64bdd9;} -.problem_txt{ width:610px; margin-left:10px; color:#777777;} -a.problem_name{ color:#ff5722;} +.issues_icon{ background:url(../images/public_icon.png) 0 -342px no-repeat; width:16px; height:21px;} +.problem_txt{ width:600px; margin-left:10px; color:#777777; } +.pro_txt_w{width:610px;} +a.problem_name{ color:#ff5722; } a:hover.problem_name{ color:#d33503;} -a.problem_tit{ color:#0781b4; width:430px; display:block; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;} -a:hover.problem_tit{ color:#09658c; } +a.problem_tit{ color:#0781b4; width:430px; font-weight:bold; display:block; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;} +a.problem_tit02{ color:#0781b4; font-weight:bold;width:400px; } +a:hover.problem_tit,a:hover.problem_tit02{ color:#09658c; } .problem_main{ border-bottom:1px dashed #d4d4d4; padding-bottom:10px; margin-bottom:10px;} +a.pro_mes{ float:left; color:#a0a0a0; display:block; width:100px; height:20px; } +a.pro_mes_w{ height:20px; float:left;display:block; color:#999999;} + +.pro_page_top{ font-size:14px; border-bottom:2px solid #64bdd9; margin-bottom:10px; padding-bottom:5px;} +.pro_page_tit{color:#3e4040; font-weight:bold;width:480px; float:left; font-size:14px; margin-bottom:5px;} +.pro_pic_box{ margin-left:60px; } +.pro_pic{ width:100px; border:2px solid #CCC; margin:10px 0;} +.pro_info_box{ margin-left:60px; background:#f0fbff; height:80px; padding:10px 0;} +.pro_info_box ul{} +.pro_info_box ul li{ margin-bottom:10px;} +.pro_info_p{ color:#0781b4; float:left; } +.edit_pro_box{overflow:hidden;display:none; margin-bottom:30px; border-bottom:1px dashed #CCC; padding-bottom:10px;} /****翻页***/ ul.wlist{ float:right; border-bottom:none; height:30px; margin-top:20px; } ul.wlist li{float: left;} @@ -280,4 +295,35 @@ a:hover.st_img { border:1px solid #1c9ec7; } .ml65{ margin-left:65px;} a:hover.st_add{ color:#ff8e15;} .classbox_on{ border:1px solid #f8df8c; background:#f6f098; padding:0 3px; float:left; margin-left:15px;} -.classbox_on a{ color:#716cad;} \ No newline at end of file +.classbox_on a{ color:#716cad;} + +/*项目配置*/ +.hwork_new{ color:#4c4c4c;} +.c_red{ color:#F00;} +.hwork_input{ border:1px solid #64bdd9; height:22px; width:555px; background:#fff; margin-bottom:10px; padding:5px;} +.hwork_input02{ border:1px solid #64bdd9; height:15px; width:120px; background:#fff; margin-bottom:10px; padding:5px;} +.hwork_text{ border:1px solid #64bdd9; height:100px;width:555px; background:#fff; margin-left:5px; padding:5px; margin-bottom:10px;} +.hwork_new ul li{ } +.ml21{ margin-left:21px;} +.ml9{ margin-left:9px;} +.hwork_ttl{height:24px;} +.hwork_ctt{height:auto; padding-left:10px;clear:both;} +.hwork_tb_{ border-bottom:3px solid #e4e4e4; text-align:center;} +.hwork_tb_ ul{height:24px;} +.hwork_tb_ li{float:left;height: 24px;width: auto; padding:0 10px;cursor:pointer;} +.hwork_normaltab { color:#15bccf ; border-bottom:3px solid #e4e4e4; } +.hwork_hovertab { color:#656767; font-weight:bold; border-bottom:3px solid #15bccf; } +.hwork_dis{display:block; } +.hwork_undis{display:none;} +.project_none{ display:none;} +.about_project{ overflow:hidden;display:none;} +/* 新建问题 */ +.newpro_box{ color:#6d6d6d;} +.newpro_box02{ color:#6d6d6d; margin-bottom:10px; } +.newpro_box ul li{ } +.newpro_box input{ height:26px; float:left; margin-bottom:10px;} +.newpro_box textarea{ height:150px; float:left; margin-bottom:10px;} +.newpro_box select{ height:26px; float:left; margin-bottom:10px;} +.label{ width:80px; text-align:right; font-size:14px; display:block; float:left;} +.label02{ width:110px; text-align:right; font-size:14px; display:block; float:left;} +.collapsible{ border-left:none;border-right:none;border-bottom:none; border-top:1px solid #e4e4e4; padding-top:10px; } diff --git a/public/stylesheets/public.css b/public/stylesheets/public.css index 8f2563168..77d4db195 100644 --- a/public/stylesheets/public.css +++ b/public/stylesheets/public.css @@ -8,11 +8,42 @@ a:link,a:visited{color:#7f7f7f;text-decoration:none;} a:hover,a:active{color:#000;} /*常用*/ +select,input,textarea{ border:1px solid #64bdd9; background:#fff; color:#000; padding-left:5px; } +.sub_btn{ cursor:pointer; -moz-border-radius:3px; -webkit-border-radius:3px; border:1px solid #707070; color:#000; border-radius:3px; padding:1px 10px; margin-bottom:10px; background:#dbdbdb;} +.sub_btn:hover{ background:#b5e2fa; color:#000; border:1px solid #3c7fb1;} +table{ background:#fff;} +.more{ font-weight:normal; color:#999; font-size:12px;} +.no_line{ border-bottom:none;} +.no_border{ border:none;} + +/* font & color */ +h2{ font-size:18px; color:#15bccf;} +h3{ font-size:14px; color:#e8770d;} +h4{ font-size:14px; color:#3b3b3b;} +.f12{font-size:12px; font-weight:normal;} +.f14{font-size:14px;} +.f16{font-size:16px;} +.f18{font-size:18px;} +.fb{font-weight:bold;} +.lh20{line-height:20px;} +.lh22{line-height:22px;} +.lh24{line-height:24px;} +.lh26{line-height:26px;} +.fmYh{font-family:"MicroSoft Yahei";} +.font999{ color:#999;} +.fontRed{color:#770000;} + +/* Float & Clear */ .cl{ clear:both; overflow:hidden; } -.fl{ float: left;} -.fr{ float:right;} +.fl{float:left;display:inline;} +.fr{float:right;display:inline;} .f_l{ float:left;} .f_r{ float:right;} +.clearfix:after{clear:both;content:".";display:block;font-size:0;height:0;line-height:0;visibility:hidden} +.clearfix{clear:both;zoom:1} +.break_word{ word-break:break-all; word-wrap: break-word;} + +/* Spacing */ .ml2{ margin-left:2px;} .ml3{ margin-left:3px;} .ml4{ margin-left:4px;} @@ -21,6 +52,7 @@ a:hover,a:active{color:#000;} .ml10{ margin-left:10px;} .ml15{ margin-left:15px;} .ml20{ margin-left:20px;} +.ml40{ margin-left:40px;} .ml45{ margin-left:45px;} .ml55{ margin-left:55px;} .ml30{ margin-left:30px;} @@ -38,10 +70,13 @@ a:hover,a:active{color:#000;} .mb5{ margin-bottom:5px;} .mb10{ margin-bottom:10px;} .pl15{ padding-left:15px;} +.w90{ width:90px;} +.w150{ width:150px;} .w280{ width:280px;} .w430{ width:470px;} .w520{ width:520px;} .w557{ width:557px;} +.w583{ width:583px;} .w350{ width:350px;} .w610{ width:610px;} .w600{ width:600px;} @@ -49,14 +84,11 @@ a:hover,a:active{color:#000;} .h50{ height:50px;} .h150{ height:150px;} -h2{ font-size:18px; color:#15bccf;} -h3{ font-size:14px; color:#e8770d;} -h4{ font-size:14px; color:#3b3b3b;} - +/* Font & background Color */ a.b_grey{ background: #F5F5F5;} a.b_dgrey{ background: #CCC;} -a.c_orange{color:#e8770d;} -a:hover.c_orange{color: #F30;} +a.c_orange{color:#ff5722;} +a:hover.c_orange{color: #d33503;} a.c_lorange{color:#ff9900;} a:hover.c_lorange{color:#fff;} a.c_blue{ color:#15bccf;} @@ -75,10 +107,6 @@ a:hover.c_blue02{color: #0781b4;} a.c_red{ color:#F00;} a:hover.c_red{ color: #C00;} -.f14{ font-size:14px;} -.fb{ font-weight:bold;} -.f12{ font-size:12px; font-weight:normal;} - .b_grey{ background: #F5F5F5;} .b_dgrey{ background: #CCC;} .c_orange{color:#e8770d;} @@ -91,6 +119,7 @@ a:hover.c_red{ color: #C00;} .b_green{background:#28be6c;} .b_w{ background:#fff;} +/* commonBtn */ .grey_btn{ background:#d9d9d9; color:#656565;font-size:14px; font-weight:normal; text-align:center;padding:2px 10px;} a.grey_btn{ background:#d9d9d9; color:#656565;font-size:14px; font-weight:normal; text-align:center;padding:2px 10px;} a:hover.grey_btn{ background:#717171; color:#fff;} @@ -100,19 +129,21 @@ a:hover.blue_btn{ background:#329cbd;} .nolink_btn{ background:#BCBCBC; color: #fff; padding:2px 5px;} .more_btn{-moz-border-radius:3px; -webkit-border-radius:3px; border:1px solid #9DCEFF; color:#9DCEFF; border-radius:3px; padding:0px 3px;} .upbtn{ margin:42px 0 0 10px; border:none;} +.red_btn_cir{ background:#e74c3c; padding:1px 10px; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; color:#fff; font-weight:normal;font-size:12px;} +.green_btn_cir{ background:#28be6c; padding:1px 10px; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; color:#fff; font-weight:normal;font-size:12px;} +.blue_btn_cir{ background:#3498db; padding:1px 10px; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; color:#fff; font-weight:normal;font-size:12px;} +.orange_btn_cir{ background:#e67e22; padding:1px 10px; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; color:#fff; font-weight:normal; font-size:12px;} /* commonpic */ .pic_date{ display:block; background:url(../images/public_icon.png) -31px 0 no-repeat; width:16px; height:15px; float:left;} .pic_add{ display:block; background:url(../images/public_icon.png) -31px -273px no-repeat; width:16px; height:15px; float:left;} .pic_sch{ display:block; background:url(../images/public_icon.png) -31px -195px no-repeat; width:16px; height:15px; float:left;} +.pic_mes{ display:block; background:url(../images/public_icon.png) 0px -376px no-repeat; width:20px; height:15px; padding-left:18px;} +.pic_img{ display:block; background:url(../images/public_icon.png) -31px -419px no-repeat; width:20px; height:15px; } +.pic_del{ display:block; background:url(../images/public_icon.png) 0px -235px no-repeat; width:20px; height:15px; } + -.more{ font-weight:normal; color:#999; font-size:12px;} -.no_line{ border-bottom:none;} -select,input,textarea{ border:1px solid #ccc; background:#fff; color:#999; padding-left:5px;} -.sub_btn{ cursor:pointer; -moz-border-radius:3px; -webkit-border-radius:3px; border:1px solid #ccc; color:#999; border-radius:3px; padding:2px 10px; margin-bottom:10px;} -.sub_btn:hover{ background:#999; color:#fff; } -table{ background:#fff;} /*框架主类容*/ #Container{ width:940px; margin:0 auto; } @@ -151,7 +182,7 @@ div#menu ul ul a.parent {background: url(../images/item.png) -20px 6px no-repea div#menu ul ul a.parent:hover {background: url(../images/item.png) -20px -11px no-repeat;} /* menu::level1 */ div#menu a { padding: 5px 12px 0 10px;line-height: 30px; color: #fff;} -/*div#menu li { background: url(../images/main-delimiter.png) 98% 4px no-repeat; }*/ +div#menu li { background: url(images/main-delimiter.png) 98% 4px no-repeat; } div#menu li.last { background: none; } /* menu::level2 */ div#menu ul ul li { background: none; } @@ -164,7 +195,6 @@ div#menu ul ul li {width: 100%;} div#menu ul ul ul {padding: 0;margin: -38px 0 0 92px !important; width:140px; } div#menu ul ul ul li a{ width:125px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;color:#15bccf;} - /*主类容*/ #Main{ background:#fff; margin-bottom:10px;} #content{} @@ -217,7 +247,8 @@ a:hover.close_btn {background-position:-66px 0;} .show_btn {background-position:-119px 0;} .msgserver a {color:#15bccf; } .msgserver a:hover { text-decoration:underline; } -.break_word{word-break: break-all;word-wrap: break-word;} + + /***** Ajax indicator ******/ #ajax-indicator { position: absolute; /* fixed not supported by IE */ @@ -324,6 +355,7 @@ div.flash.warning, .conflict { .conflict-details {font-size:80%;} /***** end Flash & error messages ****/ + /*弹出框*/ .black_overlay{display:none;position:fixed;top:0px;left:0px;width:100%;height:100%;background-color:black;z-index:1001;-moz-opacity:0.8;opacity:.80;filter:alpha(opacity=80);} .white_content{display:none;position:fixed;top:15%;left:30%;width:420px;height: auto; margin-bottom:20px;padding:16px;border:3px solid #15bccf;background-color:white;z-index:1002;overflow:auto;} From 45fa01c773d4273552ae842689e3b0a2a914754b Mon Sep 17 00:00:00 2001 From: huang Date: Thu, 9 Apr 2015 09:22:09 +0800 Subject: [PATCH 010/285] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=BC=BA=E9=99=B7?= =?UTF-8?q?=E4=B8=8D=E8=83=BD=E6=98=BE=E7=A4=BA=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/issues_helper.rb | 14 +-- app/views/courses/settings.html.erb | 150 ++++++++++++++-------------- public/javascripts/course.js | 88 ++++++++-------- 3 files changed, 126 insertions(+), 126 deletions(-) diff --git a/app/helpers/issues_helper.rb b/app/helpers/issues_helper.rb index 17c39b3fe..ffdabc3dc 100644 --- a/app/helpers/issues_helper.rb +++ b/app/helpers/issues_helper.rb @@ -67,15 +67,15 @@ module IssuesHelper s.html_safe end - def link_to_issue_type - if column_content[1].to_s == "缺陷" + def link_to_issue_type(value) + if value == "缺陷" class_type = "red_btn_cir ml10" - elsif column_content[1] == "功能" - class="blue_btn_cir ml10" - elsif column_content[1] == "支持" - class="green_btn_cir ml10" + elsif value == "功能" + class_type = "blue_btn_cir ml10" + elsif value == "支持" + class_type = "green_btn_cir ml10" else - class_type="orange_btn_cir ml10"> + class_type = "orange_btn_cir ml10" end end diff --git a/app/views/courses/settings.html.erb b/app/views/courses/settings.html.erb index 569ae302b..97c5ecf04 100644 --- a/app/views/courses/settings.html.erb +++ b/app/views/courses/settings.html.erb @@ -1,76 +1,76 @@ -
    -

    <%= l(:label_course_modify_settings)%>

    -
    -
    -
    -
      -
    • - 基本信息 -
    • -
    • - 成员 -
    • -
    -
    -
    -
      - <%= labelled_form_for @course do |f| %> -
    • - <%= render :partial => "avatar/new_avatar_form", :locals => {source: @course} %> -
      -
    • -
    • - - - -
    • -
      -
    • - - - -
    • -
      -
    • - - <%= select_tag :time,options_for_select(course_time_option(@course.time),@course.time), {} %> - <%= select_tag :term,options_for_select(course_term_option,@course.term || cur_course_term),{} %> -
    • -
      -
    • - - -
      - 学生或其他成员申请加入课程时候需要使用该口令,该口令可以由老师在课堂上公布。 -
    • -
    • - - -
      -
    • -
    • - - id="course_is_public" name="course[is_public]" type="checkbox"> - (打钩为公开,不打钩则不公开,若不公开,仅课程成员可见该课程。) -
      -
    • -
    • - - id="course_open_student" name="course[open_student]" type="checkbox" style="margin-left: 1px;"/> - (打钩为"学生列表公开",不打钩为不公开,若不公开,则课程外部人员看不到学生列表) -
      -
    • -
    • - 提交 - <%= link_to l(:button_cancel), course_path(@course), :class => "blue_btn grey_btn fl c_white" %> -
      -
    • - <% end %> -
    -
    - -
    - <%= render :partial => "course_members" %> -
    -
    +
    +

    <%= l(:label_course_modify_settings)%>

    +
    +
    +
    +
      +
    • + 基本信息 +
    • +
    • + 成员 +
    • +
    +
    +
    +
      + <%= labelled_form_for @course do |f| %> +
    • + <%= render :partial => "avatar/new_avatar_form", :locals => {source: @course} %> +
      +
    • +
    • + + + +
    • +
      +
    • + + + +
    • +
      +
    • + + <%= select_tag :time,options_for_select(course_time_option(@course.time),@course.time), {} %> + <%= select_tag :term,options_for_select(course_term_option,@course.term || cur_course_term),{} %> +
    • +
      +
    • + + +
      + 学生或其他成员申请加入课程时候需要使用该口令,该口令可以由老师在课堂上公布。 +
    • +
    • + + +
      +
    • +
    • + + id="course_is_public" name="course[is_public]" type="checkbox"> + (打钩为公开,不打钩则不公开,若不公开,仅课程成员可见该课程。) +
      +
    • +
    • + + id="course_open_student" name="course[open_student]" type="checkbox" style="margin-left: 1px;"/> + (打钩为"学生列表公开",不打钩为不公开,若不公开,则课程外部人员看不到学生列表) +
      +
    • +
    • + 提交 + <%= link_to l(:button_cancel), course_path(@course), :class => "blue_btn grey_btn fl c_white" %> +
      +
    • + <% end %> +
    +
    + +
    + <%= render :partial => "course_members" %> +
    +
    \ No newline at end of file diff --git a/public/javascripts/course.js b/public/javascripts/course.js index 97f425a1c..2628ce1b5 100644 --- a/public/javascripts/course.js +++ b/public/javascripts/course.js @@ -129,7 +129,7 @@ function regexSubject() } function regexContent() { - var content = message_content_editor.html(); + var content = message_content_editor.html(); if(content.length ==0) { $("#message_content_span").text("描述不能为空"); @@ -146,7 +146,7 @@ function regexContent() } function submitCoursesBoard() { - message_content_editor.sync(); + message_content_editor.sync(); if(regexSubject()&®exContent()){$("#message-form").submit();} } /////////////////////////////////////////////////////////////// @@ -178,7 +178,7 @@ function regexTitle() function regexDescription() { - var name = news_description_editor.html(); + var name = news_description_editor.html(); if(name.length ==0) { $("#description_notice_span").text("描述不能为空"); @@ -186,12 +186,12 @@ function regexDescription() $("#description_notice_span").focus(); return false; } - else if(name.length >=6000){ - $("#description_notice_span").text("描述最多3000个汉字(或6000个英文字符)"); - $("#description_notice_span").css('color','#ff0000'); - $("#description_notice_span").focus(); - return false; - } + else if(name.length >=6000){ + $("#description_notice_span").text("描述最多3000个汉字(或6000个英文字符)"); + $("#description_notice_span").css('color','#ff0000'); + $("#description_notice_span").focus(); + return false; + } else { $("#description_notice_span").text("填写正确"); @@ -200,12 +200,12 @@ function regexDescription() } } -function submitNews(is_new) +function submitNews(is_new) { - alert(is_new) + alert(is_new) if(regexTitle() && regexDescription()) { - news_description_editor.sync(); + news_description_editor.sync(); $("#news-form").submit(); } } @@ -214,31 +214,31 @@ function submitFocus(obj) { $(obj).focus(); } - -/////////////////////////////////////////////////课程讨论区 -function course_board_submit_message_replay() -{ - if(MessageReplayVevify()) - { - message_content_editor.sync();//提交内容之前要sync,不然服务器端取不到值 - $("#message_form").submit(); - } -} -function MessageReplayVevify() { - var content = message_content_editor.html();//$.trim($("#message_content").val()); - if (content.length == 0) { - $("#message_content_span").text("<%= l(:label_reply_empty) %>"); - $("#message_content_span").css('color', '#ff0000'); - return false; - } - else { - $("#message_content_span").text("<%= l(:label_field_correct) %>"); - $("#message_content_span").css('color', '#008000'); - return true; - } -} -////////////////////////////////////////////////// - + +/////////////////////////////////////////////////课程讨论区 +function course_board_submit_message_replay() +{ + if(MessageReplayVevify()) + { + message_content_editor.sync();//提交内容之前要sync,不然服务器端取不到值 + $("#message_form").submit(); + } +} +function MessageReplayVevify() { + var content = message_content_editor.html();//$.trim($("#message_content").val()); + if (content.length == 0) { + $("#message_content_span").text("<%= l(:label_reply_empty) %>"); + $("#message_content_span").css('color', '#ff0000'); + return false; + } + else { + $("#message_content_span").text("<%= l(:label_field_correct) %>"); + $("#message_content_span").css('color', '#008000'); + return true; + } +} +////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////// //验证搜索时输入名字 @@ -370,7 +370,7 @@ function submit_new_bid(id) { if(regex_bid_name()&®ex_evaluation_num()) { - bid_description_editor.sync(); + bid_description_editor.sync(); $("#"+id).submit(); } } @@ -404,10 +404,10 @@ $(function(){ //将右侧的最小高度设置成左侧高度,美化界面 $(document).ready(function () { $("#RSide").css("min-height",$("#LSide").height()-30); -}); - -// 日历选择日期后关闭 -function regexDeadLine() -{ - ('#ui-datepicker-div').hide; +}); + +// 日历选择日期后关闭 +function regexDeadLine() +{ + ('#ui-datepicker-div').hide; } \ No newline at end of file From 45a03bac1b8ffb4d5634662db6d45bbcbaccca2a Mon Sep 17 00:00:00 2001 From: huang Date: Thu, 9 Apr 2015 09:55:21 +0800 Subject: [PATCH 011/285] =?UTF-8?q?=E7=BC=BA=E9=99=B7=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=9B=9B=E7=A7=8D=E7=B1=BB=E5=9E=8B=E6=A0=B7?= =?UTF-8?q?=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/issues_helper.rb | 16 +++++++++++++++- app/views/issues/_list.html.erb | 3 +-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/app/helpers/issues_helper.rb b/app/helpers/issues_helper.rb index ffdabc3dc..6c1505daa 100644 --- a/app/helpers/issues_helper.rb +++ b/app/helpers/issues_helper.rb @@ -67,7 +67,9 @@ module IssuesHelper s.html_safe end - def link_to_issue_type(value) + #获取跟踪类型 + #REDO:时间紧需要优化,两个方法可以综合成一个 + def get_issue_type(value) if value == "缺陷" class_type = "red_btn_cir ml10" elsif value == "功能" @@ -79,6 +81,18 @@ module IssuesHelper end end + def get_issue_typevalue(value) + if value == "缺陷" + assign = "缺陷" + elsif value == "功能" + assign = "功能" + elsif value == "支持" + assign = "支持" + else + assign = "任务" + end + end + def render_issue_subject_with_tree(issue) s = '' ancestors = issue.root? ? [] : issue.ancestors.visible.all diff --git a/app/views/issues/_list.html.erb b/app/views/issues/_list.html.erb index 5a05501d9..a336468dd 100644 --- a/app/views/issues/_list.html.erb +++ b/app/views/issues/_list.html.erb @@ -11,8 +11,7 @@
    <%= link_to issue.author.name, user_path(issue.author), :class => "problem_name c_orange fl" %> <%= l(:label_post_on_issue) %>(<%= "#{raw column_content[2]}" %>): - <%=link_to column_content[4], issue_path(issue.id), :class => "problem_tit02 fl" %> - + <%=link_to "#{column_content[4]}#{get_issue_typevalue(column_content[1])}".html_safe, issue_path(issue.id), :class => "problem_tit02 fl" %>

    <% unless issue.assigned_to_id.nil? %> From 4d4e1cac8b6ac57e2c2d57c857ede2a105c2efb8 Mon Sep 17 00:00:00 2001 From: huang Date: Thu, 9 Apr 2015 10:25:46 +0800 Subject: [PATCH 012/285] =?UTF-8?q?=E5=AE=8C=E6=88=90=E6=96=B0=E7=9A=84?= =?UTF-8?q?=E9=82=AE=E4=BB=B6=E9=82=80=E8=AF=B7=E7=95=8C=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/projects/invite_members.html.erb | 33 ++++++------------- .../projects/invite_members_by_mail.html.erb | 11 ++----- config/locales/projects/zh.yml | 2 +- public/stylesheets/project.css | 6 ++-- 4 files changed, 16 insertions(+), 36 deletions(-) diff --git a/app/views/projects/invite_members.html.erb b/app/views/projects/invite_members.html.erb index 55fa2487b..a04647ff9 100644 --- a/app/views/projects/invite_members.html.erb +++ b/app/views/projects/invite_members.html.erb @@ -13,36 +13,28 @@ members = @project.member_principals.includes(:roles, :principal).all.sort %> -

    -
    -
    - -
    -
    -
    -

    <%= l(:label_invite_trustie_user) %>

    - <% if roles.any? %> - <%= form_for(@member, {:as => :membership, :url => project_memberships_path(@project), :method => :post}) do |f| %> +
    +

    <%= l(:label_invite_trustie_user) %>

    + <% if roles.any? %> + <%= form_for(@member, {:as => :membership, :url => project_memberships_path(@project), :method => :post}) do |f| %> - - - <% end %> <% end %> -
    -
    @@ -90,6 +110,7 @@ }, :class => "c_orange f14" ) %> <% end %>
    +
    <%= l(:label_member) %>(<%= link_to "#{@project.members.count}", project_member_path(@project), :class => 'info_foot_num c_blue' %>) @@ -102,6 +123,7 @@
    +
    +
    @@ -179,6 +153,7 @@
    +

    <%= l(:label_tag)%>:

    @@ -203,6 +178,22 @@ <%= render :partial => 'layouts/new_footer'%>
    +
    + + +
    +
    +

    请选择项目类型:

    +
      +
    • +
    • +
    • +
    + 确定 + +
    +
    +
    123
    diff --git a/app/views/projects/_tools_expand.html.erb b/app/views/projects/_tools_expand.html.erb index f62b0822a..570ba3426 100644 --- a/app/views/projects/_tools_expand.html.erb +++ b/app/views/projects/_tools_expand.html.erb @@ -1,8 +1,3 @@ -
  • - <% if User.current.admin? || User.current.allowed_to?({:controller => 'projects', :action => 'settings'}, @project) %> - <%= link_to l(:label_settings), settings_project_path(@project) %> - <% end %> -
  • <% unless @project.enabled_modules.where("name = 'news'").empty? %> <%= link_to l(:project_module_news), project_news_index_path(@project) %> @@ -18,16 +13,16 @@ <%= link_to l(:project_module_code_review), {controller: 'code_review', action: 'index', id: @project.id} %> <% end %>
  • -
  • - <% unless @project.enabled_modules.where("name = 'calendar'").empty? %> - <%= link_to l(:project_module_calendar),project_calendar_path(@project) %> - <% end %> -
  • -
  • - <% unless @project.enabled_modules.where("name = 'gantt'").empty? %> - <%= link_to l(:project_module_gantt) ,project_gantt_path(@project) %> - <% end %> -
  • + + + + + + + + + +
  • <% unless @project.enabled_modules.where("name = 'documents'").empty? %> <%= link_to l(:project_module_documents), project_documents_path(@project) %> diff --git a/app/views/projects/show.html.erb b/app/views/projects/show.html.erb index b3ddf6a26..d32d7baa6 100644 --- a/app/views/projects/show.html.erb +++ b/app/views/projects/show.html.erb @@ -48,10 +48,7 @@
    <%= h(e.project) if @project.nil? || @project.id != e.project_id %> - <%= link_to h(e.user), user_path(e.user_id), :class => "problem_name c_orange fl" %> - <%= l(:label_new_activity) %> : - - <%= link_to(l(:label_activity_project)+act.issue.project.name, project_path(act.issue.project.id), :class => "problem_tit fl fb") %> + <%= link_to h(e.user), user_path(e.user_id), :class => "problem_name c_orange fl" %> <%= l(:label_new_activity) %> : <%= link_to format_activity_title("#{act.issue.tracker} ##{act.issue.project_issues_index}: #{act.issue.subject}"), {:controller => 'issues', :action => 'show', :id => act.issue.id, :anchor => "change-#{act.id}"}, :class => "problem_tit fl fb" %>
    diff --git a/config/locales/projects/zh.yml b/config/locales/projects/zh.yml index ecc9fe7c3..99f8bafca 100644 --- a/config/locales/projects/zh.yml +++ b/config/locales/projects/zh.yml @@ -53,7 +53,10 @@ zh: label_exit_project: 退出项目 label_apply_project_waiting: 已处理申请,请等待管理员审核 label_unapply_project: 取消申请 - lable_sure_exit_project: 是否确认退出该项目 + lable_sure_exit_project: 是否确认退出该项目 + label_friend_organization: 朋友圈 + label_research_group: 科研组 + label_development_team: 开发组 label_member: 成员 project_module_attachments: 资源 diff --git a/db/migrate/20150409092151_add_project_new_type_to_project.rb b/db/migrate/20150409092151_add_project_new_type_to_project.rb new file mode 100644 index 000000000..68f22b5ad --- /dev/null +++ b/db/migrate/20150409092151_add_project_new_type_to_project.rb @@ -0,0 +1,5 @@ +class AddProjectNewTypeToProject < ActiveRecord::Migration + def change + add_column :projects, :project_new_type, :integer + end +end diff --git a/db/schema.rb b/db/schema.rb index b149a870b..f9ade5aa4 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20150309090143) do +ActiveRecord::Schema.define(:version => 20150409092151) do create_table "activities", :force => true do |t| t.integer "act_id", :null => false @@ -422,6 +422,22 @@ ActiveRecord::Schema.define(:version => 20150309090143) do add_index "custom_values", ["custom_field_id"], :name => "index_custom_values_on_custom_field_id" add_index "custom_values", ["customized_type", "customized_id"], :name => "custom_values_customized" + create_table "delayed_jobs", :force => true do |t| + t.integer "priority", :default => 0, :null => false + t.integer "attempts", :default => 0, :null => false + t.text "handler", :null => false + t.text "last_error" + t.datetime "run_at" + t.datetime "locked_at" + t.datetime "failed_at" + t.string "locked_by" + t.string "queue" + t.datetime "created_at" + t.datetime "updated_at" + end + + add_index "delayed_jobs", ["priority", "run_at"], :name => "delayed_jobs_priority" + create_table "discuss_demos", :force => true do |t| t.string "title" t.text "body" @@ -638,16 +654,6 @@ ActiveRecord::Schema.define(:version => 20150309090143) do add_index "journal_details", ["journal_id"], :name => "journal_details_journal_id" - create_table "journal_details_copy", :force => true do |t| - t.integer "journal_id", :default => 0, :null => false - t.string "property", :limit => 30, :default => "", :null => false - t.string "prop_key", :limit => 30, :default => "", :null => false - t.text "old_value" - t.text "value" - end - - add_index "journal_details_copy", ["journal_id"], :name => "journal_details_journal_id" - create_table "journal_replies", :id => false, :force => true do |t| t.integer "journal_id" t.integer "user_id" @@ -963,25 +969,26 @@ ActiveRecord::Schema.define(:version => 20150309090143) do end create_table "projects", :force => true do |t| - t.string "name", :default => "", :null => false + t.string "name", :default => "", :null => false t.text "description" - t.string "homepage", :default => "" - t.boolean "is_public", :default => true, :null => false + t.string "homepage", :default => "" + t.boolean "is_public", :default => true, :null => false t.integer "parent_id" t.datetime "created_on" t.datetime "updated_on" t.string "identifier" - t.integer "status", :default => 1, :null => false + t.integer "status", :default => 1, :null => false t.integer "lft" t.integer "rgt" - t.boolean "inherit_members", :default => false, :null => false + t.boolean "inherit_members", :default => false, :null => false t.integer "project_type" - t.boolean "hidden_repo", :default => false, :null => false - t.integer "attachmenttype", :default => 1 + t.boolean "hidden_repo", :default => false, :null => false + t.integer "attachmenttype", :default => 1 t.integer "user_id" - t.integer "dts_test", :default => 0 + t.integer "dts_test", :default => 0 t.string "enterprise_name" t.integer "organization_id" + t.integer "project_new_type" end add_index "projects", ["lft"], :name => "index_projects_on_lft" @@ -1069,12 +1076,12 @@ ActiveRecord::Schema.define(:version => 20150309090143) do end create_table "roles", :force => true do |t| - t.string "name", :limit => 90 - t.integer "position" - t.boolean "assignable" - t.integer "builtin" + t.string "name", :limit => 30, :default => "", :null => false + t.integer "position", :default => 1 + t.boolean "assignable", :default => true + t.integer "builtin", :default => 0, :null => false t.text "permissions" - t.string "issues_visibility", :limit => 90 + t.string "issues_visibility", :limit => 30, :default => "default", :null => false end create_table "schools", :force => true do |t| @@ -1445,4 +1452,16 @@ ActiveRecord::Schema.define(:version => 20150309090143) do t.datetime "updated_at", :null => false end + create_table "zip_packs", :force => true do |t| + t.integer "user_id" + t.integer "homework_id" + t.string "file_digest" + t.string "file_path" + t.integer "pack_times", :default => 1 + t.integer "pack_size", :default => 0 + t.string "file_digests" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + end diff --git a/public/images/leftside.png b/public/images/leftside.png index c927f9eb593801c55594f1f5e31facbff695c1ec..0b144f3302d0d98d277171abf3f3a49d739b39f3 100644 GIT binary patch delta 1099 zcmV-R1ho6j1(FGn7YfJ-1^@s6H#@sVks(8W1Q{@MvRa+Q-PLsnBli@H7 zharY2B_d)d!!UG}ONoe>OrlI;e)TINBFZq=%_Jg9Kdy6i#pzG|DU;HeloDkqr8LTn zN$sZ}=h^kP&RTo#Idw^`#pbNN*0Vm|eb%#|_kA}=!gH-8xiirA<+7D-lAB1bAz34T z`Htie$ui0HdEh$z?WF&}t{0Im2fGd`K%d|6cdE~5u(HHENxml8o;ULv ziSj;icJ9oO5AmAh6O!B2`HohzJS>xkPfZz@B%1_-s&OF)CRtP2Obfzf66jVg=6}<^Sdvvvxd^5xh9C zq{Kk0GnWBeE;2x9+3iIJC?!cU>6v+ze$NBgRw|YJ(byzOm~+h~Nixvtd2R>L+v?2w zi^R7<5=oL&ivaV$`xg^gx8UI-1Q=;3f`1oqMd8YEg}BB6bQckEeR4#9>m+;RS5Zl? zb8-#6G}Hm$h=fcBfUN-jFfqSf0FH*V=PskOP8->@)-1a-wCv|v;swv4uPT7J%5_H5 z9}CJwwFg*ZKo04sZ_nE#+D>?Ex)VSRz%l?Ye2;1#z*QM*7|qe;eG2FP>)Z1(Wr@y9 z{nh0T&zOYQfh_i1p*_`q)cL%O^fDB2^|5C^8p*8+8VRterWkKjfDs(Q#lhVG>Huy6 zSdT_dy1%INJ!%gBgaU^Yhvmx0Hb=l(37Na>`_AtkH1bwAiY&WLT(%&^Kdk`bm}n}< zVM7WY(u696_W(1hiK@sk&Yw!GHcKPr!|llJg$zZ zXd6)iBnY&;eMt0L7UfPE8*G*xa;Y~BvRqLL>abQ&E#iEqz^b;AmZ!b}Y~_gdT{TbO zqB2G!N`iU8o$7Qp!s(C>aMAhbtO;Dnhz|_<+9PjAa0Ewi1V?ZL|9s%j0{{)E5|L@* RRp9^t002ovPDHLkV1jZ83%URR delta 642 zcmV-|0)73G3C#tN7Ybwu1^@s6S>M4`5i6~K)D4QLdU1htU zUe46@+k1b%-%Lev50^Rj-tRrWkOP4(vxi~-bpV#Yl}b|c<0R>iMj2|vbW)UZtX${+yORh z!&kG~03Lb3%lW|hZrmg;AApHiz;;O5tGIlZRLf6}dy6+D-IMf5(xRj(Ne?C6k<_w? zN2BeJd5d)6KP&?@s*LG3B!Lt79|n(q7p$EMR{k|yLD`ygHU$Mh#M&1EdfqI$cX(Qz=tJ$TNWj(|y@D`Y} z&Ckr6xw6)1&|BTMLso$67K22Y6F7lKWq?iNp?yhjO3}GAyJ`iYTh_r=C2@b}nKPhQ z;h9f_Vvtd-lpHWlzAf6hVQHl1bmTQvkRyiQ%cD>30 znRBieu)N=XZ%R6rWm)(();UMX*l^CZN6qKDq{&e&FI2hT79i(bvkI^byfDnox(}YO cQUHGp0G?Zt(~q^H*Z=?k07*qoM6N<$f-a#ySO5S3 diff --git a/public/images/public_icon.png b/public/images/public_icon.png index 7134ded4218dec8f9b259eadb7d6b0369fbd5a56..a815691f83da828d9712fa7ac611887c8084dda9 100644 GIT binary patch literal 3811 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 O6)-X|)yH0PN%|MZdohRr literal 2949 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 diff --git a/public/javascripts/course.js b/public/javascripts/course.js index 2628ce1b5..91b4f41da 100644 --- a/public/javascripts/course.js +++ b/public/javascripts/course.js @@ -401,11 +401,6 @@ $(function(){ } }); -//将右侧的最小高度设置成左侧高度,美化界面 -$(document).ready(function () { - $("#RSide").css("min-height",$("#LSide").height()-30); -}); - // 日历选择日期后关闭 function regexDeadLine() { diff --git a/public/javascripts/header.js b/public/javascripts/header.js index e5363f8d5..e27f758d3 100644 --- a/public/javascripts/header.js +++ b/public/javascripts/header.js @@ -38,4 +38,9 @@ $(document).ready(function () { addSlipMenu(); addProjectSlipMenu (); addCourseSlipMenu(); +}); + +//将右侧的最小高度设置成左侧高度,美化界面 +$(document).ready(function () { + $("#RSide").css("min-height",$("#LSide").height()-30); }); \ No newline at end of file diff --git a/public/javascripts/project.js b/public/javascripts/project.js index 6dc772f1e..52d96f2d7 100644 --- a/public/javascripts/project.js +++ b/public/javascripts/project.js @@ -130,6 +130,7 @@ function submitFocus(obj) //当项目描述长度小于112px时,不显示更多按钮 $(function(){ +// alert($("#course_description_content").height()); if($("#course_description_content").height()>112) { $("#lg-foot").show(); @@ -144,4 +145,18 @@ function course_setting(id) $('#tbc_0'+id).removeClass().addClass("dis"); $('#tb_'+(3-id)).removeClass().addClass("hwork_normaltab"); $('#tbc_0'+(3-id)).removeClass().addClass("undis"); -} \ No newline at end of file +} + +//项目类型 +function show_window () { + $('#light').css('display','block'); + $('#fade').css('display','block'); +} + +function close_window(type){ + $('#light').css('display','none'); + $('#fade').css('display','none'); + + $("#" + type).attr("checked","checked"); +} +//弹框l \ No newline at end of file diff --git a/public/stylesheets/pleft.css b/public/stylesheets/pleft.css index f20a123c9..7a87c3c77 100644 --- a/public/stylesheets/pleft.css +++ b/public/stylesheets/pleft.css @@ -16,6 +16,9 @@ a:hover.pr_join_a{ background:#41a8c8;} .pr_close{ display:block; background:url(../images/leftside.png) -1px -49px no-repeat; width:11px; height:11px; margin-top:3px; float:left; } .pr_add{display:block; background:url(../images/leftside.png) 0px -71px no-repeat; width:11px; height:11px; margin-top:3px; float:left; } .pr_arrow{display:block; background:url(../images/leftside.png) 0px -90px no-repeat; width:11px; height:11px; margin-top:3px; float:left; } +.pr_friend{display:block; background:url(../images/leftside.png) 0px -112px no-repeat; width:12px; height:11px; margin-top:4px; float:left; } +.pr_keyan{display:block; background:url(../images/leftside.png) 0px -135px no-repeat; width:12px; height:11px; margin-top:4px; float:left; } +.pr_kafa{display:block; background:url(../images/leftside.png) 0px -156px no-repeat; width:12px; height:11px; margin-top:4px; float:left; } .pr_info_name{ color:#3e4040; font-size:14px; line-height:1.5;} .pr_info_name:hover{ color:#3ca5c6;} .pr_info_score{ font-size:14px; color:#3e4040; } @@ -47,7 +50,7 @@ a:hover.subnav_green{ background:#14ad5a;} .project_intro{ width:220px; padding:10px; background:#fff; margin-top:10px; padding-top:5px; color:#6d6d6d; line-height:1.9;} .course_description{max-height: 112px;overflow:hidden; word-break: break-all;word-wrap: break-word;} .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;display: none;} .lg-foot:hover{ color:#787b7e; border:1px solid #d4d4d4;} /****标签(和资源库的tag样式一致)***/ .project_Label{ width:220px; padding:10px; background:#fff; margin-top:10px; padding-top:5px; margin-bottom:10px;} diff --git a/public/stylesheets/public.css b/public/stylesheets/public.css index 77d4db195..b01c2a7e0 100644 --- a/public/stylesheets/public.css +++ b/public/stylesheets/public.css @@ -126,6 +126,8 @@ a:hover.grey_btn{ background:#717171; color:#fff;} .blue_btn{ background:#64bdd9; color:#fff; font-size:14px; font-weight:normal;padding:2px 10px; text-align:center;} a.blue_btn{background:#64bdd9;color:#fff;font-size:14px; font-weight:normal; padding:2px 10px; text-align:center;} a:hover.blue_btn{ background:#329cbd;} +a.orange_btn{ background:#ff5722;color:#fff;font-size:14px; font-weight:normal; padding:2px 10px; text-align:center; } +a:hover.orange_btn{ background:#d63502;} .nolink_btn{ background:#BCBCBC; color: #fff; padding:2px 5px;} .more_btn{-moz-border-radius:3px; -webkit-border-radius:3px; border:1px solid #9DCEFF; color:#9DCEFF; border-radius:3px; padding:0px 3px;} .upbtn{ margin:42px 0 0 10px; border:none;} @@ -362,3 +364,4 @@ div.flash.warning, .conflict { .floatbox{ width:420px; border:3px solid #15bccf; background:#fff; padding:5px;} a.box_close{ display:block; float:right; width:16px; height:16px; background:url(../images/img_floatbox.png) 0 0 no-repeat;} a.box_close{background:url(../images/img_floatbox.png) -22px 0 no-repeat;} +.white_content02{display:none;position:fixed;top:15%;left:30%;width:200px;height: auto; margin-bottom:20px;padding:10px;border:3px solid #15bccf;background-color:white;z-index:1002;overflow:auto;} From f2cf46f0a04106029bc9212314cb10fe0bb7ff56 Mon Sep 17 00:00:00 2001 From: huang Date: Thu, 9 Apr 2015 19:38:49 +0800 Subject: [PATCH 017/285] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=BC=BA=E9=99=B7?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E6=98=BE=E7=A4=BAbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/issues/index.html.erb | 6 +----- app/views/projects/show.html.erb | 1 - public/stylesheets/project.css | 11 +++++++++++ 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/app/views/issues/index.html.erb b/app/views/issues/index.html.erb index b4939d98e..9e9feb33c 100644 --- a/app/views/issues/index.html.erb +++ b/app/views/issues/index.html.erb @@ -4,11 +4,7 @@
    <% unless @project.enabled_modules.where("name = 'issue_tracking'").empty? %> - <% 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, - :html => {:accesskey => Redmine::AccessKeys.key_for(:new_issue)}, :class => 'icon icon-add' %> - <% end %> - <%= link_to l(:label_query), '#', :class => 'icon icon-help', + <%= link_to l(:label_query), '#', :onclick => '$("#custom_query").slideToggle(400); ' if true || User.current.logged? %> <% end %> diff --git a/app/views/projects/show.html.erb b/app/views/projects/show.html.erb index d32d7baa6..d0c4bd54f 100644 --- a/app/views/projects/show.html.erb +++ b/app/views/projects/show.html.erb @@ -33,7 +33,6 @@ :action => 'show', :id => act.id}, :class => "problem_tit fl fb " %> -

    <%= textAreailizable act,:description %>
    <%= l :label_activity_time %> :<%= format_activity_day(act.created_on) %> <%= format_time(act.created_on, false) %> diff --git a/public/stylesheets/project.css b/public/stylesheets/project.css index 8e44c0de3..32adea2bf 100644 --- a/public/stylesheets/project.css +++ b/public/stylesheets/project.css @@ -327,3 +327,14 @@ a:hover.st_add{ color:#ff8e15;} .label{ width:80px; text-align:right; font-size:14px; display:block; float:left;} .label02{ width:110px; text-align:right; font-size:14px; display:block; float:left;} .collapsible{ border-left:none;border-right:none;border-bottom:none; border-top:1px solid #e4e4e4; padding-top:10px; } +/*问题查询*/ +.icon-checked { background-image: url(../images/true.png); } +.icon-reload { background-image: url(../images/reload.png); } +.icon { + background-position: 0% 50%; + background-repeat: no-repeat; + font-family: '微软雅黑'; /*modify by men*/ + padding-left: 20px; + padding-top: 2px; + padding-bottom: 3px; +} \ No newline at end of file From 287c767c86af12c898e0f8c593ea8b933ce8c90d Mon Sep 17 00:00:00 2001 From: huang Date: Thu, 9 Apr 2015 20:47:09 +0800 Subject: [PATCH 018/285] =?UTF-8?q?=E7=BC=BA=E9=99=B7=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E6=A0=B7=E5=BC=8F=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/issues_helper.rb | 6 +- app/views/issues/show.html.erb | 253 ++++++++++++++++++++++++++++++++- 2 files changed, 251 insertions(+), 8 deletions(-) diff --git a/app/helpers/issues_helper.rb b/app/helpers/issues_helper.rb index 6c1505daa..966028c81 100644 --- a/app/helpers/issues_helper.rb +++ b/app/helpers/issues_helper.rb @@ -61,9 +61,9 @@ module IssuesHelper #h("#{issue.tracker} ##{issue.id}") # h("#{issue.tracker} #{issue.source_from}") s = '' - s << link_to(@issue.project.name, project_issues_path(@issue.project)) - s << " > #" - s << @issue.project_index + s << link_to(@issue.project.name, project_issues_path(@issue.project), :class => "pro_page_top") + s << " > " + s << link_to("#" + @issue.project_index, project_issues_path(@issue.project), :class => "pro_page_top") s.html_safe end diff --git a/app/views/issues/show.html.erb b/app/views/issues/show.html.erb index 38afc672d..62fd2d9c0 100644 --- a/app/views/issues/show.html.erb +++ b/app/views/issues/show.html.erb @@ -1,16 +1,259 @@

    <%= l(:label_issue_plural) %>

    +
    + +
    +
    + <%= link_to image_tag(url_to_avatar(@issue.author),:width => 46,:height => 46), user_path(@issue.author), :class => "ping_dispic" %> +
    +
    +

    + <%= @issue.subject %>缺陷


    +
    +

    <%= @issue.author %> + <% if @issue.created_on != @issue.updated_on %> + 更新于 <%= format_date(@issue.created_on).html_safe %> + <% else %> + 添加于 <%= format_date(@issue.updated_on).html_safe %> + <% end %> +

    + 删除编辑跟踪 +
    +
    如图,点击课程动态中某空白处,也会跳转到相关页面的如图,点击课程动态中某空白处,也会跳转到相关页面的如图,点击课程动态中某空白处,也会跳转到相关页面的如图,点击课程动态中某空白处,也会跳转到相关页面的如图,点击课程动态中某空白处,也会跳转到相关页面的
    + +
    +
    +
      +
    • * 状态  : 

      新增

      +
    • +
      +
    • * 优先级  : 

      正常 +
    • +
      +
    •  指派给  : 

      suntao +
    • +
      +
    •  目标版本  : 

      暑期版(Summer Beta) V0.8 +
    • +
      +
    + +
      +
    •  开始日期  : 

      2015-03-31

      +
    • +
      +
    •  计划完成日期  : 

      2015-03-31 +
    • +
      +
    •  预期时间  : 

      2015-03-31 +
    • +
      +
    •  % 完成  : 

      10 % +
    • +
      +
    +
    +
    + 引用回复 +
    +
    + +
    +
    +
      +
    • + +
    • + +
    • +
      +
    • + +
    • +
      +
    • + +
    • +
      +
    • + + +
    • +
      +
    +
    +
    + +
    +
    + 修改属性 +
      +
    • + +
    • +
      +
    • + +
    • +
      +
    • + +
    • +
      +
    • + + +
    • +
      + +
    +
      +
    • + + +
    • +
      +
    • + + +
    • +
      +
    • + + 小时 +
    • +
      +
    • + +
    • +
      +
    +
    +
    + +
    +
    + + +
    +
    +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +
    + 提交预览 +
    +
    +
    + + +
    +
    +
    +
    + gugu012014-10-24 +
    +

    我写了一个验证身份证号码的程序,它是以一定内存空间(大概100M)换取cpu消耗,然后它的运算量就降低了,前十四位的验证就相当于转换类型再查表一样,所以它的验证号码速度比一般的方式快。如果还不明白就说明你写框架写多了,或者

    +
    + +
    +
    +
    +
    + jack 回复 jack: +

    我们尽快修复,此问题已发现原因,测试后我们尽快上线。谢谢反馈!,此问题已发现原因,测试后我们尽快上线。谢谢反馈!

    + 2014-10-31 + +
    +
    +
    +
    +
    +
    + jack 回复 jack: +

    我们尽快修复,此问题已发现原因,测试后我们尽快上线。谢谢反馈!,此问题已发现原因,测试后我们尽快上线。谢谢反馈!

    + 2014-10-31 + +
    + +
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + <%# html_title "#{@issue.tracker.name} ##{@issue.id}: #{@issue.subject}" %> <% html_title "#{@issue.tracker.name} #{@issue.source_from}'#'#{@issue.project_index}: #{@issue.subject}" %> - + <%= render :partial => 'action_menu' %>

    <%= issue_heading(@issue) %>

    -
    <% if @prev_issue_id || @next_issue_id %> @@ -30,10 +273,10 @@ <% end %> - +
    <%= render_issue_subject_with_tree(@issue) %> -
    +
    @@ -44,7 +287,7 @@ <%= authoring @issue.created_on, @issue.author %>. <% if @issue.created_on != @issue.updated_on %> <%= l(:label_updated_time, time_tag(@issue.updated_on)).html_safe %>. - <% end %> + <% end %>

    From 33abbaffe1a0461c4de21eca7f697dd8849448fe Mon Sep 17 00:00:00 2001 From: huang Date: Fri, 10 Apr 2015 17:49:16 +0800 Subject: [PATCH 019/285] =?UTF-8?q?=E4=BF=AE=E6=94=B9isuue=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E7=95=8C=E9=9D=A2=20=E9=99=84=E4=BB=B6=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E5=BD=A2=E5=BC=8F=20=E5=9B=BD=E9=99=85=E5=8C=96=20?= =?UTF-8?q?=E9=83=A8=E5=88=86=E6=A0=B7=E5=BC=8F=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/issues_helper.rb | 12 +- app/views/attachments/_links.html.erb | 2 +- app/views/issues/_action_menu.html.erb | 23 +- app/views/issues/_attributes.html.erb | 116 +++--- app/views/issues/_edit.html.erb | 4 - app/views/issues/_form.html.erb | 92 +++-- app/views/issues/_history.html.erb | 61 ++- app/views/issues/show.html.erb | 453 ++++++----------------- app/views/layouts/base_projects.html.erb | 2 +- config/locales/zh.yml | 1 + public/stylesheets/project.css | 2 +- 11 files changed, 301 insertions(+), 467 deletions(-) diff --git a/app/helpers/issues_helper.rb b/app/helpers/issues_helper.rb index 966028c81..54cef5c7a 100644 --- a/app/helpers/issues_helper.rb +++ b/app/helpers/issues_helper.rb @@ -70,11 +70,11 @@ module IssuesHelper #获取跟踪类型 #REDO:时间紧需要优化,两个方法可以综合成一个 def get_issue_type(value) - if value == "缺陷" + if value == "缺陷" || value == 1 class_type = "red_btn_cir ml10" - elsif value == "功能" + elsif value == "功能" || value == 2 class_type = "blue_btn_cir ml10" - elsif value == "支持" + elsif value == "支持" || value == 3 class_type = "green_btn_cir ml10" else class_type = "orange_btn_cir ml10" @@ -82,11 +82,11 @@ module IssuesHelper end def get_issue_typevalue(value) - if value == "缺陷" + if value == "缺陷" || value == 1 assign = "缺陷" - elsif value == "功能" + elsif value == "功能" || value == 2 assign = "功能" - elsif value == "支持" + elsif value == "支持" || value == 3 assign = "支持" else assign = "任务" diff --git a/app/views/attachments/_links.html.erb b/app/views/attachments/_links.html.erb index 02c7ba4dc..c3ec2b9f0 100644 --- a/app/views/attachments/_links.html.erb +++ b/app/views/attachments/_links.html.erb @@ -60,7 +60,7 @@ <% if defined?(thumbnails) && thumbnails %> <% images = attachments.select(&:thumbnailable?) %> <% if images.any? %> -
    +
    <% images.each do |attachment| %>
    <%= thumbnail_tag(attachment) %>
    <% end %> diff --git a/app/views/issues/_action_menu.html.erb b/app/views/issues/_action_menu.html.erb index 61cea920c..231116f2f 100644 --- a/app/views/issues/_action_menu.html.erb +++ b/app/views/issues/_action_menu.html.erb @@ -1,18 +1,11 @@ -
    - + -<% if (@issue.author == User.current) || (User.current.admin?) %> - - -<%= link_to l(:button_update), edit_issue_path(@issue), :onclick => 'showAndScrollTo("update", "issue_notes"); return false;', :class => 'icon icon-edit', :accesskey => accesskey(:edit) if @issue.editable? %> +<%#= watcher_link(@issue, User.current) %> +<%#= link_to l(:button_copy), project_copy_issue_path(@project, @issue), :class => 'icon icon-copy' if User.current.allowed_to?(:add_issues, @project) %> +<%= link_to l(:button_delete), issue_path(@issue.id), :data => {:confirm => issues_destroy_confirmation_message(@issue)}, :method => :delete, :class => 'talk_edit fr' if User.current.allowed_to?(:delete_issues, @project) %> +<% if (@issue.author == User.current) || (User.current.admin?) %> + <%= link_to l(:button_edit), edit_issue_path(@issue), :onclick => 'showAndScrollTo("update", "issue_notes"); return false;', :class => 'talk_edit fr', :accesskey => accesskey(:edit) if @issue.editable? %> <% else %> - -<%= link_to l(:label_user_newfeedback), edit_issue_path(@issue), :onclick => 'showAndScrollTo("update", "issue_notes"); return false;', :class => 'icon icon-edit', :accesskey => accesskey(:edit) if @issue.editable? %> - -<% end %> - -<%= watcher_link(@issue, User.current) %> -<%= link_to l(:button_copy), project_copy_issue_path(@project, @issue), :class => 'icon icon-copy' if User.current.allowed_to?(:add_issues, @project) %> -<%= link_to l(:button_delete), issue_path(@issue.id), :data => {:confirm => issues_destroy_confirmation_message(@issue)}, :method => :delete, :class => 'icon icon-del' if User.current.allowed_to?(:delete_issues, @project) %> -
    + <%= link_to l(:label_user_newfeedback), edit_issue_path(@issue), :onclick => 'showAndScrollTo("update", "issue_notes"); return false;', :class => 'talk_edit fr', :accesskey => accesskey(:edit) if @issue.editable? %> +<% end %> \ No newline at end of file diff --git a/app/views/issues/_attributes.html.erb b/app/views/issues/_attributes.html.erb index 04d7af7de..ff32e99e4 100644 --- a/app/views/issues/_attributes.html.erb +++ b/app/views/issues/_attributes.html.erb @@ -1,50 +1,77 @@ <%= labelled_fields_for :issue, @issue do |f| %> +
    +
    + <%= l(:label_change_properties) %> +
      +
    • + <% if @issue.safe_attribute?('status_id') && @allowed_statuses.present? %> +

      <%= f.select :status_id, (@allowed_statuses.collect {|p| [p.name, p.id]}), {:required => true}, :onchange => "updateIssueFrom('#{escape_javascript project_issue_form_path(@project, :id => @issue, :format => 'js')}')" %>

      + <% else %> +

      <%= h(@issue.status.name) %>

      + <% end %> +
    • +
      +
    • + <% if @issue.safe_attribute? 'priority_id' %> +

      <%= f.select :priority_id, (@priorities.collect {|p| [p.name, p.id]}), {:required => true}, :disabled => !@issue.leaf? %>

      + <% end %> +
    • +
      +
    • <% if @issue.safe_attribute? 'assigned_to_id' %> +

      <%= f.select :assigned_to_id, principals_options_for_select(@issue.assignable_users, @issue.assigned_to), :include_blank => true, :required => @issue.required_attribute?('assigned_to_id') %>

      + <% end %> +
    • +
      +
    • <% if @issue.safe_attribute?('fixed_version_id') && @issue.assignable_versions.any? %> +

      <%= f.select :fixed_version_id, version_options_for_select(@issue.assignable_versions, @issue.fixed_version), :include_blank => true, :required => @issue.required_attribute?('fixed_version_id') %> + <%= link_to(image_tag('add.png', :style => 'vertical-align: middle;'), + new_project_version_path(@issue.project), + :remote => true, + :method => 'get', + :title => l(:label_version_new), + :tabindex => 200) if User.current.allowed_to?(:manage_versions, @issue.project) %> +

      + <% end %> +
    • +
      -
    +
      +
    • <% if @issue.safe_attribute? 'start_date' %> +

      <%= f.text_field :start_date, :size => 10, :disabled => !@issue.leaf?, :required => @issue.required_attribute?('start_date') %><%= calendar_for('issue_start_date','start_date') if @issue.leaf? %>

      + <% end %> +
    • +
      +
    • <% if @issue.safe_attribute? 'due_date' %> +

      <%= f.text_field :due_date, :size => 10, :disabled => !@issue.leaf?, :required => @issue.required_attribute?('due_date') %><%= calendar_for('issue_due_date','start_date') if @issue.leaf? %>

      + <% end %> +
    • +
      +
    • <% if @issue.safe_attribute? 'estimated_hours' %> +

      <%= f.text_field :estimated_hours, :size => 3, :disabled => !@issue.leaf?, :required => @issue.required_attribute?('estimated_hours') %> <%= l(:field_hours) %>

      + <% end %> +
    • +
      +
    • + +
    • +
      +
    +
    +
    -<% else %> -

    <%= h(@issue.status.name) %>

    -<% end %> - -<% if @issue.safe_attribute? 'priority_id' %> -

    <%= f.select :priority_id, (@priorities.collect {|p| [p.name, p.id]}), {:required => true}, :disabled => !@issue.leaf? %>

    -<% end %> - -<% if @issue.safe_attribute? 'assigned_to_id' %> -

    <%= f.select :assigned_to_id, principals_options_for_select(@issue.assignable_users, @issue.assigned_to), :include_blank => true, :required => @issue.required_attribute?('assigned_to_id') %>

    -<% end %> - - -<% if @issue.safe_attribute?('fixed_version_id') && @issue.assignable_versions.any? %> -

    <%= f.select :fixed_version_id, version_options_for_select(@issue.assignable_versions, @issue.fixed_version), :include_blank => true, :required => @issue.required_attribute?('fixed_version_id') %> -<%= link_to(image_tag('add.png', :style => 'vertical-align: middle;'), - new_project_version_path(@issue.project), - :remote => true, - :method => 'get', - :title => l(:label_version_new), - :tabindex => 200) if User.current.allowed_to?(:manage_versions, @issue.project) %> -

    -<% end %> -
    - -
    - -<% if @issue.safe_attribute? 'start_date' %> -

    <%= f.text_field :start_date, :size => 10, :disabled => !@issue.leaf?, :required => @issue.required_attribute?('start_date') %><%= calendar_for('issue_start_date','start_date') if @issue.leaf? %>

    -<% end %> - -<% if @issue.safe_attribute? 'due_date' %> -

    <%= f.text_field :due_date, :size => 10, :disabled => !@issue.leaf?, :required => @issue.required_attribute?('due_date') %><%= calendar_for('issue_due_date','start_date') if @issue.leaf? %>

    -<% end %> - -<% if @issue.safe_attribute? 'estimated_hours' %> -

    <%= f.text_field :estimated_hours, :size => 3, :disabled => !@issue.leaf?, :required => @issue.required_attribute?('estimated_hours') %> <%= l(:field_hours) %>

    -<% end %> -<%= labelled_fields_for :issue, @issue do |f| %> -<%= call_hook(:view_issues_form_details_top, { :issue => @issue, :form => f }) %> +
    +
      +
    • + +
    • + +
    • +
      +
    • + +
    • +
      +
    • + +
    • +
      +
    • + + +
    • +
      +
    +
    + + + + + + + + + + + + + + + + + + + + + + +
    + <%= labelled_fields_for :issue, @issue do |f| %> + <%= call_hook(:view_issues_form_details_top, { :issue => @issue, :form => f }) %>
    • <% if @issue.safe_attribute? 'tracker_id' %> @@ -21,27 +72,23 @@ %> <% end %>
    • -
    • <% if @issue.safe_attribute? 'is_private' %> <%= f.check_box :is_private, :no_label => true ,:class=> "ml30"%> - - <% end %>
    • -
    • - <% if @issue.safe_attribute? 'project_id' %> -

      <%= f.select :project_id, project_tree_options_for_select(@issue.allowed_target_projects, :selected => @issue.project), {:required => true}, - :onchange => "updateIssueFrom('#{escape_javascript project_issue_form_path(@project, :id => @issue, :format => 'js')}')" %>

      - <% end %> -
    • - + + + <%#= f.select :project_id, project_tree_options_for_select(@issue.allowed_target_projects, :selected => @issue.project), {:required => true}, + :onchange => "updateIssueFrom('#{escape_javascript project_issue_form_path(@project, :id => @issue, :format => 'js')}')" %> + +
    • <% if @issue.safe_attribute? 'subject' %> <%= f.text_field :subject, - :size => 80, + :class => "w583", :maxlength => 255, :required => true, :style => "font-size:small", @@ -67,23 +114,22 @@ <%= link_to_function image_tag('edit.png'), '$(this).hide(); $("#issue_description_and_toolbar").show()' unless @issue.new_record? %> <%= content_tag 'span', :id => "issue_description_and_toolbar", :style => (@issue.new_record? ? nil : 'display:none') do %> <%= f.text_area :description, - :cols => 60, - :rows => (@issue.description.blank? ? 10 : [[10, @issue.description.length / 50].max, 100].min), - :accesskey => accesskey(:edit), - :class => "w583", - :no_label => true %> + + :rows => (@issue.description.blank? ? 10 : [[10, @issue.description.length / 50].max, 100].min), + :accesskey => accesskey(:edit), + :class => "w583", + :no_label => true %> <% end %> <%= wikitoolbar_for 'issue_description' %> <% end %>
    • +
    - -
    - <%= render :partial => 'issues/attributes' %> +
    + <%= render :partial => 'issues/attributes' %> +
    - <%= call_hook(:view_issues_form_details_bottom, { :issue => @issue, :form => f }) %> <% end %> - \ No newline at end of file diff --git a/app/views/issues/_history.html.erb b/app/views/issues/_history.html.erb index 9823e30b7..5b55de2fb 100644 --- a/app/views/issues/_history.html.erb +++ b/app/views/issues/_history.html.erb @@ -1,41 +1,38 @@ <% reply_links = authorize_for('issues', 'edit') -%> <% for journal in journals %> -
    - - - - - -
    <%= image_tag(url_to_avatar(journal.user), :class => "avatar") %> - - - - - - - - - - - - - - -
    <%= authoring journal.created_on, journal.user, :label => :label_updated_time_by %>
    <%= render_links(issue, journal, :reply_links => reply_links) unless journal.notes.blank? %>
    -

    - <% if journal.details.any? %> - <% details_to_strings(journal.details).each do |string| %> - - <%= string %> - <% end %> - <% end %> - <%= render_notes(issue, journal, :reply_links => reply_links) unless journal.notes.blank? %> -

    <%= format_time journal.created_on %>
    +
    + +
    +
    + <%= journal.user %><%= format_time journal.created_on %> +
    +

    + <% if journal.details.any? %> + <% details_to_strings(journal.details).each do |string| %> + <%= string %> + <% end %> + <% end %> +

    +
    +
    <%= render_links(issue, journal, :reply_links => reply_links) unless journal.notes.blank? %>
    +
    +
    +
    +
    +

    <%= render_notes(issue, journal, :reply_links => reply_links) unless journal.notes.blank? %>

    + <%= format_time journal.created_on %> +
    +
    +
    + +
    +
    +
    -
    + <%= call_hook(:view_issues_history_journal_bottom, { :journal => journal }) %> <% end %> diff --git a/app/views/issues/show.html.erb b/app/views/issues/show.html.erb index 62fd2d9c0..273243851 100644 --- a/app/views/issues/show.html.erb +++ b/app/views/issues/show.html.erb @@ -1,378 +1,160 @@

    <%= l(:label_issue_plural) %>

    +<% html_title "#{@issue.tracker.name} #{@issue.source_from}'#'#{@issue.project_index}: #{@issue.subject}" %>
    - +
    <%= link_to image_tag(url_to_avatar(@issue.author),:width => 46,:height => 46), user_path(@issue.author), :class => "ping_dispic" %>

    - <%= @issue.subject %>缺陷


    + <%= @issue.subject %><%= get_issue_typevalue(@issue.tracker_id) %>


    <%= @issue.author %> <% if @issue.created_on != @issue.updated_on %> - 更新于 <%= format_date(@issue.created_on).html_safe %> + 更新于 <%= format_time(@issue.created_on).html_safe %> <% else %> - 添加于 <%= format_date(@issue.updated_on).html_safe %> + 添加于 <%= format_time(@issue.updated_on).html_safe %> <% end %>

    - 删除编辑跟踪 + 'action_menu' %>
    -
    如图,点击课程动态中某空白处,也会跳转到相关页面的如图,点击课程动态中某空白处,也会跳转到相关页面的如图,点击课程动态中某空白处,也会跳转到相关页面的如图,点击课程动态中某空白处,也会跳转到相关页面的如图,点击课程动态中某空白处,也会跳转到相关页面的
    +
    + <% if @issue.description? || @issue.attachments.any? -%> + <% if @issue.description? %> + <%#= link_to l(:button_quote), quoted_issue_path(@issue.id), :remote => true, :method => 'post', :class => 'icon icon-comment' if authorize_for('issues', 'edit') %> + <%= textilizable @issue, :description, :attachments => @issue.attachments %> + <% end %> +
    + + + <%= link_to_attachments @issue, :thumbnails => true %>
    + <% end -%> + <%= call_hook(:view_issues_show_description_bottom, :issue => @issue) %> +
    +
    -
      -
    • * 状态  : 

      新增

      -
    • -
      -
    • * 优先级  : 

      正常 -
    • -
      -
    •  指派给  : 

      suntao -
    • -
      -
    •  目标版本  : 

      暑期版(Summer Beta) V0.8 -
    • -
      -
    + <%= issue_fields_rows do |rows| %> +
      -
        -
      •  开始日期  : 

        2015-03-31

        +
      • * 状态  : 

        <%= @issue.status.name %>

      • -
      •  计划完成日期  : 

        2015-03-31 +
      • * 优先级  : 

        <%= @issue.priority.name %>
      • -
      •  预期时间  : 

        2015-03-31 -
      • + <% unless @issue.disabled_core_fields.include?('assigned_to_id') %> +
      •  指派给  : 

        <%= @issue.assigned_to ? link_to_user(@issue.assigned_to, :class => "pro_info_p") : "-" %>
      • + <% end %>
        -
      •  % 完成  : 

        10 % -
      • + <% unless @issue.disabled_core_fields.include?('fixed_version_id') %> +
      •  目标版本  : 

        <%= (@issue.fixed_version ? link_to_version(@issue.fixed_version, :class => "pro_info_p") : "-") %>
      • + <% end %>
      -
    +
      + <% unless @issue.disabled_core_fields.include?('start_date') %> +
    •  开始日期  : 

      <%= format_date(@issue.start_date) %>

    • + <% end %> +
      + <% unless @issue.disabled_core_fields.include?('due_date') %> +
    •  计划完成日期  : 

      <%= format_date(@issue.due_date) %> +
    • + <% end %> +
      + <% unless @issue.disabled_core_fields.include?('estimated_hours') %> + +
    •  预期时间  : 

      <%= l_hours(@issue.estimated_hours) %> +
    • + + <% end %> +
      + <% unless @issue.disabled_core_fields.include?('done_ratio') %> +
    •  % 完成  : 

      <%= progress_bar(@issue.done_ratio, :width => '80px', :legend => "#{@issue.done_ratio}%") %> +
    • + <% end %> +
      +
    + <% end %> + <%#= render_custom_fields_rows(@issue) %> + <%#= call_hook(:view_issues_show_details_bottom, :issue => @issue) %> +
    - 引用回复 + <%= link_to l(:button_quote), quoted_issue_path(@issue.id), :remote => true, :method => 'post', :class => 'talk_edit fr' if authorize_for('issues', 'edit') %>
    - -
    -
    -
      -
    • - -
    • - -
    • -
      -
    • - -
    • -
      -
    • - -
    • -
      -
    • - - -
    • -
      -
    -
    -
    - -
    -
    - 修改属性 -
      -
    • - -
    • -
      -
    • - -
    • -
      -
    • - -
    • -
      -
    • - - -
    • -
      - -
    -
      -
    • - - -
    • -
      -
    • - - -
    • -
      -
    • - - 小时 -
    • -
      -
    • - -
    • -
      -
    -
    -
    - -
    -
    - - -
    -
    -
      -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    • -
    -
    - 提交预览 -
    -
    -
    - - -
    -
    -
    -
    - gugu012014-10-24 -
    -

    我写了一个验证身份证号码的程序,它是以一定内存空间(大概100M)换取cpu消耗,然后它的运算量就降低了,前十四位的验证就相当于转换类型再查表一样,所以它的验证号码速度比一般的方式快。如果还不明白就说明你写框架写多了,或者

    -
    - -
    -
    -
    -
    - jack 回复 jack: -

    我们尽快修复,此问题已发现原因,测试后我们尽快上线。谢谢反馈!,此问题已发现原因,测试后我们尽快上线。谢谢反馈!

    - 2014-10-31 - -
    -
    -
    -
    -
    -
    - jack 回复 jack: -

    我们尽快修复,此问题已发现原因,测试后我们尽快上线。谢谢反馈!,此问题已发现原因,测试后我们尽快上线。谢谢反馈!

    - 2014-10-31 - -
    - -
    -
    -
    + + <% if @journals.present? %> +
    +

    <%=l(:label_history)%>

    + <%= render :partial => 'history', :locals => { :issue => @issue, :journals => @journals } %>
    -
    -
    - +<% end %>
    - - - - - - - - - <%# html_title "#{@issue.tracker.name} ##{@issue.id}: #{@issue.subject}" %> -<% html_title "#{@issue.tracker.name} #{@issue.source_from}'#'#{@issue.project_index}: #{@issue.subject}" %> - -<%= render :partial => 'action_menu' %> -

    - <%= issue_heading(@issue) %> -

    - - -
    - <% if @prev_issue_id || @next_issue_id %> - - <% end %> + + - - -
    -<%= render_issue_subject_with_tree(@issue) %> -
    - - <%= render :partial => "/praise_tread/praise_tread",:locals => {:obj => @issue,:show_flag => true,:user_id =>User.current.id,:horizontal => false}%> - + + + -

    - <%= authoring @issue.created_on, @issue.author %>. - <% if @issue.created_on != @issue.updated_on %> - <%= l(:label_updated_time, time_tag(@issue.updated_on)).html_safe %>. - <% end %> -

    + + <%#= authoring @issue.created_on, @issue.author %>. + + <%#= l(:label_updated_time, time_tag(@issue.updated_on)).html_safe %>. + + -
    - <%= render :partial => 'tags/tag', :locals => {:obj => @issue,:object_flag => "3" }%> -
    - -<%= issue_fields_rows do |rows| - rows.left l(:field_status), h(@issue.status.name), :class => 'status' - rows.left l(:field_priority), h(@issue.priority.name), :class => 'priority' + + + - unless @issue.disabled_core_fields.include?('assigned_to_id') - #modified by nie - #modified by huang - rows.left l(:field_assigned_to), (image_tag url_to_avatar(@issue.assigned_to(@user)), :class => 'avatar').to_s.html_safe + (@issue.assigned_to ? link_to_user(@issue.assigned_to) : "-"), :class => 'assigned-to' - end - # end huang - unless @issue.disabled_core_fields.include?('category_id') - rows.left l(:field_category), h(@issue.category ? @issue.category.name : "-"), :class => 'category' - end - unless @issue.disabled_core_fields.include?('fixed_version_id') - rows.left l(:field_fixed_version), (@issue.fixed_version ? link_to_version(@issue.fixed_version) : "-"), :class => 'fixed-version' - end + + - unless @issue.disabled_core_fields.include?('start_date') - rows.right l(:field_start_date), format_date(@issue.start_date), :class => 'start-date' - end - unless @issue.disabled_core_fields.include?('due_date') - rows.right l(:field_due_date), format_date(@issue.due_date), :class => 'due-date' - end - unless @issue.disabled_core_fields.include?('done_ratio') - rows.right l(:field_done_ratio), progress_bar(@issue.done_ratio, :width => '80px', :legend => "#{@issue.done_ratio}%"), :class => 'progress' - end - unless @issue.disabled_core_fields.include?('estimated_hours') - unless @issue.estimated_hours.nil? - rows.right l(:field_estimated_hours), l_hours(@issue.estimated_hours), :class => 'estimated-hours' - end - end - if User.current.allowed_to?(:view_time_entries, @project) - rows.right l(:label_spent_time), (@issue.total_spent_hours > 0 ? link_to(l_hours(@issue.total_spent_hours), project_issue_time_entries_path(@project, @issue)) : "-"), :class => 'spent-time' - end -end %> -<%= render_custom_fields_rows(@issue) %> -<%= call_hook(:view_issues_show_details_bottom, :issue => @issue) %> -
    + + + + -<% if @issue.description? || @issue.attachments.any? -%> -
    -<% if @issue.description? %> -
    -
    - <%= link_to l(:button_quote), quoted_issue_path(@issue.id), :remote => true, :method => 'post', :class => 'icon icon-comment' if authorize_for('issues', 'edit') %> -
    + + + + -

    <%=l(:field_description)%>

    -
    - <%= textilizable @issue, :description, :attachments => @issue.attachments %> -
    -
    -<% end %> -<%= link_to_attachments @issue, :thumbnails => true %> -<% end -%> + + + + + + -<%= call_hook(:view_issues_show_description_bottom, :issue => @issue) %> - -<% if false # !@issue.leaf? || User.current.allowed_to?(:manage_subtasks, @project) %> -
    - -
    -
    - <%= link_to_new_subtask(@issue) if User.current.allowed_to?(:manage_subtasks, @project) %> -
    - -

    <%=l(:label_subtask_plural)%>

    -<%= render_descendants_tree(@issue) unless @issue.leaf? %> -
    -<% end %> - -<% if @relations.present? || User.current.allowed_to?(:manage_issue_relations, @project) %> -
    -
    -<%= render :partial => 'relations' %> -
    -<% end %> - -
    + <% if @changesets.present? %>
    @@ -380,23 +162,16 @@ end %> <%= render :partial => 'changesets', :locals => { :changesets => @changesets} %>
    <% end %> - -<% if @journals.present? %> -
    -

    <%=l(:label_history)%>

    -<%= render :partial => 'history', :locals => { :issue => @issue, :journals => @journals } %> -
    -<% end %> + -
    -<%= render :partial => 'action_menu' %> + +
    <% if @issue.editable? %>
    -

    <%= l(:button_update) %>

    - <%= render :partial => 'edit' %> + <%= render :partial => 'edit' %>
    <% end %> diff --git a/app/views/layouts/base_projects.html.erb b/app/views/layouts/base_projects.html.erb index 467be2758..b979e2b41 100644 --- a/app/views/layouts/base_projects.html.erb +++ b/app/views/layouts/base_projects.html.erb @@ -24,7 +24,7 @@ { $('#light').css('display','none'); $('#fade').css('display','none'); - //三种类型之所以分三个页面写,防备后面会有新的功能增加,便于扩展 + // if($("#development_group").attr("checked") == "checked"){ $("#setting_project_type").replaceWith("<%= escape_javascript(project_type_link(l(:label_development_team)))%>") $("#project_memu").html('<%= escape_javascript(render(:partial => 'layouts/base_development_group')) %>'); diff --git a/config/locales/zh.yml b/config/locales/zh.yml index 95e93debc..0668f152e 100644 --- a/config/locales/zh.yml +++ b/config/locales/zh.yml @@ -911,6 +911,7 @@ zh: button_copy_and_follow: 复制并转到新问题 button_annotate: 追溯 button_update: 更新 + button_edit: 编辑 button_configure: 配置 button_quote: 引用 button_duplicate: 副本 diff --git a/public/stylesheets/project.css b/public/stylesheets/project.css index 32adea2bf..b07f1ac9f 100644 --- a/public/stylesheets/project.css +++ b/public/stylesheets/project.css @@ -81,7 +81,7 @@ a.pro_mes_w{ height:20px; float:left;display:block; color:#999999;} .pro_info_box{ margin-left:60px; background:#f0fbff; height:80px; padding:10px 0;} .pro_info_box ul{} .pro_info_box ul li{ margin-bottom:10px;} -.pro_info_p{ color:#0781b4; float:left; } +.pro_info_p{ color:#0781b4; float:left; width:160px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis; } .edit_pro_box{overflow:hidden;display:none; margin-bottom:30px; border-bottom:1px dashed #CCC; padding-bottom:10px;} /****翻页***/ ul.wlist{ float:right; border-bottom:none; height:30px; margin-top:20px; } From 7577f4cbbc6978dae7fb583b499007dd4f93c9b5 Mon Sep 17 00:00:00 2001 From: huang Date: Sat, 11 Apr 2015 09:45:13 +0800 Subject: [PATCH 020/285] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E7=BC=BA=E9=99=B7?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E9=A1=B5=E9=9D=A2=E6=A0=B7=E5=BC=8F=E8=B0=83?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/issues/_attributes.html.erb | 39 ++++++++++++++------- app/views/issues/_form.html.erb | 49 --------------------------- 2 files changed, 27 insertions(+), 61 deletions(-) diff --git a/app/views/issues/_attributes.html.erb b/app/views/issues/_attributes.html.erb index ff32e99e4..413299b2d 100644 --- a/app/views/issues/_attributes.html.erb +++ b/app/views/issues/_attributes.html.erb @@ -5,32 +5,37 @@
    • <% if @issue.safe_attribute?('status_id') && @allowed_statuses.present? %> -

      <%= f.select :status_id, (@allowed_statuses.collect {|p| [p.name, p.id]}), {:required => true}, :onchange => "updateIssueFrom('#{escape_javascript project_issue_form_path(@project, :id => @issue, :format => 'js')}')" %>

      + <%= f.select :status_id, (@allowed_statuses.collect {|p| [p.name, p.id]}), + { :onchange => "updateIssueFrom('#{escape_javascript project_issue_form_path(@project, :id => @issue, :format => 'js')}')"}, :class => "w150" %> <% else %>

      <%= h(@issue.status.name) %>

      <% end %>
    • -
    • +
    • <% if @issue.safe_attribute? 'priority_id' %> -

      <%= f.select :priority_id, (@priorities.collect {|p| [p.name, p.id]}), {:required => true}, :disabled => !@issue.leaf? %>

      + <%= f.select :priority_id, (@priorities.collect {|p| [p.name, p.id]}), {:required => true}, :disabled => !@issue.leaf?, :class => "w150" %> <% end %>
    • <% if @issue.safe_attribute? 'assigned_to_id' %> -

      <%= f.select :assigned_to_id, principals_options_for_select(@issue.assignable_users, @issue.assigned_to), :include_blank => true, :required => @issue.required_attribute?('assigned_to_id') %>

      + <%= f.select :assigned_to_id, principals_options_for_select(@issue.assignable_users, @issue.assigned_to), + :include_blank => true, :required => @issue.required_attribute?('assigned_to_id'), + :class => "w150" %> <% end %>
    • <% if @issue.safe_attribute?('fixed_version_id') && @issue.assignable_versions.any? %> -

      <%= f.select :fixed_version_id, version_options_for_select(@issue.assignable_versions, @issue.fixed_version), :include_blank => true, :required => @issue.required_attribute?('fixed_version_id') %> - <%= link_to(image_tag('add.png', :style => 'vertical-align: middle;'), + <%= f.select :fixed_version_id, version_options_for_select(@issue.assignable_versions, @issue.fixed_version), :include_blank => true, + :required => @issue.required_attribute?('fixed_version_id'), + :class => "w150" %> + <%#= link_to(image_tag('add.png', :style => 'vertical-align: middle;'), new_project_version_path(@issue.project), :remote => true, :method => 'get', :title => l(:label_version_new), :tabindex => 200) if User.current.allowed_to?(:manage_versions, @issue.project) %> -

      + <% end %>
    • @@ -38,17 +43,27 @@
    • <% if @issue.safe_attribute? 'start_date' %> -

      <%= f.text_field :start_date, :size => 10, :disabled => !@issue.leaf?, :required => @issue.required_attribute?('start_date') %><%= calendar_for('issue_start_date','start_date') if @issue.leaf? %>

      - <% end %> +

      <%= f.text_field :start_date, :size => 10, :disabled => !@issue.leaf?, + :class => "w150", + :required => @issue.required_attribute?('start_date') %> + <%= calendar_for('issue_start_date','start_date') if @issue.leaf? %>

      + <% end %>
    • <% if @issue.safe_attribute? 'due_date' %> -

      <%= f.text_field :due_date, :size => 10, :disabled => !@issue.leaf?, :required => @issue.required_attribute?('due_date') %><%= calendar_for('issue_due_date','start_date') if @issue.leaf? %>

      - <% end %> +

      <%= f.text_field :due_date, :size => 10, + :class => "w150", + :disabled => !@issue.leaf?, + :required => @issue.required_attribute?('due_date') %> + <%= calendar_for('issue_due_date','start_date') if @issue.leaf? %>

      + <% end %>
    • <% if @issue.safe_attribute? 'estimated_hours' %> -

      <%= f.text_field :estimated_hours, :size => 3, :disabled => !@issue.leaf?, :required => @issue.required_attribute?('estimated_hours') %> <%= l(:field_hours) %>

      +

      <%= f.text_field :estimated_hours, :size => 3, + :disabled => !@issue.leaf?, + :class => "w150", + :required => @issue.required_attribute?('estimated_hours') %> <%= l(:field_hours) %>

      <% end %>
    • diff --git a/app/views/issues/_form.html.erb b/app/views/issues/_form.html.erb index 50c35f6a1..6816ed48b 100644 --- a/app/views/issues/_form.html.erb +++ b/app/views/issues/_form.html.erb @@ -6,55 +6,6 @@ //issue_project_id } - -
      -
        -
      • - -
      • - -
      • -
        -
      • - -
      • -
        -
      • - -
      • -
        -
      • - - -
      • -
        -
      -
      - - - - - - - - - - - - - - - - - - - -
      From 3313bef0b15b2e40de74dec8efb5a6f03cf7afb3 Mon Sep 17 00:00:00 2001 From: sw <939547590@qq.com> Date: Sat, 11 Apr 2015 11:00:06 +0800 Subject: [PATCH 021/285] =?UTF-8?q?=E8=B7=AF=E7=94=B1=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/images/WebFooterCompany/0 | Bin 0 -> 5246 bytes public/stylesheets/public.css | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 public/images/WebFooterCompany/0 diff --git a/public/images/WebFooterCompany/0 b/public/images/WebFooterCompany/0 new file mode 100644 index 0000000000000000000000000000000000000000..7d228b32b9c81a73ed195dd65f647cc33406a001 GIT binary patch literal 5246 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 Nz$=KfhXH=(KLGpbtPTJG literal 0 HcmV?d00001 diff --git a/public/stylesheets/public.css b/public/stylesheets/public.css index b01c2a7e0..3a87bb42d 100644 --- a/public/stylesheets/public.css +++ b/public/stylesheets/public.css @@ -184,7 +184,7 @@ div#menu ul ul a.parent {background: url(../images/item.png) -20px 6px no-repea div#menu ul ul a.parent:hover {background: url(../images/item.png) -20px -11px no-repeat;} /* menu::level1 */ div#menu a { padding: 5px 12px 0 10px;line-height: 30px; color: #fff;} -div#menu li { background: url(images/main-delimiter.png) 98% 4px no-repeat; } +/*div#menu li { background: url(images/main-delimiter.png) 98% 4px no-repeat; }*/ div#menu li.last { background: none; } /* menu::level2 */ div#menu ul ul li { background: none; } From 8f6b095fdb2b584ce1017edd3e7b433804d22055 Mon Sep 17 00:00:00 2001 From: huang Date: Sat, 11 Apr 2015 11:48:39 +0800 Subject: [PATCH 022/285] =?UTF-8?q?=E6=96=B0=E9=97=BB=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/news/_project_show.html.erb | 136 ++++++++++---------------- public/stylesheets/project.css | 6 +- 2 files changed, 59 insertions(+), 83 deletions(-) diff --git a/app/views/news/_project_show.html.erb b/app/views/news/_project_show.html.erb index bde061f31..c83d9133f 100644 --- a/app/views/news/_project_show.html.erb +++ b/app/views/news/_project_show.html.erb @@ -27,6 +27,11 @@ } } + function submitComment() + { + $("#add_comment_form").submit(); + } + function regexDescription() { var name = $("#news_description").val(); @@ -54,104 +59,71 @@ } -
      - <%= watcher_link(@news, User.current) %> - <%= link_to(l(:button_edit), - edit_news_path(@news), - :class => 'icon icon-edit', - :accesskey => accesskey(:edit), - :onclick => '$("#edit-news").show(); return false;') if User.current.allowed_to?(:manage_news, @project) %> - <%= delete_link news_path(@news) if User.current.allowed_to?(:manage_news, @project) %> -
      - -

      <%=h @news.title %>

      <% if authorize_for('news', 'edit') %> <% end %> -
      - -
      - - <%= textilizable(@news, :description) %> - -
      - <%= link_to_attachments @news %> -
      - - <% if @news.commentable? %> -

      +

      + <%= link_to image_tag(url_to_avatar(@news.author),:width => 42,:height => 42), user_path(@news.author), :class => "problem_pic fl" %> +
      +

      <%=h @news.title %>

      + <%#= watcher_link(@news, User.current) %> + <%= link_to(l(:button_edit), + edit_news_path(@news), + :class => 'talk_edit fr', + :accesskey => accesskey(:edit), + :onclick => '$("#edit-news").show(); return false;') if User.current.allowed_to?(:manage_news, @project) %> + <%= delete_link news_path(@news),:class => 'talk_edit fr' if User.current.allowed_to?(:manage_news, @project) %> +
      +
      <%= textAreailizable(@news, :description) %>
      <%= l(:label_create_time) %> : <%= format_time(@news.created_on) %>
      + <%= link_to_attachments_course @news %> + +
      +
      +
      + +<% if @news.commentable? %> +
      <%= toggle_link l(:label_comment_add), "add_comment_form", :focus => "comment_comments" %>

      - <%= form_tag({:controller => 'comments', :action => 'create', :id => @news}, :id => "add_comment_form", :style => "display:none;") do %> + <%= form_tag({:controller => 'comments', :action => 'create', :id => @news}, :id => "add_comment_form") do %>
      - <%= text_area 'comment', 'comments', :cols => 80, :rows => 15, :class => 'wiki-edit' %> - <%= wikitoolbar_for 'comment_comments' %> + <%= text_area 'comment', 'comments', :rows => 5, :style => "width:98%" %> +
      -

      - <%= submit_tag l(:button_add) %> -

      + <%= l(:label_comment_add) %> <% end %> <% end %> - - <% html_title @news.title -%> - - <% content_for :header_tags do %> - <%= stylesheet_link_tag 'scm' %> - <% end %> - - -
      -
      -

      <%= l(:label_comment_plural) %>

      - <% comments = @comments.reverse %> - <% comments.each do |comment| %> +
      +<% comments = @comments.reverse %> +<% comments.each do |comment| %> <% next if comment.new_record? %> - - - - - -
      - <%= image_tag(url_to_avatar(comment.author), :class => "avatar")%> - - - - - - - - - - - - -
      - <%= link_to_user(comment.author) if comment.respond_to?(:author) %> - <%= l(:label_project_newadd) %> - <%= l(:label_comment_plural) %> -
      - - <%= textilizable(comment.comments) %> - -
      - <%= format_time(comment.created_on) %> - - <%= link_to_if_authorized image_tag('delete.png'), {:controller => 'comments', :action => 'destroy', :id => @news, :comment_id => comment}, - :data => {:confirm => l(:text_are_you_sure)}, - :method => :delete, - :title => l(:button_delete) %> -
      +
      +
      <%= link_to image_tag(url_to_avatar(comment.author),:width => 42,:height => 42), user_path(comment.author), :class => "ping_dispic" %>
      +
      +
      + <%= link_to_user_header(comment.author,false,:class => 'c_blue fb fl mb10 ') if comment.respond_to?(:author) %><%= format_time(comment.created_on) %> +
      +

      <%= textAreailizable(comment.comments) %>

      +
      +
      <%= link_to_if_authorized image_tag('delete.png'), {:controller => 'comments', :action => 'destroy', :id => @news, :comment_id => comment}, + :data => {:confirm => l(:text_are_you_sure)}, + :method => :delete, + :title => l(:button_delete) %> +
      +
      +
      +
      <% end if @comments.any? %>
      +<% content_for :header_tags do %> + <%= stylesheet_link_tag 'scm' %> +<% end %> +<% html_title @news.title -%> diff --git a/public/stylesheets/project.css b/public/stylesheets/project.css index b07f1ac9f..5c88c6be3 100644 --- a/public/stylesheets/project.css +++ b/public/stylesheets/project.css @@ -337,4 +337,8 @@ a:hover.st_add{ color:#ff8e15;} padding-left: 20px; padding-top: 2px; padding-bottom: 3px; -} \ No newline at end of file +} +/*新闻*/ +.msg_box{ width:670px; height:173px; border-bottom:1px dashed #CCC; padding-top:10px;} +.msg_box h4{ } +.msg_box textarea{width:658px;height:90px;padding:5px;overflow:hidden;background-color: #ffffff; border:1px solid #CCC; margin:5px 0px; color:#666; font-size:12px; } \ No newline at end of file From 9ad00e437f92eb3fca5dd603ab85fddcbb09230c Mon Sep 17 00:00:00 2001 From: sw <939547590@qq.com> Date: Sat, 11 Apr 2015 11:51:11 +0800 Subject: [PATCH 023/285] =?UTF-8?q?1=E3=80=81=E4=BF=AE=E6=94=B9=E5=BC=95?= =?UTF-8?q?=E7=94=A8=E7=9A=84=E6=A0=B7=E5=BC=8F=202=E3=80=81=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E9=94=99=E8=AF=AF=E5=9B=BE=E7=89=87=E9=93=BE=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/stylesheets/project.css | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/public/stylesheets/project.css b/public/stylesheets/project.css index b07f1ac9f..b44661654 100644 --- a/public/stylesheets/project.css +++ b/public/stylesheets/project.css @@ -160,8 +160,8 @@ a:hover.upload_btn_grey{background:#8a8a8a;} .upload_btn{width:80px; height:26px;} .upload_check{ margin-top:4px;} -a.link_file{ background:url(../images/courses/pic_file.png) 0 2px no-repeat; padding-left:20px; color:#64bdd9; } -a:hover.link_file{ background:url(../images/courses/pic_file.png) 0 -25px no-repeat; color:#3ca5c6;} +a.link_file{ background:url(../images/pic_file.png) 0 2px no-repeat; padding-left:20px; color:#64bdd9; } +a:hover.link_file{ background:url(../images/pic_file.png) 0 -25px no-repeat; color:#3ca5c6;} .r_txt_tit{width:510px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;color:#15bccf; float:left; color:#09658c; font-size:14px;} /* 新建问题 */ .newpro_box{ color:#6d6d6d;} @@ -337,4 +337,22 @@ a:hover.st_add{ color:#ff8e15;} padding-left: 20px; padding-top: 2px; padding-bottom: 3px; -} \ No newline at end of file +} + +/*add by sw*/ +blockquote { + border-left: 1px solid #e0e0e0; + border-right: 1px solid #e0e0e0; + border-top: 1px solid #e0e0e0; + border-bottom: 1px solid #e0e0e0; + padding-left: .6em; + padding-top: .6em; + padding-right: .6em; + padding-bottom: .6em; + margin-left: 1.4em; + margin-right: .4em; + border-radius: 4px; + font-family: "Microsoft YaHei"; + background: url(http://test.forge.trustie.net/images/requirements/xreference.jpg.pagespeed.ic.h4inUJNyH0.jpg); +} +/*end*/ \ No newline at end of file From db0cc88142f1f15c60befc3036b4ce3b9b30202a Mon Sep 17 00:00:00 2001 From: sw <939547590@qq.com> Date: Sat, 11 Apr 2015 13:32:39 +0800 Subject: [PATCH 024/285] =?UTF-8?q?=E9=9D=99=E6=80=81=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/projects/settings.html.erb | 495 ++++++++++++++++++++++++++- 1 file changed, 488 insertions(+), 7 deletions(-) diff --git a/app/views/projects/settings.html.erb b/app/views/projects/settings.html.erb index 68f49689b..f57b62465 100644 --- a/app/views/projects/settings.html.erb +++ b/app/views/projects/settings.html.erb @@ -1,9 +1,490 @@
      -

      <%=l(:label_settings)%>

      +

      配置

      -<% if @project.project_type == 1 %> - <%= render_tabs course_settings_tabs %> -<% else %> - <%= render_project_settings_tabs project_settings_tabs %> -<% end %> -<% html_title(l(:label_settings)) -%> + +
      +
      +
        +
      • 信息
      • +
      • 模块
      • +
      • 成员
      • +
      • 版本
      • +
      • 问题类别
      • +
      • 版本库
      • +
      • 活动(时间跟踪)
      • +
      • 代码评审
      • + +
      +
      +
      + +
      +
      +
        +
        +
      • + 上传图片 + +
        +
      • +
      • + + +
      • +
        + +
      • + + +
        +
      • +
      • + + +
      • +
        +
      • + + +
        +
      • +
      • + + +
        +
      • +
        +
      + 保存 +
      +
      + +
      +
      +

      请选择此项目可以使用的模块:

      +
        +
      • +
      • +
      • +
      • +
      • +
      • +
      • +
      • +
      • +
      • +
      • +
      • +
      +
      +

      全选   |   清除

      +

      保存

      +
      + +
      +
      + + +
      + +
      +
      +

      +申请加入

      + +
        +
      • 角色:
      • +
      • +
      • +
      • +
      +
      + 批准拒绝 + +
      +
      +
      +

      添加成员

      + +
      +
      +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      版本 日期描述 状态共享Wiki 页面
      + 暑期版(Summer Beta) V0.8 + 2013-08-30打开 + 编辑 + 删除 +
      + 正式版(First Release) V1.0 + 2013-11-01正式对外提供服务的版本打开 + 编辑 + 删除 +
      + 商业版(Second Release) V2.0 + 2013-08-30增加在线支付、实名认证等功能,界面更加美化,用户交互更加友好!打开 + 编辑 + 删除 +
      + JACK SUMMER V0.8 + 2014-08-25试用人员的开发版本打开 + 编辑 + 删除 +
      + LongJun Contest - V1.0 + contest网站的开发分支打开 + 编辑 + 删除 +
      + SZZH V1.1 (Supported by BJSZZH) + 神舟公司外包开发版本打开 + 编辑 + 删除 +
      + 关闭已完成的版本 + + 新建版本 +
      +
      +
        +
      • + + +
      • +
      • + + +
      • +
      • + + +
      • +
      • + + +
      • +
      • + + + +
      • +
        +
      • + + +
      • + 保存 +
      + +
      +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      问题类别 指派给
      思路 编辑 + 删除
      思路suntao 编辑 + 删除
      思路gugu 编辑 + 删除
      思路 编辑 + 删除
      + + 新建问题类别 +
      +
      +
        +
      • + + +
      • +
        +
      • + + +
      • +
        +
      + 保存 +
      +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      标识 主版本库管理系统 库路径
      trustie2Githttp://xianbo_trustie2用户列表
      microsGithttp://xianbo_trustie2用户列表
      socialforgeGithttp://xianbo_trustie2用户列表删除
      + + 新建版本库 +
      +
      +
        +
      • + + +
      • +
      • + + +
      • +
      • + + + 长度必须在 1 到 254 个字符之间。 仅小写字母(a-z)、数字、破折号(-)和下划线(_)可以使用。 +一旦保存,标识无法修改。 +
      • +
      • + + + 该密码在项目组内可共享 +
      • +
        +
      + 保存 + 取消 +
      +
      +
      + + + + + + + + + + + + + + + + + + + + +
      名称 系统活动活动
      Design
      Development
      + 保存 + 重置 +
      +
      +
      +
        +
      • +
      • 设置代码评审的默认跟踪标签:
      • +
      • +
      • +
      • + + +
      • +
      • + + + 与之相关的评审问题 + + + 与之无关的评审问题 + + + 什么也不做 +
      • +
      • + + 激活 +
      • +
      + 保存 +
      +
      + +
      +
      \ No newline at end of file From 837fe88545219cccaaa8b1026d6e1b96a0ecddb2 Mon Sep 17 00:00:00 2001 From: sw <939547590@qq.com> Date: Sat, 11 Apr 2015 14:19:52 +0800 Subject: [PATCH 025/285] =?UTF-8?q?=E8=BF=98=E5=8E=9F=E5=86=B2=E7=AA=81?= =?UTF-8?q?=EF=BC=8C=E5=A2=9E=E5=8A=A0=E9=A1=B9=E7=9B=AE=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E5=88=87=E6=8D=A2js?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/news/_project_show.html.erb | 204 ++++++++------------------ public/javascripts/project.js | 8 +- 2 files changed, 65 insertions(+), 147 deletions(-) diff --git a/app/views/news/_project_show.html.erb b/app/views/news/_project_show.html.erb index bde061f31..e2b58e683 100644 --- a/app/views/news/_project_show.html.erb +++ b/app/views/news/_project_show.html.erb @@ -1,157 +1,69 @@ +<% + btn_tips = l(:label_news_new) + label_tips = l(:label_news) +%>
      -

      <%= l(:label_news) %>

      +

      <%= label_tips %>

      - -
      - <%= watcher_link(@news, User.current) %> - <%= link_to(l(:button_edit), - edit_news_path(@news), - :class => 'icon icon-edit', - :accesskey => accesskey(:edit), - :onclick => '$("#edit-news").show(); return false;') if User.current.allowed_to?(:manage_news, @project) %> - <%= delete_link news_path(@news) if User.current.allowed_to?(:manage_news, @project) %> + <% end %> +
      -

      <%=h @news.title %>

      +
      + <% if @newss.empty? %> +

      + <%= l(:label_no_data) %> +

      + <% else %> + <% @newss.each do |news| %> +
      + <%= link_to image_tag(url_to_avatar(news.author),:width => 42,:height => 42), user_path(news.author), :class => "problem_pic fl" %> +
      + <%= link_to_user_header(news.author,false,{:class=> 'problem_name c_orange fl'}) if news.respond_to?(:author) %> + <%= l(:label_release_news) %>:<%= link_to h(news.title), news_path(news),:class => 'problem_tit fl fb c_dblue' %>
      +
      +

      <%= news.description %>
      <%= l(:label_create_time) %> :<%= format_time(news.created_on) %>

      + +
      +
      +
      -<% if authorize_for('news', 'edit') %> - + <% end %> +
      + +
        + <%= pagination_links_full @news_pages, @news_count, :per_page_links => false, :remote => false, :flag => true%> +
      + +<% other_formats_links do |f| %> + <%= f.link_to 'Atom', :url => {:project_id => @project, :key => User.current.rss_key} %> <% end %> -
      +<% content_for :header_tags do %> + <%= auto_discovery_link_tag(:atom, params.merge({:format => 'atom', :page => nil, :key => User.current.rss_key})) %> + <%= stylesheet_link_tag 'scm' %> +<% end %> -
      - - <%= textilizable(@news, :description) %> - -
      - <%= link_to_attachments @news %> -
      - - <% if @news.commentable? %> -

      - <%= toggle_link l(:label_comment_add), "add_comment_form", :focus => "comment_comments" %> -

      - <%= form_tag({:controller => 'comments', :action => 'create', :id => @news}, :id => "add_comment_form", :style => "display:none;") do %> -
      - <%= text_area 'comment', 'comments', :cols => 80, :rows => 15, :class => 'wiki-edit' %> - <%= wikitoolbar_for 'comment_comments' %> -
      -

      - <%= submit_tag l(:button_add) %> -

      - <% end %> - <% end %> +<% html_title(l(:label_news_plural)) -%> - <% html_title @news.title -%> - - <% content_for :header_tags do %> - <%= stylesheet_link_tag 'scm' %> - <% end %> - - -
      -
      -

      <%= l(:label_comment_plural) %>

      - <% comments = @comments.reverse %> - <% comments.each do |comment| %> - <% next if comment.new_record? %> - - - - - -
      - <%= image_tag(url_to_avatar(comment.author), :class => "avatar")%> - - - - - - - - - - - - -
      - <%= link_to_user(comment.author) if comment.respond_to?(:author) %> - <%= l(:label_project_newadd) %> - <%= l(:label_comment_plural) %> -
      - - <%= textilizable(comment.comments) %> - -
      - <%= format_time(comment.created_on) %> - - <%= link_to_if_authorized image_tag('delete.png'), {:controller => 'comments', :action => 'destroy', :id => @news, :comment_id => comment}, - :data => {:confirm => l(:text_are_you_sure)}, - :method => :delete, - :title => l(:button_delete) %> -
      - <% end if @comments.any? %> -
      + diff --git a/public/javascripts/project.js b/public/javascripts/project.js index 52d96f2d7..20ef731d7 100644 --- a/public/javascripts/project.js +++ b/public/javascripts/project.js @@ -159,4 +159,10 @@ function close_window(type){ $("#" + type).attr("checked","checked"); } -//弹框l \ No newline at end of file +//弹框l + +///////////////////////////////////////////// +function g(o){return document.getElementById(o);} +function HoverLi(n){ + for(var i=1;i<=8;i++){g('pro_st_tb_'+i).className='pro_st_normaltab';g('pro_st_tbc_0'+i).className='pro_st_undis';}g('pro_st_tbc_0'+n).className='pro_st_dis';g('pro_st_tb_'+n).className='pro_st_hovertab'; +} \ No newline at end of file From b06e9ce468ce152818bd6fe4422709d71e987d4e Mon Sep 17 00:00:00 2001 From: sw <939547590@qq.com> Date: Sat, 11 Apr 2015 14:22:50 +0800 Subject: [PATCH 026/285] =?UTF-8?q?=E5=B9=B2=E6=8E=89=E9=87=8D=E5=A4=8D?= =?UTF-8?q?=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/stylesheets/project.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/stylesheets/project.css b/public/stylesheets/project.css index 8963b5256..c28f3709e 100644 --- a/public/stylesheets/project.css +++ b/public/stylesheets/project.css @@ -123,7 +123,7 @@ a:hover.talk_edit{ color:#ff5722;} .talk_text{ border:1px solid #64bdd9; height:100px;width:585px; background:#fff; margin-left:5px; padding:5px; margin-bottom:10px;} .talk_new ul li{ } .sb{width:70px; height:26px; color:#606060; cursor:pointer;} -a.blue_btn{ background:#64bdd9; display:block; font-size:14px;color:#fff; font-weight:normal; text-align:center; margin-left:10px; margin-bottom:10px; padding:2px 10px;} +/*a.blue_btn{ background:#64bdd9; display:block; font-size:14px;color:#fff; font-weight:normal; text-align:center; margin-left:10px; margin-bottom:10px; padding:2px 10px;}*/ a:hover.blue_btn{ background:#329cbd;} a.grey_btn{ background:#d9d9d9; color:#656565;font-size:14px; font-weight:normal; text-align:center; margin-left:10px; margin-bottom:10px; padding:2px 10px;} a:hover.grey_btn{ background:#717171; color:#fff;} From 0c90f2361d91cef69f3baec2358846a59898508e Mon Sep 17 00:00:00 2001 From: huang Date: Sat, 11 Apr 2015 14:25:47 +0800 Subject: [PATCH 027/285] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E5=8F=8D=E9=A6=88=E9=A1=B5=E9=9D=A2=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/courses/feedback.html.erb | 2 +- app/views/projects/_history.html.erb | 27 ++++++------------- app/views/projects/_project_jours.html.erb | 17 +++++------- app/views/projects/feedback.html.erb | 2 +- app/views/words/_new_respond_project.html.erb | 15 +++++++++++ 5 files changed, 31 insertions(+), 32 deletions(-) create mode 100644 app/views/words/_new_respond_project.html.erb diff --git a/app/views/courses/feedback.html.erb b/app/views/courses/feedback.html.erb index 0a8458a22..d115f1703 100644 --- a/app/views/courses/feedback.html.erb +++ b/app/views/courses/feedback.html.erb @@ -42,7 +42,7 @@ function checkMaxLength() { if (currentLength > maxLength) this.relatedElement.className = 'toomuch'; else - this.relatedElement.className = ''; + this.relatedElement.className = ''; this.relatedElement.firstChild.nodeValue = currentLength; } diff --git a/app/views/projects/_history.html.erb b/app/views/projects/_history.html.erb index d02b561b0..3633ed7b5 100644 --- a/app/views/projects/_history.html.erb +++ b/app/views/projects/_history.html.erb @@ -1,21 +1,18 @@ <% reply_allow = JournalsForMessage.create_by_user? User.current %> - -
      -
      - <% if journals.size > 0 %> +<% if journals.size > 0 %> <% for journal in journals %>
      - -
      +
      <%= link_to image_tag(url_to_avatar(journal.user),:width => '46',:height => '46'), user_path(journal.user) %>
      +
      - <%= link_to journal.user, user_path(journal.user),:style => " font-weight:bold; color:#15bccf; margin-right:30px; background:none;", :target => "_blank"%><%= format_time(journal.created_on) %> + <%= link_to journal.user, user_path(journal.user), :class => 'c_blue fb fl mb10', :target => "_blank" %> + <%= format_time(journal.created_on) %>

      <%= textilizable journal.notes%>

      <% ids = 'project_respond_form_'+ journal.id.to_s%> - <% if journal.user == User.current|| User.current.admin? %> <%= link_to(l(:label_bid_respond_delete), {:controller => 'words', :action => 'destroy', :object_id => journal, :user_id => @user}, @@ -28,20 +25,15 @@ <% end %> - - <%= l(:label_bids_published) %>  - <%= time_tag(journal.created_on,:style => "float:initial").html_safe %>  - <%= l(:label_bids_published_ago) %> -
      -
      +
      <% ids = 'project_respond_form_'+ journal.id.to_s%> <% if reply_allow %>
      - <%= render :partial => 'words/new_respond', :locals => {:journal => journal, :m_reply_id => journal,:show_name => true} %> + <%= render :partial => 'words/new_respond_project', :locals => {:journal => journal, :m_reply_id => journal,:show_name => true} %>
      <% end %> -
      +
      <%= render :partial => "words/journal_reply", :locals => {:journal => journal, :show_name => true} %>
      @@ -50,9 +42,6 @@
      <% end %> <% end %> -
      -
      - diff --git a/app/views/projects/_project_jours.html.erb b/app/views/projects/_project_jours.html.erb index b05ffe2cc..5b1e3c065 100644 --- a/app/views/projects/_project_jours.html.erb +++ b/app/views/projects/_project_jours.html.erb @@ -1,9 +1,6 @@ -
      <% reply_allow = JournalsForMessage.create_by_user? User.current %> - -

      <%= l(:label_user_response) %>

      - +

      <%= l(:label_user_response) %>

      <% if !User.current.logged?%>
      <%= l(:label_user_login_tips) %> @@ -11,16 +8,14 @@
      <% else %> -
      + <%= form_for('new_form', :method => :post, :url => {:controller => 'words', :action => 'leave_project_message'}) do |f|%> <%= f.text_area 'project_message', :rows => 3, :cols => 65, - :placeholder => "#{l(:label_welcome_my_respond)}", - :style => "resize: none; width: 98%", - :class => 'noline',:maxlength => 250%> - <%= submit_tag l(:button_leave_meassge), :name => nil , :class => "enterprise" , :style => "display: block; float: right; margin-right: 1%; margin-top: 1px;"%> + :placeholder => "#{l(:label_welcome_my_respond)}" %> + <%= submit_tag l(:button_leave_meassge), :name => nil , :class => "blue_btn fr" %> <% end %> -
      + <% end %>
      @@ -28,4 +23,4 @@ <%= render :partial => 'history',:locals => { :journals => @jour, :state => false} %>
        <%= pagination_links_full @obj_pages, @obj_count, :per_page_links => false, :remote => false, :flag => true%>
      -
      + diff --git a/app/views/projects/feedback.html.erb b/app/views/projects/feedback.html.erb index 2f9e9b866..ad1d4c619 100644 --- a/app/views/projects/feedback.html.erb +++ b/app/views/projects/feedback.html.erb @@ -2,7 +2,7 @@

      用户反馈

      <% reply_allow = JournalsForMessage.create_by_user? User.current %> -<%= stylesheet_link_tag 'css', :media => 'all' %> +<%#= stylesheet_link_tag 'css', :media => 'all' %> <%= render :partial => 'project_jours', :locals => { :contest => @contest, :journals => @jour, :state => false} diff --git a/app/views/words/_new_respond_project.html.erb b/app/views/words/_new_respond_project.html.erb new file mode 100644 index 000000000..e705b7fd3 --- /dev/null +++ b/app/views/words/_new_respond_project.html.erb @@ -0,0 +1,15 @@ +<%= form_tag(words_create_reply_path, :remote => true) do %> + <%= text_area_tag 'user_notes', "", :class => 'w520 h50 mb5', + :style => "resize: none;overflow: hidden;",:rows => 4, + :placeholder => l(:label_feedback_respond_content), + + :maxlength => 250 %> + <%= hidden_field_tag 'reference_id', params[:reference_id], :value => journal.id %> + <%= hidden_field_tag 'reference_user_id', params[:reference_user_id], :value => m_reply_id.user.id %> + <%= hidden_field_tag 'reference_message_id', params[:reference_message_id], :value => m_reply_id.id %> + <%= hidden_field_tag 'show_name',params[:show_name],:value => show_name.nil? ? true : show_name %> + + <%= submit_tag l(:button_feedback_respond), :name => nil , + :class => "reply_btn"%> + +<% end %> \ No newline at end of file From 4adfec5640d656b29d92174314d1d202f94fcdce Mon Sep 17 00:00:00 2001 From: huang Date: Sat, 11 Apr 2015 14:49:26 +0800 Subject: [PATCH 028/285] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E6=A0=B7=E5=BC=8F?= =?UTF-8?q?=E5=86=B2=E7=AA=81=20=E6=B7=BB=E5=8A=A0=E6=96=B0=E9=97=BB?= =?UTF-8?q?=E5=B1=95=E7=A4=BA=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/news/_project_show.html.erb | 176 +++++++++++++++++--------- public/stylesheets/project.css | 18 +-- 2 files changed, 124 insertions(+), 70 deletions(-) diff --git a/app/views/news/_project_show.html.erb b/app/views/news/_project_show.html.erb index e2b58e683..eed2864d0 100644 --- a/app/views/news/_project_show.html.erb +++ b/app/views/news/_project_show.html.erb @@ -1,69 +1,129 @@ -<% - btn_tips = l(:label_news_new) - label_tips = l(:label_news) -%>
      -

      <%= label_tips %>

      +

      <%= l(:label_news) %>

      -
      -

      <%= l(:label_total_news) %><%= @news_count %><%= l(:label_project_new_list) %>

      - <% if @project && User.current.allowed_to?(:manage_news, @project) %> - <%= link_to(btn_tips, new_project_news_path(@project), - :class => 'problem_new_btn fl c_dorange') %> -
      + + +<% if authorize_for('news', 'edit') %> + - -
        - <%= pagination_links_full @news_pages, @news_count, :per_page_links => false, :remote => false, :flag => true%> -
      - -<% other_formats_links do |f| %> - <%= f.link_to 'Atom', :url => {:project_id => @project, :key => User.current.rss_key} %> +
      +
      <% end %> +
      + <%= link_to image_tag(url_to_avatar(@news.author),:width => 42,:height => 42), user_path(@news.author), :class => "problem_pic fl" %> +
      +

      <%=h @news.title %>

      + <%#= watcher_link(@news, User.current) %> + <%= link_to(l(:button_edit), + edit_news_path(@news), + :class => 'talk_edit fr', + :accesskey => accesskey(:edit), + :onclick => '$("#edit-news").show(); return false;') if User.current.allowed_to?(:manage_news, @project) %> + <%= delete_link news_path(@news),:class => 'talk_edit fr' if User.current.allowed_to?(:manage_news, @project) %> +
      +
      <%= textAreailizable(@news, :description) %>
      <%= l(:label_create_time) %> : <%= format_time(@news.created_on) %>
      + <%= link_to_attachments_course @news %> + +
      +
      +
      + +<% if @news.commentable? %> +
      + <%= toggle_link l(:label_comment_add), "add_comment_form", :focus => "comment_comments" %> +

      + <%= form_tag({:controller => 'comments', :action => 'create', :id => @news}, :id => "add_comment_form") do %> +
      + <%= text_area 'comment', 'comments', :rows => 5, :style => "width:98%" %> + +
      + <%= l(:label_comment_add) %> + <% end %> + <% end %> +
      +<% comments = @comments.reverse %> +<% comments.each do |comment| %> + <% next if comment.new_record? %> +
      +
      <%= link_to image_tag(url_to_avatar(comment.author),:width => 42,:height => 42), user_path(comment.author), :class => "ping_dispic" %>
      +
      +
      + <%= link_to_user_header(comment.author,false,:class => 'c_blue fb fl mb10 ') if comment.respond_to?(:author) %><%= format_time(comment.created_on) %> +
      +

      <%= textAreailizable(comment.comments) %>

      +
      +
      <%= link_to_if_authorized image_tag('delete.png'), {:controller => 'comments', :action => 'destroy', :id => @news, :comment_id => comment}, + :data => {:confirm => l(:text_are_you_sure)}, + :method => :delete, + :title => l(:button_delete) %> +
      +
      +
      +
      + <% end if @comments.any? %> +
      <% content_for :header_tags do %> - <%= auto_discovery_link_tag(:atom, params.merge({:format => 'atom', :page => nil, :key => User.current.rss_key})) %> <%= stylesheet_link_tag 'scm' %> <% end %> - -<% html_title(l(:label_news_plural)) -%> - - +<% html_title @news.title -%> diff --git a/public/stylesheets/project.css b/public/stylesheets/project.css index c28f3709e..f212ee2d1 100644 --- a/public/stylesheets/project.css +++ b/public/stylesheets/project.css @@ -106,12 +106,6 @@ a.talk_edit{ color:#426e9a; margin-right:5px;} a:hover.talk_edit{ color:#ff5722;} .talk_reply { background:#eeeeee; padding:10px; margin-bottom:10px;} .talkpage_text{ border:1px solid #64bdd9; width:600px; color:#7d7d7d; padding:5px; margin:10px 0 10px 50px; background:#fff;} -.ping_dispic a{ display:block; height:46px; width:46px; border:1px solid #CCC; padding:1px; float:left;} -.ping_dispic a:hover{border:1px solid #15bccf;} -.ping_discon{ float:left; width:610px; margin-left:10px; } -.ping_distop p{ color:#5f5f5f;} -.ping_disfoot a{ float:right; color: #6883b6; margin-left:5px; margin-bottom:5px;} -.ping_distop span a{ float:right; width:20px; height:20px; background:url(images/star.png) -24px 0 no-repeat; margin-right:3px;} .recall{ border-top:1px solid #CCC; padding:5px 0;} .recall_head{ float:left;} .recall_head a{ display:block; width:30px; height:30px; border:1px solid #CCC; padding:1px;} @@ -333,11 +327,7 @@ a:hover.st_add{ color:#ff8e15;} .newpro_box input{ height:26px; float:left; margin-bottom:10px;} .newpro_box textarea{ height:150px; float:left; margin-bottom:10px;} .newpro_box select{ height:26px; float:left; margin-bottom:10px;} -.label{ width:80px; text-align:right; font-size:14px; display:block; float:left;} -.label02{ width:110px; text-align:right; font-size:14px; display:block; float:left;} -.collapsible{ border-left:none;border-right:none;border-bottom:none; border-top:1px solid #e4e4e4; padding-top:10px; } -/*问题查询*/ -.icon-checked { background-image: url(../images/true.png); } +.label{ width:80px; text-align:right; font-size:14 background-image: url(../images/true.png); } .icon-reload { background-image: url(../images/reload.png); } .icon { background-position: 0% 50%; @@ -407,4 +397,8 @@ a:hover.member_btn{ background:#329cbd;} .pro_st_edit_ban ul li{ margin-bottom:10px;} .pro_st_edit_ku{display:none; margin-top:20px;} .pro_st_edit_ku ul li{margin-bottom:10px;} -/*end*/ \ No newline at end of file +/*end*/ +/*用户反馈*/ +.msg_box{ width:670px; height:173px; border-bottom:1px dashed #CCC; padding-top:10px;} +.msg_box h4{ } +.msg_box textarea{width:658px;height:90px;padding:5px;overflow:hidden;background-color: #ffffff; border:1px solid #CCC; margin:5px 0px; color:#666; font-size:12px; } \ No newline at end of file From 78868b34f0d914675c5bd5a6bec3e180007f8f9f Mon Sep 17 00:00:00 2001 From: huang Date: Sat, 11 Apr 2015 15:12:06 +0800 Subject: [PATCH 029/285] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=BC=BA=E9=99=B7?= =?UTF-8?q?=E4=B8=AD=E5=9B=9B=E4=B8=AD=E9=A2=9C=E8=89=B2=E6=8C=89=E9=92=AE?= =?UTF-8?q?=E4=BC=9A=E6=8A=98=E6=96=AD=E6=8D=A2=E8=A1=8C=E7=9A=84bug=20?= =?UTF-8?q?=E5=8C=BA=E5=88=AB=E6=96=B0=E9=97=BB=E5=92=8C=E9=80=9A=E7=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/news/_project_news.html.erb | 2 +- config/locales/projects/zh.yml | 1 + public/stylesheets/public.css | 8 ++++---- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/app/views/news/_project_news.html.erb b/app/views/news/_project_news.html.erb index 688635796..97902aa16 100644 --- a/app/views/news/_project_news.html.erb +++ b/app/views/news/_project_news.html.erb @@ -27,7 +27,7 @@ <%= link_to image_tag(url_to_avatar(news.author),:width => 42,:height => 42), user_path(news.author), :class => "problem_pic fl" %>
      <%= link_to_user_header(news.author,false,{:class=> 'problem_name c_orange fl'}) if news.respond_to?(:author) %> - <%= l(:label_release_news) %>:<%= link_to h(news.title), news_path(news),:class => 'problem_tit fl fb c_dblue' %>
      + <%= l(:label_add_news) %>:<%= link_to h(news.title), news_path(news),:class => 'problem_tit fl fb c_dblue' %>

      <%= news.description %>
      <%= l(:label_create_time) %> :<%= format_time(news.created_on) %>

      diff --git a/config/locales/projects/zh.yml b/config/locales/projects/zh.yml index 99f8bafca..bbf9cc343 100644 --- a/config/locales/projects/zh.yml +++ b/config/locales/projects/zh.yml @@ -287,6 +287,7 @@ zh: label_topic_score: 讨论区得分 label_topic_number: 讨论区帖子数量 + label_add_news: 添加了新闻 # diff --git a/public/stylesheets/public.css b/public/stylesheets/public.css index e814a7495..6630a01d6 100644 --- a/public/stylesheets/public.css +++ b/public/stylesheets/public.css @@ -137,10 +137,10 @@ a:hover.orange_btn{ background:#d63502;} .nolink_btn{ background:#BCBCBC; color: #fff; padding:2px 5px;} .more_btn{-moz-border-radius:3px; -webkit-border-radius:3px; border:1px solid #9DCEFF; color:#9DCEFF; border-radius:3px; padding:0px 3px;} .upbtn{ margin:42px 0 0 10px; border:none;} -.red_btn_cir{ background:#e74c3c; padding:1px 10px; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; color:#fff; font-weight:normal;font-size:12px;} -.green_btn_cir{ background:#28be6c; padding:1px 10px; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; color:#fff; font-weight:normal;font-size:12px;} -.blue_btn_cir{ background:#3498db; padding:1px 10px; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; color:#fff; font-weight:normal;font-size:12px;} -.orange_btn_cir{ background:#e67e22; padding:1px 10px; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; color:#fff; font-weight:normal; font-size:12px;} +.red_btn_cir{ background:#e74c3c; padding:1px 10px; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; color:#fff; font-weight:normal;font-size:12px;white-space:nowrap;} +.green_btn_cir{ background:#28be6c; padding:1px 10px; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; color:#fff; font-weight:normal;font-size:12px;white-space:nowrap; } +.blue_btn_cir{ background:#3498db; padding:1px 10px; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; color:#fff; font-weight:normal;font-size:12px;white-space:nowrap; } +.orange_btn_cir{ background:#e67e22; padding:1px 10px; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; color:#fff; font-weight:normal; font-size:12px;white-space:nowrap; } /* commonpic */ .pic_date{ display:block; background:url(../images/public_icon.png) -31px 0 no-repeat; width:16px; height:15px; float:left;} .pic_add{ display:block; background:url(../images/public_icon.png) -31px -273px no-repeat; width:16px; height:15px; float:left;} From d2a77b3d4130a5704a3d23dff178c0110bca9f71 Mon Sep 17 00:00:00 2001 From: huang Date: Sat, 11 Apr 2015 15:34:59 +0800 Subject: [PATCH 030/285] =?UTF-8?q?=E6=B7=BB=E5=8A=A0issues=E5=9B=9E?= =?UTF-8?q?=E5=A4=8D=E7=BB=9F=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/issues/_list.html.erb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/views/issues/_list.html.erb b/app/views/issues/_list.html.erb index a336468dd..889a37cbd 100644 --- a/app/views/issues/_list.html.erb +++ b/app/views/issues/_list.html.erb @@ -21,7 +21,8 @@ <%= l(:label_updated_time_on, format_date(issue.updated_on)).html_safe %>

      - 001 + <%=link_to "#{issue.journals.all.count}".html_safe, issue_path(issue.id), :class => "pro_mes_w" %> +
      <% end %>
      From 7ad3c2d578fd92932cbadcd5b94f46365af452c8 Mon Sep 17 00:00:00 2001 From: sw <939547590@qq.com> Date: Sat, 11 Apr 2015 16:17:36 +0800 Subject: [PATCH 031/285] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E9=85=8D=E7=BD=AEjs=20=E5=A2=9E=E5=8A=A0=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E7=9B=B8=E5=85=B3=E5=AD=90=E7=95=8C=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/projects/settings.html.erb | 510 ++---------------- .../settings/_new_activities.html.erb | 23 + .../projects/settings/_new_edit.html.erb | 40 ++ .../settings/_new_issue_categories.html.erb | 57 ++ .../projects/settings/_new_members.html.erb | 67 +++ .../projects/settings/_new_modules.html.erb | 19 + .../settings/_new_repositories.html.erb | 69 +++ .../projects/settings/_new_versions.html.erb | 140 +++++ public/javascripts/project.js | 19 +- 9 files changed, 485 insertions(+), 459 deletions(-) create mode 100644 app/views/projects/settings/_new_activities.html.erb create mode 100644 app/views/projects/settings/_new_edit.html.erb create mode 100644 app/views/projects/settings/_new_issue_categories.html.erb create mode 100644 app/views/projects/settings/_new_members.html.erb create mode 100644 app/views/projects/settings/_new_modules.html.erb create mode 100644 app/views/projects/settings/_new_repositories.html.erb create mode 100644 app/views/projects/settings/_new_versions.html.erb diff --git a/app/views/projects/settings.html.erb b/app/views/projects/settings.html.erb index f57b62465..8598422b9 100644 --- a/app/views/projects/settings.html.erb +++ b/app/views/projects/settings.html.erb @@ -5,14 +5,14 @@
        -
      • 信息
      • -
      • 模块
      • -
      • 成员
      • -
      • 版本
      • -
      • 问题类别
      • -
      • 版本库
      • -
      • 活动(时间跟踪)
      • -
      • 代码评审
      • +
      • 信息
      • +
      • 模块
      • +
      • 成员
      • +
      • 版本
      • +
      • 问题类别
      • +
      • 版本库
      • +
      • 活动(时间跟踪)
      • +
      • 代码评审
      @@ -20,471 +20,69 @@
      -
        -
        -
      • - 上传图片 - -
        -
      • -
      • - - -
      • -
        - -
      • - - -
        -
      • -
      • - - -
      • -
        -
      • - - -
        -
      • -
      • - - -
        -
      • -
        -
      - 保存 -
      + <%= render :partial=>"projects/settings/new_edit" %>
      -
      -

      请选择此项目可以使用的模块:

      -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      -
      -

      全选   |   清除

      -

      保存

      + <%= render :partial=>"projects/settings/new_modules" %>
      -
      - - -
      - -
      -
      -

      +申请加入

      - -
        -
      • 角色:
      • -
      • -
      • -
      • -
      -
      - 批准拒绝 - -
      -
      -
      -

      添加成员

      - -
      -
      + <%= render :partial=>"projects/settings/new_members" %>
      +
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      版本 日期描述 状态共享Wiki 页面
      - 暑期版(Summer Beta) V0.8 - 2013-08-30打开 - 编辑 - 删除 -
      - 正式版(First Release) V1.0 - 2013-11-01正式对外提供服务的版本打开 - 编辑 - 删除 -
      - 商业版(Second Release) V2.0 - 2013-08-30增加在线支付、实名认证等功能,界面更加美化,用户交互更加友好!打开 - 编辑 - 删除 -
      - JACK SUMMER V0.8 - 2014-08-25试用人员的开发版本打开 - 编辑 - 删除 -
      - LongJun Contest - V1.0 - contest网站的开发分支打开 - 编辑 - 删除 -
      - SZZH V1.1 (Supported by BJSZZH) - 神舟公司外包开发版本打开 - 编辑 - 删除 -
      - 关闭已完成的版本 - - 新建版本 -
      -
      -
        -
      • - - -
      • -
      • - - -
      • -
      • - - -
      • -
      • - - -
      • -
      • - - - -
      • -
        -
      • - - -
      • - 保存 -
      - -
      + <%= render :partial=>"projects/settings/new_versions" %>
      +
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      问题类别 指派给
      思路 编辑 - 删除
      思路suntao 编辑 - 删除
      思路gugu 编辑 - 删除
      思路 编辑 - 删除
      - - 新建问题类别 -
      -
      -
        -
      • - - -
      • -
        -
      • - - -
      • -
        -
      - 保存 -
      + <%= render :partial=>"projects/settings/new_issue_categories" %>
      +
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      标识 主版本库管理系统 库路径
      trustie2Githttp://xianbo_trustie2用户列表
      microsGithttp://xianbo_trustie2用户列表
      socialforgeGithttp://xianbo_trustie2用户列表删除
      - - 新建版本库 -
      -
      -
        -
      • - - -
      • -
      • - - -
      • -
      • - - - 长度必须在 1 到 254 个字符之间。 仅小写字母(a-z)、数字、破折号(-)和下划线(_)可以使用。 -一旦保存,标识无法修改。 -
      • -
      • - - - 该密码在项目组内可共享 -
      • -
        -
      - 保存 - 取消 -
      + <%= render :partial=>"projects/settings/new_repositories" %>
      +
      - - - - - - - - - - - - - - - - - - - - -
      名称 系统活动活动
      Design
      Development
      - 保存 - 重置 + <%= render :partial=>"projects/settings/new_activities" %>
      -
      -
      -
        -
      • -
      • 设置代码评审的默认跟踪标签:
      • -
      • -
      • -
      • - - -
      • -
      • - - - 与之相关的评审问题 - - 与之无关的评审问题 + + + + + + + + + + + + + + + + + + + + + - - 什么也不做 -
      • -
      • - - 激活 -
      • -
      - 保存 -
      -
      + + + + + + + + + + + + + +
      \ No newline at end of file diff --git a/app/views/projects/settings/_new_activities.html.erb b/app/views/projects/settings/_new_activities.html.erb new file mode 100644 index 000000000..8f0cbbf49 --- /dev/null +++ b/app/views/projects/settings/_new_activities.html.erb @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + +
      名称 系统活动活动
      Design
      Development
      +保存 +重置 \ No newline at end of file diff --git a/app/views/projects/settings/_new_edit.html.erb b/app/views/projects/settings/_new_edit.html.erb new file mode 100644 index 000000000..92d52e5b6 --- /dev/null +++ b/app/views/projects/settings/_new_edit.html.erb @@ -0,0 +1,40 @@ +
        +
        +
      • + 上传图片 + +
        +
      • +
      • + + +
      • +
        + +
      • + + +
        +
      • +
      • + + +
      • +
        +
      • + + +
        +
      • +
      • + + +
        +
      • +
        +
      +保存 +
      \ No newline at end of file diff --git a/app/views/projects/settings/_new_issue_categories.html.erb b/app/views/projects/settings/_new_issue_categories.html.erb new file mode 100644 index 000000000..b690b11ce --- /dev/null +++ b/app/views/projects/settings/_new_issue_categories.html.erb @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      问题类别 指派给
      思路 编辑 + 删除
      思路suntao 编辑 + 删除
      思路gugu 编辑 + 删除
      思路 编辑 + 删除
      + +新建问题类别 +
      +
      +
        +
      • + + +
      • +
        +
      • + + +
      • +
        +
      + 保存 +
      \ No newline at end of file diff --git a/app/views/projects/settings/_new_members.html.erb b/app/views/projects/settings/_new_members.html.erb new file mode 100644 index 000000000..a38b462e2 --- /dev/null +++ b/app/views/projects/settings/_new_members.html.erb @@ -0,0 +1,67 @@ +
      + + +
      + +
      +
      +

      +申请加入

      + +
        +
      • 角色:
      • +
      • +
      • +
      • +
      +
      + 批准拒绝 + +
      +
      +
      +

      添加成员

      + +
      +
      \ No newline at end of file diff --git a/app/views/projects/settings/_new_modules.html.erb b/app/views/projects/settings/_new_modules.html.erb new file mode 100644 index 000000000..e2696a23e --- /dev/null +++ b/app/views/projects/settings/_new_modules.html.erb @@ -0,0 +1,19 @@ +
      +

      请选择此项目可以使用的模块:

      +
        +
      • +
      • +
      • +
      • +
      • +
      • +
      • +
      • +
      • +
      • +
      • +
      • +
      +
      +

      全选   |   清除

      +

      保存

      \ No newline at end of file diff --git a/app/views/projects/settings/_new_repositories.html.erb b/app/views/projects/settings/_new_repositories.html.erb new file mode 100644 index 000000000..d964c8f22 --- /dev/null +++ b/app/views/projects/settings/_new_repositories.html.erb @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      标识 主版本库管理系统 库路径
      trustie2Githttp://xianbo_trustie2用户列表
      microsGithttp://xianbo_trustie2用户列表
      socialforgeGithttp://xianbo_trustie2用户列表删除
      + +新建版本库 +
      +
      +
        +
      • + + +
      • +
      • + + +
      • +
      • + + + 长度必须在 1 到 254 个字符之间。 仅小写字母(a-z)、数字、破折号(-)和下划线(_)可以使用。 +一旦保存,标识无法修改。 +
      • +
      • + + + 该密码在项目组内可共享 +
      • +
        +
      + 保存 + 取消 +
      \ No newline at end of file diff --git a/app/views/projects/settings/_new_versions.html.erb b/app/views/projects/settings/_new_versions.html.erb new file mode 100644 index 000000000..28c3c42ef --- /dev/null +++ b/app/views/projects/settings/_new_versions.html.erb @@ -0,0 +1,140 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      版本 日期描述 状态共享Wiki 页面
      + 暑期版(Summer Beta) V0.8 + 2013-08-30打开 + 编辑 + 删除 +
      + 正式版(First Release) V1.0 + 2013-11-01正式对外提供服务的版本打开 + 编辑 + 删除 +
      + 商业版(Second Release) V2.0 + 2013-08-30增加在线支付、实名认证等功能,界面更加美化,用户交互更加友好!打开 + 编辑 + 删除 +
      + JACK SUMMER V0.8 + 2014-08-25试用人员的开发版本打开 + 编辑 + 删除 +
      + LongJun Contest - V1.0 + contest网站的开发分支打开 + 编辑 + 删除 +
      + SZZH V1.1 (Supported by BJSZZH) + 神舟公司外包开发版本打开 + 编辑 + 删除 +
      +关闭已完成的版本 + +新建版本 +
      +
      +
        +
      • + + +
      • +
      • + + +
      • +
      • + + +
      • +
      • + + +
      • +
      • + + + +
      • +
        +
      • + + +
      • + 保存 +
      + +
      \ No newline at end of file diff --git a/public/javascripts/project.js b/public/javascripts/project.js index 20ef731d7..148fe44cc 100644 --- a/public/javascripts/project.js +++ b/public/javascripts/project.js @@ -162,7 +162,20 @@ function close_window(type){ //弹框l ///////////////////////////////////////////// -function g(o){return document.getElementById(o);} -function HoverLi(n){ - for(var i=1;i<=8;i++){g('pro_st_tb_'+i).className='pro_st_normaltab';g('pro_st_tbc_0'+i).className='pro_st_undis';}g('pro_st_tbc_0'+n).className='pro_st_dis';g('pro_st_tb_'+n).className='pro_st_hovertab'; +//项目配置 +function project_setting(n) +{ + for(var i = 1;i < 9; i++) + { + if(i == n) + { + $("#pro_st_tb_"+i).removeClass().addClass("pro_st_hovertab"); + $("#pro_st_tbc_0"+i).removeClass().addClass("pro_st_dis"); + } + else + { + $("#pro_st_tb_"+i).removeClass().addClass("pro_st_dis"); + $("#pro_st_tbc_0"+i).removeClass().addClass("pro_st_undis"); + } + } } \ No newline at end of file From 36d76cfa074a1ccf0b9ca70eebfb98c3ea04a8cf Mon Sep 17 00:00:00 2001 From: huang Date: Sat, 11 Apr 2015 16:33:25 +0800 Subject: [PATCH 032/285] =?UTF-8?q?=E7=BC=BA=E9=99=B7=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=95=B4=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/issues/index.html.erb | 27 +++++++++++---------------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/app/views/issues/index.html.erb b/app/views/issues/index.html.erb index 9e9feb33c..7ac495c8a 100644 --- a/app/views/issues/index.html.erb +++ b/app/views/issues/index.html.erb @@ -20,11 +20,9 @@ <% html_title(@query.new_record? ? l(:label_issue_plural) : @query.name) %>
      <%= form_tag({:controller => 'issues', :action => 'index', :project_id => @project}, :method => :get, :id => 'query_form', :class => 'query_form') do %> - <%= hidden_field_tag 'set_filter', '1' %> - -
      + <%= hidden_field_tag 'set_filter', '1' %> +
      ---<%= l :label_query_new %>--- -
      "> @@ -34,24 +32,24 @@ <%= render :partial => 'queries/filters', :locals => {:query => @query} %>
      - -

      全选   |   清除

      -

      保存

      \ No newline at end of file +

      请选择此项目可以使用的模块:

      +<%= form_for @project,:url => { :action => 'modules', :id => @project },:html => {:id => 'modules-form',:method => :post} do |f| %> +
      +
        + <% Redmine::AccessControl.available_project_modules.each do |m| %> +
      • + +
      • + <% end %> +
      +
      +

      + 全选 +   |   + 清除 +

      +

      + 保存 +

      +<% end %> + diff --git a/public/javascripts/project.js b/public/javascripts/project.js index 148fe44cc..618268f41 100644 --- a/public/javascripts/project.js +++ b/public/javascripts/project.js @@ -174,7 +174,7 @@ function project_setting(n) } else { - $("#pro_st_tb_"+i).removeClass().addClass("pro_st_dis"); + $("#pro_st_tb_"+i).removeClass().addClass("pro_st_normaltab"); $("#pro_st_tbc_0"+i).removeClass().addClass("pro_st_undis"); } } diff --git a/public/stylesheets/project.css b/public/stylesheets/project.css index ddb23e282..556717e9e 100644 --- a/public/stylesheets/project.css +++ b/public/stylesheets/project.css @@ -363,9 +363,9 @@ blockquote { .pro_st_tb_{ border-bottom:3px solid #e4e4e4; text-align:center; margin-bottom:10px; } .pro_st_tb_ ul{height:24px;} .pro_st_tb_ li{float:left;height: 24px;width: auto; padding:0 10px;cursor:pointer; } -.pro_st_normaltab { color:#15bccf ; border-bottom:3px solid #e4e4e4; } -.pro_st_hovertab { color:#656767; font-weight:bold; border-bottom:3px solid #15bccf; } -.pro_st_normaltab a { color:#64bdd9 ; } +.pro_st_normaltab{ color:#15bccf ; border-bottom:3px solid #e4e4e4; } +.pro_st_hovertab{ color:#656767; font-weight:bold; border-bottom:3px solid #15bccf; } +.pro_st_normaltab a{ color:#64bdd9 ; } .pro_st_hovertab a{color:#fff; background-color:#64bdd9; text-decoration:none;} .pro_st_dis{display:block; } .pro_st_undis{display:none;} From 5d249823dfb410f3fc142e31045976bf5ccf5808 Mon Sep 17 00:00:00 2001 From: huang Date: Mon, 13 Apr 2015 18:27:05 +0800 Subject: [PATCH 036/285] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E5=BA=93=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/application_helper.rb | 10 ++ app/views/projects/settings.html.erb | 4 +- .../settings/_new_repositories.html.erb | 131 +++++++++++++++--- 3 files changed, 120 insertions(+), 25 deletions(-) diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index ebd7ab064..24d34991a 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -1349,6 +1349,16 @@ module ApplicationHelper link_to l(:button_delete), url, options end + def delete_new_link(url, options={}) + options = { + :method => :delete, + :data => {:confirm => l(:text_are_you_sure)}, + :class => "c_purple" + }.merge(options) + + link_to l(:button_delete), url, options + end + def preview_link(url, form, target='preview', options={}) content_tag 'a', l(:label_preview), { :href => "#", diff --git a/app/views/projects/settings.html.erb b/app/views/projects/settings.html.erb index 8598422b9..1ff0f8a79 100644 --- a/app/views/projects/settings.html.erb +++ b/app/views/projects/settings.html.erb @@ -11,7 +11,7 @@
    • 版本
    • 问题类别
    • 版本库
    • -
    • 活动(时间跟踪)
    • +
    • 代码评审
    @@ -85,4 +85,4 @@
    -
    \ No newline at end of file +
    diff --git a/app/views/projects/settings/_new_repositories.html.erb b/app/views/projects/settings/_new_repositories.html.erb index d964c8f22..5c5c9fbb2 100644 --- a/app/views/projects/settings/_new_repositories.html.erb +++ b/app/views/projects/settings/_new_repositories.html.erb @@ -1,29 +1,46 @@ - - - - - - - +<% project_path_cut = RepositoriesHelper::PROJECT_PATH_CUT %> +<% ip = RepositoriesHelper::REPO_IP_ADDRESS %> +<% if @project.repositories.any? %> +
    标识 主版本库管理系统 库路径
    + + + + + + + <% @project.repositories.sort.each do |repository| %> - - - - - - - - - - - - - - + + + + <%if repository.scm_name=="Git"%> + + <%else %> + + <% end %> + + + <% end %> +<% else %> +

    <%= l(:label_no_data) %>

    +<% end %> @@ -36,7 +53,12 @@
    <%= l(:field_identifier) %> <%= l(:field_repository_is_default) %><%= l(:label_scm) %> <%= l(:label_repository_path) %>
    trustie2Githttp://xianbo_trustie2用户列表
    microsGithttp://xianbo_trustie2用户列表 + <%= link_to repository.identifier, {:controller => 'repositories', :action => 'show', :id => @project, :repository_id => repository.identifier_param} if repository.identifier.present? %> <%= checked_image repository.is_default? %><%=h repository.scm_name %>http://<%= repository.login.to_s %>_<%= repository.identifier.to_s%>@<%= ip %> + <%=h repository.url.slice(project_path_cut, repository.url.length) %><%=h repository.url %> + <% if repository.scm_name=="Git"%> + <%if User.current.allowed_to?(:manage_repository, @project) %> + <%= link_to(l(:label_user_plural), committers_repository_path(repository), + :class => 'c_blue') %> + <% end %> + <% end %> + + <% if repository.login.to_s==User.current.login.to_s %> + <%= delete_new_link repository_path(repository) %> + <% end %>
    socialforge
    -新建版本库 + + <% course_tag = @project.project_type %> + <% if User.current.allowed_to?(:manage_repository, @project) %> + <%= link_to l(:label_repository_new_repos), newrepo_project_repository_path(@project, :course => course_tag), :class => 'c_blue fl' %>

    + <% end %> +
      @@ -66,4 +88,67 @@
    保存 取消 -
    \ No newline at end of file +
    + + +<% project_path_cut = RepositoriesHelper::PROJECT_PATH_CUT %> +<% ip = RepositoriesHelper::REPO_IP_ADDRESS %> +<% if @project.repositories.any? %> + + + + + + + + + + + + <% @project.repositories.sort.each do |repository| %> + + + + + <%if repository.scm_name=="Git"%> + + <%else %> + + <% end %> + + + + <% end %> + +
    <%= l(:field_identifier) %><%= l(:field_repository_is_default) %><%= l(:label_scm) %><%= l(:label_repository_path) %>
    + <%= link_to repository.identifier, + {:controller => 'repositories', :action => 'show',:id => @project, :repository_id => repository.identifier_param} if repository.identifier.present? %> + <%= checked_image repository.is_default? %><%=h repository.scm_name %>http://<%= repository.login.to_s %>_<%= repository.identifier.to_s%>@<%= ip %><%=h repository.url.slice(project_path_cut, repository.url.length) %><%=h repository.url %> + <% if repository.scm_name=="Subversion"%> + <%if User.current.allowed_to?(:manage_repository, @project) %> + <%= link_to(l(:label_user_plural), committers_repository_path(repository), + :class => 'icon icon-user') %> + <%= link_to(l(:button_edit), edit_repository_path(repository), + :class => 'icon icon-edit') %> + <%= delete_link repository_path(repository) %> + <% end %> + <% elsif repository.scm_name=="Git"%> + <%if User.current.allowed_to?(:manage_repository, @project) %> + + <%= link_to(l(:label_user_plural), committers_repository_path(repository), + :class => 'icon icon-user') %> + <% if repository.login.to_s==User.current.login.to_s %> + <%= delete_link repository_path(repository) %> + <% end %> + <% end %> + <% end %> +
    +<% else %> +

    <%= l(:label_no_data) %>

    +<% end %> + +<% course_tag = @project.project_type %> +<% if User.current.allowed_to?(:manage_repository, @project) %> + <%= link_to l(:label_repository_new_repos), newrepo_project_repository_path(@project, :course => course_tag), :class => 'icon icon-add' %>

    +<% end %> \ No newline at end of file From 6ce998bb5422fecacc045a5c42c497b87e15f86e Mon Sep 17 00:00:00 2001 From: huang Date: Mon, 13 Apr 2015 18:30:20 +0800 Subject: [PATCH 037/285] =?UTF-8?q?=E5=8E=BB=E6=8E=89=E6=96=B0=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E5=BA=93=E4=B8=AD=E5=86=97=E4=BD=99=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../settings/_new_repositories.html.erb | 100 ------------------ 1 file changed, 100 deletions(-) diff --git a/app/views/projects/settings/_new_repositories.html.erb b/app/views/projects/settings/_new_repositories.html.erb index 5c5c9fbb2..56ff7457e 100644 --- a/app/views/projects/settings/_new_repositories.html.erb +++ b/app/views/projects/settings/_new_repositories.html.erb @@ -41,14 +41,6 @@ <% else %>

    <%= l(:label_no_data) %>

    <% end %> - - socialforge - - Git - http://xianbo_trustie2 - 用户列表 - 删除 - @@ -60,95 +52,3 @@ <% end %>
    -
    -
      -
    • - - -
    • -
    • - - -
    • -
    • - - - 长度必须在 1 到 254 个字符之间。 仅小写字母(a-z)、数字、破折号(-)和下划线(_)可以使用。 -一旦保存,标识无法修改。 -
    • -
    • - - - 该密码在项目组内可共享 -
    • -
      -
    - 保存 - 取消 -
    - - -<% project_path_cut = RepositoriesHelper::PROJECT_PATH_CUT %> -<% ip = RepositoriesHelper::REPO_IP_ADDRESS %> -<% if @project.repositories.any? %> - - - - - - - - - - - - <% @project.repositories.sort.each do |repository| %> - - - - - <%if repository.scm_name=="Git"%> - - <%else %> - - <% end %> - - - - <% end %> - -
    <%= l(:field_identifier) %><%= l(:field_repository_is_default) %><%= l(:label_scm) %><%= l(:label_repository_path) %>
    - <%= link_to repository.identifier, - {:controller => 'repositories', :action => 'show',:id => @project, :repository_id => repository.identifier_param} if repository.identifier.present? %> - <%= checked_image repository.is_default? %><%=h repository.scm_name %>http://<%= repository.login.to_s %>_<%= repository.identifier.to_s%>@<%= ip %><%=h repository.url.slice(project_path_cut, repository.url.length) %><%=h repository.url %> - <% if repository.scm_name=="Subversion"%> - <%if User.current.allowed_to?(:manage_repository, @project) %> - <%= link_to(l(:label_user_plural), committers_repository_path(repository), - :class => 'icon icon-user') %> - <%= link_to(l(:button_edit), edit_repository_path(repository), - :class => 'icon icon-edit') %> - <%= delete_link repository_path(repository) %> - <% end %> - <% elsif repository.scm_name=="Git"%> - <%if User.current.allowed_to?(:manage_repository, @project) %> - - <%= link_to(l(:label_user_plural), committers_repository_path(repository), - :class => 'icon icon-user') %> - <% if repository.login.to_s==User.current.login.to_s %> - <%= delete_link repository_path(repository) %> - <% end %> - <% end %> - <% end %> -
    -<% else %> -

    <%= l(:label_no_data) %>

    -<% end %> - -<% course_tag = @project.project_type %> -<% if User.current.allowed_to?(:manage_repository, @project) %> - <%= link_to l(:label_repository_new_repos), newrepo_project_repository_path(@project, :course => course_tag), :class => 'icon icon-add' %>

    -<% end %> \ No newline at end of file From 2b063db0cc3b809ae8daf54c5df885d4e3f9c216 Mon Sep 17 00:00:00 2001 From: huang Date: Mon, 13 Apr 2015 21:08:26 +0800 Subject: [PATCH 038/285] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E7=95=8C=E9=9D=A2=20=E6=9C=AA=E5=AE=8C=E6=88=90=E9=83=A8?= =?UTF-8?q?=E5=88=86=EF=BC=8C=E9=9A=94=E8=A1=8C=E6=8D=A2=E8=89=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/projects_helper.rb | 2 +- .../projects/settings/_new_versions.html.erb | 167 +++++------------- public/javascripts/project.js | 4 +- 3 files changed, 47 insertions(+), 126 deletions(-) diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb index fc2afe0f7..1d47e8bcc 100644 --- a/app/helpers/projects_helper.rb +++ b/app/helpers/projects_helper.rb @@ -21,7 +21,7 @@ include AvatarHelper module ProjectsHelper def link_to_version(version, options = {}) return '' unless version && version.is_a?(Version) - link_to_if version.visible?, format_version_name(version), { :controller => 'versions', :action => 'show', :id => version }, options + link_to_if version.visible?, format_version_name(version), { :controller => 'versions', :action => 'show', :id => version }, :class => "c_blue02" end def project_settings_tabs diff --git a/app/views/projects/settings/_new_versions.html.erb b/app/views/projects/settings/_new_versions.html.erb index 28c3c42ef..06e704495 100644 --- a/app/views/projects/settings/_new_versions.html.erb +++ b/app/views/projects/settings/_new_versions.html.erb @@ -1,140 +1,59 @@ +<% if @project.shared_versions.any? %> - - - - - - + + + + + + - + <% for version in @project.shared_versions.sort %> + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + <% end; reset_cycle %> + <% else %> +

    + <%= l(:label_no_data) %> +

    + <% end %>
    版本 日期描述 状态共享Wiki 页面<%= l(:label_version) %> <%= l(:field_effective_date) %><%= l(:field_description) %> <%= l(:field_status) %><%= l(:field_sharing) %><%= l(:label_wiki_page) %>
    - 暑期版(Summer Beta) V0.8 + <%= 'shared' if version.project != @project %> <%= link_to_version version %> + <%= format_date(version.effective_date) %><%=h version.description %><%= l("version_status_#{version.status}") %> + <%= link_to_if_authorized(h(version.wiki_page_title), {:controller => 'wiki', + :action => 'show', + :project_id => version.project, + :id => Wiki.titleize(version.wiki_page_title)}) || h(version.wiki_page_title) unless version.wiki_page_title.blank? || version.project.wiki.nil? %> 2013-08-30打开 - 编辑 - 删除 -
    - 正式版(First Release) V1.0 - 2013-11-01正式对外提供服务的版本打开 - 编辑 - 删除 -
    - 商业版(Second Release) V2.0 - 2013-08-30增加在线支付、实名认证等功能,界面更加美化,用户交互更加友好!打开 - 编辑 - 删除 -
    - JACK SUMMER V0.8 - 2014-08-25试用人员的开发版本打开 - 编辑 - 删除 -
    - LongJun Contest - V1.0 - contest网站的开发分支打开 - 编辑 - 删除 -
    - SZZH V1.1 (Supported by BJSZZH) - 神舟公司外包开发版本打开 - 编辑 - 删除 + <% if version.project == @project && User.current.allowed_to?(:manage_versions, @project) %> + <%= link_to l(:button_edit), edit_version_path(version), :class => 'c_purple' %> + <%= delete_link version_path(version) %> + <% end %>
    -关闭已完成的版本 + <% if @project.versions.any? %> + <%= link_to l(:label_close_versions), close_completed_project_versions_path(@project), :method => :put, :class =>"c_orange fr" %> + <% end %> -新建版本 + <%= link_to l(:label_version_new), new_project_version_path(@project, :back_url => ''), :class => 'c_blue fl' if User.current.allowed_to?(:manage_versions, @project) %>
    -
      -
    • - - -
    • -
    • - - -
    • -
    • - - -
    • -
    • - - -
    • -
    • - - - -
    • -
      -
    • - - -
    • - 保存 -
    -
    \ No newline at end of file + +
    + + + + + + + diff --git a/public/javascripts/project.js b/public/javascripts/project.js index 618268f41..98e808622 100644 --- a/public/javascripts/project.js +++ b/public/javascripts/project.js @@ -178,4 +178,6 @@ function project_setting(n) $("#pro_st_tbc_0"+i).removeClass().addClass("pro_st_undis"); } } -} \ No newline at end of file +} + +// 背景换色 \ No newline at end of file From 48f096178ca4a0a443dbc30eadedc3650ef0785f Mon Sep 17 00:00:00 2001 From: huang Date: Mon, 13 Apr 2015 21:53:52 +0800 Subject: [PATCH 039/285] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=85=8D=E7=BD=AEmod?= =?UTF-8?q?oule=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/application_helper.rb | 5 ++--- app/views/projects/settings/_new_modules.html.erb | 7 ++----- public/javascripts/project.js | 6 +++++- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 24d34991a..5207be823 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -1368,7 +1368,7 @@ module ApplicationHelper end def link_to_function(name, function, html_options={}) - content_tag(:a, name, {:href => '#', :onclick => "#{function}; return false;"}.merge(html_options)) + content_tag(:a, name, {:href => '#', :onclick => "#{function}; return false;"}.merge(:class => " c_purple")) end # Helper to render JSON in views @@ -1390,8 +1390,7 @@ module ApplicationHelper end def check_all_links(form_name) - link_to_function(l(:button_check_all), "checkAll('#{form_name}', true)") + - " | ".html_safe + + link_to_function(l(:button_check_all), "checkAll('#{form_name}', true)") + "  ".html_safe + " | "+ "  ".html_safe + link_to_function(l(:button_uncheck_all), "checkAll('#{form_name}', false)") end diff --git a/app/views/projects/settings/_new_modules.html.erb b/app/views/projects/settings/_new_modules.html.erb index c14656b94..281d07fef 100644 --- a/app/views/projects/settings/_new_modules.html.erb +++ b/app/views/projects/settings/_new_modules.html.erb @@ -13,12 +13,9 @@
  • - 全选 -   |   - 清除 + <%= check_all_links 'modules-form' %>

    - 保存 + <%= l(:button_save) %>

    <% end %> - diff --git a/public/javascripts/project.js b/public/javascripts/project.js index 98e808622..fe850728c 100644 --- a/public/javascripts/project.js +++ b/public/javascripts/project.js @@ -180,4 +180,8 @@ function project_setting(n) } } -// 背景换色 \ No newline at end of file +// 配置模块提交 +function submitModules() +{ + $("#modules-form").submit(); +} \ No newline at end of file From f3ba393bd4c01e632cc8d713c5a3fa6d7323f36b Mon Sep 17 00:00:00 2001 From: huang Date: Mon, 13 Apr 2015 23:39:56 +0800 Subject: [PATCH 040/285] =?UTF-8?q?=E5=8E=BB=E6=8E=89=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E5=AE=A1=E6=9F=A5=20=E4=BF=AE=E6=94=B9=E9=85=8D=E7=BD=AE-?= =?UTF-8?q?=E2=80=9C=E7=89=88=E6=9C=AC=E5=BA=93=E2=80=9D=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/news/new.html.erb | 5 ++--- app/views/projects/settings.html.erb | 16 ++++++++-------- .../projects/settings/_new_repositories.html.erb | 2 +- 3 files changed, 11 insertions(+), 12 deletions(-) diff --git a/app/views/news/new.html.erb b/app/views/news/new.html.erb index e973a3916..fcac2d357 100644 --- a/app/views/news/new.html.erb +++ b/app/views/news/new.html.erb @@ -14,9 +14,8 @@

      <%= labelled_form_for @news, :url => project_news_index_path(@project), - :html => {:id => 'news-form', :multipart => true} do |f| %> - <%= render :partial => 'news/project_form', :locals => {:f => f, :is_new => true} %> - + :html => {:id => 'news-form', :multipart => true} do |f| %> + <%= render :partial => 'news/project_form', :locals => {:f => f, :is_new => true} %> <% end if @project %>
    diff --git a/app/views/projects/settings.html.erb b/app/views/projects/settings.html.erb index 1ff0f8a79..3e66fec5e 100644 --- a/app/views/projects/settings.html.erb +++ b/app/views/projects/settings.html.erb @@ -9,10 +9,10 @@
  • 模块
  • 成员
  • 版本
  • -
  • 问题类别
  • +
  • 版本库
  • -
  • 代码评审
  • +
    @@ -35,17 +35,17 @@ <%= render :partial=>"projects/settings/new_versions" %>
    -
    - <%= render :partial=>"projects/settings/new_issue_categories" %> -
    + + +
    <%= render :partial=>"projects/settings/new_repositories" %>
    -
    - <%= render :partial=>"projects/settings/new_activities" %> -
    + + + diff --git a/app/views/projects/settings/_new_repositories.html.erb b/app/views/projects/settings/_new_repositories.html.erb index 56ff7457e..418b409ee 100644 --- a/app/views/projects/settings/_new_repositories.html.erb +++ b/app/views/projects/settings/_new_repositories.html.erb @@ -14,7 +14,7 @@ <% @project.repositories.sort.each do |repository| %> - <%= link_to repository.identifier, {:controller => 'repositories', :action => 'show', :id => @project, :repository_id => repository.identifier_param} if repository.identifier.present? %> + <%= link_to repository.identifier, ({:controller => 'repositories', :action => 'show', :id => @project, :repository_id => repository.identifier_param} if repository.identifier.present?), :class =>"c_blue" %> <%= checked_image repository.is_default? %> <%=h repository.scm_name %> <%if repository.scm_name=="Git"%> From 6b8022cb2385f60633ddae73f3ea6ff0930e2e41 Mon Sep 17 00:00:00 2001 From: huang Date: Tue, 14 Apr 2015 09:10:14 +0800 Subject: [PATCH 041/285] =?UTF-8?q?=E6=B8=85=E9=99=A4=E4=B8=8D=E9=9C=80?= =?UTF-8?q?=E8=A6=81=E7=9A=84=E5=AD=90=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/layouts/base_projects.html.erb | 5 ++-- app/views/projects/_tools_expand.html.erb | 32 +++++++++++------------ 2 files changed, 19 insertions(+), 18 deletions(-) diff --git a/app/views/layouts/base_projects.html.erb b/app/views/layouts/base_projects.html.erb index b979e2b41..369fe12e2 100644 --- a/app/views/layouts/base_projects.html.erb +++ b/app/views/layouts/base_projects.html.erb @@ -178,9 +178,10 @@ <%= render :partial => 'layouts/new_footer'%>
    + +
    -

    请选择项目类型:

    @@ -198,7 +199,7 @@ <%= l(:label_loading) %>
    - <%= call_hook :view_layouts_base_body_bottom %> + <%= call_hook :view_layouts_base_body_bottom %> diff --git a/app/views/projects/_tools_expand.html.erb b/app/views/projects/_tools_expand.html.erb index 570ba3426..e9e7492cc 100644 --- a/app/views/projects/_tools_expand.html.erb +++ b/app/views/projects/_tools_expand.html.erb @@ -8,11 +8,11 @@ <%= link_to l(:project_module_wiki), project_wiki_path(@project) %> <% end %> -
  • - <% unless @project.enabled_modules.where("name = 'code_review'").empty? %> - <%= link_to l(:project_module_code_review), {controller: 'code_review', action: 'index', id: @project.id} %> - <% end %> -
  • + + + + + @@ -23,21 +23,21 @@ -
  • - <% unless @project.enabled_modules.where("name = 'documents'").empty? %> - <%= link_to l(:project_module_documents), project_documents_path(@project) %> - <% end %> -
  • - + + + + + +
  • <%= link_to l(:label_roadmap) ,project_roadmap_path(@project) %>
  • <%= link_to l(:label_project_tool_response) ,project_feedback_path(@project)%>
  • -
  • - <% unless @project.enabled_modules.where("name = 'dts'").empty? %> - <%= link_to l(:project_module_dts) ,share_show_path(@project) %> - <% end %> -
  • + + + + + From fadca9128fadf1931b165fcd219945ce4cfeebea Mon Sep 17 00:00:00 2001 From: sw <939547590@qq.com> Date: Tue, 14 Apr 2015 10:17:42 +0800 Subject: [PATCH 042/285] =?UTF-8?q?=E5=AE=8C=E6=88=90=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E6=9C=8B=E5=8F=8B=E5=9C=88=E3=80=81=E5=BC=80=E5=8F=91=E7=BB=84?= =?UTF-8?q?=E3=80=81=E7=A7=91=E7=A0=94=E7=BB=84=E7=9B=B4=E6=8E=A5=E7=9A=84?= =?UTF-8?q?=E5=88=87=E6=8D=A2=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/projects_controller.rb | 19 ++++--- app/views/layouts/_join_exit_project.html.erb | 2 +- app/views/layouts/base_projects.html.erb | 54 ++++++++++++++----- .../projects/change_project_type.html.erb | 0 config/routes.rb | 1 + 5 files changed, 55 insertions(+), 21 deletions(-) create mode 100644 app/views/projects/change_project_type.html.erb diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 406b921ac..8e9802280 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -27,15 +27,7 @@ class ProjectsController < ApplicationController menu_item :feedback, :only => :feedback menu_item :share, :only => :share - before_filter :find_project, :except => [ :index, :search,:list, :new, :create, :copy, :statistics, :new_join, - :course, :enterprise_course, :course_enterprise,:view_homework_attaches] - before_filter :authorize, :only => [:show, :settings, :edit, :sort_project_members, :update, :modules, :close, - :reopen,:view_homework_attaches,:course] before_filter :find_project, :except => [ :index, :search,:list, :new, :create, :copy, :statistics, :new_join, :course, :enterprise_course, :course_enterprise,:view_homework_attaches,:join_project] - # before_filter :authorize, :except => [:new_join, :new_homework, :homework, :statistics, :search, :watcherlist, :index, :list, :new, :create, :copy, :archive, :unarchive, :destroy, :member, :focus, :file, - # :statistics, :feedback, :course, :enterprise_course, :course_enterprise, :project_respond, :share, - # :show_projects_score, :issue_score_index, :news_score_index, :file_score_index, :code_submit_score_index, :projects_topic_score_index] - #此条勿删 课程相关权限 ,:new_homework,:homework,:feedback,,:member before_filter :authorize, :only => [:show, :settings, :edit, :sort_project_members, :update, :modules, :close, :reopen,:view_homework_attaches,:course] before_filter :authorize_global, :only => [:new, :create,:view_homework_attaches] before_filter :require_admin, :only => [ :copy, :archive, :unarchive, :destroy, :calendar] @@ -606,6 +598,17 @@ class ProjectsController < ApplicationController end end + #朋友圈、科研组、开发组之间的切换 + def change_project_type + @project.project_new_type = params[:project_type] + if @project.save + message = @project.project_new_type + else + message = "0" + end + render :json => message + end + private def memberAccess diff --git a/app/views/layouts/_join_exit_project.html.erb b/app/views/layouts/_join_exit_project.html.erb index 5d7c9210e..64e9f64d2 100644 --- a/app/views/layouts/_join_exit_project.html.erb +++ b/app/views/layouts/_join_exit_project.html.erb @@ -10,6 +10,6 @@ <% if ((User.current.member_of? @project) && User.current.login? && User.current.allowed_to?({:controller => 'projects', :action => 'settings'}, @project)) %> <%= link_to "#{l(:button_configure)}".html_safe, settings_project_path(@project), :class => "pr_join_a" %> - <%= link_to "#{l(:label_friend_organization)}".html_safe,"javascript:void(0)" ,:onClick => "show_window();", :class => "pr_join_a",:id => "setting_project_type"%> + <%= link_to "#{text}".html_safe,"javascript:void(0)" ,:onClick => "show_window();", :class => "pr_join_a",:id => "setting_project_type"%> <% end %>
    diff --git a/app/views/layouts/base_projects.html.erb b/app/views/layouts/base_projects.html.erb index b979e2b41..470d03f87 100644 --- a/app/views/layouts/base_projects.html.erb +++ b/app/views/layouts/base_projects.html.erb @@ -20,21 +20,50 @@ @@ -86,7 +115,8 @@
    - <%= render 'layouts/join_exit_project' %> + <% text = @project.project_new_type == 1 ? l(:label_development_team) : (@project.project_new_type == 2 ? l(:label_research_group) : l(:label_friend_organization))%> + <%= render 'layouts/join_exit_project',{:text => text} %>
    @@ -180,8 +210,8 @@
    - -
    + <% text = @project.project_new_type == 1 ? "development_group" : (@project.project_new_type == 2 ? "research_group" : "friend_organization")%> +

    请选择项目类型:

      @@ -189,7 +219,7 @@
    - 确定 + 确定
    diff --git a/app/views/projects/change_project_type.html.erb b/app/views/projects/change_project_type.html.erb new file mode 100644 index 000000000..e69de29bb diff --git a/config/routes.rb b/config/routes.rb index c9220769c..7dc50741d 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -363,6 +363,7 @@ RedmineApp::Application.routes.draw do end resources :projects do member do + match 'change_project_type', :via => [:get, :post] get 'settings(/:tab)', :action => 'settings', :as => 'settings' #by young get 'member', :to => 'projects#member', :as => 'member' From 845794675aba440ec6b49f58ec53350133acc66e Mon Sep 17 00:00:00 2001 From: huang Date: Tue, 14 Apr 2015 10:23:49 +0800 Subject: [PATCH 043/285] =?UTF-8?q?=E9=85=8D=E7=BD=AE-=E6=88=90=E5=91=98?= =?UTF-8?q?=E7=95=8C=E9=9D=A2=E4=BC=91=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/application_helper.rb | 15 ++++- .../projects/settings/_new_members.html.erb | 60 +++++++++++++++++-- 2 files changed, 67 insertions(+), 8 deletions(-) diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 5207be823..bc222a302 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -128,6 +128,15 @@ module ApplicationHelper end end + def link_to_settings_user(user, options={}) + if user.is_a?(User) + name = h(user.name(options[:format])) + link_to name, {:controller=> 'users', :action => 'show', id: user.id, host: Setting.user_domain}, :class => "w90 c_orange fl" + else + h(user.to_s) + end + end + #重载上面方法,增加样式显示 def link_to_user_header user,canShowRealName=false,options={} if user.is_a?(User) @@ -1341,9 +1350,9 @@ module ApplicationHelper def delete_link(url, options={}) options = { - :method => :delete, - :data => {:confirm => l(:text_are_you_sure)}, - :class => 'icon icon-del' + :method => :delete, + :data => {:confirm => l(:text_are_you_sure)}, + :class => 'icon icon-del' }.merge(options) link_to l(:button_delete), url, options diff --git a/app/views/projects/settings/_new_members.html.erb b/app/views/projects/settings/_new_members.html.erb index a38b462e2..ac3d757fc 100644 --- a/app/views/projects/settings/_new_members.html.erb +++ b/app/views/projects/settings/_new_members.html.erb @@ -1,12 +1,62 @@ +<%= error_messages_for 'member' %> +<% + roles = Role.givable.all + if @project.project_type == Project::ProjectType_course + roles = roles[3..5] + else + roles = roles[0..2] + end + members = @project.member_principals.includes(:roles, :principal).all.sort +%> +
    + <% if members.any? %>
      -
    • 用户角色
    • -
    • gugu01Manager, Developer编辑删除
    • -
    • gugu01Manager, Developer, Reporter编辑删除
    • -
    • gugu01Manager编辑删除
    • +
    • <%= l(:label_user) %><%= l(:label_role_plural) %>
    • + <%= call_hook(:view_projects_settings_members_table_header, :project => @project) %> + <% members.each do |member| %> +
    • + <%= link_to_user_header member.principal,false,:class => "w150 c_orange fl" %> + + <%= h member.roles.sort.collect(&:to_s).join(', ') %> + <%= form_for(member, {:as => :membership, :remote => true, :url => membership_path(member), + :method => :put, + :html => {:id => "member-#{member.id}-roles-form", :class => 'hol'}} + ) do |f| %> + <% roles.each do |role| %> +
        + <%= radio_button_tag 'membership[role_ids][]', role.id, member.roles.include?(role), + :disabled => member.member_roles.detect { |mr| mr.role_id == role.id && !mr.inherited_from.nil? } %> + +
      + + <% end %> + <%= hidden_field_tag 'membership[role_ids][]', '' %> + + <% end %> +
      + <%# unless member.roles.first.to_s == "Manager"%> + 编辑 + <%= delete_link membership_path(member), + :remote => true, + :class => "c_dblue ml30 fl", + :data => (!User.current.admin? && member.include?(User.current) ? {:confirm => l(:text_own_membership_delete_confirmation)} : {confirm: l(:label_delete_confirm)}) if member.deletable? %> + <%# end%> +
    • + <% end%> +
    - + <% else %> +

    <%= l(:label_no_data) %>

    + <% end %>
    From 8c122a35f7b2470ca22f9213ddcc1b5a52bd1ca9 Mon Sep 17 00:00:00 2001 From: sw <939547590@qq.com> Date: Tue, 14 Apr 2015 10:46:31 +0800 Subject: [PATCH 044/285] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E5=88=87=E6=8D=A2=E5=88=B0=E5=85=B6=E4=BB=96=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E5=90=8E=EF=BC=8C=E5=86=8D=E5=88=87=E5=9B=9E=E5=BC=80=E5=8F=91?= =?UTF-8?q?=E7=BB=84=EF=BC=8C=E6=9B=B4=E5=A4=9A=E6=8C=89=E9=92=AE=E4=B8=8D?= =?UTF-8?q?=E5=8F=AF=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../layouts/_base_development_group.html.erb | 2 +- public/javascripts/project.js | 20 +++++++++++-------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/app/views/layouts/_base_development_group.html.erb b/app/views/layouts/_base_development_group.html.erb index f8e27a570..87ee4e8d8 100644 --- a/app/views/layouts/_base_development_group.html.erb +++ b/app/views/layouts/_base_development_group.html.erb @@ -47,7 +47,7 @@ <% end %> - + diff --git a/public/javascripts/project.js b/public/javascripts/project.js index fe850728c..01cdae5d7 100644 --- a/public/javascripts/project.js +++ b/public/javascripts/project.js @@ -14,15 +14,19 @@ function regexName() { } // 项目描述超过展开 -$(function(){ - $(".subNav").click(function(){ - $(this).toggleClass("currentDd").siblings(".subNav").removeClass("currentDd") - $(this).toggleClass("currentDt").siblings(".subNav").removeClass("currentDt") +//$(function(){ +// $(".subNav").click(function(){ +// +// }) +//}) +function expand_tools_expand() +{ + $("#expand_tools_expand").toggleClass("currentDd").siblings(".subNav").removeClass("currentDd"); + $("#expand_tools_expand").toggleClass("currentDt").siblings(".subNav").removeClass("currentDt"); - // 修改数字控制速度, slideUp(500)控制卷起速度 - $(this).next(".navContent").slideToggle(500).siblings(".navContent").slideUp(500); - }) -}) + // 修改数字控制速度, slideUp(500)控制卷起速度 + $("#expand_tools_expand").next(".navContent").slideToggle(500).siblings(".navContent").slideUp(500); +} // 描述显示更多信息 function show_more_msg() From b98a67f50dd0a5e9a50860f7391410f80a31e5ef Mon Sep 17 00:00:00 2001 From: huang Date: Tue, 14 Apr 2015 11:47:47 +0800 Subject: [PATCH 045/285] =?UTF-8?q?=E5=AE=8C=E6=88=90=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E9=85=8D=E7=BD=AE-=E6=88=90=E5=91=98=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/members_helper.rb | 15 ++- app/views/layouts/base_projects.html.erb | 20 +++- app/views/members/autocomplete.js.erb | 2 +- .../projects/settings/_new_members.html.erb | 103 +++++++----------- 4 files changed, 69 insertions(+), 71 deletions(-) diff --git a/app/helpers/members_helper.rb b/app/helpers/members_helper.rb index 5dc5d9542..6162c5b52 100644 --- a/app/helpers/members_helper.rb +++ b/app/helpers/members_helper.rb @@ -38,7 +38,7 @@ module MembersHelper 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', :style =>"float:left;margin-top:0px;") + s + content_tag('ul', links,:class => 'wlist', :id => "course_member_pagination_links" ) end # add by nwb @@ -55,6 +55,19 @@ module MembersHelper s + content_tag('ul', links,:class => 'wlist',:id => "course_member_pagination_links") end + # 项目配置中添加成员列表 + def render_principals_for_new_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', :id => 'principals') + + links = pagination_links_full(@obj_pages, @obj_count, :per_page_links => false, :remote => false, :flag => true) {|text, parameters, options| + link_to text, appliedproject_project_memberships_path(project, parameters.merge(:q => params[:q], :format => 'js')), :remote => true + } + + s + content_tag('ul', links,:class => 'wlist',:id => "course_member_pagination_links") + end + # 当前申请加入的成员名单 def render_principals_for_applied_members(project) diff --git a/app/views/layouts/base_projects.html.erb b/app/views/layouts/base_projects.html.erb index 470d03f87..30dad5ff7 100644 --- a/app/views/layouts/base_projects.html.erb +++ b/app/views/layouts/base_projects.html.erb @@ -163,8 +163,16 @@
  • <%= link_to l(:label_invite_trustie_user), :controller=>"projects", :action=>"invite_members", :id => @project %>
  • <% end %> - - <%= render :partial => 'layouts/base_development_group', :locals => {:project => @project}%> + + + <% if @project.project_new_type == 1 || @project.project_new_type.nil? %> + <%= render :partial => 'layouts/base_development_group', :locals => {:project => @project}%> + <% elsif @project.project_new_type == 2 %> + <%= render :partial => 'layouts/base_research_team', :locals => {:project => @project}%> + <% else %> + <%= render :partial => 'layouts/base_friend_group', :locals => {:project => @project}%> + <% end %> +
    @@ -211,13 +219,13 @@
    <% text = @project.project_new_type == 1 ? "development_group" : (@project.project_new_type == 2 ? "research_group" : "friend_organization")%> -
    +

    请选择项目类型:

      -
    • -
    • -
    • +
    • id="development_group"/>
    • +
    • id="research_group"/>
    • +
    • id="friend_organization"/>
    确定 diff --git a/app/views/members/autocomplete.js.erb b/app/views/members/autocomplete.js.erb index f7f9de151..01faf7da9 100644 --- a/app/views/members/autocomplete.js.erb +++ b/app/views/members/autocomplete.js.erb @@ -2,7 +2,7 @@ <% 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)) %>'); + $('#principals_for_new_member').html('<%= escape_javascript(render_project_members(@project)) %>'); <% end%> <% elsif @course%> var checked = $("#principals input:checked").size(); diff --git a/app/views/projects/settings/_new_members.html.erb b/app/views/projects/settings/_new_members.html.erb index ac3d757fc..c59f24ad2 100644 --- a/app/views/projects/settings/_new_members.html.erb +++ b/app/views/projects/settings/_new_members.html.erb @@ -11,11 +11,11 @@
    <% if members.any? %> -
      -
    • <%= l(:label_user) %><%= l(:label_role_plural) %>
    • +
        +
      • <%= l(:label_user) %><%= l(:label_role_plural) %>
      • <%= call_hook(:view_projects_settings_members_table_header, :project => @project) %> <% members.each do |member| %> -
      • +
      • <%= link_to_user_header member.principal,false,:class => "w150 c_orange fl" %> <%= h member.roles.sort.collect(&:to_s).join(', ') %> @@ -25,8 +25,8 @@ ) do |f| %> <% roles.each do |role| %>
          - <%= radio_button_tag 'membership[role_ids][]', role.id, member.roles.include?(role), - :disabled => member.member_roles.detect { |mr| mr.role_id == role.id && !mr.inherited_from.nil? } %> + <%= check_box_tag 'membership[role_ids][]', role.id, member.roles.include?(role), + :disabled => member.member_roles.detect { |mr| mr.role_id == role.id && !mr.inherited_from.nil? } %>
        @@ -50,68 +50,45 @@ :data => (!User.current.admin? && member.include?(User.current) ? {:confirm => l(:text_own_membership_delete_confirmation)} : {confirm: l(:label_delete_confirm)}) if member.deletable? %> <%# end%>
      • - <% end%> - - -
      + <% end%> +
    <% else %>

    <%= l(:label_no_data) %>

    <% end %>
    -
    -

    +申请加入

    - -
      -
    • 角色:
    • -
    • -
    • -
    • -
    -
    - 批准拒绝 +

    <%= l(:label_member_new) %>

    + <%= form_for(@member, {:as => :membership, :url => project_memberships_path(@project), :remote => true, :method => :post}) do |f| %> + + <% end%> +
    + + -
    -
    -
    -

    添加成员

    - -
    -
    \ No newline at end of file From 5ae5cfda03df1c38147821ea9c7e7b3211dddebb Mon Sep 17 00:00:00 2001 From: huang Date: Tue, 14 Apr 2015 15:34:04 +0800 Subject: [PATCH 046/285] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=94=B3=E8=AF=B7=E5=8A=A0=E5=85=A5=20?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=88=90=E5=91=98=E5=B1=80=E9=83=A8=E5=88=B7?= =?UTF-8?q?=E6=96=B0=20=E7=BC=96=E8=BE=91=E6=88=90=E5=91=98=E5=B1=80?= =?UTF-8?q?=E9=83=A8=E5=88=B7=E6=96=B0=20=E9=A1=B9=E7=9B=AE=E5=8A=A8?= =?UTF-8?q?=E6=80=81=E5=9B=BD=E9=99=85=E5=8C=96=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/members_helper.rb | 10 ++++ app/views/members/create.js.erb | 54 +++++++++---------- app/views/members/destroy.js.erb | 13 ++--- app/views/members/update.js.erb | 17 +++--- .../projects/settings/_new_members.html.erb | 34 ++++++++++-- app/views/projects/show.html.erb | 2 +- config/locales/projects/zh.yml | 3 +- 7 files changed, 86 insertions(+), 47 deletions(-) diff --git a/app/helpers/members_helper.rb b/app/helpers/members_helper.rb index 6162c5b52..149acb5dd 100644 --- a/app/helpers/members_helper.rb +++ b/app/helpers/members_helper.rb @@ -68,6 +68,16 @@ module MembersHelper s + content_tag('ul', links,:class => 'wlist',:id => "course_member_pagination_links") end + # 新申请加入项目成员列表 + def render_principals_for_applied_members_new project + scope = project.applied_projects.map(&:user) + principals = paginateHelper scope,10 + s = content_tag('ul', principals_check_box_tags_ex('membership[user_ids][]', principals), :class => 'mb5') + links = pagination_links_full(@obj_pages, @obj_count, :per_page_links => false, :remote => false, :flag => true){|text, parameters, options| + link_to text, appliedproject_project_memberships_path(project, parameters.merge(:q => params[:q],:flag => true, :format => 'js')), :remote => true + } + s + content_tag('ul', links,:class => 'wlist', :id => "course_member_pagination_links" ) + end # 当前申请加入的成员名单 def render_principals_for_applied_members(project) diff --git a/app/views/members/create.js.erb b/app/views/members/create.js.erb index 93aad5b5e..941582c04 100644 --- a/app/views/members/create.js.erb +++ b/app/views/members/create.js.erb @@ -1,27 +1,27 @@ -<%if @project%> -$('#tab-content-members').html('<%= escape_javascript(render :partial => 'projects/settings/members') %>'); - -<%if !@applied_members%> -<% if @members.present? && @members.all? {|m| m.valid? } %> -<% @members.each do |member| %> -$("#member-<%= member.id %>").effect("highlight"); -<% end %> -<% else %> -<% if @members %> -<% errors = @members.collect {|m| m.errors.full_messages}.flatten.uniq.join(', ')%> -alert('<%= raw(escape_javascript(l(:notice_failed_to_save_members, :errors => errors || ''))) %>'); -<% else%> -// alert(''); -<% end%> -<% end %> -<% end %> -<%elsif @course%> - <% if @create_member_error_messages%> - alert("<%= @create_member_error_messages%>"); - <% else%> - $('#tbc_02').html('<%= escape_javascript(render :partial => 'courses/course_members') %>'); - alert("添加成功"); - <% end%> -<%end%> - -hideOnLoad(); +<%if @project%> +$('#tab-content-members').html('<%= escape_javascript(render :partial => 'projects/settings/members') %>'); + + <%if !@applied_members%> + <% if @members.present? && @members.all? {|m| m.valid? } %> + <% @members.each do |member| %> + $("#member-<%= member.id %>").effect("highlight"); + <% end %> + <% else %> + <% if @members %> + <% errors = @members.collect {|m| m.errors.full_messages}.flatten.uniq.join(', ')%> + alert('<%= raw(escape_javascript(l(:notice_failed_to_save_members, :errors => errors || ''))) %>'); + <% end%> + <% end %> + <% end %> + + +<%elsif @course%> + <% if @create_member_error_messages%> + alert("<%= @create_member_error_messages%>"); + <% else%> + $('#tbc_02').html('<%= escape_javascript(render :partial => 'courses/course_members') %>'); + alert("添加成功"); + <% end%> +<%end%> + +hideOnLoad(); diff --git a/app/views/members/destroy.js.erb b/app/views/members/destroy.js.erb index 912cfde58..fcef883ff 100644 --- a/app/views/members/destroy.js.erb +++ b/app/views/members/destroy.js.erb @@ -1,6 +1,7 @@ - <%if @project%> - $('#tab-content-members').html('<%= escape_javascript(render :partial => 'projects/settings/members') %>'); - <%elsif @course%> - $('#tbc_02').html('<%= escape_javascript(render :partial => 'courses/course_members') %>'); - <%end%> -hideOnLoad(); + <%if @project%> + $('#pro_st_tbc_03').html('<%= escape_javascript(render :partial => 'projects/settings/new_members') %>'); +// $('#tab-content-members').html('<%#= escape_javascript(render :partial => 'projects/settings/members') %>'); + <%elsif @course%> + $('#tbc_02').html('<%= escape_javascript(render :partial => 'courses/course_members') %>'); + <%end%> +hideOnLoad(); diff --git a/app/views/members/update.js.erb b/app/views/members/update.js.erb index a166e76ab..2dd2ea9dd 100644 --- a/app/views/members/update.js.erb +++ b/app/views/members/update.js.erb @@ -1,9 +1,8 @@ -<%if @project%> -$('#tab-content-members').html('<%= escape_javascript(render :partial => 'projects/settings/members') %>'); -$("#member-<%= @member.id %>").effect("highlight"); -<%elsif @course%> -$('#tbc_02').html('<%= escape_javascript(render :partial => 'courses/course_members') %>'); -<%end%> -hideOnLoad(); - - +<%if @project%> +$('#pro_st_tbc_03').html('<%= escape_javascript(render :partial => 'projects/settings/new_members') %>'); +<%elsif @course%> +$('#tbc_02').html('<%= escape_javascript(render :partial => 'courses/course_members') %>'); +<%end%> +hideOnLoad(); + + diff --git a/app/views/projects/settings/_new_members.html.erb b/app/views/projects/settings/_new_members.html.erb index c59f24ad2..81aaa4186 100644 --- a/app/views/projects/settings/_new_members.html.erb +++ b/app/views/projects/settings/_new_members.html.erb @@ -56,8 +56,37 @@

    <%= l(:label_no_data) %>

    <% end %>
    - + +<% if roles.any? %>
    + + <% if @project.applied_projects.any? %> +
    +

    <%= l(:label_apply_project) %>

    + <%= form_for(@applied_members, {:as => :membership, :url => project_memberships_path(@project), :remote => true, :method => :post}) do |f| %> +
    + <%= render_principals_for_applied_members_new(@project) %> +
    +
      +
    • <%= l(:label_role_plural) %>:
    • + <% roles.each do |role| %> +
    • + <%= check_box_tag 'membership[role_ids][]', role.id %> + +
    • + <% end %> +
    + <% end %> +
    + + <%= submit_tag l(:label_approve), :id => 'member-add-submit' %> + + <%= submit_tag l(:label_refusal), :name => "refusal_button", :id => 'member-refusal-submit' %> + +
    + <% end %> +
    +

    <%= l(:label_member_new) %>

    <%= form_for(@member, {:as => :membership, :url => project_memberships_path(@project), :remote => true, :method => :post}) do |f| %> <% end%>
    - - +<% end %> diff --git a/app/views/projects/show.html.erb b/app/views/projects/show.html.erb index d0c4bd54f..956a725be 100644 --- a/app/views/projects/show.html.erb +++ b/app/views/projects/show.html.erb @@ -10,7 +10,7 @@
    <%= image_tag(url_to_avatar(e.user), :width => "42", :height => "42") %>
    - <%= link_to e.user, user_path(e.user), :class => "problem_name c_orange fl" %> <%= l(:label_project_new) %> : + <%= link_to e.user, user_path(e.user), :class => "problem_name c_orange fl" %> <%= l(:label_project_create) %> : <%= link_to e.project.name, :class => "problem_tit fl fb" %>


    <%= l :label_create_time %> :<%= format_time(e.project.created_on) %>

    diff --git a/config/locales/projects/zh.yml b/config/locales/projects/zh.yml index bbf9cc343..2fb78efde 100644 --- a/config/locales/projects/zh.yml +++ b/config/locales/projects/zh.yml @@ -17,6 +17,7 @@ zh: + # # 项目托管平台主页 # @@ -86,7 +87,7 @@ zh: label_project_overview: "项目简介:" label_expend_information: 展开更多信息 - + label_project_create: "新建了项目" # # 项目托管平台 From 729b28ae43105ded77ad4975198739835744d18f Mon Sep 17 00:00:00 2001 From: huang Date: Tue, 14 Apr 2015 16:03:47 +0800 Subject: [PATCH 047/285] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E5=88=9B=E5=A7=8B=E4=BA=BA=E4=B8=8D=E8=83=BD=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E8=87=AA=E5=B7=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/application_helper.rb | 2 ++ app/views/projects/settings/_new_members.html.erb | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index bc222a302..9c6265f02 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -1358,6 +1358,8 @@ module ApplicationHelper link_to l(:button_delete), url, options end + + def delete_new_link(url, options={}) options = { :method => :delete, diff --git a/app/views/projects/settings/_new_members.html.erb b/app/views/projects/settings/_new_members.html.erb index 81aaa4186..d8b75775b 100644 --- a/app/views/projects/settings/_new_members.html.erb +++ b/app/views/projects/settings/_new_members.html.erb @@ -42,13 +42,13 @@
    <% end %> - <%# unless member.roles.first.to_s == "Manager"%> + <% unless member.user_id == @project.user_id %> 编辑 <%= delete_link membership_path(member), :remote => true, :class => "c_dblue ml30 fl", :data => (!User.current.admin? && member.include?(User.current) ? {:confirm => l(:text_own_membership_delete_confirmation)} : {confirm: l(:label_delete_confirm)}) if member.deletable? %> - <%# end%> + <% end%> <% end%> From e4b2092c7fea78d8c7c10491a2b4052b02e22e20 Mon Sep 17 00:00:00 2001 From: sw <939547590@qq.com> Date: Tue, 14 Apr 2015 16:56:32 +0800 Subject: [PATCH 048/285] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E6=88=90=E5=91=98=E5=88=97=E8=A1=A8=E5=A2=9E=E5=8A=A0=E6=88=90?= =?UTF-8?q?=E5=91=98=EF=BC=8C=E4=BB=A5=E5=8F=8A=E7=94=A8=E6=88=B7/?= =?UTF-8?q?=E8=A7=92=E8=89=B2=E7=95=99=E7=A9=BA=E6=97=B6=E7=9A=84=E6=8F=90?= =?UTF-8?q?=E7=A4=BA=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/members_controller.rb | 5 +++- app/views/members/create.js.erb | 26 ++++++------------- .../projects/settings/_new_members.html.erb | 1 - 3 files changed, 12 insertions(+), 20 deletions(-) diff --git a/app/controllers/members_controller.rb b/app/controllers/members_controller.rb index fc243741a..2a5c7f118 100644 --- a/app/controllers/members_controller.rb +++ b/app/controllers/members_controller.rb @@ -117,9 +117,12 @@ class MembersController < ApplicationController format.html { redirect_to invite_members_project_url(@project) } end else + unless members.present? && members.all? {|m| m.valid? } + @project_error_message = members.empty? ? l(:label_user_role_null) :members.collect {|m| m.errors.full_messages}.flatten.uniq.join(', ') + end respond_to do |format| format.html { redirect_to_settings_in_projects } - format.js { @members = members; @applied_members = applied_members; } + format.js format.api { @member = members.first if @member.valid? diff --git a/app/views/members/create.js.erb b/app/views/members/create.js.erb index 941582c04..2e7af18d8 100644 --- a/app/views/members/create.js.erb +++ b/app/views/members/create.js.erb @@ -1,20 +1,11 @@ <%if @project%> -$('#tab-content-members').html('<%= escape_javascript(render :partial => 'projects/settings/members') %>'); - - <%if !@applied_members%> - <% if @members.present? && @members.all? {|m| m.valid? } %> - <% @members.each do |member| %> - $("#member-<%= member.id %>").effect("highlight"); - <% end %> - <% else %> - <% if @members %> - <% errors = @members.collect {|m| m.errors.full_messages}.flatten.uniq.join(', ')%> - alert('<%= raw(escape_javascript(l(:notice_failed_to_save_members, :errors => errors || ''))) %>'); - <% end%> - <% end %> - <% end %> - - + <% if @project_error_message%> + alert("<%= @project_error_message%>"); + <% else%> + $('#pro_st_tbc_03').html('<%= escape_javascript(render :partial => 'projects/settings/new_members') %>'); + hideOnLoad(); + alert("添加成功"); + <% end%> <%elsif @course%> <% if @create_member_error_messages%> alert("<%= @create_member_error_messages%>"); @@ -22,6 +13,5 @@ $('#tab-content-members').html('<%= escape_javascript(render :partial => 'projec $('#tbc_02').html('<%= escape_javascript(render :partial => 'courses/course_members') %>'); alert("添加成功"); <% end%> + hideOnLoad(); <%end%> - -hideOnLoad(); diff --git a/app/views/projects/settings/_new_members.html.erb b/app/views/projects/settings/_new_members.html.erb index d8b75775b..82ed52d9a 100644 --- a/app/views/projects/settings/_new_members.html.erb +++ b/app/views/projects/settings/_new_members.html.erb @@ -90,7 +90,6 @@

    <%= l(:label_member_new) %>

    <%= form_for(@member, {:as => :membership, :url => project_memberships_path(@project), :remote => true, :method => :post}) do |f| %> - +
    + <% if roles.any? %>
    - + <% if @project.applied_projects.any? %> -
    -

    <%= l(:label_apply_project) %>

    +
    +

    <%= l(:label_apply_project) %>

    <%= form_for(@applied_members, {:as => :membership, :url => project_memberships_path(@project), :remote => true, :method => :post}) do |f| %> - <% end %> +
    +
    + <% end %>
    - +

    <%= l(:label_member_new) %>

    <%= form_for(@member, {:as => :membership, :url => project_memberships_path(@project), :remote => true, :method => :post}) do |f| %> @@ -119,3 +120,17 @@
    <% end %> + \ No newline at end of file diff --git a/config/locales/zh.yml b/config/locales/zh.yml index 0668f152e..6fc7aa8da 100644 --- a/config/locales/zh.yml +++ b/config/locales/zh.yml @@ -981,6 +981,7 @@ zh: text_wiki_page_destroy_children: 删除子页面及其所有下级页面 text_wiki_page_reassign_children: 将子页面的上级页面设置为 text_own_membership_delete_confirmation: 你正在删除你现有的某些或全部权限,如果这样做了你可能将会再也无法编辑该课程了。你确定要继续吗? + text_own_membership_for_project_confirmation: 你正在删除现有的某些或全部权限,如果这样做了你可能将会再也无法编辑该项目了。你确定要继续吗? text_zoom_in: 放大 text_zoom_out: 缩小 text_applied_project: "用户 %{id} 申请加入项目 %{project}" diff --git a/public/javascripts/project.js b/public/javascripts/project.js index 01cdae5d7..18d461029 100644 --- a/public/javascripts/project.js +++ b/public/javascripts/project.js @@ -188,4 +188,11 @@ function project_setting(n) function submitModules() { $("#modules-form").submit(); +} + +//配置--成员---申请列表--拒绝 +function refusal_applied_member() +{ + $('#new_membership').append(""); + $('#new_membership').submit(); } \ No newline at end of file From cdf1ce1c176a356acfb4d82810bdb7ad29bab026 Mon Sep 17 00:00:00 2001 From: whimlex Date: Tue, 14 Apr 2015 19:56:03 +0800 Subject: [PATCH 050/285] =?UTF-8?q?=E7=BC=BA=E9=99=B7=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/application_helper.rb | 11 ++++ app/helpers/watchers_helper.rb | 35 ++++++++-- app/views/attachments/_form.html.erb | 2 +- app/views/issues/_attributes.html.erb | 93 ++++++++++++++------------- app/views/issues/_form.html.erb | 26 +++++++- app/views/issues/new.html.erb | 65 +++++++++---------- public/stylesheets/jstoolbar.css | 4 +- public/stylesheets/project.css | 16 ++--- 8 files changed, 153 insertions(+), 99 deletions(-) diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 5207be823..b9d40303b 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -554,6 +554,17 @@ module ApplicationHelper s.html_safe end + #缺陷追踪者列表复选框生成 + def issue_watcher_check_box_tags_ex name, principals + s = '' + principals.each do |principal| + s << "
  • #{ check_box_tag name, principal.id, false, :id => nil } #{h link_to principal.userInfo, user_path( principal.id)}
  • \n" + end + s.html_safe + end + + + #扩展的checkbox生成 def principals_check_box_tags_ex(name, principals) s = '' diff --git a/app/helpers/watchers_helper.rb b/app/helpers/watchers_helper.rb index af08fe1d3..6edb171c8 100644 --- a/app/helpers/watchers_helper.rb +++ b/app/helpers/watchers_helper.rb @@ -261,17 +261,28 @@ module WatchersHelper content.present? ? content_tag('ul', content, :class => 'watchers') : content end + + + + + + + def watchers_checkboxes(object, users, checked=nil) if users.nil? else + # scope = users.sort + # watchers = paginateHelper scope,10 + # s = content_tag('ul', issue_watcher_check_box_tags_ex('issue[watcher_user_ids][]', watchers), :class => 'mb10 ml80') + # links = pagination_links_full(@obj_pages, @obj_count, :per_page_links => false, :remote => false, :flag => true){|text, parameters, options| + # link_to text, watchers_autocomplete_for_user_path(@users, parameters.merge(:q => params[:q],:format => 'js',:flag => 'ture')), :remote => true + # } + # s + content_tag('ul', links,:class => 'wlist', :style =>"float:left;margin-top:0px;") users.map do |user| c = checked.nil? ? object.watched_by?(user) : checked - tag = check_box_tag 'issue[watcher_user_ids][]', user.id, c, :id => nil - content_tag 'label', "#{tag} #{h(user)}".html_safe, - :id => "issue_watcher_user_ids_#{user.id}", - :class => "floating" end.join.html_safe + s = content_tag('ul', issue_watcher_check_box_tags_ex('issue[watcher_user_ids][]', users), :class => 'mb10 ml80') end end @@ -305,7 +316,7 @@ module WatchersHelper link_to(l(:label_exit_project),exit_cur_project_path(project.id), :remote => true, :confirm => l(:lable_sure_exit_project), :class => "pr_join_a_quit" ) - end + end #项目关注、取消关注 #REDO:项目样式确定后方法需要对CSS变量进行改进 @@ -342,4 +353,18 @@ module WatchersHelper link_to text, url, :remote => true, :method => method , :class => "pr_join_a",:id => id end + 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 diff --git a/app/views/attachments/_form.html.erb b/app/views/attachments/_form.html.erb index b026fead2..ce78274a3 100644 --- a/app/views/attachments/_form.html.erb +++ b/app/views/attachments/_form.html.erb @@ -48,7 +48,7 @@ <%#= button_tag "浏览", :type=>"button", :onclick=>"CompatibleSend();" %> - <%= button_tag l(:button_browse), :type=>"button", :onclick=>"_file.click()",:onmouseover => 'this.focus()', :style => ie8? ? 'display:none' : '' %> + <%= button_tag "文件浏览",:class => 'sub_btn', :type=>"button", :onclick=>"_file.click()",:onmouseover => 'this.focus()', :style => ie8? ? 'display:none' : '' %> <%= file_field_tag 'attachments[dummy][file]', :id => '_file', :class => 'file_selector', diff --git a/app/views/issues/_attributes.html.erb b/app/views/issues/_attributes.html.erb index 413299b2d..177e5abf0 100644 --- a/app/views/issues/_attributes.html.erb +++ b/app/views/issues/_attributes.html.erb @@ -4,83 +4,96 @@ <%= l(:label_change_properties) %>
    • + <% if @issue.safe_attribute?('status_id') && @allowed_statuses.present? %> - <%= f.select :status_id, (@allowed_statuses.collect {|p| [p.name, p.id]}), - { :onchange => "updateIssueFrom('#{escape_javascript project_issue_form_path(@project, :id => @issue, :format => 'js')}')"}, :class => "w150" %> + <%= f.select :status_id, + (@allowed_statuses.collect {|p| [p.name, p.id]}), + { :onchange => "updateIssueFrom('#{escape_javascript project_issue_form_path(@project, :id => @issue, :format => 'js')}')" , :no_label => true}, + :class => "w150" %> <% else %> -

      <%= h(@issue.status.name) %>

      + <%= h(@issue.status.name) %> <% end %>
    • + <% if @issue.safe_attribute? 'priority_id' %> - <%= f.select :priority_id, (@priorities.collect {|p| [p.name, p.id]}), {:required => true}, :disabled => !@issue.leaf?, :class => "w150" %> + <%= f.select :priority_id, + (@priorities.collect {|p| [p.name, p.id]}), + {:required => true, :no_label => true}, :disabled => !@issue.leaf?, + :class => "w150" %> <% end %>
    • -
    • <% if @issue.safe_attribute? 'assigned_to_id' %> +
    • +
    • + + <% if @issue.safe_attribute? 'assigned_to_id' %> <%= f.select :assigned_to_id, principals_options_for_select(@issue.assignable_users, @issue.assigned_to), - :include_blank => true, :required => @issue.required_attribute?('assigned_to_id'), - :class => "w150" %> + {:required => @issue.required_attribute?('assigned_to_id'), :no_label => true} , + :class => "w150" %> <% end %>
    • -
    • <% if @issue.safe_attribute?('fixed_version_id') && @issue.assignable_versions.any? %> - <%= f.select :fixed_version_id, version_options_for_select(@issue.assignable_versions, @issue.fixed_version), :include_blank => true, - :required => @issue.required_attribute?('fixed_version_id'), - :class => "w150" %> +
    • + + <% if @issue.safe_attribute?('fixed_version_id') && @issue.assignable_versions.any? %> + <%= f.select :fixed_version_id, version_options_for_select(@issue.assignable_versions, @issue.fixed_version), + {:include_blank => true, :required => @issue.required_attribute?('fixed_version_id'), :no_label => true}, + :class => "w150" %> <%#= link_to(image_tag('add.png', :style => 'vertical-align: middle;'), new_project_version_path(@issue.project), :remote => true, :method => 'get', :title => l(:label_version_new), :tabindex => 200) if User.current.allowed_to?(:manage_versions, @issue.project) %> - + <% end %>
      -
    • <% if @issue.safe_attribute? 'start_date' %> -

      <%= f.text_field :start_date, :size => 10, :disabled => !@issue.leaf?, - :class => "w150", +

    • + + <% if @issue.safe_attribute? 'start_date' %> + <%= f.text_field :start_date, + :size => 22, + :disabled => !@issue.leaf?, + :no_label=> true, :required => @issue.required_attribute?('start_date') %> - <%= calendar_for('issue_start_date','start_date') if @issue.leaf? %>

      + <%= calendar_for('issue_start_date','start_date') if @issue.leaf? %> <% end %>
    • -
    • <% if @issue.safe_attribute? 'due_date' %> -

      <%= f.text_field :due_date, :size => 10, - :class => "w150", +

    • + + <% if @issue.safe_attribute? 'due_date' %> + <%= f.text_field :due_date, :size => 22, :disabled => !@issue.leaf?, + :no_label=> true, :required => @issue.required_attribute?('due_date') %> - <%= calendar_for('issue_due_date','start_date') if @issue.leaf? %>

      + <%= calendar_for('issue_due_date','start_date') if @issue.leaf? %> <% end %>
    • -
    • <% if @issue.safe_attribute? 'estimated_hours' %> -

      <%= f.text_field :estimated_hours, :size => 3, +

    • + + <% if @issue.safe_attribute? 'estimated_hours' %> + <%= f.text_field :estimated_hours, :size => 22, :disabled => !@issue.leaf?, - :class => "w150", - :required => @issue.required_attribute?('estimated_hours') %> <%= l(:field_hours) %>

      + :no_label=> true, + :required => @issue.required_attribute?('estimated_hours') %> + <%= l(:field_hours) %> <% end %>
    • - + <% if @issue.safe_attribute?('done_ratio') && @issue.leaf? && Issue.use_field_for_done_ratio? %> + <%= f.select :done_ratio, ((0..10).to_a.collect {|r| ["#{r*10} %", r*10] }), + {:required => @issue.required_attribute?('done_ratio'), :no_label=> true ,:onchange => "PrecentChange(this.value)"}, + :class => "w150" %> + <% end %>
    @@ -144,13 +157,7 @@ } } - <% if @issue.safe_attribute?('done_ratio') && @issue.leaf? && Issue.use_field_for_done_ratio? %> -

    <%= f.select :done_ratio, ((0..10).to_a.collect {|r| ["#{r*10} %", r*10] }), {:required => @issue.required_attribute?('done_ratio')}, - {:onchange => "PrecentChange(this.value)"} %>

    - <% end %> -
    - <% if @issue.safe_attribute? 'custom_field_values' %> <%= render :partial => 'issues/form_custom_fields' %> diff --git a/app/views/issues/_form.html.erb b/app/views/issues/_form.html.erb index 5145d110a..dfee1b1b4 100644 --- a/app/views/issues/_form.html.erb +++ b/app/views/issues/_form.html.erb @@ -1,9 +1,8 @@ - @@ -76,7 +75,28 @@ <% end %>
    - +
  • + <% if @copy_from && @copy_from.attachments.any? %> +

    + + +

    + <% end %> + <% if @copy_from && !@copy_from.leaf? %> +

    + + <%= check_box_tag 'copy_subtasks', '1', @copy_subtasks %> +

    + <% end %> +
  • +
    +
  • + + <%= render :partial => 'attachments/form', :locals => {:container => @issue} %> +
  • +
    +
    <%= render :partial => 'issues/attributes' %> diff --git a/app/views/issues/new.html.erb b/app/views/issues/new.html.erb index a12d6d335..3ae8cd368 100644 --- a/app/views/issues/new.html.erb +++ b/app/views/issues/new.html.erb @@ -1,4 +1,4 @@ -
    +

    问题跟踪

    <%= call_hook(:view_issues_new_top, {:issue => @issue}) %> @@ -9,46 +9,39 @@ <%= hidden_field_tag 'copy_from', params[:copy_from] if params[:copy_from] %>
    <%= render :partial => 'issues/form', :locals => {:f => f} %> - - <% if @copy_from && @copy_from.attachments.any? %> -

    - - -

    - <% end %> - <% if @copy_from && !@copy_from.leaf? %> -

    - - <%= check_box_tag 'copy_subtasks', '1', @copy_subtasks %> -

    - <% end %> - - -

    <%= render :partial => 'attachments/form', :locals => {:container => @issue} %>

    - +
    +
    <% if @issue.safe_attribute? 'watcher_user_ids' -%> -

    - - - <%= watchers_checkboxes(@issue, @available_watchers) %> - - - <%= link_to l(:label_search_for_watchers), +

    + + + + <%= link_to "", {:controller => 'watchers', :action => 'new', :project_id => @issue.project}, :remote => true, - :method => 'get' %> - -

    - <% end %> -
    - + :method => 'get', + :class=>"pic_sch mt5 ml5" %> + +
    + <%= javascript_tag "observeSearchfield('user_search', 'users_for_watcher', '#{ escape_javascript watchers_autocomplete_for_user_path(:user=> @available_watchers, :format => 'js',:flag => 'ture') }')" %> +
    + + <%= watchers_checkboxes(@issue, @available_watchers) %> + +
    +
    + +
    +
    + + +
    + <% end %> +
    <%= l(:button_create)%> - <%= preview_link preview_new_issue_path(:project_id => @project), 'issue-form','preview',{:class => "ButtonColor m3p10"}%> - + <%= preview_link preview_new_issue_path(:project_id => @project), 'issue-form','preview',{:class => "blue_btn fl ml10"}%> +
    <%= javascript_tag "$('#issue_subject').focus();" %> <% end %> diff --git a/public/stylesheets/jstoolbar.css b/public/stylesheets/jstoolbar.css index a4af73278..6fb07f974 100644 --- a/public/stylesheets/jstoolbar.css +++ b/public/stylesheets/jstoolbar.css @@ -1,8 +1,10 @@ .jstEditor { + padding-left: 0px; } .jstEditor textarea, .jstEditor iframe { - margin: 0 !important; + margin: 0 ; + margin-left: 80px; } .jstHandle { diff --git a/public/stylesheets/project.css b/public/stylesheets/project.css index 556717e9e..4633c95f7 100644 --- a/public/stylesheets/project.css +++ b/public/stylesheets/project.css @@ -166,16 +166,7 @@ a:hover.upload_btn_grey{background:#8a8a8a;} a.link_file{ background:url(../images/pic_file.png) 0 2px no-repeat; padding-left:20px; color:#64bdd9; } a:hover.link_file{ background:url(../images/pic_file.png) 0 -25px no-repeat; color:#3ca5c6;} .r_txt_tit{width:510px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;color:#15bccf; float:left; color:#09658c; font-size:14px;} -/* 新建问题 */ -.newpro_box{ color:#6d6d6d;} -.newpro_box02{ color:#6d6d6d; margin-left:30px; margin-bottom:10px; } -.newpro_box ul li{ } -.newpro_box input{ height:26px; float:left; margin-bottom:10px;} -.newpro_box textarea{ height:150px; float:left; margin-bottom:10px;} -.newpro_box select{ height:26px; float:left; margin-bottom:10px;} -.label{ width:80px; text-align:right; font-size:14px; display:block; float:left;} -.label02{ width:110px; text-align:right; font-size:14px; display:block; float:left;} -.collapsible{ border-left:none;border-right:none;border-bottom:none; border-top:1px solid #e4e4e4; padding-left:30px; padding-top:10px; } + /* 弹框 新样式还没设计出来,暂时用的课程那边的样式 */ .alert .close{width:26px;height:26px;overflow:hidden;position:absolute;top:-10px;right:-502px;background:url(images/close.png) no-repeat;cursor:pointer;} @@ -338,6 +329,11 @@ a:hover.st_add{ color:#ff8e15;} padding-bottom: 3px; } +/* 新建问题 */ +.label{ width:80px; text-align:right; font-size:14px; display:block; float:left;} +.label02{ width:110px; text-align:right; font-size:14px; display:block; float:left;} +.collapsible{ border-left:none;border-right:none;border-bottom:none; border-top:1px solid #e4e4e4; padding-top:10px; } + /*add by sw*/ blockquote { border-left: 1px solid #e0e0e0; From f528584345123e085bbd3efba52b12c3dd0eab6a Mon Sep 17 00:00:00 2001 From: huang Date: Tue, 14 Apr 2015 20:04:58 +0800 Subject: [PATCH 051/285] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=BF=81=E7=A7=BB--?= =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E7=B1=BB=E5=9E=8B=E9=BB=98=E8=AE=A4=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../20150414115406_import_newtype_data_to_project.rb | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 db/migrate/20150414115406_import_newtype_data_to_project.rb diff --git a/db/migrate/20150414115406_import_newtype_data_to_project.rb b/db/migrate/20150414115406_import_newtype_data_to_project.rb new file mode 100644 index 000000000..1db4192b6 --- /dev/null +++ b/db/migrate/20150414115406_import_newtype_data_to_project.rb @@ -0,0 +1,9 @@ +class ImportNewtypeDataToProject < ActiveRecord::Migration + def up + sql = ("update projects set project_new_type=1") + execute(sql) + end + + def down + end +end From b7537ad518864ee89a08a5368d8109190fe61db9 Mon Sep 17 00:00:00 2001 From: huang Date: Tue, 14 Apr 2015 23:58:27 +0800 Subject: [PATCH 052/285] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=96=B0=E9=97=BB?= =?UTF-8?q?=E4=B8=AD=E6=B5=8B=E5=87=BA=E7=9A=84bug=EF=BC=8C=20=E8=AE=A8?= =?UTF-8?q?=E8=AE=BA=E5=8C=BA=E4=B8=AD=E9=99=84=E4=BB=B6=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E5=BD=A2=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/messages/_project_show.html.erb | 2 +- app/views/news/_project_news.html.erb | 3 ++- app/views/news/_project_show.html.erb | 2 +- app/views/projects/settings/_new_modules.html.erb | 4 +++- config/locales/projects/zh.yml | 2 +- public/javascripts/project.js | 13 ++++++------- public/stylesheets/project.css | 4 ++++ 7 files changed, 18 insertions(+), 12 deletions(-) diff --git a/app/views/messages/_project_show.html.erb b/app/views/messages/_project_show.html.erb index 7df8fd389..20409ea22 100644 --- a/app/views/messages/_project_show.html.erb +++ b/app/views/messages/_project_show.html.erb @@ -55,7 +55,7 @@ <%= format_time(message.created_on) %>

    <%= textilizable message,:content,:attachments => message.attachments %>

    - <%= link_to_attachments message, :author => false %> + <%= link_to_attachment_project message, :author => false %>
    <%= link_to( diff --git a/app/views/news/_project_news.html.erb b/app/views/news/_project_news.html.erb index 97902aa16..54f6dc70b 100644 --- a/app/views/news/_project_news.html.erb +++ b/app/views/news/_project_news.html.erb @@ -29,8 +29,9 @@ <%= link_to_user_header(news.author,false,{:class=> 'problem_name c_orange fl'}) if news.respond_to?(:author) %> <%= l(:label_add_news) %>:<%= link_to h(news.title), news_path(news),:class => 'problem_tit fl fb c_dblue' %>
    -

    <%= news.description %>
    <%= l(:label_create_time) %> :<%= format_time(news.created_on) %>

    +

    <%= news.description %>

    + <%= l(:label_create_time) %> :<%= format_time(news.created_on) %>
    diff --git a/app/views/news/_project_show.html.erb b/app/views/news/_project_show.html.erb index eed2864d0..fc12a8006 100644 --- a/app/views/news/_project_show.html.erb +++ b/app/views/news/_project_show.html.erb @@ -82,7 +82,7 @@ :onclick => '$("#edit-news").show(); return false;') if User.current.allowed_to?(:manage_news, @project) %> <%= delete_link news_path(@news),:class => 'talk_edit fr' if User.current.allowed_to?(:manage_news, @project) %>
    -
    <%= textAreailizable(@news, :description) %>
    <%= l(:label_create_time) %> : <%= format_time(@news.created_on) %>
    +
    <%= textAreailizable(@news, :description) %>
    <%= l(:label_create_time) %> : <%= format_time(@news.created_on) %>
    <%= link_to_attachments_course @news %> diff --git a/app/views/projects/settings/_new_modules.html.erb b/app/views/projects/settings/_new_modules.html.erb index 281d07fef..c6aa26348 100644 --- a/app/views/projects/settings/_new_modules.html.erb +++ b/app/views/projects/settings/_new_modules.html.erb @@ -16,6 +16,8 @@ <%= check_all_links 'modules-form' %>

    - <%= l(:button_save) %> + + <%= l(:button_save) %> +

    <% end %> diff --git a/config/locales/projects/zh.yml b/config/locales/projects/zh.yml index 2fb78efde..e15c4dcdb 100644 --- a/config/locales/projects/zh.yml +++ b/config/locales/projects/zh.yml @@ -271,7 +271,7 @@ zh: # 项目得分 # label_projects_score: 项目综合得分 - label_project_new_list: 条项目新闻 + label_project_new_list: 条新闻 label_issue_score: issue得分 label_issue_number: issue的数量 diff --git a/public/javascripts/project.js b/public/javascripts/project.js index 18d461029..424aeb7cc 100644 --- a/public/javascripts/project.js +++ b/public/javascripts/project.js @@ -183,16 +183,15 @@ function project_setting(n) } } } - -// 配置模块提交 -function submitModules() -{ - $("#modules-form").submit(); -} - //配置--成员---申请列表--拒绝 function refusal_applied_member() { $('#new_membership').append(""); $('#new_membership').submit(); +} + +//新闻描述显示更多信息 +function news_show_more_des(id) +{ + $('#news_description_' + id).toggleClass("news_description_none"); } \ No newline at end of file diff --git a/public/stylesheets/project.css b/public/stylesheets/project.css index 4633c95f7..e2859c9ae 100644 --- a/public/stylesheets/project.css +++ b/public/stylesheets/project.css @@ -28,6 +28,10 @@ a.project_txt{ color:#0781b4; width:445px; display:block; float:left; overflow: a.project_txt02{ color:#0781b4; width:618px; display:block; float:left; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;} a:hover.project_txt{ color:#066e9a;} .noline{ border-bottom:none;} +.news_description{max-height: 38px;overflow:hidden; } +.news_description_none{max-height: none;} +a.news_foot{ border:1px solid #e8eef2; color: #929598; text-align:center; width:600px; height:20px; padding-top:3px; cursor:pointer;} +a:hover.news_foot{ color:#787b7e; border:1px solid #d4d4d4;} /*弹框*/ .floatbox{ width:420px; border:3px solid #15bccf; background:#fff; padding:5px;} From e0695fa51dab28f724889d0e5383bc68b9a0ab63 Mon Sep 17 00:00:00 2001 From: huang Date: Wed, 15 Apr 2015 00:30:33 +0800 Subject: [PATCH 053/285] =?UTF-8?q?=E8=AE=A8=E8=AE=BA=E5=8C=BA=E3=80=82?= =?UTF-8?q?=E6=8F=8F=E8=BF=B0=E3=80=81=E4=B8=BB=E9=A2=98=E6=8D=A2=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/boards/_project_show.html.erb | 8 ++++---- app/views/messages/_project_show.html.erb | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/views/boards/_project_show.html.erb b/app/views/boards/_project_show.html.erb index b90034c14..2948872dc 100644 --- a/app/views/boards/_project_show.html.erb +++ b/app/views/boards/_project_show.html.erb @@ -15,7 +15,7 @@ <%= form_for @message, :url => new_board_message_path(@board), :html => {:multipart => true, :id => 'message-form'} do |f| %> <%= render :partial => 'messages/form_project', :locals => {:f => f} %>

    - <%= l(:button_submit)%> + <%= l(:button_submit)%> <%= link_to l(:button_cancel), "#", :onclick => '$("#add-message").hide(); return false;', :class => 'grey_btn ml10 fl' %>

    <% end %> @@ -72,9 +72,9 @@ -<% other_formats_links do |f| %> - <%= f.link_to 'Atom', :url => {:key => User.current.rss_key} %> -<% end %> +<%# other_formats_links do |f| %> + <%#= f.link_to 'Atom', :url => {:key => User.current.rss_key} %> +<%# end %> <% html_title @board.name %> diff --git a/app/views/messages/_project_show.html.erb b/app/views/messages/_project_show.html.erb index 20409ea22..33f55cfac 100644 --- a/app/views/messages/_project_show.html.erb +++ b/app/views/messages/_project_show.html.erb @@ -6,7 +6,7 @@ <%=link_to image_tag(url_to_avatar(@topic.author), :width => "46", :height => "46"), user_path(@topic.author) %>
    -

    +

    <%= @topic.subject %>


    由<%= link_to_user_header @topic.author,false,:class=> 'problem_name c_orange' %> 添加于<%= format_time(@topic.created_on) %>

    @@ -26,7 +26,7 @@ :class => 'talk_edit fr' ) if @message.destroyable_by?(User.current) %>
    -
    <%= textilizable(@topic, :content) %>
    +
    <%= textilizable(@topic, :content) %>
    <%= link_to_attachment_project @topic, :author => false %>
    From 4acad8088e41b64340c95497286514fe1649bb2c Mon Sep 17 00:00:00 2001 From: huang Date: Wed, 15 Apr 2015 00:40:25 +0800 Subject: [PATCH 054/285] =?UTF-8?q?=E7=BC=BA=E9=99=B7=E6=9C=80=E6=96=B0?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E6=9C=80=E4=B8=8A=E9=9D=A2=20=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/issue_query.rb | 2 +- app/views/issues/_history.html.erb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/models/issue_query.rb b/app/models/issue_query.rb index c55143ca8..dba45cb43 100644 --- a/app/models/issue_query.rb +++ b/app/models/issue_query.rb @@ -310,7 +310,7 @@ class IssueQuery < Query :order => options[:order], :limit => options[:limit], :offset => options[:offset] - ) + ).reverse rescue ::ActiveRecord::StatementInvalid => e raise StatementInvalid.new(e.message) end diff --git a/app/views/issues/_history.html.erb b/app/views/issues/_history.html.erb index 5b55de2fb..e1e2de6a3 100644 --- a/app/views/issues/_history.html.erb +++ b/app/views/issues/_history.html.erb @@ -1,5 +1,5 @@ <% reply_links = authorize_for('issues', 'edit') -%> -<% for journal in journals %> +<% journals.reverse.each do |journal| %>
    From bfe0176b74f4b75d371c9569a543d21bde3c73db Mon Sep 17 00:00:00 2001 From: huang Date: Wed, 15 Apr 2015 11:15:25 +0800 Subject: [PATCH 055/285] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=99=84=E4=BB=B6?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/issues/index.html.erb | 1 + app/views/issues/show.html.erb | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/app/views/issues/index.html.erb b/app/views/issues/index.html.erb index 7ac495c8a..951218f98 100644 --- a/app/views/issues/index.html.erb +++ b/app/views/issues/index.html.erb @@ -1,6 +1,7 @@

    <%= l(:label_issue_tracking) %>

    +
    <% unless @project.enabled_modules.where("name = 'issue_tracking'").empty? %> diff --git a/app/views/issues/show.html.erb b/app/views/issues/show.html.erb index 273243851..1fcd66a7f 100644 --- a/app/views/issues/show.html.erb +++ b/app/views/issues/show.html.erb @@ -32,9 +32,9 @@ <% end %>
    - + - <%= link_to_attachments @issue, :thumbnails => true %>
    + <%= link_to_attachment_project @issue, :thumbnails => true %>
    <% end -%> <%= call_hook(:view_issues_show_description_bottom, :issue => @issue) %>
    @@ -77,7 +77,7 @@ <% end %>
    <% unless @issue.disabled_core_fields.include?('done_ratio') %> -
  •  % 完成  : 

    <%= progress_bar(@issue.done_ratio, :width => '80px', :legend => "#{@issue.done_ratio}%") %> +
  •  % 完成  : 

    <%= progress_bar(@issue.done_ratio, :width => '0px', :legend => "#{@issue.done_ratio}%") %>
  • <% end %>
    From c607bd5cbfb7b3f781853a77858b687b4caa7f78 Mon Sep 17 00:00:00 2001 From: huang Date: Wed, 15 Apr 2015 12:50:27 +0800 Subject: [PATCH 056/285] =?UTF-8?q?=E5=AE=9A=E4=B9=89=E7=BC=BA=E9=99=B7?= =?UTF-8?q?=E4=B8=AD=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/application_helper.rb | 511 +++++++++++++++--------------- app/views/issues/show.html.erb | 4 +- public/stylesheets/project.css | 2 +- 3 files changed, 263 insertions(+), 254 deletions(-) diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index ab5f0a308..d87d4f0bf 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -81,7 +81,7 @@ module ApplicationHelper def authorize_for(controller, action) User.current.allowed_to?({:controller => controller, :action => action}, @project) end - + # add by nwb def authorize_for_course(controller, action) User.current.allowed_to?({:controller => controller, :action => action}, @course) @@ -128,6 +128,15 @@ module ApplicationHelper end end + def link_to_isuue_user(user, options={}) + if user.is_a?(User) + name = h(user.name(options[:format])) + link_to name, {:controller=> 'users', :action => 'show', id: user.id, host: Setting.user_domain}, :class => "pro_info_p" + else + h(user.to_s) + end + end + def link_to_settings_user(user, options={}) if user.is_a?(User) name = h(user.name(options[:format])) @@ -201,7 +210,7 @@ module ApplicationHelper route_method = options.delete(:download) ? :download_named_attachment_path : :named_attachment_path html_options = options.slice!(:only_path) url = send(route_method, attachment, attachment.filename, options) - url << "?token=#{token}" unless token.nil? + url << "?token=#{token}" unless token.nil? link_to text, url, html_options end @@ -226,18 +235,18 @@ module ApplicationHelper h(text), {:controller => 'repositories', :action => 'revision', :id => repository.project, :repository_id => repository.identifier_param, :rev => rev}, :title => l(:label_revision_id, format_revision(revision)) - ) + ) end # Generates a link to a message def link_to_message(message, options={}, html_options = nil) link_to( - truncate(message.subject, :length => 60), - board_message_path(message.board_id, message.parent_id || message.id, { - :r => (message.parent_id && message.id), - :anchor => (message.parent_id ? "message-#{message.id}" : nil) - }.merge(options)), - html_options + truncate(message.subject, :length => 60), + board_message_path(message.board_id, message.parent_id || message.id, { + :r => (message.parent_id && message.id), + :anchor => (message.parent_id ? "message-#{message.id}" : nil) + }.merge(options)), + html_options ) end @@ -289,8 +298,8 @@ module ApplicationHelper def thumbnail_tag(attachment) link_to image_tag(thumbnail_path(attachment)), - named_attachment_path(attachment, attachment.filename), - :title => attachment.filename + named_attachment_path(attachment, attachment.filename), + :title => attachment.filename end # 图片缩略图链接 @@ -318,9 +327,9 @@ module ApplicationHelper def image_to_function(name, function, html_options = {}) html_options.symbolize_keys! tag(:input, html_options.merge({ - :type => "image", :src => image_path(name), - :onclick => (html_options[:onclick] ? "#{html_options[:onclick]}; " : "") + "#{function};" - })) + :type => "image", :src => image_path(name), + :onclick => (html_options[:onclick] ? "#{html_options[:onclick]}; " : "") + "#{function};" + })) end def format_activity_title(text) @@ -354,7 +363,7 @@ module ApplicationHelper # The given collection may be a subset of the whole project tree # (eg. some intermediate nodes are private and can not be seen) #Modified by nie. - def render_project_nested_lists(projects) + def render_project_nested_lists(projects) s = '' if projects.any? ancestors = [] @@ -383,9 +392,9 @@ module ApplicationHelper if project.try(:project_type) == Project::ProjectType_project unless User.current.member_of?(@project) - s << "" - s << watcher_link(@project, User.current)#, ['whiteButton']) - s << "" + s << "" + s << watcher_link(@project, User.current)#, ['whiteButton']) + s << "" end s << (render :partial => 'projects/project', :locals => {:project => project}).to_s else @@ -398,7 +407,7 @@ module ApplicationHelper @project = original_project end s.html_safe - end + end def render_course_nested_lists(courses) s = '' @@ -433,7 +442,7 @@ module ApplicationHelper end - #added by young + #added by young def render_project_nested_lists_new(projects) s = '' if projects.any? @@ -462,7 +471,7 @@ module ApplicationHelper end s.html_safe end - #end + #end def render_page_hierarchy(pages, node=nil, options={}) content = '' if pages[node] @@ -511,8 +520,8 @@ module ApplicationHelper projects = User.current.memberships.collect(&:project).compact.select(&:active?).uniq if projects.any? options = - ("" + - '').html_safe + ("" + + '').html_safe options << project_tree_options_for_select(projects, :selected => @project) do |p| { :value => project_path(:id => p, :jump => current_menu_item) } @@ -702,15 +711,15 @@ module ApplicationHelper link_to(image_tag('2uparrow.png', :alt => l(:label_sort_highest)), url.merge({"#{name}[move_to]" => 'highest'}), :method => method, :title => l(:label_sort_highest)) + - link_to(image_tag('1uparrow.png', :alt => l(:label_sort_higher)), - url.merge({"#{name}[move_to]" => 'higher'}), - :method => method, :title => l(:label_sort_higher)) + - link_to(image_tag('1downarrow.png', :alt => l(:label_sort_lower)), - url.merge({"#{name}[move_to]" => 'lower'}), - :method => method, :title => l(:label_sort_lower)) + - link_to(image_tag('2downarrow.png', :alt => l(:label_sort_lowest)), - url.merge({"#{name}[move_to]" => 'lowest'}), - :method => method, :title => l(:label_sort_lowest)) + link_to(image_tag('1uparrow.png', :alt => l(:label_sort_higher)), + url.merge({"#{name}[move_to]" => 'higher'}), + :method => method, :title => l(:label_sort_higher)) + + link_to(image_tag('1downarrow.png', :alt => l(:label_sort_lower)), + url.merge({"#{name}[move_to]" => 'lower'}), + :method => method, :title => l(:label_sort_lower)) + + link_to(image_tag('2downarrow.png', :alt => l(:label_sort_lowest)), + url.merge({"#{name}[move_to]" => 'lowest'}), + :method => method, :title => l(:label_sort_lowest)) end def breadcrumb(*args) @@ -794,15 +803,15 @@ module ApplicationHelper def textilizable(*args) options = args.last.is_a?(Hash) ? args.pop : {} case args.size - when 1 - obj = options[:object] - text = args.shift - when 2 - obj = args.shift - attr = args.shift - text = obj.send(attr).to_s - else - raise ArgumentError, 'invalid arguments to textilizable' + when 1 + obj = options[:object] + text = args.shift + when 2 + obj = args.shift + attr = args.shift + text = obj.send(attr).to_s + else + raise ArgumentError, 'invalid arguments to textilizable' end return '' if text.blank? project = options[:project] || @project || (obj && obj.respond_to?(:project) ? obj.project : nil) @@ -958,18 +967,18 @@ module ApplicationHelper # check if page exists wiki_page = link_project.wiki.find_page(page) url = if anchor.present? && wiki_page.present? && (obj.is_a?(WikiContent) || obj.is_a?(WikiContent::Version)) && obj.page == wiki_page - "##{anchor}" - else - case options[:wiki_links] - when :local; "#{page.present? ? Wiki.titleize(page) : ''}.html" + (anchor.present? ? "##{anchor}" : '') - when :anchor; "##{page.present? ? Wiki.titleize(page) : title}" + (anchor.present? ? "_#{anchor}" : '') # used for single-file wiki export - else - wiki_page_id = page.present? ? Wiki.titleize(page) : nil - parent = wiki_page.nil? && obj.is_a?(WikiContent) && obj.page && project == link_project ? obj.page.title : nil - url_for(:only_path => only_path, :controller => 'wiki', :action => 'show', :project_id => link_project, - :id => wiki_page_id, :version => nil, :anchor => anchor, :parent => parent) - end - end + "##{anchor}" + else + case options[:wiki_links] + when :local; "#{page.present? ? Wiki.titleize(page) : ''}.html" + (anchor.present? ? "##{anchor}" : '') + when :anchor; "##{page.present? ? Wiki.titleize(page) : title}" + (anchor.present? ? "_#{anchor}" : '') # used for single-file wiki export + else + wiki_page_id = page.present? ? Wiki.titleize(page) : nil + parent = wiki_page.nil? && obj.is_a?(WikiContent) && obj.page && project == link_project ? obj.page.title : nil + url_for(:only_path => only_path, :controller => 'wiki', :action => 'show', :project_id => link_project, + :id => wiki_page_id, :version => nil, :anchor => anchor, :parent => parent) + end + end link_to(title.present? ? title.html_safe : h(page), url, :class => ('wiki-page' + (wiki_page ? '' : ' new'))) else # project or wiki doesn't exist @@ -1044,110 +1053,110 @@ module ApplicationHelper # project.changesets.visible raises an SQL error because of a double join on repositories if repository && (changeset = Changeset.visible.find_by_repository_id_and_revision(repository.id, identifier)) link = link_to(h("#{project_prefix}#{repo_prefix}r#{identifier}"), {:only_path => only_path, :controller => 'repositories', :action => 'revision', :id => project, :repository_id => repository.identifier_param, :rev => changeset.revision}, - :class => 'changeset', - :title => truncate_single_line(changeset.comments, :length => 100)) + :class => 'changeset', + :title => truncate_single_line(changeset.comments, :length => 100)) end end elsif sep == '#' oid = identifier.to_i case prefix - when nil - if oid.to_s == identifier && issue = Issue.visible.find_by_id(oid, :include => :status) - anchor = comment_id ? "note-#{comment_id}" : nil - link = link_to("##{oid}", {:only_path => only_path, :controller => 'issues', :action => 'show', :id => oid, :anchor => anchor}, - :class => issue.css_classes, - :title => "#{truncate(issue.subject, :length => 100)} (#{issue.status.name})") - end - when 'document' - if document = Document.visible.find_by_id(oid) - link = link_to h(document.title), {:only_path => only_path, :controller => 'documents', :action => 'show', :id => document}, - :class => 'document' - end - when 'version' - if version = Version.visible.find_by_id(oid) - link = link_to h(version.name), {:only_path => only_path, :controller => 'versions', :action => 'show', :id => version}, - :class => 'version' - end - when 'message' - if message = Message.visible.find_by_id(oid, :include => :parent) - link = link_to_message(message, {:only_path => only_path}, :class => 'message') - end - when 'forum' - if board = Board.visible.find_by_id(oid) - link = link_to h(board.name), {:only_path => only_path, :controller => 'boards', :action => 'show', :id => board, :project_id => board.project}, - :class => 'board' - end - when 'news' - if news = News.visible.find_by_id(oid) - link = link_to h(news.title), {:only_path => only_path, :controller => 'news', :action => 'show', :id => news}, - :class => 'news' - end - when 'project' - if p = Project.visible.find_by_id(oid) - link = link_to_project(p, {:only_path => only_path}, :class => 'project') - end + when nil + if oid.to_s == identifier && issue = Issue.visible.find_by_id(oid, :include => :status) + anchor = comment_id ? "note-#{comment_id}" : nil + link = link_to("##{oid}", {:only_path => only_path, :controller => 'issues', :action => 'show', :id => oid, :anchor => anchor}, + :class => issue.css_classes, + :title => "#{truncate(issue.subject, :length => 100)} (#{issue.status.name})") + end + when 'document' + if document = Document.visible.find_by_id(oid) + link = link_to h(document.title), {:only_path => only_path, :controller => 'documents', :action => 'show', :id => document}, + :class => 'document' + end + when 'version' + if version = Version.visible.find_by_id(oid) + link = link_to h(version.name), {:only_path => only_path, :controller => 'versions', :action => 'show', :id => version}, + :class => 'version' + end + when 'message' + if message = Message.visible.find_by_id(oid, :include => :parent) + link = link_to_message(message, {:only_path => only_path}, :class => 'message') + end + when 'forum' + if board = Board.visible.find_by_id(oid) + link = link_to h(board.name), {:only_path => only_path, :controller => 'boards', :action => 'show', :id => board, :project_id => board.project}, + :class => 'board' + end + when 'news' + if news = News.visible.find_by_id(oid) + link = link_to h(news.title), {:only_path => only_path, :controller => 'news', :action => 'show', :id => news}, + :class => 'news' + end + when 'project' + if p = Project.visible.find_by_id(oid) + link = link_to_project(p, {:only_path => only_path}, :class => 'project') + end end elsif sep == ':' # removes the double quotes if any name = identifier.gsub(%r{^"(.*)"$}, "\\1") case prefix - when 'document' - if project && document = project.documents.visible.find_by_title(name) - link = link_to h(document.title), {:only_path => only_path, :controller => 'documents', :action => 'show', :id => document}, - :class => 'document' - end - when 'version' - if project && version = project.versions.visible.find_by_name(name) - link = link_to h(version.name), {:only_path => only_path, :controller => 'versions', :action => 'show', :id => version}, - :class => 'version' - end - when 'forum' - if project && board = project.boards.visible.find_by_name(name) - link = link_to h(board.name), {:only_path => only_path, :controller => 'boards', :action => 'show', :id => board, :project_id => board.project}, - :class => 'board' - end - when 'news' - if project && news = project.news.visible.find_by_title(name) - link = link_to h(news.title), {:only_path => only_path, :controller => 'news', :action => 'show', :id => news}, - :class => 'news' - end - when 'commit', 'source', 'export' - if project - repository = nil - if name =~ %r{^(([a-z0-9\-_]+)\|)(.+)$} - repo_prefix, repo_identifier, name = $1, $2, $3 - repository = project.repositories.detect {|repo| repo.identifier == repo_identifier} - else - repository = project.repository + when 'document' + if project && document = project.documents.visible.find_by_title(name) + link = link_to h(document.title), {:only_path => only_path, :controller => 'documents', :action => 'show', :id => document}, + :class => 'document' end - if prefix == 'commit' - if repository && (changeset = Changeset.visible.where("repository_id = ? AND scmid LIKE ?", repository.id, "#{name}%").first) - link = link_to h("#{project_prefix}#{repo_prefix}#{name}"), {:only_path => only_path, :controller => 'repositories', :action => 'revision', :id => project, :repository_id => repository.identifier_param, :rev => changeset.identifier}, - :class => 'changeset', - :title => truncate_single_line(changeset.comments, :length => 100) - end - else - if repository && User.current.allowed_to?(:browse_repository, project) - name =~ %r{^[/\\]*(.*?)(@([^/\\@]+?))?(#(L\d+))?$} - path, rev, anchor = $1, $3, $5 - link = link_to h("#{project_prefix}#{prefix}:#{repo_prefix}#{name}"), {:controller => 'repositories', :action => (prefix == 'export' ? 'raw' : 'entry'), :id => project, :repository_id => repository.identifier_param, - :path => to_path_param(path), - :rev => rev, - :anchor => anchor}, - :class => (prefix == 'export' ? 'source download' : 'source') - end + when 'version' + if project && version = project.versions.visible.find_by_name(name) + link = link_to h(version.name), {:only_path => only_path, :controller => 'versions', :action => 'show', :id => version}, + :class => 'version' + end + when 'forum' + if project && board = project.boards.visible.find_by_name(name) + link = link_to h(board.name), {:only_path => only_path, :controller => 'boards', :action => 'show', :id => board, :project_id => board.project}, + :class => 'board' + end + when 'news' + if project && news = project.news.visible.find_by_title(name) + link = link_to h(news.title), {:only_path => only_path, :controller => 'news', :action => 'show', :id => news}, + :class => 'news' + end + when 'commit', 'source', 'export' + if project + repository = nil + if name =~ %r{^(([a-z0-9\-_]+)\|)(.+)$} + repo_prefix, repo_identifier, name = $1, $2, $3 + repository = project.repositories.detect {|repo| repo.identifier == repo_identifier} + else + repository = project.repository + end + if prefix == 'commit' + if repository && (changeset = Changeset.visible.where("repository_id = ? AND scmid LIKE ?", repository.id, "#{name}%").first) + link = link_to h("#{project_prefix}#{repo_prefix}#{name}"), {:only_path => only_path, :controller => 'repositories', :action => 'revision', :id => project, :repository_id => repository.identifier_param, :rev => changeset.identifier}, + :class => 'changeset', + :title => truncate_single_line(changeset.comments, :length => 100) + end + else + if repository && User.current.allowed_to?(:browse_repository, project) + name =~ %r{^[/\\]*(.*?)(@([^/\\@]+?))?(#(L\d+))?$} + path, rev, anchor = $1, $3, $5 + link = link_to h("#{project_prefix}#{prefix}:#{repo_prefix}#{name}"), {:controller => 'repositories', :action => (prefix == 'export' ? 'raw' : 'entry'), :id => project, :repository_id => repository.identifier_param, + :path => to_path_param(path), + :rev => rev, + :anchor => anchor}, + :class => (prefix == 'export' ? 'source download' : 'source') + end + end + repo_prefix = nil + end + when 'attachment' + attachments = options[:attachments] || (obj && obj.respond_to?(:attachments) ? obj.attachments : nil) + if attachments && attachment = Attachment.latest_attach(attachments, name) + link = link_to_attachment(attachment, :only_path => only_path, :download => true, :class => 'attachment') + end + when 'project' + if p = Project.visible.where("identifier = :s OR LOWER(name) = :s", :s => name.downcase).first + link = link_to_project(p, {:only_path => only_path}, :class => 'project') end - repo_prefix = nil - end - when 'attachment' - attachments = options[:attachments] || (obj && obj.respond_to?(:attachments) ? obj.attachments : nil) - if attachments && attachment = Attachment.latest_attach(attachments, name) - link = link_to_attachment(attachment, :only_path => only_path, :download => true, :class => 'attachment') - end - when 'project' - if p = Project.visible.where("identifier = :s OR LOWER(name) = :s", :s => name.downcase).first - link = link_to_project(p, {:only_path => only_path}, :class => 'project') - end end end end @@ -1164,9 +1173,9 @@ module ApplicationHelper @current_section += 1 if @current_section > 1 content_tag('div', - link_to(image_tag('edit.png'), options[:edit_section_links].merge(:section => @current_section)), - :class => 'contextual', - :title => l(:button_edit_section)) + heading.html_safe + link_to(image_tag('edit.png'), options[:edit_section_links].merge(:section => @current_section)), + :class => 'contextual', + :title => l(:button_edit_section)) + heading.html_safe else heading end @@ -1285,10 +1294,10 @@ module ApplicationHelper # Same as Rails' simple_format helper without using paragraphs def simple_format_without_paragraph(text) text.to_s. - gsub(/\r\n?/, "\n"). # \r\n and \r -> \n - gsub(/\n\n+/, "

    "). # 2+ newline -> 2 br - gsub(/([^\n]\n)(?=[^\n])/, '\1
    '). # 1 newline -> br - html_safe + gsub(/\r\n?/, "\n"). # \r\n and \r -> \n + gsub(/\n\n+/, "

    "). # 2+ newline -> 2 br + gsub(/([^\n]\n)(?=[^\n])/, '\1
    '). # 1 newline -> br + html_safe end def wiki_simple_format_without_paragraph(text) @@ -1303,7 +1312,7 @@ module ApplicationHelper end def lang_options_for_select(blank=true) - { 'Chinese简体中文 '=> 'zh', :English => :en} + { 'Chinese简体中文 '=> 'zh', :English => :en} end def label_tag_for(name, option_tags = nil, options = {}) @@ -1395,7 +1404,7 @@ module ApplicationHelper :href => "#", :onclick => %|submitPreview("#{escape_javascript url_for(url)}", "#{escape_javascript form}", "#{escape_javascript target}"); return false;|, :accesskey => accesskey(:preview) - }.merge(options) + }.merge(options) end def link_to_function(name, function, html_options={}) @@ -1422,7 +1431,7 @@ module ApplicationHelper def check_all_links(form_name) link_to_function(l(:button_check_all), "checkAll('#{form_name}', true)") + "  ".html_safe + " | "+ "  ".html_safe + - link_to_function(l(:button_uncheck_all), "checkAll('#{form_name}', false)") + link_to_function(l(:button_uncheck_all), "checkAll('#{form_name}', false)") end def progress_bar(pcts, options={}) @@ -1433,12 +1442,12 @@ module ApplicationHelper width = options[:width] || '100px;' legend = options[:legend] || '' content_tag('table', - content_tag('tr', - (pcts[0] > 0 ? content_tag('td', '', :style => "width: #{pcts[0]}%;", :class => 'closed') : ''.html_safe) + - (pcts[1] > 0 ? content_tag('td', '', :style => "width: #{pcts[1]}%;", :class => 'done') : ''.html_safe) + - (pcts[2] > 0 ? content_tag('td', '', :style => "width: #{pcts[2]}%;", :class => 'todo') : ''.html_safe) - ), :class => 'progress', :style => "width: #{width};").html_safe + - content_tag('p', legend, :class => 'percent').html_safe + content_tag('tr', + (pcts[0] > 0 ? content_tag('td', '', :style => "width: #{pcts[0]}%;", :class => 'closed') : ''.html_safe) + + (pcts[1] > 0 ? content_tag('td', '', :style => "width: #{pcts[1]}%;", :class => 'done') : ''.html_safe) + + (pcts[2] > 0 ? content_tag('td', '', :style => "width: #{pcts[2]}%;", :class => 'todo') : ''.html_safe) + ), :class => 'progress', :style => "width: #{width};").html_safe + + content_tag('p', legend, :class => 'percent').html_safe end def checked_image(checked=true) @@ -1451,7 +1460,7 @@ module ApplicationHelper unless @context_menu_included content_for :header_tags do javascript_include_tag('context_menu') + - stylesheet_link_tag('context_menu') + stylesheet_link_tag('context_menu') end if l(:direction) == 'rtl' content_for :header_tags do @@ -1710,7 +1719,7 @@ module ApplicationHelper end s end - + def get_memo @new_memo = Memo.new #@new_memo.subject = "有什么想说的,尽管来咆哮吧~~" @@ -1797,11 +1806,11 @@ module ApplicationHelper html << (content_tag "span", l(:label_no_current_watchers)) end for user in User.watched_by(obj.id) - html << (link_to image_tag(url_to_avatar(user), :class => "avatar"), user_path(user), :class => "avatar", :title => "#{user.name}") - count = count + 1 - if count >= 12 - break - end + html << (link_to image_tag(url_to_avatar(user), :class => "avatar"), user_path(user), :class => "avatar", :title => "#{user.name}") + count = count + 1 + if count >= 12 + break + end end html.html_safe end @@ -1827,13 +1836,13 @@ module ApplicationHelper html.html_safe end - def show_bid_fans_picture(obj) + def show_bid_fans_picture(obj) html = '' if obj.watcher_users.count == 0 html << (content_tag "span", l(:label_project_no_follow)) else obj.watcher_users.take(12).each do |user| - html << (link_to image_tag(url_to_avatar(user), :class => "avatar"), user_path(user), :class => "avatar", :title => user.name) + html << (link_to image_tag(url_to_avatar(user), :class => "avatar"), user_path(user), :class => "avatar", :title => user.name) end end html.html_safe @@ -1868,7 +1877,7 @@ module ApplicationHelper html.html_safe end - def show_contest_project(contest) + def show_contest_project(contest) html = '' if contest.projects.where('is_public = 1').count == 0 html << (content_tag "p", l(:label_no_bid_project), :class => "font_lighter") @@ -1880,7 +1889,7 @@ module ApplicationHelper html.html_safe end - def show_contest_softapplication(contest) + def show_contest_softapplication(contest) html = '' if contest.softapplications.where('is_public = 1').count == 0 html << (content_tag "p", l(:label_no_contest_softapplication), :class => "font_lighter") @@ -1892,17 +1901,17 @@ module ApplicationHelper html.html_safe end - def show_contest_fans_picture(obj) + def show_contest_fans_picture(obj) html = '' if obj.watcher_users.count == 0 html << (content_tag "span", l(:label_project_no_follow)) else obj.watcher_users.take(12).each do |user| - html << (link_to image_tag(url_to_avatar(user), :class => "avatar"), user_path(user), :class => "avatar", :title => user.name) + html << (link_to image_tag(url_to_avatar(user), :class => "avatar"), user_path(user), :class => "avatar", :title => user.name) end end html.html_safe - end + end #display fans picture def show_more_fans?(obj) @@ -1919,13 +1928,13 @@ module ApplicationHelper html << (content_tag "span", l(:label_no_current_fans)) else obj.watcher_users.take(12).each do |user| - html << (link_to image_tag(url_to_avatar(user), :class => "avatar"), user_path(user), :class => "avatar", :title => user.name) + html << (link_to image_tag(url_to_avatar(user), :class => "avatar"), user_path(user), :class => "avatar", :title => user.name) end end html.html_safe end - # added by bai + # added by bai def show_more_participate?(obj) if obj.join_in_contests.count > 12 return true @@ -1934,18 +1943,18 @@ module ApplicationHelper end end - def show_participate_picture(obj) + def show_participate_picture(obj) html = '' count = 0 if obj.join_in_contests.count == 0 html << (content_tag "span", l(:label_no_current_participate)) end for temp in obj.join_in_contests - html << (link_to image_tag(url_to_avatar(temp.user), :class => "avatar"), user_path(temp.user), :class => "avatar", :title => "#{temp.user.name}") - count = count + 1 - if count >= 12 - break - end + html << (link_to image_tag(url_to_avatar(temp.user), :class => "avatar"), user_path(temp.user), :class => "avatar", :title => "#{temp.user.name}") + count = count + 1 + if count >= 12 + break + end end html.html_safe end @@ -1954,14 +1963,14 @@ module ApplicationHelper # add by huang def show_watcher_list(user) - html = '' - count = 0 + html = '' + count = 0 for user in User.watched_by(user.id) - html << (link_to image_tag(url_to_avatar(user), :class => "avatar"), user_path(user), :class => "avatar", :title => "#{user.name}") - count = count + 1 - if count >= 12 - break - end + html << (link_to image_tag(url_to_avatar(user), :class => "avatar"), user_path(user), :class => "avatar", :title => "#{user.name}") + count = count + 1 + if count >= 12 + break + end end html.html_safe end @@ -1979,14 +1988,14 @@ module ApplicationHelper return true if bid.nil? case bid.homework_type - when Bid::HomeworkFile - attaches = HomeworkAttach.where(bid_id: curb) - attaches.map(&:user_id).include? cur - when Bid::HomeworkProject - attaches = BidingProject.where(user_id: User.current, bid_id: bid) - attaches.count > 0 # > 0 则有提交记录 - else - true + when Bid::HomeworkFile + attaches = HomeworkAttach.where(bid_id: curb) + attaches.map(&:user_id).include? cur + when Bid::HomeworkProject + attaches = BidingProject.where(user_id: User.current, bid_id: bid) + attaches.count > 0 # > 0 则有提交记录 + else + true end end @@ -2048,12 +2057,12 @@ module ApplicationHelper end # def hadcommittedforcontest(curu) - # message = JournalsForMessage.find_by_sql("select * from journals_for_messages where jour_type = 'Softapplication' ") - # message.each do |createmessage| - # if createmessage.user_id == curu - # return true - # end - # end + # message = JournalsForMessage.find_by_sql("select * from journals_for_messages where jour_type = 'Softapplication' ") + # message.each do |createmessage| + # if createmessage.user_id == curu + # return true + # end + # end # end def footer_logo(ul_class=nil, li_class=nil) @@ -2073,63 +2082,63 @@ module ApplicationHelper def sort_homework_path(bid, sort, direction) case self.action_name - when 'show_courseEx' - get_not_batch_homework_homework_attach_index_path(bid_id: bid.id, sort: sort, direction: 'asc') - when 'get_not_batch_homework' - get_not_batch_homework_homework_attach_index_path(bid_id: bid.id, sort: sort, direction: direction) - when 'get_batch_homeworks' - get_batch_homeworks_homework_attach_index_path(bid_id: bid.id, sort: sort, direction: direction) - when 'get_homeworks' - get_homeworks_homework_attach_index_path(bid_id: bid.id, sort: sort, direction: direction) - else - '#' + when 'show_courseEx' + get_not_batch_homework_homework_attach_index_path(bid_id: bid.id, sort: sort, direction: 'asc') + when 'get_not_batch_homework' + get_not_batch_homework_homework_attach_index_path(bid_id: bid.id, sort: sort, direction: direction) + when 'get_batch_homeworks' + get_batch_homeworks_homework_attach_index_path(bid_id: bid.id, sort: sort, direction: direction) + when 'get_homeworks' + get_homeworks_homework_attach_index_path(bid_id: bid.id, sort: sort, direction: direction) + else + '#' end end def anonymous_comment_link(bid, course) link = case bid.comment_status - when 0 - confirm_info = "开启匿评后学生将不能对作业进行提交、修改、删除等操作\n" - confirm_info += anonymous_comment_notice(bid,course) - confirm_info += '是否确定开启匿评?' - link_to '启动匿评', start_anonymous_comment_bid_path(bid), id: "#{bid.id}_start_anonymous_comment", remote: true, :confirm => confirm_info, disable_with: '加载中...' - when 1 - confirm_info = "关闭匿评后所有同学将不能继续进行匿评,且将公开已提交作业列表\n" - confirm_info += anonymous_comment_notice(bid,course) - confirm_info += '是否确定关闭匿评?' - link_to '关闭匿评', stop_anonymous_comment_bid_path(bid), id: "#{bid.id}_stop_anonymous_comment", remote: true, :confirm => confirm_info - when 2 - '匿评结束' - end + when 0 + confirm_info = "开启匿评后学生将不能对作业进行提交、修改、删除等操作\n" + confirm_info += anonymous_comment_notice(bid,course) + confirm_info += '是否确定开启匿评?' + link_to '启动匿评', start_anonymous_comment_bid_path(bid), id: "#{bid.id}_start_anonymous_comment", remote: true, :confirm => confirm_info, disable_with: '加载中...' + when 1 + confirm_info = "关闭匿评后所有同学将不能继续进行匿评,且将公开已提交作业列表\n" + confirm_info += anonymous_comment_notice(bid,course) + confirm_info += '是否确定关闭匿评?' + link_to '关闭匿评', stop_anonymous_comment_bid_path(bid), id: "#{bid.id}_stop_anonymous_comment", remote: true, :confirm => confirm_info + when 2 + '匿评结束' + end content_tag('span', link, id: "#{bid.id}_anonymous_comment") end def anonymous_comment_notice(bid, course) - case bid.comment_status - when 0 - @student_size ||= searchStudent(course).size - @homework_size = bid.homeworks.size - percent = @homework_size.to_f / (@student_size == 0 ? 1 : @student_size) - confirm_info = "目前#{@student_size}个学生,总共提交了#{@homework_size}份作业,占#{number_to_percentage(percent * 100, precision: 1)}\n" - when 1 - @homework_evaluations = 0 - bid.homeworks.map { |homework| @homework_evaluations += homework.homework_evaluations.count} - teachers = "(" - teacher_members = searchTeacherAndAssistant(course) - teacher_members.each do |member| - if member == teacher_members.last - teachers += member.user_id.to_s + ")" - else - teachers += member.user_id.to_s + "," - end - end - @has_evaluations = 0 - bid.homeworks.map { |homework| @has_evaluations += homework.rates(:quality).where("seems_rateable_rates.rater_id not in #{teachers}").count} + case bid.comment_status + when 0 + @student_size ||= searchStudent(course).size + @homework_size = bid.homeworks.size + percent = @homework_size.to_f / (@student_size == 0 ? 1 : @student_size) + confirm_info = "目前#{@student_size}个学生,总共提交了#{@homework_size}份作业,占#{number_to_percentage(percent * 100, precision: 1)}\n" + when 1 + @homework_evaluations = 0 + bid.homeworks.map { |homework| @homework_evaluations += homework.homework_evaluations.count} + teachers = "(" + teacher_members = searchTeacherAndAssistant(course) + teacher_members.each do |member| + if member == teacher_members.last + teachers += member.user_id.to_s + ")" + else + teachers += member.user_id.to_s + "," + end + end + @has_evaluations = 0 + bid.homeworks.map { |homework| @has_evaluations += homework.rates(:quality).where("seems_rateable_rates.rater_id not in #{teachers}").count} - percent = @has_evaluations.to_f / (@homework_evaluations == 0 ? 1 : @homework_evaluations) - confirm_info = "目前总共分配了#{@homework_evaluations}份匿评作业,已评价#{@has_evaluations}份作业,占#{number_to_percentage(percent * 100, precision: 1)}\n" - end - confirm_info + percent = @has_evaluations.to_f / (@homework_evaluations == 0 ? 1 : @homework_evaluations) + confirm_info = "目前总共分配了#{@homework_evaluations}份匿评作业,已评价#{@has_evaluations}份作业,占#{number_to_percentage(percent * 100, precision: 1)}\n" + end + confirm_info end def get_technical_title user diff --git a/app/views/issues/show.html.erb b/app/views/issues/show.html.erb index 1fcd66a7f..349f8ebc7 100644 --- a/app/views/issues/show.html.erb +++ b/app/views/issues/show.html.erb @@ -51,7 +51,7 @@
    <% unless @issue.disabled_core_fields.include?('assigned_to_id') %> -
  •  指派给  : 

    <%= @issue.assigned_to ? link_to_user(@issue.assigned_to, :class => "pro_info_p") : "-" %>
  • +
  •  指派给  : 

    <%= @issue.assigned_to ? link_to_isuue_user(@issue.assigned_to) : "-" %>
  • <% end %>
    <% unless @issue.disabled_core_fields.include?('fixed_version_id') %> @@ -77,7 +77,7 @@ <% end %>
    <% unless @issue.disabled_core_fields.include?('done_ratio') %> -
  •  % 完成  : 

    <%= progress_bar(@issue.done_ratio, :width => '0px', :legend => "#{@issue.done_ratio}%") %> +
  •  % 完成  : 

    <%= @issue.done_ratio %>%
  • <% end %>
    diff --git a/public/stylesheets/project.css b/public/stylesheets/project.css index e2859c9ae..8fda5db48 100644 --- a/public/stylesheets/project.css +++ b/public/stylesheets/project.css @@ -85,7 +85,7 @@ a.pro_mes_w{ height:20px; float:left;display:block; color:#999999;} .pro_info_box{ margin-left:60px; background:#f0fbff; height:80px; padding:10px 0;} .pro_info_box ul{} .pro_info_box ul li{ margin-bottom:10px;} -.pro_info_p{ color:#0781b4; float:left; width:160px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis; } +.pro_info_p{ color:#0781b4 !important; float:left; width:160px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;padding-top:2.5px;} .edit_pro_box{overflow:hidden;display:none; margin-bottom:30px; border-bottom:1px dashed #CCC; padding-bottom:10px;} /****翻页***/ ul.wlist{ float:right; border-bottom:none; height:30px; margin-top:20px; } From 0023d0610b2b09a947c472d32ae7077a3b98d048 Mon Sep 17 00:00:00 2001 From: huang Date: Wed, 15 Apr 2015 15:15:51 +0800 Subject: [PATCH 057/285] =?UTF-8?q?=E7=BC=BA=E9=99=B7=E4=B8=BB=E9=A2=98?= =?UTF-8?q?=E3=80=81=E6=8F=8F=E8=BF=B0=E5=BC=BA=E5=88=B6=E6=8D=A2=E8=A1=8C?= =?UTF-8?q?=20=E8=B7=9F=E8=B8=AA=E6=8C=89=E9=92=AE=E6=A0=B7=E5=BC=8F=20?= =?UTF-8?q?=E5=BC=95=E7=94=A8=E6=A0=B7=E5=BC=8F=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/journals_helper.rb | 29 ++++++++++ app/helpers/watchers_helper.rb | 23 +++++++- app/views/issues/_action_menu.html.erb | 2 +- app/views/issues/_history.html.erb | 15 ++--- app/views/issues/show.html.erb | 77 +++----------------------- 5 files changed, 65 insertions(+), 81 deletions(-) diff --git a/app/helpers/journals_helper.rb b/app/helpers/journals_helper.rb index cfebb4d30..6e3155f48 100644 --- a/app/helpers/journals_helper.rb +++ b/app/helpers/journals_helper.rb @@ -73,6 +73,35 @@ module JournalsHelper content_tag('div', content.html_safe, :id => "journal-#{journal.id}-notes", :class => css_classes ,:style => "width:580px") end + # 缺陷回复内容、引用内容 + # Redo:后面需要统一扩展 + def render_notes_issue (issue, journal, options={}) + content = '' + editable = User.current.logged? && (User.current.allowed_to?(:edit_issue_notes, issue.project) || (journal.user == User.current && User.current.allowed_to?(:edit_own_issue_notes, issue.project))) + destroyable = User.current.logged? && ((journal.user == User.current) || (issue.author_id == User.current.id) || (User.current.admin == 1)) + links = [] + if !journal.notes.blank? + links << link_to(l(:button_quote), + {:controller => 'journals', :action => 'new', :id => issue.id, :journal_id => journal}, + :remote => true, + :method => 'post', + :title => l(:button_quote)) if options[:reply_links] + links << link_to_in_place_notes_editor(l(:button_edit), "journal-#{journal.id}-notes", + { :controller => 'journals', :action => 'edit', :id => journal, :format => 'js' }, + :title => l(:button_edit)) if editable + #Added by young + if destroyable + links << link_to(l(:button_delete), { :controller => 'journals', :action => 'destroy', :id => journal, :format => 'js' }, + :title => l(:button_delete)) + end + end + #content << content_tag('div', links.join(' ').html_safe, :class => 'contextual', :style => 'margin-top:-25px;') unless links.empty? + content << textilizable(journal, :notes) + css_classes = "wiki" + css_classes << " editable" if editable + content_tag('div', content.html_safe, :id => "journal-#{journal.id}-notes", :class => css_classes ,:style => "width:510px") + end + def link_to_in_place_notes_editor(text, field_id, url, options={}) onclick = "$.ajax({url: '#{url_for(url)}', type: 'get'}); return false;" link_to text, '#', options.merge(:onclick => onclick) diff --git a/app/helpers/watchers_helper.rb b/app/helpers/watchers_helper.rb index 6edb171c8..c615f59e2 100644 --- a/app/helpers/watchers_helper.rb +++ b/app/helpers/watchers_helper.rb @@ -42,7 +42,28 @@ module WatchersHelper :object_id => (objects.size == 1 ? objects.first.id : objects.map(&:id).sort) ) method = watched ? 'delete' : 'post' - + + link_to text, url, :remote => true, :method => method, :class => css + end + + def watcher_link_issue(objects, user, options=[]) + return '' unless user && user.logged? + objects = Array.wrap(objects) + + watched = objects.any? {|object| object.watched_by?(user)} + @watch_flag = (objects.first.instance_of?(User) or objects.first.instance_of?(Project) or objects.first.instance_of?(Contest) or (objects.first.instance_of?(Bid))) + css = @watch_flag ? ([watcher_css(objects), watched ? 'talk_edit ' : 'talk_edit '].join(' ') << options[0].to_s) : + ([watcher_css(objects), watched ? 'talk_edit fr ' : 'talk_edit fr '].join(' ') << options[0].to_s) + + text = @watch_flag ? + (watched ? l(:button_unfollow) : l(:button_follow)) : (watched ? l(:button_unwatch) : l(:button_watch)) + + url = watch_path( + :object_type => objects.first.class.to_s.underscore, + :object_id => (objects.size == 1 ? objects.first.id : objects.map(&:id).sort) + ) + method = watched ? 'delete' : 'post' + link_to text, url, :remote => true, :method => method, :class => css end diff --git a/app/views/issues/_action_menu.html.erb b/app/views/issues/_action_menu.html.erb index 231116f2f..959ab52c1 100644 --- a/app/views/issues/_action_menu.html.erb +++ b/app/views/issues/_action_menu.html.erb @@ -1,6 +1,6 @@ -<%#= watcher_link(@issue, User.current) %> +<%= watcher_link_issue(@issue, User.current) %> <%#= link_to l(:button_copy), project_copy_issue_path(@project, @issue), :class => 'icon icon-copy' if User.current.allowed_to?(:add_issues, @project) %> <%= link_to l(:button_delete), issue_path(@issue.id), :data => {:confirm => issues_destroy_confirmation_message(@issue)}, :method => :delete, :class => 'talk_edit fr' if User.current.allowed_to?(:delete_issues, @project) %> diff --git a/app/views/issues/_history.html.erb b/app/views/issues/_history.html.erb index e1e2de6a3..d9f9105ac 100644 --- a/app/views/issues/_history.html.erb +++ b/app/views/issues/_history.html.erb @@ -17,24 +17,17 @@ <% end %>

    +
    <%= render_links(issue, journal, :reply_links => reply_links) unless journal.notes.blank? %>
    + +

    <%= render_notes_issue(issue, journal, :reply_links => reply_links) unless journal.notes.blank? %>

    -
    -
    -
    -

    <%= render_notes(issue, journal, :reply_links => reply_links) unless journal.notes.blank? %>

    - <%= format_time journal.created_on %> -
    -
    -
    -
    - -<%= call_hook(:view_issues_history_journal_bottom, { :journal => journal }) %> + <%= call_hook(:view_issues_history_journal_bottom, { :journal => journal }) %> <% end %> <% heads_for_wiki_formatter if User.current.allowed_to?(:edit_issue_notes, issue.project) || User.current.allowed_to?(:edit_own_issue_notes, issue.project) %> diff --git a/app/views/issues/show.html.erb b/app/views/issues/show.html.erb index 349f8ebc7..d905de48c 100644 --- a/app/views/issues/show.html.erb +++ b/app/views/issues/show.html.erb @@ -12,7 +12,7 @@ <%= link_to image_tag(url_to_avatar(@issue.author),:width => 46,:height => 46), user_path(@issue.author), :class => "ping_dispic" %>
    -

    +

    <%= @issue.subject %><%= get_issue_typevalue(@issue.tracker_id) %>


    <%= @issue.author %> @@ -24,7 +24,7 @@

    'action_menu' %>
    -
    +
    <% if @issue.description? || @issue.attachments.any? -%> <% if @issue.description? %> <%#= link_to l(:button_quote), quoted_issue_path(@issue.id), :remote => true, :method => 'post', :class => 'icon icon-comment' if authorize_for('issues', 'edit') %> @@ -90,81 +90,22 @@ <%= link_to l(:button_quote), quoted_issue_path(@issue.id), :remote => true, :method => 'post', :class => 'talk_edit fr' if authorize_for('issues', 'edit') %>
    + <% if @journals.present? %>
    -

    <%=l(:label_history)%>

    <%= render :partial => 'history', :locals => { :issue => @issue, :journals => @journals } %>
    <% end %> -
    -<%# html_title "#{@issue.tracker.name} ##{@issue.id}: #{@issue.subject}" %> - - - - - <%#·= link_to_if @prev_issue_id, -# "\xc2\xab #{l(:label_previous)}", -# (@prev_issue_id ? issue_path(Issue.find_by_id(@prev_issue_id)) : nil), - :title => "##{@prev_issue_id}" %> | - - - - <%#= link_to_if @next_issue_id, -# "#{l(:label_next)} \xc2\xbb", -# (@next_issue_id ? issue_path(Issue.find_by_id(@next_issue_id)) : nil), - :title => "##{@next_issue_id}" %> - - - - - - - - - - - <%#= authoring @issue.created_on, @issue.author %>. - - <%#= l(:label_updated_time, time_tag(@issue.updated_on)).html_safe %>. - - - - - - - - - - - - - - - - - - - - - - - - - - - - + <% if @changesets.present? %> -
    -

    <%=l(:label_associated_revisions)%>

    -<%= render :partial => 'changesets', :locals => { :changesets => @changesets} %> -
    +
    +

    <%=l(:label_associated_revisions)%>

    + <%= render :partial => 'changesets', :locals => { :changesets => @changesets} %> +
    <% end %> - - - + From 4d0a9bd35c87e28472edfb8c5c930556841b3027 Mon Sep 17 00:00:00 2001 From: huang Date: Wed, 15 Apr 2015 15:30:33 +0800 Subject: [PATCH 058/285] =?UTF-8?q?=E9=83=A8=E5=88=86=E6=8F=8F=E8=BF=B0?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=BC=BA=E5=88=B6=E6=8D=A2=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/issues/_list.html.erb | 2 +- app/views/projects/show.html.erb | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/app/views/issues/_list.html.erb b/app/views/issues/_list.html.erb index 889a37cbd..9a918bb5f 100644 --- a/app/views/issues/_list.html.erb +++ b/app/views/issues/_list.html.erb @@ -11,7 +11,7 @@
    <%= link_to issue.author.name, user_path(issue.author), :class => "problem_name c_orange fl" %> <%= l(:label_post_on_issue) %>(<%= "#{raw column_content[2]}" %>): - <%=link_to "#{column_content[4]}#{get_issue_typevalue(column_content[1])}".html_safe, issue_path(issue.id), :class => "problem_tit02 fl" %> + <%=link_to "#{column_content[4]}#{get_issue_typevalue(column_content[1])}".html_safe, issue_path(issue.id), :class => "problem_tit02 fl break_word" %>

    <% unless issue.assigned_to_id.nil? %> diff --git a/app/views/projects/show.html.erb b/app/views/projects/show.html.erb index 956a725be..b45621850 100644 --- a/app/views/projects/show.html.erb +++ b/app/views/projects/show.html.erb @@ -34,7 +34,7 @@ :id => act.id}, :class => "problem_tit fl fb " %>
    -

    <%= textAreailizable act,:description %>
    +

    <%= textAreailizable act,:description %>
    <%= l :label_activity_time %> :<%= format_activity_day(act.created_on) %> <%= format_time(act.created_on, false) %>

    @@ -51,7 +51,7 @@ <%= link_to format_activity_title("#{act.issue.tracker} ##{act.issue.project_issues_index}: #{act.issue.subject}"), {:controller => 'issues', :action => 'show', :id => act.issue.id, :anchor => "change-#{act.id}"}, :class => "problem_tit fl fb" %>
    -

    <%= textAreailizable act,:notes %>
    +

    <%= textAreailizable act,:notes %>
    <%= l :label_activity_time %> :<%= format_activity_day(act.created_on) %> <%= format_time(act.created_on, false) %>

    @@ -71,7 +71,7 @@ :board_id => act.board_id}.merge(act.parent_id.nil? ? {:id => act.id} : {:id => act.parent_id, :r => act.id, :anchor => "message-#{act.id}"}), :class => "problem_tit fl fb " %>
    -

    <%= textAreailizable act,:content %>
    +

    <%= textAreailizable act,:content %>
    <%= l :label_create_time %> :<%= format_activity_day(act.created_on) %> <%= format_time(act.created_on, false) %>

    @@ -89,7 +89,7 @@ <%= link_to format_activity_title("#{l(:label_news)}: #{act.title}"), {:controller => 'news', :action => 'show', :id => act.id}, :class => "problem_tit fl fb " %> <% end %>
    -

    <%= textAreailizable act,:description %>
    +

    <%= textAreailizable act,:description %>
    <%= l :label_create_time %> :<%= format_activity_day(act.created_on) %> <%= format_time(act.created_on, false) %>

    @@ -104,7 +104,7 @@ <%= link_to h(e.user), user_path(e.user_id), :class => "problem_name c_orange fl" %> <%= l(:label_new_activity) %> : <%= link_to format_activity_title("#{l(:label_document)}: #{act.title}"), {:controller => 'documents', :action => 'show', :id => act.id}, :class => "problem_tit fl fb" %>
    -

    <%= textAreailizable act,:description %>
    +

    <%= textAreailizable act,:description %>
    <%= l :label_create_time %> :<%= format_activity_day(act.created_on) %> <%= format_time(act.created_on, false) %>

    @@ -118,7 +118,7 @@ <%= h(e.project) if @project.nil? || @project.id != e.project_id %> <%= link_to h(e.user), user_path(e.user_id), :class => "problem_name c_orange fl" %> <%= l(:label_new_activity) %> : <%= link_to format_activity_title("#{l(:label_attachment)}: #{act.filename}"), {:controller => 'attachments', :action => 'show', :id => act.id}, :class => "problem_tit fl fb" %>
    -

    <%= textAreailizable act,:description %>
    +

    <%= textAreailizable act,:description %>
    <%= l :label_create_time %> :<%= format_activity_day(act.created_on) %> <%= format_time(act.created_on, false) %>

    From ba0535e127562bc2e74c7124a61ba056c5332a8c Mon Sep 17 00:00:00 2001 From: whimlex Date: Wed, 15 Apr 2015 16:34:34 +0800 Subject: [PATCH 059/285] =?UTF-8?q?=E5=AE=8C=E6=88=90=E6=96=B0=E5=BB=BA?= =?UTF-8?q?=E7=BC=BA=E9=99=B7=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/application_helper.rb | 4 +- app/helpers/watchers_helper.rb | 18 ++- app/views/attachments/_form.html.erb | 91 ++++++------ app/views/issues/_attributes.html.erb | 179 +++++++++++------------ app/views/issues/_form.html.erb | 160 ++++++++++---------- app/views/issues/new.html.erb | 4 +- app/views/layouts/base_projects.html.erb | 2 +- public/javascripts/project.js | 9 +- public/stylesheets/project.css | 32 +++- 9 files changed, 267 insertions(+), 232 deletions(-) diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index ab5f0a308..f16573c16 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -1482,7 +1482,7 @@ module ApplicationHelper tags = javascript_tag( "var datepickerOptions={dateFormat: 'yy-mm-dd', firstDay: #{start_of_week}, " + "showOn: 'button', buttonImageOnly: true, buttonImage: '" + - path_to_image('/images/calendar.png') + + path_to_image('/images/public_icon.png') + "', showButtonPanel: true, showWeek: true, showOtherMonths: true, selectOtherMonths: true};") jquery_locale = l('jquery.locale', :default => current_language.to_s) unless jquery_locale == 'en' @@ -1504,7 +1504,7 @@ module ApplicationHelper tags = javascript_tag( "var datepickerOptions={dateFormat: 'yy-mm-dd',minDate: new Date(), firstDay: #{start_of_week}, " + "showOn: 'button', buttonImageOnly: true, buttonImage: '" + - path_to_image('/images/calendar.png') + + path_to_image('/images/public_icon.png') + "', showButtonPanel: true, showWeek: true, showOtherMonths: true, selectOtherMonths: true, onClose: function(dateText, inst) {TimeClose(dateText,inst);}, beforeShow : function(input){TimeBeforeShow(input);} };") jquery_locale = l('jquery.locale', :default => current_language.to_s) unless jquery_locale == 'en' diff --git a/app/helpers/watchers_helper.rb b/app/helpers/watchers_helper.rb index 6edb171c8..64e82a7e8 100644 --- a/app/helpers/watchers_helper.rb +++ b/app/helpers/watchers_helper.rb @@ -267,11 +267,23 @@ module WatchersHelper - +# 缺陷跟踪者列表复选框生成 def watchers_checkboxes(object, users, checked=nil) if users.nil? else + # tag = check_box_tag 'issue[watcher_user_ids][]', user.id, c, :id => nil + # content_tag 'label', "#{tag} #{h(user)}".html_safe, + # :id => "issue_watcher_user_ids_#{user.id}", + # :class => "floating" + users.map do |user| + c = checked.nil? ? object.watched_by?(user) : checked + s = content_tag(:ul, + content_tag(:li, "#{check_box_tag 'issue[watcher_user_ids][]', user.id, c, :id => nil } #{h link_to user.userInfo, user_path( user.id)}".html_safe, + :id=>"issue_watcher_user_ids_#{user.id}",:style=>"float: left;width: 270px;margin: 0px 20px 10px 0px; overflow: hidden; line-height:1.6em;" ), + :class => "mb10 ml80") + end.join.html_safe + # scope = users.sort # watchers = paginateHelper scope,10 # s = content_tag('ul', issue_watcher_check_box_tags_ex('issue[watcher_user_ids][]', watchers), :class => 'mb10 ml80') @@ -279,10 +291,6 @@ module WatchersHelper # link_to text, watchers_autocomplete_for_user_path(@users, parameters.merge(:q => params[:q],:format => 'js',:flag => 'ture')), :remote => true # } # s + content_tag('ul', links,:class => 'wlist', :style =>"float:left;margin-top:0px;") - users.map do |user| - c = checked.nil? ? object.watched_by?(user) : checked - end.join.html_safe - s = content_tag('ul', issue_watcher_check_box_tags_ex('issue[watcher_user_ids][]', users), :class => 'mb10 ml80') end end diff --git a/app/views/attachments/_form.html.erb b/app/views/attachments/_form.html.erb index ce78274a3..cc3fbe1a1 100644 --- a/app/views/attachments/_form.html.erb +++ b/app/views/attachments/_form.html.erb @@ -1,11 +1,12 @@ +
    <% if defined?(container) && container && container.saved_attachments %> <% container.attachments.each_with_index do |attachment, i| %> - <%= 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;") %> - <%= l(:field_is_public)%>: - <%= check_box_tag("attachments[p#{i}][is_public_checkbox]", attachment.is_public,attachment.is_public == 1 ? true : false,:class => 'is_public')%> + <%= 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;") %> + <%= l(:field_is_public) %>: + <%= check_box_tag("attachments[p#{i}][is_public_checkbox]", attachment.is_public, attachment.is_public == 1 ? true : false, :class => 'is_public') %> <%= if attachment.id.nil? #待补充代码 else @@ -17,17 +18,17 @@ <%= hidden_field_tag "attachments[p#{i}][token]", "#{attachment.token}" %> <% end %> - <% container.saved_attachments.each_with_index do |attachment, i| %> + <% container.saved_attachments.each_with_index do |attachment, i| %> - <%= 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;") %> - <%= l(:field_is_public)%>: - <%= check_box_tag("attachments[p#{i}][is_public_checkbox]", attachment.is_public,attachment.is_public == 1 ? true : false,:class => 'is_public')%> + <%= 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;") %> + <%= l(:field_is_public) %>: + <%= check_box_tag("attachments[p#{i}][is_public_checkbox]", attachment.is_public, attachment.is_public == 1 ? true : false, :class => 'is_public') %> <%= if attachment.id.nil? - #待补充代码 - else - link_to(' '.html_safe, attachment_path(attachment, :attachment_id => "p#{i}", :format => 'js'), :method => 'delete', :remote => true, :class => 'remove-upload') - end + #待补充代码 + else + link_to(' '.html_safe, attachment_path(attachment, :attachment_id => "p#{i}", :format => 'js'), :method => 'delete', :remote => true, :class => 'remove-upload') + end %> <%#= render :partial => 'tags/tag', :locals => {:obj => attachment, :object_flag => "6"} %> @@ -36,45 +37,45 @@ <% end %> <% end %> - -<% project = project %> - + + <% project = project %> + <%#= button_tag "浏览", :type=>"button", :onclick=>"CompatibleSend();" %> - <%= button_tag "文件浏览",:class => 'sub_btn', :type=>"button", :onclick=>"_file.click()",:onmouseover => 'this.focus()', :style => ie8? ? 'display:none' : '' %> + <%= button_tag "文件浏览", :class => 'sub_btn', :type => "button", :onclick => "_file.click()", :onmouseover => 'this.focus()', :style => ie8? ? 'display:none' : '' %> <%= file_field_tag 'attachments[dummy][file]', - :id => '_file', - :class => 'file_selector', - :multiple => true, - :onchange => 'addInputFiles(this);', - :style => ie8? ? '' : 'display:none', - :data => { - :max_file_size => Setting.attachment_max_size.to_i.kilobytes, - :max_file_size_message => l(:error_attachment_too_big, :max_size => number_to_human_size(Setting.attachment_max_size.to_i.kilobytes)), - :max_concurrent_uploads => Redmine::Configuration['max_concurrent_ajax_uploads'].to_i, - :upload_path => uploads_path(:format => 'js',:project =>project), - :description_placeholder => l(:label_optional_description), - :field_is_public => l(:field_is_public), - :are_you_sure => l(:text_are_you_sure), - :file_count => l(:label_file_count), - :delete_all_files => l(:text_are_you_sure_all) - } %> + :id => '_file', + :class => 'file_selector', + :multiple => true, + :onchange => 'addInputFiles(this);', + :style => ie8? ? '' : 'display:none', + :data => { + :max_file_size => Setting.attachment_max_size.to_i.kilobytes, + :max_file_size_message => l(:error_attachment_too_big, :max_size => number_to_human_size(Setting.attachment_max_size.to_i.kilobytes)), + :max_concurrent_uploads => Redmine::Configuration['max_concurrent_ajax_uploads'].to_i, + :upload_path => uploads_path(:format => 'js', :project => project), + :description_placeholder => l(:label_optional_description), + :field_is_public => l(:field_is_public), + :are_you_sure => l(:text_are_you_sure), + :file_count => l(:label_file_count), + :delete_all_files => l(:text_are_you_sure_all) + } %> - <%= l(:label_no_file_uploaded)%> + <%= l(:label_no_file_uploaded) %> (<%= l(:label_max_size) %>: <%= number_to_human_size(Setting.attachment_max_size.to_i.kilobytes) %>) -<% content_for :header_tags do %> - <%= javascript_include_tag 'attachments' %> -<% end %> - + <% content_for :header_tags do %> + <%= javascript_include_tag 'attachments' %> + <% end %> +
    diff --git a/app/views/issues/_attributes.html.erb b/app/views/issues/_attributes.html.erb index 177e5abf0..8819c1e49 100644 --- a/app/views/issues/_attributes.html.erb +++ b/app/views/issues/_attributes.html.erb @@ -1,53 +1,53 @@ <%= labelled_fields_for :issue, @issue do |f| %>
    -
    - <%= l(:label_change_properties) %> -
      +
      + <%= l(:label_change_properties) %> +
      • <% if @issue.safe_attribute?('status_id') && @allowed_statuses.present? %> <%= f.select :status_id, - (@allowed_statuses.collect {|p| [p.name, p.id]}), - { :onchange => "updateIssueFrom('#{escape_javascript project_issue_form_path(@project, :id => @issue, :format => 'js')}')" , :no_label => true}, - :class => "w150" %> + (@allowed_statuses.collect { |p| [p.name, p.id] }), + {:onchange => "updateIssueFrom('#{escape_javascript project_issue_form_path(@project, :id => @issue, :format => 'js')}')", :no_label => true}, + :class => "w150" %> <% else %> <%= h(@issue.status.name) %> <% end %>
      • - + <% if @issue.safe_attribute? 'priority_id' %> <%= f.select :priority_id, - (@priorities.collect {|p| [p.name, p.id]}), - {:required => true, :no_label => true}, :disabled => !@issue.leaf?, - :class => "w150" %> + (@priorities.collect { |p| [p.name, p.id] }), + {:required => true, :no_label => true}, :disabled => !@issue.leaf?, + :class => "w150" %> <% end %>
      • - + <% if @issue.safe_attribute? 'assigned_to_id' %> - <%= f.select :assigned_to_id, principals_options_for_select(@issue.assignable_users, @issue.assigned_to), - {:required => @issue.required_attribute?('assigned_to_id'), :no_label => true} , - :class => "w150" %> + <%= f.select :assigned_to_id, principals_options_for_select(@issue.assignable_users, @issue.assigned_to), + {:required => @issue.required_attribute?('assigned_to_id'), :no_label => true}, + :class => "w150" %> <% end %>
      • - + <% if @issue.safe_attribute?('fixed_version_id') && @issue.assignable_versions.any? %> <%= f.select :fixed_version_id, version_options_for_select(@issue.assignable_versions, @issue.fixed_version), - {:include_blank => true, :required => @issue.required_attribute?('fixed_version_id'), :no_label => true}, - :class => "w150" %> - <%#= link_to(image_tag('add.png', :style => 'vertical-align: middle;'), + {:include_blank => true, :required => @issue.required_attribute?('fixed_version_id'), :no_label => true}, + :class => "w150" %> + <%#= link_to(image_tag('add.png', :style => 'vertical-align: middle;'), new_project_version_path(@issue.project), :remote => true, :method => 'get', :title => l(:label_version_new), :tabindex => 200) if User.current.allowed_to?(:manage_versions, @issue.project) %> - + <% end %>
      • @@ -55,44 +55,44 @@
      • - + <% if @issue.safe_attribute? 'start_date' %> <%= f.text_field :start_date, :size => 22, :disabled => !@issue.leaf?, - :no_label=> true, + :no_label => true, :required => @issue.required_attribute?('start_date') %> - <%= calendar_for('issue_start_date','start_date') if @issue.leaf? %> - <% end %> + <%= calendar_for('issue_start_date', 'start_date') if @issue.leaf? %> + <% end %>
      • - + <% if @issue.safe_attribute? 'due_date' %> <%= f.text_field :due_date, :size => 22, :disabled => !@issue.leaf?, - :no_label=> true, + :no_label => true, :required => @issue.required_attribute?('due_date') %> - <%= calendar_for('issue_due_date','start_date') if @issue.leaf? %> - <% end %> + <%= calendar_for('issue_due_date', 'start_date') if @issue.leaf? %> + <% end %>
      • - + <% if @issue.safe_attribute? 'estimated_hours' %> <%= f.text_field :estimated_hours, :size => 22, :disabled => !@issue.leaf?, - :no_label=> true, + :no_label => true, :required => @issue.required_attribute?('estimated_hours') %> <%= l(:field_hours) %> <% end %>
      • -
      • +
      • <% if @issue.safe_attribute?('done_ratio') && @issue.leaf? && Issue.use_field_for_done_ratio? %> - <%= f.select :done_ratio, ((0..10).to_a.collect {|r| ["#{r*10} %", r*10] }), - {:required => @issue.required_attribute?('done_ratio'), :no_label=> true ,:onchange => "PrecentChange(this.value)"}, - :class => "w150" %> + <%= f.select :done_ratio, ((0..10).to_a.collect { |r| ["#{r*10} %", r*10] }), + {:required => @issue.required_attribute?('done_ratio'), :no_label => true, :onchange => "PrecentChange(this.value)"}, + :class => "w150" %> <% end %>
      • @@ -100,68 +100,65 @@
    - + function SetMinValue() { + /// var tempdata=$("#issue_start_date").attr("value"); + //$('.selector').datepicker('option', 'minDate', '12/25/2012'); + //alert(tempdata); + //$("#issue_due_date").datepicker({ + // minDate: new Date(2014,08,23) + //var datepickerOptions= + //{dateFormat: 'yy-mm-dd',minDate: new Date(2014,08,23), showOn: 'button', buttonImageOnly: true, buttonImage: "path_to_image('/images/calendar.png')", showButtonPanel: true, showWeek: true, showOtherMonths: true, selectOtherMonths: true}; + //alert( $('.issue_due_date').length); + //$('.selector')[1].datepicker('option', 'minDate', new Date(2014, 0 - 8, 23)); + //$("#issue_due_date").datepicker(datepickerOptions); + //$("##{issue_due_date}").datepicker(datepickerOptions); + //$("#issue_due_date").datepicker( + // {dateFormat: 'yy-mm-dd',minDate: new Date(2014,08,23), showOn: 'button', buttonImageOnly: true, buttonImage: "path_to_image('/images/calendar.png')", showButtonPanel: true, showWeek: true, showOtherMonths: true, selectOtherMonths: true} + //) + //}); + } + function PrecentChange(obj) { + var _v = obj; + if (_v == 100) { + //var select=$("select[id='issue_status_id']"); + $("select[id='issue_status_id']").find("option[value='3']").attr("selected", "selected"); + } + else if (_v == 0) { + //alert(1); + $("select[id='issue_status_id']").find("option[value='1']").attr("selected", "selected"); + } + else if (_v != 100 && _v != 0) { + // alert(2); + $("select[id='issue_status_id']").find("option[value='2']").attr("selected", "selected"); + } + } + -<% if @issue.safe_attribute? 'custom_field_values' %> -<%= render :partial => 'issues/form_custom_fields' %> -<% end %> + <% if @issue.safe_attribute? 'custom_field_values' %> + <%= render :partial => 'issues/form_custom_fields' %> + <% end %> <% end %> diff --git a/app/views/issues/_form.html.erb b/app/views/issues/_form.html.erb index dfee1b1b4..022d77f28 100644 --- a/app/views/issues/_form.html.erb +++ b/app/views/issues/_form.html.erb @@ -1,80 +1,75 @@ - - - -
    - <%= labelled_fields_for :issue, @issue do |f| %> - <%= call_hook(:view_issues_form_details_top, { :issue => @issue, :form => f }) %> -
      -
    • - <% if @issue.safe_attribute? 'tracker_id' %> - - <%= f.select :tracker_id, - @issue.project.trackers.collect {|t| [t.name, t.id]}, - {:required => true, :no_label => true}, - :onchange => "updateIssueFrom('#{escape_javascript project_issue_form_path(@project, :id => @issue, :format => 'js')}')", - :class=> "w150" - %> - <% end %> -
    • -
    • - <% if @issue.safe_attribute? 'is_private' %> - <%= f.check_box :is_private, :no_label => true ,:class=> "ml30"%> - <% end %> -
    • -
      - - - <%#= f.select :project_id, project_tree_options_for_select(@issue.allowed_target_projects, :selected => @issue.project), {:required => true}, +<%= labelled_fields_for :issue, @issue do |f| %> + <%= call_hook(:view_issues_form_details_top, {:issue => @issue, :form => f}) %> +
      +
        +
      • + <% if @issue.safe_attribute? 'tracker_id' %> + + <%= f.select :tracker_id, + @issue.project.trackers.collect { |t| [t.name, t.id] }, + {:required => true, :no_label => true}, + :onchange => "updateIssueFrom('#{escape_javascript project_issue_form_path(@project, :id => @issue, :format => 'js')}')", + :class => "w150" + %> + <% end %> +
      • +
      • + <% if @issue.safe_attribute? 'is_private' %> + <%= f.check_box :is_private, :no_label => true, :class => "ml30" %> + + <% end %> +
      • +
        + + + <%#= f.select :project_id, project_tree_options_for_select(@issue.allowed_target_projects, :selected => @issue.project), {:required => true}, :onchange => "updateIssueFrom('#{escape_javascript project_issue_form_path(@project, :id => @issue, :format => 'js')}')" %> - - -
      • - <% if @issue.safe_attribute? 'subject' %> - - <%= f.text_field :subject, - :class => "w583", - :maxlength => 255, - :required => true, - :style => "font-size:small", - :no_label => true - %> - - <%= javascript_tag do %> - observeAutocompleteField('issue_subject', '<%= escape_javascript auto_complete_issues_path(:project_id => @project,:scope => (Setting.cross_project_issue_relations? ? 'all' : nil)) %>', - { select: function(event, ui) { - $('input#issue_subject').val(ui.item.value); - } - }); - <% end %> + + +
      • + <% if @issue.safe_attribute? 'subject' %> + + <%= f.text_field :subject, + :class => "w583", + :maxlength => 255, + :required => true, + :style => "font-size:small", + :no_label => true + %> + + <%= javascript_tag do %> + observeAutocompleteField('issue_subject', + '<%= escape_javascript auto_complete_issues_path(:project_id => @project, :scope => (Setting.cross_project_issue_relations? ? 'all' : nil)) %> + ', + { select: function(event, ui) { + $('input#issue_subject').val(ui.item.value); + } + }); + <% end %> - <% end %> -
      • -
        + <% end %> + +
        -
      • - <% if @issue.safe_attribute? 'description' %> - - <%= f.label_for_field :description, :required => @issue.required_attribute?('description'), :no_label=>true , :class=> "label" %> - <%= link_to_function image_tag('edit.png'), '$(this).hide(); $("#issue_description_and_toolbar").show()' unless @issue.new_record? %> - <%= content_tag 'span', :id => "issue_description_and_toolbar", :style => (@issue.new_record? ? nil : 'display:none') do %> - <%= f.text_area :description, - :rows => (@issue.description.blank? ? 10 : [[10, @issue.description.length / 50].max, 100].min), - :accesskey => accesskey(:edit), - :class => "w583", - :no_label => true %> - <% end %> +
      • + <% if @issue.safe_attribute? 'description' %> + + <%= f.label_for_field :description, :required => @issue.required_attribute?('description'), :no_label => true, :class => "label" %> + <%= link_to_function image_tag('edit.png'), '$(this).hide(); $("#issue_description_and_toolbar").show()' unless @issue.new_record? %> + <%= content_tag 'span', :id => "issue_description_and_toolbar", :style => (@issue.new_record? ? nil : 'display:none') do %> + <%= f.text_area :description, + :rows => (@issue.description.blank? ? 10 : [[10, @issue.description.length / 50].max, 100].min), + :accesskey => accesskey(:edit), + :class => "w583", + :no_label => true %> + <% end %> - <%= wikitoolbar_for 'issue_description' %> - <% end %> -
      • -
        + <%= wikitoolbar_for 'issue_description' %> + <% end %> + +
        +
      +
    • <% if @copy_from && @copy_from.attachments.any? %>

      @@ -92,15 +87,14 @@

    • - +
      + <%= render :partial => 'attachments/form', :locals => {:container => @issue} %> -
    • +
    • -
    - -
    - <%= render :partial => 'issues/attributes' %> -
    -
    -<%= call_hook(:view_issues_form_details_bottom, { :issue => @issue, :form => f }) %> -<% end %> +
    +
    + <%= render :partial => 'issues/attributes' %> +
    + <%= call_hook(:view_issues_form_details_bottom, {:issue => @issue, :form => f}) %> +<% end %> \ No newline at end of file diff --git a/app/views/issues/new.html.erb b/app/views/issues/new.html.erb index 3ae8cd368..6846e9e53 100644 --- a/app/views/issues/new.html.erb +++ b/app/views/issues/new.html.erb @@ -7,14 +7,14 @@ :html => {:id => 'issue-form', :multipart => true} do |f| %> <%= error_messages_for 'issue' %> <%= hidden_field_tag 'copy_from', params[:copy_from] if params[:copy_from] %> -
    +
    <%= render :partial => 'issues/form', :locals => {:f => f} %>
    <% if @issue.safe_attribute? 'watcher_user_ids' -%>
    - + <%= link_to "", {:controller => 'watchers', :action => 'new', :project_id => @issue.project}, diff --git a/app/views/layouts/base_projects.html.erb b/app/views/layouts/base_projects.html.erb index 30dad5ff7..ac63fdaa8 100644 --- a/app/views/layouts/base_projects.html.erb +++ b/app/views/layouts/base_projects.html.erb @@ -12,7 +12,7 @@ <%= favicon %> <%= javascript_heads %> <%= heads_for_theme %> - <%= stylesheet_link_tag 'public', 'pleft', 'project' %> + <%= stylesheet_link_tag 'public', 'pleft', 'project','jquery/jquery-ui-1.9.2' %> <%= javascript_include_tag 'project', 'header' %> <%= call_hook :view_layouts_base_html_head %> diff --git a/public/javascripts/project.js b/public/javascripts/project.js index 424aeb7cc..1f3117a06 100644 --- a/public/javascripts/project.js +++ b/public/javascripts/project.js @@ -194,4 +194,11 @@ function refusal_applied_member() function news_show_more_des(id) { $('#news_description_' + id).toggleClass("news_description_none"); -} \ No newline at end of file +} + +$(document).ready(function(){ + $("#issue_project_id").css("width","100%"); + $("#issue_project_id").css("overflow ","hidden"); +// $(".jstEditor").css("margin-left ","80px"); + //issue_project_id +}); diff --git a/public/stylesheets/project.css b/public/stylesheets/project.css index e2859c9ae..3645269bc 100644 --- a/public/stylesheets/project.css +++ b/public/stylesheets/project.css @@ -226,7 +226,13 @@ blockquote {background: #eeeeee;padding: 10px;margin-bottom: 10px;} .reply_btn{ cursor:pointer; -moz-border-radius:3px; -webkit-border-radius:3px; border:1px solid #ccc; color:#999; border-radius:3px; padding:2px 10px; margin-bottom:10px;display: block;margin-left: 470px;} .reply_btn:hover{ background:#999; color:#fff; } -#attachments_fields input.description {margin-left: 4px;width: 100px;} +#attachments_fields input.description {margin-left:4px; width:100px; } +#attachments_fields span .boldSpan{display:block; white-space:nowrap; font-family:'微软雅黑';} +#attachments_fields div.ui-progressbar { width: 100px; height:14px; margin: 2px 0 -5px 8px; display: inline-block; } +a.remove-upload:hover {text-decoration:none !important;} +#attachments_fields input.is_public_checkbox {width:20px;} + + #attachments_fields span.ispublic-label {display: inline-block;width: 30px;margin-left: 10px;} a.remove-upload {background: url(../images/delete.png) no-repeat 1px 50%;width: 1px;display: inline-block;padding-left: 16px;} #attachments_fields input.filename {border: 0;height: 1.8em;width: 150px;color: #555;background-color: inherit;background: url(../images/attachment.png) no-repeat 1px 50%;padding-left: 18px;padding-top: 2px;} @@ -238,7 +244,7 @@ span.add_attachment {font-size: 80%;line-height: 2.5em;} .reply_btn{ cursor:pointer; -moz-border-radius:3px; -webkit-border-radius:3px; border:1px solid #ccc; color:#999; border-radius:3px; padding:2px 10px; margin-bottom:10px;display: block;margin-left: 470px;} .reply_btn:hover{ background:#999; color:#fff; } -#attachments_fields div.ui-progressbar { width: 100px; height:14px; margin: 2px 0 -5px 8px; display: inline-block; } + .ui-widget { font-family: Verdana, sans-serif; font-size: 1.1em; @@ -401,6 +407,28 @@ a:hover.member_btn{ background:#329cbd;} .pro_st_edit_ku{display:none; margin-top:20px;} .pro_st_edit_ku ul li{margin-bottom:10px;} /*end*/ + +/*gcm upload file count and deleteall*/ +#upload_file_count #count {color:red; font-size:1.5em;} +span.add_attachment .remove_all {background:none;background: url(../images/delete.png) no-repeat 1px 50%; width:1px; display:inline-block;right:10%;text-decoration:none;} +span.add_attachment a {padding-left:16px; background: url(../images/bullet_add.png) no-repeat 0 50%; } + + +/*日历选择图*/ +img.ui-datepicker-trigger { + display:block; + background:url(/images/public_icon.png) -31px 0 no-repeat; + cursor: pointer; + vertical-align: middle; + margin-left: 5px; + margin-top: 5px; + width:16px; + height:15px; + float:left; +} + + + /*用户反馈*/ .msg_box{ width:670px; height:173px; border-bottom:1px dashed #CCC; padding-top:10px;} .msg_box h4{ } From 104075b3fd274d43633566ad3598638bc1cf5ab6 Mon Sep 17 00:00:00 2001 From: huang Date: Wed, 15 Apr 2015 16:38:39 +0800 Subject: [PATCH 060/285] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=BC=BA=E9=99=B7?= =?UTF-8?q?=E7=95=99=E8=A8=80=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/issues/_action_menu.html.erb | 1 - app/views/issues/_edit.html.erb | 67 +++++++++++++++----------- app/views/issues/show.html.erb | 20 +++----- config/locales/projects/zh.yml | 2 +- 4 files changed, 48 insertions(+), 42 deletions(-) diff --git a/app/views/issues/_action_menu.html.erb b/app/views/issues/_action_menu.html.erb index 959ab52c1..52e487f08 100644 --- a/app/views/issues/_action_menu.html.erb +++ b/app/views/issues/_action_menu.html.erb @@ -1,5 +1,4 @@ - <%= watcher_link_issue(@issue, User.current) %> <%#= link_to l(:button_copy), project_copy_issue_path(@project, @issue), :class => 'icon icon-copy' if User.current.allowed_to?(:add_issues, @project) %> <%= link_to l(:button_delete), issue_path(@issue.id), :data => {:confirm => issues_destroy_confirmation_message(@issue)}, :method => :delete, :class => 'talk_edit fr' if User.current.allowed_to?(:delete_issues, @project) %> diff --git a/app/views/issues/_edit.html.erb b/app/views/issues/_edit.html.erb index bc5c8596a..ea2e3e5de 100644 --- a/app/views/issues/_edit.html.erb +++ b/app/views/issues/_edit.html.erb @@ -1,47 +1,58 @@ <%= labelled_form_for @issue, :html => {:id => 'issue-form', :multipart => true} do |f| %> <%= error_messages_for 'issue', 'time_entry' %> <%= render :partial => 'conflict' if @conflict %> + <% if @edit_allowed || !@allowed_statuses.empty? %>
    - <%= render :partial => 'form', :locals => {:f => f} %> - <% end %> + <%= render :partial => 'form', :locals => {:f => f} %> +
    + <% end %> -
    <%= l(:field_notes) %> - <%= f.text_area :notes, :cols => 60, :rows => 10, :class => 'wiki-edit', :no_label => true %> - <%= wikitoolbar_for 'issue_notes' %> - - <% if @issue.safe_attribute? 'private_notes' %> - + + + <% if @journals.present? %> +
    + <%= render :partial => 'history', :locals => { :issue => @issue, :journals => @journals } %> +
    <% end %> + <%= f.text_area :notes, :style =>"width:99%;", :rows => "5", :no_label => true %> + + + + <%= call_hook(:view_issues_edit_notes_bottom, { :issue => @issue, :notes => @notes, :form => f }) %> -
    + -
    <%= l(:label_attachment_plural) %> -

    <%= render :partial => 'attachments/form', :locals => {:container => @issue} %>

    -
    + +

    <%= render :partial => 'attachments/form', :locals => {:container => @issue} %> + -

    -

    - - - <%= watchers_checkboxes(@issue, @available_watchers) %> - - - <%= link_to l(:label_search_for_watchers), - {:controller => 'watchers', :action => 'new', :project_id => @issue.project}, - :remote => true, + + + + + + + + <%#= link_to l(:label_search_for_watchers), +# {:controller => 'watchers', :action => 'new', :project_id => @issue.project}, +# :remote => true, :method => 'get' %> - -

    -
    -
    + + + + <%= f.hidden_field :lock_version %> <%= hidden_field_tag 'last_journal_id', params[:last_journal_id] || @issue.last_journal_id %> <%= hidden_field_tag 'reference_user_id', params[:reference_user_id]%> - <%= submit_tag l(:button_submit) %> - <%= preview_link preview_edit_issue_path(:project_id => @project, :id => @issue), 'issue-form' %> + + <%= l(:button_submit) %> + +

    + <%#= submit_tag l(:button_submit) %> + <%#= preview_link preview_edit_issue_path(:project_id => @project, :id => @issue), 'issue-form' %> <% end %>
    diff --git a/app/views/issues/show.html.erb b/app/views/issues/show.html.erb index d905de48c..56c4f0815 100644 --- a/app/views/issues/show.html.erb +++ b/app/views/issues/show.html.erb @@ -90,13 +90,14 @@ <%= link_to l(:button_quote), quoted_issue_path(@issue.id), :remote => true, :method => 'post', :class => 'talk_edit fr' if authorize_for('issues', 'edit') %>
    - +
    + <% if @issue.editable? %> +
    + <%= render :partial => 'edit' %> +
    + <% end %> - <% if @journals.present? %> -
    - <%= render :partial => 'history', :locals => { :issue => @issue, :journals => @journals } %> -
    -<% end %> +
    <% if @changesets.present? %> @@ -109,12 +110,7 @@ -
    -<% if @issue.editable? %> -
    - <%= render :partial => 'edit' %> -
    -<% end %> + <% other_formats_links do |f| %> <%= f.link_to 'Atom', :url => {:key => User.current.rss_key} %> diff --git a/config/locales/projects/zh.yml b/config/locales/projects/zh.yml index e15c4dcdb..e278cb091 100644 --- a/config/locales/projects/zh.yml +++ b/config/locales/projects/zh.yml @@ -69,7 +69,7 @@ zh: project_module_boards: 讨论区 - project_module_boards_post: 发帖新帖 + project_module_boards_post: 发布新帖 project_module_files: 资源库 project_module_repository: 版本库 project_module_create_repository: 创建版本库 From a10ced61ec9c35e2ab168a6ef136ffb377545867 Mon Sep 17 00:00:00 2001 From: whimlex Date: Wed, 15 Apr 2015 17:06:40 +0800 Subject: [PATCH 061/285] =?UTF-8?q?=E7=BC=BA=E9=99=B7=E8=B7=9F=E8=B8=AA?= =?UTF-8?q?=E8=80=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/issues/_form.html.erb | 33 +++++++++++++++++++++++++++++++++ app/views/issues/new.html.erb | 33 +-------------------------------- 2 files changed, 34 insertions(+), 32 deletions(-) diff --git a/app/views/issues/_form.html.erb b/app/views/issues/_form.html.erb index 022d77f28..230fad3c8 100644 --- a/app/views/issues/_form.html.erb +++ b/app/views/issues/_form.html.erb @@ -96,5 +96,38 @@
    <%= render :partial => 'issues/attributes' %>
    +
    + <% if @issue.safe_attribute? 'watcher_user_ids' -%> +
    + + + + <%= link_to "", + {:controller => 'watchers', :action => 'new', :project_id => @issue.project}, + :remote => true, + :method => 'get', + :class=>"pic_sch mt5 ml5" %> + +
    + <%= javascript_tag "observeSearchfield('user_search', 'users_for_watcher', '#{ escape_javascript watchers_autocomplete_for_user_path(:user=> @available_watchers, :format => 'js',:flag => 'ture') }')" %> +
    + + <%= watchers_checkboxes(@issue, @available_watchers) %> + +
    +
    + +
    +
    + + +
    + <% end %> + + <%= l(:button_create)%> + + <%= preview_link preview_new_issue_path(:project_id => @project), 'issue-form','preview',{:class => "blue_btn fl ml10"}%> +
    + <%= call_hook(:view_issues_form_details_bottom, {:issue => @issue, :form => f}) %> <% end %> \ No newline at end of file diff --git a/app/views/issues/new.html.erb b/app/views/issues/new.html.erb index 6846e9e53..5befcfccc 100644 --- a/app/views/issues/new.html.erb +++ b/app/views/issues/new.html.erb @@ -10,38 +10,7 @@
    <%= render :partial => 'issues/form', :locals => {:f => f} %>
    -
    - <% if @issue.safe_attribute? 'watcher_user_ids' -%> -
    - - - - <%= link_to "", - {:controller => 'watchers', :action => 'new', :project_id => @issue.project}, - :remote => true, - :method => 'get', - :class=>"pic_sch mt5 ml5" %> - -
    - <%= javascript_tag "observeSearchfield('user_search', 'users_for_watcher', '#{ escape_javascript watchers_autocomplete_for_user_path(:user=> @available_watchers, :format => 'js',:flag => 'ture') }')" %> -
    - - <%= watchers_checkboxes(@issue, @available_watchers) %> - -
    -
    - -
    -
    - - -
    - <% end %> - - <%= l(:button_create)%> - - <%= preview_link preview_new_issue_path(:project_id => @project), 'issue-form','preview',{:class => "blue_btn fl ml10"}%> -
    + <%= javascript_tag "$('#issue_subject').focus();" %> <% end %> From 521e000c741e78943626bdd30543a2fdfeeac27a Mon Sep 17 00:00:00 2001 From: whimlex Date: Wed, 15 Apr 2015 17:17:03 +0800 Subject: [PATCH 062/285] commmit --- app/views/issues/_form.html.erb | 33 ------------------------------- app/views/issues/new.html.erb | 35 +++++++++++++++++++++++++++++++-- 2 files changed, 33 insertions(+), 35 deletions(-) diff --git a/app/views/issues/_form.html.erb b/app/views/issues/_form.html.erb index 230fad3c8..022d77f28 100644 --- a/app/views/issues/_form.html.erb +++ b/app/views/issues/_form.html.erb @@ -96,38 +96,5 @@
    <%= render :partial => 'issues/attributes' %>
    -
    - <% if @issue.safe_attribute? 'watcher_user_ids' -%> -
    - - - - <%= link_to "", - {:controller => 'watchers', :action => 'new', :project_id => @issue.project}, - :remote => true, - :method => 'get', - :class=>"pic_sch mt5 ml5" %> - -
    - <%= javascript_tag "observeSearchfield('user_search', 'users_for_watcher', '#{ escape_javascript watchers_autocomplete_for_user_path(:user=> @available_watchers, :format => 'js',:flag => 'ture') }')" %> -
    - - <%= watchers_checkboxes(@issue, @available_watchers) %> - -
    -
    - -
    -
    - - -
    - <% end %> - - <%= l(:button_create)%> - - <%= preview_link preview_new_issue_path(:project_id => @project), 'issue-form','preview',{:class => "blue_btn fl ml10"}%> -
    - <%= call_hook(:view_issues_form_details_bottom, {:issue => @issue, :form => f}) %> <% end %> \ No newline at end of file diff --git a/app/views/issues/new.html.erb b/app/views/issues/new.html.erb index 5befcfccc..c6b1e0dc8 100644 --- a/app/views/issues/new.html.erb +++ b/app/views/issues/new.html.erb @@ -10,8 +10,39 @@
    <%= render :partial => 'issues/form', :locals => {:f => f} %>
    - - <%= javascript_tag "$('#issue_subject').focus();" %> +
    + <% if @issue.safe_attribute? 'watcher_user_ids' -%> +
    + + + + <%= link_to "", + {:controller => 'watchers', :action => 'new', :project_id => @issue.project}, + :remote => true, + :method => 'get', + :class=>"pic_sch mt5 ml5" %> + +
    + <%= javascript_tag "observeSearchfield('user_search', 'users_for_watcher', '#{ escape_javascript watchers_autocomplete_for_user_path(:user=> @available_watchers, :format => 'js',:flag => 'ture') }')" %> +
    + + <%= watchers_checkboxes(@issue, @available_watchers) %> + +
    +
    + +
    +
    + + +
    + <% end %> + + <%= l(:button_create)%> + + <%= preview_link preview_new_issue_path(:project_id => @project), 'issue-form','preview',{:class => "blue_btn fl ml10"}%> +
    + <% end %>
    From 30dae089c69904c6cb0bf660f6ae0d397f31bd54 Mon Sep 17 00:00:00 2001 From: whimlex Date: Wed, 15 Apr 2015 17:28:53 +0800 Subject: [PATCH 063/285] =?UTF-8?q?=E6=96=B0=E5=BB=BA=E7=BC=BA=E9=99=B7?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E4=B8=BB=E9=A2=98=E4=B8=8D=E8=83=BD=E4=B8=BA?= =?UTF-8?q?=E7=A9=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/issues/_form.html.erb | 1 - app/views/issues/new.html.erb | 57 +++++++++++++++++---------------- 2 files changed, 29 insertions(+), 29 deletions(-) diff --git a/app/views/issues/_form.html.erb b/app/views/issues/_form.html.erb index 022d77f28..e381ece02 100644 --- a/app/views/issues/_form.html.erb +++ b/app/views/issues/_form.html.erb @@ -32,7 +32,6 @@ <%= f.text_field :subject, :class => "w583", :maxlength => 255, - :required => true, :style => "font-size:small", :no_label => true %> diff --git a/app/views/issues/new.html.erb b/app/views/issues/new.html.erb index c6b1e0dc8..5b88920df 100644 --- a/app/views/issues/new.html.erb +++ b/app/views/issues/new.html.erb @@ -4,45 +4,46 @@ <%= call_hook(:view_issues_new_top, {:issue => @issue}) %> <%= labelled_form_for @issue, :url => project_issues_path(@project), - :html => {:id => 'issue-form', :multipart => true} do |f| %> - <%= error_messages_for 'issue' %> - <%= hidden_field_tag 'copy_from', params[:copy_from] if params[:copy_from] %> -
    - <%= render :partial => 'issues/form', :locals => {:f => f} %> -
    -
    - <% if @issue.safe_attribute? 'watcher_user_ids' -%> -
    - - + :html => {:id => 'issue-form', :multipart => true} do |f| %> + <%= error_messages_for 'issue' %> + <%= hidden_field_tag 'copy_from', params[:copy_from] if params[:copy_from] %> +
    + <%= render :partial => 'issues/form', :locals => {:f => f} %> +
    +
    + <% if @issue.safe_attribute? 'watcher_user_ids' -%> +
    + + - <%= link_to "", + <%= link_to "", {:controller => 'watchers', :action => 'new', :project_id => @issue.project}, :remote => true, :method => 'get', - :class=>"pic_sch mt5 ml5" %> + :class => "pic_sch mt5 ml5" %> -
    - <%= javascript_tag "observeSearchfield('user_search', 'users_for_watcher', '#{ escape_javascript watchers_autocomplete_for_user_path(:user=> @available_watchers, :format => 'js',:flag => 'ture') }')" %> -
    +
    + <%= javascript_tag "observeSearchfield('user_search', 'users_for_watcher', '#{ escape_javascript watchers_autocomplete_for_user_path(:user => @available_watchers, :format => 'js', :flag => 'ture') }')" %> +
    <%= watchers_checkboxes(@issue, @available_watchers) %> -
    -
    -
    -
    +
    +
    - -
    - <% end %> - - <%= l(:button_create)%> - - <%= preview_link preview_new_issue_path(:project_id => @project), 'issue-form','preview',{:class => "blue_btn fl ml10"}%> -
    +
    +
    + +
    + <% end %> + + <%= l(:button_create) %> + + <%= preview_link preview_new_issue_path(:project_id => @project), 'issue-form', 'preview', {:class => "blue_btn fl ml10"} %> +
    + <% end %>
    From aff58dd3a7b2f46894578362a16b4b945864b637 Mon Sep 17 00:00:00 2001 From: huang Date: Wed, 15 Apr 2015 18:13:51 +0800 Subject: [PATCH 064/285] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=85=B3=E6=B3=A8?= =?UTF-8?q?=E8=80=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/issues/_edit.html.erb | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/app/views/issues/_edit.html.erb b/app/views/issues/_edit.html.erb index ea2e3e5de..3c20bb501 100644 --- a/app/views/issues/_edit.html.erb +++ b/app/views/issues/_edit.html.erb @@ -28,21 +28,21 @@

    <%= render :partial => 'attachments/form', :locals => {:container => @issue} %> - - - - - - - - <%#= link_to l(:label_search_for_watchers), -# {:controller => 'watchers', :action => 'new', :project_id => @issue.project}, -# :remote => true, - :method => 'get' %> - - - - +

    +

    + + + <%= watchers_checkboxes(@issue, @available_watchers) %> + + + <%= link_to l(:label_search_for_watchers), + {:controller => 'watchers', :action => 'new', :project_id => @issue.project}, + :remote => true, + :method => 'get' %> + +

    +
    + <%= f.hidden_field :lock_version %> <%= hidden_field_tag 'last_journal_id', params[:last_journal_id] || @issue.last_journal_id %> @@ -50,7 +50,7 @@ <%= l(:button_submit) %> -

    +



    <%#= submit_tag l(:button_submit) %> <%#= preview_link preview_edit_issue_path(:project_id => @project, :id => @issue), 'issue-form' %> <% end %> From 596e89a14f485c38c8aad065c3a8cd8ca9c2e924 Mon Sep 17 00:00:00 2001 From: whimlex Date: Wed, 15 Apr 2015 20:05:21 +0800 Subject: [PATCH 065/285] =?UTF-8?q?=E7=BC=BA=E9=99=B7=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/application_helper.rb | 2 +- app/views/issues/_edit.html.erb | 22 +--- app/views/issues/_form.html.erb | 18 +++ app/views/issues/new.html.erb | 3 - app/views/issues/show.html.erb | 210 ++++++++++++++++-------------- 5 files changed, 136 insertions(+), 119 deletions(-) diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index b82cb906d..54b05b012 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -728,7 +728,7 @@ module ApplicationHelper end def other_formats_links(&block) - concat('

    '.html_safe + l(:label_export_to)) + concat('

    '.html_safe + l(:label_export_to)) yield Redmine::Views::OtherFormatsBuilder.new(self) concat('

    '.html_safe) end diff --git a/app/views/issues/_edit.html.erb b/app/views/issues/_edit.html.erb index 3c20bb501..a6afea438 100644 --- a/app/views/issues/_edit.html.erb +++ b/app/views/issues/_edit.html.erb @@ -28,31 +28,15 @@

    <%= render :partial => 'attachments/form', :locals => {:container => @issue} %> -

    -

    - - - <%= watchers_checkboxes(@issue, @available_watchers) %> - - - <%= link_to l(:label_search_for_watchers), - {:controller => 'watchers', :action => 'new', :project_id => @issue.project}, - :remote => true, - :method => 'get' %> - -

    -
    - - +
    <%= f.hidden_field :lock_version %> <%= hidden_field_tag 'last_journal_id', params[:last_journal_id] || @issue.last_journal_id %> <%= hidden_field_tag 'reference_user_id', params[:reference_user_id]%> - + <%= l(:button_submit) %> -



    <%#= submit_tag l(:button_submit) %> - <%#= preview_link preview_edit_issue_path(:project_id => @project, :id => @issue), 'issue-form' %> + <%= preview_link preview_edit_issue_path(:project_id => @project, :id => @issue), 'issue-form' ,'preview',{:class => "blue_btn fl ml10"}%> <% end %>
    diff --git a/app/views/issues/_form.html.erb b/app/views/issues/_form.html.erb index e381ece02..81da316b7 100644 --- a/app/views/issues/_form.html.erb +++ b/app/views/issues/_form.html.erb @@ -95,5 +95,23 @@
    <%= render :partial => 'issues/attributes' %>
    +
    +
    + + + + <%= link_to "", + {:controller => 'watchers', :action => 'new', :project_id => @issue.project}, + :remote => true, + :method => 'get', + :class => "pic_sch mt5 ml5" %> + + <%= javascript_tag "observeSearchfield('user_search', 'users_for_watcher', '#{ escape_javascript watchers_autocomplete_for_user_path(:user => @available_watchers, :format => 'js', :flag => 'ture') }')" %> +
    + + <%= watchers_checkboxes(@issue, @available_watchers) %> + +
    +
    <%= call_hook(:view_issues_form_details_bottom, {:issue => @issue, :form => f}) %> <% end %> \ No newline at end of file diff --git a/app/views/issues/new.html.erb b/app/views/issues/new.html.erb index 5b88920df..13b0c09f0 100644 --- a/app/views/issues/new.html.erb +++ b/app/views/issues/new.html.erb @@ -31,11 +31,8 @@
    -
    - -
    <% end %> diff --git a/app/views/issues/show.html.erb b/app/views/issues/show.html.erb index 56c4f0815..9c1ce60ab 100644 --- a/app/views/issues/show.html.erb +++ b/app/views/issues/show.html.erb @@ -2,108 +2,126 @@

    <%= l(:label_issue_plural) %>

    <% html_title "#{@issue.tracker.name} #{@issue.source_from}'#'#{@issue.project_index}: #{@issue.subject}" %> -
    - -
    -
    - <%= link_to image_tag(url_to_avatar(@issue.author),:width => 46,:height => 46), user_path(@issue.author), :class => "ping_dispic" %> +
    + -
    -

    - <%= @issue.subject %><%= get_issue_typevalue(@issue.tracker_id) %>


    -
    -

    <%= @issue.author %> - <% if @issue.created_on != @issue.updated_on %> - 更新于 <%= format_time(@issue.created_on).html_safe %> - <% else %> - 添加于 <%= format_time(@issue.updated_on).html_safe %> - <% end %> -

    - 'action_menu' %> -
    -
    - <% if @issue.description? || @issue.attachments.any? -%> - <% if @issue.description? %> - <%#= link_to l(:button_quote), quoted_issue_path(@issue.id), :remote => true, :method => 'post', :class => 'icon icon-comment' if authorize_for('issues', 'edit') %> - <%= textilizable @issue, :description, :attachments => @issue.attachments %> +
    +
    + <%= link_to image_tag(url_to_avatar(@issue.author), :width => 46, :height => 46), user_path(@issue.author), :class => "ping_dispic" %> +
    +
    +

    + <%= @issue.subject %> + <%= get_issue_typevalue(@issue.tracker_id) %> +


    + +
    +

    <%= @issue.author %> + <% if @issue.created_on != @issue.updated_on %> + 更新于 <%= format_time(@issue.created_on).html_safe %> + <% else %> + 添加于 <%= format_time(@issue.updated_on).html_safe %> <% end %> -

    -
    - - - <%= link_to_attachment_project @issue, :thumbnails => true %>
    - <% end -%> - <%= call_hook(:view_issues_show_description_bottom, :issue => @issue) %> -
    -
    - -
    - <%= issue_fields_rows do |rows| %> -
      - -
    • * 状态  : 

      <%= @issue.status.name %>

      -
    • -
      -
    • * 优先级  : 

      <%= @issue.priority.name %> -
    • -
      - <% unless @issue.disabled_core_fields.include?('assigned_to_id') %> -
    •  指派给  : 

      <%= @issue.assigned_to ? link_to_isuue_user(@issue.assigned_to) : "-" %>
    • +
    + + 'action_menu' %> +
    +
    + <% if @issue.description? || @issue.attachments.any? -%> + <% if @issue.description? %> + <%#= link_to l(:button_quote), quoted_issue_path(@issue.id), :remote => true, :method => 'post', :class => 'icon icon-comment' if authorize_for('issues', 'edit') %> + <%= textilizable @issue, :description, :attachments => @issue.attachments %> <% end %> +
    +
    + + + <%= link_to_attachment_project @issue, :thumbnails => true %>
    + <% end -%> + <%= call_hook(:view_issues_show_description_bottom, :issue => @issue) %> +
    - <% unless @issue.disabled_core_fields.include?('fixed_version_id') %> -
  •  目标版本  : 

    <%= (@issue.fixed_version ? link_to_version(@issue.fixed_version, :class => "pro_info_p") : "-") %>
  • - <% end %> -
    - -
      - <% unless @issue.disabled_core_fields.include?('start_date') %> -
    •  开始日期  : 

      <%= format_date(@issue.start_date) %>

    • - <% end %> -
      - <% unless @issue.disabled_core_fields.include?('due_date') %> -
    •  计划完成日期  : 

      <%= format_date(@issue.due_date) %> -
    • - <% end %> -
      - <% unless @issue.disabled_core_fields.include?('estimated_hours') %> + +
      + <%= issue_fields_rows do |rows| %> +
        -
      •  预期时间  : 

        <%= l_hours(@issue.estimated_hours) %> -
      • +
      • * 状态  : 

        - <% end %> +

        <%= @issue.status.name %>

        +
      • +
        +
      • * 优先级  : 

        + <%= @issue.priority.name %> +
      • +
        + <% unless @issue.disabled_core_fields.include?('assigned_to_id') %> +
      •  指派给  : 

        + <%= @issue.assigned_to ? link_to_isuue_user(@issue.assigned_to) : "-" %> +
      • + <% end %> +
        + <% unless @issue.disabled_core_fields.include?('fixed_version_id') %> +
      •  目标版本  : 

        + <%= (@issue.fixed_version ? link_to_version(@issue.fixed_version, :class => "pro_info_p") : "-") %> +
      • + <% end %> +
        +
      +
        + <% unless @issue.disabled_core_fields.include?('start_date') %> +
      •  开始日期  : 

        + +

        <%= format_date(@issue.start_date) %>

      • + <% end %> +
        + <% unless @issue.disabled_core_fields.include?('due_date') %> +
      •  计划完成日期  : 

        + <%= format_date(@issue.due_date) %> +
      • + <% end %> +
        + <% unless @issue.disabled_core_fields.include?('estimated_hours') %> + +
      •  预期时间  : 

        + <%= l_hours(@issue.estimated_hours) %> +
      • + + <% end %> +
        + <% unless @issue.disabled_core_fields.include?('done_ratio') %> +
      •  % 完成  : 

        + <%= @issue.done_ratio %>% +
      • + <% end %> +
        +
      + <% end %> + <%#= render_custom_fields_rows(@issue) %> + <%#= call_hook(:view_issues_show_details_bottom, :issue => @issue) %> +
      +
      - <% unless @issue.disabled_core_fields.include?('done_ratio') %> -
    •  % 完成  : 

      <%= @issue.done_ratio %>% -
    • - <% end %> + <%= link_to l(:button_quote), quoted_issue_path(@issue.id), :remote => true, :method => 'post', :class => 'talk_edit fr' if authorize_for('issues', 'edit') %>
      -
    - <% end %> - <%#= render_custom_fields_rows(@issue) %> - <%#= call_hook(:view_issues_show_details_bottom, :issue => @issue) %> -
    -
    - <%= link_to l(:button_quote), quoted_issue_path(@issue.id), :remote => true, :method => 'post', :class => 'talk_edit fr' if authorize_for('issues', 'edit') %> -
    -
    -
    - <% if @issue.editable? %> +
    + +
    + <% if @issue.editable? %>
    <%= render :partial => 'edit' %>
    <% end %> - +
    <% if @changesets.present? %>
    -

    <%=l(:label_associated_revisions)%>

    - <%= render :partial => 'changesets', :locals => { :changesets => @changesets} %> +

    <%= l(:label_associated_revisions) %>

    + <%= render :partial => 'changesets', :locals => {:changesets => @changesets} %>
    <% end %> - +
    <% other_formats_links do |f| %> - <%= f.link_to 'Atom', :url => {:key => User.current.rss_key} %> - <%= f.link_to 'PDF' %> + <%= f.link_to 'Atom', :url => {:key => User.current.rss_key} %> + <%= f.link_to 'PDF' %> <% end %> <% content_for :sidebar do %> - <%= render :partial => 'issues/sidebar' %> - - <% if User.current.allowed_to?(:add_issue_watchers, @project) || - (@issue.watchers.present? && User.current.allowed_to?(:view_issue_watchers, @project)) %> -
    - <%= render :partial => 'watchers/watchers', :locals => {:watched => @issue} %> -
    - <% end %> + <%= render :partial => 'issues/sidebar' %> +
    + <% if User.current.allowed_to?(:add_issue_watchers, @project) || + (@issue.watchers.present? && User.current.allowed_to?(:view_issue_watchers, @project)) %> +
    + <%= render :partial => 'watchers/watchers', :locals => {:watched => @issue} %> +
    + <% end %> <% end %> <% content_for :header_tags do %> From d79de0a35494e0177a89c761fd39dd24b1b7f334 Mon Sep 17 00:00:00 2001 From: whimlex Date: Wed, 15 Apr 2015 20:27:09 +0800 Subject: [PATCH 066/285] =?UTF-8?q?=E8=AF=BE=E7=A8=8B=E6=97=A5=E6=9C=9F?= =?UTF-8?q?=E6=8E=A7=E4=BB=B6=E6=A0=B7=E5=BC=8F=E5=86=B2=E7=AA=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/bids/_new_homework_form.html.erb | 5 +++-- public/stylesheets/courses.css | 13 ++++++++++++- public/stylesheets/project.css | 1 + 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/app/views/bids/_new_homework_form.html.erb b/app/views/bids/_new_homework_form.html.erb index 69d8b3138..dcfa1a252 100644 --- a/app/views/bids/_new_homework_form.html.erb +++ b/app/views/bids/_new_homework_form.html.erb @@ -23,9 +23,10 @@
  • - - + + <%= calendar_for('bid_deadline')%> +
  • diff --git a/public/stylesheets/courses.css b/public/stylesheets/courses.css index cc451a760..5b4eac329 100644 --- a/public/stylesheets/courses.css +++ b/public/stylesheets/courses.css @@ -452,7 +452,18 @@ a.link_file_board{ background:url(../images/pic_file.png) 0 3px no-repeat !impor - +/*日历选择图*/ +img.ui-datepicker-trigger { + display:block; + background:url(/images/public_icon.png) -31px 0 no-repeat; + cursor: pointer; + vertical-align: middle; + margin-left: 5px; + margin-top: 5px; + width:16px; + height:15px; + float:left; +} diff --git a/public/stylesheets/project.css b/public/stylesheets/project.css index aab1456fe..33f23ac3f 100644 --- a/public/stylesheets/project.css +++ b/public/stylesheets/project.css @@ -245,6 +245,7 @@ span.add_attachment {font-size: 80%;line-height: 2.5em;} .reply_btn:hover{ background:#999; color:#fff; } + .ui-widget { font-family: Verdana, sans-serif; font-size: 1.1em; From 6229acac7153a28999e69048a471960f8709fcce Mon Sep 17 00:00:00 2001 From: huang Date: Wed, 15 Apr 2015 21:44:19 +0800 Subject: [PATCH 067/285] =?UTF-8?q?=E5=AE=8C=E6=88=90wiki=E6=96=B0?= =?UTF-8?q?=E5=BB=BA=E7=95=8C=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/wiki/edit.html.erb | 79 ++++++++++++++++++---------------- public/stylesheets/project.css | 33 ++++++++++++-- 2 files changed, 72 insertions(+), 40 deletions(-) diff --git a/app/views/wiki/edit.html.erb b/app/views/wiki/edit.html.erb index 88c280608..ed9ac8891 100644 --- a/app/views/wiki/edit.html.erb +++ b/app/views/wiki/edit.html.erb @@ -1,9 +1,12 @@ <%= wiki_page_breadcrumb(@page) %> -

    - <%= h @page.pretty_title %> -

    +
    +

    Wiki

    +
    + + + <%= form_for @content, :as => :content, :url => {:action => 'update', :id => @page.title}, @@ -15,44 +18,46 @@ <% end %> <%= error_messages_for 'content' %> -
    -

    - <%=text_area_tag 'content[text]', @text, :required => true, :id => 'editor02', :cols => 100, :rows => 25 %> -

    - -
    -
    - <% if @page.safe_attribute_names.include?('parent_id') && @wiki.pages.any? %> - <%= fields_for @page do |fp| %> -

    - - <%= fp.select :parent_id,content_tag('option', '', :value => '') + wiki_page_options_for_select(@wiki.pages.all(:include => :parent) - @page.self_and_descendants, @page.parent) %> -

    + +
    +
    +

    + <%=text_area_tag 'content[text]', @text, :required => true, :id => 'editor02', :cols => 100, :rows => 25 %> +

    + +
    + +
    + <% if @page.safe_attribute_names.include?('parent_id') && @wiki.pages.any? %> + <%= fields_for @page do |fp| %> +

    + + <%= fp.select :parent_id,content_tag('option', '', :value => '') + wiki_page_options_for_select(@wiki.pages.all(:include => :parent) - @page.self_and_descendants, @page.parent) %> +

    + <% end %> <% end %> - <% end %> - -

    - - <%= f.text_field :comments, :style => "width:75%;" %> -

    -

    - - <%= render :partial => 'attachments/form',:locals => {:container => @page} %> -

    +
      +
    • + <%= f.text_field :comments, :class => "w557" %> +
    • +
      +
    • + <%= render :partial => 'attachments/form',:locals => {:container => @page} %> + +
    • +
      +
    + + <%= l(:button_save) %> + +
    -

    - <%= submit_tag l(:button_save) %> -

    <%= wikitoolbar_for 'content_text' %> <% end %>
    diff --git a/public/stylesheets/project.css b/public/stylesheets/project.css index 33f23ac3f..9d6e00c6f 100644 --- a/public/stylesheets/project.css +++ b/public/stylesheets/project.css @@ -428,9 +428,36 @@ img.ui-datepicker-trigger { float:left; } - - /*用户反馈*/ .msg_box{ width:670px; height:173px; border-bottom:1px dashed #CCC; padding-top:10px;} .msg_box h4{ } -.msg_box textarea{width:658px;height:90px;padding:5px;overflow:hidden;background-color: #ffffff; border:1px solid #CCC; margin:5px 0px; color:#666; font-size:12px; } \ No newline at end of file +.msg_box textarea{width:658px;height:90px;padding:5px;overflow:hidden;background-color: #ffffff; border:1px solid #CCC; margin:5px 0px; color:#666; font-size:12px; } +/* 版本库 */ +.repos_explain{ background:#f8f8f8; width:648px; padding:10px; margin-top:5px; border:1px solid #ddd; color:#555;} +.repos_files{ width:668px; border:1px solid #ddd; margin-bottom:10px; border-bottom:none;} +.w128{ width:128px; text-align:center; color:#555;} +.repos_files_ul{ font-size:14px; font-weight:bold; text-align:center; height:30px; color:#555;} +.repos_files ul{border-bottom:1px solid #ddd;} +.repos_files ul li{ float:left; padding-left:10px; height:26px;} +.repos_files ul:hover{ background:#ffffdd;} +.repos_t_c li{ text-align:center;} + +/* 里程碑 */ +.roadmap_box{ background:#f8f8f8; width:648px; padding:10px; margin-top:5px; border:1px solid #ddd; color:#555;} +.progress{ width:520px; height:20px; margin-bottom:5px; background:#e9e9e9;} +.closed{ background:#bae0ba; display:block;height:20px; float:left;} +.done{ background:#d3edd3; display:block;height:20px;float:left;} +.roadmap_box{ margin-bottom:10px;} +.roadmap_list_ul{border:1px solid #ddd; border-bottom:none; margin-bottom:10px;} +.roadmap_list_ul li{border-bottom:1px solid #ddd; height:21px; padding-top:5px; padding-left:10px;} +.roadmap_list_ul li:hover{background:#ffffdd;} +.text_line_s{ text-decoration:line-through; color:#999;} +.roadmap_list_w{ width:555px;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;} + +.wiki_text{ width:663px; height:300px; margin-bottom:10px;} +.wiki_new_ul{ background:#f3f3f3; border:1px solid #ddd; padding:10px 0 0; margin-bottom:10px;} +.wiki_new_ul input{ height:26px; margin-bottom:10px;} +.wiki_con_tit{ font-size:14px; color:#09658c; font-weight:bold;width:630px;overflow:hidden; white-space: nowrap; text-overflow:ellipsis; float:left; margin-bottom:10px;} +.wiki_con_box{ line-height:1.9; color:#2d2d2d;} +.wiki_page_con{ border-bottom:1px dashed #CCC; margin-bottom:10px; padding-bottom:10px;} +#wiki_new_box{ display:none;} From 8e7b4868ca02bb1eeaeef1caac84aa565b4c6450 Mon Sep 17 00:00:00 2001 From: huang Date: Thu, 16 Apr 2015 00:30:23 +0800 Subject: [PATCH 068/285] =?UTF-8?q?wiki=E9=A1=B5=E9=9D=A2=E8=B0=83?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/wiki/_content.html.erb | 6 ++-- app/views/wiki/edit.html.erb | 5 +-- app/views/wiki/show.html.erb | 51 +++++++++++++++++++------------ public/images/public_icon.png | Bin 3811 -> 4987 bytes public/stylesheets/public.css | 21 ++++++++++++- 5 files changed, 58 insertions(+), 25 deletions(-) diff --git a/app/views/wiki/_content.html.erb b/app/views/wiki/_content.html.erb index 2554f5f2a..1f32f58d2 100644 --- a/app/views/wiki/_content.html.erb +++ b/app/views/wiki/_content.html.erb @@ -1,5 +1,5 @@ -
    - <%= textAreailizable content, :text, :attachments => content.page.attachments, +<%= textAreailizable content, :text, :attachments => content.page.attachments, :edit_section_links => (@sections_editable && {:controller => 'wiki', :action => 'edit', :project_id => @page.project, :id => @page.title}) %> + <%#= content.text.html_safe %> -
    + diff --git a/app/views/wiki/edit.html.erb b/app/views/wiki/edit.html.erb index ed9ac8891..0fc854a2d 100644 --- a/app/views/wiki/edit.html.erb +++ b/app/views/wiki/edit.html.erb @@ -31,6 +31,7 @@
    + <% if @page.safe_attribute_names.include?('parent_id') && @wiki.pages.any? %> <%= fields_for @page do |fp| %>

    @@ -48,11 +49,11 @@

  • <%= render :partial => 'attachments/form',:locals => {:container => @page} %> - +
  • - + <%= l(:button_save) %>
    diff --git a/app/views/wiki/show.html.erb b/app/views/wiki/show.html.erb index c8b592cd1..1d585a571 100644 --- a/app/views/wiki/show.html.erb +++ b/app/views/wiki/show.html.erb @@ -1,20 +1,23 @@ -
    +

    Wiki

    -
    - <% if @editable %> - <% if @content.current_version? %> - <%= link_to_if_authorized(l(:button_edit), {:action => 'edit', :id => @page.title}, :class => 'icon icon-edit', :accesskey => accesskey(:edit)) %> - <%= watcher_link(@page, User.current) %> +
    +
    +
    + <% if @editable %> + <% if @content.current_version? %> + + <%#= watcher_link(@page, User.current) %> <%#= link_to_if_authorized(l(:button_lock), {:action => 'protect', :id => @page.title, :protected => 1}, :method => :post, :class => 'icon icon-lock') if !@page.protected? %> <%#= link_to_if_authorized(l(:button_unlock), {:action => 'protect', :id => @page.title, :protected => 0}, :method => :post, :class => 'icon icon-unlock') if @page.protected? %> <%#= link_to_if_authorized(l(:button_rename), {:action => 'rename', :id => @page.title}, :class => 'icon icon-move') %> - <%= link_to_if_authorized(l(:button_delete), {:action => 'destroy', :id => @page.title}, :method => :delete, :data => {:confirm => l(:text_are_you_sure)}, :class => 'icon icon-del') %> + <%= link_to_if_authorized("", {:action => 'destroy', :id => @page.title}, :method => :delete, :data => {:confirm => l(:text_are_you_sure)}, :class => 'pic_del fr') %> + <%= link_to_if_authorized("", {:action => 'edit', :id => @page.title}, :class => 'pic_edit fr', :accesskey => accesskey(:edit)) %> <% else %> <%= link_to_if_authorized(l(:button_rollback), {:action => 'edit', :id => @page.title, :version => @content.version }, :class => 'icon icon-cancel') %> <% end %> <% end %> - <%= link_to_if_authorized(l(:label_history), {:action => 'history', :id => @page.title}, :class => 'icon icon-history') %> + <%#= link_to_if_authorized(l(:label_history), {:action => 'history', :id => @page.title}, :class => 'icon icon-history') %>
    <%= wiki_page_breadcrumb(@page) %> <% unless @content.current_version? %> @@ -40,28 +43,37 @@


    <% end %> +
    <%= render(:partial => "wiki/content", :locals => {:content => @content}) %> -<%= link_to_attachments @page %> +<%= link_to_attachment_project @page, :author => false %> + +
    + <% if @editable && authorize_for('wiki', 'add_attachment') %> -
    -

    - <%= link_to l(:label_attachment_new), {}, :onclick => "$('#add_attachment_form').show(); return false;", - :id => 'attach_files_link' %>

    + +
    + <%= link_to l(:label_upload_files), {}, :onclick => "$('#add_attachment_form').show(); return false;", + :id => 'attach_files_link', + :class => "blue_u_btn fl mr10" %> <%= form_tag({:controller => 'wiki', :action => 'add_attachment', :project_id => @project, :id => @page.title}, :multipart => true, :id => "add_attachment_form", :style => "display:none;") do %> -
    -

    - <%= render :partial => 'attachments/form' %> + +

    +



    + <%= render :partial => 'attachments/form_project' %>

    - <%= submit_tag l(:button_add) %> - <%= link_to l(:button_cancel), {}, :onclick => "$('#add_attachment_form').hide(); return false;" %> + + <%= l(:button_add) %> + + <%= link_to l(:button_cancel), {}, :onclick => "$('#add_attachment_form').hide(); return false;", :class => "grey_btn ml10 fl" %> <% end %>
    -<% end %> +<% end %> +
    <% other_formats_links do |f| %> <%= f.link_to 'PDF', :url => {:id => @page.title, :version => params[:version]} %> <%= f.link_to 'HTML', :url => {:id => @page.title, :version => params[:version]} %> @@ -83,3 +95,4 @@ }); }; +
    \ No newline at end of file diff --git a/public/images/public_icon.png b/public/images/public_icon.png index a815691f83da828d9712fa7ac611887c8084dda9..68be31f5d2f2751577951f49dc25d194ebe409ef 100644 GIT binary patch literal 4987 zcmaJ_c|4oh*N?=$l$KWQrkg1xE!x;aQB|eXQerK&)Dm0mL_%9dMVCRXF|_twNEAuB zm{^L$z6)Brs$D~P)0uZ>-rv0Q`Tg;H&V9~vo^$U#_nhxJ_r#l;81Qk6asvPWKEvyJ zx0zH8001^|vNK17&a#h8!sU0}CJ+GN5&ZG605Y;pGMUmY*KZpG0O4l=0Awrx@cocU z7XW~uivYl)6I01606^IHg=5P#06>t%P*2AqbYwX@`lnc5)Z><~ zd9-9~cHxw%ot-JKmW^gWxtLsGu61y@)76UTrtaO@ZMU6ma?|PoU8~0<#C>vjHF7p; zE<0p$E^IP{MnZuAcYsF7N&tjK?v?LLQaMOE7JN)FXSp63`y(ng+z#m|#7Bd~tT-+*P~C zxm@`oSh#A;#5-xl_65j8fN{$2sEP+B4FvAHPVB3Q!(*=mCAD(T#?L?hj`HnwNx; zjYuhw5})^6xxHG-?_2sNKRV*7v&rG+<~GkEN0B*aisH7&1s*TbW|RG6xMD(4L5F7vb3+#(N|k~;N(0HUFp`F zjOw0mkH=*5RnWd{g!{mFV~_z*XSTwz6**?7|2g&Ngd-ftvJ$A3C>$1TQZ7bbdom76 z9AUMwBpz>7-C@oS0d%`P@lME_zYb_E`LU?ftzP{dhpgJmD);0W8q#1C?D_b^K*G6G zV!Ar8=h=lA;d^QZ7`BS)xjrLyn4i-7U6#-W1L4dec{8DMFJ1HP7YEk&hY|@* z_y4bP{)smatL5fXUhw zs#?!v#tqD%K!-HFUt_{`Ou*%p#C@TjfWb<3wRdHwx37w62M(@cQq2|_{rGtCnhRlm zd*VMYSwi{3&kEG7ciwQCe+dQ)ay=BiL7ZUBCm|#SPcbGp3$r3<8-7zjj?43pVmQ0`u#=IeRJ5PJnR% zH^n_0!kF}~^fF)Y?Obr?pmxi?6+C{&lUqfk>X$HTcga%)V93zkG5E>;cw{cq#V>!< zip_jUe;~Gq9^2~8HT>>ar1;I%VJq=CwB~KnEkGqbK#X0vfiJK*BS7pQ-pO41s8iIJ zD@~ch@Plw4AdcHg@`N7oNgy?fV=xX@*&3vpS|Uwn8|w*Q@-xYNe3EVT|>Jm;SqlTOg~RG_VDf;PaW zBV$}+K=EzX1xq5Q_y_qqoCvN-*-EdXt~669Ew22ePtD#LFmnp!=f~i`e*Bm^ZIyI$ zLS~y)VPft?7QfPurB=E3^nS`7JW)C&D>WTkOn%3qiejgNrwjBB-(0E3#m;wR798gP zn`bhEc_nCRH2z^6avWc$740_KQSbXR>CsLBMv@k&*(LvM6D_0rrlQ)1=bP%jeA|L0 zw2j({7fDEC*_paVLwu_5@OD&8Tyx`pHnGK{!m%WXN0kf$`G@yLp5!_#q|mdd`Xf;D?Sk;@lM}9#um48v5KE)&Is+V%!-== z`VoCrF8b2B2L%2G#Xm#FBDdUj5}e&AKB!uUH5Pf+h&b!Px_@#POgm09z~4oC0a?O( zZ^a@6arHFiZ=6*Ua|O2OC5?$ik)Be-PeEsW$y?U1=mTk6Fj?_ zF`zRW_bOX(Vvu`fVk@zD&m}hAyED`+3M5<|RC&A-{F!&r9=dWxBQ_8_;dE#7Mq|6{ z*i&JzmBk5{g^kBsC78>%7)NInbY561UeY@id=!eX0MnBWjEz1j0Mth)L%uNL(CZ-? zPC;U3CZgJ~+Hk~+Z>ggW{Qok|-$osGO_vz*7l$SUE}jWiNyyu~n%(CS7Ma6@VEkDI zDm`6fS_O_3j!;aiSzsCNkYc?x>VoQ(`gjd15G!v32O;th998<`l zId$cx{iq7ao}VLo>0I+)@I~chdCq`ib5G?*o0+6}#8YNd=zFI*)L=43I&iSNB*>TC zDM1ty<_f^YqghK5o935Pe`G~$zILH`|NcvSy8AZGIePn&y72qkcGpK+vbsMs9=tjE zSOx8f^K6F6xe7oW+p2#~sOZ>BNKPd$4M@rHLCP@jzC$hrJs+Q>%{c#`Xj-3233<0! z|2N(KZG=Cfnc{#WV1x?53GiDL-*1Z`%o}EJIIqAq&O#Uu(C54=UhA`a8+of93`VZy zVUSElpBG^ua;*T9!*DBlx7SL}08eZRQrrf7+afxJE6Hb4sO^24&s|gY+*_lW40?*> z>a`0WGr$cCGP#1qaw!u<)rSwzxj$_9_fNTP8FE`0m6sixm{Na_3vI74Uj#*VuF)OV zn`aY+8SU4iYG&Id?YwU}SB?;FO`p<@OouR>Q`RQ~y$G9~hh{AzT>n{L{JCMQug>1N z{etIh1e{`YTQ1oz7N%=$#5^dJ?BuG;faVS_{BC-G@hYa9tFI9Ogq80{oj!{_iL;C6 z->ASSyd@(&brbGPrC!0mccE^UIQo|F1qr6J6CT>C-%s!xs6l9^Q2B!OyQkcWRqyUG z-BB?u5uurT8ovO5-;4)DLQLVad5*WJ_HB{TuGc&CiIS9BtIj(PUqJXU!AM&L`WEs) ze#5=S+BNy190&ykU8dr(GM{<=kqGPHFl?X|?h zIm*4q37!=jWm(2O3QH;M9~xx$gol@$ASjcOy$dqS@v`Kz)u5N-tQk*Zi1IUgLG_lf z7u(k%sNe8!^y@D{+Fg!s%;{VY2+Wk&sDlHeK%rw_8+FeQb(9DV>!x10$LR$(CN=u; zR3_0*=}O|98zu;jUdALJ_OO$}CwhZ?#$Q`vc|s{L%@DWOnEJ%^>$pRyDAwIynsbVZ zqIxHTCJ)UXO>+LjjXVq(Yh9xBu|>aGldpGAzB3Lba^|A_Cts4be@^HM7V}Wls&%kU z+9+9Bu8+W`|74vOVotRzm-{20Z(Z?UZi54jbMnRfS;V|v*#i;WyH+VPCNo(#?K#v? z8^zvAl=DuyLi)a&H>jN%ad)|`h4raz4owDv>Z6Izq-9?IUQg9esj9&wF}*3bmLPq`}0COOEHQGeb}JZd%M&8Fy?B02rP3h#kl z)~7T0;uFmIKw&wp%=)=_3J?z3S`4Rr7H&&Bo@Y&`^?bMQ~>$^3nI=wB*=$WH#GQXUx zkrQotmEl;{1xyJ!!2y4`mA)nflV_?%o%TKo?9vJz8eqV^8+mrNpqx zVw$z#s>#kJET&;J-4(nDbDs`f`SZ0b0wqDO*<-aMhWf_O|5to(Q7hPNt4SfHp&Y9c zgTx_RYkNrtrbP`e6O1KyY-YQH55!1vBXM^~n4bD*H_ z%NLQsc&%fnE(!ZmJL7pYtY27&)erAC@^r)E%FXKVSL$8&rG@Zd@d2V41$-f zGb~BHR#+bV!UU0b|8=^7NuxHDcbVlN_gV(DY_|!Bm)M2Se36GstP~<(!g$5@p{?5# z6gkOJPqXT$kFz6oWFr`tX&98SI?JY31g%i62rN49jxwVOXYMl`*|jFl=h{>U8KGKI z6Qw+-cDl`@{Il9&A<_wXm^eh!CyS;lUgj2#<)wuO%~`9zoG_=(_;y>bIet5+pPRpl ziy`ocvmW3C3#yH^56L+}x&y%WC0w+CK6NkqK{6VY*%m_0$eTOXYk_tkB>_#WTEsl6 zYv`)qG~kp7GLjHy8@l-2qMAW6sULQR0GdwfQ`by@QKJVp!AhhMU_l3qdX!IZogQ`I$iZeE8g(!* zHW`jB<(1nd{S*4q=sb^_UhSoFyROmg!Q+$T_k^eS%!D+l#rEgr?;J7{?|XUBkl&8s zlblDUKI8SlmO zY%b0pogdFNup`aYZz|IDog3&u%zTCRQ%_aiSo8g1t#gc!13FS592H_ z*FymX8j!{dZ`uCZMU~x4o{lL56rd*GZ_#$fG{f~58O}8`;ua!YSkNlfvz}X+9YXcl z@jk6e7yl-zP_i7Sg7Lf+qj0O)(ZcNRg5=5>${oKW7!jI$BS*xs2gZvV++N2Q)=rtC zf{%EpZhg13^XsqfBlHevtGpP27;>-~^}B$g5t|l{`%?Wq4JA+iSy5n_*E=-r0b0_v zK04&_5wYCf0Q8900CDvgPx8H!6wQ%eRn;gK7juPn;j#j=aRxBdH_@xO>J;-o DF&clH literal 3811 zcma)9X*8Q#+kRqBgVsH{>RiR>z7+RvLX2(>7nv0<3d1|Y)v~>&>V=2|r7*cZ) zTIEo4jR{gpLMc6j3aK~F_pbB3=e+A%>-+JneLs6WYv236o_$^Wx>LB6My#)Yh~17YKKL5FIfU3N!hP<0 zECEy{EaM08v3TJXg5(y{mQ>)0X5f(|cw^c-vQ(b_ZOrAerU6OTg=N}(^A)o;)*{U7 zE0u@DyLEQsIzOGMR?yBB9tUuKl#NE1H)2Ep(OTFj)?ict7)XdC{aSJ|qRw>YqDzCw zwEyn>t&=4dJNNM(q)K|H@b|#PKbUQ{Ww(M4?fB`xC^Bo!c7w1~7GZ-tf(+1OXr z%_ce}LB!@Qv;4eBej;Z@F*|*TmbZVTu+r-JRK7B9v_mnvD0cMo533>|`HNseZ(=~= zj8x<1E0pF2NI5NzCt|qK)SjPy4u`|-B%P-4@Kx%vo;OcCVO_#>`hUVOX>UwL+n6$9 z`USIyyxF?2yxHsOg%OU+n2Lb}vq00?+)T+C5usZdKO%eroAzLsid7CYDMDgPwpPw$ zT!KfOy!tRl8Z)Wj%z6vHbpoArXp3*hAKVssHGDa0TmcH~C#353@U?3iWu`wq>$~d^*lxOr!N*ZMtCRA7HI1BsP#}7HFnT)%(vE_tu z)MMk|kAktI$|jqj`B&og8b+CXJZHZguSS?0R-21e_wo(tyR#Fk>kMj;Y7-*I4C<@) zB)yh`n=J^s|9H>=A)<$0JmjoDQ@0H>i+`g``BkS4nVUDw$aq(CB)h$ok&?4iAprAF ze2$^=Ur6)8G*VfMCLcEXrDMgMC=amjBI`6goT(7Vy+c;@yVsQ_z*lN$4Z1bG@=0wx zYMOh!eYJW!zKNz6!|mTIqtBr)KuS?8lY}q#o0lyhGeGw8d$M0~n0#6s=sU4dP*|o@ z-gbV9cR+?l)tdJp^14-4E2sI)Q@-vhq>98au}tI=6ia{ir!=T8tMdQ%uJKX*{>>@cBNVHn~pxfb>aEI-v;+Dh{ga#Sfor3AMW`ma#H|$NYczFjZ*ysZN zFnC9zU}}xsF=SDeP#@9w9NgxjS{WxUT`x4veaJ;-7gBn>jJL(R;cZ9}XZuQM1|&)7 z#JqrGluvak(X}C8B{zBUfhr+%aiEkUX!7i~an_R=0P5?$tBIQm+>UKrjCrDcAuX<} z$S44&hLsOXsfxR|w=Bx86Ty^Tih6fP|Hy*Si~4Zi3aol8CJx$ZrMa=6p6SUD65gY=H(RvfnNG{m1IObK@=l| z6}IOZT%6|xl$zr}WS3a3CUYt`$v&F?D7(dbbI!E}g^P`0Xa|#`=f)9u1$kcE{MTKG z+<3sj_j(4J#G3>mk~j16Lx-6IL=tjTfh1*A@U-p}0J8~eFl69;hn2F|h$sGMsS_z6y{YW0ZTz%AQ^%^rVW?X|-V<-})A%KR}14zYC)Cmi!+B$*W|&1^lu=0jP*QY>^mJ6_ng7 zktm+LCU{F_{}kGfDn$w+DWa_pZHTRdxjx#?mtbB>m2qsEcZ2hFJ{(d$c_kVK4Ty%b zFmYi~_l%hJQ+!2w$zRBGcLf78CZns7w)XP5K|Bhob{k(C{^)Q`UYkm@ice~hy`nV0 zblLqzE_lh1t8`&~`1Q4Q-r6eWLV6DMzI@u8e!+g*{0<{B8MF6wKw)G5k8^sA=?1h) zBcZTj6{7y!)U)?D$w;M1z4RREmDOVfA44g@;l`MX!HgSbQbxCu4Qnf?y~fFEuWunc zy)C`_w~aWl#fjXXR`v^wGC#Ywcl%&+0=K~#QEY$ewpI&1FTh@h*(ouabP+y@&bt^7Ds$_sG?)XF#N$x9sAcn@yIb%>hrZ+BKGKPg!A**#M-oQC~2`iK5o z+ERH}1$DcSh9Xr|`rDNp1`+wUP6=3}aF#58ziIzs?nntAk~HSoiwx z3yW~F@knfa{^%@G#bV&)LUB+0P;LorLUhyf0&++&fF?xQcQjd66Noq}FdQM#guLbU zug8#Mz^!I%m}N(wkC&EXz!k-bo*K5o4d#q=tK?`TBj2_PHvO=HUz2QnioRwVn-jb& zL?jk{(8ledy9PPI9$h>4LuZdl2lmHcorWsISN<{+f0g(rrx1`?*mwX2yo=~Q%+gc% zB+&4_ws8kGA`z;squ+zrYHXT}z_vS48txHa&|F zfi`qeLHVBMbmV4h4W^HC>kKq}O!-^2KOKoi?%Aa~zcYBD;jvjPJ(Q)PKub^HUg`!B z^Z7vEmB(gwN*At-I}OCddtBQtUErW(&8<}V?sGuVm%RUcugMep{YD{z*Tw*#mZGX> z_qW;hAm5&VUly}()U1WRYb>Gt5dryMuk`own4BaVKT9u1f`_I^$ga(9uJg&kUt?IF z;b&q#buQ3v*cOdmBpDyHi8j4y9(E?{e9;_0uH`aqS_O@^-@ZPvCw6eyiC2Y>clPXG zP+QVzjogAojhs~gbeO}KkKW4%Yq<`Fscl)w!8p%Q8uLd7@lZH?&myQX&Z_KiO1);= zgLLt{D{CuL$UE%YtQIT#ju*IL4LO3>K^T{Jj^XkvO^+Y;OYPO`foh4KJm=S1hI|WW zs@MB_#$222$n^5vrkZ?R>5Wi%>Gc#Rq*>BA|0RgKl_sc0sXpce*V zis3oEnk&6}eM2kU1oGY-OO&v>-_%^)nf1_6%=$&SpMy_SH9<*B&F_5QHs^__yt1G7 zFAk`MlDLz#GV%q+Lu2QvZI#*9o1BN;RQiYQ%C#0YIt`22(G8u?Uw-Y_A8y^;tE^by z_y^7u73$lz$uV+RE(|pw!TGj1Vb2&OY`2F1uV2e_e@W2AQS;JgqY7;O!<(GSUR~&N z7&S4m4R<;gp(%b!p1>|*+@xeCID`+~{odc&5^u)5IWe<&X6W~ip(W%X?Q9V?O)kG{ znV)xV__Q`GDqds0Y?N7G|6t17)9OAC?`L=3V>dFwtz~F9z!!YiQn=R0g&g5yepzh%9Ibq-S?Hb1I0uTWxVGrg0?AwN9O%El3BRQ|0-$(*_y!ckRRQy zWV)vgGYc_XcE}lqbllA-o9@?Za?t4DZq4o=Rl&fc&7S+rF03A#aV>;H5#=Nk!*Xl7 z6w_rkCEW?VK@G4dph+nng{dgyGzeT)M-K4G5!eRR#+6M{Ua(|QnuOEmuMH}E+zsNt zsXSh%Y;y2KZ0B5^QXOXXxN}+wvddd3Dr=cKcon(c^{TJtN4>TjPFB(P(UQ!HCNKfl zCZygEdZYZ)XZ193I8Ya5xTeSv!jpd&{*T7tA7uDb O6)-X|)yH0PN%|MZdohRr diff --git a/public/stylesheets/public.css b/public/stylesheets/public.css index 6630a01d6..e78141f11 100644 --- a/public/stylesheets/public.css +++ b/public/stylesheets/public.css @@ -134,6 +134,20 @@ a.blue_btn{background:#64bdd9;color:#fff;font-size:14px; font-weight:normal; pad a:hover.blue_btn{ background:#329cbd;} a.orange_btn{ background:#ff5722;color:#fff;font-size:14px; font-weight:normal; padding:2px 10px; text-align:center; } a:hover.orange_btn{ background:#d63502;} + +.green_u_btn{border:1px solid #3cb761; padding:2px 10px; color:#3cb761;} +a.green_u_btn{border:1px solid #3cb761; padding:2px 10px; color:#3cb761;} +a:hover.green_u_btn{ background:#3cb761; color:#fff;} +.orange_u_btn{border:1px solid #ff5d31; padding:2px 10px; color:#ff5d31;} +a.orange_u_btn{border:1px solid #ff5d31; padding:2px 10px; color:#ff5d31;} +a:hover.orange_u_btn{background:#ff5d31; color:#fff;} +.bgreen_u_btn{border:1px solid #1abc9c; padding:2px 10px; color:#1abc9c;} +a.bgreen_u_btn{border:1px solid #1abc9c1; padding:2px 10px; color:#1abc9c;} +a:hover.bgreen_u_btn{background:#1abc9c; color:#fff;} +.blue_u_btn{border:1px solid #15bccf; padding:2px 10px; color:#15bccf;} +a.blue_u_btn{border:1px solid #15bccf; padding:2px 10px; color:#15bccf;} +a:hover.blue_u_btn{background:#15bccf; color:#fff;} + .nolink_btn{ background:#BCBCBC; color: #fff; padding:2px 5px;} .more_btn{-moz-border-radius:3px; -webkit-border-radius:3px; border:1px solid #9DCEFF; color:#9DCEFF; border-radius:3px; padding:0px 3px;} .upbtn{ margin:42px 0 0 10px; border:none;} @@ -148,7 +162,12 @@ a:hover.orange_btn{ background:#d63502;} .pic_mes{ display:block; background:url(../images/public_icon.png) 0px -376px no-repeat; width:20px; height:15px; padding-left:18px;} .pic_img{ display:block; background:url(../images/public_icon.png) -31px -419px no-repeat; width:20px; height:15px; } .pic_del{ display:block; background:url(../images/public_icon.png) 0px -235px no-repeat; width:20px; height:15px; } - +.pic_stats{display:block; background:url(../images/public_icon.png) 0px -548px no-repeat; width:20px; height:15px;} +.pic_files{display:block; background:url(../images/public_icon.png) 0px -578px no-repeat; width:20px; height:15px;} +.pic_text{display:block; background:url(../images/public_icon.png) 0px -609px no-repeat; width:20px; height:18px;} +.pic_text02{display:block; background:url(../images/public_icon.png) 0px -642px no-repeat; width:20px; height:19px;} +.pic_edit{display:block; background:url(../images/public_icon.png) 0px -32px no-repeat; width:20px; height:15px;} +.pic_edit:hover{display:block; background:url(../images/public_icon.png) -32px -32px no-repeat; width:20px; height:15px;} From fec751608a0619ab1d42ee0aae5ea188af1ae89b Mon Sep 17 00:00:00 2001 From: huang Date: Thu, 16 Apr 2015 03:54:07 +0800 Subject: [PATCH 069/285] =?UTF-8?q?=E5=AE=8C=E6=88=90=E9=87=8C=E7=A8=8B?= =?UTF-8?q?=E7=A2=91=E7=95=8C=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/application_helper.rb | 24 +++++++- app/helpers/projects_helper.rb | 5 ++ app/views/versions/_overview.html.erb | 18 +++--- app/views/versions/index.html.erb | 82 ++++++++++++++++++++++++++- app/views/wiki/edit.html.erb | 20 +++---- public/stylesheets/public.css | 18 ++++++ 6 files changed, 145 insertions(+), 22 deletions(-) diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 54b05b012..fad54f056 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -187,6 +187,28 @@ module ApplicationHelper s end + def link_to_issue_version(issue, options={}) + title = nil + subject = nil + text = options[:tracker] == false ? "##{issue.id}" : "#{issue.tracker} ##{issue.id}" + if options[:subject] == false + title = truncate(issue.subject, :length => 60) + else + subject = issue.subject + if options[:truncate] + subject = truncate(subject, :length => 60) + end + end + if issue.status_id == 5 + s = link_to text, issue_path(issue), :class => "text_line_s", :title => title + else + s = link_to text, issue_path(issue), :class => "c_blue", :title => title + end + s << h(": #{subject}") if subject + s = h("#{issue.project} - ") + s if options[:project] + s + end + # Generates a link to an attachment. # Options: # * :text - Link text (default to attachment filename) @@ -724,7 +746,7 @@ module ApplicationHelper def breadcrumb(*args) elements = args.flatten - elements.any? ? content_tag('p', (args.join(" \xc2\xbb ") + " \xc2\xbb ").html_safe, :class => 'breadcrumb') : nil + elements.any? ? content_tag('p', (args.join(" \xc2\xbb ") + " \xc2\xbb ").html_safe, :class => 'wiki_con_tit"') : nil end def other_formats_links(&block) diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb index 1d47e8bcc..d8078aeb7 100644 --- a/app/helpers/projects_helper.rb +++ b/app/helpers/projects_helper.rb @@ -24,6 +24,11 @@ module ProjectsHelper link_to_if version.visible?, format_version_name(version), { :controller => 'versions', :action => 'show', :id => version }, :class => "c_blue02" end + def link_to_version_show(version, options = {}) + return '' unless version && version.is_a?(Version) + link_to_if version.visible?, format_version_name(version), { :controller => 'versions', :action => 'show', :id => version }, :class => " f16 fb c_dblue " + end + def project_settings_tabs tabs = [{:name => 'info', :action => :edit_project, :partial => 'projects/edit', :label => :label_information_plural}, {:name => 'modules', :action => :select_project_modules, :partial => 'projects/settings/modules', :label => :label_module_plural}, diff --git a/app/views/versions/_overview.html.erb b/app/views/versions/_overview.html.erb index fdb0bcd4a..47d65c34a 100644 --- a/app/views/versions/_overview.html.erb +++ b/app/views/versions/_overview.html.erb @@ -1,17 +1,17 @@ <% if version.issues_count > 0 %> -

    »<%= l(:label_versions_progress)%>

    - <%= progress_bar([version.closed_percent, version.completed_percent], :width => '40em', :legend => ('%0.0f%' % version.completed_percent)) %> +

    »<%= l(:label_versions_progress)%>

    + <%= progress_bar([version.closed_percent, version.completed_percent], :width => '82%', :legend => ('%0.0f%' % version.completed_percent)) %>

    - <%= link_to(l(:label_x_issues, :count => version.issues_count), - project_issues_path(version.project, :status_id => '*', :fixed_version_id => version, :set_filter => 1)) %> + <%= link_to(l(:label_x_issues, :count => version.issues_count), + project_issues_path(version.project, :status_id => '*', :fixed_version_id => version, :set_filter => 1), :class =>"c_dblue",) %>   - (<%= link_to_if(version.closed_issues_count > 0, l(:label_x_closed_issues_abbr, :count => version.closed_issues_count), - project_issues_path(version.project, :status_id => 'c', :fixed_version_id => version, :set_filter => 1)) %> + (<%= link_to_if(version.closed_issues_count > 0, l(:label_x_closed_issues_abbr, :count => version.closed_issues_count), + project_issues_path(version.project, :status_id => 'c', :fixed_version_id => version, :set_filter => 1), :class =>"c_dblue") %> — - <%= link_to_if(version.open_issues_count > 0, l(:label_x_open_issues_abbr, :count => version.open_issues_count), - project_issues_path(version.project, :status_id => 'o', :fixed_version_id => version, :set_filter => 1)) %>) + <%= link_to_if(version.open_issues_count > 0, l(:label_x_open_issues_abbr, :count => version.open_issues_count), + project_issues_path(version.project, :status_id => 'o', :fixed_version_id => version, :set_filter => 1), :class =>"c_dblue") %>)

    <% else %> -

    <%= l(:label_roadmap_no_issues) %>

    +

    <%= l(:label_roadmap_no_issues) %>

    <% end %> diff --git a/app/views/versions/index.html.erb b/app/views/versions/index.html.erb index ab4f77c5b..2e9004de3 100644 --- a/app/views/versions/index.html.erb +++ b/app/views/versions/index.html.erb @@ -1,3 +1,81 @@ +
    +

    <%= l(:label_roadmap) %>

    +
    + + + +
    + + + +<% if @versions.empty? %> +

    <%= l(:label_no_data) %>

    +<% else %> + <% @versions.each do |version| %> + +
    +

    + <%= link_to_version_show version, :name => version_anchor(version) %> + <% if version.completed? %> + <%= format_date(version.effective_date) %> + <% elsif version.effective_date %> + <%= due_date_distance_in_words(version.effective_date) %> (<%= format_date(version.effective_date) %>) + <% end %> + +

    +
    + <%= render :partial => 'versions/overview', :locals => {:version => version} %> + <%= render(:partial => "wiki/content", :locals => {:content => version.wiki_page.content}) if version.wiki_page %> + +
    + <% if (issues = @issues_by_version[version]) && issues.size > 0 %> +
    + <%= form_tag({}) do -%> +

    »<%= l(:label_related_issues) %>

    +
      + <% issues.each do |issue| -%> +
    • + <%= link_to_issue_version(issue, :project => (@project != issue.project)) %> +
    • + <% end -%> +
    + <% end %> +
    + <% end %> +
    +

    »<%= l(:label_versions_description)%>

    +

    <%=h version.description %>

    +
    +
    + <% end %> + +
      + <%= pagination_links_full @versions_pages%> +
    +
    + <% end %> +
    + + + + + + +

    <%= l(:label_roadmap) %>

    @@ -25,11 +103,11 @@ <% if @completed_versions.present? %>

    - <%= link_to_function l(:label_completed_versions), + <%= link_to_function l(:label_completed_versions), '$("#toggle-completed-versions").toggleClass("collapsed"); $("#completed-versions").toggle()', :id => 'toggle-completed-versions', :class => 'collapsible collapsed' %>

    - <% if @page.safe_attribute_names.include?('parent_id') && @wiki.pages.any? %> - <%= fields_for @page do |fp| %> -

    - - <%= fp.select :parent_id,content_tag('option', '', :value => '') + wiki_page_options_for_select(@wiki.pages.all(:include => :parent) - @page.self_and_descendants, @page.parent) %> -

    - <% end %> - <% end %> + <%# if @page.safe_attribute_names.include?('parent_id') && @wiki.pages.any? %> + <%#= fields_for @page do |fp| %> + + + + + + + <%# end %> + <%# end %>
    • <%= f.text_field :comments, :class => "w557" %> diff --git a/public/stylesheets/public.css b/public/stylesheets/public.css index e78141f11..f53e7f9d5 100644 --- a/public/stylesheets/public.css +++ b/public/stylesheets/public.css @@ -390,3 +390,21 @@ div.flash.warning, .conflict { .floatbox{ width:420px; border:3px solid #15bccf; background:#fff; padding:5px;} a.box_close{ display:block; float:right; width:16px; height:16px; background:url(../images/img_floatbox.png) 0 0 no-repeat;} a.box_close{background:url(../images/img_floatbox.png) -22px 0 no-repeat;} + +/*里程碑进度条*/ +table.progress { + border-collapse: collapse; + border-spacing: 0pt; + empty-cells: show; + text-align: center; + float: left; + margin: 1px 6px 1px 0px;} +p.progress-info { + clear: left; + font-size: 80%; + margin-top: -4px; + color: #777; + color: #777;} +p.percent { + font-size: 80%; +} \ No newline at end of file From d23ac832cad8a7fddaea2ddd4492a7d9b6a53843 Mon Sep 17 00:00:00 2001 From: whimlex Date: Thu, 16 Apr 2015 04:12:26 +0800 Subject: [PATCH 070/285] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E6=90=9C=E7=B4=A2=E6=8C=89=E9=92=AE=E5=8A=9F=E8=83=BD=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0=EF=BC=9B=E9=97=AE=E9=A2=98=E8=B7=9F=E8=B8=AA=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E7=BC=96=E8=BE=91=E6=8C=89=E9=92=AE=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0=EF=BC=9B=E9=97=AE=E9=A2=98=E8=B7=9F=E8=B8=AA?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E6=A0=B7=E5=BC=8F=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/attachments/_form.html.erb | 2 +- app/views/issues/_action_menu.html.erb | 2 +- app/views/issues/_edit.html.erb | 4 ++-- app/views/issues/_form.html.erb | 5 ++-- app/views/issues/new.html.erb | 30 ------------------------ app/views/layouts/base_projects.html.erb | 4 ++-- public/javascripts/project.js | 18 ++++++++++++-- public/stylesheets/project.css | 4 ++-- 8 files changed, 26 insertions(+), 43 deletions(-) diff --git a/app/views/attachments/_form.html.erb b/app/views/attachments/_form.html.erb index cc3fbe1a1..7e86b098b 100644 --- a/app/views/attachments/_form.html.erb +++ b/app/views/attachments/_form.html.erb @@ -49,7 +49,7 @@ <%#= button_tag "浏览", :type=>"button", :onclick=>"CompatibleSend();" %> - <%= button_tag "文件浏览", :class => 'sub_btn', :type => "button", :onclick => "_file.click()", :onmouseover => 'this.focus()', :style => ie8? ? 'display:none' : '' %> + <%= button_tag "文件浏览", :type=>"button", :onclick=>"$('#_file').click();",:onmouseover => 'this.focus()',:class => 'sub_btn' %> <%= file_field_tag 'attachments[dummy][file]', :id => '_file', :class => 'file_selector', diff --git a/app/views/issues/_action_menu.html.erb b/app/views/issues/_action_menu.html.erb index 52e487f08..4b23897d3 100644 --- a/app/views/issues/_action_menu.html.erb +++ b/app/views/issues/_action_menu.html.erb @@ -4,7 +4,7 @@ <%= link_to l(:button_delete), issue_path(@issue.id), :data => {:confirm => issues_destroy_confirmation_message(@issue)}, :method => :delete, :class => 'talk_edit fr' if User.current.allowed_to?(:delete_issues, @project) %> <% if (@issue.author == User.current) || (User.current.admin?) %> - <%= link_to l(:button_edit), edit_issue_path(@issue), :onclick => 'showAndScrollTo("update", "issue_notes"); return false;', :class => 'talk_edit fr', :accesskey => accesskey(:edit) if @issue.editable? %> + <%= link_to l(:button_edit), edit_issue_path(@issue), :onclick => 'showAndScrollTo("all_attributes", "issue_notes"); return false;', :class => 'talk_edit fr', :accesskey => accesskey(:edit) if @issue.editable? %> <% else %> <%= link_to l(:label_user_newfeedback), edit_issue_path(@issue), :onclick => 'showAndScrollTo("update", "issue_notes"); return false;', :class => 'talk_edit fr', :accesskey => accesskey(:edit) if @issue.editable? %> <% end %> \ No newline at end of file diff --git a/app/views/issues/_edit.html.erb b/app/views/issues/_edit.html.erb index a6afea438..14e2d0201 100644 --- a/app/views/issues/_edit.html.erb +++ b/app/views/issues/_edit.html.erb @@ -3,11 +3,11 @@ <%= render :partial => 'conflict' if @conflict %> <% if @edit_allowed || !@allowed_statuses.empty? %> -
      + <% end %> - +
      <% if @journals.present? %> diff --git a/app/views/issues/_form.html.erb b/app/views/issues/_form.html.erb index 81da316b7..ddabbd89e 100644 --- a/app/views/issues/_form.html.erb +++ b/app/views/issues/_form.html.erb @@ -91,7 +91,6 @@ <%= render :partial => 'attachments/form', :locals => {:container => @issue} %>
    • -
      <%= render :partial => 'issues/attributes' %>
      @@ -108,9 +107,9 @@ <%= javascript_tag "observeSearchfield('user_search', 'users_for_watcher', '#{ escape_javascript watchers_autocomplete_for_user_path(:user => @available_watchers, :format => 'js', :flag => 'ture') }')" %>
      - + <%= watchers_checkboxes(@issue, @available_watchers) %> - +
    <%= call_hook(:view_issues_form_details_bottom, {:issue => @issue, :form => f}) %> diff --git a/app/views/issues/new.html.erb b/app/views/issues/new.html.erb index 13b0c09f0..9bd068fcd 100644 --- a/app/views/issues/new.html.erb +++ b/app/views/issues/new.html.erb @@ -10,36 +10,6 @@
    <%= render :partial => 'issues/form', :locals => {:f => f} %>
    -
    - <% if @issue.safe_attribute? 'watcher_user_ids' -%> -
    - - - - <%= link_to "", - {:controller => 'watchers', :action => 'new', :project_id => @issue.project}, - :remote => true, - :method => 'get', - :class => "pic_sch mt5 ml5" %> - -
    - <%= javascript_tag "observeSearchfield('user_search', 'users_for_watcher', '#{ escape_javascript watchers_autocomplete_for_user_path(:user => @available_watchers, :format => 'js', :flag => 'ture') }')" %> -
    - - <%= watchers_checkboxes(@issue, @available_watchers) %> - - -
    -
    -
    -
    -
    - <% end %> - - <%= l(:button_create) %> - - <%= preview_link preview_new_issue_path(:project_id => @project), 'issue-form', 'preview', {:class => "blue_btn fl ml10"} %> -
    <% end %> diff --git a/app/views/layouts/base_projects.html.erb b/app/views/layouts/base_projects.html.erb index ac63fdaa8..175ba23c0 100644 --- a/app/views/layouts/base_projects.html.erb +++ b/app/views/layouts/base_projects.html.erb @@ -99,8 +99,8 @@ <%= l(:label_search)%> -
    - +
    + <% end %>
    diff --git a/public/javascripts/project.js b/public/javascripts/project.js index 1f3117a06..f1b696ce5 100644 --- a/public/javascripts/project.js +++ b/public/javascripts/project.js @@ -1,8 +1,8 @@ //验证搜索时输入字 -function regexName() { +function regexName(content) { var name = $.trim($("#name").val()); if (name.length == 0) { - $("#project_name_span").text("<%= l(:label_search_conditions_not_null) %>"); + $("#project_name_span").text(content); $("#project_name_span").css('color', '#ff0000'); $("#project_name_span").focus(); return false; @@ -13,6 +13,12 @@ function regexName() { } } +function submitSerch(content) +{ + if(regexName(content)){$("#project_search_form").submit();} +} + + // 项目描述超过展开 //$(function(){ // $(".subNav").click(function(){ @@ -202,3 +208,11 @@ $(document).ready(function(){ // $(".jstEditor").css("margin-left ","80px"); //issue_project_id }); + +function showAndScrollTo(id, focus) { + $('#'+id).show(); + if (focus !== null) { + $('#'+focus).focus(); + } + $('html, body').animate({scrollTop: $('#'+id).offset().top}, 400); +} \ No newline at end of file diff --git a/public/stylesheets/project.css b/public/stylesheets/project.css index 9d6e00c6f..bfe2a6f02 100644 --- a/public/stylesheets/project.css +++ b/public/stylesheets/project.css @@ -203,7 +203,7 @@ a:hover.ping_sub{ background:#14a8b9;} .ping_hovertab { color:#656767; font-weight:bold; border-bottom:3px solid #15bccf; } .ping_dis{display:block; } .ping_undis{display:none;} -.ping_C{border-bottom:1px dashed #CCC; padding:10px 0 0px;} +.ping_C{border-bottom:1px dashed #CCC; padding:10px 0 10px;} .ping_dispic a{ display:block; height:46px; width:46px; border:1px solid #CCC; padding:1px; float:left;} .ping_dispic a:hover{border:1px solid #15bccf;} .ping_discon{ float:left; width:610px; margin-left:10px; } @@ -328,7 +328,7 @@ a:hover.st_add{ color:#ff8e15;} .newpro_box ul li{ } .newpro_box input{ height:26px; float:left; margin-bottom:10px;} .newpro_box textarea{ height:150px; float:left; margin-bottom:10px;} -.newpro_box select{ height:26px; float:left; margin-bottom:10px;} +.newpro_box select{ height:29px; float:left; margin-bottom:10px;} .label{ width:80px; text-align:right; font-size:14 background-image: url(../images/true.png); } .icon-reload { background-image: url(../images/reload.png); } .icon { From 04698c3e532d07585e11469702daaee8982a96e4 Mon Sep 17 00:00:00 2001 From: whimlex Date: Thu, 16 Apr 2015 04:53:09 +0800 Subject: [PATCH 071/285] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E6=8F=8F=E8=BF=B0?= =?UTF-8?q?=E5=B1=95=E5=BC=80=E4=BF=A1=E6=81=AF=E5=92=8C=E6=94=B6=E8=B5=B7?= =?UTF-8?q?=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/layouts/base_projects.html.erb | 4 ++-- public/javascripts/project.js | 17 +++++++++++++++-- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/app/views/layouts/base_projects.html.erb b/app/views/layouts/base_projects.html.erb index 175ba23c0..15e30bfbb 100644 --- a/app/views/layouts/base_projects.html.erb +++ b/app/views/layouts/base_projects.html.erb @@ -100,7 +100,7 @@ <%= l(:label_search)%>
    - + <% end %>
    @@ -185,7 +185,7 @@
    - <%= l(:label_expend_information)%> + diff --git a/public/javascripts/project.js b/public/javascripts/project.js index f1b696ce5..2ee9c1c83 100644 --- a/public/javascripts/project.js +++ b/public/javascripts/project.js @@ -35,8 +35,21 @@ function expand_tools_expand() } // 描述显示更多信息 -function show_more_msg() -{$("#course_description").toggleClass("course_description_none");} +function show_more_msg(){ + $("#course_description").toggleClass("course_description_none"); + var information = $("#expend_more_information"); + var val = information.attr("value"); + if (val=="展开更多信息" ) + { + $("#expend_more_information").text("收起描述信息"); + information.attr("value","收起描述信息"); + } + else + { + $("#expend_more_information").text("展开更多信息"); + information.attr("value","展开更多信息"); + } +} /////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////项目讨论区 From c11fdc7273c18c7a7dfd1c1e57156df6143f4781 Mon Sep 17 00:00:00 2001 From: huang Date: Thu, 16 Apr 2015 05:01:09 +0800 Subject: [PATCH 072/285] =?UTF-8?q?=E7=89=88=E6=9C=AC=E5=BA=93=E8=B0=83?= =?UTF-8?q?=E6=95=B4=EF=BC=9A=E6=9C=AA=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/repositories/_navigation.html.erb | 4 +- app/views/repositories/show.html.erb | 145 +++++++++++++++++++- public/stylesheets/project.css | 29 ++++ public/stylesheets/public.css | 17 --- 4 files changed, 174 insertions(+), 21 deletions(-) diff --git a/app/views/repositories/_navigation.html.erb b/app/views/repositories/_navigation.html.erb index a42daa8f5..f0f2a77fe 100644 --- a/app/views/repositories/_navigation.html.erb +++ b/app/views/repositories/_navigation.html.erb @@ -1,10 +1,10 @@ <% content_for :header_tags do %> <%= javascript_include_tag 'repository_navigation' %> <% end %> - + <%= link_to l(:label_statistics), {:action => 'stats', :id => @project, :repository_id => @repository.identifier_param}, - :class => 'icon icon-stats' if @repository.supports_all_revisions? %> + :class => 'mt5 c_blue fl' if @repository.supports_all_revisions? %> <%= form_tag({:action => controller.action_name, :id => @project, diff --git a/app/views/repositories/show.html.erb b/app/views/repositories/show.html.erb index 427ecddc1..c0c6df303 100644 --- a/app/views/repositories/show.html.erb +++ b/app/views/repositories/show.html.erb @@ -1,13 +1,154 @@ +
    +

    版本库

    +
    +
    +
    + <%= render :partial => 'breadcrumbs', + :locals => { :path => @path, :kind => 'dir', :revision => @rev } %> + <%= render :partial => 'navigation' %> + +
    +
    +
    +

    <%if @repository.type.to_s=="Repository::Git"%> + <%= @repos_url%> + <%else %> + <%=h @repository.url %> + <% end %> +

    +

    + (<%= l(:label_all_revisions) %><%= @repositories.sort.collect {|repo| + link_to h(repo.name), + {:controller => 'repositories', :action => 'show', + :id => @project, :repository_id => repo.identifier_param, :rev => nil, :path => nil}, + :class => 'repository' + (repo == @repository ? ' selected' : '') , + :class => "mb10 word_break c_orange"}.join(' | ').html_safe %>) +

    +

    项目代码请设置好正确的编码方式(utf-8),否则中文会出现乱码

    +

    建立版本库文件夹,打开命令行执行如下:

    +
    +
    +

    git init

    +

    git add *

    +

    git commit -m "first commit"

    +

    git remote add origin + http://xianbo_trustie2@repository.trustie.net/xianbo/trustie2.git +

    +

    git config http.postBuffer 524288000 #设置本地post缓存为500MB

    +

    git push -u origin master:master

    +
    +
    +

    已经有本地库,还没有配置远程地址,打开命令行执行如下:

    +
    +
    +

    git remote add origin http://xianbo_trustie2@repository.trustie.net/xianbo/trustie2.git

    +

    git add .

    +

    git commit -m "first commit"

    +

    git config http.postBuffer 524288000 #设置本地post缓存为500MB

    +

    git push -u origin master:master

    +
    +
    +

    已有远程地址,创建一个远程分支,并切换到该分支,打开命令行执行如下:

    +
    +
    +

    git clone http://xianbo_trustie2@repository.trustie.net/xianbo/trustie2.git

    +

    git push

    +

    git checkout -b branch_name

    +

    git push origin branch_name

    +
    +
    +

    从网上获取别人的开源版本库,转交到trustie网站上,打开命令行执行如下:

    +
    +
    +

    git remote add trustie + http://xianbo_trustie2@repository.trustie.net/xianbo/trustie2.git +

    +

    git add .

    +

    git commit -m "first commit"

    +

    git config http.postBuffer 524288000 #设置本地post缓存为500MB

    +

    git push -u trustie master:master

    +

    李海提供

    +
    +
    +
      +
    • 名称
    • +
    • 大小
    • +
      +
    + + + + + + +
      +
    • +
    • +
      +
    +
    +
    +

    最近的修订版本

    +
    +
    +
      +
    • #
    • +
    • 日期
    • +
    • 作者
    • +
    • 注释
    • +
      +
    + +
      +
    • 87fdecda
    • +
    • 2014-04-21 18:13
    • +
    • alan
    • +
    • 创新竞赛添加删除功能
    • +
      +
    + +
    + 查看修订 +

    查看如何提交代码:中文 | English

    +
    + + +
    + + + + + + + + <%= call_hook(:view_repositories_show_contextual, { :repository => @repository, :project => @project }) %>

    版本库

    +
    <%= render :partial => 'navigation' %>
    +

    - <%= render :partial => 'breadcrumbs', - :locals => { :path => @path, :kind => 'dir', :revision => @rev } %> +
    <%if @repository.type.to_s=="Repository::Git"%> <%= @repos_url%> diff --git a/public/stylesheets/project.css b/public/stylesheets/project.css index 9d6e00c6f..c82ba553e 100644 --- a/public/stylesheets/project.css +++ b/public/stylesheets/project.css @@ -461,3 +461,32 @@ img.ui-datepicker-trigger { .wiki_con_box{ line-height:1.9; color:#2d2d2d;} .wiki_page_con{ border-bottom:1px dashed #CCC; margin-bottom:10px; padding-bottom:10px;} #wiki_new_box{ display:none;} + +/*里程碑进度条*/ +table.progress { + border-collapse: collapse; + border-spacing: 0pt; + empty-cells: show; + text-align: center; + float: left; + margin: 1px 6px 1px 0px;} +p.progress-info { + clear: left; + font-size: 80%; + margin-top: -4px; + color: #777; + color: #777;} +p.percent { + font-size: 80%; +} + +/*版本库tab*/ +.contextual { + float: right; + white-space: nowrap; + line-height: 1.4em; + padding-left: 10px; + padding-right: 10px; + padding-top: 5px; + font-size: 0.9em; +} diff --git a/public/stylesheets/public.css b/public/stylesheets/public.css index f53e7f9d5..fbaaab66f 100644 --- a/public/stylesheets/public.css +++ b/public/stylesheets/public.css @@ -391,20 +391,3 @@ div.flash.warning, .conflict { a.box_close{ display:block; float:right; width:16px; height:16px; background:url(../images/img_floatbox.png) 0 0 no-repeat;} a.box_close{background:url(../images/img_floatbox.png) -22px 0 no-repeat;} -/*里程碑进度条*/ -table.progress { - border-collapse: collapse; - border-spacing: 0pt; - empty-cells: show; - text-align: center; - float: left; - margin: 1px 6px 1px 0px;} -p.progress-info { - clear: left; - font-size: 80%; - margin-top: -4px; - color: #777; - color: #777;} -p.percent { - font-size: 80%; -} \ No newline at end of file From bc6ff57de2016fa282241737e5eebf91f36def31 Mon Sep 17 00:00:00 2001 From: huang Date: Thu, 16 Apr 2015 09:30:06 +0800 Subject: [PATCH 073/285] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=BC=80=E5=8F=91?= =?UTF-8?q?=E7=BB=84=E3=80=81=E6=9C=8B=E5=8F=8B=E5=9C=88=E3=80=81=E7=A0=94?= =?UTF-8?q?=E5=8F=91=E7=BB=84=E5=88=87=E6=8D=A2js?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/layouts/_base_development_group.html.erb | 4 +--- app/views/layouts/_base_friend_group.html.erb | 4 +--- app/views/layouts/_base_research_team.html.erb | 4 +--- app/views/layouts/base_projects.html.erb | 12 +++++++----- 4 files changed, 10 insertions(+), 14 deletions(-) diff --git a/app/views/layouts/_base_development_group.html.erb b/app/views/layouts/_base_development_group.html.erb index 87ee4e8d8..9055b9a1b 100644 --- a/app/views/layouts/_base_development_group.html.erb +++ b/app/views/layouts/_base_development_group.html.erb @@ -1,5 +1,4 @@ <% attaments_num = @project.attachments.count+Attachment.where(["`container_type` = 'Version' and `container_id` in (?)",@project.versions.map{ |v| v.id}]).all.count %> -
    \ No newline at end of file + \ No newline at end of file diff --git a/app/views/layouts/_base_friend_group.html.erb b/app/views/layouts/_base_friend_group.html.erb index c367882e5..71d375501 100644 --- a/app/views/layouts/_base_friend_group.html.erb +++ b/app/views/layouts/_base_friend_group.html.erb @@ -1,5 +1,4 @@ <% attaments_num = @project.attachments.count+Attachment.where(["`container_type` = 'Version' and `container_id` in (?)",@project.versions.map{ |v| v.id}]).all.count %> -
    - <% end %> -
    \ No newline at end of file + <% end %> \ No newline at end of file diff --git a/app/views/layouts/_base_research_team.html.erb b/app/views/layouts/_base_research_team.html.erb index 811a58961..3f942bc40 100644 --- a/app/views/layouts/_base_research_team.html.erb +++ b/app/views/layouts/_base_research_team.html.erb @@ -1,5 +1,4 @@ <% attaments_num = @project.attachments.count+Attachment.where(["`container_type` = 'Version' and `container_id` in (?)",@project.versions.map{ |v| v.id}]).all.count %> -
    - <% end%> -
    \ No newline at end of file + <% end%> \ No newline at end of file diff --git a/app/views/layouts/base_projects.html.erb b/app/views/layouts/base_projects.html.erb index 15e30bfbb..865cf303b 100644 --- a/app/views/layouts/base_projects.html.erb +++ b/app/views/layouts/base_projects.html.erb @@ -43,19 +43,19 @@ if(data == 1) { $("#setting_project_type").replaceWith("<%= escape_javascript(project_type_link(l(:label_development_team)))%>"); - $("#project_memu").html('<%= escape_javascript(render(:partial => 'layouts/base_development_group')) %>'); + $("#project_memu_list").html('<%= escape_javascript(render(:partial => 'layouts/base_development_group')) %>'); $("#close_light").attr("onClick","close_window('development_group');"); } else if(data == 2) { $("#setting_project_type").replaceWith("<%= escape_javascript(project_type_link(l(:label_research_group)))%>"); - $("#project_memu").html('<%= escape_javascript(render(:partial => 'layouts/base_research_team')) %>'); + $("#project_memu_list").html('<%= escape_javascript(render(:partial => 'layouts/base_research_team')) %>'); $("#close_light").attr("onClick","close_window('research_group');"); } else if(data == 3) { $("#setting_project_type").replaceWith("<%= escape_javascript(project_type_link(l(:label_friend_organization)))%>"); - $("#project_memu").html('<%= escape_javascript(render(:partial => 'layouts/base_friend_group')) %>'); + $("#project_memu_list").html('<%= escape_javascript(render(:partial => 'layouts/base_friend_group')) %>'); $("#close_light").attr("onClick","close_window('friend_organization');"); } else @@ -165,13 +165,15 @@ <% end %> - <% if @project.project_new_type == 1 || @project.project_new_type.nil? %> +
    + <% if @project.project_new_type == 1 || @project.project_new_type.nil? %> <%= render :partial => 'layouts/base_development_group', :locals => {:project => @project}%> <% elsif @project.project_new_type == 2 %> <%= render :partial => 'layouts/base_research_team', :locals => {:project => @project}%> - <% else %> + <% else %> <%= render :partial => 'layouts/base_friend_group', :locals => {:project => @project}%> <% end %> +
    From 115d77dd01c006de759e91eb74ff11d9bef3e7e5 Mon Sep 17 00:00:00 2001 From: huang Date: Thu, 16 Apr 2015 09:49:03 +0800 Subject: [PATCH 074/285] =?UTF-8?q?=E5=9C=88=E5=AD=90JS=E5=92=8CmodulesJS?= =?UTF-8?q?=20=E7=89=88=E6=9C=AC=E5=BA=93=E5=88=A0=E9=99=A4=E6=8C=89?= =?UTF-8?q?=E9=92=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/projects_controller.rb | 1 + app/helpers/application_helper.rb | 10 ++++++++++ app/views/projects/modules.js.erb | 10 ++++++++++ app/views/projects/settings.html.erb | 10 ++++++++++ app/views/projects/settings/_new_modules.html.erb | 8 ++++---- app/views/projects/settings/_new_versions.html.erb | 2 +- db/schema.rb | 2 +- 7 files changed, 37 insertions(+), 6 deletions(-) create mode 100644 app/views/projects/modules.js.erb diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 8e9802280..c846de965 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -323,6 +323,7 @@ class ProjectsController < ApplicationController @member ||= @project.members.new @trackers = Tracker.sorted.all @wiki ||= @project.wiki + @select_tab = params[:tab] end def send_mail_to_member diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index fad54f056..bc4a8b093 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -1409,6 +1409,16 @@ module ApplicationHelper link_to l(:button_delete), url, options end + def delete_link_version(url, options={}) + options = { + :method => :delete, + :data => {:confirm => l(:text_are_you_sure)}, + :class => 'c_purple' + }.merge(options) + + link_to l(:button_delete), url, options + end + def delete_new_link(url, options={}) diff --git a/app/views/projects/modules.js.erb b/app/views/projects/modules.js.erb new file mode 100644 index 000000000..9ef3a1e2d --- /dev/null +++ b/app/views/projects/modules.js.erb @@ -0,0 +1,10 @@ +$('#pro_st_tbc_02').html('<%= escape_javascript(render :partial => 'projects/settings/new_modules') %>'); + + +<% if @project.project_new_type == 1 || @project.project_new_type.nil? %> + $('#project_memu_list').html('<%= escape_javascript(render :partial => 'layouts/base_development_group', :locals => {:project => @project}) %>'); +<% elsif @project.project_new_type == 2 %> + $('#project_memu_list').html('<%= escape_javascript(render :partial => 'layouts/base_research_team', :locals => {:project => @project}) %>'); +<% else %> + $('#project_memu_list').html('<%= escape_javascript(render :partial => 'layouts/base_friend_group', :locals => {:project => @project}) %>'); +<% end %> \ No newline at end of file diff --git a/app/views/projects/settings.html.erb b/app/views/projects/settings.html.erb index 3e66fec5e..247656350 100644 --- a/app/views/projects/settings.html.erb +++ b/app/views/projects/settings.html.erb @@ -1,3 +1,13 @@ + +

    配置

    diff --git a/app/views/projects/settings/_new_modules.html.erb b/app/views/projects/settings/_new_modules.html.erb index c6aa26348..d80d27a98 100644 --- a/app/views/projects/settings/_new_modules.html.erb +++ b/app/views/projects/settings/_new_modules.html.erb @@ -5,18 +5,18 @@ <% Redmine::AccessControl.available_project_modules.each do |m| %>
  • <% end %>

    - <%= check_all_links 'modules-form' %> + <%= check_all_links('modules-form').html_safe %>

    - + <%= l(:button_save) %>

    diff --git a/app/views/projects/settings/_new_versions.html.erb b/app/views/projects/settings/_new_versions.html.erb index 06e704495..b05575049 100644 --- a/app/views/projects/settings/_new_versions.html.erb +++ b/app/views/projects/settings/_new_versions.html.erb @@ -28,7 +28,7 @@ <% if version.project == @project && User.current.allowed_to?(:manage_versions, @project) %> <%= link_to l(:button_edit), edit_version_path(version), :class => 'c_purple' %> - <%= delete_link version_path(version) %> + <%= delete_link_version version_path(version) %> <% end %> diff --git a/db/schema.rb b/db/schema.rb index f9ade5aa4..69a07f2ef 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20150409092151) do +ActiveRecord::Schema.define(:version => 20150414115406) do create_table "activities", :force => true do |t| t.integer "act_id", :null => false From 9c0797675158954d402936943c95c667d75ae1ae Mon Sep 17 00:00:00 2001 From: whimlex Date: Thu, 16 Apr 2015 09:54:10 +0800 Subject: [PATCH 075/285] =?UTF-8?q?=E5=B1=95=E5=BC=80=E5=92=8C=E6=94=B6?= =?UTF-8?q?=E8=B5=B7=E6=9B=B4=E5=A4=9A=E4=BF=A1=E6=81=AF=E5=9B=BE=E7=89=87?= =?UTF-8?q?=E6=A0=B7=E5=BC=8F=E4=BF=AE=E6=94=B9=EF=BC=9B=E8=B7=9F=E8=B8=AA?= =?UTF-8?q?=E8=80=85=E6=A0=B7=E5=BC=8F=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/application_helper.rb | 2 +- app/helpers/watchers_helper.rb | 2 +- app/views/issues/_edit.html.erb | 5 ----- app/views/issues/new.html.erb | 4 ++++ app/views/issues/show.html.erb | 6 +++++- app/views/layouts/base_projects.html.erb | 2 +- public/images/jiantou.jpg | Bin 7528 -> 22174 bytes public/images/jiantouup.jpg | Bin 0 -> 22179 bytes public/javascripts/project.js | 3 +++ 9 files changed, 15 insertions(+), 9 deletions(-) create mode 100644 public/images/jiantouup.jpg diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index fad54f056..f9070c417 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -750,7 +750,7 @@ module ApplicationHelper end def other_formats_links(&block) - concat('

    '.html_safe + l(:label_export_to)) + concat('

    '.html_safe + l(:label_export_to)) yield Redmine::Views::OtherFormatsBuilder.new(self) concat('

    '.html_safe) end diff --git a/app/helpers/watchers_helper.rb b/app/helpers/watchers_helper.rb index c4219f4ae..d3b2a49b1 100644 --- a/app/helpers/watchers_helper.rb +++ b/app/helpers/watchers_helper.rb @@ -301,7 +301,7 @@ module WatchersHelper c = checked.nil? ? object.watched_by?(user) : checked s = content_tag(:ul, content_tag(:li, "#{check_box_tag 'issue[watcher_user_ids][]', user.id, c, :id => nil } #{h link_to user.userInfo, user_path( user.id)}".html_safe, - :id=>"issue_watcher_user_ids_#{user.id}",:style=>"float: left;width: 270px;margin: 0px 20px 10px 0px; overflow: hidden; line-height:1.6em;" ), + :id=>"issue_watcher_user_ids_#{user.id}",:style=>"float: left;width: 175px;margin: 0px 20px 10px 0px; overflow: hidden; line-height:1.6em;" ), :class => "mb10 ml80") end.join.html_safe diff --git a/app/views/issues/_edit.html.erb b/app/views/issues/_edit.html.erb index 14e2d0201..02c262dbe 100644 --- a/app/views/issues/_edit.html.erb +++ b/app/views/issues/_edit.html.erb @@ -32,11 +32,6 @@ <%= f.hidden_field :lock_version %> <%= hidden_field_tag 'last_journal_id', params[:last_journal_id] || @issue.last_journal_id %> <%= hidden_field_tag 'reference_user_id', params[:reference_user_id]%> - - <%= l(:button_submit) %> - - <%#= submit_tag l(:button_submit) %> - <%= preview_link preview_edit_issue_path(:project_id => @project, :id => @issue), 'issue-form' ,'preview',{:class => "blue_btn fl ml10"}%> <% end %>
    diff --git a/app/views/issues/new.html.erb b/app/views/issues/new.html.erb index 9bd068fcd..2c4cf4cd3 100644 --- a/app/views/issues/new.html.erb +++ b/app/views/issues/new.html.erb @@ -11,6 +11,10 @@ <%= render :partial => 'issues/form', :locals => {:f => f} %>

    + + <%= l(:button_create) %> + + <%= preview_link preview_new_issue_path(:project_id => @project), 'issue-form', 'preview', {:class => "blue_btn fl ml10"} %> <% end %>
    diff --git a/app/views/issues/show.html.erb b/app/views/issues/show.html.erb index 9c1ce60ab..0b3c4fb06 100644 --- a/app/views/issues/show.html.erb +++ b/app/views/issues/show.html.erb @@ -115,7 +115,11 @@ <% end %> - + + <%= l(:button_submit) %> + + <%#= submit_tag l(:button_submit) %> + <%= preview_link preview_edit_issue_path(:project_id => @project, :id => @issue), 'issue-form' ,'preview',{:class => "blue_btn fr mr10"}%> <% if @changesets.present? %> diff --git a/app/views/layouts/base_projects.html.erb b/app/views/layouts/base_projects.html.erb index 15e30bfbb..36dbef692 100644 --- a/app/views/layouts/base_projects.html.erb +++ b/app/views/layouts/base_projects.html.erb @@ -187,7 +187,7 @@
    - +
    diff --git a/public/images/jiantou.jpg b/public/images/jiantou.jpg index cd28409886d0f4f3d97e76ce5e6f920a4458da3e..daed7f5df8c318351ec5cedb7ad8292520e256be 100644 GIT binary patch literal 22174 zcmeHPdvF`Y8Q;_U<%euJF~Ja7cH%&>q?6>Au;W%_qX5feYZDK?qKdMRDMzKKrf;w3iZPu${nse*)y3KMJN1Tk_#CZO zE3o#p31))f?9EQv+0yKGJLzU`YZLOg=_bG1=ck+P?l!-#+3)cnq?x8f|0I_~Xj&!t zA;>bVE~Is{K8X?gFG%r8ewgN`j9OtpVL)L(VL)M^hyfj?&YyAUiqAo;KbbuTv5pp> zgQzIUx3H#F1)oE;C9e}sTkwerK6ODDq zQ(IH(ksWfokkx>6$fBldk;+P`tyFF=S`59^!Z{H>D#`~+rPgS5dV|qq2Ee1`NJXjD zDvesJ)xbdybvcwHja6GwOLyriFAnP+n{1vdZ@kM;7kFrQ)zH3U_1*}#)o5Cwk8`wwrFg<<{G7zhnE|_uPBmj+y&^_3NDvKl12fk3aGIKkRvC@3YT6|H6we?SJLf z1FyY)@X#BFkG%cPyYIdK!QVeT{>h0?KRfyP7pK0&;{wl699Cgur;W=B<5FofYKtBN`ozM<6RH!Hr9EEj#WjteWnHVzQaq7Z{XR3$x~ZVCp!7!WpCDgwe`Wu<-2xXVP3p?!}bfSua7P}5o>sFwBzeP z-LK9a${jWRk$Bbo7@M(soo>_`7zp8MgwS0>U5eCaFX^iRzgV?>M~$irHOlkKk*IG8 z(O3TQbg1F7C#L`L=PwtqFRiTJMcVR{vYQ|-hmUAv<_woe3#+q2CM$ptA3dUAk{f2y z*_4#V*P*^Z5MKw<0wa~-G?oFLU_+TeGQzS+thtQn9ZpPQcpxEQImU|ZG2E(fiW%uy zKLR2QC;ht+1E`%4&GxUNsDG<7LV`{6P+ozN!HkfW)IuL3Tp=?Q=R<`|kV^+=GihNq zvoez83ni=K!gwLmlS+0MGBC_p)q&{7`0B`pD72qnrFmxX0WKPf+3hhl8(G1=g|j5| zap^N;f#jLE02doslNNgGhLU(D3L%h;+2@lF@kxQm2Pcy&h6-@gI1?3Et~)G*@d!vK z2jhdhG-)`E!EhxLx{?_c)tuJs2w3TS%??MCqI{5xuDC>O7SEpgC`p%#yDgkai@UFi z%^sXVrK{#qr>*n8t4a^k@T0pfJ1%5D<&9Ajumq1{FfF z4A&~wL_oy=sn+aLMd@r3uW|fnuZytRbc{c3r9=f9%E*?7%`3^K#wQa|hF_apiH(_>(~g#uff(-+dXgFFF4C=!b8I#hG%Mqoaz=2h1^*V!AZSfKhN>f`wYr8HE zS2{Lb>CxH1%L~-iR}JlsczxW~eL?+_ZNtY7ACK})3+~=|)za>pMq)jC?h%?7?q73+ z`Q+iNpLr$w_KDtxoA15mkz4k@`p&2KJ^Ji{cRyP@I)3e~J05%Pwf9c8^sS3eTzA{d z%yuC+$8r30$JB$GBR#jY{&LYNYUcCXSMPt| zROiVzelfG^=$#Kdb>PWUFL>#%p6=V1L%Uvod7yqKcZk?oEm#UdYp}gwLn}jFC^v|M0^vuU@>?QzkbM!LoC_4wUxdpG}k=dpj|@@&t|zO(=!g;tiz3E{6UU^J0!TCOos!% zC1`Ye8r|Lzy4mk;g|`Ghg4pdAp&>Sw7~Omt)Hg!A{XVy!_RfKV8N|Sy{YG#s>K|pf zR2cf7NQL8!YeR;KJM0Bo{NyeIEkpObq#L1-e;~~Z;dGQ4=||p7;V6ED>TvMkaVF--3lrao0#V__7z64GlYQn4iZJ|g zX(G%qU2&jGTFJAI!@=Pu>D80espwcZ9cN(wa5-Gk&|G+-6~@-?nrHl&6VVRAkzm>6 za#>H&MCF|7?WE13#g6+T3Sk?83{;V}Fvv-p&G&g#8j;1WLYG39ECytO73)&ylEr{5 zuwq>bU9uRE1y-y}p-UD6vcQUUDRjwVKo(fBE`=^x49Eg2)}_!Tivd|+#kv%_WHBHM ztXP*qmn;Tkffegg=#s^NEU;o-3SF`okOfw(OQA~^1G2!1bt!boVn7yHu`Y!!Sq#Vm zE7qmZC5r)BV8yx=x@0jR3#?d|LYFKCWPugyQs|P!fGn_LT?$>Y7?1^4tm}VH*X-Az zm~^b8VWOdPIr-TMwMvEmA!y)VYrsF?pf$nw&kPom#RA{)gRkpVl$VrROU>r;1?ARC zTUAw+rEFpK0$X*3t;$Azc0vtxG+LupYqXV^OKh^kd|&EQes<#j_-7}+u79=m>0`g$ z`^xsV-+VN)KC<=QgO}gg*Q)KWnfa>Sdho!TR~Qa?Zhh+K*$W@5e{oZ$t>LfKp5IL` N{>%1d(`C6s{{jS?_-X(E delta 1190 zcmbQYmhpvE{r?;PA2OG@R%E6zFnD@uF>o+2Ft9TSF)}kS0$Cs|#mEY#lYne#C_4+t z)_|&E0&0*EvI|7T!eS^zPM2P6Y!vjN!Qah%m24r9g_t_Bz5^^7^4`N zrB&T!fa;lMEn~27^7Lg<1?glE5UTpV=fk?izt_hvoL95xV$bF-5hpGtp2L$AWG26o zGhGd~Zg9V`^&;s##8IXksPAvG_>R;gUc-tPZ920q7>{G?Qd6j10e{=d!8!obGD!oteJ#>&dZ z$p*yS9BgbH+&o-d++18d0z6l|V!O6wV2#i~1WLcm9GYcylSWi*QKl@p=o7h>VJk87p?2xbfnLrln_OW@YEhl{-(~eECz$$}1|Xs%zG& zU8ion`UUhY6VOqttUxETa4<9H0-Z0&%mQ*CYaq~pY=w;zjTUbFAad~HLuDt?proRY z#wsSxO=6RRRTm|1I>cUl$@Gy+vv|m4U|>i{s+qY;si&0Ghnjy{y!o((=H>DT`CsLK NhN}YX diff --git a/public/images/jiantouup.jpg b/public/images/jiantouup.jpg new file mode 100644 index 0000000000000000000000000000000000000000..01445ab5463f297df93225f3aa067f373211eba0 GIT binary patch literal 22179 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 Ry;ZyK_sb4nw?vyi_)mbJ02u%P literal 0 HcmV?d00001 diff --git a/public/javascripts/project.js b/public/javascripts/project.js index 2ee9c1c83..3a60f51c0 100644 --- a/public/javascripts/project.js +++ b/public/javascripts/project.js @@ -38,16 +38,19 @@ function expand_tools_expand() function show_more_msg(){ $("#course_description").toggleClass("course_description_none"); var information = $("#expend_more_information"); + var arrow = $("#arrow"); var val = information.attr("value"); if (val=="展开更多信息" ) { $("#expend_more_information").text("收起描述信息"); information.attr("value","收起描述信息"); + arrow.attr("src","/images/jiantouup.jpg") } else { $("#expend_more_information").text("展开更多信息"); information.attr("value","展开更多信息"); + arrow.attr("src","/images/jiantou.jpg") } } From bd800a53e4b6181b85f7a42aa741baed7c6f811a Mon Sep 17 00:00:00 2001 From: huang Date: Thu, 16 Apr 2015 10:00:36 +0800 Subject: [PATCH 076/285] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E7=AE=80=E4=BB=8B?= =?UTF-8?q?=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/layouts/base_projects.html.erb | 2 +- config/locales/projects/zh.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/views/layouts/base_projects.html.erb b/app/views/layouts/base_projects.html.erb index cc4d9ff06..e9bbd0f4a 100644 --- a/app/views/layouts/base_projects.html.erb +++ b/app/views/layouts/base_projects.html.erb @@ -181,7 +181,7 @@
    -

    <%= l(:label_course_brief_introduction)%>:

    +

    <%= l(:label_project_overview)%>:

    <%= textilizable(@project.description) if @project.description && !@project.description.blank? %>
    diff --git a/config/locales/projects/zh.yml b/config/locales/projects/zh.yml index e278cb091..7a868098a 100644 --- a/config/locales/projects/zh.yml +++ b/config/locales/projects/zh.yml @@ -85,7 +85,7 @@ zh: project_module_dts: DTS测试工具 label_project_tool_response: 用户反馈 - label_project_overview: "项目简介:" + label_project_overview: "项目简介" label_expend_information: 展开更多信息 label_project_create: "新建了项目" From e2f7da5b9950e2068959ebee75547ed91dbd7125 Mon Sep 17 00:00:00 2001 From: huang Date: Thu, 16 Apr 2015 10:31:42 +0800 Subject: [PATCH 077/285] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=87=8C=E7=A8=8B?= =?UTF-8?q?=E7=A2=91=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/versions/index.html.erb | 103 ------------------------------ 1 file changed, 103 deletions(-) diff --git a/app/views/versions/index.html.erb b/app/views/versions/index.html.erb index 2e9004de3..be4fb27ef 100644 --- a/app/views/versions/index.html.erb +++ b/app/views/versions/index.html.erb @@ -70,109 +70,6 @@ <% end %>
    - - - - - - - -
    -

    <%= l(:label_roadmap) %>

    -
    -
    - <%= link_to l(:label_version_new), new_project_version_path(@project), :class => 'icon icon-add' if User.current.allowed_to?(:manage_versions, @project) %> -
    - - - - - - -<% if @versions.empty? %> -

    <%= l(:label_no_data) %>

    -<% else %> -
    - <% @versions.each do |version| %> -
    -

    -

    - <%= link_to_version version, :name => version_anchor(version) %> - <% if version.completed? %> - <%= format_date(version.effective_date) %> - <% elsif version.effective_date %> - <%= due_date_distance_in_words(version.effective_date) %> (<%= format_date(version.effective_date) %>) - <% end %> -

    -

    - <%= render :partial => 'versions/overview', :locals => {:version => version} %> - <%= render(:partial => "wiki/content", :locals => {:content => version.wiki_page.content}) if version.wiki_page %> - <% if (issues = @issues_by_version[version]) && issues.size > 0 %> - <%= form_tag({}) do -%> - - - <% issues.each do |issue| -%> - - - - <% end -%> - - <% end %> - <% end %> - - »<%= l(:label_versions_description)%> -

    <%=h version.description %>

    - <% if version.custom_field_values.any? %> -
      - <% version.custom_field_values.each do |custom_value| %> - <% if custom_value.value.present? %> -
    • <%=h custom_value.custom_field.name %>: <%=h show_value(custom_value) %>
    • - <% end %> - <% end %> -
    - <% end %> - - <%= call_hook :view_projects_roadmap_version_bottom, :version => version %> -
    - <% end %> - -
    -<% end %> - - <% html_title(l(:label_roadmap)) %> <%= context_menu issues_context_menu_path %> From fe94efeb39aa9a75a0a78bec44d67c6eb3c9f17f Mon Sep 17 00:00:00 2001 From: lizanle <491823689@qq.com> Date: Thu, 16 Apr 2015 10:50:53 +0800 Subject: [PATCH 078/285] =?UTF-8?q?=E6=96=B0=E5=BB=BA=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E6=9B=B4=E6=94=B9=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../projects/settings/_new_versions.html.erb | 44 ++++++++++++++++++- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/app/views/projects/settings/_new_versions.html.erb b/app/views/projects/settings/_new_versions.html.erb index 06e704495..75216ebb3 100644 --- a/app/views/projects/settings/_new_versions.html.erb +++ b/app/views/projects/settings/_new_versions.html.erb @@ -1,3 +1,10 @@ + <% if @project.shared_versions.any? %> @@ -44,12 +51,45 @@ <%= link_to l(:label_close_versions), close_completed_project_versions_path(@project), :method => :put, :class =>"c_orange fr" %> <% end %> - <%= link_to l(:label_version_new), new_project_version_path(@project, :back_url => ''), :class => 'c_blue fl' if User.current.allowed_to?(:manage_versions, @project) %> + <%= link_to l(:label_version_new),"#", :class => 'c_blue fl',:onclick=>"pro_st_show_ban();" if User.current.allowed_to?(:manage_versions, @project) %>
    +<%= form_for :version, :url => project_versions_path(@project),:html=>{:id=>"new_project_version_form"} do |f| %>
    - +
      +
    • + + <%= f.text_field :name, :maxlength => 60, :required => true %> +
    • +
    • + + <%= f.text_field :description, :maxlength => 60 %> +
    • +
    • + + <%= f.select :status, Version::VERSION_STATUSES.collect {|s| [l("version_status_#{s}"), s]} %> +
    • +
    • + + <%= f.text_field :wiki_page_title, :size =>60, :label => :label_wiki_page, :disabled => @project.wiki.nil? %> +
    • +
    • + + <%= f.text_field :effective_date, :size => 10, :readonly => true %> + <%= calendar_for('version_effective_date') %> +
    • +
      +
    • + + +
    • + 保存 +
    +<% end %> From dc81db1d8b22ad7e2edb89d5cd97161c3b819042 Mon Sep 17 00:00:00 2001 From: huang Date: Thu, 16 Apr 2015 11:07:37 +0800 Subject: [PATCH 079/285] =?UTF-8?q?=E5=A4=84=E7=90=86=E8=AE=A8=E8=AE=BA?= =?UTF-8?q?=E5=8C=BA=E3=80=81=E7=BC=BA=E9=99=B7=E5=88=97=E8=A1=A8=E6=A0=B7?= =?UTF-8?q?=E5=BC=8F=E6=98=BE=E7=A4=BA=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/boards/_project_show.html.erb | 38 ++++++++++--------------- public/stylesheets/public.css | 8 +++--- 2 files changed, 19 insertions(+), 27 deletions(-) diff --git a/app/views/boards/_project_show.html.erb b/app/views/boards/_project_show.html.erb index 69866aa2c..7af313188 100644 --- a/app/views/boards/_project_show.html.erb +++ b/app/views/boards/_project_show.html.erb @@ -8,13 +8,16 @@ }
    -

    <%= h @board.name %>

    +

    + <% if User.current.language == "zh"%> + <%= h @board.name %> + <% else %> + <%= l(:project_module_boards) %> + <% end %> +

    <% if User.current.logged? %> -
    -

    <%= l(:project_module_boards_post) %>

    -
    <%= form_for @message, :url => new_board_message_path(@board), :html => {:multipart => true, :id => 'message-form'} do |f| %> <%= render :partial => 'messages/form_project', :locals => {:f => f} %>

    @@ -42,18 +45,10 @@

    -
    -

    - <% if User.current.language == "zh"%> - <%= h @board.name %> - <% else %> - <%= l(:project_module_boards) %> - <% end %> -

    -
    +
    -
    <%= l(:label_project_board_count , :count => @topic_count)%>
    - <% if @project.enabled_modules.where("name = 'boards'").count > 0 && User.current.member_of?(@project) %> +
    <%= l(:label_project_board_count , :count => @topic_count)%>
    + <% if @project.enabled_modules.where("name = 'boards'").count > 0 && User.current.member_of?(@project) %> <%= link_to l(:project_module_boards_post), new_board_message_path(@board), :class => 'problem_new_btn fl c_dorange', :onclick => 'showAndScrollTo("add-message", "message_subject"); return false;' if User.current.logged? %> @@ -66,16 +61,13 @@
    <%= link_to image_tag(url_to_avatar(topic.author), :width=>"32",:height=>"32"), user_path(topic.author),:class => 'problem_pic talk_pic fl' %>
    -
    - <%= link_to h(topic.subject), board_message_path(@board, topic), title:topic.subject.to_s, :class =>"problem_tit fl" %> + <%= link_to h(topic.subject), board_message_path(@board, topic), title:topic.subject.to_s, :class =>"problem_tit fl" %> <% if topic.sticky? %> - <%= l(:label_board_sticky)%> + <%= l(:label_board_sticky)%> <% end %> -
    -
    - <%= l(:label_post_by)%><%= link_to topic.author, user_path(topic.author), :class =>"problem_name" %> -  <%= l(:label_post_by_time)%><%= format_time topic.created_on %> -
    +
    + <%= l(:label_post_by)%><%= link_to topic.author, user_path(topic.author), :class =>"problem_name" %> +  <%= l(:label_post_by_time)%><%= format_time topic.created_on %>
    <%= link_to (l(:label_short_reply) + " "+topic.replies_count.to_s), board_message_path(@board, topic), :style =>"color:#fff;line-height: 18px;" %>
    diff --git a/public/stylesheets/public.css b/public/stylesheets/public.css index d9261c10e..16d5ccd13 100644 --- a/public/stylesheets/public.css +++ b/public/stylesheets/public.css @@ -159,10 +159,10 @@ a:hover.blue_u_btn{background:#64bdd9; color:#fff;} .nolink_btn{ background:#BCBCBC; color: #fff; padding:2px 5px;} .more_btn{-moz-border-radius:3px; -webkit-border-radius:3px; border:1px solid #9DCEFF; color:#9DCEFF; border-radius:3px; padding:0px 3px;} /*.upbtn{ margin:42px 0 0 10px; border:none; color:#999; }*/ -.red_btn_cir{ background:#e74c3c; padding:1px 10px; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; color:#fff; font-weight:normal;font-size:12px;} -.green_btn_cir{ background:#28be6c; padding:1px 10px; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; color:#fff; font-weight:normal;font-size:12px;} -.blue_btn_cir{ background:#3498db; padding:1px 10px; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; color:#fff; font-weight:normal;font-size:12px;} -.orange_btn_cir{ background:#e67e22; padding:1px 10px; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; color:#fff; font-weight:normal; font-size:12px;} +.red_btn_cir{ background:#e74c3c; padding:1px 10px; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; color:#fff; font-weight:normal;font-size:12px;white-space:nowrap;} +.green_btn_cir{ background:#28be6c; padding:1px 10px; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; color:#fff; font-weight:normal;font-size:12px;white-space:nowrap;} +.blue_btn_cir{ background:#3498db; padding:1px 10px; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; color:#fff; font-weight:normal;font-size:12px;white-space:nowrap;} +.orange_btn_cir{ background:#e67e22; padding:1px 10px; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; color:#fff; font-weight:normal; font-size:12px;white-space:nowrap;} /* commonpic */ .pic_date{ display:block; background:url(../images/new_project/public_icon.png) -31px 0 no-repeat; width:16px; height:15px; float:left;} .pic_add{ display:block; background:url(../images/new_project/public_icon.png) -31px -273px no-repeat; width:16px; height:15px; float:left;} From 38672458b04f5521363d8a3935ea98fb902a3cb7 Mon Sep 17 00:00:00 2001 From: lizanle <491823689@qq.com> Date: Thu, 16 Apr 2015 11:07:38 +0800 Subject: [PATCH 080/285] =?UTF-8?q?=E6=96=B0=E5=BB=BA=E7=89=88=E6=9C=AC=20?= =?UTF-8?q?=20=E6=9B=B4=E6=94=B9=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/projects/settings/_new_versions.html.erb | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/app/views/projects/settings/_new_versions.html.erb b/app/views/projects/settings/_new_versions.html.erb index 1d16a21e1..7d513f192 100644 --- a/app/views/projects/settings/_new_versions.html.erb +++ b/app/views/projects/settings/_new_versions.html.erb @@ -74,16 +74,13 @@
  • - <%= f.text_field :effective_date, :size => 10, :readonly => true %> + <%= f.text_field :effective_date, :size => 10, :readonly => true,:class=>" fl" %> <%= calendar_for('version_effective_date') %>
  • - + <%= f.select :sharing, @project.versions.build.allowed_sharings.collect {|v| [format_version_sharing(v), v]} %>
  • 保存 From a4d6eaa46c35b0d9995e4826d024747b0d0b08cc Mon Sep 17 00:00:00 2001 From: lizanle <491823689@qq.com> Date: Thu, 16 Apr 2015 11:08:00 +0800 Subject: [PATCH 081/285] =?UTF-8?q?=E8=B7=B3=E8=BD=AC=E5=9B=9E=E6=9D=A5?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E9=80=89=E6=8B=A9tab=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/projects/settings.html.erb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/views/projects/settings.html.erb b/app/views/projects/settings.html.erb index 247656350..7775c9c3c 100644 --- a/app/views/projects/settings.html.erb +++ b/app/views/projects/settings.html.erb @@ -3,6 +3,8 @@ $(function(){ <%if @select_tab == "modules"%> project_setting(2); + <% else @select_tab == "versions"%> + project_setting(4); <% end%> }); <% end%> From 871623b7c822641491ee2f093dd7e838be3517d4 Mon Sep 17 00:00:00 2001 From: lizanle <491823689@qq.com> Date: Thu, 16 Apr 2015 11:14:12 +0800 Subject: [PATCH 082/285] commit --- db/schema.rb | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/db/schema.rb b/db/schema.rb index b5fcc8a7f..f9ade5aa4 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20150415032102) do +ActiveRecord::Schema.define(:version => 20150409092151) do create_table "activities", :force => true do |t| t.integer "act_id", :null => false @@ -969,25 +969,26 @@ ActiveRecord::Schema.define(:version => 20150415032102) do end create_table "projects", :force => true do |t| - t.string "name", :default => "", :null => false + t.string "name", :default => "", :null => false t.text "description" - t.string "homepage", :default => "" - t.boolean "is_public", :default => true, :null => false + t.string "homepage", :default => "" + t.boolean "is_public", :default => true, :null => false t.integer "parent_id" t.datetime "created_on" t.datetime "updated_on" t.string "identifier" - t.integer "status", :default => 1, :null => false + t.integer "status", :default => 1, :null => false t.integer "lft" t.integer "rgt" - t.boolean "inherit_members", :default => false, :null => false + t.boolean "inherit_members", :default => false, :null => false t.integer "project_type" - t.boolean "hidden_repo", :default => false, :null => false - t.integer "attachmenttype", :default => 1 + t.boolean "hidden_repo", :default => false, :null => false + t.integer "attachmenttype", :default => 1 t.integer "user_id" - t.integer "dts_test", :default => 0 + t.integer "dts_test", :default => 0 t.string "enterprise_name" t.integer "organization_id" + t.integer "project_new_type" end add_index "projects", ["lft"], :name => "index_projects_on_lft" @@ -1458,7 +1459,7 @@ ActiveRecord::Schema.define(:version => 20150415032102) do t.string "file_path" t.integer "pack_times", :default => 1 t.integer "pack_size", :default => 0 - t.text "file_digests" + t.string "file_digests" t.datetime "created_at", :null => false t.datetime "updated_at", :null => false end From e34a00f66e1d3cceeac8b099a352e20c742bee36 Mon Sep 17 00:00:00 2001 From: huang Date: Thu, 16 Apr 2015 11:17:44 +0800 Subject: [PATCH 083/285] =?UTF-8?q?=E8=AE=A8=E8=AE=BA=E5=8C=BA=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E6=A0=B7=E5=BC=8F=E5=86=B2=E7=AA=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/boards/_form.html.erb | 15 +++++++++++++++ app/views/boards/_project_show.html.erb | 16 +++++++--------- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/app/views/boards/_form.html.erb b/app/views/boards/_form.html.erb index c1ab085cf..47ae0672d 100644 --- a/app/views/boards/_form.html.erb +++ b/app/views/boards/_form.html.erb @@ -13,3 +13,18 @@

    <% end %>
    + + + +
    + <%= link_to h(topic.subject), board_message_path(@board, topic), title:topic.subject.to_s, :class =>"problem_tit fl" %> + <% if topic.sticky? %> + <%= l(:label_board_sticky)%> + <% end %> +
    + <%= l(:label_post_by)%><%= link_to topic.author, user_path(topic.author), :class =>"problem_name" %> +  <%= l(:label_post_by_time)%><%= format_time topic.created_on %> +
    +<%= link_to (l(:label_short_reply) + " "+topic.replies_count.to_s), board_message_path(@board, topic), :style =>"color:#fff;line-height: 18px;" %> +
    +
    \ No newline at end of file diff --git a/app/views/boards/_project_show.html.erb b/app/views/boards/_project_show.html.erb index 7af313188..fa16fcb51 100644 --- a/app/views/boards/_project_show.html.erb +++ b/app/views/boards/_project_show.html.erb @@ -44,19 +44,17 @@ <% end %> -
    - -
    -
    <%= l(:label_project_board_count , :count => @topic_count)%>
    - <% if @project.enabled_modules.where("name = 'boards'").count > 0 && User.current.member_of?(@project) %> +
    +
    <%= l(:label_project_board_count , :count => @topic_count)%>
    +<% if @project.enabled_modules.where("name = 'boards'").count > 0 && User.current.member_of?(@project) %> <%= link_to l(:project_module_boards_post), new_board_message_path(@board), :class => 'problem_new_btn fl c_dorange', :onclick => 'showAndScrollTo("add-message", "message_subject"); return false;' if User.current.logged? %> <% end %> -
    -
    +
    +
    - <% if @topics.any? %> +<% if @topics.any? %> <% @topics.each do |topic| %>
    <%= link_to image_tag(url_to_avatar(topic.author), :width=>"32",:height=>"32"), user_path(topic.author),:class => 'problem_pic talk_pic fl' %> @@ -76,7 +74,7 @@ <% else %>

    <%= l(:label_no_data) %>

    <% end %> -
      +
        <%= pagination_links_full @topic_pages, @topic_count, :per_page_links => false, :remote => false, :flag => true %>
      From 8803942a0291b1f9b079035b43dc6cade7bd768e Mon Sep 17 00:00:00 2001 From: huang Date: Thu, 16 Apr 2015 11:35:38 +0800 Subject: [PATCH 084/285] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E8=AE=A8=E8=AE=BA?= =?UTF-8?q?=E5=8C=BA=EF=BC=8C=E5=BC=95=E7=94=A8=E6=A0=B7=E5=BC=8F=E8=B0=83?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/messages/_project_show.html.erb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/views/messages/_project_show.html.erb b/app/views/messages/_project_show.html.erb index 33f55cfac..3dbfe3a8d 100644 --- a/app/views/messages/_project_show.html.erb +++ b/app/views/messages/_project_show.html.erb @@ -50,12 +50,12 @@
      ">
      <%= link_to image_tag(url_to_avatar(message.author), :width => '46',:height => '46'), user_path(message.author) %>
      -
      +
      <%= link_to_user_header message.author,false,:class => 'c_blue fb fl mb10 ' %> <%= format_time(message.created_on) %>
      -

      <%= textilizable message,:content,:attachments => message.attachments %>

      - <%= link_to_attachment_project message, :author => false %> +

      <%= textAreailizable message,:content,:attachments => message.attachments %>

      + <%= link_to_attachments_course message, :author => false %>
      <%= link_to( From 301e44c6958325743e742dea154660b831c63c0f Mon Sep 17 00:00:00 2001 From: whimlex Date: Thu, 16 Apr 2015 12:15:36 +0800 Subject: [PATCH 085/285] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=99=84=E4=BB=B6?= =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E5=8A=9F=E8=83=BD=E6=97=A0=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/attachments/_form.html.erb | 3 +++ app/views/issues/_edit.html.erb | 17 +++++++++-------- app/views/issues/show.html.erb | 1 + public/stylesheets/project.css | 6 +++++- 4 files changed, 18 insertions(+), 9 deletions(-) diff --git a/app/views/attachments/_form.html.erb b/app/views/attachments/_form.html.erb index d3ce35caf..7e86b098b 100644 --- a/app/views/attachments/_form.html.erb +++ b/app/views/attachments/_form.html.erb @@ -32,6 +32,9 @@ %> <%#= render :partial => 'tags/tag', :locals => {:obj => attachment, :object_flag => "6"} %> + <%= hidden_field_tag "attachments[p#{i}][token]", "#{attachment.token}" %> + + <% end %> <% end %> +<%= error_messages_for 'repository' %> <% project_path_cut = RepositoriesHelper::PROJECT_PATH_CUT %> <% ip = RepositoriesHelper::REPO_IP_ADDRESS %> <% if @project.repositories.any? %> @@ -48,7 +55,44 @@ <% course_tag = @project.project_type %> <% if User.current.allowed_to?(:manage_repository, @project) %> - <%= link_to l(:label_repository_new_repos), newrepo_project_repository_path(@project, :course => course_tag), :class => 'c_blue fl' %>

      + + <%= link_to l(:label_repository_new_repos),"#" , :onclick=>"pro_st_show_ku();", :class => 'c_blue fl' %>

      <% end %>
      + +<%= labelled_form_for :repository, @repository, :url =>project_repositories_path(@project),:html => {:id => 'repository-form',:method=>"post"} do |f| %> +
      +
        +
      • + + <%= select_tag('repository_scm', + options_for_select(["Git"],@repository.class.name.demodulize), + :data => {:remote => true, :method => 'get'})%> + <% if @repository && ! @repository.class.scm_available %> + <%= l(:text_scm_command_not_available) %> + <% end %> +
      • +
      • + + <%= f.check_box :is_default, :label => "" %>

        +
      • +
      • + + <%= f.text_field :identifier, :disabled =>@repository.nil? || @repository.identifier_frozen? ? true:false,:label=>""%> + <% unless @repository.identifier_frozen? %> + 长度必须在 1 到 254 个字符之间。 仅小写字母(a-z)、数字、破折号(-)和下划线(_)可以使用。 +一旦保存,标识无法修改。 + <% end %> +
      • +
      • + + <%= f.password_field :upassword, :label=> "" %> + 该密码在项目组内可共享 +
      • +
        +
      + 保存 + 取消 +
      +<% end %> \ No newline at end of file diff --git a/app/views/versions/_form.html.erb b/app/views/versions/_form.html.erb index b9759dd4d..734fc459e 100644 --- a/app/views/versions/_form.html.erb +++ b/app/views/versions/_form.html.erb @@ -1,34 +1,34 @@ <%= back_url_hidden_field_tag %> <%= error_messages_for 'version' %> - -
      -

      - <%= f.text_field :name, :maxlength => 60, :required => true %> -

      -

      - <%= f.text_field :description, :maxlength => 60, :style => "margin-left:10px;" %> -

      -

      - - <%= f.select :status, Version::VERSION_STATUSES.collect {|s| [l("version_status_#{s}"), s]} %> - -

      -

      - - <%= f.text_field :wiki_page_title, :size =>60, :label => :label_wiki_page, :disabled => @project.wiki.nil? %> - -

      -

      - - <%= f.text_field :effective_date, :size => 10, :readonly => true %> - <%= calendar_for('version_effective_date') %> - -

      -

      - - <%= f.select :sharing, @version.allowed_sharings.collect {|v| [format_version_sharing(v), v]} %> - -

      +
      +
        +
      • + + <%= f.text_field :name, :maxlength => 60,:class=>" w280", :label => ""%> +
      • +
      • + + <%= f.text_field :description, :maxlength => 60,:class=>" w280", :label => "" %> +
      • +
      • + + <%= f.select :status, Version::VERSION_STATUSES.collect {|s| [l("version_status_#{s}"), s]}, :label => "" %> +
      • +
      • + + <%= f.text_field :wiki_page_title, :size =>60, :label => "", :disabled => @project.wiki.nil? %> +
      • +
      • + + <%= f.text_field :effective_date, :size => 10, :readonly => true,:class=>'f1',:label => "" %> + <%= calendar_for('version_effective_date') %> +
      • +
        +
      • + + <%= f.select :sharing, @version.allowed_sharings.collect {|v| [format_version_sharing(v), v]},:label=>"" %> +
      • +
      <% @version.custom_field_values.each do |value| %>

      diff --git a/app/views/versions/edit.html.erb b/app/views/versions/edit.html.erb index 39db07c9d..c249572aa 100644 --- a/app/views/versions/edit.html.erb +++ b/app/views/versions/edit.html.erb @@ -1,7 +1,7 @@

      <%=l(:label_version)%>

      -<%= labelled_form_for @version do |f| %> +<%= labelled_form_for @version,:html=>{:id=>"new_project_version_form"} do |f| %> <%= render :partial => 'form', :locals => { :f => f } %> -<%= submit_tag l(:button_save) %> + 保存 <% end %> diff --git a/public/stylesheets/project.css b/public/stylesheets/project.css index f0490002f..20a603114 100644 --- a/public/stylesheets/project.css +++ b/public/stylesheets/project.css @@ -404,6 +404,8 @@ a:hover.member_btn{ background:#329cbd;} .pro_st_edit_issues{ display:none; margin-top:20px;} .pro_st_edit_issues ul li{ margin-bottom:10px;} .pro_st_edit_ban{ display:none; margin-top:20px;} +.pro_st_edit_ban_display{ margin-top:20px;} +.pro_st_edit_ban_display ul li{ margin-bottom:10px;} .pro_st_edit_ban ul li{ margin-bottom:10px;} .pro_st_edit_ku{display:none; margin-top:20px;} .pro_st_edit_ku ul li{margin-bottom:10px;} From 9621c35e8b16c0f280e3dff8aa151900887ed81e Mon Sep 17 00:00:00 2001 From: lizanle <491823689@qq.com> Date: Thu, 16 Apr 2015 15:08:46 +0800 Subject: [PATCH 091/285] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=20=E7=89=88=E6=9C=AC?= =?UTF-8?q?=20=E5=92=8C=20=E7=89=88=E6=9C=AC=E5=BA=93=20=E6=A0=87=E7=AD=BE?= =?UTF-8?q?=E6=94=B9=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/projects_controller.rb | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 33de4e137..a70488618 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -325,16 +325,15 @@ class ProjectsController < ApplicationController @wiki ||= @project.wiki @select_tab = params[:tab] - #版本库逻辑,由于没有new操作了,所以跳到项目配置就new一个版本库 + # 处理从新建版本库返回来的错误信息 if !params[:repository_error_message].to_s.blank? html = "" errors = params[:repository_error_message].flatten errors.each do |error| - ###by xianbo + # 版本库路径为空的错误信息不予提示 if(error!=l(:label_repository_path_not_null)) html << error << ";" end - ###xianbo end if params[:repository] == "pswd_is_null" html << l(:label_password_not_null)<< ";" From b80251a24730f8c2cdf1c4bd257b9830ae4a9e89 Mon Sep 17 00:00:00 2001 From: huang Date: Thu, 16 Apr 2015 15:16:15 +0800 Subject: [PATCH 092/285] =?UTF-8?q?=E9=93=BE=E6=8E=A5=E7=A9=BA=E7=99=BD?= =?UTF-8?q?=E5=A4=84=E6=94=B9=E6=88=90=E4=B8=8D=E8=83=BD=E7=82=B9=E5=87=BB?= =?UTF-8?q?=20=E4=BF=AE=E5=A4=8D=E9=A1=B9=E7=9B=AE=E6=A0=87=E9=A2=98?= =?UTF-8?q?=E8=BF=87=E9=95=BF=EF=BC=8C=E5=B8=83=E5=B1=80=E5=8F=98=E5=BD=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/layouts/base_projects.html.erb | 9 +++++---- app/views/wiki/show.html.erb | 2 +- public/stylesheets/project.css | 2 +- public/stylesheets/public.css | 1 + 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/app/views/layouts/base_projects.html.erb b/app/views/layouts/base_projects.html.erb index fb50605b6..24f2c6ebf 100644 --- a/app/views/layouts/base_projects.html.erb +++ b/app/views/layouts/base_projects.html.erb @@ -81,7 +81,7 @@ <%= l(:label_projects_community) %> -

      +

      - + <%= l(:label_project_name) %><%= @project.name %> <% if @project.is_public? %> <%= l(:label_public)%> @@ -182,7 +182,7 @@

      <%= l(:label_project_overview)%>:

      -
      +
      <%= textilizable(@project.description) if @project.description && !@project.description.blank? %>
      @@ -205,7 +205,7 @@
      -
      +
      <%= render_flash_messages %> @@ -213,6 +213,7 @@ <%= call_hook :view_layouts_base_content %>
      +
      <%= render :partial => 'layouts/new_footer'%> diff --git a/app/views/wiki/show.html.erb b/app/views/wiki/show.html.erb index 1d585a571..a23aa6c04 100644 --- a/app/views/wiki/show.html.erb +++ b/app/views/wiki/show.html.erb @@ -73,7 +73,7 @@
      <% end %> -
      +

      <% other_formats_links do |f| %> <%= f.link_to 'PDF', :url => {:id => @page.title, :version => params[:version]} %> <%= f.link_to 'HTML', :url => {:id => @page.title, :version => params[:version]} %> diff --git a/public/stylesheets/project.css b/public/stylesheets/project.css index 4cb344430..2f4ca5843 100644 --- a/public/stylesheets/project.css +++ b/public/stylesheets/project.css @@ -71,7 +71,7 @@ a:hover.problem_pic{border:1px solid #64bdd9;} .pro_txt_w{width:610px;} a.problem_name{ color:#ff5722; } a:hover.problem_name{ color:#d33503;} -a.problem_tit{ color:#0781b4; width:430px; font-weight:bold; display:block; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;} +a.problem_tit{ color:#0781b4; max-width:430px; font-weight:bold; display:block; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;} a.problem_tit02{ color:#0781b4; font-weight:bold;width:400px; } a:hover.problem_tit,a:hover.problem_tit02{ color:#09658c; } .problem_main{ border-bottom:1px dashed #d4d4d4; padding-bottom:10px; margin-bottom:10px;} diff --git a/public/stylesheets/public.css b/public/stylesheets/public.css index 16d5ccd13..9ff4985cc 100644 --- a/public/stylesheets/public.css +++ b/public/stylesheets/public.css @@ -44,6 +44,7 @@ h4{ font-size:14px; color:#3b3b3b;} .clearfix:after{clear:both;content:".";display:block;font-size:0;height:0;line-height:0;visibility:hidden} .clearfix{clear:both;zoom:1} .break_word{ word-break:break-all; word-wrap: break-word;} +.hidden{overflow:hidden; white-space: nowrap; text-overflow:ellipsis;} .flow_hidden{ width:300px;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;} /* Spacing */ From 9fa7b04ce51e997f5ea8ea7fc6d96713c7c150fa Mon Sep 17 00:00:00 2001 From: huang Date: Thu, 16 Apr 2015 15:30:24 +0800 Subject: [PATCH 093/285] =?UTF-8?q?=E7=BB=84=E7=BB=87=E4=B8=8D=E9=9C=80?= =?UTF-8?q?=E8=A6=81=E5=BF=85=E5=A1=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/projects/settings/_new_edit.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/projects/settings/_new_edit.html.erb b/app/views/projects/settings/_new_edit.html.erb index 246395b6e..3c897853e 100644 --- a/app/views/projects/settings/_new_edit.html.erb +++ b/app/views/projects/settings/_new_edit.html.erb @@ -17,7 +17,7 @@
    • - + <%= select_tag :organization_id,options_for_select(project_organizations_id_option,@project.organization_id),{} %>
    • From bfc83d1a8cf390149de1f0d0a9be35e74e0fdbeb Mon Sep 17 00:00:00 2001 From: huang Date: Thu, 16 Apr 2015 15:48:13 +0800 Subject: [PATCH 094/285] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E5=9B=BE=E7=89=87=E4=B8=8D=E8=83=BD=E4=B8=8A=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/projects/settings/_new_edit.html.erb | 2 +- public/stylesheets/project.css | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/app/views/projects/settings/_new_edit.html.erb b/app/views/projects/settings/_new_edit.html.erb index 3c897853e..58c328e87 100644 --- a/app/views/projects/settings/_new_edit.html.erb +++ b/app/views/projects/settings/_new_edit.html.erb @@ -1,6 +1,6 @@ <%= labelled_form_for @project do |f| %>
        -
      • +
      • <%= render :partial=>"avatar/new_avatar_form",:locals=> {source:@project} %>
      • diff --git a/public/stylesheets/project.css b/public/stylesheets/project.css index eafceae21..3811d751b 100644 --- a/public/stylesheets/project.css +++ b/public/stylesheets/project.css @@ -378,6 +378,8 @@ blockquote { .pro_st_dis{display:block; } .pro_st_undis{display:none;} +.upbtn { margin: 40px 0px 0px 15px;display: block;padding: 2px 5px;border: 1px solid #EAEAEA;} + .upimg{ border:1px solid #eaeaea; display:block; width:60px; height:60px; padding:1px;} .upimg:hover{ border:1px solid #64bdd9; } .box{ margin-bottom:10px;} From be97e4732d32d7a961b58b3f941c44ebe47888ab Mon Sep 17 00:00:00 2001 From: huang Date: Thu, 16 Apr 2015 15:58:38 +0800 Subject: [PATCH 095/285] =?UTF-8?q?=E7=9B=AE=E6=A0=87=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E4=B8=BA=E7=A9=BA=E7=9A=84=E4=B8=8D=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/issues/_attributes.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/issues/_attributes.html.erb b/app/views/issues/_attributes.html.erb index 5efa3a3f4..7a93668d0 100644 --- a/app/views/issues/_attributes.html.erb +++ b/app/views/issues/_attributes.html.erb @@ -36,8 +36,8 @@
      • - <% if @issue.safe_attribute?('fixed_version_id') && @issue.assignable_versions.any? %> + <%= f.select :fixed_version_id, version_options_for_select(@issue.assignable_versions, @issue.fixed_version), {:include_blank => true, :required => @issue.required_attribute?('fixed_version_id'), :no_label => true}, :class => "w150" %> From 332a9b45fba0fee92a7b720ad9651f29773294df Mon Sep 17 00:00:00 2001 From: sw <939547590@qq.com> Date: Thu, 16 Apr 2015 16:10:24 +0800 Subject: [PATCH 096/285] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E8=B5=84=E6=BA=90=E5=BC=B9=E6=A1=86=E6=A0=B7?= =?UTF-8?q?=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/files/_project_file_new.html.erb | 2 +- public/stylesheets/project.css | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/views/files/_project_file_new.html.erb b/app/views/files/_project_file_new.html.erb index 0ec274ee8..ad489742e 100644 --- a/app/views/files/_project_file_new.html.erb +++ b/app/views/files/_project_file_new.html.erb @@ -11,7 +11,7 @@ showModal('ajax-modal', '513px'); $('#ajax-modal').siblings().remove(); $('#ajax-modal').before("") - $('#ajax-modal').parent().css("top","").css("left",""); + $('#ajax-modal').parent().css("top","40%").css("left","30%"); $('#ajax-modal').parent().addClass("popbox_polls"); } diff --git a/public/stylesheets/project.css b/public/stylesheets/project.css index 3811d751b..c6b58b8f3 100644 --- a/public/stylesheets/project.css +++ b/public/stylesheets/project.css @@ -213,7 +213,7 @@ a:hover.ping_sub{ background:#14a8b9;} /*.ping_distop span a{ float:right; width:20px; height:20px; background:url(images/star.png) -24px 0 no-repeat; margin-right:3px;}*/ /*上传资源弹出框样式*/ -.popbox_polls{width:300px;height:100px;position:fixed !important;z-index:100;left:50%;top:50%;margin:-100px 0 0 -150px; background:#fff; -moz-border-radius:5px; -webkit-border-radius:5px; border-radius:5px; box-shadow:0px 0px 8px #194a81; overflow:auto;} +/*#popbox_polls{width:300px;height:100px;position:fixed !important;z-index:100;left:50%;top:50%;margin:-100px 0 0 -150px; background:#fff; -moz-border-radius:5px; -webkit-border-radius:5px; border-radius:5px; box-shadow:0px 0px 8px #194a81; overflow:auto;}*/ .upload_con h2{ display:block; background:#eaeaea; font-size:14px; color:#343333; height:31px; width: auto; margin-top:25px; padding-left:20px; padding-top:5px;} .upload_box{ width:430px; margin:15px auto;} From 611952eb0529126bb63586cb6dcfd26b89400ea2 Mon Sep 17 00:00:00 2001 From: huang Date: Thu, 16 Apr 2015 16:36:34 +0800 Subject: [PATCH 097/285] =?UTF-8?q?=E6=96=B0=E5=BB=BA=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E6=97=B6=E5=80=99=E8=AE=BE=E5=AE=9A=E9=BB=98=E8=AE=A4=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E7=B1=BB=E5=9E=8B=20=E6=96=B0=E5=BB=BA=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E6=A0=B7=E5=BC=8F=E5=BC=82=E5=B8=B8=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/projects_controller.rb | 1 + app/views/issues/_form.html.erb | 4 ++-- app/views/issues/show.html.erb | 2 +- app/views/projects/_form.html.erb | 2 +- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index a70488618..51c209e9d 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -173,6 +173,7 @@ class ProjectsController < ApplicationController @project.safe_attributes = params[:project] @project.organization_id = params[:organization_id] @project.user_id = User.current.id + @project.project_new_type = 1 if validate_parent_id && @project.save @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 diff --git a/app/views/issues/_form.html.erb b/app/views/issues/_form.html.erb index 3afc47c20..7349a5f1d 100644 --- a/app/views/issues/_form.html.erb +++ b/app/views/issues/_form.html.erb @@ -4,12 +4,12 @@
        • <% if @issue.safe_attribute? 'tracker_id' %> - + <%= f.select :tracker_id, @issue.project.trackers.collect { |t| [t.name, t.id] }, {:required => true, :no_label => true}, :onchange => "updateIssueFrom('#{escape_javascript project_issue_form_path(@project, :id => @issue, :format => 'js')}')", - :class => "w150" + :class => "w90" %> <% end %>
        • diff --git a/app/views/issues/show.html.erb b/app/views/issues/show.html.erb index 51d92b90f..a42562c06 100644 --- a/app/views/issues/show.html.erb +++ b/app/views/issues/show.html.erb @@ -3,7 +3,7 @@
      <% html_title "#{@issue.tracker.name} #{@issue.source_from}'#'#{@issue.project_index}: #{@issue.subject}" %>
      -
      + diff --git a/app/views/projects/_form.html.erb b/app/views/projects/_form.html.erb index d0544cadb..1e3f4b620 100644 --- a/app/views/projects/_form.html.erb +++ b/app/views/projects/_form.html.erb @@ -10,7 +10,7 @@

      - <%= f.text_area :description, :rows => 8, :class => 'wiki-edit', :style => "font-size:small;width:490px;margin-left:10px;" %> + <%= f.text_area :description, :rows => 8, :class => 'wiki-edit', :style => "font-size:small;width:490px;margin-left:0px;" %>

      <%#= f.text_field :enterprise_name, :size => 60, :style => "width:490px;" %> From ce5b2d9996f1df78e0976bfc5929f4dca749bf0f Mon Sep 17 00:00:00 2001 From: huang Date: Thu, 16 Apr 2015 17:29:04 +0800 Subject: [PATCH 098/285] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E8=AE=A8=E8=AE=BA?= =?UTF-8?q?=E5=8C=BA=E5=9B=9E=E5=A4=8D=E6=8C=89=E9=92=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/boards/_project_show.html.erb | 8 ++++---- app/views/issues/_edit.html.erb | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/app/views/boards/_project_show.html.erb b/app/views/boards/_project_show.html.erb index fa16fcb51..43cea4b4f 100644 --- a/app/views/boards/_project_show.html.erb +++ b/app/views/boards/_project_show.html.erb @@ -45,14 +45,14 @@

      -
      <%= l(:label_project_board_count , :count => @topic_count)%>
      +
      <%= l(:label_project_board_count , :count => @topic_count)%>
      <% if @project.enabled_modules.where("name = 'boards'").count > 0 && User.current.member_of?(@project) %> <%= link_to l(:project_module_boards_post), new_board_message_path(@board), :class => 'problem_new_btn fl c_dorange', :onclick => 'showAndScrollTo("add-message", "message_subject"); return false;' if User.current.logged? %> <% end %> -
      -
      +
      +
      <% if @topics.any? %> <% @topics.each do |topic| %> @@ -67,7 +67,7 @@ <%= l(:label_post_by)%><%= link_to topic.author, user_path(topic.author), :class =>"problem_name" %>  <%= l(:label_post_by_time)%><%= format_time topic.created_on %>
      - <%= link_to (l(:label_short_reply) + " "+topic.replies_count.to_s), board_message_path(@board, topic), :style =>"color:#fff;line-height: 18px;" %> + <%= link_to (l(:label_short_reply) + " "+topic.replies_count.to_s), board_message_path(@board, topic), :class => "talk_btn fr c_white" %>
      <% end %> diff --git a/app/views/issues/_edit.html.erb b/app/views/issues/_edit.html.erb index 5ce65ab12..fa3153012 100644 --- a/app/views/issues/_edit.html.erb +++ b/app/views/issues/_edit.html.erb @@ -5,9 +5,9 @@ <% if @edit_allowed || !@allowed_statuses.empty? %> <% end %>
      From e9cf61e0f484add972fa46057d75003523952d1f Mon Sep 17 00:00:00 2001 From: whimlex Date: Thu, 16 Apr 2015 17:56:19 +0800 Subject: [PATCH 099/285] =?UTF-8?q?=E7=BC=BA=E9=99=B7=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E6=A0=B9=E6=8D=AE=E5=AE=8C=E6=88=90=E5=BA=A6=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/issues/_attributes.html.erb | 6 +++-- public/javascripts/project.js | 35 +++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/app/views/issues/_attributes.html.erb b/app/views/issues/_attributes.html.erb index 7a93668d0..4ce029217 100644 --- a/app/views/issues/_attributes.html.erb +++ b/app/views/issues/_attributes.html.erb @@ -8,7 +8,8 @@ <% if @issue.safe_attribute?('status_id') && @allowed_statuses.present? %> <%= f.select :status_id, (@allowed_statuses.collect { |p| [p.name, p.id] }), - {:onchange => "updateIssueFrom('#{escape_javascript project_issue_form_path(@project, :id => @issue, :format => 'js')}')", :no_label => true}, + {:no_label => true}, + :onchange => "updateIssueFrom('#{escape_javascript project_issue_form_path(@project, :id => @issue, :format => 'js')}')", :class => "w150" %> <% else %> <%= h(@issue.status.name) %> @@ -92,7 +93,8 @@
    • <% if @issue.safe_attribute?('done_ratio') && @issue.leaf? && Issue.use_field_for_done_ratio? %> <%= f.select :done_ratio, ((0..10).to_a.collect { |r| ["#{r*10} %", r*10] }), - {:required => @issue.required_attribute?('done_ratio'), :no_label => true, :onchange => "PrecentChange(this.value)"}, + {:required => @issue.required_attribute?('done_ratio'), :no_label => true}, + :onchange => "PrecentChange(this.value)", :class => "w150" %> <% end %>
    • diff --git a/public/javascripts/project.js b/public/javascripts/project.js index 6f043c0a3..3085769ba 100644 --- a/public/javascripts/project.js +++ b/public/javascripts/project.js @@ -239,4 +239,39 @@ function showAndScrollTo(id, focus) { $('#'+focus).focus(); } $('html, body').animate({scrollTop: $('#'+id).offset().top}, 400); + + + + /*缺陷完成度决定缺陷状态*/ +function PrecentChange(obj){ + var _v= obj; + if(_v==100) + { + //var select=$("select[id='issue_status_id']"); + $("select[id='issue_status_id']").find("option[value='3']").attr("selected","selected"); + } + else if(_v==0) + { + //alert(1); + $("select[id='issue_status_id']").find("option[value='1']").attr("selected","selected"); + } + else if(_v!=100&&_v!=0) + { + // alert(2); + $("select[id='issue_status_id']").find("option[value='2']").attr("selected","selected"); + } +} + +// Can't use Rails' remote select because we need the form data +// 根据缺陷状态值改变完成度状态 +function updateIssueFrom(url) { + + $.ajax({ + url: url, + type: 'post', + data: $('#issue-form').serialize() + }); + +} + } \ No newline at end of file From fb0657191814db4b17af5b7c71925a0a51d94f8e Mon Sep 17 00:00:00 2001 From: huang Date: Thu, 16 Apr 2015 17:56:45 +0800 Subject: [PATCH 100/285] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E8=AE=A8=E8=AE=BA?= =?UTF-8?q?=E5=8C=BA=E5=BC=95=E7=94=A8=E5=BC=BA=E5=88=B6=E6=8D=A2=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/files/quote_resource_show_project.js.erb | 2 +- app/views/messages/_project_show.html.erb | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/views/files/quote_resource_show_project.js.erb b/app/views/files/quote_resource_show_project.js.erb index 440004357..d1a44e90f 100644 --- a/app/views/files/quote_resource_show_project.js.erb +++ b/app/views/files/quote_resource_show_project.js.erb @@ -7,5 +7,5 @@ showModal('ajax-modal', '513px'); $('#ajax-modal').siblings().remove(); $('#ajax-modal').before(""); -$('#ajax-modal').parent().css("top","").css("left",""); +$('#ajax-modal').parent().css("top","30%").css("left","35%"); $('#ajax-modal').parent().addClass("popbox_polls"); \ No newline at end of file diff --git a/app/views/messages/_project_show.html.erb b/app/views/messages/_project_show.html.erb index 3dbfe3a8d..069fd9d80 100644 --- a/app/views/messages/_project_show.html.erb +++ b/app/views/messages/_project_show.html.erb @@ -50,11 +50,11 @@
      ">
      <%= link_to image_tag(url_to_avatar(message.author), :width => '46',:height => '46'), user_path(message.author) %>
      -
      +
      <%= link_to_user_header message.author,false,:class => 'c_blue fb fl mb10 ' %> <%= format_time(message.created_on) %>
      -

      <%= textAreailizable message,:content,:attachments => message.attachments %>

      +

      <%= textAreailizable message,:content,:attachments => message.attachments %>

      <%= link_to_attachments_course message, :author => false %>
      From 440eb8dc7f3eea315d2885d04e72b2f9b63bd765 Mon Sep 17 00:00:00 2001 From: huang Date: Thu, 16 Apr 2015 19:08:16 +0800 Subject: [PATCH 101/285] =?UTF-8?q?1=E3=80=81=E4=BF=AE=E6=94=B9=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E6=88=90=E5=91=98=E4=B8=80=E6=8E=92=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=202=E3=80=81=E9=A1=B9=E7=9B=AE=E5=8A=A8=E6=80=81=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E5=BC=BA=E5=88=B6=E6=8D=A2=E8=A1=8C=203=E3=80=81?= =?UTF-8?q?=E8=AE=A8=E8=AE=BA=E5=8C=BA=E6=8F=90=E7=A4=BA=E7=94=A8=E8=AF=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/messages/_form_project.html.erb | 2 +- app/views/projects/settings/_new_members.html.erb | 8 ++++---- app/views/projects/show.html.erb | 14 +++++++------- config/locales/zh.yml | 1 + 4 files changed, 13 insertions(+), 12 deletions(-) diff --git a/app/views/messages/_form_project.html.erb b/app/views/messages/_form_project.html.erb index af8aeb3a5..3e932b047 100644 --- a/app/views/messages/_form_project.html.erb +++ b/app/views/messages/_form_project.html.erb @@ -1,7 +1,7 @@ <%= error_messages_for 'message' %> <% replying ||= false %> <% extra_option = replying ? { readonly: true} : { maxlength: 200 } %> -

      <%= l(:label_message_new) %>

      +

      <%= l(:label_message_reply) %>

    • <% if replying %> diff --git a/app/views/projects/settings/_new_members.html.erb b/app/views/projects/settings/_new_members.html.erb index 0d273fc29..3356a351a 100644 --- a/app/views/projects/settings/_new_members.html.erb +++ b/app/views/projects/settings/_new_members.html.erb @@ -16,15 +16,15 @@ <%= call_hook(:view_projects_settings_members_table_header, :project => @project) %> <% members.each do |member| %>
    • - <%= link_to_user_header member.principal,false,:class => "w150 c_orange fl" %> - + <%= link_to_user_header member.principal,false,:class => "w90 c_orange fl" %> + <%= h member.roles.sort.collect(&:to_s).join(', ') %> <%= form_for(member, {:as => :membership, :remote => true, :url => membership_path(member), :method => :put, :html => {:id => "member-#{member.id}-roles-form", :class => 'hol'}} ) do |f| %> <% roles.each do |role| %> -
        +
          <%= check_box_tag 'membership[role_ids][]', role.id, member.roles.include?(role), :disabled => member.member_roles.detect { |mr| mr.role_id == role.id && !mr.inherited_from.nil? } %> @@ -32,7 +32,7 @@ <% end %> <%= hidden_field_tag 'membership[role_ids][]', '' %> -
          +
          <%= l(:button_change)%> diff --git a/app/views/projects/show.html.erb b/app/views/projects/show.html.erb index b45621850..d4cfd88c8 100644 --- a/app/views/projects/show.html.erb +++ b/app/views/projects/show.html.erb @@ -9,7 +9,7 @@ <% if e.forge_act_type == "ProjectCreateInfo"%>
          <%= image_tag(url_to_avatar(e.user), :width => "42", :height => "42") %> -
          +
          <%= link_to e.user, user_path(e.user), :class => "problem_name c_orange fl" %> <%= l(:label_project_create) %> : <%= link_to e.project.name, :class => "problem_tit fl fb" %>


          <%= l :label_create_time %> :<%= format_time(e.project.created_on) %>

          @@ -24,7 +24,7 @@ <% if e.forge_act_type == "Issue" %>
          <%= image_tag(url_to_avatar(act.author), :width => "42", :height => "42") %> -
          +
          <%= h(e.project) if @project.nil? || @project.id != e.project_id %> <%= link_to act.author, user_path(act.author), :class => "problem_name c_orange fl" %> <%= l(:label_new_activity) %> : @@ -44,7 +44,7 @@ <% elsif e.forge_act_type == "Journal" %>
          <%= image_tag(url_to_avatar(e.user), :width => "42", :height => "42") %> -
          +
          <%= h(e.project) if @project.nil? || @project.id != e.project_id %> <%= link_to h(e.user), user_path(e.user_id), :class => "problem_name c_orange fl" %> <%= l(:label_new_activity) %> : @@ -60,7 +60,7 @@ <% elsif e.forge_act_type == "Message" %>
          <%= image_tag(url_to_avatar(e.user), :width => "42", :height => "42") %> -
          +
          <%= h(e.project) if @project.nil? || @project.id != e.project_id %> <%= link_to h(e.user), user_path(e.user_id), :class => "problem_name c_orange fl" %> <%= l(:label_new_activity) %> : @@ -80,7 +80,7 @@ <% elsif e.forge_act_type == "News" %>
          <%= image_tag(url_to_avatar(e.user), :width => "42", :height => "42") %> -
          +
          <%= h(e.project) if @project.nil? || @project.id != e.project_id %> <%= link_to h(e.user), user_path(e.user_id), :class => "problem_name c_orange fl" %> <%= l(:label_new_activity) %> : @@ -98,7 +98,7 @@ <% elsif e.forge_act_type == "Document" %>
          <%= image_tag(url_to_avatar(e.user), :width => "42", :height => "42") %> -
          +
          <%= h(e.project) if @project.nil? || @project.id != e.project_id %> <%= link_to h(e.user), user_path(e.user_id), :class => "problem_name c_orange fl" %> <%= l(:label_new_activity) %> : @@ -113,7 +113,7 @@ <% elsif e.forge_act_type == "Attachment" %>
          <%= image_tag(url_to_avatar(e.user), :width => "42", :height => "42") %> -
          +
          <%= h(e.project) if @project.nil? || @project.id != e.project_id %> <%= link_to h(e.user), user_path(e.user_id), :class => "problem_name c_orange fl" %> <%= l(:label_new_activity) %> : diff --git a/config/locales/zh.yml b/config/locales/zh.yml index 6f1218788..a34ab933e 100644 --- a/config/locales/zh.yml +++ b/config/locales/zh.yml @@ -717,6 +717,7 @@ zh: label_message_plural: 帖子 label_message_last: 最新的帖子 label_message_new: 发布新帖 + label_message_reply: 回复帖子 label_message_posted: 发帖成功 label_send_information: 给用户发送帐号信息 From d1e7777040d361ef1994078ecf51ed1b97c07f5b Mon Sep 17 00:00:00 2001 From: huang Date: Thu, 16 Apr 2015 20:00:07 +0800 Subject: [PATCH 102/285] =?UTF-8?q?=E5=85=B3=E6=B3=A8=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/projects/watcherlist.html.erb | 3 +-- config/locales/projects/zh.yml | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/views/projects/watcherlist.html.erb b/app/views/projects/watcherlist.html.erb index 4eacf836f..76e7c9d04 100644 --- a/app/views/projects/watcherlist.html.erb +++ b/app/views/projects/watcherlist.html.erb @@ -12,8 +12,7 @@ <%= user.nil? ? '' : (image_tag(url_to_avatar(user), :width => 32, :height => 32)) %> <%= l(:label_username)%> - <%= link_to_user(user) %> - + <%= link_to(user.name, user_path(user),:class => "ml10 c_blue02") %> <%= format_date(user.created_on) %>
          diff --git a/config/locales/projects/zh.yml b/config/locales/projects/zh.yml index 8b957d68b..bd09f2538 100644 --- a/config/locales/projects/zh.yml +++ b/config/locales/projects/zh.yml @@ -239,6 +239,7 @@ zh: # 新建问题 field_tracker: 跟踪 + field_untracker: 取消跟踪 field_subject: 主题 field_quote: 描述 label_change_properties: 修改属性 From 8babe384fd8a3d2c38569dd9dfdaf613a92286f7 Mon Sep 17 00:00:00 2001 From: whimlex Date: Thu, 16 Apr 2015 20:11:33 +0800 Subject: [PATCH 103/285] =?UTF-8?q?=E7=BC=BA=E9=99=B7=E5=8E=86=E5=8F=B2?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/issues_helper.rb | 4 +- app/views/issues/_history.html.erb | 4 +- public/javascripts/project.js | 256 ++++++++++++++--------------- public/stylesheets/pleft.css | 2 +- public/stylesheets/project.css | 4 + 5 files changed, 132 insertions(+), 138 deletions(-) diff --git a/app/helpers/issues_helper.rb b/app/helpers/issues_helper.rb index 54cef5c7a..9c4fab9de 100644 --- a/app/helpers/issues_helper.rb +++ b/app/helpers/issues_helper.rb @@ -340,9 +340,9 @@ module IssuesHelper if detail.property == 'attachment' && !value.blank? && atta = Attachment.find_by_id(detail.prop_key) # Link to the attachment if it has not been removed if options[:token].nil? - value = link_to_attachment(atta, :download => true, :only_path => options[:only_path]) + value = link_to_attachment(atta, :download => true, :only_path => options[:only_path], :class=> "info_foot_num c_blue") else - value = link_to_attachment(atta, :download => true, :only_path => options[:only_path], :token => options[:token]) + value = link_to_attachment(atta, :download => true, :only_path => options[:only_path], :token => options[:token], :class=> "info_foot_num c_blue") end if options[:only_path] != false && atta.is_text? value += link_to( diff --git a/app/views/issues/_history.html.erb b/app/views/issues/_history.html.erb index 50ddbceee..b0f1ad38d 100644 --- a/app/views/issues/_history.html.erb +++ b/app/views/issues/_history.html.erb @@ -12,8 +12,8 @@

          <% if journal.details.any? %> <% details_to_strings(journal.details).each do |string| %> - <%= string %> - <% end %> +

          <%= string %>

          + <% end %> <% end %>

          diff --git a/public/javascripts/project.js b/public/javascripts/project.js index 3085769ba..b5f769723 100644 --- a/public/javascripts/project.js +++ b/public/javascripts/project.js @@ -13,9 +13,10 @@ function regexName(content) { } } -function submitSerch(content) -{ - if(regexName(content)){$("#project_search_form").submit();} +function submitSerch(content) { + if (regexName(content)) { + $("#project_search_form").submit(); + } } @@ -25,15 +26,13 @@ function submitSerch(content) // // }) //}) -function expand_tools_expand(content) -{ - if (content=="invit"){ +function expand_tools_expand(content) { + if (content == "invit") { $("#expand_tools_expand_invit").toggleClass("currentDd").siblings(".subNav").removeClass("currentDd"); $("#expand_tools_expand_invit").toggleClass("currentDt").siblings(".subNav").removeClass("currentDt"); $("#expand_tools_expand_invit").next(".navContent").slideToggle(500).siblings(".navContent").slideUp(500); } - else - { + else { $("#expand_tools_expand").toggleClass("currentDd").siblings(".subNav").removeClass("currentDd"); $("#expand_tools_expand").toggleClass("currentDt").siblings(".subNav").removeClass("currentDt"); $("#expand_tools_expand").next(".navContent").slideToggle(500).siblings(".navContent").slideUp(500); @@ -43,235 +42,226 @@ function expand_tools_expand(content) } // 描述显示更多信息 -function show_more_msg(){ - $("#course_description").toggleClass("course_description_none"); - var information = $("#expend_more_information"); - var arrow = $("#arrow"); - var val = information.attr("value"); - if (val=="展开更多信息" ) - { +function show_more_msg() { + $("#course_description").toggleClass("course_description_none"); + var information = $("#expend_more_information"); + var arrow = $("#arrow"); + var val = information.attr("value"); + if (val == "展开更多信息") { $("#expend_more_information").text("收起描述信息"); - information.attr("value","收起描述信息"); - arrow.attr("src","/images/jiantouup.jpg") + information.attr("value", "收起描述信息"); + arrow.attr("src", "/images/jiantouup.jpg") } - else - { + else { $("#expend_more_information").text("展开更多信息"); - information.attr("value","展开更多信息"); - arrow.attr("src","/images/jiantou.jpg") + information.attr("value", "展开更多信息"); + arrow.attr("src", "/images/jiantou.jpg") } } /////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////项目讨论区 -function regexSubject() -{ +function regexSubject() { var content = $.trim($("#message_subject").val()); - if(content.length ==0) - { + if (content.length == 0) { $("#subject_span").text("主题不能为空"); - $("#subject_span").css('color','#ff0000'); + $("#subject_span").css('color', '#ff0000'); return false; } - else - { + else { $("#subject_span").text("填写正确"); - $("#subject_span").css('color','#008000'); + $("#subject_span").css('color', '#008000'); return true; } return false; } -function regexContent() -{ +function regexContent() { var content = $.trim($("#message_content").val()); - if(content.length ==0) - { + if (content.length == 0) { $("#message_content_span").text("描述不能为空"); - $("#message_content_span").css('color','#ff0000'); + $("#message_content_span").css('color', '#ff0000'); return false; } - else - { + else { $("#message_content_span").text("填写正确"); - $("#message_content_span").css('color','#008000'); + $("#message_content_span").css('color', '#008000'); return true; } return false; } // 项目编辑和提交 -function submitProjectsBoard() -{ - if(regexSubject()&®exContent()){$("#message-form").submit();} +function submitProjectsBoard() { + if (regexSubject() && regexContent()) { + $("#message-form").submit(); + } } // 提交新闻 -function regexTitle() -{ +function regexTitle() { var name = $("#news_title").val(); - if(name.length ==0) - { + if (name.length == 0) { $("#title_notice_span").text("标题不能为空"); - $("#title_notice_span").css('color','#ff0000'); + $("#title_notice_span").css('color', '#ff0000'); $("#title_notice_span").focus(); return false; } - else if(name.length <= 60) - { + else if (name.length <= 60) { $("#title_notice_span").text("填写正确"); - $("#title_notice_span").css('color','#008000'); + $("#title_notice_span").css('color', '#008000'); return true; } - else - { + else { $("#title_notice_span").text("标题超过60个字符"); - $("#title_notice_span").css('color','#ff0000'); + $("#title_notice_span").css('color', '#ff0000'); $("#title_notice_span").focus(); return false; } } -function regexDescription() -{ +function regexDescription() { var name = $("#news_description").val(); - if(name.length ==0) - { + if (name.length == 0) { $("#description_notice_span").text("描述不能为空"); - $("#description_notice_span").css('color','#ff0000'); + $("#description_notice_span").css('color', '#ff0000'); $("#description_notice_span").focus(); return false; } - else - { + else { $("#description_notice_span").text("填写正确"); - $("#description_notice_span").css('color','#008000'); + $("#description_notice_span").css('color', '#008000'); return true; } } -function submitNews() -{ - if(regexTitle() && regexDescription()) - { +function submitNews() { + if (regexTitle() && regexDescription()) { $("#news-form").submit(); } } -function submitFocus(obj) -{ +function submitFocus(obj) { $(obj).focus(); } //当项目描述长度小于112px时,不显示更多按钮 -$(function(){ +$(function () { // alert($("#course_description_content").height()); - if($("#course_description_content").height()>112) - { + if ($("#course_description_content").height() > 112) { $("#lg-foot").show(); } }); //配置项目信息 -function course_setting(id) -{ +function course_setting(id) { //alert(id); - $('#tb_'+id).removeClass().addClass("hwork_hovertab"); - $('#tbc_0'+id).removeClass().addClass("dis"); - $('#tb_'+(3-id)).removeClass().addClass("hwork_normaltab"); - $('#tbc_0'+(3-id)).removeClass().addClass("undis"); + $('#tb_' + id).removeClass().addClass("hwork_hovertab"); + $('#tbc_0' + id).removeClass().addClass("dis"); + $('#tb_' + (3 - id)).removeClass().addClass("hwork_normaltab"); + $('#tbc_0' + (3 - id)).removeClass().addClass("undis"); } //项目类型 -function show_window () { - $('#light').css('display','block'); - $('#fade').css('display','block'); +function show_window() { + $('#light').css('display', 'block'); + $('#fade').css('display', 'block'); } -function close_window(type){ - $('#light').css('display','none'); - $('#fade').css('display','none'); +function close_window(type) { + $('#light').css('display', 'none'); + $('#fade').css('display', 'none'); - $("#" + type).attr("checked","checked"); + $("#" + type).attr("checked", "checked"); } //弹框l ///////////////////////////////////////////// //项目配置 -function project_setting(n) -{ - for(var i = 1;i < 9; i++) - { - if(i == n) - { - $("#pro_st_tb_"+i).removeClass().addClass("pro_st_hovertab"); - $("#pro_st_tbc_0"+i).removeClass().addClass("pro_st_dis"); +function project_setting(n) { + for (var i = 1; i < 9; i++) { + if (i == n) { + $("#pro_st_tb_" + i).removeClass().addClass("pro_st_hovertab"); + $("#pro_st_tbc_0" + i).removeClass().addClass("pro_st_dis"); } - else - { - $("#pro_st_tb_"+i).removeClass().addClass("pro_st_normaltab"); - $("#pro_st_tbc_0"+i).removeClass().addClass("pro_st_undis"); + else { + $("#pro_st_tb_" + i).removeClass().addClass("pro_st_normaltab"); + $("#pro_st_tbc_0" + i).removeClass().addClass("pro_st_undis"); } } } //配置--成员---申请列表--拒绝 -function refusal_applied_member() -{ +function refusal_applied_member() { $('#new_membership').append(""); $('#new_membership').submit(); } //新闻描述显示更多信息 -function news_show_more_des(id) -{ +function news_show_more_des(id) { $('#news_description_' + id).toggleClass("news_description_none"); } -$(document).ready(function(){ - $("#issue_project_id").css("width","100%"); - $("#issue_project_id").css("overflow ","hidden"); +$(document).ready(function () { + $("#issue_project_id").css("width", "100%"); + $("#issue_project_id").css("overflow ", "hidden"); // $(".jstEditor").css("margin-left ","80px"); //issue_project_id }); function showAndScrollTo(id, focus) { - $('#'+id).show(); + $('#' + id).show(); if (focus !== null) { - $('#'+focus).focus(); + $('#' + focus).focus(); } - $('html, body').animate({scrollTop: $('#'+id).offset().top}, 400); - - - - /*缺陷完成度决定缺陷状态*/ -function PrecentChange(obj){ - var _v= obj; - if(_v==100) - { - //var select=$("select[id='issue_status_id']"); - $("select[id='issue_status_id']").find("option[value='3']").attr("selected","selected"); + $('html, body').animate({scrollTop: $('#' + id).offset().top}, 400); + + + /*缺陷完成度决定缺陷状态*/ + function PrecentChange(obj) { + var _v = obj; + if (_v == 100) { + //var select=$("select[id='issue_status_id']"); + $("select[id='issue_status_id']").find("option[value='3']").attr("selected", "selected"); + } + else if (_v == 0) { + //alert(1); + $("select[id='issue_status_id']").find("option[value='1']").attr("selected", "selected"); + } + else if (_v != 100 && _v != 0) { + // alert(2); + $("select[id='issue_status_id']").find("option[value='2']").attr("selected", "selected"); + } } - else if(_v==0) - { - //alert(1); - $("select[id='issue_status_id']").find("option[value='1']").attr("selected","selected"); - } - else if(_v!=100&&_v!=0) - { - // alert(2); - $("select[id='issue_status_id']").find("option[value='2']").attr("selected","selected"); - } -} // Can't use Rails' remote select because we need the form data // 根据缺陷状态值改变完成度状态 -function updateIssueFrom(url) { - - $.ajax({ - url: url, - type: 'post', - data: $('#issue-form').serialize() - }); - -} + function updateIssueFrom(url) { + + $.ajax({ + url: url, + type: 'post', + data: $('#issue-form').serialize() + }); + + } + +// firefox pre标签换行 + $(document).ready(function () { + var userAgent = navigator.userAgent.toLowerCase(); + var browser = { + version: (userAgent.match(/.+(?:rv|it|ra|ie)[/: ]([d.]+)/) || [])[1], + safari: /webkit/.test(userAgent), + opera: /opera/.test(userAgent), + msie: /msie/.test(userAgent) && !/opera/.test(userAgent), + mozilla: /mozilla/.test(userAgent) && !/(compatible|webkit)/.test(userAgent) + }; + if (browser.mozilla || browser.opera) { + $("pre").addClass("break_word_firefox"); + } + else { + $("pre").addClass("break_word"); + } + + }); + } \ No newline at end of file diff --git a/public/stylesheets/pleft.css b/public/stylesheets/pleft.css index a64d3671f..cc7e18465 100644 --- a/public/stylesheets/pleft.css +++ b/public/stylesheets/pleft.css @@ -50,7 +50,7 @@ a:hover.subnav_green{ background:#14ad5a;} .project_intro{ width:220px; padding:10px; background:#fff; margin-top:10px; padding-top:5px; color:#6d6d6d; line-height:1.9;} .course_description{max-height: 112px;overflow:hidden; word-break: break-all;word-wrap: break-word;} .course_description_none{max-height: none;} -.lg-foot{ border:1px solid #e8eef2; color: #929598; text-align:center; width:220px; height:23px; cursor:pointer;display: none;} +.lg-foot{ border:1px solid #e8eef2; color: #929598; text-align:center; width:220px; height:23px; cursor:pointer;} .lg-foot:hover{ color:#787b7e; border:1px solid #d4d4d4;} /****标签(和资源库的tag样式一致)***/ .project_Label{ width:220px; padding:10px; background:#fff; margin-top:10px; padding-top:5px; margin-bottom:10px;} diff --git a/public/stylesheets/project.css b/public/stylesheets/project.css index c6b58b8f3..556623e55 100644 --- a/public/stylesheets/project.css +++ b/public/stylesheets/project.css @@ -501,3 +501,7 @@ a.atom { background: url(../images/feed.png) no-repeat 1px 50%; padding: 2px 0px p.other-formats { text-align: right; font-size:0.9em; color: #666; } .other-formats span + span:before { content: "| "; } + +/*pre标签换行*/ +.break_word{word-break: break-all;word-wrap: break-word;} +.break_word_firefox{white-space: pre-wrap;word-break: break-all;} From 0ea683e1b497f88a004d588cf5119a15cde3841e Mon Sep 17 00:00:00 2001 From: huang Date: Fri, 17 Apr 2015 07:45:37 +0800 Subject: [PATCH 104/285] =?UTF-8?q?=E4=BF=AE=E6=94=B9issue=E4=B8=AD?= =?UTF-8?q?=E5=9B=BE=E7=89=87=E9=99=84=E4=BB=B6=E7=9A=84=E7=BC=A9=E7=95=A5?= =?UTF-8?q?=E5=9B=BE=E6=98=BE=E7=A4=BA=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/application_helper.rb | 14 ++++++++++++++ app/views/attachments/_project_file_links.html.erb | 6 ++---- app/views/issues/_edit.html.erb | 4 ++-- app/views/issues/_history.html.erb | 2 +- app/views/issues/show.html.erb | 2 +- 5 files changed, 20 insertions(+), 8 deletions(-) diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index dc52de3e3..599f27215 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -325,6 +325,20 @@ module ApplicationHelper :title => attachment.filename end + def thumbnail_issue_tag(attachment) + imagesize = attachment.thumbnail(:size => "50*50") + imagepath = named_attachment_path(attachment, attachment.filename) + if imagesize + link_to image_tag(imagesize), + imagepath, + :title => attachment.filename + else + link_to image_tag(imagepath , height: '73', width: '100'), + imagepath, + :title => attachment.filename + end + end + # 图片缩略图链接 def thumbnail_small_tag(attachment) imagesize = attachment.thumbnail(:size => "200*200") diff --git a/app/views/attachments/_project_file_links.html.erb b/app/views/attachments/_project_file_links.html.erb index d32025787..7a9d1a6ca 100644 --- a/app/views/attachments/_project_file_links.html.erb +++ b/app/views/attachments/_project_file_links.html.erb @@ -5,7 +5,7 @@ <%if is_float%>
          <% end%> - + <% if options[:length] %> <%= link_to_short_attachment attachment, :class => ' link_file_board', :download => true,:length => options[:length] -%> <% else %> @@ -62,11 +62,9 @@ <% if defined?(thumbnails) && thumbnails %> <% images = attachments.select(&:thumbnailable?) %> <% if images.any? %> -
          <% images.each do |attachment| %> -
          <%= thumbnail_tag(attachment) %>
          +
          <%= thumbnail_issue_tag(attachment) %>
          <% end %> -
          <% end %> <% end %>
          diff --git a/app/views/issues/_edit.html.erb b/app/views/issues/_edit.html.erb index fa3153012..1266f4611 100644 --- a/app/views/issues/_edit.html.erb +++ b/app/views/issues/_edit.html.erb @@ -18,7 +18,7 @@ <%= render :partial => 'history', :locals => {:issue => @issue, :journals => @journals} %>
          <% end %> -
          说明 +
          回复 <%= f.text_area :notes, :style => "width:99%;", :rows => "5", :no_label => true %>
          @@ -29,7 +29,7 @@ - +
          diff --git a/app/views/issues/_history.html.erb b/app/views/issues/_history.html.erb index 50ddbceee..8239517c0 100644 --- a/app/views/issues/_history.html.erb +++ b/app/views/issues/_history.html.erb @@ -13,7 +13,7 @@ <% if journal.details.any? %> <% details_to_strings(journal.details).each do |string| %> <%= string %> - <% end %> + <% end %> <% end %>

          diff --git a/app/views/issues/show.html.erb b/app/views/issues/show.html.erb index a42562c06..d68e1fc7d 100644 --- a/app/views/issues/show.html.erb +++ b/app/views/issues/show.html.erb @@ -115,7 +115,7 @@
          <% end %> -
          +

          <%= l(:button_submit) %> From fbcd9f9a96081e1bad159221e3ab940000c7d809 Mon Sep 17 00:00:00 2001 From: huang Date: Fri, 17 Apr 2015 08:28:07 +0800 Subject: [PATCH 105/285] =?UTF-8?q?wiki=E9=A1=B5=E9=9D=A2=E8=B0=83?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../attachments/_project_file_links.html.erb | 2 +- app/views/wiki/show.html.erb | 2 +- public/stylesheets/project.css | 16 ++++++++++++++++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/app/views/attachments/_project_file_links.html.erb b/app/views/attachments/_project_file_links.html.erb index 7a9d1a6ca..97cbefce9 100644 --- a/app/views/attachments/_project_file_links.html.erb +++ b/app/views/attachments/_project_file_links.html.erb @@ -53,7 +53,7 @@ <% end %> <% if options[:author] %> - <%= link_to h(truncate(attachment.author.name, length: 10, omission: '...')),user_path(attachment.author) %>, + <%= link_to h(truncate(attachment.author.name, length: 10, omission: '...')),user_path(attachment.author),:class => "c_orange ml20" %>, <%= format_time(attachment.created_on) %> <% end %> diff --git a/app/views/wiki/show.html.erb b/app/views/wiki/show.html.erb index a23aa6c04..28fab1243 100644 --- a/app/views/wiki/show.html.erb +++ b/app/views/wiki/show.html.erb @@ -45,7 +45,7 @@ <% end %>
          <%= render(:partial => "wiki/content", :locals => {:content => @content}) %> -<%= link_to_attachment_project @page, :author => false %> +<%= link_to_attachment_project @page, :author => true %>
          diff --git a/public/stylesheets/project.css b/public/stylesheets/project.css index c6b58b8f3..e3b124474 100644 --- a/public/stylesheets/project.css +++ b/public/stylesheets/project.css @@ -466,6 +466,21 @@ img.ui-datepicker-trigger { .wiki_con_box{ line-height:1.9; color:#2d2d2d;} .wiki_page_con{ border-bottom:1px dashed #CCC; margin-bottom:10px; padding-bottom:10px;} #wiki_new_box{ display:none;} +/*wiki显示附加*/ +.wiki-page { + font-size: 14px; + color: #09658C !important; + font-weight: bold; + width: 630px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + margin-bottom: 10px; +} +/*.author{*/ + /*color: #FF5722;*/ + /*margin-left:20px;*/ +/*}*/ /*里程碑进度条*/ table.progress { @@ -501,3 +516,4 @@ a.atom { background: url(../images/feed.png) no-repeat 1px 50%; padding: 2px 0px p.other-formats { text-align: right; font-size:0.9em; color: #666; } .other-formats span + span:before { content: "| "; } + From fec0a7472dd889dd4ab916972ec5910313166ea0 Mon Sep 17 00:00:00 2001 From: huang Date: Fri, 17 Apr 2015 08:43:58 +0800 Subject: [PATCH 106/285] =?UTF-8?q?=E6=96=B0=E9=97=BB=E6=8D=A2=E8=A1=8C?= =?UTF-8?q?=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/news/_project_news.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/news/_project_news.html.erb b/app/views/news/_project_news.html.erb index 54f6dc70b..75b51ab6c 100644 --- a/app/views/news/_project_news.html.erb +++ b/app/views/news/_project_news.html.erb @@ -29,7 +29,7 @@ <%= link_to_user_header(news.author,false,{:class=> 'problem_name c_orange fl'}) if news.respond_to?(:author) %> <%= l(:label_add_news) %>:<%= link_to h(news.title), news_path(news),:class => 'problem_tit fl fb c_dblue' %>
          -

          <%= news.description %>

          +

          <%= news.description %>

          <%= l(:label_create_time) %> :<%= format_time(news.created_on) %>
          From 54b81bdfb3e19be7ed54916f4f9b2724d60b7df1 Mon Sep 17 00:00:00 2001 From: huang Date: Fri, 17 Apr 2015 10:13:47 +0800 Subject: [PATCH 107/285] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E5=9B=BE=E6=A0=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/application_helper.rb | 10 ++++++++++ app/views/attachments/_project_file_links.html.erb | 2 +- app/views/layouts/_join_exit_project.html.erb | 2 +- app/views/layouts/base_projects.html.erb | 5 ++--- 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 599f27215..b4526c1f5 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -49,6 +49,16 @@ module ApplicationHelper end end + def get_project_type_css(value) + if value == 1 + "pr_friend" + elsif value == 1 + "pr_keyan" + else + "pr_kafa" + end + end + # Time 2015-03-24 16:38:05 # Author lizanle # Description after save后需要进行资源记录的更新 diff --git a/app/views/attachments/_project_file_links.html.erb b/app/views/attachments/_project_file_links.html.erb index 97cbefce9..d8b53acd0 100644 --- a/app/views/attachments/_project_file_links.html.erb +++ b/app/views/attachments/_project_file_links.html.erb @@ -53,7 +53,7 @@ <% end %> <% if options[:author] %> - <%= link_to h(truncate(attachment.author.name, length: 10, omission: '...')),user_path(attachment.author),:class => "c_orange ml20" %>, + <%= link_to h(truncate(attachment.author.name, length: 10, omission: '...')),user_path(attachment.author),:class => "c_orange" %>, <%= format_time(attachment.created_on) %> <% end %> diff --git a/app/views/layouts/_join_exit_project.html.erb b/app/views/layouts/_join_exit_project.html.erb index 64e9f64d2..13baae37f 100644 --- a/app/views/layouts/_join_exit_project.html.erb +++ b/app/views/layouts/_join_exit_project.html.erb @@ -10,6 +10,6 @@ <% if ((User.current.member_of? @project) && User.current.login? && User.current.allowed_to?({:controller => 'projects', :action => 'settings'}, @project)) %> <%= link_to "#{l(:button_configure)}".html_safe, settings_project_path(@project), :class => "pr_join_a" %> - <%= link_to "#{text}".html_safe,"javascript:void(0)" ,:onClick => "show_window();", :class => "pr_join_a",:id => "setting_project_type"%> + <%= link_to "#{text}".html_safe,"javascript:void(0)" ,:onClick => "show_window();", :class => "pr_join_a",:id => "setting_project_type"%> <% end %>
          diff --git a/app/views/layouts/base_projects.html.erb b/app/views/layouts/base_projects.html.erb index 24f2c6ebf..d71722ce8 100644 --- a/app/views/layouts/base_projects.html.erb +++ b/app/views/layouts/base_projects.html.erb @@ -182,7 +182,7 @@

          <%= l(:label_project_overview)%>:

          -
          +
          <%= textilizable(@project.description) if @project.description && !@project.description.blank? %>
          @@ -205,7 +205,7 @@
          - +
          <%= render_flash_messages %> @@ -213,7 +213,6 @@ <%= call_hook :view_layouts_base_content %>
          -
          <%= render :partial => 'layouts/new_footer'%> From 19617680316b3ea591d67211a8ff1b888f545fc8 Mon Sep 17 00:00:00 2001 From: huang Date: Fri, 17 Apr 2015 10:37:40 +0800 Subject: [PATCH 108/285] =?UTF-8?q?=E6=96=B0=E5=BB=BA=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E5=89=8D=E5=8E=BB=E6=8E=89=E4=B8=8D=E5=BF=85=E8=A6=81=E7=9A=84?= =?UTF-8?q?*=20=E5=8E=BB=E6=8E=89=E8=B7=9F=E8=B8=AA=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/issues/_action_menu.html.erb | 2 +- app/views/issues/_form.html.erb | 34 +++++++++++++------------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/app/views/issues/_action_menu.html.erb b/app/views/issues/_action_menu.html.erb index 4b23897d3..49ea0d57e 100644 --- a/app/views/issues/_action_menu.html.erb +++ b/app/views/issues/_action_menu.html.erb @@ -1,5 +1,5 @@ -<%= watcher_link_issue(@issue, User.current) %> +<%#= watcher_link_issue(@issue, User.current) %> <%#= link_to l(:button_copy), project_copy_issue_path(@project, @issue), :class => 'icon icon-copy' if User.current.allowed_to?(:add_issues, @project) %> <%= link_to l(:button_delete), issue_path(@issue.id), :data => {:confirm => issues_destroy_confirmation_message(@issue)}, :method => :delete, :class => 'talk_edit fr' if User.current.allowed_to?(:delete_issues, @project) %> diff --git a/app/views/issues/_form.html.erb b/app/views/issues/_form.html.erb index 7349a5f1d..5679c92d4 100644 --- a/app/views/issues/_form.html.erb +++ b/app/views/issues/_form.html.erb @@ -52,7 +52,7 @@
        • <% if @issue.safe_attribute? 'description' %> - + <%= f.label_for_field :description, :required => @issue.required_attribute?('description'), :no_label => true, :class => "label" %> <%= link_to_function image_tag('edit.png'), '$(this).hide(); $("#issue_description_and_toolbar").show()' unless @issue.new_record? %> <%= content_tag 'span', :id => "issue_description_and_toolbar", :style => (@issue.new_record? ? nil : 'display:none') do %> @@ -87,7 +87,7 @@

        • - + <%= render :partial => 'attachments/form', :locals => {:container => @issue} %>
        • @@ -95,22 +95,22 @@ <%= render :partial => 'issues/attributes' %>
          -
          - + + - - <%= link_to "", - {:controller => 'watchers', :action => 'new', :project_id => @issue.project}, - :remote => true, - :method => 'get', + + <%#= link_to "", +# {:controller => 'watchers', :action => 'new', :project_id => @issue.project}, +# :remote => true, +# :method => 'get', :class => "pic_sch mt5 ml5" %> - - <%= javascript_tag "observeSearchfield('user_search', 'users_for_watcher', '#{ escape_javascript watchers_autocomplete_for_user_path(:user => @available_watchers, :format => 'js', :flag => 'ture') }')" %> -
          - - <%= watchers_checkboxes(@issue, @available_watchers) %> - -
          -
          + + <%#= javascript_tag "observeSearchfield('user_search', 'users_for_watcher', '#{ escape_javascript watchers_autocomplete_for_user_path(:user => @available_watchers, :format => 'js', :flag => 'ture') }')" %> + + + + + + <%= call_hook(:view_issues_form_details_bottom, {:issue => @issue, :form => f}) %> <% end %> \ No newline at end of file From e4abc86093937b78eaffdf4ee8d9bf424250b11a Mon Sep 17 00:00:00 2001 From: lizanle <491823689@qq.com> Date: Fri, 17 Apr 2015 10:38:39 +0800 Subject: [PATCH 109/285] =?UTF-8?q?=E7=89=88=E6=9C=AC=E5=92=8C=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E5=BA=93bug=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/versions_controller.rb | 2 +- app/helpers/application_helper.rb | 4 ++-- .../projects/settings/_new_repositories.html.erb | 7 +++---- app/views/projects/settings/_new_versions.html.erb | 14 +++++++------- app/views/versions/_form.html.erb | 14 +++++++------- 5 files changed, 20 insertions(+), 21 deletions(-) diff --git a/app/controllers/versions_controller.rb b/app/controllers/versions_controller.rb index 57f26103c..36ce47d9e 100644 --- a/app/controllers/versions_controller.rb +++ b/app/controllers/versions_controller.rb @@ -136,7 +136,7 @@ class VersionsController < ApplicationController respond_to do |format| format.html { flash[:notice] = l(:notice_successful_update) - redirect_back_or_default settings_project_path(@project, :tab => 'versions') + redirect_to settings_project_path(@project, :tab => 'versions') } format.api { render_api_ok } end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index dc52de3e3..4c3f08fe4 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -370,9 +370,9 @@ module ApplicationHelper def format_version_name(version) if version.project == @project - h(version) + h(truncate(version.name,:length=>30)) else - h("#{version.project} - #{version}") + h("#{version.project} - #{truncate(version.name,:length=>30)}") end end diff --git a/app/views/projects/settings/_new_repositories.html.erb b/app/views/projects/settings/_new_repositories.html.erb index 783c4a24d..aa188bd69 100644 --- a/app/views/projects/settings/_new_repositories.html.erb +++ b/app/views/projects/settings/_new_repositories.html.erb @@ -21,15 +21,14 @@ <% @project.repositories.sort.each do |repository| %>
    + <%= link_to truncate(repository.identifier), ({:controller => 'repositories', :action => 'show', :id => @project, :repository_id => repository.identifier_param} if repository.identifier.present?), :class =>"c_blue" %> <%if repository.scm_name=="Git"%> + <%=h repository.url.slice(project_path_cut, repository.url.length) %>"> <%=truncate( 'http://' << repository.login.to_s << '_'<< repository.identifier.to_s << '@'<< ip.to_s << h( repository.url.slice(project_path_cut, repository.url.length)),:length=>20)%> <%else %> - + <% end %> <%if repository.scm_name=="Git"%> - <%else %> @@ -33,8 +33,8 @@ diff --git a/app/views/projects/settings/_versions.html.erb b/app/views/projects/settings/_versions.html.erb index 2ca875681..5b0f27953 100644 --- a/app/views/projects/settings/_versions.html.erb +++ b/app/views/projects/settings/_versions.html.erb @@ -42,9 +42,9 @@ <% @project.repositories.sort.each do |repository| %> - + diff --git a/app/views/projects/settings/_new_versions.html.erb b/app/views/projects/settings/_new_versions.html.erb index e52984d15..feb08bac5 100644 --- a/app/views/projects/settings/_new_versions.html.erb +++ b/app/views/projects/settings/_new_versions.html.erb @@ -18,15 +18,15 @@ <% for version in @project.shared_versions.sort %> - - + - + - + <%= link_to truncate(repository.identifier), ({:controller => 'repositories', :action => 'show', :id => @project, :repository_id => repository.identifier_param} if repository.identifier.present?) %> <%if repository.scm_name=="Git"%> diff --git a/public/stylesheets/project.css b/public/stylesheets/project.css index ea0114441..9c2df404b 100644 --- a/public/stylesheets/project.css +++ b/public/stylesheets/project.css @@ -56,7 +56,7 @@ a.invi_search_btn{ background:#15bccf; color:#fff; text-align: center; width:40p a:hover.invi_search_btn{ background:#0da1b2; border:1px solid #0da1b2;} .rolebox{ margin:10px 0;} .w180_h{ width:180px;overflow:hidden; white-space: nowrap; text-overflow:ellipsis; text-align:left;} -.w140_h{ width:135px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;text-align:left; padding-left:5px;} +.w140_h{ width:119px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;text-align:left; padding-left:5px;} /*问题跟踪*/ .problem_top{ margin:10px 0 ;} @@ -394,14 +394,14 @@ blockquote { .box ul li{ line-height:1.9;} .members_left{ float:left; width:410px; margin-right:20px; text-align:center;} .members_left{} -.members_left ul li{ height:30px; border-bottom:1px solid #E4E4E4; width:410px; padding-top:10px; } +.members_left ul li{ height:22px; border-bottom:1px solid #E4E4E4; width:410px; padding-top:5px; } .members_left ul li a{ float:left; text-align:left;} .members_left ul li span{ float:left; text-align:center; color:#484747;text-align:left;} .w150{ text-align:center; width:150px;} .f_b{ font-weight: bold;} .members_right{ float:left; width:240px;} .members_right label{ margin-left:15px;} -.members_jion{ background:#f0fbff; padding:10px; height:200px; margin-bottom:10px;} +.members_jion{ background:#f0f0f0; padding:10px; height:200px; margin-bottom:10px;} .members_add{ padding-left:10px; } .member_search_input{ border:1px solid #15bccf; background:#fff; width:170px; height:24px; color:#9b9b9b; padding-left:5px; margin-bottom:10px;} .member_search_btn{ background:#15bccf; color:#fff; text-align: center; width:40px; height:22px;border:1px solid #15bccf; padding-top:2px; cursor:pointer;} diff --git a/public/stylesheets/public.css b/public/stylesheets/public.css index 55e36e8a9..e07efadd5 100644 --- a/public/stylesheets/public.css +++ b/public/stylesheets/public.css @@ -105,6 +105,7 @@ a:hover.c_orange{color: #d33503;} a.c_lorange{color:#ff9900;} a:hover.c_lorange{color:#fff;} a.c_blue{ color:#15bccf;} +a.c_setting_blue{color: #0781B4} a.c_dblue{ color:#09658c;} a:hover.c_dblue{ color:#15bccf;} a.c_white{ color:#fff;} From 4da77d8a712987d5b2b78cc407982d29e6138678 Mon Sep 17 00:00:00 2001 From: huang Date: Thu, 23 Apr 2015 16:02:18 +0800 Subject: [PATCH 202/285] =?UTF-8?q?wiki=E9=A1=B5=E9=9D=A2=E6=98=BE?= =?UTF-8?q?=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/wiki/_content.html.erb | 3 ++- public/stylesheets/project.css | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/app/views/wiki/_content.html.erb b/app/views/wiki/_content.html.erb index 1f32f58d2..b37e4f970 100644 --- a/app/views/wiki/_content.html.erb +++ b/app/views/wiki/_content.html.erb @@ -1,5 +1,6 @@ <%= textAreailizable content, :text, :attachments => content.page.attachments, - :edit_section_links => (@sections_editable && {:controller => 'wiki', :action => 'edit', :project_id => @page.project, :id => @page.title}) %> + :edit_section_links => (@sections_editable && {:controller => 'wiki', :action => 'edit', :project_id => @page.project, :id => @page.title, :class =>"break_word_firefox"}) + %> <%#= content.text.html_safe %> diff --git a/public/stylesheets/project.css b/public/stylesheets/project.css index 9c2df404b..9ed5c8a37 100644 --- a/public/stylesheets/project.css +++ b/public/stylesheets/project.css @@ -475,6 +475,7 @@ img.ui-datepicker-trigger { .wiki_con_tit{ font-size:14px; color:#09658c; font-weight:bold;width:630px;overflow:hidden; white-space: nowrap; text-overflow:ellipsis; float:left; margin-bottom:10px;} .wiki_con_box{ line-height:1.9; color:#2d2d2d;} .wiki_page_con{ border-bottom:1px dashed #CCC; margin-bottom:10px; padding-bottom:10px;} +.wiki_page p{word-break: break-all;word-wrap: break-word;} #wiki_new_box{ display:none;} /*wiki显示附加*/ .wiki-page {font-size: 14px;color: #09658C !important; font-weight: bold;width: 630px;overflow: hidden;white-space: nowrap;text-overflow: ellipsis;margin-bottom: 10px;} From 5d0d9de6e88e637460f0c6655381c26196b67ab3 Mon Sep 17 00:00:00 2001 From: whimlex Date: Thu, 23 Apr 2015 16:13:01 +0800 Subject: [PATCH 203/285] =?UTF-8?q?=E6=84=8F=E8=A7=81=E5=8F=8D=E9=A6=88?= =?UTF-8?q?=E5=90=84=E4=B8=BB=E9=A1=B5=E5=86=85=E4=BF=9D=E6=8C=81=E4=B8=80?= =?UTF-8?q?=E8=87=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/layouts/_base_feedback.html.erb | 62 +++++------------------ public/javascripts/feedback.js | 61 ++++++++++++++++------ 2 files changed, 59 insertions(+), 64 deletions(-) diff --git a/app/views/layouts/_base_feedback.html.erb b/app/views/layouts/_base_feedback.html.erb index 7105aff47..89faf39e3 100644 --- a/app/views/layouts/_base_feedback.html.erb +++ b/app/views/layouts/_base_feedback.html.erb @@ -1,11 +1,4 @@ - - - - - -<%= l(:label_feedback) %> - - - + +
    @@ -184,17 +161,4 @@ function cookieget(n)
    <%= l(:label_submit)%>
    - - - - \ No newline at end of file diff --git a/public/javascripts/feedback.js b/public/javascripts/feedback.js index a3707b312..dfd3e10b2 100644 --- a/public/javascripts/feedback.js +++ b/public/javascripts/feedback.js @@ -5,17 +5,18 @@ minStatue : true, skin : 'blue', durationTime : 1000 - }; + } var options = $.extend(defaults, options); this.each(function(){ + //??????? var thisBox = $(this), closeBtn = thisBox.find('.close_btn' ), show_btn = thisBox.find('.show_btn' ), sideContent = thisBox.find('.side_content'), sideList = thisBox.find('.side_list') ; - var defaultTop = thisBox.offset().top; + var defaultTop = thisBox.offset().top; //????????top thisBox.css(options.float, 0); if(options.minStatue == "true"){ @@ -24,34 +25,59 @@ show_btn.css('width', 25); } + //close closeBtn.bind("click",function(){ sideContent.animate({width: '0px'},"fast"); show_btn.stop(true, true).delay(300).animate({ width: '25px'},"fast"); - cookiesave('minStatue','false','','',''); + cookiesave('minStatue','true','','',''); }); + //show show_btn.bind("click",function() { $(this).animate({width: '0px'},"fast"); sideContent.stop(true, true).delay(200).animate({ width: '154px'},"fast"); - cookiesave('minStatue','true','','',''); + cookiesave('minStatue','false','','',''); }); - }); + + + + }); //end this.each }; })(jQuery); + +$(function(){ + $("#button1").click(function(){ + myTips("<%= l(:label_feedback_success) %>","success"); + }); + +}); + +function f_submit() +{ + var subject = $("#memo_subject").val(); + var content = $("#memo_content_1").val(); + $("#memo_subject").val(subject+":"+ content.substr(0,18)); + $("#new_memo").submit(); +} + function cookiesave(n, v, mins, dn, path) { if(n) { + if(!mins) mins = 365 * 24 * 60; if(!path) path = "/"; var date = new Date(); + date.setTime(date.getTime() + (mins * 60 * 1000)); + var expires = "; expires=" + date.toGMTString(); + if(dn) dn = "domain=" + dn + "; "; document.cookie = n + "=" + v + expires + "; " + dn + "path=" + path; + } } - function cookieget(n) { var name = n + "="; @@ -61,18 +87,11 @@ function cookieget(n) while (c.charAt(0)==' ') c = c.substring(1,c.length); if (c.indexOf(name) == 0){ return c.substring(name.length,c.length);} + } return false; } -$(function() { - $("#scrollsidebar").fix({ - float : 'right', //default.left or right - minStatue : cookieget('minStatue'), - skin : 'green', //default.gray or blue - durationTime : 600 - }); -}); $(function(){ $("#button1").click(function(){ @@ -86,4 +105,16 @@ function f_submit() var content = $("#memo_content").val(); $("#memo_subject").val(subject+":"+ content.substr(0,18)); $("#new_memo").submit(); -} \ No newline at end of file +} + + +$(document).ready(function () { + $(function () { + $("#scrollsidebar").fix({ + float: 'right', //default.left or right + minStatue: cookieget('minStatue'), + skin: 'green', //default.gray or blue + durationTime: 600 + }); + }); +}); \ No newline at end of file From 66057b5b4f7326894d5be6b91b382b078f8a994a Mon Sep 17 00:00:00 2001 From: sw <939547590@qq.com> Date: Thu, 23 Apr 2015 16:19:23 +0800 Subject: [PATCH 204/285] =?UTF-8?q?=E7=BC=96=E8=BE=91=E5=B8=96=E5=AD=90?= =?UTF-8?q?=E6=97=B6=E7=9A=84=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/memos/edit.html.erb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/views/memos/edit.html.erb b/app/views/memos/edit.html.erb index 00ce81933..b7aa08abd 100644 --- a/app/views/memos/edit.html.erb +++ b/app/views/memos/edit.html.erb @@ -43,12 +43,13 @@ <%= f.kindeditor :content, :required => true, :size => 80,:owner_id => @memo.id,:owner_type => 1 %>

    -

    +

    <%= l(:label_attachment_plural) %>
    <%= render :partial => 'attachments/form', :locals => {:container => @memo} %>


    +
    <%= f.submit :value => l(:button_change) %>  <%= link_to l(:button_back), back_url ,:class => "button-canel",:style => "color: #ffffff;"%>
    <% end %> From 4224e11b527f9cd8307e923caacc0baa46e76c25 Mon Sep 17 00:00:00 2001 From: sw <939547590@qq.com> Date: Thu, 23 Apr 2015 16:34:09 +0800 Subject: [PATCH 205/285] =?UTF-8?q?=E8=AF=BE=E7=A8=8B=E8=AE=A8=E8=AE=BA?= =?UTF-8?q?=E5=8C=BA=E6=A0=87=E9=A2=98=E6=8D=A2=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/messages/_course_show.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/messages/_course_show.html.erb b/app/views/messages/_course_show.html.erb index 256c41b99..2042a05ee 100644 --- a/app/views/messages/_course_show.html.erb +++ b/app/views/messages/_course_show.html.erb @@ -8,7 +8,7 @@ <%= link_to image_tag(url_to_avatar(@topic.author),:width => '46',:height => '46'), user_path(@topic.author) %>
    -

    +

    <%= @topic.subject %>


    From 4c1259ff925e6cecd332c3cf34c265b615c8210f Mon Sep 17 00:00:00 2001 From: huang Date: Thu, 23 Apr 2015 16:56:18 +0800 Subject: [PATCH 206/285] =?UTF-8?q?=E7=BC=BA=E9=99=B7enter=E9=94=AE?= =?UTF-8?q?=E7=9B=98=E4=B8=8D=E8=83=BD=E6=90=9C=E7=B4=A2=EF=BC=88=E6=9C=AA?= =?UTF-8?q?=E5=AE=8C=E6=88=90=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/issues/index.html.erb | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/app/views/issues/index.html.erb b/app/views/issues/index.html.erb index ac5a46bfe..d260d6eef 100644 --- a/app/views/issues/index.html.erb +++ b/app/views/issues/index.html.erb @@ -16,6 +16,13 @@ }); } + function EnterPress(e){ + var e = e || window.event; + if(e.keyCode == 13){ + alert("111"); + } + } + @@ -27,7 +34,7 @@ <%= form_tag({:controller => 'issues', :action => 'index', :project_id => @project}, :method => :get,:id=>"issue_query_form", :class => 'query_form') do %> <%= hidden_field_tag 'set_filter', '1' %> From 15d7cde0552957ba8c7332438e0169cafda32f42 Mon Sep 17 00:00:00 2001 From: whimlex Date: Thu, 23 Apr 2015 16:57:18 +0800 Subject: [PATCH 207/285] =?UTF-8?q?=E6=84=8F=E8=A7=81=E5=8F=8D=E9=A6=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/locales/commons/zh.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/locales/commons/zh.yml b/config/locales/commons/zh.yml index b506ce14b..366841e37 100644 --- a/config/locales/commons/zh.yml +++ b/config/locales/commons/zh.yml @@ -354,7 +354,7 @@ zh: label_feedback_tips: "有什么想说的,尽管来咆哮吧~~" label_technical_support: "技术支持:" label_feedback_success: "您的意见已经反馈到公共贴吧的新手讨论吧,我们会第一时间解决您的问题,谢谢支持!" - label_feedback_value: "用户意见反馈" + label_feedback_value: "用户反馈" From 7e7ff92f7c2591cae32680697b28bb26a1c83e8c Mon Sep 17 00:00:00 2001 From: huang Date: Thu, 23 Apr 2015 17:02:26 +0800 Subject: [PATCH 208/285] =?UTF-8?q?issueenter=E9=94=AE=E4=B8=8D=E8=83=BD?= =?UTF-8?q?=E6=90=9C=E7=B4=A2=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/issues/index.html.erb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/views/issues/index.html.erb b/app/views/issues/index.html.erb index d260d6eef..3fb604f06 100644 --- a/app/views/issues/index.html.erb +++ b/app/views/issues/index.html.erb @@ -19,7 +19,7 @@ function EnterPress(e){ var e = e || window.event; if(e.keyCode == 13){ - alert("111"); + remote_function(); } } @@ -31,7 +31,7 @@
    <% unless @project.enabled_modules.where("name = 'issue_tracking'").empty? %> - <%= form_tag({:controller => 'issues', :action => 'index', :project_id => @project}, :method => :get,:id=>"issue_query_form", :class => 'query_form') do %> + <%#= form_tag({:controller => 'issues', :action => 'index', :project_id => @project}, :method => :get,:id=>"issue_query_form", :class => 'query_form') do %> <%= hidden_field_tag 'set_filter', '1' %>
    - <% end %> + <%# end %>

    <%= l(:label_issues_sum) %>:<%= @project.issues.count %> <%= l(:lable_issues_undo) %>:<%= @project.issues.where('status_id in (1,2,4,6)').count %>

    From 10bc470dcf16fddd218f54562915e7b5cff9fd28 Mon Sep 17 00:00:00 2001 From: sw <939547590@qq.com> Date: Thu, 23 Apr 2015 17:32:37 +0800 Subject: [PATCH 209/285] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=AF=BE=E7=A8=8B?= =?UTF-8?q?=E8=AE=A8=E8=AE=BA=E5=8C=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/messages/_course_show.html.erb | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/app/views/messages/_course_show.html.erb b/app/views/messages/_course_show.html.erb index 2042a05ee..018783fbd 100644 --- a/app/views/messages/_course_show.html.erb +++ b/app/views/messages/_course_show.html.erb @@ -3,12 +3,23 @@ <%= l(:label_board) %>
    + +
    +

    + <%= l(:label_user_location) %> : + <%= link_to l(:label_borad_course), course_boards_path(@course) %> + > + <%= link_to @topic.subject, course_board_path(@course, @board) %> +

    +
    +
    +
    <%= link_to image_tag(url_to_avatar(@topic.author),:width => '46',:height => '46'), user_path(@topic.author) %>
    -

    +

    <%= @topic.subject %>


    @@ -51,7 +62,7 @@ <% unless @replies.empty? %> <% reply_count = 0 %> <% @replies.each do |message| %> -
    "> +
    ">
    <%= link_to image_tag(url_to_avatar(message.author), :width => '46',:height => '46'), user_path(message.author) %>
    From 65d62667d632cdc252e906e7af5aaedacbe1d74c Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Thu, 23 Apr 2015 17:42:03 +0800 Subject: [PATCH 210/285] =?UTF-8?q?=E9=82=AE=E4=BB=B6=E5=8A=A0=E5=85=A5?= =?UTF-8?q?=E4=B8=89=E4=B8=AA=E9=82=AE=E4=BB=B6=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/application_controller.rb | 3 +- app/controllers/my_controller.rb | 15 ++- app/controllers/test_controller.rb | 95 ++++++++++++++++++- app/models/mailer.rb | 18 ++-- app/models/token.rb | 8 ++ app/views/mailer/issue_add.html.erb | 14 ++- app/views/mailer/issue_edit.html.erb | 11 ++- .../mailer/send_for_user_activities.html.erb | 12 ++- config/configuration.yml | 8 ++ config/locales/my/zh.yml | 1 + config/locales/zh.yml | 6 +- config/routes.rb | 2 + script/delayed_job | 10 +- 13 files changed, 170 insertions(+), 33 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 47251cf85..741af2aee 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -894,7 +894,6 @@ class ApplicationController < ActionController::Base set_autologin_cookie(user) end call_hook(:controller_account_success_authentication_after, {:user => user }) - - end + end diff --git a/app/controllers/my_controller.rb b/app/controllers/my_controller.rb index 7ff015fbc..d42a750a1 100644 --- a/app/controllers/my_controller.rb +++ b/app/controllers/my_controller.rb @@ -20,7 +20,7 @@ class MyController < ApplicationController # edit before_filter :auth_login1, :only => [:account] # - before_filter :require_login + before_filter :require_login, except: [:change_mail_notification] helper :issues helper :users @@ -75,6 +75,19 @@ class MyController < ApplicationController end end + def change_mail_notification + token = params[:token] + user = try_to_autologin1 + if user + user.mail_notification = params[:mail_notification] + user.save + flash[:notice] = l(:notice_mail_notification_updated) + redirect_to my_account_url + else + redirect_to signin_url + end + end + # Edit user's account def account @user = User.current diff --git a/app/controllers/test_controller.rb b/app/controllers/test_controller.rb index 22cf7d1d5..51ff293f1 100644 --- a/app/controllers/test_controller.rb +++ b/app/controllers/test_controller.rb @@ -57,5 +57,98 @@ class TestController < ApplicationController attach.filename end + def mailer() + raise unless Rails.env.development? + @user = User.find(params[:user_id]) + send_for_user_activities(@user, Time.now,1) + render 'mailer/send_for_user_activities' + end + def send_for_user_activities(user, date_to, days) + date_from = date_to - days.days -end \ No newline at end of file + subject = "[ #{user.show_name}#{l(:label_day_mail)}]" + @subject = " #{user.show_name}#{l(:label_day_mail)}" + + date_from = "#{date_from} 17:59:59" + date_to = "#{date_to} 17:59:59" + + # 生成token用于直接点击登录 + @user = user + token = Token.new(:user =>user , :action => 'autologin') + token.save + @token = token + + # 查询user参加的项目及课程 + projects = user.projects + courses = user.courses + project_ids = projects.map{|project| project.id}.join(",") + course_ids = courses.map {|course| course.id}.join(",") + + # 查询user的缺陷,包括发布的,跟踪的以及被指派的缺陷 + sql = "select DISTINCT i.* from issues i, watchers w + where (i.assigned_to_id = #{user.id} or i.author_id = #{user.id} + or (w.watchable_type = 'Issue' and w.watchable_id = i.id and w.user_id = #{user.id})) + and (i.created_on between '#{date_from}' and '#{date_to}') order by i.created_on desc" + @issues = Issue.find_by_sql(sql) + + # @bids 查询课程作业,包括老师发布的作业,以及user提交作业 + # @attachments查询课程课件更新 + @attachments ||= [] + + @bids ||= [] # 老师发布的作业 + + unless courses.first.nil? + count = courses.count + count = count - 1 + for i in 0..count do + bids = courses[i].homeworks.where("bids.created_on between '#{date_from}' and '#{date_to}'").order("bids.created_on desc") + attachments = courses[i].attachments.where("attachments.created_on between '#{date_from}' and '#{date_to}'").order('attachments.created_on DESC') + @bids += bids if bids.count > 0 + @attachments += attachments if attachments.count > 0 + end + end + # user 提交的作业 + @homeworks = HomeworkAttach.where("user_id=#{user.id} and (created_at between '#{date_from}' and '#{date_to}')").order("created_at desc") + + # 查询user在课程。项目中发布的讨论帖子 + messages = Message.find_by_sql("select DISTINCT * from messages where author_id = #{user.id} and (created_on between '#{date_from}' and '#{date_to}') order by created_on desc") + @course_messages ||= [] + @project_messages ||= [] + unless messages.first.nil? + messages.each do |msg| + if msg.project + @project_messages << msg + elsif msg.course + @course_messages << msg + end + end + end + # 查询user在课程中发布的通知,项目中发的新闻 + @course_news = (course_ids && !course_ids.empty?) ? News.find_by_sql("select DISTINCT n.* from news n + where n.course_id in (#{course_ids}) + and (created_on between '#{date_from}' and '#{date_to}') order by created_on desc") : [] + @project_news = (project_ids && !project_ids.empty?) ? News.find_by_sql("select DISTINCT n.* from news n where n.project_id in (#{project_ids}) + and (created_on between '#{date_from}' and '#{date_to}') order by created_on desc") : [] + + # 查询user在课程及个人中留言 + @course_journal_messages = JournalsForMessage.find_by_sql("select DISTINCT * from journals_for_messages where + jour_type='Course' and user_id = #{user.id} + and (created_on between '#{date_from}' and '#{date_to}') order by created_on desc") + @user_journal_messages = user.journals_for_messages.where("m_parent_id IS NULL and (created_on between '#{date_from}' and '#{date_to}')").order('created_on DESC') + + + # 查询user新建贴吧或发布帖子 + @forums = Forum.find_by_sql("select DISTINCT * from forums where creator_id = #{user.id} and (created_at between '#{date_from}' and '#{date_to}') order by created_at desc") + @memos = Memo.find_by_sql("select DISTINCT m.* from memos m, forums f where (m.author_id = #{user.id} or (m.forum_id = f.id and f.creator_id = #{user.id})) + and (m.created_at between '#{date_from}' and '#{date_to}') order by m.created_at desc") + + + has_content = [@issues,@homeworks,@course_messages,@project_messages,@course_news,@project_news, + @course_journal_messages,@user_journal_messages,@forums,@memos,@attachments,@bids].any? {|o| + !o.empty? + } + #有内容才发,没有不发 + end + + +end diff --git a/app/models/mailer.rb b/app/models/mailer.rb index 3741e43cb..eacead013 100644 --- a/app/models/mailer.rb +++ b/app/models/mailer.rb @@ -72,11 +72,8 @@ class Mailer < ActionMailer::Base # 生成token用于直接点击登录 @user = user - token = Token.new(:user =>user , :action => 'autologin') - token.save - @token = token + @token = Token.get_token_from_user(user, 'autologin') - @user_url = url_for(my_account_url(user,:token => @token.value)) # 查询user参加的项目及课程 projects = user.projects courses = user.courses @@ -256,10 +253,9 @@ class Mailer < ActionMailer::Base @author = issue.author @issue = issue user = User.find_by_mail(recipients) - token = Token.new(:user =>user , :action => 'autologin') - token.save - @token = token - @issue_url = url_for(:controller => 'issues', :action => 'show', :id => issue.id, :token => @token.value) + @user = user + @token = Token.get_token_from_user(user, 'autologin') + @issue_url = url_for(:controller => 'issues', :action => 'show', :id => issue.id, :token => @token.value) # edit @issue_author_url = url_for(user_activities_url(@author,:token => @token.value)) @@ -299,10 +295,8 @@ class Mailer < ActionMailer::Base @author = journal.user user = User.find_by_mail(recipients) - - token = Token.new(:user =>user , :action => 'autologin') - token.save - @token = token + @user = user + @token = Token.get_token_from_user(user, 'autologin') # edit diff --git a/app/models/token.rb b/app/models/token.rb index 3131bce8d..c89ff30bc 100644 --- a/app/models/token.rb +++ b/app/models/token.rb @@ -27,6 +27,14 @@ class Token < ActiveRecord::Base self.value = Token.generate_token_value end + def self.get_token_from_user(user, action) + token = Token.where(:action => action, :user_id => user).first + unless token + token = Token.create(user: user, action: action) + end + token + end + # Return true if token has expired def expired? return Time.now > self.created_on + @@validity_time diff --git a/app/views/mailer/issue_add.html.erb b/app/views/mailer/issue_add.html.erb index 0b60097a7..d77149831 100644 --- a/app/views/mailer/issue_add.html.erb +++ b/app/views/mailer/issue_add.html.erb @@ -1,9 +1,13 @@
    - - <%= render :partial => 'issue', :formats => [:html], :locals => { :issue => @issue, :issue_url => @issue_url } %> - -
    -
    <%= link_to( l(:mail_issue_footer), @user_url , :style=>'font-size:12px; font-weight:normal; color:#1b55a7;') %>
    +
    + <% [:label_user_mail_option_all, :label_user_mail_option_day, :label_user_mail_option_none].each do |mail_option| %> + <% if Hash[*User::MAIL_NOTIFICATION_OPTIONS.flatten][@user.mail_notification] == mail_option %> + + <% else %> + <%= link_to l(mail_option), my_change_mail_notification_url(token: @token.value,mail_notification: Hash[*User::MAIL_NOTIFICATION_OPTIONS.flatten].invert[mail_option]), :style => "margin-top:20px;color:#2775d2; margin-left:10px;" %> + <% end %> + <% end %> +
    diff --git a/app/views/mailer/issue_edit.html.erb b/app/views/mailer/issue_edit.html.erb index 35b963b41..a02fe47f5 100644 --- a/app/views/mailer/issue_edit.html.erb +++ b/app/views/mailer/issue_edit.html.erb @@ -3,5 +3,14 @@ <%= render :partial => 'issue', :formats => [:html], :locals => { :issue => @issue, :issue_url => @issue_url } %> -
    <%= link_to( l(:mail_issue_footer), @user_url, :style=>'font-size:12px; font-weight:normal; color:#1b55a7;') %>
    + +
    + <% [:label_user_mail_option_all, :label_user_mail_option_day, :label_user_mail_option_none].each do |mail_option| %> + <% if Hash[*User::MAIL_NOTIFICATION_OPTIONS.flatten][@user.mail_notification] == mail_option %> + + <% else %> + <%= link_to l(mail_option), my_change_mail_notification_url(token: @token.value,mail_notification: Hash[*User::MAIL_NOTIFICATION_OPTIONS.flatten].invert[mail_option]), :style => "margin-top:20px;color:#2775d2; margin-left:10px;" %> + <% end %> + <% end %> +
    diff --git a/app/views/mailer/send_for_user_activities.html.erb b/app/views/mailer/send_for_user_activities.html.erb index 712e11246..73a561ca3 100644 --- a/app/views/mailer/send_for_user_activities.html.erb +++ b/app/views/mailer/send_for_user_activities.html.erb @@ -3,6 +3,8 @@ + +

    <%= @subject %> @@ -365,9 +367,13 @@

    <% end %>
    - <%= link_to l(:mail_footer), @user_url, :style => "margin-top:20px;color:#2775d2; margin-left:10px;" %> + <% [:label_user_mail_option_all, :label_user_mail_option_day, :label_user_mail_option_none].each do |mail_option| %> + <% if Hash[*User::MAIL_NOTIFICATION_OPTIONS.flatten][@user.mail_notification] == mail_option %> + + <% else %> + <%= link_to l(mail_option), my_change_mail_notification_url(token: @token.value,mail_notification: Hash[*User::MAIL_NOTIFICATION_OPTIONS.flatten].invert[mail_option]), :style => "margin-top:20px;color:#2775d2; margin-left:10px;" %> + <% end %> + <% end %>
    - -
    diff --git a/config/configuration.yml b/config/configuration.yml index 415d4b072..5eba1c71d 100644 --- a/config/configuration.yml +++ b/config/configuration.yml @@ -215,3 +215,11 @@ production: # specific configuration options for development environment # that overrides the default ones development: + delivery_method: :smtp + smtp_settings: + address: mail.trustie.net + port: 25 + domain: mail.trustie.net + authentication: :login + user_name: "mail@trustie.net" + password: "loong2010" diff --git a/config/locales/my/zh.yml b/config/locales/my/zh.yml index 5a4a7c255..35fd4e48a 100644 --- a/config/locales/my/zh.yml +++ b/config/locales/my/zh.yml @@ -68,6 +68,7 @@ zh: label_user_extensions: 其他信息 notice_account_updated: 帐号更新成功 + notice_mail_notification_updated: 邮件通知设置成功 # diff --git a/config/locales/zh.yml b/config/locales/zh.yml index 1d5add364..de3ae4d53 100644 --- a/config/locales/zh.yml +++ b/config/locales/zh.yml @@ -744,9 +744,10 @@ zh: label_theme: 主题 label_default: 默认 label_search_titles_only: 仅在标题中搜索 - label_user_mail_option_all: "收取我的所有通知" + label_user_mail_option_all: "实时发送邮件" + label_user_mail_option_day: "按日发送邮件" + label_user_mail_option_none: "不发送邮件" label_user_mail_option_week: "按周收取我的所有通知" - label_user_mail_option_day: "按天收取我的所有通知" label_must_answer: "必答" label_poll_title: 问卷调查_问卷页面 #huang @@ -782,7 +783,6 @@ zh: label_project_cousre_studentun: "你还未加入任何课程,赶快加入吧!" #end by huang label_user_mail_option_selected: "收取选中项目的所有通知" - label_user_mail_option_none: "不收取任何通知" label_user_mail_option_only_my_events: "只收取我跟踪或参与的项目的通知" label_user_mail_option_only_assigned: "只收取分配给我的" label_user_mail_option_only_owner: 只收取由我创建的 diff --git a/config/routes.rb b/config/routes.rb index ffab908bd..d3b8a1b37 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -109,6 +109,7 @@ RedmineApp::Application.routes.draw do namespace :test do match 'courselist' match 'zip' + match 'mailer' end ##new added by linchun #以发布应用的形式参与竞赛 resources :softapplications do @@ -328,6 +329,7 @@ RedmineApp::Application.routes.draw do match 'my/add_block', :via => :post match 'my/remove_block', :via => :post match 'my/order_blocks', :via => :post + match 'my/change_mail_notification', via: :get get 'my/page2', :to => 'my#page2', :as => "my_page2" diff --git a/script/delayed_job b/script/delayed_job index 17f9f6e90..edf195985 100644 --- a/script/delayed_job +++ b/script/delayed_job @@ -1,5 +1,5 @@ -#!/usr/bin/env ruby - -require File.expand_path(File.join(File.dirname(__FILE__), '..', 'config', 'environment')) -require 'delayed/command' -Delayed::Command.new(ARGV).daemonize +#!/usr/bin/env ruby + +require File.expand_path(File.join(File.dirname(__FILE__), '..', 'config', 'environment')) +require 'delayed/command' +Delayed::Command.new(ARGV).daemonize From 3f9abf170edb9cf32221589f61665b13ee7b1983 Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Thu, 23 Apr 2015 08:49:14 +0800 Subject: [PATCH 211/285] =?UTF-8?q?#2363=20=E6=8C=89=E5=A4=A9=E5=8F=91?= =?UTF-8?q?=E9=80=81=E9=82=AE=E4=BB=B6=E7=9B=B8=E5=85=B3=E6=A0=87=E9=A2=98?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/mailer.rb | 4 +- config/locales/zh.yml | 2 +- db/schema.rb | 2934 ++++++++++++++++++++--------------------- 3 files changed, 1470 insertions(+), 1470 deletions(-) diff --git a/app/models/mailer.rb b/app/models/mailer.rb index acc268275..3741e43cb 100644 --- a/app/models/mailer.rb +++ b/app/models/mailer.rb @@ -64,8 +64,8 @@ class Mailer < ActionMailer::Base def send_for_user_activities(user, date_to, days) date_from = date_to - days.days - subject = "[ #{user.show_name} : #{l(:label_day_mail)}]" - @subject = " #{user.show_name} : #{date_to} #{l(:label_day_mail)}" + subject = "[ #{user.show_name}#{l(:label_day_mail)}]" + @subject = " #{user.show_name}#{l(:label_day_mail)}" date_from = "#{date_from} 17:59:59" date_to = "#{date_to} 17:59:59" diff --git a/config/locales/zh.yml b/config/locales/zh.yml index f537acbeb..1d5add364 100644 --- a/config/locales/zh.yml +++ b/config/locales/zh.yml @@ -80,7 +80,7 @@ zh: field_enterprise_name: 组织 label_week_mail: 一周动态 - label_day_mail: 今日动态 + label_day_mail: 您好!Trustie平台上与您相关的今日动态 #added by huang field_tea_name: 教师 field_couurse_time: 学时 diff --git a/db/schema.rb b/db/schema.rb index ecba4ba96..3e07b71db 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -1,1467 +1,1467 @@ -# encoding: UTF-8 -# This file is auto-generated from the current state of the database. Instead -# of editing this file, please use the migrations feature of Active Record to -# incrementally modify your database, and then regenerate this schema definition. -# -# Note that this schema.rb definition is the authoritative source for your -# database schema. If you need to create the application database on another -# system, you should be using db:schema:load, not running all the migrations -# from scratch. The latter is a flawed and unsustainable approach (the more migrations -# you'll amass, the slower it'll run and the greater likelihood for issues). -# -# It's strongly recommended to check this file into your version control system. - -ActiveRecord::Schema.define(:version => 20150422034543) do - - create_table "activities", :force => true do |t| - t.integer "act_id", :null => false - t.string "act_type", :null => false - t.integer "user_id", :null => false - end - - add_index "activities", ["act_id", "act_type"], :name => "index_activities_on_act_id_and_act_type" - add_index "activities", ["user_id", "act_type"], :name => "index_activities_on_user_id_and_act_type" - add_index "activities", ["user_id"], :name => "index_activities_on_user_id" - - create_table "api_keys", :force => true do |t| - t.string "access_token" - t.datetime "expires_at" - t.integer "user_id" - t.boolean "active", :default => true - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - add_index "api_keys", ["access_token"], :name => "index_api_keys_on_access_token" - add_index "api_keys", ["user_id"], :name => "index_api_keys_on_user_id" - - create_table "applied_projects", :force => true do |t| - t.integer "project_id", :null => false - t.integer "user_id", :null => false - end - - create_table "apply_project_masters", :force => true do |t| - t.integer "user_id" - t.string "apply_type" - t.integer "apply_id" - t.integer "status" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "attachments", :force => true do |t| - t.integer "container_id" - t.string "container_type", :limit => 30 - t.string "filename", :default => "", :null => false - t.string "disk_filename", :default => "", :null => false - t.integer "filesize", :default => 0, :null => false - t.string "content_type", :default => "" - t.string "digest", :limit => 40, :default => "", :null => false - t.integer "downloads", :default => 0, :null => false - t.integer "author_id", :default => 0, :null => false - t.datetime "created_on" - t.string "description" - t.string "disk_directory" - t.integer "attachtype", :default => 1 - t.integer "is_public", :default => 1 - t.integer "copy_from" - t.integer "quotes" - end - - add_index "attachments", ["author_id"], :name => "index_attachments_on_author_id" - add_index "attachments", ["container_id", "container_type"], :name => "index_attachments_on_container_id_and_container_type" - add_index "attachments", ["created_on"], :name => "index_attachments_on_created_on" - - create_table "attachmentstypes", :force => true do |t| - t.integer "typeId", :null => false - t.string "typeName", :limit => 50 - end - - create_table "auth_sources", :force => true do |t| - t.string "type", :limit => 30, :default => "", :null => false - t.string "name", :limit => 60, :default => "", :null => false - t.string "host", :limit => 60 - t.integer "port" - t.string "account" - t.string "account_password", :default => "" - t.string "base_dn" - t.string "attr_login", :limit => 30 - t.string "attr_firstname", :limit => 30 - t.string "attr_lastname", :limit => 30 - t.string "attr_mail", :limit => 30 - t.boolean "onthefly_register", :default => false, :null => false - t.boolean "tls", :default => false, :null => false - t.string "filter" - t.integer "timeout" - end - - add_index "auth_sources", ["id", "type"], :name => "index_auth_sources_on_id_and_type" - - create_table "biding_projects", :force => true do |t| - t.integer "project_id" - t.integer "bid_id" - t.integer "user_id" - t.string "description" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.string "reward" - end - - create_table "bids", :force => true do |t| - t.string "name" - t.string "budget", :null => false - t.integer "author_id" - t.date "deadline" - t.text "description" - t.datetime "created_on", :null => false - t.datetime "updated_on", :null => false - t.integer "commit" - t.integer "reward_type" - t.integer "homework_type" - t.integer "parent_id" - t.string "password" - t.integer "is_evaluation" - t.integer "proportion", :default => 60 - t.integer "comment_status", :default => 0 - t.integer "evaluation_num", :default => 3 - t.integer "open_anonymous_evaluation", :default => 1 - end - - create_table "boards", :force => true do |t| - t.integer "project_id", :null => false - t.string "name", :default => "", :null => false - t.string "description" - t.integer "position", :default => 1 - t.integer "topics_count", :default => 0, :null => false - t.integer "messages_count", :default => 0, :null => false - t.integer "last_message_id" - t.integer "parent_id" - t.integer "course_id" - end - - add_index "boards", ["last_message_id"], :name => "index_boards_on_last_message_id" - add_index "boards", ["project_id"], :name => "boards_project_id" - - create_table "bug_to_osps", :force => true do |t| - t.integer "osp_id" - t.integer "relative_memo_id" - t.string "description" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "changes", :force => true do |t| - t.integer "changeset_id", :null => false - t.string "action", :limit => 1, :default => "", :null => false - t.text "path", :null => false - t.text "from_path" - t.string "from_revision" - t.string "revision" - t.string "branch" - end - - add_index "changes", ["changeset_id"], :name => "changesets_changeset_id" - - create_table "changeset_parents", :id => false, :force => true do |t| - t.integer "changeset_id", :null => false - t.integer "parent_id", :null => false - end - - add_index "changeset_parents", ["changeset_id"], :name => "changeset_parents_changeset_ids" - add_index "changeset_parents", ["parent_id"], :name => "changeset_parents_parent_ids" - - create_table "changesets", :force => true do |t| - t.integer "repository_id", :null => false - t.string "revision", :null => false - t.string "committer" - t.datetime "committed_on", :null => false - t.text "comments" - t.date "commit_date" - t.string "scmid" - t.integer "user_id" - end - - add_index "changesets", ["committed_on"], :name => "index_changesets_on_committed_on" - add_index "changesets", ["repository_id", "revision"], :name => "changesets_repos_rev", :unique => true - add_index "changesets", ["repository_id", "scmid"], :name => "changesets_repos_scmid" - add_index "changesets", ["repository_id"], :name => "index_changesets_on_repository_id" - add_index "changesets", ["user_id"], :name => "index_changesets_on_user_id" - - create_table "changesets_issues", :id => false, :force => true do |t| - t.integer "changeset_id", :null => false - t.integer "issue_id", :null => false - end - - add_index "changesets_issues", ["changeset_id", "issue_id"], :name => "changesets_issues_ids", :unique => true - - create_table "code_review_assignments", :force => true do |t| - t.integer "issue_id" - t.integer "change_id" - t.integer "attachment_id" - t.string "file_path" - t.string "rev" - t.string "rev_to" - t.string "action_type" - t.integer "changeset_id" - end - - create_table "code_review_project_settings", :force => true do |t| - t.integer "project_id" - t.integer "tracker_id" - t.datetime "created_at" - t.datetime "updated_at" - t.integer "updated_by" - t.boolean "hide_code_review_tab", :default => false - t.integer "auto_relation", :default => 1 - t.integer "assignment_tracker_id" - t.text "auto_assign" - t.integer "lock_version", :default => 0, :null => false - t.boolean "tracker_in_review_dialog", :default => false - end - - create_table "code_review_user_settings", :force => true do |t| - t.integer "user_id", :default => 0, :null => false - t.integer "mail_notification", :default => 0, :null => false - t.datetime "created_at" - t.datetime "updated_at" - end - - create_table "code_reviews", :force => true do |t| - t.integer "project_id" - t.integer "change_id" - t.datetime "created_at" - t.datetime "updated_at" - t.integer "line" - t.integer "updated_by_id" - t.integer "lock_version", :default => 0, :null => false - t.integer "status_changed_from" - t.integer "status_changed_to" - t.integer "issue_id" - t.string "action_type" - t.string "file_path" - t.string "rev" - t.string "rev_to" - t.integer "attachment_id" - t.integer "file_count", :default => 0, :null => false - t.boolean "diff_all" - end - - create_table "comments", :force => true do |t| - t.string "commented_type", :limit => 30, :default => "", :null => false - t.integer "commented_id", :default => 0, :null => false - t.integer "author_id", :default => 0, :null => false - t.text "comments" - t.datetime "created_on", :null => false - t.datetime "updated_on", :null => false - end - - add_index "comments", ["author_id"], :name => "index_comments_on_author_id" - add_index "comments", ["commented_id", "commented_type"], :name => "index_comments_on_commented_id_and_commented_type" - - create_table "contest_notifications", :force => true do |t| - t.text "title" - t.text "content" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "contesting_projects", :force => true do |t| - t.integer "project_id" - t.string "contest_id" - t.integer "user_id" - t.string "description" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.string "reward" - end - - create_table "contesting_softapplications", :force => true do |t| - t.integer "softapplication_id" - t.integer "contest_id" - t.integer "user_id" - t.string "description" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.string "reward" - end - - create_table "contestnotifications", :force => true do |t| - t.integer "contest_id" - t.string "title" - t.string "summary" - t.text "description" - t.integer "author_id" - t.integer "notificationcomments_count" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "contests", :force => true do |t| - t.string "name" - t.string "budget", :default => "" - t.integer "author_id" - t.date "deadline" - t.string "description" - t.integer "commit" - t.string "password" - t.datetime "created_on", :null => false - t.datetime "updated_on", :null => false - end - - create_table "course_attachments", :force => true do |t| - t.string "filename" - t.string "disk_filename" - t.integer "filesize" - t.string "content_type" - t.string "digest" - t.integer "downloads" - t.string "author_id" - t.string "integer" - t.string "description" - t.string "disk_directory" - t.integer "attachtype" - t.integer "is_public" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "container_id", :default => 0 - end - - create_table "course_groups", :force => true do |t| - t.string "name" - t.integer "course_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "course_infos", :force => true do |t| - t.integer "course_id" - t.integer "user_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "course_statuses", :force => true do |t| - t.integer "changesets_count" - t.integer "watchers_count" - t.integer "course_id" - t.float "grade", :default => 0.0 - t.integer "course_ac_para", :default => 0 - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "courses", :force => true do |t| - t.integer "tea_id" - t.string "name" - t.integer "state" - t.string "code" - t.integer "time" - t.string "extra" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.string "location" - t.string "term" - t.string "string" - t.string "password" - t.string "setup_time" - t.string "endup_time" - t.string "class_period" - t.integer "school_id" - t.text "description" - t.integer "status", :default => 1 - t.integer "attachmenttype", :default => 2 - t.integer "lft" - t.integer "rgt" - t.integer "is_public", :limit => 1, :default => 1 - t.integer "inherit_members", :limit => 1, :default => 1 - t.integer "open_student", :default => 0 - end - - create_table "custom_fields", :force => true do |t| - t.string "type", :limit => 30, :default => "", :null => false - t.string "name", :limit => 30, :default => "", :null => false - t.string "field_format", :limit => 30, :default => "", :null => false - t.text "possible_values" - t.string "regexp", :default => "" - t.integer "min_length", :default => 0, :null => false - t.integer "max_length", :default => 0, :null => false - t.boolean "is_required", :default => false, :null => false - t.boolean "is_for_all", :default => false, :null => false - t.boolean "is_filter", :default => false, :null => false - t.integer "position", :default => 1 - t.boolean "searchable", :default => false - t.text "default_value" - t.boolean "editable", :default => true - t.boolean "visible", :default => true, :null => false - t.boolean "multiple", :default => false - end - - add_index "custom_fields", ["id", "type"], :name => "index_custom_fields_on_id_and_type" - - create_table "custom_fields_projects", :id => false, :force => true do |t| - t.integer "custom_field_id", :default => 0, :null => false - t.integer "project_id", :default => 0, :null => false - end - - add_index "custom_fields_projects", ["custom_field_id", "project_id"], :name => "index_custom_fields_projects_on_custom_field_id_and_project_id", :unique => true - - create_table "custom_fields_trackers", :id => false, :force => true do |t| - t.integer "custom_field_id", :default => 0, :null => false - t.integer "tracker_id", :default => 0, :null => false - end - - add_index "custom_fields_trackers", ["custom_field_id", "tracker_id"], :name => "index_custom_fields_trackers_on_custom_field_id_and_tracker_id", :unique => true - - create_table "custom_values", :force => true do |t| - t.string "customized_type", :limit => 30, :default => "", :null => false - t.integer "customized_id", :default => 0, :null => false - t.integer "custom_field_id", :default => 0, :null => false - t.text "value" - end - - add_index "custom_values", ["custom_field_id"], :name => "index_custom_values_on_custom_field_id" - add_index "custom_values", ["customized_type", "customized_id"], :name => "custom_values_customized" - - create_table "delayed_jobs", :force => true do |t| - t.integer "priority", :default => 0, :null => false - t.integer "attempts", :default => 0, :null => false - t.text "handler", :null => false - t.text "last_error" - t.datetime "run_at" - t.datetime "locked_at" - t.datetime "failed_at" - t.string "locked_by" - t.string "queue" - t.datetime "created_at" - t.datetime "updated_at" - end - - add_index "delayed_jobs", ["priority", "run_at"], :name => "delayed_jobs_priority" - - create_table "discuss_demos", :force => true do |t| - t.string "title" - t.text "body" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "documents", :force => true do |t| - t.integer "project_id", :default => 0, :null => false - t.integer "category_id", :default => 0, :null => false - t.string "title", :limit => 60, :default => "", :null => false - t.text "description" - t.datetime "created_on" - t.integer "user_id", :default => 0 - t.integer "is_public", :default => 1 - end - - add_index "documents", ["category_id"], :name => "index_documents_on_category_id" - add_index "documents", ["created_on"], :name => "index_documents_on_created_on" - add_index "documents", ["project_id"], :name => "documents_project_id" - - create_table "enabled_modules", :force => true do |t| - t.integer "project_id" - t.string "name", :null => false - t.integer "course_id" - end - - add_index "enabled_modules", ["project_id"], :name => "enabled_modules_project_id" - - create_table "enumerations", :force => true do |t| - t.string "name", :limit => 30, :default => "", :null => false - t.integer "position", :default => 1 - t.boolean "is_default", :default => false, :null => false - t.string "type" - t.boolean "active", :default => true, :null => false - t.integer "project_id" - t.integer "parent_id" - t.string "position_name", :limit => 30 - end - - add_index "enumerations", ["id", "type"], :name => "index_enumerations_on_id_and_type" - add_index "enumerations", ["project_id"], :name => "index_enumerations_on_project_id" - - create_table "first_pages", :force => true do |t| - t.string "web_title" - t.string "title" - t.text "description" - t.string "page_type" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "sort_type" - t.integer "image_width", :default => 107 - t.integer "image_height", :default => 63 - t.integer "show_course", :default => 1 - t.integer "show_contest", :default => 1 - end - - create_table "forge_activities", :force => true do |t| - t.integer "user_id" - t.integer "project_id" - t.integer "forge_act_id" - t.string "forge_act_type" - t.integer "org_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - add_index "forge_activities", ["forge_act_id"], :name => "index_forge_activities_on_forge_act_id" - - create_table "forums", :force => true do |t| - t.string "name", :null => false - t.text "description" - t.integer "topic_count", :default => 0 - t.integer "memo_count", :default => 0 - t.integer "last_memo_id", :default => 0 - t.integer "creator_id", :null => false - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "sticky" - t.integer "locked" - end - - create_table "groups_users", :id => false, :force => true do |t| - t.integer "group_id", :null => false - t.integer "user_id", :null => false - end - - add_index "groups_users", ["group_id", "user_id"], :name => "groups_users_ids", :unique => true - - create_table "homework_attaches", :force => true do |t| - t.integer "bid_id" - t.integer "user_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.string "reward" - t.string "name" - t.text "description" - t.integer "state" - t.integer "project_id", :default => 0 - t.float "score", :default => 0.0 - t.integer "is_teacher_score", :default => 0 - end - - create_table "homework_evaluations", :force => true do |t| - t.string "user_id" - t.string "homework_attach_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "homework_for_courses", :force => true do |t| - t.integer "course_id" - t.integer "bid_id" - end - - create_table "homework_users", :force => true do |t| - t.string "homework_attach_id" - t.string "user_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "issue_categories", :force => true do |t| - t.integer "project_id", :default => 0, :null => false - t.string "name", :limit => 30, :default => "", :null => false - t.integer "assigned_to_id" - end - - add_index "issue_categories", ["assigned_to_id"], :name => "index_issue_categories_on_assigned_to_id" - add_index "issue_categories", ["project_id"], :name => "issue_categories_project_id" - - create_table "issue_relations", :force => true do |t| - t.integer "issue_from_id", :null => false - t.integer "issue_to_id", :null => false - t.string "relation_type", :default => "", :null => false - t.integer "delay" - end - - add_index "issue_relations", ["issue_from_id", "issue_to_id"], :name => "index_issue_relations_on_issue_from_id_and_issue_to_id", :unique => true - add_index "issue_relations", ["issue_from_id"], :name => "index_issue_relations_on_issue_from_id" - add_index "issue_relations", ["issue_to_id"], :name => "index_issue_relations_on_issue_to_id" - - create_table "issue_statuses", :force => true do |t| - t.string "name", :limit => 30, :default => "", :null => false - t.boolean "is_closed", :default => false, :null => false - t.boolean "is_default", :default => false, :null => false - t.integer "position", :default => 1 - t.integer "default_done_ratio" - end - - add_index "issue_statuses", ["is_closed"], :name => "index_issue_statuses_on_is_closed" - add_index "issue_statuses", ["is_default"], :name => "index_issue_statuses_on_is_default" - add_index "issue_statuses", ["position"], :name => "index_issue_statuses_on_position" - - create_table "issues", :force => true do |t| - t.integer "tracker_id", :null => false - t.integer "project_id", :null => false - t.string "subject", :default => "", :null => false - t.text "description" - t.date "due_date" - t.integer "category_id" - t.integer "status_id", :null => false - t.integer "assigned_to_id" - t.integer "priority_id", :null => false - t.integer "fixed_version_id" - t.integer "author_id", :null => false - t.integer "lock_version", :default => 0, :null => false - t.datetime "created_on" - t.datetime "updated_on" - t.date "start_date" - t.integer "done_ratio", :default => 0, :null => false - t.float "estimated_hours" - t.integer "parent_id" - t.integer "root_id" - t.integer "lft" - t.integer "rgt" - t.boolean "is_private", :default => false, :null => false - t.datetime "closed_on" - t.integer "project_issues_index" - end - - add_index "issues", ["assigned_to_id"], :name => "index_issues_on_assigned_to_id" - add_index "issues", ["author_id"], :name => "index_issues_on_author_id" - add_index "issues", ["category_id"], :name => "index_issues_on_category_id" - add_index "issues", ["created_on"], :name => "index_issues_on_created_on" - add_index "issues", ["fixed_version_id"], :name => "index_issues_on_fixed_version_id" - add_index "issues", ["priority_id"], :name => "index_issues_on_priority_id" - add_index "issues", ["project_id"], :name => "issues_project_id" - add_index "issues", ["root_id", "lft", "rgt"], :name => "index_issues_on_root_id_and_lft_and_rgt" - add_index "issues", ["status_id"], :name => "index_issues_on_status_id" - add_index "issues", ["tracker_id"], :name => "index_issues_on_tracker_id" - - create_table "join_in_competitions", :force => true do |t| - t.integer "user_id" - t.integer "competition_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "join_in_contests", :force => true do |t| - t.integer "user_id" - t.integer "bid_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "journal_details", :force => true do |t| - t.integer "journal_id", :default => 0, :null => false - t.string "property", :limit => 30, :default => "", :null => false - t.string "prop_key", :limit => 30, :default => "", :null => false - t.text "old_value" - t.text "value" - end - - add_index "journal_details", ["journal_id"], :name => "journal_details_journal_id" - - create_table "journal_replies", :id => false, :force => true do |t| - t.integer "journal_id" - t.integer "user_id" - t.integer "reply_id" - end - - add_index "journal_replies", ["journal_id"], :name => "index_journal_replies_on_journal_id" - add_index "journal_replies", ["reply_id"], :name => "index_journal_replies_on_reply_id" - add_index "journal_replies", ["user_id"], :name => "index_journal_replies_on_user_id" - - create_table "journals", :force => true do |t| - t.integer "journalized_id", :default => 0, :null => false - t.string "journalized_type", :limit => 30, :default => "", :null => false - t.integer "user_id", :default => 0, :null => false - t.text "notes" - t.datetime "created_on", :null => false - t.boolean "private_notes", :default => false, :null => false - end - - add_index "journals", ["created_on"], :name => "index_journals_on_created_on" - add_index "journals", ["journalized_id", "journalized_type"], :name => "journals_journalized_id" - add_index "journals", ["journalized_id"], :name => "index_journals_on_journalized_id" - add_index "journals", ["user_id"], :name => "index_journals_on_user_id" - - create_table "journals_for_messages", :force => true do |t| - t.integer "jour_id" - t.string "jour_type" - t.integer "user_id" - t.text "notes" - t.integer "status" - t.integer "reply_id" - t.datetime "created_on", :null => false - t.datetime "updated_on", :null => false - t.string "m_parent_id" - t.boolean "is_readed" - t.integer "m_reply_count" - t.integer "m_reply_id" - t.integer "is_comprehensive_evaluation" - end - - create_table "kindeditor_assets", :force => true do |t| - t.string "asset" - t.integer "file_size" - t.string "file_type" - t.integer "owner_id" - t.string "asset_type" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "owner_type", :default => 0 - end - - create_table "member_roles", :force => true do |t| - t.integer "member_id", :null => false - t.integer "role_id", :null => false - t.integer "inherited_from" - end - - add_index "member_roles", ["member_id"], :name => "index_member_roles_on_member_id" - add_index "member_roles", ["role_id"], :name => "index_member_roles_on_role_id" - - create_table "members", :force => true do |t| - t.integer "user_id", :default => 0, :null => false - t.integer "project_id", :default => 0 - t.datetime "created_on" - t.boolean "mail_notification", :default => false, :null => false - t.integer "course_id", :default => -1 - t.integer "course_group_id", :default => 0 - end - - add_index "members", ["project_id"], :name => "index_members_on_project_id" - add_index "members", ["user_id", "project_id", "course_id"], :name => "index_members_on_user_id_and_project_id", :unique => true - add_index "members", ["user_id"], :name => "index_members_on_user_id" - - create_table "memos", :force => true do |t| - t.integer "forum_id", :null => false - t.integer "parent_id" - t.string "subject", :null => false - t.text "content", :null => false - t.integer "author_id", :null => false - t.integer "replies_count", :default => 0 - t.integer "last_reply_id" - t.boolean "lock", :default => false - t.boolean "sticky", :default => false - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "viewed_count", :default => 0 - end - - create_table "messages", :force => true do |t| - t.integer "board_id", :null => false - t.integer "parent_id" - t.string "subject", :default => "", :null => false - t.text "content" - t.integer "author_id" - t.integer "replies_count", :default => 0, :null => false - t.integer "last_reply_id" - t.datetime "created_on", :null => false - t.datetime "updated_on", :null => false - t.boolean "locked", :default => false - t.integer "sticky", :default => 0 - end - - add_index "messages", ["author_id"], :name => "index_messages_on_author_id" - add_index "messages", ["board_id"], :name => "messages_board_id" - add_index "messages", ["created_on"], :name => "index_messages_on_created_on" - add_index "messages", ["last_reply_id"], :name => "index_messages_on_last_reply_id" - add_index "messages", ["parent_id"], :name => "messages_parent_id" - - create_table "news", :force => true do |t| - t.integer "project_id" - t.string "title", :limit => 60, :default => "", :null => false - t.string "summary", :default => "" - t.text "description" - t.integer "author_id", :default => 0, :null => false - t.datetime "created_on" - t.integer "comments_count", :default => 0, :null => false - t.integer "course_id" - end - - add_index "news", ["author_id"], :name => "index_news_on_author_id" - add_index "news", ["created_on"], :name => "index_news_on_created_on" - add_index "news", ["project_id"], :name => "news_project_id" - - create_table "no_uses", :force => true do |t| - t.integer "user_id", :null => false - t.string "no_use_type" - t.integer "no_use_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "notificationcomments", :force => true do |t| - t.string "notificationcommented_type" - t.integer "notificationcommented_id" - t.integer "author_id" - t.text "notificationcomments" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "open_id_authentication_associations", :force => true do |t| - t.integer "issued" - t.integer "lifetime" - t.string "handle" - t.string "assoc_type" - t.binary "server_url" - t.binary "secret" - end - - create_table "open_id_authentication_nonces", :force => true do |t| - t.integer "timestamp", :null => false - t.string "server_url" - t.string "salt", :null => false - end - - create_table "open_source_projects", :force => true do |t| - t.string "name" - t.text "description" - t.integer "commit_count", :default => 0 - t.integer "code_line", :default => 0 - t.integer "users_count", :default => 0 - t.date "last_commit_time" - t.string "url" - t.date "date_collected" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "option_numbers", :force => true do |t| - t.integer "user_id" - t.integer "memo" - t.integer "messages_for_issues" - t.integer "issues_status" - t.integer "replay_for_message" - t.integer "replay_for_memo" - t.integer "follow" - t.integer "tread" - t.integer "praise_by_one" - t.integer "praise_by_two" - t.integer "praise_by_three" - t.integer "tread_by_one" - t.integer "tread_by_two" - t.integer "tread_by_three" - t.integer "changeset" - t.integer "document" - t.integer "attachment" - t.integer "issue_done_ratio" - t.integer "post_issue" - t.integer "score_type" - t.integer "total_score" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "project_id" - end - - create_table "organizations", :force => true do |t| - t.string "name" - t.string "logo_link" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "phone_app_versions", :force => true do |t| - t.string "version" - t.text "description" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "poll_answers", :force => true do |t| - t.integer "poll_question_id" - t.text "answer_text" - t.integer "answer_position" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "poll_questions", :force => true do |t| - t.string "question_title" - t.integer "question_type" - t.integer "is_necessary" - t.integer "poll_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "question_number" - end - - create_table "poll_users", :force => true do |t| - t.integer "user_id" - t.integer "poll_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "poll_votes", :force => true do |t| - t.integer "user_id" - t.integer "poll_question_id" - t.integer "poll_answer_id" - t.text "vote_text" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "polls", :force => true do |t| - t.string "polls_name" - t.string "polls_type" - t.integer "polls_group_id" - t.integer "polls_status" - t.integer "user_id" - t.datetime "published_at" - t.datetime "closed_at" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.text "polls_description" - t.integer "show_result", :default => 1 - end - - create_table "praise_tread_caches", :force => true do |t| - t.integer "object_id", :null => false - t.string "object_type" - t.integer "praise_num" - t.integer "tread_num" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "praise_treads", :force => true do |t| - t.integer "user_id", :null => false - t.integer "praise_tread_object_id" - t.string "praise_tread_object_type" - t.integer "praise_or_tread" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "project_infos", :force => true do |t| - t.integer "project_id" - t.integer "user_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "project_scores", :force => true do |t| - t.string "project_id" - t.integer "score" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "issue_num", :default => 0 - t.integer "issue_journal_num", :default => 0 - t.integer "news_num", :default => 0 - t.integer "documents_num", :default => 0 - t.integer "changeset_num", :default => 0 - t.integer "board_message_num", :default => 0 - end - - create_table "project_statuses", :force => true do |t| - t.integer "changesets_count" - t.integer "watchers_count" - t.integer "project_id" - t.integer "project_type" - t.float "grade", :default => 0.0 - t.integer "course_ac_para", :default => 0 - end - - add_index "project_statuses", ["grade"], :name => "index_project_statuses_on_grade" - - create_table "projecting_softapplictions", :force => true do |t| - t.integer "user_id" - t.integer "softapplication_id" - t.integer "project_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "projects", :force => true do |t| - t.string "name", :default => "", :null => false - t.text "description" - t.string "homepage", :default => "" - t.boolean "is_public", :default => true, :null => false - t.integer "parent_id" - t.datetime "created_on" - t.datetime "updated_on" - t.string "identifier" - t.integer "status", :default => 1, :null => false - t.integer "lft" - t.integer "rgt" - t.boolean "inherit_members", :default => false, :null => false - t.integer "project_type" - t.boolean "hidden_repo", :default => false, :null => false - t.integer "attachmenttype", :default => 1 - t.integer "user_id" - t.integer "dts_test", :default => 0 - t.string "enterprise_name" - t.integer "organization_id" - t.integer "project_new_type" - end - - add_index "projects", ["lft"], :name => "index_projects_on_lft" - add_index "projects", ["rgt"], :name => "index_projects_on_rgt" - - create_table "projects_trackers", :id => false, :force => true do |t| - t.integer "project_id", :default => 0, :null => false - t.integer "tracker_id", :default => 0, :null => false - end - - add_index "projects_trackers", ["project_id", "tracker_id"], :name => "projects_trackers_unique", :unique => true - add_index "projects_trackers", ["project_id"], :name => "projects_trackers_project_id" - - create_table "queries", :force => true do |t| - t.integer "project_id" - t.string "name", :default => "", :null => false - t.text "filters" - t.integer "user_id", :default => 0, :null => false - t.boolean "is_public", :default => false, :null => false - t.text "column_names" - t.text "sort_criteria" - t.string "group_by" - t.string "type" - end - - add_index "queries", ["project_id"], :name => "index_queries_on_project_id" - add_index "queries", ["user_id"], :name => "index_queries_on_user_id" - - create_table "relative_memo_to_open_source_projects", :force => true do |t| - t.integer "osp_id" - t.integer "relative_memo_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "relative_memos", :force => true do |t| - t.integer "osp_id" - t.integer "parent_id" - t.string "subject", :null => false - t.text "content", :limit => 16777215, :null => false - t.integer "author_id" - t.integer "replies_count", :default => 0 - t.integer "last_reply_id" - t.boolean "lock", :default => false - t.boolean "sticky", :default => false - t.boolean "is_quote", :default => false - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "viewed_count_crawl", :default => 0 - t.integer "viewed_count_local", :default => 0 - t.string "url" - t.string "username" - t.string "userhomeurl" - t.date "date_collected" - t.string "topic_resource" - end - - create_table "repositories", :force => true do |t| - t.integer "project_id", :default => 0, :null => false - t.string "url", :default => "", :null => false - t.string "login", :limit => 60, :default => "" - t.string "password", :default => "" - t.string "root_url", :default => "" - t.string "type" - t.string "path_encoding", :limit => 64 - t.string "log_encoding", :limit => 64 - t.text "extra_info" - t.string "identifier" - t.boolean "is_default", :default => false - end - - add_index "repositories", ["project_id"], :name => "index_repositories_on_project_id" - - create_table "rich_rich_files", :force => true do |t| - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.string "rich_file_file_name" - t.string "rich_file_content_type" - t.integer "rich_file_file_size" - t.datetime "rich_file_updated_at" - t.string "owner_type" - t.integer "owner_id" - t.text "uri_cache" - t.string "simplified_type", :default => "file" - end - - create_table "roles", :force => true do |t| - t.string "name", :limit => 30, :default => "", :null => false - t.integer "position", :default => 1 - t.boolean "assignable", :default => true - t.integer "builtin", :default => 0, :null => false - t.text "permissions" - t.string "issues_visibility", :limit => 30, :default => "default", :null => false - end - - create_table "schools", :force => true do |t| - t.string "name" - t.string "province" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.string "logo_link" - end - - create_table "seems_rateable_cached_ratings", :force => true do |t| - t.integer "cacheable_id", :limit => 8 - t.string "cacheable_type" - t.float "avg", :null => false - t.integer "cnt", :null => false - t.string "dimension" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "seems_rateable_rates", :force => true do |t| - t.integer "rater_id", :limit => 8 - t.integer "rateable_id" - t.string "rateable_type" - t.float "stars", :null => false - t.string "dimension" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "is_teacher_score", :default => 0 - end - - create_table "settings", :force => true do |t| - t.string "name", :default => "", :null => false - t.text "value" - t.datetime "updated_on" - end - - add_index "settings", ["name"], :name => "index_settings_on_name" - - create_table "shares", :force => true do |t| - t.date "created_on" - t.string "url" - t.string "title" - t.integer "share_type" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "project_id" - t.integer "user_id" - t.string "description" - end - - create_table "softapplications", :force => true do |t| - t.string "name" - t.text "description" - t.integer "app_type_id" - t.string "app_type_name" - t.string "android_min_version_available" - t.integer "user_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.integer "contest_id" - t.integer "softapplication_id" - t.integer "is_public" - t.string "application_developers" - t.string "deposit_project_url" - t.string "deposit_project" - t.integer "project_id" - end - - create_table "students_for_courses", :force => true do |t| - t.integer "student_id" - t.integer "course_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "taggings", :force => true do |t| - t.integer "tag_id" - t.integer "taggable_id" - t.string "taggable_type" - t.integer "tagger_id" - t.string "tagger_type" - t.string "context", :limit => 128 - t.datetime "created_at" - end - - add_index "taggings", ["tag_id"], :name => "index_taggings_on_tag_id" - add_index "taggings", ["taggable_id", "taggable_type", "context"], :name => "index_taggings_on_taggable_id_and_taggable_type_and_context" - add_index "taggings", ["taggable_type"], :name => "index_taggings_on_taggable_type" - - create_table "tags", :force => true do |t| - t.string "name" - end - - create_table "teachers", :force => true do |t| - t.string "tea_name" - t.string "location" - t.integer "couurse_time" - t.integer "course_code" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.string "extra" - end - - create_table "time_entries", :force => true do |t| - t.integer "project_id", :null => false - t.integer "user_id", :null => false - t.integer "issue_id" - t.float "hours", :null => false - t.string "comments" - t.integer "activity_id", :null => false - t.date "spent_on", :null => false - t.integer "tyear", :null => false - t.integer "tmonth", :null => false - t.integer "tweek", :null => false - t.datetime "created_on", :null => false - t.datetime "updated_on", :null => false - end - - add_index "time_entries", ["activity_id"], :name => "index_time_entries_on_activity_id" - add_index "time_entries", ["created_on"], :name => "index_time_entries_on_created_on" - add_index "time_entries", ["issue_id"], :name => "time_entries_issue_id" - add_index "time_entries", ["project_id"], :name => "time_entries_project_id" - add_index "time_entries", ["user_id"], :name => "index_time_entries_on_user_id" - - create_table "tokens", :force => true do |t| - t.integer "user_id", :default => 0, :null => false - t.string "action", :limit => 30, :default => "", :null => false - t.string "value", :limit => 40, :default => "", :null => false - t.datetime "created_on", :null => false - end - - add_index "tokens", ["user_id"], :name => "index_tokens_on_user_id" - add_index "tokens", ["value"], :name => "tokens_value", :unique => true - - create_table "trackers", :force => true do |t| - t.string "name", :limit => 30, :default => "", :null => false - t.boolean "is_in_chlog", :default => false, :null => false - t.integer "position", :default => 1 - t.boolean "is_in_roadmap", :default => true, :null => false - t.integer "fields_bits", :default => 0 - end - - create_table "user_extensions", :force => true do |t| - t.integer "user_id", :null => false - t.date "birthday" - t.string "brief_introduction" - t.integer "gender" - t.string "location" - t.string "occupation" - t.integer "work_experience" - t.integer "zip_code" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.string "technical_title" - t.integer "identity" - t.string "student_id" - t.string "teacher_realname" - t.string "student_realname" - t.string "location_city" - t.integer "school_id" - end - - create_table "user_grades", :force => true do |t| - t.integer "user_id", :null => false - t.integer "project_id", :null => false - t.float "grade", :default => 0.0 - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - add_index "user_grades", ["grade"], :name => "index_user_grades_on_grade" - add_index "user_grades", ["project_id"], :name => "index_user_grades_on_project_id" - add_index "user_grades", ["user_id"], :name => "index_user_grades_on_user_id" - - create_table "user_levels", :force => true do |t| - t.integer "user_id" - t.integer "level" - end - - create_table "user_preferences", :force => true do |t| - t.integer "user_id", :default => 0, :null => false - t.text "others" - t.boolean "hide_mail", :default => false - t.string "time_zone" - end - - add_index "user_preferences", ["user_id"], :name => "index_user_preferences_on_user_id" - - create_table "user_score_details", :force => true do |t| - t.integer "current_user_id" - t.integer "target_user_id" - t.string "score_type" - t.string "score_action" - t.integer "user_id" - t.integer "old_score" - t.integer "new_score" - t.integer "current_user_level" - t.integer "target_user_level" - t.integer "score_changeable_obj_id" - t.string "score_changeable_obj_type" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "user_scores", :force => true do |t| - t.integer "user_id", :null => false - t.integer "collaboration" - t.integer "influence" - t.integer "skill" - t.integer "active" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "user_statuses", :force => true do |t| - t.integer "changesets_count" - t.integer "watchers_count" - t.integer "user_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - t.float "grade", :default => 0.0 - end - - add_index "user_statuses", ["changesets_count"], :name => "index_user_statuses_on_changesets_count" - add_index "user_statuses", ["grade"], :name => "index_user_statuses_on_grade" - add_index "user_statuses", ["watchers_count"], :name => "index_user_statuses_on_watchers_count" - - create_table "users", :force => true do |t| - t.string "login", :default => "", :null => false - t.string "hashed_password", :limit => 40, :default => "", :null => false - t.string "firstname", :limit => 30, :default => "", :null => false - t.string "lastname", :default => "", :null => false - t.string "mail", :limit => 60, :default => "", :null => false - t.boolean "admin", :default => false, :null => false - t.integer "status", :default => 1, :null => false - t.datetime "last_login_on" - t.string "language", :limit => 5, :default => "" - t.integer "auth_source_id" - t.datetime "created_on" - t.datetime "updated_on" - t.string "type" - t.string "identity_url" - t.string "mail_notification", :default => "", :null => false - t.string "salt", :limit => 64 - end - - add_index "users", ["auth_source_id"], :name => "index_users_on_auth_source_id" - add_index "users", ["id", "type"], :name => "index_users_on_id_and_type" - add_index "users", ["type"], :name => "index_users_on_type" - - create_table "versions", :force => true do |t| - t.integer "project_id", :default => 0, :null => false - t.string "name", :default => "", :null => false - t.string "description", :default => "" - t.date "effective_date" - t.datetime "created_on" - t.datetime "updated_on" - t.string "wiki_page_title" - t.string "status", :default => "open" - t.string "sharing", :default => "none", :null => false - end - - add_index "versions", ["project_id"], :name => "versions_project_id" - add_index "versions", ["sharing"], :name => "index_versions_on_sharing" - - create_table "watchers", :force => true do |t| - t.string "watchable_type", :default => "", :null => false - t.integer "watchable_id", :default => 0, :null => false - t.integer "user_id" - end - - add_index "watchers", ["user_id", "watchable_type"], :name => "watchers_user_id_type" - add_index "watchers", ["user_id"], :name => "index_watchers_on_user_id" - add_index "watchers", ["watchable_id", "watchable_type"], :name => "index_watchers_on_watchable_id_and_watchable_type" - - create_table "web_footer_companies", :force => true do |t| - t.string "name" - t.string "logo_size" - t.string "url" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "web_footer_oranizers", :force => true do |t| - t.string "name" - t.text "description" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "wiki_content_versions", :force => true do |t| - t.integer "wiki_content_id", :null => false - t.integer "page_id", :null => false - t.integer "author_id" - t.binary "data", :limit => 2147483647 - t.string "compression", :limit => 6, :default => "" - t.string "comments", :default => "" - t.datetime "updated_on", :null => false - t.integer "version", :null => false - end - - add_index "wiki_content_versions", ["updated_on"], :name => "index_wiki_content_versions_on_updated_on" - add_index "wiki_content_versions", ["wiki_content_id"], :name => "wiki_content_versions_wcid" - - create_table "wiki_contents", :force => true do |t| - t.integer "page_id", :null => false - t.integer "author_id" - t.text "text", :limit => 2147483647 - t.string "comments", :default => "" - t.datetime "updated_on", :null => false - t.integer "version", :null => false - end - - add_index "wiki_contents", ["author_id"], :name => "index_wiki_contents_on_author_id" - add_index "wiki_contents", ["page_id"], :name => "wiki_contents_page_id" - - create_table "wiki_pages", :force => true do |t| - t.integer "wiki_id", :null => false - t.string "title", :null => false - t.datetime "created_on", :null => false - t.boolean "protected", :default => false, :null => false - t.integer "parent_id" - end - - add_index "wiki_pages", ["parent_id"], :name => "index_wiki_pages_on_parent_id" - add_index "wiki_pages", ["wiki_id", "title"], :name => "wiki_pages_wiki_id_title" - add_index "wiki_pages", ["wiki_id"], :name => "index_wiki_pages_on_wiki_id" - - create_table "wiki_redirects", :force => true do |t| - t.integer "wiki_id", :null => false - t.string "title" - t.string "redirects_to" - t.datetime "created_on", :null => false - end - - add_index "wiki_redirects", ["wiki_id", "title"], :name => "wiki_redirects_wiki_id_title" - add_index "wiki_redirects", ["wiki_id"], :name => "index_wiki_redirects_on_wiki_id" - - create_table "wikis", :force => true do |t| - t.integer "project_id", :null => false - t.string "start_page", :null => false - t.integer "status", :default => 1, :null => false - end - - add_index "wikis", ["project_id"], :name => "wikis_project_id" - - create_table "workflows", :force => true do |t| - t.integer "tracker_id", :default => 0, :null => false - t.integer "old_status_id", :default => 0, :null => false - t.integer "new_status_id", :default => 0, :null => false - t.integer "role_id", :default => 0, :null => false - t.boolean "assignee", :default => false, :null => false - t.boolean "author", :default => false, :null => false - t.string "type", :limit => 30 - t.string "field_name", :limit => 30 - t.string "rule", :limit => 30 - end - - add_index "workflows", ["new_status_id"], :name => "index_workflows_on_new_status_id" - add_index "workflows", ["old_status_id"], :name => "index_workflows_on_old_status_id" - add_index "workflows", ["role_id", "tracker_id", "old_status_id"], :name => "wkfs_role_tracker_old_status" - add_index "workflows", ["role_id"], :name => "index_workflows_on_role_id" - - create_table "works_categories", :force => true do |t| - t.string "category" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - - create_table "zip_packs", :force => true do |t| - t.integer "user_id" - t.integer "homework_id" - t.string "file_digest" - t.string "file_path" - t.integer "pack_times", :default => 1 - t.integer "pack_size", :default => 0 - t.text "file_digests" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false - end - -end +# encoding: UTF-8 +# This file is auto-generated from the current state of the database. Instead +# of editing this file, please use the migrations feature of Active Record to +# incrementally modify your database, and then regenerate this schema definition. +# +# Note that this schema.rb definition is the authoritative source for your +# database schema. If you need to create the application database on another +# system, you should be using db:schema:load, not running all the migrations +# from scratch. The latter is a flawed and unsustainable approach (the more migrations +# you'll amass, the slower it'll run and the greater likelihood for issues). +# +# It's strongly recommended to check this file into your version control system. + +ActiveRecord::Schema.define(:version => 20150422034543) do + + create_table "activities", :force => true do |t| + t.integer "act_id", :null => false + t.string "act_type", :null => false + t.integer "user_id", :null => false + end + + add_index "activities", ["act_id", "act_type"], :name => "index_activities_on_act_id_and_act_type" + add_index "activities", ["user_id", "act_type"], :name => "index_activities_on_user_id_and_act_type" + add_index "activities", ["user_id"], :name => "index_activities_on_user_id" + + create_table "api_keys", :force => true do |t| + t.string "access_token" + t.datetime "expires_at" + t.integer "user_id" + t.boolean "active", :default => true + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + add_index "api_keys", ["access_token"], :name => "index_api_keys_on_access_token" + add_index "api_keys", ["user_id"], :name => "index_api_keys_on_user_id" + + create_table "applied_projects", :force => true do |t| + t.integer "project_id", :null => false + t.integer "user_id", :null => false + end + + create_table "apply_project_masters", :force => true do |t| + t.integer "user_id" + t.string "apply_type" + t.integer "apply_id" + t.integer "status" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "attachments", :force => true do |t| + t.integer "container_id" + t.string "container_type", :limit => 30 + t.string "filename", :default => "", :null => false + t.string "disk_filename", :default => "", :null => false + t.integer "filesize", :default => 0, :null => false + t.string "content_type", :default => "" + t.string "digest", :limit => 40, :default => "", :null => false + t.integer "downloads", :default => 0, :null => false + t.integer "author_id", :default => 0, :null => false + t.datetime "created_on" + t.string "description" + t.string "disk_directory" + t.integer "attachtype", :default => 1 + t.integer "is_public", :default => 1 + t.integer "copy_from" + t.integer "quotes" + end + + add_index "attachments", ["author_id"], :name => "index_attachments_on_author_id" + add_index "attachments", ["container_id", "container_type"], :name => "index_attachments_on_container_id_and_container_type" + add_index "attachments", ["created_on"], :name => "index_attachments_on_created_on" + + create_table "attachmentstypes", :force => true do |t| + t.integer "typeId", :null => false + t.string "typeName", :limit => 50 + end + + create_table "auth_sources", :force => true do |t| + t.string "type", :limit => 30, :default => "", :null => false + t.string "name", :limit => 60, :default => "", :null => false + t.string "host", :limit => 60 + t.integer "port" + t.string "account" + t.string "account_password", :default => "" + t.string "base_dn" + t.string "attr_login", :limit => 30 + t.string "attr_firstname", :limit => 30 + t.string "attr_lastname", :limit => 30 + t.string "attr_mail", :limit => 30 + t.boolean "onthefly_register", :default => false, :null => false + t.boolean "tls", :default => false, :null => false + t.string "filter" + t.integer "timeout" + end + + add_index "auth_sources", ["id", "type"], :name => "index_auth_sources_on_id_and_type" + + create_table "biding_projects", :force => true do |t| + t.integer "project_id" + t.integer "bid_id" + t.integer "user_id" + t.string "description" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.string "reward" + end + + create_table "bids", :force => true do |t| + t.string "name" + t.string "budget", :null => false + t.integer "author_id" + t.date "deadline" + t.text "description" + t.datetime "created_on", :null => false + t.datetime "updated_on", :null => false + t.integer "commit" + t.integer "reward_type" + t.integer "homework_type" + t.integer "parent_id" + t.string "password" + t.integer "is_evaluation" + t.integer "proportion", :default => 60 + t.integer "comment_status", :default => 0 + t.integer "evaluation_num", :default => 3 + t.integer "open_anonymous_evaluation", :default => 1 + end + + create_table "boards", :force => true do |t| + t.integer "project_id", :null => false + t.string "name", :default => "", :null => false + t.string "description" + t.integer "position", :default => 1 + t.integer "topics_count", :default => 0, :null => false + t.integer "messages_count", :default => 0, :null => false + t.integer "last_message_id" + t.integer "parent_id" + t.integer "course_id" + end + + add_index "boards", ["last_message_id"], :name => "index_boards_on_last_message_id" + add_index "boards", ["project_id"], :name => "boards_project_id" + + create_table "bug_to_osps", :force => true do |t| + t.integer "osp_id" + t.integer "relative_memo_id" + t.string "description" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "changes", :force => true do |t| + t.integer "changeset_id", :null => false + t.string "action", :limit => 1, :default => "", :null => false + t.text "path", :null => false + t.text "from_path" + t.string "from_revision" + t.string "revision" + t.string "branch" + end + + add_index "changes", ["changeset_id"], :name => "changesets_changeset_id" + + create_table "changeset_parents", :id => false, :force => true do |t| + t.integer "changeset_id", :null => false + t.integer "parent_id", :null => false + end + + add_index "changeset_parents", ["changeset_id"], :name => "changeset_parents_changeset_ids" + add_index "changeset_parents", ["parent_id"], :name => "changeset_parents_parent_ids" + + create_table "changesets", :force => true do |t| + t.integer "repository_id", :null => false + t.string "revision", :null => false + t.string "committer" + t.datetime "committed_on", :null => false + t.text "comments" + t.date "commit_date" + t.string "scmid" + t.integer "user_id" + end + + add_index "changesets", ["committed_on"], :name => "index_changesets_on_committed_on" + add_index "changesets", ["repository_id", "revision"], :name => "changesets_repos_rev", :unique => true + add_index "changesets", ["repository_id", "scmid"], :name => "changesets_repos_scmid" + add_index "changesets", ["repository_id"], :name => "index_changesets_on_repository_id" + add_index "changesets", ["user_id"], :name => "index_changesets_on_user_id" + + create_table "changesets_issues", :id => false, :force => true do |t| + t.integer "changeset_id", :null => false + t.integer "issue_id", :null => false + end + + add_index "changesets_issues", ["changeset_id", "issue_id"], :name => "changesets_issues_ids", :unique => true + + create_table "code_review_assignments", :force => true do |t| + t.integer "issue_id" + t.integer "change_id" + t.integer "attachment_id" + t.string "file_path" + t.string "rev" + t.string "rev_to" + t.string "action_type" + t.integer "changeset_id" + end + + create_table "code_review_project_settings", :force => true do |t| + t.integer "project_id" + t.integer "tracker_id" + t.datetime "created_at" + t.datetime "updated_at" + t.integer "updated_by" + t.boolean "hide_code_review_tab", :default => false + t.integer "auto_relation", :default => 1 + t.integer "assignment_tracker_id" + t.text "auto_assign" + t.integer "lock_version", :default => 0, :null => false + t.boolean "tracker_in_review_dialog", :default => false + end + + create_table "code_review_user_settings", :force => true do |t| + t.integer "user_id", :default => 0, :null => false + t.integer "mail_notification", :default => 0, :null => false + t.datetime "created_at" + t.datetime "updated_at" + end + + create_table "code_reviews", :force => true do |t| + t.integer "project_id" + t.integer "change_id" + t.datetime "created_at" + t.datetime "updated_at" + t.integer "line" + t.integer "updated_by_id" + t.integer "lock_version", :default => 0, :null => false + t.integer "status_changed_from" + t.integer "status_changed_to" + t.integer "issue_id" + t.string "action_type" + t.string "file_path" + t.string "rev" + t.string "rev_to" + t.integer "attachment_id" + t.integer "file_count", :default => 0, :null => false + t.boolean "diff_all" + end + + create_table "comments", :force => true do |t| + t.string "commented_type", :limit => 30, :default => "", :null => false + t.integer "commented_id", :default => 0, :null => false + t.integer "author_id", :default => 0, :null => false + t.text "comments" + t.datetime "created_on", :null => false + t.datetime "updated_on", :null => false + end + + add_index "comments", ["author_id"], :name => "index_comments_on_author_id" + add_index "comments", ["commented_id", "commented_type"], :name => "index_comments_on_commented_id_and_commented_type" + + create_table "contest_notifications", :force => true do |t| + t.text "title" + t.text "content" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "contesting_projects", :force => true do |t| + t.integer "project_id" + t.string "contest_id" + t.integer "user_id" + t.string "description" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.string "reward" + end + + create_table "contesting_softapplications", :force => true do |t| + t.integer "softapplication_id" + t.integer "contest_id" + t.integer "user_id" + t.string "description" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.string "reward" + end + + create_table "contestnotifications", :force => true do |t| + t.integer "contest_id" + t.string "title" + t.string "summary" + t.text "description" + t.integer "author_id" + t.integer "notificationcomments_count" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "contests", :force => true do |t| + t.string "name" + t.string "budget", :default => "" + t.integer "author_id" + t.date "deadline" + t.string "description" + t.integer "commit" + t.string "password" + t.datetime "created_on", :null => false + t.datetime "updated_on", :null => false + end + + create_table "course_attachments", :force => true do |t| + t.string "filename" + t.string "disk_filename" + t.integer "filesize" + t.string "content_type" + t.string "digest" + t.integer "downloads" + t.string "author_id" + t.string "integer" + t.string "description" + t.string "disk_directory" + t.integer "attachtype" + t.integer "is_public" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.integer "container_id", :default => 0 + end + + create_table "course_groups", :force => true do |t| + t.string "name" + t.integer "course_id" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "course_infos", :force => true do |t| + t.integer "course_id" + t.integer "user_id" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "course_statuses", :force => true do |t| + t.integer "changesets_count" + t.integer "watchers_count" + t.integer "course_id" + t.float "grade", :default => 0.0 + t.integer "course_ac_para", :default => 0 + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "courses", :force => true do |t| + t.integer "tea_id" + t.string "name" + t.integer "state" + t.string "code" + t.integer "time" + t.string "extra" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.string "location" + t.string "term" + t.string "string" + t.string "password" + t.string "setup_time" + t.string "endup_time" + t.string "class_period" + t.integer "school_id" + t.text "description" + t.integer "status", :default => 1 + t.integer "attachmenttype", :default => 2 + t.integer "lft" + t.integer "rgt" + t.integer "is_public", :limit => 1, :default => 1 + t.integer "inherit_members", :limit => 1, :default => 1 + t.integer "open_student", :default => 0 + end + + create_table "custom_fields", :force => true do |t| + t.string "type", :limit => 30, :default => "", :null => false + t.string "name", :limit => 30, :default => "", :null => false + t.string "field_format", :limit => 30, :default => "", :null => false + t.text "possible_values" + t.string "regexp", :default => "" + t.integer "min_length", :default => 0, :null => false + t.integer "max_length", :default => 0, :null => false + t.boolean "is_required", :default => false, :null => false + t.boolean "is_for_all", :default => false, :null => false + t.boolean "is_filter", :default => false, :null => false + t.integer "position", :default => 1 + t.boolean "searchable", :default => false + t.text "default_value" + t.boolean "editable", :default => true + t.boolean "visible", :default => true, :null => false + t.boolean "multiple", :default => false + end + + add_index "custom_fields", ["id", "type"], :name => "index_custom_fields_on_id_and_type" + + create_table "custom_fields_projects", :id => false, :force => true do |t| + t.integer "custom_field_id", :default => 0, :null => false + t.integer "project_id", :default => 0, :null => false + end + + add_index "custom_fields_projects", ["custom_field_id", "project_id"], :name => "index_custom_fields_projects_on_custom_field_id_and_project_id", :unique => true + + create_table "custom_fields_trackers", :id => false, :force => true do |t| + t.integer "custom_field_id", :default => 0, :null => false + t.integer "tracker_id", :default => 0, :null => false + end + + add_index "custom_fields_trackers", ["custom_field_id", "tracker_id"], :name => "index_custom_fields_trackers_on_custom_field_id_and_tracker_id", :unique => true + + create_table "custom_values", :force => true do |t| + t.string "customized_type", :limit => 30, :default => "", :null => false + t.integer "customized_id", :default => 0, :null => false + t.integer "custom_field_id", :default => 0, :null => false + t.text "value" + end + + add_index "custom_values", ["custom_field_id"], :name => "index_custom_values_on_custom_field_id" + add_index "custom_values", ["customized_type", "customized_id"], :name => "custom_values_customized" + + create_table "delayed_jobs", :force => true do |t| + t.integer "priority", :default => 0, :null => false + t.integer "attempts", :default => 0, :null => false + t.text "handler", :null => false + t.text "last_error" + t.datetime "run_at" + t.datetime "locked_at" + t.datetime "failed_at" + t.string "locked_by" + t.string "queue" + t.datetime "created_at" + t.datetime "updated_at" + end + + add_index "delayed_jobs", ["priority", "run_at"], :name => "delayed_jobs_priority" + + create_table "discuss_demos", :force => true do |t| + t.string "title" + t.text "body" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "documents", :force => true do |t| + t.integer "project_id", :default => 0, :null => false + t.integer "category_id", :default => 0, :null => false + t.string "title", :limit => 60, :default => "", :null => false + t.text "description" + t.datetime "created_on" + t.integer "user_id", :default => 0 + t.integer "is_public", :default => 1 + end + + add_index "documents", ["category_id"], :name => "index_documents_on_category_id" + add_index "documents", ["created_on"], :name => "index_documents_on_created_on" + add_index "documents", ["project_id"], :name => "documents_project_id" + + create_table "enabled_modules", :force => true do |t| + t.integer "project_id" + t.string "name", :null => false + t.integer "course_id" + end + + add_index "enabled_modules", ["project_id"], :name => "enabled_modules_project_id" + + create_table "enumerations", :force => true do |t| + t.string "name", :limit => 30, :default => "", :null => false + t.integer "position", :default => 1 + t.boolean "is_default", :default => false, :null => false + t.string "type" + t.boolean "active", :default => true, :null => false + t.integer "project_id" + t.integer "parent_id" + t.string "position_name", :limit => 30 + end + + add_index "enumerations", ["id", "type"], :name => "index_enumerations_on_id_and_type" + add_index "enumerations", ["project_id"], :name => "index_enumerations_on_project_id" + + create_table "first_pages", :force => true do |t| + t.string "web_title" + t.string "title" + t.text "description" + t.string "page_type" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.integer "sort_type" + t.integer "image_width", :default => 107 + t.integer "image_height", :default => 63 + t.integer "show_course", :default => 1 + t.integer "show_contest", :default => 1 + end + + create_table "forge_activities", :force => true do |t| + t.integer "user_id" + t.integer "project_id" + t.integer "forge_act_id" + t.string "forge_act_type" + t.integer "org_id" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + add_index "forge_activities", ["forge_act_id"], :name => "index_forge_activities_on_forge_act_id" + + create_table "forums", :force => true do |t| + t.string "name", :null => false + t.text "description" + t.integer "topic_count", :default => 0 + t.integer "memo_count", :default => 0 + t.integer "last_memo_id", :default => 0 + t.integer "creator_id", :null => false + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.integer "sticky" + t.integer "locked" + end + + create_table "groups_users", :id => false, :force => true do |t| + t.integer "group_id", :null => false + t.integer "user_id", :null => false + end + + add_index "groups_users", ["group_id", "user_id"], :name => "groups_users_ids", :unique => true + + create_table "homework_attaches", :force => true do |t| + t.integer "bid_id" + t.integer "user_id" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.string "reward" + t.string "name" + t.text "description" + t.integer "state" + t.integer "project_id", :default => 0 + t.float "score", :default => 0.0 + t.integer "is_teacher_score", :default => 0 + end + + create_table "homework_evaluations", :force => true do |t| + t.string "user_id" + t.string "homework_attach_id" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "homework_for_courses", :force => true do |t| + t.integer "course_id" + t.integer "bid_id" + end + + create_table "homework_users", :force => true do |t| + t.string "homework_attach_id" + t.string "user_id" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "issue_categories", :force => true do |t| + t.integer "project_id", :default => 0, :null => false + t.string "name", :limit => 30, :default => "", :null => false + t.integer "assigned_to_id" + end + + add_index "issue_categories", ["assigned_to_id"], :name => "index_issue_categories_on_assigned_to_id" + add_index "issue_categories", ["project_id"], :name => "issue_categories_project_id" + + create_table "issue_relations", :force => true do |t| + t.integer "issue_from_id", :null => false + t.integer "issue_to_id", :null => false + t.string "relation_type", :default => "", :null => false + t.integer "delay" + end + + add_index "issue_relations", ["issue_from_id", "issue_to_id"], :name => "index_issue_relations_on_issue_from_id_and_issue_to_id", :unique => true + add_index "issue_relations", ["issue_from_id"], :name => "index_issue_relations_on_issue_from_id" + add_index "issue_relations", ["issue_to_id"], :name => "index_issue_relations_on_issue_to_id" + + create_table "issue_statuses", :force => true do |t| + t.string "name", :limit => 30, :default => "", :null => false + t.boolean "is_closed", :default => false, :null => false + t.boolean "is_default", :default => false, :null => false + t.integer "position", :default => 1 + t.integer "default_done_ratio" + end + + add_index "issue_statuses", ["is_closed"], :name => "index_issue_statuses_on_is_closed" + add_index "issue_statuses", ["is_default"], :name => "index_issue_statuses_on_is_default" + add_index "issue_statuses", ["position"], :name => "index_issue_statuses_on_position" + + create_table "issues", :force => true do |t| + t.integer "tracker_id", :null => false + t.integer "project_id", :null => false + t.string "subject", :default => "", :null => false + t.text "description" + t.date "due_date" + t.integer "category_id" + t.integer "status_id", :null => false + t.integer "assigned_to_id" + t.integer "priority_id", :null => false + t.integer "fixed_version_id" + t.integer "author_id", :null => false + t.integer "lock_version", :default => 0, :null => false + t.datetime "created_on" + t.datetime "updated_on" + t.date "start_date" + t.integer "done_ratio", :default => 0, :null => false + t.float "estimated_hours" + t.integer "parent_id" + t.integer "root_id" + t.integer "lft" + t.integer "rgt" + t.boolean "is_private", :default => false, :null => false + t.datetime "closed_on" + t.integer "project_issues_index" + end + + add_index "issues", ["assigned_to_id"], :name => "index_issues_on_assigned_to_id" + add_index "issues", ["author_id"], :name => "index_issues_on_author_id" + add_index "issues", ["category_id"], :name => "index_issues_on_category_id" + add_index "issues", ["created_on"], :name => "index_issues_on_created_on" + add_index "issues", ["fixed_version_id"], :name => "index_issues_on_fixed_version_id" + add_index "issues", ["priority_id"], :name => "index_issues_on_priority_id" + add_index "issues", ["project_id"], :name => "issues_project_id" + add_index "issues", ["root_id", "lft", "rgt"], :name => "index_issues_on_root_id_and_lft_and_rgt" + add_index "issues", ["status_id"], :name => "index_issues_on_status_id" + add_index "issues", ["tracker_id"], :name => "index_issues_on_tracker_id" + + create_table "join_in_competitions", :force => true do |t| + t.integer "user_id" + t.integer "competition_id" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "join_in_contests", :force => true do |t| + t.integer "user_id" + t.integer "bid_id" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "journal_details", :force => true do |t| + t.integer "journal_id", :default => 0, :null => false + t.string "property", :limit => 30, :default => "", :null => false + t.string "prop_key", :limit => 30, :default => "", :null => false + t.text "old_value" + t.text "value" + end + + add_index "journal_details", ["journal_id"], :name => "journal_details_journal_id" + + create_table "journal_replies", :id => false, :force => true do |t| + t.integer "journal_id" + t.integer "user_id" + t.integer "reply_id" + end + + add_index "journal_replies", ["journal_id"], :name => "index_journal_replies_on_journal_id" + add_index "journal_replies", ["reply_id"], :name => "index_journal_replies_on_reply_id" + add_index "journal_replies", ["user_id"], :name => "index_journal_replies_on_user_id" + + create_table "journals", :force => true do |t| + t.integer "journalized_id", :default => 0, :null => false + t.string "journalized_type", :limit => 30, :default => "", :null => false + t.integer "user_id", :default => 0, :null => false + t.text "notes" + t.datetime "created_on", :null => false + t.boolean "private_notes", :default => false, :null => false + end + + add_index "journals", ["created_on"], :name => "index_journals_on_created_on" + add_index "journals", ["journalized_id", "journalized_type"], :name => "journals_journalized_id" + add_index "journals", ["journalized_id"], :name => "index_journals_on_journalized_id" + add_index "journals", ["user_id"], :name => "index_journals_on_user_id" + + create_table "journals_for_messages", :force => true do |t| + t.integer "jour_id" + t.string "jour_type" + t.integer "user_id" + t.text "notes" + t.integer "status" + t.integer "reply_id" + t.datetime "created_on", :null => false + t.datetime "updated_on", :null => false + t.string "m_parent_id" + t.boolean "is_readed" + t.integer "m_reply_count" + t.integer "m_reply_id" + t.integer "is_comprehensive_evaluation" + end + + create_table "kindeditor_assets", :force => true do |t| + t.string "asset" + t.integer "file_size" + t.string "file_type" + t.integer "owner_id" + t.string "asset_type" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.integer "owner_type", :default => 0 + end + + create_table "member_roles", :force => true do |t| + t.integer "member_id", :null => false + t.integer "role_id", :null => false + t.integer "inherited_from" + end + + add_index "member_roles", ["member_id"], :name => "index_member_roles_on_member_id" + add_index "member_roles", ["role_id"], :name => "index_member_roles_on_role_id" + + create_table "members", :force => true do |t| + t.integer "user_id", :default => 0, :null => false + t.integer "project_id", :default => 0 + t.datetime "created_on" + t.boolean "mail_notification", :default => false, :null => false + t.integer "course_id", :default => -1 + t.integer "course_group_id", :default => 0 + end + + add_index "members", ["project_id"], :name => "index_members_on_project_id" + add_index "members", ["user_id", "project_id", "course_id"], :name => "index_members_on_user_id_and_project_id", :unique => true + add_index "members", ["user_id"], :name => "index_members_on_user_id" + + create_table "memos", :force => true do |t| + t.integer "forum_id", :null => false + t.integer "parent_id" + t.string "subject", :null => false + t.text "content", :null => false + t.integer "author_id", :null => false + t.integer "replies_count", :default => 0 + t.integer "last_reply_id" + t.boolean "lock", :default => false + t.boolean "sticky", :default => false + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.integer "viewed_count", :default => 0 + end + + create_table "messages", :force => true do |t| + t.integer "board_id", :null => false + t.integer "parent_id" + t.string "subject", :default => "", :null => false + t.text "content" + t.integer "author_id" + t.integer "replies_count", :default => 0, :null => false + t.integer "last_reply_id" + t.datetime "created_on", :null => false + t.datetime "updated_on", :null => false + t.boolean "locked", :default => false + t.integer "sticky", :default => 0 + end + + add_index "messages", ["author_id"], :name => "index_messages_on_author_id" + add_index "messages", ["board_id"], :name => "messages_board_id" + add_index "messages", ["created_on"], :name => "index_messages_on_created_on" + add_index "messages", ["last_reply_id"], :name => "index_messages_on_last_reply_id" + add_index "messages", ["parent_id"], :name => "messages_parent_id" + + create_table "news", :force => true do |t| + t.integer "project_id" + t.string "title", :limit => 60, :default => "", :null => false + t.string "summary", :default => "" + t.text "description" + t.integer "author_id", :default => 0, :null => false + t.datetime "created_on" + t.integer "comments_count", :default => 0, :null => false + t.integer "course_id" + end + + add_index "news", ["author_id"], :name => "index_news_on_author_id" + add_index "news", ["created_on"], :name => "index_news_on_created_on" + add_index "news", ["project_id"], :name => "news_project_id" + + create_table "no_uses", :force => true do |t| + t.integer "user_id", :null => false + t.string "no_use_type" + t.integer "no_use_id" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "notificationcomments", :force => true do |t| + t.string "notificationcommented_type" + t.integer "notificationcommented_id" + t.integer "author_id" + t.text "notificationcomments" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "open_id_authentication_associations", :force => true do |t| + t.integer "issued" + t.integer "lifetime" + t.string "handle" + t.string "assoc_type" + t.binary "server_url" + t.binary "secret" + end + + create_table "open_id_authentication_nonces", :force => true do |t| + t.integer "timestamp", :null => false + t.string "server_url" + t.string "salt", :null => false + end + + create_table "open_source_projects", :force => true do |t| + t.string "name" + t.text "description" + t.integer "commit_count", :default => 0 + t.integer "code_line", :default => 0 + t.integer "users_count", :default => 0 + t.date "last_commit_time" + t.string "url" + t.date "date_collected" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "option_numbers", :force => true do |t| + t.integer "user_id" + t.integer "memo" + t.integer "messages_for_issues" + t.integer "issues_status" + t.integer "replay_for_message" + t.integer "replay_for_memo" + t.integer "follow" + t.integer "tread" + t.integer "praise_by_one" + t.integer "praise_by_two" + t.integer "praise_by_three" + t.integer "tread_by_one" + t.integer "tread_by_two" + t.integer "tread_by_three" + t.integer "changeset" + t.integer "document" + t.integer "attachment" + t.integer "issue_done_ratio" + t.integer "post_issue" + t.integer "score_type" + t.integer "total_score" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.integer "project_id" + end + + create_table "organizations", :force => true do |t| + t.string "name" + t.string "logo_link" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "phone_app_versions", :force => true do |t| + t.string "version" + t.text "description" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "poll_answers", :force => true do |t| + t.integer "poll_question_id" + t.text "answer_text" + t.integer "answer_position" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "poll_questions", :force => true do |t| + t.string "question_title" + t.integer "question_type" + t.integer "is_necessary" + t.integer "poll_id" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.integer "question_number" + end + + create_table "poll_users", :force => true do |t| + t.integer "user_id" + t.integer "poll_id" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "poll_votes", :force => true do |t| + t.integer "user_id" + t.integer "poll_question_id" + t.integer "poll_answer_id" + t.text "vote_text" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "polls", :force => true do |t| + t.string "polls_name" + t.string "polls_type" + t.integer "polls_group_id" + t.integer "polls_status" + t.integer "user_id" + t.datetime "published_at" + t.datetime "closed_at" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.text "polls_description" + t.integer "show_result", :default => 1 + end + + create_table "praise_tread_caches", :force => true do |t| + t.integer "object_id", :null => false + t.string "object_type" + t.integer "praise_num" + t.integer "tread_num" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "praise_treads", :force => true do |t| + t.integer "user_id", :null => false + t.integer "praise_tread_object_id" + t.string "praise_tread_object_type" + t.integer "praise_or_tread" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "project_infos", :force => true do |t| + t.integer "project_id" + t.integer "user_id" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "project_scores", :force => true do |t| + t.string "project_id" + t.integer "score" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.integer "issue_num", :default => 0 + t.integer "issue_journal_num", :default => 0 + t.integer "news_num", :default => 0 + t.integer "documents_num", :default => 0 + t.integer "changeset_num", :default => 0 + t.integer "board_message_num", :default => 0 + end + + create_table "project_statuses", :force => true do |t| + t.integer "changesets_count" + t.integer "watchers_count" + t.integer "project_id" + t.integer "project_type" + t.float "grade", :default => 0.0 + t.integer "course_ac_para", :default => 0 + end + + add_index "project_statuses", ["grade"], :name => "index_project_statuses_on_grade" + + create_table "projecting_softapplictions", :force => true do |t| + t.integer "user_id" + t.integer "softapplication_id" + t.integer "project_id" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "projects", :force => true do |t| + t.string "name", :default => "", :null => false + t.text "description" + t.string "homepage", :default => "" + t.boolean "is_public", :default => true, :null => false + t.integer "parent_id" + t.datetime "created_on" + t.datetime "updated_on" + t.string "identifier" + t.integer "status", :default => 1, :null => false + t.integer "lft" + t.integer "rgt" + t.boolean "inherit_members", :default => false, :null => false + t.integer "project_type" + t.boolean "hidden_repo", :default => false, :null => false + t.integer "attachmenttype", :default => 1 + t.integer "user_id" + t.integer "dts_test", :default => 0 + t.string "enterprise_name" + t.integer "organization_id" + t.integer "project_new_type" + end + + add_index "projects", ["lft"], :name => "index_projects_on_lft" + add_index "projects", ["rgt"], :name => "index_projects_on_rgt" + + create_table "projects_trackers", :id => false, :force => true do |t| + t.integer "project_id", :default => 0, :null => false + t.integer "tracker_id", :default => 0, :null => false + end + + add_index "projects_trackers", ["project_id", "tracker_id"], :name => "projects_trackers_unique", :unique => true + add_index "projects_trackers", ["project_id"], :name => "projects_trackers_project_id" + + create_table "queries", :force => true do |t| + t.integer "project_id" + t.string "name", :default => "", :null => false + t.text "filters" + t.integer "user_id", :default => 0, :null => false + t.boolean "is_public", :default => false, :null => false + t.text "column_names" + t.text "sort_criteria" + t.string "group_by" + t.string "type" + end + + add_index "queries", ["project_id"], :name => "index_queries_on_project_id" + add_index "queries", ["user_id"], :name => "index_queries_on_user_id" + + create_table "relative_memo_to_open_source_projects", :force => true do |t| + t.integer "osp_id" + t.integer "relative_memo_id" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "relative_memos", :force => true do |t| + t.integer "osp_id" + t.integer "parent_id" + t.string "subject", :null => false + t.text "content", :limit => 16777215, :null => false + t.integer "author_id" + t.integer "replies_count", :default => 0 + t.integer "last_reply_id" + t.boolean "lock", :default => false + t.boolean "sticky", :default => false + t.boolean "is_quote", :default => false + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.integer "viewed_count_crawl", :default => 0 + t.integer "viewed_count_local", :default => 0 + t.string "url" + t.string "username" + t.string "userhomeurl" + t.date "date_collected" + t.string "topic_resource" + end + + create_table "repositories", :force => true do |t| + t.integer "project_id", :default => 0, :null => false + t.string "url", :default => "", :null => false + t.string "login", :limit => 60, :default => "" + t.string "password", :default => "" + t.string "root_url", :default => "" + t.string "type" + t.string "path_encoding", :limit => 64 + t.string "log_encoding", :limit => 64 + t.text "extra_info" + t.string "identifier" + t.boolean "is_default", :default => false + end + + add_index "repositories", ["project_id"], :name => "index_repositories_on_project_id" + + create_table "rich_rich_files", :force => true do |t| + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.string "rich_file_file_name" + t.string "rich_file_content_type" + t.integer "rich_file_file_size" + t.datetime "rich_file_updated_at" + t.string "owner_type" + t.integer "owner_id" + t.text "uri_cache" + t.string "simplified_type", :default => "file" + end + + create_table "roles", :force => true do |t| + t.string "name", :limit => 30, :default => "", :null => false + t.integer "position", :default => 1 + t.boolean "assignable", :default => true + t.integer "builtin", :default => 0, :null => false + t.text "permissions" + t.string "issues_visibility", :limit => 30, :default => "default", :null => false + end + + create_table "schools", :force => true do |t| + t.string "name" + t.string "province" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.string "logo_link" + end + + create_table "seems_rateable_cached_ratings", :force => true do |t| + t.integer "cacheable_id", :limit => 8 + t.string "cacheable_type" + t.float "avg", :null => false + t.integer "cnt", :null => false + t.string "dimension" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "seems_rateable_rates", :force => true do |t| + t.integer "rater_id", :limit => 8 + t.integer "rateable_id" + t.string "rateable_type" + t.float "stars", :null => false + t.string "dimension" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.integer "is_teacher_score", :default => 0 + end + + create_table "settings", :force => true do |t| + t.string "name", :default => "", :null => false + t.text "value" + t.datetime "updated_on" + end + + add_index "settings", ["name"], :name => "index_settings_on_name" + + create_table "shares", :force => true do |t| + t.date "created_on" + t.string "url" + t.string "title" + t.integer "share_type" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.integer "project_id" + t.integer "user_id" + t.string "description" + end + + create_table "softapplications", :force => true do |t| + t.string "name" + t.text "description" + t.integer "app_type_id" + t.string "app_type_name" + t.string "android_min_version_available" + t.integer "user_id" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.integer "contest_id" + t.integer "softapplication_id" + t.integer "is_public" + t.string "application_developers" + t.string "deposit_project_url" + t.string "deposit_project" + t.integer "project_id" + end + + create_table "students_for_courses", :force => true do |t| + t.integer "student_id" + t.integer "course_id" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "taggings", :force => true do |t| + t.integer "tag_id" + t.integer "taggable_id" + t.string "taggable_type" + t.integer "tagger_id" + t.string "tagger_type" + t.string "context", :limit => 128 + t.datetime "created_at" + end + + add_index "taggings", ["tag_id"], :name => "index_taggings_on_tag_id" + add_index "taggings", ["taggable_id", "taggable_type", "context"], :name => "index_taggings_on_taggable_id_and_taggable_type_and_context" + add_index "taggings", ["taggable_type"], :name => "index_taggings_on_taggable_type" + + create_table "tags", :force => true do |t| + t.string "name" + end + + create_table "teachers", :force => true do |t| + t.string "tea_name" + t.string "location" + t.integer "couurse_time" + t.integer "course_code" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.string "extra" + end + + create_table "time_entries", :force => true do |t| + t.integer "project_id", :null => false + t.integer "user_id", :null => false + t.integer "issue_id" + t.float "hours", :null => false + t.string "comments" + t.integer "activity_id", :null => false + t.date "spent_on", :null => false + t.integer "tyear", :null => false + t.integer "tmonth", :null => false + t.integer "tweek", :null => false + t.datetime "created_on", :null => false + t.datetime "updated_on", :null => false + end + + add_index "time_entries", ["activity_id"], :name => "index_time_entries_on_activity_id" + add_index "time_entries", ["created_on"], :name => "index_time_entries_on_created_on" + add_index "time_entries", ["issue_id"], :name => "time_entries_issue_id" + add_index "time_entries", ["project_id"], :name => "time_entries_project_id" + add_index "time_entries", ["user_id"], :name => "index_time_entries_on_user_id" + + create_table "tokens", :force => true do |t| + t.integer "user_id", :default => 0, :null => false + t.string "action", :limit => 30, :default => "", :null => false + t.string "value", :limit => 40, :default => "", :null => false + t.datetime "created_on", :null => false + end + + add_index "tokens", ["user_id"], :name => "index_tokens_on_user_id" + add_index "tokens", ["value"], :name => "tokens_value", :unique => true + + create_table "trackers", :force => true do |t| + t.string "name", :limit => 30, :default => "", :null => false + t.boolean "is_in_chlog", :default => false, :null => false + t.integer "position", :default => 1 + t.boolean "is_in_roadmap", :default => true, :null => false + t.integer "fields_bits", :default => 0 + end + + create_table "user_extensions", :force => true do |t| + t.integer "user_id", :null => false + t.date "birthday" + t.string "brief_introduction" + t.integer "gender" + t.string "location" + t.string "occupation" + t.integer "work_experience" + t.integer "zip_code" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.string "technical_title" + t.integer "identity" + t.string "student_id" + t.string "teacher_realname" + t.string "student_realname" + t.string "location_city" + t.integer "school_id" + end + + create_table "user_grades", :force => true do |t| + t.integer "user_id", :null => false + t.integer "project_id", :null => false + t.float "grade", :default => 0.0 + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + add_index "user_grades", ["grade"], :name => "index_user_grades_on_grade" + add_index "user_grades", ["project_id"], :name => "index_user_grades_on_project_id" + add_index "user_grades", ["user_id"], :name => "index_user_grades_on_user_id" + + create_table "user_levels", :force => true do |t| + t.integer "user_id" + t.integer "level" + end + + create_table "user_preferences", :force => true do |t| + t.integer "user_id", :default => 0, :null => false + t.text "others" + t.boolean "hide_mail", :default => false + t.string "time_zone" + end + + add_index "user_preferences", ["user_id"], :name => "index_user_preferences_on_user_id" + + create_table "user_score_details", :force => true do |t| + t.integer "current_user_id" + t.integer "target_user_id" + t.string "score_type" + t.string "score_action" + t.integer "user_id" + t.integer "old_score" + t.integer "new_score" + t.integer "current_user_level" + t.integer "target_user_level" + t.integer "score_changeable_obj_id" + t.string "score_changeable_obj_type" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "user_scores", :force => true do |t| + t.integer "user_id", :null => false + t.integer "collaboration" + t.integer "influence" + t.integer "skill" + t.integer "active" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "user_statuses", :force => true do |t| + t.integer "changesets_count" + t.integer "watchers_count" + t.integer "user_id" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.float "grade", :default => 0.0 + end + + add_index "user_statuses", ["changesets_count"], :name => "index_user_statuses_on_changesets_count" + add_index "user_statuses", ["grade"], :name => "index_user_statuses_on_grade" + add_index "user_statuses", ["watchers_count"], :name => "index_user_statuses_on_watchers_count" + + create_table "users", :force => true do |t| + t.string "login", :default => "", :null => false + t.string "hashed_password", :limit => 40, :default => "", :null => false + t.string "firstname", :limit => 30, :default => "", :null => false + t.string "lastname", :default => "", :null => false + t.string "mail", :limit => 60, :default => "", :null => false + t.boolean "admin", :default => false, :null => false + t.integer "status", :default => 1, :null => false + t.datetime "last_login_on" + t.string "language", :limit => 5, :default => "" + t.integer "auth_source_id" + t.datetime "created_on" + t.datetime "updated_on" + t.string "type" + t.string "identity_url" + t.string "mail_notification", :default => "", :null => false + t.string "salt", :limit => 64 + end + + add_index "users", ["auth_source_id"], :name => "index_users_on_auth_source_id" + add_index "users", ["id", "type"], :name => "index_users_on_id_and_type" + add_index "users", ["type"], :name => "index_users_on_type" + + create_table "versions", :force => true do |t| + t.integer "project_id", :default => 0, :null => false + t.string "name", :default => "", :null => false + t.string "description", :default => "" + t.date "effective_date" + t.datetime "created_on" + t.datetime "updated_on" + t.string "wiki_page_title" + t.string "status", :default => "open" + t.string "sharing", :default => "none", :null => false + end + + add_index "versions", ["project_id"], :name => "versions_project_id" + add_index "versions", ["sharing"], :name => "index_versions_on_sharing" + + create_table "watchers", :force => true do |t| + t.string "watchable_type", :default => "", :null => false + t.integer "watchable_id", :default => 0, :null => false + t.integer "user_id" + end + + add_index "watchers", ["user_id", "watchable_type"], :name => "watchers_user_id_type" + add_index "watchers", ["user_id"], :name => "index_watchers_on_user_id" + add_index "watchers", ["watchable_id", "watchable_type"], :name => "index_watchers_on_watchable_id_and_watchable_type" + + create_table "web_footer_companies", :force => true do |t| + t.string "name" + t.string "logo_size" + t.string "url" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "web_footer_oranizers", :force => true do |t| + t.string "name" + t.text "description" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "wiki_content_versions", :force => true do |t| + t.integer "wiki_content_id", :null => false + t.integer "page_id", :null => false + t.integer "author_id" + t.binary "data", :limit => 2147483647 + t.string "compression", :limit => 6, :default => "" + t.string "comments", :default => "" + t.datetime "updated_on", :null => false + t.integer "version", :null => false + end + + add_index "wiki_content_versions", ["updated_on"], :name => "index_wiki_content_versions_on_updated_on" + add_index "wiki_content_versions", ["wiki_content_id"], :name => "wiki_content_versions_wcid" + + create_table "wiki_contents", :force => true do |t| + t.integer "page_id", :null => false + t.integer "author_id" + t.text "text", :limit => 2147483647 + t.string "comments", :default => "" + t.datetime "updated_on", :null => false + t.integer "version", :null => false + end + + add_index "wiki_contents", ["author_id"], :name => "index_wiki_contents_on_author_id" + add_index "wiki_contents", ["page_id"], :name => "wiki_contents_page_id" + + create_table "wiki_pages", :force => true do |t| + t.integer "wiki_id", :null => false + t.string "title", :null => false + t.datetime "created_on", :null => false + t.boolean "protected", :default => false, :null => false + t.integer "parent_id" + end + + add_index "wiki_pages", ["parent_id"], :name => "index_wiki_pages_on_parent_id" + add_index "wiki_pages", ["wiki_id", "title"], :name => "wiki_pages_wiki_id_title" + add_index "wiki_pages", ["wiki_id"], :name => "index_wiki_pages_on_wiki_id" + + create_table "wiki_redirects", :force => true do |t| + t.integer "wiki_id", :null => false + t.string "title" + t.string "redirects_to" + t.datetime "created_on", :null => false + end + + add_index "wiki_redirects", ["wiki_id", "title"], :name => "wiki_redirects_wiki_id_title" + add_index "wiki_redirects", ["wiki_id"], :name => "index_wiki_redirects_on_wiki_id" + + create_table "wikis", :force => true do |t| + t.integer "project_id", :null => false + t.string "start_page", :null => false + t.integer "status", :default => 1, :null => false + end + + add_index "wikis", ["project_id"], :name => "wikis_project_id" + + create_table "workflows", :force => true do |t| + t.integer "tracker_id", :default => 0, :null => false + t.integer "old_status_id", :default => 0, :null => false + t.integer "new_status_id", :default => 0, :null => false + t.integer "role_id", :default => 0, :null => false + t.boolean "assignee", :default => false, :null => false + t.boolean "author", :default => false, :null => false + t.string "type", :limit => 30 + t.string "field_name", :limit => 30 + t.string "rule", :limit => 30 + end + + add_index "workflows", ["new_status_id"], :name => "index_workflows_on_new_status_id" + add_index "workflows", ["old_status_id"], :name => "index_workflows_on_old_status_id" + add_index "workflows", ["role_id", "tracker_id", "old_status_id"], :name => "wkfs_role_tracker_old_status" + add_index "workflows", ["role_id"], :name => "index_workflows_on_role_id" + + create_table "works_categories", :force => true do |t| + t.string "category" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + create_table "zip_packs", :force => true do |t| + t.integer "user_id" + t.integer "homework_id" + t.string "file_digest" + t.string "file_path" + t.integer "pack_times", :default => 1 + t.integer "pack_size", :default => 0 + t.text "file_digests" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + +end From 5c0d0230fc6b1cdc17e6e4f5c011546059c94655 Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Thu, 23 Apr 2015 09:47:49 +0800 Subject: [PATCH 212/285] =?UTF-8?q?=E5=8E=BB=E6=8E=89=E9=A6=96=E9=A1=B5?= =?UTF-8?q?=E5=BA=95=E9=83=A8=E7=95=99=E7=99=BD=E5=92=8C=E4=B8=8D=E5=AF=B9?= =?UTF-8?q?=E9=BD=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/layouts/_base_footer.html.erb | 2 +- app/views/layouts/_point_browser.html.erb | 4 ++-- public/themes/redpenny-master/stylesheets/application.css | 8 +++++++- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/app/views/layouts/_base_footer.html.erb b/app/views/layouts/_base_footer.html.erb index 322fae0e3..7253af03d 100644 --- a/app/views/layouts/_base_footer.html.erb +++ b/app/views/layouts/_base_footer.html.erb @@ -1,6 +1,6 @@
    -
    - <%= link_to repository.identifier, ({:controller => 'repositories', :action => 'show', :id => @project, :repository_id => repository.identifier_param} if repository.identifier.present?), :class =>"c_blue" %> <%= checked_image repository.is_default? %> <%=h repository.scm_name %>http://<%= repository.login.to_s %>_<%= repository.identifier.to_s%>@<%= ip %> - <%=h repository.url.slice(project_path_cut, repository.url.length) %><%=h repository.url %><%=h truncate(repository.url,:length=>10) %> <% if repository.scm_name=="Git"%> diff --git a/app/views/projects/settings/_new_versions.html.erb b/app/views/projects/settings/_new_versions.html.erb index 7d513f192..c7566abf1 100644 --- a/app/views/projects/settings/_new_versions.html.erb +++ b/app/views/projects/settings/_new_versions.html.erb @@ -27,7 +27,7 @@ <%= l("version_status_#{version.status}") %> - <%= link_to_if_authorized(h(version.wiki_page_title), {:controller => 'wiki', + <%= link_to_if_authorized(h(truncate(version.wiki_page_title,:length=>20)), {:controller => 'wiki', :action => 'show', :project_id => version.project, :id => Wiki.titleize(version.wiki_page_title)}) || h(version.wiki_page_title) unless version.wiki_page_title.blank? || version.project.wiki.nil? %> @@ -57,29 +57,29 @@
    • - + <%= f.text_field :name, :maxlength => 60, :required => true %>
    • - + <%= f.text_field :description, :maxlength => 60 %>
    • - + <%= f.select :status, Version::VERSION_STATUSES.collect {|s| [l("version_status_#{s}"), s]} %>
    • - + <%= f.text_field :wiki_page_title, :size =>60, :label => :label_wiki_page, :disabled => @project.wiki.nil? %>
    • - + <%= f.text_field :effective_date, :size => 10, :readonly => true,:class=>" fl" %> <%= calendar_for('version_effective_date') %>
    • - + <%= f.select :sharing, @project.versions.build.allowed_sharings.collect {|v| [format_version_sharing(v), v]} %>
    • 保存 diff --git a/app/views/versions/_form.html.erb b/app/views/versions/_form.html.erb index 734fc459e..abb28c658 100644 --- a/app/views/versions/_form.html.erb +++ b/app/views/versions/_form.html.erb @@ -3,29 +3,29 @@
      • - + <%= f.text_field :name, :maxlength => 60,:class=>" w280", :label => ""%>
      • - + <%= f.text_field :description, :maxlength => 60,:class=>" w280", :label => "" %>
      • - + <%= f.select :status, Version::VERSION_STATUSES.collect {|s| [l("version_status_#{s}"), s]}, :label => "" %>
      • - + <%= f.text_field :wiki_page_title, :size =>60, :label => "", :disabled => @project.wiki.nil? %>
      • - - <%= f.text_field :effective_date, :size => 10, :readonly => true,:class=>'f1',:label => "" %> + + <%= f.text_field :effective_date, :size => 10, :readonly => true,:class=>"fl" ,:style=>"margin-left:7px;"%> <%= calendar_for('version_effective_date') %>
      • - + <%= f.select :sharing, @version.allowed_sharings.collect {|v| [format_version_sharing(v), v]},:label=>"" %>
      From 43442d6f62fa5e44ed293b2df7980985c0ab0a8d Mon Sep 17 00:00:00 2001 From: lizanle <491823689@qq.com> Date: Fri, 17 Apr 2015 10:45:49 +0800 Subject: [PATCH 110/285] =?UTF-8?q?=E5=AD=97=E7=AC=A6=E6=88=AA=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/application_helper.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 34bb4680e..9afd67001 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -394,9 +394,9 @@ module ApplicationHelper def format_version_name(version) if version.project == @project - h(truncate(version.name,:length=>30)) + h(truncate(version.name,:length=>20)) else - h("#{version.project} - #{truncate(version.name,:length=>30)}") + h("#{version.project} - #{truncate(version.name,:length=>20)}") end end From 1902d557c03adb3014c0d998d23ce2b7499a5c23 Mon Sep 17 00:00:00 2001 From: lizanle <491823689@qq.com> Date: Fri, 17 Apr 2015 10:48:40 +0800 Subject: [PATCH 111/285] =?UTF-8?q?=E6=9C=89=E6=97=A5=E6=9C=9Flabel?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/versions/_form.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/versions/_form.html.erb b/app/views/versions/_form.html.erb index abb28c658..d9a02b8f1 100644 --- a/app/views/versions/_form.html.erb +++ b/app/views/versions/_form.html.erb @@ -20,7 +20,7 @@
    • - <%= f.text_field :effective_date, :size => 10, :readonly => true,:class=>"fl" ,:style=>"margin-left:7px;"%> + <%= f.text_field :effective_date, :size => 10, :readonly => true,:class=>"fl" ,:style=>"margin-left:7px;",:label=>""%> <%= calendar_for('version_effective_date') %>
    • From 640f6a1ca76c8cc30220281e11accf28ceca27fa Mon Sep 17 00:00:00 2001 From: huang Date: Fri, 17 Apr 2015 10:58:40 +0800 Subject: [PATCH 112/285] =?UTF-8?q?=E9=82=AE=E4=BB=B6=E5=8F=91=E9=80=81?= =?UTF-8?q?=E6=A1=86=E8=B7=9D=E7=A6=BB=20=E5=8E=BB=E6=8E=89=E8=AE=A8?= =?UTF-8?q?=E8=AE=BA=E5=8C=BA=E4=B8=8D=E5=BF=85=E8=A6=81=E7=9A=84*?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/messages/_form_project.html.erb | 2 +- app/views/projects/invite_members_by_mail.html.erb | 9 +++++---- public/stylesheets/project.css | 2 +- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/app/views/messages/_form_project.html.erb b/app/views/messages/_form_project.html.erb index 3e932b047..a1ef69fa9 100644 --- a/app/views/messages/_form_project.html.erb +++ b/app/views/messages/_form_project.html.erb @@ -26,7 +26,7 @@
    • - + <%= text_area :quote,:quote,:style => 'display:none' %> <%= f.text_area :content, :class => 'talk_text fl', :id => 'message_content', :onkeyup => "regexContent();", :maxlength => 5000,:placeholder => "最多3000个汉字(或6000个英文字符)" %>
      diff --git a/app/views/projects/invite_members_by_mail.html.erb b/app/views/projects/invite_members_by_mail.html.erb index 9a0694ea6..7f952cb3c 100644 --- a/app/views/projects/invite_members_by_mail.html.erb +++ b/app/views/projects/invite_members_by_mail.html.erb @@ -67,15 +67,16 @@
    • <%= form_tag('send_mail_to_member', :controller => 'projects',:action => 'send_mail_to_member', method: 'get') do %> -
      +
        +
      • <%= text_field_tag 'mail', '', :class => "fb_item fl", :placeholder => l(:label_input_email), :onkeyup => "this.value=this.value.replace(' ','')", :style => "ime-mode:disabled;", :onblur => "verifyAddress(this);" %> -
      -
      + +
    <%= l(:label_send_email)%> - <%#= submit_tag '免费发送', :style => "display:block; width:80px; text-align:center; color:#fff; height:26px; padding-top:3px; margin-bottom:10px;" %> + <% end %>
    diff --git a/public/stylesheets/project.css b/public/stylesheets/project.css index 2f08af6d6..66d04aa0c 100644 --- a/public/stylesheets/project.css +++ b/public/stylesheets/project.css @@ -42,7 +42,7 @@ a:hover.box_close{background:url(../images/img_floatbox.png) -22px 0 no-repeat;} .box_main02{ width:390px; margin:15px auto;} .box_h3{ color:#15bccf; font-size:16px;} .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:5px; padding-left:5px; width:290px;} a.icon_addm{ background:url(../images/img_floatbox.png) 0 -33px no-repeat; width:16px; height:16px; display:block; margin:5px 0 0 5px;} a:hover.icon_addm{background:url(../images/img_floatbox.png) 0 -61px no-repeat; } a.icon_removem{ background:url(../images/img_floatbox.png) -22px -33px no-repeat;width:16px; height:16px; display:block; margin:5px 0 0 5px} From d2b0eae1196dac6e5ae4ab8abbdcf88890584046 Mon Sep 17 00:00:00 2001 From: lizanle <491823689@qq.com> Date: Fri, 17 Apr 2015 11:13:36 +0800 Subject: [PATCH 113/285] =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../projects/settings/_new_versions.html.erb | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/app/views/projects/settings/_new_versions.html.erb b/app/views/projects/settings/_new_versions.html.erb index c7566abf1..6365354c3 100644 --- a/app/views/projects/settings/_new_versions.html.erb +++ b/app/views/projects/settings/_new_versions.html.erb @@ -9,13 +9,13 @@ - - - - - - - + + + + + + + <% for version in @project.shared_versions.sort %> @@ -23,7 +23,7 @@ <%= 'shared' if version.project != @project %> <%= link_to_version version %> - + -<% id_style = (show_revision_graph ? "padding-left:#{(graph_space + 1) * 12}px" : nil) %> +<% id_style = (show_revision_graph ? "padding-left:#{(graph_space + 1) * 20}px" : nil) %> <%= content_tag(:td, :class => 'id', :style => id_style) do %> <%= link_to_revision(changeset, @repository) %> <% end %> From 1fe35fc06396b59b18b552911b08dfafc95bca12 Mon Sep 17 00:00:00 2001 From: huang Date: Tue, 21 Apr 2015 18:05:35 +0800 Subject: [PATCH 160/285] =?UTF-8?q?=E9=85=8D=E7=BD=AE=E4=B8=AD=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E8=A7=92=E8=89=B2=E6=9D=83=E9=99=90=E5=88=A4=E6=96=AD?= =?UTF-8?q?=20=E4=B8=8D=E5=90=8C=E8=A7=92=E8=89=B2=E9=80=9A=E8=BF=87admin?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E6=98=BE=E7=A4=BA=E4=B8=8D=E5=90=8C=E6=A8=A1?= =?UTF-8?q?=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/projects/settings.html.erb | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/app/views/projects/settings.html.erb b/app/views/projects/settings.html.erb index d3499cfdd..22f539f73 100644 --- a/app/views/projects/settings.html.erb +++ b/app/views/projects/settings.html.erb @@ -20,15 +20,26 @@

    配置

    +
      -
    • 信息
    • -
    • 模块
    • -
    • 成员
    • -
    • 版本
    • + <% if User.current.allowed_to?(:edit_project, @project) %> +
    • 信息
    • + <% end %> + <% if User.current.allowed_to?(:select_project_modules, @project) %> +
    • 模块
    • + <% end %> + <% if User.current.allowed_to?(:manage_members, @project) %> +
    • 成员
    • + <% end %> + <% if User.current.allowed_to?(:manage_versions, @project) %> +
    • 版本
    • + <% end %> -
    • 版本库
    • + <% if User.current.allowed_to?(:manage_repository, @project) %> +
    • 版本库
    • + <% end %> From 57193b077e1c677481e6e2132e8d0aa4c88ef92b Mon Sep 17 00:00:00 2001 From: sw <939547590@qq.com> Date: Tue, 21 Apr 2015 20:44:27 +0800 Subject: [PATCH 161/285] =?UTF-8?q?=E4=BD=9C=E5=93=81=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E5=8F=96=E6=B6=88=E5=88=86=E9=A1=B5=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/bids_controller.rb | 3 ++- app/controllers/homework_attach_controller.rb | 15 ++++++++++----- .../homework_attach/_homeworks_list.html.erb | 10 +++++----- public/stylesheets/css.css | 2 +- 4 files changed, 18 insertions(+), 12 deletions(-) diff --git a/app/controllers/bids_controller.rb b/app/controllers/bids_controller.rb index d38846ea0..ec83fbd19 100644 --- a/app/controllers/bids_controller.rb +++ b/app/controllers/bids_controller.rb @@ -506,7 +506,8 @@ class BidsController < ApplicationController end @cur_page = params[:page] || 1 - @homework_list = paginateHelper all_homework_list,10 + # @homework_list = paginateHelper all_homework_list,10 + @homework_list = all_homework_list @jours_count = @bid.journals_for_messages.where('m_parent_id IS NULL').count if params[:student_id].present? @temp = [] diff --git a/app/controllers/homework_attach_controller.rb b/app/controllers/homework_attach_controller.rb index a589ce144..ee95277ce 100644 --- a/app/controllers/homework_attach_controller.rb +++ b/app/controllers/homework_attach_controller.rb @@ -59,7 +59,8 @@ class HomeworkAttachController < ApplicationController all_homework_list = search_homework_member(all_homework_list,@search_name.to_s.downcase) if @search_name @cur_page = params[:page] || 1 @cur_type = 2 - @homework_list = paginateHelper all_homework_list,10 + # @homework_list = paginateHelper all_homework_list,10 + @homework_list = all_homework_list @direction = direction == 'asc'? 'desc' : 'asc' respond_to do |format| format.js @@ -93,7 +94,8 @@ class HomeworkAttachController < ApplicationController all_homework_list = search_homework_member(all_homework_list,@search_name.to_s.downcase) if @search_name @cur_page = params[:page] || 1 @cur_type = 3 - @homework_list = paginateHelper all_homework_list,10 + # @homework_list = paginateHelper all_homework_list,10 + @homework_list = all_homework_list @direction = direction == 'asc'? 'desc' : 'asc' respond_to do |format| format.js @@ -110,7 +112,8 @@ class HomeworkAttachController < ApplicationController all_homework_list = get_student_batch_homework_list @bid,User.current @cur_page = params[:page] || 1 @cur_type = 4 - @homework_list = paginateHelper all_homework_list,10 + # @homework_list = paginateHelper all_homework_list,10 + @homework_list = all_homework_list respond_to do |format| format.js end @@ -134,7 +137,8 @@ class HomeworkAttachController < ApplicationController WHERE homework_attaches.bid_id = #{@bid.id} AND homework_users.user_id = #{User.current.id}") end @cur_page = params[:page] || 1 - @homework_list = paginateHelper all_homework_list,10 + # @homework_list = paginateHelper all_homework_list,10 + @homework_list = all_homework_list respond_to do |format| format.js end @@ -612,7 +616,8 @@ class HomeworkAttachController < ApplicationController ORDER BY #{order_by}) AS table1 WHERE table1.t_score IS NULL OR table1.t_score = 0 ") @all_homework_list = search_homework_member(@all_homework_list,@search_name.to_s.downcase) if @search_name - @homework_list = paginateHelper @all_homework_list,10 + # @homework_list = paginateHelper @all_homework_list,10 + @homework_list = @all_homework_list end #获取指定作业的所有成员 diff --git a/app/views/homework_attach/_homeworks_list.html.erb b/app/views/homework_attach/_homeworks_list.html.erb index 3444eca36..f5d0f3616 100644 --- a/app/views/homework_attach/_homeworks_list.html.erb +++ b/app/views/homework_attach/_homeworks_list.html.erb @@ -66,11 +66,11 @@ <% else %> <% end %> -<% unless is_my_homework || is_student_batch_homework %> -
        - <%= pagination_links_full @obj_pages, @obj_count, :per_page_links => false, :remote => remote, :flag => true%> -
      -<% end %> +<%# unless is_my_homework || is_student_batch_homework %> + + <%#= pagination_links_full @obj_pages, @obj_count, :per_page_links => false, :remote => remote, :flag => true%> + +<%# end %> <% if is_teacher %> diff --git a/public/stylesheets/css.css b/public/stylesheets/css.css index 8f43077f4..57b3499db 100644 --- a/public/stylesheets/css.css +++ b/public/stylesheets/css.css @@ -11,7 +11,7 @@ a:hover{ text-decoration:underline;} .container{ width:940px; margin:0 auto; } /* 作业列表 */ .ttl{ } -.ctt{height:820px;clear:both; } +.ctt{clear:both; } /* TAB 切换效果 */ .tb_{ background-color: #eaeaea; height:40px; } .tb_ ul{height:40px; } From 8b77079f4432550227ad82ea43625c045d7e575e Mon Sep 17 00:00:00 2001 From: huang Date: Wed, 22 Apr 2015 00:55:40 +0800 Subject: [PATCH 162/285] =?UTF-8?q?=E5=85=AC=E5=BC=80=E3=80=82=E7=A7=81?= =?UTF-8?q?=E6=9C=89=E6=A0=87=E8=AF=86=E5=BC=BA=E5=88=B6=E4=B8=8D=E6=8D=A2?= =?UTF-8?q?=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/layouts/base_projects.html.erb | 6 +++--- public/stylesheets/pleft.css | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/views/layouts/base_projects.html.erb b/app/views/layouts/base_projects.html.erb index f3dc61c8a..ed7a5a4dc 100644 --- a/app/views/layouts/base_projects.html.erb +++ b/app/views/layouts/base_projects.html.erb @@ -121,13 +121,13 @@
      diff --git a/public/stylesheets/pleft.css b/public/stylesheets/pleft.css index a64d3671f..baca16c9c 100644 --- a/public/stylesheets/pleft.css +++ b/public/stylesheets/pleft.css @@ -24,7 +24,7 @@ a:hover.pr_join_a{ background:#41a8c8;} .pr_info_score{ font-size:14px; color:#3e4040; } .pr_info_score a{ color:#ff7143;} .pr_info_score a:hover{ color:#64bdd9;} -.img_private{ background:url(../images/new_project/img_project.png) 0 0 no-repeat; width:33px; height:16px; color:#fff; font-size:12px; padding-left:7px; } +.img_private{ background:url(../images/new_project/img_project.png) 0 0 no-repeat; width:33px; height:16px; color:#fff; font-size:12px; padding-left:7px;white-space:nowrap;} .info_foot_num{ color:#3ca5c6; } .pr_info_foot{ color:#7f7f7f; margin-top:5px; } .info_foot_num:hover{ color:#2390b2;} From 729d11ebafb6ad96eeb3e4fdcb174078c8783a3e Mon Sep 17 00:00:00 2001 From: huang Date: Wed, 22 Apr 2015 09:22:52 +0800 Subject: [PATCH 163/285] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E4=B8=AD=E9=A6=96=E9=A1=B5=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/projects_helper.rb | 15 ++++++++++++++ app/views/projects/settings.html.erb | 31 ++++++++++++++-------------- 2 files changed, 31 insertions(+), 15 deletions(-) diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb index d8078aeb7..508e58ba3 100644 --- a/app/helpers/projects_helper.rb +++ b/app/helpers/projects_helper.rb @@ -392,4 +392,19 @@ module ProjectsHelper type end + #显示项目配置菜单 + def show_project_memu user + if user.allowed_to?(:edit_project, @project) + result = "edit_project" + elsif user.allowed_to?(:select_project_modules, @project) + result = "select_project_modules" + elsif user.allowed_to?(:manage_members, @project) + result = "manage_members" + elsif user.allowed_to?(:manage_versions, @project) + result = "manage_versions" + elsif user.allowed_to?(:manage_repository, @project) + result = "manage_repository" + end + result + end end diff --git a/app/views/projects/settings.html.erb b/app/views/projects/settings.html.erb index 22f539f73..25ec1c4d5 100644 --- a/app/views/projects/settings.html.erb +++ b/app/views/projects/settings.html.erb @@ -24,21 +24,22 @@
        + <% show_memu = show_project_memu User.current%> <% if User.current.allowed_to?(:edit_project, @project) %> -
      • 信息
      • +
      • 信息
      • <% end %> <% if User.current.allowed_to?(:select_project_modules, @project) %> -
      • 模块
      • +
      • 模块
      • <% end %> <% if User.current.allowed_to?(:manage_members, @project) %> -
      • 成员
      • +
      • 成员
      • <% end %> <% if User.current.allowed_to?(:manage_versions, @project) %> -
      • 版本
      • +
      • 版本
      • <% end %> <% if User.current.allowed_to?(:manage_repository, @project) %> -
      • 版本库
      • +
      • 版本库
      • <% end %> @@ -48,28 +49,28 @@
        -
        - <%= render :partial=>"projects/settings/new_edit" %> +
        + <%= render :partial=>"projects/settings/new_edit" if User.current.allowed_to?(:edit_project, @project)%>
        -
        - <%= render :partial=>"projects/settings/new_modules" %> +
        + <%= render :partial=>"projects/settings/new_modules" if User.current.allowed_to?(:select_project_modules, @project)%>
        -
        - <%= render :partial=>"projects/settings/new_members" %> +
        + <%= render :partial=>"projects/settings/new_members" if User.current.allowed_to?(:manage_members, @project)%>
        -
        - <%= render :partial=>"projects/settings/new_versions" %> +
        + <%= render :partial=>"projects/settings/new_versions" if User.current.allowed_to?(:manage_versions, @project)%>
        -
        - <%= render :partial=>"projects/settings/new_repositories" %> +
        + <%= render :partial=>"projects/settings/new_repositories" if User.current.allowed_to?(:manage_repository, @project)%>
        From 5385f35aff71a78e40b9644e9a09cbd56623529d Mon Sep 17 00:00:00 2001 From: sw <939547590@qq.com> Date: Wed, 22 Apr 2015 09:52:12 +0800 Subject: [PATCH 164/285] =?UTF-8?q?=E6=95=99=E5=B8=88=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E7=BF=BB=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/courses/_course_teacher.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/courses/_course_teacher.html.erb b/app/views/courses/_course_teacher.html.erb index 587d9d2da..5571a4546 100644 --- a/app/views/courses/_course_teacher.html.erb +++ b/app/views/courses/_course_teacher.html.erb @@ -16,7 +16,7 @@ <% end%>
          - <%= pagination_links_full @obj_pages, @obj_count, :per_page_links => false, :remote => false, :flag => true%> + <%#= pagination_links_full @obj_pages, @obj_count, :per_page_links => false, :remote => false, :flag => true%>
        From ee4cfb9c89c9f9dbb34ce1c13bd3b99413a71619 Mon Sep 17 00:00:00 2001 From: huang Date: Wed, 22 Apr 2015 09:59:29 +0800 Subject: [PATCH 165/285] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=B5=81=E7=A8=8B?= =?UTF-8?q?=E7=A2=91=E7=82=B9=E8=BF=9B=E5=8E=BB=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/versions/show.html.erb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/views/versions/show.html.erb b/app/views/versions/show.html.erb index eb463300b..1a7fce16d 100644 --- a/app/views/versions/show.html.erb +++ b/app/views/versions/show.html.erb @@ -31,7 +31,7 @@
    <%= l(:label_version) %> <%= l(:field_effective_date) %><%= l(:field_description) %> <%= l(:field_status) %><%= l(:field_sharing) %><%= l(:label_wiki_page) %><%= l(:label_version) %> <%= l(:field_effective_date) %><%= l(:field_description) %> <%= l(:field_status) %><%= l(:field_sharing) %><%= l(:label_wiki_page) %>
    <%= format_date(version.effective_date) %><%=h version.description %><%=h version.description %> <%= l("version_status_#{version.status}") %> From eb1f8acbd39f2b2cceb45d67f78b4c25a7c54e6e Mon Sep 17 00:00:00 2001 From: whimlex Date: Fri, 17 Apr 2015 11:14:55 +0800 Subject: [PATCH 114/285] =?UTF-8?q?=E7=89=88=E6=9C=AC=E5=BA=93=E6=A0=B7?= =?UTF-8?q?=E5=BC=8F=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/repositories/_breadcrumbs.html.erb | 13 +++++++------ app/views/repositories/_navigation.html.erb | 6 +++--- app/views/repositories/show.html.erb | 2 +- public/stylesheets/project.css | 14 ++++++++++++++ 4 files changed, 25 insertions(+), 10 deletions(-) diff --git a/app/views/repositories/_breadcrumbs.html.erb b/app/views/repositories/_breadcrumbs.html.erb index b4ffa4d87..780cb47cb 100644 --- a/app/views/repositories/_breadcrumbs.html.erb +++ b/app/views/repositories/_breadcrumbs.html.erb @@ -1,7 +1,8 @@ -<%= link_to(@repository.identifier.present? ? h(@repository.identifier) : 'root', - :action => 'show', :id => @project, +<%= link_to @repository.identifier.present? ? h(@repository.identifier) : 'root', + {:action => 'show', :id => @project, :repository_id => @repository.identifier_param, - :path => nil, :rev => @rev) %> + :path => nil, :rev => @rev }, + :class=>"fl c_blue f14 fb" %> <% dirs = path.split('/') if 'file' == kind @@ -14,7 +15,7 @@ link_path << "#{dir}" %> / <%= link_to h(dir), :action => 'show', :id => @project, :repository_id => @repository.identifier_param, - :path => to_path_param(link_path), :rev => @rev %> + :path => to_path_param(link_path), :rev => @rev %> <% end %> <% if filename %> / <%= link_to h(filename), @@ -24,8 +25,8 @@ <% # @rev is revsion or Git and Mercurial branch or tag. # For Mercurial *tip*, @rev and @changeset are nil. - rev_text = @changeset.nil? ? @rev : format_revision(@changeset) + rev_text = @changeset.nil? ? "master" : format_revision(@changeset) %> -<%= "@ #{h rev_text}" unless rev_text.blank? %> +

    <%= "@ #{h rev_text}" unless rev_text.blank? %>

    <% html_title(with_leading_slash(path)) -%> diff --git a/app/views/repositories/_navigation.html.erb b/app/views/repositories/_navigation.html.erb index d288cbe19..d8ce218eb 100644 --- a/app/views/repositories/_navigation.html.erb +++ b/app/views/repositories/_navigation.html.erb @@ -1,17 +1,17 @@ <% content_for :header_tags do %> <%= javascript_include_tag 'repository_navigation' %> <% end %> - + <%= link_to l(:label_statistics), {:action => 'stats', :id => @project, :repository_id => @repository.identifier_param}, - :class => 'icon icon-stats' if @repository.supports_all_revisions? %> + :class => 'mt3 c_blue fl' if @repository.supports_all_revisions? %> <%= form_tag({:action => controller.action_name, :id => @project, :repository_id => @repository.identifier_param, :path => to_path_param(@path), :rev => nil}, - {:method => :get, :id => 'revision_selector'}) do -%> + {:method => :get, :id => 'revision_selector', :class => "fl c_grey02 ml5"}) do -%> <% if !@repository.branches.nil? && @repository.branches.length > 0 -%> | <%= l(:label_branch) %>: diff --git a/app/views/repositories/show.html.erb b/app/views/repositories/show.html.erb index e15820d96..5ddea4e60 100644 --- a/app/views/repositories/show.html.erb +++ b/app/views/repositories/show.html.erb @@ -3,7 +3,7 @@

    版本库

    -
    +
    <%= render :partial => 'breadcrumbs', :locals => { :path => @path, :kind => 'dir', :revision => @rev } %> <%= render :partial => 'navigation' %> diff --git a/public/stylesheets/project.css b/public/stylesheets/project.css index 2f08af6d6..9249130ee 100644 --- a/public/stylesheets/project.css +++ b/public/stylesheets/project.css @@ -139,6 +139,7 @@ a:hover.c_dblue{ color: #0781b4;} .c_dblue{ color:#3e6d8e;} .w90{width:90px;} .ml10{margin-left:10px;} +.ml20{margin-left:20px;} .resource{ width:670px;} .re_top{width:660px; height:40px; background:#eaeaea; padding:5px;} .re_top input{ float:left;} @@ -446,6 +447,8 @@ img.ui-datepicker-trigger { .repos_files ul li{ float:left; padding-left:10px; height:26px;} .repos_files ul:hover{ background:#ffffdd;} .repos_t_c li{ text-align:center;} +.pic_stats{display:block; background:url(../images/public_icon.png) 0px -548px no-repeat; width:20px; height:15px;} + /* 里程碑 */ .roadmap_box{ background:#f8f8f8; width:648px; padding:10px; margin-top:5px; border:1px solid #ddd; color:#555;} @@ -511,6 +514,17 @@ p.percent { font-size: 0.9em; } +.repositorytitle { + float: left; + white-space: nowrap; + line-height: 1.4em; + padding-top: 5px; + font-size: 12px; +} +.repositorytitle select{ width: 110px; height: 21px; } + + + /*导出*/ a.atom { background: url(../images/feed.png) no-repeat 1px 50%; padding: 2px 0px 3px 16px; } p.other-formats { text-align: right; font-size:0.9em; color: #666; } From c2c9660a46abcb5b95abbf58c7009cfe784c017d Mon Sep 17 00:00:00 2001 From: huang Date: Fri, 17 Apr 2015 11:15:27 +0800 Subject: [PATCH 115/285] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E5=BE=97=E5=88=86?= =?UTF-8?q?=E7=95=8C=E9=9D=A2=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/projects/_project_score_index.html.erb | 2 +- app/views/projects/_show_projects_score.html.erb | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/views/projects/_project_score_index.html.erb b/app/views/projects/_project_score_index.html.erb index 7a3022f44..f10c6b3e7 100644 --- a/app/views/projects/_project_score_index.html.erb +++ b/app/views/projects/_project_score_index.html.erb @@ -1,6 +1,6 @@ -<%= l(:label_projects_score) %> +
    <%= l(:label_projects_score) %>
    = <%= l(:label_issue_score) %> + <%= l(:label_news_score) %> + <%= l(:label_file_score) %> + <%= l(:label_code_submit_score) %> + <%= l(:label_topic_score) %>
    = <%= format("%.2f" , issue_score(project)).to_i %> + <%= format("%.2f" , news_score(project)).to_i %> + diff --git a/app/views/projects/_show_projects_score.html.erb b/app/views/projects/_show_projects_score.html.erb index 57af1f138..68ba2f12a 100644 --- a/app/views/projects/_show_projects_score.html.erb +++ b/app/views/projects/_show_projects_score.html.erb @@ -4,16 +4,16 @@
    - + From 0607cf326c6aaefec999ada5efbc2ff018b0dfa1 Mon Sep 17 00:00:00 2001 From: huang Date: Fri, 17 Apr 2015 11:42:23 +0800 Subject: [PATCH 116/285] =?UTF-8?q?=E7=89=88=E6=9C=AC=E5=BA=93=E9=87=8C?= =?UTF-8?q?=E9=9D=A2=E9=A1=B5=E9=9D=A2=E9=AA=8C=E8=AF=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/repositories/revisions.html.erb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/views/repositories/revisions.html.erb b/app/views/repositories/revisions.html.erb index 184674637..b1b69d624 100644 --- a/app/views/repositories/revisions.html.erb +++ b/app/views/repositories/revisions.html.erb @@ -1,7 +1,8 @@

    <%= l(:label_repository_plural) %>

    -
    +
    +

    <%= l(:label_revision_plural) %>

    <%= form_tag( {:controller => 'repositories', :action => 'revision', :id => @project, :repository_id => @repository.identifier_param}, @@ -12,7 +13,7 @@ <% end %>
    -

    <%= l(:label_revision_plural) %>

    + <%= render :partial => 'revisions', :locals => {:project => @project, From 3620cd99b62f07902075fbe54fbd3887464bc969 Mon Sep 17 00:00:00 2001 From: lizanle <491823689@qq.com> Date: Fri, 17 Apr 2015 12:00:47 +0800 Subject: [PATCH 117/285] =?UTF-8?q?=E5=8E=BB=E6=8E=89=E9=94=99=E8=AF=AF?= =?UTF-8?q?=E7=9A=84=E7=AC=A6=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/projects_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 51c209e9d..5e67e0a2c 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -337,7 +337,7 @@ class ProjectsController < ApplicationController end end if params[:repository] == "pswd_is_null" - html << l(:label_password_not_null)<< ";" + html << l(:label_password_not_null) end flash[:error] = html if !html.to_s.blank? end From 3bba1f93b484f70b422aee55ad19b85c6fd43e2e Mon Sep 17 00:00:00 2001 From: lizanle <491823689@qq.com> Date: Fri, 17 Apr 2015 12:01:31 +0800 Subject: [PATCH 118/285] =?UTF-8?q?=E7=89=88=E6=9C=AC=E5=BA=93=E5=90=8D?= =?UTF-8?q?=E8=BE=93=E5=85=A5=E6=9D=A1=E4=BB=B6=E6=8F=8F=E8=BF=B0=E5=8E=BB?= =?UTF-8?q?=E6=8E=89=E6=8D=A2=E8=A1=8C=E7=AC=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/locales/projects/zh.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/locales/projects/zh.yml b/config/locales/projects/zh.yml index bd09f2538..3c4d4a97c 100644 --- a/config/locales/projects/zh.yml +++ b/config/locales/projects/zh.yml @@ -352,7 +352,7 @@ zh: field_enterprise_name: 组织名称 label_organization_choose: --请选择组织-- text_length_between: "长度必须在 %{min} 到 %{max} 个字符之间。" - text_project_identifier_info: "小写字母(a-z)、数字、破折号(-)和下划线(_)可以使用。
    一旦保存,标识无法修改。" + text_project_identifier_info: "小写字母(a-z)、数字、破折号(-)和下划线(_)可以使用。一旦保存,标识无法修改。" field_is_public: 公开 field_hidden_repo: 隐藏代码库 From 5e8848f962a395cd84e5ed93a77a61bb6e00a59c Mon Sep 17 00:00:00 2001 From: lizanle <491823689@qq.com> Date: Fri, 17 Apr 2015 12:44:27 +0800 Subject: [PATCH 119/285] =?UTF-8?q?=E5=9B=BD=E9=99=85=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../settings/_new_repositories.html.erb | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/app/views/projects/settings/_new_repositories.html.erb b/app/views/projects/settings/_new_repositories.html.erb index aa188bd69..a5f476079 100644 --- a/app/views/projects/settings/_new_repositories.html.erb +++ b/app/views/projects/settings/_new_repositories.html.erb @@ -4,7 +4,7 @@ $("#pro_st_edit_ku").toggle(); } -<%= error_messages_for 'repository' %> +<%= str = error_messages_for 'repository' %> <% project_path_cut = RepositoriesHelper::PROJECT_PATH_CUT %> <% ip = RepositoriesHelper::REPO_IP_ADDRESS %> <% if @project.repositories.any? %> @@ -64,7 +64,7 @@
    • - + <%= select_tag('repository_scm', options_for_select(["Git"],@repository.class.name.demodulize), :data => {:remote => true, :method => 'get'})%> @@ -73,25 +73,24 @@ <% end %>
    • - + <%= f.check_box :is_default, :label => "" %>

    • - + <%= f.text_field :identifier, :disabled =>@repository.nil? || @repository.identifier_frozen? ? true:false,:label=>""%> <% unless @repository.identifier_frozen? %> - 长度必须在 1 到 254 个字符之间。 仅小写字母(a-z)、数字、破折号(-)和下划线(_)可以使用。 -一旦保存,标识无法修改。 + <%=l(:text_length_between,:min=>1,:max=>254)< <% end %>
    • - + <%= f.password_field :upassword, :label=> "" %> - 该密码在项目组内可共享 + <%= l(:label_upassword_info)%>
    - 保存 - 取消 + <%=l(:button_save)%> + <%=l(:button_cancel)%>
    <% end %> \ No newline at end of file From f8951c004468248f25e713778ce388228b5b21d4 Mon Sep 17 00:00:00 2001 From: lizanle <491823689@qq.com> Date: Fri, 17 Apr 2015 12:55:07 +0800 Subject: [PATCH 120/285] =?UTF-8?q?=E5=9B=BD=E9=99=85=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/projects/settings/_new_versions.html.erb | 14 +++++++------- app/views/versions/_form.html.erb | 12 ++++++------ app/views/versions/edit.html.erb | 2 +- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/app/views/projects/settings/_new_versions.html.erb b/app/views/projects/settings/_new_versions.html.erb index 6365354c3..ffc301cf5 100644 --- a/app/views/projects/settings/_new_versions.html.erb +++ b/app/views/projects/settings/_new_versions.html.erb @@ -57,32 +57,32 @@
    • - + <%= f.text_field :name, :maxlength => 60, :required => true %>
    • - + <%= f.text_field :description, :maxlength => 60 %>
    • - + <%= f.select :status, Version::VERSION_STATUSES.collect {|s| [l("version_status_#{s}"), s]} %>
    • - + <%= f.text_field :wiki_page_title, :size =>60, :label => :label_wiki_page, :disabled => @project.wiki.nil? %>
    • - + <%= f.text_field :effective_date, :size => 10, :readonly => true,:class=>" fl" %> <%= calendar_for('version_effective_date') %>
    • - + <%= f.select :sharing, @project.versions.build.allowed_sharings.collect {|v| [format_version_sharing(v), v]} %>
    • - 保存 + <%=l(:button_save)%>
    diff --git a/app/views/versions/_form.html.erb b/app/views/versions/_form.html.erb index d9a02b8f1..f0ed7c84f 100644 --- a/app/views/versions/_form.html.erb +++ b/app/views/versions/_form.html.erb @@ -3,29 +3,29 @@
    • - + <%= f.text_field :name, :maxlength => 60,:class=>" w280", :label => ""%>
    • - + <%= f.text_field :description, :maxlength => 60,:class=>" w280", :label => "" %>
    • - + <%= f.select :status, Version::VERSION_STATUSES.collect {|s| [l("version_status_#{s}"), s]}, :label => "" %>
    • - + <%= f.text_field :wiki_page_title, :size =>60, :label => "", :disabled => @project.wiki.nil? %>
    • - + <%= f.text_field :effective_date, :size => 10, :readonly => true,:class=>"fl" ,:style=>"margin-left:7px;",:label=>""%> <%= calendar_for('version_effective_date') %>
    • - + <%= f.select :sharing, @version.allowed_sharings.collect {|v| [format_version_sharing(v), v]},:label=>"" %>
    diff --git a/app/views/versions/edit.html.erb b/app/views/versions/edit.html.erb index c249572aa..7f6fe3658 100644 --- a/app/views/versions/edit.html.erb +++ b/app/views/versions/edit.html.erb @@ -2,6 +2,6 @@ <%= labelled_form_for @version,:html=>{:id=>"new_project_version_form"} do |f| %> <%= render :partial => 'form', :locals => { :f => f } %> - 保存 + <%=l(:button_save)%> <% end %> From fc8dacbd5f0141af39d9d2d3863b8e3c85cea719 Mon Sep 17 00:00:00 2001 From: huang Date: Fri, 17 Apr 2015 12:56:54 +0800 Subject: [PATCH 121/285] =?UTF-8?q?=E5=BC=95=E5=85=A5=E8=B5=84=E6=BA=90?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E7=95=8C=E9=9D=A2=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/files_helper.rb | 2 +- app/views/files/_show_quote_resource_project.html.erb | 6 ++---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/app/helpers/files_helper.rb b/app/helpers/files_helper.rb index d57cd68eb..04363653f 100644 --- a/app/helpers/files_helper.rb +++ b/app/helpers/files_helper.rb @@ -61,7 +61,7 @@ module FilesHelper s = '' projects.each do |project| if !project_contains_attachment?(project,attachment) && User.current.allowed_to?(:manage_files, project) - s << "" + s << "
    " end end s.html_safe diff --git a/app/views/files/_show_quote_resource_project.html.erb b/app/views/files/_show_quote_resource_project.html.erb index 7df1dc2f3..9ea9126fb 100644 --- a/app/views/files/_show_quote_resource_project.html.erb +++ b/app/views/files/_show_quote_resource_project.html.erb @@ -1,6 +1,6 @@
    -

    将此课件引入我的资源库

    +

    将此文件件引入我的资源库

    <% if error == '403' %>
    您没有权限引用此资源
    @@ -13,13 +13,11 @@ remote: true, id: "relation_file_form" do %> <%= hidden_field_tag(:file_id, file.id) %> - <%= content_tag('div', projects_check_box_tags('projects[project][]', User.current.projects,project,file), :id => 'projects')%> + <%= content_tag('div', projects_check_box_tags('projects[project][]', User.current.projects,project,file), :id => 'projects', :class => "hidden")%> 引  用取  消 <% end -%>
    <% end %> - -
    From 14a0d885f0afbb2e60f7d3ac70524751bb1f94ee Mon Sep 17 00:00:00 2001 From: huang Date: Fri, 17 Apr 2015 13:49:40 +0800 Subject: [PATCH 122/285] settings --- .../projects/settings/_new_members.html.erb | 164 +++++++++--------- 1 file changed, 82 insertions(+), 82 deletions(-) diff --git a/app/views/projects/settings/_new_members.html.erb b/app/views/projects/settings/_new_members.html.erb index 3356a351a..22fb70292 100644 --- a/app/views/projects/settings/_new_members.html.erb +++ b/app/views/projects/settings/_new_members.html.erb @@ -11,113 +11,113 @@
    <% if members.any? %> -
      +
      • <%= l(:label_user) %><%= l(:label_role_plural) %>
      • <%= call_hook(:view_projects_settings_members_table_header, :project => @project) %> <% members.each do |member| %>
      • - <%= link_to_user_header member.principal,false,:class => "w90 c_orange fl" %> - + <%= link_to_user_header member.principal,false,:class => "w90 c_orange fl" %> + <%= h member.roles.sort.collect(&:to_s).join(', ') %> - <%= form_for(member, {:as => :membership, :remote => true, :url => membership_path(member), - :method => :put, - :html => {:id => "member-#{member.id}-roles-form", :class => 'hol'}} - ) do |f| %> + <%= form_for(member, {:as => :membership, :remote => true, :url => membership_path(member), + :method => :put, + :html => {:id => "member-#{member.id}-roles-form", :class => 'hol'}} + ) do |f| %> <% roles.each do |role| %> -
          +
            <%= check_box_tag 'membership[role_ids][]', role.id, member.roles.include?(role), :disabled => member.member_roles.detect { |mr| mr.role_id == role.id && !mr.inherited_from.nil? } %>
          <% end %> - <%= hidden_field_tag 'membership[role_ids][]', '' %> - + <%= hidden_field_tag 'membership[role_ids][]', '' %> + <% end %> - <% unless member.user_id == @project.user_id %> - 编辑 - <%= delete_link membership_path(member), - :remote => true, - :class => "c_dblue ml30 fl", - :data => (!User.current.admin? && member.include?(User.current) ? {:confirm => l(:text_own_membership_for_project_confirmation)} : {confirm: l(:label_delete_confirm)}) if member.deletable? %> - <% end%> - + <% unless member.user_id == @project.user_id %> + 编辑 + <%= delete_link membership_path(member), + :remote => true, + :class => "c_dblue ml30 fl", + :data => (!User.current.admin? && member.include?(User.current) ? {:confirm => l(:text_own_membership_for_project_confirmation)} : {confirm: l(:label_delete_confirm)}) if member.deletable? %> + <% end%> + <% end%> -
        +
      <% else %> -

      <%= l(:label_no_data) %>

      +

      <%= l(:label_no_data) %>

      <% end %>
    <% if roles.any? %> -
    - - <% if @project.applied_projects.any? %> -
    -

    <%= l(:label_apply_project) %>

    - <%= form_for(@applied_members, {:as => :membership, :url => project_memberships_path(@project), :remote => true, :method => :post}) do |f| %> -
    - <%= render_principals_for_applied_members_new(@project) %> -
    -
      -
    • <%= l(:label_role_plural) %>:
    • - <% roles.each do |role| %> -
    • +
      + + <% if @project.applied_projects.any? %> +
      +

      <%= l(:label_apply_project) %>

      + <%= form_for(@applied_members, {:as => :membership, :url => project_memberships_path(@project), :remote => true, :method => :post}) do |f| %> +
      + <%= render_principals_for_applied_members_new(@project) %> +
      +
        +
      • <%= l(:label_role_plural) %>:
      • + <% roles.each do |role| %> +
      • <%= check_box_tag 'membership[role_ids][]', role.id %> -
      • - <% end %> -
      - - <%= l(:label_approve) %> - - - <%= l(:label_refusal) %> - - <% end %> -
      -
      - <% end %> -
      - -

      <%= l(:label_member_new) %>

      - <%= form_for(@member, {:as => :membership, :url => project_memberships_path(@project), :remote => true, :method => :post}) do |f| %> -
    • + <% end %> +
    + + <%= l(:label_approve) %> + + + <%= l(:label_refusal) %> + + <% end %> +
    +
    + <% end %> +
    + +

    <%= l(:label_member_new) %>

    + <%= form_for(@member, {:as => :membership, :url => project_memberships_path(@project), :remote => true, :method => :post}) do |f| %> + - <% end%> -
    + <% roles.each do |role| %> +
  • + <%= check_box_tag 'membership[role_ids][]', role.id %> + +
  • + <% end %> + +
    + + 新增成员 + +
    + <% end%> +
    <% end %>

    <%= l(:label_issue_tracking) %>

    -
    <% unless @project.enabled_modules.where("name = 'issue_tracking'").empty? %> - - <%= link_to l(:label_query), '#', - :onclick => '$("#custom_query").slideToggle(400); ' if true || User.current.logged? %> - + <%= form_tag({:controller => 'issues', :action => 'index', :project_id => @project}, :method => :get,:id=>"issue_query_form", :class => 'query_form') do %> + <%= hidden_field_tag 'set_filter', '1' %> + + +
    + <%= select( :issue,:user_id, @project.members.order("lower(users.login)").map{|c| [c.name, c.user_id]}.unshift(["指派给",0]), + { :include_blank => false,:selected=>0 + }, + {:onchange=>"remote_function();",:id=>"assigned_to_id",:name=>"v[assigned_to_id]",:class=>"w90"} + ) + %> + <%= select( :issue,:prior, [["低",1],["正常",2],["高",3],["紧急",4],["立刻",5]].unshift(["优先级",0]), + { :include_blank => false,:selected=>0 + }, + {:onchange=>"remote_function();",:id=>"priority_id",:name=>"v[priority_id]",:class=>"w90"} + ) + %> + <%= select( :issue,:status, [["新增",1],["正在解决",2],["已解决",3],["反馈",4],["关闭",5],["拒绝",6]].unshift(["状态",0]), + { :include_blank => false,:selected=>0 + }, + {:onchange=>"remote_function();",:id=>"status_id",:name=>"v[status_id]",:class=>"w90"} + ) + %> + <%= select( :issue,:user_id, @project.members.order("lower(users.login)").map{|c| [c.name, c.user_id]}.unshift(["作者",0]), + { :include_blank => false,:selected=>0 + }, + {:onchange=>"remote_function();",:id=>"author_id",:name=>"v[author_id]",:class=>"w90"} + ) + %> +
    +
    + <% end %> +

    <%= l(:label_issues_sum) %>: + <%= @project.issues.count %> <%= l(:lable_issues_undo) %> + <%= @project.issues.where('status_id in (1,2,4,6)').count %> +

    + +
    <% end %> - <%= l(:label_issues_sum) %>:<%= @project.issues.count %> <%= l(:lable_issues_undo) %>:<%= @project.issues.where('status_id in (1,2,4,6)').count %>
    <% if !@query.new_record? && @query.editable_by?(User.current) %> @@ -20,49 +76,6 @@ <% html_title(@query.new_record? ? l(:label_issue_plural) : @query.name) %>
    - <%= form_tag({:controller => 'issues', :action => 'index', :project_id => @project}, :method => :get, :id => 'query_form', :class => 'query_form') do %> - <%= hidden_field_tag 'set_filter', '1' %> -
    - ---<%= l :label_query_new %>--- -
    -
    "> - - <%= l(:label_issue_query_condition) %> - -
    "> - <%= render :partial => 'queries/filters', :locals => {:query => @query} %> -
    -
    - -
    - <%= link_to_function l(:label_issue_query), 'submit_query_form("query_form")', :class => 'icon icon-checked' %> - <%= link_to l(:label_issue_cancel_query), {:set_filter => 1, :project_id => @project}, :class => 'icon icon-reload' %> -
    -
    -
    - <% end %>
    <%= error_messages_for 'query' %> @@ -73,10 +86,10 @@ <%= l(:label_no_data) %>

    <% else %> - <%= render :partial => 'issues/list', :locals => {:issues => @issues, :query => @query} %> -
      - <%= pagination_links_full @issue_pages, @issue_count, :per_page_links => false, :remote => false, :flag => true %> -
    +
    + <%= render :partial => 'issues/list', :locals => {:issues => @issues, :query => @query,:issue_pages=>@issue_pages,:issue_count=>@issue_count} %> +
    + <% end %> diff --git a/app/views/issues/index.js.erb b/app/views/issues/index.js.erb new file mode 100644 index 000000000..34d2eb760 --- /dev/null +++ b/app/views/issues/index.js.erb @@ -0,0 +1 @@ +$("#issue_list").html("<%= escape_javascript(render :partial => 'issues/list',:locals => {:issues => @issues, :query => @query,:issue_pages=>@issue_pages,:issue_count=>@issue_count})%>"); \ No newline at end of file From 457b86a861743830373f602d8705f794796cd874 Mon Sep 17 00:00:00 2001 From: lizanle <491823689@qq.com> Date: Tue, 21 Apr 2015 10:14:46 +0800 Subject: [PATCH 145/285] =?UTF-8?q?=E7=89=88=E6=9C=AC=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/projects/settings/_new_versions.html.erb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/views/projects/settings/_new_versions.html.erb b/app/views/projects/settings/_new_versions.html.erb index 326b56f1d..e52984d15 100644 --- a/app/views/projects/settings/_new_versions.html.erb +++ b/app/views/projects/settings/_new_versions.html.erb @@ -22,15 +22,15 @@
    - + - diff --git a/app/views/versions/index.html.erb b/app/views/versions/index.html.erb index cccc53726..0b71fa5e2 100644 --- a/app/views/versions/index.html.erb +++ b/app/views/versions/index.html.erb @@ -1,10 +1,6 @@

    <%= l(:label_roadmap) %>

    -
    - <%= link_to l(:label_version_new), new_project_version_path(@project), :class => 'orange_u_btn fl' if User.current.allowed_to?(:manage_versions, @project) %> -
    -

    From ab93d19b5644d5581b68745eef7f23b5b48bbf2a Mon Sep 17 00:00:00 2001 From: whimlex Date: Tue, 21 Apr 2015 16:17:51 +0800 Subject: [PATCH 153/285] =?UTF-8?q?=E5=8A=A8=E6=80=81=E4=B8=AD=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E6=9B=B4=E6=96=B0=E9=A1=B9=E7=9B=AE=E7=BC=BA=E9=99=B7?= =?UTF-8?q?=E6=A0=B7=E5=BC=8F=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/users/show.html.erb | 839 +++++++++++++++++----------------- config/locales/users/zh.yml | 2 +- 2 files changed, 421 insertions(+), 420 deletions(-) diff --git a/app/views/users/show.html.erb b/app/views/users/show.html.erb index 055a00a82..44318c389 100644 --- a/app/views/users/show.html.erb +++ b/app/views/users/show.html.erb @@ -45,546 +45,547 @@ <% (Rails.logger.error "[Error] =========================================================> NameError: uninitialized constant " + e.act_type.to_s; next;) if e.act_type.safe_constantize.nil? %> <% act = e.act %> <% unless act.nil? %> - <% if e.act_type == 'JournalsForMessage' || e.act_type == 'Bid' || e.act_type == 'Journal'|| e.act_type == 'Changeset' || e.act_type == 'Message' || e.act_type == 'Principal' || e.act_type == 'News' || e.act_type == 'Issue' || e.act_type == 'Contest'%> + <% if e.act_type == 'JournalsForMessage' || e.act_type == 'Bid' || e.act_type == 'Journal'|| e.act_type == 'Changeset' || e.act_type == 'Message' || e.act_type == 'Principal' || e.act_type == 'News' || e.act_type == 'Issue' || e.act_type == 'Contest' %> -
    <%= image_tag(url_to_avatar(@project), :class => 'avatar2') %> - +
    <%= @project.name %>
    <%= @project.name %>
    - +
    <%= l(:label_projects_score) %>
    <%= l(:label_projects_score) %>
    <%= format("%.2f" , project_scores(@project) ).to_i %>
    <%= 'shared' if version.project != @project %> <%= link_to_version version %> <%= format_date(version.effective_date) %><%= format_date(version.effective_date) %> <%=h version.description %> <%= l("version_status_#{version.status}") %> + <%= link_to_if_authorized(h(truncate(version.wiki_page_title,:length=>20)), {:controller => 'wiki', :action => 'show', :project_id => version.project, - :id => Wiki.titleize(version.wiki_page_title)}) || h(version.wiki_page_title) unless version.wiki_page_title.blank? || version.project.wiki.nil? %> + :id => Wiki.titleize(version.wiki_page_title)},:class=>"c_blue02") || h(version.wiki_page_title) unless version.wiki_page_title.blank? || version.project.wiki.nil? %> <% if version.project == @project && User.current.allowed_to?(:manage_versions, @project) %> From dd25cdc065519aff0ff55e0061df8516c7f167c3 Mon Sep 17 00:00:00 2001 From: huang Date: Tue, 21 Apr 2015 14:19:50 +0800 Subject: [PATCH 146/285] =?UTF-8?q?1=E3=80=81=E4=BF=AE=E6=94=B9=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E4=B8=89=E7=A7=8D=E7=B1=BB=E5=9E=8B=E6=9C=AF=E8=AF=AD?= =?UTF-8?q?=202=E3=80=81=E6=9C=AA=E7=99=BB=E5=BD=95=E6=83=85=E5=86=B5?= =?UTF-8?q?=E4=B8=8B=E7=BC=BA=E9=99=B7=E6=8F=90=E4=BA=A4bug=203=E3=80=81wi?= =?UTF-8?q?dth=E6=9E=9C=E6=96=AD=E7=A9=BA=E7=99=BD=E5=A4=84=E7=82=B9?= =?UTF-8?q?=E5=87=BB=E8=BF=9B=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/issues/show.html.erb | 11 ++++++----- app/views/layouts/base_projects.html.erb | 6 +++--- config/locales/projects/zh.yml | 6 +++--- public/stylesheets/project.css | 2 +- 4 files changed, 13 insertions(+), 12 deletions(-) diff --git a/app/views/issues/show.html.erb b/app/views/issues/show.html.erb index d68e1fc7d..bed1e3d77 100644 --- a/app/views/issues/show.html.erb +++ b/app/views/issues/show.html.erb @@ -113,12 +113,13 @@
    <%= render :partial => 'edit' %>
    + +

    + + <%= l(:button_submit) %> + <% end %> - -

    - - <%= l(:button_submit) %> - + <%#= submit_tag l(:button_submit) %> <%#= preview_link preview_edit_issue_path(:project_id => @project, :id => @issue), 'issue-form' ,'preview',{:class => "blue_btn fr mr10"}%> diff --git a/app/views/layouts/base_projects.html.erb b/app/views/layouts/base_projects.html.erb index ca9f43d53..b825800e1 100644 --- a/app/views/layouts/base_projects.html.erb +++ b/app/views/layouts/base_projects.html.erb @@ -225,9 +225,9 @@

    请选择项目类型:

      -
    • id="development_group"/>
    • -
    • id="research_group"/>
    • -
    • id="friend_organization"/>
    • +
    • id="development_group"/>
    • +
    • id="research_group"/>
    • +
    • id="friend_organization"/>
    确定 diff --git a/config/locales/projects/zh.yml b/config/locales/projects/zh.yml index 3c4d4a97c..49fe0e19a 100644 --- a/config/locales/projects/zh.yml +++ b/config/locales/projects/zh.yml @@ -55,9 +55,9 @@ zh: label_apply_project_waiting: 已处理申请,请等待管理员审核 label_unapply_project: 取消申请 lable_sure_exit_project: 是否确认退出该项目 - label_friend_organization: 朋友圈 - label_research_group: 科研组 - label_development_team: 开发组 + label_friend_organization: 圈子模式 + label_research_group: 研讨模式 + label_development_team: 开发模式 label_member: 成员 project_module_attachments: 资源 diff --git a/public/stylesheets/project.css b/public/stylesheets/project.css index 75caa9c14..c2eb127c9 100644 --- a/public/stylesheets/project.css +++ b/public/stylesheets/project.css @@ -72,7 +72,7 @@ a:hover.problem_pic{border:1px solid #64bdd9;} a.problem_name{ color:#ff5722; } a:hover.problem_name{ color:#d33503;} a.problem_tit{ color:#0781b4; max-width:430px; font-weight:bold; display:block; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;} -a.problem_tit02{ color:#0781b4; font-weight:bold;width:400px; } +a.problem_tit02{ color:#0781b4; font-weight:bold;max-width:400px;} a:hover.problem_tit,a:hover.problem_tit02{ color:#09658c; } .problem_main{ border-bottom:1px dashed #d4d4d4; padding-bottom:10px; margin-bottom:10px;} a.pro_mes{ float:left; color:#a0a0a0; display:block; width:100px; height:20px; } From b6f34045db23568ff2a9f8884bd05504f4145e05 Mon Sep 17 00:00:00 2001 From: huang Date: Tue, 21 Apr 2015 14:40:12 +0800 Subject: [PATCH 147/285] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=BC=BA=E9=99=B7?= =?UTF-8?q?=EF=BC=9A=E7=BC=BA=E9=99=B7=E4=B8=8A=E4=BC=A0=E9=99=84=E4=BB=B6?= =?UTF-8?q?=E5=90=8E=EF=BC=8C=E7=AC=AC=E4=B8=80=E6=9D=A1=E5=9B=9E=E5=A4=8D?= =?UTF-8?q?=E4=B8=AD=E4=BC=9A=E6=98=BE=E7=A4=BA=E9=99=84=E4=BB=B6=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/issues_helper.rb | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/app/helpers/issues_helper.rb b/app/helpers/issues_helper.rb index 9c4fab9de..b72a191db 100644 --- a/app/helpers/issues_helper.rb +++ b/app/helpers/issues_helper.rb @@ -340,17 +340,18 @@ module IssuesHelper if detail.property == 'attachment' && !value.blank? && atta = Attachment.find_by_id(detail.prop_key) # Link to the attachment if it has not been removed if options[:token].nil? - value = link_to_attachment(atta, :download => true, :only_path => options[:only_path], :class=> "info_foot_num c_blue") + value = atta.filename else - value = link_to_attachment(atta, :download => true, :only_path => options[:only_path], :token => options[:token], :class=> "info_foot_num c_blue") - end - if options[:only_path] != false && atta.is_text? - value += link_to( - image_tag('magnifier.png'), - :controller => 'attachments', :action => 'show', - :id => atta, :filename => atta.filename - ) + value = atta.filename end + # 放大镜搜索功能 + # if options[:only_path] != false && atta.is_text? + # value += link_to( + # image_tag('magnifier.png'), + # :controller => 'attachments', :action => 'show', + # :id => atta, :filename => atta.filename + # ) + # end else value = content_tag("i", h(value)) if value end From 2521e802bff21350a8fba6e675b8d3867b7b6f06 Mon Sep 17 00:00:00 2001 From: huang Date: Tue, 21 Apr 2015 14:48:49 +0800 Subject: [PATCH 148/285] =?UTF-8?q?=E7=BC=BA=E9=99=B7=E7=BB=9F=E8=AE=A1?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=86=92=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/issues/index.html.erb | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/app/views/issues/index.html.erb b/app/views/issues/index.html.erb index f20ce9b12..ac5a46bfe 100644 --- a/app/views/issues/index.html.erb +++ b/app/views/issues/index.html.erb @@ -59,9 +59,8 @@
    <% end %> -

    <%= l(:label_issues_sum) %>: - <%= @project.issues.count %> <%= l(:lable_issues_undo) %> - <%= @project.issues.where('status_id in (1,2,4,6)').count %> +

    <%= l(:label_issues_sum) %>:<%= @project.issues.count %> + <%= l(:lable_issues_undo) %>:<%= @project.issues.where('status_id in (1,2,4,6)').count %>

    From c510f14edb7e25b41963e3765c8ee07f77802528 Mon Sep 17 00:00:00 2001 From: huang Date: Tue, 21 Apr 2015 15:10:05 +0800 Subject: [PATCH 149/285] =?UTF-8?q?=E6=B5=81=E7=A8=8B=E7=A2=91=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E6=96=B0=E5=BB=BA=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/versions/index.html.erb | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/app/views/versions/index.html.erb b/app/views/versions/index.html.erb index be4fb27ef..cccc53726 100644 --- a/app/views/versions/index.html.erb +++ b/app/views/versions/index.html.erb @@ -1,9 +1,10 @@

    <%= l(:label_roadmap) %>

    - - - +
    + <%= link_to l(:label_version_new), new_project_version_path(@project), :class => 'orange_u_btn fl' if User.current.allowed_to?(:manage_versions, @project) %> +
    +

    +
    -
    - <%= image_tag(url_to_avatar(e.user), :class => "avatar") %> - - - <% case e.act_type %> - <% when 'JournalsForMessage' %> - - + + + + <% else %> + <% end %> +
    - <% if User.current.login == e.user.try(:login) %> - - <%= link_to("#{l(:label_i)}", user_path(e.user_id)) %> - -   - <% if User.current.language == "zh" %> + <%= image_tag(url_to_avatar(e.user), :class => "avatar") %> + + + <% case e.act_type %> + <% when 'JournalsForMessage' %> + + - - - + + + - - - + + + - - <% when 'Bid' %> - - <% if act.reward_type == 3 && @show_course == 1%> - <% if e.user == User.current %> - + + <% when 'Bid' %> + + <% if act.reward_type == 3 && @show_course == 1 %> + <% if e.user == User.current %> + - <% else %> - + <% else %> + - <% end %> - <% else %> - <% if e.user == User.current %> - + <% end %> + <% else %> + <% if e.user == User.current %> + - <% else %> - + <% else %> + - <% end %> - <% end %> - - - - - - + <% end %> + <% end %> + + + + + + - - <% when 'Journal' %> - - <% if e.user == User.current %> - + + <% when 'Journal' %> + + <% if e.user == User.current %> + - <% else %> - + <% else %> + - <% end %> - - - <% if act.notes.nil? %> - <% desStr = '' %> - <% else %> - <% desStr= textAreailizable(act, :notes) %> - <% end %> - - - - + <% end %> + + + <% if act.notes.nil? %> + <% desStr = '' %> + <% else %> + <% desStr= textAreailizable(act, :notes) %> + <% end %> + + + + - - <% when 'Changeset' %> - - <% if e.user == User.current %> - + + <% when 'Changeset' %> + + <% if e.user == User.current %> + - <% else %> - + <% else %> + - <% end %> - - - - - - + <% end %> + + + + + + - - <% when 'Message' %> - - <% if e.user == User.current %> - + + <% when 'Message' %> + + <% if e.user == User.current %> + - <% else %> - + <% else %> + - <% end %> - - - - - - + <% end %> + + + + + + - - <% when 'Principal' %> - - <% if e.user == User.current %> - + + <% when 'Principal' %> + + <% if e.user == User.current %> + - <% else %> - + <% else %> + - <% end %> - - - - - - + <% end %> + + + + + + - - <% when 'News' %> - - <% if e.user == User.current %> - + + <% when 'News' %> + + <% if e.user == User.current %> + - <% else %> - + <% else %> + - <% end %> - - - - - - + <% end %> + + + + + + - - <% when 'Issue' %> - <% if e.user == User.current %> - + + <%= l(:label_comments_count, :count => e.act.comments_count) %> + + + + + <% when 'Issue' %> + <% if e.user == User.current %> + - - - - - - - + + + + + + - - <% else %> - + + <% else %> + - - - - - - + + + + + + - + + <%= l(:label_comments_count, :count => e.act.journals.count) %> + + + + - <% end %> + <% end %> - <% when 'Contest' %> - - <% if e.user == User.current && @show_contest == 1%> - + <% if e.user == User.current && @show_contest == 1 %> + - <% else %> - + <% else %> + - <% end %> - - - - - - + <% end %> + + + + + + - <% else %> - <% end %> -
    + <% if User.current.login == e.user.try(:login) %> + + <%= link_to("#{l(:label_i)}", user_path(e.user_id)) %> + +   + <% if User.current.language == "zh" %> <%= l(:label_i_have_feedback) %> - <%= link_to("#{e.act.user.name}", user_path(e.act.user.id)) %> - <%= l(:label_of_feedback) + l(:label_layouts_feedback) %> - - <% else %> + <%= link_to("#{e.act.user.name}", user_path(e.act.user.id)) %> + <%= l(:label_of_feedback) + l(:label_layouts_feedback) %> + + <% else %> <%= l(:label_i_have_feedback) %> - <%= l(:label_layouts_feedback) + l(:label_of_feedback) %> - <%= link_to("#{e.act.user.name}", user_path(e.act.user.id)) %> + <%= l(:label_layouts_feedback) + l(:label_of_feedback) %> + <%= link_to("#{e.act.user.name}", user_path(e.act.user.id)) %> - <% end %> - <% else %> - - <%= link_to("#{e.user.name}", user_path(e.user_id)) %> - - <% if User.current.language == "zh" %> + <% end %> + <% else %> + + <%= link_to("#{e.user.name}", user_path(e.user_id)) %> + + <% if User.current.language == "zh" %> <%= l(:label_have_feedback) %> - <%= link_to("#{e.act.user.name}", user_path(e.act.user.id)) %> - <%= l(:label_of_feedback) + l(:label_layouts_feedback) %> - - <% else %> + <%= link_to("#{e.act.user.name}", user_path(e.act.user.id)) %> + <%= l(:label_of_feedback) + l(:label_layouts_feedback) %> + + <% else %> <%= l(:label_have_feedback) %> - <%= l(:label_layouts_feedback) + l(:label_of_feedback) %> - <%= link_to("#{e.act.user.name}", user_path(e.act.user.id)) %> + <%= l(:label_layouts_feedback) + l(:label_of_feedback) %> + <%= link_to("#{e.act.user.name}", user_path(e.act.user.id)) %> - <% end %> - <% end %> -
    -

    - <%= textAreailizable act.notes %> -

    -
    + <% end %> + <% end %> +
    +

    + <%= textAreailizable act.notes %> +

    + +
    - <% puts 11111111111111%> + <% puts 11111111111111 %> <%= user_jour_feed_back_url e %> -
    -
    -
    +
    +
    +
    <%= (l(:label_update_time).to_s << ': ' << format_time(e.act.created_on)).to_s %> -
    -
    -
    - - <%= link_to("#{l(:label_i)}", user_path(e.user_id)) %> - + +
    +
    + + <%= link_to("#{l(:label_i)}", user_path(e.user_id)) %> + <%= l(:label_i_new_activity) %> - <%= link_to format_activity_title("#{l(:label_active_homework)}##{act.id}:#{act.name}"), course_for_bid_path(e.act_id) %> - - - <%= link_to(h(e.user), user_path(e.user_id)) %> -   + <%= link_to format_activity_title("#{l(:label_active_homework)}##{act.id}:#{act.name}"), course_for_bid_path(e.act_id) %> + + + <%= link_to(h(e.user), user_path(e.user_id)) %> +   <%= l(:label_new_activity) %>   - <%= link_to format_activity_title("#{l(:label_active_homework)}##{act.id}:#{act.name}"), course_for_bid_path(e.act_id) %> - - - <%= link_to("#{l(:label_i)}", user_path(e.user_id)) %> - + <%= link_to format_activity_title("#{l(:label_active_homework)}##{act.id}:#{act.name}"), course_for_bid_path(e.act_id) %> + + + <%= link_to("#{l(:label_i)}", user_path(e.user_id)) %> + <%= l(:label_i_new_activity) %> - <%= link_to format_activity_title("#{l(:label_active_call)}##{act.id}:#{act.name}"), respond_path(e.act_id) %> - - - <%= link_to(h(e.user), user_path(e.user_id)) %> -   + <%= link_to format_activity_title("#{l(:label_active_call)}##{act.id}:#{act.name}"), respond_path(e.act_id) %> + + + <%= link_to(h(e.user), user_path(e.user_id)) %> +   <%= l(:label_new_activity) %>   - <%= link_to format_activity_title("#{l(:label_active_call)}##{act.id}:#{act.name}"), respond_path(e.act_id) %> -
    -

    - <%=textAreailizable act, :description %> -

    -
    + <%= link_to format_activity_title("#{l(:label_active_call)}##{act.id}:#{act.name}"), respond_path(e.act_id) %> +
    +

    + <%= textAreailizable act, :description %> +

    +
    <%= (l(:label_update_time).to_s << ': ' << format_time(e.act.created_on)).to_s %> -
    - - - - - - - - -
    - - <%= link_to("#{l(:label_i)}", user_path(e.user_id)) %> - -   + + + + + + + + + +
    + + <%= link_to("#{l(:label_i)}", user_path(e.user_id)) %> + +   <%= l(:label_i_new_activity) %> -   - <%= link_to(l(:label_activity_project)+":"+act.issue.project.name, project_path(act.issue.project.id)) %> - <%= link_to format_activity_title("#{act.issue.tracker} ##{act.issue.id}: #{act.issue.subject}"), - {:controller => 'issues', :action => 'show', :id => act.issue.id, :anchor => "change-#{act.id}"} %> - - - <%= link_to(h(e.user), user_path(e.user_id)) %> - -   +   + <%= link_to(l(:label_activity_project)+":"+act.issue.project.name, project_path(act.issue.project.id)) %> + <%= link_to format_activity_title("#{act.issue.tracker} ##{act.issue.id}: #{act.issue.subject}"), + {:controller => 'issues', :action => 'show', :id => act.issue.id, :anchor => "change-#{act.id}"} %> + + + <%= link_to(h(e.user), user_path(e.user_id)) %> + +   <%= l(:label_new_activity) %> -   - <%= link_to(l(:label_activity_project)+":"+act.issue.project.name, project_path(act.issue.project.id)) %> - <%= link_to format_activity_title("#{act.issue.tracker} ##{act.issue.id}: #{act.issue.subject}"), - {:controller => 'issues', :action => 'show', :id => act.issue.id, :anchor => "change-#{act.id}"} %> -
    -

    - <%= desStr %> -

    -
    -
    +   + <%= link_to(l(:label_activity_project)+":"+act.issue.project.name, project_path(act.issue.project.id)) %> + <%= link_to format_activity_title("#{act.issue.tracker} ##{act.issue.id}: #{act.issue.subject}"), + {:controller => 'issues', :action => 'show', :id => act.issue.id, :anchor => "change-#{act.id}"} %> +
    +

    + <%= desStr %> +

    +
    +
    <%= (l(:label_update_time).to_s << ': ' << format_time(e.act.created_on)).to_s %> -
    -
    -
    - - <%= link_to("#{l(:label_i)}", user_path(e.user_id)) %> - -   + +
    +
    + + <%= link_to("#{l(:label_i)}", user_path(e.user_id)) %> + +   <%= l(:label_i_new_activity) %> -   - <%= link_to format_activity_title(act.title), - {:controller => 'repositories', - :action => 'revision', - :id => act.repository.project, - :repository_id => act.repository.identifier_param, - :rev => act.identifier} %> - - - <%= link_to(h(e.user), user_path(e.user_id)) %> - -   +   + <%= link_to format_activity_title(act.title), + {:controller => 'repositories', + :action => 'revision', + :id => act.repository.project, + :repository_id => act.repository.identifier_param, + :rev => act.identifier} %> + + + <%= link_to(h(e.user), user_path(e.user_id)) %> + +   <%= l(:label_new_activity) %> -   - <%= link_to format_activity_title(act.title), - {:controller => 'repositories', - :action => 'revision', - :id => act.repository.project, - :repository_id => act.repository.identifier_param, - :rev => act.identifier} %> -
    -

    - <%= textAreailizable act,:long_comments %> -

    -
    -
    +   + <%= link_to format_activity_title(act.title), + {:controller => 'repositories', + :action => 'revision', + :id => act.repository.project, + :repository_id => act.repository.identifier_param, + :rev => act.identifier} %> +
    +

    + <%= textAreailizable act, :long_comments %> +

    +
    +
    <%= format_time(e.act.committed_on) %> -
    -
    +
    +
    <%= link_to l(:label_find_all_comments), {:controller => 'repositories', :action => 'revision', :id => act.repository.project, :repository_id => act.repository.identifier_param, - :rev => act.identifier} if e.act.count!= 0%> + :rev => act.identifier} if e.act.count!= 0 %> - - <%= l(:label_comments_count, :count => e.act.count) %> - -
    -
    - - <%= link_to("#{l(:label_i)}", user_path(e.user_id)) %> - -   + + <%= l(:label_comments_count, :count => e.act.count) %> + + +
    + + <%= link_to("#{l(:label_i)}", user_path(e.user_id)) %> + +   <%= l(:label_i_new_activity) %> -   - <%= link_to format_activity_title("#{act.board.name}: #{act.subject}"), - {:controller => 'messages', - :action => 'show', - :board_id => act.board_id}.merge(act.parent_id.nil? ? {:id => act.id} : {:id => act.parent_id, :r => act.id, :anchor => "message-#{act.id}"}) %> - - - <%= link_to(h(e.user), user_path(e.user_id)) %> - -   +   + <%= link_to format_activity_title("#{act.board.name}: #{act.subject}"), + {:controller => 'messages', + :action => 'show', + :board_id => act.board_id}.merge(act.parent_id.nil? ? {:id => act.id} : {:id => act.parent_id, :r => act.id, :anchor => "message-#{act.id}"}) %> + + + <%= link_to(h(e.user), user_path(e.user_id)) %> + +   <%= l(:label_new_activity) %> -   - <%= link_to format_activity_title("#{act.board.name}: #{act.subject}"), - {:controller => 'messages', - :action => 'show', - :board_id => act.board_id}.merge(act.parent_id.nil? ? {:id => act.id} : {:id => act.parent_id, :r => act.id, :anchor => "message-#{act.id}"}) %> -
    -

    - <%= textAreailizable(act,:content) %> -

    -
    -
    +   + <%= link_to format_activity_title("#{act.board.name}: #{act.subject}"), + {:controller => 'messages', + :action => 'show', + :board_id => act.board_id}.merge(act.parent_id.nil? ? {:id => act.id} : {:id => act.parent_id, :r => act.id, :anchor => "message-#{act.id}"}) %> +
    +

    + <%= textAreailizable(act, :content) %> +

    +
    +
    <%= (l(:label_update_time).to_s << ': ' << format_time(e.act.created_on)).to_s %> -
    -
    -
    - - <%= link_to("#{l(:label_i)}", user_path(e.user_id)) %> - -   + +
    +
    + + <%= link_to("#{l(:label_i)}", user_path(e.user_id)) %> + +   <%= l(:label_new_user) %> - - - <%= link_to(h(e.user), user_path(e.user_id)) %> - -   + + + <%= link_to(h(e.user), user_path(e.user_id)) %> + +   <%= l(:label_new_user) %> -
    -

    -
    -
    +
    +

    +
    +
    <%= (l(:label_update_time).to_s << ': ' << format_time(e.act.created_on)).to_s %> -
    -
    -
    - - <%= link_to("#{l(:label_i)}", user_path(e.user_id)) %> - -   + +
    +
    + + <%= link_to("#{l(:label_i)}", user_path(e.user_id)) %> + +   <%= l(:label_i_new_activity) %> -   - <%= link_to format_activity_title("#{l(:label_news)}: #{act.title}"), {:controller => 'news', :action => 'show', :id => act.id} %> - - - <%= link_to(h(e.user), user_path(e.user_id)) %> - -   +   + <%= link_to format_activity_title("#{l(:label_news)}: #{act.title}"), {:controller => 'news', :action => 'show', :id => act.id} %> + + + <%= link_to(h(e.user), user_path(e.user_id)) %> + +   <%= l(:label_new_activity) %> -   - <%= link_to format_activity_title("#{l(:label_news)}: #{act.title}"), {:controller => 'news', :action => 'show', :id => act.id} %> -
    -

    - <%= textAreailizable act,:description %> -

    -
    -
    +   + <%= link_to format_activity_title("#{l(:label_news)}: #{act.title}"), {:controller => 'news', :action => 'show', :id => act.id} %> +
    +

    + <%= textAreailizable act, :description %> +

    +
    +
    <%= (l(:label_update_time).to_s << ': ' << format_time(e.act.created_on)).to_s %> -
    -
    +
    +
    - <%= link_to l(:label_find_all_comments), {:controller => 'news', :action => 'show', :id => act.id} if e.act.comments_count!= 0%> + <%= link_to l(:label_find_all_comments), {:controller => 'news', :action => 'show', :id => act.id} if e.act.comments_count!= 0 %> - - <%= l(:label_comments_count, :count => e.act.comments_count) %> - -
    -
    - - <%= link_to("#{l(:label_i)}", user_path(e.user_id)) %> - -   + + + <%= link_to("#{l(:label_i)}", user_path(e.user_id)) %> + +   <%= l(:label_i_new_activity) %>   - <%= link_to format_activity_title("#{act.source_from} (#{act.status}): #{act.tracker.name} #{act.subject}"), - {:controller => 'issues', - :action => 'show', - :id => act.id} %> -
    - <%= textAreailizable act, :description %> -
    -
    + <%= link_to format_activity_title("#{act.source_from} (#{act.status}): #{act.tracker.name} #{act.subject}"), + {:controller => 'issues', + :action => 'show', + :id => act.id} %> +
    + <%= textAreailizable act, :description %> +
    +
    <%= (l(:label_update_time).to_s << ': ' << format_time(e.act.created_on)).to_s %> -
    -
    +
    +
    <%= link_to l(:label_find_all_comments), {:controller => 'issues', :action => 'show', :id => act.id} if e.act.journals.count!= 0 %> - - <%= l(:label_comments_count, :count => e.act.journals.count) %> - -
    -
    - - <%= link_to(h(e.user), user_path(e.user_id)) %> -   + + <%= l(:label_comments_count, :count => e.act.journals.count) %> + + +
    + + <%= link_to(h(e.user), user_path(e.user_id)) %> +   <%= l(:label_new_activity) %>   - <%= link_to format_activity_title("#{act.source_from} (#{act.status}): #{act.tracker.name} #{act.subject}"), - {:controller => 'issues', - :action => 'show', - :id => act.id} %> -
    - <%= textAreailizable act, :description %> -
    -
    + <%= link_to format_activity_title("#{act.source_from} (#{act.status}): #{act.tracker.name} #{act.subject}"), + {:controller => 'issues', + :action => 'show', + :id => act.id} %> +
    + <%= textAreailizable act, :description %> +
    +
    <%= (l(:label_update_time).to_s << ': ' << format_time(e.act.created_on)).to_s %> -
    -
    +
    +
    <%= link_to l(:label_find_all_comments), {:controller => 'issues', :action => 'show', :id => act.id} if e.act.journals.count!= 0 %> - - <%= l(:label_comments_count, :count => e.act.journals.count) %> - -
    -
    - - <%= link_to("#{l(:label_i)}", user_path(e.user_id)) %> - -   + <% when 'Contest' %> +
    + + <%= link_to("#{l(:label_i)}", user_path(e.user_id)) %> + +   <%= l(:label_i_new_activity) %> -   - <%= link_to format_activity_title("#{l(:label_contest)}: #{act.name}"), {:controller => 'contests', :action => 'show_contest', :id => act.id} %> - - - <%= link_to(h(e.user), user_path(e.user_id)) %> - -   +   + <%= link_to format_activity_title("#{l(:label_contest)}: #{act.name}"), {:controller => 'contests', :action => 'show_contest', :id => act.id} %> + + + <%= link_to(h(e.user), user_path(e.user_id)) %> + +   <%= l(:label_new_activity) %> -   - <%= link_to format_activity_title("#{l(:label_contest)}: #{act.name}"), {:controller => 'contests', :action => 'show_contest', :id => act.id} %> -
    -

    - <%= textAreailizable act, :description %> -

    -
    -
    +   + <%= link_to format_activity_title("#{l(:label_contest)}: #{act.name}"), {:controller => 'contests', :action => 'show_contest', :id => act.id} %> +
    +

    + <%= textAreailizable act, :description %> +

    +
    +
    <%= (l(:label_update_time).to_s << ': ' << format_time(e.act.created_on)).to_s %> -
    -
    -
    +
    - <% end %> - <% end %> - <% end %> + <% end %> + <% end %> + <% end %>
    123
    + <%= render :partial => 'layouts/new_feedback' %> From 0d26f64afdc58ffaf2889083dcb96fb813b06509 Mon Sep 17 00:00:00 2001 From: whimlex Date: Tue, 21 Apr 2015 16:49:13 +0800 Subject: [PATCH 155/285] =?UTF-8?q?=E6=90=9C=E7=B4=A2=E8=AF=BE=E7=A8=8B?= =?UTF-8?q?=E2=80=94=E2=80=94=E6=8E=88=E8=AF=BE=E6=97=B6=E9=97=B4=E2=80=9D?= =?UTF-8?q?=E4=B8=8E=E2=80=9C=E8=AF=BE=E7=A8=8B=E7=AE=80=E4=BB=8B=E2=80=9D?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/courses/_course.html.erb | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/app/views/courses/_course.html.erb b/app/views/courses/_course.html.erb index 8974c3089..0e1b5caa6 100644 --- a/app/views/courses/_course.html.erb +++ b/app/views/courses/_course.html.erb @@ -79,16 +79,6 @@
    -
    - <%= content_tag "span","#{l(:label_duration_time)}:", :class => "course-font"%> - <%= get_course_term @course %> -
    - -
    - <%= content_tag "span", "#{l(:label_course_brief_introduction)}:", :class => "course-font" %> - <%= content_tag "div", course.short_description, :class => "brief_introduction", :title => course.short_description %> -
    -
    <%= image_tag( "/images/sidebar/tags.png") %> From da7528c7803104fb53fdc18e2f3d0fcaccbe3b32 Mon Sep 17 00:00:00 2001 From: lizanle <491823689@qq.com> Date: Tue, 21 Apr 2015 17:10:07 +0800 Subject: [PATCH 156/285] =?UTF-8?q?=E9=87=8D=E5=AE=9A=E5=90=91=E5=88=B0?= =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E9=85=8D=E7=BD=AE=E9=87=8C=E7=9A=84=E6=96=B0?= =?UTF-8?q?=E5=BB=BA=E7=89=88=E6=9C=AC=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/versions_controller.rb | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/app/controllers/versions_controller.rb b/app/controllers/versions_controller.rb index fe7bcf0be..defc36868 100644 --- a/app/controllers/versions_controller.rb +++ b/app/controllers/versions_controller.rb @@ -85,13 +85,14 @@ class VersionsController < ApplicationController end def new - @version = @project.versions.build - @version.safe_attributes = params[:version] - - respond_to do |format| - format.html - format.js - end + # @version = @project.versions.build + # @version.safe_attributes = params[:version] + # + # respond_to do |format| + # format.html + # format.js + # end + redirect_to settings_project_url(@project, :tab => 'versions') end def create From d6527f1f7e7e0db0fd2fbfc421a60b7323a03650 Mon Sep 17 00:00:00 2001 From: lizanle <491823689@qq.com> Date: Tue, 21 Apr 2015 17:54:49 +0800 Subject: [PATCH 157/285] =?UTF-8?q?=E5=8E=BB=E6=8E=89=E5=AD=A6=E7=94=9F?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E5=88=86=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/courses_controller.rb | 13 ++++++++----- app/views/courses/_new_member_list.html.erb | 6 +++--- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index c0e99d546..191606afb 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -191,8 +191,9 @@ class CoursesController < ApplicationController results = searchmember_by_name(student_homework_score(@group.id,0,0,"desc"), q) end @is_remote = true - @result_count = results.count - @results = paginateHelper results, 10 + #@result_count = results.count + #@results = paginateHelper results, 10 + @results = results @search_name = q end @@ -315,13 +316,15 @@ class CoursesController < ApplicationController when '1' @subPage_title = l :label_teacher_list @all_members = searchTeacherAndAssistant(@course) - @members = paginateHelper @all_members, 10 + #@members = paginateHelper @all_members, 10 + @members = @all_members when '2' @subPage_title = l :label_student_list page = params[:page].nil? ? 0 : (params['page'].to_i - 1) @all_members = student_homework_score(0,page, 10,"desc") # @all_members = @course.members - @members = paginateHelper_for_members @all_members, 10 + # @members = paginateHelper_for_members @all_members, 10 + @members = @all_members end respond_to do |format| if params[:page] @@ -877,7 +880,7 @@ class CoursesController < ApplicationController students_for_courses.course_id = #{@course.id} and members.user_id = students_for_courses.student_id AND members.user_id NOT IN (SELECT homework_attaches.user_id FROM homework_attaches WHERE homework_attaches.bid_id in (SELECT bid_id FROM homework_for_courses WHERE course_id = #{@course.id} ) ) - GROUP BY members.user_id ORDER BY score #{score_sort_by} limit #{start_from}, #{nums}" + GROUP BY members.user_id ORDER BY score #{score_sort_by} " #limit #{start_from}, #{nums}" end else diff --git a/app/views/courses/_new_member_list.html.erb b/app/views/courses/_new_member_list.html.erb index 30b77ee50..e8eebe00d 100644 --- a/app/views/courses/_new_member_list.html.erb +++ b/app/views/courses/_new_member_list.html.erb @@ -70,9 +70,9 @@ <% end; reset_cycle %>
    -
      - <%= pagination_links_full @obj_pages, @obj_count, :per_page_links => false, :remote => @is_remote, :flag => true%> -
    + <% else%>

    <%= l(:label_no_data) %> From b99f8d80566885d8e4c4ea664427cd7454fcff01 Mon Sep 17 00:00:00 2001 From: whimlex Date: Tue, 21 Apr 2015 17:56:01 +0800 Subject: [PATCH 158/285] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E5=A4=B4=E5=83=8F?= =?UTF-8?q?=EF=BC=8C=E4=B8=8A=E4=BC=A0=E8=AF=BE=E7=A8=8B=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?logo=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/avatar/_avatar_form.html.erb | 3 ++- app/views/avatar/_new_avatar_form.html.erb | 3 ++- public/stylesheets/application.css | 4 ++++ public/stylesheets/public.css | 2 ++ 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/app/views/avatar/_avatar_form.html.erb b/app/views/avatar/_avatar_form.html.erb index 6f9b9c7b1..fef9f7bdb 100644 --- a/app/views/avatar/_avatar_form.html.erb +++ b/app/views/avatar/_avatar_form.html.erb @@ -46,7 +46,8 @@ <%= link_to l(:button_delete_file),{:controller => :avatar,:action => :delete_image,:remote=>true,:source_type=> source.class,:source_id=>source.id},:confirm => l(:text_are_you_sure), :method => :post, :class => "btn_addPic", :style => "text-decoration:none;" %> <%= l(:button_upload_photo) %> - + + (个人头像建议90*90大小,课程和项目logo建议60*60大小,或者等比图像) <%= file_field_tag 'avatar[image]', diff --git a/app/views/avatar/_new_avatar_form.html.erb b/app/views/avatar/_new_avatar_form.html.erb index 8ca08c766..8b81ebf66 100644 --- a/app/views/avatar/_new_avatar_form.html.erb +++ b/app/views/avatar/_new_avatar_form.html.erb @@ -2,7 +2,8 @@ <%= image_tag(url_to_avatar(source), id: "avatar_image", :width =>"60", :height =>"60",:alt=>"上传图片")%> <%#= link_to l(:button_delete_file),{:controller => :avatar,:action => :delete_image,:remote=>true,:source_type=> source.class,:source_id=>source.id},:confirm => l(:text_are_you_sure), :method => :post, :class => "upbtn fl" %> -上传图片 +<%= l(:button_upload_photo) %> +(个人头像建议90*90大小,课程和项目logo建议60*60大小,或者等比图像) <%= file_field_tag 'avatar[image]', :id => nil, :class => 'upload_file ', diff --git a/public/stylesheets/application.css b/public/stylesheets/application.css index 4b6b681c7..3e88bb30a 100644 --- a/public/stylesheets/application.css +++ b/public/stylesheets/application.css @@ -30,9 +30,13 @@ ol,ul,li{ list-style-type:none} a{ text-decoration:none; } .ml10{ margin-left:10px;} .ml20{ margin-left:20px;} +.ml25{ margin-left:25px;} +.ml30{ margin-left:30px;} .mr10{ margin-right:10px;} .mb5{ margin-bottom:5px;} .mb10{ margin-bottom:10px;} +.f12{font-size:12px; font-weight:normal;} +.c_orange{color:#ff5722;} .fl{ float: left;} .fr{ float:right;} .project_h4{ font-size:14px; color:#3b3b3b;} diff --git a/public/stylesheets/public.css b/public/stylesheets/public.css index 9d714b1de..917360b38 100644 --- a/public/stylesheets/public.css +++ b/public/stylesheets/public.css @@ -54,6 +54,7 @@ h4{ font-size:14px; color:#3b3b3b;} .ml10{ margin-left:10px;} .ml15{ margin-left:15px;} .ml20{ margin-left:20px;} +.ml25{ margin-left:25px;} .ml40{ margin-left:40px;} .ml45{ margin-left:45px;} .ml55{ margin-left:55px;} @@ -71,6 +72,7 @@ h4{ font-size:14px; color:#3b3b3b;} .mt5{ margin-top:5px;} .mt8{ margin-top:8px;} .mt10{ margin-top:10px;} +.mt43{ margin-top:43px;} .mb5{ margin-bottom:5px;} .mb10{ margin-bottom:10px;} .pl15{ padding-left:15px;} From 6441d298a2c7118c690d637019f49a7a23c928da Mon Sep 17 00:00:00 2001 From: whimlex Date: Tue, 21 Apr 2015 18:04:57 +0800 Subject: [PATCH 159/285] =?UTF-8?q?=E7=89=88=E6=9C=AC=E5=BA=93=E4=BF=AE?= =?UTF-8?q?=E8=AE=A2SVG=E5=9B=BE=E6=A0=B7=E5=BC=8F=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/repositories/_revisions.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/repositories/_revisions.html.erb b/app/views/repositories/_revisions.html.erb index 33474978f..9b37795be 100644 --- a/app/views/repositories/_revisions.html.erb +++ b/app/views/repositories/_revisions.html.erb @@ -33,7 +33,7 @@ end %> <% line_num = 1 %> <% revisions.each do |changeset| %>

    - <%= l(:field_estimated_hours) %> +

    <%= l(:field_estimated_hours) %>:

    <%= html_hours(l_hours(@version.estimated_hours)) %> @@ -40,7 +40,7 @@ <% if User.current.allowed_to?(:view_time_entries, @project) %>
    - <%= l(:label_spent_time) %> +

    <%= l(:label_spent_time) %>:

    <%= html_hours(l_hours(@version.spent_hours)) %> From 5123ca1047cfd28de31f1881abb449e1ccca0343 Mon Sep 17 00:00:00 2001 From: whimlex Date: Wed, 22 Apr 2015 10:16:14 +0800 Subject: [PATCH 166/285] =?UTF-8?q?=E7=89=88=E6=9C=AC=E5=BA=93=E6=A0=B7?= =?UTF-8?q?=E5=BC=8F=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/repositories/_link_to_functions.html.erb | 2 +- app/views/repositories/_revisions.html.erb | 2 +- app/views/repositories/changes.html.erb | 3 ++- app/views/repositories/diff.html.erb | 2 +- public/stylesheets/project.css | 2 ++ public/stylesheets/public.css | 3 +++ 6 files changed, 10 insertions(+), 4 deletions(-) diff --git a/app/views/repositories/_link_to_functions.html.erb b/app/views/repositories/_link_to_functions.html.erb index f75a7ce5f..fc3784d46 100644 --- a/app/views/repositories/_link_to_functions.html.erb +++ b/app/views/repositories/_link_to_functions.html.erb @@ -1,6 +1,6 @@ <% if @entry && @entry.kind == 'file' %> -

    +

    <%= link_to_if action_name != 'changes', l(:label_history), {:action => 'changes', :id => @project, :repository_id => @repository.identifier_param, :path => to_path_param(@path), :rev => @rev } %> | <% if @repository.supports_cat? %> <%= link_to_if action_name != 'entry', l(:button_view), {:action => 'entry', :id => @project, :repository_id => @repository.identifier_param, :path => to_path_param(@path), :rev => @rev } %> | diff --git a/app/views/repositories/_revisions.html.erb b/app/views/repositories/_revisions.html.erb index 9b37795be..a0a960b6c 100644 --- a/app/views/repositories/_revisions.html.erb +++ b/app/views/repositories/_revisions.html.erb @@ -48,7 +48,7 @@ end %>

    - <%= submit_tag(l(:label_view_diff), :name => nil, :class=>"orange_u_btn ") if show_diff %> + <%= submit_tag(l(:label_view_diff), :name => nil, :class=>"c_blue") if show_diff %>

    <% end %> diff --git a/app/views/repositories/changes.html.erb b/app/views/repositories/changes.html.erb index 9d7c4aa30..302c839ba 100644 --- a/app/views/repositories/changes.html.erb +++ b/app/views/repositories/changes.html.erb @@ -10,9 +10,10 @@ <%= render_properties(@properties) %> +
    <%= render(:partial => 'revisions', :locals => {:project => @project, :path => @path, :revisions => @changesets, :entry => @entry }) unless @changesets.empty? %> - +
    <% content_for :header_tags do %> <%= stylesheet_link_tag "scm" %> <% end %> diff --git a/app/views/repositories/diff.html.erb b/app/views/repositories/diff.html.erb index 3d206854d..a3afebfff 100644 --- a/app/views/repositories/diff.html.erb +++ b/app/views/repositories/diff.html.erb @@ -5,7 +5,7 @@ :repository_id => @repository.identifier_param, :path => to_path_param(@path), :rev=> @rev}, :method => 'get') do %> <%= hidden_field_tag('rev_to', params[:rev_to]) if params[:rev_to] %> -

    +

    <%= l(:label_view_diff) %>: diff --git a/public/stylesheets/project.css b/public/stylesheets/project.css index c4f06f2f0..2f6a4babe 100644 --- a/public/stylesheets/project.css +++ b/public/stylesheets/project.css @@ -595,6 +595,7 @@ div.thumbnails div {background:#fff;display:inline-block;margin-right:2px;} /*****项目版本库修订 Tables *****/ + table.list{ border:none; border-collapse: collapse; width: 100%; margin-bottom: 4px; } table.list th { background-color:#EEEEEE; padding: 4px; white-space:pre-line; } table.list td { vertical-align: top; padding-right:10px; } @@ -663,6 +664,7 @@ tr.entry.file td.filename_no_report a { margin-left: 16px; } tr span.expander {background-image: url(../images/bullet_toggle_plus.png); padding-left: 8px; margin-left: 0; cursor: pointer;} tr.open span.expander {background-image: url(../images/bullet_toggle_minus.png);} +.icon-folder { background-image: url(../images/folder.png); } .open .icon-folder { background-image: url(../images/folder_open.png); } .icon-file { background-image: url(../images/files/default.png); } .icon-file.text-plain { background-image: url(../images/files/text.png); } diff --git a/public/stylesheets/public.css b/public/stylesheets/public.css index 28a6f2b02..e940d60cd 100644 --- a/public/stylesheets/public.css +++ b/public/stylesheets/public.css @@ -73,8 +73,11 @@ h4{ font-size:14px; color:#3b3b3b;} .mt5{ margin-top:5px;} .mt8{ margin-top:8px;} .mt10{ margin-top:10px;} +.mt13{ margin-top:13px;} +.mt40{ margin-top:40px;} .mb5{ margin-bottom:5px;} .mb10{ margin-bottom:10px;} +.mb13{ margin-bottom:13px;} .pl15{ padding-left:15px;} .w90{ width:90px;} .w210{ width:210px;} From be5c7ac6dd688a6a56d15c517a6b1ae1e5cf0f23 Mon Sep 17 00:00:00 2001 From: huang Date: Wed, 22 Apr 2015 10:24:15 +0800 Subject: [PATCH 167/285] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E6=9C=AF=E8=AF=AD=20=E5=9B=BE=E6=A0=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/application_helper.rb | 6 +++--- app/views/layouts/base_projects.html.erb | 6 +++--- config/locales/projects/zh.yml | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 0163c8dd8..69a3a8398 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -51,11 +51,11 @@ module ApplicationHelper def get_project_type_css(value) if value == 1 - "pr_friend" - elsif value == 1 + "pr_kafa" + elsif value == 2 "pr_keyan" else - "pr_kafa" + "pr_friend" end end diff --git a/app/views/layouts/base_projects.html.erb b/app/views/layouts/base_projects.html.erb index ed7a5a4dc..06c9ea05e 100644 --- a/app/views/layouts/base_projects.html.erb +++ b/app/views/layouts/base_projects.html.erb @@ -225,9 +225,9 @@

    请选择项目类型:

      -
    • id="development_group"/>
    • -
    • id="research_group"/>
    • -
    • id="friend_organization"/>
    • +
    • id="development_group"/>
    • +
    • id="research_group"/>
    • +
    • id="friend_organization"/>
    确定 diff --git a/config/locales/projects/zh.yml b/config/locales/projects/zh.yml index 49fe0e19a..2ddb5aa16 100644 --- a/config/locales/projects/zh.yml +++ b/config/locales/projects/zh.yml @@ -55,9 +55,9 @@ zh: label_apply_project_waiting: 已处理申请,请等待管理员审核 label_unapply_project: 取消申请 lable_sure_exit_project: 是否确认退出该项目 - label_friend_organization: 圈子模式 - label_research_group: 研讨模式 - label_development_team: 开发模式 + label_friend_organization: 朋友圈子模式 + label_research_group: 学术研讨模式 + label_development_team: 协同开发模式 label_member: 成员 project_module_attachments: 资源 From 0de5ddd14c59a8dcb0dd8271396af29b5415a9bc Mon Sep 17 00:00:00 2001 From: lizanle <491823689@qq.com> Date: Wed, 22 Apr 2015 10:33:09 +0800 Subject: [PATCH 168/285] =?UTF-8?q?=E9=A2=98=E5=9E=8B=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E7=99=BE=E5=BA=A6=E4=BA=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/locales/commons/zh.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/locales/commons/zh.yml b/config/locales/commons/zh.yml index dae2a9741..75c8b687a 100644 --- a/config/locales/commons/zh.yml +++ b/config/locales/commons/zh.yml @@ -240,7 +240,7 @@ zh: # button_upload_photo: 上传图片 button_delete_file: 删除 - error_attachment_too_big: 该文件无法上传。超过文件大小限制 (%{max_size}) + error_attachment_too_big: 该文件无法上传。超过文件大小限制 (%{max_size}),建议上传到百度云等其他共享工具里,然后在txt文档里给出链接以及共享密码并上传 error_pic_type: "仅支持如下图片格式:" From 49f33dd50c6d80a7f44ed9311bbdd554562233e0 Mon Sep 17 00:00:00 2001 From: huang Date: Wed, 22 Apr 2015 10:50:12 +0800 Subject: [PATCH 169/285] =?UTF-8?q?=E7=B1=BB=E5=9E=8Bbug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/layouts/_join_exit_project.html.erb | 2 +- app/views/layouts/base_projects.html.erb | 6 +++--- config/locales/projects/zh.yml | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/app/views/layouts/_join_exit_project.html.erb b/app/views/layouts/_join_exit_project.html.erb index 8b4b897ce..d52ecbb76 100644 --- a/app/views/layouts/_join_exit_project.html.erb +++ b/app/views/layouts/_join_exit_project.html.erb @@ -10,6 +10,6 @@ <% if User.current.admin? || User.current.allowed_to?({:controller => 'projects', :action => 'settings'}, @project) %> <%= link_to "#{l(:button_configure)}".html_safe, settings_project_path(@project), :class => "pr_join_a" %> - <%= link_to "#{text}".html_safe,"javascript:void(0)" ,:onClick => "show_window();", :class => "pr_join_a",:id => "setting_project_type"%> + <%= link_to "#{text}".html_safe,"javascript:void(0)" ,:onClick => "show_window();", :class => "pr_join_a",:id => "setting_project_type"%> <% end %>
    diff --git a/app/views/layouts/base_projects.html.erb b/app/views/layouts/base_projects.html.erb index 06c9ea05e..ed7a5a4dc 100644 --- a/app/views/layouts/base_projects.html.erb +++ b/app/views/layouts/base_projects.html.erb @@ -225,9 +225,9 @@

    请选择项目类型:

      -
    • id="development_group"/>
    • -
    • id="research_group"/>
    • -
    • id="friend_organization"/>
    • +
    • id="development_group"/>
    • +
    • id="research_group"/>
    • +
    • id="friend_organization"/>
    确定 diff --git a/config/locales/projects/zh.yml b/config/locales/projects/zh.yml index 2ddb5aa16..49fe0e19a 100644 --- a/config/locales/projects/zh.yml +++ b/config/locales/projects/zh.yml @@ -55,9 +55,9 @@ zh: label_apply_project_waiting: 已处理申请,请等待管理员审核 label_unapply_project: 取消申请 lable_sure_exit_project: 是否确认退出该项目 - label_friend_organization: 朋友圈子模式 - label_research_group: 学术研讨模式 - label_development_team: 协同开发模式 + label_friend_organization: 圈子模式 + label_research_group: 研讨模式 + label_development_team: 开发模式 label_member: 成员 project_module_attachments: 资源 From 3d8ec17bb113c8116e6345d67a665d9a741bb2ba Mon Sep 17 00:00:00 2001 From: sw <939547590@qq.com> Date: Wed, 22 Apr 2015 11:07:39 +0800 Subject: [PATCH 170/285] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=AD=A6=E7=94=9F?= =?UTF-8?q?=E4=BD=9C=E4=B8=9A=E5=BE=97=E5=88=86=E5=88=97=E8=A1=A8=E5=BC=B9?= =?UTF-8?q?=E5=87=BA=E6=A1=86=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/courses/_show_member_score.html.erb | 8 ++++---- app/views/courses/show_member_score.js.erb | 12 +++++++++++- public/javascripts/course.js | 5 +++++ 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/app/views/courses/_show_member_score.html.erb b/app/views/courses/_show_member_score.html.erb index 0f962da81..bb080b57b 100644 --- a/app/views/courses/_show_member_score.html.erb +++ b/app/views/courses/_show_member_score.html.erb @@ -27,15 +27,15 @@ /***弹框***/ - #popbox_tscore{width:480px;position:absolute;z-index:100;left:50%;top:50%;margin:-215px 0 0 -300px; background:#fff; -moz-border-radius:5px; -webkit-border-radius:5px; border-radius:5px; box-shadow:0px 0px 8px #194a81; overflow:auto;} - .alert .close02{width:26px;height:26px;overflow:hidden;position:absolute;top:-10px;right:-490px;background:url(images/close.png) no-repeat;cursor:pointer;} - .tscore_con h2{ display:block; background:#eaeaea; font-size:14px; color:#343333; height:31px; width: auto; margin-top:25px; padding-left:20px; padding-top:5px;} + /*#popbox_tscore{width:480px;position:absolute;z-index:100;left:50%;top:50%;margin:-215px 0 0 -300px; background:#fff; -moz-border-radius:5px; -webkit-border-radius:5px; border-radius:5px; box-shadow:0px 0px 8px #194a81; overflow:auto;}*/ + /*.alert .close02{width:26px;height:26px;overflow:hidden;position:absolute;top:-10px;right:-490px;background:url(images/close.png) no-repeat;cursor:pointer;}*/ + .tscore_con h2{ display:block; background:#eaeaea; font-size:14px; color:#343333; height:31px; width: auto; text-align: center; padding-top:5px;} .tscore_box{ width:350px; margin:15px auto;} .tscore_box li{ height:25px;} -
    +

    <%= @member_score.user.name %> 历次作业积分

    • 作业名称得分
    • diff --git a/app/views/courses/show_member_score.js.erb b/app/views/courses/show_member_score.js.erb index fe8d52a2b..87e728901 100644 --- a/app/views/courses/show_member_score.js.erb +++ b/app/views/courses/show_member_score.js.erb @@ -1,3 +1,13 @@ +//$('#ajax-modal').html('<%#= escape_javascript(render :partial => 'courses/show_member_score', :locals => {:member => @member_score}) %>'); +//showModal('ajax-modal', '400px'); +//$('#ajax-modal').addClass('new-watcher'); + $('#ajax-modal').html('<%= escape_javascript(render :partial => 'courses/show_member_score', :locals => {:member => @member_score}) %>'); showModal('ajax-modal', '400px'); -$('#ajax-modal').addClass('new-watcher'); +//$('#ajax-modal').css('height','569px'); +$('#ajax-modal').siblings().remove(); +$('#ajax-modal').before("" + +""); +//$('#ajax-modal').parent().removeClass(); +$('#ajax-modal').parent().css("top","30%").css("left","40%").css("position","fixed"); +$('#ajax-modal').parent().addClass("new-watcher"); diff --git a/public/javascripts/course.js b/public/javascripts/course.js index 396db3ddd..0ab5de88b 100644 --- a/public/javascripts/course.js +++ b/public/javascripts/course.js @@ -51,6 +51,11 @@ function edit_group(id,url,course_id,group_id) } ); } + +function hidden_homework_score_form() +{ + hideModal($("#user_score")); +} /////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////新建课程相关 //验证课程名称 From 83796bfaa0aa48d68c95a04383dc51da0a58afd7 Mon Sep 17 00:00:00 2001 From: sw <939547590@qq.com> Date: Wed, 22 Apr 2015 11:18:22 +0800 Subject: [PATCH 171/285] =?UTF-8?q?=E5=8E=BB=E6=8E=89puts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/users/show.html.erb | 1 - 1 file changed, 1 deletion(-) diff --git a/app/views/users/show.html.erb b/app/views/users/show.html.erb index 44318c389..ae1be35e3 100644 --- a/app/views/users/show.html.erb +++ b/app/views/users/show.html.erb @@ -104,7 +104,6 @@
      - <% puts 11111111111111 %> <%= user_jour_feed_back_url e %>
      From 09c51d1a87a885f5f105d992a13daecd2c8f7fe9 Mon Sep 17 00:00:00 2001 From: sw <939547590@qq.com> Date: Wed, 22 Apr 2015 11:44:52 +0800 Subject: [PATCH 172/285] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=88=9B=E5=BB=BA?= =?UTF-8?q?=E4=BD=9C=E4=B8=9A=E6=9C=AA=E5=90=AF=E7=94=A8=E5=8C=BF=E8=AF=84?= =?UTF-8?q?=E6=97=B6=EF=BC=8C=E6=89=80=E6=9C=89=E4=BD=9C=E4=B8=9A=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E7=9C=8B=E4=B8=8D=E5=88=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/bids_controller.rb | 2 +- db/schema.rb | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/controllers/bids_controller.rb b/app/controllers/bids_controller.rb index ec83fbd19..b1cca68ed 100644 --- a/app/controllers/bids_controller.rb +++ b/app/controllers/bids_controller.rb @@ -793,7 +793,7 @@ class BidsController < ApplicationController @bid.is_evaluation = params[:bid][:is_evaluation] @bid.proportion = params[:bid][:proportion] @bid.evaluation_num = params[:bid][:evaluation_num] - @bid.open_anonymous_evaluation = params[:bid][:open_anonymous_evaluation] + params[:bid][:open_anonymous_evaluation] ? @bid.open_anonymous_evaluation = 1 : @bid.open_anonymous_evaluation = 0 @bid.reward_type = 3 # @bid.budget = params[:bid][:budget] @bid.deadline = params[:bid][:deadline] diff --git a/db/schema.rb b/db/schema.rb index f9ade5aa4..63063305f 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20150409092151) do +ActiveRecord::Schema.define(:version => 20150415032102) do create_table "activities", :force => true do |t| t.integer "act_id", :null => false @@ -1459,7 +1459,7 @@ ActiveRecord::Schema.define(:version => 20150409092151) do t.string "file_path" t.integer "pack_times", :default => 1 t.integer "pack_size", :default => 0 - t.string "file_digests" + t.text "file_digests" t.datetime "created_at", :null => false t.datetime "updated_at", :null => false end From 92eabdbecd7db137f17d4bdcd24b3214c3e0a83a Mon Sep 17 00:00:00 2001 From: sw <939547590@qq.com> Date: Wed, 22 Apr 2015 11:49:48 +0800 Subject: [PATCH 173/285] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BD=9C=E4=B8=9A?= =?UTF-8?q?=E5=8E=86=E5=8F=B2=E6=95=B0=E6=8D=AE=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20150422034543_change_bid_open_anonymous_evaluation.rb | 8 ++++++++ db/schema.rb | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 db/migrate/20150422034543_change_bid_open_anonymous_evaluation.rb diff --git a/db/migrate/20150422034543_change_bid_open_anonymous_evaluation.rb b/db/migrate/20150422034543_change_bid_open_anonymous_evaluation.rb new file mode 100644 index 000000000..e31ad67be --- /dev/null +++ b/db/migrate/20150422034543_change_bid_open_anonymous_evaluation.rb @@ -0,0 +1,8 @@ +class ChangeBidOpenAnonymousEvaluation < ActiveRecord::Migration + def chang + Bid.where("open_anonymous_evaluation IS NULL").each do |bid| + bid.open_anonymous_evaluation = 0 + bid.save + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 63063305f..ecba4ba96 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20150415032102) do +ActiveRecord::Schema.define(:version => 20150422034543) do create_table "activities", :force => true do |t| t.integer "act_id", :null => false From d2dd77612b7ba4bde2569ddb49d30d8337ca152e Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Wed, 22 Apr 2015 12:42:22 +0800 Subject: [PATCH 174/285] =?UTF-8?q?=E5=B0=86=E7=99=BB=E5=BD=95=E9=BB=98?= =?UTF-8?q?=E8=AE=A4=E5=80=BC=E6=94=B9=E4=B8=BA=E8=87=AA=E5=8A=A8=E7=99=BB?= =?UTF-8?q?=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/account_controller.rb | 2 +- app/views/account/login.html.erb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/account_controller.rb b/app/controllers/account_controller.rb index f8d0f5dd1..22db3d5b4 100644 --- a/app/controllers/account_controller.rb +++ b/app/controllers/account_controller.rb @@ -332,7 +332,7 @@ class AccountController < ApplicationController token = Token.create(:user => user, :action => 'autologin') cookie_options = { :value => token.value, - :expires => 1.year.from_now, + :expires => 7.days.from_now, :path => (Redmine::Configuration['autologin_cookie_path'] || '/'), :secure => (Redmine::Configuration['autologin_cookie_secure'] ? true : false), :httponly => true diff --git a/app/views/account/login.html.erb b/app/views/account/login.html.erb index 4175282b3..bb289eb03 100644 --- a/app/views/account/login.html.erb +++ b/app/views/account/login.html.erb @@ -68,7 +68,7 @@
    <% if Setting.autologin? %> <% end %> From 2f021aecee7a382b3bd9846b2c7ec99f355ff269 Mon Sep 17 00:00:00 2001 From: huang Date: Wed, 22 Apr 2015 12:43:20 +0800 Subject: [PATCH 175/285] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E6=88=90=E5=91=98?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E6=B7=BB=E5=8A=A0=E8=A7=92=E8=89=B2=E3=80=82?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E5=BE=97=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/projects/_project_member_list.html.erb | 6 +++++- config/configuration.yml | 8 ++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/app/views/projects/_project_member_list.html.erb b/app/views/projects/_project_member_list.html.erb index 72dd4ded2..fbaa837ac 100644 --- a/app/views/projects/_project_member_list.html.erb +++ b/app/views/projects/_project_member_list.html.erb @@ -8,8 +8,12 @@ <%= member.user.nil? ? '' : (image_tag(url_to_avatar(member.user), :width => 32, :height => 32)) %> + <%= l(:label_user_for_project_grade) %>:<%= format("%.2f" ,read_user_project_scores(member.user,@project)).to_i %> + <%= l(:label_username)%> - <%= link_to(member.user.name, user_path(member.user),:class => "ml10 c_blue02") %> + <%= link_to(member.user.name, user_path(member.user),:class => "ml10 c_blue02") %>(<%= rolesToLanguage(member.roles.sort.collect(&:to_s)).join(', ') %>)
    + + <%= format_date(member.created_on)%>
    diff --git a/config/configuration.yml b/config/configuration.yml index a62cb590b..415d4b072 100644 --- a/config/configuration.yml +++ b/config/configuration.yml @@ -83,12 +83,12 @@ default: email_delivery: delivery_method: :smtp smtp_settings: - address: smtp.126.com + address: smtp.163.com port: 25 - domain: smtp.126.com + domain: smtp.163.com authentication: :plain - user_name: "alanlong9278@126.com" - password: 'alanlong8788786' + user_name: "huang.jingquan@163.com" + password: 'xinhu1ji2qu366' # Absolute path to the directory where attachments are stored. # The default is the 'files' directory in your Redmine instance. From 336dba414e9d5c049d43f942a164c8db225b078c Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Wed, 22 Apr 2015 13:01:33 +0800 Subject: [PATCH 176/285] =?UTF-8?q?=E7=BC=93=E5=AD=98=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E4=B8=BAredis=E5=AD=98=E5=82=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + Gemfile | 1 + config/additional_environment.rb | 10 ---------- config/application.rb | 2 -- config/environments/production.rb | 7 ++++++- 5 files changed, 8 insertions(+), 13 deletions(-) delete mode 100644 config/additional_environment.rb diff --git a/.gitignore b/.gitignore index a6ee997aa..96788ad9a 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,7 @@ *.swp /config/database.yml /config/configuration.yml +/config/additional_environment.rb /files/* /log/* /public/tmp/* diff --git a/Gemfile b/Gemfile index 679e0a5b2..d5fe6c581 100644 --- a/Gemfile +++ b/Gemfile @@ -6,6 +6,7 @@ unless RUBY_PLATFORM =~ /w32/ gem 'iconv' end +gem 'redis-rails' gem 'rubyzip' gem 'delayed_job_active_record'#, :group => :production gem 'daemons' diff --git a/config/additional_environment.rb b/config/additional_environment.rb deleted file mode 100644 index 6654da90f..000000000 --- a/config/additional_environment.rb +++ /dev/null @@ -1,10 +0,0 @@ -# Copy this file to additional_environment.rb and add any statements -# that need to be passed to the Rails::Initializer. `config` is -# available in this context. -# -# Example: -# -# config.log_level = :debug -# ... -# -#config.relative_url_root = '/socialforge' diff --git a/config/application.rb b/config/application.rb index 05160d03e..57ae436cb 100644 --- a/config/application.rb +++ b/config/application.rb @@ -67,8 +67,6 @@ module RedmineApp # Do not include all helpers config.action_controller.include_all_helpers = false - config.session_store :cookie_store, :key => '_redmine_session' - if File.exists?(File.join(File.dirname(__FILE__), 'additional_environment.rb')) instance_eval File.read(File.join(File.dirname(__FILE__), 'additional_environment.rb')) end diff --git a/config/environments/production.rb b/config/environments/production.rb index 160e0b8b0..63931fa33 100644 --- a/config/environments/production.rb +++ b/config/environments/production.rb @@ -19,7 +19,12 @@ RedmineApp::Application.configure do # Full error reports are disabled and caching is turned on config.logger = Logger.new('log/production.log', 'daily',1048576) # daily, weekly or monthly config.action_controller.perform_caching = true - config.cache_store = :file_store, "#{Rails.root }/files/cache_store/" + + # to additional_environment.rb + # config.cache_store = :file_store, "#{Rails.root }/files/cache_store/" + # config.cache_store = :redis_store, 'redis://localhost:6379/0/cache', { expires_in: 90.minutes } + # + # Enable serving of images, stylesheets, and javascripts from an asset server # config.action_controller.asset_host = "http://assets.example.com" From eeaa613c9eeeb75042aa776eecda0580da3b8932 Mon Sep 17 00:00:00 2001 From: huang Date: Wed, 22 Apr 2015 13:34:57 +0800 Subject: [PATCH 177/285] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E5=AE=9E=E6=97=B6=E5=88=B7=E6=96=B0=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/application_helper.rb | 21 ++++++++----------- app/views/layouts/_join_exit_project.html.erb | 2 +- app/views/layouts/base_projects.html.erb | 9 ++++---- 3 files changed, 15 insertions(+), 17 deletions(-) diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 69a3a8398..20175dc57 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -49,16 +49,6 @@ module ApplicationHelper end end - def get_project_type_css(value) - if value == 1 - "pr_kafa" - elsif value == 2 - "pr_keyan" - else - "pr_friend" - end - end - # Time 2015-03-24 16:38:05 # Author lizanle # Description after save后需要进行资源记录的更新 @@ -1830,8 +1820,15 @@ module ApplicationHelper candown end - def project_type_link text - link_to "#{text}".html_safe,"javascript:void(0)" ,:onClick => "show_window();", :class => "pr_join_a",:id => "setting_project_type" + def project_type_link(text, value) + if value == 1 + link_to "#{text}".html_safe,"javascript:void(0)" ,:onClick => "show_window();", :class => "pr_join_a",:id => "setting_project_type" + elsif value == 2 + link_to "#{text}".html_safe,"javascript:void(0)" ,:onClick => "show_window();", :class => "pr_join_a",:id => "setting_project_type" + else + link_to "#{text}".html_safe,"javascript:void(0)" ,:onClick => "show_window();", :class => "pr_join_a",:id => "setting_project_type" + end + end private diff --git a/app/views/layouts/_join_exit_project.html.erb b/app/views/layouts/_join_exit_project.html.erb index d52ecbb76..67744e4b8 100644 --- a/app/views/layouts/_join_exit_project.html.erb +++ b/app/views/layouts/_join_exit_project.html.erb @@ -10,6 +10,6 @@ <% if User.current.admin? || User.current.allowed_to?({:controller => 'projects', :action => 'settings'}, @project) %> <%= link_to "#{l(:button_configure)}".html_safe, settings_project_path(@project), :class => "pr_join_a" %> - <%= link_to "#{text}".html_safe,"javascript:void(0)" ,:onClick => "show_window();", :class => "pr_join_a",:id => "setting_project_type"%> + <%= link_to "#{text}".html_safe,"javascript:void(0)" ,:onClick => "show_window();", :class => "pr_join_a",:id => "setting_project_type"%> <% end %> diff --git a/app/views/layouts/base_projects.html.erb b/app/views/layouts/base_projects.html.erb index ed7a5a4dc..958e54d9d 100644 --- a/app/views/layouts/base_projects.html.erb +++ b/app/views/layouts/base_projects.html.erb @@ -42,19 +42,19 @@ function (data) { if(data == 1) { - $("#setting_project_type").replaceWith("<%= escape_javascript(project_type_link(l(:label_development_team)))%>"); + $("#setting_project_type").replaceWith("<%= escape_javascript(project_type_link(l(:label_development_team), 1))%>"); $("#project_memu_list").html('<%= escape_javascript(render(:partial => 'layouts/base_development_group')) %>'); $("#close_light").attr("onClick","close_window('development_group');"); } else if(data == 2) { - $("#setting_project_type").replaceWith("<%= escape_javascript(project_type_link(l(:label_research_group)))%>"); + $("#setting_project_type").replaceWith("<%= escape_javascript(project_type_link(l(:label_research_group), 2))%>"); $("#project_memu_list").html('<%= escape_javascript(render(:partial => 'layouts/base_research_team')) %>'); $("#close_light").attr("onClick","close_window('research_group');"); } else if(data == 3) { - $("#setting_project_type").replaceWith("<%= escape_javascript(project_type_link(l(:label_friend_organization)))%>"); + $("#setting_project_type").replaceWith("<%= escape_javascript(project_type_link(l(:label_friend_organization), 3))%>"); $("#project_memu_list").html('<%= escape_javascript(render(:partial => 'layouts/base_friend_group')) %>'); $("#close_light").attr("onClick","close_window('friend_organization');"); } @@ -116,7 +116,8 @@
    <% text = @project.project_new_type == 1 ? l(:label_development_team) : (@project.project_new_type == 2 ? l(:label_research_group) : l(:label_friend_organization))%> - <%= render 'layouts/join_exit_project',{:text => text} %> + <% typeclass = @project.project_new_type == 1 ? "pr_kafa" : (@project.project_new_type == 2 ? "pr_keyan" : "pr_friend")%> + <%= render 'layouts/join_exit_project',{:text => text, :typeclass => typeclass} %>
    From bce100696986cd9717f95bd98d2c675301f837b6 Mon Sep 17 00:00:00 2001 From: huang Date: Wed, 22 Apr 2015 13:46:35 +0800 Subject: [PATCH 178/285] =?UTF-8?q?=E9=82=80=E8=AF=B7=E7=95=8C=E9=9D=A2?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=9D=83=E9=99=90=E6=8E=A7=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/layouts/base_projects.html.erb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/views/layouts/base_projects.html.erb b/app/views/layouts/base_projects.html.erb index 958e54d9d..8890e88a4 100644 --- a/app/views/layouts/base_projects.html.erb +++ b/app/views/layouts/base_projects.html.erb @@ -161,7 +161,9 @@ <% end %> From 9cfcbc5584462533ec65e89a4f91437597305045 Mon Sep 17 00:00:00 2001 From: huang Date: Wed, 22 Apr 2015 13:56:36 +0800 Subject: [PATCH 179/285] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E8=AE=A8=E8=AE=BA?= =?UTF-8?q?=E5=8C=BA--=E6=9C=AA=E7=99=BB=E5=BD=95=E6=83=85=E5=86=B5?= =?UTF-8?q?=E4=B8=8B=E6=8F=90=E7=A4=BA=E7=95=8C=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/boards/_project_show.html.erb | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/app/views/boards/_project_show.html.erb b/app/views/boards/_project_show.html.erb index 31748014f..7c6594006 100644 --- a/app/views/boards/_project_show.html.erb +++ b/app/views/boards/_project_show.html.erb @@ -33,14 +33,9 @@ <% if !User.current.logged? %> -
    - <% if @project.project_type == 1 %> - <%= l(:label_user_login_course_board) %> - <% else %> - <%= l(:label_user_login_project_board) %> - <% end %> - <%= link_to l(:label_user_login_new), signin_path %> -
    +
    + <%= l(:label_user_login_project_board) %> + <%= link_to l(:label_user_login_new), signin_path, :class => "c_blue ml5" %>
    <% end %> From 2f2d4257c2aa9cdebb285c3a00ce5f9c96949586 Mon Sep 17 00:00:00 2001 From: sw <939547590@qq.com> Date: Wed, 22 Apr 2015 14:10:45 +0800 Subject: [PATCH 180/285] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=8F=90=E4=BA=A4?= =?UTF-8?q?=E4=BD=9C=E4=B8=9A=E6=8C=89=E9=92=AE=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/homework_attach/_homeworks_list.html.erb | 4 ++-- public/stylesheets/css.css | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/app/views/homework_attach/_homeworks_list.html.erb b/app/views/homework_attach/_homeworks_list.html.erb index f5d0f3616..c235133a1 100644 --- a/app/views/homework_attach/_homeworks_list.html.erb +++ b/app/views/homework_attach/_homeworks_list.html.erb @@ -48,8 +48,8 @@
  • 您还没提交作品,请点击提交作品按钮:)
  • -
  • - <%= link_to "提交作品", new_exercise_book_path(@bid), :style => "width:80px; margin:20px 0 0 350px;" %> +
  • + <%= link_to "提交作品", new_exercise_book_path(@bid), :style => "margin:20px 20px 0 0;width:80px;" %>
  • diff --git a/public/stylesheets/css.css b/public/stylesheets/css.css index 57b3499db..2efec2bbf 100644 --- a/public/stylesheets/css.css +++ b/public/stylesheets/css.css @@ -5,10 +5,13 @@ div,img,tr,td,textarea{ border:0;} table,tr,td{border:0; cellspacing:0; cellpadding:0;} ul,li{ list-style-type:none} .cl{ clear:both; overflow:hidden; } -a{ text-decoration:none; } +a{ text-decoration:none !important; } a:hover{ text-decoration:underline;} .container{ width:940px; margin:0 auto; } +.mr20{margin-right: 20px} +.mt20{margin-top: 20px} +.w80{width:80px;} /* 作业列表 */ .ttl{ } .ctt{clear:both; } From 21f08830df33ddc6a6117765bcbf860e6f48d879 Mon Sep 17 00:00:00 2001 From: whimlex Date: Wed, 22 Apr 2015 14:35:04 +0800 Subject: [PATCH 181/285] =?UTF-8?q?=E6=84=8F=E8=A7=81=E5=8F=8D=E9=A6=88?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/layouts/_base_feedback.html.erb | 7 +++++-- app/views/layouts/_new_feedback.html.erb | 4 ++-- config/locales/commons/en.yml | 2 +- config/locales/commons/zh.yml | 2 +- public/javascripts/feedback.js | 3 +++ 5 files changed, 12 insertions(+), 6 deletions(-) diff --git a/app/views/layouts/_base_feedback.html.erb b/app/views/layouts/_base_feedback.html.erb index 19892e841..7105aff47 100644 --- a/app/views/layouts/_base_feedback.html.erb +++ b/app/views/layouts/_base_feedback.html.erb @@ -114,6 +114,9 @@ $(function(){ function f_submit() { + var subject = $("#memo_subject").val(); + var content = $("#memo_content_1").val(); + $("#memo_subject").val(subject+":"+ content.substr(0,18)); $("#new_memo").submit(); } @@ -166,8 +169,8 @@ function cookieget(n)
    <% get_memo %> <%= form_for(@new_memo, :url => create_feedback_forum_path(@public_forum)) do |f| %> - <%= f.text_area :subject, :class => "opnionText", :placeholder => l(:label_feedback_tips) %> - <%= f.hidden_field :content,:id => 'hidden', :required => true , :value => l(:label_feedback_value) %> + <%= f.hidden_field :subject,:required => true , :value => l(:label_feedback_value) %> + <%= f.text_area :content,:class => "opnionText",:id=>"memo_content_1" ,:placeholder => l(:label_feedback_tips) %> <%#= f.submit :value => l(:label_memo_create), :class => "opnionButton", :id => "button1" %> <%= l(:label_submit)%> <% end %> diff --git a/app/views/layouts/_new_feedback.html.erb b/app/views/layouts/_new_feedback.html.erb index 32afb4e5c..e30181612 100644 --- a/app/views/layouts/_new_feedback.html.erb +++ b/app/views/layouts/_new_feedback.html.erb @@ -13,8 +13,8 @@
    <% get_memo %> <%= form_for(@new_memo, :url => create_feedback_forum_path(@public_forum)) do |f| %> - <%= f.text_area :subject, :class => "opnionText", :placeholder => l(:label_feedback_tips) %> - <%= f.hidden_field :content, :required => true , :value => l(:label_feedback_value) %> + <%= f.hidden_field :subject,:required => true , :value => l(:label_feedback_value) %> + <%= f.text_area :content,:class => "opnionText" , :placeholder => l(:label_feedback_tips) %> <%= l(:label_submit)%> diff --git a/config/locales/commons/en.yml b/config/locales/commons/en.yml index 3c2c63654..5eb92f07e 100644 --- a/config/locales/commons/en.yml +++ b/config/locales/commons/en.yml @@ -347,7 +347,7 @@ en: label_feedback_tips: "Anything you want to say, roar it here ~~" label_technical_support: "Support: " label_feedback_success: "Your comments have been sent to the public bar in the home page, thanks for your support!" - label_feedback_value: "The post comes from user feedback box!" + label_feedback_value: "User feedback" # # diff --git a/config/locales/commons/zh.yml b/config/locales/commons/zh.yml index dae2a9741..c20e5799b 100644 --- a/config/locales/commons/zh.yml +++ b/config/locales/commons/zh.yml @@ -354,7 +354,7 @@ zh: label_feedback_tips: "有什么想说的,尽管来咆哮吧~~" label_technical_support: "技术支持:" label_feedback_success: "您的意见已经反馈到公共贴吧的新手讨论吧,我们会第一时间解决您的问题,谢谢支持!" - label_feedback_value: "该贴来自用户反馈!" + label_feedback_value: "用户意见反馈" diff --git a/public/javascripts/feedback.js b/public/javascripts/feedback.js index 7ed063b75..a3707b312 100644 --- a/public/javascripts/feedback.js +++ b/public/javascripts/feedback.js @@ -82,5 +82,8 @@ $(function(){ function f_submit() { + var subject = $("#memo_subject").val(); + var content = $("#memo_content").val(); + $("#memo_subject").val(subject+":"+ content.substr(0,18)); $("#new_memo").submit(); } \ No newline at end of file From 4cb22f2437f198fd2d8b6b8273fcfff04f485bac Mon Sep 17 00:00:00 2001 From: whimlex Date: Wed, 22 Apr 2015 15:49:38 +0800 Subject: [PATCH 182/285] =?UTF-8?q?=E8=AF=BE=E7=A8=8B=E3=80=81=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E3=80=81=E4=B8=AA=E4=BA=BA=E5=A4=B4=E5=83=8F=E4=B8=8A?= =?UTF-8?q?=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/avatar/_avatar_form.html.erb | 3 ++- app/views/avatar/_new_avatar_form.html.erb | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/app/views/avatar/_avatar_form.html.erb b/app/views/avatar/_avatar_form.html.erb index fef9f7bdb..f5ecfeadd 100644 --- a/app/views/avatar/_avatar_form.html.erb +++ b/app/views/avatar/_avatar_form.html.erb @@ -47,7 +47,6 @@ <%= l(:button_upload_photo) %> - (个人头像建议90*90大小,课程和项目logo建议60*60大小,或者等比图像) <%= file_field_tag 'avatar[image]', @@ -69,6 +68,8 @@ :source_id => source.id.to_s } %> +(个人头像建议90*90大小,或者等比图像) +
    <% content_for :header_tags do %> <%= javascript_include_tag 'avatars' %> diff --git a/app/views/avatar/_new_avatar_form.html.erb b/app/views/avatar/_new_avatar_form.html.erb index 8b81ebf66..627de34be 100644 --- a/app/views/avatar/_new_avatar_form.html.erb +++ b/app/views/avatar/_new_avatar_form.html.erb @@ -3,7 +3,6 @@ <%#= link_to l(:button_delete_file),{:controller => :avatar,:action => :delete_image,:remote=>true,:source_type=> source.class,:source_id=>source.id},:confirm => l(:text_are_you_sure), :method => :post, :class => "upbtn fl" %> <%= l(:button_upload_photo) %> -(个人头像建议90*90大小,课程和项目logo建议60*60大小,或者等比图像) <%= file_field_tag 'avatar[image]', :id => nil, :class => 'upload_file ', @@ -22,6 +21,7 @@ :source_id => source.id.to_s } %> +(课程和项目logo建议60*60大小,或者等比图像) <% content_for :header_tags do %> <%= javascript_include_tag 'avatars' %> <% end %> From 36f2643ad8dbd41ddd31ed0fa263b94b2d9e43dc Mon Sep 17 00:00:00 2001 From: whimlex Date: Wed, 22 Apr 2015 16:33:12 +0800 Subject: [PATCH 183/285] =?UTF-8?q?=E4=B8=8A=E4=BC=A0logo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/avatar/_new_avatar_form.html.erb | 2 +- public/stylesheets/courses.css | 1 + public/stylesheets/project.css | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/app/views/avatar/_new_avatar_form.html.erb b/app/views/avatar/_new_avatar_form.html.erb index 627de34be..c94f9f87a 100644 --- a/app/views/avatar/_new_avatar_form.html.erb +++ b/app/views/avatar/_new_avatar_form.html.erb @@ -5,7 +5,7 @@ <%= l(:button_upload_photo) %> <%= file_field_tag 'avatar[image]', :id => nil, - :class => 'upload_file ', + :class => 'upload_avatar ', :size => "1", :multiple => false, :onchange => 'addInputAvatar(this);', diff --git a/public/stylesheets/courses.css b/public/stylesheets/courses.css index 1fed23fc1..904f6a3a8 100644 --- a/public/stylesheets/courses.css +++ b/public/stylesheets/courses.css @@ -331,6 +331,7 @@ a:hover.st_add{ color:#ff8e15;} .upbtn{ margin:40px 0 0 15px; display:block; padding:2px 5px; border:1px solid #eaeaea;} .upbtn:hover{border:1px solid #64bdd9; color:#64bdd9;cursor: pointer;} .upload_file{margin-left: -60px;margin-top: 40px;width: 50px;position: absolute;height: 24px;opacity: 0;cursor: pointer} +.upload_avatar{margin-left: -350px;margin-top: 40px;width: 60px;position: absolute;height: 24px;opacity: 0;cursor: pointer} /* 功能倒计时*/ .w_img{ float:left; margin:10px 10px 15px 0px;} .w_p{ float:left; color:#15bccf; font-size:16px; font-weight:bold; margin-top:70px; } diff --git a/public/stylesheets/project.css b/public/stylesheets/project.css index 2f6a4babe..abd748dce 100644 --- a/public/stylesheets/project.css +++ b/public/stylesheets/project.css @@ -368,6 +368,7 @@ blockquote { } /*上传项目图片*/ .upload_file{margin-left: -60px;margin-top: 40px;width: 50px;position: absolute;height: 24px;opacity: 0;cursor: pointer} +.upload_avatar{margin-left: -350px;margin-top: 40px;width: 60px;position: absolute;height: 24px;opacity: 0;cursor: pointer} /*配置*/ .pro_st_ttl{ height:24px;} .pro_st_ctt{height:auto; clear:both;} From 427f26b0584e2776cc1c0e0f0dfa796fab6a2b7c Mon Sep 17 00:00:00 2001 From: sw <939547590@qq.com> Date: Wed, 22 Apr 2015 16:37:24 +0800 Subject: [PATCH 184/285] =?UTF-8?q?header=E7=9A=84login=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/layouts/_new_header.html.erb | 2 +- app/views/messages/_course_show.html.erb | 4 ++-- public/stylesheets/public.css | 8 +++++--- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/app/views/layouts/_new_header.html.erb b/app/views/layouts/_new_header.html.erb index a430a8e8f..758386f2d 100644 --- a/app/views/layouts/_new_header.html.erb +++ b/app/views/layouts/_new_header.html.erb @@ -18,7 +18,7 @@ <% if User.current.logged? -%>
  • - <%= link_to_user_header(User.current,false,:class =>'parent')%> + <%= link_to "#{User.current.login}".html_safe, {:controller=> 'users', :action => 'show', id: User.current.id, host: Setting.user_domain}, :class => "uses_name"%>
      <% unless User.current.projects.empty? %>
    • diff --git a/app/views/messages/_course_show.html.erb b/app/views/messages/_course_show.html.erb index 50a97d9ba..256c41b99 100644 --- a/app/views/messages/_course_show.html.erb +++ b/app/views/messages/_course_show.html.erb @@ -8,8 +8,8 @@ <%= link_to image_tag(url_to_avatar(@topic.author),:width => '46',:height => '46'), user_path(@topic.author) %>
  • -

    - <%= link_to @topic.subject, course_boards_path(@topic.course),title: @topic.subject.to_s %> +

    + <%= @topic.subject %>


    diff --git a/public/stylesheets/public.css b/public/stylesheets/public.css index 2f45bbd69..ae5dd3702 100644 --- a/public/stylesheets/public.css +++ b/public/stylesheets/public.css @@ -218,9 +218,10 @@ div#menu a {position: relative;z-index: 10; height: 41px; display: block; float: div#menu a:hover, div#menu a:hover span { color: #a1ebff; } div#menu li.current a {} div#menu {display: block; cursor: pointer; background-repeat: no-repeat;background-position: 95% 0;padding-right: 15px; _padding-right: 20px;} -div#menu ul a.parent {background: url(../images/item.png) -20px -30px no-repeat; width:60px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;} -div#menu ul a.parent:hover {background: url(../images/item.png) -20px -60px no-repeat;} -div#menu ul ul a.parent {background: url(../images/item.png) -20px 6px no-repeat;} +div#menu ul a.user_name { width:170px; text-align:right; margin:0; } +.pic_triangle{background: url(../images/item.png) -90px -48px no-repeat; float:right; display:block; width:10px; height:10px; margin-top:12px; margin-left:7px;} +.pic_triangle:hover{background: url(../images/item.png) -90px -78px no-repeat; } +div#menu ul ul a.parent {background: url(../images/item.png) -20px 6px no-repeat;width:60px;} div#menu ul ul a.parent:hover {background: url(../images/item.png) -20px -11px no-repeat;} /* menu::level1 */ div#menu a { padding: 5px 12px 0 10px;line-height: 30px; color: #fff;} @@ -288,6 +289,7 @@ a.close_btn {background-position:-44px 0;} a:hover.close_btn {background-position:-66px 0;} .show_btn {background-position:-119px 0;} .msgserver a {color:#15bccf; } +.msgserver a:hover { text-decoration:underline; } .hiddent{ overflow:hidden; white-space: nowrap; text-overflow:ellipsis;} From 1985d1c84bfa23b6f33df7d30565ae6c2a41026b Mon Sep 17 00:00:00 2001 From: sw <939547590@qq.com> Date: Wed, 22 Apr 2015 16:47:13 +0800 Subject: [PATCH 185/285] =?UTF-8?q?=E8=B0=83=E6=95=B4header=E4=B8=8B?= =?UTF-8?q?=E5=95=A6=E5=88=97=E8=A1=A8=E6=A1=86=E4=BD=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/layouts/_new_header.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/layouts/_new_header.html.erb b/app/views/layouts/_new_header.html.erb index 758386f2d..687c59094 100644 --- a/app/views/layouts/_new_header.html.erb +++ b/app/views/layouts/_new_header.html.erb @@ -19,7 +19,7 @@

  • <%= link_to "#{User.current.login}".html_safe, {:controller=> 'users', :action => 'show', id: User.current.id, host: Setting.user_domain}, :class => "uses_name"%> -
      +
        <% unless User.current.projects.empty? %>
      • <%= link_to l(:label_my_projects), {:controller => 'users', :action => 'user_projects', id: User.current.id, host: Setting.project_domain}, :class => "parent" %> From 681546b860c2e1924221954a1b391e8517771c93 Mon Sep 17 00:00:00 2001 From: huang Date: Wed, 22 Apr 2015 16:49:07 +0800 Subject: [PATCH 186/285] =?UTF-8?q?=E7=BC=BA=E9=99=B7=E4=B8=8A=E4=BC=A0?= =?UTF-8?q?=E9=99=84=E4=BB=B6=E6=98=BE=E7=A4=BA=20=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E9=82=AE=E4=BB=B6=E9=82=80=EF=BC=88=E6=9C=AA=E5=AE=8C=E6=88=90?= =?UTF-8?q?=EF=BC=8C=E9=9C=80=E5=88=87=E6=8D=A2=E5=88=86=E6=94=AF=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/projects_controller.rb | 7 +++++-- app/models/mailer.rb | 3 ++- app/services/users_service.rb | 8 +++++--- app/views/attachments/_project_file_links.html.erb | 2 +- 4 files changed, 13 insertions(+), 7 deletions(-) diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 5e67e0a2c..845f32dab 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -243,8 +243,10 @@ class ProjectsController < ApplicationController # Author lizanle # Description 项目动态展示方法,删除了不必要的代码 def show - - # 试图跳转到请求的按钮 + # params[:login]为邮箱邀请用户加入,主要功能: + # 1、自动注册 + # 2、加入项目、创建角色 + # 3、用户得分 if params[:login] login = params[:login] login = login.sub(/%40/,'@') @@ -252,6 +254,7 @@ class ProjectsController < ApplicationController password = params[:password] us = UsersService.new user = us.register_auto(login,mail, password) + Member.create(:role_ids => [4], :user_id => user.id,:project_id => @project.id) UserGrade.create(:user_id => user.id, :project_id => @project.id) User.current = user unless User.current.nil? diff --git a/app/models/mailer.rb b/app/models/mailer.rb index ce3924119..acc268275 100644 --- a/app/models/mailer.rb +++ b/app/models/mailer.rb @@ -53,7 +53,8 @@ class Mailer < ActionMailer::Base @subject = "#{invitor.name} #{l(:label_invite_project)} #{project.name} " @password = newpass(6) @project_url = url_for(:controller => 'projects', :action => 'show', :id => project.id, - :password => @password, :login => email) + :password => @password, + :login => email) mail :to => email, :subject => @subject end diff --git a/app/services/users_service.rb b/app/services/users_service.rb index c1f716fd1..75dd316c0 100644 --- a/app/services/users_service.rb +++ b/app/services/users_service.rb @@ -44,13 +44,16 @@ class UsersService #location = get_user_location @user #{: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 + + # 自动注册功能 FOR:邮件邀请 def register_auto(login,mail,password) @user = User.new @user.admin = false @user.register @user.login = login - @user.mail =mail + @user.mail = mail password_confirmation = password + # 自动注册,跳过代码验证 should_confirmation_password = true if !password.blank? && !password_confirmation.blank? && should_confirmation_password @user.password, @user.password_confirmation = password, password_confirmation @@ -59,9 +62,7 @@ class UsersService else @user.password = "" end - @user = automatically_register(@user) - if @user.id != nil ue = @user.user_extensions ||= UserExtensions.new ue.user_id = @user.id @@ -69,6 +70,7 @@ class UsersService end @user end + #显示用户 #id用户id def show_user(params) diff --git a/app/views/attachments/_project_file_links.html.erb b/app/views/attachments/_project_file_links.html.erb index 9a65556d8..0135ee239 100644 --- a/app/views/attachments/_project_file_links.html.erb +++ b/app/views/attachments/_project_file_links.html.erb @@ -64,7 +64,7 @@ <% images = attachments.select(&:thumbnailable?) %> <% if images.any? %> <% images.each do |attachment| %> -
        <%= thumbnail_issue_tag(attachment) %>
        +
        <%= thumbnail_issue_tag(attachment) %>
        <% end %> <% end %> <% end %> From 9a07989917181b753278c535d6db4a179ad917ea Mon Sep 17 00:00:00 2001 From: sw <939547590@qq.com> Date: Wed, 22 Apr 2015 17:01:36 +0800 Subject: [PATCH 187/285] =?UTF-8?q?=E8=B0=83=E6=95=B4header=E7=9A=84login?= =?UTF-8?q?=E7=9A=84=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/layouts/_new_header.html.erb | 2 +- public/stylesheets/public.css | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/views/layouts/_new_header.html.erb b/app/views/layouts/_new_header.html.erb index 687c59094..489612c9a 100644 --- a/app/views/layouts/_new_header.html.erb +++ b/app/views/layouts/_new_header.html.erb @@ -19,7 +19,7 @@
      • <%= link_to "#{User.current.login}".html_safe, {:controller=> 'users', :action => 'show', id: User.current.id, host: Setting.user_domain}, :class => "uses_name"%> -
          +
  • <%= checked_image repository.is_default? %> <%=h repository.scm_name %> <%=truncate( 'http://' << repository.login.to_s << '_'<< repository.identifier.to_s << '@'<< ip.to_s << h( repository.url.slice(project_path_cut, repository.url.length)),:length=>20)%><%=h truncate(repository.url,:length=>10) %> <% if repository.scm_name=="Git"%> <%if User.current.allowed_to?(:manage_repository, @project) %> - <%= link_to(l(:label_user_plural), committers_repository_path(repository), - :class => 'c_blue') %> + <%= link_to(l(:label_user_plural), committers_repository_path(repository) + ) %> <% end %> <% end %> <%= link_to_if_authorized(h(version.wiki_page_title), {:controller => 'wiki', - :action => 'show', - :project_id => version.project, - :id => Wiki.titleize(version.wiki_page_title)}) || h(version.wiki_page_title) unless version.wiki_page_title.blank? || version.project.wiki.nil? %> + :action => 'show', + :project_id => version.project, + :id => Wiki.titleize(version.wiki_page_title)}) || h(version.wiki_page_title) unless version.wiki_page_title.blank? || version.project.wiki.nil? %> <% if version.project == @project && User.current.allowed_to?(:manage_versions, @project) %> diff --git a/public/stylesheets/public.css b/public/stylesheets/public.css index 2f45bbd69..125a36064 100644 --- a/public/stylesheets/public.css +++ b/public/stylesheets/public.css @@ -131,6 +131,7 @@ a.c_green{ color:#28be6c;} .c_blue{ color:#15bccf;} .c_red{ color:#F00;} .c_green{ color:#28be6c;} +.c_grey{color:#999;} .c_dblue{ color:#09658c;} .b_blue{background:#64bdd9;} .b_green{background:#28be6c;} @@ -404,7 +405,7 @@ div.flash.warning, .conflict { /*弹出框*/ .black_overlay{display:none;position:fixed;top:0px;left:0px;width:100%;height:100%;background-color:black;z-index:1001;-moz-opacity:0.8;opacity:.80;filter:alpha(opacity=80);} .white_content{display:none;position:fixed;top:15%;left:30%;width:420px;height: auto; margin-bottom:20px;padding:16px;border:3px solid #15bccf;background-color:white;z-index:1002;overflow:auto;} -.white_content02{display:none;position:fixed;top:15%;left:30%;width:200px;height: auto; margin-bottom:20px;padding:10px;border:3px solid #15bccf;background-color:white;z-index:1002;overflow:auto;} +.white_content02{display:none;position:fixed;top:15%;left:30%;width:310px;height: auto; margin-bottom:20px;padding:10px;border:3px solid #15bccf;background-color:white;z-index:1002;overflow:auto;} .floatbox{ width:420px; border:3px solid #15bccf; background:#fff; padding:5px;} a.box_close{ display:block; float:right; width:16px; height:16px; background:url(../images/img_floatbox.png) 0 0 no-repeat;} a.box_close{background:url(../images/img_floatbox.png) -22px 0 no-repeat;} From 1f7f1eff1a22a140ba86eaeed0a818a2ccd9307c Mon Sep 17 00:00:00 2001 From: sw <939547590@qq.com> Date: Thu, 23 Apr 2015 10:26:27 +0800 Subject: [PATCH 194/285] =?UTF-8?q?=E8=AF=BE=E7=A8=8B=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=88=90=E5=91=98=E8=BE=93=E5=85=A5=E7=A9=BA=E6=A0=BC=E9=94=AE?= =?UTF-8?q?=E4=BC=9A=E6=90=9C=E7=B4=A2=E5=87=BA=E6=89=80=E6=9C=89=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/members_helper.rb | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/app/helpers/members_helper.rb b/app/helpers/members_helper.rb index 34c6dad15..06b154d36 100644 --- a/app/helpers/members_helper.rb +++ b/app/helpers/members_helper.rb @@ -32,7 +32,7 @@ module MembersHelper #获取项目可邀请的成员列表 def render_project_members project - if params[:q] && params[:q] != "" + if params[:q] && params[:q].lstrip.rstrip != "" scope = Principal.active.sorted.not_member_of(project).like(params[:q]) else scope = [] @@ -48,7 +48,7 @@ module MembersHelper # add by nwb # 课程可添加的成员列表 def render_principals_for_new_course_members(course) - if params[:q] && params[:q] != "" + if params[:q] && params[:q].lstrip.rstrip != "" scope = Principal.active.sorted.not_member_of_course(course).like(params[:q]) else scope = [] @@ -63,19 +63,6 @@ module MembersHelper s + content_tag('ul', links,:class => 'wlist',:id => "course_member_pagination_links") end - # 项目配置中添加成员列表 - def render_principals_for_new_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', :id => 'principals') - - links = pagination_links_full(@obj_pages, @obj_count, :per_page_links => false, :remote => false, :flag => true) {|text, parameters, options| - link_to text, appliedproject_project_memberships_path(project, parameters.merge(:q => params[:q], :format => 'js')), :remote => true - } - - s + content_tag('ul', links,:class => 'wlist',:id => "course_member_pagination_links") - end - # 新申请加入项目成员列表 def render_principals_for_applied_members_new project scope = project.applied_projects.map(&:user) From 5b5423b8c5e9ad237e0308380283fa309439e0a8 Mon Sep 17 00:00:00 2001 From: sw <939547590@qq.com> Date: Thu, 23 Apr 2015 10:47:54 +0800 Subject: [PATCH 195/285] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=B4=B4=E5=90=A7?= =?UTF-8?q?=E6=96=B0=E5=BB=BA=E5=B8=96=E5=AD=90=E3=80=81=E5=9B=9E=E5=A4=8D?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E6=A0=B7=E5=BC=8F=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/courses/_searchmembers.html.erb | 2 +- app/views/forums/show.html.erb | 1 + app/views/memos/_reply_box.html.erb | 1 + public/stylesheets/nyan.css | 2 +- 4 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/views/courses/_searchmembers.html.erb b/app/views/courses/_searchmembers.html.erb index c6b577c8d..1956f34c4 100644 --- a/app/views/courses/_searchmembers.html.erb +++ b/app/views/courses/_searchmembers.html.erb @@ -1,5 +1,5 @@ <%= form_tag( searchmembers_course_path(@course), method: 'get',:class => "f_l",:remote=>true,:id => "search_student") do %> - <%= text_field_tag 'name', params[:name], name: "name", :class => 'st_search_input', :placeholder => '输入学生姓名、学号进行搜索'%> + <%= text_field_tag 'name', params[:name], name: "name", :class => 'st_search_input', :placeholder => '输入学生昵称、姓名、学号进行搜索'%> <% if @group %> <%= hidden_field "search_group_id", params[:search_group_id],:value => "#{@group.id}", name: 'search_group_id' %> diff --git a/app/views/forums/show.html.erb b/app/views/forums/show.html.erb index 2f4ec56a0..8e50837ff 100644 --- a/app/views/forums/show.html.erb +++ b/app/views/forums/show.html.erb @@ -22,6 +22,7 @@
    <%= render :partial => 'attachments/form', :locals => {:container => @memo} %>

    +
    <%= f.submit :value => l(:label_memo_create) %> <%= link_to l(:button_cancel), "#", :onclick => '$("#add-memo").hide(); return false;' %> diff --git a/app/views/memos/_reply_box.html.erb b/app/views/memos/_reply_box.html.erb index 1ee94dd3e..27038255e 100644 --- a/app/views/memos/_reply_box.html.erb +++ b/app/views/memos/_reply_box.html.erb @@ -14,5 +14,6 @@
    <%= render :partial => 'attachments/form' %>

    +
    <%= f.submit value: l(:label_reply_plural), class: "replies" %> <% end %> \ No newline at end of file diff --git a/public/stylesheets/nyan.css b/public/stylesheets/nyan.css index de4dcb65c..a6dfe3f90 100644 --- a/public/stylesheets/nyan.css +++ b/public/stylesheets/nyan.css @@ -734,7 +734,7 @@ div.actions input[type="text"] { .replies { overflow: hidden; max-width: 100%; - float: right; + float: left; /*max-width: 90%;*/ } From 6d058940ec04b8c6a7e5afd66e2a62170bc05439 Mon Sep 17 00:00:00 2001 From: sw <939547590@qq.com> Date: Thu, 23 Apr 2015 11:44:07 +0800 Subject: [PATCH 196/285] =?UTF-8?q?=E5=BD=93=E8=AF=BE=E7=A8=8B=E6=B2=A1?= =?UTF-8?q?=E6=9C=89=E8=AE=A8=E8=AE=BA=E5=8C=BA=E6=97=B6=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E5=88=9B=E5=BB=BA=E5=85=B6=E8=AE=A8=E8=AE=BA=E5=8C=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/boards_controller.rb | 24 +++++++++++++++--------- app/views/layouts/base_courses.html.erb | 4 ++-- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/app/controllers/boards_controller.rb b/app/controllers/boards_controller.rb index bdbbb8e37..a301d270d 100644 --- a/app/controllers/boards_controller.rb +++ b/app/controllers/boards_controller.rb @@ -42,12 +42,19 @@ class BoardsController < ApplicationController elsif @course if (User.current.admin? || @course.is_public == 1 || (@course.is_public == 0 && User.current.member_of_course?(@course))) @boards = @course.boards.includes(:last_message => :author).all - @boards = [] << @boards[0] if @boards.any? - if @boards.size == 1 - @board = @boards.first - show and return + if @course.boards.empty? + @board = @course.boards.build + @board.name = " #{l(:label_borad_course) }" + @board.description = @course.name.to_s + @board.project_id = -1 + if @board.save + @boards = @course.boards.includes(:last_message => :author).all + end end - render :layout => 'base_courses' + if @boards.size == 1 + @board = @course.boards.first + end + show and return else render_403 end @@ -65,7 +72,7 @@ class BoardsController < ApplicationController 'replies' => "#{Message.table_name}.replies_count", 'updated_on' => "COALESCE(last_replies_messages.created_on, #{Message.table_name}.created_on)" - @topic_count = @board.topics.count + @topic_count = @board ? @board.topics.count : 0 if @project @topic_pages = Paginator.new @topic_count, per_page_option, params['page'] @topics = @board.topics. @@ -77,14 +84,13 @@ class BoardsController < ApplicationController preload(:author, {:last_reply => :author}). all elsif @course - board_topics = @board.topics. - reorder("#{Message.table_name}.sticky DESC"). + board_topics = @board ? @board.topics.reorder("#{Message.table_name}.sticky DESC"). includes(:last_reply). # limit(@topic_pages.per_page). # offset(@topic_pages.offset). order(sort_clause). preload(:author, {:last_reply => :author}). - all + all : [] @topics = paginateHelper board_topics,10 end diff --git a/app/views/layouts/base_courses.html.erb b/app/views/layouts/base_courses.html.erb index dc384834c..6993b6554 100644 --- a/app/views/layouts/base_courses.html.erb +++ b/app/views/layouts/base_courses.html.erb @@ -132,8 +132,8 @@ <% end %> \ No newline at end of file From b1e31ded0e13ff2ae739126617b617ee7a80eca4 Mon Sep 17 00:00:00 2001 From: sw <939547590@qq.com> Date: Thu, 23 Apr 2015 11:56:59 +0800 Subject: [PATCH 198/285] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=85=AC=E5=85=B1?= =?UTF-8?q?=E8=B4=B4=E5=90=A7=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/forums/show.html.erb | 2 +- app/views/memos/_reply_box.html.erb | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/app/views/forums/show.html.erb b/app/views/forums/show.html.erb index 8e50837ff..c105dc2b8 100644 --- a/app/views/forums/show.html.erb +++ b/app/views/forums/show.html.erb @@ -17,7 +17,7 @@

    (<%= l(:label_memos_max_length) %>)

    -

    +

    <%= l(:label_attachment_plural) %>
    <%= render :partial => 'attachments/form', :locals => {:container => @memo} %> diff --git a/app/views/memos/_reply_box.html.erb b/app/views/memos/_reply_box.html.erb index 27038255e..d86f35bc9 100644 --- a/app/views/memos/_reply_box.html.erb +++ b/app/views/memos/_reply_box.html.erb @@ -9,7 +9,8 @@ <%= f.kindeditor :content, :cols => 80, :rows => 15, :value => @content %> -

    +

    +

    <%= l(:label_attachment_plural) %>
    <%= render :partial => 'attachments/form' %> From de23c3c2a8dd8477c34d87ff0e415dd9c656b9c9 Mon Sep 17 00:00:00 2001 From: huang Date: Thu, 23 Apr 2015 14:04:22 +0800 Subject: [PATCH 199/285] =?UTF-8?q?=E9=85=8D=E7=BD=AE=E4=B8=AD=E5=AD=90?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E8=B0=83=E6=95=B4=20=E9=9A=94=E8=A1=8C?= =?UTF-8?q?=E6=8D=A2=E8=89=B2=E6=98=BE=E7=A4=BA=20=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E5=B7=A6=E5=AF=B9=E9=BD=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/application_helper.rb | 2 +- app/views/projects/settings/_new_members.html.erb | 12 ++++++------ .../projects/settings/_new_repositories.html.erb | 2 +- app/views/projects/settings/_new_versions.html.erb | 8 ++++---- public/stylesheets/project.css | 7 +++++-- public/stylesheets/public.css | 2 ++ 6 files changed, 19 insertions(+), 14 deletions(-) diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 20175dc57..484a3189c 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -633,7 +633,7 @@ module ApplicationHelper def principals_check_box_tags_li(name, principals) s = '' principals.each do |principal| - s << "

  • #{ check_box_tag name, principal.id, false, :id => nil } #{h link_to principal.userInfo, user_path( principal.id), :class => "c_blue" }
  • \n" + s << "
  • #{ check_box_tag name, principal.id, false, :id => nil } #{h link_to principal.userInfo, user_path( principal.id) }
  • \n" end s.html_safe end diff --git a/app/views/projects/settings/_new_members.html.erb b/app/views/projects/settings/_new_members.html.erb index faccfbeeb..0aa558014 100644 --- a/app/views/projects/settings/_new_members.html.erb +++ b/app/views/projects/settings/_new_members.html.erb @@ -12,19 +12,19 @@
    <% if members.any? %>
      -
    • <%= l(:label_user) %><%= l(:label_role_plural) %>
    • +
    • <%= l(:label_user) %><%= l(:label_role_plural) %>
    • <%= call_hook(:view_projects_settings_members_table_header, :project => @project) %> <% members.each do |member| %>
    • - <%= link_to_user_header member.principal,false,:class => "w90 c_orange fl" %> - + <%= link_to_user_header member.principal,false,:class => "w140_h c_orange fl" %> + <%= h member.roles.sort.collect(&:to_s).join(', ') %> <%= form_for(member, {:as => :membership, :remote => true, :url => membership_path(member), :method => :put, :html => {:id => "member-#{member.id}-roles-form", :class => 'hol'}} ) do |f| %> <% roles.each do |role| %> -
        +
          <%= check_box_tag 'membership[role_ids][]', role.id, member.roles.include?(role), :disabled => member.member_roles.detect { |mr| mr.role_id == role.id && !mr.inherited_from.nil? } %> @@ -32,7 +32,7 @@ <% end %> <%= hidden_field_tag 'membership[role_ids][]', '' %> -
          +
          <%= l(:button_change)%> @@ -46,7 +46,7 @@ 编辑 <%= delete_link membership_path(member), :remote => true, - :class => "c_dblue ml30 fl", + :class => "c_dblue ml15 fl", :data => (!User.current.admin? && member.include?(User.current) ? {:confirm => l(:text_own_membership_for_project_confirmation)} : {confirm: l(:label_delete_confirm)}) if member.deletable? %> <% end%> diff --git a/app/views/projects/settings/_new_repositories.html.erb b/app/views/projects/settings/_new_repositories.html.erb index 7eda0e473..13daa2c2b 100644 --- a/app/views/projects/settings/_new_repositories.html.erb +++ b/app/views/projects/settings/_new_repositories.html.erb @@ -19,7 +19,7 @@
    <%= link_to truncate(repository.identifier), ({:controller => 'repositories', :action => 'show', :id => @project, :repository_id => repository.identifier_param} if repository.identifier.present?), :class =>"c_blue" %> <%= checked_image repository.is_default? %>
    +
    <%= 'shared' if version.project != @project %> <%= link_to_version version %> <%= format_date(version.effective_date) %><%=h version.description %><%=h version.description %> <%= l("version_status_#{version.status}") %> + <%= link_to_if_authorized(h(truncate(version.wiki_page_title,:length=>20)), {:controller => 'wiki', :action => 'show', :project_id => version.project, diff --git a/public/stylesheets/project.css b/public/stylesheets/project.css index abd748dce..ea0114441 100644 --- a/public/stylesheets/project.css +++ b/public/stylesheets/project.css @@ -55,6 +55,9 @@ a:hover.btn_free{ background:#d63502;} a.invi_search_btn{ background:#15bccf; color:#fff; text-align: center; width:40px; height:22px;border:1px solid #15bccf; padding-top:2px; cursor:pointer;} a:hover.invi_search_btn{ background:#0da1b2; border:1px solid #0da1b2;} .rolebox{ margin:10px 0;} +.w180_h{ width:180px;overflow:hidden; white-space: nowrap; text-overflow:ellipsis; text-align:left;} +.w140_h{ width:135px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;text-align:left; padding-left:5px;} + /*问题跟踪*/ .problem_top{ margin:10px 0 ;} .problem_search_input{ border:1px solid #64bdd9; width:180px; height:24px; color:#9b9b9b; padding-left:5px; margin-bottom:5px;} @@ -392,8 +395,8 @@ blockquote { .members_left{ float:left; width:410px; margin-right:20px; text-align:center;} .members_left{} .members_left ul li{ height:30px; border-bottom:1px solid #E4E4E4; width:410px; padding-top:10px; } -.members_left ul li a{ float:left; text-align:center;} -.members_left ul li span{ float:left; text-align:center; color:#484747;} +.members_left ul li a{ float:left; text-align:left;} +.members_left ul li span{ float:left; text-align:center; color:#484747;text-align:left;} .w150{ text-align:center; width:150px;} .f_b{ font-weight: bold;} .members_right{ float:left; width:240px;} diff --git a/public/stylesheets/public.css b/public/stylesheets/public.css index 125a36064..1ab286c0d 100644 --- a/public/stylesheets/public.css +++ b/public/stylesheets/public.css @@ -410,3 +410,5 @@ div.flash.warning, .conflict { a.box_close{ display:block; float:right; width:16px; height:16px; background:url(../images/img_floatbox.png) 0 0 no-repeat;} a.box_close{background:url(../images/img_floatbox.png) -22px 0 no-repeat;} +/*文本左对齐*/ +.tl{text-align: left;} \ No newline at end of file From 75504139c93752a9688c798848afdd4819497f40 Mon Sep 17 00:00:00 2001 From: sw <939547590@qq.com> Date: Thu, 23 Apr 2015 15:25:04 +0800 Subject: [PATCH 200/285] =?UTF-8?q?=E5=88=A0=E9=99=A4=E8=AF=BE=E7=A8=8B?= =?UTF-8?q?=E7=95=99=E8=A8=80=E6=97=B6=E7=95=99=E8=A8=80=E6=95=B0=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E5=88=B7=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/words_controller.rb | 5 +++-- app/views/layouts/base_courses.html.erb | 2 +- app/views/words/destroy.js.erb | 4 +++- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/app/controllers/words_controller.rb b/app/controllers/words_controller.rb index 680a13963..3d6772ea8 100644 --- a/app/controllers/words_controller.rb +++ b/app/controllers/words_controller.rb @@ -81,9 +81,10 @@ class WordsController < ApplicationController @journal_destroyed = JournalsForMessage.delete_message(params[:object_id]) if @journal_destroyed.jour_type == "Bid" @bid = Bid.find(@journal_destroyed.jour_id) - end - if @bid @jours_count = @bid.journals_for_messages.where('m_parent_id IS NULL').count + elsif @journal_destroyed.jour_type == "Course" + @course = Course.find @journal_destroyed.jour_id + @jours_count = @course.journals_for_messages.where('m_parent_id IS NULL').count end respond_to do |format| format.js diff --git a/app/views/layouts/base_courses.html.erb b/app/views/layouts/base_courses.html.erb index 6993b6554..2a26ff59f 100644 --- a/app/views/layouts/base_courses.html.erb +++ b/app/views/layouts/base_courses.html.erb @@ -137,7 +137,7 @@
    - <%= link_to truncate(repository.identifier), ({:controller => 'repositories', :action => 'show', :id => @project, :repository_id => repository.identifier_param} if repository.identifier.present?), :class =>"c_blue" %> <%= checked_image repository.is_default? %> <%=h repository.scm_name %>