diff options
Diffstat (limited to 'static/js/aquiencitas.js')
-rw-r--r-- | static/js/aquiencitas.js | 168 |
1 files changed, 168 insertions, 0 deletions
diff --git a/static/js/aquiencitas.js b/static/js/aquiencitas.js new file mode 100644 index 0000000..0cf860f --- /dev/null +++ b/static/js/aquiencitas.js @@ -0,0 +1,168 @@ +var cur_url; +var linklist; +var linki; +var is_bbs; +var plimit = 5; +function getPostRange(t, n) { + var posts, replies, s, ss, ee, rev = false; + posts = []; + replies = t.getElementsByClassName("reply"); + s = n.split('-'); + ss = parseInt(s[0]); + ee = ss; + if(s.length == 2) ee = parseInt(s[1]); + if(ee<ss) { tmp=ss;ss=ee;ee=tmp; rev=true; } + for(j = 0; j < replies.length; j++) { + num = parseInt(replies[j].dataset.n); + if(num > ee) break; + if(num >= ss && num <= ee) { + if(rev) posts.unshift(replies[j]); + else posts.push(replies[j]); + } + } + return posts; +} +function findAncestor (el) { + while ((el = el.parentElement) && !el.className.startsWith("thread") && !el.className.startsWith("cont")); + return el; +} +function getPostDivs(e) { + if(is_bbs) { + divs = []; + t = findAncestor(e); + s = e.getAttribute('href').split('/'); + r = s[s.length-1]; + rs = r.split(','); + linki = 0; + for(i=0;i<rs.length;i++) { divs.push.apply(divs, getPostRange(t, rs[i])); } + return divs; + } else { + ele = document.getElementById('reply' + e.getAttribute('href').split('#')[1]); + return [ele,]; + } +} +function get_pid(e) { + return is_bbs ? e.dataset.n : e.id.substr(5); +} +function fill_links(e) { + var divs = getPostDivs(e); + if(!divs[0]) return; + + this_id = get_pid(e.parentNode.parentNode); + + for(i=0;i<divs.length;i++) { + tid = get_pid(divs[i]); + if (linklist[tid]) + continue; + if (this_id == tid) + continue; + t = (is_bbs ? divs[i].getElementsByTagName("h4")[0] : divs[i]); + bl = document.createElement('a'); + bl.href = cur_url + (is_bbs ? "/" : "#") + this_id; + bl.textContent = '>>' + this_id; + bl.addEventListener('mouseover', who_are_you_quoting, false); + bl.addEventListener('mouseout', remove_quote_preview, false); + if (!(qb = t.getElementsByClassName('quoted')[0])) { + qb = document.createElement((is_bbs ? 'span' : 'div')); + qb.className = 'quoted'; + qb.textContent = ' Citado por: '; + if(is_bbs) { + t.insertBefore(qb, t.getElementsByClassName("del")[0]); + t.insertBefore(document.createTextNode(' '), t.getElementsByClassName("del")[0]); + } else { + p = t.getElementsByTagName("blockquote"); + p[p.length-1].insertAdjacentHTML('afterend', qb.outerHTML); + } + t.getElementsByClassName('quoted')[0].appendChild(bl); + } else { + qb.appendChild(document.createTextNode(' ')); + qb.appendChild(bl); + } + linklist[tid] = true; + } +} +function who_are_you_quoting(e) { + var parent, d, clr, src, cnt, left, top, width, maxWidth; + e = e.target || window.event.srcElement; + var divs = getPostDivs(e); + if(!divs[0]) return; + + maxWidth = 500; + cnt = document.createElement('div'); + cnt.id = 'q-p'; + width = divs[0].offsetWidth; + if (width > maxWidth) { + width = maxWidth; + } + + for(i=0;i<divs.length&&i<plimit;i++) { + src = divs[i].cloneNode(true); + cnt.appendChild(src); + } + left = 0; + top = e.offsetHeight + 1; + parent = e; + do { + left += parent.offsetLeft; + top += parent.offsetTop; + } while (parent = parent.offsetParent); + if ((d = document.body.offsetWidth - left - width) < 0) left += d; + cnt.setAttribute('style', 'left:' + left + 'px;top:' + top + 'px;'); + document.body.appendChild(cnt); +} +function remove_quote_preview(e) { + var cnt; + if (cnt = document.getElementById('q-p')) + document.body.removeChild(cnt); +} +/*function goTo(e) { + e.preventDefault(); + var pst = this.textContent.split(/[-,]/)[0]; + pst = "r"+ pst.slice(2); + pst = document.getElementById(pst); + if (pst) pst.scrollIntoView(); +}*/ +function quotePreview() { + if(localStorage.getItem("shobon_on") == "false") { return; } + if(localStorage.getItem("shobon_preview") == "false" && localStorage.getItem("shobon_backlink") == "false") { return; } + + var i, q, replies, quotes; + + if(document.body.className && document.body.className != "res") + is_bbs = true; + else is_bbs = false; + + if(is_bbs) replies = document.getElementsByClassName('msg'); + else replies = document.getElementsByTagName('blockquote'); + + urls = window.location.pathname.split("/"); + cur_url = urls[0] + "/" + urls[1] + "/" + urls[2] + "/" + urls[3]; + + for (x = 0; x < replies.length; x++) { + quotes = replies[x].getElementsByTagName('a'); + linklist = {}; + + for (i = 0; i < quotes.length; i++) { + q = quotes[i]; + if(q.textContent.length < 3 || !q.textContent.startsWith(">>")) continue; + + if(localStorage.getItem("shobon_preview") != "false") { + q.addEventListener('mouseover', who_are_you_quoting, false); + q.addEventListener('mouseout', remove_quote_preview, false); + } + + if(localStorage.getItem("shobon_backlink") != "false") { + fill_links(q); + } + } + } +/* if (document.body.className === "threadpage") { + for (x = 0; x < replies.length; x++) { + var q = replies[x].getElementsByTagName("a"); + for(var j=0;j<q.length;j++) { + if(q[j].textContent.startsWith(">>")) q[j].addEventListener("click", goTo, false); + } + } + }*/ +} +document.addEventListener('DOMContentLoaded', quotePreview, false);
\ No newline at end of file |