IMDb Full Summary

Automatically show the full plot summary on IMDb

目前为 2021-07-10 提交的版本。查看 最新版本

// ==UserScript==
// @name          IMDb Full Summary
// @description   Automatically show the full plot summary on IMDb
// @author        chocolateboy
// @copyright     chocolateboy
// @version       2.1.0
// @namespace     https://github.com/chocolateboy/userscripts
// @license       GPL
// @include       https://www.imdb.com/title/tt*
// @grant         none
// ==/UserScript==

/*
 * Tests:
 *
 *  - movie:   https://www.imdb.com/title/tt7638460/
 *  - TV show: https://www.imdb.com/title/tt0108983/
 */

(function () {
    // the truncated summaries: separate elements for the small/medium
    // ("plot-xs_to_m"), large ("plot-l"), and extra large ("plot-xl") layouts
    const summaries = document.querySelectorAll('span[data-testid^="plot-"]')

    if (!summaries.length) {
        return
    }

    // the full summary
    const storyline = document.querySelector('[data-testid="storyline-plot-summary"] > div > div')

    if (!storyline) {
        return
    }

    const [summary] = summaries
    const truncated = summary.firstChild?.textContent?.trim()?.slice(0, -3)
    const fullSummary = storyline.firstChild?.textContent?.trim()

    if (truncated && fullSummary && fullSummary.length > truncated.length && fullSummary.startsWith(truncated)) {
        const init = { childList: true }
        const fakeMutations = Array.from(summaries, target => ({ target }))

        /**
         * @param {Array<{ target: Node }>} mutations
         * @param {MutationObserver} observer
         */
        const replaceSummary = (mutations, observer) => {
            observer.disconnect()
            const targets = new Set(mutations.map(mutation => mutation.target))
            targets.forEach(target => target.textContent = fullSummary)
            targets.forEach(target => observer.observe(target, init))
        }

        replaceSummary(fakeMutations, new MutationObserver(replaceSummary))
    }
})()

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址