summaryrefslogtreecommitdiff
path: root/js/util.js
blob: dde34277f5e04f274982031c28ad8b926c11009e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
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
function clamp(n,a,b){ return n<a?a:n<b?n:b }
function lerp(n,a,b){ return (b-a)*n+a }
function mix(n,a,b){ return a*(1-n)+b*n }
function ceil(n){ return Math.ceil(n) }
function floor(n){ return Math.floor(n) }
function round(n){ return Math.round(n) }
function abs(n){ return Math.abs(n) }
function sign(n){ return Math.abs(n)/n }
function pow(n,b) { return Math.pow(n,b) }
function exp(n) { return Math.exp(n) }
function sqrt(n) { return Math.sqrt(n,b) }
function sin(n){ return Math.sin(n) }
function cos(n){ return Math.cos(n) }
function tan(n){ return Math.tan(n) }
function asin(n){ return Math.sin(n) }
function acos(n){ return Math.cos(n) }
function atan(n){ return Math.atan(n) }
function atan2(n){ return Math.atan2(n) }
function random(){ return Math.random() }
function rand(n){ return (Math.random()*n) }
function randint(n){ return rand(n)|0 }
function choice(a){ return a[randint(a.length)] }
function deg(n){ return n*180/PI }
function rad(n){ return n*PI/180 }

function step (n,a,b) {
  return clamp((n - a) / (b - a), 0.0, 1.0);
}
// hermite curve apparently
function smoothstep(n,a,b){
  var t = clamp((n - a) / (b - a), 0.0, 1.0);
  return t * t * (3.0 - 2.0 * t)
}

function loadImage(imageURL, callback) {
  var imageURL = proxify( imageURL );

  window.gif = window.img = null

  if (imageURL.substr(-3) === "gif") {
    window.gif = GIF(imageURL);
    // gif.on("error", tryToLoadNextImage);
    // gif.on("rendered", trackLoadTime);
    gif.on("rendered", callback);
    return gif.render();
  } else {
    window.img = new Image();
    // img.addEventListener("error", tryToLoadNextImage);
    img.addEventListener("load", callback);
    img.crossOrigin = "anonymous";
    return img.src = imageURL;
  }
}

function giveImage(t) {
  if (window.gif) {
    return gif.frames[gif.currentFrame(t)];
  } else {
    return img;
  }
}

function proxify (url) {
  if (url.indexOf("http") == 0)
    return "/cgi-bin/proxy?" + url // .replace(/^https?:\/\//, "");
  else
    return url
}

function filesize(n) {
  if (n < 1e3) return n + " bytes"
  if (n < 1e6) return decimalString(n/1e3) + " kb"
  if (n < 1e9) return decimalString(n/1e6) + " mb"
  return "WAY TOO BIG DUDE"
}
function decimalString(n){
  var m = Math.floor(n);
  return m + "." + Math.round((n-m)*10)
}