mirror of
https://github.com/the1812/Bilibili-Evolved.git
synced 2025-09-26 22:49:14 +08:00
1 line
4.3 KiB
JavaScript
1 line
4.3 KiB
JavaScript
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports["utils/active-video-links"]=t():e["utils/active-video-links"]=t()}(globalThis,(()=>(()=>{var e,t,o={642:e=>{function t(e){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}t.keys=()=>[],t.resolve=t,t.id=642,e.exports=t},401:e=>{"use strict";e.exports="这个组件会将视频简介中的普通网址转换为可点击的链接,并将<del>被 Bilibili 抛弃</del>已失效的 `acg.tv` 跳转链接修复为 `nicovideo.jp` 链接。\n\n例如: `https://acg.tv/sm37507315` → `https://www.nicovideo.jp/watch/sm37507315`\n\n<i>本组件不会保证目标链接的安全性,因此在点击前请自行验证其是否可信</i>\n"}},n={};function r(e){var t=n[e];if(void 0!==t)return t.exports;var c=n[e]={exports:{}};return o[e](c,c.exports,r),c.exports}t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(o,n){if(1&n&&(o=this(o)),8&n)return o;if("object"==typeof o&&o){if(4&n&&o.__esModule)return o;if(16&n&&"function"==typeof o.then)return o}var c=Object.create(null);r.r(c);var i={};e=e||[null,t({}),t([]),t(t)];for(var l=2&n&&o;"object"==typeof l&&!~e.indexOf(l);l=t(l))Object.getOwnPropertyNames(l).forEach((e=>i[e]=()=>o[e]));return i.default=()=>o,r.d(c,i),c},r.d=(e,t)=>{for(var o in t)r.o(t,o)&&!r.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var c={};return(()=>{"use strict";r.d(c,{component:()=>a});const e=coreApis.componentApis.define,t=coreApis.utils.log,o=coreApis.utils.urls,n=(0,t.useScopedConsole)("activeVideoLinks");let i=null;const l=/(?<!(\>|'|"|\/))(http:\/\/|https:\/\/|www\.)[^(\s,;())]+/g,s=()=>{try{document.querySelectorAll('a[href*="acg.tv"][href*="sm"]').forEach((e=>{const t=e.getAttribute("href");if(t){const o=t.replace("acg.tv","nicovideo.jp/watch");e.setAttribute("href",o),n.log(`Niconico Fix: ${t} → ${o}`)}})),(()=>{const e=document.querySelector(".desc-info-text");if(!e)return;const t=document.createTreeWalker(e,NodeFilter.SHOW_TEXT,{acceptNode:e=>e.parentElement?.closest("a")?NodeFilter.FILTER_REJECT:l.test(e.textContent||"")?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_REJECT}),o=[];let n=t.nextNode();for(;null!==n;)o.push(n),n=t.nextNode();o.forEach((e=>{const t=document.createDocumentFragment(),o=e.textContent||"";let n,r=0;for(l.lastIndex=0,n=l.exec(o);null!==n;){const e=n.index;r<e&&t.appendChild(document.createTextNode(o.slice(r,e)));const c=n[0],i=c.replace(/^https?:\/\//,"//").replace(/^www\./,"//"),s=document.createElement("a");s.href=i,s.target="_blank",s.textContent=c,t.appendChild(s),r=e+c.length,n=l.exec(o)}r<o.length&&t.appendChild(document.createTextNode(o.slice(r))),e.parentNode?.replaceChild(t,e)}))})(),(()=>{const e=document.querySelector(".desc-info-text");if(!e)return;const t=Array.from(e.querySelectorAll("a"));for(let e=0;e<t.length-1;e++){const o=t[e],r=t[e+1],c=o.getAttribute("href")||"",i=r.textContent?.trim()||"",l=r.getAttribute("href")||"";if(/^(https?:)?\/\/(www\.)?nicovideo\.jp\/watch\/?$/.test(c)&&/^sm\d+$/.test(i)&&l.includes(`/watch/${i}`)){const t=l.replace(/^(https?:)?/,"//"),c=document.createElement("a");c.href=t,c.target="_blank",c.textContent=i,o.replaceWith(c),r.remove(),n.log(`Merged Nico link: ${i}`),e++}}})()}catch(e){n.error("处理链接时遇到 Error:",e)}},d=()=>{n.log("视频链接增强已启用"),s(),i&&i.disconnect(),i=new MutationObserver(s),i.observe(document.documentElement,{childList:!0,subtree:!0}),n.log("已设置 Observer")},a=(0,e.defineComponentMetadata)({name:"activeVideoLinks",displayName:"视频链接增强",tags:[componentsTags.utils],entry:d,reload:d,unload:()=>{i&&(i.disconnect(),i=null)},urlInclude:o.videoUrls,author:{name:"Alan Ye",link:"https://github.com/at-wr"},commitHash:"f8d9b5665fc198fe5b2eb39c57dab6d686e5ed74",coreVersion:"2.10.4",description:(()=>{const e=r(642);return{...Object.fromEntries(e.keys().map((t=>[t.match(/index\.(.+)\.md$/)[1],e(t)]))),"zh-CN":()=>Promise.resolve().then(r.t.bind(r,401,17)).then((e=>e.default))}})()})})(),c=c.component})())); |