sancho 0.6.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/CHANGELOG.md +37 -0
- data/Gemfile +11 -0
- data/Gemfile.lock +31 -0
- data/README.md +49 -0
- data/Rakefile +15 -0
- data/STORY.md +13 -0
- data/_layouts/footer.md +4 -0
- data/_layouts/header.md +3 -0
- data/_layouts/layout.html +73 -0
- data/_layouts/robots.txt.erb +4 -0
- data/_layouts/sitemap.xml.erb +20 -0
- data/_layouts/styles.css +92 -0
- data/docs/changelog.html +96 -0
- data/docs/css/styles.css +92 -0
- data/docs/index.html +159 -0
- data/docs/readme.html +159 -0
- data/docs/robots.txt +4 -0
- data/docs/sitemap.xml +30 -0
- data/docs/story.html +57 -0
- data/docs/styles.css +90 -0
- data/lib/config.ru +21 -0
- data/lib/sancho/conf.rb +21 -0
- data/lib/sancho/page.rb +11 -0
- data/lib/sancho/site.rb +24 -0
- data/lib/sancho.rb +37 -0
- data/lib/tasks.rake +80 -0
- data/sancho.gemspec +38 -0
- data/sancho.yml +6 -0
- metadata +70 -0
data/docs/index.html
ADDED
@@ -0,0 +1,159 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
|
3
|
+
<head>
|
4
|
+
<meta charset="utf-8" />
|
5
|
+
<meta name="generator" content="pandoc" />
|
6
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
|
7
|
+
<meta name="keywords" content="ruby, github-pages-generator" />
|
8
|
+
<title>Sancho Readme</title>
|
9
|
+
<style>
|
10
|
+
code{white-space: pre-wrap;}
|
11
|
+
span.smallcaps{font-variant: small-caps;}
|
12
|
+
div.columns{display: flex; gap: min(4vw, 1.5em);}
|
13
|
+
div.column{flex: auto; overflow-x: auto;}
|
14
|
+
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
|
15
|
+
ul.task-list{list-style: none;}
|
16
|
+
ul.task-list li input[type="checkbox"] {
|
17
|
+
width: 0.8em;
|
18
|
+
margin: 0 0.8em 0.2em -1.6em;
|
19
|
+
vertical-align: middle;
|
20
|
+
}
|
21
|
+
.display.math{display: block; text-align: center; margin: 0.5rem auto;}
|
22
|
+
/* CSS for syntax highlighting */
|
23
|
+
pre > code.sourceCode { white-space: pre; position: relative; }
|
24
|
+
pre > code.sourceCode > span { display: inline-block; line-height: 1.25; }
|
25
|
+
pre > code.sourceCode > span:empty { height: 1.2em; }
|
26
|
+
.sourceCode { overflow: visible; }
|
27
|
+
code.sourceCode > span { color: inherit; text-decoration: inherit; }
|
28
|
+
div.sourceCode { margin: 1em 0; }
|
29
|
+
pre.sourceCode { margin: 0; }
|
30
|
+
@media screen {
|
31
|
+
div.sourceCode { overflow: auto; }
|
32
|
+
}
|
33
|
+
@media print {
|
34
|
+
pre > code.sourceCode { white-space: pre-wrap; }
|
35
|
+
pre > code.sourceCode > span { text-indent: -5em; padding-left: 5em; }
|
36
|
+
}
|
37
|
+
pre.numberSource code
|
38
|
+
{ counter-reset: source-line 0; }
|
39
|
+
pre.numberSource code > span
|
40
|
+
{ position: relative; left: -4em; counter-increment: source-line; }
|
41
|
+
pre.numberSource code > span > a:first-child::before
|
42
|
+
{ content: counter(source-line);
|
43
|
+
position: relative; left: -1em; text-align: right; vertical-align: baseline;
|
44
|
+
border: none; display: inline-block;
|
45
|
+
-webkit-touch-callout: none; -webkit-user-select: none;
|
46
|
+
-khtml-user-select: none; -moz-user-select: none;
|
47
|
+
-ms-user-select: none; user-select: none;
|
48
|
+
padding: 0 4px; width: 4em;
|
49
|
+
color: #aaaaaa;
|
50
|
+
}
|
51
|
+
pre.numberSource { margin-left: 3em; border-left: 1px solid #aaaaaa; padding-left: 4px; }
|
52
|
+
div.sourceCode
|
53
|
+
{ }
|
54
|
+
@media screen {
|
55
|
+
pre > code.sourceCode > span > a:first-child::before { text-decoration: underline; }
|
56
|
+
}
|
57
|
+
code span.al { color: #ff0000; font-weight: bold; } /* Alert */
|
58
|
+
code span.an { color: #60a0b0; font-weight: bold; font-style: italic; } /* Annotation */
|
59
|
+
code span.at { color: #7d9029; } /* Attribute */
|
60
|
+
code span.bn { color: #40a070; } /* BaseN */
|
61
|
+
code span.bu { color: #008000; } /* BuiltIn */
|
62
|
+
code span.cf { color: #007020; font-weight: bold; } /* ControlFlow */
|
63
|
+
code span.ch { color: #4070a0; } /* Char */
|
64
|
+
code span.cn { color: #880000; } /* Constant */
|
65
|
+
code span.co { color: #60a0b0; font-style: italic; } /* Comment */
|
66
|
+
code span.cv { color: #60a0b0; font-weight: bold; font-style: italic; } /* CommentVar */
|
67
|
+
code span.do { color: #ba2121; font-style: italic; } /* Documentation */
|
68
|
+
code span.dt { color: #902000; } /* DataType */
|
69
|
+
code span.dv { color: #40a070; } /* DecVal */
|
70
|
+
code span.er { color: #ff0000; font-weight: bold; } /* Error */
|
71
|
+
code span.ex { } /* Extension */
|
72
|
+
code span.fl { color: #40a070; } /* Float */
|
73
|
+
code span.fu { color: #06287e; } /* Function */
|
74
|
+
code span.im { color: #008000; font-weight: bold; } /* Import */
|
75
|
+
code span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Information */
|
76
|
+
code span.kw { color: #007020; font-weight: bold; } /* Keyword */
|
77
|
+
code span.op { color: #666666; } /* Operator */
|
78
|
+
code span.ot { color: #007020; } /* Other */
|
79
|
+
code span.pp { color: #bc7a00; } /* Preprocessor */
|
80
|
+
code span.sc { color: #4070a0; } /* SpecialChar */
|
81
|
+
code span.ss { color: #bb6688; } /* SpecialString */
|
82
|
+
code span.st { color: #4070a0; } /* String */
|
83
|
+
code span.va { color: #19177c; } /* Variable */
|
84
|
+
code span.vs { color: #4070a0; } /* VerbatimString */
|
85
|
+
code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warning */
|
86
|
+
</style>
|
87
|
+
<link rel="stylesheet" href="css/styles.css" />
|
88
|
+
<!--[if lt IE 9]>
|
89
|
+
<script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
|
90
|
+
<![endif]-->
|
91
|
+
</head>
|
92
|
+
<body>
|
93
|
+
<p class="navbar">
|
94
|
+
<span class="smallcaps">= <strong>“Sancho” Pages Puncher</strong> = <a
|
95
|
+
href="readme.html">Readme</a> ~ <a href="changelog.html">Changelog</a> ~
|
96
|
+
<a href="story.html">Story</a> ~ <a
|
97
|
+
href="https://github.com/nvoynov/sancho">Github</a></span>
|
98
|
+
</p>
|
99
|
+
<header id="title-block-header">
|
100
|
+
<h1 class="title">Sancho Readme</h1>
|
101
|
+
</header>
|
102
|
+
<nav id="TOC" role="doc-toc">
|
103
|
+
<ul>
|
104
|
+
<li><a href="#overview" id="toc-overview">Overview</a></li>
|
105
|
+
<li><a href="#installation" id="toc-installation">Installation</a></li>
|
106
|
+
<li><a href="#usage" id="toc-usage">Usage</a></li>
|
107
|
+
<li><a href="#links" id="toc-links">Links</a></li>
|
108
|
+
</ul>
|
109
|
+
</nav>
|
110
|
+
<h2 id="overview">Overview</h2>
|
111
|
+
<p><code>Sancho</code> is static site generator for <a
|
112
|
+
href="https://pages.github.com/">Github Pages</a> that proposes placing
|
113
|
+
your site content under <code>docs</code> directory in a separate git
|
114
|
+
branch branch.</p>
|
115
|
+
<p>For rendering HTML <code>Sancho</code> utilizes <a
|
116
|
+
href="https://pandoc.org">Pandoc</a>, and it is supposed that your site
|
117
|
+
pages will be written in Markdown or <a
|
118
|
+
href="https://pandoc.org/MANUAL.html#pandocs-markdown">Pandoc
|
119
|
+
Markdown</a>.</p>
|
120
|
+
<h2 id="installation">Installation</h2>
|
121
|
+
<p>Run</p>
|
122
|
+
<pre><code>bundle add sancho --git https://github.com/nvoynov/sancho.git</code></pre>
|
123
|
+
<p>Require Sancho in Rakefile</p>
|
124
|
+
<div class="sourceCode" id="cb2"><pre
|
125
|
+
class="sourceCode ruby"><code class="sourceCode ruby"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true" tabindex="-1"></a><span class="fu">require</span> <span class="st">"sancho"</span></span>
|
126
|
+
<span id="cb2-2"><a href="#cb2-2" aria-hidden="true" tabindex="-1"></a>source, folders <span class="kw">=</span> <span class="dt">Sancho</span><span class="at">.tasks</span></span>
|
127
|
+
<span id="cb2-3"><a href="#cb2-3" aria-hidden="true" tabindex="-1"></a><span class="dt">Rake</span><span class="at">.application.rake_require</span> source, folders</span></code></pre></div>
|
128
|
+
<p>Install <a href="https://pandoc.org/installing.html">pandoc</a></p>
|
129
|
+
<h2 id="usage">Usage</h2>
|
130
|
+
<p><u>Basic flow</u></p>
|
131
|
+
<ol type="1">
|
132
|
+
<li>Commit your repo changes!</li>
|
133
|
+
<li>Run <code>$ git checkout docs</code></li>
|
134
|
+
<li>Run <code>$ rake sancho:init</code></li>
|
135
|
+
<li>Customize <code>sancho.yml</code> for pages and
|
136
|
+
<code>_layouts/header.md</code> for navbar</li>
|
137
|
+
<li>Run <code>$ rake sancho:generate</code> to create your site</li>
|
138
|
+
<li>Run <code>$ rake sancho:serve</code> to run the site locally</li>
|
139
|
+
<li>Run <code>$ git push -u origin docs</code></li>
|
140
|
+
</ol>
|
141
|
+
<p><u>Template</u></p>
|
142
|
+
<p>You can provide your own HTML template by placing
|
143
|
+
<code>_layouts/template.html</code> file. Read <a
|
144
|
+
href="https://pandoc.org/MANUAL.html#templates">Pandoc Templates</a>
|
145
|
+
section for details.</p>
|
146
|
+
<h2 id="links">Links</h2>
|
147
|
+
<ul>
|
148
|
+
<li><a href="https://www.zenspider.com/projects/zenweb.html">Zenweb,
|
149
|
+
stupid fast static website generation</a></li>
|
150
|
+
<li><a
|
151
|
+
href="https://devcenter.heroku.com/articles/static-sites-ruby">Creating
|
152
|
+
Static Sites in Ruby with Rack</a></li>
|
153
|
+
</ul>
|
154
|
+
<div id="footer">
|
155
|
+
<hr />
|
156
|
+
<p>© 2022-2023 <a href="http://nvoynov.github.io/">nvoynov</a></p>
|
157
|
+
</div>
|
158
|
+
</body>
|
159
|
+
</html>
|
data/docs/readme.html
ADDED
@@ -0,0 +1,159 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
|
3
|
+
<head>
|
4
|
+
<meta charset="utf-8" />
|
5
|
+
<meta name="generator" content="pandoc" />
|
6
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
|
7
|
+
<meta name="keywords" content="ruby, github-pages-generator" />
|
8
|
+
<title>Sancho Readme</title>
|
9
|
+
<style>
|
10
|
+
code{white-space: pre-wrap;}
|
11
|
+
span.smallcaps{font-variant: small-caps;}
|
12
|
+
div.columns{display: flex; gap: min(4vw, 1.5em);}
|
13
|
+
div.column{flex: auto; overflow-x: auto;}
|
14
|
+
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
|
15
|
+
ul.task-list{list-style: none;}
|
16
|
+
ul.task-list li input[type="checkbox"] {
|
17
|
+
width: 0.8em;
|
18
|
+
margin: 0 0.8em 0.2em -1.6em;
|
19
|
+
vertical-align: middle;
|
20
|
+
}
|
21
|
+
.display.math{display: block; text-align: center; margin: 0.5rem auto;}
|
22
|
+
/* CSS for syntax highlighting */
|
23
|
+
pre > code.sourceCode { white-space: pre; position: relative; }
|
24
|
+
pre > code.sourceCode > span { display: inline-block; line-height: 1.25; }
|
25
|
+
pre > code.sourceCode > span:empty { height: 1.2em; }
|
26
|
+
.sourceCode { overflow: visible; }
|
27
|
+
code.sourceCode > span { color: inherit; text-decoration: inherit; }
|
28
|
+
div.sourceCode { margin: 1em 0; }
|
29
|
+
pre.sourceCode { margin: 0; }
|
30
|
+
@media screen {
|
31
|
+
div.sourceCode { overflow: auto; }
|
32
|
+
}
|
33
|
+
@media print {
|
34
|
+
pre > code.sourceCode { white-space: pre-wrap; }
|
35
|
+
pre > code.sourceCode > span { text-indent: -5em; padding-left: 5em; }
|
36
|
+
}
|
37
|
+
pre.numberSource code
|
38
|
+
{ counter-reset: source-line 0; }
|
39
|
+
pre.numberSource code > span
|
40
|
+
{ position: relative; left: -4em; counter-increment: source-line; }
|
41
|
+
pre.numberSource code > span > a:first-child::before
|
42
|
+
{ content: counter(source-line);
|
43
|
+
position: relative; left: -1em; text-align: right; vertical-align: baseline;
|
44
|
+
border: none; display: inline-block;
|
45
|
+
-webkit-touch-callout: none; -webkit-user-select: none;
|
46
|
+
-khtml-user-select: none; -moz-user-select: none;
|
47
|
+
-ms-user-select: none; user-select: none;
|
48
|
+
padding: 0 4px; width: 4em;
|
49
|
+
color: #aaaaaa;
|
50
|
+
}
|
51
|
+
pre.numberSource { margin-left: 3em; border-left: 1px solid #aaaaaa; padding-left: 4px; }
|
52
|
+
div.sourceCode
|
53
|
+
{ }
|
54
|
+
@media screen {
|
55
|
+
pre > code.sourceCode > span > a:first-child::before { text-decoration: underline; }
|
56
|
+
}
|
57
|
+
code span.al { color: #ff0000; font-weight: bold; } /* Alert */
|
58
|
+
code span.an { color: #60a0b0; font-weight: bold; font-style: italic; } /* Annotation */
|
59
|
+
code span.at { color: #7d9029; } /* Attribute */
|
60
|
+
code span.bn { color: #40a070; } /* BaseN */
|
61
|
+
code span.bu { color: #008000; } /* BuiltIn */
|
62
|
+
code span.cf { color: #007020; font-weight: bold; } /* ControlFlow */
|
63
|
+
code span.ch { color: #4070a0; } /* Char */
|
64
|
+
code span.cn { color: #880000; } /* Constant */
|
65
|
+
code span.co { color: #60a0b0; font-style: italic; } /* Comment */
|
66
|
+
code span.cv { color: #60a0b0; font-weight: bold; font-style: italic; } /* CommentVar */
|
67
|
+
code span.do { color: #ba2121; font-style: italic; } /* Documentation */
|
68
|
+
code span.dt { color: #902000; } /* DataType */
|
69
|
+
code span.dv { color: #40a070; } /* DecVal */
|
70
|
+
code span.er { color: #ff0000; font-weight: bold; } /* Error */
|
71
|
+
code span.ex { } /* Extension */
|
72
|
+
code span.fl { color: #40a070; } /* Float */
|
73
|
+
code span.fu { color: #06287e; } /* Function */
|
74
|
+
code span.im { color: #008000; font-weight: bold; } /* Import */
|
75
|
+
code span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Information */
|
76
|
+
code span.kw { color: #007020; font-weight: bold; } /* Keyword */
|
77
|
+
code span.op { color: #666666; } /* Operator */
|
78
|
+
code span.ot { color: #007020; } /* Other */
|
79
|
+
code span.pp { color: #bc7a00; } /* Preprocessor */
|
80
|
+
code span.sc { color: #4070a0; } /* SpecialChar */
|
81
|
+
code span.ss { color: #bb6688; } /* SpecialString */
|
82
|
+
code span.st { color: #4070a0; } /* String */
|
83
|
+
code span.va { color: #19177c; } /* Variable */
|
84
|
+
code span.vs { color: #4070a0; } /* VerbatimString */
|
85
|
+
code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warning */
|
86
|
+
</style>
|
87
|
+
<link rel="stylesheet" href="css/styles.css" />
|
88
|
+
<!--[if lt IE 9]>
|
89
|
+
<script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
|
90
|
+
<![endif]-->
|
91
|
+
</head>
|
92
|
+
<body>
|
93
|
+
<p class="navbar">
|
94
|
+
<span class="smallcaps">= <strong>“Sancho” Pages Puncher</strong> = <a
|
95
|
+
href="readme.html">Readme</a> ~ <a href="changelog.html">Changelog</a> ~
|
96
|
+
<a href="story.html">Story</a> ~ <a
|
97
|
+
href="https://github.com/nvoynov/sancho">Github</a></span>
|
98
|
+
</p>
|
99
|
+
<header id="title-block-header">
|
100
|
+
<h1 class="title">Sancho Readme</h1>
|
101
|
+
</header>
|
102
|
+
<nav id="TOC" role="doc-toc">
|
103
|
+
<ul>
|
104
|
+
<li><a href="#overview" id="toc-overview">Overview</a></li>
|
105
|
+
<li><a href="#installation" id="toc-installation">Installation</a></li>
|
106
|
+
<li><a href="#usage" id="toc-usage">Usage</a></li>
|
107
|
+
<li><a href="#links" id="toc-links">Links</a></li>
|
108
|
+
</ul>
|
109
|
+
</nav>
|
110
|
+
<h2 id="overview">Overview</h2>
|
111
|
+
<p><code>Sancho</code> is static site generator for <a
|
112
|
+
href="https://pages.github.com/">Github Pages</a> that proposes placing
|
113
|
+
your site content under <code>docs</code> directory in a separate git
|
114
|
+
branch branch.</p>
|
115
|
+
<p>For rendering HTML <code>Sancho</code> utilizes <a
|
116
|
+
href="https://pandoc.org">Pandoc</a>, and it is supposed that your site
|
117
|
+
pages will be written in Markdown or <a
|
118
|
+
href="https://pandoc.org/MANUAL.html#pandocs-markdown">Pandoc
|
119
|
+
Markdown</a>.</p>
|
120
|
+
<h2 id="installation">Installation</h2>
|
121
|
+
<p>Run</p>
|
122
|
+
<pre><code>bundle add sancho --git https://github.com/nvoynov/sancho.git</code></pre>
|
123
|
+
<p>Require Sancho in Rakefile</p>
|
124
|
+
<div class="sourceCode" id="cb2"><pre
|
125
|
+
class="sourceCode ruby"><code class="sourceCode ruby"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true" tabindex="-1"></a><span class="fu">require</span> <span class="st">"sancho"</span></span>
|
126
|
+
<span id="cb2-2"><a href="#cb2-2" aria-hidden="true" tabindex="-1"></a>source, folders <span class="kw">=</span> <span class="dt">Sancho</span><span class="at">.tasks</span></span>
|
127
|
+
<span id="cb2-3"><a href="#cb2-3" aria-hidden="true" tabindex="-1"></a><span class="dt">Rake</span><span class="at">.application.rake_require</span> source, folders</span></code></pre></div>
|
128
|
+
<p>Install <a href="https://pandoc.org/installing.html">pandoc</a></p>
|
129
|
+
<h2 id="usage">Usage</h2>
|
130
|
+
<p><u>Basic flow</u></p>
|
131
|
+
<ol type="1">
|
132
|
+
<li>Commit your repo changes!</li>
|
133
|
+
<li>Run <code>$ git checkout docs</code></li>
|
134
|
+
<li>Run <code>$ rake sancho:init</code></li>
|
135
|
+
<li>Customize <code>sancho.yml</code> for pages and
|
136
|
+
<code>_layouts/header.md</code> for navbar</li>
|
137
|
+
<li>Run <code>$ rake sancho:generate</code> to create your site</li>
|
138
|
+
<li>Run <code>$ rake sancho:serve</code> to run the site locally</li>
|
139
|
+
<li>Run <code>$ git push -u origin docs</code></li>
|
140
|
+
</ol>
|
141
|
+
<p><u>Template</u></p>
|
142
|
+
<p>You can provide your own HTML template by placing
|
143
|
+
<code>_layouts/template.html</code> file. Read <a
|
144
|
+
href="https://pandoc.org/MANUAL.html#templates">Pandoc Templates</a>
|
145
|
+
section for details.</p>
|
146
|
+
<h2 id="links">Links</h2>
|
147
|
+
<ul>
|
148
|
+
<li><a href="https://www.zenspider.com/projects/zenweb.html">Zenweb,
|
149
|
+
stupid fast static website generation</a></li>
|
150
|
+
<li><a
|
151
|
+
href="https://devcenter.heroku.com/articles/static-sites-ruby">Creating
|
152
|
+
Static Sites in Ruby with Rack</a></li>
|
153
|
+
</ul>
|
154
|
+
<div id="footer">
|
155
|
+
<hr />
|
156
|
+
<p>© 2022-2023 <a href="http://nvoynov.github.io/">nvoynov</a></p>
|
157
|
+
</div>
|
158
|
+
</body>
|
159
|
+
</html>
|
data/docs/robots.txt
ADDED
data/docs/sitemap.xml
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
<?xml version='1.0' encoding='UTF-8'?>
|
2
|
+
<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
3
|
+
xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"
|
4
|
+
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
5
|
+
|
6
|
+
<url>
|
7
|
+
<loc>noynov.github.io/sancho/</loc>
|
8
|
+
<lastmod>2024-03-08</lastmod>
|
9
|
+
<changefreq>weekly</changefreq>
|
10
|
+
<priority>1.0</priority>
|
11
|
+
</url>
|
12
|
+
<url>
|
13
|
+
<loc>noynov.github.io/sancho/readme.html</loc>
|
14
|
+
<lastmod>2024-03-08</lastmod>
|
15
|
+
<changefreq>weekly</changefreq>
|
16
|
+
<priority>0.8</priority>
|
17
|
+
</url>
|
18
|
+
<url>
|
19
|
+
<loc>noynov.github.io/sancho/changelog.html</loc>
|
20
|
+
<lastmod>2024-03-08</lastmod>
|
21
|
+
<changefreq>weekly</changefreq>
|
22
|
+
<priority>0.8</priority>
|
23
|
+
</url>
|
24
|
+
<url>
|
25
|
+
<loc>noynov.github.io/sancho/story.html</loc>
|
26
|
+
<lastmod>2024-03-08</lastmod>
|
27
|
+
<changefreq>weekly</changefreq>
|
28
|
+
<priority>0.8</priority>
|
29
|
+
</url>
|
30
|
+
</urlset>
|
data/docs/story.html
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
|
3
|
+
<head>
|
4
|
+
<meta charset="utf-8" />
|
5
|
+
<meta name="generator" content="pandoc" />
|
6
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
|
7
|
+
<meta name="dcterms.date" content="2023-01-28" />
|
8
|
+
<meta name="keywords" content="ruby, github-pages-generator" />
|
9
|
+
<title>Sancho Story</title>
|
10
|
+
<style>
|
11
|
+
code{white-space: pre-wrap;}
|
12
|
+
span.smallcaps{font-variant: small-caps;}
|
13
|
+
div.columns{display: flex; gap: min(4vw, 1.5em);}
|
14
|
+
div.column{flex: auto; overflow-x: auto;}
|
15
|
+
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
|
16
|
+
ul.task-list{list-style: none;}
|
17
|
+
ul.task-list li input[type="checkbox"] {
|
18
|
+
width: 0.8em;
|
19
|
+
margin: 0 0.8em 0.2em -1.6em;
|
20
|
+
vertical-align: middle;
|
21
|
+
}
|
22
|
+
.display.math{display: block; text-align: center; margin: 0.5rem auto;}
|
23
|
+
</style>
|
24
|
+
<link rel="stylesheet" href="css/styles.css" />
|
25
|
+
<!--[if lt IE 9]>
|
26
|
+
<script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
|
27
|
+
<![endif]-->
|
28
|
+
</head>
|
29
|
+
<body>
|
30
|
+
<p class="navbar">
|
31
|
+
<span class="smallcaps">= <strong>“Sancho” Pages Puncher</strong> = <a
|
32
|
+
href="readme.html">Readme</a> ~ <a href="changelog.html">Changelog</a> ~
|
33
|
+
<a href="story.html">Story</a> ~ <a
|
34
|
+
href="https://github.com/nvoynov/sancho">Github</a></span>
|
35
|
+
</p>
|
36
|
+
<header id="title-block-header">
|
37
|
+
<h1 class="title">Sancho Story</h1>
|
38
|
+
<p class="date">2023-01-28</p>
|
39
|
+
</header>
|
40
|
+
<p>Exercising with <a href="https://github.com/nvoynov/punch">Punch</a>
|
41
|
+
and inspired by the result I decided to propose my private “clean domain
|
42
|
+
development” services. Having written some content drafts, my first
|
43
|
+
thought was to just use Jekyll as it is on nvoynov.github.io, but have
|
44
|
+
searched a bit through the Internet I bumped into <a
|
45
|
+
href="https://github.com/seattlerb/zenweb">zenweb</a> and decided to
|
46
|
+
give it a try.</p>
|
47
|
+
<p>Fortunately, something went wrong :) and a few of my content pages,
|
48
|
+
despite all my dancing with a tambourine, just failed to translate into
|
49
|
+
HTML. Being looking through <code>zenweb</code> code I realized that
|
50
|
+
it’s actually easy to design on my own.</p>
|
51
|
+
<p>So meet the Sancho :)</p>
|
52
|
+
<div id="footer">
|
53
|
+
<hr />
|
54
|
+
<p>© 2022-2023 <a href="http://nvoynov.github.io/">nvoynov</a></p>
|
55
|
+
</div>
|
56
|
+
</body>
|
57
|
+
</html>
|
data/docs/styles.css
ADDED
@@ -0,0 +1,90 @@
|
|
1
|
+
body {
|
2
|
+
margin: auto;
|
3
|
+
padding-right: 1em;
|
4
|
+
padding-left: 1em;
|
5
|
+
max-width: 44em;
|
6
|
+
color: black;
|
7
|
+
font-family: Verdana, sans-serif;
|
8
|
+
font-size: 100%;
|
9
|
+
line-height: 140%;
|
10
|
+
color: #333;
|
11
|
+
}
|
12
|
+
|
13
|
+
pre {
|
14
|
+
border: 1px dotted gray;
|
15
|
+
background-color: #ececec;
|
16
|
+
color: #1111111;
|
17
|
+
padding: 0.5em;
|
18
|
+
}
|
19
|
+
|
20
|
+
code {
|
21
|
+
font-family: monospace;
|
22
|
+
}
|
23
|
+
|
24
|
+
h1 a, h2 a, h3 a, h4 a, h5 a {
|
25
|
+
text-decoration: none;
|
26
|
+
color: #7a5ada;
|
27
|
+
}
|
28
|
+
|
29
|
+
h1, h2, h3, h4, h5 {
|
30
|
+
font-family: verdana;
|
31
|
+
font-weight: bold;
|
32
|
+
border-bottom: 1px dotted black;
|
33
|
+
color: #7a5ada;
|
34
|
+
}
|
35
|
+
|
36
|
+
h1 {
|
37
|
+
font-size: 130%;
|
38
|
+
}
|
39
|
+
|
40
|
+
h2 {
|
41
|
+
font-size: 110%;
|
42
|
+
}
|
43
|
+
|
44
|
+
h3 {
|
45
|
+
font-size: 95%;
|
46
|
+
}
|
47
|
+
|
48
|
+
h4 {
|
49
|
+
font-size: 90%;
|
50
|
+
font-style: italic;
|
51
|
+
}
|
52
|
+
|
53
|
+
h5 {
|
54
|
+
font-size: 90%;
|
55
|
+
font-style: italic;
|
56
|
+
}
|
57
|
+
|
58
|
+
h1.title {
|
59
|
+
font-size: 200%;
|
60
|
+
font-weight: bold;
|
61
|
+
padding-top: 0.2em;
|
62
|
+
padding-bottom: 0.2em;
|
63
|
+
text-align: left;
|
64
|
+
border: none;
|
65
|
+
}
|
66
|
+
|
67
|
+
dt code {
|
68
|
+
font-weight: bold;
|
69
|
+
}
|
70
|
+
|
71
|
+
dd p {
|
72
|
+
margin-top: 0;
|
73
|
+
}
|
74
|
+
|
75
|
+
#footer {
|
76
|
+
padding-top: 1em;
|
77
|
+
font-size: 70%;
|
78
|
+
color: gray;
|
79
|
+
text-align: center;
|
80
|
+
}
|
81
|
+
|
82
|
+
.navbar {
|
83
|
+
background: #fff;
|
84
|
+
border-bottom: 1px solid #000;
|
85
|
+
margin: 0 0 1em;
|
86
|
+
padding: 1em 0;
|
87
|
+
position: sticky;
|
88
|
+
top: 0;
|
89
|
+
z-index: 100;
|
90
|
+
}
|
data/lib/config.ru
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
# https://devcenter.heroku.com/articles/static-sites-ruby
|
2
|
+
require 'rack/static'
|
3
|
+
require 'sancho'
|
4
|
+
|
5
|
+
use Rack::Static,
|
6
|
+
:urls => ["/images", "/js", "/css"],
|
7
|
+
:root => "docs"
|
8
|
+
|
9
|
+
text_plain = { 'content-type' => 'text/plain' }
|
10
|
+
text_html = {
|
11
|
+
'content-type' => 'text/html',
|
12
|
+
'cache-control' => 'public, max-age=86400'
|
13
|
+
}
|
14
|
+
|
15
|
+
run lambda {|env|
|
16
|
+
target = env['REQUEST_PATH'][1..-1]
|
17
|
+
source = File.join(Sancho::DOCS, target)
|
18
|
+
return [404, text_plain, ['not found']] \
|
19
|
+
unless File.exist?(source)
|
20
|
+
[200, text_html, File.open(source, File::RDONLY)]
|
21
|
+
}
|
data/lib/sancho/conf.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'psych'
|
2
|
+
|
3
|
+
module Sancho
|
4
|
+
class Conf < Data.define(:domain, :title, :pages)
|
5
|
+
def self.read
|
6
|
+
return new(**Psych.load(File.read(CONF)).transform_keys(&:to_sym)) \
|
7
|
+
if File.exist?(CONF)
|
8
|
+
|
9
|
+
new.tap{|o| File.write(CONF, Psych.dump(o.to_h.transform_keys(&:to_s))) }
|
10
|
+
rescue => e
|
11
|
+
puts 'Sancho: reading config error', e.full_message
|
12
|
+
new
|
13
|
+
end
|
14
|
+
|
15
|
+
def initialize(domain: 'domain', title: 'title', pages: %w[README.md CHANGELOG.md])
|
16
|
+
super
|
17
|
+
end
|
18
|
+
|
19
|
+
CONF = 'sancho.yml'
|
20
|
+
end
|
21
|
+
end
|
data/lib/sancho/page.rb
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
module Sancho
|
2
|
+
|
3
|
+
class Page < Data.define(:source, :url, :date)
|
4
|
+
def initialize(source:, url: '')
|
5
|
+
url = File.basename(source, '.md').downcase + '.html' if url.empty?
|
6
|
+
date = File.mtime(source).to_date
|
7
|
+
super(source: source, url: url, date: date)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
end
|
data/lib/sancho/site.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
require_relative 'page'
|
2
|
+
require 'forwardable'
|
3
|
+
|
4
|
+
module Sancho
|
5
|
+
|
6
|
+
class Site < Data.define(:domain, :title, :pages)
|
7
|
+
extend Forwardable
|
8
|
+
def_delegator :pages, :each, :each_page
|
9
|
+
|
10
|
+
def initialize(domain:, title:, pages:)
|
11
|
+
pages = pages.map{|e| Page.new(e) }
|
12
|
+
super
|
13
|
+
end
|
14
|
+
|
15
|
+
def pages_by_date
|
16
|
+
pages.sort{|a, b| b.date <=> a.date}
|
17
|
+
end
|
18
|
+
|
19
|
+
def <<(page)
|
20
|
+
with(pages: pages.unshift(page))
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
data/lib/sancho.rb
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'date'
|
3
|
+
require_relative 'sancho/conf'
|
4
|
+
require_relative 'sancho/page'
|
5
|
+
require_relative 'sancho/site'
|
6
|
+
|
7
|
+
# Github Pages site generator
|
8
|
+
module Sancho
|
9
|
+
extend self
|
10
|
+
|
11
|
+
VERSION = "0.6.2"
|
12
|
+
|
13
|
+
DOCS = 'docs'.freeze
|
14
|
+
|
15
|
+
def root
|
16
|
+
dir = File.dirname(__dir__)
|
17
|
+
File.expand_path(dir)
|
18
|
+
end
|
19
|
+
|
20
|
+
def assets
|
21
|
+
File.join(root, '_layouts')
|
22
|
+
end
|
23
|
+
|
24
|
+
def docs
|
25
|
+
Site.new(**Conf.read.to_h)
|
26
|
+
end
|
27
|
+
|
28
|
+
def lib
|
29
|
+
File.join(root, 'lib')
|
30
|
+
end
|
31
|
+
|
32
|
+
# Rake.application.rake_require "tasks", [sancho]
|
33
|
+
def tasks
|
34
|
+
['tasks', [lib]]
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|