YouTube - Always Theater Mode

Set the default viewing mode to Theater Mode.

As of 2015-08-04. See the latest version.

// ==UserScript==
// @name        YouTube - Always Theater Mode
// @namespace   r-a-y/youtube/theater
// @description Set the default viewing mode to Theater Mode.
// @include     http://www.youtube.com/watch*
// @include     https://www.youtube.com/watch*
// @version     1.3.1
// @run-at      document-start
// @grant       none
// @license     GPL v3
// ==/UserScript==

// Ensure unsafeWindow object is available both in firefox and chrome
//
// Props Anon via YouTube Cinema Mode userscript
// https://greasyfork.org/en/scripts/10417-youtube-cinema-mode
function installUnsafewindowPolyfill()
{
	if (typeof unsafeWindow === 'undefined')
	{
		if (typeof XPCNativeWrapper === 'function' && typeof XPCNativeWrapper.unwrap === 'function')
			unsafeWindow = XPCNativeWrapper.unwrap(window);
		else if (window.wrappedJSObject)
			unsafeWindow = window.wrappedJSObject;
	}
}

// Disable SPF (Structured Page Fragments), which prevents properly attaching to page load events when navigation occurs 
// Will also disable the red loading bar.
//
// Props Anon via YouTube Cinema Mode userscript
// https://greasyfork.org/en/scripts/10417-youtube-cinema-mode
function disableSPF()
{
	if (unsafeWindow._spf_state && unsafeWindow._spf_state.config)
	{
		unsafeWindow._spf_state.config['navigate-limit'] = 0;
		unsafeWindow._spf_state.config['navigate-part-received-callback'] = function (targetUrl) { location.href = targetUrl; }
	}
	
	setTimeout(disableSPF, 50);
}

// flash + html5 requires manually resizing the stage
function resizeStage() {
	document.getElementById('page').className = "watch watch-stage-mode";
	document.getElementById('player').className = "content-alignment watch-medium";
	document.getElementById('watch7-container').className = "watch-wide";

	// handle playlists
	var playlist = document.getElementById('watch-appbar-playlist');
	if (playlist) {
		playlist.setAttribute('style', 'top:520px');
	}
}

// html5 requires other tomfoolery
function html5() {
	var video = document.querySelector('video');
	if (video) {
		document.querySelector('.html5-video-content').setAttribute('style', 'width:100% !important; height:100% !important;');
		document.querySelector('.html5-video-container').setAttribute('style', 'position:static');

		var button = document.querySelector('.ytp-size-toggle-large');
		// new html5 player
		if ( ! button ) {
			button = document.querySelector('.ytp-size-button');
		}

		// emulate clicking on the "Theater Mode" button for HTML5 progressbar to expand
		button.click();
	}
}

/** TIME FOR SOME ACTION! **/

// get rid of SPF
installUnsafewindowPolyfill();
disableSPF();

// resize after document is loaded
window.addEventListener ("load", function() {
    resizeStage();
    html5();
});