bookbindery 9.6.1 → 9.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bookbinder.gemspec +1 -1
- data/lib/bookbinder/subnav/navigation_entries_from_html_toc.rb +4 -1
- data/master_middleman/bookbinder_helpers.rb +3 -8
- data/master_middleman/source/javascripts/all.js +2 -0
- data/master_middleman/source/javascripts/book.js +1 -0
- data/master_middleman/source/javascripts/bookbinder.js +99 -0
- data/master_middleman/source/layouts/_page-footer.erb +1 -0
- data/master_middleman/source/layouts/layout.erb +2 -1
- data/master_middleman/source/stylesheets/base.scss +1 -0
- data/master_middleman/source/stylesheets/partials/_footer.scss +1 -0
- data/master_middleman/source/stylesheets/partials/_mixins.scss +10 -0
- data/master_middleman/source/stylesheets/partials/_sidenav.scss +32 -84
- data/master_middleman/source/stylesheets/partials/_vars.scss +1 -0
- data/template_app/rack_app.rb +2 -8
- metadata +6 -3
- data/master_middleman/source/javascripts/sidenav.js +0 -53
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fd201eb536834687e2551bb108e397c4ecc8e80f
|
4
|
+
data.tar.gz: 82aab6304ea515c297f37d94978041612f554870
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e673fa3032769f9e17ba2dc50d54a757b447463fa827b5a67611e90010f55b4f3d6030fc41acc88dcadbfe9c09bc1dab1836b82fd7b3edf2979bca1b2dcfa202
|
7
|
+
data.tar.gz: e06cfc24fabe98f4db0e8720841db9d64b326be8b58194040a93d43b7c75669ce61a2349358eb35899351680067a46fffdecc129fc896301fceb055b3c5bcf13
|
data/bookbinder.gemspec
CHANGED
@@ -2,7 +2,7 @@ require 'base64'
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = 'bookbindery'
|
5
|
-
s.version = '9.
|
5
|
+
s.version = '9.7.0'
|
6
6
|
s.summary = 'Markdown to Rackup application documentation generator'
|
7
7
|
s.description = 'A command line utility to be run in Book repositories to stitch together their constituent Markdown repos into a static-HTML-serving application'
|
8
8
|
s.authors = ['Mike Grafton', 'Lucas Marks', 'Gavin Morgan', 'Nikhil Gajwani', 'Dan Wendorf', 'Brenda Chan', 'Matthew Boedicker', 'Andrew Bruce', 'Frank Kotsianas', 'Elena Sharma', 'Christa Hartsock', 'Michael Trestman', 'Alpha Chen', 'Sarah McAlear', 'Gregg Van Hove']
|
@@ -6,6 +6,7 @@ module Bookbinder
|
|
6
6
|
class NavigationEntriesFromHtmlToc
|
7
7
|
def initialize(fs)
|
8
8
|
@fs = fs
|
9
|
+
@external_link_check = %r{\Ahttps?://}
|
9
10
|
end
|
10
11
|
|
11
12
|
def get_links(section, output_locations)
|
@@ -33,7 +34,9 @@ module Bookbinder
|
|
33
34
|
|
34
35
|
def set_anchor_values(anchors)
|
35
36
|
anchors.each do |anchor|
|
36
|
-
|
37
|
+
unless @external_link_check.match(anchor['href'])
|
38
|
+
anchor['href'] = "/#{section.destination_directory}/#{anchor['href']}"
|
39
|
+
end
|
37
40
|
end
|
38
41
|
end
|
39
42
|
|
@@ -70,14 +70,9 @@ module Bookbinder
|
|
70
70
|
current_page.add_metadata({page: {repo_link_disabled: true}})
|
71
71
|
end
|
72
72
|
|
73
|
-
def render_repo_link
|
73
|
+
def render_repo_link
|
74
74
|
if config[:repo_link_enabled] && repo_url && !current_page.metadata[:page][:repo_link_disabled]
|
75
|
-
id
|
76
|
-
whitelisted_envs = include_environments.join(" ")
|
77
|
-
default_display = 'display: none;'
|
78
|
-
display_text = 'View the source for this page in GitHub'
|
79
|
-
|
80
|
-
"<a id='#{id}' data-whitelist='#{whitelisted_envs}' style='#{default_display}' href='#{repo_url}'>#{display_text}</a>"
|
75
|
+
"<a id='repo-link' href='#{repo_url}'>View the source for this page in GitHub</a>"
|
81
76
|
end
|
82
77
|
end
|
83
78
|
|
@@ -92,7 +87,7 @@ module Bookbinder
|
|
92
87
|
|
93
88
|
date = page_last_modified_date || parsed_default_date
|
94
89
|
|
95
|
-
"Page last updated: <span data-behavior=\"DisplayModifiedDate\" data-modified-date=\"#{date}\"></span>" if date
|
90
|
+
"Page last updated: <span data-behavior=\"DisplayModifiedDate\" data-modified-date=\"#{date.to_i}000\"></span>" if date
|
96
91
|
end
|
97
92
|
|
98
93
|
def breadcrumbs
|
@@ -0,0 +1 @@
|
|
1
|
+
// Declare your book-specific javascript overrides in this file.
|
@@ -0,0 +1,99 @@
|
|
1
|
+
(function() {
|
2
|
+
var MONTHS = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
|
3
|
+
|
4
|
+
function toggleClass(el, className) {
|
5
|
+
var check = new RegExp("\\b" + className + "\\b");
|
6
|
+
if (check.test(el.className)) {
|
7
|
+
el.className = el.className.replace(check, '');
|
8
|
+
} else {
|
9
|
+
el.className += ' ' + className;
|
10
|
+
}
|
11
|
+
}
|
12
|
+
|
13
|
+
function openSubmenu(e) {
|
14
|
+
var el = e.currentTarget;
|
15
|
+
toggleClass(el, 'expanded');
|
16
|
+
e.stopPropagation();
|
17
|
+
}
|
18
|
+
|
19
|
+
function registerOnClick(el, handler) {
|
20
|
+
if (el.addEventListener) {
|
21
|
+
el.addEventListener('click', handler);
|
22
|
+
} else {
|
23
|
+
el.onclick = handler;
|
24
|
+
}
|
25
|
+
}
|
26
|
+
|
27
|
+
function toggleMainMenu(e) {
|
28
|
+
var el = e.currentTarget;
|
29
|
+
toggleClass(el.parentNode, 'menu-active');
|
30
|
+
}
|
31
|
+
|
32
|
+
function toggleSubMenu(e) {
|
33
|
+
var el = e.currentTarget;
|
34
|
+
toggleClass(el.parentNode, 'active');
|
35
|
+
}
|
36
|
+
|
37
|
+
function displayDate(millis) {
|
38
|
+
millis = parseInt(millis, 10);
|
39
|
+
var date = new Date(millis);
|
40
|
+
|
41
|
+
return [MONTHS[date.getMonth()], ' ', date.getDate(), ', ', date.getFullYear()].join('');
|
42
|
+
}
|
43
|
+
|
44
|
+
window.Bookbinder = {
|
45
|
+
startSidenav: function(rootEl, currentPath) {
|
46
|
+
var submenus = rootEl.querySelectorAll('.has_submenu');
|
47
|
+
|
48
|
+
for (var i = 0; i < submenus.length; i++) {
|
49
|
+
registerOnClick(submenus[i], openSubmenu);
|
50
|
+
}
|
51
|
+
|
52
|
+
if (currentPath) {
|
53
|
+
var currentLink = rootEl.querySelector('a[href="' + currentPath + '"]');
|
54
|
+
if (currentLink) {
|
55
|
+
currentLink.className += ' active';
|
56
|
+
|
57
|
+
var hasSubmenu = /\bhas_submenu\b/;
|
58
|
+
var subnavLocation = currentLink.parentNode;
|
59
|
+
|
60
|
+
while(subnavLocation.parentNode !== rootEl) {
|
61
|
+
subnavLocation = subnavLocation.parentNode;
|
62
|
+
if (hasSubmenu.test(subnavLocation.className)) {
|
63
|
+
subnavLocation.className += ' expanded';
|
64
|
+
}
|
65
|
+
}
|
66
|
+
|
67
|
+
rootEl.scrollTop = currentLink.offsetTop - rootEl.offsetTop;
|
68
|
+
}
|
69
|
+
}
|
70
|
+
},
|
71
|
+
mobileMainMenu: function(root) {
|
72
|
+
var mainMenus = root.querySelectorAll('[data-behavior=MenuMobile]');
|
73
|
+
|
74
|
+
for (var i = 0; i < mainMenus.length; i++) {
|
75
|
+
registerOnClick(mainMenus[i], toggleMainMenu);
|
76
|
+
}
|
77
|
+
},
|
78
|
+
mobileSubMenu: function(root) {
|
79
|
+
var subMenus = root.querySelectorAll('[data-behavior=SubMenuMobile]');
|
80
|
+
|
81
|
+
for (var i = 0; i < subMenus.length; i++) {
|
82
|
+
registerOnClick(subMenus[i], toggleSubMenu);
|
83
|
+
}
|
84
|
+
},
|
85
|
+
modifiedDates: function(root) {
|
86
|
+
var datesElements = root.querySelectorAll('[data-behavior=DisplayModifiedDate]');
|
87
|
+
|
88
|
+
for (var i = 0; i < datesElements.length; i++) {
|
89
|
+
datesElements[i].innerText = displayDate(datesElements[i].getAttribute('data-modified-date'));
|
90
|
+
}
|
91
|
+
},
|
92
|
+
boot: function() {
|
93
|
+
Bookbinder.startSidenav(document.querySelector('#sub-nav'), document.location.pathname);
|
94
|
+
Bookbinder.mobileMainMenu(document);
|
95
|
+
Bookbinder.mobileSubMenu(document);
|
96
|
+
Bookbinder.modifiedDates(document);
|
97
|
+
}
|
98
|
+
};
|
99
|
+
})();
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= render_repo_link %>
|
@@ -18,7 +18,7 @@
|
|
18
18
|
<%= stylesheet_link_tag 'book-styles', :media => 'screen, print' %>
|
19
19
|
<link href='/images/favicon.ico' rel='shortcut icon'>
|
20
20
|
|
21
|
-
|
21
|
+
<%= javascript_include_tag "all" %>
|
22
22
|
<%= partial 'layouts/additional-scripts' %>
|
23
23
|
</head>
|
24
24
|
|
@@ -56,6 +56,7 @@
|
|
56
56
|
<a href="#top" title="back to top"></a>
|
57
57
|
</div>
|
58
58
|
<%= yield %>
|
59
|
+
<%= partial 'layouts/page-footer' %>
|
59
60
|
</main>
|
60
61
|
</div>
|
61
62
|
</div>
|
@@ -41,3 +41,13 @@
|
|
41
41
|
}
|
42
42
|
@return ($pxval / $base) * 1em;
|
43
43
|
}
|
44
|
+
|
45
|
+
@function rem($pxval, $base: $em-base) {
|
46
|
+
@if not unitless($pxval) {
|
47
|
+
$pxval: strip-units($pxval);
|
48
|
+
}
|
49
|
+
@if not unitless($base) {
|
50
|
+
$base: strip-units($base);
|
51
|
+
}
|
52
|
+
@return ($pxval / $base) * 1rem;
|
53
|
+
}
|
@@ -1,3 +1,4 @@
|
|
1
|
+
@import "compass/utilities/color/contrast";
|
1
2
|
/*
|
2
3
|
* FILE: _sidenav.scss
|
3
4
|
======================================================================== */
|
@@ -13,86 +14,28 @@ category: basics
|
|
13
14
|
Doc Index
|
14
15
|
</a>
|
15
16
|
<div class="nav-content">
|
16
|
-
<ul
|
17
|
-
<li class="
|
18
|
-
<
|
17
|
+
<ul>
|
18
|
+
<li class="has_submenu">
|
19
|
+
<span>
|
19
20
|
Side Nav Title 1
|
20
|
-
</
|
21
|
-
<
|
22
|
-
<
|
23
|
-
<
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
<
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
</ul>
|
34
|
-
</div>
|
21
|
+
</span>
|
22
|
+
<ul>
|
23
|
+
<li>
|
24
|
+
<a href="#">
|
25
|
+
Item
|
26
|
+
</a>
|
27
|
+
</li>
|
28
|
+
<li>
|
29
|
+
<a href="#">
|
30
|
+
Item
|
31
|
+
</a>
|
32
|
+
</li>
|
33
|
+
</ul>
|
35
34
|
</li>
|
36
|
-
<li
|
37
|
-
<
|
38
|
-
|
39
|
-
</
|
40
|
-
<div class="menu-content js-menu-content" aria-hidden="true">
|
41
|
-
<ul>
|
42
|
-
<li class="menu-link">
|
43
|
-
<a href="#">
|
44
|
-
Item
|
45
|
-
</a>
|
46
|
-
</li>
|
47
|
-
<li class="menu-link">
|
48
|
-
<a href="#">
|
49
|
-
Item
|
50
|
-
</a>
|
51
|
-
</li>
|
52
|
-
</ul>
|
53
|
-
</div>
|
54
|
-
</li>
|
55
|
-
<li class="menu-item js-menu-item">
|
56
|
-
<div class="menu-title js-menu-title">
|
57
|
-
Side Nav Item 3
|
58
|
-
</div>
|
59
|
-
<div class="menu-content js-menu-content" aria-hidden="true">
|
60
|
-
<div class="menu-subtitle">
|
61
|
-
Side Nav Subtitle
|
62
|
-
</div>
|
63
|
-
<ul>
|
64
|
-
<li class="menu-link">
|
65
|
-
<a href="#">
|
66
|
-
Item
|
67
|
-
</a>
|
68
|
-
</li>
|
69
|
-
<li class="menu-link">
|
70
|
-
<a href="#">
|
71
|
-
Item
|
72
|
-
</a>
|
73
|
-
</li>
|
74
|
-
</ul>
|
75
|
-
<div class="menu-subtitle">
|
76
|
-
Side Nav Subtitle
|
77
|
-
</div>
|
78
|
-
<ul>
|
79
|
-
<li class="menu-link">
|
80
|
-
<a href="#">
|
81
|
-
Item
|
82
|
-
</a>
|
83
|
-
</li>
|
84
|
-
<li class="menu-link">
|
85
|
-
<a href="#">
|
86
|
-
Item
|
87
|
-
</a>
|
88
|
-
</li>
|
89
|
-
<li class="menu-link">
|
90
|
-
<a href="#">
|
91
|
-
Item
|
92
|
-
</a>
|
93
|
-
</li>
|
94
|
-
</ul>
|
95
|
-
</div>
|
35
|
+
<li>
|
36
|
+
<a href="#">
|
37
|
+
Item
|
38
|
+
</a>
|
96
39
|
</li>
|
97
40
|
</ul>
|
98
41
|
</div>
|
@@ -106,14 +49,16 @@ category: basics
|
|
106
49
|
padding: 1em;
|
107
50
|
text-align: center;
|
108
51
|
text-transform: uppercase;
|
52
|
+
|
109
53
|
@media (min-width: $bp-wide) {
|
110
54
|
display: none;
|
111
55
|
}
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
56
|
+
|
57
|
+
&:after {
|
58
|
+
@extend .fa;
|
59
|
+
content: $fa-var-angle-down;
|
60
|
+
padding-left: 1.5em;
|
61
|
+
}
|
117
62
|
}
|
118
63
|
.sidenav-title:hover,
|
119
64
|
.active .sidenav-title {
|
@@ -123,6 +68,7 @@ category: basics
|
|
123
68
|
.active .sidenav-title:after {
|
124
69
|
content: $fa-var-angle-up;
|
125
70
|
}
|
71
|
+
|
126
72
|
// ~SIDE NAVIGATION
|
127
73
|
.nav-container {
|
128
74
|
background: $gray5;
|
@@ -136,12 +82,14 @@ category: basics
|
|
136
82
|
@include transition(all 0.2s linear);
|
137
83
|
overflow: hidden;
|
138
84
|
padding-left: 1em;
|
85
|
+
|
139
86
|
@media (min-width: $bp-wide) {
|
140
87
|
height: auto;
|
141
88
|
display: block;
|
142
89
|
opacity: 1;
|
143
90
|
padding-left: 0;
|
144
91
|
}
|
92
|
+
|
145
93
|
@media (min-width: $bp-widest) {
|
146
94
|
padding-left: 0.875em;
|
147
95
|
}
|
@@ -193,7 +141,7 @@ category: basics
|
|
193
141
|
background-color: transparentize($color-accent-bright, 0.8);
|
194
142
|
border-style: solid;
|
195
143
|
color: $gray1;
|
196
|
-
|
144
|
+
font-weight: 600;
|
197
145
|
}
|
198
146
|
|
199
147
|
|
data/template_app/rack_app.rb
CHANGED
@@ -18,6 +18,7 @@ module Bookbinder
|
|
18
18
|
Rack::Builder.new do
|
19
19
|
use ResolveRedirects, path
|
20
20
|
use AuthorizeUser, auth
|
21
|
+
use Rack::Deflater
|
21
22
|
map '/api/feedback' do
|
22
23
|
use MailFeedback, client
|
23
24
|
run Bookbinder::NotFound.new('public/404.html')
|
@@ -25,14 +26,7 @@ module Bookbinder
|
|
25
26
|
map '/search' do
|
26
27
|
run Bookbinder::Search::Handler.new
|
27
28
|
end
|
28
|
-
|
29
|
-
map ENV['CUSTOM_ROOT'] do
|
30
|
-
run Bookbinder::Server
|
31
|
-
end
|
32
|
-
run Bookbinder::NotFound.new('public/404.html')
|
33
|
-
else
|
34
|
-
run Bookbinder::Server
|
35
|
-
end
|
29
|
+
run Bookbinder::Server
|
36
30
|
end
|
37
31
|
end
|
38
32
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bookbindery
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 9.
|
4
|
+
version: 9.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Grafton
|
@@ -22,7 +22,7 @@ authors:
|
|
22
22
|
autorequire:
|
23
23
|
bindir: install_bin
|
24
24
|
cert_chain: []
|
25
|
-
date: 2016-06-
|
25
|
+
date: 2016-06-03 00:00:00.000000000 Z
|
26
26
|
dependencies:
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: fog-aws
|
@@ -434,13 +434,16 @@ files:
|
|
434
434
|
- master_middleman/compass_runner.rb
|
435
435
|
- master_middleman/config.rb
|
436
436
|
- master_middleman/quicklinks_renderer.rb
|
437
|
-
- master_middleman/source/javascripts/
|
437
|
+
- master_middleman/source/javascripts/all.js
|
438
|
+
- master_middleman/source/javascripts/book.js
|
439
|
+
- master_middleman/source/javascripts/bookbinder.js
|
438
440
|
- master_middleman/source/layouts/_additional-scripts.erb
|
439
441
|
- master_middleman/source/layouts/_book-footer.erb
|
440
442
|
- master_middleman/source/layouts/_book-search.erb
|
441
443
|
- master_middleman/source/layouts/_book-title.erb
|
442
444
|
- master_middleman/source/layouts/_header.erb
|
443
445
|
- master_middleman/source/layouts/_local-header.erb
|
446
|
+
- master_middleman/source/layouts/_page-footer.erb
|
444
447
|
- master_middleman/source/layouts/layout.erb
|
445
448
|
- master_middleman/source/stylesheets/base.scss
|
446
449
|
- master_middleman/source/stylesheets/partials/_book-base-values.scss
|
@@ -1,53 +0,0 @@
|
|
1
|
-
(function() {
|
2
|
-
var isExpanded = /\bexpanded\b/;
|
3
|
-
|
4
|
-
function openSubmenu(e) {
|
5
|
-
var el = e.currentTarget;
|
6
|
-
if (isExpanded.test(el.className)) {
|
7
|
-
el.className = el.className.replace(isExpanded, '');
|
8
|
-
} else {
|
9
|
-
el.className += ' expanded';
|
10
|
-
}
|
11
|
-
e.stopPropagation();
|
12
|
-
}
|
13
|
-
|
14
|
-
function registerOnClick(el) {
|
15
|
-
if (el.addEventListener) {
|
16
|
-
el.addEventListener('click', openSubmenu);
|
17
|
-
} else {
|
18
|
-
el.onclick = openSubmenu;
|
19
|
-
}
|
20
|
-
}
|
21
|
-
|
22
|
-
window.Bookbinder = {
|
23
|
-
startSidenav: function(rootEl, currentPath) {
|
24
|
-
var submenus = rootEl.querySelectorAll('.has_submenu');
|
25
|
-
|
26
|
-
for (var i = 0; i < submenus.length; i++) {
|
27
|
-
registerOnClick(submenus[i]);
|
28
|
-
}
|
29
|
-
|
30
|
-
if (currentPath) {
|
31
|
-
var currentLink = rootEl.querySelector('a[href="' + currentPath + '"]');
|
32
|
-
if (currentLink) {
|
33
|
-
currentLink.className += ' active';
|
34
|
-
|
35
|
-
var hasSubmenu = /\bhas_submenu\b/;
|
36
|
-
var subnavLocation = currentLink.parentNode;
|
37
|
-
|
38
|
-
while(subnavLocation.parentNode !== rootEl) {
|
39
|
-
subnavLocation = subnavLocation.parentNode;
|
40
|
-
if (hasSubmenu.test(subnavLocation.className)) {
|
41
|
-
subnavLocation.className += ' expanded';
|
42
|
-
}
|
43
|
-
}
|
44
|
-
|
45
|
-
rootEl.scrollTop = currentLink.offsetTop - rootEl.offsetTop;
|
46
|
-
}
|
47
|
-
}
|
48
|
-
},
|
49
|
-
boot: function() {
|
50
|
-
Bookbinder.startSidenav(document.querySelector('#sub-nav'), document.location.pathname);
|
51
|
-
}
|
52
|
-
};
|
53
|
-
})();
|