You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

266 lines
7.8 KiB

  1. var points = 0;
  2. var totalRenders = 0;
  3. function updateDimensions( dimension ){
  4. less.modifyVars({"@sizeWidth":dimension+"px"});
  5. }
  6. function populateHoneycomb( honeyCells , index){
  7. // honeyCells = jsonExample;
  8. var height = "innerHeight" in window
  9. ? window.innerHeight
  10. : document.documentElement.offsetHeight;
  11. var width = "innerWidth" in window
  12. ? window.innerWidth
  13. : document.documentElement.offsetWidth;
  14. // var cellWidth = ( height/honeyCells.height )*Math.sqrt(3);
  15. // if( width/honeyCells.width < height/honeyCells.height ){
  16. var cellWidth = (width - honeyCells.width)/(honeyCells.width+1);
  17. // }
  18. updateDimensions( cellWidth );
  19. var horizontal = false;
  20. if(width/height > 1){
  21. horizontal = true;
  22. }
  23. var honeyCombHorizontal = false;
  24. if( honeyCells.width/honeyCells.height > 1){
  25. honeyCombHorizontal = true;
  26. }
  27. var honeyComb = document.getElementById("honeyComb");
  28. var renderedHoneyComb = document.getElementById("renderedHoneyComb");
  29. renderedHoneyComb.innerHTML="";
  30. honeyComb.innerHTML = "<div class='honeycombIndex'>Index: "+index+"</div>";
  31. honeyComb.innerHTML += "<div class='honeycombScore'>Score:"+honeyCells.score+"</div>";
  32. for (var i = honeyCells.height - 1; i >= 0; i--) {
  33. var even = (i%2 == 0) ? "even" : "";
  34. var container = document.createElement('div');
  35. container.className = "hex-row " + even;
  36. honeyComb.appendChild(container);
  37. for (var j = honeyCells.width - 1; j >= 0; j--) {
  38. var hexCell = document.createElement("div");
  39. hexCell.className = "hex";
  40. container.appendChild(hexCell);
  41. var topPart = document.createElement('div');
  42. topPart.className = "top";
  43. var middlePart = document.createElement('div');
  44. middlePart.className = "middle";
  45. var bottomPart = document.createElement('div');
  46. bottomPart.className = "bottom";
  47. hexCell.appendChild(topPart);
  48. hexCell.appendChild(middlePart);
  49. hexCell.appendChild(bottomPart);
  50. };
  51. };
  52. addHexDetails( honeyCells );
  53. renderImage( index );
  54. totalRenders++;
  55. removeHexs();
  56. }
  57. function addHexDetails( honeyCells ){
  58. setFilled( honeyCells, honeyCells.filled, "active" );
  59. if(honeyCells.touched){
  60. setFilled( honeyCells, honeyCells.touched, "touched" );
  61. }
  62. if(honeyCells.unit){
  63. setFilled( honeyCells, honeyCells.unit, "unitMember" );
  64. }
  65. }
  66. function removeHexs(){
  67. var honeyComb = document.getElementById("honeyComb");
  68. honeyComb.innerHTML = "";
  69. }
  70. function setFilled( honeyCells, cellsToCheck, className ){
  71. // honeyCells = jsonExample;
  72. var hexCells = document.getElementsByClassName("hex");
  73. for (var i = 0; i < cellsToCheck.length; i++) {
  74. var x = cellsToCheck[i].x;
  75. var y = cellsToCheck[i].y;
  76. var filledCell = ( y * honeyCells.width ) + x;
  77. var honeyCell = hexCells[ filledCell ];
  78. honeyCell.className += " "+className;
  79. };
  80. }
  81. function renderImage(index){
  82. html2canvas(document.getElementById("honeyComb")).then(function(canvas) {
  83. canvas.id = "rendered_"+index;
  84. canvas.className = "renderedCanvas";
  85. if(index == 0){
  86. canvas.className += " visible";
  87. }
  88. document.getElementById("renderedHoneyComb").appendChild(canvas);
  89. totalRenders--;
  90. if( totalRenders == 0){
  91. document.getElementById("controlBar").className += " visible";
  92. }
  93. });
  94. }
  95. function orderRenderedCanvas(){
  96. renders = [].slice.call(renders);
  97. renders.sort(function(a,b){
  98. if(a.id.split("_")[1] == 0){
  99. a.className += " visible";
  100. }
  101. if(a.id.split("_")[1] < b.id.split("_")[1] ){
  102. return -1;
  103. }
  104. });
  105. var container = document.getElementById("renderedHoneyComb");
  106. container.innerHTML = "";
  107. for (var i = 0; i < renders.length; i++) {
  108. container.appendChild(renders[i]);
  109. };
  110. // 17:43
  111. }
  112. function slideBack(){
  113. var actual = document.getElementById("renderedHoneyComb").getElementsByClassName("visible")[0];
  114. var actualId = actual.id.split("_")[1];
  115. if(actualId > 0){
  116. actualId--;
  117. actual.className = "renderedCanvas";
  118. document.getElementById("rendered_"+actualId).className += " visible";
  119. }
  120. }
  121. function slideForward(){
  122. var actual = document.getElementById("renderedHoneyComb").getElementsByClassName("visible")[0];
  123. var actualId = actual.id.split("_")[1];
  124. if(actualId < document.getElementsByClassName("renderedCanvas").length - 1){
  125. actualId++;
  126. actual.className = "renderedCanvas";
  127. document.getElementById("rendered_"+actualId).className += " visible";
  128. }
  129. }
  130. function hasClass(el, cls) {
  131. return el.className && new RegExp("(\\s|^)" + cls + "(\\s|$)").test(el.className);
  132. }
  133. function removeClass(ele,cls) {
  134. if (hasClass(ele,cls)) {
  135. var reg = new RegExp('(\\s|^)'+cls+'(\\s|$)');
  136. ele.className=ele.className.replace(reg,' ');
  137. }
  138. }
  139. function removeId(id) {
  140. return (elem=document.getElementById(id)).parentNode.removeChild(elem);
  141. }
  142. function toggleLeaderBoard(){
  143. var leaderBoard = document.getElementById("leaderBoard");
  144. if( hasClass(leaderBoard, "open")){
  145. removeClass(leaderBoard, "open");
  146. }else{
  147. leaderBoard.className += " open";
  148. }
  149. updateLeaderBoard()
  150. }
  151. function populateBoard(){
  152. var listBoard = document.getElementById("listBoard");
  153. var results = "";
  154. var rankings = data.data.rankings;
  155. var date = new Date();
  156. var seconds = date.getSeconds();
  157. var minutes = date.getMinutes();
  158. var hour = date.getHours();
  159. for (var i = rankings.length - 1; i >= 0; i--) {
  160. if( rankings[i].teamId == 235 ){
  161. results += "<p>Updated "+hour+"h "+minutes+"m "+seconds+"s</p>";
  162. results += "<h1>Cazziammolla Placement: "+rankings[i].rank+"</h1>";
  163. results += "<h2>with a score of: "+rankings[i].score+"</h2>";
  164. if (rankings[i].rank != points && points != 0){
  165. ringTheBell();
  166. }
  167. points = rankings[i].rank;
  168. }
  169. };
  170. var settings = data.data.settings;
  171. for (var i = 0; i < settings.length; i++) {
  172. for (var j = settings[i].rankings.length - 1; j >= 0; j--) {
  173. if(settings[i].rankings[j].teamId == 235){
  174. results += "<tr><td>"+i+"</td><td>"+j+"</td></tr>"
  175. }
  176. };
  177. };
  178. var results = "<table><thead><th>Setting</th><th>Placement</th></thead>"+results+"</table>";
  179. listBoard.innerHTML = results;
  180. }
  181. function updateLeaderBoard(){
  182. loadRankingJs('https://davar.icfpcontest.org/rankings.js?cachebuster='+ new Date().getTime());
  183. var intervalID = setInterval( function(){
  184. loadRankingJs('https://davar.icfpcontest.org/rankings.js?cachebuster='+ new Date().getTime());
  185. }, 30000);
  186. }
  187. function loadRankingJs(scriptName) {
  188. var rankingScript = document.getElementById("rankingScript");
  189. if ( rankingScript ){
  190. removeId("rankingScript");
  191. }
  192. var docHeadObj = document.getElementsByTagName("head")[0];
  193. var dynamicScript = document.createElement("script");
  194. dynamicScript.type = "text/javascript";
  195. dynamicScript.id = "rankingScript";
  196. dynamicScript.src = scriptName;
  197. dynamicScript.onload = function(){ populateBoard();};
  198. docHeadObj.appendChild(dynamicScript);
  199. return dynamicScript;
  200. }
  201. function ringTheBell(){
  202. document.getElementById("bell").play();
  203. }
  204. document.onkeydown = checkKey;
  205. function checkKey(e) {
  206. e = e || window.event;
  207. if ( document.getElementById("controlBar").className.indexOf("visible") != -1 ) {
  208. if (e.keyCode == '37') {
  209. slideBack();
  210. }else if(e.keyCode == '39') {
  211. slideForward();
  212. }
  213. }
  214. }
  215. // jsonExample = {"height":15,"width":15,"sourceSeeds":[0],"units":[{"members":[{"x":0,"y":0}],"pivot":{"x":0,"y":0}}],"id":1,"filled":[{"x":2,"y":4},{"x":3,"y":4},{"x":4,"y":4},{"x":5,"y":4},{"x":6,"y":4},{"x":11,"y":4},{"x":2,"y":5},{"x":8,"y":5},{"x":11,"y":5},{"x":2,"y":6},{"x":11,"y":6},{"x":2,"y":7},{"x":3,"y":7},{"x":4,"y":7},{"x":8,"y":7},{"x":11,"y":7},{"x":2,"y":8},{"x":9,"y":8},{"x":11,"y":8},{"x":2,"y":9},{"x":8,"y":9},{"x":2,"y":10},{"x":3,"y":10},{"x":4,"y":10},{"x":5,"y":10},{"x":6,"y":10},{"x":9,"y":10},{"x":11,"y":10}],"sourceLength":100};