プラグイン開発記 - 用語集の一覧で説明の部分表示を追加

今回は 用語集プラグイン の機能追加。
http://www.r-labs.org/issues/803

用語集使っていて失敗したなと思っていたのが、一覧表示で説明が見えないこと。用語の説明を見るためにいちいちクリックして用語を見ないといけない。
見出し、簡易説明、詳細説明を作って、一覧表示では見出しと簡易説明を表示するのがよくあるパターンのような気がする。

前に[文書]とかみてたら、長い文章を途中で切って表示してので、これだっと思って採用することにする。これならデータベースのカラムを追加する必要もないし、簡易説明と詳細説明両方用意するのちょっと面倒かなとも思ってたので、ちょうどいい。

テーブルの中でも、リンクとかは表示したかったんでけど、 h2. のようなブロックタグになるようなのが入っているとまずいので、ここは素直にテキストとして表示する。

[文書] とかでは Redmine の以下の関数で文章を切っていた。
truncate_lines(文字列, :length=>カットする長さ)

日本語のようなマルチバイト文字にも対応していそう。

で、実装してみたところ、 truncate_lines は切る部分が文ごとなので、 1 文が長いと切れずに大量の文字になってしまった。
単純に指定サイズで切ってくれるだけでいいんだけど、どうしようかなと思ってたら、 truncate という Rails のメソッドがそういった機能で、 truncate_lines は行でしか切らないように Redmine の方で作ったメソッドらしい。 truncate で十分なので truncate を使うことにした。使い型は truncate_lines とほぼ同じで次のような感じ。
truncate_lines(文字列, オプション)

オプションの部分には :length だけでなく、いろいろ指定できるらしい。ここでは length しか使わないけど。

一覧の表の他の項目は、非表示設定ができたり、表示する全部のアイテムで項目が設定されていなかったら、非表示にしたりとちょっと複雑なことをしているが、説明がないことはないだろうということで単純に常に表示するようにした。
そうすると意外と簡単に完成。


Ruby on Rails 逆引きクイックリファレンス Rails 2.0対応Ruby on Rails 逆引きクイックリファレンス Rails 2.0対応
(2008/05/31)
大場 寧子、大場 光一郎 他

商品詳細を見る



Rails Way (Professional Ruby Series)Rails Way (Professional Ruby Series)
(2008/12/04)
Obie Fernandez

商品詳細を見る

 

プラグイン開発記 - コードハイライトの改造

redmine プラグインの次回作の構想として、 数式を MathML で表示するプラグインを考えている。

Wiki の拡張なので、 Wiki マクロでやろうと思ってたら、 Wiki マクロのなか {{macro(ここ)}} は複数行ではかけないらしい。
そこで、ソースコードの埋め込みみたいに
<pre><code class="mathjs">
数式
</code></pre>

という感じにできないかなぁって考えてた。

そしたら近いプラグインを発見。
http://www.redmine.org/plugins/redmine_js_syntax_highlighter
コードハイライティングを JavaScript の SyntaxHighlighter に変えるプラグインらしい。

で、ダウンロードしてソース眺めてみると Redmine::SyntaxHighlighting::highlighter= でハイライト用のモジュールを入れ替えればいいらしい。
redmine_js_syntax_highlighter はごっそり入れ替えているけど、やりたいのは class のタイプを追加するもの。でも、 class が mathjs だったら、 MathML を出して、それ以外なら元のを呼び出すというのなら出来そう。

ちなみに数式解析には Racc を使おうかなって思ってたけど、最近ブログと JavaScript に興味がでてきたので、ブログでも使えるように JavaScript で作ろうかと思ってる。そういう意味でも redmine_js_syntax_highlighter は参考になる。

まぁ、その前に 用語集プラグインのバグなおさないといけないけど。

あと Redmine::SyntaxHighlighting の方のソースも見てて気づいた点が 2 つ。
  module SyntaxHighlighting    
class << self
def highlighter=(name)
#:

初めてみた書き方。モジュールのメソッド定義っぽいとは思ったけど、よく分からなかったので調べてみた。
http://www.mapee.jp/ruby/class_self_end.html
特異メソッドとして、モジュールのメソッドを定義しているらしい。
個人的には下のような書き方でいいと思うけど、一応覚えておく
  module SyntaxHighlighting    
def self.highlighter=(name)
#:


もう一つは init.rb や lib 内で view でよく使う h メソッドの使い方。 h は使いたいけど使おうとすると呼び出しエラーとなるので、面倒だなと思ってたら、以下のように使えばいいみたい。
ERB::Util.h(text)

 

プラグイン開発記 - wiki マクロでのエスケープ文字

用語集プラグインの用語に & が入っている場合のバグ修正。
http://www.r-labs.org/issues/815

用語へのリンクを Wiki マクロで張る機能を実装するとき、 & とかの HTML で使えない文字のことをまったく忘れてた。& とかに変換しとかないといけなかった。
ちなみに前回 lib とかでの h メソッドの呼び出し方を書いたけど、よく考えたら標準ライブラリの cgi に CGI::escapeHTML ってメソッドがあって、前はそっちを使ってたみたい。 CGI::unescapeHTML という逆もあったのでこっちを使う。

で、調べてみたら、 wiki マクロの場合、引数としてわたってくる文字列はもうすでにエスケープされていた。受け取った引数を unescapeHTML して、リンクを作るときもう一度 escapeHTML したら、修正できた。


ついでに Redmine だとまだ作っていないページとかへのリンクは赤字だったので、未登録の用語へのリンクもそれにあわせることにした。 Redmine の public/stylesheets/application.css には
div.wiki a.new {
color: #b73535;
}
とあったので、リンク作るとき class に new を指定。

Ruby on Rails 逆引きクイックリファレンス Rails 2.0対応Ruby on Rails 逆引きクイックリファレンス Rails 2.0対応
(2008/05/31)
大場 寧子、大場 光一郎 他

商品詳細を見る
 
このページをシェア
アクセスカウンター
アクセスランキング
[ジャンルランキング]
コンピュータ
8位
アクセスランキングを見る>>

[サブジャンルランキング]
プログラミング
3位
アクセスランキングを見る>>
カレンダー(アーカイブ)
プルダウン 降順 昇順 年別

10月 | 2019年11月 | 12月
- - - - - 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30


はてな新着記事
はてな人気記事
ブロとも申請フォーム
プロフィール

yohshiy

Author:yohshiy
職業プログラマー。
仕事は主に C++ ですが、軽い言語マニアなので、色々使っています。

はてブ:yohshiy のブックマーク
Twitter:@yohshiy

サイト紹介
プログラミング好きのブログです。プログラミング関連の話題や公開ソフトの開発記などを雑多に書いてます。ただ、たまに英語やネット系の話になることも。