@@ -78,6 +78,35 @@ const raw = computed(() =>
7878const diffChange = ref (raw .value )
7979const isNotChanged = computed (() => diffChange .value .stat .additionsNum === 0 && diffChange .value .stat .deletionsNum === 0 )
8080
81+ const currentDiffIndex = ref (- 1 );
82+
83+ const goToNextDiff = () => {
84+ const diffs = document .querySelectorAll (' .split-side-right.blob-code-addition' );
85+ if (currentDiffIndex .value < diffs .length - 1 ) {
86+ currentDiffIndex .value ++ ;
87+ updateCurrentDiffHighlight (diffs );
88+ }
89+ }
90+
91+ const goToPrevDiff = () => {
92+ const diffs = document .querySelectorAll (' .split-side-right.blob-code-addition' );
93+ if (currentDiffIndex .value > 0 ) {
94+ currentDiffIndex .value -- ;
95+ updateCurrentDiffHighlight (diffs );
96+ }
97+ }
98+
99+ const updateCurrentDiffHighlight = (diffs : NodeListOf <Element >) => {
100+ diffs .forEach ((diff : { classList: { remove: (arg0 : string ) => any } }) => diff .classList .remove (' current-diff' ));
101+
102+ const currentDiff = diffs [currentDiffIndex .value ];
103+
104+ if (currentDiff ) {
105+ currentDiff .classList .add (' current-diff' );
106+ currentDiff .scrollIntoView ({ behavior: ' smooth' , block: ' center' });
107+ }
108+ }
109+
81110watch (() => props , () => {
82111 diffChange .value = raw .value
83112 emits (' diff' , {
@@ -111,8 +140,20 @@ watch(() => props, () => {
111140 <span class =" info-left" >{{ filename }}</span >
112141 <span class =" info-right" >
113142 <span style =" margin-left : 20px ;" >{{ newFilename }}</span >
114- <span v-if =" !hideStat" class =" diff-stat" >
115- <slot name =" stat" :stat =" diffChange.stat" >
143+ <span class =" diff-commandbar" >
144+ <button class =" command-item-button" title =" Next Change" @click =" goToNextDiff" >
145+ <svg width =" 1rem" viewBox =" 0 0 512 512" xmlns =" http://www.w3.org/2000/svg" >
146+ <path d =" M383.6,322.7L278.6,423c-5.8,6-13.7,9-22.4,9c-8.7,0-16.5-3-22.4-9L128.4,322.7c-12.5-11.9-12.5-31.3,0-43.2 c12.5-11.9,32.7-11.9,45.2,0l50.4,48.2v-217c0-16.9,14.3-30.6,32-30.6c17.7,0,32,13.7,32,30.6v217l50.4-48.2 c12.5-11.9,32.7-11.9,45.2,0C396.1,291.4,396.1,310.7,383.6,322.7z" />
147+ </svg >
148+ </button >
149+ <button class =" command-item-button" title =" Previous Change" @click =" goToPrevDiff" >
150+ <svg width =" 1rem" viewBox =" 0 0 512 512" xmlns =" http://www.w3.org/2000/svg" >
151+ <path d =" M128.4,189.3L233.4,89c5.8-6,13.7-9,22.4-9c8.7,0,16.5,3,22.4,9l105.4,100.3c12.5,11.9,12.5,31.3,0,43.2 c-12.5,11.9-32.7,11.9-45.2,0L288,184.4v217c0,16.9-14.3,30.6-32,30.6c-17.7,0-32-13.7-32-30.6v-217l-50.4,48.2 c-12.5,11.9-32.7,11.9-45.2,0C115.9,220.6,115.9,201.3,128.4,189.3z" />
152+ </svg >
153+ </button >
154+ </span >
155+ <span v-if =" !hideStat" class =" diff-stat" >
156+ <slot name =" stat" :stat =" diffChange.stat" >
116157 <span class =" diff-stat-added" >+{{ diffChange.stat.additionsNum }} additions</span >
117158 <span class =" diff-stat-deleted" >-{{ diffChange.stat.deletionsNum }} deletions</span >
118159 </slot >
0 commit comments