Changeset - 7d02958345ff
[Not reviewed]
default
0 2 0
Mads Kiilerich - 8 years ago 2018-02-15 00:23:52
mads@kiilerich.com
diff: fix 2-way diff panes not being shown side by side

eee7674cef41 had the side effect of setting overflow styling on the DOM
elements used by mergely. That confused it's computation of sizes on some
browsers, scroll bars got added, and the panes were re-flowed to not be
side-by-side.

To fix that, add an exception that allow overflow-x to be set to visible.
2 files changed with 7 insertions and 2 deletions:
0 comments (0 inline, 0 general)
kallithea/public/less/style.less
Show inline comments
 
body {
 
  background: url("../images/background.png") repeat scroll 0 0 #B0B0B0;
 
}
 

	
 
/* pseude content that should not be selected or copied by the user */
 
[data-pseudo-content]:before {
 
  content: attr(data-pseudo-content);
 
}
 

	
 
/* class for texts where newlines should be preserved, for very light-weight ascii art markup (like pull request descriptions) */
 
.formatted-fixed {
 
  white-space: pre-wrap;
 
}
 

	
 
/* use monospace for changeset hashes */
 
.changeset_hash {
 
  font-family: @font-family-monospace;
 
}
 

	
 
/* Note: class 'icon-empty' or 'icon-gravatar' can be used to get icon-ish styling without an actual glyph */
 
i[class^='icon-empty'],
 
i[class^='icon-gravatar'] {
 
  background-repeat: no-repeat;
 
  background-position: center;
 
  display: inline-block;
 
  min-width: 16px;
 
  min-height: 16px;
 
  margin: -2px 0 -4px 0;
 
}
 

	
 
.inline-comments-general.show-general-status .hidden.general-only {
 
  display: block !important;
 
}
 
.truncate {
 
  white-space: nowrap;
 
  overflow: hidden;
 
  text-overflow: ellipsis;
 
  -o-text-overflow: ellipsis;
 
  -ms-text-overflow: ellipsis;
 
}
 
.truncate.autoexpand:hover {
 
  overflow: visible;
 
}
 

	
 
/* show comment anchors when hovering over panel-heading */
 
a.permalink {
 
  visibility: hidden;
 
}
 
.panel-heading:hover .permalink {
 
  visibility: visible;
 
}
 

	
 
.navbar-inverse {
 
  border: none;
 
}
 

	
 
/* logo */
 
nav.navbar .navbar-brand {
 
  font-size: 20px;
 
  padding-top: 12px;
 
}
 
nav.navbar.mainmenu .navbar-brand .branding {
 
  &:before {
 
    content: "";
 
    display: inline-block;
 
    margin-right: .2em;
 
    background-image: url(@kallithea-logo-url);
 
    width: @kallithea-logo-width;
 
    height: @kallithea-logo-height;
 
    margin-bottom: -@kallithea-logo-bottom;
 
    margin-top: -12px;
 
  }
 
}
 

	
 
/* code highlighting */
 
/* don't use bootstrap style for code blocks */
 
.code-highlighttable pre {
 
  background: inherit;
 
  border: 0;
 
}
 

	
 
/* every direct child of a panel, that is not .panel-heading, should auto
 
 * overflow to prevent overflowing of elements like text boxes and tables */
 
.panel > :not(.panel-heading){
 
  overflow-x: auto;
 
  min-height: 0.01%;
 
}
 

	
 
/* allow other exceptions to automatic overflow-x */
 
.panel > .overflow-x-visible {
 
  overflow-x: visible;
 
}
 

	
 
/* search highlighting */
 
div.search-code-body pre .match {
 
  background-color: @highlight-color;
 
}
 
div.search-code-body pre .break {
 
  background-color: @highlight-line-color;
 
  width: 100%;
 
  display: block;
 
}
 

	
 
/* use @alert-danger-text for form error messages and .alert-danger for the input element */
 
.form-group .error-message {
 
  color: @alert-danger-text;
 
  display: inline-block;
 
  padding-top: 5px;
 
  &:empty{
 
    display: none;
 
  }
 
}
 
input.error {
 
  .alert-danger;
 
}
 

	
 
/* datatable */
 
.dataTables_left {
 
  .pull-left;
 
}
 
.dataTables_right {
 
  .pull-right;
 
}
 

	
 
/* make all datatable paginations small */
 
.dataTables_paginate .pagination {
 
  .pagination-sm;
 
}
 

	
 
/* show column sort icons in our font ... and before column header */
 
table.dataTable {
 
  .sorting_asc:before {
 
    font-family: "kallithea";
 
    content: "\23f6";
 
    padding-right: 8px;
 
  }
 
  .sorting_desc:before {
 
    font-family: "kallithea";
 
    content: "\23f7";
 
    padding-right: 8px;
 
  }
 
  .sorting:before {
 
    font-family: "kallithea";
 
    content: "\2195";
 
    padding-right: 8px;
 
    opacity: 0.5;
 
  }
 
  .sorting_asc:after,
 
  .sorting_desc:after,
 
  .sorting:after {
 
    content: "" !important;
 
  }
 
}
 

	
 
/* language bars (summary page) */
 
#lang_stats {
 
  .progress-bar {
 
    min-width: 15px;
 
    border-top-right-radius: 8px;
 
    border-bottom-right-radius: 8px;
 
  }
 
  td {
 
    padding: 1px 0 !important;
 
  }
 
}
 

	
 
/* use pointer cursor for expand_commit */
 
.expand_commit .icon-align-left {
 
  cursor: pointer;
 
  color: #999;
 
}
 

	
 
/* don't break author, date and comment cells into multiple lines in changeset table */
 
table.changesets {
 
  .author,
 
  .date,
 
  .comments {
 
    white-space: nowrap;
 
  }
 
}
 

	
 
/* textareas should be at least 100px high and 400px wide */
 
textarea.form-control {
 
  min-height: 100px;
 
  min-width: 400px;
 
}
 

	
 
/* add some space between the code-browser icons and the file names */
 
.browser-dir > i[class^='icon-'],
 
.submodule-dir > i[class^='icon-'],
 
.browser-file > i[class^='icon-'] {
 
  padding-right: 0.3em;
 
}
 

	
 
.form-group > label {
 
  float: left;
 
}
 
.dt_repo_pending {
 
  opacity: 0.5;
 
}
 

	
 
div.panel-primary {
 
  border: none;
 
}
 

	
 
/* no extra vertical margin */
 
#content div.panel ul.pagination {
 
  margin: 0;
 
}
 

	
 
/* remove margin below footer */
 
.navbar.footer {
 
  margin-bottom: 0;
 
}
 

	
 
.user-menu {
 
  padding: 0 !important;
 
}
 
#quick_login {
 
  width: 360px;
 
  margin-top: 15px;
 
  min-height: 110px;
 
}
 
#quick_login input#username,
 
#quick_login input#password {
 
  display: block;
 
  margin: 5px 0 10px;
 
}
 
#quick_login .password_forgotten a,
 
#quick_login .register a {
 
  padding: 0 !important;
 
  line-height: 25px !important;
 
  float: left;
 
  clear: both;
 
}
 
#quick_login .submit {
 
  float: right;
 
}
 
#quick_login .submit input#sign_in {
 
  margin-top: 5px;
 
}
 
#quick_login > .pull-left {
 
  width: 170px;
 
}
 
#quick_login > .pull-right {
 
  width: 140px;
 
}
 
#quick_login .full_name {
 
  font-weight: bold;
 
  padding: 3px;
 
}
 
#quick_login .email {
 
  padding: 3px 3px 3px 0;
 
}
 
#quick_login :not(input) {
 
  color: @kallithea-theme-inverse-color;
 
  padding-bottom: 3px;
 
}
 
#register div.form div.form-group > label {
 
  width: 135px;
 
  float: left;
 
  text-align: right;
 
  margin: 2px 10px 0 0;
 
  padding: 5px 0 0 5px;
 
}
 
#register div.form div.form-group > div input {
 
  width: 300px;
 
}
 
#register div.form div.buttons {
 
  border-top: 1px solid #DDD;
 
  margin: 0;
 
  padding: 10px 0 0 145px;
 
}
 
#journal .journal_user {
 
  color: #747474;
 
  font-size: 14px;
 
  font-weight: bold;
 
  height: 30px;
 
}
 
#journal .journal_user.deleted {
 
  color: #747474;
 
  font-size: 14px;
 
  font-weight: normal;
 
  height: 30px;
 
  font-style: italic;
 
}
 
#journal .journal_icon {
 
  clear: both;
 
  float: left;
 
  padding-right: 4px;
 
  padding-top: 3px;
 
}
 
#journal .journal_action {
 
  padding-top: 4px;
 
  min-height: 2px;
 
  float: left;
 
}
 
#journal .journal_action_params {
 
  clear: left;
 
  padding-left: 22px;
 
}
 
#journal .date {
 
  clear: both;
 
  color: #777777;
 
  font-size: 11px;
 
  padding-left: 22px;
 
}
 
#journal .journal_repo_name {
 
  font-weight: bold;
 
  font-size: 1.1em;
 
}
 
#journal .compare_view {
 
  padding: 5px 0px 5px 0px;
 
  width: 95px;
 
}
 
.trending_language_tbl,
 
.trending_language_tbl td {
 
  border: 0 !important;
 
  margin: 0 !important;
 
  padding: 0 !important;
 
}
 
.trending_language_tbl,
 
.trending_language_tbl tr {
 
  border-spacing: 1px;
 
}
 
h3.files_location {
 
  font-size: 1.8em;
 
  font-weight: 700;
 
  border-bottom: none !important;
 
  margin: 10px 0 !important;
 
}
 
.file_history {
 
  padding-top: 10px;
 
  font-size: 16px;
 
}
 
.file_author {
 
  float: left;
 
}
 
.file_author .item {
 
  float: left;
 
  padding: 5px;
 
  color: #888;
 
}
 
#graph_nodes {
 
  position: absolute;
 
  width: 100px;
 
}
 
#graph_content,
 
#graph_content_pr,
 
#graph .container_header {
 
  margin-left: 100px;
 
}
 
#graph_content {
 
  position: relative;
 
}
 
table#updaterevs-table tr.mergerow,
 
table#updaterevs-table tr.out-of-range,
 
table#changesets tr.mergerow,
 
table#changesets tr.out-of-range {
 
  opacity: 0.6;
 
}
 
#updaterevs-graph {
 
  position: relative;
 
  width: 40px;
 
  height: 0;
 
}
 
#updaterevs-table {
 
  margin-left: 40px !important;
 
}
 
.issue-tracker-link {
 
  color: #3F6F9F;
 
  font-weight: bold !important;
 
}
 
/* changeset statuses (must be the same name as the status) */
 
.changeset-status-not_reviewed {
 
  color: #bababa;
 
}
 
.changeset-status-approved {
 
  color: #81ba51;
 
}
 
.changeset-status-rejected {
 
  color: #d06060;
 
}
 
.changeset-status-under_review {
 
  color: #ffc71e;
 
}
 

	
 
#repo_size {
 
  display: block;
 
  margin-top: 4px;
 
  color: #666;
 
  float: right;
 
}
 
.currently_following {
 
  padding-left: 10px;
 
  padding-bottom: 5px;
 
}
 
#switch_repos {
 
  position: absolute;
 
  height: 25px;
 
  z-index: 1;
 
}
 
#switch_repos select {
 
  min-width: 150px;
 
  max-height: 250px;
 
  z-index: 1;
 
}
 
.breadcrumbs {
 
  border: medium none;
 
  color: #FFF;
 
  font-weight: 700;
 
  font-size: 14px;
 
}
 
table#permissions_manage span.private_repo_msg {
 
  font-size: 0.8em;
 
  opacity: 0.6;
 
}
 
table#permissions_manage td.private_repo_msg {
 
  font-size: 0.8em;
 
}
 
table#permissions_manage tr#add_perm_input td {
 
  vertical-align: middle;
 
}
 
div.gravatar {
 
  float: left;
 
  background-color: #FFF;
 
  margin-right: 0.7em;
 
  padding: 1px 1px 1px 1px;
 
  line-height: 0;
 
  border-radius: 3px;
 
}
 
div.gravatar img {
 
  border-radius: 2px;
 
}
 
.panel-body.settings > ul.nav-stacked {
 
  float: left;
 
  width: 150px;
 
  padding-right: 35px;
 
  color: #393939;
 
  font-weight: 700;
 
}
 
.panel-body.settings .nav-pills > :not(.active) > a {
 
  color: inherit;
 
}
 
.panel-body.settings > div,
 
.panel-body.settings > form {
 
  float: left;
 
  width: 750px;
 
  margin: 0;
 
}
 
.panel-body.no-padding {
 
  padding: 0;
 
}
 
.panel-body ~ .panel-body {
 
  padding-top: 0;
 
}
 
.panel-body.no-padding ~ .panel-body {
 
  padding-top: 15px;
 
}
 
.panel-body > :last-child {
 
  margin-bottom: 0;
 
}
 
.panel-body.settings .text-muted {
 
  margin: 5px 0;
 
}
 
ins,
 
div.options a:hover {
 
  text-decoration: none;
 
}
 
img,
 
nav.navbar #quick li a:hover span.normal,
 
#clone_url,
 
#clone_url_id {
 
  border: none;
 
}
 
img.icon,
 
.right .merge img {
kallithea/templates/files/diff_2way.html
Show inline comments
 
## -*- coding: utf-8 -*-
 

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

	
 
<%block name="js_extra">
 
  <script type="text/javascript" src="${h.url('/codemirror/lib/codemirror.js')}"></script>
 
  <script type="text/javascript" src="${h.url('/js/mergely.js')}"></script>
 
</%block>
 
<%block name="css_extra">
 
  <link rel="stylesheet" type="text/css" href="${h.url('/codemirror/lib/codemirror.css')}"/>
 
  <link rel="stylesheet" type="text/css" href="${h.url('/css/mergely.css')}"/>
 
</%block>
 

	
 
<%block name="title">
 
    ${_('%s File side-by-side diff') % c.repo_name}
 
</%block>
 

	
 
<%def name="breadcrumbs_links()">
 
    ${_('File diff')} ${h.show_id(c.changeset_1)} &rarr; ${h.show_id(c.changeset_2)}
 
</%def>
 

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

	
 
<%def name="main()">
 
${self.repo_context_bar('changelog')}
 
<div class="panel panel-primary">
 
    <div class="panel-heading clearfix">
 
        ${self.breadcrumbs()}
 
    </div>
 

	
 
    <div class="no-padding panel-body">
 
    <div class="no-padding panel-body overflow-x-visible">
 
        <div class="panel panel-default">
 
            <div class="panel-heading clearfix">
 
                    <div class="pull-left">
 
                        ${h.link_to(h.safe_unicode(c.node1.path),h.url('files_home',repo_name=c.repo_name,
 
                        revision=c.cs2.raw_id,f_path=h.safe_unicode(c.node1.path)))}
 
                    </div>
 
                    <div class="pull-left diff-actions">
 
                      <a href="${h.url('files_diff_home',repo_name=c.repo_name,f_path=h.safe_unicode(c.node1.path),diff2=c.cs2.raw_id,diff1=c.cs1.raw_id,diff='diff',fulldiff=1)}"
 
                         data-toggle="tooltip"
 
                         title="${_('Show full diff for this file')}">
 
                          <i class="icon-file-code"></i></a>
 
                      <a href="${h.url('files_diff_2way_home',repo_name=c.repo_name,f_path=h.safe_unicode(c.node1.path),diff2=c.cs2.raw_id,diff1=c.cs1.raw_id,diff='diff',fulldiff=1)}"
 
                         data-toggle="tooltip"
 
                         title="${_('Show full side-by-side diff for this file')}">
 
                          <i class="icon-docs"></i></a>
 
                      <a href="${h.url('files_diff_home',repo_name=c.repo_name,f_path=h.safe_unicode(c.node1.path),diff2=c.cs2.raw_id,diff1=c.cs1.raw_id,diff='raw')}"
 
                         data-toggle="tooltip"
 
                         title="${_('Raw diff')}"><i class="icon-diff"></i></a>
 
                      <a href="${h.url('files_diff_home',repo_name=c.repo_name,f_path=h.safe_unicode(c.node1.path),diff2=c.cs2.raw_id,diff1=c.cs1.raw_id,diff='download')}"
 
                         data-toggle="tooltip"
 
                         title="${_('Download diff')}"><i class="icon-floppy"></i></a>
 
                      ${h.checkbox('ignorews', label=_('Ignore whitespace'))}
 
                      ${h.checkbox('edit_mode', label=_('Edit'))}
 
                    </div>
 
            </div>
 
            <div id="compare"></div>
 
            <div id="compare" class="overflow-x-visible"></div>
 
        </div>
 
    </div>
 

	
 
<script>
 
var orig1_url = ${h.jshtml(h.url('files_raw_home',repo_name=c.repo_name,f_path=h.safe_unicode(c.node1.path),revision=c.cs1.raw_id))};
 
var orig2_url = ${h.jshtml(h.url('files_raw_home',repo_name=c.repo_name,f_path=h.safe_unicode(c.node2.path),revision=c.cs2.raw_id))};
 

	
 
$(document).ready(function () {
 
    $('#compare').mergely({
 
        width: 'auto',
 
        height: $(window).height() - $('#compare').offset().top - $('#footer').height() - 35,
 
        fgcolor: {a:'#ddffdd',c:'#cccccc',d:'#ffdddd'},
 
        bgcolor: '#fff',
 
        viewport: true,
 
        cmsettings: {mode: 'text/plain', readOnly: true, lineWrapping: false, lineNumbers: true},
 
        lhs: function(setValue) {
 
            if (${h.js(c.node1.is_binary)}) {
 
                setValue('Binary file');
 
            }
 
            else{
 
                $.ajax(orig1_url, {dataType: 'text', success: setValue});
 
            }
 

	
 
        },
 
        rhs: function(setValue) {
 
            if (${h.js(c.node2.is_binary)}) {
 
                setValue('Binary file');
 
            }
 
            else{
 
                $.ajax(orig2_url, {dataType: 'text', success: setValue});
 
            }
 
        }
 
    });
 
    // recompute width - avoids overflow and horizontal scrollbar
 
    $('#compare').mergely('resize');
 

	
 
    $('#ignorews').change(function(e){
 
        var val = e.currentTarget.checked;
 
        $('#compare').mergely('options', {ignorews: val});
 
        $('#compare').mergely('update');
 
    });
 
    $('#edit_mode').change(function(e){
 
        var val = !e.currentTarget.checked;
 
        $('#compare').mergely('cm', 'lhs').setOption('readOnly', val);
 
        $('#compare').mergely('cm', 'rhs').setOption('readOnly', val);
 
        $('#compare').mergely('update');
 
    });
 
});
 
</script>
 

	
 
</div>
 
</%def>
0 comments (0 inline, 0 general)