var style_cookie = "weabot_style_ib"; if (localStorage.hasOwnProperty(style_cookie)) { setTheme(localStorage.getItem(style_cookie)); } function setTheme(styletitle) { var css = document.getElementById("css"); if (css) { css.href = "/static/css/" + styletitle.toLowerCase() + ".css"; localStorage.setItem(style_cookie, styletitle); } } /* 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 postClick(num) { var sel = window.getSelection().toString(); if (sel) sel = sel.replace(/^/gm, ">") + "\n"; insert(">>" + num + "\n" + sel); } 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 checkhighlight() { var match; if ((match = /#i([0-9]+)/.exec(document.location.toString()))) { if (!document.forms.postform.message.value) insert(">>" + match[1] + "\r\n"); } else if ((match = /#([0-9]+)/.exec(document.location.toString()))) { highlight(match[1]); } } function highlight(post) { var hl = document.getElementsByClassName("reply highlight"); if (hl.length) { hl[0].className = "reply"; } var reply = document.getElementById("p" + post); if (reply) { reply.className = "reply highlight"; var match = /^([^#]*)/.exec(document.location.toString()); document.location = match[1] + "#" + post; } } function expandimg(e) { var post_id = e.dataset.id; var img_url = e.href; var thumb_url = e.dataset.thumb; var img_w = parseInt(e.dataset.w); var img_h = parseInt(e.dataset.h); var thumb_w = parseInt(e.dataset.tw); if (thumb_w < 1) return true; var thumb_h = parseInt(e.dataset.th); var format = img_url.substring(img_url.lastIndexOf(".") + 1, img_url.length); var exp_vid = 0; if (window.innerWidth > 900) var ratio = Math.min((window.innerWidth - 130) / img_w, 1); else var ratio = Math.min((window.innerWidth - 40) / img_w, 1); var img_cont = document.getElementById("thumb" + post_id); var post_block = img_cont.parentElement.parentElement.getElementsByTagName( "blockquote" )[0]; var img; for (var i = 0; i < img_cont.childNodes.length; i++) if (img_cont.childNodes[i].nodeName.toLowerCase() == "img") { img = img_cont.childNodes[i]; } else if (img_cont.childNodes[i].nodeName.toLowerCase() == "video") { img = img_cont.childNodes[i]; exp_vid = 1; } if (img) { if (format == "webm" || format == "mp4" && exp_vid == 0) var new_img = document.createElement("video"); else var new_img = document.createElement("img"); new_img.setAttribute("class", "thumb"); new_img.setAttribute("alt", "" + post_id); if (img.getAttribute("width") == "" + thumb_w && img.getAttribute("height") == "" + thumb_h) { // thumbnail -> fullsize if (format == "webm" || format == "mp4") { new_img.setAttribute("controls", ""); new_img.setAttribute("loop", ""); new_img.setAttribute("autoplay", ""); } new_img.setAttribute("src", "" + img_url); new_img.setAttribute("width", img_w); new_img.setAttribute("height", img_h); new_img.setAttribute("style", "max-width:" + Math.floor(img_w * ratio) + "px;max-height:" + Math.floor(img_h * ratio) + "px;"); post_block.setAttribute("style", ""); img_cont.style.display = "table"; } else { // fullsize -> thumbnail if (format == "webm" || format == "mp4") { new_img.removeAttribute("controls"); new_img.removeAttribute("loop"); new_img.removeAttribute("autoplay"); } new_img.setAttribute("src", "" + thumb_url); new_img.setAttribute("width", thumb_w); new_img.setAttribute("height", thumb_h); post_block.setAttribute("style", "margin-left:" + (parseInt(thumb_w) + 40) + "px;max-width:" + (1000 - parseInt(thumb_w)) + "px"); img_cont.removeAttribute("style"); } while (img_cont.lastChild) img_cont.removeChild(img_cont.lastChild); img_cont.appendChild(new_img); } } function filePreview(e) { var file = postform.file.files[0]; var inpt = document.getElementById("file"); var prev = document.getElementById("filepreview"); var noimg = document.getElementById("noimage"); if (noimg) noimg = document.getElementById("noimage").parentNode; var read = new FileReader(); read.readAsDataURL(file); read.onload = function() { inpt.style.display = "none"; if (noimg) noimg.style.display = "none"; prev.removeAttribute("style"); var fname = file.name.length < 20 ? file.name : file.name.substr(0, 19) + "…"; if (file.type.startsWith("image")) prev.insertAdjacentHTML("beforeend", ' ' + fname); else prev.insertAdjacentHTML("beforeend", fname); prev.appendChild(document.createTextNode(" [")); var btn = document.createElement("a"); btn.href = "#"; btn.innerText = "Quitar"; btn.addEventListener("click", function(e) { e.preventDefault(); prev.innerHTML = ""; prev.style.display = "none"; inpt.removeAttribute("style"); if (noimg) noimg.removeAttribute("style"); inpt.value = ""; }); prev.appendChild(btn); prev.appendChild(document.createTextNode("] ")); }; } 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(); addEventListener("submit", saveInputs); } } } function getPassword() { if (weabot.password) return weabot.password; var pass = ""; var char = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789?!-_."; for (var i=0; i<10; i++) { pass += char[Math.floor(Math.random() * char.length)]; } weabot.password = pass; localStorage.setItem("weabot", JSON.stringify(weabot)); return pass; } function catSearch() { var filter = this.value.toLowerCase(); var nodes = document.getElementsByTagName("p"); for (var i = 0; i < nodes.length; i++) { if (nodes[i].innerText.toLowerCase().includes(filter)) nodes[i].parentNode.removeAttribute("style"); else nodes[i].parentNode.style.display = "none"; } } function togglePost(e) { if (e.tagName == "DIV") { var post = e.parentElement; } else { var post = e.parentElement.parentElement; } var pid = post.id.slice(1); var typ = post.id.charAt(0); var itm = "hid-" + typ + "-" + document.body.dataset.brd; var hidp = localStorage.getItem(itm); var hid = Array(); if (hidp) hid = hidp.split("!"); if (post.classList.contains("hidden")) { if (hid.includes(pid)) hid.splice(hid.indexOf(pid), 1); } else { if (!hid.includes(pid)) hid.push(pid); } post.classList.toggle("hidden"); localStorage.setItem(itm, hid.join("!")); } document.addEventListener("DOMContentLoaded", function(e) { var board = document.body.dataset.brd; checkhighlight(); if (localStorage.hasOwnProperty("weabot")) { weabot = JSON.parse(localStorage.getItem("weabot")); } else { weabot = { name: null, email: null, password: null }; } var a = document.getElementById("main_nav").getElementsByTagName("a"); for (var i = 0; i < a.length; i++) { if (a[i].getAttribute("href") == "/" + board + "/") { a[i].className = "cur_brd"; break; } } for (var i=0; i<2; i++) { var type = "pt".charAt(i); var hidp = localStorage.getItem("hid-" + type + "-" + board); if (hidp) { var hid = hidp.split("!"); for (var j = 0; j < hid.length; j++) { var post = document.getElementById(type+hid[j]); if (post) post.classList.add("hidden"); } } } var styleSelect = document.getElementById("styles"); if (styleSelect) { styleSelect.addEventListener("change", function(e) { setTheme(this.value); }); styleSelect.value = localStorage.getItem(style_cookie); } if (document.getElementById("postform")) { setInputs("postform"); postform.file.addEventListener("change", filePreview); } var del = document.getElementById("delform"); if (del) del.password.value = weabot.password; var cat = document.getElementById("catalog"); if (cat) { if (j>0) { document.getElementById("hid-label").removeAttribute("style"); document.getElementById("hid-num").innerText = j; } document.getElementById("cat-size").addEventListener("click", function(e) { e.preventDefault(); var thumb = cat.getElementsByTagName("img"); if (cat.classList.contains("enlarged")) { for (var i = 0; i < thumb.length; i++) { thumb[i].src = thumb[i].src.replace("/thumb/", "/cat/"); } } else { for (var i = 0; i < thumb.length; i++) { thumb[i].src = thumb[i].src.replace("/cat/", "/thumb/"); } } cat.classList.toggle("enlarged"); this.innerText = (this.innerText == "Pequeño") ? "Grande" : "Pequeño"; }); document.getElementById("cat-hide").addEventListener("click", function(e) { e.preventDefault(); cat.classList.toggle("notxt"); this.innerText = (this.innerText == "Ocultar") ? "Mostrar" : "Ocultar"; }); document.getElementById("cat-srch").addEventListener("keyup", catSearch); document.getElementById("hid-num").addEventListener("click", function(e) { e.preventDefault(); cat.classList.toggle("showhid"); }); } else { window.addEventListener("hashchange", checkhighlight); } }); document.addEventListener("click", function(e) { var cn = e.target.className; if (cn == "num") { e.preventDefault(); postClick(e.target.textContent); return; } if (cn == "expimg") { e.preventDefault(); expandimg(e.target); return; } if (cn == "tt") { e.preventDefault(); togglePost(e.target); return; } }, false); document.addEventListener("dblclick", function(e) { if (e.target.closest(".info")) { e.preventDefault(); togglePost(e.target.closest(".info")); return; } }, false);