From 081ddc03aef7becc3b084a9079a2574fd3e3b49b Mon Sep 17 00:00:00 2001 From: Choom Date: Sat, 28 Jan 2023 00:52:56 -0300 Subject: userconf --- static/js/aquiencitas.js | 3 +- static/js/autorefresh.js | 83 +++++---- static/js/shobon.js | 435 ----------------------------------------------- static/js/userconf.js | 116 +++++++------ static/js/weabot.js | 11 +- static/js/weabotxt.js | 144 +++++++++++----- 6 files changed, 222 insertions(+), 570 deletions(-) delete mode 100644 static/js/shobon.js (limited to 'static/js') diff --git a/static/js/aquiencitas.js b/static/js/aquiencitas.js index 309df8f..4e137d9 100644 --- a/static/js/aquiencitas.js +++ b/static/js/aquiencitas.js @@ -154,8 +154,7 @@ function quotePreview() { is_bbs = true; else is_bbs = false; - if (is_bbs) replies = document.getElementsByClassName("msg"); - else replies = document.getElementsByTagName("blockquote"); + replies = document.getElementsByClassName("msg"); var urls = window.location.pathname.split("/"); cur_url = "/" + ((urls[2]) ? urls[1] + "/" + urls[2] + "/" + urls[3] : urls[1]); diff --git a/static/js/autorefresh.js b/static/js/autorefresh.js index d804675..e3fb4b6 100644 --- a/static/js/autorefresh.js +++ b/static/js/autorefresh.js @@ -22,17 +22,13 @@ function loadJSON() { if (manual) document.getElementById("counter").innerText = "..."; var data_file; if (serviceType == 2 || serviceType == 3) { - board = document.getElementsByName("board")[0].value; + board = document.body.dataset.brd; parent = document.getElementsByName("parent")[0].value; data_file = - "/cgi/api/thread?dir=" + - board + - "&id=" + - parent + - "&offset=" + - thread_length + - "&time=" + - lastTime; + "/cgi/api/thread?dir=" + board + + "&id=" + parent + + "&offset=" + thread_length + + "&time=" + lastTime; } else { return false; } @@ -216,27 +212,35 @@ function updateThread(posts, total_replies, serverTime) { threadDiv.setAttribute("data-length", num); - if (serviceType == 2) + if (serviceType == 2) { document .getElementsByTagName("h3")[0] .getElementsByTagName("span")[0].innerText = "(" + num + " respuestas)"; + } } if (posts.length > 0) { if (!manual) refreshMaxTime = 10; if (!document.hasFocus()) - if (posts.length > 1) + if (posts.length > 1) { notif(thread_title, posts.length + " nuevos mensajes"); - else notif(thread_title, "Un nuevo mensaje"); + } else { + notif(thread_title, "Un nuevo mensaje"); + } } else { - if (refreshMaxTime <= 60) refreshMaxTime += 5; + if (refreshMaxTime <= 60) { + refreshMaxTime += 5; + } } thread_length = parseInt(total_replies) + 1; new_unread = thread_length - thread_first_length; - if (new_unread) document.title = "(" + new_unread + ") " + thread_title; - else document.title = thread_title; + if (new_unread) { + document.title = "(" + new_unread + ") " + thread_title; + } else { + document.title = thread_title; + } } function notif(title, msg) { @@ -263,9 +267,9 @@ function detectService() { document.getElementsByClassName("thread")[0].dataset.length ); thread_first_length = thread_length; - replylist = document.getElementsByClassName("reply"); - lastr = replylist[replylist.length - 1].textContent; - thread_lastreply = parseInt(lastr.substr(0, lastr.indexOf(" :"))); + thread_lastreply = parseInt( + document.getElementsByClassName("replies")[0].lastElementChild.dataset.n + ); if (thread_length == thread_lastreply) { serviceType = 2; document.getElementById("n").addEventListener("click", checkNew); @@ -300,8 +304,6 @@ function detectService() { document.getElementsByClassName("thread")[0].dataset.length ); thread_first_length = thread_length; - replylist = document.getElementsByClassName("thread"); - replylist += document.getElementsByClassName("reply"); var footer = document.getElementsByClassName("nav")[1]; var mnl = document.createElement("a"); mnl.id = "shownew"; @@ -346,15 +348,12 @@ function stopCounter(str) { } function autoRefresh(e) { - chk_snd = document.getElementById("autosound"); if (document.getElementById("autorefresh").checked) { - if (chk_snd) chk_snd.disabled = false; Notification.requestPermission(); lastTime = Math.floor(Date.now() / 1000); refreshTime = refreshMaxTime; startCounter(); } else { - if (chk_snd) document.getElementById("autosound").disabled = true; stopCounter("OFF"); } } @@ -374,31 +373,31 @@ http_request.onreadystatechange = function() { manual = 0; } }; + +function setCookie(e) { + if (chk.checked) { + weabot.autorefresh = true; + } else { + weabot.autorefresh = false; + } + localStorage.setItem("weabot", JSON.stringify(weabot)); +} + document.addEventListener("DOMContentLoaded", function() { if (!detectService()) return; + if (localStorage.hasOwnProperty("weabot")) { + weabot = JSON.parse(localStorage.getItem("weabot")); + } else { + weabot = { autorefresh: false }; + } + chk = document.getElementById("autorefresh"); - chk_snd = document.getElementById("autosound"); - if (localStorage.getItem("autorefresh")) { - document.getElementById("autorefresh").checked = true; + if (weabot.autorefresh) { + chk.checked = true; autoRefresh(); } - if (!chk_snd) return; - if (localStorage.getItem("mainpage_nosound")) - document.getElementById("autosound").checked = false; -}); - -window.addEventListener("unload", function() { - if (!serviceType) return; - - chk = document.getElementById("autorefresh"); - chk_snd = document.getElementById("autosound"); - if (chk.checked) localStorage.setItem("autorefresh", true); - else localStorage.removeItem("autorefresh"); - if (!chk_snd) return; - if (!document.getElementById("autosound").checked) - localStorage.setItem("mainpage_nosound", true); - else localStorage.removeItem("mainpage_nosound"); + chk.addEventListener('change', setCookie); }); diff --git a/static/js/shobon.js b/static/js/shobon.js deleted file mode 100644 index 3a790a7..0000000 --- a/static/js/shobon.js +++ /dev/null @@ -1,435 +0,0 @@ -var are_filters = false; -var hide_word = new Set(); -var hide_name = new Set(); -var hide_id = new Set(); - -var shobon_ver = "v0.4+"; -function shobon() { - boardName = document.body.dataset.brd; - var where = document.body.classList; - var inThread = where.contains("threadpage"); - - if (!inThread) { - /* Create settings link */ - var box = document.getElementsByClassName("links")[0]; - box.appendChild(document.createTextNode(" | ")); - var slnk = document.createElement("a"); - slnk.href = "#"; - slnk.innerHTML = "Configurar"; - slnk.addEventListener("click", shobonSettings); - box.appendChild(slnk); - } - - if (localStorage.getItem("shobon_on") == "false") return; - else console.log("Running shobon " + shobon_ver); - - var newRepliesCounter = 0; - - if (localStorage.getItem("shobon_usefilters") != "false") { - loadFilters(); - } - - var threadList = document.getElementsByClassName("thread"); - for (var i = 0; i < threadList.length; i++) { - var threadId; - var thread = threadList[i]; - var replyList = thread.getElementsByClassName("reply"); - if (inThread) { - threadId = document.getElementsByName("parent")[0].value; - } else { - threadId = thread.getElementsByTagName("input").parent.value; - } - - var lastReplyN = replyList[replyList.length - 1].attributes["data-n"].value; - if ( - localStorage.getItem("shobon_newposts") == "true" && - localStorage.getItem(boardName + "_" + threadId) == null - ) { - localStorage.setItem(boardName + "_" + threadId, lastReplyN); - } - var lastSeen = localStorage.getItem(boardName + "_" + threadId); - var newRepliesInThread = 0; - - for (var e = 0; e < replyList.length; e++) { - var reply = replyList[e]; - var message = reply.getElementsByClassName("msg")[0]; - var id = 0; - - if (localStorage.getItem("shobon_newposts") == "true") { - var replyId = reply.attributes["data-n"].value; - var isNewReply = parseInt(lastSeen) < parseInt(replyId); - - if (isNewReply) { - newRepliesCounter++; - newRepliesInThread++; - reply.children[0].innerHTML += " Nuevo!"; - } - } - - // ocultar mensajes que coinciden con lista negra - if (are_filters) { - checkBlackList(reply); - } - // colorear IDs - if (localStorage.getItem("shobon_ids") == "true") { - paintIds(reply); - } - // insertar imágenes - if (localStorage.getItem("shobon_embedimg") == "true") { - embedImg(reply); - } - } - if (newRepliesInThread > 0 && !inThread) { - var btnNew = document.createElement("span"); - btnNew.dataset.id = boardName + "_" + threadId; - btnNew.dataset.last = lastReplyN; - btnNew.textContent = "Marcar como leído"; - btnNew.setAttribute( - "style", - "font-weight:bold; background:#81a2be; padding:5px; border-radius:5px; float:right; margin-bottom:10px;" - ); - btnNew.onclick = function() { - localStorage.setItem(this.dataset.id, this.dataset.last); - this.hidden = true; - }; - thread.getElementsByClassName("threadlinks")[0].appendChild(btnNew); - } - } - if (newRepliesCounter > 0 && !inThread) { - var banner = document.createElement("span"); - banner.onclick = function() { - this.hidden = true; - }; - banner.setAttribute( - "style", - "font-weight:bold; background:#8c9440; padding:8px; border-radius:30px; float:right; position:fixed; bottom:10px; right:10px" - ); - banner.textContent = "Nuevas respuestas: " + newRepliesCounter; - document.body.appendChild(banner); - } - - if (localStorage.getItem("shobon_newposts") == "true" && inThread) { - localStorage.setItem(boardName + "_" + threadId, lastReplyN); - } -} - -function on_checked(e) { - localStorage.setItem(e.target.id, e.target.checked); -} -function createCheckbox(name, label, def) { - var lbl = document.createElement("label"); - var chk = document.createElement("input"); - chk.type = "checkbox"; - chk.id = name; - chk.onchange = on_checked; - lbl.appendChild(chk); - lbl.insertAdjacentHTML("beforeend", " " + label + " "); - - var checked = localStorage.getItem(name); - if (checked !== null) { - chk.checked = checked == "true"; - } else { - chk.checked = def; - } - - return lbl; -} -function createOption(name, label) { - var opt = document.createElement("option"); - opt.value = name; - opt.text = label; - return opt; -} -function createButton(label, func) { - var btn = document.createElement("button"); - btn.type = "button"; - btn.textContent = label; - btn.onclick = func; - return btn; -} -function createTh(label, w) { - var th = document.createElement("th"); - th.textContent = label; - th.width = w; - return th; -} - -function loadFilters() { - var filters = JSON.parse(localStorage.getItem("shobon_filters")); - - if (filters) { - are_filters = true; - hide_word = new Set(filters.word); - hide_name = new Set(filters.name); - hide_id = new Set(filters.id); - } -} -function saveFilters() { - var filters = { - word: Array.from(hide_word), - name: Array.from(hide_name), - id: Array.from(hide_id) - }; - localStorage.setItem("shobon_filters", JSON.stringify(filters)); -} -function deleteFilter(e) { - var tr = this.parentElement.parentElement; - var name = tr.dataset.name; - var type = tr.dataset.type; - switch (type) { - case "word": - hide_word.delete(name); - break; - case "name": - hide_name.delete(name); - break; - case "id": - hide_id.delete(name); - break; - } - saveFilters(); - tr.remove(); -} -function addFilter(e) { - var name = document.getElementById("txt_filter").value; - var type = document.getElementById("lst_type").value; - if (!name) { - return; - } - - switch (type) { - case "word": - hide_word.add(name); - break; - case "name": - hide_name.add(name); - break; - case "id": - hide_id.add(name); - break; - } - addToFilterTable(name, type); - saveFilters(); - document.getElementById("txt_filter").value = ""; -} - -function addToFilterTable(name, type) { - var dict = { word: "Palabra", name: "Nombre/Tripcode", id: "ID" }; - var table = document.getElementById("tbl_filters"); - - var td_type = document.createElement("td"); - td_type.textContent = dict[type]; - var td_name = document.createElement("td"); - td_name.textContent = name; - var td_btn = document.createElement("td"); - td_btn.appendChild(createButton("X", deleteFilter)); - - var tr = document.createElement("tr"); - tr.dataset.type = type; - tr.dataset.name = name; - tr.appendChild(td_type); - tr.appendChild(td_name); - tr.appendChild(td_btn); - - table.appendChild(tr); -} -function shobonSettings(e) { - e.preventDefault(); - - var titlebox = document.getElementById("titlebox"); - - var box = document.getElementById("settings"); - if (box) { - box.hidden = !box.hidden; - } else { - box = document.createElement("div"); - box.id = "settings"; - box.className = "innerbox"; - box.style.textAlign = "center"; - - var p = document.createElement("div"); - p.appendChild(createCheckbox("shobon_on", "Activar extensión", true)); - p.appendChild(createCheckbox("shobon_ids", "Colorear IDs", false)); - p.appendChild(createCheckbox("shobon_embedimg", "Insertar imágenes miniatura", false)); - p.appendChild(createCheckbox("shobon_newposts", "Destacar mensajes nuevos", false)); - p.appendChild(createCheckbox("shobon_backlink", "Mostrar quién ha citado un post", true)); - p.appendChild(createCheckbox("shobon_preview", "Previsualizar citas", true)); - p.appendChild(createCheckbox("shobon_usefilters", "Activar filtros", false)); - /*var a = document.createElement("a"); - a.href = "#"; - a.textContent = "[Editar filtros]"; - a.addEventListener("click", function() { - var x = document.getElementById("filters"); - x.hidden = !x.hidden; - }); - p.appendChild(a);*/ - box.appendChild(p); - - var title2 = document.createElement("h6"); - title2.textContent = "Filtros"; - title2.style.fontSize = "18px"; - title2.style.margin = "0.5em 0"; - box.appendChild(title2); - - box.appendChild(document.createTextNode("Filtrar mensajes por: ")); - - var lst_type = document.createElement("select"); - lst_type.id = "lst_type"; - lst_type.appendChild(createOption("word", "Palabra")); - lst_type.appendChild(createOption("name", "Nombre/Tripcode")); - lst_type.appendChild(createOption("id", "ID")); - box.appendChild(lst_type); - - var txt_filter = document.createElement("input"); - txt_filter.id = "txt_filter"; - txt_filter.type = "text"; - box.appendChild(txt_filter); - - box.appendChild(createButton("Agregar", addFilter)); - - var tbl_filters = document.createElement("table"); - tbl_filters.id = "tbl_filters"; - tbl_filters.border = "1"; - tbl_filters.style.margin = "0 auto"; - var row = document.createElement("tr"); - row.appendChild(createTh("Tipo", 150)); - row.appendChild(createTh("Filtro", 300)); - row.appendChild(createTh("", 75)); - tbl_filters.appendChild(row); - box.appendChild(tbl_filters); - - var msg = document.createElement("a"); - msg.style.display = "block"; - msg.href = "#"; - msg.textContent = "Actualizar para ver cambios"; - msg.style.marginTop = "1em"; - msg.addEventListener("click", function() { - location.reload(); - }); - box.appendChild(msg); - - titlebox.appendChild(box); - - var i; - hide_word.forEach(v => { - addToFilterTable(v, "word"); - }); - hide_name.forEach(v => { - addToFilterTable(v, "name"); - }); - hide_id.forEach(v => { - addToFilterTable(v, "id"); - }); - } -} - -function checkBlackList(reply) { - var i; - - // Check words - var low = reply.children[1].textContent.toLowerCase(); - hide_word.forEach(v => { - console.log(v); - if (low.includes(v.toLowerCase())) { - hidepost(reply); - } - }); - - // Check name/trip - var msg_name = reply.firstElementChild - .getElementsByClassName("name")[0] - .textContent.toLowerCase(); - hide_name.forEach(v => { - if (msg_name.includes(hide_name[i])) { - hidepost(reply); - } - }); - - // Check ID - var date_div = reply.firstElementChild.getElementsByClassName("date")[0] - .textContent; - var id_index = date_div.indexOf("ID:"); - if (id_index != -1) { - var id = date_div.substr(id_index + 3); - - hide_id.forEach(v => { - if (id.includes(v)) { - hidepost(reply); - } - }); - } -} - -var currentSel = null; -function paintIds(reply) { - var dateId = reply.getElementsByClassName("date")[0]; - if (dateId.textContent.includes("ID:")) { - var postDate = dateId.textContent.split("ID:")[0]; - var userId = dateId.textContent.split("ID:")[1]; - var idColor = toHex(userId).substring(0, 6); - var reverseColor = invertColor(idColor); - var lastChar = userId.substring(userId.length - 1, userId.length); - dateId.innerHTML = - postDate + - "ID:" + - userId + - ""; - } -} - -function embedImg(reply) { - var links = reply.getElementsByTagName("a"); - for (i = 0; i < links.length && i < 5; i++) { - var url = links[i].href; - if (url.startsWith("https://i.imgur.com")) { - var ext = url.lastIndexOf("."); - var thumburl = url.slice(0, ext) + "s" + url.slice(ext); - } else if (links[i].href.startsWith("https://pbs.twimg.com")) { - var thumburl = links[i].href + ":thumb"; - } else continue; - var thumb = document.createElement("img"); - thumb.src = thumburl; - links[i].appendChild(document.createElement("br")); - links[i].appendChild(thumb); - } -} - -function toHex(str) { - var hex = ""; - for (var i = 0; i < str.length; i++) { - hex += "" + (str.charCodeAt(i) + 125).toString(16); - } - return hex; -} - -function invertColor(hex) { - if (hex.indexOf("#") === 0) { - hex = hex.slice(1); - } - // convert 3-digit hex to 6-digits. - if (hex.length === 3) { - hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2]; - } - if (hex.length !== 6) { - throw new Error("Invalid HEX color."); - } - // invert color components - var r = (255 - parseInt(hex.slice(0, 2), 16)).toString(16), - g = (255 - parseInt(hex.slice(2, 4), 16)).toString(16), - b = (255 - parseInt(hex.slice(4, 6), 16)).toString(16); - // pad each with zeros and return - return padZero(r) + padZero(g) + padZero(b); -} - -function padZero(str, len) { - len = len || 2; - var zeros = new Array(len).join("0"); - return (zeros + str).slice(-len); -} - -document.addEventListener("DOMContentLoaded", shobon, false); diff --git a/static/js/userconf.js b/static/js/userconf.js index 0118e88..399878e 100644 --- a/static/js/userconf.js +++ b/static/js/userconf.js @@ -1,35 +1,3 @@ -var request = new XMLHttpRequest(); - -function cargarEstilos() { - var api = '/cgi/api/styles'; - request.open("GET", api, true); - request.send(); -} - -function listarEstilos(id, estilos, def) { - var select = document.getElementById(id); - - for (var i=0; i < estilos.length; i++) { - var opt = document.createElement('option'); - opt.value = estilos[i]; - opt.textContent = estilos[i]; - if (i == def) { - opt.selected = true; - } - select.appendChild(opt); - } -} - -request.onreadystatechange = function() { - if (request.readyState == 4) { - var json = JSON.parse(request.responseText); - if (json.state == "success") { - listarEstilos('stylebbs', json.bbs_styles, json.bbs_styles_default); - listarEstilos('styleib', json.ib_styles, json.ib_styles_default); - } - } -}; - function cambiarModo(e) { var iframe = document.getElementById('examplebbs'); var estilo = document.getElementById('stylebbs').value; @@ -63,7 +31,7 @@ function mostrarEstilo(e) { loc += 'txt/'; } - css.href = loc + estilo.toLowerCase() + ".css"; + css.href = loc + estilo.trim().toLowerCase() + ".css"; var key = 'weabot_style_' + tipo; var estilo = document.getElementById(('style'+tipo)).value; @@ -74,32 +42,41 @@ function cargariframe(tipo) { var iframe = document.createElement('iframe'); iframe.id = 'example' + tipo; iframe.dataset.type = tipo; - iframe.addEventListener('load', cargarDatos); + iframe.addEventListener('load', cargarEstilo); iframe.src = '/static/example/' + tipo + '1.html'; var div = document.getElementById("desc" + tipo); div.appendChild(iframe); } -function cargarDatos(e) { +function cargarEstilo(e) { var tipo = this.dataset.type; var key = 'weabot_style_' + tipo; + if (localStorage.hasOwnProperty(key)) { - var estilo = localStorage.getItem(key); - document.getElementById(('style'+tipo)).value = estilo; + var estilo = localStorage.getItem(key).trim(); + + if (estilo != '') { + document.getElementById(('style'+tipo)).value = estilo; + } else { + localStorage.removeItem(key); + return; + } + mostrarEstilo(e); this.tabIndex = -1; } - this.removeEventListener('load', cargarDatos); + + this.removeEventListener('load', cargarEstilo); } function init(tipo) { - cargariframe(tipo); document.getElementById('style'+tipo).addEventListener('change', mostrarEstilo); + cargariframe(tipo); } function checkboxes() { var chk = document.getElementsByClassName("weabot-obj"); - for (var i=0; i < chk.length; i++) { + for (var i=0; i < chk.length; i++) { chk[i].addEventListener("change", saveInput); } } @@ -151,19 +128,19 @@ function nuevoFiltro(usar, patron, tipo) { var lista = document.getElementById("filterlist"); var fila = document.createElement("tr"); - var selected = ['', '', '', '']; - selected[tipo] = ' selected="selected"'; + var selected = ['', '', '', '']; + selected[tipo] = ' selected="selected"'; var html = '