Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
RedditP Collect feature userscript
// ==UserScript==
// @name RedditP Collect
// @namespace http://tampermonkey.net/
// @version 0.4
// @description Collect cool stuff while staying in the flow. Download them at the end.
// @author Leeroy
// @match http://redditp.com/*
// @grant GM_addStyle
// @grant GM_download
// @noframes
// @nocompat Chrome
// ==/UserScript==
/* global rp */
/*
WARNING GM_download must be set to Browser API in Tampermonkey settings
*/
rp.savedURLs = rp.savedURLs || [];
if(saveEvent) document.removeEventListener("keyup", saveEvent);
GM_addStyle('#timeToNextSlide{width:2.4rem}.sort-link{display:table}#subredditUrl.with-sort{padding-top:0;padding-bottom:0;max-width:145px;white-space:nowrap;}.numberButton.saved,.numberButton.saved.active{background:#00C853;color:#eee!important}.numberButton.saved.downloaded{background:#006429}@keyframes burst{0%{opacity:.6}50%{-webkit-transform:scale(1.8);-ms-transform:scale(1.8);transform:scale(1.8);opacity:0}100%{opacity:0}}body.saved #titleDiv:before{content:"\\2705 ";color:#00C853;position:fixed;width:99%;text-align:right;right:1em;top:1em;font-weight:700;font-size:large}body.confirm:after{-webkit-animation:burst 2s forwards linear;animation:burst 2s forwards linear;content:"\\2705";color:#00C853;background-color:#fff;border-radius:50%;position:fixed;font-size:2rem;line-height:4rem;text-align:center;z-index:999;height:2em;width:2em;margin:auto;top:0;left:0;bottom:0;right:0}');
function getFilename(path) {
return path.split('\\').pop().split('/').pop();
}
var downloadSaved = function() {
// Download collection one by one (must be allowed by user)
rp.savedURLs.forEach(function(url) {
GM_download(url, getFilename(url));
});
[].map.call(document.querySelectorAll('.numberButton.saved'), function(el) {
el.classList.add('downloaded');
});
rp.savedURLs = [];
};
rp.saveActive = function() {
var activeNumberButton = document.querySelector(".numberButton.active");
var url = rp.photos[rp.session.activeIndex].type === "gfycat" ? document.querySelector("video source").src : rp.photos[rp.session.activeIndex].url;
url = url.replace(".gifv",".webm");
var index = rp.savedURLs.indexOf(url);
if (index !== -1) {
activeNumberButton.classList.remove("saved");
rp.savedURLs.splice(index, 1);
checkSaved();
} else {
activeNumberButton.classList.add("saved");
rp.savedURLs.push(url);
checkSaved();
}
};
var saveEvent = function(e) {
var S_KEY = 83,
D_KEY = 68;
if(e.keyCode === S_KEY) {
rp.saveActive();
document.body.classList.toggle("confirm", (document.querySelector(".active.saved")));
}
if(e.keyCode === D_KEY) {
downloadSaved();
}
};
document.addEventListener("keyup", saveEvent, false);
var checkSaved = function() {
document.body.classList.toggle("saved", document.querySelector(".active.saved"));
document.body.classList.remove("confirm");
};
var enableLoop = function() {
// Always enable loop on videos
if(rp.photos[rp.session.activeIndex].type !== "image") document.querySelector("video").loop = true;
};
var observer = (function() {
// select the target node
var target = document.querySelector('#pictureSlider');
// create an observer instance
var observer = new MutationObserver(function(mutations) {
checkSaved();
// On the first mutation the video element isn't ready yet
if(mutations[0].removedNodes.length) enableLoop();
});
// pass in the target node, as well as the observer options
observer.observe(target, {childList: true});
return observer;
})();
@akaleeroy

This comment has been minimized.

Copy link
Owner Author

akaleeroy commented Mar 25, 2018

⚠️ Broken since Chrome 65:

Block cross-origin <a download>

To avoid what is essentially a user-mediated cross-origin information leakage, Blink will now ignore the presence of the download attribute on anchor elements with cross origin attributes. Note that this applies to HTMLAnchorElement.download as well as to the element itself.

Intent to Remove | Chromestatus Tracker | Chromium Bug

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.