extra.js 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. var nodemcu = nodemcu || {};
  2. (function () {
  3. 'use strict';
  4. var languageCodeToNameMap = {en: 'English', de: 'Deutsch'};
  5. var languageNames = values(languageCodeToNameMap);
  6. var defaultLanguageCode = 'en';
  7. $(document).ready(function () {
  8. hideNavigationForAllButSelectedLanguage();
  9. addLanguageSelectorToRtdFlyOutMenu();
  10. });
  11. function hideNavigationForAllButSelectedLanguage() {
  12. var selectedLanguageCode = determineSelectedLanguageCode();
  13. var selectedLanguageName = languageCodeToNameMap[selectedLanguageCode];
  14. // Finds all subnav elements and hides them if they're /language/ subnavs. Hence, all 'Modules' subnav elements
  15. // won't be hidden.
  16. // <ul class="subnav">
  17. // <li><span>Modules</span></li>
  18. // <li class="toctree-l1 ">
  19. // <a class="" href="EN/modules/node/">node</a>
  20. // </li>
  21. $('.subnav li span').not(':contains(' + selectedLanguageName + ')').each(function (index) {
  22. var spanElement = $(this);
  23. if ($.inArray(spanElement.text(), languageNames) > -1) {
  24. spanElement.parent().parent().hide();
  25. }
  26. });
  27. }
  28. /**
  29. * Adds a language selector to the RTD fly out menu found bottom left. Example
  30. * <dl>
  31. * <dt>Languages</dt>
  32. * <dd><a href="http://nodemcu.readthedocs.org/en/<branch>/de/">de</a></dd>
  33. * <strong>
  34. * <dd><a href="http://nodemcu.readthedocs.org/en/<branch>/en/">en</a></dd>
  35. * </strong>
  36. * </dl>
  37. */
  38. function addLanguageSelectorToRtdFlyOutMenu() {
  39. var flyOutWrapper = $('.rst-other-versions .injected');
  40. // only works on RTD
  41. if (flyOutWrapper.length > 0) {
  42. var selectedLanguageCode = determineSelectedLanguageCode();
  43. var dl = document.createElement('dl');
  44. var dt = document.createElement('dt');
  45. dl.appendChild(dt);
  46. dt.appendChild(document.createTextNode('Languages'));
  47. for (var languageCode in languageCodeToNameMap) {
  48. dl.appendChild(createLanguageLinkFor(languageCode, selectedLanguageCode === languageCode));
  49. }
  50. flyOutWrapper.prepend(dl);
  51. }
  52. }
  53. function createLanguageLinkFor(languageCode, isCurrentlySelected) {
  54. var strong;
  55. var pathSegments = window.location.pathname.split('/');
  56. var dd = document.createElement("dd");
  57. var href = document.createElement("href");
  58. href.setAttribute('a', '/' + pathSegments[0] + '/' + pathSegments[1] + '/' + languageCode);
  59. href.appendChild(document.createTextNode(languageCode));
  60. dd.appendChild(href);
  61. if (isCurrentlySelected) {
  62. strong = document.createElement("strong");
  63. strong.appendChild(dd);
  64. return strong;
  65. } else {
  66. return dd;
  67. }
  68. }
  69. function determineSelectedLanguageCode() {
  70. var selectedLanguageCode, path = window.location.pathname;
  71. if (window.location.origin.indexOf('readthedocs') > -1) {
  72. // path is like /en/<branch>/<lang>/build/ -> extract 'lang'
  73. selectedLanguageCode = path.split('/')[2];
  74. } else {
  75. // path is like /<lang>/build/ -> extract 'lang'
  76. selectedLanguageCode = path.substr(1, 2);
  77. }
  78. if (!selectedLanguageCode || selectedLanguageCode.length > 2) {
  79. selectedLanguageCode = defaultLanguageCode;
  80. }
  81. return selectedLanguageCode;
  82. }
  83. function values(associativeArray) {
  84. var values = [];
  85. for (var key in associativeArray) {
  86. if (associativeArray.hasOwnProperty(key)) {
  87. values.push(associativeArray[key]);
  88. }
  89. }
  90. return values;
  91. }
  92. }());