-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathguide_pages.js.coffee
More file actions
44 lines (35 loc) · 1.35 KB
/
guide_pages.js.coffee
File metadata and controls
44 lines (35 loc) · 1.35 KB
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
$ ->
## Механизм сборки содержания к странице
firstLevel = []
secondLevel = {}
for header in body.children('h2,h3')
if header.tagName.toLowerCase() == "h3"
h_index = firstLevel.length
continue unless h_index > 0
secondLevel[h_index] ||= []
secondLevel[h_index].push header
else
firstLevel.push header
$("<a class='target'></a>").insertBefore(header)
if firstLevel.length > 0
header2toc = (header, level) ->
header.attr('data-level', level)
"<a data-target-level='#{level}'>#{level}. #{header.text()}</a>"
toc = "<div id='toc'><h2>Содержание</h2><ul>"
firstLevel.forEach (header, index) ->
header = $(header)
level = index + 1
toc += "<li>"
toc += header2toc(header, level)
if secondLevel[level]?
toc += "<ul>"
subheaders = $.map secondLevel[level], (subheader, subindex) ->
"<li>#{header2toc($(subheader), "#{level}.#{subindex + 1}")}</li>"
toc += subheaders.join('')
toc += "</ul>"
toc += "</li>"
toc += "</ul></div>"
$(toc).insertAfter body.children('h1:first')
$('#toc a').on 'click', (event) ->
$('html, body').scrollTop(body.children("[data-level='#{$(@).data('target-level')}']").offset().top - $('#app_header').height() - 30)
event.preventDefault()