Track viewed PDF pages and persist state in sessionStorage
Added logic to monitor which PDF pages have been viewed by the user. The list of unviewed pages and a flag for all pages viewed are stored in sessionStorage and updated as the user navigates. Changes applied to both ui.js and ui.min.js.
This commit is contained in:
@@ -17,8 +17,37 @@
|
||||
return !(annotation.isSignature || annotation.description === 'FRAME')
|
||||
},
|
||||
}).then((instance) => {
|
||||
const totalPages = instance.totalPageCount || 0
|
||||
const storageKeyAll = 'pspdf_all_pages_rendered'
|
||||
const storageKeyUnviewed = 'pspdf_unviewed_pages'
|
||||
|
||||
let unviewed = totalPages > 0 ? Array.from({ length: totalPages }, (_, i) => i + 1) : []
|
||||
|
||||
const saveState = () => {
|
||||
sessionStorage.setItem(storageKeyUnviewed, JSON.stringify(unviewed))
|
||||
sessionStorage.setItem(storageKeyAll, JSON.stringify(unviewed.length === 0 && totalPages > 0))
|
||||
}
|
||||
|
||||
const markPageViewed = (pageIndex) => {
|
||||
const pageNumber = pageIndex + 1
|
||||
if (pageNumber < 1 || pageNumber > totalPages) return
|
||||
const idx = unviewed.indexOf(pageNumber)
|
||||
if (idx >= 0) {
|
||||
unviewed.splice(idx, 1)
|
||||
saveState()
|
||||
}
|
||||
}
|
||||
|
||||
// initial state in session storage
|
||||
saveState()
|
||||
|
||||
// mark the initially visible page
|
||||
const initialPage = instance.viewState?.currentPageIndex ?? 0
|
||||
markPageViewed(initialPage)
|
||||
|
||||
instance.addEventListener('viewState.currentPageIndex.change', (pageIndex) => {
|
||||
console.log('Active page:', pageIndex + 1)
|
||||
markPageViewed(pageIndex)
|
||||
})
|
||||
|
||||
return instance
|
||||
|
||||
Reference in New Issue
Block a user