HPJAV Enhance

Enhance hpjav.tv

  1. // ==UserScript==
  2. // @name HPJAV Enhance
  3. // @namespace https://github.com/isTianXin/GMScript/
  4. // @version 1.1
  5. // @description Enhance hpjav.tv
  6. // @author sancunguangyin
  7. // @match *://hpjav.tv/hot
  8. // @match *://hpjav.tv/category/*
  9. // @grant GM_openInTab
  10. // @grant GM_info
  11. // @run-at document-end
  12. // ==/UserScript==
  13.  
  14. 'use strict';
  15.  
  16. const OPEN_ALL_TORRENT_LINKS_BUTTON = "openAllLinks";
  17.  
  18. const SCRIPT_HANDLER_TAMPERMONKEY = 'tampermonkey';
  19.  
  20. let isTampermonkey = () => {
  21. return (GM_info || { scriptHandler: '' }).scriptHandler.toLowerCase() === SCRIPT_HANDLER_TAMPERMONKEY;
  22. }
  23.  
  24. let getAdaptivedDocument = () => {
  25. //Tampermonkey will get first iframe, may be a bug
  26. if (isTampermonkey()) {
  27. return window.parent.document;
  28. }
  29. return window.document;
  30. }
  31.  
  32. let adaptivedDocument = getAdaptivedDocument();
  33.  
  34. let getTorrentFunkLink = (key) => {
  35. return `https://www.torrentfunk.com/all/torrents/${key}.html`;
  36. }
  37.  
  38. let parseVideoName = (text) => {
  39. if (!text) {
  40. return null;
  41. }
  42. let names = text.split(" ");
  43. if (!names || !names[0]) {
  44. return null;
  45. }
  46. if (!names[1]) {
  47. return names[0];
  48. }
  49. let first = names[0];
  50. // like ipz-127 300mium-665
  51. if (/\w+-\d+/.test(first)) {
  52. return first;
  53. }
  54. let second = names[1];
  55. // like ipz, s-cute, 300miun
  56. if (/^\w+(-([A-Za-z])+)?$/.test(first)) {
  57. return first + '-' + second;
  58. }
  59. return first;
  60. };
  61.  
  62. let replaceDateTextWithTorrentFunkLink = (card) => {
  63. if (!card) {
  64. return;
  65. }
  66. let name = parseVideoName(card.querySelector("a").innerText);
  67. if (!name) {
  68. return;
  69. }
  70. let torrentFunkLink = getTorrentFunkLink(name);
  71. let date = card.lastChild.wholeText;
  72. card.lastChild.remove();
  73. let jumpLink = `<a href=${torrentFunkLink} class="torrent-link" target="_blank">${date}</a>`;
  74. card.insertAdjacentHTML("beforeend", jumpLink);
  75. }
  76. let insertTorrentFunkLink = () => {
  77. let cards = Array.from(adaptivedDocument.querySelectorAll("div > div.entry-title"));
  78. if (!cards) {
  79. return;
  80. }
  81. cards.forEach(replaceDateTextWithTorrentFunkLink);
  82. }
  83. let openAllTorrentFunkLinks = () => {
  84. Array.from(adaptivedDocument.querySelectorAll("a.torrent-link"))
  85. .map(item => item.href)
  86. .forEach(
  87. item => {
  88. if (!item) {
  89. return;
  90. }
  91. setTimeout(() => {
  92. GM_openInTab(item, { insert: false });
  93. }, 50);
  94. }
  95. );
  96. }
  97. let insertOpenAllButton = () => {
  98. let buttons = adaptivedDocument.querySelector("div.category-count > span");
  99. let btn = `<a class="btn btn-sm btn-default" id="${OPEN_ALL_TORRENT_LINKS_BUTTON}" rel="nofollow">Open All Torrent Links</a>`;
  100. buttons.insertAdjacentHTML("afterbegin", btn);
  101. }
  102. let start = () => {
  103. insertTorrentFunkLink();
  104. insertOpenAllButton();
  105. }
  106. /**
  107. * @param {integer} interval
  108. */
  109. let startWithInterval = (interval) => {
  110. window.setTimeout(start, interval);
  111. }
  112.  
  113. startWithInterval(1000);
  114.  
  115. adaptivedDocument.onclick = e => {
  116. //openAll onclick
  117. if (e.target.id === OPEN_ALL_TORRENT_LINKS_BUTTON) {
  118. let clicked = false;
  119. if (!clicked) {
  120. openAllTorrentFunkLinks();
  121. clicked = true;
  122. }
  123. setTimeout(() => clicked = false, 1000);
  124. }
  125. };
  126.