docs: support tabs (#576)
* docs: support tabs * Get superfences working * Use an 'admonition' as a tab, add some styling * docs: reorder tabs and modernize * docs: tabbed options settings * docs: reorder to match order in other places * docs: correct the example * Apply suggestions from code review (lazy edits in GH :) ) * Update mkdocs-include-markdown-plugin and remove unneeded include option Co-authored-by: Joe Rickerby <joerick@mac.com>
This commit is contained in:
co-authored by
Joe Rickerby
parent
bb14c67835
commit
58c5e56e9f
+46
-1
@@ -1,4 +1,49 @@
|
||||
|
||||
// add classes for code-block-filename styling
|
||||
$('.rst-content pre')
|
||||
.prev('blockquote')
|
||||
.addClass('code-block-filename');
|
||||
|
||||
var tabConversionIterations = 0
|
||||
|
||||
// convert tab admonition to tabs
|
||||
while (true) {
|
||||
const firstTab = $('.rst-content .admonition.tab').first()
|
||||
if (firstTab.length == 0) break;
|
||||
|
||||
const otherTabs = firstTab.nextUntil(':not(.admonition.tab)');
|
||||
const allTabs = $($.merge($.merge([], firstTab), otherTabs));
|
||||
|
||||
const tabContainer = $('<div>').addClass('tabs');
|
||||
const headerContainer = $('<div>').addClass('tabs-header');
|
||||
const contentContainer = $('<div>').addClass('tabs-content');
|
||||
|
||||
tabContainer.insertBefore(firstTab);
|
||||
tabContainer.append(headerContainer, contentContainer)
|
||||
|
||||
const selectTab = function (index) {
|
||||
headerContainer.children().removeClass('active')
|
||||
headerContainer.children().eq(index).addClass('active')
|
||||
contentContainer.children().hide()
|
||||
contentContainer.children().eq(index).show()
|
||||
}
|
||||
|
||||
allTabs.each(function (tabI, el) {
|
||||
const $el = $(el)
|
||||
const titleElement = $el.children('.admonition-title')
|
||||
const title = titleElement.text()
|
||||
const button = $('<button>').text(title)
|
||||
button.click(function () {
|
||||
selectTab(tabI)
|
||||
})
|
||||
headerContainer.append(button)
|
||||
|
||||
titleElement.remove()
|
||||
$el.removeClass('admonition')
|
||||
contentContainer.append($el)
|
||||
})
|
||||
|
||||
selectTab(0)
|
||||
|
||||
// this will catch infinite loops which can occur when editing the above
|
||||
if (tabConversionIterations++ > 1000) throw 'too many iterations'
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user