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

                                                     



                                     


                                                                             

 
                             
                                           
                            





                                                                 

 


                                                                                          







                                                          




                                              




                                                                          

                         
                                                         
              




                                      

                                                                           




                                                         










                                                                         



     

                       




















                                                                            



                        
                                                       

                         










                                                                       

 
                         
                                             




                                         




                           
                                                               
 


                                                            
 

                                                       

                                   
                                             
 


                                                                            
 










                                                                          





                                                    



































                                                                   




                                                           
                     




                                                             

                                                                                                                           
                                     
                            










                                                               


                                                            




                                                    












                                                       

 


                                         


                                              
                                            


                                           
                                          




                                                                           
                                                 
                   

                                                         

                   
                                                                
   


                                                             
                       
                                                         


                           
                                                          


                                                            
 
                                    


                                                 




                                                           
     
   
 
                                                   




                                               


                                                 
                                                                  

                         


                                                






                                                                                

                                         
                            


                                                                           
     

   
                                                    


                                                                   
 



                                                              

   
                                                    
                                                     






                                                    
                                                     






                                                    
                                                                              







                                                               
   
 
                                                 
                                                                 
 

                                                           

                                                  
     
                                                                 
   
   
















                                      
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
);