CSDN使用助手

CSDN使用助手,使用增强

  1. // ==UserScript==
  2. // @name CSDN使用助手
  3. // @icon https://g.csdnimg.cn/static/logo/favicon32.ico
  4. // @namespace https://linecho.com/
  5. // @version 0.1
  6. // @description CSDN使用助手,使用增强
  7. // @author purezhi
  8. // @match https://blog.csdn.net/*/article/details/*
  9. // @require https://cdn.jsdelivr.net/npm/jquery@3.2.1/dist/jquery.min.js
  10. // @require https://cdn.jsdelivr.net/npm/notyf@3.9.0/notyf.min.js
  11. // @resource CSS_notyf https://cdn.jsdelivr.net/npm/notyf@3.9.0/notyf.min.css
  12. // @grant GM_getResourceText
  13. // @grant GM_addStyle
  14. // ==/UserScript==
  15.  
  16. /*
  17. CSDN使用助手,目前包含特性:
  18. 1)只保留文章内容,方便打印。
  19. */
  20. var notyf = null;
  21.  
  22. (function () {
  23. 'use strict';
  24.  
  25. const notyfCss = GM_getResourceText("CSS_notyf");
  26. GM_addStyle(notyfCss);
  27.  
  28. GM_addStyle(`
  29. @media print { .pz-hidden-print { display: none !important; } }
  30. .pz-hidden { display: none !important; }
  31. .notyf__message { font-size: 14px; }
  32. .pz-hlp-bar { position: absolute; right: 5px; top: 75px; padding: 5px 15px 0 0; z-index: 65533; }
  33. .pz-hlp-bar .bbtn { height: 26px; line-height: 22px; padding: 0 10px; border-radius: 13px; user-select: none; display: inline-flex; align-items: center; justify-content: center; outline: none; cursor: pointer; background-image: linear-gradient(to top, #D8D9DB 0%, #fff 80%, #FDFDFD 100%); border: 1px solid #8F9092; box-shadow: 0 4px 3px 1px #FCFCFC, 0 6px 8px #D6D7D9, 0 -4px 4px #CECFD1, 0 -6px 4px #FEFEFE, inset 0 0 3px 0 #CECFD1; transition: all 0.2s ease; font-size: 13px; color: #606060; text-shadow: 0 1px #fff; }
  34. .pz-hlp-bar .bbtn::-moz-focus-inner { border: 0; }
  35. .pz-hlp-bar .bbtn:hover:not([disabled]) { box-shadow: 0 3px 2px 1px #FCFCFC, 0 5px 7px #D6D7D9, 0 -3px 3px #CECFD1, 0 -5px 3px #FEFEFE, inset 0 0 2px 2px #CECFD1; }
  36. .pz-hlp-bar .bbtn:focus:not(:active) { animation: active 0.9s alternate infinite; outline: none; }
  37. .pz-hlp-bar .bbtn:active:not([disabled]) { box-shadow: 0 3px 2px 1px #FCFCFC, 0 5px 7px #D6D7D9, 0 -3px 3px #CECFD1, 0 -5px 3px #FEFEFE, inset 0 0 4px 2px #999, inset 0 0 15px #aaa; }
  38. .pz-hlp-bar .bbtn > * { transition: transform 0.2s ease; }
  39. .pz-hlp-bar .bbtn:hover:not([disabled]) > * { transform: scale(0.975); }
  40. .pz-hlp-bar .bbtn:active:not([disabled]) > * { transform: scale(0.95); }
  41. .pz-hlp-tool { position: absolute; top: -26px; left: 0; right: 0; text-align: right; padding: 0; background: transparent; opacity: 0.15; }
  42. .pz-hlp-tool a.opt { color: #0082ff; cursor: pointer; font-size: 14px !important; margin-left: 5px; }
  43. #middle .video { margin-bottom: 25px; }
  44. #middle .www_page .video:nth-child(1), #middle .www_page .video:nth-child(2) { margin-top: 30px; }
  45. #middle .pz-hlp-tool { background: rgba(255,255,255,0.7); backdrop-filter: blur(12px); }
  46. #middle .pz-hlp-tool a.opt { font-size: 14px !important; }
  47. .vct-main .vct-left .recommend .pz-hlp-tool { top: 0; right: 10px; }
  48. `);
  49.  
  50. notyf = new Notyf({ position: { x: 'center', y: 'top' }, dismissible: true, duration: 2500 });
  51.  
  52. setTimeout(() => {
  53. // 打印预览
  54. addPrintPreview();
  55. }, 5000)
  56. })();
  57.  
  58. // 打印预览
  59. function addPrintPreview() {
  60. $(document.body).append($(`
  61. <div class="pz-hlp-bar">
  62. <button pz-print-preview-open class="bbtn pz-hidden-print">阅读预览</button>
  63. <button pz-print-preview-close class="bbtn pz-hidden-print" style="display: none;">关闭预览</button>
  64. </div>
  65. `));
  66.  
  67. const $el1 = $('#toolbarBox');
  68. const $el2 = $('.blog-content-box .article-header-box .article-header .article-info-box');
  69. const $el3 = $('.blog-content-box .article-header-box .article-header .blog-tags-box');
  70. const $el4 = $('.blog-content-box .article-header-box .article-header .blog-tags-box');
  71. const $el5 = $('#blogHuaweiyunAdvert');
  72. const $el6 = $('#blogColumnPayAdvert');
  73. const $el7 = $('.blog_container_aside');
  74. const $el8 = $('.recommend-right');
  75. const $el9 = $('#toolBarBox');
  76. const $el10 = $('#treeSkill');
  77. const $el11 = $('.directory-boxshadow-dialog');
  78. const $el12 = $('.recommend-box');
  79. const $el13 = $('#commentBox');
  80. const $el14 = $('#pcCommentBox');
  81. const $el15 = $('#recommendNps');
  82. const $el16 = $('.blog-footer-bottom');
  83. const $el17 = $('.csdn-side-toolbar');
  84.  
  85. if ($el1) $el1.attr('pz-print-preview-hide-el', true);
  86. if ($el2) $el2.attr('pz-print-preview-hide-el', true);
  87. if ($el3) $el3.attr('pz-print-preview-hide-el', true);
  88. if ($el4) $el4.attr('pz-print-preview-hide-el', true);
  89. if ($el5) $el5.attr('pz-print-preview-hide-el', true);
  90. if ($el6) $el6.attr('pz-print-preview-hide-el', true);
  91. if ($el7) $el7.attr('pz-print-preview-hide-el', true);
  92. if ($el8) $el8.attr('pz-print-preview-hide-el', true);
  93. if ($el9) $el9.attr('pz-print-preview-hide-el', true);
  94. if ($el10) $el10.attr('pz-print-preview-hide-el', true);
  95. if ($el11) $el11.attr('pz-print-preview-hide-el', true);
  96. if ($el12) $el12.attr('pz-print-preview-hide-el', true);
  97. if ($el13) $el13.attr('pz-print-preview-hide-el', true);
  98. if ($el14) $el14.attr('pz-print-preview-hide-el', true);
  99. if ($el15) $el15.attr('pz-print-preview-hide-el', true);
  100. if ($el16) $el16.attr('pz-print-preview-hide-el', true);
  101. if ($el17) $el17.attr('pz-print-preview-hide-el', true);
  102.  
  103. $(document.body).on('click', '[pz-print-preview-open]', function (event) {
  104. $('[pz-print-preview-hide-el]').addClass('pz-hidden');
  105. $('.pz-hlp-bar [pz-print-preview-open]').hide();
  106. $('.pz-hlp-bar [pz-print-preview-close]').show();
  107. });
  108.  
  109. $(document.body).on('click', '[pz-print-preview-close]', function (event) {
  110. $('[pz-print-preview-hide-el]').removeClass('pz-hidden');
  111. $('.pz-hlp-bar [pz-print-preview-close]').hide();
  112. $('.pz-hlp-bar [pz-print-preview-open]').show();
  113. });
  114. }
  115.  
  116. /* 辅助函数 */
  117.  
  118. function showError(msg) {
  119. showMsg(msg, 'error')
  120. }
  121. function showSuccess(msg) {
  122. showMsg(msg, 'success')
  123. }
  124. function showMsg(msg, typ) {
  125. if (notyf) notyf.open({
  126. type: typ ? typ : 'info',
  127. message: msg
  128. });
  129. else alert(msg);
  130. }