RSS+ : 显示当前网站所有的 RSS

显示当前网站所有的 RSS

目前为 2018-10-28 提交的版本。查看 最新版本

  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 2018.10.23
  12. // @version 0.4
  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. // @include *
  21. // @match http://*/*
  22. // @match https://*/*
  23. // @grant GM_xmlhttpRequest
  24. // @grant GM_setClipboard
  25. // @grant GM_notification
  26. // @grant GM_getValue
  27. // @grant GM_setValue
  28. // @grant unsafeWindow
  29. // @noframes
  30. // @run-at document-end
  31. // ==/UserScript==
  32.  
  33. // 2018.10.29_0.4 1.在无法链接服务器时也能展示本地的RSS;2.开启 Content-Security-Policy 的网站,直接展示本地的RSS;增加发现RSS后,进行h5通知
  34. // 2018.10.23_0.4 1.增加识别为 wordpress 站点时,尝试使用/feed后缀;2.增加多语言支持
  35. // 2018-10-16_0.3 1.改为iframe方式显示,兼容性更好;2.改为post方式传递页面地址;
  36. // 2018-10-14_0.2 第一个 RSS+ 成型;
  37. // 2018.09.16_0.1 在 RSS+Atom Feed Subscribe Button Generator 脚本基础上增加连接后端获取feed的方式;
  38. if(location.href.match(/api\.wizos\.me/i)){
  39. return;
  40. }
  41.  
  42. var feeds = [];
  43. var feedsMap = {};
  44.  
  45. var zhcn = {
  46. "copied":"已复制",
  47. "copy" : "复制",
  48. "copy_succeeded" : "复制成功",
  49. "follow" : "订阅",
  50. "found":"发现 ",
  51. "feed": " 个订阅源",
  52. "click_the_number_to_view":"点击右下角的数字查看",
  53. "close": "关闭"
  54. };
  55. var zh = zhcn;
  56. var zhtw = {
  57. "copied":"已複製",
  58. "copy" : "複製",
  59. "copy_succeeded" : "複製成功",
  60. "follow" : "訂閱",
  61. "found":"發現 ",
  62. "feed": " 個訂閱源",
  63. "click_the_number_to_view":"點擊右下角的數位查看",
  64. "close": "關閉"
  65. };
  66. var en = {
  67. "copied":"copied",
  68. "copy" : "copy",
  69. "copy_succeeded" : "copy succeeded",
  70. "follow" : "follow",
  71. "found":"found ",
  72. "feed": " feed",
  73. "click_the_number_to_view":"click on the number in the lower right corner to view it",
  74. "close": "close"
  75. };
  76.  
  77. var languages = {};
  78. languages.zhcn = zhcn;
  79. languages.zhtw = zhtw;
  80. languages.zh = zh;
  81. languages.en = en;
  82. var language = navigator.language.replace('-',"").toLowerCase();
  83. var lang = languages[language];
  84. if( !lang ){
  85. lang = languages.en;
  86. }
  87.  
  88. setTimeout(function(){
  89. if(location.href.match(/github\.com/i)){
  90. show();
  91. }else{
  92. showWithCloudFeeds( location.href );
  93. }
  94. },0);
  95.  
  96.  
  97. function showWithCloudFeeds(url) {
  98. var ajax = new XMLHttpRequest();
  99. ajax.onreadystatechange = function() {
  100. //console.log("当前状态A:" + ajax.readyState + "," + ajax.status );
  101. if ( ajax.readyState != 4 ) {
  102. return;
  103. }
  104. if( ajax.status == 200 ){
  105. var obj = JSON.parse(ajax.responseText);
  106. show(obj.feeds);
  107. }else{
  108. show();
  109. }
  110. };
  111. ajax.open("POST", "https://api.wizos.me/find.php", true);
  112. var data = new FormData();
  113. data.append("url",url);
  114. ajax.send( data );
  115. }
  116.  
  117. function show(cloudFeeds) {
  118. getKnowFeeds();
  119. getUnknownFeeds();
  120. if (cloudFeeds != null) {
  121. console.log("云端有feeds");
  122. console.log(cloudFeeds);
  123. cloudFeeds.forEach(element => {
  124. addRSS(element.title, element.link, element.type);
  125. });
  126. }
  127. render(feeds);
  128. }
  129.  
  130. function addRSS(title, link, type) {
  131. // console.log("添加新的RSS:" + title + "," + link);
  132. var feed = {};
  133. feed.title = title;
  134. feed.link = link.toLowerCase().replace(/(\/$)/g,"");
  135. // 放重复
  136. if (!feedsMap[feed.link]) {
  137. //如果能查找到,证明数组元素重复了
  138. feedsMap[feed.link] = 1;
  139. feeds.push(feed);
  140. }
  141. }
  142.  
  143. // 获取在<head>的<link>元素中,已经声明为RSS的链接
  144. function getKnowFeeds() {
  145. var linkElems = document.getElementsByTagName("link");
  146. var link;
  147. for (var i = 0, l = linkElems.length; i < l; i++) {
  148. link = linkElems[i];
  149. if (!link) continue;
  150. var linkhref = link.href;
  151. var linktype = link.type;
  152. var linktitle = document.title;
  153. if (link.title) {
  154. linktitle = link.title;
  155. }
  156. if (linktype && linktype.match(/.*\/(rss|atom)\+xml?$/i)) {
  157. addRSS(linktitle, linkhref);
  158. } else if (linktype && linktype.match(/^text\/xml$/i)) {
  159. addRSS(linktitle, linkhref);
  160. }
  161. }
  162. }
  163.  
  164. function getUnknownFeeds() {
  165. var link;
  166. var headlinks = document.querySelectorAll("head > link");
  167. for (var i = 0, len = headlinks.length; i < len; i++) {
  168. link = headlinks[i];
  169. if(link.href.match(/wp-content/)){
  170. checkFeed( document.location.protocol + '//' + document.domain );
  171. break;
  172. }
  173. }
  174.  
  175. if (!document.links) {
  176. document.links = document.getElementsByTagName("a");
  177. }
  178. var links = document.links;
  179. for (var a = 0, len = links.length; a < len; a++) {
  180. link = links[a];
  181. var linkhref = link.href;
  182. var linktitle = document.title;
  183. if (link.title) {
  184. linktitle = link.title;
  185. } else if (link.innerText) {
  186. linktitle = link.innerText;
  187. }
  188. // console.log("检查RSS:" + linkhref + " , " + link.title);
  189. if (
  190. linkhref.match(/^rss:/) ||
  191. linkhref.match(
  192. /^(https|http|ftp|feed).*([\.\/]rss([\.\/]xml|\.aspx|\.jsp|\/)?$|\/node\/feed$|\/rss\/[a-z0-9]+$|[?&;](rss|xml|rdf)=|[?&;]feed=rss[0-9.]*$|[?&;]action=rss_rc$|feeds\.feedburner\.com\/[\w\W]+$)/i
  193. )
  194. ) {
  195. addRSS(linktitle, linkhref);
  196. } else if (
  197. linkhref.match(
  198. /^(https|http|ftp|feed).*\/atom(\.xml|\.aspx|\.jsp|\/)?$|[?&;]feed=atom[0-9.]*$/i
  199. )
  200. ) {
  201. addRSS(linktitle, linkhref);
  202. } else if (
  203. linkhref.match(
  204. /^(https|http|ftp|feed).*(\/feeds?\/[^.\/]*\.xml$|.*\/index\.xml$|feed\/msgs\.xml(\?num=\d+)?$)/i
  205. )
  206. ) {
  207. addRSS(linktitle, linkhref);
  208. } else if (linkhref.match(/^(https|http|ftp|feed).*\.rdf$/i)) {
  209. addRSS(linktitle, linkhref);
  210. } else if (linkhref.match(/^feed:\/\//i)) {
  211. addRSS(linktitle, linkhref);
  212. }
  213. }
  214. }
  215. var wp_feed_suffix = ['/?feed=rss2','/?feed=rss','/feed'];
  216. function checkFeed(href) {
  217. var flag = wp_feed_suffix.pop();
  218. //console.log("弹出:" + flag );
  219. if( !flag){
  220. return;
  221. }
  222. var ajax = new XMLHttpRequest();
  223. ajax.onreadystatechange = function() {
  224. if( ajax.readyState == 4 ) {
  225. if( ajax.status == 200 ){
  226. addRSS(document.title, href + flag);
  227. }else{
  228. checkFeed(href);
  229. }
  230. }
  231. };
  232. ajax.open("HEAD", href + flag, false);
  233. ajax.send();
  234. }
  235.  
  236. function render(feeds) {
  237. if (!feeds || feeds.length <= 0) {
  238. console.log("该页没有发现feed");
  239. return;
  240. }
  241. var rss_plus_html = "";
  242. var element, tips, desc;
  243. for (var i = 0; i < feeds.length; i++) {
  244. element = feeds[i];
  245. tips = "";
  246. desc = "";
  247. // console.log("feed信息:" + element.title + element.link);
  248.  
  249. if (element.follows) {
  250. tips = " - " + element.follows + "人订阅";
  251. }
  252. if (element.update) {
  253. tips += " - " + element.update + "更新";
  254. }
  255. if (element.desc) {
  256. desc = ' title="' + element.desc + '"';
  257. }
  258. rss_plus_html +=
  259. '<tr><td class=""><div class="rp-table-cell"><div class="feed-title"' +
  260. desc +
  261. ">" +
  262. element.title +
  263. '</div><div class="feed-tips"><a href="' + element.link + '" target="_blank">' +
  264. element.link + '</a>' +
  265. tips +
  266. '</div></div></td><td class="rp-table-column-center"><div class="rp-table-cell" sytle="display:inline">';
  267. rss_plus_html +=
  268. '<button type="button" index="' +
  269. i +
  270. '" class="rp-btn rp-btn-primary rp-btn-small rp-copy-feed-link" data-clipboard-action="copy" data-clipboard-target=".feed-title"><i class="rp-icon icon-copy"></i><span>' + lang.copy +'</span></button>';
  271. rss_plus_html +=
  272. '<button type="button" index="' +
  273. i +
  274. '" class="rp-btn rp-btn-primary rp-btn-small rp-follow-feed-link"><i class="rp-icon icon-subs"></i><span>' + lang.follow +'</span></button></div></td></tr>';
  275. }
  276.  
  277. var rss_count_badge_html =
  278. '<div id="rp-feed-badge" class="rp-card rp-card-bordered"><span class="rp-badge-count" place="count">' +
  279. feeds.length +
  280. "</span></div>";
  281.  
  282. var rss_feed_list_html =
  283. '<div id="rp-feed-list" class="rp-card rp-card-bordered"><div id="rp-card-head" class="rp-card-head"><div class="card-title"><i class="rp-icon icon-star"></i>' + lang.found +'<span class="rp-mark-count" place="count">' +
  284. feeds.length +
  285. '</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><i class="rp-icon icon-close"></i></span></button></div>';
  286.  
  287. rss_feed_list_html +=
  288. '<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">' +
  289. rss_plus_html +
  290. "</tbody></table></div></div></div></div>";
  291.  
  292. var styleEl = document.createElement("style");
  293. styleEl.innerHTML = styleHtml;
  294.  
  295. // 安装 RSS Plus Box 和 RSS Plus Frame
  296. var rssPlusDiv = document.createElement("div");
  297. rssPlusDiv.setAttribute("id", "rss-plus");
  298.  
  299. var rssPlusWrapDiv = document.createElement("div");
  300. rssPlusWrapDiv.setAttribute("id", "rss-plus-wrap");
  301. rssPlusWrapDiv.innerHTML = '<iframe name="rpJSFrame" src="about:blank" style="width:100%;height:100%;border:0px;display: block!important;" allowTransparency="true"></iframe>';
  302.  
  303. var rssPlusWrapStyle = document.createElement("style");
  304. rssPlusWrapStyle.innerHTML = '#rss-plus-wrap{position:fixed;width:370px;bottom:10px;right:20px;z-index:999;height:56px}';
  305.  
  306. rssPlusDiv.insertBefore(rssPlusWrapDiv,rssPlusDiv.firstChild);
  307. rssPlusDiv.insertBefore(rssPlusWrapStyle, rssPlusWrapDiv);
  308.  
  309. //var head = document.getElementsByTagName("head");
  310. //if (head && head[0]) head = head[0];
  311. var body = document.getElementsByTagName("body");
  312. if (body && body[0]) body = body[0];
  313. insertAfter(rssPlusDiv, body.lastChild);
  314. // body.insertBefore(rssPlusBoxDiv, body.firstChild);
  315.  
  316. var rssPlusBoxDiv = document.createElement("div");
  317. rssPlusBoxDiv.setAttribute("id", "RSSPlusBox");
  318. rssPlusBoxDiv.innerHTML = rss_count_badge_html + rss_feed_list_html;
  319.  
  320. var frameBody = rpJSFrame.window.document.getElementsByTagName("body");
  321. if (frameBody && frameBody[0]) frameBody = frameBody[0];
  322. frameBody.insertBefore(rssPlusBoxDiv, frameBody.firstChild);
  323. frameBody.insertBefore(styleEl, frameBody.firstChild);
  324.  
  325. var rpFeedBadgeDiv = rpJSFrame.window.document.getElementById("rp-feed-badge");
  326. var rpCloseDiv = rpJSFrame.window.document.getElementById("rp-close-btn");
  327. addEventHandler(rpCloseDiv, "click", function() {
  328. rpJSFrame.window.document.getElementById("rp-feed-list").style.display = "none";
  329. rpJSFrame.window.document.getElementById("rp-feed-badge").style.display = "block";
  330. rssPlusWrapDiv.style.width = rpJSFrame.window.document.getElementById("rp-feed-badge").offsetWidth + "px";
  331. rssPlusWrapDiv.style.height = rpJSFrame.window.document.getElementById("rp-feed-badge").offsetHeight + "px";
  332.  
  333. });
  334. addEventHandler(rpFeedBadgeDiv, "click", function() {
  335. rpJSFrame.window.document.getElementById("rp-feed-list").style.display = "block";
  336. rpJSFrame.window.document.getElementById("rp-feed-badge").style.display = "none";
  337. rssPlusWrapDiv.style.width = rpJSFrame.window.document.getElementById("RSSPlusBox").offsetWidth + "px";
  338. rssPlusWrapDiv.style.height = rpJSFrame.window.document.getElementById("RSSPlusBox").offsetHeight + "px";
  339. });
  340.  
  341. var copyFeedLinkButtons = rpJSFrame.window.document.getElementsByClassName("rp-copy-feed-link");
  342. var followFeedLinkButtons = rpJSFrame.window.document.getElementsByClassName("rp-follow-feed-link");
  343. for (i = 0; i < copyFeedLinkButtons.length; i++) {
  344. addEventHandler(copyFeedLinkButtons[i], "click", function() {
  345. copyFeedLink(this.getAttribute("index"));
  346. });
  347. }
  348. for (i = 0; i < followFeedLinkButtons.length; i++) {
  349. addEventHandler(followFeedLinkButtons[i], "click", function() {
  350. followFeedLink(this.getAttribute("index"));
  351. });
  352. }
  353.  
  354. GM_notification({
  355. title: lang.found + " " + feeds.length + " " + lang.feed,
  356. text: lang.click_the_number_to_view,
  357. timeout: 3000
  358. });
  359. }
  360.  
  361.  
  362.  
  363. function copyFeedLink(index) {
  364. GM_setClipboard(feeds[index].link);
  365. GM_notification({
  366. text: lang.copied + ": " + feeds[index].link,
  367. title: lang.copy_succeeded,
  368. timeout: 2000
  369. });
  370. }
  371.  
  372. function followFeedLink(index) {
  373. // [feedly]https://feedly.com/i/subscription/feed%2Fhttp%3A%2F%2Ffeeds.howtogeek.com%2FHowToGeek
  374. // [inoreader]http://www.inoreader.com/?add_feed=https%3A%2F%2Fwww.howtogeek.com%2Ffeed%2F
  375. // [NewsBlur]http://www.newsblur.com/?url=https%3A%2F%2Ffeeds.howtogeek.com%2FHowToGeek
  376. // [theoldreader]https://theoldreader.com/feeds/subscribe?url=https://api.izgq.net/weibo/rss/1197161814
  377. window.open("https://www.inoreader.com/?add_feed=" + feeds[index].link, "_blank");
  378. }
  379.  
  380. function addEventHandler(target, eventName, eventHandler, scope) {
  381. var f = scope? function() {
  382. eventHandler.apply(scope, arguments);
  383. }
  384. : eventHandler;
  385. if (target.addEventListener) {
  386. target.addEventListener(eventName, f, true);
  387. } else if (target.attachEvent) {
  388. target.attachEvent("on" + eventName, f);
  389. }
  390. return f;
  391. }
  392.  
  393. function setupJsIframe(){
  394. var jsIframeDiv = document.createElement("div");
  395. jsIframeDiv.setAttribute("id", "RSSPlusFrame");
  396. jsIframeDiv.innerHTML = '<iframe name="rpJSFrame" src="about:blank" style="width:100%;height:100%;border:0px;display: block!important;" allowTransparency="true"></iframe>';
  397. var body = document.getElementsByTagName("body");
  398. if (body && body[0]) body = body[0];
  399. insertAfter(jsIframeDiv, body.lastChild);
  400. }
  401.  
  402. // source: https://blog.csdn.net/liuyingshuai_blog/article/details/54580633?utm_source=copy
  403. function insertAfter(newElement,targetElement){
  404. var parent=targetElement.parentNode;
  405. if(parent.lastChild==targetElement){
  406. parent.appendChild(newElement);
  407. }else{
  408. parent.insertBefore(newElement,targetElement.nextSibling);
  409. }
  410. }
  411. var styleHtml =
  412. '@font-face {font-family: "RSSPlus";src: url("iconfont.eot?t=1539525813084");src: url("iconfont.eot?t=1539525813084#iefix") format("embedded-opentype"),url("data:application/x-font-woff;charset=utf-8;base64,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") format("woff"),url("iconfont.ttf?t=1539525813084") format("truetype"),url("iconfont.svg?t=1539525813084#RSSPlus") format("svg");}.rp-icon{display:inline-block;font-family:RSSPlus !important;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;text-rendering:auto;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-subs:before { content: "\\e651"; }.icon-dollar:before { content: "\\e8a4"; }.icon-feedback:before { content: "\\e684"; }.icon-search:before { content: "\\e600"; }.icon-copy:before { content: "\\e64e"; }.icon-star:before { content: "\\e625"; }.icon-close:before { content: "\\e619"; } body {margin: 0px;}#RSSPlusBox { position:fixed;z-index:99999;bottom:0px; right:0px; width:600px;max-height:460px;}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;} #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;';

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址