function filterPmWiki( contentFilename ){ // if (!file) return // special filter, done via URL, no local file (for now at least) if ( contentFilename.endsWith("?action=source") ) { // not very reliable console.log('it is a pmwiki file', contentFilename) // mereology option let openingOptions = filesWithMetadata[contentFilename].openingOptions // can be used via e.g. showFile("https://fabien.benetou.fr/?action=source",{ mereology:"whole"}) fetch( contentFilename ) .then( r => r.text() ).then( r => { // console.log('pmwiki', r) // TODO // diff support to replay over time, e.g. https://fabien.benetou.fr/PIMVRdata/ItemsStates?action=diff // index as a special case https://fabien.benetou.fr/Site/AllRecentChanges?action=source // rendered previews e.g https://vatelier.benetou.fr/MyDemo/newtooling/textures/fabien.benetou.fr_PIMVRdata_ItemsStates.png // server side graph generation e.g. https://vatelier.benetou.fr/MyDemo/newtooling/wiki_graph.json // very specific let elements = [] console.log( "mereology", openingOptions.mereology ) switch( openingOptions.mereology ) { case "whole": elements.push( addNewNote(r, "0 1.4 -.8") ) break; case "section": r.split(/! /).map( (c,i) => elements.push( addNewNote(c, "0 "+(1+i/10)+" -.8") ) ) // untested break; case "line": r.split('\n').map( (c,i) => elements.push( addNewNote(c, "0 "+(1+i/10)+" -.8") ) ) break; case "listonly": default: r.replaceAll('* ','').split('\n').map( (c,i) => elements.push( addNewNote(c, "0 "+(1+i/10)+" -.8") ) ) // this is specific to https://fabien.benetou.fr/PersonalInformationStream/WithoutNotesMay2025 and similar } elements.map( el => { el.classList.add('pmwikifilter'); el.classList.add('filterimport') } ) // for something more generic see https://www.pmwiki.org/wiki/PmWiki/PageFileFormat AFRAME.scenes[0].emit('pmwikiloaded', contentFilename) // to use the event consider : //AFRAME.scenes[0].addEventListener("pmwikiloaded", e => console.log(e)) }) } applyNextFilter( contentFilename ) } sequentialFilters.push( filterPmWiki )