123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- // Warning: this could cause some memory leaks
- let prefetches = {}
- export function prefetchHtml(destination, callback) {
- let path = destination.pathname
- if (prefetches[path]) return
- prefetches[path] = { finished: false, html: null, whenFinished: () => {} }
- fetch(path).then(i => i.text()).then(html => {
- callback(html)
- })
- }
- export function storeThePrefetchedHtmlForWhenALinkIsClicked(html, destination) {
- let state = prefetches[destination.pathname]
- state.html = html
- state.finished = true
- state.whenFinished()
- }
- export function getPretchedHtmlOr(destination, receive, ifNoPrefetchExists) {
- let path = destination.pathname
- if (! prefetches[path]) return ifNoPrefetchExists()
- if (prefetches[path].finished) {
- let html = prefetches[path].html
- delete prefetches[path]
- return receive(html)
- } else {
- prefetches[path].whenFinished = () => {
- let html = prefetches[path].html
- delete prefetches[path]
- receive(html)
- }
- }
- }
|