+
+
+
+
+
+
| Diff line number |
Diff content |
-
-
-
+
- {{{diffs}}}
+ {{{diffs.right}}}
diff --git a/src/templates/side-by-side-text-wrapped-file-diff.mustache b/src/templates/side-by-side-text-wrapped-file-diff.mustache
new file mode 100644
index 0000000..236142a
--- /dev/null
+++ b/src/templates/side-by-side-text-wrapped-file-diff.mustache
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+ | Original file line number |
+ Original file content |
+ Diff line number |
+ Diff content |
+
+
+
+
+
+
+
+
+
+
+
+ {{{diffs}}}
+
+
+
+
+
+
diff --git a/src/types.ts b/src/types.ts
index ea28b49..89b7b3d 100644
--- a/src/types.ts
+++ b/src/types.ts
@@ -91,3 +91,10 @@ export const DiffStyleType: { [_: string]: DiffStyleType } = {
WORD: 'word',
CHAR: 'char',
};
+
+export type DiffOverflowType = 'scroll' | 'wrap';
+
+export const DiffOverflowType: { [_: string]: DiffOverflowType } = {
+ SCROLL: 'scroll',
+ WRAP: 'wrap',
+};
diff --git a/src/ui/css/diff2html.css b/src/ui/css/diff2html.css
index 45c2433..1c2b688 100644
--- a/src/ui/css/diff2html.css
+++ b/src/ui/css/diff2html.css
@@ -30,7 +30,7 @@
.d2h-file-header.d2h-sticky-header {
position: sticky;
top: 0;
- z-index: 1;
+ z-index: 10;
}
.d2h-file-stats {
@@ -104,13 +104,20 @@
.d2h-diff-table {
width: 100%;
- border-collapse: separate;
font-family: 'Menlo', 'Consolas', monospace;
font-size: 13px;
word-wrap: break-word;
}
-.d2h-diff-table.d2h-split-diff {
+.scroll-overflow .d2h-diff-table {
+ border-collapse: collapse;
+}
+
+.wrap-overflow .d2h-diff-table {
+ border-collapse: separate;
+}
+
+.wrap-overflow .d2h-diff-table.d2h-split-diff {
table-layout: fixed;
}
@@ -124,8 +131,10 @@
display: none;
}
-.d2h-file-side-diff {
- width: 100%;
+.d2h-file-diff.scroll-overflow,
+.d2h-file-side-diff.scroll-overflow {
+ overflow-x: scroll;
+ overflow-y: hidden;
}
.d2h-code-line,
@@ -138,6 +147,11 @@
vertical-align: top;
}
+.scroll-overflow .d2h-code-line,
+.scroll-overflow .d2h-code-side-line {
+ white-space: nowrap;
+}
+
.d2h-code-marker::before {
position: absolute;
top: 1px;
@@ -146,13 +160,22 @@
content: attr(data-code-marker);
}
+.wrap-overflow .d2h-code-line-ctn {
+ word-wrap: anywhere;
+ overflow: visible;
+ white-space: pre-wrap;
+}
+
+.scroll-overflow .d2h-code-line-ctn {
+ overflow: scroll;
+}
+
.d2h-code-line-ctn {
display: table-cell;
background: none;
padding: 0;
- word-wrap: anywhere;
- white-space: pre-wrap;
- overflow: visible;
+ word-wrap: normal;
+ white-space: pre;
user-select: text;
width: 100%;
vertical-align: middle;
@@ -197,14 +220,38 @@
content: '\200b';
}
+.wrap-overflow .d2h-code-side-linenumber,
+.wrap-overflow .d2h-code-linenumber,
+.wrap-overflow .d2h-code-emptyplaceholder {
+ position: relative;
+}
+
+.scroll-overflow .d2h-code-side-linenumber,
+.scroll-overflow .d2h-code-linenumber,
+.scroll-overflow .d2h-code-emptyplaceholder {
+ position: sticky;
+ z-index: 1;
+}
+
+.scroll-overflow .d2h-code-side-linenumber {
+ left: 0;
+}
+
+.scroll-overflow.d2h-file-diff tr td:first-child {
+ left: 0;
+}
+
+.scroll-overflow.d2h-file-diff tr td:nth-child(2) {
+ left: 50px;
+}
+
.d2h-code-side-linenumber,
.d2h-code-linenumber {
- /* Keep the numbers fixed on line contents scroll */
white-space: nowrap;
- position: relative;
background-color: #fff;
color: rgba(0, 0, 0, 0.3);
text-align: right;
+ vertical-align: top;
border: solid #eeeeee;
border-width: 0 1px 0 1px;
line-height: 20px;
diff --git a/src/ui/js/diff2html-ui-base.ts b/src/ui/js/diff2html-ui-base.ts
index 9b2317f..c229993 100644
--- a/src/ui/js/diff2html-ui-base.ts
+++ b/src/ui/js/diff2html-ui-base.ts
@@ -63,6 +63,8 @@ export class Diff2HtmlUI {
this.targetElement.querySelectorAll('.d2h-file-wrapper').forEach(wrapper => {
const [left, right] = Array
().slice.call(wrapper.querySelectorAll('.d2h-file-side-diff'));
+ console.log(left, right);
+
if (left === undefined || right === undefined) return;
const onScroll = (event: Event): void => {