org-theme/js/script.js

227 lines
7.8 KiB
JavaScript

// Blocks
docReady(function() {
var boxesNames = {
"seealso": "See also",
"definition": "Definition",
"exampl": "Example",
"exercice": "Exercice",
"question": "Question",
"summary": "Summary",
"note": "Note",
"answer": "Answer",
"hint": "Hint",
"important": "Important",
"caution": "Caution",
"warning": "Warning"
};
for (var className in boxesNames) {
let boxes = document.querySelectorAll('div.' + className);
for (let box of boxes) {
let boxTitle = document.createElement('p');
boxTitle.className = "admonition-title " + className;
boxTitle.textContent = boxesNames[className];
box.parentNode.insertBefore(boxTitle, box);
}
}
});
// Copy Source Block
docReady(function() {
let srcContainers = document.querySelectorAll('pre.src');
function copyClickFunction() {
let boxCopy = this;
// Create a clone the node to not affect the original one
let nodeClone = boxCopy.parentNode.cloneNode(true);
// Remove Line Numbers and Copy Button
let linenumNodes = nodeClone.querySelectorAll('.linenr,.src-copy');
for (var i = linenumNodes.length - 1 ; i >= 0 ; --i) {
nodeClone.removeChild(linenumNodes[i]);
}
// Copy the filetered content to the clipboard
let srcText = nodeClone.textContent;
navigator.clipboard.writeText(srcText).then(function() {
boxCopy.textContent = "Copied";
boxCopy.classList.add("src-copied");
setTimeout(function() {
boxCopy.textContent = "Copy";
boxCopy.classList.remove("src-copied");
}, 2000);
});
}
for (let srcContrainer of srcContainers) {
let boxCopy = document.createElement('div');
boxCopy.className = "src-copy";
boxCopy.textContent = "Copy";
boxCopy.onclick = copyClickFunction;
srcContrainer.prepend(boxCopy);
}
});
// Wrap Images and Tables
docReady(function() {
let wrap_elements = document.querySelectorAll('[float=wrap-right]');
for (let wrap_el of wrap_elements) {
wrap_el.closest('.figure').classList.add('wrap-right');
}
wrap_elements = document.querySelectorAll('[float=wrap-left]');
for (let wrap_el of wrap_elements) {
wrap_el.closest('.figure').classList.add('wrap-left');
}
});
// Equivalent of Jquery $.ready
function docReady(fn) {
// see if DOM is already available
if (document.readyState === "complete" || document.readyState === "interactive") {
// call on next available tick
setTimeout(fn, 1);
} else {
document.addEventListener("DOMContentLoaded", fn);
}
}
// Load Jquery
var scr = document.createElement('script'),
head = document.head || document.getElementsByTagName('head')[0];
scr.src = 'https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js';
scr.async = false; // optionally
head.insertBefore(scr, head.firstChild);
// Load Bootstrap.js
var scr = document.createElement('script'),
head = document.head || document.getElementsByTagName('head')[0];
scr.src = 'https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js';
scr.async = false; // optionally
head.insertBefore(scr, head.firstChild);
// After it is loaded
scr.addEventListener('load', () => {
$(document).ready(function() {
$('#text-table-of-contents ul').first().addClass('nav');
// ScrollSpy also requires that we use
// a Bootstrap nav component.
$('body').scrollspy({target: '#text-table-of-contents'});
// set the height of tableOfContents
var $postamble = $('#postamble');
var $tableOfContents = $('#table-of-contents');
$tableOfContents.css({paddingBottom: $postamble.outerHeight()});
// add TOC button
var toggleSidebar = $('<div id="toggle-sidebar"><a href="#table-of-contents"><h2>Table of Contents</h2></a></div>');
$('#content').prepend(toggleSidebar);
// add close button when sidebar showed in mobile screen
var closeBtn = $('<a class="close-sidebar" href="#">Close</a>');
var tocTitle = $('#table-of-contents').find('h2');
tocTitle.append(closeBtn);
});
});
// function collapse_toc_elements_on_click (nav_li_a){
// /*
// When an `a' element in the TOC is clicked, its parent
// `li' element's active attribute is toggled. This causes
// the element to toggle between minimized and maximized
// states. The active attribute is documented in bootstrap.
// https://getbootstrap.com/docs/4.0/components/navbar/#nav
// */
// $(nav_li_a).parent().toggleClass("active");
// }
// $( document ).ready(function() {
// // When the document is loaded and ready, bind the
// // function `collapse_toc_elements_on_click' to the
// // `a' elements in the table of contents.
// $("#text-table-of-contents a").click(function() {
// collapse_toc_elements_on_click(this);
// });
// });
// $( document ).ready(function() {
// // Shift nav in mobile when clicking the menu.
// $(document).on('click', "[data-toggle='wy-nav-top']", function() {
// $("[data-toggle='wy-nav-shift']").toggleClass("shift");
// $("[data-toggle='rst-versions']").toggleClass("shift");
// });
// // Close menu when you click a link.
// $(document).on('click', ".wy-menu-vertical .current ul li a", function() {
// $("[data-toggle='wy-nav-shift']").removeClass("shift");
// $("[data-toggle='rst-versions']").toggleClass("shift");
// });
// $(document).on('click', "[data-toggle='rst-current-version']", function() {
// $("[data-toggle='rst-versions']").toggleClass("shift-up");
// });
// // Make tables responsive
// $("table.docutils:not(.field-list)").wrap("<div class='wy-table-responsive'></div>");
// });
// $( document ).ready(function() {
// $('#text-table-of-contents ul').first().addClass('nav');
// // ScrollSpy also requires that we use
// // a Bootstrap nav component.
// $('body').scrollspy({target: '#text-table-of-contents'});
// // set the height of tableOfContents
// var $postamble = $('#postamble');
// var $tableOfContents = $('#table-of-contents');
// $tableOfContents.css({paddingBottom: $postamble.outerHeight()});
// // add TOC button
// var toggleSidebar = $('<div id="toggle-sidebar"><a href="#table-of-contents"><h2>Table of Contents</h2></a></div>');
// $('#content').prepend(toggleSidebar);
// // add close button when sidebar showed in mobile screen
// var closeBtn = $('<a class="close-sidebar" href="#">Close</a>');
// var tocTitle = $('#table-of-contents').find('h2');
// tocTitle.append(closeBtn);
// });
// window.SphinxRtdTheme = (function (jquery) {
// var stickyNav = (function () {
// var navBar,
// win,
// stickyNavCssClass = 'stickynav',
// applyStickNav = function () {
// if (navBar.height() <= win.height()) {
// navBar.addClass(stickyNavCssClass);
// } else {
// navBar.removeClass(stickyNavCssClass);
// }
// },
// enable = function () {
// applyStickNav();
// win.on('resize', applyStickNav);
// },
// init = function () {
// navBar = jquery('nav.wy-nav-side:first');
// win = jquery(window);
// };
// jquery(init);
// return {
// enable : enable
// };
// }());
// return {
// StickyNav : stickyNav
// };
// }($));