1- import {
2- ICellFooterTracker ,
3- } from 'jupyterlab-cell-input-footer' ;
1+ import { ICellFooterTracker } from 'jupyterlab-cell-input-footer' ;
42import { IDiffEntry } from 'nbdime/lib/diff/diffentries' ;
53import { createPatchStringDiffModel } from 'nbdime/lib/diff/model' ;
64import { MergeView } from 'nbdime/lib/common/mergeview' ;
7- import {
8- ToolbarButton ,
9- } from '@jupyterlab/ui-components' ;
10- import {
11- requestAPI
12- } from './handler' ;
5+ import { ToolbarButton } from '@jupyterlab/ui-components' ;
6+ import { requestAPI } from './handler' ;
137
148export namespace ShowDiff {
15-
169 export interface ICommandArgs {
17- cell_id ?: string ,
18- original_source : string ,
19- diff : IDiffEntry [ ]
10+ cell_id ?: string ;
11+ original_source : string ;
12+ diff : IDiffEntry [ ] ;
2013 }
2114
2215 export interface IFetchDiff {
23- original_source : string ,
24- new_source : string
16+ original_source : string ;
17+ new_source : string ;
2518 }
2619}
2720
28-
2921/**
3022 * Adds a Diff UX underneath a JupyterLab cell.
31- *
32- * @param data
33- * @param cellFooterTracker
23+ *
24+ * @param data
25+ * @param cellFooterTracker
3426 */
35- export function showCellDiff ( data : ShowDiff . ICommandArgs , cellFooterTracker : ICellFooterTracker ) {
36- let diff = createPatchStringDiffModel (
37- data [ "original_source" ] ,
38- data [ "diff" ]
39- )
40-
27+ export function showCellDiff (
28+ data : ShowDiff . ICommandArgs ,
29+ cellFooterTracker : ICellFooterTracker
30+ ) {
31+ let diff = createPatchStringDiffModel ( data [ 'original_source' ] , data [ 'diff' ] ) ;
32+
4133 let mergeView : MergeView ;
4234 mergeView = new MergeView ( { remote : diff } ) ;
43- mergeView . addClass ( "nbdime-root" ) ;
44- mergeView . addClass ( "jp-Notebook-diff" ) ;
35+ //
36+ mergeView . addClass ( 'jp-cell-diff' ) ;
37+ // Add the classes below to pick up the styling from nbdime.
38+ mergeView . addClass ( 'nbdime-root' ) ;
39+ mergeView . addClass ( 'jp-Notebook-diff' ) ;
4540 mergeView . hide ( ) ;
4641
4742 let footer = cellFooterTracker . getFooter ( data . cell_id ) ;
43+ // Try removing any old widget that exists.
44+ try {
45+ footer ?. removeWidget ( 'jp-cell-diff' ) ;
46+ } catch { }
47+
4848 footer ?. addWidget ( mergeView ) ;
4949
5050 if ( footer ?. isHidden ) {
5151 footer . show ( ) ;
5252 footer . update ( ) ;
5353 }
54- footer ?. addItemOnLeft (
54+ footer ?. addToolbarItemOnLeft (
5555 'compare' ,
5656 new ToolbarButton ( {
5757 // icon: wandIcon,
58- label : " Compare changes" ,
58+ label : ' Compare changes' ,
5959 enabled : true ,
60- onClick : ( ) => {
60+ onClick : ( ) => {
6161 if ( mergeView . isHidden ) {
62- mergeView . show ( )
62+ mergeView . show ( ) ;
6363 return ;
6464 }
65- mergeView . hide ( )
65+ mergeView . hide ( ) ;
6666 }
6767 } )
6868 ) ;
6969}
7070
71-
72- export async function fetchDiff ( data : ShowDiff . IFetchDiff ) : Promise < ShowDiff . ICommandArgs > {
71+ export async function fetchDiff (
72+ data : ShowDiff . IFetchDiff
73+ ) : Promise < ShowDiff . ICommandArgs > {
7374 return await requestAPI ( 'api/celldiff' ) ;
7475}
7576
76-
7777/**
7878 * Adds a diff to the Cell Footer
79- *
79+ *
8080 */
8181export function showCellDiffCommand ( cellFooterTracker : ICellFooterTracker ) {
8282 return ( args : any ) => {
83- let data : ShowDiff . ICommandArgs = ( args as any ) ;
84- let cellId = data [ " cell_id" ] ;
83+ let data : ShowDiff . ICommandArgs = args as any ;
84+ let cellId = data [ ' cell_id' ] ;
8585 if ( cellId ) {
86-
87- if ( data && data [ "original_source" ] && data [ "diff" ] ) {
88-
89- showCellDiff ( data , cellFooterTracker )
86+ if ( data && data [ 'original_source' ] && data [ 'diff' ] ) {
87+ showCellDiff ( data , cellFooterTracker ) ;
9088 }
9189 }
92- }
90+ } ;
9391}
94-
0 commit comments