// ==UserScript== // @name yahvt // @description yet another html5 video tool // @namespace gnblizz // @include http://anilinkz.tv/* // @include http://www.animeboy.org/* // @include http://www.animecenter.tv/* // @include http://www.animedreaming.tv/* // @include http://anime-exceed.com/* // @include http://www.animefreak.tv/* // @include http://www.animefushigi.co/* // @include http://www.animefushigi.com/* // @include http://www.animehere.com/* // @include http://www.animenova.org/* // @include http://www.animenova.tv/* // @include http://www.animeplus.tv/* // @include http://www.animeseason.com/* // @include http://ww1.animes-stream24.net/* // @include http://www.anime-sub.com/* // @include http://www.animetoon.eu/* // @include http://www.animetoon.org/* // @include http://www.animetoon.tv/* // @include http://www.animeultima.io/* // @include http://animewow.eu/* // @include http://www.animewow.eu/* // @include http://www.animewow.org/* // @include http://bestanimes.tv/* // @include http://www.chia-anime.tv/* // @include http://www.clipfish.de/* // @include http://dramago.com/* // @include http://www.dramago.com/* // @include http://www.dramagalaxy.eu/* // @include http://www.dramagalaxy.com/* // @include http://www.dramagalaxy.tv/* // @include http://dubbedanime.net/* // @include http://www.dubzonline.cm/* // @include http://www.dubzonline.com/* // @include http://freeanime.com/* // @include http://www.gogoanime.com/* // @include http://www.goodanime.co/* // @include http://www.goodanime.eu/* // @include http://www.goodanime.net/* // @include http://www.gooddrama.net/* // @include http://www.kumby.com/* // @include http://www.lovemyanime.net/* // @include http://www.otakucenter.com/* // @include http://www.theanime.tv/* // @include http://www.videozoo.me/* // @include http://www.waoanime.tv/* // @include *embed* // @include *gogo/* // @include *widget/* // @include http://player.arkvid.tv/* // @version 1.07 // @grant GM_xmlhttpRequest // @icon data:image/gif;base64,R0lGODlhMAAwAKECAAAAAICAgP///////yH5BAEKAAMALAAAAAAwADAAAALQnI+py+0Po5y02ouz3rz7D4biBJTmiabqyrbuC8fyHAf2jedpzuOvAAwKh6mhUfg7Hks3gHLpehptwIBTioxig0zrdStIgrslMFA8pCKp1oAZjXW6w/Mt/Nl2t8HeFl7o5QZgBagEYyawNxhUl7h4dlelFlZG+QVY6aglmIjjuKd50xla9RKI0mSCqaPJSMM0aEK4mhfbpSnTabM4WXrShtpHI6gqKvmKnCwns0tm2lOsLP3aUy08aK0zvc3d7b09Ei4+Tl5ufo6err7O3n5QAAA7 // @compatible firefox // @downloadURL none // ==/UserScript== "use strict"; var domain; try { domain = document.domain.match(/^(?:www\.)?(.*)$/)[1]; } catch(e) { domain = 'unknown'; } function sites(){ var a,i,o,e,b; //console.log('domain='+domain); switch(location.hostname.match(/([^.]+)\.\w+$/)[1]) { case 'anilinkz'://.tv allowFullscreen('#player'); break; case 'animecenter'://.tv allowFullscreen('#video'); break; case 'animedreaming'://.tv allowFullscreen('.videoholder'); break; case 'anime-exceed'://.com allowFullscreen('#player', (/^\/cool\//.test(location.pathname)?'':'body'),0,999); break; case 'animefreak'://.tv a=objs('.multi'); for(o of a) { e = o.getAttribute('onclick'); if(e && /loadParts\('http/.test(e)) o.onclick = function(event) { var vid_file = decodeURIComponent(this.getAttribute('onclick').match(/loadParts\('([^']+)'/)[1]); document.getElementById("player").innerHTML = ''; }; } break; case 'animefushigi'://.co,com allowFullscreen('#vidboxx', '.videoloadbg'); break; case 'animehere'://.com allowFullscreen('#playbox'); break; case 'animenova'://.org,tv case 'animeplus'://.tv case 'animetoon'://.eu,org,tv case 'animewow'://.eu,org case 'dramagalaxy'://.com,eu,tv case 'dramago'://.com case 'gooddrama'://.net allowFullscreen('#streams'); break; case 'animeseason'://.com if(obj('#series_info')) SetStyle('table a:visited{color:gray;}table a:hover{color:#FC0;}'); allowFullscreen('#video_source', 0, '#player_list A'); break; case 'anime-sub'://.com allowFullscreen('#movie-content'); break; case 'animeultima'://.io allowFullscreen('#pembed'); break; case 'bestanimes'://.tv allowFullscreen('.post'); break; case 'clipfish'://.de obj('+SCRIPT', document.body).innerHTML = 'checkMobile=function(){isMobile=true;}'; break; case 'freeanime'://.com obj('+SCRIPT', document.body).innerHTML = '$(window).unbind();\n$("#header").css("background-attachment","scroll")'; allowFullscreen('.z-video', 0, 'ul.z-tabs-nav LI', 999); break; case 'dubzonline'://.cm,com case 'theanime'://.tv case 'goodanime'://.co,eu,net case 'videozoo'://.me allowFullscreen('#content'); return(location.pathname == '/embed.php'); case 'lovemyanime'://.net allowFullscreen('.player-area'); break; case 'animes-stream24'://.net allowFullscreen('#main'); break; case 'gogoanime'://.com return location.pathname=='/flowplayer/' || allowFullscreen('#content'); //case 'chia-anime':return !top; // ok //case 'dubbedanime':break; // ok //case 'waoanime':break; // how did that get in here? //case 'animeboy':break; // broken, flash only //case 'kumby':break; // server down //case 'otakucenter':break;// server down case 'arkvid': return domain=='player.arkvid.tv'; //case 'yucache'://.net //case 'yourupload'://.com // if(document.URL.match(/[?&]/) == '&') // bad URL? // document.location.replace(document.URL.replace('&', '?')); default: return(/(embed\b|\/gogo\/|\/widget\/)/.test(document.URL)); } function allowFullscreen(selTop, selFrame, mirrors, delay) { if(delay) window.setTimeout( function() { allowFullscreen(selTop, selFrame, mirrors); }, delay); else { var a,i; if(window.self==window.top) { if(mirrors) { a = document.querySelectorAll(mirrors); for(i of a) { i.addEventListener('click', function() { window.setTimeout( function() { document.querySelector(selTop+' IFRAME').setAttribute('allowfullscreen', 'true'); }, 99); }); } } a = document.querySelectorAll(selTop+' IFRAME'); //if(!a.length)console.log('couldn\'t apply fullscreen attribute because '+selTop+' IFRAME not found in '+document.URL); for(i of a) { i.setAttribute('allowfullscreen', 'true'); } } else if(selFrame) { a = document.querySelectorAll(selFrame+' IFRAME'); for(i of a) { i.setAttribute('allowfullscreen', 'true'); } } } }} function findVideoFiles() { var v = [], s, m, a, i, p; a = obj('VIDEO', document.body); if(a) {//usually doesn't exist yet if(m = a.getAttribute('src')) v.push(m); a = objs('SOURCE', a); for(i of a) { if(m = i.getAttribute('src')) v.push(m); } } a = objs('SCRIPT', (domain=='videozoo.me' ? document.documentElement : document.body)); for(i of a) { if(s=getScript(i)) { find(/"(http:\/\/[^"]+\.(?:mp4|flv)\b[^"]*)"/gi); find(/"(.+\.php\b.+\.(?:mp4|flv))"/gi); find(/"([^"]+\bpicasa\.php\b[^"]+)"/gi); find(/"(https\:\/\/[^"]*\.google(?:video\.com\/videoplayback|usercontent.com\/)[^"]+)"/gi); } } if(/trollvid\.net$/i.test(domain)) {//Is this of any use today? for(i of a) { s = i.innerHTML; m = s.match(/['"](http.+?data.*?file.*?)['"]/i); if(m) v.push(m[1]); } a = objs('SCRIPT', document.head); for(i of a) { m = i.innerHTML.match(/unescape\(atob\('(.+?)'/); if(m) { m = unescape(atob(m[1])); if(/\.(mp4|flv)/i.test(m)) v.push(m); } } } else if('videobam.com' == domain) {//Is this of any use today? for(i of a) { s = i.innerHTML; m = s.match(/['"](http:\\\/\\\/[^'"]+\.(?:mp4|flv)\b[^'"]*)['"]/i); if(m) v.push(m[1].replace(/\\\//g,'/')); } } try {//even if it looks wierd... m = document.querySelector('#flowplayer+script').innerHTML.replace(/\s+/g, ' ').match(/\/\* playlist\: \[ \{ url\: '(.*)'/)[1]; if(!/\<|\>/.test(m)) { //console.log('Comment for html5_path found.'); v.push(m); } } catch(e){} a = objs('PARAM'); for(i of a) { p = i.getAttribute('value'); m = p.match(/video=(http:\/\/[^'"]+\.mp4[^'"&]*)/i); if(m) v.push(m[1]); } a = objs('EMBED'); for(i of a) { p = i.getAttribute('src'); m = p.match(/video=(http:\/\/[^'"]+\.mp4[^'"&]*)/i); if(m) v.push(m[1]); } return v; function find(pattern /*,v */) { var g = /g[imy]*$/.test(pattern.toSource()); do { var m = pattern.exec(s); if(!m) break; m = decodeURIComponent(unescape(m[1])); if(v.indexOf(m)<0) v.push(m); } while(g); } function getScript(s) { if(!(s=s.innerHTML).length) return s; var m = s.match(/^eval(\(function\(p(?:,[a-ek]){5}\).+\bsplit\b.+)$/m), timer; if(m) { try { s += eval(m[1]); console.log('Packed script detected.'); } catch(e) { console.log('Packed script parse error.'); } } return unescape(s.replace(/\s\/\/.*$/gm,'').replace(/\s+/gm,' ').replace(/\/\*.*\*\//g,'').replace(/'/g,'"')); }} (function yahvt() { try { if(sites()) { var av = findVideoFiles(); if(av && av.length) { console.log('Found '+av.length+' video source'+(av.length==1 ? '' : 's')+' at '+domain+'.'); var autoplay = remembered('autoplay', true) == 'yes'; if(window.self != window.top && !autoplay) { document.body.innerHTML = '
Video '+((/(part|clip)_?\d/.test(av[0]+document.URL)) ? 'part ' : '')+'found at ' + domainName(document.URL) + '.
Video not found.
'; break; } } } } } catch(e) { console.log('yahvt: ' + e); } function insertVideo() { var nvf = NextPart(document.URL), txt = ''; if(obj('#flowplayer')) txt += ''; else if(obj('#player')) txt += ''; document.body.innerHTML = txt; console.log('starting ' + domain + (nvf ? (' video part '+nvf[2]) : ' video')); var v = obj('VIDEO'); v.oncanplay = function(e) {//note: multiple calls //console.log('now playing: '+v.currentSrc); if(remembered('fullscreen', true)=='yes') SetFullScreenMode(); v.oncanplay = ''; v.focus(); }; v.lastChild.onerror = function(e) { if(!/\bnoflash\b/.test(location.search)) { console.log('redirecting to location + noflash'); Remember('autoplay'); location.search = location.search ? location.search+'&noflash' : '?noflash'; } console.log('video load error'); if(nvf && nvf[2]>1) document.body.innerHTML = '