forked from CloudCannon/aviator-jekyll-template
-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.js
105 lines (78 loc) · 2.17 KB
/
main.js
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
jQuery(function() {
var $sidebar = $('#sidebar'),
$nav = $('.nav'),
$main = $('.main');
var found = true;
var $el;
$sidebar.find('a').click(function() {
$('body').removeClass('nav-open');
});
$("section > div.highlighter-rouge:first-of-type").each(function(i) {
var $this = $(this).before("<ul class=\"languages\"></ul>"),
$languages = $this.prev(),
$notFirst = $this.nextUntil(":not(div.highlighter-rouge)"),
$all = $this.add($notFirst);
$all.add($languages).wrapAll("<div class=\"code-viewer\"></div>");
listLanguages($all, $languages);
$this.css('display', 'block');
$notFirst.css('display', 'none');
$languages.find('a').first().addClass('active');
$languages.find('a').click(function() {
$all.css('display', 'none');
$all.eq($(this).parent().index()).css('display', 'block');
$languages.find('a').removeClass('active');
$(this).addClass('active');
return false;
});
if ($languages.children().length === 0) {
$languages.remove();
}
});
function listLanguages($el, $insert) {
$el.each(function(i) {
var title = $(this).attr('title');
if (title) {
$insert.append("<li><a href=\"#\">" + title + "</a></li>");
}
});
}
var href = $('.sidebar a').first().attr("href");
if (href !== undefined && href.charAt(0) === "#") {
setActiveSidebarLink();
$(window).on("scroll", function(evt) {
setActiveSidebarLink();
});
}
function setActiveSidebarLink() {
$('.sidebar a').removeClass('active');
var $closest = getClosestHeader();
$closest.addClass('active');
document.title = $closest.text();
}
});
function getClosestHeader() {
var $links = $('.sidebar a'),
top = window.scrollY,
$last = $links.first();
if (top < 300) {
return $last;
}
if (top + window.innerHeight >= $(".main").height()) {
return $links.last();
}
for (var i = 0; i < $links.length; i++) {
var $link = $links.eq(i),
href = $link.attr("href");
if (href !== undefined && href.charAt(0) === "#" && href.length > 1) {
var $anchor = $(href);
if ($anchor.length > 0) {
var offset = $anchor.offset();
if (top < offset.top - 300) {
return $last;
}
$last = $link;
}
}
}
return $last;
}