Greasy Fork is available in English.

虫洞2.0(漫猫/爱恋/ MioBT 二合一脚本)

漫猫/爱恋/ MioBT 二合一脚本(种子列表增强/生存模式BT下载链接)

// ==UserScript==
// @name         虫洞2.0(漫猫/爱恋/ MioBT 二合一脚本)
// @icon         https://www.kisssub.org/images/favicon/kisssub.ico
// @namespace    https://www.kisssub.org
// @version      0.2
// @description  漫猫/爱恋/ MioBT 二合一脚本(种子列表增强/生存模式BT下载链接)
// @author       _Hyouka&TKF
// @match        http://*.kisssub.org/*
// @match        http://*.comicat.org/*
// @match        http://*.miobt.com/*
// @match        https://*.kisssub.org/*
// @match        https://*.comicat.org/*
// @match        https://*.miobt.com/*
// @include      http://*.kisssub.org/*
// @include      http://*.comicat.org/*
// @include      http://*.miobt.com/*
// @include      https://*.kisssub.org/*
// @include      https://*.comicat.org/*
// @include      https://*.miobt.com/*
// @grant        none
// ==/UserScript==

//主要
var acgscript_config;
!function () {
    acgscript_config = {
        "miobt": {
            "3": {
                "base_url": "https://cdn.acgscript.com/script/miobt/live2d", "show_toggle": false
            },
            "4": {
                "api_url": "http://v2.uploadbt.com", "source": "cdn.acgscript.com"
            }
        }
    };

    // -> -> -> -> -> -> -> -> -> -> -> -> -> -> -> 种子列表增强 -> -> -> -> -> -> -> -> -> -> -> -> -> -> ->
    (function ($) {
        var log_name = 'acgscript/bt_list_enhanced';

        console.log([log_name, {
            'in_script': Config['in_script'],
            'platform': Config['user_script']['platform']
        }]);

        if (Config['user_script']['platform'] !== 'desktop') {
            return false;
        }

        if ((Config['in_script'] !== 'index') && (Config['in_script'] !== 'search')) {
            return false;
        }

        console.log([log_name, {
            'execute': true
        }]);

        $(document).ready(function () {
            //匹配BT列表顿
            if (!$(".clear > table#listTable > tbody.tbody > tr[class^='alt'] > td > a[href^='show']").length) {
                return false;
            }

            var link;
            var tracker = 'http://open.acgtracker.com:1096/announce';
            var copyTextToClipboard = function (text) {
                var textArea = document.createElement("textarea");
                textArea.style.position = 'fixed';
                textArea.style.top = 0;
                textArea.style.left = 0;
                textArea.style.width = '2em';
                textArea.style.height = '2em';
                textArea.style.padding = 0;
                textArea.style.border = 'none';
                textArea.style.outline = 'none';
                textArea.style.boxShadow = 'none';
                textArea.style.background = 'transparent';
                textArea.value = text;
                document.body.appendChild(textArea);
                textArea.select();

                try {
                    var successful = document.execCommand('copy');
                    var msg = successful ? 'successful' : 'unsuccessful';
                    console.log('Copying text command was ' + msg);
                } catch (err) {
                    console.log('Oops, unable to copy');
                }
                document.body.removeChild(textArea);
            };

            //复制
            var copyMagnet = function () {
                var i = 0;
                var arr = new Array("");
                //获取所有勾上class为checkMagnet的checkbox(每行资源所对应的checkbox),遍历
                $(".checkMagnet:checked").each(function () {
                    //获取该checkbox的val,即磁链,放到数组中
                    arr[i] = $(this).val();
                    i += 1;
                });
                //把数组以换行回车连接为一个字符串
                var multiMagnet = arr.join("\r\n");
                //弹出确认对话框,用户选择积极选项时把字符串放入剪贴板
                if (confirm("即将复制已选磁链,确认进行_")) {
                    copyTextToClipboard(multiMagnet);
                }
            };
            //全选
            var checkAll = function () {
                //获取所有资源所对应的checkbox,遍县
                $(".checkMagnet").each(function () {
                    //当全选复选框与当前复选框的勾选状态不一样时
                    if ($(this).get(0).checked != $("#checkAll").get(0).checked) {
                        //点击当前复选框
                        $(this).get(0).click();
                    }
                });
            };
            //全选状态的临界状态处理,即全选到差一个全选,以及差一个全选到全选
            var checkThis = function () {
                //如果当前checkbox不被勾上
                if ($(this).get(0).checked === false) {
                    //全选复选框也不可以被勾丿
                    $("#checkAll").get(0).checked = false;
                }
                //如果当前checkbox被勾上并且所有资源所对应的checkbox都被勾上
                else if ($(this).get(0).checked === true && $(".checkMagnet:checked").length == $(".checkMagnet").length) {
                    //全选复选框也要被勾丿
                    $("#checkAll").get(0).checked = true;
                }
            };

            link = $(".clear > table#listTable > tbody.tbody > tr[class^='alt'] > td > a[href^='show']");
            var headTh = $("#listTable .l3");
            var newColumn = headTh.clone();
            newColumn.removeClass("l3").addClass("l31").css("width", "65px");
            var checkall = $("<input/>", {type: "checkbox", id: "checkAll", title: "全逿"});
            headTh.after(newColumn.text("").append(checkall).append($('<i class="fa fa-clipboard" id="copy_magnets"></i>')));
            //对全选复选框和其他复选框监听变更事件
            $("#checkAll").on("change", checkAll);

            //对列表页表格中的每一衿
            if (link != null) { // 不可使用!==进行两者的比较,因为undefined !== null的值为true
                link.each(function () {
                    //从资源页url中切出hex编码hash
                    var str = $(this).attr("href").substring(5, 45);
                    //构成磁链
                    var magnet = "magnet:?xt=urn:btih:" + str + "&tr=" + tracker;
                    var td = $("<td/>");
                    var check = $("<input/>", {type: "checkbox", class: "checkMagnet", value: magnet});
                    //把整个元素放到后面的td丿
                    var a = $("<a/>", {href: magnet, class: "magnet", html: '<i class="fa fa-magnet"></i>'});
                    $(this).parent().after(td.append(check).append(a));
                });
            }
            if ($(".checkMagnet")) {
                //对checkMagnet类的变更事件绑定全选复选框的选中变更函数
                $(".checkMagnet").on("change", checkThis);
            }

            $('#copy_magnets').click(function () {
                copyMagnet();
            });
            $('i.fa').css('color', $('.box').css('border-color'));
        });
    })(jQuery);
    // <- <- <- <- <- <- <- <- <- <- <- <- <- <- <- END <- <- <- <- <- <- <- <- <- <- <- <- <- <- <-


    // -> -> -> -> -> -> -> -> -> -> -> -> -> -> -> 生存模式BT下载链接 -> -> -> -> -> -> -> -> -> -> -> -> -> -> ->
    (function ($) {
        if (acgscript_config['miobt']['4']['loaded']) {
            return false;
        }

        acgscript_config['miobt']['4']['loaded'] = true;
        var log_name = 'acgscript/miobt/bt_download';

        console.log([log_name, {
            'source': acgscript_config['miobt']['4']['source'], 'loaded': acgscript_config['miobt']['4']['loaded'], 'api_url': acgscript_config['miobt']['4']['api_url'], 'mika_mode': Config['mika_mode']['enabled'], 'in_script': Config['in_script'], 'platform': Config['user_script']['platform']
        }]);

        if (!Config['mika_mode']['enabled']) {
            return false;
        }

        if (Config['in_script'] !== 'show') {
            return false;
        }

        if (!$('#box_download')) {
            return false;
        }

        var api_url = acgscript_config['miobt']['4']['api_url'];

        var torrent_url = {
            "lite": api_url + '/?r=down&hash=' + Config['hash_id'], 'full': api_url + '/?r=down&hash=' + Config['hash_id'] + '&name=' + Config['down_torrent_format'].replace('%s', Config['bt_data_title'])
        };

        var magnet_url = {
            'lite': 'magnet:?xt=urn:btih:' + Config['hash_id'], 'full': 'magnet:?xt=urn:btih:' + Config['hash_id']
        };

        if (Config['user_script']['platform'] == 'desktop') {
            $('#box_download h2.title').text('下载地址');
            $('#magnet').attr('href', magnet_url.full).text('磁链下载');
            $('#download').attr('href', torrent_url.full).text('种子下载');
            $('#qrcode_magnet').removeAttr('href').text('磁链扫码');
            $('#qrcode_download').removeAttr('href').text('种子扫码');
            $('#qrcode_magnet_enlarged').attr('qr_content', magnet_url.full);
            $('#qrcode_download_enlarged').attr('qr_content', torrent_url.lite);

            var register_qrcode_event = function (sel, sel_enlarged) {
                $(sel).click(function () {

                    $('.qrcode_enlarged').html('').hide();
                    $(sel_enlarged).qrcode({
                        render: "canvas", size: 256, fill: '#0480BE', background: '#FFF', quiet: 1, mode: 2, minVersion: 10, label: $(sel_enlarged).attr('qr_label'), fontname: '"Helvetica Neue", Helvetica, Arial, "PingFang SC", "Hiragino Sans GB", "Heiti SC", "Microsoft YaHei", "WenQuanYi Micro Hei", sans-serif', fontcolor: 'darkorange', text: $(sel_enlarged).attr('qr_content')
                    });

                    $(sel_enlarged).fadeIn(200);
                });

                $(sel_enlarged).click(function () {
                    $(this).hide();
                });
            };

            $(document).ready(function () {
                register_qrcode_event('#qrcode_magnet', '#qrcode_magnet_enlarged');
                register_qrcode_event('#qrcode_download', '#qrcode_download_enlarged');
            });
        }
        else if (Config['user_script']['platform'] == 'mobile') {
            $('#torrent_url').attr('href', torrent_url.full).text('种子下载').click(function () {
                return (prompt('确认下载该种孿', torrent_url.full) ? true : false);
            });

            $('#magnet_url').attr('href', magnet_url.full).text('磁力下载').click(function () {
                return (prompt('确认下载磁链', magnet_url.full) ? true : false);
            });
        }
        else {
            return false;
        }
    })(jQuery);
    // <- <- <- <- <- <- <- <- <- <- <- <- <- <- <- END <- <- <- <- <- <- <- <- <- <- <- <- <- <- <-
}();