@@ -27,6 +27,67 @@ function initSideNav() {
27
27
}
28
28
}
29
29
30
+ function saveLeftScroll ( ) {
31
+ var leftSidebar = document . getElementById ( 'dartdoc-sidebar-left' ) ;
32
+ sessionStorage . setItem ( 'dartdoc-sidebar-left-scrollt' , leftSidebar . scrollTop ) ;
33
+ sessionStorage . setItem ( 'dartdoc-sidebar-left-scrolll' , leftSidebar . scrollLeft ) ;
34
+ }
35
+
36
+ function saveMainContentScroll ( ) {
37
+ var mainContent = document . getElementById ( 'dartdoc-main-content' ) ;
38
+ sessionStorage . setItem ( 'dartdoc-main-content-scrollt' , mainContent . scrollTop ) ;
39
+ sessionStorage . setItem ( 'dartdoc-main-content-scrolll' , mainContent . scrollLeft ) ;
40
+ }
41
+
42
+ function saveRightScroll ( ) {
43
+ var rightSidebar = document . getElementById ( 'dartdoc-sidebar-right' ) ;
44
+ sessionStorage . setItem ( 'dartdoc-sidebar-right-scrollt' , rightSidebar . scrollTop ) ;
45
+ sessionStorage . setItem ( 'dartdoc-sidebar-right-scrolll' , rightSidebar . scrollLeft ) ;
46
+ }
47
+
48
+ function restoreScrolls ( ) {
49
+ var leftSidebar = document . getElementById ( 'dartdoc-sidebar-left' ) ;
50
+ var mainContent = document . getElementById ( 'dartdoc-main-content' ) ;
51
+ var rightSidebar = document . getElementById ( 'dartdoc-sidebar-right' ) ;
52
+
53
+ try {
54
+ var leftSidebarX = sessionStorage . getItem ( 'dartdoc-sidebar-left-scrolll' ) ;
55
+ var leftSidebarY = sessionStorage . getItem ( 'dartdoc-sidebar-left-scrollt' ) ;
56
+
57
+ var mainContentX = sessionStorage . getItem ( 'dartdoc-main-content-scrolll' ) ;
58
+ var mainContentY = sessionStorage . getItem ( 'dartdoc-main-content-scrollt' ) ;
59
+
60
+ var rightSidebarX = sessionStorage . getItem ( 'dartdoc-sidebar-right-scrolll' ) ;
61
+ var rightSidebarY = sessionStorage . getItem ( 'dartdoc-sidebar-right-scrollt' ) ;
62
+
63
+ leftSidebar . scrollTo ( leftSidebarX , leftSidebarY ) ;
64
+ mainContent . scrollTo ( mainContentX , mainContentY ) ;
65
+ rightSidebar . scrollTo ( rightSidebarX , rightSidebarY ) ;
66
+ } finally {
67
+ // Set visibility to visible after scroll to prevent the brief appearance of the
68
+ // panel in the wrong position.
69
+ leftSidebar . style . visibility = 'visible' ;
70
+ mainContent . style . visibility = 'visible' ;
71
+ rightSidebar . style . visibility = 'visible' ;
72
+ }
73
+ }
74
+
75
+ function initScrollSave ( ) {
76
+ var leftSidebar = document . getElementById ( 'dartdoc-sidebar-left' ) ;
77
+ var mainContent = document . getElementById ( 'dartdoc-main-content' ) ;
78
+ var rightSidebar = document . getElementById ( 'dartdoc-sidebar-right' ) ;
79
+
80
+ // For portablility, use two different ways of attaching saveLeftScroll to events.
81
+ // Keep the scroll position from expiring from the cache for a page that's been displayed
82
+ // a long time but not moved by re-saving its position every hour.
83
+ leftSidebar . onscroll = saveLeftScroll ;
84
+ leftSidebar . addEventListener ( "scroll" , saveLeftScroll , true ) ;
85
+ mainContent . onscroll = saveMainContentScroll ;
86
+ mainContent . addEventListener ( "scroll" , saveMainContentScroll , true ) ;
87
+ rightSidebar . onscroll = saveRightScroll ;
88
+ rightSidebar . addEventListener ( "scroll" , saveRightScroll , true ) ;
89
+ }
90
+
30
91
function initSearch ( name ) {
31
92
var searchIndex ; // the JSON data
32
93
@@ -193,8 +254,11 @@ function initSearch(name) {
193
254
}
194
255
195
256
document . addEventListener ( "DOMContentLoaded" , function ( ) {
257
+ // Place this first so that unexpected exceptions in other JavaScript do not block page visibility.
258
+ restoreScrolls ( ) ;
196
259
hljs . initHighlightingOnLoad ( ) ;
197
260
initSideNav ( ) ;
261
+ initScrollSave ( ) ;
198
262
initSearch ( "search-box" ) ;
199
263
initSearch ( "search-body" ) ;
200
264
initSearch ( "search-sidebar" ) ;
0 commit comments