NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name Audible series copy ids // @namespace https://github.com/Alistair1231/my-userscripts/ // @version 0.2.1 // @description adds button do ccopy id of an audiobook in the series view // @author Alistair1231 // @match https://www.audible.com/series/*-Audiobooks/* // @match https://www.audible.de/series/*-Audiobooks/* // @match https://www.audible.nl/series/*-Audiobooks/* // @match https://www.audible.co.uk/series/*-Audiobooks/* // @icon https://icons.duckduckgo.com/ip2/audible.com.ico // @license MIT // ==/UserScript== const getIds = (entries) => { // links that aren't searches for the author and aren't "not available" links (they need to have a href attribute) var links = entries.map(x => x.querySelector("a.bc-link[href]:not([href*='search?searchAuthor'])")) // get all ids var ids = links.map(x => x?.href.replace(/.*Audiobook\/([\w\d]+)\?.*/g, "$1")) return ids; } const createClickToCopy = (idToMakeClickable, idClickedNotifier, valueToCopy) => { document.getElementById(idToMakeClickable).addEventListener("click", function () { navigator.clipboard.writeText(valueToCopy); document.getElementById(idClickedNotifier).innerHTML = "Copied!"; setTimeout(function () { document.getElementById(idClickedNotifier).innerHTML = ''; }, 1000); }); } const createButton = ($text, $id, $addWhere) => { // parent div with link and copy notification p var $div = document.createElement("div"); $div.className = "bc-row bc-spacing-top-micro"; // create link var $a = document.createElement("a"); $a.className = "bc-button-text"; $a_id = "ab-id-" + $id; $a.id = $a_id; $a.setAttribute("role", "button"); $a.setAttribute("tabindex", "0"); // span that houses the link var $span = document.createElement("span"); $span.className = "bc-button bc-button-primary bc-spacing-top-mini bc-button-small"; // span with the text var $spanText = document.createElement("span"); $spanText.className = "bc-text bc-button-text-inner bc-size-action-small"; $spanText.innerHTML = $text; // create copy notification p var $p = document.createElement("p"); $p_id = "ab-id-copy-" + $id; $p.id = $p_id; $p.style = "font-size: 9px;margin-left: 10px;"; $span.appendChild($a); // add link into outer span $a.appendChild($spanText); // add span with text into link $div.appendChild($span); // add outer span to parent div // add copy notification p to parent div $div.appendChild($p); // add parent div to page document.getElementById($addWhere).appendChild($div); // make clickable console.log($a_id, $p_id, $id); createClickToCopy($a_id, $p_id, $id); return $div; } (function () { 'use strict'; var entries = Array.from(document.querySelectorAll("li.bc-list-item.productListItem")) // buyBoxArea var addWhere = document.querySelectorAll("div[data-widget='productList'] li.bc-list-item .adblBuyBoxArea") // log all ids var ids = getIds(entries); ids.forEach(x => console.log(x)); document.querySelectorAll("div[data-widget='productList'] li.bc-list-item .adblBuyBoxArea").forEach(x => { // console.log(`"Copy ID", ${$ids.shift()}, ${x.id}`); var id= ids.shift(); if(id){ x.appendChild(createButton("Copy ID", id, x.id)); } }) })();