Greasy Fork 还支持 简体中文。

Rss Helper

This is a good monkey

目前為 2018-11-21 提交的版本,檢視 最新版本

  1. // ==UserScript==
  2. // @name Rss Helper
  3. // @version 0.0.1
  4. // @description This is a good monkey
  5. // @author SettingDust
  6. //
  7. // @include http*://*
  8. // @license MIT
  9. //
  10. // @require https://cdn.bootcss.com/jquery/3.3.1/jquery.js
  11. //
  12. // @grant GM_addStyle
  13. // @namespace https://greasyfork.org/users/149095
  14. // ==/UserScript==
  15.  
  16. !function(modules) {
  17. var installedModules = {};
  18. function __webpack_require__(moduleId) {
  19. if (installedModules[moduleId]) return installedModules[moduleId].exports;
  20. var module = installedModules[moduleId] = {
  21. i: moduleId,
  22. l: !1,
  23. exports: {}
  24. };
  25. return modules[moduleId].call(module.exports, module, module.exports, __webpack_require__),
  26. module.l = !0, module.exports;
  27. }
  28. __webpack_require__.m = modules, __webpack_require__.c = installedModules, __webpack_require__.d = function(exports, name, getter) {
  29. __webpack_require__.o(exports, name) || Object.defineProperty(exports, name, {
  30. enumerable: !0,
  31. get: getter
  32. });
  33. }, __webpack_require__.r = function(exports) {
  34. "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(exports, Symbol.toStringTag, {
  35. value: "Module"
  36. }), Object.defineProperty(exports, "__esModule", {
  37. value: !0
  38. });
  39. }, __webpack_require__.t = function(value, mode) {
  40. if (1 & mode && (value = __webpack_require__(value)), 8 & mode) return value;
  41. if (4 & mode && "object" == typeof value && value && value.__esModule) return value;
  42. var ns = Object.create(null);
  43. if (__webpack_require__.r(ns), Object.defineProperty(ns, "default", {
  44. enumerable: !0,
  45. value: value
  46. }), 2 & mode && "string" != typeof value) for (var key in value) __webpack_require__.d(ns, key, function(key) {
  47. return value[key];
  48. }.bind(null, key));
  49. return ns;
  50. }, __webpack_require__.n = function(module) {
  51. var getter = module && module.__esModule ? function() {
  52. return module.default;
  53. } : function() {
  54. return module;
  55. };
  56. return __webpack_require__.d(getter, "a", getter), getter;
  57. }, __webpack_require__.o = function(object, property) {
  58. return Object.prototype.hasOwnProperty.call(object, property);
  59. }, __webpack_require__.p = "", __webpack_require__(__webpack_require__.s = 0);
  60. }([ function(module, exports, __webpack_require__) {
  61. const Route = __webpack_require__(1), router = new (__webpack_require__(3))();
  62. router.push(new Route(/yande\.re\/.*/, __webpack_require__(4))), router.push(new Route(/\/?.*\.?bilibili\.com\/.*/, __webpack_require__(13))),
  63. router.push(new Route(/\/?.*\.?weibo\.com\/.*/, __webpack_require__(18))), router.push(new Route(/\/?.*\.?pixiv\.net\/.*/, __webpack_require__(20))),
  64. router.load(location.href);
  65. }, function(module, exports, __webpack_require__) {
  66. const pathToRegexp = __webpack_require__(2);
  67. module.exports = class {
  68. constructor(url, route) {
  69. this._url = url, this._route = route;
  70. }
  71. get url() {
  72. return this._url;
  73. }
  74. get route() {
  75. return this._route;
  76. }
  77. test(link) {
  78. let regex = pathToRegexp(this.url);
  79. return link.input ? regex.test(link.input) : regex.test(link);
  80. }
  81. match(link) {
  82. let regex = pathToRegexp(this.url);
  83. return link.input ? regex.exec(link.input) : regex.exec(link);
  84. }
  85. call(args) {
  86. this.route(args);
  87. }
  88. };
  89. }, function(module, exports) {
  90. module.exports = pathToRegexp, module.exports.parse = parse, module.exports.compile = function(str, options) {
  91. return tokensToFunction(parse(str, options));
  92. }, module.exports.tokensToFunction = tokensToFunction, module.exports.tokensToRegExp = tokensToRegExp;
  93. var DEFAULT_DELIMITER = "/", DEFAULT_DELIMITERS = "./", PATH_REGEXP = new RegExp([ "(\\\\.)", "(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?" ].join("|"), "g");
  94. function parse(str, options) {
  95. for (var res, tokens = [], key = 0, index = 0, path = "", defaultDelimiter = options && options.delimiter || DEFAULT_DELIMITER, delimiters = options && options.delimiters || DEFAULT_DELIMITERS, pathEscaped = !1; null !== (res = PATH_REGEXP.exec(str)); ) {
  96. var m = res[0], escaped = res[1], offset = res.index;
  97. if (path += str.slice(index, offset), index = offset + m.length, escaped) path += escaped[1],
  98. pathEscaped = !0; else {
  99. var prev = "", next = str[index], name = res[2], capture = res[3], group = res[4], modifier = res[5];
  100. if (!pathEscaped && path.length) {
  101. var k = path.length - 1;
  102. delimiters.indexOf(path[k]) > -1 && (prev = path[k], path = path.slice(0, k));
  103. }
  104. path && (tokens.push(path), path = "", pathEscaped = !1);
  105. var partial = "" !== prev && void 0 !== next && next !== prev, repeat = "+" === modifier || "*" === modifier, optional = "?" === modifier || "*" === modifier, delimiter = prev || defaultDelimiter, pattern = capture || group;
  106. tokens.push({
  107. name: name || key++,
  108. prefix: prev,
  109. delimiter: delimiter,
  110. optional: optional,
  111. repeat: repeat,
  112. partial: partial,
  113. pattern: pattern ? escapeGroup(pattern) : "[^" + escapeString(delimiter) + "]+?"
  114. });
  115. }
  116. }
  117. return (path || index < str.length) && tokens.push(path + str.substr(index)), tokens;
  118. }
  119. function tokensToFunction(tokens) {
  120. for (var matches = new Array(tokens.length), i = 0; i < tokens.length; i++) "object" == typeof tokens[i] && (matches[i] = new RegExp("^(?:" + tokens[i].pattern + ")$"));
  121. return function(data, options) {
  122. for (var path = "", encode = options && options.encode || encodeURIComponent, i = 0; i < tokens.length; i++) {
  123. var token = tokens[i];
  124. if ("string" != typeof token) {
  125. var segment, value = data ? data[token.name] : void 0;
  126. if (Array.isArray(value)) {
  127. if (!token.repeat) throw new TypeError('Expected "' + token.name + '" to not repeat, but got array');
  128. if (0 === value.length) {
  129. if (token.optional) continue;
  130. throw new TypeError('Expected "' + token.name + '" to not be empty');
  131. }
  132. for (var j = 0; j < value.length; j++) {
  133. if (segment = encode(value[j], token), !matches[i].test(segment)) throw new TypeError('Expected all "' + token.name + '" to match "' + token.pattern + '"');
  134. path += (0 === j ? token.prefix : token.delimiter) + segment;
  135. }
  136. } else if ("string" != typeof value && "number" != typeof value && "boolean" != typeof value) {
  137. if (!token.optional) throw new TypeError('Expected "' + token.name + '" to be ' + (token.repeat ? "an array" : "a string"));
  138. token.partial && (path += token.prefix);
  139. } else {
  140. if (segment = encode(String(value), token), !matches[i].test(segment)) throw new TypeError('Expected "' + token.name + '" to match "' + token.pattern + '", but got "' + segment + '"');
  141. path += token.prefix + segment;
  142. }
  143. } else path += token;
  144. }
  145. return path;
  146. };
  147. }
  148. function escapeString(str) {
  149. return str.replace(/([.+*?=^!:${}()[\]|\/\\])/g, "\\$1");
  150. }
  151. function escapeGroup(group) {
  152. return group.replace(/([=!:$\/()])/g, "\\$1");
  153. }
  154. function flags(options) {
  155. return options && options.sensitive ? "" : "i";
  156. }
  157. function tokensToRegExp(tokens, keys, options) {
  158. for (var strict = (options = options || {}).strict, start = !1 !== options.start, end = !1 !== options.end, delimiter = escapeString(options.delimiter || DEFAULT_DELIMITER), delimiters = options.delimiters || DEFAULT_DELIMITERS, endsWith = [].concat(options.endsWith || []).map(escapeString).concat("$").join("|"), route = start ? "^" : "", isEndDelimited = 0 === tokens.length, i = 0; i < tokens.length; i++) {
  159. var token = tokens[i];
  160. if ("string" == typeof token) route += escapeString(token), isEndDelimited = i === tokens.length - 1 && delimiters.indexOf(token[token.length - 1]) > -1; else {
  161. var capture = token.repeat ? "(?:" + token.pattern + ")(?:" + escapeString(token.delimiter) + "(?:" + token.pattern + "))*" : token.pattern;
  162. keys && keys.push(token), token.optional ? token.partial ? route += escapeString(token.prefix) + "(" + capture + ")?" : route += "(?:" + escapeString(token.prefix) + "(" + capture + "))?" : route += escapeString(token.prefix) + "(" + capture + ")";
  163. }
  164. }
  165. return end ? (strict || (route += "(?:" + delimiter + ")?"), route += "$" === endsWith ? "$" : "(?=" + endsWith + ")") : (strict || (route += "(?:" + delimiter + "(?=" + endsWith + "))?"),
  166. isEndDelimited || (route += "(?=" + delimiter + "|" + endsWith + ")")), new RegExp(route, flags(options));
  167. }
  168. function pathToRegexp(path, keys, options) {
  169. return path instanceof RegExp ? function(path, keys) {
  170. if (!keys) return path;
  171. var groups = path.source.match(/\((?!\?)/g);
  172. if (groups) for (var i = 0; i < groups.length; i++) keys.push({
  173. name: i,
  174. prefix: null,
  175. delimiter: null,
  176. optional: !1,
  177. repeat: !1,
  178. partial: !1,
  179. pattern: null
  180. });
  181. return path;
  182. }(path, keys) : Array.isArray(path) ? function(path, keys, options) {
  183. for (var parts = [], i = 0; i < path.length; i++) parts.push(pathToRegexp(path[i], keys, options).source);
  184. return new RegExp("(?:" + parts.join("|") + ")", flags(options));
  185. }(path, keys, options) : function(path, keys, options) {
  186. return tokensToRegExp(parse(path, options), keys, options);
  187. }(path, keys, options);
  188. }
  189. }, function(module, exports) {
  190. module.exports = class {
  191. constructor() {
  192. this._routes = [];
  193. }
  194. push(router) {
  195. this.routes.push(router);
  196. }
  197. get routes() {
  198. return this._routes;
  199. }
  200. load(href) {
  201. console.debug("[RSSHelper]", this.routes), this.routes.forEach(route => {
  202. route.test(href) && route.call(route.match(href));
  203. });
  204. }
  205. };
  206. }, function(module, exports, __webpack_require__) {
  207. const Route = __webpack_require__(1), router = new (__webpack_require__(3))();
  208. router.push(new Route(/tags=(?:(.*))?/, __webpack_require__(5))), router.push(new Route(/post\??(?!tags=.+)/, __webpack_require__(10))),
  209. module.exports = (async args => {
  210. router.load(args), GM_addStyle(__webpack_require__(11).toString()), console.debug("[RSSHelper]", __webpack_require__(11).toString());
  211. });
  212. }, function(module, exports, __webpack_require__) {
  213. const rssElem = $("<a/>"), config = __webpack_require__(6);
  214. rssElem.attr("id", "feed"), rssElem.attr("title", config.language.feed), rssElem.attr("target", "_blank"),
  215. rssElem.text(config.language.feed), module.exports = (async args => {
  216. rssElem.attr("href", `https://yande.re/post/piclens?tags=${args[1]}`), $("#post-list > div.sidebar > div:nth-child(1) > form > div").append(rssElem);
  217. });
  218. }, function(module, exports, __webpack_require__) {
  219. console.debug("[RSSHelper]", __webpack_require__(7)("./en_US")), module.exports = {
  220. language: __webpack_require__(7)("./en_US"),
  221. rsshub: "https://rsshub.app"
  222. };
  223. }, function(module, exports, __webpack_require__) {
  224. var map = {
  225. "./config": 6,
  226. "./config.js": 6,
  227. "./en_US": 8,
  228. "./en_US.json": 8,
  229. "./zh_CN": 9,
  230. "./zh_CN.json": 9
  231. };
  232. function webpackContext(req) {
  233. var id = webpackContextResolve(req);
  234. return __webpack_require__(id);
  235. }
  236. function webpackContextResolve(req) {
  237. var id = map[req];
  238. if (!(id + 1)) {
  239. var e = new Error("Cannot find module '" + req + "'");
  240. throw e.code = "MODULE_NOT_FOUND", e;
  241. }
  242. return id;
  243. }
  244. webpackContext.keys = function() {
  245. return Object.keys(map);
  246. }, webpackContext.resolve = webpackContextResolve, module.exports = webpackContext,
  247. webpackContext.id = 7;
  248. }, function(module) {
  249. module.exports = {
  250. feed: "RSS Feed"
  251. };
  252. }, function(module) {
  253. module.exports = {
  254. feed: "RSS订阅"
  255. };
  256. }, function(module, exports, __webpack_require__) {
  257. const rssElem = $("<a/>"), config = __webpack_require__(6);
  258. rssElem.attr("id", "feed"), rssElem.attr("title", config.language.feed), rssElem.attr("target", "_blank"),
  259. rssElem.text(config.language.feed), module.exports = (async () => {
  260. rssElem.attr("href", "https://yande.re/post/piclens"), $("#post-list > div.sidebar > div:nth-child(1) > form > div").append(rssElem);
  261. });
  262. }, function(module, exports, __webpack_require__) {
  263. (module.exports = __webpack_require__(12)(!1)).push([ module.i, "#post-list>div.sidebar>div:first-child>form>div{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;line-height:20px}#post-list>div.sidebar>div:first-child>form>div #feed{margin-left:4px}", "" ]);
  264. }, function(module, exports) {
  265. module.exports = function(useSourceMap) {
  266. var list = [];
  267. return list.toString = function() {
  268. return this.map(function(item) {
  269. var content = function(item, useSourceMap) {
  270. var content = item[1] || "", cssMapping = item[3];
  271. if (!cssMapping) return content;
  272. if (useSourceMap && "function" == typeof btoa) {
  273. var sourceMapping = (sourceMap = cssMapping, "/*# sourceMappingURL=data:application/json;charset=utf-8;base64," + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + " */"), sourceURLs = cssMapping.sources.map(function(source) {
  274. return "/*# sourceURL=" + cssMapping.sourceRoot + source + " */";
  275. });
  276. return [ content ].concat(sourceURLs).concat([ sourceMapping ]).join("\n");
  277. }
  278. var sourceMap;
  279. return [ content ].join("\n");
  280. }(item, useSourceMap);
  281. return item[2] ? "@media " + item[2] + "{" + content + "}" : content;
  282. }).join("");
  283. }, list.i = function(modules, mediaQuery) {
  284. "string" == typeof modules && (modules = [ [ null, modules, "" ] ]);
  285. for (var alreadyImportedModules = {}, i = 0; i < this.length; i++) {
  286. var id = this[i][0];
  287. "number" == typeof id && (alreadyImportedModules[id] = !0);
  288. }
  289. for (i = 0; i < modules.length; i++) {
  290. var item = modules[i];
  291. "number" == typeof item[0] && alreadyImportedModules[item[0]] || (mediaQuery && !item[2] ? item[2] = mediaQuery : mediaQuery && (item[2] = "(" + item[2] + ") and (" + mediaQuery + ")"),
  292. list.push(item));
  293. }
  294. }, list;
  295. };
  296. }, function(module, exports, __webpack_require__) {
  297. const Route = __webpack_require__(1), router = new (__webpack_require__(3))();
  298. router.push(new Route(/video\/av\d+/, __webpack_require__(14))), router.push(new Route(/space\.bilibili\.com\/(\d+)/, __webpack_require__(15))),
  299. router.push(new Route(/live\.bilibili\.com\/(\d+)/, __webpack_require__(16))), module.exports = (async args => {
  300. router.load(args), GM_addStyle(__webpack_require__(17).toString()), console.debug("[RSSHelper]", __webpack_require__(17).toString());
  301. });
  302. }, function(module, exports, __webpack_require__) {
  303. const config = __webpack_require__(6), rssPrefix = `${config.rsshub}/bilibili/user/video/`, rssElem = $("<a/>");
  304. rssElem.addClass("btn"), rssElem.addClass("bi-btn"), rssElem.attr("title", config.language.feed),
  305. rssElem.attr("id", "feed"), rssElem.attr("target", "_blank"), rssElem.text(config.language.feed),
  306. module.exports = (async () => {
  307. let mid = $("#v_upinfo .u-face>a").attr("href").match(/\d+/)[0];
  308. rssElem.attr("href", `${rssPrefix}${mid}`);
  309. let task = setInterval(() => {
  310. $(".more-ops-list").length && ($("#v_upinfo .btn").prepend(rssElem), clearInterval(task));
  311. }, 500);
  312. });
  313. }, function(module, exports, __webpack_require__) {
  314. const config = __webpack_require__(6), rssPrefix = `${config.rsshub}/bilibili/user/dynamic/`, rssElem = $("<a/>");
  315. rssElem.addClass("h-f-btn"), rssElem.attr("title", config.language.feed), rssElem.attr("id", "feed"),
  316. rssElem.attr("target", "_blank"), rssElem.text(config.language.feed), module.exports = (async args => {
  317. rssElem.attr("href", `${rssPrefix}${args[1]}`);
  318. let task = setInterval(() => {
  319. let elem = $(".h-action .h-message");
  320. elem.length && (elem.after(rssElem), clearInterval(task));
  321. }, 500);
  322. });
  323. }, function(module, exports, __webpack_require__) {
  324. const config = __webpack_require__(6), rssPrefix = `${config.rsshub}/bilibili/live/room/`, rssElem = $("<a/>");
  325. rssElem.addClass("p-absolute"), rssElem.attr("title", config.language.feed), rssElem.attr("id", "feed"),
  326. rssElem.attr("target", "_blank"), rssElem.text(config.language.feed), module.exports = (async args => {
  327. rssElem.attr("href", `${rssPrefix}${args[1]}`);
  328. let task = setInterval(() => {
  329. let elem = $(".room-info-down-row .attention-btn-ctnr");
  330. elem.length && (elem.after(rssElem), clearInterval(task));
  331. }, 500);
  332. });
  333. }, function(module, exports, __webpack_require__) {
  334. (module.exports = __webpack_require__(12)(!1)).push([ module.i, "#v_upinfo #feed{padding-left:16px;padding-right:16px;margin-left:12px;margin-top:0}.room-info-down-row #feed{height:22px;line-height:22px;padding-left:16px;padding-right:16px;background-color:#23ade5;color:#fff!important;border-radius:4px;right:130px;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);-webkit-transition:125ms ease-in-out;transition:125ms ease-in-out}.room-info-down-row #feed:hover{background-color:#23b9f1}", "" ]);
  335. }, function(module, exports, __webpack_require__) {
  336. const Route = __webpack_require__(1), router = new (__webpack_require__(3))();
  337. router.push(new Route(/\/(?!\d+\/)\d+/, __webpack_require__(19))), module.exports = (async args => {
  338. router.load(args);
  339. });
  340. }, function(module, exports, __webpack_require__) {
  341. const rssElem = $("<a/>"), config = __webpack_require__(6), rssPrefix = `${config.rsshub}/weibo/user/`;
  342. rssElem.addClass("W_btn_d"), rssElem.addClass("btn_34px"), rssElem.attr("title", config.language.feed),
  343. rssElem.addClass("W_btn_d"), rssElem.attr("target", "_blank"), rssElem.text(config.language.feed),
  344. module.exports = (async () => {
  345. rssElem.attr("href", rssPrefix + $CONFIG.oid), $("div.pf_opt > div").append(rssElem),
  346. console.debug("[RSSHelper]", "111");
  347. });
  348. }, function(module, exports, __webpack_require__) {
  349. const Route = __webpack_require__(1), router = new (__webpack_require__(3))();
  350. router.push(new Route(/member\.php\?id=\d+/, __webpack_require__(21))), router.push(new Route(/member_illust\.php\?.*illust_id=\d+/, __webpack_require__(22))),
  351. module.exports = (async args => {
  352. router.load(args), GM_addStyle(__webpack_require__(23).toString()), console.debug("[RSSHelper]", __webpack_require__(23).toString());
  353. });
  354. }, function(module, exports, __webpack_require__) {
  355. const rssElem = $("<a/>"), config = __webpack_require__(6), rssPrefix = `${config.rsshub}/pixiv/user/`;
  356. rssElem.addClass("YryPnZn _30SjOFD"), rssElem.attr("title", config.language.feed),
  357. rssElem.attr("id", "feed"), rssElem.attr("target", "_blank"), rssElem.text(config.language.feed),
  358. module.exports = (async () => {
  359. rssElem.attr("href", rssPrefix + Object.keys(globalInitData.preload.user)[0]);
  360. let task = setInterval(() => {
  361. let elem = $("div._3yalhqB");
  362. elem.length && (elem.append(rssElem), clearInterval(task));
  363. }, 500);
  364. });
  365. }, function(module, exports, __webpack_require__) {
  366. const rssElem = $("<a/>"), config = __webpack_require__(6), rssPrefix = `${config.rsshub}/pixiv/user/`;
  367. rssElem.addClass("YryPnZn"), rssElem.attr("title", config.language.feed), rssElem.attr("id", "feed"),
  368. rssElem.attr("target", "_blank"), rssElem.text(config.language.feed), module.exports = (async () => {
  369. rssElem.attr("href", rssPrefix + Object.keys(globalInitData.preload.user)[0]);
  370. let task = setInterval(() => {
  371. let elem = $(".sc-dRCTWM.cRuxjo");
  372. elem.length && (elem.append(rssElem), clearInterval(task));
  373. }, 500);
  374. });
  375. }, function(module, exports, __webpack_require__) {
  376. (module.exports = __webpack_require__(12)(!1)).push([ module.i, "#feed{text-decoration:none}._3yalhqB{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;width:auto}._3yalhqB #feed{margin-left:12px}.sc-dRCTWM.cRuxjo #feed{margin-top:12px}", "" ]);
  377. } ]);