diff options
| -rw-r--r-- | src/features/names.js | 106 | ||||
| -rw-r--r-- | src/i18n.js | 1 | ||||
| -rw-r--r-- | src/locales/ar.json | 1 | ||||
| -rw-r--r-- | src/locales/bn.json | 1 | ||||
| -rw-r--r-- | src/locales/de.json | 1 | ||||
| -rw-r--r-- | src/locales/es.json | 1 | ||||
| -rw-r--r-- | src/locales/fr.json | 1 | ||||
| -rw-r--r-- | src/locales/hi.json | 1 | ||||
| -rw-r--r-- | src/locales/id.json | 3 | ||||
| -rw-r--r-- | src/locales/it.json | 1 | ||||
| -rw-r--r-- | src/locales/ja.json | 1 | ||||
| -rw-r--r-- | src/locales/ko.json | 1 | ||||
| -rw-r--r-- | src/locales/mr.json | 3 | ||||
| -rw-r--r-- | src/locales/pt.json | 1 | ||||
| -rw-r--r-- | src/locales/ru.json | 1 | ||||
| -rw-r--r-- | src/locales/sw.json | 3 | ||||
| -rw-r--r-- | src/locales/ta.json | 3 | ||||
| -rw-r--r-- | src/locales/te.json | 3 | ||||
| -rw-r--r-- | src/locales/tr.json | 1 | ||||
| -rw-r--r-- | src/locales/ur.json | 3 | ||||
| -rw-r--r-- | src/locales/vi.json | 3 | ||||
| -rw-r--r-- | src/locales/zh.json | 1 |
22 files changed, 101 insertions, 40 deletions
diff --git a/src/features/names.js b/src/features/names.js index 45b0b36..d57bb19 100644 --- a/src/features/names.js +++ b/src/features/names.js @@ -455,29 +455,35 @@ export function namesFeature(ctx) { // said as it's typed, not after a round trip (the registrar is the judge: // a name claimed before the rule can still be retaken by its owner) nameRuleHint(ui.nameClaim) ? h('div', { class: 'small', style: 'color:var(--red,#c0392b)' }, t('namesRule')) : null, - h('button', { class: 'btn-primary btn-block', disabled: ui.busy, onClick: async () => { - const name = (ui.nameClaim || '').toLowerCase().trim(); - if (!name) return; - ui.busy = true; ui.nameClaimError = null; ui.nameClaimMigration = null; render(); - try { - // Sign with the login identity when one can be (re)attached: the - // registrar lets a migrated coinos user's own identity take their - // name back, which the wallet key alone could never prove. - const signer = await Promise.resolve(hook('nostrLoginResume')).catch(() => null); - await claimRequestedName(name, signer ? { signer, manager: wallet.nostrPubkey() } : {}); - // the wizard's Spending step tells a name claimed here from one - // the registrar handed back (an account set up before) - if (ui.onb && ui.onb.step === 'spend') ui.onb.claimedHere = name; - ui.nameClaim = ''; - ui.nameEditOpen = false; - toast(t('namesClaimed', { name: `${name}@${DOMAIN()}` })); - } catch (e) { - ui.nameClaimError = e.message; - if (ui.nameClaim === name) ui.nameClaimMigration = e.migrationName || null; - } - ui.busy = false; render(); - } }, ui.busy ? h('span', { class: 'spinner' }) : t('namesClaim')), - ui.nameClaimMigration && ui.nameClaimMigration === ui.nameClaim && DOMAIN() === 'coinos.io' + h('button', { class: 'btn-primary btn-block', disabled: ui.busy, onClick: () => claimTyped(ui.nameClaim) }, ui.busy ? h('span', { class: 'spinner' }) : t('namesClaim')), + migrateLink()); + } + async function claimTyped(typed) { + const name = (typed || '').toLowerCase().trim(); + if (!name) return; + ui.busy = true; ui.nameClaimError = null; ui.nameClaimMigration = null; render(); + try { + // Sign with the login identity when one can be (re)attached: the + // registrar lets a migrated coinos user's own identity take their + // name back, which the wallet key alone could never prove. + const signer = await Promise.resolve(hook('nostrLoginResume')).catch(() => null); + await claimRequestedName(name, signer ? { signer, manager: wallet.nostrPubkey() } : {}); + // the wizard's Spending step tells a name claimed here from one + // the registrar handed back (an account set up before) + if (ui.onb && ui.onb.step === 'spend') ui.onb.claimedHere = name; + ui.nameClaim = ''; + ui.nameEdit = null; + ui.nameEditOpen = false; + toast(t('namesClaimed', { name: `${name}@${DOMAIN()}` })); + } catch (e) { + ui.nameClaimError = e.message; + if ((ui.nameEdit ?? ui.nameClaim) === name) ui.nameClaimMigration = e.migrationName || null; + } + ui.busy = false; render(); + } + // "I have a coinos account": a name the registrar holds for a legacy user + function migrateLink() { + return ui.nameClaimMigration && ui.nameClaimMigration === (ui.nameEdit ?? ui.nameClaim) && DOMAIN() === 'coinos.io' ? h('button', { type: 'button', class: 'linklike small', onClick: () => { @@ -490,7 +496,48 @@ export function namesFeature(ctx) { location.href = `https://coinos.io/migrate?to=${encodeURIComponent(addr)}&back=${encodeURIComponent(location.origin + '/')}`; } }, - }, t('onbHaveCoinos')) : null); + }, t('onbHaveCoinos')) : null; + } + + // Settings: the address and changing it are one card — the name sits in + // its own field; typing a different one offers the change (and says the + // old address stops working), otherwise Copy and Release. + function addressCard(st) { + const domain = st.domain || DOMAIN(); + const addr = `${st.name}@${domain}`; + const typed = ui.nameEdit ?? st.name; + const changed = !!typed && typed !== st.name; + return h('div', { class: 'card col', 'data-key': 'names' }, + h('h3', {}, t('namesTitle')), + ui.nameClaimError ? h('div', { class: 'notice err' }, ui.nameClaimError) : null, + h('div', { class: 'row gap6 name-field' }, + h('input', { + type: 'text', class: 'mono-input', placeholder: t('namesPlaceholder'), style: 'flex:1', + autocapitalize: 'none', autocomplete: 'off', spellcheck: 'false', 'aria-label': t('namesCustom'), + value: typed, + onInput: (e) => { + const was = changed; + ui.nameEdit = e.target.value.toLowerCase().trim(); + ui.nameClaimError = null; + if (ui.nameClaimMigration) ui.nameClaimMigration = null; + if ((!!ui.nameEdit && ui.nameEdit !== st.name) !== was || nameRuleHint(ui.nameEdit)) render(); + }, + }), + h('span', { class: 'muted', style: 'align-self:center' }, '@' + domain)), + changed && nameRuleHint(typed) ? h('div', { class: 'small', style: 'color:var(--red,#c0392b)' }, t('namesRule')) : null, + changed + ? h('div', { class: 'col', style: 'gap:8px' }, + h('p', { class: 'small muted', style: 'margin:0' }, t('namesCustomHow')), + h('div', { class: 'row gap6' }, + h('button', { class: 'btn-ghost btn-sm', disabled: ui.busy, onClick: () => { ui.nameEdit = null; ui.nameClaimError = null; ui.nameClaimMigration = null; render(); } }, t('cancel')), + h('button', { class: 'btn-primary btn-sm grow', disabled: ui.busy, onClick: () => claimTyped(typed) }, + ui.busy ? h('span', { class: 'spinner sm' }) : t('namesChangeTo', { addr: typed }))), + migrateLink()) + : h('div', { class: 'row gap6' }, + copyBtn(addr, t('namesCopy')), + h('button', { class: 'btn-ghost btn-sm', onClick: async () => { + await release(); toast(t('namesReleased')); render(); + } }, t('namesRelease')))); } // Settings: one card per concern, all laid out (no collapsed sections — @@ -519,14 +566,7 @@ export function namesFeature(ctx) { h('div', { class: 'addr-box break', style: 'font-size:11px' }, `${st.name}.user._bitcoin-payment.yourdomain.com. CNAME ${st.name}.user._bitcoin-payment.${domain}.`)), card('ownnode', t('namesOwnNode'), t('namesOwnNodeMenuHow'), ownNodeSection()), - card('custom', t('namesCustom'), t('namesCustomHow'), claimForm(false)), - card('names', t('namesTitle'), null, - h('div', { class: 'addr-box break', style: 'font-size:14px' }, addr), - h('div', { class: 'row gap6' }, - copyBtn(addr, t('namesCopy')), - h('button', { class: 'btn-ghost btn-sm', onClick: async () => { - await release(); toast(t('namesReleased')); render(); - } }, t('namesRelease')))), + addressCard(st), ].filter(Boolean); } // The terminal's cards live on the Point of sale settings page now — no @@ -884,7 +924,7 @@ export function namesFeature(ctx) { checked = false; lastError = null; // The claim field is a draft for THIS account — a name typed before a // logout used to greet the next account that opened on this device. - ui.nameClaim = null; ui.nameClaimError = null; ui.nameClaimMigration = null; suggestedFor = null; + ui.nameClaim = null; ui.nameEdit = null; ui.nameClaimError = null; ui.nameClaimMigration = null; suggestedFor = null; refresh(); }, // The pencil by the address opens this: choosing a name gets a page of diff --git a/src/i18n.js b/src/i18n.js index 1e96214..a01999a 100644 --- a/src/i18n.js +++ b/src/i18n.js @@ -1480,6 +1480,7 @@ const STR = { namesClaim: 'Claim', namesClaimed: 'You are now {name}', namesCopy: 'Copy address', + namesChangeTo: 'Change to {addr}', namesMoreOpen: 'More options', namesMoreTitle: 'More ways to get paid', namesMoreBolt11: 'Lightning invoice (BOLT 11)', diff --git a/src/locales/ar.json b/src/locales/ar.json index ae94daf..7d11408 100644 --- a/src/locales/ar.json +++ b/src/locales/ar.json @@ -682,6 +682,7 @@ "namesClaim": "المطالبة", "namesClaimed": "أنت الآن {name}", "namesCopy": "عنوان الرسالة", + "namesChangeTo": "غيّره إلى {addr}", "namesMoreOpen": "المزيد من الخيارات", "namesMoreTitle": "المزيد من الطرق للحصول على أجر", "namesMoreBolt11": "فاتورة البرق (BOLT 11)", diff --git a/src/locales/bn.json b/src/locales/bn.json index 8be4c84..27cac0b 100644 --- a/src/locales/bn.json +++ b/src/locales/bn.json @@ -682,6 +682,7 @@ "namesClaim": "মুছে ফেলুন (_D)", "namesClaimed": "তুমি এখন {name}", "namesCopy": "ঠিকানা কপি করো", + "namesChangeTo": "{addr}-এ বদলান", "namesMoreOpen": "অতিরিক্ত বিকল্প", "namesMoreTitle": "আরো টাকা পেতে", "namesMoreBolt11": "(বিওএল ১১)", diff --git a/src/locales/de.json b/src/locales/de.json index c4d512a..3a18040 100644 --- a/src/locales/de.json +++ b/src/locales/de.json @@ -682,6 +682,7 @@ "namesClaim": "Anspruch", "namesClaimed": "Du bist jetzt {name}", "namesCopy": "Adresse kopieren", + "namesChangeTo": "Ändern zu {addr}", "namesMoreOpen": "Weitere Optionen", "namesMoreTitle": "Mehr Möglichkeiten, um bezahlt zu werden", "namesMoreBolt11": "Blitzrechnung (BOLT 11)", diff --git a/src/locales/es.json b/src/locales/es.json index 8f37f85..40176a7 100644 --- a/src/locales/es.json +++ b/src/locales/es.json @@ -682,6 +682,7 @@ "namesClaim": "Reclamación", "namesClaimed": "Ahora sí. {name}", "namesCopy": "Dirección de copia", + "namesChangeTo": "Cambiar a {addr}", "namesMoreOpen": "Más opciones", "namesMoreTitle": "Más formas de pagar", "namesMoreBolt11": "Factura de relámpago (BOLT 11)", diff --git a/src/locales/fr.json b/src/locales/fr.json index 254c76c..407794b 100644 --- a/src/locales/fr.json +++ b/src/locales/fr.json @@ -682,6 +682,7 @@ "namesClaim": "Réclamation", "namesClaimed": "Vous êtes maintenant {name}", "namesCopy": "Copier l'adresse", + "namesChangeTo": "Passer à {addr}", "namesMoreOpen": "Autres options", "namesMoreTitle": "Plus de moyens de se faire payer", "namesMoreBolt11": "Facture de foudre (BOLT 11)", diff --git a/src/locales/hi.json b/src/locales/hi.json index 46c7ab5..41eb792 100644 --- a/src/locales/hi.json +++ b/src/locales/hi.json @@ -682,6 +682,7 @@ "namesClaim": "दावा", "namesClaimed": "अब {name}", "namesCopy": "पता कॉपी करें", + "namesChangeTo": "{addr} में बदलें", "namesMoreOpen": "अधिक विकल्प", "namesMoreTitle": "भुगतान करने के तरीके", "namesMoreBolt11": "बिजली चालान (BOLT 11)", diff --git a/src/locales/id.json b/src/locales/id.json index 36bc810..f16c07b 100644 --- a/src/locales/id.json +++ b/src/locales/id.json @@ -267,5 +267,6 @@ "pagerFetchingPictures": "Mengambil gambar lainnya…", "pagerCaughtUp": "Sementara itu saja", "onbGiftNameTitle": "Sekarang pilih nama pengguna", - "onbGiftNameBody": "Klaim sebuah nama dan dapatkan alamat pembayaran sendiri, agar orang bisa mengirimimu bitcoin hanya dengan namamu. Lalu pilih foto dan sampul." + "onbGiftNameBody": "Klaim sebuah nama dan dapatkan alamat pembayaran sendiri, agar orang bisa mengirimimu bitcoin hanya dengan namamu. Lalu pilih foto dan sampul.", + "namesChangeTo": "Ganti ke {addr}" } diff --git a/src/locales/it.json b/src/locales/it.json index 2776ef6..9988888 100644 --- a/src/locales/it.json +++ b/src/locales/it.json @@ -1246,6 +1246,7 @@ "namesClaim": "Richiedi", "namesClaimed": "Ora sei {name}", "namesCopy": "Copia indirizzo", + "namesChangeTo": "Cambia in {addr}", "namesMoreOpen": "Altre opzioni", "namesMoreTitle": "Altri modi per farti pagare", "namesMoreBolt11": "Fattura Lightning (BOLT 11)", diff --git a/src/locales/ja.json b/src/locales/ja.json index dd6eb07..010955a 100644 --- a/src/locales/ja.json +++ b/src/locales/ja.json @@ -682,6 +682,7 @@ "namesClaim": "ログイン", "namesClaimed": "これから {name}", "namesCopy": "コピーアドレス", + "namesChangeTo": "{addr} に変更", "namesMoreOpen": "その他のオプション", "namesMoreTitle": "支払われるより多くの方法", "namesMoreBolt11": "ライトニングインボイス(BOLT 11)", diff --git a/src/locales/ko.json b/src/locales/ko.json index e260c4f..e25af6e 100644 --- a/src/locales/ko.json +++ b/src/locales/ko.json @@ -681,6 +681,7 @@ "namesClaim": "계정 만들기", "namesClaimed": "현재 위치 {name}", "namesCopy": "본문 바로가기", + "namesChangeTo": "{addr}(으)로 변경", "namesMoreOpen": "더 많은 옵션", "namesMoreTitle": "지불하는 방법", "namesMoreBolt11": "번개 송장 (BOLT 11)", diff --git a/src/locales/mr.json b/src/locales/mr.json index c49c994..a603747 100644 --- a/src/locales/mr.json +++ b/src/locales/mr.json @@ -267,5 +267,6 @@ "pagerFetchingPictures": "आणखी चित्रे आणत आहे…", "pagerCaughtUp": "सध्या एवढेच", "onbGiftNameTitle": "आता एक युजरनेम निवडा", - "onbGiftNameBody": "एक नाव घ्या आणि स्वतःचा पेमेंट पत्ता मिळवा, म्हणजे लोक फक्त तुमच्या नावाने तुम्हाला बिटकॉइन पाठवू शकतील. मग एक फोटो आणि कव्हर निवडा." + "onbGiftNameBody": "एक नाव घ्या आणि स्वतःचा पेमेंट पत्ता मिळवा, म्हणजे लोक फक्त तुमच्या नावाने तुम्हाला बिटकॉइन पाठवू शकतील. मग एक फोटो आणि कव्हर निवडा.", + "namesChangeTo": "{addr} मध्ये बदला" } diff --git a/src/locales/pt.json b/src/locales/pt.json index 4b51866..48496ee 100644 --- a/src/locales/pt.json +++ b/src/locales/pt.json @@ -682,6 +682,7 @@ "namesClaim": "Alegação", "namesClaimed": "Agora és. {name}", "namesCopy": "Copiar endereço", + "namesChangeTo": "Mudar para {addr}", "namesMoreOpen": "Mais opções", "namesMoreTitle": "Mais formas de ser pago", "namesMoreBolt11": "Factura relâmpago (BOLT 11)", diff --git a/src/locales/ru.json b/src/locales/ru.json index 6494584..6c0b003 100644 --- a/src/locales/ru.json +++ b/src/locales/ru.json @@ -682,6 +682,7 @@ "namesClaim": "Претензия", "namesClaimed": "Ты теперь {name}", "namesCopy": "Адрес копии", + "namesChangeTo": "Сменить на {addr}", "namesMoreOpen": "Больше вариантов", "namesMoreTitle": "Больше способов получить оплату", "namesMoreBolt11": "Инвойс молнии (BOLT 11)", diff --git a/src/locales/sw.json b/src/locales/sw.json index e164659..4ffba61 100644 --- a/src/locales/sw.json +++ b/src/locales/sw.json @@ -267,5 +267,6 @@ "pagerFetchingPictures": "Inaleta picha zaidi…", "pagerCaughtUp": "Hayo ndiyo yote kwa sasa", "onbGiftNameTitle": "Sasa chagua jina la mtumiaji", - "onbGiftNameBody": "Chukua jina upate anwani yako ya malipo, ili watu wakutumie bitcoin kwa jina lako tu. Kisha chagua picha na jalada." + "onbGiftNameBody": "Chukua jina upate anwani yako ya malipo, ili watu wakutumie bitcoin kwa jina lako tu. Kisha chagua picha na jalada.", + "namesChangeTo": "Badilisha kuwa {addr}" } diff --git a/src/locales/ta.json b/src/locales/ta.json index d5ae03b..c9e6aae 100644 --- a/src/locales/ta.json +++ b/src/locales/ta.json @@ -267,5 +267,6 @@ "pagerFetchingPictures": "மேலும் படங்களைப் பெறுகிறது…", "pagerCaughtUp": "இப்போதைக்கு இவ்வளவுதான்", "onbGiftNameTitle": "இப்போது ஒரு பயனர்பெயரைத் தேர்ந்தெடுங்கள்", - "onbGiftNameBody": "ஒரு பெயரைப் பெற்று உங்கள் சொந்த பணம் பெறும் முகவரியைப் பெறுங்கள்; உங்கள் பெயரை மட்டும் வைத்தே மற்றவர்கள் பிட்காயின் அனுப்பலாம். பிறகு ஒரு படத்தையும் அட்டைப்படத்தையும் தேர்ந்தெடுங்கள்." + "onbGiftNameBody": "ஒரு பெயரைப் பெற்று உங்கள் சொந்த பணம் பெறும் முகவரியைப் பெறுங்கள்; உங்கள் பெயரை மட்டும் வைத்தே மற்றவர்கள் பிட்காயின் அனுப்பலாம். பிறகு ஒரு படத்தையும் அட்டைப்படத்தையும் தேர்ந்தெடுங்கள்.", + "namesChangeTo": "{addr} ஆக மாற்று" } diff --git a/src/locales/te.json b/src/locales/te.json index 79ca57f..7a30efb 100644 --- a/src/locales/te.json +++ b/src/locales/te.json @@ -265,5 +265,6 @@ "pagerFetchingPictures": "మరిన్ని చిత్రాలను తెస్తోంది…", "pagerCaughtUp": "ప్రస్తుతానికి ఇంతే", "onbGiftNameTitle": "ఇప్పుడు ఒక యూజర్నేమ్ ఎంచుకోండి", - "onbGiftNameBody": "ఒక పేరు తీసుకుని మీ సొంత చెల్లింపు చిరునామా పొందండి, అప్పుడు మీ పేరుతోనే ఎవరైనా మీకు బిట్కాయిన్ పంపవచ్చు. తర్వాత ఒక ఫోటో, ఒక కవర్ ఎంచుకోండి." + "onbGiftNameBody": "ఒక పేరు తీసుకుని మీ సొంత చెల్లింపు చిరునామా పొందండి, అప్పుడు మీ పేరుతోనే ఎవరైనా మీకు బిట్కాయిన్ పంపవచ్చు. తర్వాత ఒక ఫోటో, ఒక కవర్ ఎంచుకోండి.", + "namesChangeTo": "{addr}కి మార్చు" } diff --git a/src/locales/tr.json b/src/locales/tr.json index 9dce950..a406b7b 100644 --- a/src/locales/tr.json +++ b/src/locales/tr.json @@ -681,6 +681,7 @@ "namesClaim": "Talep Davası", "namesClaimed": "You are now {name}", "namesCopy": "Kopya adresi", + "namesChangeTo": "{addr} olarak değiştir", "namesMoreOpen": "Daha fazla seçenek", "namesMoreTitle": "Ödeme yapmak için daha fazla yol", "namesMoreBolt11": "Yıldırım Fatura (BOLT 11)", diff --git a/src/locales/ur.json b/src/locales/ur.json index c255c6c..1f35df9 100644 --- a/src/locales/ur.json +++ b/src/locales/ur.json @@ -267,5 +267,6 @@ "pagerFetchingPictures": "مزید تصاویر لائی جا رہی ہیں…", "pagerCaughtUp": "فی الحال بس اتنا ہی", "onbGiftNameTitle": "اب ایک یوزرنیم چنیں", - "onbGiftNameBody": "ایک نام لیں اور اپنا ادائیگی کا پتہ پائیں، تاکہ لوگ صرف آپ کے نام سے آپ کو بٹ کوائن بھیج سکیں۔ پھر ایک تصویر اور ایک کور چنیں۔" + "onbGiftNameBody": "ایک نام لیں اور اپنا ادائیگی کا پتہ پائیں، تاکہ لوگ صرف آپ کے نام سے آپ کو بٹ کوائن بھیج سکیں۔ پھر ایک تصویر اور ایک کور چنیں۔", + "namesChangeTo": "{addr} میں بدلیں" } diff --git a/src/locales/vi.json b/src/locales/vi.json index 3401427..31f61ad 100644 --- a/src/locales/vi.json +++ b/src/locales/vi.json @@ -267,5 +267,6 @@ "pagerFetchingPictures": "Đang tải thêm ảnh…", "pagerCaughtUp": "Tạm thời chỉ có vậy", "onbGiftNameTitle": "Giờ hãy chọn tên người dùng", - "onbGiftNameBody": "Nhận một cái tên và địa chỉ thanh toán của riêng bạn, để mọi người gửi bitcoin cho bạn chỉ bằng tên. Sau đó chọn ảnh đại diện và ảnh bìa." + "onbGiftNameBody": "Nhận một cái tên và địa chỉ thanh toán của riêng bạn, để mọi người gửi bitcoin cho bạn chỉ bằng tên. Sau đó chọn ảnh đại diện và ảnh bìa.", + "namesChangeTo": "Đổi thành {addr}" } diff --git a/src/locales/zh.json b/src/locales/zh.json index dc58a62..1ed54fa 100644 --- a/src/locales/zh.json +++ b/src/locales/zh.json @@ -682,6 +682,7 @@ "namesClaim": "索赔", "namesClaimed": "你现在是 {name}", "namesCopy": "复制地址", + "namesChangeTo": "改为 {addr}", "namesMoreOpen": "更多选项", "namesMoreTitle": "更多赚钱的方法", "namesMoreBolt11": "闪电发票(BOLT 11)", |
