Exhentai better experience

This script will bring a better experience for exhentai

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name          Exhentai better experience
// @namespace discuz
// @description This script will bring a better experience for exhentai
// @include        http*://exhentai.org/*
// @include        http*://e-hentai.org/*
// @require      https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.min.js
// @version 1.92
// ==/UserScript==

// 默认收藏夹值,修改数字可更改默认收藏夹
var default_favcat = 0

// gallery detail page
if (/\/g\//.test(location.pathname)) {
  // enable tag link
  var xpath = "//div[@class='gt' or @class='gtl']/a[@onclick]";
  var nodes = document.evaluate(
    xpath,
    document,
    null,
    XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,
    null
  );
  var node = null;
  var index = 0;
  while ((node = nodes.snapshotItem(index))) {
    node.removeAttribute("onclick");
    index++;
  }

  var fav_url = popbase + "addfav"; // popbase is from exhentai js file

  // fav operation without popup
  function fav_post() {
    if (
      $("#favoritelink").find("img").length
    ) {
      $.post(fav_url, {
        favcat: default_favcat,
        favnote: "",
        apply: "Add to Favorites",
        update: "1",
      }).done(function () {
        if (document.getElementById("favoritelink") != undefined) {
          document.getElementById("fav").innerHTML =
            '<div class="i" style="background-image:url(https://exhentai.org/img/fav.png); background-position:0px -2px; margin-left:10px" title="Favorites '+default_favcat+'"></div>';
          document.getElementById("favoritelink").innerHTML = "Favorites " + default_favcat;
        }
      });
    } else {
      $.post(fav_url, {
        favcat: "favdel",
        favnote: "",
        apply: "Apply Changes",
        update: "1",
      }).done(function () {
        if (document.getElementById("favoritelink") != undefined) {
          document.getElementById("fav").innerHTML = "";
          document.getElementById("favoritelink").innerHTML =
            '<img src="https://exhentai.org/img/mr.gif" /> Add to Favorites';
        }
      });
    }
  }

  var gdf_div = document.querySelector("#gdf");
  gdf_div.removeAttribute("onclick");
  gdf_div.addEventListener("click", fav_post, false);

}

// general gallery pages
if (/(\/g\/)|(watched)|(popular)|(favorites)|()/.test(location.pathname)) {

  // global search
  var nb_div = document.querySelector("#nb");

  function createElementFromHTML(htmlString) {
    var div = document.createElement("div");
    div.innerHTML = htmlString.trim();
    return div.firstChild;
  }

  function global_search() {
    var s_content = document.getElementById("g_search");
    window.location.href = "/?f_search=" + s_content.value + "&advsearch=1&f_sname=on&f_stags=on&f_sh=on&f_spf=&f_spt="; //relative to domain
  }

  var html_string =
      '<p class="nopm"><input type="text" id="g_search" name="g_search" placeholder="Search expunged galleries" size="50" maxlength="200"><input type="submit" id="g_search_btn" value="Apply Filter"></p>';
  var search_bar = createElementFromHTML(html_string);
  nb_div.appendChild(search_bar);

  var g_search_btn = document.querySelector("#g_search_btn");
  g_search_btn.addEventListener("click", global_search, false);
  $("#g_search").keydown(function (e){
    if(e.keyCode == 13){
      global_search();}
  })

  // global search only appears when hovering
  $("#nb").css("transition", "0.2s")
  var global_s_style = "<style>#nb:hover{max-height:47px} #nb { max-height: 47px};</style>";
  $("head").append(global_s_style);

  // quick fav operation, show favcat num
  function fav_post_pages() {
    $('[id*="posted_"]').each(function() {
      var date_div = $(this);
      var favcat_tag_id = date_div.attr("id") + "_favcat"
      var favcat_btn_id = date_div.attr("id")+ "_favbtn"
      var fav_btn_content = `
            <div class="cs ct2" id = ${favcat_btn_id} style="
            position: absolute;
            top: -2px;
            left: -36px;
            width: 30px;
            height: 18px;
            line-height: 18px;
            background: #1c563dcc;
            border-color: #671c17;
            ">` + "收藏" + "</div>";
          // If favoriite, change style, show favcat num
          if (date_div.attr("title")){
            var title = date_div.attr("title")
            var favcat = title.slice(-1)
            var style = date_div.attr("style")
            var border_color = date_div.css("border-color")
            // var background_color = date_div.css("background-color")
            var background_color = border_color
            var style_for_fav1 = "border-color:#e4ee2c;background-color:rgb(70 141 220 / 85%)"
            if (favcat == "0"){background_color="#309427"; border_color="#671c17"; style=style_for_fav1}
            date_div.attr("style", style);
            date_div.attr("title", title);
            var favcat_tag_content = `
                <div class="cs ct2" id = ${favcat_tag_id} style="
                position: absolute;
                top: -2px;
                left: -36px;
                width: 30px;
                height: 18px;
                line-height: 18px;
                background: ${background_color};
                border-color: ${border_color};
                ">fav` + favcat + "</div>";
              date_div.append(favcat_tag_content)
              // debugger;
            } else {
              date_div.append(fav_btn_content)
            }
          var popUpStr = $(this).attr("onclick");
          var fav_url = popUpStr.slice(7, -10);
          $(this).removeAttr("onclick");
          $(this).click(function(){
            if (! $(this).attr("title")) {
              $.post(fav_url, {
                favcat: default_favcat,
                favnote: "",
                apply: "Add to Favorites",
                update: "1",
              }).done(function (data) {
                // debugger;
                var patt_borderColor = /borderColor="(.*?)"/
                var borderColor = patt_borderColor.exec(data)[1];
                var patt_backgroundColor = /backgroundColor="(.*?)"/
                // var backgroundColor = patt_backgroundColor.exec(data)[1];
                var backgroundColor = borderColor
                var patt_title = /title="(.*?)"/
                var title = patt_title.exec(data)[1];
                var favcat = title.slice(-1);
                var style_for_fav1 = "border-color:#e4ee2c;background-color:rgb(70 141 220 / 85%)"

                if (favcat == "0"){backgroundColor="#309427"; borderColor="#671c17"; style=style_for_fav1};

                date_div.attr("style", style_for_fav1);
                date_div.attr("title", title)
                var favcat_tag_content = `
                        <div class="cs ct2" id = ${favcat_tag_id} style="
                        position: absolute;
                        top: -2px;
                        left: -36px;
                        width: 30px;
                        height: 18px;
                        line-height: 18px;
                        background: ${backgroundColor};
                        border-color: ${borderColor};
                        ">fav` + default_favcat + "</div>";
                      date_div.append(favcat_tag_content);
                      $("#"+favcat_btn_id).remove();
                      // debugger;
                    })
                } else {
                  $.post(fav_url, {
                    favcat: "favdel",
                    favnote: "",
                    apply: "Apply Changes",
                    update: "1",
                  }).done(function () {
                    // debugger;
                    date_div.attr("style", "");
                    date_div.attr("title", "");
                    $("#"+favcat_tag_id).remove();
                    date_div.append(fav_btn_content);
                    // debugger;
                  });
                }
            }
                         )
        }
                                 )
    };
  fav_post_pages()
}

// Chinsese translation highlight
var title_path = "//div[contains(@class, 'gl4t')]";
var titles = document.evaluate(
  title_path,
  document,
  null,
  XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,
  null
);
var title = null;
var idx = 0;
while ((title = titles.snapshotItem(idx))) {
  var titlePatt = /中文|中国|Chinese|中國/
  var text = title.innerText;
  if (titlePatt.test(text)) {
    title.setAttribute("style", "color: #ff8d8d; font-weight: bold;");}
  idx++;
}