bookbindery 9.12.1 → 10.0.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 +8 -5
- data/lib/bookbinder/cli.rb +2 -1
- data/lib/bookbinder/code_example_reader.rb +1 -1
- data/lib/bookbinder/commands/bind.rb +3 -2
- data/lib/bookbinder/commands/generate.rb +1 -1
- data/lib/bookbinder/local_filesystem_accessor.rb +1 -1
- data/lib/bookbinder/middleman_runner.rb +4 -2
- data/lib/bookbinder/preprocessing/preprocessor.rb +1 -1
- data/master_middleman/bookbinder_helpers.rb +16 -13
- data/master_middleman/config.rb +11 -2
- data/master_middleman/proof.rb +90 -0
- data/master_middleman/source/javascripts/bookbinder.js +27 -0
- data/master_middleman/source/layouts/layout.erb +3 -3
- data/master_middleman/source/stylesheets/base.scss +9 -1
- data/master_middleman/source/stylesheets/{book-styles.css.scss → book-styles.scss} +0 -0
- data/master_middleman/source/stylesheets/print-book-styles.scss +0 -0
- data/master_middleman/source/stylesheets/print-layout-styles.scss +0 -0
- data/master_middleman/source/stylesheets/print.css.scss +3 -4
- data/master_middleman/subdirectory_aware_assets.rb +1 -12
- data/template_app/Gemfile +1 -1
- data/template_app/Gemfile.lock +16 -16
- data/template_app/lib/search/handler.rb +27 -1
- data/template_app/lib/search/renderer.rb +1 -0
- data/template_app/search-results.html.erb +9 -3
- metadata +61 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 032506f1edfb3c2dc24ecb101cdeeaa5938bb297
|
4
|
+
data.tar.gz: 26e6135c21fc4fd3de5a579d64782878104e6c49
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 52a7e82139d9f4731191baed4284d28c3574ec11abf3ce00038285ceec72462ace0b179db5036bd3d68240b774e92d5d1cee68b77a3814b9ce166889844daa0d
|
7
|
+
data.tar.gz: d6616b9669f7d951efe37ca75376b9304355d7da913fa387b75874b32346a1920e9d9ad50a691bc4f8a127e66ffe3079aef9356854f67a65af1776cb58e6eada
|
data/bookbinder.gemspec
CHANGED
@@ -2,10 +2,10 @@ require 'base64'
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = 'bookbindery'
|
5
|
-
s.version = '
|
5
|
+
s.version = '10.0.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
|
-
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']
|
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', 'Jess B Heron']
|
9
9
|
s.email = Base64.decode64('Z21vcmdhbkBnb3Bpdm90YWwuY29t') # Gavin's
|
10
10
|
|
11
11
|
s.files = Dir['lib/**/*'] + Dir['template_app/**/*'] + Dir['master_middleman/**/*'] + Dir['install_bin/bookbinder'] + Dir['bookbinder.gemspec']
|
@@ -17,9 +17,9 @@ Gem::Specification.new do |s|
|
|
17
17
|
s.required_ruby_version = '>= 2.0.0'
|
18
18
|
s.add_runtime_dependency 'fog-aws', ['~> 0.7.1']
|
19
19
|
s.add_runtime_dependency 'ansi', ['~> 1.4']
|
20
|
-
s.add_runtime_dependency 'middleman'
|
21
|
-
s.add_runtime_dependency 'middleman-livereload'
|
22
|
-
s.add_runtime_dependency 'middleman-syntax'
|
20
|
+
s.add_runtime_dependency 'middleman'
|
21
|
+
s.add_runtime_dependency 'middleman-livereload'
|
22
|
+
s.add_runtime_dependency 'middleman-syntax'
|
23
23
|
s.add_runtime_dependency 'rouge', '!= 1.9.1'
|
24
24
|
s.add_runtime_dependency 'redcarpet', ['~> 3.2.3']
|
25
25
|
s.add_runtime_dependency 'css_parser'
|
@@ -31,6 +31,8 @@ Gem::Specification.new do |s|
|
|
31
31
|
s.add_runtime_dependency 'thor'
|
32
32
|
s.add_runtime_dependency 'elasticsearch'
|
33
33
|
s.add_runtime_dependency 'font-awesome-sass'
|
34
|
+
s.add_runtime_dependency 'middleman-sprockets'
|
35
|
+
s.add_runtime_dependency 'middleman-compass'
|
34
36
|
|
35
37
|
s.add_development_dependency 'license_finder'
|
36
38
|
s.add_development_dependency 'pry-byebug'
|
@@ -38,4 +40,5 @@ Gem::Specification.new do |s|
|
|
38
40
|
s.add_development_dependency 'rspec'
|
39
41
|
s.add_development_dependency 'sendgrid-ruby', '< 3.0'
|
40
42
|
s.add_development_dependency 'jasmine'
|
43
|
+
s.add_development_dependency 'rack-test'
|
41
44
|
end
|
data/lib/bookbinder/cli.rb
CHANGED
@@ -33,10 +33,11 @@ module Bookbinder
|
|
33
33
|
|
34
34
|
desc 'bind <local|remote> [options]', 'Bind the sections specified in config.yml from <local> or <remote> into the final_app directory'
|
35
35
|
option :verbose, type: :boolean
|
36
|
+
option :proof, type: :boolean, default: false, desc:'Shows author proof details'
|
36
37
|
option 'dita-flags', desc: '--dita-flags=\"<dita-option>=<value>\"'
|
37
38
|
option :require_valid_subnav_links, type: :boolean, desc: 'Check that subnav link targets exist, always true for remote'
|
38
39
|
def bind(source)
|
39
|
-
code = legacy_commands.bind(source, options[:verbose], options['dita-flags'], options[:require_valid_subnav_links])
|
40
|
+
code = legacy_commands.bind(source, options[:verbose], options['dita-flags'], options[:require_valid_subnav_links], options[:proof])
|
40
41
|
raise Thor::Error, '' if code != 0
|
41
42
|
end
|
42
43
|
|
@@ -30,7 +30,7 @@ module Bookbinder
|
|
30
30
|
@directory_preparer = directory_preparer
|
31
31
|
end
|
32
32
|
|
33
|
-
def run(bind_type, verbose = false, dita_flags = nil, require_valid_subnav_links = false)
|
33
|
+
def run(bind_type, verbose = false, dita_flags = nil, require_valid_subnav_links = false, proof = false)
|
34
34
|
bind_options = Components::CommandOptions.new([bind_type], base_streams, verbose)
|
35
35
|
bind_config = config_fetcher.fetch_config
|
36
36
|
cloner = cloner_factory.produce(bind_options.local_repo_dir)
|
@@ -70,7 +70,8 @@ module Bookbinder
|
|
70
70
|
config: config_decorator.generate(bind_config, sections),
|
71
71
|
local_repo_dir: bind_options.local_repo_dir,
|
72
72
|
subnavs: subnavs(sections),
|
73
|
-
product_info: product_infos(sections)
|
73
|
+
product_info: product_infos(sections),
|
74
|
+
proof: proof
|
74
75
|
)
|
75
76
|
if generation_result.success?
|
76
77
|
file_system_accessor.copy(output_locations.build_dir, output_locations.public_dir)
|
@@ -103,7 +103,7 @@ module Bookbinder
|
|
103
103
|
def find_files_extension_agnostically(pattern, directory='.')
|
104
104
|
extensionless_pattern = File.join(File.dirname(pattern), File.basename(pattern).split('.').first)
|
105
105
|
|
106
|
-
`find -L #{directory} -path '
|
106
|
+
`find -L #{directory} -path '#{directory}/#{extensionless_pattern}.*' -type f`.
|
107
107
|
lines.
|
108
108
|
map(&:chomp).
|
109
109
|
map(&Pathname.method(:new))
|
@@ -16,7 +16,8 @@ module Bookbinder
|
|
16
16
|
config: nil,
|
17
17
|
local_repo_dir: nil,
|
18
18
|
subnavs: nil,
|
19
|
-
product_info: nil
|
19
|
+
product_info: nil,
|
20
|
+
proof: false)
|
20
21
|
streams[:out].puts "\nRunning middleman...\n\n"
|
21
22
|
Dir.chdir(output_locations.master_dir) do
|
22
23
|
config = {
|
@@ -30,7 +31,8 @@ module Bookbinder
|
|
30
31
|
repo_link_enabled: config.repo_link_enabled,
|
31
32
|
repo_links: config.repo_links,
|
32
33
|
product_info: product_info,
|
33
|
-
elastic_search: config.elastic_search
|
34
|
+
elastic_search: config.elastic_search?,
|
35
|
+
proof: proof
|
34
36
|
}
|
35
37
|
|
36
38
|
fs.write(to: "bookbinder_config.yml", text: YAML.dump(config))
|
@@ -12,7 +12,7 @@ module Bookbinder
|
|
12
12
|
|
13
13
|
def preprocess(sections, *args)
|
14
14
|
sections.group_by { |section|
|
15
|
-
processes.detect
|
15
|
+
processes.detect ->{ NullProcess.new } { |process| process.applicable_to?(section) }
|
16
16
|
}.each do |process, grouped_sections|
|
17
17
|
process.preprocess(grouped_sections, *args)
|
18
18
|
end
|
@@ -9,14 +9,14 @@ require_relative 'quicklinks_renderer'
|
|
9
9
|
I18n.enforce_available_locales = false
|
10
10
|
|
11
11
|
module Bookbinder
|
12
|
-
|
13
|
-
class << self
|
14
|
-
|
15
|
-
|
16
|
-
|
12
|
+
class Helpers < ::Middleman::Extension
|
13
|
+
# class << self
|
14
|
+
# def registered(app)
|
15
|
+
# app.helpers HelperMethods
|
16
|
+
# end
|
17
17
|
|
18
|
-
|
19
|
-
end
|
18
|
+
# alias :included :registered
|
19
|
+
# end
|
20
20
|
|
21
21
|
module HelperMethods
|
22
22
|
|
@@ -107,6 +107,10 @@ module Bookbinder
|
|
107
107
|
config[:product_info].fetch(template_key, {})
|
108
108
|
end
|
109
109
|
|
110
|
+
def production_host
|
111
|
+
config[:production_host]
|
112
|
+
end
|
113
|
+
|
110
114
|
def quick_links
|
111
115
|
page_src = File.read(current_page.source_file)
|
112
116
|
quicklinks_renderer = QuicklinksRenderer.new(vars)
|
@@ -139,11 +143,7 @@ module Bookbinder
|
|
139
143
|
private
|
140
144
|
|
141
145
|
def subnav_template_name
|
142
|
-
|
143
|
-
config[:subnav_templates].values.first
|
144
|
-
else
|
145
|
-
config[:subnav_templates][template_key] || 'default'
|
146
|
-
end
|
146
|
+
config[:subnav_templates][template_key] || 'default'
|
147
147
|
end
|
148
148
|
|
149
149
|
def decreasingly_specific_namespaces
|
@@ -254,6 +254,9 @@ module Bookbinder
|
|
254
254
|
content_tag :li, link, :class => css_class
|
255
255
|
end
|
256
256
|
end
|
257
|
+
|
258
|
+
helpers HelperMethods
|
259
|
+
|
257
260
|
end
|
258
261
|
end
|
259
|
-
::Middleman::Extensions.register(:
|
262
|
+
::Middleman::Extensions.register(:bookbinder, Bookbinder::Helpers)
|
data/master_middleman/config.rb
CHANGED
@@ -1,7 +1,11 @@
|
|
1
1
|
require 'bookbinder_helpers'
|
2
|
+
require 'proof'
|
2
3
|
require 'middleman-syntax'
|
3
4
|
require 'middleman-livereload'
|
5
|
+
require 'middleman-sprockets'
|
4
6
|
require 'subdirectory_aware_assets'
|
7
|
+
require 'middleman-compass'
|
8
|
+
require 'font-awesome-sass'
|
5
9
|
|
6
10
|
config = YAML.load_file('bookbinder_config.yml')
|
7
11
|
config.each do |k, v|
|
@@ -25,10 +29,15 @@ set :relative_links, false
|
|
25
29
|
|
26
30
|
page '/owners.json', :layout => false
|
27
31
|
|
28
|
-
activate :
|
32
|
+
activate :bookbinder
|
29
33
|
|
30
|
-
activate :
|
34
|
+
activate :proof
|
31
35
|
|
32
36
|
activate :syntax
|
33
37
|
|
34
38
|
activate :livereload
|
39
|
+
|
40
|
+
activate :sprockets
|
41
|
+
import_path FontAwesome::Sass.fonts_path
|
42
|
+
|
43
|
+
activate :subdirectory_aware_assets
|
@@ -0,0 +1,90 @@
|
|
1
|
+
require 'nokogiri'
|
2
|
+
|
3
|
+
module Bookbinder
|
4
|
+
class Proof < ::Middleman::Extension
|
5
|
+
def initialize(*args)
|
6
|
+
super
|
7
|
+
@blacklist = [
|
8
|
+
%r{\Alayouts/},
|
9
|
+
%r{\Asubnavs/}
|
10
|
+
]
|
11
|
+
end
|
12
|
+
|
13
|
+
def before_build(builder)
|
14
|
+
return unless proofing?
|
15
|
+
builder.instance_variable_set(:@parallel, false)
|
16
|
+
@partials = Hash.new { |h, k| h[k] = [] }
|
17
|
+
@pages = Hash.new { |h, k| h[k] = [] }
|
18
|
+
end
|
19
|
+
|
20
|
+
def after_build(builder)
|
21
|
+
return unless proofing?
|
22
|
+
@partials.values.each(&:uniq!)
|
23
|
+
@pages.values.each(&:uniq!)
|
24
|
+
|
25
|
+
@pages.each do |page_path, partials|
|
26
|
+
full_path = File.join(app.config.build_dir, page_path)
|
27
|
+
page = File.open(full_path) {|file| Nokogiri::HTML file}
|
28
|
+
|
29
|
+
page.css('.partial-notice').each do |node|
|
30
|
+
if node.text =~ /\ABEGIN PARTIAL (.+)\. Partial appears in these topics:\z/
|
31
|
+
partial_name = $1
|
32
|
+
all_files_using_partial = @partials[partial_name]
|
33
|
+
|
34
|
+
list = page.create_element('ul')
|
35
|
+
all_files_using_partial.each do |file_name|
|
36
|
+
li = list.add_child(page.create_element('li'))
|
37
|
+
link = li.add_child(page.create_element('a', file_name, href: "/#{file_name}"))
|
38
|
+
end
|
39
|
+
|
40
|
+
node.add_child(list)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
File.open(full_path, 'w') { |file| file.puts page.to_html }
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
expose_to_template :proofing?
|
49
|
+
expose_to_template :track_partial
|
50
|
+
|
51
|
+
helpers do
|
52
|
+
def partial(template, *args)
|
53
|
+
contents = [super]
|
54
|
+
|
55
|
+
if proofing?
|
56
|
+
dir, name = File.split(template)
|
57
|
+
partial_template = File.join(dir, "_#{name}")
|
58
|
+
template_obj = locate_partial(partial_template, false) || locate_partial(partial_template, true)
|
59
|
+
template_path = template_obj.relative_path.to_s
|
60
|
+
|
61
|
+
if track_partial(template_path, current_resource.path)
|
62
|
+
contents.unshift %Q{<div class="partial-notice">BEGIN PARTIAL #{template_path}. Partial appears in these topics:</div>}
|
63
|
+
contents.push %Q{<div class="partial-notice">END PARTIAL #{template_path}</div>}
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
contents.join('')
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def track_partial(template, page)
|
72
|
+
result = !blacklisted?(template)
|
73
|
+
if result
|
74
|
+
@partials[template] << page
|
75
|
+
@pages[page] << template
|
76
|
+
end
|
77
|
+
result
|
78
|
+
end
|
79
|
+
|
80
|
+
def proofing?
|
81
|
+
!!app.config[:proof]
|
82
|
+
end
|
83
|
+
|
84
|
+
def blacklisted?(template)
|
85
|
+
@blacklist.any? { |matcher| matcher.match template }
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
::Middleman::Extensions.register(:proof, Bookbinder::Proof)
|
@@ -43,6 +43,17 @@
|
|
43
43
|
return [MONTHS[date.getMonth()], ' ', date.getDate(), ', ', date.getFullYear()].join('');
|
44
44
|
}
|
45
45
|
|
46
|
+
function maybeOpenNewWindow(e) {
|
47
|
+
var el = e.currentTarget;
|
48
|
+
var href = el.href;
|
49
|
+
|
50
|
+
if (Bookbinder.needsNewWindow(e, href, window.location.host)) {
|
51
|
+
e.preventDefault();
|
52
|
+
e.stopPropagation();
|
53
|
+
window.open(href);
|
54
|
+
}
|
55
|
+
}
|
56
|
+
|
46
57
|
window.Bookbinder = {
|
47
58
|
startSidenav: function(rootEl, currentPath) {
|
48
59
|
if (!rootEl) { return; }
|
@@ -93,11 +104,27 @@
|
|
93
104
|
datesElements[i].innerText = displayDate(datesElements[i].getAttribute('data-modified-date'));
|
94
105
|
}
|
95
106
|
},
|
107
|
+
externalLinks: function(root) {
|
108
|
+
var links = root.querySelectorAll('a[href]');
|
109
|
+
|
110
|
+
for (var i = 0; i < links.length; i++) {
|
111
|
+
registerOnClick(links[i], maybeOpenNewWindow);
|
112
|
+
}
|
113
|
+
},
|
114
|
+
needsNewWindow: function(e, destinationUrl, currentDomain) {
|
115
|
+
if (e.button !== 0 || e.ctrlKey || e.altKey || e.shiftKey || e.metaKey) {
|
116
|
+
return false;
|
117
|
+
}
|
118
|
+
|
119
|
+
var destinationDomain = destinationUrl.replace(/^https?:\/\//, '').split('/')[0];
|
120
|
+
return destinationDomain !== currentDomain;
|
121
|
+
},
|
96
122
|
boot: function() {
|
97
123
|
Bookbinder.startSidenav(document.querySelector('#sub-nav'), document.location.pathname);
|
98
124
|
Bookbinder.mobileMainMenu(document);
|
99
125
|
Bookbinder.mobileSubMenu(document);
|
100
126
|
Bookbinder.modifiedDates(document);
|
127
|
+
Bookbinder.externalLinks(document);
|
101
128
|
}
|
102
129
|
};
|
103
130
|
})();
|
@@ -8,8 +8,8 @@
|
|
8
8
|
<link href='https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,300italic,400italic,400,600' rel='stylesheet' type='text/css'>
|
9
9
|
<!-- Use title if it's in the page YAML frontmatter -->
|
10
10
|
<title>
|
11
|
-
<% if data.
|
12
|
-
<%= data.
|
11
|
+
<% if current_page.data.title %>
|
12
|
+
<%= current_page.data.title %> |
|
13
13
|
<% end %>
|
14
14
|
<%= vars.book_title_short %>
|
15
15
|
</title>
|
@@ -43,7 +43,7 @@
|
|
43
43
|
<%= partial 'layouts/local-header' %>
|
44
44
|
<%= partial 'layouts/title' %>
|
45
45
|
<% if quick_links %>
|
46
|
-
<div id="js-quick-links" <%= 'class="list-style-none"' if data.
|
46
|
+
<div id="js-quick-links" <%= 'class="list-style-none"' if current_page.data.list_style_none %>>
|
47
47
|
<%= quick_links %>
|
48
48
|
</div>
|
49
49
|
<% end %>
|
@@ -14,7 +14,6 @@
|
|
14
14
|
@import "partials/search";
|
15
15
|
@import "partials/sidenav";
|
16
16
|
|
17
|
-
|
18
17
|
// ~LAYOUT
|
19
18
|
// ===================================================
|
20
19
|
.container {
|
@@ -378,3 +377,12 @@ category: basics
|
|
378
377
|
.index .to-top {
|
379
378
|
display: none;
|
380
379
|
}
|
380
|
+
|
381
|
+
.partial-notice {
|
382
|
+
color: red;
|
383
|
+
font-size: $font-size-m;
|
384
|
+
|
385
|
+
ul {
|
386
|
+
font-size: $font-size-s;
|
387
|
+
}
|
388
|
+
}
|
File without changes
|
File without changes
|
File without changes
|
@@ -38,15 +38,12 @@ pre, pre code {
|
|
38
38
|
overflow: visible;
|
39
39
|
}
|
40
40
|
|
41
|
-
.pivotalcf .logo {
|
42
|
-
background: none;
|
43
|
-
padding-left: 0;
|
44
|
-
}
|
45
41
|
|
46
42
|
.quick-links,
|
47
43
|
.nav-container,
|
48
44
|
.header,
|
49
45
|
.site-footer-links,
|
46
|
+
#repo-link,
|
50
47
|
#feedback {
|
51
48
|
display: none;
|
52
49
|
}
|
@@ -56,3 +53,5 @@ h1 {
|
|
56
53
|
font-size: $font-size-l;
|
57
54
|
}
|
58
55
|
|
56
|
+
@import "print-layout-styles";
|
57
|
+
@import "print-book-styles";
|
@@ -1,15 +1,6 @@
|
|
1
1
|
class SubdirectoryAwareAssets < ::Middleman::Extension
|
2
|
-
def initialize(app, options_hash={}, &block)
|
3
|
-
super
|
4
|
-
|
5
|
-
# After compass is setup, make it use the registered cache buster
|
6
|
-
app.compass_config do |config|
|
7
|
-
config.relative_assets = true
|
8
|
-
end if app.respond_to?(:compass_config)
|
9
|
-
end
|
10
|
-
|
11
2
|
helpers do
|
12
|
-
def
|
3
|
+
def asset_path(path, prefix="", options={})
|
13
4
|
url = super(path, prefix, options)
|
14
5
|
|
15
6
|
unless global_asset_at? url
|
@@ -43,5 +34,3 @@ class SubdirectoryAwareAssets < ::Middleman::Extension
|
|
43
34
|
end
|
44
35
|
|
45
36
|
::Middleman::Extensions.register(:subdirectory_aware_assets, SubdirectoryAwareAssets)
|
46
|
-
|
47
|
-
|
data/template_app/Gemfile
CHANGED
data/template_app/Gemfile.lock
CHANGED
@@ -1,30 +1,30 @@
|
|
1
1
|
GEM
|
2
2
|
remote: http://rubygems.org/
|
3
3
|
specs:
|
4
|
-
elasticsearch (
|
5
|
-
elasticsearch-api (=
|
6
|
-
elasticsearch-transport (=
|
7
|
-
elasticsearch-api (
|
4
|
+
elasticsearch (2.0.0)
|
5
|
+
elasticsearch-api (= 2.0.0)
|
6
|
+
elasticsearch-transport (= 2.0.0)
|
7
|
+
elasticsearch-api (2.0.0)
|
8
8
|
multi_json
|
9
|
-
elasticsearch-transport (
|
9
|
+
elasticsearch-transport (2.0.0)
|
10
10
|
faraday
|
11
11
|
multi_json
|
12
12
|
faraday (0.9.2)
|
13
13
|
multipart-post (>= 1.2, < 3)
|
14
|
-
libv8 (3.16.14.
|
15
|
-
mimemagic (0.3.
|
16
|
-
multi_json (1.
|
14
|
+
libv8 (3.16.14.15)
|
15
|
+
mimemagic (0.3.2)
|
16
|
+
multi_json (1.12.1)
|
17
17
|
multipart-post (2.0.0)
|
18
|
-
puma (3.
|
19
|
-
rack (
|
20
|
-
rack-rewrite (1.5.
|
21
|
-
ref (
|
22
|
-
sendgrid-ruby (1.1.
|
18
|
+
puma (3.6.0)
|
19
|
+
rack (2.0.1)
|
20
|
+
rack-rewrite (1.5.1)
|
21
|
+
ref (2.0.0)
|
22
|
+
sendgrid-ruby (1.1.6)
|
23
23
|
faraday (~> 0.9)
|
24
24
|
mimemagic
|
25
25
|
smtpapi (~> 0.1)
|
26
26
|
smtpapi (0.1.0)
|
27
|
-
therubyracer (0.12.
|
27
|
+
therubyracer (0.12.2)
|
28
28
|
libv8 (~> 3.16.14.0)
|
29
29
|
ref
|
30
30
|
|
@@ -40,7 +40,7 @@ DEPENDENCIES
|
|
40
40
|
therubyracer
|
41
41
|
|
42
42
|
RUBY VERSION
|
43
|
-
ruby 2.
|
43
|
+
ruby 2.3.0p0
|
44
44
|
|
45
45
|
BUNDLED WITH
|
46
|
-
1.
|
46
|
+
1.12.5
|
@@ -35,12 +35,38 @@ module Bookbinder
|
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
|
+
def extract_elasticsearch_url(services_hash)
|
39
|
+
user_provided = get_user_provided(services_hash)
|
40
|
+
return user_provided if user_provided
|
41
|
+
|
42
|
+
searchly = get_searchly(services_hash)
|
43
|
+
return searchly if searchly
|
44
|
+
|
45
|
+
raise 'No Elasticsearch configured!'
|
46
|
+
end
|
47
|
+
|
38
48
|
private
|
39
49
|
|
40
50
|
attr_reader :renderer, :client_class, :environment
|
41
51
|
|
42
52
|
def elasticsearch_url
|
43
|
-
@elasticsearch_url ||= JSON.parse(environment['VCAP_SERVICES'])
|
53
|
+
@elasticsearch_url ||= extract_elasticsearch_url(JSON.parse(environment['VCAP_SERVICES']))
|
54
|
+
end
|
55
|
+
|
56
|
+
def get_user_provided(services_hash)
|
57
|
+
return nil unless services_hash.has_key?('user-provided')
|
58
|
+
|
59
|
+
elastic = services_hash['user-provided'].detect { |service| service['name'] == 'elastic.co' }
|
60
|
+
|
61
|
+
return nil unless elastic
|
62
|
+
|
63
|
+
elastic['credentials']['sslUri']
|
64
|
+
end
|
65
|
+
|
66
|
+
def get_searchly(services_hash)
|
67
|
+
return nil unless services_hash.has_key?('searchly')
|
68
|
+
|
69
|
+
services_hash['searchly'][0]['credentials']['sslUri']
|
44
70
|
end
|
45
71
|
end
|
46
72
|
end
|
@@ -1,7 +1,13 @@
|
|
1
1
|
<%
|
2
|
+
require 'rack'
|
3
|
+
require 'uri'
|
2
4
|
def escape_html(str)
|
3
5
|
Rack::Utils.escape_html(str)
|
4
6
|
end
|
7
|
+
|
8
|
+
def uri_escape(str)
|
9
|
+
URI.escape(str, Regexp.new("[^#{URI::PATTERN::UNRESERVED}]"))
|
10
|
+
end
|
5
11
|
%>
|
6
12
|
|
7
13
|
<div class="search-results">
|
@@ -44,9 +50,9 @@ end
|
|
44
50
|
</ul>
|
45
51
|
|
46
52
|
<div class="pagination">
|
47
|
-
<% search_query = "/search?q=#{ search_term }" %>
|
48
|
-
<% search_query << "&product_name=#{ product_name }" unless product_name.nil? %>
|
49
|
-
<% search_query << "&product_version=#{ product_version }" unless product_version.nil? %>
|
53
|
+
<% search_query = "/search?q=#{ uri_escape search_term }" %>
|
54
|
+
<% search_query << "&product_name=#{ uri_escape product_name }" unless product_name.nil? %>
|
55
|
+
<% search_query << "&product_version=#{ uri_escape product_version }" unless product_version.nil? %>
|
50
56
|
<% if page_number == 1 %>
|
51
57
|
<span class="disabled page first">First</span>
|
52
58
|
<span class="disabled page previous">Prev</span>
|
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:
|
4
|
+
version: 10.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Grafton
|
@@ -19,10 +19,11 @@ authors:
|
|
19
19
|
- Alpha Chen
|
20
20
|
- Sarah McAlear
|
21
21
|
- Gregg Van Hove
|
22
|
+
- Jess B Heron
|
22
23
|
autorequire:
|
23
24
|
bindir: install_bin
|
24
25
|
cert_chain: []
|
25
|
-
date:
|
26
|
+
date: 2016-08-29 00:00:00.000000000 Z
|
26
27
|
dependencies:
|
27
28
|
- !ruby/object:Gem::Dependency
|
28
29
|
name: fog-aws
|
@@ -56,44 +57,44 @@ dependencies:
|
|
56
57
|
name: middleman
|
57
58
|
requirement: !ruby/object:Gem::Requirement
|
58
59
|
requirements:
|
59
|
-
- - "
|
60
|
+
- - ">="
|
60
61
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
62
|
+
version: '0'
|
62
63
|
type: :runtime
|
63
64
|
prerelease: false
|
64
65
|
version_requirements: !ruby/object:Gem::Requirement
|
65
66
|
requirements:
|
66
|
-
- - "
|
67
|
+
- - ">="
|
67
68
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
69
|
+
version: '0'
|
69
70
|
- !ruby/object:Gem::Dependency
|
70
71
|
name: middleman-livereload
|
71
72
|
requirement: !ruby/object:Gem::Requirement
|
72
73
|
requirements:
|
73
|
-
- - "
|
74
|
+
- - ">="
|
74
75
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
76
|
+
version: '0'
|
76
77
|
type: :runtime
|
77
78
|
prerelease: false
|
78
79
|
version_requirements: !ruby/object:Gem::Requirement
|
79
80
|
requirements:
|
80
|
-
- - "
|
81
|
+
- - ">="
|
81
82
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
83
|
+
version: '0'
|
83
84
|
- !ruby/object:Gem::Dependency
|
84
85
|
name: middleman-syntax
|
85
86
|
requirement: !ruby/object:Gem::Requirement
|
86
87
|
requirements:
|
87
|
-
- - "
|
88
|
+
- - ">="
|
88
89
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
90
|
+
version: '0'
|
90
91
|
type: :runtime
|
91
92
|
prerelease: false
|
92
93
|
version_requirements: !ruby/object:Gem::Requirement
|
93
94
|
requirements:
|
94
|
-
- - "
|
95
|
+
- - ">="
|
95
96
|
- !ruby/object:Gem::Version
|
96
|
-
version: '
|
97
|
+
version: '0'
|
97
98
|
- !ruby/object:Gem::Dependency
|
98
99
|
name: rouge
|
99
100
|
requirement: !ruby/object:Gem::Requirement
|
@@ -248,6 +249,34 @@ dependencies:
|
|
248
249
|
- - ">="
|
249
250
|
- !ruby/object:Gem::Version
|
250
251
|
version: '0'
|
252
|
+
- !ruby/object:Gem::Dependency
|
253
|
+
name: middleman-sprockets
|
254
|
+
requirement: !ruby/object:Gem::Requirement
|
255
|
+
requirements:
|
256
|
+
- - ">="
|
257
|
+
- !ruby/object:Gem::Version
|
258
|
+
version: '0'
|
259
|
+
type: :runtime
|
260
|
+
prerelease: false
|
261
|
+
version_requirements: !ruby/object:Gem::Requirement
|
262
|
+
requirements:
|
263
|
+
- - ">="
|
264
|
+
- !ruby/object:Gem::Version
|
265
|
+
version: '0'
|
266
|
+
- !ruby/object:Gem::Dependency
|
267
|
+
name: middleman-compass
|
268
|
+
requirement: !ruby/object:Gem::Requirement
|
269
|
+
requirements:
|
270
|
+
- - ">="
|
271
|
+
- !ruby/object:Gem::Version
|
272
|
+
version: '0'
|
273
|
+
type: :runtime
|
274
|
+
prerelease: false
|
275
|
+
version_requirements: !ruby/object:Gem::Requirement
|
276
|
+
requirements:
|
277
|
+
- - ">="
|
278
|
+
- !ruby/object:Gem::Version
|
279
|
+
version: '0'
|
251
280
|
- !ruby/object:Gem::Dependency
|
252
281
|
name: license_finder
|
253
282
|
requirement: !ruby/object:Gem::Requirement
|
@@ -332,6 +361,20 @@ dependencies:
|
|
332
361
|
- - ">="
|
333
362
|
- !ruby/object:Gem::Version
|
334
363
|
version: '0'
|
364
|
+
- !ruby/object:Gem::Dependency
|
365
|
+
name: rack-test
|
366
|
+
requirement: !ruby/object:Gem::Requirement
|
367
|
+
requirements:
|
368
|
+
- - ">="
|
369
|
+
- !ruby/object:Gem::Version
|
370
|
+
version: '0'
|
371
|
+
type: :development
|
372
|
+
prerelease: false
|
373
|
+
version_requirements: !ruby/object:Gem::Requirement
|
374
|
+
requirements:
|
375
|
+
- - ">="
|
376
|
+
- !ruby/object:Gem::Version
|
377
|
+
version: '0'
|
335
378
|
description: A command line utility to be run in Book repositories to stitch together
|
336
379
|
their constituent Markdown repos into a static-HTML-serving application
|
337
380
|
email: gmorgan@gopivotal.com
|
@@ -417,6 +460,7 @@ files:
|
|
417
460
|
- master_middleman/bookbinder_helpers.rb
|
418
461
|
- master_middleman/compass_runner.rb
|
419
462
|
- master_middleman/config.rb
|
463
|
+
- master_middleman/proof.rb
|
420
464
|
- master_middleman/quicklinks_renderer.rb
|
421
465
|
- master_middleman/source/javascripts/all.js
|
422
466
|
- master_middleman/source/javascripts/book.js
|
@@ -432,7 +476,7 @@ files:
|
|
432
476
|
- master_middleman/source/layouts/layout.erb
|
433
477
|
- master_middleman/source/stylesheets/all.css.scss
|
434
478
|
- master_middleman/source/stylesheets/base.scss
|
435
|
-
- master_middleman/source/stylesheets/book-styles.
|
479
|
+
- master_middleman/source/stylesheets/book-styles.scss
|
436
480
|
- master_middleman/source/stylesheets/layout-styles.scss
|
437
481
|
- master_middleman/source/stylesheets/partials/_book-base-values.scss
|
438
482
|
- master_middleman/source/stylesheets/partials/_book-vars.scss
|
@@ -446,6 +490,8 @@ files:
|
|
446
490
|
- master_middleman/source/stylesheets/partials/_sidenav.scss
|
447
491
|
- master_middleman/source/stylesheets/partials/_syntax-highlight.scss
|
448
492
|
- master_middleman/source/stylesheets/partials/_vars.scss
|
493
|
+
- master_middleman/source/stylesheets/print-book-styles.scss
|
494
|
+
- master_middleman/source/stylesheets/print-layout-styles.scss
|
449
495
|
- master_middleman/source/stylesheets/print.css.scss
|
450
496
|
- master_middleman/source/subnavs/_default.erb
|
451
497
|
- master_middleman/source/subnavs/_nav-links.erb
|