summaryrefslogtreecommitdiffstats
path: root/templates/packages/differences.html
blob: 16bde560b2926ba72f61159b80af195a592ccb2f (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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
{% extends "base.html" %}
{% block title %}Arch Linux - Package Differences by Architecture{% endblock %}
{% block navbarclass %}anb-packages{% endblock %}

{% block content %}
{% if differences %}
<div id="differences-filter" class="box filter-criteria">
    <h2>Package Differences by Architecture</h2>
    <h3>Filter Differences View</h3>
    <form id="diff_filter" method="post" action=".">
    <fieldset>
        <legend>Select filter criteria</legend>
        <div><label for="id_archonly" title="Limit packages to selected architecture">Architecture Limitation</label>
            <select name="archonly" id="id_archonly">
                <option value="all">Show All</option>
                <option value="both">Only In Both</option>
                <option value="{{ arch_a.name }}">In {{ arch_a.name }} Only</option>
                <option value="{{ arch_b.name }}">In {{ arch_b.name }} Only</option>
            </select>
        </div>
        <div><label for="id_multilib" title="Show multilib packages"><tt>[multilib]</tt> Visible</label>
            <input type="checkbox" name="multilib" id="id_multilib" value="multilib"/></div>
        <div><label for="id_minor" title="Show minor version mismatches">Minor Version Mismatches</label>
            <input type="checkbox" checked="checked" name="minor" id="id_minor" value="minor"/></div>
        <div ><label>&nbsp;</label><input title="Reset search criteria" type="button" id="criteria_reset" value="Reset"/></div>
    </fieldset>
    </form>
</div>

<div class="box">
    <table class="results">
        <thead>
            <tr>
                <th>Package Name</th>
                <th>Repository</th>
                <th>{{ arch_a.name }} Version</th>
                <th>{{ arch_b.name }} Version</th>
            </tr>
        </thead>
        <tbody>
            {% for diff in differences %}
            <tr class="{% cycle 'odd' 'even' %} {{ diff.classes }}">
                <td>{{ diff.pkgname }}</td>
                <td>{{ diff.repo.name }}</td>
                {% if diff.pkg_a %}
                <td><a href="{{ diff.pkg_a.get_absolute_url }}"
                        title="View package details for {{ diff.pkg_a.pkgname }}">
                        <span{% if diff.pkg_a.flag_date %} class="flagged"{% endif %}>{{ diff.pkg_a.pkgver }}-{{ diff.pkg_a.pkgrel }}</span></a></td>
                {% else %}<td>-</td>{% endif %}
                {% if diff.pkg_b %}
                <td><a href="{{ diff.pkg_b.get_absolute_url }}"
                        title="View package details for {{ diff.pkg_b.pkgname }}">
                        <span{% if diff.pkg_b.flag_date %} class="flagged"{% endif %}>{{ diff.pkg_b.pkgver }}-{{ diff.pkg_b.pkgrel }}</span></a></td>
                {% else %}<td>-</td>{% endif %}
            </tr>
            {% endfor %}
        </tbody>
    </table>
</div>
{% load cdn %}{% jquery %}
<script type="text/javascript" src="/media/jquery.tablesorter.min.js"></script>
<script type="text/javascript">
filter_packages = function() {
    // start with all rows, and then remove ones we shouldn't show
    var rows = $(".results tbody tr");
    if(!$('#id_multilib').is(':checked')) {
        rows = rows.not(".multilib");
    }
    var arch = $("#id_archonly").val();
    if(arch !== "all") {
        rows = rows.filter("." + arch);
    }
    if(!$('#id_minor').is(':checked')) {
        // this check is done last because it is the most expensive
        rows = rows.filter(function(index) {
            // all this just to get the split version out of the table cell
            var pat = /(.*)-(.+)/;
            var ver_a = $('td:eq(2) a', this).text().match(pat);
            var ver_b = $('td:eq(3) a', this).text().match(pat);
            // did we match at all?
            if(!ver_a || !ver_b) return true;
            // first check pkgver
            if(ver_a[1] !== ver_b[1]) return true;
            // pkgver matched, so see if rounded pkgrel matches
            if(Math.floor(parseFloat(ver_a[1])) == Math.floor(parseFloat(ver_b[1]))) return false;
            // pkgrel didn't match, so keep the row
            return true;
        });
    }
    // hide all rows, then show the set we care about
    $('.results tbody tr').hide();
    rows.show();
    // make sure we update the odd/even styling from sorting
    $('.results').trigger("applyWidgets");
};
filter_reset = function() {
    $('#id_archonly').val("all");
    $('#id_multilib').removeAttr("checked");
    $('#id_minor').attr("checked", "checked");
    filter_packages();
};
$(document).ready(function() {
    $('.results').tablesorter({widgets: ['zebra'], sortList: [[1,0], [0,0]]});
    $('#diff_filter select').change(filter_packages);
    $('#diff_filter input').change(filter_packages);
    $('#criteria_reset').click(filter_reset);
    // fire function on page load to ensure the current form selections take effect
    filter_packages();
});
</script>
{% endif %}
{% endblock %}