function filterKeymap( contentFilename ){ // if (!file) return // special filter, done via URL, no local file (for now at least) if ( contentFilename.endsWith(".keymap") ) { // not very reliable console.log('it is a .keymap file', contentFilename) fetch( contentFilename ) .then( r => r.text() ).then( r => { // console.log('Keymap', r) let parsedMap = r.split("_layer").filter( l => l.includes('-----') ).map( l => l.split('\n').filter( l => (l.startsWith('//') && !l.includes('------'))).map(l => l.replace("// ",'').split('| ') ) ) // WARNING : this is NOT a normal keymap, rather this is about the comments (!) with a visual representation of a keymap // see for example https://github.com/Utopiah/zmk-config-zen-2/blob/main/config/corneish_zen.keymap r.split("_layer").filter( l => l.includes('-----') ).map( l => l.split('\n').filter( l => (l.startsWith('//') && !l.includes('------'))).map(l => l.replace("// ",'') ) ).map( (layer, l) => { let el = addNewNote( layer.join('\n') ) el.id = 'keymap_layer'+l el.classList.add( 'keymap_layer' ) el.highlightLetter = ( letter ) => { keymap_layer0.setAttribute("value", keymap_layer0.getAttribute("value").replace(' '+letter+' ','_'+letter+'_') ) } el.unhighlightLetter = ( letter ) => { keymap_layer0.setAttribute("value", keymap_layer0.getAttribute("value").replace('_'+letter+'_',' '+letter+' ') ) } // then available e.g. keymap_layer0.unhighlightLetter("J") }) AFRAME.scenes[0].emit('keymaploaded', contentFilename) // to use the event consider : //AFRAME.scenes[0].addEventListener("keymaploaded", e => console.log(e)) }) } applyNextFilter( contentFilename ) } sequentialFilters.push( filterKeymap )