aboutsummaryrefslogtreecommitdiff
path: root/static/js/weabot.js
diff options
context:
space:
mode:
Diffstat (limited to 'static/js/weabot.js')
-rw-r--r--static/js/weabot.js315
1 files changed, 91 insertions, 224 deletions
diff --git a/static/js/weabot.js b/static/js/weabot.js
index 9ab84f3..3371437 100644
--- a/static/js/weabot.js
+++ b/static/js/weabot.js
@@ -1,6 +1,9 @@
var style_cookie = "weabot_style_ib";
+if (localStorage.hasOwnProperty(style_cookie)) {
+ setTheme(localStorage.getItem(style_cookie));
+}
-function set_stylesheet(styletitle) {
+function setTheme(styletitle) {
var css = document.getElementById("css");
if (css) {
css.href = "/static/css/" + styletitle.toLowerCase() + ".css";
@@ -8,11 +11,6 @@ function set_stylesheet(styletitle) {
}
}
-if (style_cookie && localStorage.hasOwnProperty(style_cookie)) {
- set_stylesheet(localStorage.getItem(style_cookie));
-}
-
-var hiddenthreads = Array();
/* 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*/) {
@@ -69,7 +67,7 @@ function checkhighlight() {
function highlight(post) {
var hl = document.getElementsByClassName("reply highlight");
if (hl.length) { hl[0].className = "reply"; }
- var reply = document.getElementById("reply" + post);
+ var reply = document.getElementById("p" + post);
if (reply) {
reply.className = "reply highlight";
var match = /^([^#]*)/.exec(document.location.toString());
@@ -188,27 +186,6 @@ function filePreview(e) {
};
}
-function togglethread(e) {
- if (e.parentElement.id.startsWith("unhide")) {
- var threadid = e.parentElement.id.substr(6);
- } else if (e.parentElement.parentElement.id.startsWith("thread")) {
- var threadid = e.parentElement.parentElement.id.substr(6);
- } else {
- return;
- }
- if (hiddenthreads.toString().indexOf(threadid) !== -1) {
- document.getElementById("unhide" + threadid).style.display = "none";
- document.getElementById("thread" + threadid).removeAttribute("style");
- hiddenthreads.splice(hiddenthreads.indexOf(threadid), 1);
- } else {
- document.getElementById("unhide" + threadid).removeAttribute("style");
- document.getElementById("thread" + threadid).style.display = "none";
- hiddenthreads.push(threadid);
- }
- if (hiddenthreads == "") localStorage.removeItem("hiddenthreads");
- else localStorage.setItem("hiddenthreads", hiddenthreads.join("!"));
-}
-
function saveInputs(e) {
var e = e || window.event;
var form = e.target || e.srcElement;
@@ -224,7 +201,8 @@ function setInputs(id) {
fielda.value = weabot.name;
if (typeof fielda !== "undefined" && !fieldb.value && weabot.email)
fieldb.value = weabot.email;
- if (!password.value) password.value = getPassword();
+ if (!password.value)
+ password.value = getPassword();
addEventListener("submit", saveInputs);
}
}
@@ -232,10 +210,10 @@ function setInputs(id) {
function getPassword() {
if (weabot.password) return weabot.password;
+
var pass = "";
- var char =
- "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789?!-_.";
- while (pass.length < 10) {
+ var char = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789?!-_.";
+ for (var i=0; i<10; i++) {
pass += char[Math.floor(Math.random() * char.length)];
}
weabot.password = pass;
@@ -243,154 +221,51 @@ function getPassword() {
return pass;
}
-function catSort(type) {
- for (var i = 0; i < srt.length; i++) srt[i].innerHTML = srt[i].innerText;
- srt[type].innerHTML = "<b>" + srt[type].innerText + "</b>";
- var cont = document.getElementById("catalog");
- var elem = document.getElementsByClassName("thread");
- var arr = Array.prototype.slice.call(elem);
- if (type == 0)
- arr.sort(function(a, b) { return a.dataset.num - b.dataset.num; });
- else if (type == 1)
- arr.sort(function(a, b) { return b.dataset.id - a.dataset.id; });
- else if (type == 2)
- arr.sort(function(a, b) { return a.dataset.id - b.dataset.id; });
- else if (type == 3)
- arr.sort(function(a, b) { return b.dataset.res - a.dataset.res; });
- else if (type == 4)
- arr.sort(function(a, b) { return a.dataset.res - b.dataset.res; });
- for (var j = 0; j < arr.length; j++) cont.appendChild(arr[j]);
- localStorage.setItem("catalog", JSON.stringify(opcs));
-}
-
function catSearch() {
- var filter = document.getElementById("cat_search").value.toLowerCase();
+ var filter = this.value.toLowerCase();
var nodes = document.getElementsByTagName("p");
- for (i = 0; i < nodes.length; i++) {
+ 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 catThumbs(big) {
- var btn = document.getElementById("cat_size");
- var cat = document.getElementById("catalog");
- var threads = document.getElementsByClassName("thread");
- if (opcs.big) {
- cat.className = "enlarged";
- for (j = 0; j < threads.length; j++) {
- img = threads[j].getElementsByTagName("a")[0];
- img.innerHTML = img.innerHTML.replace("/cat/", "/thumb/");
- }
- btn.innerText = "Grande";
+function togglePost(e) {
+ if (e.tagName == "DIV") {
+ var post = e.parentElement;
} else {
- cat.removeAttribute("class");
- for (j = 0; j < threads.length; j++) {
- img = threads[j].getElementsByTagName("a")[0];
- img.innerHTML = img.innerHTML.replace("/thumb/", "/cat/");
- }
- btn.innerText = "Pequeño";
+ var post = e.parentElement.parentElement;
}
- localStorage.setItem("catalog", JSON.stringify(opcs));
-}
-
-function catTeasers(teaser) {
- var btn = document.getElementById("cat_hide");
- if (!teaser) {
- var style = document.createElement("style");
- style.id = "teaser_style";
- style.type = "text/css";
- style.innerText = "#catalog p {display:none}";
- document.head.appendChild(style);
- btn.innerText = "Mostrar";
+
+ 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 {
- var style = document.getElementById("teaser_style");
- if (style) style.parentNode.removeChild(style);
- btn.innerText = "Ocultar";
+ if (!hid.includes(pid)) hid.push(pid);
}
- localStorage.setItem("catalog", JSON.stringify(opcs));
-}
-
-function catMenu(e) {
- var brd = document.getElementsByName("board")[0].value;
- var id = this.dataset.id;
- this.insertAdjacentHTML("afterbegin",
- '<div id="thread_ctrl" style="margin-bottom:3px;">[<a href="/cgi/report/' +
- brd + "/" + id + '">Denunciar</a>] [<a href="#" class="hh">Ocultar</a>]');
- this.getElementsByClassName("hh")[0].addEventListener("click", function(e) {
- document.getElementById("cat" + id + brd).style.display = "none";
- hiddenthreads.push(id + brd);
- localStorage.setItem("hiddenthreads", hiddenthreads.join("!"));
- if (document.getElementById("hidden_label")) {
- hidden_num++;
- document.getElementById("hidden_num").innerText = hidden_num;
- } else {
- hidden_num = 1;
- catHidden();
- }
- });
-}
-
-function catMenuClose(e) {
- document.getElementById("thread_ctrl").remove();
-}
-
-function catHidden() {
- var menu = document.getElementById("ctrl");
- menu.insertAdjacentHTML(
- "beforeend",
- ' <span id="hidden_label">[Hilos ocultos: <span id="hidden_num">' +
- hidden_num +
- "</span> - "
- );
- var lbl = document.getElementById("hidden_label");
- var shw = document.createElement("a");
- shw.href = "#";
- shw.innerText = "Deshacer";
- shw.addEventListener("click", function(e) {
- e.preventDefault();
- for (var i = 0; i < hiddenthreads.length; i++) {
- try {
- document.getElementById("cat" + hiddenthreads[i]).removeAttribute("style");
- } catch (err) {
- continue;
- }
- }
- lbl.parentElement.removeChild(lbl);
- hidden_num = 0;
- var aux = hiddenthreads.join("!");
- var exp = new RegExp(
- "\\b[0-9]+" + document.getElementsByName("board")[0].value + "\\b",
- "g"
- );
- aux = aux.replace(exp, "!");
- aux = aux.replace(/!+/g, "!");
- aux = aux.replace(/(^!|!$)/g, "");
- if (aux == "") {
- localStorage.removeItem("hiddenthreads");
- hiddenthreads = [];
- } else {
- localStorage.setItem("hiddenthreads", aux);
- hiddenthreads = aux.split("!");
- }
- });
- lbl.appendChild(shw);
- lbl.appendChild(document.createTextNode("]"));
-}
+ post.classList.toggle("hidden");
-function applyTheme() {
- var newTheme = document.getElementById("styles").value;
- set_stylesheet(newTheme);
+ localStorage.setItem(itm, hid.join("!"));
}
document.addEventListener("DOMContentLoaded", function(e) {
+ var board = document.body.dataset.brd;
checkhighlight();
- if (localStorage.hasOwnProperty("weabot"))
+
+ if (localStorage.hasOwnProperty("weabot")) {
weabot = JSON.parse(localStorage.getItem("weabot"));
- else weabot = { name: null, email: null, password: null };
-
- board = document.body.dataset.brd;
+ } 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 + "/") {
@@ -399,36 +274,21 @@ document.addEventListener("DOMContentLoaded", function(e) {
}
}
- if (localStorage.hasOwnProperty("hiddenthreads")) {
- hiddenthreads = localStorage.getItem("hiddenthreads").split("!");
- if (document.getElementById("catalog")) {
- hidden_num = 0;
- for (var i = 0; i < hiddenthreads.length; i++) {
- try {
- document.getElementById("cat" + hiddenthreads[i]).style.display = "none";
- hidden_num++;
- } catch (err) {
- continue;
- }
- }
- if (hidden_num) {
- catHidden();
- }
- } else {
- for (var i = 0; i < hiddenthreads.length; i++) {
- try {
- document.getElementById("unhide" + hiddenthreads[i]).removeAttribute("style");
- document.getElementById("thread" + hiddenthreads[i]).style.display = "none";
- } catch (err) {
- continue;
- }
+ 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", applyTheme, false);
+ styleSelect.addEventListener("change", function(e) { setTheme(this.value); });
styleSelect.value = localStorage.getItem(style_cookie);
}
@@ -440,47 +300,46 @@ document.addEventListener("DOMContentLoaded", function(e) {
var del = document.getElementById("delform");
if (del) del.password.value = weabot.password;
- window.addEventListener("hashchange", checkhighlight);
-
- if (document.getElementById("catalog")) {
- srt = document.getElementsByClassName("cat_sort");
- for (var i = 0; i < srt.length; i++) {
- srt[i].innerHTML = srt[i].innerText;
- srt[i].addEventListener("click", function(e) {
- e.preventDefault();
- opcs.sort = this.dataset.sort;
- catSort(opcs.sort);
- });
+ 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) {
+
+ document.getElementById("cat-size").addEventListener("click", function(e) {
e.preventDefault();
- opcs.big = !opcs.big;
- catThumbs(opcs.big);
+ 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) {
+
+ document.getElementById("cat-hide").addEventListener("click", function(e) {
e.preventDefault();
- opcs.teaser = !opcs.teaser;
- catTeasers(opcs.teaser);
+ cat.classList.toggle("notxt");
+ this.innerText = (this.innerText == "Ocultar") ? "Mostrar" : "Ocultar";
});
- document.getElementById("cat_search").addEventListener("keyup", catSearch);
- if (localStorage.hasOwnProperty("catalog")) {
- opcs = JSON.parse(localStorage.getItem("catalog"));
- if ((match = /\?sort=([0-9])/.exec(document.location.toString())))
- opcs.sort = match[1];
- catSort(opcs.sort);
- catThumbs(opcs.big);
- catTeasers(opcs.teaser);
- } else {
- opcs = { sort: 1, big: false, teaser: true };
- localStorage.setItem("catalog", JSON.stringify(opcs));
- }
- var thr = document.getElementsByClassName("thread");
- for (var i = 0; i < thr.length; i++) {
- thr[i].addEventListener("mouseenter", catMenu);
- thr[i].addEventListener("mouseleave", catMenuClose);
- }
+
+ 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") {
@@ -488,14 +347,22 @@ document.addEventListener("click", function(e) {
postClick(e.target.textContent);
return;
}
- if (cn == "tt") {
+ if (cn == "expimg") {
e.preventDefault();
- togglethread(e.target);
+ expandimg(e.target);
return;
}
- if (cn == "expimg") {
+ if (cn == "tt") {
e.preventDefault();
- expandimg(e.target);
+ togglePost(e.target);
return;
}
}, false);
+
+document.addEventListener("dblclick", function(e) {
+ if (e.target.closest(".info")) {
+ e.preventDefault();
+ togglePost(e.target.closest(".info"));
+ return;
+ }
+}, false); \ No newline at end of file