extra.js 3.7 KB

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