A Twitch.tv viewer reward and games system.
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.

166 lines
6.9 KiB

11 years ago
  1. //-------- Realtime Chat --------
  2. (function ($) {
  3. var previous_chat = [], origin = window.location.origin;
  4. function get_chat() {
  5. $.ajax({
  6. url: origin + '/get/chat',
  7. success: function (data) {
  8. for (var key in data) {
  9. if (data.hasOwnProperty(key)) {
  10. if (data[key].id !== undefined || data[key].text !== undefined) {
  11. if (previous_chat.indexOf(data[key].id) < 0) {
  12. // add line id to array
  13. previous_chat.push(data[key].id);
  14. // separate words
  15. var data_split = data[key].text.split(' ');
  16. //-------- Raw IRC Module --------
  17. update_raw_irc_module(data_split);
  18. update_scrollbar();
  19. //-------- Auction Module --------
  20. update_auction_module(data_split);
  21. }
  22. }
  23. }
  24. }
  25. get_chat();
  26. },
  27. error: function (x, t) {
  28. if (t === 'timeout') {
  29. $('#chat_line_list').append('<li class="line jtv"><p><span class="chat_line">Server: Request timed out, trying to reconnect (server may be offline)</span></p></li>');
  30. update_scrollbar();
  31. }
  32. get_chat();
  33. }, dataType: "json", timeout: 30000
  34. });
  35. }
  36. // start "realtime" chat
  37. get_chat();
  38. function update_scrollbar () {
  39. // update scrollbar
  40. $('.chat-scroll').mCustomScrollbar("update");
  41. $('.chat-scroll').mCustomScrollbar("scrollTo","#chat_line_end");
  42. }
  43. function update_raw_irc_module (data) {
  44. // raw irc status colors
  45. switch(data[0]) {
  46. case 'SENT':
  47. data.splice(0, 1, '<span class="nick" style="color:dodgerblue">' + data[0] + '&nbsp;</span>');
  48. break;
  49. case 'RECV':
  50. data.splice(0, 1, '<span class="nick" style="color:red">' + data[0] + '&nbsp;</span>');
  51. break;
  52. }
  53. // raw irc message / server response colors
  54. if (data[3] === 'PRIVMSG') {
  55. var user = data[2].split('!');
  56. if (user.length > 1) {
  57. data.splice(2, 1, '<span style="color:blueviolet;font-style:italic;font-weight:bold">' + user[0].slice(1).charAt(0).toUpperCase() + user[0].slice(2).toLowerCase() + '</span>');
  58. } else {
  59. data.splice(2, 1, '<span style="color:blueviolet;font-style:italic;font-weight:bold">' + user + '</span>');
  60. }
  61. data.splice(3, 1, '<span style="color:blueviolet;font-style:italic;font-weight:bold">' + data[3] + '</span>');
  62. data.splice(4, 1, '<span style="color:#666;font-style:italic">' + data[4] + '</span>');
  63. data.splice(5, 1, data[5].slice(1));
  64. } else {
  65. for (var i = 2; i < data.length; i++) {
  66. if (i === 2) {
  67. data.splice(i, 1, '<span style="color:#666;font-style:italic">' + data[i]);
  68. } else if (i === data.length - 1) {
  69. data.splice(i, 1, data[i] + '</span>');
  70. }
  71. }
  72. }
  73. // add chat line to view
  74. if (data[3] !== '352') {
  75. $('#chat_line_list').append('<li class="line jtv"><p><span class="chat_line">' + data.join(' ') + '</span></p></li>');
  76. }
  77. // remove first chat line if over limit
  78. if (previous_chat.length > 200 && $('#chat_line_list li').length > 200) {
  79. $('#chat_line_list li').first().remove();
  80. previous_chat = previous_chat.slice(1);
  81. }
  82. }
  83. function update_auction_module (data) {
  84. var data_text = '';
  85. for (var i = 6; i < data.length; i++) {
  86. data_text += i !== data.length - 1 ? data[i] + ' ' : data[i];
  87. }
  88. // set auction info
  89. if (data_text === 'Auction opened, accepting bids') {
  90. $('.auction_status').css({'opacity':'1', 'background-position': '-230px -268px'}).text('Opened');
  91. $('#auction_highest_bid').html('').text('Status: ').append('<span style="color: blueviolet">Checking Bids...</span>');
  92. }
  93. if (data[6] + ' ' + data[7] === 'Highest bid,') {
  94. $('#auction_highest_bid').html('').text('Highest Bid: ').append('<span style="color: blueviolet">' + data[8] + ' @ ' + data[10] + '</span>');
  95. }
  96. if (data[6] + ' ' + data[7] + ' ' + data[8] == 'Auction closed, Winner:') {
  97. $('.auction_status').css({'opacity': '.2', 'background-position': '-160px -268px'}).text('Closed');
  98. $('#auction_highest_bid').html('').text('Winner: ').append('<span style="color: blueviolet">' + data[9] + ' @ ' + data[11] + '</span>');
  99. }
  100. if (data_text === 'Auction closed, no bidders to pick a winner') {
  101. $('.auction_status').css({'opacity': '.2', 'background-position': '-160px -268px'}).text('Closed');
  102. $('#auction_highest_bid').html('').text('Status: ').append('<span style="color: blueviolet">Closed</span>');
  103. }
  104. }
  105. })(jQuery);
  106. //-------- Scrollbars --------
  107. (function ($) {
  108. $(document).ready(function () {
  109. $('.auction-scroll').mCustomScrollbar({
  110. scrollInertia:0,
  111. advanced:{
  112. updateOnContentResize: true
  113. }
  114. });
  115. $('.chat-scroll').mCustomScrollbar({
  116. scrollInertia:0,
  117. advanced:{
  118. updateOnContentResize: true
  119. }
  120. });
  121. });
  122. })(jQuery);
  123. //-------- Form Actions --------
  124. (function ($) {
  125. $(document).ready(function () {
  126. // reconnect to irc
  127. $('#irc_reconnect').submit(function (e) {
  128. e.preventDefault();
  129. $.ajax({
  130. type: 'POST',
  131. url: window.location.origin + '/actions',
  132. data: {_method: 'reconnect', auth_token: $(this).find('input[name="authenticity_token"]').val()}
  133. });
  134. });
  135. // open / close auction
  136. $('#auction_open').submit(function (e) {
  137. e.preventDefault();
  138. $.ajax({
  139. type: 'POST',
  140. url: window.location.origin + '/actions',
  141. data: {_method: 'auction_open', auth_token: $(this).find('input[name="authenticity_token"]').val(), user: $(this).find('input[name="user"]').val()}
  142. });
  143. });
  144. $('#auction_close').submit(function (e) {
  145. e.preventDefault();
  146. $.ajax({
  147. type: 'POST',
  148. url: window.location.origin + '/actions',
  149. data: {_method: 'auction_close', auth_token: $(this).find('input[name="authenticity_token"]').val(), user: $(this).find('input[name="user"]').val()}
  150. });
  151. });
  152. });
  153. })(jQuery);