test / Tag Extractor with Auto Scroll-1.1.user.js
Oosayam's picture
Upload Tag Extractor with Auto Scroll-1.1.user.js
2a1933c verified
// ==UserScript==
// @name Tag Extractor with Auto Scroll
// @namespace http://tampermonkey.net/
// @version 1.1
// @description Extract tags from Gelbooru, Danbooru, and Rule34, copy to clipboard, and add auto-scroll functionality
// @author Your Name
// @match https://gelbooru.com/*
// @match https://danbooru.donmai.us/*
// @match https://rule34.xxx/*
// @grant GM_setClipboard
// ==/UserScript==
(function() {
'use strict';
// 創建按鈕的函數
function createButton(id, text, color, topOffset) {
let button = document.createElement('button');
button.id = id;
button.innerText = text;
button.style.position = 'fixed';
button.style.top = `${topOffset}px`;
button.style.right = '10px';
button.style.zIndex = 1000;
button.style.padding = '10px';
button.style.backgroundColor = color;
button.style.color = '#fff';
button.style.border = 'none';
button.style.borderRadius = '5px';
button.style.cursor = 'pointer';
return button;
}
// 自動滾動的邏輯
let isScrolling = false;
let scrollInterval;
function startAutoScroll() {
if (!isScrolling) {
isScrolling = true;
scrollInterval = setInterval(() => {
window.scrollBy(0, 150); // 每次滾動 50 像素
}, 50); // 每 100 毫秒滾動一次
}
}
function stopAutoScroll() {
if (isScrolling) {
isScrolling = false;
clearInterval(scrollInterval);
}
}
// 創建自動滾動按鈕
const autoScrollButton = createButton('auto-scroll-button', 'Auto Scroll', '#4CAF50', 60);
document.body.appendChild(autoScrollButton);
// 自動滾動按鈕的事件監聽器
autoScrollButton.addEventListener('click', () => {
if (isScrolling) {
stopAutoScroll();
autoScrollButton.innerText = 'Auto Scroll';
autoScrollButton.style.backgroundColor = '#4CAF50';
} else {
startAutoScroll();
autoScrollButton.innerText = 'Stop Scroll';
autoScrollButton.style.backgroundColor = '#f44336';
}
});
// 原有的標籤提取邏輯
if (window.location.href.includes('gelbooru.com')) {
let button = createButton('gelbooru-button', 'Extract Tags', '#ff5722', 10);
document.body.appendChild(button);
button.addEventListener('click', () => {
let images = document.querySelectorAll('img[title]');
let tags = Array.from(images).map(img => img.getAttribute('title'));
let tagsString = tags.join('\n').replace(/ /g, ', ');
GM_setClipboard(tagsString);
alert('Tags have been copied to the clipboard!');
});
} else if (window.location.href.includes('danbooru.donmai.us')) {
let button = createButton('danbooru-button', 'Copy Tag Data', '#007bff', 10);
document.body.appendChild(button);
button.addEventListener('click', function() {
var articles = document.querySelectorAll('article.post-preview');
var data = [];
articles.forEach(function(article) {
var tags = article.getAttribute('data-tags');
var rating = article.getAttribute('data-rating');
switch (rating) {
case 'e':
rating = 'explicit';
break;
case 'q':
rating = 'questionable';
break;
case 'g':
rating = 'general';
break;
case 's':
rating = 'safe';
break;
default:
rating = 'unknown';
}
tags = tags.replace(/ /g, ', ');
data.push(`${tags}; ${rating}`);
});
var dataStr = data.join('\n');
GM_setClipboard(dataStr);
alert('Tag data copied to clipboard!');
});
} else if (window.location.href.includes('rule34.xxx')) {
let button = createButton('rule34-button', 'Copy Tags', '#ff4500', 10);
document.body.appendChild(button);
button.addEventListener('click', function() {
var thumbs = document.querySelectorAll('span.thumb');
var data = [];
thumbs.forEach(function(thumb) {
var img = thumb.querySelector('img');
if (img) {
var tags = img.getAttribute('title');
if (tags) {
tags = tags.trim().replace(/ {2,}/g, ' ').replace(/ /g, ', ');
data.push(tags);
}
}
});
var dataStr = data.join('\n');
GM_setClipboard(dataStr);
alert('Tag data copied to clipboard!');
});
}
})();