Greasy Fork

Greasy Fork is available in English.

蓝湖

try to take over the world!

当前为 2021-11-11 提交的版本,查看 最新版本

// ==UserScript==
// @name         蓝湖
// @namespace    http://tampermonkey.net/
// @version      0.2.27
// @description  try to take over the world!
// @author       HolmesZhao
// @include        *://lanhuapp.com/web*
// @include        *://lanhu.zuoyebang.cc/web*
// @grant        none
// @require      https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.slim.min.js
// ==/UserScript==

(function() {
    'use strict';

    window.onbeforeunload = function(e) {
        let pid = getQueryVariable("pid")
        console.log(pid)
        if (pid != '' && pid != null) {
            window.localStorage.setItem('lanhu_current_pid', pid)
        }
        return;
    };

    function getQueryVariable(variable) {
        let len = window.location.href.indexOf('?')
        if (len <= 0) { return false; }
        var query = window.location.href.substring(len + 1);
        var vars = query.split("&");
        for (var i=0;i<vars.length;i++) {
            var pair = vars[i].split("=");
            if(pair[0] == variable){return pair[1];}
        }
        return(false);
    }

    function saveUrl() {
        let pid = getQueryVariable("pid")
        let url = $('.mminput')[0].value
        if (url == '' || url == null) {
            alert('请填写 URL')
            return
        }
        let urls = JSON.parse(window.localStorage.getItem('lanhu_old_urls'))
        if (urls == null) { urls = {} }
        urls[pid] = url
        window.localStorage.setItem('lanhu_old_urls', JSON.stringify(urls))
    }

    function clearUrls() {
        window.localStorage.removeItem('lanhu_old_urls')
    }

    function loadUrl() {
        let urls = JSON.parse(window.localStorage.getItem('lanhu_old_urls'))
        let pid = getQueryVariable("pid")
        if (pid == '' || pid == null) {
            pid = window.localStorage.getItem('lanhu_current_pid')
        }
        if (urls == null) {
            alert('请填写 URL 并保存')
            return;
        }
        if (pid == '' || pid == null) {
            alert('pid 不存在')
            return;
        }
        window.location.href = urls[pid]
    }

    function login() {
        let login_url = "http://lanhu.zuoyebang.cc/api/account/login_url"
        let toast = document.getElementsByClassName("lan-toast")
        var needLogin = false
        for (let i = 0; i < toast.length; ++i) {
            let text = toast[i].textContent
            if (text.length > 0) {
                needLogin = true
                break
            }
        }

        if (needLogin) {
            window.localStorage.setItem('lanhu_needAuth', true)
            window.location.href = login_url
            return;
        }

        if (window.localStorage.getItem('lanhu_needAuth') == "true") {
            window.localStorage.setItem('lanhu_needAuth', false)
            loadUrl()
        }
    }

    setTimeout(login, 1000);

    // Your code here...
    var colorJson = {}
    var colorMMJJson = {
        "BackgroundTitle": "FFFFFF",
        "Tip_Strong": "FFA317",
        "Disable": "999999",
        "LinkText": "5373B2",
        "Tip_Success": "07C16A",
        "NavigationBarBackground": "F9F9F9",
        "AccessoryTitle": "666666",
        "MainTitle": "222222",
        "Tip_Failure": "EC705A",
        "Tip_Weak": "FFF6D4",
        "Background": "F8F8F8",
        "Separator": "EEEEEE",
        "Accessory1": "FF7631",
        "Accessory2": "FFBF27",
        "TextButtonMain": "0687FF",
        "LabelSelected": "E9F6FF",
        "LabelNormal": "F7F9FC",
    }
    // 错题 app 的颜色
    var colorStudyJson = {
        "BackgroundTitle": "FFFFFF",
        "Tip_Strong": "FFA317",
        "Disable": "B8BBC2",
        "LinkText": "3777FF",
        "Tip_Success": "07C16A",
        "NavigationBarBackground": "FAFCFF",
        "AccessoryTitle": "8F9396",
        "MainTitle": "292F3D",
        "Tip_Failure": "F8554F",
        "Tip_Weak": "FFF6D4",
        "Background": "F5F7FA",
        "Separator": "EDEEF0",
        "Accessory1": "FF7631",
        "Accessory2": "FFBF27",
        "TextButtonMain": "0687FF",
        "VIPFont": "994D12",
        "LabelSelected": "E9F6FF",
        "LabelNormal": "F7F9FC",
    }

    var fontJson = {
        "MMRegularFontName": "苹方-简 常规体",
        "MMMediumFontName": "苹方-简 中黑体",
        "MMSemiboldFontName": "苹方-简 中粗体"
    }

    var fontSizeJson = {
        "MMSpecialBigFontSize": "34pt",
        "MMSpecialMiddleFontSize": "24pt",
        "MMSpecialSmallFontSize": "21",
        "MMTitleFontSize": "18pt",
        "MMTitleTabSelectFontSize": "16pt",
        "MMTitleTabNormalFontSize": "15pt",
        "MMContentFontSize": "14pt",
        "MMAccessoryFontSize": "13pt",
        "MMDescriptionFontSize": "12pt",
        "MMLabelFontSize": "11pt",
        "MMMarkFontSize": "10pt",
        "MMProgressFontSize": "10pt",
    }

    var color = '';
    var font = '';
    var fontSize = '';
    var app = 'mmj';

    function changeColorText() {
        var copy_texts = document.getElementsByClassName('copy_text');
        for (let index = 0; index < copy_texts.length; index++) {
            const element = copy_texts[index];

            for (const key in colorJson) {
                if (colorJson.hasOwnProperty(key)) {
                    const value = colorJson[key];
                    if (element.innerText.indexOf(value) != -1 ||
                        element.innerText.indexOf(value.toLowerCase()) != -1) {
                        element.innerText = key;
                        color = key;
                        return;
                    }
                }
            }

        }
    }

    function changeFontText() {
        var layer_names = document.getElementsByClassName('layer_name');
        for (let index = 0; index < layer_names.length; index++) {
            const element = layer_names[index];
            for (const key in fontJson) {
                if (fontJson.hasOwnProperty(key)) {
                    const value = fontJson[key];
                    if (element.innerText.indexOf(value) != -1) {
                        element.innerText = key;
                        font = key;
                        return;
                    }
                }
            }
        }
    }

    function changeFontSizeText() {
        var item_titles = document.getElementsByClassName('item_title');
        for (let index = 0; index < item_titles.length; index++) {
            const element = item_titles[index];
            if (element.innerText.indexOf('字号') != -1) {
                let sizeDom = element.parentElement.getElementsByClassName('two')[0];
                for (const key in fontSizeJson) {
                    if (fontSizeJson.hasOwnProperty(key)) {
                        const value = fontSizeJson[key];
                        if (sizeDom.innerText.indexOf(value) != -1) {
                            sizeDom.innerText = key;
                            fontSize = key;
                            return;
                        }
                    }
                }
            }
        }
    }

    function changeText(params) {
        changeColorText();
        changeFontText();
        changeFontSizeText();
    }

    function addButton(name, marginLeft, top, fun) {
        var txt = document.createTextNode(name);
        var btn = document.createElement('button');
        btn.className = 'mmbutton';
        btn.style = "z-index: 9999; font-size: large; position: fixed; top: " + top +"px; left: " + (marginLeft) + "px;border:1px solid black; padding: 0 10px;";
        btn.onclick = fun;
        btn.appendChild(txt);
        document.body.appendChild(btn);
        return btn.offsetWidth + btn.offsetLeft;
    };

    function addTextField(name, marginLeft, top) {
        $('head').append($(`
            <style type="text/css">
            .mminput:active {
                 border:1px solid black;
                 border-color:#58ACFA;
                 -webkit-transition:border linear .2s,-webkit-box-shadow linear .5s;
                 -webkit-box-shadow:0 0 5px #58ACFA;
                 -moz-box-shadow: 0 0 5px #58ACFA;
                 box-shadow:0 0 5px #58ACFA;
            }
            .mminput:focus {
                border:1px solid black;
                border-color:#58ACFA;
                -webkit-transition:border linear .2s,-webkit-box-shadow linear .5s;
                -webkit-box-shadow:0 0 5px #58ACFA;
                -moz-box-shadow: 0 0 5px #58ACFA;
                box-shadow:0 0 5px #58ACFA;
            }
            </style>
        `));
        var input = document.createElement('input');
        input.className = 'mminput';
        input.style = "z-index: 9999; font-size: large; position: fixed; top: "+ top +"px; left: " + (marginLeft) + "px; border:1px solid gray;";
        input.placeholder = name;
        let urls = JSON.parse(window.localStorage.getItem('lanhu_old_urls'));
        let pid = window.localStorage.getItem('lanhu_current_pid');
        if (urls != null && urls[pid]) {
            input.value = urls[pid].split('zuoyebang.cc')[1];
        }
        document.body.appendChild(input);
    }

    function remove() {
        let style = document.getElementsByClassName('mu-paper mu-drawer mu-paper-round mu-paper-2 open right')[0].getAttribute('style');
        if (style.indexOf('display') == -1) {
            drawerStyle = style;
            document.getElementsByClassName('mu-paper mu-drawer mu-paper-round mu-paper-2 open right')[0].setAttribute('style', 'display: none;');
        } else {
            document.getElementsByClassName('mu-paper mu-drawer mu-paper-round mu-paper-2 open right')[0].setAttribute('style', drawerStyle);
        }
    };

    function getFont() {
        font = font.split('Font')[0];
        // [UIFont MMMediumFontWithFontSize:MMTitleFontSize]
        let fontCode = "[UIFont " + font + "FontWithFontSize:"+ fontSize +"]";
        let btn = document.getElementsByClassName('mmbutton')[3];
        let btnText = btn.innerText;
        let textarea = "<textarea id=\"copyFont\" style=\"opacity: 0;\">" + fontCode + "</textarea>";
        btn.innerHTML = textarea;
        var element = document.getElementById("copyFont");
        element.select(); // 选择对象
        document.execCommand("Copy"); // 执行浏览器复制命令
        btn.innerText = btnText
    };
    function getSwiftFont() {
        font = font.split('Font')[0];
        // .mediumFont(with: .Content)
        let fontCode = "." + 
                       font.charAt(2).toLowerCase() + 
                       font.slice(3) + 
                       "Font(with: ." + 
                       fontSize.slice(2, -8) + ")"
        let btn = document.getElementsByClassName('mmbutton')[5];
        let btnText = btn.innerText;
        let textarea = "<textarea id=\"copyFont\" style=\"opacity: 0;\">" + fontCode + "</textarea>";
        btn.innerHTML = textarea;
        var element = document.getElementById("copyFont");
        element.select(); // 选择对象
        document.execCommand("Copy"); // 执行浏览器复制命令
        btn.innerText = btnText
    };

    function getColor() {
        color = color.split('_').join('');
        color = color.charAt(0).toLowerCase() + color.slice(1);
        // UIColor.mm_mainTitleColor
        let colorCode = "UIColor.mm_" + color + "Color";
        let btn = document.getElementsByClassName('mmbutton')[4];
        let btnText = btn.innerText;
        let textarea = "<textarea id=\"copyColor\" style=\"opacity: 0;\">" + colorCode + "</textarea>";
        btn.innerHTML = textarea;
        var element = document.getElementById("copyColor");
        element.select(); // 选择对象
        document.execCommand("Copy"); // 执行浏览器复制命令
        btn.innerText = btnText
    }
    function getSwiftColor() {
        color = color.split('_').join('');
        color = color.charAt(0).toLowerCase() + color.slice(1);
        // .mm_mainTitle()
        let colorCode = "UIColor.mt." + color;
        let btn = document.getElementsByClassName('mmbutton')[6];
        let btnText = btn.innerText;
        let textarea = "<textarea id=\"copyColor\" style=\"opacity: 0;\">" + colorCode + "</textarea>";
        btn.innerHTML = textarea;
        var element = document.getElementById("copyColor");
        element.select(); // 选择对象
        document.execCommand("Copy"); // 执行浏览器复制命令
        btn.innerText = btnText
    }

    function changeApp() {
        let btn = document.getElementsByClassName('mmbutton')[0];
        let key = 'mbkj'
        app = localStorage.getItem(key)
        if (app == '' || app == null) {
            app = 'mmj'   
        }
        switch (app) {
            case 'mmj':
                btn.innerText = '错题APP'
                colorJson = colorStudyJson
                localStorage.setItem(key, 'study');
                break;
            case 'study':
                btn.innerText = '喵喵机'
                colorJson = colorMMJJson
                localStorage.setItem(key, 'mmj');
                break;
            default:
                break;
        }
    }

    function appName() {
        let key = 'mbkj'
        app = localStorage.getItem(key)
        if (app == '' || app == null) {
            app = 'mmj'   
        }
        switch (app) {
            case 'mmj':
                colorJson = colorMMJJson
                return '喵喵机'
            case 'study':
                colorJson = colorStudyJson
                return '错题APP'
            default:
                return ""
        }
    }

    var drawerStyle = '';
    var btnLeft = screen.width/5;
    var marginLeft = 30;
    btnLeft += marginLeft;
    btnLeft = addButton(appName(), btnLeft, 0, changeApp);
    btnLeft += marginLeft;
    addTextField("输入网址", btnLeft, 40);
    btnLeft = addButton('点击开关抽屉', btnLeft, 0, remove);
    btnLeft += marginLeft;
    addButton('SaveUrl', btnLeft + 50, 40, saveUrl);
    btnLeft = addButton('点击更换文字', btnLeft, 0, changeText);
    btnLeft += marginLeft;
    addButton('LoadUrl', btnLeft, 40, loadUrl);
    btnLeft = addButton('OC 字体', btnLeft, 0, getFont);
    btnLeft += marginLeft;
    addButton('ClearAllUrls', btnLeft, 40, clearUrls);
    btnLeft = addButton('OC 颜色', btnLeft, 0, getColor);
    btnLeft += marginLeft;
    btnLeft = addButton('Swift 字体', btnLeft, 0, getSwiftFont);
    btnLeft += marginLeft;
    btnLeft = addButton('Swift 颜色', btnLeft, 0, getSwiftColor);
})();