Skip to content

Instantly share code, notes, and snippets.

@watzon
Created October 21, 2022 01:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save watzon/a5346edcd0bd8370a38b807ed309d914 to your computer and use it in GitHub Desktop.
Save watzon/a5346edcd0bd8370a38b807ed309d914 to your computer and use it in GitHub Desktop.
Danbooru Tag Copier
// ==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