您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Userscript to add a few helpful links to each listed hosta
// ==UserScript== // @name hosta list links // @namespace hostalists // @include http*://www.hostalists.org/* // @version 1 // @grant none // @description Userscript to add a few helpful links to each listed hosta // ==/UserScript== (function() { const HOSTA_LIST_ITEM_SELECTOR = 'h1 ~ table li, h1 ~ ul li'; const MAX_NAME_LENGTH = 30; const SEARCH_TOKEN = '%s'; const SEARCHES = { GOOGLE: { label: 'G', title: 'Google', url: 'https://www.google.com/search?q="%s" hosta', }, GOOGLE_IMAGES: { label: 'img', title: 'Google Images', url: 'https://www.google.com/search?q="%s" hosta&tbm=isch', }, HOSTA_LIBRARY: { label: 'HL', title: 'Hosta Library', url: 'https://www.google.com/search?q="%s"+site%3Ahostalibrary.org&btnI=1', }, FRANSEN: { label: 'Fr', title: 'Fransen', url: 'https://www.google.com/search?q="%s"+site%3Ahostaparadise.com&btnI=1', }, GARDENWEB: { label: 'GW', title: 'GardenWeb forums', url: 'https://www.google.com/search?q="%s" hosta+site%3Aforums.gardenweb.com&btnI=1', }, }; const LIST_ITEM_CLASS = 'link-decorated-hosta-li'; const COMMON_CLASS_NAME = 'helper-link'; const EXPANDED_CLASS = 'expanded'; const STYLE = ` .${LIST_ITEM_CLASS} { cursor: pointer; cursor: alias; } .${LIST_ITEM_CLASS} > .${COMMON_CLASS_NAME} { color: #006B45; display: none; } .${LIST_ITEM_CLASS}:hover > .${COMMON_CLASS_NAME}, .${LIST_ITEM_CLASS}.${EXPANDED_CLASS} > .${COMMON_CLASS_NAME} { display: inline; } `; ////////////// activate(); ////////////// function activate() { var listItems = document.querySelectorAll(HOSTA_LIST_ITEM_SELECTOR); addLinks(listItems); addClickHandler(); addStyle(); } function addLinks(hostaListItems) { for (var i = 0, listItem; listItem = hostaListItems[i]; i++) { var hosta = listItem.innerHTML.replace(/^\s*('|")|('|")\s*$/g, ''); var links = makeLinks(hosta); for (var j = 0, link; link = links[j]; j++) { listItem.innerHTML += ' '; listItem.appendChild(link); } listItem.className += ` ${LIST_ITEM_CLASS}`; } function makeLinks(hostaName) { var links = []; if (!isHostaName(hostaName)) return links; for (var searchKey in SEARCHES) { if (!SEARCHES.hasOwnProperty(searchKey)) continue; var search = SEARCHES[searchKey]; var url = search.url.replace(SEARCH_TOKEN, encodeURIComponent(hostaName)); var link = makeLink( search.label, search.title, url ); links.push(link); } return links; } function makeLink(label, title, url) { var a = document.createElement('a'); var siteClass = title.replace(/ /g, '-').toLowerCase(); a.className = `${COMMON_CLASS_NAME} ${siteClass}`; a.href = url; a.title = title; a.target = '_blank'; a.innerHTML = label; return a; } function isHostaName(term) { if (term.length > MAX_NAME_LENGTH) return false; // too long if (term.indexOf('<') != -1) return false; // contains HTML if (term.indexOf('.') != -1) return false; // contains a sentence return true; } } function addClickHandler() { document.body.addEventListener('click', function(event) { if (event.target.className.indexOf(LIST_ITEM_CLASS) == -1) return; if (event.target.className.indexOf(EXPANDED_CLASS) != -1) { event.target.className = event.target.className.replace(EXPANDED_CLASS, ''); } else { event.target.className += ` ${EXPANDED_CLASS}`; event.target.className = event.target.className.replace(' ', ' '); } }); } function addStyle() { var styleBlock = document.createElement('style'); styleBlock.innerHTML = STYLE; document.head.appendChild(styleBlock); } })();