Greasy Fork is available in English.
Open the original (largest) image in a new tab by pressing 'z' while hovering over a pin
当前为
// ==UserScript==
// @name Pinterest - Open Original Image
// @namespace http://tampermonkey.net/
// @version 0.1.2
// @description Open the original (largest) image in a new tab by pressing 'z' while hovering over a pin
// @author Valacar
// @include https://*.pinterest.tld/*
// @grant GM_openInTab
// @noframes
// @license MIT
// @compatible firefox Firefox
// @compatible chrome Chrome
// ==/UserScript==
(function() {
'use strict';
// Custom key. Only single letters.
const KEY_TO_OPEN = "z";
// Immediately switch to new tab?
// Note: Hold SHIFT key to do the opposite of this (e.g. shift-z)
const ACTIVATE_NEW_TAB = true;
function showImage(shouldActivateTab)
{
const imageData = getPinImageData();
if (!(imageData && imageData.orig)) return;
let imageOrig = imageData.orig;
if (/\.(?:jpe?g|png|gif)$/.test(imageOrig.url)) {
GM_openInTab(imageOrig.url, {active: shouldActivateTab});
}
}
function getEventHandler(pin)
{
return Object.keys(pin).find(
prop => prop.startsWith("__reactEventHandlers")
);
}
function getPinImageData()
{
let el;
let data;
let handler;
const hoveredElements = document.querySelectorAll(':hover');
//console.debug(hoveredElements);
let len = hoveredElements.length;
while (len--) {
el = hoveredElements[len];
if (handler === undefined) handler = getEventHandler(el);
if (!handler) continue;
if (el.classList.contains("pinWrapper")) { // normal pin
data = el[handler].children[1].props.images;
} else if (el.hasAttribute("data-grid-item")) { // normal pin alternative
data = el[handler].children.props.data.images;
} else if (el.classList.contains("imageLink")) { // closeup image
data = el[handler].children[1].props.pin.images;
}
if (data) {
//console.debug(data);
return data;
}
}
}
window.addEventListener("keydown",
function(event) {
if (event.defaultPrevented ||
/(input|textarea)/i.test(document.activeElement.nodeName) ||
document.activeElement.matches('[role="textarea"]'))
{
return;
}
switch (event.key) {
case KEY_TO_OPEN.toLowerCase():
showImage(ACTIVATE_NEW_TAB);
break;
case KEY_TO_OPEN.toUpperCase():
showImage(!ACTIVATE_NEW_TAB);
break;
default:
return;
}
event.preventDefault();
},
true
);
})();