Last active
October 7, 2015 22:59
-
-
Save cha0s/6ccd6bb6ac203dd8aa9c to your computer and use it in GitHub Desktop.
Primewire unshittification
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==UserScript== | |
// @name Primewire unshittification | |
// @namespace gm.cha0s | |
// @include /^https?:\/\/www\.primewire.ag\/(watch|tv)/ | |
// @version 1 | |
// @grant none | |
// ==/UserScript== | |
(function() { | |
// Base64 decoding for the URLs. | |
var global = {}; | |
(function(global){"use strict";var _Base64=global.Base64;var version="2.1.9";var buffer;if(typeof module!=="undefined"&&module.exports){try{buffer=require("buffer").Buffer}catch(err){}}var b64chars="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var b64tab=function(bin){var t={};for(var i=0,l=bin.length;i<l;i++)t[bin.charAt(i)]=i;return t}(b64chars);var fromCharCode=String.fromCharCode;var cb_utob=function(c){if(c.length<2){var cc=c.charCodeAt(0);return cc<128?c:cc<2048?fromCharCode(192|cc>>>6)+fromCharCode(128|cc&63):fromCharCode(224|cc>>>12&15)+fromCharCode(128|cc>>>6&63)+fromCharCode(128|cc&63)}else{var cc=65536+(c.charCodeAt(0)-55296)*1024+(c.charCodeAt(1)-56320);return fromCharCode(240|cc>>>18&7)+fromCharCode(128|cc>>>12&63)+fromCharCode(128|cc>>>6&63)+fromCharCode(128|cc&63)}};var re_utob=/[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g;var utob=function(u){return u.replace(re_utob,cb_utob)};var cb_encode=function(ccc){var padlen=[0,2,1][ccc.length%3],ord=ccc.charCodeAt(0)<<16|(ccc.length>1?ccc.charCodeAt(1):0)<<8|(ccc.length>2?ccc.charCodeAt(2):0),chars=[b64chars.charAt(ord>>>18),b64chars.charAt(ord>>>12&63),padlen>=2?"=":b64chars.charAt(ord>>>6&63),padlen>=1?"=":b64chars.charAt(ord&63)];return chars.join("")};var btoa=global.btoa?function(b){return global.btoa(b)}:function(b){return b.replace(/[\s\S]{1,3}/g,cb_encode)};var _encode=buffer?function(u){return(u.constructor===buffer.constructor?u:new buffer(u)).toString("base64")}:function(u){return btoa(utob(u))};var encode=function(u,urisafe){return!urisafe?_encode(String(u)):_encode(String(u)).replace(/[+\/]/g,function(m0){return m0=="+"?"-":"_"}).replace(/=/g,"")};var encodeURI=function(u){return encode(u,true)};var re_btou=new RegExp(["[À-ß][-¿]","[à-ï][-¿]{2}","[ð-÷][-¿]{3}"].join("|"),"g");var cb_btou=function(cccc){switch(cccc.length){case 4:var cp=(7&cccc.charCodeAt(0))<<18|(63&cccc.charCodeAt(1))<<12|(63&cccc.charCodeAt(2))<<6|63&cccc.charCodeAt(3),offset=cp-65536;return fromCharCode((offset>>>10)+55296)+fromCharCode((offset&1023)+56320);case 3:return fromCharCode((15&cccc.charCodeAt(0))<<12|(63&cccc.charCodeAt(1))<<6|63&cccc.charCodeAt(2));default:return fromCharCode((31&cccc.charCodeAt(0))<<6|63&cccc.charCodeAt(1))}};var btou=function(b){return b.replace(re_btou,cb_btou)};var cb_decode=function(cccc){var len=cccc.length,padlen=len%4,n=(len>0?b64tab[cccc.charAt(0)]<<18:0)|(len>1?b64tab[cccc.charAt(1)]<<12:0)|(len>2?b64tab[cccc.charAt(2)]<<6:0)|(len>3?b64tab[cccc.charAt(3)]:0),chars=[fromCharCode(n>>>16),fromCharCode(n>>>8&255),fromCharCode(n&255)];chars.length-=[0,0,2,1][padlen];return chars.join("")};var atob=global.atob?function(a){return global.atob(a)}:function(a){return a.replace(/[\s\S]{1,4}/g,cb_decode)};var _decode=buffer?function(a){return(a.constructor===buffer.constructor?a:new buffer(a,"base64")).toString()}:function(a){return btou(atob(a))};var decode=function(a){return _decode(String(a).replace(/[-_]/g,function(m0){return m0=="-"?"+":"/"}).replace(/[^A-Za-z0-9\+\/]/g,""))};var noConflict=function(){var Base64=global.Base64;global.Base64=_Base64;return Base64};global.Base64={VERSION:version,atob:atob,btoa:btoa,fromBase64:decode,toBase64:encode,utob:utob,encode:encode,encodeURI:encodeURI,btou:btou,decode:decode,noConflict:noConflict};if(typeof Object.defineProperty==="function"){var noEnum=function(v){return{value:v,enumerable:false,writable:true,configurable:true}};global.Base64.extendString=function(){Object.defineProperty(String.prototype,"fromBase64",noEnum(function(){return decode(this)}));Object.defineProperty(String.prototype,"toBase64",noEnum(function(urisafe){return encode(this,urisafe)}));Object.defineProperty(String.prototype,"toBase64URI",noEnum(function(){return encode(this,true)}))}}if(global["Meteor"]){Base64=global.Base64}})(global); | |
// First remove all those shitty "HD link" rows. | |
var hds = window.document.querySelectorAll('td span.quality_hd'); | |
for (var i in hds) { | |
if (!hds.hasOwnProperty(i)) continue; | |
var hd = hds[i]; | |
var tr = hd.parentNode.parentNode.parentNode; | |
tr.parentNode.removeChild(tr); | |
} | |
// Remove unknown quality links. | |
var qualityUnknown = window.document.querySelectorAll('.quality_unknown'); | |
for (var i in qualityUnknown) { | |
if (!qualityUnknown.hasOwnProperty(i)) continue; | |
var tr = qualityUnknown[i].parentNode.parentNode; | |
var tbody = tr.parentNode; | |
tbody.removeChild(tr); | |
} | |
// Links. | |
var links = window.document.querySelectorAll('.movie_version_link > a'); | |
for (var i in links) { | |
if (!links.hasOwnProperty(i)) continue; | |
var link = links[i]; | |
// Rewrite the link href to the ACTUAL site. | |
link.href = global.Base64.decode(parseQuery(link.href).url); | |
// Remove the onclick spam handlers. | |
delete link.setAttribute('onclick', ''); | |
// Inject domain name when client JS is restricted. | |
var td = link.parentNode.parentNode; | |
var tdIndex = nodeIndex(td); | |
var versionTd = td.parentNode.childNodes[tdIndex + 2]; | |
var shortHostname = link.hostname.split('.').slice(-2).join('.'); | |
// Emphasize video sites we have container scripts for. | |
var spanElement = window.document.createElement('span'); | |
if (-1 !== [ | |
'promptfile.com', 'movshare.net', 'movpod.in', 'vodlocker.com', | |
'bestreams.net', 'nowvideo.sx', 'streamin.to', 'vidzi.tv', 'letwatch.us' | |
].indexOf(shortHostname)) spanElement.style = 'font-weight: bold; font-size: 1.2em;' | |
spanElement.innerHTML = shortHostname; | |
versionTd.childNodes[0].innerHTML = spanElement.outerHTML; | |
} | |
/** | |
* Helper function to parse href into query object. | |
*/ | |
function parseQuery(href) { | |
var query = {}; | |
var queryString = href.split('?')[1]; | |
var queryStringParts = queryString.split('&'); | |
for (var i in queryStringParts) { | |
var kv = queryStringParts[i]; | |
var kvParts = kv.split('='); | |
query[kvParts[0]] = kvParts[1]; | |
} | |
return query; | |
} | |
/** | |
* Helper function to get a node's index in parent. | |
*/ | |
function nodeIndex(node) { | |
var i = 0; | |
while((node = node.previousSibling) != null) i++; | |
return i; | |
} | |
})(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment