work in progress [might break]

This commit is contained in:
Leon van Kammen 2023-12-27 18:26:42 +00:00
parent faaf18e417
commit fceaf07c1f
8 changed files with 65 additions and 27 deletions

View file

@ -36,7 +36,7 @@
$menu.logo = 'logo_file_or_url_here' $menu.logo = 'logo_file_or_url_here'
$menu.morelabel = '⚡' $menu.morelabel = '⚡'
// add your menubuttons: // add your menubuttons:
$menu.buttons = $menu.buttons.concat([`<a class="btn" aria-label="button" aria-description="about menu" onclick="$menu.showAbout()">💁 about</a><br>`]) $menu.buttons = $menu.buttons.concat([`<a class="btn" aria-label="button" aria-title="menu button" aria-description="about menu" onclick="$menu.showAbout()">💁 about</a><br>`])
$menu.collapsed = false $menu.collapsed = false
$menu.showAbout = () => window.notify(` $menu.showAbout = () => window.notify(`
<h1>💁 Hi there!</h1> <h1>💁 Hi there!</h1>

View file

@ -28,7 +28,7 @@ chatComponent = {
el.style.display = 'none' // start hidden el.style.display = 'none' // start hidden
document.body.appendChild( el ) document.body.appendChild( el )
document.dispatchEvent( new CustomEvent("$chat:ready", {detail: opts}) ) document.dispatchEvent( new CustomEvent("$chat:ready", {detail: opts}) )
$chat.send({message:`Welcome to <b>${document.location.search.substr(1)}</b>, a 3D scene(file) which simply links to others.<br>You can start a solo offline exploration in XR right away.<br>Type /help below, or use the arrow- or WASD-keys on your keyboard, and mouse-drag to rotate.<br>`, class: ["info","multiline"] }) $chat.send({message:`Welcome to <b>${document.location.search.substr(1)}</b>, a 3D scene(file) which simply links to other ones.<br>You can start a solo offline exploration in XR right away.<br>Type /help below, or use the arrow- or WASD-keys on your keyboard, and mouse-drag to rotate.<br>`, class: ["info","multiline"] })
}, },
initListeners(){ initListeners(){
@ -182,14 +182,13 @@ chatComponent.css = `
line-height:33px; line-height:33px;
} }
#messages .msg.info{ #messages .msg.info{
border: 4px dotted #CCC
font-size: 14px; font-size: 14px;
padding: 3px 16px; padding: 3px 16px;
} }
#messages.guide .guide{ #messages.guide, .guide{
display:unset; display:unset;
} }
$message .guide, .guide{ #messages .guide, .guide{
display:none; display:none;
} }
br.guide{ br.guide{
@ -233,5 +232,28 @@ chatComponent.css = `
height: 18px; height: 18px;
max-width:168px; max-width:168px;
} }
#messages button.emoticon,
#messages .btn.emoticon {
line-height:2px;
width: 20px;
display: inline-block;
padding: 0px 0px;
margin: 0;
vertical-align: middle;
background: none;
border: none;
min-width: 31px;
box-shadow:none;
}
#messages button.emoticon:hover,
#messages .btn.emoticon:hover {
border: 1px solid #ccc !important;
background:#EEE;
}
nomargin{
margin:0;
} }
</style>` </style>`

View file

@ -52,6 +52,7 @@ connectionsComponent = {
}, },
show(){ show(){
$chat.visible = true
if( !network.connected ){ if( !network.connected ){
$chat.send({message:"", el}) $chat.send({message:"", el})
this.renderSettings() this.renderSettings()
@ -75,6 +76,20 @@ connectionsComponent = {
if( theChatnetwork.plugin.name != theWebcam.plugin.name ) $settings.appendChild( theChatnetwork.config(opts) ) if( theChatnetwork.plugin.name != theWebcam.plugin.name ) $settings.appendChild( theChatnetwork.config(opts) )
if( theScene.plugin.name != theWebcam.plugin.name && theScene.plugin.name != theChatnetwork.plugin.name ) if( theScene.plugin.name != theWebcam.plugin.name && theScene.plugin.name != theChatnetwork.plugin.name )
$settings.appendChild( scene.config(opts) ) $settings.appendChild( scene.config(opts) )
},
randomName(){
var names = []
let add = (s) => s.length < 6 && !s.match(/[0-9$]/) && !s.match(/_/) ? names.push(s) : false
for ( var i in window ) add(i)
for ( var i in Object.prototype ) add(i)
for ( var i in Function.prototype ) add(i)
for ( var i in Array.prototype ) add(i)
for ( var i in String.prototype ) add(i)
var a = names[Math.floor(Math.random() * names.length)];
var b = names[Math.floor(Math.random() * names.length)];
var c = names[Math.floor(Math.random() * names.length)];
return String(`${a}-${b}-${c}`).toLowerCase()
} }
},{ },{

View file

@ -12,7 +12,7 @@ menuComponent = {
<div class="xrf footer"> <div class="xrf footer">
<div class="menu"> <div class="menu">
<div id="buttons"></div> <div id="buttons"></div>
<a class="btn" id="more" aria-description="menu with options, like extra accessibility" onclick="$menu.toggle()"></a><br> <a class="btn" id="more" aria-title="menu button" aria-description="menu with options, like extra accessibility" onclick="$menu.toggle()"></a><br>
</div> </div>
</div> </div>
`, `,
@ -21,7 +21,7 @@ menuComponent = {
morelabel: '⚡', morelabel: '⚡',
collapsed: false, collapsed: false,
logo: './../../assets/logo.png', logo: './../../assets/logo.png',
buttons: [`<a class="btn" aria-label="button" aria-description="share URL/screenshot/embed" id="share" onclick="$menu.share()">🔗 share</a><br>`], buttons: [`<a class="btn" aria-label="button" aria-title="share button" aria-description="share URL/screenshot/embed" id="share" onclick="$menu.share()">🔗 share</a><br>`],
$overlay: $overlay = el.querySelector('#overlay'), $overlay: $overlay = el.querySelector('#overlay'),
$logo: $logo = el.querySelector('.logo'), $logo: $logo = el.querySelector('.logo'),
@ -265,6 +265,7 @@ let utils = {
notify(scope){ notify(scope){
return function notify(_str,opts){ return function notify(_str,opts){
if( accessibility.enabled ) return $chat.send({message:_str})
str = _str.replace(/(^\w+):/,"<div class='badge'>\$1</div>") str = _str.replace(/(^\w+):/,"<div class='badge'>\$1</div>")
opts = opts || {status:'info'} opts = opts || {status:'info'}
opts = Object.assign({ status, timeout:4000 },opts) opts = Object.assign({ status, timeout:4000 },opts)
@ -586,7 +587,7 @@ $menu.css = `
height:33px; height:33px;
z-index:2000; z-index:2000;
cursor:pointer; cursor:pointer;
min-width:130px; min-width:145px;
text-decoration:none; text-decoration:none;
margin-top: 15px; margin-top: 15px;
line-height:36px; line-height:36px;
@ -813,18 +814,19 @@ $menu.css = `
border-inline: none; border-inline: none;
border-block: none; border-block: none;
border: 1px solid #AAA; border: 1px solid #AAA;
box-shadow: 0px 0px 5px #0003;
height: 31px; height: 31px;
border-radius: 5px; border-radius: 5px;
background: var(--xrf-lighter-gray); background: var(--xrf-lighter-gray);
padding: 0px 16px;
} }
.xrf table tr td { .xrf table tr td {
vertical-align:middle; vertical-align:middle;
text-align:right;
} }
.xrf table tr td:nth-child(1){ .xrf table tr td:nth-child(1){
padding-right:35px; min-width:95px;
min-width:80px; padding-right:15px;
} }

View file

@ -6,7 +6,6 @@ window.accessibility = (opts) => new Proxy({
// features // features
speak_movements: true, speak_movements: true,
speak_keyboard: true, speak_keyboard: true,
speak_notifications: true,
// audio settings // audio settings
speak_rate: 1, speak_rate: 1,
@ -59,14 +58,6 @@ window.accessibility = (opts) => new Proxy({
this.speak(k,true) this.speak(k,true)
}) })
document.addEventListener('notify', (e) => {
let opts = e.detail
let status = `${opts.status} ` || ''
if( !this.enabled ) return
this.speak(opts.message)
$chat.send({message: opts.message, class:["info","guide"]})
})
document.addEventListener('$menu:buttons:render', (e) => { document.addEventListener('$menu:buttons:render', (e) => {
let $ = e.detail let $ = e.detail
let a = [...$.querySelectorAll('a')] let a = [...$.querySelectorAll('a')]
@ -74,6 +65,10 @@ window.accessibility = (opts) => new Proxy({
a.map( (btn) => { a.map( (btn) => {
if( !btn.href ) btn.setAttribute("href","javascript:void(0)") // important! if( !btn.href ) btn.setAttribute("href","javascript:void(0)") // important!
btn.setAttribute("aria-label","button") btn.setAttribute("aria-label","button")
btn.addEventListener('mouseover', (e) => {
let str = btn.getAttribute("aria-title") + btn.getAttribute('aria-description')
this.speak( str,true)
})
}) })
}) })

View file

@ -46,6 +46,6 @@ window.network = (opts) => new Proxy({
document.addEventListener('$menu:ready', (e) => { document.addEventListener('$menu:ready', (e) => {
window.network = network(e.detail) window.network = network(e.detail)
document.dispatchEvent( new CustomEvent("network:ready", e ) ) document.dispatchEvent( new CustomEvent("network:ready", e ) )
$menu.buttons = ([`<a class="btn" aria-label="button" aria-description="start text/audio/video chat" id="meeting" onclick="$connections.show()">🧑‍🤝‍🧑 connect</a><br>`]) $menu.buttons = ([`<a class="btn" aria-label="button" aria-title="connect button" aria-description="start text/audio/video chat" id="meeting" onclick="$connections.show()">🧑‍🤝‍🧑 connect</a><br>`])
.concat($menu.buttons) .concat($menu.buttons)
}) })

View file

@ -39,8 +39,8 @@ window.matrix = (opts) => new Proxy({
if( this.html[i] ) html += this.html[i](opts) if( this.html[i] ) html += this.html[i](opts)
} }
el.innerHTML = html el.innerHTML = html
el.addEventListener('mouseover', () => { el.querySelector('.badge').addEventListener('mouseover', () => {
window.notify(`${opts.name} is ${opts.description}.<br>You can basically make up your own channelname or use an existing one`) window.notify(`${opts.name} is ${opts.description}.<br>You can basically make up a new channelname or use an existing one`)
}) })
return el return el
} }

View file

@ -14,7 +14,10 @@ window.trystero = (opts) => new Proxy({
html: { html: {
generic: (opts) => `<table id="trystero"> generic: (opts) => `<table id="trystero">
<tr> <tr>
<td><a href="${opts.url}" target="_blank" class="badge">P2P</a></td> <td>
<button class="emoticon" id="randomize" aria-label="button" aria-title="randomize" onclick="$('#trystero #channelname').value = $connections.randomName()">🎲</button>
<a href="${opts.url}" target="_blank" class="badge nomargin">P2P</a>
</td>
<td> <td>
<input type="text" id="channelname" placeholder="channel name"/> <input type="text" id="channelname" placeholder="channel name"/>
</td> </td>
@ -57,7 +60,8 @@ window.trystero = (opts) => new Proxy({
if( this.html[i] ) html += this.html[i](opts) if( this.html[i] ) html += this.html[i](opts)
} }
el.innerHTML = html el.innerHTML = html
el.addEventListener('mouseover', () => { el.querySelector('#randomize').addEventListener('mouseover', () => window.notify("generate random channel name") )
el.querySelector('.badge').addEventListener('mouseover', () => {
window.notify(`${opts.name} is ${opts.description} <br>by using a serverless technology called <a href="${opts.url}" target="_blank">trystero</a>.<br>You can basically make up your own channelname or choose an existing one`) window.notify(`${opts.name} is ${opts.description} <br>by using a serverless technology called <a href="${opts.url}" target="_blank">trystero</a>.<br>You can basically make up your own channelname or choose an existing one`)
}) })
return el return el