]> granicus.if.org Git - python/commitdiff
Fix/improve the changelog filtering.
authorEzio Melotti <ezio.melotti@gmail.com>
Mon, 1 Oct 2012 22:43:42 +0000 (01:43 +0300)
committerEzio Melotti <ezio.melotti@gmail.com>
Mon, 1 Oct 2012 22:43:42 +0000 (01:43 +0300)
Doc/tools/sphinxext/layout.html
Doc/whatsnew/changelog.rst

index b679f3aee6c0e89d32422e93b6043f4824dab17c..3f68a00d95e6ec7882878c0fb245faabf798f8f0 100644 (file)
     {% if not embedded %}<script type="text/javascript" src="{{ pathto('_static/copybutton.js', 1) }}"></script>{% endif %}
     {% if pagename == 'whatsnew/changelog' %}
     <script type="text/javascript">
-      function dofilter() {
-        var el = document.getElementById('searchbox');
-        var string = el.value.toLowerCase();
-        var litags = document.getElementsByTagName('li')
-        for (var idx = 0; idx < litags.length; idx++) {
-          var li = litags[idx];
-          if (li.innerHTML.toLowerCase().indexOf(string) >= 0) {
-            li.style.display = '';
-          } else {
-            li.style.display = 'none';
+      $(document).ready(function() {
+          // add the search form and bind the events
+          $('h1').after([
+            '<p>Filter entries by content:',
+            '<input type="text" value="" id="searchbox" style="width: 50%">',
+            '<input type="submit" id="searchbox-submit" value="Filter"></p>'
+          ].join('\n'));
+
+          function dofilter() {
+              try {
+                  var query = new RegExp($('#searchbox').val(), 'i');
+              }
+              catch (e) {
+                  return; // not a valid regex (yet)
+              }
+              // find headers for the versions (What's new in Python X.Y.Z?)
+              $('#changelog h2').each(function(index1, h2) {
+                  var h2_parent = $(h2).parent();
+                  var sections_found = 0;
+                  // find headers for the sections (Core, Library, etc.)
+                  h2_parent.find('h3').each(function(index2, h3) {
+                      var h3_parent = $(h3).parent();
+                      var entries_found = 0;
+                      // find all the entries
+                      h3_parent.find('li').each(function(index3, li) {
+                          var li = $(li);
+                          // check if the query matches the entry
+                          if (query.test(li.text())) {
+                              li.show();
+                              entries_found++;
+                          }
+                          else {
+                              li.hide();
+                          }
+                      });
+                      // if there are entries, show the section, otherwise hide it
+                      if (entries_found > 0) {
+                          h3_parent.show();
+                          sections_found++;
+                      }
+                      else {
+                          h3_parent.hide();
+                      }
+                  });
+                  if (sections_found > 0)
+                      h2_parent.show();
+                  else
+                      h2_parent.hide();
+              });
           }
-        }
-      }
+          $('#searchbox').keyup(dofilter);
+          $('#searchbox-submit').click(dofilter);
+      });
     </script>
     {% endif %}
 {{ super() }}
@@ -31,7 +71,7 @@
     <div class="footer">
     &copy; <a href="{{ pathto('copyright') }}">Copyright</a> {{ copyright|e }}.
     <br />
-    The Python Software Foundation is a non-profit corporation.  
+    The Python Software Foundation is a non-profit corporation.
     <a href="http://www.python.org/psf/donations/">Please donate.</a>
     <br />
     Last updated on {{ last_updated|e }}.
index 680d110e0d59e000d864c5215b946e2fd80fd49a..57e2dabffaa3e39f53b863a557789b2e9ffc7aa0 100644 (file)
@@ -2,13 +2,5 @@
 Changelog
 +++++++++
 
-.. raw:: html
-
-   <p>
-   Filter entries by content:
-   <input type="text" value="" id="searchbox" style="width: 50%" onchange="dofilter()">
-   <input type="submit" value="Filter" onclick="dofilter()">
-   </p>
-
 .. miscnews:: ../../Misc/NEWS