Sha256: ae5af03b8d023d8c3e6acbe393070d5da8651eca7c1dcfee7b40943013c1e564

Contents?: true

Size: 1.97 KB

Versions: 66

Compression:

Stored size: 1.97 KB

Contents

jQuery(function() {
	var $sidebar = $('.sidebar'),
		$content = $('.content'),
		$tutorial = $('.tutorial-content'),
		$window = $(window),
		offset = $content.offset().top + 60;

	var found = true;

	var $el;

	var href = $sidebar.find('a').first().attr("href");

	if (href !== undefined && href.charAt(0) === "#") {
		setActiveSidebarLink();

		$(window).on("scroll", function() {
			throttle(function(){
				setActiveSidebarLink();
				setSidebar();
			}, 100)();
		});
	}

	function setSidebar() {
		var offset = 102,
			bottom = $tutorial.offset().top + $tutorial.outerHeight() - $sidebar.outerHeight() - offset;
		if (window.scrollY > bottom) {
			$sidebar.css("position", "absolute").css("top", $tutorial.outerHeight() - $sidebar.outerHeight());
		} else if (window.scrollY > $tutorial.offset().top) {
			$sidebar.css("position", "fixed").css("top", offset);
		} else {
			$sidebar.css("position", "absolute").css("top", offset);
		}
	}

	function setActiveSidebarLink() {
		$('.sidebar a').removeClass('active');
		var $closest = getClosestHeader();
		$closest.addClass('active');
	}
});

function getClosestHeader() {
	var $links = $('.sidebar a'),
	top = window.scrollY,
	$last = $links.first(),
	$content = $(".tutorial-content");

	//console.log(top);

	if (top < 300) {
		return $last;
	}

	if (top + window.innerHeight >= $content.offset().top + $content.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 - (window.innerHeight / 2)) {
					return $last;
				}

				$last = $link;
			}
		}
	}
	return $last;
}

function throttle (callback, limit) {

	var wait = false;
	return function () {
		if (!wait) {

			callback.apply(null, arguments);
			wait = true;
			setTimeout(function () {
				wait = false;
			}, limit);
		}
	};
}

Version data entries

66 entries across 66 versions & 1 rubygems

Version Path
jekyll-theme-glueckkanja-1.2.29 assets/js/hc.js
jekyll-theme-glueckkanja-1.2.28 assets/js/hc.js
jekyll-theme-glueckkanja-1.2.27 assets/js/hc.js
jekyll-theme-glueckkanja-1.2.26 assets/js/hc.js
jekyll-theme-glueckkanja-1.2.25 assets/js/hc.js
jekyll-theme-glueckkanja-1.2.24 assets/js/hc.js
jekyll-theme-glueckkanja-1.2.23 assets/js/hc.js
jekyll-theme-glueckkanja-1.2.22 assets/js/hc.js
jekyll-theme-glueckkanja-1.2.21 assets/js/hc.js
jekyll-theme-glueckkanja-1.2.20 assets/js/hc.js
jekyll-theme-glueckkanja-1.2.19 assets/js/hc.js
jekyll-theme-glueckkanja-1.2.18 assets/js/hc.js
jekyll-theme-glueckkanja-1.2.17 assets/js/hc.js
jekyll-theme-glueckkanja-1.2.16 assets/js/hc.js
jekyll-theme-glueckkanja-1.2.15 assets/js/hc.js
jekyll-theme-glueckkanja-1.2.14 assets/js/hc.js
jekyll-theme-glueckkanja-1.2.13 assets/js/hc.js
jekyll-theme-glueckkanja-1.2.12 assets/js/hc.js
jekyll-theme-glueckkanja-1.2.11 assets/js/hc.js
jekyll-theme-glueckkanja-1.2.10 assets/js/hc.js