Forked from WillSullivan/TaggedQuestionList.userscript
Last active
February 27, 2018 21:06
-
-
Save mogsdad/dc32bc9543e0576bf703 to your computer and use it in GitHub Desktop.
This userscript will add a list (initially hidden in an expandable div) containing links to every question listed on a tag page (i.e., questions/tagged/something). When a link in this list is clicked, it goes away. This allows you to easily open up many questions with this tag at the same time. Simply ctrl-click on the first link, then keep clic…
This file contains 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 Tag list | |
// @namespace http://statestreetgang.net/ | |
// @version 1.2.3 | |
// @description Adds an expandable list containing a link to every question on the current tag page. Useful when you want to open many questions with the same tag at the same time. | |
// @include /^https?://(meta\.)?(stackoverflow|stackexchange|serverfault|superuser|askubuntu|stackapps)\.com/(questions/(new|popular|need-answers)|search).*/ | |
// @require http://code.jquery.com/jquery-latest.js | |
// ==/UserScript== | |
function exec(fn) { | |
var script = document.createElement('script'); | |
script.setAttribute("type", "application/javascript"); | |
script.textContent = '(' + fn + ')();'; | |
document.body.appendChild(script); // run the script | |
document.body.removeChild(script); // clean up | |
} | |
window.addEventListener("load", function() { | |
// script injection | |
exec(function() { | |
var App = this; | |
userscriptCSS(); | |
// Some question lists have a question-mini-list div, searches don't. To simplify, we'll insert our own if needed. | |
App.linkytarget = $('.question').length ? '.welovestackoverflow' : '.question'; | |
if (!($('#question-mini-list').length)) $('<div id=question-mini-list></div>').insertAfter(App.linkytarget); | |
// re-sort list; move all the already handled cruff to the top | |
$.each(["closed", "on hold", "migrated", "duplicate"], function(index) { | |
App.items = $('.question-summary .summary:contains(' + this + ')'); | |
App.items.closest('.question-summary').detach().appendTo('#question-mini-list'); | |
}); | |
// get all the hrefs | |
App.root = $('#question-mini-list'); | |
App.hrefs = App.root.find('.question-hyperlink'); | |
if (hrefs.length === 0) | |
return; | |
App.listroot = $('<div class="linkylist"/>'); | |
App.listhead = $('<p class="linkyhead">Click here to <span id="linkyaction">open</span> a list of all links on this page</p>'); | |
App.listbody = $('<div class="linkybody"/>'); | |
$('.question').before(App.listroot); | |
App.listroot.prepend(listbody); | |
App.listroot.prepend(listhead); | |
App.listbody.hide(); | |
App.listhead.click(function() { | |
App.listbody.slideToggle(600); | |
$('#linkyaction').text(function (index, text) { | |
return (text == 'open' ? 'close' : 'open'); | |
}); | |
}); | |
// note that when you click a link it gets removed from the list. | |
App.hrefs.each(function() { | |
App.parent = $('<span class="linkeyspan"/>'); | |
App.linkey = $(this).clone().attr('target', '_blank'); | |
App.linkey.click(function() { | |
$(this).closest('.linkeyspan').remove(); | |
}); | |
App.parent.prepend(App.linkey); | |
App.parent.prepend($('<br/>')); | |
App.listbody.prepend(App.parent); | |
}); | |
/** | |
* Define "CSS" for this user script | |
*/ | |
function userscriptCSS() { | |
addCss( | |
'.linkylist {margin: 0px;padding: 0px;}' + | |
'.linkyhead {text-align: right;padding: 5px 10px;cursor: pointer;position: relative;background-color:#FFCCCC;margin:1px;}' + | |
'.linkybody {padding: 5px 10px 15px;background-color:#F4F4F8;}' | |
); | |
} | |
/** | |
* Stuff string of styles into doc head. | |
*/ | |
function addCss(cssString) { | |
var head = document.getElementsByTagName('head')[0]; | |
if (!head) return; | |
var newCss = document.createElement('style'); | |
newCss.type = "text/css"; | |
newCss.innerHTML = cssString; | |
head.appendChild(newCss); | |
} | |
}); | |
}, false); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment