use mustache for layout
This commit is contained in:
parent
7b0f7d31fd
commit
5eca6cdc9b
34
lib/rocco.rb
34
lib/rocco.rb
@ -9,8 +9,8 @@
|
||||
require 'rdiscount'
|
||||
|
||||
class Rocco
|
||||
# `Rocco.new` takes a `filename` and an optional `block` used to read
|
||||
# the file's contents. When `block` is given, it must read the contents
|
||||
# `Rocco.new` takes a source `filename` and an optional `block` used to
|
||||
# read the file's contents. When `block` is given, it must read the contents
|
||||
# of the file using whatever means necessary and return it as a string.
|
||||
# With no `block`, the file is read to retrieve data.
|
||||
def initialize(filename, &block)
|
||||
@ -26,9 +26,19 @@ class Rocco
|
||||
@sections = highlight(parse(@data))
|
||||
end
|
||||
|
||||
# The source filename.
|
||||
attr_reader :file
|
||||
|
||||
# A list of two-tuples representing each *section* of the source file. Each
|
||||
# item in the list has the form `[docs_html, code_html]` and represents a
|
||||
# single section.
|
||||
#
|
||||
# Both `docs_html` and `code_html` are strings containing the
|
||||
# documentation and source code HTML, respectively.
|
||||
attr_reader :sections
|
||||
|
||||
# Internal Parsing and Highlighting
|
||||
# ---------------------------------
|
||||
|
||||
protected
|
||||
|
||||
# Parse the raw file data into a list of two-tuples.
|
||||
@ -105,21 +115,9 @@ protected
|
||||
end
|
||||
|
||||
public
|
||||
require 'rocco/layout'
|
||||
|
||||
def to_html
|
||||
buf = []
|
||||
buf << "<!DOCTYPE html>"
|
||||
buf << "<head>"
|
||||
buf << "<style>table td{vertical-align:top;padding:10px;}\npre{background:#fff;overflow-x:auto}</style>"
|
||||
buf << "<link rel=stylesheet href='http://github.com/richleland/pygments-css/raw/master/default.css'>"
|
||||
buf << "</head>"
|
||||
buf << "<table width=100%>"
|
||||
@sections.each do |docs,code|
|
||||
buf << "<tr>"
|
||||
buf << "<td width=50%>#{docs}</td>"
|
||||
buf << "<td width=50%><div class='highlight codehilite'><pre>#{code}</pre></div></td>"
|
||||
buf << "</tr>"
|
||||
end
|
||||
buf << "</table>"
|
||||
buf.join("\n")
|
||||
Rocco::Layout.new(self).render
|
||||
end
|
||||
end
|
||||
|
28
lib/rocco/layout.mustache
Normal file
28
lib/rocco/layout.mustache
Normal file
@ -0,0 +1,28 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html;charset=utf-8">
|
||||
<title>{{ title }}</title>
|
||||
<link rel="stylesheet" href="http://jashkenas.github.com/docco/resources/docco.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id='container'>
|
||||
<table cellspacing=0 cellpadding=0>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class=docs><h1>{{ title }}</h1></th>
|
||||
<th class=code></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{#sections}}
|
||||
<tr id='section-{{ num }}'>
|
||||
<td class=docs>{{{ docs }}}</td>
|
||||
<td class=code>
|
||||
<div class='highlight'><pre>{{{ code }}}</pre></div>
|
||||
</td>
|
||||
</tr>
|
||||
{{/sections}}
|
||||
</table>
|
||||
</div>
|
||||
</body>
|
24
lib/rocco/layout.rb
Normal file
24
lib/rocco/layout.rb
Normal file
@ -0,0 +1,24 @@
|
||||
require 'mustache'
|
||||
|
||||
class Rocco::Layout < Mustache
|
||||
self.template_path = File.dirname(__FILE__)
|
||||
|
||||
def initialize(doc)
|
||||
@doc = doc
|
||||
end
|
||||
|
||||
def title
|
||||
@doc.file
|
||||
end
|
||||
|
||||
def sections
|
||||
num = 0
|
||||
@doc.sections.map do |docs,code|
|
||||
{
|
||||
:docs => docs,
|
||||
:code => code,
|
||||
:num => (num += 1)
|
||||
}
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue
Block a user