-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathpaige.html
108 lines (104 loc) · 25.5 KB
/
paige.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
<!DOCTYPE html> <html> <head> <title>paige.coffee</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <link rel="stylesheet" media="all" href="rocco.css" /> </head> <body> <div id="navbar"> <h3>Paige.js - The quickie-wiki Github project page generator<em></em></h3> </div> <div id="container"> <div id="background"></div> <div id="jump_to"> Jump To … <div id="jump_wrapper"> <div id="jump_page"> <a class="source" href="index.html">Index</a> <a class="source" href="paige.html"> paige.coffee </a> <a class="source" href="rocco.html"> rocco.coffee </a> </div> </div> </div> <table cellpadding="0" cellspacing="0"> <thead> <tr> <th class="docs"> <h1> paige.coffee </h1> </th> <th class="code"> </th> </tr> </thead> <tbody> <tr id="section-1"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-1">¶</a> </div> <p>Require our external dependencies, including <strong>Showdown.js</strong>
(the JavaScript implementation of Markdown).</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">_ = </span> <span class="nx">require</span> <span class="s2">"underscore"</span>
<span class="nv">fs = </span> <span class="nx">require</span> <span class="s1">'fs'</span>
<span class="nv">path = </span> <span class="nx">require</span> <span class="s1">'path'</span>
<span class="nv">showdown = </span> <span class="nx">require</span><span class="p">(</span><span class="s1">'./../vendor/showdown'</span><span class="p">).</span><span class="nx">Showdown</span>
<span class="p">{</span><span class="nx">spawn</span><span class="p">,</span> <span class="nx">exec</span><span class="p">}</span> <span class="o">=</span> <span class="nx">require</span> <span class="s1">'child_process'</span>
<span class="nv">events = </span> <span class="nx">require</span><span class="p">(</span><span class="s1">'events'</span><span class="p">)</span>
<span class="nv">rocco = </span> <span class="nx">require</span> <span class="s1">'./rocco.js'</span>
<span class="nv">subfiles = </span><span class="p">[]</span>
<span class="nv">configuration = </span><span class="p">{</span>
<span class="s2">"title"</span> <span class="o">:</span> <span class="s2">"Untitled"</span><span class="p">,</span>
<span class="s2">"content_file"</span> <span class="o">:</span> <span class="s2">"README.mdown"</span><span class="p">,</span>
<span class="s2">"include_index"</span> <span class="o">:</span> <span class="kc">false</span><span class="p">,</span>
<span class="s2">"docco_files"</span> <span class="o">:</span> <span class="kc">null</span><span class="p">,</span>
<span class="s2">"header"</span> <span class="o">:</span> <span class="s2">"Untitled"</span><span class="p">,</span>
<span class="s2">"subheader"</span> <span class="o">:</span> <span class="s2">"Untitled"</span><span class="p">,</span>
<span class="s2">"background"</span> <span class="o">:</span> <span class="s2">"bright_squares"</span><span class="p">,</span>
<span class="s2">"output"</span> <span class="o">:</span> <span class="s2">"docs"</span>
<span class="p">}</span></pre></div> </td> </tr> <tr id="section-2"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-2">¶</a> </div> <p>Read our configuration file.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">read_config = </span><span class="nf">(callback) -></span>
<span class="nv">filename = </span><span class="s2">"paige.config"</span>
<span class="nv">filename = </span><span class="nx">process</span><span class="p">.</span><span class="nx">argv</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="k">if</span> <span class="nx">process</span><span class="p">.</span><span class="nx">argv</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">?</span>
<span class="nx">fs</span><span class="p">.</span><span class="nx">readFile</span> <span class="nx">filename</span><span class="p">,</span> <span class="s2">"utf-8"</span><span class="p">,</span> <span class="nf">(error, data) -></span>
<span class="k">if</span> <span class="nx">error</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span> <span class="s2">"\nCould not find a configuration file. (default: ./paige.config)"</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span> <span class="s2">"Create and specify a configuration file. Example:\n\n"</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span> <span class="nx">config_template</span> <span class="o">+</span> <span class="s2">"\n"</span>
<span class="k">else</span>
<span class="nv">config = </span><span class="nx">JSON</span><span class="p">.</span><span class="nx">parse</span><span class="p">(</span><span class="nx">data</span><span class="p">)</span>
<span class="nx">process_config</span><span class="p">(</span><span class="nx">config</span><span class="p">)</span>
<span class="nx">callback</span><span class="p">(</span><span class="nx">config</span><span class="p">)</span> <span class="k">if</span> <span class="nx">callback</span></pre></div> </td> </tr> <tr id="section-3"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-3">¶</a> </div> <p>Process the configuration file</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">process_config = </span><span class="nf">(config={}) -></span>
<span class="nx">_</span><span class="p">.</span><span class="nx">map</span> <span class="nx">config</span><span class="p">,</span> <span class="nf">(value, key, list) -></span>
<span class="nx">configuration</span><span class="p">[</span><span class="nx">key</span><span class="p">]</span> <span class="o">=</span> <span class="nx">value</span> <span class="k">if</span> <span class="nx">config</span><span class="p">[</span><span class="nx">key</span><span class="p">]</span><span class="o">?</span></pre></div> </td> </tr> <tr id="section-4"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-4">¶</a> </div> <p>Ensure that the destination directory exists.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">ensure_directory = </span><span class="nf">(dir, callback) -></span>
<span class="nx">exec</span> <span class="s2">"mkdir -p #{dir}"</span><span class="p">,</span> <span class="o">-></span> <span class="nx">callback</span><span class="p">()</span></pre></div> </td> </tr> <tr id="section-5"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-5">¶</a> </div> <p>...</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">copy_image = </span><span class="o">-></span>
<span class="nv">desired_image = </span><span class="nx">fs</span><span class="p">.</span><span class="nx">readFileSync</span><span class="p">(</span><span class="nx">__dirname</span> <span class="o">+</span> <span class="s2">"/../resources/#{configuration.background}.png"</span><span class="p">)</span>
<span class="nx">fs</span><span class="p">.</span><span class="nx">writeFile</span> <span class="s2">"#{configuration.output}/bg.png"</span><span class="p">,</span> <span class="nx">desired_image</span></pre></div> </td> </tr> <tr id="section-6"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-6">¶</a> </div> <p>Build the main html file by reading the source Markdown file, and if necessary
collecting all the filenames of our source. We will then use these names to construct the
index that's shown at the top of the page.
We pass the source Markdown file to Showdown, get the result, then pipe it into
our templating function described above.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">process_html_file = </span><span class="o">-></span>
<span class="nv">source = </span><span class="nx">configuration</span><span class="p">.</span><span class="nx">content_file</span>
<span class="nv">subfiles_names = </span><span class="nx">clean_file_extension</span><span class="p">(</span><span class="nx">subfiles</span><span class="p">)</span> <span class="k">if</span> <span class="nx">configuration</span><span class="p">.</span><span class="nx">include_index</span>
<span class="nv">clean_subfiles = </span><span class="nx">clean_path_names</span><span class="p">(</span><span class="nx">subfiles</span><span class="p">)</span> <span class="k">if</span> <span class="nx">configuration</span><span class="p">.</span><span class="nx">include_index</span>
<span class="nx">fs</span><span class="p">.</span><span class="nx">readFile</span> <span class="nx">source</span><span class="p">,</span> <span class="s2">"utf-8"</span><span class="p">,</span> <span class="nf">(error, code) -></span>
<span class="k">if</span> <span class="nx">error</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span> <span class="s2">"\nThere was a problem reading your the content file: #{source}"</span>
<span class="k">throw</span> <span class="nx">error</span>
<span class="k">else</span></pre></div> </td> </tr> <tr id="section-7"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-7">¶</a> </div> <p>replace ``` block with <pre> tags</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nv">code = </span><span class="nx">code</span><span class="p">.</span><span class="nx">replace</span> <span class="sr">/```\w*\n?([^```]*)```/gm</span><span class="p">,</span> <span class="s1">'<pre>\n$1</pre>'</span>
<span class="nv">content_html = </span><span class="nx">showdown</span><span class="p">.</span><span class="nx">makeHtml</span> <span class="nx">code</span>
<span class="nv">html = </span><span class="nx">mdown_template</span> <span class="p">{</span>
<span class="nv">content_html: </span> <span class="nx">content_html</span><span class="p">,</span>
<span class="nv">title: </span> <span class="nx">configuration</span><span class="p">.</span><span class="nx">title</span><span class="p">,</span>
<span class="nv">header: </span> <span class="nx">configuration</span><span class="p">.</span><span class="nx">header</span><span class="p">,</span>
<span class="nv">subheader: </span> <span class="nx">configuration</span><span class="p">.</span><span class="nx">subheader</span><span class="p">,</span>
<span class="nv">github: </span> <span class="nx">configuration</span><span class="p">.</span><span class="nx">github</span><span class="p">,</span>
<span class="nv">include_index: </span> <span class="nx">configuration</span><span class="p">.</span><span class="nx">include_index</span><span class="p">,</span>
<span class="nv">subfiles: </span> <span class="nx">clean_subfiles</span><span class="p">,</span>
<span class="nv">subfiles_names: </span> <span class="nx">subfiles_names</span>
<span class="p">}</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span> <span class="s2">"paige: #{source} -> #{configuration.output}/index.html"</span>
<span class="nx">fs</span><span class="p">.</span><span class="nx">writeFile</span> <span class="s2">"#{configuration.output}/index.html"</span><span class="p">,</span> <span class="nx">html</span></pre></div> </td> </tr> <tr id="section-8"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-8">¶</a> </div> <p>Micro-templating, originally by John Resig, borrowed by way of
<a href="http://documentcloud.github.com/underscore/">Underscore.js</a>.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">template = </span><span class="nf">(str) -></span>
<span class="k">new</span> <span class="nb">Function</span> <span class="s1">'obj'</span><span class="p">,</span>
<span class="s1">'var p=[],print=function(){p.push.apply(p,arguments);};'</span> <span class="o">+</span>
<span class="s1">'with(obj){p.push(\''</span> <span class="o">+</span>
<span class="nx">str</span><span class="p">.</span><span class="nx">replace</span><span class="p">(</span><span class="sr">/[\r\t\n]/g</span><span class="p">,</span> <span class="s2">" "</span><span class="p">)</span>
<span class="p">.</span><span class="nx">replace</span><span class="p">(</span><span class="sr">/'(?=[^<]*%>)/g</span><span class="p">,</span><span class="s2">"\t"</span><span class="p">)</span>
<span class="p">.</span><span class="nx">split</span><span class="p">(</span><span class="s2">"'"</span><span class="p">).</span><span class="nx">join</span><span class="p">(</span><span class="s2">"\\'"</span><span class="p">)</span>
<span class="p">.</span><span class="nx">split</span><span class="p">(</span><span class="s2">"\t"</span><span class="p">).</span><span class="nx">join</span><span class="p">(</span><span class="s2">"'"</span><span class="p">)</span>
<span class="p">.</span><span class="nx">replace</span><span class="p">(</span><span class="sr">/<%=(.+?)%>/g</span><span class="p">,</span> <span class="s2">"',$1,'"</span><span class="p">)</span>
<span class="p">.</span><span class="nx">split</span><span class="p">(</span><span class="s1">'<%'</span><span class="p">).</span><span class="nx">join</span><span class="p">(</span><span class="s2">"');"</span><span class="p">)</span>
<span class="p">.</span><span class="nx">split</span><span class="p">(</span><span class="s1">'%>'</span><span class="p">).</span><span class="nx">join</span><span class="p">(</span><span class="s2">"p.push('"</span><span class="p">)</span> <span class="o">+</span>
<span class="s2">"');}return p.join('');"</span></pre></div> </td> </tr> <tr id="section-9"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-9">¶</a> </div> <p>Kind of hacky, but I can't figure out another way of doing this cleanly.
Will list all the files that will be used as your source file for passing onto rocco.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">get_subfiles = </span><span class="p">(</span><span class="nx">callback</span><span class="p">)</span> <span class="o">=></span>
<span class="nv">count = </span><span class="mi">0</span>
<span class="nv">find_files = </span><span class="p">(</span><span class="nx">file</span><span class="p">,</span> <span class="nx">total</span><span class="p">)</span> <span class="o">=></span>
<span class="nv">f_path = </span><span class="nx">file</span><span class="p">.</span><span class="nx">substr</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="nx">file</span><span class="p">.</span><span class="nx">lastIndexOf</span><span class="p">(</span><span class="s1">'/'</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span>
<span class="nv">f_file = </span><span class="nx">file</span><span class="p">.</span><span class="nx">substr</span><span class="p">(</span><span class="nx">file</span><span class="p">.</span><span class="nx">lastIndexOf</span><span class="p">(</span><span class="s1">'/'</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span>
<span class="nx">exec</span> <span class="s2">"find ./#{f_path} -name '#{f_file}' -print"</span><span class="p">,</span> <span class="nf">(error, stdout, stderr) -></span>
<span class="nx">count</span><span class="o">++</span>
<span class="nv">subfiles = </span><span class="nx">_</span><span class="p">.</span><span class="nx">uniq</span><span class="p">(</span><span class="nx">_</span><span class="p">.</span><span class="nx">union</span><span class="p">(</span><span class="nx">subfiles</span><span class="p">,</span> <span class="nx">stdout</span><span class="p">.</span><span class="nx">trim</span><span class="p">().</span><span class="nx">split</span><span class="p">(</span><span class="s2">"\n"</span><span class="p">)))</span>
<span class="k">if</span> <span class="nx">count</span> <span class="o">>=</span> <span class="nx">total</span>
<span class="nx">callback</span><span class="p">()</span> <span class="k">if</span> <span class="nx">callback</span>
<span class="k">if</span> <span class="nx">_</span><span class="p">.</span><span class="nx">isArray</span><span class="p">(</span><span class="nx">configuration</span><span class="p">.</span><span class="nx">docco_files</span><span class="p">)</span>
<span class="nx">_</span><span class="p">.</span><span class="nx">each</span> <span class="nx">configuration</span><span class="p">.</span><span class="nx">docco_files</span><span class="p">,</span> <span class="nf">(file) -></span>
<span class="nx">find_files</span><span class="p">(</span><span class="nx">file</span><span class="p">,</span><span class="nx">configuration</span><span class="p">.</span><span class="nx">docco_files</span><span class="p">.</span><span class="nx">length</span><span class="p">)</span>
<span class="k">else</span> <span class="k">if</span> <span class="nx">_</span><span class="p">.</span><span class="nx">isString</span><span class="p">(</span><span class="nx">configuration</span><span class="p">.</span><span class="nx">docco_files</span><span class="p">)</span>
<span class="nx">find_files</span><span class="p">(</span><span class="nx">configuration</span><span class="p">.</span><span class="nx">docco_files</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span></pre></div> </td> </tr> <tr id="section-10"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-10">¶</a> </div> <p>Remove trailing path names from each file from a list</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">clean_path_names = </span><span class="nf">(names) -></span>
<span class="nv">clean_names = </span><span class="p">[]</span>
<span class="nx">_</span><span class="p">.</span><span class="nx">each</span> <span class="nx">names</span><span class="p">,</span> <span class="nf">(name) -></span>
<span class="nx">clean_names</span><span class="p">.</span><span class="nx">push</span> <span class="nx">name</span><span class="p">.</span><span class="nx">substr</span><span class="p">(</span><span class="nx">name</span><span class="p">.</span><span class="nx">lastIndexOf</span><span class="p">(</span><span class="s1">'/'</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span> <span class="o">||</span> <span class="nx">name</span>
<span class="k">return</span> <span class="nx">clean_names</span></pre></div> </td> </tr> <tr id="section-11"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-11">¶</a> </div> <p>Remove file extensions from each file from a list</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">clean_file_extension = </span><span class="nf">(names) -></span>
<span class="nv">clean_names = </span><span class="p">[]</span>
<span class="nx">_</span><span class="p">.</span><span class="nx">each</span> <span class="nx">names</span><span class="p">,</span> <span class="nf">(name) -></span>
<span class="nx">clean_names</span><span class="p">.</span><span class="nx">push</span> <span class="nx">name</span><span class="p">.</span><span class="nx">substr</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="nx">name</span><span class="p">.</span><span class="nx">lastIndexOf</span><span class="p">(</span><span class="s1">'.'</span><span class="p">)).</span><span class="nx">substr</span><span class="p">(</span><span class="nx">name</span><span class="p">.</span><span class="nx">lastIndexOf</span><span class="p">(</span><span class="s1">'/'</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span> <span class="o">||</span> <span class="nx">name</span>
<span class="k">return</span> <span class="nx">clean_names</span></pre></div> </td> </tr> <tr id="section-12"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-12">¶</a> </div> <p>Process the rocco files and wrappers if needed.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">check_for_rocco = </span><span class="o">-></span>
<span class="k">if</span> <span class="nx">configuration</span><span class="p">.</span><span class="nx">docco_files</span><span class="o">?</span>
<span class="nx">rocco</span><span class="p">(</span><span class="nx">subfiles</span><span class="p">,</span> <span class="nx">configuration</span><span class="p">)</span></pre></div> </td> </tr> <tr id="section-13"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-13">¶</a> </div> <p>Some necessary files</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">mdown_template = </span> <span class="nx">template</span> <span class="nx">fs</span><span class="p">.</span><span class="nx">readFileSync</span><span class="p">(</span><span class="nx">__dirname</span> <span class="o">+</span> <span class="s1">'/../resources/paige.jst'</span><span class="p">).</span><span class="nx">toString</span><span class="p">()</span>
<span class="nv">config_template = </span> <span class="nx">fs</span><span class="p">.</span><span class="nx">readFileSync</span><span class="p">(</span><span class="nx">__dirname</span> <span class="o">+</span> <span class="s1">'/../resources/paige.config'</span><span class="p">).</span><span class="nx">toString</span><span class="p">()</span></pre></div> </td> </tr> <tr id="section-14"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-14">¶</a> </div> <p>Run the script</p> </td> <td class="code"> <div class="highlight"><pre><span class="nx">read_config</span> <span class="nf">(config) -></span>
<span class="nx">ensure_directory</span> <span class="nx">configuration</span><span class="p">.</span><span class="nx">output</span><span class="p">,</span> <span class="o">-></span>
<span class="nx">get_subfiles</span> <span class="o">-></span>
<span class="nx">copy_image</span><span class="p">()</span>
<span class="nx">process_html_file</span><span class="p">()</span>
<span class="nx">check_for_rocco</span><span class="p">()</span>
</pre></div> </td> </tr> </tbody> </table> </div> </body> </html>