mirror of
				https://github.com/XRPLF/xrpl-dev-portal.git
				synced 2025-11-04 03:45:49 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			68 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			68 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
/**
 | 
						|
 * Slugify function, has to match the formula used in interactive-tutorial.js
 | 
						|
 */
 | 
						|
import { useEffect, useState } from 'react';
 | 
						|
 | 
						|
export const useThemeFromClassList = (classNames) => {
 | 
						|
  const [currentTheme, setCurrentTheme] = useState(null);
 | 
						|
 | 
						|
  useEffect(() => {
 | 
						|
    // Function to update the theme based on the class list
 | 
						|
    const updateTheme = () => {
 | 
						|
      for (const className of classNames) {
 | 
						|
        if (document.documentElement.classList.contains(className)) {
 | 
						|
          setCurrentTheme(className);
 | 
						|
          return;
 | 
						|
        }
 | 
						|
      }
 | 
						|
    };
 | 
						|
 | 
						|
    // Initial update
 | 
						|
    updateTheme();
 | 
						|
 | 
						|
    // Create an observer instance linked to the callback function
 | 
						|
    const observer = new MutationObserver(() => {
 | 
						|
      updateTheme();
 | 
						|
    });
 | 
						|
 | 
						|
    // Start observing the target node for configured mutations
 | 
						|
    observer.observe(document.documentElement, {
 | 
						|
      attributes: true, // Listen for attribute changes
 | 
						|
      attributeFilter: ['class'], // Specifically, listen only to "class" attribute changes
 | 
						|
    });
 | 
						|
 | 
						|
    // Cleanup: Disconnect the observer
 | 
						|
    return () => {
 | 
						|
      observer.disconnect();
 | 
						|
    };
 | 
						|
  }, [classNames]);
 | 
						|
 | 
						|
  return currentTheme;
 | 
						|
};
 | 
						|
 | 
						|
export function slugify(s) {
 | 
						|
  const unacceptable_chars = /[^A-Za-z0-9._ ]+/g;
 | 
						|
  const whitespace_regex = /\s+/g;
 | 
						|
  s = s.replace(unacceptable_chars, "");
 | 
						|
  s = s.replace(whitespace_regex, "_");
 | 
						|
  s = s.toLowerCase();
 | 
						|
  if (!s) {
 | 
						|
    s = "_";
 | 
						|
  }
 | 
						|
  return s;
 | 
						|
}
 | 
						|
 | 
						|
export function idify(s: string) {
 | 
						|
  // like slugify, but more unicode-friendly.
 | 
						|
  // for some reason the better version using \p gives an "s12 is undefined" TypeError sometimes,
 | 
						|
  // so it's disabled for now. With that fixed, we could use localized step names in interactive tutorials.
 | 
						|
  //s = s.replace(/[^\p{Alphabetic}\p{Mark}\p{Decimal_Number}\p{Connector_Punctuation}\p{Join_Control}]/gu, '').trim().toLowerCase()
 | 
						|
  //s = s.replace(/[^\w\s-]/gu, '').trim().toLowerCase()
 | 
						|
  s = s.replace(/([^\w]|[\s-])/gu, '').trim().toLowerCase() 
 | 
						|
  s = s.replace(/[\s-]+/gu, '-')
 | 
						|
  if (!s) {
 | 
						|
    s = "_";
 | 
						|
  }
 | 
						|
  return s
 | 
						|
}
 |