madness 0.5.7 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +23 -3
- data/app/public/css/main.css +58 -22
- data/app/public/css/main.css.map +2 -2
- data/app/public/fonts/fontello.eot +0 -0
- data/app/public/fonts/fontello.svg +14 -0
- data/app/public/fonts/fontello.ttf +0 -0
- data/app/public/fonts/fontello.woff +0 -0
- data/app/public/fonts/fontello.woff2 +0 -0
- data/app/styles/_code.scss +4 -4
- data/app/styles/_coderay.scss +17 -4
- data/app/styles/_general.scss +0 -1
- data/app/styles/_icons.scss +30 -0
- data/app/styles/_manifest.scss +1 -0
- data/app/styles/_nav.scss +21 -2
- data/app/styles/_search.scss +2 -6
- data/app/styles/main.scss +5 -4
- data/app/views/_index_nav.slim +1 -1
- data/app/views/_nav.slim +9 -5
- data/app/views/document.slim +1 -1
- data/app/views/search.slim +7 -8
- data/lib/madness.rb +2 -0
- data/lib/madness/breadcrumbs.rb +3 -1
- data/lib/madness/directory.rb +3 -2
- data/lib/madness/document.rb +10 -11
- data/lib/madness/item.rb +6 -1
- data/lib/madness/navigation.rb +2 -1
- data/lib/madness/refinements/array_refinements.rb +9 -0
- data/lib/madness/refinements/string_refinements.rb +10 -0
- data/lib/madness/search.rb +19 -6
- data/lib/madness/version.rb +1 -1
- metadata +23 -3
- data/app/views/_content.slim +0 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 07d2ef37fab295b6921ab9ebcc0b4acff83f62acb8d915be0bf83d7f15529858
|
4
|
+
data.tar.gz: db1c5bb7216cd6afef30a0c2bc2cc5b2b29add53ea44ffc8e5fe57eee8faffa4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 296e842af36958bed1cd80a43e7326fb3a2e23e7aa4380f645d6b4a275caa3243b5411ed2e00f342e2524dab774899eb1df735b5cf68d711b54a50a6eb65e74a
|
7
|
+
data.tar.gz: b6d8e5d2e1f3abc18f262cbab6daf38c636691df911df86063230aed0b57c071711a6912d15b9e7bb5f1501e9327e36a2cccee360a44d42bda1a4f86da1f81c1
|
data/README.md
CHANGED
@@ -9,10 +9,15 @@ Madness - Instant Markdown Server
|
|
9
9
|
---
|
10
10
|
|
11
11
|
|
12
|
-
|
12
|
+
Screenshots (click to zoom)
|
13
13
|
--------------------------------------------------
|
14
14
|
|
15
|
-
|
15
|
+
<table><tr>
|
16
|
+
<td><a target='_screenshot' href='screenshots/main.png'><img src='screenshots/main.png'/></a></td>
|
17
|
+
<td><a target='_screenshot' href='screenshots/nav.png'><img src='screenshots/nav.png'/></a></td>
|
18
|
+
<td><a target='_screenshot' href='screenshots/code.png'><img src='screenshots/code.png'/></a></td>
|
19
|
+
<td><a target='_screenshot' href='screenshots/search.png'><img src='screenshots/search.png'/></a></td>
|
20
|
+
</tr></table>
|
16
21
|
|
17
22
|
|
18
23
|
|
@@ -30,6 +35,7 @@ Table of Contents
|
|
30
35
|
* [Automatic H1](#automatic-h1)
|
31
36
|
* [Table of Contents Generation](#table-of-contents-generation)
|
32
37
|
* [Hidden Directories](#hidden-directories)
|
38
|
+
* [Controlling Sort Order](#controlling-sort-order)
|
33
39
|
* [Customizing Theme](#customizing-theme)
|
34
40
|
* [Docker Image](#docker-image)
|
35
41
|
|
@@ -202,6 +208,21 @@ numbers (`/^[a-z_\-0-9]+$/`) will not be displayed in the navigation.
|
|
202
208
|
|
203
209
|
|
204
210
|
|
211
|
+
Controlling Sort Order
|
212
|
+
--------------------------------------------------
|
213
|
+
|
214
|
+
To control the sort order of the automatically generated navigation elements,
|
215
|
+
simply perfix your files and directories with digits followed by a dot and a
|
216
|
+
space, just like you would create an ordered list in Markdown
|
217
|
+
|
218
|
+
```
|
219
|
+
./
|
220
|
+
├── 1. Some file or folder
|
221
|
+
└── 2. Another file or folder
|
222
|
+
```
|
223
|
+
|
224
|
+
|
225
|
+
|
205
226
|
Customizing Theme
|
206
227
|
--------------------------------------------------
|
207
228
|
|
@@ -265,7 +286,6 @@ For more information see:
|
|
265
286
|
|
266
287
|
---
|
267
288
|
|
268
|
-
[screenshot]: https://raw.githubusercontent.com/DannyBen/madness/master/screenshot.png
|
269
289
|
[dockerhub]: https://hub.docker.com/r/dannyben/madness/
|
270
290
|
[dockerfile]: https://github.com/DannyBen/docker-madness
|
271
291
|
[css]: app/public/css/main.css
|
data/app/public/css/main.css
CHANGED
@@ -125,6 +125,7 @@ code {
|
|
125
125
|
content: "\00a0"; }
|
126
126
|
|
127
127
|
pre {
|
128
|
+
margin-left: 20px;
|
128
129
|
overflow: auto;
|
129
130
|
line-height: 1.45;
|
130
131
|
word-wrap: normal; }
|
@@ -137,26 +138,27 @@ pre {
|
|
137
138
|
background: transparent;
|
138
139
|
border: 0; }
|
139
140
|
pre code {
|
140
|
-
|
141
|
-
display: inline;
|
141
|
+
display: inline-block;
|
142
142
|
max-width: initial;
|
143
|
-
padding: 0;
|
144
143
|
overflow: initial;
|
145
144
|
line-height: inherit;
|
146
145
|
word-wrap: normal;
|
147
|
-
background-color: transparent;
|
148
146
|
border: 0; }
|
149
147
|
pre code:before,
|
150
148
|
pre code:after {
|
151
149
|
content: normal; }
|
152
150
|
|
153
|
-
td.line-numbers {
|
154
|
-
background: #eee; }
|
155
|
-
|
156
151
|
table.CodeRay {
|
157
152
|
margin-bottom: 0; }
|
158
153
|
table.CodeRay pre {
|
159
154
|
margin-bottom: 0; }
|
155
|
+
table.CodeRay tr, table.CodeRay td {
|
156
|
+
border: 0; }
|
157
|
+
table.CodeRay tr pre, table.CodeRay td pre {
|
158
|
+
margin-left: 0; }
|
159
|
+
table.CodeRay td.line-numbers {
|
160
|
+
background: #eee;
|
161
|
+
padding: 4px; }
|
160
162
|
|
161
163
|
img {
|
162
164
|
border-style: none;
|
@@ -198,7 +200,8 @@ kbd {
|
|
198
200
|
box-shadow: inset 0 -1px 0 #bbb; }
|
199
201
|
|
200
202
|
.search-form {
|
201
|
-
margin-bottom: 20px;
|
203
|
+
margin-bottom: 20px;
|
204
|
+
margin-top: 20px; }
|
202
205
|
|
203
206
|
.search-field {
|
204
207
|
outline: none;
|
@@ -206,14 +209,12 @@ kbd {
|
|
206
209
|
font-size: 1.5em;
|
207
210
|
width: 50%;
|
208
211
|
min-width: 200px;
|
212
|
+
width: 100%;
|
209
213
|
border: #ccc 1px solid;
|
210
214
|
border-radius: 3px; }
|
211
215
|
.search-field:focus {
|
212
216
|
border-color: #4078c0; }
|
213
217
|
|
214
|
-
.search-excerpt {
|
215
|
-
white-space: pre-wrap; }
|
216
|
-
|
217
218
|
.breadcrumbs {
|
218
219
|
margin-top: 6px;
|
219
220
|
border-bottom: 1px solid #ccc; }
|
@@ -227,16 +228,26 @@ nav {
|
|
227
228
|
width: 250px;
|
228
229
|
overflow-y: auto;
|
229
230
|
position: fixed;
|
230
|
-
padding: 10px 0;
|
231
231
|
border-right: 1px solid #eee; }
|
232
232
|
@media print {
|
233
233
|
nav {
|
234
234
|
display: none; } }
|
235
|
-
nav
|
235
|
+
nav .icon-bar {
|
236
|
+
border-bottom: 1px dotted #ddd; }
|
237
|
+
nav a.document, nav span.document, nav .caption {
|
236
238
|
border-bottom: 1px dotted #ddd;
|
237
239
|
display: block;
|
238
240
|
padding: 3px 20px 3px 30px; }
|
239
|
-
nav a:hover, nav span:hover {
|
241
|
+
nav a.document:hover, nav span.document:hover, nav .caption:hover {
|
242
|
+
background: #e4e4e4; }
|
243
|
+
nav a.icon {
|
244
|
+
display: inline-block;
|
245
|
+
font-size: 1.5em;
|
246
|
+
width: 50%;
|
247
|
+
padding: 3px 20px 3px 30px; }
|
248
|
+
nav a.icon.wide {
|
249
|
+
width: 100%; }
|
250
|
+
nav a.icon:hover {
|
240
251
|
background: #e4e4e4; }
|
241
252
|
nav:after {
|
242
253
|
content: "";
|
@@ -250,6 +261,31 @@ nav {
|
|
250
261
|
background: #ddd;
|
251
262
|
-webkit-border-radius: 3px; }
|
252
263
|
|
264
|
+
@font-face {
|
265
|
+
font-family: 'fontello';
|
266
|
+
src: url("../fonts/fontello.eot?14105917");
|
267
|
+
src: url("../fonts/fontello.eot?14105917#iefix") format("embedded-opentype"), url("../fonts/fontello.woff2?14105917") format("woff2"), url("../fonts/fontello.woff?14105917") format("woff"), url("../fonts/fontello.ttf?14105917") format("truetype"), url("../fonts/fontello.svg?14105917#fontello") format("svg");
|
268
|
+
font-weight: normal;
|
269
|
+
font-style: normal; }
|
270
|
+
[class^="icon-"]:before, [class*=" icon-"]:before {
|
271
|
+
font-family: "fontello";
|
272
|
+
font-style: normal;
|
273
|
+
font-weight: normal;
|
274
|
+
speak: none;
|
275
|
+
display: inline-block;
|
276
|
+
text-decoration: inherit;
|
277
|
+
width: 1em;
|
278
|
+
margin-right: .2em;
|
279
|
+
text-align: center;
|
280
|
+
font-variant: normal;
|
281
|
+
text-transform: none; }
|
282
|
+
|
283
|
+
.icon-search:before {
|
284
|
+
content: '\e800'; }
|
285
|
+
|
286
|
+
.icon-home:before {
|
287
|
+
content: '\e801'; }
|
288
|
+
|
253
289
|
* {
|
254
290
|
box-sizing: border-box; }
|
255
291
|
|
@@ -257,17 +293,17 @@ p {
|
|
257
293
|
margin-top: 0;
|
258
294
|
margin-bottom: 10px; }
|
259
295
|
|
260
|
-
blockquote
|
296
|
+
blockquote {
|
261
297
|
margin: 0;
|
262
298
|
padding: 0 15px;
|
263
299
|
color: #777;
|
264
300
|
border-left: 4px solid #ddd; }
|
265
|
-
blockquote > :first-child
|
301
|
+
blockquote > :first-child {
|
266
302
|
margin-top: 0; }
|
267
|
-
blockquote > :last-child
|
303
|
+
blockquote > :last-child {
|
268
304
|
margin-bottom: 0; }
|
269
305
|
|
270
|
-
p, blockquote,
|
306
|
+
p, blockquote, ul, ol, dl, table, pre {
|
271
307
|
margin-top: 0;
|
272
308
|
margin-bottom: 16px; }
|
273
309
|
|
@@ -281,10 +317,6 @@ body {
|
|
281
317
|
.main {
|
282
318
|
padding: 0 20px 100px 20px;
|
283
319
|
min-height: 100vh; }
|
284
|
-
@media print {
|
285
|
-
.main {
|
286
|
-
margin-left: 0;
|
287
|
-
border-width: 0; } }
|
288
320
|
.main:before, .main:after {
|
289
321
|
display: table;
|
290
322
|
content: ""; }
|
@@ -292,6 +324,10 @@ body {
|
|
292
324
|
margin-left: 250px;
|
293
325
|
border: 1px solid #ccc;
|
294
326
|
border-width: 0 1px; }
|
327
|
+
@media print {
|
328
|
+
.main.with-sidebar {
|
329
|
+
margin-left: 0;
|
330
|
+
border-width: 0; } }
|
295
331
|
.main.without-sidebar {
|
296
332
|
max-width: 980px;
|
297
333
|
margin: 0 auto; }
|
data/app/public/css/main.css.map
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"version": 3,
|
3
|
-
"mappings": "AAAA,IAAK;EACH,oBAAoB,EAAE,IAAI;EAC1B,wBAAwB,EAAE,IAAI;EAC9B,KAAK,EAAE,IAAI;EACX,WAAW,EAAE,8HAA8H;EAC3I,SAAS,EAAE,IAAI;EACf,WAAW,EAAE,GAAG;EAChB,SAAS,EAAE,UAAU;;AAGvB,eAAgB;EACd,WAAW,EAAE,MAAM;;AAGrB,sBAAuB;EACrB,UAAU,EAAE,GAAG;EACf,aAAa,EAAE,IAAI;EACnB,WAAW,EAAE,IAAI;EACjB,WAAW,EAAE,GAAG;;AAGlB,EAAG;EACD,MAAM,EAAE,QAAQ;EAChB,cAAc,EAAE,KAAK;EACrB,SAAS,EAAE,MAAM;EACjB,WAAW,EAAE,GAAG;EAChB,aAAa,EAAE,cAAc;;AAG/B,EAAG;EACD,cAAc,EAAE,KAAK;EACrB,SAAS,EAAE,MAAM;EACjB,WAAW,EAAE,KAAK;EAClB,aAAa,EAAE,cAAc;;AAG/B,EAAG;EACD,SAAS,EAAE,KAAK;EAChB,WAAW,EAAE,IAAI;;AAGnB,EAAG;EACD,SAAS,EAAE,MAAM;;AAGnB,EAAG;EACD,SAAS,EAAE,GAAG;;AAGhB,EAAG;EACD,SAAS,EAAE,GAAG;EACd,KAAK,EAAE,IAAI;;AAGb,cAAe;EACb,WAAW,EAAE,oBAAoB;EACjC,SAAS,EAAE,GAAG;;AAGhB,cAAe;EACb,WAAW,EAAE,sDAAsD;;AC5DrE,KAAM;EACJ,cAAc,EAAE,CAAC;EACjB,eAAe,EAAE,QAAQ;EAEzB,OAAO,EAAE,KAAK;EACd,KAAK,EAAE,IAAI;EACX,QAAQ,EAAE,IAAI;EACd,UAAU,EAAE,MAAM;EAClB,UAAU,EAAE,QAAQ;EAEpB,QAAG;IACD,WAAW,EAAE,IAAI;EAGnB,kBAAO;IACL,OAAO,EAAE,QAAQ;IACjB,MAAM,EAAE,cAAc;EAGxB,QAAG;IACD,gBAAgB,EAAE,IAAI;IACtB,UAAU,EAAE,cAAc;EAG5B,sBAAiB;IACf,gBAAgB,EAAE,OAAO;;ACzB7B,CAAE;EACA,4BAA4B,EAAE,OAAO;EAErC,KAAK,EAAE,OAAO;EACd,eAAe,EAAE,IAAI;EAErB,iBAAkB;IAChB,aAAa,EAAE,CAAC;IAChB,eAAe,EAAE,SAAS;EAG5B,aAAc;IACZ,KAAK,EAAE,OAAO;IACd,eAAe,EAAE,IAAI;;ACbzB,MAAO;EACL,UAAU,EAAE,CAAC;EACb,aAAa,EAAE,CAAC;EAEhB,YAAY,EAAE,GAAG;;AAGnB,YAAa;EACX,eAAe,EAAE,WAAW;;AAG9B,sCAAuC;EACrC,eAAe,EAAE,WAAW;;AAG9B,0BAA2B;EACzB,UAAU,EAAE,CAAC;EACb,aAAa,EAAE,CAAC;;AAGlB,EAAG;EACD,WAAW,EAAE,CAAC;;AAGhB,EAAG;EACD,OAAO,EAAE,CAAC;EAEV,KAAG;IACD,OAAO,EAAE,CAAC;IACV,UAAU,EAAE,IAAI;IAChB,SAAS,EAAE,GAAG;IACd,UAAU,EAAE,MAAM;IAClB,WAAW,EAAE,IAAI;EAGnB,KAAG;IACD,OAAO,EAAE,MAAM;IACf,aAAa,EAAE,IAAI;;AAIvB,MAAK;EACH,UAAU,EAAE,IAAI;;AC1ClB,IAAK;EACH,OAAO,EAAE,CAAC;EACV,WAAW,EAAE,KAAK;EAClB,cAAc,EAAE,KAAK;EACrB,MAAM,EAAE,CAAC;EAET,gBAAgB,EAAE,IAAI;EACtB,aAAa,EAAE,GAAG;EAElB,uBAAkB;IAChB,cAAc,EAAE,MAAM;IACtB,OAAO,EAAE,OAAO;;AAIpB,GAAI;
|
4
|
-
"sources": ["../../styles/_typography.scss","../../styles/_table.scss","../../styles/_anchor.scss","../../styles/_list.scss","../../styles/_code.scss","../../styles/_coderay.scss","../../styles/_image.scss","../../styles/_line.scss","../../styles/_keyboard.scss","../../styles/_search.scss","../../styles/_breadcrumbs.scss","../../styles/_nav.scss","../../styles/_general.scss","../../styles/main.scss"],
|
3
|
+
"mappings": "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",
|
4
|
+
"sources": ["../../styles/_typography.scss","../../styles/_table.scss","../../styles/_anchor.scss","../../styles/_list.scss","../../styles/_code.scss","../../styles/_coderay.scss","../../styles/_image.scss","../../styles/_line.scss","../../styles/_keyboard.scss","../../styles/_search.scss","../../styles/_breadcrumbs.scss","../../styles/_nav.scss","../../styles/_icons.scss","../../styles/_general.scss","../../styles/main.scss"],
|
5
5
|
"names": [],
|
6
6
|
"file": "main.css"
|
7
7
|
}
|
Binary file
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<?xml version="1.0" standalone="no"?>
|
2
|
+
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
3
|
+
<svg xmlns="http://www.w3.org/2000/svg">
|
4
|
+
<metadata>Copyright (C) 2018 by original authors @ fontello.com</metadata>
|
5
|
+
<defs>
|
6
|
+
<font id="fontello" horiz-adv-x="1000" >
|
7
|
+
<font-face font-family="fontello" font-weight="400" font-stretch="normal" units-per-em="1000" ascent="850" descent="-150" />
|
8
|
+
<missing-glyph horiz-adv-x="1000" />
|
9
|
+
<glyph glyph-name="search" unicode="" d="M772 78q30-34 6-62l-46-46q-36-32-68 0l-190 190q-74-42-156-42-128 0-223 95t-95 223 90 219 218 91 224-95 96-223q0-88-46-162z m-678 358q0-88 68-156t156-68 151 63 63 153q0 88-68 155t-156 67-151-63-63-151z" horiz-adv-x="789" />
|
10
|
+
|
11
|
+
<glyph glyph-name="home" unicode="" d="M888 336q16-16 11-27t-27-11l-84 0 0-310q0-14-1-21t-8-13-23-6l-204 0 0 310-204 0 0-310-194 0q-28 0-35 10t-7 30l0 310-84 0q-22 0-27 11t11 27l400 402q16 16 38 16t38-16z" horiz-adv-x="900" />
|
12
|
+
</font>
|
13
|
+
</defs>
|
14
|
+
</svg>
|
Binary file
|
Binary file
|
Binary file
|
data/app/styles/_code.scss
CHANGED
@@ -14,6 +14,7 @@ code {
|
|
14
14
|
}
|
15
15
|
|
16
16
|
pre {
|
17
|
+
margin-left: 20px;
|
17
18
|
// margin-top: 0;
|
18
19
|
// margin-bottom: 0;
|
19
20
|
|
@@ -36,15 +37,14 @@ pre {
|
|
36
37
|
}
|
37
38
|
|
38
39
|
code {
|
39
|
-
|
40
|
-
display: inline;
|
40
|
+
display: inline-block;
|
41
41
|
max-width: initial;
|
42
|
-
padding:
|
42
|
+
// padding: 10px;
|
43
43
|
overflow: initial;
|
44
44
|
line-height: inherit;
|
45
45
|
word-wrap: normal;
|
46
|
-
background-color: transparent;
|
47
46
|
border: 0;
|
47
|
+
// background: #eee;
|
48
48
|
}
|
49
49
|
|
50
50
|
code:before,
|
data/app/styles/_coderay.scss
CHANGED
@@ -1,10 +1,23 @@
|
|
1
|
-
td.line-numbers {
|
2
|
-
background: #eee;
|
3
|
-
}
|
4
|
-
|
5
1
|
table.CodeRay {
|
6
2
|
margin-bottom: 0;
|
3
|
+
|
7
4
|
pre {
|
8
5
|
margin-bottom: 0;
|
9
6
|
}
|
7
|
+
|
8
|
+
tr, td {
|
9
|
+
border: 0;
|
10
|
+
pre {
|
11
|
+
margin-left: 0;
|
12
|
+
}
|
13
|
+
}
|
14
|
+
|
15
|
+
td.line-numbers {
|
16
|
+
background: #eee;
|
17
|
+
padding: 4px;
|
18
|
+
}
|
19
|
+
|
20
|
+
td.code {
|
21
|
+
}
|
22
|
+
|
10
23
|
}
|
data/app/styles/_general.scss
CHANGED
@@ -0,0 +1,30 @@
|
|
1
|
+
// Generated with http://fontello.com/ + Entypo font
|
2
|
+
@font-face {
|
3
|
+
font-family: 'fontello';
|
4
|
+
src: url('../fonts/fontello.eot?14105917');
|
5
|
+
src: url('../fonts/fontello.eot?14105917#iefix') format('embedded-opentype'),
|
6
|
+
url('../fonts/fontello.woff2?14105917') format('woff2'),
|
7
|
+
url('../fonts/fontello.woff?14105917') format('woff'),
|
8
|
+
url('../fonts/fontello.ttf?14105917') format('truetype'),
|
9
|
+
url('../fonts/fontello.svg?14105917#fontello') format('svg');
|
10
|
+
font-weight: normal;
|
11
|
+
font-style: normal;
|
12
|
+
}
|
13
|
+
|
14
|
+
[class^="icon-"]:before, [class*=" icon-"]:before {
|
15
|
+
font-family: "fontello";
|
16
|
+
font-style: normal;
|
17
|
+
font-weight: normal;
|
18
|
+
speak: none;
|
19
|
+
|
20
|
+
display: inline-block;
|
21
|
+
text-decoration: inherit;
|
22
|
+
width: 1em;
|
23
|
+
margin-right: .2em;
|
24
|
+
text-align: center;
|
25
|
+
|
26
|
+
font-variant: normal;
|
27
|
+
text-transform: none;
|
28
|
+
}
|
29
|
+
.icon-search:before { content: '\e800'; }
|
30
|
+
.icon-home:before { content: '\e801'; }
|
data/app/styles/_manifest.scss
CHANGED
data/app/styles/_nav.scss
CHANGED
@@ -2,14 +2,18 @@ nav {
|
|
2
2
|
@media print {
|
3
3
|
display: none;
|
4
4
|
}
|
5
|
+
|
6
|
+
.icon-bar {
|
7
|
+
border-bottom: 1px dotted #ddd;
|
8
|
+
}
|
9
|
+
|
5
10
|
background: #eee;
|
6
11
|
height: 100vh;
|
7
12
|
width: 250px;
|
8
13
|
overflow-y: auto;
|
9
14
|
position: fixed;
|
10
|
-
padding: 10px 0;
|
11
15
|
border-right: 1px solid #eee;
|
12
|
-
a, span {
|
16
|
+
a.document, span.document, .caption {
|
13
17
|
border-bottom: 1px dotted #ddd;
|
14
18
|
&:hover {
|
15
19
|
background: #e4e4e4;
|
@@ -17,6 +21,21 @@ nav {
|
|
17
21
|
display: block;
|
18
22
|
padding: 3px 20px 3px 30px;
|
19
23
|
}
|
24
|
+
|
25
|
+
a.icon {
|
26
|
+
display: inline-block;
|
27
|
+
font-size: 1.5em;
|
28
|
+
width: 50%;
|
29
|
+
padding: 3px 20px 3px 30px;
|
30
|
+
&.wide {
|
31
|
+
width: 100%
|
32
|
+
}
|
33
|
+
&:hover {
|
34
|
+
background: #e4e4e4;
|
35
|
+
}
|
36
|
+
}
|
37
|
+
|
38
|
+
|
20
39
|
&:after {
|
21
40
|
content: "";
|
22
41
|
height: 90px;
|
data/app/styles/_search.scss
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
.search-form {
|
2
2
|
margin-bottom: 20px;
|
3
|
+
margin-top: 20px;
|
3
4
|
}
|
4
5
|
|
5
6
|
.search-field {
|
@@ -8,6 +9,7 @@
|
|
8
9
|
font-size: 1.5em;
|
9
10
|
width: 50%;
|
10
11
|
min-width: 200px;
|
12
|
+
width: 100%;
|
11
13
|
|
12
14
|
border: #ccc 1px solid;
|
13
15
|
border-radius: 3px;
|
@@ -16,9 +18,3 @@
|
|
16
18
|
border-color: #4078c0;
|
17
19
|
}
|
18
20
|
}
|
19
|
-
|
20
|
-
.search-excerpt {
|
21
|
-
@extend blockquote;
|
22
|
-
white-space: pre-wrap;
|
23
|
-
}
|
24
|
-
|
data/app/styles/main.scss
CHANGED
@@ -6,10 +6,6 @@ body {
|
|
6
6
|
}
|
7
7
|
|
8
8
|
.main {
|
9
|
-
@media print {
|
10
|
-
margin-left: 0;
|
11
|
-
border-width: 0;
|
12
|
-
}
|
13
9
|
padding: 0 20px 100px 20px;
|
14
10
|
min-height: 100vh;
|
15
11
|
|
@@ -26,6 +22,11 @@ body {
|
|
26
22
|
margin-left: 250px;
|
27
23
|
border:1px solid #ccc;
|
28
24
|
border-width: 0 1px;
|
25
|
+
@media print {
|
26
|
+
margin-left: 0;
|
27
|
+
border-width: 0;
|
28
|
+
}
|
29
|
+
|
29
30
|
}
|
30
31
|
|
31
32
|
&.without-sidebar {
|
data/app/views/_index_nav.slim
CHANGED
data/app/views/_nav.slim
CHANGED
@@ -1,11 +1,15 @@
|
|
1
1
|
nav
|
2
|
-
|
3
|
-
|
4
|
-
|
2
|
+
.icon-bar
|
3
|
+
a.icon href="/" accesskey='h' class=('wide' unless nav.with_search?)
|
4
|
+
i.icon-home
|
5
|
+
|
6
|
+
- if nav.with_search?
|
7
|
+
a.icon href="/_search" accesskey='s' style='text-align:right'
|
8
|
+
i.icon-search
|
5
9
|
|
6
10
|
- if nav.caption
|
7
|
-
|
11
|
+
.caption = "#{nav.caption}:"
|
8
12
|
|
9
13
|
- nav.links.each do |item|
|
10
|
-
a href="#{item.href}" class=('strong' if item.type == :dir)
|
14
|
+
a.document href="#{item.href}" class=('strong' if item.type == :dir)
|
11
15
|
= item.label
|
data/app/views/document.slim
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
.main class=(config.sidebar ? 'with-sidebar' : 'without-sidebar')
|
4
4
|
== slim :_breadcrumbs, locals: { breadcrumbs: breadcrumbs }
|
5
|
-
==
|
5
|
+
== content
|
6
6
|
|
7
7
|
- if type != :file and config.auto_nav
|
8
8
|
- unless type == :empty
|
data/app/views/search.slim
CHANGED
@@ -1,10 +1,8 @@
|
|
1
1
|
== slim :_nav, locals: { nav: nav } if config.sidebar
|
2
2
|
|
3
3
|
.main class=(config.sidebar ? 'with-sidebar' : 'without-sidebar')
|
4
|
-
h1 Search
|
5
|
-
|
6
4
|
form.search-form action="/_search" method="get"
|
7
|
-
input.search-field type="text" name="q" value="#{params[:q]}" placeholder="
|
5
|
+
input.search-field type="text" name="q" value="#{params[:q]}" placeholder="Search" autofocus=true
|
8
6
|
input type="submit" value="Search" style='display:none'
|
9
7
|
|
10
8
|
hr
|
@@ -16,10 +14,11 @@
|
|
16
14
|
= ". "
|
17
15
|
a href="#{result[:file]}" = result[:label]
|
18
16
|
|
19
|
-
|
20
|
-
- result[:highlights]
|
21
|
-
|
22
|
-
|
23
|
-
|
17
|
+
ul
|
18
|
+
- if result[:highlights]
|
19
|
+
- result[:highlights].each do |highlight|
|
20
|
+
li.search-excerpt == highlight
|
21
|
+
- else
|
22
|
+
li.search-excerpt.quiet No excerpt
|
24
23
|
|
25
24
|
|
data/lib/madness.rb
CHANGED
@@ -13,10 +13,12 @@ require 'sass/plugin/rack'
|
|
13
13
|
require 'sinatra/base'
|
14
14
|
require 'sinatra/reloader'
|
15
15
|
require 'slim'
|
16
|
+
require 'naturally'
|
16
17
|
|
17
18
|
require 'byebug' if ENV['BYEBUG']
|
18
19
|
|
19
20
|
require 'madness/refinements/string_refinements'
|
21
|
+
require 'madness/refinements/array_refinements'
|
20
22
|
|
21
23
|
require 'madness/server_helper'
|
22
24
|
|
data/lib/madness/breadcrumbs.rb
CHANGED
@@ -3,6 +3,8 @@ module Madness
|
|
3
3
|
# Handle breadcumbs generation by converting a path to an array
|
4
4
|
# of links
|
5
5
|
class Breadcrumbs
|
6
|
+
using StringRefinements
|
7
|
+
|
6
8
|
attr_reader :path
|
7
9
|
|
8
10
|
def initialize(path)
|
@@ -25,7 +27,7 @@ module Madness
|
|
25
27
|
def breadcrumbs_maker(partial_path)
|
26
28
|
parent, basename = File.split partial_path
|
27
29
|
item = OpenStruct.new({
|
28
|
-
label: basename.
|
30
|
+
label: basename.to_label,
|
29
31
|
href: "/#{partial_path}" }
|
30
32
|
)
|
31
33
|
result = [item]
|
data/lib/madness/directory.rb
CHANGED
@@ -2,6 +2,7 @@ module Madness
|
|
2
2
|
# Represents a directory with markdown file sand subflders.
|
3
3
|
class Directory
|
4
4
|
include ServerHelper
|
5
|
+
using ArrayRefinements
|
5
6
|
|
6
7
|
attr_reader :dir
|
7
8
|
|
@@ -21,7 +22,7 @@ module Madness
|
|
21
22
|
basename = File.basename(f)
|
22
23
|
basename == 'README.md' or basename == 'index.md'
|
23
24
|
end
|
24
|
-
result.
|
25
|
+
result.nat_sort.map { |path| Item.new path, :file }
|
25
26
|
end
|
26
27
|
|
27
28
|
def dirs
|
@@ -30,7 +31,7 @@ module Madness
|
|
30
31
|
basename = File.basename(f)
|
31
32
|
basename =~ /^[a-z_\-0-9]+$/
|
32
33
|
end
|
33
|
-
result.
|
34
|
+
result.nat_sort.map { |path| Item.new path, :dir }
|
34
35
|
end
|
35
36
|
end
|
36
37
|
end
|
data/lib/madness/document.rb
CHANGED
@@ -31,6 +31,12 @@ module Madness
|
|
31
31
|
@dir
|
32
32
|
end
|
33
33
|
|
34
|
+
# Return the path to the document directory
|
35
|
+
def title
|
36
|
+
set_base_attributes unless @title
|
37
|
+
@title
|
38
|
+
end
|
39
|
+
|
34
40
|
# Return the HTML for that document
|
35
41
|
def content
|
36
42
|
@content ||= content!
|
@@ -38,17 +44,7 @@ module Madness
|
|
38
44
|
|
39
45
|
# Return the HTML for that document, force re-read.
|
40
46
|
def content!
|
41
|
-
type == :empty ?
|
42
|
-
end
|
43
|
-
|
44
|
-
# Return a reasonable HTML title for the file or directory
|
45
|
-
def title
|
46
|
-
if type == :readme
|
47
|
-
result = File.basename File.dirname(file)
|
48
|
-
else
|
49
|
-
result = File.basename(file,'.md')
|
50
|
-
end
|
51
|
-
result.tr '-', ' '
|
47
|
+
type == :empty ? "<h1>#{title}</h1>" : markdown_to_html
|
52
48
|
end
|
53
49
|
|
54
50
|
private
|
@@ -62,10 +58,13 @@ module Madness
|
|
62
58
|
@dir = docroot
|
63
59
|
@type = :empty
|
64
60
|
@file = ''
|
61
|
+
@title = 'Index'
|
65
62
|
|
66
63
|
if File.directory? base
|
64
|
+
@title = File.basename(path).to_label unless path.empty?
|
67
65
|
set_base_attributes_for_directory
|
68
66
|
elsif File.exist? "#{base}.md"
|
67
|
+
@title = File.basename(base).to_label
|
69
68
|
@file = "#{base}.md"
|
70
69
|
@dir = File.dirname file
|
71
70
|
@type = :file
|
data/lib/madness/item.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
module Madness
|
2
2
|
class Item
|
3
3
|
include ServerHelper
|
4
|
+
using StringRefinements
|
4
5
|
|
5
6
|
attr_reader :path, :type
|
6
7
|
|
@@ -9,7 +10,7 @@ module Madness
|
|
9
10
|
end
|
10
11
|
|
11
12
|
def label
|
12
|
-
@label ||=
|
13
|
+
@label ||= label!
|
13
14
|
end
|
14
15
|
|
15
16
|
def href
|
@@ -26,6 +27,10 @@ module Madness
|
|
26
27
|
|
27
28
|
private
|
28
29
|
|
30
|
+
def label!
|
31
|
+
File.basename(path_without_extension).to_label
|
32
|
+
end
|
33
|
+
|
29
34
|
def path_without_extension
|
30
35
|
@path_without_extension ||= path.sub(/\.md$/, '')
|
31
36
|
end
|
data/lib/madness/navigation.rb
CHANGED
@@ -2,6 +2,7 @@ module Madness
|
|
2
2
|
# Handle the navigation links for a given directory
|
3
3
|
class Navigation
|
4
4
|
include ServerHelper
|
5
|
+
using StringRefinements
|
5
6
|
|
6
7
|
attr_reader :dir
|
7
8
|
|
@@ -14,7 +15,7 @@ module Madness
|
|
14
15
|
end
|
15
16
|
|
16
17
|
def caption
|
17
|
-
@caption ||= (dir == docroot ? "Index" : File.basename(dir))
|
18
|
+
@caption ||= (dir == docroot ? "Index" : File.basename(dir).to_label)
|
18
19
|
end
|
19
20
|
|
20
21
|
def with_search?
|
@@ -4,6 +4,16 @@ module Madness
|
|
4
4
|
def to_slug
|
5
5
|
downcase.strip.gsub(' ', '-').gsub(/[^\w-]/, '')
|
6
6
|
end
|
7
|
+
|
8
|
+
# This is here so we can have one place that defines how to convert
|
9
|
+
# a string (usually a filename without .md extension, or a folder name)
|
10
|
+
# to a label.
|
11
|
+
# It is used by different navigation elements in madness, and ucrrently
|
12
|
+
# just removes any numbers followed by a dot at the beginning of the
|
13
|
+
# string, in order to allow "The Invisible Sorting Hand".
|
14
|
+
def to_label
|
15
|
+
gsub(/^\d+\.\s+/, '')
|
16
|
+
end
|
7
17
|
end
|
8
18
|
end
|
9
19
|
end
|
data/lib/madness/search.rb
CHANGED
@@ -4,6 +4,7 @@ module Madness
|
|
4
4
|
include ServerHelper
|
5
5
|
include Ferret
|
6
6
|
include Ferret::Index
|
7
|
+
using StringRefinements
|
7
8
|
|
8
9
|
def initialize(path=nil)
|
9
10
|
@path = path || docroot
|
@@ -19,7 +20,7 @@ module Madness
|
|
19
20
|
index = Index.new path: index_dir, create: true
|
20
21
|
|
21
22
|
Dir["#{@path}/**/*.md"].each do |file|
|
22
|
-
index << { file: file, content:
|
23
|
+
index << { file: file, content: searchable_content(file) }
|
23
24
|
end
|
24
25
|
|
25
26
|
index.optimize()
|
@@ -33,15 +34,13 @@ module Madness
|
|
33
34
|
index.search_each(query, limit: 20) do |doc_id, score|
|
34
35
|
filename = index[doc_id][:file].sub("#{@path}/", '')[0...-3]
|
35
36
|
highlights = index.highlight "content:(#{query.tr(' ',' OR ')}) ", doc_id, field: :content,
|
36
|
-
pre_tag: "", post_tag: "",
|
37
|
+
pre_tag: "<strong>", post_tag: "</strong>",
|
37
38
|
excerpt_length: 100
|
38
39
|
|
39
|
-
highlights.map! { |excerpt| CGI.escapeHTML excerpt } if highlights
|
40
|
-
|
41
40
|
results << {
|
42
41
|
score: score,
|
43
42
|
file: filename,
|
44
|
-
label: filename
|
43
|
+
label: file_label(filename),
|
45
44
|
highlights: highlights
|
46
45
|
}
|
47
46
|
end
|
@@ -57,7 +56,21 @@ module Madness
|
|
57
56
|
|
58
57
|
def index_dir
|
59
58
|
"#{@path}/_index"
|
60
|
-
end
|
59
|
+
end
|
60
|
+
|
61
|
+
private
|
61
62
|
|
63
|
+
# This is poor-mans markdown strip.
|
64
|
+
# Convert to HTML, strip tags and return plain text suitable to act as
|
65
|
+
# the content for the search index.
|
66
|
+
def searchable_content(file)
|
67
|
+
content = File.read file
|
68
|
+
content = CommonMarker.render_html content
|
69
|
+
content.gsub(/<\/?[^>]*>/, "").gsub("\n", " ")
|
70
|
+
end
|
71
|
+
|
72
|
+
def file_label(filename)
|
73
|
+
filename.split('/').map { |i| i.to_label }.join(' / ')
|
74
|
+
end
|
62
75
|
end
|
63
76
|
end
|
data/lib/madness/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: madness
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Danny Ben Shitrit
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-06-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sass
|
@@ -178,6 +178,20 @@ dependencies:
|
|
178
178
|
- - "~>"
|
179
179
|
- !ruby/object:Gem::Version
|
180
180
|
version: '2.1'
|
181
|
+
- !ruby/object:Gem::Dependency
|
182
|
+
name: naturally
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - "~>"
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: '2.1'
|
188
|
+
type: :runtime
|
189
|
+
prerelease: false
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - "~>"
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '2.1'
|
181
195
|
- !ruby/object:Gem::Dependency
|
182
196
|
name: byebug
|
183
197
|
requirement: !ruby/object:Gem::Requirement
|
@@ -343,11 +357,17 @@ files:
|
|
343
357
|
- app/public/css/main.css
|
344
358
|
- app/public/css/main.css.map
|
345
359
|
- app/public/favicon.ico
|
360
|
+
- app/public/fonts/fontello.eot
|
361
|
+
- app/public/fonts/fontello.svg
|
362
|
+
- app/public/fonts/fontello.ttf
|
363
|
+
- app/public/fonts/fontello.woff
|
364
|
+
- app/public/fonts/fontello.woff2
|
346
365
|
- app/styles/_anchor.scss
|
347
366
|
- app/styles/_breadcrumbs.scss
|
348
367
|
- app/styles/_code.scss
|
349
368
|
- app/styles/_coderay.scss
|
350
369
|
- app/styles/_general.scss
|
370
|
+
- app/styles/_icons.scss
|
351
371
|
- app/styles/_image.scss
|
352
372
|
- app/styles/_keyboard.scss
|
353
373
|
- app/styles/_line.scss
|
@@ -359,7 +379,6 @@ files:
|
|
359
379
|
- app/styles/_typography.scss
|
360
380
|
- app/styles/main.scss
|
361
381
|
- app/views/_breadcrumbs.slim
|
362
|
-
- app/views/_content.slim
|
363
382
|
- app/views/_index_nav.slim
|
364
383
|
- app/views/_nav.slim
|
365
384
|
- app/views/document.slim
|
@@ -374,6 +393,7 @@ files:
|
|
374
393
|
- lib/madness/document.rb
|
375
394
|
- lib/madness/item.rb
|
376
395
|
- lib/madness/navigation.rb
|
396
|
+
- lib/madness/refinements/array_refinements.rb
|
377
397
|
- lib/madness/refinements/string_refinements.rb
|
378
398
|
- lib/madness/search.rb
|
379
399
|
- lib/madness/server.rb
|