Switch to side-by-side view

--- a
+++ b/Allura/allura/templates/repo/file.html
@@ -0,0 +1,87 @@
+{% extends 'allura:templates/repo/repo_master.html' %}
+{% do g.register_forge_css('css/forge/hilite.css') %}
+
+{% block title %}
+  {{c.project.name}} / {{c.app.config.options.mount_label}} /
+  {{blob.commit.shorthand_id()}}
+  {{h.really_unicode(blob.path())}}
+{% endblock %}
+
+{% block header %}
+<a href="{{blob.commit.url()}}">{{blob.commit.shorthand_id()}}</a>:
+{{lib.path_links(blob.path().split('/')[1:-1])}} {{h.really_unicode(blob.name)}}
+{% endblock %}
+
+{% block actions %}
+<a href="{{blob.commit.url()}}log/">
+  <b data-icon="{{g.icons.history.char}}" class="ico {{g.icons.history.css}}" title="History"> </b> History
+</a>
+{% endblock %}
+
+{% block extra_js %}
+{{ super() }}
+<script type="text/javascript">(function() {
+  $(window).bind('hashchange', function(e) {
+    var hash = window.location.hash.substring(1);
+	if ('originalEvent' in e && 'oldURL' in e.originalEvent) {
+      $('#' + e.originalEvent.oldURL.split('#')[1]).css('background-color', 'transparent');
+	}
+    if (hash !== '' && hash.substring(0, 1) === 'l' && !isNaN(hash.substring(1))) {
+      $('#' + hash).css('background-color', '#ffff99');
+    }
+  }).trigger('hashchange');
+
+  $('.code_block').each(function(index, element) {
+    $(element).bind('click', function() {
+      var hash = window.location.hash.substring(1);
+      if (hash !== '' && hash.substring(0, 1) === 'l' && !isNaN(hash.substring(1))) {
+        $('#' + hash).css('background-color', 'transparent');
+      }
+      $(element).css('background-color', '#ffff99');
+      window.location.href = '#' + $(element).attr('id');
+    });
+  });
+}());
+</script>
+{% endblock %}
+
+{% block content %}
+  {{ clone_info(c.app.repo) }}
+  {% if prev %}
+  <p>
+    Parent:
+    <a href="{{prev.url()}}">{{prev.commit.shorthand_id()}}</a>
+    <a href="?diff={{prev.commit._id}}">(diff)</a>
+  </p>
+  {% endif %}
+
+  {% if next %}
+  <p>
+    Child:
+    <a href="{{next.url()}}">{{next.commit.shorthand_id()}}</a>
+    <a href="{{next.url()}}?diff={{blob.commit._id}}">(diff)</a>
+  </p>
+  {% endif %}
+
+  {% if blob.has_image_view %}
+    <img src="?format=raw" alt=""/>
+  {% elif blob.has_html_view or blob.has_pypeline_view or force_display %}
+    <p><a href="?format=raw">Download this file</a></p>
+    <div class="clip grid-19">
+      <h3>
+        <span class="ico-l"><b data-icon="{{g.icons['table'].char}}" class="ico {{g.icons['table'].css}}"></b> {{h.really_unicode(blob.name)}}</span>
+        &nbsp;&nbsp;
+        {{ stats.line_count }} lines ({{ stats.data_line_count }} with data), {{ stats.code_size|filesizeformat }}
+      </h3>
+      {% if blob.has_pypeline_view %}
+        {{h.render_any_markup(blob.name, blob.text, code_mode=True)}}
+      {% else %}
+        {{g.highlight(blob.text, filename=blob.name)}}
+      {% endif %}
+    </div>
+  {% else %}
+    <p>{{h.really_unicode(blob.name)}} is not known to be viewable in your browser.
+    Try to <a href="?force=True">display it</a> anyway or
+    <a href="?format=raw">download it</a> instead.</p>
+  {% endif %}
+{% endblock %}