|
| 1 | +//beta browsers not handled |
| 2 | +//+ not handled |
| 3 | +var ConfigParser = { |
| 4 | + finalBrowsers: [], |
| 5 | + |
| 6 | + bsBrowsers: null, |
| 7 | + |
| 8 | + parse: function(client, browser_config, callback) { |
| 9 | + client.getBrowsers(function(error, browsers) { |
| 10 | + ConfigParser.bsBrowsers = browsers; |
| 11 | + for (var key in browser_config) { |
| 12 | + var entry = browser_config[key]; |
| 13 | + ConfigParser.finalBrowsers.push(ConfigParser.getBrowserObject(entry)); |
| 14 | + } |
| 15 | + callback(ConfigParser.finalBrowsers); |
| 16 | + }); |
| 17 | + return |
| 18 | + }, |
| 19 | + |
| 20 | + setBrowserVersion: function(browsers, browserObject, verStr) { |
| 21 | + var filteredBrowsers = browsers.map(function(currentValue, index, array) { |
| 22 | + if (currentValue.browser == browserObject.browser) { |
| 23 | + return currentValue.browser_version; |
| 24 | + } |
| 25 | + }).filter(function(currentValue, index, array) { |
| 26 | + return currentValue && array.indexOf(currentValue) === index; |
| 27 | + }).sort(function(a, b) { |
| 28 | + return parseFloat(a) - parseFloat(b); |
| 29 | + }); |
| 30 | + if (verStr == 'current') { |
| 31 | + return filteredBrowsers[filteredBrowsers.length - 1]; |
| 32 | + } |
| 33 | + else if (verStr == 'previous') { |
| 34 | + return filteredBrowsers[filteredBrowsers.length - 2]; |
| 35 | + } |
| 36 | + }, |
| 37 | + |
| 38 | + populateOsAndOsVersion: function(browsers, browserObject) { |
| 39 | + if (!(browserObject.os && browserObject.os_version)) { |
| 40 | + var windowsFiltered = browsers.filter(function(currentValue, index, array) { |
| 41 | + return currentValue.os == 'Windows' && currentValue.browser == browserObject.browser && parseFloat(currentValue.browser_version).toPrecision(4) == parseFloat(browserObject.browser_version).toPrecision(4); |
| 42 | + }); |
| 43 | + var osxFiltered = browsers.filter(function(currentValue, index, array) { |
| 44 | + return currentValue.os == 'OS X' && currentValue.browser == browserObject.browser && parseFloat(currentValue.browser_version).toPrecision(4) == parseFloat(browserObject.browser_version).toPrecision(4); |
| 45 | + }); |
| 46 | + browserObject = windowsFiltered.length > 0 ? windowsFiltered[Math.floor(Math.random() * windowsFiltered.length)] : osxFiltered[Math.floor(Math.random() * osxFiltered.length)]; |
| 47 | + } |
| 48 | + return browserObject; |
| 49 | + }, |
| 50 | + |
| 51 | + getBrowserObject: function(entry) { |
| 52 | + var browserObject = {}; |
| 53 | + if (typeof(entry) == 'string') { |
| 54 | + var browserData = entry.split("_"); |
| 55 | + var lindex = browserData.length - 1; |
| 56 | + browserObject.browser = browserData[0]; |
| 57 | + if (browserData[lindex] && browserData[lindex].indexOf("+") == -1) { |
| 58 | + if (["current", "previous"].indexOf(browserData[1]) != -1) { |
| 59 | + browserObject.browser_version = ConfigParser.setBrowserVersion(ConfigParser.bsBrowsers, browserObject, browserData[1]); |
| 60 | + } |
| 61 | + else { |
| 62 | + browserObject.browser_version = browserData.slice(1, lindex + 1).join("."); |
| 63 | + } |
| 64 | + } |
| 65 | + else { |
| 66 | + browserObject.browser_version = browserData.slice(1, lindex + 1).join("."); |
| 67 | + } |
| 68 | + } else { |
| 69 | + browserObject = entry; |
| 70 | + } |
| 71 | + browserObject = ConfigParser.populateOsAndOsVersion(ConfigParser.bsBrowsers, browserObject); |
| 72 | + return browserObject; |
| 73 | + } |
| 74 | +}; |
| 75 | + |
| 76 | +exports.ConfigParser = ConfigParser; |
0 commit comments