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.
Commit
115b4849922ba9f72b38e16b3aeb360be75ea88fa9a43eb32ead769ea19eab32
Parent
0f9981971ea6eb4…
1 file changed
+25
-17
+25
-17
| --- src/graph.js | ||
| +++ src/graph.js | ||
| @@ -889,19 +889,30 @@ | ||
| 889 | 889 | return true; |
| 890 | 890 | } |
| 891 | 891 | } |
| 892 | 892 | return false; |
| 893 | 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 | - } | |
| 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(); | |
| 903 | 914 | document.addEventListener('keydown',function(evt){ |
| 904 | 915 | if( evt.target.tagName=='INPUT' ) return; |
| 905 | 916 | var |
| 906 | 917 | kNEXT = 78 /* N */, |
| 907 | 918 | kPREV = 77 /* M */, |
| @@ -912,20 +923,19 @@ | ||
| 912 | 923 | key = ( evt.which || evt.keyCode ) | mod; |
| 913 | 924 | var dx = 0; |
| 914 | 925 | if( key==kPREV ) dx++; |
| 915 | 926 | else if( key==kNEXT ) dx--; |
| 916 | 927 | else if( key!=kTMLN && key!=kVIEW && key!=kDONE ) return; |
| 917 | - var kf = document.getElementById('timeline-kbfocus'); | |
| 918 | 928 | if( key==kDONE ){ |
| 919 | - kf.value = ''; | |
| 929 | + focusCacheSet(null); | |
| 920 | 930 | focusVisualize(null,false); |
| 921 | 931 | document.cookie = |
| 922 | 932 | 'fossil_timeline_kbnav=;expires=Thu, 01 Jan 1970 00:00:01 GMT;path=/'; |
| 923 | 933 | return; |
| 924 | 934 | } |
| 925 | 935 | document.cookie = 'fossil_timeline_kbnav=1;path=/'; |
| 926 | - var id = kf.value; | |
| 936 | + var id = focusCacheGet(); | |
| 927 | 937 | if( id && dx==0 ){ |
| 928 | 938 | var ri = timelineGetRowInfo(id); |
| 929 | 939 | if( ri ){ |
| 930 | 940 | var page = key==kVIEW ? '/info/' : '/timeline?c='; |
| 931 | 941 | var href = ri.baseurl + page + encodeURIComponent(ri.hash); |
| @@ -943,22 +953,20 @@ | ||
| 943 | 953 | if( btn ) btn.click(); |
| 944 | 954 | return; |
| 945 | 955 | } |
| 946 | 956 | } |
| 947 | 957 | else if ( !id ) id = focusDefaultId(); |
| 948 | - kf.value = id; | |
| 958 | + focusCacheSet(id); | |
| 949 | 959 | focusVisualize(id,true); |
| 950 | 960 | }/*,true*/); |
| 951 | 961 | 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(); | |
| 955 | 963 | if( !id || !focusVisualize(id,false) ){ |
| 956 | 964 | if( document.cookie.match(/fossil_timeline_kbnav=1/) ){ |
| 957 | 965 | id = focusDefaultId(); |
| 958 | - kf.value = id; | |
| 966 | + focusCacheSet(id); | |
| 959 | 967 | focusVisualize(id,false); |
| 960 | 968 | } |
| 961 | 969 | } |
| 962 | 970 | },false); |
| 963 | 971 | },false); |
| 964 | 972 | }()); |
| 965 | 973 |
| --- 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 |