1// browser detect script 2browserDetect = { 3 matchGroups: [ 4 [ 5 {uaString:'win', className:'win'}, 6 {uaString:'mac', className:'mac'}, 7 {uaString:['linux','x11'], className:'linux'} 8 ], 9 [ 10 {uaString:'msie', className:'trident'}, 11 {uaString:'applewebkit', className:'webkit'}, 12 {uaString:'gecko', className:'gecko'}, 13 {uaString:'opera', className:'presto'} 14 ], 15 [ 16 {uaString:'msie 9.0', className:'ie9'}, 17 {uaString:'msie 8.0', className:'ie8'}, 18 {uaString:'msie 7.0', className:'ie7'}, 19 {uaString:'msie 6.0', className:'ie6'}, 20 {uaString:'firefox/2', className:'ff2'}, 21 {uaString:'firefox/3', className:'ff3'}, 22 {uaString:'firefox/4', className:'ff4'}, 23 {uaString:['opera','version/11'], className:'opera11'}, 24 {uaString:['opera','version/10'], className:'opera10'}, 25 {uaString:'opera/9', className:'opera9'}, 26 {uaString:['safari','version/3'], className:'safari3'}, 27 {uaString:['safari','version/4'], className:'safari4'}, 28 {uaString:['safari','version/5'], className:'safari5'}, 29 {uaString:'chrome', className:'chrome'}, 30 {uaString:'safari', className:'safari2'}, 31 {uaString:'unknown', className:'unknown'} 32 ] 33 ], 34 init: function() { 35 this.detect(); 36 return this; 37 }, 38 addClass: function(className) { 39 this.pageHolder = document.documentElement; 40 document.documentElement.className += ' '+className; 41 }, 42 detect: function() { 43 for(var i = 0, curGroup; i < this.matchGroups.length; i++) { 44 curGroup = this.matchGroups[i]; 45 for(var j = 0, curItem; j < curGroup.length; j++) { 46 curItem = curGroup[j]; 47 if(typeof curItem.uaString === 'string') { 48 if(this.uaMatch(curItem.uaString)) { 49 this.addClass(curItem.className); 50 break; 51 } 52 } else { 53 for(var k = 0, allMatch = true; k < curItem.uaString.length; k++) { 54 if(!this.uaMatch(curItem.uaString[k])) { 55 allMatch = false; 56 break; 57 } 58 } 59 if(allMatch) { 60 this.addClass(curItem.className); 61 break; 62 } 63 } 64 } 65 } 66 }, 67 uaMatch: function(s) { 68 if(!this.ua) { 69 this.ua = navigator.userAgent.toLowerCase(); 70 } 71 return this.ua.indexOf(s) != -1; 72 } 73}.init();
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.