duckduckgo script

make duckduckgo convenient

// ==UserScript==
// @name         duckduckgo script
// @namespace    http://duckduckgo.com/
// @version      2.0
// @description  make duckduckgo convenient
// @author       charles
// @match        https://duckduckgo.com/?q=*
// @match        https://duckduckgo.com/?t=*
// @icon         https://www.google.com/s2/favicons?domain=duckduckgo.com
// @grant        GM_addStyle
// ==/UserScript==

GM_addStyle(`
.result__title > .result__a,.result__title > .result__a:hover, .result__title > .result__a:active {
    color: rgb(105, 151, 244) !important;
}
.result__title > .result__a:visited, .result__title > .result__a:visited:hover {
    color: rgb(202, 97, 255) !important;
}
.result__body > .result__snippet > b {
    color: red !important;
}
.highlight{
  cursor: inherit !important;
}
`);

(function () {
    "use strict";

    // Your code here...
    let pre_result_length = 0;
    let counter = 0;
    let change_result_node = function () {
        let result = document.getElementsByClassName("results_links_deep");
        let links = document.getElementById("links");
        if (result.length <= pre_result_length && counter < 100) {
            setTimeout(() => {
                counter = counter + 1;
                change_result_node();
            }, 50);
        } else {
            counter = 0;
            pre_result_length = result.length;
            for (let i = 0; i < result.length; i++) {
                let clone_result = result[i].cloneNode(true);
                let img_parent = result[i].getElementsByClassName(
                    "result__extras__url"
                )[0];
                let img = img_parent.getElementsByClassName("result__icon")[0];
                clone_result
                    .getElementsByClassName("result__extras__url")[0]
                    .replaceChild(
                        img,
                        clone_result.getElementsByClassName("result__icon")[0]
                    );
                links.replaceChild(clone_result, result[i]);
            }
            add_listener_to_more_result(0);
        }
    };
    let add_listener_to_more_result = function (time) {
        let more_result_node = document.getElementsByClassName("result--more__btn");
        if (more_result_node[0] === undefined && time < 100) {
            setTimeout(() => {
                add_listener_to_more_result(time + 1);
            }, 50);
        } else if (more_result_node[0] !== undefined) {
            more_result_node[0].addEventListener("click", () => {
                change_result_node();
                add_side_bar();
            });
        }
    };
    let link_list = undefined;
    let record_add_side_bar_index = 0;
    let add_side_bar = function () {
        let width = document.querySelector(".sidebar-modules").getBoundingClientRect().width;
        let result_extra = document.querySelectorAll(".results_links_deep");
        let result_a = document.querySelectorAll(".result__title");
        if (result_extra.length <= record_add_side_bar_index && counter < 100) {
            setTimeout(() => {
                counter = counter + 1;
                add_side_bar();
            }, 50);
        } else {
            let add_div_function = () => {
                let ul = link_list.querySelector(".link_list");
                if (ul == null) {
                    ul = document.createElement("ul")
                    ul.setAttribute("class", "link_list");
                }
                for (let i = record_add_side_bar_index; i < result_extra.length; i++) {
                    let div = document.createElement("div");
                    let item = result_extra[i].querySelector(".result__extras__url").cloneNode(true);
                    let icon = item.querySelector("span").querySelector("a").querySelector("img");
                    let data_src = icon.getAttribute("data-src");
                    if (data_src != null) {
                        icon.src = data_src;
                    }
                    let title = result_a[i].cloneNode(true);
                    div.appendChild(item);
                    div.appendChild(title);
                    ul.appendChild(div);
                }
                record_add_side_bar_index = result_extra.length;
                link_list.appendChild(ul);
            }
            if (link_list === undefined) {
                link_list = document.createElement("div");
                link_list.className = "link_list";
                link_list.style.width = width.toString() + "px";
                link_list.style.border = "1px solid";
                link_list.style.borderRadius = "5px";
                link_list.style.maxHeight = "300px";
                link_list.style.zIndex = "999";
                link_list.style.overflow = "auto";
                add_div_function();
                side_bar_div.appendChild(link_list);
            } else {
                add_div_function()
            }
        }
    }
    const side_bar_div = document.querySelector(".results--sidebar");
    const duckbar = document.querySelector(".zcm-wrap-wrap");
    window.onscroll = function () {
        let side_module = side_bar_div.querySelector(".module");
        if (side_module == null)
            side_module = side_bar_div.querySelector(".sidebar-modules");
        if (link_list !== undefined && side_module != null) {
            let top_div = side_module.getBoundingClientRect();
            let zoom = duckbar.getBoundingClientRect();
            if (top_div.bottom < 0 || top_div.bottom < zoom.bottom) {
                link_list.style.position = "fixed";
                if (zoom.bottom >= 0) {
                    link_list.style.top = (zoom.bottom + 10) + "px";
                } else {
                    link_list.style.top = "0";
                }
            } else {
                link_list.style.position = "relative";
                link_list.style.top = "0";
            }
        }
    };
    document.onreadystatechange = function () {
        if (document.readyState === "complete") {
            change_result_node();
            add_side_bar();
        }
    };
})();