Skip to content

Commit 490c71e

Browse files
committed
Automate section generation
1 parent 264d7db commit 490c71e

2 files changed

Lines changed: 71 additions & 61 deletions

File tree

lib/search_generator.rb

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,31 @@
11
require 'json'
2+
require 'nokogiri'
23

34
class SearchFilter < Nanoc::Filter
45
identifier :search
56
type :text
67

78
$search_file_path = File.join(Dir.pwd, "static", "search-index.json")
89
$search_file_contents = { :pages => [] }
10+
11+
sidebar = File.open(File.join(Dir.pwd, "layouts", "sidebar.html"))
12+
$sidebar_doc = Nokogiri::HTML(sidebar)
13+
sidebar.close
914

1015
def initialize(hash = {})
1116
super
1217
end
1318

1419
def run(content, params={})
15-
page = { :url => @item.identifier, :title => @item[:title].split("|")[0].strip, :section => "API" }
20+
# uses nokogiri to determine parent section name
21+
containing_li_text = $sidebar_doc.xpath("//a[@href='#{@item.identifier}']/../../../h3/a[2]/text()")
1622

17-
$search_file_contents[:pages] << page
23+
# we're looking at an overview page
24+
containing_li_text = $sidebar_doc.xpath("//a[@href='#{@item.identifier}']/text()") if containing_li_text.empty?
25+
26+
page = { :url => @item.identifier, :title => @item[:title].split("|")[0].strip, :section => "API/#{containing_li_text}" }
1827

28+
$search_file_contents[:pages] << page
1929
$search_file_contents[:pages] = merge_sort($search_file_contents[:pages])
2030

2131
write_search_file

static/search-index.json

Lines changed: 59 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -3,297 +3,297 @@
33
{
44
"url": "/v3/",
55
"title": "GitHub API v3",
6-
"section": "API"
6+
"section": "API/Overview"
77
},
88
{
99
"url": "/v3/activity/",
1010
"title": "Activity",
11-
"section": "API"
11+
"section": "API/Activity"
1212
},
1313
{
1414
"url": "/v3/activity/events/",
1515
"title": "Events",
16-
"section": "API"
16+
"section": "API/Activity"
1717
},
1818
{
1919
"url": "/v3/activity/events/types/",
2020
"title": "Event types",
21-
"section": "API"
21+
"section": "API/Activity"
2222
},
2323
{
2424
"url": "/v3/activity/feeds/",
2525
"title": "Feeds",
26-
"section": "API"
26+
"section": "API/Activity"
2727
},
2828
{
2929
"url": "/v3/activity/notifications/",
3030
"title": "Notifications",
31-
"section": "API"
31+
"section": "API/Activity"
3232
},
3333
{
3434
"url": "/v3/activity/settings/",
3535
"title": "Notification Settings",
36-
"section": "API"
36+
"section": "API/"
3737
},
3838
{
3939
"url": "/v3/activity/starring/",
4040
"title": "Repository Starring",
41-
"section": "API"
41+
"section": "API/Activity"
4242
},
4343
{
4444
"url": "/v3/activity/watching/",
4545
"title": "Repository Watching",
46-
"section": "API"
46+
"section": "API/Activity"
4747
},
4848
{
4949
"url": "/v3/auth/",
5050
"title": "Authentication",
51-
"section": "API"
51+
"section": "API/Overview"
5252
},
5353
{
5454
"url": "/v3/changelog/",
5555
"title": "GitHub API Changelog",
56-
"section": "API"
56+
"section": "API/"
5757
},
5858
{
5959
"url": "/v3/emojis/",
6060
"title": "GitHub Emojis API",
61-
"section": "API"
61+
"section": "API/Miscellaneous"
6262
},
6363
{
6464
"url": "/v3/gists/",
6565
"title": "Gists",
66-
"section": "API"
66+
"section": "API/Gists"
6767
},
6868
{
6969
"url": "/v3/gists/comments/",
7070
"title": "Gist Comments",
71-
"section": "API"
71+
"section": "API/Gists"
7272
},
7373
{
7474
"url": "/v3/git/",
7575
"title": "Git",
76-
"section": "API"
76+
"section": "API/Git Data"
7777
},
7878
{
7979
"url": "/v3/git/blobs/",
8080
"title": "Git Blobs",
81-
"section": "API"
81+
"section": "API/Git Data"
8282
},
8383
{
8484
"url": "/v3/git/commits/",
8585
"title": "Git Commits",
86-
"section": "API"
86+
"section": "API/Git Data"
8787
},
8888
{
8989
"url": "/v3/git/import/",
9090
"title": "Git Import",
91-
"section": "API"
91+
"section": "API/"
9292
},
9393
{
9494
"url": "/v3/git/refs/",
9595
"title": "Git Refs",
96-
"section": "API"
96+
"section": "API/Git Data"
9797
},
9898
{
9999
"url": "/v3/git/tags/",
100100
"title": "Git Tags",
101-
"section": "API"
101+
"section": "API/Git Data"
102102
},
103103
{
104104
"url": "/v3/git/trees/",
105105
"title": "Git Trees",
106-
"section": "API"
106+
"section": "API/Git Data"
107107
},
108108
{
109109
"url": "/v3/gitignore/",
110110
"title": "Gitignore templates",
111-
"section": "API"
111+
"section": "API/Miscellaneous"
112112
},
113113
{
114114
"url": "/v3/issues/",
115115
"title": "Issues",
116-
"section": "API"
116+
"section": "API/Issues"
117117
},
118118
{
119119
"url": "/v3/issues/assignees/",
120120
"title": "Issue Assignees",
121-
"section": "API"
121+
"section": "API/Issues"
122122
},
123123
{
124124
"url": "/v3/issues/comments/",
125125
"title": "Issue Comments",
126-
"section": "API"
126+
"section": "API/Issues"
127127
},
128128
{
129129
"url": "/v3/issues/events/",
130130
"title": "Issue Events",
131-
"section": "API"
131+
"section": "API/Issues"
132132
},
133133
{
134134
"url": "/v3/issues/labels/",
135135
"title": "Issue Labels",
136-
"section": "API"
136+
"section": "API/Issues"
137137
},
138138
{
139139
"url": "/v3/issues/milestones/",
140140
"title": "Issue Milestones",
141-
"section": "API"
141+
"section": "API/Issues"
142142
},
143143
{
144144
"url": "/v3/markdown/",
145145
"title": "Markdown Rendering",
146-
"section": "API"
146+
"section": "API/Miscellaneous"
147147
},
148148
{
149149
"url": "/v3/media/",
150150
"title": "Custom Media Types",
151-
"section": "API"
151+
"section": "API/Overview"
152152
},
153153
{
154154
"url": "/v3/meta/",
155155
"title": "GitHub Meta API",
156-
"section": "API"
156+
"section": "API/Miscellaneous"
157157
},
158158
{
159159
"url": "/v3/misc/",
160160
"title": "Miscellaneous",
161-
"section": "API"
161+
"section": "API/Miscellaneous"
162162
},
163163
{
164164
"url": "/v3/oauth/",
165165
"title": "OAuth",
166-
"section": "API"
166+
"section": "API/Overview"
167167
},
168168
{
169169
"url": "/v3/orgs/",
170170
"title": "Organizations",
171-
"section": "API"
171+
"section": "API/Organizations"
172172
},
173173
{
174174
"url": "/v3/orgs/members/",
175175
"title": "Organization Members",
176-
"section": "API"
176+
"section": "API/Organizations"
177177
},
178178
{
179179
"url": "/v3/orgs/teams/",
180180
"title": "Organization Teams",
181-
"section": "API"
181+
"section": "API/Organizations"
182182
},
183183
{
184184
"url": "/v3/pulls/",
185185
"title": "Pull Requests",
186-
"section": "API"
186+
"section": "API/Pull Requests"
187187
},
188188
{
189189
"url": "/v3/pulls/comments/",
190190
"title": "Pull Request Comments",
191-
"section": "API"
191+
"section": "API/Pull Requests"
192192
},
193193
{
194194
"url": "/v3/rate_limit/",
195195
"title": "GitHub Rate Limit API",
196-
"section": "API"
196+
"section": "API/Miscellaneous"
197197
},
198198
{
199199
"url": "/v3/repos/",
200200
"title": "Repos",
201-
"section": "API"
201+
"section": "API/Repositories"
202202
},
203203
{
204204
"url": "/v3/repos/collaborators/",
205205
"title": "Repo Collaborators",
206-
"section": "API"
206+
"section": "API/Repositories"
207207
},
208208
{
209209
"url": "/v3/repos/comments/",
210210
"title": "Repo Comments",
211-
"section": "API"
211+
"section": "API/Repositories"
212212
},
213213
{
214214
"url": "/v3/repos/commits/",
215215
"title": "Repo Commits",
216-
"section": "API"
216+
"section": "API/Repositories"
217217
},
218218
{
219219
"url": "/v3/repos/contents/",
220220
"title": "Repo Contents",
221-
"section": "API"
221+
"section": "API/Repositories"
222222
},
223223
{
224224
"url": "/v3/repos/downloads/",
225225
"title": "Repo Downloads",
226-
"section": "API"
226+
"section": "API/Repositories"
227227
},
228228
{
229229
"url": "/v3/repos/forks/",
230230
"title": "Repo Forks",
231-
"section": "API"
231+
"section": "API/Repositories"
232232
},
233233
{
234234
"url": "/v3/repos/hooks/",
235235
"title": "Repo Hooks",
236-
"section": "API"
236+
"section": "API/Repositories"
237237
},
238238
{
239239
"url": "/v3/repos/keys/",
240240
"title": "Repo Deploy Keys",
241-
"section": "API"
241+
"section": "API/Repositories"
242242
},
243243
{
244244
"url": "/v3/repos/merging/",
245245
"title": "Repo Merging",
246-
"section": "API"
246+
"section": "API/Repositories"
247247
},
248248
{
249249
"url": "/v3/repos/releases/",
250250
"title": "Releases",
251-
"section": "API"
251+
"section": "API/Repositories"
252252
},
253253
{
254254
"url": "/v3/repos/statistics/",
255255
"title": "Repo Statistics",
256-
"section": "API"
256+
"section": "API/Repositories"
257257
},
258258
{
259259
"url": "/v3/repos/statuses/",
260260
"title": "Statuses",
261-
"section": "API"
261+
"section": "API/Repositories"
262262
},
263263
{
264264
"url": "/v3/search/",
265265
"title": "Search",
266-
"section": "API"
266+
"section": "API/Search"
267267
},
268268
{
269269
"url": "/v3/search/legacy/",
270270
"title": "Legacy Search",
271-
"section": "API"
271+
"section": "API/Search"
272272
},
273273
{
274274
"url": "/v3/troubleshooting/",
275275
"title": "Troubleshooting",
276-
"section": "API"
276+
"section": "API/Overview"
277277
},
278278
{
279279
"url": "/v3/users/",
280280
"title": "Users",
281-
"section": "API"
281+
"section": "API/Users"
282282
},
283283
{
284284
"url": "/v3/users/emails/",
285285
"title": "User Emails",
286-
"section": "API"
286+
"section": "API/Users"
287287
},
288288
{
289289
"url": "/v3/users/followers/",
290290
"title": "User Followers",
291-
"section": "API"
291+
"section": "API/Users"
292292
},
293293
{
294294
"url": "/v3/users/keys/",
295295
"title": "User Public Keys",
296-
"section": "API"
296+
"section": "API/Users"
297297
}
298298
]
299299
}

0 commit comments

Comments
 (0)