diff --git a/js/id/core/connection.js b/js/id/core/connection.js index d0c76a6f2..3a16b19ff 100644 --- a/js/id/core/connection.js +++ b/js/id/core/connection.js @@ -241,12 +241,15 @@ iD.Connection = function() { }; connection.changesetTags = function(comment, imageryUsed) { - var tags = { - created_by: 'iD ' + iD.version, - host: (window.location.origin + window.location.pathname).substr(0, 255), - locale: iD.detect().locale, - imagery_used: imageryUsed.join(';').substr(0, 255), - }; + var detected = iD.detect(), + tags = { + created_by: 'iD ' + iD.version, + imagery_used: imageryUsed.join(';').substr(0, 255), + host: (window.location.origin + window.location.pathname).substr(0, 255), + locale: detected.locale, + browser: detected.browser + ' ' + detected.version, + platform: detected.platform + }; if (comment) { tags.comment = comment.substr(0, 255); diff --git a/js/id/id.js b/js/id/id.js index 58972fc2a..bf9491a07 100644 --- a/js/id/id.js +++ b/js/id/id.js @@ -330,17 +330,39 @@ iD.version = '1.7.0'; var detected = {}; var ua = navigator.userAgent, - msie = new RegExp('MSIE ([0-9]{1,}[\\.0-9]{0,})'); + m = null; - if (msie.exec(ua) !== null) { - var rv = parseFloat(RegExp.$1); - detected.support = !(rv && rv < 9); + m = ua.match(/Trident\/.*rv:([0-9]{1,}[\.0-9]{0,})/i); // IE11 + if (m !== null) { + detected.browser = 'msie'; + detected.version = m[1]; + } else { + m = ua.match(/(opera|chrome|safari|firefox|msie)\/?\s*(\.?\d+(\.\d+)*)/i); + if (m !== null) { + detected.browser = m[1]; + detected.version = m[2]; + m = ua.match(/version\/([\.\d]+)/i); + if (m !== null) { + detected.version = m[1]; + } + } else { + detected.browser = navigator.appName; + detected.version = navigator.appVersion; + } + } + + // keep major.minor version only.. + detected.version = detected.version.split(/\W/).slice(0,2).join('.'); + + if (detected.browser.toLowerCase() === 'msie') { + detected.browser = 'Internet Explorer'; + detected.support = parseFloat(detected.version) > 9; } else { detected.support = true; } // Added due to incomplete svg style support. See #715 - detected.opera = ua.indexOf('Opera') >= 0; + detected.opera = (detected.browser.toLowerCase() === 'opera'); detected.locale = navigator.language || navigator.userLanguage; @@ -350,11 +372,22 @@ iD.version = '1.7.0'; return navigator.userAgent.indexOf(x) !== -1; } - if (nav('Win')) detected.os = 'win'; - else if (nav('Mac')) detected.os = 'mac'; - else if (nav('X11')) detected.os = 'linux'; - else if (nav('Linux')) detected.os = 'linux'; - else detected.os = 'win'; + if (nav('Win')) { + detected.os = 'win'; + detected.platform = 'Windows'; + } + else if (nav('Mac')) { + detected.os = 'mac'; + detected.platform = 'Macintosh'; + } + else if (nav('X11') || nav('Linux')) { + detected.os = 'linux'; + detected.platform = 'Linux'; + } + else { + detected.os = 'win'; + detected.platform = 'Unknown'; + } iD.detect = function() { return detected; }; })();