govuk_tech_docs 2.4.1 → 3.0.1

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 (34) hide show
  1. checksums.yaml +4 -4
  2. data/.github/ISSUE_TEMPLATE.md +13 -0
  3. data/.github/pull_request_template.md +14 -1
  4. data/.github/workflows/publish.yaml +76 -0
  5. data/.github/workflows/test.yaml +23 -0
  6. data/.nvmrc +1 -1
  7. data/CHANGELOG.md +34 -0
  8. data/README.md +15 -1
  9. data/example/config/tech-docs.yml +1 -0
  10. data/example/source/single-page-nav.html.md +13 -0
  11. data/lib/assets/javascripts/_modules/search.js +59 -66
  12. data/lib/assets/javascripts/_modules/table-of-contents.js +0 -1
  13. data/lib/assets/javascripts/_vendor/jquery.js +2 -5
  14. data/lib/assets/javascripts/_vendor/lodash.js +5 -3
  15. data/lib/assets/stylesheets/modules/_search.scss +51 -73
  16. data/lib/assets/stylesheets/modules/_technical-documentation.scss +0 -4
  17. data/lib/assets/stylesheets/modules/_toc.scss +0 -3
  18. data/lib/govuk_tech_docs/api_reference/api_reference_renderer.rb +10 -0
  19. data/lib/govuk_tech_docs/api_reference/templates/api_reference_full.html.erb +2 -2
  20. data/lib/govuk_tech_docs/api_reference/templates/operation.html.erb +1 -1
  21. data/lib/govuk_tech_docs/api_reference/templates/parameters.html.erb +1 -1
  22. data/lib/govuk_tech_docs/api_reference/templates/responses.html.erb +1 -1
  23. data/lib/govuk_tech_docs/api_reference/templates/schema.html.erb +2 -2
  24. data/lib/govuk_tech_docs/contribution_banner.rb +8 -2
  25. data/lib/govuk_tech_docs/table_of_contents/helpers.rb +16 -8
  26. data/lib/govuk_tech_docs/version.rb +1 -1
  27. data/lib/govuk_tech_docs.rb +3 -1
  28. data/lib/source/layouts/_search.erb +0 -7
  29. data/lib/source/layouts/layout.erb +3 -1
  30. data/lib/source/search/index.html.erb +31 -0
  31. data/package-lock.json +3 -3
  32. metadata +11 -8
  33. data/.travis.yml +0 -19
  34. data/CONTRIBUTING.md +0 -12
@@ -52,48 +52,44 @@ $input-size: 40px;
52
52
  }
53
53
  }
54
54
 
55
- html.has-search-results-open {
56
- overflow: hidden;
57
- .app-pane__content {
58
- overflow: hidden;
59
- }
60
-
61
- .toc__close{
62
- display: none;
55
+ @include govuk-media-query($until: tablet) {
56
+ html.js.has-search-results-open:not(.toc-open) {
57
+ .toc {
58
+ display: block;
59
+ padding-bottom: 0;
60
+ }
61
+
62
+ .toc__close {
63
+ display: none;
64
+ }
65
+
66
+ .toc__list {
67
+ display: none;
68
+ }
63
69
  }
64
70
  }
71
+
65
72
  .search-results {
66
- display: none;
67
- &.is-open {
68
- display: block;
73
+ @include govuk-media-query(tablet) {
74
+ // Create basis for the search results caret (below)
75
+ position: relative;
76
+
77
+ @include govuk-font($size: 16);
78
+ padding-top: govuk-spacing(6);
69
79
  }
70
- }
71
80
 
72
- .search-results {
73
- position: absolute;
74
- top: 60px;
75
- left: 0;
76
- right: 0;
77
- bottom: 0;
78
- z-index: 600;
79
- overflow-x: scroll;
80
- -webkit-overflow-scrolling: touch;
81
- -ms-overflow-style: none;
82
- @include govuk-media-query(tablet) {
83
- padding: govuk-spacing(6);
84
- top: 0;
85
- // The width of the sidebar
86
- left: 330px;
87
- min-height: auto;
88
- }
81
+ a {
82
+ @include govuk-link-common;
83
+ @include govuk-link-style-no-visited-state;
84
+ }
89
85
 
90
- a {
91
- @include govuk-link-common;
92
- @include govuk-link-style-no-visited-state;
93
- }
86
+ ul {
87
+ list-style: none;
88
+ padding: 0;
89
+ margin: 0;
94
90
  }
91
+ }
95
92
  .search-results__inner {
96
- position: relative;
97
93
  background: govuk-colour("white");
98
94
  border-top: 1px solid govuk-colour("mid-grey");
99
95
  max-width: 40rem;
@@ -104,7 +100,7 @@ html.has-search-results-open {
104
100
  &::after {
105
101
  content: '';
106
102
  position: absolute;
107
- top: 10px;
103
+ top: 35px;
108
104
  left: -9px;
109
105
  width: 10px;
110
106
  height: 20px;
@@ -117,44 +113,6 @@ html.has-search-results-open {
117
113
  @include govuk-font($size: 27, $weight: bold);
118
114
  margin-bottom: govuk-spacing(6);
119
115
  }
120
- .search-results__close {
121
- @include govuk-font($size: 16);
122
- position: absolute;
123
- top: 18px;
124
- right: 20px;
125
- appearance: none;
126
- -webkit-appearance: none;
127
- background: none;
128
- border: 0;
129
- padding: 0;
130
- cursor: pointer;
131
-
132
- &:focus {
133
- @include govuk-focused-text;
134
- }
135
-
136
- &::after {
137
- content: '';
138
- display: inline-block;
139
- vertical-align: middle;
140
- padding-left: 8px;
141
- height: 18px;
142
- width: 18px;
143
- background: no-repeat url('/images/govuk-icn-close.png') center right;
144
- @include govuk-device-pixel-ratio {
145
- background-image: url('/images/govuk-icn-close@2x.png');
146
- }
147
- background-size: contain;
148
- }
149
- }
150
- .search-results__close-label {
151
- position: absolute;
152
- left: -9999em;
153
- top: auto;
154
- width: 1px;
155
- height: 1px;
156
- overflow: hidden;
157
- }
158
116
  .search-result {
159
117
  margin-bottom: govuk-spacing(6);
160
118
  }
@@ -162,4 +120,24 @@ html.has-search-results-open {
162
120
  background-color: transparent;
163
121
  color: inherit;
164
122
  font-weight: bold;
123
+
124
+ // In forced color mode some browsers will keep the background transparent
125
+ // but set the text colour black, making the highlighted text unreadable.
126
+ // The following blocks fix this by setting the text colour to be the same as
127
+ // other text in a way that forced color mode will respect.
128
+
129
+ @media screen and (-ms-high-contrast: active) {
130
+ // IE does not support `CanvasText`,
131
+ // and `currentColor` does not work with Blink
132
+ color: currentColor;
133
+ }
134
+
135
+ @media screen and (forced-colors: active) {
136
+ background-color: Canvas; // needed for Firefox
137
+ color: CanvasText;
138
+ }
139
+ }
140
+
141
+ .js .search-help__no-js {
142
+ display: none;
165
143
  }
@@ -11,10 +11,6 @@
11
11
  margin: 0 govuk-spacing(6) govuk-spacing(6);
12
12
  }
13
13
 
14
- .has-search-results-open & {
15
- visibility: hidden;
16
- }
17
-
18
14
  > h1 {
19
15
  @extend %govuk-heading-xl;
20
16
 
@@ -165,9 +165,6 @@
165
165
 
166
166
  .toc__list {
167
167
  margin-right: govuk-spacing(7);
168
- &.search-results-open {
169
- display: none;
170
- }
171
168
  }
172
169
 
173
170
  .toc__close {
@@ -7,6 +7,7 @@ module GovukTechDocs
7
7
  def initialize(app, document)
8
8
  @app = app
9
9
  @document = document
10
+ @redcarpet = build_redcarpet(app)
10
11
 
11
12
  # Load template files
12
13
  @template_api_full = get_renderer("api_reference_full.html.erb")
@@ -137,6 +138,11 @@ module GovukTechDocs
137
138
 
138
139
  private
139
140
 
141
+ def build_redcarpet(app)
142
+ renderer = GovukTechDocs::TechDocsHTMLRenderer.new(context: app.config_context)
143
+ Redcarpet::Markdown.new(renderer)
144
+ end
145
+
140
146
  def get_renderer(file)
141
147
  template_path = File.join(File.dirname(__FILE__), "templates/" + file)
142
148
  template = File.open(template_path, "r").read
@@ -159,6 +165,10 @@ module GovukTechDocs
159
165
  id = "schema-#{schema.name.parameterize}"
160
166
  "<a href='\##{id}'>#{schema.name}</a>"
161
167
  end
168
+
169
+ def render_markdown(text)
170
+ @redcarpet.render(text) if text
171
+ end
162
172
  end
163
173
  end
164
174
  end
@@ -1,5 +1,5 @@
1
1
  <h1 id="<%= info.title.parameterize %>"><%= info.title %> v<%= info.version %></h1>
2
- <%= info.description_html %>
2
+ <%= render_markdown(info.description) %>
3
3
 
4
4
  <%# OpenAPI files default to having a single server of URL "/" %>
5
5
  <% if servers.length > 1 || servers[0].url != "/" %>
@@ -7,7 +7,7 @@
7
7
  <div id="server-list">
8
8
  <% servers.each do |server| %>
9
9
  <% if server.description %>
10
- <p><strong><%= server.description %></strong></p>
10
+ <p><strong><%= render_markdown(server.description) %></strong></p>
11
11
  <% end %>
12
12
  <a href="<%= server.url %>"><%= server.url %></a>
13
13
  <% end %>
@@ -3,7 +3,7 @@
3
3
  <p><em><%= operation.summary %></em></p>
4
4
  <% end %>
5
5
  <% if operation.description %>
6
- <%= operation.description_html %>
6
+ <%= render_markdown(operation.description) %>
7
7
  <% end %>
8
8
 
9
9
  <%= parameters %>
@@ -11,7 +11,7 @@
11
11
  <td><%= parameter.in %></td>
12
12
  <td><%= parameter.schema.type %></td>
13
13
  <td><%= parameter.required? %></td>
14
- <td><%= parameter.description_html %>
14
+ <td><%= render_markdown(parameter.description) %>
15
15
  <% if parameter.schema.enum %>
16
16
  <p>Available items:</p>
17
17
  <ul>
@@ -9,7 +9,7 @@
9
9
  <tr>
10
10
  <td><%= key %></td>
11
11
  <td>
12
- <%= response.description_html %>
12
+ <%= render_markdown(response.description) %>
13
13
  <% if response.content['application/json']
14
14
  if response.content['application/json']["example"]
15
15
  request_body = json_prettyprint(response.content['application/json']["example"])
@@ -1,5 +1,5 @@
1
1
  <h3 id="<%= id = 'schema-' + title; id.parameterize %>"><%= title %></h3>
2
- <%= schema.description_html %>
2
+ <%= render_markdown(schema.description) %>
3
3
  <% if properties.any? %>
4
4
  <table class='<%= id.parameterize %>'>
5
5
  <thead>
@@ -11,7 +11,7 @@
11
11
  <td><%= property_name %></td>
12
12
  <td><%= property_attributes.type %></td>
13
13
  <td><%= schema.requires?(property_name) %></td>
14
- <td><%= property_attributes.description_html %></td>
14
+ <td><%= render_markdown(property_attributes.description) %></td>
15
15
  <td>
16
16
  <%=
17
17
  linked_schema = property_attributes
@@ -20,12 +20,18 @@ module GovukTechDocs
20
20
 
21
21
  def report_issue_url
22
22
  url = config[:source_urls]&.[](:report_issue_url)
23
+ params = {
24
+ body: "Problem with '#{current_page.data.title}' (#{config[:tech_docs][:host]}#{current_page.url})",
25
+ }
23
26
 
24
27
  if url.nil?
25
- "#{repo_url}/issues/new?labels=bug&title=Re: '#{current_page.data.title}'&body=Problem with '#{current_page.data.title}' (#{config[:tech_docs][:host]}#{current_page.url})"
28
+ url = "#{repo_url}/issues/new"
29
+ params["labels"] = "bug"
30
+ params["title"] = "Re: '#{current_page.data.title}'"
26
31
  else
27
- "#{url}?subject=Re: '#{current_page.data.title}'&body=Problem with '#{current_page.data.title}' (#{config[:tech_docs][:host]}#{current_page.url})"
32
+ params["subject"] = "Re: '#{current_page.data.title}'"
28
33
  end
34
+ "#{url}?#{URI.encode_www_form(params)}"
29
35
  end
30
36
 
31
37
  def repo_url
@@ -8,14 +8,11 @@ module GovukTechDocs
8
8
  module TableOfContents
9
9
  module Helpers
10
10
  def single_page_table_of_contents(html, url: "", max_level: nil)
11
- headings = HeadingsBuilder.new(html, url).headings
12
-
13
- if headings.none? { |heading| heading.size == 1 }
14
- raise "No H1 tag found. You have to at least add one H1 heading to the page: " + url
15
- end
11
+ output = "<ul>\n"
12
+ output += list_items_from_headings(html, url: url, max_level: max_level)
13
+ output += "</ul>\n"
16
14
 
17
- tree = HeadingTreeBuilder.new(headings).tree
18
- HeadingTreeRenderer.new(tree, max_level: max_level).html
15
+ output
19
16
  end
20
17
 
21
18
  def multi_page_table_of_contents(resources, current_page, config, current_page_html = nil)
@@ -28,6 +25,17 @@ module GovukTechDocs
28
25
  render_page_tree(resources, current_page, config, current_page_html)
29
26
  end
30
27
 
28
+ def list_items_from_headings(html, url: "", max_level: nil)
29
+ headings = HeadingsBuilder.new(html, url).headings
30
+
31
+ if headings.none? { |heading| heading.size == 1 }
32
+ raise "No H1 tag found. You have to at least add one H1 heading to the page: " + url
33
+ end
34
+
35
+ tree = HeadingTreeBuilder.new(headings).tree
36
+ HeadingTreeRenderer.new(tree, max_level: max_level).html
37
+ end
38
+
31
39
  def render_page_tree(resources, current_page, config, current_page_html)
32
40
  # Sort by weight frontmatter
33
41
  resources = resources
@@ -69,7 +77,7 @@ module GovukTechDocs
69
77
  output += "</li>\n"
70
78
  else
71
79
  output +=
72
- single_page_table_of_contents(
80
+ list_items_from_headings(
73
81
  content,
74
82
  url: resource.url,
75
83
  max_level: config[:tech_docs][:max_toc_heading_level],
@@ -1,3 +1,3 @@
1
1
  module GovukTechDocs
2
- VERSION = "2.4.1".freeze
2
+ VERSION = "3.0.1".freeze
3
3
  end
@@ -113,10 +113,12 @@ module GovukTechDocs
113
113
  url: { index: false, store: true },
114
114
  }
115
115
 
116
- search.pipeline_remove = %w[stopWordFilter]
116
+ search.pipeline_remove = %w[stemmer stopWordFilter]
117
117
 
118
118
  search.tokenizer_separator = '/[\s\-/]+/'
119
119
  end
120
+ else
121
+ context.ignore "search/*"
120
122
  end
121
123
  end
122
124
  end
@@ -13,12 +13,5 @@
13
13
  placeholder="Search">
14
14
  <button type="submit" class="search__button">Search</button>
15
15
  </form>
16
- <div id="search-results" class="search-results" aria-hidden="true" role="dialog" aria-labelledby="search-results-title">
17
- <div class="search-results__inner">
18
- <button class="search-results__close">Close<span class="search-results__close-label"> search results</span></button>
19
- <h2 id="search-results-title" class="search-results__title" aria-live="assertive" role="alert">Results</h2>
20
- <div class="search-results__content"></div>
21
- </div>
22
- </div>
23
16
  </div>
24
17
  <% end %>
@@ -4,8 +4,10 @@ wrap_layout :core do
4
4
 
5
5
  content_for(:toc_module, "in-page-navigation")
6
6
 
7
+ use_multipage_nav = current_page.data.fetch(:multipage_nav, config[:tech_docs][:multipage_nav])
8
+
7
9
  content_for :sidebar do
8
- if config[:tech_docs][:multipage_nav] %>
10
+ if use_multipage_nav %>
9
11
  <%= multi_page_table_of_contents(sitemap.resources, current_page, config, html) %>
10
12
  <% else %>
11
13
  <%= single_page_table_of_contents(html, max_level: config[:tech_docs][:max_toc_heading_level]) %>
@@ -0,0 +1,31 @@
1
+ ---
2
+ title: Search
3
+ index: false
4
+ prevent_indexing: true
5
+ hide_in_navigation: true
6
+ ---
7
+
8
+ <div id="search-help" class="search-help">
9
+ <%# strange id is to avoid clash with search input id #%>
10
+ <h1 id="how-to-search">Search</h1>
11
+
12
+ <p class="govuk-body search-help__no-js">
13
+ You need to turn on JavaScript in your browser to search this site. You can either:
14
+
15
+ <ul>
16
+ <li>turn on JavaScript in your browser</li>
17
+ <li>search this site using Google</li>
18
+ </ul>
19
+ </p>
20
+
21
+ <p class="govuk-body">
22
+ Enter a search term in the search box, then select the search button.
23
+ </p>
24
+ </div>
25
+
26
+ <div id="search-results" class="search-results" hidden aria-labelledby="search-results-title">
27
+ <div class="search-results__inner">
28
+ <h1 id="search-results-title" class="search-results__title" aria-live="assertive">Results</h1>
29
+ <div class="search-results__content"></div>
30
+ </div>
31
+ </div>
data/package-lock.json CHANGED
@@ -1421,9 +1421,9 @@
1421
1421
  "dev": true
1422
1422
  },
1423
1423
  "path-parse": {
1424
- "version": "1.0.6",
1425
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
1426
- "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
1424
+ "version": "1.0.7",
1425
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
1426
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
1427
1427
  "dev": true
1428
1428
  },
1429
1429
  "path-type": {
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: govuk_tech_docs
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.4.1
4
+ version: 3.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Government Digital Service
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-07-28 00:00:00.000000000 Z
11
+ date: 2021-12-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: autoprefixer-rails
@@ -271,15 +271,16 @@ extensions: []
271
271
  extra_rdoc_files: []
272
272
  files:
273
273
  - ".editorconfig"
274
+ - ".github/ISSUE_TEMPLATE.md"
274
275
  - ".github/pull_request_template.md"
276
+ - ".github/workflows/publish.yaml"
277
+ - ".github/workflows/test.yaml"
275
278
  - ".gitignore"
276
279
  - ".nvmrc"
277
280
  - ".rspec"
278
281
  - ".rubocop.yml"
279
282
  - ".ruby-version"
280
- - ".travis.yml"
281
283
  - CHANGELOG.md
282
- - CONTRIBUTING.md
283
284
  - Gemfile
284
285
  - LICENCE
285
286
  - README.md
@@ -309,6 +310,7 @@ files:
309
310
  - example/source/not-expired-page.html.md
310
311
  - example/source/pets.yml
311
312
  - example/source/prevent-index-page.html.md
313
+ - example/source/single-page-nav.html.md
312
314
  - example/source/stylesheets/print.css.scss
313
315
  - example/source/stylesheets/screen-old-ie.css.scss
314
316
  - example/source/stylesheets/screen.css.scss
@@ -387,6 +389,7 @@ files:
387
389
  - lib/source/layouts/_search.erb
388
390
  - lib/source/layouts/core.erb
389
391
  - lib/source/layouts/layout.erb
392
+ - lib/source/search/index.html.erb
390
393
  - lib/source/stylesheets/manifest.css
391
394
  - node_modules/govuk-frontend/govuk/_base.scss
392
395
  - node_modules/govuk-frontend/govuk/all-ie8.scss
@@ -557,7 +560,7 @@ homepage: https://github.com/alphagov/tech-docs-gem
557
560
  licenses:
558
561
  - MIT
559
562
  metadata: {}
560
- post_install_message:
563
+ post_install_message:
561
564
  rdoc_options: []
562
565
  require_paths:
563
566
  - lib
@@ -572,8 +575,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
572
575
  - !ruby/object:Gem::Version
573
576
  version: '0'
574
577
  requirements: []
575
- rubygems_version: 3.0.8
576
- signing_key:
578
+ rubygems_version: 3.1.4
579
+ signing_key:
577
580
  specification_version: 4
578
581
  summary: Gem to distribute the GOV.UK Tech Docs Template
579
582
  test_files: []
data/.travis.yml DELETED
@@ -1,19 +0,0 @@
1
- language: ruby
2
- cache:
3
- bundler: true
4
- npm: true
5
- before_install:
6
- - nvm install
7
- - nvm use
8
- - gem update --system
9
- - gem install bundler
10
- before_script:
11
- - npm install
12
- deploy:
13
- provider: rubygems
14
- gem: govuk_tech_docs
15
- api_key:
16
- secure: CY9C+IUqUeYWqXSyQgfF5swdYw1rRtYi0ai1xasD3R5rwARF6Qr8CnmdSBjfT2S84fXQiMza45Jto4w1jiy3o4wpxuKN68xEB7J4W/YEpFcZectzsmXwcMJH+DXh720KFIX2xiHaG5N0nWzAoV+6zgw6Vq24IXYE33wO6BgCmTe3vtO+Apg0+wDRAOuJ4T5XfSyWUvG8JqLRb81t+WbrsOLcUgZn24DHvs+lrjXTDDTzrgwTuKeaKd+h+mfxlHZD+Xxbcy624qop5ICwOOP0koRXCdVmTOSZ4mNI10+loCyA1B5Tryj/2wweyc8CanqRMniF8p/BxLV1sAwihpCmCpuWUyxq2pTPSgjF1A1f5hXwkAT/HiaXLzXKyO1REnbtLHYvre10EIYIII4nDAtCZP0YLYvPoKQUrAydeWiQ4jL+cyEeN/8Dznx2OPrhcwxazsElMm0yOZDNXERNIf3IVnQshxMFxQfGW3NTG8XR4l5PHAI2XqKy/O/VGbiRcNV3EYVG5w/KumB698BGDGV2QPOlh3JOEkebXTGDsMJj/gzZik2BtvAqYatwgx7oiYzvhEPz0m9o/DTS7Gf/5Hkj3iV2mpcNtRMc0HKmS7bwkv8Cl6dWECt7PWQ8Kz5ttrCKRmTCJDgra2xLFuV8kbBISPkKKv87KCXzxthM8ps94WE=
17
- on:
18
- repo: alphagov/tech-docs-gem
19
- branch: master
data/CONTRIBUTING.md DELETED
@@ -1,12 +0,0 @@
1
- ## Contributing to this project
2
-
3
- Everybody who uses this project is encouraged to contribute to this project. If you're part of the [alphagov GitHub organisation](https://www.github.com/alphagov) you probably have write access to this repo. If you don't, ask a GitHub admin or #tech-docs-format on Slack.
4
-
5
- - Before adding your feature, [check the backlog to see if someone is already talking about it](https://github.com/alphagov/tech-docs-template/issues)
6
- - If you add a new option to `config/tech-docs.yml`, make sure you [document the new configuration option][configuration]
7
- - If you add a new option to the page frontmatter, make sure you [document the new frontmatter configuration](docs/frontmatter.md)
8
- - You can test your contribution using [unit tests](spec/govuk_tech_docs), [javascript tests](spec/javascripts) or [integration tests](spec/features)
9
- - If your change is relevant to the users of the gem, add something to [CHANGELOG](CHANGELOG.md). You don't have to do this if it's just refactoring. Make sure that you include any upgrade instructions.
10
-
11
- [configuration]: https://github.com/alphagov/tdt-documentation/blob/master/source/amend_project/configuration/index.html.md.erb
12
- [frontmatter]: https://github.com/alphagov/tdt-documentation/blob/master/source/frontmatter.html.md.erb