script.js 1.48 KB
Newer Older
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
function $() {
	return document.querySelector.apply(document, arguments);
}

if (navigator.userAgent.indexOf("Xcode") != -1) {
	document.documentElement.classList.add("xcode");
}

var jumpTo = $("#jump-to");

if (jumpTo) {
	jumpTo.addEventListener("change", function(e) {
		location.hash = this.options[this.selectedIndex].value;
	});
}

function hashChanged() {
	if (/^#\/\/api\//.test(location.hash)) {
		var element = document.querySelector("a[name='" + location.hash.substring(1) + "']");

		if (!element) {
			return;
		}

		element = element.parentNode;

		element.classList.remove("hide");
		fixScrollPosition(element);
	}
}

function fixScrollPosition(element) {
	var scrollTop = element.offsetTop - 150;
	document.documentElement.scrollTop = scrollTop;
	document.body.scrollTop = scrollTop;
}

[].forEach.call(document.querySelectorAll(".section-method"), function(element) {
	element.classList.add("hide");

	element.querySelector(".method-title a").addEventListener("click", function(e) {
		var info = element.querySelector(".method-info"),
			infoContainer = element.querySelector(".method-info-container");

		element.classList.add("animating");
		info.style.height = (infoContainer.clientHeight + 40) + "px";
		fixScrollPosition(element);
		element.classList.toggle("hide");
		if (element.classList.contains("hide")) {
			e.preventDefault();
		}
		setTimeout(function() {
			element.classList.remove("animating");
		}, 300);
	});
});

window.addEventListener("hashchange", hashChanged);
hashChanged();