// Common .diff-file { margin-bottom: $gl-padding; .file-title, .file-title-flex-parent { cursor: pointer; a:hover { text-decoration: none; } &:hover { background-color: $gray-normal; } .diff-toggle-caret { padding-right: 6px; } } .diff-content { background: $white-light; color: $gl-text-color; border-radius: 0 0 3px 3px; .unfold { cursor: pointer; } .file-mode-changed { padding: 10px; color: $file-mode-changed; } .suppressed-container { padding: ($padding-base-vertical + 5px) $padding-base-horizontal; text-align: center; // "Changes suppressed. Click to show." link .show-suppressed-diff { font-size: 110%; font-weight: $gl-font-weight-bold; } } table { width: 100%; font-family: $monospace_font; border: 0; border-collapse: separate; margin: 0; padding: 0; table-layout: fixed; .diff-line-num { width: 50px; a { transition: none; } } .line_holder td { line-height: $code_line_height; font-size: $code_font_size; &.noteable_line { position: relative; } span { white-space: pre-wrap; } .line { word-wrap: break-word; } } &.left-side-selected { td.line_content.parallel.right-side { @include user-select(none); } } &.right-side-selected { td.line_content.parallel.left-side { @include user-select(none); } } } tr.line_holder.parallel { td.line_content.parallel { width: 46%; } .add-diff-note { margin-left: -55px; } } .old_line, .new_line { @include user-select(none); margin: 0; border: 0; padding: 0 5px; border-right: 1px solid; text-align: right; min-width: 35px; max-width: 50px; width: 35px; a { float: left; width: 35px; font-weight: $gl-font-weight-normal; &[disabled] { cursor: default; &:hover, &:active { text-decoration: none; } } } } .line_content { display: block; margin: 0; padding: 0 1.5em; border: 0; position: relative; &.parallel { display: table-cell; span { word-break: break-all; } } &.old { &::before { content: '-'; position: absolute; left: 0.5em; } } &.new { &::before { content: '+'; position: absolute; left: 0.5em; } } } } .image { background: $file-image-bg; text-align: center; padding: 30px; .wrap { display: inline-block; } .frame { display: inline-block; background-color: $white-light; line-height: 0; img { border: 1px solid $white-light; background-image: linear-gradient(45deg, $border-color 25%, transparent 25%, transparent 75%, $border-color 75%, $border-color 100%), linear-gradient(45deg, $border-color 25%, transparent 25%, transparent 75%, $border-color 75%, $border-color 100%); background-size: 10px 10px; background-position: 0 0, 5px 5px; max-width: 100%; } &.deleted { border: 1px solid $deleted; } &.added { border: 1px solid $added; } } .image-info { font-size: 12px; margin: 5px 0 0; color: $diff-image-info-color; } .view.swipe { position: relative; .swipe-frame { display: block; margin: auto; position: relative; } .swipe-wrap { overflow: hidden; border-left: 1px solid $diff-swipe-border; position: absolute; display: block; top: 13px; right: 7px; } .frame { top: 0; right: 0; position: absolute; &.deleted { margin: 0; display: block; top: 13px; right: 7px; } } .swipe-bar { display: block; height: 100%; width: 15px; z-index: 100; position: absolute; cursor: pointer; &:hover { .top-handle { background-position: -15px 3px; } .bottom-handle { background-position: -15px -11px; } } .top-handle { display: block; height: 14px; width: 15px; position: absolute; top: 0; background: image-url('swipemode_sprites.gif') 0 3px no-repeat; } .bottom-handle { display: block; height: 14px; width: 15px; position: absolute; bottom: 0; background: image-url('swipemode_sprites.gif') 0 -11px no-repeat; } } } //.view.swipe .view.onion-skin { .onion-skin-frame { display: block; margin: auto; position: relative; } .frame.added, .frame.deleted { position: absolute; display: block; top: 0; left: 0; } .controls { display: block; height: 14px; width: 300px; z-index: 100; position: absolute; bottom: 0; left: 50%; margin-left: -150px; .drag-track { display: block; position: absolute; top: 0; left: 12px; height: 10px; width: 276px; background: image-url('onion_skin_sprites.gif') -4px -20px repeat-x; } .dragger { display: block; position: absolute; left: 0; top: 0; height: 14px; width: 14px; background: image-url('onion_skin_sprites.gif') 0 -34px repeat-x; cursor: pointer; } .transparent { display: block; position: absolute; top: 2px; right: 0; height: 10px; width: 10px; background: image-url('onion_skin_sprites.gif') -2px 0 no-repeat; } .opaque { display: block; position: absolute; top: 2px; left: 0; height: 10px; width: 10px; background: image-url('onion_skin_sprites.gif') -2px -10px no-repeat; } } } //.view.onion-skin } .view-modes { padding: 10px; text-align: center; background: $gray-darker; ul, li { list-style: none; margin: 0; padding: 0; display: inline-block; } li { color: $diff-view-modes-color; border-left: 1px solid $diff-view-modes-border; padding: 0 12px 0 16px; cursor: pointer; &:first-child { border-left: 0; } &:hover { text-decoration: underline; } &.active { cursor: default; color: $gl-text-color; &:hover { text-decoration: none; } } &.disabled { display: none; } } } .line_content { white-space: pre-wrap; } } .file-content .diff-file { margin: 0; border: 0; } .diff-wrap-lines .line_content { white-space: pre-wrap; } .inline-parallel-buttons { float: right; } .files-changed { border-bottom: 0; } .diff-stats-summary-toggler { padding: 0; background-color: transparent; border: 0; color: $gl-link-color; font-weight: $gl-font-weight-bold; &:hover, &:focus { outline: none; color: $gl-link-hover-color; } } // Mobile @media (max-width: 480px) { .diff-title { margin: 0; .file-mode { display: none; } } .diff-controls { position: static; text-align: center; } } // Bigger screens @media (min-width: 481px) { .diff-title { margin-right: 200px; .file-mode { margin-left: 10px; } } .diff-controls { float: right; position: absolute; top: 5px; right: 15px; } } @mixin diff_background($background, $idiff, $border) { background: $background; &.line_content span.idiff { background: $idiff; } &.diff-line-num { border-color: $border; } } .files { margin-top: 1px; .diff-file:last-child { margin-bottom: 0; } } .file-holder { .diff-line-num:not(.js-unfold-bottom) { a { &::before { content: attr(data-linenumber); } } } } .diff-comment-avatar-holders { position: absolute; height: 19px; width: 19px; margin-left: -15px; z-index: 100; &:hover { .diff-comment-avatar, .diff-comments-more-count { @for $i from 1 through 4 { $x-pos: 14px; &:nth-child(#{$i}) { @if $i == 4 { $x-pos: 14.5px; } transform: translateX((($i * $x-pos) - $x-pos)); &:hover { transform: translateX((($i * $x-pos) - $x-pos)); } } } } .diff-comments-more-count { padding-left: 2px; padding-right: 2px; width: auto; } } } .diff-comment-avatar, .diff-comments-more-count { position: absolute; left: 0; width: 19px; height: 19px; margin-right: 0; border-color: $white-light; cursor: pointer; transition: all .1s ease-out; @for $i from 1 through 4 { &:nth-child(#{$i}) { z-index: (4 - $i); } } } .diff-comments-more-count { width: 19px; min-width: 19px; padding-left: 0; padding-right: 0; overflow: hidden; } .diff-comments-more-count, .diff-notes-collapse { @extend .avatar-counter; } .diff-notes-collapse { width: 24px; height: 24px; border-radius: 50%; padding: 0; transition: transform .1s ease-out; z-index: 100; .collapse-icon { height: 50%; width: 100%; } svg { vertical-align: middle; } .collapse-icon, path { fill: $white-light; } &:focus { outline: 0; } } .diff-files-changed { .inline-parallel-buttons { position: relative; z-index: 1; } .commit-stat-summary { @include new-style-dropdown; @media (min-width: $screen-sm-min) { margin-left: -$gl-padding; padding-left: $gl-padding; background-color: $white-light; } } @media (min-width: $screen-sm-min) { position: -webkit-sticky; position: sticky; top: 24px; background-color: $white-light; z-index: 190; &.diff-files-changed-merge-request { top: 76px; } &:not(.is-stuck) .diff-stats-additions-deletions-collapsed { display: none; } &.is-stuck { padding-top: 0; padding-bottom: 0; border-bottom: 1px solid $white-dark; transform: translateY(16px); .diff-stats-additions-deletions-expanded, .inline-parallel-buttons { display: none; } } } } @media (min-width: $screen-sm-min) { .with-performance-bar { .diff-files-changed.diff-files-changed-merge-request { top: 76px + $performance-bar-height; } } } .diff-file-changes { max-width: 560px; width: 100%; z-index: 150; @media (min-width: $screen-sm-min) { left: $gl-padding; } .diff-changed-file { display: flex; padding-top: 8px; padding-bottom: 8px; min-width: 0; } .diff-file-changed-icon { margin-top: 2px; } .diff-changed-file-content { display: flex; flex-direction: column; min-width: 0; } .diff-changed-file-name, .diff-changed-file-path { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .diff-changed-file-path { direction: rtl; color: $gl-text-color-tertiary; } .diff-changed-stats { margin-left: auto; white-space: nowrap; } } .diff-file-changes-path { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .note-container { background-color: $gray-light; border-top: 1px solid $white-normal; // double jagged line divider .discussion-notes + .discussion-notes::before, .discussion-notes + .discussion-form::before { content: ''; position: relative; display: block; width: 100%; height: 10px; background-color: $white-light; background-image: linear-gradient(45deg, transparent, transparent 73%, $diff-jagged-border-gradient-color 75%, $white-light 80%), linear-gradient(225deg, transparent, transparent 73%, $diff-jagged-border-gradient-color 75%, $white-light 80%), linear-gradient(135deg, transparent, transparent 73%, $diff-jagged-border-gradient-color 75%, $white-light 80%), linear-gradient(-45deg, transparent, transparent 73%, $diff-jagged-border-gradient-color 75%, $white-light 80%); background-position: 5px 5px,0 5px,0 5px,5px 5px; background-size: 10px 10px; background-repeat: repeat; } .notes { position: relative; } .diff-notes-collapse { position: absolute; left: -12px; } } .diff-file .note-container > .new-note, .note-container .discussion-notes { margin-left: 100px; border-left: 1px solid $white-normal; } .notes.active { .diff-file .note-container > .new-note, .note-container .discussion-notes { // Override our margin and border (set for diff tab) // when user is on the discussion tab for MR margin-left: inherit; border-left: inherit; } } .files:not([data-can-create-note]) .frame { cursor: auto; } .frame.click-to-comment { position: relative; cursor: image-url('icon_image_comment.svg') $image-comment-cursor-left-offset $image-comment-cursor-top-offset, auto; // Retina cursor cursor: -webkit-image-set(image-url('icon_image_comment.svg') 1x, image-url('icon_image_comment@2x.svg') 2x) $image-comment-cursor-left-offset $image-comment-cursor-top-offset, auto; .comment-indicator { position: absolute; padding: 0; width: (2px * $image-comment-cursor-left-offset); height: (1px * $image-comment-cursor-top-offset); // center the indicator to match the top left click region margin-top: (-1px * $image-comment-cursor-top-offset) + 2; margin-left: (-1px * $image-comment-cursor-left-offset) + 1; svg { width: 100%; height: 100%; } &:focus { outline: none; } } } .frame .badge, .image-diff-avatar-link .badge, .notes > .badge { position: absolute; background-color: $blue-400; color: $white-light; border: $white-light 1px solid; min-height: $gl-padding; padding: 5px 8px; border-radius: 12px; &:focus { outline: none; } } .frame .badge, .frame .image-comment-badge { // Center align badges on the frame transform: translate3d(-50%, -50%, 0); } .image-comment-badge { @include btn-comment-icon; position: absolute; &.inverted { border-color: $white-light; } } .image-diff-avatar-link { position: relative; .badge, .image-comment-badge { top: 25px; right: 8px; } } .notes > .badge { display: none; left: -13px; } .discussion-notes { min-height: 35px; &:first-child { // First child does not have the jagged borders min-height: 25px; } &.collapsed { background-color: $white-light; .diff-notes-collapse, .note, .discussion-reply-holder, { display: none; } .notes > .badge { display: block; } } } .discussion-body .image .frame { position: relative; }