「CSDNGreener」🍃CSDN广告完全过滤|免登录|个性化排版|最强老牌脚本|持续更新

⚡️全新4.0版本!拥有数项独家功能的最强CSDN脚本,不服比一比⚡️|🕶无需登录CSDN,获得比会员更佳的体验|🖥自定义背景图,分辨率自适配,分屏不用滚动|💾超级预优化|🏷原创文章免登录展开|🔌独家推荐内容自由开关|📠免登录复制|🔗防外链重定向|📝独家论坛未登录自动展开文章、评论|🌵全面净化|📈沉浸阅读|🧴净化剪贴板|📕作者信息文章顶部展示

  1. // ==UserScript==
  2. // @name 「CSDNGreener」🍃CSDN广告完全过滤|免登录|个性化排版|最强老牌脚本|持续更新
  3. // @namespace https://github.com/adlered
  4. // @version 4.2.4
  5. // @description ⚡️全新4.0版本!拥有数项独家功能的最强CSDN脚本,不服比一比⚡️|🕶无需登录CSDN,获得比会员更佳的体验|🖥自定义背景图,分辨率自适配,分屏不用滚动|💾超级预优化|🏷原创文章免登录展开|🔌独家推荐内容自由开关|📠免登录复制|🔗防外链重定向|📝独家论坛未登录自动展开文章、评论|🌵全面净化|📈沉浸阅读|🧴净化剪贴板|📕作者信息文章顶部展示
  6. // @author Adler
  7. // @connect www.csdn.net
  8. // @include *://*.csdn.net/*
  9. // @require https://lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/jquery-cookie/1.4.1/jquery.cookie.min.js
  10. // @require https://lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/nprogress/0.2.0/nprogress.min.js
  11. // @require https://lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/clipboard.js/2.0.10/clipboard.min.js
  12. // @supportURL https://github.com/adlered/CSDNGreener/issues/new?assignees=adlered&labels=help+wanted&template=ISSUE_TEMPLATE.md&title=
  13. // @contributionURL https://doc.stackoverflow.wiki/web/#/21?page_id=138
  14. // @grant GM_addStyle
  15. // @grant GM_setValue
  16. // @grant GM_getValue
  17. // @license AGPL-3.0-or-later
  18. // @antifeature ads CSDNGreener 脚本中嵌入了可一键永久关闭的小广告,不会影响您的使用体验:) 请放心安装!
  19. // @note 24-07-18 4.2.4 描述更改
  20. // @note 24-03-28 4.2.3 标题更改
  21. // @note 23-12-21 4.2.2 修复了一些已知问题
  22. // @note 23-12-16 4.2.1 文章页牛皮癣优化
  23. // @note 23-12-15 4.2.0 优化顶栏显示内容,修复了若干由于CSDN前端变化导致优化失效的问题
  24. // @note 23-05-25 4.1.9 再次修复免登录复制无法使用的问题
  25. // @note 23-05-11 4.1.8 强杀变异型登录框弹出(不影响自己点击登录使用)
  26. // @note 23-05-10 4.1.7 增强免登录复制功能
  27. // @note 23-04-11 4.1.6 去广告更新
  28. // @note 23-04-06 4.1.5 新增: 跳过 CSDN 的 link 页面
  29. // @note 23-04-04 4.1.4 增加ads标识
  30. // @note 23-03-30 4.1.3 移除统计代码,登录问题相关优化(只屏蔽一次)
  31. // @note 23-02-03 4.1.2 修复了无法登录的问题(评论不登录无法加载暂无解决方案,我们在持续努力中)
  32. // @note 22-05-30 4.1.1 功能修复,广告屏蔽
  33. // @note 22-01-18 4.1.0 代码折叠适配
  34. // @note 22-01-05 4.0.9 更新广告
  35. // @note 21-12-12 4.0.8 屏蔽学生认证
  36. // @note 21-10-21 4.0.7 屏蔽红包雨
  37. // @note 21-09-24 4.0.6 修复登录弹窗无法彻底去除的问题
  38. // @note 21-09-20 4.0.5 增加自定义背景功能
  39. // @note 21-09-13 4.0.4 增加一个没有收钱的广告(在设置里,不影响体验)
  40. // @note 21-09-01 4.0.3 增加用户使用情况统计模块
  41. // @note 21-08-25 4.0.2 修复右侧置顶栏按钮消失的问题
  42. // @note 21-08-21 4.0.1 去除右侧悬浮栏,优化脚本
  43. // @note 21-08-20 4.0.0 全新4.0发布!UI美化,代码优化,兼容Firefox,更多排版模式
  44. // @note 21-08-20 3.5.7 修复无法完整复制、保存csdn的网页会跳转首页的问题
  45. // @note 21-08-19 3.5.6 自动隐藏底栏功能改为始终隐藏底栏
  46. // @note 21-08-18 3.5.5 修复无法选择复制的问题
  47. // @note 21-06-17 3.5.4 去除右侧红包悬浮窗
  48. // @note 21-04-18 3.5.3 增加显示小店的设定
  49. // @note 21-03-13 3.5.2 去主页广告,去文章页面推荐内容Title
  50. // @note 21-03-01 3.5.1 修改文案
  51. // @note 21-02-06 3.5.0 修复上传资源界面标签选择消失的问题
  52. // @note 21-01-17 3.4.9 删除文章页和论坛广告,暂时停用右侧栏滚动功能(CSDN限制)
  53. // @note 21-01-15 3.4.8 保存按钮优化,修复显示创作中心按钮功能失效的问题
  54. // @note 21-01-15 3.4.7 改进脚本细节,增加广告屏蔽能力,修复绿化按钮错位的问题
  55. // @note 20-12-25 3.4.6 主页部分嵌入式广告删除
  56. // @note 20-12-18 3.4.5 修复绿化设定按钮排版不正确的问题
  57. // @note 20-12-15 3.4.4 修复了某些子页显示不正常的问题
  58. // @note 20-10-23 3.4.3 适应新版CSDN,去除主页和登录页广告,以及登录提示,并移除底部信息
  59. // @note 20-10-20 3.4.2 删除右侧广告
  60. // @note 20-09-26 3.4.1 修改排版设定,修复登录框弹出的问题
  61. // @note 20-09-24 3.4.0 紧急修复由于CSDN前端样式修改导致设定开关丢失的问题
  62. // @note 20-08-27 3.3.9 紧急修复由于CSDN前端样式修改导致脚本失效的问题
  63. // @note 20-08-26 3.3.8 合法脚本提示
  64. // @note 20-07-20 3.3.7 修复菜单栏在创作中心显示异常的问题
  65. // @note 20-07-18 3.3.6 工具箱按钮优化
  66. // @note 20-07-05 3.3.5 评论复制功能交互优化
  67. // @note 20-07-04 3.3.4 修复右侧栏消失的问题
  68. // @note 20-07-03 3.3.3 新增复制评论功能!删除顶部广告
  69. // @note 20-06-28 3.3.2 提示修改
  70. // @note 20-06-27 3.3.1 弹窗提示逻辑修改为仅提示一次。
  71. // @note 20-06-27 3.3.0 网站标题新消息提醒去除
  72. // @note 20-06-26 3.2.9 恢复GreasyFork平台脚本支持
  73. // @note 20-06-21 3.2.0 脚本迁移通知
  74. // @note 20-06-21 3.1.9 增加自动隐藏底栏功能
  75. // @note 20-06-21 3.1.8 增加自动隐藏顶栏功能,修复选项窗口被点赞长条挡住的Bug,选项窗口布局修改
  76. // @note 20-06-20 3.1.7 设置窗口大小固定,增加打赏入口
  77. // @note 20-06-19 3.1.6 显示推荐内容按钮回归,新布局紧急修复
  78. // @note 20-06-18 3.1.5 自定义功能更新
  79. // @note 20-06-16 3.1.4 支持大部分功能模块化显示
  80. // @note 20-06-14 3.1.3 绿化设定优化
  81. // @note 20-06-14 3.1.2 ISSUE模板调整Support URL
  82. // @note 20-06-14 3.1.1 增加搜博主文章模块
  83. // @note 20-06-13 3.1.0 修复设置过期的问题
  84. // @note 20-06-12 3.0.9 标题回滚
  85. // @note 20-06-12 3.0.8 主页广告删除,绿化设置仅显示在文章页面,删除页脚,顶部优化,若干细节优化
  86. // @note 20-06-11 3.0.7 增加官方QQ交流群,增加关闭强制白色主题功能
  87. // @note 20-06-11 3.0.6 用户名片功能优化
  88. // @note 20-06-11 3.0.5 优化加载速度
  89. // @note 20-06-10 3.0.4 修复设置界面遮挡的问题,显示博主头像
  90. // @note 20-06-09 3.0.3 默认设定修改
  91. // @note 20-06-09 3.0.2 修复推荐内容按钮刷新不生效的问题,增加工具箱提示框
  92. // @note 20-06-08 3.0.1 设置中心推出!增加浏览效果选项 && Green Book Icon Update
  93. // @note 20-06-08 3.0.0 设置中心推出!增加浏览效果选项
  94. // @note 20-06-07 2.4.2 设置解耦,下个版本搞配置中心
  95. // @note 20-06-06 2.4.1 修复文章内容消失的问题
  96. // @note 20-06-04 2.4.0 修复推荐按钮错位的问题
  97. // @note 20-06-04 2.3.9 窄屏适配优化
  98. // @note 20-06-04 2.3.8 黑夜模式出现问题,紧急回档到 2.3.6
  99. // @note 20-06-03 2.3.7 感谢 @AlexLWT 增加黑暗模式
  100. // @note 20-06-02 2.3.6 AdsByGoogle 删除
  101. // @note 20-05-25 2.3.5 感谢 @RyanIPO 修复 Cannot read property 'replace' of undefined 报错的问题
  102. // @note 20-05-24 2.3.4 修复免登录复制功能
  103. // @note 20-05-22 2.3.3 Logo与背景同步
  104. // @note 20-05-22 2.3.2 深度删除背景
  105. // @note 20-05-20 2.3.1 通过require使用NProgress
  106. // @note 20-05-20 2.3.0 显示推荐内容按钮样式内置,剔除CDN
  107. // @note 20-05-17 2.2.9 进度条样式更新,时间延时优化
  108. // @note 20-05-17 2.2.8 更新脚本描述,展开评论的所有回复,删除创作中心按钮,加载进度条
  109. // @note 20-05-17 2.2.7 更新脚本描述
  110. // @note 20-05-16 2.2.6 修复第一次点击显示推荐内容无反应的问题
  111. // @note 20-05-16 2.2.5 删除抢沙发角标,修改显示推荐内容按钮样式
  112. // @note 20-05-16 2.2.4 感谢来自GitHub的朋友“HeronZhang”的Issue建议,删除所有博客花里胡哨的背景,主页分类中广告清除,CSS样式控制宽度适配代码优化
  113. // @note 20-05-16 2.2.3 感谢来自GitHub的朋友“RetiredWorld”的代码贡献,使用CSS来控制样式,而不是JS,增大灵活性。
  114. // @note 20-05-13 2.2.2 屏蔽您的缩放不是100%的提示
  115. // @note 20-04-29 2.2.1 感谢大家的支持,增加目录显示,自动判断是否存在目录调整页面宽度,屏蔽新增广告,欢迎大家体验并提出意见!
  116. // @note 20-04-15 2.2.0 一些广告被其他插件屏蔽导致的异常无视之
  117. // @note 20-03-30 2.1.9 干掉“记录你的创作历程”,干掉未登录情况下的角标提醒
  118. // @note 20-03-13 2.1.8 窄屏适配加强
  119. // @note 20-03-13 2.1.7 更新简介
  120. // @note 20-03-12 2.1.6 宽度自适应(感谢来自GitHub的朋友LeonG7的建议)!修复剪贴板净化无效的问题。
  121. // @note 20-03-04 2.1.5 适配AdGuard
  122. // @note 20-02-27 2.1.4 优化免登录复制
  123. // @note 20-02-25 2.1.3 免登录复制更新,现已可用
  124. // @note 20-02-24 2.1.2 By Github@JalinWang 更改去除剪贴板劫持的方式,使得原文格式在复制时能够保留
  125. // @note 20-02-22 2.1.1 紧急修复由于 CSDN 修改前端结构导致的文章错位
  126. // @note 20-02-11 2.1.0 若干动画优化,视觉体验更流畅
  127. // @note 20-02-06 2.0.9 武汉加油!修改推荐内容切换开关位置,减少违和感
  128. // @note 20-01-17 2.0.8 去除右侧广告
  129. // @note 20-01-17 2.0.7 感谢来自GitHub的朋友“gleans”的建议,去掉页头广告
  130. // @note 19-12-12 2.0.6 感谢来自GitHub的朋友“yexuesong”的建议,将作者信息在文章顶部展示
  131. // @note 19-10-30 2.0.5 美化隐藏按钮,增加点击动画
  132. // @note 19-10-30 2.0.4 删除CSDN官方在主页推送的文章(大多是广告)
  133. // @note 19-10-30 2.0.3 添加更多屏蔽脚本
  134. // @note 19-10-30 2.0.0 祝自己生日快乐~完全重写CSDNGreener,统一使用JQuery,效率更高
  135. // @note 19-10-27 1.5.2 删除分享海报提示&&感谢GitHub的朋友“CHN-STUDENT”的反馈,去除底部课程推荐
  136. // @note 19-10-27 1.5.1 感谢来自GitHub的朋友“CHN-STUDENT”的细致复现反馈,去除了底部的课程推荐广告
  137. // @note 19-10-04 1.5.0 移除了底部主题信息和打赏
  138. // @note 19-09-10 1.4.9 感谢来自GitHub的朋友“programmerZe”的细致复现反馈,修复了评论区点击查看回复后,已经展开的评论会收起的问题
  139. // @note 19-09-04 1.4.8 感谢来自GitHub的朋友“dwdcth”的细致复现反馈,现在查看原创文章不会无限弹登录窗口了,且加强了自动展开功能
  140. // @note 19-08-20 1.4.7 感谢油叉用户“SupremeSir”的反馈,修复了右侧悬浮栏遮挡文章的问题
  141. // @note 19-08-14 1.4.6 无语。刚更新的免登录复制,又改了。修复!
  142. // @note 19-08-13 1.4.5 更新了独家功能:免登录复制
  143. // @note 19-08-13 1.4.4 感谢来自GitHub的朋友“iamsunxing”的反馈,修复了顶部不贴边的问题
  144. // @note 19-08-01 1.4.3 感谢油叉用户“ddddy”的反馈,去除了更多推广广告
  145. // @note 19-07-30 1.4.2 感谢油叉用户“周义杰”的反馈,增加了防CSDN外链重定向的功能(CSDN臭流氓)
  146. // @note 19-07-20 1.4.1 修复了推荐内容开关跨文章无效问题(忘了配置Cookie作用域)
  147. // @note 19-07-19 1.4.0 1. 构架大更新 2. 感谢来自GitHub的朋友"lukemin"的反馈,加入了下方推荐内容是否隐藏开关(实用)
  148. // @note 19-07-13 1.3.0 感谢来自GitHub的朋友“Holaplace”的反馈,修复了文章无法自动展开的问题(CSDN总改这个,令人头疼)
  149. // @note 19-06-08 1.2.6 感谢油叉用户“DeskyAki”的反馈,修复了文章无法自动展开的问题
  150. // @note 19-06-07 1.2.4 修复了登录后评论无法正常打开的问题
  151. // @note 19-06-07 1.2.3 感谢油叉用户"永远的殿下"的反馈,在一上午的努力攻克下,终于实现了未登录展开评论的语句
  152. // @note 19-06-05 1.2.0 修复了评论无法自动展开的BUG
  153. // @note 19-06-04 1.1.9 修复了无法自动展开的BUG(自闭了)
  154. // @note 19-06-04 1.1.6 CSDN太坏了,把“消息”按钮的Class设置成了“GitChat”,所以修复了“消息”按钮消失的问题
  155. // @note 19-06-04 1.1.5 1. 优化了论坛体验 2.美化、优化代码结构
  156. // @note 19-06-04 1.1.4 感谢来自GitHub的朋友“iamsunxing”的反馈,增加了论坛广告匹配规则
  157. // @note 19-06-03 1.1.3 感谢来自GitHub的朋友“wangwei135”的反馈,去除了评论区上方的广告
  158. // @note 19-05-27 1.1.2 感谢油叉用户“夏伟杰”的反馈,修复了富文本编辑器无法使用的问题
  159. // @note 19-05-25 1.1.0 1. 修复了主页广告的问题 2. 论坛自动展开 3. 论坛广告消除
  160. // @note 19-05-25 1.0.9 感谢油叉用户“渣渣不准说话”的反馈,修复了收藏按钮消失的问题
  161. // @note 19-03-01 1.0.3 添加页面选择性过滤规则
  162. // @note 19-03-01 1.0.2 增加了净化剪贴板功能
  163. // @note 19-03-01 1.0.1 修复了排版问题, 优化了代码结构
  164. // @note 19-02-26 1.0.0 初版发布
  165. // ==/UserScript==
  166. var version = "4.2.4";
  167. var currentURL = window.location.href;
  168. if (currentURL.indexOf("?") !== -1) {
  169. currentURL = currentURL.substring(0, currentURL.indexOf("?"));
  170. }
  171. var list;
  172. var windowTop = 0;
  173. var startTimeMilli = Date.now();
  174. var stopTimeMilli = 0;
  175. // 配置控制类
  176. class Config {
  177. get(key, value) {
  178. var cookie = $.cookie(key);
  179. if (cookie == undefined) {
  180. new Config().set(key, value);
  181. console.debug("Renew key: " + key + " : " + value);
  182. return value;
  183. }
  184. console.debug("Read key: " + key + " : " + cookie);
  185. if (cookie === "true") { return true; }
  186. if (cookie === "false") { return false; }
  187. return cookie;
  188. }
  189.  
  190. getS(key, value) {
  191. var cookie = $.cookie(key);
  192. if (cookie == undefined) {
  193. new Config().set(key, value);
  194. console.debug("Renew key: " + key + " : " + value);
  195. return value;
  196. }
  197. console.debug("Read key: " + key + " : " + cookie);
  198. return cookie;
  199. }
  200.  
  201. set(setKey, setValue) {
  202. $.cookie(setKey, setValue, {
  203. path: '/',
  204. expires: 365
  205. });
  206. console.debug("Key set: " + setKey + " : " + setValue);
  207. }
  208.  
  209. listenButton(element, listenKey, trueAction, falseAction) {
  210. $(element).click(function () {
  211. let status = new Config().get(listenKey, true);
  212. console.debug("Status: " + status);
  213. if (status === "true" || status) {
  214. console.debug("Key set: " + listenKey + " :: " + false);
  215. new Config().set(listenKey, false);
  216. } else {
  217. console.debug("Key set: " + listenKey + " :: " + true);
  218. new Config().set(listenKey, true);
  219. }
  220. });
  221. }
  222.  
  223. listenButtonAndAction(element, listenKey, trueAction, falseAction) {
  224. $(element).click(function () {
  225. let status = new Config().get(listenKey, true);
  226. console.debug("Status: " + status);
  227. if (status === "true" || status) {
  228. console.debug("Key set: " + listenKey + " :: " + false);
  229. new Config().set(listenKey, false);
  230. falseAction();
  231. } else {
  232. console.debug("Key set: " + listenKey + " :: " + true);
  233. new Config().set(listenKey, true);
  234. trueAction();
  235. }
  236. });
  237. }
  238. }
  239. var config = new Config();
  240. var progress = 0;
  241. class Progress {
  242. init() {
  243. progress = 0;
  244. NProgress.start();
  245. $("#greenerProgress").text("绿化中...");
  246. $(".toolbar-search").hide();
  247. }
  248.  
  249. setProgress(p) {
  250. progress = p;
  251. $("#greenerProgress").text(progress + "%");
  252. NProgress.set(progress / 100);
  253. console.log(progress + "%");
  254. }
  255.  
  256. incProgress(p) {
  257. progress = progress + p;
  258. progress = progress > 100 ? 100 : progress;
  259. $("#greenerProgress").text(progress + "%");
  260. NProgress.set(progress / 100);
  261. console.log(progress + "%");
  262. }
  263.  
  264. done() {
  265. progress = 100;
  266. NProgress.done();
  267. $("#greenerProgress").html(protect_svg + ' CSDNGreener 正在守护您的浏览体验');
  268. setTimeout(function() {
  269. $("#greenerProgress").fadeOut(500);
  270. setTimeout(function() {
  271. $(".toolbar-search").fadeIn(500);
  272. if (!isFirefox()) {
  273. // 提示
  274. let tipsCookie = config.get("showTip", true);
  275. if (tipsCookie) {
  276. showTips();
  277. }
  278. config.set("showTip", false);
  279. }
  280. }, 500);
  281. }, 1500);
  282. }
  283. }
  284. var progressor = new Progress();
  285.  
  286. // 自定义 CSS
  287. // 进度条
  288. $('head').append("<style>#nprogress{pointer-events:none}#nprogress .bar{background:#f44444;position:fixed;z-index:1031;top:0;left:0;width:100%;height:2px}#nprogress .peg{display:block;position:absolute;right:0;width:100px;height:100%;box-shadow:0 0 10px #f44444,0 0 5px #f44444;opacity:1;-webkit-transform:rotate(3deg) translate(0,-4px);-ms-transform:rotate(3deg) translate(0,-4px);transform:rotate(3deg) translate(0,-4px)}#nprogress .spinner{display:block;position:fixed;z-index:1031;top:15px;right:15px}#nprogress .spinner-icon{width:18px;height:18px;box-sizing:border-box;border:solid 2px transparent;border-top-color:#f44444;border-left-color:#f44444;border-radius:50%;-webkit-animation:nprogress-spinner .4s linear infinite;animation:nprogress-spinner .4s linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent #nprogress .bar,.nprogress-custom-parent #nprogress .spinner{position:absolute}@-webkit-keyframes nprogress-spinner{0%{-webkit-transform:rotate(0)}100%{-webkit-transform:rotate(360deg)}}@keyframes nprogress-spinner{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}</style>");
  289. // 设置窗口
  290. $('head').append("<style>.black_overlay{top:0%;left:0%;width:100%;height:100%;background-color:#000;z-index:1001;-moz-opacity:0.8;opacity:.10;filter:alpha(opacity=88)}.black_overlay,.white_content{display:none;position:absolute}.white_content{z-index:9999!important;top:25%;left:25%;width:650px;height:60%;padding:20px;border:0px;background-color:rgba(255,255,255,0.9);z-index:1002;overflow:auto}</style>");
  291. // 提示条
  292. $('head').append("<style>.tripscon{padding:10px}</style>");
  293. // 按钮(旧)
  294. $('head').append("<style>#toggle-button{display:none}.button-label{position:relative;display:inline-block;width:82px;background-color:#ccc;border:1px solid #ccc;border-radius:30px;cursor:pointer}.circle{position:absolute;top:0;left:0;width:30px;height:30px;border-radius:50%;background-color:#fff}.button-label .text{line-height:30px;font-size:18px;-webkit-user-select:none;user-select:none}.on{color:#fff;display:none;text-indent:10px}.off{color:#fff;display:inline-block;text-indent:53px}.button-label .circle{left:0;transition:all .3s}#toggle-button:checked+label.button-label .circle{left:50px}#toggle-button:checked+label.button-label .on{display:inline-block}#toggle-button:checked+label.button-label .off{display:none}#toggle-button:checked+label.button-label{background-color:#78d690}</style>");
  295. // 保存按钮
  296. $('head').append("<style>.saveButton{background-color:#19a4ed;border:none;color:#fff;padding:5px 15px;text-align:center;text-decoration:none;display:inline-block;font-size:14px;cursor:pointer}</style>");
  297. // Star 样式
  298. $('head').append("<style>.giveMeOneStar:hover{color:#FF69B4;}</style>");
  299. // 设置窗口文字效果
  300. if (isFirefox()) {
  301. $('head').append("<style>.configContainer label{font-size:15px}.configContainer p{font-size:15px}.giveMeOneStar{font-size:15px}.configContainer .title{font-size:20px}.configContainer .bold{font-weight:bold;margin-bottom:5px}</style>");
  302. } else {
  303. $('head').append("<style>.configContainer label{font-size:12px}.configContainer p{font-size:12px}.giveMeOneStar{font-size:15px}.configContainer .title{font-size:20px}.configContainer .bold{font-weight:bold;margin-bottom:5px}</style>");
  304. }
  305. // SVG
  306. //var save_svg = '<svg t="1595082650173" class="icon" viewBox="0 0 1075 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2078" width="140" height="140"><path d="M753.763902 685.830244a48.952195 48.952195 0 0 1 49.152-48.702439c81.420488 0 141.162146-65.386146 141.162147-146.057366 0-43.507512-13.037268-82.419512-43.457561-109.243317a142.360976 142.360976 0 0 0-20.280195-14.935415 158.045659 158.045659 0 0 0-11.239025-6.243902l-2.747317-1.298732a155.847805 155.847805 0 0 0-9.191024-3.996097c-1.348683-0.549463-2.697366-0.999024-4.096-1.498537a152.35122 152.35122 0 0 0-8.491707-2.847219c-1.948098-0.599415-3.896195-0.999024-5.844293-1.498537-2.497561-0.599415-4.945171-1.24878-7.492683-1.748293-2.597463-0.499512-5.34478-0.899122-8.042146-1.24878-1.948098-0.249756-3.846244-0.599415-5.844293-0.79922a153.150439 153.150439 0 0 0-14.435903-0.749268c-1.498537 0-2.997073 0.199805-4.545561 0.249756a265.390829 265.390829 0 0 0-5.594536-24.526049c-0.499512-1.998049-1.298732-3.846244-1.898146-5.844292a267.438829 267.438829 0 0 0-5.944196-17.982439c-0.649366-1.798244-1.498537-3.496585-2.197853-5.29483a283.123512 283.123512 0 0 0-7.742439-17.732683L772.745366 269.736585a282.973659 282.973659 0 0 0-9.790439-17.832585C714.302439 171.582439 625.88878 124.878049 524.487805 124.878049c-101.400976 0-189.914537 46.654439-238.517073 126.976-3.496585 5.794341-6.693463 11.788488-9.790439 17.832585l-2.197854 4.096a283.523122 283.523122 0 0 0-7.742439 17.732683l-2.197854 5.244878c-2.247805 5.894244-4.145951 11.988293-5.994146 18.03239-0.549463 1.998049-1.298732 3.846244-1.848195 5.844293a266.739512 266.739512 0 0 0-5.594537 24.476098c-1.498537 0-2.997073-0.199805-4.545561-0.199805-4.89522 0-9.690537 0.299707-14.485853 0.749268-1.998049 0.199805-3.846244 0.499512-5.794342 0.79922-2.697366 0.349659-5.444683 0.699317-8.092097 1.24878-2.497561 0.499512-4.995122 1.148878-7.492683 1.748293-1.898146 0.499512-3.846244 0.899122-5.794342 1.498536a153.649951 153.649951 0 0 0-8.491707 2.797269l-4.096 1.498536a164.289561 164.289561 0 0 0-9.240976 3.996098l-2.697366 1.348683a145.557854 145.557854 0 0 0-31.469268 21.179317C117.884878 408.600976 104.897561 447.562927 104.897561 491.070439c0 80.67122 59.741659 146.057366 141.162146 146.057366a48.952195 48.952195 0 0 1 49.152 48.702439 48.952195 48.952195 0 0 1-49.152 48.702439c-135.717463 0-245.710049-108.993561-245.710048-243.462244 0-109.692878 73.228488-202.402341 173.830243-232.872585A375.832976 375.832976 0 0 1 524.487805 20.330146a375.882927 375.882927 0 0 1 350.307902 237.867708c100.601756 30.470244 173.830244 123.179707 173.830244 232.872585 0 134.468683-109.992585 243.462244-245.710049 243.462244a48.952195 48.952195 0 0 1-49.102048-48.702439z" p-id="2079"></path><path d="M487.973463 386.122927a49.102049 49.102049 0 0 1 72.928781 0.099902l147.356097 162.041756c6.993171 7.742439 11.48878 19.431024 12.537757 30.120586l0.249756 12.937366c0 19.480976-20.48 39.661268-39.211708 39.661268h-104.897561v262.993171a52.44878 52.44878 0 1 1-104.897561 0v-262.993171h-104.897561c-13.886439 0-39.211707-21.72878-39.211707-39.661268v-12.987317c0-12.487805 4.795317-21.27922 12.637659-29.920781l147.356097-162.291512z" p-id="2080"></path></svg>';
  307. var star_svg_1 = '<svg t="1595083631685" class="icon" viewBox="0 0 1051 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2173" width="140" height="140"><path d="M525.837838 852.410811L199.264865 1001.859459l41.513513-357.016216L0 381.924324l351.481081-69.189189L525.837838 0l174.356757 312.735135L1051.675676 381.924324l-240.778379 262.918919 41.513514 357.016216z" fill="#FFD566" p-id="2174"></path></svg>';
  308. var star_svg_2 = ' <svg t="1595083715312" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7848" width="140" height="140"><path d="M1014.001347 866.090236L810.23569 662.324579l145.497643-84.126599c11.377778-6.550842 17.92862-18.962963 16.894276-32.064647-1.034343-13.101684-9.309091-24.479461-21.376431-29.306397l-648.188552-258.585859c-12.756902-5.171717-27.23771-2.068687-36.891582 7.585186-9.653872 9.653872-12.756902 24.13468-7.585185 36.891582l258.585858 648.533333c4.826936 12.06734 16.204714 20.686869 29.306397 21.376431 13.101684 1.034343 25.513805-5.516498 32.064647-16.894276l84.126599-145.497643 203.765657 203.765657c6.550842 6.550842 15.17037 9.998653 24.13468 9.998653 8.96431 0 17.92862-3.447811 24.13468-9.998653l99.29697-99.29697c13.446465-13.446465 13.446465-35.167677 0-48.614141zM150.324579 102.055219c-13.446465-13.446465-35.167677-13.446465-48.26936 0-13.446465 13.446465-13.446465 35.167677 0 48.26936l76.196633 76.196633c6.550842 6.550842 15.515152 9.998653 24.13468 9.998653s17.583838-3.447811 24.13468-9.998653c13.446465-13.446465 13.446465-35.167677 0-48.26936L150.324579 102.055219zM176.183165 338.575084c0-18.962963-15.17037-34.133333-34.133333-34.133333H34.133333c-18.962963 0-34.133333 15.17037-34.133333 34.133333s15.17037 34.133333 34.133333 34.133334h107.571718c18.962963 0 34.478114-15.17037 34.478114-34.133334zM162.391919 444.422896l-76.196633 75.851851c-13.446465 13.446465-13.446465 35.167677 0 48.269361 6.550842 6.550842 15.515152 9.998653 24.13468 9.998653s17.583838-3.447811 24.13468-9.998653l76.196633-76.196633c13.446465-13.446465 13.446465-35.167677 0-48.269361-13.446465-13.101684-35.167677-13.101684-48.26936 0.344782zM338.575084 176.183165c18.962963 0 34.133333-15.17037 34.133334-34.133333V34.133333c0-18.962963-15.17037-34.133333-34.133334-34.133333s-34.133333 15.17037-34.133333 34.133333v107.571718c0 18.962963 15.17037 34.478114 34.133333 34.478114zM468.557576 220.659933c8.619529 0 17.583838-3.447811 24.13468-9.998654L568.888889 134.464646c13.446465-13.446465 13.446465-35.167677 0-48.26936-13.446465-13.446465-35.167677-13.446465-48.26936 0l-76.196633 76.196633c-13.446465 13.446465-13.446465 35.167677 0 48.26936 6.550842 6.550842 15.515152 9.998653 24.13468 9.998654z" fill="#2c2c2c" p-id="7849"></path></svg>';
  309. var star_svg_3 = ' <svg t="1595083925438" class="icon" viewBox="0 0 1204 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4809" width="140" height="140"><path d="M1088.864348 618.13701a1555.009384 1555.009384 0 0 1-150.273004 167.137308c-52.881642 51.195212-107.931552 101.18583-163.643989 147.261521-33.849069 27.524955-60.229661 48.665566-76.190521 60.229661a162.981462 162.981462 0 0 1-191.891699 0c-15.539253-12.045932-42.160763-32.644476-76.190521-60.831957a2638.480754 2638.480754 0 0 1-164.366745-147.261521 1579.101249 1579.101249 0 0 1-150.273004-165.812257A468.104924 468.104924 0 0 1 0.152998 344.754579 315.543193 315.543193 0 0 1 109.048225 96.367457a399.443111 399.443111 0 0 1 493.883219-20.478084 398.660125 398.660125 0 0 1 493.883219 20.478084A315.482964 315.482964 0 0 1 1204.746215 343.309067a466.840101 466.840101 0 0 1-115.701178 274.647254z" fill="#FE4B83" p-id="4810"></path></svg>';
  310. var star_svg_4 = ' <svg t="1595084089115" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="8008" width="140" height="140"><path d="M512 46.545455C256 46.545455 46.545455 256 46.545455 512s209.454545 465.454545 465.454545 465.454545 465.454545-209.454545 465.454545-465.454545S768 46.545455 512 46.545455z m0 837.818181c-204.8 0-372.363636-167.563636-372.363636-372.363636s167.563636-372.363636 372.363636-372.363636 372.363636 167.563636 372.363636 372.363636-167.563636 372.363636-372.363636 372.363636z" fill="#00C5C5" p-id="8009"></path><path d="M656.290909 586.472727c-79.127273 69.818182-209.454545 69.818182-288.581818 0-18.618182-13.963636-41.890909-13.963636-60.509091 4.654546-13.963636 13.963636-13.963636 41.890909 4.654545 60.509091 55.854545 51.2 125.672727 74.472727 200.145455 74.472727s144.290909-27.927273 200.145455-74.472727c18.618182-13.963636 18.618182-41.890909 4.654545-60.509091s-41.890909-18.618182-60.509091-4.654546zM358.4 460.8c27.927273 0 51.2-23.272727 51.2-51.2s-23.272727-55.854545-51.2-55.854545c-27.927273 0-51.2 23.272727-51.2 51.2s23.272727 55.854545 51.2 55.854545zM665.6 460.8c27.927273 0 51.2-23.272727 51.2-51.2s-23.272727-51.2-51.2-51.2-51.2 23.272727-51.2 51.2 23.272727 51.2 51.2 51.2z" fill="#00C5C5" p-id="8010"></path></svg>';
  311. var star_svg = star_svg_1 + star_svg_2 + star_svg_3 + star_svg_4;
  312. var donate_svg = '<svg t="1592982508258" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4207" width="32" height="32"><path d="M664.48 234.432a32 32 0 0 0-45.248-0.8l-76.256 73.6-73.344-73.216a32 32 0 1 0-45.248 45.312l72.384 72.256h-49.28a32 32 0 0 0 0 64h63.776v32h-63.776a32 32 0 0 0 0 64h63.776v65.664a32 32 0 1 0 64 0v-65.664h64.288a32 32 0 1 0 0-64h-64.288v-32h64.288a32 32 0 1 0 0-64h-50.368l74.464-71.872a32.032 32.032 0 0 0 0.832-45.28z m275.2 503.552a9017.568 9017.568 0 0 0-141.664-56.736 368.512 368.512 0 0 0 97.568-248.608c0-202.912-165.12-368-368.064-368s-368 165.088-368 368c0 16.224 1.024 32.352 3.072 47.968 2.304 17.504 18.496 29.664 35.904 27.584a32 32 0 0 0 27.584-35.904 304.512 304.512 0 0 1-2.56-39.648c0-167.616 136.384-304 304-304 167.648 0 304.064 136.384 304.064 304a300.544 300.544 0 0 1-96.128 221.472c-0.768 0.736-1.088 1.76-1.824 2.528-42.848-15.936-79.328-28.48-93.76-30.656-24.896-3.904-48.672 7.616-63.104 28.896-12.032 17.792-15.072 38.816-8.096 56.256 4.288 10.656 20.512 32.896 39.776 57.28-46.432-0.064-117.312-6.336-192.832-35.488-31.264-12.064-69.44-52.64-103.136-88.416-47.968-50.976-93.28-99.104-142.56-99.104-18.336 0-35.744 6.848-50.336 19.776-18.24 16.224-35.136 48.32-12 109.248 42.624 112.16 208.544 285.12 341.728 285.12h478.144a32 32 0 0 0 32-32v-160a31.84 31.84 0 0 0-19.776-29.568z m-44.16 157.6h-445.12l-1.024 32v-32c-97.6 0-247.072-152.128-281.92-243.872-10.112-26.656-6.72-37.408-5.344-38.624 4.128-3.648 6.528-3.648 7.84-3.648 21.632 0 64.608 45.632 95.968 78.944 40.224 42.752 81.856 86.944 126.656 104.256 85.216 32.896 164.896 39.808 216.736 39.808 41.376 0 67.584-4.352 68.672-4.544a32 32 0 0 0 19.136-52.16c-27.008-32.096-58.592-71.808-67.296-85.344 0.288-0.576 0.512-1.024 0.352-1.152 22.848 3.488 162.432 57.952 265.28 99.84v106.496z" p-id="4208"></path></svg>';
  313. var set_svg = '<svg t="1592982970375" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="10112" width="48" height="48"><path d="M256 102.4h512l256 256-512 563.2L0 358.4z" fill="#26CD63" p-id="10113"></path><path d="M256 102.4l256 256H0zM768 102.4l256 256H512zM512 921.6l204.8-563.2H307.2z" fill="#14A345" p-id="10114"></path></svg>';
  314. var save_svg = '<svg t="1629448588351" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7849" width="200" height="200"><path d="M512 0C229.2 0 0 229.2 0 512s229.2 512 512 512 512-229.2 512-512S794.8 0 512 0z m0 945.2C273.1 945.2 78.8 750.9 78.8 512S273.1 78.8 512 78.8 945.2 273.1 945.2 512 750.9 945.2 512 945.2z" p-id="7850" fill="#ffffff"></path><path d="M680.9 359.4L461 582.3 341.6 473.6c-16-14.6-41-13.4-55.6 2.6-14.7 16.1-13.5 41 2.6 55.6L436 666.1c7.5 6.8 17 10.2 26.5 10.2 10.2 0 20.3-3.9 28-11.7L737 414.7c15.3-15.5 15.1-40.4-0.4-55.7-15.5-15.2-40.5-15.1-55.7 0.4z" p-id="7851" fill="#ffffff"></path></svg>';
  315. var settings_svg = '<svg t="1629433360462" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2870" width="200" height="200"><path d="M1006.438 17.548c-0.032 0-430.43-112.966-780.45 237.022-288.99 289.008-33.522 576.966-33.522 576.966s287.958 255.484 576.952-33.55C1119.436 448.012 1006.468 17.612 1006.438 17.548z" fill="#9ED36A" p-id="2871"></path><path d="M1006.438 17.548l-42.674-8.216c0.032 0.062 112.998 438.678-236.99 788.652-96.344 96.406-192.598 132.208-278.104 137.144 95.41 5.5 208-24.368 320.748-137.144C1119.436 448.012 1006.468 17.612 1006.438 17.548z" fill="#FFFFFF" opacity=".2" p-id="2872"></path><path d="M600.406 423.612c-8.308-8.34-21.836-8.34-30.148 0L6.4 987.426c-8.326 8.372-8.326 21.868 0 30.18 8.326 8.308 21.822 8.308 30.162 0L600.406 453.76c8.34-8.342 8.34-21.838 0-30.148z" fill="#8AC054" p-id="2873"></path></svg>';
  316. var protect_svg = '<svg t="1629560538805" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3212" width="200" height="200"><path d="M800.3 205.1L534.8 116c-16-5.4-33.3-5.3-49.2 0.2l-264.5 92.3c-29.3 10-49 37.5-49.1 68.4l1.7 265.4c0.7 81 31.1 158.9 85.6 218.9 25 27.7 56.9 51.5 97.8 72.7l144 74.6c9 4.7 19.7 4.6 28.7-0.2L672.5 832c40.4-21.6 72.2-45.7 96.9-73.8 53.6-60.6 83-138.9 82.6-219.8l-1.7-265.6c-0.5-30.9-20.5-58.1-50-67.7z" fill="#07C160" p-id="3213"></path><path d="M474.1 652c-7.1 0-13.8-2.8-18.9-7.8l-151-151.1c-10.4-10.4-10.4-27.4 0-37.8s27.4-10.4 37.8 0l132.1 132.2 207.7-207.7c10.4-10.4 27.4-10.4 37.8 0 10.4 10.4 10.4 27.4 0 37.8L493 644.2c-5 5-11.8 7.8-18.9 7.8z" fill="#FFFFFF" p-id="3214"></path></svg>';
  317.  
  318. // jquery.showtips.js
  319. (function(jQuery) {
  320. jQuery.fn.showTips = function(options,elem){
  321. var config = {
  322. skin:"trips",
  323. content:$(this).attr("tips")||"弹出类型的气泡提示!", //气泡提示内容里面可以是HTML,默认显示自定义的提示内容
  324. width:"auto", //默认为auto,可以写具体尺寸如:200
  325. alignTo:["right","center"], //箭头方向
  326. color:["rgb(247, 206, 57)","#FFFEF4"], //这里是提示层的风格,第一个参数为提示边框颜色,第二个参数为提示背景颜色
  327. type:"html", //显示内容类型
  328. trigger:"click", //默认为点击显示,show为初始化就显示,hover为经过显示,focus焦点显示,mouse跟随鼠标显示隐藏
  329. spacing:10, //默认为箭头距离对象的尺寸
  330. customid:"", //自定义ID
  331. isclose:false, //是否显示关闭按钮
  332. success : null //成功后的回调函数
  333. };
  334. var opts = jQuery.extend(config, options);
  335. return this.each(function(){
  336. var that = jQuery(this),tipBox,tipId,selfH,selfW,conId,docW, spa = opts.spacing, skin=opts.skin;
  337. var Mathrandom = Math.floor(Math.random() * 9999999);
  338. var pmr = (opts.customid=="") ? Mathrandom :opts.customid.replace(/[#.]/, "");
  339. var pointer=opts.alignTo.length===1 ? ''+opts.alignTo[0]+'' : ''+opts.alignTo[0]+'-'+opts.alignTo[1]+'';
  340.  
  341. if(typeof elem == 'string') {
  342. if(elem =="show"){
  343. jQuery('#tip'+pmr).show(); jQuery("#con"+pmr).html(opts.content);
  344. showPosition(pointer,jQuery('#tip'+pmr));
  345. };
  346. if(elem =="hide"){jQuery('#tip'+pmr).hide()};
  347. };
  348. if(typeof elem == '' || typeof elem == undefined){return true};
  349. if(jQuery('#tip'+pmr).length==1){return false;}
  350. tipBox=jQuery('<div class="'+skin+' '+skin+'-'+pointer+'" id="tip'+pmr+'"><i></i><em></em><div class="'+skin+'con" id="con'+pmr+'"></div></div>').appendTo(document.body);
  351. tipId = jQuery("#tip"+pmr);
  352. conId = jQuery("#con"+pmr);
  353.  
  354. var edgecolor='border-'+opts.alignTo[0]+'-color', tfi=tipId.find("i"), tfem=tipId.find("em"), tfiem=tipId.find("i,em");
  355. tipId.css({'position':'absolute',border:'1px solid','border-color':opts.color[0],'background-color':opts.color[1]});
  356. if(opts.alignTo[1]=='center'){ var offpos=50,percen="%"; }else{ var offpos=5,percen="px"; };
  357. tfiem.css({width:0,height:0,content:'','position':'absolute'})
  358. tfi.css({border:'8px solid transparent','z-index':5});
  359. tfem.css({border:'7px solid transparent','z-index':10});
  360. switch (pointer) {
  361. case 'top-center':
  362. case 'bottom-center':
  363. case 'top-left':
  364. case 'bottom-left':
  365. var poi="left";
  366. if(pointer=='top-center' || pointer=='bottom-center'){
  367. tfi.css({"margin-left":"-8px"});
  368. tfem.css({"margin-left":"-7px"});
  369. }
  370. break;
  371. case 'left-center':
  372. case 'right-center':
  373. case 'left-top':
  374. case 'right-top':
  375. var poi="top";
  376. if(pointer=='left-center' || pointer=='right-center'){
  377. tfi.css({"margin-top":"-8px"});
  378. tfem.css({"margin-top":"-7px"});
  379. }
  380. break;
  381. default:
  382. var poi="right";
  383. break;
  384. };
  385.  
  386. if(pointer=='follow'){
  387. tfi.css({'border-bottom-color':opts.color[0],left:''+offpos+percen+'',bottom:'100%'});
  388. tfem.css({'border-bottom-color':opts.color[1],left:''+(offpos+(opts.alignTo[1]=='center'?0:1))+percen+'',bottom:'100%'});
  389. }else{
  390. tfi.css(edgecolor,opts.color[0]).css(poi,''+offpos+percen+'');
  391. tfem.css(edgecolor,opts.color[1]).css(poi,''+(offpos+(opts.alignTo[1]=='center'?0:1))+percen+'');
  392. tfiem.css(opts.alignTo[0],'100%');
  393. };
  394.  
  395. switch (opts.type) {
  396. case 'html':conId.html(opts.content); break;
  397. case 'id' :
  398. var tempid=jQuery(opts.content) ,wrap = document.createElement("div");
  399. if(tempid.css("display") == "none"){ tempid.css({display:"block"}); }
  400. conId.append(tempid);
  401. break;
  402. };
  403. if(opts.isclose){
  404. jQuery('<span class="'+skin+'close" id="close'+pmr+'">&times;</span>').appendTo(tipId);
  405. tipId.find("#close"+pmr+"").on("click",function(){tipId.hide();});
  406. }
  407.  
  408. if(typeof opts.width === 'string'){
  409. docW = parseInt(document.body.clientWidth*(opts.width.replace('%','')/100));
  410. (typeof opts.width == 'auto' || typeof opts.width == '') ? tipBox.css({width:'auto'}) : tipBox.css({width:docW});
  411. tipBox.height();
  412. }else{
  413. tipBox.width(opts.width).height();
  414. }
  415. function showPosition(pointer,cell){
  416. var selfH = that.outerHeight(true), selfW = that.outerWidth(true);
  417. var post=that.offset().top, posl=that.offset().left;
  418. var tipCell=(cell=="" || cell==undefined) ? tipId : cell;
  419. var tipH=tipCell.outerHeight(true), tipW=tipCell.outerWidth(true);
  420.  
  421. switch (pointer) {
  422. case 'top-left': tipCell.css({top:post-tipH-spa,left:posl}); break;
  423. case 'top-center': tipCell.css({top:post-tipH-spa,left:posl-(tipW/2)+(selfW/2)}); break;
  424. case 'top-right': tipCell.css({top:post-tipH-spa,left:posl-(tipW-selfW)}); break;
  425. case 'bottom-left': tipCell.css({top:post+selfH+spa,left:posl}); break;
  426. case 'bottom-center': tipCell.css({top:post+selfH+spa,left:posl-(tipW/2)+(selfW/2)}); break;
  427. case 'bottom-right': tipCell.css({top:post+selfH+spa,left:posl-(tipW-selfW)}); break;
  428. case 'left-top': tipCell.css({top:post,left:posl-tipW-spa}); break;
  429. case 'left-center': tipCell.css({top:post-(tipH/2)+(selfH/2),left:posl-tipW-spa}); break;
  430. case 'right-top': tipCell.css({top:post,left:posl+selfW+spa}); break;
  431. case 'right-center': tipCell.css({top:post-(tipH/2)+(selfH/2),left:posl+selfW+spa}); break;
  432. case 'follow': that.mousemove(function(e) { tipCell.css({top:e.pageY + 30,left:e.pageX - 6}); }); break;
  433. };
  434. }
  435. tipBox.hide();
  436. switch (opts.trigger){
  437. case 'show':showPosition(pointer);tipBox.show();break;
  438. case 'click':that.click(function(){showPosition(pointer);tipBox.show();});break;
  439. case 'hover':that.hover(function(){showPosition(pointer);tipBox.show(); tipBox.on("mouseover",function(){jQuery(this).show()}).on("mouseout",function(){jQuery(this).hide()})},function(){tipBox.hide();});break;
  440. case 'focus':that.focus(function(){showPosition(pointer);tipBox.show();}); that.blur(function(){tipBox.hide();});break;
  441. case 'mouse':that.hover(function(){showPosition(pointer);tipBox.show();},function(){tipBox.hide();});break;
  442. };
  443. setTimeout(function(){opts.success && opts.success();}, 1);
  444. });
  445. }
  446. })(jQuery);
  447.  
  448. (function () {
  449. 'use strict';
  450.  
  451. l("CSDNGreener V" + version);
  452. if (isFirefox()) {
  453. console.log("您正在使用火狐浏览器,将使用兼容模式运行 CSDNGreener。");
  454. }
  455. progressor.init();
  456.  
  457. // 绿化设定按钮点击事件
  458. let jss = "";
  459. jss += "<script>function showConfig() {";
  460. jss += "$(window).scrollTop(0);";
  461. jss += "$('.white_content').fadeIn(500);";
  462. jss += "$('body').css('overflow', 'hidden');";
  463. jss += "$('body').css('filter','blur(3px)');";
  464. jss += "$('body').css('pointer-events','none')";
  465. jss += "}</script>";
  466. $("body").append(jss);
  467.  
  468. // 保存按钮点击事件
  469. let saveJss = "";
  470. saveJss += "<script>function saveAndReload() {";
  471. saveJss += "$('#configContent').fadeOut(200);";
  472. saveJss += "setTimeout(function() {location.reload();},200)";
  473. saveJss += "}</script>";
  474. $("body").append(saveJss);
  475.  
  476. setTimeout(function() {
  477. var blockURL = currentURL.split("/").length;
  478. var main = /(www\.csdn\.net\/)$/;
  479. var mainNav = /nav/;
  480. var article = /article/;
  481. var bbs = /bbs\.csdn\.net/;
  482. var blog = /blog\.csdn\.net/;
  483. var blog2 = /\/article\/list\//;
  484. var download = /download\.csdn\.net/;
  485. var login = /passport\.csdn\.net/;
  486. var zone = /me\.csdn\.net/;
  487. var other = /(www\.csdn\.net\/)/;
  488. var mp = /mp\.csdn\.net/;
  489. var article_month = /article\/month/;
  490. var link = /link\.csdn\.net/;
  491. var blink = /blink\.csdn\.net/;
  492.  
  493. // 数组初始化
  494. list = [];
  495. // 头部分
  496. // APP
  497. // put(".app-app");
  498. // VIP
  499. put(".vip-caise");
  500. // 记录你的成长历程(记个毛)
  501. put("#writeGuide");
  502. // 新通知小圆点(未登录才消掉)
  503. if ($(".userinfo a").text() === '登录/注册') {
  504. put("#msg-circle");
  505. }
  506. // 顶部谷歌广告
  507. put(".adsbygoogle");
  508. // 悬浮在顶栏按钮上出现的二维码
  509. put(".appControl");
  510. // 顶部广告
  511. put(".advert-bg");
  512.  
  513. if (main.test(currentURL) || mainNav.test(currentURL)) {
  514. l("正在优化主页体验...");
  515. // 常规
  516. // 头部广告
  517. put(".banner-ad-box");
  518. // 嵌入广告
  519. put("#kp_box_211");
  520. // 右侧广告
  521. put(".slide-outer");
  522. // 右侧详情
  523. put(".persion_article");
  524. // 右侧推荐
  525. $(".feed_company").parent().remove();
  526. // 广告轮播
  527. put(".el-carousel__container");
  528. // 顶部横幅
  529. put(".toolbar-advert");
  530. // 顶栏VIP选项
  531. $('.toolbar-subMenu-box').find("[href='https://mall.csdn.net/vip']").parent().remove();
  532. // CSDN工具广告
  533. put("#floor-ad_64");
  534. clean(10);
  535. // common(5, 10);
  536. // 博客及主页优化
  537. common(9, 10);
  538. loop(3);
  539. loop(1);
  540. } else if ((blog.test(currentURL) && blockURL === 4) || blog2.test(currentURL)) {
  541. l("正在优化个人博客主页体验...");
  542. // 常规
  543. // 头部广告
  544. put(".banner-ad-box");
  545. // 右侧广告
  546. put(".slide-outer");
  547. // 右侧详情
  548. put(".persion_article");
  549. // 左侧广告
  550. put(".mb8");
  551. put("#kp_box_503");
  552. put("#kp_box_214");
  553. clean(10);
  554. // common(5, 10);
  555. loop(3);
  556. loop(1);
  557. } else if (article.test(currentURL) && !mp.test(currentURL) && !article_month.test(currentURL)) {
  558. l("正在优化阅读体验...");
  559. // 绿化设定
  560. if (isFirefox()) {
  561. setTimeout(function() {
  562. $(".toolbar-container-middle").prepend("<div id='greenerProgress' style='text-align:right'></div>");
  563. let htmlOf0 = '<div class="toolbar-btn csdn-toolbar-fl"><a id="greenerSettings" title="点击打开 CSDNGreener 绿化设定" href="javascript:void(0)" onclick="showConfig();">' + settings_svg + '</a></div>';
  564. $(".toolbar-btns").prepend(htmlOf0);
  565. if (isFirefox()) {
  566. // 提示
  567. let tipsCookie = config.get("showTip", true);
  568. if (tipsCookie) {
  569. showTips();
  570. }
  571. config.set("showTip", false);
  572. }
  573. }, 3000);
  574. } else {
  575. $(".toolbar-container-middle").prepend("<div id='greenerProgress' style='text-align:right'></div>");
  576. let htmlOf0 = '<div class="toolbar-btn csdn-toolbar-fl"><a id="greenerSettings" title="点击打开 CSDNGreener 绿化设定" href="javascript:void(0)" onclick="showConfig();">' + settings_svg + '</a></div>';
  577. $(".toolbar-btns").prepend(htmlOf0);
  578. }
  579. // 常规
  580. // 右侧广告,放到第一个清除
  581. // put(".recommend-right");
  582. put("#addAdBox");
  583. // put(".aside-box.kind_person.d-flex.flex-column");
  584. put(".recommend-top-adbox");
  585. // put(".recommend-list-box.d-flex.flex-column.aside-box");
  586. // 左侧广告
  587. // put("#container");
  588. // 快来写博客吧
  589. put(".blog_tip_box");
  590. // 推荐关注用户
  591. put(".blog-expert-recommend-box");
  592. // 右下角VIP
  593. put(".meau-gotop-box");
  594. // 广告
  595. put(".mediav_ad");
  596. put(".pulllog-box");
  597. put(".recommend-ad-box");
  598. put(".box-shadow");
  599. put(".type_hot_word");
  600. put(".fourth_column");
  601. // 高分辨率时右侧文章推荐
  602. // put(".right-item");
  603. // 广告
  604. put("#asideFooter");
  605. put("#ad-div");
  606. put("#479");
  607. put("#480");
  608. // 打赏
  609. put(".postTime");
  610. // 课程推荐
  611. put(".t0");
  612. // 分享海报
  613. put(".shareSuggest");
  614. // 底部主题
  615. put(".template-box");
  616. // 评论区广告
  617. put("div#dmp_ad_58");
  618. // 打赏
  619. put(".reward-user-box");
  620. // 右侧打赏按钮
  621. put(".to-reward");
  622. // 推荐内容广告
  623. put(".recommend-recommend-box");
  624. // 右侧广告
  625. put(".indexSuperise");
  626. // 抢沙发角标
  627. put(".comment-sofa-flag");
  628. // 页jio
  629. put(".bottom-pub-footer");
  630. // 登录查看未读消息
  631. put(".toolbar-notice-bubble");
  632. // 右侧广告
  633. put(".recommend-top-adbox");
  634. // 右侧四个广告
  635. put(".programmer1Box");
  636. put(".programmer2Box");
  637. put(".programmer3Box");
  638. put(".programmer4Box");
  639. // 点赞气泡
  640. put(".triplet-prompt");
  641. // 顶部横幅
  642. put(".toolbar-advert");
  643. // 底部信息
  644. put(".blog-footer-bottom");
  645. // 右侧栏广告
  646. put("#6527");
  647. put("#recommendAdBox");
  648. // 推荐内容Title
  649. put(".recommend-tit-mod");
  650. // 红包提醒
  651. put(".csdn-redpack-lottery-btn-box");
  652. // 学生认证
  653. put(".csdn-highschool-window");
  654. // 右侧悬浮栏除置顶以外的按钮
  655. put(".option-box[data-type='guide'],.option-box[data-type='cs'],.csdn-common-logo-advert");
  656. // 登录后您可以享受以下权益
  657. put(".passport-login-tip-container");
  658. // 底栏“觉得还不错?立即收藏”你在教我做事?
  659. put(".tool-active-list");
  660. // 文章底部 archive推荐
  661. put("#treeSkill");
  662. // 搜索框fire emoji
  663. put(".icon-fire");
  664. clean(10);
  665. setTimeout(function() {
  666. // 展开评论的所有回复
  667. $('.btn-read-reply').click();
  668. // 右侧toolbar 创作提示
  669. $(".sidetool-writeguide-box").remove();
  670. }, 1500);
  671. // 主动加入右侧栏
  672. if ($(".recommend-right").length === 0) {
  673. $("#mainBox").after('<div class="recommend-right align-items-stretch clearfix" id="rightAside"><aside class="recommend-right_aside"><div id="recommend-right" style="height: 100%; position: fixed; top: 52px; overflow: scroll;"></div></aside></div>');
  674. }
  675. // 上栏按钮删除
  676. $(".toolbar-menus > li > a:contains('专栏课程')").parent().remove();
  677. $(".toolbar-menus > li > a:contains('插件')").parent().remove();
  678. $(".toolbar-menus > li > a:contains('认证')").parent().remove();
  679. // 修复无法选择复制
  680. $("code").css("user-select","auto");
  681. $("#content_views").css("user-select","auto");
  682. $("pre").css("user-select","auto");7
  683. // 图片混文字时,无法完整复制,图片不会被复制下来 https://github.com/adlered/CSDNGreener/issues/87
  684. //let el = $("main .blog-content-box")[0];
  685. //let elClone = el.cloneNode(true);
  686. //el.parentNode.replaceChild(elClone, el);
  687. // 保存csdn的网页再次打开会自动跳转到首页 https://github.com/adlered/CSDNGreener/issues/97
  688. $("[onerror]").remove();
  689. // CSDN重定向外链不能在新的窗口跳转 https://github.com/adlered/CSDNGreener/issues/80
  690. $("#article_content a[href]").attr("target", "_blank");
  691. // 搜索框优化
  692. //$("#toolbar-search-input").css("width", "calc(100% - 400px)");
  693. // 取消代码折叠
  694. $(".look-more-preCode").click();
  695. // 询问推荐是否有意义的问卷调查
  696. $("#recommendNps").remove();
  697. // 绿化设置
  698. common(6, 1);
  699. // 屏幕适配
  700. common(4, 1);
  701. // 评论
  702. common(1, 30);
  703. // 其它
  704. common(2, 20);
  705. // 顶部显示作者信息
  706. common(8, 1);
  707. // 博客及主页优化
  708. common(9, 10);
  709. // 循环线程开始
  710. loop(2);
  711. loop(3);
  712. } else if (bbs.test(currentURL)) {
  713. l("正在优化论坛体验...");
  714. // 常规
  715. // 评论嵌入小广告
  716. put(".post_recommend");
  717. // 底部推荐
  718. put("#post_feed_wrap");
  719. // 底部相关文章里面的广告
  720. put(".bbs_feed_ad_box");
  721. put(".recommend-ad-box");
  722. // 底部相关文字里面的热词提示
  723. put(".type_hot_word");
  724. // 底部蓝色flex属性的广告栏+登录注册框
  725. put(".pulllog-box");
  726. // 猜你喜欢
  727. put(".personalized-recommend-box");
  728. // 发帖减半提示
  729. put(".totast-box");
  730. // 顶部广告
  731. put(".recommend-right");
  732. // 顶部广告
  733. put(".ad_top");
  734. // 右侧广告
  735. put(".ad_1");
  736. clean(10);
  737. // 展开
  738. common(3, 50);
  739. // common(5, 10);
  740. loop(3);
  741. } else if (download.test(currentURL)) {
  742. l("正在优化下载页体验...");
  743. // 常规
  744. put(".fixed_dl");
  745. put("indexSuperise");
  746. // 右侧推荐
  747. put(".content_recom");
  748. clean(10);
  749. // common(5, 10);
  750. loop(3);
  751. } else if (login.test(currentURL)) {
  752. l("正在优化登录页体验...");
  753. // 常规
  754. // 登录界面大图广告
  755. put(".main-tu");
  756. clean(10);
  757. // common(5, 10);
  758. loop(3);
  759. } else if (zone.test(currentURL)) {
  760. l("正在优化个人空间体验...");
  761. // 常规
  762. clean(10);
  763. common(7, 10);
  764. // common(5, 10);
  765. loop(3);
  766. } else if (blink.test(currentURL)) {
  767. l("正在优化个人动态体验...");
  768. } else if (link.test(currentURL)) {
  769. // 跳过 CSDN 的 link 页面
  770. var url = new URL(window.location.href)
  771. var target = url.searchParams.get('target')
  772. window.location.href = target
  773. } else {
  774. l("哦豁,好偏门的页面,我来试着优化一下哦...");
  775. // 常规
  776. // 展开全文
  777. $('.readmore_btn').click();
  778. // *** index ***
  779. // 头部广告
  780. put(".banner-ad-box");
  781. // 嵌入广告
  782. put("#kp_box_211");
  783. // 右侧广告
  784. put(".slide-outer");
  785. // 右侧详情
  786. put(".persion_article");
  787. // 右侧推荐
  788. $(".feed_company").parent().remove();
  789. // *** article ***
  790. // 常规
  791. // 右侧广告,放到第一个清除
  792. put("#addAdBox");
  793. put(".recommend-top-adbox");
  794. // 快来写博客吧
  795. put(".blog_tip_box");
  796. // 推荐关注用户
  797. put(".blog-expert-recommend-box");
  798. // 右下角VIP
  799. put(".meau-gotop-box");
  800. // 广告
  801. put(".mediav_ad");
  802. put(".pulllog-box");
  803. put(".recommend-ad-box");
  804. //put(".box-shadow"); 某些页面异常,例如cloud.csdn.net
  805. put(".type_hot_word");
  806. put(".fourth_column");
  807. // cloud.csdn.net 头部广告
  808. put("#kp_box_118");
  809. // 广告
  810. put("#asideFooter");
  811. put("#ad-div");
  812. put("#479");
  813. put("#480");
  814. // 打赏
  815. put(".postTime");
  816. // 课程推荐
  817. put(".t0");
  818. // 分享海报
  819. put(".shareSuggest");
  820. // 底部主题
  821. put(".template-box");
  822. // 评论区广告
  823. put("div#dmp_ad_58");
  824. // 打赏
  825. put(".reward-user-box");
  826. // 右侧打赏按钮
  827. put(".to-reward");
  828. // 推荐内容广告
  829. put(".recommend-recommend-box");
  830. // 右侧广告
  831. put(".indexSuperise");
  832. // 抢沙发角标
  833. put(".comment-sofa-flag");
  834. // 页jio
  835. put(".bottom-pub-footer");
  836. // 登录查看未读消息
  837. put(".toolbar-notice-bubble");
  838. // 右侧广告
  839. put(".recommend-top-adbox");
  840. // 学院弹出广告
  841. $(".fouce_close_btn").click();
  842. // 其它
  843. // 头部广告
  844. put(".banner-ad-box");
  845. // 右侧广告
  846. put(".slide-outer");
  847. // 右侧详情
  848. put(".persion_article");
  849. // 左侧广告
  850. put("#kp_box_503");
  851. put("#kp_box_214");
  852. // *** bbs ***
  853. // 评论嵌入小广告
  854. put(".post_recommend");
  855. // 底部推荐
  856. put("#post_feed_wrap");
  857. // 底部相关文章里面的广告
  858. put(".bbs_feed_ad_box");
  859. put(".recommend-ad-box");
  860. // 底部相关文字里面的热词提示
  861. put(".type_hot_word");
  862. // 底部蓝色flex属性的广告栏+登录注册框
  863. put(".pulllog-box");
  864. // 猜你喜欢
  865. put(".personalized-recommend-box");
  866. // 发帖减半提示
  867. put(".totast-box");
  868. // 顶部广告
  869. put(".recommend-right");
  870. // 顶部广告
  871. put(".ad_top");
  872. // *** download ***
  873. put(".fixed_dl");
  874. put("indexSuperise");
  875. // 右侧推荐
  876. put(".content_recom");
  877. clean(10);
  878. }
  879. setTimeout(function() {
  880. progressor.done();
  881. }, 0);
  882. stopTimeMilli = Date.now();
  883. l("优化完毕! 耗时 " + (stopTimeMilli - startTimeMilli) + "ms");
  884. }, 0);
  885. })();
  886.  
  887. function l(log) {
  888. console.log("[CSDNGreener] " + log);
  889. }
  890.  
  891. function e(error) {
  892. console.error("[CSDNGreener] " + error);
  893. }
  894.  
  895. function clear() {
  896. list = [];
  897. }
  898.  
  899. function put(tag) {
  900. list.push(tag);
  901. }
  902.  
  903. function clean(times) {
  904. var loop = setInterval(function () {
  905. --times;
  906. if (times <= 0) {
  907. clearInterval(loop);
  908. }
  909. for (var k = 0; k < list.length; k++) {
  910. $(list[k]).remove();
  911. }
  912. }, 100);
  913. progressor.incProgress(10);
  914. }
  915.  
  916. var deletedLogin = false;
  917.  
  918. function loop(num) {
  919. setInterval(function () {
  920. if (num === 1) {
  921. // 主页中间的广告
  922. $(".J_adv").remove();
  923. // 主页有新的内容横条
  924. $(".feed-fix-box").remove();
  925. // 主页广告 iframe
  926. if (currentURL == "https://www.csdn.net/") {
  927. $("iframe").remove();
  928. }
  929. // 删除 CSDN 官方在主页的文章(大多是广告)
  930. $("li.clearfix").each(function(index, ele) {
  931. var banned = /csdn<\/a>/;
  932. var aMark = $(ele).find(".name").html();
  933. if (banned.test(aMark)) {
  934. $(ele).remove();
  935. }
  936. });
  937. // 主页广告
  938. $("li").each(function(){
  939. let self = $(this);
  940. let dataType = self.attr('data-type');
  941. if (dataType === 'ad') {
  942. self.remove();
  943. }
  944. });
  945. // 主页广告
  946. $("li > div > div > h2 > a[href*='https://edu.csdn.net']").parent().parent().parent().parent().remove();
  947. $("li > div > div > h2 > a[href*='https://marketing.csdn.net']").parent().parent().parent().parent().remove();
  948. // 官方脚本横幅
  949. $(".toolbar-advert").remove();
  950. } else if (num === 2) {
  951. // 评论查看更多展开监听
  952. $("div.comment-list-box").css("max-height", "none");
  953. // 屏蔽您的缩放不是100%的提示
  954. $('.leftPop').remove();
  955. // 官方脚本横幅
  956. $(".toolbar-advert").remove();
  957. } else if (num == 3) {
  958. // 循环删除登录提示框
  959. if ($($(".passport-login-container")[0]).length == 1 && deletedLogin == false) {
  960. let passInterval = setInterval(function() {
  961. $('.passport-login-container').hide();
  962. console.log("hide");
  963. }, 10);
  964. setTimeout(function() {
  965. clearInterval(passInterval);
  966. setTimeout(function() {
  967. $("#passportbox").find("img").click();
  968. }, 500)
  969. }, 5000);
  970. deletedLogin = true;
  971. }
  972. // 红包雨
  973. $("#csdn-redpack").remove();
  974. }
  975. }, 500);
  976. }
  977.  
  978. function common(num, times) {
  979. var loop = setInterval(function () {
  980. --times;
  981. if (times <= 0) {
  982. clearInterval(loop);
  983. }
  984. if (num === 1) {
  985. // 查看更多
  986. $(".btn-readmore").removeClass("no-login");
  987. $(".btn-readmore").addClass("fans-read-more");
  988. $(".btn-readmore").removeAttr("href");
  989. $(".btn-readmore").removeAttr("target");
  990. $(".btn-readmore").removeAttr("rel");
  991. $(".btn-readmore").click();
  992. // 已登录用户展开评论
  993. try {
  994. document.getElementById("btnMoreComment").click();
  995. } catch (e) {}
  996. // 删除查看更多按钮
  997. $("#btnMoreComment").parent("div.opt-box").remove();
  998. // 展开内容
  999. $("div.comment-list-box").css("max-height", "none");
  1000. // 改回背景颜色
  1001. $(".login-mark").remove();
  1002. // 删除登录框
  1003. $(".login-box").remove();
  1004. } else if (num === 2) {
  1005. // 挡住评论的“出头推荐”
  1006. if ($(".recommend-box").length > 1) {
  1007. $(".recommend-box")[0].remove();
  1008. }
  1009. // 去除推广广告
  1010. $("li[data-type='ad']").remove();
  1011. // 免登录复制
  1012. $(".hljs-button").removeClass("signin");
  1013. $(".hljs-button").addClass("{2}");
  1014. $(".hljs-button").attr("data-title", "免登录复制");
  1015. $(".hljs-button").attr("onclick", "hljs.copyCode(event);setTimeout(function(){$('.hljs-button').attr('data-title', '免登录复制');},3500);");
  1016. $("#content_views").unbind("copy");
  1017. // 去除剪贴板劫持
  1018. $("code").attr("onclick", "mdcp.copyCode(event)");
  1019. try {
  1020. // 复制时保留原文格式,参考 https://greasyfork.org/en/scripts/390502-csdnremovecopyright/code
  1021. Object.defineProperty(window, "articleType", {
  1022. value: 0,
  1023. writable: false,
  1024. configurable: false
  1025. });
  1026. } catch (err) {
  1027. }
  1028. csdn.copyright.init("", "", "");
  1029. // 页头广告
  1030. try {
  1031. document.getElementsByClassName("column-advert-box")[0].style.display="none";
  1032. } catch (e) {}
  1033. // 自动检测是否有目录,如果没有则删除右边栏,文章居中
  1034. if ($(".recommend-right_aside").html() && $(".recommend-right_aside").html().replace(/[\r\n]/g, "").replace(/(\s)/g, "") === "") {
  1035. $("#rightAside").remove();
  1036. } else if ($(".recommend-right_aside").html() && $("#recommend-right").html().replace(/[\r\n]/g, "").replace(/(\s)/g, "") === "") {
  1037. $("#rightAside").remove();
  1038. }
  1039. // 登录按钮文字太多,修改
  1040. $("a").each(function() {
  1041. if ($(this).attr('href') === 'https://passport.csdn.net/account/login') {
  1042. $(this).html('登入');
  1043. }
  1044. });
  1045. // 顶栏广告
  1046. $("li").each(function(){
  1047. let self = $(this);
  1048. let dataType = self.attr('data-sub-menu-type');
  1049. if (dataType === 'vip') {
  1050. self.remove();
  1051. }
  1052. let dataTitle = self.attr('title');
  1053. if (dataTitle === '高价值源码课程分享' || dataTitle === '系统学习·问答·比赛' || dataTitle === '简单高效优惠的云服务') {
  1054. self.remove();
  1055. }
  1056. });
  1057. // 顶栏VIP选项
  1058. $('.toolbar-subMenu-box').find("[href='https://mall.csdn.net/vip']").parent().remove();
  1059. } else if (num == 3) {
  1060. //论坛自动展开
  1061. $(".js_show_topic").click();
  1062. } else if (num == 4) {
  1063. /** 配置控制 **/
  1064. let config = new Config();
  1065. let smCookie = config.get("scr-sm", true);
  1066. let mdCookie = config.get("scr-md", false);
  1067. let lgCookie = config.get("scr-lg", false);
  1068. let foCookie = config.get("scr-fo", false)
  1069.  
  1070. $("#scr-sm").prop("checked", smCookie);
  1071. $("#scr-md").prop("checked", mdCookie);
  1072. $("#scr-lg").prop("checked", lgCookie);
  1073. $("#scr-fo").prop("checked", foCookie);
  1074.  
  1075. if (smCookie) {
  1076. // Small Screen Mode
  1077. $(".main_father").removeClass("justify-content-center");
  1078. GM_addStyle(`
  1079. main{
  1080. width: auto!important;
  1081. float: none!important;
  1082. max-width: 90vw;
  1083. }
  1084. main article img{
  1085. margin: 0 auto;
  1086. max-width: 100%;
  1087. object-fit: cover;
  1088. }
  1089. `);
  1090. $("#mainBox").css("width", "100%");
  1091. } else if (mdCookie) {
  1092. // Middle Screen Mode
  1093. $(".main_father").removeClass("justify-content-center");
  1094. } else if (lgCookie) {
  1095. // Large Screen Mode
  1096. $(".container").css("margin", "0 auto")
  1097. } else if (foCookie) {
  1098. // Focus mode
  1099. $(".recommend-right").remove();
  1100. $(".container").css("width", "100%");
  1101. $(".container > main").css("width", "100%");
  1102. }
  1103.  
  1104. // 屏幕尺寸单选监听
  1105. $("#scr-sm").click(function () {
  1106. new Config().set("scr-sm", true);
  1107. new Config().set("scr-md", false);
  1108. new Config().set("scr-lg", false);
  1109. new Config().set("scr-fo", false);
  1110. });
  1111. $("#scr-md").click(function () {
  1112. new Config().set("scr-md", true);
  1113. new Config().set("scr-sm", false);
  1114. new Config().set("scr-lg", false);
  1115. new Config().set("scr-fo", false);
  1116. });
  1117. $("#scr-lg").click(function () {
  1118. new Config().set("scr-lg", true);
  1119. new Config().set("scr-sm", false);
  1120. new Config().set("scr-md", false);
  1121. new Config().set("scr-fo", false);
  1122. });
  1123. $("#scr-fo").click(function () {
  1124. new Config().set("scr-fo", true);
  1125. new Config().set("scr-sm", false);
  1126. new Config().set("scr-md", false);
  1127. new Config().set("scr-lg", false);
  1128. });
  1129. // 判断是否为登录状态
  1130. if ($('.toolbar-btn-loginfun').text() === '登录') {
  1131. // 未登录删除无用按钮
  1132. $("a:contains('消息')").parent().parent()[0].remove();
  1133. $(".toolbar-btn-collect").remove();
  1134. $(".toolbar-btn-write").remove();
  1135. $(".toolbar-btn-mp").remove();
  1136. }
  1137. $("a:contains('会员12.12')").parent().remove();
  1138. $(".toolbar-btn-vip").remove();
  1139. } else if (num == 5) {
  1140. // 改回背景颜色
  1141. $(".login-mark").remove();
  1142. // 删除登录框
  1143. $(".login-box").remove();
  1144. } else if (num == 6) {
  1145. let did = false;
  1146. let configHTML = '';
  1147. configHTML += '<div class="configContainer"><p><a class="title" href="https://github.com/adlered/CSDNGreener" target="_blank">CSDNGreener</a> <sup>V' + version + ' ' + settings_svg + '</sup></p>';
  1148. configHTML += '<p><a href="//shang.qq.com/wpa/qunwpa?idkey=d7ad6ead3f57722e7f00a4281ae75dbac2132c5a8cf321992d57309037fcaf63" target="_blank">官方 QQ 交流群:1042370453</a></p><br>';
  1149.  
  1150. // 设定:推荐内容按钮
  1151. configHTML += '<p class="bold">根据屏幕尺寸,适配版式</p><p>建议逐个尝试后选择适合你的版式,屏幕过小或者版式选择不正确右侧栏可能没有空间显示,导致侧栏定制无效(请尝试调节浏览器缩放,快捷键 Ctrl+鼠标滚轮)。</p>';
  1152. configHTML += '<label><input name="displayMode" type="radio" value="" id="scr-sm" /> 平铺模式(优化版) </label>';
  1153. configHTML += '<label><input name="displayMode" type="radio" value="" id="scr-md" /> 适应模式 </label>';
  1154. configHTML += '<label><input name="displayMode" type="radio" value="" id="scr-lg" /> 居中模式 </label>';
  1155. configHTML += '<label><input name="displayMode" type="radio" value="" id="scr-fo" /> 沉浸模式(无侧栏)</label>';
  1156. configHTML += '<hr style="height:1px;border:none;border-top:1px solid #cccccc;margin: 5px 0px 5px 0px;" />';
  1157. configHTML += '<p class="bold">通用设定</p>';
  1158. configHTML += '<p>自定义背景图: <input type="text" id="backgroundImgUrl" placeholder="图片所在网址或Base64" style="border-radius: 2px;border: 1px solid #f0f0f0;padding:5px;width:100%;margin-bottom:5px;"> <input style="margin-bottom:5px;" accept="image/*" id="upload_bg" type="file"></p>';
  1159. configHTML += '<input type="checkbox" id="toggle-recommend-button"> <label for="toggle-recommend-button" class="modeLabel">显示推荐内容</label>';
  1160. configHTML += '<br>';
  1161. configHTML += '<input type="checkbox" id="toggle-shop-button"> <label for="toggle-shop-button" class="modeLabel">显示小店</label>';
  1162. configHTML += '<br>';
  1163. configHTML += '<input type="checkbox" id="toggle-whitetheme-button"> <label for="toggle-whitetheme-button" class="modeLabel">白色主题&Dark Reader兼容模式<br><span style="color: #808080;"># 选项作用:开启后可通过Dark Reader插件灵活控制白色与黑暗模式,<a style="color: green;" href="https://chrome.zzzmh.cn/info?token=eimadpbcbfnmbkopoojfekhnkhdbieeh" target="_blank">插件下载地址点我</a></span></label>';
  1164. configHTML += '<br>';
  1165. configHTML += '<input type="checkbox" id="toggle-autosize-button"> <label for="toggle-autosize-button" class="modeLabel">宽度自动适应<br><span style="color: #808080;"># 选项作用:开启此选项可以在页面宽度缩小时自动切换至小屏模式</span></label>';
  1166. configHTML += '<br>';
  1167. configHTML += '<input type="checkbox" id="toggle-autohidetoolbar-button"> <label for="toggle-autohidetoolbar-button" class="modeLabel">向下滚动自动隐藏顶栏</label>';
  1168. configHTML += '<br>';
  1169. configHTML += '<input type="checkbox" id="toggle-autohidebottombar-button"> <label for="toggle-autohidebottombar-button" class="modeLabel">始终隐藏底栏</label>';
  1170. configHTML += '<br>';
  1171. configHTML += '<input type="checkbox" id="toggle-writeblog-button"> <label for="toggle-writeblog-button" class="modeLabel">显示发布按钮</label>';
  1172. configHTML += '<br>';
  1173. configHTML += '<hr style="height:1px;border:none;border-top:1px solid #cccccc;margin: 5px 0px 5px 0px;" />';
  1174. configHTML += '<p class="bold"><b>右侧栏定制</b></p>';
  1175. configHTML += '<input type="checkbox" id="toggle-ad-button"> <label for="toggle-ad-button" class="modeLabel">显示来自脚本的小广告(暂无)</label>';
  1176. configHTML += '<br>';
  1177. configHTML += '<input type="checkbox" id="toggle-authorcard-button"> <label for="toggle-authorcard-button" class="modeLabel">显示作者名片</label>';
  1178. configHTML += '<br>';
  1179. configHTML += '<input type="checkbox" id="toggle-searchblog-button"> <label for="toggle-searchblog-button" class="modeLabel">显示搜博主文章</label>';
  1180. configHTML += '<br>';
  1181. configHTML += '<input type="checkbox" id="toggle-newarticle-button"> <label for="toggle-newarticle-button" class="modeLabel">显示最新文章</label>';
  1182. configHTML += '<br>';
  1183. configHTML += '<input type="checkbox" id="toggle-hotarticle-button"> <label for="toggle-hotarticle-button" class="modeLabel">显示热门文章</label>';
  1184. configHTML += '<br>';
  1185. configHTML += '<input type="checkbox" id="toggle-newcomments-button"> <label for="toggle-newcomments-button" class="modeLabel">显示最新评论</label>';
  1186. configHTML += '<br>';
  1187. configHTML += '<input type="checkbox" id="toggle-kindperson-button"> <label for="toggle-kindperson-button" class="modeLabel">显示分类专栏</label>';
  1188. configHTML += '<br>';
  1189. configHTML += '<input type="checkbox" id="toggle-recommendarticle-button"> <label for="toggle-recommendarticle-button" class="modeLabel">显示推荐文章</label>';
  1190. configHTML += '<br>';
  1191. configHTML += '<input type="checkbox" id="toggle-archive-button"> <label for="toggle-archive-button" class="modeLabel">显示归档</label>';
  1192. configHTML += '<br>';
  1193. configHTML += '<input type="checkbox" id="toggle-content-button"> <label for="toggle-content-button" class="modeLabel">显示目录</label>';
  1194. configHTML += '<br><br>';
  1195. configHTML += '<div><b>要不要来看看 :)</b><p>(作者本人建设的社区~</p><p>社区中聚集了同行业的大佬小白,欢迎小伙伴们一起摸鱼!</p><a href="https://fishpi.cn" target="_blank"><img src="https://s2.loli.net/2022/01/05/1HpBZUraMcR8ist.png" style="width:100%;height:100%;"/></a></div>';
  1196. configHTML += '<br><a href="https://doc.stackoverflow.wiki/web/#/21?page_id=138" target="_blank" class="giveMeOneStar">☕ 如果您觉得脚本好用,欢迎请我喝杯咖啡,我将努力更新脚本功能 ❤️</a><br>';
  1197. configHTML += '<a href="https://github.com/adlered/CSDNGreener" target="_blank" class="giveMeOneStar">' + star_svg + ' <b>点我~</b> 动动小手在 GitHub 点个 Star 和关注,支持我继续维护脚本 :)</a><br><br>';
  1198. configHTML += '<p>特别提示:CSDNGreener 脚本不提供任何会员文章破解、会员资源下载功能,仅适用于前端优化,请在CSDN官方渠道购买CSDN会员体验付费功能。</p>';
  1199. configHTML += '<hr style="height:1px;border:none;border-top:1px solid #cccccc;margin: 5px 0px 5px 0px;" />';
  1200. configHTML += '<br>';
  1201.  
  1202. // configHTML += '<a href="https://doc.stackoverflow.wiki/web/#/21?page_id=138" target="_blank" style="margin-top: 5px; display: block;">' + donate_svg + ' 我是老板,投币打赏</a>';
  1203. configHTML += '</div></div><div id="fade" class="black_overlay"></div>';
  1204. let saveButton = '<button class="saveButton" style="position: sticky;top: 5px;left: calc(100% - 80px);" onclick="saveAndReload();">' + save_svg + ' 应用</button>';
  1205. // 绿化器设定
  1206. $("body").after('<div id="configContent" class="white_content">' + saveButton + configHTML);
  1207.  
  1208. /** 配置控制 **/
  1209. // 推荐内容
  1210. $(".blog-content-box").append("<br><div class='blog-content-box' id='recommendSwitch' style='text-align: right;'></div>");
  1211. $("#recommendSwitch:last").append('<input type="checkbox" id="toggle-button"> <label for="toggle-button" class="button-label"> <span class="circle"></span> <span class="text on">&nbsp;</span> <span class="text off">&nbsp;</span> </label>' +
  1212. '<p style="margin-top: 5px; font-size: 13px;">显示推荐内容</p>');
  1213. let recommendCookie = config.get("recommend", false);
  1214. if (!recommendCookie) {
  1215. $(".recommend-box").hide();
  1216. }
  1217. if (recommendCookie) {
  1218. $("#toggle-recommend-button").prop("checked", true);
  1219. $("#toggle-button").prop("checked", true);
  1220. } else {
  1221. $("#toggle-recommend-button").prop("checked", false);
  1222. $("#toggle-button").prop("checked", false);
  1223. }
  1224. config.listenButton("#toggle-recommend-button", "recommend",
  1225. function() {$(".recommend-box").slideDown(200);},
  1226. function() {$(".recommend-box").slideUp(200);});
  1227. config.listenButtonAndAction("#toggle-button", "recommend",
  1228. function() {$(".recommend-box").slideDown(200);},
  1229. function() {$(".recommend-box").slideUp(200);});
  1230.  
  1231. // 显示小店
  1232. let shopCookie = config.get('shop',false);
  1233. if(!shopCookie){
  1234. $("#csdn-shop-window").hide();
  1235. $("#csdn-shop-window-top").hide();
  1236. }
  1237. if (shopCookie) {
  1238. $("#toggle-shop-button").prop("checked", true);
  1239. } else {
  1240. $("#toggle-shop-button").prop("checked", false);
  1241. }
  1242. config.listenButton("#toggle-shop-button", "shop",
  1243. function() {location.reload();},
  1244. function() {location.reload();});
  1245. // 侧栏小广告
  1246. let adCookie = config.get("ad", true);
  1247. if (adCookie) {
  1248. setTimeout(function() {
  1249. // $("#recommend-right").append('<div id="asideArchive" class="aside-box" style="margin-top: 8px; width: 300px; display:block !important;"><h3 class="aside-title">来自 CSDN 脚本的小广告</h3><div class="aside-content"><ul class="inf_list clearfix"><li class="clearfix"><b>您可在 <a onclick="showConfig()" style="display: inline-block;">脚本设置</a> 中永久关闭小广告<br>感谢您的支持 ❤️</b><br><p style="font-size: 4px;margin-top: 10px;"><b>29元每月!</b>CTGNet GIA 回程五网高端CN2 GIA/GT网络,支持VPC高级网络<br>拒绝绕路,拒绝不稳定,助力企业拓展全球业务<br>安全,稳定,高性能</p></li><li class="clearfix"><a href="https://www.tsyvps.com/aff/HEHTPGYL" target="_blank"><img src="https://www.tsyvps.com/img/gg.png" style="width: 265px;height:149px"></a></li></ul></div></div>');
  1250. }, 500);
  1251. }
  1252. if (adCookie) {
  1253. $("#toggle-ad-button").prop("checked", true);
  1254. } else {
  1255. $("#toggle-ad-button").prop("checked", false);
  1256. }
  1257. config.listenButton("#toggle-ad-button", "ad",
  1258. function() {location.reload();},
  1259. function() {location.reload();});
  1260. // 显示作者名片
  1261. let authorCardCookie = config.get("authorCard", true);
  1262. if (authorCardCookie) {
  1263. // 博主信息
  1264. $('#recommend-right').append($('#asideProfile').prop("outerHTML"));
  1265. setTimeout(function() {
  1266. $('#asideProfile').attr("style", "margin-top: 8px; width: 300px;");
  1267. }, 500);
  1268. }
  1269. if (authorCardCookie) {
  1270. $("#toggle-authorcard-button").prop("checked", true);
  1271. } else {
  1272. $("#toggle-authorcard-button").prop("checked", false);
  1273. }
  1274. config.listenButton("#toggle-authorcard-button", "authorCard",
  1275. function() {location.reload();},
  1276. function() {location.reload();});
  1277.  
  1278. // 强制白色主题
  1279. let whiteThemeCookie = config.get("whiteTheme", false);
  1280. if (whiteThemeCookie) {
  1281. // 背景删除
  1282. $('.main_father').attr('style', 'background-image: none !important; background-color: #f5f6f7; background: #f5f6f7;');
  1283. $('[href^="https://csdnimg.cn/release/phoenix/template/themes_skin/"]').attr('href', 'https://csdnimg.cn/release/phoenix/template/themes_skin/skin-technology/skin-technology-6336549557.min.css');
  1284. $('#csdn-toolbar').removeClass('csdn-toolbar-skin-black');
  1285. $('.csdn-logo').attr('src', '//csdnimg.cn/cdn/content-toolbar/csdn-logo.png?v=20200416.1');
  1286. $('html').css('background-color', '#f5f6f7');
  1287. }
  1288. if (whiteThemeCookie) {
  1289. $("#toggle-whitetheme-button").prop("checked", true);
  1290. } else {
  1291. $("#toggle-whitetheme-button").prop("checked", false);
  1292. }
  1293. config.listenButton("#toggle-whitetheme-button", "whiteTheme",
  1294. function() {location.reload();},
  1295. function() {location.reload();});
  1296.  
  1297. // 背景图
  1298. let backgroundImage = GM_getValue("backgroundImage", "");
  1299. if (backgroundImage !== "") {
  1300. $("#backgroundImgUrl").val(backgroundImage);
  1301. $(".main_father").attr('style', 'background-image:url(' + backgroundImage + ');background-attachment:fixed;background-size:100%;');
  1302. }
  1303. $('#backgroundImgUrl').on('input', function() {
  1304. GM_setValue("backgroundImage", $("#backgroundImgUrl").val());
  1305. });
  1306. $('#backgroundImgUrl').on('change', function() {
  1307. GM_setValue("backgroundImage", $("#backgroundImgUrl").val());
  1308. });
  1309. $("#upload_bg").on('change', function() {
  1310. let file = $("#upload_bg")[0].files[0];
  1311. let reader = new FileReader();
  1312. reader.onloadend = function (e) {
  1313. let base64 = e.target.result;
  1314. $('#backgroundImgUrl').val(base64);
  1315. $('#backgroundImgUrl').change();
  1316. }
  1317. reader.readAsDataURL(file);
  1318. });
  1319.  
  1320. // 搜博主文章
  1321. let searchBlogCookie = config.get("searchBlog", false);
  1322. if(searchBlogCookie) {
  1323. $('#recommend-right').append($('#asideSearchArticle').prop("outerHTML"));
  1324. setTimeout(function() {
  1325. $('#asideSearchArticle').attr("style", "margin-top: 8px; width: 300px;");
  1326. var i = $("#search-blog-words")
  1327. , n = $(".btn-search-blog");
  1328. i.keyup(function(t) {
  1329. var n = t.keyCode;
  1330. if (13 == n) {
  1331. var e = encodeURIComponent(i.val());
  1332. if (e) {
  1333. var s = "//so.csdn.net/so/search/s.do?q=" + e + "&t=blog&u=" + username;
  1334. window.open(s)
  1335. }
  1336. }
  1337. });
  1338. n.on("click", function(t) {
  1339. var n = encodeURIComponent(i.val());
  1340. if (n) {
  1341. var e = "//so.csdn.net/so/search/s.do?q=" + n + "&t=blog&u=" + username;
  1342. window.open(e)
  1343. }
  1344. t.preventDefault()
  1345. });
  1346. }, 500);
  1347. }
  1348. if (searchBlogCookie) {
  1349. $("#toggle-searchblog-button").prop("checked", true);
  1350. } else {
  1351. $("#toggle-searchblog-button").prop("checked", false);
  1352. }
  1353. config.listenButton("#toggle-searchblog-button", "searchBlog",
  1354. function() {location.reload();},
  1355. function() {location.reload();});
  1356.  
  1357. // 最新文章
  1358. let newArticleCookie = config.get("newArticle", false);
  1359. if (newArticleCookie) {
  1360. $('#recommend-right').append($('#asideNewArticle').prop("outerHTML"));
  1361. setTimeout(function() {
  1362. $('#asideNewArticle').attr("style", "margin-top: 8px; width: 300px;");
  1363. }, 0);
  1364. }
  1365. if (newArticleCookie) {
  1366. $("#toggle-newarticle-button").prop("checked", true);
  1367. } else {
  1368. $("#toggle-newarticle-button").prop("checked", false);
  1369. }
  1370. config.listenButton("#toggle-newarticle-button", "newArticle",
  1371. function() {location.reload();},
  1372. function() {location.reload();});
  1373.  
  1374. // 热门文章
  1375. let hotArticleCookie = config.get("hotArticle", false);
  1376. if (hotArticleCookie) {
  1377. $('#recommend-right').append($("#asideHotArticle").prop("outerHTML"));
  1378. setTimeout(function() {
  1379. $('#asideHotArticle').attr("style", "margin-top: 8px; width: 300px;");
  1380. $('#asideHotArticle img').remove();
  1381. }, 0);
  1382. }
  1383. if (hotArticleCookie) {
  1384. $("#toggle-hotarticle-button").prop("checked", true);
  1385. } else {
  1386. $("#toggle-hotarticle-button").prop("checked", false);
  1387. }
  1388. config.listenButton("#toggle-hotarticle-button", "hotArticle",
  1389. function() {location.reload();},
  1390. function() {location.reload();});
  1391.  
  1392. // 最新评论
  1393. let newCommentsCookie = config.get("newComments", false);
  1394. if (newCommentsCookie) {
  1395. $('#recommend-right').append($("#asideNewComments").prop("outerHTML"));
  1396. setTimeout(function() {
  1397. $('#asideNewComments').attr("style", "margin-top: 8px; width: 300px;");
  1398. $(".comment.ellipsis").attr("style", "max-height: none;");
  1399. $(".title.text-truncate").attr("style", "padding: 0");
  1400. }, 0);
  1401. }
  1402. if (newCommentsCookie) {
  1403. $("#toggle-newcomments-button").prop("checked", true);
  1404. } else {
  1405. $("#toggle-newcomments-button").prop("checked", false);
  1406. }
  1407. config.listenButton("#toggle-newcomments-button", "newComments",
  1408. function() {location.reload();},
  1409. function() {location.reload();});
  1410.  
  1411. // 分类专栏
  1412. let kindPersonCookie = config.get("kindPerson", false);
  1413. if (!kindPersonCookie) {
  1414. setTimeout(function() {
  1415. $('#asideCategory').remove();
  1416. $('.kind_person').remove();
  1417. }, 0);
  1418. } else {
  1419. $('#recommend-right').append($("#asideCategory").prop("outerHTML"));
  1420. if ($("#asideCategory").length > 0) {
  1421. $('.kind_person').remove();
  1422. } else {
  1423. $('.kind_person').attr("style", "margin-top: 8px; width: 300px; height:255px;");
  1424. }
  1425. setTimeout(function() {
  1426. $('#asideCategory').attr("style", "margin-top: 8px; width: 300px; display:block !important;");
  1427. $("a.flexible-btn").click(function() {
  1428. $(this).parents('div.aside-box').removeClass('flexible-box');
  1429. $(this).parents("p.text-center").remove();
  1430. })
  1431. }, 500);
  1432. }
  1433. if (kindPersonCookie) {
  1434. $("#toggle-kindperson-button").prop("checked", true);
  1435. } else {
  1436. $("#toggle-kindperson-button").prop("checked", false);
  1437. }
  1438. config.listenButton("#toggle-kindperson-button", "kindPerson",
  1439. function() {location.reload();},
  1440. function() {location.reload();});
  1441.  
  1442. // 目录
  1443. let contentCookie = config.get("content", true);
  1444. if (!contentCookie) {
  1445. setTimeout(function() {
  1446. $('.align-items-stretch.group_item').parent().remove();
  1447. }, 0);
  1448. }
  1449. if (contentCookie) {
  1450. $("#toggle-content-button").prop("checked", true);
  1451. } else {
  1452. $("#toggle-content-button").prop("checked", false);
  1453. }
  1454. config.listenButton("#toggle-content-button", "content",
  1455. function() {location.reload();},
  1456. function() {location.reload();});
  1457.  
  1458. // 推荐文章
  1459. let recommendArticleCookie = config.get("recommendArticle", false);
  1460. if (!recommendArticleCookie) {
  1461. setTimeout(function() {
  1462. $('.recommend-list-box').remove();
  1463. }, 0);
  1464. } else {
  1465. setTimeout(function() {
  1466. $('.recommend-list-box').attr("style", "margin-top: 8px; width: 300px; height:255px;");
  1467. }, 0);
  1468. }
  1469. if (recommendArticleCookie) {
  1470. $("#toggle-recommendarticle-button").prop("checked", true);
  1471. } else {
  1472. $("#toggle-recommendarticle-button").prop("checked", false);
  1473. }
  1474. config.listenButton("#toggle-recommendarticle-button", "recommendArticle",
  1475. function() {location.reload();},
  1476. function() {location.reload();});
  1477.  
  1478. // 归档
  1479. let archiveCookie = config.get("archive", false);
  1480. if (!archiveCookie) {
  1481. setTimeout(function() {
  1482. $('#asideArchive').remove();
  1483. }, 0);
  1484. } else {
  1485. $('#recommend-right').append($("#asideArchive").prop("outerHTML"));
  1486. setTimeout(function() {
  1487. $('#asideArchive').attr("style", "margin-top: 8px; width: 300px; display:block !important;");
  1488. }, 500);
  1489. }
  1490. if (archiveCookie) {
  1491. $("#toggle-archive-button").prop("checked", true);
  1492. } else {
  1493. $("#toggle-archive-button").prop("checked", false);
  1494. }
  1495. config.listenButton("#toggle-archive-button", "archive",
  1496. function() {location.reload();},
  1497. function() {location.reload();});
  1498.  
  1499. // 自动靠左平铺
  1500. let autoSizeCookie = config.get("autoSize", false);
  1501. if (autoSizeCookie) {
  1502. setInterval(function () {
  1503. // 文章宽度自适应
  1504. if (window.innerWidth < 1100) {
  1505. // 删除原有响应式样式
  1506. $(".main_father").removeClass("justify-content-center");
  1507. $("article").width(window.innerWidth - 150);
  1508. GM_addStyle(`
  1509. main{
  1510. width: auto!important;
  1511. float: none!important;
  1512. max-width: 90vw;
  1513. }
  1514. main article img{
  1515. margin: 0 auto;
  1516. max-width: 100%;
  1517. object-fit: cover;
  1518. }
  1519. `);
  1520. did = true;
  1521. } else {
  1522. if (did === true) {
  1523. $("article").removeAttr("style");
  1524. did = false;
  1525. }
  1526. }
  1527. }, 500);
  1528. }
  1529. if (autoSizeCookie) {
  1530. $("#toggle-autosize-button").prop("checked", true);
  1531. } else {
  1532. $("#toggle-autosize-button").prop("checked", false);
  1533. }
  1534. config.listenButton("#toggle-autosize-button", "autoSize",
  1535. function() {location.reload();},
  1536. function() {location.reload();});
  1537.  
  1538. // 自动隐藏顶栏
  1539. let autoHideToolbarCookie = config.get("autoHideToolbar", true);
  1540. if (autoHideToolbarCookie) {
  1541. $(window).scroll(function() {
  1542. if (document.documentElement.scrollTop > 100) {
  1543. let scrollS = $(this).scrollTop();
  1544. if (scrollS >= windowTop) {
  1545. $('#csdn-toolbar').slideUp(100);
  1546. windowTop = scrollS;
  1547. } else {
  1548. $('#csdn-toolbar').slideDown(100);
  1549. windowTop = scrollS;
  1550. }
  1551. }
  1552. });
  1553. }
  1554. if (autoHideToolbarCookie) {
  1555. $("#toggle-autohidetoolbar-button").prop("checked", true);
  1556. } else {
  1557. $("#toggle-autohidetoolbar-button").prop("checked", false);
  1558. }
  1559. config.listenButton("#toggle-autohidetoolbar-button", "autoHideToolbar",
  1560. function() {location.reload();},
  1561. function() {location.reload();});
  1562.  
  1563. // 自动隐藏底栏
  1564. let autoHideBottomBarCookie = config.get("autoHideBottomBar", true);
  1565. if (autoHideBottomBarCookie) {
  1566. $("#toolBarBox .left-toolbox").css({
  1567. position: "relative",
  1568. left: "0px",
  1569. bottom: "0",
  1570. width: $("#toolBarBox").width() + "px"
  1571. });
  1572. $(window).scroll(function() {
  1573. $("#toolBarBox .left-toolbox").css({
  1574. position: "relative",
  1575. left: "0px",
  1576. bottom: "0",
  1577. width: $("#toolBarBox").width() + "px"
  1578. })
  1579. });
  1580. }
  1581. if (autoHideBottomBarCookie) {
  1582. $("#toggle-autohidebottombar-button").prop("checked", true);
  1583. } else {
  1584. $("#toggle-autohidebottombar-button").prop("checked", false);
  1585. }
  1586. config.listenButton("#toggle-autohidebottombar-button", "autoHideBottomBar",
  1587. function() {location.reload();},
  1588. function() {location.reload();});
  1589.  
  1590. // 创作中心按钮
  1591. let writeBlogCookie = config.get("writeBlog", true);
  1592. if (!writeBlogCookie) {
  1593. $(".toolbar-btn-write").remove();
  1594. }
  1595. if (writeBlogCookie) {
  1596. $("#toggle-writeblog-button").prop("checked", true);
  1597. } else {
  1598. $("#toggle-writeblog-button").prop("checked", false);
  1599. }
  1600. config.listenButton("#toggle-writeblog-button", "writeBlog",
  1601. function() {location.reload();},
  1602. function() {location.reload();});
  1603.  
  1604. // 右侧滚动条
  1605. /** setTimeout(function () {
  1606. let rightSideHeight = 0;
  1607. let pageHeight = $(window).height();
  1608. rightSideHeight += getHeight($('.align-items-stretch.group_item').parent());
  1609. rightSideHeight += getHeight($("#asideProfile"));
  1610. rightSideHeight += getHeight($("#asideSearchArticle"));
  1611. rightSideHeight += getHeight($("#asideNewArticle"));
  1612. rightSideHeight += getHeight($("#asideHotArticle"));
  1613. rightSideHeight += getHeight($("#asideNewComments"));
  1614. rightSideHeight += getHeight($("#asideCategory"));
  1615. rightSideHeight += getHeight($("#asideArchive"));
  1616. console.debug("Right side total height: " + rightSideHeight);
  1617. console.debug("Page height: " + pageHeight);
  1618. if (rightSideHeight > pageHeight) {
  1619. $('#recommend-right').css("overflow", "scroll");
  1620. }
  1621. }, 1500); */
  1622. } else if (num === 7) {
  1623. $(".me_r")[1].remove();
  1624. } else if (num === 8) {
  1625. /* $(".article-bar-top").append("<br>");
  1626. $(".article-bar-top").append($(".aside-box-footerClassify").children("dd").html());
  1627. $("dl").each(function (index, element) {
  1628. var key = $(this).children("dt");
  1629. var value = $(this).children("dd").children("span");
  1630. if (key.html().indexOf("原创") != -1) {
  1631. key = $(this).children("dt").children("a")
  1632. value = $(this).children("dd").children("a").children("span");
  1633. addInfo(key, value);
  1634. } else
  1635. if (value.html() != undefined) {
  1636. addInfo(key, value);
  1637. }
  1638. } );
  1639. function addInfo(key, value) {
  1640. var bind = key.html() + "&nbsp;" + value.html() + "&nbsp;&nbsp;";
  1641. $(".article-bar-top").append(bind + " ");
  1642. } */
  1643. $(".blog_container_aside").remove();
  1644. $(".toolbox-left > .profile-attend").remove();
  1645.  
  1646. // 标题消息提醒去除
  1647. let title = document.title.replace(/^\(.*?\)/g, "");
  1648. document.title = title;
  1649. // 评论复制按钮
  1650. $('.comment-box').prepend('<button class="comment-hidden-text" style="display:none">COPY BUTTON</button>');
  1651. $('.new-opt-box.new-opt-box-bg').prepend('<a class="btn btn-report btn-copy" onclick="javascript:$(\'.comment-hidden-text\').attr(\'data-clipboard-text\',$(this).parent().parent().find(\'.new-comment\').text())">复制评论</a><span class="btn-bar"></span>');
  1652. $('.btn-copy').click(function() {
  1653. var clipboard = new ClipboardJS('.comment-hidden-text');
  1654. clipboard.on('success', function(e) {
  1655. console.info('Action:', e.action);
  1656. console.info('Text:', e.text);
  1657. console.info('Trigger:', e.trigger);
  1658. e.clearSelection();
  1659. $('.btn-copy').html('成功');
  1660. setTimeout(function() {
  1661. $('.btn-copy').html('复制评论');
  1662. }, 1000);
  1663. });
  1664. clipboard.on('error', function(e) {
  1665. console.error('Action:', e.action);
  1666. console.error('Trigger:', e.trigger);
  1667. $('.btn-copy').html('失败,请手动复制');
  1668. setTimeout(function() {
  1669. $('.btn-copy').html('复制评论');
  1670. }, 1000);
  1671. });
  1672. $(".comment-hidden-text").click();
  1673. clipboard.destroy();
  1674. });
  1675. } else if (num === 9) {
  1676. // 删除CSDN LOGO悬浮后的二维码
  1677. $(".toolbar-subMenu > img").parent().remove();
  1678. }
  1679. }, 100);
  1680. progressor.incProgress(10);
  1681. }
  1682.  
  1683. function showTips() {
  1684. var config = {
  1685. content: "欢迎使用 CSDNGreener,绿化设定按钮在这里!<br><a onclick='javascript:$(\".trips\").remove();'>好的,以后不再提示我</a>",
  1686. type: "html",
  1687. alignTo: ["bottom", "right"],
  1688. trigger: "show",
  1689. isclose: false,
  1690. color: ["#B2E281", "#B2E281"]
  1691. };
  1692. $("#greenerSettings").showTips(config);
  1693. }
  1694.  
  1695. function getHeight(element) {
  1696. let outerHeight = element.outerHeight();
  1697. if (outerHeight === null) {
  1698. return 0;
  1699. }
  1700. return outerHeight;
  1701. }
  1702.  
  1703. function isFirefox() {
  1704. return navigator.userAgent.indexOf("Firefox") > 0;
  1705. }