// ==UserScript== // @name Tag list // @namespace https://stackapps.com/questions/4207/burninator-toolkit // @author Will Sullivan (Will) // @developer David Bingham (Mogsdad) // @version 1.2.10 // @grant none // @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(?:$|\/tagged|\?)|search|unanswered).*)?$/ // https://regex101.com/r/1D5jof/3 // ==/UserScript== var runTagList = tagList(); var wannaReSort = false; // Set to true to sort closed items to top $(document).ajaxComplete(tagList); function tagList() { // If list already present, quit. if ($('.linkylist').length) return; var App = {}; userscriptCSS(); // Locate the element containing list of posts. App.linkytarget = $('.question-summary').parent(); if (wannaReSort) { // 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().insertBefore($('.question-summary').first()); }); } // Bail out if we don't have 5+ posts. (reviews have 1 or 2, but 5 is a nice number) if( $(App.linkytarget).children().length <= 5 ) return; // get all the hrefs App.root = App.linkytarget; App.hrefs = App.root.find('.question-hyperlink,.result-link'); // .result-link on searches, .question-hyperlink everywhere else if (App.hrefs.length === 0) { console.log("No post hyperlinks found"); return; } App.listroot = $('
'); App.listhead = $('

Click here to open a list of all links on this page

'); App.listbody = $('
'); App.linkytarget.before(App.listroot); App.listroot.prepend(App.listbody); App.listroot.prepend(App.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 = $(''); App.linkey = $(this).clone().attr('target', '_blank'); App.linkey.click(function() { $(this).closest('.linkeyspan').remove(); }); App.parent.prepend(App.linkey); App.parent.prepend($('
')); App.listbody.append(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); } }