ramaze 0.0.8 → 0.0.9

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 (49) hide show
  1. data/Rakefile +42 -0
  2. data/doc/allison/LICENSE +184 -0
  3. data/doc/allison/README +37 -0
  4. data/doc/allison/allison.css +300 -0
  5. data/doc/allison/allison.gif +0 -0
  6. data/doc/allison/allison.js +307 -0
  7. data/doc/allison/allison.rb +287 -0
  8. data/doc/allison/cache/BODY +588 -0
  9. data/doc/allison/cache/CLASS_INDEX +4 -0
  10. data/doc/allison/cache/CLASS_PAGE +1 -0
  11. data/doc/allison/cache/FILE_INDEX +4 -0
  12. data/doc/allison/cache/FILE_PAGE +1 -0
  13. data/doc/allison/cache/FONTS +1 -0
  14. data/doc/allison/cache/FR_INDEX_BODY +1 -0
  15. data/doc/allison/cache/IMGPATH +1 -0
  16. data/doc/allison/cache/INDEX +1 -0
  17. data/doc/allison/cache/JAVASCRIPT +307 -0
  18. data/doc/allison/cache/METHOD_INDEX +4 -0
  19. data/doc/allison/cache/METHOD_LIST +1 -0
  20. data/doc/allison/cache/SRC_PAGE +1 -0
  21. data/doc/allison/cache/STYLE +322 -0
  22. data/doc/allison/cache/URL +1 -0
  23. data/doc/readme_chunks/principles.txt +33 -18
  24. data/doc/tutorial/todolist.html +599 -0
  25. data/doc/tutorial/todolist.txt +230 -230
  26. data/examples/identity.rb +21 -0
  27. data/examples/nitro_form.rb +22 -0
  28. data/lib/ramaze/controller.rb +1 -1
  29. data/lib/ramaze/dispatcher.rb +10 -4
  30. data/lib/ramaze/helper/{openid.rb → identity.rb} +15 -6
  31. data/lib/ramaze/helper/nitroform.rb +10 -0
  32. data/lib/ramaze/helper/stack.rb +1 -1
  33. data/lib/ramaze/inform.rb +18 -8
  34. data/lib/ramaze/snippets/kernel/aquire.rb +3 -3
  35. data/lib/ramaze/snippets/object/traits.rb +1 -1
  36. data/lib/ramaze/snippets/ramaze/caller_info.rb +17 -1
  37. data/lib/ramaze/snippets/ramaze/caller_lines.rb +1 -1
  38. data/lib/ramaze/store/yaml.rb +10 -1
  39. data/lib/ramaze/template/ezamar.rb +10 -5
  40. data/lib/ramaze/trinity/request.rb +12 -2
  41. data/lib/ramaze/version.rb +1 -1
  42. data/lib/ramaze.rb +5 -3
  43. data/spec/public/error404.xhtml +1 -0
  44. data/spec/spec_all.rb +21 -19
  45. data/spec/spec_helper.rb +1 -1
  46. data/spec/tc_error.rb +18 -4
  47. data/spec/tc_helper_cache.rb +1 -1
  48. data/spec/tc_helper_flash.rb +1 -2
  49. metadata +32 -4
@@ -0,0 +1,588 @@
1
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"/><title>%title%</title><link type="text/css" rel="stylesheet" href="%style_url%" media="screen"/><script type="text/javascript">
2
+ // Javascript for Allison RDoc template
3
+ // Copyright 2006 Cloudburst LLC
4
+ // Some sections originally from public domain material
5
+
6
+ var href_base = '%style_url%'.replace(/(.*\/).*/, '$1'); // haha! inline js is good for something
7
+
8
+ function $(id) {
9
+ if (document.getElementById)
10
+ elem = document.getElementById(id);
11
+ else if ( document.all )
12
+ elem = eval("document.all." + id);
13
+ else
14
+ return false;
15
+ return elem;
16
+ }
17
+
18
+ function toggle(id) {
19
+ elem = $(id);
20
+ elemStyle = elem.style;
21
+ if (elemStyle.display == "block") {
22
+ elemStyle.display = "none"
23
+ } else {
24
+ elemStyle.display = "block"
25
+ }
26
+ return true;
27
+ }
28
+
29
+ function toggleText(id) {
30
+ elem = $(id)
31
+ if (m = elem.innerHTML.match(/(Hide)(.*)/)) {
32
+ elem.innerHTML = "Show" + m[2];
33
+ } else if (m = elem.innerHTML.match(/(Show)(.*)/)) {
34
+ elem.innerHTML = "Hide" + m[2];
35
+ }
36
+ return true;
37
+ }
38
+
39
+ function span(s, klass) {
40
+ return '<span class="' + klass + '">' + s + '</span>';
41
+ }
42
+
43
+ function highlightSymbols() {
44
+ pres = document.getElementsByTagName('pre');
45
+ for(var i = 0; i < pres.length; i++) {
46
+ pre = pres[i];
47
+ spans = pre.getElementsByTagName('span');
48
+ for(var k = 0; k < spans.length; k++) {
49
+ span = spans[k];
50
+ if (span.className.match(/ruby-identifier/)) {
51
+ if (span.innerHTML.match(/^:/)) {
52
+ span.className += " ruby-symbol";
53
+ }
54
+ }
55
+ }
56
+ }
57
+ }
58
+
59
+ function hasClass(obj) {
60
+ var result = false;
61
+ if (obj.getAttributeNode("class") != null) {
62
+ result = obj.getAttributeNode("class").value;
63
+ }
64
+ return result;
65
+ }
66
+
67
+ function stripe() {
68
+ var even = true;
69
+ var color = "#f4eefd";
70
+ var tables = document.getElementsByTagName('table');
71
+ if (tables.length == 0) { return; }
72
+ for (var h = 0; h < tables.length; h++) {
73
+ var trs = tables[h].getElementsByTagName("tr");
74
+ for (var i = 0; i < trs.length; i++) {
75
+ var tds = trs[i].getElementsByTagName("td");
76
+ for (var j = 0; j < tds.length; j++) {
77
+ if (hasClass(tds[j]) != "first") {
78
+ var mytd = tds[j];
79
+ if (even) {
80
+ mytd.style.backgroundColor = color;
81
+ }
82
+ }
83
+ }
84
+ even = ! even;
85
+ }
86
+ }
87
+ }
88
+
89
+ function ajaxGet(url) {
90
+ url = (href_base + url).replace('/./', '/')
91
+ var req = false;
92
+
93
+ if (window.ActiveXObject) {
94
+ try {
95
+ // stupid hack because IE7 disables local Ajax with the native xmlhttprequest object
96
+ // for security purposes. Yet ActiveX still works. Thanks, Microsoft. I hate you. Die.
97
+ req = new ActiveXObject("MSXML2.XMLHTTP.3.0");
98
+ } catch (e) {
99
+ try {
100
+ /* IE 6 and maybe 5, don't know, don't care */
101
+ req = new ActiveXObject("Msxml2.XMLHTTP");
102
+ } catch (e) {
103
+ try {
104
+ req = new ActiveXObject("Microsoft.XMLHTTP");
105
+ } catch (e) {
106
+ req = false;
107
+ }
108
+ }
109
+ }
110
+ }
111
+
112
+ /* real browsers */
113
+ if (!req && window.XMLHttpRequest) {
114
+ try {
115
+ req = new XMLHttpRequest();
116
+ } catch (e) {
117
+ req = false;
118
+ }
119
+ }
120
+
121
+ if (req) {
122
+ req.open('GET', url, false);
123
+ req.send(null);
124
+ return req.responseText;
125
+ } else {
126
+ return "Ajax error";
127
+ }
128
+ }
129
+
130
+
131
+ function addEvent(elm, evType, fn, useCapture) {
132
+ if (elm.addEventListener) {
133
+ elm.addEventListener(evType, fn, useCapture);
134
+ return true;
135
+ } else if (elm.attachEvent) {
136
+ var r = elm.attachEvent('on' + evType, fn);
137
+ return r;
138
+ } else {
139
+ elm['on' + evType] = fn;
140
+ }
141
+ }
142
+
143
+ function insertIndices() {
144
+ pages = ["class", "file", "method"]
145
+ for (x in pages) {
146
+ $(pages[x]).innerHTML += ajaxGet('fr_' + pages[x] + '_index.html').replace(/(href=")/g, '$1' + href_base);
147
+ }
148
+ /* mouseoverify method links */
149
+ links = $('method').getElementsByTagName('a');
150
+ for (var x = 0; x < links.length; x++) {
151
+ if (m = links[x].innerHTML.match(/(.*)\s\((.*)\)/)) {
152
+ links[x].innerHTML = m[1] + '<br>';
153
+ links[x].title = m[2];
154
+ }
155
+ }
156
+ /* this is stupid */
157
+ $('class').style.display = "block";
158
+ $('file').style.display = "block";
159
+
160
+ /* has to be here because IE7 does not guarantee the onLoad callback order */
161
+ abbreviateIndicesInner(["class", "file"], 25, "a");
162
+ /* same, linkTitle() depends on the class link list */
163
+ linkTitle();
164
+ }
165
+
166
+ function abbreviateIndices() {
167
+ abbreviateIndicesInner(["defined_in", "child_of", "includes"], 20, 'a');
168
+ abbreviateIndicesInner(["defined_in", "requires", "child_of", "includes"], 20, 'span');
169
+ }
170
+
171
+ function abbreviateIndicesInner(indices, amount, tag) {
172
+ for (var x = 0; x < indices.length; x++) {
173
+ var the_index = $(indices[x]);
174
+ if (the_index) {
175
+ links = the_index.getElementsByTagName(tag);
176
+ for (var y = 0; y < links.length; y++) {
177
+ var link = links[y];
178
+ if (link.getElementsByTagName('span').length == 0 && link.getElementsByTagName('a').length == 0) {
179
+ // avoid nesting
180
+ link.innerHTML = abbreviate(link.innerHTML, amount);
181
+ }
182
+ }
183
+ }
184
+ }
185
+ }
186
+
187
+ function linkTitle() {
188
+ /* grab the correct title element from the index */
189
+ var index_page = ajaxGet('index.html');
190
+ title_text = index_page.match(/<title>(.*)<\/title>/m)[1];
191
+ document.title = title_text + " - " + document.title;
192
+ var p = $('header').getElementsByTagName('p')[0]
193
+ if (p.innerHTML.match(/^\s*$/)) {
194
+ p.innerHTML = title_text;
195
+ } else {
196
+ p.innerHTML = title_text + ": " + p.innerHTML;
197
+ }
198
+ /* set the link properly */
199
+ title_link = index_page.match(/<a\s+href="(.*?)"/)[1];
200
+ var element = $('title');
201
+ var item_type = "";
202
+ var item_name = "";
203
+ if (m = element.innerHTML.match(/(Class:|Module:|File:)\s*(.*)/)) {
204
+ item_type = m[1];
205
+ item_name = m[2];
206
+ } else {
207
+ item_name = element.innerHTML;
208
+ }
209
+ element.innerHTML = '<a href="' + href_base + title_link + '">' + item_type + " " + abbreviate(item_name, 25) + '</a>';
210
+ /* breadcrumb navigation for the win */
211
+ items = item_name.split("::");
212
+ items_new = item_name.split("::");
213
+ var s = ""
214
+ file_links = $('class').getElementsByTagName('a');
215
+ for (var x = 0; x < items.length - 1; x++ ){
216
+ var item = items[x];
217
+ link = ("/classes/" + items.slice(0,x).join("/") + "/" + item + ".html").replace('//', '/');
218
+ regex = new RegExp(RegExp.escape(link) + '$');
219
+ for (var y = 0; y < file_links.length; y++) {
220
+ if (file_links[y].href.match(regex)) {
221
+ items_new[x] = '<a href="' + href_base + link + '">' + item + '</a>';
222
+ break;
223
+ }
224
+ }
225
+ }
226
+ $('item_name').innerHTML = item_type + ' ' + items_new.join(" :: ");
227
+ }
228
+
229
+ function abbreviate(s, size) {
230
+ while (s.length > size) {
231
+ var old_s = s;
232
+ s = s.replace(/\s|\n/mg, '');
233
+ s = s.replace(/([A-Z])[a-z]+/m, '$1');
234
+ if (!s || old_s == s) {
235
+ return "..." + s.substring(s.length - size, s.length);
236
+ }
237
+ }
238
+ return s;
239
+ }
240
+
241
+ function disableSubmit(event) {
242
+ var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
243
+ if (keyCode == 13) {
244
+ return false;
245
+ } else {
246
+ return true;
247
+ }
248
+ }
249
+
250
+ function filterList(id, s, event) {
251
+
252
+ /* some half-assed escaping */
253
+ s = s.replace(/[^\w\d\.\_\-\/\:\=\[\]\?\!]/g, '');
254
+ s = RegExp.escape(s);
255
+
256
+ var show_all = false;
257
+ if (s.match(/^\s*$/)) {
258
+ show_all = true;
259
+ }
260
+
261
+ links = $(id).getElementsByTagName('a')
262
+ regex = new RegExp(s, 'i');
263
+
264
+ for (var x = 0; x < links.length; x++) {
265
+ var link = links[x];
266
+ if (show_all) {
267
+ link.style.display = 'inline';
268
+ } else {
269
+ if (link.innerHTML.match(regex)) {
270
+ link.style.display = 'inline';
271
+ } else {
272
+ link.style.display = 'none';
273
+ }
274
+ }
275
+ }
276
+ return true;
277
+ }
278
+
279
+ RegExp.escape = function(text) {
280
+ if (!arguments.callee.sRE) {
281
+ var specials = [
282
+ '/', '.', '*', '+', '?', '|',
283
+ '(', ')', '[', ']', '{', '}', '\\\\'
284
+ ];
285
+ arguments.callee.sRE = new RegExp(
286
+ '(\\\\' + specials.join('|\\\\') + ')', 'g'
287
+ );
288
+ }
289
+ return text.replace(arguments.callee.sRE, '\\\\$1');
290
+ }
291
+
292
+
293
+ function hacks() {
294
+ // show the spacer if necessary,
295
+ divs = document.getElementsByTagName('div');
296
+ for (x in divs) {
297
+ if (divs[x].className && divs[x].className.match(/top/)) {
298
+ document.getElementById('spacer').style.display = 'block';
299
+ }
300
+ }
301
+ }
302
+
303
+ addEvent(window, 'load', insertIndices, false);
304
+ addEvent(window, 'load', abbreviateIndices, false);
305
+ addEvent(window, 'load', stripe, false);
306
+ addEvent(window, 'load', highlightSymbols, false);
307
+ addEvent(window, 'load', hacks, false);
308
+ </script></head><body><div id="container"><div class="curve" id="preheader_curve_0"></div><div class="curve" id="preheader_curve_1"></div><div class="curve" id="preheader_curve_2"></div><div class="curve" id="preheader_curve_3"></div><div class="curve" id="preheader_curve_4"></div><div class="curve" id="preheader_curve_5"></div><div class="curve" id="preheader_curve_6"></div><div class="curve" id="preheader_curve_7"></div><div class="curve" id="preheader_curve_8"></div><div class="curve" id="preheader_curve_9"></div><div id="header"><p>
309
+ IF:full_path
310
+ %full_path%
311
+ ENDIF:full_path
312
+ </p><span><h1 id="title">
313
+ IF:title
314
+ %title%
315
+ ENDIF:title
316
+ </h1></span>!INCLUDE!</div><div class="clear"></div><div id="left">
317
+ IF:parent
318
+ <div class="navigation dark top" id="child_of"><h3>Child of</h3><span>
319
+
320
+ IF:par_url
321
+ <a href='%par_url%'>
322
+ ENDIF:par_url
323
+ %parent%
324
+ IF:par_url
325
+ </a>
326
+ ENDIF:par_url
327
+ </span></div>
328
+ ENDIF:parent
329
+
330
+ IF:infiles
331
+ <div class="navigation dark top" id="defined_in"><h3>Defined in</h3>
332
+ START:infiles
333
+
334
+ IF:full_path_url
335
+ <a href="%full_path_url%">%full_path%</a>
336
+ ENDIF:full_path_url
337
+
338
+ END:infiles
339
+ </div>
340
+ ENDIF:infiles
341
+
342
+ IF:includes
343
+ <div class="navigation top" id="includes"><h3>Includes</h3>
344
+ START:includes
345
+
346
+ IF:name
347
+ <span class='bpink'>
348
+
349
+ IF:aref
350
+ <a href='%aref%'>
351
+ ENDIF:aref
352
+ %name%<br/>
353
+ IF:aref
354
+ </a>
355
+ ENDIF:aref
356
+ </span>
357
+ ENDIF:name
358
+
359
+ END:includes
360
+ </div>
361
+ ENDIF:includes
362
+
363
+ IF:requires
364
+ <div class="navigation top" id="requires"><h3>Requires</h3>
365
+ START:requires
366
+
367
+ IF:name
368
+ <span class='bpink'>
369
+
370
+ IF:aref
371
+ <a href='%aref%'>
372
+ ENDIF:aref
373
+ %name%<br/>
374
+ IF:aref
375
+ </a>
376
+ ENDIF:aref
377
+ </span>
378
+ ENDIF:name
379
+
380
+ END:requires
381
+ </div>
382
+ ENDIF:requires
383
+
384
+ IF:methods
385
+ <div class="navigation top" id="methods"><h3>Methods</h3>
386
+ START:methods
387
+
388
+ IF:name
389
+ <span class='bpink'>
390
+
391
+ IF:aref
392
+ <a href='%aref%'>
393
+ ENDIF:aref
394
+ %name%<br/>
395
+ IF:aref
396
+ </a>
397
+ ENDIF:aref
398
+ </span>
399
+ ENDIF:name
400
+
401
+ END:methods
402
+ </div>
403
+ ENDIF:methods
404
+ <div id="spacer"></div><div class="navigation dark index" id="class_wrapper"><div class="list_header"><h3>All classes</h3></div><div class="list_header_link"><a href="#" onclick="toggle('class'); toggleText('class_link'); return false;" id="class_link">Hide...</a></div><div class="clear"></div><div id="class"><form><label for="filter_class">Filter:&nbsp;&nbsp;</label><input type="text" onKeyPress="return disableSubmit(event);" id="filter_class" onKeyUp="return filterList('class', this.value, event);"></input></form></div></div><div class="navigation dark index" id="file_wrapper"><div class="list_header"><h3>All files</h3></div><div class="list_header_link"><a href="#" onclick="toggle('file'); toggleText('file_link'); return false;" id="file_link">Hide...</a></div><div class="clear"></div><div id="file"><form><label for="filter_file">Filter:&nbsp;&nbsp;</label><input type="text" onKeyPress="return disableSubmit(event);" id="filter_file" onKeyUp="return filterList('file', this.value, event);"></input></form></div></div><div class="navigation dark index" id="method_wrapper"><div class="list_header"><h3>All methods</h3></div><div class="list_header_link"><a href="#" onclick="toggle('method'); toggleText('method_link'); return false;" id="method_link">Show...</a></div><div class="clear"></div><div id="method"><form><label for="filter_method">Filter:&nbsp;&nbsp;</label><input type="text" onKeyPress="return disableSubmit(event);" id="filter_method" onKeyUp="return filterList('method', this.value, event);"></input></form></div></div><div class="curve" id="left_curve_0"></div><div class="curve" id="left_curve_1"></div><div class="curve" id="left_curve_2"></div><div class="curve" id="left_curve_3"></div><div class="curve" id="left_curve_4"></div><div class="curve" id="left_curve_5"></div><div class="curve" id="left_curve_6"></div><div class="curve" id="left_curve_7"></div><div class="curve" id="left_curve_8"></div><div class="curve" id="left_curve_9"></div></div><div id="content">
405
+ IF:title
406
+ <h1 id="item_name">%title%</h1>
407
+ ENDIF:title
408
+
409
+ IF:description
410
+ <h1>Description</h1>%description%
411
+ ENDIF:description
412
+
413
+ IF:sections
414
+
415
+ START:sections
416
+
417
+ IF:sectitle
418
+ <h1><a name="%secsequence%">%sectitle%</a></h1>
419
+ ENDIF:sectitle
420
+
421
+ IF:seccomment
422
+ <p>%seccomment%</p>
423
+ ENDIF:seccomment
424
+
425
+ IF:classlist
426
+ <h1>Child modules and classes</h1><p>%classlist%</p>
427
+ ENDIF:classlist
428
+
429
+ IF:constants
430
+ <h1>Constants</h1><p><table><tr><th class="first"> </th><th>Name</th><th>Value</th><th colspan="2" class="description">Description</th></tr>
431
+ START:constants
432
+ <tr><td class="first"> </td>
433
+ IF:name
434
+ <td class="highlight">%name%</td>
435
+ ENDIF:name
436
+
437
+ IF:value
438
+ <td class="normal">%value%</td>
439
+ ENDIF:value
440
+
441
+ IF:old_name
442
+ <td class="highlight">%old_name%</td>
443
+ ENDIF:old_name
444
+
445
+ IF:new_name
446
+ <td class="normal">%new_name%</td>
447
+ ENDIF:new_name
448
+
449
+ IF:rw
450
+ <td class="normal">%rw%</td>
451
+ ENDIF:rw
452
+ <td>
453
+ IF:desc
454
+ %desc%
455
+ ENDIF:desc
456
+ </td><td>
457
+ IF:a_desc
458
+ %a_desc%
459
+ ENDIF:a_desc
460
+ </td></tr>
461
+ END:constants
462
+ </table></p>
463
+ ENDIF:constants
464
+
465
+ IF:aliases
466
+ <h1>Aliases</h1><p><table><tr><th class="first"> </th><th>Old name</th><th>New name</th><th colspan="2" class="description">Description</th></tr>
467
+ START:aliases
468
+ <tr><td class="first"> </td>
469
+ IF:name
470
+ <td class="highlight">%name%</td>
471
+ ENDIF:name
472
+
473
+ IF:value
474
+ <td class="normal">%value%</td>
475
+ ENDIF:value
476
+
477
+ IF:old_name
478
+ <td class="highlight">%old_name%</td>
479
+ ENDIF:old_name
480
+
481
+ IF:new_name
482
+ <td class="normal">%new_name%</td>
483
+ ENDIF:new_name
484
+
485
+ IF:rw
486
+ <td class="normal">%rw%</td>
487
+ ENDIF:rw
488
+ <td>
489
+ IF:desc
490
+ %desc%
491
+ ENDIF:desc
492
+ </td><td>
493
+ IF:a_desc
494
+ %a_desc%
495
+ ENDIF:a_desc
496
+ </td></tr>
497
+ END:aliases
498
+ </table></p>
499
+ ENDIF:aliases
500
+
501
+ IF:attributes
502
+ <h1>Attributes</h1><p><table><tr><th class="first"> </th><th>Name</th><th>Read/write?</th><th colspan="2" class="description">Description</th></tr>
503
+ START:attributes
504
+ <tr><td class="first"> </td>
505
+ IF:name
506
+ <td class="highlight">%name%</td>
507
+ ENDIF:name
508
+
509
+ IF:value
510
+ <td class="normal">%value%</td>
511
+ ENDIF:value
512
+
513
+ IF:old_name
514
+ <td class="highlight">%old_name%</td>
515
+ ENDIF:old_name
516
+
517
+ IF:new_name
518
+ <td class="normal">%new_name%</td>
519
+ ENDIF:new_name
520
+
521
+ IF:rw
522
+ <td class="normal">%rw%</td>
523
+ ENDIF:rw
524
+ <td>
525
+ IF:desc
526
+ %desc%
527
+ ENDIF:desc
528
+ </td><td>
529
+ IF:a_desc
530
+ %a_desc%
531
+ ENDIF:a_desc
532
+ </td></tr>
533
+ END:attributes
534
+ </table></p>
535
+ ENDIF:attributes
536
+
537
+ IF:method_list
538
+
539
+ START:method_list
540
+ <div class="section_spacer"></div><h1>%type% %category% methods</h1>
541
+ IF:methods
542
+
543
+ START:methods
544
+
545
+ IF:aref
546
+ <a class="small" name="%aref%"><br/></a>
547
+ ENDIF:aref
548
+ <div class="a_method"><div><h3>
549
+ IF:aref
550
+ <a href='#%aref%'>
551
+ ENDIF:aref
552
+
553
+ IF:callseq
554
+ %callseq%
555
+ ENDIF:callseq
556
+
557
+ IF:name
558
+ %name%
559
+ ENDIF:name
560
+
561
+ IF:params
562
+ %params%
563
+ ENDIF:params
564
+
565
+ IF:aref
566
+ </a>
567
+ ENDIF:aref
568
+ </h3>
569
+ IF:m_desc
570
+ %m_desc%
571
+ ENDIF:m_desc
572
+
573
+ IF:sourcecode
574
+ <p class="source_link" id="%aref%-show-link"><a href="#" onclick="toggle('%aref%-source'); toggleText('%aref%-link'); return false;" id="%aref%-link">Show source...</a></p><div class="source" id="%aref%-source"><pre>%sourcecode%</pre></div>
575
+ ENDIF:sourcecode
576
+ </div></div>
577
+ END:methods
578
+
579
+ ENDIF:methods
580
+
581
+ END:method_list
582
+
583
+ ENDIF:method_list
584
+
585
+ END:sections
586
+
587
+ ENDIF:sections
588
+ </div></div><div class="clear" id="footer"><a href="http://blog.evanweaver.com/articles/2006/06/02/allison">Allison</a></div></body></html>