/js-only/heatmap/main.js

http://github.com/hhughes/ocaml-frui · JavaScript · 144 lines · 120 code · 24 blank · 0 comment · 18 complexity · 02b3ea92b0fa59d256992fc290196e35 MD5 · raw file

  1. var main_elt = $("div#main");
  2. var elements = {};
  3. var time = 0;
  4. var inc = 3600000;
  5. var elec_data = {};
  6. var rooms = [];
  7. var min_date = 0;
  8. var max_date = 2000;
  9. function pos(r) {
  10. switch(r) {
  11. case "GN17":
  12. return { left: 470, top: 90 };
  13. case "FN30":
  14. return { left: 1120, top: 70 };
  15. case "SN30":
  16. return { left: 1730, top: 70 };
  17. default:
  18. return { left: 0, top: 0};
  19. }
  20. }
  21. function load_objects(ht_d, o) {
  22. var e = eval(o)[0];
  23. var room = e.room;
  24. var data = e.data;
  25. for(x in data) {
  26. var d = data[x];
  27. var y = parseInt(d[0]);
  28. var v = parseInt(d[1]);
  29. if(ht_d[y] == null) {
  30. ht_d[y] = [];
  31. }
  32. var x = {
  33. "room": room,
  34. "value": v
  35. };
  36. ht_d[y].push(x);
  37. if(!ht_d.max || v > ht_d.max) {
  38. ht_d.max = v;
  39. }
  40. if(y > max_date) {
  41. max_date = y;
  42. }
  43. if(!min_date || y < min_date) {
  44. min_date = y;
  45. }
  46. }
  47. }
  48. function create_elements() {
  49. for(r in rooms) {
  50. var room = rooms[r];
  51. var div = $(document.createElement("div")).addClass("room").attr("title", room);
  52. main_elt.append(div);
  53. elements[room] = div;
  54. div.offset(pos(room));
  55. }
  56. }
  57. function render(r) {
  58. var rs = {};
  59. for(a in r[time]) {
  60. var d = r[time][a];
  61. if(a != "max") {
  62. rs[d.room] = d.value;
  63. }
  64. }
  65. for(x in rooms) {
  66. var room = rooms[x];
  67. var p = Math.round((rs[room] * 255) / r.max);
  68. elements[room].css({ backgroundColor: "rgb(" + p + "," + (255 - p) + ",0)" });
  69. }
  70. }
  71. function set_time(y) {
  72. time = y;
  73. $("div#spinner > input").val(time);
  74. }
  75. function load() {
  76. var n = parseInt($("input#n").val());
  77. var loaded = n;
  78. function all_done() {
  79. loaded--;
  80. if(!loaded) {
  81. set_time(min_date);
  82. for(r in elec_data[max_date]) {
  83. room = elec_data[max_date][r].room;
  84. rooms.push(room);
  85. }
  86. create_elements();
  87. render(elec_data);
  88. }
  89. }
  90. function load_elec(o) {
  91. load_objects(elec_data, o);
  92. all_done();
  93. }
  94. if(n > 0) $.get("http://localhost:8080/elec", load_elec);
  95. if(n > 1) $.get("http://localhost:8080/elec2", load_elec);
  96. if(n > 2) $.get("http://localhost:8080/elec3", load_elec);
  97. }
  98. function create_spinner() {
  99. function spinner_up() {
  100. time+=inc;
  101. $("div#spinner > input").val(time);
  102. render(elec_data);
  103. }
  104. function spinner_down() {
  105. time-=inc;
  106. $("div#spinner > input").val(time);
  107. render(elec_data);
  108. }
  109. var up = $(document.createElement("button")).addClass("up").text("^");
  110. var down = $(document.createElement("button")).addClass("down").text("v");
  111. var input = $(document.createElement("input")).addClass("spinner");
  112. up.click(spinner_up);
  113. down.click(spinner_down);
  114. var spinner = $("div#spinner");
  115. spinner.append(up);
  116. spinner.append(down);
  117. spinner.append(input);
  118. }
  119. create_spinner();
  120. $("button#load").click(load);