Bigger Twitch

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

当前为 2014-10-22 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Bigger Twitch
  3. // @author Remos
  4. // @version 1.07
  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/
  11. // @exclude http://www.twitch.tv/*/profile
  12. // @exclude http://www.twitch.tv/settings
  13. // @exclude http://www.twitch.tv/settings/*
  14. // @exclude http://www.twitch.tv/*/chat?popout=
  15. // @exclude http://www.twitch.tv/*/popout
  16. // @exclude http://www.twitch.tv/*/dashboard
  17. // @exclude http://www.twitch.tv/inbox*
  18. // @exclude http://www.twitch.tv/subscriptions*
  19. // @exclude http://store.twitch.tv
  20. // @exclude http://api.twitch.tv/*
  21. // @exclude https://api.twitch.tv/*
  22. // @require http://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js
  23. // @grant GM_addStyle
  24. // @grant GM_getValue
  25. // @grant GM_setValue
  26. // @copyright 2014, Remos
  27. // @run-at document-end
  28. // @icon https://monkeyguts.com/icon/288.png
  29. // @namespace 41229d0298d2565bc814c34b46b9158b
  30. // ==/UserScript==
  31.  
  32. // Icons used from http://icomoon.io/
  33.  
  34. GM_addStyle("#left_col.bigttv { visibility: hidden !important; display: none; }");
  35. GM_addStyle("#main_col.bigttv { margin-left: 0px !important; }");
  36. GM_addStyle(".ember-view.ember-chat.bigttv { min-width: 0px !important; }");
  37. 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; }");
  38. GM_addStyle(".bigttv-button.bigttv-contract { background-image: url(data:image/png;base64,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); }");
  39. 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,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); }");
  40. GM_addStyle(".archive_site_player_container .bigttv-button { left: 265px }");
  41. GM_addStyle(".js-new-channel-ad { visibility: hidden !important; display: none; }");
  42.  
  43. GM_addStyle("#bigttv-settings { position: absolute; z-index: 999999; padding: 10px; background-color: #fff; width: 150px; height: 60px; position: absolute; top: 50%; left: 50%; margin-left: -86px; margin-top: -41px; border: 1px solid #777; border-radius: 5px; }");
  44. GM_addStyle("#bigttv-settings span { font-size: 11px; color: #555; }");
  45. GM_addStyle("#bigttv-chatwidth { width: 144px; font-size: 12px; padding: 2px; border: 1px solid #ccc; margin-bottom: 5px; border-radius: 2px; }");
  46. GM_addStyle("#bigttv-label { float: left; font-size: 10px; font-weight: normal; }");
  47. GM_addStyle("#bigttv-auto { position: relative; top: 3px; margin-right: 3px; }");
  48. GM_addStyle("#bigttv-settingsbutton { float: right; padding: 1px 10px; font-size: 12px; background-color: #5cb85c; border: 1px solid #4cae4c; color: #fff; }");
  49.  
  50. GM_addStyle("#channel.bigttv { padding: 0 }");
  51.  
  52. GM_addStyle(".target-player { position: relative; }");
  53.  
  54. var chatWidth = GM_getValue('chatwidth', 340);
  55.  
  56. var biggerttvEnabled = false;
  57. var selfTriggered = false;
  58. var currentPlayer;
  59.  
  60. function updateSizes(player) {
  61. player = (typeof player === 'undefined') ? currentPlayer : player;
  62.  
  63. var columnVisible = $('#right_col').is(':visible');
  64. if(biggerttvEnabled) {
  65. var windowWidth = $(window).width();
  66. var windowHeight = $(window).height();
  67. var playerWidth = windowWidth;
  68.  
  69. if(columnVisible)
  70. playerWidth = windowWidth - chatWidth;
  71.  
  72. //$('#player, .archive_site_player_container, .target-player').attr('style', 'height: ' + windowHeight + 'px !important; width: ' + playerWidth + 'px !important;');
  73. $(player).attr('style', 'height: ' + windowHeight + 'px !important; width: ' + playerWidth + 'px !important;');
  74. $('[id$=flash-player], #archive_site_player_flash').attr('style', 'height: 100% !important; width: 100% !important; visibility: inherit !important');
  75. if(columnVisible)
  76. $('#main_col').css('margin-right', chatWidth);
  77. else
  78. $('#main_col').css('margin-right', 0);
  79. $('#main_col').width('auto');
  80.  
  81. $('#right_col').width(chatWidth);
  82. $('#right_col').width(chatWidth);
  83. $('#right_nav').parent().width(chatWidth);
  84. $('#right_nav').width(chatWidth - 19);
  85. $('#chat').width(chatWidth);
  86. $('.js-new-channel-ad').width(chatWidth);
  87.  
  88. currentPlayer = player;
  89. } else {
  90. currentPlayer = null;
  91.  
  92. $(player).attr('style', '');
  93.  
  94. var resetChatWidth = 340;
  95. if(!columnVisible && !$('#right_col').hasClass('ember-view'))
  96. resetChatWidth = 0;
  97. $('#right_col').width(resetChatWidth);
  98. $('#chat').width(340);
  99. $('#main_col').css('margin-right', '');
  100.  
  101. selfTriggered = true;
  102. window.dispatchEvent(new Event('resize'));
  103. selfTriggered = false;
  104. }
  105. }
  106.  
  107. var safetyTimer;
  108.  
  109. function toggleBigger(enable, target) {
  110. if(typeof enable != 'boolean')
  111. enable = !biggerttvEnabled;
  112. biggerttvEnabled = enable;
  113.  
  114. var player = typeof target === 'undefined' ? $('#player, .archive_site_player_container, .target-player') : $(target).parent();
  115.  
  116. if(enable)
  117. safetyTimer = setTimeout(toggleBigger, 500, enable);
  118. else
  119. clearTimeout(safetyTimer);
  120.  
  121. $('#channel').toggleClass('bigttv', enable);
  122. $('#main_col').toggleClass('bigttv', enable);
  123. $('#left_col').toggleClass('bigttv', enable);
  124. $('.ember-view.ember-chat').toggleClass('bigttv', enable);
  125.  
  126. $(player).toggleClass('bigttv', enable);
  127. //$('#player, .archive_site_player_container').toggleClass('bigttv', enable);
  128.  
  129. $('.bigttv-button').toggleClass('bigttv-contract', enable);
  130.  
  131. updateSizes(player);
  132. }
  133.  
  134.  
  135. function createSettingsWindow() {
  136. var settingswindow = $(
  137. '<div id="bigttv-settings">' +
  138. '<span>Set chat width</span>' +
  139. '<form action="#"><input id="bigttv-chatwidth" type="number" min="0" step="1" />' +
  140. '<label id="bigttv-label"><input id="bigttv-auto" type="checkbox" />Auto-activate</label>' +
  141. '<input type="submit" id="bigttv-settingsbutton" value="Save"></form>' +
  142. '</div>'
  143. );
  144. $('body').prepend(settingswindow);
  145. $('#bigttv-settings').hide();
  146.  
  147. $('#bigttv-settings form').submit(function(e) {
  148. var newWidth = $('#bigttv-chatwidth').val();
  149. if($.isNumeric(newWidth)) {
  150. chatWidth = parseInt(newWidth);
  151. GM_setValue('chatwidth', chatWidth);
  152. updateSizes();
  153. }
  154. GM_setValue('autoactivate', $('#bigttv-auto').prop('checked'));
  155.  
  156. $('#bigttv-settings').hide();
  157.  
  158. e.preventDefault();
  159. return false;
  160. });
  161. }
  162.  
  163. function showSettingsWindow() {
  164. $('#bigttv-chatwidth').val(GM_getValue('chatwidth', 340));
  165. $('#bigttv-auto').prop('checked', GM_getValue('autoactivate', false));
  166.  
  167. $('#bigttv-settings').show();
  168. }
  169.  
  170. function createButton() {
  171. var button = $('<a title="Right click to set chat width." class="bigttv-button bigttv-expand"> </a>');
  172. button.unbind().click(function(e) {
  173. if(e.which == 1) {
  174. toggleBigger(null, e.target);
  175. return false;
  176. }
  177. }).on('contextmenu', function(e) {
  178. showSettingsWindow($(e.target).parent());
  179. return false;
  180. });
  181.  
  182. return button;
  183. }
  184.  
  185. $(createSettingsWindow);
  186.  
  187. if(GM_getValue('autoactivate', false)) {
  188. $(function() { toggleBigger(); });
  189. }
  190.  
  191. var resizeTimer;
  192. $(window).resize(function() {
  193. if(selfTriggered)
  194. return;
  195. clearTimeout(resizeTimer);
  196. resizeTimer = setTimeout(updateSizes, (typeof BTTVLOADED === 'undefined') ? 0 : 1500);
  197. });
  198.  
  199. function addButton(items) {
  200. items.each(function(index) {
  201. if($(this).has('.bigttv-button').length === 0)
  202. $(this).append(createButton());
  203. });
  204. }
  205.  
  206. $('#player, .archive_site_player_container, .target-player').ready(function() {
  207. addButton($('#player, .archive_site_player_container, .target-player'));
  208. });
  209.  
  210. waitForKeyElements('.target-player', addButton);
  211.  
  212. // ======================================
  213.  
  214. function waitForKeyElements ( selectorTxt, actionFunction, bWaitOnce, iframeSelector ) {
  215. var targetNodes, btargetsFound;
  216. if (typeof iframeSelector == "undefined")
  217. targetNodes = $(selectorTxt);
  218. else
  219. targetNodes = $(iframeSelector).contents ()
  220. .find (selectorTxt);
  221. if (targetNodes && targetNodes.length > 0) {
  222. btargetsFound = true;
  223.  
  224. targetNodes.each ( function () {
  225. var jThis = $(this);
  226. var alreadyFound = jThis.data ('alreadyFound') || false;
  227. if (!alreadyFound) {
  228. //--- Call the payload function.
  229. var cancelFound = actionFunction (jThis);
  230. if (cancelFound)
  231. btargetsFound = false;
  232. else
  233. jThis.data ('alreadyFound', true);
  234. }
  235. } );
  236. }
  237. else {
  238. btargetsFound = false;
  239. }
  240. var controlObj = waitForKeyElements.controlObj || {};
  241. var controlKey = selectorTxt.replace (/[^\w]/g, "_");
  242. var timeControl = controlObj [controlKey];
  243. if (btargetsFound && bWaitOnce && timeControl) {
  244. clearInterval (timeControl);
  245. delete controlObj [controlKey];
  246. }
  247. else {
  248. if ( ! timeControl) {
  249. timeControl = setInterval ( function () {
  250. waitForKeyElements( selectorTxt, actionFunction, bWaitOnce, iframeSelector );
  251. },
  252. 300
  253. );
  254. controlObj [controlKey] = timeControl;
  255. }
  256. }
  257. waitForKeyElements.controlObj = controlObj;
  258. }