- // ==UserScript==
- // @name NS_PrimeWire
- // @namespace mugPuke
- // @include https?://www.primewire.ag/watch*
- // @include https?://www.primewire.ag/tv-*
- // @version 1
- // @description Sorts and filters primewire video hosts.
- // @grant none
- // @run-at document-idle
- // ==/UserScript==
-
- // author: mugPuke, license: GPL v3
- (function () {
-
- // vid hosters that should be removed (edit to your liking):
- var block = new Set([
- // advertisement
- // ---------------------------------------------------------------------
- 'Sponsor Host',
- 'Promo Host',
-
- // hosters that are not covered by the NS_primewire_hosters script
- // ---------------------------------------------------------------------
- // 'movdivx.com', // needs divx
- // 'movshare.net', // 500 err - 17.09.31
- // 'noslocker.com', // NS_* script xml playlist
- // 'nosvideo.com', // NS_* script xml playlist
- // 'novamov.com', // 500 err - 17.09.31
- // 'nowvideo.sx', // 500 err - 17.09.31
- // 'speedvid.net', // cookie - 17.09.31
- // 'streamin.to', // TODO
- // 'streamplay.to', // Wrong IP - 17.09.31
- // 'thevideo.me', // NS_* TOS
- // 'videoweed.es', // 500 err - 17.09.31
- // 'vidup.me', // NS_* TOS
- // 'vshare.eu', // TODO
-
- // not tested hosters:
- // ---------------------------------------------------------------------
- // 'briskfile.com',
- // 'cloudtime.to',
- // 'filenuke.com',
- // 'letwatch.us',
- // 'movshare.net',
- // 'novamov.com',
- // 'nowvideo.sx',
- // 'playedto.me',
- // 'promptfile.com',
- // 'sharerepo.com',
- // 'sharesix.com',
- // 'thefile.me',
- // 'vidbull.com',
- // 'videoweed.es',
- // 'vidlockers.ag',
- // 'vidto.me',
- // 'vodlocker.com',
- ]);
-
- // vid hoster sord order (edit to your liking):
- // -------------------------------------------------------------------------
- var sort = new Map();
- var idx = 0;
- sort.set( "vidlox.tv", idx++ );
- sort.set( "vidzi.to", idx++ );
- sort.set( "vidzi.tv", idx++ );
- sort.set( "vidtodo.com", idx++ );
- sort.set( "daclips.com", idx++ );
- sort.set( "daclips.in", idx++ );
- sort.set( "gorillavid.com", idx++ );
- sort.set( "gorillavid.in", idx++ );
- sort.set( "movpod.net", idx++ );
- sort.set( "movpod.in", idx++ );
-
-
- // trim strings
- var trim = function(str)
- {
- var str = str.replace(/^\s\s*/, '');
- var ws = /\s/;
- var i = str.length;
-
- while (ws.test(str.charAt(--i)));
- return str.slice(0, i + 1);
- }
-
- // url table elements
- var getTargets = function()
- {
- return document.querySelectorAll('#first table.movie_version');
- }
-
- // url table container
- var getTargetParent = function()
- {
- return document.querySelector('#first');
- }
-
- var sort_fcn = function( a, b )
- {
- if(b == null)
- {
- return false;
- }
- if(a == null)
- {
- return true;
- }
-
- var a_elem = a.querySelector("span.version_host");
- var b_elem = b.querySelector("span.version_host");
-
- if(b_elem == null)
- {
- return false;
- }
- if(a_elem == null)
- {
- return true;
- }
-
- var a_str = trim(a_elem.innerHTML);
- var b_str = trim(b_elem.innerHTML);
- var a_flag = sort.has(a_str);
- var b_flag = sort.has(b_str);
-
- if( a_flag && b_flag )
- {
- var f = sort.get(a_str) > sort.get(b_str);
- return f;
- }
- else if( a_flag )
- {
- return false;
- }
- else if( b_flag )
- {
- return true;
- }
-
- return a_str > b_str;
- }
-
- var cleanTargets = function( targets )
- {
- // write hoster info without enabled js
- var reg = /document.writeln\('(.[^']*)'\)/;
- var out_arr = [];
-
- for(var target of targets)
- {
- var sub_target = target.querySelector("span.version_host");
- if(sub_target == null)
- {
- continue;
- }
-
- var trash_target = sub_target.querySelector("script");
- if(trash_target != null)
- {
- var matches = reg.exec(trash_target.innerHTML)
- if (matches.length < 2)
- {
- continue
- }
- sub_target.innerHTML = matches[1];
- }
- var str = trim(sub_target.innerHTML);
-
- if (block.has(str))
- {
- continue;
- }
- sub_target.innerHTML = str;
- out_arr.push(target)
- }
- return out_arr;
- }
-
- var main = function()
- {
- var targets = getTargets();
- var targetsLen = targets.length;
-
- if (targetsLen == 0)
- {
- console.log("Targets missing.")
- return;
- }
-
- targets_arr = cleanTargets( targets )
-
- targets_arr.sort(sort_fcn);
-
- // clean container ...
- var parent = getTargetParent();
- parent.innerHTML = " ";
-
- // ... and repopulate it
- for(var target of targets_arr)
- {
- if(target == null){continue;}
-
- parent.appendChild(target);
- }
- }
- main();
- }());