(more js) |
|||
Line 1: | Line 1: | ||
<html> | <html> | ||
+ | <script> | ||
+ | /* browser.js v0.1-dev | @ajlkn | MIT licensed */ | ||
+ | var browser = (function() { "use strict"; var _ = { | ||
+ | |||
+ | /** | ||
+ | * Name. | ||
+ | * @var {string} | ||
+ | */ | ||
+ | name: null, | ||
+ | |||
+ | /** | ||
+ | * Version. | ||
+ | * @var {float} | ||
+ | */ | ||
+ | version: null, | ||
+ | |||
+ | /** | ||
+ | * OS. | ||
+ | * @var {string} | ||
+ | */ | ||
+ | os: null, | ||
+ | |||
+ | /** | ||
+ | * OS version. | ||
+ | * @var {float} | ||
+ | */ | ||
+ | osVersion: null, | ||
+ | |||
+ | /** | ||
+ | * Touch. | ||
+ | * @var {bool} | ||
+ | */ | ||
+ | touch: null, | ||
+ | |||
+ | /** | ||
+ | * Mobile. | ||
+ | * @var {bool} | ||
+ | */ | ||
+ | mobile: null, | ||
+ | |||
+ | /** | ||
+ | * Temporary element for canUse() | ||
+ | * @var {DOMElement} | ||
+ | */ | ||
+ | _canUse: null, | ||
+ | |||
+ | /** | ||
+ | * Determines if the browser supports a given property. | ||
+ | * @param {string} p Property. | ||
+ | * @return {bool} True if property is supported, false if not. | ||
+ | */ | ||
+ | canUse: function(p) { | ||
+ | |||
+ | // Create temporary element if it doesn't already exist. | ||
+ | if (!_._canUse) | ||
+ | _._canUse = document.createElement('div'); | ||
+ | |||
+ | // Check for property. | ||
+ | var e = _._canUse.style, | ||
+ | up = p.charAt(0).toUpperCase() + p.slice(1); | ||
+ | |||
+ | return ( | ||
+ | p in e | ||
+ | || ('Moz' + up) in e | ||
+ | || ('Webkit' + up) in e | ||
+ | || ('O' + up) in e | ||
+ | || ('ms' + up) in e | ||
+ | ); | ||
+ | |||
+ | }, | ||
+ | |||
+ | /** | ||
+ | * Initialize. | ||
+ | */ | ||
+ | init: function() { | ||
+ | |||
+ | var x, y, a, i, ua = navigator.userAgent; | ||
+ | |||
+ | // name, version. | ||
+ | x = 'other'; | ||
+ | y = 0; | ||
+ | a = [ | ||
+ | ['firefox', /Firefox\/([0-9\.]+)/], | ||
+ | ['bb', /BlackBerry.+Version\/([0-9\.]+)/], | ||
+ | ['bb', /BB[0-9]+.+Version\/([0-9\.]+)/], | ||
+ | ['opera', /OPR\/([0-9\.]+)/], | ||
+ | ['opera', /Opera\/([0-9\.]+)/], | ||
+ | ['edge', /Edge\/([0-9\.]+)/], | ||
+ | ['safari', /Version\/([0-9\.]+).+Safari/], | ||
+ | ['chrome', /Chrome\/([0-9\.]+)/], | ||
+ | ['ie', /MSIE ([0-9]+)/], | ||
+ | ['ie', /Trident\/.+rv:([0-9]+)/] | ||
+ | ]; | ||
+ | |||
+ | for (i=0; i < a.length; i++) { | ||
+ | |||
+ | if (ua.match(a[i][1])) { | ||
+ | |||
+ | x = a[i][0]; | ||
+ | y = parseFloat(RegExp.$1); | ||
+ | |||
+ | break; | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | _.name = x; | ||
+ | _.version = y; | ||
+ | |||
+ | // os, osVersion. | ||
+ | x = 'other'; | ||
+ | y = 0; | ||
+ | a = [ | ||
+ | ['ios', /([0-9_]+) like Mac OS X/, function(v) { return v.replace('_', '.').replace('_', ''); }], | ||
+ | ['ios', /CPU like Mac OS X/, function(v) { return 0 }], | ||
+ | ['wp', /Windows Phone ([0-9\.]+)/, null], | ||
+ | ['android', /Android ([0-9\.]+)/, null], | ||
+ | ['mac', /Macintosh.+Mac OS X ([0-9_]+)/, function(v) { return v.replace('_', '.').replace('_', ''); }], | ||
+ | ['windows', /Windows NT ([0-9\.]+)/, null], | ||
+ | ['bb', /BlackBerry.+Version\/([0-9\.]+)/, null], | ||
+ | ['bb', /BB[0-9]+.+Version\/([0-9\.]+)/, null] | ||
+ | ]; | ||
+ | |||
+ | for (i=0; i < a.length; i++) { | ||
+ | |||
+ | if (ua.match(a[i][1])) { | ||
+ | |||
+ | x = a[i][0]; | ||
+ | y = parseFloat( a[i][2] ? (a[i][2])(RegExp.$1) : RegExp.$1 ); | ||
+ | |||
+ | break; | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | _.os = x; | ||
+ | _.osVersion = y; | ||
+ | |||
+ | // touch. | ||
+ | _.touch = (_.os == 'wp' ? (navigator.msMaxTouchPoints > 0) : !!('ontouchstart' in window)); | ||
+ | |||
+ | // mobile. | ||
+ | _.mobile = (_.os == 'wp' || _.os == 'android' || _.os == 'ios' || _.os == 'bb'); | ||
+ | |||
+ | }, | ||
+ | |||
+ | }; _.init(); return _; })(); | ||
+ | |||
+ | // UMD Wrapper (github.com/umdjs/umd/blob/master/returnExports.js | @umdjs + @nason) | ||
+ | (function(root, factory) { | ||
+ | |||
+ | // AMD. | ||
+ | if (typeof define === 'function' && define.amd) | ||
+ | define([], factory); | ||
+ | |||
+ | // Node. | ||
+ | else if (typeof exports === 'object') | ||
+ | module.exports = factory(); | ||
+ | |||
+ | // Browser global. | ||
+ | else | ||
+ | root.browser = factory(); | ||
+ | |||
+ | }(this, function() { return browser; })); | ||
+ | </script> | ||
<script> | <script> | ||
/* breakpoints.js v0.1-dev | @ajlkn | MIT licensed */ | /* breakpoints.js v0.1-dev | @ajlkn | MIT licensed */ |
Revision as of 21:28, 17 October 2019