lib/taskjuggler/UserManual.rb in taskjuggler-0.0.11 vs lib/taskjuggler/UserManual.rb in taskjuggler-0.1.0

- old
+ new

@@ -15,18 +15,21 @@ require 'taskjuggler/Tj3Config' require 'taskjuggler/RichText/Document' require 'taskjuggler/SyntaxReference' require 'taskjuggler/TjTime' require 'taskjuggler/RichText/FunctionExample' +require 'taskjuggler/HTMLElements' class TaskJuggler # This class specializes the RichTextDocument class for the TaskJuggler user # manual. This manual is not only generated from a set of RichTextSnip files, # but also contains the SyntaxReference for the TJP syntax. class UserManual < RichTextDocument + include HTMLElements + # Create a UserManual object and gather the TJP syntax information. def initialize super # Don't confuse this with RichTextDocument#references @reference = SyntaxReference.new(self) @@ -88,119 +91,124 @@ end # Callback function used by the RichTextDocument class to generate the cover # page for the manual. def generateHTMLCover - html = [] - html << (div = XMLElement.new('div', 'align' => 'center', - 'style' => 'margin-top:40px; margin-botton:40px')) - div << XMLNamedText.new("The #{AppConfig.softwareName} User Manual", - 'h1') - div << XMLNamedText.new('Project Management beyond Gantt Chart drawing', - 'em') - div << XMLElement.new('br') - div << XMLNamedText.new( - "Copyright (c) #{AppConfig.copyright.join(', ')} " + - "by #{AppConfig.authors.join(', ')}", 'b') - div << XMLElement.new('br') - div << XMLText.new("Generated on #{TjTime.new.strftime('%Y-%m-%d')}") - div << XMLElement.new('br') - div << XMLNamedText.new("This manual covers #{AppConfig.softwareName} " + - "version #{AppConfig.version}.", 'h3') - html << XMLElement.new('br') - html << XMLElement.new('hr') - html << XMLElement.new('br') - - html + [ + DIV.new('align' => 'center', + 'style' => 'margin-top:40px; margin-botton:40px') do + [ + H1.new { "The #{AppConfig.softwareName} User Manual" }, + EM.new { 'Project Management beyond Gantt Chart drawing' }, + BR.new, + B.new do + "Copyright (c) #{AppConfig.copyright.join(', ')} " + + "by #{AppConfig.authors.join(', ')}" + end, + BR.new, + "Generated on #{TjTime.new.strftime('%Y-%m-%d')}", + BR.new, + H3.new { "This manual covers #{AppConfig.softwareName} " + + "version #{AppConfig.version}." } + ] + end, + BR.new, + HR.new, + BR.new + ] end # Callback function used by the RichTextDocument class to generate the # header for the manual pages. def generateHTMLHeader - html = [] - html << (headline = XMLElement.new('div', 'align' => 'center')) - headline << XMLNamedText.new( - "The #{AppConfig.softwareName} User Manual", 'h3', - 'align' => 'center') - headline << XMLNamedText.new( - 'Project Management beyond Gantt Chart Drawing', 'em', - 'align' => 'center') - - html + DIV.new('align' => 'center') do + [ + H3.new('align' => 'center') do + "The #{AppConfig.softwareName} User Manual" + end, + EM.new('align' => 'center') do + 'Project Management beyond Gantt Chart Drawing' + end + ] + end end # Callback function used by the RichTextDocument class to generate the # footer for the manual pages. def generateHTMLFooter - html = [] - html << (div = XMLElement.new('div', 'align' => 'center', - 'style' => 'font-size:10px;')) - div << XMLText.new("Copyright (c) #{AppConfig.copyright.join(', ')} by " + - "#{AppConfig.authors.join(', ')}.") - div << XMLNamedText.new('TaskJuggler', 'a', 'href' => AppConfig.contact) - div << XMLText.new(' is a trademark of Chris Schlaeger.') - - html + DIV.new('align' => 'center', 'style' => 'font-size:10px;') do + [ + "Copyright (c) #{AppConfig.copyright.join(', ')} by " + + "#{AppConfig.authors.join(', ')}.", + A.new('href' => AppConfig.contact) do + 'TaskJuggler' + end, + ' is a trademark of Chris Schlaeger.' + ] + end end # Callback function used by the RichTextDocument and KeywordDocumentation # classes to generate the navigation bars for the manual pages. # _predLabel_: Text for the reference to the previous page. May be nil. # _predURL: URL to the previous page. # _succLabel_: Text for the reference to the next page. May be nil. # _succURL: URL to the next page. def generateHTMLNavigationBar(predLabel, predURL, succLabel, succURL) - html = [] - html << XMLElement.new('br') - html << XMLElement.new('hr') + html = [ BR.new, HR.new ] if predLabel || succLabel # We use a tabel to get the desired layout. - html << (tab = XMLElement.new('table', - 'style' => 'width:90%; margin-left:5%; margin-right:5%')) - tab << (tr = XMLElement.new('tr')) - tr << (td = XMLElement.new('td', - 'style' => 'text-align:left; width:35%;')) - if predLabel - # Link to previous page. - td << XMLText.new('<< ') - td << XMLNamedText.new(predLabel, 'a', 'href' => predURL) - td << XMLText.new(' <<') - end - # Link to table of contents - tr << (td = XMLElement.new('td', - 'style' => 'text-align:center; width:30%;')) - td << XMLNamedText.new('Table Of Contents', 'a', 'href' => 'toc.html') - tr << (td = XMLElement.new('td', - 'style' => 'text-align:right; width:35%;')) - if succLabel - # Link to next page. - td << XMLText.new('>> ') - td << XMLNamedText.new(succLabel, 'a', 'href' => succURL) - td << XMLText.new(' >>') - end - html << XMLElement.new('hr') + html += [ + TABLE.new('style' => 'width:90%; margin-left:5%; ' + + 'margin-right:5%') do + TR.new do + [ + TD.new('style' => 'text-align:left; width:35%;') do + if predLabel + # Link to previous page. + [ '<< ', A.new('href' => predURL) { predLabel }, ' <<' ] + end + end, + # Link to table of contents + TD.new('style' => 'text-align:center; width:30%;') do + A.new('href' => 'toc.html') { 'Table Of Contents' } + end, + TD.new('style' => 'text-align:right; width:35%;') do + if succLabel + # Link to next page. + [ '>> ', A.new('href' => succURL) { succLabel }, ' >>' ] + end + end + ] + end + end, + HR.new + ] end - html << XMLElement.new('br') + html << BR.new html end # Generate the top-level file for the HTML user manual. def generateHTMLindex(directory) html = HTMLDocument.new(:frameset) - head = html.generateHead("The #{AppConfig.softwareName} User Manual", - { 'description' => - 'A reference and user manual for the ' + - 'TaskJuggler project management software.', - 'keywords' => 'taskjuggler, manual, reference'}) - html << (frameset = XMLElement.new('frameset', 'cols' => '15%, 85%')) - frameset << (navFrames = XMLElement.new('frameset', 'rows' => '15%, 85%')) - navFrames << XMLElement.new('frame', 'src' => 'alphabet.html', - 'name' => 'alphabet') - navFrames << XMLElement.new('frame', 'src' => 'navbar.html', - 'name' => 'navigator') - frameset << XMLElement.new('frame', 'src' => 'toc.html', - 'name' => 'display') + html.generateHead("The #{AppConfig.softwareName} User Manual", + { 'description' => + 'A reference and user manual for the ' + + 'TaskJuggler project management software.', + 'keywords' => 'taskjuggler, manual, reference'}) + html << FRAMESET.new('cols' => '15%, 85%') do + [ + FRAMESET.new('rows' => '15%, 85%') do + [ + FRAME.new('src' => 'alphabet.html', 'name' => 'alphabet'), + FRAME.new('src' => 'navbar.html', 'name' => 'navigator') + ] + end, + FRAME.new('src' => 'toc.html', 'name' => 'display') + ] + end html.write(directory + 'index.html') end private