Skip to content

Instantly share code, notes, and snippets.

@finwe
Last active July 25, 2022 07:39
Show Gist options
  • Save finwe/c84dd83cf13f16469a231d833d6df39f to your computer and use it in GitHub Desktop.
Save finwe/c84dd83cf13f16469a231d833d6df39f to your computer and use it in GitHub Desktop.
Okoun userscripts
// ==UserScript==
// @name Autorenew novyků
// @namespace http://tampermonkey.net/
// @version 1.0
// @author You
// @include *okoun.cz/*
// @icon https://www.google.com/s2/favicons?domain=okoun.cz
// @grant none
// ==/UserScript==
(function() {
'use strict';
/**
* Autorenew novyků
*/
const titleEl = document.querySelector('title');
const title = titleEl.text;
let container = document.querySelector('.main > .yui-g > .yui-u');
if (container.length === 0) {
container = document.querySelector(".main > .yui-gc > .yui-u");
}
container.innerHTML = "<p title='Naposledy načteno' id='last_reload'></p>";
const novydiv = document.createElement('div');
novydiv.id = 'novydiv'
container.appendChild(novydiv);
loadNew();
setInterval( function() {
loadNew();
}, 60000);
function loadNew()
{
fetch('https://www.okoun.cz/favourites.jsp?new=1&k=' + Math.random())
.then(data => {
data.text().then(function (text) {
let items = new DOMParser().parseFromString(text, 'text/html').querySelectorAll('.item');
let output = '';
items.forEach(function (item) {
const datestr = item.querySelector("span.date").innerHTML;
const nazev = item.querySelector("a.name").innerHTML;
const href = item.querySelector("a.name").getAttribute('href');
let novych = item.querySelector("b").innerHTML;
novych = novych.replace(/&nbsp;(nových|nový|nové)/, '');
output += "<div class='item'><a class='klub' title='" + datestr + "' href='" + href + "'>" + nazev + "</a> - " + novych + '</div>';
});
if (output.length > 0) {
output = '<h3>S novými</h3>' + output;
titleEl.text = '* ' + title;
}
novydiv.innerHTML = output;
});
}).catch(error => {
console.log(error);
});
var dt = new Date();
document.getElementById('last_reload').innerHTML = dt.getHours() + "." + dt.getMinutes().toString().padStart(2, '0') + ":" + dt.getSeconds().toString().padStart(2, '0');
}
})();
// ==UserScript==
// @name Formatting Panel
// @namespace http://molhanec.net/lopuch/?n=Main.Okoun
// @description Prida k textovemu poli tlacitka pro formatovani textu
// @include *okoun.cz/*
// @icon https://www.google.com/s2/favicons?domain=okoun.cz
// @version 1.0
// @grant none
// ==/UserScript==
function addButtons(parent, textarea)
{
parent.insertBefore(create_button('B', bold), textarea);
parent.insertBefore(create_button('I', italic), textarea);
parent.insertBefore(create_button('U', underline), textarea);
parent.insertBefore(create_button('S', strike), textarea);
parent.insertBefore(create_button('BR', br), textarea);
parent.insertBefore(document.createTextNode('\xA0\xA0\xA0'), textarea);
parent.insertBefore(create_button('URL', link), textarea);
parent.insertBefore(create_button('IMG', img), textarea);
parent.insertBefore(create_button('FONT', font), textarea);
parent.insertBefore(create_button('SPOIL', spoil), textarea);
parent.insertBefore(document.createTextNode('\xA0\xA0\xA0'), textarea);
parent.insertBefore(create_button('CODE', code), textarea);
parent.insertBefore(document.createElement('br'), textarea);
}
function link(event)
{
try {
var textarea = event.target.parentNode.querySelector('textarea');
var url = prompt('Zadejte adresu odkazu: ', '');
if (url) {
if (textarea.selectionStart < textarea.selectionEnd) {
var pretext = textarea.value.substring(0, textarea.selectionStart);
var posttext = textarea.value.substring(textarea.selectionEnd, textarea.value.length);
var selection = textarea.value.substring(textarea.selectionStart, textarea.selectionEnd);
textarea.value = pretext + '<a href="' + url + '">' + selection + '</a>' + posttext;
} else {
var str = prompt('Zadejte text odkazu: ', '');
textarea.value = textarea.value + '<a href="' + url + '">' + str + '</a>';
}
}
textarea.focus();
event.preventDefault();
} catch (exception) {
alert(exception.message);
}
}
function img(event) {
try {
var textarea = event.target.parentNode.querySelector('textarea');
if (textarea.selectionStart < textarea.selectionEnd) {
var pretext = textarea.value.substring(0, textarea.selectionStart);
var posttext = textarea.value.substring(textarea.selectionEnd, textarea.value.length);
var selection = textarea.value.substring(textarea.selectionStart, textarea.selectionEnd);
textarea.value = pretext + '<img src="' + selection + '" />' + posttext;
} else {
var str = prompt('Zadejte cestu k obrazku: ', '');
if (str) textarea.value = textarea.value + '<img src="' + str + '" />';
}
textarea.focus();
event.preventDefault();
} catch (exception) {
alert(exception.message);
}
}
function font(event) {
try {
var textarea = event.target.parentNode.querySelector('textarea');
var color = prompt('Zadejte barvu textu: ', '');
var size = prompt('Zadejte velikost fontu: ', '');
if (color || size) {
var string_to_write;
if (textarea.selectionStart < textarea.selectionEnd) {
var pretext = textarea.value.substring(0, textarea.selectionStart);
var posttext = textarea.value.substring(textarea.selectionEnd, textarea.value.length);
var selection = textarea.value.substring(textarea.selectionStart, textarea.selectionEnd);
string_to_write = '<font';
if (color) { string_to_write = string_to_write +' color="' + color + '"'; }
if (size) { string_to_write = string_to_write +' size="' + size +'"'; }
string_to_write = string_to_write +'>' + selection + '</font>';
textarea.value = pretext + string_to_write + posttext;
} else {
var str = prompt('Zadejte text: ', '');
string_to_write = '<font';
if (color) { string_to_write = string_to_write +' color="' + color + '"'; }
if (size) { string_to_write = string_to_write +' size="' + size +'"'; }
string_to_write = string_to_write +'>' + str + '</font>';
textarea.value = textarea.value + string_to_write;
}
}
textarea.focus();
event.preventDefault();
} catch (exception) {
alert(exception.message);
}
}
function surroundText(event, opening, closing) {
try {
var textarea = event.target.parentNode.querySelector('textarea');
var pretext = textarea.value.substring(0, textarea.selectionStart);
var posttext = textarea.value.substring(textarea.selectionEnd, textarea.value.length);
var selection = textarea.value.substring(textarea.selectionStart, textarea.selectionEnd);
textarea.value = pretext + opening + selection + closing + posttext;
textarea.focus();
event.preventDefault();
} catch (exception) {
alert(exception.message);
}
}
function spoil(event) {
surroundText(event, '<table><tr><td bgcolor="#fff"><font color="#fff">', '</font></td></tr></table>');
}
function bold(event) {
surroundText(event, '<b>', '</b>');
}
function italic(event) {
surroundText(event, '<i>', '</i>');
}
function underline(event) {
surroundText(event, '<u>', '</u>');
}
function strike(event) {
surroundText(event, '<s>', '</s>');
}
function br(event) {
try {
var textarea = event.target.parentNode.querySelector('textarea');
const selectionStart = textarea.selectionStart;
const selectionEnd = textarea.selectionEnd;
const value = textarea.value;
const pretext = value.substring(0, selectionStart);
const posttext = value.substring(selectionEnd, value.length);
const selection = value.substring(selectionStart, selectionEnd);
textarea.value = pretext + selection + '<br>' + posttext;
textarea.focus();
textarea.selectionStart = selectionEnd + 4;
textarea.selectionEnd = selectionEnd + 4;
event.preventDefault();
} catch (exception) {
alert(exception.message);
}
}
function code(event) {
surroundText(event, '<div class="code">', '</div>');
}
function mouseover(event)
{
this.style.border = "1px solid #808080";
this.style.backgroundColor = "#E0E0E0";
event.preventDefault();
}
function mouseout(event)
{
this.style.border = "1px solid #A7A6AA";
this.style.backgroundColor = "white";
event.preventDefault();
}
function create_button(text, listener)
{
var button = document.createElement('button');
var txt = document.createTextNode(text);
button.style.font = "10pt Arial";
button.style.border = "1px solid #A7A6AA";
button.style.backgroundColor = "white";
button.style.cursor = "pointer";
button.style.marginBottom = "2px";
button.style.marginRight = "2px";
switch (text) {
case 'B': button.style.fontWeight = "bold";
break;
case 'I': button.style.fontStyle = "italic";
break;
case 'U': button.style.textDecoration = "underline";
break;
case 'S': button.style.textDecoration = "line-through";
break;
}
button.insertBefore(txt, null);
button.addEventListener("mouseover", mouseover, false);
button.addEventListener("mouseout", mouseout, false);
button.addEventListener("click", listener, false);
return button;
}
try {
var textarea = document.querySelector("textarea");
if (textarea) {
var parent = textarea.parentNode;
addButtons(parent, textarea);
}
(new MutationObserver(function (records, observer) {
records.forEach(function (record) {
for (var node of record.addedNodes) {
if (node.className == 'post content') {
node.querySelectorAll('textarea').forEach(function (textarea) {
var parent = textarea.parentNode;
addButtons(parent, textarea);
});
}
}
});
})).observe(document, { childList: true, subtree: true });
} catch (exception) {
alert(exception.message);
}
// ==UserScript==
// @name Skrývání debilů
// @namespace http://tampermonkey.net/
// @version 2.0
// @description try to take over the world!
// @author Finwe
// @include *okoun.cz/*
// @icon https://www.google.com/s2/favicons?domain=okoun.cz
// @grant none
// ==/UserScript==
(function() {
'use strict';
// Proměnná k definování seznamu debilů.
let toHide = {
soft: [ // tito debili se jen skryjí, ale jdou rozkliknutím zobrazit
'debil1',
'debil2',
],
hard: [ // tito debili zmizí zcela
'ultradebil1',
'ultradebil2',
]
};
// URL seznamu ignorovaných. Musí obsahovat JSON ve formátu proměnné toHide výše, s klíči soft a hard
// Pokud je definovaná, proměnná nahoře se ignoruje
// let toHide = '';
let css = `
.hiddenart .user { font-size: 9px; }
.hiddenart a, .hiddenart .ico, .hiddenart .content, .hiddenart .actions, .hiddenart .descr, .hiddenart .title, .hiddenart .permalink { display: none; }
.hiddenart { padding-bottom: 0 !important; padding-top: 5px !important; border-bottom: 1px solid #CCCCCC !important; }
.hiddenart span.user { color: #c0c0c0; cursor: pointer; }
`;
let style = document.createElement('style');
style.type = 'text/css';
style.appendChild(document.createTextNode(css));
document.querySelectorAll('head').forEach(function (el) {
el.append(style);
});
function hideUsers(toHide)
{
document.querySelectorAll('div.item').forEach(function (el)
{
let username = el.querySelector('span.user');
username = username && username.innerHTML;
let prev = el.querySelector('a.prev .anon');
prev = prev && prev.innerHTML;
let hasUsername = username && toHide.soft.indexOf(username) !== -1;
let hasReply = prev && toHide.soft.indexOf(prev) !== -1;
if (hasUsername || hasReply) {
el.classList.add('hiddenart');
}
let hasUsernameHard = username && toHide.hard.indexOf(username) !== -1;
let hasReplyHard = prev && toHide.hard.indexOf(prev) !== -1;
if (hasUsernameHard || hasReplyHard) {
el.style.display = 'none';
}
});
document.querySelectorAll('.hiddenart .user').forEach(function (el) {
el.addEventListener('mouseup', function() {
el.parentNode.parentNode.classList.remove('hiddenart');
});
});
}
if ((typeof toHide === 'string' || toHide instanceof String) && toHide.startsWith('http')) {
const ts = Math.floor(Date.now() / 1000);
let timestamp = localStorage.getItem('tohide.timestamp');
let contents = localStorage.getItem('tohide.content');
if (contents && timestamp > ts - 3600) {
hideUsers(JSON.parse(contents));
} else {
fetch(toHide).then(function (response) {
// @todo Manage invalid responses
return response.json();
}).then(function (toHide) {
hideUsers(toHide);
window.localStorage.setItem('tohide.timestamp', ts);
window.localStorage.setItem('tohide.content', JSON.stringify(toHide));
});
}
} else {
hideUsers(toHide);
}
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment