Spaces:
Sleeping
Sleeping
| /* | |
| * doctools.js | |
| * ~~~~~~~~~~~ | |
| * | |
| * Base JavaScript utilities for all Sphinx HTML documentation. | |
| * | |
| * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. | |
| * :license: BSD, see LICENSE for details. | |
| * | |
| */ | |
| ; | |
| const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ | |
| "TEXTAREA", | |
| "INPUT", | |
| "SELECT", | |
| "BUTTON", | |
| ]); | |
| const _ready = (callback) => { | |
| if (document.readyState !== "loading") { | |
| callback(); | |
| } else { | |
| document.addEventListener("DOMContentLoaded", callback); | |
| } | |
| }; | |
| /** | |
| * Small JavaScript module for the documentation. | |
| */ | |
| const Documentation = { | |
| init: () => { | |
| Documentation.initDomainIndexTable(); | |
| Documentation.initOnKeyListeners(); | |
| }, | |
| /** | |
| * i18n support | |
| */ | |
| TRANSLATIONS: {}, | |
| PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), | |
| LOCALE: "unknown", | |
| // gettext and ngettext don't access this so that the functions | |
| // can safely bound to a different name (_ = Documentation.gettext) | |
| gettext: (string) => { | |
| const translated = Documentation.TRANSLATIONS[string]; | |
| switch (typeof translated) { | |
| case "undefined": | |
| return string; // no translation | |
| case "string": | |
| return translated; // translation exists | |
| default: | |
| return translated[0]; // (singular, plural) translation tuple exists | |
| } | |
| }, | |
| ngettext: (singular, plural, n) => { | |
| const translated = Documentation.TRANSLATIONS[singular]; | |
| if (typeof translated !== "undefined") | |
| return translated[Documentation.PLURAL_EXPR(n)]; | |
| return n === 1 ? singular : plural; | |
| }, | |
| addTranslations: (catalog) => { | |
| Object.assign(Documentation.TRANSLATIONS, catalog.messages); | |
| Documentation.PLURAL_EXPR = new Function( | |
| "n", | |
| `return (${catalog.plural_expr})` | |
| ); | |
| Documentation.LOCALE = catalog.locale; | |
| }, | |
| /** | |
| * helper function to focus on search bar | |
| */ | |
| focusSearchBar: () => { | |
| document.querySelectorAll("input[name=q]")[0]?.focus(); | |
| }, | |
| /** | |
| * Initialise the domain index toggle buttons | |
| */ | |
| initDomainIndexTable: () => { | |
| const toggler = (el) => { | |
| const idNumber = el.id.substr(7); | |
| const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); | |
| if (el.src.substr(-9) === "minus.png") { | |
| el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; | |
| toggledRows.forEach((el) => (el.style.display = "none")); | |
| } else { | |
| el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; | |
| toggledRows.forEach((el) => (el.style.display = "")); | |
| } | |
| }; | |
| const togglerElements = document.querySelectorAll("img.toggler"); | |
| togglerElements.forEach((el) => | |
| el.addEventListener("click", (event) => toggler(event.currentTarget)) | |
| ); | |
| togglerElements.forEach((el) => (el.style.display = "")); | |
| if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); | |
| }, | |
| initOnKeyListeners: () => { | |
| // only install a listener if it is really needed | |
| if ( | |
| !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && | |
| !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS | |
| ) | |
| return; | |
| document.addEventListener("keydown", (event) => { | |
| // bail for input elements | |
| if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; | |
| // bail with special keys | |
| if (event.altKey || event.ctrlKey || event.metaKey) return; | |
| if (!event.shiftKey) { | |
| switch (event.key) { | |
| case "ArrowLeft": | |
| if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; | |
| const prevLink = document.querySelector('link[rel="prev"]'); | |
| if (prevLink && prevLink.href) { | |
| window.location.href = prevLink.href; | |
| event.preventDefault(); | |
| } | |
| break; | |
| case "ArrowRight": | |
| if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; | |
| const nextLink = document.querySelector('link[rel="next"]'); | |
| if (nextLink && nextLink.href) { | |
| window.location.href = nextLink.href; | |
| event.preventDefault(); | |
| } | |
| break; | |
| } | |
| } | |
| // some keyboard layouts may need Shift to get / | |
| switch (event.key) { | |
| case "/": | |
| if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; | |
| Documentation.focusSearchBar(); | |
| event.preventDefault(); | |
| } | |
| }); | |
| }, | |
| }; | |
| // quick alias for translations | |
| const _ = Documentation.gettext; | |
| _ready(Documentation.init); | |