Sleazy Fork is available in English.

E-Hitomi

Adds a button to E-Hentai to open a supported gallery on Hitomi.la

  1. // ==UserScript==
  2. // @name E-Hitomi
  3. // @namespace http://linktr.ee/GanbatGAN
  4. // @version 2.0
  5. // @description Adds a button to E-Hentai to open a supported gallery on Hitomi.la
  6. // @author Ganbat
  7. // @match http*://exhentai.org/g/*
  8. // @match http*://e-hentai.org/g/*
  9. // @match http*://*.e-hentai.org/g/*
  10. // @grant GM.xmlHttpRequest
  11. // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4gQaCi4QRludjAAAAB1pVFh0Q29tbWVudAAAAAAAQ3JlYXRlZCB3aXRoIEdJTVBkLmUHAAADiUlEQVRo3u2aT2gcVRzHP+/NvOyk3XT/NHY3kI3akFqKhqIg9BCpf/FSaLW1ioeCIgha8CR68KD05kHwIPZS8CSiaEXIRRRUCGrtH6sVSmi0Tbpt1SSb7SaZ3Zmd5yG2dJPZnd0JMbsyv+N7s4/3eTu/3/f7e4y48657NR0ckg6PCCACWGWYAJbrEqtWQy9iGwZl0/Sdy2Yz9GW21IwJKTl/fpz5hYXAtZVSDN+9A8/zasb/np7m0mR+CSBXLLK1UAgNMJ5OM5FM+s49+/STvPTi8yvG9z/zHKdO/xy4du/mNB9/eGzF+EefHOfV199cAtBC4AkRGqBRHa7W+Wf1shNtdW3XdUG0YQ5UtcZtEu5mDrRDuJ7mntsS7BnsZ4MyGcv/xeiFPKITADyteWKon8P3bcd2l165+7Ob2TPYz1tn/2h/gOzG7prN33iVtibi7BvKLVW6q1conPwR93qRDQN3gJCIIIAFpcjH4wjdOM1mLWtVp79vKFez+VvnRnJZZr79msuff4qMxQAonDlFynZwtA4GuJBKIbVe06QdTMbrziccm/zoFzc3f0NHBuMWj9zet/6vkAAWnPoiKrQHUvom/YMDmfUvo6aU/HRtGhlChzYqsz104LPxKWbscsu/uzg33x4ASgpe/vIEi27zfkyi+eDcRPso8VzF4dDoGOVqgAprDVozls5RLFfay0osulUOf3WCmGGs8E1epYIRj9O7+2F2HHkbqz8XLGSm55EslxENyqgrJaWuLlottE8d2MsDI7t8aj9cxSaVv4j2qsS2ZOjd/SiJ4Z1IpVpT4pRts2tqquFGZi2LyU2byF0vrpgrqS68Om7m4P699cXNcTj32isMHHqBxPDO8FZC/2u1GyqpEFiuS8KvimjQIVy6VIrtbxxBJVOd21I2s/moqW+bpn61MdPdzYRPGbJNI8DJrjHAvFJc7ulp2BXZhkEhFmPuFre4XDH94pvvxijMBl8kxCyLxx97KBzAolL8nkwG2ukw1wHvvPs+p8+cDWzo+7KZ8ABrGYaUGMsU1/e5gGeiKhQBRAD/ZyEzPI+ecgURYJaFhmKsC9FuAGnbZmRqMtDrK8/j+LZtmC3caf4nABqoNnFbUBUiyoEIIAJYzzI6Y1noJls431PQXl3H+v0PJ9H66DKDZnLl2p9NrV0qlXjv6DEcx6nxv7/8+htSCET0qUEEEAF0dvwDDzk3GVuBpGoAAAAASUVORK5CYII=
  12. // ==/UserScript==
  13.  
  14. const pathsarray = window.location.pathname.split('/');
  15. const verbose = 0;
  16. let mricon;
  17. if ( window.location.hostname == "exhentai.org" ) {
  18. mricon = "exhentai.org/img";
  19. } else {
  20. mricon = "ehgt.org/g";
  21. }
  22.  
  23. function hitomiLink(g){
  24. const siteContent = document.getElementById("gd5");
  25. let hitLinkP = document.createElement('p');
  26. hitLinkP.setAttribute('class', 'g2');
  27. hitLinkP.innerHTML = `<img src="https://${mricon}/mr.gif"> <a id="hitomilink" href="https://hitomi.la${g["galleryurl"]}">Open on Himtomi.la</a>`
  28. siteContent.appendChild(hitLinkP);
  29. };
  30.  
  31. (()=>{
  32. // Note: This JS file contains nothing but a single variable containing JSON, a confusing choice on behalf of Hitomi.
  33. // We don't want to eval this script. Instead, we strip the (minor) JS from it and parse the JSON to get what we need.
  34. // Hopefully, this won't run afoul of Greasyfork's rules, but if it does, we can always change this to a HEAD request,
  35. // change the resultant link back to the E-Hentai redirect and remove the 'blocked' detection entirely.
  36. GM.xmlHttpRequest({
  37. method: "GET",
  38. url: "https://ltn.hitomi.la/galleries/"+pathsarray[2]+".js",
  39. onload: function(response) {
  40. if (verbose) console.log("Hitomi response status: " + String(response.status));
  41. if (response.status != 200) return;
  42. const hitGalInfo = JSON.parse(response.responseText.slice(18));
  43. if (verbose) console.log(hitGalInfo);
  44. if (hitGalInfo["blocked"]) return;
  45. hitomiLink(hitGalInfo);
  46. }
  47. });
  48. })();