diff --git a/app/assets/stylesheets/gitlab_bootstrap/lists.scss b/app/assets/stylesheets/gitlab_bootstrap/lists.scss index 0f893a553e..e661e02623 100644 --- a/app/assets/stylesheets/gitlab_bootstrap/lists.scss +++ b/app/assets/stylesheets/gitlab_bootstrap/lists.scss @@ -69,5 +69,14 @@ ul.bordered-list { display: block; margin: 0px; &:last-child { border:none } + + &.active { + background: #f9f9f9; + a { font-weight: bold; } + } + + &.light { + a { color: #777; } + } } } diff --git a/app/controllers/dashboard_controller.rb b/app/controllers/dashboard_controller.rb index 91a6798571..f651b02c1e 100644 --- a/app/controllers/dashboard_controller.rb +++ b/app/controllers/dashboard_controller.rb @@ -34,6 +34,7 @@ class DashboardController < ApplicationController @projects end + @projects = @projects.tagged_with(params[:label]) if params[:label].present? @projects = @projects.search(params[:search]) if params[:search].present? @projects = @projects.page(params[:page]).per(30) end diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb index 1db8b7c689..9e7c4ee245 100644 --- a/app/helpers/projects_helper.rb +++ b/app/helpers/projects_helper.rb @@ -3,6 +3,10 @@ module ProjectsHelper "You are going to remove #{user.name} from #{project.name} project team. Are you sure?" end + def projects_labels + Project.tag_counts_on(:labels).map(&:name) + end + def link_to_project project link_to project do title = content_tag(:strong, project.name) diff --git a/app/models/project.rb b/app/models/project.rb index cad8f1666d..e811cbe7f4 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -28,12 +28,14 @@ class Project < ActiveRecord::Base include Gitlab::ShellAdapter extend Enumerize - attr_accessible :name, :path, :description, :default_branch, :issues_tracker, + attr_accessible :name, :path, :description, :default_branch, :issues_tracker, :label_list, :issues_enabled, :wall_enabled, :merge_requests_enabled, :snippets_enabled, :issues_tracker_id, :wiki_enabled, :public, :import_url, :last_activity_at, as: [:default, :admin] attr_accessible :namespace_id, :creator_id, as: :admin + acts_as_taggable_on :labels + attr_accessor :import_url # Relations diff --git a/app/views/dashboard/projects.html.haml b/app/views/dashboard/projects.html.haml index f81af59b38..511366cf1a 100644 --- a/app/views/dashboard/projects.html.haml +++ b/app/views/dashboard/projects.html.haml @@ -20,6 +20,15 @@ = nav_tab :scope, 'joined' do = link_to "Joined", projects_dashboard_path(scope: 'joined') + %p.light Filter by label: + %ul.bordered-list + - projects_labels.each do |label| + %li{ class: (label == params[:label]) ? 'active' : 'light' } + = link_to projects_dashboard_path(scope: params[:scope], label: label) do + %i.icon-tag + = label + + .span9 = form_tag projects_dashboard_path, method: 'get' do %fieldset.dashboard-search-filter @@ -49,6 +58,10 @@ .left - if project.description.present? %span.light= project.description + - project.labels.each do |label| + %span.label.label-info + %i.icon-tag + = label.name .pull-right.light %small.light diff --git a/app/views/projects/_form.html.haml b/app/views/projects/_form.html.haml index 4d51e10dc3..eb5fa1755b 100644 --- a/app/views/projects/_form.html.haml +++ b/app/views/projects/_form.html.haml @@ -57,6 +57,15 @@ authentication. It will also be listed on the #{link_to "public access directory", public_root_path}. + %fieldset.features + %legend + Labels: + .control-group + = f.label :label_list, "Labels", class: 'control-label' + .controls + = f.text_field :label_list, maxlength: 2000, class: "xxlarge" + %p.hint Separate with comma. + %fieldset.features %legend Features: