This is a comment on Имя загружаемого файла на кириллице, posted by WikiAdmin at 04/06/2026 07:51

View source for Re: Имя загружаемого файла на кириллице

**((commit:bc55d6c9ab5003dbfbd6959828bc9ad995ffedbc Fixed token selector))** issue when starting with a unescaped number by adding a ##cb-## prefix which caused the copy to clipboard to fail.

The clipboard.js library, while once popular for enabling copy-to-clipboard functionality without Flash, is now considered outdated due to the evolution of modern web APIs and lack of active maintenance.

Guess the clipboard.js should replaced with the modern Clipboard API.
%%(hl javascript)
/**
* Native Clipboard API using data-clipboard-target attribute
* Just like the popular Clipboard.js library, but 100% vanilla JS
*/
document.addEventListener('DOMContentLoaded', () => {

	// Find ALL buttons that have the data-clipboard-target attribute
	const copyButtons = document.querySelectorAll('button[data-clipboard-target]');

	copyButtons.forEach(button => {

		button.addEventListener('click', async (event) => {
			event.preventDefault();

			// Get the target selector (e.g. "#token-pre")
			const targetSelector = button.getAttribute('data-clipboard-target');

			// Find the element to copy from
			const targetElement = document.querySelector(targetSelector);

			if (!targetElement) {
				console.error(`Target element "${targetSelector}" not found!`);
				return;
			}

			// Get the text to copy
			let textToCopy = '';

			// Smart detection: use .value for form elements, .textContent for everything else
			if (targetElement.tagName === 'TEXTAREA' || targetElement.tagName === 'INPUT') {
				textToCopy = targetElement.value.trim();
			} else {
				textToCopy = targetElement.textContent.trim();
			}

			// If there's nothing to copy, do nothing
			if (!textToCopy) {
				console.warn('Nothing to copy – text is empty');
				return;
			}

			try {
				// The modern Clipboard API
				await navigator.clipboard.writeText(textToCopy);

				// Visual feedback
				const originalText = button.innerHTML;

				button.classList.add('copied');
				button.innerHTML = `✅ Copied!`;

				// Reset button after 2 seconds
				setTimeout(() => {
				button.classList.remove('copied');
				button.innerHTML = originalText;
				}, 2000);

				console.log('✅ Copied to clipboard:', textToCopy.substring(0, 30) + '...');

			} catch (err) {
				console.error('Failed to copy using Clipboard API:', err);

				// Fallback message
				const originalText = button.innerHTML;
				button.style.background = '#ef4444';
				button.innerHTML = `❌ Failed`;

				setTimeout(() => {
					button.style.background = '';
					button.innerHTML = originalText;
				}, 2000);
			}
		});
	});

	console.log('Clipboard API ready!');
});
%%