| (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)); |