var style_cookie = "weabot_style_txt"; if (style_cookie && localStorage.hasOwnProperty(style_cookie)) { set_stylesheet(localStorage.getItem(style_cookie)); } var hiddenposts = Array(); function set_stylesheet(styletitle) { var css = document.getElementById("css"); if (css) css.href = "/static/css/txt/" + styletitle.toLowerCase() + ".css"; localStorage.setItem(style_cookie, styletitle); } function timeMob(timestamp) { var time = Math.round(Date.now() / 1000); var el = time - timestamp; if (el < 60) return el + "s"; else if (el < 3600) return Math.round(el / 60) + "m"; else if (el < 86400) return Math.round(el / 3600) + "h"; else if (el < 2628000) return Math.round(el / 86400) + "d"; else if (el < 31536000) return Math.round(el / 2628000) + "me"; else return Math.round(el / 31557600) + "a"; } /* IE/Opera fix, because they need to go learn a book on how to use indexOf with arrays */ if (!Array.prototype.indexOf) { Array.prototype.indexOf = function(elt /*, from*/) { var len = this.length; var from = Number(arguments[1]) || 0; from = from < 0 ? Math.ceil(from) : Math.floor(from); if (from < 0) from += len; for (; from < len; from++) { if (from in this && this[from] === elt) return from; } return -1; }; } function getPassword() { if (weabot.password) return weabot.password; var pass = ""; var char = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789?!-_."; while (pass.length < 10) { 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.fielda !== "undefined") weabot.email = form.fieldb.value; localStorage.setItem("weabot", JSON.stringify(weabot)); } function setInputs(id) { if (document.getElementById(id)) { with (document.getElementById(id)) { if (typeof fielda !== "undefined" && !fielda.value && weabot.name) fielda.value = weabot.name; if (typeof fielda !== "undefined" && !fieldb.value && weabot.email) fieldb.value = weabot.email; if (!password.value) password.value = getPassword(); if (typeof preview !== "undefined") { preview.id = id; preview.addEventListener("click", previewPost); } addEventListener("submit", saveInputs); } } } // Textboard data function insert(text) { var textarea = document.forms.postform.message; if (textarea) { if (textarea.createTextRange && textarea.caretPos) { // IE var caretPos = textarea.caretPos; caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == " " ? text + " " : text; } else 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 deletePost(e) { var ids = e.parentElement.firstChild.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 postClick(num) { var sel = window.getSelection().toString(); if (sel) { sel = sel.replace(/^/gm, ">") + "\n"; sel = "\n" + sel; } insert(">>" + num + sel); } function previewPost(e) { var formid = e.target.id; var thread = "0"; if (formid.startsWith("postform")) thread = formid.substr(8); var form = document.getElementById(formid); var preview = document.getElementById("preview" + thread); var main = document.getElementById("options"); if (!form || !preview || !form.message.value) return; if (main) main.style.display = ""; preview.removeAttribute("style"); preview.innerHTML = "Cargando..."; var text = "message=" + encodeURIComponent(form.message.value) + "&board=" + board; if (thread) text += "&parentid=" + thread; var xmlhttp = get_xmlhttp(); xmlhttp.open("POST", "/cgi/preview"); xmlhttp.onreadystatechange = function() { if (xmlhttp.readyState == 4) preview.innerHTML = xmlhttp.responseText; }; if (is_ie() || xmlhttp.setRequestHeader) xmlhttp.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded" ); xmlhttp.send(text); } function listSort() { var s = opcs.sort; var cont = document.getElementById("content"); var elem = document.getElementsByClassName("row"); var arr = Array.prototype.slice.call(elem); arr.shift(); if (s == "Normal") { arr.sort(function(a, b) { return ( parseInt(a.childNodes[1].textContent) - parseInt(b.childNodes[1].textContent) ); }); } else if (s == "Edad") { arr.sort(function(a, b) { return ( b.children[1].firstChild.href.split("/")[5] - a.children[1].firstChild.href.split("/")[5] ); }); } else if (s == "Largo") { arr.sort(function(a, b) { return b.children[2].textContent - a.children[2].textContent; }); } else if (s == "Rapidez") { var now = Math.round(Date.now() / 1000); arr.sort(function(a, b) { return ( b.children[2].textContent / (now - b.children[1].firstChild.href.split("/")[5]) - a.children[2].textContent / (now - a.children[1].firstChild.href.split("/")[5]) ); }); } else if (s == "Aleatorio") { arr.sort(function(a, b) { return 0.5 - Math.random(); }); } for (var j = 0; j < arr.length; j++) cont.appendChild(arr[j]); localStorage.setItem("threadlist", JSON.stringify(opcs)); } function listDisplay() { var d = opcs.disp; if (d == "Malla") { document.getElementById("header").style.display = "none"; document.getElementById("content").className = "grid"; var style = document.createElement("style"); style.id = "labels"; style.type = "text/css"; style.textContent = '#content .row div.date{display:none}#content.grid div.com:before{content:"("}#content.grid .com:after{content:")"}'; document.head.appendChild(style); } else if (d == "Lista") { var style = document.getElementById("labels"); if (style) style.parentNode.removeChild(style); document.getElementById("header").removeAttribute("style"); document.getElementById("content").className = "list"; } localStorage.setItem("threadlist", JSON.stringify(opcs)); } function searchSubjects(e) { var filter = this.value.toLowerCase(); var nodes = document.getElementsByClassName("thread"); for (i = 0; i < nodes.length; i++) { if (nodes[i].textContent.toLowerCase().includes(filter)) nodes[i].parentNode.removeAttribute("style"); else nodes[i].parentNode.style.display = "none"; } } 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 is_ie() { return document.all && !document.opera; } function showpost(post) { post.children[0].classList.remove("hidden"); post.children[1].removeAttribute("style"); } function hidepost(post) { post.children[0].classList.add("hidden"); post.children[1].style.display = "none"; } function togglepost(e) { e.preventDefault(); var post = this.parentElement; var postid = board + this.getElementsByClassName("date")[0].dataset.unix; if (post.children[1].style.display == "none") { showpost(post); if (hiddenposts.includes(postid)) hiddenposts.splice(hiddenposts.indexOf(postid), 1); } else { hidepost(post); if (!hiddenposts.includes(postid)) hiddenposts.push(postid); } localStorage.setItem("hiddenposts", hiddenposts.join("!")); } function applyTheme() { var newTheme = document.getElementById("styles").value; set_stylesheet(newTheme); } document.addEventListener("DOMContentLoaded", function() { if (localStorage.hasOwnProperty("weabot")) weabot = JSON.parse(localStorage.getItem("weabot")); else weabot = { name: null, email: null, password: null }; board = document.body.dataset.brd; var head = document.getElementById("main_nav"); if (head) { var b = head.getElementsByTagName("a"); for (var i = 0; i < b.length; i++) { if (b[i].getAttribute("href") == "/" + board + "/") { b[i].className = "cur_brd"; break; } } } var dt = document.getElementsByClassName("date"); if (screen.width < 720) { if (head) { var b = head.getElementsByTagName("a"); var s = document.createElement("select"); for (var i = 1; i < b.length; i++) { var o = document.createElement("option"); o.value = b[i].href; o.textContent = b[i].textContent; if (b[i].className == "cur_brd") o.defaultSelected = true; s.appendChild(o); } s.addEventListener("change", function(e) { window.location.href = this.value; }); head.innerHTML = 'Bienvenido a Internet | '; head.appendChild(s); head.removeAttribute("style"); document.body.className += " fix"; var head2 = document.getElementById("thread_nav"); if (head2) head2.removeChild(head2.childNodes[1]); } for (var i = 0; i < dt.length; i++) { t = dt[i].textContent; if (t.includes("ID:")) var id = t.split(" ")[1]; else id = ""; dt[i].textContent = "Hace " + timeMob(dt[i].dataset.unix) + " " + id; } } var forms = document.getElementsByTagName("form"); for (var i = 0; i < forms.length; i++) { if (forms[i].id.startsWith("postform")) setInputs(forms[i].id); } var styleSelect = document.getElementById("styles"); if (styleSelect) { styleSelect.addEventListener("change", applyTheme, false); styleSelect.value = localStorage.getItem(style_cookie); } if (document.body.classList.contains("threads")) { var srt = document.getElementsByClassName("l_s"); for (var i = 0; i < srt.length; i++) { srt[i].addEventListener("click", function(e) { e.preventDefault(); opcs.sort = this.textContent; listSort(); }); } var dsp = document.getElementsByClassName("l_d"); for (var i = 0; i < dsp.length; i++) { dsp[i].addEventListener("click", function(e) { e.preventDefault(); opcs.disp = this.textContent; listDisplay(); }); } document.getElementById("l_sr").addEventListener("keyup", searchSubjects); if (localStorage.hasOwnProperty("threadlist")) { opcs = JSON.parse(localStorage.getItem("threadlist")); listSort(); listDisplay(); } else { opcs = { sort: "Normal", disp: "Lista" }; localStorage.setItem("threadlist", JSON.stringify(opcs)); } } if (localStorage.hasOwnProperty("hiddenposts")) hiddenposts = localStorage.getItem("hiddenposts").split("!"); for (var i = 0; i < dt.length; i++) { if (hiddenposts.includes(board + dt[i].dataset.unix)) { console.log(dt[i].dataset.unix); hidepost(dt[i].parentElement.parentElement); } dt[i].parentElement.addEventListener("dblclick", togglepost); } }); 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 );