<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">/*
	Created by Michael Schuijff &lt;michael@reglobe.nl&gt;
	Copyright Lost Images, The Netherlands
	
	For more information, visit www.michaelschuijff.nl
*/

window.cache = window.cache || {};

(function () {
	let views = [];
	
	cache.get = function (url) {
		for (let view of views) {
			if (~view.urls.indexOf(url)) {
				return view;
			}
		}
		
		return false;
	}
	
	cache.set = function (view) {
		if (!view.urls || !view.urls.length) {
			return false;
		}
		
		let urls = view.urls;
		
		for (let i = 0, length = views.length; i &lt; length; i ++) {
			if (view == views[i]) {
				continue;
			}
			
			{
				let view = views[i];
				
				for (let url of urls) {
					let index = view.urls.indexOf(url);
					
					if (~index) {
						view.urls.splice(index, 1);
					}
				}
				
				if (!view.urls.length) {
					view.destroy();
					views.splice(i, 1);
					
					i --, length --;
				}
			}
		}
		
		views[views.length] = view;
	}
	
	cache.delete = function (value) {
		let urls;
		
		if (typeof value == 'string') {
			urls = [value];
		}
		
		if (Array.isArray(value)) {
			urls = value;
		}

		if (!urls) {
			if (!value || typeof value != 'object') {
				return false;
			}
			
			let index = views.indexOf(value);
			
			if (~index) {
				views[index].destroy();
				views.splice(index, 1);
			}
			
			return true;
		}
		
		for (let i = 0, length = views.length; i &lt; length; i ++) {
			let view = views[i];
			
			for (let url of urls) {
				if (url[url.length - 1] != '*') {
					if (!~view.urls.indexOf(url)) {
						continue;
					}
				} else {
					let prefix = url.substr(0, url.length - 1), destroy = false;
					
					for (let url of view.urls) {
						if (url.length &gt; prefix.length &amp;&amp; url.substr(0, prefix.length) == prefix) {
							destroy = true;
							break;
						}
					}
					
					if (!destroy) {
						continue;
					}
				}
				
				if (view == window.activeView) {
					delete window.activeView;
				}
				
				view.destroy();
				views.splice(i, 1);
				
				i --, length --;
				
				break;
			}
		}
		
		return true;
	}
	
	cache.reset = function () {
		if (window.activeView) {
			let index = views.indexOf(activeView);
			
			if (!~index) {
				activeView.destroy();
			}
			
			delete window.activeView;
		}
		
		for (let view of views) {
			view.destroy();
		}
		
		views.length = 0;
		
		return true;
	}

	cache.expire = function () {
		const expired = Date.now() - 300000;
		
		for (let i = 0, length = views.length; i &lt; length; i ++) {
			let view = views[i];
			
			if (view.loading || view == window.activeView) {
				continue;
			}
			
			if (view.lastUsed &lt; expired) {
				view.destroy();
				views.splice(i, 1);
				
				i --, length --;
			}
		}
		
		return true;
	}
	
	setInterval(cache.expire, 60000);
})();
</pre></body></html>