SHOW:
|
|
- or go back to the newest paste.
| 1 | // ==UserScript== | |
| 2 | // @name YouTube HD Lite (HanFox fix) | |
| 3 | // @namespace http://userscripts.org/users/78916 | |
| 4 | // @description Automatically plays the best quality YouTube video format and removes ads, plus several optional features | |
| 5 | // @include http://www.youtube.com/watch* | |
| 6 | // @version 2012-01-26 | |
| 7 | // ==/UserScript== | |
| 8 | ||
| 9 | // Optional Features | |
| 10 | var use1080p = true, | |
| 11 | use720p = true, | |
| 12 | wideVideo = true, | |
| 13 | hideAnnotations = false, | |
| 14 | scrollToVideo = true, | |
| 15 | autoPlay = true, | |
| 16 | hideControls = true; | |
| 17 | ||
| 18 | ||
| 19 | // for console debug messages | |
| 20 | var debug = false; | |
| 21 | ||
| 22 | ||
| 23 | // ensure proper Youtube URL | |
| 24 | if ( location.href.search( "watch#!" ) != -1 ) {
| |
| 25 | var url = location.href.split( "watch#!" ); | |
| 26 | url = url[0] + "watch?" + url[1]; | |
| 27 | window.open( url, "_self" ); | |
| 28 | } | |
| 29 | ||
| 30 | ||
| 31 | if ( scrollToVideo ) {
| |
| 32 | document.getElementById( "watch-headline-title" ).scrollIntoView( true ); | |
| 33 | } | |
| 34 | ||
| 35 | if ( wideVideo ) {
| |
| 36 | // sidebar must be moved down | |
| 37 | var A = document.getElementById( "content" ); | |
| 38 | if ( A.className.indexOf( "watch-wide" ) == -1 ) {
| |
| 39 | A.className += " watch-wide"; | |
| 40 | } | |
| 41 | // video | |
| 42 | A = document.getElementById( "watch-video" ); | |
| 43 | if ( A.className.indexOf( "wide" ) == -1 ) {
| |
| 44 | A.className += " wide"; | |
| 45 | } | |
| 46 | } | |
| 47 | ||
| 48 | ||
| 49 | var player = document.getElementById( "movie_player" ), | |
| 50 | myPlayer = player.cloneNode( true ), | |
| 51 | //config = unsafeWindow.yt.getConfig( "PLAYER_CONFIG" ), | |
| 52 | flashvars = myPlayer.getAttribute( "flashvars" ); | |
| 53 | ||
| 54 | if ( debug ) GM_log( "flashvars unmodified: " + flashvars ); | |
| 55 | ||
| 56 | ||
| 57 | function setFlashvar( field, newVal ) | |
| 58 | {
| |
| 59 | var delimited = "&" + field; | |
| 60 | if ( flashvars.indexOf( delimited ) == -1 ) {
| |
| 61 | // field not found, so append it | |
| 62 | flashvars += delimited + "=" + newVal; | |
| 63 | } | |
| 64 | else {
| |
| 65 | // modify existing field | |
| 66 | var tmp = flashvars.split( delimited ); | |
| 67 | var tmp2 = tmp[1].indexOf( "&" ); | |
| 68 | if ( tmp2 != -1 ) {
| |
| 69 | flashvars = tmp[0] + delimited + "=" + newVal + tmp[1].substr( tmp2 ); | |
| 70 | } | |
| 71 | else {
| |
| 72 | flashvars = tmp[0] + delimited + "=" + newVal; | |
| 73 | } | |
| 74 | } | |
| 75 | } | |
| 76 | ||
| 77 | ||
| 78 | /********************************************** | |
| 79 | // 2010.12.22 list of video formats | |
| 80 | // fmt=5 240p vq=small flv | |
| 81 | // fmt=18 240p or 360p vq=medium mp4 | |
| 82 | // fmt=34 240p or 360p vq=medium flv | |
| 83 | // fmt=35 480p vq=large flv | |
| 84 | // fmt=22 720p vq=hd720 mp4 | |
| 85 | // fmt=37 1080p vq=hd1080 mp4 | |
| 86 | ***********************************************/ | |
| 87 | ||
| 88 | - | var split = flashvars.split("&");
|
| 88 | + | |
| 89 | var end = flashvars.indexOf("&", start);
| |
| 90 | var len = end - start; | |
| 91 | var fmt_list = flashvars.substr(start, len); | |
| 92 | ||
| 93 | if ( debug ) GM_log( " fmt_list: " + fmt_list ); | |
| 94 | ||
| 95 | // now must set the "vq" var so that the proper format is loaded | |
| 96 | //if ( use1080p && ( fmt_list.search( /37(\/[^,]+){4}/ ) != -1 )) {
| |
| 97 | if ( use1080p && ( fmt_list.search("37%2F") != -1 )) {
| |
| 98 | - | if ( use720p && ( fmt_list.search("37%2F") != -1 )) {
|
| 98 | + | |
| 99 | } | |
| 100 | //else if ( use720p && ( fmt_list.search( /22(\/[^,]+){4}/ ) != -1 )) {
| |
| 101 | else if ( use720p && ( fmt_list.search("22%2F") != -1 )) {
| |
| 102 | setFlashvar( "vq", "hd720" ); | |
| 103 | } | |
| 104 | //else if ( fmt_list.search( /35(\/[^,]+){4}/ ) != -1 ) {
| |
| 105 | else if ( fmt_list.search("35%2F") != -1 ) {
| |
| 106 | - | else if ( use720p && ( fmt_list.search("35%2F") != -1 )) {
|
| 106 | + | |
| 107 | } | |
| 108 | else {
| |
| 109 | setFlashvar( "vq", "medium" ); | |
| 110 | } | |
| 111 | ||
| 112 | ||
| 113 | setFlashvar( "enablejsapi", "1" ); | |
| 114 | ||
| 115 | if ( autoPlay ) {
| |
| 116 | setFlashvar( "autoplay", "1" ); | |
| 117 | } | |
| 118 | else {
| |
| 119 | setFlashvar( "autoplay", "0" ); | |
| 120 | } | |
| 121 | ||
| 122 | setFlashvar( "watermark", "" ); | |
| 123 | ||
| 124 | setFlashvar( "invideo", "false" ); | |
| 125 | ||
| 126 | if ( hideAnnotations ) {
| |
| 127 | setFlashvar( "iv_load_policy", "3" ); | |
| 128 | } | |
| 129 | ||
| 130 | if ( hideControls ) {
| |
| 131 | setFlashvar( "autohide", "1" ); | |
| 132 | } | |
| 133 | else {
| |
| 134 | setFlashvar( "autohide", "0" ); | |
| 135 | } | |
| 136 | ||
| 137 | if ( debug ) GM_log( "flashvars final: " + flashvars ); | |
| 138 | ||
| 139 | myPlayer.setAttribute( "flashvars", flashvars ); | |
| 140 | ||
| 141 | ||
| 142 | player.parentNode.replaceChild( myPlayer, player ); |