// ==UserScript==
// @name EasyCSDN
// @description 这是一款促进CSDN极致简洁和高效的插件。免费共享大量创新功能,如:净化页面、展示全屏、显示推荐、复制文本、展开代码等。让我们的学习体验无比简洁、专注、高效、畅快。
// @version 32.0
// @author xcanwin
// @namespace https://github.com/xcanwin/EasyCSDN/
// @supportURL https://github.com/xcanwin/EasyCSDN/
// @license GPL-2.0-only
// @match *://blog.csdn.net/*/article/details/*
// @match *://*.blog.csdn.net/article/details/*
// @grant GM_addStyle
// @run-at document-start
// ==/UserScript==
(function() {
'use strict';
const $ = (Selector, el) => (el || document).querySelector(Selector);
const $$ = (Selector, el) => (el || document).querySelectorAll(Selector);
/*电脑端净化样式*/
const purify_style_pc = `
.passport-login-container /*隐藏[置顶的]登录提示*/,
.passport-login-tip-container /*隐藏[置顶的]登录权益提示*/,
body>#toolbarBox /*隐藏[置顶的][顶部的]菜单栏*/,
.left-toolbox /*隐藏[置顶的][底部的]关注栏*/,
.blog_container_aside /*隐藏[左边的]栏*/,
#rightAside /*隐藏[右边的]栏*/,
.csdn-side-toolbar /*隐藏[右边的]磁吸栏*/,
.blog-footer-bottom /*隐藏[底部的]网站介绍*/,
.recommend-nps-box /*隐藏[底部的]打分*/,
.blog-tags-box /*隐藏[正文的][顶部的]分类*/,
.column-group /*隐藏[正文的][顶部的]加入社区*/,
#blogColumnPayAdvert /*隐藏[正文的][顶部的]专栏*/,
.more-toolbox-new /*隐藏[正文的][底部的]关注栏*/,
#treeSkill /*隐藏[正文的][底部的]技能树*/,
.recommend-box /*隐藏[正文的][底部的]推荐文章*/,
.recommend-box div[data-url*="download.csdn.net"] /*隐藏[正文的][底部的]含有下载的推荐文章*/,
.recommend-box div[data-url*="wenku.csdn.net"] /*隐藏[正文的][底部的]含有文库的推荐文章*/,
.hljs-button.signin /*隐藏[正文的][代码块的]复制提示*/,
.code-annotation /*隐藏[正文的][代码块的]一键注释*/,
.article-search-tip /*隐藏[正文的]搜索提示*/
{
display: none !important;
}
/*隐藏背景*/
html body {
background: none !important;
background-image: unset !important;
background-color: unset !important;
}
/*调整标题*/
.title-article {
display: flex !important;
justify-content: center !important;
font-size: 33px !important;
padding-top:23px !important;
padding-bottom: 10px !important;
}
/*调整头像*/
.article-type-img {
display: none !important;
border-radius: 4px !important;
height: 28px !important;
width: 28px !important;
margin: 6px !important;
margin-right: 20px !important;
}
/*正文的div居中*/
#mainBox {
display: flex;
justify-content: center;
}
/*正文的图片居中*/
#content_views p img {
display: flex;
margin-left: auto;
margin-right: auto;
}
/*展示全屏*/
#mainBox {
width: 100%;
}
#mainBox main {
width: 82%;
margin-bottom: unset !important;
}
.main_father {
padding: unset !important;
}
.main_father.d-flex {
display: unset !important;
}
/*临时显示*/
.show-temp {
display: unset !important;
}
/*适当展示图片*/
main #content_views img {
max-width: 70% !important;
}
/*阅读全文*/
.hide-article-box {
display: none !important;
}
#article_content {
height: auto !important;
overflow: auto !important;
}
`;
/*移动端净化样式*/
const purify_style_mb = `
#csdn-toolbar /*隐藏[置顶的][顶部的]菜单栏*/,
#operate /*隐藏[置顶的][底部的]搜索标签与评论*/,
.article-type /*隐藏[正文的][顶部的]文章类型*/,
.have-heart-count /*隐藏[正文的][顶部的]赞*/,
.identity-icon /*隐藏[正文的][顶部的]身份等级*/,
#detailFollow /*隐藏[正文的][顶部的]关注*/,
#recommend /*隐藏[正文的][底部的]推荐文章*/,
#recommend div[data-url*="download.csdn.net"] /*隐藏[正文的][底部的]含有下载的推荐文章*/,
#recommend div[data-url*="wenku.csdn.net"] /*隐藏[正文的][底部的]含有文库的推荐文章*/
{
display: none !important;
}
/*展示全屏*/
body #main {
padding-top: unset !important;
margin-top: unset !important;
}
body {
padding-bottom: unset !important;
}
/*展示分界线*/
.spec_space {
height: 32px !important;
background-color: #eaeaea !important;
}
`;
//净化页面
const purifyPage = function() {
GM_addStyle(purify_style_pc);
GM_addStyle(purify_style_mb);
};
//显示推荐的开关
const showRecommend = function() {
const sr = document.createElement("div");
sr.style = "height: 64px; background-color: #eaeaea;";
sr.onclick = function() {
$$(".recommend-box").forEach(el => {
el.classList.toggle("show-temp");
});
$(".recommend-box")?.scrollIntoView();
};
$('main').insertBefore(sr, $('.recommend-box'));
};
//展开代码
const prettyCode = function() {
const browser_menu_height = window.outerHeight - window.innerHeight; //浏览器顶部菜单栏高度
const browser_height_max = screen.height - browser_menu_height; //浏览器最大可展示高度
let i = 0;
$$('.set-code-hide').forEach(el => {
if (i == 0 && $("code", el)?.clientHeight <= browser_height_max * 1.8) {
//预判首个代码块实际高度,若小于浏览器最大可展示高度的180%,则自动展开代码
$(".hide-preCode-bt", el)?.click();
} else if ($("code", el)?.clientHeight <= browser_height_max * 0.8) {
//预判其余代码块实际高度,若小于浏览器最大可展示高度的80%,则自动展开代码
$(".hide-preCode-bt", el)?.click();
}
i++;
});
};
//拦截推荐搜索
const hookXHR = function() {
const origOpen = XMLHttpRequest.prototype.open;
const block_url = 'redisdatarecall\.csdn\.net/recommend/';
XMLHttpRequest.prototype.open = function() {
const reqUrl = arguments[1];
if (reqUrl.match(block_url)){
return;
}
origOpen.apply(this, arguments);
};
};
//调整头像
const beautyLOGO = function() {
$('.article-type-img').src = $('link[rel="shortcut icon"]').href;
$('.article-type-img').style = 'display: block !important;';
};
//净化URL, 保障用户信息安全
const prettyURL = function() {
let newurl = location.href.match('(https?://.*?blog\.csdn\.net/.*?article/details/.*?)\\?');
if (newurl) {
newurl = newurl[1];
window.history.replaceState({
path: newurl
}, '', newurl);
}
};
window.onload = function() {
beautyLOGO();
prettyCode();
showRecommend();
};
purifyPage();
prettyURL();
hookXHR();
})();