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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e302ff6d4ab515306e9318852b35f5a76cbf31e9
4
- data.tar.gz: e674caa968578818d6b1fc8c8caf3f17a5b4c1de
3
+ metadata.gz: fd201eb536834687e2551bb108e397c4ecc8e80f
4
+ data.tar.gz: 82aab6304ea515c297f37d94978041612f554870
5
5
  SHA512:
6
- metadata.gz: 682616ee0377b5de0985029f3eef5bb9d78fb09826e0a4ef5c3464e0321c9457c13f332f30903775684a61105e3a4420e5c20793eaf283c7ad8e1242b2c7a82c
7
- data.tar.gz: dd1ea778df634876b0464897b798f2913b3d062ba1647aaf22ba1c30481db5d202c5d5b2417e4730fa18b0ed485467a1734cc5ff161ecc8c39bcd5bba932e806
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.6.1'
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
- anchor['href'] = "/#{section.destination_directory}/#{anchor['href']}"
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(include_environments: [])
73
+ def render_repo_link
74
74
  if config[:repo_link_enabled] && repo_url && !current_page.metadata[:page][:repo_link_disabled]
75
- id = 'repo-link'
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,2 @@
1
+ //= require bookbinder
2
+ //= require book
@@ -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
- <script src="/javascripts/sidenav.js"></script>
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>
@@ -12,6 +12,7 @@
12
12
  @import "partials/header";
13
13
  @import "partials/footer";
14
14
  @import "partials/search";
15
+ @import "partials/sidenav";
15
16
 
16
17
 
17
18
  // ~LAYOUT
@@ -55,6 +55,7 @@
55
55
  }
56
56
 
57
57
  #repo-link {
58
+ display: block;
58
59
  border-bottom: solid 1px #eceae9;
59
60
  border-top: solid 1px #eceae9;
60
61
  text-align: center;
@@ -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 class="menu">
17
- <li class="menu-item js-menu-item">
18
- <div class="menu-title js-menu-title">
17
+ <ul>
18
+ <li class="has_submenu">
19
+ <span>
19
20
  Side Nav Title 1
20
- </div>
21
- <div class="menu-content js-menu-content" aria-hidden="true">
22
- <ul>
23
- <li class="menu-link">
24
- <a href="#">
25
- Item
26
- </a>
27
- </li>
28
- <li class="menu-link">
29
- <a href="#">
30
- Item
31
- </a>
32
- </li>
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 class="menu-item js-menu-item">
37
- <div class="menu-title js-menu-title">
38
- Side Nav Title 2
39
- </div>
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
- .sidenav-title:after {
114
- @extend .fa;
115
- content: $fa-var-angle-down;
116
- padding-left: 1.5em;
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
- @extend %h-bold;
144
+ font-weight: 600;
197
145
  }
198
146
 
199
147
 
@@ -22,6 +22,7 @@ $gray6: #fdfdfd;
22
22
 
23
23
  $color-accent: $gray6;
24
24
  $color-accent-bright: $gray6;
25
+ $color-access-bright-contrast: #000000;
25
26
 
26
27
  // text colors
27
28
  $color-header: $gray2;
@@ -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
- if ENV['CUSTOM_ROOT']
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.6.1
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-01 00:00:00.000000000 Z
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/sidenav.js
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
- })();