Fossil SCM

Access the hidden input field used for back/forward caching via dedicated functions, and let browsers do the buffering of `document.getElementById()' results themselves.

florian 2022-08-04 03:35 timeline-keyboard-navigation
Commit 115b4849922ba9f72b38e16b3aeb360be75ea88fa9a43eb32ead769ea19eab32
1 file changed +25 -17
+25 -17
--- src/graph.js
+++ src/graph.js
@@ -889,19 +889,30 @@
889889
return true;
890890
}
891891
}
892892
return false;
893893
}
894
- var kf = document.getElementById('timeline-kbfocus');
895
- if( !kf ){
896
- kf = document.createElement('input');
897
- kf.type = 'text';
898
- kf.style.display = 'none';
899
- kf.style.visibility = 'hidden';
900
- kf.id = 'timeline-kbfocus';
901
- document.body.appendChild(kf);
902
- }
894
+ function focusCacheInit(){
895
+ var e = document.getElementById('timeline-kbfocus');
896
+ if( !e ){
897
+ e = document.createElement('input');
898
+ e.type = 'text';
899
+ e.style.display = 'none';
900
+ e.style.visibility = 'hidden';
901
+ e.id = 'timeline-kbfocus';
902
+ document.body.appendChild(e);
903
+ }
904
+ }
905
+ function focusCacheGet(){
906
+ var e = document.getElementById('timeline-kbfocus');
907
+ return e ? e.value : null;
908
+ }
909
+ function focusCacheSet(v){
910
+ var e = document.getElementById('timeline-kbfocus');
911
+ if( e ) e.value = v;
912
+ }
913
+ focusCacheInit();
903914
document.addEventListener('keydown',function(evt){
904915
if( evt.target.tagName=='INPUT' ) return;
905916
var
906917
kNEXT = 78 /* N */,
907918
kPREV = 77 /* M */,
@@ -912,20 +923,19 @@
912923
key = ( evt.which || evt.keyCode ) | mod;
913924
var dx = 0;
914925
if( key==kPREV ) dx++;
915926
else if( key==kNEXT ) dx--;
916927
else if( key!=kTMLN && key!=kVIEW && key!=kDONE ) return;
917
- var kf = document.getElementById('timeline-kbfocus');
918928
if( key==kDONE ){
919
- kf.value = '';
929
+ focusCacheSet(null);
920930
focusVisualize(null,false);
921931
document.cookie =
922932
'fossil_timeline_kbnav=;expires=Thu, 01 Jan 1970 00:00:01 GMT;path=/';
923933
return;
924934
}
925935
document.cookie = 'fossil_timeline_kbnav=1;path=/';
926
- var id = kf.value;
936
+ var id = focusCacheGet();
927937
if( id && dx==0 ){
928938
var ri = timelineGetRowInfo(id);
929939
if( ri ){
930940
var page = key==kVIEW ? '/info/' : '/timeline?c=';
931941
var href = ri.baseurl + page + encodeURIComponent(ri.hash);
@@ -943,22 +953,20 @@
943953
if( btn ) btn.click();
944954
return;
945955
}
946956
}
947957
else if ( !id ) id = focusDefaultId();
948
- kf.value = id;
958
+ focusCacheSet(id);
949959
focusVisualize(id,true);
950960
}/*,true*/);
951961
window.addEventListener('pageshow',function(evt){
952
- var id;
953
- var kf = document.getElementById('timeline-kbfocus');
954
- if( kf ) id = kf.value;
962
+ var id = focusCacheGet();
955963
if( !id || !focusVisualize(id,false) ){
956964
if( document.cookie.match(/fossil_timeline_kbnav=1/) ){
957965
id = focusDefaultId();
958
- kf.value = id;
966
+ focusCacheSet(id);
959967
focusVisualize(id,false);
960968
}
961969
}
962970
},false);
963971
},false);
964972
}());
965973
--- src/graph.js
+++ src/graph.js
@@ -889,19 +889,30 @@
889 return true;
890 }
891 }
892 return false;
893 }
894 var kf = document.getElementById('timeline-kbfocus');
895 if( !kf ){
896 kf = document.createElement('input');
897 kf.type = 'text';
898 kf.style.display = 'none';
899 kf.style.visibility = 'hidden';
900 kf.id = 'timeline-kbfocus';
901 document.body.appendChild(kf);
902 }
 
 
 
 
 
 
 
 
 
 
 
903 document.addEventListener('keydown',function(evt){
904 if( evt.target.tagName=='INPUT' ) return;
905 var
906 kNEXT = 78 /* N */,
907 kPREV = 77 /* M */,
@@ -912,20 +923,19 @@
912 key = ( evt.which || evt.keyCode ) | mod;
913 var dx = 0;
914 if( key==kPREV ) dx++;
915 else if( key==kNEXT ) dx--;
916 else if( key!=kTMLN && key!=kVIEW && key!=kDONE ) return;
917 var kf = document.getElementById('timeline-kbfocus');
918 if( key==kDONE ){
919 kf.value = '';
920 focusVisualize(null,false);
921 document.cookie =
922 'fossil_timeline_kbnav=;expires=Thu, 01 Jan 1970 00:00:01 GMT;path=/';
923 return;
924 }
925 document.cookie = 'fossil_timeline_kbnav=1;path=/';
926 var id = kf.value;
927 if( id && dx==0 ){
928 var ri = timelineGetRowInfo(id);
929 if( ri ){
930 var page = key==kVIEW ? '/info/' : '/timeline?c=';
931 var href = ri.baseurl + page + encodeURIComponent(ri.hash);
@@ -943,22 +953,20 @@
943 if( btn ) btn.click();
944 return;
945 }
946 }
947 else if ( !id ) id = focusDefaultId();
948 kf.value = id;
949 focusVisualize(id,true);
950 }/*,true*/);
951 window.addEventListener('pageshow',function(evt){
952 var id;
953 var kf = document.getElementById('timeline-kbfocus');
954 if( kf ) id = kf.value;
955 if( !id || !focusVisualize(id,false) ){
956 if( document.cookie.match(/fossil_timeline_kbnav=1/) ){
957 id = focusDefaultId();
958 kf.value = id;
959 focusVisualize(id,false);
960 }
961 }
962 },false);
963 },false);
964 }());
965
--- src/graph.js
+++ src/graph.js
@@ -889,19 +889,30 @@
889 return true;
890 }
891 }
892 return false;
893 }
894 function focusCacheInit(){
895 var e = document.getElementById('timeline-kbfocus');
896 if( !e ){
897 e = document.createElement('input');
898 e.type = 'text';
899 e.style.display = 'none';
900 e.style.visibility = 'hidden';
901 e.id = 'timeline-kbfocus';
902 document.body.appendChild(e);
903 }
904 }
905 function focusCacheGet(){
906 var e = document.getElementById('timeline-kbfocus');
907 return e ? e.value : null;
908 }
909 function focusCacheSet(v){
910 var e = document.getElementById('timeline-kbfocus');
911 if( e ) e.value = v;
912 }
913 focusCacheInit();
914 document.addEventListener('keydown',function(evt){
915 if( evt.target.tagName=='INPUT' ) return;
916 var
917 kNEXT = 78 /* N */,
918 kPREV = 77 /* M */,
@@ -912,20 +923,19 @@
923 key = ( evt.which || evt.keyCode ) | mod;
924 var dx = 0;
925 if( key==kPREV ) dx++;
926 else if( key==kNEXT ) dx--;
927 else if( key!=kTMLN && key!=kVIEW && key!=kDONE ) return;
 
928 if( key==kDONE ){
929 focusCacheSet(null);
930 focusVisualize(null,false);
931 document.cookie =
932 'fossil_timeline_kbnav=;expires=Thu, 01 Jan 1970 00:00:01 GMT;path=/';
933 return;
934 }
935 document.cookie = 'fossil_timeline_kbnav=1;path=/';
936 var id = focusCacheGet();
937 if( id && dx==0 ){
938 var ri = timelineGetRowInfo(id);
939 if( ri ){
940 var page = key==kVIEW ? '/info/' : '/timeline?c=';
941 var href = ri.baseurl + page + encodeURIComponent(ri.hash);
@@ -943,22 +953,20 @@
953 if( btn ) btn.click();
954 return;
955 }
956 }
957 else if ( !id ) id = focusDefaultId();
958 focusCacheSet(id);
959 focusVisualize(id,true);
960 }/*,true*/);
961 window.addEventListener('pageshow',function(evt){
962 var id = focusCacheGet();
 
 
963 if( !id || !focusVisualize(id,false) ){
964 if( document.cookie.match(/fossil_timeline_kbnav=1/) ){
965 id = focusDefaultId();
966 focusCacheSet(id);
967 focusVisualize(id,false);
968 }
969 }
970 },false);
971 },false);
972 }());
973

Keyboard Shortcuts

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