Widget:BilibiliVideo:修订间差异
跳到导航
跳到搜索
imported>=海豚= 无编辑摘要 |
imported>=海豚= 无编辑摘要 |
||
| 第314行: | 第314行: | ||
target.css("max-height", `calc(100% - ${parseInt(t - h + 2 - (Number.EPSILON || EPSILON))}px)`); | target.css("max-height", `calc(100% - ${parseInt(t - h + 2 - (Number.EPSILON || EPSILON))}px)`); | ||
}; | }; | ||
$(".bilibili-video-container").addClass("exec").each(function () { | const run = () => { | ||
$(".bilibili-video-container:not(.exec)").addClass("exec").each(function () { | |||
const dataset = this.dataset, | |||
_id = dataset.id, | |||
id = _id.replace(/^[ab]v/i, ""), | |||
selfbox = $(this); | |||
let prefix; | |||
let decode = null; | |||
if (/^(?:av)?\d{1,9}$/i.test(_id)) { | |||
prefix = { | |||
href: "av", | |||
iframe: "aid", | |||
}; | |||
} else if (/^(?:bv)?[\da-z]{10}$/i.test(_id)) { | |||
prefix = { | |||
href: "BV", | |||
iframe: "bvid", | |||
}; | |||
if (!converter._bvidRegExp.test(_id)) { | |||
temp.add(_id); | |||
} else { | |||
decode = converter.bvidToAid(_id); | |||
} | |||
} else { | } else { | ||
if (/^(?:av)?\d{10,}$/i.test(_id)) { | |||
temp.add(_id); | |||
} | |||
return this.outerHTML = "<i>id错误</i>"; | |||
} | } | ||
let page = parseInt(+(dataset.page || 1)); | |||
if (isNaN(page) || page < 1) { page = 1; } | |||
const pagename = dataset.pagename; | |||
const title = dataset.title; | |||
const height = cssLengthUnitValidator(dataset.height, "441px", (isValidated) => isValidated || $(this).removeAttr("data-height")); | |||
const width = cssLengthUnitValidator(dataset.width, "665px", (isValidated) => isValidated || $(this).removeAttr("data-width")); | |||
const maxHeight = cssLengthUnitValidator(dataset.maxHeight, undefined, (isValidated) => isValidated || $(this).removeAttr("data-max-height")); | |||
const maxWidth = cssLengthUnitValidator(dataset.maxWidth, undefined, (isValidated) => isValidated || $(this).removeAttr("data-max-width")); | |||
const subtitle = dataset.subtitle === "true" ? true : false; | |||
const t = parseInt(dataset.t); | |||
const tIsInvalid = isNaN(t) || t <= 0; | |||
const iframeContainer = $(this).find(".bilibili-iframe-container"); | |||
const title_text = $("<a/>").attr("rel", "nofollow noreferrer noopener").addClass("external text").attr({ | |||
href: `https://www.bilibili.com/video/${prefix.href}${id}?p=${page}${tIsInvalid ? "" : `&t=${t}`}`, | |||
target: "_blank", | |||
}).prependTo($(this).find(".bilibili-title")); | |||
const iframe = $("<iframe/>").attr({ | |||
frameborder: 0, | |||
scrolling: "no", | |||
src: "", | |||
allowfullscreen: true, | |||
"class": "bilibili-iframe", | |||
}).css({ | |||
width: width, | |||
height: height, | |||
"max-width": maxWidth, | |||
"max-height": maxHeight, | |||
}); | |||
if (!tIsInvalid) { selfbox.removeAttr("data-auto-expand"); } | |||
let sec = `${t % 60}`; | |||
if (sec.length === 1) { sec = `0${sec}`; } | |||
const time = `${Math.floor(t / 60)}:${sec}`; | |||
title_text.text(`${(title || prefix.href + id) + ([0, 1].indexOf(page) === -1 ? ` (${page})` : "") + (tIsInvalid ? "" : `[视频从${time}开始播放]`)}【视频信息加载中……】`); | |||
iframeContainer.css({ | |||
width: width, | |||
height: height, | |||
"max-width": maxWidth, | |||
"max-height": maxHeight, | |||
}); | |||
iframe.appendTo(iframeContainer); | |||
window.setTimeout(() => { //异步出去不要卡主线程 | |||
$.ajax({ | |||
url: `https://mgwbcprd.azureedge.net/BilibiliMeta/Index/${encodeURIComponent(typeof decode === "string" ? decode : prefix.href + id)}`, | |||
type: "GET", | |||
timeout: 10000, | |||
success: function (data) { | |||
const list = data.VideoEntities | |||
.map((e, i) => { | |||
e.page = i + 1; | |||
e.title = e.Title.replace(/^\d+、/, ""); | |||
return e; | |||
}); | |||
let _page = 1; | |||
const name = title || (data.Title ? data.Title : prefix.href + id); | |||
let index; | |||
let length; | |||
if (pagename) { | |||
for (index = 0, length = list.length; index < length; index++) { | |||
if (list[index].Title !== pagename && list[index].title !== pagename) { continue; } | |||
_page = list[index].page; | |||
break; | |||
} | |||
} else { _page = page; } | |||
index = _page - 1; | |||
const href = title_text.attr("href"); | |||
_page = list[index].page; | if (list[index] !== undefined && list[index].VideoCid !== undefined) { | ||
iframe.attr("data-src", `${iframe_href_base + prefix.iframe}=${id}&page=${_page}${tIsInvalid ? "" : `&t=${t}`}`); | |||
title_text.attr("href", href.replace(new RegExp(`\\?p=${page}`, "g"), `?p=${_page}`)); | |||
title_text.text(`${name} [${_page}/${list.length}]${tIsInvalid ? "" : `[视频从${time}开始播放]`}`); | |||
if (subtitle) { title_text.append(`<br>(${_page}、${list[index].Title})`); } | |||
} else { | |||
title_text.text(name + (tIsInvalid ? "" : `[视频从${time}开始播放]`)); | |||
iframe.attr("data-src", `${iframe_href_base + prefix.iframe}=${id}&page=${_page}${tIsInvalid ? "" : `&t=${t}`}`); | |||
} | } | ||
lazyLoadObserver.observe(iframe[0]); | |||
}, | |||
error: function (e) { | |||
title_text.text((title || prefix.href + id) + ([0, 1].indexOf(page) === -1 ? ` (${page})` : "") + (tIsInvalid ? "" : `[视频从${time}开始播放]`)); | |||
if (e && e.responseJSON && e.responseJSON.message && e.responseJSON.message === "Authentication is required for accessing this video.") { title_text.parent().append('<sup title="“Bilibili采用会员制,大部分投稿视频会员与游客都可以观看,\n 但部分视频在UP主设定下只有会员才可以观看(这些视频常被称为‘只有会员才知道的世界’)。”\n - Bilibili#用户制度 @ ZhMoegirl\n在这种情况下我们无法为您解析视频及其分P标题、分P数量等。">(只有会员才知道的世界)</sup>'); } | |||
iframe.attr("data-src", `${iframe_href_base + prefix.iframe}=${id}&page=${page}${tIsInvalid ? "" : `&t=${t}`}`); | |||
lazyLoadObserver.observe(iframe[0]); | |||
}, | |||
}); | |||
}, 137); | |||
//toggle | |||
selfbox.find(".bilibili-toggle").on("click", function () { | |||
selfbox.width(iframeContainer.outerWidth(true)); | |||
selfbox.toggleClass("onshow"); | |||
iframeContainer.toggle(); | |||
if ($(this).text() === "显示视频") { | |||
$(this).text("隐藏视频"); | |||
$(window).resize(); | |||
} else { | |||
}, | $(this).text("显示视频"); | ||
selfbox.removeAttr("style"); | |||
} | |||
}); | |||
selfbox.find(".bilibili-widescreen").on("click", function () { | |||
if (selfbox.is(":not(.onshow)")) { return; } | |||
if (selfbox.is(".widescreen")) { | |||
selfbox.removeClass("widescreen"); | |||
$(this).text("显示宽屏"); | |||
recallWH(iframeContainer); | |||
recallWH(iframe); | |||
recallWH(selfbox); | |||
} else { | |||
selfbox.addClass("widescreen"); | |||
$(this).text("退出宽屏"); | |||
rememberWH(selfbox); | |||
selfbox.css("width", selfbox.parent().width() > Math.min(911, global_element.width()) ? "73%" : "100%"); //可以看见按钮的最小宽度 665 的 1/0.73 倍 | |||
setTureHeight(selfbox); | |||
rememberWH(iframe); | |||
rememberWH(iframeContainer); | |||
setWH(iframe); | |||
setWH(iframeContainer); | |||
iframeContainer.height(selfbox.height() - title_text.parent().height()); | |||
setMaxHeight(selfbox, iframeContainer); | |||
} | |||
}); | }); | ||
}); | }); | ||
}); | }; | ||
run(); | |||
mw.hook("wikipage.content").fire(run); | |||
$(window).on("load", run); | |||
$(window).on("resize", () => { | $(window).on("resize", () => { | ||
$(".bilibili-video-container.onshow.widescreen").each(function () { | $(".bilibili-video-container.onshow.widescreen").each(function () { | ||
| 第476行: | 第481行: | ||
setTimeout(async () => { | setTimeout(async () => { | ||
if (temp.size > 0 && mw.config.get("wgUserGroups").includes("autoconfirmed")) { | if (temp.size > 0 && mw.config.get("wgUserGroups").includes("autoconfirmed")) { | ||
const raw = await $.get(`https://zh.moegirl.org/ | const raw = await $.get(`https://zh.moegirl.org/Template:BilibiliVideo/bvid?action=raw&ctype=application/json&_=${Math.random()}`); | ||
let flags = false; | let flags = false; | ||
for (const i of temp) { | for (const i of temp) { | ||
| 第487行: | 第492行: | ||
new mw.Api().postWithToken("csrf", { | new mw.Api().postWithToken("csrf", { | ||
action: "edit", | action: "edit", | ||
title: " | title: "Template:BilibiliVideo/bvid", | ||
text: JSON.stringify(raw), | text: JSON.stringify(raw), | ||
summary: `[[Widget:BilibiliVideo|BilibiliVideo]]:bvid不符合格式 - ${Array.from(temp.values()).filter(bvid => !raw.includes(bvid)).join(", ")}`, | summary: `[[Widget:BilibiliVideo|BilibiliVideo]]:bvid不符合格式 - ${Array.from(temp.values()).filter(bvid => !raw.includes(bvid)).join(", ")}`, | ||
2020年6月29日 (一) 17:04的版本
| 名称: | Bilibili视频插件 |
| 作者: | 加大号的猫 |
| 修订: | Boxsnake |
| 重修订: | AnnAngela |
| H5版再修订: | |
| 新H5版又修订: | |
| 移动版支持: | XYZ指示物 |
| 版权协定: | MIT |
| 发布日期: | 2012年6月29日第一版发布; |
| 发布地址: | https://zh.moegirl.org.cn/Widget:BilibiliVideo && https://zh.moegirl.org.cn/Template:BilibiliVideo |
| 注意事项: | 如有问题,请联系作者。 |
本Widget不能单独使用,请使用{{BilibiliVideo}}!