Team:HUST-China/js/tocible

/*

* jquery.tocible.min.js v1.2.0, jQuery Tocible
*
* Under MIT license, available at http://www.opensource.org/licenses/MIT.
*
* A lightweight table of contents navigation plugin
* https://github.com/markserbol/tocible
*
*/

(function(a) { var k = { heading: "h2", subheading: "h3", reference: ".ref", title: "", hash: !1, offsetTop: 50, speed: 800, collapsible: !0, maxWidth: 150 }; a.fn.tocible = function(m) { var d = a.extend({}, k, m); return this.each(function() { var b = a(this), e, f, g, h, l; b.find(".tocible").remove(); f = b.find(d.reference); f.css({ visibility: "hidden" }); l = f.offset().left; e = a("<div/>", { "class": "tocible", html: "<ul/>" }); e.css({ "max-width": d.maxWidth }); b.append(e).css({ position: "relative" }); if (d.title) { var k = a(d.title).length ? a(d.title).text() : d.title; a("<div/>", { "class": "tocible_header", html: k + "<span/>" }).prependTo(e).click(function() { a(this).siblings("ul").slideToggle({ duration: "slow", step: contain }); a(this).find("span").toggleClass("toc_open") }) } g = b.find(d.heading); h = b.find(d.subheading); g.add(h).each(function() { var c = a(this), e, b, f; e = c.attr("id") ? "#" + c.attr("id") : "#"; b = c.text(); c.is(g) ? f = "heading" : c.is(h) && (f = "subheading"); b = a("<a/>", { text: b, href: e });

a("
  • ", { "class": "tocible_" + f }).append(b).appendTo(".tocible > ul"); b.click(function(b) { b.preventDefault(); b = c.offset(); if (d.hash) { var f = a(window).scrollTop(); history.pushState ? history.pushState({}, document.title, e) : (window.location.hash = e, a(window).scrollTop(f)) } a("html, body").stop(!0).animate({ scrollTop: b.top - 10 - 83 }, d.speed) }) }); contain = function() { var c = a(window).scrollTop(), g = b.offset().top; e.css({ top: d.offsetTop + 10, bottom: "auto", left: l }); g + b.outerHeight() <= c + e.height() + d.offsetTop ? e.css({ /*position: "absolute", bottom: 0, top: "auto", left: f.position().left*/ position: "fixed", bottom: "auto", top: d.offsetTop + 80, left: f.offset().left - 170 }) : c >= g ? e.css({ position: "fixed", bottom: "auto", top: d.offsetTop + 80, left: f.offset().left - 170 }) : e.css({ position: "absolute", left: f.position().left - 170 }) }; onScroll = function() { d.collapsible && a(".tocible li.tocible_subheading").hide(); g.add(h).each(function(c) { var b = a(this).offset().top; c = a(".tocible li").eq(c); a(window).scrollTop() >= b - 100 ? (c.addClass("toc_scrolled").siblings().removeClass("toc_scrolled"), d.collapsible && (c.siblings().filter(".tocible_subheading").hide(), c.is(".tocible_subheading") ? c.prevAll(".tocible_heading:first").nextUntil(".tocible_heading").show() : c.is(".tocible_heading") && c.nextUntil(".tocible_heading").show())) : c.removeClass("toc_scrolled") }) }; a(window).on("resize scroll", function(a) { contain(); onScroll() }).trigger("scroll") }) } })(jQuery);