h(), simple_format(), strftime()
jTemplate を使うにあたって最低限JavaScript側で使いたくなる三つのメソッド。。最初の二つは実装した。
最後のstrftimeは、正直実装面倒くさいので、探したらあった。が、Array に対して for(var i in array) をしている部分があって、Array.prototype が汚染されていると使えないライブラリなのでパッチを作成した。作者に送、、、る方法がないんだけど*1。
以下コードメモ
h と simple_format。ほとんど、ActionView::Helpers と同じ。tag メソッドがすごく微妙。
function h(str){ return str.toString().replace(/\"/g,""") .replace(/</g,"<") .replace(/>/g,">") .replace(/&/g,"&"); } function simple_format(str, html_options){ var start_tag = tag("p", html_options, true); var text = str.toString().replace(/\r\n?/, "\n") .replace(/\n\n+/, "</p>\n\n" + start_tag) .replace(/([^\n]\n)(?=[^\n])/, '$1<br />') return start_tag + text + "</p>"; } function tag(name, options, open){ var dom = jQuery("<" + name + "/>") if( options ){ dom.attr(options); } var html = jQuery("<div/>").append(dom).html(); if( open ){ // remove close tag. return html.replace("</" + name + ">", "") }else{ return html; } }
で、strftime の方。 2行変えただけ。
74c74 < for ( var i in _check ) { --- > for ( var i = 0 ; i < _check.length ; i ++ ) { 123c123 < for ( var i in _defs ) { --- > for ( var i = 0 ; i < _defs.length ; i ++ ) {