OSDN Git Service

Include default labels in issues autocomplete etc. Show colored labels on issues...
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Tue, 7 May 2013 16:26:41 +0000 (19:26 +0300)
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Tue, 7 May 2013 16:26:41 +0000 (19:26 +0300)
app/controllers/labels_controller.rb
app/helpers/issues_helper.rb
app/helpers/labels_helper.rb [new file with mode: 0644]
app/models/project.rb
app/views/issues/show.html.haml
app/views/labels/_label.html.haml
app/views/labels/index.html.haml
lib/gitlab/issues_labels.rb [moved from lib/gitlab/labels.rb with 76% similarity]

index cb332a4..0e78cec 100644 (file)
@@ -7,11 +7,11 @@ class LabelsController < ProjectResourceController
   respond_to :js, :html
 
   def index
-    @labels = @project.issues_labels.order('count DESC')
+    @labels = @project.issues_labels
   end
 
   def generate
-    Gitlab::Labels.generate(@project)
+    Gitlab::IssuesLabels.generate(@project)
 
     redirect_to project_labels_path(@project)
   end
index ab4ffa8..6a4d5a3 100644 (file)
@@ -11,10 +11,6 @@ module IssuesHelper
     classes
   end
 
-  def issue_tags
-    @project.issues.tag_counts_on(:labels).map(&:name)
-  end
-
   # Returns an OpenStruct object suitable for use by <tt>options_from_collection_for_select</tt>
   # to allow filtering issues by an unassigned User or Milestone
   def unassigned_filter
@@ -32,12 +28,6 @@ module IssuesHelper
     }
   end
 
-  def labels_autocomplete_source
-    labels = @project.issues_labels.order('count DESC')
-    labels = labels.map{ |l| { label: l.name, value: l.name } }
-    labels.to_json
-  end
-
   def issues_active_milestones
     @project.milestones.active.order("id desc").all
   end
@@ -88,19 +78,4 @@ module IssuesHelper
       ""
     end
   end
-
-  def label_css_class(name)
-    case name
-    when *warning_labels
-      'label-warning'
-    when *neutral_labels
-      'label-inverse'
-    when *positive_labels
-      'label-success'
-    when *important_labels
-      'label-important'
-    else
-      'label-info'
-    end
-  end
 end
diff --git a/app/helpers/labels_helper.rb b/app/helpers/labels_helper.rb
new file mode 100644 (file)
index 0000000..950db03
--- /dev/null
@@ -0,0 +1,28 @@
+module LabelsHelper
+  def issue_tags
+    @project.issues.tag_counts_on(:labels).map(&:name)
+  end
+
+  def labels_autocomplete_source
+    labels = @project.issues_labels
+    labels = labels.map{ |l| { label: l.name, value: l.name } }
+    labels.to_json
+  end
+
+  def label_css_class(name)
+    klass = Gitlab::IssuesLabels
+
+    case name
+    when *klass.warning_labels
+      'label-warning'
+    when *klass.neutral_labels
+      'label-inverse'
+    when *klass.positive_labels
+      'label-success'
+    when *klass.important_labels
+      'label-important'
+    else
+      'label-info'
+    end
+  end
+end
index 203ccb8..f6d5fe4 100644 (file)
@@ -34,7 +34,7 @@ class Project < ActiveRecord::Base
 
   attr_accessible :namespace_id, :creator_id, as: :admin
 
-  acts_as_taggable_on :labels
+  acts_as_taggable_on :labels, :issues_default_labels
 
   attr_accessor :import_url
 
@@ -204,7 +204,7 @@ class Project < ActiveRecord::Base
   end
 
   def issues_labels
-    issues.tag_counts_on(:labels)
+    @issues_labels ||= (issues_default_labels + issues.tags_on(:labels)).uniq.sort_by(&:name)
   end
 
   def issue_exists?(issue_id)
index 67fe89a..2e204b8 100644 (file)
@@ -47,7 +47,7 @@
 
     .pull-right
       - @issue.labels.each do |label|
-        %span.label
+        %span{class: "label #{label_css_class(label.name)}"}
           %i.icon-tag
           = label.name
         &nbsp;
index 027b041..2b1aafc 100644 (file)
@@ -1,9 +1,15 @@
+- frequency = @project.issues.tagged_with(label.name).count
 %li
   %strong
-    %i.icon-tag
-    = label.name
+    %span{class: "label #{label_css_class(label.name)}"}
+      %i.icon-tag
+    - if frequency.zero?
+      %span.light= label.name
+    - else
+      = label.name
   .pull-right
-    = link_to project_issues_path(label_name: label.name) do
-      %strong
-        = pluralize(label.count, 'issue')
-        = "»"
+    - unless frequency.zero?
+      = link_to project_issues_path(label_name: label.name) do
+        %strong
+          = pluralize(frequency, 'issue')
+          = "»"
index 895ba43..53f411d 100644 (file)
@@ -4,12 +4,11 @@
   Labels
 %br
 
-.light-well
+- if @labels.present?
   %ul.bordered-list.labels-table
     - @labels.each do |label|
       = render 'label', label: label
 
-    - unless @labels.present?
-      %li
-        %h3.nothing_here_message Add first label to your issues or #{link_to 'generate', generate_project_labels_path(@project), method: :post} default set of labels
-
+- else
+  .light-well
+    %h3.nothing_here_message Add first label to your issues or #{link_to 'generate', generate_project_labels_path(@project), method: :post} default set of labels
similarity index 76%
rename from lib/gitlab/labels.rb
rename to lib/gitlab/issues_labels.rb
index f53223c..bc49d27 100644 (file)
@@ -1,5 +1,5 @@
 module Gitlab
-  class Labels
+  class IssuesLabels
     class << self
       def important_labels
         %w(bug critical confirmed)
@@ -17,12 +17,11 @@ module Gitlab
         %w(feature enhancement)
       end
 
-      def self.generate(project)
+      def generate(project)
         labels = important_labels + warning_labels + neutral_labels + positive_labels
 
-        labels.each do |label_name|
-          # create tag for project
-        end
+        project.issues_default_label_list = labels
+        project.save
       end
     end
   end