/* JavaScript utilities for PmWiki (c) 2009-2020 Petko Yotov www.pmwiki.org/petko based on PmWiki addons DeObMail, AutoTOC and Ape licensed GNU GPLv2 or any more recent version. libsortable() "Sortable tables" adapted for PmWiki from a Public Domain event listener by github.com/tofsjonas */ (function(){ function aE(el, ev, fn) { if(typeof el == 'string') el = dqsa(el); for(var i=0; i[^<]+<\/span>/ig, '.') .replace( /[^<]+<\/span>/ig, '@'); } function is_toc_heading(el) { if(el.offsetParent === null) {return false;} // hidden if(el.className.match(/\bnotoc\b/)) {return false;} // %notoc% var p = el.parentNode; while(p && p !== wikitext) { // >>notoc<<, (:markup:) if(p.className.match(/\b(notoc|markup2)\b/)) {return false;} if(p.parentNode) p = p.parentNode; } 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 repeat(x, times) { var y = ''; for(var i=0; i= dtoc.MinNumber && dtoc.MinNumber != -1)) ? 1:0; if(!dtoc.NumberedHeadings && !shouldmaketoc) return; for(var i=0; iprevlevel+1) actual_level = prevlevel+1; // prevlevel = actual_level; var currnb = numberheadings(actual_level); if(! hc[2]) { hc[2] = 'toc-'+currnb.replace(/\.+$/g, ''); hc[0].id = hc[2]; } if(dtoc.NumberedHeadings && currnb.length) hc[0].insertAdjacentHTML('afterbegin', currnb+' '); if(! shouldmaketoc) { continue; } var txt = hc[0].textContent.replace(/^\s+|\s+$/g, '').replace(/' + txt + '
\n'; if(dtoc.EnableBacklinks) hc[0].insertAdjacentHTML('beforeend', ' '); } if(! shouldmaketoc) return; html = ""+dtoc.contents+" " +"[]" +"
" + html + "
"; if(!tocdiv) { var wrap = "
"; if(dtoc.ParentElement && dqs(dtoc.ParentElement)) { dqs(dtoc.ParentElement).insertAdjacentHTML('afterbegin', wrap); } else { hcache[0][0].insertAdjacentHTML('beforebegin', wrap); } tocdiv = dqs('.PmTOCdiv'); } if(!tocdiv) return; // error? tocdiv.className += " frame"; tocdiv.id = '_toc'; tocdiv.innerHTML = html; if(window.localStorage.getItem('closeTOC')) { dqs('#PmTOCchk').checked = true; } aE('#PmTOCchk', 'change', function(e){ window.localStorage.setItem('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(adata(__script__, 'sortable'))) return; var tables = dqsa('table.sortable,table.sortable-footer'); for(var i=0; i