// ==UserScript== // @name Douban2RARBG // @version 0.4.4 // @author Mogeko // @description Add direct links to RARBG & TPB from Douban. // @supportURL https://github.com/mogeko/userscript-douban2rarbg/issues // @match https://movie.douban.com/subject/* // @namespace https://mogeko.me // @icon https://img9.doubanio.com/favicon.ico // @grant none // @license MIT // @downloadURL none // ==/UserScript== /******/ (() => { // webpackBootstrap /******/ "use strict"; var __webpack_exports__ = {}; function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i]; return arr2; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){ _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally{ try { if (!_n && _i["return"] != null) _i["return"](); } finally{ if (_d) throw _e; } } return _arr; } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(n); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } var META_DATA = { 资源: { RARBG: "https://rarbg.to/torrents.php?imdb=%i", "RARBG (Mirror)": "https://rarbgmirror.com/torrents.php?imdb=%i", TPB: "https://thepiratebay.org/search.php?q=%i" }, 字幕: { opensubtitles: "https://www.opensubtitles.org/zh/search/imdbid-%x/sublanguageid-all/moviename-%i", SubHD: "https://subhd.tv/search/%d", 字幕组: "https://zmk.pw/search?q=%i" } }; (function() { var ref, ref1; var metaRoot = document.querySelector("#info"); var imdb = (ref1 = metaRoot === null || metaRoot === void 0 ? void 0 : (ref = metaRoot.innerHTML) === null || ref === void 0 ? void 0 : ref.match(/tt[0-9]{4,}/)) === null || ref1 === void 0 ? void 0 : ref1[0]; var doubanID = document.location.toString().split("/")[4]; if (!imdb || !doubanID) return; Object.entries(META_DATA).forEach(function(param) { var _param = _slicedToArray(param, 2), key = _param[0], sites = _param[1]; var metaNode = document.createElement("span"); var keyNode = document.createElement("span"); var valueNode = document.createElement("span"); var br = document.createElement("br"); keyNode.textContent = "".concat(key, ": "); keyNode.setAttribute("class", "pl"); var links = Object.entries(sites).map(function(param) { var _param = _slicedToArray(param, 2), title = _param[0], template = _param[1]; var handleTemplate = function(template) { var ref = [ imdb, doubanID, imdb.replace(/^tt/, "") ], i = ref[0], d = ref[1], x = ref[2]; return template.replace("%i", i).replace("%d", d).replace("%x", x); }; var link = document.createElement("a"); link.textContent = title; link.setAttribute("href", handleTemplate(template)); link.setAttribute("target", "_blank"); return link; }); links.forEach(function(link, index, array) { valueNode.appendChild(link); if (index !== array.length - 1) { valueNode.innerHTML += " / "; } }); metaNode.appendChild(keyNode); metaNode.appendChild(valueNode); metaRoot.appendChild(metaNode); metaRoot.appendChild(br); }); })(); /******/ })() ;