xrfragment-haxe/src/3rd/js/plugin/remotestorage/remotestorage.js

119 lines
3.6 KiB
JavaScript
Raw Normal View History

2025-05-09 18:19:10 +02:00
// this demonstrates the remotestorage aframe component
// reactive component for displaying the menu
remoteStorageComponent = (el) => new Proxy({
2025-05-14 09:48:33 +02:00
html: (data) => (`
2025-05-09 18:19:10 +02:00
<style type="text/css">
2025-05-14 09:48:33 +02:00
body #files .rs-button-big{
background: #FFF;
box-shadow: none;
border: 1px solid #CCC;
padding: 10px 0px 49px 10px;
}
#files .rs-button{
background:#CCC;
2025-05-09 18:19:10 +02:00
}
</style>
<div id="remoteFilesTab">
<div id="rswidget"></div>
2025-05-14 09:48:33 +02:00
<br>
<div id="buttons" style="display:none">
<button id="remoteOpen" ><i class="gg-software-upload"></i> open experience</button>
<br>
<button id="remoteSave"><i class="gg-software-download"></i> save private experience</button>
<br>
<button id="remoteSave"><i class="gg-globe-alt"></i> save public experience</button>
</div>
2025-05-09 18:19:10 +02:00
</div>
2025-05-14 09:48:33 +02:00
`),
2025-05-09 18:19:10 +02:00
2025-05-14 09:48:33 +02:00
connected: false,
2025-05-09 18:19:10 +02:00
init(opts){
// create HTML element
2025-05-14 09:48:33 +02:00
$files.tabs = $files.tabs.concat({id:"remoteFiles", name: "online"})
el.innerHTML = this.html(this)
2025-05-09 18:19:10 +02:00
el.className = "tab"
document.querySelector("#files .tab-frame").appendChild(el);
// setup input listeners
(['click']).map( (e) => el.addEventListener(e, (ev) => typeof this[e] == 'function' && this[e](ev.target.id,ev) ) )
// signal ready
setTimeout( () => {
document.dispatchEvent( new CustomEvent("remotestorage:ready", {detail: {$files:this,xrf}}) )
},100)
this.loadScript( () => this.initRemoteStorage() )
return this
},
loadScript(cb){
let el = document.createElement("script")
el.setAttribute("defer","")
el.src = "https://unpkg.com/remotestoragejs@2.0.0-beta.7/release/remotestorage.js"
document.head.appendChild(el)
el = document.createElement("script")
el.src = "https://unpkg.com/remotestorage-widget@1.6.0/build/widget.js"
el.addEventListener('load', () => setTimeout(cb,2000) )
document.head.appendChild(el)
},
initRemoteStorage(){
let apis = {
dropbox: "4jc8nx1lbarp472"
}
2025-05-14 09:48:33 +02:00
const modules = []
if( typeof WebXRF != undefined ){
modules.push(WebXRF) // defined in remotestorage-module-webXRF.js
}
window.remoteStorage = new RemoteStorage({logging: true, modules })
2025-05-09 18:19:10 +02:00
if( Object.keys(apis).length ) remoteStorage.setApiKeys(apis)
2025-05-14 09:48:33 +02:00
remoteStorage.on('connected', (e) => { this.connected = true })
2025-05-09 18:19:10 +02:00
//remoteStorage.on('network-offline', (e) => this.el.sceneEl.emit('remoteStorage.network-offline',e) )
//remoteStorage.on('network-online', (e) => this.el.sceneEl.emit('remoteStorage.network-online',e) )
//remoteStorage.on('error', (e) => this.el.sceneEl.emit('remoteStorage.error',e) )
2025-05-14 09:48:33 +02:00
remoteStorage.on('ready', (e) => { } )
2025-05-09 18:19:10 +02:00
remoteStorage.access.claim( `webxr`, 'rw'); // our data dir
remoteStorage.caching.enable( `/webxr/` ) // local-first, remotestorage-second
2025-05-14 09:48:33 +02:00
remoteStorage.caching.enable( `/public/webxr/` ) // local-first, remotestorage-second
2025-05-09 18:19:10 +02:00
// create widget
let opts = {}
opts.modalBackdrop = false
2025-05-14 09:48:33 +02:00
opts.leaveOpen = true
2025-05-09 18:19:10 +02:00
widget = new window.Widget(window.remoteStorage, opts)
widget.attach( "rswidget" );
},
click(id,e){
2025-05-14 09:48:33 +02:00
//switch(id){
// case "more": return this.toggle(); break;
//}
2025-05-09 18:19:10 +02:00
}
},
{
get(me,k,v){ return me[k] },
set(me,k,v){
me[k] = v
2025-05-14 09:48:33 +02:00
switch( k ){
case 'connected': el.querySelector("#buttons").style.display = v ? 'block' : 'none'; break;
}
2025-05-09 18:19:10 +02:00
},
})
// reactify component!
document.addEventListener('$files:ready', (e) => {
window.$remotestorage = remoteStorageComponent( document.createElement('div') ).init(e.detail)
})