Bigger Twitch

Removes the left nav bar entirely and stretches the twitch player to use as much space as possible.

当前为 2014-08-17 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Bigger Twitch
  3. // @author Remos
  4. // @version 1.03
  5. // @description Removes the left nav bar entirely and stretches the twitch player to use as much space as possible.
  6. // @include http://*.twitch.tv/*
  7. // @include http://twitch.tv/*
  8. // @include http://*.twitch.tv/*/c/*
  9. // @include http://*.twitch.tv/*/b/*
  10. // @exclude http://www.twitch.tv/*/chat?popout=
  11. // @exclude http://www.twitch.tv/*/popout
  12. // @exclude http://www.twitch.tv/*/dashboard
  13. // @exclude http://www.twitch.tv/inbox*
  14. // @exclude http://www.twitch.tv/subscriptions*
  15. // @exclude http://store.twitch.tv
  16. // @exclude http://api.twitch.tv/*
  17. // @exclude https://api.twitch.tv/*
  18. // @require http://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js
  19. // @grant GM_addStyle
  20. // @grant GM_getValue
  21. // @grant GM_setValue
  22. // @copyright 2014, Remos
  23. // @run-at document-end
  24. // @icon https://monkeyguts.com/icon/288.png
  25. // @namespace 41229d0298d2565bc814c34b46b9158b
  26. // ==/UserScript==
  27.  
  28. // Icons used from http://icomoon.io/
  29.  
  30. GM_addStyle("#left_col.bigttv { visibility: hidden !important; }");
  31. GM_addStyle("#main_col.bigttv { margin-left: 0px !important; }");
  32. GM_addStyle(".ember-view.ember-chat.bigttv { min-width: 0px !important; }");
  33. GM_addStyle(".player-column #player.bigttv, .archive_site_player_container.bigttv, .target-player.bigttv { position: fixed !important; top: 0px !important; left: 0px !important; z-index: 99999; }");
  34. GM_addStyle(".bigttv-button.bigttv-contract { background-image: url(data:image/png;base64,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); }");
  35. GM_addStyle(".bigttv-button { cursor: pointer; position: absolute; bottom: 0px; left: 160px; padding: 3px; width: 21px; height: 21px; background-repeat: no-repeat; background-position: 3px; background-size: 18px; background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAAAWhJREFUeNqklDFrwkAUx/+Kh5n10eLQr9AlYN06OAguhQ6pcW/J4nIgnUIHHToEEyFDFisUFCu0oyAUoZsd/BCdWkqEjhaH65KI2oOe9cFxHO/ej/fe/90loG4n0cpJfNOUIkQjokqj0ahms9mDbadhGLdJRdAiDMOBbdv9+Xz+KbuQ3KG01zAMB47jPO4LyhNRpV6vn+8DOiIis9lsmplM5nC5XH4HQbBRpiqoUKvVijGk1Wr1J5PJ/VrP3rFDRm673X7Tdf0OQCkeCSJyo7FQtmMAV9G+MRpCiNUhJwm6lAT9MiEEYlBpK908Ebme58VlnKqCbnq93iKGEZEbBMHHcDgU3W73C8C1CigFQGOMpTnnZqfTSRuGsVLH9/0nAFOVBq7eGmNMsyyrCgCxxLPZ7AHAiwpIOkej0eg5goxVJZWCyuVyUdf1izUB/gdijGmcczOC5VRACQBnAAqyryNq9Pgv1QDgZwBXX5PHDyQ49AAAAABJRU5ErkJggg==); }");
  36. GM_addStyle(".js-new-channel-ad { visibility: hidden !important; }");
  37.  
  38. GM_addStyle("#channel.bigttv { padding: 0 }");
  39.  
  40. GM_addStyle(".target-player { position: relative; }");
  41.  
  42. var chatWidth = GM_getValue('chatwidth', 340);
  43.  
  44. var buttonClickNum = 2;
  45. var buttonTitle = "Middle click to set chat width."; // Chrome doesn't like us using right click.
  46. if(navigator.userAgent.toLowerCase().indexOf('firefox') != -1) { // Firefox doesn't like letting us use middle click.
  47. buttonTitle = "Right click to set chat width.";
  48. buttonClickNum = 3;
  49. }
  50.  
  51. var biggerttvEnabled = false;
  52. var selfTriggered = false;
  53.  
  54. function updateSizes(target) {
  55. var columnVisible = $('#right_col').is(':visible');
  56. if(biggerttvEnabled) {
  57. var windowWidth = $(window).width();
  58. var windowHeight = $(window).height();
  59. var playerWidth = windowWidth;
  60.  
  61. if(columnVisible)
  62. playerWidth = windowWidth - chatWidth;
  63.  
  64. //$('#player, .archive_site_player_container, .target-player').attr('style', 'height: ' + windowHeight + 'px !important; width: ' + playerWidth + 'px !important;');
  65. $(target).parent().attr('style', 'height: ' + windowHeight + 'px !important; width: ' + playerWidth + 'px !important;');
  66. $('[id$=flash-player], #archive_site_player_flash').attr('style', 'height: 100% !important; width: 100% !important; visibility: inherit !important');
  67. if(columnVisible)
  68. $('#main_col').css('margin-right', chatWidth);
  69. else
  70. $('#main_col').css('margin-right', 0);
  71. $('#main_col').width('auto');
  72.  
  73. $('#right_col').width(chatWidth);
  74. $('#right_col').width(chatWidth);
  75. $('#right_nav').parent().width(chatWidth);
  76. $('#right_nav').width(chatWidth - 19);
  77. $('#chat').width(chatWidth);
  78. $('.js-new-channel-ad').width(chatWidth);
  79. } else {
  80. $('#player, .archive_site_player_container, .target-player').attr('style', '');
  81.  
  82. var resetChatWidth = 340;
  83. if(!columnVisible && !$('#right_col').hasClass('ember-view'))
  84. resetChatWidth = 0;
  85. $('#right_col').width(resetChatWidth);
  86. $('#chat').width(340);
  87. $('#main_col').css('margin-right', '');
  88.  
  89. selfTriggered = true;
  90. window.dispatchEvent(new Event('resize'));
  91. selfTriggered = false;
  92. }
  93. }
  94.  
  95. function toggleBigger(enable, target) {
  96. if(typeof enable != 'boolean')
  97. enable = !biggerttvEnabled;
  98. biggerttvEnabled = enable;
  99.  
  100. $('#channel').toggleClass('bigttv', enable);
  101. $('#main_col').toggleClass('bigttv', enable);
  102. $('#left_col').toggleClass('bigttv', enable);
  103. $('.ember-view.ember-chat').toggleClass('bigttv', enable);
  104.  
  105. $(target).parent().toggleClass('bigttv', enable);
  106. //$('#player, .archive_site_player_container').toggleClass('bigttv', enable);
  107.  
  108. $('.bigttv-button').toggleClass('bigttv-contract', enable);
  109.  
  110. updateSizes(target);
  111. }
  112.  
  113. function createButton() {
  114. var button = $('<a title="' + buttonTitle + '" class="bigttv-button bigttv-expand"> </a>');
  115. button.unbind().click(function(e) {
  116. if(e.which == 1) {
  117. toggleBigger(null, e.target);
  118. return false;
  119. }
  120. }).mousedown(function(e) {
  121. if(e.which == buttonClickNum) {
  122. var newWidth = window.prompt("Enter new chat width:", GM_getValue('chatwidth', 340));
  123. if($.isNumeric(newWidth)) {
  124. chatWidth = parseInt(newWidth);
  125. GM_setValue('chatwidth', chatWidth);
  126. updateSizes();
  127. }
  128.  
  129. return false;
  130. }
  131. });
  132.  
  133. return button;
  134. }
  135.  
  136. var resizeTimer;
  137. $(window).resize(function() {
  138. if(selfTriggered)
  139. return;
  140. clearTimeout(resizeTimer);
  141. resizeTimer = setTimeout(updateSizes, (typeof BTTVLOADED === 'undefined') ? 0 : 1500);
  142. });
  143.  
  144. function addButton(items) {
  145. items.each(function(index) {
  146. if($(this).has('.bigttv-button').length == 0)
  147. $(this).append(createButton());
  148. });
  149. }
  150.  
  151. $('#player, .archive_site_player_container, .target-player').ready(function() {
  152. addButton($('#player, .archive_site_player_container, .target-player'))
  153. });
  154.  
  155. waitForKeyElements('.target-player', addButton);
  156.  
  157. unsafeWindow.bigbutton = createButton;
  158.  
  159.  
  160.  
  161. function waitForKeyElements (
  162. selectorTxt, /* Required: The jQuery selector string that
  163. specifies the desired element(s).
  164. */
  165. actionFunction, /* Required: The code to run when elements are
  166. found. It is passed a jNode to the matched
  167. element.
  168. */
  169. bWaitOnce, /* Optional: If false, will continue to scan for
  170. new elements even after the first match is
  171. found.
  172. */
  173. iframeSelector /* Optional: If set, identifies the iframe to
  174. search.
  175. */
  176. ) {
  177. var targetNodes, btargetsFound;
  178. if (typeof iframeSelector == "undefined")
  179. targetNodes = $(selectorTxt);
  180. else
  181. targetNodes = $(iframeSelector).contents ()
  182. .find (selectorTxt);
  183. if (targetNodes && targetNodes.length > 0) {
  184. btargetsFound = true;
  185. /*--- Found target node(s). Go through each and act if they
  186. are new.
  187. */
  188. targetNodes.each ( function () {
  189. var jThis = $(this);
  190. var alreadyFound = jThis.data ('alreadyFound') || false;
  191. if (!alreadyFound) {
  192. //--- Call the payload function.
  193. var cancelFound = actionFunction (jThis);
  194. if (cancelFound)
  195. btargetsFound = false;
  196. else
  197. jThis.data ('alreadyFound', true);
  198. }
  199. } );
  200. }
  201. else {
  202. btargetsFound = false;
  203. }
  204. //--- Get the timer-control variable for this selector.
  205. var controlObj = waitForKeyElements.controlObj || {};
  206. var controlKey = selectorTxt.replace (/[^\w]/g, "_");
  207. var timeControl = controlObj [controlKey];
  208. //--- Now set or clear the timer as appropriate.
  209. if (btargetsFound && bWaitOnce && timeControl) {
  210. //--- The only condition where we need to clear the timer.
  211. clearInterval (timeControl);
  212. delete controlObj [controlKey]
  213. }
  214. else {
  215. //--- Set a timer, if needed.
  216. if ( ! timeControl) {
  217. timeControl = setInterval ( function () {
  218. waitForKeyElements ( selectorTxt,
  219. actionFunction,
  220. bWaitOnce,
  221. iframeSelector
  222. );
  223. },
  224. 300
  225. );
  226. controlObj [controlKey] = timeControl;
  227. }
  228. }
  229. waitForKeyElements.controlObj = controlObj;
  230. }