| |
| {#- |
| Licensed to the Apache Software Foundation (ASF) under one |
| or more contributor license agreements. See the NOTICE file |
| distributed with this work for additional information |
| regarding copyright ownership. The ASF licenses this file |
| to you under the Apache License, Version 2.0 (the |
| "License"); you may not use this file except in compliance |
| with the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, |
| software distributed under the License is distributed on an |
| "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| KIND, either express or implied. See the License for the |
| specific language governing permissions and limitations |
| under the License. |
| -#} |
| {% extends 'allura:templates/repo/repo_master.html' %} |
| {% import 'allura:templates/jinja_master/lib.html' as lib with context %} |
| |
| {% do g.register_forge_css('css/forge/diff.css') %} |
| |
| {% block title %} |
| {{c.project.name}} / {{c.app.config.options.mount_label}} / Commit {{commit.shorthand_id()}} |
| {% endblock %} |
| |
| {% block header -%} |
| Commit <a href="{{commit.url()}}" rel="nofollow">{{commit.shorthand_id()}}</a> {{commit_labels(commit)}} |
| {%- endblock %} |
| |
| {% block actions %} |
| {{ lib.maximize_content_button() }} |
| {{ g.icons['history'].render(href='{}log/'.format(commit.url()), show_title=True, rel='nofollow') }} |
| {% endblock %} |
| |
| {% block body_top_js %} |
| {{ super() }} |
| <script type="text/javascript"> |
| var MAX_REQUESTS = 5; // max simultaneous load requests |
| var WAIT_FOR = 500; // wait for 100ms when requests queue is full and try again |
| var diff_queue = []; // queue of diffs waiting for load |
| var called_count = 0; // count of running load requests |
| </script> |
| {% endblock %} |
| |
| {% block extra_js %} |
| {{ super() }} |
| <script type="text/javascript"> |
| function color_diff(selector) { |
| var overflow = $(selector).find("pre").get(0); |
| var len = overflow.scrollWidth - 5; |
| $(selector).find(".gi, .gd, .gu").width(len); |
| } |
| |
| function ld(diff, callback) { |
| $(diff.selector).load(diff.url, callback); |
| } |
| |
| function load_diff() { |
| if (called_count >= MAX_REQUESTS || diff_queue.length == 0) { |
| return; |
| } |
| called_count++; |
| var diff = diff_queue.shift(); |
| ld(diff, function(response, status, xhr) { |
| if (status == 'error') { |
| if (xhr.status == 500) { |
| // retry once |
| ld(diff, function(response, status, xhr) { |
| if (status == 'error') { |
| $(this).text('Can\'t load diff'); |
| } |
| called_count--; |
| }); |
| } else { |
| $(this).text('Can\'t load diff'); |
| called_count--; |
| } |
| } else { |
| called_count--; |
| } |
| if (diff_queue.length == 0) { |
| clearInterval(document.diff_queue_timer); |
| } |
| color_diff(diff.selector); |
| }); |
| } |
| $(document).ready(function() { |
| document.diff_queue_timer = setInterval(load_diff, WAIT_FOR); |
| |
| $('.switch-diff-format-link').click(function() { |
| var diformat = $(this).attr('data-diformat'); |
| var href = $(this).attr('href'); |
| var diffid = $(this).attr('data-diffid'); |
| self = $(this); |
| if (diformat == 'sidebyside') { |
| href = href + '&diformat=regular'; |
| $('#' + diffid).load(href, function() { |
| self.attr('data-diformat', 'regular'); |
| self.text('Switch to side-by-side view'); |
| color_diff('#' + diffid); |
| }); |
| } else { |
| href = href + '&diformat=sidebyside'; |
| $('#' + diffid).load(href, function() { |
| self.attr('data-diformat', 'sidebyside'); |
| self.text('Switch to unified view'); |
| }); |
| } |
| return false; |
| }); |
| }); |
| </script> |
| {% endblock %} |
| |
| {% block content %} |
| {{c.revision_widget.display(value=commit, prev=prev, next=next)}} |
| {{c.page_list.display(page=page, limit=limit, count=count)}} |
| <table> |
| <tbody> |
| {% for type, file, _, _ in artifacts %} |
| <tr> |
| <td>{{ type }} |
| {% if type in ('copied', 'renamed') and file.ratio != 1 %}(with changes){% endif %} |
| </td> |
| <td><a href="#diff-{{loop.index}}"> |
| {% if type == 'copied' %} |
| {{ '%s -> %s' % (h.really_unicode(file.old), h.really_unicode(file.new)) }} |
| {% elif type == 'renamed' %} |
| {{ '%s -> %s' % (h.really_unicode(file.old), h.really_unicode(file.new)) }} |
| {% else %} |
| {{h.really_unicode(file)}} |
| {% endif %} |
| </a></td> |
| </tr> |
| {% endfor %} |
| </tbody> |
| </table> |
| |
| {% for type, file, obj_type, is_text in artifacts %} |
| <div class="inline-diff"> |
| <h6> |
| {% if type in ('added', 'changed') %} |
| {% set file_url = commit.url() + 'tree/' + h.urlquote(h.really_unicode(file)) %} |
| <a href="{{ file_url }}" rel="nofollow">{{h.really_unicode(file)}}</a> |
| {% if obj_type != 'tree' and is_text %} |
| {% set diff_url = file_url + '?barediff=' + (prev[0]._id if prev else '') %} |
| <a class="commit-diff-link" rel="nofollow" href="{{ diff_url.replace('?barediff=', '?diff=') }}">Diff</a> |
| <a class="commit-diff-link switch-diff-format-link" rel="nofollow" data-diformat="{{session.diformat}}" data-diffid="diff-{{loop.index}}" href="{{ diff_url }}">Switch to {{'unified' if session.diformat == 'sidebyside' else 'side-by-side'}} view</a> |
| {% endif %} |
| {% elif type == 'removed' %} |
| {% set file_url = prev[0].url() + 'tree/' + h.urlquote(h.really_unicode(file)) %} |
| <a href="{{ file_url }}" rel="nofollow">{{h.really_unicode(file)}}</a> |
| {% elif type in ('copied', 'renamed') %} |
| <a href="{{prev[0].url()}}tree/{{h.urlquote(h.really_unicode(file.old))}}" rel="nofollow">{{h.really_unicode(file.old)}}</a> |
| to |
| {% set new_file_url = commit.url() + 'tree/' + h.urlquote(h.really_unicode(file.new)) %} |
| <a href="{{ new_file_url }}" rel="nofollow">{{h.really_unicode(file.new)}}</a> |
| {% if file.ratio != 1 %} |
| {% set diff_url = new_file_url + '?barediff=' + (prev[0]._id if prev else '') + '&prev_file=' + h.urlquote(h.really_unicode(file['old'])) %} |
| <a class="commit-diff-link" rel="nofollow" href="{{ diff_url.replace('?barediff=', '?diff=') }}">Diff</a> |
| <a class="commit-diff-link switch-diff-format-link" rel="nofollow" data-diformat="{{session.diformat}}" data-diffid="diff-{{loop.index}}" href="{{diff_url}}">Switch to {{'unified' if session.diformat == 'sidebyside' else 'side-by-side'}} view</a> |
| {% endif %} |
| {% endif %} |
| </h6> |
| <div id="diff-{{loop.index}}" class="inline-diff-body"> |
| {% if type == 'removed' %} |
| <span class="empty-diff">File was removed.</span> |
| {% elif type in ('copied', 'renamed') %} |
| {% if file.ratio == 1 %} |
| <span class="empty-diff">File was {{ type }}.</span> |
| {% else %} |
| <img src="{{g.forge_static('images/spinner.gif')}}" class="loading_icon" alt="Loading..."/> |
| <script type="text/javascript"> |
| diff_queue.push({ |
| selector: '#diff-{{loop.index}}', |
| url: '{{diff_url}}' |
| }); |
| </script> |
| {% endif %} |
| {% elif obj_type == 'symlink' %} |
| <span class="empty-diff">Symlink.</span> |
| {% elif obj_type == 'tree' %} |
| <span class="empty-diff">Directory.</span> |
| {% elif not is_text %} |
| <span class="empty-diff">Binary file was {{ type }}.</span> |
| {% else %} |
| <img src="{{g.forge_static('images/spinner.gif')}}" class="loading_icon" alt="Loading..."/> |
| <script type="text/javascript"> |
| diff_queue.push({ |
| selector: '#diff-{{loop.index}}', |
| url: '{{diff_url}}' |
| }); |
| </script> |
| {% endif %} |
| </div> |
| </div> |
| {% endfor %} |
| {{ c.page_list.display(page=page, limit=limit, count=count) }} |
| {% endblock %} |