V2EX工具箱

V2ex工具箱,集成多项功能

  1. // ==UserScript==
  2. // @name V2EX工具箱
  3. // @namespace rollup-react
  4. // @version 0.0.1
  5. // @description V2ex工具箱,集成多项功能
  6. // @author greatbody
  7. // @include https://*.v2ex.com/*
  8. // @include https://v2ex.com/*
  9. // @grant unsafeWindow
  10. // @grant GM_addStyle
  11. // @grant GM_getValue
  12. // @grant GM_setValue
  13. // @grant GM_deleteValue
  14. // @grant GM_listValues
  15. // ==/UserScript==
  16. // Refs:// https://gf.qytechs.cn/en/scripts/3452-v2ex%E5%A2%9E%E5%BC%BA%E6%8F%92%E4%BB%B6
  17. 'use strict';
  18.  
  19. var classCallCheck = function (instance, Constructor) {
  20. if (!(instance instanceof Constructor)) {
  21. throw new TypeError("Cannot call a class as a function");
  22. }
  23. };
  24.  
  25. var toConsumableArray = function (arr) {
  26. if (Array.isArray(arr)) {
  27. for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];
  28.  
  29. return arr2;
  30. } else {
  31. return Array.from(arr);
  32. }
  33. };
  34.  
  35. var MarkBuildingOwner = function MarkBuildingOwner() {
  36. classCallCheck(this, MarkBuildingOwner);
  37. };
  38.  
  39. MarkBuildingOwner.markOwner = function () {
  40. var ownerHtml = ' <font color=green>[楼主]</font>';
  41. var ownerName = document.querySelector('.header .gray a').innerHTML;
  42. var ownerLinks = document.querySelectorAll('#Main .box .dark');
  43. for (var i = 0; i < ownerLinks.length; i += 1) {
  44. if (ownerLinks[i].innerHTML === ownerName) {
  45. ownerLinks[i].innerHTML += ownerHtml;
  46. }
  47. }
  48. };
  49.  
  50. var AtPeople = function AtPeople() {
  51. var _this = this;
  52.  
  53. classCallCheck(this, AtPeople);
  54. this.managerTeam = '@Livid @Kai @Olivia @GordianZ @sparanoid ';
  55.  
  56. this.getAllInPage = function () {
  57. var ownerName = document.querySelector('.header .gray a').innerHTML;
  58. return [].concat(toConsumableArray(document.querySelectorAll('#Main .box .dark'))).map(function (link) {
  59. return link.innerHTML;
  60. }).filter(function (userName) {
  61. return userName.indexOf(ownerName) === -1;
  62. }).map(function (userName) {
  63. return '@' + userName;
  64. }).join(' ');
  65. };
  66.  
  67. this.addButtons = function () {
  68. var aAtAll = _this.createAtAllButton();
  69. var aAtManagerTeam = _this.createAtManagerTeamButton();
  70. var form = document.querySelector('#Main .box form');
  71. form.appendChild(aAtAll);
  72. form.appendChild(aAtManagerTeam);
  73. };
  74.  
  75. this.createAtAllButton = function () {
  76. var aAtAll = document.createElement('a');
  77. // eslint-disable-next-line no-script-url
  78. aAtAll.href = 'javascript:void(0);';
  79. aAtAll.innerText = '@所有人';
  80. aAtAll.style.cursor = 'pointer;';
  81. aAtAll.style.marginLeft = '10px';
  82. aAtAll.onclick = function () {
  83. var allInPage = _this.getAllInPage() + ' ';
  84. var textarea = document.querySelector('#reply_content');
  85. if (textarea.value.length > 0) {
  86. textarea.value += '\n' + allInPage;
  87. } else {
  88. textarea.value = allInPage;
  89. }
  90. setTimeout(function () {
  91. textarea.focus();
  92. }, 1);
  93. };
  94. return aAtAll;
  95. };
  96.  
  97. this.createAtManagerTeamButton = function () {
  98. var aAtManagerTeam = document.createElement('a');
  99. // eslint-disable-next-line no-script-url
  100. aAtManagerTeam.href = 'javascript:void(0);';
  101. aAtManagerTeam.innerText = '@管理员';
  102. aAtManagerTeam.style.cursor = 'pointer;';
  103. aAtManagerTeam.style.marginLeft = '10px';
  104. aAtManagerTeam.onclick = function () {
  105. var textarea = document.querySelector('#reply_content');
  106. if (textarea.value.length > 0) {
  107. textarea.value += '\n' + _this.managerTeam;
  108. } else {
  109. textarea.value = _this.managerTeam;
  110. }
  111. setTimeout(function () {
  112. textarea.focus();
  113. }, 1);
  114. };
  115. return aAtManagerTeam;
  116. };
  117.  
  118. this.addButtons();
  119. };
  120.  
  121. AtPeople.new = function () {
  122. return new AtPeople();
  123. };
  124.  
  125. var Runner = function Runner() {
  126. classCallCheck(this, Runner);
  127.  
  128. this.run = function () {
  129. console.log('Hello, this is V2EX tool');
  130. MarkBuildingOwner.markOwner();
  131. AtPeople.new();
  132. };
  133. };
  134.  
  135. // eslint-disable-next-line
  136.  
  137.  
  138. (function () {
  139.  
  140. var runner = new Runner();
  141. runner.run();
  142. // eslint-disable-next-line
  143. })();

QingJ © 2025

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