mirror of
				https://github.com/langgenius/dify.git
				synced 2025-11-03 20:33:00 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			54 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			54 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
'use client'
 | 
						|
 | 
						|
import { basePath } from '@/utils/var'
 | 
						|
import { useEffect } from 'react'
 | 
						|
import { usePathname } from 'next/navigation'
 | 
						|
 | 
						|
export default function RoutePrefixHandle() {
 | 
						|
  const pathname = usePathname()
 | 
						|
  const handleRouteChange = () => {
 | 
						|
    const addPrefixToImg = (e: HTMLImageElement) => {
 | 
						|
      const url = new URL(e.src)
 | 
						|
      const prefix = url.pathname.substr(0, basePath.length)
 | 
						|
      if (prefix !== basePath) {
 | 
						|
        url.pathname = basePath + url.pathname
 | 
						|
        e.src = url.toString()
 | 
						|
      }
 | 
						|
    }
 | 
						|
    // create an observer instance
 | 
						|
    const observer = new MutationObserver((mutationsList) => {
 | 
						|
      for (const mutation of mutationsList) {
 | 
						|
        if (mutation.type === 'childList') {
 | 
						|
          // listen for newly added img tags
 | 
						|
          mutation.addedNodes.forEach((node) => {
 | 
						|
            if (((node as HTMLElement).tagName) === 'IMG')
 | 
						|
              addPrefixToImg(node as HTMLImageElement)
 | 
						|
          })
 | 
						|
        }
 | 
						|
        else if (mutation.type === 'attributes' && (mutation.target as HTMLElement).tagName === 'IMG') {
 | 
						|
          // if the src of an existing img tag changes, update the prefix
 | 
						|
          if (mutation.attributeName === 'src')
 | 
						|
            addPrefixToImg(mutation.target as HTMLImageElement)
 | 
						|
        }
 | 
						|
      }
 | 
						|
    })
 | 
						|
 | 
						|
    // configure observation options
 | 
						|
    const config = {
 | 
						|
      childList: true,
 | 
						|
      attributes: true,
 | 
						|
      subtree: true,
 | 
						|
      attributeFilter: ['src'],
 | 
						|
    }
 | 
						|
 | 
						|
    observer.observe(document.body, config)
 | 
						|
  }
 | 
						|
 | 
						|
  useEffect(() => {
 | 
						|
    if (basePath)
 | 
						|
      handleRouteChange()
 | 
						|
  }, [pathname])
 | 
						|
 | 
						|
  return null
 | 
						|
}
 |