xrsh-com/com/lib/aframe-remotestorage.min.js

417 lines
212 KiB
JavaScript
Raw Normal View History

2025-04-25 16:18:40 +02:00
/*! For license information please see remotestorage.js.LICENSE.txt */!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("RemoteStorage",[],t):"object"==typeof exports?exports.RemoteStorage=t():e.RemoteStorage=t()}(this,function(){return function(){var n,s={548:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Access=void 0;class n{static _rs_init(){}constructor(){this.reset()}get scopes(){return Object.keys(this.scopeModeMap).map(e=>({name:e,mode:this.scopeModeMap[e]}))}get scopeParameter(){return this.scopes.map(e=>`${this._scopeNameForParameter(e)}:${e.mode}`).join(" ")}claim(e,t){if("string"!=typeof e||-1!==e.indexOf("/")||0===e.length)throw new Error("Scope should be a non-empty string without forward slashes");if(!t.match(/^rw?$/))throw new Error("Mode should be either 'r' or 'rw'");this._adjustRootPaths(e),this.scopeModeMap[e]=t}get(e){return this.scopeModeMap[e]}remove(e){const t={};for(const e in this.scopeModeMap)t[e]=this.scopeModeMap[e];this.reset(),delete t[e];for(const e in t)this.claim(e,t[e])}checkPermission(e,t){const n=this.get(e);return n&&("r"===t||"rw"===n)}checkPathPermission(e,t){if(this.checkPermission("*",t))return!0;const n=this._getModuleName(e);return!!this.checkPermission(n,t)}reset(){this.rootPaths=[],this.scopeModeMap={}}_getModuleName(e){if("/"!==e[0])throw new Error("Path should start with a slash");const t=e.replace(/^\/public/,"").match(/^\/([^/]*)\//);return t?t[1]:"*"}_adjustRootPaths(e){"*"in this.scopeModeMap||"*"===e?this.rootPaths=["/"]:e in this.scopeModeMap||(this.rootPaths.push("/"+e+"/"),this.rootPaths.push("/public/"+e+"/"))}_scopeNameForParameter(e){if("*"===e.name&&this.storageType){if("2012.04"===this.storageType)return"";if(this.storageType.match(/remotestorage-0[01]/))return"root"}return e.name}setStorageType(e){this.storageType=e}}t.Access=n,t.default=n},275:function(e,t,n){"use strict";var c=this&&this.__awaiter||function(e,t,n,s){return new(n||(n=Promise))(function(o,i){function r(e){try{a(s.next(e))}catch(e){i(e)}}function c(e){try{a(s.throw(e))}catch(e){i(e)}}function a(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(r,c)}a((s=s.apply(e,t||[])).next())})},l=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Authorize=void 0;const o=l(n(334)),i=n(746),a=l(n(503)),d=n(368);let r;function u(e){const n=e||s.getLocation().href,t={};for(const[e,s]of new URL(n).searchParams)t[e]=s;const o=n.indexOf("#");if(-1===o)return t;const i=n.substring(o+1);return i.includes("=")?i.split("&").reduce(function(e,t){const n=t.split("=");if("state"===n[0]&&n[1].match(/rsDiscovery/)){let t=decodeURIComponent(n[1]);const s=t.substr(t.indexOf("rsDiscovery=")).split("&")[0].split("=")[1];e.rsDiscovery=JSON.parse(atob(s)),t=t.replace(new RegExp("&?rsDiscovery="+s),""),t.length>0&&(e.state=t)}else e[decodeURIComponent(n[0])]=decodeURIComponent(n[1]);return e},t):t}class s{static authorize(e,t){if((0,o.default)("[Authorize] authURL = ",t.authURL,"scope = ",t.scope,"redirectUri = ",t.redirectUri,"clientId = ",t.clientId,"response_type =",t.response_type),!t.scope)throw new Error("Cannot authorize due to undefined or empty scope; did you forget to access.claim()?");if(!(0,i.localStorageAvailable)()&&"remotestorage"===e.backend){t.redirectUri+=t.redirectUri.indexOf("#")>0?"&":"#";const n={userAddress:e.remote.userAddress,href:e.remote.href,storageApi:e.remote.storageApi,properties:e.remote.properties};t.redirectUri+="rsDiscovery="+(0,i.toBase64)(JSON.stringify(n))}const n=function(e){const n=new URL(e.redirectUri);e.state||(e.state=n.hash?n.hash.substring(1):""),e.response_type||(e.response_type="token");const t=new URL(e.authURL);t.searchParams.set("redirect_uri",e.redirectUri.replace(/#.*$/,"")),t.searchParams.set("scope",e.scope),t.searchParams.set("client_id",e.clientId);for(const n of["state","response_type","code_challenge","code_challenge_method","token_access_type"]){con
z-index: 21000000;
}
.rs-widget {
box-sizing: border-box;
overflow: hidden;
max-width: 350px;
padding: 10px;
margin: 10px;
border-radius: 3px;
background-color: #fff;
box-shadow: 0 1px 2px 0 rgba(0,0,0,0.1), 0 3px 8px 0 rgba(0,0,0,0.2);
font-family: arial, sans-serif;
font-size: 16px;
color: #333;
will-change: max-height, height, width, opacity, max-width, background, box-shadow;
transition-property: width, height, opacity, max-width, max-height, background, box-shadow;
transition-duration: 300ms;
}
.rs-widget * {
box-sizing: border-box;
}
.rs-widget .rs-hidden {
display: none;
}
.rs-box {
overflow: hidden;
will-change: height;
transition-property: height, width, max-height;
transition-duration: 300ms;
transition-timing-function: ease-in;
opacity: 0;
max-height: 0px;
}
.rs-box.rs-selected:not([aria-hidden=true]) {
opacity: 1;
max-height: 420px;
}
/* Main logo */
.rs-main-logo {
float: left;
height: 36px;
width: 36px;
margin-top: 1px;
margin-right: 0.625em;
transition: margin-left 300ms ease-out, transform 300ms ease-out;
cursor: pointer;
}
.rs-widget .rs-backend-remotestorage svg#rs-main-logo-remotestorage {
display: block;
}
.rs-widget[class*="rs-backend-"]:not(.rs-backend-remotestorage) svg#rs-main-logo-remotestorage {
display: none;
}
.rs-widget.rs-backend-dropbox svg#rs-main-logo-dropbox {
display: block;
}
.rs-widget:not(.rs-backend-dropbox) svg#rs-main-logo-dropbox {
display: none;
}
.rs-widget.rs-backend-googledrive svg#rs-main-logo-googledrive {
display: block;
}
.rs-widget:not(.rs-backend-googledrive) svg#rs-main-logo-googledrive {
display: none;
}
polygon.rs-logo-shape {
fill: #FF4B03;
}
polygon.rs-logo-shape,
#rs-main-logo-dropbox path,
#rs-main-logo-googledrive path {
transition-property: fill;
transition-duration: 0.5s;
}
.rs-offline polygon.rs-logo-shape,
.rs-offline #rs-main-logo-dropbox path,
.rs-offline #rs-main-logo-googledrive path {
fill: #888;
transition-property: fill;
transition-duration: 0.5s;
}
/* Hide everything except logo when connected and clicked outside of box */
.rs-closed {
max-width: 56px;
background-color: transparent;
box-shadow: none;
opacity: 0.5;
transition: max-height 100ms ease-out 0ms, max-width 300ms ease-out 300ms, background 300ms ease-in 200ms, opacity 300ms ease 200ms;
}
.rs-closed:hover {
cursor: pointer;
opacity: 1;
}
.rs-box-initial {
transition-duration: 0ms;
}
.rs-box-initial:hover {
cursor: pointer;
}
.rs-widget a {
color: #0093cc;
}
/* HEADLINE */
.rs-small-headline {
font-size: 1em;
font-weight: bold;
margin: 0;
margin-bottom: 2px;
height: 1.2em;
word-break: break-all;
overflow: hidden;
line-height: 1em;
}
.rs-sub-headline {
word-break: break-all;
overflow: hidden;
color: #666;
font-size: 0.92em;
height: 1.2em;
}
.rs-big-headline {
font-size: 1.625em;
font-weight: normal;
text-align: center;
margin-top: 20px;
margin-bottom: 20px;
}
/* BUTTONS */
.rs-button {
font: inherit;
color: inherit;
background-color: transparent;
border: 1px solid #dcdcdc;
border-radius: 3px;
cursor: pointer;
}
.rs-button-small {
padding: 0.6em 0.7em;
margin-left: 0.2em;
transition: border-color 300ms ease-out;
}
.rs-button-small svg {
vertical-align: top;
}
.rs-button-wrap {
margin-top: 10px;
}
.rs-button-wrap img,
.rs-button-wrap svg {
float: left;
margin-right: 0.6em;
width: 40px;
height: 40px;
}
.rs-button-big {
padding: 15px 10px;
margin-bottom: 10px;
display: block;
width: 100%;
text-align: left;
transition: box-shadow 200ms;
}
.rs-button-big > div {
font-size: 1.125em;
padding: 10px 0;
}
.rs-button-big:hover {
box-shadow: 0 1px 2px 0 rgba(0,0,0,0.1), 0 3px 8px 0 rgba(0,0,0,0.2);
}
.rs-button-big:active {
background-color: #eee;
box-shadow: 0 1px 2px 0 rgba(0,0,0,0.1), 0 3px 8px 0 rgba(0,0,0,0.2);
}
.rs-button-big:last-child {
margin-bottom: 0;
}
.rs-content {
padding: 0 10px 10px 10px;
}
.rs-state-choose .rs-main-logo,
.rs-state-sign-in .rs-main-logo {
margin-left: 45%;
float: none;
}
.rs-sign-in-form input[type=text] {
padding: 15px 10px;
display: block;
width: 100%;
font: inherit;
height: 52px;
border: 1px solid #aaa;
border-radius: 0;
box-shadow: none;
}
.rs-sign-in-form button.rs-connect {
padding: 15px 10px;
margin-top: 20px;
margin-bottom: 15px;
display: block;
width: 100%;
border: none;
border-radius: 3px;
background-color: #3fb34f;
font: inherit;
color: #fff;
transition: box-shadow 200ms, background-color 200ms;
}
.rs-sign-in-form button.rs-connect:hover {
cursor: pointer;
background-color: #4BCB5D;
box-shadow: 0 1px 2px 0 rgba(0,0,0,0.1), 0 3px 8px 0 rgba(0,0,0,0.2);
}
.rs-sign-in-form button.rs-connect:active {
background-color: #3fb34f;
}
.rs-sign-in-form button.rs-connect:disabled,
.rs-sign-in-form button.rs-connect:disabled:hover {
background-color: #aaa;
}
.rs-sign-in-form button.rs-connecting svg {
height: 1em;
width: auto;
vertical-align: middle;
margin-left: 0.5em;
animation: rs-spin 1s linear infinite;
}
.rs-sign-in-error.rs-hidden,
.rs-box-error.rs-hidden {
height: 0;
}
.rs-sign-in-error.rs-visible,
.rs-box-error.rs-visible {
height: auto;
border-radius: 3px;
padding: 0.5em 0.5em;
margin-top: 0.5em;
text-align: center;
background-color: rgba(255,0,0,0.1);
color: darkred;
}
.rs-box-error {
display: flex;
flex-direction: row;
}
.rs-box-error .rs-error-message {
flex: auto;
}
/*Choose provider box */
.rs-box-choose {
text-align: center;
overflow: hidden;
}
.rs-box-choose p {
margin-top: 0;
margin-bottom: 20px;
line-height: 1.4em;
}
/*Connected box */
.rs-box-connected {
display: flex;
flex-direction: row;
height: 40px;
transition: height 0s;
}
.rs-connected-text {
flex: auto;
min-width: 0;
}
.rs-box-connected .rs-user {
font-weight: bold;
text-overflow: ellipsis;
overflow: hidden;
word-break: keep-all;
}
.rs-connected-buttons, .rs-error-buttons {
flex: none;
}
.rs-disconnect:hover {
border-color: #FF2D2D;
}
.rs-disconnect:hover .rs-icon{
fill: #FF2D2D;
}
.rs-sync:hover {
border-color: #FFBB0C;
}
.rs-sync:hover .rs-icon {
fill: #FFBB0C;
}
.rs-sync.rs-rotate {
border-color: #FFBB0C;
}
.rs-sync.rs-rotate .rs-icon {
fill: #FFBB0C;
animation: rs-spin 1s linear infinite;
}
/* Floating widget styles (top right corner) */
.rs-floating {
position: fixed;
top: 0;
right: 0;
}
@keyframes rs-spin {
100% {
transform: rotate(360deg);
transform: rotate(360deg);
}
}
/* Small/mobile screens */
@media screen and (max-width: 420px) {
.rs-widget {
font-size: 100%;
transition: all 300ms ease-out;
max-width: 400px;
}
.rs-floating {
position: relative;
top: auto;
right: auto
}
.rs-closed {
max-width: 56px;
}
.rs-state-choose,
.rs-state-sign-in {
position: fixed;
top: 0;
left: 0;
right: 0;
max-width: 100%;
}
}
/* remove dotted outline border on Firefox */
.rs-widget a:focus,
.rs-widget a:active,
.rs-widget button:focus,
.rs-widget input:focus {
outline:none;
}
.rs-widget button::-moz-focus-inner,
.rs-widget input[type="button"]::-moz-focus-inner {
border:0;
}
/* prevent rounded buttons on mobile Safari */
.rs-widget button,
.rs-widget input[type="button"] {
-webkit-appearance: none;
}
.remotestorage-widget-modal-backdrop {
display: none;
position: fixed;
top: 0;
bottom: 0;
left: 0;
right: 0;
background-color: rgba(0, 0, 0, 0.5);
opacity: 0;
transition: opacity 0.3s linear;
}
.remotestorage-widget-modal-backdrop.visible {
opacity: 1;
transition: opacity 0.3s linear;
}
`,e.appendChild(t),e}},{key:"setModalClass",value:function(){if(this.modalBackdrop){if("onlySmallScreens"===this.modalBackdrop&&!this.isSmallScreen())return;this.rsWidget.classList.add("rs-modal")}}},{key:"setupElements",value:function(){this.rsWidget=document.querySelector(".rs-widget"),this.rsBackdrop=document.querySelector(".remotestorage-widget-modal-backdrop"),this.rsInitial=document.querySelector(".rs-box-initial"),this.rsChoose=document.querySelector(".rs-box-choose"),this.rsConnected=document.querySelector(".rs-box-connected"),this.rsSignIn=document.querySelector(".rs-box-sign-in"),this.rsConnectedLabel=document.querySelector(".rs-box-connected .rs-sub-headline"),this.rsChooseRemoteStorageButton=document.querySelector("button.rs-choose-rs"),this.rsChooseDropboxButton=document.querySelector("button.rs-choose-dropbox"),this.rsChooseGoogleDriveButton=document.querySelector("button.rs-choose-googledrive"),this.rsErrorBox=document.querySelector(".rs-box-error .rs-error-message"),this.rs.apiKeys.hasOwnProperty("googledrive")||this.rsChooseGoogleDriveButton.parentNode.removeChild(this.rsChooseGoogleDriveButton),this.rs.apiKeys.hasOwnProperty("dropbox")||this.rsChooseDropboxButton.parentNode.removeChild(this.rsChooseDropboxButton),this.rsSignInForm=document.querySelector(".rs-sign-in-form"),this.rsAddressInput=this.rsSignInForm.querySelector("input[name=rs-user-address]"),this.rsConnectButton=document.querySelector(".rs-connect"),this.rsDisconnectButton=document.querySelector(".rs-disconnect"),this.rsSyncButton=document.querySelector(".rs-sync"),this.rsLogo=document.querySelector(".rs-widget-icon"),this.rsErrorReconnectLink=document.querySelector(".rs-box-error a.rs-reconnect"),this.rsErrorDisconnectButton=document.querySelector(".rs-box-error button.rs-disconnect"),this.rsConnectedUser=document.querySelector(".rs-connected-text h1.rs-user")}},{key:"setupHandlers",value:function(){var e=this;this.rs.on("connected",function(){return e.eventHandler("connected")}),this.rs.on("ready",function(){return e.eventHandler("ready")}),this.rs.on("disconnected",function(){return e.eventHandler("disconnected")}),this.rs.on("network-online",function(){return e.eventHandler("network-online")}),this.rs.on("network-offline",function(){return e.eventHandler("network-offline")}),this.rs.on("error",function(t){return e.eventHandler("error",t)}),this.setEventListeners(),this.setClickHandlers()}},{key:"attach",value:function(e){var t,n=this.createHtmlTemplate();if(e){if(t=document.getElementById(e),!parent)throw'Failed to find target DOM element with id="'+e+'"'}else t=document.body;t.appendChild(n),this.setupElements(),this.setupHandlers(),this.setInitialState(),this.setModalClass()}},{key:"setEventListeners",value:function(){var e=this;this.rsSignInForm.addEventListener("submit",function(t){t.preventDefault();var n=document.querySelector("input[name=rs-user-address]").value;e.disableConnectButton(),e.rs.connect(n)})}},{key:"showChooseOrSignIn",value:function(){this.rsWidget.classList.contains("rs-modal")&&(this.rsBackdrop.style.display="block",this.rsBackdrop.classList.add("visible")),this.rs.apiKeys&&Object.keys(this.rs.apiKeys).length>0?this.setState("choose"):this.setState("sign-in")}},{key:"setClickHandlers",value:function(){var e=this;this.rsInitial.addEventListener("click",function(){return e.showChooseOrSignIn()}),this.rsChooseRemoteStorageButton.addEventListener("click",function(){e.setState("sign-in"),e.rsAddressInput.focus()}),this.rsChooseDropboxButton.addEventListener("click",function(){return e.rs.dropbox.connect()}),this.rsChooseGoogleDriveButton.addEventListener("click",function(){return e.rs.googledrive.connect()}),this.rsDisconnectButton.addEventListener("click",function(){return e.rs.disconnect()}),this.rsErrorReconnectLink.addEventListener("click",function(){return e.rs.reconnect()}),this.rsErrorDisconnectButton.addEventListener("click",function(){return e.rs.disconnect()}),this.rs.hasFeature("Sync")&&this.rsSyncButton.addEventListener("click",function(){e.rsSyncButton.classList.contains("rs-rotate")?(e.rs.stopSync(),e.rs
<g fill="none" fill-rule="evenodd">
<g transform="translate(1 1)" stroke-width="2">
<circle stroke-opacity=".5" cx="18" cy="18" r="18"/>
<path d="M36 18c0-9.94-8.06-18-18-18"></path>
</g>
</g>
</svg>
`)}},{key:"enableConnectButton",value:function(){this.rsConnectButton.disabled=!1,this.rsConnectButton.textContent="Connect",this.rsConnectButton.classList.remove("rs-connecting")}},{key:"setOffline",value:function(){this.online&&(this.rsWidget.classList.add("rs-offline"),this.rsConnectedLabel.textContent="Offline",this.online=!1)}},{key:"setOnline",value:function(){this.online||(this.rsWidget.classList.remove("rs-offline"),this.active&&(this.rsConnectedLabel.textContent="Connected")),this.online=!0}},{key:"setBackendClass",value:function(e){this.rsWidget.classList.remove("rs-backend-remotestorage"),this.rsWidget.classList.remove("rs-backend-dropbox"),this.rsWidget.classList.remove("rs-backend-googledrive"),e&&this.rsWidget.classList.add("rs-backend-".concat(e))}},{key:"showErrorBox",value:function(e){this.rsErrorBox.innerHTML=e,this.setState("error")}},{key:"hideErrorBox",value:function(){this.rsErrorBox.innerHTML="",this.close()}},{key:"handleDiscoveryError",value:function(e){var t=document.querySelector(".rs-sign-in-error");t.innerHTML=e.message,t.classList.remove("rs-hidden"),t.classList.add("rs-visible"),this.enableConnectButton()}},{key:"handleSyncError",value:function(e){console.debug('Encountered SyncError: "'.concat(e.message,'"')),this.setOffline()}},{key:"handleUnauthorized",value:function(e){e.code&&"access_denied"===e.code?this.rs.disconnect():(this.open(),this.showErrorBox(e.message+" "),this.rsErrorBox.appendChild(this.rsErrorReconnectLink),this.rsErrorReconnectLink.classList.remove("rs-hidden"))}},{key:"updateLastSyncedStatus",value:function(){var t,e=new Date;if(this.online)return this.lastSynced=e,void(this.rsConnectedLabel.textContent="Synced just now");this.lastSynced?(t=Math.round((e.getTime()-this.lastSynced.getTime())/1e3),this.rsConnectedLabel.textContent="Synced ".concat(t," seconds ago")):this.rsWidget.classList.contains("rs-state-unauthorized")||(this.rsConnectedLabel.textContent="Offline")}},{key:"isSmallScreen",value:function(){return window.innerWidth<421}}],n&&o(t.prototype,n),Object.defineProperty(t,"prototype",{writable:!1}),e}();const i=n;return t.default})()}),AFRAME.registerComponent("remotestorage",{schema:{dropbox:{type:"string",default:""},googledrive:{type:"string",default:""},leaveOpen:{type:"bool",default:!1},autoCloseAfter:{type:"number",default:1500},skipInitial:{type:"bool",default:!1},logging:{type:"bool",default:!1},modalBackdrop:{type:"string",default:"onlySmallScreens"},folder:{type:"string"},domid:{type:"string"}},init:function(){let t={};remoteStorage=this.remoteStorage=new RemoteStorage({logging:this.data.logging}),this.data.dropbox&&(t.dropbox=this.data.dropbox),this.data.googledrive&&(t.googledrive=this.data.googledrive),Object.keys(t).length&&remoteStorage.setApiKeys(t),remoteStorage.on("connected",e=>this.el.sceneEl.emit("remoteStorage.connected",e)),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)),remoteStorage.on("ready",e=>this.el.sceneEl.emit("remoteStorage.ready",e)),remoteStorage.access.claim(this.data.folder,"rw"),remoteStorage.caching.enable(`/${this.data.folder}/`);let e={...this.data};e.modalBackdrop=="false"&&(e.modalBackdrop=!1),e.modalBackdrop=="true"&&(e.modalBackdrop=!0),widget=this.widget=new Widget(remoteStorage,e),widget.attach(this.data.domid)}})