basyura's blog

あしたになったらほんきだす。

Redmine のチケット一覧のヘッダに class を追加する

プラグインを作ってみた。

チケットの一覧で名前の間に空白があると、空白で改行されて 2 行になっちゃって無駄に高さ取るよ ウワァァァァァァヽ(`Д´)ノァァァァァァン! となることしばしば。

f:id:basyura:20140328232140p:plain

ソースを直接いじってたんだけど、毎回いじるのもつらくなってきたので Redmineのプロジェクトの並びが気に入らないという話その2 Redmineプラグイン試作 - yunomuのブログ を参考に plugin 化してみた。

プラグインのひな形を作る

% bundle exec rails g redmine_plugin redmine_add_class_to_column
% cd plugins/redmine_add_class_to_column

沢山できるけど、必要なのは init.rb ぐらい。

.
├── README.rdoc
├── init.rb
└── lib
    └── redmine_add_class_to_column.rb

init.rb

QueriesHelper にあるメソッドを書き換えたいので include 時のフックを登録

require File.dirname(__FILE__) + '/lib/redmine_add_class_to_column'

ActionDispatch::Callbacks.to_prepare do
  require_dependency 'queries_helper'
  QueriesHelper.send(:include, Redmine::Plugins::RedmineAddClassToClumn)
end

Redmine::Plugin.register :redmine_add_class_to_column do
  name 'Redmine Add Class To Column plugin'
  author 'basyura'
  description 'add class to column'
  version '0.0.1'
  url ''
  author_url 'http://blog.basyura.org'
end

redmine_add_class_to_column.rb

class を出力するように書き換えた module を定義

module Redmine
  module Plugins
    module RedmineAddClassToClumn
      def self.included(base)
        base.send(:include, InstanceMethods)
        base.class_eval do
          alias_method_chain :column_header, :class
        end
      end

      module InstanceMethods
        def column_header_with_class(column)
          column.sortable ? 
             sort_header_tag(column.name.to_s, :caption => column.caption,
                                               :default_order => column.default_order,
                                               :class => "column_header_#{column.name.to_s}"
                                                ) :
             content_tag('th', h(column.caption),
                        :class => "column_header_#{column.name.to_s}")
        end
      end
    end
  end
end

起動

% bundle exec rails s

f:id:basyura:20140328231118p:plain

class がついたので、application.cs にセルに幅を定義する。

.column_header_assigned_to {
  min-width : 120px;
}

できましたよっと ヽ( ゚∀゚)ノ

f:id:basyura:20140328232836p:plain

( ・´ー・`)どや