// ==UserScript== // @name Links to Next and Previous Posts // @namespace https://greasyfork.org/en/users/163551-vannius // @version 1.70 // @license MIT // @description Add links to next and previous posts to each post // @author Vannius // @match https://www.alternatehistory.com/forum/threads/* // @match https://forums.spacebattles.com/threads/* // @match https://forums.sufficientvelocity.com/threads/* // @match https://forum.questionablequesting.com/threads/* // @grant none // @downloadURL none // ==/UserScript== (function () { // Make
  • tag with new link. const makeLink = (id, title, symbol) => { const newLink = document.createElement('a'); newLink.href = '#' + id; newLink.title = title; newLink.appendChild(document.createTextNode(symbol)); newLink.addEventListener('click', function(e) { e.preventDefault(); document.getElementById(id).scrollIntoView(); }, false); const liTag = document.createElement('li'); liTag.appendChild(newLink); return liTag; } if (window.location.hostname == 'forum.questionablequesting.com') { const messageTags = document.querySelectorAll('li.message'); const ids = [...messageTags].map(x => x.id); for (let i = 0; i < messageTags.length; i++) { const ulTag = document.createElement('ul'); ulTag.style.listStyle = 'none'; ulTag.style.display = 'flex'; // Add a link to current post if (i === 0) { const currentPost = makeLink(ids[i], "Current post", '◇'); ulTag.appendChild(currentPost); } // Add a link to prev post if (i !== 0) { const prevPost = makeLink(ids[i - 1], "Prev post", '▲'); ulTag.appendChild(prevPost); } // Add a link to next post if (i !== messageTags.length - 1) { const nextPost = makeLink(ids[i + 1], "Next post", '▼'); ulTag.appendChild(nextPost); } // Add a link to current post if (i === messageTags.length - 1) { const currentPost = makeLink(ids[i], "Current post", '◇'); ulTag.appendChild(currentPost); } const userBlockTag = messageTags[i].querySelector('.userText'); userBlockTag.appendChild(ulTag); } } else { // Get message ids from messageTags and make in hashLinks const messageTags = [...document.querySelectorAll('.message-attribution-opposite--list > li')] .filter(x => /^#[\d,]+$/.test(x.textContent.trim())); const ids = messageTags.map(x => x.closest('article').id); for (let i = 0; i < messageTags.length; i++) { // Add a link to next post if (i !== messageTags.length - 1) { const nextPost = makeLink(ids[i + 1], "Next post", '▼'); messageTags[i].parentElement.appendChild(nextPost); } // Add a link to prev post if (i !== 0) { const prevPost = makeLink(ids[i - 1], "Prev post", '▲'); messageTags[i].parentElement.insertBefore(prevPost, messageTags[i]); } // Add a link to current post if (i === 0 || i === messageTags.length - 1) { const currentPost = makeLink(ids[i], "Current post", '◇'); if (i === 0) { messageTags[i].parentElement.insertBefore(currentPost, messageTags[i]); } else if (i === messageTags.length - 1) { messageTags[i].parentElement.appendChild(currentPost); } } } } })();