mirror of
				https://github.com/go-gitea/gitea
				synced 2025-10-31 03:18:24 +00:00 
			
		
		
		
	Refactor copy button event handler (#29379)
				
					
				
			Use "closest" instead of "for-loop"
This commit is contained in:
		| @@ -5,18 +5,20 @@ import {clippie} from 'clippie'; | ||||
| const {copy_success, copy_error} = window.config.i18n; | ||||
|  | ||||
| // Enable clipboard copy from HTML attributes. These properties are supported: | ||||
| // - data-clipboard-text: Direct text to copy, has highest precedence | ||||
| // - data-clipboard-text: Direct text to copy | ||||
| // - data-clipboard-target: Holds a selector for a <input> or <textarea> whose content is copied | ||||
| // - data-clipboard-text-type: When set to 'url' will convert relative to absolute urls | ||||
| export function initGlobalCopyToClipboardListener() { | ||||
|   document.addEventListener('click', (e) => { | ||||
|     let target = e.target; | ||||
|     // In case <button data-clipboard-text><svg></button>, so we just search | ||||
|     // up to 3 levels for performance | ||||
|     for (let i = 0; i < 3 && target; i++) { | ||||
|       let text = target.getAttribute('data-clipboard-text'); | ||||
|   document.addEventListener('click', async (e) => { | ||||
|     const target = e.target.closest('[data-clipboard-text], [data-clipboard-target]'); | ||||
|     if (!target) return; | ||||
|  | ||||
|       if (!text && target.getAttribute('data-clipboard-target')) { | ||||
|     e.preventDefault(); | ||||
|  | ||||
|     let text; | ||||
|     if (target.hasAttribute('data-clipboard-text')) { | ||||
|       text = target.getAttribute('data-clipboard-text'); | ||||
|     } else { | ||||
|       text = document.querySelector(target.getAttribute('data-clipboard-target'))?.value; | ||||
|     } | ||||
|  | ||||
| @@ -25,17 +27,8 @@ export function initGlobalCopyToClipboardListener() { | ||||
|     } | ||||
|  | ||||
|     if (text) { | ||||
|         e.preventDefault(); | ||||
|  | ||||
|         (async() => { | ||||
|       const success = await clippie(text); | ||||
|       showTemporaryTooltip(target, success ? copy_success : copy_error); | ||||
|         })(); | ||||
|  | ||||
|         break; | ||||
|       } | ||||
|  | ||||
|       target = target.parentElement; | ||||
|     } | ||||
|   }); | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user