# HG changeset patch # User Mads Kiilerich # Date 1440602939 -7200 # Node ID 07bfe091845e42d6fc0dbc3099d997057a8b14f9 # Parent a4b8148042637a00ad46998b246d63beb6de49f2 changelog: improved UI for selection of ranges Show an extra checkbox next to the first selected checkbox to be able to specify single revision ranges (which is different from the start of an open range). When two revisions are selected, hide all other checkboxes to make it impossible to select more. diff -r a4b814804263 -r 07bfe091845e kallithea/public/css/style.css --- a/kallithea/public/css/style.css Wed Aug 26 17:28:59 2015 +0200 +++ b/kallithea/public/css/style.css Wed Aug 26 17:28:59 2015 +0200 @@ -2390,7 +2390,7 @@ } #graph_content .container .checkbox { - width: 12px; + width: 14px; font-size: 0.85em; } @@ -2435,6 +2435,7 @@ position: relative; } +#graph_content .container #singlerange, #graph_content .container .changeset_range { float: left; margin: 6px 3px; diff -r a4b814804263 -r 07bfe091845e kallithea/templates/changelog/changelog.html --- a/kallithea/templates/changelog/changelog.html Wed Aug 26 17:28:59 2015 +0200 +++ b/kallithea/templates/changelog/changelog.html Wed Aug 26 17:28:59 2015 +0200 @@ -154,6 +154,8 @@ + +
@@ -171,16 +173,18 @@ 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').substr(0, 12); - var rev_start = $checked_checkboxes.last().prop('name').substr(0, 12); - if (rev_start == rev_end) { - $('#rev_range_container').hide(); - $('#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)); - } else { + if ($checked_checkboxes.length > 1 || singlerange) { + var rev_start = $checked_checkboxes.last().prop('name').substr(0, 12); $('#rev_range_container').prop('href', pyroutes.url('changeset_home', {'repo_name': '${c.repo_name}', 'revision': rev_start + '...' + rev_end})); @@ -192,31 +196,46 @@ 'rev_start': rev_start, 'rev_end': rev_end})); $('#open_new_pr').html(_TM['Open New Pull Request for {0} → {1}'].format(rev_start, rev_end)); + } 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)); } $('#rev_range_clear').show(); $('#compare_fork').hide(); + var disabled = true; $checkboxes.each(function(){ var $this = $(this); if (disabled) { - if ($this.prop('checked')) - disabled = false; - $this.closest('tr').toggleClass('out-of-range', 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').toggleClass('out-of-range', false); - if ($this.prop('checked')) - disabled = true; + $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 { - $('#rev_range_container').hide(); + $('#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)); + $('#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}', @@ -228,11 +247,16 @@ } }; checkbox_checker(); - $checkboxes.click(checkbox_checker); + $checkboxes.click(function() { + checkbox_checker(); + r.render(jsdata,100); + }); + $('#singlerange').click(checkbox_checker); $('#rev_range_clear').click(function(e){ $checkboxes.prop('checked', false); checkbox_checker(); + r.render(jsdata,100); }); var $msgs = $('.message');