您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Offline tag search support and nhentai redirection when clicking on the book cover on a book information page
当前为
// ==UserScript== // @name Tsumino Tweaks // @description Offline tag search support and nhentai redirection when clicking on the book cover on a book information page // @namespace xspeed.net // @version 2 // @icon https://static.nhentai.net/img/logo.650c98bbb08e.svg // @match *://www.tsumino.com/* // @grant GM_getValue // @grant GM_setValue // @grant GM_xmlhttpRequest // ==/UserScript== (function() { 'use strict'; var jsonError = function(data) { alert(JSON.stringify(data)); } if (location.href.indexOf('/Book/Info/') != -1) { var title = $('.row>.book-title').text(); var ix = title.indexOf('/'); if (ix != -1) { title = title.substring(0, ix); } ix = title.indexOf('|'); if (ix != -1) { title = title.substring(0, ix); } var url = 'https://nhentai.net/search/?q=english+' + title.replace(/[^a-z0-9+]+/gi, '+'); var elem = $('.book-page-cover > a[href^="/Read/View/"]'); elem.attr('href', '#'); elem.unbind('click'); elem.click(function() { var onerror = function() { location.assign(url); } var onload = function(resp) { var respDoc = $(resp.responseText); var cover = respDoc.find('.cover'); if (cover && cover.attr('href')) { location.assign('https://nhentai.net' + cover.attr('href') + '1/'); } else { onerror(); } }; GM_xmlhttpRequest({ method: "GET", url: url, onload: onload, onerror: onerror }); }); } else { var tagSearch = $('#tagDataSearch'); if (tagSearch.length) { var tagMode = false; var tagData = GM_getValue('tagData', '[]'); var tagList = JSON.parse(tagData); var oldAdapter = null; var offlineQuery = function(params, callback) { var res = []; if (params && params.term && params.term.length != 0) { var term = params.term.toLowerCase(); for (var tag of tagList) { if (tag[0].toLowerCase().indexOf(term) != -1) { res.push(tag[0]); if (res.length > 4) break; } } } callback({ results: res.map(x => ({ key: 0, text: x, id: x })) }); }; tagSearch.next().html('<button id="tagsRefresh" type="button" class="book-read-button" style="padding: 5px 10px; margin: 5px 0;">Refresh tag list</button> Loaded tags: <span id=tagsCount>0</span>') $('#tagsCount').text(Object.keys(tagList).length); $('#selTagType').change(function() { var selData = $('#selTagValue').data('select2'); if ($(this).val() == 1 && !tagMode) { oldAdapter = selData.dataAdapter.query; tagMode = true; selData.dataAdapter.query = offlineQuery; } else if (tagMode) { selData.dataAdapter.query = oldAdapter; tagMode = false; } }); setTimeout(function() { $('#selTagValue').data('select2').dataAdapter.query = offlineQuery; tagMode = true; }, 1000); $('#tagsRefresh').click(function() { this.disabled = true; $('#tagsCount').text('0...') var parseTable = function(doc) { doc.find('.table.table-striped').find('tr').each(function() { var row = $(this).children('td'); var id = row.first().text().trim(); if (id.length > 0) tagList.push([id, parseInt(row.eq(1).text())]); }); }; var onload = function(resp) { var respDoc = $(resp.responseText); tagList = []; var hrefSet = new Set(); respDoc.find('a[href*="/Tags/Index/1/"]').each(function() { var ix = this.href.indexOf('?'); if (ix != -1) hrefSet.add(this.href); }); hrefSet = Array.from(hrefSet); var process = function(resp) { parseTable($(resp.responseText)); var next = hrefSet.pop(); if (next) { $('#tagsCount').text(Object.keys(tagList).length + '...'); GM_xmlhttpRequest({ method: "GET", url: next, onload: process, onerror: jsonError }); } else { tagList.sort((a, b) => b[1] - a[1]); $('#tagsCount').text(Object.keys(tagList).length); GM_setValue('tagData', JSON.stringify(tagList)); $('#tagsRefresh').prop('disabled', false); } }; process(resp); }; GM_xmlhttpRequest({ method: "GET", url: 'https://www.tsumino.com/Tags', onload: onload, onerror: jsonError }); }); } } })();