Greasy Fork is available in English.

TitleSearch

abooky添加标题到优书网的跳转按钮

// ==UserScript==
// @name         TitleSearch
// @namespace    http://tampermonkey.net/
// @version      5.07
// @description  abooky添加标题到优书网的跳转按钮
// @author        backrock12
// @match        *://www.abooky.com/*
// @match        *://www.yousuu.com/search*
// @match        *://dushuxiaozi.com/category*
// @match        *://www.1020ssl.1111cheap.com/forum.php?*
// @require      http://libs.baidu.com/jquery/2.0.0/jquery.min.js
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM_openInTab
// @grant        GM_addValueChangeListener
// @grant        window.close
// ==/UserScript==

(function () {
  "use strict";
  var $ = $ || window.$;
  const urllist = [
    {
      name: "abooky",
      url: /www\.abooky\.com/,
      titleid: ".ts",
      nosign: "",
      autojump: true,
    },
    {
      name: "abooky",
      url: /1111cheap/,
      titleid: "#thread_subject",
      nosign: "",
      autojump: true,
    },
  ];

  const color_ok = "#87CEFA";
  const color_err = "#db7093";
  const color_def = "#EEE";
  const config_name = "TITLESEARCH_SETTING";
  let booktitle = null;

  var run_mk = false;
  function gettitle(t, str1, str2) {
    let lnum, rnum, title;
    lnum = t.indexOf(str1);
    rnum = t.indexOf(str2);
    if (lnum < 0) lnum = 0;
    if (rnum < 0) rnum = 0;
    if (lnum > 0 || rnum > 0) {
      title = t.substring(lnum + 1, rnum);
    }
    if (str1 == null && str2) {
      title = t;
      if (str1 == null && rnum > 0) {
        title = title.substring(0, rnum);
      }
    }
    if (str2 == null && str1) {
      title = t;
      if (str2 == null && lnum > 0) {
        title = title.substring(lnum + 1);
      }
    }

    if (title) title = title.replace("[TXT格式]", "").replace("\n", "");
    if (title) title = title.replace("(完结)", "").replace("\n", "");

    return title;
  }

  function addbutton(t, autojump) {
    if (t) {
      console.log(t);
      let title = gettitle(t, "《", "》");
      if (!title) {
        title = gettitle(t, "<", ">");
      }
      if (!title) {
        title = gettitle(t, "]", "⊙");
      }
      if (!title) {
        title = gettitle(t, "", "作者:");
      }
      if (!title) {
        title = gettitle(t, "", "作者");
      }
      if (!title) {
        title = gettitle(t, "", "¥");
      }
      if (!title) {
        title = gettitle(t, "", " ");
      }
      if (!title) {
        title = gettitle(t, "", "+");
      }

      if (title) {
        title = gettitle(title, null, "+");
      }

      console.log(title);
      if (title) {
        booktitle = title;
        const re = getlog(title);
        console.log("re", re);

        let background_color = color_def;
        let href =
          "http://www.yousuu.com/search/?search_type=title&search_value=" +
          title +
          "#TitleSearch";
        if (re == "null") {
          background_color = color_def;
        } else if (re == "false") {
          background_color = color_err;
        } else if (re) {
          href = re;
          background_color = color_ok;
        }

        let b = $("<button></button>");
        b.text("优书网");
        b.css({
          color: "#000000",
          "background-color": background_color,
          "border-color": color_def,
          "font-weight": " 300",
          "font-size": " 16px",
          "text-decoration": " none",
          "text-align": " center",
          "line-height": " 25px",
          height: " 25px",
          padding: " 0 15px",
          margin: " 0",
          display: " inline-block",
          appearance: " none",
          cursor: " pointer",
          border: " none",
          "-webkit-box-sizing": " border-box",
          "-moz-box-sizing": " border-box",
          "box-sizing": " border-box",
          "-webkit-transition-property": " all",
          "transition-property": " all",
          "-webkit-transition-duration": " .3s",
          "transition-duration": " .3s",
          "border-radius": " 4px",
        });

        b.click(function () {
          // var content = document.createElement("a");
          //  content.href = href;
          //  content.target = "_blank";
          // document.body.appendChild(content);
          //  content.click();
          //  document.body.removeChild(content);
          GM_openInTab(href, true);
        });

        GM_addValueChangeListener(
          config_name,
          function (name, old_value, new_value, remote) {
            const list_re = getlog_config(booktitle, new_value);

            let background_color = "#EEE";
            if (list_re == "null") {
              background_color = "#EEE";
            } else if (list_re == "false") {
              background_color = color_err;
            } else if (list_re) {
              background_color = color_ok;
            }
            b.css({
              "background-color": background_color,
            });
          }
        );

        if (autojump && re == "null") {
          //b.click();
          GM_openInTab(href, true);
        }
        return b;
      }
    }
  }

  function addDownbutton(t) {
    if (t) {
      console.log(t);
      let title = gettitle(t, "《", "》");
      if (!title) {
        title = gettitle(t, "<", ">");
      }
      if (!title) {
        title = gettitle(t, "]", "⊙");
      }

      console.log(title);
      if (title) {
        let b = $("<button></button>");
        b.text("下载");
        b.css({
          color: " #666",
          "background-color": color_def,
          "border-color": color_def,
          "font-weight": " 300",
          "font-size": " 16px",
          "text-decoration": " none",
          "text-align": " center",
          "line-height": " 25px",
          height: " 25px",
          padding: " 0 15px",
          margin: " 0",
          display: " inline-block",
          appearance: " none",
          cursor: " pointer",
          border: " none",
          "-webkit-box-sizing": " border-box",
          "-moz-box-sizing": " border-box",
          "box-sizing": " border-box",
          "-webkit-transition-property": " all",
          "transition-property": " all",
          "-webkit-transition-duration": " .3s",
          "transition-duration": " .3s",
          "border-radius": " 4px",
        });
        b.click(function () {
          var content = document.createElement("a");
          content.href =
            "https://dushuxiaozi.com/wp-content/uploads/2019/book/" +
            title +
            ".zip";
          content.target = "_blank";
          document.body.appendChild(content);
          content.click();
          document.body.removeChild(content);
        });

        return b;
      }
    }
  }

  //標題跳轉按鈕
  function make(obj) {
    console.log(location.href)
    if (obj.url.test(location.href)) {
      let t = $(obj.titleid).text();

      console.log(location.href + " ok " + t)

      let b = addbutton(t, obj.autojump);
      if (b) $(obj.titleid).after(b);
    }
  }

  /**
   * @description : 根据ID检查元素是否可见,再点击
   * @param        {*} cssid
   * @return       {*}
   */
  function loop(cssid) {
    function checkVisible(elm) {
      var rect = elm.getBoundingClientRect();
      var viewHeight = Math.max(
        document.documentElement.clientHeight,
        window.innerHeight
      );
      return !(rect.bottom < 0 || rect.top - viewHeight >= 0);
    }

    const s = document.querySelector(cssid);
    if (s) {
      let r = checkVisible(s);
      if (r) {
        s.click();
        // serch();
      }
    }
  }

  //優書網自動點擊
  function autoclick() {
    console.log('autoclick');
    let num = 0;
    const _Interval = setInterval(() => {
      let books = $(".list-card-layout");

      if (books.length == 0) books = $(".result-item-layout");

      const bookname = books.find(".book-name");

      console.log(bookname);

      if (bookname.length == 1) {
        if (bookname.length == 1) {
          if (bookname[0].href) {
            GM_openInTab(bookname[0].href, true);
          } else {
            bookname[0].click();
          }

          addlog(true, bookname[0].href);

          clearInterval(_Interval);
          setTimeout(function () {
            window.close();
          }, 200);
        }
      } else if (bookname.length > 1) {
        bookname.click((f) => {
          const surl = f.currentTarget.href;
          console.log("bookname.click");
          addlog(true, surl);
        });

        const BookCoverImage = books.find(".card-bookInfo-cover a");
        console.log(BookCoverImage);
        BookCoverImage.click((f) => {
          const surl = f.currentTarget.href;
          console.log("BookCoverImage.click");
          addlog(true, surl);
        });

        clearInterval(_Interval);
      } else {
        if (window.document.body.innerText.indexOf("找不到你要的结果:-)") > 0) {
          addlog(false, null);
          clearInterval(_Interval);
          window.close();
        }

        if (num > 10) {
          clearInterval(_Interval);
          window.close();
        }

        num++;
      }
    }, 300);
  }

  function getlog(tname) {
    let set_obj = GM_getValue(config_name, null);
    return getlog_config(tname, set_obj);
  }

  function getlog_config(tname, set_obj) {
    console.log(set_obj);
    if (!set_obj) {
      set_obj = {};
    }

    let re;
    const obj = set_obj[tname];
    console.log("obj", obj);

    if (!obj) {
      re = "null";
    } else if (obj.found_mk == "true" && obj.url) {
      re = obj.url;
    } else if (obj.found_mk == "false") {
      re = "false";
    } else {
      re = "null";
    }
    return re;
  }

  function addlog(is_found_mk, is_url) {
    // const name = "value_test";
    // const is_found_mk = true;
    // const is_url = "";

    const tname = $(
      ".default-layout > div:nth-child(1) > header:nth-child(1) > input:nth-child(1)"
    ).val();

    const nowdate = new Date().toLocaleString();
    let set_obj = GM_getValue(config_name, null);
    console.log(set_obj);
    if (!set_obj) {
      set_obj = {};
    }

    const obj = set_obj[tname];
    let is_count = 1;
    if (!obj) {
      is_count = 1;
    } else {
      is_count = obj.count + 1;
    }

    set_obj[tname] = {
      url: is_url,
      modi_time: nowdate,
      count: is_count,
      found_mk: is_found_mk ? "true" : "false",
    };

    GM_setValue(config_name, set_obj);
    console.log(
      "is_found_mk :" + is_found_mk + "  is_url: " + is_url + "  name: " + name
    );
  }

  function dushuxiaozi() {
    var count = 0;
    var isok = false;
    function serch() {
      var list = document.querySelectorAll("#main  h2 > a");
      console.log(list);
      if (count != list.length && !isok) {
        isok = true;
        for (var i = 0; i < list.length; i++) {
          let t = $(list[i]).text();
          console.log(t);
          if (list[i].getAttribute("titlesearch_mk") != "true") {
            let b = addbutton(t);
            let b2 = addDownbutton(t);
            if (b) {
              $(list[i]).after(b2);
              $(list[i]).after(b);
              list[i].parentNode.style.cssText =
                "font-size: 18px;width: 750px;";
              list[i].setAttribute("titlesearch_mk", "true");
            }
          }
        }
        isok = false;
      }
    }

    setInterval(() => loop(".ias-trigger-next"), 2000);
    serch();

    document.querySelector("#main").addEventListener("DOMNodeInserted", serch);
  }

  function run() {
    console.log(location.hash)
    if (location.hash && (location.hash == "#TitleSearch" || location.hash == "#TitleSearch=")) {
      setTimeout(autoclick, 1100);
    } else {
      //   if (/dushuxiaozi/.test(location.href)) {
      //     dushuxiaozi();
      //   } else {
      urllist.forEach(make);
      //   }
    }

    //自動滾動
    if (/www\.abooky\.com/.test(location.href)) {
      $(window).scroll(function () {
        var scrollTop = $(this).scrollTop();
        var scrollHeight = $(document).height();
        var windowHeight = $(this).height();
        if (scrollTop + windowHeight >= scrollHeight - 350) {
          if (!run_mk) {
            run_mk = true;
            loop("#autopbn");
            run_mk = false;
          }
        }
      });
    }
  }

  run();
})();