You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
216 lines
6.5 KiB
216 lines
6.5 KiB
2 years ago
|
// namespaces
|
||
|
var dwv = dwv || {};
|
||
|
var dwvOemr = dwvOemr || {};
|
||
|
/** @namespace */
|
||
|
dwvOemr.browser = dwvOemr.browser || {};
|
||
|
|
||
|
/**
|
||
|
* Local function to ask Modernizr if a property is supported.
|
||
|
* @parma {String} property The property to test.
|
||
|
*/
|
||
|
dwvOemr.browser.askModernizr = function (property) {
|
||
|
if ( typeof dwv.Modernizr === "undefined" ) {
|
||
|
dwvOemr.ModernizrInit(window, document);
|
||
|
}
|
||
|
var props = property.split('.');
|
||
|
var prop = dwv.Modernizr;
|
||
|
for ( var i = 0; i < props.length; ++i ) {
|
||
|
prop = prop[props[i]];
|
||
|
}
|
||
|
return prop;
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Browser check for the FileAPI.
|
||
|
* Assume support for Safari5.
|
||
|
*/
|
||
|
dwvOemr.browser.hasFileApi = function()
|
||
|
{
|
||
|
// regular test does not work on Safari 5
|
||
|
var isSafari5 = (navigator.appVersion.indexOf("Safari") !== -1) &&
|
||
|
(navigator.appVersion.indexOf("Chrome") === -1) &&
|
||
|
( (navigator.appVersion.indexOf("5.0.") !== -1) ||
|
||
|
(navigator.appVersion.indexOf("5.1.") !== -1) );
|
||
|
if( isSafari5 )
|
||
|
{
|
||
|
console.warn("Assuming FileAPI support for Safari5...");
|
||
|
return true;
|
||
|
}
|
||
|
// regular test
|
||
|
return dwvOemr.browser.askModernizr("filereader");
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Browser check for the XMLHttpRequest.
|
||
|
*/
|
||
|
dwvOemr.browser.hasXmlHttpRequest = function()
|
||
|
{
|
||
|
return dwvOemr.browser.askModernizr("xhrresponsetype") &&
|
||
|
dwvOemr.browser.askModernizr("xhrresponsetypearraybuffer") &&
|
||
|
dwvOemr.browser.askModernizr("xhrresponsetypetext") &&
|
||
|
"XMLHttpRequest" in window && "withCredentials" in new XMLHttpRequest();
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Browser check for typed array.
|
||
|
*/
|
||
|
dwvOemr.browser.hasTypedArray = function()
|
||
|
{
|
||
|
return dwvOemr.browser.askModernizr("dataview") && dwvOemr.browser.askModernizr("typedarrays");
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Browser check for input with type='color'.
|
||
|
* Missing in IE and Safari.
|
||
|
*/
|
||
|
dwvOemr.browser.hasInputColor = function()
|
||
|
{
|
||
|
return dwvOemr.browser.askModernizr("inputtypes.color");
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Browser check for input with type='files' and webkitdirectory flag.
|
||
|
* Missing in IE and Safari.
|
||
|
*/
|
||
|
dwvOemr.browser.hasInputDirectory = function()
|
||
|
{
|
||
|
return dwvOemr.browser.askModernizr("fileinputdirectory");
|
||
|
};
|
||
|
|
||
|
|
||
|
//only check at startup (since we propose a replacement)
|
||
|
dwvOemr.browser._hasTypedArraySlice = (typeof Uint8Array.prototype.slice !== "undefined");
|
||
|
|
||
|
/**
|
||
|
* Browser check for typed array slice method.
|
||
|
* Missing in Internet Explorer 11.
|
||
|
*/
|
||
|
dwvOemr.browser.hasTypedArraySlice = function()
|
||
|
{
|
||
|
return dwvOemr.browser._hasTypedArraySlice;
|
||
|
};
|
||
|
|
||
|
// only check at startup (since we propose a replacement)
|
||
|
dwvOemr.browser._hasFloat64Array = ("Float64Array" in window);
|
||
|
|
||
|
/**
|
||
|
* Browser check for Float64Array array.
|
||
|
* Missing in PhantomJS 1.9.20 (on Travis).
|
||
|
*/
|
||
|
dwvOemr.browser.hasFloat64Array = function()
|
||
|
{
|
||
|
return dwvOemr.browser._hasFloat64Array;
|
||
|
};
|
||
|
|
||
|
//only check at startup (since we propose a replacement)
|
||
|
dwvOemr.browser._hasClampedArray = ("Uint8ClampedArray" in window);
|
||
|
|
||
|
/**
|
||
|
* Browser check for clamped array.
|
||
|
* Missing in:
|
||
|
* - Safari 5.1.7 for Windows
|
||
|
* - PhantomJS 1.9.20 (on Travis).
|
||
|
*/
|
||
|
dwvOemr.browser.hasClampedArray = function()
|
||
|
{
|
||
|
return dwvOemr.browser._hasClampedArray;
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Browser checks to see if it can run dwvOemr. Throws an error if not.
|
||
|
* Silently replaces basic functions.
|
||
|
*/
|
||
|
dwvOemr.browser.check = function()
|
||
|
{
|
||
|
|
||
|
// Required --------------
|
||
|
|
||
|
var appnorun = "The application cannot be run.";
|
||
|
var message = "";
|
||
|
// Check for the File API support
|
||
|
if( !dwvOemr.browser.hasFileApi() ) {
|
||
|
message = "The File APIs are not supported in this browser. ";
|
||
|
alert(message+appnorun);
|
||
|
throw new Error(message);
|
||
|
}
|
||
|
// Check for XMLHttpRequest
|
||
|
if( !dwvOemr.browser.hasXmlHttpRequest() ) {
|
||
|
message = "The XMLHttpRequest is not supported in this browser. ";
|
||
|
alert(message+appnorun);
|
||
|
throw new Error(message);
|
||
|
}
|
||
|
// Check typed array
|
||
|
if( !dwvOemr.browser.hasTypedArray() ) {
|
||
|
message = "The Typed arrays are not supported in this browser. ";
|
||
|
alert(message+appnorun);
|
||
|
throw new Error(message);
|
||
|
}
|
||
|
|
||
|
// Replaced if not present ------------
|
||
|
|
||
|
// Check typed array slice
|
||
|
if( !dwvOemr.browser.hasTypedArraySlice() ) {
|
||
|
// silent fail with warning
|
||
|
console.warn("The TypedArray.slice method is not supported in this browser. This may impair performance. ");
|
||
|
// basic Uint16Array implementation
|
||
|
Uint16Array.prototype.slice = function (begin, end) {
|
||
|
var size = end - begin;
|
||
|
var cloned = new Uint16Array(size);
|
||
|
for (var i = 0; i < size; i++) {
|
||
|
cloned[i] = this[begin + i];
|
||
|
}
|
||
|
return cloned;
|
||
|
};
|
||
|
// basic Int16Array implementation
|
||
|
Int16Array.prototype.slice = function (begin, end) {
|
||
|
var size = end - begin;
|
||
|
var cloned = new Int16Array(size);
|
||
|
for (var i = 0; i < size; i++) {
|
||
|
cloned[i] = this[begin + i];
|
||
|
}
|
||
|
return cloned;
|
||
|
};
|
||
|
// basic Uint8Array implementation
|
||
|
Uint8Array.prototype.slice = function (begin, end) {
|
||
|
var size = end - begin;
|
||
|
var cloned = new Uint8Array(size);
|
||
|
for (var i = 0; i < size; i++) {
|
||
|
cloned[i] = this[begin + i];
|
||
|
}
|
||
|
return cloned;
|
||
|
};
|
||
|
// basic Int8Array implementation
|
||
|
Int8Array.prototype.slice = function (begin, end) {
|
||
|
var size = end - begin;
|
||
|
var cloned = new Int8Array(size);
|
||
|
for (var i = 0; i < size; i++) {
|
||
|
cloned[i] = this[begin + i];
|
||
|
}
|
||
|
return cloned;
|
||
|
};
|
||
|
}
|
||
|
// check clamped array
|
||
|
if( !dwvOemr.browser.hasClampedArray() ) {
|
||
|
// silent fail with warning
|
||
|
console.warn("The Uint8ClampedArray is not supported in this browser. This may impair performance. ");
|
||
|
// Use Uint8Array instead... Not good
|
||
|
// TODO Find better replacement!
|
||
|
window.Uint8ClampedArray = window.Uint8Array;
|
||
|
}
|
||
|
// check Float64 array
|
||
|
if( !dwvOemr.browser.hasFloat64Array() ) {
|
||
|
// silent fail with warning
|
||
|
console.warn("The Float64Array is not supported in this browser. This may impair performance. ");
|
||
|
// Use Float32Array instead... Not good
|
||
|
// TODO Find better replacement!
|
||
|
window.Float64Array = window.Float32Array;
|
||
|
}
|
||
|
|
||
|
// check string startsWith
|
||
|
if ( !String.prototype.startsWith ) {
|
||
|
String.prototype.startsWith = function (search, pos) {
|
||
|
return this.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;
|
||
|
};
|
||
|
}
|
||
|
};
|