Direct Prompt Link Button

Puts a "Direct Link to Prompt" button on each prompt of an AO3 Prompt Meme.

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         Direct Prompt Link Button
// @namespace    https://greasyfork.org
// @version      1.1
// @description  Puts a "Direct Link to Prompt" button on each prompt of an AO3 Prompt Meme.
// @author       merelydovely
// @license      Creative Commons
// @match        http://archiveofourown.org/*/requests*
// @match        https://archiveofourown.org/*/requests*
// @run-at       document-idle
// @grant        none
// ==/UserScript==

(function() {

const buttonPacks = document.querySelectorAll("li.blurb.group ul.actions") //grabs all the unordered lists (packs of buttons) at the bottom of the prompt blurbs as a nodelist
//console.log(buttonPacks);
function addButton(thisPack) {
    if (thisPack.querySelector("form.button_to") == null) {
        return; //checks to see if there IS a claim button and skips this prompt blurb if there isn't one
    } else {
    let thisForm = thisPack.querySelector("form.button_to") //looks at the claim form of this specific prompt blurb and puts it in a variable
    let claimLink = new URL(thisForm.action, "https://archiveofourown.org"); //gets the realtive URL from the 'action' part of the claim form in the variable above (and puts the AO3 domain at the front for good measure)
    console.log(claimLink);
    let promptID = claimLink.searchParams.get("prompt_id"); //gets the prompt ID from the URL in the claim form 'action'
    //console.log(promptID);
    let promptLink = "prompts/"+promptID; //concatenates the prompt ID to the correct relative address for prompt pages
    let promptLinkCode = '<li><a href="'+promptLink+'">Link to prompt</a></li>' //create the HTML for a new button that links to the prompt page
    //console.log(promptLinkCode);
    thisPack.insertAdjacentHTML("beforeend", promptLinkCode); //put the HTML for the new button in at the end of this button pack on this prompt, as the final <li> inside the <ul>
    }
};
buttonPacks.forEach(addButton); //loop over every button pack in the buttonPacks nodelist and add a Link to Prompt button into each one

})()