runo 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) hide show
  1. data/LICENSE +19 -0
  2. data/README.rdoc +120 -0
  3. data/bin/runo +35 -0
  4. data/lib/_error.rb +14 -0
  5. data/lib/_field.rb +260 -0
  6. data/lib/_i18n.rb +141 -0
  7. data/lib/_parser.rb +243 -0
  8. data/lib/_path.rb +86 -0
  9. data/lib/_storage/_storage.rb +213 -0
  10. data/lib/_storage/file.rb +200 -0
  11. data/lib/_storage/sequel.rb +174 -0
  12. data/lib/_storage/temp.rb +73 -0
  13. data/lib/_widget/action_create.rb +23 -0
  14. data/lib/_widget/action_login.rb +22 -0
  15. data/lib/_widget/action_signup.rb +16 -0
  16. data/lib/_widget/action_update.rb +16 -0
  17. data/lib/_widget/crumb.rb +24 -0
  18. data/lib/_widget/done.rb +16 -0
  19. data/lib/_widget/login.rb +25 -0
  20. data/lib/_widget/me.rb +31 -0
  21. data/lib/_widget/message.rb +51 -0
  22. data/lib/_widget/navi.rb +88 -0
  23. data/lib/_widget/submit.rb +49 -0
  24. data/lib/_widget/view_ym.rb +77 -0
  25. data/lib/_workflow/_workflow.rb +89 -0
  26. data/lib/_workflow/attachment.rb +50 -0
  27. data/lib/_workflow/blog.rb +28 -0
  28. data/lib/_workflow/contact.rb +23 -0
  29. data/lib/_workflow/forum.rb +26 -0
  30. data/lib/_workflow/register.rb +39 -0
  31. data/lib/meta/_meta.rb +20 -0
  32. data/lib/meta/group.rb +19 -0
  33. data/lib/meta/id.rb +59 -0
  34. data/lib/meta/owner.rb +21 -0
  35. data/lib/meta/timestamp.rb +118 -0
  36. data/lib/runo.rb +396 -0
  37. data/lib/scalar/checkbox.rb +68 -0
  38. data/lib/scalar/file.rb +144 -0
  39. data/lib/scalar/img.rb +112 -0
  40. data/lib/scalar/password.rb +58 -0
  41. data/lib/scalar/radio.rb +47 -0
  42. data/lib/scalar/select.rb +47 -0
  43. data/lib/scalar/text.rb +38 -0
  44. data/lib/scalar/textarea.rb +35 -0
  45. data/lib/scalar/textarea_pre.rb +14 -0
  46. data/lib/scalar/textarea_wiki.rb +173 -0
  47. data/lib/set/_set.rb +195 -0
  48. data/lib/set/dynamic.rb +177 -0
  49. data/lib/set/static.rb +102 -0
  50. data/lib/set/static_folder.rb +96 -0
  51. data/locale/en/index.po +242 -0
  52. data/locale/index.pot +243 -0
  53. data/locale/ja/index.po +242 -0
  54. data/locale/lazy_parser.rb +54 -0
  55. data/skel/config.ru +27 -0
  56. data/skel/skin/_users/00000000_frank-avatar.jpg +0 -0
  57. data/skel/skin/_users/00000000_frank-avatar_small.jpg +0 -0
  58. data/skel/skin/_users/00000000_frank.yaml +12 -0
  59. data/skel/skin/_users/00000000_root-avatar.jpg +0 -0
  60. data/skel/skin/_users/00000000_root-avatar_small.jpg +0 -0
  61. data/skel/skin/_users/00000000_root.yaml +11 -0
  62. data/skel/skin/_users/css/users.css +21 -0
  63. data/skel/skin/_users/css/users.less +25 -0
  64. data/skel/skin/_users/done.html +42 -0
  65. data/skel/skin/_users/index.html +46 -0
  66. data/skel/skin/_users/index.yaml +3 -0
  67. data/skel/skin/_users/summary.html +40 -0
  68. data/skel/skin/css/base.css +93 -0
  69. data/skel/skin/css/base.less +139 -0
  70. data/skel/skin/css/coax.css +199 -0
  71. data/skel/skin/css/coax.less +244 -0
  72. data/skel/skin/examples/blog/20091214_0001.yaml +8 -0
  73. data/skel/skin/examples/blog/20100630_0001.yaml +8 -0
  74. data/skel/skin/examples/blog/20100630_0002.yaml +14 -0
  75. data/skel/skin/examples/blog/20100701_0001.yaml +8 -0
  76. data/skel/skin/examples/blog/20100701_0002-a-20100701_0001-f.jpg +0 -0
  77. data/skel/skin/examples/blog/20100701_0002-a-20100701_0001-f_small.jpg +0 -0
  78. data/skel/skin/examples/blog/20100701_0002.yaml +19 -0
  79. data/skel/skin/examples/blog/frank/20100701_0001.yaml +10 -0
  80. data/skel/skin/examples/blog/frank/index.yaml +4 -0
  81. data/skel/skin/examples/blog/index.html +51 -0
  82. data/skel/skin/examples/blog/rss.xml +18 -0
  83. data/skel/skin/examples/contact/20100701_0001-file.txt +1 -0
  84. data/skel/skin/examples/contact/20100701_0001.yaml +15 -0
  85. data/skel/skin/examples/contact/20100701_0002.yaml +8 -0
  86. data/skel/skin/examples/contact/20100701_0003.yaml +9 -0
  87. data/skel/skin/examples/contact/index.html +47 -0
  88. data/skel/skin/examples/contact/js/contact.js +13 -0
  89. data/skel/skin/examples/contact/summary.html +54 -0
  90. data/skel/skin/examples/forum/20100701_0001.yaml +41 -0
  91. data/skel/skin/examples/forum/20100701_0002.yaml +25 -0
  92. data/skel/skin/examples/forum/index.html +68 -0
  93. data/skel/skin/examples/forum/summary.html +47 -0
  94. data/skel/skin/examples/index.html +75 -0
  95. data/skel/skin/index.html +41 -0
  96. data/skel/skin/js/base.js +50 -0
  97. data/t/locale/de/index.po +19 -0
  98. data/t/locale/en-GB/index.po +25 -0
  99. data/t/locale/ja/index.po +30 -0
  100. data/t/skin/_users/00000000_test.yaml +3 -0
  101. data/t/skin/_users/index.html +13 -0
  102. data/t/skin/foo/20091120_0001.yaml +7 -0
  103. data/t/skin/foo/bar/20091120_0001.yaml +5 -0
  104. data/t/skin/foo/bar/index.yaml +5 -0
  105. data/t/skin/foo/baz/css/baz.css +1 -0
  106. data/t/skin/foo/css/foo.css +1 -0
  107. data/t/skin/foo/index.html +14 -0
  108. data/t/skin/foo/index.yaml +7 -0
  109. data/t/skin/foo/not_css/foo.css +1 -0
  110. data/t/skin/foo/sub-20100306_0001.yaml +3 -0
  111. data/t/skin/index.yaml +3 -0
  112. data/t/skin/t_attachment/index.html +13 -0
  113. data/t/skin/t_contact/done.html +6 -0
  114. data/t/skin/t_contact/index.html +9 -0
  115. data/t/skin/t_file/index.html +16 -0
  116. data/t/skin/t_img/index.html +14 -0
  117. data/t/skin/t_img/test.jpg +0 -0
  118. data/t/skin/t_select/index.html +9 -0
  119. data/t/skin/t_store/index.html +9 -0
  120. data/t/skin/t_summary/20100326_0001.yaml +3 -0
  121. data/t/skin/t_summary/create.html +9 -0
  122. data/t/skin/t_summary/index.html +9 -0
  123. data/t/skin/t_summary/summary.html +9 -0
  124. data/t/t.rb +27 -0
  125. data/t/test_checkbox.rb +273 -0
  126. data/t/test_field.rb +330 -0
  127. data/t/test_file.rb +900 -0
  128. data/t/test_id.rb +215 -0
  129. data/t/test_img.rb +328 -0
  130. data/t/test_meta.rb +57 -0
  131. data/t/test_parser.rb +1266 -0
  132. data/t/test_password.rb +188 -0
  133. data/t/test_radio.rb +226 -0
  134. data/t/test_role.rb +249 -0
  135. data/t/test_runo.rb +742 -0
  136. data/t/test_runo_call.rb +1286 -0
  137. data/t/test_runo_i18n.rb +318 -0
  138. data/t/test_select.rb +182 -0
  139. data/t/test_set_complex.rb +527 -0
  140. data/t/test_set_dynamic.rb +1504 -0
  141. data/t/test_set_folder.rb +515 -0
  142. data/t/test_set_permit.rb +246 -0
  143. data/t/test_set_static.rb +445 -0
  144. data/t/test_storage.rb +915 -0
  145. data/t/test_text.rb +125 -0
  146. data/t/test_textarea.rb +138 -0
  147. data/t/test_timestamp.rb +473 -0
  148. data/t/test_workflow.rb +367 -0
  149. metadata +345 -0
@@ -0,0 +1,47 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
6
+
7
+ <head>
8
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
9
+ <title>@(label)</title>
10
+ <link rel="stylesheet" href="/css/base.css" type="text/css" media="screen" />
11
+ <link rel="stylesheet" href="/css/coax.css" type="text/css" media="screen" />
12
+ </head>
13
+
14
+ <body>
15
+ <div id="container">
16
+ <div id="header">
17
+ <h1><a href=".">@(label)</a></h1>
18
+ $(.crumb)
19
+ </div>
20
+
21
+ <div id="center" class="column">
22
+ <table id="main" class="runo-contact summary" style="border: 1px solid black;">
23
+ <tr>
24
+ <th>Subject</th>
25
+ <th>Author</th>
26
+ <th>Posted at</th>
27
+ </tr>
28
+ <tr class="body">
29
+ <td>$(subject)</td>
30
+ <td>$(_owner)</td>
31
+ <td>$(_timestamp)</td>
32
+ </tr>
33
+ </table>
34
+ </div>
35
+
36
+ <div id="right" class="column">
37
+ $(.action_signup)
38
+ $(.me)
39
+ $(main.action_create)
40
+ $(main.view_ym)
41
+ </div>
42
+
43
+ <div id="footer"></div>
44
+ </div>
45
+ </body>
46
+
47
+ </html>
@@ -0,0 +1,75 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="_(en)" lang="_(en)">
6
+
7
+ <head>
8
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
9
+ <meta name="runo-label" content="Examples" />
10
+ <title>@(label)</title>
11
+ <link rel="stylesheet" href="/css/base.css" type="text/css" media="screen" />
12
+ <link rel="stylesheet" href="/css/coax.css" type="text/css" media="screen" />
13
+ </head>
14
+
15
+ <body>
16
+ <div id="container">
17
+ <div id="header">
18
+ <h1><a href=".">@(label)</a></h1>
19
+ $(.crumb)
20
+ </div>
21
+
22
+ <div id="center" class="column">
23
+ <h2>@(label)</h2>
24
+ <p>
25
+ This directory contains some sample apps to show you how good Runo works.
26
+ When you don't need them any more, you can just remove skin/examples/ directory and they will be gone.
27
+ </p>
28
+ <p>
29
+ You may have to login to try some features of the apps. By default, there are two users.
30
+ The first user is "root", the admin of the whole Runo app.
31
+ The second user is "frank", who has no special privilege.
32
+ Their initial passwords are same as their names (e.g. "root" for root, "frank" for frank).
33
+ And of course, you can create your own account at <a href="../_users/create.html">here</a>.
34
+ </p>
35
+ <p>
36
+ The data are stored in plain YAML files under data/examples/ by default. You can store the data on any RDB by fiddling config.ru.
37
+ </p>
38
+ <dl>
39
+ <dt><a href="./blog/">Blog</a></dt>
40
+ <dd>
41
+ The admin (root) can post / update / delete entries and everybody can read them.
42
+ Typical features such as monthly archives or syndication by RSS are provided.
43
+ You have to login as "root" to post new articles.
44
+ </dd>
45
+ <dt><a href="./blog/frank/">Frank's Blog</a></dt>
46
+ <dd>
47
+ This is an example of inheritance.
48
+ By simply making an empty sub-directory (blog/frank/), all HTMLs are inherited from the upper directory (blog/).
49
+ Then, blog/frank/index.yaml overrides the label ("Frank's Blog") and the admin (frank).
50
+ </dd>
51
+ <dt><a href="./contact/">Contact Form</a></dt>
52
+ <dd>
53
+ This is an "everybody -> admin" type app.
54
+ Everybody other than root can post this form and only root can see the posted result.
55
+ The index.html should be a good sample of various items such like radio, select, checkbox etc.
56
+ </dd>
57
+ <dt><a href="./forum/">Forum</a></dt>
58
+ <dd>
59
+ This is an example of a nested model.
60
+ The app will have many posts, and each post will have many comments.
61
+ Everybody who logged in can create a new post, or reply to a existing post.
62
+ </dd>
63
+ </dl>
64
+ <div id="main" class="runo-blog"></div>
65
+ <!-- $(main.action_create) -->
66
+ </div>
67
+
68
+ <div id="right" class="column">
69
+ </div>
70
+
71
+ <div id="footer"></div>
72
+ </div>
73
+ </body>
74
+
75
+ </html>
@@ -0,0 +1,41 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="_(en)" lang="_(en)">
6
+
7
+ <head>
8
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
9
+ <meta name="runo-label" content="Home" />
10
+ <title>_(It works!)</title>
11
+ <link rel="stylesheet" href="/css/base.css" type="text/css" media="screen" />
12
+ <link rel="stylesheet" href="/css/coax.css" type="text/css" media="screen" />
13
+ <script type="text/javascript" src="http://code.jquery.com/jquery-1.4.2.min.js"></script>
14
+ <script type="text/javascript" src="/js/base.js"></script>
15
+ </head>
16
+
17
+ <body>
18
+ <div id="container">
19
+ <div id="header">
20
+ <h1><a href=".">_(It works!)</a></h1>
21
+ $(.crumb)
22
+ </div>
23
+
24
+ <div id="center" class="column">
25
+ <h2>_(Welcome!)</h2>
26
+ <p>
27
+ This is your homepage of the Runo app.<br />
28
+ You can play with <a href="./examples/">the examples</a> before making your first Runo app.
29
+ </p>
30
+ <div id="main" class="runo-blog"></div>
31
+ <!-- $(main.action_create) -->
32
+ </div>
33
+
34
+ <div id="right" class="column">
35
+ </div>
36
+
37
+ <div id="footer"></div>
38
+ </div>
39
+ </body>
40
+
41
+ </html>
@@ -0,0 +1,50 @@
1
+ $(document).ready(function() {
2
+ $('span.error').hover(
3
+ function(){
4
+ $('.error_message', this).fadeIn(150);
5
+ },
6
+ function(){
7
+ if ($(this).is(':not(.focused)')) $('.error_message', this).fadeOut(50);
8
+ }
9
+ );
10
+
11
+ $(':input', $('span.error')).focus(
12
+ function(){
13
+ var d = $(this).closest('span.error');
14
+ d.addClass('focused');
15
+ $('.error_message', d).fadeIn(150);
16
+ }
17
+ ).blur(
18
+ function(){
19
+ var d = $(this).closest('span.error');
20
+ d.removeClass('focused');
21
+ $('.error_message', d).fadeOut(50);
22
+ }
23
+ ).change(
24
+ function(){
25
+ var d = $(this).closest('span.error');
26
+ d.removeClass('error');
27
+ d.removeClass('focused');
28
+ $('.error_message', d).hide();
29
+ }
30
+ );
31
+
32
+ $('.error_message').hide().css({
33
+ 'color': 'white',
34
+ 'background': 'red',
35
+ 'opacity': '0.9',
36
+ 'position': 'absolute',
37
+ 'margin-left': '0',
38
+ 'margin-top': '2px',
39
+ 'padding': '.3em 1em .3em 1em',
40
+ '-moz-border-radius': '.3em',
41
+ '-webkit-border-radius': '.3em'
42
+ });
43
+
44
+ if ($('span.error').length > 0) {
45
+ $(':input:enabled:first', $('span.error:first')).focus().select();
46
+ }
47
+ else {
48
+ $(':input:enabled:first').focus().select();
49
+ }
50
+ });
@@ -0,0 +1,19 @@
1
+ # just a test.
2
+ # Copyright (C) 2010 Akira FUNAI
3
+ # This file is distributed under the same license as the PACKAGE package.
4
+ # FIRST AUTHOR Akira FUNAI, 2010.
5
+ #
6
+
7
+ "Project-Id-Version: 0.01\n"
8
+ "POT-Creation-Date: 2010-05-06 15:11+0900\n"
9
+ "PO-Revision-Date: 2010-05-06 15:11+0900\n"
10
+ "Last-Translator: Akira FUNAI <akira@funai.com>\n"
11
+ "Language-Team: none <nobody@example.com>\n"
12
+ "MIME-Version: 1.0\n"
13
+ "Content-Type: text/plain; charset=UTF-8\n"
14
+ "Content-Transfer-Encoding: 8bit\n"
15
+ "Plural-Forms: nplurals=2; plural=n != 1;\n"
16
+
17
+ #: t.rb:1234
18
+ msgid "malformed input."
19
+ msgstr "Fehlerhafte Eingabe."
@@ -0,0 +1,25 @@
1
+ # just a test.
2
+ # Copyright (C) 2010 Akira FUNAI
3
+ # This file is distributed under the same license as the PACKAGE package.
4
+ # FIRST AUTHOR Akira FUNAI, 2010.
5
+ #
6
+
7
+ "Project-Id-Version: 0.01\n"
8
+ "POT-Creation-Date: 2010-05-06 15:11+0900\n"
9
+ "PO-Revision-Date: 2010-05-06 15:11+0900\n"
10
+ "Last-Translator: Akira FUNAI <akira@funai.com>\n"
11
+ "Language-Team: none <nobody@example.com>\n"
12
+ "MIME-Version: 1.0\n"
13
+ "Content-Type: text/plain; charset=UTF-8\n"
14
+ "Content-Transfer-Encoding: 8bit\n"
15
+ "Plural-Forms: nplurals=2; plural=n != 1;\n"
16
+
17
+ #: t.rb:1234
18
+ msgid "color"
19
+ msgstr "colour"
20
+
21
+ #: t.rb:2345
22
+ msgid "one color"
23
+ msgid_plural "%{n} colors"
24
+ msgstr[0] "one colour"
25
+ msgstr[1] "%{n} colours"
@@ -0,0 +1,30 @@
1
+ # just a test.
2
+ # Copyright (C) 2010 Akira FUNAI
3
+ # This file is distributed under the same license as the PACKAGE package.
4
+ # FIRST AUTHOR Akira FUNAI, 2010.
5
+ #
6
+
7
+ "Project-Id-Version: 0.01\n"
8
+ "POT-Creation-Date: 2010-05-06 15:11+0900\n"
9
+ "PO-Revision-Date: 2010-05-06 15:11+0900\n"
10
+ "Last-Translator: Akira FUNAI <akira@funai.com>\n"
11
+ "Language-Team: none <nobody@example.com>\n"
12
+ "MIME-Version: 1.0\n"
13
+ "Content-Type: text/plain; charset=UTF-8\n"
14
+ "Content-Transfer-Encoding: 8bit\n"
15
+ "Plural-Forms: nplurals=1; plural=0;\n"
16
+
17
+ #: t.rb:1234
18
+ msgid "color"
19
+ msgstr "色"
20
+ # msgstr "mmm"
21
+
22
+ #: t.rb:2234
23
+ #, fuzzy
24
+ msgid "sound"
25
+ msgstr "音"
26
+
27
+ #: t.rb:2345
28
+ msgid "one color"
29
+ msgid_plural "%{n} colors"
30
+ msgstr[0] "%{n}色"
@@ -0,0 +1,3 @@
1
+ ---
2
+ _id: test
3
+ password: ulrR7VSYJHTs6
@@ -0,0 +1,13 @@
1
+ <html>
2
+ <head><title>@(label)</title></head>
3
+ <body>
4
+ <h1>@(label)</h1>
5
+ <dl id="main" class="runo-blog">
6
+ <dt>id: $(_id = meta-id 32 1..32)</dt>
7
+ <dd>
8
+ password: $(password = password 12)
9
+ avatar: $(avatar = img 72*72 0...320000)
10
+ </dd>
11
+ </dl>
12
+ </body>
13
+ </html>
@@ -0,0 +1,7 @@
1
+ _owner: frank
2
+ name: FZ
3
+ comment: oops.
4
+ replies:
5
+ 20091201_0001:
6
+ _owner: carl
7
+ reply: foo.
@@ -0,0 +1,5 @@
1
+ ---
2
+ _owner: carl
3
+ replies:
4
+ 20091208_0001:
5
+ reply: wow.
@@ -0,0 +1,5 @@
1
+ ---
2
+ label: 'Bar Folder'
3
+ group:
4
+ - carl
5
+ - don
@@ -0,0 +1 @@
1
+ #moo {}
@@ -0,0 +1 @@
1
+ #foo {bar: baz;}
@@ -0,0 +1,14 @@
1
+ <html>
2
+ <head><title>@(label)</title></head>
3
+ <body>
4
+ <h1>@(label)</h1>
5
+ <ul id="main" class="runo-blog">
6
+ <li>
7
+ $(name = text 32 1..32 :'foo'): $(comment = text 64 1..64 :'bar!')
8
+ <ul id="files" class="runo-attachment"><li>$(file=text)</li></ul>
9
+ <ul id="replies" class="runo-blog"><li>$(reply=text)</li></ul>
10
+ </li>
11
+ </ul>
12
+ <ul id="sub" class="runo-blog"><li>$(article=text)</li></ul>
13
+ </body>
14
+ </html>
@@ -0,0 +1,7 @@
1
+ ---
2
+ label: 'Foo Folder'
3
+ admin: frank
4
+ group:
5
+ - roy
6
+ - jim
7
+
@@ -0,0 +1 @@
1
+ #foo {bar: baz;}
@@ -0,0 +1,3 @@
1
+ ---
2
+ _owner: root
3
+ article: qux
@@ -0,0 +1,3 @@
1
+ ---
2
+ label: 'Root'
3
+
@@ -0,0 +1,13 @@
1
+ <html>
2
+ <head><title>@(label)</title></head>
3
+ <body>
4
+ <h1>@(label)</h1>
5
+ <ul id="main" class="runo-blog">
6
+ <li title="tArticle, tArticles">
7
+ $(comment=text)
8
+ <ul id="files" class="runo-attachment"><li>$(file=text 1..16)</li></ul>
9
+ <ul id="replies" class="runo-blog"><li>$(reply=text)</li></ul>
10
+ </li>
11
+ </ul>
12
+ </body>
13
+ </html>
@@ -0,0 +1,6 @@
1
+ <html>
2
+ <head><title>@(label)</title></head>
3
+ <body>
4
+ <p>thank you!</p>
5
+ </body>
6
+ </html>
@@ -0,0 +1,9 @@
1
+ <html>
2
+ <head><title>@(label)</title></head>
3
+ <body>
4
+ <h1>@(label)</h1>
5
+ <ul id="main" class="runo-contact">
6
+ <li>$(name = text 32 1..32 :'foo'): $(comment = text 64 1..64 :'bar!')</li>
7
+ </ul>
8
+ </body>
9
+ </html>
@@ -0,0 +1,16 @@
1
+ <html>
2
+ <head><title>@(label)</title></head>
3
+ <body>
4
+ <h1>@(label)</h1>
5
+ <ul id="main" class="runo-blog">
6
+ <li>
7
+ $(_timestamp = meta-timestamp can_edit)
8
+ $(foo = file 0..50)
9
+ $(bar = file 0..50)
10
+ <ul id="baz" class="runo-attachment">
11
+ $(qux = file 1..50)
12
+ </ul>
13
+ </li>
14
+ </ul>
15
+ </body>
16
+ </html>
@@ -0,0 +1,14 @@
1
+ <html>
2
+ <head><title>@(label)</title></head>
3
+ <body>
4
+ <h1>@(label)</h1>
5
+ <ul id="main" class="runo-blog">
6
+ <li>
7
+ $(foo = img 32*32 1..5000 crop)
8
+ <ul id="baz" class="runo-attachment">
9
+ $(qux = img 16*16 1..5000 crop)
10
+ </ul>
11
+ </li>
12
+ </ul>
13
+ </body>
14
+ </html>