Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /// holhashtags.js
- (function() {
- const HHT_POPUP_DELAY = 750;
- let traad = [];
- let link_timer = null;
- let link_tag = null;
- let scrollet = false;
- const hht_find_svar = (id) => {
- for (let i in traad) if (traad[i].id === id) return traad[i];
- return null;
- };
- const hht_find_ref = (svar, ref, put) => {
- for (let ri in svar.ref) if (svar.ref[ri] === ref) return ri;
- if (put) return svar.ref.push(ref) - 1;
- return -1;
- };
- const hht_skjul_pop_links = (tving) => {
- let pl = document.getElementById('hht_pop_links');
- if (tving || (event.target == pl)) {
- pl.children[0].blur();
- pl.children[1].blur();
- pl.style.display = 'none';
- }
- };
- const hht_stop_timer = () => { if (link_timer) { clearTimeout(link_timer); link_timer = null; } };
- const hht_link_timeout = () => {
- link_timer = null;
- let rb = document.body.getBoundingClientRect();
- let re = link_tag.getBoundingClientRect();
- let pl = document.getElementById('hht_pop_links');
- pl.style.top = '-100px';
- pl.style.display = 'inline-block';
- pl.style.fontSize = getComputedStyle(link_tag).getPropertyValue('font-size');
- let pa = pl.children[1];
- pa.href = link_tag.href;
- pa.innerText = link_tag.innerText;
- let pls = getComputedStyle(pl);
- pl.style.left = (re.left - rb.left - pa.offsetLeft - parseFloat(pls.getPropertyValue('border-left-width'))) + 'px';
- pl.style.top = (re.top - rb.top - pa.offsetTop - parseFloat(pls.getPropertyValue('border-top-width'))) + 'px';
- };
- const hht_vis_indlaeg = () => {
- hht_skjul_pop_links(true);
- let sid = parseInt(link_tag.innerText.substring(1, link_tag.innerText.length));
- let svar = {rang:'',navn:'',dato:'',tekst:null};
- if (sid == 0)
- {
- let e = document.getElementById('ContentPlaceHolder_ContentPlaceHolder_traadhead');
- if (e) e = e.getElementsByClassName('date');
- if (e) {
- e = e[0];
- svar.rang = e.childNodes[0].nodeValue;
- if (svar.rang.startsWith('Af ')) svar.rang = svar.rang.substring(3, svar.rang.length);
- svar.navn = e.childNodes[1].outerHTML;
- svar.dato = e.childNodes[2].nodeValue.split('|')[1].trim();
- svar.tekst = document.getElementById('ContentPlaceHolder_ContentPlaceHolder_traaddesc').innerHTML;
- }
- } else {
- let e = document.getElementById('ContentPlaceHolder_ContentPlaceHolder_svar');
- if (e) for (let si in e.children) {
- let sv = e.children[si];
- let ln = sv.getElementsByTagName('a');
- if (ln && (parseInt(ln[0].name) == sid)) {
- for (let lni in ln) if (ln[lni].href && (ln[lni].href.indexOf('/show_user.') > 0)) {
- svar.navn = ln[lni].outerHTML;
- break;
- }
- if (svar.navn.length == 0) {
- e = sv.getElementsByClassName('bolditalic');
- if (e && (e.length > 0)) svar.navn = e[0].outerHTML;
- }
- e = sv.getElementsByClassName('bruger');
- if (e && (e.length > 0)) svar.rang = e[0].innerText;
- e = sv.getElementsByClassName('artikel_read_time');
- if (e && (e.length > 0)) svar.dato = e[0].innerText;
- e = sv.getElementsByClassName('t47-svar-content');
- if (e && (e.length > 0)) svar.tekst = e[0].innerHTML;
- break;
- }
- }
- }
- if (svar.tekst && (svar.navn.length > 0)) {
- let indlaeg = document.getElementById('hht_indlaeg');
- indlaeg.style.opacity = '0';
- indlaeg.style.display = 'inline-block';
- let navn = 'Af ';
- if (svar.rang.length > 0) navn += svar.rang + ' ';
- indlaeg.children[0].children[0].innerHTML = navn + svar.navn;
- indlaeg.children[0].children[1].innerText = svar.dato;
- let tekst = indlaeg.children[1];
- tekst.innerHTML = svar.tekst;
- if (tekst.lastChild && (tekst.lastChild.className === 'hht_refs')) tekst.removeChild(tekst.lastChild);
- tekst.scrollTo(0,0);
- let rb = document.body.getBoundingClientRect();
- r = link_tag.getBoundingClientRect();
- let offs = link_tag.parentElement.className === 'hht_refs' ? -r.height : indlaeg.offsetHeight;
- indlaeg.style.top = (r.top - rb.top - offs) + 'px';
- indlaeg.style.animationName = 'anim_vis';
- }
- };
- const hht_link_events = (lnk) => {
- if (HHT_POPUP_DELAY > 0) {
- lnk.addEventListener('mouseover', ()=>{ hht_stop_timer(); link_tag = event.currentTarget; link_timer = setTimeout(hht_link_timeout, HHT_POPUP_DELAY); });
- lnk.addEventListener('mouseout', hht_stop_timer);
- }
- return lnk;
- };
- const hht_tjek_svar = (svar) => {
- let tc = 0;
- let ti = 0;
- while ((tc < 10) && (ti < svar.text.childNodes.length)) {
- let te = svar.text.childNodes[ti];
- if (te.nodeType === 3) {
- let tp = te.nodeValue.indexOf('#');
- while (tp >= 0) {
- let tpe = tp + 1;
- while ((tpe < te.nodeValue.length) && ('0123456789'.indexOf(te.nodeValue.charAt(tpe)) >= 0)) tpe++;
- let val = parseInt(te.nodeValue.substring(tp+1, tpe));
- let ref = hht_find_svar(val);
- if (ref) {
- hht_find_ref(ref, svar.id, true);
- let foer = document.createTextNode(te.nodeValue.substring(0, tp));
- let link = hht_link_events(document.createElement('a'));
- link.href = '#' + (val === 0 ? 'traadstart' : val);
- link.innerText = '#' + val;
- link.className = 'hht_lnk';
- let efter = document.createTextNode(te.nodeValue.substring(tpe, te.nodeValue.length));
- svar.text.insertBefore(foer, te);
- svar.text.insertBefore(link, te);
- svar.text.replaceChild(efter, te);
- te = efter;
- tp = te.nodeValue.indexOf('#');
- tc++;
- } else tp = te.nodeValue.indexOf('#', tp + 1);
- }
- }
- ti++;
- }
- };
- const hht_lav_ref = (svar) => {
- if (svar.ref.length > 0) {
- let div = document.createElement('div');
- div.className = 'hht_refs';
- let hdr = document.createElement('span');
- hdr.className = 'hht_hdr';
- hdr.innerText = 'Refereret: ';
- div.appendChild(hdr);
- for (let rfi in svar.ref) {
- let ref = hht_link_events(document.createElement('a'));
- ref.className = 'hht_ref';
- ref.innerText = '#' + svar.ref[rfi];
- ref.href = ref.innerText;
- div.appendChild(ref);
- }
- svar.text.appendChild(div);
- }
- };
- const hht_indsaet_html = () => {
- let e = document.createElement('style');
- e.setAttribute('type', 'text/css');
- e.innerText = 'div.hht_refs { font-size:smaller; margin-top:.5em; padding-top:.5em; border-top:1px solid #eeeeee; }\n' +
- 'span.hht_hdr { color:gray; font-weight:bold; }\n' +
- 'a.hht_lnk { }\n' +
- 'a.hht_ref { margin-right:.25em; }\n' +
- '#hht_pop_links { position:absolute; margin:0px; background-color:#eeeeee; display:none; border:1px solid #2b5076; padding:0px 5px 0px 5px; border-radius:5px; }\n' +
- '#hht_indlaeg { border:1px solid #cccccc; border-radius:5px; display:none; position:absolute; background-color:white; z-index:10000; animation-duration:.25s; }\n' +
- '#hht_indlaeg_top { background-color:#dddddd; padding:5px; border-radius:5px 5px 0px 0px; }\n' +
- '#hht_indlaeg_top_v { }\n' +
- '#hht_indlaeg_top_h { float:right; }\n' +
- '#hht_indlaeg_bund { clear:both; left:0px; max-height:25vh; overflow-y:scroll; padding:5px; border-radius:0px 0px 5px 5px; margin:0px; background-color:#f0f0f0; white-space:pre-wrap; }\n' +
- '@keyframes anim_vis { from:{ opacity:0 } to { opacity:1 } }\n@keyframes anim_gem { from:{ opacity:1 } to { opacity:0 } }';
- document.head.appendChild(e);
- e = document.createElement('div');
- e.id = 'hht_pop_links';
- let a = document.createElement('a');
- a.href = 'javascript:void(0)';
- a.innerText = 'Vis';
- a.style.marginRight = '.3em';
- a.addEventListener('click', hht_vis_indlaeg);
- e.appendChild(a);
- a = document.createElement('a');
- a.addEventListener('click', ()=>{ hht_skjul_pop_links(true); });
- e.appendChild(a);
- e.addEventListener('mouseleave', hht_skjul_pop_links);
- document.body.appendChild(e);
- e = document.createElement('div');
- e.id = 'hht_indlaeg';
- e.addEventListener('animationend', () => {
- if (e.style.animationName === 'anim_gem') e.style.display = 'none';
- else e.style.opacity = '1';
- e.style.animationName = '';
- });
- let rb = document.body.getBoundingClientRect();
- let rd = document.getElementById('ContentPlaceHolder_ContentPlaceHolder_traaddesc').getBoundingClientRect();
- e.style.width = (rd.width - 10) + 'px';
- e.style.left = (rd.left - rb.left + 5) + 'px';
- let ee = document.createElement('div');
- ee.id = 'hht_indlaeg_top';
- e.appendChild(ee);
- ee = document.createElement('span');
- ee.id = 'hht_indlaeg_top_v';
- e.children[0].appendChild(ee);
- ee = document.createElement('span');
- ee.id = 'hht_indlaeg_top_h';
- e.children[0].appendChild(ee);
- ee = document.createElement('div');
- ee.id = 'hht_indlaeg_bund';
- e.appendChild(ee);
- document.body.appendChild(e);
- document.body.addEventListener('mouseup', () => {
- let e = event.target;
- while (e && (e.tagName.toLowerCase() != 'a')) {
- if (e.id === 'hht_indlaeg') return;
- e = e.parentElement;
- }
- document.getElementById('hht_indlaeg').style.animationName = 'anim_gem';
- });
- };
- const hht_indlaes = () => {
- let desc = document.getElementById('ContentPlaceHolder_ContentPlaceHolder_traaddesc');
- let svar = document.getElementById('ContentPlaceHolder_ContentPlaceHolder_svar');
- if (desc && svar) {
- hht_indsaet_html();
- traad.push({text:desc,id:0,ref:[]});
- for (let svi in svar.children) {
- let sve = svar.children[svi];
- let svo = {text:null,id:0,ref:[]};
- for (let chi in sve.children) {
- let che = sve.children[chi];
- if (che.className === 't47-svar-top') {
- let a = che.getElementsByTagName('a');
- if (a.length > 0) {
- let sid = parseInt(a[0].name);
- if ((!isNaN(sid)) && (sid > 0)) svo.id = sid;
- }
- } else if (che.className === 't47-svar-content') svo.text = che;
- }
- if (svo.text && (svo.id > 0)) traad.push(svo);
- }
- for (let svi = 1; svi < traad.length; svi++) hht_tjek_svar(traad[svi]);
- for (let svi in traad) hht_lav_ref(traad[svi]);
- }
- };
- if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', hht_indlaes);
- else hht_indlaes();
- })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement