tenjin 0.6.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 (170) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README.txt +54 -0
  3. data/benchmark/bench.rb +502 -0
  4. data/benchmark/bench_context.rb +17 -0
  5. data/benchmark/bench_context.yaml +141 -0
  6. data/benchmark/templates/_footer.html +4 -0
  7. data/benchmark/templates/_header.html +52 -0
  8. data/benchmark/templates/bench_eruby.rhtml +29 -0
  9. data/benchmark/templates/bench_tenjin.rbhtml +29 -0
  10. data/bin/rbtenjin +449 -0
  11. data/doc-api/classes/Tenjin.html +141 -0
  12. data/doc-api/classes/Tenjin/ArrayBufferTemplate.html +270 -0
  13. data/doc-api/classes/Tenjin/BaseContext.html +312 -0
  14. data/doc-api/classes/Tenjin/Context.html +126 -0
  15. data/doc-api/classes/Tenjin/ContextHelper.html +433 -0
  16. data/doc-api/classes/Tenjin/Engine.html +616 -0
  17. data/doc-api/classes/Tenjin/ErubisTemplate.html +166 -0
  18. data/doc-api/classes/Tenjin/HtmlHelper.html +359 -0
  19. data/doc-api/classes/Tenjin/Preprocessor.html +242 -0
  20. data/doc-api/classes/Tenjin/Template.html +916 -0
  21. data/doc-api/created.rid +1 -0
  22. data/doc-api/files/README_txt.html +185 -0
  23. data/doc-api/files/lib/tenjin_rb.html +136 -0
  24. data/doc-api/fr_class_index.html +36 -0
  25. data/doc-api/fr_file_index.html +28 -0
  26. data/doc-api/fr_method_index.html +89 -0
  27. data/doc-api/index.html +24 -0
  28. data/doc-api/rdoc-style.css +208 -0
  29. data/doc/docstyle.css +188 -0
  30. data/doc/examples.html +312 -0
  31. data/doc/faq.html +909 -0
  32. data/doc/users-guide.html +1691 -0
  33. data/lib/tenjin.rb +959 -0
  34. data/setup.rb +1331 -0
  35. data/tenjin.gemspec +58 -0
  36. data/test/assert-text-equal.rb +45 -0
  37. data/test/data/examples/form/create.rbhtml +4 -0
  38. data/test/data/examples/form/form.rbhtml +14 -0
  39. data/test/data/examples/form/layout.rbhtml +8 -0
  40. data/test/data/examples/form/main.rb +9 -0
  41. data/test/data/examples/form/main.result +21 -0
  42. data/test/data/examples/form/update.rbhtml +4 -0
  43. data/test/data/examples/preprocessing/helper.rb +16 -0
  44. data/test/data/examples/preprocessing/main.rb +11 -0
  45. data/test/data/examples/preprocessing/main.result +17 -0
  46. data/test/data/examples/preprocessing/select.rbhtml +15 -0
  47. data/test/data/examples/preprocessing/select_P.result +18 -0
  48. data/test/data/examples/table/table.rb +9 -0
  49. data/test/data/examples/table/table.rbhtml +16 -0
  50. data/test/data/examples/table/table.result +20 -0
  51. data/test/data/examples/table/table_s.result +18 -0
  52. data/test/data/faq/ex1.rbhtml +5 -0
  53. data/test/data/faq/ex10-baselayout.rbhtml +27 -0
  54. data/test/data/faq/ex10-content.rbhtml +12 -0
  55. data/test/data/faq/ex10-customlayout.rbhtml +11 -0
  56. data/test/data/faq/ex10_inherit.result +25 -0
  57. data/test/data/faq/ex11-bench.rb +28 -0
  58. data/test/data/faq/ex11-content.rbhtml +9 -0
  59. data/test/data/faq/ex11-layout1.rbhtml +5 -0
  60. data/test/data/faq/ex11-layout2.rbhtml +6 -0
  61. data/test/data/faq/ex11.rb +5 -0
  62. data/test/data/faq/ex11.rbhtml +8 -0
  63. data/test/data/faq/ex11.source +11 -0
  64. data/test/data/faq/ex11_arraybuffer.result +15 -0
  65. data/test/data/faq/ex1_chksyntax.result +3 -0
  66. data/test/data/faq/ex2-content.rbhtml +3 -0
  67. data/test/data/faq/ex2-layout.rbhtml +11 -0
  68. data/test/data/faq/ex2_removenl.result +19 -0
  69. data/test/data/faq/ex3.rb +4 -0
  70. data/test/data/faq/ex3.rbhtml +1 -0
  71. data/test/data/faq/ex3_escapefunc1.result +2 -0
  72. data/test/data/faq/ex3_escapefunc2.result +2 -0
  73. data/test/data/faq/ex5.rbhtml +7 -0
  74. data/test/data/faq/ex5_template_args.source +9 -0
  75. data/test/data/faq/ex6-content.rhtml +6 -0
  76. data/test/data/faq/ex6-layout.rhtml +6 -0
  77. data/test/data/faq/ex6.rb +10 -0
  78. data/test/data/faq/ex6_eruby.result +12 -0
  79. data/test/data/faq/ex7-expr-pattern.rb +34 -0
  80. data/test/data/faq/ex7-expr-pattern.rbhtml +3 -0
  81. data/test/data/faq/ex7_expr_pattern.result +4 -0
  82. data/test/data/faq/ex8-m18n.rb +77 -0
  83. data/test/data/faq/ex8-m18n.rbhtml +4 -0
  84. data/test/data/faq/ex8_m18n.result +10 -0
  85. data/test/data/faq/ex9-baselayout.rbhtml +8 -0
  86. data/test/data/faq/ex9-content.rbhtml +6 -0
  87. data/test/data/faq/ex9-mylayout.rbhtml +5 -0
  88. data/test/data/faq/ex9_changelayout.result +11 -0
  89. data/test/data/users_guide/content6.rbhtml +3 -0
  90. data/test/data/users_guide/content7.rbhtml +5 -0
  91. data/test/data/users_guide/content8.rbhtml +2 -0
  92. data/test/data/users_guide/contextdata.rb +7 -0
  93. data/test/data/users_guide/datafile.rb +5 -0
  94. data/test/data/users_guide/datafile.yaml +10 -0
  95. data/test/data/users_guide/ex.rbhtml +6 -0
  96. data/test/data/users_guide/ex.result +7 -0
  97. data/test/data/users_guide/ex.script +5 -0
  98. data/test/data/users_guide/ex_script.result +7 -0
  99. data/test/data/users_guide/ex_source.result +8 -0
  100. data/test/data/users_guide/example1.rbhtml +12 -0
  101. data/test/data/users_guide/example1.result +17 -0
  102. data/test/data/users_guide/example10.rbhtml +4 -0
  103. data/test/data/users_guide/example10_template_args.result +6 -0
  104. data/test/data/users_guide/example11.rbhtml +5 -0
  105. data/test/data/users_guide/example11_template_args_result +2 -0
  106. data/test/data/users_guide/example12.rbhtml +12 -0
  107. data/test/data/users_guide/example12_preprocessed.result +10 -0
  108. data/test/data/users_guide/example12_preprocessed_source.result +10 -0
  109. data/test/data/users_guide/example13.rbhtml +6 -0
  110. data/test/data/users_guide/example13_preprocessed.result +2 -0
  111. data/test/data/users_guide/example13_preprocessed_source.result +2 -0
  112. data/test/data/users_guide/example14.rb +32 -0
  113. data/test/data/users_guide/example14.rbhtml +6 -0
  114. data/test/data/users_guide/example14_tmplclass.result +15 -0
  115. data/test/data/users_guide/example15.rb +10 -0
  116. data/test/data/users_guide/example15_escapefunc.result +14 -0
  117. data/test/data/users_guide/example16.rbhtml +4 -0
  118. data/test/data/users_guide/example16a.rb +10 -0
  119. data/test/data/users_guide/example16a.result +4 -0
  120. data/test/data/users_guide/example16b.rb +13 -0
  121. data/test/data/users_guide/example16b.result +4 -0
  122. data/test/data/users_guide/example16c.rb +12 -0
  123. data/test/data/users_guide/example16c.result +4 -0
  124. data/test/data/users_guide/example1_S.result +14 -0
  125. data/test/data/users_guide/example1_SXNC.result +10 -0
  126. data/test/data/users_guide/example1_source.result +14 -0
  127. data/test/data/users_guide/example2.rbhtml +3 -0
  128. data/test/data/users_guide/example2_sb.result2 +9 -0
  129. data/test/data/users_guide/example3.rbhtml +5 -0
  130. data/test/data/users_guide/example3_syntaxcheck.result +2 -0
  131. data/test/data/users_guide/example4.rbhtml +13 -0
  132. data/test/data/users_guide/example4_datafile_rb.result +13 -0
  133. data/test/data/users_guide/example4_yaml.result +13 -0
  134. data/test/data/users_guide/example5.rbhtml +9 -0
  135. data/test/data/users_guide/example5_datastr_rb.result +9 -0
  136. data/test/data/users_guide/example5_datastr_yaml.result +9 -0
  137. data/test/data/users_guide/example6.rbhtml +19 -0
  138. data/test/data/users_guide/example6_layout.result +29 -0
  139. data/test/data/users_guide/example6_nested.result +28 -0
  140. data/test/data/users_guide/example7_layout2.result +13 -0
  141. data/test/data/users_guide/example8_layout3.result +8 -0
  142. data/test/data/users_guide/example9.rbhtml +18 -0
  143. data/test/data/users_guide/example9_capture.result +26 -0
  144. data/test/data/users_guide/footer.html +5 -0
  145. data/test/data/users_guide/footer.rbhtml +4 -0
  146. data/test/data/users_guide/layout6.rbhtml +17 -0
  147. data/test/data/users_guide/layout7.rbhtml +9 -0
  148. data/test/data/users_guide/layout8_html.rbhtml +5 -0
  149. data/test/data/users_guide/layout8_xhtml.rbhtml +6 -0
  150. data/test/data/users_guide/layout9.rbhtml +25 -0
  151. data/test/data/users_guide/sidemenu.rbhtml +5 -0
  152. data/test/data/users_guide/user_app.cgi +39 -0
  153. data/test/data/users_guide/user_app.result +30 -0
  154. data/test/data/users_guide/user_create.rbhtml +6 -0
  155. data/test/data/users_guide/user_edit.rbhtml +7 -0
  156. data/test/data/users_guide/user_form.rbhtml +10 -0
  157. data/test/data/users_guide/user_layout.rbhtml +16 -0
  158. data/test/test_all.rb +23 -0
  159. data/test/test_engine.rb +526 -0
  160. data/test/test_engine.yaml +2039 -0
  161. data/test/test_examples.rb +81 -0
  162. data/test/test_faq.rb +60 -0
  163. data/test/test_htmlhelper.rb +78 -0
  164. data/test/test_main.rb +564 -0
  165. data/test/test_main.yaml +174 -0
  166. data/test/test_template.rb +113 -0
  167. data/test/test_template.yaml +1244 -0
  168. data/test/test_users_guide.rb +75 -0
  169. data/test/testcase-helper.rb +166 -0
  170. metadata +226 -0
@@ -0,0 +1,2039 @@
1
+ ##
2
+ ##
3
+ ##
4
+
5
+ ###
6
+
7
+ - name: basic
8
+ contexts:
9
+ "list":
10
+ title: Users List
11
+ items:
12
+ - name: Robert
13
+ email: bob@example.com
14
+ gender: m
15
+ - name: Margalette
16
+ email: meg@example.com
17
+ gender: w
18
+ - name: William
19
+ email: bill@example.com
20
+ gender: m
21
+ "show":
22
+ title: Show User
23
+ item:
24
+ name: Robert
25
+ email: bob@example.com
26
+ gender: m
27
+ "create":
28
+ title: Create User
29
+ params:
30
+ name:
31
+ email:
32
+ gender:
33
+ "edit":
34
+ title: Edit User
35
+ params:
36
+ name: Robert
37
+ email: bob@example.com
38
+ gender: m
39
+
40
+ templates:
41
+
42
+ - filename: user_layout.xxhtml
43
+ content*:
44
+ "python": |
45
+ <html>
46
+ <body>
47
+ <h1>${title}</h1>
48
+ <div id="sidemenu">
49
+ <?py include(':sidemenu') ?>
50
+ </div>
51
+ <div id="maincontent">
52
+ #{_content}
53
+ </div>
54
+ <div id="footer">
55
+ #{include('footer.html', False)}
56
+ </div>
57
+ </body>
58
+ </html>
59
+ "ruby": |
60
+ <html>
61
+ <body>
62
+ <h1>${@title}</h1>
63
+ <div id="sidemenu">
64
+ <?rb import :sidemenu ?>
65
+ </div>
66
+ <div id="maincontent">
67
+ #{@_content}
68
+ </div>
69
+ <div id="footer">
70
+ #{import 'footer.html', false}
71
+ </div>
72
+ </body>
73
+ </html>
74
+ "perl": |
75
+ <html>
76
+ <body>
77
+ <h1>[=$title=]</h1>
78
+ <div id="sidemenu">
79
+ <?pl include(':sidemenu') ?>
80
+ </div>
81
+ <div id="maincontent">
82
+ [==$_content=]
83
+ </div>
84
+ <div id="footer">
85
+ <?pl include('footer.html') ?>
86
+
87
+ </div>
88
+ </body>
89
+ </html>
90
+ "js": |
91
+ <html>
92
+ <body>
93
+ <h1>${title}</h1>
94
+ <div id="sidemenu">
95
+ <?js include(':sidemenu') ?>
96
+ </div>
97
+ <div id="maincontent">
98
+ #{$_content}
99
+ </div>
100
+ <div id="footer">
101
+ <?js include('footer.html') ?>
102
+
103
+ </div>
104
+ </body>
105
+ </html>
106
+
107
+ - filename: user_list.xxhtml
108
+ content*:
109
+ "python": |
110
+ <ul>
111
+ <?py for item in items: ?>
112
+ <li>${item['name']}
113
+ (${item['email']})</li>
114
+ <?py #end ?>
115
+ </ul>
116
+ "ruby": |
117
+ <ul>
118
+ <?rb for item in @items ?>
119
+ <li>${item['name']}
120
+ (${item['email']})</li>
121
+ <?rb end ?>
122
+ </ul>
123
+ "perl": |
124
+ <ul>
125
+ <?pl for my $item (@$items) { ?>
126
+ <li>[=$item->{name}=]
127
+ ([=$item->{email}=])</li>
128
+ <?pl } ?>
129
+ </ul>
130
+ "js": |
131
+ <ul>
132
+ <?js for (var i=0; i<items.length; i++) { ?>
133
+ <li>${items[i].name}
134
+ (${item[i].email})</li>
135
+ <?js } ?>
136
+ </ul>
137
+
138
+ - filename: user_show.xxhtml
139
+ content*:
140
+ "python": |
141
+ <p>
142
+ Name: ${item['name']}<br />
143
+ Email: ${item['email']}
144
+ </p>
145
+ "ruby": |
146
+ <p>
147
+ Name: ${@item['name']}<br />
148
+ Email: ${@item['email']}
149
+ </p>
150
+ "perl": |
151
+ <p>
152
+ Name: [=$item->{name}=]<br />
153
+ Email: [=$item->{email}=]
154
+ </p>
155
+ "js": |
156
+ <p>
157
+ Name: ${item.name}<br />
158
+ Email: ${item.email}
159
+ </p>
160
+
161
+ - filename: user_form.xxhtml
162
+ content*:
163
+ "python": |
164
+ <p>
165
+ Name: <input type="input" name="name" value="${params['name']}" />
166
+ </p>
167
+ <p>
168
+ Email: <input type="input" name="email" value="${params['email']}" />
169
+ </p>
170
+ "ruby": |
171
+ <p>
172
+ Name: <input type="input" name="name" value="${@params['name']}" />
173
+ </p>
174
+ <p>
175
+ Email: <input type="input" name="email" value="${@params['email']}" />
176
+ </p>
177
+ "perl": |
178
+ <p>
179
+ Name: <input type="input" name="name" value="[=$params->{name}=]" />
180
+ </p>
181
+ <p>
182
+ Email: <input type="input" name="email" value="[=$params->{email}=]" />
183
+ </p>
184
+ "js": |
185
+ <p>
186
+ Name: <input type="input" name="name" value="${params.name}" />
187
+ </p>
188
+ <p>
189
+ Email: <input type="input" name="email" value="${params.email}" />
190
+ </p>
191
+
192
+ - filename: user_create.xxhtml
193
+ desc: import()
194
+ content*:
195
+ "python": |
196
+ <form action="create" method="post">
197
+ <?py include(':form') ?>
198
+ <input type="submit" value="Create" />
199
+ </form>
200
+ "ruby": |
201
+ <form action="create" method="post">
202
+ <?rb import :form ?>
203
+ <input type="submit" value="Create" />
204
+ </form>
205
+ "perl": |
206
+ <form action="create" method="post">
207
+ <?pl include(':form'); ?>
208
+ <input type="submit" value="Create" />
209
+ </form>
210
+ "js": |
211
+ <form action="create" method="post">
212
+ <?js include(':form'); ?>
213
+ <input type="submit" value="Create" />
214
+ </form>
215
+
216
+ - filename: user_edit.xxhtml
217
+ desc: import(append=false)
218
+ content*:
219
+ "python": |
220
+ <form action="edit" method="post">
221
+ #{include('user_form.pyhtml', False)}
222
+ <input type="submit" value="Edit" />
223
+ </form>
224
+ "ruby": |
225
+ <form action="edit" method="post">
226
+ #{import 'user_form.rbhtml', false}
227
+ <input type="submit" value="Edit" />
228
+ </form>
229
+ "perl": |
230
+ <form action="edit" method="post">
231
+ <?pl include('user_form.plhtml')?>
232
+
233
+ <input type="submit" value="Edit" />
234
+ </form>
235
+ "js": |
236
+ <form action="edit" method="post">
237
+ <?js include('user_form.plhtml')?>
238
+
239
+ <input type="submit" value="Edit" />
240
+ </form>
241
+
242
+ - filename: user_sidemenu.xxhtml
243
+ desc: _engine.render()
244
+ content*:
245
+ "python": |
246
+ <a href="/user/list">List</a><br />
247
+ <a href="/user/create">Create</a><br />
248
+ "ruby": |
249
+ <a href="/user/list">List</a><br />
250
+ <a href="/user/create">Create</a><br />
251
+ "perl": |
252
+ <a href="/user/list">List</a><br />
253
+ <a href="/user/create">Create</a><br />
254
+ "js": |
255
+ <a href="/user/list">List</a><br />
256
+ <a href="/user/create">Create</a><br />
257
+
258
+ - filename: footer.html
259
+ desc: _engine.evaluate()
260
+ content*:
261
+ "python": &footer |
262
+ <hr />
263
+ <address>
264
+ copyright&copy;2007 kuwata-lab.com
265
+ </address>
266
+ "ruby": *footer
267
+ "perl": *footer
268
+ "js": *footer
269
+
270
+ expected:
271
+
272
+ - name: user_list_nolayout
273
+ content*:
274
+ "python": &c01 |
275
+ <ul>
276
+ <li>Robert
277
+ (bob@example.com)</li>
278
+ <li>Margalette
279
+ (meg@example.com)</li>
280
+ <li>William
281
+ (bill@example.com)</li>
282
+ </ul>
283
+ "ruby": *c01
284
+ "perl": *c01
285
+ "js": *c01
286
+
287
+ - name: user_show_nolayout
288
+ content*:
289
+ "python": &c02 |
290
+ <p>
291
+ Name: Robert<br />
292
+ Email: bob@example.com
293
+ </p>
294
+ "ruby": *c02
295
+ "perl": *c02
296
+ "js": *c02
297
+
298
+ - name: user_create_nolayout
299
+ content*:
300
+ "python": &c03 |
301
+ <form action="create" method="post">
302
+ <p>
303
+ Name: <input type="input" name="name" value="" />
304
+ </p>
305
+ <p>
306
+ Email: <input type="input" name="email" value="" />
307
+ </p>
308
+ <input type="submit" value="Create" />
309
+ </form>
310
+ "ruby": *c03
311
+ "perl": *c03
312
+ "js": *c03
313
+
314
+ - name: user_edit_nolayout
315
+ content*:
316
+ "python": &c04 |
317
+ <form action="edit" method="post">
318
+ <p>
319
+ Name: <input type="input" name="name" value="Robert" />
320
+ </p>
321
+ <p>
322
+ Email: <input type="input" name="email" value="bob@example.com" />
323
+ </p>
324
+
325
+ <input type="submit" value="Edit" />
326
+ </form>
327
+ "ruby": *c04
328
+ "perl": *c04
329
+ "js": *c04
330
+
331
+ - name: user_list_withlayout
332
+ content*:
333
+ "python": &c05 |
334
+ <html>
335
+ <body>
336
+ <h1>Users List</h1>
337
+ <div id="sidemenu">
338
+ <a href="/user/list">List</a><br />
339
+ <a href="/user/create">Create</a><br />
340
+ </div>
341
+ <div id="maincontent">
342
+ <ul>
343
+ <li>Robert
344
+ (bob@example.com)</li>
345
+ <li>Margalette
346
+ (meg@example.com)</li>
347
+ <li>William
348
+ (bill@example.com)</li>
349
+ </ul>
350
+
351
+ </div>
352
+ <div id="footer">
353
+ <hr />
354
+ <address>
355
+ copyright&copy;2007 kuwata-lab.com
356
+ </address>
357
+
358
+ </div>
359
+ </body>
360
+ </html>
361
+ "ruby": *c05
362
+ "perl": *c05
363
+ "js": *c05
364
+
365
+ - name: user_show_withlayout
366
+ content*:
367
+ "python": &c06 |
368
+ <html>
369
+ <body>
370
+ <h1>Show User</h1>
371
+ <div id="sidemenu">
372
+ <a href="/user/list">List</a><br />
373
+ <a href="/user/create">Create</a><br />
374
+ </div>
375
+ <div id="maincontent">
376
+ <p>
377
+ Name: Robert<br />
378
+ Email: bob@example.com
379
+ </p>
380
+
381
+ </div>
382
+ <div id="footer">
383
+ <hr />
384
+ <address>
385
+ copyright&copy;2007 kuwata-lab.com
386
+ </address>
387
+
388
+ </div>
389
+ </body>
390
+ </html>
391
+ "ruby": *c06
392
+ "perl": *c06
393
+ "js": *c06
394
+
395
+ - name: user_create_withlayout
396
+ content*:
397
+ "python": &c07 |
398
+ <html>
399
+ <body>
400
+ <h1>Create User</h1>
401
+ <div id="sidemenu">
402
+ <a href="/user/list">List</a><br />
403
+ <a href="/user/create">Create</a><br />
404
+ </div>
405
+ <div id="maincontent">
406
+ <form action="create" method="post">
407
+ <p>
408
+ Name: <input type="input" name="name" value="" />
409
+ </p>
410
+ <p>
411
+ Email: <input type="input" name="email" value="" />
412
+ </p>
413
+ <input type="submit" value="Create" />
414
+ </form>
415
+
416
+ </div>
417
+ <div id="footer">
418
+ <hr />
419
+ <address>
420
+ copyright&copy;2007 kuwata-lab.com
421
+ </address>
422
+
423
+ </div>
424
+ </body>
425
+ </html>
426
+ "ruby": *c07
427
+ "perl": *c07
428
+ "js": *c07
429
+
430
+ - name: user_edit_withlayout
431
+ content*:
432
+ "python": &c08 |
433
+ <html>
434
+ <body>
435
+ <h1>Edit User</h1>
436
+ <div id="sidemenu">
437
+ <a href="/user/list">List</a><br />
438
+ <a href="/user/create">Create</a><br />
439
+ </div>
440
+ <div id="maincontent">
441
+ <form action="edit" method="post">
442
+ <p>
443
+ Name: <input type="input" name="name" value="Robert" />
444
+ </p>
445
+ <p>
446
+ Email: <input type="input" name="email" value="bob@example.com" />
447
+ </p>
448
+
449
+ <input type="submit" value="Edit" />
450
+ </form>
451
+
452
+ </div>
453
+ <div id="footer">
454
+ <hr />
455
+ <address>
456
+ copyright&copy;2007 kuwata-lab.com
457
+ </address>
458
+
459
+ </div>
460
+ </body>
461
+ </html>
462
+ "ruby": *c08
463
+ "perl": *c08
464
+ "js": *c08
465
+
466
+
467
+ ### -- for capture test
468
+
469
+ - name: test_capture_and_echo
470
+ layout*:
471
+ "python": |
472
+ <?xml version="1.0" encoding="UTF-8"?>
473
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
474
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
475
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
476
+ <head>
477
+ <title>${title}</title>
478
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
479
+ <link rel="stylesheet" type="text/css" href="style.css" />
480
+ </head>
481
+ <body>
482
+ <h1>${title}</h1>
483
+
484
+ <div id="main_content">
485
+ <?py echo(main_content) ?>
486
+ </div>
487
+
488
+ <div id="footer">
489
+ <?py echo(footer) ?>
490
+ </div>
491
+
492
+ </body>
493
+ </html>
494
+ "ruby": |
495
+ <?xml version="1.0" encoding="UTF-8"?>
496
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
497
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
498
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
499
+ <head>
500
+ <title>${@title}</title>
501
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
502
+ <link rel="stylesheet" type="text/css" href="style.css" />
503
+ </head>
504
+ <body>
505
+ <h1>${@title}</h1>
506
+
507
+ <div id="main_content">
508
+ <?rb echo(@main_content) ?>
509
+ </div>
510
+
511
+ <div id="footer">
512
+ <?rb echo(@footer) ?>
513
+ </div>
514
+
515
+ </body>
516
+ </html>
517
+ "perl": |
518
+ <?xml version="1.0" encoding="UTF-8"?>
519
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
520
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
521
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
522
+ <head>
523
+ <title>[=$title=]</title>
524
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
525
+ <link rel="stylesheet" type="text/css" href="style.css" />
526
+ </head>
527
+ <body>
528
+ <h1>[=$title=]</h1>
529
+
530
+ <div id="main_content">
531
+ <?pl echo($main_content) ?>
532
+ </div>
533
+
534
+ <div id="footer">
535
+ <?pl echo($footer) ?>
536
+ </div>
537
+
538
+ </body>
539
+ </html>
540
+ "js": |
541
+ <?xml version="1.0" encoding="UTF-8"?>
542
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
543
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
544
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
545
+ <head>
546
+ <title>${title}</title>
547
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
548
+ <link rel="stylesheet" type="text/css" href="style.css" />
549
+ </head>
550
+ <body>
551
+ <h1>${title}</h1>
552
+
553
+ <div id="main_content">
554
+ <?js echo(main_content) ?>
555
+ </div>
556
+
557
+ <div id="footer">
558
+ <?js echo(footer) ?>
559
+ </div>
560
+
561
+ </body>
562
+ </html>
563
+
564
+ content*:
565
+ "python": |
566
+ <html>
567
+ <body>
568
+ <h1><?py
569
+ start_capture('title')
570
+ ?>Capturing Example<?py
571
+ stop_capture()
572
+ ?></h1>
573
+
574
+ <?py start_capture('main_content') ?>
575
+ <table>
576
+ <?py for i, item in enumerate(items): ?>
577
+ <?py color = i % 2 == 0 and '#FFCCCC' or '#CCCCFF' ?>
578
+ <tr bgcolor="#{color}">
579
+ <td>${item}</td>
580
+ </tr>
581
+ <?py #endfor ?>
582
+ </table>
583
+ <?py stop_capture(False) ?>
584
+ <?py _context['main_content'] = main_content ?>
585
+
586
+ <?py start_capture() ?>
587
+ <hr>
588
+ <address>
589
+ <a href="mailto:webmaster@example.com">webmaster@example.com</a>
590
+ </address>
591
+ <?py _context['footer'] = stop_capture(False) ?>
592
+
593
+ </body>
594
+ </html>
595
+ "ruby": |
596
+ <html>
597
+ <body>
598
+ <h1><?rb start_capture(:title) do ?>Capturing Example<?rb end ?></h1>
599
+
600
+ <?rb start_capture(:main_content) ?>
601
+ <table>
602
+ <?rb @items.each_with_index do |item, i| ?>
603
+ <?rb color = i % 2 == 0 ? '#FFCCCC' : '#CCCCFF' ?>
604
+ <tr bgcolor="#{color}">
605
+ <td>${item}</td>
606
+ </tr>
607
+ <?rb end ?>
608
+ </table>
609
+ <?rb stop_capture() ?>
610
+
611
+ <?rb start_capture() ?>
612
+ <hr>
613
+ <address>
614
+ <a href="mailto:webmaster@example.com">webmaster@example.com</a>
615
+ </address>
616
+ <?rb @footer = stop_capture() ?>
617
+
618
+ </body>
619
+ </html>
620
+ "perl": |
621
+ <html>
622
+ <body>
623
+ <h1><?pl start_capture('title') ?>Capturing Example<?pl stop_capture() ?></h1>
624
+
625
+ <?pl start_capture('main_content') ?>
626
+ <table>
627
+ <?pl my $i = 0; ?>
628
+ <?pl for my $item (@$items) { ?>
629
+ <?pl $color = $i++ % 2 == 0 ? '#FFCCCC' : '#CCCCFF'; ?>
630
+ <tr bgcolor="[==$color=]">
631
+ <td>[=$item=]</td>
632
+ </tr>
633
+ <?pl } ?>
634
+ </table>
635
+ <?pl stop_capture() ?>
636
+
637
+ <?pl start_capture('footer');?>
638
+ <hr>
639
+ <address>
640
+ <a href="mailto:webmaster@example.com">webmaster@example.com</a>
641
+ </address>
642
+ <?pl stop_capture();?>
643
+
644
+ </body>
645
+ </html>
646
+ "js": |
647
+ <html>
648
+ <body>
649
+ <h1><?js startCapture('title') ?>Capturing Example<?js stopCapture() ?></h1>
650
+
651
+ <?js startCapture('main_content') ?>
652
+ <table>
653
+ <?js for (var i = 0, n = items.length; i < n; i++) { ?>
654
+ <?js var color = i % 2 == 0 ? '#FFCCCC' : '#CCCCFF' ?>
655
+ <tr bgcolor="#{color}">
656
+ <td>${item[i]}</td>
657
+ </tr>
658
+ <?js } ?>
659
+ </table>
660
+ <?js stopCapture() ?>
661
+
662
+ <?js start_capture('footer') ?>
663
+ <hr>
664
+ <address>
665
+ <a href="mailto:webmaster@example.com">webmaster@example.com</a>
666
+ </address>
667
+ <?js stop_capture(False) ?>
668
+
669
+ </body>
670
+ </html>
671
+
672
+ expected*:
673
+ "python": &ex11 |
674
+ <?xml version="1.0" encoding="UTF-8"?>
675
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
676
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
677
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
678
+ <head>
679
+ <title>Capturing Example</title>
680
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
681
+ <link rel="stylesheet" type="text/css" href="style.css" />
682
+ </head>
683
+ <body>
684
+ <h1>Capturing Example</h1>
685
+
686
+ <div id="main_content">
687
+ <table>
688
+ <tr bgcolor="#FFCCCC">
689
+ <td>AAA</td>
690
+ </tr>
691
+ <tr bgcolor="#CCCCFF">
692
+ <td>BBB</td>
693
+ </tr>
694
+ <tr bgcolor="#FFCCCC">
695
+ <td>CCC</td>
696
+ </tr>
697
+ </table>
698
+ </div>
699
+
700
+ <div id="footer">
701
+ <hr>
702
+ <address>
703
+ <a href="mailto:webmaster@example.com">webmaster@example.com</a>
704
+ </address>
705
+ </div>
706
+
707
+ </body>
708
+ </html>
709
+ "ruby": *ex11
710
+ "perl": *ex11
711
+ "js": *ex11
712
+
713
+
714
+ ### -- for captured_as() function test
715
+
716
+ - name: test_captured_as
717
+ baselayout*:
718
+ "python": |
719
+ <html>
720
+ <body>
721
+
722
+ <!-- HEADER -->
723
+ <?py if not captured_as('header_part'): ?>
724
+ <img src="img/logo.png" alt="logo" ?>
725
+ <?py #end ?>
726
+ <!-- /HEADER -->
727
+
728
+ <!-- CONTENT -->
729
+ <?py _buf.append(content_part) ?>
730
+ <!-- /CONTENT -->
731
+
732
+ <!-- FOOTER -->
733
+ <?py if not captured_as('footer_part'): ?>
734
+ <hr />
735
+ <em>webmaster@example.com</em>
736
+ <?py #end ?>
737
+ <!-- /FOOTER -->
738
+
739
+ </body>
740
+ </html>
741
+ "ruby": |
742
+ <html>
743
+ <body>
744
+
745
+ <!-- HEADER -->
746
+ <?rb unless captured_as('header_part') ?>
747
+ <img src="img/logo.png" alt="logo" ?>
748
+ <?rb end ?>
749
+ <!-- /HEADER -->
750
+
751
+ <!-- CONTENT -->
752
+ <?rb _buf << @content_part ?>
753
+ <!-- /CONTENT -->
754
+
755
+ <!-- FOOTER -->
756
+ <?rb unless captured_as('footer_part') ?>
757
+ <hr />
758
+ <em>webmaster@example.com</em>
759
+ <?rb end ?>
760
+ <!-- /FOOTER -->
761
+
762
+ </body>
763
+ </html>
764
+ "perl": |
765
+ <html>
766
+ <body>
767
+
768
+ <!-- HEADER -->
769
+ <?pl start_placeholder('header_part') ?>
770
+ <img src="img/logo.png" alt="logo" ?>
771
+ <?pl stop_placeholder() ?>
772
+ <!-- /HEADER -->
773
+
774
+ <!-- CONTENT -->
775
+ <?pl push(@_buf, $content_part); ?>
776
+ <!-- /CONTENT -->
777
+
778
+ <!-- FOOTER -->
779
+ <?pl start_placeholder('footer_part'); ?>
780
+ <hr />
781
+ <em>webmaster@example.com</em>
782
+ <?pl stop_placeholder() ?>
783
+ <!-- /FOOTER -->
784
+
785
+ </body>
786
+ </html>
787
+ "js": |
788
+ <html>
789
+ <body>
790
+
791
+ <!-- HEADER -->
792
+ <?js startPlaceholder('header_part') ?>
793
+ <img src="img/logo.png" alt="logo" ?>
794
+ <?js endPlaceholder() ?>
795
+ <!-- /HEADER -->
796
+
797
+ <!-- CONTENT -->
798
+ <?js _buf.push(content_part); ?>
799
+ <!-- /CONTENT -->
800
+
801
+ <!-- FOOTER -->
802
+ <?js startPlaceholder('footer_part') ?>
803
+ <hr />
804
+ <em>webmaster@example.com</em>
805
+ <?js stopPlaceholder() ?>
806
+ <!-- /FOOTER -->
807
+
808
+ </body>
809
+ </html>
810
+
811
+ customlayout*:
812
+ "python": |
813
+ <?py _context['_layout'] = 'baselayout.pyhtml' ?>
814
+
815
+ <?py start_capture('footer_part') ?>
816
+ <address style="text-align:right">
817
+ copyright&copy; 2007 kuwata-lab all rights reserved<br />
818
+ <a href="webmaster&#64;kuwata-lab.com">webmaster&#64;kuwata-lab.com</a>
819
+ </address>
820
+ <?py stop_capture() ?>
821
+ "ruby": |
822
+ <?rb _context['_layout'] = 'baselayout.rbhtml' ?>
823
+
824
+ <?rb start_capture('footer_part') ?>
825
+ <address style="text-align:right">
826
+ copyright&copy; 2007 kuwata-lab all rights reserved<br />
827
+ <a href="webmaster&#64;kuwata-lab.com">webmaster&#64;kuwata-lab.com</a>
828
+ </address>
829
+ <?rb stop_capture() ?>
830
+ "perl": |
831
+ <?pl $_context->{_layout} = 'baselayout.plhtml'; ?>
832
+
833
+ <?pl start_capture('footer_part') ?>
834
+ <address style="text-align:right">
835
+ copyright&copy; 2007 kuwata-lab all rights reserved<br />
836
+ <a href="webmaster&#64;kuwata-lab.com">webmaster&#64;kuwata-lab.com</a>
837
+ </address>
838
+ <?pl stop_capture() ?>
839
+ "js": |
840
+ <?js _context._layout = 'baselayout.jshtml'; ?>
841
+
842
+ <?js startCapture('footer_part') ?>
843
+ <address style="text-align:right">
844
+ copyright&copy; 2007 kuwata-lab all rights reserved<br />
845
+ <a href="webmaster&#64;kuwata-lab.com">webmaster&#64;kuwata-lab.com</a>
846
+ </address>
847
+ <?js stopCapture() ?>
848
+
849
+ content*:
850
+ "python": |
851
+ <?py _context['_layout'] = 'customlayout.pyhtml' ?>
852
+
853
+ <?py start_capture('content_part') ?>
854
+ <ul>
855
+ <?py for item in items: ?>
856
+ <li>${item}</li>
857
+ <?py #end ?>
858
+ </ul>
859
+ <?py stop_capture() ?>
860
+ "ruby": |
861
+ <?rb @_layout = 'customlayout.rbhtml' ?>
862
+
863
+ <?rb start_capture(:content_part) ?>
864
+ <ul>
865
+ <?rb for item in @items ?>
866
+ <li>${item}</li>
867
+ <?rb end ?>
868
+ </ul>
869
+ <?rb stop_capture() ?>
870
+ "perl": |
871
+ <?pl $_context->{_layout} = 'customlayout.plhtml'; ?>
872
+
873
+ <?pl start_capture('content_part') ?>
874
+ <ul>
875
+ <?pl for my $item (@$items) { ?>
876
+ <li>[=$item=]</li>
877
+ <?pl } ?>
878
+ </ul>
879
+ <?pl stop_capture() ?>
880
+ "js": |
881
+ <?js _context._layout = 'customlayout.pyhtml'; ?>
882
+
883
+ <?js start_capture('content_part') ?>
884
+ <ul>
885
+ <?js for (var i = 0, n = items.length; i < n; i++) { ?>
886
+ <li>${items[i]}</li>
887
+ <?js } ?>
888
+ </ul>
889
+ <?js stop_capture() ?>
890
+
891
+ context: { items: ['AAA', 'BBB', 'CCC'] }
892
+ expected: |
893
+ <html>
894
+ <body>
895
+
896
+ <!-- HEADER -->
897
+ <img src="img/logo.png" alt="logo" ?>
898
+ <!-- /HEADER -->
899
+
900
+ <!-- CONTENT -->
901
+ <ul>
902
+ <li>AAA</li>
903
+ <li>BBB</li>
904
+ <li>CCC</li>
905
+ </ul>
906
+ <!-- /CONTENT -->
907
+
908
+ <!-- FOOTER -->
909
+ <address style="text-align:right">
910
+ copyright&copy; 2007 kuwata-lab all rights reserved<br />
911
+ <a href="webmaster&#64;kuwata-lab.com">webmaster&#64;kuwata-lab.com</a>
912
+ </address>
913
+ <!-- /FOOTER -->
914
+
915
+ </body>
916
+ </html>
917
+
918
+
919
+
920
+
921
+
922
+ ### -- for local layout test
923
+
924
+ #local_layout_test:
925
+ - name: test_local_layout
926
+ layout_html*:
927
+ "python": |
928
+ <html>
929
+ <body>
930
+ #{_content}
931
+ </body>
932
+ </html>
933
+ "ruby": |
934
+ <html>
935
+ <body>
936
+ #{@_content}
937
+ </body>
938
+ </html>
939
+ "perl": |
940
+ <html>
941
+ <body>
942
+ [==$_content=]
943
+ </body>
944
+ </html>
945
+ "js": |
946
+ <html>
947
+ <body>
948
+ #{_content}
949
+ </body>
950
+ </html>
951
+
952
+ layout_xhtml*:
953
+ "python": |
954
+ <?xml version="1.0" encoding="UTF-8" ?>
955
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
956
+ <body>
957
+ #{_content}
958
+ </body>
959
+ </html>
960
+ "ruby": |
961
+ <?xml version="1.0" encoding="UTF-8" ?>
962
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
963
+ <body>
964
+ #{@_content}
965
+ </body>
966
+ </html>
967
+ "perl": |
968
+ <?xml version="1.0" encoding="UTF-8" ?>
969
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
970
+ <body>
971
+ [==$_content=]
972
+ </body>
973
+ </html>
974
+ "js": |
975
+ <?xml version="1.0" encoding="UTF-8" ?>
976
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
977
+ <body>
978
+ #{_content}
979
+ </body>
980
+ </html>
981
+
982
+ content_html*:
983
+ "python": |
984
+ <h1>hello #{user}!</h1>
985
+ "ruby": |
986
+ <h1>hello #{@user}!</h1>
987
+ "perl": |
988
+ <h1>hello [=$user=]!</h1>
989
+ "js": |
990
+ <h1>hello #{user}!</h1>
991
+
992
+ context*:
993
+ "python": { user: world }
994
+ "ruby": { user: world }
995
+ "perl": { user: world }
996
+ "js": { user: world }
997
+
998
+ expected_nolayout*:
999
+ "python": |
1000
+ <h1>hello world!</h1>
1001
+ "ruby": |
1002
+ <h1>hello world!</h1>
1003
+ "perl": |
1004
+ <h1>hello world!</h1>
1005
+ "js": |
1006
+ <h1>hello world!</h1>
1007
+
1008
+ expected_html*:
1009
+ "python": &expected11 |
1010
+ <html>
1011
+ <body>
1012
+ <h1>hello world!</h1>
1013
+
1014
+ </body>
1015
+ </html>
1016
+ "ruby": *expected11
1017
+ "perl": *expected11
1018
+ "js": *expected11
1019
+
1020
+ expected_xhtml*:
1021
+ "python": &expected12 |
1022
+ <?xml version="1.0" encoding="UTF-8" ?>
1023
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
1024
+ <body>
1025
+ <h1>hello world!</h1>
1026
+
1027
+ </body>
1028
+ </html>
1029
+ "ruby": *expected12
1030
+ "perl": *expected12
1031
+ "js": *expected12
1032
+
1033
+
1034
+ ### -- for caching test
1035
+
1036
+ #caching_test:
1037
+ - name: test_cachefile
1038
+ desc: mtime of cachefile
1039
+ layout*:
1040
+ "python": |
1041
+ <html>
1042
+ <head>
1043
+ <title>${title}</title>
1044
+ </head>
1045
+ <body>
1046
+ <h1>${title}</h1>
1047
+ <div id="content">
1048
+ #{_content}
1049
+ </div>
1050
+ </body>
1051
+ </html>
1052
+ "ruby": |
1053
+ <html>
1054
+ <head>
1055
+ <title>${@title}</title>
1056
+ </head>
1057
+ <body>
1058
+ <h1>${@title}</h1>
1059
+ <div id="content">
1060
+ #{@_content}
1061
+ </div>
1062
+ </body>
1063
+ </html>
1064
+ "perl": |
1065
+ <html>
1066
+ <head>
1067
+ <title>[=$title=]</title>
1068
+ </head>
1069
+ <body>
1070
+ <h1>[=$title=]</h1>
1071
+ <div id="content">
1072
+ [==$_content=]
1073
+ </div>
1074
+ </body>
1075
+ </html>
1076
+ "js": |
1077
+ <html>
1078
+ <head>
1079
+ <title>${title}</title>
1080
+ </head>
1081
+ <body>
1082
+ <h1>${title}</h1>
1083
+ <div id="content">
1084
+ #{_content}
1085
+ </div>
1086
+ </body>
1087
+ </html>
1088
+
1089
+ page*:
1090
+ "python": |
1091
+ <?py _context['title'] = 'Create Account' ?>
1092
+ <form action="create" method="post">
1093
+ <?py include(':form') ?>
1094
+ <input type="submit" value="Create" />
1095
+ </form>
1096
+ "ruby": |
1097
+ <?rb @title = 'Create Account' ?>
1098
+ <form action="create" method="post">
1099
+ <?rb import(:form) ?>
1100
+ <input type="submit" value="Create" />
1101
+ </form>
1102
+ "perl": |
1103
+ <?pl $_context->{title} = 'Create Account'; ?>
1104
+ <form action="create" method="post">
1105
+ <?pl include(':form') ?>
1106
+ <input type="submit" value="Create" />
1107
+ </form>
1108
+ "js": |
1109
+ <?js _context.title = 'Create Account'; ?>
1110
+ <form action="create" method="post">
1111
+ <?js include(':form') ?>
1112
+ <input type="submit" value="Create" />
1113
+ </form>
1114
+
1115
+ form*:
1116
+ "python": |5
1117
+ <p>
1118
+ Account:
1119
+ <input type="text" name="account" value="${params.get('account')}" />
1120
+ </p>
1121
+ <p>
1122
+ Password:
1123
+ <input type="text" name="password" value="${params.get('password')}" />
1124
+ </p>
1125
+ "ruby": |5
1126
+ <p>
1127
+ Account:
1128
+ <input type="text" name="account" value="${@params['account']}" />
1129
+ </p>
1130
+ <p>
1131
+ Password:
1132
+ <input type="text" name="password" value="${@params['password']}" />
1133
+ </p>
1134
+ "perl": |5
1135
+ <p>
1136
+ Account:
1137
+ <input type="text" name="account" value="[=$params->{account}=]" />
1138
+ </p>
1139
+ <p>
1140
+ Password:
1141
+ <input type="text" name="password" value="[=$params->{password}=]" />
1142
+ </p>
1143
+ "js": |5
1144
+ <p>
1145
+ Account:
1146
+ <input type="text" name="account" value="${params.account}" />
1147
+ </p>
1148
+ <p>
1149
+ Password:
1150
+ <input type="text" name="password" value="${params.password}" />
1151
+ </p>
1152
+
1153
+ expected*:
1154
+ "python": &caching_test_expected |
1155
+ <html>
1156
+ <head>
1157
+ <title>Create Account</title>
1158
+ </head>
1159
+ <body>
1160
+ <h1>Create Account</h1>
1161
+ <div id="content">
1162
+ <form action="create" method="post">
1163
+ <p>
1164
+ Account:
1165
+ <input type="text" name="account" value="" />
1166
+ </p>
1167
+ <p>
1168
+ Password:
1169
+ <input type="text" name="password" value="" />
1170
+ </p>
1171
+ <input type="submit" value="Create" />
1172
+ </form>
1173
+
1174
+ </div>
1175
+ </body>
1176
+ </html>
1177
+ "ruby": *caching_test_expected
1178
+ "perl": *caching_test_expected
1179
+ "js": *caching_test_expected
1180
+
1181
+
1182
+ ### -- for layout inheritance test
1183
+
1184
+ #change_layout:
1185
+ - name: test_change_layout
1186
+
1187
+ baselayout*:
1188
+ "python": |
1189
+ <html>
1190
+ <body>
1191
+ <?py if _context.has_key('title'): ?>
1192
+ <h1>${title}</h1>
1193
+ <?py #end ?>
1194
+ <?py _buf.append(_content) ?>
1195
+ </body>
1196
+ </html>
1197
+ "ruby": |
1198
+ <html>
1199
+ <body>
1200
+ <?rb if @title ?>
1201
+ <h1>${@title}</h1>
1202
+ <?rb end ?>
1203
+ <?rb _buf << @_content ?>
1204
+ </body>
1205
+ </html>
1206
+ "perl": |
1207
+ <html>
1208
+ <body>
1209
+ <?pl if (exists $_context->{title}) { ?>
1210
+ <h1>[=$title=]</h1>
1211
+ <?pl } ?>
1212
+ <?pl push(@_buf, $_content); ?>
1213
+ </body>
1214
+ </html>
1215
+ "js": |
1216
+ <html>
1217
+ <body>
1218
+ <?js if (_context.title) { ?>
1219
+ <h1>${title}</h1>
1220
+ <?js } ?>
1221
+ <?js _buf.append(_content) ?>
1222
+ </body>
1223
+ </html>
1224
+
1225
+ customlayout*:
1226
+ "python": |
1227
+ <?py ## use default layout template name ?>
1228
+ <?py _context['_layout'] = True ?>
1229
+ <div id="content">
1230
+ <?py _buf.append(_content) ?>
1231
+ </div>
1232
+ "ruby": |
1233
+ <?rb ## use default layout template name ?>
1234
+ <?rb @_layout = true ?>
1235
+ <div id="content">
1236
+ <?rb _buf << @_content ?>
1237
+ </div>
1238
+ "perl": |
1239
+ <?pl ## use default layout template name ?>
1240
+ <?pl $_context->{_layout} = 1; ?>
1241
+ <div id="content">
1242
+ <?pl push(@_buf, $_content); ?>
1243
+ </div>
1244
+ "js": |
1245
+ <?js // use default layout template name ?>
1246
+ <?js _context._layout = 1; ?>
1247
+ <div id="content">
1248
+ <?js _buf.push(_content); ?>
1249
+ </div>
1250
+
1251
+ content*:
1252
+ "python": |
1253
+ <?py _context['title'] = 'Changing Layout Template Test' ?>
1254
+ <?py ## specify layout template name ?>
1255
+ <?py _context['_layout'] = 'customlayout.pyhtml' ?>
1256
+ foo
1257
+ bar
1258
+ baz
1259
+ "ruby": |
1260
+ <?rb @title = 'Changing Layout Template Test' ?>
1261
+ <?rb ## specify layout template name ?>
1262
+ <?rb @_layout = 'customlayout.rbhtml' ?>
1263
+ foo
1264
+ bar
1265
+ baz
1266
+ "perl": |
1267
+ <?pl $_context->{title} = 'Changing Layout Template Test'; ?>
1268
+ <?pl ## specify layout template name ?>
1269
+ <?pl $_context->{_layout} = 'customlayout.plhtml'; ?>
1270
+ foo
1271
+ bar
1272
+ baz
1273
+ "js": |
1274
+ <?js _context.title = 'Changing Layout Template Test'; ?>
1275
+ <?js ## specify layout template name ?>
1276
+ <?js _context._layout = 'customlayout.jshtml'; ?>
1277
+ foo
1278
+ bar
1279
+ baz
1280
+
1281
+ expected*:
1282
+ "python": &expected_change_layout |
1283
+ <html>
1284
+ <body>
1285
+ <h1>Changing Layout Template Test</h1>
1286
+ <div id="content">
1287
+ foo
1288
+ bar
1289
+ baz
1290
+ </div>
1291
+ </body>
1292
+ </html>
1293
+ "ruby": *expected_change_layout
1294
+ "perl": *expected_change_layout
1295
+ "js": *expected_change_layout
1296
+
1297
+
1298
+
1299
+ ## -- context_scope
1300
+ - name: test_context_scope
1301
+ desc: context scope
1302
+ base*:
1303
+ "python": |
1304
+ <?py _context['x1'] = 10 ?>
1305
+ <?py x2 = 20 ?>
1306
+ <?py include('part.pyhtml') ?>
1307
+ [base] _context.get('y1') = #{repr(_context.get('y1'))}
1308
+ [base] _context.get('y2') = #{repr(_context.get('y2'))}
1309
+ [base] locals().get('y1') = #{repr(locals().get('y1'))}
1310
+ [base] locals().get('y2') = #{repr(locals().get('y2'))}
1311
+ "ruby": |
1312
+ <?rb @x1 = 10 ?>
1313
+ <?rb x2 = 20 ?>
1314
+ <?rb import('part.rbhtml') ?>
1315
+ [base] @y1 = #{@y1.inspect}
1316
+ [base] @y2 = #{@y2.inspect}
1317
+ [base] local_variables() = #{local_variables().inspect()}
1318
+ "perl": |
1319
+ <?pl $_context->{x1} = 10; ?>
1320
+ <?pl my $x2 = 20; ?>
1321
+ <?pl include('part.plhtml') ?>
1322
+ [base] _context->{y1} = '[=$_context->{y1}=]'
1323
+ [base] _context->{y2} = '[=$_context->{y2}=]'
1324
+ "js": |
1325
+ part*:
1326
+ "python": |
1327
+ [part] _context.get('x1') = #{repr(_context.get('x1'))}
1328
+ [part] _context.get('x2') = #{repr(_context.get('x2'))}
1329
+ [part] locals().get('x1') = #{repr(locals().get('x1'))}
1330
+ [part] locals().get('x2') = #{repr(locals().get('x2'))}
1331
+ <?py _context['y1'] = 30 ?>
1332
+ <?py y2 = 40 ?>
1333
+ "ruby": |
1334
+ [part] @x1 = #{@x1.inspect}
1335
+ [part] @x2 = #{@x2.inspect}
1336
+ [part] local_variables = #{local_variables().inspect}
1337
+ <?rb @y1 = 30 ?>
1338
+ <?rb y2 = 40 ?>
1339
+ "perl": |
1340
+ [part] _context->{x1} = '[=$_context->{x1}=]'
1341
+ [part] _context->{x2} = '[=$_context->{x2}=]'
1342
+ <?pl $_context->{y1} = 30; ?>
1343
+ <?pl my $y2 = 40; ?>
1344
+ "js": |
1345
+ expected*:
1346
+ "python": |
1347
+ [part] _context.get('x1') = 10
1348
+ [part] _context.get('x2') = None
1349
+ [part] locals().get('x1') = 10
1350
+ [part] locals().get('x2') = None
1351
+ [base] _context.get('y1') = 30
1352
+ [base] _context.get('y2') = None
1353
+ [base] locals().get('y1') = None
1354
+ [base] locals().get('y2') = None
1355
+ # _context.get('x1') = None
1356
+ # _context.get('x2') = 20
1357
+ # locals().get('x1') = None
1358
+ # locals().get('x2') = 20
1359
+ # _context.get('y1') = None
1360
+ # _context.get('y2') = None
1361
+ # locals().get('y1') = 30
1362
+ # locals().get('y2') = None
1363
+ "ruby": |
1364
+ [part] @x1 = 10
1365
+ [part] @x2 = nil
1366
+ [part] local_variables = ["_buf", "_context"]
1367
+ [base] @y1 = 30
1368
+ [base] @y2 = nil
1369
+ [base] local_variables() = ["x2", "_buf", "_context"]
1370
+ "perl": |
1371
+ [part] _context->{x1} = '10'
1372
+ [part] _context->{x2} = ''
1373
+ [base] _context->{y1} = '30'
1374
+ [base] _context->{y2} = ''
1375
+ "js": |
1376
+
1377
+
1378
+ ## -- template args
1379
+ - name: test_template_args
1380
+ content*:
1381
+ "python": |
1382
+ <?py #@ARGS a ?>
1383
+ a = #{repr(a)}
1384
+ b = #{repr(b)}
1385
+ "ruby": |
1386
+ <?rb #@ARGS a ?>
1387
+ a = #{a}
1388
+ b = #{b}
1389
+ "perl": |
1390
+ <?pl #@ARGS x ?>
1391
+ x = [=$x=]
1392
+ y = [=$y=]
1393
+ "js": |
1394
+ <?js //@ARGS a ?>
1395
+ a = #{Tenjin.inspect(a)}
1396
+ b = #{Tenjin.inspect(b)}
1397
+ exception*:
1398
+ "python": NameError
1399
+ "ruby": NameError
1400
+ "perl":
1401
+ "js": |
1402
+ errormsg*:
1403
+ "python": name 'b' is not defined
1404
+ "ruby": "undefined local variable or method `b' for #<Tenjin::Context>"
1405
+ "perl": |
1406
+ *** Error: content.plhtml
1407
+ Global symbol "$y" requires explicit package name at (eval 999) line 3.
1408
+ "js": |
1409
+ context: { a: 10, b: 20 }
1410
+ expected*:
1411
+ "python": |
1412
+ a = 10
1413
+ b = 20
1414
+ "ruby": |
1415
+ a = 10
1416
+ b = 20
1417
+ "perl":
1418
+ "js": |
1419
+
1420
+
1421
+ ## -- template args are stored into and loaded from cache file?
1422
+ - name: test_cached_contents
1423
+ desc: cached script and args are stored into/loaded from cachefile correctly?
1424
+ input1*:
1425
+ "python": |
1426
+ <p>
1427
+ <?py #@ARGS x,y , z?>
1428
+ x = #{x}, y = #{y}, z = #{z}
1429
+ </p>
1430
+ "ruby": |
1431
+ <p>
1432
+ <?rb #@ARGS x,y , z?>
1433
+ x = #{x}, y = #{y}, z = #{z}
1434
+ </p>
1435
+ script1*:
1436
+ "python": |
1437
+ _buf.extend(('''<p>\n''', ));
1438
+ x = _context.get('x'); y = _context.get('y'); z = _context.get('z');
1439
+ _buf.extend((''' x = ''', to_str(x), ''', y = ''', to_str(y), ''', z = ''', to_str(z), '''
1440
+ </p>\n''', ));
1441
+ "ruby": |4
1442
+ _buf << %Q`<p>\n`
1443
+ x = @x; y = @y; z = @z;
1444
+ _buf << %Q` x = #{x}, y = #{y}, z = #{z}
1445
+ </p>\n`
1446
+ cache1*:
1447
+ "python": |
1448
+ _buf.extend(('''<p>\n''', ));
1449
+ x = _context.get('x'); y = _context.get('y'); z = _context.get('z');
1450
+ _buf.extend((''' x = ''', to_str(x), ''', y = ''', to_str(y), ''', z = ''', to_str(z), '''
1451
+ </p>\n''', ));
1452
+ "ruby": |
1453
+ #@ARGS x,y,z
1454
+ _buf << %Q`<p>\n`
1455
+ x = @x; y = @y; z = @z;
1456
+ _buf << %Q` x = #{x}, y = #{y}, z = #{z}
1457
+ </p>\n`
1458
+ args1: [ x, y, z ]
1459
+ input2*:
1460
+ "python": |
1461
+ <p>
1462
+ <?py #@ARGS ?>
1463
+ x = #{x}, y = #{y}, z = #{z}
1464
+ </p>
1465
+ "ruby": |
1466
+ <p>
1467
+ <?rb #@ARGS ?>
1468
+ x = #{x}, y = #{y}, z = #{z}
1469
+ </p>
1470
+ script2*:
1471
+ "python": |
1472
+ _buf.extend(('''<p>\n''', ));
1473
+
1474
+ _buf.extend((''' x = ''', to_str(x), ''', y = ''', to_str(y), ''', z = ''', to_str(z), '''
1475
+ </p>\n''', ));
1476
+ "ruby": |4
1477
+ _buf << %Q`<p>\n`
1478
+
1479
+ _buf << %Q` x = #{x}, y = #{y}, z = #{z}
1480
+ </p>\n`
1481
+ cache2*:
1482
+ "python": |
1483
+ _buf.extend(('''<p>\n''', ));
1484
+
1485
+ _buf.extend((''' x = ''', to_str(x), ''', y = ''', to_str(y), ''', z = ''', to_str(z), '''
1486
+ </p>\n''', ));
1487
+ "ruby": |4
1488
+ #@ARGS
1489
+ _buf << %Q`<p>\n`
1490
+
1491
+ _buf << %Q` x = #{x}, y = #{y}, z = #{z}
1492
+ </p>\n`
1493
+ args2: [ ]
1494
+
1495
+
1496
+ ## -- for template path test
1497
+ - name: test_template_path
1498
+ common_layout*:
1499
+ "python": |
1500
+ <html>
1501
+ <body>
1502
+ #{_content}
1503
+ <?py include(':footer') ?>
1504
+ </body>
1505
+ </html>
1506
+ "ruby": |
1507
+ <html>
1508
+ <body>
1509
+ #{@_content}
1510
+ <?rb import(:footer) ?>
1511
+ </body>
1512
+ </html>
1513
+ "perl": |
1514
+ <html>
1515
+ <body>
1516
+ [==$_content=]
1517
+ <?pl include(':footer'); ?>
1518
+ </body>
1519
+ </html>
1520
+ "js": |
1521
+ <html>
1522
+ <body>
1523
+ #{_content}
1524
+ <?js include(':footer'); ?>
1525
+ </body>
1526
+ </html>
1527
+
1528
+ common_body*:
1529
+ "python": |
1530
+ <ul>
1531
+ <?py for item in items: ?>
1532
+ <li>${item}</li>
1533
+ <?py #end ?>
1534
+ </ul>
1535
+ "ruby": |
1536
+ <ul>
1537
+ <?rb for item in @items ?>
1538
+ <li>${item}</li>
1539
+ <?rb end ?>
1540
+ </ul>
1541
+ "perl": |
1542
+ <ul>
1543
+ <?pl for my $item (@$items) { ?>
1544
+ <li>[=$item=]</li>
1545
+ <?pl } ?>
1546
+ </ul>
1547
+ "js": |
1548
+ <ul>
1549
+ <?js for (var i = 0, n = items.length; i < n; i++) { ?>
1550
+ <li>${items[i]}</li>
1551
+ <?js } ?>
1552
+ </ul>
1553
+
1554
+ common_footer*:
1555
+ "python": &common_footer |
1556
+ <hr />
1557
+ <address>
1558
+ <a href="mailto:webmaster@localhost">webmaster@localhost</a>
1559
+ </address>
1560
+ "ruby": *common_footer
1561
+ "perl": *common_footer
1562
+ "js": *common_footer
1563
+
1564
+ user_layout*:
1565
+ "python": |
1566
+ <?xml version="1.0" ?>
1567
+ <html xml:lang="en">
1568
+ <body>
1569
+ <?py _buf.append(_content) ?>
1570
+ <?py include(':footer') ?>
1571
+ </body>
1572
+ </html>
1573
+ "ruby": |
1574
+ <?xml version="1.0" ?>
1575
+ <html xml:lang="en">
1576
+ <body>
1577
+ <?rb _buf << @_content ?>
1578
+ <?rb import(:footer) ?>
1579
+ </body>
1580
+ </html>
1581
+ "perl": |
1582
+ <?xml version="1.0" ?>
1583
+ <html xml:lang="en">
1584
+ <body>
1585
+ [==$_content==]
1586
+ <?pl include(':footer') ?>
1587
+ </body>
1588
+ </html>
1589
+ "js": |
1590
+ <?xml version="1.0" ?>
1591
+ <html xml:lang="en">
1592
+ <body>
1593
+ <?js echo(_content) ?>
1594
+ <?js include(':footer') ?>
1595
+ </body>
1596
+ </html>
1597
+
1598
+ user_body*:
1599
+ "python": |
1600
+ <table>
1601
+ <?py for item in items: ?>
1602
+ <tr><td>${item}</td></tr>
1603
+ <?py #end ?>
1604
+ </table>
1605
+ "ruby": |
1606
+ <table>
1607
+ <?rb for item in @items ?>
1608
+ <tr><td>${item}</td></tr>
1609
+ <?rb end ?>
1610
+ </table>
1611
+ "perl": |
1612
+ <table>
1613
+ <?pl for my $item (@$items) { ?>
1614
+ <tr><td>[=$item=]</td></tr>
1615
+ <?pl } ?>
1616
+ </table>
1617
+ "js": |
1618
+ <table>
1619
+ <?js for (var i = 0, n = items.length; i < n; i++) { ?>
1620
+ <tr><td>${items[i]}</td></tr>
1621
+ <?js } ?>
1622
+ </table>
1623
+
1624
+ user_footer*:
1625
+ "python": &user_footer |
1626
+ <div class="footer" style="margin-top: 20px; background-color: gray">
1627
+ <a href="mailto:webmaster@localhost">webmaster@localhost</a>
1628
+ </div>
1629
+ "ruby": *user_footer
1630
+ "perl": *user_footer
1631
+ "js": *user_footer
1632
+
1633
+ expected_common_common_common*:
1634
+ "python": &expected41 |
1635
+ <html>
1636
+ <body>
1637
+ <ul>
1638
+ <li>AAA</li>
1639
+ <li>BBB</li>
1640
+ <li>CCC</li>
1641
+ </ul>
1642
+
1643
+ <hr />
1644
+ <address>
1645
+ <a href="mailto:webmaster@localhost">webmaster@localhost</a>
1646
+ </address>
1647
+ </body>
1648
+ </html>
1649
+ "ruby": *expected41
1650
+ "perl": *expected41
1651
+ "js": *expected41
1652
+
1653
+ expected_user_common_common*:
1654
+ "python": &expected42 |
1655
+ <?xml version="1.0" ?>
1656
+ <html xml:lang="en">
1657
+ <body>
1658
+ <ul>
1659
+ <li>AAA</li>
1660
+ <li>BBB</li>
1661
+ <li>CCC</li>
1662
+ </ul>
1663
+ <hr />
1664
+ <address>
1665
+ <a href="mailto:webmaster@localhost">webmaster@localhost</a>
1666
+ </address>
1667
+ </body>
1668
+ </html>
1669
+ "ruby": *expected42
1670
+ "perl": *expected42
1671
+ "js": *expected42
1672
+
1673
+ expected_common_user_common*:
1674
+ "python": &expected43 |
1675
+ <html>
1676
+ <body>
1677
+ <table>
1678
+ <tr><td>AAA</td></tr>
1679
+ <tr><td>BBB</td></tr>
1680
+ <tr><td>CCC</td></tr>
1681
+ </table>
1682
+
1683
+ <hr />
1684
+ <address>
1685
+ <a href="mailto:webmaster@localhost">webmaster@localhost</a>
1686
+ </address>
1687
+ </body>
1688
+ </html>
1689
+ "ruby": *expected43
1690
+ "perl": *expected43
1691
+ "js": *expected43
1692
+
1693
+ expected_user_user_common*:
1694
+ "python": &expected44 |
1695
+ <?xml version="1.0" ?>
1696
+ <html xml:lang="en">
1697
+ <body>
1698
+ <table>
1699
+ <tr><td>AAA</td></tr>
1700
+ <tr><td>BBB</td></tr>
1701
+ <tr><td>CCC</td></tr>
1702
+ </table>
1703
+ <hr />
1704
+ <address>
1705
+ <a href="mailto:webmaster@localhost">webmaster@localhost</a>
1706
+ </address>
1707
+ </body>
1708
+ </html>
1709
+ "ruby": *expected44
1710
+ "perl": *expected44
1711
+ "js": *expected44
1712
+
1713
+ expected_common_common_user*:
1714
+ "python": &expected45 |
1715
+ <html>
1716
+ <body>
1717
+ <ul>
1718
+ <li>AAA</li>
1719
+ <li>BBB</li>
1720
+ <li>CCC</li>
1721
+ </ul>
1722
+
1723
+ <div class="footer" style="margin-top: 20px; background-color: gray">
1724
+ <a href="mailto:webmaster@localhost">webmaster@localhost</a>
1725
+ </div>
1726
+ </body>
1727
+ </html>
1728
+ "ruby": *expected45
1729
+ "perl": *expected45
1730
+ "js": *expected45
1731
+
1732
+ expected_user_common_user*:
1733
+ "python": &expected46 |
1734
+ <?xml version="1.0" ?>
1735
+ <html xml:lang="en">
1736
+ <body>
1737
+ <ul>
1738
+ <li>AAA</li>
1739
+ <li>BBB</li>
1740
+ <li>CCC</li>
1741
+ </ul>
1742
+ <div class="footer" style="margin-top: 20px; background-color: gray">
1743
+ <a href="mailto:webmaster@localhost">webmaster@localhost</a>
1744
+ </div>
1745
+ </body>
1746
+ </html>
1747
+ "ruby": *expected46
1748
+ "perl": *expected46
1749
+ "js": *expected46
1750
+
1751
+ expected_common_user_user*:
1752
+ "python": &expected47 |
1753
+ <html>
1754
+ <body>
1755
+ <table>
1756
+ <tr><td>AAA</td></tr>
1757
+ <tr><td>BBB</td></tr>
1758
+ <tr><td>CCC</td></tr>
1759
+ </table>
1760
+
1761
+ <div class="footer" style="margin-top: 20px; background-color: gray">
1762
+ <a href="mailto:webmaster@localhost">webmaster@localhost</a>
1763
+ </div>
1764
+ </body>
1765
+ </html>
1766
+ "ruby": *expected47
1767
+ "perl": *expected47
1768
+ "js": *expected47
1769
+
1770
+ expected_user_user_user*:
1771
+ "python": &expected48 |
1772
+ <?xml version="1.0" ?>
1773
+ <html xml:lang="en">
1774
+ <body>
1775
+ <table>
1776
+ <tr><td>AAA</td></tr>
1777
+ <tr><td>BBB</td></tr>
1778
+ <tr><td>CCC</td></tr>
1779
+ </table>
1780
+ <div class="footer" style="margin-top: 20px; background-color: gray">
1781
+ <a href="mailto:webmaster@localhost">webmaster@localhost</a>
1782
+ </div>
1783
+ </body>
1784
+ </html>
1785
+ "ruby": *expected48
1786
+ "perl": *expected48
1787
+ "js": *expected48
1788
+
1789
+
1790
+
1791
+ ## -- preprocessor
1792
+
1793
+ - name: test_preprocessor
1794
+ testopts: { preprocess: true }
1795
+ form*: # <?PY ... ?>
1796
+ "python": |
1797
+ <?PY states = { "CA": "California", ?>
1798
+ <?PY "NY": "New York", ?>
1799
+ <?PY "FL": "Florida", } ?>
1800
+ <?PY # ?>
1801
+ <?py chk = { params['state']: ' checked="checked"' } ?>
1802
+ <?PY codes = states.keys() ?>
1803
+ <?PY codes.sort() ?>
1804
+ <select name="state">
1805
+ <option value="">-</option>
1806
+ <?PY for code in codes: ?>
1807
+ <option value="#{{code}}"#{chk.get(#{{repr(code)}}, '')}>${{states[code]}}</option>
1808
+ <?PY #endfor ?>
1809
+ </select>
1810
+ "ruby": |
1811
+ <?RB states = { :CA => "California", ?>
1812
+ <?RB :NY => "New York", ?>
1813
+ <?RB :FL => "Florida", } ?>
1814
+ <?rb chk = { @params['state'] => ' checked="checked"' } ?>
1815
+ <select name="state">
1816
+ <option value="">-</option>
1817
+ <?RB for code in states.keys.sort_by{|c| c.to_s} ?>
1818
+ <option value="#{{code}}"#{chk[#{{code.inspect}}]}>${{states[code]}}</option>
1819
+ <?RB end ?>
1820
+ </select>
1821
+ "perl": |
1822
+ <?PL my $states = { "CA"=>"California", ?>
1823
+ <?PL "NY"=>"New York", ?>
1824
+ <?PL "FL"=>"Florida", }; ?>
1825
+ <?pl my $chk = { $params->{state} => ' checked="checked"' }; ?>
1826
+ <select name="state">
1827
+ <option value="">-</option>
1828
+ <?PL for my $code (sort(keys %$states)) { ?>
1829
+ <option value="[*==$code=*]"[==$chk->{[*==$code=*]}=]>[*=$states->{$code}=*]</option>
1830
+ <?PL } ?>
1831
+ </select>
1832
+ "js": |
1833
+ <?JS var states = { "CA" : "California", ?>
1834
+ <?JS "NY" : "New York", ?>
1835
+ <?JS "FL" : "Florida" }; ?>
1836
+ <?js var chk = {}; ?>
1837
+ <?js chk[params.state] = ' checked="checked"'; ?>
1838
+ <select name="state">
1839
+ <option value="">-</option>
1840
+ <?JS var codes = []; ?>
1841
+ <?JS for (var code in states) { codes.push(code); } ?>
1842
+ <?JS codes.sort(); ?>
1843
+ <?JS for (var i = 0, n = codes.length; i < n; i++) { ?>
1844
+ <?JS var code = codes[i]; ?>
1845
+ <option value="#{{code}}"#{chk.#{{code}}||''}>${{states[code]}}</option>
1846
+ <?JS } ?>
1847
+ </select>
1848
+
1849
+ create*: # <?py include() ?>
1850
+ "python": |
1851
+ <?PY label = '"Create"' ?>
1852
+ <form action="#{{action}}">
1853
+ <?py include(':form') ?>
1854
+ <input type="submit" value="${{label}}">
1855
+ </form>
1856
+ "ruby": |
1857
+ <?RB label = '"Create"' ?>
1858
+ <form action="#{{@action}}">
1859
+ <?rb import(:form) ?>
1860
+ <input type="submit" value="${{label}}">
1861
+ </form>
1862
+ "perl": |
1863
+ <?PL my $label = '"Create"'; ?>
1864
+ <form action="[=$action=]">
1865
+ <?pl include(':form') ?>
1866
+ <input type="submit" value="[*=$label=*]">
1867
+ </form>
1868
+ "js": |
1869
+ <?JS var label = '"Create"'; ?>
1870
+ <form action="#{{action}}">
1871
+ <?js include(':form'); ?>
1872
+ <input type="submit" value="${{label}}">
1873
+ </form>
1874
+
1875
+ update*: # <?PY include() ?>
1876
+ "python": |
1877
+ <form action="#{{action}}">
1878
+ <?PY label = '"Update"' ?>
1879
+ <?PY include(':form') ?>
1880
+ <input type="submit" value="${{label}}">
1881
+ </form>
1882
+ "ruby": |
1883
+ <form action="#{{@action}}">
1884
+ <?RB label = '"Update"' ?>
1885
+ <?RB import(:form) ?>
1886
+ <input type="submit" value="${{label}}">
1887
+ </form>
1888
+ "perl": |
1889
+ <form action="[==$action=]">
1890
+ <?PL my $label = '"Update"'; ?>
1891
+ <?PL include(':form'); ?>
1892
+ <input type="submit" value="[*=$label=*]">
1893
+ </form>
1894
+ "js": |
1895
+ <?JS var label = '"Update"' ?>
1896
+ <form action="#{{action}}">
1897
+ <?JS include(':form'); ?>
1898
+ <input type="submit" value="${{label}}">
1899
+ </form>
1900
+
1901
+ layout*:
1902
+ "python": |
1903
+ <html>
1904
+ <body>
1905
+ <h1>${title}</h1>
1906
+ <?py echo(_content) ?>
1907
+ </body>
1908
+ </html>
1909
+ "ruby": |
1910
+ <html>
1911
+ <body>
1912
+ <h1>${@title}</h1>
1913
+ <?rb echo(@_content) ?>
1914
+ </body>
1915
+ </html>
1916
+ "perl": |
1917
+ <html>
1918
+ <body>
1919
+ <h1>[=$title=]</h1>
1920
+ <?pl echo($_content); ?>
1921
+ </body>
1922
+ </html>
1923
+ "js": |
1924
+ <html>
1925
+ <body>
1926
+ <h1>${title}</h1>
1927
+ <?js echo(_content); ?>
1928
+ </body>
1929
+ </html>
1930
+
1931
+ expected1: |
1932
+ <html>
1933
+ <body>
1934
+ <h1>Create</h1>
1935
+ <form action="create">
1936
+ <select name="state">
1937
+ <option value="">-</option>
1938
+ <option value="CA">California</option>
1939
+ <option value="FL">Florida</option>
1940
+ <option value="NY" checked="checked">New York</option>
1941
+ </select>
1942
+ <input type="submit" value="&quot;Create&quot;">
1943
+ </form>
1944
+ </body>
1945
+ </html>
1946
+
1947
+ expected2: |
1948
+ <html>
1949
+ <body>
1950
+ <h1>Update</h1>
1951
+ <form action="update">
1952
+ <select name="state">
1953
+ <option value="">-</option>
1954
+ <option value="CA">California</option>
1955
+ <option value="FL">Florida</option>
1956
+ <option value="NY" checked="checked">New York</option>
1957
+ </select>
1958
+ <input type="submit" value="&quot;Update&quot;">
1959
+ </form>
1960
+ </body>
1961
+ </html>
1962
+
1963
+ cache1*:
1964
+ "python": |
1965
+ chk = { params['state']: ' checked="checked"' }
1966
+ _buf.extend(('''<select name="state">
1967
+ <option value="">-</option>
1968
+ <option value="CA"''', to_str(chk.get('CA', '')), '''>California</option>
1969
+ <option value="FL"''', to_str(chk.get('FL', '')), '''>Florida</option>
1970
+ <option value="NY"''', to_str(chk.get('NY', '')), '''>New York</option>
1971
+ </select>\n''', ));
1972
+ "ruby": |
1973
+ "perl": |
1974
+ "js": |
1975
+ var _buf = []; var chk = {};
1976
+ chk[params.state] = ' checked="checked"';
1977
+ _buf.push('<select name="state">\n\
1978
+ <option value="">-</option>\n\
1979
+ <option value="CA"', chk.CA||'', '>California</option>\n\
1980
+ <option value="FL"', chk.FL||'', '>Florida</option>\n\
1981
+ <option value="NY"', chk.NY||'', '>New York</option>\n\
1982
+ </select>\n');
1983
+ _buf.join('')
1984
+ cache2*:
1985
+ "python": |
1986
+ _buf.extend(('''<form action="create">\n''', ));
1987
+ include(':form')
1988
+ _buf.extend((''' <input type="submit" value="&quot;Create&quot;">
1989
+ </form>\n''', ));
1990
+ "ruby": |
1991
+ "perl": |
1992
+ "js": |
1993
+ var _buf = []; _buf.push('<form action="create">\n');
1994
+ _buf.push(_context._engine.render(':form', _context, false));
1995
+ _buf.push(' <input type="submit" value="&quot;Create&quot;">\n\
1996
+ </form>\n');
1997
+ _buf.join('')
1998
+ cache3*:
1999
+ "python": |
2000
+ _buf.extend(('''<html>
2001
+ <body>
2002
+ <h1>''', escape(to_str(title)), '''</h1>\n''', ));
2003
+ echo(_content)
2004
+ _buf.extend((''' </body>
2005
+ </html>\n''', ));
2006
+ "ruby": |
2007
+ "perl": |
2008
+ "js": |
2009
+ var _buf = []; _buf.push('<html>\n\
2010
+ <body>\n\
2011
+ <h1>', escapeXml(title), '</h1>\n');
2012
+ _buf.push(_content);
2013
+ _buf.push(' </body>\n\
2014
+ </html>\n');
2015
+ _buf.join('')
2016
+ cache4*:
2017
+ "python": |
2018
+ _buf.extend(('''<form action="update">
2019
+ <select name="state">
2020
+ <option value="">-</option>
2021
+ <option value="CA">California</option>
2022
+ <option value="FL">Florida</option>
2023
+ <option value="NY" checked="checked">New York</option>
2024
+ </select>
2025
+ <input type="submit" value="&quot;Update&quot;">
2026
+ </form>\n''', ));
2027
+ "ruby": |
2028
+ "perl": |
2029
+ "js": |
2030
+ var _buf = []; _buf.push('<form action="update">\n\
2031
+ <select name="state">\n\
2032
+ <option value="">-</option>\n\
2033
+ <option value="CA">California</option>\n\
2034
+ <option value="FL">Florida</option>\n\
2035
+ <option value="NY" checked="checked">New York</option>\n\
2036
+ </select>\n\
2037
+ <input type="submit" value="&quot;Update&quot;">\n\
2038
+ </form>\n');
2039
+ _buf.join('')