// ==UserScript==
// @name 玩转CSDN
// @namespace http://tampermonkey.net/
// @version 0.1002
// @match *://blog.csdn.net/*
// @icon https://source.unsplash.com/random
// @description 仅供参考学习
// @author w2hi
// @icon https://www.google.com/s2/favicons?domain=csdn.net
// @grant none
// @downloadURL none
// ==/UserScript==
(function() {
'use strict';
class CSDN{
construct(focusSwitch){
console.log('构造方法');
};
/*
@name 复制
@func
modifyCopyPriviledge: 修改权限
copy: 复制逻辑
*/
modifyCopyPriviledge(codeElem,signElem){
//代码容器修改
codeElem.removeAttribute('onclick');
codeElem.style.setProperty('user-select','auto');
codeElem.setAttribute('id','code-'+i);
codeElem.parentNode.style.setProperty('user-select','auto');
// 登录容器修改
signElem.removeAttribute('onclick');
signElem.setAttribute('data-title','点击复制');
signElem.removeAttribute('data-report-click');
signElem.setAttribute('data-clipboard-action','copy');
signElem.setAttribute('aria-label','copied!');
signElem.setAttribute('data-clipboard-target','#code-'+i);
};
copy(signElem) {
let codeelem = null;
try{
codeelem = signElem.parentNode;
if(codeelem.id.indexOf('code')===-1){ // 父节点
throw new EvalError('值错误');
}
}catch(err){// 兄弟节点
codeelem = signElem.previousElementSibling;
}
document.oncopy=function(e){
e.clipboardData.setData('text',codeelem.innerText);
e.preventDefault();
document.oncopy=null;
}
document.execCommand("Copy");// 执行浏览器复制命令
signElem.setAttribute('data-title','复制成功');
signElem.style.cssText += 'background-color: green';
setTimeout(()=>{ // 先延时1000ms,再执行回调函数
signElem.setAttribute('data-title','点击复制');
signElem.style.removeProperty('background-color','green');
},1000);
};
/*
@name 专注模式
@func
modifyFocusPriviledge: 修改专注权限
showFocusModel: 展开专注模式
*/
modifyFocusPriviledge(mainBox, main){
// 修改toolbar
let toolbar = document.querySelector('.csdn-side-toolbar');
let focusSwitch = document.querySelector('.option-box').cloneNode(true);
focusSwitch.firstElementChild.src = 'https://s1.aigei.com/src/img/png/05/055f0df239ef4451a25be1e5c4617f96.png?imageMogr2/auto-'+
'orient/thumbnail/!199x199r/gravity/Center/crop/199x199/quality/85/&e=1735488000&'+
'token=P7S2Xpzfz11vAkASLTkfHN7Fw-oOZBecqeJaxypL:pxpJ0L3fOUppABVi15gOFs94eqk=';
focusSwitch.style.background = "rgba(0,0,0,0.1)";
focusSwitch.firstElementChild.style.width = "200%";
focusSwitch.firstElementChild.style.display = "block"; // 去除初始鼠标放上有动态加载事件
// focusSwitch.lastElementChild.innerHTML = "专注
模式";
focusSwitch.removeChild(focusSwitch.lastElementChild);
toolbar.replaceChildren(focusSwitch);
// 修改默认页面配置样式
main.removeAttribute('id');
focusSwitch.removeAttribute('mouseup');
mainBox.firstElementChild.nextElementSibling.style.removeProperty('z-index');
main.style.cssText += 'z-index:999;position:absolute';
main.style.display = 'none';
document.body.insertBefore(main, document.body.firstElementChild);
return focusSwitch;
};
showFocusModel(status, mainBox, main){
if(status===0){ // 进入专注模式
console.log(`----${status}: 专注模式----`)
mainBox.style.display = 'none';
mainBox.nextElementSibling.style.display = 'none';
main.style.display = 'block';
console.log('主体可见\n全体不可见')
// rightAside.style.setProperty('display','none');
// mainBox.firstElementChild.style.setProperty('display','auto');
// con.replaceChildren(mainBox.firstElementChild);
}else{ // 默认-1 原始状态
console.log(`----${status}: 初始模式----`);
mainBox.style.display = 'block';
mainBox.nextElementSibling.style.display = 'block';
main.style.display = 'none';
console.log('主体不可见\n全体可见')
// mainBox.style.removeProperty('display','none');
// rightAside.style.removeProperty('display','none');
// con.replaceChildren(mainBox);
// con.append(rightAside);
}
// document.body.replaceChild(mainContent,nodata);
}
};
let csdn = new CSDN();
let mainBox = document.getElementById('mainBox');
let main = mainBox.firstElementChild.cloneNode(true);
let focusSwitch = csdn.modifyFocusPriviledge(mainBox, main); //
let status = -1;
focusSwitch.addEventListener('click', function(){
status = ~status;
csdn.showFocusModel(status,mainBox,main);
},'true');
let codes = document.querySelectorAll('#content_views pre code');
let signs = document.querySelectorAll('.signin');
for(var i=0;i