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()
|
new Activities()
|
||||||
when 'dashboard:projects:starred'
|
when 'dashboard:projects:starred'
|
||||||
new Activities()
|
new Activities()
|
||||||
new ProjectsList()
|
|
||||||
when 'projects:commit:show'
|
when 'projects:commit:show'
|
||||||
new Commit()
|
new Commit()
|
||||||
new Diff()
|
new Diff()
|
||||||
|
@ -70,7 +69,6 @@ class Dispatcher
|
||||||
when 'groups:show'
|
when 'groups:show'
|
||||||
new Activities()
|
new Activities()
|
||||||
shortcut_handler = new ShortcutsNavigation()
|
shortcut_handler = new ShortcutsNavigation()
|
||||||
new ProjectsList()
|
|
||||||
when 'groups:group_members:index'
|
when 'groups:group_members:index'
|
||||||
new GroupMembers()
|
new GroupMembers()
|
||||||
new UsersSelect()
|
new UsersSelect()
|
||||||
|
@ -96,8 +94,6 @@ class Dispatcher
|
||||||
when 'users:show'
|
when 'users:show'
|
||||||
new User()
|
new User()
|
||||||
new Activities()
|
new Activities()
|
||||||
when 'admin:users:show'
|
|
||||||
new ProjectsList()
|
|
||||||
|
|
||||||
switch path.first()
|
switch path.first()
|
||||||
when 'admin'
|
when 'admin'
|
||||||
|
|
|
@ -157,3 +157,40 @@
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
max-width: $max_width;
|
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 **/
|
/** light list with border-bottom between li **/
|
||||||
ul.bordered-list {
|
ul.bordered-list {
|
||||||
margin: 5px 0px;
|
@include basic-list;
|
||||||
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; }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
&.top-list {
|
&.top-list {
|
||||||
li:first-child {
|
li:first-child {
|
||||||
padding-top: 0;
|
padding-top: 0;
|
||||||
|
|
||||||
h4, h5 {
|
h4, h5 {
|
||||||
margin-top: 0;
|
margin-top: 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -334,23 +334,32 @@ pre.light-well {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.project-row {
|
/*
|
||||||
.project-full-name {
|
* Projects list rendered on dashboard and user page
|
||||||
font-weight: bold;
|
*/
|
||||||
font-size: 15px;
|
.projects-list {
|
||||||
}
|
@include basic-list;
|
||||||
|
|
||||||
.project-description {
|
.project-row {
|
||||||
color: #888;
|
.project-full-name {
|
||||||
font-size: 13px;
|
@include str-truncated;
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
p {
|
.project-description {
|
||||||
margin-bottom: 0;
|
|
||||||
color: #888;
|
color: #888;
|
||||||
|
font-size: 13px;
|
||||||
|
|
||||||
|
p {
|
||||||
|
@include str-truncated;
|
||||||
|
margin-bottom: 0;
|
||||||
|
color: #888;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.my-projects .project-row {
|
.panel .projects-list li {
|
||||||
padding: 10px 0;
|
padding: 10px 15px;
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,4 @@
|
||||||
= link_to new_project_path, class: 'btn btn-success' do
|
= link_to new_project_path, class: 'btn btn-success' do
|
||||||
New project
|
New project
|
||||||
|
|
||||||
%ul.projects-list.bordered-list.my-projects
|
= render 'shared/projects/list', projects: @projects
|
||||||
- @projects.each do |project|
|
|
||||||
%li.project-row
|
|
||||||
= render partial: 'shared/project', locals: { project: project, avatar: true, stars: true }
|
|
||||||
|
|
|
@ -17,8 +17,7 @@
|
||||||
= link_to new_project_path, class: 'btn btn-success' do
|
= link_to new_project_path, class: 'btn btn-success' do
|
||||||
New project
|
New project
|
||||||
|
|
||||||
= render 'shared/projects_list', projects: @projects,
|
= render 'shared/projects/list', projects: @projects, projects_limit: 20
|
||||||
projects_limit: 20, stars: true, avatar: false
|
|
||||||
|
|
||||||
- else
|
- else
|
||||||
%h3 You don't have starred projects yet
|
%h3 You don't have starred projects yet
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
%ul.projects-list.bordered-list.my-projects.public-projects
|
- if projects.any?
|
||||||
- projects.each do |project|
|
.public-projects
|
||||||
%li.project-row
|
= render 'shared/projects/list', projects: projects
|
||||||
= render partial: 'shared/project', locals: { project: project, avatar: true, stars: true }
|
- else
|
||||||
- unless projects.present?
|
.nothing-here-block
|
||||||
.nothing-here-block No such projects
|
No such projects
|
||||||
|
|
|
@ -7,4 +7,4 @@
|
||||||
= link_to new_project_path(namespace_id: @group.id), class: 'btn btn-success' do
|
= link_to new_project_path(namespace_id: @group.id), class: 'btn btn-success' do
|
||||||
New project
|
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
|
%br
|
||||||
.results.prepend-top-10
|
.results.prepend-top-10
|
||||||
.search-results
|
.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'
|
= paginate @objects, theme: 'gitlab'
|
||||||
|
|
||||||
:javascript
|
: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?
|
- if local_assigns.has_key?(:contributed_projects) && contributed_projects.present?
|
||||||
.panel.panel-default.contributed-projects
|
.panel.panel-default.contributed-projects
|
||||||
.panel-heading Projects contributed to
|
.panel-heading Projects contributed to
|
||||||
= render 'shared/projects_list',
|
= render 'shared/projects/list',
|
||||||
projects: contributed_projects.sort_by(&:star_count).reverse,
|
projects: contributed_projects.sort_by(&:star_count).reverse,
|
||||||
projects_limit: 5, stars: true, avatar: false
|
projects_limit: 5, stars: true, avatar: false
|
||||||
|
|
||||||
- if local_assigns.has_key?(:projects) && projects.present?
|
- if local_assigns.has_key?(:projects) && projects.present?
|
||||||
.panel.panel-default
|
.panel.panel-default
|
||||||
.panel-heading Personal projects
|
.panel-heading Personal projects
|
||||||
= render 'shared/projects_list',
|
= render 'shared/projects/list',
|
||||||
projects: projects.sort_by(&:star_count).reverse,
|
projects: projects.sort_by(&:star_count).reverse,
|
||||||
projects_limit: 10, stars: true, avatar: false
|
projects_limit: 10, stars: true, avatar: false
|
||||||
|
|
Loading…
Reference in a new issue