mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-11-03 21:16:26 +01:00 
			
		
		
		
	Avoid showing unnecessary JS errors when there are elements with different origin on the page (#29081)
Try to fix #29080
This commit is contained in:
		
							parent
							
								
									b6bf8041d8
								
							
						
					
					
						commit
						f290c24d28
					
				@ -1,5 +1,6 @@
 | 
			
		||||
// for performance considerations, it only uses performant syntax
 | 
			
		||||
import {isDocumentFragmentOrElementNode} from '../utils/dom.js';
 | 
			
		||||
 | 
			
		||||
// for performance considerations, it only uses performant syntax
 | 
			
		||||
function attachDirAuto(el) {
 | 
			
		||||
  if (el.type !== 'hidden' &&
 | 
			
		||||
      el.type !== 'checkbox' &&
 | 
			
		||||
@ -18,7 +19,7 @@ export function initDirAuto() {
 | 
			
		||||
      const len = mutation.addedNodes.length;
 | 
			
		||||
      for (let i = 0; i < len; i++) {
 | 
			
		||||
        const addedNode = mutation.addedNodes[i];
 | 
			
		||||
        if (addedNode.nodeType !== Node.ELEMENT_NODE && addedNode.nodeType !== Node.DOCUMENT_FRAGMENT_NODE) continue;
 | 
			
		||||
        if (!isDocumentFragmentOrElementNode(addedNode)) continue;
 | 
			
		||||
        if (addedNode.nodeName === 'INPUT' || addedNode.nodeName === 'TEXTAREA') attachDirAuto(addedNode);
 | 
			
		||||
        const children = addedNode.querySelectorAll('input, textarea');
 | 
			
		||||
        const len = children.length;
 | 
			
		||||
 | 
			
		||||
@ -1,4 +1,5 @@
 | 
			
		||||
import tippy, {followCursor} from 'tippy.js';
 | 
			
		||||
import {isDocumentFragmentOrElementNode} from '../utils/dom.js';
 | 
			
		||||
 | 
			
		||||
const visibleInstances = new Set();
 | 
			
		||||
 | 
			
		||||
@ -136,8 +137,6 @@ function attachChildrenLazyTooltip(target) {
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const elementNodeTypes = new Set([Node.ELEMENT_NODE, Node.DOCUMENT_FRAGMENT_NODE]);
 | 
			
		||||
 | 
			
		||||
export function initGlobalTooltips() {
 | 
			
		||||
  // use MutationObserver to detect new "data-tooltip-content" elements added to the DOM, or attributes changed
 | 
			
		||||
  const observerConnect = (observer) => observer.observe(document, {
 | 
			
		||||
@ -152,11 +151,10 @@ export function initGlobalTooltips() {
 | 
			
		||||
      if (mutation.type === 'childList') {
 | 
			
		||||
        // mainly for Vue components and AJAX rendered elements
 | 
			
		||||
        for (const el of mutation.addedNodes) {
 | 
			
		||||
          if (elementNodeTypes.has(el.nodeType)) {
 | 
			
		||||
            attachChildrenLazyTooltip(el);
 | 
			
		||||
            if (el.hasAttribute('data-tooltip-content')) {
 | 
			
		||||
              attachLazyTooltip(el);
 | 
			
		||||
            }
 | 
			
		||||
          if (!isDocumentFragmentOrElementNode(el)) continue;
 | 
			
		||||
          attachChildrenLazyTooltip(el);
 | 
			
		||||
          if (el.hasAttribute('data-tooltip-content')) {
 | 
			
		||||
            attachLazyTooltip(el);
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      } else if (mutation.type === 'attributes') {
 | 
			
		||||
 | 
			
		||||
@ -59,6 +59,17 @@ export function onDomReady(cb) {
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// checks whether an element is owned by the current document, and whether it is a document fragment or element node
 | 
			
		||||
// if it is, it means it is a "normal" element managed by us, which can be modified safely.
 | 
			
		||||
export function isDocumentFragmentOrElementNode(el) {
 | 
			
		||||
  try {
 | 
			
		||||
    return el.ownerDocument === document && el.nodeType === Node.ELEMENT_NODE || el.nodeType === Node.DOCUMENT_FRAGMENT_NODE;
 | 
			
		||||
  } catch {
 | 
			
		||||
    // in case the el is not in the same origin, then the access to nodeType would fail
 | 
			
		||||
    return false;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// autosize a textarea to fit content. Based on
 | 
			
		||||
// https://github.com/github/textarea-autosize
 | 
			
		||||
// ---------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user