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 {
background:$link_color;
border-color: #2A79A3;
&:hover {
background:$blue_link;
}

View file

@ -64,12 +64,8 @@ table.highlighttable pre{
}
.git-empty .highlight {
@include round-borders-all(4px);
background:#eee;
padding:5px;
//overflow-x:scroll;
pre{
padding:0;
padding:15px;
line-height:2.0;
margin:0;
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;
height: 16px;
padding: 5px;
margin-right: 15px;
margin-right:10px;
float:right;
}

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -11,8 +11,11 @@
.search
= form_tag search_path, :method => :get do |f|
= 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?
= 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
.account-box
= link_to profile_path, :class => "pic" do

View file

@ -42,6 +42,30 @@
= preserve do
= 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
$(function() {

View file

@ -6,7 +6,7 @@
%hr
= form_for @user, :url => profile_password_path, :method => :put do |f|
.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
-if @user.errors.any?
.alert-message.block-message.error
@ -33,7 +33,7 @@
%hr
= form_for @user, :url => profile_reset_private_token_path, :method => :put do |f|
.data
.alert-message.block-message.warning
.alert.alert-info
%p Private token used to access application resources without authentication.
%hr
%p * required for rss feed

View file

@ -1,26 +1,12 @@
.row
.span8
.profile_avatar_holder
= image_tag gravatar_icon(@user.email, 90), :class => "styled_image"
%h3
= @user.name
%br
%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
.profile_avatar_holder
= image_tag gravatar_icon(@user.email, 90), :class => "styled_image"
%h3
= @user.name
%br
%small
= @user.email
%hr
= form_for @user, :url => profile_update_path, :method => :put, :html => { :class => "edit_user form-horizontal" } do |f|
@ -41,6 +27,8 @@
.controls
= f.text_field :email, :class => "input-xlarge"
%span.help-block We also use email for avatar detection.
%hr
.control-group
= f.label :skype, :class => "control-label"
.controls= f.text_field :skype, :class => "input-xlarge"
@ -56,12 +44,27 @@
= f.text_area :bio, :rows => 6, :class => "input-xlarge", :maxlength => 250
%span.help-block Tell us about yourself in fewer than 250 characters.
.span5.right
%p.alert-message.block-message
%p.alert.alert-info
%strong Tip:
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
= 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
- @project.errors.full_messages.each do |msg|
%li= msg
.clearfix
= f.label :name
.input= f.text_field :name, :placeholder => "Example Project"
.clearfix
= f.label :path do
Path
.clearfix.project_name_holder
= f.label :name do
Project name is
.input
.input-prepend
%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"
= f.text_field :name, :placeholder => "Example Project", :class => "xxlarge"
- unless @project.new_record? || @project.heads.empty?
%hr
.alert.alert-info
%h5 Advanced settings:
.clearfix
= f.label :default_branch, "Default Branch"
.input= f.select(:default_branch, @project.heads.map(&:name), {}, :style => "width:210px;")
= 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"
.alert-message.block-message.warning
%h5 Features
- unless @project.new_record? || @project.heads.empty?
.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
= f.label :issues_enabled, "Issues"
@ -46,12 +54,6 @@
= f.label :wiki_enabled, "Wiki"
.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
.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
:plain
$('.project_new_holder').show();
$("#new_project").replaceWith("#{escape_javascript(render('form'))}");
$("#new_project").replaceWith("#{escape_javascript(render('new_form'))}");
$('.ajax_loader').hide();

View file

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

View file

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