diff --git a/pwiki/dom/toc.js b/pwiki/dom/toc.js new file mode 100755 index 0000000..bb80599 --- /dev/null +++ b/pwiki/dom/toc.js @@ -0,0 +1,37 @@ +/********************************************************************** +* +* +* +**********************************************************************/ +((typeof define)[0]=='u'?function(f){module.exports=f(require)}:define) +(function(require){ var module={} // make module AMD/node compatible... +/*********************************************************************/ + + + + +//--------------------------------------------------------------------- + +var makeToc = +module.makeToc = +function(){ + return [...document.querySelectorAll('toc')] + .map(function(toc){ + toc.innerHTML = '' + var parent = toc.parentElement + var base = pwiki.path + ;[...parent.querySelectorAll('[id]')] + .filter(function(n){ + return /^h[0-9]$/i.test(n.nodeName) }) + .forEach(function(section){ + var e = document.createElement('a') + e.classList.add(section.nodeName.toLowerCase()) + e.setAttribute('href', '#'+ base +'#'+ section.id) + e.innerHTML = section.innerHTML + toc.appendChild(e) }) + return toc }) } + + + +/********************************************************************** +* vim:set ts=4 sw=4 : */ return module }) diff --git a/pwiki/page.js b/pwiki/page.js index e1e3adc..e27654c 100755 --- a/pwiki/page.js +++ b/pwiki/page.js @@ -1795,7 +1795,7 @@ object.Constructor('Page', BasePage, { await data() : typeof(data) == 'function' ? data - : 'text' in data ? + : data && 'text' in data ? data.text : null if(data instanceof Array @@ -2021,6 +2021,7 @@ object.Constructor('CachedPage', Page, { //--------------------------------------------------------------------- +var toc = require('./dom/toc') var wikiword = require('./dom/wikiword') //var textarea = require('./dom/textarea') @@ -2035,6 +2036,7 @@ object.Constructor('pWikiPageElement', Page, { domFilters: { + toc: toc.makeToc, // XXX see Page.filters.wikiword for notes... wikiword: wikiword.wikiWordText, //textarea: textarea.setupTextarea, @@ -2263,6 +2265,7 @@ module.System = { @load(./edit) +
(both?) in page title...