diff options
| author | Jules Laplace <jules@okfoc.us> | 2016-11-28 18:12:34 -0500 |
|---|---|---|
| committer | Jules Laplace <jules@okfoc.us> | 2016-11-28 18:12:34 -0500 |
| commit | ec41dd9dcc8e9af0d108297c6cfcfcef43d0d105 (patch) | |
| tree | ec9569f69a6420e965661b3c03c252b4212c99f2 /new-reality/public/assets/js/vendor/util.js | |
| parent | 2860b0ceae8e08704996b3397fb8b962ca60ab95 (diff) | |
new reality co
Diffstat (limited to 'new-reality/public/assets/js/vendor/util.js')
| -rw-r--r-- | new-reality/public/assets/js/vendor/util.js | 200 |
1 files changed, 200 insertions, 0 deletions
diff --git a/new-reality/public/assets/js/vendor/util.js b/new-reality/public/assets/js/vendor/util.js new file mode 100644 index 0000000..b42b832 --- /dev/null +++ b/new-reality/public/assets/js/vendor/util.js @@ -0,0 +1,200 @@ +// window.addEventListener('message', function(e) { +// console.log(e.data) +// if (e.data == "click") { +// document.body.click() +// } +// if (e.data == "ready") { +// app.ready() +// } +// }) + +var TWO_PI = Math.PI * 2 +var DEG_TO_RAD = Math.PI/180 +var RAD_TO_DEG = 180/Math.PI + +function gray(n) { + var s = Math.round(n * 255).toString(16) + "" + if (s.length == 1) s = "0" + s + return "#" + s + s + s +} + +function rand(n){ return (Math.random()*n) } +function randint(n){ return rand(n)|0 } +function randrange(a,b){ return a + rand(b-a) } +function randsign(){ return Math.random() > 0.5 ? 1 : -1 } +function choice(a){ return a[randint(a.length)] } +function clamp(n,a,b){ return n<a?a:n<b?n:b } +function lerp(n,a,b){ return (b-a)*n+a } +function avg(m,n,a){ return (m*(a-1)+n)/a } +function mod(n,m){ return n-(m * Math.floor(n/m)) } +function quantize(a,b){ return Math.round(a/b)*b } +function dist(x0,y0,x1,y1){ + var dx = x1-x0 + var dy = y1-y0 + return Math.sqrt(dx*dx + dy*dy) +} +function angle(x0,y0,x1,y1){ return Math.atan2(y1-y0,x1-x0) } +function pluck(h,a){ + var hh = {} + if (typeof a == "string") a = a.split(" "); + a.forEach(function(s){ hh[s] = h[s] }) + return hh +} +function shuffle(a){ + for (var i = a.length; i > 0; i--){ + var r = randint(i) + var swap = a[i-1] + a[i-1] = a[r] + a[r] = swap + } + return a +} +function defaults (dest, src) { + dest = dest || {} + for (var i in src) { + dest[i] = typeof dest[i] == 'undefined' ? src[i] : dest[i] + } + return dest +} + +function getFirstTouch(fn){ + return function(e){ + e.preventDefault() + var touch = e.touches[0] + fn(touch) + } +} + +function offsetFromPoint(event, element) { + function a(width) { + var l = 0, r = 200; + while (r - l > 0.0001) { + var mid = (r + l) / 2; + var a = document.createElement('div'); + a.style.cssText = 'position: absolute;left:0;top:0;background: red;z-index: 1000;'; + a.style[width ? 'width' : 'height'] = mid.toFixed(3) + '%'; + a.style[width ? 'height' : 'width'] = '100%'; + element.appendChild(a); + var x = document.elementFromPoint(event.clientX, event.clientY); + element.removeChild(a); + if (x === a) { + r = mid; + } else { + if (r === 200) { + return null; + } + l = mid; + } + } + return mid; + } + var l = a(1), + t = a(0); + return l && t ? { + left: l / 100, + top: t / 100, + toString: function () { + return 'left: ' + l + '%, top: ' + t + '%'; + } + } : null; +} + +// Check if supports 3D transforms +function has3d(){ + var el = $('<p>')[0], $iframe = $('<iframe>'), has3d, t, + transforms = { + 'webkitTransform': '-webkit-transform', + 'OTransform': '-o-transform', + 'msTransform': '-ms-transform', + 'transform': 'transform' + }; + + // Add it to the body to get the computed style + // Sandbox it inside an iframe to avoid Android Browser quirks + $iframe.appendTo('body').contents().find('body').append( el ); + + for (t in transforms) { + if (el.style[t] !== undefined) { + el.style[t] = 'translate3d(1px,1px,1px)'; + has3d = window.getComputedStyle(el).getPropertyValue(transforms[t]); + } + } + + $iframe.remove(); + + return has3d !== undefined && has3d.length > 0 && has3d !== "none"; +} + +// Identify browser based on useragent string +;(function( ua ) { + ua = ua.toLowerCase(); + var match = /(chrome)[ \/]([\w.]+)/.exec( ua ) || + /(webkit)[ \/]([\w.]+)/.exec( ua ) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec( ua ) || + /(msie) ([\w.]+)/.exec( ua ) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec( ua ) || + []; + var matched = { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; + browser = {}; + if ( matched.browser ) { + browser[ matched.browser ] = true; + browser.version = matched.version; + } + // Chrome is Webkit, but Webkit is also Safari. + if ( browser.chrome ) { + browser.webkit = true; + } else if ( browser.webkit ) { + browser.safari = true; + } + if (window.$) $.browser = browser; + return browser; +})( navigator.userAgent ); + +// Naive useragent detection pattern +var is_iphone = (navigator.userAgent.match(/iPhone/i)) || (navigator.userAgent.match(/iPod/i)) +var is_ipad = (navigator.userAgent.match(/iPad/i)) +var is_android = (navigator.userAgent.match(/Android/i)) +var is_mobile = is_iphone || is_ipad || is_android +var is_desktop = ! is_mobile; +var app_devicePixelRatio = 1; +var transformProp = browser.safari ? "WebkitTransform" : "transform"; + +if (is_mobile) { + $("html").addClass("mobile") +} +else { + $("html").addClass("desktop") +} + +// rAF shim +;(function() { + var lastTime = 0; + var vendors = ['ms', 'moz', 'webkit', 'o']; + for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) { + window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame']; + window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame'] + || window[vendors[x]+'CancelRequestAnimationFrame']; + } + + if (!window.requestAnimationFrame) + window.requestAnimationFrame = function(callback, element) { + var currTime = new Date().getTime(); + var timeToCall = Math.max(0, 16 - (currTime - lastTime)); + var id = window.setTimeout(function() { callback(currTime + timeToCall); }, + timeToCall); + lastTime = currTime + timeToCall; + return id; + }; + + if (!window.cancelAnimationFrame) + window.cancelAnimationFrame = function(id) { + clearTimeout(id); + }; +}()); + +function cloneDeep(data) { + return JSON.parse(JSON.stringify(data || null)) +}
\ No newline at end of file |
