W.A.R. Links Checker Customized

Automatically checks links from hundreds of file hosts.

目前为 2014-06-03 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name W.A.R. Links Checker Customized
  3. // @description Automatically checks links from hundreds of file hosts.
  4. // @details this script automatically checks links from filehosts. For Firefox, Chrome, Opera, Safari.
  5. // @version 1.2.4.7.1.9
  6. // @license GPL version 3 or any later version (http://www.gnu.org/copyleft/gpl.html)
  7. // @icon http://sharenxs.com/photos/2014/02/14/52fd759db90ac/cooltext1428903746.png
  8. // @author mental
  9. // @include http://*
  10. // @include https://*
  11. // @include file:///*
  12. // @grant GM_xmlhttpRequest
  13. // @grant GM_addStyle
  14. // @grant GM_registerMenuCommand
  15. // @grant GM_getResourceText
  16. // @require https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js
  17. // @homepage http://www.mentalps.5gbfree.com
  18. // @namespace http://www.mentalps.5gbfree.com
  19. // ==/UserScript==
  20.  
  21. var War_version = "1.2.4.7.1.9 june 03 2014";
  22.  
  23. //separate alternative domains with "|" char (first name is considered being main)
  24. var allHostNames = ["1fichier.com|dl4free.com", "2shared.com", "4fastfile.com", "adrive.com", "bezvadata.cz", "bitshare.com", "filebeam.com",
  25. "burnupload.com|burnupload.ihiphop.com", "cramit.in|cramitin.net","dataport.cz", "datei.to", "daten-hoster.de|filehosting.org",
  26. "divxden.com|vidbux.com", "easy-share.com|crocko.com", "easybytez.com", "edisk.cz", "euroshare.eu", "fastshare.cz", "fiberupload.net",
  27. "filefactory.com", "eyesfile.net|eyesfile.com|eyesfile.co|eyesfile.org|eyesfiles.com", "fileflyer.com", "filerio.com|filekeen.com", "filemonster.net",
  28. "nosupload.com", "upsto.re", "files.mail.ru", "files.to", "filepost.com|fp.io", "filesend.net", "filesflash.com", "upafile.com", "turbobit.net",
  29. "secureupload.eu", "filesmonster.com", "filestore.to", "freakshare.net", "filedwon.com", "ukfilehost.com", "free.fr", "free-uploading.com",
  30. "gigapeta.com", "gigasize.com", "gigaup.fr", "videopremium.net", "goldfile.eu", "hipfile.com", "hostuje.net", "vidup.me", "dizzcloud.com",
  31. "filehost.ro", "gorillavid.in", "hulkshare.com|hu.lk", "ifolder.ru", "jumbofiles.com", "allmyvideos.net", "sharerepo.com","filesaur.com",
  32. "leteckaposta.cz|sharegadget.com", "load.to", "mediafire.com", "megafileupload.com", "megashares.com", "filemaze.ws", "movshare.net",
  33. "myupload.dk", "narod.ru|narod.yandex.ru", "netload.in", "speedvid.tv", "partage-facile.com", "putlocker.com|firedrive.com", "fileim.com",
  34. "ultramegabit.com", "limelinx.com", "sfshare.se", "filewe.com", "queenshare.com|10upload.com", "quickshare.cz", "rapidshare.com", "putcker.com",
  35. "rapidshare.ru", "daj.to", "depositfiles.com|dfiles.eu", "rapidgator.net|rg.to", "rarefile.net", "rayfile.com", "rghost.net", "sendmyway.com",
  36. "4savefile.com", "filebulk.com", "videozed.net", "sendspace.com", "share-online.biz|egoshare.com", "sharingmaster.com", "fileplaneta.com",
  37. "midupload.com", "slingfile.com", "solidfiles.com", "speedfile.cz", "filenuke.com", "fileparadox.in", "creafile.net", "rapidstation.com",
  38. "speedshare.org", "tufiles.ru", "zippyshare.com", "ryushare.com", "rodfile.com", "wikiupload.com", "uloz.to|ulozto.cz|bagruj.cz|zachowajto.pl",
  39. "ulozisko.sk", "uloziste.com", "basicupload.com", "fileneo.com", "uploadbin.net", "uploaded.to|ul.to", "uploading.com", "uploadjet.net",
  40. "swankshare.com", "uploadspace.pl", "upnito.sk", "uptobox.com", "usaupload.net", "veehd.com", "videobb.com", "filecloud.cc", "flexydrive.com",
  41. "videozer.com", "uploads.bizhat.com", "webshare.cz", "xdisk.cz", "yunfile.com|filemarkets.com|yfdisk.com", "nitrobits.com", "mega-myfile.com",
  42. "divshare.com", "flyfiles.net", "nowdownload.eu", "asfile.com", "prefiles.com", "axifile.com", "zalil.ru", "ortofiles.com", "uploadc.com",
  43. "sharefiles.co", "amonshare.com", "data.hu", "blitzfiles.com", "filesbowl.com", "freestorage.ro", "spaceforfiles.com|filespace.com", "zalaa.com",
  44. "netkups.com", "vreer.com", "upfile.biz", "file-speed.com", "hulkload.com", "speedshare.eu", "tusfiles.net", "uppit.com", "ddlstorage.com",
  45. "downloadani.me", "filesabc.com", "share.az", "sockshare.com", "nekaka.com", "file4safe.com", "sharebeast.com", "180upload.com", "verzend.be",
  46. "asixfiles.com", "zomgupload.com", "ravishare.com", "movreel.com", "4up.me|4upfiles.com", "extmatrix.com", "sendfiles.nl", "yourfilestore.com",
  47. "filebig.net", "sharesix.com", "hulkfile.eu|duckfile.net", "luckyshare.net", "uploadic.com", "fileswap.com", "potload.com", "thefilebox.com",
  48. "billionuploads.com", "rockdizfile.com", "exclusivefaile.com|exclusiveloader.com", "filesbb.com", "myvdrive.com", "filesin.com", "novafile.com",
  49. "longfiles.com", "albafile.com", "host4files.com", "lumfile.com|terafile.co", "uploadhero.com|uploadhero.co", "uploadbaz.com", "expressleech.com",
  50. "file-space.org", "stahovadlo.cz", "datafilehost.com", "bitupload.com", "bayfiles.net", "vshare.eu", "files.indowebster.com", "file4u.pl", "kie.nu",
  51. "superload.cz", "mafiastorage.com", "fileband.com", "filesmall.com", "flashx.tv", "minus.com|min.us", "filesmelt.com", "hellupload.com",
  52. "packupload.com", "uploadingit.com", "stiahni.si", "filefolks.com", "sendspace.pl", "fastshare.org", "divxstage.eu", "sinhro.net", "filestore.com.ua",
  53. "filesbomb.com", "cepzo.com", "project-free-upload.com", "imzupload.com", "hostingbulk.com", "speedy-share.com", "100shared.com", "igetfile.com",
  54. "xvidstage.com", "vidbull.com", "rapidfileshare.net", "filebox.ro|fbx.ro", "mixturecloud.com|mixturefile.com", "filefront.com|gamefront.com",
  55. "yourupload.com", "file-upload.net", "restfiles.net|restfile.com", "fliiby.com", "dodane.pl", "usersfiles.com", "upgolden.com|shallfile.com",
  56. "jumbofiles.org|jumbofilebox.com", "rapidapk.com", "upshared.com", "upload.ee", "putme.org", "hugefiles.net", "mega.co.nz", "thefile.me",
  57. "unlimitshare.com", "share4web.com", "epicshare.net", "novamov.com", "filedropper.com|filesavr.com", "yourfiles.to", "skydrive.live.com",
  58. "uploadboy.com", "city-upload.com", "mijnbestand.nl", "ultrashare.net", "dosya.tc", "exfile.ru", "fileshare.ro", "fshare.vn", "wikifortio.com",
  59. "wyslijto.pl", "kiwi6.com", "localhostr.com|lh.rs|hostr.co", "remixshare.com", "hidemyass.com", "tinyupload.com", "gigabase.com", "trainbit.com",
  60. "videobam.com", "hyperfileshare.com", "uploads.ws", "ge.tt", "donevideo.com", "mightyupload.com", "megafiles.se", "1st-files.com",
  61. "cloud-up.be", "fiberstorage.net", "uploadhunt.com", "junocloud.me", "karelia.pro", "boomupload.net", "bestreams.net", "1-clickshare.com", "flashdrive.it",
  62. "fastupload.ro", "fujifile.me", "howfile.com", "failai.lt", "vidspot.net", "file4go.com", "hostinoo.com", "movdivx.com", "pandamemo.com", "youwatch.org",
  63. "spicyfile.com", "m5zn.com", "upload-il.com", "sube.me", "files2upload.net", "vidto.me", "hyshare.com", "filezy.net", "arabloads.com", "davvas.com",
  64. "filesline.com", "megacache.net", "sanshare.com", "sendfile.su", "akafile.com", "todayfile.com", "lafiles.com", "medofire.com", "mystore.to",
  65. "anonfiles.com", "upitus.net", "medafire.net", "medoupload.com", "fastflv.com", "herosh.com", "girlshare.ro", "bin.ge", "nowvideo.eu", "video.tt",
  66. "shareplace.com", "terafiles.net", "uploadmb.com", "exfilehost.com", "cometfiles.com", "filetug.com", "datafile.com", "shareswift.com", "ex-load.com",
  67. "depfile.com", "uncapped-downloads.com", "isavelink.com", "filesear.com", "clicktoview.org", "promptfile.com", "zixshare.com", "maxisharing.com",
  68. "katzfiles.com", "filebar.kz", "yourfilelink.com", "fileom.com", "1file.cc", "backin.net", "uploadscenter.com", "vidhog.com", "qshare.com", "guizmodl.net",
  69. "1000shared.com", "gigfiles.net", "freakbit.net", "upload-novalayer.com", "filewist.com", "airupload.com", "dropbox.com", "uplds.com", "wikisend.com",
  70. "wrzuc.to", "safecloud.so", "webfilehost.com", "myuplbox.com", "roshare.info", "demo.ovh.eu", "treefile.org|treefiles.com|treesfile.com",
  71. "lemuploads.com", "filepup.net", "filedap.com", "divxpress.com", "dwn.so|dwnshare.pl", "sharephile.com", "upgiga.com", "koofile.com", "earnupload.eu",
  72. "netkozmos.com", "maherfire.com", "droidbin.com", "d-h.st", "loadpot.net", "kingfiles.net", "shareblue.eu", "redload.net", "upfile.vn", "tuxfile.com",
  73. "grifthost.com", "limevideo.net", "nirafile.com", "uploadinc.com", "batshare.com", "lunaticfiles.com", "wozupload.com", "kingsupload.com", "media1fire.com",
  74. "usefile.com", "vidplay.net", "cyberlocker.ch", "mydisc.net", "med1fire.com", "stahuj.to", "upbooth.com", "anysend.com", "vodlocker.com", "uploadrocket.net",
  75. "vidx.to", "filecloud.io", "foxishare.com", "redbunker.net", "uploadnetwork.eu", "cloudstor.es", "uploadable.ch", "streamratio.com", "worldbytez.com",
  76. "cloudvidz.net", "maskfile.com", "hexupload.com", "moevideo.net", "dogupload.com|filesfrog.net", "sendfile.pl", "shareprofi.com",
  77. "salefiles.com", "anafile.com", "bonanzashare.com", "shared.com", "filetrip.net", "fileshareup.com", "imgjungle.com", "unlimitzone.com", "rapidu.net",
  78. "wallobit.com", "filepi.com", "swatupload.com", "2downloadz.com", "qfpost.com", "rapidfiles.com", "rosharing.com", "storagely.com", "turtleshare.com",
  79. "uploadzeal.com", "wipfiles.net", "superupload.com", "tropicshare.com", "archive.org", "played.to", "streaming.to", "uploadcapital.com", "twojepliki.eu",
  80. "filemoney.com", "filehoot.com", "qkup.net", "mxua.com", "uploadsat.com", "cloudyvideos.com", "filekom.com|filemac.com", "interfile.net",
  81. "idup.in", "filedais.com", "fileforever.net", "rioupload.com", "migupload.com", "medofire.co", "filemonkey.in", "bluehaste.com", "up09.com", "nodaup.com",
  82. "fcore.eu", "4downfiles.com", "1clickfiles.com", "weshare.me", "filemup.com", "hottera.com", "lomafile.com", "hightail.com|yousendit.com",
  83. "4bigbox.com", "10shared.com", "megaupdown.com", "poslisoubor.cz", "radicalshare.com", "share-byte.net", "sharemods.com", "skyfilebox.com", "crisshare.com",
  84. "vipshare.me","datoid.cz","streamfile.com","cloudstor.es","google.com","files.fm","aisfile.com","hellfile.com","pan.baidu.com","yunpan.cn","dotsemper.com",
  85. "gulfup.com","vidbox.yt","box.net","box.com","sharerapid.cz","rusfolder.net","rusfolder.com","freefilehosting.net","fileshareup.com","keep2share.cc","keep2s.cc",
  86. "k2s.cc","goldbytez.com","keep2share.com","speedy.sh","fboom.me","megarapid.cz","yadi.sk",];
  87.  
  88. try {
  89. //iframes excluded
  90. if (window.top != window.self) {
  91. return;
  92. }
  93. //allHostNames sites excluded
  94. if (window.location.href.match("https?:\/\/(www\.)?[\w\.-]*(?:" + allHostNames.join("|").replace(/\./g, "\\.").replace(/-/g, "\\-") + ")")) {
  95. return;
  96. }
  97. } catch (e) {
  98. return;
  99. }
  100.  
  101. //separate alternative domains with "|" char (first name is considered being main)
  102. var allContainerNames = ["safelinking.net"];
  103.  
  104. //separate alternative domains with "|" char (first name is considered being main)
  105. var allObsoleteNames = ["uloz.cz","storage.to","iskladka.cz","file-rack.com","fast-load.net","subory.sk","bigandfree.com","uplly.com",
  106. "fileop.com","mujsoubor.cz","sendfile.to","superfastfile.com","quickyshare.com","duckload.com","uploadstore.net","meinupload.com",
  107. "dualshare.com","2xupload.to|2xupload.de","oxedion.com","uploadline.com","dll.bz","movieshare.in","milledrive.com","quickupload.net",
  108. "safelink.in","metadivx.com","divxlink.com","uploadrack.com","teradepot.com","dataup.to","upit.to","driveway.com","eatlime.com",
  109. "a2zuploads.com","friendlyfiles.net","flyfile.us","speedyshare.com","uploadspace.eu","keepfile.com","piggyshare.com",
  110. "filecrown.com","6giga.com","uploadjockey.com","bluehost.to","filegu.ru","filebase.to","up-file.com","xvideos.com","esnips.com",
  111. "filebling.com","loaded.it","uploadcell.com","uploadshare.cz","mangoshare.com","filestab.com","crazyupload.com","gaiafile.com",
  112. "sharejunky.com","fileho.com","bigandfree.com","bigfile.in","bigshare.eu","dahosting.org","digisofts.net","file4save.com",
  113. "filechip.com","filescloud.com","saveqube.com","turboshare.de","z-upload.com","youshare.com","jiffyupload.com","gigeshare.com",
  114. "datenklo.net","upload.dj","loadfiles.in","upit.to","dsfileshare.com","sharesimple.net","4files.net","wooupload.com",
  115. "odsiebie.com","filenavi.com","3oof.com","meshwaar.com","maxupload.com","share.cx","atserver.eu","uploking.com",
  116. "file2upload.net","filebling.com","turboshare.com","rarhost.com","isharehd.com","i741.com","dataup.de","fofly.com","shareonall.com",
  117. "sexuploader.com","megaupload.com|megavideo.com|megaporn.com|megarotic.com","uploadhyper.com","filespawn.com","caizzii.com",
  118. "volnyweb.cz","usershare.net","filescash.net","metahyper.com","combozip.com","x7.to","uploadbox.com","enterupload.com|flyupload.com",
  119. "filepoint.de","mystream.to","x-fs.com","shareator.com","srapid.eu","sosame.cz","filesdump.com","2-klicks.de","ufox.com",
  120. "silofiles.com","upfile.in","filehook.com","uploadking.com","uploadhere.com","kewlshare.com","rapidable.com","hotfiles.ws",
  121. "filesonic.com|sharingmatrix.com","fileserve.com","wupload.com", "skipfile.com", "smartuploader.com", "dualshare.com", "storeandserve.com",
  122. "mountfile.com", "transitfiles.com", "uploadstation.com", "filejungle.com", "shareshared.com", "quickyshare.com", "save.am", "petandrive.com",
  123. "file2box.com", "flyshare.cz", "yabadaba.ru", "cloudcache.cc", "yourfilehost.com", "jakfile.com", "kickload.com", "pyramidfiles.com",
  124. "refile.net", "zshare.net", "ddlani.me|ddlanime.com", "ftp2share.com", "fooget.com", "rapidhide.com", "gotupload.com", "mooload.com",
  125. "zupload.com", "mytempdir.com", "onionshare.com", "stahnu.to", "oron.com", "badongo.com","filereactor.com","filegaze.com","4bytez.com",
  126. "1hostclick.com", "anonstream.com", "batshare.com", "bitroad.net", "brontofile.com", "cloudnxt.net", "cloudnator.com|shragle.com",
  127. "coolshare.cz", "dotavi.com", "ezyfile.net", "file-bit.net", "filecosy.com", "fileduct.com|fileduct.net", "filefat.com", "filelaser.com", "filemashine.com",
  128. "fileserver.cc", "filetechnology.com", "fireuploads.net", "gigfiles.net", "holderfile.com", "ihostia.com", "k2files.com", "mojofile.com",
  129. "ovfile.com", "qshare.com", "shafiles.me", "sharefilehost.com", "shareupload.com", "stahuj.to", "ugotfile.com", "uploadboost.com",
  130. "vidhog.com", "xfileshare.eu", "bzlink.us", "bulletupload.com", "wizzupload.com", "bloggerarticles.com", "mojedata.sk", "sharpfile.com",
  131. "filerobo.com","filevelocity.com","filezpro.com","file4sharing.com","cing.be","ufile.eu","pigsonic.com","fileupped.com","sharerun.com",
  132. "rapidslnare.com","bestsharing.com","savefiles.net","file2share.biz","filecache.de","monsteruploads.eu","b9bb.com","aiotool.net","jamber.info",
  133. "megaftp.com","desiupload.net","file27.com","yastorage.com","filehost.ws","copyload.com","venusfile.com","aieshare.com","uploadwaste.com",
  134. "fileza.net","filerose.com","squillion.com","fileprohost.com","bitbonus.com","warserver.cz","uload.to","sharedbit.net","megaload.it","filewinds.com","megabitshare.com",
  135. "uploadcore.com","syfiles.com","eyesfile.com","hotfile.com","superupl.com","oteupload.com","henchfile.com","filegag.com","HenchFile.com","filedefend.com",
  136. "ryushare.com","xtu.me","sharebase.de","upgrand.com","nasdilej.cz","mediatack.cz","share-it.to","primeupload.com","filebeer.info","baberepublic.com",
  137. "share-rapid.com|rapids.cz|share-credit.cz|share-central.cz|share-ms.cz|share-net.cz|srapid.cz|share-rapid.cz","czshare.com","przeklej.net","filecity.net",
  138. "megarelease.org","storagon.com","rocketfile.net","filecity.eu","berofile.com","ziddu.com","acefile.net","sdilej.cz","clz.to","cloudzer.com",
  139. "extabit.com","cloudzer.net",
  140. ];
  141.  
  142.  
  143. String.prototype.contains = function(searchString) {
  144. if (searchString.constructor === RegExp) {
  145. if (searchString.test(this)) return true;
  146. else return false;
  147.  
  148. } else if (searchString.constructor === String) {
  149. function replaceStr(string) {
  150. return string.replace(new RegExp(RAND_STRING, 'g'), '|');
  151. }
  152.  
  153. searchString = searchString.replace(/\\\|/g, RAND_STRING);
  154. var searchArray = searchString.split('|');
  155.  
  156. if (searchArray.length > 1) {
  157. var found = false;
  158. var i = searchArray.length;
  159.  
  160. while (i--) {
  161. if (this.indexOf(replaceStr(searchArray[i])) > -1) {
  162. found = true;
  163. break;
  164. }
  165. }
  166.  
  167. return found;
  168.  
  169. } else {
  170. if (this.indexOf(replaceStr(searchString)) > -1) return true;
  171. else return false;
  172. }
  173. } else {
  174. throw new TypeError('String.contains: Input is not valid, string or regular expression required, ' + searchString.constructor.name + ' given.');
  175. }
  176. }
  177.  
  178. var firstRun = JSON.parse(localStorage.getItem("War_First_Run"));
  179. if (firstRun == null) firstRun = true;
  180.  
  181. var chromeBrowser = /chrom(e|ium)/.test(navigator.userAgent.toLowerCase());
  182.  
  183. var preferences = JSON.parse(localStorage.getItem("War_Preferences"));
  184.  
  185. allHostNames.sort();
  186. allContainerNames.sort();
  187. allObsoleteNames.sort();
  188.  
  189. var RAND_STRING = "8QyvpOSsRG3QWq";
  190. var RAND_INT = Math.floor(Math.random()*10000);
  191. var RAND_INT2 = Math.floor(Math.random()*10000);
  192. var ANONYMIZE_SERVICE;
  193. var ANONYMIZERS = ['http://anonym.to/?', 'http://anonymz.com/?', 'http://www.blankrefer.com/?', 'http://hidemyass.com/?', 'http://hiderefer.com/?', 'http://nullrefer.com/?', 'http://refhide.com/?'];
  194. var TOOLTIP_MAXWIDTH = 600; //in pixels
  195.  
  196. //global settings start
  197. var Do_not_linkify_DL_links, Display_tooltip_info, Last_Update_Check, Allow_spaces_in_DL_links, Display_full_links_in_link_containers;
  198. var Processbox_Pos_X, Processbox_Pos_Y, Progressbox_Scaling;
  199.  
  200. var cLinksTotal = 0;
  201. var cLinksDead = 0;
  202. var cLinksAlive = 0;
  203. var cLinksUnava = 0;
  204. var cLinksUnknown = 0;
  205. var cLinksProcessed = 0;
  206.  
  207. var filehostsAlive = "";
  208. var filehostsDead = "";
  209. var filehostsUnava = "";
  210. var filehostsUnknown = "";
  211.  
  212. var intervalId; //for updateProgress()
  213.  
  214. //icon resources
  215. var alive_link_png = 'data:image/png;base64,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';
  216. var adead_link_png = 'data:image/png;base64,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';
  217. var unava_link_png = 'data:image/png;base64,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';
  218. var processing_link_gif = 'data:image/gif;base64,R0lGODlhCgAKAJEDAMzMzP9mZv8AAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQFAAADACwAAAAACgAKAAACF5wncgaAGgJzJ647cWua4sOBFEd62VEAACH5BAUAAAMALAEAAAAIAAMAAAIKnBM2IoMDAFMQFAAh+QQFAAADACwAAAAABgAGAAACDJwHMBGofKIRItJYAAAh+QQFAAADACwAAAEAAwAIAAACChxgOBPBvpYQYxYAIfkEBQAAAwAsAAAEAAYABgAAAgoEhmPJHOGgEGwWACH5BAUAAAMALAEABwAIAAMAAAIKBIYjYhOhRHqpAAAh+QQFAAADACwEAAQABgAGAAACDJwncqi7EQYAA0p6CgAh+QQJAAADACwHAAEAAwAIAAACCpRmoxoxvQAYchQAOw%3D%3D';
  219.  
  220. //global settings end
  221.  
  222. function linkify(filterId) { //code from http://userscripts.org/scripts/review/2254 Linkify ting
  223. if (!filterId) {
  224. var regexy = "", ikkeTilladteTags = [];
  225.  
  226. if (Allow_spaces_in_DL_links) {
  227. regexy = "(?:http:\/\/.+?\\?)?(?:https?:\/\/)?(?:[\\w\\.\\-]*[\\w\\-]+\\.(?:com?\\.\\w{2}|in\\.ua|uk\\.com|\\w{2,4})(?::\\d{2,5})?\/|(?:www\\.)?\\w{6,}\\.1fichier\\.com)[\\w\\–\\-\\.+$!*\\/\\(\\)\\[\\]\',~%?:@#&=\\\\\\—;\\u0020…×Ã\\_\\u0080-\\u03FF’‘\\|]*";
  228. } else {
  229. regexy = "(?:http:\/\/.+?\\?)?(?:https?:\/\/)?(?:[\\w\\.\\-]*[\\w\\-]+\\.(?:com?\\.\\w{2}|in\\.ua|uk\\.com|\\w{2,4})(?::\\d{2,5})?\/|(?:www\\.)?\\w{6,}\\.1fichier\\.com)[\\w\\–\\-\\.+$!*\\/()\\[\\]\',~%?:@#&=\\\\\\—;…×Ã\\_\\u0080-\\u03FF’‘\\|]*";
  230. }
  231.  
  232. if (Do_not_linkify_DL_links) {
  233. ikkeTilladteTags = ['a', 'head', 'script', 'style', 'title', 'option', 'iframe', 'textarea', 'span']; //tags, hvor det der stAΞ’Β¥r inden i ikke skal vAΞ’Β¦re links
  234. } else {
  235. ikkeTilladteTags = ['a', 'head', 'script', 'style', 'title', 'option', 'iframe', 'textarea']; //tags, hvor det der stAΞ’Β¥r inden i ikke skal vAΞ’Β¦re links
  236. }
  237.  
  238. var regex = new RegExp(regexy, "g");
  239. var censors = [ ];
  240.  
  241. var censorRegex = new RegExp("(?:http:\/\/.+?\\?)?(?:https?:\/\/)?[\\w\\.\\-]*~\\s?(?:" + censors.join("|") + ")\\.*\\s?~[\\w\\–\\-\\.+$!*\\/()\\[\\]\',~%?:@#&=\\\\\\—;…×Ã\\_\\u0080-\\u03FF’‘]*", "i");
  242. var ignoreImage = /(?:\.png|\.jpg|\.gif|\.jpeg|\.bmp)$/i, textNode, muligtLink;
  243.  
  244. var path = "//text()[not(parent::" + ikkeTilladteTags.join(" or parent::") + ") and contains(.,'/')]";
  245. var textNodes = document.evaluate(path, document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
  246.  
  247. var i = textNodes.snapshotLength;
  248. while (i--) {
  249. textNode = textNodes.snapshotItem(i);
  250. muligtLink = textNode.nodeValue; //all links on page
  251.  
  252. var myArray = null;
  253. if (regex.test(muligtLink)) {
  254. var span = document.createElement('span'), lastLastIndex = 0, myArray = null;
  255. regex.lastIndex = 0;
  256.  
  257. while (myArray = regex.exec(muligtLink)) {
  258. var link = $.trim(myArray[0]); //removes whitespace from beginning and end of link (can sometimes cause issues when spaces are still picked up by the regex even when Allow_spaces_in_DL_links is false)
  259. var hostName = gimmeHostName2(link);
  260. var hostNameSafe = hostName.replace(/\./g, "_dot_").replace(/\-/g, "_dash_").toLowerCase();
  261. if (hostName == gimmeHostName(window.location.hostname) || !hostsIDs[hostNameSafe] || ignoreImage.test(link.replace(/\[\/img\]$/, ""))) {
  262. continue;
  263. }
  264. span.appendChild(document.createTextNode(muligtLink.substring(lastLastIndex, myArray.index)));
  265.  
  266. var $a = $("<a>" + link + "</a>")
  267. if (!link.match(/https?:\/\//)) {
  268. link = 'http://' + link;
  269. }
  270.  
  271. $a.attr("href", link.replace(/\[\/hide:\w+\]/,"")).appendTo(span);
  272. lastLastIndex = regex.lastIndex;
  273. }
  274.  
  275. span.appendChild(document.createTextNode(muligtLink.substring(lastLastIndex)));
  276. textNode.parentNode.replaceChild(span, textNode);
  277. } else if (censorRegex.test(muligtLink)) {
  278. if (textNode.parentNode.className == "obsolete_link") continue;
  279. var censoredLink = muligtLink.match(censorRegex)[0];
  280. if (ignoreImage.test(censoredLink)) continue;
  281. var span = document.createElement('span');
  282. span.innerHTML = censoredLink;
  283. span.className = "obsolete_link";
  284. $(span).attr('warlc_error', "Cause of error: <b>Censored link.</b>");
  285. span.addEventListener("mouseover", displayTooltipError, false);
  286. if (filehostsDead.search("censored links") == -1) filehostsDead += "censored links,";
  287. cLinksTotal++; cLinksProcessed++; cLinksDead++;
  288. textNode.parentNode.replaceChild(span, textNode);
  289. }
  290. }
  291. }
  292. var jQ;
  293. filterId ? jQ = "a." + filterId : jQ = "a";
  294. var as = $(jQ);
  295. var i = as.length;
  296. var currA, hostNameSafe, hostID;
  297. while(i--) {
  298. currA = as[i];
  299. if (currA.href && /^https?:\/\//.test(currA.href) && gimmeHostName2(currA.href) != -1 && gimmeHostName2(currA.href) != gimmeHostName(window.location.host) && (!currA.className || currA.className == "processing_link" || currA.className == filterId)) {
  300. hostNameSafe = gimmeHostName2(currA.href).replace(/\./g, "_dot_").replace(/\-/g, "_dash_").toLowerCase();
  301. if (!hostsIDs[hostNameSafe]) {
  302. if (filterId) cLinksTotal--; currA.className = '';
  303. continue;
  304. } else {
  305. var ix = hostsIDs[hostNameSafe].length;
  306. while(ix--) {
  307. if (new RegExp(hostsIDs[hostNameSafe][ix].linkRegex).test(currA.href)) {
  308. currA.className = "processing_link";
  309. hostID = hostsIDs[hostNameSafe][ix].hostID;
  310. hostsCheck[hostID].links.push(currA);
  311. foundMirrors[hostID.substr(0,2)].push(hostID);
  312. }
  313. }
  314. }
  315. }
  316. }
  317. }
  318.  
  319. function add_WARLC_style()
  320. {
  321. if (!(document.getElementsByTagName('WARLC')[0]))
  322. {
  323. var meta_not_to_add_more_style = document.createElement("WARLC");
  324. meta_not_to_add_more_style.setAttribute('content', 'war_links_checker');
  325. meta_not_to_add_more_style.setAttribute('name', 'description');
  326. document.getElementsByTagName('head')[0].appendChild(meta_not_to_add_more_style);
  327. /* change link colors */
  328. GM_addStyle(
  329. ".alive_link {background:transparent url(" + alive_link_png + ") no-repeat scroll 100% 50%;background-size:13px;padding-right:13px;color:green !important;}\
  330. .adead_link {background:transparent url(" + adead_link_png + ") no-repeat scroll 100% 50%;background-size:13px;padding-right:13px;color:red !important;}\
  331. .obsolete_link {background:transparent url(" + adead_link_png + ") no-repeat scroll 100% 50%;background-size:13px;padding-right:13px;color:red !important;}\
  332. .unava_link {background:transparent url(" + unava_link_png + ") no-repeat scroll 100% 50%;background-size:14px;padding-right:13px;color:#FFD700 !important;}\
  333. .processing_link {background:transparent url(" + processing_link_gif + ") no-repeat scroll 100% 50%;background-size:13px;padding-right:16px;color:grey !important;}\
  334. .container_link {background:transparent url(" + processing_link_gif + ") no-repeat scroll 100% 50%;background-size:13px;padding-right:16px;color:Darkkhaki !important;}"
  335. );
  336. }
  337. }
  338.  
  339. var warlcTooltip = null, mouseoverLink = null; //link href with mouse cursor over it
  340.  
  341. var lastX = 0, lastY = 0;
  342.  
  343. $(document).ready(initTooltip);
  344. //inits tooltip
  345. function initTooltip()
  346. { warlcTooltip = document.createElement("div");
  347. warlcTooltip.setAttribute("style", "background: #EAEAEA; box-shadow: 0 1px 5px rgba(0, 0, 0, 0.5);padding: 6px 6px 6px 6px; border-radius:2px; border:2px solid #6699CC; color:#000000;font-family:Verdana,sans-serif;font-size:11px;position:absolute;z-index:1000; max-width: " + TOOLTIP_MAXWIDTH + "px;");
  348. warlcTooltip.style.visibility = "hidden";
  349. document.body.appendChild(warlcTooltip);
  350. }
  351.  
  352. //"mousemove" event handler for all links
  353. function moveTooltip(event)
  354. {
  355. if ((Math.abs(lastX - event.clientX) + Math.abs(lastY - event.clientY)) < 6)
  356. { //no need to reflow if the cursor moved just a little
  357. return;
  358. }
  359. else
  360. {
  361. lastX = event.clientX;
  362. lastY = event.clientY;
  363. }
  364.  
  365. posX = event.clientX + window.pageXOffset + 10;
  366. posY = event.clientY + window.pageYOffset;
  367. var ttHeight = warlcTooltip.offsetHeight;
  368. var ttFreeSpace = window.innerHeight - event.clientY;
  369. if (ttHeight > ttFreeSpace)
  370. { //prevents tooltip from getting out of the window
  371. posY -= (ttHeight - (ttFreeSpace)) + 10;
  372. }
  373. else
  374. {
  375. posY += 7;
  376. }
  377. warlcTooltip.style.top = posY + "px";
  378. warlcTooltip.style.left = posX + "px";
  379. }
  380.  
  381. //"mouseout" event handler for all links
  382. function hideTooltip(){
  383. warlcTooltip.style.visibility = "hidden";
  384. mouseoverLink = null;
  385. }
  386.  
  387.  
  388. //"mouseover" event handler for dead links
  389. //displays tooltip error message on dead links
  390. function displayTooltipError()
  391. {
  392. mouseoverLink = this.href;
  393. this.addEventListener("mouseout", hideTooltip);
  394. this.addEventListener("mousemove", function(event) { moveTooltip(event); });
  395. warlcTooltip.innerHTML = '<b>CHECKING...</b>';
  396. warlcTooltip.style.minWidth = 0;
  397. warlcTooltip.style.visibility = "visible";
  398. if ($(this).attr('warlc_error')) { //an error message is already known and stored in warlc_error attribute
  399. warlcTooltip.innerHTML = $(this).attr('warlc_error');
  400. }
  401. else
  402. {
  403. loadErrorInfo(this);
  404. }
  405. function loadErrorInfo(link)
  406. {
  407. var href = link.href;
  408. if (link.href.contains('anysend.com') && link.name) href = link.name;
  409. href = href.replace(/quickshare\.cz\/.+/, "quickshare.cz/chyba");
  410. GM_xmlhttpRequest({
  411. method: 'GET',
  412. url: href.replace(ANONYMIZE_SERVICE, ""),
  413. headers: {
  414. 'User-agent': 'Mozilla/4.0 (compatible) Greasemonkey',
  415. 'Accept': 'text/xml,application/x-httpd-php',
  416. 'Referer': ""
  417. },
  418. onload: function(result) {
  419. var res = result.responseText;
  420. //console.log(res);
  421. //TODO: errorRegexs -
  422. var errorRegexs = [ //generic error messages follow
  423. /(empty directory)/i,
  424. /(soubor nebyl nalezen)/i,
  425. /((?:file|page|link|folder)(?:is|not|does|has been|was|has| ){1,}(?:found|available|blocked|exists?|deleted|removed|expired))/i,
  426. //server specific error messages follow
  427. /msg error" style="cursor: default">(.+?)<\/div>/, //sendspace
  428. /color:red;font\-weight:bold;border\-style:dashed;font-size:12px;border\-width:2px;><tr><td align=center>(.+?)<\/td>/, //fastshare
  429. /errorIcon">\s*<p><strong>(.+?)<br \/>/, //filefactory
  430. /no_download_msg">\s*(.+?)<span/, //depositfiles
  431. /(Takový soubor neexistuje. Je možné, že byl již smazán.)/, //quickshare
  432. /file_info file_info_deleted">\s*<h1>(.+?)<\/h1>/, //filepost
  433. /<br \/>\s*<p style="color:#000">(.+?)<\/p>\s*<\/center>/, //letitbit
  434. /(?:error_div">|<\/h1><p>)<strong>(.+?)<\/strong>/, //share-rapid,quickshare
  435. /class="red">(.+?)<(?:span|br)>/, //czshare, megashares
  436. /class="wp640">\s*<h1 class="h1">(.+?)<\/h1>/, //uloz.to
  437. /download_file">\s*<tr>\s*<td>(.+?)<\/td>/, //hotfile
  438. /error\.gif" \/>\s*(.+?)\s*<\/div>/, //uploading.com
  439. /not-found">\s*<p>(.+?)<\/p>/, //bayfiles
  440. /(Your file could not be found. Please check the download link.)/, //stahnu.to
  441. /error_msg">\s*(<h3>.+?<\/h3><ul>(.+?)<\/ul>)/, //edisk
  442. /id="obsah">\s*<h2>(.+?)<\/h2>/, //euroshare
  443. /error">\s*(?:<[bp]>)?\s*(.+?)<\/[bp]>/, //filesmonster, shragle, gigapeta
  444. /center aC">\s*<h1>(.+?)<br \/>/, //uploaded.to
  445. /icon_err">\s*<h1>(.+?)<\/h1>/, //filejungle
  446. /Code: ER_NFF_\d+<\/h2>\s*(.+?)\s*<\/div>/, //netload
  447. /(File has been removed due to Copyright Claim)/, //filerio
  448. /<span style="color:red;" class="result-form">(.+?)<\/span>/, //safelinking
  449. /(The file link that you requested is not valid.)/, //2shared
  450. /#FF0000"><big>(.+?\s+.+?)<\/big>/, //jumbofiles
  451. /error_msg_title">(.+?)<\/h3>/, //mediafire
  452. /<span class="bold">(?:<br \/>)+(.+?)<\/span>/, //filebox
  453. /err">(.+?)</, //speedy-share, will work for others
  454. /message warning" style=".+?">\s+((?:.+?\s+)+?)<\/div>/, //cloudzer
  455. /<h2 class="error">(.+?)<\/h2>/, //gigasize.com
  456. /<h1 class="filename" id="status">(.+?)<\/h1>/, //anysend.com
  457. /<title>(Removed download) \| AnySend<\/title>/, //anysend.com
  458. /<div class='message t_0'>(.+?)<\/div>/, //sockshare.com
  459. ];
  460. var errorIdx = errorRegexs.length;
  461. var error = "Cause of error: <b>unknown</b>";
  462. var errorCandidate = "";
  463. while(errorIdx--)
  464. {
  465. var errorCandidate = res.match(errorRegexs[errorIdx]);
  466. if (errorCandidate != null)
  467. {
  468. error = "Cause of error: <b>" + errorCandidate[1].replace(/&nbsp;/g," ") + "</b>";
  469. break;
  470. }
  471. }
  472. //link attributes
  473. $(link).attr('warlc_error', error);
  474. if (mouseoverLink == link.href) //mouse cursor is still over the link
  475. {
  476. warlcTooltip.innerHTML = error;
  477. }
  478. }
  479. });
  480. }
  481. }
  482.  
  483. //"mouseover" event handler for alive links
  484. //displays tooltip info (file size, file name,...) on alive links
  485. function displayTooltipInfo()
  486. {
  487. mouseoverLink = this.href;
  488. //exclude direct download filehostings
  489. if (this.href.contains(/(?:uloziste\.com|filemonster\.net|uploadbin\.net|adrive\.com|dropbox(?:usercontent)?\.com|karelia\.pro|archive\.org|demo\.ovh\.eu)/))
  490. {
  491. return;
  492. }
  493. this.addEventListener("mouseout", hideTooltip);
  494. this.addEventListener("mousemove", function(event) { moveTooltip(event); });
  495. warlcTooltip.innerHTML = '<b>CHECKING...</b>';
  496. warlcTooltip.style.minWidth = 0;
  497. warlcTooltip.style.visibility = "visible";
  498. if (this.warlc_tooltipcache) //file size is already known and stored in warlc_filename and warlc_filesize attributes
  499. {
  500. warlcTooltip.innerHTML = this.warlc_tooltipcache;
  501. }
  502. else
  503. {
  504. loadInfo(this);
  505. }
  506. function loadInfo(link)
  507. {
  508. var href = link.href;
  509. if (link.href.contains('anysend.com')) href = link.name;
  510. href = href.replace(/.*rapidshare\.com\/files\/(\d+)\/(.+)/, 'http://api.rapidshare.com/cgi-bin/rsapi.cgi?sub=checkfiles&cbf=rapidshare_com&cbid=1&files=$1&filenames=$2');
  511. href = href.replace(/.*rapidshare\.com\/#!download\|\w+\|(\d+)\|([^|]+).*/, 'http://api.rapidshare.com/cgi-bin/rsapi.cgi?sub=checkfiles&cbf=rapidshare_com&cbid=1&files=$1&filenames=$2');
  512. href = href.replace(/.*(?:share-online\.biz|egoshare\.com)\/(?:dl\/|download\.php\?id=|\?d=)(\w+)/, 'http://api.share-online.biz/linkcheck.php?links=$1');
  513. href = href.replace(/.*(?:uploaded|ul)\.(?:to|net)\/(?:files?\/|\?(?:lang=\w{2}&)?id=|f(?:older)?\/)?(?!img|coupon)(\w+)/, 'http://uploaded.net/api/filemultiple?apikey=lhF2IeeprweDfu9ccWlxXVVypA5nA3EL&id_0=$1');
  514. href = href.replace(/.*(?:depositfiles\.(?:com|lt|org)|dfiles\.(?:eu|ru))\/(?:en\/|ru\/|de\/|es\/|pt\/|)files\/(\w+)/, 'http://depositfiles.com/api/get_download_info.php?id=$1&format=json')
  515. //href = href.replace(/.*(?:cloudzer\.net|clz\.to)\/(?:file\/)?(\w+)/, 'http://cloudzer.net/api/filemultiple?apikey=mai1EN4Zieghey1QueGie7fei4eeh5ne&id_0=$1');
  516. GM_xmlhttpRequest({
  517. method: 'GET',
  518. url: href.replace(ANONYMIZE_SERVICE, ""),
  519. headers: {
  520. 'Accept': 'text/xml,application/x-httpd-php',
  521. 'Referer': ""
  522. },
  523. onload: function(result) {
  524. var res = result.responseText;
  525. //console.log(res);
  526. var nameRegexs = [ /File Name: (.+?)<\/p>/, //filesmall
  527. /(?:finfo|(?:file[-_]?)?name)(?:"|')?>\s*?(.+?)<\/?(?:h1|a|b|div|span style|td)/, //hellshare, uploaded.to, netload, badongo, 4fastfile, luckyshare
  528. /fl" title="(.+?)">/, //edisk
  529. /Celý název: <a href="http:\/\/czshare.com\/\d+\/\w+\/">(.+?)<\/a>/, //czshare
  530. /<title>\s*(?:Download)?\s*(.+?)\s*(?::: DataPort|\| Ulož|- Share\-Rapid|- WEBSITENAME|download Extabit|- download now for free|\| refile)/, //dataport, uloz.to, share-rapid, shragle, extabit, filefactory, refile.net
  531. /<h3>Stahujete soubor: <\/h3>\s*<div class="textbox">(.+?)<\/div>/, //webshare
  532. /<h3><b><span style=color:black;>(.+?)<\/b><\/h3><br>/, //fastshare
  533. /title="download (.+?)">/, //sendspace
  534. /Stáhnout soubor: (.+?)<\/h1>/, //quickshare
  535. /fz24">Download:\s*<strong>(.+?)<\/strong>/, //crocko
  536. /\w+:<\/b> (.+?)<\/h2>/, //filevelocity
  537. /box_heading" style="text-align:center;">(.+?) - \d+/, //freakshare
  538. /'file\-icon\d+ \w+'>(?:<\/span><span>)?(.+?)<\/span>/, //hitfile, turbobit
  539. /d0FileName = "(.+?)";/, //letitbit
  540. /file(?:_name|-info)" title="">\w+: <span>(.+?)<\/span>/, //vip-file, shareflare
  541. /download_file_title" title="(.+?)">/, //mediafire
  542. /dl\-btn\-label"> (.+?) <\/div>/, //mediafire
  543. /rapidshare_com\(1,"\d+,([^,]+)/, //rapidshare
  544. /id="file_title">(.+?)<\/h1>/, //uploading.com
  545. /recent-comments"><h2>(.+) &nbsp;/, //xdisk
  546. /fname" value="(.+?)">/, //sharerun, syfiles, grupload,
  547. /download\-header">\s*<h2>File:<\/h2>\s*<p title="(.+?)">/, //bayfiles
  548. /description">\s*<p><b>Soubor: (.+?)<\/b>/, //bezvadata
  549. /Complete name : (.+?)<br \/>/, //bezvadata
  550. /itemprop="name">(.+?)<\/span>/, //bezvadata
  551. /Downloading:\s*<\/strong>\s*<a href="">\s*(.+?)\s*<\/a>/, //rapidgator
  552. /(?:Downloading |Lade herunter |<h1>)(.+?) \- \d+/, //bitshare, nitrobits
  553. /Downloading:<\/strong> (.+?) <span>/, //hotfile
  554. /<h1 class="black xxl" style="letter-spacing: -1px" title="(.+?)">/, //megashares
  555. /(?:Filename|Dateiname):<\/b>(?:<\/td><td nowrap>)?(.+?)(?:<br>|<\/td>)/, //billionuploads
  556. /<span > (.+?) \(\d+.?\d+? \w+\)<\/span>/, //clipshouse
  557. /File Download Area<\/center><\/h1><center><h3>(.+?)<\/h3>/, //filebeam
  558. /<h2 class="float\-left">(.+?)<\/h2>/, //easyfilesharing
  559. /<h1 id="file_name" class=".+?" title="(.+?)">/, //box.com
  560. /file_info">\s+<h2><strong>(.+?)<\/strong>/, //fliiby
  561. /dateiname'>(.+?)<\/h1>/, //file-upload.net
  562. /Filename:<\/p>\s+<\/div>\s+<div class=".+?">\s+<p>\s+(.+?)\s+<\/p>/, //sharesix
  563. /File Name:<\/dt>\s+<dd>(.+?)<\/dd>/, //gamefront
  564. /<h2>Download File (.+?) <span id="span1">/, //jumbofiles.org
  565. /dir="ltr">(.+?) <\/td>/, //unlimitshare.com
  566. /nom_de_fichier">(.+?)<\/div>/, //uploadhero
  567. /OK;(.+?);\d+/, //share-online
  568. /File:\s*<span>(.+?)<\/span>/, //keep2share
  569. /Name:<\/font>\s*<font style=".+?">(.+?)<\/font>/, //zippyshare
  570. /online,\w+,\d+,\w+,(.+)/, //uploaded.net, cloudzer.net
  571. /\{"file_info":\{"size":"\d+","name":"(.+?)"\},"/, //depositfiles.com
  572. /File:<\/div>\s*\n*<div class="name">(.+?)<\/div>/, //dizzcloud.com
  573. /site-content">\s*\n*<h1>(.+?)<strong>/, //putlocker.com
  574. /<div class="external_title_left">(.+)<\/div>/, //putlocker.com
  575. /(?:File name|Nom du fichier) :<\/th><td>(.+?)<\/td>/, //1fichier.com
  576. /<div id="file_name" class="span8">\n\s+<h2>(.+?)<\/h2>/, //filefactory.com
  577. /<span class="bgbtn sprite fileIcon ext\w+"><\/span>\s+<strong title="(.+?)">/, //gigasize.com
  578. /<span class="label label-important">Downloading<\/span>\s<br>\s(.+?)\s[\d\.]+\s\w+\s<\/h4>/, //nowdownload.eu
  579. /<!-- File header informations -->\n\s*<br\/>\n\s*<h1>(.+?)<\/h1>/, //mixturecloud.com
  580. /<span class="file-name">(.+?)<\/span>/, //anysend.com
  581. /<td class="dofir" title="(.+?)">/, //billionuploads.com
  582. /<title>ULTRAMEGABIT\.COM - (.+?)<\/title>/, //ultramegabit.com
  583. /<title>Download (.+?) \| myUpload\.dk<\/title>/, //myupload.dk
  584. /<td width="300px" align="left" valign="top">Downloaded \d{1,} times<br>\nFile: (.+?)<br>/, //datafilehost.com
  585. /<div id="download\-title">\n\s*<h2>(.+?)<\/h2>/, //solidfiles.com
  586. /<div class="content_m"><div class="download"><h1>(.+?)<\/h1>/, //mystore.to
  587. /<h4 class="dl_name w420" >\s*(.+?) <span/, //myvdrive.com
  588. /<div class='badge pull-right'>.+?<\/div>\s*<h1>Download (.+?)<\/h1>/, //filemonkey.in
  589. /<strong>File name:<\/strong> (.+?)<br \/>/, //netkups.com
  590. /<div id="file_name" title="(.+?)">/, //uploadable.ch
  591. ];
  592. var nameIdx = nameRegexs.length;
  593. // [sizeRegexs]
  594. // / \ \?
  595. // prefix (size) postfix
  596. // / \
  597. // val quant
  598. var quantRegex = '(?:M|G|K)?i?(?:B)(?:[y|i]te?s?)?';
  599. var valRegex = '\\d+(?:[\\., ]\\d+){0,2}'; // 111([., ]222)?([., ]333)?
  600. var uniSizeRegex = valRegex + '(?:\\s*|&nbsp;)' + quantRegex;
  601. var preSizeRegex = '(?::|\\(|>|>, | - |\\[)';
  602. var postSizeRegex = '(?:\\))?';
  603. var sizeRegexs = [ preSizeRegex + "\\s*(" + uniSizeRegex + ")\\s*" + postSizeRegex,
  604. 'rapidshare_com\\(1,"\\d+,[^,]+,(\\d+)', //rapidshare
  605. 'FileSize_master">(.+?)<\/strong>', //hellshare
  606. 'Velikost: <strong>(.+?)<\/strong>', //warserver
  607. 'File Size:(?:<\/b>) (.+?)<\/(?:p|td)>', //filesmall, unlimitzone
  608. 'online,\\w+,(\\d+),', //uploaded.net
  609. '"file_info":{"size":"(\\d+)","name":', //depositfiles.com
  610. '(?:File size|Taille) :<\/th><td>(.+?)<\/td>', //1fichier.com
  611. ';(\\d+)\n$', //share-online.biz
  612. 'label-important">Downloading<\/span>.+?(' + uniSizeRegex + ') <\/h4>', //nowdownload.eu
  613. '<h5>Size : (' + uniSizeRegex + ')<\/h5>', //mixturecloud.com,
  614. '<td>\\n\\s*Total size:\\n\\s*</td>\\n\\s*<td>\\n\\s*(.+?)\\s*</td>', //anysend.com
  615. '<span class="size">(' + uniSizeRegex + ')</span>', //easybytez.com
  616. 'span class="filename_normal">\\((' + uniSizeRegex + ')\\)</span>', //uploadable.ch
  617. ];
  618. var sizeIdx = sizeRegexs.length;
  619. //
  620. //
  621. var tooltip = "File Name: <b>";
  622. var fileName = "unknown";
  623. var nameCandidate = "";
  624. while(nameIdx--)
  625. {
  626. var nameCandidate = res.match(nameRegexs[nameIdx]);
  627. if (nameCandidate != null)
  628. {
  629. fileName = nameCandidate[1].replace(/&nbsp;/g," ").replace("<br>", "");
  630. break;
  631. }
  632. }
  633. tooltip += fileName + "</b><br>File Size: <b>";
  634. var fileSize = "unknown";
  635. var sizeCandidate = "";
  636. while(sizeIdx--)
  637. {
  638. sizeCandidate = res.match(new RegExp(sizeRegexs[sizeIdx], "i"));
  639. if (sizeCandidate != null)
  640. {
  641. fileSize = sizeCandidate[1].replace(/&nbsp;/g," ");
  642. if (/^\d+$/.test(fileSize) && fileSize >= 1024) //assume bytes
  643. {
  644. if(fileSize > (1<<30)) fileSize = Math.round(10 * fileSize / (1<<30)) / 10 + ' GB';
  645. else if(fileSize > (1<<20)) fileSize = Math.round(fileSize / (1<<20)) + ' MB';
  646. else fileSize = Math.round(fileSize / 1024) + ' KB';
  647. }
  648. break;
  649. }
  650. }
  651. tooltip += fileSize + "</b>";
  652. // Safelinking package info
  653. if (href.contains('safelinking.net/p/'))
  654. {
  655. var linkStatus = res.match(/<span style="color:green;" class="result-form">(.+?)<\/span>/);
  656. var linkTitle = res.match(/link\-title">(.+?)<\/span>/);
  657. var linkDesc = res.match(/description" class="result-form">(.+?)<\/span>/);
  658. if (linkStatus) { tooltip = "<b>Link status:</b> " + linkStatus[1].replace(/<\/?strong>/,"").replace(/<br\/>/, " "); }
  659. if (linkTitle) { tooltip += "<br><b>Title:</b> " + linkTitle[1]; }
  660. if (linkDesc) { tooltip += "<br><b>Description:</b> " + linkDesc[1]; }
  661. }
  662. link.warlc_tooltipcache = tooltip;
  663. if (mouseoverLink == link.href) //mouse cursor is still over the link
  664. {
  665. warlcTooltip.innerHTML = tooltip;
  666. }
  667. }
  668. });
  669. }
  670. }
  671.  
  672. //function to return hostname + tld
  673. function gimmeHostName(link) {
  674. if (link.contains(/([\w-]+\.(?:com?\.\w{2}|in\.ua|uk\.com|\w{2,4}))(?::\d+)?$/)) return link.match(/([\w-]+\.(?:com?\.\w{2}|in\.ua|uk\.com|\w{2,4}))(?::\d+)?$/)[1];
  675. else {
  676. console.warn("gimmeHostName error.", link);
  677. return -1;
  678. }
  679. }
  680. //Second gimmehostname function to match whole hostname
  681. function gimmeHostName2(link) {
  682. link = link.replace(/http:\/\/.*?\?http:\/\//, 'http://'); //anonymizers
  683. if (link.contains(/(?:https?:\/\/)?(?:www\.|[\w\.])*?[\w-]+\.(?:com?\.\w{2}|in\.ua|uk\.com|\w{2,4})(?::\d+)?\//)) return link.match(/(?:https?:\/\/)?(?:www\.|[\w\.])*?([\w-]+\.(?:com?\.\w{2}|in\.ua|uk\.com|\w{2,4}))(?::\d+)?\//)[1];
  684. else if (link.contains(".1fichier.com")) {
  685. return "1fichier.com";
  686. } else {
  687. console.warn("gimmeHostName error.", link);
  688. return -1;
  689. }
  690. }
  691.  
  692. function uniqArray(array) {
  693. var uniqueArray = [];
  694. $.each(array, function(i, el){
  695. if($.inArray(el, uniqueArray) === -1) uniqueArray.push(el);
  696. });
  697. return uniqueArray;
  698. }
  699.  
  700. function sendMessage(text)
  701. {
  702. var msgDiv = "<div class='WarInfoMsg'>" + text + "</div>";
  703. $(".WarInfoBox").append(msgDiv).show();
  704. setTimeout(function(){$(".WarInfoBox").hide()}, 5000);
  705. }
  706.  
  707. function genset(pref, def) {
  708. var val = preferences.general[pref];
  709. if (val == undefined) val = def;
  710. return val;
  711. }
  712.  
  713. function lsSave() {
  714. localStorage.setItem("War_Preferences", JSON.stringify(preferences));
  715. }
  716.  
  717. function setVariables()
  718. {
  719. if (firstRun)
  720. {
  721. console.warn('First run, compiling preferences object...');
  722. preferences = {
  723. hosts: {},
  724. general: {}
  725. }
  726. lsSetVal("general", "Display_tooltip_info", false);
  727. lsSetVal("general", "Display_full_links_in_link_containers", true);
  728. lsSetVal("general", "Allow_spaces_in_DL_links", false);
  729. lsSetVal("general", "Do_not_linkify_DL_links", false);
  730. lsSetVal("general", "Extabit_API_Check", false);
  731. lsSetVal("general", "Filefactory_API_Check", false);
  732. lsSetVal("general", "Processbox_Pos_Y", 0);
  733. lsSetVal("general", "Processbox_Pos_X", 90);
  734. lsSetVal("general", "Progressbox_Scaling", 100);
  735. //lsSetVal("general", "Last_Update_Check", new Date().valueOf());
  736. lsSetVal("general", "Ref_anonymize_service", ANONYMIZERS[0]);
  737. localStorage.setItem("War_First_Run", false);
  738. lsSave();
  739. }
  740.  
  741. Display_tooltip_info = genset("Display_tooltip_info", false);
  742. Display_full_links_in_link_containers = genset("Display_full_links_in_link_containers", true);
  743. Allow_spaces_in_DL_links = genset("Allow_spaces_in_DL_links", false);
  744. Do_not_linkify_DL_links = genset("Do_not_linkify_DL_links", false);
  745. Processbox_Pos_Y = genset("Processbox_Pos_Y", 0);
  746. Processbox_Pos_X = genset("Processbox_Pos_X", 90);
  747. Progressbox_Scaling = genset("Progressbox_Scaling", 100);
  748. Last_Update_Check = genset("Last_Update_Check", 0);
  749. ANONYMIZE_SERVICE = genset("Ref_anonymize_service", ANONYMIZERS[0]);
  750. ANONYMIZE_SERVICE = (ANONYMIZE_SERVICE != 'NoRed' ? ANONYMIZE_SERVICE : '');
  751. }
  752.  
  753. function hostSet(key, def) { //will get the value of the key in pref object, if key is undefined -> opposite value of default returned (to keep the compatibility with old GM_getValue and the inversed default values in War 2.0)
  754. var val = preferences.hosts[key];
  755. if (val == undefined) val = !def;
  756. return val;
  757. }
  758.  
  759. function lsSetVal(section, key, value) { //replacement of GM_setValue, valid for both sections of preferences object
  760. preferences[section][key] = value;
  761. lsSave();
  762. }
  763.  
  764. // Delinkifies the links
  765. // params:
  766. // links -> list of links or link components (note they should be sufficiently unique to identify the link on page,
  767. // e.g. 'uloz.to/xs68skxl8')
  768. function delinkifySnapshot(snapshot)
  769. {
  770. var n = snapshot.snapshotLength;
  771.  
  772. while (n--)
  773. {
  774. thisLink = snapshot.snapshotItem(n);
  775.  
  776. var spanElm = document.createElement("span");
  777. spanElm.className = thisLink.className;
  778. spanElm.innerHTML = thisLink.innerHTML;
  779.  
  780. if (Display_tooltip_info)
  781. {
  782. spanElm.href = thisLink.href;
  783. switch (thisLink.className){
  784. case "alive_link": spanElm.addEventListener("mouseover", displayTooltipInfo, false); break
  785. case "adead_link": spanElm.addEventListener("mouseover", displayTooltipError, false); break;
  786. case "obsolete_link": spanElm.addEventListener("mouseover", displayTooltipError, false); break;
  787. case "unava_link": //reserved
  788. default:
  789. }
  790. }
  791. thisLink.parentNode.replaceChild(spanElm, thisLink);
  792. }
  793. }
  794. function checkLinks(filterId)
  795. {
  796. start(filterId);
  797. }
  798.  
  799. /**
  800. * Initialises progress box including event binding and CSS
  801. */
  802. function initProgressBox()
  803. {
  804. if ($("#warlc-progressbox").length > 0)
  805. return;
  806. //progressbox css
  807. var progressboxCss = "#warlc-progressbox {position:fixed; background:lightgrey; bottom:" + Processbox_Pos_Y + "%; left:" + Processbox_Pos_X + "%; padding:5px; font-size:10px; font-weight:bold; font-family:Helvetica; width:130px; cursor:default; border:1px solid #4DD9FF; z-index:200;}\
  808. \
  809. #warlc-hostdetails {position:fixed; background:lightgrey; bottom:" + (parseInt(Processbox_Pos_Y) + 9) + "%; left:" + Processbox_Pos_X + "%; padding:5px; font-size:10px; font-weight:bold; cursor:default; border:1px solid #4DD9FF; display:none; z-index:201;}\
  810. \
  811. .warlc-progressbox-contents {right: 5px;}\
  812. \
  813. .warlc-progressbar {text-align:left; background: blue; height:3px; margin-bottom:5px; width:0px; border-radius:1.5px; }\
  814. \
  815. .warlc-progressitem { display: block; padding:2.5px 0px 2.5px 20px }\
  816. \
  817. .alive {color: green; background:transparent url(" + alive_link_png + ") no-repeat scroll 0% 50%;background-size:15px;}\
  818. \
  819. .adead {color: red; background:transparent url(" + adead_link_png + ") no-repeat scroll 0% 50%;background-size:15px;}\
  820. \
  821. .unava {color: #FFFF00; background:transparent url(ToBeAddedLater) no-repeat scroll 0% 50%;background-size:15px;}\
  822. \
  823. .processing {color: black; background:transparent url(" + processing_link_gif + ") no-repeat scroll 0% 50%;}"
  824. if (Progressbox_Scaling != 100) {
  825. $.each(progressboxCss.match(/[\d\.]+px/g), function(i, el) { //dynamic rescaling of the progressbox according to user settings
  826. progressboxCss = progressboxCss.replace(new RegExp(el + "(?!" + RAND_STRING + ")"), parseFloat(el) * Progressbox_Scaling/100 + "px" + RAND_STRING); //RAND_STRING to prevent the same value replaced twice
  827. });
  828. }
  829. progressboxCss = progressboxCss.replace(new RegExp(RAND_STRING, "g"), "").replace("ToBeAddedLater", unava_link_png); //inserting the unava_link_png at the end because the function messes up its base64 string
  830. GM_addStyle(progressboxCss);
  831. $('body').append(' <div id="warlc-progressbox">\
  832. <div class="warlc-progressbox-contents">\
  833. <div class="warlc-progressbar" aria-valuenow=0></div>\
  834. <div class="warlc-progressitems">\
  835. <span class="warlc-progressitem alive"></span>\
  836. <span class="warlc-progressitem adead"></span>\
  837. <span class="warlc-progressitem unava"></span>\
  838. <span class="warlc-progressitem processing"></span>\
  839. </div>\
  840. </div>\
  841. </div>\
  842. <div id="warlc-hostdetails"></div>');
  843. $('#warlc-progressbox').hide().click(function(){
  844. clearInterval(intervalId);
  845. $(this).hide();
  846. return false;
  847. });
  848. $(".warlc-progressitem").hover(function() {
  849. showHostDetails(this);
  850. }, function() {
  851. showHostDetails("none");
  852. });
  853. }
  854. function showHostDetails(item) {
  855. var $div = $("#warlc-hostdetails");
  856. if (item == "none") {
  857. $div.hide().removeClass();
  858. if ($("#warlc-progressbox").css("display") != "none") intervalId = setInterval(function() { updateProgress(); }, 1000);
  859. }
  860. else {
  861. var statusArr;
  862. var divTxt = "These Links are ";
  863. switch(item.className) {
  864. case "warlc-progressitem alive": divTxt += "Alive: "; statusArr = filehostsAlive; break;
  865. case "warlc-progressitem adead": divTxt += "Dead: "; statusArr = filehostsDead; break;
  866. case "warlc-progressitem unava": divTxt += "Unavailable: "; statusArr = filehostsUnava; break;
  867. case "warlc-progressitem processing": divTxt += "Still processing: "; statu