您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Better porn browsing
// ==UserScript== // @name EMPviewer v2 // @namespace https://www.empornium.sx/ // @version 2.0 // @description Better porn browsing // @author p0wn3rd // @contributors someone234342, JoaoBravo88,howlingbanshee // @match https://www.empornium.sx/* // @grant none // @require https://code.jquery.com/jquery-3.2.1.min.js // ==/UserScript== (function($) { 'use strict'; $.noConflict(); const config = { thumbSize: '20%', // Enter width here in % (Height will be calculated automatically) – 20% , 25% and 33% are good examples showTitle: false, // set false to hide title and only show when you hover on thumbnail showUploader: false, // set true to show uploader name on tiles maxTitleLength: 70, // title will be truncated after these many characters excludeCategories: 'sick, scat, animal, gay', // comma-separated list of categories you don't like excludeTags: '', // comma-separated list of tags you don't like }; // -------------- // Unless you know what you're doing, don't edit below this line; if (!$('.torrent_table').length || $('.torrent_table').parents('#details_top').length) return; const css = ` #content { max-width: none; } .torrent_grid { background: black; padding: 5px; } .torrent_grid__torrent { width: ${config.thumbSize}; height: 160px; display: inline-block; background-size: cover; background-repeat: no-repeat; background-position: center center; border: 5px solid black; box-sizing: border-box; position: relative; overflow: hidden; color: white; } .torrent_grid__torrent__cat { position: absolute; top: 5px; left: 5px; background: rgba(0, 0, 0, 0.7); font-size: 15px; padding: 2px 10px; text-transform: uppercase; font-weight: bold; } .torrent_grid__torrent__info { position: absolute; display: block; bottom: 0; left: 0; width: 100%; background: rgba(0, 0, 0, 0.75); padding: 10px; box-sizing: border-box; transition: .1s ease; font-size: 13px; } .torrent_grid__torrent__info h3 { font-weight: normal; font-size: 1.2em; color: #cccccc; ${!config.showTitle ? 'display: none' : ''} } .torrent__size { color: #ccc; border: none; padding: 0px 2px; font-size: 12px; font-weight: normal; margin-left: 2px; } h3 .torrent__size { border-color: rgb(226, 226, 226); color: rgb(226, 226, 226); position: relative; font-size: 13px; top: -2px; margin-right: 2px; margin-left: 0; } @media (max-width: 1200px) { .torrent_grid__torrent__info h3 { font-size: 1em; } } .torrent_grid__torrent__info h3:hover { text-decoration: none; } .newtime{ position: absolute; down: 0; right: 0; padding: 0px 5px; } .torrent_grid__torrent__info .uploader a { font-weight: bold; text-decoration: underline; } .seeders, .leechers { margin-right: 5px; } .seeders svg, .leechers svg { position: relative; top: 4px; margin-right: -2px } span[style="color: #FF0000;"] { color: #ff4646 !important; } .torrent--freeleech { background: rgba(0, 0, 0, 0.7); position: absolute; top: 5px; right: 5px; padding: 10px 10px; } .torrent_grid__torrent:visited h3, .uploader a:visited { color: #FF1493; } .torrent__info_extra { position: absolute; bottom: 9px; right: 8px; } .torrent__info_extra img[alt="Freeleech"] { display: none; } .torrent__info_extra .icon { width: 18px; width: 18px; background-size: contain; vertical-align: middle; margin-right: 5px; } .icon.icon_okay { display: none; } .torrent__info__time { display:none; } .torrent__cover { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-size: cover; background-repeat: no-repeat; background-position: center center; } .torrent--excluded .torrent__cover { -webkit-filter: blur(20px); -moz-filter: blur(20px); filter: blur(20px); } `; // Add style to <head> const styleTag = document.createElement('style'); styleTag.id = "pb_grid_css"; styleTag.innerHTML = css; document.head.appendChild(styleTag); // returns torrents array var getTorrents = (table) => { const torrents = []; table.find('tr.torrent').each(function(){ const $this = $(this); const cells = $this.find('td'); let isTop10 = location.pathname === '/top10.php'; const cellMap = isTop10 ? { main: 2, category: 1, size: 4, seeders: 6, leechers: 7, uploader: 9, } : { main: 1, category: 0, files: 2, time: 4, size: 5, seeders: 7, leechers: 8, uploader: 10, }; const overlayID = $this.find('a[href*="torrents.php?id"]').attr('onmouseover').split('overlib(')[1].split(', FULLHTML')[0]; const thisTorrent = { category: cells.eq(cellMap.category).find('div[title]').attr('title'), overlayID: overlayID, cover: window[overlayID].split('src=')[1].split('></td>')[0], link: $this.find('a[href*="torrents.php?id"]')[0].href, title: $this.find('a[href*="torrents.php?id"]').text(), tags: $this.find('.tags').html(), files: cells.eq(cellMap.files).text(), time: cells.eq(cellMap.time).text(), time_full: cells.eq(cellMap.time).find('span[title]').attr('title'), size: cells.eq(cellMap.size).text(), snatches: cells.eq(cellMap.snatches).text(), seeders: cells.eq(cellMap.seeders).text(), leechers: cells.eq(cellMap.leechers).text(), uploader: cells.eq(cellMap.uploader).html(), uploaderName: cells.eq(cellMap.uploader).text(), }; thisTorrent.fl = cells.eq(cellMap.main).find('img[alt="Freeleech"]'); if(thisTorrent.fl.length){ thisTorrent.fl = "<span class='torrent--freeleech'><img src='static/common/symbols/freedownload.gif' alt='Freeleech' title='Freeleech' /></span>"; } else { thisTorrent.fl = ""; } thisTorrent.status_icons = cells.eq(cellMap.main).find('span[style="float:right"]').html(); if(thisTorrent.seeders > 0) { thisTorrent.seeders = "<span style='color: #3FEB00;'>" + thisTorrent.seeders + "</span>"; } else { thisTorrent.seeders = "<span style='color: #FF0000;'>" + thisTorrent.seeders + "</span>"; } if(thisTorrent.leechers > 0) { thisTorrent.leechers = "<span style='color: #FF0000;'>" + thisTorrent.leechers + "</span>"; } torrents.push(thisTorrent); }); table.html('<div class="torrent_grid">'); return torrents; }; $('.torrent_table').each(function(){ const torrents = getTorrents($(this)); const grid = $(this).find('.torrent_grid'); // Insert grid torrents.forEach(torrent => { const thisTorrent = $(`<a href="${torrent.link}" class="torrent_grid__torrent" />`); const Icon_seed = '<svg style="width:17px;height:17px" viewBox="0 0 24 24"><path fill="#FFFFFF" d="M14,20H10V11L6.5,14.5L4.08,12.08L12,4.16L19.92,12.08L17.5,14.5L14,11V20Z" /></svg>'; const Icon_leech = '<svg style="width:17px;height:17px" viewBox="0 0 24 24"><path fill="#FFFFFF" d="M10,4H14V13L17.5,9.5L19.92,11.92L12,19.84L4.08,11.92L6.5,9.5L10,13V4Z" /></svg>'; const excludeCategories = config.excludeCategories.split(','); const excludeTags = config.excludeTags.split(','); excludeCategories.forEach(excludedCat => { if (excludedCat.length && torrent.category.toLowerCase() == excludedCat.trim().toLowerCase()) thisTorrent.addClass('torrent--excluded'); }); excludeTags.forEach(excludedTag => { if (excludedTag.length && torrent.tags.toLowerCase().indexOf('>' + excludedTag.trim().toLowerCase()) !== -1) thisTorrent.addClass('torrent--excluded'); }); const _category = torrent.category ? `<span class="torrent_grid__torrent__cat">${torrent.category}</span>` : ''; const _uploader = torrent.uploader && config.showUploader ? `<span class="uploader" title="uploaded by ${torrent.uploaderName}">by: ${torrent.uploader}</span>` : ''; const title_truncated = torrent.title.length > config.maxTitleLength ? torrent.title.slice(0, config.maxTitleLength) + '...' : torrent.title; thisTorrent.append(` <div class="torrent__cover" style='background-image: url(${torrent.cover})'></div> ${_category} ${torrent.fl} <div class="torrent_grid__torrent__info"> <h3 title="${torrent.title}">${config.showUploader ? `<span class="torrent__size">${torrent.size}</span>` : ''} ${title_truncated}</h3> <div> <span class="seeders">${Icon_seed} ${torrent.seeders}</span> <span class="leechers">${Icon_leech} ${torrent.leechers}</span> ${config.showUploader ? '': `<span class="torrent__size">${torrent.size}</span>`} ${_uploader} <span class="torrent__info_extra"> ${torrent.status_icons} <span class="torrent__info__time" title="${torrent.time_full}">${torrent.time}</span> </span> </div> </div>`); grid.append(thisTorrent); thisTorrent.height(thisTorrent.outerWidth() - 10); }); }); $(window).resize(function(){ const sizeCSS = $('#gridSizeCSS'); const size = $('.torrent_grid__torrent').first().outerWidth(); if (!sizeCSS.length) { const sizeCSS = $('<style type="text/css" id="gridSizeCSS" />'); $('head').append(sizeCSS); } sizeCSS.html(`.torrent_grid__torrent { height: ${size - 10}px !important }`); }); $('.torrent_grid__torrent').on('mouseover' , function() { $(this).find('h3').slideDown('fast'); }); $('.torrent_grid__torrent').on('mouseleave' , function() { $(this).find('h3').slideUp('fast'); }); $.noConflict(); })(jQuery);