function filterVisualMetaJSON( contentFilename ){ let file = filesWithMetadata[contentFilename] if (!file) return let contentType = file.contentType if ( contentType.includes("json") && contentFilename.endsWith(".visualmetaexport.json")) { console.log('it is a visualmeta export file', contentFilename) fetch( contentFilename ).then( r => r.json() ).then( json => { //console.log( json ) let titleEl = addNewNote( json["visual-meta-bibtex-self-citation"].article.title, "0 1.8 -.3" ) json["visual-meta-full-document-text"].text.split("\n").reverse().map( (e, i) => { let el = addNewNote( e, "0 "+(1+i/40)+" -.5" ) if ( e.startsWith("#") ){ //el.addEventListener("object3dset", _ => el.setAttribute("font-size", el.getAttribute("font-size")*20 ) ) // not yet set, events loaded and object3dset do not help el.setAttribute("font-size", 0.3) el.setAttribute("value", e.replaceAll("#","") ) // should be a bit more subtle... } }) Object.values( json["Glossary"].entries ).map( (e, i) => { let el = addNewNote( e.phrase + ' ' + e.entry, "-1.3 "+(1+i/10)+" -.6" ) }) Object.values( json["document-headings"] ).reverse().map( (e, i) => { let el = addNewNote( e.name, "-1.1 "+(1+i/10)+" -.6" ) el.setAttribute("font-size", Number(e.level.replace("level",""))/10 ) el.addEventListener("object3dset", _ => el.object3D.translateX( 1-Number(e.level.replace("level",""))/10 ) ) }) AFRAME.scenes[0].emit('visualmetajsonloaded', contentFilename) // to use the event consider : //AFRAME.scenes[0].addEventListener("visualmetajsonloaded", e => console.log(e)) }) } applyNextFilter( contentFilename ) } sequentialFilters.push( filterVisualMetaJSON )