BWiki工具列表: List Util

为bwiki提供一个快捷工具栏,可以操作当前页面、快速进入其他常见页面。实现简单便于DIY。

  1. // ==UserScript==
  2. // @name BWiki工具列表: List Util
  3. // @version 1.0.1
  4. // @description 为bwiki提供一个快捷工具栏,可以操作当前页面、快速进入其他常见页面。实现简单便于DIY。
  5. // @author Lu
  6. // @match *://wiki.biligame.com/*
  7. // @exclude *://wiki.biligame.com/*/api.php*
  8. // @namespace https://gf.qytechs.cn/users/416853
  9. // @license CC BY-SA
  10. // ==/UserScript==
  11.  
  12. console.log("List Util: 开始加载")
  13.  
  14. /* 小工具的HTML部分,基于BWiki使用的 bootstrap 中的 btn-group 实现 */
  15. let innerHTML = `
  16. <style>
  17. #list_util{
  18. position: fixed;
  19. top: 10px;
  20. left: 10px;
  21. z-index: 1501; /* 因为BWiki部分组件的 z-index 为令人迷惑的1500 */
  22. }
  23. #list_util .dropdown-menu{
  24. min-width:80px;
  25. left: 0;
  26. top: 30px;
  27. }
  28. #list_util .lu-btn{
  29. padding: 5px;
  30. color: #1FABE4; /* 从bili logo 取色 */
  31. }
  32. </style>
  33. <div id="list_util" class="btn-group" role="group">
  34. <!-- 用户 相关页面 -->
  35. <div class="btn-group">
  36. <button class="lu-btn btn btn-default dropdown-toggle" type="button" data-toggle="dropdown">
  37. <span class="glyphicon glyphicon-user"></span>
  38. </button>
  39. <ul class="dropdown-menu">
  40. <li><a id="lu-user" accesskey="u">用户页面</a></li>
  41. <li><a id="lu-preferences" accesskey=""></span> 参数设置</a></li>
  42. <li><a id="lu-watchlist">监视列表</a></li>
  43. <li role="separator" class="divider"></li>
  44. <li><a id="lu-mycontris">我的贡献</a></li>
  45. </ul>
  46. </div>
  47. <!-- 特殊页面 -->
  48. <div class="btn-group">
  49. <button class="lu-btn btn btn-default dropdown-toggle" type="button" data-toggle="dropdown">
  50. <span class="glyphicon glyphicon-tasks"></span>
  51. </button>
  52. <ul class="dropdown-menu">
  53. <li><a id="lu-specialpages"> 特殊页面</a></li>
  54. <li><a id="lu-recentchanges"> 最近更改</a></li>
  55. <li><a id="lu-allPages"> 所有页面</a></li>
  56. <li><a id="lu-filelist"> 文件列表</a></li>
  57. <li><a id="lu-contriscore"> 贡献得分</a></li>
  58. <li role="separator" class="divider"></li>
  59. <li><a id="lu-templates"> 模板</a></li>
  60. <li><a id="lu-modules"> 模块</a></li>
  61. </ul>
  62. </div>
  63. <!-- Wiki 设置和管理 -->
  64. <div class="btn-group">
  65. <button class="lu-btn btn btn-default dropdown-toggle" type="button" data-toggle="dropdown">
  66. <span class="glyphicon glyphicon-cog"></span>
  67. </button>
  68. <ul class="dropdown-menu">
  69. <li><a id="lu-moderation"> 版主审核</a></li>
  70. <li><a id="lu-comments"> 管理评论</a></li>
  71. <li><a id="lu-userrights"> 用户权限</a></li>
  72. <li role="separator" class="divider"></li>
  73. <li><a id="lu-Commoncss" href="MediaWiki:Common.css" target="_blank"> 通用css</a></li>
  74. <li><a id="lu-Commonjs" href="MediaWiki:Common.js" target="_blank"> 通用js</a></li>
  75. <li><a id="lu-Sitenotice" href="Mediawiki:Sitenotice" target="_blank"> 整站通告定义</a></li>
  76. <li><a id="lu-Sidebar" href="MediaWiki:Sidebar" target="_blank"> 导航栏定义</a></li>
  77. <li><a id="lu-Gadgets" href="MediaWiki:Gadgets-definition" target="_blank"> 小组件定义</a></li>
  78. <li role="separator" class="divider"></li>
  79. <li><a id="lu-Newarticletext" href="MediaWiki:Newarticletext" target="_blank"> 新页面提示</a></li>
  80. <li><a id="lu-Editnotice0" href="MediaWiki:Editnotice-0" target="_blank"> 页面修改提示</a></li>
  81. <li><a id="lu-Deletereason" href="MediaWiki:Deletereason-dropdown" target="_blank"> 页面删除原因</a></li>
  82. <li><a id="lu-Protect" href="MediaWiki:Protect-dropdown" target="_blank"> 页面保护原因</a></li>
  83. <li><a id="lu-Copyrightwarning2" href="MediaWiki:Copyrightwarning2" target="_blank"> 页面编辑版权警示</a></li>
  84. <li><a id="lu-Summary" href="MediaWiki:Summary" target="_blank"> 页面修改摘要</a></li>
  85. <li><a id="lu-Uploadtext" href="MediaWiki:Uploadtext" target="_blank"> 文件上传提示</a></li>
  86. <li><a id="lu-Licenses" href="MediaWiki:Licenses" target="_blank"> 文件上传协议</a></li>
  87. <li><a id="lu-Filedelete" href="MediaWiki:Filedelete-reason-dropdown" target="_blank"> 文件删除原因</a></li>
  88. </ul>
  89. </div>
  90. <!-- 页面相关操作 -->
  91. <div class="btn-group">
  92. <button class="lu-btn btn btn-default dropdown-toggle" type="button" data-toggle="dropdown">
  93. <span class="glyphicon glyphicon-edit"></span>
  94. </button>
  95. <ul class="dropdown-menu">
  96. <li><a id="lu-edit"> 编辑 (Shift+Alt+E)</a></li>
  97. <li><a id="lu-history"> 历史 (Shift+Alt+H)</a></li>
  98. <li><a id="lu-sortlink"> 短链接</a></li>
  99. <li role="separator" class="divider"></li>
  100. <li><a id="lu-purge"> 刷新</a></li>
  101. <li><a id="lu-protect"> 保护</a></li>
  102. <li><a id="lu-delete"> 删除 (Shift+Alt+D)</a></li>
  103. <li role="separator" class="divider"></li>
  104. <li><a id="lu-linkshere"> 入链</a></li>
  105. <li><a id="lu-relatedchanges"> 相关更改</a></li>
  106. <li role="separator" class="divider"></li>
  107. <li><a id="lu-watch"> 监视</a></li>
  108. <li><a id="lu-unwatch"> 取消监视</a></li>
  109. <li><a id="lu-log"> 日志</a></li>
  110. <li><a id="lu-info"> 信息</a></li>
  111. <li><a id="lu-properties"> 属性</a></li>
  112. <li role="separator" class="divider"></li>
  113. </ul>
  114. </div>
  115. </div>
  116. `;
  117.  
  118. /* 当前 wiki 的 url */
  119. var wikiurl = "https://wiki.biligame.com/" + mwcfg("wgGameName") + "/";
  120.  
  121. function mwcfg(key){/* 按key从mediaWiki获取配置 */
  122. return mediaWiki.config.get(key);
  123. }
  124.  
  125. function open(url) {/* 在新页面打开url */
  126. window.open(url, '_blank').focus();
  127. }
  128.  
  129. function onclick(elm_id, func) {/* 为ID元素增加点击事件 */
  130. document.getElementById(elm_id).addEventListener("click", func);
  131. }
  132.  
  133. function linkto(elm_id, url) {/* 为某ID的A元素增加href */
  134. document.getElementById(elm_id).href = wikiurl + url;
  135. document.getElementById(elm_id).target = '_blank';
  136. }
  137.  
  138. function addClickEvents(){ /* 为所有列表项添加A标签的href链接 */
  139. var username = mwcfg("wgUserName");
  140. var pagename = mwcfg("wgPageName");
  141. var pageid = mwcfg("wgArticleId");
  142.  
  143. linkto("lu-user","用户:" + username);
  144. linkto("lu-preferences","特殊:参数设置");
  145. linkto("lu-mycontris","特殊:用户贡献/" + username);
  146. linkto("lu-watchlist","特殊:监视列表");
  147.  
  148.  
  149. linkto("lu-specialpages","特殊:特殊页面");
  150. linkto("lu-recentchanges","特殊:最近更改");
  151. linkto("lu-allPages","特殊:所有页面");
  152. linkto("lu-filelist","特殊:文件列表");
  153. linkto("lu-contriscore","特殊:贡献得分");
  154.  
  155. linkto("lu-templates","特殊:模板");
  156. linkto("lu-modules","特殊:所有页面?namespace=828");
  157. linkto("lu-moderation","特殊:Moderation");
  158. linkto("lu-comments","特殊:管理FlowThread评论");
  159. linkto("lu-userrights","特殊:用户权限");
  160.  
  161. linkto("lu-purge",pagename + "?action=purge");
  162. linkto("lu-edit",pagename + "?action=edit");
  163. linkto("lu-delete",pagename + "?action=delete");
  164. linkto("lu-protect",pagename + "?action=protect");
  165. linkto("lu-history",pagename + "?action=history");
  166. linkto("lu-watch",pagename + "?action=watch");
  167. linkto("lu-unwatch",pagename + "?action=unwatch");
  168. linkto("lu-info",pagename + "?action=info");
  169.  
  170. linkto("lu-sortlink","?curid=" + pageid);
  171. linkto("lu-linkshere","特殊:链入页面/" + pagename);
  172. linkto("lu-relatedchanges","Special:最近链出更改?target=" + pagename);
  173. linkto("lu-log","Special:日志?page=" + pagename);
  174. linkto("lu-properties","特殊:浏览/" + pagename);
  175.  
  176. linkto("lu-Commoncss","MediaWiki:Common.css");
  177. linkto("lu-Commonjs","MediaWiki:Common.js");
  178. linkto("lu-Sitenotice","MediaWiki:Sitenotice");
  179. linkto("lu-Sidebar","MediaWiki:Sidebar");
  180. linkto("lu-Gadgets","MediaWiki:Gadgets-definition");
  181. linkto("lu-Newarticletext","MediaWiki:Newarticletext");
  182. linkto("lu-Editnotice0","MediaWiki:Editnotice-0");
  183. linkto("lu-Deletereason","MediaWiki:Deletereason-dropdown");
  184. linkto("lu-Protect","MediaWiki:Protect-dropdown");
  185. linkto("lu-Copyrightwarning2","MediaWiki:Copyrightwarning2");
  186. linkto("lu-Summary","MediaWiki:Summary");
  187. linkto("lu-Uploadtext","MediaWiki:Uploadtext");
  188. linkto("lu-Licenses","MediaWiki:Licenses");
  189. linkto("lu-Filedelete","MediaWiki:Filedelete-reason-dropdown");
  190. }
  191.  
  192. function main(){
  193. /* main part */
  194. try { // statements to try
  195. console.log('开始初始化 List Util ');
  196.  
  197. let need_tool = document.getElementsByClassName("mediawiki").length;
  198. if (need_tool > 0){
  199. var html = document.createElement('div');
  200. html.innerHTML = innerHTML
  201. document.body.appendChild(html);
  202.  
  203. addClickEvents();
  204.  
  205. // 为列表中的 短链接 文字后边添加 页面id
  206. document.getElementById("lu-sortlink").innerHTML += " ("+ mwcfg("wgArticleId") + ")";
  207.  
  208. // 在控制台显示加载完成
  209. console.log("%c power by tampermonkey %c ListUtil 加载完成 %c create by Lu (39886146)",
  210. "padding: 3px; font-size:0.8em; background: #FFE1AB;",
  211. "color: #fff; padding: 10px 10px; background: #FF8E00;",
  212. "padding: 3px; background: #FFE1AB;");
  213.  
  214. /* fix .dropdown-menu css.
  215. The BwikiBatchEditor remiss set css for all .dropdown-menu
  216. Solution is :
  217. when "#list_util .btn" is click, clear inline css for "#list_util .dropdown-menu".
  218. */
  219. const lu_buttons = document.querySelectorAll('#list_util .btn');
  220. lu_buttons.forEach(lu_btn => {
  221. lu_btn.addEventListener('click', function(){
  222. document.querySelectorAll('#list_util .dropdown-menu').forEach(menu => { menu.style=""; });
  223. });
  224. });
  225. }else{
  226. console.log('未找到 mediawiki class 页面,不加载 ListUtil ');
  227. }
  228. }catch (e) {
  229. console.log("List Util 遇到错误,异常退出……")
  230. console.log("List Util 遇到的错误是:")
  231. console.log(e)
  232. try {
  233. document.getElementById("list_util").outerHTML = "";
  234. }catch (e) {}
  235. }
  236. }
  237.  
  238. // 入口
  239. setTimeout(function (){
  240. main();
  241. }, 500); // timeout 是为了等待 mw 加载,否则会偶见无法获取 mw 。

QingJ © 2025

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