// ==UserScript== // @name Open Multiple Question Links // @namespace http://roub.net/ // @version 0.7 // @description open multiple selected unique question links, skipping non-questions // @author Paul Roub // @include *://chat.stackoverflow.com/rooms/41570/so-close-vote-reviewers // @include *://chat.stackoverflow.com/search* // @grant GM_openInTab // @run-at context-menu // ==/UserScript== // tested on: // Chrome 45.0.2454.101 w/TamperMonkey 3.11 // Firefox 41.0 w/GreaseMonkey 3.4.1 var isGm = false; if (GM_info) { scriptEngine = GM_info.scriptHandler || "greasemonkey"; isGm = scriptEngine.toLowerCase() == "greasemonkey"; } if (isGm) { if ("contextMenu" in document.documentElement && "HTMLMenuItemElement" in window) { var body = document.body; body.addEventListener("contextmenu", initMenu, false); var menu = body.appendChild(document.createElement("menu")); menu.outerHTML = '<menu id="userscript-open-questions" type="context">' + '<menuitem label="Open Selected Questions"></menuitem>' + '</menu>'; document.querySelector("#userscript-open-questions menuitem") .addEventListener("click", openLinks, false); } } else { openLinks(); } function openLinks() { var qs = []; var sel = window.getSelection(); if (sel && sel.rangeCount == 1) { var r = sel.getRangeAt(0); var d = document.createElement('div'); d.appendChild(r.cloneContents()); var as = d.getElementsByTagName('a'); var unique = []; qs = Array.prototype.slice.call(as).filter( function(el) { var postRe = /stackoverflow\.com\/[aq](uestions)?\/\d/; if (el.href.match(postRe)) { var id = el.href.match(/\d+/)[0]; if (unique.indexOf(id) == -1) { unique.push(id); return true; } } return false; } ); } if (qs.length) { qs.forEach( function(el) { GM_openInTab(el.href, true); } ); } else alert("No questions were selected."); } // GM specific function initMenu(aEvent) { // Executed when user right click on web page body // aEvent.target is the element you right click on var node = aEvent.target; var item = document.querySelector("#userscript-open-questions menuitem"); var sel = window.getSelection(); if (sel && sel.rangeCount == 1) { body.setAttribute("contextmenu", "userscript-open-questions"); } else { body.removeAttribute("contextmenu"); } }