您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Show direct links to download biggest Flickr image available and some other sizes.
当前为
// ==UserScript== // @name Flickr Original Link // @namespace https://greasyfork.org/scripts/1190-flickr-original-link // @include /^https?:\/\/.*\.?flickr\.com\/photos\/.*/ // @version 4.2.7 // @grant GM_getValue // @grant GM_setValue // @require http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js // @description Show direct links to download biggest Flickr image available and some other sizes. // ==/UserScript== var source = ""; var postfix = "_d.jpg"; var prefix = "DOWNLOAD "; var isChecked = ""; var key = "flickr_openLink"; var currentSetting = false; var getSetting = function() { currentSetting = GM_getValue(key, false); console.log("get setting " + currentSetting); if (currentSetting) { postfix = "."; isChecked = ' checked="checked" '; prefix = "OPEN "; } else { postfix = "_d."; isChecked = ""; prefix = "DOWNLOAD "; } } getSetting(); $('#subnav-refresh .subnav-holder ul:first').append( '<li><div title="If this option is checked, you will OPEN the image, instead of downloading it. Nếu bạn đánh dấu tùy chọn này, khi nhấn vào link, bạn sẽ MỞ ảnh ra chứ không phải tải tự động về máy." id="optionBoxContainer" style="color:pink"><input id="optionBox" type="checkbox"' + isChecked + 'style="margin:5px"/>Open image link in browser</div></li>'); var action_singlephoto = function() { var size = document.documentElement.innerHTML.match(/"sizes":{(.+?})}/i); var mWidth, mHeight, mLink, mSize, length; var strCss = ".bigButton {display : inline-block; cursor : pointer; border-style : solid; border-width : 2px; border-radius : 50px; padding : 15px 15px; font-size : 10pt; font-weight : bold;} .smallButton { display: inline-block; padding: 0.6em; margin: 0.4em; background-color: pink; border-radius:1.5em;font-size:10pt}"; mSize = size[0].match(/"width":"?\d+"?,"height":"?\d+"?,/ig); mLink = size[0].match(/"url":"[^"]+"/ig); length = mLink.length; for (var k = 0; k < length; k++) { mSize[k] = mSize[k].replace(/"width":(\d+),"height":(\d+),/i, "$1 x $2"); mLink[k] = "http:" + mLink[k].replace(/"url":"([^"]+)"/i, "$1").replace(/\\/g, "").replace(/(_[a-z])\.([a-z]{3,4})/i, '$1' + postfix + '$2'); } $('head').append('<style>' + strCss + '</style>'); var insertLocation = $('.sub-photo-right-row1'); if (insertLocation.length > 0) { insertLocation.append('<a class="bigButton" href="' + mLink[length - 1] + '">DOWNLOAD ' + mSize[length - 1] + ' px</a>'); for (var k = 0; k < 7; k++) { if (length - k - 2 > 0) insertLocation.append('<a class="smallButton" href="' + mLink[length - 2 - k] + '">' + mSize[length - 2 - k] + ' px</a>'); } } } var flickr_mouseenter = function(index, elem) { var $e = $(elem); // if ($e.find('.myFuckingLink').filter(':first').length > 0) return true; var photoId = $e.attr('data-photo-id'); for (var i = 0; i < source.length; i++) { if (source[i].indexOf(photoId) == 8) { var link = source[i].match(/https?[^"]+/)[0].replace(/\\/g, "").replace(/(_[a-z])\.([a-z]{3,4})/i, '$1' + postfix + '$2').replace(/https/, "http"); var size = source[i].replace(/.+"width":"?(\d+)"?,"height":"?(\d+)"?.*/, "$1 x $2 px"); $e.find('.attribution-block').append('<a class="myFuckingLink" style="display:inline-block;padding:5px 5px 0px 5px;border-radius:3px;" href="' + link + '" target="_tab">' + prefix + size + '</a>'); break; } } } var action_photostream = function() { source = document.documentElement.innerHTML.match(/"file":"[^}]+}}/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(/"file":"[^}]+}}/g); source = source.concat(source2); }); } var target = $('body')[0]; var config = { childList : true, subtree : true, }; var c = 0; var observer = new MutationObserver(function(mutations, ob) { console.log("Mutation occurred"); if ($('.myFuckingLink').filter(':first').length > 0) { console.log("Download link existed"); return false; } var photoDisplayItem = $('.photo-display-item'); console.time('Insert links'); $('.myFuckingLink').remove(); photoDisplayItem.each(flickr_mouseenter); console.timeEnd('Insert links'); }); observer.observe(target, config); } $('#optionBox').change(function() { console.time('change'); GM_setValue(key, $(this).prop('checked')); getSetting(); $('.myFuckingLink').remove(); $('.photo-display-item').each(flickr_mouseenter); console.timeEnd('change'); }); var pageType = function() { 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'; console.log("page type " + type); return type; } var type = pageType(); if (type == 'photostream') action_photostream(); else if (type == 'singlephoto') action_singlephoto();