uppy
Version:
Extensible JavaScript file upload widget with support for drag&drop, resumable uploads, previews, restrictions, file processing/encoding, remote providers like Instagram, Dropbox, Google Drive, S3 and more :dog:
96 lines (77 loc) • 2.59 kB
JavaScript
;
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var _Promise = typeof Promise === 'undefined' ? require('es6-promise').Promise : Promise;
var isSupported = typeof navigator !== 'undefined' && 'serviceWorker' in navigator;
function waitForServiceWorker() {
return new _Promise(function (resolve, reject) {
if (!isSupported) {
reject(new Error('Unsupported'));
} else if (navigator.serviceWorker.controller) {
// A serviceWorker is already registered and active.
resolve();
} else {
navigator.serviceWorker.addEventListener('controllerchange', function () {
resolve();
});
}
});
}
var ServiceWorkerStore = function () {
function ServiceWorkerStore(opts) {
_classCallCheck(this, ServiceWorkerStore);
this.ready = waitForServiceWorker();
this.name = opts.storeName;
}
ServiceWorkerStore.prototype.list = function list() {
var _this = this;
var defer = {};
var promise = new _Promise(function (resolve, reject) {
defer.resolve = resolve;
defer.reject = reject;
});
console.log('Loading stored blobs from Service Worker');
var onMessage = function onMessage(event) {
if (event.data.store !== _this.name) {
return;
}
switch (event.data.type) {
case 'uppy/ALL_FILES':
defer.resolve(event.data.files);
navigator.serviceWorker.removeEventListener('message', onMessage);
break;
}
};
this.ready.then(function () {
navigator.serviceWorker.addEventListener('message', onMessage);
navigator.serviceWorker.controller.postMessage({
type: 'uppy/GET_FILES',
store: _this.name
});
});
return promise;
};
ServiceWorkerStore.prototype.put = function put(file) {
var _this2 = this;
return this.ready.then(function () {
navigator.serviceWorker.controller.postMessage({
type: 'uppy/ADD_FILE',
store: _this2.name,
file: file
});
});
};
ServiceWorkerStore.prototype.delete = function _delete(fileID) {
var _this3 = this;
return this.ready.then(function () {
navigator.serviceWorker.controller.postMessage({
type: 'uppy/REMOVE_FILE',
store: _this3.name,
fileID: fileID
});
});
};
return ServiceWorkerStore;
}();
ServiceWorkerStore.isSupported = isSupported;
module.exports = ServiceWorkerStore;
//# sourceMappingURL=ServiceWorkerStore.js.map