Greasy Fork is available in English.
Add links to first and last chapter to AO3.
当前为
// ==UserScript==
// @name AO3: Links to First and Last Chapter
// @namespace http://greasyfork.icu/en/users/163551-vannius
// @version 1.0
// @description Add links to first and last chapter to AO3.
// @author Vannius
// @match http*://archiveofourown.org/works/*
// @exclude http*://archiveofourown.org/works/*view_full_work=true
// @grant none
// ==/UserScript==
(function() {
// selectedTag exists only when there are several chapters.
const selectedTag = document.getElementById('selected_id');
if (!selectedTag) return;
// Make hrefs to first and last chapter.
const firstHref = window.location.href.split('/').slice(0, 6).join('/') + '/' + selectedTag.children[0].value;
const lastHref = window.location.href.split('/').slice(0, 6).join('/') + '/' + selectedTag.children[selectedTag.children.length - 1].value;
// Search location to add new link tags.
const chapterIndexTag = document.getElementById('chapter_index').parentElement;
const prevTags = chapterIndexTag.parentElement.getElementsByClassName('previous');
const nextTags = chapterIndexTag.parentElement.getElementsByClassName('next');
const navigationTags = document.getElementById('feedback').getElementsByClassName('actions');
// When '← Previous Chapter' exists
if (prevTags.length){
// When '← Previous Chapter' != first chapter
if(prevTags[0].firstChild.href != firstHref){
// Make a link tag to frist chapter
const firstLiTag = document.createElement('li');
firstLiTag.className = 'chapter first';
const firstATag = document.createElement('a');
firstATag.href = firstHref;
firstATag.appendChild(document.createTextNode('«'));
firstLiTag.appendChild(firstATag);
// Add the link tag to page's top
prevTags[0].parentElement.insertBefore(firstLiTag.cloneNode(true), prevTags[0]);
// Add the link tag to page's end
for (let i=0; i<navigationTags[0].children.length; i++){
if (navigationTags[0].children[i].firstChild.textContent.search(/Previous/) != -1){
navigationTags[0].insertBefore(firstLiTag, navigationTags[0].children[i]);
break;
}
}
}
}
// When 'Next Chapter →' exists
if (nextTags.length){
// When 'Next Chapter →' isn't last chapter
if(nextTags[0].firstChild.href != lastHref){
// Make a link tag to last chapter
const lastLiTag = document.createElement('li');
lastLiTag.className = 'chapter last';
const lastATag = document.createElement('a');
lastATag.href = lastHref;
lastATag.appendChild(document.createTextNode('»'));
lastLiTag.appendChild(lastATag);
// Add the link tag to page's top
nextTags[0].parentElement.insertBefore(lastLiTag.cloneNode(true), nextTags[0].nextElementSibling);
// Add the link tag to page's end
for (let i=0; i<navigationTags[0].children.length - 1; i++){
if (navigationTags[0].children[i].firstChild.textContent.search(/Next/) != -1){
navigationTags[0].insertBefore(lastLiTag, navigationTags[0].children[i + 1]);
break;
}
}
}
}
})();