Переглянути джерело

Fix search form in RTD docs

Marcel Stör 8 роки тому
батько
коміт
7dd89dd15e
1 змінених файлів з 29 додано та 0 видалено
  1. 29 0
      docs/js/extra.js

+ 29 - 0
docs/js/extra.js

@@ -8,6 +8,7 @@ var nodemcu = nodemcu || {};
 
   $(document).ready(function () {
     addToc();
+    fixSearch();
     hideNavigationForAllButSelectedLanguage();
     addLanguageSelectorToRtdFlyOutMenu();
     replaceRelativeLinksWithStaticGitHubUrl();
@@ -43,6 +44,34 @@ var nodemcu = nodemcu || {};
     }
   }
 
+  /*
+   * RTD messes up MkDocs' search feature by tinkering with the search box defined in the theme, see
+   * https://github.com/rtfd/readthedocs.org/issues/1088. This function sets up a DOM4 MutationObserver
+   * to react to changes to the search form (triggered by RTD on doc ready). It then reverts everything
+   * the RTD JS code modified.
+   */
+  function fixSearch() {
+    var target = document.getElementById('rtd-search-form');
+    var config = {attributes: true, childList: true};
+
+    var observer = new MutationObserver(function(mutations) {
+      // if it isn't disconnected it'll loop infinitely because the observed element is modified
+      observer.disconnect();
+      var form = $('#rtd-search-form');
+      form.empty();
+      form.attr('action', 'https://' + window.location.hostname + '/en/' + determineSelectedBranch() + '/search.html');
+      $('<input>').attr({
+        type: "text",
+        name: "q",
+        placeholder: "Search docs"
+      }).appendTo(form);
+    });
+
+    if (window.location.origin.indexOf('readthedocs') > -1) {
+      observer.observe(target, config);
+    }
+  }
+
   function hideNavigationForAllButSelectedLanguage() {
     var selectedLanguageCode = determineSelectedLanguageCode();
     var selectedLanguageName = languageCodeToNameMap[selectedLanguageCode];