您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Changes uploaded file names to random numbers on Wykop (supports both click upload and drag-drop, main editor and replies)
// ==UserScript== // @name Wykop Random Filename Uploader // @namespace http://tampermonkey.net/ // @icon https://i.imgur.com/micEWu9.png // @version 1.4 // @description Changes uploaded file names to random numbers on Wykop (supports both click upload and drag-drop, main editor and replies) // @author stopbreathing // @match https://wykop.pl/* // @grant none // @license MIT // ==/UserScript== (function() { 'use strict'; // Function to generate random number string function generateRandomNumber(length = 10) { let result = ''; for(let i = 0; i < length; i++) { result += Math.floor(Math.random() * 10); } return result; } // Function to create a new file with random name function createRandomNameFile(file) { const extension = file.name.split('.').pop(); const newName = `${generateRandomNumber()}.${extension}`; const newFile = new File([file], newName, { type: file.type, lastModified: new Date().getTime() }); console.log('File renamed from', file.name, 'to', newName); return newFile; } // Function to handle file selection through input function handleFileSelection(event) { const input = event.target; if (!input.files || !input.files.length) return; const file = input.files[0]; const newFile = createRandomNameFile(file); // Create new FileList const dataTransfer = new DataTransfer(); dataTransfer.items.add(newFile); input.files = dataTransfer.files; } // Function to handle drag events function handleDragOver(event) { event.preventDefault(); event.stopPropagation(); } // Function to handle drop events function handleDrop(event) { // We need to prevent the default behavior initially event.preventDefault(); event.stopPropagation(); const files = event.dataTransfer?.files; if (!files || !files.length) return; // Create a new DataTransfer object with renamed files const newDataTransfer = new DataTransfer(); for (const file of files) { const newFile = createRandomNameFile(file); newDataTransfer.items.add(newFile); } // Create a new drop event with our renamed files const newDropEvent = new DragEvent('drop', { bubbles: true, cancelable: true, dataTransfer: newDataTransfer }); // Remove our event listeners temporarily const editorArea = event.target.closest('.editor'); if (editorArea) { editorArea.removeEventListener('drop', handleDrop, true); editorArea.removeEventListener('dragover', handleDragOver, true); // Dispatch the new event event.target.dispatchEvent(newDropEvent); // Re-add our event listeners after a short delay setTimeout(() => { editorArea.addEventListener('drop', handleDrop, true); editorArea.addEventListener('dragover', handleDragOver, true); }, 100); } } // Function to add visual indicator function addVisualIndicator(element, isDragDrop = false) { if (!element.querySelector('.random-filename-indicator')) { const indicator = document.createElement('div'); indicator.className = 'random-filename-indicator'; indicator.style.color = 'green'; indicator.style.fontSize = '12px'; if (isDragDrop) { indicator.style.position = 'absolute'; indicator.style.top = '0'; indicator.style.right = '0'; indicator.style.padding = '5px'; indicator.textContent = 'Random filename active (drag & drop enabled)'; element.style.position = 'relative'; } else { indicator.textContent = 'Random filename active'; } element.appendChild(indicator); } } // Function to observe DOM for file inputs and drag-drop zones function observeElements(mutations) { const addEventListeners = () => { // Handle file inputs const fileInputs = document.querySelectorAll('input[type="file"]'); fileInputs.forEach(input => { if (!input.dataset.randomized) { input.dataset.randomized = 'true'; input.addEventListener('change', handleFileSelection); addVisualIndicator(input.parentElement); } }); // Handle both main editor and reply editors const editorAreas = document.querySelectorAll('.editor.entry-editor, .editor.entry-comment-editor'); editorAreas.forEach(editorArea => { if (!editorArea.dataset.randomizedDrop) { editorArea.dataset.randomizedDrop = 'true'; // Add drag and drop event listeners editorArea.addEventListener('dragover', handleDragOver, true); editorArea.addEventListener('drop', handleDrop, true); // Add visual indicator addVisualIndicator(editorArea, true); } }); }; // Initial check addEventListeners(); // Monitor for changes const observer = new MutationObserver((mutations) => { addEventListeners(); }); observer.observe(document.body, { childList: true, subtree: true }); } // Start monitoring when document is ready if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', observeElements); } else { observeElements(); } // Also monitor for dynamic changes const observer = new MutationObserver(observeElements); observer.observe(document.body, { childList: true, subtree: true }); })();