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

// 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;
};
}
};