aboutsummaryrefslogtreecommitdiffstats
path: root/view/js/mod_help.js
blob: 0f85af462f6e3a61c45f567724faa3fa7bcb328a (plain) (blame)
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
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)
	}
});