mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-11-03 20:36:07 +01:00 
			
		
		
		
	- Add Copy button to mermaid diagrams which copies their source. - Set tippy to not hide on click and avoid tooltip re-creation for temporary tooltips. This avoids hide and show when copying repo url. Popovers still hide the tooltip as usual. <img width="815" alt="Screenshot 2022-12-23 at 14 02 32" src="https://user-images.githubusercontent.com/115237/209341696-98e30953-f246-46d9-9157-2ececfd791c9.png"> Co-authored-by: Lauris BH <lauris@nix.lv> Co-authored-by: KN4CK3R <admin@oldschoolhack.me>
		
			
				
	
	
		
			62 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
import tippy from 'tippy.js';
 | 
						|
 | 
						|
export function createTippy(target, opts = {}) {
 | 
						|
  const instance = tippy(target, {
 | 
						|
    appendTo: document.body,
 | 
						|
    placement: target.getAttribute('data-placement') || 'top-start',
 | 
						|
    animation: false,
 | 
						|
    allowHTML: false,
 | 
						|
    hideOnClick: false,
 | 
						|
    interactiveBorder: 30,
 | 
						|
    ignoreAttributes: true,
 | 
						|
    maxWidth: 500, // increase over default 350px
 | 
						|
    arrow: `<svg width="16" height="7"><path d="m0 7 8-7 8 7Z" class="tippy-svg-arrow-outer"/><path d="m0 8 8-7 8 7Z" class="tippy-svg-arrow-inner"/></svg>`,
 | 
						|
    ...(opts?.role && {theme: opts.role}),
 | 
						|
    ...opts,
 | 
						|
  });
 | 
						|
 | 
						|
  // for popups where content refers to a DOM element, we use the 'tippy-target' class
 | 
						|
  // to initially hide the content, now we can remove it as the content has been removed
 | 
						|
  // from the DOM by tippy
 | 
						|
  if (opts.content instanceof Element) {
 | 
						|
    opts.content.classList.remove('tippy-target');
 | 
						|
  }
 | 
						|
 | 
						|
  return instance;
 | 
						|
}
 | 
						|
 | 
						|
export function initTooltip(el, props = {}) {
 | 
						|
  const content = el.getAttribute('data-content') || props.content;
 | 
						|
  if (!content) return null;
 | 
						|
  if (!el.hasAttribute('aria-label')) el.setAttribute('aria-label', content);
 | 
						|
  return createTippy(el, {
 | 
						|
    content,
 | 
						|
    delay: 100,
 | 
						|
    role: 'tooltip',
 | 
						|
    ...props,
 | 
						|
  });
 | 
						|
}
 | 
						|
 | 
						|
export function showTemporaryTooltip(target, content) {
 | 
						|
  let tippy, oldContent;
 | 
						|
  if (target._tippy) {
 | 
						|
    tippy = target._tippy;
 | 
						|
    oldContent = tippy.props.content;
 | 
						|
  } else {
 | 
						|
    tippy = initTooltip(target, {content});
 | 
						|
  }
 | 
						|
 | 
						|
  tippy.setContent(content);
 | 
						|
  if (!tippy.state.isShown) tippy.show();
 | 
						|
  tippy.setProps({
 | 
						|
    onHidden: (tippy) => {
 | 
						|
      if (oldContent) {
 | 
						|
        tippy.setContent(oldContent);
 | 
						|
      } else {
 | 
						|
        tippy.destroy();
 | 
						|
      }
 | 
						|
      tippy.setProps({onHidden: undefined});
 | 
						|
    },
 | 
						|
  });
 | 
						|
}
 |