Greasy Fork

Greasy Fork is available in English.

南+跳转自己域名对应的其他资源网站

针对不同域名的网站,替换成自己使用的域名再打开。

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
/*jshint esversion: 6 */
// @name         南+跳转自己域名对应的其他资源网站
// @namespace    http://tampermonkey.net/dva
// @version      1.1.1
// @description  针对不同域名的网站,替换成自己使用的域名再打开。
// @author       Dva
// @match        *://*.south-plus.net/read.php?tid*
// @match        *://*.north-plus.net/read.php?tid*
// @match        *://*.summer-plus.net/read.php?tid*
// @match        *://*.level-plus.net/read.php?tid*
// @match        *://*.south-plus.org/read.php?tid*
// @match        *://*.white-plus.net/read.php?tid*
// @match        *://*.snow-plus.net/read.php?tid*
// @match        *://*.imoutolove.me/read.php?tid*
// @match        *://*.spring-plus.net/read.php?tid*
// @grant        GM_setValue
// @grant        GM_getValue
// ==/UserScript==

(function() {
    'use strict';

    // 把"hjd"冒号右边的双引号里替换成你用的2048域名,把"ch"冒号右边的双引号里替换成你用的村花地址,如果你使用的和我的一样则不用替换
    const doms={
        "hjd":"hp.ytu7.life", //2048网址 https://替换为中间这部分/2048/
        "ch":"www.cunhua.sbs", //村花网址 https://替换为中间这部分/thread/
    };
    const regs={
        "hjd":"2048",
        "ch1":"cunhua",
        "ch2":"huo.wtf",
    }
    const re = /\d{4,}\d/g;

    const aCss = {
        "cursor": "pointer",
        "textDecoration": "none",
        "color": "black",
    }
    const fontCss = {
        "fontWeight": "600",
        "fontFamily": "SF Pro Text,SF Pro Icons,Helvetica Neue,Helvetica,Arial,sans-serif",
    }
    const lang = {
        "one":"打开",
        "all":"打开所有",
    }

    let readTopic = document.getElementById("read_tpc");
    let links = readTopic.getElementsByTagName("a");
    if(links.length > 0){
        let hasBasic = false;
        for(let l of links){
             if(isBasic(l)){
                 hasBasic = true;
             }
        }
        if(hasBasic){
            //添加打开全部链接的按钮
            let btnCss = {
                "marginLeft":"10px",
                "fontSize":"15px",
                "position":"relative",
            }
            const topic = ele("subject_tpc").parentNode;
            const allBtn = create("a",lang.all);
            wrapEle(allBtn,btnCss)
            allBtn.style.top = "1px"
            allBtn.onclick=function(){
                openAll(links);
            }
            topic.appendChild(allBtn);
            //添加每个打开链接的按钮
            for(let l=0;l<links.length;l++){
                if(isBasic(links[l])){
                    let btn = create("a",lang.one);
                    wrapEle(btn,btnCss)
                    btn.style.top = "-1px"
                    btn.onclick=function(){
                        openSingle(links[l]);
                    };
                    readTopic.insertBefore(btn,links[l].nextSibling);
                }
            }
        }
    }
    //打开全部链接
    function openAll(links){
        for(let link of links){
            openSingle(link)
        }
    }

    //打开单个链接
    function openSingle(link){
        if(isHjd(link)){
            window.open(link.href.replace(link.href.split("/")[2],doms.hjd));
        }else if(isCh(link)){
            window.open("https://"+doms.ch+"/thread-"+link.href.match(re)[0]+"-1-1.html");
        }
    }

    //判断是否是hjd的链接
    function isHjd(link){
        return link.href.split("/")[3]==regs.hjd;
    }

    //判断是否是cunhua
    function isCh(link){
        let reg1 = new RegExp(regs.ch1);
        let reg2 = new RegExp(regs.ch2);
        return reg1.test(link) || reg2.test(link);
    }

    //判断是否是2048或cunhua的帖子
    function isBasic(link){
        return isHjd(link) || isCh(link);
    }
    //设置hover
    function hover(ele, basic = "black", dest = "rgb(52, 152, 219)") {
        ele.onmousemove = function () {
            if (this.style.color == basic) {
                this.style.color = dest;
            }
        }
        ele.onmouseleave = function () {
            if (this.style.color == dest) {
                this.style.color = basic;
            }
        }
    }
    function hovers(eles, basic = "black", dest = "rgb(52, 152, 219)") {
        eles.forEach(ele => {
            hover(ele, basic, dest)
        });
    }
    function create(type, text = null) {
        let ele = document.createElement(type)
        if (text) ele.textContent = text;
        return ele;
    }
    function setCss(ele, styles=null) {
        if(!styles) return;
        for (var i in styles) {
            ele.style[i] = styles[i];
        }
    }
    function setCsses(eles, styles) {
        eles.forEach(ele => {
            setCss(ele, styles)
        });
    }
    function setFont(ele) {
        setCss(ele, fontCss)
    }
    function wrapEle(ele, styles=null, basic = "black", dest = "rgb(52, 152, 219)") {
        setFont(ele)
        setCss(ele, aCss)
        setCss(ele, styles)
        hover(ele, basic, dest)
    }
    function ele(id, parent = null) {
        return parent ? parent.getElementById(id) : document.getElementById(id)
    }
    function eles(name, type = "cls", parent = null) {
        if (parent) {
            switch (type) {
                case "cls":
                    return parent.getElementsByClassName(name);
                case "name":
                    return parent.getElementsByName(name);
                case "tag":
                    return parent.getElementsByTagName(name);
            }
        } else {
            switch (type) {
                case "cls":
                    return document.getElementsByClassName(name);
                case "name":
                    return document.getElementsByName(name);
                case "tag":
                    return document.getElementsByTagName(name);
            }
        }
    }
})();