summaryrefslogtreecommitdiff
path: root/Doc/tools/static/changelog_search.js
blob: c881a9bd4c84a768288dc7e1283388ae7d3f972c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
$(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);
});