HatenaBookmarkPanel

Wickethatena-bookmark-anywhereを使えるようにしてみた。
まだ勉強中なのでがんがん書いてみる。

まずJavaのソース

public class HatenaBookmarkPanel extends Panel {

	private static final long serialVersionUID = 1L;

	private static ResourceReference JAVASCRIPT = new JavascriptResourceReference(
			HatenaBookmarkPanel.class, "hatena-bookmark-anywhere-0-1.js");

	/** ブックマークのURL */
	private String targetUrl = null;

	/** 表示最大数 */
	private Integer limit = null;
	
	/** スタイルをCSSで指定するか */
	private Boolean useStyle = null;
	
	/** コメントの書いてないブクマを表示するか */ 
	private Boolean isCollapse = null;
	
	public HatenaBookmarkPanel(String id, String url, final Integer limit, Boolean useStyle, Boolean isCollapse) {
		super(id);
		this.targetUrl = url;
		this.limit = limit;
		this.useStyle = useStyle;
		this.isCollapse = isCollapse;
		
		add(new WebMarkupContainer((getContentId())));
		add(new HatenaBookmarkBehavior());
		add(HeaderContributor.forJavaScript(JAVASCRIPT));

	}

	public String getContentId() {
		return "content";
	}
	
	class HatenaBookmarkBehavior extends AbstractBehavior {
		
		private static final long serialVersionUID = 1L;
		
		public void renderHead(IHeaderResponse response) {
			super.renderHead(response);
			StringBuffer buffer = new StringBuffer();
			if(targetUrl != null) {
				buffer.append("var hatena_bookmark_anywhere_url = '" + targetUrl + "';");
			}
			if(limit != null) {
				buffer.append("var hatena_bookmark_anywhere_limit = " + limit + ";");
			}
			if(useStyle != null) {
				buffer.append("var hatena_bookmark_anywhere_style = " + useStyle + ";");
			}
			if(isCollapse != null) {
				buffer.append("var hatena_bookmark_anywhere_collapse = " + isCollapse + ";");
			}
			
			response.renderJavascript(buffer.toString(), null);
		}
	}
}

jsを読み込んで、変更可能なパラメータを設定できるようにしているだけ。
それに対応するPanelのHTML以下のように。

<?xml version="1.0" encoding="UTF-8" ?>
<html xmlns:wicket>
<body>

<wicket:panel>
	<div wicket:id="content" id="hatena_bookmark_anywhere" />
</wicket:panel>

</body>
</html>

あとは使いたいPageクラスで以下のようにaddして

add(new HatenaBookmarkPanel("hatenaPanel", "http://hogehoge", 5, null, null));

HTMLは表示させたいところにwicket:idをふるだけ

<div wicket:id="hatenaPanel" />

なにがすごいって一度書いちゃえば利用する人はjsなんて知らなくても HatenaBookmarkPanel を addしてHTMLにidふればよくて、それだけでサイトのはてブコメントが表示されちゃうってこと。


すてきだ。