if (window.$) { $.fn.int = function(){ return parseInt($(this).val(),10) } $.fn.float = function(){ return parseFloat($(this).val()) } $.fn.string = function(){ return trim($(this).val()) } $.fn.enable = function() { return $(this).attr("disabled",null) } $.fn.disable = function() { return $(this).attr("disabled","disabled") } } function trim(s){ return s.replace(/^\s+/,"").replace(/\s+$/,"") } var E = Math.E var PI = Math.PI var PHI = (1+Math.sqrt(5))/2 var TWO_PI = PI*2 var HALF_PI = PI/2 var LN10 = Math.LN10 function clamp(n,a,b){ return n= a) + 0 // ^^ bool -> int } function julestep (a,b,n) { return clamp(norm(n,a,b), 0.0, 1.0); } // hermite curve apparently function smoothstep(min,max,n){ var t = clamp((n - min) / (max - min), 0.0, 1.0); return t * t * (3.0 - 2.0 * t) } 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 reverse(a){ var reversed = [] for (var i = 0, _len = a.length-1; i <= _len; i++){ reversed[i] = a[_len-i] } return reversed } function deinterlace(a){ var odd = [], even = [] for (var i = 0, _len = a.length; i < _len; i++) { if (i % 2) even.push(a[i]) else odd.push(a[i]) } return [even, odd] } function weave(a){ var aa = deinterlace(a) var b = [] aa[0].forEach(function(el){ b.push(el) }) reverse(aa[1]).forEach(function(el){ b.push(el) }) return b } function range(m,n,s){ var a = [] s = s || 1 for (var i = m; i <= n; i += s) { a.push(i) } return a } var guid_syllables = "iz az ez or iv ex baz el lo lum ot un no".split(" ") var guid_n = 0 function guid(n){ var len = guid_syllables.length return ((++guid_n*(len-1)*(~~log(guid_n))).toString(len)).split("").map(function(s){ return guid_syllables[parseInt(s, len) % len--] }).join("") } function defaults (dest, src) { dest = dest || {} for (var i in src) { dest[i] = typeof dest[i] == 'undefined' ? src[i] : dest[i] } return dest } // Change straight quotes to curly and double hyphens to em-dashes. function smarten(a) { a = a.replace(/(^|[-\u2014\s(\["])'/g, "$1\u2018"); // opening singles a = a.replace(/'/g, "\u2019"); // closing singles & apostrophes a = a.replace(/(^|[-\u2014/\[(\u2018\s])"/g, "$1\u201c"); // opening doubles a = a.replace(/"/g, "\u201d"); // closing doubles a = a.replace(/--/g, "\u2014"); // em-dashes return a }; function pairs(h){ var a = [] for (var i in h) { if(h.hasOwnProperty(i)) { a.push([i, h[i]]) } } return a } function invert_hash (h) { var k = {} for (var i in h) { if (h.hasOwnProperty(i)) k[h[i]] = i } return k } function bitcount(v) { v = v - ((v >>> 1) & 0x55555555); v = (v & 0x33333333) + ((v >>> 2) & 0x33333333); return ((v + (v >>> 4) & 0xF0F0F0F) * 0x1010101) >>> 24; }