trac にサイドメニューを付けてみる

trac を使ってページが増えてくると、よく使うページへのリンクを Top ページに作ったりしている。それでもいいけど、Top ページに毎回戻るのは手間なので wiki ページ全てにサイドメニューを取り付けてみた。


全てのプロジェクトに反映させるつもりはないので、 trac プロジェクトを作成したディレクトリ(以後 %TracEnvDir% とする)にあるファイルを修正することにした。

1. site_css.cs の修正

まず %TracEnvDir%/templates/site_css.cs を以下のように修正する。
<?cs var:chrome.href ?>/site と書くと %TracEnvDir%/htdocs に対応するらしい。
wiki ページ以外にサイドメニューを表示するつもりはないので wiki.exists でインポートするか決めている。

<?cs if:wiki.exists ?>
@import url(<?cs var:chrome.href ?>/site/custome.css);
<?cs /if ?>

2. custome.css の作成

%TracEnvDir%/htdocs に以下のような custome.css を作成する。
本来必要なのは #content と div.sidemenu くらいで、あとは見た目を調整しているだけ。

#content {
    margin-left: 150px;
}
div.sidemenu {
    float: left;
    width: 100px;
}
#sidemenu ul {
    border-top: 1px solid #666;
    list-style-type: none;
    margin: 0px;
    padding: 0px;
}
#sidemenu a {
    border-left: 1px solid #666;
    border-right: 1px solid #666;
    border-bottom: 1px solid #666;
    display: block;
    padding: 5px 10px 5px 20px;
    text-decoration: none;
    width: 100px;
}
h1 {
    border-bottom: 3px solid #666;
    padding-left:20px;
}
h2 {
    border-bottom: 2px solid #666;
    padding-left:20px;
}

3. wiki.cs の修正

%TracEnvDir%/templates/wiki.cs の先頭を以下のように修正する。
追加位置は <div id="content" class="wiki"> の直前でもかまわないはず。
ここで wiki.exists を見るのは、編集中などにサイドメニューを表示させないため。

<?cs include "header.cs" ?>
<?cs include "macros.cs" ?>
<!-- append start -->
<?cs if wiki.exists ?>
  <?cs include "site_sidemenu.cs" ?>
<?cs /if ?>
<!-- append end -->
<div id="ctxtnav" class="nav">

4. site_sidemenu.cs の作成

最後に %TracEnvDir%/templates に以下のような site_sidemenu.cs を作成する。

<div id="sidemenu" class="sidemenu">
  <ul>
    <li><a href="<?cs var:project.url ?>">Home</a></li>
    <li><a href="<?cs var:project.url ?>docs/">Documents</a></li>
    <li><a href="<?cs var:project.url ?>downloads/">Download</a></li>
  </ul>
</div>


以上で wiki ページにサイドメニューが表示されるようになる。