Speed Github Releases

加速 github releases 页面的下载

// ==UserScript==
// @name         Speed Github Releases
// @namespace    http://tampermonkey.net/
// @version      0.4
// @description  加速 github releases 页面的下载
// @author       CBK
// @license      GPL-3.0
// @match        https://github.com/*/releases*
// @icon         https://github.githubassets.com/favicons/favicon.svg
// @grant        none
// @run-at       document-end
// ==/UserScript==

// 模仿块级作用域
// (function() {
//     'use strict';

//     // Your code here...
// })();

"use strict";

main();

function main() {
    logger("开始");
    observe_assets();
    speed();
}

function speed() {
    // 寻找 release 地址
    // let elems = document.querySelectorAll("[href]");
    let mirror_url = "https://github.moeyy.xyz/";
    let pattern = /https:\/\/github.com\/.+\/.+\/releases\/download.+/;
    let elems = document.querySelectorAll("a.Truncate");
    for (let elem of elems) {
        if (elem.href.match(pattern)) {
            // 修改
            let url = elem.href.match(pattern)[0];
            // let url = elem.href;
            elem.href = mirror_url + url;
            // }
        }
    }
}

function observe_assets() {
    // Observer
    let assets_elems = document.querySelectorAll(
        'div[data-view-component="true"]',
    );
    let observer = new MutationObserver((mutationRecords) => {
        // console.log("有变化");
        // console.log(mutationRecords);
        logger(`${mutationRecords.length} 个元素发生变化`);
        speed();
    });

    for (let elem of assets_elems) {
        observer.observe(elem, {
            childList: true,
            subtree: true, // 及其更低的后代节点
        });
    }
}

function logger(msg) {
    console.log(`[${new Date().toISOString()}] ${msg}`);
}