ramaze 0.0.8 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
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>