forked from swank-js/swank-js
-
Notifications
You must be signed in to change notification settings - Fork 0
/
user-agent.js
54 lines (52 loc) · 2.32 KB
/
user-agent.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
// -*- 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";
};