mirror of
https://github.com/CorentinTh/it-tools.git
synced 2025-04-24 08:46:15 -04:00
Merge remote-tracking branch 'origin/main' into feat/image-converter
This commit is contained in:
commit
e9a55414d9
23 changed files with 663 additions and 54 deletions
11
.github/fern-banner.svg
vendored
Normal file
11
.github/fern-banner.svg
vendored
Normal file
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 62 KiB |
26
CHANGELOG.md
26
CHANGELOG.md
|
@ -2,6 +2,32 @@
|
|||
|
||||
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
||||
|
||||
## Version 2024.10.22-7ca5933
|
||||
|
||||
### Features
|
||||
- **new tool**: Regex Tester (and Cheatsheet) (#1030) (f5c4ab1)
|
||||
- **new tool**: Markdown to HTML (#916) (87984e2)
|
||||
- **new-tool**: add email normalizer (#1243) (318fb6e)
|
||||
- **new tools**: JSON to XML and XML to JSON (#1231) (f1a5489)
|
||||
- **lorem-ipsum**: add button to refresh text lorem-ipsum (#1213) (e1b4f9a)
|
||||
- **base64**: Base64 enhancements (#905) (30144aa)
|
||||
|
||||
### Bug fixes
|
||||
- **favorites**: store favorites regardless of languages (#1202) (7ca5933)
|
||||
- **emoji-picker**: debounced search input (#1181) (76a19d2)
|
||||
- **format-transformer**: set overflow for output area width (#787) (b430bae)
|
||||
- **jwt-parser**: prevent UI overflow on small screen (#1095) (dd4b7e6)
|
||||
|
||||
### Refactoring
|
||||
- **regex-tester**: better description (7251700)
|
||||
|
||||
### Chores
|
||||
- **sponsors**: fern sponsor banners (#1314) (f962c41)
|
||||
- **readme**: updated logos (#1294) (6709498)
|
||||
|
||||
### Documentation
|
||||
- **author**: updated author links (#1316) (1c35ac3)
|
||||
|
||||
## Version 2024.05.13-a0bc346
|
||||
|
||||
### Features
|
||||
|
|
|
@ -6,6 +6,10 @@
|
|||
|
||||
Useful tools for developer and people working in IT. [Have a look !](https://it-tools.tech).
|
||||
|
||||
## Sponsors
|
||||
|
||||
[](https://bit.ly/3zBl7DG)
|
||||
|
||||
## Functionalities and roadmap
|
||||
|
||||
Please check the [issues](https://github.com/CorentinTh/it-tools/issues) to see if some feature listed to be implemented.
|
||||
|
@ -113,7 +117,7 @@ It will create a directory in `src/tools` with the correct files, and a the impo
|
|||
|
||||
Big thanks to all the people who have already contributed!
|
||||
|
||||
[](https://github.com/corentinth/it-tools/graphs/contributors)
|
||||
[](https://github.com/corentinth/it-tools/graphs/contributors)
|
||||
|
||||
## Credits
|
||||
|
||||
|
|
|
@ -10,6 +10,7 @@ home:
|
|||
newestTools: Neueste Tools
|
||||
favoriteTools: Deine Lieblingstools
|
||||
allTools: Alle Tools
|
||||
favoritesDndToolTip: 'Ziehen und Ablegen, um Favoriten neu zu ordnen'
|
||||
subtitle: Praktische Tools für Entwickler
|
||||
toggleMenu: Menü umschalten
|
||||
home: Startseite
|
||||
|
@ -21,13 +22,13 @@ home:
|
|||
p1: Gib uns einen Stern auf
|
||||
githubRepository: IT-Tools GitHub-Repository
|
||||
p2: oder folge uns auf
|
||||
twitterAccount: IT-Tools Twitter-Konto
|
||||
twitterXAccount: IT-Tools X-Konto
|
||||
thankYou: Vielen Dank!
|
||||
nav:
|
||||
github: GitHub-Repository
|
||||
githubRepository: IT-Tools GitHub-Repository
|
||||
twitter: Twitter-Konto
|
||||
twitterAccount: IT-Tools Twitter-Konto
|
||||
twitterX: X-Konto
|
||||
twitterXAccount: IT-Tools X-Konto
|
||||
about: Über IT-Tools
|
||||
aboutLabel: Über
|
||||
darkMode: Dunkelmodus
|
||||
|
|
|
@ -3,6 +3,7 @@ home:
|
|||
newestTools: Newest tools
|
||||
favoriteTools: 'Your favorite tools'
|
||||
allTools: 'All the tools'
|
||||
favoritesDndToolTip: 'Drag and drop to reorder favorites'
|
||||
subtitle: 'Handy tools for developers'
|
||||
toggleMenu: 'Toggle menu'
|
||||
home: Home
|
||||
|
@ -14,13 +15,13 @@ home:
|
|||
p1: 'Give us a star on'
|
||||
githubRepository: 'IT-Tools GitHub repository'
|
||||
p2: 'or follow us on'
|
||||
twitterAccount: 'IT-Tools Twitter account'
|
||||
twitterXAccount: 'IT-Tools X account'
|
||||
thankYou: 'Thank you!'
|
||||
nav:
|
||||
github: 'GitHub repository'
|
||||
githubRepository: 'IT-Tools GitHub repository'
|
||||
twitter: 'Twitter account'
|
||||
twitterAccount: 'IT Tools Twitter account'
|
||||
twitterX: 'X account'
|
||||
twitterXAccount: 'IT Tools X account'
|
||||
about: 'About IT-Tools'
|
||||
aboutLabel: 'About'
|
||||
darkMode: 'Dark mode'
|
||||
|
|
|
@ -3,6 +3,7 @@ home:
|
|||
newestTools: Nuevas herramientas
|
||||
favoriteTools: 'Tus herramientas favoritas'
|
||||
allTools: 'Todas las herramientas'
|
||||
favoritesDndToolTip: 'Arrastra y suelta para reordenar favoritos'
|
||||
subtitle: 'Herramientas practicas para desarrolladores'
|
||||
toggleMenu: 'Toggle menu'
|
||||
home: Home
|
||||
|
@ -14,13 +15,13 @@ home:
|
|||
p1: 'Danos una estrella en'
|
||||
githubRepository: 'Repositorio de IT-Tools en GitHub'
|
||||
p2: 'o síguenos en'
|
||||
twitterAccount: 'Cuenta de twitter de IT-Tools'
|
||||
twitterXAccount: 'Cuenta de X de IT-Tools'
|
||||
thankYou: 'Muchas gracias!'
|
||||
nav:
|
||||
github: 'Repositorio en github'
|
||||
githubRepository: 'IT-Tools GitHub repository'
|
||||
twitter: 'Cuenta de Twitter'
|
||||
twitterAccount: 'Cuenta de twitter de IT Tools'
|
||||
twitterX: 'Cuenta de X'
|
||||
twitterXAccount: 'Cuenta de X de IT Tools'
|
||||
about: 'Sobre IT-Tools'
|
||||
aboutLabel: 'Sobre'
|
||||
darkMode: 'Modo obscuro'
|
||||
|
|
|
@ -3,6 +3,7 @@ home:
|
|||
newestTools: 'Les nouveaux outils'
|
||||
favoriteTools: 'Vos outils favoris'
|
||||
allTools: 'Tous les outils'
|
||||
favoritesDndToolTip: 'Faites glisser et déposez pour réordonner vos favoris'
|
||||
subtitle: 'Outils pour les développeurs'
|
||||
toggleMenu: 'Menu'
|
||||
home: Accueil
|
||||
|
@ -13,13 +14,13 @@ home:
|
|||
p1: 'Soutenez-nous avec une star sur'
|
||||
githubRepository: "le dépôt GitHub d'IT-Tools"
|
||||
p2: 'ou suivez-nous sur'
|
||||
twitterAccount: "le compte Twitter d'IT-Tools"
|
||||
twitterXAccount: "le compte X d'IT-Tools"
|
||||
thankYou: 'Merci !'
|
||||
nav:
|
||||
github: 'Dépôt GitHub'
|
||||
githubRepository: "Dépôt GitHub d'IT-Tools"
|
||||
twitter: 'Compte Twitter'
|
||||
twitterAccount: "Compte Twitter d'IT-Tools"
|
||||
twitterX: 'Compte X'
|
||||
twitterXAccount: "Compte X d'IT-Tools"
|
||||
about: "À propos d'IT-Tools"
|
||||
aboutLabel: 'À propos'
|
||||
darkMode: 'Mode sombre'
|
||||
|
|
394
locales/no.yml
Normal file
394
locales/no.yml
Normal file
|
@ -0,0 +1,394 @@
|
|||
home:
|
||||
categories:
|
||||
newestTools: Nyeste verktøy
|
||||
favoriteTools: 'Dine favoritt verktøy'
|
||||
allTools: 'Alle verktøyene'
|
||||
favoritesDndToolTip: 'Dra og slipp for å omordne favoritter'
|
||||
subtitle: 'Nyttige verktøy for utviklere'
|
||||
toggleMenu: 'Vekslemenmy'
|
||||
home: Hjem
|
||||
uiLib: 'UI Bib'
|
||||
support: 'Støtt utviklingen av IT-Tools'
|
||||
buyMeACoffee: 'Kjøp en kaffe til meg'
|
||||
follow:
|
||||
title: 'Liker du it-tools?'
|
||||
p1: 'Gi oss en stjerne på'
|
||||
githubRepository: 'IT-Tools GitHub-depotet'
|
||||
p2: 'eller følg oss på'
|
||||
twitterXAccount: 'IT-Tools sin X konto'
|
||||
thankYou: 'Tusen takk!'
|
||||
nav:
|
||||
github: 'GitHub-depot'
|
||||
githubRepository: 'IT-Tools GitHub-depot'
|
||||
twitterX: 'X konto'
|
||||
twitterXAccount: 'IT Tools X konto'
|
||||
about: 'Om IT-Tools'
|
||||
aboutLabel: 'Om'
|
||||
darkMode: 'Mørk modus'
|
||||
lightMode: 'Lys modus'
|
||||
mode: 'Veksle mørk/lys modus'
|
||||
about:
|
||||
content: >
|
||||
# Om IT-Tools
|
||||
|
||||
Denne vidunderlige nettsiden, laget med ❤ av [Corentin Thomasset](https://corentin.tech?utm_source=it-tools&utm_medium=about) , sammenstiller nyttige verktøy for utviklere og folk som jobber innen IT. Hvis du finner dette nyttig, Del det gjerne med andre som du tror kan få nytte av dette, og ikke glem å lage et bokmerke!
|
||||
|
||||
IT Tools er åpen kildekode (under MIT lisensen) og gratis, og det vil det alltid være, men det koster å drifte og å fornye domenet. Hvis du ønsker å støtte arbeidet mitt, og motivere meg til å legge til flere verktøy, gjerne støtt meg ved å [sponse meg](https://www.buymeacoffee.com/cthmsst).
|
||||
|
||||
## Teknologier
|
||||
|
||||
IT Tools er laget i Vue.js (Vue 3) med Naive UI komponent bibliotektet og er hosted og kontinuerlig deployet av Vercel. Tredjeparts åpen-kildekode biblioteker er brukt i noen verktøy, du kan finne den komplette listen i [package.json](https://github.com/CorentinTh/it-tools/blob/main/package.json) filen i depoet.
|
||||
|
||||
## Funnet en feil? Et verktøy som mangler?
|
||||
|
||||
Hvis du trenger et verktøy som foreløpig ikke er tilgjengelig her, og du tenker det kan være nyttig for andre, så er du velkommen til å legge til en funksjonsforespørsel i [problem seksjonen](https://github.com/CorentinTh/it-tools/issues/new/choose) i github-depotet.
|
||||
|
||||
Og hvis du har funnet en feil, eller noe ikke oppfører seg som forventet, vennligst send inn en feilrapport i [problem seksjonen](https://github.com/CorentinTh/it-tools/issues/new/choose) i github-depotet.
|
||||
|
||||
404:
|
||||
notFound: '404 ikke funnet'
|
||||
sorry: 'Beklager, denne siden ser ikke ut til å eksistere'
|
||||
maybe: 'Kanskje informasjonskapslene oppfører seg rart, prøvd en tvungen oppfriskning?'
|
||||
backHome: 'Tilbake til start'
|
||||
favoriteButton:
|
||||
remove: 'Fjern fra favoritter'
|
||||
add: 'Legg til favoritter'
|
||||
toolCard:
|
||||
new: Ny
|
||||
search:
|
||||
label: Søk
|
||||
tools:
|
||||
categories:
|
||||
favorite-tools: 'Dine favoritt verktøy'
|
||||
crypto: Krypto
|
||||
converter: Konvertering
|
||||
web: Web
|
||||
images and videos: 'Bilder & Videoer'
|
||||
development: Utvikling
|
||||
network: Nettverk
|
||||
math: Matte
|
||||
measurement: Måling
|
||||
text: Tekst
|
||||
data: Data
|
||||
|
||||
password-strength-analyser:
|
||||
title: Analyseverktøy for passordstyrke
|
||||
description: Oppdag styrken av passordet ditt med dette kun-klient-maskin passordstyrke analyse verktøyet og se den estimerte knekketiden.
|
||||
|
||||
chronometer:
|
||||
title: Kronometer
|
||||
description: Overvåk varigheten av noe. I bunn og grunn et kronometer med enkle funksjoner.
|
||||
|
||||
token-generator:
|
||||
title: Token generator
|
||||
description: Generer en tilfeldig streng med store og/eller små bokstaver, siffer og/eller symboler.
|
||||
|
||||
uppercase: Store bokstaver (ABC...)
|
||||
lowercase: Små bokstaver (abc...)
|
||||
numbers: Siffer (123...)
|
||||
symbols: Symboler (!-;...)
|
||||
length: Lengde
|
||||
tokenPlaceholder: 'Tokenet...'
|
||||
copied: Tokenet er kopiert til utklippstavlen.
|
||||
button:
|
||||
copy: Kopier
|
||||
refresh: Oppfrisk
|
||||
percentage-calculator:
|
||||
title: Prosent kalkulator
|
||||
description: Beregn enkelt prosenter fra en verdi til en annen, eller fra en prosent til en verdi.
|
||||
|
||||
svg-placeholder-generator:
|
||||
title: SVG plassholder generator
|
||||
description: Generer svg bilder til å bruke som plassholder i applikasjonen din.
|
||||
|
||||
json-to-csv:
|
||||
title: JSON til CSV
|
||||
description: Konverter JSON til CSV med automatisk oppdagelse av headeren.
|
||||
|
||||
camera-recorder:
|
||||
title: Kameraopptak
|
||||
description: Ta et bilde eller spill inn en video med webkamera eller kameraet ditt.
|
||||
|
||||
keycode-info:
|
||||
title: Tastekode info
|
||||
description: Finn javascript tastekode, kode, plassering og modifikatorer av hvilken som helst tast.
|
||||
|
||||
emoji-picker:
|
||||
title: Emoji velger
|
||||
description: Klipp og lim emojis og få unicode og kode verdien av hver emoji.
|
||||
|
||||
color-converter:
|
||||
title: Farge konverter
|
||||
description: Konverter farger mellom de forskjellige formatene (hex, rgb, hsl og css navn).
|
||||
|
||||
bcrypt:
|
||||
title: Bcrypt
|
||||
description: Hash og sammenlign tekst ved hjelp av bcrypt. Bcrypt er en passord-hashings funksjon basert på Blowfish cipher.
|
||||
|
||||
crontab-generator:
|
||||
title: Crontab generator
|
||||
description: Verifiser og generer crontab og få den mennesklig leselige beskrivelsen av cron timeplanen.
|
||||
|
||||
http-status-codes:
|
||||
title: HTTP status koder
|
||||
description: Liste over alle HTTP status koder, navnet dems, og betydningen.
|
||||
|
||||
sql-prettify:
|
||||
title: SQL forskjønning and format
|
||||
description: Formater og forskjønn SQL spørringene dine (den støtter forskjellige SQL dialekter).
|
||||
|
||||
benchmark-builder:
|
||||
title: Bygg en referansemåler
|
||||
description: Sammenlign enkelt kjøretiden av oppgaver med denne enkle referansemåls byggeren.
|
||||
|
||||
git-memo:
|
||||
title: Git jukselapp
|
||||
description: Git er en desentralisert versjons håndterings programvare. Med denne jukselappen vil du få kjapp tilgang til de vanligste kommandoene.
|
||||
|
||||
slugify-string:
|
||||
title: Slugify streng
|
||||
description: Lag en trygg url, filbane eller id.
|
||||
|
||||
encryption:
|
||||
title: Krypter / decrypter tekst
|
||||
description: Krypter klartekst og dekrypter ciphertekst ved bruk av krypteringsalgoritmer som AES, TripleDES, Rabbit eller RC4.
|
||||
|
||||
random-port-generator:
|
||||
title: Tilfeldig port generator
|
||||
description: Generer tilfeldige portnumre utenfor scopet av "kjente" porter (0-1023).
|
||||
|
||||
yaml-prettify:
|
||||
title: YAML forskjønning og formatering
|
||||
description: Forskjønn YAML strengene dine til et lettlest format.
|
||||
|
||||
eta-calculator:
|
||||
title: ETA kalkulator
|
||||
description: En ETA (Estimert Tid for Ankomst) kalkulator for å anslå den sannsynelige slutt tiden for en oppgave, for eksempel, slutttiden og varigheten av en filnedlastning.
|
||||
|
||||
roman-numeral-converter:
|
||||
title: Romertall konverter
|
||||
description: Konverter romertall til tall eller konverter tall til romertall.
|
||||
|
||||
hmac-generator:
|
||||
title: Hmac generator
|
||||
description: Beregn en hash-basert meldings authentiserings kode (HMAC) ved bruk av en hemmelig nøkkel og din foretrukne hashings funksjon.
|
||||
|
||||
bip39-generator:
|
||||
title: BIP39 nøkkelords generator
|
||||
description: Generer et BIP39 nøkkelord fra en eksisterende eller tilfeldig huskesetning, eller få ut en huskesetning fra nøkkelordet.
|
||||
|
||||
base64-file-converter:
|
||||
title: Base64 fil konverter
|
||||
description: Konverter en base64 streng til fil eller en fil, bilde til en base64 representasjon.
|
||||
|
||||
list-converter:
|
||||
title: Liste konverterer
|
||||
description: Dette verktøyet kan prosessere kolonnebasert data og foreta forskjellige endringer (transposering, legge til prefix og suffix, reversere lister, sortere lister, gjøre om til små bokstaver, trunkere verdier) på hver rad.
|
||||
|
||||
base64-string-converter:
|
||||
title: Base64 string kode/dekoder
|
||||
description: Enkelt kode eller dekode en tekststreng til base64 representasjonen av strengen.
|
||||
|
||||
toml-to-yaml:
|
||||
title: TOML til YAML
|
||||
description: Parser og konverter TOML til YAML.
|
||||
|
||||
math-evaluator:
|
||||
title: Matematikkevaluator
|
||||
description: En Kalkulator for å evaluere matematiske uttrykk. Du kan bruke funksjoner som sqrt, cos, sin, abs, etc.
|
||||
|
||||
json-to-yaml-converter:
|
||||
title: JSON til YAML konverterer
|
||||
description: Enkelt konverter JSON til YAML med dette verktøyet.
|
||||
|
||||
url-parser:
|
||||
title: URL analyse
|
||||
description: Parsere en URL ned til bestanddelene (protokoll, opprinnelse, parametre, port, brukernavn-passord, ...).
|
||||
|
||||
iban-validator-and-parser:
|
||||
title: IBAN validering og analysering
|
||||
description: Valider og parser IBAN numre. Sjekk om et IBAN er gyldig og få landet, BBAN, om det er en QR-IBAN og IBAN i et vennlig format.
|
||||
|
||||
user-agent-parser:
|
||||
title: User-agent analysering
|
||||
description: Detekter og parser nettleser, motor, OS, CPU, og enhet type/modell fra en user-agent tekst streng.
|
||||
|
||||
numeronym-generator:
|
||||
title: Numeronym generator
|
||||
description: Et numeronym er et ord hvor et nummer er brukt til å lage en forkortelse. For eksempel, "i18n" er et numeronym for "internasjonalisering" hvor 18 står for antall bokstaver mellom første bokstaven i og den siste bokstaven n i ordet.
|
||||
|
||||
case-converter:
|
||||
title: Bokstavkonvertering
|
||||
description: Formater bokstavene med store eller små bokstaver, samt andre format.
|
||||
|
||||
html-entities:
|
||||
title: HTML streng rensing
|
||||
description: Rens bort eller omsvøp HTML entiteter (erstatt tegn som <,>, &, " and \' med deres HTML versjon).
|
||||
|
||||
json-prettify:
|
||||
title: JSON forskjønning og formatering
|
||||
description: Forskjønn JSON strenger til et lettlest format.
|
||||
|
||||
docker-run-to-docker-compose-converter:
|
||||
title: Docker run til Docker compose konverter
|
||||
description: Konverter "docker run" kommandoer til docker-compose filer!
|
||||
|
||||
mac-address-lookup:
|
||||
title: MAC address oppslagsverk
|
||||
description: Finn forhandler og produsent basert på MAC adressen.
|
||||
|
||||
mime-types:
|
||||
title: MIME typer
|
||||
description: Konverter MIME typer til fil utvidelser og visa-versa.
|
||||
|
||||
toml-to-json:
|
||||
title: TOML til JSON
|
||||
description: Parser og konverter TOML til JSON.
|
||||
|
||||
lorem-ipsum-generator:
|
||||
title: Lorem ipsum generator
|
||||
description: Lorem ipsum er brukt som plassholder tekst, vanligvis brukt til å demonstrere den visuelle formen av et dokument eller font-type uten å måtte ha meningsfult innhold.
|
||||
|
||||
qrcode-generator:
|
||||
title: QR Kode generator
|
||||
description: Generer og last ned en QR kode til en URL (eller ren tekst), og tilpass bakgrunns og forgrunns farger.
|
||||
|
||||
wifi-qrcode-generator:
|
||||
title: WiFi QR Kode generator
|
||||
description: Generer og last ned QR koder for rask tilkobling til wifi nettverket.
|
||||
|
||||
xml-formatter:
|
||||
title: XML formaterer
|
||||
description: Forskjønn en XML streng til et lettlest format.
|
||||
|
||||
temperature-converter:
|
||||
title: Temperatur konverter
|
||||
description: Temperatur konversjoner mellom Kelvin, Celsius, Fahrenheit, Rankine, Delisle, Newton, Réaumur, og Rømer.
|
||||
|
||||
chmod-calculator:
|
||||
title: Chmod kalkulator
|
||||
description: Beregn chmod tillatelser og kommandoer med denne chmod kalkulatoren.
|
||||
|
||||
rsa-key-pair-generator:
|
||||
title: RSA nøkkelpar generator
|
||||
description: Generer et nytt tilfeldig RSA privat og offentlig pem sertifikat nøkkel par.
|
||||
|
||||
html-wysiwyg-editor:
|
||||
title: HTML WYSIWYG editor
|
||||
description: Online, funksjonsrik WYSIWYG HTML editor som genererer kildekoden for innholdet øyeblikkelig.
|
||||
|
||||
yaml-to-toml:
|
||||
title: YAML til TOML
|
||||
description: Parser og konverter YAML til TOML.
|
||||
|
||||
mac-address-generator:
|
||||
title: MAC adresse generator
|
||||
description: Sett inn antall og prefix. MAC addressene blir generert i ønsket format
|
||||
|
||||
json-diff:
|
||||
title: JSON diff
|
||||
description: Sammenlign to JSON objekter og finn forskjellene mellom dem.
|
||||
|
||||
jwt-parser:
|
||||
title: JWT parser
|
||||
description: Parse og dekode et JSON Web Token (jwt) og vis innholdet.
|
||||
|
||||
date-converter:
|
||||
title: Dato-tid konverter
|
||||
description: Konverter dato og tid til forskjellige formater.
|
||||
|
||||
phone-parser-and-formatter:
|
||||
title: Telefon format og parserer
|
||||
description: Parser, valider og formater telefon numre. få innformasjonen om telefon nummeret, slik som landskoden, type etc.
|
||||
|
||||
ipv4-subnet-calculator:
|
||||
title: IPv4 subnet kalkulator
|
||||
description: Parser IPv4 CIDR blokker of åf all info du trenger om subnettet.
|
||||
|
||||
og-meta-generator:
|
||||
title: Open graph meta generator
|
||||
description: Generer open-graph og SoMe HTML meta tagger til nettsiden din.
|
||||
|
||||
ipv6-ula-generator:
|
||||
title: IPv6 ULA generator
|
||||
description: Generer din egen lokale, ikke-rutbare IP adresse til nettverket ditt i henhold til RFC4193.
|
||||
|
||||
hash-text:
|
||||
title: Hash tekst
|
||||
description: 'Hash en tekst streng med en av algoritmene : MD5, SHA1, SHA256, SHA224, SHA512, SHA384, SHA3 eller RIPEMD160'
|
||||
|
||||
json-to-toml:
|
||||
title: JSON til TOML
|
||||
description: Parser og konverter JSON til TOML.
|
||||
|
||||
device-information:
|
||||
title: Enhets informasjon
|
||||
description: Få informasjon om din nåværende enhet (skjermstørrelse, piksel-forhold, user agent, etc.)
|
||||
|
||||
pdf-signature-checker:
|
||||
title: PDF signatur sjekker
|
||||
description: Bekreft signaturen til en PDF fil. En signert PDF fil inneholder en eller flere signaturer som kan bli brukt til å bestemme om en fil har blitt endret etter at den var signert.
|
||||
|
||||
json-minify:
|
||||
title: JSON minifiser
|
||||
description: Minifiser og komprimer JSON ved å fjerne unødvendige mellomrom.
|
||||
|
||||
ulid-generator:
|
||||
title: ULID generator
|
||||
description: Generer tilfeldig Universell Unik Leksikografisk Sorterbar Identifikator (ULID).
|
||||
|
||||
string-obfuscator:
|
||||
title: Streng obfuskator
|
||||
description: Obfusker en streng (som en hemmelighet, en IBAN, eller et token) og gjør den delbar og identifiserbar uten å vise innholdet.
|
||||
|
||||
base-converter:
|
||||
title: Heltalls konverter
|
||||
description: Konverter et heltall mellom forskjellige baser (desimal, hexadesimal, binær, oktal, base64, etc.)
|
||||
|
||||
yaml-to-json-converter:
|
||||
title: YAML til JSON konverter
|
||||
description: Konverterl YAML til JSON.
|
||||
|
||||
uuid-generator:
|
||||
title: UUIDs generator
|
||||
description: En universell Unik Identifikator (UUID) er et 128-bit nummer, brukt til å identifisere informasjon i datasystemer.
|
||||
|
||||
ipv4-address-converter:
|
||||
title: IPv4 adresse konverter
|
||||
description: Konverter en IPv4 adresse til desimal, binær, hexadesimal, eller en IPv6 representasjon.
|
||||
|
||||
text-statistics:
|
||||
title: Tekst statistikk
|
||||
description: Få informasjonen om en tekst, antall karakterer, antall ord, størrelsen i bytes, etc.
|
||||
|
||||
text-to-nato-alphabet:
|
||||
title: Tekst til NATO alfabetet
|
||||
description: Transformer teksten til det NATO fonetiske alfabetet for muntlig gjengivelse.
|
||||
|
||||
basic-auth-generator:
|
||||
title: Basic auth generator
|
||||
description: Generer en base64 basic auth header fra et brukernavn og passord.
|
||||
|
||||
text-to-unicode:
|
||||
title: Tekst til Unicode
|
||||
description: Parser og konverter tekst til unicode og visa-versa
|
||||
|
||||
ipv4-range-expander:
|
||||
title: IPv4 range utvider
|
||||
description: Gitt en start og en slutt IPv4 adresse, kalkulerer dette verktøyet et gyldig IPv4 subnet sammen med sin CIDR notasjon.
|
||||
|
||||
text-diff:
|
||||
title: Tekst diff
|
||||
description: Sammenlign to tekster og vis forskjellen mellom dem.
|
||||
|
||||
otp-generator:
|
||||
title: OTP kode generator
|
||||
description: Generer og valider tidsbasert OTP (one time password) for multi-faktor autentisering.
|
||||
|
||||
url-encoder:
|
||||
title: Kode/dekode URL-formaterte strenger
|
||||
description: Kode tekst til URL-kodet format (også kjent som "prosent-kodet"), eller dekode fra det.
|
||||
|
||||
text-to-binary:
|
||||
title: Tekst til ASCII binært
|
||||
description: Konverter tekst til sin ASCII binære representasjon og visa-versa.
|
|
@ -3,6 +3,7 @@ home:
|
|||
newestTools: 'Novas ferramentas'
|
||||
favoriteTools: 'Suas ferramentas favoritas'
|
||||
allTools: 'Todas as ferramentas'
|
||||
favoritesDndToolTip: 'Arraste e solte para reordenar favoritos'
|
||||
subtitle: 'Ferraentas úteis para desenvolvedores'
|
||||
toggleMenu: 'Menu'
|
||||
home: 'Início'
|
||||
|
@ -14,13 +15,13 @@ home:
|
|||
p1: 'Dê uma estrela no'
|
||||
githubRepository: 'repositório do IT-Tools no GitHub'
|
||||
p2: 'ou siga nossa'
|
||||
twitterAccount: 'conta IT-Tools no Twitter'
|
||||
twitterXAccount: 'conta IT-Tools no X'
|
||||
thankYou: 'Obrigado !'
|
||||
nav:
|
||||
github: 'Repositório no GitHub'
|
||||
githubRepository: 'repositório do IT-Tools no GitHub'
|
||||
twitter: 'Conta no Twitter'
|
||||
twitterAccount: 'conta do IT Tools no Twitter'
|
||||
twitterX: 'Conta no X'
|
||||
twitterXAccount: 'conta do IT Tools no X'
|
||||
about: 'Sobre o IT-Tools'
|
||||
aboutLabel: 'Sobre'
|
||||
darkMode: 'Modo Escuro'
|
||||
|
|
|
@ -3,6 +3,7 @@ home:
|
|||
newestTools: Найновіші інструменти
|
||||
favoriteTools: 'Ваші улюблені інструменти'
|
||||
allTools: 'Усі інструменти'
|
||||
favoritesDndToolTip: 'Перетягніть і відпустіть, щоб змінити порядок улюблених'
|
||||
subtitle: 'Зручні інструменти для розробників'
|
||||
toggleMenu: 'Перемикання меню'
|
||||
home: Головна
|
||||
|
@ -14,13 +15,13 @@ home:
|
|||
p1: 'Додайте нам зірку на'
|
||||
githubRepository: 'GitHub-репозиторій IT-Tools'
|
||||
p2: 'або слідкуйте за нами на'
|
||||
twitterAccount: 'Твіттер-акаунт IT-Tools'
|
||||
twitterXAccount: 'X-акаунт IT-Tools'
|
||||
thankYou: 'Дякуємо!'
|
||||
nav:
|
||||
github: 'GitHub-репозиторій'
|
||||
githubRepository: 'GitHub-репозиторій IT-Tools'
|
||||
twitter: 'Твіттер'
|
||||
twitterAccount: 'Твіттер-акаунт IT-Tools'
|
||||
twitterX: 'X'
|
||||
twitterXAccount: 'X-акаунт IT-Tools'
|
||||
about: 'Про IT-Tools'
|
||||
aboutLabel: 'Про нас'
|
||||
darkMode: 'Темний режим'
|
||||
|
|
|
@ -3,6 +3,7 @@ home:
|
|||
newestTools: Công cụ mới nhất
|
||||
favoriteTools: 'Công cụ yêu thích của bạn'
|
||||
allTools: 'Tất cả công cụ'
|
||||
favoritesDndToolTip: 'Kéo thả để sắp xếp lại yêu thích'
|
||||
subtitle: 'Công cụ cho nhà phát triển.'
|
||||
toggleMenu: 'Chuyển đổi menu'
|
||||
home: Trang chủ
|
||||
|
@ -14,13 +15,13 @@ home:
|
|||
p1: 'Hãy cho chúng tôi một ngôi sao trên'
|
||||
githubRepository: 'Kho GitHub IT-Tools'
|
||||
p2: 'hoặc theo dõi chúng tôi trên'
|
||||
twitterAccount: 'Tài khoản Twitter IT-Tools'
|
||||
twitterXAccount: 'Tài khoản X IT-Tools'
|
||||
thankYou: 'Cảm ơn bạn!'
|
||||
nav:
|
||||
github: 'Kho GitHub'
|
||||
githubRepository: 'Kho GitHub IT-Tools'
|
||||
twitter: 'Tài khoản Twitter'
|
||||
twitterAccount: 'Tài khoản Twitter IT Tools'
|
||||
twitterX: 'Tài khoản X'
|
||||
twitterXAccount: 'Tài khoản X IT Tools'
|
||||
about: 'Về IT-Tools'
|
||||
aboutLabel: 'Giới thiệu'
|
||||
darkMode: 'Chế độ tối'
|
||||
|
|
|
@ -3,6 +3,7 @@ home:
|
|||
newestTools: '最新工具'
|
||||
favoriteTools: '我的收藏'
|
||||
allTools: '全部工具'
|
||||
favoritesDndToolTip: '拖放重新排列收藏夹'
|
||||
subtitle: '助力开发人员和 IT 工作者'
|
||||
toggleMenu: '切换菜单'
|
||||
home: '主页'
|
||||
|
@ -14,13 +15,13 @@ home:
|
|||
p1: '给我们 Star'
|
||||
githubRepository: 'GitHub 仓库'
|
||||
p2: '关注我们的'
|
||||
twitterAccount: 'Twitter'
|
||||
twitterXAccount: 'IT-Tools X 账号'
|
||||
thankYou: '感谢您的支持!'
|
||||
nav:
|
||||
github: 'GitHub 仓库'
|
||||
githubRepository: 'GitHub 仓库'
|
||||
twitter: 'Twitter 账号'
|
||||
twitterAccount: 'Twitter 账号'
|
||||
twitterX: 'Twitter 账号'
|
||||
twitterXAccount: 'IT-Tools X 账号'
|
||||
about: '关于 IT-Tools'
|
||||
aboutLabel: '关于'
|
||||
darkMode: '深色模式'
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "it-tools",
|
||||
"version": "2024.5.13-a0bc346",
|
||||
"version": "2024.10.22-7ca5933",
|
||||
"packageManager": "pnpm@8.15.3",
|
||||
"description": "Collection of handy online tools for developers, with great UX. ",
|
||||
"author": "Corentin Th <corentin.thomasset74+it-tools@gmail.com> (https://corentin.tech)",
|
||||
|
@ -40,6 +40,7 @@
|
|||
"@it-tools/oggen": "^1.3.0",
|
||||
"@regexper/render": "^1.0.0",
|
||||
"@sindresorhus/slugify": "^2.2.1",
|
||||
"@tabler/icons-vue": "^3.20.0",
|
||||
"@tiptap/pm": "2.1.6",
|
||||
"@tiptap/starter-kit": "2.1.6",
|
||||
"@tiptap/vue-3": "2.0.3",
|
||||
|
@ -102,6 +103,7 @@
|
|||
"vue-shadow-dom": "^4.2.0",
|
||||
"vue-tsc": "^1.8.1",
|
||||
"webp-converter-browser": "^1.0.4",
|
||||
"vuedraggable": "^4.1.0",
|
||||
"xml-formatter": "^3.3.2",
|
||||
"xml-js": "^1.6.11",
|
||||
"yaml": "^2.2.1"
|
||||
|
|
32
pnpm-lock.yaml
generated
32
pnpm-lock.yaml
generated
|
@ -17,6 +17,9 @@ dependencies:
|
|||
'@sindresorhus/slugify':
|
||||
specifier: ^2.2.1
|
||||
version: 2.2.1
|
||||
'@tabler/icons-vue':
|
||||
specifier: ^3.20.0
|
||||
version: 3.20.0(vue@3.3.4)
|
||||
'@tiptap/pm':
|
||||
specifier: 2.1.6
|
||||
version: 2.1.6
|
||||
|
@ -200,6 +203,9 @@ dependencies:
|
|||
vue-tsc:
|
||||
specifier: ^1.8.1
|
||||
version: 1.8.1(typescript@5.2.2)
|
||||
vuedraggable:
|
||||
specifier: ^4.1.0
|
||||
version: 4.1.0(vue@3.3.4)
|
||||
webp-converter-browser:
|
||||
specifier: ^1.0.4
|
||||
version: 1.0.4
|
||||
|
@ -2665,6 +2671,19 @@ packages:
|
|||
resolution: {integrity: sha512-BjJ/7vWNowlX3Z8O4ywT58DqbNRyYlkk6Yz/D13aB7hGmfQTvGX4Tkgtm/ApYlu9M7lCQi15xUEidqMUmdMYwg==}
|
||||
dev: false
|
||||
|
||||
/@tabler/icons-vue@3.20.0(vue@3.3.4):
|
||||
resolution: {integrity: sha512-kymV0q+bFNqU6bmdlnfK9ru88xFydYIs+jfe0160bLTmcq94ZxcLfXO5JLMq5kjntUSNb4fBvGk0mXB7aDCYnA==}
|
||||
peerDependencies:
|
||||
vue: '>=3.0.1'
|
||||
dependencies:
|
||||
'@tabler/icons': 3.20.0
|
||||
vue: 3.3.4
|
||||
dev: false
|
||||
|
||||
/@tabler/icons@3.20.0:
|
||||
resolution: {integrity: sha512-nXSeUzsCOxX/Of+kdUVQfxL9bG+ck8XCWNf9dGSpE+nhVexRwk/4HiDQDxFDysfT7vfgSut6GXnrZsU5M5dSlA==}
|
||||
dev: false
|
||||
|
||||
/@tiptap/core@2.1.12(@tiptap/pm@2.1.6):
|
||||
resolution: {integrity: sha512-ZGc3xrBJA9KY8kln5AYTj8y+GDrKxi7u95xIl2eccrqTY5CQeRu6HRNM1yT4mAjuSaG9jmazyjGRlQuhyxCKxQ==}
|
||||
peerDependencies:
|
||||
|
@ -8237,6 +8256,10 @@ packages:
|
|||
tslib: 2.5.0
|
||||
dev: false
|
||||
|
||||
/sortablejs@1.14.0:
|
||||
resolution: {integrity: sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w==}
|
||||
dev: false
|
||||
|
||||
/source-map-js@1.0.2:
|
||||
resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
|
@ -9366,6 +9389,15 @@ packages:
|
|||
'@vue/server-renderer': 3.3.4(vue@3.3.4)
|
||||
'@vue/shared': 3.3.4
|
||||
|
||||
/vuedraggable@4.1.0(vue@3.3.4):
|
||||
resolution: {integrity: sha512-FU5HCWBmsf20GpP3eudURW3WdWTKIbEIQxh9/8GE806hydR9qZqRRxRE3RjqX7PkuLuMQG/A7n3cfj9rCEchww==}
|
||||
peerDependencies:
|
||||
vue: ^3.0.1
|
||||
dependencies:
|
||||
sortablejs: 1.14.0
|
||||
vue: 3.3.4
|
||||
dev: false
|
||||
|
||||
/vueuc@0.4.51(vue@3.3.4):
|
||||
resolution: {integrity: sha512-pLiMChM4f+W8czlIClGvGBYo656lc2Y0/mXFSCydcSmnCR1izlKPGMgiYBGjbY9FDkFG8a2HEVz7t0DNzBWbDw==}
|
||||
peerDependencies:
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<script setup lang="ts">
|
||||
import { BrandGithub, BrandTwitter, InfoCircle, Moon, Sun } from '@vicons/tabler';
|
||||
import { IconBrandGithub, IconBrandX, IconInfoCircle, IconMoon, IconSun } from '@tabler/icons-vue';
|
||||
import { useStyleStore } from '@/stores/style.store';
|
||||
|
||||
const styleStore = useStyleStore();
|
||||
|
@ -16,32 +16,32 @@ const { isDarkTheme } = toRefs(styleStore);
|
|||
rel="noopener noreferrer"
|
||||
:aria-label="$t('home.nav.githubRepository')"
|
||||
>
|
||||
<n-icon size="25" :component="BrandGithub" />
|
||||
<n-icon size="25" :component="IconBrandGithub" />
|
||||
</c-button>
|
||||
</c-tooltip>
|
||||
|
||||
<c-tooltip :tooltip="$t('home.nav.twitter')" position="bottom">
|
||||
<c-tooltip :tooltip="$t('home.nav.twitterX')" position="bottom">
|
||||
<c-button
|
||||
circle
|
||||
variant="text"
|
||||
href="https://twitter.com/ittoolsdottech"
|
||||
href="https://x.com/ittoolsdottech"
|
||||
rel="noopener"
|
||||
target="_blank"
|
||||
:aria-label="$t('home.nav.twitterAccount')"
|
||||
:aria-label="$t('home.nav.twitterXAccount')"
|
||||
>
|
||||
<n-icon size="25" :component="BrandTwitter" />
|
||||
<n-icon size="25" :component="IconBrandX" />
|
||||
</c-button>
|
||||
</c-tooltip>
|
||||
|
||||
<c-tooltip :tooltip="$t('home.nav.about')" position="bottom">
|
||||
<c-button circle variant="text" to="/about" :aria-label="$t('home.nav.aboutLabel')">
|
||||
<n-icon size="25" :component="InfoCircle" />
|
||||
<n-icon size="25" :component="IconInfoCircle" />
|
||||
</c-button>
|
||||
</c-tooltip>
|
||||
<c-tooltip :tooltip="isDarkTheme ? $t('home.nav.lightMode') : $t('home.nav.darkMode')" position="bottom">
|
||||
<c-button circle variant="text" :aria-label="$t('home.nav.mode')" @click="() => styleStore.toggleDark()">
|
||||
<n-icon v-if="isDarkTheme" size="25" :component="Sun" />
|
||||
<n-icon v-else size="25" :component="Moon" />
|
||||
<n-icon v-if="isDarkTheme" size="25" :component="IconSun" />
|
||||
<n-icon v-else size="25" :component="IconMoon" />
|
||||
</c-button>
|
||||
</c-tooltip>
|
||||
</template>
|
||||
|
|
|
@ -59,6 +59,12 @@ export const config = figue({
|
|||
default: false,
|
||||
env: 'VITE_SHOW_BANNER',
|
||||
},
|
||||
showSponsorBanner: {
|
||||
doc: 'Show the sponsor banner',
|
||||
format: 'boolean',
|
||||
default: false,
|
||||
env: 'VITE_SHOW_SPONSOR_BANNER',
|
||||
},
|
||||
})
|
||||
.loadEnv({
|
||||
...import.meta.env,
|
||||
|
|
|
@ -40,7 +40,7 @@ const toolDescription = computed<string>(() => t(`tools.${i18nKey.value}.descrip
|
|||
</n-h1>
|
||||
|
||||
<div>
|
||||
<FavoriteButton :tool="{ name: route.meta.name } as Tool" />
|
||||
<FavoriteButton :tool="{ name: route.meta.name, path: route.path } as Tool" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -6,6 +6,7 @@ const localesLong: Record<string, string> = {
|
|||
de: 'Deutsch',
|
||||
es: 'Español',
|
||||
fr: 'Français',
|
||||
no: 'Norwegian',
|
||||
pt: 'Português',
|
||||
ru: 'Русский',
|
||||
uk: 'Українська',
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
<script setup lang="ts">
|
||||
import { Heart } from '@vicons/tabler';
|
||||
import { IconDragDrop, IconHeart } from '@tabler/icons-vue';
|
||||
import { useHead } from '@vueuse/head';
|
||||
import { computed } from 'vue';
|
||||
import Draggable from 'vuedraggable';
|
||||
import ColoredCard from '../components/ColoredCard.vue';
|
||||
import ToolCard from '../components/ToolCard.vue';
|
||||
import { useToolStore } from '@/tools/tools.store';
|
||||
|
@ -10,13 +12,20 @@ const toolStore = useToolStore();
|
|||
|
||||
useHead({ title: 'IT Tools - Handy online tools for developers' });
|
||||
const { t } = useI18n();
|
||||
|
||||
const favoriteTools = computed(() => toolStore.favoriteTools);
|
||||
|
||||
// Update favorite tools order when drag is finished
|
||||
function onUpdateFavoriteTools() {
|
||||
toolStore.updateFavoriteTools(favoriteTools.value); // Update the store with the new order
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="pt-50px">
|
||||
<div class="grid-wrapper">
|
||||
<div v-if="config.showBanner" class="grid grid-cols-1 gap-12px lg:grid-cols-3 md:grid-cols-3 sm:grid-cols-2 xl:grid-cols-4">
|
||||
<ColoredCard :title="$t('home.follow.title')" :icon="Heart">
|
||||
<div class="grid grid-cols-1 gap-12px lg:grid-cols-3 md:grid-cols-3 sm:grid-cols-2 xl:grid-cols-4">
|
||||
<ColoredCard v-if="config.showBanner" :title="$t('home.follow.title')" :icon="IconHeart">
|
||||
{{ $t('home.follow.p1') }}
|
||||
<a
|
||||
href="https://github.com/CorentinTh/it-tools"
|
||||
|
@ -26,24 +35,61 @@ const { t } = useI18n();
|
|||
>GitHub</a>
|
||||
{{ $t('home.follow.p2') }}
|
||||
<a
|
||||
href="https://twitter.com/ittoolsdottech"
|
||||
href="https://x.com/ittoolsdottech"
|
||||
rel="noopener"
|
||||
target="_blank"
|
||||
:aria-label="$t('home.follow.twitterAccount')"
|
||||
>Twitter</a>.
|
||||
:aria-label="$t('home.follow.twitterXAccount')"
|
||||
>X</a>.
|
||||
{{ $t('home.follow.thankYou') }}
|
||||
<n-icon :component="Heart" />
|
||||
<n-icon :component="IconHeart" />
|
||||
</ColoredCard>
|
||||
|
||||
<a href="https://bit.ly/3zBl7DG" target="_blank" rel="noopener" class="text-current decoration-none">
|
||||
<c-card v-if="config.showSponsorBanner" class="cursor-pointer !border-2px !hover:border-primary">
|
||||
<div class="dark:hidden">
|
||||
<svg width="40" height="40" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M458.592 250.639C425.688 222.824 376.118 211.673 332.186 244.145C330.164 245.615 327.651 243.103 329.183 241.143C339.6 227.725 351.67 213.266 361.413 198.746C371.339 183.858 386.167 173.198 403.262 167.99C494.253 140.42 466.925 6 466.925 6C466.925 6 326.365 15.0675 343.705 136.315C346.585 156.594 341.193 177.241 328.509 193.354C312.946 213.021 294.87 231.83 281.758 245.431C279.001 248.25 274.344 245.554 275.447 241.755C288.13 199.052 297.383 133.007 253.45 90.4259L191.625 39.0842L179.738 54.7685C144.384 101.393 154.739 167.132 201.429 202.422C228.205 222.64 240.337 244.635 238.438 268.774C237.274 283.233 230.718 296.773 220.914 307.495C202.471 327.713 185.253 349.402 171.957 374.521C170.119 378.013 164.788 376.665 164.972 372.683C166.871 331.205 162.888 237.712 93.037 204.321L14.8527 174.117L8.78665 192.19C-10.882 250.517 21.2863 312.825 79.557 332.614C130.23 349.83 148.305 382.486 136.112 431.438C135.561 433.215 126.737 483.638 127.963 506H184.15C186.049 471.323 222.446 448.532 254.001 462.684C262.886 466.667 272.016 472.364 281.39 479.717C331.634 519.295 405.652 509.921 445.173 459.621L456.447 445.284L385.371 394.249C336.597 355.896 271.525 373.234 223.365 406.074C219.321 408.831 214.174 404.419 216.441 400.008C274.65 285.806 350.322 286.051 379.979 311.416C415.946 342.172 470.418 336.658 500.932 300.572L509.694 290.218L458.531 250.639H458.592Z" fill="#aaaaaa" />
|
||||
</svg>
|
||||
</div>
|
||||
|
||||
<div class="hidden dark:block">
|
||||
<svg width="40" height="40" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M458.592 250.639C425.688 222.824 376.118 211.673 332.186 244.145C330.164 245.615 327.651 243.103 329.183 241.143C339.6 227.725 351.67 213.266 361.413 198.746C371.339 183.858 386.167 173.198 403.262 167.99C494.253 140.42 466.925 6 466.925 6C466.925 6 326.365 15.0675 343.705 136.315C346.585 156.594 341.193 177.241 328.509 193.354C312.946 213.021 294.87 231.83 281.758 245.431C279.001 248.25 274.344 245.554 275.447 241.755C288.13 199.052 297.383 133.007 253.45 90.4259L191.625 39.0842L179.738 54.7685C144.384 101.393 154.739 167.132 201.429 202.422C228.205 222.64 240.337 244.635 238.438 268.774C237.274 283.233 230.718 296.773 220.914 307.495C202.471 327.713 185.253 349.402 171.957 374.521C170.119 378.013 164.788 376.665 164.972 372.683C166.871 331.205 162.888 237.712 93.037 204.321L14.8527 174.117L8.78665 192.19C-10.882 250.517 21.2863 312.825 79.557 332.614C130.23 349.83 148.305 382.486 136.112 431.438C135.561 433.215 126.737 483.638 127.963 506H184.15C186.049 471.323 222.446 448.532 254.001 462.684C262.886 466.667 272.016 472.364 281.39 479.717C331.634 519.295 405.652 509.921 445.173 459.621L456.447 445.284L385.371 394.249C336.597 355.896 271.525 373.234 223.365 406.074C219.321 408.831 214.174 404.419 216.441 400.008C274.65 285.806 350.322 286.051 379.979 311.416C415.946 342.172 470.418 336.658 500.932 300.572L509.694 290.218L458.531 250.639H458.592Z" fill="#505050" />
|
||||
</svg>
|
||||
</div>
|
||||
|
||||
<div class="my-5px flex items-baseline gap-4 text-lg text-black dark:text-white">
|
||||
Fern <div class="rounded-full bg-#eeeeee px-10px py-2px text-xs text-black dark:bg-#333333 dark:text-white">
|
||||
Sponsor
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="text-neutral-500 dark:text-neutral-400">
|
||||
Offer developer documentation that looks as good as Stripe's using Fern. <a href="https://bit.ly/3zBl7DG" target="_blank" rel="noopener" class="font-bold text-current transition hover:text-primary">Request a preview</a> of your docs on Fern.
|
||||
</div>
|
||||
</c-card>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<transition name="height">
|
||||
<div v-if="toolStore.favoriteTools.length > 0">
|
||||
<h3 class="mb-5px mt-25px font-500 text-neutral-400">
|
||||
{{ $t('home.categories.favoriteTools') }}
|
||||
<c-tooltip :tooltip="$t('home.categories.favoritesDndToolTip')">
|
||||
<n-icon :component="IconDragDrop" size="18" />
|
||||
</c-tooltip>
|
||||
</h3>
|
||||
<div class="grid grid-cols-1 gap-12px lg:grid-cols-3 md:grid-cols-3 sm:grid-cols-2 xl:grid-cols-4">
|
||||
<ToolCard v-for="tool in toolStore.favoriteTools" :key="tool.name" :tool="tool" />
|
||||
</div>
|
||||
<Draggable
|
||||
:list="favoriteTools"
|
||||
class="grid grid-cols-1 gap-12px lg:grid-cols-3 md:grid-cols-3 sm:grid-cols-2 xl:grid-cols-4"
|
||||
ghost-class="ghost-favorites-draggable"
|
||||
item-key="name"
|
||||
@end="onUpdateFavoriteTools"
|
||||
>
|
||||
<template #item="{ element: tool }">
|
||||
<ToolCard :tool="tool" />
|
||||
</template>
|
||||
</Draggable>
|
||||
</div>
|
||||
</transition>
|
||||
|
||||
|
@ -81,4 +127,24 @@ const { t } = useI18n();
|
|||
opacity: 0;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.ghost-favorites-draggable {
|
||||
opacity: 0.4;
|
||||
background-color: #ccc;
|
||||
border: 2px dashed #666;
|
||||
box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);
|
||||
transform: scale(1.1);
|
||||
animation: ghost-favorites-draggable-animation 0.2s ease-out;
|
||||
}
|
||||
|
||||
@keyframes ghost-favorites-draggable-animation {
|
||||
0% {
|
||||
opacity: 0;
|
||||
transform: scale(0.9);
|
||||
}
|
||||
100% {
|
||||
opacity: 0.4;
|
||||
transform: scale(1.0);
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
|
@ -84,8 +84,8 @@ const items: MenuItem[] = [
|
|||
type: 'button',
|
||||
icon: H3,
|
||||
title: 'Heading 3',
|
||||
action: () => editor.value.chain().focus().toggleHeading({ level: 4 }).run(),
|
||||
isActive: () => editor.value.isActive('heading', { level: 4 }),
|
||||
action: () => editor.value.chain().focus().toggleHeading({ level: 3 }).run(),
|
||||
isActive: () => editor.value.isActive('heading', { level: 3 }),
|
||||
},
|
||||
{
|
||||
type: 'button',
|
||||
|
|
|
@ -14,6 +14,7 @@ export const useToolStore = defineStore('tools', () => {
|
|||
|
||||
return ({
|
||||
...tool,
|
||||
path: tool.path,
|
||||
name: t(`tools.${toolI18nKey}.title`, tool.name),
|
||||
description: t(`tools.${toolI18nKey}.description`, tool.description),
|
||||
category: t(`tools.categories.${tool.category.toLowerCase()}`, tool.category),
|
||||
|
@ -23,8 +24,9 @@ export const useToolStore = defineStore('tools', () => {
|
|||
const toolsByCategory = computed<ToolCategory[]>(() => {
|
||||
return _.chain(tools.value)
|
||||
.groupBy('category')
|
||||
.map((components, name) => ({
|
||||
.map((components, name, path) => ({
|
||||
name,
|
||||
path,
|
||||
components,
|
||||
}))
|
||||
.value();
|
||||
|
@ -32,7 +34,7 @@ export const useToolStore = defineStore('tools', () => {
|
|||
|
||||
const favoriteTools = computed(() => {
|
||||
return favoriteToolsName.value
|
||||
.map(favoriteName => tools.value.find(({ name }) => name === favoriteName))
|
||||
.map(favoriteName => tools.value.find(({ name, path }) => name === favoriteName || path === favoriteName))
|
||||
.filter(Boolean) as ToolWithCategory[]; // cast because .filter(Boolean) does not remove undefined from type
|
||||
});
|
||||
|
||||
|
@ -43,15 +45,23 @@ export const useToolStore = defineStore('tools', () => {
|
|||
newTools: computed(() => tools.value.filter(({ isNew }) => isNew)),
|
||||
|
||||
addToolToFavorites({ tool }: { tool: MaybeRef<Tool> }) {
|
||||
favoriteToolsName.value.push(get(tool).name);
|
||||
const toolPath = get(tool).path;
|
||||
if (toolPath) {
|
||||
favoriteToolsName.value.push(toolPath);
|
||||
}
|
||||
},
|
||||
|
||||
removeToolFromFavorites({ tool }: { tool: MaybeRef<Tool> }) {
|
||||
favoriteToolsName.value = favoriteToolsName.value.filter(name => get(tool).name !== name);
|
||||
favoriteToolsName.value = favoriteToolsName.value.filter(name => get(tool).name !== name && get(tool).path !== name);
|
||||
},
|
||||
|
||||
isToolFavorite({ tool }: { tool: MaybeRef<Tool> }) {
|
||||
return favoriteToolsName.value.includes(get(tool).name);
|
||||
return favoriteToolsName.value.includes(get(tool).name)
|
||||
|| favoriteToolsName.value.includes(get(tool).path);
|
||||
},
|
||||
|
||||
updateFavoriteTools(newOrder: ToolWithCategory[]) {
|
||||
favoriteToolsName.value = newOrder.map(tool => tool.path);
|
||||
},
|
||||
};
|
||||
});
|
||||
|
|
|
@ -28,4 +28,53 @@ test.describe('Tool - Yaml to json', () => {
|
|||
`.trim(),
|
||||
);
|
||||
});
|
||||
|
||||
test('Yaml is parsed with merge key and output correct json', async ({ page }) => {
|
||||
await page.getByTestId('input').fill(`
|
||||
default: &default
|
||||
name: ''
|
||||
age: 0
|
||||
|
||||
person:
|
||||
*default
|
||||
|
||||
persons:
|
||||
- <<: *default
|
||||
age: 1
|
||||
- <<: *default
|
||||
name: John
|
||||
- { age: 3, <<: *default }
|
||||
|
||||
`);
|
||||
|
||||
const generatedJson = await page.getByTestId('area-content').innerText();
|
||||
|
||||
expect(generatedJson.trim()).toEqual(
|
||||
`
|
||||
{
|
||||
"default": {
|
||||
"name": "",
|
||||
"age": 0
|
||||
},
|
||||
"person": {
|
||||
"name": "",
|
||||
"age": 0
|
||||
},
|
||||
"persons": [
|
||||
{
|
||||
"name": "",
|
||||
"age": 1
|
||||
},
|
||||
{
|
||||
"name": "John",
|
||||
"age": 0
|
||||
},
|
||||
{
|
||||
"age": 3,
|
||||
"name": ""
|
||||
}
|
||||
]
|
||||
}`.trim(),
|
||||
);
|
||||
});
|
||||
});
|
||||
|
|
|
@ -6,7 +6,7 @@ import { withDefaultOnError } from '@/utils/defaults';
|
|||
|
||||
function transformer(value: string) {
|
||||
return withDefaultOnError(() => {
|
||||
const obj = parseYaml(value);
|
||||
const obj = parseYaml(value, { merge: true });
|
||||
return obj ? JSON.stringify(obj, null, 3) : '';
|
||||
}, '');
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue