mirror of
https://github.com/john-okeefe/foliate-js.git
synced 2026-09-09 11:29:14 -04:00
Unload section when destroying the renderer
This commit is contained in:
+8
-1
@@ -151,6 +151,7 @@ const makeMarginals = (length, part) => Array.from({ length }, () => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
class View {
|
class View {
|
||||||
|
#observer = new ResizeObserver(() => this.expand())
|
||||||
#element = document.createElement('div')
|
#element = document.createElement('div')
|
||||||
#iframe = document.createElement('iframe')
|
#iframe = document.createElement('iframe')
|
||||||
#contentRange = document.createRange()
|
#contentRange = document.createRange()
|
||||||
@@ -212,7 +213,7 @@ class View {
|
|||||||
const layout = beforeRender?.({ vertical, rtl, background })
|
const layout = beforeRender?.({ vertical, rtl, background })
|
||||||
this.#iframe.style.display = 'block'
|
this.#iframe.style.display = 'block'
|
||||||
this.render(layout)
|
this.render(layout)
|
||||||
new ResizeObserver(() => this.expand()).observe(doc.body)
|
this.#observer.observe(doc.body)
|
||||||
|
|
||||||
// the resize observer above doesn't work in Firefox
|
// the resize observer above doesn't work in Firefox
|
||||||
// (see https://bugzilla.mozilla.org/show_bug.cgi?id=1832939)
|
// (see https://bugzilla.mozilla.org/show_bug.cgi?id=1832939)
|
||||||
@@ -352,6 +353,9 @@ class View {
|
|||||||
get overlayer() {
|
get overlayer() {
|
||||||
return this.#overlayer
|
return this.#overlayer
|
||||||
}
|
}
|
||||||
|
destroy() {
|
||||||
|
if (this.document) this.#observer.unobserve(this.document.body)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// NOTE: everything here assumes the so-called "negative scroll type" for RTL
|
// NOTE: everything here assumes the so-called "negative scroll type" for RTL
|
||||||
@@ -941,6 +945,9 @@ export class Paginator extends HTMLElement {
|
|||||||
}
|
}
|
||||||
destroy() {
|
destroy() {
|
||||||
this.#observer.unobserve(this)
|
this.#observer.unobserve(this)
|
||||||
|
this.#view.destroy()
|
||||||
|
this.#view = null
|
||||||
|
this.sections[this.#index]?.unload?.()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -129,6 +129,15 @@ export class View extends HTMLElement {
|
|||||||
this.renderer.open(book)
|
this.renderer.open(book)
|
||||||
this.#root.append(this.renderer)
|
this.#root.append(this.renderer)
|
||||||
}
|
}
|
||||||
|
close() {
|
||||||
|
this.renderer?.destroy?.()
|
||||||
|
this.#sectionProgress = null
|
||||||
|
this.#tocProgress = null
|
||||||
|
this.#pageProgress = null
|
||||||
|
this.#searchResults = new Map()
|
||||||
|
this.lastLocation = null
|
||||||
|
this.history = new History()
|
||||||
|
}
|
||||||
goToTextStart() {
|
goToTextStart() {
|
||||||
return this.goTo(this.book.landmarks
|
return this.goTo(this.book.landmarks
|
||||||
?.find(m => m.type.includes('bodymatter') || m.type.includes('text'))
|
?.find(m => m.type.includes('bodymatter') || m.type.includes('text'))
|
||||||
@@ -392,10 +401,6 @@ export class View extends HTMLElement {
|
|||||||
for (const item of list) this.deleteAnnotation(item)
|
for (const item of list) this.deleteAnnotation(item)
|
||||||
this.#searchResults.clear()
|
this.#searchResults.clear()
|
||||||
}
|
}
|
||||||
destroy() {
|
|
||||||
this.book.destroy?.()
|
|
||||||
this.renderer?.destroy?.()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
customElements.define('foliate-view', View)
|
customElements.define('foliate-view', View)
|
||||||
|
|||||||
Reference in New Issue
Block a user