Fossil SCM
Shortcut H to hop between the selected, current (check-out) and ticked entries.
Commit
7703a5f7a37560260bc443c14479dafa83dbe499ef78267999e59234ad757de7
Parent
f23a6d13a2d4cc6…
1 file changed
+24
-1
+24
-1
| --- src/graph.js | ||
| +++ src/graph.js | ||
| @@ -853,10 +853,22 @@ | ||
| 853 | 853 | function focusDefaultId(){ |
| 854 | 854 | var tn = document.querySelector('.timelineSelected .tl-nodemark') || |
| 855 | 855 | document.querySelector('.timelineCurrent .tl-nodemark'); |
| 856 | 856 | return tn ? tn.id : 'm1'; |
| 857 | 857 | } |
| 858 | + function focusSelectedId(){ | |
| 859 | + var tn = document.querySelector('.timelineSelected .tl-nodemark'); | |
| 860 | + return tn ? tn.id : null; | |
| 861 | + } | |
| 862 | + function focusCurrentId(){ | |
| 863 | + var tn = document.querySelector('.timelineCurrent .tl-nodemark'); | |
| 864 | + return tn ? tn.id : null; | |
| 865 | + } | |
| 866 | + function focusTickedId(){ | |
| 867 | + var nd = document.querySelector('.tl-node.sel'); | |
| 868 | + return nd ? 'm' + nd.id.slice(3) : null; | |
| 869 | + } | |
| 858 | 870 | function focusFirstId(id){ |
| 859 | 871 | return 'm1'; |
| 860 | 872 | } |
| 861 | 873 | function focusLastId(id){ |
| 862 | 874 | var el = document.getElementsByClassName('tl-nodemark'); |
| @@ -930,10 +942,11 @@ | ||
| 930 | 942 | mSHIFT = 1<<13, |
| 931 | 943 | kFRST = mSHIFT | 78 /* SHIFT+N */, |
| 932 | 944 | kNEXT = 78 /* N */, |
| 933 | 945 | kPREV = 77 /* M */, |
| 934 | 946 | kLAST = mSHIFT | 77 /* SHIFT+M */, |
| 947 | + kCYCL = 72 /* H */, | |
| 935 | 948 | kTICK = 188 /* , */, |
| 936 | 949 | kCPYH = 66 /* B */, |
| 937 | 950 | kCPYB = mSHIFT | 66 /* SHIFT+B */, |
| 938 | 951 | kTMLN = 74 /* J */, |
| 939 | 952 | kVIEW = 75 /* K */, |
| @@ -944,10 +957,11 @@ | ||
| 944 | 957 | switch( key ){ |
| 945 | 958 | case kFRST: dx = -2; break; |
| 946 | 959 | case kNEXT: dx = -1; break; |
| 947 | 960 | case kPREV: dx = +1; break; |
| 948 | 961 | case kLAST: dx = +2; break; |
| 962 | + case kCYCL: break; | |
| 949 | 963 | case kTICK: break; |
| 950 | 964 | case kCPYH: break; |
| 951 | 965 | case kCPYB: break; |
| 952 | 966 | case kTMLN: break; |
| 953 | 967 | case kVIEW: break; |
| @@ -962,11 +976,20 @@ | ||
| 962 | 976 | return; |
| 963 | 977 | } |
| 964 | 978 | document.cookie = 'fossil_timeline_kbnav=1;path=/'; |
| 965 | 979 | var id = focusCacheGet(); |
| 966 | 980 | if( id && dx==0 ){ |
| 967 | - if( key==kTICK ){ | |
| 981 | + if( key==kCYCL ){ | |
| 982 | + var sel = focusSelectedId(); | |
| 983 | + var cur = focusCurrentId(); | |
| 984 | + var tik = focusTickedId(); | |
| 985 | + if( id==sel ) id = cur || tik || sel; | |
| 986 | + else if( id==cur ) id = tik || sel || cur; | |
| 987 | + else if( id==tik ) id = sel || cur || tik; | |
| 988 | + else id = sel || cur || tik || id; | |
| 989 | + } | |
| 990 | + else if( key==kTICK ){ | |
| 968 | 991 | var gn = document.getElementById('tln'+id.slice(1)); |
| 969 | 992 | if( gn ) gn.click(); |
| 970 | 993 | } |
| 971 | 994 | else if( key==kCPYH || key==kCPYB ){ |
| 972 | 995 | var ri = timelineGetRowInfo(id); |
| 973 | 996 |
| --- src/graph.js | |
| +++ src/graph.js | |
| @@ -853,10 +853,22 @@ | |
| 853 | function focusDefaultId(){ |
| 854 | var tn = document.querySelector('.timelineSelected .tl-nodemark') || |
| 855 | document.querySelector('.timelineCurrent .tl-nodemark'); |
| 856 | return tn ? tn.id : 'm1'; |
| 857 | } |
| 858 | function focusFirstId(id){ |
| 859 | return 'm1'; |
| 860 | } |
| 861 | function focusLastId(id){ |
| 862 | var el = document.getElementsByClassName('tl-nodemark'); |
| @@ -930,10 +942,11 @@ | |
| 930 | mSHIFT = 1<<13, |
| 931 | kFRST = mSHIFT | 78 /* SHIFT+N */, |
| 932 | kNEXT = 78 /* N */, |
| 933 | kPREV = 77 /* M */, |
| 934 | kLAST = mSHIFT | 77 /* SHIFT+M */, |
| 935 | kTICK = 188 /* , */, |
| 936 | kCPYH = 66 /* B */, |
| 937 | kCPYB = mSHIFT | 66 /* SHIFT+B */, |
| 938 | kTMLN = 74 /* J */, |
| 939 | kVIEW = 75 /* K */, |
| @@ -944,10 +957,11 @@ | |
| 944 | switch( key ){ |
| 945 | case kFRST: dx = -2; break; |
| 946 | case kNEXT: dx = -1; break; |
| 947 | case kPREV: dx = +1; break; |
| 948 | case kLAST: dx = +2; break; |
| 949 | case kTICK: break; |
| 950 | case kCPYH: break; |
| 951 | case kCPYB: break; |
| 952 | case kTMLN: break; |
| 953 | case kVIEW: break; |
| @@ -962,11 +976,20 @@ | |
| 962 | return; |
| 963 | } |
| 964 | document.cookie = 'fossil_timeline_kbnav=1;path=/'; |
| 965 | var id = focusCacheGet(); |
| 966 | if( id && dx==0 ){ |
| 967 | if( key==kTICK ){ |
| 968 | var gn = document.getElementById('tln'+id.slice(1)); |
| 969 | if( gn ) gn.click(); |
| 970 | } |
| 971 | else if( key==kCPYH || key==kCPYB ){ |
| 972 | var ri = timelineGetRowInfo(id); |
| 973 |
| --- src/graph.js | |
| +++ src/graph.js | |
| @@ -853,10 +853,22 @@ | |
| 853 | function focusDefaultId(){ |
| 854 | var tn = document.querySelector('.timelineSelected .tl-nodemark') || |
| 855 | document.querySelector('.timelineCurrent .tl-nodemark'); |
| 856 | return tn ? tn.id : 'm1'; |
| 857 | } |
| 858 | function focusSelectedId(){ |
| 859 | var tn = document.querySelector('.timelineSelected .tl-nodemark'); |
| 860 | return tn ? tn.id : null; |
| 861 | } |
| 862 | function focusCurrentId(){ |
| 863 | var tn = document.querySelector('.timelineCurrent .tl-nodemark'); |
| 864 | return tn ? tn.id : null; |
| 865 | } |
| 866 | function focusTickedId(){ |
| 867 | var nd = document.querySelector('.tl-node.sel'); |
| 868 | return nd ? 'm' + nd.id.slice(3) : null; |
| 869 | } |
| 870 | function focusFirstId(id){ |
| 871 | return 'm1'; |
| 872 | } |
| 873 | function focusLastId(id){ |
| 874 | var el = document.getElementsByClassName('tl-nodemark'); |
| @@ -930,10 +942,11 @@ | |
| 942 | mSHIFT = 1<<13, |
| 943 | kFRST = mSHIFT | 78 /* SHIFT+N */, |
| 944 | kNEXT = 78 /* N */, |
| 945 | kPREV = 77 /* M */, |
| 946 | kLAST = mSHIFT | 77 /* SHIFT+M */, |
| 947 | kCYCL = 72 /* H */, |
| 948 | kTICK = 188 /* , */, |
| 949 | kCPYH = 66 /* B */, |
| 950 | kCPYB = mSHIFT | 66 /* SHIFT+B */, |
| 951 | kTMLN = 74 /* J */, |
| 952 | kVIEW = 75 /* K */, |
| @@ -944,10 +957,11 @@ | |
| 957 | switch( key ){ |
| 958 | case kFRST: dx = -2; break; |
| 959 | case kNEXT: dx = -1; break; |
| 960 | case kPREV: dx = +1; break; |
| 961 | case kLAST: dx = +2; break; |
| 962 | case kCYCL: break; |
| 963 | case kTICK: break; |
| 964 | case kCPYH: break; |
| 965 | case kCPYB: break; |
| 966 | case kTMLN: break; |
| 967 | case kVIEW: break; |
| @@ -962,11 +976,20 @@ | |
| 976 | return; |
| 977 | } |
| 978 | document.cookie = 'fossil_timeline_kbnav=1;path=/'; |
| 979 | var id = focusCacheGet(); |
| 980 | if( id && dx==0 ){ |
| 981 | if( key==kCYCL ){ |
| 982 | var sel = focusSelectedId(); |
| 983 | var cur = focusCurrentId(); |
| 984 | var tik = focusTickedId(); |
| 985 | if( id==sel ) id = cur || tik || sel; |
| 986 | else if( id==cur ) id = tik || sel || cur; |
| 987 | else if( id==tik ) id = sel || cur || tik; |
| 988 | else id = sel || cur || tik || id; |
| 989 | } |
| 990 | else if( key==kTICK ){ |
| 991 | var gn = document.getElementById('tln'+id.slice(1)); |
| 992 | if( gn ) gn.click(); |
| 993 | } |
| 994 | else if( key==kCPYH || key==kCPYB ){ |
| 995 | var ri = timelineGetRowInfo(id); |
| 996 |