/* JavaScript utilities for PmWiki (c) 2009-2024 Petko Yotov www.pmwiki.org/petko based on PmWiki addons DeObMail, AutoTOC and Ape licensed GNU GPLv2 or any more recent version released by the FSF. libsortable() "Sortable tables" adapted for PmWiki from a Public Domain event listener by github.com/tofsjonas */ (async function(__script__){ try { var Config = JSON.parse(__script__.dataset.config); Config.fullname = __script__.dataset.fullname; } catch(e) { var Config = {}; } if(Config.rediquiet) { var url = location.href.replace(/\?from=[^?&#]*[&]quiet=1/, ''); if(url != location.href) history.replaceState(null, null, url); } function aE(el, ev, fn) { if(typeof el == 'string') el = dqsa(el); else if(el instanceof Element) el = [el]; for(var i=0; i]/g, '>'); } var wikitext; var echo = console.log; function PmXMail() { var els = document.querySelectorAll('span._pmXmail'); var LinkFmt = '%t'; for(var i=0; i[^<]+<\/span>/ig, '.') .replace( /[^<]+<\/span>/ig, '@'); } function is_toc_heading(el) { if(el.offsetParent === null) {return false;} // hidden if(el.closest('.notoc,.markup2')) {return false;} return true; } function posy(el) { var top = 0; if (el.offsetParent) { do { top += el.offsetTop; } while (el = el.offsetParent); } return top; } function any_id(h) { if(h.id) {return h.id;} // %id=anchor% var a = h.querySelector('a[id]'); // inline [[#anchor]] if(a && a.id) {return a.id;} var prev = h.previousElementSibling; if(prev) { // [[#anchor]] before !!heading var a = prev.querySelectorAll('a[id]'); if(a.length) { last = a[a.length-1]; if(last.id && ! last.nextElementSibling) { var atop = posy(last) + last.offsetHeight; var htop = posy(h); if( Math.abs(htop-atop)<20 ) { h.appendChild(last); return last.id; } } } } return false; } function inittoggle() { var tnext = Config.toggle; if(! tnext) { return; } var x = dqsa(tnext); if(! x.length) return; for(var i=0; i= dtoc.MinNumber && dtoc.MinNumber != -1)) ? 1:0; if(!dtoc.NumberedHeadings && !shouldmaketoc) return; for(var i=0; i' + txt + '\n'; if(dtoc.EnableBacklinks) adjbe(hc[0], ' '); } if(! shouldmaketoc) return; html = ""+dtoc.contents+" " +"[]" +"
" + html + "
"; if(!tocdiv) { var wrap = "
"; if(dtoc.ParentElement && dqs(dtoc.ParentElement)) { adjab(dqs(dtoc.ParentElement), wrap); } else { var x1 = hcache[0][0]; var x0 = x1.previousElementSibling; if(x0 && x0.matches('.sectionedit.sectionhead')) x1 = x0; adjbb(x1, wrap); } tocdiv = dqs('.PmTOCdiv'); } if(!tocdiv) return; // error? tocdiv.className += " frame"; tocdiv.id = '_toc'; tocdiv.innerHTML = html; if(getLS('closeTOC')) { dqs('#PmTOCchk').checked = true; } aE('#PmTOCchk', 'change', function(e){ setLS('closeTOC', this.checked ? "close" : ''); }); var hh = location.hash; if(hh.length>1) { var cc = document.getElementById(hh.substring(1)); if(cc) cc.scrollIntoView(); } } var numhead = [0, 0, 0, 0, 0, 0, 0]; var numheadspec = '1 1 1 1 1 1 1'.split(/ /g); function numhead_alpha(n, upper) { if(!n) return '_'; var alpha = '', mod, start = upper=='A' ? 65 : 97; while (n>0) { mod = (n-1)%26; alpha = String.fromCharCode(start + mod) + '' + alpha; n = (n-mod)/26 | 0; } return alpha; } function numhead_roman(n, upper) { if(!n) return '_'; // partially based on http://blog.stevenlevithan.com/?p=65#comment-16107 var lst = [ [1000,'M'], [900,'CM'], [500,'D'], [400,'CD'], [100,'C'], [90,'XC'], [50,'L'], [40,'XL'], [10,'X'], [9,'IX'], [5,'V'], [4,'IV'], [1,'I'] ]; var roman = ''; for(var i=0; i=lst[i][0]) { roman += lst[i][1]; n -= lst[i][0]; } } return (upper == 'I') ? roman : roman.toLowerCase(); } function numberheadings(n) { if(nn; j--) numhead[j]=0; numhead[6]=n; numhead[n]++; var qq = ''; for (var j=0; j<=n; j++) { var curr = numhead[j]; var currspec = numheadspec[j]; if(currspec.match(/a/i)) { curr = numhead_alpha(curr, currspec); } else if(currspec.match(/i/i)) { curr = numhead_roman(curr, currspec); } qq+=curr+"."; } return qq; } function makesortable() { if(! pf(Config.sortable)) return; var tables = dqsa('table.sortable,table.sortable-footer'); for(var i=0; i
" for(var i=0; i'+hlvar+''; } } } } var varlinks = dqsa('a.varlink code.varlink'); for(i=0; i=11) { var days = Math.floor(ltmode/10); ltmode = ltmode%10; } else var days = 3; Now = new Date(); pagename = Config.fullname; var seenstamp = getLS('seenstamp', true); if(!seenstamp) seenstamp = {}; var previous = seenstamp[pagename]; var times = dqsa('time[datetime]'); daymonth = new Date(2021, 11, 26, 17) .toLocaleDateString().match(/26.*12/)? '%d/%m': '%m/%d'; var h72 = Now.getTime()/1000-days*24*3600; for(var i=0; i \. \. \. /)) { var x = fmtLocalTime(stamp); times[i].innerHTML = x[0]; times[i].title = x[1] ? x[1]: itemdate.textContent; continue; } var link = li.querySelector('a'); if(link.className.match(/createlinktext|wikilink|selflink/)) { var diff = link.href + '?action=diff#diff' + stamp; if(stamp >= h72) { var h = link.href + '?action=diff&fmt=rclist'; adjbe(li, ' +'); } } // recent uploads, other? we want to know when the link becomes "visited" else diff = link.href + '#diff' + stamp; times[i].innerHTML = ''+times[i].innerHTML+''; } var difflinks = dqsa('a[href*="#diff"]'), diffcnt = 0; for(var i=0; iprevious) par.classList.add('rcnew'); } if(!diffcnt) return; var pagetitle = dqs('#wikititle h1, h1.pagetitle'); if(pagetitle) { var time = zpad(Now.getHours()) + ':'+ zpad(Now.getMinutes()); adjbe(pagetitle, ' '+time+''); tap('.rcreload', function(){location.reload();}); } aE('.rcnew', 'mouseup', function(e){ if(e.which == 2) this.classList.remove('rcnew'); }); tap('.rcplus', function(e){ var plus = this; plus.style.display = 'none'; var basehref = plus.dataset.url.replace(/&fmt=rclist/, '#diff') .replace(/[&]/g, '&'); var fmt = '

%t %s

\n'; fetch(plus.dataset.url) .then(function(resp){return resp.text();}) .then(function(text){ var lines = text.split(/\n/g); var out = ''; for(var i=0; i sizes[ext]) { a.className = 'error'; a.title = Config.updrop.toobig .replace(/\#upmax/, sizes[ext]).replace(/\#upext/, ext); } else { a.className = 'queued'; a.pmfile = file; } Dropzone.appendChild(a); } function makeDraggable(par) { var children = par.children; if(children.length<2) return; for(var i=0; i