54 lines
2.3 KiB
JavaScript
54 lines
2.3 KiB
JavaScript
// -*- mode: js2; js-run: "user-agent-tests.js" -*-
|
|
//
|
|
// Copyright (c) 2010 Ivan Shvedunov. All rights reserved.
|
|
//
|
|
// Redistribution and use in source and binary forms, with or without
|
|
// modification, are permitted provided that the following conditions
|
|
// are met:
|
|
//
|
|
// * Redistributions of source code must retain the above copyright
|
|
// notice, this list of conditions and the following disclaimer.
|
|
//
|
|
// * Redistributions in binary form must reproduce the above
|
|
// copyright notice, this list of conditions and the following
|
|
// disclaimer in the documentation and/or other materials
|
|
// provided with the distribution.
|
|
//
|
|
// THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESSED
|
|
// OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
// ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
var RX_TABLE = [
|
|
[ /^.*(Firefox|Chrome|chromeframe|Conkeror|SeaMonkey)\/(\d+\.\d+).*$/, "$1 $2"],
|
|
[ /^.*Firefox.*$/, "Firefox" ],
|
|
[ /^.*Opera.*Version\/(\d+\.\d+).*$/, "Opera $1" ],
|
|
[ /^.*Opera[/ ](\d+\.\d+).*$/, "Opera $1" ],
|
|
[ /^.*Android (\d+\.\d+).*$/, "Android $1" ],
|
|
[ /^.*iPhone;.*OS (\d+(?:_\d+)*).*$/, "iPhone $1" ],
|
|
[ /^.*iPad;.*OS (\d+(?:_\d+)*).*$/, "iPad $1" ],
|
|
[ /^.*iPod;.*$/, "iPod" ],
|
|
[ /^.*Version\/(\d+\.\d+).*Safari.*$/, "Safari $1" ],
|
|
[ /^.*Qt\/(\d+\.\d+).*$/, "QtWeb $1" ],
|
|
[ /^.*WebKit.*$/, "WebKit" ],
|
|
[ /^.*Gecko.*$/, "Gecko" ],
|
|
[ /^.*MSIE (\d+\.\d+).*$/, "MSIE $1" ]
|
|
];
|
|
|
|
exports.recognize = function recognize (name) {
|
|
// console.log("name=%s", name);
|
|
for (var i = 0; i < RX_TABLE.length; ++i) {
|
|
var r = name.replace(RX_TABLE[i][0], RX_TABLE[i][1]);
|
|
// console.log("m=%s r=%s", RX_TABLE[i][0], r);
|
|
if (r != name)
|
|
return r.replace(/chromeframe/, "ChromeFrame").replace(/_/g, ".");
|
|
}
|
|
return "unknown";
|
|
};
|