Merge branch 'improve/public_area' of /home/git/repositories/gitlab/gitlabhq
This commit is contained in:
commit
be17a32d04
11 changed files with 148 additions and 17 deletions
|
@ -81,9 +81,11 @@ ul.nav.nav-projects-tabs {
|
|||
|
||||
.public-projects {
|
||||
li {
|
||||
margin-top: 8px;
|
||||
margin-bottom: 5px;
|
||||
border-bottom: 1px solid #eee;
|
||||
.project-title {
|
||||
font-size: 14px;
|
||||
line-height: 2;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
.description {
|
||||
margin-left: 15px;
|
||||
|
@ -92,6 +94,14 @@ ul.nav.nav-projects-tabs {
|
|||
}
|
||||
}
|
||||
|
||||
.public-clone {
|
||||
background: #333;
|
||||
color: #f5f5f5;
|
||||
padding: 5px 10px;
|
||||
margin: 1px;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
.new-tag-btn {
|
||||
position: relative;
|
||||
top: -5px;
|
||||
|
|
|
@ -10,4 +10,15 @@ class Public::ProjectsController < ApplicationController
|
|||
@projects = @projects.search(params[:search]) if params[:search].present?
|
||||
@projects = @projects.includes(:namespace).order("namespaces.path, projects.name ASC").page(params[:page]).per(20)
|
||||
end
|
||||
|
||||
def show
|
||||
@project = Project.public_only.find_with_namespace(params[:id])
|
||||
render_404 and return unless @project
|
||||
|
||||
@repository = @project.repository
|
||||
@recent_tags = @repository.tags.first(10)
|
||||
|
||||
@commit = @repository.commit(params[:ref])
|
||||
@tree = Tree.new(@repository, @commit.id)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
%html{ lang: "en"}
|
||||
= render "layouts/head", title: "Error"
|
||||
%body{class: "#{app_theme} application"}
|
||||
= render "layouts/head_panel", title: ""
|
||||
= render "layouts/head_panel", title: "" if current_user
|
||||
= render "layouts/flash"
|
||||
.container
|
||||
.content
|
||||
|
|
|
@ -10,10 +10,16 @@
|
|||
.container
|
||||
%div.app_logo
|
||||
%span.separator
|
||||
= link_to root_path, class: "home" do
|
||||
= link_to public_root_path, class: "home" do
|
||||
%h1 GITLAB
|
||||
%span.separator
|
||||
%h1.project_name Public Projects
|
||||
%ul.nav
|
||||
%li
|
||||
%a
|
||||
%div.hide.turbolink-spinner
|
||||
%i.icon-refresh.icon-spin
|
||||
Loading...
|
||||
|
||||
.container.navless-container
|
||||
.content
|
||||
|
|
5
app/views/public/projects/_tree.html.haml
Normal file
5
app/views/public/projects/_tree.html.haml
Normal file
|
@ -0,0 +1,5 @@
|
|||
- if tree.readme
|
||||
= render "projects/tree/readme", readme: tree.readme
|
||||
- else
|
||||
.alert
|
||||
%h3.nothing_here_message This project does not have README file
|
|
@ -11,22 +11,20 @@
|
|||
= search_field_tag :search, params[:search], placeholder: "gitlab-ci", class: "span3 search-text-input", id: "projects_search"
|
||||
= submit_tag 'Search', class: "btn btn-primary wide"
|
||||
|
||||
%hr
|
||||
|
||||
.public-projects
|
||||
%ul.unstyled
|
||||
%ul.bordered-list
|
||||
- @projects.each do |project|
|
||||
%li.clearfix
|
||||
%div
|
||||
%i.icon-share
|
||||
- if current_user
|
||||
= link_to_project project
|
||||
- else
|
||||
%li
|
||||
.project-title
|
||||
%i.icon-share.cgray
|
||||
= link_to public_project_path(project) do
|
||||
= project.name_with_namespace
|
||||
.pull-right
|
||||
%pre.dark.tiny git clone #{project.http_url_to_repo}
|
||||
%div.description
|
||||
= project.description
|
||||
%pre.public-clone git clone #{project.http_url_to_repo}
|
||||
|
||||
- if project.description.present?
|
||||
%div.description
|
||||
= project.description
|
||||
- unless @projects.present?
|
||||
%h3.nothing_here_message No public projects
|
||||
|
||||
|
|
46
app/views/public/projects/show.html.haml
Normal file
46
app/views/public/projects/show.html.haml
Normal file
|
@ -0,0 +1,46 @@
|
|||
%h3.page-title
|
||||
= @project.name_with_namespace
|
||||
.pull-right
|
||||
%pre.public-clone git clone #{@project.http_url_to_repo}
|
||||
.pull-right
|
||||
- if current_user
|
||||
= link_to 'Browse project', @project, class: 'btn btn-create append-right-10'
|
||||
|
||||
|
||||
%div
|
||||
= link_to public_root_path do
|
||||
← To projects list
|
||||
.pull-right
|
||||
%span.light= @project.description
|
||||
|
||||
%br
|
||||
.row
|
||||
.span9
|
||||
= render 'tree', tree: @tree
|
||||
.span3
|
||||
%h5 Repository:
|
||||
%div
|
||||
%p
|
||||
%span.light Bare size is
|
||||
#{@project.repository.size} MB
|
||||
|
||||
%p
|
||||
= pluralize(@repository.round_commit_count, 'commit')
|
||||
%p
|
||||
= pluralize(@repository.branch_names.count, 'branch')
|
||||
%p
|
||||
= pluralize(@repository.tag_names.count, 'tag')
|
||||
|
||||
- if @recent_tags.present?
|
||||
%hr
|
||||
%h5 Most Recent Tags:
|
||||
%ul.unstyled
|
||||
- @recent_tags.each do |tag|
|
||||
%li
|
||||
%p
|
||||
%i.icon-tag
|
||||
%strong= tag.name
|
||||
%small.light.pull-right
|
||||
%i.icon-calendar
|
||||
= time_ago_in_words(tag.commit.committed_date)
|
||||
ago
|
|
@ -55,6 +55,8 @@ Gitlab::Application.routes.draw do
|
|||
#
|
||||
namespace :public do
|
||||
resources :projects, only: [:index]
|
||||
resources :projects, constraints: { id: /[a-zA-Z.\/0-9_\-]+/ }, only: [:show]
|
||||
|
||||
root to: "projects#index"
|
||||
end
|
||||
|
||||
|
|
14
features/public/public_projects.feature
Normal file
14
features/public/public_projects.feature
Normal file
|
@ -0,0 +1,14 @@
|
|||
Feature: Public Projects Feature
|
||||
Background:
|
||||
Given public project "Community"
|
||||
And private project "Enterprise"
|
||||
|
||||
Scenario: I visit public area
|
||||
When I visit the public projects area
|
||||
Then I should see project "Community"
|
||||
And I should not see project "Enterprise"
|
||||
|
||||
Scenario: I visit public project page
|
||||
When I visit public page for "Community" project
|
||||
Then I should see public project details
|
||||
And I should see project readme
|
35
features/steps/public/projects_feature.rb
Normal file
35
features/steps/public/projects_feature.rb
Normal file
|
@ -0,0 +1,35 @@
|
|||
class Spinach::Features::PublicProjectsFeature < Spinach::FeatureSteps
|
||||
include SharedPaths
|
||||
|
||||
step 'I should see project "Community"' do
|
||||
page.should have_content "Community"
|
||||
end
|
||||
|
||||
step 'I should not see project "Enterprise"' do
|
||||
page.should_not have_content "Enterprise"
|
||||
end
|
||||
|
||||
step 'I should see public project details' do
|
||||
page.should have_content '32 branches'
|
||||
page.should have_content '16 tags'
|
||||
end
|
||||
|
||||
step 'I should see project readme' do
|
||||
page.should have_content 'README.md'
|
||||
end
|
||||
|
||||
step 'public project "Community"' do
|
||||
create :project_with_code, name: 'Community', public: true
|
||||
end
|
||||
|
||||
step 'private project "Enterprise"' do
|
||||
create :project, name: 'Enterprise'
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def project
|
||||
@project ||= Project.find_by_name("Community")
|
||||
end
|
||||
end
|
||||
|
|
@ -275,6 +275,10 @@ module SharedPaths
|
|||
visit public_root_path
|
||||
end
|
||||
|
||||
step 'I visit public page for "Community" project' do
|
||||
visit public_project_path(Project.find_by_name("Community"))
|
||||
end
|
||||
|
||||
# ----------------------------------------
|
||||
# Snippets
|
||||
# ----------------------------------------
|
||||
|
|
Loading…
Reference in a new issue