diff options
Diffstat (limited to 'ext/fg/js/content-script-main.js')
| -rw-r--r-- | ext/fg/js/content-script-main.js | 152 | 
1 files changed, 18 insertions, 134 deletions
| diff --git a/ext/fg/js/content-script-main.js b/ext/fg/js/content-script-main.js index c31cde3f..c4aa1bca 100644 --- a/ext/fg/js/content-script-main.js +++ b/ext/fg/js/content-script-main.js @@ -16,147 +16,31 @@   */  /* global - * DOM - * FrameOffsetForwarder   * Frontend   * PopupFactory - * PopupProxy   * api   */ -async function createPopupFactory() { -    const {frameId} = await api.frameInformationGet(); -    if (typeof frameId !== 'number') { -        const error = new Error('Failed to get frameId'); -        yomichan.logError(error); -        throw error; -    } - -    const popupFactory = new PopupFactory(frameId); -    await popupFactory.prepare(); -    return popupFactory; -} - -async function createIframePopupProxy(frameOffsetForwarder, setDisabled) { -    const rootPopupInformationPromise = yomichan.getTemporaryListenerResult( -        chrome.runtime.onMessage, -        ({action, params}, {resolve}) => { -            if (action === 'rootPopupInformation') { -                resolve(params); -            } -        } -    ); -    api.broadcastTab('rootPopupRequestInformationBroadcast'); -    const {popupId, frameId: parentFrameId} = await rootPopupInformationPromise; - -    const popup = new PopupProxy(popupId, 0, null, parentFrameId, frameOffsetForwarder); -    popup.on('offsetNotFound', setDisabled); -    await popup.prepare(); - -    return popup; -} - -async function getOrCreatePopup(depth, popupFactory) { -    return popupFactory.getOrCreatePopup(null, null, depth); -} - -async function createPopupProxy(depth, id, parentFrameId) { -    const popup = new PopupProxy(null, depth + 1, id, parentFrameId); -    await popup.prepare(); - -    return popup; -} -  (async () => { -    api.forwardLogsToBackend(); -    await yomichan.prepare(); - -    const data = window.frontendInitializationData || {}; -    const {id, depth=0, parentFrameId, url=window.location.href, proxy=false, isSearchPage=false} = data; - -    const isIframe = !proxy && (window !== window.parent); - -    const popups = { -        iframe: null, -        proxy: null, -        normal: null -    }; +    try { +        api.forwardLogsToBackend(); +        await yomichan.prepare(); -    let frontend = null; -    let frontendPreparePromise = null; -    let frameOffsetForwarder = null; -    let popupFactoryPromise = null; - -    let iframePopupsInRootFrameAvailable = true; - -    const disableIframePopupsInRootFrame = () => { -        iframePopupsInRootFrameAvailable = false; -        applyOptions(); -    }; - -    let urlUpdatedAt = 0; -    let popupProxyUrlCached = url; -    const getPopupProxyUrl = async () => { -        const now = Date.now(); -        if (popups.proxy !== null && now - urlUpdatedAt > 500) { -            popupProxyUrlCached = await popups.proxy.getUrl(); -            urlUpdatedAt = now; +        const {frameId} = await api.frameInformationGet(); +        if (typeof frameId !== 'number') { +            throw new Error('Failed to get frameId');          } -        return popupProxyUrlCached; -    }; - -    const applyOptions = async () => { -        const optionsContext = { -            depth: isSearchPage ? 0 : depth, -            url: proxy ? await getPopupProxyUrl() : window.location.href -        }; -        const options = await api.optionsGet(optionsContext); -        if (!proxy && frameOffsetForwarder === null) { -            frameOffsetForwarder = new FrameOffsetForwarder(); -            frameOffsetForwarder.prepare(); -        } - -        let popup; -        if (isIframe && options.general.showIframePopupsInRootFrame && DOM.getFullscreenElement() === null && iframePopupsInRootFrameAvailable) { -            popup = popups.iframe || await createIframePopupProxy(frameOffsetForwarder, disableIframePopupsInRootFrame); -            popups.iframe = popup; -        } else if (proxy) { -            popup = popups.proxy || await createPopupProxy(depth, id, parentFrameId); -            popups.proxy = popup; -        } else { -            popup = popups.normal; -            if (!popup) { -                if (popupFactoryPromise === null) { -                    popupFactoryPromise = createPopupFactory(); -                } -                const popupFactory = await popupFactoryPromise; -                const popupNormal = await getOrCreatePopup(depth, popupFactory); -                popups.normal = popupNormal; -                popup = popupNormal; -            } -        } - -        if (frontend === null) { -            const getUrl = proxy ? getPopupProxyUrl : null; -            frontend = new Frontend(popup, getUrl); -            frontendPreparePromise = frontend.prepare(); -            await frontendPreparePromise; -        } else { -            await frontendPreparePromise; -            if (isSearchPage) { -                const disabled = !options.scanning.enableOnSearchPage; -                frontend.setDisabledOverride(disabled); -            } - -            if (isIframe) { -                await frontend.setPopup(popup); -            } -        } -    }; - -    yomichan.on('optionsUpdated', applyOptions); -    window.addEventListener('fullscreenchange', applyOptions, false); - -    await applyOptions(); +        const popupFactory = new PopupFactory(frameId); +        await popupFactory.prepare(); + +        const frontend = new Frontend( +            frameId, +            popupFactory, +            {} +        ); +        await frontend.prepare(); +    } catch (e) { +        yomichan.logError(e); +    }  })(); |