diff --git a/templates/index.html b/templates/index.html index 46d76cf..914f4c8 100644 --- a/templates/index.html +++ b/templates/index.html @@ -211,6 +211,23 @@ } } + // Convert unicode/emoji to punycode for Handshake names + function toPunycode(name) { + // Check if name contains non-ASCII characters + if (!/[^\x00-\x7F]/.test(name)) { + return name; // Already ASCII, no conversion needed + } + + try { + // Use the browser's built-in URL API to convert to punycode + const url = new URL(`http://${name}`); + return url.hostname; + } catch { + // Fallback: return original if conversion fails + return name; + } + } + // Format chain data nicely function formatChainData(chain) { return ` @@ -1021,8 +1038,9 @@ alert('Please enter a name'); return; } - updateURL('name', name); - const data = await apiCall(`name/${name}`); + const punyName = toPunycode(name); + updateURL('name', punyName); + const data = await apiCall(`name/${punyName}`); // Use formatted display const resultElement = document.getElementById('name-result'); @@ -1039,7 +1057,8 @@ alert('Please enter a name'); return; } - const data = await apiCall(`nameresource/${name}`); + const punyName = toPunycode(name); + const data = await apiCall(`nameresource/${punyName}`); // Use formatted display const resultElement = document.getElementById('name-result'); @@ -1056,7 +1075,8 @@ alert('Please enter a name'); return; } - const data = await apiCall(`namesummary/${name}`); + const punyName = toPunycode(name); + const data = await apiCall(`namesummary/${punyName}`); // Use formatted display const resultElement = document.getElementById('name-result');