New project page improved. User profile improved. Show issues, participant on Milestone show page.

This commit is contained in:
gitlabhq 2012-04-24 21:49:34 +03:00
parent af99e4afe1
commit c9af8e7579
20 changed files with 200 additions and 117 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 257 B

View file

@ -111,6 +111,7 @@ table {
&.btn-primary { &.btn-primary {
background:$link_color; background:$link_color;
border-color: #2A79A3;
&:hover { &:hover {
background:$blue_link; background:$blue_link;
} }

View file

@ -64,12 +64,8 @@ table.highlighttable pre{
} }
.git-empty .highlight { .git-empty .highlight {
@include round-borders-all(4px);
background:#eee;
padding:5px;
//overflow-x:scroll;
pre{ pre{
padding:0; padding:15px;
line-height:2.0; line-height:2.0;
margin:0; margin:0;
font-family: 'Menlo', 'Courier New', 'andale mono','lucida console',monospace; font-family: 'Menlo', 'Courier New', 'andale mono','lucida console',monospace;

View file

@ -13,3 +13,28 @@
} }
} }
} }
.new_project,
.edit_project {
.project_name_holder {
input,
label {
font-size:16px;
line-height:20px;
padding:8px;
}
label {
color:#888;
}
.btn {
padding:6px;
margin-left:10px;
}
}
}
.new_project {
.field_with_errors {
display:inline;
}
}

View file

@ -81,11 +81,11 @@
} }
} }
.admin_link { .top_panel_ico {
width: 16px; width: 16px;
height: 16px; height: 16px;
padding: 5px; padding: 5px;
margin-right: 15px; margin-right:10px;
float:right; float:right;
} }

View file

@ -94,11 +94,11 @@
} }
} }
.admin_link { .top_panel_ico {
width: 16px; width: 16px;
height: 16px; height: 16px;
padding: 5px; padding: 5px;
margin-right: 15px; margin-right:10px;
float:right; float:right;
} }
} }

View file

@ -36,6 +36,9 @@ class MilestonesController < ApplicationController
end end
def show def show
@issues = @milestone.issues.opened.page(params[:page]).per(40)
@users = @milestone.participants
respond_to do |format| respond_to do |format|
format.html format.html
format.js format.js

View file

@ -9,6 +9,10 @@ class Milestone < ActiveRecord::Base
where("due_date > ? OR due_date IS NULL", Date.today) where("due_date > ? OR due_date IS NULL", Date.today)
end end
def participants
User.where(:id => issues.map(&:assignee_id))
end
def percent_complete def percent_complete
@percent_complete ||= begin @percent_complete ||= begin
total_i = self.issues.count total_i = self.issues.count

View file

@ -131,6 +131,11 @@ class User < ActiveRecord::Base
self.blocked = true self.blocked = true
save save
end end
def projects_limit_percent
return 100 if projects_limit.zero?
(my_own_projects.count.to_f / projects_limit) * 100
end
end end
# == Schema Information # == Schema Information
# #

View file

@ -1,24 +1,19 @@
%h3 %h3
Issues Issues
%small (assigned to you) %small (assigned to you)
%small.right #{@issues.total_count} issues
%br %br
%div#issues-table-holder.ui-box - if @issues.any?
%title - @issues.group_by(&:project).each do |group|
%ul#issues-table.unstyled %div.ui-box
- if @issues.any? - project = group[0]
- @issues.group_by(&:project).each do |group| %h5= project.name
%li.wll.smoke %ul.unstyled
- project = group[0]
= project.name
- group[1].each do |issue| - group[1].each do |issue|
= render(:partial => 'issues/show', :locals => {:issue => issue}) = render(:partial => 'issues/show', :locals => {:issue => issue})
%li.bottom %hr
.row = paginate @issues, :theme => "gitlab"
.span7= paginate @issues, :theme => "gitlab" - else
.span4.right %h4.padded
%span.cgray.right #{@issues.total_count} issues %center Nothing to show here
- else
%li
%p.padded Nothing to show here

View file

@ -1,24 +1,19 @@
%h3 %h3
Merge Requests Merge Requests
%small (authored or assigned to you) %small (authored or assigned to you)
%small.right #{@merge_requests.total_count} merge requests
%br %br
%div#merge_requests-table-holder.ui-box - if @merge_requests.any?
%title - @merge_requests.group_by(&:project).each do |group|
%ul#merge_requests-table.unstyled %ul.unstyled.ui-box
- if @merge_requests.any? - project = group[0]
- @merge_requests.group_by(&:project).each do |group| %h5= project.name
%li.wll.smoke - group[1].each do |merge_request|
- project = group[0] = render(:partial => 'merge_requests/merge_request', :locals => {:merge_request => merge_request})
= project.name %hr
- group[1].each do |merge_request| = paginate @merge_requests, :theme => "gitlab"
= render(:partial => 'merge_requests/merge_request', :locals => {:merge_request => merge_request})
%li.bottom
.row
.span7= paginate @merge_requests, :theme => "gitlab"
.span4.right
%span.cgray.right #{@merge_requests.total_count} merge requests
- else - else
%li %li
%p.padded Nothing to show here %p.padded Nothing to show here

View file

@ -11,8 +11,11 @@
.search .search
= form_tag search_path, :method => :get do |f| = form_tag search_path, :method => :get do |f|
= text_field_tag "search", nil, :placeholder => "Search", :class => "search-input" = text_field_tag "search", nil, :placeholder => "Search", :class => "search-input"
- if current_user.can_create_project?
= link_to new_project_path, :class => "top_panel_ico", :title => "Create New Project" do
= image_tag "new_project.png", :width => 16
- if current_user.is_admin? - if current_user.is_admin?
= link_to admin_root_path, :class => "admin_link", :title => "Admin area" do = link_to admin_root_path, :class => "top_panel_ico", :title => "Admin area" do
= image_tag "admin.PNG", :width => 16 = image_tag "admin.PNG", :width => 16
.account-box .account-box
= link_to profile_path, :class => "pic" do = link_to profile_path, :class => "pic" do

View file

@ -42,6 +42,30 @@
= preserve do = preserve do
= markdown @milestone.description = markdown @milestone.description
.row
.span6
%h4 Open Issues:
- @issues.each do |issue|
= link_to [@project, issue] do
%h5
= image_tag gravatar_icon(issue.assignee_email, 16), :width => "16"
&nbsp;
Issue ##{issue.id}
&ndash;
= truncate issue.title, :length => 50
%small
updated at
= issue.updated_at.stamp("Aug 25, 2011")
%br
= paginate @issues, :theme => "gitlab"
.span6
%h4 Participants:
- @users.each do |user|
%h5
= image_tag gravatar_icon(user.email, 16), :width => "16"
&nbsp;
= user.name
:javascript :javascript
$(function() { $(function() {

View file

@ -6,7 +6,7 @@
%hr %hr
= form_for @user, :url => profile_password_path, :method => :put do |f| = form_for @user, :url => profile_password_path, :method => :put do |f|
.data .data
.alert-message.block-message.warning .alert.alert-info
%p After successfull password update you will be redirected to login page where you should login with new password %p After successfull password update you will be redirected to login page where you should login with new password
-if @user.errors.any? -if @user.errors.any?
.alert-message.block-message.error .alert-message.block-message.error
@ -33,7 +33,7 @@
%hr %hr
= form_for @user, :url => profile_reset_private_token_path, :method => :put do |f| = form_for @user, :url => profile_reset_private_token_path, :method => :put do |f|
.data .data
.alert-message.block-message.warning .alert.alert-info
%p Private token used to access application resources without authentication. %p Private token used to access application resources without authentication.
%hr %hr
%p * required for rss feed %p * required for rss feed

View file

@ -1,26 +1,12 @@
.row .profile_avatar_holder
.span8 = image_tag gravatar_icon(@user.email, 90), :class => "styled_image"
.profile_avatar_holder %h3
= image_tag gravatar_icon(@user.email, 90), :class => "styled_image" = @user.name
%h3 %br
= @user.name %small
%br = @user.email
%small
= @user.email
.span4.right
%div
%div
%h5.cgray
Personal projects:
%span.right
%span= current_user.my_own_projects.count
of
%span= current_user.projects_limit
%h5.cgray
SSH public keys:
%span.right
%span= current_user.keys.count
%hr %hr
= form_for @user, :url => profile_update_path, :method => :put, :html => { :class => "edit_user form-horizontal" } do |f| = form_for @user, :url => profile_update_path, :method => :put, :html => { :class => "edit_user form-horizontal" } do |f|
@ -41,6 +27,8 @@
.controls .controls
= f.text_field :email, :class => "input-xlarge" = f.text_field :email, :class => "input-xlarge"
%span.help-block We also use email for avatar detection. %span.help-block We also use email for avatar detection.
%hr
.control-group .control-group
= f.label :skype, :class => "control-label" = f.label :skype, :class => "control-label"
.controls= f.text_field :skype, :class => "input-xlarge" .controls= f.text_field :skype, :class => "input-xlarge"
@ -56,12 +44,27 @@
= f.text_area :bio, :rows => 6, :class => "input-xlarge", :maxlength => 250 = f.text_area :bio, :rows => 6, :class => "input-xlarge", :maxlength => 250
%span.help-block Tell us about yourself in fewer than 250 characters. %span.help-block Tell us about yourself in fewer than 250 characters.
.span5.right .span5.right
%p.alert-message.block-message
%p.alert.alert-info
%strong Tip: %strong Tip:
You can change your avatar at gravatar.com You can change your avatar at gravatar.com
%h4
Personal projects:
%small.right
%span= current_user.my_own_projects.count
of
%span= current_user.projects_limit
.progress
.bar{:style => "width: #{current_user.projects_limit_percent}%;"}
%h4
SSH public keys:
%small.right
%span= current_user.keys.count
= link_to "Add Public Key", new_key_path, :class => "btn small right"
.form-actions .form-actions
= f.submit 'Save', :class => "btn-primary btn" = f.submit 'Save', :class => "btn-primary btn"
-#= link_to "New project", new_project_path, :class => "btn small padded"
-#= link_to "New public key", new_key_path, :class => "btn small"

View file

@ -4,31 +4,39 @@
%ul %ul
- @project.errors.full_messages.each do |msg| - @project.errors.full_messages.each do |msg|
%li= msg %li= msg
.clearfix .clearfix.project_name_holder
= f.label :name = f.label :name do
.input= f.text_field :name, :placeholder => "Example Project" Project name is
.clearfix
= f.label :path do
Path
.input .input
.input-prepend = f.text_field :name, :placeholder => "Example Project", :class => "xxlarge"
%span.add-on= "#{GIT_HOST["git_user"]}@#{GIT_HOST["host"]}:"
= f.text_field :path, :placeholder => "example_project", :disabled => !@project.new_record?
.clearfix
= f.label :code do
Code
.input
.input-prepend
%span.add-on= web_app_url
= f.text_field :code, :placeholder => "example"
- unless @project.new_record? || @project.heads.empty? %hr
.alert.alert-info
%h5 Advanced settings:
.clearfix .clearfix
= f.label :default_branch, "Default Branch" = f.label :path do
.input= f.select(:default_branch, @project.heads.map(&:name), {}, :style => "width:210px;") Git Clone
.input
.input-prepend
%span.add-on= "#{GIT_HOST["git_user"]}@#{GIT_HOST["host"]}:"
= f.text_field :path, :placeholder => "example_project", :disabled => !@project.new_record?
%span.add-on= ".git"
.clearfix
= f.label :code do
URL
.input
.input-prepend
%span.add-on= web_app_url
= f.text_field :code, :placeholder => "example"
.alert-message.block-message.warning - unless @project.new_record? || @project.heads.empty?
%h5 Features .clearfix
= f.label :default_branch, "Default Branch"
.input= f.select(:default_branch, @project.heads.map(&:name), {}, :style => "width:210px;")
- unless @project.new_record?
.alert.alert-info
%h5 Features:
.clearfix .clearfix
= f.label :issues_enabled, "Issues" = f.label :issues_enabled, "Issues"
@ -46,12 +54,6 @@
= f.label :wiki_enabled, "Wiki" = f.label :wiki_enabled, "Wiki"
.input= f.check_box :wiki_enabled .input= f.check_box :wiki_enabled
.clearfix
= f.label :description
.input
= f.text_area :description, :placeholder => "project description", :class => "xxlarge", :rows => 5
%p.hint Markdown is enabled.
%br %br
.actions .actions

View file

@ -0,0 +1,29 @@
= form_for(@project, :remote => true) do |f|
- if @project.errors.any?
.alert-message.block-message.error
%span= @project.errors.full_messages.first
.clearfix.project_name_holder
= f.label :name do
Project name is
.input
= f.text_field :name, :placeholder => "Example Project", :class => "xxlarge"
= f.submit 'Create project', :class => "btn primary"
%hr
.alert.alert-info
%h5 Advanced settings:
.clearfix
= f.label :path do
Git Clone
.input
.input-prepend
%span.add-on= "#{GIT_HOST["git_user"]}@#{GIT_HOST["host"]}:"
= f.text_field :path, :placeholder => "example_project", :disabled => !@project.new_record?
%span.add-on= ".git"
.clearfix
= f.label :code do
URL
.input
.input-prepend
%span.add-on= web_app_url
= f.text_field :code, :placeholder => "example"

View file

@ -4,5 +4,5 @@
- else - else
:plain :plain
$('.project_new_holder').show(); $('.project_new_holder').show();
$("#new_project").replaceWith("#{escape_javascript(render('form'))}"); $("#new_project").replaceWith("#{escape_javascript(render('new_form'))}");
$('.ajax_loader').hide(); $('.ajax_loader').hide();

View file

@ -1,7 +1,8 @@
.project_new_holder .project_new_holder
%h3 New Project %h3
New Project
%hr %hr
= render 'form' = render 'new_form'
%div.ajax_loader.hide %div.ajax_loader.hide
%center %center
%div.padded= image_tag "ajax_loader.gif" %div.padded= image_tag "ajax_loader.gif"

View file

@ -34,19 +34,17 @@ describe "Projects" do
end end
it "should have labels for new project" do it "should have labels for new project" do
page.should have_content("Name") page.should have_content("Project name is")
page.should have_content("Path")
page.should have_content("Description")
end end
end end
describe "POST /projects" do describe "POST /projects" do
before do before do
visit new_project_path visit new_project_path
fill_in 'Name', :with => 'NewProject' fill_in 'project_name', :with => 'NewProject'
fill_in 'Code', :with => 'NPR' fill_in 'project_code', :with => 'NPR'
fill_in 'Path', :with => 'newproject' fill_in 'project_path', :with => 'newproject'
expect { click_button "Save" }.to change { Project.count }.by(1) expect { click_button "Create project" }.to change { Project.count }.by(1)
@project = Project.last @project = Project.last
end end
@ -120,9 +118,9 @@ describe "Projects" do
end end
it "should have labels for new project" do it "should have labels for new project" do
page.should have_content("Name") page.should have_content("Project name is")
page.should have_content("Path") page.should have_content("Advanced settings:")
page.should have_content("Description") page.should have_content("Features:")
end end
end end
@ -133,9 +131,8 @@ describe "Projects" do
visit edit_project_path(@project) visit edit_project_path(@project)
fill_in 'Name', :with => 'Awesome' fill_in 'project_name', :with => 'Awesome'
fill_in 'Path', :with => 'gitlabhq' fill_in 'project_path', :with => 'gitlabhq'
fill_in 'Description', :with => 'Awesome project'
click_button "Save" click_button "Save"
@project = @project.reload @project = @project.reload
end end