diff --git a/.gitignore b/.gitignore index f98b0074d..7f6472601 100644 --- a/.gitignore +++ b/.gitignore @@ -20,4 +20,7 @@ crash.log config/newrelic.yml config/deploy/*.rb config/deploy.rb -*.swo +.swo +.swn +.ruby-gemset +.ruby-version \ No newline at end of file diff --git a/app/assets/images/bg_blue.png b/app/assets/images/bg_blue.png new file mode 100644 index 000000000..ecfede360 Binary files /dev/null and b/app/assets/images/bg_blue.png differ diff --git a/app/assets/images/profile-hover.png b/app/assets/images/profile-hover.png new file mode 100644 index 000000000..09427d06b Binary files /dev/null and b/app/assets/images/profile-hover.png differ diff --git a/app/assets/stylesheets/application.scss b/app/assets/stylesheets/application.scss index c908583cb..f54b1889b 100644 --- a/app/assets/stylesheets/application.scss +++ b/app/assets/stylesheets/application.scss @@ -4,3 +4,4 @@ @import "design/common"; @import "design/custom"; @import "design/build_lists_monitoring"; +@import "design/profile"; diff --git a/app/assets/stylesheets/design/custom.scss b/app/assets/stylesheets/design/custom.scss index b583bf3be..37ee3d4ee 100644 --- a/app/assets/stylesheets/design/custom.scss +++ b/app/assets/stylesheets/design/custom.scss @@ -1918,7 +1918,7 @@ table#myTable thead tr.search th form.button_to div input { } article .activity .top { - + .created { margin-left: 50px; span, a { @@ -1941,7 +1941,7 @@ article .activity .top { margin: 10px -7px; border-left: none; border-right: none; - } + } } #assigned-container { @@ -2058,7 +2058,7 @@ a.button.reject_publish, a.button.create_container { border-left: 12px solid #dcecfa; float: left; } - } + } } @@ -2105,37 +2105,3 @@ table tbody { cursor: default; } } - -.row { - .span3.profile { - .avatar { - float: left; - width: 81px; - height: 81px; - } - .base_info { - float: left; - width: 134px; - h3 { - margin: 0 0 0 10px; - } - p { - height: 35px; - margin-left: 10px; - } - a { - margin: 16px 0 0 10px; - } - } - p.first { - margin-top: 10px; - } - p.info { - max-width: 220px; - } - } -} - -hr.profile_line { - margin-top: 20px; -} \ No newline at end of file diff --git a/app/assets/stylesheets/design/profile.scss b/app/assets/stylesheets/design/profile.scss new file mode 100644 index 000000000..1c351ac40 --- /dev/null +++ b/app/assets/stylesheets/design/profile.scss @@ -0,0 +1,146 @@ +.row { + .span3.profile { + .avatar { + float: left; + width: 81px; + height: 81px; + } + .base_info { + float: left; + width: 134px; + h3 { + margin: 0 0 0 10px; + } + p { + height: 35px; + margin-left: 10px; + } + a { + margin: 16px 0 0 10px; + } + } + p.first { + margin-top: 10px; + } + p.info { + max-width: 220px; + } + } +} +hr.profile_line { + margin-top: 20px; + margin: 20px 0 20px 0; + width: 870px; +} +.profile-content { + border: 5px solid #D4D4D4; + div.search { + //background: none repeat scroll 0 0 #FFFFFF; + border: 2px solid #D4D4D4; + float: left; + margin: 15px 10px; + width: 837px; + } + div.search div.pic { + background: url("/assets/search-button.png") repeat scroll 0 0 transparent; + float: left; + height: 22px; + width: 24px; + } + div.search div.field { + float: left; + margin: -1px 0 0; + } + + div.search div.field input { + background: none repeat scroll 0 0 transparent; + border: medium none; + font-family: Arial; + font-size: 12px; + height: 18px; + padding: 2px 0 0; + width: 132px; + } + div.search div.field input.gray { + color: #CFCFCF; + } + div.search div.field input.black { + color: #333333; + } + table { + border: none; + border-collapse:collapse; + margin: 0 9px 10px 9px; + width: 844px; + th { + padding-left: 10px; + .project-link { + margin-top: 5px; + } + } + tr.odd { + } + tr.even { + background: #EDEDED; + } + .row-fluid { + max-height: 16px; + .span3 { + font-size: 10px; + font-weight: normal; + max-height: 16px; + min-height: 16px; + } + .span3.datetime_moment { + margin-right: 15px; + color: gray; + } + } + } + .span12.content { + background: url(/assets/bg_blue.png); + height: 30px; + margin-bottom: 0px; + nav { + ul { + list-style: none; + padding-left: 0; + margin: 4px 0 0 5px; + li { + text-decoration: none; + padding: 0 10px 6px 0; + a { + color: white; + font-weight: bold; + font-size: 14px; + padding: 0 10px 9px 10px; + } + a.active { + background: image-url("profile-hover.png") repeat-x scroll 0 100% transparent; + } + } + } + } + } + .span12.sub-menu { + height: 30px; + background: #EDEDED; + margin: 0; + box-shadow: none; + padding-left: 0px; + nav { + ul { + list-style: none; + padding: 0; + margin: 6px 0 0 5px; + a { + padding: 0 10px 9px 10px; + } + a.active { + background: image-url("profile-hover.png") repeat-x scroll 0 100% transparent; + } + } + } + } +} + diff --git a/app/controllers/groups/profile_controller.rb b/app/controllers/groups/profile_controller.rb index b6fb5000b..266c528b1 100644 --- a/app/controllers/groups/profile_controller.rb +++ b/app/controllers/groups/profile_controller.rb @@ -11,7 +11,7 @@ class Groups::ProfileController < Groups::BaseController def show @projects = @group.projects.opened.search(params[:search]).recent - .paginate(:page => params[:page], :per_page => 25) + .paginate(:page => params[:page], :per_page => 24) end def new diff --git a/app/controllers/users/profile_controller.rb b/app/controllers/users/profile_controller.rb index 80a1599df..b19d1b047 100644 --- a/app/controllers/users/profile_controller.rb +++ b/app/controllers/users/profile_controller.rb @@ -4,6 +4,6 @@ class Users::ProfileController < Users::BaseController def show @projects = @user.projects.opened.search(params[:search]).recent - .paginate(:page => params[:page], :per_page => 25) + .paginate(:page => params[:page], :per_page => 24) end end diff --git a/app/helpers/commit_helper.rb b/app/helpers/commit_helper.rb index 5110b2e9c..9fb195721 100644 --- a/app/helpers/commit_helper.rb +++ b/app/helpers/commit_helper.rb @@ -1,6 +1,5 @@ # -*- encoding : utf-8 -*- module CommitHelper - def render_commit_stats(stats) res = [""] ind=0 @@ -44,4 +43,14 @@ module CommitHelper u = User.where(:email => email).first u.present? ? link_to(name, user_path(u)) : mail_to(email, name) end + + def commits_pluralize(commits_count) + Russian.p(commits_count, *commits_pluralization_arr) + end + + protected + + def commits_pluralization_arr + pluralize ||= t('layout.commits.pluralize').map {|base, title| title.to_s} + end end diff --git a/app/views/home/partials/_git_new_push_notification.haml b/app/views/home/partials/_git_new_push_notification.haml index d144beed8..f9553f91f 100644 --- a/app/views/home/partials/_git_new_push_notification.haml +++ b/app/views/home/partials/_git_new_push_notification.haml @@ -15,6 +15,6 @@ = commit[1] %br - if defined? other_commits - -pluralize = t('layout.commits.pluralize').map {|base, title| title.to_s} %br - =link_to t('notifications.bodies.more_commits', :count => other_commits_count, :commits => Russian.p(other_commits_count, *pluralize)), diff_path(project_owner, project_name, :diff => other_commits) + =link_to t('notifications.bodies.more_commits', :count => other_commits_count, :commits => commits_pluralize(other_commits_count)), + diff_path(project_owner, project_name, :diff => other_commits) diff --git a/app/views/shared/_profile.html.haml b/app/views/shared/_profile.html.haml index 119a93076..1c87bbe62 100644 --- a/app/views/shared/_profile.html.haml +++ b/app/views/shared/_profile.html.haml @@ -35,16 +35,23 @@ %hr.profile_line{:color => 'dfe8ef', :size => '3'} -.content - %h4= t("layout.projects.public_projects_list") + ":" - %p - =form_tag search_path, :id => 'filter_projects', :method => :get do - =tracker_search_field(:search, t('layout.find_project')) - %br - %p - - projects.each do |project| - = link_to project.name, project - %br - %br - = will_paginate projects - %br +.row-fluid.profile-content + .span12.content + %nav + %ul + %li + = link_to t('layout.projects.list_header'), '#', :class => 'projects active' + .span12.sub-menu + %nav + %ul + %li= link_to t('layout.projects.public'), '#', :class => "public-projects #{@public ? 'active' : ''}" + %li= link_to t('layout.projects.private'), '#', :class => "private-projects #{!@public ? 'active' : ''}" + .search + .pic + .field= text_field_tag 'query', @query, :placeholder => t('layout.find_project') + + %table.profile-table + %tbody= render 'shared/profile_projects', :projects => projects +%br += will_paginate projects + diff --git a/app/views/shared/_profile_projects.html.haml b/app/views/shared/_profile_projects.html.haml new file mode 100644 index 000000000..3762c49a7 --- /dev/null +++ b/app/views/shared/_profile_projects.html.haml @@ -0,0 +1,11 @@ +- pr_groups = projects.in_groups(2) +- pr_groups[0].each_with_index do |project, ind| + %tr{:class => ind.odd? ? 'odd' : 'even'} + - [project, pr_groups[1][ind]].each do |project| + %th + - if project.present? + .project-link= link_to project.name, project + .row-fluid + = datetime_moment project.updated_at, :class => :span3 + - commits_count = project.total_commits_count + .span3= "#{commits_count > 10000 ? '10000+' : commits_count} #{commits_pluralize(commits_count)}" diff --git a/config/locales/models/project.en.yml b/config/locales/models/project.en.yml index 542571860..d616729d1 100644 --- a/config/locales/models/project.en.yml +++ b/config/locales/models/project.en.yml @@ -71,6 +71,9 @@ en: current_commit: Current commit files_in_project: Files in + public: Public + private: Private + flash: project: saved: Project saved diff --git a/config/locales/models/project.ru.yml b/config/locales/models/project.ru.yml index 560f96151..5360e237c 100644 --- a/config/locales/models/project.ru.yml +++ b/config/locales/models/project.ru.yml @@ -71,6 +71,9 @@ ru: cloning: Клонирование этого репозитория remote: Добавление этого репозитория как удаленного к существующему локальному репозиторию + public: Публичные + private: Приватные + flash: project: saved: Проект успешно сохранен diff --git a/lib/modules/models/git.rb b/lib/modules/models/git.rb index 032d8bb57..246652074 100644 --- a/lib/modules/models/git.rb +++ b/lib/modules/models/git.rb @@ -115,6 +115,11 @@ module Modules repo.branches.count == 0 end + def total_commits_count + return 0 if is_empty? + %x(cd #{path} && git rev-list --all | wc -l).to_i + end + protected def build_path(dir)