/** * CssUserAgent (cssua.js) v2.1.31 * http://cssuseragent.org * * Copyright (c)2006-2015 Stephen M. McKamey. * Licensed under The MIT License. */ /*jshint smarttabs:true, regexp:false, browser:true */ /** * @type {Object} */ var cssua = ( /** * @param html {Object} root DOM element * @param userAgent {string} browser userAgent string * @return {Object} */ function(html, userAgent, sa) { 'use strict'; /** * @const * @type {string} */ var PREFIX = ' ua-'; /** * @const * @type {RegExp} */ var R_Platform = /\s*([\-\w ]+)[\s\/\:]([\d_]+\b(?:[\-\._\/]\w+)*)/; /** * @const * @type {RegExp} */ var R_Version = /([\w\-\.]+[\s\/][v]?[\d_]+\b(?:[\-\._\/]\w+)*)/g; /** * @const * @type {RegExp} */ var R_BlackBerry = /\b(?:(blackberry\w*|bb10)|(rim tablet os))(?:\/(\d+\.\d+(?:\.\w+)*))?/; /** * @const * @type {RegExp} */ var R_Silk = /\bsilk-accelerated=true\b/; /** * @const * @type {RegExp} */ var R_FluidApp = /\bfluidapp\b/; /** * @const * @type {RegExp} */ var R_desktop = /(\bwindows\b|\bmacintosh\b|\blinux\b|\bunix\b)/; /** * @const * @type {RegExp} */ var R_mobile = /(\bandroid\b|\bipad\b|\bipod\b|\bwindows phone\b|\bwpdesktop\b|\bxblwp7\b|\bzunewp7\b|\bwindows ce\b|\bblackberry\w*|\bbb10\b|\brim tablet os\b|\bmeego|\bwebos\b|\bpalm|\bsymbian|\bj2me\b|\bdocomo\b|\bpda\b|\bchtml\b|\bmidp\b|\bcldc\b|\w*?mobile\w*?|\w*?phone\w*?)/; /** * @const * @type {RegExp} */ var R_game = /(\bxbox\b|\bplaystation\b|\bnintendo\s+\w+)/; /** * The root CssUserAgent * @type {Object} */ var cssua = { parse: /** * @param uaStr {string} * @return {Object} */ function(uaStr, sa) { /** * @type {Object} */ var ua = {}; if (sa) { ua.standalone = sa; } uaStr = (''+uaStr).toLowerCase(); if (!uaStr) { return ua; } var i, count, raw = uaStr.split(/[()]/); for (var j=0, rawCount=raw.length; j 0) { // loop through chopping last '-' to end off // concat result onto return string css += PREFIX+b+'-'+v.substring(0, i); i = v.indexOf('-', i+1); } css += PREFIX+b+'-'+v; } return css; } /** * @type {string} */ var uaCss = ''; for (var b in ua) { if (b && ua.hasOwnProperty(b)) { uaCss += format(b, ua[b]); } } // user-agent classNames return uaCss; }, encode: /** * Encodes parsed userAgent object as a compact URI-Encoded key-value collection * @param ua {Object} * @return {string} */ function(ua) { var query = ''; for (var b in ua) { if (b && ua.hasOwnProperty(b)) { if (query) { query += '&'; } query += encodeURIComponent(b)+'='+encodeURIComponent(ua[b]); } } return query; } }; /** * @const * @type {Object} */ cssua.userAgent = cssua.ua = cssua.parse(userAgent, sa); /** * @const * @type {string} */ var ua = cssua.format(cssua.ua)+' js'; // append CSS classes to HTML node if (html.className) { html.className = html.className.replace(/\bno-js\b/g, '') + ua; } else { html.className = ua.substr(1); } return cssua; })(document.documentElement, navigator.userAgent, navigator.standalone);