Created
October 21, 2022 01:09
-
-
Save watzon/a5346edcd0bd8370a38b807ed309d914 to your computer and use it in GitHub Desktop.
Danbooru Tag Copier
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==UserScript== | |
// @name Danbooru Tag Copier | |
// @namespace http://tampermonkey.net/ | |
// @version 0.1 | |
// @description Automatically copy all general tags from danbooru page to your clipboard | |
// @author watzon | |
// @match https://danbooru.donmai.us/posts/* | |
// @icon https://www.google.com/s2/favicons?sz=64&domain=donmai.us | |
// @grant none | |
// ==/UserScript== | |
(function() { | |
'use strict'; | |
const copyEmoji = '📋'; | |
const artistsHeader = document.querySelectorAll('h3.artist-tag-list')[0] | |
const copyrightHeader = document.querySelectorAll('h3.copyright-tag-list')[0] | |
const characterHeader = document.querySelectorAll('h3.character-tag-list')[0] | |
const generalHeader = document.querySelectorAll('h3.general-tag-list')[0] | |
const metaHeader = document.querySelectorAll('h3.meta-tag-list')[0] | |
const artistsList = document.querySelectorAll('ul.artist-tag-list > li') | |
const copyrightList = document.querySelectorAll('ul.copyright-tag-list > li') | |
const characterList = document.querySelectorAll('ul.character-tag-list > li') | |
const generalList = document.querySelectorAll('ul.general-tag-list > li') | |
const metaList = document.querySelectorAll('ul.meta-tag-list > li') | |
const copyTags = (list) => { | |
console.log(list); | |
const tags = Array.from(list).map((li) => li.getAttribute('data-tag-name')); | |
const taglist = tags.join(', '); | |
console.log(taglist); | |
if (window.clipboardData && window.clipboardData.setData) { | |
// Internet Explorer-specific code path to prevent textarea being shown while dialog is visible. | |
return window.clipboardData.setData("Text", taglist); | |
} | |
else if (document.queryCommandSupported && document.queryCommandSupported("copy")) { | |
var textarea = document.createElement("textarea"); | |
textarea.textContent = taglist; | |
textarea.style.position = "fixed"; // Prevent scrolling to bottom of page in Microsoft Edge. | |
document.body.appendChild(textarea); | |
textarea.select(); | |
try { | |
return document.execCommand("copy"); // Security exception may be thrown by some browsers. | |
} | |
catch (ex) { | |
console.warn("Copy to clipboard failed.", ex); | |
return prompt("Copy to clipboard: Ctrl+C, Enter", taglist); | |
} | |
finally { | |
document.body.removeChild(textarea); | |
} | |
} | |
} | |
const lists = [ | |
[artistsHeader, artistsList], | |
[copyrightHeader, copyrightList], | |
[characterHeader, characterList], | |
[generalHeader, generalList], | |
[metaHeader, metaList], | |
]; | |
for (const [header, list] of lists) { | |
const button = document.createElement('button'); | |
button.onclick = () => copyTags(list); | |
button.setHTML(copyEmoji); | |
button.setAttribute('type', 'button'); | |
button.setAttribute('title', 'Copy tags to clipboard'); | |
button.style.backgroundColor = 'transparent'; | |
button.style.border = 'none'; | |
button.style.padding = '0 4px'; | |
header.appendChild(button); | |
} | |
})(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment