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
|
function docoTocToggle() {
if ($('#doco-top-toc').is(':visible')) {
$('#doco-toc-toggle').removeClass('fa-cog').addClass('fa-caret-right');
} else {
$('#doco-toc-toggle').removeClass('fa-caret-right').addClass('fa-caret-down');
}
$('#doco-top-toc').toggle();
return false;
}
toc = {};
// Generate the table of contents in the side nav menu (see view/tpl/help.tpl)
$(document).ready(function () {
// Generate the table of contents in the side nav menu (see view/tpl/help.tpl)
$('#doco-top-toc').toc({content: "#doco-content", headings: "h3,h4,h5,h6"});
$(".doco-section").find('a').each(function () {
var url = document.createElement('a');
url.href = window.location;
var pageName = url.href.split('/').pop().split('#').shift().split('?').shift();
var linkName = $(this).attr('href').split('/').pop();
if (pageName === linkName) {
var tocUl = $(this).closest('a').append('<ul>').find('ul');
tocUl.removeClass(); // Classes are automatically added to <ul> elements by something else
tocUl.toc({content: "#doco-content", headings: "h3"});
tocUl.addClass('toc-content');
tocUl.addClass('list-unstyled');
tocUl.attr('id', 'doco-side-toc');
}
});
$(document.body).trigger("sticky_kit:recalc");
toc.contentTop = [];
toc.edgeMargin = 20; // margin above the top or margin from the end of the page
toc.topRange = 200; // measure from the top of the viewport to X pixels down
// Set up content an array of locations
$('#doco-side-toc').find('a').each(function () {
toc.contentTop.push($('#' + $(this).attr('href').split('#').pop()).offset().top);
});
// adjust side menu
$(window).scroll(function () {
var winTop = $(window).scrollTop(),
bodyHt = $(document).height(),
vpHt = $(window).height() + toc.edgeMargin; // viewport height + margin
$.each(toc.contentTop, function (i, loc) {
if ((loc > winTop - toc.edgeMargin && (loc < winTop + toc.topRange || (winTop + vpHt) >= bodyHt))) {
$('#doco-side-toc li')
.removeClass('selected-doco-nav')
.eq(i).addClass('selected-doco-nav');
if (typeof ($('#doco-side-toc li').eq(i).find('a').attr('href').split('#')[1]) !== 'undefined') {
window.history.pushState({}, '', location.href.split('#')[0] + '#' + $('#doco-side-toc li').eq(i).find('a').attr('href').split('#')[1]);
}
}
});
});
// When the page loads, it does not scroll to the section specified in the URL because it
// has not been constructed yet by the script. This will reload the URL
if (typeof (location.href.split('#')[1]) !== 'undefined') {
var p = document.createElement('a');
p.href = location.href;
var portstr = '';
if (p.port !== '') {
portstr = ':' + p.port;
}
var newref = p.protocol + '//' + p.hostname + portstr + p.pathname + p.hash.split('?').shift();
location.replace(newref)
}
// Determine language translations available from the language selector menu itself
var langChoices = [];
$('.lang-selector').find('.lang-choice').each(function (idx, a) {
langChoices.push($(a).html());
});
// Parse the URL and insert the language code for the loaded language, based
// on the variable "help_language" that is declared in the help.tpl page template
var path = window.location.pathname.split('/');
var pathParts = [];
var pick_me = true;
for (var i = 0; i < path.length; i++) {
if(i === 2 && pick_me ) {
if(path[i].length > 0) {
pathParts.push(help_language);
pick_me = false;
if($.inArray(path[i], langChoices) < 0) {
i--;
}
}
} else {
if(path[i].length > 0) {
pathParts.push(path[i]);
}
}
}
// Update the address bar to reflect the loaded language
window.history.pushState({}, '', '/' + pathParts.join('/'));
// Highlight the language in the language selector that is currently viewed
$('.lang-selector').find('.lang-choice:contains("' + help_language + '")').css('font-weight','bold').css('background-color','lightgray');
// Construct the links to the available translations based and populate the selector menu
$('.lang-selector').find('.lang-choice').each(function (idx, a) {
var langLink = [];
for (var i = 0; i < pathParts.length; i++) {
if(i === 1) {
langLink.push($(a).html());
} else {
langLink.push(pathParts[i]);
}
}
$(a).attr('href', '/' + langLink.join('/'));
});
});
|