玩转CSDN

仅供参考学习

当前为 2021-09-07 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name 玩转CSDN
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.1004
  5. // @match *://blog.csdn.net/*
  6. // @icon https://source.unsplash.com/random
  7. // @description 仅供参考学习
  8. // @author wwwbh
  9. // @icon https://www.google.com/s2/favicons?domain=csdn.net
  10. // @grant none
  11. // @reference https://source.unsplash.com/random
  12. // ==/UserScript==
  13.  
  14. (function() {
  15. 'use strict';
  16. class CSDN{
  17. construct(focusSwitch){
  18. console.log('构造方法');
  19. };
  20.  
  21. /*
  22. @name 复制
  23. @func
  24. modifyCopyPriviledge: 修改权限
  25. copy: 复制逻辑
  26. */
  27. modifyCopyPriviledge(codeElem,signElem){
  28. //代码容器修改
  29. codeElem.removeAttribute('onclick');
  30. codeElem.style.setProperty('user-select','auto');
  31. codeElem.setAttribute('id','code-'+i);
  32. codeElem.parentNode.style.setProperty('user-select','auto');
  33. // 登录(不可用)容器修改
  34. signElem.removeAttribute('onclick');
  35. signElem.setAttribute('data-title','点击复制');
  36. signElem.removeAttribute('data-report-click');
  37. signElem.setAttribute('data-clipboard-action','copy');
  38. signElem.setAttribute('aria-label','copied!');
  39. signElem.setAttribute('data-clipboard-target','#code-'+i);
  40. signElem.style.position = 'inherit';
  41. signElem.style.display = "block";
  42. signElem.style.setProperty('max-width','65px');
  43. };
  44. copy(signElem) {
  45. let codeelem = null;
  46. try{
  47. codeelem = signElem.parentNode;
  48. if(codeelem.id.indexOf('code')===-1){ // 父节点
  49. throw new EvalError('值错误');
  50. }
  51. }catch(err){// 兄弟节点
  52. codeelem = signElem.previousElementSibling;
  53. }
  54. document.oncopy=function(e){
  55. e.clipboardData.setData('text',codeelem.innerText);
  56. e.preventDefault();
  57. document.oncopy=null;
  58. }
  59. document.execCommand("Copy");// 执行浏览器复制命令
  60. signElem.setAttribute('data-title','复制成功');
  61. signElem.style.cssText += 'background-color: green';
  62. setTimeout(()=>{ // 先延时1000ms,再执行回调函数
  63. signElem.setAttribute('data-title','点击复制');
  64. signElem.style.removeProperty('background-color','green');
  65. },1000);
  66. };
  67. /*
  68. @name 专注模式
  69. @func
  70. modifyFocusPriviledge: 修改专注权限
  71. showFocusModel: 展开专注模式
  72. */
  73. modifyFocusPriviledge(mainBox, main, catalog){
  74. // 修改toolbar
  75. let toolbar = document.querySelector('.csdn-side-toolbar');
  76. let focusSwitch = document.querySelector('.option-box').cloneNode(true);
  77. focusSwitch.firstElementChild.src = 'https://s1.aigei.com/src/img/png/05/055f0df239ef4451a25be1e5c4617f96.png?imageMogr2/auto-'+
  78. 'orient/thumbnail/!199x199r/gravity/Center/crop/199x199/quality/85/&e=1735488000&'+
  79. 'token=P7S2Xpzfz11vAkASLTkfHN7Fw-oOZBecqeJaxypL:pxpJ0L3fOUppABVi15gOFs94eqk=';
  80. focusSwitch.style.background = "rgba(0,0,0,0.1)";
  81. focusSwitch.firstElementChild.style.width = "200%";
  82. focusSwitch.firstElementChild.style.display = "block"; // 去除初始鼠标放上有动态加载事件
  83. focusSwitch.removeChild(focusSwitch.lastElementChild);
  84. toolbar.replaceChildren(focusSwitch);
  85. // 修改默认页面配置样式
  86. main.removeAttribute('id');
  87. focusSwitch.removeAttribute('mouseup');
  88. mainBox.firstElementChild.nextElementSibling.style.removeProperty('z-index');
  89. main.style.cssText += 'z-index:999;position:absolute';
  90. main.style.display = 'none';
  91. let pn = catalog.parentNode;
  92. let _catalog = catalog.cloneNode(true)
  93. _catalog.style.cssText += 'z-index:999;position:fixed;background-color: rgba(255,255,255,0.2);position: fixed;top: 80px;color: white;right: 20px;';
  94. _catalog.style.setProperty('max-height','454.5px');
  95. _catalog.firstElementChild.style.setProperty('max-height','inherit');
  96. _catalog.firstElementChild.firstElementChild.style.cssText += 'text-align:center;background:black;color:white';
  97. _catalog.style.display = 'none';
  98. let className = (function(){
  99. let arr = [];
  100. for(let i=0;i<3;i++){
  101. if(pn.className.length){
  102. arr.push(pn.className);
  103. }
  104. pn = pn.parentNode;
  105. }
  106. return arr.join(' ')
  107. })();
  108. _catalog.className += ' ' + className;
  109. document.body.insertBefore(_catalog, document.body.firstElementChild);
  110. document.body.insertBefore(main, document.body.firstElementChild);
  111. return {
  112. a: focusSwitch,
  113. b: _catalog
  114. };
  115.  
  116. };
  117. showFocusModel(status, mainBox, main,catalog){
  118. if(status===0){ // 进入专注模式
  119. console.log(`----${status}: 专注模式----`)
  120. mainBox.style.display = 'none';
  121. mainBox.nextElementSibling.style.display = 'none';
  122. main.style.display = 'block';
  123. catalog.style.display = 'block';
  124. console.log('主体可见\n全体不可见')
  125. }else{
  126. console.log(`----${status}: 初始模式----`);
  127. mainBox.style.display = 'block';
  128. mainBox.nextElementSibling.style.display = 'block';
  129. main.style.display = 'none';
  130. catalog.style.display = 'none';
  131. console.log('主体不可见\n全体可见');
  132. }
  133. }
  134. };
  135.  
  136. let csdn = new CSDN();
  137. let mainBox = document.getElementById('mainBox');
  138. let main = mainBox.firstElementChild.cloneNode(true);
  139. let catalog = document.getElementById('groupfile');
  140. let compose = csdn.modifyFocusPriviledge(mainBox, main, catalog);
  141. let status = -1;
  142. compose.a.addEventListener('click', function(){
  143. status = ~status;
  144. csdn.showFocusModel(status,mainBox,main,compose.b);
  145. },'true');
  146. let codes = document.querySelectorAll('#content_views pre code');
  147. let signs = document.querySelectorAll('.signin');
  148. for(var i=0;i<codes.length;i++){
  149. let sign = signs[i];
  150. csdn.modifyCopyPriviledge(codes[i], signs[i]);
  151. sign.addEventListener('click', function(){
  152. csdn.copy(this);
  153. },'true');
  154. };
  155. })();

QingJ © 2025

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