2011年12月18日日曜日

来年の手帳も「ORDINAL」

来年の手帳は変えようと思っていたのですが、結局、今年と同じ手帳にしました。
そんな手帳を紹介してみます。

ORDINAL 2012

左:今年の手帳、右:来年用手帳
古い方は紐がすっかりほどけています。見た目はありふれた真面目な手帳。

中身はとてもシンプル。時間が書いてないので広々としています。
左側には予定を、右側にはメモや左側に書ききれなかったことを書きます。
方眼紙になっているので、自由度が高い。
色が落ち着いており、枠線が出しゃばらず、書きやすいデザインだと思います。紙も丈夫で、インクが透けにくくなっています。そのためか、やや分厚い気もしますが。

枠線を無視して書きたい私にとっては、なかなかよい手帳でしたー。

2011年12月10日土曜日

Play framework - テンプレートで独自のJavaメソッドを使う

Play! framework Advent Calendar 2011 jp #play_jaの10日目の記事です。

最近、Play!のチュートリアル(yabe)の復習として、簡単な掲示板を作っていました。
書き込まれたURLのリンクくらいは付けたいなーと思い、テンプレートに独自メソッドを追加したいと思ったのですが、これってチュートリアルの範囲外でしたね。

というわけで今回は、HTMLとして出力する文字列中のURLにリンクを張るメソッドを追加してみます。
主にテンプレートに着目した内容となっています。

※ソースコードはplay-1.2.4(最新版)で動作確認しています。

今回紹介するのは、入力値を以下のように編集して出力するだけです。
  1. エスケープする。
  2. URLにリンクを張る。
  3. 改行を<br/>に置換する。
 掲示板に書き込まれる文字列はこんな感じ。

こんにちは、Play!
http://example.com/
<strong>タグ</strong>

入力値をモデルのPost.contentから取得し、ただエスケープして出力する時は、テンプレートの方にこんな感じで書きましたね。

<p>${post.content}</p>

もしくはescape()を明記して

<p>${post.content.escape()}</p>

結果はこんな感じ。

<p>こんにちは、Play!
http://example.com/
&lt;strong&gt;タグ&lt;/strong&gt;</p>

後は、リンクを張るメソッドと改行を<br/>に置換するメソッドを追加します。

 <p>${post.content.escape().toString().urlLink().nl2br().raw()}</p>

urlLink()がこれから追加する独自メソッド。nl2brはplay標準です。最後の.raw()は「エスケープしないで出力する」と明記する意味で付けています。
escape().toString()としているのは、escape()の結果をそのまま受け取れなかったためです。もしかすると別のやり方があるのかも。

最後に、urlLinkメソッドを追加します。
play.templates.JavaExtensionsを継承して、urlLinkメソッドを書くだけです。

package ext;

import play.templates.*;

public class MyExtensions extends JavaExtensions {
    public static String urlLink(String str) {
        return str.replaceAll("(http://|https://){1}[\\w\\.\\-/:]+",
                "<a href='$0'>$0</a>");
    }
}

Play!を開発モードで起動していれば、このクラスも自動的にロードされます。
実行してみます。

<p>こんにちは、Play!<br/><a href='http://example.com/'>http://example.com/</a><br/>&lt;strong&gt;タグ&lt;/strong&gt;</p>

期待する結果が得られました!
長々と書きましたが、要はJavaExtensionsクラスを継承したクラスにメソッドを追加するだけですね。

お読み頂きありがとうございました。

明日、11日目は @katzchang さんです。お楽しみに!