sdoc 2.0.3 → 2.3.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/.github/workflows/test.yml +38 -0
- data/.gitignore +1 -0
- data/CHANGELOG.md +42 -6
- data/Gemfile +8 -2
- data/README.md +14 -4
- data/Rakefile +54 -2
- data/config.ru +3 -3
- data/lib/rdoc/generator/template/rails/_context.rhtml +16 -8
- data/lib/rdoc/generator/template/rails/_head.rhtml +14 -39
- data/lib/rdoc/generator/template/rails/_panel.rhtml +6 -3
- data/lib/rdoc/generator/template/rails/class.rhtml +5 -2
- data/lib/rdoc/generator/template/rails/file.rhtml +5 -2
- data/lib/rdoc/generator/template/rails/index.rhtml +7 -7
- data/lib/rdoc/generator/template/rails/resources/css/main.css +33 -6
- data/lib/rdoc/generator/template/rails/resources/css/panel.css +123 -6
- data/lib/rdoc/generator/template/rails/resources/css/reset.css +0 -1
- data/lib/rdoc/generator/template/rails/resources/js/main.js +17 -0
- data/lib/rdoc/generator/template/rails/resources/js/searchdoc.js +14 -17
- data/lib/rdoc/generator/template/rails/search_index.rhtml +6 -2
- data/lib/rdoc/generator/template/sdoc/_context.rhtml +11 -3
- data/lib/rdoc/generator/template/sdoc/class.rhtml +5 -6
- data/lib/rdoc/generator/template/sdoc/file.rhtml +5 -6
- data/lib/rdoc/generator/template/sdoc/index.rhtml +3 -4
- data/lib/rdoc/generator/template/sdoc/resources/css/reset.css +0 -1
- data/lib/rdoc/generator/template/sdoc/resources/js/searchdoc.js +0 -10
- data/lib/rdoc/generator/template/sdoc/resources/panel/index.html +2 -1
- data/lib/rdoc/generator/template/sdoc/search_index.rhtml +6 -2
- data/lib/sdoc/generator.rb +3 -3
- data/lib/sdoc/merge.rb +5 -28
- data/lib/sdoc/templatable.rb +1 -1
- data/lib/sdoc/version.rb +1 -1
- data/netlify.toml +39 -0
- data/sdoc.gemspec +1 -3
- data/spec/helpers_spec.rb +2 -2
- data/spec/rdoc_generator_spec.rb +9 -9
- metadata +13 -21
- data/.travis.yml +0 -31
- data/lib/rdoc/generator/template/merge/index.rhtml +0 -12
@@ -1,18 +1,119 @@
|
|
1
1
|
/* Panel (begin) */
|
2
|
+
.panel_checkbox, .panel_mobile_button, .panel_mobile_button_close
|
3
|
+
{
|
4
|
+
display: none;
|
5
|
+
}
|
6
|
+
|
7
|
+
@media (max-width: 39.99em) {
|
8
|
+
.panel_mobile_button {
|
9
|
+
display: block;
|
10
|
+
height: 40px;
|
11
|
+
position: sticky;
|
12
|
+
top: 0;
|
13
|
+
background: #000;
|
14
|
+
color: #fff;
|
15
|
+
padding-right: 10px;
|
16
|
+
text-align: right;
|
17
|
+
line-height: 40px;
|
18
|
+
cursor: pointer;
|
19
|
+
z-index: 2;
|
20
|
+
}
|
21
|
+
.panel_checkbox:checked ~ .panel_mobile_button {
|
22
|
+
}
|
23
|
+
|
24
|
+
.panel_checkbox:checked ~ .panel .panel_mobile_button_close {
|
25
|
+
display: block;
|
26
|
+
height: 40px;
|
27
|
+
position: absolute;
|
28
|
+
top: 0;
|
29
|
+
right: 10px;
|
30
|
+
z-index: 3000;
|
31
|
+
text-align: right;
|
32
|
+
line-height: 40px;
|
33
|
+
cursor: pointer;
|
34
|
+
}
|
35
|
+
}
|
36
|
+
|
37
|
+
.panel_mobile_button span {
|
38
|
+
position: relative;
|
39
|
+
display: inline-block;
|
40
|
+
width: 1em;
|
41
|
+
height: 0.55em;
|
42
|
+
margin-right: 0.3em;
|
43
|
+
border-top: 0.1em solid #fff;
|
44
|
+
border-bottom: 0.1em solid #fff;
|
45
|
+
}
|
46
|
+
|
47
|
+
.panel_mobile_button span:before {
|
48
|
+
content: "";
|
49
|
+
position: absolute;
|
50
|
+
top: 0.25em;
|
51
|
+
left: 0px;
|
52
|
+
width: 100%;
|
53
|
+
border-top: 0.1em solid #fff;
|
54
|
+
}
|
55
|
+
|
56
|
+
.panel_mobile_button_close span {
|
57
|
+
position: relative;
|
58
|
+
display: inline-block;
|
59
|
+
width: 1em;
|
60
|
+
height: 0.625em;
|
61
|
+
}
|
62
|
+
|
63
|
+
.panel_mobile_button_close span:before, .panel_mobile_button_close span:after {
|
64
|
+
content: "";
|
65
|
+
position: absolute;
|
66
|
+
top: 0.2em;
|
67
|
+
left: 0px;
|
68
|
+
width: 100%;
|
69
|
+
border-top: 0.1em solid #000;
|
70
|
+
}
|
71
|
+
|
72
|
+
.panel_mobile_button_close span:before {
|
73
|
+
transform: rotate(45deg);
|
74
|
+
}
|
75
|
+
|
76
|
+
.panel_mobile_button_close span:after {
|
77
|
+
transform: rotate(-45deg);
|
78
|
+
}
|
79
|
+
|
2
80
|
.panel
|
3
81
|
{
|
4
82
|
position: fixed;
|
83
|
+
top: 0;
|
5
84
|
width: 300px;
|
6
85
|
height: 100%;
|
7
86
|
background: #FFF;
|
8
|
-
z-index:
|
87
|
+
z-index: 10;
|
9
88
|
font-family: "Helvetica Neue", "Arial", sans-serif;
|
10
89
|
overflow-x: hidden;
|
11
90
|
border-right: 1px #ccc solid;
|
12
91
|
line-height: 1;
|
13
92
|
}
|
14
93
|
|
15
|
-
.
|
94
|
+
@media (max-width: 39.99em) {
|
95
|
+
.panel
|
96
|
+
{
|
97
|
+
transition: left 0s ease-in-out;
|
98
|
+
left: -100%;
|
99
|
+
width: 100%;
|
100
|
+
bottom: 0;
|
101
|
+
visibility: hidden;
|
102
|
+
}
|
103
|
+
|
104
|
+
.panel_checkbox:checked ~ .panel {
|
105
|
+
left: 0%;
|
106
|
+
transition: left 0.3s ease-in-out;
|
107
|
+
visibility: visible;
|
108
|
+
}
|
109
|
+
|
110
|
+
.panel_checkbox:checked ~ #bodyContent {
|
111
|
+
visibility: hidden;
|
112
|
+
display: none;
|
113
|
+
}
|
114
|
+
}
|
115
|
+
|
116
|
+
.panel_tree .result,
|
16
117
|
.panel_results .tree
|
17
118
|
{
|
18
119
|
display: none;
|
@@ -27,11 +128,19 @@
|
|
27
128
|
height: 40px;
|
28
129
|
width: 300px;
|
29
130
|
position: fixed;
|
131
|
+
position: sticky;
|
30
132
|
left: 0; top: 0;
|
31
133
|
z-index: 300;
|
32
134
|
overflow-x: hidden;
|
33
135
|
}
|
34
136
|
|
137
|
+
@media (max-width: 39.99em) {
|
138
|
+
.panel .header
|
139
|
+
{
|
140
|
+
width: 100%;
|
141
|
+
}
|
142
|
+
}
|
143
|
+
|
35
144
|
.panel .header input
|
36
145
|
{
|
37
146
|
border: 0;
|
@@ -46,6 +155,15 @@
|
|
46
155
|
outline: none;
|
47
156
|
}
|
48
157
|
|
158
|
+
@media (max-width: 39.99em) {
|
159
|
+
.panel .header input
|
160
|
+
{
|
161
|
+
width: 70%;
|
162
|
+
width: calc(100% - 100px);
|
163
|
+
font-size: 16px;
|
164
|
+
}
|
165
|
+
}
|
166
|
+
|
49
167
|
/* Header with search box (end) */
|
50
168
|
|
51
169
|
|
@@ -54,10 +172,10 @@
|
|
54
172
|
{
|
55
173
|
position: relative;
|
56
174
|
bottom: 0;
|
57
|
-
top:
|
175
|
+
top: 0;
|
58
176
|
left: 0;
|
59
177
|
width: 100%;
|
60
|
-
overflow-y:
|
178
|
+
overflow-y: auto;
|
61
179
|
overflow-x: hidden;
|
62
180
|
z-index: 2;
|
63
181
|
}
|
@@ -220,11 +338,10 @@
|
|
220
338
|
{
|
221
339
|
background: white;
|
222
340
|
position: relative;
|
223
|
-
top: 40px;
|
224
341
|
bottom: 0;
|
225
342
|
left: 0;
|
226
343
|
width: 100%;
|
227
|
-
overflow-y:
|
344
|
+
overflow-y: auto;
|
228
345
|
overflow-x: hidden;
|
229
346
|
z-index: 30;
|
230
347
|
}
|
@@ -27,6 +27,23 @@ document.addEventListener("turbolinks:load", function() {
|
|
27
27
|
});
|
28
28
|
});
|
29
29
|
|
30
|
+
document.addEventListener("turbolinks:load", function() {
|
31
|
+
// Only initialize panel if not yet initialized
|
32
|
+
if(!$('#panel .tree ul li').length) {
|
33
|
+
$('#links').hide();
|
34
|
+
var panel = new Searchdoc.Panel($('#panel'), search_data, tree);
|
35
|
+
var s = window.location.search.match(/\?q=([^&]+)/);
|
36
|
+
if (s) {
|
37
|
+
s = decodeURIComponent(s[1]).replace(/\+/g, ' ');
|
38
|
+
if (s.length > 0) {
|
39
|
+
$('#search').val(s);
|
40
|
+
panel.search(s, true);
|
41
|
+
}
|
42
|
+
}
|
43
|
+
panel.toggle(JSON.parse($('meta[name="data-tree-keys"]').attr("content")));
|
44
|
+
}
|
45
|
+
});
|
46
|
+
|
30
47
|
// Keep scroll position for panel
|
31
48
|
(function() {
|
32
49
|
var scrollTop = 0;
|
@@ -32,10 +32,6 @@ Searchdoc.Navigation = new function() {
|
|
32
32
|
case 74: // j
|
33
33
|
case 75: // k
|
34
34
|
case 76: // l
|
35
|
-
case 67: // c - dvorak
|
36
|
-
case 72: // h
|
37
|
-
case 84: // t
|
38
|
-
case 78: // n
|
39
35
|
this.clearMoveTimeout();
|
40
36
|
break;
|
41
37
|
}
|
@@ -43,15 +39,14 @@ Searchdoc.Navigation = new function() {
|
|
43
39
|
|
44
40
|
this.onkeydown = function(e) {
|
45
41
|
if (!this.navigationActive) return;
|
42
|
+
|
46
43
|
switch (e.keyCode) {
|
47
44
|
case 37: //Event.KEY_LEFT:
|
48
45
|
case 74: // j (qwerty)
|
49
|
-
case 72: // h (dvorak)
|
50
46
|
if (this.moveLeft()) e.preventDefault();
|
51
47
|
break;
|
52
48
|
case 38: //Event.KEY_UP:
|
53
49
|
case 73: // i (qwerty)
|
54
|
-
case 67: // c (dvorak)
|
55
50
|
if (e.keyCode == 38 || e.ctrlKey) {
|
56
51
|
if (this.moveUp()) e.preventDefault();
|
57
52
|
this.startMoveTimeout(false);
|
@@ -59,28 +54,31 @@ Searchdoc.Navigation = new function() {
|
|
59
54
|
break;
|
60
55
|
case 39: //Event.KEY_RIGHT:
|
61
56
|
case 76: // l (qwerty)
|
62
|
-
case 78: // n (dvorak)
|
63
57
|
if (this.moveRight()) e.preventDefault();
|
64
58
|
break;
|
65
59
|
case 40: //Event.KEY_DOWN:
|
66
60
|
case 75: // k (qwerty)
|
67
|
-
case 84: // t (dvorak)
|
68
61
|
if (e.keyCode == 40 || e.ctrlKey) {
|
69
62
|
if (this.moveDown()) e.preventDefault();
|
70
63
|
this.startMoveTimeout(true);
|
71
64
|
}
|
72
65
|
break;
|
73
|
-
case 9: //Event.KEY_TAB:
|
74
66
|
case 13: //Event.KEY_RETURN:
|
67
|
+
if(e.target.dataset["turbolinks"]) { break; }
|
75
68
|
if (this.$current) this.select(this.$current);
|
76
69
|
break;
|
77
|
-
case 83: // s (qwerty)
|
78
|
-
case 79: // o (dvorak)
|
70
|
+
case 83: // s (qwerty) - Focuses search
|
79
71
|
if (e.ctrlKey) {
|
80
72
|
$('#search').focus();
|
81
73
|
e.preventDefault();
|
82
74
|
}
|
83
75
|
break;
|
76
|
+
case 191: // / - Search by pressing "/"
|
77
|
+
if( !$('#search').is(":focus") ) {
|
78
|
+
$('#search').focus();
|
79
|
+
e.preventDefault();
|
80
|
+
}
|
81
|
+
break;
|
84
82
|
}
|
85
83
|
if (e.ctrlKey && e.shiftKey) this.select(this.$current);
|
86
84
|
};
|
@@ -137,11 +135,10 @@ function scrollIntoView(element, view) {
|
|
137
135
|
|
138
136
|
// panel.js -----------------------------------------------
|
139
137
|
|
140
|
-
Searchdoc.Panel = function(element, data, tree
|
138
|
+
Searchdoc.Panel = function(element, data, tree) {
|
141
139
|
this.$element = $(element);
|
142
140
|
this.$input = $('input', element).eq(0);
|
143
141
|
this.$result = $('.result ul', element).eq(0);
|
144
|
-
this.prefix = prefix;
|
145
142
|
this.$current = null;
|
146
143
|
this.$view = this.$result.parent();
|
147
144
|
this.data = data;
|
@@ -234,12 +231,13 @@ Searchdoc.Panel.prototype = $.extend({}, Searchdoc.Navigation, new function() {
|
|
234
231
|
};
|
235
232
|
|
236
233
|
this.open = function(src) {
|
237
|
-
|
234
|
+
var prefix = $('meta[name="data-rel-prefix"]').attr("content");
|
235
|
+
Turbolinks.visit(prefix + src);
|
238
236
|
if (this.highlight) this.highlight(src);
|
239
237
|
};
|
240
238
|
|
241
239
|
this.select = function() {
|
242
|
-
this.open(this.$current.
|
240
|
+
this.open(this.$current.attr('data-path'));
|
243
241
|
};
|
244
242
|
|
245
243
|
this.move = function(isDown) {
|
@@ -268,7 +266,7 @@ Searchdoc.Panel.prototype = $.extend({}, Searchdoc.Navigation, new function() {
|
|
268
266
|
html += hlt(result.namespace) + '</p>';
|
269
267
|
if (result.snippet) html += '<p class="snippet">' + stripHTML(result.snippet) + '</p>';
|
270
268
|
li.innerHTML = html;
|
271
|
-
|
269
|
+
$(li).attr('data-path', result.path)
|
272
270
|
return li;
|
273
271
|
}
|
274
272
|
|
@@ -481,4 +479,3 @@ Searchdoc.Tree.prototype = $.extend({}, Searchdoc.Navigation, new function() {
|
|
481
479
|
return 5 + 18 * level + 'px';
|
482
480
|
}
|
483
481
|
});
|
484
|
-
|
@@ -1,5 +1,9 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html lang="en">
|
3
|
+
<head>
|
4
|
+
<title>File Index</title>
|
5
|
+
<meta name="viewport" content="width=device-width,initial-scale=1">
|
6
|
+
</head>
|
3
7
|
<body>
|
4
8
|
<% @files.each do |file| %>
|
5
9
|
<a href="../<%= file.path %>"><%= file.relative_name %></a>
|
@@ -195,12 +195,20 @@
|
|
195
195
|
else
|
196
196
|
false
|
197
197
|
end
|
198
|
+
|
199
|
+
ghost = method.instance_of?(RDoc::GhostMethod)
|
198
200
|
%>
|
199
201
|
<p class="source-link">
|
200
|
-
Source:
|
201
|
-
|
202
|
+
<% if !ghost || github %> Source: <% end %>
|
203
|
+
|
204
|
+
<% unless ghost %>
|
205
|
+
<a href="javascript:toggleSource('<%= method.aref %>_source')" id="l_<%= method.aref %>_source">show</a>
|
206
|
+
<% end %>
|
207
|
+
|
208
|
+
<% if !ghost && github %> | <% end %>
|
209
|
+
|
202
210
|
<% if github %>
|
203
|
-
|
211
|
+
<a href="<%= "#{github}#L#{line}" %>" target="_blank" class="github_url">on GitHub</a>
|
204
212
|
<% end %>
|
205
213
|
</p>
|
206
214
|
<div id="<%= method.aref %>_source" class="dyn-source">
|
@@ -1,10 +1,9 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
4
|
-
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html lang="en">
|
5
3
|
<head>
|
6
4
|
<title><%= h klass.full_name %></title>
|
7
5
|
<meta http-equiv="Content-Type" content="text/html; charset=<%= @options.charset %>" />
|
6
|
+
<meta name="viewport" content="width=device-width,initial-scale=1">
|
8
7
|
<%= include_template '_head.rhtml', {:rel_prefix => rel_prefix} %>
|
9
8
|
|
10
9
|
<meta property="og:title" value="<%= klass.full_name %>">
|
@@ -45,8 +44,8 @@
|
|
45
44
|
<% end %>
|
46
45
|
</ul>
|
47
46
|
</div>
|
48
|
-
<
|
47
|
+
<main id="bodyContent">
|
49
48
|
<%= include_template '_context.rhtml', {:context => klass, :rel_prefix => rel_prefix} %>
|
50
|
-
</
|
49
|
+
</main>
|
51
50
|
</body>
|
52
51
|
</html>
|
@@ -1,10 +1,9 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
4
|
-
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html lang="en">
|
5
3
|
<head>
|
6
4
|
<title><%= h file.name %></title>
|
7
5
|
<meta http-equiv="Content-Type" content="text/html; charset=<%= @options.charset %>" />
|
6
|
+
<meta name="viewport" content="width=device-width,initial-scale=1">
|
8
7
|
<%= include_template '_head.rhtml', {:rel_prefix => rel_prefix} %>
|
9
8
|
</head>
|
10
9
|
|
@@ -22,8 +21,8 @@
|
|
22
21
|
</ul>
|
23
22
|
</div>
|
24
23
|
|
25
|
-
<
|
24
|
+
<main id="bodyContent">
|
26
25
|
<%= include_template '_context.rhtml', {:context => file, :rel_prefix => rel_prefix} %>
|
27
|
-
</
|
26
|
+
</main>
|
28
27
|
</body>
|
29
28
|
</html>
|
@@ -1,10 +1,9 @@
|
|
1
|
-
<!DOCTYPE html
|
2
|
-
|
3
|
-
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
|
4
|
-
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html lang="en">
|
5
3
|
<head>
|
6
4
|
<meta http-equiv="Content-Type" content="text/html; charset=<%= @options.charset %>" />
|
7
5
|
<title><%= @options.title %></title>
|
6
|
+
<meta name="viewport" content="width=device-width,initial-scale=1">
|
8
7
|
</head>
|
9
8
|
<frameset cols="300,*" frameborder="1" border="1" bordercolor="#999999" framespacing="1">
|
10
9
|
<frame src="panel/index.html" title="Search" name="panel" />
|
@@ -32,10 +32,6 @@ Searchdoc.Navigation = new function() {
|
|
32
32
|
case 74: // j
|
33
33
|
case 75: // k
|
34
34
|
case 76: // l
|
35
|
-
case 67: // c - dvorak
|
36
|
-
case 72: // h
|
37
|
-
case 84: // t
|
38
|
-
case 78: // n
|
39
35
|
this.clearMoveTimeout();
|
40
36
|
break;
|
41
37
|
}
|
@@ -46,12 +42,10 @@ Searchdoc.Navigation = new function() {
|
|
46
42
|
switch (e.keyCode) {
|
47
43
|
case 37: //Event.KEY_LEFT:
|
48
44
|
case 74: // j (qwerty)
|
49
|
-
case 72: // h (dvorak)
|
50
45
|
if (this.moveLeft()) e.preventDefault();
|
51
46
|
break;
|
52
47
|
case 38: //Event.KEY_UP:
|
53
48
|
case 73: // i (qwerty)
|
54
|
-
case 67: // c (dvorak)
|
55
49
|
if (e.keyCode == 38 || e.ctrlKey) {
|
56
50
|
if (this.moveUp()) e.preventDefault();
|
57
51
|
this.startMoveTimeout(false);
|
@@ -59,23 +53,19 @@ Searchdoc.Navigation = new function() {
|
|
59
53
|
break;
|
60
54
|
case 39: //Event.KEY_RIGHT:
|
61
55
|
case 76: // l (qwerty)
|
62
|
-
case 78: // n (dvorak)
|
63
56
|
if (this.moveRight()) e.preventDefault();
|
64
57
|
break;
|
65
58
|
case 40: //Event.KEY_DOWN:
|
66
59
|
case 75: // k (qwerty)
|
67
|
-
case 84: // t (dvorak)
|
68
60
|
if (e.keyCode == 40 || e.ctrlKey) {
|
69
61
|
if (this.moveDown()) e.preventDefault();
|
70
62
|
this.startMoveTimeout(true);
|
71
63
|
}
|
72
64
|
break;
|
73
|
-
case 9: //Event.KEY_TAB:
|
74
65
|
case 13: //Event.KEY_RETURN:
|
75
66
|
if (this.$current) this.select(this.$current);
|
76
67
|
break;
|
77
68
|
case 83: // s (qwerty)
|
78
|
-
case 79: // o (dvorak)
|
79
69
|
if (e.ctrlKey) {
|
80
70
|
$('#search').focus();
|
81
71
|
e.preventDefault();
|
@@ -1,7 +1,8 @@
|
|
1
1
|
<!DOCTYPE html>
|
2
2
|
<html lang="en">
|
3
3
|
<head>
|
4
|
-
<title>
|
4
|
+
<title>Search Index</title>
|
5
|
+
<meta name="viewport" content="width=device-width,initial-scale=1">
|
5
6
|
<link rel="stylesheet" href="../css/reset.css" type="text/css" media="screen" charset="utf-8" />
|
6
7
|
<link rel="stylesheet" href="../css/panel.css" type="text/css" media="screen" charset="utf-8" />
|
7
8
|
<script src="../js/search_index.js" type="text/javascript" charset="utf-8"></script>
|
@@ -1,5 +1,9 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html lang="en">
|
3
|
+
<head>
|
4
|
+
<title>File Index</title>
|
5
|
+
<meta name="viewport" content="width=device-width,initial-scale=1">
|
6
|
+
</head>
|
3
7
|
<body>
|
4
8
|
<% @files.each do |file| %>
|
5
9
|
<a href="../<%= file.path %>"><%= file.relative_name %></a>
|
data/lib/sdoc/generator.rb
CHANGED
@@ -118,7 +118,7 @@ class RDoc::Generator::SDoc
|
|
118
118
|
debug_msg "Generating index file in #@outputdir"
|
119
119
|
templatefile = @template_dir + 'index.rhtml'
|
120
120
|
outfile = @outputdir + 'index.html'
|
121
|
-
rel_prefix = @outputdir.relative_path_from( outfile.dirname )
|
121
|
+
rel_prefix = rel_prefix = @outputdir.relative_path_from( outfile.dirname )
|
122
122
|
|
123
123
|
self.render_template( templatefile, binding(), outfile ) unless @options.dry_run
|
124
124
|
end
|
@@ -131,7 +131,7 @@ class RDoc::Generator::SDoc
|
|
131
131
|
@classes.each do |klass|
|
132
132
|
debug_msg " working on %s (%s)" % [ klass.full_name, klass.path ]
|
133
133
|
outfile = @outputdir + klass.path
|
134
|
-
rel_prefix = @outputdir.relative_path_from( outfile.dirname )
|
134
|
+
rel_prefix = rel_prefix = @outputdir.relative_path_from( outfile.dirname )
|
135
135
|
|
136
136
|
debug_msg " rendering #{outfile}"
|
137
137
|
self.render_template( templatefile, binding(), outfile ) unless @options.dry_run
|
@@ -146,7 +146,7 @@ class RDoc::Generator::SDoc
|
|
146
146
|
@files.each do |file|
|
147
147
|
outfile = @outputdir + file.path
|
148
148
|
debug_msg " working on %s (%s)" % [ file.full_name, outfile ]
|
149
|
-
rel_prefix = @outputdir.relative_path_from( outfile.dirname )
|
149
|
+
rel_prefix = rel_prefix = @outputdir.relative_path_from( outfile.dirname )
|
150
150
|
|
151
151
|
debug_msg " rendering #{outfile}"
|
152
152
|
self.render_template( templatefile, binding(), outfile ) unless @options.dry_run
|
data/lib/sdoc/merge.rb
CHANGED
@@ -3,11 +3,7 @@ require 'pathname'
|
|
3
3
|
require 'fileutils'
|
4
4
|
require 'json'
|
5
5
|
|
6
|
-
require 'sdoc/templatable'
|
7
|
-
|
8
6
|
class SDoc::Merge
|
9
|
-
include SDoc::Templatable
|
10
|
-
|
11
7
|
FLAG_FILE = "created.rid"
|
12
8
|
|
13
9
|
def initialize()
|
@@ -20,9 +16,6 @@ class SDoc::Merge
|
|
20
16
|
|
21
17
|
def merge(options)
|
22
18
|
parse_options options
|
23
|
-
|
24
|
-
@outputdir = Pathname.new( @op_dir )
|
25
|
-
|
26
19
|
check_directories
|
27
20
|
setup_output_dir
|
28
21
|
setup_names
|
@@ -30,7 +23,7 @@ class SDoc::Merge
|
|
30
23
|
copy_docs if @urls.empty?
|
31
24
|
merge_search_index
|
32
25
|
merge_tree
|
33
|
-
|
26
|
+
copy_index_file
|
34
27
|
end
|
35
28
|
|
36
29
|
def parse_options(options)
|
@@ -56,7 +49,6 @@ class SDoc::Merge
|
|
56
49
|
end
|
57
50
|
end
|
58
51
|
opts.parse! options
|
59
|
-
@template_dir = Pathname.new(RDoc::Options.new.template_dir_for 'merge')
|
60
52
|
@directories = options.dup
|
61
53
|
end
|
62
54
|
|
@@ -70,7 +62,7 @@ class SDoc::Merge
|
|
70
62
|
subtree = JSON.parse(data, :max_nesting => 0)
|
71
63
|
item = [
|
72
64
|
name,
|
73
|
-
url + '/'
|
65
|
+
url + '/index.html',
|
74
66
|
'',
|
75
67
|
append_path(subtree, url)
|
76
68
|
]
|
@@ -137,24 +129,8 @@ class SDoc::Merge
|
|
137
129
|
end
|
138
130
|
end
|
139
131
|
|
140
|
-
def
|
141
|
-
|
142
|
-
content = File.open(filename) { |f| f.read }
|
143
|
-
match = content.match(/<frame\s+src="([^"]+)"\s+name="docwin"/mi)
|
144
|
-
if match
|
145
|
-
match[1]
|
146
|
-
else
|
147
|
-
''
|
148
|
-
end
|
149
|
-
end
|
150
|
-
|
151
|
-
def generate_index_file
|
152
|
-
templatefile = @template_dir + 'index.rhtml'
|
153
|
-
outfile = @outputdir + 'index.html'
|
154
|
-
url = @urls.empty? ? @names[0] : @urls[0]
|
155
|
-
index_path = url + '/' + extract_index_path(@directories[0])
|
156
|
-
|
157
|
-
render_template templatefile, binding(), outfile
|
132
|
+
def copy_index_file
|
133
|
+
FileUtils.cp File.join(@directories[0], 'index.html'), @op_dir
|
158
134
|
end
|
159
135
|
|
160
136
|
def setup_names
|
@@ -178,6 +154,7 @@ class SDoc::Merge
|
|
178
154
|
FileUtils.cp_r File.join(dir, item), File.join(@op_dir, name, item), :preserve => true
|
179
155
|
end
|
180
156
|
end
|
157
|
+
FileUtils.cp File.join(dir, 'index.html'), File.join(@op_dir, name)
|
181
158
|
end
|
182
159
|
end
|
183
160
|
|
data/lib/sdoc/templatable.rb
CHANGED
@@ -28,7 +28,7 @@ module SDoc::Templatable
|
|
28
28
|
### current context. Adds all +local_assigns+ to context
|
29
29
|
def include_template(template_name, local_assigns = {})
|
30
30
|
source = local_assigns.keys.map { |key| "#{key} = local_assigns[:#{key}];" }.join
|
31
|
-
templatefile = @template_dir + template_name
|
31
|
+
templatefile = templatefile = @template_dir + template_name
|
32
32
|
eval("#{source};eval_template(templatefile, binding)")
|
33
33
|
end
|
34
34
|
|
data/lib/sdoc/version.rb
CHANGED
data/netlify.toml
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
[build]
|
2
|
+
command = "rake install && sdoc -o doc/public -T rails -f sdoc"
|
3
|
+
publish = "doc/public"
|
4
|
+
|
5
|
+
[build.processing]
|
6
|
+
skip_processing = false
|
7
|
+
[build.processing.css]
|
8
|
+
bundle = true
|
9
|
+
minify = true
|
10
|
+
[build.processing.js]
|
11
|
+
bundle = true
|
12
|
+
minify = true
|
13
|
+
[build.processing.html]
|
14
|
+
pretty_urls = true
|
15
|
+
[build.processing.images]
|
16
|
+
compress = true
|
17
|
+
|
18
|
+
[[headers]]
|
19
|
+
for = "*"
|
20
|
+
[headers.values]
|
21
|
+
X-Frame-Options = "DENY"
|
22
|
+
X-XSS-Protection = "1; mode=block"
|
23
|
+
X-Content-Type-Options = "nosniff"
|
24
|
+
Content-Security-Policy = '''
|
25
|
+
object-src 'none';
|
26
|
+
worker-src 'none';
|
27
|
+
block-all-mixed-content;
|
28
|
+
upgrade-insecure-requests;'''
|
29
|
+
Strict-Transport-Security = "max-age=15552000; includeSubDomains"
|
30
|
+
Referrer-Policy = "no-referrer-when-downgrade"
|
31
|
+
Cache-Control = "public, max-age=604800, s-max-age=604800"
|
32
|
+
|
33
|
+
[[headers]]
|
34
|
+
for = "/"
|
35
|
+
|
36
|
+
[[headers]]
|
37
|
+
for = "/*.(png|jpg|js|css|svg|woff|ttf|eot|ico|woff2)"
|
38
|
+
[headers.values]
|
39
|
+
Cache-Control = "public, max-age=31536000, s-max-age=31536000"
|