蜜柑计划(Mikan Project)复制全部磁链

复制某部番的某个字幕组的全部磁链

// ==UserScript==
// @name         蜜柑计划(Mikan Project)复制全部磁链
// @namespace    
// @version      0.1.13
// @description  复制某部番的某个字幕组的全部磁链
// @author       cookedfish
// @match        http*://mikanime.tv/Home/Bangumi/*
// @match        http*://mikanani.me/Home/Bangumi/*
// @grant        GM_setClipboard
// @license      MIT
// ==/UserScript==
function print_messageBar(max){//消息框
    var messageBar = document.createElement('div');
    messageBar.textContent = max;
    messageBar.style.position = 'fixed';
    messageBar.style.bottom = '0';
    messageBar.style.left = '0';
    messageBar.style.width = '100%';
    messageBar.style.backgroundColor = 'green';
    messageBar.style.color = 'white';
    messageBar.style.textAlign = 'center';
    messageBar.style.padding = '10px 0';
    document.body.appendChild(messageBar);
    setTimeout(function() {
        messageBar.parentNode.removeChild(messageBar);
    }, 1000);
}
function search(text,Value){//单词模式
    var startIndex = 0;
    while (startIndex < text.length) {//匹配关键字词
        var index = text.indexOf(Value, startIndex);
        if (index !== -1) {
            console.log('%c' + 'true','color: green',text,Value);
            return true;
        } else {
            break;
        }
    }
    console.log('%c' + 'false', 'color: red', text, Value);
    return false;
}
function multiple_match(texts, Value) {//多词模式
    var searchTerms = Value.split(' ');
    for (var i = 0; i < searchTerms.length; i++) {
        console.log(searchTerms[i]);
        if (!search(texts, searchTerms[i])) {return false;}
    }
    return true;
}
function get_xunlei(){//复制按钮
    var num = parseInt($(this).closest('div').attr('id'));
    console.log(num);
    var urls = [];
    var abc = undefined;
    var checkbox = [];
    var box = false;
    var mode = $(this).nextAll("a:first").next('a').text();
    console.log(mode);
    $('.table').find('input').each(function () {
        if($(this).attr('id') !== "myCheckbox") return true;
        if (parseInt($(this).closest('table').prev('div').attr('id')) !== num && $(this).closest('table').prev('div').attr('id') !== abc) return true;
        checkbox.push($(this).attr('effect'));
    });
    console.log(checkbox);
    for(var i = 0;i < checkbox.length;i++){
        if(checkbox[i] === 'checked'){//预检查勾选框是否有勾选
            box=true;
            break;
            console.log(i);
        }
        box=false;
    }
    console.log(box);
    if(box===false){
        $('.table').find('a').each(function () {//按条件排除
            if($(this).attr('class') !== "js-magnet magnet-link") return true;
            if (parseInt($(this).closest('table').prev('div').attr('id')) !== num && $(this).closest('table').prev('div').attr('id') !== abc) return true;
            if($(this).closest('table').prev('div').find('input').val()&&mode === '  模式切换:单词模式'&&search($(this).prev('a').text(),$(this).closest('table').prev('div').find('input').val())===false) return true;
            if($(this).closest('table').prev('div').find('input').val()&&mode === '  模式切换:多词模式'&&multiple_match($(this).prev('a').text(),$(this).closest('table').prev('div').find('input').val())===false) return true;
            if($(this).closest('table').prev('div').find('input').val()&&mode === '  模式切换:打开模式'&&multiple_match($(this).prev('a').text(),$(this).closest('table').prev('div').find('input').val())===false) return true;
            urls.push($(this).attr('data-clipboard-text'));
            $(this).prev('a').prev('input').click();
        });
    }
    else{
        $('.table').find('a').each(function () {
            if($(this).attr('class') !== "js-magnet magnet-link") return true;
            if (parseInt($(this).closest('table').prev('div').attr('id')) !== num && $(this).closest('table').prev('div').attr('id') !== abc) return true;
            if($(this).prev('a').prev('input').attr('effect') === 'uncheck') return true;
            urls.push($(this).attr('data-clipboard-text'));
        });
    };
    if(mode === '  模式切换:打开模式'){
        for(i = 0;i < urls.length;i++)
        {
            var pages = window.open(urls[i], '_blank');
            pages.close();
            if(i % 10 === 9) alert(i-8 + '-' + (i+1) + '条,共' + urls.length + '条');
        }
    }
    print_messageBar('复制了'+urls.length+'个链接');
    GM_setClipboard(urls.join('\n'));//更改剪贴板
};
function click(){//自动展开
    document.querySelectorAll('a.js-expand-episode').forEach(function(element) {
        element.click();
    });
}
function Mode(){//模式切换
    var currentMode = $(this).text().trim();
    switch (currentMode) {
        case '模式切换:多词模式':
            $(this).text('  模式切换:打开模式');
            break;
        case '模式切换:单词模式':
            $(this).text('  模式切换:多词模式');
            break;
        case '模式切换:打开模式':
            $(this).text('  模式切换:单词模式');
            break;
        default:
            break;
    };
}
function del(){//清空勾选框
    var num = parseInt($(this).closest('div').attr('id'));
    $('.table').find('input').each(function () {
        if($(this).attr('id') !== 'myCheckbox') return true;
        if (parseInt($(this).closest('table').prev('div').attr('id')) !== num && $(this).closest('table').prev('div').attr('id') !== 'undefined') return true;
        if($(this).attr('effect') === 'checked') $(this).click();
        console.log($(this).attr('effect'));
    });
}
function change(){//改变勾选框
    if($(this).attr('effect') === 'uncheck') $(this).attr('effect', 'checked');
    else $(this).attr('effect', 'uncheck');
}
function title(){//字幕组名
    var title=$(this).attr('data-anchor');
    title = title.replace(/#/g, '');
    console.log(title);
    var urls = [];
    var abc = undefined;
    $('.table').find('a').each(function () {//按条件排除
        if($(this).attr('class') !== "js-magnet magnet-link") return true;
        if ($(this).closest('table').prev('div').attr('id') !== title && $(this).closest('table').prev('div').attr('id') !== abc) return true;
        urls.push($(this).attr('data-clipboard-text'));
    });
    print_messageBar('复制了'+urls.length+'个链接');
    GM_setClipboard(urls.join('\n'));//更改剪贴板
}
(function (){
    $(document).on('click', 'a[ref="thunder"]', get_xunlei);//绑定事件
    $(document).on('click', 'a[ref="mode"]', Mode);
    $(document).on('click', 'a[data-anchor^="#"]',title);
    $(document).on('click', 'a[ref="del"]', del);
    $(document).on('click', 'input[ref="checkbox"]', change);
    $('.subgroup-text i').closest('a').each(function() {
        var $button = $('<a class="js-magnet magnet-link" ref="mode" style="background-color:white" >  模式切换:多词模式</a>');
        var $del = $('<a class="js-magnet magnet-link" ref="del" >  [清空勾选框]</a>');
        var $input = $('<input type="text" id="magnet-input" placeholder="输入关键字词(区分大小写)">');
        var $thunder_magnet = $('<a class="js-magnet magnet-link" ref="thunder" style="background-color:white" >  [复制/打开]  </a>');
        $(this).after($thunder_magnet, $input ,$del, $button);//添加按钮
    });
    $('a.magnet-link-wrap').each(function() {//先执行一遍
        if ($(this).prev().is('input')) {//避免重复添加勾选框
            return;
        }
        var $check = $('<input type="checkbox" id="myCheckbox" ref="checkbox" effect="uncheck">');
        $(this).before($check);
    });
    const origOpen = XMLHttpRequest.prototype.open;
    XMLHttpRequest.prototype.open = function() {
        this.addEventListener("loadend", function() {
            $('a.magnet-link-wrap').each(function() {
                if ($(this).prev().is('input')) {//避免重复添加勾选框
                    return;
                }
                var $check = $('<input type="checkbox" id="myCheckbox" ref="checkbox" effect="uncheck">');
                $(this).before($check);
            });
        });
        origOpen.apply(this, arguments);
    };
    $('div.header').text('字幕组列表(点击复制)');
    click();
})();