kf复数引用脚本

对kf的帖子进行复数引用

  1. // ==UserScript==
  2. // @name kf复数引用脚本
  3. // @namespace https://gf.qytechs.cn/users/14059
  4. // @description 对kf的帖子进行复数引用
  5. // @include https://bbs.ikfol.com/read.php*
  6. // @include https://kf.miaola.info/read.php*
  7. // @author setycyas
  8. // @version 0.05
  9. // @grant GM_getValue
  10. // @grant GM_setValue
  11. // @run-at document-end
  12. // @license MIT
  13. // ==/UserScript==
  14.  
  15. (function(){
  16. /* 脚本正式开始 */
  17.  
  18. 'use strict';
  19. console.log("KF复数引用 is running!");
  20.  
  21. /****************************************
  22. ######## 油猴API以及常用API示例 #########
  23. ****************************************/
  24.  
  25. //数据读写api
  26. //GM_setValue(key,value);
  27. //GM_getValue(key);
  28.  
  29. /****************************************
  30. ######## version 20190817 0.05 ###########
  31. ######## 脚本正式开始 ###################
  32. ****************************************/
  33.  
  34. /* Global Variable & Const */
  35. const QUOTE_GM = 'quote_gm'; // 在油猴中记录引用资料的数据key
  36. const LAST_TID_GM = 'last_tid_gm'; // 在油猴中记录最近引用的帖子的tid的数据key
  37. var G_quotes = {}; // 引用字典,每一项的key为楼层(文本格式),value为二元组[id, text]
  38. var G_datas = {}; // 帖子内容表,每一项的key为楼层(文本格式),value为二元组[id, text]
  39. /* Functions */
  40. // 从一个url中获取帖子的tid,返回的是一个字符串而不是数字,获取失败返回字符串'0'
  41. function getTidFromUrl(url){
  42. let reg = /tid=(\d+)/;
  43. let matchs = url.match(reg);
  44. if(matchs)
  45. return matchs[1];
  46. else
  47. return '0';
  48. }
  49.  
  50. // 从一个url获取帖子的页数,返回数字
  51. function getPageFromUrl(url){
  52. let reg = /&page=(\d+)/;
  53. let matchs = url.match(reg);
  54. if(matchs)
  55. return parseInt(matchs[1]);
  56. else
  57. return 1;
  58. }
  59. // 获取本页的帖子内容,制作公有变量G_datas
  60. function getG_datas(){
  61. let startFloor = (getPageFromUrl(window.location.href)-1)*10; // 开始楼层
  62. let $idA = $('.readidmsbottom a'); // 所有显示楼主名称的a标签,其innerText就是楼主名字
  63. let floorLength = $idA.length; // 当页总楼层
  64. let $textDiv = $('.readtext td > div'); // 所有楼层的文本内容
  65. for(let i = 0;i < floorLength;i++){
  66. G_datas[(i+startFloor)+''] = [$idA[i].innerText, $textDiv[i].innerText];
  67. // 把关键词,以往帖子的文本删除
  68. let text = $textDiv[i].innerText;
  69. let fieldsets = $textDiv[i].getElementsByTagName('fieldset');
  70. for(let j = 0;j < fieldsets.length;j++){
  71. text = text.replace(fieldsets[j].innerText, '');
  72. }
  73. G_datas[(i+startFloor)+''] = [$idA[i].innerText, text];
  74. }
  75. }
  76. // 获取已记录的引用内容,若浏览帖子变更,则清空引用内容
  77. function getG_quotes(){
  78. let tid = getTidFromUrl(window.location.href); // 当前tid
  79. let lastTid = GM_getValue(LAST_TID_GM, '-1'); // 上次浏览的tid
  80. if(tid != lastTid){
  81. // 浏览tid改变,则清空引用
  82. GM_setValue(QUOTE_GM, '{}');
  83. G_quotes = {};
  84. }else{
  85. // 浏览tid不变,则获取引用
  86. G_quotes = JSON.parse(GM_getValue(QUOTE_GM, '{}'));
  87. }
  88. }
  89. // 增加一条引用,参数为引用楼层floor
  90. function addQuote(floor){
  91. if(floor in G_datas){
  92. G_quotes[floor] = G_datas[floor];
  93. GM_setValue(QUOTE_GM, JSON.stringify(G_quotes));
  94. }
  95. }
  96. // 使用所有引用
  97. function useQuote(){
  98. // 获取所有id,文本
  99. let idList = [];
  100. let textList = [];
  101. for (let floor in G_quotes){
  102. let id = G_quotes[floor][0];
  103. let text = G_quotes[floor][1];
  104. idList.push(id);
  105. text = ['[quote]引用', floor, '楼 ', id, '\n', text.trim(),'\n','[/quote]'].join('');
  106. textList.push(text);
  107. }
  108. // 写入所有id,文本
  109. let newIdList = []; // 排除重复用
  110. for(let i = 0;i < idList.length;i++){
  111. if($.inArray(idList[i], newIdList) < 0){
  112. newIdList.push(idList[i]);
  113. }
  114. }
  115. $('input.input').val(newIdList.join(','));
  116. $('div.dcol textarea').val(textList.join('\n\n')).focus();
  117. }
  118. // 改变所有'引用'链接的点击行为
  119. function changeQuote(){
  120. // 查找相对复杂,先找到所有符合的a,然后匹配引用楼层
  121. let $pagesA = $('div.readlou ul.pages>li>a');
  122. let reg = /post.php\?action=quote.*article=(\d+)/;
  123. for(let i = 0;i < $pagesA.length;i++){
  124. let a = $pagesA[i];
  125. let matchs = a.href.match(reg);
  126. if(matchs){
  127. let floor = matchs[1];
  128. a.href = 'javascript:';
  129. $(a).click(function(){
  130. addQuote(floor);
  131. useQuote();
  132. });
  133. }
  134. }
  135. }
  136. // 测试用
  137. function test(){
  138. console.log('tid = ',getTidFromUrl(window.location.href));
  139. console.log('page = ',getPageFromUrl(window.location.href));
  140. console.log('G_quotes = ',JSON.stringify(G_quotes));
  141. }
  142. /* Main Script */
  143. getG_datas(); // 获取帖子内容
  144. getG_quotes(); // 获取已记录的引用,没有则是空
  145. changeQuote(); // 改变'引用'链接的行为
  146. GM_setValue(LAST_TID_GM, getTidFromUrl(window.location.href)); // 记录最后访问的tid
  147. test(); // 测试显示用,可不要
  148.  
  149. /* 脚本结束 */
  150. })();

QingJ © 2025

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