Change soft-fail to use the config, rather than env
[rbx.git] / lib / rdoc / generator / html / frameless.rb
blob2af890ce041e8603a41311c8889bc50c08c97d63
1 require 'rdoc/generator/html'
2 require 'rdoc/generator/html/one_page_html'
4 ##
5 # = CSS2 RDoc HTML template
7 # This is a template for RDoc that uses XHTML 1.0 Transitional and dictates a
8 # bit more of the appearance of the output to cascading stylesheets than the
9 # default. It was designed for clean inline code display, and uses DHTMl to
10 # toggle the visbility of each method's source with each click on the '[source]'
11 # link.
13 # == Authors
15 # * Michael Granger <ged@FaerieMUD.org>
17 # Copyright (c) 2002, 2003 The FaerieMUD Consortium. Some rights reserved.
19 # This work is licensed under the Creative Commons Attribution License. To view
20 # a copy of this license, visit http://creativecommons.org/licenses/by/1.0/ or
21 # send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California
22 # 94305, USA.
24 module RDoc::Generator::HTML::FRAMELESS
26   FRAMELESS = true
28   FONTS = "Verdana,Arial,Helvetica,sans-serif"
30   STYLE = <<-EOF
31 body {
32   font-family: #{FONTS};
33   font-size: 90%;
34   margin: 0;
35   margin-left: 40px;
36   padding: 0;
37   background: white;
40 h1, h2, h3, h4 {
41   margin: 0;
42   color: #efefef;
43   background: transparent;
46 h1 {
47   font-size: 150%;
50 h2,h3,h4 {
51   margin-top: 1em;
54 :link, :visited {
55   background: #eef;
56   color: #039;
57   text-decoration: none;
60 :link:hover, :visited:hover {
61   background: #039;
62   color: #eef;
65 /* Override the base stylesheet's Anchor inside a table cell */
66 td > :link, td > :visited {
67   background: transparent;
68   color: #039;
69   text-decoration: none;
72 /* and inside a section title */
73 .section-title > :link, .section-title > :visited {
74   background: transparent;
75   color: #eee;
76   text-decoration: none;
79 /* === Structural elements =================================== */
81 .index {
82   margin: 0;
83   margin-left: -40px;
84   padding: 0;
85   font-size: 90%;
88 .index :link, .index :visited {
89   margin-left: 0.7em;
92 .index .section-bar {
93   margin-left: 0px;
94   padding-left: 0.7em;
95   background: #ccc;
96   font-size: small;
99 #classHeader, #fileHeader {
100   width: auto;
101   color: white;
102   padding: 0.5em 1.5em 0.5em 1.5em;
103   margin: 0;
104   margin-left: -40px;
105   border-bottom: 3px solid #006;
108 #classHeader :link, #fileHeader :link,
109 #classHeader :visited, #fileHeader :visited {
110   background: inherit;
111   color: white;
114 #classHeader td, #fileHeader td {
115   background: inherit;
116   color: white;
119 #fileHeader {
120   background: #057;
123 #classHeader {
124   background: #048;
127 .class-name-in-header {
128   font-size:  180%;
129   font-weight: bold;
132 #bodyContent {
133   padding: 0 1.5em 0 1.5em;
136 #description {
137   padding: 0.5em 1.5em;
138   background: #efefef;
139   border: 1px dotted #999;
142 #description h1, #description h2, #description h3,
143 #description h4, #description h5, #description h6 {
144   color: #125;
145   background: transparent;
148 #copyright {
149   color: #333;
150   background: #efefef;
151   font: 0.75em sans-serif;
152   margin-top: 5em;
153   margin-bottom: 0;
154   padding: 0.5em 2em;
157 /* === Classes =================================== */
159 table.header-table {
160   color: white;
161   font-size: small;
164 .type-note {
165   font-size: small;
166   color: #dedede;
169 .xxsection-bar {
170   background: #eee;
171   color: #333;
172   padding: 3px;
175 .section-bar {
176   color: #333;
177   border-bottom: 1px solid #999;
178   margin-left: -20px;
181 .section-title {
182   background: #79a;
183   color: #eee;
184   padding: 3px;
185   margin-top: 2em;
186   margin-left: -30px;
187   border: 1px solid #999;
190 .top-aligned-row {
191   vertical-align: top
194 .bottom-aligned-row {
195   vertical-align: bottom
198 /* --- Context section classes ----------------------- */
200 .context-row { }
202 .context-item-name {
203   font-family: monospace;
204   font-weight: bold;
205   color: black;
208 .context-item-value {
209   font-size: small;
210   color: #448;
213 .context-item-desc {
214   color: #333;
215   padding-left: 2em;
218 /* --- Method classes -------------------------- */
220 .method-detail {
221   background: #efefef;
222   padding: 0;
223   margin-top: 0.5em;
224   margin-bottom: 1em;
225   border: 1px dotted #ccc;
228 .method-heading {
229   color: black;
230   background: #ccc;
231   border-bottom: 1px solid #666;
232   padding: 0.2em 0.5em 0 0.5em;
235 .method-signature {
236   color: black;
237   background: inherit;
240 .method-name {
241   font-weight: bold;
244 .method-args {
245   font-style: italic;
248 .method-description {
249   padding: 0 0.5em 0 0.5em;
252 /* --- Source code sections -------------------- */
254 :link.source-toggle, :visited.source-toggle {
255   font-size: 90%;
258 div.method-source-code {
259   background: #262626;
260   color: #ffdead;
261   margin: 1em;
262   padding: 0.5em;
263   border: 1px dashed #999;
264   overflow: hidden;
267 div.method-source-code pre {
268   color: #ffdead;
269   overflow: hidden;
272 /* --- Ruby keyword styles --------------------- */
274 .standalone-code {
275   background: #221111;
276   color: #ffdead;
277   overflow: hidden;
280 .ruby-constant {
281   color: #7fffd4;
282   background: transparent;
285 .ruby-keyword {
286   color: #00ffff;
287   background: transparent;
290 .ruby-ivar {
291   color: #eedd82;
292   background: transparent;
295 .ruby-operator {
296   color: #00ffee;
297   background: transparent;
300 .ruby-identifier {
301   color: #ffdead;
302   background: transparent;
305 .ruby-node {
306   color: #ffa07a;
307   background: transparent;
310 .ruby-comment {
311   color: #b22222;
312   font-weight: bold;
313   background: transparent;
316 .ruby-regexp {
317   color: #ffa07a;
318   background: transparent;
321 .ruby-value {
322   color: #7fffd4;
323   background: transparent;
328   ##
329   # Header template
331   XHTML_PREAMBLE = <<-EOF
332 <?xml version="1.0" encoding="<%= values["charset"] %>"?>
333 <!DOCTYPE html
334      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
335      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
336   EOF
338   HEADER = XHTML_PREAMBLE + <<-EOF
339 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
340 <head>
341   <title><%= values["title"] %></title>
342   <meta http-equiv="Content-Type" content="text/html; charset=<%= values["charset"] %>" />
343   <meta http-equiv="Content-Script-Type" content="text/javascript" />
344   <link rel="stylesheet" href="<%= values["style_url"] %>" type="text/css" media="screen" />
345   <script type="text/javascript">
346   // <![CDATA[
348   function popupCode( url ) {
349     window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
350   }
352   function toggleCode( id ) {
353     if ( document.getElementById )
354       elem = document.getElementById( id );
355     else if ( document.all )
356       elem = eval( "document.all." + id );
357     else
358       return false;
360     elemStyle = elem.style;
362     if ( elemStyle.display != "block" ) {
363       elemStyle.display = "block"
364     } else {
365       elemStyle.display = "none"
366     }
368     return true;
369   }
371   // Make codeblocks hidden by default
372   document.writeln( "<style type=\\"text/css\\">div.method-source-code { display: none }</style>" )
374   // ]]>
375   </script>
377 </head>
378 <body>
381   ##
382   # Context content template
384   CONTEXT_CONTENT = %{
387   ##
388   # Footer template
390   FOOTER = <<-EOF
391   <div id="popupmenu" class="index">
392     <ul>
393     <li class="index-entries section-bar">Classes
394       <ul>
395 <% values["class_list"].each do |klass| %>
396         <li><a href="<%= klass["href"] %>"><%= klass["name"] %></a>
397 <% end %>
398       </ul>
399     </li>
401     <li class="index-entries section-bar">Methods
402       <ul>
403 <% values["method_list"].each do |file| %>
404         <li><a href="<%= file["href"] %>"><%= file["name"] %></a>
405 <% end %>
406       </ul>
407     </li>
409     <li class="index-entries section-bar">Files
410       <ul>
411 <% values["file_list"].each do |file| %>
412         <li><a href="<%= file["href"] %>"><%= file["name"] %></a>
413 <% end %>
414       </ul>
415     </li>
416     </ul>
417   </li>
419 </body>
420 </html>
421   EOF
423   ##
424   # File page header template
426   FILE_PAGE = <<-EOF
427   <div id="fileHeader">
428     <h1><%= values["short_name"] %></h1>
430     <table class="header-table">
431     <tr class="top-aligned-row">
432       <td><strong>Path:</strong></td>
433       <td><%= values["full_path"] %>
434 <% if values["cvsurl"] then %>
435         &nbsp;(<a href="<%= values["cvsurl"] %>"><acronym title="Concurrent Versioning System">CVS</acronym></a>)
436 <% end %>
437       </td>
438     </tr>
440     <tr class="top-aligned-row">
441       <td><strong>Last Update:</strong></td>
442       <td><%= values["dtm_modified"] %></td>
443     </tr>
444     </table>
445   </div>
446   EOF
448   ##
449   # Class page header template
451   CLASS_PAGE = <<-EOF
452     <div id="classHeader">
453       <table class="header-table">
454       <tr class="top-aligned-row">
455         <td><strong><%= values["classmod"] %></strong></td>
456         <td class="class-name-in-header"><%= values["full_name"] %></td>
457       </tr>
459       <tr class="top-aligned-row">
460         <td><strong>In:</strong></td>
461         <td>
462 <% values["infiles"].each do |infiles| %>
463 <% if infiles["full_path_url"] then %>
464           <a href="<%= infiles["full_path_url"] %>">
465 <% end %>
466             <%= infiles["full_path"] %>
467 <% if infiles["full_path_url"] then %>
468           </a>
469 <% end %>
470 <% if infiles["cvsurl"] then %>
471           &nbsp;(<a href="<%= infiles["cvsurl"] %>"><acronym title="Concurrent Versioning System">CVS</acronym></a>)
472 <% end %>
473           <br />
474 <% end %><%# values["infiles"] %>
475         </td>
476       </tr>
478 <% if values["parent"] then %>
479       <tr class="top-aligned-row">
480         <td><strong>Parent:</strong></td>
481         <td>
482 <% if values["par_url"] then %>
483           <a href="<%= values["par_url"] %>">
484 <% end %>
485             <%= values["parent"] %>
486 <% if values["par_url"] then %>
487           </a>
488 <% end %>
489         </td>
490       </tr>
491 <% end %>
492     </table>
493   </div>
494   EOF
496   ##
497   # Method list template
499   METHOD_LIST = <<-EOF
501   <div id="contextContent">
502 <% if values["diagram"] then %>
503     <div id="diagram">
504       <%= values["diagram"] %>
505     </div>
506 <% end %>
508 <% if values["description"] then %>
509     <div id="description">
510       <%= values["description"] %>
511     </div>
512 <% end %>
514 <% if values["requires"] then %>
515     <div id="requires-list">
516       <h3 class="section-bar">Required files</h3>
518       <div class="name-list">
519 <% values["requires"].each do |requires| %>
520         <%= href requires["aref"], requires["name"] %>&nbsp;&nbsp;
521 <% end %><%# values["requires"] %>
522       </div>
523     </div>
524 <% end %>
526 <% if values["toc"] then %>
527     <div id="contents-list">
528       <h3 class="section-bar">Contents</h3>
529       <ul>
530 <% values["toc"].each do |toc| %>
531       <li><a href="#<%= values["href"] %>"><%= values["secname"] %></a></li>
532 <% end %><%# values["toc"] %>
533      </ul>
534 <% end %>
535    </div>
537 <% if values["methods"] then %>
538     <div id="method-list">
539       <h3 class="section-bar">Methods</h3>
541       <div class="name-list">
542 <% values["methods"].each do |methods| %>
543         <%= href methods["aref"], methods["name"] %>&nbsp;&nbsp;
544 <% end %><%# values["methods"] %>
545       </div>
546     </div>
547 <% end %>
549   </div>
552     <!-- if includes -->
553 <% if values["includes"] then %>
554     <div id="includes">
555       <h3 class="section-bar">Included Modules</h3>
557       <div id="includes-list">
558 <% values["includes"].each do |includes| %>
559         <span class="include-name"><%= href includes["aref"], includes["name"] %></span>
560 <% end %><%# values["includes"] %>
561       </div>
562     </div>
563 <% end %>
565 <% values["sections"].each do |sections| %>
566     <div id="section">
567 <% if sections["sectitle"] then %>
568       <h2 class="section-title"><a name="<%= sections["secsequence"] %>"><%= sections["sectitle"] %></a></h2>
569 <% if sections["seccomment"] then %>
570       <div class="section-comment">
571         <%= sections["seccomment"] %>
572       </div>
573 <% end %>
574 <% end %>
576 <% if values["classlist"] then %>
577     <div id="class-list">
578       <h3 class="section-bar">Classes and Modules</h3>
580       <%= values["classlist"] %>
581     </div>
582 <% end %>
584 <% if values["constants"] then %>
585     <div id="constants-list">
586       <h3 class="section-bar">Constants</h3>
588       <div class="name-list">
589         <table summary="Constants">
590 <% values["constants"].each do |constants| %>
591         <tr class="top-aligned-row context-row">
592           <td class="context-item-name"><%= constants["name"] %></td>
593           <td>=</td>
594           <td class="context-item-value"><%= constants["value"] %></td>
595 <% if values["desc"] then %>
596           <td width="3em">&nbsp;</td>
597           <td class="context-item-desc"><%= constants["desc"] %></td>
598 <% end %>
599         </tr>
600 <% end %><%# values["constants"] %>
601         </table>
602       </div>
603     </div>
604 <% end %>
606 <% if values["aliases"] then %>
607     <div id="aliases-list">
608       <h3 class="section-bar">External Aliases</h3>
610       <div class="name-list">
611                         <table summary="aliases">
612 <% values["aliases"].each do |aliases| $stderr.puts({ :aliases => aliases }.inspect) %>
613         <tr class="top-aligned-row context-row">
614           <td class="context-item-name"><%= values["old_name"] %></td>
615           <td>-&gt;</td>
616           <td class="context-item-value"><%= values["new_name"] %></td>
617         </tr>
618 <% if values["desc"] then %>
619       <tr class="top-aligned-row context-row">
620         <td>&nbsp;</td>
621         <td colspan="2" class="context-item-desc"><%= values["desc"] %></td>
622       </tr>
623 <% end %>
624 <% end %><%# values["aliases"] %>
625         </table>
626       </div>
627     </div>
628 <% end %>
631 <% if values["attributes"] then %>
632     <div id="attribute-list">
633       <h3 class="section-bar">Attributes</h3>
635       <div class="name-list">
636         <table>
637 <% values["attributes"].each do |attributes| $stderr.puts({ :attributes => attributes }.inspect) %>
638         <tr class="top-aligned-row context-row">
639           <td class="context-item-name"><%= values["name"] %></td>
640 <% if values["rw"] then %>
641           <td class="context-item-value">&nbsp;[<%= values["rw"] %>]&nbsp;</td>
642 <% end %>
643 <% unless values["rw"] then %>
644           <td class="context-item-value">&nbsp;&nbsp;</td>
645 <% end %>
646           <td class="context-item-desc"><%= values["a_desc"] %></td>
647         </tr>
648 <% end %><%# values["attributes"] %>
649         </table>
650       </div>
651     </div>
652 <% end %>
654     <!-- if method_list -->
655 <% if sections["method_list"] then %>
656     <div id="methods">
657 <% sections["method_list"].each do |method_list| %>
658 <% if method_list["methods"] then %>
659       <h3 class="section-bar"><%= method_list["type"] %> <%= method_list["category"] %> methods</h3>
661 <% method_list["methods"].each do |methods| %>
662       <div id="method-<%= methods["aref"] %>" class="method-detail">
663         <a name="<%= methods["aref"] %>"></a>
665         <div class="method-heading">
666 <% if methods["codeurl"] then %>
667           <a href="<%= methods["codeurl"] %>" target="Code" class="method-signature"
668             onclick="popupCode('<%= methods["codeurl"] %>');return false;">
669 <% end %>
670 <% if methods["sourcecode"] then %>
671           <a href="#<%= methods["aref"] %>" class="method-signature">
672 <% end %>
673 <% if methods["callseq"] then %>
674           <span class="method-name"><%= methods["callseq"] %></span>
675 <% end %>
676 <% unless methods["callseq"] then %>
677           <span class="method-name"><%= methods["name"] %></span><span class="method-args"><%= methods["params"] %></span>
678 <% end %>
679 <% if methods["codeurl"] then %>
680           </a>
681 <% end %>
682 <% if methods["sourcecode"] then %>
683           </a>
684 <% end %>
685         </div>
687         <div class="method-description">
688 <% if methods["m_desc"] then %>
689           <%= methods["m_desc"] %>
690 <% end %>
691 <% if methods["sourcecode"] then %>
692           <p><a class="source-toggle" href="#"
693             onclick="toggleCode('<%= methods["aref"] %>-source');return false;">[Source]</a></p>
694           <div class="method-source-code" id="<%= methods["aref"] %>-source">
695 <pre>
696 <%= methods["sourcecode"] %>
697 </pre>
698           </div>
699 <% end %>
700         </div>
701       </div>
703 <% end %><%# method_list["methods"] %>
704 <% end %>
705 <% end %><%# sections["method_list"] %>
707     </div>
708 <% end %>
709 <% end %><%# values["sections"] %>
710   EOF
712   ##
713   # Body template
715   BODY = HEADER + %{
717 <%= template_include %>  <!-- banner header -->
719   <div id="bodyContent">
721 } +  METHOD_LIST + %{
723   </div>
725 } + FOOTER
727   ##
728   # Source code template
730   SRC_PAGE = XHTML_PREAMBLE + <<-EOF
731 <html>
732 <head>
733   <title><%= values["title"] %></title>
734   <meta http-equiv="Content-Type" content="text/html; charset=<%= values["charset"] %>" />
735   <link rel="stylesheet" href="<%= values["style_url"] %>" type="text/css" media="screen" />
736 </head>
737 <body class="standalone-code">
738   <pre><%= values["code"] %></pre>
739 </body>
740 </html>
741   EOF
743   ##
744   # Index file templates
746   FR_INDEX_BODY = %{
747 <%= template_include %>
750   FILE_INDEX = XHTML_PREAMBLE + <<-EOF
751 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
752 <head>
753   <title><%= values["list_title"] %></title>
754   <meta http-equiv="Content-Type" content="text/html; charset=<%= values["charset"] %>" />
755   <link rel="stylesheet" href="<%= values["style_url"] %>" type="text/css" />
756   <base target="docwin" />
757 </head>
758 <body>
759 <div class="index">
760   <h1 class="section-bar"><%= values["list_title"] %></h1>
761   <div class="index-entries">
762 <% values["entries"].each do |entries| %>
763     <a href="<%= entries["href"] %>"><%= entries["name"] %></a><br />
764 <% end %><%# values["entries"] %>
765   </div>
766 </div>
767 </body>
768 </html>
769   EOF
771   CLASS_INDEX = FILE_INDEX
772   METHOD_INDEX = FILE_INDEX
774   INDEX = <<-EOF
775 <?xml version="1.0" encoding="<%= values["charset"] %>"?>
776 <!DOCTYPE html
777      PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
778      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
779 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
780 <head>
781   <title><%= values["title"] %></title>
782   <meta http-equiv="Content-Type" content="text/html; charset=<%= values["charset"] %>" />
783 </head>
784 <frameset rows="20%, 80%">
785   <frameset cols="45%,55%">
786     <frame src="fr_class_index.html"  name="Classes" />
787     <frame src="fr_method_index.html" name="Methods" />
788   </frameset>
789   <frame src="<%= values["initial_page"] %>" name="docwin" />
790 </frameset>
791 </html>
792   EOF