您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Based on 'Flickr Original Link' (https://greasyfork.org/en/scripts/3135-flickr-original-link-beta). Adds an 'Embed' field containing HTML code for each photo.
当前为
// ==UserScript== // @name Flickr Large Embed // @namespace https://greasyfork.org/en/scripts/6699-flickr-large-embed // @description Based on 'Flickr Original Link' (https://greasyfork.org/en/scripts/3135-flickr-original-link-beta). Adds an 'Embed' field containing HTML code for each photo. // @include /^https?:\/\/.*\.?flickr\.com\/photos\/.*/ // @version 2014-11-28 // @grant GM_getValue // @grant GM_setValue // @require http://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js // ==/UserScript== // var source = ""; /* * support function */ function addEmbedToNewPhotoPage() { var size = document.documentElement.innerHTML.match(/"sizes":{(.+?})}/i); var mWidth, mHeight, mLink, mSize, length; mSize = size[0].match(/"width":"?\d+"?,"height":"?\d+"?,/ig); mLink = size[0].match(/"url":"[^"]+"/ig); length = mLink.length; var embedSize = 0; var linkSize = 0; var embedHeight = 0; var embedWidth = 0; for (var k = 0; k < length; k++) { var myArray = mSize[k].match(/:\w+,/g); var width = parseInt(myArray[0].replace(':','').replace(',','')); var height = parseInt(myArray[1].replace(':','').replace(',','')); mSize[k] = mSize[k].replace(/"width":(\d+),"height":(\d+),/i, "$1 x $2"); mLink[k] = "http:" + mLink[k].replace(/"url":"([^"]+)"/i, "$1").replace(/\\/g, ""); if (embedSize == 0 && (width >= 800 || height >= 600) ) { embedSize = k; embedHeight = height; embedWidth = width; } if (linkSize == 0 && (width >= 2048 || height >= 1024) ) { linkSize = k; } if (embedSize == 0 && k == length-1) { embedSize = k; embedHeight = height; embedWidth = width; } if (linkSize == 0 && k == length-1) { linkSize = k; } } var maxWidth = ''; if (embedHeight < embedWidth) { // Landscape image: full width and auto-height maxWidth= 'style="max-width: ' + embedWidth + 'px"'; embedWidth = '100%'; } else { embedWidth += 'px'; } var embedCode = '<p><a href="' + mLink[linkSize] + '" target="_blank" border="0"><img src="' + mLink[embedSize] + '" width="' + embedWidth + '" height="auto" border="0" ' + maxWidth + ' /></a></p>'; var insertLocation = $('.sub-photo-right-row1'); if (insertLocation.length > 0) { insertLocation.append('<div style="color: black; display:block;">Embed <input type="text" name="textfield" onclick="this.select();" style="width:350px;" id="EMBED" value="Loading"/></div>'); $('#EMBED').val(embedCode); } } function addEmbedToNavPhotoPage(sizes) { var html = $.parseHTML(sizes); var embedUrl = false; var linkUrl = false; var currentEmbedWidth = 100000; var currentEmbedHeight = 100000; var currentLinkWidth = 100000; var currentLinkHeight = 100000; var maxWidth = 0; var maxHeight = 0; var maxUrl = false; $.each(html, function( index, size ) { if (size.nodeName == 'LI' && size.textContent != "View all sizes") { var link = size.childNodes[1].href; var myArray = size.textContent.match(/\w+/g); var width = parseInt(myArray[1]); var height = parseInt(myArray[2]); if ((width >= 800 || height >= 600) && width < currentEmbedWidth && height < currentEmbedHeight) { embedUrl = link; currentEmbedHeight = height; currentEmbedWidth = width; } if ((width >= 2048 || height >= 1024) && width < currentLinkWidth && height < currentLinkHeight ) { linkUrl = link; currentLinkHeight = height; currentLinkWidth = width; } if (width > maxWidth && height > maxHeight) { maxWidth = width; maxHeight = height; maxUrl = link; } } }); if (!linkUrl) { linkUrl = maxUrl; currentLinkHeight = maxHeight; currentLinkWidth = maxWidth; } if (!embedUrl) { embedUrl = maxUrl; currentEmbedHeight = maxHeight; currentEmbedWidth = maxWidth; } if (linkUrl && embedUrl) { var maxWidth= ''; if (currentEmbedHeight < currentEmbedWidth) { // Landscape image: full width and auto-height maxWidth= 'style="max-width: ' + currentEmbedWidth + 'px"'; currentEmbedWidth = '100%'; } else { currentEmbedWidth += 'px'; } var embedCode = '<p><a href="' + linkUrl + '" target="_blank" border="0"><img src="' + embedUrl + '" width="' + currentEmbedWidth + '" height="auto" border="0" ' + maxWidth + ' /></a></p>'; var insertLocation = $('.sub-photo-right-row1'); if (insertLocation.length > 0) { insertLocation.append('<div style="color: black; display:block;">Embed <input type="text" name="textfield" onclick="this.select();" style="width:350px;" id="EMBED" value="Loading"/></div>'); $('#EMBED').val(embedCode); } } } function action_singlephoto() { addEmbedToNewPhotoPage(); var target = $('body')[0]; var config = { childList : true, subtree : true, }; var observer = new MutationObserver(function(mutations, ob) { //console.log("Mutation occurred"); if ($('#EMBED').length > 0) { //console.log("Embed input exists"); return false; } else { // Moved to the previous/next page : load the sizes and add the Embed code var sizes = $('.sizes')[0].innerHTML; addEmbedToNavPhotoPage(sizes); } }); observer.observe(target, config); } function action_photostream() { source = document.documentElement.innerHTML.match(/"sizes":.*?}}/g); if (source == null) { console.log('err: no source'); return false; } var t1 = $('a[data-track="prev"]').attr('href'); if (t1 != null) { var t2 = $('span.this-page').text(); t1 = t1.replace(/\/page\d+\//i, "/page" + t2 + "/"); var $div = $('<div>'); $div.load(t1, function() { var source2 = $(this).text().match(/"sizes":.*?}}/g); source = source.concat(source2); }); } var target = $('body')[0]; var config = { childList : true, subtree : true, }; var observer = new MutationObserver(function(mutations, ob) { //console.log("Mutation occurred"); if ($('.myMotherFuckingLink').filter(':first').length > 0) { //console.log("Download link existed"); return false; } var photoDisplayItem = $('.photo-display-item'); //console.time('Insert links'); $('.myMotherFuckingLink').remove(); photoDisplayItem.each(showLink); //console.timeEnd('Insert links'); }); observer.observe(target, config); } function pageType() { var title = $('head title').text(); var type = "none"; if (title.match(/flickr.+photostream/i) != null) type = 'photostream'; else if (title.match(/an album on flickr/i) != null) type = 'photostream'; else if (title.match(/flickr - photo sharing/i) != null) type = 'singlephoto'; else if (title.match(/favorite photos and videos/i) != null) type = 'favorite'; else if (title.match(/from the people you follow/i)!=null) type = 'favorite'; // else if (document.URL.match(/flickr\.com\/groups\//i) != null) type = 'favorite'; else if (title.match(/flickr.+pool$/i) != null) type = 'favorite'; //console.log("page type " + type); return type; } function showLink(index, elem) { var $e = $(elem); var photoId = $e.attr('data-photo-id'); $e.find('.attribution-block').append('<div class="myMotherFuckingLink" style="color: white; display: block; opacity: 0.5">Embed <input type="text" name="textfield" onclick="this.select();" style="width:100px;" id="EMBED_' + photoId + '" value="Loading"/></div>'); var embedUrl = false; var linkUrl = false; var currentEmbedWidth = 100000; var currentEmbedHeight = 100000; var currentLinkWidth = 100000; var currentLinkHeight = 100000; var maxWidth = 0; var maxHeight = 0; var maxUrl = false; for (var i = 0; i < source.length; i++) { if (source[i].indexOf(photoId) == 40) { var sizes = JSON.parse('{'+source[i]+'}'); $.each(sizes.sizes, function( index, size ) { var width = parseInt(size.width); var height = parseInt(size.height); if ((width >= 800 || height >= 600) && width < currentEmbedWidth && height < currentEmbedHeight) { embedUrl = size.url; currentEmbedHeight = height; currentEmbedWidth = width; } if ((width >= 2048 || height >= 1024) && width < currentLinkWidth && height < currentLinkHeight ) { linkUrl = size.url; currentLinkHeight = height; currentLinkWidth = width; } if (width > maxWidth && height > maxHeight) { maxWidth = width; maxHeight = height; maxUrl = size.url; } }); if (!linkUrl) { linkUrl = maxUrl; currentLinkHeight = maxHeight; currentLinkWidth = maxWidth; } if (!embedUrl) { embedUrl = maxUrl; currentEmbedHeight = maxHeight; currentEmbedWidth = maxWidth; } if (linkUrl && embedUrl) { var maxWidth= ''; if (currentEmbedHeight < currentEmbedWidth) { // Landscape image: full width and auto-height maxWidth= 'style="max-width: ' + currentEmbedWidth + 'px"'; currentEmbedWidth = '100%'; } else { currentEmbedWidth += 'px'; } var embedCode = '<p><a href="' + linkUrl + '" target="_blank" border="0"><img src="' + embedUrl + '" width="' + currentEmbedWidth + '" height="auto" border="0" ' + maxWidth + ' /></a></p>'; $('#EMBED_'+photoId).val(embedCode); } } } } /* * end support */ var type = pageType(); if (type == 'photostream') { action_photostream(); } else if (type == 'singlephoto') { action_singlephoto(); }