yeet
This commit is contained in:
170
node_modules/react-native-web/dist/modules/ImageLoader/index.js
generated
vendored
Normal file
170
node_modules/react-native-web/dist/modules/ImageLoader/index.js
generated
vendored
Normal file
@ -0,0 +1,170 @@
|
||||
/**
|
||||
* Copyright (c) Nicolas Gallagher.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
*
|
||||
*/
|
||||
var dataUriPattern = /^data:/;
|
||||
export var ImageUriCache =
|
||||
/*#__PURE__*/
|
||||
function () {
|
||||
function ImageUriCache() {}
|
||||
|
||||
ImageUriCache.has = function has(uri) {
|
||||
var entries = ImageUriCache._entries;
|
||||
var isDataUri = dataUriPattern.test(uri);
|
||||
return isDataUri || Boolean(entries[uri]);
|
||||
};
|
||||
|
||||
ImageUriCache.add = function add(uri) {
|
||||
var entries = ImageUriCache._entries;
|
||||
var lastUsedTimestamp = Date.now();
|
||||
|
||||
if (entries[uri]) {
|
||||
entries[uri].lastUsedTimestamp = lastUsedTimestamp;
|
||||
entries[uri].refCount += 1;
|
||||
} else {
|
||||
entries[uri] = {
|
||||
lastUsedTimestamp: lastUsedTimestamp,
|
||||
refCount: 1
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
ImageUriCache.remove = function remove(uri) {
|
||||
var entries = ImageUriCache._entries;
|
||||
|
||||
if (entries[uri]) {
|
||||
entries[uri].refCount -= 1;
|
||||
} // Free up entries when the cache is "full"
|
||||
|
||||
|
||||
ImageUriCache._cleanUpIfNeeded();
|
||||
};
|
||||
|
||||
ImageUriCache._cleanUpIfNeeded = function _cleanUpIfNeeded() {
|
||||
var entries = ImageUriCache._entries;
|
||||
var imageUris = Object.keys(entries);
|
||||
|
||||
if (imageUris.length + 1 > ImageUriCache._maximumEntries) {
|
||||
var leastRecentlyUsedKey;
|
||||
var leastRecentlyUsedEntry;
|
||||
imageUris.forEach(function (uri) {
|
||||
var entry = entries[uri];
|
||||
|
||||
if ((!leastRecentlyUsedEntry || entry.lastUsedTimestamp < leastRecentlyUsedEntry.lastUsedTimestamp) && entry.refCount === 0) {
|
||||
leastRecentlyUsedKey = uri;
|
||||
leastRecentlyUsedEntry = entry;
|
||||
}
|
||||
});
|
||||
|
||||
if (leastRecentlyUsedKey) {
|
||||
delete entries[leastRecentlyUsedKey];
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
return ImageUriCache;
|
||||
}();
|
||||
ImageUriCache._maximumEntries = 256;
|
||||
ImageUriCache._entries = {};
|
||||
var id = 0;
|
||||
var requests = {};
|
||||
var ImageLoader = {
|
||||
abort: function abort(requestId) {
|
||||
var image = requests["" + requestId];
|
||||
|
||||
if (image) {
|
||||
image.onerror = null;
|
||||
image.onload = null;
|
||||
image = null;
|
||||
delete requests["" + requestId];
|
||||
}
|
||||
},
|
||||
getSize: function getSize(uri, success, failure) {
|
||||
var complete = false;
|
||||
var interval = setInterval(callback, 16);
|
||||
var requestId = ImageLoader.load(uri, callback, errorCallback);
|
||||
|
||||
function callback() {
|
||||
var image = requests["" + requestId];
|
||||
|
||||
if (image) {
|
||||
var naturalHeight = image.naturalHeight,
|
||||
naturalWidth = image.naturalWidth;
|
||||
|
||||
if (naturalHeight && naturalWidth) {
|
||||
success(naturalWidth, naturalHeight);
|
||||
complete = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (complete) {
|
||||
ImageLoader.abort(requestId);
|
||||
clearInterval(interval);
|
||||
}
|
||||
}
|
||||
|
||||
function errorCallback() {
|
||||
if (typeof failure === 'function') {
|
||||
failure();
|
||||
}
|
||||
|
||||
ImageLoader.abort(requestId);
|
||||
clearInterval(interval);
|
||||
}
|
||||
},
|
||||
has: function has(uri) {
|
||||
return ImageUriCache.has(uri);
|
||||
},
|
||||
load: function load(uri, onLoad, onError) {
|
||||
id += 1;
|
||||
var image = new window.Image();
|
||||
image.onerror = onError;
|
||||
|
||||
image.onload = function (e) {
|
||||
// avoid blocking the main thread
|
||||
var onDecode = function onDecode() {
|
||||
return onLoad({
|
||||
nativeEvent: e
|
||||
});
|
||||
};
|
||||
|
||||
if (typeof image.decode === 'function') {
|
||||
// Safari currently throws exceptions when decoding svgs.
|
||||
// We want to catch that error and allow the load handler
|
||||
// to be forwarded to the onLoad handler in this case
|
||||
image.decode().then(onDecode, onDecode);
|
||||
} else {
|
||||
setTimeout(onDecode, 0);
|
||||
}
|
||||
};
|
||||
|
||||
image.src = uri;
|
||||
requests["" + id] = image;
|
||||
return id;
|
||||
},
|
||||
prefetch: function prefetch(uri) {
|
||||
return new Promise(function (resolve, reject) {
|
||||
ImageLoader.load(uri, function () {
|
||||
// Add the uri to the cache so it can be immediately displayed when used
|
||||
// but also immediately remove it to correctly reflect that it has no active references
|
||||
ImageUriCache.add(uri);
|
||||
ImageUriCache.remove(uri);
|
||||
resolve();
|
||||
}, reject);
|
||||
});
|
||||
},
|
||||
queryCache: function queryCache(uris) {
|
||||
var result = {};
|
||||
uris.forEach(function (u) {
|
||||
if (ImageUriCache.has(u)) {
|
||||
result[u] = 'disk/memory';
|
||||
}
|
||||
});
|
||||
return Promise.resolve(result);
|
||||
}
|
||||
};
|
||||
export default ImageLoader;
|
Reference in New Issue
Block a user