basyura's blog

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

Redmine の wiki index ページを tree view で表示する - redmine_wiki_index_tree_view

書いてみた

redmine デフォルトの表示。

f:id:basyura:20140429000727p:plain

tree view 化して第一階層だけ開く (デフォルト)

f:id:basyura:20140428235403p:plain

tree view 化して第二階層まで開く (js のコメントアウトをはずす)

f:id:basyura:20140428235402p:plain

wiki page が増えてくるとどこに何があるのか分からなくなってきて探すのが大変だし整理するのも大変。最初にページを全て表示するんじゃなくて階層化しておけばたどりやすくなるんじゃないかなぁと思って。ページ名をインクリメンタルサーチしつつツリー構造を維持するってとこまでやりたいんだけど・・・jquery のプラグイン転がってないかなぁ。

中身

たいしたことはしていないのだけど。

  • redmine_wiki_index_tree_view/lib/redmine_wiki_index_tree_view.rb
module Redmine
  module Plugins
    class RedmineWikiIndexTreeViewListener < Redmine::Hook::ViewListener
      def view_layouts_base_html_head(context)
        return unless context[:controller]
        params = context[:controller].params
        return unless (params[:controller] == 'wiki' && params[:action] == 'index')

        tags = [stylesheet_link_tag('jquery.treeview.css',
                                   :plugin => 'redmine_wiki_index_tree_view')]
        tags << javascript_include_tag('jquery.treeview.js',
                                   :plugin => 'redmine_wiki_index_tree_view')
        tags << javascript_include_tag('redmine_wiki_index_tree_view.js',
                                   :plugin => 'redmine_wiki_index_tree_view')
        tags.join("\n")
      end
    end
  end
end
  • redmine_wiki_index_tree_view/assets/javascripts/redmine_wiki_index_tree_view.js
$(document).ready(function(){
  $(".pages-hierarchy:first").treeview({
    collapsed: true,
  });
  $(".hitarea:first").click();
  // open second hierarchy
  //$('.treeview:first').find('ul:first').children('li').find('.hitarea:first').click();
});

Hook を使って jquery-treeview を埋め込んで、階層をクリックしてるだけ。

ライセンス

jquery-treeview が MIT/GPL のデュアルライセンスでどうしていいのかよく分からないのだけど、MIT LICENSE にして AUTHOR.txt に記載しておいた。あってるのかこれ・・・。

まとめ

plugin 作るの楽しいなぁ。