<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://gf-ogas.wiki/index.php?action=history&amp;feed=atom&amp;title=Widget%3ABilibiliVideo</id>
	<title>Widget:BilibiliVideo - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://gf-ogas.wiki/index.php?action=history&amp;feed=atom&amp;title=Widget%3ABilibiliVideo"/>
	<link rel="alternate" type="text/html" href="https://gf-ogas.wiki/index.php?title=Widget:BilibiliVideo&amp;action=history"/>
	<updated>2026-06-10T02:15:29Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://gf-ogas.wiki/index.php?title=Widget:BilibiliVideo&amp;diff=14907&amp;oldid=prev</id>
		<title>弃权者：​导入1个版本</title>
		<link rel="alternate" type="text/html" href="https://gf-ogas.wiki/index.php?title=Widget:BilibiliVideo&amp;diff=14907&amp;oldid=prev"/>
		<updated>2026-04-22T00:31:06Z</updated>

		<summary type="html">&lt;p&gt;导入1个版本&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;zh&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←上一版本&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2026年4月22日 (三) 08:31的版本&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;zh&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;（没有差异）&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>弃权者</name></author>
	</entry>
	<entry>
		<id>https://gf-ogas.wiki/index.php?title=Widget:BilibiliVideo&amp;diff=14906&amp;oldid=prev</id>
		<title>2024年6月18日 (二) 08:29 xmlimport&gt;AnnAngela</title>
		<link rel="alternate" type="text/html" href="https://gf-ogas.wiki/index.php?title=Widget:BilibiliVideo&amp;diff=14906&amp;oldid=prev"/>
		<updated>2024-06-18T08:29:56Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;noinclude&amp;gt;{{BilibiliVideo/doc/copyright}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;本Widget不能单独使用&amp;#039;&amp;#039;&amp;#039;，请使用{{tl|BilibiliVideo}}！&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;&amp;lt;!--{if !isset($wgBilibili) || !$wgBilibili}--&amp;gt;&amp;lt;!--{assign var=&amp;quot;wgBilibili&amp;quot; value=true scope=&amp;quot;global&amp;quot;}--&amp;gt;&amp;lt;style&amp;gt;&lt;br /&gt;
.bilibili-video-container {&lt;br /&gt;
    border: 1px solid rgba(170,170,170,0.37);&lt;br /&gt;
    max-width: 100%;&lt;br /&gt;
}&lt;br /&gt;
.bilibili-video-container.exec {&lt;br /&gt;
    display: table;&lt;br /&gt;
}&lt;br /&gt;
.bilibili-iframe-container,&lt;br /&gt;
.bilibili-video-container {&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
.bilibili-video-container,&lt;br /&gt;
.bilibili-video-container .bilibili-widescreen,&lt;br /&gt;
.bilibili-video-container iframe {&lt;br /&gt;
    max-width: 100%;&lt;br /&gt;
    background-color: #fff!important;&lt;br /&gt;
}&lt;br /&gt;
.bilibili-title {&lt;br /&gt;
    padding: .2em 6.5em .2em 1em;&lt;br /&gt;
    position: relative;&lt;br /&gt;
}&lt;br /&gt;
.bilibili-title a {&lt;br /&gt;
    word-break: break-word;&lt;br /&gt;
}&lt;br /&gt;
.bilibili-widescreen {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    display: none;&lt;br /&gt;
    width: 1em;&lt;br /&gt;
    right: calc(-2rem - 1px);&lt;br /&gt;
    border: 1px solid rgba(170,170,170,0.37);&lt;br /&gt;
    padding: .25rem .5rem;&lt;br /&gt;
    line-height: 1.5em;&lt;br /&gt;
    top: -2px;&lt;br /&gt;
    user-select: none;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
}&lt;br /&gt;
.onshow .bilibili-widescreen{&lt;br /&gt;
    display: block;&lt;br /&gt;
}&lt;br /&gt;
.bilibili-toggle {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    top: calc(50% - .5em);&lt;br /&gt;
    right: .7em;&lt;br /&gt;
    line-height: 1em;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
    padding-left: 1em;&lt;br /&gt;
    background-image: url(/skins/Vector/images/search-ltr.png?39f97);&lt;br /&gt;
    background-image: linear-gradient(transparent,transparent),url(data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%2212%22%20height=%2213%22%3E%20%3Cg%20fill=%22none%22%20stroke=%22%2354595d%22%20stroke-width=%222%22%3E%20%3Cpath%20d=%22M11.29%2011.71l-4-4%22/%3E%20%3Ccircle%20cx=%225%22%20cy=%225%22%20r=%224%22/%3E%20%3C/g%3E%20%3C/svg%3E);&lt;br /&gt;
    background-position: left center;&lt;br /&gt;
    background-repeat: no-repeat;&lt;br /&gt;
}&lt;br /&gt;
.bilibili-toggle:hover {&lt;br /&gt;
    color: #36b;&lt;br /&gt;
}&lt;br /&gt;
.bilibili-video-button,&lt;br /&gt;
.bilibili-video-button:visited {&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
    margin: 4px 5px;&lt;br /&gt;
    padding: 10px 25px;&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    color: #fff;&lt;br /&gt;
    background: #de698c;&lt;br /&gt;
    border-radius: 4px;&lt;br /&gt;
}&lt;br /&gt;
.bilibili-iframe-container {&lt;br /&gt;
    padding: 6px;&lt;br /&gt;
    position: relative;&lt;br /&gt;
    border: 0 solid rgba(170,170,170,0.37);&lt;br /&gt;
    border-top-width: 1px;&lt;br /&gt;
}&lt;br /&gt;
.bilibili-video-container:not([data-max-width]) .bilibili-iframe-container {&lt;br /&gt;
    max-width: calc(100% - 12px)!important;&lt;br /&gt;
}&lt;br /&gt;
.bilibili-video-container:not([data-max-width]).onshow .bilibili-iframe-container {&lt;br /&gt;
    max-height: calc(100% - 27px)!important;&lt;br /&gt;
}&lt;br /&gt;
.bilibili-video-container textarea {&lt;br /&gt;
    background: white;&lt;br /&gt;
    color: black;&lt;br /&gt;
    width: 80%;&lt;br /&gt;
    margin: auto;&lt;br /&gt;
}&lt;br /&gt;
.bilibili-iframe-overlay {&lt;br /&gt;
    width: 0;&lt;br /&gt;
    height: 0;&lt;br /&gt;
    padding-top: 30%;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    box-sizing: border-box;&lt;br /&gt;
    background: rgb(167, 215, 249);&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    top: 3px;&lt;br /&gt;
    left: 6px;&lt;br /&gt;
    z-index: 2;&lt;br /&gt;
}&lt;br /&gt;
.bilibili-iframe-retry-link {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    top: 10px;&lt;br /&gt;
    right: 10px;&lt;br /&gt;
    display: none;&lt;br /&gt;
    background: white;&lt;br /&gt;
    padding: 0 0.5em;&lt;br /&gt;
}&lt;br /&gt;
html &amp;gt; body &amp;gt; .navpopup .bilibili-video-container &amp;gt; * {&lt;br /&gt;
    display: none !important;&lt;br /&gt;
}&lt;br /&gt;
html &amp;gt; body &amp;gt; .navpopup .bilibili-video-container::before {&lt;br /&gt;
    content: &amp;quot;请不要在注释里使用 BilibiliVideo 模板&amp;quot;;&lt;br /&gt;
    font-style: italic;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/style&amp;gt;&amp;lt;script&amp;gt;&lt;br /&gt;
&amp;quot;use strict&amp;quot;;&lt;br /&gt;
window.RLQ.push(async () =&amp;gt; {&lt;br /&gt;
    const errMsg = {&lt;br /&gt;
        id: &amp;#039;此处填写的id有误，请参考&amp;lt;a href=&amp;quot;/Template:BilibiliVideo#firstHeading&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;模板文档&amp;lt;/a&amp;gt;修正……&amp;#039;,&lt;br /&gt;
        error: &amp;quot;执行出现问题，请复制以下内容并在提问求助区处粘贴寻求帮助：$$$&amp;quot;,&lt;br /&gt;
        attr: &amp;#039;下方填写的参数 $$$ 有误，请参考&amp;lt;a href=&amp;quot;/Template:BilibiliVideo#firstHeading&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;模板文档&amp;lt;/a&amp;gt;修正……&amp;#039;,&lt;br /&gt;
    };&lt;br /&gt;
    await $.ready;&lt;br /&gt;
    const ifNamespaceAllow = [0, 4, 10, 12].includes(mw.config.get(&amp;quot;wgNamespaceNumber&amp;quot;));&lt;br /&gt;
    const sanNode = $(`&amp;lt;${&amp;quot;span/&amp;quot;}&amp;gt;`);&lt;br /&gt;
    const genErr = (type, msg = &amp;quot;&amp;quot;) =&amp;gt; Reflect.has(errMsg, type) ? `&amp;lt;${&amp;quot;div&amp;quot;} style=&amp;quot;font-style: italic; border: 1px dashed red;&amp;quot;&amp;gt;BilibiliVideo模板：${errMsg[type].replace(&amp;quot;$$$&amp;quot;, sanNode.text(msg).html())}&amp;lt;${&amp;quot;/div&amp;quot;}&amp;gt;` : &amp;quot;&amp;quot;;&lt;br /&gt;
    const injectErrMsgBefore = ($ele, type, msg = &amp;quot;&amp;quot;) =&amp;gt; $ele.before(genErr(type, msg));&lt;br /&gt;
    const getErrorType = (code) =&amp;gt; {&lt;br /&gt;
        switch (code) {&lt;br /&gt;
            case 62003: {&lt;br /&gt;
                return false;&lt;br /&gt;
            }&lt;br /&gt;
            case -403: {&lt;br /&gt;
                return &amp;quot;forbidden&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
            default: {&lt;br /&gt;
                return &amp;quot;failed&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    };&lt;br /&gt;
    /**&lt;br /&gt;
   * @param { string } id&lt;br /&gt;
   */&lt;br /&gt;
    const idCorrector = (id) =&amp;gt; {&lt;br /&gt;
        let type = false;&lt;br /&gt;
        // 1. 有明确的 av 前缀且符合 aid 规则&lt;br /&gt;
        if (/^av[1-9]\d*$/i.test(id)) {&lt;br /&gt;
            type = &amp;quot;av&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        // 2. 有明确的 bv 前缀且符合 bvid 规则&lt;br /&gt;
        else if (/^[bB][vV]1[FcwAPNKTMug3GV5Lj7EJnHpWsx4tb8haYeviqBz6rkCy12mUSDQX9RdoZf]{9}$/.test(id)) {&lt;br /&gt;
            type = &amp;quot;bv&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        // 3. 没有明确的前缀，但符合 aid 规则&lt;br /&gt;
        else if (/^[1-9]\d*$/.test(id)) {&lt;br /&gt;
            type = &amp;quot;av&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        // 4. 没有明确的前缀，但符合 bvid 规则且不符合 aid 规则&lt;br /&gt;
        else if (/^1?[FcwAPNKTMug3GV5Lj7EJnHpWsx4tb8haYeviqBz6rkCy12mUSDQX9RdoZf]{9}$/.test(id)) {&lt;br /&gt;
            type = &amp;quot;bv&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        // 5. 无法判断&lt;br /&gt;
&lt;br /&gt;
        if (type === &amp;quot;av&amp;quot;) {&lt;br /&gt;
            return {&lt;br /&gt;
                id: id.replace(/^av/i, &amp;quot;&amp;quot;),&lt;br /&gt;
                prefix: {&lt;br /&gt;
                    href: &amp;quot;av&amp;quot;,&lt;br /&gt;
                    iframe: &amp;quot;aid&amp;quot;,&lt;br /&gt;
                },&lt;br /&gt;
            };&lt;br /&gt;
        }&lt;br /&gt;
        if (type === &amp;quot;bv&amp;quot;) {&lt;br /&gt;
            return {&lt;br /&gt;
                id: id.replace(/^.*([FcwAPNKTMug3GV5Lj7EJnHpWsx4tb8haYeviqBz6rkCy12mUSDQX9RdoZf]{9})$/i, &amp;quot;1$1&amp;quot;),&lt;br /&gt;
                prefix: {&lt;br /&gt;
                    href: &amp;quot;BV&amp;quot;,&lt;br /&gt;
                    iframe: &amp;quot;bvid&amp;quot;,&lt;br /&gt;
                },&lt;br /&gt;
            };&lt;br /&gt;
        }&lt;br /&gt;
        return false;&lt;br /&gt;
    };&lt;br /&gt;
    try {&lt;br /&gt;
        const isNaN = Number.isNaN || window.isNaN;&lt;br /&gt;
        const cssLengthUnitValidator = (length, defaultValue, callback, paramName, $ele) =&amp;gt; {&lt;br /&gt;
            if (typeof length !== &amp;quot;string&amp;quot; || length.length === 0) {&lt;br /&gt;
                callback(false);&lt;br /&gt;
                return defaultValue;&lt;br /&gt;
            }&lt;br /&gt;
            const parsedNumber = parseFloat(length.replace(/[a-z]+/i, &amp;quot;&amp;quot;));&lt;br /&gt;
            if (isNaN(parsedNumber) || parsedNumber &amp;lt;= 0) {&lt;br /&gt;
                callback(false);&lt;br /&gt;
                injectErrMsgBefore($ele, &amp;quot;attr&amp;quot;, paramName);&lt;br /&gt;
                return defaultValue;&lt;br /&gt;
            }&lt;br /&gt;
            if (/^(?:\d+|\d*\.\d+)(?:em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|Q|in|pc|pt|px|%)$/.test(length)) {&lt;br /&gt;
                callback(true);&lt;br /&gt;
                return length;&lt;br /&gt;
            }&lt;br /&gt;
            if (/^(?:\d+|\d*\.\d+)$/.test(length)) {&lt;br /&gt;
                callback(true);&lt;br /&gt;
                return `${length}px`;&lt;br /&gt;
            }&lt;br /&gt;
            callback(false);&lt;br /&gt;
            injectErrMsgBefore($ele, &amp;quot;attr&amp;quot;, paramName);&lt;br /&gt;
            return defaultValue;&lt;br /&gt;
        };&lt;br /&gt;
        const fixedNumber = (number) =&amp;gt; `${+number &amp;lt; 10 ? &amp;quot;0&amp;quot; : &amp;quot;&amp;quot;}${number}`;&lt;br /&gt;
        const secondsParser = (seconds) =&amp;gt; `${Math.floor(+seconds / 60)}:${fixedNumber(+seconds % 60)}`;&lt;br /&gt;
        const submit = (ids) =&amp;gt; {&lt;br /&gt;
            if (!ifNamespaceAllow) {&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            if (--ids.pending &amp;gt; 0) {&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            let changed = false;&lt;br /&gt;
            if (ids.failed.aid.size + ids.failed.bvid.size &amp;gt; 0 &amp;amp;&amp;amp; !mw.config.get(&amp;quot;wgCategories&amp;quot;).includes(&amp;quot;带有失效视频的条目&amp;quot;)) {&lt;br /&gt;
                changed = true;&lt;br /&gt;
            }&lt;br /&gt;
            if (ids.forbidden.aid.size + ids.forbidden.bvid.size &amp;gt; 0 &amp;amp;&amp;amp; !mw.config.get(&amp;quot;wgCategories&amp;quot;).includes(&amp;quot;带有受限视频的条目&amp;quot;)) {&lt;br /&gt;
                changed = true;&lt;br /&gt;
            }&lt;br /&gt;
            if (ids.failed.aid.size + ids.failed.bvid.size === 0 &amp;amp;&amp;amp; mw.config.get(&amp;quot;wgCategories&amp;quot;).includes(&amp;quot;带有失效视频的条目&amp;quot;)) {&lt;br /&gt;
                changed = true;&lt;br /&gt;
            }&lt;br /&gt;
            if (ids.forbidden.aid.size + ids.forbidden.bvid.size === 0 &amp;amp;&amp;amp; mw.config.get(&amp;quot;wgCategories&amp;quot;).includes(&amp;quot;带有受限视频的条目&amp;quot;)) {&lt;br /&gt;
                changed = true;&lt;br /&gt;
            }&lt;br /&gt;
            if (changed) {&lt;br /&gt;
                const url = new URL(&amp;quot;https://moegirlpedia.annangela.cn/bilibiliCollector/videoCheck&amp;quot;);&lt;br /&gt;
                url.searchParams.set(&amp;quot;pageid&amp;quot;, mw.config.get(&amp;quot;wgArticleId&amp;quot;));&lt;br /&gt;
                $.get(`${url}`);&lt;br /&gt;
            }&lt;br /&gt;
        };&lt;br /&gt;
        const global_element = $(&amp;quot;#mw-content-text&amp;quot;);&lt;br /&gt;
        const placeholderToggle = (iframe) =&amp;gt; {&lt;br /&gt;
            if (iframe.data(&amp;quot;displayFlag&amp;quot;)) {&lt;br /&gt;
                iframe.data(&amp;quot;displayFlag&amp;quot;, false);&lt;br /&gt;
                iframe.data(&amp;quot;placeholder&amp;quot;).fadeOut(370);&lt;br /&gt;
            }&lt;br /&gt;
        };&lt;br /&gt;
        let lazyLoadObserver;&lt;br /&gt;
        if (Reflect.has(window, &amp;quot;IntersectionObserver&amp;quot;) &amp;amp;&amp;amp;&lt;br /&gt;
            Reflect.has(window, &amp;quot;IntersectionObserverEntry&amp;quot;) &amp;amp;&amp;amp;&lt;br /&gt;
            Reflect.has(window.IntersectionObserverEntry.prototype, &amp;quot;intersectionRatio&amp;quot;) &amp;amp;&amp;amp;&lt;br /&gt;
            Reflect.has(window.IntersectionObserverEntry.prototype, &amp;quot;isIntersecting&amp;quot;)) {&lt;br /&gt;
            lazyLoadObserver = new IntersectionObserver((entries) =&amp;gt; {&lt;br /&gt;
                entries.forEach((entry) =&amp;gt; {&lt;br /&gt;
                    if (entry.isIntersecting) {&lt;br /&gt;
                        entry.target.src = entry.target.dataset.src;&lt;br /&gt;
                        setTimeout(() =&amp;gt; {&lt;br /&gt;
                            placeholderToggle($(entry.target));&lt;br /&gt;
                        }, 13070);&lt;br /&gt;
                        lazyLoadObserver.unobserve(entry.target);&lt;br /&gt;
                    }&lt;br /&gt;
                });&lt;br /&gt;
            });&lt;br /&gt;
        } else {&lt;br /&gt;
            lazyLoadObserver = {&lt;br /&gt;
                observe: (target) =&amp;gt; {&lt;br /&gt;
                    target.src = target.dataset.src;&lt;br /&gt;
                    setTimeout(() =&amp;gt; {&lt;br /&gt;
                        placeholderToggle($(target));&lt;br /&gt;
                    }, 13070);&lt;br /&gt;
                },&lt;br /&gt;
            };&lt;br /&gt;
        }&lt;br /&gt;
        const iframe_href_base = &amp;quot;https://www.bilibili.com/blackboard/newplayer.html?playlist=true&amp;amp;playlist_order=sequential&amp;amp;musth5=1&amp;amp;noEndPanel=1&amp;amp;crossDomain=1&amp;amp;autoplay=0&amp;amp;&amp;quot;;&lt;br /&gt;
        const EPSILON = 2.220446049250313e-16,&lt;br /&gt;
            rememberWH = (ele) =&amp;gt; {&lt;br /&gt;
                ele.data({ width: ele.width(), height: ele.height() });&lt;br /&gt;
            },&lt;br /&gt;
            setTureHeight = (ele) =&amp;gt; {&lt;br /&gt;
                const barHeight = ele.data(&amp;quot;height&amp;quot;) - ele.data(&amp;quot;width&amp;quot;) * 9 / 16; //计算标题和播放器控制栏高度&lt;br /&gt;
                ele.height(ele.width() * 9 / 16 + barHeight);&lt;br /&gt;
            },&lt;br /&gt;
            setWH = (ele) =&amp;gt; {&lt;br /&gt;
                ele.css({ width: &amp;quot;100%&amp;quot;, height: &amp;quot;100%&amp;quot; });&lt;br /&gt;
            },&lt;br /&gt;
            recallWH = (ele) =&amp;gt; {&lt;br /&gt;
                ele.width(ele.data(&amp;quot;width&amp;quot;)).height(ele.data(&amp;quot;height&amp;quot;));&lt;br /&gt;
            },&lt;br /&gt;
            setMaxHeight = (container, target) =&amp;gt; {&lt;br /&gt;
                const h = container.outerHeight(true);&lt;br /&gt;
                let t = 0;&lt;br /&gt;
                container.children().each((_, ele) =&amp;gt; {&lt;br /&gt;
                    t += $(ele).outerHeight(true);&lt;br /&gt;
                });&lt;br /&gt;
                target.css(&amp;quot;max-height&amp;quot;, `calc(100% - ${parseInt(t - h + 2 - (Number.EPSILON || EPSILON))}px)`);&lt;br /&gt;
            };&lt;br /&gt;
        const run = () =&amp;gt; {&lt;br /&gt;
            const ids = {&lt;br /&gt;
                failed: {&lt;br /&gt;
                    aid: new Set(),&lt;br /&gt;
                    bvid: new Set(),&lt;br /&gt;
                },&lt;br /&gt;
                forbidden: {&lt;br /&gt;
                    aid: new Set(),&lt;br /&gt;
                    bvid: new Set(),&lt;br /&gt;
                },&lt;br /&gt;
                pending: 0,&lt;br /&gt;
            };&lt;br /&gt;
            const targets = $(&amp;quot;.bilibili-video-container:not(.exec)&amp;quot;);&lt;br /&gt;
            ids.pending = targets.length;&lt;br /&gt;
            targets.addClass(&amp;quot;exec&amp;quot;).each((_, ele) =&amp;gt; {&lt;br /&gt;
                const { dataset } = ele;&lt;br /&gt;
                const _id = dataset.id;&lt;br /&gt;
                const selfbox = $(ele);&lt;br /&gt;
                const toggleButton = selfbox.find(&amp;quot;.bilibili-toggle&amp;quot;);&lt;br /&gt;
                const widescreenButton = selfbox.find(&amp;quot;.bilibili-widescreen&amp;quot;);&lt;br /&gt;
                const validation = idCorrector(_id);&lt;br /&gt;
                if (!validation) {&lt;br /&gt;
                    ele.outerHTML = genErr(&amp;quot;id&amp;quot;);&lt;br /&gt;
                    return;&lt;br /&gt;
                }&lt;br /&gt;
                const { id, prefix } = validation;&lt;br /&gt;
                let page = parseInt(+(dataset.page || 1));&lt;br /&gt;
                if (isNaN(page) || page &amp;lt; 1) {&lt;br /&gt;
                    page = 1;&lt;br /&gt;
                    if (typeof dataset.page === &amp;quot;string&amp;quot; &amp;amp;&amp;amp; dataset.page !== &amp;quot;&amp;quot;) {&lt;br /&gt;
                        injectErrMsgBefore(selfbox, &amp;quot;attr&amp;quot;, &amp;quot;page&amp;quot;);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                const { pagename, title } = dataset;&lt;br /&gt;
                const height = cssLengthUnitValidator(dataset.height, &amp;quot;441px&amp;quot;, (isValidated) =&amp;gt; isValidated || selfbox.removeAttr(&amp;quot;data-height&amp;quot;), &amp;quot;height&amp;quot;, selfbox);&lt;br /&gt;
                const width = cssLengthUnitValidator(dataset.width, &amp;quot;665px&amp;quot;, (isValidated) =&amp;gt; isValidated || selfbox.removeAttr(&amp;quot;data-width&amp;quot;), &amp;quot;width&amp;quot;, selfbox);&lt;br /&gt;
                const maxHeight = cssLengthUnitValidator(dataset.maxHeight, &amp;quot;100vh&amp;quot;, (isValidated) =&amp;gt; isValidated || selfbox.removeAttr(&amp;quot;data-max-height&amp;quot;), &amp;quot;maxHeight&amp;quot;, selfbox);&lt;br /&gt;
                const maxWidth = cssLengthUnitValidator(dataset.maxWidth, &amp;quot;100%&amp;quot;, (isValidated) =&amp;gt; isValidated || selfbox.removeAttr(&amp;quot;data-max-width&amp;quot;), &amp;quot;maxWidth&amp;quot;, selfbox);&lt;br /&gt;
                const subtitle = !!(dataset.subtitle === &amp;quot;true&amp;quot;);&lt;br /&gt;
                const t = parseInt(dataset.t);&lt;br /&gt;
                const tIsInvalid = isNaN(t) || t &amp;lt;= 0;&lt;br /&gt;
                const iframeContainer = selfbox.find(&amp;quot;.bilibili-iframe-container&amp;quot;);&lt;br /&gt;
                const title_text = $(&amp;quot;&amp;lt;a/&amp;gt;&amp;quot;).attr(&amp;quot;rel&amp;quot;, &amp;quot;nofollow noreferrer noopener&amp;quot;).addClass(&amp;quot;external text&amp;quot;).attr({&lt;br /&gt;
                    href: `https://www.bilibili.com/video/${prefix.href}${id}?p=${page}${tIsInvalid ? &amp;quot;&amp;quot; : `&amp;amp;t=${t}`}`,&lt;br /&gt;
                    target: &amp;quot;_blank&amp;quot;,&lt;br /&gt;
                }).prependTo(selfbox.find(&amp;quot;.bilibili-title&amp;quot;));&lt;br /&gt;
                const iframe = $(&amp;quot;&amp;lt;iframe/&amp;gt;&amp;quot;).attr({&lt;br /&gt;
                    allow: &amp;quot;fullscreen&amp;quot;,&lt;br /&gt;
                    allowfullscreen: true,&lt;br /&gt;
                    frameborder: 0,&lt;br /&gt;
                    scrolling: &amp;quot;no&amp;quot;,&lt;br /&gt;
                    src: &amp;quot;&amp;quot;,&lt;br /&gt;
                    &amp;quot;class&amp;quot;: &amp;quot;bilibili-iframe&amp;quot;,&lt;br /&gt;
                }).css({&lt;br /&gt;
                    width: width,&lt;br /&gt;
                    height: height,&lt;br /&gt;
                    &amp;quot;max-width&amp;quot;: maxWidth,&lt;br /&gt;
                    &amp;quot;max-height&amp;quot;: maxHeight,&lt;br /&gt;
                });&lt;br /&gt;
                if (!tIsInvalid) {&lt;br /&gt;
                    selfbox.removeAttr(&amp;quot;data-auto-expand&amp;quot;);&lt;br /&gt;
                } else if (typeof dataset.t === &amp;quot;string&amp;quot; &amp;amp;&amp;amp; dataset.t !== &amp;quot;&amp;quot;) {&lt;br /&gt;
                    injectErrMsgBefore(selfbox, &amp;quot;attr&amp;quot;, &amp;quot;t&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                const time = secondsParser(t);&lt;br /&gt;
                title_text.text(`${(title || prefix.href + id) + ([0, 1].includes(page) ? &amp;quot;&amp;quot; : ` (P${page})`) + (tIsInvalid ? &amp;quot;&amp;quot; : `[视频从${time}开始播放]`)}【视频信息加载中……】`);&lt;br /&gt;
                iframeContainer.css({&lt;br /&gt;
                    width: width,&lt;br /&gt;
                    height: height,&lt;br /&gt;
                    &amp;quot;max-width&amp;quot;: maxWidth,&lt;br /&gt;
                    &amp;quot;max-height&amp;quot;: maxHeight,&lt;br /&gt;
                });&lt;br /&gt;
                iframe.appendTo(iframeContainer);&lt;br /&gt;
                const div = $(&amp;quot;&amp;lt;div/&amp;gt;&amp;quot;);&lt;br /&gt;
                div.css({&lt;br /&gt;
                    position: &amp;quot;absolute&amp;quot;,&lt;br /&gt;
                    top: &amp;quot;0&amp;quot;,&lt;br /&gt;
                    left: &amp;quot;0&amp;quot;,&lt;br /&gt;
                    bottom: &amp;quot;0&amp;quot;,&lt;br /&gt;
                    right: &amp;quot;0&amp;quot;,&lt;br /&gt;
                    &amp;quot;z-index&amp;quot;: &amp;quot;99&amp;quot;,&lt;br /&gt;
                    display: &amp;quot;flex&amp;quot;,&lt;br /&gt;
                    &amp;quot;align-items&amp;quot;: &amp;quot;center&amp;quot;,&lt;br /&gt;
                    background: &amp;quot;rgba(255, 255, 255, .37)&amp;quot;,&lt;br /&gt;
                });&lt;br /&gt;
                const text = $(&amp;quot;&amp;lt;div/&amp;gt;&amp;quot;);&lt;br /&gt;
                text.css({&lt;br /&gt;
                    &amp;quot;text-align&amp;quot;: &amp;quot;center&amp;quot;,&lt;br /&gt;
                    width: &amp;quot;100%&amp;quot;,&lt;br /&gt;
                }).text(&amp;quot;正在加载中，若长时间空白则说明是网络问题……&amp;quot;);&lt;br /&gt;
                div.append(text).appendTo(iframeContainer);&lt;br /&gt;
                iframe.data({&lt;br /&gt;
                    placeholder: div,&lt;br /&gt;
                    displayFlag: true,&lt;br /&gt;
                });&lt;br /&gt;
                iframe[0].addEventListener(&amp;quot;load&amp;quot;, () =&amp;gt; {&lt;br /&gt;
                    placeholderToggle(iframe);&lt;br /&gt;
                });&lt;br /&gt;
                $.ajax({&lt;br /&gt;
                    url: `https://api.bilibili.com/x/web-interface/view?${prefix.iframe}=${id}&amp;amp;jsonp=jsonp`,&lt;br /&gt;
                    type: &amp;quot;GET&amp;quot;,&lt;br /&gt;
                    dataType: &amp;quot;jsonp&amp;quot;,&lt;br /&gt;
                    timeout: 10000,&lt;br /&gt;
                    success: ({ code, message, data }) =&amp;gt; {&lt;br /&gt;
                        if (code !== 0) {&lt;br /&gt;
                            title_text.text((title || prefix.href + id) + ([0, 1].includes(page) ? &amp;quot;&amp;quot; : ` (P${page})`) + (tIsInvalid ? &amp;quot;&amp;quot; : `[视频从${time}开始播放]`));&lt;br /&gt;
                            iframe.attr(&amp;quot;data-src&amp;quot;, `${iframe_href_base + prefix.iframe}=${id}&amp;amp;page=${page}${tIsInvalid ? &amp;quot;&amp;quot; : `&amp;amp;t=${t}`}`);&lt;br /&gt;
                            lazyLoadObserver.observe(iframe[0]);&lt;br /&gt;
                            console.info(&amp;quot;Widget:BilibiliVideo&amp;quot;, `${prefix.href}${id}`, code, message);&lt;br /&gt;
                            const errorType = getErrorType(code);&lt;br /&gt;
                            if (errorType) {&lt;br /&gt;
                                ids[errorType][prefix.iframe].add(id);&lt;br /&gt;
                            }&lt;br /&gt;
                            return;&lt;br /&gt;
                        }&lt;br /&gt;
                        const list = data.pages;&lt;br /&gt;
                        let _page = 1;&lt;br /&gt;
                        const name = title || (data.title || prefix.href + id);&lt;br /&gt;
                        let index;&lt;br /&gt;
                        let length;&lt;br /&gt;
                        if (pagename) {&lt;br /&gt;
                            for (index = 0, length = list.length; index &amp;lt; length; index++) {&lt;br /&gt;
                                if (list[index].part !== pagename) { continue; }&lt;br /&gt;
                                _page = list[index].page;&lt;br /&gt;
                                break;&lt;br /&gt;
                            }&lt;br /&gt;
                        } else { _page = page; }&lt;br /&gt;
                        index = _page - 1;&lt;br /&gt;
                        const href = title_text.attr(&amp;quot;href&amp;quot;);&lt;br /&gt;
                        if (list[index] !== undefined &amp;amp;&amp;amp; list[index].cid !== undefined) {&lt;br /&gt;
                            iframe.attr(&amp;quot;data-src&amp;quot;, `${iframe_href_base}${prefix.iframe}=${id}&amp;amp;cid=${list[index].cid}&amp;amp;page=${_page}${tIsInvalid ? &amp;quot;&amp;quot; : `&amp;amp;t=${t}`}`);&lt;br /&gt;
                            title_text.attr(&amp;quot;href&amp;quot;, href.replace(new RegExp(`\\?p=${page}`, &amp;quot;g&amp;quot;), `?p=${_page}`));&lt;br /&gt;
                            title_text.text(`${name} [${_page}/${list.length}]${tIsInvalid ? &amp;quot;&amp;quot; : `[视频从${time}开始播放]`}`);&lt;br /&gt;
                            if (subtitle) { title_text.append(`&amp;lt;br&amp;gt;（${_page}、${list[index].part}）`); }&lt;br /&gt;
                        } else {&lt;br /&gt;
                            title_text.text(name + (tIsInvalid ? &amp;quot;&amp;quot; : `[视频从${time}开始播放]`));&lt;br /&gt;
                            iframe.attr(&amp;quot;data-src&amp;quot;, `${iframe_href_base + prefix.iframe}=${id}&amp;amp;page=${_page}${tIsInvalid ? &amp;quot;&amp;quot; : `&amp;amp;t=${t}`}`);&lt;br /&gt;
                        }&lt;br /&gt;
                        lazyLoadObserver.observe(iframe[0]);&lt;br /&gt;
                    },&lt;br /&gt;
                    error: () =&amp;gt; {&lt;br /&gt;
                        title_text.text((title || prefix.href + id) + ([0, 1].includes(page) ? &amp;quot;&amp;quot; : ` (P${page})`) + (tIsInvalid ? &amp;quot;&amp;quot; : `[视频从${time}开始播放]`));&lt;br /&gt;
                        iframe.attr(&amp;quot;data-src&amp;quot;, `${iframe_href_base + prefix.iframe}=${id}&amp;amp;page=${page}${tIsInvalid ? &amp;quot;&amp;quot; : `&amp;amp;t=${t}`}`);&lt;br /&gt;
                        lazyLoadObserver.observe(iframe[0]);&lt;br /&gt;
                    },&lt;br /&gt;
                    complete: () =&amp;gt; {&lt;br /&gt;
                        if (selfbox.is(&amp;#039;[data-auto-expand=&amp;quot;true&amp;quot;]&amp;#039;)) {&lt;br /&gt;
                            selfbox.addClass(&amp;quot;onshow&amp;quot;);&lt;br /&gt;
                            iframeContainer.show();&lt;br /&gt;
                            toggleButton.text(&amp;quot;隐藏视频&amp;quot;);&lt;br /&gt;
                            selfbox.removeAttr(&amp;quot;style&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                        submit(ids);&lt;br /&gt;
                    },&lt;br /&gt;
                });&lt;br /&gt;
                //toggle&lt;br /&gt;
                toggleButton.on(&amp;quot;click&amp;quot;, () =&amp;gt; {&lt;br /&gt;
                    selfbox.width(iframeContainer.outerWidth(true));&lt;br /&gt;
                    selfbox.toggleClass(&amp;quot;onshow&amp;quot;);&lt;br /&gt;
                    iframeContainer.toggle();&lt;br /&gt;
                    if (toggleButton.text() === &amp;quot;显示视频&amp;quot;) {&lt;br /&gt;
                        toggleButton.text(&amp;quot;隐藏视频&amp;quot;);&lt;br /&gt;
                        $(window).resize();&lt;br /&gt;
                    } else {&lt;br /&gt;
                        toggleButton.text(&amp;quot;显示视频&amp;quot;);&lt;br /&gt;
                        selfbox.removeAttr(&amp;quot;style&amp;quot;);&lt;br /&gt;
                    }&lt;br /&gt;
                });&lt;br /&gt;
                widescreenButton.on(&amp;quot;click&amp;quot;, () =&amp;gt; {&lt;br /&gt;
                    if (selfbox.is(&amp;quot;:not(.onshow)&amp;quot;)) { return; }&lt;br /&gt;
                    if (selfbox.is(&amp;quot;.widescreen&amp;quot;)) {&lt;br /&gt;
                        selfbox.removeClass(&amp;quot;widescreen&amp;quot;);&lt;br /&gt;
                        widescreenButton.text(&amp;quot;显示宽屏&amp;quot;);&lt;br /&gt;
                        recallWH(iframeContainer);&lt;br /&gt;
                        recallWH(iframe);&lt;br /&gt;
                        recallWH(selfbox);&lt;br /&gt;
                    } else {&lt;br /&gt;
                        selfbox.addClass(&amp;quot;widescreen&amp;quot;);&lt;br /&gt;
                        widescreenButton.text(&amp;quot;退出宽屏&amp;quot;);&lt;br /&gt;
                        rememberWH(selfbox);&lt;br /&gt;
                        selfbox.css(&amp;quot;width&amp;quot;, selfbox.parent().width() &amp;gt; Math.min(911, global_element.width()) ? &amp;quot;73%&amp;quot; : &amp;quot;100%&amp;quot;); //可以看见按钮的最小宽度 665 的 1/0.73 倍&lt;br /&gt;
                        setTureHeight(selfbox);&lt;br /&gt;
                        rememberWH(iframe);&lt;br /&gt;
                        rememberWH(iframeContainer);&lt;br /&gt;
                        setWH(iframe);&lt;br /&gt;
                        setWH(iframeContainer);&lt;br /&gt;
                        iframeContainer.height(selfbox.height() - title_text.parent().height());&lt;br /&gt;
                        setMaxHeight(selfbox, iframeContainer);&lt;br /&gt;
                    }&lt;br /&gt;
                });&lt;br /&gt;
            });&lt;br /&gt;
        };&lt;br /&gt;
        $(run);&lt;br /&gt;
        mw.hook(&amp;quot;wikipage.content&amp;quot;).add(run);&lt;br /&gt;
        $(window).on(&amp;quot;load&amp;quot;, run);&lt;br /&gt;
        $(window).on(&amp;quot;resize&amp;quot;, () =&amp;gt; {&lt;br /&gt;
            $(&amp;quot;.bilibili-video-container.onshow.widescreen&amp;quot;).each((_, ele) =&amp;gt; {&lt;br /&gt;
                const selfbox = $(ele);&lt;br /&gt;
                selfbox.css(&amp;quot;width&amp;quot;, selfbox.parent().width() &amp;gt; Math.min(911, global_element.width()) ? &amp;quot;73%&amp;quot; : &amp;quot;100%&amp;quot;);&lt;br /&gt;
                setTureHeight(selfbox);&lt;br /&gt;
                setMaxHeight(selfbox, selfbox.find(&amp;quot;.bilibili-iframe-container&amp;quot;));&lt;br /&gt;
            });&lt;br /&gt;
        });&lt;br /&gt;
    } catch (e) {&lt;br /&gt;
        /* eslint-disable */&lt;br /&gt;
        var msg = genErr(&amp;quot;error&amp;quot;, navigator.userAgent + &amp;quot; : &amp;quot; + e + &amp;quot; &amp;quot; + e.stack.split(&amp;quot;\n&amp;quot;)[1].trim());&lt;br /&gt;
        $(&amp;quot;.bilibili-video-container&amp;quot;).each(function (_, ele) {&lt;br /&gt;
            ele.outerHTML = msg;&lt;br /&gt;
        });&lt;br /&gt;
        /* eslint-enable */&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;!--{/if}--&amp;gt;&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>xmlimport&gt;AnnAngela</name></author>
	</entry>
</feed>