@@ -19,6 +19,12 @@ import { WhitespaceHintPopover } from './whitespace-hint-popover'
19
19
import { TooltipDirection } from '../lib/tooltip'
20
20
import { Button } from '../lib/button'
21
21
22
+ enum DiffRowPrefix {
23
+ Added = '+' ,
24
+ Deleted = '-' ,
25
+ Nothing = '\u{A0}' ,
26
+ }
27
+
22
28
interface ISideBySideDiffRowProps {
23
29
/**
24
30
* The row data. This contains most of the information used to render the row.
@@ -219,7 +225,7 @@ export class SideBySideDiffRow extends React.Component<
219
225
isSelected
220
226
) }
221
227
{ this . renderHunkHandle ( ) }
222
- { this . renderContent ( row . data ) }
228
+ { this . renderContent ( row . data , DiffRowPrefix . Added ) }
223
229
{ this . renderWhitespaceHintPopover ( DiffColumn . After ) }
224
230
</ div >
225
231
</ div >
@@ -235,7 +241,7 @@ export class SideBySideDiffRow extends React.Component<
235
241
</ div >
236
242
< div className = { afterClasses } >
237
243
{ this . renderLineNumber ( lineNumber , DiffColumn . After , isSelected ) }
238
- { this . renderContent ( row . data ) }
244
+ { this . renderContent ( row . data , DiffRowPrefix . Added ) }
239
245
{ this . renderWhitespaceHintPopover ( DiffColumn . After ) }
240
246
</ div >
241
247
{ this . renderHunkHandle ( ) }
@@ -257,7 +263,7 @@ export class SideBySideDiffRow extends React.Component<
257
263
isSelected
258
264
) }
259
265
{ this . renderHunkHandle ( ) }
260
- { this . renderContent ( row . data ) }
266
+ { this . renderContent ( row . data , DiffRowPrefix . Deleted ) }
261
267
{ this . renderWhitespaceHintPopover ( DiffColumn . Before ) }
262
268
</ div >
263
269
</ div >
@@ -271,12 +277,12 @@ export class SideBySideDiffRow extends React.Component<
271
277
>
272
278
< div className = { beforeClasses } >
273
279
{ this . renderLineNumber ( lineNumber , DiffColumn . Before , isSelected ) }
274
- { this . renderContent ( row . data ) }
280
+ { this . renderContent ( row . data , DiffRowPrefix . Deleted ) }
275
281
{ this . renderWhitespaceHintPopover ( DiffColumn . Before ) }
276
282
</ div >
277
283
< div className = { afterClasses } >
278
284
{ this . renderLineNumber ( undefined , DiffColumn . After ) }
279
- { this . renderContentFromString ( '' ) }
285
+ { this . renderContentFromString ( '' , [ ] ) }
280
286
{ this . renderWhitespaceHintPopover ( DiffColumn . After ) }
281
287
</ div >
282
288
{ this . renderHunkHandle ( ) }
@@ -296,7 +302,7 @@ export class SideBySideDiffRow extends React.Component<
296
302
DiffColumn . Before ,
297
303
before . isSelected
298
304
) }
299
- { this . renderContent ( before ) }
305
+ { this . renderContent ( before , DiffRowPrefix . Deleted ) }
300
306
{ this . renderWhitespaceHintPopover ( DiffColumn . Before ) }
301
307
</ div >
302
308
< div
@@ -308,7 +314,7 @@ export class SideBySideDiffRow extends React.Component<
308
314
DiffColumn . After ,
309
315
after . isSelected
310
316
) }
311
- { this . renderContent ( after ) }
317
+ { this . renderContent ( after , DiffRowPrefix . Added ) }
312
318
{ this . renderWhitespaceHintPopover ( DiffColumn . After ) }
313
319
</ div >
314
320
{ this . renderHunkHandle ( ) }
@@ -338,23 +344,28 @@ export class SideBySideDiffRow extends React.Component<
338
344
339
345
private renderContentFromString (
340
346
content : string ,
341
- tokens : ReadonlyArray < ILineTokens > = [ ]
347
+ tokens : ReadonlyArray < ILineTokens > = [ ] ,
348
+ prefix : DiffRowPrefix = DiffRowPrefix . Nothing
342
349
) {
343
350
return this . renderContent ( { content, tokens, noNewLineIndicator : false } )
344
351
}
345
352
346
353
private renderContent (
347
- data : Pick < IDiffRowData , 'content' | 'noNewLineIndicator' | 'tokens' >
354
+ data : Pick < IDiffRowData , 'content' | 'noNewLineIndicator' | 'tokens' > ,
355
+ prefix : DiffRowPrefix = DiffRowPrefix . Nothing
348
356
) {
349
357
return (
350
358
< div className = "content" onContextMenu = { this . props . onContextMenuText } >
351
- { syntaxHighlightLine ( data . content , data . tokens ) }
352
- { data . noNewLineIndicator && (
353
- < Octicon
354
- symbol = { narrowNoNewlineSymbol }
355
- title = "No newline at end of file"
356
- />
357
- ) }
359
+ < div className = "prefix" > { prefix } </ div >
360
+ < div className = "content-wrapper" >
361
+ { syntaxHighlightLine ( data . content , data . tokens ) }
362
+ { data . noNewLineIndicator && (
363
+ < Octicon
364
+ symbol = { narrowNoNewlineSymbol }
365
+ title = "No newline at end of file"
366
+ />
367
+ ) }
368
+ </ div >
358
369
</ div >
359
370
)
360
371
}
0 commit comments