added accessibility: tab+enter navigation for quizz e.g.

This commit is contained in:
Leon van Kammen 2024-06-17 13:53:47 +00:00
parent 2d521d8340
commit ced5383530
7 changed files with 14219 additions and 18 deletions

View file

@ -1,5 +1,5 @@
/* /*
* v0.5.1 generated at Mon Jun 17 12:41:29 PM UTC 2024 * v0.5.1 generated at Mon Jun 17 01:53:03 PM UTC 2024
* https://xrfragment.org * https://xrfragment.org
* SPDX-License-Identifier: MPL-2.0 * SPDX-License-Identifier: MPL-2.0
*/ */

View file

@ -1,5 +1,5 @@
/* /*
* v0.5.1 generated at Mon Jun 17 12:41:29 PM UTC 2024 * v0.5.1 generated at Mon Jun 17 01:53:03 PM UTC 2024
* https://xrfragment.org * https://xrfragment.org
* SPDX-License-Identifier: MPL-2.0 * SPDX-License-Identifier: MPL-2.0
*/ */

14193
dist/xrfragment.module.js vendored

File diff suppressed because it is too large Load diff

View file

@ -343,10 +343,11 @@ window.accessibility = (opts) => new Proxy({
setupHrefCycling(){ setupHrefCycling(){
// speak arrow keys // speak arrow keys
window.addEventListener('keydown', (e) => { window.addEventListener('keydown', (e) => {
if( e.key != 'Tab') return console.log(e.key)
if( e.key != "Tab" && e.key != "Enter" ) return
let subScene = xrf.scene.getObjectByName( xrf.frag.pos.last ) let subScene = xrf.scene.getObjectByName( xrf.frag.pos.last )
if( !subScene ) subScene = xrf.scene if( !subScene ) subScene = xrf.scene
let cache = this.setupHrefCycling.cache = this.setupHrefCycling.cache || {current: 0} let cache = this.setupHrefCycling.cache = this.setupHrefCycling.cache || {current: -1}
let objects = [] let objects = []
subScene.traverse( (n) => (n.userData.href || n.userData['aria-description']) && objects.push(n) ) subScene.traverse( (n) => (n.userData.href || n.userData['aria-description']) && objects.push(n) )
@ -368,13 +369,16 @@ window.accessibility = (opts) => new Proxy({
notify(`${n.userData['aria-description']||''}` + (n.userData.href ? `<br><b>name:</b> ${n.name}<br><b>link:</b> ${n.userData['href']}` :'') ) notify(`${n.userData['aria-description']||''}` + (n.userData.href ? `<br><b>name:</b> ${n.name}<br><b>link:</b> ${n.userData['href']}` :'') )
} }
// ensure valid href if( e.key == 'Enter' && objects[cache.current].userData.href ){
cache.current = cache.current % objects.length xrf.navigator.to( objects[cache.current].userData.href )
highlight( objects[cache.current] ) }
console.log(objects[cache.current].userData.href)
// increment to next // increment to next
cache.current = cache.current + 1 cache.current = (cache.current + 1) % objects.length
if( e.key == 'Tab'){
highlight( objects[cache.current] )
}
e.preventDefault() e.preventDefault()
return false return false

View file

@ -1,5 +1,5 @@
/* /*
* v0.5.1 generated at Mon Jun 17 12:41:29 PM UTC 2024 * v0.5.1 generated at Mon Jun 17 01:53:03 PM UTC 2024
* https://xrfragment.org * https://xrfragment.org
* SPDX-License-Identifier: MPL-2.0 * SPDX-License-Identifier: MPL-2.0
*/ */

View file

@ -1,5 +1,5 @@
/* /*
* v0.5.1 generated at Mon Jun 17 12:41:29 PM UTC 2024 * v0.5.1 generated at Mon Jun 17 01:53:03 PM UTC 2024
* https://xrfragment.org * https://xrfragment.org
* SPDX-License-Identifier: MPL-2.0 * SPDX-License-Identifier: MPL-2.0
*/ */

View file

@ -91,10 +91,11 @@ window.accessibility = (opts) => new Proxy({
setupHrefCycling(){ setupHrefCycling(){
// speak arrow keys // speak arrow keys
window.addEventListener('keydown', (e) => { window.addEventListener('keydown', (e) => {
if( e.key != 'Tab') return console.log(e.key)
if( e.key != "Tab" && e.key != "Enter" ) return
let subScene = xrf.scene.getObjectByName( xrf.frag.pos.last ) let subScene = xrf.scene.getObjectByName( xrf.frag.pos.last )
if( !subScene ) subScene = xrf.scene if( !subScene ) subScene = xrf.scene
let cache = this.setupHrefCycling.cache = this.setupHrefCycling.cache || {current: 0} let cache = this.setupHrefCycling.cache = this.setupHrefCycling.cache || {current: -1}
let objects = [] let objects = []
subScene.traverse( (n) => (n.userData.href || n.userData['aria-description']) && objects.push(n) ) subScene.traverse( (n) => (n.userData.href || n.userData['aria-description']) && objects.push(n) )
@ -116,13 +117,16 @@ window.accessibility = (opts) => new Proxy({
notify(`${n.userData['aria-description']||''}` + (n.userData.href ? `<br><b>name:</b> ${n.name}<br><b>link:</b> ${n.userData['href']}` :'') ) notify(`${n.userData['aria-description']||''}` + (n.userData.href ? `<br><b>name:</b> ${n.name}<br><b>link:</b> ${n.userData['href']}` :'') )
} }
// ensure valid href if( e.key == 'Enter' && objects[cache.current].userData.href ){
cache.current = cache.current % objects.length xrf.navigator.to( objects[cache.current].userData.href )
highlight( objects[cache.current] ) }
console.log(objects[cache.current].userData.href)
// increment to next // increment to next
cache.current = cache.current + 1 cache.current = (cache.current + 1) % objects.length
if( e.key == 'Tab'){
highlight( objects[cache.current] )
}
e.preventDefault() e.preventDefault()
return false return false