Fossil SCM

Shortcut 0 (Digit Zero) to reload the current page in Hidden Diff mode. Shortcut D to reload the current page and update the display cookie to set the current Diff mode as default.

florian 2024-09-06 10:52 diff-keyboard-navigation
Commit 0974a48f6b3eecfe6e856087d21703f45c67b6f75ce384026ffb5d5063cdefaf
2 files changed +18 -4 +6 -2
--- src/fossil.diff.js
+++ src/fossil.diff.js
@@ -54,22 +54,26 @@
5454
var
5555
mSHIFT = 1<<13,
5656
kSHOW = mSHIFT | 73 /* SHIFT+I */,
5757
kHIDE = 73 /* I */,
5858
kNEXT = 80 /* P */,
59
- kPREV = 79 /* O */,
59
+ kPREV = 79 /* O (Letter O) */,
6060
kUNID = 85 /* U */,
6161
kSBSD = mSHIFT | 85 /* SHIFT+U */,
62
+ kNULD = 48 /* 0 (Digit Zero) */,
63
+ kUDCD = 68 /* D */,
6264
mod = evt.altKey<<15|evt.ctrlKey<<14|evt.shiftKey<<13|evt.metaKey<<12,
6365
key = ( evt.which || evt.keyCode ) | mod;
6466
switch( key ){
6567
case kSHOW:
6668
case kHIDE:
6769
case kNEXT:
6870
case kPREV:
6971
case kUNID:
70
- case kSBSD: break;
72
+ case kSBSD:
73
+ case kNULD:
74
+ case kUDCD: break;
7175
default: return;
7276
}
7377
evt.preventDefault();
7478
evt.stopPropagation();
7579
if( key==kSHOW || key==kHIDE ){
@@ -119,13 +123,14 @@
119123
else if( btn.length>0 ){
120124
btn[0].click();
121125
btnScrollIntoView(btn[0]);
122126
}
123127
}
124
- else if( key==kUNID || key==kSBSD ){
128
+ else if( key==kUNID || key==kSBSD || key==kNULD ){
129
+ var T={}; T[kUNID]='unified', T[kSBSD]='side-by-side', T[kNULD]='hide';
125130
var
126
- type = ( key==kUNID ? 'unified' : 'side-by-side' ),
131
+ type = T[key],
127132
link = document.querySelector('.smb-'+type+'-diff')
128133
|| document.querySelector('.sml-'+type+'-diff'),
129134
href;
130135
if( link ){
131136
if( link.dataset.href ) href = link.dataset.href; // anti-bot
@@ -132,10 +137,19 @@
132137
else href = link.href;
133138
}
134139
if( href && href!=location.href.slice(-href.length) ){
135140
location.href = href;
136141
}
142
+ }
143
+ else if( key==kUDCD ){
144
+ var
145
+ pqry = 'udc=1',
146
+ psep = /\?/.test(location.href) ? '&' : '?',
147
+ href = location.href + psep + pqry;
148
+ if( location.href.slice(-pqry.length)!=pqry ){
149
+ location.href = href;
150
+ }
137151
}
138152
}/*,true*/);
139153
},false);
140154
}());
141155
142156
--- src/fossil.diff.js
+++ src/fossil.diff.js
@@ -54,22 +54,26 @@
54 var
55 mSHIFT = 1<<13,
56 kSHOW = mSHIFT | 73 /* SHIFT+I */,
57 kHIDE = 73 /* I */,
58 kNEXT = 80 /* P */,
59 kPREV = 79 /* O */,
60 kUNID = 85 /* U */,
61 kSBSD = mSHIFT | 85 /* SHIFT+U */,
 
 
62 mod = evt.altKey<<15|evt.ctrlKey<<14|evt.shiftKey<<13|evt.metaKey<<12,
63 key = ( evt.which || evt.keyCode ) | mod;
64 switch( key ){
65 case kSHOW:
66 case kHIDE:
67 case kNEXT:
68 case kPREV:
69 case kUNID:
70 case kSBSD: break;
 
 
71 default: return;
72 }
73 evt.preventDefault();
74 evt.stopPropagation();
75 if( key==kSHOW || key==kHIDE ){
@@ -119,13 +123,14 @@
119 else if( btn.length>0 ){
120 btn[0].click();
121 btnScrollIntoView(btn[0]);
122 }
123 }
124 else if( key==kUNID || key==kSBSD ){
 
125 var
126 type = ( key==kUNID ? 'unified' : 'side-by-side' ),
127 link = document.querySelector('.smb-'+type+'-diff')
128 || document.querySelector('.sml-'+type+'-diff'),
129 href;
130 if( link ){
131 if( link.dataset.href ) href = link.dataset.href; // anti-bot
@@ -132,10 +137,19 @@
132 else href = link.href;
133 }
134 if( href && href!=location.href.slice(-href.length) ){
135 location.href = href;
136 }
 
 
 
 
 
 
 
 
 
137 }
138 }/*,true*/);
139 },false);
140 }());
141
142
--- src/fossil.diff.js
+++ src/fossil.diff.js
@@ -54,22 +54,26 @@
54 var
55 mSHIFT = 1<<13,
56 kSHOW = mSHIFT | 73 /* SHIFT+I */,
57 kHIDE = 73 /* I */,
58 kNEXT = 80 /* P */,
59 kPREV = 79 /* O (Letter O) */,
60 kUNID = 85 /* U */,
61 kSBSD = mSHIFT | 85 /* SHIFT+U */,
62 kNULD = 48 /* 0 (Digit Zero) */,
63 kUDCD = 68 /* D */,
64 mod = evt.altKey<<15|evt.ctrlKey<<14|evt.shiftKey<<13|evt.metaKey<<12,
65 key = ( evt.which || evt.keyCode ) | mod;
66 switch( key ){
67 case kSHOW:
68 case kHIDE:
69 case kNEXT:
70 case kPREV:
71 case kUNID:
72 case kSBSD:
73 case kNULD:
74 case kUDCD: break;
75 default: return;
76 }
77 evt.preventDefault();
78 evt.stopPropagation();
79 if( key==kSHOW || key==kHIDE ){
@@ -119,13 +123,14 @@
123 else if( btn.length>0 ){
124 btn[0].click();
125 btnScrollIntoView(btn[0]);
126 }
127 }
128 else if( key==kUNID || key==kSBSD || key==kNULD ){
129 var T={}; T[kUNID]='unified', T[kSBSD]='side-by-side', T[kNULD]='hide';
130 var
131 type = T[key],
132 link = document.querySelector('.smb-'+type+'-diff')
133 || document.querySelector('.sml-'+type+'-diff'),
134 href;
135 if( link ){
136 if( link.dataset.href ) href = link.dataset.href; // anti-bot
@@ -132,10 +137,19 @@
137 else href = link.href;
138 }
139 if( href && href!=location.href.slice(-href.length) ){
140 location.href = href;
141 }
142 }
143 else if( key==kUDCD ){
144 var
145 pqry = 'udc=1',
146 psep = /\?/.test(location.href) ? '&' : '?',
147 href = location.href + psep + pqry;
148 if( location.href.slice(-pqry.length)!=pqry ){
149 location.href = href;
150 }
151 }
152 }/*,true*/);
153 },false);
154 }());
155
156
+6 -2
--- src/info.c
+++ src/info.c
@@ -450,11 +450,11 @@
450450
451451
/*
452452
** Generate javascript to enhance HTML diffs.
453453
*/
454454
void append_diff_javascript(int diffType){
455
- if( diffType==0 ) return;
455
+ /* Load fossil.diff.js even if diffType==0 to enable keyboard shortcuts. */
456456
builtin_fossil_js_bundle_or("diff", NULL);
457457
}
458458
459459
/*
460460
** Construct an appropriate diffFlag for text_diff() based on query
@@ -900,11 +900,13 @@
900900
/* ^^^ .info-changes-menu is used by diff scroll sync */
901901
pCfg = construct_diff_flags(diffType, &DCfg);
902902
DCfg.pRe = pRe;
903903
zW = (DCfg.diffFlags&DIFF_IGNORE_ALLWS)?"&w":"";
904904
if( diffType!=0 ){
905
- @ %z(chref("button","%R/%s/%T?diff=0",zPageHide,zName))\
905
+ /* Class "smb-hide-diff" required by the fossil.diff.js script. */
906
+ const char *zBtnClass = "button smb-hide-diff";
907
+ @ %z(chref(zBtnClass,"%R/%s/%T?diff=0",zPageHide,zName))\
906908
@ Hide&nbsp;Diffs</a>
907909
}
908910
if( diffType!=1 ){
909911
/* Class "smb-unified-diff" required by the fossil.diff.js script. */
910912
const char *zBtnClass = "button smb-unified-diff";
@@ -1196,10 +1198,12 @@
11961198
** i Hide all file changes.
11971199
** p Show only next file change.
11981200
** o Show only previous file change.
11991201
** u Reload page in Unified Diff mode.
12001202
** U Reload page in Side-By-Side Diff mode.
1203
+** 0 Reload page in Hidden Diff mode.
1204
+** d Reload page and set current Diff mode as default.
12011205
**
12021206
** The keyboard shortcuts also apply to /vinfo, /ci and /fdiff pages,
12031207
** and to /info pages describing check-in information.
12041208
*/
12051209
void vdiff_page(void){
12061210
--- src/info.c
+++ src/info.c
@@ -450,11 +450,11 @@
450
451 /*
452 ** Generate javascript to enhance HTML diffs.
453 */
454 void append_diff_javascript(int diffType){
455 if( diffType==0 ) return;
456 builtin_fossil_js_bundle_or("diff", NULL);
457 }
458
459 /*
460 ** Construct an appropriate diffFlag for text_diff() based on query
@@ -900,11 +900,13 @@
900 /* ^^^ .info-changes-menu is used by diff scroll sync */
901 pCfg = construct_diff_flags(diffType, &DCfg);
902 DCfg.pRe = pRe;
903 zW = (DCfg.diffFlags&DIFF_IGNORE_ALLWS)?"&w":"";
904 if( diffType!=0 ){
905 @ %z(chref("button","%R/%s/%T?diff=0",zPageHide,zName))\
 
 
906 @ Hide&nbsp;Diffs</a>
907 }
908 if( diffType!=1 ){
909 /* Class "smb-unified-diff" required by the fossil.diff.js script. */
910 const char *zBtnClass = "button smb-unified-diff";
@@ -1196,10 +1198,12 @@
1196 ** i Hide all file changes.
1197 ** p Show only next file change.
1198 ** o Show only previous file change.
1199 ** u Reload page in Unified Diff mode.
1200 ** U Reload page in Side-By-Side Diff mode.
 
 
1201 **
1202 ** The keyboard shortcuts also apply to /vinfo, /ci and /fdiff pages,
1203 ** and to /info pages describing check-in information.
1204 */
1205 void vdiff_page(void){
1206
--- src/info.c
+++ src/info.c
@@ -450,11 +450,11 @@
450
451 /*
452 ** Generate javascript to enhance HTML diffs.
453 */
454 void append_diff_javascript(int diffType){
455 /* Load fossil.diff.js even if diffType==0 to enable keyboard shortcuts. */
456 builtin_fossil_js_bundle_or("diff", NULL);
457 }
458
459 /*
460 ** Construct an appropriate diffFlag for text_diff() based on query
@@ -900,11 +900,13 @@
900 /* ^^^ .info-changes-menu is used by diff scroll sync */
901 pCfg = construct_diff_flags(diffType, &DCfg);
902 DCfg.pRe = pRe;
903 zW = (DCfg.diffFlags&DIFF_IGNORE_ALLWS)?"&w":"";
904 if( diffType!=0 ){
905 /* Class "smb-hide-diff" required by the fossil.diff.js script. */
906 const char *zBtnClass = "button smb-hide-diff";
907 @ %z(chref(zBtnClass,"%R/%s/%T?diff=0",zPageHide,zName))\
908 @ Hide&nbsp;Diffs</a>
909 }
910 if( diffType!=1 ){
911 /* Class "smb-unified-diff" required by the fossil.diff.js script. */
912 const char *zBtnClass = "button smb-unified-diff";
@@ -1196,10 +1198,12 @@
1198 ** i Hide all file changes.
1199 ** p Show only next file change.
1200 ** o Show only previous file change.
1201 ** u Reload page in Unified Diff mode.
1202 ** U Reload page in Side-By-Side Diff mode.
1203 ** 0 Reload page in Hidden Diff mode.
1204 ** d Reload page and set current Diff mode as default.
1205 **
1206 ** The keyboard shortcuts also apply to /vinfo, /ci and /fdiff pages,
1207 ** and to /info pages describing check-in information.
1208 */
1209 void vdiff_page(void){
1210

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button