コードDJ第a回 – HTML5とそれ以外を判別する
毎週火曜日、Help me, hackers!に上がったコードを紹介していくコードDJ 第a回。
コレを作ってて2ヶ月近くポストして無かったですけどなにか?
(@佐々木健介)
komagata a.k.a. DJです。
今回紹介するのはコレ。
Ham CutletをHTML5に対応する – Help me, hackers!
HTMLのインデントを綺麗にする誰得サービスHam Cutlet。内部で使ってるHamlがデフォルトxhtmlなのでhtml5を食わせるとコードが破壊される。それを解決してくれたナイスガイがmat_aki a.k.a. youroomの中の人。ありがとう!
mat_akiのパッチはこのコードに集約される。
app.rb at 236baf240828a805726a49adb8c76fd4f048f802 from mataki’s hamcutlet – GitHub
[cc lang=”ruby”] def html2haml(html)
html5 = (doctype = Hpricot(html).children.detect{ |e| e.doctype? }) ? doctype.public_id.nil? : false
haml = Haml::HTML.new(html.gsub(/t/, ‘ ‘)).render
Haml::Engine.new(haml, :attr_wrapper => ‘”‘, :format => html5 ? :html5 : :xhtml ).render
end[/cc]
doctypeを見てHTML5なのか、それ以外なのかを判断してる。
[cc lang=”html”][/cc]
XHTML 1.0のdoctypeはこんな感じ。PUBLICなんとかがある。
[cc lang=”html”][/cc]
HTML5のdoctypeはこんな感じでシンプル。
Hpricotを使って「doctypeがあるけどpublicなんとかが無いものはHTML5」としている。Haml::Engineが元からやって欲しいような気もするが、将来のバージョンではそうなるのかもしれない。
気づいたらHam Cutletもいつのまにやら色んなプログラマーの手が入ってるプロジェクトになってる。kyannyの気付かない内にmat_akiとコラボレーションしてる状態になってるんじゃないかなどと考えると面白い。オマエら一緒のコードいじってるぜ!