// ==UserScript== // @name Super Tumblr Reblog // @namespace http://userscripts.org/users/smrots // @description Reblog like a boss // * Selects "add to queue" by default // * Press 1, 2, 3, ... through 0 to select your blogs // * Change your default blog // * Press r key to reblog from a post page // Handcrafted by http://userscripts.org/users/smrots // @include http*://*.tumblr.com/reblog/* // @include http*://*.tumblr.com/post/* // @include http*://*.tumblr.com/dashboard* // @include http*://*.tumblr.com/*activity // @version 1.8 // @run-at document-start // @grant none // @downloadURL https://update.greasyfork.icu/scripts/1688/Super%20Tumblr%20Reblog.user.js // @updateURL https://update.greasyfork.icu/scripts/1688/Super%20Tumblr%20Reblog.meta.js // ==/UserScript== /* * Modify the line below to select your default blog: */ var defaultBlogIndex = 0; var lastSeenPostOptions = null; var lastSeenMCEframe = null; var blogLink = null; var blogName = null; var sourceBlogName = null; var devMode = false; var g_pollInterval = 500; // ms var g_maxPolls = 10; var g_numPolls = 0; var g_poller = null; function getByClass (className, parent) { parent || (parent=document); var descendants=parent.getElementsByTagName('*'), i=-1, e, result=[]; while (e=descendants[++i]) { ((' '+(e['class']||e.className)+' ').indexOf(' '+className+' ') > -1) && result.push(e); } return result; } function restartPoller() { // tick until expires g_numPolls = 0; stopPoller(); g_poller = setInterval(setIntervalCheck, g_pollInterval); } function stopPoller() { if (!g_poller) return; clearInterval(g_poller); delete g_poller; g_poller = null; } function setIntervalCheck() { if (g_numPolls++ > g_maxPolls) { stopPoller(); return; } var po = document.getElementById("post_options"); if (po && po != lastSeenPostOptions) { /* * Add to queue by default */ lastSeenPostOptions = po; selectPostAction(1); /* * Add blog select indicator */ if (!document.getElementById('super-reblog-indicator')) { var blogIndicator = document.createElement('div'); blogIndicator.setAttribute("id", "super-reblog-indicator"); blogIndicator.innerHTML = 'SuperTumblrReblog posting to Default Blog'; var elements = document.getElementsByClassName("main_content"); if (elements) elements[0].appendChild(blogIndicator); } /* * Select default blog */ selectBlog(defaultBlogIndex); } var mceFrame = document.getElementById("post_two_ifr"); if (mceFrame && mceFrame != lastSeenMCEframe && devMode) { lastSeenMCEframe = mceFrame; lastSeenMCEframe.contentWindow.document.body.innerHTML = ""; } if (devMode) nukeLameNotes(); } // main loop that checks for page changes restartPoller(); function selectPostAction(actionIdx) { var po = document.getElementById("post_options"); if (!po) return; lastSeenPostOptions = po; var actionSelector = po.children[0].children[0].children[0]; if (actionSelector) actionSelector.children[actionIdx].children[0].click(); } function selectBlog(blogIdx) { var choices = document.getElementById("tumblelog_choices"); if (!choices) return; var blogButton = choices.children[0].children[1].children[0].children[blogIdx]; if (blogButton) { blogButton.children[0].click(); var indicator = document.getElementById('super-reblog-indicator'); if (indicator) { indicator.innerHTML = 'SuperTumblrReblog posting to ' + blogButton.children[0].children[1].children[0].innerHTML + ''; } if (devMode) { blogName = blogButton.children[0].getAttribute("data-option-value"); blogLink = blogButton.children[0].getAttribute("data-blog-url"); } } var header = document.getElementById("post_header"); if (header) { var source = getByClass("reblog_name", header); if (devMode && source && source[0]) sourceBlogName = source[0].innerHTML; } } function getParam(url, name) { var name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]"); var regexS = "[\\?&]" + name + "=([^&#]*)"; var regex = new RegExp(regexS); var results = regex.exec(url); if (results == null) return ""; else return results[1]; } var defaultTags = new Array(); defaultTags['girlswhoswallow'] = "cum, swallow, blowjob, cum in mouth, cum swallow, cumshot, throat, sperm, semen, jizz, cum play, cum slut, cum whore, cum eating, cum fetish, spunk, cum drinking, oral, orgasm, oral sex"; defaultTags['boundtightly'] = "tied, bondage, bdsm, master, slave, pet, pet play, bound, d/s, fetish"; defaultTags['analgirls'] = "anal, gape, ass, butt, girls, anal girls, anal sex, ass lick, asshole"; defaultTags['whitehotsexy'] = "sexy, hot, beauty, sex, gorgeous, girls, women, skin, nude"; function addSigAndTags() { if (lastSeenMCEframe && blogLink && blogName) { var sig = "

- " + blogName + ""; if (sourceBlogName) sig += " ⇋ " + sourceBlogName + ""; sig += "

"; lastSeenMCEframe.contentWindow.document.body.innerHTML += sig; if (blogName in defaultTags) { var tags = document.getElementsByName("post[tags]"); if (tags && tags[0] && tags[0].value == '') tags[0].value = defaultTags[blogName]; } } } function nukeLameNotes() { var feed = document.getElementById("ui_activity_feed"); if (feed) { var notes = getByClass("ui_note", feed); for(i in notes) { var note = notes[i]; var html = note.innerHTML; if (html.indexOf("and added") == -1 && html.indexOf("started following") == -1) { note.style.display = "none"; note.parentNode.removeChild(note); delete note; note = null; } } } } window.onscroll = function (e) { restartPoller(); } document.onclick = function(e) { restartPoller(); } document.onkeyup=function(e) { restartPoller(); var unicode = e.keyCode? e.keyCode : e.charCode; if (unicode == 82) // r { /* * Bind r key to reblog from post page */ var ctrl = document.getElementById('tumblr_controls'); if (ctrl) { var url = ctrl.getAttribute('src'); var pid = getParam(url, 'pid'); var rk = getParam(url, 'rk'); var redirectUrl = getParam(url, 'url') + 'post%2F' + pid; window.location.href = "http://www.tumblr.com/reblog/" + pid + "/" + rk + '?redirect_to=' + redirectUrl; } } if (unicode >= 48 && unicode <= 57) // {1,2,3,4,5,6,7,8,9,0} { var blogIdx = (unicode - 48); selectBlog(blogIdx); } if (unicode == 68 && devMode) // d { var parts = document.URL.split("/"); if (parts[3] == 'dashboard') { var pageNum = parts[4]; if (!pageNum) pageNum = 0; var incr = Math.floor((Math.random()*100)+1); var targetPageNum = parseInt(pageNum) + incr; window.location.href = "http://tumblr.com/dashboard/" + targetPageNum; } //document.getElementById("next_page_link").click(); } if (unicode == 65 && devMode) // a { document.getElementById("previous_page_link").click(); } if (unicode == 113) // F2 { addSigAndTags(); document.getElementById("create_post").children[0].click(); } if (unicode == 115) // F4 { window.location.href = 'http://' + document.location.hostname + '/archive'; } if (unicode == 192) // ` { selectPostAction(0); addSigAndTags(); document.getElementById("create_post").children[0].click(); } if (unicode == 220) // \ { } //alert (unicode); };