単純なYAMLがMarkdownによく似ているという事実に基づいて、私はついに約5行のコードでこれを行うための非常にエレガントな方法を思いつきました。
これから始めます:
---
all:
foo: 1025
bar:
baz: 37628
quux:
a: 179
b: 7
正規表現(この場合はPerl)を使用して開始を削除し、---
各行のキーの前にハイフンを配置します。
$data =~ s/^---\n//s;
$data =~ s/^(\s*)(\S.*)$/$1- $2/gm;
出来上がり、マークダウン:
- all:
- foo: 1025
- bar:
- baz: 37628
- quux:
- a: 179
- b: 7
ここで、Markdownプロセッサを介して実行します。
use Text::Markdown qw( markdown );
print markdown($data);
そして、HTMLリストを取得します-クリーン、セマンティック、下位互換性:
<ul>
<li>all:
<ul>
<li>foo: 1025</li>
<li>bar:</li>
<li>baz: 37628</li>
<li>quux:
<ul>
<li>a: 179</li>
<li>b: 7</li>
</ul>
</li>
</ul>
</li>
</ul>
YUI Treeviewは既存のリストを拡張できるため、すべてをまとめます。
<html>
<head>
<!-- CSS + JS served via YUI hosting: developer.yahoo.com/yui/articles/hosting/ -->
<link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/combo?2.6.0/build/treeview/assets/skins/sam/treeview.css">
<script type="text/javascript" src="http://yui.yahooapis.com/combo?2.6.0/build/yahoo-dom-event/yahoo-dom-event.js&2.6.0/build/treeview/treeview-min.js"></script>
</head>
<body>
<div id="markup" class="yui-skin-sam">
<!-- start Markdown-generated list -->
<ul>
<li>all:
<ul>
<li>foo: 1025</li>
<li>bar:</li>
<li>baz: 37628</li>
<li>quux:
<ul>
<li>a: 179</li>
<li>b: 7</li>
</ul>
</li>
</ul>
</li>
</ul>
<!-- end Markdown-generated list -->
</div>
<script type="text/javascript">
var treeInit = function() {
var tree = new YAHOO.widget.TreeView("markup");
tree.render();
};
YAHOO.util.Event.onDOMReady(treeInit);
</script>
</body>
</html>
したがって、これはすべて約5行のコードで機能します(YAMLをMarkdownに変換し、MarkdownをHTMLリストに変換し、そのHTMLリストをテンプレートHTMLファイル内に配置します。生成されたHTMLは、非-昔ながらのリストとしてのJavaScriptブラウザ。