// ==UserScript== // @name Links to Next and Previous Posts // @namespace https://greasyfork.org/en/users/163551-vannius // @version 1.51 // @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/* // @grant none // @downloadURL none // ==/UserScript== (function () { if (window.location.host === "www.alternatehistory.com") { // Get hash links from divTags and store in hashLinks const divTags = document.getElementsByClassName('messageBarNumber'); const hashLinks = Array.from(divTags).map((element) => element.children[0].href); // Very first post of thread's divTag.children[0].href don't have #. if (window.location.href.split('/')[6] === '') hashLinks[0] += '#' + divTags[0].parentNode.parentNode.id; for (let i = 0; i < divTags.length; i++) { // Add a link to next post if (i !== divTags.length - 1) { const nextPost = document.createElement('a'); nextPost.title = "Next post"; nextPost.href = hashLinks[i + 1]; nextPost.appendChild(document.createTextNode('▼')); divTags[i].appendChild(nextPost); } // Add a link to prev post if (i !== 0) { const prevPost = document.createElement('a'); prevPost.title = "Prev post"; prevPost.href = hashLinks[i - 1]; prevPost.appendChild(document.createTextNode('▲')); const fragment = document.createDocumentFragment(); fragment.appendChild(prevPost); fragment.appendChild(document.createTextNode('\n')); divTags[i].insertBefore(fragment, divTags[i].children[0]); } // Add a link to current post if (i === 0 || i === divTags.length - 1) { const currentPost = document.createElement('a'); currentPost.title = "Current post"; currentPost.href = hashLinks[i]; currentPost.appendChild(document.createTextNode('◈')); if (i === 0) { const fragment = document.createDocumentFragment(); fragment.appendChild(currentPost); fragment.appendChild(document.createTextNode('\n')); divTags[i].insertBefore(fragment, divTags[i].children[0]); } else if (i === divTags.length - 1) { divTags[i].appendChild(currentPost); } } } } else if (window.location.host === "forums.spacebattles.com") { // 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 hashLinks = 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 = document.createElement('a'); nextPost.title = "Next post"; nextPost.href = hashLinks[i + 1]; nextPost.appendChild(document.createTextNode('▼')); const liTag = document.createElement('li'); liTag.appendChild(nextPost); messageTags[i].parentElement.appendChild(liTag); } // Add a link to prev post if (i !== 0) { const prevPost = document.createElement('a'); prevPost.title = "Prev post"; prevPost.href = hashLinks[i - 1]; prevPost.appendChild(document.createTextNode('▲')); const liTag = document.createElement('li'); liTag.appendChild(prevPost); messageTags[i].parentElement.insertBefore(liTag, messageTags[i]); } // Add a link to current post if (i === 0 || i === messageTags.length - 1) { const currentPost = document.createElement('a'); currentPost.title = "Current post"; currentPost.href = hashLinks[i]; currentPost.appendChild(document.createTextNode('◈')); const liTag = document.createElement('li'); liTag.appendChild(currentPost); if (i === 0) { messageTags[i].parentElement.insertBefore(liTag, messageTags[i]); } else if (i === messageTags.length - 1) { messageTags[i].parentElement.appendChild(liTag); } } } } })();