-
Notifications
You must be signed in to change notification settings - Fork 38
/
Copy pathgovuk_tech_docs.rb
125 lines (102 loc) · 3.7 KB
/
govuk_tech_docs.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
require "govuk_tech_docs/version"
require "middleman"
require "middleman-autoprefixer"
require "middleman-sprockets"
require "middleman-livereload"
require "middleman-syntax"
require "middleman-search"
require "nokogiri"
require "chronic"
require "active_support/all"
require "govuk_tech_docs/redirects"
require "govuk_tech_docs/table_of_contents/helpers"
require "govuk_tech_docs/contribution_banner"
require "govuk_tech_docs/meta_tags"
require "govuk_tech_docs/page_review"
require "govuk_tech_docs/pages"
require "govuk_tech_docs/tech_docs_html_renderer"
require "govuk_tech_docs/unique_identifier_extension"
require "govuk_tech_docs/unique_identifier_generator"
require "govuk_tech_docs/warning_text_extension"
require "govuk_tech_docs/api_reference/api_reference_extension"
module GovukTechDocs
# Configure the tech docs template
#
# @param options [Hash]
# @option options [Hash] livereload Options to pass to the `livereload`
# extension. Hash with symbols as keys.
def self.configure(context, options = {})
context.activate :sprockets
context.sprockets.append_path File.join(__dir__, "../node_modules/govuk-frontend/")
context.sprockets.append_path File.join(__dir__, "./source")
context.activate :syntax
context.files.watch :source, path: "#{__dir__}/source"
context.set :markdown_engine, :redcarpet
context.set :markdown,
renderer: TechDocsHTMLRenderer.new(
with_toc_data: true,
api: true,
context: context,
),
fenced_code_blocks: true,
tables: true,
no_intra_emphasis: true
# Reload the browser automatically whenever files change
context.configure :development do
activate :livereload, options[:livereload].to_h
end
context.configure :build do
activate :autoprefixer
activate :minify_javascript, ignore: ["/raw_assets/*"]
end
config_file = ENV.fetch("CONFIG_FILE", "config/tech-docs.yml")
context.config[:tech_docs] = YAML.load_file(config_file).with_indifferent_access
context.activate :unique_identifier
context.activate :warning_text
context.activate :api_reference
context.helpers do
include GovukTechDocs::PathHelpers
include GovukTechDocs::TableOfContents::Helpers
include GovukTechDocs::ContributionBanner
def meta_tags
@meta_tags ||= GovukTechDocs::MetaTags.new(config, current_page)
end
def current_page_review
@current_page_review ||= GovukTechDocs::PageReview.new(current_page, config)
end
def format_date(date)
date.strftime("%-e %B %Y")
end
def active_page(page_path)
[
page_path == "/" && current_page.path == "index.html",
("/" + current_page.path) == page_path,
current_page.data.parent != nil && current_page.data.parent.to_s == page_path,
].any?
end
end
context.page "/*.xml", layout: false
context.page "/*.json", layout: false
context.page "/*.txt", layout: false
context.ready do
redirects = GovukTechDocs::Redirects.new(context).redirects
redirects.each do |from, to|
context.redirect from, to
end
end
if context.config[:tech_docs][:enable_search]
context.activate :search do |search|
search.resources = [""]
search.fields = {
title: { boost: 100, store: true, required: true },
content: { boost: 50, store: true },
url: { index: false, store: true },
}
search.pipeline_remove = %w[stemmer stopWordFilter]
search.tokenizer_separator = '/[\s\-/]+/'
end
else
context.ignore "search/*"
end
end
end