-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCSDNCodeCopier.js
42 lines (40 loc) · 1.44 KB
/
CSDNCodeCopier.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
// ==UserScript==
// @name CSDNCodeCopier
// @namespace https://blog.csdn.net/
// @version 1.0
// @description Down with CSDN paywall. Adds buttons for copying content from code snippets in CSDN blog posts
// @author aisuneko
// @match *://blog.csdn.net/*/article/details/*
// @match *://*.blog.csdn.net/article/details/*
// @grant none
// ==/UserScript==
async function copyToClipboard(text){
try {
await navigator.clipboard.writeText(text);
} catch (error) {
console.error(error.message);
}
}
function unescapeHTML(html) {
return html.replace(/</g,'<').replace(/>/g,'>').replace(/&/g,'&');
}
(function() {
'use strict';
let taglist = ["set-code-show", "set-code-hide"];
let snippetlist = [];
taglist.forEach((tag)=>{
let tmparr = Array.from(document.getElementsByClassName(tag));
snippetlist.push(...tmparr);
});
for(let i of snippetlist){
let button = document.createElement("button");
button.textContent = "Copy Code";
let code = i.getElementsByTagName("code")[0].innerHTML.toString().replaceAll(/<[^>]*>/gi,"");
button.addEventListener("click", () => {
copyToClipboard(unescapeHTML(code));
button.textContent = "Copied!";
});
i.appendChild(button);
}
Array.from(document.getElementsByClassName("hljs-button signin active")).forEach((el)=>{el.remove()});
})();