const PROTOCOL_AND_WWW = /^https?:\/\/(www\.)?/; const TRAILING_SLASH = /\/$/; const HTTP_ADDRESS = /^https?:\/\//i; const COMPLETE_ADDRESS = /^(https?:\/\/[^\s.]+\.[^\s]+|\/[^\s]*)$/; const FILE_ADDRESS = /\.(pdf|zip|docx?|xlsx?|pptx?|csv|txt|mp3|mp4|epub)(\?|#|$)/i; export function shortUrl( url: string ): string { return url.replace( PROTOCOL_AND_WWW, '' ); } function pathOnSite( url: string, siteUrl: string ): string | null { const siteRoot = siteUrl.replace( TRAILING_SLASH, '' ); if ( siteRoot === '' || ! url.startsWith( `${ siteRoot }/` ) ) { return null; } return url.slice( siteRoot.length ); } export function displayUrl( url: string, siteUrl: string ): string { return pathOnSite( url, siteUrl ) ?? shortUrl( url ); } export function fieldUrl( url: string, siteUrl: string ): string { return pathOnSite( url, siteUrl ) ?? url; } export function isHttpUrl( url: string ): boolean { return HTTP_ADDRESS.test( url.trim() ); } export function looksValid( typedAddress: string ): boolean { return COMPLETE_ADDRESS.test( typedAddress.trim() ); } export function looksLikeFile( url: string ): boolean { return FILE_ADDRESS.test( url ); }