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.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/test.yml +38 -0
  3. data/.gitignore +1 -0
  4. data/CHANGELOG.md +42 -6
  5. data/Gemfile +8 -2
  6. data/README.md +14 -4
  7. data/Rakefile +54 -2
  8. data/config.ru +3 -3
  9. data/lib/rdoc/generator/template/rails/_context.rhtml +16 -8
  10. data/lib/rdoc/generator/template/rails/_head.rhtml +14 -39
  11. data/lib/rdoc/generator/template/rails/_panel.rhtml +6 -3
  12. data/lib/rdoc/generator/template/rails/class.rhtml +5 -2
  13. data/lib/rdoc/generator/template/rails/file.rhtml +5 -2
  14. data/lib/rdoc/generator/template/rails/index.rhtml +7 -7
  15. data/lib/rdoc/generator/template/rails/resources/css/main.css +33 -6
  16. data/lib/rdoc/generator/template/rails/resources/css/panel.css +123 -6
  17. data/lib/rdoc/generator/template/rails/resources/css/reset.css +0 -1
  18. data/lib/rdoc/generator/template/rails/resources/js/main.js +17 -0
  19. data/lib/rdoc/generator/template/rails/resources/js/searchdoc.js +14 -17
  20. data/lib/rdoc/generator/template/rails/search_index.rhtml +6 -2
  21. data/lib/rdoc/generator/template/sdoc/_context.rhtml +11 -3
  22. data/lib/rdoc/generator/template/sdoc/class.rhtml +5 -6
  23. data/lib/rdoc/generator/template/sdoc/file.rhtml +5 -6
  24. data/lib/rdoc/generator/template/sdoc/index.rhtml +3 -4
  25. data/lib/rdoc/generator/template/sdoc/resources/css/reset.css +0 -1
  26. data/lib/rdoc/generator/template/sdoc/resources/js/searchdoc.js +0 -10
  27. data/lib/rdoc/generator/template/sdoc/resources/panel/index.html +2 -1
  28. data/lib/rdoc/generator/template/sdoc/search_index.rhtml +6 -2
  29. data/lib/sdoc/generator.rb +3 -3
  30. data/lib/sdoc/merge.rb +5 -28
  31. data/lib/sdoc/templatable.rb +1 -1
  32. data/lib/sdoc/version.rb +1 -1
  33. data/netlify.toml +39 -0
  34. data/sdoc.gemspec +1 -3
  35. data/spec/helpers_spec.rb +2 -2
  36. data/spec/rdoc_generator_spec.rb +9 -9
  37. metadata +13 -21
  38. data/.travis.yml +0 -31
  39. 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: 2;
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
- .panel_tree .results,
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: 40px;
175
+ top: 0;
58
176
  left: 0;
59
177
  width: 100%;
60
- overflow-y: scroll;
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: scroll;
344
+ overflow-y: auto;
228
345
  overflow-x: hidden;
229
346
  z-index: 30;
230
347
  }
@@ -13,7 +13,6 @@ table, caption, tbody, tfoot, thead, tr, th, td {
13
13
  margin: 0;
14
14
  padding: 0;
15
15
  border: 0;
16
- outline: 0;
17
16
  font-size: 100%;
18
17
  vertical-align: baseline;
19
18
  background: transparent;
@@ -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, prefix) {
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
- Turbolinks.visit(this.prefix + src);
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.data('path'));
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
- jQuery.data(li, 'path', result.path);
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
- <html>
2
- <head>File index</head>
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
- <a href="javascript:toggleSource('<%= method.aref %>_source')" id="l_<%= method.aref %>_source">show</a>
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
- | <a href="<%= "#{github}#L#{line}" %>" target="_blank" class="github_url">on GitHub</a>
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
- <?xml version="1.0" encoding="utf-8"?>
2
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
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
- <div id="bodyContent">
47
+ <main id="bodyContent">
49
48
  <%= include_template '_context.rhtml', {:context => klass, :rel_prefix => rel_prefix} %>
50
- </div>
49
+ </main>
51
50
  </body>
52
51
  </html>
@@ -1,10 +1,9 @@
1
- <?xml version="1.0" encoding="utf-8"?>
2
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
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
- <div id="bodyContent">
24
+ <main id="bodyContent">
26
25
  <%= include_template '_context.rhtml', {:context => file, :rel_prefix => rel_prefix} %>
27
- </div>
26
+ </main>
28
27
  </body>
29
28
  </html>
@@ -1,10 +1,9 @@
1
- <!DOCTYPE html
2
- PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
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" />
@@ -13,7 +13,6 @@ table, caption, tbody, tfoot, thead, tr, th, td {
13
13
  margin: 0;
14
14
  padding: 0;
15
15
  border: 0;
16
- outline: 0;
17
16
  font-size: 100%;
18
17
  vertical-align: baseline;
19
18
  background: transparent;
@@ -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>search index</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
- <html>
2
- <head>File index</head>
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>
@@ -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
- generate_index_file
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 + '/' + extract_index_path(dir),
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 extract_index_path dir
141
- filename = File.join dir, 'index.html'
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
 
@@ -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
@@ -1,3 +1,3 @@
1
1
  module SDoc
2
- VERSION = '2.0.3'
2
+ VERSION = '2.3.0'
3
3
  end
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"