Advertisement
Guest User

Untitled

a guest
Jun 11th, 2016
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.31 KB | None | 0 0
  1. window.onload = function () {
  2. var user = null;
  3. var booth = null;
  4. var findBooths = null;
  5. var joining = null;
  6. var socket = io();
  7.  
  8. window.onbeforeunload = function (event) {
  9. var index = booth.pool.users.indexOf(user);
  10. if (user) {
  11. socket.emit('deleteUser', {'booth':booth, 'user':user});
  12. }
  13. }
  14.  
  15. socket.connect("http://localhost:3001/socket.io.js");
  16. socket.on('boothCreated', function (obj) {
  17. booth = obj.booth;
  18. socket.emit('cueEvent', {'ytLink':null, 'user':user, 'booth':booth});
  19. if (obj.openOrInvite) {
  20. socket.emit('triggerUpdateBoothListing', {});
  21. }
  22. generatePool(true);
  23.  
  24. var tag = document.createElement('script');
  25. tag.src = "https://www.youtube.com/iframe_api";
  26. var firstScriptTag = document.getElementsByTagName('script')[0];
  27. firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
  28. });
  29.  
  30. socket.on('updateBoothListing', function (obj) {
  31. if (document.getElementById('booth-list-container').style.display == "inline") {
  32. submitFind();
  33. }
  34. });
  35.  
  36. socket.on('generateList', function (obj) {
  37. var html = "";
  38. for (booth in obj.booths) {
  39. var creator = obj.booths[booth].booth.creator;
  40. html += "<tr id='creator-"+creator+"' class='boothLink' ><td class='left-cell'>"+creator+"</td><td class='right-cell'>"+obj.booths[booth].currentSong+"</td></tr>";
  41. }
  42. document.getElementById('list2').innerHTML = html;
  43.  
  44. var liveBooths = document.getElementsByClassName('boothLink');
  45. for (var i=0; i<liveBooths.length; i++) {
  46. document.getElementById(liveBooths[i].id).onclick = function () {
  47. var id = this.id.split('-')[1];
  48. document.getElementById('filter').style.display = "inline";
  49. document.getElementById('new-user-prompt').style.display = "inline";
  50. document.getElementById('submit-new-user').onclick = function () {
  51. submitNewUser(id, obj);
  52. }
  53. document.getElementById('new-user-prompt').onkeydown = function (e) {
  54. if (e.keyCode === 13) { submitNewUser(id, obj); }
  55. }
  56. }
  57. }
  58. });
  59.  
  60. socket.on('nameValid', function (obj) {
  61. validatedSubmitCreate(true, obj);
  62. });
  63.  
  64. socket.on('nameTaken', function (obj) {
  65. alert("that name is already taken -- try a different one.");
  66. });
  67.  
  68. socket.on('songCued', function (obj) {
  69. if (obj.booth.creator == booth.creator) {
  70. booth = obj.booth;
  71. cycleDJHighlight();
  72. generateCue(false, obj.replace);
  73. generateCueButton();
  74.  
  75. if (obj.replace) {
  76. player.loadVideoById(booth.cue.list[0].id);
  77. }
  78. }
  79. });
  80.  
  81. socket.on('songError', function (obj) {
  82. alert("There was an error loading the song you chose -- make sure it is a working YouTube link.");
  83. generateCueButton();
  84. });
  85.  
  86. socket.on('userDeleted', function (obj) {
  87. if (booth.creator == obj.booth.creator) {
  88. booth = obj.booth;
  89. generatePool(true);
  90. cycleDJHighlight();
  91. generateCueButton();
  92. }
  93. });
  94.  
  95. socket.on('userJoined', function (obj) {
  96. if (!user && joining) {
  97. joining = false;
  98. booth = obj.booth;
  99. user = obj.newUser;
  100. if (obj.buildplayer) {
  101. var tag = document.createelement('script');
  102. tag.src = "https://www.youtube.com/iframe_api";
  103. var firstscripttag = document.getelementsbytagname('script')[0];
  104. firstscripttag.parentnode.insertbefore(tag, firstscripttag);
  105. }
  106. }
  107. if (obj.booth.creator == booth.creator) {
  108. booth = obj.booth;
  109. generatePool(obj.firstTime);
  110. if (obj.firstTime) {
  111. cycleDJHighlight();
  112. generateCue(obj.firstTime, false);
  113. }
  114. document.getElementById('booth-list-container').style.display = "none";
  115. document.getElementById('booth-container').style.display = 'inline';
  116. document.getElementsByTagName('h2')[0].innerHTML = booth.creator+"'s Booth";
  117. }
  118. });
  119.  
  120. socket.on('userJoinError', function (obj) {
  121. alert("A user with that name has already joined this booth -- try a different name.");
  122. });
  123.  
  124. function submitCreate() {
  125. var openOrInvite = document.querySelector('input[name="invite"]:checked').value;
  126. var creator = document.getElementById('booth-creator').value;
  127.  
  128. function creatorIsValid(creator, callback) {
  129. if (creator == "") {
  130. alert("You must enter a name for the booth creator.");
  131. callback(false);
  132. } else {
  133. socket.emit('checkCreator', {'creator': creator,
  134. 'openOrInvite': openOrInvite});
  135. }
  136. }
  137. creatorIsValid(creator, validatedSubmitCreate);
  138. }
  139.  
  140. function validatedSubmitCreate(isValid, obj) {
  141. user = obj.creator;
  142. socket.emit('createEvent', obj);
  143.  
  144. document.getElementById('home-container').style.display = "none";
  145. document.getElementById('create-booth-options').style.display = "none";
  146. document.getElementById('filter').style.display = "none";
  147. document.getElementById('booth-container').style.display = 'inline';
  148. document.getElementsByTagName('h2')[0].innerHTML = obj.creator+"'s Booth";
  149.  
  150. var inviteButtonHTML = "<td class='button-cell'><button id='invite-button' type='button'>Invite a DJ</button></td>";
  151. document.getElementById('invite-button-row').innerHTML = inviteButtonHTML;
  152. document.getElementById('invite-button').onclick = function () {
  153. document.getElementById('invite-container').style.display = "inline";
  154. }
  155. }
  156.  
  157. function submitFind() {
  158. socket.emit('findEvent', {});
  159.  
  160. document.getElementById('home-container').style.display = "none";
  161. document.getElementById('filter').style.display = "none";
  162. document.getElementById('booth-list-container').style.display = 'inline';
  163. }
  164.  
  165. function submitNewUser(id, obj) {
  166. var newUser = document.getElementById('new-user').value;
  167. if (newUser) {
  168. var buildPlayer = document.querySelector('input[name="player"]:checked').value;
  169. joining = true;
  170. socket.emit('poolUpdate', {'booth': obj.booths[id].booth, 'newUser': newUser, 'buildPlayer': buildPlayer});
  171. document.getElementById('new-user-prompt').style.display = "none";
  172. document.getElementById('filter').style.display = "none";
  173. } else {
  174. alert("You must enter a username.");
  175. document.getElementById('submit-new-user').removeAttribute("onclick");
  176. document.getElementById('new-user-prompt').removeAttribute("onkeydown");
  177. }
  178. }
  179.  
  180. function submitInvite() {
  181. document.getElementById('invite-container').style.display = "none";
  182. socket.emit('emailEvent', {});
  183. }
  184.  
  185. function cycleDJHighlight() {
  186. var indexPrev = booth.pool.users.indexOf(booth.pool.nextUser)-1;
  187. if (indexPrev >= 0) {
  188. var prevUser = booth.pool.users[indexPrev];
  189. } else {
  190. var prevUser = booth.pool.users[booth.pool.users.length-1];
  191. }
  192. document.getElementById('pool-'+prevUser).style.backgroundColor = "rgb(200,200,200)";
  193. document.getElementById('pool-'+booth.pool.nextUser).style.backgroundColor = "#66ff66";
  194. }
  195.  
  196. function generateCue(firstTime, replace) {
  197. if (firstTime) {
  198. var html = "";
  199. for (var i=booth.cue.list.length-1; i>=0; i--) {
  200. html += "<tr><td class='left-cell'>"+booth.cue.list[i].user+"</td><td class='right-cell'>"+booth.cue.list[i].song+"</td></tr>";
  201. }
  202. document.getElementById('cue2').insertAdjacentHTML('beforeend', html);
  203. } else {
  204. if (replace) {
  205. document.getElementById('cue2').innerHTML = "";
  206. }
  207. var html = "";
  208. var html = "<tr><td class='left-cell' class='track-listing'>"+booth.cue.list[0].user+"</td><td class='right-cell' class='track-listing'>"+booth.cue.list[0].song+"</td></tr>";
  209. document.getElementById('cue2').insertAdjacentHTML('beforeend', html);
  210. }
  211. }
  212.  
  213. function generateCueButton() {
  214. if (user == booth.pool.nextUser) {
  215. var html = "<td class='button-cell'><button id='cue-button' type='button'>It's your turn to choose a song!</button></td>";
  216. document.getElementById('cue-button-row').innerHTML = html;
  217. document.getElementById('cue-button').onclick = function () {
  218. document.getElementById('link-container').style.display = 'inline';
  219. document.getElementById('linkInput').value = "";
  220. }
  221. }
  222. }
  223.  
  224. function generatePool(firstTime) {
  225. if (firstTime) {
  226. document.getElementById('pool2').innerHTML = "";
  227. var html = "";
  228. for (var i=0; i<booth.pool.users.length; i++) {
  229. html += "<tr><td id='pool-"+booth.pool.users[i]+"' class='pool-dj'>"+booth.pool.users[i]+"</td></tr>";
  230. }
  231. document.getElementById('pool2').insertAdjacentHTML('beforeend', html);
  232. } else {
  233. var html = "<tr><td id='pool-"+booth.pool.users[booth.pool.users.length-1]+"' class='pool-dj'>"+booth.pool.users[booth.pool.users.length-1]+"</td></tr>";
  234. document.getElementById('pool2').insertAdjacentHTML('beforeend', html);
  235. }
  236. }
  237.  
  238. function submitCue() {
  239. var link = document.getElementById('linkInput').value;
  240. if (link) {
  241. socket.emit('cueEvent', {'ytLink':link, 'user':user, 'booth':booth});
  242. document.getElementById('cue-button-row').innerHTML = "";
  243. } else {
  244. alert("First paste a YouTube link to the song you want to cue.");
  245. }
  246. document.getElementById('link-container').style.display = 'none';
  247. }
  248.  
  249. // On FIND-BOOTH submission, sends user selection to server via socket,
  250. // hides OPTIONS-CONTAINER and displays BOOTH-LIST-CONTAINER
  251. document.getElementById('find-booth').onclick = function() { submitFind(); }
  252.  
  253.  
  254. // Shows CREATE-BOOTH options before displaying BOOTH-CONTAINER
  255. document.getElementById('create-booth').onclick = function () {
  256. document.getElementById('create-booth-options').style.display = "inline-block";
  257. document.getElementById('filter').style.display = "inline";
  258. }
  259.  
  260. // Maps an `onclick` event to a close button in each *-BOOTH options
  261. // to uncheck all options that may have been checked
  262. var closeButtons = document.getElementsByClassName('close-button');
  263. for (var i=0; i<closeButtons.length; i++) {
  264. closeButtons[i].onclick = function () {
  265. var radioButtons = document.getElementsByTagName('input');
  266. for (var j=0; j<radioButtons.length; j++)
  267. radioButtons[j].checked = false;
  268. document.getElementById('create-booth-options').style.display = "none";
  269. document.getElementById('invite-container').style.display = "none";
  270. document.getElementById('link-container').style.display = "none";
  271. document.getElementById('new-user-prompt').style.display = "none";
  272. document.getElementById('filter').style.display = "none";
  273. }
  274. }
  275.  
  276. // On CREATE-BOOTH submission, sends user selections to server via socket,
  277. // hides OPTIONS-CONTAINER and displays BOOTH-CONTAINER
  278. document.getElementById('submit-create').onclick = function() { submitCreate(); }
  279. document.getElementById('create-booth-options').onkeydown = function (e) {
  280. if (e.keyCode === 13) { submitCreate(); }
  281. }
  282.  
  283. document.getElementById('submit-cue').onclick = function () { submitCue(); }
  284. document.getElementById('link-container').onkeydown = function (e) {
  285. if (e.keyCode === 13) { submitCue(); }
  286. }
  287.  
  288. document.getElementById('submit-invite').onclick = function () { submitInvite(); }
  289. document.getElementById('invite-container').onkeydown = function (e) {
  290. if (e.keyCode === 13) { submitInvite(); }
  291. }
  292. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement