Skip to content

Commit c3d7df3

Browse files
authored
Merge pull request #358 from mrfyda/feature/collapse-viewed
feature: Hide viewed files
2 parents c178c2e + 242fc5a commit c3d7df3

File tree

7 files changed

+728
-604
lines changed

7 files changed

+728
-604
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,7 @@ highlightCode(): void
316316
- `highlight`: syntax highlight the code on the diff: `true` or `false`, default is `true`
317317
- `fileListToggle`: allow the file summary list to be toggled: `true` or `false`, default is `true`
318318
- `fileListStartVisible`: choose if the file summary list starts visible: `true` or `false`, default is `false`
319+
- `fileContentToggle`: allow each file contents to be toggled: `true` or `false`, default is `true`
319320

320321
> NOTE: All the options from Diff2Html are also valid configurations in Diff2HtmlUI
321322

src/__tests__/diff2html-tests.ts

Lines changed: 514 additions & 478 deletions
Large diffs are not rendered by default.

src/__tests__/line-by-line-tests.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,10 @@ describe('LineByLineRenderer', () => {
180180
<path d=\\"M6 5H2v-1h4v1zM2 8h7v-1H2v1z m0 2h7v-1H2v1z m0 2h7v-1H2v1z m10-7.5v9.5c0 0.55-0.45 1-1 1H1c-0.55 0-1-0.45-1-1V2c0-0.55 0.45-1 1-1h7.5l3.5 3.5z m-1 0.5L8 2H1v12h10V5z\\"></path>
181181
</svg> <span class=\\"d2h-file-name\\">my/file/name.js</span>
182182
<span class=\\"d2h-tag d2h-changed d2h-changed-tag\\">CHANGED</span></span>
183+
<label class=\\"d2h-file-collapse\\">
184+
<input class=\\"d2h-file-collapse-input\\" type=\\"checkbox\\" name=\\"viewed\\" value=\\"viewed\\">
185+
Viewed
186+
</label>
183187
</div>
184188
<div class=\\"d2h-file-diff\\">
185189
<div class=\\"d2h-code-wrapper\\">
@@ -220,6 +224,10 @@ describe('LineByLineRenderer', () => {
220224
<path d=\\"M6 5H2v-1h4v1zM2 8h7v-1H2v1z m0 2h7v-1H2v1z m0 2h7v-1H2v1z m10-7.5v9.5c0 0.55-0.45 1-1 1H1c-0.55 0-1-0.45-1-1V2c0-0.55 0.45-1 1-1h7.5l3.5 3.5z m-1 0.5L8 2H1v12h10V5z\\"></path>
221225
</svg> <span class=\\"d2h-file-name\\">my/file/name.js</span>
222226
<span class=\\"d2h-tag d2h-added d2h-added-tag\\">ADDED</span></span>
227+
<label class=\\"d2h-file-collapse\\">
228+
<input class=\\"d2h-file-collapse-input\\" type=\\"checkbox\\" name=\\"viewed\\" value=\\"viewed\\">
229+
Viewed
230+
</label>
223231
</div>
224232
<div class=\\"d2h-file-diff\\">
225233
<div class=\\"d2h-code-wrapper\\">
@@ -260,6 +268,10 @@ describe('LineByLineRenderer', () => {
260268
<path d=\\"M6 5H2v-1h4v1zM2 8h7v-1H2v1z m0 2h7v-1H2v1z m0 2h7v-1H2v1z m10-7.5v9.5c0 0.55-0.45 1-1 1H1c-0.55 0-1-0.45-1-1V2c0-0.55 0.45-1 1-1h7.5l3.5 3.5z m-1 0.5L8 2H1v12h10V5z\\"></path>
261269
</svg> <span class=\\"d2h-file-name\\">my/file/name.js</span>
262270
<span class=\\"d2h-tag d2h-deleted d2h-deleted-tag\\">DELETED</span></span>
271+
<label class=\\"d2h-file-collapse\\">
272+
<input class=\\"d2h-file-collapse-input\\" type=\\"checkbox\\" name=\\"viewed\\" value=\\"viewed\\">
273+
Viewed
274+
</label>
263275
</div>
264276
<div class=\\"d2h-file-diff\\">
265277
<div class=\\"d2h-code-wrapper\\">
@@ -300,6 +312,10 @@ describe('LineByLineRenderer', () => {
300312
<path d=\\"M6 5H2v-1h4v1zM2 8h7v-1H2v1z m0 2h7v-1H2v1z m0 2h7v-1H2v1z m10-7.5v9.5c0 0.55-0.45 1-1 1H1c-0.55 0-1-0.45-1-1V2c0-0.55 0.45-1 1-1h7.5l3.5 3.5z m-1 0.5L8 2H1v12h10V5z\\"></path>
301313
</svg> <span class=\\"d2h-file-name\\">my/file/{name1.js → name2.js}</span>
302314
<span class=\\"d2h-tag d2h-moved d2h-moved-tag\\">RENAMED</span></span>
315+
<label class=\\"d2h-file-collapse\\">
316+
<input class=\\"d2h-file-collapse-input\\" type=\\"checkbox\\" name=\\"viewed\\" value=\\"viewed\\">
317+
Viewed
318+
</label>
303319
</div>
304320
<div class=\\"d2h-file-diff\\">
305321
<div class=\\"d2h-code-wrapper\\">
@@ -391,6 +407,10 @@ describe('LineByLineRenderer', () => {
391407
<path d=\\"M6 5H2v-1h4v1zM2 8h7v-1H2v1z m0 2h7v-1H2v1z m0 2h7v-1H2v1z m10-7.5v9.5c0 0.55-0.45 1-1 1H1c-0.55 0-1-0.45-1-1V2c0-0.55 0.45-1 1-1h7.5l3.5 3.5z m-1 0.5L8 2H1v12h10V5z\\"></path>
392408
</svg> <span class=\\"d2h-file-name\\">sample</span>
393409
<span class=\\"d2h-tag d2h-changed d2h-changed-tag\\">CHANGED</span></span>
410+
<label class=\\"d2h-file-collapse\\">
411+
<input class=\\"d2h-file-collapse-input\\" type=\\"checkbox\\" name=\\"viewed\\" value=\\"viewed\\">
412+
Viewed
413+
</label>
394414
</div>
395415
<div class=\\"d2h-file-diff\\">
396416
<div class=\\"d2h-code-wrapper\\">
@@ -461,6 +481,10 @@ describe('LineByLineRenderer', () => {
461481
<path d=\\"M6 5H2v-1h4v1zM2 8h7v-1H2v1z m0 2h7v-1H2v1z m0 2h7v-1H2v1z m10-7.5v9.5c0 0.55-0.45 1-1 1H1c-0.55 0-1-0.45-1-1V2c0-0.55 0.45-1 1-1h7.5l3.5 3.5z m-1 0.5L8 2H1v12h10V5z\\"></path>
462482
</svg> <span class=\\"d2h-file-name\\">sample</span>
463483
<span class=\\"d2h-tag d2h-changed d2h-changed-tag\\">CHANGED</span></span>
484+
<label class=\\"d2h-file-collapse\\">
485+
<input class=\\"d2h-file-collapse-input\\" type=\\"checkbox\\" name=\\"viewed\\" value=\\"viewed\\">
486+
Viewed
487+
</label>
464488
</div>
465489
<div class=\\"d2h-file-diff\\">
466490
<div class=\\"d2h-code-wrapper\\">

src/__tests__/side-by-side-printer-tests.ts

Lines changed: 133 additions & 125 deletions
Original file line numberDiff line numberDiff line change
@@ -78,81 +78,81 @@ describe('SideBySideRenderer', () => {
7878
const fileHtml = sideBySideRenderer.generateFileHtml(file);
7979

8080
expect(fileHtml).toMatchInlineSnapshot(`
81-
Object {
82-
"left": "<tr>
83-
<td class=\\"d2h-code-side-linenumber d2h-info\\"></td>
84-
<td class=\\"d2h-info\\">
85-
<div class=\\"d2h-code-side-line d2h-info\\">@@ -19,7 +19,7 @@</div>
86-
</td>
87-
</tr><tr>
88-
<td class=\\"d2h-code-side-linenumber d2h-cntx\\">
89-
19
90-
</td>
91-
<td class=\\"d2h-cntx\\">
92-
<div class=\\"d2h-code-side-line d2h-cntx\\">
93-
<span class=\\"d2h-code-line-prefix\\">&nbsp;</span>
94-
<span class=\\"d2h-code-line-ctn\\">context</span>
95-
</div>
96-
</td>
97-
</tr><tr>
98-
<td class=\\"d2h-code-side-linenumber d2h-del d2h-change\\">
99-
20
100-
</td>
101-
<td class=\\"d2h-del d2h-change\\">
102-
<div class=\\"d2h-code-side-line d2h-del d2h-change\\">
103-
<span class=\\"d2h-code-line-prefix\\">-</span>
104-
<span class=\\"d2h-code-line-ctn\\"><del>removed</del></span>
105-
</div>
106-
</td>
107-
</tr><tr>
108-
<td class=\\"d2h-code-side-linenumber d2h-code-side-emptyplaceholder d2h-cntx d2h-emptyplaceholder\\">
109-
110-
</td>
111-
<td class=\\"d2h-cntx d2h-emptyplaceholder\\">
112-
<div class=\\"d2h-code-side-line d2h-code-side-emptyplaceholder d2h-cntx d2h-emptyplaceholder\\">
113-
<span class=\\"d2h-code-line-prefix\\">&nbsp;</span>
114-
<span class=\\"d2h-code-line-ctn\\"><br></span>
115-
</div>
116-
</td>
117-
</tr>",
118-
"right": "<tr>
119-
<td class=\\"d2h-code-side-linenumber d2h-info\\"></td>
120-
<td class=\\"d2h-info\\">
121-
<div class=\\"d2h-code-side-line d2h-info\\"></div>
122-
</td>
123-
</tr><tr>
124-
<td class=\\"d2h-code-side-linenumber d2h-cntx\\">
125-
19
126-
</td>
127-
<td class=\\"d2h-cntx\\">
128-
<div class=\\"d2h-code-side-line d2h-cntx\\">
129-
<span class=\\"d2h-code-line-prefix\\">&nbsp;</span>
130-
<span class=\\"d2h-code-line-ctn\\">context</span>
131-
</div>
132-
</td>
133-
</tr><tr>
134-
<td class=\\"d2h-code-side-linenumber d2h-ins d2h-change\\">
135-
20
136-
</td>
137-
<td class=\\"d2h-ins d2h-change\\">
138-
<div class=\\"d2h-code-side-line d2h-ins d2h-change\\">
139-
<span class=\\"d2h-code-line-prefix\\">+</span>
140-
<span class=\\"d2h-code-line-ctn\\"><ins>added</ins></span>
141-
</div>
142-
</td>
143-
</tr><tr>
144-
<td class=\\"d2h-code-side-linenumber d2h-ins\\">
145-
21
146-
</td>
147-
<td class=\\"d2h-ins\\">
148-
<div class=\\"d2h-code-side-line d2h-ins\\">
149-
<span class=\\"d2h-code-line-prefix\\">+</span>
150-
<span class=\\"d2h-code-line-ctn\\">another added</span>
151-
</div>
152-
</td>
153-
</tr>",
154-
}
155-
`);
81+
Object {
82+
"left": "<tr>
83+
<td class=\\"d2h-code-side-linenumber d2h-info\\"></td>
84+
<td class=\\"d2h-info\\">
85+
<div class=\\"d2h-code-side-line d2h-info\\">@@ -19,7 +19,7 @@</div>
86+
</td>
87+
</tr><tr>
88+
<td class=\\"d2h-code-side-linenumber d2h-cntx\\">
89+
19
90+
</td>
91+
<td class=\\"d2h-cntx\\">
92+
<div class=\\"d2h-code-side-line d2h-cntx\\">
93+
<span class=\\"d2h-code-line-prefix\\">&nbsp;</span>
94+
<span class=\\"d2h-code-line-ctn\\">context</span>
95+
</div>
96+
</td>
97+
</tr><tr>
98+
<td class=\\"d2h-code-side-linenumber d2h-del d2h-change\\">
99+
20
100+
</td>
101+
<td class=\\"d2h-del d2h-change\\">
102+
<div class=\\"d2h-code-side-line d2h-del d2h-change\\">
103+
<span class=\\"d2h-code-line-prefix\\">-</span>
104+
<span class=\\"d2h-code-line-ctn\\"><del>removed</del></span>
105+
</div>
106+
</td>
107+
</tr><tr>
108+
<td class=\\"d2h-code-side-linenumber d2h-code-side-emptyplaceholder d2h-cntx d2h-emptyplaceholder\\">
109+
110+
</td>
111+
<td class=\\"d2h-cntx d2h-emptyplaceholder\\">
112+
<div class=\\"d2h-code-side-line d2h-code-side-emptyplaceholder d2h-cntx d2h-emptyplaceholder\\">
113+
<span class=\\"d2h-code-line-prefix\\">&nbsp;</span>
114+
<span class=\\"d2h-code-line-ctn\\"><br></span>
115+
</div>
116+
</td>
117+
</tr>",
118+
"right": "<tr>
119+
<td class=\\"d2h-code-side-linenumber d2h-info\\"></td>
120+
<td class=\\"d2h-info\\">
121+
<div class=\\"d2h-code-side-line d2h-info\\"></div>
122+
</td>
123+
</tr><tr>
124+
<td class=\\"d2h-code-side-linenumber d2h-cntx\\">
125+
19
126+
</td>
127+
<td class=\\"d2h-cntx\\">
128+
<div class=\\"d2h-code-side-line d2h-cntx\\">
129+
<span class=\\"d2h-code-line-prefix\\">&nbsp;</span>
130+
<span class=\\"d2h-code-line-ctn\\">context</span>
131+
</div>
132+
</td>
133+
</tr><tr>
134+
<td class=\\"d2h-code-side-linenumber d2h-ins d2h-change\\">
135+
20
136+
</td>
137+
<td class=\\"d2h-ins d2h-change\\">
138+
<div class=\\"d2h-code-side-line d2h-ins d2h-change\\">
139+
<span class=\\"d2h-code-line-prefix\\">+</span>
140+
<span class=\\"d2h-code-line-ctn\\"><ins>added</ins></span>
141+
</div>
142+
</td>
143+
</tr><tr>
144+
<td class=\\"d2h-code-side-linenumber d2h-ins\\">
145+
21
146+
</td>
147+
<td class=\\"d2h-ins\\">
148+
<div class=\\"d2h-code-side-line d2h-ins\\">
149+
<span class=\\"d2h-code-line-prefix\\">+</span>
150+
<span class=\\"d2h-code-line-ctn\\">another added</span>
151+
</div>
152+
</td>
153+
</tr>",
154+
}
155+
`);
156156
});
157157
});
158158

@@ -168,31 +168,31 @@ Object {
168168
});
169169

170170
expect(fileHtml).toMatchInlineSnapshot(`
171-
Object {
172-
"left": "<tr>
173-
<td class=\\"d2h-code-side-linenumber d2h-code-side-emptyplaceholder d2h-cntx d2h-emptyplaceholder\\">
174-
175-
</td>
176-
<td class=\\"d2h-cntx d2h-emptyplaceholder\\">
177-
<div class=\\"d2h-code-side-line d2h-code-side-emptyplaceholder d2h-cntx d2h-emptyplaceholder\\">
178-
<span class=\\"d2h-code-line-prefix\\">&nbsp;</span>
179-
<span class=\\"d2h-code-line-ctn\\"><br></span>
180-
</div>
181-
</td>
182-
</tr>",
183-
"right": "<tr>
184-
<td class=\\"d2h-code-side-linenumber d2h-ins\\">
185-
30
186-
</td>
187-
<td class=\\"d2h-ins\\">
188-
<div class=\\"d2h-code-side-line d2h-ins\\">
189-
<span class=\\"d2h-code-line-prefix\\">+</span>
190-
<span class=\\"d2h-code-line-ctn\\">test</span>
191-
</div>
192-
</td>
193-
</tr>",
194-
}
195-
`);
171+
Object {
172+
"left": "<tr>
173+
<td class=\\"d2h-code-side-linenumber d2h-code-side-emptyplaceholder d2h-cntx d2h-emptyplaceholder\\">
174+
175+
</td>
176+
<td class=\\"d2h-cntx d2h-emptyplaceholder\\">
177+
<div class=\\"d2h-code-side-line d2h-code-side-emptyplaceholder d2h-cntx d2h-emptyplaceholder\\">
178+
<span class=\\"d2h-code-line-prefix\\">&nbsp;</span>
179+
<span class=\\"d2h-code-line-ctn\\"><br></span>
180+
</div>
181+
</td>
182+
</tr>",
183+
"right": "<tr>
184+
<td class=\\"d2h-code-side-linenumber d2h-ins\\">
185+
30
186+
</td>
187+
<td class=\\"d2h-ins\\">
188+
<div class=\\"d2h-code-side-line d2h-ins\\">
189+
<span class=\\"d2h-code-line-prefix\\">+</span>
190+
<span class=\\"d2h-code-line-ctn\\">test</span>
191+
</div>
192+
</td>
193+
</tr>",
194+
}
195+
`);
196196
});
197197
it('should work for deletions', () => {
198198
const hoganUtils = new HoganJsUtils({});
@@ -208,31 +208,31 @@ Object {
208208
);
209209

210210
expect(fileHtml).toMatchInlineSnapshot(`
211-
Object {
212-
"left": "<tr>
213-
<td class=\\"d2h-code-side-linenumber d2h-del\\">
214-
30
215-
</td>
216-
<td class=\\"d2h-del\\">
217-
<div class=\\"d2h-code-side-line d2h-del\\">
218-
<span class=\\"d2h-code-line-prefix\\">-</span>
219-
<span class=\\"d2h-code-line-ctn\\">test</span>
220-
</div>
221-
</td>
222-
</tr>",
223-
"right": "<tr>
224-
<td class=\\"d2h-code-side-linenumber d2h-code-side-emptyplaceholder d2h-cntx d2h-emptyplaceholder\\">
225-
226-
</td>
227-
<td class=\\"d2h-cntx d2h-emptyplaceholder\\">
228-
<div class=\\"d2h-code-side-line d2h-code-side-emptyplaceholder d2h-cntx d2h-emptyplaceholder\\">
229-
<span class=\\"d2h-code-line-prefix\\">&nbsp;</span>
230-
<span class=\\"d2h-code-line-ctn\\"><br></span>
231-
</div>
232-
</td>
233-
</tr>",
234-
}
235-
`);
211+
Object {
212+
"left": "<tr>
213+
<td class=\\"d2h-code-side-linenumber d2h-del\\">
214+
30
215+
</td>
216+
<td class=\\"d2h-del\\">
217+
<div class=\\"d2h-code-side-line d2h-del\\">
218+
<span class=\\"d2h-code-line-prefix\\">-</span>
219+
<span class=\\"d2h-code-line-ctn\\">test</span>
220+
</div>
221+
</td>
222+
</tr>",
223+
"right": "<tr>
224+
<td class=\\"d2h-code-side-linenumber d2h-code-side-emptyplaceholder d2h-cntx d2h-emptyplaceholder\\">
225+
226+
</td>
227+
<td class=\\"d2h-cntx d2h-emptyplaceholder\\">
228+
<div class=\\"d2h-code-side-line d2h-code-side-emptyplaceholder d2h-cntx d2h-emptyplaceholder\\">
229+
<span class=\\"d2h-code-line-prefix\\">&nbsp;</span>
230+
<span class=\\"d2h-code-line-ctn\\"><br></span>
231+
</div>
232+
</td>
233+
</tr>",
234+
}
235+
`);
236236
});
237237
});
238238

@@ -286,6 +286,10 @@ Object {
286286
<path d=\\"M6 5H2v-1h4v1zM2 8h7v-1H2v1z m0 2h7v-1H2v1z m0 2h7v-1H2v1z m10-7.5v9.5c0 0.55-0.45 1-1 1H1c-0.55 0-1-0.45-1-1V2c0-0.55 0.45-1 1-1h7.5l3.5 3.5z m-1 0.5L8 2H1v12h10V5z\\"></path>
287287
</svg> <span class=\\"d2h-file-name\\">sample</span>
288288
<span class=\\"d2h-tag d2h-changed d2h-changed-tag\\">CHANGED</span></span>
289+
<label class=\\"d2h-file-collapse\\">
290+
<input class=\\"d2h-file-collapse-input\\" type=\\"checkbox\\" name=\\"viewed\\" value=\\"viewed\\">
291+
Viewed
292+
</label>
289293
</div>
290294
<div class=\\"d2h-files-diff\\">
291295
<div class=\\"d2h-file-side-diff\\">
@@ -367,6 +371,10 @@ Object {
367371
<path d=\\"M6 5H2v-1h4v1zM2 8h7v-1H2v1z m0 2h7v-1H2v1z m0 2h7v-1H2v1z m10-7.5v9.5c0 0.55-0.45 1-1 1H1c-0.55 0-1-0.45-1-1V2c0-0.55 0.45-1 1-1h7.5l3.5 3.5z m-1 0.5L8 2H1v12h10V5z\\"></path>
368372
</svg> <span class=\\"d2h-file-name\\">sample</span>
369373
<span class=\\"d2h-tag d2h-changed d2h-changed-tag\\">CHANGED</span></span>
374+
<label class=\\"d2h-file-collapse\\">
375+
<input class=\\"d2h-file-collapse-input\\" type=\\"checkbox\\" name=\\"viewed\\" value=\\"viewed\\">
376+
Viewed
377+
</label>
370378
</div>
371379
<div class=\\"d2h-files-diff\\">
372380
<div class=\\"d2h-file-side-diff\\">

src/templates/generic-file-path.mustache

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,7 @@
33
<span class="d2h-file-name">{{fileDiffName}}</span>
44
{{>fileTag}}
55
</span>
6+
<label class="d2h-file-collapse">
7+
<input class="d2h-file-collapse-input" type="checkbox" name="viewed" value="viewed">
8+
Viewed
9+
</label>

0 commit comments

Comments
 (0)