Greasy Fork

Greasy Fork is available in English.

bilibili网页视频简介中的链接可以点击(按行区分)

change black to blue

当前为 2020-09-01 提交的版本,查看 最新版本

// ==UserScript==
// @name         bilibili网页视频简介中的链接可以点击(按行区分)
// @namespace    http://tampermonkey.net/
// @version      0.4
// @description  change black to blue
// @author       beibeibeibei
// @match        *.bilibili.com/video/*
// @grant        none
// @require      https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.min.js
// ==/UserScript==

(function() {
    'use strict';
    // Your code here...
    var $=jQuery.noConflict();
    function hide_info(){
        $("#v_desc").find(".info").hide();
    }
    function show_info(){
        $("#v_desc").find(".info").show();
    }
    function hide_info2(){
        $("#v_desc").find(".info2").hide();
    }
    function show_info2(){
        $("#v_desc").find(".info2").show();
    }
    function hide_abstract_spread(){
        //展开更多
        $('[report-id="abstract_spread"]').hide();
        $('[report-id="abstract_unspread"]').hide();

    }
    function show_abstract_spread(){
        //展开更多
        $('[report-id="abstract_spread"]').show();
        $('[report-id="abstract_unspread"]').show();
    }
    function new_info2(){
        $("#v_desc").find(".info").after('<div class="info2"></div>');
    }
    function splitLines(str) {return str.split(/\r?\n/);}
    var reg_is_html = /^(https:\/\/|http:\/\/|ftp:\/\/|file:\/\/\/|www.|wap.|bbs.|news.|blog.)[a-z0-9-+&@#/%?=~_|!:,.;]+[a-z0-9-+&@#/%=~_|]$/i;
    var reg_with_html = /(https:\/\/|http:\/\/|ftp:\/\/|file:\/\/\/|www.|wap.|bbs.|news.|blog.)[a-z0-9-+&@#/%?=~_|!:,.;]+[a-z0-9-+&@#/%=~_|]/i;
    var reg_BV_a_tags = /<a target="_blank" href="\/\/www.bilibili.com\/video\/BV([a-zA-Z0-9]){10}">BV([a-zA-Z0-9]){10}<\/a>/;
    var reg_av_a_tags = /<a target="_blank" href="\/\/www.bilibili.com\/video\/av([0-9])+">av([a-zA-Z0-9])+<\/a>/;
    var reg_is_com_end = /[a-z0-9]+(.com)/i;//(其乐社区Keylol.com)
    var reg_is_cn_end = /[a-z0-9]+(.cn)/i;//(其乐社区Keylol.com)
    var reg_is_space_io_end = /[a-z0-9]+( .io)/i;//(平台:gartic .io)
    var reg_is_weibo = /微博[:@]{1,2}[\u4e00-\u9fa5a-zA-Z0-9_-]{4,30}/;
    var part1 = "";
    var part2 = "";
    var part3 = "";
    var part4 = "";
    var part5 = "";
    var part_link = "";
    var part_link2 = "";
    var link_color1 = "darkturquoise";
    var link_color2 = "palevioletred";
    function main(){
        add_button();
        add_info2();
        hide_abstract_spread();
        if($(".info2").is(":hidden")){
            show_abstract_spread();
        }
        var info_html = $("#v_desc").find(".info").html();
        var html_array = splitLines(info_html);
        $(".l-con").off('DOMNodeInserted',main);
        $("#v_desc").find(".info2").html("");
        $("#v_desc").find(".info2").append('<style>.video-desc .info2 a {color: '+link_color1+';}.video-desc .info2 a:hover {color: '+link_color2+';}</style>');
        for(var i=0;i<html_array.length;i++){
            var else_flag = true;
            var is_empty = html_array[i] === "";
            var is_html = reg_is_html.test(html_array[i]);
            var with_html = reg_with_html.test(html_array[i]);
            var is_BV_a_tags = reg_BV_a_tags.test(html_array[i]);
            var is_av_a_tags = reg_av_a_tags.test(html_array[i]);
            var is_com_end = reg_is_com_end.test(html_array[i]);
            var is_cn_end = reg_is_cn_end.test(html_array[i]);
            var is_space_io_end = reg_is_space_io_end.test(html_array[i]);
            var is_weibo = reg_is_weibo.test(html_array[i]);
            if (is_empty) {
                else_flag = false;
                //console.log("is_emp1:"+html_array[i]);
                $("#v_desc").find(".info2").append('<br class="'+i+'">');
            }
            if (is_html) {
                else_flag = false;
                //console.log("is_htm2:"+html_array[i]);
                $("#v_desc").find(".info2").append('<p><a class="'+i+'" href="' + html_array[i] + '" target="_blank" style="color:'+link_color1+';">' + html_array[i] + '</a></p>');
            }
            if (with_html && !is_html && !is_BV_a_tags && !is_av_a_tags) {
                else_flag = false;
                //console.log("with_h3:"+html_array[i]);
                part2 = html_array[i].match(reg_with_html)[0];
                part_link = part2;
                part1 = html_array[i].substring(0,html_array[i].indexOf(part2));
                part3 = html_array[i].substring(html_array[i].indexOf(part2)+part2.length);
                $("#v_desc").find(".info2").append('<p>'+part1+'<a class="'+i+'" href="' + part_link + '" target="_blank" style="color:'+link_color1+';">' + part2 + '</a>'+part3+'</p>');
            }
            if (is_BV_a_tags && with_html && !is_html) {
                else_flag = false;
                //console.log("is_BV_4:"+html_array[i]);
                $("#v_desc").find(".info2").append('<p>'+html_array[i]+'</p>');
                $("#v_desc").find(".info2").children("p:last").children("a").attr("class",i);
                $("#v_desc").find(".info2").children("p:last").attr("class",i);
            }
            if (is_av_a_tags && with_html && !is_html) {
                else_flag = false;
                //console.log("is_av_5:"+html_array[i]);
                $("#v_desc").find(".info2").append('<p>'+html_array[i]+'</p>');
                $("#v_desc").find(".info2").children("p:last").children("a").attr("class",i);
                $("#v_desc").find(".info2").children("p:last").attr("class",i);
            }
            if (is_com_end && !with_html && !is_weibo) {
                else_flag = false;
                //console.log("is_com6:"+html_array[i]);
                part2 = html_array[i].match(reg_is_com_end)[0];
                part_link = "http://www." + part2;
                part1 = html_array[i].substring(0,html_array[i].indexOf(part2));
                part3 = html_array[i].substring(html_array[i].indexOf(part2)+part2.length);
                $("#v_desc").find(".info2").append('<p>'+part1+'<a class="'+i+'" href="' + part_link + '" target="_blank" style="color:'+link_color1+';">' + part2 + '</a>'+part3+'</p>');
            }
            if (is_cn_end && !with_html) {
                else_flag = false;
                //console.log("is_cn_7:"+html_array[i]);
                part2 = html_array[i].match(reg_is_cn_end)[0];
                part_link = "http://www." + part2;
                part1 = html_array[i].substring(0,html_array[i].indexOf(part2));
                part3 = html_array[i].substring(html_array[i].indexOf(part2)+part2.length);
                $("#v_desc").find(".info2").append('<p>'+part1+'<a class="'+i+'" href="' + part_link + '" target="_blank" style="color:'+link_color1+';">' + part2 + '</a>'+part3+'</p>');
            }
            if (is_space_io_end && !with_html) {
                else_flag = false;
                //console.log("is_spa8:"+html_array[i]);
                part2 = html_array[i].match(reg_is_space_io_end)[0];
                part1 = html_array[i].substring(0,html_array[i].indexOf(part2));
                part3 = html_array[i].substring(html_array[i].indexOf(part2)+part2.length);
                part2 = html_array[i].match(reg_is_space_io_end)[0].substr(0,(html_array[i].match(reg_is_space_io_end)[0]).length-4)+".io";
                part_link = "http://www." + part2;
                $("#v_desc").find(".info2").append('<p>'+part1+'<a class="'+i+'" href="' + part_link + '" target="_blank" style="color:'+link_color1+';">' + part2 + '</a>'+part3+'</p>');
            }
            if (is_weibo && !is_com_end) {
                else_flag = false;
                //console.log("is_wei9:"+html_array[i]);
                part2 = "@" + html_array[i].match(reg_is_weibo)[0].substring(3);
                if(html_array[i].match(reg_is_weibo)[0][3] == "@"){
                    part2 = html_array[i].match(reg_is_weibo)[0].substring(3);
                }
                part1 = html_array[i].substring(0,html_array[i].indexOf(part2)) + "微博";
                part3 = html_array[i].substring(html_array[i].indexOf(part2)+part2.length);
                part_link = "https://s.weibo.com/user?q=" + part2.substring(1);//https://s.weibo.com/user?q=《用户名》
                $("#v_desc").find(".info2").append('<p>'+part1+'<a class="'+i+'" href="' + part_link + '" target="_blank" style="color:'+link_color1+';">' + part2 + '</a>'+part3+'</p>');
            }
            if (is_weibo && is_com_end) {
                else_flag = false;
                var part_array = [0,
                    html_array[i].match(reg_is_weibo).index,
                    html_array[i].match(reg_is_weibo).index + html_array[i].match(reg_is_weibo)[0].length,
                    html_array[i].match(reg_is_com_end).index,
                    html_array[i].match(reg_is_com_end).index + html_array[i].match(reg_is_com_end)[0].length];
                part_array = part_array.sort(function (a, b) { return a - b });
                part1 = html_array[i].substring(part_array[0], part_array[1]);
                part2 = html_array[i].substring(part_array[1], part_array[2]);
                part3 = html_array[i].substring(part_array[2], part_array[3]);
                part4 = html_array[i].substring(part_array[3], part_array[4]);
                part5 = html_array[i].substring(part_array[4]);

                if (html_array[i].match(reg_is_weibo).index < html_array[i].match(reg_is_com_end).index) {
                    part1 = html_array[i].substring(part_array[0], part_array[1]) + "微博";
                    part2 = html_array[i].substring(part_array[1], part_array[2]).substring(2);
                    part_link = "https://s.weibo.com/user?q=" + part2.substring(1);
                    part_link2 = "http://www." + part4;
                    $("#v_desc").find(".info2").append('<p>' + part1 + '<a class="' + i + '" href="' + part_link + '" target="_blank" style="color:' + link_color1 + ';">' + part2 + '</a>' + part3 + '<a class="' + i + '" href="' + part_link2 + '" target="_blank" style="color:' + link_color1 + ';">' + part4 + '</a>' + part5 + '</p>');
                } else {
                    part3 = html_array[i].substring(part_array[2], part_array[3]) + "微博";
                    part4 = html_array[i].substring(part_array[3], part_array[4]).substring(2);
                    part_link = "https://s.weibo.com/user?q=" + part4.substring(1);
                    part_link2 = "http://www." + part2;
                    $("#v_desc").find(".info2").append('<p>' + part1 + '<a class="' + i + '" href="' + part_link + '" target="_blank" style="color:' + link_color1 + ';">' + part2 + '</a>' + part3 + '<a class="' + i + '" href="' + part_link2 + '" target="_blank" style="color:' + link_color1 + ';">' + part4 + '</a>' + part5 + '</p>');
                }
            }
            if (else_flag && !is_empty && !is_html && !is_BV_a_tags && !is_av_a_tags && !with_html && !is_com_end && !is_space_io_end) {
                //console.log("else_11:"+html_array[i]);
                $("#v_desc").find(".info2").append('<p>' + html_array[i] + '</p>');
            }
            //console.log(i);
        }

        var number_repetition_p_tag = 1;//至少出现一次
        var first_pos_repetition_p_tag = -1;
        $("#v_desc").find(".info2").children("p").each(function (i) {
            if (i > 0) {
                var p_tag_html = $(this).html();
                var this_before = $("#v_desc").find(".info2").children("p:eq(" + (i - 1) + ")");
                var before_p_tag_html = this_before.html();
                if (p_tag_html == before_p_tag_html || p_tag_html == before_p_tag_html.trim()) {
                    $(this).hide();
                    number_repetition_p_tag++;
                    if(first_pos_repetition_p_tag == -1){
                        first_pos_repetition_p_tag = i;
                    }
                }
            }
        });
        if(number_repetition_p_tag > 1){
            $("#v_desc").find(".info2").children("p:eq(" + first_pos_repetition_p_tag + ")").before('<p>*'+number_repetition_p_tag+'</p>');
        }
        $("#v_desc").find(".info2").children("br").each(function (i) {//我祝傻逼up拉屎时间和这个空格一样长。真就满屏幕空格呗?wdnmd
            if (i > 0) {
                var br_tag_html = $(this).html();
                var this_before = $("#v_desc").find(".info2").children("br:eq(" + (i - 1) + ")");
                var before_br_tag_html = this_before.html();
                if ((br_tag_html == before_br_tag_html || br_tag_html == before_br_tag_html.trim()) && $(this).attr('class')-this_before.attr('class') == 1) {
                    $(this).hide();
                }
            }
        });

        $(".l-con").on('DOMNodeInserted',main);
    }
    function add_button() {
        if ($(".changemodebutton").length < 1) {
            $("#v_desc").find(".info").before('<input class="changemodebutton" type="button" value="切换显示" title="点击切换原版和修改版(来自油猴脚本)">');
            $(".changemodebutton").on('click', function click_changemodebutton() {
                if ($("#v_desc").find(".info").is(":visible")) {
                    hide_info();
                    hide_abstract_spread();
                    show_info2();
                    $(".changemodebutton")[0].value = "切换原版";
                } else {
                    show_info();
                    show_abstract_spread();
                    hide_info2();
                    $(".changemodebutton")[0].value = "切换改版";
                }
            });
        }
    }
    function add_info2() {
        if ($("#v_desc").find(".info2").length < 1) {
            $("#v_desc").find(".info").after('<div class="info2"></div>');
            $("#v_desc").find(".info2").width($("#v_desc").find(".info").width());
            hide_info();
            show_info2();
        }
    }


    var startTime = new Date().getTime();
    var interval_total_time=60000;
    var timer= setInterval(function(){
        $(".l-con").on('DOMNodeInserted',main);
        //console.log(new Date().getTime() - startTime);
        if(new Date().getTime() - startTime> interval_total_time){
            clearInterval(timer);
            $(".l-con").off('DOMNodeInserted',main);
            return;
        }
    }, 500);


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