Template::Plugin::JSON::Escape という Perl モジュールを公開しました。 Template Toolkit を使って HTML を出力するとき、HTML 中に JSON を埋め込みたいことがあります。そのためのモジュールとして Template::Plugin::JSON が存在するのですが、これは小なり記号 (<) などの文字を素通しするため、JSON の内容によっては不正な HTML が出力されてしまいます。 Template::Plugin::JSON::Escape は一部記号を \uxxxx の形式にエスケープするので、JSON の内容にかかわらず出力する HTML を妥当に保てます (もちろん、JSON 出力部以外が妥当な HTML を出力するのであれば、です。なお、SGML のコメント内に JSON を埋め込む場合はこの限りではありません)。
タイトルはちょっと大げさすぎですね。もうブカブカです。 WebアプリのMVCネタで、毎度同意しまくりのsatoshiさんが、JSのライブラリSNBinderを公開されています。 Life is beautiful: JavaScript HTMLテンプレートエンジン SNBinder 公開 BODYタグオンリー大好きっ子なので、これは使わずには居られないと思い早速やってみました。 ついでに、恐れ多くもgithubでForkしてreadmeの和訳などしています。 コードサンプルを元に動かしてみたんですが色々と動かない・・・ 私の理解ミスな気がするのですが、ツッコミもらおうとコード晒します。オリジナルのまま動いてる人いたらどこが違うか教えてくださいませ。 SNBinderの使い方として、READMEに書かれているやり方は、4種類あります。 変数一つをテンプレートに埋め込む SNBinder.b
Update - October 2011: Please see recent post: "jQuery Templates and JsViews: The Roadmap" for current information on the jQuery Templates roadmap. Joint announcements were made today by jQuery and Microsoft that jQuery has decided to make the jQuery Templates, Data Link, and Globalization plugins 'Official jQuery Plugins'. See the following blog announcements for more details: jQuery Templates, D
この記事は賞味期限切れです。(更新から1年が経過しています) nje’s jquery-tmpl at master – GitHub jQueryのテンプレートプラグインは幾つか公開されていますが、 中でもこれはjQueryに馴染んだ記法になるので、使い易いのではないでしょうか。 というわけで、軽くご紹介。 nje’s jquery-tmpl at master – GitHub ダウンロードはこちらの「DOWNLOAD SOURCE」より。 軽くデモしてみました。 <ul></ul> <script id="template" type="text/html"> <li>{%= name %} : ¥{%= price %}</li> </script> <script type="text/javascript"> var foods = [ { name:"おにぎり", price
来年も作りたい!ふきのとう料理を満喫した 2024年春の記録 春は自炊が楽しい季節 1年の中で最も自炊が楽しい季節は春だと思う。スーパーの棚にやわらかな色合いの野菜が並ぶと自然とこころが弾む。 中でもときめくのは山菜だ。早いと2月下旬ごろから並び始めるそれは、タラの芽、ふきのとうと続き、桜の頃にはうるい、ウド、こ…
先日予告したSNBinderのオープンソース化、GitHubに簡単なREADME付きでアップロードしたのでご覧いただきたい。 https://github.com/snakajima/SNBinder SNBinderは、ひと言で言えば「ブラウザー上でView(テンプレート)とData(JSON)を結合して HTML を生成するテンプレートエンジン」である。 90年の半ばから急速に広まったインターネット。サーバー側でダイナミックに生成したHTMLページをブラウザーで閲覧するだけ、というシンプルでエレガントなアーキテクチャゆえの成功だ。しかし、ブラウザーの高機能化に伴い、JavaScriptを駆使して使いやすさを向上しようという試みが色々なウェブサイトで行われている。GMail、Google Docs、Facebookなどは良い例だ。 その方向性を究極にまで突き詰めると、サーバー側は(MVC
「HTMLのscriptタグ内にデータを埋め込む際のエスケープ処理モジュール書いた」に引き続いて、XSSを避けつつ複数の値をJSONで渡す方法。 答えはmalaさんが書いてます テンプレートエンジンでJSONを生成する(多くの場合間違えるので、推奨しない) scriptタグの中でJSONを使わない 可能であればJSONライブラリのオプションで<>/いずれかをエスケープする。 生成されたJSON文字列の<>/いずれかを正規表現などを使って置換する。 JSONのvalueに当たる部分には「HTMLエスケープ済みの文字列を入れる」という規約を設けて事前にエスケープする。 の3番目以降。 ということで実装してみる。目標としてはXslateのfilterとして実装 [% hashref | json %] の様な形をとり、JSONのvalueにあたる部分はすべてHTML Escapeし、HTML中に
YAPC::Asia Tokyo 2010 に行ってきました。昨年と同様に今年も発表させていただきました。発表内容は以前もお知らせしましたように「テンプレートエンジンの移行」についてお話させていただきました。スライドは slideshare にアップロードしました。 私の発表は最初にトークを応募したときにもっともはてなスターがついていませんでしたので reject されるかヒヤヒヤしていましたがなんとか accept していただいて、とはいえ裏番組が id:lyokato さんだからガラガラかなーと思っていましたが、多くの方にお越しいただいてとてもうれしかったです。私のトークは不思議とご質問をいただくことが多く、今年も4,5つほどいただきました。隙だらけのトークで申し訳ない気持ちもありますが、逆に皆さんのご興味を持っていただいたのかと良い方向に考えてこれからも精進していきたいと思います。私
TT をインストールすると、tpage というコマンドラインツールが付いてきます。こいつを使うと、コマンドから template を扱うことができて、あら便利ですね。 モジュールの雛形とかは下記のような感じで、 $ cat hoge.tt package [% module %]; use stict; use warnings; use 5.008001; our $VERSION = '0.01'; 1; __END__ =head1 NAME [% module %] - =head1 SYNOPSIS use [% module %]; =head1 DESCRIPTION [% module %] is =head1 AUTHOR [% author %] E<lt>[% email %]E<gt> =head1 SEE ALSO =head1 LICENSE This libr
Perl でドキュメントテンプレートシステムを利用したい場合, 変数の展開を使う(ex. print "Hello, ${world_name}\n";) 正規表現の置換を使う HTML::Template を使う Template (Toolkit) を使う あたりが選択肢となるかと思います。 3番目の HTML::Template は,内的には2番目の置換を使っているだけなのでわりとシンプルな仕組みです。できることもわりとシンプルで縛りも多いですが,ロジックとビューの分離という点では縛りのせいで逆に明確にわけることができて,結構人気が高いようです。 4番目の Template Toolkit(以下 TT)はとても高機能で,それゆえ一部の層に人気です。ベンチマーク結果 によると(デフォルトの設定では) HTML::Template には勝ててはいないようですが,高機能な割には十分高速だと
前回お話したように,Template::Provider は,コンパイルしたテンプレートオブジェクトを,デフォルトではメモリ(内部のハッシュ)に蓄えておき,出来る限り再利用しています。ただ,当然再利用するためにはテンプレート「自体は」静的なものでなくてはいけませんから,ファイル名が指定された場合のみキャッシュします。つまり,生データのスカラハッシュや,ファイルグロブを与えた場合は,毎回コンパイルしているわけです。 デフォルトでは読み込まれれば読み込まれただけキャッシュにためておきますが,CACHE_SIZE というパラメータを初期化時に指定しておくと,その数のテンプレートだけ保持します。4 と指定しておくと,4つぶんだけキャッシュして,5つめがきたときには,一番使われていない(LRU)エントリを削除します。 さて,今回の本題です。Template::Provider には,メモリだけでなく
少々はまったのでメモ。 Template::Providerのサブクラスを使用する場合のオプションに指定方法について。 (この辺の人たち。) はじめはてっきり use Template::MyProvider; # Template::Providerのサブクラス my %tt_opt = ( ABSOLUTE => 1, COMPILE_DIR => '/tmp/tt_compile_normal/', LOAD_TEMPLATES => [Template::MyProvider->new()], ); Template->new(%tt_opt)->process('/tmp/tt/hoge.html', { msg => 'hello world!' }, \my $out) or die; print $out; でいくだろうと思ったんですが設定してる(つもり)はずなのにABSO
大規模なコードベースでリファクタリングを省エネ化するためにcodemodを最近調べていて、軽く試行錯誤したのでそのメモ。 やりたいこと 例えば以下のようなTable Driven TestなコードをBEFOREからAFTERに書き換えたい。コード量が多いため人間がやるのは現実的ではなく、codemodで機械的に書き換えたい。 BEFORE package main import ( "slices" "testing" ) func TestContains(t *testing.T) { type args struct { ss []string s string } tests := []struct { name string args args want bool }{ { name: "empty: false", args: args{[]string{}, ""}, wan
最近は Text::MicroTemplate (TMT) をよく利用するようになったのですが、使用するにつれ不満なところが出てきたのでそれを解決するために少し拡張してみました。 実際には拡張したのは Text::MicroTemplate ではなく、Text::MicroTemplate::File です。 http://github.com/typester/text-microtemplate-extended-perl/tree/master 現在二つの機能を追加してあるのでそれを以下にまとめておきます。 テンプレートの継承機能を追加 テンプレートを分割するような規模になってくると現状の TMT では <?=r $self->render_file('header.mt') ?> ここにコンテンツ <?=r $self->render_file('footer.mt') ?> など
はてなグループの終了日を2020年1月31日(金)に決定しました 以下のエントリの通り、今年末を目処にはてなグループを終了予定である旨をお知らせしておりました。 2019年末を目処に、はてなグループの提供を終了する予定です - はてなグループ日記 このたび、正式に終了日を決定いたしましたので、以下の通りご確認ください。 終了日: 2020年1月31日(金) エクスポート希望申請期限:2020年1月31日(金) 終了日以降は、はてなグループの閲覧および投稿は行えません。日記のエクスポートが必要な方は以下の記事にしたがって手続きをしてください。 はてなグループに投稿された日記データのエクスポートについて - はてなグループ日記 ご利用のみなさまにはご迷惑をおかけいたしますが、どうぞよろしくお願いいたします。 2020-06-25 追記 はてなグループ日記のエクスポートデータは2020年2月28
TTの話。Catalyst にて。あるところは 'foo/wrapper.tt'、あるところは 'bar/wrapper.tt' を使いたい 思いついた方法 1. むりやり $c->view('TT')->template->service->{WRAPPER} = [ 'foo/wrapper.tt' ]; なんかヤ いろいろワナ有 2. WRAPPER文に変数 wapperされるほうのテンプレート [% WRAPPER $wapper%] ... [% END # WRAPPER %]で、 $c->stash->{wrapper} = 'foo/wrapper.tt'; WRAPPER文(特にEND)がめんどい 3. PROCESS文に変数 configでオートラッパーを xxx/wrapper.tt とかにして、それにはただ [% PROCESS $wrapper -%]と書き、 $
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く