diff options
author | bai | 2019-03-29 02:14:43 +0000 |
---|---|---|
committer | bai | 2019-03-29 02:14:43 +0000 |
commit | 95dfe14528663923ca2a88ec928f1d8d9df2402b (patch) | |
tree | 5bc88d1466957f1aa39043b056bde5c439648022 /static/js/weabotxt.js | |
download | weabot-95dfe14528663923ca2a88ec928f1d8d9df2402b.tar.gz weabot-95dfe14528663923ca2a88ec928f1d8d9df2402b.tar.xz weabot-95dfe14528663923ca2a88ec928f1d8d9df2402b.zip |
Init
Diffstat (limited to 'static/js/weabotxt.js')
-rw-r--r-- | static/js/weabotxt.js | 299 |
1 files changed, 299 insertions, 0 deletions
diff --git a/static/js/weabotxt.js b/static/js/weabotxt.js new file mode 100644 index 0000000..37668d8 --- /dev/null +++ b/static/js/weabotxt.js @@ -0,0 +1,299 @@ +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 changeDate() { + var dts = document.getElementsByClassName("date"); + if (dts[0].dataset.unix) { + week = ["dom", "lun", "mar", "mie", "jue", "vie", "sab"]; + if (board == "world") week = ["sun", "mon", "tue", "wed", "thu", "fri", "sat"]; + for(var d=0;d<dts.length;d++) { + dts[d].addEventListener('mouseover', function(e) { this.title = "Hace " + timeAgo(this.dataset.unix); }); + if (dts[d].innerText.includes("ID:")) var id = dts[d].innerText.split(" ")[1]; + dts[d].innerText = localTime(dts[d].dataset.unix, id); + } + } +} + +function timeAgo(timestamp) { + var time = Math.round(Date.now()/1000); + var el = time - timestamp; + if (el==0) return "un instante"; + else if (el==1) return "un segundo"; + else if (el<60) return el + " segundos"; + else if (el<120) return "un minuto"; + else if (el<3600) return Math.round(el/60) + " minutos"; + else if (el<7200) return "una hora"; + else if (el<86400) return Math.round(el/3600) + " horas"; + else if (el<172800) return "un día"; + else if (el<2628000) return Math.round(el/86400) + " días"; + else if (el<5256000) return "un mes"; + else if (el<31536000) return Math.round(el/2628000) + " meses"; + else if (el>31535999) return "más de un año"; +} + +function localTime(timestamp, id) { + id = id || 0; + var lcl = new Date(timestamp*1000); + lcl = ("0"+lcl.getDate()).slice(-2) + "/" + ("0" + (lcl.getMonth()+1)).slice(-2) + "/" + lcl.getFullYear().toString().slice(-2) + "(" + week[lcl.getDay()] + ")" + ("0"+lcl.getHours()).slice(-2) + ":" + ("0"+lcl.getMinutes()).slice(-2) + ":" + ("0"+lcl.getSeconds()).slice(-2) + if (id) lcl = lcl + " " + id; + return lcl; +} + +/* 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 char="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; + var pass=""; + for (var i=0;i<8;i++) { + var rnd = Math.floor(Math.random()*char.length); + pass += char.substring(rnd, rnd+1); + } + 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); + } + } +} + +function setPassword(id) { + if (document.getElementById(id).password) + with (document.getElementById(id)) + if(!password.value) password.value = getPassword("weabot_password"); +} + +// 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 = this.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; + } + e.preventDefault(); +} + +function postClick(e) { + e.preventDefault(); + var sel = window.getSelection().toString(); + if (sel) { sel=sel.replace(/^/gm, ">")+"\n"; sel="\n"+sel; } + insert(">>" + this.textContent + 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="<em>Cargando...</em>"; + + 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].innerText) - parseInt(b.childNodes[1].innerText)) }); } + 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.innerText = '#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].innerText.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].style.display = 'block'; +} +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("!")); +} + +document.addEventListener("DOMContentLoaded", function() { + if (localStorage.hasOwnProperty("weabot")) weabot = JSON.parse(localStorage.getItem("weabot")); + else weabot = {"name":null,"email":null,"password":null}; + + board = document.getElementsByName("board")[0].value; + + if(localStorage.getItem("shobon_time") != "false") { + changeDate(); + } + + var ids = document.getElementsByClassName("num"); + for(var i=0;i<ids.length;i++) ids[i].addEventListener('click', postClick); + + var forms = document.getElementsByTagName("form"); + for(var i=0;i<forms.length;i++) { if(forms[i].id.startsWith("postform")) setInputs(forms[i].id); } + + var sss = document.getElementsByClassName("ss"); + var style = localStorage.getItem(style_cookie); + for(var i=0;i<sss.length;i++) { + sss[i].addEventListener("click", function() { + set_stylesheet(this.textContent); + var cur = document.getElementById("cur_stl"); + if (cur) cur.removeAttribute("id"); + this.id = "cur_stl"; + }); + if (sss[i].innerText == style) sss[i].id = "cur_stl"; + } + + var dds = document.getElementsByClassName("del"); + for(var i=0;i<dds.length;i++) { dds[i].children[1].addEventListener("click", deletePost); } + + var where = document.getElementById(document.getElementsByName("board")[0].value); + if (where) where.className = "cur_brd"; + + if (document.body.className == "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("!"); + + var pps = document.getElementsByClassName("date"); + for(var i=0;i<pps.length;i++) { + if(hiddenposts.includes(board+pps[i].dataset.unix)) { + console.log(pps[i].dataset.unix); + hidepost(pps[i].parentElement.parentElement); + } + + pps[i].parentElement.addEventListener('dblclick', togglepost); + } +});
\ No newline at end of file |