Created
May 22, 2015 02:40
-
-
Save hnq90/bf9d7d8041383e964281 to your computer and use it in GitHub Desktop.
Flickr All Images Size
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // ==UserScript== | |
| // @name Flickr All Images Size | |
| // @namespace https://greasyfork.org/scripts/6850-flickr-all-images-size | |
| // @include /flickr\.com\/(photos|groups|search)\// | |
| // @version 4.3.7 | |
| // @grant GM_getValue | |
| // @grant GM_setValue | |
| // @require http://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js | |
| // @description Show direct links to all Flickr image sizes. | |
| // ==/UserScript== | |
| var source = ""; | |
| var postfix = "_d.jpg"; | |
| var prefix = "DOWNLOAD "; | |
| var isChecked_openLink = ""; | |
| var isChecked_alwaysShow = ""; | |
| var key_openLink = "flickr_openLink"; | |
| var key_alwaysShow = "flickr_alwaysShow"; | |
| var value_openLink = false; | |
| var value_alwaysShow = false; | |
| var newTab = ""; | |
| function log(s) { | |
| console.log(s); | |
| } | |
| function getSetting() { | |
| value_openLink = GM_getValue(key_openLink, true); | |
| value_alwaysShow = GM_getValue(key_alwaysShow, false); | |
| log("Get flickr_openLink: " + value_openLink); | |
| log("Get flickr_alwaysShow: " + value_alwaysShow); | |
| if (value_openLink) { | |
| postfix = "."; | |
| isChecked_openLink = ' checked="checked" '; | |
| prefix = "OPEN "; | |
| newTab = " target='_blank'"; | |
| } else { | |
| postfix = "_d."; | |
| isChecked_openLink = ""; | |
| prefix = "DOWNLOAD "; | |
| newTab = ""; | |
| } | |
| if (value_alwaysShow) { | |
| isChecked_alwaysShow = ' checked="checked" '; | |
| } else { | |
| isChecked_alwaysShow = ""; | |
| } | |
| } | |
| function action_singlephoto(oldURL) { | |
| var target = $('html')[0]; | |
| var config = { | |
| childList: true, | |
| subtree: true, | |
| }; | |
| var action = function(sourceCode) { | |
| var size = sourceCode.match(/modelExport: {.+?"sizes":{.+?}}/i); | |
| var mWidth, mHeight, mLink, mSize, length; | |
| var strCss = ".bigButton {position:relative;z-index:999;display : inline-block; cursor : pointer; border-style : solid; border-width : 2px; border-radius : 50px; padding : 15px 15px; font-size : 10pt; font-weight : bold;} .smallButton {position:relative;z-index:9999999;display: inline-block; padding: 0.6em; margin: 0.4em; background-color: pink; border-radius:1.5em;font-size:10pt}"; | |
| $('head').append('<style>' + strCss + '</style>'); | |
| mSize = size[0].match(/"width":"?\d+"?,"height":"?\d+"?,/ig); | |
| mLink = size[0].match(/"displayUrl":"[^"]+"/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(/"displayUrl":"([^"]+)"/i, "$1").replace(/\\/g, "").replace(/(_[a-z])\.([a-z]{3,4})/i, '$1' + postfix + '$2'); | |
| } | |
| var insertLocation = $('.sub-photo-right-row1'); | |
| if (insertLocation.length > 0) { | |
| insertLocation.append('<a class="bigButton" href="' + mLink[length - 1] + '"' + newTab + '>' + prefix + mSize[length - 1] + " px</a>"); | |
| for (k = 0; k < 7; k++) { | |
| var m = length - k - 2; | |
| if (m > 0) insertLocation.append('<a class="smallButton" href="' + mLink[m] + '"' + newTab + '>' + mSize[m] + " px</a>"); | |
| } | |
| } | |
| }; | |
| var observer = new MutationObserver(function(mutations, ob) { | |
| if (document.URL == oldURL) return; | |
| oldURL = document.URL; | |
| $.get(oldURL, action); | |
| }); | |
| observer.observe(target, config); | |
| } | |
| function flickr_mouseenter() { | |
| var e = $(this); | |
| if (e.find('.myFuckingLink').filter(':first').length > 0) { | |
| e.off('mouseenter'); | |
| return; | |
| } | |
| if (type == 'favorite') { | |
| var url = e.find('a.overlay').filter(':first').attr('href'); | |
| if (typeof url == "undefined" || url === null) return; | |
| e.append('<a class="myFuckingLink">(Link loading...)</a>'); | |
| e.find('div.interaction-bar').css('bottom', '1em'); | |
| $.get(url, function(data) { | |
| var photo = data.match(/"displayUrl":"([^"]+)","width":(\d+),"height":(\d+)[^}]+}}/i); | |
| var link = "http:" + photo[1].replace(/\\/g, "").replace(/(_[a-z])\.([a-z]{3,4})/i, '$1' + postfix + '$2'); | |
| var text = prefix + photo[2] + " x " + photo[3]; | |
| var b = e.find('.myFuckingLink'); | |
| b.attr('href', link); | |
| b.attr('title', text); | |
| b.html(text); | |
| }); | |
| } | |
| } | |
| function action_page_need_hover() { | |
| var target = $('body')[0]; | |
| var config = { | |
| childList: true, | |
| subtree: true, | |
| }; | |
| var strCss = ".myFuckingLink{position:absolute;left:3px;bottom:0px;z-index:999;display:inline-block;color:white!important;font-size:96%}"; | |
| $('head').append('<style>' + strCss + '</style>'); | |
| $('.photo-list-photo-view').mouseenter(flickr_mouseenter); | |
| var observer = new MutationObserver(function(mutations, ob) { | |
| $('.photo-list-photo-view').mouseenter(flickr_mouseenter); | |
| if (value_alwaysShow) { | |
| $('.interaction-view').css('opacity', '1'); | |
| } | |
| }); | |
| observer.observe(target, config); | |
| } | |
| function pageType() { | |
| t = "none"; | |
| var htmlClass = $('html').attr('class'); | |
| log("HTML class: " + htmlClass); | |
| if (htmlClass.match(/html-photo-page-scrappy-view/i) !== null) t = 'singlephoto'; | |
| else if (htmlClass.match(/html-(photostream|favorites|album|search-photos-unified|group-home)-page-view/i) !== null) t = 'favorite'; | |
| log("Page type: " + t); | |
| return t; | |
| } | |
| getSetting(); | |
| var type = pageType(); | |
| $('ul.nav-menu:first').append('<li><div style="color:pink;padding-top:7px"><input id="optionbox_openLink" type="checkbox"' + isChecked_openLink + 'style="margin:2px"/>Open image link in browser<br><input id="optionbox_alwaysShow" type="checkbox"' + isChecked_alwaysShow + 'style="margin:2px"/>Always show image information in Photostream</div></li>'); | |
| $('#optionbox_openLink').change(function() { | |
| GM_setValue(key_openLink, $(this).prop('checked')); | |
| getSetting(); | |
| $('.myFuckingLink').remove(); | |
| $('.photo-list-photo-view').mouseenter(flickr_mouseenter); | |
| }); | |
| $('#optionbox_alwaysShow').change(function() { | |
| GM_setValue(key_alwaysShow, $(this).prop('checked')); | |
| getSetting(); | |
| if (value_alwaysShow) { | |
| $('.interaction-view').css('opacity', '1'); | |
| } | |
| }); | |
| if (type == 'singlephoto') action_singlephoto("none"); | |
| else if (type == 'favorite') action_page_need_hover(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment