| Index: third_party/google_input_tools/third_party/closure_library/closure/goog/labs/useragent/util.js
|
| diff --git a/third_party/google_input_tools/third_party/closure_library/closure/goog/labs/useragent/util.js b/third_party/google_input_tools/third_party/closure_library/closure/goog/labs/useragent/util.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..c3665c3de0ff865e42a3acdbd7ae475ed1b5d82a
|
| --- /dev/null
|
| +++ b/third_party/google_input_tools/third_party/closure_library/closure/goog/labs/useragent/util.js
|
| @@ -0,0 +1,154 @@
|
| +// Copyright 2013 The Closure Library Authors. All Rights Reserved.
|
| +//
|
| +// Licensed under the Apache License, Version 2.0 (the "License");
|
| +// you may not use this file except in compliance with the License.
|
| +// You may obtain a copy of the License at
|
| +//
|
| +// http://www.apache.org/licenses/LICENSE-2.0
|
| +//
|
| +// Unless required by applicable law or agreed to in writing, software
|
| +// distributed under the License is distributed on an "AS-IS" BASIS,
|
| +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| +// See the License for the specific language governing permissions and
|
| +// limitations under the License.
|
| +
|
| +/**
|
| + * @fileoverview Utilities used by goog.labs.userAgent tools. These functions
|
| + * should not be used outside of goog.labs.userAgent.*.
|
| + *
|
| + * @visibility {//closure/goog/bin/sizetests:__pkg__}
|
| + * @visibility {//closure/goog/dom:__subpackages__}
|
| + * @visibility {//closure/goog/style:__pkg__}
|
| + * @visibility {//closure/goog/testing:__pkg__}
|
| + * @visibility {//closure/goog/useragent:__subpackages__}
|
| + * @visibility {//testing/puppet/modules:__pkg__} *
|
| + *
|
| + * @author nnaze@google.com (Nathan Naze)
|
| + */
|
| +
|
| +goog.provide('goog.labs.userAgent.util');
|
| +
|
| +goog.require('goog.string');
|
| +
|
| +
|
| +/**
|
| + * Gets the native userAgent string from navigator if it exists.
|
| + * If navigator or navigator.userAgent string is missing, returns an empty
|
| + * string.
|
| + * @return {string}
|
| + * @private
|
| + */
|
| +goog.labs.userAgent.util.getNativeUserAgentString_ = function() {
|
| + var navigator = goog.labs.userAgent.util.getNavigator_();
|
| + if (navigator) {
|
| + var userAgent = navigator.userAgent;
|
| + if (userAgent) {
|
| + return userAgent;
|
| + }
|
| + }
|
| + return '';
|
| +};
|
| +
|
| +
|
| +/**
|
| + * Getter for the native navigator.
|
| + * This is a separate function so it can be stubbed out in testing.
|
| + * @return {Navigator}
|
| + * @private
|
| + */
|
| +goog.labs.userAgent.util.getNavigator_ = function() {
|
| + return goog.global.navigator;
|
| +};
|
| +
|
| +
|
| +/**
|
| + * A possible override for applications which wish to not check
|
| + * navigator.userAgent but use a specified value for detection instead.
|
| + * @private {string}
|
| + */
|
| +goog.labs.userAgent.util.userAgent_ =
|
| + goog.labs.userAgent.util.getNativeUserAgentString_();
|
| +
|
| +
|
| +/**
|
| + * Applications may override browser detection on the built in
|
| + * navigator.userAgent object by setting this string. Set to null to use the
|
| + * browser object instead.
|
| + * @param {?string=} opt_userAgent The User-Agent override.
|
| + */
|
| +goog.labs.userAgent.util.setUserAgent = function(opt_userAgent) {
|
| + goog.labs.userAgent.util.userAgent_ = opt_userAgent ||
|
| + goog.labs.userAgent.util.getNativeUserAgentString_();
|
| +};
|
| +
|
| +
|
| +/**
|
| + * @return {string} The user agent string.
|
| + */
|
| +goog.labs.userAgent.util.getUserAgent = function() {
|
| + return goog.labs.userAgent.util.userAgent_;
|
| +};
|
| +
|
| +
|
| +/**
|
| + * @param {string} str
|
| + * @return {boolean} Whether the user agent contains the given string, ignoring
|
| + * case.
|
| + */
|
| +goog.labs.userAgent.util.matchUserAgent = function(str) {
|
| + var userAgent = goog.labs.userAgent.util.getUserAgent();
|
| + return goog.string.contains(userAgent, str);
|
| +};
|
| +
|
| +
|
| +/**
|
| + * @param {string} str
|
| + * @return {boolean} Whether the user agent contains the given string.
|
| + */
|
| +goog.labs.userAgent.util.matchUserAgentIgnoreCase = function(str) {
|
| + var userAgent = goog.labs.userAgent.util.getUserAgent();
|
| + return goog.string.caseInsensitiveContains(userAgent, str);
|
| +};
|
| +
|
| +
|
| +/**
|
| + * Parses the user agent into tuples for each section.
|
| + * @param {string} userAgent
|
| + * @return {!Array.<!Array.<string>>} Tuples of key, version, and the contents
|
| + * of the parenthetical.
|
| + */
|
| +goog.labs.userAgent.util.extractVersionTuples = function(userAgent) {
|
| + // Matches each section of a user agent string.
|
| + // Example UA:
|
| + // Mozilla/5.0 (iPad; U; CPU OS 3_2_1 like Mac OS X; en-us)
|
| + // AppleWebKit/531.21.10 (KHTML, like Gecko) Mobile/7B405
|
| + // This has three version tuples: Mozilla, AppleWebKit, and Mobile.
|
| +
|
| + var versionRegExp = new RegExp(
|
| + // Key. Note that a key may have a space.
|
| + // (i.e. 'Mobile Safari' in 'Mobile Safari/5.0')
|
| + '(\\w[\\w ]+)' +
|
| +
|
| + '/' + // slash
|
| + '([^\\s]+)' + // version (i.e. '5.0b')
|
| + '\\s*' + // whitespace
|
| + '(?:\\((.*?)\\))?', // parenthetical info. parentheses not matched.
|
| + 'g');
|
| +
|
| + var data = [];
|
| + var match;
|
| +
|
| + // Iterate and collect the version tuples. Each iteration will be the
|
| + // next regex match.
|
| + while (match = versionRegExp.exec(userAgent)) {
|
| + data.push([
|
| + match[1], // key
|
| + match[2], // value
|
| + // || undefined as this is not undefined in IE7 and IE8
|
| + match[3] || undefined // info
|
| + ]);
|
| + }
|
| +
|
| + return data;
|
| +};
|
| +
|
|
|