500px Download Images w/ various UX enhancements

Easy download of images from 500px w/ little UX enhancements

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @name        500px Download Images w/ various UX enhancements
// @namespace   http://twitter.com/depositado
// @description Easy download of images from 500px w/ little UX enhancements
// @include     http://500px.com/*
// @version     1.75
// @grant       none
// ==/UserScript==

// URL:		https://userscripts.org/scripts/review/174189

/* // @require     http://update.sizzlemctwizzle.com/174189.js */

if (typeof console == "undefined") {
    window.console = {
        log: function () {}
    };
}


// script details/updates
var us_174189_Name      = GM_info.script.name;
var us_174189_Version   = GM_info.script.version;

// first run?
function firstRun(){
    if( $.cookie('us_174189_name') == null){    
        //set cookies
        $.cookie('us_174189_name',    us_174189_Name, {expires: 365, path: '/'});
        $.cookie('us_174189_version', us_174189_Version, {expires: 365, path: '/'});
        console.info('Hi, thanks for using userscript: '+us_174189_Name+' v'+us_174189_Version);
    }
}
function checkIfUpdated(){
    if( $.cookie('us_174189_version') != us_174189_Version){    
        //re-set cookies
        $.cookie('us_174189_name',    us_174189_Name, {expires: 365, path: '/'});
        $.cookie('us_174189_version', us_174189_Version, {expires: 365, path: '/'});
        console.info('Userscript updated to version: '+us_174189_Version);
    }
}


// jquery.waitUntilExists
// Author/source: https://gist.github.com/PizzaBrandon/5709010
(function(e,f){var b={},g=function(a){b[a]&&(f.clearInterval(b[a]),b[a]=null)};e.fn.waitUntilExists=function(a,h,j){var c=this.selector,d=e(c),k=d.not(function(){return e(this).data("waitUntilExists.found")});"remove"===a?g(c):(k.each(a).data("waitUntilExists.found",!0),h&&d.length?g(c):j||(b[c]=f.setInterval(function(){d.waitUntilExists(a,h,!0)},500)));return d}})(jQuery,window);

// jquery.domchanged.min.js
(function(e){if(typeof exports=="object"){e(require("jquery"))}else if(typeof define=="function"&&define.amd){define(["jquery"],e)}else{e(jQuery)}})(function(e){"use strict";function t(t,n){return e(t).trigger("DOMChanged",n)}function n(t,n){var r=e.fn[t];if(r){e.fn[t]=function(){var e=Array.prototype.slice.apply(arguments);var t=r.apply(this,e);n.apply(this,e);return t}}}n("prepend",function(){return t(this,"prepend")});n("append",function(){return t(this,"append")});n("before",function(){return t(e(this).parent(),"before")});n("after",function(){return t(e(this).parent(),"after")});n("html",function(e){if(typeof e==="string"){return t(this,"html")}})})


function download500px(){    
    
    console.info('download500px()');
    
	// define vars
	var
		THEphoto,
		downloadLINK,
		pathArray,
		photoID,
		photoContainerDiv,
		availHeight,
		downloadCursor,
		bkgPrefix;
	
	// set vars
	THEphoto = $('.photo.segment img');
	downloadLINK = THEphoto.attr('src'); //downloadLINK = $('img.the_photo').attr('src');
	pathArray = downloadLINK.split('/'); //photoID = PxInitialData['photo']['id'];
	photoID = pathArray[3];
	photoContainerDiv = $('div.photo.segment');
	downloadCursor = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAQAAAAngNWGAAAB0UlEQVR4AXWRv0sbcRjGP/fDNOc1Ki2CabcDIVgLIsElRM8hm4MgDgW3oMXBg6T/gI6Cf0DAVeji4j9hiaJLKXapaTEZugQLQnt6P/oMCdWUPA/vy73f58MLL2fRl4FFBgeXnOoZNgaPZD75HhH4XGBO3dGk9H9ZjDKJd30Up3F6fYSnaRRrcKOB9pEl9/MlknpOk3ZiPAYN2cJW5D6MIKm7mmwslA1uzOiEbGQjqWc1ZZ5uFIQunnfb+93DhSLSQrF72N6fd4VaCBbYx7AvWTsOHcdFctzQWTu+BLuPmtjoCBzZal6VD27aSDft8kHzSogj6yhROEzwCq9UPKnvbuB7tdb31g+vhr+7cVIvFfGUTohinNcUGtW7Tutsbp0l/KntqW18lubWW2d3nUaVgohxmGT6ohElp+fLeyubVFikLC9SWdlc3js9j5KLBtOiyDMbJXEqy1uBUF+ubAX9tyhhlryJbv51S0/V1WDmgxzMVFfpSanuNsjz4svHwluG6uvnN+/omkSEzU+kDFOqNBTFGHlKvGeHGnVVIMu9aUdJScSYzT0G3+j0/oBEChhIJMTK//Cbe5sINIZYsiH/UyrH8oOYSBGmrK5iAFSRoCL5C67zl+gG1lV2AAAAAElFTkSuQmCC';
        
    // set data attr on image
    THEphoto.data('img-height', THEphoto.height());
    THEphoto.data('img-width', THEphoto.width());
    
    
    // add black background to image container
    photoContainerDiv.css({
        'background-color': 'rgb(34,34,34)',
        'min-height': '400px',
        'margin-bottom': '20px',
        'padding': '30px 0 30px 0',
        //'background-image': 'url('+bkg_url+')',
	    //'background-size': '100% 100%'
    });

    // add height to data-attr
    photoContainerDiv.data('height', photoContainerDiv.height());
    console.log(photoContainerDiv.height());
    

	// remove annoying 'disabled right-click' from image + style-attributes
	THEphoto.removeAttr('data-protect');
	
	// calc available height
	availHeight = $(window).height() - 150;
	$('.photo.segment img, img.the_photo').css({
	   //'max-height': ''+availHeight+'px',
	   //'width': 'auto',
	   'cursor': 'alias',
	   'cursor': '-webkit-zoom-in',
	   'cursor': '-moz-zoom-in',
	   'cursor': 'url("'+downloadCursor+'"), auto',
	   '-webkit-box-shadow':   '0px 0px 10px rgba(50, 50, 50, 1)',
	   '-moz-box-shadow':      '0px 0px 10px rgba(50, 50, 50, 1)',
	   'box-shadow':           '0px 0px 10px rgba(50, 50, 50, 1)'	   
	   
	}).click(function(e){
		window.open(downloadLINK);
		return false;
	});
	
	// if 'data-protect' is not properly removed and/or still being captured by 500px
	THEphoto.oncontextmenu = function() {
		return false;
	};
	
	THEphoto.mousedown(function(e){ 
		if( e.button == 2 ) {
			window.open(downloadLINK);
			return false;
		}
		return true;
	});
	
}


$(function() {
    
    console.info('USERSCRIPT LOADED: 500px Download Images w/ various UX enhancements');
    
    firstRun();
    checkIfUpdated();
    
    $('head').append("<link href='//dl.dropboxusercontent.com/u/3899/userscripts/500px-download-img-w-ux-enhancements/174189.css' rel='stylesheet' type='text/css'>");
    
    /* photo download */
    if ($('body#photos_show').length > 0) {
        
        console.debug('body#photos_show');
        
        // onload
    	download500px();
    	
    	// hotkey support
    	$(document).keydown(function(e){
    		if (e.keyCode == 37 || e.keyCode == 39) {  // keyCode: 37 (left arrow), keyCode: 39 (right arrow)
    			console.debug('keydown: '+e.keyCode);
    			// wait a little so next image is loaded, otherwise old 'data' is used
    			setTimeout(function(){ download500px(); }, 300);
    		}  		
    	});
    	
    }
    
});