Bilibili-Evolved/min/notify-new-version.min.js
2021-12-13 22:52:56 +08:00

1 line
3.2 KiB
JavaScript

(()=>(e,t)=>{const n={less:-1,equal:0,greater:1,incomparable:NaN};class s{constructor(e){if(!/^[\d\.]+$/.test(e)){throw new Error("Invalid version string")}this.parts=e.split(".").map((e=>parseInt(e)));this.versionString=e}compareTo(e){for(let t=0;t<this.parts.length;++t){if(e.parts.length===t){return n.greater}if(this.parts[t]===e.parts[t]){continue}if(this.parts[t]>e.parts[t]){return n.greater}return n.less}if(this.parts.length!==e.parts.length){return n.less}return n.equal}greaterThan(e){return this.compareTo(e)===n.greater}lessThan(e){return this.compareTo(e)===n.less}equals(e){return this.compareTo(e)===n.equal}}let i;async function r(){if(typeof offlineData!=="undefined"||isIframe()){return false}if(e.lastNewVersionCheck!==undefined){const t=Number(new Date);const n=t-e.lastNewVersionCheck;if(n<e.newVersionCheckInterval){return false}}try{const t=GM.info.script.name.match(/Bilibili Evolved \((.*)\)/);const n=t?"."+t[1].replace(/ /g,"-").toLowerCase():"";let r;try{r=await Ajax.monkey({url:(Resource.cdnRoot||Resource.root)+"version.txt"})}catch(e){const t=n===".preview";i=`https://cdn.jsdelivr.net/gh/the1812/Bilibili-Evolved@${t?"preview":"master"}/bilibili-evolved${n}.user.js`;const s=await Ajax.monkey({url:i});r=s.match(/@version[ ]*([\d\.]+)/)[1]}const a=new s(r);if(a.parts[0]>=2){if(!e.noNotifyV2){const t=`新版本<span>${a.versionString}</span>已发布, 请前往项目的<a class="link" target="_blank" href="https://github.com/the1812/Bilibili-Evolved/releases">更新日志</a>或者<a class="link" target="_blank" href="https://github.com/the1812/Bilibili-Evolved/discussions">讨论区</a>了解如何安装和使用. <a class="link" href="javascript:void(0)" id="no-notify-v2">不再提示</a>`;const n=Toast.info(t,"检查更新");SpinQuery.select("#no-notify-v2").then((t=>t.addEventListener("click",(()=>{e.noNotifyV2=true;n&&n.dismiss()}))))}return false}const o=new s(e.currentVersion);const l=a.greaterThan(o);if(l){const e=`新版本<span>${a.versionString}</span>已发布. <a id="new-version-link" class="link" href="${i}">安装</a><a class="link" target="_blank" href="https://github.com/the1812/Bilibili-Evolved/releases">查看</a>`;const t=Toast.info(e,"检查更新");SpinQuery.select("#new-version-link").then((e=>e.addEventListener("click",(()=>{t&&t.dismiss()}))))}return l}catch(e){return false}finally{e.lastNewVersionCheck=Number(new Date)}}const a=r();return{widget:{content:`\n<button class="gui-settings-flat-button" id="new-version-update">\n<a href="${i}" style="display:none"></a>\n<i class="icon-update"></i>\n<span>安装更新</span>\n</button>\n<button class="gui-settings-flat-button" id="new-version-info">\n<a target="blank" style="display:none" href="https://github.com/the1812/Bilibili-Evolved/releases"></a>\n<i class="icon-info"></i>\n<span>查看更新</span>\n</button>\n`,condition:()=>a,success:()=>{document.querySelector("#new-version-update").addEventListener("click",(e=>{if(e.target.nodeName.toLowerCase()!=="a"){document.querySelector("#new-version-update a").click()}}));document.querySelector("#new-version-info").addEventListener("click",(e=>{if(e.target.nodeName.toLowerCase()!=="a"){document.querySelector("#new-version-info a").click()}}))}}}})();