diff --git a/docs/js/extra.js b/docs/js/extra.js
index 5a222508..b18a436b 100644
--- a/docs/js/extra.js
+++ b/docs/js/extra.js
@@ -6,10 +6,41 @@ var nodemcu = nodemcu || {};
var defaultLanguageCode = 'en';
$(document).ready(function () {
+ addToc();
hideNavigationForAllButSelectedLanguage();
addLanguageSelectorToRtdFlyOutMenu();
});
+ /**
+ * Adds a TOC-style table to each page in the 'Modules' section.
+ */
+ function addToc() {
+ var func, intro, tocHtmlTable;
+ if (isModulePage()) {
+ tocHtmlTable = '
';
+ $('h2').each(function (index) {
+ // 'slice' cuts off the single permalink character at the end of the text (e.g. '¶')
+ func = $(this).text().slice(0, -1);
+ // get the first sentence of the paragraph directly below h2
+ intro = $(this).next().text();
+ intro = intro.substring(0, intro.indexOf('.') + 1);
+ tocHtmlTable += createTocTableRow(func, intro);
+ });
+ tocHtmlTable += '
';
+ $(tocHtmlTable).insertBefore($('h2').first())
+ }
+ function isModulePage() {
+ // if the breadcrumb contains 'Modules »' it must be an API page
+ return $("ul.wy-breadcrumbs li:contains('Modules »')").size() > 0;
+ }
+ function createTocTableRow(func, intro) {
+ // fragile attempt to auto-create the in-page anchor
+ var href = func.replace(/\./g, '').replace('()', '').replace(' --', '-');
+ var link = '' + func + '';
+ return '' + link + ' | ' + intro + ' |
';
+ }
+ }
+
function hideNavigationForAllButSelectedLanguage() {
var selectedLanguageCode = determineSelectedLanguageCode();
var selectedLanguageName = languageCodeToNameMap[selectedLanguageCode];
@@ -71,6 +102,7 @@ var nodemcu = nodemcu || {};
observer.observe(flyOutWrapper[0], {childList: true});
}
}
+
function createLanguageLinkFor(languageCode, isCurrentlySelected) {
var strong;
// split[0] is an '' because the path starts with the separator