123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- var nodemcu = nodemcu || {};
- (function () {
- 'use strict';
- var languageCodeToNameMap = {en: 'English', de: 'Deutsch'};
- var languageNames = values(languageCodeToNameMap);
- var defaultLanguageCode = 'en';
- $(document).ready(function () {
- hideNavigationForAllButSelectedLanguage();
- addLanguageSelectorToRtdFlyOutMenu();
- document.addEventListener("DOMSubtreeModified", function(e) {
- // Notify of change!
- debugger;
- console.warn("change!", e);
- }, false);
- });
- function hideNavigationForAllButSelectedLanguage() {
- var selectedLanguageCode = determineSelectedLanguageCode();
- var selectedLanguageName = languageCodeToNameMap[selectedLanguageCode];
- // Finds all subnav elements and hides them if they're /language/ subnavs. Hence, all 'Modules' subnav elements
- // won't be hidden.
- // <ul class="subnav">
- // <li><span>Modules</span></li>
- // <li class="toctree-l1 ">
- // <a class="" href="EN/modules/node/">node</a>
- // </li>
- $('.subnav li span').not(':contains(' + selectedLanguageName + ')').each(function (index) {
- var spanElement = $(this);
- if ($.inArray(spanElement.text(), languageNames) > -1) {
- spanElement.parent().parent().hide();
- }
- });
- }
- /**
- * Adds a language selector to the RTD fly out menu found bottom left. Example
- * <dl>
- * <dt>Languages</dt>
- * <dd><a href="http://nodemcu.readthedocs.org/en/<branch>/de/">de</a></dd>
- * <strong>
- * <dd><a href="http://nodemcu.readthedocs.org/en/<branch>/en/">en</a></dd>
- * </strong>
- * </dl>
- */
- function addLanguageSelectorToRtdFlyOutMenu() {
- var flyOutWrapper = $('.rst-other-versions .injected');
- // only works on RTD
- if (flyOutWrapper.length > 0) {
- var selectedLanguageCode = determineSelectedLanguageCode();
- var dl = document.createElement('dl');
- var dt = document.createElement('dt');
- dl.appendChild(dt);
- dt.appendChild(document.createTextNode('Languages'));
- for (var languageCode in languageCodeToNameMap) {
- dl.appendChild(createLanguageLinkFor(languageCode, selectedLanguageCode === languageCode));
- }
- flyOutWrapper.prepend(dl);
- }
- }
- function createLanguageLinkFor(languageCode, isCurrentlySelected) {
- var strong;
- // split[0] is an '' because the path starts with the separator
- var pathSegments = window.location.pathname.split('/');
- var dd = document.createElement("dd");
- var href = document.createElement("a");
- href.setAttribute('href', '/' + pathSegments[1] + '/' + pathSegments[2] + '/' + languageCode);
- href.appendChild(document.createTextNode(languageCode));
- dd.appendChild(href);
- if (isCurrentlySelected) {
- strong = document.createElement("strong");
- strong.appendChild(dd);
- return strong;
- } else {
- return dd;
- }
- }
- function determineSelectedLanguageCode() {
- var selectedLanguageCode, path = window.location.pathname;
- if (window.location.origin.indexOf('readthedocs') > -1) {
- // path is like /en/<branch>/<lang>/build/ -> extract 'lang'
- // split[0] is an '' because the path starts with the separator
- selectedLanguageCode = path.split('/')[3];
- } else {
- // path is like /<lang>/build/ -> extract 'lang'
- selectedLanguageCode = path.substr(1, 2);
- }
- if (!selectedLanguageCode || selectedLanguageCode.length > 2) {
- selectedLanguageCode = defaultLanguageCode;
- }
- return selectedLanguageCode;
- }
- function values(associativeArray) {
- var values = [];
- for (var key in associativeArray) {
- if (associativeArray.hasOwnProperty(key)) {
- values.push(associativeArray[key]);
- }
- }
- return values;
- }
- }());
|