define([ 'jquery', '/common/common-util.js', ], function ($, Util) { var Tools = {}; Tools.supportsSharedArrayBuffers = function () { try { return Object.prototype.toString.call(new window.WebAssembly.Memory({ shared: true, initial: 0, maximum: 0, }).buffer) === '[object SharedArrayBuffer]'; } catch (err) { console.error(err); } return false; }; var OS_HINTS = { "Win": "Windows", "Mac": "MacOS", "X11": "UNIX", "Linux": "Linux", }; Tools.guessOS = function () { var result = "UNKNOWN"; if (!window.navigator || !window.navigator.appVersion) { return result; } result = window.navigator.appVersion; console.log(result); Object.keys(OS_HINTS).some(function (key) { if (result.indexOf(key) === -1) { return; } result = OS_HINTS[key]; // else return true; }); return result; }; Tools.isSafari = function () { return navigator.vendor.match(/apple/i); }; Tools.isChrome = function () { return navigator.vendor.match(/google/i); }; Tools.guessBrowser = function () { if (Tools.isChrome()) { return 'chrome/blink'; } if (Tools.isSafari()) { return 'safari/webkit'; } if (navigator.userAgent.match(/firefox\//i)) { return 'firefox/gecko'; } if (navigator.userAgent.match(/edge\//i)) { return 'edge/edgehtml'; } if (navigator.userAgent.match(/trident\//i)) { return 'ie/trident'; } return navigator.userAgent + "\n" + navigator.vendor; }; Tools.cacheBuster = function (url) { if (/\?/.test(url)) { return url; } return url + '?test=' + (+new Date()); }; var common_map = {}; Tools.common_xhr = function (url, _cb) { var cb = Util.once(Util.once(Util.mkAsync(_cb))); var ready = common_map[url]; if (ready) { return void ready.reg(cb); } ready = common_map[url] = Util.mkEvent(true); ready.reg(cb); return void $.ajax(Tools.cacheBuster(url), { dataType: 'text', complete: function (xhr) { ready.fire(xhr); }, }); }; return Tools; });