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-
41- let mergeView : MergeView ;
42- mergeView = new MergeView ( { remote : diff } ) ;
43- mergeView . addClass ( "nbdime-root" ) ;
44- mergeView . addClass ( "jp-Notebook-diff" ) ;
27+ export function showCellDiff (
28+ data : ShowDiff . ICommandArgs ,
29+ cellFooterTracker : ICellFooterTracker
30+ ) {
31+ const diff = createPatchStringDiffModel (
32+ data [ 'original_source' ] ,
33+ data [ 'diff' ]
34+ ) ;
35+
36+ const mergeView = new MergeView ( { remote : diff } ) ;
37+ //
38+ mergeView . addClass ( 'jp-cell-diff' ) ;
39+ // Add the classes below to pick up the styling from nbdime.
40+ mergeView . addClass ( 'nbdime-root' ) ;
41+ mergeView . addClass ( 'jp-Notebook-diff' ) ;
4542 mergeView . hide ( ) ;
4643
47- let footer = cellFooterTracker . getFooter ( data . cell_id ) ;
44+ const footer = cellFooterTracker . getFooter ( data . cell_id ) ;
45+ // Try removing any old widget that exists.
46+ try {
47+ footer ?. removeWidget ( 'jp-cell-diff' ) ;
48+ } finally {
49+ // Do Nothing
50+ }
51+
4852 footer ?. addWidget ( mergeView ) ;
4953
5054 if ( footer ?. isHidden ) {
5155 footer . show ( ) ;
5256 footer . update ( ) ;
5357 }
54- footer ?. addItemOnLeft (
58+ footer ?. addToolbarItemOnLeft (
5559 'compare' ,
5660 new ToolbarButton ( {
5761 // icon: wandIcon,
58- label : " Compare changes" ,
62+ label : ' Compare changes' ,
5963 enabled : true ,
60- onClick : ( ) => {
64+ onClick : ( ) => {
6165 if ( mergeView . isHidden ) {
62- mergeView . show ( )
66+ mergeView . show ( ) ;
6367 return ;
6468 }
65- mergeView . hide ( )
69+ mergeView . hide ( ) ;
6670 }
6771 } )
6872 ) ;
6973}
7074
71-
72- export async function fetchDiff ( data : ShowDiff . IFetchDiff ) : Promise < ShowDiff . ICommandArgs > {
75+ export async function fetchDiff (
76+ data : ShowDiff . IFetchDiff
77+ ) : Promise < ShowDiff . ICommandArgs > {
7378 return await requestAPI ( 'api/celldiff' ) ;
7479}
7580
76-
7781/**
7882 * Adds a diff to the Cell Footer
79- *
83+ *
8084 */
8185export function showCellDiffCommand ( cellFooterTracker : ICellFooterTracker ) {
8286 return ( args : any ) => {
83- let data : ShowDiff . ICommandArgs = ( args as any ) ;
84- let cellId = data [ " cell_id" ] ;
87+ const data : ShowDiff . ICommandArgs = args as any ;
88+ const cellId = data [ ' cell_id' ] ;
8589 if ( cellId ) {
86-
87- if ( data && data [ "original_source" ] && data [ "diff" ] ) {
88-
89- showCellDiff ( data , cellFooterTracker )
90+ if ( data && data [ 'original_source' ] && data [ 'diff' ] ) {
91+ showCellDiff ( data , cellFooterTracker ) ;
9092 }
9193 }
92- }
94+ } ;
9395}
94-
0 commit comments