玩转CSDN

仅供参考学习

目前為 2021-09-12 提交的版本,檢視 最新版本

  1. // ==UserScript==
  2. // @name 玩转CSDN
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.1008
  5. // @match *://*.blog.csdn.net/*
  6. // @icon chrome://favicon/http://blog.csdn.net/
  7. // @description 仅供参考学习
  8. // @author haiw2
  9. // @grant GM_setClipboard
  10. // ==/UserScript==
  11.  
  12. (function() {
  13. 'use strict';
  14. csdn.copyright.textData = '';
  15. let login = document.querySelector('#app');
  16. if(login!=null)document.body.removeChild(login);
  17. let xx = document.querySelectorAll('a[href*="fn"]')
  18. xx.forEach((item, index)=>{
  19. console.info(item.id);
  20. let node = document.querySelector(`#${item.id}`);
  21. item.removeAttribute('onclick');
  22. item.addEventListener('click',function(){
  23. node.scrollIntoView({ behavior: "smooth" })
  24. });
  25. })
  26. class CSDN{
  27. construct(focusSwitch){
  28. console.log('构造方法');
  29. };
  30.  
  31. /*
  32. @name 复制
  33. @func
  34. modifyCopyPriviledge: 修改权限
  35. copy: 复制逻辑
  36. */
  37. modifyCopyPriviledge(codeElem,signElem){
  38. codeElem.removeAttribute('onclick');
  39. codeElem.style.setProperty('user-select','auto');
  40. codeElem.parentNode.style.setProperty('user-select','auto');
  41. codeElem.parentNode.style.setProperty('margin-bottom','30px');
  42. try{
  43. signElem.removeAttribute('onclick');
  44. signElem.setAttribute('data-title','点击复制');
  45. signElem.style.margin = '0';
  46. signElem.style.setProperty('margin-bottom', '40px');
  47. signElem.style.setProperty('max-width','80px');
  48. signElem.style.setProperty('min-height','15px');
  49. signElem.style.setProperty('font-size','15px');
  50. signElem.style.left = '56px';
  51. return true
  52. }catch(e){
  53. return false
  54. }finally{
  55. codeElem.parentNode.insertBefore(signElem, codeElem);
  56. }
  57. };
  58. copy(signElem) {
  59. let codeelem = null;
  60. try{
  61. codeelem = signElem.parentNode;
  62. if(codeelem.id.indexOf('code')===-1){
  63. throw new EvalError('值错误');
  64. }
  65. }catch(err){
  66. codeelem = signElem.previousElementSibling;
  67. }
  68. document.oncopy=function(e){
  69. e.clipboardData.setData('text',codeelem.innerText);
  70. e.preventDefault();
  71. document.oncopy=null;
  72. }
  73. document.execCommand("Copy");
  74. signElem.setAttribute('data-title','复制成功');
  75. signElem.style.cssText += 'background-color: green';
  76. setTimeout(()=>{
  77. signElem.setAttribute('data-title','点击复制');
  78. signElem.style.removeProperty('background-color','green');
  79. },1000);
  80. };
  81. /*
  82. @name 专注模式
  83. @func
  84. modifyFocusPriviledge: 修改专注权限
  85. showFocusModel: 展开专注模式
  86. */
  87. modifyFocusPriviledge(mainBox, main, catalog){
  88. let toolbar = document.querySelector('.csdn-side-toolbar');
  89. toolbar.style.right = "20px";
  90. toolbar.style.position = "fixed";
  91. let listen_op = {attributes:true};
  92. function callback(mutationsList){
  93. toolbar.style.left = "";
  94. };
  95. var observer = new MutationObserver(callback);
  96. observer.observe(toolbar, listen_op);
  97. let focusSwitch = document.querySelector('.option-box').cloneNode(true);
  98. focusSwitch.firstElementChild.src = 'https://s1.aigei.com/src/img/png/05/055f0df239ef4451a25be1e5c4617f96.png?imageMogr2/auto-'+
  99. 'orient/thumbnail/!199x199r/gravity/Center/crop/199x199/quality/85/&e=1735488000&'+
  100. 'token=P7S2Xpzfz11vAkASLTkfHN7Fw-oOZBecqeJaxypL:pxpJ0L3fOUppABVi15gOFs94eqk=';
  101. focusSwitch.style.background = "rgba(0,0,0,0.1)";
  102. focusSwitch.firstElementChild.style.width = "200%";
  103. focusSwitch.firstElementChild.style.display = "block";
  104. focusSwitch.removeChild(focusSwitch.lastElementChild);
  105. focusSwitch.removeAttribute('mouseup');
  106. toolbar.replaceChildren(focusSwitch);
  107. toolbar.style.left = '0px';
  108. main.removeAttribute('id');
  109. mainBox.firstElementChild.nextElementSibling.style.removeProperty('z-index');
  110. main.style.cssText += 'z-index:999;position:absolute';
  111. main.style.display = 'none';
  112. document.body.insertBefore(main, document.body.firstElementChild);
  113. if(catalog!=null){
  114. let pn = catalog.parentNode;
  115. let _catalog = catalog.cloneNode(true);
  116. _catalog.style.cssText += 'z-index:999;position:fixed;background-color: rgba(255,255,255,0.2);position: fixed;top: 80px;color: white;right: 20px;';
  117. _catalog.style.setProperty('max-height','454.5px');
  118. _catalog.firstElementChild.style.setProperty('max-height','inherit');
  119. _catalog.firstElementChild.firstElementChild.style.cssText += 'text-align:center;background:black;color:white';
  120. _catalog.style.display = 'none';
  121. _catalog.removeAttribute('id');
  122. let className = (function(){
  123. let arr = [];
  124. for(let i=0;i<3;i++){
  125. if(pn.className.length){
  126. arr.push(pn.className);
  127. }
  128. pn = pn.parentNode;
  129. }
  130. return arr.join(' ')
  131. })();
  132. _catalog.className += ' ' + className;
  133. document.body.insertBefore(_catalog, document.body.firstElementChild);
  134. return {a: focusSwitch,b: _catalog};
  135. }
  136. return {a:focusSwitch,b:catalog}
  137.  
  138. };
  139. showFocusModel(status, mainBox, main,catalog){
  140. if(status===0){
  141. mainBox.style.display = 'none';
  142. mainBox.nextElementSibling.style.display = 'none';
  143. main.style.display = 'block';
  144. if(catalog!=null){
  145. catalog.style.display = 'block';
  146. catalog.setAttribute('id','groupfile');
  147. }
  148. }else{
  149. mainBox.style.display = 'block';
  150. mainBox.nextElementSibling.style.display = 'block';
  151. main.style.display = 'none';
  152. if(catalog!=null){
  153. catalog.style.display = 'none';
  154. catalog.removeAttribute('id');
  155. }
  156. }
  157. }
  158. };
  159.  
  160. let _csdn = new CSDN();
  161. let mainBox = document.getElementById('mainBox');
  162. let main = mainBox.firstElementChild.cloneNode(true);
  163. let catalog = document.getElementById('groupfile');
  164. let compose = _csdn.modifyFocusPriviledge(mainBox, main, catalog);
  165. let status = -1;
  166. compose.a.addEventListener('click', function(){
  167. status = ~status;
  168. _csdn.showFocusModel(status,mainBox,main,compose.b);
  169. },'true');
  170. let codes = document.querySelectorAll('#content_views pre code');
  171. let signs = document.querySelectorAll('#content_views .signin');
  172. if(signs.length===0) signs = document.querySelectorAll('#content_views .hljs-button');
  173. for(var i=0;i<codes.length;i++){
  174. let sign = signs[i], code = codes[i];
  175. _csdn.modifyCopyPriviledge(code, sign);
  176. sign.addEventListener('click', function(){
  177. GM_setClipboard(code.innerText, "text");
  178. sign.setAttribute('data-title','复制成功');
  179. sign.style.cssText += 'background-color: green';
  180. setTimeout(()=>{
  181. sign.setAttribute('data-title','点击复制');
  182. sign.style.removeProperty('background-color','green');
  183. },1000);
  184. // _csdn.copy(this);
  185. },'true');
  186. };
  187. })();