您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
light.gg 功能增强。
当前为
// ==UserScript== // @name light.gg Enhancer // @name:zh light.gg 功能增强 // @name:zh-CN light.gg 功能增强 // @namespace https://github.com/HirotaZX // @version 0.2.1 // @description light.gg Enhancer. // @description:zh light.gg 功能增强。 // @description:zh-CN light.gg 功能增强。 // @author HirotaZX // @match https://www.light.gg/* // @resource itemList https://light-gg-enhancer.hirotazx.com/item-list.json?v=202406150000 // @grant GM_getResourceText // ==/UserScript== (function() { 'use strict'; // transform item words in review to chs and tooltip trigger function transformReviewItems() { var itemElms = document.querySelectorAll('.item.show-hover'); var langStr = window.location.pathname.match(/\/db\/(.*)\/items/); var lang = langStr ? langStr[1] : 'en'; var reviewUrlRegex = /api.light.gg\/items\/\d*\/reviews/; var realOpen = window.XMLHttpRequest.prototype.open; window.XMLHttpRequest.prototype.open = function() { var url = arguments['1']; if (reviewUrlRegex.test(url)) { this.addEventListener('readystatechange', function(e) { if (this.readyState === 4) { var originalText = e.target.responseText; var modifiedText = originalText; itemElms.forEach(function(item) { var key = item.dataset.id; if(itemList[key] && itemList[key]['en'] && itemList[key]['en'].trim()) { var newName = itemList[key][lang] ? itemList[key][lang] : itemList[key]['en']; console.log(newName) modifiedText = modifiedText.replace(new RegExp(itemList[key]['en'], "ig"), '<span translate=\\"no\\" style=\\"color:dodgerblue;font-weight:bold;\\" class=\\"item show-hover notranslate\\" data-id=\\"' + key + '\\">' + newName.replaceAll('"', '\\"') + '</span>'); } }); Object.defineProperty(this, 'response', {writable: true}); Object.defineProperty(this, 'responseText', {writable: true}); this.response = this.responseText = modifiedText; console.log('【light.gg Enhancer】Review transformed!'); } }); } return realOpen.apply(this, arguments); }; } // remember locale function persistLocale() { var localeStr = window.location.pathname.match(/\/db\/(.*)\/items|\/db\/items/); if(!localeStr || !localeStr[0]) { console.log('【light.gg Enhancer】None item page.'); return; } initLocale(); listenLocaleChange(); // redirect to saved locale on enter item page function initLocale() { var savedLocale = window.localStorage.getItem("enhancer-locale"); console.log('【light.gg Enhancer】Saved locale: ' + savedLocale); var curLocale = localeStr[1]; if(curLocale) { if(savedLocale) { if(savedLocale != curLocale) { window.location.replace(window.location.pathname.replace(/\/db\/.*\/items/, '/db/' + savedLocale + '/items')); console.log('【light.gg Enhancer】Redirect to saved locale: ' + savedLocale); } } else { window.localStorage.setItem("enhancer-locale", curLocale); console.log('【light.gg Enhancer】Locale ' + curLocale + ' saved!'); } } else { if(savedLocale && savedLocale != 'en') { window.location.replace(window.location.pathname.replace(/\/db\/items/, '/db/' + savedLocale + '/items')); console.log('【light.gg Enhancer】Redirect to saved locale: ' + savedLocale); } } } // save locale on click locale icon function listenLocaleChange() { var localeLinks = document.querySelectorAll('#localemodal a, #sidebar-locales a'); localeLinks.forEach(function(link) { link.dataset.href = link.href; link.href = 'javascript:void(0);'; link.addEventListener('click', handleLocaleClick); }); function handleLocaleClick(e) { var elm = e.currentTarget; if(elm.dataset && elm.dataset.href) { var elmLocale = 'en'; var elmLocaleStr = elm.dataset.href.match(/\/db\/(.*)\/items|\/db\/items/); if(elmLocaleStr && elmLocaleStr[1]) { elmLocale = elmLocaleStr[1]; } window.localStorage.setItem("enhancer-locale", elmLocale); console.log('【light.gg Enhancer】Locale ' + elmLocale + ' saved!'); window.location.replace(elm.dataset.href); } } } } // append script to page var script = document.createElement("script"); script.textContent = "window.itemList = " + GM_getResourceText('itemList') + ";\n\n " + "(" + transformReviewItems.toString() + ")();\n\n" + "(" + persistLocale.toString() + ")();\n\n"; document.body.appendChild(script); })();