mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 10:56:10 +01:00 
			
		
		
		
	Correctly query the primary button in a form (#32438)
The "primary button" is used at many places, but sometimes they might conflict (due to button switch, hidden panel, dropdown menu, etc). Sometimes we could add a special CSS class for the buttons, but sometimes not (see the comment of QuickSubmit) This PR introduces `querySingleVisibleElem` to help to get the correct primary button (the only visible one), and prevent from querying the wrong buttons. Fix #32437 --------- Co-authored-by: silverwind <me@silverwind.io>
This commit is contained in:
		| @@ -269,8 +269,8 @@ export function initSubmitEventPolyfill() { | ||||
|  */ | ||||
| export function isElemVisible(element: HTMLElement): boolean { | ||||
|   if (!element) return false; | ||||
|  | ||||
|   return Boolean(element.offsetWidth || element.offsetHeight || element.getClientRects().length); | ||||
|   // checking element.style.display is not necessary for browsers, but it is required by some tests with happy-dom because happy-dom doesn't really do layout | ||||
|   return Boolean((element.offsetWidth || element.offsetHeight || element.getClientRects().length) && element.style.display !== 'none'); | ||||
| } | ||||
|  | ||||
| // replace selected text in a textarea while preserving editor history, e.g. CTRL-Z works after this | ||||
| @@ -330,3 +330,10 @@ export function animateOnce(el: Element, animationClassName: string): Promise<vo | ||||
|     el.classList.add(animationClassName); | ||||
|   }); | ||||
| } | ||||
|  | ||||
| export function querySingleVisibleElem<T extends HTMLElement>(parent: Element, selector: string): T | null { | ||||
|   const elems = parent.querySelectorAll<HTMLElement>(selector); | ||||
|   const candidates = Array.from(elems).filter(isElemVisible); | ||||
|   if (candidates.length > 1) throw new Error(`Expected exactly one visible element matching selector "${selector}", but found ${candidates.length}`); | ||||
|   return candidates.length ? candidates[0] as T : null; | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user