您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Opens full sized images in the lightbox on pluspora.
// ==UserScript== // @name Pluspora Large Lightbox // @namespace http://aperturized.com // @version 0.5.1 // @description Opens full sized images in the lightbox on pluspora. // @author carsten.schlipf(at)aperturized.com // @match https://pluspora.com/* // @match https://*.pluspora.com/** // @match https://joindiaspora.org/* // @match https://*.joindiaspora.org/** // @match https://deko.cloud/** // @match https://despora.de/* // @match https://*.despora.de/** // @grant none // ==/UserScript== // Set to true to enable login on the browser console. var LOG_ENABLED=false; function logMsg(message) { if (! LOG_ENABLED) { return; } console.log ("[Pluspora Large Lightbox] " + message); } function transformPhotoLinks(parentElement) { if (!parentElement) { logMsg("parentElement is not defined"); return; } if (parentElement.getElementsByClassName == undefined) { logMsg("parentElement.getElementsByClassName is not defined"); return; } var photoAttachments = parentElement.getElementsByClassName("photo-attachments") if (!photoAttachments) { logMsg ("No photo attachments found"); return; } for (var i = 0; i < photoAttachments.length; i++) { var photoLinkElement = photoAttachments[i].getElementsByTagName('a')[0]; var imageUrl = photoLinkElement.getAttribute("href"); logMsg ("Photo URL before transformation: " + imageUrl); var newImageUrl = imageUrl.replace("scaled_full_",""); logMsg ("Photo URL after transformation: " + newImageUrl); photoLinkElement.setAttribute("href", newImageUrl); } } function extendLightbox() { var galleryElement = document.getElementById("blueimp-gallery"); if (!galleryElement) { logMsg("Gallery element blueimp-gallery not found. Cannot add details link.") } var slidesElement = galleryElement.firstElementChild; logMsg("slidesElement " + slidesElement); // Add details link var detailsLink = document.createElement("a"); detailsLink.setAttribute("target", "diaspora-exif"); detailsLink.setAttribute("style", "padding:4px; background-color:white; color:black; opacity:0.3; font-weight: bold; font-size:10px;"); detailsLink.setAttribute("id", "pll-details-link"); var node = document.createTextNode("DETAILS"); detailsLink.appendChild(node); galleryElement.appendChild(detailsLink); // Observe slides element to update link URL, when slides are added // Limitation: Only works for the first image of a slide show. var slidesMutationObserver = new MutationObserver(function(mutations) { logMsg("DOM changes in slides detected. Updating details link"); var slides = slidesElement.getElementsByClassName("slide"); if (slides.length == 0 ) { logMsg("No slide element found"); } else { var imgElements = slides[0].getElementsByTagName("img"); if (imgElements.length == 0 ) { logMsg("No img found within the slide") } else { var imgUrl = imgElements[0].getAttribute("src"); logMsg("Updating details link for image with URL " + imgUrl); detailsLink.setAttribute("href", "https://exifinfo.org/url?url=" + imgUrl); } } }); slidesMutationObserver.observe(slidesElement, { attributes: false, characterData: false, childList: true, subtree:true, characterDataOldValue: false }); logMsg ("MutationObserver registered for slides"); } function transformMainStream() { var mainStream = document.getElementById("main-stream"); if (! mainStream) { logMsg("Element main-stream not found"); return; } var streamMutationObserver = new MutationObserver(function(mutations) { mutations.forEach(function(mutation) { if(mutation.type == "childList") { for (var i = 0; i < mutation.addedNodes.length; i++) { var addedNode=mutation.addedNodes[i]; if (addedNode.nodeName == "DIV"){ logMsg("New div added to main-stream. Scanning for photo attachments."); transformPhotoLinks(addedNode); } } } }); }); streamMutationObserver.observe(mainStream, { attributes: false, characterData: false, childList: true, subtree:true, characterDataOldValue: false }); logMsg ("MutationObserver registered for main-stream"); } (function() { 'use strict'; logMsg ("Running Pluspora Large Lightbox Tampermonkey script."); logMsg(document.location.href.indexOf("/posts/")); if (document.location.href.indexOf("/posts/") >= 0) { logMsg ("We are on a posts page"); transformPhotoLinks(document); } else if (document.getElementById("main-stream")) { logMsg ("We are on a page featuring a main-stream."); transformMainStream(); } else { logMsg ("Unknown page type. Cannot transform picture links. URL: " + document.location.href); } extendLightbox(""); })();