/** * copy-code.ts * Adds a "Copy" button to every
 block in the article content.
 */

export function initCopyCode(): void {
	const blocks = document.querySelectorAll(
		'.entry-content pre, .post-card__content pre, .single-article pre'
	);

	if ( ! blocks.length ) return;

	blocks.forEach( ( pre ) => {
		// Avoid adding duplicate buttons.
		if ( pre.querySelector( '.copy-code-btn' ) ) return;

		const btn = document.createElement( 'button' );
		btn.className   = 'copy-code-btn';
		btn.textContent = '复制';
		btn.setAttribute( 'aria-label', '复制代码' );
		btn.type        = 'button';

		btn.addEventListener( 'click', async () => {
			const code = pre.querySelector( 'code' );
			const text = code?.textContent ?? pre.textContent ?? '';

			try {
				await navigator.clipboard.writeText( text );
				btn.textContent = '已复制!';
				btn.classList.add( 'is-copied' );
				setTimeout( () => {
					btn.textContent = '复制';
					btn.classList.remove( 'is-copied' );
				}, 2000 );
			} catch {
				btn.textContent = '失败';
				setTimeout( () => { btn.textContent = '复制'; }, 2000 );
			}
		} );

		pre.style.position = 'relative';
		pre.appendChild( btn );
	} );
}