Files @ 97b8db701355
Branch filter:

Location: kallithea/kallithea/templates/changelog/changelog.html - annotation

Mads Kiilerich
templates: replace invalid metatag attributes with data attributes

(We could also use plain classes ... but stick to the plan ...)
d1addaf7a91e
d1addaf7a91e
d1addaf7a91e
d1addaf7a91e
37354e1ab283
d1addaf7a91e
d1addaf7a91e
d1addaf7a91e
d1addaf7a91e
37354e1ab283
d1addaf7a91e
d1addaf7a91e
d1addaf7a91e
d1addaf7a91e
d1addaf7a91e
d1addaf7a91e
d1addaf7a91e
432e86d1e555
432e86d1e555
432e86d1e555
d1addaf7a91e
d1addaf7a91e
d1addaf7a91e
ec39e73be935
d1addaf7a91e
ec39e73be935
d1addaf7a91e
d1addaf7a91e
432e86d1e555
80a15e10857a
d1addaf7a91e
33ca6d0f7058
d1addaf7a91e
d1addaf7a91e
d1addaf7a91e
68d3315c48d4
42bc65838fd1
144878118c95
d1addaf7a91e
2ddd4fb23b4e
acfe79f23961
68d3315c48d4
a79e651306e2
68d3315c48d4
68d3315c48d4
68d3315c48d4
68d3315c48d4
68d3315c48d4
68d3315c48d4
2ddd4fb23b4e
2ddd4fb23b4e
b7654d1675da
432e86d1e555
b7654d1675da
432e86d1e555
432e86d1e555
432e86d1e555
9581233e9275
d1addaf7a91e
9581233e9275
c2e3923eebe4
b7654d1675da
d1addaf7a91e
27f498ee6db0
b7654d1675da
0111c18298a0
2ddd4fb23b4e
d1addaf7a91e
d1addaf7a91e
2ea889757ba1
0111c18298a0
2ea889757ba1
d1addaf7a91e
b8734b428786
d1addaf7a91e
d1addaf7a91e
d1addaf7a91e
d1addaf7a91e
d1addaf7a91e
d1addaf7a91e
8c5d1e94f9ee
d1addaf7a91e
d1addaf7a91e
d1addaf7a91e
d1addaf7a91e
d1addaf7a91e
d1addaf7a91e
d1addaf7a91e
d1addaf7a91e
d1addaf7a91e
d1addaf7a91e
c40e567e4b82
40f65bfc04d0
d1addaf7a91e
d1addaf7a91e
c40e567e4b82
b1bec568c0a2
40f65bfc04d0
d1addaf7a91e
d1addaf7a91e
d1addaf7a91e
d1addaf7a91e
d1addaf7a91e
d1addaf7a91e
83087ae63bd6
c40e567e4b82
d1addaf7a91e
d1addaf7a91e
12919ffab34c
d1addaf7a91e
d1addaf7a91e
c40e567e4b82
d1addaf7a91e
d1addaf7a91e
27c7922c745d
d1addaf7a91e
d1addaf7a91e
d1addaf7a91e
c3892e3a6ba3
d1addaf7a91e
d1addaf7a91e
d1addaf7a91e
c40e567e4b82
b3299a079fa6
d1addaf7a91e
f9f0922a3158
d1addaf7a91e
d1addaf7a91e
d1addaf7a91e
d1addaf7a91e
9dfabbf93361
d4b39ef6cadf
9dfabbf93361
d4b39ef6cadf
9dfabbf93361
9dfabbf93361
d4b39ef6cadf
9dfabbf93361
d4b39ef6cadf
9dfabbf93361
9dfabbf93361
d4b39ef6cadf
9dfabbf93361
d4b39ef6cadf
9dfabbf93361
9dfabbf93361
d4b39ef6cadf
9dfabbf93361
d4b39ef6cadf
9dfabbf93361
7ea933acdb8b
d4b39ef6cadf
7ea933acdb8b
d4b39ef6cadf
7ea933acdb8b
06e49be38d78
d1addaf7a91e
d4b39ef6cadf
ce7c4addc2ae
d4b39ef6cadf
d1addaf7a91e
d1addaf7a91e
d1addaf7a91e
d4b39ef6cadf
ce7c4addc2ae
d4b39ef6cadf
d1addaf7a91e
d1addaf7a91e
d4b39ef6cadf
ce7c4addc2ae
d4b39ef6cadf
d1addaf7a91e
d1addaf7a91e
d1addaf7a91e
d1addaf7a91e
d1addaf7a91e
d1addaf7a91e
d1addaf7a91e
d1addaf7a91e
d1addaf7a91e
07bfe091845e
07bfe091845e
2ea889757ba1
2ea889757ba1
103f07acad83
103f07acad83
103f07acad83
d1addaf7a91e
d1addaf7a91e
d1addaf7a91e
dba66b0768f4
d1addaf7a91e
e271a8766951
081c47cfad7b
081c47cfad7b
d1addaf7a91e
d1addaf7a91e
081c47cfad7b
081c47cfad7b
07bfe091845e
07bfe091845e
07bfe091845e
07bfe091845e
07bfe091845e
07bfe091845e
322e17eb356a
07bfe091845e
07bfe091845e
93b512845dab
07bfe091845e
93b512845dab
322e17eb356a
322e17eb356a
322e17eb356a
322e17eb356a
93b512845dab
322e17eb356a
322e17eb356a
322e17eb356a
322e17eb356a
322e17eb356a
93b512845dab
07bfe091845e
07bfe091845e
07bfe091845e
07bfe091845e
93b512845dab
d1addaf7a91e
081c47cfad7b
081c47cfad7b
07bfe091845e
a4b814804263
a4b814804263
a4b814804263
a4b814804263
07bfe091845e
07bfe091845e
07bfe091845e
07bfe091845e
07bfe091845e
07bfe091845e
a4b814804263
07bfe091845e
07bfe091845e
a4b814804263
a4b814804263
07bfe091845e
07bfe091845e
07bfe091845e
07bfe091845e
07bfe091845e
07bfe091845e
07bfe091845e
081c47cfad7b
07bfe091845e
081c47cfad7b
27f498ee6db0
081c47cfad7b
081c47cfad7b
081c47cfad7b
07bfe091845e
d1addaf7a91e
081c47cfad7b
081c47cfad7b
081c47cfad7b
322e17eb356a
d1addaf7a91e
081c47cfad7b
a4b814804263
d1addaf7a91e
d1addaf7a91e
e271a8766951
07bfe091845e
07bfe091845e
48a96c4059df
07bfe091845e
07bfe091845e
d1addaf7a91e
081c47cfad7b
081c47cfad7b
d1addaf7a91e
48a96c4059df
d1addaf7a91e
d1addaf7a91e
ee2993beec85
d1addaf7a91e
ee2993beec85
d1addaf7a91e
ee2993beec85
ee2993beec85
d1addaf7a91e
d1addaf7a91e
d1addaf7a91e
d1addaf7a91e
ee2993beec85
ee2993beec85
ee2993beec85
ee2993beec85
d1addaf7a91e
d1addaf7a91e
d1addaf7a91e
f22d103ba9e8
d1addaf7a91e
42bc65838fd1
48a96c4059df
d1addaf7a91e
d1addaf7a91e
d1addaf7a91e
0111c18298a0
0111c18298a0
190cb30841de
4f4d2e899a02
0111c18298a0
0111c18298a0
0111c18298a0
d1addaf7a91e
d1addaf7a91e
d1addaf7a91e
0111c18298a0
d1addaf7a91e
d1addaf7a91e
d1addaf7a91e
0111c18298a0
d1addaf7a91e
d1addaf7a91e
d1addaf7a91e
dba66b0768f4
48a96c4059df
d1addaf7a91e
d1addaf7a91e
d1addaf7a91e
d1addaf7a91e
d1addaf7a91e
d1addaf7a91e
d1addaf7a91e
d1addaf7a91e
d1addaf7a91e
## -*- coding: utf-8 -*-

<%inherit file="/base/base.html"/>

<%block name="title">
    ${_('%s Changelog') % c.repo_name}
    %if c.changelog_for_path:
      /${c.changelog_for_path}
    %endif
</%block>

<%def name="breadcrumbs_links()">
    <% size = c.size if c.size <= c.total_cs else c.total_cs %>
    ${_('Changelog')}
    %if c.changelog_for_path:
     - /${c.changelog_for_path}
    %endif
    %if c.revision:
    @ ${h.short_id(c.first_revision.raw_id)}
    %endif
    - ${ungettext('showing %d out of %d revision', 'showing %d out of %d revisions', size) % (size, c.total_cs)}
</%def>

<%block name="header_menu">
    ${self.menu('repositories')}
</%block>

<%def name="main()">
${self.repo_context_bar('changelog', c.first_revision.raw_id if c.first_revision else None)}
<div class="panel panel-primary">
    <!-- box / title -->
    <div class="panel-heading clearfix">
        ${self.breadcrumbs()}
    </div>
    <div class="table">
        %if c.pagination:
            <div>
                <div style="overflow:auto; ${'display:none' if c.changelog_for_path else ''}">
                    <div class="container_header">
                        <div style="float:left; margin-left:20px;">
                            ${h.form(h.url.current(),method='get',class_="form-inline")}
                                ${h.submit('set',_('Show'),class_="btn btn-default btn-sm")}
                                ${h.text('size',size=3,value=c.size,class_='form-control')}
                                ${_('revisions')}
                                %if c.branch_name:
                                    ${h.hidden('branch', c.branch_name)}
                                %endif
                            ${h.end_form()}
                            <a href="#" class="btn btn-default btn-sm" id="rev_range_clear" style="display:none">${_('Clear selection')}</a>
                        </div>
                        <div style="float: right; margin: 0px 0px 0px 4px">
                            <a href="#" class="btn btn-default btn-sm" id="rev_range_container" style="display:none"></a>
                            %if c.revision:
                                <a class="btn btn-default btn-sm" href="${h.url('changelog_home', repo_name=c.repo_name)}">
                                    ${_('Go to tip of repository')}
                                </a>
                            %endif
                            %if c.db_repo.fork:
                                <a id="compare_fork"
                                   title="${_('Compare fork with %s' % c.db_repo.fork.repo_name)}"
                                   href="${h.url('compare_url',repo_name=c.db_repo.fork.repo_name,org_ref_type=c.db_repo.landing_rev[0],org_ref_name=c.db_repo.landing_rev[1],other_repo=c.repo_name,other_ref_type='branch' if request.GET.get('branch') else c.db_repo.landing_rev[0],other_ref_name=request.GET.get('branch') or c.db_repo.landing_rev[1], merge=1)}"
                                   class="btn btn-default btn-sm"><i class="icon-git-compare"></i> ${_('Compare fork with parent repository (%s)' % c.db_repo.fork.repo_name)}</a>
                            %endif
                            ## text and href of open_new_pr is controlled from javascript
                            <a id="open_new_pr" class="btn btn-default btn-sm"></a>
                            ${_("Branch filter:")} ${h.select('branch_filter',c.branch_name,c.branch_filters)}
                        </div>
                    </div>
                </div>

                <div id="changelog" style="clear:both">

                <div id="graph_nodes">
                    <canvas id="graph_canvas" style="width:0"></canvas>
                </div>
                <div id="graph_content" style="${'margin: 0px' if c.changelog_for_path else ''}">

                <table id="changesets">
                <tbody>
                %for cnt,cs in enumerate(c.pagination):
                    <tr id="chg_${cnt+1}" class="container ${'mergerow' if len(cs.parents) > 1 else ''}">
                        <td class="checkbox">
                            %if c.changelog_for_path:
                                ${h.checkbox(cs.raw_id,class_="changeset_range", disabled="disabled")}
                            %else:
                                ${h.checkbox(cs.raw_id,class_="changeset_range")}
                            %endif
                        <td class="status">
                          %if c.statuses.get(cs.raw_id):
                            <div class="changeset-status-ico">
                            %if c.statuses.get(cs.raw_id)[2]:
                              <a data-toggle="tooltip" title="${_('Changeset status: %s by %s\nClick to open associated pull request %s') % (c.statuses.get(cs.raw_id)[1], c.statuses.get(cs.raw_id)[5].username, c.statuses.get(cs.raw_id)[4])}" href="${h.url('pullrequest_show',repo_name=c.statuses.get(cs.raw_id)[3],pull_request_id=c.statuses.get(cs.raw_id)[2])}">
                                <i class="icon-circle changeset-status-${c.statuses.get(cs.raw_id)[0]}"></i>
                              </a>
                            %else:
                              <a data-toggle="tooltip" title="${_('Changeset status: %s by %s') % (c.statuses.get(cs.raw_id)[1], c.statuses.get(cs.raw_id)[5].username)}"
                                 href="${c.comments[cs.raw_id][0].url()}">
                                  <i class="icon-circle changeset-status-${c.statuses.get(cs.raw_id)[0]}"></i>
                              </a>
                            %endif
                            </div>
                          %endif
                        </td>
                        <td class="author">
                            ${h.gravatar(h.email_or_none(cs.author), size=16)}
                            <span data-toggle="tooltip" title="${cs.author}" class="user">${h.shorter(h.person(cs.author),22)}</span>
                        </td>
                        <td class="hash" style="width:${len(h.show_id(cs))*6.5}px">
                            ${h.link_to(h.show_id(cs),h.url('changeset_home',repo_name=c.repo_name,revision=cs.raw_id), class_='changeset_hash')}
                        </td>
                        <td class="date">
                            <div class="date" data-toggle="tooltip" title="${h.fmt_date(cs.date)}">${h.age(cs.date,True)}</div>
                        </td>
                        <td class="expand_commit" commit_id="${cs.raw_id}" title="${_('Expand commit message')}">
                            <i class="icon-align-left" style="color:#999"></i>
                        </td>
                        <td class="mid">
                            <div class="log-container">
                                <div class="message" id="C-${cs.raw_id}">${h.urlify_text(cs.message, c.repo_name,h.url('changeset_home',repo_name=c.repo_name,revision=cs.raw_id))}</div>
                                <div class="extra-container">
                                    %if c.comments.get(cs.raw_id):
                                        <div class="comments-container">
                                            <div class="comments-cnt" data-toggle="tooltip" title="${_('Changeset has comments')}">
                                                <a href="${c.comments[cs.raw_id][0].url()}">
                                                    ${len(c.comments[cs.raw_id])}
                                                    <i class="icon-comment-discussion"></i>
                                                </a>
                                            </div>
                                        </div>
                                    %endif
                                    %if cs.bumped:
                                        <span class="bumpedtag" title="Bumped">
                                            Bumped
                                        </span>
                                    %endif
                                    %if cs.divergent:
                                        <span class="divergenttag" title="Divergent">
                                            Divergent
                                        </span>
                                    %endif
                                    %if cs.extinct:
                                        <span class="extincttag" title="Extinct">
                                            Extinct
                                        </span>
                                    %endif
                                    %if cs.unstable:
                                        <span class="unstabletag" title="Unstable">
                                            Unstable
                                        </span>
                                    %endif
                                    %if cs.phase:
                                        <span class="phasetag" title="Phase">
                                            ${cs.phase}
                                        </span>
                                    %endif
                                    %if h.is_hg(c.db_repo_scm_instance):
                                        %for book in cs.bookmarks:
                                            <span class="booktag" title="${_('Bookmark %s') % book}">
                                                ${h.link_to(book,h.url('changeset_home',repo_name=c.repo_name,revision=cs.raw_id))}
                                            </span>
                                        %endfor
                                    %endif
                                    %for tag in cs.tags:
                                        <span class="tagtag" title="${_('Tag %s') % tag}">
                                            ${h.link_to(tag,h.url('changeset_home',repo_name=c.repo_name,revision=cs.raw_id))}
                                        </span>
                                    %endfor
                                    %if (not c.branch_name) and cs.branch:
                                        <span class="branchtag" title="${_('Branch %s' % cs.branch)}">
                                            ${h.link_to(cs.branch,h.url('changelog_home',repo_name=c.repo_name,branch=cs.branch))}
                                        </span>
                                    %endif
                                </div>
                            </div>
                        </td>
                    </tr>
                %endfor
                </tbody>
                </table>

                <input type="checkbox" id="singlerange" style="display:none"/>

                </div>

                <ul class="pagination">
                    ${c.pagination.pager()}
                </ul>
            </div>
        </div>

        <script type="text/javascript" src="${h.url('/js/graph.js', ver=c.kallithea_version)}"></script>
        <script type="text/javascript">
            $(document).ready(function(){
                var $checkboxes = $('.changeset_range');

                pyroutes.register('changeset_home', "${h.url('changeset_home', repo_name='%(repo_name)s', revision='%(revision)s')}", ['repo_name', 'revision']);

                var checkbox_checker = function(e) {
                    var $checked_checkboxes = $checkboxes.filter(':checked');
                    var $singlerange = $('#singlerange');

                    $('#rev_range_container').hide();
                    $checkboxes.show();
                    $singlerange.show();

                    if ($checked_checkboxes.length > 0) {
                        $checked_checkboxes.first().parent('td').append($singlerange);
                        var singlerange = $singlerange.prop('checked');
                        var rev_end = $checked_checkboxes.first().prop('name');
                        if ($checked_checkboxes.length > 1 || singlerange) {
                            var rev_start = $checked_checkboxes.last().prop('name');
                            $('#rev_range_container').prop('href',
                                pyroutes.url('changeset_home', {'repo_name': '${c.repo_name}',
                                                                'revision': rev_start + '...' + rev_end}));
                            $('#rev_range_container').html(
                                 _TM['Show Selected Changesets {0} &rarr; {1}'].format(rev_start.substr(0, 12), rev_end.substr(0, 12)));
                            $('#rev_range_container').show();
                            $('#open_new_pr').prop('href', pyroutes.url('pullrequest_home',
                                                                        {'repo_name': '${c.repo_name}',
                                                                         'rev_start': rev_start,
                                                                         'rev_end': rev_end}));
                            $('#open_new_pr').html(_TM['Open New Pull Request for {0} &rarr; {1}'].format(rev_start.substr(0, 12), rev_end.substr(0, 12)));
                        } else {
                            $('#open_new_pr').prop('href', pyroutes.url('pullrequest_home',
                                                                        {'repo_name': '${c.repo_name}',
                                                                         'rev_end': rev_end}));
                            $('#open_new_pr').html(_TM['Open New Pull Request from {0}'].format(rev_end.substr(0, 12)));
                        }
                        $('#rev_range_clear').show();
                        $('#compare_fork').hide();

                        var disabled = true;
                        $checkboxes.each(function(){
                            var $this = $(this);
                            if (disabled) {
                                if ($this.prop('checked')) {
                                    $this.closest('tr').removeClass('out-of-range');
                                    disabled = singlerange;
                                } else {
                                    $this.closest('tr').addClass('out-of-range');
                                }
                            } else {
                                $this.closest('tr').removeClass('out-of-range');
                                disabled = $this.prop('checked');
                            }
                        });

                        if ($checked_checkboxes.length + (singlerange ? 1 : 0) >= 2) {
                            $checkboxes.hide();
                            $checked_checkboxes.show();
                            if (!singlerange)
                                $singlerange.hide();
                        }
                    } else {
                        $('#singlerange').hide().prop('checked', false);
                        $('#rev_range_clear').hide();
                        %if c.revision:
                            $('#open_new_pr').prop('href', pyroutes.url('pullrequest_home',
                                                                        {'repo_name': '${c.repo_name}',
                                                                         'rev_end':'${c.first_revision.raw_id}'}));
                            $('#open_new_pr').html(_TM['Open New Pull Request from {0}'].format('${c.revision}'));
                        %else:
                            $('#open_new_pr').prop('href', pyroutes.url('pullrequest_home',
                                                                        {'repo_name': '${c.repo_name}',
                                                                        'branch':'${c.first_revision.branch}'}));
                            $('#open_new_pr').html(_TM['Open New Pull Request from {0}'].format('${c.first_revision.branch}'));
                        %endif
                        $('#compare_fork').show();
                        $checkboxes.closest('tr').removeClass('out-of-range');
                    }
                };
                checkbox_checker();
                $checkboxes.click(function() {
                    checkbox_checker();
                    r.render(jsdata);
                });
                $('#singlerange').click(checkbox_checker);

                $('#rev_range_clear').click(function(e){
                    $checkboxes.prop('checked', false);
                    checkbox_checker();
                    r.render(jsdata);
                });

                var $msgs = $('.message');
                // get first element height
                var el = $('#graph_content .container')[0];
                var row_h = el.clientHeight;
                $msgs.each(function() {
                    var m = this;

                    var h = m.clientHeight;
                    if(h > row_h){
                        var offset = row_h - (h+12);
                        $(m.nextElementSibling).css('display', 'block');
                        $(m.nextElementSibling).css('margin-top', offset+'px');
                    }
                });

                $('.expand_commit').on('click',function(e){
                    var cid = $(this).attr('commit_id');
                    $('#C-'+cid).toggleClass('expanded');

                    //redraw the graph, r and jsdata are bound outside function
                    r.render(jsdata);
                });

                // change branch filter
                $("#branch_filter").select2({
                    dropdownAutoWidth: true,
                    maxResults: 50,
                    sortResults: branchSort
                    });

                $("#branch_filter").change(function(e){
                    var selected_branch = e.currentTarget.options[e.currentTarget.selectedIndex].value;
                    if(selected_branch != ''){
                        window.location = pyroutes.url('changelog_home', {'repo_name': '${c.repo_name}',
                                                                          'branch': selected_branch});
                    }else{
                        window.location = pyroutes.url('changelog_home', {'repo_name': '${c.repo_name}'});
                    }
                    $("#changelog").hide();
                });

                var jsdata = ${c.jsdata|n};
                var r = new BranchRenderer('graph_canvas', 'graph_content', 'chg_');
                r.render(jsdata);
            });

        </script>
        %else:
            ${_('There are no changes yet')}
        %endif
    </div>
</div>
</%def>