Greasy Fork

Greasy Fork is available in English.

动漫花园提取BT磁力链

提取、选择并复制动漫花园当前搜索结果的BT磁力链

当前为 2019-01-28 提交的版本,查看 最新版本

// ==UserScript==
// @name         动漫花园提取BT磁力链
// @description  提取、选择并复制动漫花园当前搜索结果的BT磁力链
// @require      https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js
// @author       YD-Cat
// @version      1.4
// @namespace    http://greasyfork.icu/zh-CN/users/242083-yd-cat
// @copyright    2019+,  YD-Cat
// @include      http*://share.dmhy.org/*
// ==/UserScript==
var $ = jQuery.noConflict();
var eventFun=function(){

    //显示窗口
    $("#extract").click(function(){
        var magnetObjs=$('.download-arrow.arrow-magnet')
        var titleObjs=$('td.title>a')

        //显示或隐藏
        if($('#magnetBox').css('display')!='block'){
            //初始化内容
            $('#magnetUrl tbody').text('')
            $('#magnetBox span').text(0)
            $('#selectAll').attr('flag',false)
            //没有资源
            if(magnetObjs.length<=0||($('#topic_list>tbody>tr[class="mismatch"]').length==$('#topic_list>tbody>tr').length)){
                let str='<tr style="text-align: center;" class="even"><td></td><td>没有资源</td><td></td></tr>';
                $("#magnetUrl tbody").append(str);
                show();
            }
            else{
                var index=0;
                titleObjs.each((i,myThis)=>{
                    const tr =$(myThis).parents('#topic_list>tbody>tr');
                    if(!tr.hasClass('mismatch')){
                        let str='<tr style="text-align: center;" class="even"><td style="user-select: none;">'+ ++index +'</td><td class="align myTitle">'+titleObjs[i].innerText+'<td class="align" style="display:none;">'+magnetObjs[i].href.substring(0,magnetObjs[i].href.indexOf('&dn'))+'</td><td><input type="checkBox"></td></tr>'
                        $("#magnetUrl tbody").append(str);
                    }
                })
                show();
            }
        }
        else{
            $('#magnetBox').fadeOut(200)
        }
    });

    //全选
    $("#selectAll").click(function(){
        var flag=stringToBoolean($('#selectAll').attr('flag'))
        $('#magnetUrl [type="checkBox"]').each(function(){this.checked= !flag})
        $('#magnetBox span').text($('#magnetUrl :checked').length)
        $('#selectAll').attr('flag',!flag)
    });
    //反选
    $('#selectInvert').click(function(){
        $('#magnetUrl [type="checkBox"]').each(function(){this.checked=!this.checked})
        $('#magnetBox span').text($('#magnetUrl :checked').length)
        isSelectAll()
    });
    //关闭窗口
    $("#close").click(function(){
        $('#magnetBox').fadeOut(200)
    });
    //复制已选
    $('#copySelect').click(function(){
        let str='';
        $('#magnetUrl input').each(function(){
            if(this.checked){
                str+=this.parentNode.previousElementSibling.innerText+'\n'
            }
        })
        copy(str)
    });
    //复制全部
    $('#copyAll').click(function(){
        var parents=$('#magnetUrl input').parent();
        var brothers=parents.prev();

        let str='';
        brothers.each(function(i, brother){
            str+=brother.innerText+'\n'
        })
        copy(str)
    });

    //给选择框绑定事件
    window.onload=function(){
        $(document).on('click','#magnetUrl [type="checkBox"]',function(event){
            event.stopPropagation();
            $('#magnetBox span').text($('#magnetUrl :checked').length)
            isSelectAll()
        });
        $(document).on('click','#magnetUrl tbody>tr',function(){
            $(this).find('input')[0].checked=!$(this).find('input')[0].checked
            $('#magnetBox span').text($('#magnetUrl :checked').length)
            isSelectAll()
        });
    };
    //防止输入非正整数
    $('#page').keypress(function(e){
        return(/[\d]/.test(String.fromCharCode(event.keyCode)))
    });
    //跳转
    $('#goToPage').click(function(){
        let url='https://share.dmhy.org/topics/list/page/';
        let page=$('#page').val();
        let localUrl=window.location.href;
        let KWpoint=localUrl.lastIndexOf('?keyword');
        let keyword;
        if(!(KWpoint>0)){
            url+=page;
        }
        else{
            keyword=localUrl.substring(KWpoint);
            url+=page+keyword;
        }
        window.location.href=url;
    });
    $('#page').keypress(function(){
        if(event.keyCode==13){
            $('#goToPage').click()
        }
    })
    //筛选
    $('#filter').click(function(){
        let regexList
        try{
            regexList=$('#condition').val().split(/[; :,,;]+/).map((r)=>new RegExp(r));
        }
        catch(error){
            alert('筛选条件错误,请参考正则表达式')
        }
        $('#topic_list>tbody>tr').each(function(){
            const tagA=this.querySelector('.title>a')
            const select = tagA && regexList.reduce((result, regex) =>{return(result && regex.test(tagA.textContent))}, true);
            if(select==false){
                $(this).addClass('mismatch');
            }
            else{
                $(this).removeClass('mismatch');
            }
            $(this).removeClass('even');
            $(this).removeClass('odd');
        })
        $('#topic_list>tbody>tr[class=""]:even').each((i,a)=>$(a).addClass('even'));
        $('#topic_list>tbody>tr[class=""]:odd').each((i,a)=>$(a).addClass('odd'));
    })
    $('#condition').keypress(()=>{
        if(event.keyCode==13){
            $('#filter').click()
        }
    })
};
(function() {
    //添加样式
    var style='<style type="text/css">.mismatch{display:none;}.myDiv>p{display:inline;}.line{font-size:16px;line-height:16px;margin:0 5px;}.myInput{position: relative;top: -2px;border: 1px solid #eee;font-size: 13px;}#page{width:3em;}#condition{width:10em;}.myLeft{margin-left: 5px;}#magnetBox{font-size: 13px;position: fixed;background: white;padding: 2px;display:none;border: 1px solid #247;}#magnetUrl{max-height: 406px;;overflow: auto;}#magnetUrl thead>tr{background-color: #7e99be;color: white;font-size: 15px;}#magnetUrl th{padding:5px;}#magnetUrl tbody>tr:hover{background-color: #c5cbd3;;}#magnetUrl td{padding:6px 8px;color: #247;}.align{text-align: left;padding-left: 10px;}hr{margin:2px 0 0}#selectBox{margin:3px 2px 2px}#selectBox:after{content: "";display: block;clear: both;}#selectBox>ul{margin:0; padding:0;}#selectBox>ul>li{list-style-type: none;}#selectBox a{display:block;padding:5px;border:1px solid #247;}#selectBox>ul>li:nth-of-type(n+2){margin-left:10px;}#copyText{position:absolute;top:-9999px;z-index:-999;width:0;height:0;opacity:0;}.myTitle{max-width:500px;word-break: break-all;}input[type=number] {-moz-appearance:textfield;  }  input[type=number]::-webkit-inner-spin-button,  input[type=number]::-webkit-outer-spin-button {  -webkit-appearance: none;  margin: 0;  } </style>'
    $('.table.clear').before(style)
    //跳转
    var goPage='<div class="fl myDiv"><p class="line">&nbsp;|&nbsp;</p><p style="display: inline;">跳轉</p><input type="number" id="page" class="myLeft myInput"><p style="display: inline;" class="myLeft">页</p><a href="javascript:void(0)" id="goToPage" class="myLeft">前往</a></div>';
    //筛选
    var filter='<div class="fl myDiv"><p class="line">&nbsp;|&nbsp;</p><p style="display: inline;">条件</p><input type="text" id="condition" class="myLeft myInput" title="请参考正则表达式"><a href="javascript:void(0)" id="filter" class="myLeft">筛选</a></div>';
    //提取
    var ExtractText='<div class="fl myDiv"><p class="line">&nbsp;|&nbsp;</p><a href="javascript:void(0)" id="extract">提取鏈接</a></div>'
    //提取界面
    var TextBox='<div id="magnetBox"><div id="magnetUrl"><table border="0"><thead><tr><th width="30">序列</th><th style="min-width:400px;">標題</th><th style="display:none;">磁力鏈接</th><th width="30">選擇</th></tr></thead><tbody></tbody></table></div><textarea id="copyText"></textarea><hr><div id="selectBox"><ul><li class="fl" id="copySelect"><a href="javascript:void(0)">複製已選</a></li><li class="fl" id="copyAll"><a href="javascript:void(0)">複製全部</a></li><li class="fl" id="selectAll" flag=false><a href="javascript:void(0)">全選</a></li><li class="fl" id="selectInvert"><a href="javascript:void(0)">反選</a></li><li class="fl" style="color:#666;line-height:28px">已選擇:<span>0</span>項</li><li class="fr" id="close"><a href="javascript:void(0)">關閉</a></li></ul></div>'

//     $('.nav_title').find('.fl:last').after(goPage)
//     $('.nav_title').find('.fl:last').after(filter)
//     $('.nav_title').find('.fl:last').after(ExtractText)
//     $('.table.clear .nav_title:first').after(TextBox)
    addObj('.nav_title .fl:last', goPage);
    addObj('.nav_title .fl:last', filter);
    addObj('.nav_title .fl:last', ExtractText);
    addObj('.table.clear .nav_title:first', TextBox);

    //加载事件
    eventFun();
})();
//String转换为Boolean
function stringToBoolean(str){
    switch(str.toLowerCase())
    {
        case "true": case "yes": case "1": return true;
        case "false": case "no": case "0": case null: return false;
        default: return Boolean(str);
    }
}
//复制事件
function copy(str){
    str=str.substring(0,str.length-1)
    $('#copyText').val(str)
    $('#copyText').select()
    document.execCommand('copy')
}
//检测是否全选择
function isSelectAll(){
    if(Number($('#magnetBox span').text())==$('#magnetUrl [type="checkBox"]').length){
        $('#selectAll').attr('flag',true)
    }
    else{
        $('#selectAll').attr('flag',false)
    }
}
//显示提取窗口
function show(){
    $('#magnetBox').fadeIn(200)
    let left=window.innerWidth/2-$('#magnetUrl')[0].offsetWidth/2;
    let top=window.innerHeight*0.2;
    $('#magnetBox').css({
        'left':left,
        'top':top
    })
}
//添加对象
function addObj(select,obj){
    $(select).after(obj)
}