Hello world
This commit is contained in:
13 files changed
+539
No files matched your search
@@ -0,0 +1 @@
|
||||
notes.txt
|
||||
+107
@@ -0,0 +1,107 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
|
||||
<title>RS Location</title>
|
||||
<script type="text/javascript" src="vendor/remotestorage.js"></script>
|
||||
<script type="text/javascript" src="vendor/widget.js"></script>
|
||||
<script type="module" src="main.mjs"></script>
|
||||
<link rel="stylesheet" href="style.css" type="text/css">
|
||||
</head>
|
||||
<body>
|
||||
<h1>RS Location</h1>
|
||||
<p>
|
||||
This page lets you geocode your current location (centered on the nearest
|
||||
city, or entered manually), and upload both a GeoJSON document as well as
|
||||
map image to your remote storage.
|
||||
</p>
|
||||
|
||||
<div class="view disconnected hidden">
|
||||
<div id="rs-widget-container"></div>
|
||||
</div>
|
||||
|
||||
<main class="view connected hidden">
|
||||
<section class="settings">
|
||||
<h2>Settings</h2>
|
||||
<p class="rs-account">
|
||||
Storage connected:
|
||||
<strong><span class="user-address"></span></strong>
|
||||
<button class="disconnect">Disconnect</button>
|
||||
</p>
|
||||
<h3>Geocoding</h3>
|
||||
<p>
|
||||
<label>
|
||||
OpenCage API key/token:<br>
|
||||
<input type="text" class="api-key opencage">
|
||||
</label>
|
||||
</p>
|
||||
<h3>Maps</h3>
|
||||
<p>
|
||||
<label>
|
||||
Mapbox API key/token:<br>
|
||||
<input type="text" class="api-key mapbox">
|
||||
</label>
|
||||
</p>
|
||||
<p>
|
||||
<label>
|
||||
Map zoom factor:
|
||||
<select class="map-zoom-factor">
|
||||
<option value="0" selected="selected">0</option>
|
||||
<option value="1">1</option>
|
||||
<option value="2">2</option>
|
||||
<option value="3">3</option>
|
||||
<option value="4">4</option>
|
||||
</select>
|
||||
</label>
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<div>
|
||||
<section class="location-actions">
|
||||
<h2>New location</h2>
|
||||
<p>
|
||||
<button class="get-coordinates">Get current/GPS location</button>
|
||||
</p>
|
||||
<form class="get-location">
|
||||
<p>
|
||||
<input class="location" placeholder="City, Country">
|
||||
<input type="submit" value="Get location">
|
||||
</p>
|
||||
</form>
|
||||
</section>
|
||||
|
||||
<section class="current-location hidden">
|
||||
<h3>Current/GPS location</h3>
|
||||
<p class="coords"></p>
|
||||
<p class="formatted-result"></p>
|
||||
</section>
|
||||
<section class="current-city hidden">
|
||||
<h3>Current city</h3>
|
||||
<p class="coords"></p>
|
||||
<p class="formatted-result"></p>
|
||||
<p class="map"></p>
|
||||
<p>
|
||||
<button class="publish">Publish</button>
|
||||
</p>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<section class="profile public hidden">
|
||||
<h2>Public location profile</h2>
|
||||
<p class="link"></p>
|
||||
<p class="coords"></p>
|
||||
<p class="formatted"></p>
|
||||
<p class="map"></p>
|
||||
</section>
|
||||
<section class="profile private hidden">
|
||||
<h2>Private location profile</h2>
|
||||
<p class="coords"></p>
|
||||
<p class="formatted"></p>
|
||||
<p class="map"></p>
|
||||
</section>
|
||||
</div>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,238 @@
|
||||
import ApiKeys from './modules/rs-module-api-keys.mjs';
|
||||
import Geocoder from './modules/geocode.mjs';
|
||||
import initializeSettings from './modules/settings.mjs';
|
||||
import initializeProfileUpdates from './modules/profile.mjs';
|
||||
import { showElement, hideElement, renderImage } from './modules/dom-helpers.mjs';
|
||||
|
||||
const remoteStorage = new RemoteStorage({ modules: [ApiKeys] });
|
||||
remoteStorage.access.claim('profile', 'rw');
|
||||
remoteStorage.access.claim('api-keys', 'rw');
|
||||
remoteStorage.caching.enable('/profile/');
|
||||
remoteStorage.caching.enable('/public/profile/');
|
||||
|
||||
const widget = new Widget(remoteStorage, {
|
||||
modalBackdrop: true,
|
||||
skipInitial: true
|
||||
});
|
||||
widget.attach('rs-widget-container');
|
||||
|
||||
document.querySelector('.rs-account .disconnect').addEventListener('click', e => {
|
||||
remoteStorage.disconnect();
|
||||
});
|
||||
|
||||
let data = {
|
||||
currentUserLocation: {
|
||||
coords: null,
|
||||
openCageResult: null
|
||||
},
|
||||
currentCity: {
|
||||
coords: null,
|
||||
openCageResult: null,
|
||||
geoJSON: null,
|
||||
imageBlob: null,
|
||||
imageObjectURL: null
|
||||
}
|
||||
};
|
||||
|
||||
data.currentUserLocation = new Proxy(data.currentUserLocation, {
|
||||
set (obj, prop, value) {
|
||||
obj[prop] = value;
|
||||
|
||||
switch(prop) {
|
||||
case 'coords':
|
||||
renderCoordinates();
|
||||
break;
|
||||
case 'openCageResult':
|
||||
renderFormattedResult();
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
data.currentCity = new Proxy(data.currentCity, {
|
||||
set (obj, prop, value) {
|
||||
obj[prop] = value;
|
||||
|
||||
switch(prop) {
|
||||
case 'coords':
|
||||
fetchMapImage();
|
||||
break;
|
||||
case 'openCageResult':
|
||||
renderFormattedCityResult();
|
||||
createGeoJSON();
|
||||
break;
|
||||
case 'geoJSON':
|
||||
break;
|
||||
case 'imageBlob':
|
||||
break;
|
||||
case 'imageObjectURL':
|
||||
renderMapImage();
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
remoteStorage.on('not-connected', () => {
|
||||
showElement('.view.disconnected');
|
||||
});
|
||||
|
||||
remoteStorage.on('connected', () => {
|
||||
hideElement('.view.disconnected');
|
||||
showElement('.view.connected');
|
||||
|
||||
document.querySelector('.rs-account .user-address').innerHTML = remoteStorage.remote.userAddress;
|
||||
|
||||
initializeSettings(remoteStorage);
|
||||
initializeProfileUpdates(remoteStorage, data);
|
||||
});
|
||||
|
||||
remoteStorage.on('disconnected', () => {
|
||||
hideElement('.view.connected');
|
||||
showElement('.view.disconnected');
|
||||
});
|
||||
|
||||
const geocoder = new Geocoder(remoteStorage);
|
||||
|
||||
const mapBoxStyle = 'v1/mapbox/streets-v10'
|
||||
const imageSize = '260x100@2x'
|
||||
|
||||
document.querySelector('button.get-coordinates').addEventListener('click', () => {
|
||||
console.debug('Getting current/GPS location...');
|
||||
navigator.geolocation.getCurrentPosition(async position => {
|
||||
console.debug('Location data:', position);
|
||||
data.currentUserLocation.coords = {
|
||||
lat: position.coords.latitude.toFixed(4),
|
||||
lng: position.coords.longitude.toFixed(4)
|
||||
};
|
||||
await geocodeUserLocation();
|
||||
geocodeNearestCity();
|
||||
});
|
||||
})
|
||||
|
||||
document.querySelector('form.get-location').addEventListener('submit', e => {
|
||||
e.preventDefault();
|
||||
console.debug('Geocoding supplied location...');
|
||||
geocodeLocationInput().catch(err => window.alert(err));
|
||||
})
|
||||
|
||||
async function geocodeUserLocation () {
|
||||
console.debug('Geocoding coordinates...');
|
||||
const { lat, lng } = data.currentUserLocation.coords;
|
||||
|
||||
return geocoder.reverse(lat, lng).then(res => {
|
||||
const result = res.results[0];
|
||||
console.debug('Result:', result);
|
||||
data.currentUserLocation.openCageResult = result;
|
||||
})
|
||||
}
|
||||
|
||||
function geocodeNearestCity () {
|
||||
console.debug('Geocoding nearest city...');
|
||||
const result = data.currentUserLocation.openCageResult;
|
||||
let { city, town, village, hamlet, county } = result.components;
|
||||
if (!city) { city = town || village || hamlet || county; }
|
||||
const query = `${city}, ${result.components.state}, ${result.components['ISO_3166-1_alpha-2']}&no_record=1&min_confidence=3`;
|
||||
|
||||
return geocoder.geocode(query).then(res => {
|
||||
const result = res.results[0];
|
||||
console.debug('Result:', result);
|
||||
data.currentCity.coords = {
|
||||
lat: result.geometry.lat.toFixed(4),
|
||||
lng: result.geometry.lng.toFixed(4)
|
||||
};
|
||||
data.currentCity.openCageResult = result;
|
||||
})
|
||||
}
|
||||
|
||||
function geocodeLocationInput () {
|
||||
console.debug('Geocoding supplied location...');
|
||||
const input = document.querySelector('input.location').value;
|
||||
const query = `${input},&no_record=1&min_confidence=3`;
|
||||
|
||||
return geocoder.geocode(query).then(res => {
|
||||
return new Promise((resolve, reject) => {
|
||||
const result = res.results[0];
|
||||
console.debug('Result:', result);
|
||||
if (result) {
|
||||
data.currentCity.coords = {
|
||||
lat: result.geometry.lat.toFixed(4),
|
||||
lng: result.geometry.lng.toFixed(4)
|
||||
};
|
||||
data.currentCity.openCageResult = result;
|
||||
resolve();
|
||||
} else {
|
||||
reject('Nothing found');
|
||||
}
|
||||
});
|
||||
})
|
||||
}
|
||||
|
||||
function createGeoJSON () {
|
||||
const res = data.currentCity.openCageResult;
|
||||
const { city, town, village, hamlet, county } = res.components;
|
||||
data.currentCity.geoJSON = {
|
||||
"type": "Feature",
|
||||
"geometry": {
|
||||
"type": "Point",
|
||||
"coordinates": [res.geometry.lng, res.geometry.lat]
|
||||
},
|
||||
"city": city || town || village || hamlet,
|
||||
"state": res.components.state,
|
||||
"country": res.components.country,
|
||||
"timezone": res.annotations.timezone
|
||||
}
|
||||
console.debug('Created GeoJSON object:', data.currentCity.geojson);
|
||||
}
|
||||
|
||||
async function fetchMapImage () {
|
||||
const mapBoxToken = await remoteStorage.apiKeys.get('mapbox').then(c => c.token);
|
||||
const zoomFactor = localStorage.getItem('rs-location:map-zoom-factor');
|
||||
const { lat, lng } = data.currentCity.coords;
|
||||
const url = encodeURI(`https://api.mapbox.com/styles/${mapBoxStyle}/static/pin-s-harbor+fff(${lng},${lat})/${lng},${lat},${zoomFactor}/${imageSize}?access_token=${mapBoxToken}`)
|
||||
console.debug('Fetching map image...');
|
||||
|
||||
return fetch(url)
|
||||
.then(response => response.blob())
|
||||
.then(imageData => {
|
||||
const url = URL.createObjectURL(imageData);
|
||||
data.currentCity.imageBlob = imageData;
|
||||
data.currentCity.imageObjectURL = url
|
||||
|
||||
return fetch(url)
|
||||
.then(res => res.arrayBuffer())
|
||||
.then(arrayBuffer => {
|
||||
data.currentCity.imageArrayBuffer = arrayBuffer;
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
function renderMapImage () {
|
||||
const url = data.currentCity.imageObjectURL;
|
||||
renderImage('section.current-city .map', url, '260x100');
|
||||
}
|
||||
|
||||
function renderCoordinates () {
|
||||
showElement('section.current-location');
|
||||
const coordsEl = document.querySelector('section.current-location .coords');
|
||||
const coords = data.currentUserLocation.coords;
|
||||
coordsEl.innerHTML = `Latitude: ${coords.lat}<br>Longitude: ${coords.lng}`;
|
||||
}
|
||||
|
||||
function renderFormattedResult () {
|
||||
const el = document.querySelector('section.current-location .formatted-result');
|
||||
el.innerHTML = data.currentUserLocation.openCageResult.formatted;
|
||||
}
|
||||
|
||||
function renderFormattedCityResult () {
|
||||
showElement('section.current-city');
|
||||
const coordsEl = document.querySelector('section.current-city .coords');
|
||||
const coords = data.currentCity.coords;
|
||||
coordsEl.innerHTML = `Latitude: ${coords.lat}<br>Longitude: ${coords.lng}`;
|
||||
|
||||
const result = data.currentCity.openCageResult;
|
||||
const el = document.querySelector('section.current-city .formatted-result');
|
||||
const { city, town, village, hamlet, county } = result.components;
|
||||
el.innerHTML = `${city || town || village || hamlet || county}, ${result.components.country}`;
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
function hideElement (selector) {
|
||||
document.querySelector(selector)
|
||||
.classList.add('hidden');
|
||||
}
|
||||
|
||||
function showElement (selector) {
|
||||
document.querySelector(selector)
|
||||
.classList.remove('hidden');
|
||||
}
|
||||
|
||||
function updateHTML (selector, content) {
|
||||
document.querySelector(selector).innerHTML = content;
|
||||
}
|
||||
|
||||
function renderImage (parentSelector, imageUrl, size) {
|
||||
const imageEl = document.createElement('img');
|
||||
imageEl.setAttribute("src", imageUrl);
|
||||
if (size) {
|
||||
const [ width, height ] = size.split('x');
|
||||
imageEl.setAttribute("width", width);
|
||||
imageEl.setAttribute("height", height);
|
||||
}
|
||||
const parentEl = document.querySelector(parentSelector);
|
||||
parentEl.innerHTML = '';
|
||||
parentEl.appendChild(imageEl);
|
||||
}
|
||||
|
||||
export { hideElement, showElement, updateHTML, renderImage };
|
||||
@@ -0,0 +1,20 @@
|
||||
export default class Geocoder {
|
||||
|
||||
constructor (remoteStorage) {
|
||||
this.rs = remoteStorage;
|
||||
}
|
||||
|
||||
async reverse (lat, lng) {
|
||||
const q = `${lat}+${lng}&no_record=1&min_confidence=3`;
|
||||
return this.geocode(q);
|
||||
}
|
||||
|
||||
async geocode (q) {
|
||||
const openCageKey = await this.rs.apiKeys.get('opencage').then(c => c.token);
|
||||
const response = await fetch(
|
||||
`https://api.opencagedata.com/geocode/v1/json?key=${openCageKey}&q=${q}&no_record=1`
|
||||
);
|
||||
return response.json();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
import { showElement, updateHTML, renderImage } from './dom-helpers.mjs';
|
||||
|
||||
function formattedCoordinates (geo) {
|
||||
return `Latitude: ${geo.geometry.coordinates[1]}<br>` +
|
||||
`Longitude: ${geo.geometry.coordinates[0]}<br>`;
|
||||
}
|
||||
|
||||
function formattedLocation (geo) {
|
||||
return `${geo.city || geo.state}, ${geo.country}`;
|
||||
}
|
||||
|
||||
async function renderPublicProfile (geo) {
|
||||
showElement('.profile.public');
|
||||
updateHTML('.profile.public .coords', formattedCoordinates(geo));
|
||||
updateHTML('.profile.public .formatted', formattedLocation(geo));
|
||||
}
|
||||
|
||||
async function initializeProfileUpdates(remoteStorage, data) {
|
||||
const privateClient = remoteStorage.scope('/profile/');
|
||||
const publicClient = remoteStorage.scope('/public/profile/');
|
||||
const profileUrl = await publicClient.getItemURL('current-location');
|
||||
const imageUrl = await publicClient.getItemURL('current-location.png');
|
||||
updateHTML('.profile.public .link', `<a href="${profileUrl}">Public URL</a>`);
|
||||
|
||||
await publicClient.getObject('current-location').then(async res => {
|
||||
if (res) {
|
||||
renderPublicProfile(res);
|
||||
renderImage('.profile.public .map', imageUrl, '260x100');
|
||||
}
|
||||
})
|
||||
|
||||
document.querySelector('.current-city button.publish').addEventListener('click', async () => {
|
||||
const content = JSON.stringify(data.currentCity.geoJSON);
|
||||
const mapImageData = data.currentCity.imageArrayBuffer;
|
||||
|
||||
publicClient.storeFile('application/geo+json', 'current-location', content)
|
||||
.then(renderPublicProfile(data.currentCity.geoJSON));
|
||||
|
||||
publicClient.storeFile('image/png', 'current-location.png', mapImageData)
|
||||
.then(() => {
|
||||
renderImage('.profile.public .map', `${imageUrl}?${new Date().getTime()}`, '260x100');
|
||||
});
|
||||
})
|
||||
}
|
||||
|
||||
export default initializeProfileUpdates;
|
||||
@@ -0,0 +1,23 @@
|
||||
const ApiKeys = { name: 'api-keys', builder: function (privateClient, publicClient) {
|
||||
privateClient.declareType('credentials', {
|
||||
// TODO add schema
|
||||
});
|
||||
|
||||
return {
|
||||
exports: {
|
||||
set (serviceName, credentials = {}) {
|
||||
return privateClient.storeObject('credentials', serviceName, credentials);
|
||||
},
|
||||
|
||||
get (serviceName) {
|
||||
return privateClient.getObject(serviceName);
|
||||
},
|
||||
|
||||
remove (serviceName) {
|
||||
return privateClient.remove(serviceName);
|
||||
}
|
||||
}
|
||||
}
|
||||
}};
|
||||
|
||||
export default ApiKeys;
|
||||
@@ -0,0 +1,32 @@
|
||||
async function initializeSettings(remoteStorage) {
|
||||
//
|
||||
// API Keys (remoteStorage)
|
||||
//
|
||||
['opencage', 'mapbox'].forEach(async service => {
|
||||
let inputEl = document.querySelector(`input.api-key.${service}`);
|
||||
|
||||
await remoteStorage.apiKeys.get(service).then(credentials => {
|
||||
if (credentials) inputEl.value = credentials.token;
|
||||
})
|
||||
|
||||
inputEl.addEventListener('change', e => {
|
||||
if (e.target.value.length > 0) {
|
||||
remoteStorage.apiKeys.set(service, { token: e.target.value });
|
||||
} else {
|
||||
remoteStorage.apiKeys.remove(service);
|
||||
}
|
||||
})
|
||||
});
|
||||
|
||||
//
|
||||
// Map settings (localStorage)
|
||||
//
|
||||
const zoomFactorSelectEl = document.querySelector('.settings .map-zoom-factor');
|
||||
const zoomFactor = localStorage.getItem('rs-location:map-zoom-factor');
|
||||
if (zoomFactor) zoomFactorSelectEl.value = zoomFactor;
|
||||
zoomFactorSelectEl.addEventListener('change', e => {
|
||||
localStorage.setItem('rs-location:map-zoom-factor', e.target.value);
|
||||
});
|
||||
}
|
||||
|
||||
export default initializeSettings;
|
||||
@@ -0,0 +1,13 @@
|
||||
body {
|
||||
font-family: system-ui;
|
||||
}
|
||||
|
||||
main {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr 1fr;
|
||||
grid-column-gap: 2rem;
|
||||
}
|
||||
|
||||
.hidden {
|
||||
display: none;
|
||||
}
|
||||
Vendored
+27
@@ -0,0 +1,27 @@
|
||||
/*! remotestorage.js 1.2.2, https://remotestorage.io, MIT licensed */
|
||||
!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(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=17)}([function(e,t,r){(function(t,r){function n(e){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var o={logError:function(e){"string"==typeof e?console.error(e):console.error(e.message,e.stack)},globalContext:"undefined"!=typeof window?window:"object"===("undefined"==typeof self?"undefined":n(self))?self:t,getGlobalContext:function(){return"undefined"!=typeof window?window:"object"===("undefined"==typeof self?"undefined":n(self))?self:t},extend:function(e){return Array.prototype.slice.call(arguments,1).forEach(function(t){for(var r in t)e[r]=t[r]}),e},containingFolder:function(e){if(""===e)return"/";if(!e)throw"Path not given!";return e.replace(/\/+/g,"/").replace(/[^\/]+\/?$/,"")},isFolder:function(e){return"/"===e.substr(-1)},isDocument:function(e){return!o.isFolder(e)},baseName:function(e){var t=e.split("/");return o.isFolder(e)?t[t.length-2]+"/":t[t.length-1]},cleanPath:function(e){return e.replace(/\/+/g,"/").split("/").map(encodeURIComponent).join("/").replace(/'/g,"%27")},bindAll:function(e){for(var t in this)"function"==typeof e[t]&&(e[t]=e[t].bind(e))},equal:function(e,t,r){var i;if(r=r||[],n(e)!==n(t))return!1;if("number"==typeof e||"boolean"==typeof e||"string"==typeof e)return e===t;if("function"==typeof e)return e.toString()===t.toString();if(e instanceof ArrayBuffer&&t instanceof ArrayBuffer&&(e=new Uint8Array(e),t=new Uint8Array(t)),e instanceof Array){if(e.length!==t.length)return!1;for(var s=0,a=e.length;s<a;s++)if(!o.equal(e[s],t[s],r))return!1}else{for(i in e)if(e.hasOwnProperty(i)&&!(i in t))return!1;for(i in t)if(t.hasOwnProperty(i)){if(!(i in e))return!1;var u;if("object"===n(t[i])){if(r.indexOf(t[i])>=0)continue;(u=r.slice()).push(t[i])}if(!o.equal(e[i],t[i],u))return!1}}return!0},deepClone:function(e){var t;return void 0===e?void 0:(function e(t,r){var o,i;if("object"===n(t)&&!Array.isArray(t)&&null!==t)for(o in t)"object"===n(t[o])&&null!==t[o]&&("[object ArrayBuffer]"===t[o].toString()?(r[o]=new ArrayBuffer(t[o].byteLength),i=new Int8Array(t[o]),new Int8Array(r[o]).set(i)):e(t[o],r[o]))}(e,t=JSON.parse(JSON.stringify(e))),t)},pathsFromRoot:function(e){for(var t=[e],r=e.replace(/\/$/,"").split("/");r.length>1;)r.pop(),t.push(r.join("/")+"/");return t},localStorageAvailable:function(){var e=o.getGlobalContext();if(!("localStorage"in e))return!1;try{return e.localStorage.setItem("rs-check",1),e.localStorage.removeItem("rs-check"),!0}catch(e){return!1}},getJSONFromLocalStorage:function(e){var t=o.getGlobalContext();try{return JSON.parse(t.localStorage.getItem(e))}catch(e){}},shouldBeTreatedAsBinary:function(e,t){return t&&t.match(/charset=binary/)||/[\x00-\x08\x0E-\x1F\uFFFD]/.test(e)},getTextFromArrayBuffer:function(e,n){return new Promise(function(i){if("undefined"==typeof Blob){var s=new r(new Uint8Array(e));i(s.toString(n))}else{var a;if(o.globalContext.BlobBuilder=o.globalContext.BlobBuilder||o.globalContext.WebKitBlobBuilder,void 0!==o.globalContext.BlobBuilder){var u=new t.BlobBuilder;u.append(e),a=u.getBlob()}else a=new Blob([e]);var c=new FileReader;"function"==typeof c.addEventListener?c.addEventListener("loadend",function(e){i(e.target.result)}):c.onloadend=function(e){i(e.target.result)},c.readAsText(a,n)}})}};e.exports=o}).call(this,r(10),r(18).Buffer)},function(e,t,r){var n=r(3);e.exports=function(){n.logging&&console.log.apply(console,arguments)}},function(e,t,r){var n=r(1),o={addEventListener:function(e,t){if("string"!=typeof e)throw new Error("Argument eventName should be a string");if("function"!=typeof t)throw new Error("Argument handler should be a function");n("[Eventhandling] Adding event listener",e),this._validateEvent(e),this._handlers[e].push(t)},removeEvenLine truncated
|
||||
/*!
|
||||
* The buffer module from node.js, for the browser.
|
||||
*
|
||||
* @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
|
||||
* @license MIT
|
||||
*/
|
||||
var n=r(19),o=r(20),i=r(21);function s(){return u.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function a(e,t){if(s()<t)throw new RangeError("Invalid typed array length");return u.TYPED_ARRAY_SUPPORT?(e=new Uint8Array(t)).__proto__=u.prototype:(null===e&&(e=new u(t)),e.length=t),e}function u(e,t,r){if(!(u.TYPED_ARRAY_SUPPORT||this instanceof u))return new u(e,t,r);if("number"==typeof e){if("string"==typeof t)throw new Error("If encoding is specified then the first argument must be a string");return h(this,e)}return c(this,e,t,r)}function c(e,t,r,n){if("number"==typeof t)throw new TypeError('"value" argument must not be a number');return"undefined"!=typeof ArrayBuffer&&t instanceof ArrayBuffer?function(e,t,r,n){if(t.byteLength,r<0||t.byteLength<r)throw new RangeError("'offset' is out of bounds");if(t.byteLength<r+(n||0))throw new RangeError("'length' is out of bounds");t=void 0===r&&void 0===n?new Uint8Array(t):void 0===n?new Uint8Array(t,r):new Uint8Array(t,r,n);u.TYPED_ARRAY_SUPPORT?(e=t).__proto__=u.prototype:e=f(e,t);return e}(e,t,r,n):"string"==typeof t?function(e,t,r){"string"==typeof r&&""!==r||(r="utf8");if(!u.isEncoding(r))throw new TypeError('"encoding" must be a valid string encoding');var n=0|p(t,r),o=(e=a(e,n)).write(t,r);o!==n&&(e=e.slice(0,o));return e}(e,t,r):function(e,t){if(u.isBuffer(t)){var r=0|d(t.length);return 0===(e=a(e,r)).length?e:(t.copy(e,0,0,r),e)}if(t){if("undefined"!=typeof ArrayBuffer&&t.buffer instanceof ArrayBuffer||"length"in t)return"number"!=typeof t.length||(n=t.length)!=n?a(e,0):f(e,t);if("Buffer"===t.type&&i(t.data))return f(e,t.data)}var n;throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}(e,t)}function l(e){if("number"!=typeof e)throw new TypeError('"size" argument must be a number');if(e<0)throw new RangeError('"size" argument must not be negative')}function h(e,t){if(l(t),e=a(e,t<0?0:0|d(t)),!u.TYPED_ARRAY_SUPPORT)for(var r=0;r<t;++r)e[r]=0;return e}function f(e,t){var r=t.length<0?0:0|d(t.length);e=a(e,r);for(var n=0;n<r;n+=1)e[n]=255&t[n];return e}function d(e){if(e>=s())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+s().toString(16)+" bytes");return 0|e}function p(e,t){if(u.isBuffer(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var r=e.length;if(0===r)return 0;for(var n=!1;;)switch(t){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":case void 0:return B(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return q(e).length;default:if(n)return B(e).length;t=(""+t).toLowerCase(),n=!0}}function m(e,t,r){var n=e[t];e[t]=e[r],e[r]=n}function y(e,t,r,n,o){if(0===e.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),r=+r,isNaN(r)&&(r=o?0:e.length-1),r<0&&(r=e.length+r),r>=e.length){if(o)return-1;r=e.length-1}else if(r<0){if(!o)return-1;r=0}if("string"==typeof t&&(t=u.from(t,n)),u.isBuffer(t))return 0===t.length?-1:g(e,t,r,n,o);if("number"==typeof t)return t&=255,u.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):g(e,[t],r,n,o);throw new TypeError("val must be string, number or Buffer")}function g(e,t,r,n,o){var i,s=1,a=e.length,u=t.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(e.length<2||t.length<2)return-1;s=2,a/=2,u/=2,r/=2}function c(e,t){return 1===s?e[t]:e.readUInt16BE(t*s)}if(o){var l=-1;for(i=r;i<a;i++)if(c(e,i)===c(t,-1===l?0:i-l)){if(-1===l&&(l=i),i-l+1===u)return l*s}else-1!==l&&(i-=i-l),l=-1}else for(r+u>a&&(r=a-u),i=r;i>=0;i--){for(var h=!0,f=0;f<u;f++)if(c(e,i+f)!==c(t,f)){h=!1;break}if(h)return i}return-1}function v(e,t,r,n){r=Number(r)||0;var o=e.length-r;n?(n=Number(n))>o&&(n=o):n=o;var i=t.length;if(i%2!=0)throw new TypeError("Invalid hex string");n>i/2&&(n=i/2);for(var s=0;s<n;++s){var a=parseInt(t.substr(2*s,2),16);if(isNaN(a))return s;e[r+s]=a}return s}function b(e,t,r,n){return J(B(t,e.length-r),e,r,n)}function _(e,t,r,n){return J(function(e){for(var t=[],r=0;r<e.length;++r)t.push(255&e.charCodeAt(r));return t}(t),e,r,n)}function w(e,t,r,n){return _(e,t,r,n)}function P(e,t,r,n){return J(q(t),e,r,n)}function E(e,t,r,n){return J(function(e,t){for(var r,n,o,i=[],s=0;s<e.length&&!((t-=2)<0);++s)r=e.charCodeAt(s),n=r>>8,o=r%256,i.push(o),i.push(n);return i}(t,e.length-r),e,r,n)}function S(e,t,r){return 0===t&&r===e.length?n.fromByteArray(e):n.fromByteArray(e.slice(t,r))}function T(e,t,r){r=Math.min(e.length,r);for(var n=[],o=t;o<r;){var i,s,a,u,c=e[o],l=null,h=c>239?4:c>223?3:c>191?2:1;if(o+h<=r)switch(h){case 1:c<128&&(l=c);break;case 2:128==(192&(i=e[o+1]))&&(u=(31&c)<<6|63&i)>127&&(l=u);break;case 3:i=e[o+1],s=e[o+2],128==(1Line truncated
|
||||
/*!
|
||||
* webfinger.js
|
||||
* version 2.7.0
|
||||
* http://github.com/silverbucket/webfinger.js
|
||||
*
|
||||
* Developed and Maintained by:
|
||||
* Nick Jennings <nick@silverbucket.net> 2012
|
||||
*
|
||||
* webfinger.js is released under the AGPL (see LICENSE).
|
||||
*
|
||||
* You don't have to do anything special to choose one license or the other and you don't
|
||||
* have to notify anyone which license you are using.
|
||||
* Please see the corresponding license file for details of these licenses.
|
||||
* You are free to use, modify and distribute this software, but all copyright
|
||||
* information must remain.
|
||||
*
|
||||
*/"function"!=typeof fetch&&"function"!=typeof XMLHttpRequest&&(XMLHttpRequest=r(26)),function(r){var o={"http://webfist.org/spec/rel":"webfist","http://webfinger.net/rel/avatar":"avatar",remotestorage:"remotestorage","http://tools.ietf.org/id/draft-dejong-remotestorage":"remotestorage",remoteStorage:"remotestorage","http://www.packetizer.com/rel/share":"share","http://webfinger.net/rel/profile-page":"profile",me:"profile",vcard:"vcard",blog:"blog","http://packetizer.com/rel/blog":"blog","http://schemas.google.com/g/2010#updates-from":"updates","https://camlistore.org/rel/server":"camilstore"},i={avatar:[],remotestorage:[],blog:[],vcard:[],updates:[],share:[],profile:[],webfist:[],camlistore:[]},s=["webfinger","host-meta","host-meta.json"];function a(e){return e.toString=function(){return this.message},e}function u(e){"object"!=typeof e&&(e={}),this.config={tls_only:void 0===e.tls_only||e.tls_only,webfist_fallback:void 0!==e.webfist_fallback&&e.webfist_fallback,uri_fallback:void 0!==e.uri_fallback&&e.uri_fallback,request_timeout:void 0!==e.request_timeout?e.request_timeout:1e4}}u.prototype.__fetchJRD=function(e,t,r){if("function"==typeof fetch)return this.__fetchJRD_fetch(e,t,r);if("function"==typeof XMLHttpRequest)return this.__fetchJRD_XHR(e,t,r);throw new Error("add a polyfill for fetch or XMLHttpRequest")},u.prototype.__fetchJRD_fetch=function(e,t,r){var n,o=this;"function"==typeof AbortController&&(n=new AbortController);var i=fetch(e,{headers:{Accept:"application/jrd+json, application/json"},signal:n?n.signal:void 0}).then(function(t){if(t.ok)return t.text();throw 404===t.status?a({message:"resource not found",url:e,status:t.status}):a({message:"error during request",url:e,status:t.status})},function(t){throw a({message:"error during request",url:e,status:void 0,err:t})}).then(function(t){if(o.__isValidJSON(t))return t;throw a({message:"invalid json",url:e,status:void 0})}),s=new Promise(function(t,r){setTimeout(function(){r(a({message:"request timed out",url:e,status:void 0})),n&&n.abort()},o.config.request_timeout)});Promise.race([i,s]).then(function(e){r(e)}).catch(function(e){t(e)})},u.prototype.__fetchJRD_XHR=function(e,t,r){var n=this,o=!1,i=new XMLHttpRequest;function s(){if(!o){if(o=!0,200===i.status)return n.__isValidJSON(i.responseText)?r(i.responseText):t(a({message:"invalid json",url:e,status:i.status}));if(404===i.status)return t(a({message:"resource not found",url:e,status:i.status}));if(i.status>=301&&i.status<=302){var s=i.getResponseHeader("Location");return function(e){return"string"==typeof e&&"https"===e.split("://")[0]}(s)?u():t(a({message:"no redirect URL found",url:e,status:i.status}))}return t(a({message:"error during request",url:e,status:i.status}))}}function u(){i.onreadystatechange=function(){4===i.readyState&&s()},i.onload=function(){s()},i.ontimeout=function(){return t(a({message:"request timed out",url:e,status:i.status}))},i.open("GET",e,!0),i.timeout=n.config.request_timeout,i.setRequestHeader("Accept","application/jrd+json, application/json"),i.send()}return u()},u.prototype.__isValidJSON=function(e){try{JSON.parse(e)}catch(e){return!1}return!0},u.prototype.__isLocalhost=function(e){return/^localhost(\.localdomain)?(\:[0-9]+)?$/.test(e)},u.prototype.__processJRD=function(e,t,r,n){var s=JSON.parse(t);if("object"!=typeof s||"object"!=typeof s.links)return void 0!==s.error?r(a({message:s.error,request:e})):r(a({message:"unknown response from server",request:e}));var u=s.links;Array.isArray(u)||(u=[]);var c={object:s,json:t,idx:{}};c.idx.properties={name:void 0},c.idx.links=JSON.parse(JSON.stringify(i)),u.map(function(e,t){if(o.hasOwnProperty(e.rel)&&c.idx.links[o[e.rel]]){var r={};Object.keys(e).map(function(t,n){r[t]=e[t]}),c.idx.links[o[e.rel]].push(r)}});var l=JSON.parse(t).properties;for(var h in l)l.hasOwnProperty(h)&&"http://packetizer.com/ns/name"===h&&(c.idx.properties.name=l[h]);return n(c)},u.prototype.lookup=function(e,t){if("string"!=typeof e)throw new Error("first parameter must be a user address");if("function"!=typeof t)throw new Error("second parameter must be a callback");var r=this,n="";n=e.indexOf("://")>-1?e.replace(/ /g,"").split("/")[2]:e.replace(/ /g,"").split("@")[1];var o=0,i="https";function a(){var t="";return e.split("://")[1]||(t="acct:"),i+"://"+n+"/.well-known/"+s[o]+"?resource="+t+e}function u(e){if(r.config.uri_fallback&&"webfist.org"!==n&&o!==s.length-1)return o+=1,c();if(!r.config.tls_only&&"https"===i)return o=0,i="http",c();if(!r.config.webfist_fallback||"webfist.org"===n)return t(e);o=0,i="http",n="webfist.org";var u=a();r.__fetchJRD(u,t,function(e){r.__processJRD(u,e,t,function(e){"object"==typeof e.idx.links.webfist&&"string"==typeof e.idx.links.webfist[0].href&&r.__fetchJRD(e.idx.links.webfist[0].href,t,function(e){r.__processJRD(u,e,t,function(e){return t(null,t)})})})})}function c(){var e=a();r.__fetchJRD(e,u,function(n){r.__processJRD(e,n,t,function(e){t(null,e)})})}return r.__isLocalhost(n)&&(i="http"),setTimeout(c,0)},u.pro
Line truncated
|
||||
//# sourceMappingURL=remotestorage.js.map
|
||||
Vendored
+1
@@ -0,0 +1 @@
|
||||
{"version":3,"sources":["webpack://RemoteStorage/webpack/universalModuleDefinition","webpack://RemoteStorage/webpack/bootstrap","webpack://RemoteStorage/./src/util.js","webpack://RemoteStorage/./src/log.js","webpack://RemoteStorage/./src/eventhandling.js","webpack://RemoteStorage/./src/config.js","webpack://RemoteStorage/./src/authorize.js","webpack://RemoteStorage/./src/baseclient.js","webpack://RemoteStorage/./src/wireclient.js","webpack://RemoteStorage/./src/sync.js","webpack://RemoteStorage/./src/cachinglayer.js","webpack://RemoteStorage/./src/remotestorage.js","webpack://RemoteStorage/(webpack)/buildin/global.js","webpack://RemoteStorage/./src/dropbox.js","webpack://RemoteStorage/./src/env.js","webpack://RemoteStorage/./src/googledrive.js","webpack://RemoteStorage/./src/discover.js","webpack://RemoteStorage/./src/access.js","webpack://RemoteStorage/./src/caching.js","webpack://RemoteStorage/./node_modules/buffer/index.js","webpack://RemoteStorage/./node_modules/base64-js/index.js","webpack://RemoteStorage/./node_modules/ieee754/index.js","webpack://RemoteStorage/./node_modules/isarray/index.js","webpack://RemoteStorage/./node_modules/tv4/tv4.js","webpack://RemoteStorage/./src/types.js","webpack://RemoteStorage/./src/revisioncache.js","webpack://RemoteStorage/./node_modules/webfinger.js/src/webfinger.js","webpack://RemoteStorage/./node_modules/xhr2/lib/browser.js","webpack://RemoteStorage/./src/features.js","webpack://RemoteStorage/./src/syncedgetputdelete.js","webpack://RemoteStorage/./src/indexeddb.js","webpack://RemoteStorage/./src/localstorage.js","webpack://RemoteStorage/./src/inmemorystorage.js","webpack://RemoteStorage/./src/modules.js"],"names":["root","factory","exports","module","define","amd","this","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","util","logError","error","console","message","stack","globalContext","window","self","_typeof","global","getGlobalContext","extend","target","Array","slice","arguments","forEach","source","containingFolder","path","replace","isFolder","substr","isDocument","baseName","parts","split","length","cleanPath","map","encodeURIComponent","join","bindAll","equal","a","b","seen","toString","ArrayBuffer","Uint8Array","seenArg","indexOf","push","deepClone","obj","clone","undefined","fixArrayBuffers","srcObj","dstObj","field","srcArr","isArray","byteLength","Int8Array","set","JSON","parse","stringify","pathsFromRoot","paths","pop","localStorageAvailable","context","localStorage","setItem","removeItem","getJSONFromLocalStorage","getItem","e","shouldBeTreatedAsBinary","content","mimeType","match","test","getTextFromArrayBuffer","arrayBuffer","encoding","Promise","resolve","Blob","buffer","Buffer","blob","BlobBuilder","WebKitBlobBuilder","bb","append","getBlob","fileReader","FileReader","addEventListener","evt","result","onloadend","readAsText","config","require","logging","log","apply","methods","eventName","handler","Error","_validateEvent","_handlers","removeEventListener","hl","splice","_emit","args","_delegateEvent","on","event","_addEvent","off","eventNames","cache","changeEvents","local","remote","conflict","cordovaRedirectUri","backgroundSyncInterval","disableFeatures","discoveryTimeout","isBackground","requestTimeout","syncInterval","extractParams","url","hash","location","Authorize","getLocation","href","hashPos","substring","reduce","params","kvs","kv","stateValue","decodeURIComponent","encodedData","atob","RegExp","onFeaturesLoaded","remoteStorage","_ref","authURL","scope","redirectUri","clientId","backend","discoveryData","userAddress","storageApi","properties","btoa","buildOAuthURL","cordova","openWindow","then","authResult","configure","token","access_token","setLocation","IMPLIED_FAKE_TOKEN","Unauthorized","options","code","constructor","document","reject","newWindow","open","closed","handleExit","close","_rs_supported","_rs_init","authParamsUsed","concat","rsDiscovery","remotestorage","connect","state","stopWaitingForToken","_rs_cleanup","eventHandling","tv4","Types","SchemaNotFound","BaseClient","storage","base","makePath","moduleName","onChange","_fireChange","getListing","maxAge","statusCode","body","getAll","keys","calls","all","getFile","data","contentType","revision","storeFile","access","checkPathPermission","warn","put","getObject","storeObject","typeAlias","_attachType","validationResult","validate","valid","exc","remove","delete","getItemURL","connected","_cleanPath","strategy","caching","flush","declareType","alias","uri","schema","_defaultTypeURI","declare","getSchema","validateResult","schemas","configurable","inScope","resolveAlias","origin","fieldNamePrefix","exec","hasLocalStorage","isArrayBufferView","SETTINGS_KEY","STORAGE_APIS","draft-dejong-remotestorage-00","draft-dejong-remotesLine truncated
|
||||
Vendored
+2
@@ -0,0 +1,2 @@
|
||||
!function(n,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("Widget",[],t):"object"==typeof exports?exports.Widget=t():n.Widget=t()}(this,function(){return function(n){var t={};function e(l){if(t[l])return t[l].exports;var i=t[l]={i:l,l:!1,exports:{}};return n[l].call(i.exports,i,i.exports,e),i.l=!0,i.exports}return e.m=n,e.c=t,e.d=function(n,t,l){e.o(n,t)||Object.defineProperty(n,t,{enumerable:!0,get:l})},e.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},e.t=function(n,t){if(1&t&&(n=e(n)),8&t)return n;if(4&t&&"object"==typeof n&&n&&n.__esModule)return n;var l=Object.create(null);if(e.r(l),Object.defineProperty(l,"default",{enumerable:!0,value:n}),2&t&&"string"!=typeof n)for(var i in n)e.d(l,i,function(t){return n[t]}.bind(null,i));return l},e.n=function(n){var t=n&&n.__esModule?function(){return n.default}:function(){return n};return e.d(t,"a",t),t},e.o=function(n,t){return Object.prototype.hasOwnProperty.call(n,t)},e.p="",e(e.s=0)}([function(n,t,e){n.exports=e(1)},function(n,t,e){"use strict";var l=function(n){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(this.rs=n,this.leaveOpen=!!t.leaveOpen&&t.leaveOpen,this.autoCloseAfter=t.autoCloseAfter?t.autoCloseAfter:1500,this.skipInitial=!!t.skipInitial&&t.skipInitial,this.logging=!!t.logging&&t.logging,t.hasOwnProperty("modalBackdrop")){if("boolean"!=typeof t.modalBackdrop&&"onlySmallScreens"!==t.modalBackdrop)throw'options.modalBackdrop has to be true/false or "onlySmallScreens"';this.modalBackdrop=t.modalBackdrop}else this.modalBackdrop="onlySmallScreens";this.active=!1,this.online=!1,this.closed=!1,this.lastSynced=null,this.lastSyncedUpdateLoop=null};l.prototype={log:function(){if(this.logging){for(var n,t=arguments.length,e=Array(t),l=0;l<t;l++)e[l]=arguments[l];(n=console).debug.apply(n,["[RS-WIDGET] "].concat(e))}},eventHandler:function(n,t){var e=this;switch(this.log("EVENT: ",n),n){case"ready":this.setState(this.state);break;case"sync-req-done":this.rsSyncButton.classList.add("rs-rotate");break;case"sync-done":this.rsSyncButton.classList.remove("rs-rotate"),this.rsWidget.classList.contains("rs-state-unauthorized")||!this.rs.remote.online?this.updateLastSyncedOutput():this.rs.remote.online&&(this.lastSynced=new Date,document.querySelector(".rs-box-connected .rs-sub-headline").innerHTML="Synced just now"),!this.closed&&this.shouldCloseWhenSyncDone&&setTimeout(this.close.bind(this),this.autoCloseAfter);break;case"disconnected":this.active=!1,this.setOnline(),this.setBackendClass(),this.open(),this.setInitialState();break;case"connected":this.active=!0,this.online=!0,this.rs.hasFeature("Sync")?(this.shouldCloseWhenSyncDone=!0,this.rs.on("sync-req-done",function(){return e.eventHandler("sync-req-done")}),this.rs.on("sync-done",function(){return e.eventHandler("sync-done")})):(this.rsSyncButton.classList.add("rs-hidden"),setTimeout(this.close.bind(this),this.autoCloseAfter));var l=this.rs.remote.userAddress;this.rsConnectedUser.innerHTML=l,this.setBackendClass(this.rs.backend),this.rsConnectedLabel.textContent="Connected",this.setState("connected");break;case"network-offline":this.setOffline();break;case"network-online":this.setOnline();break;case"error":this.setBackendClass(this.rs.backend),"DiscoveryError"===t.name?this.handleDiscoveryError(t):"SyncError"===t.name?this.handleSyncError(t):"Unauthorized"===t.name?this.handleUnauthorized(t):console.debug("Encountered unhandled error",t)}},setState:function(n){if(n){this.log("Setting state ",n);var t=document.querySelector(".rs-box.rs-selected");t&&t.classList.remove("rs-selected");var e=document.querySelector(".rs-box.rs-box-"+n);e&&e.classList.add("rs-selected");var l=this.rsWidget.className.match(/rs-state-\S+/g)[0];this.rsWidget.classList.remove(l),this.rsWidget.classList.add("rs-state-"+(n||this.state)),this.state=n}},setInitialState:function(){this.skipInitial?this.showChooseOrSignIn():this.setState("initial")},createHtmlTemplate:function(){var n=document.createElement("div"),t=document.createElement("style");return t.innerHTML=e(2),n.id="remotestorage-widget",n.innerHTML=e(3),n.appendChild(t),n},createBackdropHtml:function(){var n=document.createElement("div");n.classList.add("remotestorage-widget-modal-backdrop"),document.body.appendChild(n)},setModalClass:function(){if(this.modalBackdrop){if("onlySmallScreens"===this.modalBackdrop&&!this.isSmallScreen())return;this.rsWidget.classList.add("rs-modal")}},setupElements: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.rsConneLine truncated
|
||||
//# sourceMappingURL=widget.js.map
|
||||
Vendored
+1
@@ -0,0 +1 @@
|
||||
{"version":3,"sources":["webpack://Widget/webpack/universalModuleDefinition","webpack://Widget/webpack/bootstrap","webpack://Widget/./src/widget.js","webpack://Widget/./src/assets/styles.css","webpack://Widget/./src/assets/widget.html"],"names":["root","factory","exports","module","define","amd","Widget","this","n","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","default","object","property","prototype","hasOwnProperty","p","s","e","remoteStorage","options","arguments","length","rs","leaveOpen","autoCloseAfter","skipInitial","logging","modalBackdrop","active","online","closed","lastSynced","lastSyncedUpdateLoop","log","_console","_len","msg","Array","_key","console","debug","apply","concat","eventHandler","event","_this","setState","state","rsSyncButton","classList","add","remove","rsWidget","contains","remote","updateLastSyncedOutput","Date","document","querySelector","innerHTML","shouldCloseWhenSyncDone","setTimeout","close","setOnline","setBackendClass","open","setInitialState","hasFeature","on","connectedUser","userAddress","rsConnectedUser","backend","rsConnectedLabel","textContent","setOffline","handleDiscoveryError","handleSyncError","handleUnauthorized","lastSelected","toSelect","currentStateClass","className","match","showChooseOrSignIn","createHtmlTemplate","element","createElement","style","require","id","appendChild","createBackdropHtml","backdropEl","body","setModalClass","isSmallScreen","setupElements","rsBackdrop","rsInitial","rsChoose","rsConnected","rsSignIn","rsChooseRemoteStorageButton","rsChooseDropboxButton","rsChooseGoogleDriveButton","rsErrorBox","apiKeys","parentNode","removeChild","rsSignInForm","rsConnectButton","rsDisconnectButton","rsLogo","rsErrorReconnectLink","rsErrorDisconnectButton","setupHandlers","_this2","error","setEventListeners","setClickHandlers","attach","elementId","domElement","parentContainerEl","getElementById","parent","_this3","addEventListener","preventDefault","disabled","connect","display","keys","_this4","dropbox","googledrive","disconnect","reconnect","stopSync","startSync","stopPropagation","toggle","_this5","showErrorBox","errorMsg","hideErrorBox","msgContainer","message","code","now","secondsSinceLastSync","Math","round","getTime","window","innerWidth"],"mappings":"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 truncated
|
||||
Reference in new issue
Block a user