var style_cookie = "weabot_style_bbs"; if (localStorage.hasOwnProperty(style_cookie)) { var css = document.getElementById("css"); if (css) { var style = localStorage.getItem(style_cookie).trim().toLowerCase(); if (style != "") { css.href = "/static/css/txt/" + localStorage.getItem(style_cookie).toLowerCase() + ".css"; } else { localStorage.removeItem(style_cookie); } } } function getPassword() { if (weabot.password) return weabot.password; var pass = ""; var char = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789?!-_.:;"; for (var i=0; i<=8; i++) { pass += char[Math.floor(Math.random() * char.length)]; } weabot.password = pass; localStorage.setItem("weabot", JSON.stringify(weabot)); return pass; } function saveInputs(e) { var e = e || window.event; var form = e.target || e.srcElement; if (typeof form.fielda !== "undefined") { weabot.name = form.fielda.value; } if (typeof form.fieldb !== "undefined") { weabot.email = form.fieldb.value; } localStorage.setItem("weabot", JSON.stringify(weabot)); } function setInputs(form) { with (form) { if (typeof fielda !== "undefined" && weabot.name) { fielda.value = weabot.name; } if (typeof fielda !== "undefined" && weabot.email) { fieldb.value = weabot.email; } if (!password.value) { password.value = getPassword(); } if (typeof preview !== "undefined") { preview.dataset.formid = form.id; preview.addEventListener("click", previewPost); } addEventListener("submit", saveInputs); } } // Textboard data function insert(text) { var textarea = document.forms.postform.message; if (textarea) { if (textarea.setSelectionRange) { // Firefox var start = textarea.selectionStart; var end = textarea.selectionEnd; textarea.value = textarea.value.substr(0, start) + text + textarea.value.substr(end); textarea.setSelectionRange(start + text.length, start + text.length); } else { textarea.value += text + " "; } textarea.focus(); } return false; } function postClick(num) { var sel = window.getSelection().toString(); if (sel) { sel = sel.replace(/^/gm, ">") + "\n"; sel = "\n" + sel; } insert(">>" + num + sel); } function deletePost(e) { var ids = e.parentElement.firstChild.getAttribute("href").split("/"); var post = ids.pop(); var realid = ids.pop(); if (confirm("¿Seguro que deseas borrar el mensaje " + post + "?")) { var script = "/cgi/delete"; document.location = script + "?board=" + board + "&password=" + weabot.password + "&delete=" + realid; } } function previewPost(e) { var form = document.getElementById(e.target.dataset.formid); if (form.message.value.trim() == '') { return; } // empty post, nevermind var thread = e.target.dataset.formid.split('postform')[1]; var board = form.board.value; var preview = document.getElementById('preview' + thread); if (e.target.className == '') { // show preview e.target.className = 'active'; preview.textContent = 'Cargando...'; if (thread == '0') { // new thread document.getElementById('tr_preview').removeAttribute('style'); } else { preview.removeAttribute('style'); } } else { // hide it if (thread == '0') { // new thread document.getElementById('tr_preview').style.display = 'none'; } else { preview.style.display = 'none'; } e.target.removeAttribute('class'); preview.textContent = null; return; } var post = 'message=' + encodeURIComponent(form.message.value) + '&board=' + board + '&parentid=' + thread; var xmlhttp = get_xmlhttp(); xmlhttp.open('POST', '/cgi/preview'); xmlhttp.onreadystatechange = function() { if (xmlhttp.readyState == 4) { preview.innerHTML = xmlhttp.responseText; } }; if (xmlhttp.setRequestHeader) { xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); } xmlhttp.send(post); } function get_xmlhttp() { var xmlhttp; try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e1) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e1) { xmlhttp = null; } } if (!xmlhttp && typeof XMLHttpRequest != "undefined") { xmlhttp = new XMLHttpRequest(); } return xmlhttp; } function listPrepare() { function listSort(e) { e.preventDefault(); var sort = e.target.textContent; var table = document.getElementById("threads"); var arr = Array.prototype.slice.call(table.getElementsByTagName("tr")); arr.shift(); if (sort == "Normal") { arr.sort(function(a, b) { return (parseInt(a.childNodes[1].textContent) - parseInt(b.childNodes[1].textContent)); }); } else if (sort == "Edad") { arr.sort(function(a, b) { return (b.children[1].firstChild.getAttribute("href").split("/")[5] - a.children[1].firstChild.getAttribute("href").split("/")[5]); }); } else if (sort == "Largo") { arr.sort(function(a, b) { return (b.children[2].textContent - a.children[2].textContent); }); } else if (sort == "Rapidez") { var now = Math.round(Date.now() / 1000); arr.sort(function(a, b) { return (b.children[2].textContent / (now - b.children[1].firstChild.getAttribute("href").split("/")[5]) - a.children[2].textContent / (now - a.children[1].firstChild.getAttribute("href").split("/")[5])); }); } else if (sort == "Aleatorio") { arr.sort(function(a, b) { return 0.5 - Math.random(); }); } for (var j = 0; j < arr.length; j++) { table.appendChild(arr[j]); } } var srt = document.getElementById("listmenu").children; for (var i = 0; i < srt.length; i++) { srt[i].addEventListener("click", listSort); } } function checkHidden() { var hidp = localStorage.getItem("hid-p-"+board); if (hidp) { var hid = hidp.split("!"); for (var i = 0; i < hid.length; i++) { var post = document.getElementById("p"+hid[i]); if (post) { post.classList.add("hidden"); } } } } function togglePost(e) { var post = e.parentElement; var pid = post.id.slice(1); var hidp = localStorage.getItem("hid-p-"+board); var hid = Array(); if (hidp) { hid = hidp.split("!"); } if (post.classList.contains("hidden")) { post.classList.remove("hidden"); if (hid.includes(pid)) hid.splice(hid.indexOf(pid), 1); } else { post.classList.add("hidden"); if (!hid.includes(pid)) hid.push(pid); } localStorage.setItem("hid-p-"+board, hid.join("!")); } function localTime(timestamp) { var newdate = new Date(timestamp * 1000); newdate = ("0" + newdate.getDate()).slice(-2) + "/" + ("0" + (newdate.getMonth() + 1)).slice(-2) + "/" + newdate.getFullYear().toString().slice(-2) + "(" + week[newdate.getDay()] + ")" + ("0" + newdate.getHours()).slice(-2) + ":" + ("0" + newdate.getMinutes()).slice(-2) + ":" + ("0" + newdate.getSeconds()).slice(-2); return newdate; } function parsePosts() { if (!weabot.localtime && !weabot.filters && clientw > 600) { return; } console.log('parsePosts() begin'); var sjisrx = /(  \|  /|\  |/  | ̄ ̄||  |  ||\|  |  \|)/; var p = document.getElementsByClassName("reply"); for (var i = 0; i < p.length; i++) { if (p[i].classList.contains('deleted')) { continue; } if (weabot.localtime) { var date = p[i].getElementsByClassName("date")[0]; date.textContent = localTime(date.dataset.unix); } if (weabot.filters) { var hit = false; for (var f in active) { if (active[f].type == 0) { //mensaje var rx = new RegExp(active[f].pattern); if (p[i].getElementsByClassName('msg')[0].textContent.match(rx)) { hit = true; break; } } else if (active[f].type == 1) { //ID if (p[i].getElementsByClassName('hash')[0].textContent == ('ID:'+active[f].pattern)) { hit = true; break; } } else if (active[f].type == 2) { //tripcode var trip = p[i].getElementsByClassName('trip')[0]; if (trip) { if (trip.textContent.split(' ')[0] == ('◆'+active[f].pattern)) { hit = true; break; } } } else if (active[f].type == 3) { //nombre if (p[i].getElementsByClassName('name')[0].textContent.startsWith(active[f].pattern)) { hit = true; break; } } } if (hit) { p[i].classList.add('hidden'); } } if (clientw <= 600) { var msg = p[i].getElementsByClassName('msg')[0]; if (msg.textContent.match(sjisrx)) { msg.classList.add("sjis-mob"); } } } } function loadFilters() { if (!weabot.filters) { return; } if (localStorage.hasOwnProperty("weabot-filtros")) { var filtros = JSON.parse(localStorage.getItem("weabot-filtros")); active = []; for (var f in filtros) { if (filtros[f].usar) { active.push({ type: filtros[f].tipo, pattern: filtros[f].patron }); } } if (active.length == 0) { weabot.filters = false; } } else { weabot.filters = false; } } document.addEventListener("DOMContentLoaded", function() { board = document.body.dataset.brd; if (localStorage.hasOwnProperty("weabot")) { weabot = JSON.parse(localStorage.getItem("weabot")); } else { weabot = { name: null, email: null, password: null, localtime: false, qpreview: true, backlink: true, filters: false }; } var b_link = document.getElementById("b-" + board); if (b_link) { b_link.className = 'cur_brd'; } clientw = document.body.clientWidth; if (clientw < 800) { var head = document.getElementById('main_nav'); if (head) { var navlink = head.children; var sel = document.createElement("select"); sel.id = head.id + "_sel"; sel.addEventListener("change", function(e){ window.location.href = e.target.value; }); for (var i=1; i < navlink.length; i++) { var c = document.createElement("option"); c.text = navlink[i].textContent; c.value = navlink[i].getAttribute("href"); sel.options.add(c); } sel.value = "/"+board+"/"; var home = navlink[0]; head.textContent = ""; head.appendChild(home); head.appendChild(document.createTextNode(" ★ ")); head.appendChild(sel); head.className = "mob"; document.body.style.marginTop = "2em"; } } }); window.addEventListener("load", function() { var forms = document.getElementsByTagName("form"); for (var i = 0; i < forms.length; i++) { if (forms[i].id.startsWith("postform")) { setInputs(forms[i]); } } if (weabot.localtime) { week = ["dom", "lun", "mar", "mie", "jue", "vie", "sab"]; } checkHidden(); loadFilters(); parsePosts(); if (document.getElementById("threads")) { listPrepare(); } document.addEventListener("click", function(e) { var txt = e.target.textContent; /*if (e.target.className == "num") { e.preventDefault(); postClick(txt); return; }*/ if (txt == "del") { e.preventDefault(); deletePost(e.target); return; } }, false); document.addEventListener("dblclick", function(e) { if (e.target.closest("h4")) { e.preventDefault(); togglePost(e.target.closest("h4")); window.getSelection().removeAllRanges(); return; } }, false); });