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.
Commit
0974a48f6b3eecfe6e856087d21703f45c67b6f75ce384026ffb5d5063cdefaf
Parent
8e6660cd76b8164…
2 files changed
+18
-4
+6
-2
+18
-4
| --- src/fossil.diff.js | ||
| +++ src/fossil.diff.js | ||
| @@ -54,22 +54,26 @@ | ||
| 54 | 54 | var |
| 55 | 55 | mSHIFT = 1<<13, |
| 56 | 56 | kSHOW = mSHIFT | 73 /* SHIFT+I */, |
| 57 | 57 | kHIDE = 73 /* I */, |
| 58 | 58 | kNEXT = 80 /* P */, |
| 59 | - kPREV = 79 /* O */, | |
| 59 | + kPREV = 79 /* O (Letter O) */, | |
| 60 | 60 | kUNID = 85 /* U */, |
| 61 | 61 | kSBSD = mSHIFT | 85 /* SHIFT+U */, |
| 62 | + kNULD = 48 /* 0 (Digit Zero) */, | |
| 63 | + kUDCD = 68 /* D */, | |
| 62 | 64 | mod = evt.altKey<<15|evt.ctrlKey<<14|evt.shiftKey<<13|evt.metaKey<<12, |
| 63 | 65 | key = ( evt.which || evt.keyCode ) | mod; |
| 64 | 66 | switch( key ){ |
| 65 | 67 | case kSHOW: |
| 66 | 68 | case kHIDE: |
| 67 | 69 | case kNEXT: |
| 68 | 70 | case kPREV: |
| 69 | 71 | case kUNID: |
| 70 | - case kSBSD: break; | |
| 72 | + case kSBSD: | |
| 73 | + case kNULD: | |
| 74 | + case kUDCD: break; | |
| 71 | 75 | default: return; |
| 72 | 76 | } |
| 73 | 77 | evt.preventDefault(); |
| 74 | 78 | evt.stopPropagation(); |
| 75 | 79 | if( key==kSHOW || key==kHIDE ){ |
| @@ -119,13 +123,14 @@ | ||
| 119 | 123 | else if( btn.length>0 ){ |
| 120 | 124 | btn[0].click(); |
| 121 | 125 | btnScrollIntoView(btn[0]); |
| 122 | 126 | } |
| 123 | 127 | } |
| 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'; | |
| 125 | 130 | var |
| 126 | - type = ( key==kUNID ? 'unified' : 'side-by-side' ), | |
| 131 | + type = T[key], | |
| 127 | 132 | link = document.querySelector('.smb-'+type+'-diff') |
| 128 | 133 | || document.querySelector('.sml-'+type+'-diff'), |
| 129 | 134 | href; |
| 130 | 135 | if( link ){ |
| 131 | 136 | if( link.dataset.href ) href = link.dataset.href; // anti-bot |
| @@ -132,10 +137,19 @@ | ||
| 132 | 137 | else href = link.href; |
| 133 | 138 | } |
| 134 | 139 | if( href && href!=location.href.slice(-href.length) ){ |
| 135 | 140 | location.href = href; |
| 136 | 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 | + } | |
| 137 | 151 | } |
| 138 | 152 | }/*,true*/); |
| 139 | 153 | },false); |
| 140 | 154 | }()); |
| 141 | 155 | |
| 142 | 156 |
| --- 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 @@ | ||
| 450 | 450 | |
| 451 | 451 | /* |
| 452 | 452 | ** Generate javascript to enhance HTML diffs. |
| 453 | 453 | */ |
| 454 | 454 | void append_diff_javascript(int diffType){ |
| 455 | - if( diffType==0 ) return; | |
| 455 | + /* Load fossil.diff.js even if diffType==0 to enable keyboard shortcuts. */ | |
| 456 | 456 | builtin_fossil_js_bundle_or("diff", NULL); |
| 457 | 457 | } |
| 458 | 458 | |
| 459 | 459 | /* |
| 460 | 460 | ** Construct an appropriate diffFlag for text_diff() based on query |
| @@ -900,11 +900,13 @@ | ||
| 900 | 900 | /* ^^^ .info-changes-menu is used by diff scroll sync */ |
| 901 | 901 | pCfg = construct_diff_flags(diffType, &DCfg); |
| 902 | 902 | DCfg.pRe = pRe; |
| 903 | 903 | zW = (DCfg.diffFlags&DIFF_IGNORE_ALLWS)?"&w":""; |
| 904 | 904 | 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))\ | |
| 906 | 908 | @ Hide Diffs</a> |
| 907 | 909 | } |
| 908 | 910 | if( diffType!=1 ){ |
| 909 | 911 | /* Class "smb-unified-diff" required by the fossil.diff.js script. */ |
| 910 | 912 | const char *zBtnClass = "button smb-unified-diff"; |
| @@ -1196,10 +1198,12 @@ | ||
| 1196 | 1198 | ** i Hide all file changes. |
| 1197 | 1199 | ** p Show only next file change. |
| 1198 | 1200 | ** o Show only previous file change. |
| 1199 | 1201 | ** u Reload page in Unified Diff mode. |
| 1200 | 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. | |
| 1201 | 1205 | ** |
| 1202 | 1206 | ** The keyboard shortcuts also apply to /vinfo, /ci and /fdiff pages, |
| 1203 | 1207 | ** and to /info pages describing check-in information. |
| 1204 | 1208 | */ |
| 1205 | 1209 | void vdiff_page(void){ |
| 1206 | 1210 |
| --- 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 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 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 |