123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- var scroll = (() => {
- function race (done) {
- Promise.race([
- Promise.all([
- new Promise((resolve) => {
- var images = Array.from(document.querySelectorAll('img'))
- if (!images.length) {
- resolve()
- }
- else {
- var loaded = 0
- images.forEach((img) => {
- img.addEventListener('load', () => {
- if (++loaded === images.length) {
- resolve()
- }
- }, {once: true})
- })
- }
- }),
- new Promise((resolve) => {
- var diagrams = Array.from(document.querySelectorAll('code.mermaid'))
- if (!state.content.mermaid || !diagrams.length) {
- resolve()
- }
- else {
- var timeout = setInterval(() => {
- var svg = Array.from(document.querySelectorAll('code.mermaid svg'))
- if (diagrams.length === svg.length) {
- clearInterval(timeout)
- resolve()
- }
- }, 50)
- }
- }),
- new Promise((resolve) => {
- if (!state.content.mathjax) {
- resolve()
- }
- else {
- var timeout = setInterval(() => {
- if (mj.loaded) {
- clearInterval(timeout)
- resolve()
- }
- }, 50)
- }
- })
- ]),
- new Promise((resolve) => setTimeout(resolve, 500))
- ])
- .then(done)
- }
- function debounce (container, done) {
- var listener = /html|body/i.test(container.nodeName) ? window : container
- var timeout = null
- listener.addEventListener('scroll', () => {
- clearTimeout(timeout)
- timeout = setTimeout(done, 100)
- })
- }
- function listen (container, prefix) {
- var key = prefix + location.origin + location.pathname
- try {
- container.scrollTop = parseInt(localStorage.getItem(key))
- debounce(container, () => {
- localStorage.setItem(key, container.scrollTop)
- })
- }
- catch (err) {
- chrome.storage.local.get(key, (res) => {
- container.scrollTop = parseInt(res[key])
- })
- debounce(container, () => {
- chrome.storage.local.set({[key]: container.scrollTop})
- })
- }
- }
- return () => {
- var loaded
- race(() => {
- if (!loaded) {
- loaded = true
- var container = ((html = $('html')) => (
- html.scrollTop = 1,
- html.scrollTop ? (html.scrollTop = 0, html) : $('body')
- ))()
- if (state.content.scroll) {
- listen(container, 'md-')
- }
- else if (location.hash && $(location.hash)) {
- container.scrollTop = $(location.hash).offsetTop
- }
- if (state.content.toc) {
- setTimeout(() => listen($('#_toc'), 'md-toc-'), 10)
- }
- }
- })
- }
- })()
|