From 6e08b5cc857b3b218df0b20745ad295e79abc722 Mon Sep 17 00:00:00 2001 From: Aleksei Kvitinskii Date: Sat, 5 Nov 2011 21:00:05 +0200 Subject: [PATCH] create tags page and made tag filter for projects --- app/assets/stylesheets/projects.css.scss | 14 ++++++++++++++ app/assets/stylesheets/tags.css.css | 16 ++++++++++++++++ app/controllers/projects_controller.rb | 4 +++- app/controllers/tags_controller.rb | 12 ++++-------- app/views/projects/_form.html.haml | 7 +------ app/views/projects/_list.html.haml | 7 ++++++- app/views/tags/autocomplete.html.haml | 2 -- app/views/tags/index.html.haml | 13 +++++++++++-- config/routes.rb | 7 +++++-- spec/requests/tags_spec.rb | 4 ++-- 10 files changed, 62 insertions(+), 24 deletions(-) create mode 100644 app/assets/stylesheets/tags.css.css delete mode 100644 app/views/tags/autocomplete.html.haml diff --git a/app/assets/stylesheets/projects.css.scss b/app/assets/stylesheets/projects.css.scss index 766138ee..c6ba8b46 100644 --- a/app/assets/stylesheets/projects.css.scss +++ b/app/assets/stylesheets/projects.css.scss @@ -270,6 +270,20 @@ input.ssh_project_url { } } +#projects-list .small-tags a{ + font-size: 9px; + + display: inline-block; + padding: 2px 3px 1px 3px; + margin: 0px 3px 0px 0px; + border-radius: 2px; + background-color: #3b6bce; + color: #FFF; + text-shadow: none; + font-weight: bold; +} + + .clear { clear: both; } diff --git a/app/assets/stylesheets/tags.css.css b/app/assets/stylesheets/tags.css.css new file mode 100644 index 00000000..0dfcc4fc --- /dev/null +++ b/app/assets/stylesheets/tags.css.css @@ -0,0 +1,16 @@ +.tags-list { + padding : 0px 10px 10px 10px; + +} + +.tags-list a { + display: inline-block; + padding: 8px 11px 8px 11px; + margin: 1px 5px 0px 0px; + border-radius: 4px; + border: 1px solid #d0e1ff; + background-color: #d0e1ff; + color: #0f326d; + font-weight: bold; + font-size: 14px; +} \ No newline at end of file diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 067245c4..09661685 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -10,7 +10,9 @@ class ProjectsController < ApplicationController before_filter :require_non_empty_project, :only => [:blob, :tree] def index - @projects = current_user.projects.all + source = current_user.projects + source = source.tagged_with(params[:tag]) unless params[:tag].blank? + @projects = source.all end def new diff --git a/app/controllers/tags_controller.rb b/app/controllers/tags_controller.rb index 6ec3226a..913bc62b 100644 --- a/app/controllers/tags_controller.rb +++ b/app/controllers/tags_controller.rb @@ -1,15 +1,11 @@ class TagsController < ApplicationController def index - end - - def autocomplete - tags = Project.tag_counts.limit 8 - tags = tags.where('name like ?', "%#{params[:term]}%") unless params[:term].blank? - tags = tags.map {|t| t.name} + @tags = Project.tag_counts.order('count DESC') + @tags = @tags.where('name like ?', "%#{params[:term]}%") unless params[:term].blank? respond_to do |format| - format.json { render json: tags} + format.html + format.json { render json: @tags.limit(8).map {|t| t.name}} end end - end diff --git a/app/views/projects/_form.html.haml b/app/views/projects/_form.html.haml index 059ee40c..2ddfda48 100644 --- a/app/views/projects/_form.html.haml +++ b/app/views/projects/_form.html.haml @@ -57,11 +57,8 @@ $(function(){ var tag_field = $('#tag_field').tagify(); - tag_field.tagify('inputField').autocomplete({ - source: '/tags/autocomplete.json', - position: { of: tag_field.tagify('containerDiv') }, - close: function(event, ui) { tag_field.tagify('add'); }, + source: '/tags.json' }); @@ -70,6 +67,4 @@ tag_field.val( tag_field.tagify('serialize') ); return true; }); - - }) diff --git a/app/views/projects/_list.html.haml b/app/views/projects/_list.html.haml index 65f0b7fd..7976b11f 100644 --- a/app/views/projects/_list.html.haml +++ b/app/views/projects/_list.html.haml @@ -10,7 +10,12 @@ - @projects.each do |project| %tr{ :class => "project", :url => project_path(project) } - %td= project.name + %td + = project.name + .small-tags + - project.tag_list.each do |tag| + = link_to tag, "/tags/#{tag}" + %td= truncate project.url_to_repo %td= project.code %td= check_box_tag "read", 1, project.readers.include?(current_user), :disabled => :disabled diff --git a/app/views/tags/autocomplete.html.haml b/app/views/tags/autocomplete.html.haml deleted file mode 100644 index e5c86e7e..00000000 --- a/app/views/tags/autocomplete.html.haml +++ /dev/null @@ -1,2 +0,0 @@ -%h1 Tags#autocomplete -%p Find me in app/views/tags/autocomplete.html.haml \ No newline at end of file diff --git a/app/views/tags/index.html.haml b/app/views/tags/index.html.haml index 7bf17b5e..c83d62c7 100644 --- a/app/views/tags/index.html.haml +++ b/app/views/tags/index.html.haml @@ -1,2 +1,11 @@ -%h1 Tags#index -%p Find me in app/views/tags/index.html.haml \ No newline at end of file +- content_for(:body_class, "projects-page") +- content_for(:page_title) do + .grid_4 + %h2 + Tags + + + .tags-list + - @tags.all.each do |tag| + = link_to "#{tag.name}(#{tag.count})", "/tags/#{tag.name}" + diff --git a/config/routes.rb b/config/routes.rb index c6b2d8b1..d4e27965 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,6 +1,8 @@ Gitlab::Application.routes.draw do - get "tags/index" - get "tags/autocomplete" + + get 'tags'=> 'tags#index' + get 'tags/:tag' => 'projects#index' + namespace :admin do resources :users @@ -23,6 +25,7 @@ Gitlab::Application.routes.draw do resources :projects, :only => [:new, :create, :index] resources :keys + devise_for :users resources :projects, :except => [:new, :create, :index], :path => "/" do diff --git a/spec/requests/tags_spec.rb b/spec/requests/tags_spec.rb index 43d7a0ff..94a034da 100644 --- a/spec/requests/tags_spec.rb +++ b/spec/requests/tags_spec.rb @@ -11,13 +11,13 @@ describe "Tags" do # end - describe "GET '/tags/autocomplete'" do + describe "GET '/tags.json'" do before do @project = Factory :project @project.add_access(@user, :read) @project.tag_list = 'demo1' @project.save - visit '/tags/autocomplete.json' + visit '/tags.json' end