Compare commits

...

5 Commits

12 changed files with 171 additions and 54 deletions

View File

@ -7,6 +7,8 @@ concurrency:
trigger:
branch:
- main
event:
- push
metadata:
namespace: git
steps:
@ -72,6 +74,8 @@ concurrency:
trigger:
branch:
- main
event:
- push
metadata:
namespace: git
steps:

View File

@ -19,6 +19,7 @@
"debug": "^4.3.4",
"dexie": "^3.2.4",
"emojilib": "^3.0.10",
"highlight.js": "^11.8.0",
"light-bolt11-decoder": "^2.1.0",
"match-sorter": "^6.3.1",
"qr-code-styling": "^1.6.0-rc.1",

View File

@ -0,0 +1,12 @@
[
{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "social.snort.app",
"sha256_cert_fingerprints": [
"78:CE:8A:F7:C1:E2:30:12:77:55:BF:0E:86:E4:5C:BA:99:93:A0:D7:D7:42:F8:27:8B:C9:1B:AC:FC:8A:85:05"
]
}
}
]

View File

@ -0,0 +1,14 @@
.codeblock {
overflow: auto;
position: relative;
}
.codeblock pre {
overflow: auto;
line-height: 1.4;
font-size: var(--font-size);
}
.hljs {
background: #f6f8fa;
}

View File

@ -0,0 +1,24 @@
import { useEffect } from "react";
import "highlight.js/styles/github.css";
import "./CodeBlock.css";
const CodeBlock = ({ content, language }: { content: string; language?: string }) => {
useEffect(() => {
const importHljs = async () => {
const hljs = (await import("highlight.js")).default;
hljs.highlightAll();
};
importHljs();
});
return (
<div className={`codeblock ${language && `language-${language}`}`} dir="auto">
<pre>
<code className={language && `language-${language}`}>{content.trim()}</code>
</pre>
</div>
);
};
export default CodeBlock;

View File

@ -11,6 +11,7 @@ import { ProxyImg } from "./ProxyImg";
import { SpotlightMediaModal } from "./Deck/SpotlightMedia";
import HighlightedText from "./HighlightedText";
import { useTextTransformer } from "Hooks/useTextTransformCache";
import CodeBlock from "./CodeBlock";
export interface TextProps {
id: string;
@ -254,6 +255,9 @@ export default function Text({
if (element.type === "custom_emoji") {
chunks.push(<ProxyImg src={element.content} size={15} className="custom-emoji" />);
}
if (element.type === "code_block") {
chunks.push(<CodeBlock content={element.content} language={element.language} />);
}
if (element.type === "text") {
chunks.push(
<div className="text-frag">

View File

@ -50,7 +50,7 @@
"47FYwb": "Törlés",
"4IPzdn": "Elsődleges Fejlesztők",
"4L2vUY": "A te új NIP-05 azonosítód:",
"4MBtMa": "Name must be between 1 and 32 characters",
"4MBtMa": "A névnek 1 és 32 karakter között kell lennie",
"4OB335": "Nem tetszik",
"4Vmpt4": "A Nostr Plebs-ék az egyik legelső megfelelő feltételekkel és árakkal NIP-05 azonosítást biztosító szolgáltató",
"4Z3t5i": "Az imgproxy használata a képek tömörítéséhez",
@ -67,13 +67,13 @@
"6/hB3S": "Visszajátszás Megtekintése",
"65BmHb": "Nem sikerült a proxyképet a(z) {host} webhelyről betölteni. Kattintson ide a közvetlen betöltéshez",
"6OSOXl": "Ok: <i>{reason}</i>",
"6TfgXX": "{site} is an open source project built by passionate people in their free time",
"6TfgXX": "{site} egy nyílt forráskódú projekt, amit szenvedélyes emberek szabadidejükben építettek",
"6Yfvvp": "Szerezz egy azonosítót",
"6bgpn+": "Nem minden kliens támogatja ezt, ezért előfordulhat, hogy továbbra is a zap-eket úgy kapja, mintha a zap felosztás nem lett volna konfigurálva",
"6ewQqw": "Lájkok ({n})",
"6uMqL1": "Fizetetlen",
"7+Domh": "Bejegyzések",
"7/h1jn": "After submitting the pin there may be a slight delay as we encrypt the key.",
"7/h1jn": "A PIN elküldése után lehet egy kis késedelem, amíg a kulcsot titkosítjuk.",
"7BX/yC": "Fiók Váltó",
"7hp70g": "NIP-05",
"8/vBbP": "Megosztva ({n})",
@ -108,7 +108,7 @@
"BOUMjw": "Nem találtunk {twitterUsername} nevű Nostr felhasználót",
"BWpuKl": "Frissítés",
"BcGMo+": "A bejegyzések szöveget tartalmaznak és a legnépszerűbb felhasználási módja, hogy ”Twitter féle” üzeneteket tároljanak benne.",
"BjNwZW": "Nostr address (nip05)",
"BjNwZW": "Nostr cím (nip05)",
"C1LjMx": "Lightning adomány",
"C5xzTC": "Prémium",
"C81/uG": "Kijelentkezés",
@ -116,7 +116,7 @@
"CHTbO3": "A számla betöltése nem sikerült",
"CVWeJ6": "Felkapott Emberek",
"CmZ9ls": "{n} Némított",
"CoVXRS": "Alternatively, you may choose to store your private key without a PIN by selecting 'Cancel.'",
"CoVXRS": "Alternatívaként a 'Mégse' kiválasztásával választhatja azt is, hogy a privát kulcsát PIN nélkül tárolja.",
"CsCUYo": "{n} sats",
"Cu/K85": "Fordítás erről {lang}",
"D+KzKd": "Betöltéskor automatikusan Zap-eljen minden bejegyzést",
@ -134,7 +134,7 @@
"EWyQH5": "Globális",
"Ebl/B2": "Fordítás erre {lang}",
"EcZF24": "Egyedi Csomópontok",
"EcfIwB": "Username is available",
"EcfIwB": "A felhasználó név szabad",
"EcglP9": "Kulcs",
"EjFyoR": "On-chain adomány cím",
"EnCOBJ": "Vásárlás",
@ -205,11 +205,11 @@
"MP54GY": "Pénztárca jelszava",
"MRp6Ly": "Twitter felhasználónév",
"MWTx65": "Alapértelmezett oldal",
"MiMipu": "Set as primary Nostr address (nip05)",
"MiMipu": "Állítsa be elsődleges Nostr címnek (nip05)",
"Mrpkot": "Fizess az előfizetésért",
"MuVeKe": "Nostr cím vásárlása",
"MzRYWH": "{item} megveszem",
"Mzizei": "Iris.to account",
"Mzizei": "Iris.to fiók",
"N2IrpM": "Jóváhagy",
"NAidKb": "Értesítések",
"NAuFNH": "Már van ilyen típusú előfizetésed, kérjük, újítsd meg, vagy fizess",
@ -222,17 +222,17 @@
"OEW7yJ": "Zap-ek",
"OKhRC6": "Megosztás",
"OLEm6z": "Ismeretlen bejelentkezési hiba",
"OQSOJF": "Get a free nostr address",
"OQSOJF": "Szerezz egy Ingyenes Nostr címet",
"OQXnew": "Az előfizetésed még aktív, így nem tudod megújítani",
"ORGv1Q": "Létrehozva",
"Oq/kVn": "Name-squatting and impersonation is not allowed. {site} and our partners reserve the right to terminate your handle (not your account - nobody can take that away) for violating this rule.",
"P/xrLk": "Secure your private key with a PIN, ensuring enhanced protection on {site}. You'll be prompted to enter this PIN each time you access the site.",
"Oq/kVn": "A nevspekuláció és az engedély nélküli megszemélyesítés nem engedélyezett. A {site} és partnereink fenntartják a jogot ezen szabály megsértése esetén a választott azonosítód (nem pedig a fiókod - azt senki sem veheti el) megszüntetésére.",
"P/xrLk": "Tegyed biztonságosabbá a privát kulcsodat egy PIN-kóddal, így a(z) {site}-on fokozott védelmet biztosítva. Minden alkalommal, amikor a webhelyet megnyitod, kérni fogja, hogy add meg ezt a PIN-kódot.",
"P61BTu": "JSON eset",
"P7FD0F": "Rendszer (Alapértelmezett)",
"P7nJT9": "Összesen ma (UTC): {amount} sat",
"PCSt5T": "Preferenciák",
"PLSbmL": "Fiók helyreállító (mnemonikus) szavaid",
"PaN7t3": "Preview on {site}",
"PaN7t3": "Előnézet a(z) {site}-n",
"PamNxw": "Ismeretlen fejléc: {name}",
"Pe0ogR": "Téma",
"PrsIg7": "A reakciók minden oldalon megjelennek, ha letiltod őket nem jelennek meg",
@ -244,7 +244,7 @@
"R/6nsx": "Előfizetés",
"R81upa": "Általad követett személyek",
"RDZVQL": "Ellenőrzés",
"RSr2uB": "Username must only contain lowercase letters and numbers",
"RSr2uB": "A felhasználónév csak kisbetűket és számokat tartalmazhat",
"RahCRH": "Lejárt",
"RfhLwC": "Írta: {author}",
"RhDAoS": "Biztos hogy törölni akarod a {id}",
@ -252,7 +252,7 @@
"RoOyAh": "Csomópontok",
"Rs4kCE": "Könyvjelző",
"RwFaYs": "Rendezés",
"SLZGPn": "Enter a pin to encrypt your private key, you must enter this pin every time you open {site}.",
"SLZGPn": "A privát kulcs titkosításához adjon meg egy PIN-kódot. Ezt a PIN-kódot minden alkalommal meg kell adnod, amikor a(z) {site}-ot megnyitod.",
"SMO+on": "Sat küldése {name}",
"SOqbe9": "Lightning cím frissítése",
"SP0+yi": "Előfizetés vásárlása",
@ -269,12 +269,12 @@
"UT7Nkj": "Új Beszélgetés",
"UUPFlt": "Ahhoz hogy a bejegyzés tartalma megjelenjen, a felhasználóknak a tartalomra vonatkozó figyelmeztetést el kell fogadniuk.",
"Up5U7K": "Tiltás",
"UrKTqQ": "You have an active iris.to account",
"UrKTqQ": "Van aktív iris.to fiókod",
"VBadwB": "Hmm, nem található kulcskezelő bővítmény. próbáld meg az oldalt újratölteni.",
"VN0+Fz": "Egyenleg: {amount} sats",
"VOjC1i": "Válaszd ki mely szolgáltatóhoz legyenek a fájlok feltöltve",
"VR5eHw": "Publikus kulcs (npub/nprofile)",
"VcwrfF": "Yes please",
"VcwrfF": "Igen, kérem",
"VlJkSk": "{n} némított",
"VnXp8Z": "Avatar",
"VvaJst": "Tárcák megtekintése",
@ -299,7 +299,7 @@
"ZKORll": "Aktiválás",
"ZLmyG9": "Közreműködők",
"ZS+jRE": "Zap felosztások küldése ide",
"Zff6lu": "Username iris.to/<b>{name}</b> is reserved for you!",
"Zff6lu": "Az iris.to/<b>{name}</b> számodra fenntartva van!",
"Zr5TMx": "Profil Beállítása",
"a5UPxh": "Támogasd a fejlesztőket és a platform szolgáltatókat akik NIP-05 azonosító szolgáltatásokat biztosítanak",
"a7TDNm": "A bejegyzések a globális és a bejegyzések fülek alatt valós időben jelennek meg",
@ -312,7 +312,7 @@
"bfvyfs": "Névtelen",
"brAXSu": "Válassz felhasználónevet",
"bxv59V": "Csak most",
"c+JYNI": "No thanks",
"c+JYNI": "Nem, köszönöm",
"c+oiJe": "Bővítmény Telepítése",
"c35bj2": "Ha kérdése van a NIP-05 azonosító rendelésével kapcsolatban, kérjük, írjon üzenetet {link}",
"c3g2hL": "Újraküldés",
@ -327,7 +327,7 @@
"d6CyG5": "Előzmények",
"d7d0/x": "LN cím",
"dOQCL8": "Megjelenítendő név",
"deEeEI": "Register",
"deEeEI": "Regisztráció",
"e61Jf3": "Hamarosan",
"e7VmYP": "A privát kulcs feloldásához írd be a PIN-kódot",
"e7qqly": "Mind olvasottnak jelölni",
@ -336,7 +336,7 @@
"eSzf2G": "Egyetlen {nIn} sats zap a zap-medencéhez {nOut} sats-ot foglal le.",
"eXT2QQ": "Csoportbeszélgetés",
"fBI91o": "Zap",
"fBlba3": "Thanks for using {site}, please consider donating if you can.",
"fBlba3": "Köszönjük, hogy a(z) {site} használod, ha teheted fontold meg az adományozást.",
"fOksnD": "Nem szavazhatsz, mert az LNURL szolgáltatód a zap-eket nem támogatja",
"fWZYP5": "Kiemelt",
"filwqD": "Olvasás",
@ -376,9 +376,9 @@
"jzgQ2z": "{n} Reakció",
"k2veDA": "Írás",
"k7sKNy": "A mi saját NIP-05 azonosítási szolgáltatásunk, amelynek a használatával ennek az oldalnak a fejlesztését segítheted és ezzel egy speciális kitüntetést is szerezhetsz!",
"kEZUR8": "Register an Iris username",
"kEZUR8": "Regisztráljon egy Iris felhasználónevet",
"kJYo0u": "{n,plural,one {}=0{{name} megosztotta} other{{name} és {n} mások is megosztották}}",
"kTLGM2": "{site} is designed to have a similar experience to Twitter.",
"kTLGM2": "{site} úgy lett tervezve, hogy hasonló élményt nyújtson mint a Twitter.",
"kaaf1E": "most",
"kuPHYE": "{n,plural,one {}=0{{name} lájkolta} other{{name} és {n} mások is lájkolták}}",
"l+ikU1": "Minden a {plan}",
@ -387,7 +387,7 @@
"lD3+8a": "Fizetem",
"lPWASz": "Snort nostr cím",
"lTbT3s": "Pénztárca jelszava",
"lVKH7C": "What is {site} and how does it work?",
"lVKH7C": "Mi a(z) {site} és hogyan működik?",
"lgg1KN": "Felhasználói felület",
"ll3xBp": "Képmegosztó szolgáltató",
"lnaT9F": "Követek {n}",
@ -406,7 +406,7 @@
"nN9XTz": "Oszd meg a gondolataidat {link}",
"nOaArs": "Profil Beállítása",
"nWQFic": "Megújítás",
"ncbgUU": "{site} is a Nostr UI, nostr is a decentralised protocol for saving and distributing \"notes\".",
"ncbgUU": "a(z) {site} a Nostr protokollnak egyik felülete. a Nostr pedig a ”bejegyzésekˇ tárolására és megosztására létrehozott decentralizált protokoll.",
"nn1qb3": "Adományait nagyra értékeljük",
"nwZXeh": "{n} tiltott",
"o6Uy3d": "Csak a titkos privát kulccsal lehetséges bármely közzététel (események aláírása), minden más csak olvasható módban kerül naplózásra.",
@ -440,7 +440,7 @@
"rmdsT4": "{n} napok",
"rrfdTe": "Ez a technológia ugyanaz, mint amivel a tökéletes biztonságát a Bitcoin is sikeresen bizonyította.",
"rudscU": "Hiba a követők betöltésénél, kérlek próbáld később",
"rx1i0i": "Short link",
"rx1i0i": "Rövid link",
"sKDn4e": "Jelvények megjelenítése",
"sUNhQE": "felhasználó",
"sZQzjQ": "Nem sikerült a zap felosztása: {input}",
@ -484,7 +484,7 @@
"y1Z3or": "Nyelv",
"yCLnBC": "LNURL vagy Lightning cím",
"yCmnnm": "Globális betöltése innen",
"yNBPJp": "Help fund the development of {site}",
"yNBPJp": "Segítsen finanszírozni a(z) {site} fejlesztését",
"zCb8fX": "Súly",
"zFegDD": "Kapcsolat",
"zINlao": "Tulajdonos",

View File

@ -50,7 +50,7 @@
"47FYwb": "Avbryt",
"4IPzdn": "Primära Utvecklare",
"4L2vUY": "Din nya NIP-05 är:",
"4MBtMa": "Name must be between 1 and 32 characters",
"4MBtMa": "Namnet måste vara mellan 1 och 32 tecken",
"4OB335": "Ogilla",
"4Vmpt4": "Nostr Plebs är en av de första NIP-05 leverantörerna och erbjuder en bra samling domäner till rimliga priser",
"4Z3t5i": "Använd imgproxy för att komprimera bilder",
@ -67,13 +67,13 @@
"6/hB3S": "Titta på repris",
"65BmHb": "Det gick inte att proxybilden från {host}, klicka här för att ladda direkt",
"6OSOXl": "Anledning: <i>{reason}</i>",
"6TfgXX": "{site} is an open source project built by passionate people in their free time",
"6TfgXX": "{site} är ett projekt med öppen källkod byggt av passionerade personer på fritiden",
"6Yfvvp": "Skaffa en identifierare",
"6bgpn+": "Inte alla klienter stöder detta, kan du fortfarande få några zaps som om zap delning inte konfigurerades",
"6ewQqw": "Gillar ({n})",
"6uMqL1": "Obetald",
"7+Domh": "Anteckningar",
"7/h1jn": "After submitting the pin there may be a slight delay as we encrypt the key.",
"7/h1jn": "Efter att ha skickat in pin kan det finnas en liten fördröjning när vi krypterar nyckeln.",
"7BX/yC": "Konto växlare",
"7hp70g": "NIP-05",
"8/vBbP": "Delningar ({n})",
@ -108,7 +108,7 @@
"BOUMjw": "Inga nostr användare hittades för {twitterUsername}",
"BWpuKl": "Uppdatera",
"BcGMo+": "Anteckningar håller textinnehåll, den mest populära användningen av dessa anteckningar är att lagra \"tweet like\" meddelanden.",
"BjNwZW": "Nostr address (nip05)",
"BjNwZW": "Nostr adress (nip05)",
"C1LjMx": "Lightning donation",
"C5xzTC": "Premium",
"C81/uG": "Logga ut",
@ -116,7 +116,7 @@
"CHTbO3": "Det gick inte att ladda fakturan",
"CVWeJ6": "Trendande personer",
"CmZ9ls": "{n} tystad",
"CoVXRS": "Alternatively, you may choose to store your private key without a PIN by selecting 'Cancel.'",
"CoVXRS": "Alternativt kan du välja att lagra din privata nyckel utan PIN-kod genom att välja \"Avbryt\".",
"CsCUYo": "{n} sats",
"Cu/K85": "Översatt från {lang}",
"D+KzKd": "Zappa automatiskt varje anteckning när den är laddad",
@ -134,7 +134,7 @@
"EWyQH5": "Global",
"Ebl/B2": "Översätt till {lang}",
"EcZF24": "Anpassade reläer",
"EcfIwB": "Username is available",
"EcfIwB": "Användarnamnet är tillgängligt",
"EcglP9": "Nyckel",
"EjFyoR": "Donationsadress för On-chain",
"EnCOBJ": "Köpa",
@ -205,11 +205,11 @@
"MP54GY": "Plånbokens lösenord",
"MRp6Ly": "Twitter-användarnamn",
"MWTx65": "Förvald Sida",
"MiMipu": "Set as primary Nostr address (nip05)",
"MiMipu": "Ange som primär Nostr adress (nip05)",
"Mrpkot": "Betala för prenumeration",
"MuVeKe": "Köp nostr adress",
"MzRYWH": "Köper {item}",
"Mzizei": "Iris.to account",
"Mzizei": "Iris.to konto",
"N2IrpM": "Bekräfta",
"NAidKb": "Notifikationer",
"NAuFNH": "Du har redan en prenumeration av den här typen, vänligen förnya eller betala",
@ -222,17 +222,17 @@
"OEW7yJ": "Zaps",
"OKhRC6": "Dela",
"OLEm6z": "Okänt inloggningsfel",
"OQSOJF": "Get a free nostr address",
"OQSOJF": "Få en gratis nostr adress",
"OQXnew": "Din prenumeration är fortfarande aktiv, du kan inte förnya ännu",
"ORGv1Q": "Skapad",
"Oq/kVn": "Name-squatting and impersonation is not allowed. {site} and our partners reserve the right to terminate your handle (not your account - nobody can take that away) for violating this rule.",
"P/xrLk": "Secure your private key with a PIN, ensuring enhanced protection on {site}. You'll be prompted to enter this PIN each time you access the site.",
"Oq/kVn": "Namnslåss och personifiering är inte tillåtet. {site} och våra partners förbehåller sig rätten att avsluta ditt handtag (inte ditt konto - ingen kan ta bort det) för att ha brutit mot denna regel.",
"P/xrLk": "Säkra din privata nyckel med en PIN-kod som garanterar ett förbättrat skydd på {site}. Du uppmanas att ange denna PIN-kod varje gång du använder webbplatsen.",
"P61BTu": "Kopiera händelse JSON",
"P7FD0F": "System (standard)",
"P7nJT9": "Totalt idag (UTC): {amount} sats",
"PCSt5T": "Inställningar",
"PLSbmL": "Din mnemoniska lösenfras",
"PaN7t3": "Preview on {site}",
"PaN7t3": "Förhandsgranska på {site}",
"PamNxw": "Okänd filrubrik: {name}",
"Pe0ogR": "Tema",
"PrsIg7": "Reaktioner kommer att visas på varje sida om inga reaktioner inaktiveras",
@ -244,7 +244,7 @@
"R/6nsx": "Prenumeration",
"R81upa": "Personer du följer",
"RDZVQL": "Kontrollera",
"RSr2uB": "Username must only contain lowercase letters and numbers",
"RSr2uB": "Användarnamnet får bara innehålla gemener och siffror",
"RahCRH": "Förfallen",
"RfhLwC": "Av: {author}",
"RhDAoS": "Är du säker på att du vill radera {id}",
@ -252,7 +252,7 @@
"RoOyAh": "Reläer",
"Rs4kCE": "Bokmärke",
"RwFaYs": "Sortera",
"SLZGPn": "Enter a pin to encrypt your private key, you must enter this pin every time you open {site}.",
"SLZGPn": "Ange en pin för att kryptera din privata nyckel, du måste ange denna pin varje gång du öppnar {site}.",
"SMO+on": "Skicka zap till {name}",
"SOqbe9": "Uppdatera Lightning-adress",
"SP0+yi": "Köp Prenumeration",
@ -269,12 +269,12 @@
"UT7Nkj": "Ny chatt",
"UUPFlt": "Användare måste acceptera innehållsvarningen för att visa innehållet i din anteckning.",
"Up5U7K": "Blockera",
"UrKTqQ": "You have an active iris.to account",
"UrKTqQ": "Du har ett aktivt iris.to konto",
"VBadwB": "Hmm, kan inte hitta ett Key Manager tillägg.. prova att ladda om sidan.",
"VN0+Fz": "Saldo: {amount} sats",
"VOjC1i": "Välj vilken uppladdningstjänst du vill ladda upp bilagor till",
"VR5eHw": "Publik nyckel (npub/nprofile)",
"VcwrfF": "Yes please",
"VcwrfF": "Ja tack",
"VlJkSk": "{n} tystad",
"VnXp8Z": "Avatar",
"VvaJst": "Visa plånböcker",
@ -299,7 +299,7 @@
"ZKORll": "Aktivera nu",
"ZLmyG9": "Bidragsgivare",
"ZS+jRE": "Skicka zap-delning till",
"Zff6lu": "Username iris.to/<b>{name}</b> is reserved for you!",
"Zff6lu": "Användarnamnet iris.to/<b>{name}</b> är reserverat för dig!",
"Zr5TMx": "Profilinställning",
"a5UPxh": "Finansiera utvecklare och plattformar som tillhandahåller NIP-05 verifieringstjänster",
"a7TDNm": "Anteckningar kommer att strömmas i realtid in i global och antecknings fliken",
@ -312,7 +312,7 @@
"bfvyfs": "Anon",
"brAXSu": "Välj ett användarnamn",
"bxv59V": "Just nu",
"c+JYNI": "No thanks",
"c+JYNI": "Nej tack",
"c+oiJe": "Installera Tillägg",
"c35bj2": "Om du har en förfrågan om din NIP-05 beställning, vänligen DM {link}",
"c3g2hL": "Sänd igen",
@ -327,7 +327,7 @@
"d6CyG5": "Historik",
"d7d0/x": "LN Adress",
"dOQCL8": "Visnings namn",
"deEeEI": "Register",
"deEeEI": "Registrering",
"e61Jf3": "Kommer snart",
"e7VmYP": "Ange pin för att låsa upp din privata nyckel",
"e7qqly": "Markera alla som lästa",
@ -336,7 +336,7 @@
"eSzf2G": "En enda zap med {nIn} sats kommer att fördela {nOut} sats till zappoolen.",
"eXT2QQ": "Gruppchatt",
"fBI91o": "Zap",
"fBlba3": "Thanks for using {site}, please consider donating if you can.",
"fBlba3": "Tack för att du använder {site}, vänligen överväg att donera om du kan.",
"fOksnD": "Kan inte rösta eftersom LNURL-tjänsten inte stöder zaps",
"fWZYP5": "Fastnålad",
"filwqD": "Läs",
@ -376,9 +376,9 @@
"jzgQ2z": "{n} Reaktioner",
"k2veDA": "Skriv",
"k7sKNy": "Vår alldeles egna NIP-05 verifieringstjänst, hjälpa till att stödja utvecklingen av denna webbplats och få ett glänsande speciellt märke på vår webbplats!",
"kEZUR8": "Register an Iris username",
"kEZUR8": "Registrera ett användarnamn för Iris",
"kJYo0u": "{n,plural,one {}=0{{name} delade} other{{name} & {n} andra delade}}",
"kTLGM2": "{site} is designed to have a similar experience to Twitter.",
"kTLGM2": "{site} är utformat för att ha en liknande upplevelse som Twitter.",
"kaaf1E": "nu",
"kuPHYE": "{n,plural,one {}=0{{name} gillade} other{{name} & {n} andra gillade}}",
"l+ikU1": "Allting i {plan}",
@ -387,7 +387,7 @@
"lD3+8a": "Betala",
"lPWASz": "Snort nostr adress",
"lTbT3s": "Plånbokens lösenord",
"lVKH7C": "What is {site} and how does it work?",
"lVKH7C": "Vad är {site} och hur fungerar det?",
"lgg1KN": "konto sida",
"ll3xBp": "Bild proxy tjänst",
"lnaT9F": "Följer {n}",
@ -406,7 +406,7 @@
"nN9XTz": "Dela dina tankar med {link}",
"nOaArs": "Ställ in Profil",
"nWQFic": "Förnya",
"ncbgUU": "{site} is a Nostr UI, nostr is a decentralised protocol for saving and distributing \"notes\".",
"ncbgUU": "{site} är ett Nostr UI, nostr är ett decentraliserat protokoll för att spara och distribuera \"anteckningar\".",
"nn1qb3": "Era donationer är mycket uppskattade",
"nwZXeh": "{n} blockerad",
"o6Uy3d": "Endast den hemliga nyckeln kan användas för att publicera (signeringshändelser), allt annat loggar in dig i bara-läsa läge.",
@ -440,7 +440,7 @@
"rmdsT4": "{n} dagar",
"rrfdTe": "Detta är samma teknik som används av Bitcoin och har visat sig vara extremt säker.",
"rudscU": "Det gick inte att ladda följande, försök igen senare",
"rx1i0i": "Short link",
"rx1i0i": "Kort länk",
"sKDn4e": "Visa emblem",
"sUNhQE": "användare",
"sZQzjQ": "Misslyckades att tolka zapsplit: {input}",
@ -484,7 +484,7 @@
"y1Z3or": "Språk",
"yCLnBC": "LNURL or Lightning Adress",
"yCmnnm": "Läs global från",
"yNBPJp": "Help fund the development of {site}",
"yNBPJp": "Hjälp till att finansiera utvecklingen av {site}",
"zCb8fX": "Vikt",
"zFegDD": "Kontakt",
"zINlao": "Ägare",

View File

@ -29,6 +29,7 @@ if (appTitle === "iris") {
copyPatterns.push({ from: "public/iris/.well-known", to: ".well-known" });
} else {
copyPatterns.push({ from: "public/manifest.json" });
copyPatterns.push({ from: "public/snort/.well-known", to: ".well-known" });
}
const config = {

View File

@ -34,3 +34,8 @@ export const CashuRegex = /(cashuA[A-Za-z0-9_-]{0,10000}={0,3})/i;
* Regex to match any npub/nevent/naddr/nprofile/note
*/
export const MentionNostrEntityRegex = /@n(pub|profile|event|ote|addr|)1[acdefghjklmnpqrstuvwxyz023456789]+/g;
/**
* Regex to match markdown code content
*/
export const MarkdownCodeRegex = /(```.+?```)/gms;

View File

@ -1,13 +1,31 @@
import { unwrap } from "@snort/shared";
import { CashuRegex, FileExtensionRegex, HashtagRegex, InvoiceRegex, MentionNostrEntityRegex } from "./const";
import {
CashuRegex,
FileExtensionRegex,
HashtagRegex,
InvoiceRegex,
MarkdownCodeRegex,
MentionNostrEntityRegex,
} from "./const";
import { validateNostrLink } from "./nostr-link";
import { splitByUrl } from "./utils";
export interface ParsedFragment {
type: "text" | "link" | "mention" | "invoice" | "media" | "cashu" | "hashtag" | "custom_emoji" | "highlighted_text";
type:
| "text"
| "link"
| "mention"
| "invoice"
| "media"
| "cashu"
| "hashtag"
| "custom_emoji"
| "highlighted_text"
| "code_block";
content: string;
mimeType?: string;
language?: string;
}
export type Fragment = string | ParsedFragment;
@ -179,6 +197,31 @@ function extractCustomEmoji(fragments: Fragment[], tags: Array<Array<string>>) {
.flat();
}
function extractMarkdownCode(fragments: Fragment[]): (string | ParsedFragment)[] {
return fragments
.map(f => {
if (typeof f === "string") {
return f.split(MarkdownCodeRegex).map(i => {
if (i.startsWith("```") && i.endsWith("```")) {
const firstLineBreakIndex = i.indexOf("\n");
const lastLineBreakIndex = i.lastIndexOf("\n");
return {
type: "code_block",
content: i.substring(firstLineBreakIndex, lastLineBreakIndex),
language: i.substring(3, firstLineBreakIndex),
} as ParsedFragment;
} else {
return i;
}
});
}
return f;
})
.flat();
}
export function transformText(body: string, tags: Array<Array<string>>) {
let fragments = extractLinks([body]);
fragments = extractMentions(fragments);
@ -186,6 +229,7 @@ export function transformText(body: string, tags: Array<Array<string>>) {
fragments = extractInvoices(fragments);
fragments = extractCashuTokens(fragments);
fragments = extractCustomEmoji(fragments, tags);
fragments = extractMarkdownCode(fragments);
fragments = fragments
.map(a => {
if (typeof a === "string") {

View File

@ -2718,6 +2718,7 @@ __metadata:
emojilib: ^3.0.10
eslint: ^8.48.0
eslint-webpack-plugin: ^4.0.1
highlight.js: ^11.8.0
html-webpack-plugin: ^5.5.1
jest: ^29.5.0
jest-environment-jsdom: ^29.5.0
@ -7278,6 +7279,13 @@ __metadata:
languageName: node
linkType: hard
"highlight.js@npm:^11.8.0":
version: 11.8.0
resolution: "highlight.js@npm:11.8.0"
checksum: d2578a57aee7315946ff19379053fd0a28b127baabf7617ab1d28d62cdc4eaf3d75053569cb8479a5afdc7a68f1ba9a6c1d612d8ae399b4b9aa43093b4fb6831
languageName: node
linkType: hard
"hoist-non-react-statics@npm:^3.3.0, hoist-non-react-statics@npm:^3.3.2":
version: 3.3.2
resolution: "hoist-non-react-statics@npm:3.3.2"