7254f7b4d1
Build / Build (macos-latest) (push) Has been cancelled
Build / Build (ubuntu-latest) (push) Has been cancelled
Build / Build (windows-latest) (push) Has been cancelled
Build / Analyze (javascript) (push) Has been cancelled
Build / Analyze (python) (push) Has been cancelled
119 lines
4.6 KiB
JavaScript
119 lines
4.6 KiB
JavaScript
window.exports = {};
|
|
|
|
window.exports.require = function(id, callback) {
|
|
if (!/^[a-zA-Z0-9_-]+$/.test(id)) {
|
|
throw new Error("Invalid module '" + id + "'.");
|
|
}
|
|
var base = window.location.href || '';
|
|
base = base.split('?')[0].split('#')[0];
|
|
const index = base.lastIndexOf('/');
|
|
base = index > 0 ? base.substring(0, index + 1) : base;
|
|
base = base.lastIndexOf('/') === base.length - 1 ? base : base + '/';
|
|
var url = base + id + '.js';
|
|
var document = window.document;
|
|
var scripts = document.head.getElementsByTagName('script');
|
|
for (var i = 0; i < scripts.length; i++) {
|
|
if (url === scripts[i].getAttribute('src')) {
|
|
throw new Error("Duplicate import of '" + url + "'.");
|
|
}
|
|
}
|
|
var script = document.createElement('script');
|
|
script.setAttribute('id', id);
|
|
script.setAttribute('type', 'module');
|
|
/* eslint-disable no-use-before-define */
|
|
var loadHandler = function() {
|
|
script.removeEventListener('load', loadHandler);
|
|
script.removeEventListener('error', errorHandler);
|
|
callback();
|
|
};
|
|
var errorHandler = function(e) {
|
|
script.removeEventListener('load', loadHandler);
|
|
script.removeEventListener('error', errorHandler);
|
|
callback(null, new Error("The script '" + e.target.src + "' failed to load."));
|
|
};
|
|
/* eslint-enable no-use-before-define */
|
|
script.addEventListener('load', loadHandler, false);
|
|
script.addEventListener('error', errorHandler, false);
|
|
script.setAttribute('src', url);
|
|
document.head.appendChild(script);
|
|
};
|
|
|
|
window.exports.preload = function(callback) {
|
|
var modules = [
|
|
['view'],
|
|
['json', 'xml', 'protobuf', 'hdf5', 'grapher', 'browser'],
|
|
['base', 'text', 'flatbuffers', 'flexbuffers', 'zip', 'tar', 'python']
|
|
];
|
|
var next = function() {
|
|
if (modules.length === 0) {
|
|
callback();
|
|
} else {
|
|
var ids = modules.pop();
|
|
/* eslint-disable no-loop-func */
|
|
var resolved = ids.length;
|
|
for (var i = 0; i < ids.length; i++) {
|
|
window.exports.require(ids[i], function(module, error) {
|
|
if (error) {
|
|
callback(null, error);
|
|
} else {
|
|
resolved--;
|
|
if (resolved === 0) {
|
|
next();
|
|
}
|
|
}
|
|
});
|
|
}
|
|
/* eslint-enable no-loop-func */
|
|
}
|
|
};
|
|
next();
|
|
};
|
|
|
|
window.exports.terminate = function(message) {
|
|
var document = window.document;
|
|
document.getElementById('message-text').innerText = message;
|
|
var button = document.getElementById('message-button');
|
|
button.style.display = 'none';
|
|
button.onclick = null;
|
|
document.body.setAttribute('class', 'welcome message');
|
|
if (window.__view__) {
|
|
/* eslint-disable no-unused-vars */
|
|
try {
|
|
window.__view__.show('welcome message');
|
|
} catch (error) {
|
|
// continue regardless of error
|
|
}
|
|
/* eslint-enable no-unused-vars */
|
|
}
|
|
};
|
|
|
|
window.addEventListener('error', function (event) {
|
|
var error = event instanceof window.ErrorEvent && event.error && event.error instanceof Error ? event.error : new Error(event && event.message ? event.message : JSON.stringify(event));
|
|
window.exports.terminate(error.message);
|
|
});
|
|
|
|
window.addEventListener('load', function() {
|
|
if (typeof Symbol !== 'function' || typeof Symbol.asyncIterator !== 'symbol' ||
|
|
typeof BigInt !== 'function' || typeof BigInt.asIntN !== 'function' || typeof BigInt.asUintN !== 'function' || typeof DataView.prototype.getBigInt64 !== 'function') {
|
|
throw new Error('Please update your browser to use this application.');
|
|
}
|
|
var ua = window.navigator.userAgent;
|
|
var chrome = ua.match(/Chrom(e|ium)\/([0-9]+)\./);
|
|
var safari = ua.match(/Version\/(\d+)\.(\d+).*Safari/);
|
|
var firefox = ua.match(/Firefox\/([0-9]+)\./);
|
|
if ((Array.isArray(chrome) && parseInt(chrome[2], 10) < 86) ||
|
|
(Array.isArray(safari) && (parseInt(safari[1], 10) < 16 || (parseInt(safari[1], 10) === 16 && parseInt(safari[2], 10) < 4))) ||
|
|
(Array.isArray(firefox) && parseInt(firefox[1], 10) < 114)) {
|
|
throw new Error('Please update your browser to use this application.');
|
|
}
|
|
window.exports.preload(function(value, error) {
|
|
if (error) {
|
|
window.exports.terminate(error.message);
|
|
} else {
|
|
var host = new window.exports.browser.Host();
|
|
window.__view__ = new window.exports.view.View(host);
|
|
window.__view__.start();
|
|
}
|
|
});
|
|
});
|