1(function(){ 2 3var document = this.document; 4var window = document.window = this; 5 6var ua = navigator.userAgent.toLowerCase(), 7 platform = navigator.platform.toLowerCase(), 8 UA = ua.match(/(opera|ie|trident|firefox|chrome|version)[\s\/:]([\w\d\.]+)?.*?(safari|version[\s\/:]([\w\d\.]+)|rv:(\d.?)|$)/) || [null, 'unknown', 0], 9 mode = (UA[1] == 'ie' || UA[1] == 'trident') && document.documentMode; 10 11var Browser = this.Browser = { 12 13 extend: Function.prototype.extend, 14 15 name: (UA[1] == 'version') ? UA[3] : (UA[1] == 'trident' ? 'ie' : UA[1]), 16 17 version: mode || parseFloat((UA[1] == 'opera' && UA[4]) ? UA[4] : ((UA[1] == 'trident' && UA[5]) ? UA[5] : UA[2])), 18 19 Platform: { 20 name: ua.match(/ip(?:ad|od|hone)/) ? 'ios' : (ua.match(/(?:webos|android)/) || platform.match(/mac|win|linux/) || ['other'])[0] 21 }, 22 23 Features: { 24 xpath: !!(document.evaluate), 25 air: !!(window.runtime), 26 query: !!(document.querySelector), 27 json: !!(window.JSON) 28 }, 29 30 Plugins: {} 31 32}; 33 34Browser[Browser.name] = true; 35Browser[Browser.name + parseInt(Browser.version, 10)] = true; 36Browser.Platform[Browser.Platform.name] = true; 37 38// Request 39 40Browser.Request = (function(){ 41 42 var XMLHTTP = function(){ 43 return new XMLHttpRequest(); 44 }; 45 46 var MSXML2 = function(){ 47 return new ActiveXObject('MSXML2.XMLHTTP'); 48 }; 49 50 var MSXML = function(){ 51 return new ActiveXObject('Microsoft.XMLHTTP'); 52 }; 53 54 return Function.attempt(function(){ 55 XMLHTTP(); 56 return XMLHTTP; 57 }, function(){ 58 MSXML2(); 59 return MSXML2; 60 }, function(){ 61 MSXML(); 62 return MSXML; 63 }); 64 65})(); 66 67Browser.Features.xhr = !!(Browser.Request); 68 69//<1.4compat> 70 71// Flash detection 72 73var version = (Function.attempt(function(){ 74 return navigator.plugins['Shockwave Flash'].description; 75}, function(){ 76 return new ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version'); 77}) || '0 r0').match(/\d+/g); 78 79Browser.Plugins.Flash = { 80 version: Number(version[0] || '0.' + version[1]) || 0, 81 build: Number(version[2]) || 0 82}; 83 84//</1.4compat> 85 86// String scripts 87 88Browser.exec = function(text){ 89 if (!text) return text; 90 if (window.execScript){ 91 window.execScript(text); 92 } else { 93 var script = document.createElement('script'); 94 script.setAttribute('type', 'text/javascript'); 95 script.text = text; 96 document.head.appendChild(script); 97 document.head.removeChild(script); 98 } 99 return text; 100}; 101 102 103if (Browser.Platform.ios) Browser.Platform.ipod = true; 104 105Browser.Engine = {}; 106 107var setEngine = function(name, version){ 108 Browser.Engine.name = name; 109 Browser.Engine[name + version] = true; 110 Browser.Engine.version = version; 111}; 112 113if (Browser.ie){ 114 Browser.Engine.trident = true; 115 116 switch (Browser.version){ 117 case 6: setEngine('trident', 4); break; 118 case 7: setEngine('trident', 5); break; 119 case 8: setEngine('trident', 6); 120 } 121} 122 123if (Browser.firefox){ 124 Browser.Engine.gecko = true; 125 126 if (Browser.version >= 3) setEngine('gecko', 19); 127 else setEngine('gecko', 18); 128} 129 130if (Browser.safari || Browser.chrome){ 131 Browser.Engine.webkit = true; 132 133 switch (Browser.version){ 134 case 2: setEngine('webkit', 419); break; 135 case 3: setEngine('webkit', 420); break; 136 case 4: setEngine('webkit', 525); 137 } 138} 139 140if (Browser.opera){ 141 Browser.Engine.presto = true; 142 143 if (Browser.version >= 9.6) setEngine('presto', 960); 144 else if (Browser.version >= 9.5) setEngine('presto', 950); 145 else setEngine('presto', 925); 146} 147 148if (Browser.name == 'unknown'){ 149 switch ((ua.match(/(?:webkit|khtml|gecko)/) || [])[0]){ 150 case 'webkit': 151 case 'khtml': 152 Browser.Engine.webkit = true; 153 break; 154 case 'gecko': 155 Browser.Engine.gecko = true; 156 } 157} 158 159this.$exec = Browser.exec; 160 161//</1.2compat> 162 163})();
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.