Skip to content

Instantly share code, notes, and snippets.

@MinusFour
Last active February 14, 2021 18:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save MinusFour/60e28eaa8c20c533a8469aaccb472854 to your computer and use it in GitHub Desktop.
Save MinusFour/60e28eaa8c20c533a8469aaccb472854 to your computer and use it in GitHub Desktop.
Bookmarklet para foro de elhacker.net
(function(){
if(window.origin !== 'https://foro.elhacker.net') throw new Error('No estas en el foro');
fetch("/index.php").then(res => {
if(res.ok){
return res.arrayBuffer().then(buf => {
let decoder = new TextDecoder('iso-8859-1');
let html = decoder.decode(buf);
let domParser = new DOMParser();
let dom = domParser.parseFromString(html, 'text/html');
let mensajesRecientes = dom.evaluate(
"/html/body/table[last()-1]//table[1]/tbody[1]/tr[1]/td[1]/table[3]//table[1]",
dom,
null,
XPathResult.ANY_TYPE,
null
).iterateNext();
let messageNodes = Array.from(
mensajesRecientes.querySelectorAll('tr td'),
td => {
let fragment = document.createElement('div');
fragment.append(...td.childNodes);
return fragment;
}
)
displayNewMessages(messageNodes);
});
} else {
throw new Error(`${res.statusText} ${res.status}`);
}
});
function displayNewMessages(messageNodes){
let idKey = "mensajes-recientes";
let floatingWindow = document.createDocumentFragment();
let layout = document.createElement('div');
layout.id = idKey;
layout.className = "windowbg2";
layout.style = "padding: 10px; box-shadow: 0px 0px 5px #1c6699; display: grid; grid-template-columns: 80px 1fr 100px; grid-template-rows: min-content; gap: 10px; position: fixed; top: 15%; left: 15%; height: 70%; width: 70%; ";
floatingWindow.append(layout);
let forum = document.createElement('div');
let close = document.createElement('button');
close.innerText = 'X';
close.style= "position: absolute; top: 5px; left: 5px";
close.addEventListener('click', () => document.getElementById(idKey).remove());
layout.append(close);
forum.append('Foro');
let title = document.createElement('div');
title.append('Tema');
let time = document.createElement('div');
time.append('Fecha');
let header = [forum, title, time];
header.forEach(function(d){
d.style = "font-weight: bold; text-align: center; padding: 5px 0px; background-color: #abcbdc";
});
layout.append(...header);
messageNodes.reduce((layout, node, i) => {
if(i%3 === 0) node.style = "text-align: end";
layout.append(node);
return layout;
}, layout);
let check = document.getElementById(idKey);
!check ? document.body.appendChild(floatingWindow) : check.replaceWith(floatingWindow);
}
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment