175 lines
5.0 KiB
JavaScript
175 lines
5.0 KiB
JavaScript
(function ($) {
|
|
/**
|
|
* Patch TOC list.
|
|
*
|
|
* Will mutate the underlying span to have a correct ul for nav.
|
|
*
|
|
* @param $span: Span containing nested UL"s to mutate.
|
|
* @param minLevel: Starting level for nested lists. (1: global, 2: local).
|
|
*/
|
|
var patchToc = function ($ul, minLevel) {
|
|
var findA,
|
|
patchTables,
|
|
$localLi;
|
|
|
|
// Find all a "internal" tags, traversing recursively.
|
|
findA = function ($elem, level) {
|
|
level = level || 0;
|
|
var $items = $elem.find("> li > a.internal, > ul, > li > ul");
|
|
|
|
// Iterate everything in order.
|
|
$items.each(function (index, item) {
|
|
var $item = $(item),
|
|
tag = item.tagName.toLowerCase(),
|
|
$childrenLi = $item.children("li"),
|
|
$parentLi = $($item.parent("li"), $item.parent().parent("li"));
|
|
|
|
// Add dropdowns if more children and above minimum level.
|
|
if (tag === "ul" && level >= minLevel && $childrenLi.length > 0) {
|
|
$parentLi
|
|
.addClass("dropdown-submenu")
|
|
.children("a").first().attr("tabindex", -1);
|
|
|
|
$item.addClass("dropdown-menu");
|
|
}
|
|
|
|
findA($item, level + 1);
|
|
});
|
|
};
|
|
|
|
findA($ul);
|
|
};
|
|
|
|
/**
|
|
* Patch all tables to remove ``docutils`` class and add Bootstrap base
|
|
* ``table`` class.
|
|
*/
|
|
patchTables = function () {
|
|
$("table.docutils")
|
|
.removeClass("docutils")
|
|
.addClass("table")
|
|
.attr("border", 0);
|
|
};
|
|
|
|
$(window).load(function () {
|
|
/*
|
|
* Scroll the window to avoid the topnav bar
|
|
* https://github.com/twbs/bootstrap/issues/1768
|
|
*/
|
|
if ($("#navbar.navbar-fixed-top").length > 0) {
|
|
var navHeight = $("#navbar").height(),
|
|
shiftWindow = function() { scrollBy(0, -navHeight - 10); };
|
|
|
|
if (location.hash) {
|
|
setTimeout(shiftWindow, 1);
|
|
}
|
|
|
|
window.addEventListener("hashchange", shiftWindow);
|
|
}
|
|
});
|
|
|
|
$(document).ready(function () {
|
|
// Add styling, structure to TOC"s.
|
|
$(".dropdown-menu").each(function () {
|
|
$(this).find("ul").each(function (index, item){
|
|
var $item = $(item);
|
|
$item.addClass("unstyled");
|
|
});
|
|
});
|
|
|
|
// Global TOC.
|
|
if ($("ul.globaltoc li").length) {
|
|
patchToc($("ul.globaltoc"), 1);
|
|
} else {
|
|
// Remove Global TOC.
|
|
$(".globaltoc-container").remove();
|
|
}
|
|
|
|
// Local TOC.
|
|
$(".bs-sidenav ul").addClass("nav nav-list");
|
|
$(".bs-sidenav > ul > li > a").addClass("nav-header");
|
|
|
|
|
|
// back to top
|
|
setTimeout(function () {
|
|
var $sideBar = $(".bs-sidenav");
|
|
var $content = $(".content");
|
|
|
|
// Enlarge content if sidebar is larger.
|
|
if ($sideBar.outerHeight(true) > $content.outerHeight(true)) {
|
|
$content.css("min-height", $sideBar.outerHeight(true));
|
|
}
|
|
|
|
$sideBar
|
|
// Add affix.
|
|
.affix({
|
|
offset: {
|
|
top: function () {
|
|
var offsetTop = $sideBar.offset().top;
|
|
var sideBarMargin = parseInt($sideBar.css("margin-top"), 10);
|
|
var navOuterHeight = $("#navbar").outerHeight(true);
|
|
|
|
return (this.top = offsetTop - navOuterHeight);
|
|
},
|
|
bottom: function () {
|
|
return (this.bottom = $(".footer").outerHeight(true));
|
|
}
|
|
}
|
|
})
|
|
// Trigger to reset if page content is scrolled to bottom.
|
|
.trigger("scroll.bs.affix.data-api");
|
|
}, 0);
|
|
|
|
|
|
// Local TOC.
|
|
patchToc($("ul.localtoc"), 2);
|
|
|
|
// Mutate sub-lists (for bs-2.3.0).
|
|
$(".dropdown-menu ul").not(".dropdown-menu").each(function () {
|
|
var $ul = $(this),
|
|
$parent = $ul.parent(),
|
|
tag = $parent[0].tagName.toLowerCase(),
|
|
$kids = $ul.children().detach();
|
|
|
|
// Replace list with items if submenu header.
|
|
if (tag === "ul") {
|
|
$ul.replaceWith($kids);
|
|
} else if (tag === "li") {
|
|
// Insert into previous list.
|
|
$parent.after($kids);
|
|
$ul.remove();
|
|
}
|
|
});
|
|
|
|
// Add divider in page TOC.
|
|
$localLi = $("ul.localtoc li");
|
|
if ($localLi.length > 2) {
|
|
$localLi.first().after("<li class=\"divider\"></li>");
|
|
}
|
|
|
|
// Patch tables.
|
|
patchTables();
|
|
|
|
// Add Note, Warning styles. (BS v2,3 compatible).
|
|
$(".admonition").addClass("alert alert-info")
|
|
.filter(".warning, .caution")
|
|
.removeClass("alert-info")
|
|
.addClass("alert-warning").end()
|
|
.filter(".error, .danger")
|
|
.removeClass("alert-info")
|
|
.addClass("alert-danger alert-error").end();
|
|
|
|
// Inline code styles to Bootstrap style.
|
|
$("tt.docutils.literal").not(".xref").each(function (i, e) {
|
|
// ignore references
|
|
if (!$(e).parent().hasClass("reference")) {
|
|
$(e).replaceWith(function () {
|
|
return $("<code />").html($(this).html());
|
|
});
|
|
}});
|
|
|
|
// Update sourcelink to remove outerdiv (fixes appearance in navbar).
|
|
var $srcLink = $(".nav #sourcelink");
|
|
$srcLink.parent().html($srcLink.html());
|
|
});
|
|
}(window.$jqTheme || window.jQuery)); |