Fossil SCM

Fix the shortcut handler to cycle between selected, check-out and ticked entries getting stuck, and give highest priority to ticked entries.

florian 2022-08-14 08:03 timeline-keyboard-navigation
Commit b6a656b520e6c7a4da57e1425e5d07d753ebb0a6e4b1f032e1679c33c5053197
1 file changed +27 -9
+27 -9
--- src/graph.js
+++ src/graph.js
@@ -1069,19 +1069,37 @@
10691069
}
10701070
focusCookieInit();
10711071
var id = focusCacheGet();
10721072
if( id && dx==0 ){
10731073
if( key==kCYCL ){
1074
- var sel = focusSelectedId();
1075
- var sl2 = focus2ndSelectedId();
1076
- var cur = focusCurrentId();
1077
- var tik = focusTickedId();
1078
- if( id==sel ) id = sl2 || cur || tik || sel;
1079
- else if( id==sl2 ) id = cur || tik || sel || sl2;
1080
- else if( id==cur ) id = tik || sel || sl2 || cur;
1081
- else if( id==tik ) id = sel || sl2 || cur || tik;
1082
- else id = sel || sl2 || cur || tik || id;
1074
+ function uniqIds(){
1075
+ var a = Array.prototype.slice.call(arguments,0), k=[], v=[];
1076
+ for( var i=0; i<a.length; i++ ){
1077
+ if( a[i] && !(a[i] in k) ){
1078
+ k[a[i]] = 1;
1079
+ v.push(a[i]);
1080
+ }
1081
+ }
1082
+ return v;
1083
+ }
1084
+ var ids = uniqIds(
1085
+ focusTickedId(),
1086
+ focusSelectedId(),
1087
+ focus2ndSelectedId(),
1088
+ focusCurrentId()
1089
+ );
1090
+ if( ids.length>1 ){
1091
+ var m = 0;
1092
+ for( var i=0; i<ids.length; i++ ){
1093
+ if( id==ids[i] ){
1094
+ m = i<ids.length-1 ? i+1 : 0;
1095
+ break;
1096
+ }
1097
+ }
1098
+ id = ids[m];
1099
+ }
1100
+ else if( ids.length==1 ) id = ids[0];
10831101
}
10841102
else if( key==kTICK ){
10851103
var gn = document.getElementById('tln'+id.slice(1));
10861104
if( gn ) gn.click();
10871105
}
10881106
--- src/graph.js
+++ src/graph.js
@@ -1069,19 +1069,37 @@
1069 }
1070 focusCookieInit();
1071 var id = focusCacheGet();
1072 if( id && dx==0 ){
1073 if( key==kCYCL ){
1074 var sel = focusSelectedId();
1075 var sl2 = focus2ndSelectedId();
1076 var cur = focusCurrentId();
1077 var tik = focusTickedId();
1078 if( id==sel ) id = sl2 || cur || tik || sel;
1079 else if( id==sl2 ) id = cur || tik || sel || sl2;
1080 else if( id==cur ) id = tik || sel || sl2 || cur;
1081 else if( id==tik ) id = sel || sl2 || cur || tik;
1082 else id = sel || sl2 || cur || tik || id;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1083 }
1084 else if( key==kTICK ){
1085 var gn = document.getElementById('tln'+id.slice(1));
1086 if( gn ) gn.click();
1087 }
1088
--- src/graph.js
+++ src/graph.js
@@ -1069,19 +1069,37 @@
1069 }
1070 focusCookieInit();
1071 var id = focusCacheGet();
1072 if( id && dx==0 ){
1073 if( key==kCYCL ){
1074 function uniqIds(){
1075 var a = Array.prototype.slice.call(arguments,0), k=[], v=[];
1076 for( var i=0; i<a.length; i++ ){
1077 if( a[i] && !(a[i] in k) ){
1078 k[a[i]] = 1;
1079 v.push(a[i]);
1080 }
1081 }
1082 return v;
1083 }
1084 var ids = uniqIds(
1085 focusTickedId(),
1086 focusSelectedId(),
1087 focus2ndSelectedId(),
1088 focusCurrentId()
1089 );
1090 if( ids.length>1 ){
1091 var m = 0;
1092 for( var i=0; i<ids.length; i++ ){
1093 if( id==ids[i] ){
1094 m = i<ids.length-1 ? i+1 : 0;
1095 break;
1096 }
1097 }
1098 id = ids[m];
1099 }
1100 else if( ids.length==1 ) id = ids[0];
1101 }
1102 else if( key==kTICK ){
1103 var gn = document.getElementById('tln'+id.slice(1));
1104 if( gn ) gn.click();
1105 }
1106

Keyboard Shortcuts

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