RSS+ : Show Site All RSS

Show Site All RSS.

Ekde 2020/04/26. Vidu La ĝisdata versio.

  1. // ==UserScript==
  2. // @name RSS+ : Show Site All RSS
  3. // @name:zh RSS+ : 显示当前网站所有的 RSS
  4. // @name:zh-CN RSS+ : 显示当前网站所有的 RSS
  5. // @name:zh-TW RSS+ : 顯示當前網站所有的 RSS
  6. // @description Show Site All RSS.
  7. // @description:zh 显示当前网站所有的 RSS
  8. // @description:zh-CN 显示当前网站所有的 RSS
  9. // @description:zh-TW 顯示當前網站所有的 RSS
  10. // @date 2018.09.16
  11. // @modified 2020.04.26
  12. // @version 0.6.1
  13.  
  14. // @icon http://www.inoreader.com/favicon.ico
  15. // @author Wizos
  16. // @namespace https://blog.wizos.me
  17. // @supportURL wizos@qq.com
  18. // @contributionURL https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=wizos@qq.com&item_name=Greasy+Fork+donation
  19. // @contributionAmount 2
  20. // @match http://*/*
  21. // @match https://*/*
  22. // @grant GM_xmlhttpRequest
  23. // @grant GM_setClipboard
  24. // @grant GM_notification
  25. // @grant GM_addStyle
  26. // @grant GM_getValue
  27. // @grant GM_setValue
  28. // @grant GM_registerMenuCommand
  29. // @grant unsafeWindow
  30. // @noframes
  31. // @run-at document-end
  32. // ==/UserScript==
  33.  
  34. // 2020.04.26_0.6.1 1.支持设置 RSSHub 服务的域名。
  35. // 2020.03.01_0.6 1.可设置点击“订阅”时打开的rss服务商(feedly,inoreadly)。2.修复火狐浏览器下无法展示的问题。
  36. // 2019.09.29_0.5 增加hexo站点的rss嗅探规则。
  37. // 2019.04.26_0.4.2 1.修复默认圆圈状态下宽度太宽,导致遮挡下层页面事件触发的问题。2.将icon由字体改为svg形式,修复部分站点无法显示icon的问题。3.优化RSS没有title时的默认名称。
  38. // 2018.11.10_0.4.1 关闭发现RSS后的h5通知
  39. // 2018.10.29_0.4 1.在无法链接服务器时也能展示本地的RSS;2.针对开启 Content-Security-Policy 的网站直接展示本地的RSS;3.发现RSS后,进行h5通知
  40. // 2018.10.23_0.4 1.增加识别为 wordpress 站点时,尝试使用/feed后缀;2.增加多语言支持
  41. // 2018-10-16_0.3 1.改为iframe方式显示,兼容性更好;2.改为post方式传递页面地址;
  42. // 2018-10-14_0.2 第一版 RSS+ 成型;
  43. // 2018.09.16_0.1 在 RSS+Atom Feed Subscribe Button Generator 脚本基础上增加连接后端获取feed的方式;
  44.  
  45.  
  46. // 过滤掉明确不包含 RSS 源的URL
  47. if (location.href.match(/(api\.wizos\.me)|(feedly\.com\/i\/subscription)|(inoreader\.com\/feed\/http)/i)) {
  48. return;
  49. }
  50.  
  51. var feeds = [];
  52. var feedsMap = {};
  53.  
  54. const zhcn = {
  55. "no_title": "无名称",
  56. "copied": "已复制",
  57. "copy": "复制",
  58. "copy_succeeded": "复制成功",
  59. "follow": "订阅",
  60. "found": "发现 ",
  61. "feed": " 个订阅源",
  62. "click_the_number_to_view": "点击右下角的数字查看",
  63. "use_feedly": "使用 Feedly 订阅",
  64. "use_inoreader": "使用 Inoreader 订阅",
  65. "setting_rsshub_domain": "设置 RSSHub 服务的域名",
  66. "plz_input_rsshub_domain": "请输入 RSSHub 服务的域名",
  67. "domain_is_wrong": "服务器地址格式有问题,请检查",
  68. "close": "关闭"
  69. };
  70. const zh = zhcn;
  71. const zhtw = {
  72. "no_title": "無名稱",
  73. "copied": "已複製",
  74. "copy": "複製",
  75. "copy_succeeded": "複製成功",
  76. "follow": "訂閱",
  77. "found": "發現 ",
  78. "feed": " 個訂閱源",
  79. "click_the_number_to_view": "點擊右下角的數位查看",
  80. "use_feedly": "使用 Feedly 訂閱",
  81. "use_inoreader": "使用 Inoreader 訂閱",
  82. "setting_rsshub_domain": "設定 RSSHub 服務的網域名稱",
  83. "plz_input_rsshub_domain": "請輸入 RSSHub 服務的網域名稱",
  84. "domain_is_wrong": "伺服器位址格式有問題,請檢查",
  85. "close": "關閉"
  86. };
  87. const en = {
  88. "no_title": "NO TITILE",
  89. "copied": "copied",
  90. "copy": "copy",
  91. "copy_succeeded": "copy succeeded",
  92. "follow": "follow",
  93. "found": "found ",
  94. "feed": " feed",
  95. "click_the_number_to_view": "click on the number in the lower right corner to view it",
  96. "setting": "setting",
  97. "use_feedly": "Use Feedly Subscription",
  98. "use_inoreader": "Use Inoreader Subscription",
  99. "setting_rsshub_domain": "Setting RSSHub Domain",
  100. "plz_input_rsshub_domain": "Please enter the domain name of the RSSHub service",
  101. "domain_is_wrong": "Error in domain name format, please check",
  102. "close": "close"
  103. };
  104.  
  105. var languages = {
  106. "zh": zh,
  107. "zhcn": zhcn,
  108. "zhtw": zhtw,
  109. "en": en
  110. };
  111.  
  112. var lang = navigator.language.replace('-', "").toLowerCase();
  113. lang = languages[lang];
  114. if (!lang) {
  115. lang = languages.en;
  116. }
  117.  
  118. setTimeout(function() {
  119. GM_registerMenuCommand(lang.use_feedly, function () {
  120. GM_setValue("rss_service", "feedly");
  121. });
  122. GM_registerMenuCommand(lang.use_inoreader, function () {
  123. GM_setValue("rss_service", "inoreader");
  124. });
  125.  
  126. GM_registerMenuCommand(lang.setting_rsshub_domain, function () {
  127. var domain = GM_getValue("rsshub_domain");
  128. if(domain == null || domain == ""){
  129. domain = "https://rsshub.app";
  130. }
  131. domain = window.prompt(lang.plz_input_rsshub_domain, domain);
  132. if(domain.match(/^https*:\/\/.*?\.\w+(\/|$)/)){
  133. GM_setValue("rsshub_domain", domain);
  134. }else{
  135. alert(lang.domain_is_wrong);
  136. }
  137. });
  138.  
  139. if (location.href.match(/github\.com/i)) {
  140. show();
  141. } else {
  142. showWithCloudFeeds(location.href);
  143. }
  144. }, 0);
  145.  
  146. function showWithCloudFeeds(url) {
  147. var ajax = new XMLHttpRequest();
  148. ajax.onreadystatechange = function() {
  149. //console.log("当前状态A:" + ajax.readyState + "," + ajax.status );
  150. if (ajax.readyState != 4) {
  151. return;
  152. }
  153. if (ajax.status == 200) {
  154. var obj = JSON.parse(ajax.responseText);
  155. show(obj.feeds);
  156. } else {
  157. show();
  158. }
  159. };
  160. ajax.open("POST", "https://api.wizos.me/find.php", true);
  161. var data = new FormData();
  162. data.append("url", url);
  163. ajax.send(data);
  164. }
  165.  
  166. function show(cloudFeeds) {
  167. getKnowFeeds();
  168. getUnknownFeeds();
  169. if (cloudFeeds != null) {
  170. console.log("云端有feeds");
  171. console.log(cloudFeeds);
  172. cloudFeeds.forEach(element => {
  173. addRSS(element.title, element.link);
  174. });
  175. }
  176. render();
  177. }
  178.  
  179. function addRSS(title, link) {
  180. var feed = {};
  181. feed.title = title;
  182. feed.link = link.toLowerCase().replace(/(\/$)/g, "");
  183. if (feed.link.match(/(api\.wizos\.me)|(feedly\.com\/i\/subscription)|(inoreader\.com\/feed\/http)/i)) {
  184. return;
  185. }
  186. // 防止重复
  187. if (!feedsMap[feed.link]) {
  188. //如果能查找到,证明数组元素重复了
  189. feedsMap[feed.link] = 1;
  190. feeds.push(feed);
  191. }
  192. }
  193.  
  194. const feed_suffix = ['/feed', '/rss', '/rss.xml', '/atom.xml', '/feed.xml', '/?feed=rss2', '/?feed=rss'];
  195.  
  196.  
  197. // 获取在<head>的<link>元素中,已经声明为RSS的链接
  198. function getKnowFeeds() {
  199. var links = document.getElementsByTagName("link");
  200. var link, linkHref, linkType, linkTitle;
  201. for (var i = 0, l = links.length; i < l; i++) {
  202. link = links[i];
  203. if (!link) continue;
  204. linkHref = link.href;
  205. linkType = link.type;
  206. linkTitle = link.title;
  207. if (!linkTitle) {
  208. linkTitle = document.title;
  209. }
  210. if (linkType && linkType.match(/.+\/(rss|rdf|atom)/i)) {
  211. addRSS(linkTitle, linkHref);
  212. } else if (linkType && linkType.match(/^text\/xml$/i)) {
  213. addRSS(linkTitle, linkHref);
  214. }
  215. }
  216. }
  217.  
  218. // 寻找未明确标示的RSS源
  219. function getUnknownFeeds() {
  220. //var link, linkHref, linkType, linkTitle;
  221. var links,link,linkhref,linktitle;
  222. // links 属性返回一个文档中所有具有 href 属性值的 <area> 元素与 <a> 元素的集合
  223. if (!document.links) { //console.log("页面内没有发现具有 href 属性值的 <area> 元素或 <a> 元素");
  224. links = document.getElementsByTagName("a");
  225. }else{
  226. links = document.links;
  227. }
  228. for (var a = 0, len = links.length; a < len; a++) {
  229. link = links[a];
  230. linkhref = link.href;
  231. linktitle = link.title;
  232. if (!linktitle) {
  233. linktitle = document.title;
  234. } else if (link.innerText) {
  235. linktitle = link.innerText;
  236. }
  237. //console.log("检查RSS:" + linkhref + " , " + link.title);
  238. if (linkhref.match(/^(https|http|ftp|feed).*([\.\/]rss([\.\/]xml|\.aspx|\.jsp|\/)?$|\/node\/feed$|\/feed(\.xml|\/$|$)|\/rss\/[a-z0-9]+$|[?&;](rss|xml)=|[?&;]feed=rss[0-9.]*$|[?&;]action=rss_rc$|feeds\.feedburner\.com\/[\w\W]+$)/i)) {
  239. addRSS(linktitle, linkhref);
  240. } else if (linkhref.match(/^(https|http|ftp|feed).*\/atom(\.xml|\.aspx|\.jsp|\/)?$|[?&;]feed=atom[0-9.]*$/i)) { // atom
  241. addRSS(linktitle, linkhref);
  242. } else if (linkhref.match(/^(https|http|ftp|feed).*(\/feeds?\/[^.\/]*\.xml$|.*\/index\.xml$|feed\/msgs\.xml(\?num=\d+)?$)/i)) {
  243. addRSS(linktitle, linkhref);
  244. } else if (linkhref.match(/^(https|http|ftp|feed).*\.rdf$/i)) {
  245. addRSS(linktitle, linkhref);
  246. } else if (linkhref.match(/^(rss|feed):\/\//i)) {
  247. addRSS(linktitle, linkhref);
  248. } else if (linkhref.match(/^(https|http):\/\/feed\./i)) {
  249. addRSS(linktitle, linkhref);
  250. }
  251. }
  252.  
  253. // 如果有发现新的 rss 源则不再继续寻找
  254. if (feeds.length != 0) {return;}
  255. links = document.querySelectorAll("html > head > link");
  256. for (var i = 0, size = links.length; i < size; i++) {
  257. link = links[i];
  258. if (link.href.match(/(wp-content)/i)) {
  259. checkFeedV3(document.location.protocol + '//' + document.domain, feed_suffix);
  260. break;
  261. }
  262. }
  263.  
  264. if (feeds.length != 0) {return;}
  265. links = document.querySelectorAll("html > body footer a");
  266. for (i = 0, size = links.length; i < size; i++) {
  267. link = links[i];
  268. //if (link.href.match(/^https:\/\/hexo\.io/i)) {
  269. if (link.href.match(/(bitcron\.com|typecho\.org|hexo\.io)/i)) {
  270. checkFeedV3(document.location.protocol + '//' + document.domain, feed_suffix);
  271. break;
  272. }
  273. }
  274. }
  275.  
  276. function checkFeedV3(href, suffixs) {
  277. var hasFeed = false;
  278. var i = 0;
  279. for (i in suffixs) {
  280. checkFeed("HEAD", href, suffixs[i]);
  281. }
  282. }
  283.  
  284. function checkFeed(method, href, flag) {
  285. console.log("尝试获取:" + href + flag + ",函数:" + method );
  286. if (!method || !flag) {return;}
  287. var ajax = new XMLHttpRequest();
  288. ajax.onreadystatechange = function() {
  289. //console.log("返回结果:" + ajax.readyState + ",状态:" + ajax.status );
  290. if (ajax.readyState == 4) {
  291. if (ajax.status == 200) {
  292. addRSS(document.title, href + flag);
  293. } else if (ajax.status == 405) {
  294. checkFeed("GET", href, flag);
  295. }
  296. }
  297. };
  298. ajax.open(method, href + flag, false);
  299. ajax.send();
  300. }
  301.  
  302.  
  303. function render() {
  304. if (!feeds || feeds.length <= 0) {
  305. console.log("该页没有发现feed");
  306. return;
  307. }
  308. var rss_plus_html = "";
  309. var element, tips, desc;
  310. for (var i = 0; i < feeds.length; i++) {
  311. element = feeds[i];
  312. tips = "";
  313. desc = "";
  314. //console.log("feed信息:" + element.title + element.link);
  315. if(element.link.match(/^https*:\/\/rsshub.app/)){
  316. var rsshub_domain = GM_getValue("rsshub_domain");
  317. element.link = element.link.replace(/^https*:\/\/rsshub.app/,rsshub_domain);
  318. }
  319. if (!element.title) {
  320. element.title = lang.no_title;
  321. }
  322. if (element.follows) {
  323. tips = " - " + element.follows + "人订阅";
  324. }
  325. if (element.update) {
  326. tips += " - " + element.update + "更新";
  327. }
  328. if (element.desc) {
  329. desc = ' title="' + element.desc + '"';
  330. }
  331. rss_plus_html +=
  332. '<tr><td class=""><div class="rp-table-cell"><div class="feed-title"' + desc + ">" + element.title + '</div><div class="feed-tips"><a href="' + element.link + '" target="_blank">' + element.link + '</a>' + tips +
  333. '</div></div></td><td class="rp-table-column-center"><div class="rp-table-cell" sytle="display:inline">';
  334. rss_plus_html +=
  335. '<button type="button" index="' +
  336. i +
  337. '" class="rp-btn rp-btn-primary rp-btn-small rp-copy-feed-link" data-clipboard-action="copy" data-clipboard-target=".feed-title"><span>' + lang.copy + '</span></button>';
  338. rss_plus_html +=
  339. '<button type="button" index="' +
  340. i +
  341. '" class="rp-btn rp-btn-primary rp-btn-small rp-follow-feed-link"><span>' + lang.follow + '</span></button></div></td></tr>';
  342. }
  343.  
  344. var rss_count_badge_html =
  345. '<div id="rp-feed-badge" class="rp-card rp-card-bordered"><span class="rp-badge-count" place="count">' +
  346. feeds.length +
  347. "</span></div>";
  348.  
  349. var rss_feed_list_html =
  350. '<div id="rp-feed-list" class="rp-card rp-card-bordered"><div id="rp-card-head" class="rp-card-head"><div class="card-title">' + icon_logo + lang.found + '<span class="rp-mark-count" place="count">' +
  351. feeds.length +
  352. '</span>' + lang.feed + ' -【RSS+】</div></div><div class="rp-card-extra"><button type="button" id="rp-close-btn" class="rp-btn rp-btn-dashed" title="' + lang.close + '"><span>' + icon_close + '</span></button></div>';
  353.  
  354. rss_feed_list_html +=
  355. '<div id="rp-card-body"><div class="rp-table"><table cellspacing="0" cellpadding="0" border="0"><colgroup><col width="70%"><col width="30%"></colgroup><tbody class="rp-table-tbody">' +
  356. rss_plus_html +
  357. "</tbody></table></div></div></div></div>";
  358.  
  359. var styleEl = document.createElement("style");
  360. styleEl.innerHTML = styleHtml;
  361.  
  362. // 安装 RSS Plus Box 和 RSS Plus Frame
  363. var rssPlusDiv = document.createElement("div");
  364. rssPlusDiv.setAttribute("id", "rss-plus");
  365.  
  366. var rssPlusWrapDiv = document.createElement("div");
  367. rssPlusWrapDiv.setAttribute("id", "rss-plus-wrap");
  368. var forFireFoxBugflag = "";
  369. if(navigator.userAgent.indexOf("Firefox") !== -1){
  370. forFireFoxBugflag = ' src="javascript:"';
  371. }
  372.  
  373. rssPlusWrapDiv.innerHTML = '<iframe name="rpJSFrame" '+ forFireFoxBugflag + ' style="width:100%;height:100%;min-height:0px;border:0px;display: block!important;" allowTransparency="true"></iframe>';
  374.  
  375. var rssPlusWrapStyle = document.createElement("style");
  376. rssPlusWrapStyle.innerHTML = '#rss-plus-wrap{position:fixed;bottom:5px;right:5px;z-index:9999;width:30px;height:30px;}iframe{max-width: 100%!important;margin:0px !important;}';
  377.  
  378. rssPlusDiv.insertBefore(rssPlusWrapDiv, rssPlusDiv.firstChild);
  379. rssPlusDiv.insertBefore(rssPlusWrapStyle, rssPlusWrapDiv);
  380.  
  381. var body = document.getElementsByTagName("body");
  382. if (body && body[0]) body = body[0];
  383. insertAfter(rssPlusDiv, body.lastChild);
  384.  
  385. var rssPlusBoxDiv = document.createElement("div");
  386. rssPlusBoxDiv.setAttribute("id", "RSSPlusBox");
  387. rssPlusBoxDiv.innerHTML = rss_count_badge_html + rss_feed_list_html;
  388.  
  389. var frameBody = rpJSFrame.window.document.getElementsByTagName("body");
  390. if (frameBody && frameBody[0]) frameBody = frameBody[0];
  391. frameBody.insertBefore(rssPlusBoxDiv, frameBody.firstChild);
  392. frameBody.insertBefore(styleEl, frameBody.firstChild);
  393.  
  394. var rpFeedBadgeDiv = rpJSFrame.window.document.getElementById("rp-feed-badge");
  395. var rpCloseDiv = rpJSFrame.window.document.getElementById("rp-close-btn");
  396.  
  397. addEventHandler(rpCloseDiv, "click", function() {
  398. rpJSFrame.window.document.getElementById("rp-feed-list").style.display = "none";
  399. rpJSFrame.window.document.getElementById("rp-feed-badge").style.display = "block";
  400. rssPlusWrapDiv.style.width = rpJSFrame.window.document.getElementById("rp-feed-badge").offsetWidth + "px";
  401. rssPlusWrapDiv.style.height = rpJSFrame.window.document.getElementById("rp-feed-badge").offsetHeight + "px";
  402.  
  403. });
  404. addEventHandler(rpFeedBadgeDiv, "click", function() {
  405. rpJSFrame.window.document.getElementById("rp-feed-list").style.display = "block";
  406. rpJSFrame.window.document.getElementById("rp-feed-badge").style.display = "none";
  407. rssPlusWrapDiv.style.width = rpJSFrame.window.document.getElementById("RSSPlusBox").offsetWidth + "px";
  408. rssPlusWrapDiv.style.height = rpJSFrame.window.document.getElementById("RSSPlusBox").offsetHeight + "px";
  409. });
  410.  
  411. var copyFeedLinkButtons = rpJSFrame.window.document.getElementsByClassName("rp-copy-feed-link");
  412. var followFeedLinkButtons = rpJSFrame.window.document.getElementsByClassName("rp-follow-feed-link");
  413. for (i = 0; i < copyFeedLinkButtons.length; i++) {
  414. addEventHandler(copyFeedLinkButtons[i], "click", function() {
  415. copyFeedLink(this.getAttribute("index"));
  416. });
  417. }
  418. for (i = 0; i < followFeedLinkButtons.length; i++) {
  419. addEventHandler(followFeedLinkButtons[i], "click", function() {
  420. followFeedLink(this.getAttribute("index"));
  421. });
  422. }
  423. }
  424.  
  425. function notification(size) {
  426. GM_notification({
  427. title: lang.found + " " + size + " " + lang.feed,
  428. text: lang.click_the_number_to_view,
  429. timeout: 3000
  430. });
  431. }
  432.  
  433. function copyFeedLink(index) {
  434. GM_setClipboard(feeds[index].link);
  435. GM_notification({
  436. text: lang.copied + ": " + feeds[index].link,
  437. title: lang.copy_succeeded,
  438. timeout: 2000
  439. });
  440. }
  441.  
  442. function followFeedLink(index) {
  443. const rssService = GM_getValue("rss_service", "feedly");
  444. if( rssService === "feedly" ){
  445. window.open("https://feedly.com/i/subscription/feed/" + feeds[index].link, "_blank");
  446. }else if( rssService === "inoreader" ){
  447. window.open("https://www.inoreader.com/?add_feed=" + feeds[index].link, "_blank");
  448. }else if( rssService === "NewsBlur" ){
  449. window.open("http://www.newsblur.com/?url=" + feeds[index].link, "_blank");
  450. }
  451. // [feedly]https://feedly.com/i/subscription/feed%2Fhttp%3A%2F%2Ffeeds.howtogeek.com%2FHowToGeek
  452. // [inoreader]http://www.inoreader.com/?add_feed=https%3A%2F%2Fwww.howtogeek.com%2Ffeed%2F
  453. // [NewsBlur]http://www.newsblur.com/?url=https%3A%2F%2Ffeeds.howtogeek.com%2FHowToGeek
  454. // [theoldreader]https://theoldreader.com/feeds/subscribe?url=https://api.izgq.net/weibo/rss/1197161814
  455. }
  456.  
  457. function addEventHandler(target, eventName, eventHandler, scope) {
  458. var f = scope ? function() {
  459. eventHandler.apply(scope, arguments);
  460. } : eventHandler;
  461. if (target.addEventListener) {
  462. target.addEventListener(eventName, f, true);
  463. } else if (target.attachEvent) {
  464. target.attachEvent("on" + eventName, f);
  465. }
  466. return f;
  467. }
  468.  
  469.  
  470. // source: https://blog.csdn.net/liuyingshuai_blog/article/details/54580633?utm_source=copy
  471. function insertAfter(newElement, targetElement) {
  472. var parent = targetElement.parentNode;
  473. if (parent.lastChild == targetElement) {
  474. parent.appendChild(newElement);
  475. } else {
  476. parent.insertBefore(newElement, targetElement.nextSibling);
  477. }
  478. }
  479.  
  480.  
  481. var icon_logo = '<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 1024 1024"><<defs><style type="text/css"></style></defs><path d="M129.832 884.872a381.336 81.488 0 1 0 762.672 0 381.336 81.488 0 1 0-762.672 0Z" fill="#B8CBCD" p-id="1377"></path><path d="M208.52 243.224c-22.608-66.672 13.44-102.72 80.112-80.112l38.12 12.92L459.2 220.944c6.176 2.096 15.192 0.856 20.024-2.744l111.376-83.112 33.68-25.136c56.424-42.104 101.848-18.96 100.952 51.432l-0.512 40.024-1.784 139.96c-0.088 6.584 2.824 14.072 6.456 16.648 3.64 2.568 52.992 38.84 109.672 80.592l41.896 30.864c56.68 41.76 47.664 91.728-20.032 111.056l-41.832 11.936c-67.696 19.32-127.032 36.36-131.848 37.856-4.832 1.504-10.48 8.2-12.56 14.896-2.08 6.696-20.872 67.176-41.776 134.4l-11.424 36.736c-20.896 67.224-71.248 75.2-111.896 17.72l-28.4-40.144-78.176-110.544c-2.344-3.32-9.384-5.976-15.632-5.896l-139.36 1.784-41.216 0.528c-70.4 0.896-93.536-44.528-51.44-100.944l26.032-34.888L264.064 433.2c3.368-4.504 4.312-13.512 2.112-20.016l-45.12-133.04-12.536-36.92z" fill="#F6E89A" p-id="1378"></path><path d="M566.6 896.488c-27.272 0-54.488-17.24-76.616-48.544l-28.4-40.144-75.072-106.16-181.768 2.176c-57.552 0-79.488-26.6-87.44-42.456-8.024-16.008-16.256-49.872 18.808-96.856l107.224-143.688a1.632 1.632 0 0 0-0.032-0.312l-57.528-169.584c-15.696-46.272-5.656-74.584 5.528-90.184 19.992-27.872 59.288-35.856 105.024-20.36l169.752 57.56 0.168-0.016 143.664-107.2c22.928-17.112 45.304-25.792 66.488-25.792 18.512 0 34.968 6.768 47.608 19.576 16.912 17.128 25.624 43.816 25.2 77.192l-0.832 64.472c-0.752 58.376-1.368 107.024-1.464 114.936 13.904 10.144 62.248 45.696 106.352 78.184l41.896 30.864c47.464 34.968 49.192 69.84 46.008 87.52-3.184 17.68-17 49.752-73.688 65.936l-41.832 11.936a35027.144 35027.144 0 0 0-128.04 36.728 0.856 0.856 0 0 0-0.072 0.152l-53.168 171.064c-14.392 46.384-42.744 72.992-77.768 73zM387.088 653.504c11.472 0 27.16 4.208 35.52 16.056l78.168 110.528 28.4 40.144c12.512 17.696 26.504 28.264 37.432 28.256 12.184 0 24.432-15.04 31.952-39.248l53.2-171.128c3.768-12.08 13.984-26.24 28.368-30.704 5.528-1.72 71.656-20.688 132.384-38.024l41.832-11.936c22.792-6.504 37.6-17.08 39.624-28.296 2.024-11.216-8.168-26.304-27.24-40.352l-41.896-30.864c-61.624-45.4-106.256-78.176-109.28-80.312-11.704-8.296-16.768-24.336-16.608-36.568l1.472-115.496 0.832-64.472c0.248-19.664-3.888-35.288-11.36-42.856-3.56-3.616-7.84-5.296-13.456-5.296-10.312 0-23.736 5.776-37.792 16.264L493.552 237.44c-10.912 8.136-28.664 10.784-42.08 6.232L280.92 185.84c-24.128-8.184-43.456-7.104-50.592 2.864-6.36 8.872-6.016 26.368 0.912 46.808l57.648 169.984c4.744 14 2.432 31.304-5.616 42.08L174.584 593.216c-14.136 18.944-19.504 36.376-14.368 46.632 5.016 10 21.664 15.976 44.528 15.976l42.952-0.536 139.368-1.784h0.024z" fill="#8D4520" p-id="1379"></path><path d="M407.296 713.44a23.976 23.976 0 0 1-19.928-10.592l-20.152-29.944H149.624c-10.704 0-20.208-5.672-24.832-14.8-4.864-9.632-3.544-21.144 3.536-30.776l73.568-100.024c34.4-46.768 65.376-88.84 72.896-99.016a1.816 1.816 0 0 0-0.032-0.328c-1.736-5.064-21.912-58.88-49.016-130.296l-4.776-12.592c-22.096-58.224-4.672-87.296 7.688-99.448 11.44-11.248 38.048-27.168 87.744-7.344 57.136 22.792 103.344 40.96 116.336 45.872 1.712-0.664 4.232-1.984 6.384-3.872l15.472-13.584a24 24 0 1 1 31.656 36.08l-15.456 13.56c-12.872 11.304-33.4 20.168-50.24 14.456-7.664-2.6-68.536-26.64-121.928-47.936-19.36-7.728-32.184-7.072-36.312-3.016-5.168 5.088-6.272 22.336 3.536 48.192l4.776 12.592c22.424 59.08 47.152 124.728 49.72 132.304 4.744 14 2.432 31.312-5.624 42.08-3.328 4.472-36.712 49.8-74.152 100.704l-50.872 69.168h181.808c12.728 0 25.84 6.784 32.632 16.88l23.048 34.24a24 24 0 0 1-6.504 33.32 23.744 23.744 0 0 1-13.384 4.12z" fill="#FFFFFF" p-id="1380"></path><path d="M599.296 895.168l-46.592-11.544 33.2-133.96c15.208-61.36 32.44-129.664 34.952-137.752 3.768-12.08 13.984-26.24 28.368-30.704 7.048-2.192 84.76-20.24 135.272-31.832l29.376-6.744c28.376-6.512 37.296-16.584 38.056-20.992 0.76-4.408-4.312-16.872-28.912-32.448l-23.728-15.032c-41.984-26.584-110.544-70.144-115.776-73.84-11.688-8.272-16.752-24.312-16.592-36.552 0.088-7.08 1.384-73.52 2.616-135.488l2.472-123.352 47.984 0.96-2.472 123.344c-1.384 69.672-2.456 125.056-2.592 134.32 12.888 8.352 56.024 35.848 110.048 70.056l23.728 15.032c50.568 32.024 53.368 64.552 50.536 81.096-2.824 16.544-16.288 46.296-74.632 59.68l-29.376 6.744c-64.416 14.784-114.64 26.584-128.552 30.056l-0.008 0.008c-1.712 5.552-16.184 62.416-34.168 134.984l-33.208 133.96z" fill="#8D4520" p-id="1381"></path><path d="M566.6 896.488c-27.272 0-54.488-17.24-76.616-48.544l-28.4-40.144-75.072-106.16-181.768 2.176c-57.552 0-79.488-26.6-87.44-42.456-8.024-16.008-16.256-49.872 18.808-96.856l107.224-143.688a1.632 1.632 0 0 0-0.032-0.312l-57.528-169.584c-15.696-46.272-5.656-74.584 5.528-90.184 19.992-27.872 59.288-35.856 105.024-20.36l169.752 57.56 0.168-0.016 143.664-107.2c22.928-17.112 45.304-25.792 66.488-25.792 18.512 0 34.968 6.768 47.608 19.576 16.912 17.128 25.624 43.816 25.2 77.192l-0.832 64.472c-0.752 58.376-1.368 107.024-1.464 114.936 13.904 10.144 62.248 45.696 106.352 78.184l41.896 30.864c47.464 34.968 49.192 69.84 46.008 87.52-3.184 17.68-17 49.752-73.688 65.936l-41.832 11.936a35027.144 35027.144 0 0 0-128.04 36.728 0.856 0.856 0 0 0-0.072 0.152l-53.168 171.064c-14.392 46.384-42.744 72.992-77.768 73zM387.088 653.504c11.472 0 27.16 4.208 35.52 16.056l78.168 110.528 28.4 40.144c12.512 17.696 26.504 28.264 37.432 28.256 12.184 0 24.432-15.04 31.952-39.248l53.2-171.128c3.768-12.08 13.984-26.24 28.368-30.704 5.528-1.72 71.656-20.688 132.384-38.024l41.832-11.936c22.792-6.504 37.6-17.08 39.624-28.296 2.024-11.216-8.168-26.304-27.24-40.352l-41.896-30.864c-61.624-45.4-106.256-78.176-109.28-80.312-11.704-8.296-16.768-24.336-16.608-36.568l1.472-115.496 0.832-64.472c0.248-19.664-3.888-35.288-11.36-42.856-3.56-3.616-7.84-5.296-13.456-5.296-10.312 0-23.736 5.776-37.792 16.264L493.552 237.44c-10.912 8.136-28.664 10.784-42.08 6.232L280.92 185.84c-24.128-8.184-43.456-7.104-50.592 2.864-6.36 8.872-6.016 26.368 0.912 46.808l57.648 169.984c4.744 14 2.432 31.304-5.616 42.08L174.584 593.216c-14.136 18.944-19.504 36.376-14.368 46.632 5.016 10 21.664 15.976 44.528 15.976l42.952-0.536 139.368-1.784h0.024z" fill="#8D4520" p-id="1382"></path></svg>';
  482. var icon_close = '<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 1024 1024"><defs><style type="text/css"></style></defs><path d="M583.168 523.776L958.464 148.48c18.944-18.944 18.944-50.176 0-69.12l-2.048-2.048c-18.944-18.944-50.176-18.944-69.12 0L512 453.12 136.704 77.312c-18.944-18.944-50.176-18.944-69.12 0l-2.048 2.048c-19.456 18.944-19.456 50.176 0 69.12l375.296 375.296L65.536 899.072c-18.944 18.944-18.944 50.176 0 69.12l2.048 2.048c18.944 18.944 50.176 18.944 69.12 0L512 594.944 887.296 970.24c18.944 18.944 50.176 18.944 69.12 0l2.048-2.048c18.944-18.944 18.944-50.176 0-69.12L583.168 523.776z" p-id="3440"></path></svg>';
  483. var styleHtml = 'body {margin: 0px;}#RSSPlusBox { position:fixed;z-index:99999;bottom:0px; right:0px; }div.feed-title { font-weight: bold;font-size:0.8rem; cursor: pointer;}div.feed-tips,div.feed-tips a { font-size: 0.75rem; color: rgb(158, 158, 158);}.card-title {}.rp-card-extra { position:absolute;right:16px;top:1px;}.rp-table-body { max-height: 400px; height: auto; overflow-x: hidden;}.table-footer { position: fixed; bottom: 0 ; padding-left: 10px; width: 100%; background-color: #fff;}.table-footer a { color: #ed3f14;}.support-box { height: 28px; line-height: 28px;}#rp-feed-list{display:none;z-index:23333;box-shadow: 1px 1px 2px 2px #4242426b; width:600px;max-height:460px;} #rp-feed-badge{width: 28px; height: 28px; line-height: 28px; border-radius: 14px; float: right;cursor: pointer;z-index:23333;}#rp-feed-badge:hover{border-color:#e9eaec}.badge{ top:-17px; left: -6%; width: 26px; height: 26px; line-height: 26px; border-radius: 13px;}.rp-card:hover{-webkit-box-shadow:0 1px 6px rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.2);border-color:#eee}.rp-card{background:#fff;border-radius:4px;font-size:14px;position:relative;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.rp-card-bordered:hover{border-color:#e9eaec}.rp-card-bordered{border:1px solid #dddee1;border-color:#e9eaec}.rp-mark-count{font-weight:bold;color: #ed3f14;}.rp-badge-count{position:relative;display:inline-block;width: 26px;height: 26px;line-height: 26px;border-radius: 15px;min-width: 20px;background:#4b5979;border: 1px solid transparent;color: #fff;text-align: center;font-size: 12px;white-space: nowrap;-webkit-transform-origin: -10% center;-ms-transform-origin: -10% center;transform-origin: -10% center;z-index: 10;-webkit-box-shadow: 0 0 0 1px #fff;box-shadow: 0 0 0 1px #fff;}.rp-badge-count a,.rp-badge-count a:hover{color:#fff}.rp-card-head{border-bottom:1px solid #e9eaec;padding:10px 16px;line-height:1}.rp-tooltip{display:inline-block}.rp-tooltip-rel{display:inline-block;position:relative}.rp-btn{display:inline-block;margin-bottom:0;font-weight:400;text-align:center;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;line-height:1.5;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;padding:6px 15px;font-size:12px;border-radius:4px;-webkit-transition:color .2s linear,background-color .2s linear,border .2s linear,-webkit-box-shadow .2s linear;transition:color .2s linear,background-color .2s linear,border .2s linear,-webkit-box-shadow .2s linear;transition:color .2s linear,background-color .2s linear,border .2s linear,box-shadow .2s linear;transition:color .2s linear,background-color .2s linear,border .2s linear,box-shadow .2s linear,-webkit-box-shadow .2s linear;color:#495060;background-color:#f7f7f7;border-color:#dddee1}.rp-btn>.rp-icon{line-height:1}.rp-btn,.rp-btn:active,.rp-btn:focus{outline:0}.rp-btn:not([disabled]):hover{text-decoration:none}.rp-btn:not([disabled]):active{outline:0}.rp-btn.disabled,.rp-btn[disabled]{cursor:not-allowed}.rp-btn.disabled>*,.rp-btn[disabled]>*{pointer-events:none}.rp-btn>a:only-child{color:currentColor}.rp-btn>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:0 0}.rp-btn:hover{color:#6d7380;background-color:#f9f9f9;border-color:#e4e5e7}.rp-btn:hover>a:only-child{color:currentColor}.rp-btn:hover>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:0 0}.rp-btn.active,.rp-btn:active{color:#454c5b;background-color:#ebebeb;border-color:#ebebeb}.rp-btn.active>a:only-child,.rp-btn:active>a:only-child{color:currentColor}.rp-btn.active>a:only-child:after,.rp-btn:active>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:0 0}.rp-btn.disabled,.rp-btn.disabled.active,.rp-btn.disabled:active,.rp-btn.disabled:focus,.rp-btn.disabled:hover,.rp-btn[disabled],.rp-btn[disabled].active,.rp-btn[disabled]:active,.rp-btn[disabled]:focus,.rp-btn[disabled]:hover,fieldset[disabled] .rp-btn,fieldset[disabled] .rp-btn.active,fieldset[disabled] .rp-btn:active,fieldset[disabled] .rp-btn:focus,fieldset[disabled] .rp-btn:hover{color:#bbbec4;background-color:#f7f7f7;border-color:#dddee1}.rp-btn.disabled.active>a:only-child,.rp-btn.disabled:active>a:only-child,.rp-btn.disabled:focus>a:only-child,.rp-btn.disabled:hover>a:only-child,.rp-btn.disabled>a:only-child,.rp-btn[disabled].active>a:only-child,.rp-btn[disabled]:active>a:only-child,.rp-btn[disabled]:focus>a:only-child,.rp-btn[disabled]:hover>a:only-child,.rp-btn[disabled]>a:only-child,fieldset[disabled] .rp-btn.active>a:only-child,fieldset[disabled] .rp-btn:active>a:only-child,fieldset[disabled] .rp-btn:focus>a:only-child,fieldset[disabled] .rp-btn:hover>a:only-child,fieldset[disabled] .rp-btn>a:only-child{color:currentColor}.rp-btn.disabled.active>a:only-child:after,.rp-btn.disabled:active>a:only-child:after,.rp-btn.disabled:focus>a:only-child:after,.rp-btn.disabled:hover>a:only-child:after,.rp-btn.disabled>a:only-child:after,.rp-btn[disabled].active>a:only-child:after,.rp-btn[disabled]:active>a:only-child:after,.rp-btn[disabled]:focus>a:only-child:after,.rp-btn[disabled]:hover>a:only-child:after,.rp-btn[disabled]>a:only-child:after,fieldset[disabled] .rp-btn.active>a:only-child:after,fieldset[disabled] .rp-btn:active>a:only-child:after,fieldset[disabled] .rp-btn:focus>a:only-child:after,fieldset[disabled] .rp-btn:hover>a:only-child:after,fieldset[disabled] .rp-btn>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:0 0}.rp-btn:hover{color:#57a3f3;background-color:#fff;border-color:#57a3f3}.rp-btn:hover>a:only-child{color:currentColor}.rp-btn:hover>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:0 0}.rp-btn.active,.rp-btn:active{color:#2b85e4;background-color:#fff;border-color:#2b85e4}.rp-btn.active>a:only-child,.rp-btn:active>a:only-child{color:currentColor}.rp-btn.active>a:only-child:after,.rp-btn:active>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:0 0}.rp-btn:focus{-webkit-box-shadow:0 0 0 2px rgba(45,140,240,.2);box-shadow:0 0 0 2px rgba(45,140,240,.2)}.rp-btn-long{width:100%}.rp-btn>.rp-icon+span,.rp-btn>span+.rp-icon{margin-left:4px}.rp-table{width:inherit;max-height:280px;max-width:100%;overflow:auto;color:#495060;font-size:12px;background-color:#fff;-webkit-box-sizing:border-box;box-sizing:border-box}.rp-table:before{content:"";width:100%;height:1px;position:absolute;left:0;bottom:0;background-color:#dddee1;z-index:1}.rp-table:after{content:"";width:1px;height:100%;position:absolute;top:0;right:0;background-color:#dddee1;z-index:3}.rp-table-body{overflow:auto}.rp-table td,.rp-table th{min-width:0;height:48px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:left;text-overflow:ellipsis;vertical-align:middle;border-bottom:1px solid #e9eaec}.rp-table th{height:40px;white-space:nowrap;overflow:hidden;background-color:#f8f8f9}.rp-table td{background-color:#fff;-webkit-transition:background-color .2s ease-in-out;transition:background-color .2s ease-in-out}//.rp-table-cell span{display:none}.rp-table-cell{display:inline-block;word-wrap:normal;vertical-align:middle}.rp-table-cell{padding-top:5px; padding-bottom:5px; padding-left:18px;padding-right:18px;overflow:hidden;text-overflow:ellipsis;white-space:normal;word-break:break-all;-webkit-box-sizing:border-box;box-sizing:border-box}td.rp-table-column-center,th.rp-table-column-center{text-align:center}td.rp-table-column-right,th.rp-table-column-right{text-align:right}.rp-table table{table-layout:fixed;width: 100%;}.rp-btn-primary{color:#fff;background-color:#2d8cf0;border-color:#2d8cf0;margin:5px;}.rp-btn-primary>a:only-child{color:currentColor}.rp-btn-primary>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:0 0}.rp-btn-primary:hover{color:#fff;background-color:#57a3f3;border-color:#57a3f3}.rp-btn-primary:hover>a:only-child{color:currentColor}.rp-btn-primary:hover>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:0 0}.rp-btn-primary.active,.rp-btn-primary:active{color:#f2f2f2;background-color:#2b85e4;border-color:#2b85e4}.rp-btn-primary.active>a:only-child,.rp-btn-primary:active>a:only-child{color:currentColor}.rp-btn-primary.active>a:only-child:after,.rp-btn-primary:active>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:0 0}.rp-btn-primary.disabled,.rp-btn-primary.disabled.active,.rp-btn-primary.disabled:active,.rp-btn-primary.disabled:focus,.rp-btn-primary.disabled:hover,.rp-btn-primary[disabled],.rp-btn-primary[disabled].active,.rp-btn-primary[disabled]:active,.rp-btn-primary[disabled]:focus,.rp-btn-primary[disabled]:hover,fieldset[disabled] .rp-btn-primary,fieldset[disabled] .rp-btn-primary.active,fieldset[disabled] .rp-btn-primary:active,fieldset[disabled] .rp-btn-primary:focus,fieldset[disabled] .rp-btn-primary:hover{color:#bbbec4;background-color:#f7f7f7;border-color:#dddee1}.rp-btn-primary.disabled.active>a:only-child,.rp-btn-primary.disabled:active>a:only-child,.rp-btn-primary.disabled:focus>a:only-child,.rp-btn-primary.disabled:hover>a:only-child,.rp-btn-primary.disabled>a:only-child,.rp-btn-primary[disabled].active>a:only-child,.rp-btn-primary[disabled]:active>a:only-child,.rp-btn-primary[disabled]:focus>a:only-child,.rp-btn-primary[disabled]:hover>a:only-child,.rp-btn-primary[disabled]>a:only-child,fieldset[disabled] .rp-btn-primary.active>a:only-child,fieldset[disabled] .rp-btn-primary:active>a:only-child,fieldset[disabled] .rp-btn-primary:focus>a:only-child,fieldset[disabled] .rp-btn-primary:hover>a:only-child,fieldset[disabled] .rp-btn-primary>a:only-child{color:currentColor}.rp-btn-primary.disabled.active>a:only-child:after,.rp-btn-primary.disabled:active>a:only-child:after,.rp-btn-primary.disabled:focus>a:only-child:after,.rp-btn-primary.disabled:hover>a:only-child:after,.rp-btn-primary.disabled>a:only-child:after,.rp-btn-primary[disabled].active>a:only-child:after,.rp-btn-primary[disabled]:active>a:only-child:after,.rp-btn-primary[disabled]:focus>a:only-child:after,.rp-btn-primary[disabled]:hover>a:only-child:after,.rp-btn-primary[disabled]>a:only-child:after,fieldset[disabled] .rp-btn-primary.active>a:only-child:after,fieldset[disabled] .rp-btn-primary:active>a:only-child:after,fieldset[disabled] .rp-btn-primary:focus>a:only-child:after,fieldset[disabled] .rp-btn-primary:hover>a:only-child:after,fieldset[disabled] .rp-btn-primary>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:0 0}.rp-btn-primary.active,.rp-btn-primary:active,.rp-btn-primary:hover{color:#fff}.rp-btn-primary:focus{-webkit-box-shadow:0 0 0 2px rgba(45,140,240,.2);box-shadow:0 0 0 2px rgba(45,140,240,.2)}.rp-btn-group:not(.rp-btn-group-vertical) .rp-btn-primary:not(:first-child):not(:last-child){border-right-color:#2b85e4;border-left-color:#2b85e4}.rp-btn-group:not(.rp-btn-group-vertical) .rp-btn-primary:first-child:not(:last-child){border-right-color:#2b85e4}.rp-btn-group:not(.rp-btn-group-vertical) .rp-btn-primary:first-child:not(:last-child)[disabled]{border-right-color:#dddee1}.rp-btn-group:not(.rp-btn-group-vertical) .rp-btn-primary+.rp-btn,.rp-btn-group:not(.rp-btn-group-vertical) .rp-btn-primary:last-child:not(:first-child){border-left-color:#2b85e4}.rp-btn-group:not(.rp-btn-group-vertical) .rp-btn-primary+.rp-btn[disabled],.rp-btn-group:not(.rp-btn-group-vertical) .rp-btn-primary:last-child:not(:first-child)[disabled]{border-left-color:#dddee1}.rp-btn-group-vertical .rp-btn-primary:not(:first-child):not(:last-child){border-top-color:#2b85e4;border-bottom-color:#2b85e4}.rp-btn-group-vertical .rp-btn-primary:first-child:not(:last-child){border-bottom-color:#2b85e4}.rp-btn-group-vertical .rp-btn-primary:first-child:not(:last-child)[disabled]{border-top-color:#dddee1}.rp-btn-group-vertical .rp-btn-primary+.rp-btn,.rp-btn-group-vertical .rp-btn-primary:last-child:not(:first-child){border-top-color:#2b85e4}.rp-btn-group-vertical .rp-btn-primary+.rp-btn[disabled],.rp-btn-group-vertical .rp-btn-primary:last-child:not(:first-child)[disabled]{border-bottom-color:#dddee1}#card-tips{margin-top: 5px;}.rp-btn-small {padding: 2px 7px;font-size: 12px;border-radius: 3px;';