FKCSDN

it's a script to blocked The CSDN website like https://www.csdn.net/ in most broswers because the website is so disgusting

K instalaci tototo skriptu si budete muset nainstalovat rozšíření jako Tampermonkey, Greasemonkey nebo Violentmonkey.

K instalaci tohoto skriptu si budete muset nainstalovat rozšíření jako Tampermonkey nebo Violentmonkey.

K instalaci tohoto skriptu si budete muset nainstalovat rozšíření jako Tampermonkey nebo Violentmonkey.

K instalaci tohoto skriptu si budete muset nainstalovat rozšíření jako Tampermonkey nebo Userscripts.

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

K instalaci tohoto skriptu si budete muset nainstalovat manažer uživatelských skriptů.

(Už mám manažer uživatelských skriptů, nechte mě ho nainstalovat!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(Už mám manažer uživatelských stylů, nechte mě ho nainstalovat!)

// ==UserScript==
// @name         FKCSDN
// @namespace    http://tampermonkey.net/
// @version      2.2
// @description  it's a script to blocked The CSDN website like https://www.csdn.net/  in most broswers  because the website is so disgusting
// @description  在大多数都主流浏览器中屏蔽了 CSDN 站点,所以起名 FKCSDN
// @include      *://www.baidu.com/*
// @include      *://www.dogedoge.com/*
// @include      *://www.so.com/*
// @include      *://www.sogou.com/*
// @include      *://www.google.com/*
// @include      *://duckduckgo.com/*
// @include      *.bing.com/*

// @grant        none
// ==/UserScript==


(function() {
    'use strict';
    var move = false
    var insertHtml = `
     <div style="" class="__fixed-btn">
        <div class="fk-box">
            <div class="fk-csdn">FK CSDN</div>
            <label class="fk-item">
                <input type="checkbox" name="fk-csdn" checked="true">
                <div class="slider round"></div>
            </label>
        </div>
    </div>`

    var insertStyle = `<style type="text/css">
       .__fixed-btn {
       -webkit-user-select: none;
        position: fixed;
        top: 150px;
        left: 0;
        border-radius: 50px;
        width: 100px;
        height: 100px;
        background-color: #f2f8ff;
        z-index: 10000;
    }

    .slider.round {
        border-radius: 34px;
    }

    .slider {
        position: absolute;
        cursor: pointer;
        width: 40px;
        height: 20px;
        top: 0;
        left: 0;
        right: 0;
        bottom: 0;
        background-color: #ccc;
        -webkit-transition: .4s;
        transition: .4s;
    }

    .slider.round:before {
        border-radius: 50%;
    }

    .slider:before {
        position: absolute;
        content: "";
        height: 16px;
        width: 16px;
        left: 2px;
        bottom: 2px;
        background-color: white;
        -webkit-transition: .4s;
        transition: .4s;
    }

    .fk-item input {
        display: none;
    }

    .fk-item {
        position: absolute;
        right: 0;
        top: 10px;
        display: inline-block;
        vertical-align: middle;
        width: 40px;
        height: 20px;
        top: 6px;
    }

    input:checked+.slider {
        background-color: #2196F3;
    }

    input:checked+.slider:before {
        -webkit-transform: translateX(20px);
        -ms-transform: translateX(20px);
        transform: translateX(20px);
    }

    .fk-csdn {
        color: #000;
        font-weight: bold;
        font-size: 12px;
        vertical-align: middle;
    }

    .fk-box {
        position: relative;
        height: 30px;
        line-height: 30px;
    }

    .fk-box:first-child {
        margin-top: 20px;
    }
    </style>
    `
    document.querySelector('body').insertAdjacentHTML('afterbegin', insertHtml);
    document.querySelector('head').insertAdjacentHTML('afterbegin', insertStyle);

    var searchEngineCode = '00';
    var fixedBtn = document.querySelector('.__fixed-btn');
    var inputBox = document.querySelector('input[type=checkbox]');
    var searchBtn = document;
    var searchInput = document;

    // 1 google 2 duck 3 baidu 4 sogo 5 360 6 doge 7 bing
    switch (window.location.host) {
        case 'www.google.com':
            searchEngineCode = '01';
            searchBtn = document.querySelector('.Tg7LZd');
            searchInput = document.querySelector('.gLFyf');
            break;
        case 'duckduckgo.com':
            searchEngineCode = '02';
            searchBtn = document.querySelector('#search_button');
            searchInput = document.querySelector('#search_form_input');
            break;
        case 'www.baidu.com':
            searchEngineCode = '03';
            searchBtn = document.querySelector('#su');
            searchInput = document.querySelector('#kw');
            document.querySelector('#wrapper').insertAdjacentHTML('afterbegin', insertStyle);
            break;
        case 'www.sogou.com':
            searchEngineCode = '04';
            searchBtn = document.querySelector('#searchBtn');
            searchInput = document.querySelector('#upquery');
            break;
        case 'www.so.com':
            searchEngineCode = '05';
            searchBtn = document.querySelector('#su');
            searchInput = document.querySelector('#keyword');
            break;
        case 'www.dogedoge.com':
            searchEngineCode = '06';
            searchBtn = document.querySelector('#search_button');
            searchInput = document.querySelector('#search_form_input');
            break;
        case 'cn.bing.com':
            searchEngineCode = '07';
            searchBtn = document.querySelector('#sb_form_go');
            searchInput = document.querySelector('#sb_form_q');
            break;
        case 'www.bing.com':
            searchEngineCode = '07';
            searchBtn = document.querySelector('#sb_form_go');
            searchInput = document.querySelector('#sb_form_q');
            break;
        default:
            searchEngineCode = '00';
            console.log('不支持此搜索引擎')
            break;
    }

    var isChecked = window.localStorage.getItem('FKCSDNCheck') == 'false' ? false : true;
    inputBox.checked = isChecked;

    var mouseDownClientX, mouseDownClientY, mouseDownOffsetLeft, mouseDownOffsetRight,mouseChangeClientX,mouseChangeClientY;
    var windowWidth = window.innerWidth,
        windowHeight = window.innerHeight
    fixedBtn.addEventListener("mousedown", function(e) {
        fixedBtn.style.transition  = '';
        move = true;
        mouseDownClientX = e.clientX;
        mouseDownClientY = e.clientY;
        mouseDownOffsetLeft = fixedBtn.offsetLeft;
        mouseDownOffsetRight = fixedBtn.offsetTop;
    });
    document.addEventListener("mousemove", function(e) {
        if (move == false) {
            return;
        }
        var x = e.clientX;
        var y = e.clientY;
        fixedBtn.style.left = x - (mouseDownClientX - mouseDownOffsetLeft) + "px";
        fixedBtn.style.top = y - (mouseDownClientY - mouseDownOffsetRight) + "px";
    });

    fixedBtn.addEventListener("mouseup", function(e) {
        move = false;
        mouseChangeClientX = e.clientX;
        mouseChangeClientY = e.clientY;
        fixedBtn.style.transition = 'all .3s';
        if(mouseChangeClientX < windowWidth/2){
            fixedBtn.style.left = 0;
        }else {
            fixedBtn.style.left = windowWidth - fixedBtn.clientWidth + 'px';
        }
        if(fixedBtn.offsetTop < 0){
            fixedBtn.style.top = 0;
        }else if(fixedBtn.offsetTop + fixedBtn.clientHeight > windowHeight) {
            fixedBtn.style.top = windowHeight- fixedBtn.clientHeight  + 'px';
        }
    });
    inputBox.addEventListener('change', function() {
        var name = this.getAttribute('name');
        var value = this.getAttribute('checked');
        var ele = this;
        switch (name) {
            case 'fk-csdn':
                FKCSDN(name, value, ele);
                break
            case '':
                break;
            default:
                break;
        }
    })
    searchBtn && searchBtn.addEventListener('click', function(e) {
        if (searchEngineCode == '00') return;
        var searchText = searchInput.value;
        var searchArr = searchText.split(' ');
        var hasValue = false;
        for (var key in searchArr) {
            if (searchArr[key] == '-site:csdn.net') {
                hasValue = true;
            }
        }
        if (!hasValue && isChecked) {
            searchInput.value = searchText + ' -site:csdn.net';
        }
    })

    function FKCSDN(name, value, ele) {
        if (searchEngineCode == '00') return;
        isChecked = ele.checked == true;
        window.localStorage.setItem('FKCSDNCheck', isChecked)
        if (!isChecked) {
            var searchText = searchInput.value;
            var searchArr = searchText.split(' ');
            var newArr = [];
            if (searchArr.includes('-site:csdn.net')) {
                searchArr.forEach((value, index) => {
                    if (value !== '-site:csdn.net') {
                        newArr.push(value);
                    }
                })
                searchInput.value = newArr.join(' ');
            }
        }
        searchBtn.click();

    }

})();