aboutsummaryrefslogblamecommitdiff
path: root/static/js/weabotxt.js
blob: 1301387f7f9c053d0c6dcaf1b8768c11ad1cc8c7 (plain) (tree)
1
2
3
4
5
6
7
8
9
                                      


                                                               




                                           
                                                                      


                                                










                                                             













                                                                                           





                                                                                 
                                                         
               





















                                                                                                           




















                                                                                                      
                                                       





                                                                                                        

 
                         

                                                              
                       































                                                                                                                           
                                                                                                                                           















                                                                                                                                                                                                                                                                    
                                                                                                                                             













                                                               
                                                                                                          


















                                                                                        
                                            


                                           
                                          




                                                                           






                                                                                        


                                                             
                      
                                                         


                           



                                                                                                 
                                    


                                                 


                                                                                            
   
 
                                                   
                         






















                                                                                    
     

   


                                                                                                    



                                                              

   
                                                    







                                                                                                                                                    
 

                                                                 
 



                                                        
     
                                                                 
   













                                                
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="<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].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 = '<a href="/" target="_top">Bienvenido a Internet</a> | ';
      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);