IMDb Scout Mod

Adds links to IMDb pages from the torrent, ddl, subtitles, streaming, usenet and other sites.

目前为 2021-01-31 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. //
  3. // @name IMDb Scout Mod
  4. // @version 8.4
  5. // @namespace https://github.com/Purfview/IMDb-Scout-Mod
  6. // @description Adds links to IMDb pages from the torrent, ddl, subtitles, streaming, usenet and other sites.
  7. // @icon https://i.imgur.com/u17jjYj.png
  8. // @license MIT
  9. //
  10. //
  11. // @require https://openuserjs.org/src/libs/sizzle/GM_config.js
  12. // @require https://code.jquery.com/jquery-3.5.1.min.js
  13. // @require https://greasemonkey.github.io/gm4-polyfill/gm4-polyfill.js
  14. //
  15. // @include http*://*.imdb.tld/title/tt*/
  16. // @include http*://*.imdb.tld/title/tt*/?ref*
  17. // @include http*://*.imdb.tld/title/tt*/reference*
  18. // @include http*://*.imdb.tld/search/title*
  19. // @include http*://*.imdb.tld/user/*/watchlist*
  20. // @include http*://*.imdb.tld/list/*
  21. //
  22. // @connect *
  23. // @grant GM_log
  24. // @grant GM_getValue
  25. // @grant GM_setValue
  26. // @grant GM_addStyle
  27. // @grant GM_openInTab
  28. // @grant GM_xmlhttpRequest
  29. // @grant GM_registerMenuCommand
  30. // @grant GM_info
  31. // @grant GM.log
  32. // @grant GM.getValue
  33. // @grant GM.setValue
  34. // @grant GM.addStyle
  35. // @grant GM.openInTab
  36. // @grant GM.xmlHttpRequest
  37. // @grant GM.registerMenuCommand
  38. // @grant GM.info
  39. //
  40. // ==/UserScript==
  41. //
  42. /*========================= Version History ==================================
  43.  
  44. 1.00 - Initial public release, everything works on barebones greasemonkey
  45.  
  46. 1.50 - Added the ability to select which sites to load from the GM script commands
  47. - Moved the required method to userscripts
  48. - Removed FH, NZB, Avax
  49.  
  50. 1.60 - Added style elements and shading to display on imdb
  51.  
  52. 1.62 - Fixed bug:SCC-ARC not removing when unchecked
  53. - Alphabetized list
  54.  
  55. 1.70 - Cleaned up code
  56. - Added option to not run script on page load
  57.  
  58. 1.71 - Deprecated action-box field
  59.  
  60. 1.80 - Added icons that link to OpenSubs, Criticker, RT, YT
  61.  
  62. 1.81 - Added support for tv, only displays on shows listed as 'tv series'
  63. - Added support for icheckmovies at top bar.
  64.  
  65. 1.82 - Fixed title parsing for tv shows.
  66.  
  67. 1.83 - Fixed dhive not working properly
  68.  
  69. 1.90 - Set height of preference window to 450px, added scroll bar
  70.  
  71. 1.91 - Added another 11 torrent sites
  72.  
  73. 2.00 - Added auto updater
  74.  
  75. 2.01 - Added TC, FreshOn, TVT, STF, CC
  76. - Cleaned up code (tabbing)
  77. - Removed THR
  78. - Added TV-Rage to top bar
  79.  
  80. 2.02 - Added PS, THC, HH, HDStar
  81. - Fixed CC false positive
  82.  
  83. 2.03 - TehC now uses tt
  84. - Added Raymoz mod for AT
  85.  
  86. 2.04 - Added HDbits
  87. - Added TL
  88.  
  89. 2.10 - Added genre page search functionality
  90.  
  91. 2.11 - Fixed ICM because Nuked was whining
  92.  
  93. 2.12 - Removed tvrage
  94. - Fixed iCM (added tt)
  95. - Added HDVNbits
  96. - Changed RevTT to .me
  97. - Added HDT
  98. - removed autoupdate
  99.  
  100. 2.13 - removed xvidme
  101. - reinstated autoupdate
  102. - removed google chrome code
  103. - fixed hdvn and hdt issues
  104.  
  105. 2.14 - Added @grant entries for API access
  106. - Fixed tt parser to work on imdb pages with referral info in url
  107.  
  108. 2.2 - Switch preferences window to use GM_config
  109. - Consolidate icon & site lists
  110. - Added IPT, KASS, sHD, and HDW
  111. - Fix "Open All" link
  112. - Add option for strikethroughs on search page
  113. - Removed arrays from search URLs
  114. - Spring cleaning
  115.  
  116. 2.21 - Added SSL to TVT, HDME, TC, AHD, IPT, SCC
  117. - Added SSL option for CG
  118. - Added GFT, GFT-Gems, GFT-TV
  119. - Fixed SCC, SCC-ARC search URL
  120. - Removed TheBox, TheDVDClub
  121. - Added more comments, cleaned up some more stuff
  122.  
  123. 2.22 - Fixed TehC, BTN, BTN-Req, THC
  124. - Added a bunch of TV sites, courtesy of seedless
  125. - Added "both" option for sites, and made changes
  126. to allow coexistence of movie and TV sites with
  127. the same name
  128. - Code re-organization, documentation
  129. - Re-added code to allow an array for searchUrl
  130.  
  131. 2.22.1 - Minor fixes
  132.  
  133. 2.23 - Fixed THC, BTN
  134. - Distinguish between movies and TV on search page
  135.  
  136. 2.24 - Separate load_on_start option for search page
  137. - Fix search_string on search page
  138.  
  139. 2.25 - Added some helpful text when no sites have been enabled
  140.  
  141. 2.26 - Added code to show links when on pages besides just the "front" one
  142. (e.g. http://www.imdb.com/title/tt2310332/reference)
  143.  
  144. 2.26.1 - Correctly detect TV shows when on aforementioned pages.
  145.  
  146. 2.3 - Incorporate a bunch of changes courtesy of Inguin:
  147. - Added SSL to AT, TE, D-noid, TG, YT, RT
  148. - Changed tracker short titles to canonical form ADC, KG
  149. - Updated D-noid from .me to .pw
  150. - Fixed broken AT search; also updated to use .me so avoids redirect
  151. - Added BitHQ, ET (eutorrents)
  152. - Removed two broken THC; replaced with one fixed
  153. - Removed iplay, horrorhaven, hdstar, scandbits, leecherslair
  154. - Removed needless CG http/https duplication - plenty of listed sites self-sign
  155. - A-Z sites list for readability
  156. - Cleanup YT search string
  157. - Copyedits
  158. - Clean up code (tabs, trailing spaces)
  159. - Use consistent naming style
  160. - Added Letterboxd, Subscene to icons
  161. - Added options for showing icons
  162.  
  163. 2.31 - Added preliminary check for TSH
  164. - Change all SCC links to .org
  165.  
  166. 2.31.1 - Typo fix
  167.  
  168. 2.32 - On uncertain pages, display both movie and TV sites
  169.  
  170. 2.33 - Add year to possible search params
  171. - Add rutorrent
  172.  
  173. 2.33.1 - Change KG to .in
  174.  
  175. 2.33.2 - Change TSH to .me
  176.  
  177. 2.34 - Updated AT, TPB
  178. - Removed HDWing, TVT and CHDBits
  179. - Added RARBG
  180. - Re-added reverse match checking to support rarbg
  181.  
  182. 2.35 - Fixed YouTube icon, add SubtitleSeeker icon
  183. - Added FL.ro, bB, BHD, HDS
  184. - Fixed TL, TehC, HDb, HDVN, AHD, KG
  185. - Renamed reverseMatch to positiveMatch
  186.  
  187. 2.36 - Added Wikipedia to icon sites
  188.  
  189. 2.36.1 - Typo fix
  190.  
  191. 2.37 - Add PxHD
  192.  
  193. 2.38 - Fix subtitle seeker
  194. - Added CG-c
  195. - Added FilmAffinity
  196. - Added option to skip http check entirely
  197.  
  198. 2.38.1 - Typo fix
  199.  
  200. 2.38.2 - Global replace parameters
  201.  
  202. 2.38.3 - Typo fix
  203.  
  204. 3.00 - Clean up some formatting
  205. - Add support for new IMDb page format
  206. - Update jquery
  207.  
  208. 3.0.1 - Added Classix
  209.  
  210. 3.0.2 - Updated documentation/comments
  211.  
  212. 3.0.3 - Removed GOEM, FY, PS, MT
  213. - Added Metacritic, CanIStream.It?, AllMovie, Facebook, Amazon, Cartoon Chaos, MySpleen, Secret Cinema
  214. - Fixed Wikipedia icon
  215.  
  216. 3.1 - Handle HTTP failures less silently
  217.  
  218. 3.1.1 - Fix KASS
  219.  
  220. 3.1.2 - Fix TPB, TE, HDT
  221. - Add MTV, DVDSeed
  222.  
  223. 3.1.3 - Add M-T, UHDB, HDC, Blu-ray.com
  224. - Fix scenehd, RT
  225.  
  226. 3.1.4 - Add HDClub
  227.  
  228. 3.2 - Fix the button on new-style pages
  229.  
  230. 3.2.1 - Fix AHD
  231.  
  232. 3.3 - Be less obnoxious about failed calls
  233.  
  234. 3.4 - Add Netflix icon
  235. - Remove a default parameter to satisfy Chrome
  236.  
  237. 3.5 - Add KZ, NNM, BB-HD, t411, TD, Rutor
  238. - Fix HDClub
  239. - Fix preferences in Chrome, sort sites properly
  240.  
  241. 3.5.1 - Remove DHive, Fix AHD
  242.  
  243. 4.0 - Bring in UI changes courtesy of janot
  244. - Add spaceEncode and goToUrl to site options
  245. - Add option to show results as links instead of text
  246. - Differentiate between missing and logged out
  247. - General refactoring
  248.  
  249. 4.1 - Add RARAT
  250.  
  251. 4.2 - Fix t411
  252. - Use magic .tld domain in @include
  253.  
  254. 4.3 - Set @connect in metadata block
  255.  
  256. 4.3.1 - Fix THC
  257.  
  258. 4.3.2 - Add AR, TtN
  259. - Add year and "trailer" to youtube search
  260. - Fix M-team
  261.  
  262. 4.3.3 - Fix BitHQ, PTP-Req, SCC
  263.  
  264. 4.3.4 - Fix M-team, myspleen, avistaz, eutorrents
  265. - Removed KAT
  266.  
  267. 4.3.5 - Fix IPT, Freshon
  268. - Add ExtraTorrent
  269.  
  270. 4.3.6 - Fix Demonoid, EuTorrents (now CinemaZ)
  271. - Fix "Actually search for torrents" option
  272. - Add PrivateHD for movies and tv
  273.  
  274. 4.3.7 - Apply CinemaZ fixes to AvistaZ as well
  275.  
  276. 4.3.8 - Fix SurrealMoviez and MySpleen, switch to new PTP url
  277.  
  278. 4.3.9 - Fix criticker, add CN
  279.  
  280. 4.3.10 - Fix Netflix, MTV
  281.  
  282. 4.3.11 - Add CHD back
  283.  
  284. 4.3.12 - Fix typo
  285.  
  286. 4.4 - Fix BeyondHD
  287. - Allow unicode when searching by name
  288.  
  289. 4.4.1 - Add trakt.tv
  290.  
  291. 4.4.2 - Added XS, HD-S, PTN, TBD, Blutopia
  292. - Removed Freshon, CN, ExT, t411, SCC
  293. - Fixed SC, TE, TG, Tik
  294. - Add .com for script runners that don't support .tld
  295.  
  296. 4.5 - (Chameleon)
  297. - Added an option to run on ILC request pages
  298. - Fixed running on reference pages (new imdb style)
  299. - Added a delay of 1 second between loading the same site (by domain) - no more popcorn quota timeouts
  300. - Fixed running on search pages
  301.  
  302. 4.5.1 - Removed (dead): BitHQ, TehC, FSS, ExtraTorrent, Cine-Clasico, and Secret-Cinema
  303. - Fixed the hack on goToUrl
  304.  
  305. 4.5.2 - Fixed filelist.ro, Tik, TD
  306. - Added HDHome, HDU, OurBits
  307.  
  308. 4.5.3 - Fixed TG, TE, HDSpace
  309. - Added XS
  310.  
  311. 4.5.4 - Fixed HDU
  312.  
  313. 4.5.5 - Fixed BHD
  314.  
  315. 4.6 - Option to highlight if the movie is missing from PTP
  316.  
  317. 4.7 - Added option to ignore the movie/tv distinction
  318.  
  319. 4.7.1 - Fix blutopia, hdchina, indenting
  320.  
  321. 4.7.2 - Fix SDBits, M-T
  322. - Add TTGg
  323.  
  324. 4.7.3 - Enable on https versions of imdb sites
  325. - Add TTG
  326.  
  327. 4.8.0 - Add FinVip, JoyHD, TO, TP, TS, TVCK
  328. - Fix TE, HDH, CZ, Subscene
  329. - Remove SubtitleSeeker
  330. - Rip out all site-specific code
  331. - Fix up minor code smells
  332. - Allow config name to be different from site name
  333.  
  334. 4.8.1 - Add SP
  335.  
  336. 4.8.2 - Add TMDB
  337.  
  338. 4.8.3 - Add TGx
  339. - Fix TTG, JoyHD, HDH
  340. - Remove duplicate TMDB
  341.  
  342. 4.9.0 - Add support for a user's watchlist
  343.  
  344. 4.10.0 - Add support for icon sites on the reference view
  345. - Add HTTPS for icon sites that support it
  346.  
  347. 4.11.0 - Fix search_string
  348.  
  349. 4.11.1 - Remove Blutopia
  350. Fix IPT
  351.  
  352. 4.11.2 - Add unogs
  353.  
  354. 4.11.3 - Fix TVDB
  355.  
  356. 4.11.4 - Add AB, remove ADC
  357. - Fix BHD, Demonoid, TPB, M-T, U2, BTN, BitHD
  358.  
  359. 4.11.5 - Fix conditional check
  360.  
  361. 4.12 - Update SDBits, BTN, PTP, TMDB
  362. - Apply some correctness changes
  363.  
  364. 4.12.1 - Add CCT
  365. - Update CHD, AB, TTG
  366.  
  367.  
  368. #==============================================================================#
  369. # IMDb Scout Mod:
  370. #==============================================================================#
  371.  
  372. 4.12.1-mod1 - First public release. New additions, tweaks, bugfixes.
  373.  
  374. What I can remember:
  375. - Added: Blu, Retroflix, ACM, PTE, KG Requests, SC Requests.
  376. - Tweak: Classix search, and split to Movie/TV.
  377. - Tweak: Bunch of 'loggedOutRegex' added.
  378. - Fixed: Bunch of icons.
  379. - Fixed: TL, TPB.
  380. - Fixed: Bug in 'loggedOutRegex' logic.
  381. - New feature: Distinct icons on Requests.
  382.  
  383. 4.12.1-mod2 - Removed: Canistream.it
  384. - Fixed: Few icons.
  385. - Fixed: Search bug if ampersand is in the title
  386.  
  387. 4.12.1-mod3 - Removed: RARAT.
  388. - Added: Rarelust & Zooqle.
  389. - New feature: Sites are split to public & private (config menu).
  390.  
  391. 4.12.1-mod4 - Added: YGG, CG Requests.
  392. - Tweak: CG-Cocks & CG Request icons.
  393. - Tweak: RuT search, split to TV/Movie.
  394. - Fixed: Filter out filled KG Requests.
  395. - New feature: %search_string_orig% (search by the original titles
  396. on the movie/tv pages), enabled on RuT and YGG.
  397.  
  398. 4.12.1-mod5 - Fixed: CG Request. Demonoid typo.
  399.  
  400. 4.12.1-mod6 - Removed: HDVN, HoundDawgs.
  401. - Added: 1337x, ETTV, LimeTor, HDSpain, RlsBB, DB, FF, THR, PTer.
  402. - Fixed: TD, Demonoid, RARBG.
  403. - Tweak: Bold'ed the titles of config menu sections for better visibility.
  404. - Tweak: 'Other titles' sorted in alphabetical order.
  405. - Tweak: Added 'loggedOutRegex' to all private & some public sites.
  406. - Fixed: All borked icons are fixed.
  407. - Fixed: Bug in 'loggedOutRegex' (false negative if site responds with redirect).
  408.  
  409. 4.12.1-mod7 - Added: BRT.
  410. - Tweak: SDBits, U2.
  411.  
  412. 5.0 - Fix: @namespace & @name changed to fix updating for plugins.
  413.  
  414. 5.1 - Tweak: TVV, BB-HD.
  415. - Fixed: Invisible icons on dark background JoyHD, Rarelust, CZ, Zooqle, KG.
  416. - New feature: The new layout (icons are placed at top). Option to turn it off.
  417. - New feature: Option to select background for the new layout.
  418.  
  419. 5.2 - Tweak: Small tweaks (some preferences will reset to default).
  420. - Fixed: Rarelust icon.
  421.  
  422. 5.2.1 - Fixed: Rarelust icon (forgot to update it)
  423. - Added: RlsBB-Proxy ('RlsBB' now points to the main domain)
  424.  
  425. 5.3 - Added: Tik-Req, AHD-Req.
  426. - Tweak: No icon borders if "Show results on one line" is off.
  427. - Fixed: Text color on the new layout.
  428. - New feature: Option to change size of the icons.
  429.  
  430. 5.3.1 - Added: JPTV.
  431. - Fixed: ACM icon.
  432.  
  433. 5.4 - Added: AG, CPS, Deildu (as public because open reg).
  434. - Tweak: PTP, DVDSeeds, AHD, PTer.
  435. - Fixed: Button code for legacy & new layout.
  436. - Fixed: Reference view for the new layout.
  437.  
  438. 5.5 - Added: PreDB & dozen of the subtitles sites (all of it is set to the 2nd bar).
  439. - Fixed: Subscene
  440. - New Feature: New 'Subtitles' & 'Other searchable sites' sections (config menu), all set to 2nd bar.
  441. - New Feature: Two extra searchable bars for the movies page (Search/Watchlist page shows only 1st bar).
  442. - New Feature: Extra bars can be enabled/disabled/swapped at the preferences.
  443. - New Feature: Two new 'inSecondSearchBar' and 'inThirdSearchBar' attributes.
  444. Subtitles & Other searchable sites are set to 2nd bar.
  445. 3rd bar is empty, free space for custom configuration.
  446.  
  447. 5.5.1 - Added: TVV-Req, GT, WC, RareFilm, Titlovi, MoviePosterDB, Ulož, srrDB, xREL.
  448. Tweak: PreDB, TE, 1337x, LimeTor, HDB, BTN.
  449.  
  450. 5.5.2 - Added: XDCC, ixIRC.
  451. Tweak: GT.
  452.  
  453. 5.5.3 - Added: EUC, 1337x-Proxy, LimeTor-Proxy.
  454.  
  455. 6.0 - Added: BTN-Title (if someone prefer to search by the titles).
  456. - Tweak: PTP, "Your popcorn quota" added to loggedOutRegex.
  457. - Tweak: Refinement of code, comments and documentation.
  458. - Fixed: "TV Special" is not recognized as "TV" (now it works same as "TV Movie").
  459. - Fixed: Broken TV/Movie distinction on the Search/Watchlist pages.
  460. - Fixed: Broken Watchlist search if "episode" is present.
  461. - Fixed: Broken 'Load' button on Watchlist pages.
  462. - Fixed: Broken %year% search on Search/Watchlist pages.
  463. - Fixed: Broken %goToUrl% on Search/Watchlist pages when "check for results" is on.
  464. - Fixed: Broken %goToUrl% on all pages when "check for results" is off.
  465. - Fixed: Broken %year% on TV-series pages.
  466. - Removed: 'Treat the watchlist as a search page?' option.
  467. - New Feature: Documentaries are treated as TV & Movie.
  468. - New Feature: %search_string_orig% works on Search/List/Watchlist pages too.
  469. - New Feature: Script supports List pages.
  470.  
  471. 6.0.1 - Added: TSeeds.
  472.  
  473. 6.0.2 - Tweak: TSeeds.
  474.  
  475. 6.1 - Added: DC.
  476. - Tweak: BTN-Title, WC, TVV, TVV-Req, ACM, Blu, JPTV, M-T, U2 and ect..
  477. - Tweak: Some code optimizations.
  478. - New Feature: Connection rate limiting for IMDb's domain.
  479. Sites are added more consequent on Search/List pages.
  480. - New Feature: Dynamic rates. Search on Title pages are much faster now.
  481. - New Feature: Optional 'rateLimit' attribute for sites.
  482.  
  483. 6.1.1 - Fixed: TL, TSeeds.
  484.  
  485. 6.1.2 - Added: TL-PL, 3CT, IT.
  486. - Tweaks: BTN-Req icon, Tik, Tik-Req.
  487.  
  488. 6.2 - Added: TVU, Bit-Titan, SU, Tasmanites, BDC, FE, PTMSG.
  489. - Tweaks: AHD, AHD-Req, CPS, HDB. Some rate tweaks.
  490. - Fixed: Disabling 'Show results on one line?' removed icon borders on Search/List pages.
  491. - New feature: Sites are grouped by the result states on Search/List pages (same as on Title pages).
  492. - New feature: Option to highlight preferred sites (brighter border of icon or bold text).
  493. - New feature: All icons of request sites ('-Req') are highlighted with a blue border if 'found'.
  494. - New feature: 3rd bar supported on Search/List pages.
  495. - New feature: Separate space in Config for the custom sites. Replace 'Dummy' placeholder with your custom sites.
  496.  
  497. 6.2.1 - Added: TDB.
  498. - Tweaks: SDBits, TSeeds.
  499.  
  500. 6.3 - Added: iTS.
  501. - Tweaks: TSeeds, Retroflix, Subscene.
  502. - New feature: Infotip on icons shows '(TV)' for 'TV' sites.
  503.  
  504. 6.3.1 - Added: TT, TBA.
  505.  
  506. 6.4 - Added: T2K, DT.
  507. - Tweak: Retroflix, TPB/TPB-Proxy.
  508. - Fixed: Broken "Open All" button.
  509. - New feature: Links of "icon sites" opens in new tabs.
  510. - New feature: Support for POST method with new 'mPOST' attribute.
  511.  
  512. 6.5 - Added: SpaceTor, AlloCiné, SensCritique, КиноПоиск, MovieMistakes, TrailerAddict,
  513. ScreenAnarchy, MovieChat, The Numbers, Lumiere, Box Office Mojo, OFDb.
  514. - New feature: "Total sites" stats at the top of config.
  515.  
  516. 7.0 - Tweaks : TTG, RuTor, TL-PL is renamed to TLPL.
  517. - Tweaks : TL search is by IMDb ID; searching by title is done with TL-Title.
  518. - Tweaks : Some sites moved to https. Some config tweaks.
  519. - Updated: GM_config & jQuery to latest versions.
  520. - Fixed : 'SpaceEncode' not working with 'goToUrl'.
  521. - New feature: "Load Settings" button if there is no sites enabled.
  522. - New feature: Page auto reloads after Settings close.
  523. - New feature: "Selected sites" stats at the top of config.
  524. - New feature: Greasemonkey v4 is supported.
  525.  
  526. 7.1 - Added: AS, DVDCompare, DVDTalk, DVDBeaver.
  527. - New feature: Icon sites have hyperlinks in Settings too.
  528.  
  529. 7.2 - Added: ProStyleX, TorDL, PHD-Req, DonTor, CineCalidad, DVD-Basen, MRQE, Movie-Censorship.
  530. - Tweaks: uNoGS, ETTV, CG, TVV-Req.
  531. - New feature: Icons of the "icon sites" are same size as other icons.
  532.  
  533. 7.3 - Added: OmgWtf, DrunkenSlug.
  534. - New feature: Streamlined "icon sites" area.
  535.  
  536. 7.4 - Added: NZBgeek, NZBfinder, NZBGrabit, NZBsu, abNZB, BD25, NZBplanet, NZBnoob,
  537. TVmaze, Aither.
  538. - New feature: Usenet sites are separated in Settings.
  539.  
  540. 7.5 - Added: NinjaCentral, MIAtrix, altHUB, SceneNZB, NzbNdx, nzbforyou, GingaDADDY,
  541. HDA, FindAnyFilm, xThor.
  542. - New feature: 'mPOST' can be formed as json (atm only for icon sites).
  543.  
  544. 7.6 - Added: DOGnzb, Sharewood, MovieBuff, ONLYscene, HD-F, E-T, SolidTor, MVG, BTDB, BD-film.
  545. - Tweaks: eThor, YGG (tv separated), TSeeds, RareFilm, M-T, TVCK.
  546. - Fixed: Iframes of the ads are interfering with Settings/GM_Config (script will remove ads).
  547.  
  548. 7.6.1 - Added: ExiTor, SI, Team-HuSh, G-Free.
  549.  
  550. 7.7 - New feature: HTTP status above 399 will produce an error (red border).
  551.  
  552. 7.7.1 - Tweak: BDC.
  553.  
  554. 7.7.2 - Added: ArenaBG.
  555.  
  556. 7.8 - Added: LimeTor (tv), TorDL-Proxy, RMZ.
  557. - Tweaks: LimeTor-Proxy, 1337x-Proxy, TPB-Proxy, Demonoid, Classix (icon), TT.
  558. - Tweaks: Icons of some blocked sites moved to Imgur.
  559. - New feature: Streamlined the layout of Settings.
  560.  
  561. 7.8.1 - Added: HEVCBay.
  562.  
  563. 7.8.2 - Added: GloTor, Unlimitz, HDenc, SB, Zamunda.
  564. - Removed: SceneNZB, DB.
  565. - Tweaked: YGG, PTP, KG, U2.
  566.  
  567. 7.8.3 - Tweaked: Zooqle.
  568.  
  569. 7.8.4 - Added: Yubraca.
  570.  
  571. 7.8.5 - Added: HDtime, HDAtmos, GD, DKBits, nCore, Thor-Island, Videoteka, DesiRel, Telly,
  572. WhatsOnMubi, JustWatch.
  573. - Removed: eThor.
  574. - Tweaked: ArenaBG, TGx, NNM (split to movies/tv), Bit-Titan, updated proxy sites.
  575.  
  576. 7.8.6 - Added: SpeedApp, CMS, BJS.
  577.  
  578. 7.8.7 - Added: Milkie (no search), HQS, TSH, DWR, BigBBS, CT, ST, PS, TM, MP, LS, NZBcat.
  579. - Removed: DKBits, SU, AG, ONLYscene, SpaceTor, Thor-Island.
  580.  
  581. 7.9 - New feature: Icons sorting (on button click, beta testing) by Sapphire.
  582. For "found" icons only. Behaviour:
  583. Highlighted > Others > Requests (in alphabetical order),
  584. except order of highlighted is taken from Settings.
  585. Tweaked: CT, Subs4Free.
  586.  
  587. 7.10 - Added: BWT.
  588. Fixed: Watchlist
  589.  
  590. 7.11 - Merged code from Sapphire:
  591. New feature: Sites sorting when "Show results on one line" is off.
  592. New feature: Sorting button on the reference page.
  593. - New feature: The request sites on the new line when sorting (Option).
  594. - New feature: Added the sites sorting function for the missing.
  595. - Fixed: Misalignment of the icons after sorting.
  596. - Fixed: Sorting is done by a site's name instead of url.
  597. - Fixed: Script was loading on trivia, credits, reviews & ect pages.
  598. - Fixed: NBL.
  599. - Tweak: Removed redundant @include.
  600.  
  601. 7.12 - Added: SPD, HT.
  602. - Tweaks: Sorting, Ads.
  603.  
  604. 8.0 - New feature: Automatic alphabetical icons/sites sorting on Title page.
  605. Only for Public, Private, Usenet sites on the 1st searchable bar.
  606. "Found" sites are sorted as Highlighted > Others > Requests,
  607. order of the highlighted is taken from Settings.
  608. "Missing" sites are sorted only alphabetically, "LoggedOut" & "Error" sites are not sorted.
  609. Sorting starts when less than 5 sites are left to add.
  610. Found request sites are split only after all sites are added (Optional).
  611. Custom sites must be set to the 3rd/2nd search bar or sorting wont be working properly!
  612.  
  613. 8.0.1 - Tweak: Subscene.
  614. - Tweak: Sorting functions moved above "main".
  615.  
  616. 8.0.2 - Added: WF, CrazyHD, PTM.
  617. - Removed: DT.
  618.  
  619. 8.1 - Added: SkT.
  620. - Fixed: AHD.
  621. - Removed: OpenSubsOnline
  622. - Bugfix: Firefox + GM4 combination wasn't working. New fixed GM_config lib.
  623.  
  624. 8.2 - Tweak: Updated GM_config link (fix was merged into mainline).
  625.  
  626. 8.3 - Bugfix: Page reload on Settings close wasn't working on Chrome and Opera.
  627.  
  628. 8.4 - Bugfix: No vertical spacing between icons.
  629. - Bugfix: Non-square icons.
  630.  
  631.  
  632. //==============================================================================
  633. // A list of all the sites.
  634. //==============================================================================
  635.  
  636. -= Each site is a dictionary with the following attributes: =-
  637.  
  638. # 'name':
  639. The site name, abbreviated, unique (the 'TV' atribute internaly adds 'TV' to the name).
  640.  
  641. # 'icon' (optional):
  642. Icon for the site. If not defined then script looks at site/favicon.ico .
  643.  
  644. # 'searchUrl':
  645. The URL to perform the search against, see below for how to tailor the string to a site.
  646.  
  647. # 'matchRegex':
  648. The string which appears if the searchUrl *doesn't* return a result.
  649.  
  650. # 'positiveMatch' (optional):
  651. Changes the test to return true if the searchUrl *does* return a result that matches matchRegex.
  652.  
  653. # 'TV' (optional):
  654. If true, it means that this site will only show up on TV pages.
  655. By default, sites only show up on movie pages.
  656.  
  657. # 'both' (optional):
  658. Means that the site will show up on both movie and TV pages.
  659.  
  660. # 'SpaceEncode' (optional):
  661. Changes the character used to encode spaces in movie/TV titles. The default is '+'.
  662.  
  663. # 'goToUrl' (optional):
  664. Most of the time the same URLs that are used for checking are the ones that
  665. are used to actually get to the movie, but this allows overriding that.
  666.  
  667. # 'loggedOutRegex' (optional):
  668. If any text on the page matches this regex, the site is treated as being logged out,
  669. rather than mising the movie. This option is not effected by positiveMatch.
  670.  
  671. # 'ConfigName' (optional):
  672. Use this to allow changing names without breaking existing users.
  673.  
  674. # 'inSecondSearchBar' & 'inThirdSearchBar' (optional):
  675. Places site at the extra searchable bar. Subtitles and other sites are set to 2nd bar.
  676. 3rd bar is empty, space for custom user's configuration. By defaut site goes to the 1st bar.
  677. Extra bars can be enabled/disabled/swapped at the Settings.
  678.  
  679. # 'rateLimit' (optional):
  680. Connection rate limit in milliseconds. Default is 200.
  681. On the Search/List pages it will be increased by a factor of 4.
  682.  
  683. # 'mPOST':
  684. HTTP request by POST method. For the sites that doesn't support GET.
  685. Right mouse click won't submit such request.
  686. Atm 'SpaceEncode' attribute is not supported with this method.
  687.  
  688. -= Search URL parameters: =-
  689.  
  690. # %tt%:
  691. The IMDb id with the tt prefix (e.g. tt0055630).
  692.  
  693. # %nott%:
  694. The IMDb id without the tt prefix (e.g. 0055630).
  695.  
  696. # %search_string%:
  697. The movie title (e.g. Yojimbo). Depends on your preferences at www.imdb.com/preferences/general.
  698.  
  699. # %search_string_orig%:
  700. The original movie title (e.g. Yôjinbô). Reverts to %search_string% if original title is not set at IMDb.
  701.  
  702. # %year%:
  703. The movie year (e.g. 1961).
  704.  
  705. */
  706.  
  707. // Custom sites must be set to the 3rd/2nd search bar.
  708. var custom_sites = [
  709. { 'name': 'Dummy',
  710. 'icon': 'https://i.imgur.com/C1Ux7Tv.png',
  711. 'searchUrl': 'https://dummy.dummy',
  712. 'loggedOutRegex': /dummy/,
  713. 'matchRegex': /dummy/,
  714. 'inThirdSearchBar': true,
  715. 'both': true}
  716. ];
  717.  
  718. var public_sites = [
  719. { 'name': '1337x',
  720. 'icon': 'https://i.imgur.com/3PI1RlA.png',
  721. 'searchUrl': 'https://1337x.to/category-search/%search_string%+%year%/Movies/1/',
  722. 'matchRegex': /No results were returned/},
  723. { 'name': '1337x',
  724. 'icon': 'https://i.imgur.com/3PI1RlA.png',
  725. 'searchUrl': 'https://1337x.to/category-search/%search_string%/TV/1/',
  726. 'matchRegex': /No results were returned/,
  727. 'TV': true},
  728. { 'name': '1337x-Proxy',
  729. 'icon': 'https://i.imgur.com/3PI1RlA.png',
  730. 'searchUrl': 'https://1337x.unblockit.dev/category-search/%search_string%+%year%/Movies/1/',
  731. 'matchRegex': /No results were returned/},
  732. { 'name': '1337x-Proxy',
  733. 'icon': 'https://i.imgur.com/3PI1RlA.png',
  734. 'searchUrl': 'https://1337x.unblockit.dev/category-search/%search_string%/TV/1/',
  735. 'matchRegex': /No results were returned/,
  736. 'TV': true},
  737. { 'name': 'ArenaBG',
  738. 'icon': 'https://i.imgur.com/oIfXM9t.png',
  739. 'searchUrl': 'https://arenabg.com/en/torrents/?category=1&text=%search_string_orig%+%year%',
  740. 'loggedOutRegex': /Cloudflare|Ray ID|>Грешка<|Lost password/,
  741. 'matchRegex': /no results found|Не са намерени резултати/},
  742. { 'name': 'ArenaBG',
  743. 'icon': 'https://i.imgur.com/oIfXM9t.png',
  744. 'searchUrl': 'https://arenabg.com/en/torrents/?category=2&text=%search_string_orig%',
  745. 'loggedOutRegex': /Cloudflare|Ray ID|>Грешка<|Lost password/,
  746. 'matchRegex': /no results found|Не са намерени резултати/,
  747. 'TV': true},
  748. { 'name': 'BD-film',
  749. 'searchUrl': 'https://www.bd-film.cc/search.jspx?q=%tt%',
  750. 'loggedOutRegex': /Cloudflare|Ray ID/,
  751. 'matchRegex': />0 条</,
  752. 'both': true},
  753. { 'name': 'BTDB',
  754. 'icon': 'https://i.imgur.com/IGG1XX3.png',
  755. 'searchUrl': 'https://btdb.eu/search/%search_string_orig%+%year%/0/',
  756. 'loggedOutRegex': /Cloudflare|Ray ID/,
  757. 'matchRegex': /About 0 results/,
  758. 'both': true},
  759. { 'name': 'CineCalidad',
  760. 'searchUrl': 'https://www.cinecalidad.is/?s=%tt%',
  761. 'loggedOutRegex': /Cloudflare|Ray ID/,
  762. 'matchRegex': /in_title/,
  763. 'positiveMatch': true,
  764. 'both': true},
  765. { 'name': 'CPS',
  766. 'searchUrl': 'https://mycarpathians.net/browse.php?c194=1&c60=1&c10=1&c20=1&c181=1&c183=1&c192=1&c190=1&c70=1&c30=1&c40=1&search=%search_string%',
  767. 'loggedOutRegex': /Nem vagy bejelentkezve!/,
  768. 'matchRegex': /Nincs itt semmi|Nem található/,
  769. 'both': true},
  770. { 'name': 'Deildu',
  771. 'searchUrl': 'https://deildu.net/browse.php?search=%tt%&cat=0&Lysing=1',
  772. 'loggedOutRegex': /Forgot Your Password/,
  773. 'matchRegex': /Ekkert fannst!/,
  774. 'both': true},
  775. { 'name': 'Demonoid',
  776. 'icon': 'https://i.imgur.com/XwIR7Yx.png',
  777. 'searchUrl': 'https://www.dnoid.pw/files/?query=%tt%',
  778. 'loggedOutRegex': /Ray ID|security check to access|daily site maintenance|page is not available/,
  779. 'matchRegex': /No torrents found/,
  780. 'both': true},
  781. { 'name': 'DonTor',
  782. 'icon': 'https://dontorrent.io/images/touch-icon-ipad.png',
  783. 'searchUrl': 'https://dontorrent.io/buscar/%search_string%',
  784. 'loggedOutRegex': /Cloudflare|Ray ID/,
  785. 'matchRegex': /encontrado <b>0</,
  786. 'both': true},
  787. { 'name': 'ETTV',
  788. 'searchUrl': 'https://www.ettvcentral.com/torrents-search.php?search=%search_string%+%year%',
  789. 'matchRegex': /Nothing Found/,
  790. 'both': true},
  791. { 'name': 'EUC',
  792. 'searchUrl': 'https://eliteunitedcrew.org/browse.php?search=%tt%&cat=0&incldead=1&btn=Search',
  793. 'loggedOutRegex': /Not logged in/,
  794. 'matchRegex': /nijedan torent/,
  795. 'both': true},
  796. { 'name': 'GloTor',
  797. 'icon': 'https://glodls.to/themes/NB-GloSite/images/favicon.ico',
  798. 'searchUrl': 'https://glodls.to/search_results.php?search=%search_string%+%year%&cat=1&incldead=1&inclexternal=0',
  799. 'loggedOutRegex': /Cloudflare|Ray ID/,
  800. 'matchRegex': /Nothing Found/},
  801. { 'name': 'GloTor',
  802. 'icon': 'https://glodls.to/themes/NB-GloSite/images/favicon.ico',
  803. 'searchUrl': 'https://glodls.to/search_results.php?search=%search_string%&cat=41&incldead=1&inclexternal=0',
  804. 'loggedOutRegex': /Cloudflare|Ray ID/,
  805. 'matchRegex': /Nothing Found/,
  806. 'TV': true},
  807. { 'name': 'HDenc',
  808. 'icon': 'https://hdencode.com/wp-content/uploads/2016/03/413.ico',
  809. 'searchUrl': 'https://hdencode.com/?s=%tt%',
  810. 'loggedOutRegex': /Cloudflare|Ray ID/,
  811. 'matchRegex': /No content available/,
  812. 'both': true},
  813. { 'name': 'HEVCBay',
  814. 'icon': 'https://hevcbay.com/wp-content/uploads/fbrfg/favicon-32x32.png',
  815. 'searchUrl': 'https://hevcbay.com/?s="%search_string%"',
  816. 'loggedOutRegex': /Cloudflare|Ray ID/,
  817. 'matchRegex': /nothing matched/},
  818. { 'name': 'ilCorSaRoNeRo',
  819. 'searchUrl': 'https://ilcorsaronero.link/argh.php?search=%search_string_orig%+%year%',
  820. 'loggedOutRegex': /Cloudflare|Ray ID/,
  821. 'matchRegex': /Nessun torrent trovato/,
  822. 'both': true},
  823. { 'name': 'ixIRC',
  824. 'icon': 'https://ixirc.com/favicon.png',
  825. 'searchUrl': 'https://ixirc.com/?q=%search_string_orig%+%year%',
  826. 'matchRegex': /No results/},
  827. { 'name': 'ixIRC',
  828. 'icon': 'https://ixirc.com/favicon.png',
  829. 'searchUrl': 'https://ixirc.com/?q=%search_string_orig%',
  830. 'matchRegex': /No results/,
  831. 'TV': true},
  832. { 'name': 'KZ',
  833. 'searchUrl': 'http://kinozal.tv/browse.php?s=%search_string%+%year%&g=0&c=1002&v=0&d=0&w=0&t=0&f=0',
  834. 'matchRegex': 'Нет активных раздач, приносим извинения. Пожалуйста, уточните параметры поиска'},
  835. { 'name': 'KZ',
  836. 'searchUrl': 'http://kinozal.tv/browse.php?s=%search_string%+%year%&g=0&c=1001&v=0&d=0&w=0&t=0&f=0',
  837. 'matchRegex': 'Нет активных раздач, приносим извинения. Пожалуйста, уточните параметры поиска',
  838. 'TV': true},
  839. { 'name': 'LimeTor',
  840. 'icon': 'https://i.imgur.com/cLRWNQK.png',
  841. 'loggedOutRegex': /Ray ID|security check to access|Please turn JavaScript/,
  842. 'searchUrl': 'https://www.limetorrents.info/search/movies/%search_string%+%year%/seeds/1/',
  843. 'matchRegex': /csprite_dl14/,
  844. 'positiveMatch': true},
  845. { 'name': 'LimeTor',
  846. 'icon': 'https://i.imgur.com/cLRWNQK.png',
  847. 'loggedOutRegex': /Ray ID|security check to access|Please turn JavaScript/,
  848. 'searchUrl': 'https://www.limetorrents.info/search/tv/%search_string%/seeds/1/',
  849. 'matchRegex': /csprite_dl14/,
  850. 'positiveMatch': true,
  851. 'TV': true},
  852. { 'name': 'LimeTor-Proxy',
  853. 'icon': 'https://i.imgur.com/cLRWNQK.png',
  854. 'loggedOutRegex': /Ray ID|security check to access|Please turn JavaScript/,
  855. 'searchUrl': 'https://limetorrents.unblockit.dev/search/movies/%search_string%+%year%/seeds/1/',
  856. 'matchRegex': /csprite_dl14/,
  857. 'positiveMatch': true},
  858. { 'name': 'LimeTor-Proxy',
  859. 'icon': 'https://i.imgur.com/cLRWNQK.png',
  860. 'loggedOutRegex': /Ray ID|security check to access|Please turn JavaScript/,
  861. 'searchUrl': 'https://limetorrents.unblockit.dev/search/tv/%search_string%/seeds/1/',
  862. 'matchRegex': /csprite_dl14/,
  863. 'positiveMatch': true,
  864. 'TV': true},
  865. { 'name': 'MVG',
  866. 'searchUrl': 'https://forums.mvgroup.org/maintracker.php?filter=%search_string%',
  867. 'loggedOutRegex': /Cloudflare|Ray ID|forgotten my password/,
  868. 'matchRegex': /btsmall.gif/,
  869. 'positiveMatch': true,
  870. 'TV': true},
  871. { 'name': 'MVG-F',
  872. 'searchUrl': 'https://forums.mvgroup.org/forumtracker.php?filter=%search_string%',
  873. 'loggedOutRegex': /Cloudflare|Ray ID|forgotten my password/,
  874. 'matchRegex': /btsmall.gif/,
  875. 'positiveMatch': true,
  876. 'TV': true},
  877. { 'name': 'NNM',
  878. 'searchUrl': 'https://nnmclub.to/forum/tracker.php?f[]=731&f[]=733&f[]=730&f[]=732&f[]=230&f[]=659&f[]=231&f[]=660&f[]=661&f[]=890&f[]=270&f[]=218&f[]=219&f[]=954&f[]=888&f[]=217&f[]=1293&f[]=1298&f[]=320&f[]=677&f[]=1177&f[]=319&f[]=678&f[]=885&f[]=908&f[]=1310&f[]=909&f[]=910&f[]=911&f[]=912&f[]=221&f[]=222&f[]=882&f[]=889&f[]=225&f[]=226&f[]=227&f[]=1296&f[]=891&f[]=1299&f[]=682&f[]=694&f[]=884&f[]=1211&f[]=693&f[]=913&f[]=228&f[]=1150&f[]=1313&f[]=1312&f[]=321&f[]=255&f[]=906&f[]=623&f[]=622&f[]=621&f[]=632&f[]=627&f[]=626&f[]=625&f[]=644&f[]=635&f[]=634&f[]=638&f[]=646&f[]=1155&f[]=1156&f[]=1099&f[]=1098&f[]=892&f[]=668&f[]=669&nm=%search_string_orig%+%year%',
  879. 'matchRegex': 'Не найдено'},
  880. { 'name': 'NNM',
  881. 'searchUrl': 'https://nnmclub.to/forum/tracker.php?f[]=658&f[]=232&f[]=1221&f[]=1220&f[]=768&f[]=1300&f[]=922&f[]=770&f[]=1320&f[]=780&f[]=781&f[]=1322&f[]=769&f[]=706&f[]=577&f[]=894&f[]=578&f[]=580&f[]=579&f[]=953&f[]=581&f[]=806&f[]=714&f[]=761&f[]=809&f[]=924&f[]=812&f[]=591&f[]=588&f[]=589&f[]=598&f[]=652&f[]=593&f[]=587&f[]=584&f[]=586&f[]=585&f[]=596&f[]=614&f[]=623&f[]=622&f[]=621&f[]=632&f[]=627&f[]=626&f[]=625&f[]=644&f[]=635&f[]=634&f[]=638&f[]=646&nm=%search_string_orig%+%year%',
  882. 'matchRegex': 'Не найдено',
  883. 'TV': true},
  884. { 'name': 'ProStyleX',
  885. 'icon': 'https://i.imgur.com/IlikrfD.png',
  886. 'searchUrl': 'https://prostylex.org/search.php?c1=1&c2=1&c3=1&c4=1&c5=1&c6=1&c7=1&c8=1&c9=1&c10=1&c65=1&c68=1&search=%search_string%&cat=0&lang=0',
  887. 'loggedOutRegex': /Cloudflare|Ray ID/,
  888. 'matchRegex': /No torrents were found/},
  889. { 'name': 'ProStyleX',
  890. 'icon': 'https://i.imgur.com/IlikrfD.png',
  891. 'searchUrl': 'https://prostylex.org/search.php?c12=1&c13=1&c14=1&c15=1&c17=1&c65=1&c68=1&search=%search_string%&cat=0&lang=0',
  892. 'loggedOutRegex': /Cloudflare|Ray ID/,
  893. 'matchRegex': /No torrents were found/,
  894. 'TV': true},
  895. { 'name': 'RARBG',
  896. 'searchUrl': 'https://rarbgweb.org/torrents.php?imdb=%tt%',
  897. 'loggedOutRegex': /something wrong|Please wait|enter the captcha|too many requests/,
  898. 'matchRegex': '//dyncdn.me/static/20/images/imdb_thumb.gif',
  899. 'positiveMatch': true,
  900. 'rateLimit': 250,
  901. 'both': true},
  902. { 'name': 'RareFilm',
  903. 'icon': 'https://i.imgur.com/WmDYJjv.png',
  904. 'searchUrl': 'https://rarefilm.net/?s=%tt%',
  905. 'loggedOutRegex': /Cloudflare|Ray ID/,
  906. 'matchRegex': /Nothing Found/,
  907. 'both': true},
  908. { 'name': 'Rarelust',
  909. 'icon': 'https://i.imgur.com/kaaYhsp.png',
  910. 'searchUrl': 'https://rarelust.com/?s=%tt%',
  911. 'matchRegex': 'Nothing Found'},
  912. { 'name': 'RlsBB',
  913. 'icon': 'https://i.imgur.com/Ve3T1rC.png',
  914. 'searchUrl': 'http://search.rlsbb.ru/Home/GetPost?phrase=%tt%&pindex=1&content=true&type=Simple',
  915. 'goToUrl': 'http://rlsbb.ru/?serach_mode=light&s=%tt%',
  916. 'loggedOutRegex': /Ray ID|security check to access/,
  917. 'matchRegex': /"results":\[\]|Not Found/,
  918. 'rateLimit': 250,
  919. 'both': true},
  920. { 'name': 'RlsBB-Proxy',
  921. 'icon': 'https://i.imgur.com/Ve3T1rC.png',
  922. 'searchUrl': 'http://search.proxybb.com/Home/GetPost?phrase=%tt%&pindex=1&content=true&type=Simple',
  923. 'goToUrl': 'http://search.proxybb.com/?serach_mode=light&s=%tt%',
  924. 'loggedOutRegex': /Ray ID|security check to access/,
  925. 'matchRegex': /"results":\[\]|Not Found/,
  926. 'rateLimit': 250,
  927. 'both': true},
  928. { 'name': 'RMZ',
  929. 'icon': 'https://i.imgur.com/gEZae9b.png',
  930. 'searchUrl': 'https://rmz.cr/search/%search_string%/titles/exact/m',
  931. 'loggedOutRegex': /Cloudflare|Ray ID/,
  932. 'matchRegex': /No movy available/},
  933. { 'name': 'RMZ',
  934. 'icon': 'https://i.imgur.com/gEZae9b.png',
  935. 'searchUrl': 'https://rmz.cr/search/%search_string%/titles/exact/s',
  936. 'loggedOutRegex': /Cloudflare|Ray ID/,
  937. 'matchRegex': /No tv show available/,
  938. 'TV': true},
  939. { 'name': 'RuT',
  940. 'searchUrl': 'https://rutracker.org/forum/tracker.php?f=100,101,103,1105,1114,1213,1235,124,1247,1278,1280,1281,1327,1363,1389,1391,140,1453,1457,1467,1468,1469,1475,1543,1576,1577,1666,1670,187,1900,1908,1936,194,1950,2076,208,2082,209,2090,2091,2092,2093,2107,2109,2110,2112,212,2123,2139,2159,2160,2163,2164,2166,2168,2169,2176,2177,2178,2198,2199,22,2200,2201,2220,2221,2258,2323,2339,2343,2365,2380,2459,249,2491,251,2535,2538,2540,294,312,313,33,352,376,4,484,500,505,511,521,539,549,552,56,572,599,656,671,672,7,709,752,821,822,851,863,876,877,893,905,921,93,930,934,941,97,979,98&nm=%search_string_orig%',
  941. 'loggedOutRegex': /Введите ваше имя/,
  942. 'matchRegex': 'Не найдено'},
  943. { 'name': 'RuT',
  944. 'searchUrl': 'https://rutracker.org/forum/tracker.php?f=103,1102,1105,1114,1120,1214,1242,1248,1278,1280,1281,1288,1301,1327,1359,1363,1389,1391,1453,1459,1460,1463,1467,1468,1469,1475,1493,1498,1531,1537,1539,1574,1690,1803,193,1938,1939,1940,195,2076,2082,2104,2107,2110,2112,2123,2139,2159,2160,2163,2164,2166,2168,2169,2176,2177,2178,2323,235,2380,2412,242,249,2491,251,2535,2538,266,294,315,325,387,489,500,534,552,56,594,599,607,656,671,672,694,704,717,718,721,752,775,781,815,816,819,821,825,842,851,863,864,876,893,915,97,979,98&nm=%search_string_orig%',
  945. 'loggedOutRegex': /Введите ваше имя/,
  946. 'matchRegex': 'Не найдено',
  947. 'TV': true},
  948. { 'name': 'Rutor',
  949. 'searchUrl': 'http://rutor.info/search/0/0/010/0/%tt%',
  950. 'loggedOutRegex': /Connection refused|Gateway Time-out/,
  951. 'matchRegex': 'Результатов поиска 0',
  952. 'both': true},
  953. { 'name': 'SkT',
  954. 'searchUrl': 'https://sktorrent.eu/torrent/torrents.php?search=%search_string_orig%+%year%',
  955. 'loggedOutRegex': /Cloudflare|Ray ID/,
  956. 'matchRegex': /Nenasli ste co ste/,
  957. 'both': true},
  958. { 'name': 'SolidTor',
  959. 'icon': 'https://solidtorrents.net/favicon.png',
  960. 'searchUrl': 'https://solidtorrents.net/search?q=%search_string_orig%+%year%',
  961. 'loggedOutRegex': /Cloudflare|Ray ID/,
  962. 'matchRegex': /Not Found!/,
  963. 'both': true},
  964. { 'name': 'T2K',
  965. 'searchUrl': 'https://torrentz2k.xyz/search/',
  966. 'loggedOutRegex': /Ray ID|security check to access|Please turn JavaScript/,
  967. 'matchRegex': /No Results Found/,
  968. 'mPOST': 'q=%search_string%&category=movies&x=0&y=0'},
  969. { 'name': 'T2K',
  970. 'searchUrl': 'https://torrentz2k.xyz/search/',
  971. 'loggedOutRegex': /Ray ID|security check to access|Please turn JavaScript/,
  972. 'matchRegex': /No Results Found/,
  973. 'mPOST': 'q=%search_string%&category=movies&x=0&y=0',
  974. 'TV': true},
  975. { 'name': 'TGx',
  976. 'icon': 'https://torrentgalaxy.to/common/favicon/favicon-16x16.png',
  977. 'searchUrl': 'https://torrentgalaxy.to/torrents.php?search=%tt%',
  978. 'matchRegex': /No results found/,
  979. 'both': true},
  980. { 'name': 'TorDL',
  981. 'icon': 'https://i.imgur.com/N0pLxiZ.png',
  982. 'searchUrl': 'https://www.torrentdownloads.me/search/?new=1&s_cat=0&search=%search_string%',
  983. 'loggedOutRegex': /Cloudflare|Ray ID/,
  984. 'matchRegex': /No results found/,
  985. 'both': true},
  986. { 'name': 'TorDL-Proxy',
  987. 'icon': 'https://i.imgur.com/N0pLxiZ.png',
  988. 'searchUrl': 'https://torrentdownloads.unblockit.dev/search/?new=1&s_cat=0&search=%search_string%',
  989. 'loggedOutRegex': /Cloudflare|Ray ID/,
  990. 'matchRegex': /No results found/,
  991. 'both': true},
  992. { 'name': 'TPB',
  993. 'searchUrl': 'https://apibay.org/q.php?q=%search_string%&cat=201,202,207,209',
  994. 'goToUrl': 'https://thepiratebay.org/search.php?q=%search_string%&cat=201,202,207,209',
  995. 'loggedOutRegex': /Ray ID/,
  996. 'matchRegex': /No results/},
  997. { 'name': 'TPB',
  998. 'searchUrl': 'https://apibay.org/q.php?q=%search_string%&cat=205,208',
  999. 'goToUrl': 'https://thepiratebay.org/search.php?q=%search_string%&cat=205,208',
  1000. 'loggedOutRegex': /Ray ID/,
  1001. 'matchRegex': /No results/,
  1002. 'TV': true},
  1003. { 'name': 'TPB-Proxy',
  1004. 'searchUrl': 'https://apibay.org/q.php?q=%search_string%&cat=201,202,207,209',
  1005. 'goToUrl': 'https://pirateproxy.tube/search.php?q=%search_string%&cat=201,202,207,209',
  1006. 'loggedOutRegex': /Ray ID/,
  1007. 'matchRegex': /No results/},
  1008. { 'name': 'TPB-Proxy',
  1009. 'searchUrl': 'https://apibay.org/q.php?q=%search_string%&cat=205,208',
  1010. 'goToUrl': 'https://pirateproxy.tube/search.php?q=%search_string%&cat=205,208',
  1011. 'loggedOutRegex': /Ray ID/,
  1012. 'matchRegex': /No results/,
  1013. 'TV': true},
  1014. { 'name': 'TVU',
  1015. 'searchUrl': 'https://tvunderground.org.ru/index.php?show=search&search=%search_string_orig%+%year%',
  1016. 'matchRegex': /no results|aucun résultat|keine Ergebnisse|encontrado resultados|ha dato risultati|leverde niks|ingen resultat|Nie Znaleziono|sonuç getirmedi/},
  1017. { 'name': 'TVU',
  1018. 'searchUrl': 'https://tvunderground.org.ru/index.php?show=search&search=%search_string_orig%',
  1019. 'matchRegex': /no results|aucun résultat|keine Ergebnisse|encontrado resultados|ha dato risultati|leverde niks|ingen resultat|Nie Znaleziono|sonuç getirmedi/,
  1020. 'TV': true},
  1021. { 'name': 'Videoteka',
  1022. 'icon': 'https://i.imgur.com/C1Ux7Tv.png',
  1023. 'searchUrl': 'http://videoteka.org/?p=torrents&pid=10&keywords=%tt%&search_type=description',
  1024. 'loggedOutRegex': /Cloudflare|Ray ID/,
  1025. 'matchRegex': /no results found|Nič ni najdeno/,
  1026. 'both': true},
  1027. { 'name': 'WC',
  1028. 'icon': 'https://i.imgur.com/ojFZp6N.png',
  1029. 'searchUrl': 'https://worldscinema.org/?s=%tt%',
  1030. 'matchRegex': /Nothing Found/,
  1031. 'both': true},
  1032. { 'name': 'XDCC',
  1033. 'searchUrl': 'https://www.xdcc.eu/search.php?searchkey=%search_string_orig%+%year%',
  1034. 'matchRegex': /No result found/},
  1035. { 'name': 'XDCC',
  1036. 'searchUrl': 'https://www.xdcc.eu/search.php?searchkey=%search_string_orig%',
  1037. 'matchRegex': /No result found/,
  1038. 'TV': true},
  1039. { 'name': 'YGG',
  1040. 'searchUrl': 'https://www2.yggtorrent.si/engine/search?name=%search_string_orig%&category=2145&sub_category=all&do=search',
  1041. 'loggedOutRegex': /Ray ID|security check to access/,
  1042. 'matchRegex': 'Aucun résultat',
  1043. 'both': true},
  1044. { 'name': 'Zooqle',
  1045. 'icon': 'https://i.imgur.com/jqKceYP.png',
  1046. 'searchUrl': 'https://zooqle.com/search?q=%tt%',
  1047. 'loggedOutRegex': /Cloudflare|Ray ID|security check to access/,
  1048. 'matchRegex': /no torrents match|Come back later/,
  1049. 'both': true}
  1050. ];
  1051.  
  1052. var private_sites = [
  1053. { 'name': '3CT',
  1054. 'icon': 'https://i.imgur.com/ECgERTH.png',
  1055. 'searchUrl': 'https://3changtrai.com/torrents.php?incldead=0&spstate=0&search=%tt%&search_area=4&search_mode=0',
  1056. 'loggedOutRegex': /Ray ID|SSL \(HTTPS\)/,
  1057. 'matchRegex': /Không tìm thấy/,
  1058. 'both': true},
  1059. { 'name': 'AB',
  1060. 'searchUrl': 'https://animebytes.tv/torrents.php?searchstr=%search_string%&action=advanced&search_type=title&tags=-lolicon+-shotacon+&sort=relevance&way=desc&hentai=0&showhidden=1&anime%5Btv_series%5D=1&anime%5Btv_special%5D=1&anime%5Bmovie%5D=1&anime%5Bova%5D=1&anime%5Bona%5D=1&anime%5Bdvd_special%5D=1&anime%5Bbd_special%5D=1&airing=2',
  1061. 'loggedOutRegex': /Forgot your username|Ray ID/,
  1062. 'matchRegex': /Translation: No search results/,
  1063. 'both': true},
  1064. { 'name': 'ACM',
  1065. 'searchUrl': 'https://asiancinema.me/torrents/filter?imdb=%tt%',
  1066. 'loggedOutRegex': /Forgot Your Password|Ray ID/,
  1067. 'matchRegex': /<tbody>\s*<\/tbody>/,
  1068. 'both': true},
  1069. { 'name': 'AHD',
  1070. 'searchUrl': 'https://awesome-hd.club/torrents.php?id=%tt%',
  1071. 'loggedOutRegex': /Keep me logged in.|Gateway Time-out|Password Reset/,
  1072. 'matchRegex': /Your search did not match anything.|Error 404/,
  1073. 'both': true},
  1074. { 'name': 'AHD-Req',
  1075. 'icon': 'https://i.imgur.com/wEs3QZL.png',
  1076. 'searchUrl': 'https://awesome-hd.club/requests.php?submit=true&search=%tt%',
  1077. 'loggedOutRegex': /Keep me logged in.|Gateway Time-out|Password Reset/,
  1078. 'matchRegex': /Nothing found!|Error 404/,
  1079. 'both': true},
  1080. { 'name': 'Aither',
  1081. 'searchUrl': 'https://aither.cc/torrents/filter?imdb=%tt%',
  1082. 'loggedOutRegex': /Cloudflare|Ray ID|Forgot Your Password/,
  1083. 'matchRegex': /<tbody>\s*<\/tbody>/,
  1084. 'both': true},
  1085. { 'name': 'ANT',
  1086. 'icon': 'https://i.imgur.com/hKZo4s2.png',
  1087. 'searchUrl': 'https://anthelion.me/torrents.php?searchstr=%search_string%&order_by=time&order_way=desc&group_results=1&action=basic&searchsubmit=1',
  1088. 'loggedOutRegex': /You appear to have cookies disabled./,
  1089. 'matchRegex': /Your search did not match anything/},
  1090. { 'name': 'AR',
  1091. 'searchUrl': 'https://alpharatio.cc/torrents.php?searchstr=%search_string%+%year%&tags_type=1&order_by=time&order_way=desc&filter_cat%5B8%5D=1&filter_cat%5B9%5D=1&filter_cat%5B10%5D=1&filter_cat%5B11%5D=1&filter_cat%5B12%5D=1&filter_cat%5B13%5D=1&filter_cat%5B15%5D=1&action=advanced&searchsubmit=1',
  1092. 'loggedOutRegex': /Ray ID|<title>Login :: AlphaRatio|Something was wrong/,
  1093. 'matchRegex': /Your search did not match anything/},
  1094. { 'name': 'AR',
  1095. 'searchUrl': 'https://alpharatio.cc/torrents.php?searchstr=%search_string%&tags_type=1&order_by=time&order_way=desc&filter_cat%5B1%5D=1&filter_cat%5B2%5D=1&filter_cat%5B3%5D=1&filter_cat%5B4%5D=1&filter_cat%5B5%5D=1&filter_cat%5B6%5D=1&filter_cat%5B7%5D=1&action=advanced&searchsubmit=1',
  1096. 'loggedOutRegex': /Ray ID|<title>Login :: AlphaRatio|Something was wrong/,
  1097. 'matchRegex': /Your search did not match anything/,
  1098. 'TV': true},
  1099. { 'name': 'AS',
  1100. 'icon': 'https://i.imgur.com/Hik3s88.png',
  1101. 'searchUrl': 'https://asylumshare.net/torrents-search.php?c120=1&c4=1&c47=1&c114=1&c23=1&c24=1&c25=1&c26=1&c27=1&c33=1&c117=1&c34=1&c35=1&c36=1&c37=1&c124=1&c42=1&c7=1&c39=1&c5=1&c41=1&c40=1&c6=1&c95=1&c110=1&c49=1&search="%search_string_orig%"',
  1102. 'loggedOutRegex': /Cookies MUST|Cookies DEVEM|max_user_connections/,
  1103. 'matchRegex': /Nada encontrado/,
  1104. 'both': true},
  1105. { 'name': 'AT',
  1106. 'icon': 'https://i.imgur.com/ON1FGGO.png',
  1107. 'searchUrl': 'https://avistaz.to/movies?search=&imdb=%tt%',
  1108. 'loggedOutRegex': /Forgot Your Password/,
  1109. 'matchRegex': /class="overlay-container"/,
  1110. 'positiveMatch': true},
  1111. { 'name': 'AT',
  1112. 'icon': 'https://i.imgur.com/ON1FGGO.png',
  1113. 'searchUrl': 'https://avistaz.to/tv-shows?search=&imdb=%tt%',
  1114. 'loggedOutRegex': /Forgot Your Password/,
  1115. 'matchRegex': /class="overlay-container"/,
  1116. 'positiveMatch': true,
  1117. 'TV': true},
  1118. { 'name': 'bB',
  1119. 'searchUrl': 'https://baconbits.org/torrents.php?action=basic&filter_cat[9]=1&searchstr=%search_string%+%year%',
  1120. 'loggedOutRegex': /Lost your password/,
  1121. 'matchRegex': /Your search was way too l33t/},
  1122. { 'name': 'bB',
  1123. 'searchUrl': 'https://baconbits.org/torrents.php?action=basic&filter_cat[8]=1&filter_cat[10]=1&searchstr=%search_string%',
  1124. 'loggedOutRegex': /Lost your password/,
  1125. 'matchRegex': /Your search was way too l33t/,
  1126. 'TV': true},
  1127. { 'name': 'BB-HD',
  1128. 'searchUrl': 'https://bluebird-hd.org/browse.php?search=&incldead=0&cat=0&dsearch=%tt%&stype=or',
  1129. 'loggedOutRegex': /Восстановление пароля|Bad Gateway/,
  1130. 'matchRegex': /Nothing found|Ничего не найдено/,
  1131. 'both': true},
  1132. { 'name': 'BDC',
  1133. 'icon': 'https://i.imgur.com/zO6inRw.png',
  1134. 'searchUrl': 'https://broadcity.in/browse.php?do=search&search_type=t_genre&keywords=%tt%',
  1135. 'loggedOutRegex': /Recover Password|Şifre Sıfırlama|BunnyGuard|CloudBunny|>Fatal Error</,
  1136. 'matchRegex': /dl.png/,
  1137. 'positiveMatch': true,
  1138. 'both': true},
  1139. { 'name': 'BHD',
  1140. 'searchUrl': 'https://beyond-hd.me/torrents/all?search=&doSearch=Search&imdb=%nott%',
  1141. 'loggedOutRegex': /FORGET PASSWORD/,
  1142. 'matchRegex': /<h5 class="text-bold text-danger">N\/A<\/h5>/,
  1143. 'both': true},
  1144. { 'name': 'BigBBS',
  1145. 'searchUrl': 'http://bigbbs.eu/?p=torrents&pid=10&keywords=%tt%&search_type=description',
  1146. 'loggedOutRegex': /Cloudflare|Ray ID|Odzyskaj hasło/,
  1147. 'matchRegex': /no results found|Nic nie znaleziono/,
  1148. 'both': true},
  1149. { 'name': 'Bit-Titan',
  1150. 'searchUrl': 'https://bit-titan.net/moviebase.php?text=%tt%',
  1151. 'loggedOutRegex': /eingeschaltet haben um dich|jscheck.php|JavaScript aktivieren/,
  1152. 'matchRegex': /download\.php/,
  1153. 'positiveMatch': true,
  1154. 'both': true},
  1155. { 'name': 'BitHD',
  1156. 'searchUrl': 'https://www.bit-hdtv.com/torrents.php?search=%tt%&options=4',
  1157. 'loggedOutRegex': /Forgot your password/,
  1158. 'matchRegex': /No match!/},
  1159. { 'name': 'BJS',
  1160. 'searchUrl': 'https://bj-share.info/torrents.php?searchstr=%tt%',
  1161. 'loggedOutRegex': /Cloudflare|Ray ID|Recuperar senha/,
  1162. 'matchRegex': /Sem resultados/,
  1163. 'both': true},
  1164. { 'name': 'Blu',
  1165. 'searchUrl': 'https://blutopia.xyz/torrents/filter?imdb=%tt%',
  1166. 'loggedOutRegex': /Forgot Your Password|Service Unavailable/,
  1167. 'matchRegex': /<tbody>\s*<\/tbody>/,
  1168. 'both': true},
  1169. { 'name': 'BRT',
  1170. 'icon': 'https://i.imgur.com/KVaHMKi.png',
  1171. 'searchUrl': 'https://brasiltracker.org/torrents.php?searchstr=%tt%',
  1172. 'loggedOutRegex': /Recuperar senha/,
  1173. 'matchRegex': /retornou nenhum resultado/,
  1174. 'both': true},
  1175. { 'name': 'BTN',
  1176. 'searchUrl': 'https://broadcasthe.net/torrents.php?imdb=%tt%',
  1177. 'loggedOutRegex': /Lost your password\?/,
  1178. 'matchRegex': /Error 404/,
  1179. 'rateLimit': 125,
  1180. 'TV': true},
  1181. { 'name': 'BTN-Title',
  1182. 'searchUrl': 'https://broadcasthe.net/torrents.php?action=basic&searchstr=%search_string_orig%',
  1183. 'loggedOutRegex': /Lost your password\?/,
  1184. 'matchRegex': /No search results/,
  1185. 'rateLimit': 125,
  1186. 'TV': true},
  1187. { 'name': 'BTN-Req',
  1188. 'icon': 'https://i.imgur.com/foa4ZKI.png',
  1189. 'searchUrl': 'https://broadcasthe.net/requests.php?search=%search_string%',
  1190. 'loggedOutRegex': /Lost your password\?/,
  1191. 'matchRegex': /Nothing found/,
  1192. 'rateLimit': 125,
  1193. 'TV': true},
  1194. { 'name': 'BWT',
  1195. 'searchUrl': 'https://bwtorrents.tv/index.php?search=%search_string_orig%+%year%&blah=0&cat=0&incldead=0',
  1196. 'loggedOutRegex': /Cloudflare|Ray ID|FORGOT PASSWORD/,
  1197. 'matchRegex': /Nothing found/,
  1198. 'both': true},
  1199. { 'name': 'CaCh',
  1200. 'searchUrl': 'http://www.cartoonchaos.org/index.php?page=torrents&search=%search_string%&category=0&options=0&active=0',
  1201. 'loggedOutRegex': /not authorized to view the Torrents/,
  1202. 'matchRegex': />Av.<\/td>\s*<\/tr>\s*<\/table>/,
  1203. 'both': true},
  1204. { 'name': 'CCT',
  1205. 'searchUrl': 'https://concertos.live/torrents?imdb=%nott%',
  1206. 'loggedOutRegex': /Forgot Your Password/,
  1207. 'matchRegex': /ago/,
  1208. 'positiveMatch': true,
  1209. 'both': true},
  1210. { 'name': 'CG',
  1211. 'searchUrl': 'https://cinemageddon.net/browse.php?search=%tt%',
  1212. 'loggedOutRegex': /Ray ID|Not logged in!/,
  1213. 'matchRegex': /Nothing found!/},
  1214. { 'name': 'CG-c',
  1215. 'icon': 'https://i.imgur.com/CdCbVW4.png',
  1216. 'searchUrl': 'https://cinemageddon.net/cocks/endoscope.php?what=imdb&q=%tt%',
  1217. 'loggedOutRegex': /Ray ID|Not logged in!/,
  1218. 'matchRegex': /Nothing found!/},
  1219. { 'name': 'CG-Req',
  1220. 'icon': 'https://i.imgur.com/305SsHL.png',
  1221. 'searchUrl': 'https://cinemageddon.net/viewrequests.php?search=%tt%&incdesc=1&filter=true',
  1222. 'loggedOutRegex': /Ray ID|Not logged in!/,
  1223. 'matchRegex': /Nothing found./},
  1224. { 'name': 'CHD',
  1225. 'searchUrl': 'https://chdbits.co/torrents.php?incldead=0&spstate=0&inclbookmarked=0&search_area=4&search_mode=0&search=%tt%',
  1226. 'loggedOutRegex': /SSL \(HTTPS\)/,
  1227. 'matchRegex': /Nothing found/},
  1228. { 'name': 'Classix',
  1229. 'icon': 'http://classix-unlimited.co.uk/themes/default/images/favicon.ico',
  1230. 'searchUrl': 'http://classix-unlimited.co.uk/torrents-search.php?search="%search_string%"&parent_cat=Movies',
  1231. 'loggedOutRegex': /Sorry this is a private site/,
  1232. 'matchRegex': /Database Error/},
  1233. { 'name': 'Classix',
  1234. 'icon': 'http://classix-unlimited.co.uk/themes/default/images/favicon.ico',
  1235. 'searchUrl': 'http://classix-unlimited.co.uk/torrents-search.php?search="%search_string%"&parent_cat=TV',
  1236. 'loggedOutRegex': /Sorry this is a private site/,
  1237. 'matchRegex': /Database Error/,
  1238. 'TV': true},
  1239. { 'name': 'CMS',
  1240. 'searchUrl': 'https://cinemamovies.pl/browse.php?incldead=1&blah=1&gatunek=0&quality=none&search=%tt%',
  1241. 'loggedOutRegex': /Cloudflare|Ray ID|Zapomniałeś hasła/,
  1242. 'matchRegex': /was not found|nie został odnaleziony/,
  1243. 'both': true},
  1244. { 'name': 'CrazyHD',
  1245. 'searchUrl': 'https://www.crazyhd.com/index.php?page=searchlist',
  1246. 'loggedOutRegex': /Cloudflare|Ray ID|Popular Topics/,
  1247. 'matchRegex': /list-name/,
  1248. 'positiveMatch': true,
  1249. 'mPOST': 'search=%search_string_orig%+%year%',
  1250. 'both': true},
  1251. { 'name': 'CT',
  1252. 'icon': 'https://central-torrent.eu/favicon.gif',
  1253. 'searchUrl': 'https://central-torrent.eu/browse.php?search=%search_string_orig%+%year%',
  1254. 'loggedOutRegex': /Cloudflare|Ray ID|inputlogowanie/,
  1255. 'matchRegex': /Nic tutaj nie ma/},
  1256. { 'name': 'CZ',
  1257. 'icon': 'https://i.imgur.com/HYNMAuJ.png',
  1258. 'configName': 'ET',
  1259. 'searchUrl': 'https://cinemaz.to/movies?search=&imdb=%tt%',
  1260. 'loggedOutRegex': /Forgot Your Password/,
  1261. 'matchRegex': /class="overlay-container"/,
  1262. 'positiveMatch': true},
  1263. { 'name': 'CZ',
  1264. 'icon': 'https://i.imgur.com/HYNMAuJ.png',
  1265. 'configName': 'ET',
  1266. 'searchUrl': 'https://cinemaz.to/tv-shows?search=&imdb=%tt%',
  1267. 'loggedOutRegex': /Forgot Your Password/,
  1268. 'matchRegex': /class="overlay-container"/,
  1269. 'positiveMatch': true,
  1270. 'TV': true},
  1271. { 'name': 'DC',
  1272. 'searchUrl': 'https://digitalcore.club/api/v1/torrents?categories[]=1&categories[]=2&categories[]=3&categories[]=4&categories[]=5&categories[]=6&categories[]=7&dead=false&limit=1&page=search&searchText=%search_string%+%year%',
  1273. 'goToUrl': 'https://digitalcore.club/search?search=%search_string%+%year%&cats=1,2,5,6,3,4,7&fc=true',
  1274. 'loggedOutRegex': /It doesnt work here/,
  1275. 'matchRegex': /imdbid/,
  1276. 'rateLimit': 250,
  1277. 'positiveMatch': true},
  1278. { 'name': 'DC',
  1279. 'searchUrl': 'https://digitalcore.club/api/v1/torrents?categories[]=8&categories[]=9&categories[]=10&categories[]=11&categories[]=12&categories[]=13&categories[]=14&dead=false&limit=1&page=search&searchText=%search_string%',
  1280. 'goToUrl': 'https://digitalcore.club/search?search=%search_string%&cats=8,9,10,11,13,12,14&fc=true',
  1281. 'loggedOutRegex': /It doesnt work here/,
  1282. 'matchRegex': /imdbid/,
  1283. 'rateLimit': 250,
  1284. 'positiveMatch': true,
  1285. 'TV': true},
  1286. { 'name': 'DesiRel',
  1287. 'searchUrl': 'https://www.desireleasers.be/torrents/filter?imdb=%tt%',
  1288. 'loggedOutRegex': /Cloudflare|Ray ID|Forgot Your Password/,
  1289. 'positiveMatch': true,
  1290. 'matchRegex': /td style/,
  1291. 'both': true},
  1292. { 'name': 'DVDSeed',
  1293. 'searchUrl': 'https://www.dvdseed.eu/browse2.php?search=%tt%&wheresearch=2&incldead=1&polish=0&nuke=0&rodzaj=0',
  1294. 'loggedOutRegex': /Nie masz konta|Nie zalogowany!/,
  1295. 'matchRegex': /Nic tutaj nie ma!/},
  1296. { 'name': 'DWR',
  1297. 'searchUrl': 'https://dragonworld-reloaded.net/selection.php?search=%search_string_orig%+%year%',
  1298. 'loggedOutRegex': /Cloudflare|Ray ID|PW vergessen/,
  1299. 'matchRegex': /Nichts gefunden/},
  1300. { 'name': 'E-T',
  1301. 'searchUrl': 'https://elite-tracker.net/browse.php?do=search&keywords=%tt%&search_type=t_genre&category=0&include_dead_torrents=no',
  1302. 'loggedOutRegex': /Cloudflare|Ray ID|Récupérer votre mot de passe/,
  1303. 'matchRegex': /Aucun résultat/,
  1304. 'both': true},
  1305. { 'name': 'ExiTor',
  1306. 'icon': 'https://exitorrent.org/favicon.ico',
  1307. 'searchUrl': 'https://exitorrent.org/browse.php?search=%tt%&blah=1&incldead=0&polish=0',
  1308. 'loggedOutRegex': /Cloudflare|Ray ID|Aby odzyskać hasło/,
  1309. 'matchRegex': /Nic tutaj nie ma/,
  1310. 'both': true},
  1311. { 'name': 'FE',
  1312. 'searchUrl': 'https://finelite.org/selaa.php?search=%tt%',
  1313. 'loggedOutRegex': /Se ainoa oikea!/,
  1314. 'matchRegex': /notice-info/,
  1315. 'both': true},
  1316. { 'name': 'FF',
  1317. 'searchUrl': 'https://www.funfile.org/browse.php?search=%search_string%',
  1318. 'loggedOutRegex': /You need cookies enabled to log in/,
  1319. 'matchRegex': /Try again with a refined search/,
  1320. 'both': true},
  1321. { 'name': 'FL',
  1322. 'searchUrl': 'https://filelist.io/browse.php?search=%nott%&cat=0&searchin=3&sort=2',
  1323. 'loggedOutRegex': /Login on any IP/,
  1324. 'matchRegex': /Nu s-a găsit nimic!/,
  1325. 'both': true},
  1326. { 'name': 'FinVip',
  1327. 'searchUrl': 'https://finvip.org/index.php?page=torrents&search=%tt%&options=1',
  1328. 'loggedOutRegex': /Sinulla ei ole oikeuksia sivulle/,
  1329. 'matchRegex': /<td colspan="2" align="center"> <\/td>/},
  1330. { 'name': 'G-Free',
  1331. 'searchUrl': 'https://generation-free.biz/torrents-search.php?search=%search_string_orig%+%year%&cat=0&genre=&incldead=1&freeleech=0&lang=0',
  1332. 'loggedOutRegex': /Cloudflare|Ray ID|Les cookies doivent/,
  1333. 'matchRegex': /a été trouvé/},
  1334. { 'name': 'G-Free',
  1335. 'searchUrl': 'https://generation-free.biz/torrents-search.php?search=%search_string_orig%&cat=0&genre=&incldead=1&freeleech=0&lang=0',
  1336. 'loggedOutRegex': /Cloudflare|Ray ID|Les cookies doivent/,
  1337. 'matchRegex': /a été trouvé/,
  1338. 'TV': true},
  1339. { 'name': 'GD',
  1340. 'searchUrl': 'https://greekdiamond.info/index.php?page=torrents&search=%search_string_orig%',
  1341. 'loggedOutRegex': /Cloudflare|Ray ID|Δεν είστε εξουσιοδοτημένος/,
  1342. 'matchRegex': />0<\/span> matches/,
  1343. 'both': true},
  1344. { 'name': 'GT',
  1345. 'searchUrl': 'https://greek-team.cc/browse.php?incldead=0&search=%search_string_orig%&blah=0',
  1346. 'loggedOutRegex': /Cloudflare|Ray ID|Retrieve Password/,
  1347. 'matchRegex': /No data found/,
  1348. 'both': true},
  1349. { 'name': 'HD-F',
  1350. 'searchUrl': 'https://hdf.world/torrents.php?searchstr=%search_string_orig%+%year%&order_by=time&order_way=desc&group_results=1&action=basic&searchsubmit=1',
  1351. 'loggedOutRegex': /Cloudflare|Ray ID|Mot de passe perdu/,
  1352. 'matchRegex': /Aucun fichier trouvé/},
  1353. { 'name': 'HDA',
  1354. 'icon': 'https://i.imgur.com/VUVLqMA.png',
  1355. 'searchUrl': 'https://www.hdarea.co/torrents.php?incldead=1&search=%tt%&search_area=4',
  1356. 'loggedOutRegex': /Cloudflare|Ray ID|recover.php/,
  1357. 'matchRegex': /Nothing found!|没有种子/,
  1358. 'both': true},
  1359. { 'name': 'HDAtmos',
  1360. 'searchUrl': 'https://hdatmos.club/torrents.php?incldead=1&spstate=0&search=%tt%&search_area=1&search_mode=0',
  1361. 'loggedOutRegex': /Cloudflare|Ray ID|SSL \(HTTPS\)/,
  1362. 'matchRegex': /Nothing found|没有种子|沒有種子/,
  1363. 'both': true},
  1364. { 'name': 'HDb',
  1365. 'searchUrl': 'https://hdbits.org/browse.php?c1=1&c2=1&c3=1&c4=1&c5=1&c7=1&c8=1&imdb=%tt%',
  1366. 'loggedOutRegex': /Make sure your passcode generating|nginx/,
  1367. 'matchRegex': /Nothing here!/,
  1368. 'both': true},
  1369. { 'name': 'HDC',
  1370. 'icon': 'https://i.imgur.com/KkZE390.png',
  1371. 'searchUrl': 'https://hdchina.org/torrents.php?incldead=0&spstate=0&inclbookmarked=0&boardid=0&seeders=&search=%tt%&search_area=4&search_mode=2',
  1372. 'loggedOutRegex': /SSL \(HTTPS\)/,
  1373. 'matchRegex': /Nothing found! Try again with a refined search string./},
  1374. { 'name': 'HDH',
  1375. 'configName': 'HDHome',
  1376. 'icon': 'https://i.imgur.com/XUd8EfR.png',
  1377. 'searchUrl': 'https://hdhome.org/torrents.php?search_area=4&search=%tt%',
  1378. 'loggedOutRegex': /SSL \(HTTPS\)/,
  1379. 'matchRegex': /Nothing found! Try again with a refined search string/},
  1380. { 'name': 'HDME',
  1381. 'searchUrl': 'https://hdme.eu/browse.php?blah=2&cat=0&incldead=1&search=%tt%',
  1382. 'loggedOutRegex': /You need cookies enabled/,
  1383. 'matchRegex': /Try again with a refined search string./},
  1384. { 'name': 'HDME',
  1385. 'searchUrl': 'https://hdme.eu/browse.php?search=%search_string%&blah=0&cat=0&incldead=1',
  1386. 'loggedOutRegex': /You need cookies enabled/,
  1387. 'matchRegex': /Try again with a refined search string./,
  1388. 'TV': true},
  1389. { 'name': 'HDS',
  1390. 'searchUrl': 'https://hdsky.me/torrents.php?incldead=1&search=%tt%&search_area=4&search_mode=0',
  1391. 'loggedOutRegex': /SSL \(HTTPS\)/,
  1392. 'matchRegex': /Nothing found!/},
  1393. { 'name': 'HDS',
  1394. 'searchUrl': 'https://hdsky.me/torrents.php?cat402=1&cat403=1&incldead=1&search=%search_string%&search_area=0&search_mode=0',
  1395. 'loggedOutRegex': /SSL \(HTTPS\)/,
  1396. 'matchRegex': /Nothing found!/,
  1397. 'TV': true},
  1398. { 'name': 'HDSpace',
  1399. 'icon': 'https://i.imgur.com/hQNih7O.png',
  1400. 'searchUrl': 'https://hd-space.org/index.php?page=torrents&active=0&options=2&search=%nott%',
  1401. 'loggedOutRegex': /not authorized to view the Torrents!/,
  1402. 'matchRegex': /<td colspan="2" align="center"> <\/td>/,
  1403. 'both': true},
  1404. { 'name': 'HDSpain',
  1405. 'searchUrl': 'https://www.hd-spain.com/browse.php?%search_string_orig%',
  1406. 'loggedOutRegex': /Error 404 No encontrado/,
  1407. 'matchRegex': /xxx Change Me xxx/,
  1408. 'both': true},
  1409. { 'name': 'HDT',
  1410. 'icon': 'https://hdts.ru/favicon.ico',
  1411. 'searchUrl': 'http://hd-torrents.org/torrents.php?active=0&options=2&search=%tt%',
  1412. 'loggedOutRegex': /not authorized to view this Torrents/,
  1413. 'matchRegex': /No torrents here.../,
  1414. 'both': true},
  1415. { 'name': 'HDtime',
  1416. 'searchUrl': 'https://hdtime.org/torrents.php?incldead=0&search=%tt%&search_area=1',
  1417. 'loggedOutRegex': /Cloudflare|Ray ID|SSL \(HTTPS\)/,
  1418. 'matchRegex': /Nothing found|没有种子|沒有種子/,
  1419. 'both': true},
  1420. { 'name': 'HDU',
  1421. 'searchUrl': 'https://pt.upxin.net/torrents.php?search_area=4&search=%tt%',
  1422. 'loggedOutRegex': /SSL \(HTTPS\)/,
  1423. 'matchRegex': /Nothing found!/},
  1424. { 'name': 'HQS',
  1425. 'searchUrl': 'https://hqsource.org/browse.php?c36=1&c3=1&c2=1&c49=1&c1=1&c8=1&c4=1&c7=1&c45=1&c9=1&c5=1&search=%search_string_orig%+%year%&blah=1&incldead=1&polish=0',
  1426. 'loggedOutRegex': /Cloudflare|Ray ID|Zapomniałes hasła/,
  1427. 'matchRegex': /Nic nie znaleziono/},
  1428. { 'name': 'HT',
  1429. 'searchUrl': 'https://huntorrent.net/browse.php?search=%tt%',
  1430. 'loggedOutRegex': /Cloudflare|Ray ID|Elfelejtett jelszó/,
  1431. 'matchRegex': /Az általad megadott/,
  1432. 'both': true},
  1433. { 'name': 'IPT',
  1434. 'searchUrl': 'https://ip.findnemo.net/t?q=%tt%',
  1435. 'loggedOutRegex': /Ray ID|security check to access|Forgot your password/,
  1436. 'matchRegex': /No Torrents Found!/},
  1437. { 'name': 'IPT',
  1438. 'searchUrl': 'https://ip.findnemo.net/t?72=&73=&q=%search_string%&qf=ti',
  1439. 'loggedOutRegex': /Ray ID|security check to access|Forgot your password/,
  1440. 'matchRegex': /No Torrents Found!/,
  1441. 'TV': true},
  1442. { 'name': 'IT',
  1443. 'searchUrl': 'https://newinsane.info/browse.php?search=%tt%',
  1444. 'loggedOutRegex': /Ray ID|login_button/,
  1445. 'matchRegex': /Nincs találat|Nothing found|Nu s-a găsit|Nič sa nenašlo|kein treffer/,
  1446. 'both': true},
  1447. { 'name': 'iTS',
  1448. 'searchUrl': 'https://shadowthein.net/browse.php?incldead=1&search=%tt%&search_in=all',
  1449. 'loggedOutRegex': /most comprehensive people|JavaScript is disabled/,
  1450. 'matchRegex': /Nothing found!/,
  1451. 'both': true},
  1452. { 'name': 'JoyHD',
  1453. 'icon': 'https://i.imgur.com/z5kbxta.png',
  1454. 'searchUrl': 'https://www.joyhd.net/torrents.php?search_area=4&search=%tt%',
  1455. 'loggedOutRegex': /Resend Email Verification/,
  1456. 'matchRegex': /Nothing found! Try again with a refined search string/},
  1457. { 'name': 'JPTV',
  1458. 'searchUrl': 'https://jptv.club/torrents/filter?imdb=%tt%',
  1459. 'loggedOutRegex': /Forgot Your Password/,
  1460. 'matchRegex': /<tbody>\s*<\/tbody>/,
  1461. 'both': true},
  1462. { 'name': 'KG',
  1463. 'icon': 'https://i.imgur.com/0JFxPY5.png',
  1464. 'searchUrl': 'https://karagarga.in/browse.php?sort=added&search=%nott%&search_type=imdb&d=DESC',
  1465. 'loggedOutRegex': /Cloudflare|Ray ID|Not logged in!/,
  1466. 'matchRegex': /No torrents found/,
  1467. 'rateLimit': 125,
  1468. 'both': true},
  1469. { 'name': 'KG-Req',
  1470. 'icon': 'https://i.imgur.com/ZQgliKg.png',
  1471. 'searchUrl': 'https://karagarga.in/viewrequests.php?search=%nott%&filter=true',
  1472. 'loggedOutRegex': /Cloudflare|Ray ID|Not logged in!/,
  1473. 'matchRegex': /1&nbsp;-/,
  1474. 'positiveMatch': true,
  1475. 'rateLimit': 125,
  1476. 'both': true},
  1477. { 'name': 'LM',
  1478. 'searchUrl': 'https://www.linkomanija.net/browse.php?incldead=1&search=%tt%&searchindesc=1',
  1479. 'loggedOutRegex': /Prisiminti mane/,
  1480. 'matchRegex': /Nieko nerasta./},
  1481. { 'name': 'LM',
  1482. 'searchUrl': 'https://www.linkomanija.net/browse.php?c30=1&c60=1&c28=1&c62=1&c65=1&c58=1&incldead=0&search="%search_string%"',
  1483. 'loggedOutRegex': /Prisiminti mane/,
  1484. 'matchRegex': /Nieko nerasta./,
  1485. 'TV': true},
  1486. { 'name': 'LM-5z',
  1487. 'searchUrl': 'https://www.linkomanija.net/torrents.php?cat=0&search="%search_string%"',
  1488. 'loggedOutRegex': /Prisiminti mane/,
  1489. 'matchRegex': /Torrentų nėra./,
  1490. 'both': true},
  1491. { 'name': 'LS',
  1492. 'searchUrl': 'http://letseed.net/browse.php?do=search&keywords=%tt%&search_type=t_genre&category=0&include_dead_torrents=yes',
  1493. 'loggedOutRegex': /Cloudflare|Ray ID|Şifre kurtarma|Recover Password/,
  1494. 'matchRegex': /dl.png/,
  1495. 'positiveMatch': true,
  1496. 'both': true},
  1497. { 'name': 'M-T',
  1498. 'searchUrl': 'https://pt.m-team.cc/torrents.php?incldead=0&spstate=0&inclbookmarked=0&search=%tt%&search_area=4&search_mode=0',
  1499. 'loggedOutRegex': /type="password" name="password"|An error occurred|Please input the 6-digit code/,
  1500. 'matchRegex': /Nothing here!|Try again with a refined search string./,
  1501. 'both': true},
  1502. { 'name': 'Milkie',
  1503. 'icon': 'https://milkie.cc/favicon.png',
  1504. 'searchUrl': 'https://milkie.cc/browse?query=%search_string%+%year%&categories=1',
  1505. 'loggedOutRegex': /Cloudflare|Ray ID/,
  1506. 'matchRegex': /hits: 0/},
  1507. { 'name': 'Milkie',
  1508. 'icon': 'https://milkie.cc/favicon.png',
  1509. 'searchUrl': 'https://milkie.cc/browse?query=%search_string%&categories=2',
  1510. 'loggedOutRegex': /Cloudflare|Ray ID/,
  1511. 'matchRegex': /hits: 0/,
  1512. 'TV': true},
  1513. { 'name': 'MP',
  1514. 'searchUrl': 'https://majomparade.eu/letoltes.php?tipus=1&k=yes&name=https://www.imdb.com/title/%tt%&category[]=&tipuska=0&imdb_search=yes',
  1515. 'loggedOutRegex': /Cloudflare|Ray ID|Az oldal használatához/,
  1516. 'matchRegex': /Nincs találat/,
  1517. 'both': true},
  1518. { 'name': 'MS',
  1519. 'searchUrl': 'https://www.myspleen.org/browse.php?search=%search_string%&title=0&cat=0',
  1520. 'loggedOutRegex': /<title>MySpleen :: Login<\/title>/,
  1521. 'matchRegex': /<strong>Nothing found!<\/strong>/,
  1522. 'both': true},
  1523. { 'name': 'MTV',
  1524. 'searchUrl': 'https://www.morethan.tv/torrents.php?searchstr=%search_string%+%year%&tags_type=1&order_by=time&order_way=desc&group_results=1&filter_cat%5B1%5D=1&action=basic&searchsubmit=1',
  1525. 'loggedOutRegex': /<title>Login :: morethan.tv/,
  1526. 'matchRegex': /<h2>Your search did not match anything.<\/h2>/},
  1527. { 'name': 'MTV',
  1528. 'searchUrl': 'https://www.morethan.tv/torrents.php?searchstr=%search_string%&tags_type=1&order_by=time&order_way=desc&group_results=1&filter_cat%5B2%5D=1&action=basic&searchsubmit=1',
  1529. 'loggedOutRegex': /<title>Login :: morethan.tv/,
  1530. 'matchRegex': /<h2>Your search did not match anything.<\/h2>/,
  1531. 'TV': true},
  1532. { 'name': 'NB',
  1533. 'icon': 'https://i.imgur.com/OH7fBY4.png',
  1534. 'searchUrl': 'https://norbits.net/browse.php?incldead=1&fullsearch=0&scenerelease=0&imdbsearch=%tt%&imdb_from=0&imdb_to=0&search=',
  1535. 'loggedOutRegex': /Ikke innlogget!/,
  1536. 'matchRegex': /<h3>Ingenting her!<\/h3>/,
  1537. 'both': true},
  1538. { 'name': 'NBL',
  1539. 'searchUrl': 'https://nebulance.io/torrents.php?order_by=time&order_way=desc&searchtext=%search_string%&search_type=0&taglist=&tags_type=0',
  1540. 'loggedOutRegex': /have cookies disabled./,
  1541. 'matchRegex': /search did not match|are Cylons aboard/,
  1542. 'TV': true},
  1543. { 'name': 'nCore',
  1544. 'searchUrl': 'https://ncore.cc/torrents.php?mire=%tt%&miben=imdb&tipus=all_own',
  1545. 'loggedOutRegex': /Cloudflare|Ray ID|Jelszó-emlékeztető|Password recovery/,
  1546. 'matchRegex': /Nincs találat/,
  1547. 'both': true},
  1548. { 'name': 'OurBits',
  1549. 'searchUrl': 'https://ourbits.club/torrents.php?search_area=4&search=%tt%',
  1550. 'loggedOutRegex': /SSL \(HTTPS\)/,
  1551. 'matchRegex': /Nothing found! Try again with a refined search string/},
  1552. { 'name': 'PHD',
  1553. 'icon': 'https://i.imgur.com/MJJGioU.png',
  1554. 'searchUrl': 'https://privatehd.to/movies?search=&imdb=%tt%',
  1555. 'loggedOutRegex': /Forgot Your Password/,
  1556. 'matchRegex': /class="overlay-container"/,
  1557. 'positiveMatch': true},
  1558. { 'name': 'PHD',
  1559. 'icon': 'https://i.imgur.com/MJJGioU.png',
  1560. 'searchUrl': 'https://privatehd.to/tv-shows?search=&imdb=%tt%',
  1561. 'loggedOutRegex': /Forgot Your Password/,
  1562. 'matchRegex': /class="overlay-container"/,
  1563. 'positiveMatch': true,
  1564. 'TV': true},
  1565. { 'name': 'PHD-Req',
  1566. 'icon': 'https://i.imgur.com/MJJGioU.png',
  1567. 'searchUrl': 'https://privatehd.to/requests?type=movie&search=%search_string%&language=0&condition=new',
  1568. 'loggedOutRegex': /Forgot Your Password/,
  1569. 'matchRegex': /Vote this Request/,
  1570. 'positiveMatch': true},
  1571. { 'name': 'PS',
  1572. 'searchUrl': 'https://polishsource.cz/browse.php?search=%tt%&incldead=1&scene=0&pl=0&sub=&search_in=nfo',
  1573. 'loggedOutRegex': /Cloudflare|Ray ID|Rejestracja</,
  1574. 'matchRegex': /Nic nie znaleziono/,
  1575. 'both': true},
  1576. { 'name': 'PTE',
  1577. 'icon': 'https://cdn.pte.nu/img/favicon.ico',
  1578. 'searchUrl': 'https://pte.nu/apitorrents?tpage=1&cat[]=6&cat[]=7&cat[]=9&search=%search_string%',
  1579. 'goToUrl': 'https://pte.nu/torrents?cat=["6","7","9"]&search=%search_string%',
  1580. 'loggedOutRegex': /submit">Sign in/,
  1581. 'matchRegex': /"count":0/,
  1582. 'rateLimit': 250,
  1583. 'spaceEncode': ' '},
  1584. { 'name': 'PTE',
  1585. 'icon': 'https://cdn.pte.nu/img/favicon.ico',
  1586. 'searchUrl': 'https://pte.nu/apitorrents?tpage=1&cat[]=11&cat[]=12&search=%search_string%',
  1587. 'goToUrl': 'https://pte.nu/torrents?cat=["11","12"]&search=%search_string%',
  1588. 'loggedOutRegex': /submit">Sign in/,
  1589. 'matchRegex': /"count":0/,
  1590. 'rateLimit': 250,
  1591. 'spaceEncode': ' ',
  1592. 'TV': true},
  1593. { 'name': 'PTer',
  1594. 'searchUrl': 'https://pterclub.com/torrents.php?search=%tt%&search_area=4',
  1595. 'loggedOutRegex': /SSL \(HTTPS\)|Err code|Cloudflare Ray ID/,
  1596. 'matchRegex': /Nothing found!/},
  1597. { 'name': 'PTF',
  1598. 'searchUrl': 'https://ptfiles.net/browse.php?search=%search_string%&incldead=0&title=0',
  1599. 'loggedOutRegex': /Forgot your password/,
  1600. 'matchRegex': /Nothing found!/},
  1601. { 'name': 'PTM',
  1602. 'icon': 'https://i.imgur.com/whvwfke.png',
  1603. 'searchUrl': 'https://pretome.info/browse.php?search=%tt%&st=1&sd=1',
  1604. 'loggedOutRegex': /Cloudflare|Ray ID|Joke of the day/,
  1605. 'matchRegex': /this filter criteria/,
  1606. 'both': true},
  1607. { 'name': 'PTMSG',
  1608. 'searchUrl': 'https://pt.msg.vg/torrents.php?incldead=1&search=%tt%&search_area=1',
  1609. 'loggedOutRegex': /忘记了密码/,
  1610. 'matchRegex': /Nothing found|没有种子|沒有種子/,
  1611. 'both': true},
  1612. { 'name': 'PTN',
  1613. 'icon': 'https://piratethenet.org/pic/favicon.ico',
  1614. 'searchUrl': 'https://piratethenet.org/browseold.php?incldead=1&_by=3&search=%tt%',
  1615. 'loggedOutRegex': /You need to have cookies enabled/,
  1616. 'matchRegex': /Nothing found!/,
  1617. 'both': true},
  1618. { 'name': 'PTP',
  1619. 'icon': 'https://passthepopcorn.me/static/common/touch-icon-iphone.png',
  1620. 'searchUrl': 'https://passthepopcorn.me/torrents.php?imdb=%tt%',
  1621. 'loggedOutRegex': /Cloudflare|Ray ID|Keep me logged in|Your popcorn quota/,
  1622. 'matchRegex': /Your search did not match anything/,
  1623. 'rateLimit': 250},
  1624. { 'name': 'PTP-Req',
  1625. 'icon': 'https://i.imgur.com/EFCRrc9.png',
  1626. 'searchUrl': 'https://passthepopcorn.me/requests.php?submit=true&search=%tt%',
  1627. 'loggedOutRegex': /Cloudflare|Ray ID|Keep me logged in|Your popcorn quota/,
  1628. 'matchRegex': /Your search did not match anything/,
  1629. 'rateLimit': 250},
  1630. { 'name': 'PxHD',
  1631. 'icon': 'https://i.imgur.com/OA7JJ6x.png',
  1632. 'searchUrl': 'https://pixelhd.me/torrents.php?groupname=&year=&tmdbover=&tmdbunder=&tmdbid=&imdbover=&imdbunder=&imdbid=%tt%&order_by=time&order_way=desc&taglist=&tags_type=1&filterTorrentsButton=Filter+Torrents',
  1633. 'loggedOutRegex': /You appear to have javascript disabled/,
  1634. 'matchRegex': /Your search did not match anything/},
  1635. { 'name': 'RevTT',
  1636. 'searchUrl': 'https://www.revolutiontt.me/browse.php?search=%tt%',
  1637. 'loggedOutRegex': /used when you're logged in./,
  1638. 'matchRegex': /Nothing found!/},
  1639. { 'name': 'RevTT',
  1640. 'searchUrl': 'https://www.revolutiontt.me/browse.php?search=%search_string%&cat=0&incldead=1&titleonly=1',
  1641. 'loggedOutRegex': /used when you're logged in./,
  1642. 'matchRegex': /Nothing found!/,
  1643. 'TV': true},
  1644. { 'name': 'Retroflix',
  1645. 'searchUrl': 'https://retroflix.club/torrents.php?incldead=0&spstate=0&inclbookmarked=0&search=%tt%&search_area=4&search_mode=0',
  1646. 'loggedOutRegex': /Restrict session to my IP|Ray ID/,
  1647. 'matchRegex': /Nothing found!/,
  1648. 'both': true},
  1649. { 'name': 'SB',
  1650. 'searchUrl': 'https://superbits.org/api/v1/torrents?searchText=%tt%',
  1651. 'goToUrl': 'https://superbits.org/search?search=%tt%',
  1652. 'loggedOutRegex': /Cloudflare|Ray ID|inloggningscookie/,
  1653. 'matchRegex': /seeder/,
  1654. 'positiveMatch': true,
  1655. 'both': true},
  1656. { 'name': 'SC',
  1657. 'searchUrl': 'https://secret-cinema.pw/torrents.php?action=advanced&searchsubmit=1&filter_cat=1&cataloguenumber=%tt%&order_by=time&order_way=desc&tags_type=0',
  1658. 'loggedOutRegex': /<title>Login :: Secret Cinema/,
  1659. 'matchRegex': /Your search did not match anything/,
  1660. 'rateLimit': 100,
  1661. 'both': true},
  1662. { 'name': 'SC-Req',
  1663. 'icon': 'https://i.imgur.com/QHOSsFZ.png',
  1664. 'searchUrl': 'https://secret-cinema.pw/requests.php?submit=true&search=%tt%',
  1665. 'loggedOutRegex': /<title>Login :: Secret Cinema/,
  1666. 'matchRegex': /Nothing found!/,
  1667. 'rateLimit': 100,
  1668. 'both': true},
  1669. { 'name': 'SDBits',
  1670. 'searchUrl': 'https://sdbits.org/browse.php?incldead=1&imdb=%tt%',
  1671. 'loggedOutRegex': /Not logged in!|Technical Difficulties/,
  1672. 'matchRegex': /Nothing here!|Nothing found!/},
  1673. { 'name': 'Sharewood',
  1674. 'searchUrl': 'https://www.sharewood.tv/filterTorrents?search=%search_string_orig%+%year%&categories[]=1',
  1675. 'loggedOutRegex': /Cloudflare|Ray ID|Mot de passe oublié/,
  1676. 'matchRegex': /table-responsive-line/,
  1677. 'positiveMatch': true},
  1678. { 'name': 'Sharewood',
  1679. 'searchUrl': 'https://www.sharewood.tv/filterTorrents?search=%search_string_orig%&categories[]=1',
  1680. 'loggedOutRegex': /Cloudflare|Ray ID|Mot de passe oublié/,
  1681. 'matchRegex': /table-responsive-line/,
  1682. 'positiveMatch': true,
  1683. 'TV': true},
  1684. { 'name': 'sHD',
  1685. 'searchUrl': 'https://scenehd.org/browse.php?search=%tt%',
  1686. 'loggedOutRegex': /If you have forgotten your password/,
  1687. 'matchRegex': /No torrents found!/},
  1688. { 'name': 'SI',
  1689. 'searchUrl': 'https://shareisland.org/torrents/filter?imdb=%tt%',
  1690. 'loggedOutRegex': /Cloudflare|Ray ID|Accedi con le|Sign In With|Dimenticata la Password/,
  1691. 'matchRegex': /<tbody>\s*<\/tbody>/,
  1692. 'both': true},
  1693. { 'name': 'Snahp',
  1694. 'searchUrl': 'https://forum.snahp.it/search.php?keywords=%search_string%&amp;sf=titleonly',
  1695. 'loggedOutRegex': /register" role/,
  1696. 'matchRegex': '/Search found 0 matches/',
  1697. 'both': true},
  1698. { 'name': 'SP',
  1699. 'searchUrl': 'https://www.scenepalace.info/browse.php?search=%nott%&cat=0&incldead=1',
  1700. 'loggedOutRegex': /Not logged in!/,
  1701. 'matchRegex': /Nothing found!/,
  1702. 'both': true},
  1703. { 'name': 'SPD',
  1704. 'icon': 'https://i.imgur.com/dFROSZu.png',
  1705. 'searchUrl': 'https://speed.click/browse/deep/q/%tt%',
  1706. 'loggedOutRegex': /Cloudflare|Ray ID|Forgot Username/,
  1707. 'matchRegex': /Nothing found/,
  1708. 'both': true},
  1709. { 'name': 'SpeedApp',
  1710. 'searchUrl': 'https://speedapp.io/browse?search=%tt%',
  1711. 'loggedOutRegex': /Cloudflare|Ray ID|Forget Password/,
  1712. 'matchRegex': /text-emphasis text-hover-primary/,
  1713. 'both': true},
  1714. { 'name': 'ST',
  1715. 'searchUrl': 'https://www.scenetime.com/browse.php?c57=1&c59=1&c64=1&c82=1&c16=1&search=%search_string%+%year%&cata=yes',
  1716. 'loggedOutRegex': /Cloudflare|Ray ID|need cookies enabled|Try again/,
  1717. 'matchRegex': /Nothing found/,
  1718. 'rateLimit': 6000},
  1719. { 'name': 'ST',
  1720. 'searchUrl': 'https://www.scenetime.com/browse.php?c2=1&c9=1&c77=1&search=%search_string%&cata=yes',
  1721. 'loggedOutRegex': /Cloudflare|Ray ID|need cookies enabled|Try again/,
  1722. 'matchRegex': /Nothing found/,
  1723. 'rateLimit': 6000,
  1724. 'TV': true},
  1725. { 'name': 'Tasmanites',
  1726. 'searchUrl': 'https://tasmanit.es/browse.php?do=search&search_type=t_name&keywords=%search_string%',
  1727. 'loggedOutRegex': /Recover Password/,
  1728. 'matchRegex': /Click to Download/,
  1729. 'positiveMatch': true,
  1730. 'TV': true},
  1731. { 'name': 'TBA',
  1732. 'searchUrl': 'https://tb-asian.org/index.php?page=torrents&search=%search_string%&category=0&active=0',
  1733. 'loggedOutRegex': /not authorized to view/,
  1734. 'matchRegex': /download.gif/,
  1735. 'positiveMatch': true,
  1736. 'both': true},
  1737. { 'name': 'TBD',
  1738. 'icon': 'https://1.bp.blogspot.com/-F2JeKtPCJYI/VgjpVxwMO4I/AAAAAAAAADg/VyNyp-yW9Ac/s1600/TBD.ico',
  1739. 'searchUrl': 'https://www.torrentbd.me/torrent/movies.php?module=torrents&id=%nott%',
  1740. 'loggedOutRegex': /<title>TorrentBD : Login</,
  1741. 'matchRegex': /This title is not available!/,
  1742. 'both': true},
  1743. { 'name': 'TD',
  1744. 'searchUrl': 'https://tday.findnemo.net/t?q=%tt%',
  1745. 'loggedOutRegex': /Ray ID|security check to access|Forgot Password\?/,
  1746. 'matchRegex': /No Torrents Found!/,
  1747. 'both': true},
  1748. { 'name': 'TDB',
  1749. 'searchUrl': 'https://torrentdb.net/filter/torrents?&search=%nott%',
  1750. 'loggedOutRegex': /Forgot Your Password|Service Unavailable|Ray ID/,
  1751. 'matchRegex': /<tbody>\s*<\/tbody>/,
  1752. 'both': true},
  1753. { 'name': 'TE',
  1754. 'searchUrl': 'https://theempire.click/browse.php?incldead=0&country=&nonboolean=1&search=%tt%',
  1755. 'loggedOutRegex': /404 - Not Found|You need cookies enabled/,
  1756. 'matchRegex': /Try again with a refined search string/,
  1757. 'TV': true},
  1758. { 'name': 'Team-HuSh',
  1759. 'searchUrl': 'https://team-hush.org/filterTorrents?imdb=%tt%',
  1760. 'loggedOutRegex': /Cloudflare|Ray ID|Mot de passe oublié/,
  1761. 'matchRegex': /<tbody>\s*<\/tbody>/,
  1762. 'both': true},
  1763. { 'name': 'Telly',
  1764. 'searchUrl': 'https://telly.cc/torrents/filter?imdb=%tt%',
  1765. 'loggedOutRegex': /Cloudflare|Ray ID|Forgot Your Password/,
  1766. 'matchRegex': /<tbody>\s*<\/tbody>/,
  1767. 'both': true},
  1768. { 'name': 'TG',
  1769. 'searchUrl': 'https://thegeeks.click/browse.php?incldead=0&country=&nonboolean=1&search=%tt%',
  1770. 'loggedOutRegex': /404 - Not Found|You need cookies enabled/,
  1771. 'matchRegex': /Try again with a refined search string/,
  1772. 'both': true},
  1773. { 'name': 'THC',
  1774. 'searchUrl': 'https://horrorcharnel.org/browse.php?search=%nott%&cat=0&incldead=1',
  1775. 'loggedOutRegex': /Not logged in!/,
  1776. 'matchRegex': /Nothing found!/},
  1777. { 'name': 'THR',
  1778. 'searchUrl': 'https://www.torrenthr.org/browse.php?search=%search_string%&blah=0&incldead=1',
  1779. 'loggedOutRegex': /registraciju morate imati omogućene cookiese/,
  1780. 'matchRegex': /Ništa nije pronađeno!/,
  1781. 'both': true},
  1782. { 'name': 'Tik',
  1783. 'searchUrl': 'https://www.cinematik.net/browse.php?cat=0&incldead=1&srchdtls=1&search=%tt%',
  1784. 'loggedOutRegex': /Not logged in!|Ray ID/,
  1785. 'matchRegex': /Nothing found!/,
  1786. 'rateLimit': 125,
  1787. 'both': true},
  1788. { 'name': 'Tik-Req',
  1789. 'icon': 'https://i.imgur.com/bM8D1m2.png',
  1790. 'searchUrl': 'https://www.cinematik.net/viewrequests.php?search=%search_string%&filter=1',
  1791. 'loggedOutRegex': /Not logged in!|Ray ID/,
  1792. 'matchRegex': /No requests found!/,
  1793. 'rateLimit': 125,
  1794. 'both': true},
  1795. { 'name': 'TL',
  1796. 'searchUrl': 'https://www.torrentleech.org/torrents/browse/list/imdbID/%tt%',
  1797. 'goToUrl': 'https://www.torrentleech.org/torrents/browse/index/imdbID/%tt%',
  1798. 'loggedOutRegex': /Signup With Invite/,
  1799. 'matchRegex': /"numFound":0/,
  1800. 'rateLimit': 250,
  1801. 'both': true},
  1802. { 'name': 'TL-Title',
  1803. 'searchUrl': 'https://www.torrentleech.org/torrents/browse/list/categories/8,9,11,12,13,14,15,29,34,35,36,37,43,47/query/%search_string% %year%',
  1804. 'goToUrl': 'http://www.torrentleech.org/torrents/browse/index/query/%search_string% %year%/categories/8,9,11,12,13,14,15,29,34,35,36,37,43,47',
  1805. 'loggedOutRegex': /Signup With Invite/,
  1806. 'matchRegex': /"numFound":0/,
  1807. 'rateLimit': 250,
  1808. 'spaceEncode': '%2B'},
  1809. { 'name': 'TL-Title',
  1810. 'searchUrl': 'https://www.torrentleech.org/torrents/browse/list/categories/26,27,29,32,34,35,44/query/%search_string%',
  1811. 'goToUrl': 'http://www.torrentleech.org/torrents/browse/index/query/%search_string%/categories/26,27,29,32,34,35,44',
  1812. 'loggedOutRegex': /Signup With Invite/,
  1813. 'matchRegex': /"numFound":0/,
  1814. 'rateLimit': 250,
  1815. 'spaceEncode': '%2B',
  1816. 'TV': true},
  1817. { 'name': 'TLPL',
  1818. 'icon': 'https://torrentleech.pl/pic/Favikona.png',
  1819. 'searchUrl': 'https://torrentleech.pl/browse.php?search=%tt%&incldead=0&titlesearch=1&polish=0&cat_film=&napisy=0',
  1820. 'loggedOutRegex': /Ray ID|Niezalogowany!/,
  1821. 'matchRegex': /Nic tutaj nie ma/,
  1822. 'both': true},
  1823. { 'name': 'TM',
  1824. 'icon': 'https://torrentmasters.info/images/tm.gif',
  1825. 'searchUrl': 'https://torrentmasters.info/letoltes.php?search=%search_string_orig%+%year%',
  1826. 'loggedOutRegex': /Cloudflare|Ray ID|Jelszó visszaállítás/,
  1827. 'matchRegex': /Nincs aktív torrent/},
  1828. { 'name': 'TO',
  1829. 'searchUrl': 'https://theoccult.click/browse.php?incldead=0&country=&nonboolean=1&search=%tt%',
  1830. 'loggedOutRegex': /404 - Not Found|You need cookies enabled/,
  1831. 'matchRegex': /Try again with a refined search string/,
  1832. 'both': true},
  1833. { 'name': 'TP',
  1834. 'searchUrl': 'https://theplace.click/browse.php?incldead=0&country=&nonboolean=1&search=%tt%',
  1835. 'loggedOutRegex': /not found on this server|You need cookies enabled/,
  1836. 'matchRegex': /Try again with a refined search string/,
  1837. 'both': true},
  1838. { 'name': 'TRL',
  1839. 'searchUrl': 'https://torrent.ai/lt/torrents?in=2&search=%tt%',
  1840. 'loggedOutRegex': /Jums nepavyksta pasijungti/,
  1841. 'matchRegex': /nieko nerasta!/,
  1842. 'both': true},
  1843. { 'name': 'TRL',
  1844. 'searchUrl': 'https://torrent.ai/lt/torrents?search=%search_string%&cats[]=53&cats[]=56&cats[]=79&cats[]=42&cats[]=58&cats[]=59&cats[]=45&cats[]=69&cats[]=70&cats[]=39&cats[]=28',
  1845. 'loggedOutRegex': /Jums nepavyksta pasijungti/,
  1846. 'matchRegex': /nieko nerasta!/,
  1847. 'TV': true},
  1848. { 'name': 'TS',
  1849. 'searchUrl': 'https://theshow.click/browse.php?incldead=0&country=&nonboolean=1&search=%tt%',
  1850. 'loggedOutRegex': /404 - Not Found|You need cookies enabled/,
  1851. 'matchRegex': /Try again with a refined search string/,
  1852. 'both': true},
  1853. { 'name': 'TSeeds',
  1854. 'searchUrl': 'https://torrentseeds.org/browse_elastic.php?cat[3]=1&cat[39]=1&cat[62]=1&cat[19]=1&cat[49]=1&cat[25]=1&cat[50]=1&cat[31]=1&query=%search_string_orig%+%year%&search_in=title',
  1855. 'loggedOutRegex': /Not logged in!/,
  1856. 'matchRegex': />Genres<\/div>\s*<\/div>/},
  1857. { 'name': 'TSeeds',
  1858. 'searchUrl': 'https://torrentseeds.org/browse_elastic.php?cat[61]=1&cat[11]=1&cat[23]=1&cat[24]=1&cat[18]=1&cat[67]=1&cat[26]=1&cat[65]=1&cat[64]=1&query=%search_string_orig%&search_in=title',
  1859. 'loggedOutRegex': /Not logged in!/,
  1860. 'matchRegex': />Genres<\/div>\s*<\/div>|We are sorry/,
  1861. 'TV': true},
  1862. { 'name': 'TSH',
  1863. 'searchUrl': 'https://theshinning.me/filterTorrents?imdb=%nott%',
  1864. 'loggedOutRegex': /Cloudflare|Ray ID|Haben Sie Ihr Passwort vergessen/,
  1865. 'matchRegex': /<tbody>\s*<\/tbody>/,
  1866. 'both': true},
  1867. { 'name': 'TT',
  1868. 'icon': 'https://i.imgur.com/xRE0UGn.png',
  1869. 'searchUrl': 'https://tt.smallfoot.me/t?q=%tt%',
  1870. 'loggedOutRegex': /Cloudflare|Ray ID|Reset Password/,
  1871. 'matchRegex': /No Torrents Found!/,
  1872. 'both': true},
  1873. { 'name': 'TTG',
  1874. 'searchUrl': 'https://totheglory.im/browse.php?c=M&search_field=imdb%nott%',
  1875. 'loggedOutRegex': /Cloudflare|Ray ID|Forget your password/,
  1876. 'matchRegex': /Didn't match any titles/},
  1877. { 'name': 'TVCK',
  1878. 'searchUrl': 'https://tvchaosuk.com/torrents/filter?imdb=%tt%',
  1879. 'loggedOutRegex': /Forgot Your Password/,
  1880. 'matchRegex': /<tbody>\s*<\/tbody>/,
  1881. 'both': true},
  1882. { 'name': 'TVV',
  1883. 'searchUrl': 'https://tv-vault.me/torrents.php?action=advanced&imdbid=%tt%&order_by=s3&order_way=desc',
  1884. 'loggedOutRegex': /Lost your password\?|Browse quota exceeded|Cloudflare Ray ID/,
  1885. 'matchRegex': /Nothing found<\/h2>/,
  1886. 'rateLimit': 250,
  1887. 'TV': true},
  1888. { 'name': 'TVV-Req',
  1889. 'icon': 'https://i.imgur.com/dNtCggC.png',
  1890. 'searchUrl': 'https://tv-vault.me/requests.php?search=&imdbid=%tt%',
  1891. 'loggedOutRegex': /Lost your password\?|Browse quota exceeded|Cloudflare Ray ID/,
  1892. 'matchRegex': /Nothing found|<strong>Yes</,
  1893. 'rateLimit': 250,
  1894. 'TV': true},
  1895. { 'name': 'U2',
  1896. 'searchUrl': 'https://u2.dmhy.org/torrents.php?incldead=0&spstate=0&inclbookmarked=0&search=%tt%&search_area=1&search_mode=0',
  1897. 'loggedOutRegex': /Cloudflare|Ray ID|<title>Access Point :: U2<|under heavy load/,
  1898. 'matchRegex': /Nothing found/},
  1899. { 'name': 'UHDB',
  1900. 'searchUrl': 'https://uhdbits.org/torrents.php?action=advanced&groupname=%tt%',
  1901. 'loggedOutRegex': /Lost your password/,
  1902. 'matchRegex': /Your search did not match anything./},
  1903. { 'name': 'Unlimitz',
  1904. 'searchUrl': 'https://www.unlimitz.biz/browse.php?search=%search_string%&cat=0&blah=0',
  1905. 'loggedOutRegex': /Cloudflare|Ray ID|Recover Password/,
  1906. 'matchRegex': /Nothing found/,
  1907. 'both': true},
  1908. { 'name': 'WF',
  1909. 'icon': 'https://warezforums.com/images/favicon.ico',
  1910. 'searchUrl': 'https://warezforums.com/search.php?action=do_search&keywords=%tt%&postthread=imdbid',
  1911. 'loggedOutRegex': /Cloudflare|Ray ID|You are not logged/,
  1912. 'matchRegex': /no results were returned/,
  1913. 'both': true},
  1914. { 'name': 'BP',
  1915. 'icon': 'https://i.imgur.com/63nSiK7.png',
  1916. 'searchUrl': 'https://blackpearl.biz/search/1/?q=%tt%&o=date',
  1917. 'loggedOutRegex': /Cloudflare|Ray ID|You are not logged/,
  1918. 'matchRegex': /no results were returned/,
  1919. 'both': true},
  1920. { 'name': 'XS',
  1921. 'searchUrl': 'https://www.xspeeds.eu/browse.php?do=search&keywords=%search_string%&search_type=t_name&category=0&include_dead_torrents=yes',
  1922. 'loggedOutRegex': /Forget your password/,
  1923. 'matchRegex': /<b>Nothing Found<\/b>/},
  1924. { 'name': 'xThor',
  1925. 'searchUrl': 'https://xthor.tk/browse.php?c118=1&c119=1&c107=1&c1=1&c2=1&c100=1&c4=1&c5=1&c7=1&c3=1&c6=1&c8=1&c122=1&c94=1&c95=1&c12=1&c31=1&c33=1&c9=1&searchin=title&incldead=0&group=0&state=0&accent=0&price=0&gang=0&mqr=0&staff=0&sch=%search_string_orig% %year%',
  1926. 'loggedOutRegex': /Cloudflare|Ray ID|Vous devez autoriser les cookies/,
  1927. 'matchRegex': 'Aucun résultat'},
  1928. { 'name': 'xThor',
  1929. 'searchUrl': 'https://xthor.tk/browse.php?c104=1&c13=1&c15=1&c14=1&c98=1&c17=1&c16=1&c101=1&c32=1&c110=1&c123=1&c109=1&c30=1&searchin=title&incldead=0&group=0&state=0&accent=0&price=0&gang=0&mqr=0&staff=0&sch=%search_string_orig%',
  1930. 'loggedOutRegex': /Cloudflare|Ray ID|Vous devez autoriser les cookies/,
  1931. 'matchRegex': 'Aucun résultat',
  1932. 'TV': true},
  1933. { 'name': 'Yubraca',
  1934. 'searchUrl': 'http://yubraca.net/browse.php',
  1935. 'mPOST': 'do=search&keywords=%tt%&search_type=t_genre&category=0&include_dead_torrents=yes',
  1936. 'loggedOutRegex': /Cloudflare|Ray ID|Forget your password|Zaboravili ste password/,
  1937. 'matchRegex': />Nista nije pronadjeno<|>Nothing Found</,
  1938. 'both': true},
  1939. { 'name': 'Zamunda',
  1940. 'icon': 'http://img.zamunda.se/pic/favicon.png',
  1941. 'searchUrl': 'http://zelka.org/browse.php?search=%search_string_orig%+%year%&c42=1&c25=1&c51=1&c53=1&c46=1&c5=1&c20=1&c54=1&c35=1&c19=1&c24=1&c31=1&c28=1&incldead=1',
  1942. 'loggedOutRegex': /Cloudflare|Ray ID|cookies enabled|активирани Бисквитки/,
  1943. 'matchRegex': /Нищо не е намерено/},
  1944. { 'name': 'Zamunda',
  1945. 'icon': 'http://img.zamunda.se/pic/favicon.png',
  1946. 'searchUrl': 'http://zelka.org/browse.php?search=%search_string_orig%&c42=1&c50=1&c25=1&c51=1&c7=1&c33=1&incldead=1',
  1947. 'loggedOutRegex': /Cloudflare|Ray ID|cookies enabled|активирани Бисквитки/,
  1948. 'matchRegex': /Нищо не е намерено/,
  1949. 'TV': true}
  1950. ];
  1951.  
  1952. var usenet_sites = [
  1953. { 'name': 'abNZB',
  1954. 'searchUrl': 'https://www.abnzb.com/search/%search_string% %year%?t=2000',
  1955. 'loggedOutRegex': /Cloudflare|Ray ID|Forgotten your password/,
  1956. 'matchRegex': /did not match any/},
  1957. { 'name': 'abNZB',
  1958. 'searchUrl': 'https://www.abnzb.com/search/%search_string%?t=5000',
  1959. 'loggedOutRegex': /Cloudflare|Ray ID|Forgotten your password/,
  1960. 'matchRegex': /did not match any/,
  1961. 'TV': true},
  1962. { 'name': 'altHUB',
  1963. 'icon': 'https://i.imgur.com/0LPAKTL.png',
  1964. 'searchUrl': 'https://althub.co.za/search/%search_string% %year%?t=2000',
  1965. 'loggedOutRegex': /Cloudflare|Ray ID|Forgotten your password/,
  1966. 'matchRegex': /nzb_check/,
  1967. 'spaceEncode': ' ',
  1968. 'positiveMatch': true},
  1969. { 'name': 'altHUB',
  1970. 'icon': 'https://i.imgur.com/0LPAKTL.png',
  1971. 'searchUrl': 'https://althub.co.za/search/%search_string%?t=5000',
  1972. 'loggedOutRegex': /Cloudflare|Ray ID|Forgotten your password/,
  1973. 'matchRegex': /nzb_check/,
  1974. 'spaceEncode': ' ',
  1975. 'positiveMatch': true,
  1976. 'TV': true},
  1977. { 'name': 'BD25',
  1978. 'searchUrl': 'http://www.bd25.eu/index.php?page=files&search=%search_string%',
  1979. 'loggedOutRegex': /Cloudflare|Ray ID|not authorized to view/,
  1980. 'matchRegex': /download.gif/,
  1981. 'positiveMatch': true,
  1982. 'both': true},
  1983. { 'name': 'DOGnzb',
  1984. 'searchUrl': 'https://dognzb.cr/search/%search_string% %year%?t=2000',
  1985. 'loggedOutRegex': /Cloudflare|Ray ID|Keep me logged/,
  1986. 'matchRegex': /did not match|No result/},
  1987. { 'name': 'DOGnzb',
  1988. 'searchUrl': 'https://dognzb.cr/search/%search_string%?t=5000',
  1989. 'loggedOutRegex': /Cloudflare|Ray ID|Keep me logged/,
  1990. 'matchRegex': /did not match|No result/,
  1991. 'TV': true},
  1992. { 'name': 'DrunkenSlug',
  1993. 'icon': 'https://drunkenslug.com/themes/shared/img/favicon.ico',
  1994. 'searchUrl': 'https://drunkenslug.com/search/%search_string% %year%?t=2000',
  1995. 'loggedOutRegex': /Cloudflare|Ray ID|>Remember me/,
  1996. 'matchRegex': /No result!/},
  1997. { 'name': 'DrunkenSlug',
  1998. 'icon': 'https://drunkenslug.com/themes/shared/img/favicon.ico',
  1999. 'searchUrl': 'https://drunkenslug.com/search/%search_string%?t=5000',
  2000. 'loggedOutRegex': /Cloudflare|Ray ID|>Remember me/,
  2001. 'matchRegex': /No result!/,
  2002. 'TV': true},
  2003. { 'name': 'GingaDADDY',
  2004. 'searchUrl': 'https://www.gingadaddy.com/nzbbrowse.php?b=2&st=2&k=%tt%',
  2005. 'loggedOutRegex': /Cloudflare|Ray ID|You need cookies enabled|Forgotten Password/,
  2006. 'matchRegex': /Try again with a refined/,
  2007. 'both': true},
  2008. { 'name': 'MIAtrix',
  2009. 'searchUrl': 'https://www.miatrix.com/search/%search_string% %year%?t=2000',
  2010. 'loggedOutRegex': /Cloudflare|Ray ID|Forgotten your password/,
  2011. 'matchRegex': /did not match any/,
  2012. 'spaceEncode': ' '},
  2013. { 'name': 'MIAtrix',
  2014. 'searchUrl': 'https://www.miatrix.com/search/%search_string%?t=5000',
  2015. 'loggedOutRegex': /Cloudflare|Ray ID|Forgotten your password/,
  2016. 'matchRegex': /did not match any/,
  2017. 'spaceEncode': ' ',
  2018. 'TV': true},
  2019. { 'name': 'NinjaCentral',
  2020. 'searchUrl': 'https://ninjacentral.co.za/search/%search_string% %year%?t=2000',
  2021. 'loggedOutRegex': /Cloudflare|Ray ID|Forgotten your password/,
  2022. 'matchRegex': /did not match any/},
  2023. { 'name': 'NinjaCentral',
  2024. 'searchUrl': 'https://ninjacentral.co.za/search/%search_string%?t=5000',
  2025. 'loggedOutRegex': /Cloudflare|Ray ID|Forgotten your password/,
  2026. 'matchRegex': /did not match any/,
  2027. 'TV': true},
  2028. { 'name': 'NZBcat',
  2029. 'searchUrl': 'https://nzb.cat/search/%search_string% %year%?t=2000',
  2030. 'loggedOutRegex': /Cloudflare|Ray ID|Remember me/,
  2031. 'matchRegex': /search did not match/,
  2032. 'spaceEncode': ' '},
  2033. { 'name': 'NZBcat',
  2034. 'searchUrl': 'https://nzb.cat/search/%search_string%?t=5000',
  2035. 'loggedOutRegex': /Cloudflare|Ray ID|Remember me/,
  2036. 'matchRegex': /search did not match/,
  2037. 'spaceEncode': ' ',
  2038. 'TV': true},
  2039. { 'name': 'NZBfinder',
  2040. 'icon': 'https://nzbfinder.ws/assets/nzbfinder-theme/images/appicons/favicon-32x32.png',
  2041. 'searchUrl': 'https://nzbfinder.ws/search?id=%search_string% %year%&t=2000',
  2042. 'loggedOutRegex': /Cloudflare|Ray ID|Forgot password/,
  2043. 'matchRegex': /No result!/},
  2044. { 'name': 'NZBfinder',
  2045. 'icon': 'https://nzbfinder.ws/assets/nzbfinder-theme/images/appicons/favicon-32x32.png',
  2046. 'searchUrl': 'https://nzbfinder.ws/search?id=%search_string%&t=5000',
  2047. 'loggedOutRegex': /Cloudflare|Ray ID|Forgot password/,
  2048. 'matchRegex': /No result!/,
  2049. 'TV': true},
  2050. { 'name': 'nzbforyou',
  2051. 'searchUrl': 'https://www.nzbforyou.com/search.php?keywords=%tt%',
  2052. 'loggedOutRegex': /Cloudflare|Ray ID|Remember me/,
  2053. 'matchRegex': /No suitable matches were found/,
  2054. 'both': true},
  2055. { 'name': 'NZBgeek',
  2056. 'searchUrl': 'https://nzbgeek.info/geekseek.php?moviesgeekseek=1&browsecategory=2000&browseincludewords=%search_string% %year%',
  2057. 'loggedOutRegex': /Cloudflare|Ray ID|forgot password/,
  2058. 'matchRegex': /returned 0 releases/},
  2059. { 'name': 'NZBgeek',
  2060. 'searchUrl': 'https://nzbgeek.info/geekseek.php?moviesgeekseek=1&browsecategory=5000&browseincludewords=%search_string%',
  2061. 'loggedOutRegex': /Cloudflare|Ray ID|forgot password/,
  2062. 'matchRegex': /returned 0 releases/,
  2063. 'TV': true},
  2064. { 'name': 'NZBGrabit',
  2065. 'icon': 'https://www.nzbgrabit.xyz/animated_favicon.gif',
  2066. 'searchUrl': 'https://www.nzbgrabit.xyz/nzbsearch.php?query=%tt%',
  2067. 'loggedOutRegex': /Cloudflare|Ray ID|You are not logged in/,
  2068. 'matchRegex': /There are no posts/,
  2069. 'both': true},
  2070. { 'name': 'NzbNdx',
  2071. 'icon': 'https://www.nzbndx.com/templates/bookstrap/images/icons/favicon.ico',
  2072. 'searchUrl': 'https://www.nzbndx.com/search/%search_string% %year%?t=2000',
  2073. 'loggedOutRegex': /Cloudflare|Ray ID|Forgotten your password/,
  2074. 'matchRegex': /did not match any/},
  2075. { 'name': 'NzbNdx',
  2076. 'icon': 'https://www.nzbndx.com/templates/bookstrap/images/icons/favicon.ico',
  2077. 'searchUrl': 'https://www.nzbndx.com/search/%search_string%?t=5000',
  2078. 'loggedOutRegex': /Cloudflare|Ray ID|Forgotten your password/,
  2079. 'matchRegex': /did not match any/,
  2080. 'TV': true},
  2081. { 'name': 'NZBnoob',
  2082. 'icon': 'https://nzbnoob.com/templates/bookstrap/images/icons/favicon.ico',
  2083. 'searchUrl': 'https://nzbnoob.com/search/%search_string% %year%?t=2000',
  2084. 'loggedOutRegex': /Cloudflare|Ray ID|Forgotten your password/,
  2085. 'matchRegex': /did not match any/},
  2086. { 'name': 'NZBnoob',
  2087. 'icon': 'https://nzbnoob.com/templates/bookstrap/images/icons/favicon.ico',
  2088. 'searchUrl': 'https://nzbnoob.com/search/%search_string%?t=5000',
  2089. 'loggedOutRegex': /Cloudflare|Ray ID|Forgotten your password/,
  2090. 'matchRegex': /did not match any/,
  2091. 'TV': true},
  2092. { 'name': 'NZBplanet',
  2093. 'icon': 'https://nzbplanet.net/views/images/iphoneicon.png',
  2094. 'searchUrl': 'https://nzbplanet.net/search/%search_string% %year%?t=2000',
  2095. 'loggedOutRegex': /Cloudflare|Ray ID|>Remember Me</,
  2096. 'matchRegex': /did not match any/},
  2097. { 'name': 'NZBplanet',
  2098. 'icon': 'https://nzbplanet.net/views/images/iphoneicon.png',
  2099. 'searchUrl': 'https://nzbplanet.net/search/%search_string%?t=5000',
  2100. 'loggedOutRegex': /Cloudflare|Ray ID|>Remember Me</,
  2101. 'matchRegex': /did not match any/,
  2102. 'TV': true},
  2103. { 'name': 'NZBsu',
  2104. 'icon': 'https://www.nzb.su/templates/light/images/icons/favicon.ico',
  2105. 'searchUrl': 'https://www.nzb.su/search/%search_string% %year%?t=2000',
  2106. 'loggedOutRegex': /Cloudflare|Ray ID|Forgotten your password/,
  2107. 'matchRegex': /did not match any/},
  2108. { 'name': 'NZBsu',
  2109. 'icon': 'https://www.nzb.su/templates/light/images/icons/favicon.ico',
  2110. 'searchUrl': 'https://www.nzb.su/search/%search_string%?t=5000',
  2111. 'loggedOutRegex': /Cloudflare|Ray ID|Forgotten your password/,
  2112. 'matchRegex': /did not match any/,
  2113. 'TV': true},
  2114. { 'name': 'OmgWtf',
  2115. 'searchUrl': 'https://omgwtfnzbs.me/browse?search=%tt%&cat=default',
  2116. 'loggedOutRegex': /Cloudflare|Ray ID|Forgot your username/,
  2117. 'matchRegex': /returned no results/,
  2118. 'both': true}
  2119. ];
  2120.  
  2121. var subs_sites = [
  2122. { 'name': 'Addic7ed',
  2123. 'searchUrl': 'https://www.addic7ed.com/search.php?search=%search_string%&Submit=Search',
  2124. 'matchRegex': /returned zero results/,
  2125. 'inSecondSearchBar': true,
  2126. 'both': true},
  2127. { 'name': 'AniSubs (EN)',
  2128. 'searchUrl': 'https://anisubsblog.blogspot.com/search?q=%search_string_orig%',
  2129. 'matchRegex': /No posts matching/,
  2130. 'inSecondSearchBar': true,
  2131. 'both': true},
  2132. { 'name': 'ArgenTeam (ES)',
  2133. 'icon': 'https://www.argenteam.net/static/images/favicon.ico',
  2134. 'searchUrl': 'https://www.argenteam.net/search?filter=%search_string_orig%+%year%&movieFilter=on',
  2135. 'matchRegex': /No se encontraron coincidencias/,
  2136. 'inSecondSearchBar': true},
  2137. { 'name': 'ArgenTeam (ES)',
  2138. 'icon': 'https://www.argenteam.net/static/images/favicon.ico',
  2139. 'searchUrl': 'https://www.argenteam.net/search?filter=%search_string_orig%+%year%&serieFilter=on',
  2140. 'matchRegex': /No se encontraron coincidencias/,
  2141. 'inSecondSearchBar': true,
  2142. 'TV': true},
  2143. { 'name': 'Moviesubtitles',
  2144. 'searchUrl': 'http://www.moviesubtitles.org/search.php?q=%search_string_orig%',
  2145. 'matchRegex': /No results found/,
  2146. 'inSecondSearchBar': true},
  2147. { 'name': 'Napisy24 (PL)',
  2148. 'searchUrl': 'https://napisy24.pl/szukaj?page=1&lang=1&search=%search_string_orig%&typ=1#',
  2149. 'matchRegex': /Znalezione Napisy \(0\)/,
  2150. 'inSecondSearchBar': true},
  2151. { 'name': 'Napisy24 (PL)',
  2152. 'searchUrl': 'https://napisy24.pl/szukaj?page=1&lang=1&search=%search_string_orig%&typ=2#',
  2153. 'matchRegex': /Znalezione Napisy \(0\)/,
  2154. 'inSecondSearchBar': true,
  2155. 'TV': true},
  2156. { 'name': 'OpenSubtitles',
  2157. 'searchUrl': 'https://www.opensubtitles.org/en/search/imdbid-%tt%',
  2158. 'loggedOutRegex': /Guru Meditation/,
  2159. 'matchRegex': /div itemscope/,
  2160. 'positiveMatch': true,
  2161. 'inSecondSearchBar': true,
  2162. 'both': true},
  2163. { 'name': 'OpenSubtitles (EN)',
  2164. 'searchUrl': 'https://www.opensubtitles.org/en/search/sublanguageid-eng/imdbid-%tt%',
  2165. 'loggedOutRegex': /Guru Meditation/,
  2166. 'matchRegex': /div itemscope/,
  2167. 'positiveMatch': true,
  2168. 'inSecondSearchBar': true,
  2169. 'both': true},
  2170. { 'name': 'PlanetDP (TR)',
  2171. 'searchUrl': 'https://planetdp.org/movie/search/?title=%tt%',
  2172. 'matchRegex': /<span>Altyazılar/,
  2173. 'positiveMatch': true,
  2174. 'inSecondSearchBar': true,
  2175. 'both': true},
  2176. { 'name': 'Podnapisi',
  2177. 'searchUrl': 'https://www.podnapisi.net/en/subtitles/search/advanced?keywords=%search_string_orig%&year=%year%',
  2178. 'matchRegex': /table-responsive/,
  2179. 'positiveMatch': true,
  2180. 'inSecondSearchBar': true,
  2181. 'both': true},
  2182. { 'name': 'Podnapisi (EN)',
  2183. 'searchUrl': 'https://www.podnapisi.net/en/subtitles/search/advanced?keywords=%search_string_orig%&year=%year%&language=en',
  2184. 'matchRegex': /table-responsive/,
  2185. 'positiveMatch': true,
  2186. 'inSecondSearchBar': true,
  2187. 'both': true},
  2188. { 'name': 'RegieLive (RO)',
  2189. 'searchUrl': 'https://subtitrari.regielive.ro/cauta.html?s=%search_string_orig%',
  2190. 'matchRegex': /Nu au fost gasite subtitrari/,
  2191. 'inSecondSearchBar': true,
  2192. 'both': true},
  2193. { 'name': 'Subs4free (GR|EN)',
  2194. 'icon': 'https://www.subs4free.club/images/icons/favicon-32x32.png',
  2195. 'searchUrl': 'https://www.subs4free.club/search_report.php?search=%search_string%&searchType=1',
  2196. 'matchRegex': /any subtitles using your criteria|There is no subtitle/,
  2197. 'inSecondSearchBar': true},
  2198. { 'name': 'Subs4free (GR|EN)',
  2199. 'icon': 'https://www.subs4free.club/images/icons/favicon-32x32.png',
  2200. 'searchUrl': 'https://www.subs4free.club/search_report.php?search=%search_string%&searchType=2',
  2201. 'matchRegex': /any subtitles using your criteria|There is no subtitle/,
  2202. 'inSecondSearchBar': true,
  2203. 'TV': true},
  2204. { 'name': 'SubDivX (ES)',
  2205. 'searchUrl': 'https://www.subdivx.com/index.php?q=%search_string_orig%+%year%&accion=5&subtitulos=1',
  2206. 'matchRegex': /No encontramos resultados/,
  2207. 'inSecondSearchBar': true},
  2208. { 'name': 'SubDivX (ES)',
  2209. 'searchUrl': 'https://www.subdivx.com/index.php?q=%search_string%&accion=5&subtitulos=1',
  2210. 'matchRegex': /No encontramos resultados/,
  2211. 'inSecondSearchBar': true,
  2212. 'TV': true},
  2213. { 'name': 'Subs.com.ru (RU)',
  2214. 'searchUrl': 'http://subs.com.ru/index.php?e=search&sq=%search_string_orig%',
  2215. 'matchRegex': /Ничего не найдено/,
  2216. 'inSecondSearchBar': true,
  2217. 'both': true},
  2218. { 'name': 'Subs.ro',
  2219. 'icon': 'https://cdn.subs.ro/fav.ico',
  2220. 'searchUrl': 'https://subs.ro/subtitrari/imdbid/%nott%',
  2221. 'matchRegex': /Pagina solicitată/,
  2222. 'inSecondSearchBar': true,
  2223. 'both': true},
  2224. { 'name': 'Subscene',
  2225. 'searchUrl': 'https://subscene.com/subtitles/searchbytitle?query=%search_string%',
  2226. 'loggedOutRegex': /Please do not hammer|HTTP Error 404/,
  2227. 'matchRegex': />Exact</,
  2228. 'positiveMatch': true,
  2229. 'rateLimit': 7500,
  2230. 'inSecondSearchBar': true},
  2231. { 'name': 'Subscene',
  2232. 'searchUrl': 'https://subscene.com/subtitles/searchbytitle?query=%search_string%',
  2233. 'loggedOutRegex': /Please do not hammer|HTTP Error 404/,
  2234. 'matchRegex': />TV-Series</,
  2235. 'positiveMatch': true,
  2236. 'rateLimit': 7500,
  2237. 'inSecondSearchBar': true,
  2238. 'TV': true},
  2239. { 'name': 'SubsLand (BG)',
  2240. 'searchUrl': 'https://subsland.com/index.php?s=%search_string_orig%&w=name&category=1',
  2241. 'matchRegex': /Няма намерени субтитри|Не са открити/,
  2242. 'inSecondSearchBar': true,
  2243. 'both': true},
  2244. { 'name': 'SubsUnacs (BG)',
  2245. 'icon': 'https://i.imgur.com/vXegljj.png',
  2246. 'searchUrl': 'https://subsunacs.net/search.php?m=%search_string_orig%&y=%year%&t=Submit',
  2247. 'matchRegex': /transpDiv/,
  2248. 'positiveMatch': true,
  2249. 'inSecondSearchBar': true,
  2250. 'both': true},
  2251. { 'name': 'Subtitles.hr',
  2252. 'icon': 'https://i.imgur.com/QMpMiu0.png',
  2253. 'searchUrl': 'https://www.subtitles.hr/subtitles-search/?movie=%search_string_orig%',
  2254. 'matchRegex': /matched subtitles found/,
  2255. 'positiveMatch': true,
  2256. 'inSecondSearchBar': true,
  2257. 'both': true},
  2258. { 'name': 'Subtitry (RU)',
  2259. 'searchUrl': 'https://subtitry.ru/subtitles/?film=%search_string_orig%',
  2260. 'matchRegex': />0</,
  2261. 'inSecondSearchBar': true,
  2262. 'both': true},
  2263. { 'name': 'Titlovi (BiH|HR|MK|SLO|SRB)',
  2264. 'searchUrl': 'https://titlovi.com/titlovi/?prijevod=%tt%',
  2265. 'loggedOutRegex': /Ray ID|security check to access|Još samo jedan/,
  2266. 'matchRegex': /<b>0<\/b> rezultata/,
  2267. 'inSecondSearchBar': true,
  2268. 'both': true},
  2269. { 'name': 'TransHeaven (BG)',
  2270. 'icon': 'https://i.imgur.com/f3zgy93.png',
  2271. 'searchUrl': 'http://subs.sab.bz/index.php?act=search&movie=%search_string_orig%&yr=%year%',
  2272. 'matchRegex': /<tr class="subs-row">/,
  2273. 'positiveMatch': true,
  2274. 'inSecondSearchBar': true,
  2275. 'both': true},
  2276. { 'name': 'TVsubtitles',
  2277. 'searchUrl': 'http://www.tvsubtitles.net/search.php?q=%search_string_orig%',
  2278. 'matchRegex': /No results found/,
  2279. 'inSecondSearchBar': true,
  2280. 'TV': true}
  2281. ];
  2282.  
  2283. var other_searchable_sites = [
  2284. { 'name': 'PreDB',
  2285. 'loggedOutRegex': /Ray ID|security check to access|seconds to search again/,
  2286. 'searchUrl': 'https://predb.me/?search=%search_string%+%year%&cats=movies',
  2287. 'matchRegex': /Nothing found.../,
  2288. 'inSecondSearchBar': true},
  2289. { 'name': 'PreDB',
  2290. 'loggedOutRegex': /Ray ID|security check to access|seconds to search again/,
  2291. 'searchUrl': 'https://predb.me/?search=%search_string%&cats=tv',
  2292. 'matchRegex': /Nothing found.../,
  2293. 'inSecondSearchBar': true,
  2294. 'TV': true},
  2295. { 'name': 'PreDB-Orig',
  2296. 'loggedOutRegex': /Ray ID|security check to access|seconds to search again/,
  2297. 'searchUrl': 'https://predb.me/?search=%search_string_orig%+%year%&cats=movies',
  2298. 'matchRegex': /Nothing found.../,
  2299. 'inSecondSearchBar': true},
  2300. { 'name': 'PreDB-Orig',
  2301. 'loggedOutRegex': /Ray ID|security check to access|seconds to search again/,
  2302. 'searchUrl': 'https://predb.me/?search=%search_string_orig%&cats=tv',
  2303. 'matchRegex': /Nothing found.../,
  2304. 'inSecondSearchBar': true,
  2305. 'TV': true},
  2306. { 'name': 'srrDB',
  2307. 'searchUrl': 'https://www.srrdb.com/browse/imdb:%nott%',
  2308. 'matchRegex': />0 results</,
  2309. 'inSecondSearchBar': true,
  2310. 'both': true},
  2311. { 'name': 'Ulož',
  2312. 'searchUrl': 'https://uloz.to/hledej?type=videos&q=%search_string_orig%',
  2313. 'matchRegex': /nebylo nic nalezeno/,
  2314. 'inSecondSearchBar': true,
  2315. 'both': true},
  2316. { 'name': 'xREL',
  2317. 'searchUrl': 'https://www.xrel.to/search.html?xrel_search_query=%tt%&lang=en_US',
  2318. 'matchRegex': /not return any results/,
  2319. 'inSecondSearchBar': true,
  2320. 'both': true}
  2321. ];
  2322.  
  2323. var sites = public_sites.concat(private_sites, usenet_sites, custom_sites, subs_sites, other_searchable_sites);
  2324.  
  2325. var icon_sites = [
  2326. { 'name': 'AllMovie',
  2327. 'searchUrl': 'https://www.allmovie.com/search/movies/%search_string%',
  2328. 'showByDefault': false},
  2329. { 'name': 'AlloCiné (FR)',
  2330. 'icon': 'https://www.allocine.fr/favicon.ico',
  2331. 'searchUrl': 'https://www.allocine.fr/recherche/?q=%search_string%',
  2332. 'showByDefault': false},
  2333. { 'name': 'Amazon',
  2334. 'searchUrl': 'https://www.amazon.com/s/ref=nb_sb_noss?url=search-alias%3Dmovies-tv&field-keywords=%search_string%',
  2335. 'showByDefault': false},
  2336. { 'name': 'BCDB',
  2337. 'icon': 'https://i.imgur.com/IZwCRkn.png',
  2338. 'searchUrl': 'https://www.bcdb.com/bcdb/search.cgi?query=%search_string%',
  2339. 'showByDefault': false},
  2340. { 'name': 'Blu-ray',
  2341. 'searchUrl': 'https://www.blu-ray.com/search/?quicksearch=1&quicksearch_country=all&quicksearch_keyword=%search_string%+&section=bluraymovies',
  2342. 'showByDefault': false},
  2343. { 'name': 'Box Office Mojo',
  2344. 'searchUrl': 'https://www.boxofficemojo.com/title/%tt%',
  2345. 'showByDefault': false},
  2346. { 'name': 'Criticker',
  2347. 'searchUrl': 'https://www.criticker.com/?search=%search_string%&type=films'},
  2348. { 'name': 'DVD-Basen',
  2349. 'icon': 'https://i.imgur.com/H4PYPdf.png',
  2350. 'searchUrl': 'http://www.dvd-basen.dk/uk/home.php3?search=%search_string%&mvis=ok&region=z&land=z&ok=go',
  2351. 'showByDefault': false},
  2352. { 'name': 'DVDBeaver',
  2353. 'icon': 'https://i.imgur.com/s2ErKFm.png',
  2354. 'searchUrl': 'https://www.google.com/search?q="%search_string%"+site:www.dvdbeaver.com',
  2355. 'showByDefault': false},
  2356. { 'name': 'DVDCompare',
  2357. 'searchUrl': 'https://www.dvdcompare.net/comparisons/search.php',
  2358. 'mPOST': 'param=%search_string%&searchtype=text',
  2359. 'showByDefault': false},
  2360. { 'name': 'DVDTalk',
  2361. 'searchUrl': 'https://www.dvdtalk.com/reviews/search?orderBy=Date&reviewType=All&NReviews=50&searchText=%search_string%&searchType=advanced',
  2362. 'showByDefault': false},
  2363. { 'name': 'Facebook',
  2364. 'searchUrl': 'https://www.facebook.com/search/str/%search_string%/keywords_pages',
  2365. 'showByDefault': false},
  2366. { 'name': 'FilmAffinity',
  2367. 'searchUrl': 'https://www.filmaffinity.com/en/advsearch.php?stext=%search_string%&stype[]=title&fromyear=%year%&toyear=%year%',
  2368. 'showByDefault': false},
  2369. { 'name': 'FindAnyFilm',
  2370. 'icon': 'https://www.findanyfilm.com/server-assets/favicon.png',
  2371. 'searchUrl': 'https://www.findanyfilm.com/search?all=%search_string%&sort=product_release_date&type=ALL',
  2372. 'showByDefault': false},
  2373. { 'name': 'Google',
  2374. 'searchUrl': 'https://www.google.com/search?q=%search_string%'},
  2375. { 'name': 'iCheckMovies',
  2376. 'searchUrl': 'https://www.icheckmovies.com/search/movies/?query=%tt%'},
  2377. { 'name': 'JustWatch',
  2378. 'searchUrl': 'https://justwatch.com/us/search?q=%search_string%',
  2379. 'showByDefault': false},
  2380. { 'name': 'КиноПоиск (RU)',
  2381. 'searchUrl': 'https://www.kinopoisk.ru/index.php?kp_query=%search_string%',
  2382. 'showByDefault': false},
  2383. { 'name': 'Letterboxd',
  2384. 'searchUrl': 'https://letterboxd.com/imdb/%nott%'},
  2385. { 'name': 'Lumiere',
  2386. 'searchUrl': 'https://lumiere.obs.coe.int/web/search/',
  2387. 'mPOST': 'search=search&title=%search_string%&search.x=0&search.y=0',
  2388. 'showByDefault': false},
  2389. { 'name': 'Metacritic',
  2390. 'searchUrl': 'https://www.metacritic.com/search/all/%search_string%/results?cats[movie]=1&cats[tv]=1&search_type=advanced&sort=relevancy',
  2391. 'showByDefault': false},
  2392. { 'name': 'Movie-Censorship',
  2393. 'icon': 'https://i.imgur.com/4gF8xKW.png',
  2394. 'searchUrl': 'https://www.movie-censorship.com/list.php?s=%search_string%',
  2395. 'showByDefault': false},
  2396. { 'name': 'MovieBuff',
  2397. 'searchUrl': 'https://www.moviebuff.com/search?q=%search_string_orig%',
  2398. 'showByDefault': false},
  2399. { 'name': 'MovieChat',
  2400. 'icon': 'https://moviechat.org/favicons/favicon-32x32.png',
  2401. 'searchUrl': 'https://moviechat.org/%tt%'},
  2402. { 'name': 'MovieMistakes',
  2403. 'searchUrl': 'https://www.moviemistakes.com/search.php?text=%search_string%',
  2404. 'showByDefault': false},
  2405. { 'name': 'MoviePosterDB',
  2406. 'searchUrl': 'https://www.movieposterdb.com/search?category=title&q=%tt%',
  2407. 'showByDefault': false},
  2408. { 'name': 'MRQE',
  2409. 'icon': 'https://www.mrqe.com/static/favicon.ico',
  2410. 'searchUrl': 'https://www.mrqe.com/search?utf8=✓&q=%search_string%',
  2411. 'showByDefault': false},
  2412. { 'name': 'Netflix',
  2413. 'searchUrl': 'https://www.netflix.com/search/%search_string%',
  2414. 'showByDefault': false},
  2415. { 'name': 'OFDb (DE)',
  2416. 'searchUrl': 'https://ssl.ofdb.de/view.php?page=suchergebnis&SText=%tt%&Kat=IMDb',
  2417. 'showByDefault': false},
  2418. { 'name': 'OpenSubtitles',
  2419. 'searchUrl': 'https://www.opensubtitles.org/en/search/imdbid-%tt%'},
  2420. { 'name': 'Rotten Tomatoes',
  2421. 'searchUrl': 'https://www.rottentomatoes.com/search/?search=%search_string%'},
  2422. { 'name': 'ScreenAnarchy',
  2423. 'searchUrl': 'https://screenanarchy.com/search.html?term=%search_string%',
  2424. 'showByDefault': false},
  2425. { 'name': 'SensCritique (FR)',
  2426. 'searchUrl': 'https://www.senscritique.com/search?q=%search_string%',
  2427. 'showByDefault': false},
  2428. { 'name': 'Subscene',
  2429. 'icon': 'https://subscene.com/favicon.ico',
  2430. 'searchUrl': 'https://subscene.com/subtitles/searchbytitle?query=%search_string%'},
  2431. { 'name': 'The Numbers',
  2432. 'searchUrl': 'https://www.the-numbers.com/custom-search?searchterm=%search_string%',
  2433. 'showByDefault': false},
  2434. { 'name': 'TMDB',
  2435. 'icon': 'https://www.themoviedb.org/assets/2/favicon-16x16-b362d267873ce9c5a39f686a11fe67fec2a72ed25fa8396c11b71aa43c938b11.png',
  2436. 'searchUrl': 'https://www.themoviedb.org/search?query=%search_string%'},
  2437. { 'name': 'TrailerAddict',
  2438. 'icon': 'https://cdn.traileraddict.com/icons/favicon-32x32.png',
  2439. 'searchUrl': 'https://www.traileraddict.com/search/%search_string%',
  2440. 'showByDefault': false},
  2441. { 'name': 'Trakt',
  2442. 'icon': 'https://walter.trakt.tv/hotlink-ok/public/favicon.ico',
  2443. 'searchUrl': 'https://trakt.tv/search/imdb?query=%tt%',
  2444. 'showByDefault': false},
  2445. { 'name': 'TVDB',
  2446. 'icon': 'https://www.thetvdb.com/images/icon.png',
  2447. 'searchUrl': 'https://www.thetvdb.com/search?query=%search_string%'},
  2448. { 'name': 'TVmaze',
  2449. 'icon': 'https://static.tvmaze.com/images/favico/favicon.ico',
  2450. 'searchUrl': 'http://www.tvmaze.com/search?q=%search_string%',
  2451. 'showByDefault': false},
  2452. { 'name': 'uNoGS',
  2453. 'searchUrl': 'https://unogs.com/?q=%search_string%',
  2454. 'showByDefault': false},
  2455. { 'name': 'Wikipedia',
  2456. 'searchUrl': 'https://en.wikipedia.org/w/index.php?search=%search_string%&go=Go'},
  2457. { 'name': 'WhatsOnMubi',
  2458. 'searchUrl': 'https://whatsonmubi.com/?q=%search_string%',
  2459. 'showByDefault': false},
  2460. { 'name': 'YouTube',
  2461. 'searchUrl': 'https://www.youtube.com/results?search_query="%search_string%"+%year%+trailer'}
  2462. ];
  2463.  
  2464. //==============================================================================
  2465. // Replace Search URL parameters
  2466. //==============================================================================
  2467.  
  2468. function replaceSearchUrlParams(site, movie_id, movie_title, movie_title_orig, movie_year) {
  2469. var search_url = site['searchUrl'];
  2470. // If an array, do a little bit of recursion
  2471. if ($.isArray(search_url)) {
  2472. var search_array = [];
  2473. $.each(search_url, function(index, url) {
  2474. search_array[index] = replaceSearchUrlParams(url, movie_id, movie_title, movie_title_orig, movie_year);
  2475. });
  2476. return search_array;
  2477. }
  2478. var space_replace = ('spaceEncode' in site) ? site['spaceEncode'] : '+';
  2479. var search_string = movie_title.trim().replace(/ +\(.*|&/g, '').replace(/\s+/g, space_replace);
  2480. var search_string_orig = movie_title_orig.trim().replace(/ +\(.*|&/g, '').replace(/\s+/g, space_replace);
  2481. var movie_year = (onSearchPage) ? movie_year : document.title.replace(/^(.+) \((\D*|)(\d{4})(.*)$/gi, '$3');
  2482. var s = search_url.replace(/%tt%/g, 'tt' + movie_id)
  2483. .replace(/%nott%/g, movie_id)
  2484. .replace(/%search_string%/g, search_string)
  2485. .replace(/%search_string_orig%/g, search_string_orig)
  2486. .replace(/%year%/g, movie_year);
  2487. return s;
  2488. }
  2489.  
  2490. //==============================================================================
  2491. // Construct & return Title/List GM_config setting
  2492. //==============================================================================
  2493.  
  2494. function getPageSetting(key) {
  2495. return (onSearchPage ? GM_config.get(key + '_search') : GM_config.get(key + '_movie'));
  2496. }
  2497.  
  2498. //==============================================================================
  2499. // Get site's icon
  2500. //==============================================================================
  2501.  
  2502. function getFavicon(site, hide_on_err) {
  2503. var favicon;
  2504. if (typeof(hide_on_err) === 'undefined') { hide_on_err = false }
  2505. if ('icon' in site) {
  2506. favicon = site['icon'];
  2507. } else {
  2508. var url = new URL(site['searchUrl']);
  2509. favicon = url.origin + '/favicon.ico';
  2510. }
  2511. var iconsize = ('matchRegex' in site) ? GM_config.get('cfg_icons_size') : GM_config.get('cfg_icons_size') - 2;
  2512. var title = (site['TV']) ? site['name'] + ' (TV)' : site['name'];
  2513. var img = $('<img />').attr({'style': '-moz-opacity: 0.4; border: 0',
  2514. 'width': iconsize,
  2515. 'height': iconsize,
  2516. 'src': favicon,
  2517. 'title': title,
  2518. 'alt': site['name']});
  2519. if (hide_on_err) { img.attr('onerror', "this.style.display='none';") }
  2520. return img;
  2521. }
  2522.  
  2523. //==============================================================================
  2524. // Add search links to an element
  2525. //==============================================================================
  2526.  
  2527. function addLink(elem, site_name, target, site, state, scout_tick) {
  2528. // State should always be one of the values defined in valid_states
  2529. var link = $('<a />').attr('href', target).attr('target', '_blank');
  2530. if ($.inArray(state, valid_states) < 0) {
  2531. console.log("Unknown state " + state);
  2532. }
  2533. // Link and add Form element for POST method.
  2534. if ('mPOST' in site) {
  2535. var form_name = (site['TV']) ? site['name'] + '-TV-form' : site['name'] + '-form';
  2536. var placebo_url = new URL(target).origin;
  2537. link = $('<a />').attr('href', placebo_url).attr('onclick', "$('#" + form_name + "').submit(); return false;").attr('target', '_blank');
  2538.  
  2539. var data = '{"' + site['mPOST'].replace(/&/g, '","').replace(/=/g, '":"').replace(/\+/g, ' ') + '"}',
  2540. data = JSON.parse(data);
  2541. var addform = $('<form></form>');
  2542. addform.attr('id', form_name);
  2543. addform.attr('action', target);
  2544. addform.attr('method', 'post');
  2545. addform.attr('style', 'display: none;');
  2546. addform.attr('target', '_blank');
  2547. for (name in data) {
  2548. var addinput = $("<input>");
  2549. addinput.attr('type', 'text');
  2550. addinput.attr('name', name);
  2551. addinput.attr('value', data[name]);
  2552. addform.append(addinput);
  2553. $('body').append(addform);
  2554. }
  2555. }
  2556. // Icon/Text appearance.
  2557. if (getPageSetting('use_mod_icons')) {
  2558. var icon = getFavicon(site);
  2559. (!GM_config.get('one_line') && !onSearchPage) ? icon.css({'border-width': '0px', 'border-style': 'solid', 'border-radius': '2px', 'margin': '2px 0px'})
  2560. : icon.css({'border-width': '3px', 'border-style': 'solid', 'border-radius': '2px', 'margin': '2px 0px'});
  2561. if (state == 'error' || state == 'logged_out') {
  2562. (getPageSetting('highlight_sites').split(',').includes(site['name'])) ? icon.css('border-color', 'rgb(255,0,0)')
  2563. : icon.css('border-color', 'rgb(180,0,0)');
  2564. } else if (state == 'missing') {
  2565. (getPageSetting('highlight_sites').split(',').includes(site['name'])) ? icon.css('border-color', 'rgb(255,255,0)')
  2566. : icon.css('border-color', 'rgb(230,200,100)');
  2567. } else if (state == 'found') {
  2568. (getPageSetting('highlight_sites').split(',').includes(site['name'])) ? icon.css('border-color', 'rgb(0,220,0)')
  2569. : icon.css('border-color', 'rgb(0,130,0)');
  2570. if ((site['name']).match('-Req')) icon.css('border-color', 'rgb(50,50,200)');
  2571. }
  2572. link.append(icon);
  2573. } else {
  2574. site_name = (getPageSetting('highlight_sites').split(',').includes(site['name'])) ? site_name.bold() : site_name;
  2575. if (state == 'missing' || state == 'error' || state == 'logged_out') {
  2576. link.append($('<s />').append(site_name));
  2577. } else {
  2578. link.append(site_name);
  2579. }
  2580. if (state == 'error' || state == 'logged_out') {
  2581. link.css('color', 'red');
  2582. }
  2583. }
  2584. // Create/find elements for Search/List pages.
  2585. if (onSearchPage) {
  2586. var result_box = $(elem).find('td.result_box');
  2587. if (result_box.length == 0) {
  2588. $(elem).append($('<td />').addClass('result_box'));
  2589. $.each(valid_states, function(i, name) {
  2590. $(elem).find('td.result_box').append("<span id='imdbscout_" + name + scout_tick + "'>"+'</span>');
  2591. });
  2592. }
  2593. }
  2594. if (onSearchPage && GM_config.get('load_third_bar_search')) {
  2595. var result_box3 = $(elem).find('xd.result_box_3rd');
  2596. if (result_box3.length == 0) {
  2597. $(elem).append($('<xd />').addClass('result_box_3rd'));
  2598. $.each(valid_states, function(i, name) {
  2599. $(elem).find('xd.result_box_3rd').append("<span id='imdbscout3_" + name + scout_tick + "'>"+'</span>');
  2600. });
  2601. }
  2602. }
  2603. // Add links to IMDb page.
  2604. var in_element_two = ('inSecondSearchBar' in site) ? site['inSecondSearchBar'] : false;
  2605. var in_element_three = ('inThirdSearchBar' in site) ? site['inThirdSearchBar'] : false;
  2606. if (onSearchPage && in_element_two || in_element_three && !getPageSetting('load_third_bar') || in_element_two && in_element_three) {
  2607. return;
  2608. } else if (!onSearchPage && in_element_two) {
  2609. $('#imdbscoutsecondbar_' + state).append(link).append(' ');
  2610. } else if (!onSearchPage && in_element_three) {
  2611. $('#imdbscoutthirdbar_' + state).append(link).append(' ');
  2612. } else if (!onSearchPage) {
  2613. $('#imdbscout_' + state).append(link).append(' ');
  2614. } else if (!in_element_three) {
  2615. $('#imdbscout_' + state + scout_tick).append(link);
  2616. } else {
  2617. $('#imdbscout3_' + state + scout_tick).append(link);
  2618. }
  2619.  
  2620. // Call to the sorting launcher.
  2621. if (!onSearchPage && !in_element_two && !in_element_three) {
  2622. iconSorterLauncher(site);
  2623. }
  2624. }
  2625.  
  2626. //==============================================================================
  2627. // Determine whether a site should be displayed
  2628. //==============================================================================
  2629.  
  2630. function maybeAddLink(elem, site_name, search_url, site, scout_tick, movie_id, movie_title, movie_title_orig, movie_year) {
  2631. // If the search URL is an array, recurse briefly on the elements.
  2632. if ($.isArray(search_url)) {
  2633. $.each(search_url, function(index, url) {
  2634. maybeAddLink(elem, site_name + '_' + (index + 1).toString(), url, site);
  2635. });
  2636. return;
  2637. }
  2638. // Don't check the second/third bar sites if a 2nd/3rd bar is disabled in the Settings.
  2639. var in_element_two = ('inSecondSearchBar' in site) ? site['inSecondSearchBar'] : false;
  2640. var in_element_three = ('inThirdSearchBar' in site) ? site['inThirdSearchBar'] : false;
  2641. if (in_element_two && !GM_config.get('load_second_bar') || in_element_three && !getPageSetting('load_third_bar') || in_element_two && in_element_three) {
  2642. return;
  2643. }
  2644. // Don't check the second bar sites on a Search/List/Watchlist page.
  2645. if (in_element_two && onSearchPage) {
  2646. return;
  2647. }
  2648. // Connection rate limiter per domain.
  2649. var set_rate = ('rateLimit' in site) ? site['rateLimit'] : 200;
  2650. var rate = (onSearchPage) ? set_rate * 4 : set_rate;
  2651. var domain = search_url.split('/')[2];
  2652. var now = (new Date())*1;
  2653. var lastLoaded = window.localStorage[domain+'_lastLoaded'];
  2654. if (!lastLoaded) {
  2655. lastLoaded = now - 50000;
  2656. } else {
  2657. lastLoaded = parseInt(lastLoaded);
  2658. }
  2659. if (now - lastLoaded < rate) {
  2660. window.setTimeout(maybeAddLink.bind(undefined, elem, site['name'], search_url, site, scout_tick, movie_id, movie_title, movie_title_orig, movie_year), rate);
  2661. return;
  2662. } else {
  2663. window.localStorage[domain+'_lastLoaded'] = (new Date())*1;
  2664. }
  2665.  
  2666. var success_match = ('positiveMatch' in site) ? site['positiveMatch'] : false;
  2667. var target = search_url;
  2668. if ('goToUrl' in site) {
  2669. target = replaceSearchUrlParams({'searchUrl': site['goToUrl'], 'spaceEncode': ('spaceEncode' in site) ? site['spaceEncode'] : '+'}, movie_id, movie_title, movie_title_orig, movie_year);
  2670. }
  2671. // Check for results with POST method.
  2672. if ('mPOST' in site) {
  2673. var data = site['mPOST'];
  2674. GM.xmlHttpRequest({
  2675. method: 'POST',
  2676. url: search_url,
  2677. data: data,
  2678. headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' },
  2679. onload: function(response) {
  2680. if (response.responseHeaders.indexOf('efresh: 0; url') > -1 || response.status > 399) {
  2681. addLink(elem, site_name, target, site, 'logged_out', scout_tick);
  2682. } else if (site['positiveMatch'] && site['loggedOutRegex'] && String(response.responseText).match(site['loggedOutRegex'])) {
  2683. addLink(elem, site_name, target, site, 'logged_out', scout_tick);
  2684. } else if (String(response.responseText).match(site['matchRegex']) ? !(success_match) : success_match) {
  2685. if (getPageSetting('highlight_missing').split(',').includes(site['name'])) {
  2686. if (elem.style) {
  2687. elem.parentNode.style.background = 'rgba(255,104,104,0.7)';
  2688. } else {
  2689. document.querySelector('#imdbscout_missing').style.background = 'rgba(255,104,104,0.7)';
  2690. }
  2691. }
  2692. if (!getPageSetting('hide_missing')) {
  2693. addLink(elem, site_name, target, site, 'missing', scout_tick);
  2694. }
  2695. } else if (site['loggedOutRegex'] && String(response.responseText).match(site['loggedOutRegex'])) {
  2696. addLink(elem, site_name, target, site, 'logged_out', scout_tick);
  2697. } else {
  2698. addLink(elem, site_name, target, site, 'found', scout_tick);
  2699. }
  2700. },
  2701. onerror: function() {
  2702. addLink(elem, site_name, target, site, 'error', scout_tick);
  2703. },
  2704. onabort: function() {
  2705. addLink(elem, site_name, target, site, 'error', scout_tick);
  2706. }
  2707. });
  2708. return;
  2709. }
  2710. // Check for results with GET method.
  2711. GM.xmlHttpRequest({
  2712. method: 'GET',
  2713. url: search_url,
  2714. onload: function(response) {
  2715. if (response.responseHeaders.indexOf('efresh: 0; url') > -1 || response.status > 399) {
  2716. addLink(elem, site_name, target, site, 'logged_out', scout_tick);
  2717. } else if (site['positiveMatch'] && site['loggedOutRegex'] && String(response.responseText).match(site['loggedOutRegex'])) {
  2718. addLink(elem, site_name, target, site, 'logged_out', scout_tick);
  2719. } else if (String(response.responseText).match(site['matchRegex']) ? !(success_match) : success_match) {
  2720. if (getPageSetting('highlight_missing').split(',').includes(site['name'])) {
  2721. if (elem.style) {
  2722. elem.parentNode.style.background = 'rgba(255,104,104,0.7)';
  2723. } else {
  2724. document.querySelector('#imdbscout_missing').style.background = 'rgba(255,104,104,0.7)';
  2725. }
  2726. }
  2727. if (!getPageSetting('hide_missing')) {
  2728. addLink(elem, site_name, target, site, 'missing', scout_tick);
  2729. }
  2730. } else if (site['loggedOutRegex'] && String(response.responseText).match(site['loggedOutRegex'])) {
  2731. addLink(elem, site_name, target, site, 'logged_out', scout_tick);
  2732. } else {
  2733. addLink(elem, site_name, target, site, 'found', scout_tick);
  2734. }
  2735. },
  2736. onerror: function() {
  2737. addLink(elem, site_name, target, site, 'error', scout_tick);
  2738. },
  2739. onabort: function() {
  2740. addLink(elem, site_name, target, site, 'error', scout_tick);
  2741. }
  2742. });
  2743. }
  2744.  
  2745. //==============================================================================
  2746. // Perform code to create fields and display sites
  2747. //==============================================================================
  2748.  
  2749. function perform(elem, movie_id, movie_title, movie_title_orig, is_tv, is_movie, movie_year, scout_tick) {
  2750. var site_shown = false;
  2751. $.each(sites, function(index, site) {
  2752. if (site['show']) {
  2753. site_shown = true;
  2754. // For TV Series show only TV links. TV Special, TV Movie, Episode & Documentary are treated as TV and Movie.
  2755. if ((Boolean(site['TV']) == is_tv || Boolean(site['both'])) || (!is_tv && !is_movie) || getPageSetting('ignore_type')) {
  2756. var searchUrl = replaceSearchUrlParams(site, movie_id, movie_title, movie_title_orig, movie_year);
  2757. if ('mPOST' in site) {
  2758. site['mPOST'] = replaceSearchUrlParams({'searchUrl': site['mPOST']}, movie_id, movie_title, movie_title_orig, movie_year);
  2759. }
  2760. if ('goToUrl' in site && getPageSetting('call_http_mod')) {
  2761. maybeAddLink(elem, site['name'], searchUrl, site, scout_tick, movie_id, movie_title, movie_title_orig, movie_year);
  2762. }
  2763. if ('goToUrl' in site && !getPageSetting('call_http_mod')) {
  2764. searchUrl = replaceSearchUrlParams({'searchUrl': site['goToUrl'], 'spaceEncode': ('spaceEncode' in site) ? site['spaceEncode'] : '+'}, movie_id, movie_title, movie_title_orig, movie_year);
  2765. addLink(elem, site['name'], searchUrl, site, 'found', scout_tick);
  2766. }
  2767. if (!('goToUrl' in site) && getPageSetting('call_http_mod')) {
  2768. maybeAddLink(elem, site['name'], searchUrl, site, scout_tick);
  2769. }
  2770. if (!('goToUrl' in site) && !getPageSetting('call_http_mod')){
  2771. addLink(elem, site['name'], searchUrl, site, 'found', scout_tick);
  2772. }
  2773. }
  2774. }
  2775. });
  2776. if (!site_shown) {
  2777. $(elem).append('<pre>No sites enabled!\nFor Settings look at Monkey icon.\nFor now you can press this temporary button:');
  2778. var p = $('<p />').attr('id', 'imdbscout_settings_button');
  2779. p.append($('<button>Load Settings</button>').click(function() {
  2780. GM_config.open();
  2781. $('#imdbscout_settings_button').remove();
  2782. }));
  2783. $(elem).append(p);
  2784. }
  2785. }
  2786.  
  2787. //==============================================================================
  2788. // 'Load' button code
  2789. //==============================================================================
  2790.  
  2791. // Runs when "Load on Start?" is disabled.
  2792. function displayButton() {
  2793. var p = $('<p />').attr('id', 'imdbscout_button');
  2794. p.append($('<button>Load IMDb Scout</button>').click(function() {
  2795. $('#imdbscout_button').remove();
  2796. if (onSearchPage) {
  2797. performSearch();
  2798. } else {
  2799. performPage();
  2800. }
  2801. }));
  2802. if (onSearchPage) {
  2803. $('#sidebar').append(p);
  2804. } else if ($('h1.header:first').length) {
  2805. $('h1.header:first').parent().append(p);
  2806. } else if (GM_config.get('use_new_layout') && $('.button_panel.navigation_panel').length) {
  2807. $('.button_panel.navigation_panel').after(p);
  2808. } else if (GM_config.get('use_new_layout') && $('.title_block').length) {
  2809. $('.title_block').after(p);
  2810. } else if ($('#title-overview-widget').length) {
  2811. $('#title-overview-widget').parent().append(p);
  2812. } else if ($('.titlereference-header').length) {
  2813. $('.titlereference-header').append(p);
  2814. } else {
  2815. $('#tn15rating').before(p);
  2816. }
  2817. }
  2818.  
  2819. //==============================================================================
  2820. // Icons at top bar on Title page
  2821. //==============================================================================
  2822.  
  2823. // Unlike the other URLs, they aren't checked to see if the movie exists.
  2824. function addIconBar(movie_id, movie_title, movie_title_orig) {
  2825. var iconbar;
  2826. if ($('h1.header:first').length) {
  2827. iconbar = getIconsLinkArea();
  2828. } else if ($('.title_wrapper h1').length) {
  2829. iconbar = getIconsLinkArea();
  2830. } else if ($('h3[itemprop="name"]').length) {
  2831. iconbar = $('h3[itemprop="name"]').append($('<br/>'));
  2832. } else {
  2833. iconbar = $('#tn15title .title-extra');
  2834. }
  2835. $.each(icon_sites, function(index, site) {
  2836. if (site['show']) {
  2837. var search_url = replaceSearchUrlParams(site, movie_id, movie_title, movie_title_orig);
  2838. var image = getFavicon(site);
  2839. var html = $('<span />').append("&nbsp;").attr('style', 'font-size: 11px;').append($('<a />').attr('href', search_url).attr('target', '_blank').addClass('iconbar_icon').append(image));
  2840. // Link and add Form element for POST method.
  2841. if ('mPOST' in site) {
  2842. var form_name = site['name'] + '-iconform';
  2843. var placebo_url = new URL(search_url).origin;
  2844. html = $('<span />').append("&nbsp;").attr('style', 'font-size: 11px;').append($('<a />').attr('href', placebo_url).attr('onclick', "$('#" + form_name + "').submit(); return false;").attr('target', '_blank').addClass('iconbar_icon').append(image));
  2845.  
  2846. site['mPOST'] = replaceSearchUrlParams({'searchUrl': site['mPOST']}, movie_id, movie_title, movie_title_orig);
  2847. var data = (site['mPOST'].match('{')) ? site['mPOST'] : '{"' + site['mPOST'].replace(/&/g, '","').replace(/=/g, '":"').replace(/\+/g, ' ') + '"}';
  2848. data = JSON.parse(data);
  2849. var addform = $('<form></form>');
  2850. addform.attr('id', form_name);
  2851. addform.attr('action', search_url);
  2852. addform.attr('method', 'post');
  2853. addform.attr('style', 'display: none;');
  2854. addform.attr('target', '_blank');
  2855. for (name in data) {
  2856. var addinput = $("<input>");
  2857. addinput.attr('type', 'text');
  2858. addinput.attr('name', name);
  2859. addinput.attr('value', data[name]);
  2860. addform.append(addinput);
  2861. $('body').append(addform);
  2862. }
  2863. }
  2864. iconbar.append(html).append();
  2865. }
  2866. });
  2867. //If we have access to the openInTab function, add an Open All feature
  2868. if (GM.openInTab) {
  2869. var aopenall = $('<a />').text('Open All').prepend("&nbsp;").attr('href', 'javascript:;').attr('style', 'font-weight:bold;font-size:11px;font-family: Calibri, Verdana, Arial, Helvetica, sans-serif;');
  2870. aopenall.click(function() {
  2871. $('.iconbar_icon').each(function() {
  2872. GM.openInTab($(this).attr('href'));
  2873. });
  2874. });
  2875. iconbar.append(aopenall);
  2876. }
  2877. }
  2878.  
  2879. // Create elements for the icons bar
  2880. function getIconsLinkArea() {
  2881. // If it already exists, just return it
  2882. if ($('#imdbscout_iconsheader').length) {
  2883. return $('#imdbscout_iconsheader');
  2884. }
  2885. var p = $('<p />').attr('id', 'imdbscout_iconsheader').css({
  2886. 'padding': '0px 0px',
  2887. 'margin-left': '0px',
  2888. 'margin-right': '0px',
  2889. 'margin-top': '0px',
  2890. 'margin-bottom': '0px',
  2891. 'overflow': 'hidden',
  2892. });
  2893. if ($('h1.header:first').length) {
  2894. $('h1.header:first').append(p);
  2895. } else if ($('.title_wrapper h1').length) {
  2896. $('.title_wrapper h1').append(p);
  2897. }
  2898. var styles = '#imdbscout_iconsheader {line-height: 16px; width: 575px;} ';
  2899. GM.addStyle(styles);
  2900. return $('#imdbscout_iconsheader');
  2901. }
  2902.  
  2903. //==============================================================================
  2904. // Search/List/Watchlist page code
  2905. //==============================================================================
  2906.  
  2907. function performSearch() {
  2908. //Add css for the new table cells we're going to add
  2909. var styles = '.result_box {width: 975px} ';
  2910. styles += '.result_box a { margin-right: 5px; color: #444;} ';
  2911. styles += '.result_box a:visited { color: #551A8B; } ';
  2912. styles += '#content-2-wide #main, #content-2-wide ';
  2913. styles += '.maindetails_center {margin-left: 5px; width: 1001px;} ';
  2914. GM.addStyle(styles);
  2915.  
  2916. if (getPageSetting('load_third_bar')) {
  2917. var styles3 = '.result_box_3rd {width: 975px} ';
  2918. styles3 += '.result_box_3rd a { margin-right: 5px; color: #444;} ';
  2919. styles3 += '.result_box_3rd a:visited { color: #551A8B; } ';
  2920. styles3 += '#content-2-wide #main, #content-2-wide ';
  2921. styles3 += '.maindetails_center {margin-left: 5px; width: 1001px;} ';
  2922. GM.addStyle(styles3);
  2923. }
  2924. var showsites = sites.reduce(function (n, site) {
  2925. return n + (site['show'] == true); }, 0);
  2926.  
  2927. var search_page = (Boolean(location.href.match('/search/'))) ? true : false;
  2928. if($('.lister-list').children().length !== 0) {
  2929. $('.lister-list').children().each(function() {
  2930. var elem = (search_page) ? $(this).find('.lister-item-content') : $(this);
  2931. var link = $(this).find('.lister-item-image>a');
  2932. var movie_id = link.attr('href').match(/tt([0-9]*)\/?.*/)[1];
  2933.  
  2934. var scout_tick = window.localStorage['_imdbscoutmod_tick'];
  2935. if (!scout_tick) {
  2936. scout_tick = 1;
  2937. window.localStorage['_imdbscoutmod_tick'] = scout_tick;
  2938. }
  2939.  
  2940. performSearchSecondPart(elem, link, movie_id, showsites, scout_tick);
  2941. scout_tick = parseInt(scout_tick) + 1;
  2942. window.localStorage['_imdbscoutmod_tick'] = scout_tick;
  2943. });
  2944. }
  2945. }
  2946.  
  2947. function performSearchSecondPart(elem, link, movie_id, showsites, scout_tick) {
  2948. // Connection rate limiter for IMDb.
  2949. var rate;
  2950. if (!(GM_config.get('call_http_mod_search'))) {
  2951. rate = 400;
  2952. } else if (showsites > 99) {
  2953. rate = 6000;
  2954. } else if (showsites > 80) {
  2955. rate = 5000;
  2956. } else if (showsites > 60) {
  2957. rate = 3500;
  2958. } else if (showsites > 40) {
  2959. rate = 2500;
  2960. } else if (showsites > 20) {
  2961. rate = 2000;
  2962. } else if (showsites > 10) {
  2963. rate = 1500;
  2964. } else {
  2965. rate = 1000;
  2966. }
  2967. var domain = "https://www.imdb.com";
  2968. var now = (new Date())*1;
  2969. var lastLoaded = window.localStorage[domain+'_lastLoaded'];
  2970. if (!lastLoaded) {
  2971. lastLoaded = now - 8000;
  2972. } else {
  2973. lastLoaded = parseInt(lastLoaded);
  2974. }
  2975. if (now - lastLoaded < rate) {
  2976. window.setTimeout(performSearchSecondPart.bind(undefined, elem, link, movie_id, showsites, scout_tick), rate);
  2977. return;
  2978. } else {
  2979. window.localStorage[domain+'_lastLoaded'] = (new Date())*1;
  2980. }
  2981.  
  2982. GM.xmlHttpRequest({
  2983. method: "GET",
  2984. url: "https://www.imdb.com" + link.attr('href'),
  2985. onload: function(response) {
  2986. var parser = new DOMParser();
  2987. var result = parser.parseFromString(response.responseText, "text/html");
  2988.  
  2989. var is_tv = Boolean($(result).find('title').text().match('TV Series')) || Boolean($(result).find('.tv-extra').length);
  2990. var is_movie = (Boolean($(result).find('.subtext').text().match('TV Special'))) ? false : Boolean($(result).find('title').text().match(/.*? \(([0-9]*)\)/));
  2991. if (Boolean($(result).find('.subtext').text().match('Documentary'))) {
  2992. is_tv = false;
  2993. is_movie = false;
  2994. }
  2995. var movie_year = result.title.replace(/^(.+) \((\D*|)(\d{4})(.*)$/gi, '$3');
  2996. var movie_title = $(result).find('.title_wrapper>h1').clone().children().remove().end().text();
  2997. var movie_title_orig = $(result).find('.originalTitle').clone().children().remove().end().text();
  2998. if (movie_title_orig === "") {
  2999. movie_title_orig = movie_title;
  3000. }
  3001. perform(elem, movie_id, movie_title, movie_title_orig, is_tv, is_movie, movie_year, scout_tick);
  3002. }
  3003. });
  3004. }
  3005.  
  3006. //==============================================================================
  3007. // Title page code
  3008. //==============================================================================
  3009.  
  3010. function performPage() {
  3011. var movie_title = $('.title_wrapper>h1').clone().children().remove().end().text();
  3012. if (movie_title === "") {
  3013. movie_title = $('h3[itemprop="name"]').text().trim();
  3014. }
  3015. var movie_title_orig = $('.originalTitle').clone().children().remove().end().text();
  3016. if (movie_title_orig === "") {
  3017. movie_title_orig = movie_title;
  3018. }
  3019. var movie_id = document.URL.match(/\/tt([0-9]+)\//)[1].trim('tt');
  3020. var is_tv = Boolean($('title').text().match('TV Series')) || Boolean($('.tv-extra').length);
  3021. var is_movie = (Boolean($('.subtext').text().match('TV Special')) || Boolean($('li.ipl-inline-list__item').text().match('TV Special'))) ? false : Boolean($('title').text().match(/.*? \(([0-9]*)\)/));
  3022. if (Boolean($('.subtext').text().match('Documentary')) || Boolean($('li.ipl-inline-list__item').text().match('Documentary'))) {
  3023. is_tv = false;
  3024. is_movie = false;
  3025. }
  3026.  
  3027. // Call to iconSorterCount() for the icons/sites sorting.
  3028. iconSorterCount(is_tv, is_movie);
  3029.  
  3030. // Create areas to put links in
  3031. if (GM_config.get('load_second_bar') && !GM_config.get('load_third_bar_movie')) {
  3032. getLinkAreaSecond();
  3033. } else if (!GM_config.get('load_second_bar') && GM_config.get('load_third_bar_movie')) {
  3034. getLinkAreaThird();
  3035. } else if (GM_config.get('load_second_bar') && GM_config.get('load_third_bar_movie') && !GM_config.get('switch_bars')) {
  3036. getLinkAreaThird();
  3037. getLinkAreaSecond();
  3038. } else if (GM_config.get('load_second_bar') && GM_config.get('load_third_bar_movie') && GM_config.get('switch_bars')) {
  3039. getLinkAreaSecond();
  3040. getLinkAreaThird();
  3041. }
  3042. perform(getLinkArea(), movie_id, movie_title, movie_title_orig, is_tv, is_movie);
  3043. addIconBar(movie_id, movie_title, movie_title_orig);
  3044. }
  3045.  
  3046. //==============================================================================
  3047. // Create elements for the 1st search bar on Title page
  3048. //==============================================================================
  3049.  
  3050. function getLinkArea() {
  3051. // If it already exists, just return it
  3052. if ($('#imdbscout_header').length) {
  3053. return $('#imdbscout_header');
  3054. }
  3055. var p = $('<p />').append('<h2>' + GM_config.get('imdbscoutmod_header_text') + '</h2>').attr('id', 'imdbscout_header').css({
  3056. 'padding': '0px 20px',
  3057. 'font-weight': 'bold'
  3058. });
  3059. var background_color = (GM_config.get('new_layout_dark')) ? '#333333' : '#EEEEEE';
  3060. var txt_color = (GM_config.get('new_layout_dark')) ? '#EEEEEE' : '#333333';
  3061. var p_new_bold = $('<p />').append(GM_config.get('imdbscoutmod_header_text')).attr('id', 'imdbscout_header').css({
  3062. 'padding': '4px 10px',
  3063. 'font-weight': 'bold',
  3064. 'background-color': background_color,
  3065. 'margin-top': '0px',
  3066. 'margin-bottom': '0px',
  3067. 'overflow': 'hidden',
  3068. 'color': txt_color
  3069. });
  3070.  
  3071. var p_new_normal = $('<p />').append(GM_config.get('imdbscoutmod_header_text')).attr('id', 'imdbscout_header').css({
  3072. 'padding': '4px 10px',
  3073. 'font-weight': 'normal',
  3074. 'background-color': background_color,
  3075. 'margin-top': '0px',
  3076. 'margin-bottom': '0px',
  3077. 'overflow': 'hidden',
  3078. 'color': txt_color
  3079. });
  3080.  
  3081. if (GM_config.get('use_new_layout') && GM_config.get('highlight_sites_movie').length == 0 ) {
  3082. p = p_new_bold;
  3083. } else if (GM_config.get('use_new_layout')) {
  3084. p = p_new_normal;
  3085. }
  3086.  
  3087. $.each(valid_states, function(i, name) {
  3088. if (GM_config.get('one_line')) {
  3089. p.append($('<span />').attr('id', 'imdbscout_' + name));
  3090. } else {
  3091. var title = $('<span>' + name.replace('_', ' ') + ': </span>').css({
  3092. 'textTransform': 'capitalize',
  3093. 'min-width': '100px',
  3094. 'display': 'inline-block'
  3095. });
  3096. p.append($('<div />').attr('id', 'imdbscout_' + name).append(title));
  3097. }
  3098. });
  3099. if ($('h1.header:first').length) {
  3100. $('h1.header:first').parent().append(p);
  3101. } else if (GM_config.get('use_new_layout') && $('.button_panel.navigation_panel').length) {
  3102. $('.button_panel.navigation_panel').after(p);
  3103. } else if (GM_config.get('use_new_layout') && $('.title_block').length) {
  3104. $('.title_block').after(p);
  3105. } else if ($('#title-overview-widget').length) {
  3106. $('#title-overview-widget').parent().append(p);
  3107. } else if ($('.titlereference-header').length) {
  3108. $('.titlereference-header').append(p);
  3109. } else {
  3110. $('#tn15rating').before(p);
  3111. }
  3112. return $('#imdbscout_header');
  3113. }
  3114.  
  3115. //==============================================================================
  3116. // Create elements for the 2nd search bar on Title page
  3117. //==============================================================================
  3118.  
  3119. function getLinkAreaSecond() {
  3120. // If it already exists, just return it
  3121. if ($('#imdbscoutsecondbar_header').length) {
  3122. return $('#imdbscoutsecondbar_header');
  3123. }
  3124. var p = $('<p />').append('<h2>' + GM_config.get('imdbscoutsecondbar_header_text') + '</h2>').attr('id', 'imdbscoutsecondbar_header').css({
  3125. 'padding': '0px 20px',
  3126. 'font-weight': 'bold'
  3127. });
  3128. var background_color = (GM_config.get('new_layout_dark')) ? '#333333' : '#EEEEEE';
  3129. var txt_color = (GM_config.get('new_layout_dark')) ? '#EEEEEE' : '#333333';
  3130. var p_new_bold = $('<p />').append(GM_config.get('imdbscoutsecondbar_header_text')).attr('id', 'imdbscoutsecondbar_header').css({
  3131. 'padding': '4px 10px',
  3132. 'font-weight': 'bold',
  3133. 'background-color': background_color,
  3134. 'margin-top': '0px',
  3135. 'margin-bottom': '0px',
  3136. 'overflow': 'hidden',
  3137. 'color': txt_color
  3138. });
  3139.  
  3140. var p_new_normal = $('<p />').append(GM_config.get('imdbscoutsecondbar_header_text')).attr('id', 'imdbscoutsecondbar_header').css({
  3141. 'padding': '4px 10px',
  3142. 'font-weight': 'normal',
  3143. 'background-color': background_color,
  3144. 'margin-top': '0px',
  3145. 'margin-bottom': '0px',
  3146. 'overflow': 'hidden',
  3147. 'color': txt_color
  3148. });
  3149.  
  3150. if (GM_config.get('use_new_layout') && GM_config.get('highlight_sites_movie').length == 0 ) {
  3151. p = p_new_bold;
  3152. } else if (GM_config.get('use_new_layout')) {
  3153. p = p_new_normal;
  3154. }
  3155.  
  3156. $.each(valid_states, function(i, name) {
  3157. if (GM_config.get('one_line')) {
  3158. p.append($('<span />').attr('id', 'imdbscoutsecondbar_' + name));
  3159. } else {
  3160. var title = $('<span>' + name.replace('_', ' ') + ': </span>').css({
  3161. 'textTransform': 'capitalize',
  3162. 'min-width': '100px',
  3163. 'display': 'inline-block'
  3164. });
  3165. p.append($('<div />').attr('id', 'imdbscoutsecondbar_' + name).append(title));
  3166. }
  3167. });
  3168. if ($('h1.header:first').length) {
  3169. $('h1.header:first').parent().append(p);
  3170. } else if (GM_config.get('use_new_layout') && $('.button_panel.navigation_panel').length) {
  3171. $('.button_panel.navigation_panel').after(p);
  3172. } else if (GM_config.get('use_new_layout') && $('.title_block').length) {
  3173. $('.title_block').after(p);
  3174. } else if ($('#title-overview-widget').length) {
  3175. $('#title-overview-widget').parent().append(p);
  3176. } else if ($('.titlereference-header').length) {
  3177. $('.titlereference-header').append(p);
  3178. } else {
  3179. $('#tn15rating').before(p);
  3180. }
  3181. return $('#imdbscoutsecondbar_header');
  3182. }
  3183.  
  3184. //==============================================================================
  3185. // Create elements for the 3rd search bar on Title page
  3186. //==============================================================================
  3187.  
  3188. function getLinkAreaThird() {
  3189. // If it already exists, just return it
  3190. if ($('#imdbscoutthirdbar_header').length) {
  3191. return $('#imdbscoutthirdbar_header');
  3192. }
  3193. var p = $('<p />').append('<h2>' + GM_config.get('imdbscoutthirdbar_header_text') + '</h2>').attr('id', 'imdbscoutthirdbar_header').css({
  3194. 'padding': '0px 20px',
  3195. 'font-weight': 'bold'
  3196. });
  3197. var background_color = (GM_config.get('new_layout_dark')) ? '#333333' : '#EEEEEE';
  3198. var txt_color = (GM_config.get('new_layout_dark')) ? '#EEEEEE' : '#333333';
  3199. var p_new_bold = $('<p />').append(GM_config.get('imdbscoutthirdbar_header_text')).attr('id', 'imdbscoutthirdbar_header').css({
  3200. 'padding': '4px 10px',
  3201. 'font-weight': 'bold',
  3202. 'background-color': background_color,
  3203. 'margin-top': '0px',
  3204. 'margin-bottom': '0px',
  3205. 'overflow': 'hidden',
  3206. 'color': txt_color
  3207. });
  3208.  
  3209. var p_new_normal = $('<p />').append(GM_config.get('imdbscoutthirdbar_header_text')).attr('id', 'imdbscoutthirdbar_header').css({
  3210. 'padding': '4px 10px',
  3211. 'font-weight': 'normal',
  3212. 'background-color': background_color,
  3213. 'margin-top': '0px',
  3214. 'margin-bottom': '0px',
  3215. 'overflow': 'hidden',
  3216. 'color': txt_color
  3217. });
  3218.  
  3219. if (GM_config.get('use_new_layout') && GM_config.get('highlight_sites_movie').length == 0 ) {
  3220. p = p_new_bold;
  3221. } else if (GM_config.get('use_new_layout')) {
  3222. p = p_new_normal;
  3223. }
  3224.  
  3225. $.each(valid_states, function(i, name) {
  3226. if (GM_config.get('one_line')) {
  3227. p.append($('<span />').attr('id', 'imdbscoutthirdbar_' + name));
  3228. } else {
  3229. var title = $('<span>' + name.replace('_', ' ') + ': </span>').css({
  3230. 'textTransform': 'capitalize',
  3231. 'min-width': '100px',
  3232. 'display': 'inline-block'
  3233. });
  3234. p.append($('<div />').attr('id', 'imdbscoutthirdbar_' + name).append(title));
  3235. }
  3236. });
  3237. if ($('h1.header:first').length) {
  3238. $('h1.header:first').parent().append(p);
  3239. } else if (GM_config.get('use_new_layout') && $('.button_panel.navigation_panel').length) {
  3240. $('.button_panel.navigation_panel').after(p);
  3241. } else if (GM_config.get('use_new_layout') && $('.title_block').length) {
  3242. $('.title_block').after(p);
  3243. } else if ($('#title-overview-widget').length) {
  3244. $('#title-overview-widget').parent().append(p);
  3245. } else if ($('.titlereference-header').length) {
  3246. $('.titlereference-header').append(p);
  3247. } else {
  3248. $('#tn15rating').before(p);
  3249. }
  3250. return $('#imdbscoutthirdbar_header');
  3251. }
  3252.  
  3253. //==============================================================================
  3254. // Icons/sites sorting
  3255. //==============================================================================
  3256.  
  3257. // Count selected sites for the sorting launcher (showSitezFirstBar).
  3258. function iconSorterCount(is_tv, is_movie) {
  3259. sitestosort = public_sites.concat(private_sites, usenet_sites)
  3260. if (!is_tv && !is_movie || getPageSetting('ignore_type')) {
  3261. showSitezFirstBar = sitestosort.reduce(function (n, site) {
  3262. return n + (site['show'] == true); }, 0);
  3263. } else if (is_tv && !getPageSetting('ignore_type')) {
  3264. showtvsitez = public_sites.concat(private_sites, usenet_sites).reduce(function (n, site) {
  3265. return n + (site['TV'] == true && site['show'] == true); }, 0);
  3266. showbothsitez = public_sites.concat(private_sites, usenet_sites).reduce(function (n, site) {
  3267. return n + (site['both'] == true && site['show'] == true); }, 0);
  3268. showSitezFirstBar = showtvsitez + showbothsitez;
  3269. } else if (is_movie && !getPageSetting('ignore_type')) {
  3270. showallsitez = sitestosort.reduce(function (n, site) {
  3271. return n + (site['show'] == true); }, 0);
  3272. showtvsitez = public_sites.concat(private_sites, usenet_sites).reduce(function (n, site) {
  3273. return n + (site['TV'] == true && site['show'] == true); }, 0);
  3274. showSitezFirstBar = showallsitez - showtvsitez;
  3275. }
  3276. }
  3277.  
  3278. // Sorting launcher.
  3279. function iconSorterLauncher(site) {
  3280. showSitezFirstBar = showSitezFirstBar - 1;
  3281.  
  3282. if (GM_config.get("sortReqOnNewLine") && showSitezFirstBar == 0) {
  3283. sortReqOnNewLineTemp = true;
  3284. }
  3285. //console.log('Sites left: ' + showSitezFirstBar + ", Added: " + site['name']);
  3286. if (showSitezFirstBar < 4) {
  3287. iconSorterFound();
  3288. iconSorterMissing();
  3289. //console.log('SORTING!');
  3290. }
  3291. }
  3292.  
  3293. // Sorting of the found sites.
  3294. function iconSorterFound() {
  3295. const imdbscout_found = document.querySelector("#imdbscout_found")
  3296.  
  3297. const sorta = (list) => { // sort alphabetically
  3298. return list.sort((a, b) => {
  3299. if (GM_config.get("use_mod_icons_movie")) {
  3300. if (a.firstChild.getAttribute("alt").toLowerCase() < b.firstChild.getAttribute("alt").toLowerCase()) {
  3301. return -1
  3302. } else if (a.firstChild.getAttribute("alt").toLowerCase() > b.firstChild.getAttribute("alt").toLowerCase()) {
  3303. return 1
  3304. } else {
  3305. return 0
  3306. }
  3307. } else {
  3308. if (a.textContent.toLowerCase() < b.textContent.toLowerCase()) {
  3309. return -1
  3310. } else if (a.textContent.toLowerCase() > b.textContent.toLowerCase()) {
  3311. return 1
  3312. } else {
  3313. return 0
  3314. }
  3315. }
  3316. })
  3317. }
  3318.  
  3319. let highlighted = [], requests = [], others = []
  3320.  
  3321. let children = imdbscout_found.children
  3322. if (!GM_config.get('one_line')) {
  3323. let [removed, ...children2] = children
  3324. children = children2
  3325. }
  3326. for (const child of children) {
  3327. if (GM_config.get("use_mod_icons_movie")) {
  3328. if (child.firstChild.getAttribute("alt").includes("-Req")) {
  3329. requests.push(child)
  3330. } else {
  3331. child.children[0].style.border.includes("solid rgb(0, 220, 0)") ? highlighted.push(child) : others.push(child)
  3332. }
  3333. }else{
  3334. if (child.textContent.includes("-Req")) {
  3335. requests.push(child)
  3336. } else {
  3337. child.querySelector("b") ? highlighted.push(child) : others.push(child)
  3338. }
  3339. }
  3340. }
  3341.  
  3342. let sorted
  3343. if (GM_config.get("highlight_sites_movie").includes(",")) {
  3344. const highlighted_sites = GM_config.get("highlight_sites_movie").split(",")
  3345. let hl_temp = []
  3346. for (const hl of highlighted_sites) {
  3347. for (const hl_node of highlighted) {
  3348. if (hl === (!GM_config.get("use_mod_icons_movie") ? hl_node.textContent : hl_node.children[0].getAttribute("alt"))) {
  3349. hl_temp.push(hl_node)
  3350. }
  3351. }
  3352. }
  3353. sorted = [...hl_temp, ...sorta(others)]
  3354. } else {
  3355. sorted = [...sorta(highlighted), ...sorta(others)]
  3356. }
  3357.  
  3358. for (const node of sorted) {
  3359. node.remove()
  3360. imdbscout_found.insertAdjacentHTML("beforeend", node.outerHTML + " ")
  3361. }
  3362.  
  3363. sortReqOnNewLineTemp && requests.length > 0 ? imdbscout_found.insertAdjacentHTML("beforeend", "</br>") : false
  3364. for (const node of requests) {
  3365. node.remove()
  3366. imdbscout_found.insertAdjacentHTML("beforeend", node.outerHTML + " ")
  3367. }
  3368. sortReqOnNewLineTemp && requests.length > 0 ? imdbscout_found.insertAdjacentHTML("beforeend", "</br>") : false
  3369. }
  3370.  
  3371. // Sorting of the missing sites.
  3372. function iconSorterMissing() {
  3373. if (GM_config.get("hide_missing_movie") || !GM_config.get("call_http_mod_movie")) {
  3374. return
  3375. }
  3376. const imdbscout_missing = document.querySelector("#imdbscout_missing")
  3377.  
  3378. const sorta = (list) => {
  3379. return list.sort((a, b) => { // sort alphabetically
  3380. if (GM_config.get("use_mod_icons_movie")) {
  3381. if (a.firstChild.getAttribute("alt").toLowerCase() < b.firstChild.getAttribute("alt").toLowerCase()) {
  3382. return -1
  3383. } else if (a.firstChild.getAttribute("alt").toLowerCase() > b.firstChild.getAttribute("alt").toLowerCase()) {
  3384. return 1
  3385. } else {
  3386. return 0
  3387. }
  3388. } else {
  3389. if (a.textContent.toLowerCase() < b.textContent.toLowerCase()) {
  3390. return -1
  3391. } else if (a.textContent.toLowerCase() > b.textContent.toLowerCase()) {
  3392. return 1
  3393. } else {
  3394. return 0
  3395. }
  3396. }
  3397. })
  3398. }
  3399.  
  3400. let all = []
  3401.  
  3402. let children = imdbscout_missing.children
  3403. if (!GM_config.get('one_line')) {
  3404. let [removed, ...children2] = children
  3405. children = children2
  3406. }
  3407. for (const child of children) {
  3408. all.push(child)
  3409. }
  3410.  
  3411. let sorted = [...sorta(all)]
  3412.  
  3413. for (const node of sorted) {
  3414. node.remove()
  3415. imdbscout_missing.insertAdjacentHTML("beforeend", node.outerHTML + " ")
  3416. }
  3417. }
  3418.  
  3419. //==============================================================================
  3420. // Create the config name (GM_config)
  3421. //==============================================================================
  3422.  
  3423. function configName(site) {
  3424. if ('configName' in site) {
  3425. return 'show_' + site['configName'] + (site['TV'] ? '_TV' : '');
  3426. } else {
  3427. return 'show_' + site['name'] + (site['TV'] ? '_TV' : '');
  3428. }
  3429. }
  3430.  
  3431. //==============================================================================
  3432. // Count sites (GM_config)
  3433. //==============================================================================
  3434.  
  3435. function countSites(task) {
  3436. if (task == 1) {
  3437. const count_total = sites.concat(icon_sites).length;
  3438. return count_total;
  3439. }
  3440. if (task == 2) {
  3441. // Init GM_config to get amount of selected sites.
  3442. // GM_config's fields needs to be mirrored to keep Settings intact.
  3443. var config_fields = {
  3444. 'aftertitle': {'type': 'hidden'},
  3445. 'imdbtotalstats': {'type': 'hidden'},
  3446. 'imdbselectedstats': {'type': 'hidden'},
  3447. 'imdbscoutmod_header_text': {'type': 'text'},
  3448. 'imdbscoutsecondbar_header_text': {'type': 'text'},
  3449. 'imdbscoutthirdbar_header_text': {'type': 'text'},
  3450. 'cfg_icons_size': {'type': 'text'},
  3451. 'loadmod_on_start_movie': {'type': 'checkbox'},
  3452. 'load_second_bar': {'type': 'checkbox'},
  3453. 'load_third_bar_movie': {'type': 'checkbox'},
  3454. 'switch_bars': {'type': 'checkbox'},
  3455. 'sortReqOnNewLine': {'type': 'checkbox'},
  3456. 'use_new_layout': {'type': 'checkbox'},
  3457. 'new_layout_dark': {'type': 'checkbox'},
  3458. 'call_http_mod_movie': {'type': 'checkbox'},
  3459. 'hide_missing_movie': {'type': 'checkbox'},
  3460. 'use_mod_icons_movie': {'type': 'checkbox'},
  3461. 'one_line': {'type': 'checkbox'},
  3462. 'ignore_type_movie': {'type': 'checkbox'},
  3463. 'highlight_sites_movie': {'type': 'text'},
  3464. 'highlight_missing_movie': {'type': 'text'},
  3465. 'loadmod_on_start_search': {'type': 'checkbox'},
  3466. 'load_third_bar_search': {'type': 'checkbox'},
  3467. 'call_http_mod_search': {'type': 'checkbox'},
  3468. 'hide_missing_search': {'type': 'checkbox'},
  3469. 'use_mod_icons_search': {'type': 'checkbox'},
  3470. 'ignore_type_search': {'type': 'checkbox'},
  3471. 'highlight_sites_search': {'type': 'text'},
  3472. 'highlight_missing_search': {'type': 'text'}
  3473. };
  3474. $.each(custom_sites, function(index, site) {config_fields[configName(site)] = {'type': 'checkbox'};});
  3475. $.each(public_sites, function(index, site) {config_fields[configName(site)] = {'type': 'checkbox'};});
  3476. $.each(private_sites, function(index, site) {config_fields[configName(site)] = {'type': 'checkbox'};});
  3477. $.each(usenet_sites, function(index, site) {config_fields[configName(site)] = {'type': 'checkbox'};});
  3478. $.each(subs_sites, function(index, site) {config_fields[configName(site)] = {'type': 'checkbox'};});
  3479. $.each(other_searchable_sites, function(index, site) {config_fields[configName(site)] = {'type': 'checkbox'};});
  3480. $.each(icon_sites, function(index, icon_site) {config_fields['show_icon_' + icon_site['name']] = {'type': 'checkbox'};});
  3481.  
  3482. GM_config.init({'id': 'imdb_scout', 'fields': config_fields});
  3483.  
  3484. $.each(sites, function(index, site) {
  3485. site['show'] = GM_config.get(configName(site));
  3486. });
  3487. $.each(icon_sites, function(index, icon_site) {
  3488. icon_site['show'] = GM_config.get('show_icon_' + icon_site['name']);
  3489. });
  3490.  
  3491. const count_selected = sites.concat(icon_sites).reduce(function (n, site) {
  3492. return n + (site['show'] == true); }, 0);
  3493.  
  3494. return count_selected;
  3495. }
  3496. }
  3497.  
  3498.  
  3499. //================================ MAIN ====================================//
  3500.  
  3501.  
  3502. //==============================================================================
  3503. // Settings Menu (GM_config)
  3504. //==============================================================================
  3505.  
  3506. var config_fields = {
  3507. 'aftertitle': {
  3508. 'section': ' ',
  3509. 'label': ' &nbsp',
  3510. 'type': 'hidden'
  3511. },
  3512. 'imdbtotalstats': {
  3513. 'label': 'Total sites:&nbsp'.bold().fontsize(3) + countSites(1).toString().bold().fontsize(3).fontcolor("Blue"),
  3514. 'type': 'hidden'
  3515. },
  3516. 'imdbselectedstats': {
  3517. 'label': 'Selected sites:&nbsp'.bold().fontsize(3) + countSites(2).toString().bold().fontsize(3).fontcolor("Blue"),
  3518. 'type': 'hidden'
  3519. },
  3520. 'imdbscoutmod_header_text': {
  3521. 'label': 'Header text for the 1st bar:&nbsp',
  3522. 'type': 'text',
  3523. 'default': ''
  3524. },
  3525. 'imdbscoutsecondbar_header_text': {
  3526. 'label': 'Header text for the 2nd bar:',
  3527. 'type': 'text',
  3528. 'default': ''
  3529. },
  3530. 'imdbscoutthirdbar_header_text': {
  3531. 'label': 'Header text for the 3rd bar:&nbsp',
  3532. 'type': 'text',
  3533. 'default': ''
  3534. },
  3535. 'cfg_icons_size': {
  3536. 'label': 'Size of the icons (pixels): &nbsp &nbsp',
  3537. 'type': 'text',
  3538. 'default': '22'
  3539. },
  3540. 'loadmod_on_start_movie': {
  3541. 'section': 'Title Page:',
  3542. 'type': 'checkbox',
  3543. 'label': 'Load on start?',
  3544. 'default': true
  3545. },
  3546. 'load_second_bar': {
  3547. 'type': 'checkbox',
  3548. 'label': 'Enable the 2nd search bar?',
  3549. 'default': false
  3550. },
  3551. 'load_third_bar_movie': {
  3552. 'type': 'checkbox',
  3553. 'label': 'Enable the 3rd search bar?',
  3554. 'default': false
  3555. },
  3556. 'switch_bars': {
  3557. 'type': 'checkbox',
  3558. 'label': 'Swap 2nd and 3rd bars?',
  3559. 'default': false
  3560. },
  3561. 'sortReqOnNewLine': {
  3562. 'type': 'checkbox',
  3563. 'label': 'The request sites on the new line if found?',
  3564. 'default': true
  3565. },
  3566. 'use_new_layout': {
  3567. 'type': 'checkbox',
  3568. 'label': 'Use the new layout?',
  3569. 'default': true
  3570. },
  3571. 'new_layout_dark': {
  3572. 'type': 'checkbox',
  3573. 'label': 'Dark background for the new layout?',
  3574. 'default': true
  3575. },
  3576. 'call_http_mod_movie': {
  3577. 'type': 'checkbox',
  3578. 'label': 'Actually check for the search results?',
  3579. 'default': true
  3580. },
  3581. 'hide_missing_movie': {
  3582. 'type': 'checkbox',
  3583. 'label': 'Hide missing links?',
  3584. 'default': false
  3585. },
  3586. 'use_mod_icons_movie': {
  3587. 'type': 'checkbox',
  3588. 'label': 'Use icons instead of text?',
  3589. 'default': true
  3590. },
  3591. 'one_line': {
  3592. 'type': 'checkbox',
  3593. 'label': 'Show results on one line?',
  3594. 'default': true
  3595. },
  3596. 'ignore_type_movie': {
  3597. 'type': 'checkbox',
  3598. 'label': 'Search all sites, ignoring movie/tv distinction?',
  3599. 'default': false
  3600. },
  3601. 'highlight_sites_movie': {
  3602. 'label': 'Highlight sites: &nbsp &nbsp &nbsp',
  3603. 'type': 'text',
  3604. 'default': 'PTP,KG,BTN,BTN-Title,SC,CG,TVV,Tik,MTV'
  3605. },
  3606. 'highlight_missing_movie': {
  3607. 'label': 'Mark when not on:',
  3608. 'type': 'text',
  3609. 'default': ''
  3610. },
  3611. 'loadmod_on_start_search': {
  3612. 'section': 'Search/List/Watchlist Page:',
  3613. 'type': 'checkbox',
  3614. 'label': 'Load on start?',
  3615. 'default': false
  3616. },
  3617. 'load_third_bar_search': {
  3618. 'type': 'checkbox',
  3619. 'label': 'Enable the 3rd search bar?',
  3620. 'default': false
  3621. },
  3622. 'call_http_mod_search': {
  3623. 'type': 'checkbox',
  3624. 'label': 'Actually check for the search results?',
  3625. 'default': true
  3626. },
  3627. 'hide_missing_search': {
  3628. 'type': 'checkbox',
  3629. 'label': 'Hide missing links?',
  3630. 'default': false
  3631. },
  3632. 'use_mod_icons_search': {
  3633. 'type': 'checkbox',
  3634. 'label': 'Use icons instead of text?',
  3635. 'default': true
  3636. },
  3637. 'ignore_type_search': {
  3638. 'type': 'checkbox',
  3639. 'label': 'Search all sites, ignoring movie/tv distinction?',
  3640. 'default': false
  3641. },
  3642. 'highlight_sites_search': {
  3643. 'label': 'Highlight sites: &nbsp &nbsp &nbsp',
  3644. 'type': 'text',
  3645. 'default': ''
  3646. },
  3647. 'highlight_missing_search': {
  3648. 'label': 'Mark when not on:',
  3649. 'type': 'text',
  3650. 'default': ''
  3651. }
  3652. };
  3653.  
  3654. //==============================================================================
  3655. // Add sites to Settings (GM_config)
  3656. //==============================================================================
  3657.  
  3658. $.each(custom_sites, function(index, site) {
  3659. config_fields[configName(site)] = {
  3660. 'section': (index == 0) ? ['Custom sites:'] : '',
  3661. 'type': 'checkbox',
  3662. 'label': ' ' + site['name'] + (site['TV'] ? ' (TV)' : '')
  3663. };
  3664. });
  3665.  
  3666. $.each(public_sites, function(index, site) {
  3667. config_fields[configName(site)] = {
  3668. 'section': (index == 0) ? ['Public download sites:'] : '',
  3669. 'type': 'checkbox',
  3670. 'label': ' ' + site['name'] + (site['TV'] ? ' (TV)' : '')
  3671. };
  3672. });
  3673.  
  3674. $.each(private_sites, function(index, site) {
  3675. config_fields[configName(site)] = {
  3676. 'section': (index == 0) ? ['Private download sites:'] : '',
  3677. 'type': 'checkbox',
  3678. 'label': ' ' + site['name'] + (site['TV'] ? ' (TV)' : '')
  3679. };
  3680. });
  3681.  
  3682. $.each(usenet_sites, function(index, site) {
  3683. config_fields[configName(site)] = {
  3684. 'section': (index == 0) ? ['Usenet sites:'] : '',
  3685. 'type': 'checkbox',
  3686. 'label': ' ' + site['name'] + (site['TV'] ? ' (TV)' : '')
  3687. };
  3688. });
  3689.  
  3690. $.each(subs_sites, function(index, site) {
  3691. config_fields[configName(site)] = {
  3692. 'section': (index == 0) ? ['Subtitles sites (in 2nd bar):'] : '',
  3693. 'type': 'checkbox',
  3694. 'label': ' ' + site['name'] + (site['TV'] ? ' (TV)' : '')
  3695. };
  3696. });
  3697.  
  3698. $.each(other_searchable_sites, function(index, site) {
  3699. config_fields[configName(site)] = {
  3700. 'section': (index == 0) ? ['Other searchable sites (in 2nd bar):'] : '',
  3701. 'type': 'checkbox',
  3702. 'label': ' ' + site['name'] + (site['TV'] ? ' (TV)' : '')
  3703. };
  3704. });
  3705.  
  3706. $.each(icon_sites, function(index, icon_site) {
  3707. config_fields['show_icon_' + icon_site['name']] = {
  3708. 'section': (index == 0) ? ['Icon sites (no search):'] : '',
  3709. 'type': 'checkbox',
  3710. 'label': ' ' + icon_site['name'],
  3711. 'default': ('showByDefault' in icon_site) ? icon_site['showByDefault'] : true
  3712. };
  3713. });
  3714.  
  3715. //==============================================================================
  3716. // Initialize and register GM_config
  3717. //==============================================================================
  3718.  
  3719. GM_config.init({
  3720. 'id': 'imdb_scout',
  3721. 'title': 'IMDb Scout Mod Settings',
  3722. 'fields': config_fields,
  3723. 'css': '#imdb_scout_section_header_1, #imdb_scout_section_header_2, #imdb_scout_section_header_3, \
  3724. #imdb_scout_section_header_4, #imdb_scout_section_header_5, #imdb_scout_section_header_6, \
  3725. #imdb_scout_section_header_7, #imdb_scout_section_header_8, #imdb_scout_section_header_9 { \
  3726. background: #00ab00 !important; \
  3727. color: black !important; \
  3728. font-weight: bold !important; \
  3729. border: 0px !important; \
  3730. padding-left: 0px !important; \
  3731. text-align: middle !important;}\
  3732. .field_label { \
  3733. display: flex !important; \
  3734. align-items: center !important; \
  3735. font-weight: normal !important;}\
  3736. .config_var { \
  3737. margin-top: 2px !important; \
  3738. margin-bottom: 2px !important; \
  3739. display: flex !important; \
  3740. align-items: center !important;}\
  3741. #imdb_scout_aftertitle_var { \
  3742. margin-top: 0px !important; \
  3743. margin-bottom: 0px !important;}\
  3744. input { \
  3745. margin-top: 0px !important; \
  3746. margin-bottom: 0px !important;}\
  3747. .grey_link { \
  3748. margin-left: 4px !important;}\
  3749. #imdb_scout_section_header_0 { \
  3750. font-weight: bold !important; \
  3751. border: 0px !important; \
  3752. margin-top: 0px !important; \
  3753. background: #bfbfbf !important;}\
  3754. #imdb_scout_header { \
  3755. background: black !important; \
  3756. color: white !important;}\
  3757. #imdb_scout_section_0 { \
  3758. margin-top: 0px !important;}',
  3759. 'events':
  3760. {
  3761. 'open': function() {
  3762. // Iframe position.
  3763. this.frame.style.top = '50px';
  3764. this.frame.style.left = 'auto';
  3765. this.frame.style.right = '150px';
  3766. this.frame.style.height = '90%';
  3767. this.frame.style.width = '450px';
  3768.  
  3769. $('#imdb_scout').contents().find('input#imdb_scout_field_highlight_sites_movie').attr('size', '35');
  3770. $('#imdb_scout').contents().find('input#imdb_scout_field_highlight_missing_movie').attr('size', '35');
  3771. $('#imdb_scout').contents().find('input#imdb_scout_field_highlight_sites_search').attr('size', '35');
  3772. $('#imdb_scout').contents().find('input#imdb_scout_field_highlight_missing_search').attr('size', '35');
  3773. $('#imdb_scout').contents().find('input#imdb_scout_field_cfg_icons_size').attr('size', '1');
  3774.  
  3775. const modVersion = 'IMDb Scout Mod v' + GM.info.script.version;
  3776. const modUrl = 'https://greasyfork.org/en/scripts/407284-imdb-scout-mod';
  3777. $('#imdb_scout').contents().find('#imdb_scout_section_header_0').append($('<a href="'+modUrl+'" target ="_blank">'+modVersion+'</a>'));
  3778. $('#imdb_scout').contents().find('#imdb_scout_section_header_0').find('a').css({
  3779. 'text-decoration': 'none',
  3780. 'color': '#cb0000'
  3781. });
  3782.  
  3783. $('#imdb_scout').contents().find('#imdb_scout_section_3').find('.field_label').each(function(index, label) {
  3784. var url = new URL(custom_sites[index].searchUrl);
  3785. $(label).append(' ' + '<a class="grey_link" target="_blank" style="color: gray; text-decoration : none" href="' + url.origin + '">'
  3786. + (/www./.test(url.hostname) ? url.hostname.match(/www.(.*)/)[1] : url.hostname) + '</a>');
  3787. $(label).prepend(getFavicon(custom_sites[index], true));
  3788. });
  3789. $('#imdb_scout').contents().find('#imdb_scout_section_4').find('.field_label').each(function(index, label) {
  3790. var url = new URL(public_sites[index].searchUrl);
  3791. $(label).append(' ' + '<a class="grey_link" target="_blank" style="color: gray; text-decoration : none" href="' + url.origin + '">'
  3792. + (/www./.test(url.hostname) ? url.hostname.match(/www.(.*)/)[1] : url.hostname) + '</a>');
  3793. $(label).prepend(getFavicon(public_sites[index], true));
  3794. });
  3795. $('#imdb_scout').contents().find('#imdb_scout_section_5').find('.field_label').each(function(index, label) {
  3796. var url = new URL(private_sites[index].searchUrl);
  3797. $(label).append(' ' + '<a class="grey_link" target="_blank" style="color: gray; text-decoration : none" href="' + url.origin + '">'
  3798. + (/www./.test(url.hostname) ? url.hostname.match(/www.(.*)/)[1] : url.hostname) + '</a>');
  3799. $(label).prepend(getFavicon(private_sites[index], true));
  3800. });
  3801. $('#imdb_scout').contents().find('#imdb_scout_section_6').find('.field_label').each(function(index, label) {
  3802. var url = new URL(usenet_sites[index].searchUrl);
  3803. $(label).append(' ' + '<a class="grey_link" target="_blank" style="color: gray; text-decoration : none" href="' + url.origin + '">'
  3804. + (/www./.test(url.hostname) ? url.hostname.match(/www.(.*)/)[1] : url.hostname) + '</a>');
  3805. $(label).prepend(getFavicon(usenet_sites[index], true));
  3806. });
  3807. $('#imdb_scout').contents().find('#imdb_scout_section_7').find('.field_label').each(function(index, label) {
  3808. var url = new URL(subs_sites[index].searchUrl);
  3809. $(label).append(' ' + '<a class="grey_link" target="_blank" style="color: gray; text-decoration : none" href="' + url.origin + '">'
  3810. + (/www./.test(url.hostname) ? url.hostname.match(/www.(.*)/)[1] : url.hostname) + '</a>');
  3811. $(label).prepend(getFavicon(subs_sites[index], true));
  3812. });
  3813. $('#imdb_scout').contents().find('#imdb_scout_section_8').find('.field_label').each(function(index, label) {
  3814. var url = new URL(other_searchable_sites[index].searchUrl);
  3815. $(label).append(' ' + '<a class="grey_link" target="_blank" style="color: gray; text-decoration : none" href="' + url.origin + '">'
  3816. + (/www./.test(url.hostname) ? url.hostname.match(/www.(.*)/)[1] : url.hostname) + '</a>');
  3817. $(label).prepend(getFavicon(other_searchable_sites[index], true));
  3818. });
  3819. $('#imdb_scout').contents().find('#imdb_scout_section_9').find('.field_label').each(function(index, label) {
  3820. var url = new URL(icon_sites[index].searchUrl);
  3821. $(label).append(' ' + '<a class="grey_link" target="_blank" style="color: gray; text-decoration : none" href="' + url.origin + '">'
  3822. + (/www./.test(url.hostname) ? url.hostname.match(/www.(.*)/)[1] : url.hostname) + '</a>');
  3823. $(label).prepend(getFavicon(icon_sites[index], true));
  3824. });
  3825.  
  3826. $('#imdb_scout').contents().find("img").css({"margin-right": "4px"});
  3827. },
  3828.  
  3829. 'close': function() {
  3830. location.reload();
  3831. }
  3832. }
  3833. });
  3834.  
  3835. GM.registerMenuCommand('IMDb Scout Mod Settings', function() {GM_config.open()});
  3836.  
  3837. //==============================================================================
  3838. // Fetch per-site values from GM_config
  3839. //==============================================================================
  3840.  
  3841. $.each(sites, function(index, site) {
  3842. site['show'] = GM_config.get(configName(site));
  3843. });
  3844.  
  3845. $.each(icon_sites, function(index, icon_site) {
  3846. icon_site['show'] = GM_config.get('show_icon_' + icon_site['name']);
  3847. });
  3848.  
  3849. //==============================================================================
  3850. // Global variables
  3851. //==============================================================================
  3852.  
  3853. // For internal use (order matters).
  3854. const valid_states = [
  3855. 'found',
  3856. 'missing',
  3857. 'logged_out',
  3858. 'error'
  3859. ];
  3860.  
  3861. // Are we on a search/list page?
  3862. const onSearchPage = Boolean(location.href.match('/search/'))
  3863. || Boolean(location.href.match('/list/'))
  3864. || Boolean(location.href.match('watchlist'));
  3865.  
  3866. // Globals for the sorting launcher.
  3867. var showSitezFirstBar = 0;
  3868. var sortReqOnNewLineTemp = false;
  3869.  
  3870. //==============================================================================
  3871. // Remove ads from IMDb
  3872. //==============================================================================
  3873.  
  3874. $('#top_ad_wrapper').remove();
  3875. $('#top_rhs_wrapper').remove();
  3876. $('.pro_logo_main_title').remove();
  3877. $('#promoted-partner-bar').remove();
  3878.  
  3879. //==============================================================================
  3880. // Start: Display 'Load' button or add links to sites
  3881. //==============================================================================
  3882.  
  3883. $('title').ready(function() {
  3884. if (window.top == window.self) {
  3885. if (!onSearchPage && GM_config.get('loadmod_on_start_movie')) {
  3886. performPage();
  3887. } else if (onSearchPage && GM_config.get('loadmod_on_start_search')) {
  3888. performSearch();
  3889. } else {
  3890. displayButton();
  3891. }
  3892. }
  3893. });