mirror of
https://github.com/Phantop/dotfiles
synced 2024-11-19 13:22:51 +00:00
36 lines
1.1 KiB
JavaScript
36 lines
1.1 KiB
JavaScript
|
// ==UserScript==
|
||
|
// @name PlainText
|
||
|
// @description Makes links in plain text one-click to open
|
||
|
// @include *.txt
|
||
|
// @include *.xml
|
||
|
// ==/UserScript==
|
||
|
const rss = document.querySelector('rss');
|
||
|
|
||
|
if (rss) {
|
||
|
for (const link of document.querySelectorAll('link')) {
|
||
|
link.addEventListener('click', function() { window.open(this.textContent); });
|
||
|
link.style = 'text-decorator: underline;';
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
const text = document.body.innerText;
|
||
|
|
||
|
const regexpLinks = /http[s]?:\/\/[^;, \n\t]*/
|
||
|
const regexpLinksAll = /http[s]?:\/\/[^;, \n\t]*/g
|
||
|
const links = [...text.matchAll(regexpLinksAll)]
|
||
|
const pieces = text.split(regexpLinks)
|
||
|
const combined = pieces.reduce((acc, text, index) => { acc.push(text); links[index] && acc.push(links[index]); return acc; }, [])
|
||
|
|
||
|
const newText = '<pre>' +
|
||
|
combined
|
||
|
.map((piece) => {
|
||
|
if (!regexpLinks.test(piece)) {
|
||
|
return piece;
|
||
|
}
|
||
|
return `<a target="_blank" href="${piece}">${piece}</a>`;
|
||
|
})
|
||
|
.join('')
|
||
|
+ '</pre>';
|
||
|
document.body.innerHTML = newText;
|
||
|
}
|