Refactor project list rendering
Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
This commit is contained in:
parent
c27c813311
commit
b54358b457
15 changed files with 118 additions and 93 deletions
|
@ -55,7 +55,6 @@ class Dispatcher
|
|||
new Activities()
|
||||
when 'dashboard:projects:starred'
|
||||
new Activities()
|
||||
new ProjectsList()
|
||||
when 'projects:commit:show'
|
||||
new Commit()
|
||||
new Diff()
|
||||
|
@ -70,7 +69,6 @@ class Dispatcher
|
|||
when 'groups:show'
|
||||
new Activities()
|
||||
shortcut_handler = new ShortcutsNavigation()
|
||||
new ProjectsList()
|
||||
when 'groups:group_members:index'
|
||||
new GroupMembers()
|
||||
new UsersSelect()
|
||||
|
@ -96,8 +94,6 @@ class Dispatcher
|
|||
when 'users:show'
|
||||
new User()
|
||||
new Activities()
|
||||
when 'admin:users:show'
|
||||
new ProjectsList()
|
||||
|
||||
switch path.first()
|
||||
when 'admin'
|
||||
|
|
|
@ -157,3 +157,40 @@
|
|||
white-space: nowrap;
|
||||
max-width: $max_width;
|
||||
}
|
||||
|
||||
/*
|
||||
* Base mixin for lists in GitLab
|
||||
*/
|
||||
@mixin basic-list {
|
||||
margin: 5px 0px;
|
||||
padding: 0px;
|
||||
|
||||
li {
|
||||
padding: 10px 0;
|
||||
border-bottom: 1px solid #EEE;
|
||||
overflow: hidden;
|
||||
display: block;
|
||||
margin: 0px;
|
||||
|
||||
&:last-child {
|
||||
border:none
|
||||
}
|
||||
|
||||
&.active {
|
||||
background: #f9f9f9;
|
||||
a {
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
|
||||
&.hide {
|
||||
display: none;
|
||||
}
|
||||
|
||||
&.light {
|
||||
a {
|
||||
color: #777;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -93,28 +93,12 @@ ol, ul {
|
|||
|
||||
/** light list with border-bottom between li **/
|
||||
ul.bordered-list {
|
||||
margin: 5px 0px;
|
||||
padding: 0px;
|
||||
li {
|
||||
padding: 5px 0;
|
||||
border-bottom: 1px solid #EEE;
|
||||
overflow: hidden;
|
||||
display: block;
|
||||
margin: 0px;
|
||||
&:last-child { border:none }
|
||||
&.active {
|
||||
background: #f9f9f9;
|
||||
a { font-weight: bold; }
|
||||
}
|
||||
|
||||
&.light {
|
||||
a { color: #777; }
|
||||
}
|
||||
}
|
||||
@include basic-list;
|
||||
|
||||
&.top-list {
|
||||
li:first-child {
|
||||
padding-top: 0;
|
||||
|
||||
h4, h5 {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
|
|
@ -334,23 +334,32 @@ pre.light-well {
|
|||
}
|
||||
}
|
||||
|
||||
.project-row {
|
||||
.project-full-name {
|
||||
font-weight: bold;
|
||||
font-size: 15px;
|
||||
}
|
||||
/*
|
||||
* Projects list rendered on dashboard and user page
|
||||
*/
|
||||
.projects-list {
|
||||
@include basic-list;
|
||||
|
||||
.project-description {
|
||||
color: #888;
|
||||
font-size: 13px;
|
||||
.project-row {
|
||||
.project-full-name {
|
||||
@include str-truncated;
|
||||
font-weight: bold;
|
||||
font-size: 15px;
|
||||
}
|
||||
|
||||
p {
|
||||
margin-bottom: 0;
|
||||
.project-description {
|
||||
color: #888;
|
||||
font-size: 13px;
|
||||
|
||||
p {
|
||||
@include str-truncated;
|
||||
margin-bottom: 0;
|
||||
color: #888;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.my-projects .project-row {
|
||||
padding: 10px 0;
|
||||
.panel .projects-list li {
|
||||
padding: 10px 15px;
|
||||
}
|
||||
|
|
|
@ -7,7 +7,4 @@
|
|||
= link_to new_project_path, class: 'btn btn-success' do
|
||||
New project
|
||||
|
||||
%ul.projects-list.bordered-list.my-projects
|
||||
- @projects.each do |project|
|
||||
%li.project-row
|
||||
= render partial: 'shared/project', locals: { project: project, avatar: true, stars: true }
|
||||
= render 'shared/projects/list', projects: @projects
|
||||
|
|
|
@ -17,8 +17,7 @@
|
|||
= link_to new_project_path, class: 'btn btn-success' do
|
||||
New project
|
||||
|
||||
= render 'shared/projects_list', projects: @projects,
|
||||
projects_limit: 20, stars: true, avatar: false
|
||||
= render 'shared/projects/list', projects: @projects, projects_limit: 20
|
||||
|
||||
- else
|
||||
%h3 You don't have starred projects yet
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
%ul.projects-list.bordered-list.my-projects.public-projects
|
||||
- projects.each do |project|
|
||||
%li.project-row
|
||||
= render partial: 'shared/project', locals: { project: project, avatar: true, stars: true }
|
||||
- unless projects.present?
|
||||
.nothing-here-block No such projects
|
||||
- if projects.any?
|
||||
.public-projects
|
||||
= render 'shared/projects/list', projects: projects
|
||||
- else
|
||||
.nothing-here-block
|
||||
No such projects
|
||||
|
|
|
@ -7,4 +7,4 @@
|
|||
= link_to new_project_path(namespace_id: @group.id), class: 'btn btn-success' do
|
||||
New project
|
||||
|
||||
= render 'shared/projects_list', projects: @projects, projects_limit: 20
|
||||
= render 'shared/projects/list', projects: @projects, projects_limit: 20
|
||||
|
|
|
@ -14,7 +14,11 @@
|
|||
%br
|
||||
.results.prepend-top-10
|
||||
.search-results
|
||||
= render partial: "search/results/#{@scope.singularize}", collection: @objects
|
||||
- if @scope == 'projects'
|
||||
.term
|
||||
= render 'shared/projects/list', projects: @objects
|
||||
- else
|
||||
= render partial: "search/results/#{@scope.singularize}", collection: @objects
|
||||
= paginate @objects, theme: 'gitlab'
|
||||
|
||||
:javascript
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
.search-result-row
|
||||
%h4
|
||||
= link_to [project.namespace.becomes(Namespace), project] do
|
||||
%span.term= project.name_with_namespace
|
||||
- if project.description.present?
|
||||
%span.light.term= project.description
|
|
@ -1,20 +0,0 @@
|
|||
= cache [project.namespace, project, controller.controller_name, controller.action_name] do
|
||||
= link_to project_path(project), class: dom_class(project) do
|
||||
- if avatar
|
||||
.dash-project-avatar
|
||||
= project_icon(project, alt: '', class: 'avatar project-avatar s40')
|
||||
%span.str-truncated.project-full-name
|
||||
%span.namespace-name
|
||||
- if project.namespace
|
||||
= project.namespace.human_name
|
||||
\/
|
||||
%span.project-name.filter-title
|
||||
= project.name
|
||||
- if stars
|
||||
%span.pull-right.light
|
||||
%i.fa.fa-star
|
||||
= project.star_count
|
||||
- if project.description.present?
|
||||
.project-description
|
||||
.str-truncated
|
||||
= markdown(project.description, pipeline: :description)
|
|
@ -1,17 +0,0 @@
|
|||
- projects_limit = 20 unless local_assigns[:projects_limit]
|
||||
- avatar = true unless local_assigns[:avatar] == false
|
||||
- stars = false unless local_assigns[:stars] == true
|
||||
%ul.well-list.projects-list
|
||||
- projects.each_with_index do |project, i|
|
||||
%li{class: (i >= projects_limit) ? 'project-row hide' : 'project-row'}
|
||||
= render "shared/project", project: project, avatar: avatar, stars: stars
|
||||
- if projects.blank?
|
||||
%li
|
||||
.nothing-here-block There are no projects here.
|
||||
- if projects.count > projects_limit
|
||||
%li.bottom
|
||||
%span.light
|
||||
#{projects_limit} of #{pluralize(projects.count, 'project')} displayed.
|
||||
%span
|
||||
= link_to '#', class: 'js-expand' do
|
||||
Show all
|
19
app/views/shared/projects/_list.html.haml
Normal file
19
app/views/shared/projects/_list.html.haml
Normal file
|
@ -0,0 +1,19 @@
|
|||
- projects_limit = 20 unless local_assigns[:projects_limit]
|
||||
- avatar = true unless local_assigns[:avatar] == false
|
||||
- stars = true unless local_assigns[:stars] == false
|
||||
|
||||
%ul.projects-list
|
||||
- projects.each_with_index do |project, i|
|
||||
- css_class = (i >= projects_limit) ? 'hide' : nil
|
||||
= render "shared/projects/project", project: project,
|
||||
avatar: avatar, stars: stars, css_class: css_class
|
||||
|
||||
- if projects.count > projects_limit
|
||||
%li.bottom.center
|
||||
.light
|
||||
#{projects_limit} of #{pluralize(projects.count, 'project')} displayed.
|
||||
= link_to '#', class: 'js-expand' do
|
||||
Show all
|
||||
|
||||
:coffeescript
|
||||
new ProjectsList()
|
23
app/views/shared/projects/_project.html.haml
Normal file
23
app/views/shared/projects/_project.html.haml
Normal file
|
@ -0,0 +1,23 @@
|
|||
- avatar = true unless local_assigns[:avatar] == false
|
||||
- stars = true unless local_assigns[:stars] == false
|
||||
- css_class = nil unless local_assigns[:css_class]
|
||||
%li.project-row{ class: css_class }
|
||||
= cache [project.namespace, project, controller.controller_name, controller.action_name, 'v2'] do
|
||||
= link_to project_path(project), class: dom_class(project) do
|
||||
- if avatar
|
||||
.dash-project-avatar
|
||||
= project_icon(project, alt: '', class: 'avatar project-avatar s40')
|
||||
%span.project-full-name
|
||||
%span.namespace-name
|
||||
- if project.namespace
|
||||
= project.namespace.human_name
|
||||
\/
|
||||
%span.project-name.filter-title
|
||||
= project.name
|
||||
- if stars
|
||||
%span.pull-right.light
|
||||
%i.fa.fa-star
|
||||
= project.star_count
|
||||
- if project.description.present?
|
||||
.project-description
|
||||
= markdown(project.description, pipeline: :description)
|
|
@ -1,13 +1,13 @@
|
|||
- if local_assigns.has_key?(:contributed_projects) && contributed_projects.present?
|
||||
.panel.panel-default.contributed-projects
|
||||
.panel-heading Projects contributed to
|
||||
= render 'shared/projects_list',
|
||||
= render 'shared/projects/list',
|
||||
projects: contributed_projects.sort_by(&:star_count).reverse,
|
||||
projects_limit: 5, stars: true, avatar: false
|
||||
|
||||
- if local_assigns.has_key?(:projects) && projects.present?
|
||||
.panel.panel-default
|
||||
.panel-heading Personal projects
|
||||
= render 'shared/projects_list',
|
||||
= render 'shared/projects/list',
|
||||
projects: projects.sort_by(&:star_count).reverse,
|
||||
projects_limit: 10, stars: true, avatar: false
|
||||
|
|
Loading…
Reference in a new issue