Merge branch 'develop' of https://codeberg.org/calckey/calckey into logged-out
This commit is contained in:
commit
9acd0d9fbf
277 changed files with 1149 additions and 1033 deletions
|
@ -1,10 +1,10 @@
|
|||
_lang_: "Français"
|
||||
headlineMisskey: "Réseau relié par des notes"
|
||||
introMisskey: "Bienvenue ! Calckey est un service de microblogage décentralisé, libre\
|
||||
\ et ouvert.\nÉcrivez des « notes » et partagez ce qui se passe à l’instant présent,\
|
||||
\ autour de vous avec les autres \U0001F4E1\nLa fonction « réactions », vous permet\
|
||||
\ également d’ajouter une réaction rapide aux notes des autres utilisateur·rice·s\
|
||||
\ \U0001F44D\nExplorons un nouveau monde \U0001F680"
|
||||
introMisskey: "Bienvenue ! Calckey est un service de microblogage décentralisé, libre
|
||||
et ouvert.\nÉcrivez des « notes » et partagez ce qui se passe à l’instant présent,
|
||||
autour de vous avec les autres 📡\nLa fonction « réactions », vous permet également
|
||||
d’ajouter une réaction rapide aux notes des autres utilisateur·rice·s 👍\nExplorons
|
||||
un nouveau monde 🚀"
|
||||
monthAndDay: "{day}/{month}"
|
||||
search: "Rechercher"
|
||||
notifications: "Notifications"
|
||||
|
@ -26,8 +26,8 @@ otherSettings: "Paramètres avancés"
|
|||
openInWindow: "Ouvrir dans une nouvelle fenêtre"
|
||||
profile: "Profil"
|
||||
timeline: "Fil"
|
||||
noAccountDescription: "L’utilisateur·rice n’a pas encore renseigné de biographie de\
|
||||
\ présentation sur son profil."
|
||||
noAccountDescription: "L’utilisateur·rice n’a pas encore renseigné de biographie de
|
||||
présentation sur son profil."
|
||||
login: "Se connecter"
|
||||
loggingIn: "Connexion en cours"
|
||||
logout: "Se déconnecter"
|
||||
|
@ -48,8 +48,8 @@ copyContent: "Copier le contenu"
|
|||
copyLink: "Copier le lien"
|
||||
delete: "Supprimer"
|
||||
deleteAndEdit: "Supprimer et réécrire"
|
||||
deleteAndEditConfirm: "Êtes-vous sûr·e de vouloir supprimer cette note et la reformuler\
|
||||
\ ? Vous perdrez toutes les réactions, renotes et réponses y afférentes."
|
||||
deleteAndEditConfirm: "Êtes-vous sûr·e de vouloir supprimer cette note et la reformuler
|
||||
? Vous perdrez toutes les réactions, renotes et réponses y afférentes."
|
||||
addToList: "Ajouter à une liste"
|
||||
sendMessage: "Envoyer un message"
|
||||
copyUsername: "Copier le nom d’utilisateur·rice"
|
||||
|
@ -72,8 +72,8 @@ download: "Télécharger"
|
|||
driveFileDeleteConfirm: "Êtes-vous sûr·e de vouloir supprimer le fichier \"{name}\"\
|
||||
\ ? Il sera retiré de toutes ses notes liées."
|
||||
unfollowConfirm: "Désirez-vous vous désabonner de {name} ?"
|
||||
exportRequested: "Vous avez demandé une exportation. L’opération pourrait prendre\
|
||||
\ un peu de temps. Une terminée, le fichier résultant sera ajouté au Drive."
|
||||
exportRequested: "Vous avez demandé une exportation. L’opération pourrait prendre
|
||||
un peu de temps. Une terminée, le fichier résultant sera ajouté au Drive."
|
||||
importRequested: "Vous avez initié un import. Cela pourrait prendre un peu de temps."
|
||||
lists: "Listes"
|
||||
noLists: "Vous n’avez aucune liste"
|
||||
|
@ -88,12 +88,12 @@ error: "Erreur"
|
|||
somethingHappened: "Une erreur est survenue"
|
||||
retry: "Réessayer"
|
||||
pageLoadError: "Le chargement de la page a échoué."
|
||||
pageLoadErrorDescription: "Cela est généralement causé par le cache du navigateur\
|
||||
\ ou par un problème réseau. Veuillez vider votre cache ou attendre un peu et réessayer."
|
||||
serverIsDead: "Le serveur ne répond pas. Patientez quelques instants puis essayez\
|
||||
\ à nouveau."
|
||||
youShouldUpgradeClient: "Si la page ne s'affiche pas correctement, rechargez-la pour\
|
||||
\ mettre votre client à jour."
|
||||
pageLoadErrorDescription: "Cela est généralement causé par le cache du navigateur
|
||||
ou par un problème réseau. Veuillez vider votre cache ou attendre un peu et réessayer."
|
||||
serverIsDead: "Le serveur ne répond pas. Patientez quelques instants puis essayez
|
||||
à nouveau."
|
||||
youShouldUpgradeClient: "Si la page ne s'affiche pas correctement, rechargez-la pour
|
||||
mettre votre client à jour."
|
||||
enterListName: "Nom de la liste"
|
||||
privacy: "Confidentialité"
|
||||
makeFollowManuallyApprove: "Accepter manuellement les demandes d’abonnement"
|
||||
|
@ -118,11 +118,11 @@ sensitive: "Contenu sensible"
|
|||
add: "Ajouter"
|
||||
reaction: "Réactions"
|
||||
reactionSetting: "Réactions à afficher dans le sélecteur de réactions"
|
||||
reactionSettingDescription2: "Déplacer pour réorganiser, cliquer pour effacer, utiliser\
|
||||
\ « + » pour ajouter."
|
||||
rememberNoteVisibility: "Activer l'option \" se souvenir de la visibilité des notes\
|
||||
\ \" vous permet de réutiliser automatiquement la visibilité utilisée lors de la\
|
||||
\ publication de votre note précédente."
|
||||
reactionSettingDescription2: "Déplacer pour réorganiser, cliquer pour effacer, utiliser
|
||||
« + » pour ajouter."
|
||||
rememberNoteVisibility: "Activer l'option \" se souvenir de la visibilité des notes
|
||||
\" vous permet de réutiliser automatiquement la visibilité utilisée lors de la publication
|
||||
de votre note précédente."
|
||||
attachCancel: "Supprimer le fichier attaché"
|
||||
markAsSensitive: "Marquer comme sensible"
|
||||
unmarkAsSensitive: "Supprimer le marquage comme sensible"
|
||||
|
@ -150,20 +150,20 @@ emojiUrl: "URL de l’émoji"
|
|||
addEmoji: "Ajouter un émoji"
|
||||
settingGuide: "Configuration proposée"
|
||||
cacheRemoteFiles: "Mise en cache des fichiers distants"
|
||||
cacheRemoteFilesDescription: "Lorsque cette option est désactivée, les fichiers distants\
|
||||
\ sont chargés directement depuis l’instance distante. La désactiver diminuera certes\
|
||||
\ l’utilisation de l’espace de stockage local mais augmentera le trafic réseau puisque\
|
||||
\ les miniatures ne seront plus générées."
|
||||
cacheRemoteFilesDescription: "Lorsque cette option est désactivée, les fichiers distants
|
||||
sont chargés directement depuis l’instance distante. La désactiver diminuera certes
|
||||
l’utilisation de l’espace de stockage local mais augmentera le trafic réseau puisque
|
||||
les miniatures ne seront plus générées."
|
||||
flagAsBot: "Ce compte est un robot"
|
||||
flagAsBotDescription: "Si ce compte est géré de manière automatisée, choisissez cette\
|
||||
\ option. Si elle est activée, elle agira comme un marqueur pour les autres développeurs\
|
||||
\ afin d'éviter des chaînes d'interaction sans fin avec d'autres robots et d'ajuster\
|
||||
\ les systèmes internes de Calckey pour traiter ce compte comme un robot."
|
||||
flagAsBotDescription: "Si ce compte est géré de manière automatisée, choisissez cette
|
||||
option. Si elle est activée, elle agira comme un marqueur pour les autres développeurs
|
||||
afin d'éviter des chaînes d'interaction sans fin avec d'autres robots et d'ajuster
|
||||
les systèmes internes de Calckey pour traiter ce compte comme un robot."
|
||||
flagAsCat: "Ce compte est un chat"
|
||||
flagAsCatDescription: "Activer l'option \" Je suis un chat \" pour ce compte."
|
||||
flagShowTimelineReplies: "Afficher les réponses dans le fil"
|
||||
autoAcceptFollowed: "Accepter automatiquement les demandes d’abonnement venant d’utilisateur·rice·s\
|
||||
\ que vous suivez"
|
||||
autoAcceptFollowed: "Accepter automatiquement les demandes d’abonnement venant d’utilisateur·rice·s
|
||||
que vous suivez"
|
||||
addAccount: "Ajouter un compte"
|
||||
loginFailed: "Échec de la connexion"
|
||||
showOnRemote: "Voir sur l’instance distante"
|
||||
|
@ -175,12 +175,12 @@ searchWith: "Recherche : {q}"
|
|||
youHaveNoLists: "Vous n’avez aucune liste"
|
||||
followConfirm: "Êtes-vous sûr·e de vouloir suivre {name} ?"
|
||||
proxyAccount: "Compte proxy"
|
||||
proxyAccountDescription: "Un compte proxy se comporte, dans certaines conditions,\
|
||||
\ comme un·e abonné·e distant·e pour les utilisateurs d'autres instances. Par exemple,\
|
||||
\ quand un·e utilisateur·rice ajoute un·e utilisateur·rice distant·e à une liste,\
|
||||
\ ses notes ne seront pas visibles sur l'instance si personne ne suit cet·te utilisateur·rice.\
|
||||
\ Le compte proxy va donc suivre cet·te utilisateur·rice pour que ses notes soient\
|
||||
\ acheminées."
|
||||
proxyAccountDescription: "Un compte proxy se comporte, dans certaines conditions,
|
||||
comme un·e abonné·e distant·e pour les utilisateurs d'autres instances. Par exemple,
|
||||
quand un·e utilisateur·rice ajoute un·e utilisateur·rice distant·e à une liste,
|
||||
ses notes ne seront pas visibles sur l'instance si personne ne suit cet·te utilisateur·rice.
|
||||
Le compte proxy va donc suivre cet·te utilisateur·rice pour que ses notes soient
|
||||
acheminées."
|
||||
host: "Serveur distant"
|
||||
selectUser: "Sélectionner un·e utilisateur·rice"
|
||||
recipient: "Destinataire"
|
||||
|
@ -210,14 +210,14 @@ instanceInfo: "Informations sur l’instance"
|
|||
statistics: "Statistiques"
|
||||
clearQueue: "Vider la file d’attente"
|
||||
clearQueueConfirmTitle: "Êtes-vous sûr·e de vouloir vider la file d’attente ?"
|
||||
clearQueueConfirmText: "Les notes non distribuées ne seront pas délivrées. Normalement,\
|
||||
\ vous n'avez pas besoin d'effectuer cette opération."
|
||||
clearQueueConfirmText: "Les notes non distribuées ne seront pas délivrées. Normalement,
|
||||
vous n'avez pas besoin d'effectuer cette opération."
|
||||
clearCachedFiles: "Vider le cache"
|
||||
clearCachedFilesConfirm: "Êtes-vous sûr·e de vouloir vider tout le cache de fichiers\
|
||||
\ distants ?"
|
||||
clearCachedFilesConfirm: "Êtes-vous sûr·e de vouloir vider tout le cache de fichiers
|
||||
distants ?"
|
||||
blockedInstances: "Instances bloquées"
|
||||
blockedInstancesDescription: "Listez les instances que vous désirez bloquer, une par\
|
||||
\ ligne. Ces instances ne seront plus en capacité d'interagir avec votre instance."
|
||||
blockedInstancesDescription: "Listez les instances que vous désirez bloquer, une par
|
||||
ligne. Ces instances ne seront plus en capacité d'interagir avec votre instance."
|
||||
muteAndBlock: "Masqué·e·s / Bloqué·e·s"
|
||||
mutedUsers: "Utilisateur·rice·s en sourdine"
|
||||
blockedUsers: "Utilisateur·rice·s bloqué·e·s"
|
||||
|
@ -270,8 +270,8 @@ fromUrl: "Depuis une URL"
|
|||
uploadFromUrl: "Téléverser via une URL"
|
||||
uploadFromUrlDescription: "URL du fichier que vous souhaitez téléverser"
|
||||
uploadFromUrlRequested: "Téléversement demandé"
|
||||
uploadFromUrlMayTakeTime: "Le téléversement de votre fichier peut prendre un certain\
|
||||
\ temps."
|
||||
uploadFromUrlMayTakeTime: "Le téléversement de votre fichier peut prendre un certain
|
||||
temps."
|
||||
explore: "Découvrir"
|
||||
messageRead: "Lu"
|
||||
noMoreHistory: "Il n’y a plus d’historique"
|
||||
|
@ -281,8 +281,8 @@ agreeTo: "J’accepte {0}"
|
|||
tos: "les conditions d’utilisation"
|
||||
start: "Commencer"
|
||||
home: "Principal"
|
||||
remoteUserCaution: "Les informations de ce compte risqueraient d’être incomplètes\
|
||||
\ du fait que l’utilisateur·rice provient d’une instance distante."
|
||||
remoteUserCaution: "Les informations de ce compte risqueraient d’être incomplètes
|
||||
du fait que l’utilisateur·rice provient d’une instance distante."
|
||||
activity: "Activité"
|
||||
images: "Images"
|
||||
birthday: "Date de naissance"
|
||||
|
@ -315,8 +315,8 @@ unableToDelete: "Suppression impossible"
|
|||
inputNewFileName: "Entrez un nouveau nom de fichier"
|
||||
inputNewDescription: "Veuillez entrer une nouvelle description"
|
||||
inputNewFolderName: "Entrez un nouveau nom de dossier"
|
||||
circularReferenceFolder: "Le dossier de destination est un sous-dossier du dossier\
|
||||
\ que vous souhaitez déplacer."
|
||||
circularReferenceFolder: "Le dossier de destination est un sous-dossier du dossier
|
||||
que vous souhaitez déplacer."
|
||||
hasChildFilesOrFolders: "Impossible de supprimer ce dossier car il n'est pas vide."
|
||||
copyUrl: "Copier l’URL"
|
||||
rename: "Renommer"
|
||||
|
@ -350,8 +350,8 @@ connectService: "Connexion"
|
|||
disconnectService: "Déconnexion"
|
||||
enableLocalTimeline: "Activer le fil local"
|
||||
enableGlobalTimeline: "Activer le fil global"
|
||||
disablingTimelinesInfo: "Même si vous désactivez ces fils, les administrateur·rice·s\
|
||||
\ et les modérateur·rice·s pourront toujours y accéder."
|
||||
disablingTimelinesInfo: "Même si vous désactivez ces fils, les administrateur·rice·s
|
||||
et les modérateur·rice·s pourront toujours y accéder."
|
||||
registration: "S’inscrire"
|
||||
enableRegistration: "Autoriser les nouvelles inscriptions"
|
||||
invite: "Inviter"
|
||||
|
@ -363,11 +363,11 @@ bannerUrl: "URL de l’image de la bannière"
|
|||
backgroundImageUrl: "URL de l'image d'arrière-plan"
|
||||
basicInfo: "Informations basiques"
|
||||
pinnedUsers: "Utilisateur·rice épinglé·e"
|
||||
pinnedUsersDescription: "Listez les utilisateur·rice·s que vous souhaitez voir épinglé·e·s\
|
||||
\ sur la page \"Découvrir\", un·e par ligne."
|
||||
pinnedUsersDescription: "Listez les utilisateur·rice·s que vous souhaitez voir épinglé·e·s
|
||||
sur la page \"Découvrir\", un·e par ligne."
|
||||
pinnedPages: "Pages épinglées"
|
||||
pinnedPagesDescription: "Inscrivez le chemin des pages que vous souhaitez épingler\
|
||||
\ en haut de la page de l'instance. Séparez les pages d'un retour à la ligne."
|
||||
pinnedPagesDescription: "Inscrivez le chemin des pages que vous souhaitez épingler
|
||||
en haut de la page de l'instance. Séparez les pages d'un retour à la ligne."
|
||||
pinnedClipId: "Identifiant du clip épinglé"
|
||||
pinnedNotes: "Note épinglée"
|
||||
hcaptcha: "hCaptcha"
|
||||
|
@ -378,17 +378,17 @@ recaptcha: "reCAPTCHA"
|
|||
enableRecaptcha: "Activer reCAPTCHA"
|
||||
recaptchaSiteKey: "Clé du site"
|
||||
recaptchaSecretKey: "Clé secrète"
|
||||
avoidMultiCaptchaConfirm: "L’utilisation de plusieurs Captchas peut provoquer des\
|
||||
\ interférences. Souhaitez-vous désactiver l’autre Captcha ? Vous pouvez laisser\
|
||||
\ plusieurs Captcha activés en appuyant sur Annuler."
|
||||
avoidMultiCaptchaConfirm: "L’utilisation de plusieurs Captchas peut provoquer des
|
||||
interférences. Souhaitez-vous désactiver l’autre Captcha ? Vous pouvez laisser plusieurs
|
||||
Captcha activés en appuyant sur Annuler."
|
||||
antennas: "Antennes"
|
||||
manageAntennas: "Gestion des antennes"
|
||||
name: "Nom"
|
||||
antennaSource: "Source de l’antenne"
|
||||
antennaKeywords: "Mots clés à recevoir"
|
||||
antennaExcludeKeywords: "Mots clés à exclure"
|
||||
antennaKeywordsDescription: "Séparer avec des espaces pour la condition AND. Séparer\
|
||||
\ avec un saut de ligne pour une condition OR."
|
||||
antennaKeywordsDescription: "Séparer avec des espaces pour la condition AND. Séparer
|
||||
avec un saut de ligne pour une condition OR."
|
||||
notifyAntenna: "Je souhaite recevoir les notifications des nouvelles notes"
|
||||
withFileAntenna: "Notes ayant des attachements uniquement"
|
||||
enableServiceworker: "Activer ServiceWorker"
|
||||
|
@ -399,11 +399,11 @@ connectedTo: "Vous êtes connectés aux services suivants"
|
|||
notesAndReplies: "Notes et Réponses"
|
||||
withFiles: "Avec fichiers joints"
|
||||
silence: "Mettre en sourdine"
|
||||
silenceConfirm: "Êtes-vous sûr·e de vouloir mettre l’utilisateur·rice en sourdine\
|
||||
\ ?"
|
||||
silenceConfirm: "Êtes-vous sûr·e de vouloir mettre l’utilisateur·rice en sourdine
|
||||
?"
|
||||
unsilence: "Annuler la sourdine"
|
||||
unsilenceConfirm: "Êtes-vous sûr·e de vouloir annuler la mise en sourdine de cet·te\
|
||||
\ utilisateur·rice ?"
|
||||
unsilenceConfirm: "Êtes-vous sûr·e de vouloir annuler la mise en sourdine de cet·te
|
||||
utilisateur·rice ?"
|
||||
popularUsers: "Utilisateur·rice·s populaires"
|
||||
recentlyUpdatedUsers: "Utilisateur·rice·s actif·ve·s récemment"
|
||||
recentlyRegisteredUsers: "Utilisateur·rice·s récemment inscrit·e·s"
|
||||
|
@ -468,8 +468,8 @@ invitationCode: "Code d’invitation"
|
|||
checking: "Vérification en cours..."
|
||||
available: "Disponible"
|
||||
unavailable: "Non disponible"
|
||||
usernameInvalidFormat: "Le nom d'utilisateur peut contenir uniquement des lettres\
|
||||
\ (minuscules et/ou majuscules), des chiffres et des _"
|
||||
usernameInvalidFormat: "Le nom d'utilisateur peut contenir uniquement des lettres
|
||||
(minuscules et/ou majuscules), des chiffres et des _"
|
||||
tooShort: "Trop court"
|
||||
tooLong: "Trop long"
|
||||
weakPassword: "Mot de passe faible"
|
||||
|
@ -478,8 +478,8 @@ strongPassword: "Mot de passe fort"
|
|||
passwordMatched: "Les mots de passe correspondent"
|
||||
passwordNotMatched: "Les mots de passe ne correspondent pas"
|
||||
signinWith: "Se connecter avec {x}"
|
||||
signinFailed: "Échec d’authentification. Veuillez vérifier que votre nom d’utilisateur\
|
||||
\ et mot de passe sont corrects."
|
||||
signinFailed: "Échec d’authentification. Veuillez vérifier que votre nom d’utilisateur
|
||||
et mot de passe sont corrects."
|
||||
tapSecurityKey: "Appuyez sur votre clé de sécurité"
|
||||
or: "OU"
|
||||
language: "Langue"
|
||||
|
@ -488,8 +488,8 @@ groupInvited: "Invité au groupe"
|
|||
aboutX: "À propos de {x}"
|
||||
useOsNativeEmojis: "Utiliser les émojis natifs du système"
|
||||
youHaveNoGroups: "Vous n’avez aucun groupe"
|
||||
joinOrCreateGroup: "Vous pouvez être invité·e à rejoindre des groupes existants ou\
|
||||
\ créer votre propre nouveau groupe."
|
||||
joinOrCreateGroup: "Vous pouvez être invité·e à rejoindre des groupes existants ou
|
||||
créer votre propre nouveau groupe."
|
||||
noHistory: "Pas d'historique"
|
||||
signinHistory: "Historique de connexion"
|
||||
disableAnimatedMfm: "Désactiver MFM ayant des animations"
|
||||
|
@ -520,29 +520,29 @@ showFeaturedNotesInTimeline: "Afficher les notes des Tendances dans le fil d'act
|
|||
objectStorage: "Stockage d'objets"
|
||||
useObjectStorage: "Utiliser le stockage d'objets"
|
||||
objectStorageBaseUrl: "Base URL"
|
||||
objectStorageBaseUrlDesc: "Préfixe d’URL utilisé pour construire l’URL vers le référencement\
|
||||
\ d’objet (média). Spécifiez son URL si vous utilisez un CDN ou un proxy, sinon\
|
||||
\ spécifiez l’adresse accessible au public selon le guide de service que vous allez\
|
||||
\ utiliser. P.ex. 'https://<bucket>.s3.amazonaws.com' pour AWS S3 et 'https://storage.googleapis.com/<bucket>'\
|
||||
\ pour GCS."
|
||||
objectStorageBaseUrlDesc: "Préfixe d’URL utilisé pour construire l’URL vers le référencement
|
||||
d’objet (média). Spécifiez son URL si vous utilisez un CDN ou un proxy, sinon spécifiez
|
||||
l’adresse accessible au public selon le guide de service que vous allez utiliser.
|
||||
P.ex. 'https://<bucket>.s3.amazonaws.com' pour AWS S3 et 'https://storage.googleapis.com/<bucket>'
|
||||
pour GCS."
|
||||
objectStorageBucket: "Bucket"
|
||||
objectStorageBucketDesc: "Veuillez spécifier le nom du compartiment utilisé sur le\
|
||||
\ service configuré."
|
||||
objectStorageBucketDesc: "Veuillez spécifier le nom du compartiment utilisé sur le
|
||||
service configuré."
|
||||
objectStoragePrefix: "Prefix"
|
||||
objectStoragePrefixDesc: "Les fichiers seront stockés sous le répertoire de ce préfixe."
|
||||
objectStorageEndpoint: "Endpoint"
|
||||
objectStorageEndpointDesc: "Laissez ce champ vide si vous utilisez AWS S3, sinon spécifiez\
|
||||
\ le point de terminaison comme '<host>' ou '<host>: <port>' selon le guide de service\
|
||||
\ que vous allez utiliser."
|
||||
objectStorageEndpointDesc: "Laissez ce champ vide si vous utilisez AWS S3, sinon spécifiez
|
||||
le point de terminaison comme '<host>' ou '<host>: <port>' selon le guide de service
|
||||
que vous allez utiliser."
|
||||
objectStorageRegion: "Région"
|
||||
objectStorageRegionDesc: "Spécifiez une région comme 'xx-east-1'. Si votre service\
|
||||
\ ne fait pas de distinction entre les régions, laissez-le vide ou remplissez 'us-east-1'."
|
||||
objectStorageRegionDesc: "Spécifiez une région comme 'xx-east-1'. Si votre service
|
||||
ne fait pas de distinction entre les régions, laissez-le vide ou remplissez 'us-east-1'."
|
||||
objectStorageUseSSL: "Utiliser SSL"
|
||||
objectStorageUseSSLDesc: "Désactivez cette option si vous n'utilisez pas HTTPS pour\
|
||||
\ la connexion API"
|
||||
objectStorageUseSSLDesc: "Désactivez cette option si vous n'utilisez pas HTTPS pour
|
||||
la connexion API"
|
||||
objectStorageUseProxy: "Se connecter via proxy"
|
||||
objectStorageUseProxyDesc: "Désactivez cette option si vous n'utilisez pas de proxy\
|
||||
\ pour la connexion API"
|
||||
objectStorageUseProxyDesc: "Désactivez cette option si vous n'utilisez pas de proxy
|
||||
pour la connexion API"
|
||||
objectStorageSetPublicRead: "Régler sur « public » lors de l'envoi"
|
||||
serverLogs: "Journal du serveur"
|
||||
deleteAll: "Supprimer tout"
|
||||
|
@ -570,9 +570,9 @@ sort: "Trier"
|
|||
ascendingOrder: "Ascendant"
|
||||
descendingOrder: "Descendant"
|
||||
scratchpad: "ScratchPad"
|
||||
scratchpadDescription: "ScratchPad fournit un environnement expérimental pour AiScript.\
|
||||
\ Vous pouvez vérifier la rédaction de votre code, sa bonne exécution et le résultat\
|
||||
\ de son interaction avec Calckey."
|
||||
scratchpadDescription: "ScratchPad fournit un environnement expérimental pour AiScript.
|
||||
Vous pouvez vérifier la rédaction de votre code, sa bonne exécution et le résultat
|
||||
de son interaction avec Calckey."
|
||||
output: "Sortie"
|
||||
script: "Script"
|
||||
disablePagesScript: "Désactiver AiScript sur les Pages"
|
||||
|
@ -580,15 +580,15 @@ updateRemoteUser: "Mettre à jour les informations de l’utilisateur·rice dist
|
|||
deleteAllFiles: "Supprimer tous les fichiers"
|
||||
deleteAllFilesConfirm: "Êtes-vous sûr·e de vouloir supprimer tous les fichiers ?"
|
||||
removeAllFollowing: "Retenir tous les abonnements"
|
||||
removeAllFollowingDescription: "Se désabonner de tous les comptes de {host}. Veuillez\
|
||||
\ lancer cette action uniquement si l’instance n’existe plus."
|
||||
removeAllFollowingDescription: "Se désabonner de tous les comptes de {host}. Veuillez
|
||||
lancer cette action uniquement si l’instance n’existe plus."
|
||||
userSuspended: "Cet·te utilisateur·rice a été suspendu·e."
|
||||
userSilenced: "Cette utilisateur·trice a été mis·e en sourdine."
|
||||
yourAccountSuspendedTitle: "Ce compte est suspendu"
|
||||
yourAccountSuspendedDescription: "Ce compte est suspendu car vous avez enfreint les\
|
||||
\ conditions d'utilisation de l'instance, ou pour un motif similaire. Si vous souhaitez\
|
||||
\ connaître en détail les raisons de cette suspension, renseignez-vous auprès de\
|
||||
\ l'administrateur·rice de votre instance. Merci de ne pas créer de nouveau compte."
|
||||
yourAccountSuspendedDescription: "Ce compte est suspendu car vous avez enfreint les
|
||||
conditions d'utilisation de l'instance, ou pour un motif similaire. Si vous souhaitez
|
||||
connaître en détail les raisons de cette suspension, renseignez-vous auprès de l'administrateur·rice
|
||||
de votre instance. Merci de ne pas créer de nouveau compte."
|
||||
menu: "Menu"
|
||||
divider: "Séparateur"
|
||||
addItem: "Ajouter un élément"
|
||||
|
@ -611,8 +611,8 @@ description: "Description"
|
|||
describeFile: "Ajouter une description d'image"
|
||||
enterFileDescription: "Saisissez une description"
|
||||
author: "Auteur·rice"
|
||||
leaveConfirm: "Vous avez des modifications non-sauvegardées. Voulez-vous les ignorer\
|
||||
\ ?"
|
||||
leaveConfirm: "Vous avez des modifications non-sauvegardées. Voulez-vous les ignorer
|
||||
?"
|
||||
manage: "Gestion"
|
||||
plugins: "Extensions"
|
||||
deck: "Deck"
|
||||
|
@ -629,14 +629,14 @@ permission: "Autorisations"
|
|||
enableAll: "Tout activer"
|
||||
disableAll: "Tout désactiver"
|
||||
tokenRequested: "Autoriser l'accès au compte"
|
||||
pluginTokenRequestedDescription: "Ce plugin pourra utiliser les autorisations définies\
|
||||
\ ici."
|
||||
pluginTokenRequestedDescription: "Ce plugin pourra utiliser les autorisations définies
|
||||
ici."
|
||||
notificationType: "Type de notifications"
|
||||
edit: "Editer"
|
||||
emailServer: "Serveur mail"
|
||||
enableEmail: "Activer la distribution de courriel"
|
||||
emailConfigInfo: "Utilisé pour confirmer votre adresse de courriel et la réinitialisation\
|
||||
\ de votre mot de passe en cas d’oubli."
|
||||
emailConfigInfo: "Utilisé pour confirmer votre adresse de courriel et la réinitialisation
|
||||
de votre mot de passe en cas d’oubli."
|
||||
email: "E-mail "
|
||||
emailAddress: "Adresses e-mail"
|
||||
smtpConfig: "Paramètres du serveur SMTP"
|
||||
|
@ -644,8 +644,8 @@ smtpHost: "Serveur distant"
|
|||
smtpPort: "Port"
|
||||
smtpUser: "Nom d’utilisateur·rice"
|
||||
smtpPass: "Mot de passe"
|
||||
emptyToDisableSmtpAuth: "Laisser le nom d’utilisateur et le mot de passe vides pour\
|
||||
\ désactiver la vérification SMTP"
|
||||
emptyToDisableSmtpAuth: "Laisser le nom d’utilisateur et le mot de passe vides pour
|
||||
désactiver la vérification SMTP"
|
||||
smtpSecure: "Utiliser SSL/TLS implicitement dans les connexions SMTP"
|
||||
smtpSecureInfo: "Désactiver cette option lorsque STARTTLS est utilisé"
|
||||
testEmail: "Tester la distribution de courriel"
|
||||
|
@ -666,24 +666,24 @@ create: "Créer"
|
|||
notificationSetting: "Paramètres des notifications "
|
||||
notificationSettingDesc: "Sélectionnez le type de notification à afficher"
|
||||
useGlobalSetting: "Utiliser paramètre général"
|
||||
useGlobalSettingDesc: "S'il est activé, les paramètres de notification de votre compte\
|
||||
\ seront utilisés. S'il est désactivé, des configurations individuelles peuvent\
|
||||
\ être effectuées."
|
||||
useGlobalSettingDesc: "S'il est activé, les paramètres de notification de votre compte
|
||||
seront utilisés. S'il est désactivé, des configurations individuelles peuvent être
|
||||
effectuées."
|
||||
other: "Autre"
|
||||
regenerateLoginToken: "Régénérer le jeton de connexion"
|
||||
regenerateLoginTokenDescription: "Générer un nouveau jeton d'authentification. Cette\
|
||||
\ opération ne devrait pas être nécessaire ; lors de la génération d'un nouveau\
|
||||
\ jeton, tous les appareils seront déconnectés. "
|
||||
setMultipleBySeparatingWithSpace: "Vous pouvez en définir plusieurs, en les séparant\
|
||||
\ par des espaces."
|
||||
regenerateLoginTokenDescription: "Générer un nouveau jeton d'authentification. Cette
|
||||
opération ne devrait pas être nécessaire ; lors de la génération d'un nouveau jeton,
|
||||
tous les appareils seront déconnectés. "
|
||||
setMultipleBySeparatingWithSpace: "Vous pouvez en définir plusieurs, en les séparant
|
||||
par des espaces."
|
||||
fileIdOrUrl: "ID du fichier ou URL"
|
||||
behavior: "Comportement"
|
||||
sample: "Exemple"
|
||||
abuseReports: "Signalements"
|
||||
reportAbuse: "Signaler"
|
||||
reportAbuseOf: "Signaler {name}"
|
||||
fillAbuseReportDescription: "Veuillez expliquer les raisons du signalement. S'il s'agit\
|
||||
\ d'une note précise, veuillez en donner le lien."
|
||||
fillAbuseReportDescription: "Veuillez expliquer les raisons du signalement. S'il s'agit
|
||||
d'une note précise, veuillez en donner le lien."
|
||||
abuseReported: "Le rapport est envoyé. Merci."
|
||||
reporter: "Signalé par"
|
||||
reporteeOrigin: "Origine du signalement"
|
||||
|
@ -694,8 +694,8 @@ abuseMarkAsResolved: "Marquer le signalement comme résolu"
|
|||
openInNewTab: "Ouvrir dans un nouvel onglet"
|
||||
openInSideView: "Ouvrir en vue latérale"
|
||||
defaultNavigationBehaviour: "Navigation par défaut"
|
||||
editTheseSettingsMayBreakAccount: "La modification de ces paramètres peut endommager\
|
||||
\ votre compte."
|
||||
editTheseSettingsMayBreakAccount: "La modification de ces paramètres peut endommager
|
||||
votre compte."
|
||||
instanceTicker: "Nom de l'instance d'origine des notes"
|
||||
waitingFor: "En attente de {x}"
|
||||
random: "Aléatoire"
|
||||
|
@ -707,8 +707,8 @@ createNew: "Créer nouveau"
|
|||
optional: "Facultatif"
|
||||
createNewClip: "Créer un nouveau clip"
|
||||
public: "Public"
|
||||
i18nInfo: "Calckey est traduit dans différentes langues par des bénévoles. Vous pouvez\
|
||||
\ contribuer à {link}."
|
||||
i18nInfo: "Calckey est traduit dans différentes langues par des bénévoles. Vous pouvez
|
||||
contribuer à {link}."
|
||||
manageAccessTokens: "Gérer les jetons d'accès"
|
||||
accountInfo: " Informations du compte "
|
||||
notesCount: "Nombre de notes"
|
||||
|
@ -727,16 +727,16 @@ no: "Non"
|
|||
driveFilesCount: "Nombre de fichiers dans le Drive"
|
||||
driveUsage: "Utilisation du Drive"
|
||||
noCrawle: "Refuser l'indexation par les robots"
|
||||
noCrawleDescription: "Demandez aux moteurs de recherche de ne pas indexer votre page\
|
||||
\ de profil, vos notes, vos pages, etc."
|
||||
lockedAccountInfo: "À moins que vous ne définissiez la visibilité de votre note sur\
|
||||
\ \"Abonné-e-s\", vos notes sont visibles par tous, même si vous exigez que les\
|
||||
\ demandes d'abonnement soient approuvées manuellement."
|
||||
noCrawleDescription: "Demandez aux moteurs de recherche de ne pas indexer votre page
|
||||
de profil, vos notes, vos pages, etc."
|
||||
lockedAccountInfo: "À moins que vous ne définissiez la visibilité de votre note sur
|
||||
\"Abonné-e-s\", vos notes sont visibles par tous, même si vous exigez que les demandes
|
||||
d'abonnement soient approuvées manuellement."
|
||||
alwaysMarkSensitive: "Marquer les médias comme contenu sensible par défaut"
|
||||
loadRawImages: "Affichage complet des images jointes au lieu des vignettes"
|
||||
disableShowingAnimatedImages: "Désactiver l'animation des images"
|
||||
verificationEmailSent: "Un e-mail de vérification a été envoyé. Veuillez accéder au\
|
||||
\ lien pour compléter la vérification."
|
||||
verificationEmailSent: "Un e-mail de vérification a été envoyé. Veuillez accéder au
|
||||
lien pour compléter la vérification."
|
||||
notSet: "Non défini"
|
||||
emailVerified: "Votre adresse e-mail a été vérifiée."
|
||||
noteFavoritesCount: "Nombre de notes dans les favoris"
|
||||
|
@ -748,16 +748,16 @@ clips: "Clips"
|
|||
experimentalFeatures: "Fonctionnalités expérimentales"
|
||||
developer: "Développeur"
|
||||
makeExplorable: "Rendre le compte visible sur la page \"Découvrir\"."
|
||||
makeExplorableDescription: "Si vous désactivez cette option, votre compte n'apparaîtra\
|
||||
\ pas sur la page \"Découvrir\"."
|
||||
makeExplorableDescription: "Si vous désactivez cette option, votre compte n'apparaîtra
|
||||
pas sur la page \"Découvrir\"."
|
||||
showGapBetweenNotesInTimeline: "Afficher un écart entre les notes sur la Timeline"
|
||||
duplicate: "Duliquer"
|
||||
left: "Gauche"
|
||||
center: "Centrer"
|
||||
wide: "Large"
|
||||
narrow: "Condensé"
|
||||
reloadToApplySetting: "Vos paramètres seront appliqués lorsque vous rechargerez la\
|
||||
\ page. Souhaitez-vous recharger ?"
|
||||
reloadToApplySetting: "Vos paramètres seront appliqués lorsque vous rechargerez la
|
||||
page. Souhaitez-vous recharger ?"
|
||||
needReloadToApply: "Ce paramètre s'appliquera après un rechargement."
|
||||
showTitlebar: "Afficher la barre de titre"
|
||||
clearCache: "Vider le cache"
|
||||
|
@ -765,11 +765,11 @@ onlineUsersCount: "{n} utilisateur(s) en ligne"
|
|||
nUsers: "{n} utilisateur·rice·s"
|
||||
nNotes: "{n} Notes"
|
||||
sendErrorReports: "Envoyer les rapports d’erreur"
|
||||
sendErrorReportsDescription: "Si vous activez l'envoi des rapports d'erreur, vous\
|
||||
\ contribuerez à améliorer la qualité de Calckey grâce au partage d'informations\
|
||||
\ détaillées sur les erreurs lorsqu'un problème survient.\nCela inclut des informations\
|
||||
\ telles que la version de votre système d'exploitation, le type de navigateur que\
|
||||
\ vous utilisez, votre historique d'activité, etc."
|
||||
sendErrorReportsDescription: "Si vous activez l'envoi des rapports d'erreur, vous
|
||||
contribuerez à améliorer la qualité de Calckey grâce au partage d'informations détaillées
|
||||
sur les erreurs lorsqu'un problème survient.\nCela inclut des informations telles
|
||||
que la version de votre système d'exploitation, le type de navigateur que vous utilisez,
|
||||
votre historique d'activité, etc."
|
||||
myTheme: "Mes thèmes"
|
||||
backgroundColor: "Arrière-plan"
|
||||
accentColor: "Accentuation"
|
||||
|
@ -808,17 +808,17 @@ unlikeConfirm: "Êtes-vous sûr·e de ne plus vouloir aimer cette publication ?"
|
|||
fullView: "Plein écran"
|
||||
quitFullView: "Quitter le plein écran"
|
||||
addDescription: "Ajouter une description"
|
||||
userPagePinTip: "Vous pouvez afficher des notes ici en sélectionnant l'option « Épingler\
|
||||
\ au profil » dans le menu de chaque note."
|
||||
notSpecifiedMentionWarning: "Vous avez mentionné des utilisateur·rice·s qui ne font\
|
||||
\ pas partie de la liste des destinataires"
|
||||
userPagePinTip: "Vous pouvez afficher des notes ici en sélectionnant l'option « Épingler
|
||||
au profil » dans le menu de chaque note."
|
||||
notSpecifiedMentionWarning: "Vous avez mentionné des utilisateur·rice·s qui ne font
|
||||
pas partie de la liste des destinataires"
|
||||
info: "Informations"
|
||||
userInfo: "Informations sur l'utilisateur"
|
||||
unknown: "Inconnu"
|
||||
onlineStatus: "Statut"
|
||||
hideOnlineStatus: "Se rendre invisible"
|
||||
hideOnlineStatusDescription: "Rendre votre statut invisible peut diminuer les performances\
|
||||
\ de certaines fonctionnalités, telles que la Recherche."
|
||||
hideOnlineStatusDescription: "Rendre votre statut invisible peut diminuer les performances
|
||||
de certaines fonctionnalités, telles que la Recherche."
|
||||
online: "En ligne"
|
||||
active: "Actif·ve"
|
||||
offline: "Hors ligne"
|
||||
|
@ -853,9 +853,9 @@ emailNotConfiguredWarning: "Vous n'avez pas configuré d'adresse e-mail."
|
|||
ratio: "Ratio"
|
||||
previewNoteText: "Voir l'aperçu"
|
||||
customCss: "CSS personnalisé"
|
||||
customCssWarn: "Utilisez cette fonctionnalité uniquement si vous savez exactement\
|
||||
\ ce que vous faites. Une configuration inadaptée peut empêcher le client de s'exécuter\
|
||||
\ normalement."
|
||||
customCssWarn: "Utilisez cette fonctionnalité uniquement si vous savez exactement
|
||||
ce que vous faites. Une configuration inadaptée peut empêcher le client de s'exécuter
|
||||
normalement."
|
||||
global: "Global"
|
||||
squareAvatars: "Avatars carrés"
|
||||
sent: "Envoyer"
|
||||
|
@ -870,10 +870,10 @@ whatIsNew: "Voir les derniers changements"
|
|||
translate: "Traduire"
|
||||
translatedFrom: "Traduit depuis {x}"
|
||||
accountDeletionInProgress: "La suppression de votre compte est en cours"
|
||||
usernameInfo: "C'est un nom qui identifie votre compte sur l'instance de manière unique.\
|
||||
\ Vous pouvez utiliser des lettres de l'alphabet (minuscules et majuscules), des\
|
||||
\ chiffres (de 0 à 9), ou bien le tiret « _ ». Vous ne pourrez pas modifier votre\
|
||||
\ nom d'utilisateur·rice par la suite."
|
||||
usernameInfo: "C'est un nom qui identifie votre compte sur l'instance de manière unique.
|
||||
Vous pouvez utiliser des lettres de l'alphabet (minuscules et majuscules), des chiffres
|
||||
(de 0 à 9), ou bien le tiret « _ ». Vous ne pourrez pas modifier votre nom d'utilisateur·rice
|
||||
par la suite."
|
||||
aiChanMode: "Mode Ai"
|
||||
keepCw: "Garder le CW"
|
||||
pubSub: "Comptes Pub/Sub"
|
||||
|
@ -889,14 +889,14 @@ filter: "Filtre"
|
|||
controlPanel: "Panneau de contrôle"
|
||||
manageAccounts: "Gérer les comptes"
|
||||
makeReactionsPublic: "Rendre les réactions publiques"
|
||||
makeReactionsPublicDescription: "Ceci rendra la liste de toutes vos réactions données\
|
||||
\ publique."
|
||||
makeReactionsPublicDescription: "Ceci rendra la liste de toutes vos réactions données
|
||||
publique."
|
||||
classic: "Classique"
|
||||
muteThread: "Masquer cette discussion"
|
||||
unmuteThread: "Ne plus masquer le fil"
|
||||
ffVisibility: "Visibilité des abonnés/abonnements"
|
||||
ffVisibilityDescription: "Permet de configurer qui peut voir les personnes que tu\
|
||||
\ suis et les personnes qui te suivent."
|
||||
ffVisibilityDescription: "Permet de configurer qui peut voir les personnes que tu
|
||||
suis et les personnes qui te suivent."
|
||||
continueThread: "Afficher la suite du fil"
|
||||
deleteAccountConfirm: "Votre compte sera supprimé. Êtes vous certain ?"
|
||||
incorrectPassword: "Le mot de passe est incorrect."
|
||||
|
@ -904,11 +904,11 @@ voteConfirm: "Confirmez-vous votre vote pour « {choice} » ?"
|
|||
hide: "Masquer"
|
||||
leaveGroup: "Quitter le groupe"
|
||||
leaveGroupConfirm: "Êtes vous sûr de vouloir quitter \"{name}\" ?"
|
||||
useDrawerReactionPickerForMobile: "Afficher le sélecteur de réactions en tant que\
|
||||
\ panneau sur mobile"
|
||||
useDrawerReactionPickerForMobile: "Afficher le sélecteur de réactions en tant que
|
||||
panneau sur mobile"
|
||||
welcomeBackWithName: "Heureux de vous revoir, {name}"
|
||||
clickToFinishEmailVerification: "Veuillez cliquer sur [{ok}] afin de compléter la\
|
||||
\ vérification par courriel."
|
||||
clickToFinishEmailVerification: "Veuillez cliquer sur [{ok}] afin de compléter la
|
||||
vérification par courriel."
|
||||
overridedDeviceKind: "Type d’appareil"
|
||||
smartphone: "Smartphone"
|
||||
tablet: "Tablette"
|
||||
|
@ -948,16 +948,16 @@ _ffVisibility:
|
|||
_signup:
|
||||
almostThere: "Bientôt fini"
|
||||
emailAddressInfo: "Insérez votre adresse e-mail."
|
||||
emailSent: "Un courriel de confirmation vient d'être envoyé à l'adresse que vous\
|
||||
\ avez renseignée ({email}). Cliquez sur le lien contenu dans le message pour\
|
||||
\ terminer la création de votre compte."
|
||||
emailSent: "Un courriel de confirmation vient d'être envoyé à l'adresse que vous
|
||||
avez renseignée ({email}). Cliquez sur le lien contenu dans le message pour terminer
|
||||
la création de votre compte."
|
||||
_accountDelete:
|
||||
accountDelete: "Supprimer le compte"
|
||||
mayTakeTime: "La suppression de compte nécessitant beaucoup de ressources, l'exécution\
|
||||
\ du processus peut prendre du temps, en fonction de la quantité de contenus que\
|
||||
\ vous avez créés et du nombre de fichiers que vous avez téléversés."
|
||||
sendEmail: "Une fois la suppression de votre compte effectuée, un courriel sera\
|
||||
\ envoyé à l'adresse que vous aviez enregistrée."
|
||||
mayTakeTime: "La suppression de compte nécessitant beaucoup de ressources, l'exécution
|
||||
du processus peut prendre du temps, en fonction de la quantité de contenus que
|
||||
vous avez créés et du nombre de fichiers que vous avez téléversés."
|
||||
sendEmail: "Une fois la suppression de votre compte effectuée, un courriel sera
|
||||
envoyé à l'adresse que vous aviez enregistrée."
|
||||
requestAccountDelete: "Demander la suppression de votre compte"
|
||||
started: "La procédure de suppression a commencé."
|
||||
inProgress: "Suppression en cours"
|
||||
|
@ -965,14 +965,14 @@ _ad:
|
|||
back: "Retour"
|
||||
reduceFrequencyOfThisAd: "Voir cette publicité moins souvent"
|
||||
_forgotPassword:
|
||||
enterEmail: "Entrez ici l'adresse e-mail que vous avez enregistrée pour votre compte.\
|
||||
\ Un lien vous permettant de réinitialiser votre mot de passe sera envoyé à cette\
|
||||
\ adresse."
|
||||
ifNoEmail: "Si vous n'avez pas enregistré d'adresse e-mail, merci de contacter l'administrateur·rice\
|
||||
\ de votre instance."
|
||||
contactAdmin: "Cette instance ne permettant pas l'utilisation d'adresses e-mail,\
|
||||
\ prenez contact avec l'administrateur·rice pour procéder à la réinitialisation\
|
||||
\ de votre mot de passe."
|
||||
enterEmail: "Entrez ici l'adresse e-mail que vous avez enregistrée pour votre compte.
|
||||
Un lien vous permettant de réinitialiser votre mot de passe sera envoyé à cette
|
||||
adresse."
|
||||
ifNoEmail: "Si vous n'avez pas enregistré d'adresse e-mail, merci de contacter l'administrateur·rice
|
||||
de votre instance."
|
||||
contactAdmin: "Cette instance ne permettant pas l'utilisation d'adresses e-mail,
|
||||
prenez contact avec l'administrateur·rice pour procéder à la réinitialisation
|
||||
de votre mot de passe."
|
||||
_gallery:
|
||||
my: "Mes publications"
|
||||
liked: " Publications que j'ai aimées"
|
||||
|
@ -1000,8 +1000,8 @@ _aboutMisskey:
|
|||
source: "Code source"
|
||||
translation: "Traduire Calckey"
|
||||
donate: "Soutenir Calckey"
|
||||
morePatrons: "Nous apprécions vraiment le soutien de nombreuses autres personnes\
|
||||
\ non mentionnées ici. Merci à toutes et à tous ! \U0001F970"
|
||||
morePatrons: "Nous apprécions vraiment le soutien de nombreuses autres personnes
|
||||
non mentionnées ici. Merci à toutes et à tous ! 🥰"
|
||||
patrons: "Contributeurs"
|
||||
_nsfw:
|
||||
respect: "Cacher les médias marqués comme contenu sensible"
|
||||
|
@ -1009,22 +1009,22 @@ _nsfw:
|
|||
force: "Cacher tous les médias"
|
||||
_mfm:
|
||||
cheatSheet: "Antisèche MFM"
|
||||
intro: "MFM est un langage Markdown spécifique utilisable ici et là dans Calckey.\
|
||||
\ Vous pouvez vérifier ici les structures utilisables avec MFM."
|
||||
intro: "MFM est un langage Markdown spécifique utilisable ici et là dans Calckey.
|
||||
Vous pouvez vérifier ici les structures utilisables avec MFM."
|
||||
dummy: "La Fédiverse s'agrandit avec Calckey"
|
||||
mention: "Mentionner"
|
||||
mentionDescription: "Vous pouvez afficher un utilisateur spécifique en indiquant\
|
||||
\ une arobase suivie d'un nom d'utilisateur"
|
||||
mentionDescription: "Vous pouvez afficher un utilisateur spécifique en indiquant
|
||||
une arobase suivie d'un nom d'utilisateur"
|
||||
hashtag: "Hashtags"
|
||||
hashtagDescription: "Vous pouvez afficher un mot-dièse en utilisant un croisillon\
|
||||
\ et du texte"
|
||||
hashtagDescription: "Vous pouvez afficher un mot-dièse en utilisant un croisillon
|
||||
et du texte"
|
||||
url: "URL"
|
||||
urlDescription: "L'adresse web peut être affichée."
|
||||
link: "Lien"
|
||||
linkDescription: "Une partie précise d'une phrase peut être liée à l'adresse web."
|
||||
bold: "Gras"
|
||||
boldDescription: "Il est possible de mettre le texte en exergue en le mettant en\
|
||||
\ gras."
|
||||
boldDescription: "Il est possible de mettre le texte en exergue en le mettant en
|
||||
gras."
|
||||
small: "Diminuer l'emphase"
|
||||
smallDescription: "Le contenu peut être affiché en petit et fin."
|
||||
center: "Centrer"
|
||||
|
@ -1036,8 +1036,8 @@ _mfm:
|
|||
inlineMath: "Formule mathématique (inline)"
|
||||
inlineMathDescription: "Afficher les formules mathématiques (KaTeX)."
|
||||
blockMath: "Formule mathématique (bloc)"
|
||||
blockMathDescription: "Afficher les formules mathématiques (KaTeX) multi-lignes\
|
||||
\ dans un bloc."
|
||||
blockMathDescription: "Afficher les formules mathématiques (KaTeX) multi-lignes
|
||||
dans un bloc."
|
||||
quote: "Citer"
|
||||
quoteDescription: "Affiche le contenu sous forme de citation."
|
||||
emoji: "Émojis personnalisés"
|
||||
|
@ -1067,8 +1067,8 @@ _mfm:
|
|||
x4: "Plus grand"
|
||||
x4Description: "Afficher le contenu en plus grand."
|
||||
blur: "Flou"
|
||||
blurDescription: "Le contenu peut être flouté ; il sera visible en le survolant\
|
||||
\ avec le curseur."
|
||||
blurDescription: "Le contenu peut être flouté ; il sera visible en le survolant
|
||||
avec le curseur."
|
||||
font: "Police de caractères"
|
||||
fontDescription: "Il est possible de choisir la police."
|
||||
rainbow: "Arc-en-ciel"
|
||||
|
@ -1109,14 +1109,14 @@ _menuDisplay:
|
|||
hide: "Masquer"
|
||||
_wordMute:
|
||||
muteWords: "Mots à filtrer"
|
||||
muteWordsDescription: "Séparer avec des espaces pour la condition AND. Séparer avec\
|
||||
\ un saut de ligne pour une condition OR."
|
||||
muteWordsDescription2: "Pour utiliser des expressions régulières (regex), mettez\
|
||||
\ les mots-clés entre barres obliques."
|
||||
muteWordsDescription: "Séparer avec des espaces pour la condition AND. Séparer avec
|
||||
un saut de ligne pour une condition OR."
|
||||
muteWordsDescription2: "Pour utiliser des expressions régulières (regex), mettez
|
||||
les mots-clés entre barres obliques."
|
||||
softDescription: "Masquez les notes de votre fil selon les paramètres que vous définissez."
|
||||
hardDescription: "Empêchez votre fil de charger les notes selon les paramètres que\
|
||||
\ vous définissez. Cette action est irréversible : si vous modifiez ces paramètres\
|
||||
\ plus tard, les notes précédemment filtrées ne seront pas récupérées."
|
||||
hardDescription: "Empêchez votre fil de charger les notes selon les paramètres que
|
||||
vous définissez. Cette action est irréversible : si vous modifiez ces paramètres
|
||||
plus tard, les notes précédemment filtrées ne seront pas récupérées."
|
||||
soft: "Doux"
|
||||
hard: "Strict"
|
||||
mutedNotes: "Notes filtrées"
|
||||
|
@ -1155,10 +1155,10 @@ _theme:
|
|||
darken: "Sombre"
|
||||
lighten: "Clair"
|
||||
inputConstantName: "Insérez un nom de constante"
|
||||
importInfo: "Vous pouvez importer un thème vers l’éditeur de thèmes en saisissant\
|
||||
\ son code ici."
|
||||
deleteConstantConfirm: "Êtes-vous sûr·e de vouloir supprimer la constante {const}\
|
||||
\ ?"
|
||||
importInfo: "Vous pouvez importer un thème vers l’éditeur de thèmes en saisissant
|
||||
son code ici."
|
||||
deleteConstantConfirm: "Êtes-vous sûr·e de vouloir supprimer la constante {const}
|
||||
?"
|
||||
keys:
|
||||
accent: "Accentuation"
|
||||
bg: "Arrière-plan"
|
||||
|
@ -1231,51 +1231,51 @@ _tutorial:
|
|||
step1_1: "Bienvenue!"
|
||||
step1_2: "On va vous installer. Vous serez opérationnel en un rien de temps"
|
||||
step2_1: "Tout d'abord, remplissez votre profil"
|
||||
step2_2: "En fournissant quelques informations sur qui vous êtes, il sera plus facile\
|
||||
\ pour les autres de savoir s'ils veulent voir vos notes ou vous suivre."
|
||||
step2_2: "En fournissant quelques informations sur qui vous êtes, il sera plus facile
|
||||
pour les autres de savoir s'ils veulent voir vos notes ou vous suivre."
|
||||
step3_1: "Maintenant il est temps de suivre des gens !"
|
||||
step3_2: "Votre page d'accueil et vos timelines sociales sont basées sur les personnes\
|
||||
\ que vous suivez, alors essayez de suivre quelques comptes pour commencer.\n\
|
||||
Cliquez sur le cercle plus en haut à droite d'un profil pour le suivre."
|
||||
step3_2: "Votre page d'accueil et vos timelines sociales sont basées sur les personnes
|
||||
que vous suivez, alors essayez de suivre quelques comptes pour commencer.\nCliquez
|
||||
sur le cercle plus en haut à droite d'un profil pour le suivre."
|
||||
step4_1: "On y va."
|
||||
step4_2: "Pour votre premier post, certaines personnes aiment faire un post {introduction}\
|
||||
\ ou un simple post 'Hello world'."
|
||||
step4_2: "Pour votre premier post, certaines personnes aiment faire un post {introduction}
|
||||
ou un simple post 'Hello world'."
|
||||
step5_1: "Lignes de temps, lignes de temps partout !"
|
||||
step5_2: "Votre instance a {timelines} différentes chronologies activées !"
|
||||
step5_3: "La timeline Home {icon} est l'endroit où vous pouvez voir les publications\
|
||||
\ de vos followers."
|
||||
step5_4: "La timeline locale {icon} est l'endroit où vous pouvez voir les messages\
|
||||
\ de tout le monde sur cette instance."
|
||||
step5_5: "La chronologie {icon} sociale est l'endroit où vous pouvez voir uniquement\
|
||||
\ les publications des comptes que vous suivez."
|
||||
step5_6: "La chronologie {icon} recommandée est l'endroit où vous pouvez voir les\
|
||||
\ publications des instances recommandées par les administrateurs."
|
||||
step5_7: "La timeline globale {icon} est l'endroit où vous pouvez voir les messages\
|
||||
\ de toutes les autres instances connectées."
|
||||
step5_3: "La timeline Home {icon} est l'endroit où vous pouvez voir les publications
|
||||
de vos followers."
|
||||
step5_4: "La timeline locale {icon} est l'endroit où vous pouvez voir les messages
|
||||
de tout le monde sur cette instance."
|
||||
step5_5: "La chronologie {icon} sociale est l'endroit où vous pouvez voir uniquement
|
||||
les publications des comptes que vous suivez."
|
||||
step5_6: "La chronologie {icon} recommandée est l'endroit où vous pouvez voir les
|
||||
publications des instances recommandées par les administrateurs."
|
||||
step5_7: "La timeline globale {icon} est l'endroit où vous pouvez voir les messages
|
||||
de toutes les autres instances connectées."
|
||||
step6_1: "Alors quel est cet endroit ?"
|
||||
step6_2: "Eh bien, vous ne venez pas de rejoindre Calckey. Vous avez rejoint un\
|
||||
\ portail vers le Fediverse, un réseau interconnecté de milliers de serveurs,\
|
||||
\ appelés \"instances\"."
|
||||
step6_3: "Chaque serveur fonctionne différemment, et tous les serveurs n'utilisent\
|
||||
\ pas Calckey. Cependant, celui-ci le fait ! C'est un peu délicat, mais vous aurez\
|
||||
\ le coup de main en un rien de temps."
|
||||
step6_2: "Eh bien, vous ne venez pas de rejoindre Calckey. Vous avez rejoint un
|
||||
portail vers le Fediverse, un réseau interconnecté de milliers de serveurs, appelés
|
||||
\"instances\"."
|
||||
step6_3: "Chaque serveur fonctionne différemment, et tous les serveurs n'utilisent
|
||||
pas Calckey. Cependant, celui-ci le fait ! C'est un peu délicat, mais vous aurez
|
||||
le coup de main en un rien de temps."
|
||||
step6_4: "Maintenant, allez-y, explorez et amusez-vous !"
|
||||
_2fa:
|
||||
alreadyRegistered: "Configuration déjà achevée."
|
||||
registerTOTP: "Ajouter un nouvel appareil"
|
||||
registerSecurityKey: "Enregistrer une clef"
|
||||
step1: "Tout d'abord, installez une application d'authentification, telle que {a}\
|
||||
\ ou {b}, sur votre appareil."
|
||||
step1: "Tout d'abord, installez une application d'authentification, telle que {a}
|
||||
ou {b}, sur votre appareil."
|
||||
step2: "Ensuite, scannez le code QR affiché sur l’écran."
|
||||
step2Url: "Vous pouvez également saisir cette URL si vous utilisez un programme\
|
||||
\ de bureau :"
|
||||
step2Url: "Vous pouvez également saisir cette URL si vous utilisez un programme
|
||||
de bureau :"
|
||||
step3: "Entrez le jeton affiché sur votre application pour compléter la configuration."
|
||||
step4: "À partir de maintenant, ce même jeton vous sera demandé à chacune de vos\
|
||||
\ connexions."
|
||||
securityKeyInfo: "Vous pouvez configurer l'authentification WebAuthN pour sécuriser\
|
||||
\ davantage le processus de connexion grâce à une clé de sécurité matérielle qui\
|
||||
\ prend en charge FIDO2, ou bien en configurant l'authentification par empreinte\
|
||||
\ digitale ou par code PIN sur votre appareil."
|
||||
step4: "À partir de maintenant, ce même jeton vous sera demandé à chacune de vos
|
||||
connexions."
|
||||
securityKeyInfo: "Vous pouvez configurer l'authentification WebAuthN pour sécuriser
|
||||
davantage le processus de connexion grâce à une clé de sécurité matérielle qui
|
||||
prend en charge FIDO2, ou bien en configurant l'authentification par empreinte
|
||||
digitale ou par code PIN sur votre appareil."
|
||||
_permissions:
|
||||
"read:account": "Afficher les informations du compte"
|
||||
"write:account": "Mettre à jour les informations de votre compte"
|
||||
|
@ -1311,8 +1311,8 @@ _permissions:
|
|||
"write:gallery-likes": "Gérer les mentions « J'aime » dans la galerie"
|
||||
_auth:
|
||||
shareAccess: "Autoriser \"{name}\" à accéder à votre compte ?"
|
||||
shareAccessAsk: "Voulez-vous vraiment autoriser cette application à accéder à votre\
|
||||
\ compte?"
|
||||
shareAccessAsk: "Voulez-vous vraiment autoriser cette application à accéder à votre
|
||||
compte?"
|
||||
permissionAsk: "Cette application nécessite les autorisations suivantes :"
|
||||
pleaseGoBack: "Veuillez retourner à l’application"
|
||||
callback: "Retour vers l’application"
|
||||
|
@ -1412,8 +1412,8 @@ _profile:
|
|||
youCanIncludeHashtags: "Vous pouvez également inclure des hashtags."
|
||||
metadata: "Informations supplémentaires"
|
||||
metadataEdit: "Éditer les informations supplémentaires"
|
||||
metadataDescription: "Vous pouvez afficher jusqu'à quatre informations supplémentaires\
|
||||
\ dans votre profil."
|
||||
metadataDescription: "Vous pouvez afficher jusqu'à quatre informations supplémentaires
|
||||
dans votre profil."
|
||||
metadataLabel: "Étiquette"
|
||||
metadataContent: "Contenu"
|
||||
changeAvatar: "Changer l'image de profil"
|
||||
|
@ -1487,8 +1487,8 @@ _pages:
|
|||
url: "URL de la page"
|
||||
summary: "Résumé de page"
|
||||
alignCenter: "Centrée"
|
||||
hideTitleWhenPinned: "Masquer le titre de la page lorsque celle-ci est épinglée\
|
||||
\ au profil"
|
||||
hideTitleWhenPinned: "Masquer le titre de la page lorsque celle-ci est épinglée
|
||||
au profil"
|
||||
font: "Police de caractères"
|
||||
fontSerif: "Serif"
|
||||
fontSansSerif: "Sans Serif"
|
||||
|
@ -1538,8 +1538,8 @@ _pages:
|
|||
note: "Note intégrée"
|
||||
_note:
|
||||
id: "Identifiant de la note"
|
||||
idDescription: "Pour configurer la note, vous pouvez aussi coller ici l'URL\
|
||||
\ correspondante."
|
||||
idDescription: "Pour configurer la note, vous pouvez aussi coller ici l'URL
|
||||
correspondante."
|
||||
detailed: "Afficher les détails"
|
||||
switch: "Interrupteur"
|
||||
_switch:
|
||||
|
@ -1692,8 +1692,8 @@ _pages:
|
|||
_dailyRannum:
|
||||
arg1: "Minimum"
|
||||
arg2: "Maximum"
|
||||
dailyRandomPick: "Sélectionné au hasard dans la liste (Quotidien pour chaque\
|
||||
\ utilisateur)"
|
||||
dailyRandomPick: "Sélectionné au hasard dans la liste (Quotidien pour chaque
|
||||
utilisateur)"
|
||||
_dailyRandomPick:
|
||||
arg1: "Listes"
|
||||
seedRandom: "Aléatoire (graine)"
|
||||
|
@ -1709,8 +1709,8 @@ _pages:
|
|||
_seedRandomPick:
|
||||
arg1: "Graine"
|
||||
arg2: "Listes"
|
||||
DRPWPM: "Sélectionné au hasard dans une liste de probabilités (Quotidien pour\
|
||||
\ chaque utilisateur)"
|
||||
DRPWPM: "Sélectionné au hasard dans une liste de probabilités (Quotidien pour
|
||||
chaque utilisateur)"
|
||||
_DRPWPM:
|
||||
arg1: "Liste de texte"
|
||||
pick: "Sélectionner dans la liste"
|
||||
|
@ -1889,10 +1889,10 @@ adminCustomCssWarn: Ce paramètre ne devrait être utilisé que si vous savez ce
|
|||
dans vos paramètres utilisateur.
|
||||
swipeOnDesktop: Permettre le style de glissement de fenêtre de mobile sur PC
|
||||
moveFromLabel: 'Compte depuis lequel vous migrez :'
|
||||
migrationConfirm: "Êtes-vous absolument certain⋅e que vous voulez migrer votre compte\
|
||||
\ vers {account} ? Une fois fait, vous ne pourrez pas revenir en arrière, et vous\
|
||||
\ ne pourrez plus utiliser le compte actuel normalement à nouveau.\nAussi, assurez-vous\
|
||||
\ d'avoir configuré le compte actuel comme le compte depuis lequel vous migrez."
|
||||
migrationConfirm: "Êtes-vous absolument certain⋅e que vous voulez migrer votre compte
|
||||
vers {account} ? Une fois fait, vous ne pourrez pas revenir en arrière, et vous
|
||||
ne pourrez plus utiliser le compte actuel normalement à nouveau.\nAussi, assurez-vous
|
||||
d'avoir configuré le compte actuel comme le compte depuis lequel vous migrez."
|
||||
_preferencesBackups:
|
||||
updatedAt: 'Mis à jour le : {date} {time}'
|
||||
cannotLoad: Le chargement a échoué
|
||||
|
@ -1934,8 +1934,8 @@ enterSendsMessage: Appuyer sur Entrée pendant la rédaction pour envoyer le mes
|
|||
allowedInstancesDescription: Hôtes des instances autorisées pour la fédération, chacun
|
||||
séparé par une nouvelle ligne (s'applique uniquement en mode privé).
|
||||
enableAutoSensitive: Marquage automatique du contenu sensible (NSFW)
|
||||
regexpErrorDescription: "Il y a eu une erreur dans l'expression régulière à la ligne\
|
||||
\ {line} de votre {tab} des mots masqués :"
|
||||
regexpErrorDescription: "Il y a eu une erreur dans l'expression régulière à la ligne
|
||||
{line} de votre {tab} des mots masqués :"
|
||||
forwardReportIsAnonymous: À la place de votre compte, un compte système anonyme sera
|
||||
affiché comme rapporteur à l'instance distante.
|
||||
noThankYou: Non merci
|
||||
|
@ -1944,10 +1944,10 @@ renoteMute: Mettre en silence les renotes
|
|||
flagSpeakAsCat: Parler comme un chat
|
||||
flagSpeakAsCatDescription: Vos messages seront nyanifiés en mode chat
|
||||
hiddenTags: Hashtags cachés
|
||||
hiddenTagsDescription: "Lister les hashtags (sans le #) que vous souhaitez cacher\
|
||||
\ de tendances et explorer. Les hashtags cachés sont toujours découvrables par d'autres\
|
||||
\ moyens. Les instances bloqués ne sont pas ne sont pas affectés, même si ils sont\
|
||||
\ présent dans cette liste."
|
||||
hiddenTagsDescription: "Lister les hashtags (sans le #) que vous souhaitez cacher
|
||||
de tendances et explorer. Les hashtags cachés sont toujours découvrables par d'autres
|
||||
moyens. Les instances bloqués ne sont pas ne sont pas affectés, même si ils sont
|
||||
présent dans cette liste."
|
||||
antennaInstancesDescription: Lister un hôte d'instance par ligne
|
||||
userSaysSomethingReason: '{name} a dit {reason}'
|
||||
breakFollowConfirm: Êtes vous sur de vouloir retirer l'abonné ?
|
||||
|
@ -2005,17 +2005,16 @@ indexNotice: Indexation en cours. Cela prendra certainement du temps, veuillez n
|
|||
customKaTeXMacro: Macros KaTeX personnalisées
|
||||
enableCustomKaTeXMacro: Activer les macros KaTeX personnalisées
|
||||
noteId: ID de note
|
||||
customKaTeXMacroDescription: "Définissez des macros pour écrire des expressions mathématiques\
|
||||
\ simplement ! La notation se conforme aux définitions de commandes LaTeX et s'écrit\
|
||||
\ \\newcommand{\\name}{content} ou \\newcommand{\\name}[number of arguments]{content}.\
|
||||
\ Par exemple, \\newcommand{\\add}[2]{#1 + #2} étendra \\add{3}{foo} en 3 + foo.\
|
||||
\ Les accolades entourant le nom de la macro peuvent être changés pour des parenthèses\
|
||||
\ ou des crochets. Cela affectera les types de parenthèses utilisées pour les arguments.\
|
||||
\ Une (et une seule) macro peut être définie par ligne, et vous ne pouvez pas couper\
|
||||
\ la ligne au milieu d'une définition. Les lignes invalides sont simplement ignorées.\
|
||||
\ Seulement de simples fonctions de substitution de chaines sont supportées; la\
|
||||
\ syntaxe avancée, telle que la ramification conditionnelle, ne peut pas être utilisée\
|
||||
\ ici."
|
||||
customKaTeXMacroDescription: "Définissez des macros pour écrire des expressions mathématiques
|
||||
simplement ! La notation se conforme aux définitions de commandes LaTeX et s'écrit
|
||||
\\newcommand{\\name}{content} ou \\newcommand{\\name}[number of arguments]{content}.
|
||||
Par exemple, \\newcommand{\\add}[2]{#1 + #2} étendra \\add{3}{foo} en 3 + foo. Les
|
||||
accolades entourant le nom de la macro peuvent être changés pour des parenthèses
|
||||
ou des crochets. Cela affectera les types de parenthèses utilisées pour les arguments.
|
||||
Une (et une seule) macro peut être définie par ligne, et vous ne pouvez pas couper
|
||||
la ligne au milieu d'une définition. Les lignes invalides sont simplement ignorées.
|
||||
Seulement de simples fonctions de substitution de chaines sont supportées; la syntaxe
|
||||
avancée, telle que la ramification conditionnelle, ne peut pas être utilisée ici."
|
||||
enableRecommendedTimeline: Activer la chronologie recommandée
|
||||
silenceThisInstance: Ne plus montrer cet instance
|
||||
silencedInstances: Instances silencieuses
|
||||
|
@ -2038,3 +2037,4 @@ signupsDisabled: Les inscriptions sur ce serveur sont actuellement désactivés,
|
|||
apps: Applications
|
||||
userSaysSomethingReasonReply: '{noms} a répondu à une note contenant {raison}'
|
||||
defaultValueIs: 'défaut : {valeur}'
|
||||
searchPlaceholder: Recherchez sur Calckey
|
||||
|
|
|
@ -1108,9 +1108,9 @@ _wordMute:
|
|||
muteWordsDescription2: "将关键字用斜线括起来表示正则表达式。"
|
||||
softDescription: "隐藏时间线中指定条件的帖子。"
|
||||
hardDescription: "防止将具有指定条件的帖子添加到时间线。 即使您更改条件,原先未添加的帖文也会被排除在外。"
|
||||
soft: "软屏蔽"
|
||||
hard: "硬屏蔽"
|
||||
mutedNotes: "已静音的帖子"
|
||||
soft: "软过滤"
|
||||
hard: "硬过滤"
|
||||
mutedNotes: "已过滤的帖子"
|
||||
_instanceMute:
|
||||
instanceMuteDescription: "静音列出服务器中的所有帖子和转帖,包括服务器的用户回复。"
|
||||
instanceMuteDescription2: "设置时用换行符来分隔"
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
"type": "git",
|
||||
"url": "https://codeberg.org/calckey/calckey.git"
|
||||
},
|
||||
"packageManager": "pnpm@8.6.3",
|
||||
"packageManager": "pnpm@8.6.6",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"rebuild": "pnpm run clean && pnpm node ./scripts/build-greet.js && pnpm -r run build && pnpm run gulp",
|
||||
|
|
|
@ -37,7 +37,7 @@ export default async (job: Bull.Job<InboxJobData>): Promise<string> => {
|
|||
|
||||
if (!signature?.keyId) {
|
||||
const err = `Invalid signature: ${signature}`;
|
||||
job.moveToFailed({message: err});
|
||||
job.moveToFailed({ message: err });
|
||||
return err;
|
||||
}
|
||||
//#endregion
|
||||
|
|
|
@ -1,5 +1,11 @@
|
|||
import define from "../define.js";
|
||||
import { redisClient } from "@/db/redis.js";
|
||||
import * as fs from "node:fs";
|
||||
import { fileURLToPath } from "node:url";
|
||||
import { dirname } from "node:path";
|
||||
|
||||
const _filename = fileURLToPath(import.meta.url);
|
||||
const _dirname = dirname(_filename);
|
||||
|
||||
export const meta = {
|
||||
tags: ["meta"],
|
||||
|
@ -35,7 +41,10 @@ export default define(meta, paramDef, async (ps) => {
|
|||
)
|
||||
.then((response) => response.json())
|
||||
.catch(() => {
|
||||
patrons = cachedPatrons ? JSON.parse(cachedPatrons) : [];
|
||||
const staticPatrons = JSON.parse(
|
||||
fs.readFileSync(`${_dirname}/../../../../../../patrons.json`, "utf-8"),
|
||||
);
|
||||
patrons = cachedPatrons ? JSON.parse(cachedPatrons) : staticPatrons;
|
||||
});
|
||||
await redisClient.set("patrons", JSON.stringify(patrons), "EX", 3600);
|
||||
}
|
||||
|
|
|
@ -57,7 +57,7 @@
|
|||
"matter-js": "0.18.0",
|
||||
"mfm-js": "0.23.3",
|
||||
"photoswipe": "5.3.7",
|
||||
"prettier": "2.8.8",
|
||||
"prettier": "3.0.0",
|
||||
"prettier-plugin-vue": "1.1.6",
|
||||
"prismjs": "1.29.0",
|
||||
"punycode": "2.1.1",
|
||||
|
|
|
@ -67,7 +67,7 @@ function send() {
|
|||
userId: props.user.id,
|
||||
comment: comment.value,
|
||||
},
|
||||
undefined
|
||||
undefined,
|
||||
).then((res) => {
|
||||
os.alert({
|
||||
type: "success",
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
0,
|
||||
1 -
|
||||
angleDiff(hAngle, angle) / Math.PI -
|
||||
numbersOpacityFactor
|
||||
numbersOpacityFactor,
|
||||
)
|
||||
"
|
||||
/>
|
||||
|
@ -48,7 +48,7 @@
|
|||
0,
|
||||
1 -
|
||||
angleDiff(hAngle, angle) / Math.PI -
|
||||
numbersOpacityFactor
|
||||
numbersOpacityFactor,
|
||||
)
|
||||
"
|
||||
>
|
||||
|
@ -151,7 +151,7 @@ const props = withDefaults(
|
|||
graduations: "dots",
|
||||
fadeGraduations: true,
|
||||
sAnimation: "elastic",
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
const graduationsMajor = computed(() => {
|
||||
|
@ -192,7 +192,7 @@ let sOneRound = false;
|
|||
function tick() {
|
||||
const now = new Date();
|
||||
now.setMinutes(
|
||||
now.getMinutes() + (new Date().getTimezoneOffset() + props.offset)
|
||||
now.getMinutes() + (new Date().getTimezoneOffset() + props.offset),
|
||||
);
|
||||
s = now.getSeconds();
|
||||
m = now.getMinutes();
|
||||
|
@ -225,7 +225,7 @@ function calcColors() {
|
|||
const computedStyle = getComputedStyle(document.documentElement);
|
||||
const dark = tinycolor(computedStyle.getPropertyValue("--bg")).isDark();
|
||||
const accent = tinycolor(
|
||||
computedStyle.getPropertyValue("--accent")
|
||||
computedStyle.getPropertyValue("--accent"),
|
||||
).toHexString();
|
||||
majorGraduationColor = dark
|
||||
? "rgba(255, 255, 255, 0.3)"
|
||||
|
@ -233,7 +233,7 @@ function calcColors() {
|
|||
//minorGraduationColor = dark ? 'rgba(255, 255, 255, 0.2)' : 'rgba(0, 0, 0, 0.2)';
|
||||
sHandColor = dark ? "rgba(255, 255, 255, 0.5)" : "rgba(0, 0, 0, 0.3)";
|
||||
mHandColor = tinycolor(
|
||||
computedStyle.getPropertyValue("--fg")
|
||||
computedStyle.getPropertyValue("--fg"),
|
||||
).toHexString();
|
||||
hHandColor = accent;
|
||||
nowColor = accent;
|
||||
|
|
|
@ -268,7 +268,7 @@ function exec() {
|
|||
} else if (props.type === "hashtag") {
|
||||
if (!props.q || props.q === "") {
|
||||
hashtags.value = JSON.parse(
|
||||
localStorage.getItem("hashtags") || "[]"
|
||||
localStorage.getItem("hashtags") || "[]",
|
||||
);
|
||||
fetching.value = false;
|
||||
} else {
|
||||
|
@ -288,7 +288,7 @@ function exec() {
|
|||
// キャッシュ
|
||||
sessionStorage.setItem(
|
||||
cacheKey,
|
||||
JSON.stringify(searchedHashtags)
|
||||
JSON.stringify(searchedHashtags),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
@ -298,7 +298,7 @@ function exec() {
|
|||
// 最近使った絵文字をサジェスト
|
||||
emojis.value = defaultStore.state.recentlyUsedEmojis
|
||||
.map((emoji) =>
|
||||
emojiDb.find((dbEmoji) => dbEmoji.emoji === emoji)
|
||||
emojiDb.find((dbEmoji) => dbEmoji.emoji === emoji),
|
||||
)
|
||||
.filter((x) => x) as EmojiDef[];
|
||||
return;
|
||||
|
@ -450,7 +450,7 @@ onMounted(() => {
|
|||
nextTick(() => {
|
||||
exec();
|
||||
});
|
||||
}
|
||||
},
|
||||
);
|
||||
});
|
||||
});
|
||||
|
@ -470,7 +470,9 @@ onBeforeUnmount(() => {
|
|||
max-width: 100%;
|
||||
margin-top: calc(1em + 8px);
|
||||
overflow: hidden;
|
||||
transition: top 0.1s ease, left 0.1s ease;
|
||||
transition:
|
||||
top 0.1s ease,
|
||||
left 0.1s ease;
|
||||
|
||||
> ol {
|
||||
display: block;
|
||||
|
|
|
@ -94,7 +94,7 @@ function onMousedown(evt: MouseEvent): void {
|
|||
target.clientWidth,
|
||||
target.clientHeight,
|
||||
circleCenterX,
|
||||
circleCenterY
|
||||
circleCenterY,
|
||||
);
|
||||
|
||||
window.setTimeout(() => {
|
||||
|
|
|
@ -25,7 +25,7 @@ type Captcha = {
|
|||
| "expired-callback"
|
||||
| "error-callback"
|
||||
| "endpoint"]?: unknown;
|
||||
}
|
||||
},
|
||||
): string;
|
||||
remove(id: string): void;
|
||||
execute(id: string): void;
|
||||
|
@ -78,7 +78,7 @@ const src = computed(() => {
|
|||
});
|
||||
|
||||
const captcha = computed<Captcha>(
|
||||
() => window[variable.value] || ({} as unknown as Captcha)
|
||||
() => window[variable.value] || ({} as unknown as Captcha),
|
||||
);
|
||||
|
||||
if (loaded) {
|
||||
|
@ -91,7 +91,7 @@ if (loaded) {
|
|||
async: true,
|
||||
id: props.provider,
|
||||
src: src.value,
|
||||
})
|
||||
}),
|
||||
)
|
||||
).addEventListener("load", () => (available.value = true));
|
||||
}
|
||||
|
|
|
@ -34,7 +34,7 @@ const props = withDefaults(
|
|||
}>(),
|
||||
{
|
||||
full: false,
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
const isFollowing = ref<boolean>(props.channel.isFollowing);
|
||||
|
|
|
@ -35,7 +35,7 @@ const props = withDefaults(
|
|||
}>(),
|
||||
{
|
||||
extractor: (item) => item,
|
||||
}
|
||||
},
|
||||
);
|
||||
</script>
|
||||
|
||||
|
|
|
@ -91,7 +91,7 @@ Chart.register(
|
|||
Tooltip,
|
||||
SubTitle,
|
||||
Filler,
|
||||
zoomPlugin
|
||||
zoomPlugin,
|
||||
//gradient,
|
||||
);
|
||||
|
||||
|
@ -179,11 +179,11 @@ const render = () => {
|
|||
|
||||
// フォントカラー
|
||||
Chart.defaults.color = getComputedStyle(
|
||||
document.documentElement
|
||||
document.documentElement,
|
||||
).getPropertyValue("--fg");
|
||||
|
||||
const maxes = chartData.series.map((x, i) =>
|
||||
Math.max(...x.data.map((d) => d.y))
|
||||
Math.max(...x.data.map((d) => d.y)),
|
||||
);
|
||||
|
||||
chartInstance = new Chart(chartEl.value, {
|
||||
|
@ -471,9 +471,9 @@ const fetchNotesChart = async (type: string): Promise<typeof chartData> => {
|
|||
raw.local.inc,
|
||||
negate(raw.local.dec),
|
||||
raw.remote.inc,
|
||||
negate(raw.remote.dec)
|
||||
negate(raw.remote.dec),
|
||||
)
|
||||
: sum(raw[type].inc, negate(raw[type].dec))
|
||||
: sum(raw[type].inc, negate(raw[type].dec)),
|
||||
),
|
||||
color: "#888888",
|
||||
},
|
||||
|
@ -483,7 +483,7 @@ const fetchNotesChart = async (type: string): Promise<typeof chartData> => {
|
|||
data: format(
|
||||
type === "combined"
|
||||
? sum(raw.local.diffs.renote, raw.remote.diffs.renote)
|
||||
: raw[type].diffs.renote
|
||||
: raw[type].diffs.renote,
|
||||
),
|
||||
color: colors.green,
|
||||
},
|
||||
|
@ -493,7 +493,7 @@ const fetchNotesChart = async (type: string): Promise<typeof chartData> => {
|
|||
data: format(
|
||||
type === "combined"
|
||||
? sum(raw.local.diffs.reply, raw.remote.diffs.reply)
|
||||
: raw[type].diffs.reply
|
||||
: raw[type].diffs.reply,
|
||||
),
|
||||
color: colors.yellow,
|
||||
},
|
||||
|
@ -503,7 +503,7 @@ const fetchNotesChart = async (type: string): Promise<typeof chartData> => {
|
|||
data: format(
|
||||
type === "combined"
|
||||
? sum(raw.local.diffs.normal, raw.remote.diffs.normal)
|
||||
: raw[type].diffs.normal
|
||||
: raw[type].diffs.normal,
|
||||
),
|
||||
color: colors.blue,
|
||||
},
|
||||
|
@ -514,9 +514,9 @@ const fetchNotesChart = async (type: string): Promise<typeof chartData> => {
|
|||
type === "combined"
|
||||
? sum(
|
||||
raw.local.diffs.withFile,
|
||||
raw.remote.diffs.withFile
|
||||
raw.remote.diffs.withFile,
|
||||
)
|
||||
: raw[type].diffs.withFile
|
||||
: raw[type].diffs.withFile,
|
||||
),
|
||||
color: colors.purple,
|
||||
},
|
||||
|
@ -567,8 +567,8 @@ const fetchUsersChart = async (total: boolean): Promise<typeof chartData> => {
|
|||
raw.local.inc,
|
||||
negate(raw.local.dec),
|
||||
raw.remote.inc,
|
||||
negate(raw.remote.dec)
|
||||
)
|
||||
negate(raw.remote.dec),
|
||||
),
|
||||
),
|
||||
},
|
||||
{
|
||||
|
@ -577,7 +577,7 @@ const fetchUsersChart = async (total: boolean): Promise<typeof chartData> => {
|
|||
data: format(
|
||||
total
|
||||
? raw.local.total
|
||||
: sum(raw.local.inc, negate(raw.local.dec))
|
||||
: sum(raw.local.inc, negate(raw.local.dec)),
|
||||
),
|
||||
},
|
||||
{
|
||||
|
@ -586,7 +586,7 @@ const fetchUsersChart = async (total: boolean): Promise<typeof chartData> => {
|
|||
data: format(
|
||||
total
|
||||
? raw.remote.total
|
||||
: sum(raw.remote.inc, negate(raw.remote.dec))
|
||||
: sum(raw.remote.inc, negate(raw.remote.dec)),
|
||||
),
|
||||
},
|
||||
],
|
||||
|
@ -675,8 +675,8 @@ const fetchDriveChart = async (): Promise<typeof chartData> => {
|
|||
raw.local.incSize,
|
||||
negate(raw.local.decSize),
|
||||
raw.remote.incSize,
|
||||
negate(raw.remote.decSize)
|
||||
)
|
||||
negate(raw.remote.decSize),
|
||||
),
|
||||
),
|
||||
},
|
||||
{
|
||||
|
@ -719,8 +719,8 @@ const fetchDriveFilesChart = async (): Promise<typeof chartData> => {
|
|||
raw.local.incCount,
|
||||
negate(raw.local.decCount),
|
||||
raw.remote.incCount,
|
||||
negate(raw.remote.decCount)
|
||||
)
|
||||
negate(raw.remote.decCount),
|
||||
),
|
||||
),
|
||||
},
|
||||
{
|
||||
|
@ -778,7 +778,7 @@ const fetchInstanceRequestsChart = async (): Promise<typeof chartData> => {
|
|||
};
|
||||
|
||||
const fetchInstanceUsersChart = async (
|
||||
total: boolean
|
||||
total: boolean,
|
||||
): Promise<typeof chartData> => {
|
||||
const raw = await os.apiGet("charts/instance", {
|
||||
host: props.args.host,
|
||||
|
@ -794,7 +794,7 @@ const fetchInstanceUsersChart = async (
|
|||
data: format(
|
||||
total
|
||||
? raw.users.total
|
||||
: sum(raw.users.inc, negate(raw.users.dec))
|
||||
: sum(raw.users.inc, negate(raw.users.dec)),
|
||||
),
|
||||
},
|
||||
],
|
||||
|
@ -802,7 +802,7 @@ const fetchInstanceUsersChart = async (
|
|||
};
|
||||
|
||||
const fetchInstanceNotesChart = async (
|
||||
total: boolean
|
||||
total: boolean,
|
||||
): Promise<typeof chartData> => {
|
||||
const raw = await os.apiGet("charts/instance", {
|
||||
host: props.args.host,
|
||||
|
@ -818,7 +818,7 @@ const fetchInstanceNotesChart = async (
|
|||
data: format(
|
||||
total
|
||||
? raw.notes.total
|
||||
: sum(raw.notes.inc, negate(raw.notes.dec))
|
||||
: sum(raw.notes.inc, negate(raw.notes.dec)),
|
||||
),
|
||||
},
|
||||
],
|
||||
|
@ -826,7 +826,7 @@ const fetchInstanceNotesChart = async (
|
|||
};
|
||||
|
||||
const fetchInstanceFfChart = async (
|
||||
total: boolean
|
||||
total: boolean,
|
||||
): Promise<typeof chartData> => {
|
||||
const raw = await os.apiGet("charts/instance", {
|
||||
host: props.args.host,
|
||||
|
@ -842,7 +842,7 @@ const fetchInstanceFfChart = async (
|
|||
data: format(
|
||||
total
|
||||
? raw.following.total
|
||||
: sum(raw.following.inc, negate(raw.following.dec))
|
||||
: sum(raw.following.inc, negate(raw.following.dec)),
|
||||
),
|
||||
},
|
||||
{
|
||||
|
@ -852,7 +852,7 @@ const fetchInstanceFfChart = async (
|
|||
data: format(
|
||||
total
|
||||
? raw.followers.total
|
||||
: sum(raw.followers.inc, negate(raw.followers.dec))
|
||||
: sum(raw.followers.inc, negate(raw.followers.dec)),
|
||||
),
|
||||
},
|
||||
],
|
||||
|
@ -860,7 +860,7 @@ const fetchInstanceFfChart = async (
|
|||
};
|
||||
|
||||
const fetchInstanceDriveUsageChart = async (
|
||||
total: boolean
|
||||
total: boolean,
|
||||
): Promise<typeof chartData> => {
|
||||
const raw = await os.apiGet("charts/instance", {
|
||||
host: props.args.host,
|
||||
|
@ -877,7 +877,7 @@ const fetchInstanceDriveUsageChart = async (
|
|||
data: format(
|
||||
total
|
||||
? raw.drive.totalUsage
|
||||
: sum(raw.drive.incUsage, negate(raw.drive.decUsage))
|
||||
: sum(raw.drive.incUsage, negate(raw.drive.decUsage)),
|
||||
),
|
||||
},
|
||||
],
|
||||
|
@ -885,7 +885,7 @@ const fetchInstanceDriveUsageChart = async (
|
|||
};
|
||||
|
||||
const fetchInstanceDriveFilesChart = async (
|
||||
total: boolean
|
||||
total: boolean,
|
||||
): Promise<typeof chartData> => {
|
||||
const raw = await os.apiGet("charts/instance", {
|
||||
host: props.args.host,
|
||||
|
@ -901,7 +901,7 @@ const fetchInstanceDriveFilesChart = async (
|
|||
data: format(
|
||||
total
|
||||
? raw.drive.totalFiles
|
||||
: sum(raw.drive.incFiles, negate(raw.drive.decFiles))
|
||||
: sum(raw.drive.incFiles, negate(raw.drive.decFiles)),
|
||||
),
|
||||
},
|
||||
],
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
message.groupId
|
||||
? `/my/messaging/group/${message.groupId}`
|
||||
: `/my/messaging/${getAcct(
|
||||
isMe(message) ? message.recipient : message.user
|
||||
isMe(message) ? message.recipient : message.user,
|
||||
)}`
|
||||
"
|
||||
>
|
||||
|
|
|
@ -18,13 +18,13 @@ const props = defineProps<{
|
|||
}>();
|
||||
|
||||
const prismLang = computed(() =>
|
||||
Prism.languages[props.lang] ? props.lang : "js"
|
||||
Prism.languages[props.lang] ? props.lang : "js",
|
||||
);
|
||||
const html = computed(() =>
|
||||
Prism.highlight(
|
||||
props.code,
|
||||
Prism.languages[prismLang.value],
|
||||
prismLang.value
|
||||
)
|
||||
prismLang.value,
|
||||
),
|
||||
);
|
||||
</script>
|
||||
|
|
|
@ -12,6 +12,6 @@ defineProps<{
|
|||
}>();
|
||||
|
||||
const XCode = defineAsyncComponent(
|
||||
() => import("@/components/MkCode.core.vue")
|
||||
() => import("@/components/MkCode.core.vue"),
|
||||
);
|
||||
</script>
|
||||
|
|
|
@ -125,7 +125,7 @@ export default defineComponent({
|
|||
},
|
||||
{
|
||||
immediate: true,
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
this.$el.style.setProperty("--maxHeight", this.maxHeight + "px");
|
||||
|
@ -174,7 +174,9 @@ export default defineComponent({
|
|||
.container-toggle-enter-active,
|
||||
.container-toggle-leave-active {
|
||||
overflow-y: hidden;
|
||||
transition: opacity 0.5s, height 0.5s !important;
|
||||
transition:
|
||||
opacity 0.5s,
|
||||
height 0.5s !important;
|
||||
}
|
||||
.container-toggle-enter-from {
|
||||
opacity: 0;
|
||||
|
|
|
@ -80,7 +80,8 @@ function onMousedown(evt: Event) {
|
|||
|
||||
.fade-enter-active,
|
||||
.fade-leave-active {
|
||||
transition: opacity 0.5s cubic-bezier(0.16, 1, 0.3, 1),
|
||||
transition:
|
||||
opacity 0.5s cubic-bezier(0.16, 1, 0.3, 1),
|
||||
transform 0.5s cubic-bezier(0.16, 1, 0.3, 1);
|
||||
transform-origin: left top;
|
||||
}
|
||||
|
|
|
@ -118,7 +118,7 @@ onMounted(() => {
|
|||
|
||||
const selection = cropper.getCropperSelection()!;
|
||||
selection.themeColor = tinycolor(
|
||||
computedStyle.getPropertyValue("--accent")
|
||||
computedStyle.getPropertyValue("--accent"),
|
||||
).toHexString();
|
||||
selection.aspectRatio = props.aspectRatio;
|
||||
selection.initialAspectRatio = props.aspectRatio;
|
||||
|
|
|
@ -63,7 +63,9 @@ defineExpose({
|
|||
> span {
|
||||
background: var(--cwBg) !important;
|
||||
color: var(--cwFg);
|
||||
transition: background 0.2s, color 0.2s;
|
||||
transition:
|
||||
background 0.2s,
|
||||
color 0.2s;
|
||||
> span {
|
||||
font-weight: 500;
|
||||
&::before {
|
||||
|
|
|
@ -84,8 +84,8 @@ export default defineComponent({
|
|||
class: "ph-caret-down ph-bold ph-lg icon",
|
||||
}),
|
||||
]),
|
||||
]
|
||||
)
|
||||
],
|
||||
),
|
||||
);
|
||||
|
||||
return [el, separator];
|
||||
|
@ -119,7 +119,7 @@ export default defineComponent({
|
|||
: {
|
||||
class: "sqadhkmv" + (props.noGap ? " noGap" : ""),
|
||||
},
|
||||
{ default: renderChildren }
|
||||
{ default: renderChildren },
|
||||
);
|
||||
},
|
||||
});
|
||||
|
@ -140,7 +140,8 @@ export default defineComponent({
|
|||
}
|
||||
|
||||
> .list-enter-active {
|
||||
transition: transform 0.7s cubic-bezier(0.23, 1, 0.32, 1),
|
||||
transition:
|
||||
transform 0.7s cubic-bezier(0.23, 1, 0.32, 1),
|
||||
opacity 0.7s cubic-bezier(0.23, 1, 0.32, 1);
|
||||
}
|
||||
|
||||
|
|
|
@ -78,14 +78,24 @@
|
|||
okButtonDisabled &&
|
||||
disabledReason === 'charactersExceeded'
|
||||
"
|
||||
v-text="i18n.t('_dialog.charactersExceeded', { current: (inputValue as string).length, max: input.maxLength ?? 'NaN' })"
|
||||
v-text="
|
||||
i18n.t('_dialog.charactersExceeded', {
|
||||
current: (inputValue as string).length,
|
||||
max: input.maxLength ?? 'NaN',
|
||||
})
|
||||
"
|
||||
/>
|
||||
<span
|
||||
v-else-if="
|
||||
okButtonDisabled &&
|
||||
disabledReason === 'charactersBelow'
|
||||
"
|
||||
v-text="i18n.t('_dialog.charactersBelow', { current: (inputValue as string).length, min: input.minLength ?? 'NaN' })"
|
||||
v-text="
|
||||
i18n.t('_dialog.charactersBelow', {
|
||||
current: (inputValue as string).length,
|
||||
min: input.minLength ?? 'NaN',
|
||||
})
|
||||
"
|
||||
/>
|
||||
</template>
|
||||
<template v-if="input.type === 'search'" #suffix>
|
||||
|
@ -258,7 +268,7 @@ const props = withDefaults(
|
|||
isYesNo: false,
|
||||
|
||||
cancelableByBgClick: true,
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
const emit = defineEmits<{
|
||||
|
@ -272,7 +282,7 @@ const inputValue = ref<string | number | null>(props.input?.default ?? null);
|
|||
const selectedValue = ref(props.select?.default ?? null);
|
||||
|
||||
let disabledReason = $ref<null | "charactersExceeded" | "charactersBelow">(
|
||||
null
|
||||
null,
|
||||
);
|
||||
const okButtonDisabled = $computed<boolean>(() => {
|
||||
if (props.input) {
|
||||
|
@ -439,7 +449,7 @@ async function openSearchFilters(ev) {
|
|||
},
|
||||
],
|
||||
ev.target,
|
||||
{ noReturnFocus: true }
|
||||
{ noReturnFocus: true },
|
||||
);
|
||||
inputEl.value.focus();
|
||||
inputEl.value.selectRange(inputValue.value.length, inputValue.value.length); // cursor at end
|
||||
|
|
|
@ -23,7 +23,7 @@ const props = withDefaults(
|
|||
showS: true,
|
||||
showMs: false,
|
||||
offset: 0 - new Date().getTimezoneOffset(),
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
let intervalId;
|
||||
|
@ -45,7 +45,7 @@ watch(showColon, (v) => {
|
|||
const tick = () => {
|
||||
const now = new Date();
|
||||
now.setMinutes(
|
||||
now.getMinutes() + (new Date().getTimezoneOffset() + props.offset)
|
||||
now.getMinutes() + (new Date().getTimezoneOffset() + props.offset),
|
||||
);
|
||||
hh.value = now.getHours().toString().padStart(2, "0");
|
||||
mm.value = now.getMinutes().toString().padStart(2, "0");
|
||||
|
@ -65,7 +65,7 @@ watch(
|
|||
if (intervalId) window.clearInterval(intervalId);
|
||||
intervalId = window.setInterval(tick, props.showMs ? 10 : 1000);
|
||||
},
|
||||
{ immediate: true }
|
||||
{ immediate: true },
|
||||
);
|
||||
|
||||
onUnmounted(() => {
|
||||
|
|
|
@ -56,7 +56,7 @@ const props = withDefaults(
|
|||
{
|
||||
isSelected: false,
|
||||
selectMode: false,
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
const emit = defineEmits<{
|
||||
|
@ -68,7 +68,7 @@ const emit = defineEmits<{
|
|||
const isDragging = ref(false);
|
||||
|
||||
const title = computed(
|
||||
() => `${props.file.name}\n${props.file.type} ${bytes(props.file.size)}`
|
||||
() => `${props.file.name}\n${props.file.type} ${bytes(props.file.size)}`,
|
||||
);
|
||||
|
||||
function getMenu() {
|
||||
|
@ -124,7 +124,7 @@ function onClick(ev: MouseEvent) {
|
|||
getMenu(),
|
||||
(ev.currentTarget ?? ev.target ?? undefined) as
|
||||
| HTMLElement
|
||||
| undefined
|
||||
| undefined,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -138,7 +138,7 @@ function onDragstart(ev: DragEvent) {
|
|||
ev.dataTransfer.effectAllowed = "move";
|
||||
ev.dataTransfer.setData(
|
||||
_DATA_TRANSFER_DRIVE_FILE_,
|
||||
JSON.stringify(props.file)
|
||||
JSON.stringify(props.file),
|
||||
);
|
||||
}
|
||||
isDragging.value = true;
|
||||
|
@ -186,7 +186,7 @@ function describe() {
|
|||
});
|
||||
},
|
||||
},
|
||||
"closed"
|
||||
"closed",
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -52,7 +52,7 @@ const props = withDefaults(
|
|||
{
|
||||
isSelected: false,
|
||||
selectMode: false,
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
const emit = defineEmits<{
|
||||
|
@ -184,7 +184,7 @@ function onDragstart(ev: DragEvent) {
|
|||
ev.dataTransfer.effectAllowed = "move";
|
||||
ev.dataTransfer.setData(
|
||||
_DATA_TRANSFER_DRIVE_FOLDER_,
|
||||
JSON.stringify(props.folder)
|
||||
JSON.stringify(props.folder),
|
||||
);
|
||||
isDragging.value = true;
|
||||
|
||||
|
@ -256,13 +256,13 @@ function onContextmenu(ev: MouseEvent) {
|
|||
action: () => {
|
||||
os.popup(
|
||||
defineAsyncComponent(
|
||||
() => import("@/components/MkDriveWindow.vue")
|
||||
() => import("@/components/MkDriveWindow.vue"),
|
||||
),
|
||||
{
|
||||
initialFolder: props.folder,
|
||||
},
|
||||
{},
|
||||
"closed"
|
||||
"closed",
|
||||
);
|
||||
},
|
||||
},
|
||||
|
@ -280,7 +280,7 @@ function onContextmenu(ev: MouseEvent) {
|
|||
action: deleteFolder,
|
||||
},
|
||||
],
|
||||
ev
|
||||
ev,
|
||||
);
|
||||
}
|
||||
</script>
|
||||
|
|
|
@ -29,7 +29,7 @@ const emit = defineEmits<{
|
|||
(
|
||||
ev: "upload",
|
||||
file: File,
|
||||
folder?: Misskey.entities.DriveFolder | null
|
||||
folder?: Misskey.entities.DriveFolder | null,
|
||||
): void;
|
||||
(ev: "removeFile", v: Misskey.entities.DriveFile["id"]): void;
|
||||
(ev: "removeFolder", v: Misskey.entities.DriveFolder["id"]): void;
|
||||
|
|
|
@ -161,17 +161,17 @@ const props = withDefaults(
|
|||
{
|
||||
multiple: false,
|
||||
select: null,
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
const emit = defineEmits<{
|
||||
(
|
||||
ev: "selected",
|
||||
v: Misskey.entities.DriveFile | Misskey.entities.DriveFolder
|
||||
v: Misskey.entities.DriveFile | Misskey.entities.DriveFolder,
|
||||
): void;
|
||||
(
|
||||
ev: "change-selection",
|
||||
v: Misskey.entities.DriveFile[] | Misskey.entities.DriveFolder[]
|
||||
v: Misskey.entities.DriveFile[] | Misskey.entities.DriveFolder[],
|
||||
): void;
|
||||
(ev: "move-root"): void;
|
||||
(ev: "cd", v: Misskey.entities.DriveFolder | null): void;
|
||||
|
@ -207,7 +207,7 @@ const ilFilesObserver = new IntersectionObserver(
|
|||
entries.some((entry) => entry.isIntersecting) &&
|
||||
!fetching.value &&
|
||||
moreFiles.value &&
|
||||
fetchMoreFiles()
|
||||
fetchMoreFiles(),
|
||||
);
|
||||
|
||||
watch(folder, () => emit("cd", folder.value));
|
||||
|
@ -230,13 +230,13 @@ function onStreamDriveFileDeleted(fileId: string) {
|
|||
}
|
||||
|
||||
function onStreamDriveFolderCreated(
|
||||
createdFolder: Misskey.entities.DriveFolder
|
||||
createdFolder: Misskey.entities.DriveFolder,
|
||||
) {
|
||||
addFolder(createdFolder, true);
|
||||
}
|
||||
|
||||
function onStreamDriveFolderUpdated(
|
||||
updatedFolder: Misskey.entities.DriveFolder
|
||||
updatedFolder: Misskey.entities.DriveFolder,
|
||||
) {
|
||||
const current = folder.value ? folder.value.id : null;
|
||||
if (current !== updatedFolder.parentId) {
|
||||
|
@ -433,7 +433,7 @@ function onChangeFileInput() {
|
|||
|
||||
function upload(
|
||||
file: File,
|
||||
folderToUpload?: Misskey.entities.DriveFolder | null
|
||||
folderToUpload?: Misskey.entities.DriveFolder | null,
|
||||
) {
|
||||
uploadFile(
|
||||
file,
|
||||
|
@ -441,7 +441,7 @@ function upload(
|
|||
? folderToUpload.id
|
||||
: null,
|
||||
undefined,
|
||||
keepOriginal.value
|
||||
keepOriginal.value,
|
||||
).then((res) => {
|
||||
addFile(res, true);
|
||||
});
|
||||
|
@ -452,7 +452,7 @@ function chooseFile(file: Misskey.entities.DriveFile) {
|
|||
if (props.multiple) {
|
||||
if (isAlreadySelected) {
|
||||
selectedFiles.value = selectedFiles.value.filter(
|
||||
(f) => f.id !== file.id
|
||||
(f) => f.id !== file.id,
|
||||
);
|
||||
} else {
|
||||
selectedFiles.value.push(file);
|
||||
|
@ -470,12 +470,12 @@ function chooseFile(file: Misskey.entities.DriveFile) {
|
|||
|
||||
function chooseFolder(folderToChoose: Misskey.entities.DriveFolder) {
|
||||
const isAlreadySelected = selectedFolders.value.some(
|
||||
(f) => f.id === folderToChoose.id
|
||||
(f) => f.id === folderToChoose.id,
|
||||
);
|
||||
if (props.multiple) {
|
||||
if (isAlreadySelected) {
|
||||
selectedFolders.value = selectedFolders.value.filter(
|
||||
(f) => f.id !== folderToChoose.id
|
||||
(f) => f.id !== folderToChoose.id,
|
||||
);
|
||||
} else {
|
||||
selectedFolders.value.push(folderToChoose);
|
||||
|
@ -707,7 +707,7 @@ function getMenu() {
|
|||
icon: "ph-trash ph-bold ph-lg",
|
||||
action: () => {
|
||||
deleteFolder(
|
||||
folder.value as Misskey.entities.DriveFolder
|
||||
folder.value as Misskey.entities.DriveFolder,
|
||||
);
|
||||
},
|
||||
}
|
||||
|
@ -725,7 +725,7 @@ function getMenu() {
|
|||
function showMenu(ev: MouseEvent) {
|
||||
os.popupMenu(
|
||||
getMenu(),
|
||||
(ev.currentTarget ?? ev.target ?? undefined) as HTMLElement | undefined
|
||||
(ev.currentTarget ?? ev.target ?? undefined) as HTMLElement | undefined,
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -50,7 +50,7 @@ withDefaults(
|
|||
}>(),
|
||||
{
|
||||
type: "file",
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
const emit = defineEmits<{
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
class="_button"
|
||||
@click.stop="
|
||||
applyUnicodeSkinTone(
|
||||
props.skinTones.indexOf(skinTone) + 1
|
||||
props.skinTones.indexOf(skinTone) + 1,
|
||||
)
|
||||
"
|
||||
>
|
||||
|
@ -83,7 +83,7 @@ watch(
|
|||
() => props.emojis,
|
||||
(newVal) => {
|
||||
localEmojis.value = [...newVal];
|
||||
}
|
||||
},
|
||||
);
|
||||
</script>
|
||||
|
||||
|
|
|
@ -191,7 +191,7 @@ const props = withDefaults(
|
|||
}>(),
|
||||
{
|
||||
showPinned: true,
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
const emit = defineEmits<{
|
||||
|
@ -229,13 +229,13 @@ const unicodeEmojiSkinToneLabels = [
|
|||
];
|
||||
|
||||
const size = computed(() =>
|
||||
props.asReactionPicker ? reactionPickerSize.value : 1
|
||||
props.asReactionPicker ? reactionPickerSize.value : 1,
|
||||
);
|
||||
const width = computed(() =>
|
||||
props.asReactionPicker ? reactionPickerWidth.value : 3
|
||||
props.asReactionPicker ? reactionPickerWidth.value : 3,
|
||||
);
|
||||
const height = computed(() =>
|
||||
props.asReactionPicker ? reactionPickerHeight.value : 2
|
||||
props.asReactionPicker ? reactionPickerHeight.value : 2,
|
||||
);
|
||||
const customEmojiCategories = emojiCategories;
|
||||
const customEmojis = instance.emojis;
|
||||
|
@ -283,8 +283,8 @@ watch(q, () => {
|
|||
(keyword) =>
|
||||
emoji.name.includes(keyword) ||
|
||||
emoji.aliases.some((alias) =>
|
||||
alias.includes(keyword)
|
||||
)
|
||||
alias.includes(keyword),
|
||||
),
|
||||
)
|
||||
) {
|
||||
matches.add(emoji);
|
||||
|
@ -355,8 +355,8 @@ watch(q, () => {
|
|||
(keyword) =>
|
||||
emoji.slug.includes(keyword) ||
|
||||
emoji.keywords?.some((alias) =>
|
||||
alias.includes(keyword)
|
||||
)
|
||||
alias.includes(keyword),
|
||||
),
|
||||
)
|
||||
) {
|
||||
matches.add(emoji);
|
||||
|
@ -419,7 +419,7 @@ function reset() {
|
|||
}
|
||||
|
||||
function getKey(
|
||||
emoji: string | Misskey.entities.CustomEmoji | UnicodeEmojiDef
|
||||
emoji: string | Misskey.entities.CustomEmoji | UnicodeEmojiDef,
|
||||
): string {
|
||||
return typeof emoji === "string" ? emoji : emoji.emoji || `:${emoji.name}:`;
|
||||
}
|
||||
|
@ -465,7 +465,7 @@ function done(query?: any): boolean | void {
|
|||
return true;
|
||||
}
|
||||
const exactMatchUnicode = emojilist.find(
|
||||
(emoji) => emoji.emoji === q2 || emoji.slug === q2
|
||||
(emoji) => emoji.emoji === q2 || emoji.slug === q2,
|
||||
);
|
||||
if (exactMatchUnicode) {
|
||||
chosen(exactMatchUnicode);
|
||||
|
|
|
@ -47,7 +47,7 @@ withDefaults(
|
|||
manualShowing: null,
|
||||
showPinned: true,
|
||||
asReactionPicker: false,
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
const emit = defineEmits<{
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
:key="file.id"
|
||||
v-tooltip.mfm="
|
||||
`${file.type}\n${bytes(file.size)}\n${new Date(
|
||||
file.createdAt
|
||||
file.createdAt,
|
||||
).toLocaleString()}\nby ${
|
||||
file.user ? '@' + Acct.toString(file.user) : 'system'
|
||||
}`
|
||||
|
|
|
@ -56,7 +56,7 @@ export default defineComponent({
|
|||
this.persistKey &&
|
||||
localStorage.getItem(localStoragePrefix + this.persistKey)
|
||||
? localStorage.getItem(
|
||||
localStoragePrefix + this.persistKey
|
||||
localStoragePrefix + this.persistKey,
|
||||
) === "t"
|
||||
: this.expanded,
|
||||
};
|
||||
|
@ -66,7 +66,7 @@ export default defineComponent({
|
|||
if (this.persistKey) {
|
||||
localStorage.setItem(
|
||||
localStoragePrefix + this.persistKey,
|
||||
this.showBody ? "t" : "f"
|
||||
this.showBody ? "t" : "f",
|
||||
);
|
||||
}
|
||||
},
|
||||
|
@ -85,9 +85,9 @@ export default defineComponent({
|
|||
const bg = tinycolor(
|
||||
rawBg.startsWith("var(")
|
||||
? getComputedStyle(document.documentElement).getPropertyValue(
|
||||
rawBg.slice(4, -1)
|
||||
rawBg.slice(4, -1),
|
||||
)
|
||||
: rawBg
|
||||
: rawBg,
|
||||
);
|
||||
bg.setAlpha(0.85);
|
||||
this.bg = bg.toRgbString();
|
||||
|
@ -123,7 +123,9 @@ export default defineComponent({
|
|||
.folder-toggle-enter-active,
|
||||
.folder-toggle-leave-active {
|
||||
overflow-y: hidden;
|
||||
transition: opacity 0.5s, height 0.5s !important;
|
||||
transition:
|
||||
opacity 0.5s,
|
||||
height 0.5s !important;
|
||||
}
|
||||
.folder-toggle-enter-from {
|
||||
opacity: 0;
|
||||
|
|
|
@ -83,7 +83,7 @@ const props = withDefaults(
|
|||
{
|
||||
full: false,
|
||||
large: false,
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
const isBlocking = computed(() => props.user.isBlocking);
|
||||
|
@ -92,7 +92,7 @@ let state = $ref(i18n.ts.processing);
|
|||
|
||||
let isFollowing = $ref(props.user.isFollowing);
|
||||
let hasPendingFollowRequestFromYou = $ref(
|
||||
props.user.hasPendingFollowRequestFromYou
|
||||
props.user.hasPendingFollowRequestFromYou,
|
||||
);
|
||||
let wait = $ref(false);
|
||||
const connection = stream.useChannel("main");
|
||||
|
@ -166,7 +166,7 @@ async function onClick() {
|
|||
function menu(ev) {
|
||||
os.popupMenu(
|
||||
getUserMenu(props.user, router),
|
||||
ev.currentTarget ?? ev.target
|
||||
ev.currentTarget ?? ev.target,
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
<div class="xkpnjxcv _formRoot">
|
||||
<template
|
||||
v-for="item in Object.keys(form).filter(
|
||||
(item) => !form[item].hidden
|
||||
(item) => !form[item].hidden,
|
||||
)"
|
||||
>
|
||||
<FormInput
|
||||
|
|
|
@ -9,7 +9,7 @@ import * as os from "@/os";
|
|||
export default defineComponent({
|
||||
components: {
|
||||
XFormula: defineAsyncComponent(
|
||||
() => import("@/components/MkFormulaCore.vue")
|
||||
() => import("@/components/MkFormulaCore.vue"),
|
||||
),
|
||||
},
|
||||
props: {
|
||||
|
|
|
@ -21,7 +21,7 @@ const query = ref(props.q);
|
|||
const search = () => {
|
||||
window.open(
|
||||
`https://search.annoyingorange.xyz/search?q=${query.value}`,
|
||||
"_blank"
|
||||
"_blank",
|
||||
);
|
||||
};
|
||||
</script>
|
||||
|
|
|
@ -259,7 +259,7 @@ watch(
|
|||
() => {
|
||||
fetching = true;
|
||||
renderChart();
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
onMounted(async () => {
|
||||
|
|
|
@ -36,7 +36,7 @@ const props = withDefaults(
|
|||
defineProps<{
|
||||
image: misskey.entities.DriveFile;
|
||||
}>(),
|
||||
{}
|
||||
{},
|
||||
);
|
||||
|
||||
const emit = defineEmits<{
|
||||
|
|
|
@ -40,7 +40,7 @@ const props = withDefaults(
|
|||
title: null,
|
||||
size: 64,
|
||||
cover: true,
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
const canvas = $ref<HTMLCanvasElement>();
|
||||
|
|
|
@ -95,7 +95,7 @@ const search = () => {
|
|||
id: x.id,
|
||||
host: x.host,
|
||||
iconUrl: x.iconUrl,
|
||||
} as Instance)
|
||||
}) as Instance,
|
||||
);
|
||||
});
|
||||
};
|
||||
|
|
|
@ -138,7 +138,7 @@ function createDoughnut(chartEl, tooltip, data) {
|
|||
{
|
||||
backgroundColor: data.map((x) => x.color),
|
||||
borderColor: getComputedStyle(
|
||||
document.documentElement
|
||||
document.documentElement,
|
||||
).getPropertyValue("--panel"),
|
||||
borderWidth: 2,
|
||||
hoverOffset: 0,
|
||||
|
@ -161,7 +161,7 @@ function createDoughnut(chartEl, tooltip, data) {
|
|||
ev,
|
||||
"nearest",
|
||||
{ intersect: true },
|
||||
false
|
||||
false,
|
||||
)[0];
|
||||
if (hit && data[hit.index].onClick) {
|
||||
data[hit.index].onClick();
|
||||
|
@ -206,7 +206,7 @@ onMounted(() => {
|
|||
color: "#80808080",
|
||||
value: fedStats.otherFollowersCount,
|
||||
},
|
||||
])
|
||||
]),
|
||||
);
|
||||
|
||||
createDoughnut(
|
||||
|
@ -227,7 +227,7 @@ onMounted(() => {
|
|||
color: "#80808080",
|
||||
value: fedStats.otherFollowingCount,
|
||||
},
|
||||
])
|
||||
]),
|
||||
);
|
||||
});
|
||||
});
|
||||
|
|
|
@ -35,7 +35,7 @@ const instance = props.instance ?? {
|
|||
name: instanceName,
|
||||
themeColor: (
|
||||
document.querySelector(
|
||||
'meta[name="theme-color-orig"]'
|
||||
'meta[name="theme-color-orig"]',
|
||||
) as HTMLMetaElement
|
||||
)?.content,
|
||||
softwareName: Instance.softwareName || "Calckey",
|
||||
|
@ -88,8 +88,15 @@ function getInstanceIcon(instance): string {
|
|||
font-weight: bold;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
text-shadow: -1px -1px 0 var(--bg), 1px -1px 0 var(--bg),
|
||||
-1px 1px 0 var(--bg), 1px 1px 0 var(--bg);
|
||||
text-shadow:
|
||||
-1px -1px 0 var(--bg),
|
||||
1px -1px 0 var(--bg),
|
||||
-1px 1px 0 var(--bg),
|
||||
1px 1px 0 var(--bg);
|
||||
.article > .main &,
|
||||
.header > .body & {
|
||||
display: unset;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
|
@ -34,7 +34,7 @@ const props = withDefaults(
|
|||
{
|
||||
copy: null,
|
||||
oneline: false,
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
const copy_ = () => {
|
||||
|
|
|
@ -78,7 +78,7 @@ const props = withDefaults(
|
|||
}>(),
|
||||
{
|
||||
anchor: () => ({ x: "right", y: "center" }),
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
const emit = defineEmits<{
|
||||
|
|
|
@ -28,7 +28,7 @@ const props = withDefaults(
|
|||
url: string;
|
||||
rel?: null | string;
|
||||
}>(),
|
||||
{}
|
||||
{},
|
||||
);
|
||||
|
||||
const self = props.url.startsWith(local);
|
||||
|
@ -40,7 +40,7 @@ const el = $ref();
|
|||
useTooltip($$(el), (showing) => {
|
||||
os.popup(
|
||||
defineAsyncComponent(
|
||||
() => import("@/components/MkUrlPreviewPopup.vue")
|
||||
() => import("@/components/MkUrlPreviewPopup.vue"),
|
||||
),
|
||||
{
|
||||
showing,
|
||||
|
@ -48,7 +48,7 @@ useTooltip($$(el), (showing) => {
|
|||
source: el,
|
||||
},
|
||||
{},
|
||||
"closed"
|
||||
"closed",
|
||||
);
|
||||
});
|
||||
</script>
|
||||
|
|
|
@ -63,9 +63,9 @@ export default {
|
|||
: undefined,
|
||||
},
|
||||
},
|
||||
$slots.default()
|
||||
)
|
||||
)
|
||||
$slots.default(),
|
||||
),
|
||||
),
|
||||
),
|
||||
]);
|
||||
},
|
||||
|
|
|
@ -103,7 +103,8 @@ const plyrMini = ref(false);
|
|||
const url =
|
||||
props.raw || defaultStore.state.loadRawImages
|
||||
? props.media.url
|
||||
: defaultStore.state.disableShowingAnimatedImages && props.media.type.startsWith('image')
|
||||
: defaultStore.state.disableShowingAnimatedImages &&
|
||||
props.media.type.startsWith("image")
|
||||
? getStaticImageUrl(props.media.thumbnailUrl)
|
||||
: props.media.thumbnailUrl;
|
||||
|
||||
|
@ -127,7 +128,7 @@ watch(
|
|||
{
|
||||
deep: true,
|
||||
immediate: true,
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
onMounted(() => {
|
||||
|
|
|
@ -67,7 +67,7 @@ const props = withDefaults(
|
|||
defineProps<{
|
||||
media: misskey.entities.DriveFile;
|
||||
}>(),
|
||||
{}
|
||||
{},
|
||||
);
|
||||
|
||||
const audioEl = $ref<HTMLAudioElement | null>();
|
||||
|
|
|
@ -184,10 +184,10 @@ export default defineComponent({
|
|||
|
||||
caption() {
|
||||
const img = document.getElementById(
|
||||
"imgtocaption"
|
||||
"imgtocaption",
|
||||
) as HTMLImageElement;
|
||||
const ta = document.getElementById(
|
||||
"captioninput"
|
||||
"captioninput",
|
||||
) as HTMLTextAreaElement;
|
||||
os.api("drive/files/caption-image", {
|
||||
url: img.src,
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
<div ref="gallery" @click.stop>
|
||||
<XMedia
|
||||
v-for="media in mediaList.filter((media) =>
|
||||
previewable(media)
|
||||
previewable(media),
|
||||
)"
|
||||
:key="media.id"
|
||||
:class="{ image: media.type.startsWith('image') }"
|
||||
|
@ -177,7 +177,7 @@ const previewable = (file: misskey.entities.DriveFile): boolean => {
|
|||
);
|
||||
};
|
||||
const previewableCount = props.mediaList.filter((media) =>
|
||||
previewable(media)
|
||||
previewable(media),
|
||||
).length;
|
||||
</script>
|
||||
|
||||
|
|
|
@ -251,7 +251,7 @@ watch(
|
|||
() => props.items,
|
||||
() => {
|
||||
const items: (MenuItem | MenuPending)[] = [...props.items].filter(
|
||||
(item) => item !== undefined
|
||||
(item) => item !== undefined,
|
||||
);
|
||||
|
||||
for (let i = 0; i < items.length; i++) {
|
||||
|
@ -270,7 +270,7 @@ watch(
|
|||
},
|
||||
{
|
||||
immediate: true,
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
let childMenu = $ref<MenuItem[] | null>();
|
||||
|
|
|
@ -43,7 +43,7 @@ let headX = $ref<number | null>(null);
|
|||
let headY = $ref<number | null>(null);
|
||||
let clock = $ref<number | null>(null);
|
||||
const accent = tinycolor(
|
||||
getComputedStyle(document.documentElement).getPropertyValue("--accent")
|
||||
getComputedStyle(document.documentElement).getPropertyValue("--accent"),
|
||||
);
|
||||
const color = accent.toRgbString();
|
||||
|
||||
|
|
|
@ -116,7 +116,7 @@ const props = withDefaults(
|
|||
noOverlap: true,
|
||||
transparentBg: false,
|
||||
noReturnFocus: false,
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
const emit = defineEmits<{
|
||||
|
@ -153,7 +153,7 @@ const type = $computed<ModalTypes>(() => {
|
|||
}
|
||||
});
|
||||
const isEnableBgTransparent = $computed(
|
||||
() => props.transparentBg && type === "popup"
|
||||
() => props.transparentBg && type === "popup",
|
||||
);
|
||||
let transitionName = $computed(() =>
|
||||
defaultStore.state.animation
|
||||
|
@ -164,7 +164,7 @@ let transitionName = $computed(() =>
|
|||
: type === "popup"
|
||||
? "modal-popup"
|
||||
: "modal"
|
||||
: ""
|
||||
: "",
|
||||
);
|
||||
let transitionDuration = $computed(() =>
|
||||
transitionName === "send"
|
||||
|
@ -175,7 +175,7 @@ let transitionDuration = $computed(() =>
|
|||
? 200
|
||||
: transitionName === "modal-drawer"
|
||||
? 200
|
||||
: 0
|
||||
: 0,
|
||||
);
|
||||
|
||||
let contentClicking = false;
|
||||
|
@ -359,10 +359,10 @@ const onOpened = () => {
|
|||
contentClicking = false;
|
||||
}, 100);
|
||||
},
|
||||
{ passive: true, once: true }
|
||||
{ passive: true, once: true },
|
||||
);
|
||||
},
|
||||
{ passive: true }
|
||||
{ passive: true },
|
||||
);
|
||||
// if (props.preferType == "dialog") {
|
||||
// history.pushState(null, "", location.href);
|
||||
|
@ -384,7 +384,7 @@ onMounted(() => {
|
|||
|
||||
align();
|
||||
},
|
||||
{ immediate: true }
|
||||
{ immediate: true },
|
||||
);
|
||||
|
||||
nextTick(() => {
|
||||
|
@ -414,7 +414,8 @@ defineExpose({
|
|||
|
||||
> .content {
|
||||
transform: translateY(0px);
|
||||
transition: opacity 0.3s ease-in,
|
||||
transition:
|
||||
opacity 0.3s ease-in,
|
||||
transform 0.3s cubic-bezier(0.5, -0.5, 1, 0.5) !important;
|
||||
}
|
||||
}
|
||||
|
@ -439,7 +440,9 @@ defineExpose({
|
|||
|
||||
> .content {
|
||||
transform-origin: var(--transformOrigin);
|
||||
transition: opacity 0.2s, transform 0.2s !important;
|
||||
transition:
|
||||
opacity 0.2s,
|
||||
transform 0.2s !important;
|
||||
}
|
||||
}
|
||||
.transition_modal_enterFrom,
|
||||
|
@ -464,7 +467,8 @@ defineExpose({
|
|||
|
||||
> .content {
|
||||
transform-origin: var(--transformOrigin);
|
||||
transition: opacity 0.2s cubic-bezier(0, 0, 0.2, 1),
|
||||
transition:
|
||||
opacity 0.2s cubic-bezier(0, 0, 0.2, 1),
|
||||
transform 0.2s cubic-bezier(0, 0, 0.2, 1) !important;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -80,7 +80,7 @@ const props = withDefaults(
|
|||
width: 400,
|
||||
height: null,
|
||||
scroll: true,
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
const emit = defineEmits<{
|
||||
|
|
|
@ -180,7 +180,7 @@
|
|||
:count="
|
||||
Object.values(appearNote.reactions).reduce(
|
||||
(partialSum, val) => partialSum + val,
|
||||
0
|
||||
0,
|
||||
)
|
||||
"
|
||||
:reacted="appearNote.myReaction != null"
|
||||
|
@ -339,7 +339,7 @@ const renoteButton = ref<InstanceType<typeof XRenoteButton>>();
|
|||
const renoteTime = ref<HTMLElement>();
|
||||
const reactButton = ref<HTMLElement>();
|
||||
let appearNote = $computed(() =>
|
||||
isRenote ? (note.renote as misskey.entities.Note) : note
|
||||
isRenote ? (note.renote as misskey.entities.Note) : note,
|
||||
);
|
||||
const isMyRenote = $i && $i.id === note.userId;
|
||||
const showContent = ref(false);
|
||||
|
@ -376,7 +376,7 @@ function reply(viaKeyboard = false): void {
|
|||
},
|
||||
() => {
|
||||
focus();
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -393,7 +393,7 @@ function react(viaKeyboard = false): void {
|
|||
},
|
||||
() => {
|
||||
focus();
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -407,7 +407,7 @@ function undoReact(note): void {
|
|||
|
||||
const currentClipPage = inject<Ref<misskey.entities.Clip> | null>(
|
||||
"currentClipPage",
|
||||
null
|
||||
null,
|
||||
);
|
||||
|
||||
function onContextmenu(ev: MouseEvent): void {
|
||||
|
@ -473,7 +473,7 @@ function onContextmenu(ev: MouseEvent): void {
|
|||
}
|
||||
: undefined,
|
||||
],
|
||||
ev
|
||||
ev,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -491,7 +491,7 @@ function menu(viaKeyboard = false): void {
|
|||
menuButton.value,
|
||||
{
|
||||
viaKeyboard,
|
||||
}
|
||||
},
|
||||
).then(focus);
|
||||
}
|
||||
|
||||
|
@ -514,7 +514,7 @@ function showRenoteMenu(viaKeyboard = false): void {
|
|||
renoteTime.value,
|
||||
{
|
||||
viaKeyboard: viaKeyboard,
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -233,7 +233,7 @@ let isScrolling;
|
|||
|
||||
const reactionsCount = Object.values(props.note.reactions).reduce(
|
||||
(x, y) => x + y,
|
||||
0
|
||||
0,
|
||||
);
|
||||
|
||||
const keymap = {
|
||||
|
@ -274,7 +274,7 @@ function react(viaKeyboard = false): void {
|
|||
},
|
||||
() => {
|
||||
focus();
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -308,7 +308,7 @@ function onContextmenu(ev: MouseEvent): void {
|
|||
menuButton,
|
||||
isDeleted,
|
||||
}),
|
||||
ev
|
||||
ev,
|
||||
).then(focus);
|
||||
}
|
||||
}
|
||||
|
@ -325,7 +325,7 @@ function menu(viaKeyboard = false): void {
|
|||
menuButton.value,
|
||||
{
|
||||
viaKeyboard,
|
||||
}
|
||||
},
|
||||
).then(focus);
|
||||
}
|
||||
|
||||
|
@ -551,7 +551,9 @@ onUnmounted(() => {
|
|||
background: var(--panelHighlight);
|
||||
border-radius: var(--radius);
|
||||
opacity: 0;
|
||||
transition: opacity 0.2s, background 0.2s;
|
||||
transition:
|
||||
opacity 0.2s,
|
||||
background 0.2s;
|
||||
z-index: -1;
|
||||
}
|
||||
&.reply-to {
|
||||
|
|
|
@ -23,10 +23,10 @@
|
|||
v-tooltip.noDelay="
|
||||
i18n.t('edited', {
|
||||
date: new Date(
|
||||
note.updatedAt
|
||||
note.updatedAt,
|
||||
).toLocaleDateString(),
|
||||
time: new Date(
|
||||
note.updatedAt
|
||||
note.updatedAt,
|
||||
).toLocaleTimeString(),
|
||||
})
|
||||
"
|
||||
|
|
|
@ -85,7 +85,7 @@
|
|||
:count="
|
||||
Object.values(appearNote.reactions).reduce(
|
||||
(partialSum, val) => partialSum + val,
|
||||
0
|
||||
0,
|
||||
)
|
||||
"
|
||||
:reacted="appearNote.myReaction != null"
|
||||
|
@ -220,7 +220,7 @@ const props = withDefaults(
|
|||
{
|
||||
depth: 1,
|
||||
replyLevel: 1,
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
let note = $ref(deepClone(props.note));
|
||||
|
@ -248,7 +248,7 @@ const starButton = ref<InstanceType<typeof XStarButton>>();
|
|||
const renoteButton = ref<InstanceType<typeof XRenoteButton>>();
|
||||
const reactButton = ref<HTMLElement>();
|
||||
let appearNote = $computed(() =>
|
||||
isRenote ? (note.renote as misskey.entities.Note) : note
|
||||
isRenote ? (note.renote as misskey.entities.Note) : note,
|
||||
);
|
||||
const isDeleted = ref(false);
|
||||
const muted = ref(getWordSoftMute(note, $i, defaultStore.state.mutedWords));
|
||||
|
@ -259,7 +259,7 @@ const replies: misskey.entities.Note[] =
|
|||
?.filter(
|
||||
(item) =>
|
||||
item.replyId === props.note.id ||
|
||||
item.renoteId === props.note.id
|
||||
item.renoteId === props.note.id,
|
||||
)
|
||||
.reverse() ?? [];
|
||||
const enableEmojiReactions = defaultStore.state.enableEmojiReactions;
|
||||
|
@ -294,7 +294,7 @@ function react(viaKeyboard = false): void {
|
|||
},
|
||||
() => {
|
||||
focus();
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -308,7 +308,7 @@ function undoReact(note): void {
|
|||
|
||||
const currentClipPage = inject<Ref<misskey.entities.Clip> | null>(
|
||||
"currentClipPage",
|
||||
null
|
||||
null,
|
||||
);
|
||||
|
||||
function menu(viaKeyboard = false): void {
|
||||
|
@ -324,7 +324,7 @@ function menu(viaKeyboard = false): void {
|
|||
menuButton.value,
|
||||
{
|
||||
viaKeyboard,
|
||||
}
|
||||
},
|
||||
).then(focus);
|
||||
}
|
||||
|
||||
|
@ -389,7 +389,7 @@ function onContextmenu(ev: MouseEvent): void {
|
|||
}
|
||||
: undefined,
|
||||
],
|
||||
ev
|
||||
ev,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -73,7 +73,7 @@
|
|||
notification.reaction
|
||||
? notification.reaction.replace(
|
||||
/^:(\w+):$/,
|
||||
':$1@.:'
|
||||
':$1@.:',
|
||||
)
|
||||
: notification.reaction
|
||||
"
|
||||
|
@ -297,7 +297,7 @@ const props = withDefaults(
|
|||
{
|
||||
withTime: false,
|
||||
full: false,
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
const elRef = ref<HTMLElement>(null);
|
||||
|
@ -378,7 +378,7 @@ useTooltip(reactionRef, (showing) => {
|
|||
targetElement: reactionRef.value.$el,
|
||||
},
|
||||
{},
|
||||
"closed"
|
||||
"closed",
|
||||
);
|
||||
});
|
||||
</script>
|
||||
|
|
|
@ -60,7 +60,7 @@ const props = withDefaults(
|
|||
{
|
||||
includingTypes: () => [],
|
||||
showGlobalToggle: true,
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
let includingTypes = $computed(() => props.includingTypes || []);
|
||||
|
@ -70,7 +70,7 @@ const dialog = $ref<InstanceType<typeof XModalWindow>>();
|
|||
let typesMap = $ref<Record<(typeof notificationTypes)[number], boolean>>({});
|
||||
let useGlobalSetting = $ref(
|
||||
(includingTypes === null || includingTypes.length === 0) &&
|
||||
props.showGlobalToggle
|
||||
props.showGlobalToggle,
|
||||
);
|
||||
|
||||
for (const ntype of notificationTypes) {
|
||||
|
|
|
@ -40,7 +40,9 @@ onMounted(() => {
|
|||
<style lang="scss" scoped>
|
||||
.notification-toast-enter-active,
|
||||
.notification-toast-leave-active {
|
||||
transition: opacity 0.3s, transform 0.3s !important;
|
||||
transition:
|
||||
opacity 0.3s,
|
||||
transform 0.3s !important;
|
||||
}
|
||||
.notification-toast-enter-from,
|
||||
.notification-toast-leave-to {
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
<XNote
|
||||
v-if="
|
||||
['reply', 'quote', 'mention'].includes(
|
||||
notification.type
|
||||
notification.type,
|
||||
)
|
||||
"
|
||||
:key="notification.id"
|
||||
|
|
|
@ -22,6 +22,6 @@ watch(
|
|||
},
|
||||
{
|
||||
immediate: true,
|
||||
}
|
||||
},
|
||||
);
|
||||
</script>
|
||||
|
|
|
@ -136,7 +136,7 @@ function back() {
|
|||
history.pop();
|
||||
router.replace(
|
||||
history[history.length - 1].path,
|
||||
history[history.length - 1].key
|
||||
history[history.length - 1].key,
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -86,7 +86,7 @@ import MkButton from "@/components/MkButton.vue";
|
|||
import { i18n } from "@/i18n";
|
||||
|
||||
export type Paging<
|
||||
E extends keyof misskey.Endpoints = keyof misskey.Endpoints
|
||||
E extends keyof misskey.Endpoints = keyof misskey.Endpoints,
|
||||
> = {
|
||||
endpoint: E;
|
||||
limit: number;
|
||||
|
@ -118,7 +118,7 @@ const props = withDefaults(
|
|||
}>(),
|
||||
{
|
||||
displayLimit: 30,
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
const emit = defineEmits<{
|
||||
|
@ -186,7 +186,7 @@ const init = async (): Promise<void> => {
|
|||
(err) => {
|
||||
error.value = true;
|
||||
fetching.value = false;
|
||||
}
|
||||
},
|
||||
);
|
||||
};
|
||||
|
||||
|
@ -209,10 +209,13 @@ const refresh = async (): void => {
|
|||
})
|
||||
.then(
|
||||
(res) => {
|
||||
let ids = items.value.reduce((a, b) => {
|
||||
a[b.id] = true;
|
||||
return a;
|
||||
}, {} as { [id: string]: boolean });
|
||||
let ids = items.value.reduce(
|
||||
(a, b) => {
|
||||
a[b.id] = true;
|
||||
return a;
|
||||
},
|
||||
{} as { [id: string]: boolean },
|
||||
);
|
||||
|
||||
for (let i = 0; i < res.length; i++) {
|
||||
const item = res[i];
|
||||
|
@ -229,7 +232,7 @@ const refresh = async (): void => {
|
|||
(err) => {
|
||||
error.value = true;
|
||||
fetching.value = false;
|
||||
}
|
||||
},
|
||||
);
|
||||
};
|
||||
|
||||
|
@ -291,7 +294,7 @@ const fetchMore = async (): Promise<void> => {
|
|||
},
|
||||
(err) => {
|
||||
moreFetching.value = false;
|
||||
}
|
||||
},
|
||||
);
|
||||
};
|
||||
|
||||
|
@ -344,7 +347,7 @@ const fetchMoreAhead = async (): Promise<void> => {
|
|||
},
|
||||
(err) => {
|
||||
moreFetching.value = false;
|
||||
}
|
||||
},
|
||||
);
|
||||
};
|
||||
|
||||
|
@ -445,7 +448,7 @@ watch(
|
|||
if (a.length === 0 && b.length === 0) return;
|
||||
emit("queue", queue.value.length);
|
||||
},
|
||||
{ deep: true }
|
||||
{ deep: true },
|
||||
);
|
||||
|
||||
init();
|
||||
|
|
|
@ -73,7 +73,7 @@ const isLocal = computed(() => !props.note.uri);
|
|||
const isVoted = computed(
|
||||
() =>
|
||||
!props.note.poll.multiple &&
|
||||
props.note.poll.choices.some((c) => c.isVoted)
|
||||
props.note.poll.choices.some((c) => c.isVoted),
|
||||
);
|
||||
const timer = computed(() =>
|
||||
i18n.t(
|
||||
|
@ -89,8 +89,8 @@ const timer = computed(() =>
|
|||
m: Math.floor(remaining.value / 60) % 60,
|
||||
h: Math.floor(remaining.value / 3600) % 24,
|
||||
d: Math.floor(remaining.value / 86400),
|
||||
}
|
||||
)
|
||||
},
|
||||
),
|
||||
);
|
||||
|
||||
const showResult = ref(props.readOnly || isVoted.value);
|
||||
|
@ -101,8 +101,8 @@ if (props.note.poll.expiresAt) {
|
|||
remaining.value = Math.floor(
|
||||
Math.max(
|
||||
new Date(props.note.poll.expiresAt).getTime() - Date.now(),
|
||||
0
|
||||
) / 1000
|
||||
0,
|
||||
) / 1000,
|
||||
);
|
||||
if (remaining.value === 0) {
|
||||
showResult.value = true;
|
||||
|
|
|
@ -96,7 +96,7 @@ const emit = defineEmits<{
|
|||
expiredAfter: number;
|
||||
choices: string[];
|
||||
multiple: boolean;
|
||||
}
|
||||
},
|
||||
): void;
|
||||
}>();
|
||||
|
||||
|
@ -104,7 +104,7 @@ const choices = ref(props.modelValue.choices);
|
|||
const multiple = ref(props.modelValue.multiple);
|
||||
const expiration = ref("infinite");
|
||||
const atDate = ref(
|
||||
formatDateTimeString(addTime(new Date(), 1, "day"), "yyyy-MM-dd")
|
||||
formatDateTimeString(addTime(new Date(), 1, "day"), "yyyy-MM-dd"),
|
||||
);
|
||||
const atTime = ref("00:00");
|
||||
const after = ref(0);
|
||||
|
@ -176,7 +176,7 @@ watch(
|
|||
() => emit("update:modelValue", get()),
|
||||
{
|
||||
deep: true,
|
||||
}
|
||||
},
|
||||
);
|
||||
</script>
|
||||
|
||||
|
|
|
@ -284,7 +284,7 @@ const props = withDefaults(
|
|||
initialVisibleUsers: () => [],
|
||||
autofocus: true,
|
||||
showMfmCheatSheet: true,
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
const emit = defineEmits<{
|
||||
|
@ -313,14 +313,14 @@ let cw = $ref<string | null>(null);
|
|||
let localOnly = $ref<boolean>(
|
||||
props.initialLocalOnly ?? defaultStore.state.rememberNoteVisibility
|
||||
? defaultStore.state.localOnly
|
||||
: defaultStore.state.defaultNoteLocalOnly
|
||||
: defaultStore.state.defaultNoteLocalOnly,
|
||||
);
|
||||
let visibility = $ref(
|
||||
props.initialVisibility ??
|
||||
((defaultStore.state.rememberNoteVisibility
|
||||
? defaultStore.state.visibility
|
||||
: defaultStore.state
|
||||
.defaultNoteVisibility) as (typeof misskey.noteVisibilities)[number])
|
||||
.defaultNoteVisibility) as (typeof misskey.noteVisibilities)[number]),
|
||||
);
|
||||
let visibleUsers = $ref([]);
|
||||
if (props.initialVisibleUsers) {
|
||||
|
@ -405,7 +405,7 @@ const canPost = $computed((): boolean => {
|
|||
});
|
||||
|
||||
const withHashtags = $computed(
|
||||
defaultStore.makeGetterSetter("postFormWithHashtags")
|
||||
defaultStore.makeGetterSetter("postFormWithHashtags"),
|
||||
);
|
||||
const hashtags = $computed(defaultStore.makeGetterSetter("postFormHashtags"));
|
||||
|
||||
|
@ -420,7 +420,7 @@ watch(
|
|||
},
|
||||
{
|
||||
deep: true,
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
if (props.mention) {
|
||||
|
@ -488,7 +488,7 @@ if (
|
|||
if (props.reply.visibleUserIds) {
|
||||
os.api("users/show", {
|
||||
userIds: props.reply.visibleUserIds.filter(
|
||||
(uid) => uid !== $i.id && uid !== props.reply.userId
|
||||
(uid) => uid !== $i.id && uid !== props.reply.userId,
|
||||
),
|
||||
}).then((users) => {
|
||||
users.forEach(pushVisibleUser);
|
||||
|
@ -499,7 +499,7 @@ if (
|
|||
os.api("users/show", { userId: props.reply.userId }).then(
|
||||
(user) => {
|
||||
pushVisibleUser(user);
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -533,7 +533,7 @@ function checkMissingMention() {
|
|||
for (const x of extractMentions(ast)) {
|
||||
if (
|
||||
!visibleUsers.some(
|
||||
(u) => u.username === x.username && u.host === x.host
|
||||
(u) => u.username === x.username && u.host === x.host,
|
||||
)
|
||||
) {
|
||||
hasNotSpecifiedMentions = true;
|
||||
|
@ -550,13 +550,13 @@ function addMissingMention() {
|
|||
for (const x of extractMentions(ast)) {
|
||||
if (
|
||||
!visibleUsers.some(
|
||||
(u) => u.username === x.username && u.host === x.host
|
||||
(u) => u.username === x.username && u.host === x.host,
|
||||
)
|
||||
) {
|
||||
os.api("users/show", { username: x.username, host: x.host }).then(
|
||||
(user) => {
|
||||
visibleUsers.push(user);
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -584,7 +584,7 @@ function focus() {
|
|||
textareaEl.focus();
|
||||
textareaEl.setSelectionRange(
|
||||
textareaEl.value.length,
|
||||
textareaEl.value.length
|
||||
textareaEl.value.length,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -595,7 +595,7 @@ function chooseFileFrom(ev) {
|
|||
for (const file of files_) {
|
||||
files.push(file);
|
||||
}
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -629,7 +629,7 @@ function setVisibility() {
|
|||
|
||||
os.popup(
|
||||
defineAsyncComponent(
|
||||
() => import("@/components/MkVisibilityPicker.vue")
|
||||
() => import("@/components/MkVisibilityPicker.vue"),
|
||||
),
|
||||
{
|
||||
currentVisibility: visibility,
|
||||
|
@ -650,14 +650,14 @@ function setVisibility() {
|
|||
}
|
||||
},
|
||||
},
|
||||
"closed"
|
||||
"closed",
|
||||
);
|
||||
}
|
||||
|
||||
function pushVisibleUser(user) {
|
||||
if (
|
||||
!visibleUsers.some(
|
||||
(u) => u.username === user.username && u.host === user.host
|
||||
(u) => u.username === user.username && u.host === user.host,
|
||||
)
|
||||
) {
|
||||
visibleUsers.push(user);
|
||||
|
@ -703,7 +703,7 @@ function onCompositionEnd(ev: CompositionEvent) {
|
|||
|
||||
async function onPaste(ev: ClipboardEvent) {
|
||||
for (const { item, i } of Array.from(ev.clipboardData.items).map(
|
||||
(item, i) => ({ item, i })
|
||||
(item, i) => ({ item, i }),
|
||||
)) {
|
||||
if (item.kind === "file") {
|
||||
const file = item.getAsFile();
|
||||
|
@ -711,7 +711,7 @@ async function onPaste(ev: ClipboardEvent) {
|
|||
const ext = lio >= 0 ? file.name.slice(lio) : "";
|
||||
const formatted = `${formatTimeString(
|
||||
new Date(file.lastModified),
|
||||
defaultStore.state.pastedFileName
|
||||
defaultStore.state.pastedFileName,
|
||||
).replace(/{{number}}/g, `${i + 1}`)}${ext}`;
|
||||
upload(file, formatted);
|
||||
}
|
||||
|
@ -879,11 +879,11 @@ async function post() {
|
|||
.filter((x) => x.type === "hashtag")
|
||||
.map((x) => x.props.hashtag);
|
||||
const history = JSON.parse(
|
||||
localStorage.getItem("hashtags") || "[]"
|
||||
localStorage.getItem("hashtags") || "[]",
|
||||
) as string[];
|
||||
localStorage.setItem(
|
||||
"hashtags",
|
||||
JSON.stringify(unique(hashtags_.concat(history)))
|
||||
JSON.stringify(unique(hashtags_.concat(history))),
|
||||
);
|
||||
}
|
||||
posting = false;
|
||||
|
@ -930,11 +930,11 @@ function showActions(ev) {
|
|||
if (key === "text") {
|
||||
text = value;
|
||||
}
|
||||
}
|
||||
},
|
||||
);
|
||||
},
|
||||
})),
|
||||
ev.currentTarget ?? ev.target
|
||||
ev.currentTarget ?? ev.target,
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -954,7 +954,7 @@ function openAccountMenu(ev: MouseEvent) {
|
|||
}
|
||||
},
|
||||
},
|
||||
ev
|
||||
ev,
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -985,7 +985,7 @@ onMounted(() => {
|
|||
visibility = draft.data.visibility;
|
||||
localOnly = draft.data.localOnly;
|
||||
files = (draft.data.files || []).filter(
|
||||
(draftFile) => draftFile
|
||||
(draftFile) => draftFile,
|
||||
);
|
||||
if (draft.data.poll) {
|
||||
poll = draft.data.poll;
|
||||
|
|
|
@ -39,7 +39,7 @@ import { i18n } from "@/i18n";
|
|||
export default defineComponent({
|
||||
components: {
|
||||
XDraggable: defineAsyncComponent(() =>
|
||||
import("vuedraggable").then((x) => x.default)
|
||||
import("vuedraggable").then((x) => x.default),
|
||||
),
|
||||
MkDriveFileThumbnail,
|
||||
},
|
||||
|
@ -110,7 +110,7 @@ export default defineComponent({
|
|||
async describe(file) {
|
||||
os.popup(
|
||||
defineAsyncComponent(
|
||||
() => import("@/components/MkMediaCaption.vue")
|
||||
() => import("@/components/MkMediaCaption.vue"),
|
||||
),
|
||||
{
|
||||
title: i18n.ts.describeFile,
|
||||
|
@ -133,7 +133,7 @@ export default defineComponent({
|
|||
});
|
||||
},
|
||||
},
|
||||
"closed"
|
||||
"closed",
|
||||
);
|
||||
},
|
||||
|
||||
|
@ -175,7 +175,7 @@ export default defineComponent({
|
|||
},
|
||||
},
|
||||
],
|
||||
ev.currentTarget ?? ev.target
|
||||
ev.currentTarget ?? ev.target,
|
||||
)
|
||||
.then(() => (this.menu = null));
|
||||
},
|
||||
|
|
|
@ -99,7 +99,7 @@ function subscribe() {
|
|||
.subscribe({
|
||||
userVisibleOnly: true,
|
||||
applicationServerKey: urlBase64ToUint8Array(
|
||||
instance.swPublickey
|
||||
instance.swPublickey,
|
||||
),
|
||||
})
|
||||
.then(
|
||||
|
@ -118,7 +118,7 @@ function subscribe() {
|
|||
// 通知が許可されていなかったとき
|
||||
if (err?.name === "NotAllowedError") {
|
||||
console.info(
|
||||
"User denied the notification permission request."
|
||||
"User denied the notification permission request.",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
@ -128,10 +128,10 @@ function subscribe() {
|
|||
// そのサブスクリプションを解除しておく
|
||||
// (これは実行されなさそうだけど、おまじない的に古い実装から残してある)
|
||||
await unsubscribe();
|
||||
}
|
||||
},
|
||||
),
|
||||
null,
|
||||
null
|
||||
null,
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -24,7 +24,7 @@ const props = defineProps<{
|
|||
const canRenote = computed(
|
||||
() =>
|
||||
["public", "home"].includes(props.note.visibility) ||
|
||||
props.note.userId === $i?.id
|
||||
props.note.userId === $i?.id,
|
||||
);
|
||||
|
||||
function quote(): void {
|
||||
|
|
|
@ -91,10 +91,10 @@ useTooltip(
|
|||
targetElement: buttonRef.value,
|
||||
},
|
||||
{},
|
||||
"closed"
|
||||
"closed",
|
||||
);
|
||||
},
|
||||
100
|
||||
100,
|
||||
);
|
||||
</script>
|
||||
|
||||
|
|
|
@ -39,7 +39,7 @@ const buttonRef = ref<HTMLElement>();
|
|||
const canRenote = computed(
|
||||
() =>
|
||||
["public", "home"].includes(props.note.visibility) ||
|
||||
props.note.userId === $i.id
|
||||
props.note.userId === $i.id,
|
||||
);
|
||||
|
||||
useTooltip(buttonRef, async (showing) => {
|
||||
|
@ -61,7 +61,7 @@ useTooltip(buttonRef, async (showing) => {
|
|||
targetElement: buttonRef.value,
|
||||
},
|
||||
{},
|
||||
"closed"
|
||||
"closed",
|
||||
);
|
||||
});
|
||||
|
||||
|
@ -205,7 +205,7 @@ const renote = (viaKeyboard = false, ev?: MouseEvent) => {
|
|||
renoteId: props.note.id,
|
||||
visibility: props.note.visibility,
|
||||
localOnly: true,
|
||||
}
|
||||
},
|
||||
);
|
||||
hasRenotedBefore = true;
|
||||
const el =
|
||||
|
|
|
@ -85,7 +85,7 @@ const props = withDefaults(
|
|||
}>(),
|
||||
{
|
||||
particle: true,
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
const emit = defineEmits<{
|
||||
|
|
|
@ -122,7 +122,7 @@ export default defineComponent({
|
|||
action: () => {},
|
||||
},
|
||||
],
|
||||
ev.currentTarget ?? ev.target
|
||||
ev.currentTarget ?? ev.target,
|
||||
);
|
||||
},
|
||||
},
|
||||
|
|
|
@ -223,7 +223,7 @@ function onUsernameChange() {
|
|||
},
|
||||
() => {
|
||||
user = null;
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -259,7 +259,7 @@ function queryKey() {
|
|||
password,
|
||||
signature: hexify(credential.response.signature),
|
||||
authenticatorData: hexify(
|
||||
credential.response.authenticatorData
|
||||
credential.response.authenticatorData,
|
||||
),
|
||||
clientDataJSON: hexify(credential.response.clientDataJSON),
|
||||
credentialId: credential.id,
|
||||
|
@ -370,7 +370,7 @@ function resetPassword() {
|
|||
defineAsyncComponent(() => import("@/components/MkForgotPassword.vue")),
|
||||
{},
|
||||
{},
|
||||
"closed"
|
||||
"closed",
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -25,7 +25,7 @@ const props = withDefaults(
|
|||
{
|
||||
autoSet: false,
|
||||
message: "",
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
const emit = defineEmits<{
|
||||
|
|
|
@ -303,7 +303,7 @@ const props = withDefaults(
|
|||
}>(),
|
||||
{
|
||||
autoSet: false,
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
const emit = defineEmits<{
|
||||
|
|
|
@ -31,7 +31,7 @@ const props = withDefaults(
|
|||
}>(),
|
||||
{
|
||||
autoSet: false,
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
const emit = defineEmits<{
|
||||
|
|
|
@ -105,13 +105,16 @@ onMounted(() => {
|
|||
particles.value.push(particle);
|
||||
window.setTimeout(() => {
|
||||
particles.value = particles.value.filter(
|
||||
(x) => x.id !== particle.id
|
||||
(x) => x.id !== particle.id,
|
||||
);
|
||||
}, particle.dur - 100);
|
||||
|
||||
window.setTimeout(() => {
|
||||
add();
|
||||
}, 500 + Math.random() * 500);
|
||||
window.setTimeout(
|
||||
() => {
|
||||
add();
|
||||
},
|
||||
500 + Math.random() * 500,
|
||||
);
|
||||
};
|
||||
add();
|
||||
}
|
||||
|
|
|
@ -104,7 +104,7 @@ useTooltip(buttonRef, async (showing) => {
|
|||
targetElement: buttonRef.value,
|
||||
},
|
||||
{},
|
||||
"closed"
|
||||
"closed",
|
||||
);
|
||||
});
|
||||
</script>
|
||||
|
|
|
@ -38,15 +38,15 @@ export default defineComponent({
|
|||
onClick: () => {
|
||||
this.$emit(
|
||||
"update:modelValue",
|
||||
option.props?.value
|
||||
option.props?.value,
|
||||
);
|
||||
},
|
||||
},
|
||||
option.children
|
||||
option.children,
|
||||
),
|
||||
[[resolveDirective("click-anime")]]
|
||||
)
|
||||
)
|
||||
[[resolveDirective("click-anime")]],
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
});
|
||||
|
|
|
@ -28,7 +28,7 @@ const idForCanvas = Array.from(Array(16))
|
|||
() =>
|
||||
SAFE_FOR_HTML_ID[
|
||||
Math.floor(Math.random() * SAFE_FOR_HTML_ID.length)
|
||||
]
|
||||
],
|
||||
)
|
||||
.join("");
|
||||
const idForTags = Array.from(Array(16))
|
||||
|
@ -36,7 +36,7 @@ const idForTags = Array.from(Array(16))
|
|||
() =>
|
||||
SAFE_FOR_HTML_ID[
|
||||
Math.floor(Math.random() * SAFE_FOR_HTML_ID.length)
|
||||
]
|
||||
],
|
||||
)
|
||||
.join("");
|
||||
let available = $ref(false);
|
||||
|
@ -50,7 +50,7 @@ watch($$(available), () => {
|
|||
window.TagCanvas.Start(idForCanvas, idForTags, {
|
||||
textColour: "#ffffff",
|
||||
outlineColour: tinycolor(
|
||||
computedStyle.getPropertyValue("--accent")
|
||||
computedStyle.getPropertyValue("--accent"),
|
||||
).toHexString(),
|
||||
outlineRadius: 10,
|
||||
initial: [-0.03, -0.01],
|
||||
|
@ -80,7 +80,7 @@ onMounted(() => {
|
|||
Object.assign(document.createElement("script"), {
|
||||
async: true,
|
||||
src: "/client-assets/tagcanvas.min.js",
|
||||
})
|
||||
}),
|
||||
)
|
||||
.addEventListener("load", () => (available = true));
|
||||
}
|
||||
|
|
|
@ -55,7 +55,7 @@ const emit = defineEmits<{
|
|||
|
||||
provide(
|
||||
"inChannel",
|
||||
computed(() => props.src === "channel")
|
||||
computed(() => props.src === "channel"),
|
||||
);
|
||||
|
||||
const tlComponent: InstanceType<typeof XNotes> = $ref();
|
||||
|
@ -293,7 +293,8 @@ const timetravel = (date?: Date) => {
|
|||
pointer-events: all;
|
||||
transform: translateY(-100%);
|
||||
opacity: 0;
|
||||
animation: reset 0.4s forwards cubic-bezier(0, 0.4, 0, 1.1),
|
||||
animation:
|
||||
reset 0.4s forwards cubic-bezier(0, 0.4, 0, 1.1),
|
||||
slideUp 1s 5s forwards cubic-bezier(1, 0, 1, 1);
|
||||
&::before {
|
||||
content: "";
|
||||
|
|
|
@ -42,7 +42,9 @@ onMounted(() => {
|
|||
<style lang="scss" scoped>
|
||||
.toast-enter-active,
|
||||
.toast-leave-active {
|
||||
transition: opacity 0.3s, transform 0.3s !important;
|
||||
transition:
|
||||
opacity 0.3s,
|
||||
transform 0.3s !important;
|
||||
}
|
||||
.toast-enter-from,
|
||||
.toast-leave-to {
|
||||
|
|
|
@ -64,7 +64,7 @@ const props = withDefaults(
|
|||
information: null,
|
||||
initialName: null,
|
||||
initialPermissions: null,
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
const emit = defineEmits<{
|
||||
|
|
|
@ -39,7 +39,7 @@ const props = withDefaults(
|
|||
maxWidth: 250,
|
||||
direction: "top",
|
||||
innerMargin: 0,
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
const emit = defineEmits<{
|
||||
|
@ -91,7 +91,8 @@ onUnmounted(() => {
|
|||
.tooltip-leave-active {
|
||||
opacity: 1;
|
||||
transform: scale(1);
|
||||
transition: transform 200ms cubic-bezier(0.23, 1, 0.32, 1),
|
||||
transition:
|
||||
transform 200ms cubic-bezier(0.23, 1, 0.32, 1),
|
||||
opacity 200ms cubic-bezier(0.23, 1, 0.32, 1);
|
||||
}
|
||||
.tooltip-enter-from,
|
||||
|
|
|
@ -265,15 +265,15 @@ const autoplayMfm = computed(
|
|||
defaultStore.makeGetterSetter(
|
||||
"animatedMfm",
|
||||
(v) => !v,
|
||||
(v) => !v
|
||||
)
|
||||
(v) => !v,
|
||||
),
|
||||
);
|
||||
const reduceAnimation = computed(
|
||||
defaultStore.makeGetterSetter(
|
||||
"animation",
|
||||
(v) => !v,
|
||||
(v) => !v
|
||||
)
|
||||
(v) => !v,
|
||||
),
|
||||
);
|
||||
|
||||
function close(res) {
|
||||
|
|
|
@ -111,7 +111,7 @@ const props = withDefaults(
|
|||
}>(),
|
||||
{
|
||||
detail: false,
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
const self = props.url.startsWith(local);
|
||||
|
@ -158,7 +158,7 @@ const requestLang = (lang || "ja-JP").replace("ja-KS", "ja-JP");
|
|||
requestUrl.hash = "";
|
||||
|
||||
fetch(
|
||||
`/url?url=${encodeURIComponent(requestUrl.href)}&lang=${requestLang}`
|
||||
`/url?url=${encodeURIComponent(requestUrl.href)}&lang=${requestLang}`,
|
||||
).then((res) => {
|
||||
res.json().then((info) => {
|
||||
if (info.url == null) return;
|
||||
|
@ -221,7 +221,10 @@ onUnmounted(() => {
|
|||
border-radius: var(--radius);
|
||||
transform: scale(0.95);
|
||||
opacity: 0.8;
|
||||
transition: transform 0.2s, opacity 0.2s, background 0.2s;
|
||||
transition:
|
||||
transform 0.2s,
|
||||
opacity 0.2s,
|
||||
background 0.2s;
|
||||
}
|
||||
&:hover,
|
||||
&:focus {
|
||||
|
|
|
@ -36,7 +36,7 @@ const props = withDefaults(
|
|||
}>(),
|
||||
{
|
||||
withChart: true,
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
let chartValues = $ref<number[] | null>(null);
|
||||
|
|
|
@ -180,7 +180,9 @@ onMounted(() => {
|
|||
<style lang="scss" scoped>
|
||||
.popup-enter-active,
|
||||
.popup-leave-active {
|
||||
transition: opacity 0.3s, transform 0.3s !important;
|
||||
transition:
|
||||
opacity 0.3s,
|
||||
transform 0.3s !important;
|
||||
}
|
||||
.popup-enter-from,
|
||||
.popup-leave-to {
|
||||
|
|
|
@ -57,7 +57,7 @@ if (props.note.visibility === "specified") {
|
|||
targetElement: specified,
|
||||
},
|
||||
{},
|
||||
"closed"
|
||||
"closed",
|
||||
);
|
||||
});
|
||||
}
|
||||
|
|
|
@ -135,13 +135,13 @@ const props = withDefaults(
|
|||
currentLocalOnly: boolean;
|
||||
src?: HTMLElement;
|
||||
}>(),
|
||||
{}
|
||||
{},
|
||||
);
|
||||
|
||||
const emit = defineEmits<{
|
||||
(
|
||||
ev: "changeVisibility",
|
||||
v: (typeof misskey.noteVisibilities)[number]
|
||||
v: (typeof misskey.noteVisibilities)[number],
|
||||
): void;
|
||||
(ev: "changeLocalOnly", v: boolean): void;
|
||||
(ev: "closed"): void;
|
||||
|
|
|
@ -55,7 +55,7 @@ watch(
|
|||
() => props.showing,
|
||||
() => {
|
||||
if (!props.showing) done();
|
||||
}
|
||||
},
|
||||
);
|
||||
</script>
|
||||
|
||||
|
|
|
@ -144,7 +144,7 @@ function onContextmenu(widget: Widget, ev: MouseEvent) {
|
|||
if (isLink(ev.target)) return;
|
||||
if (
|
||||
["INPUT", "TEXTAREA", "IMG", "VIDEO", "CANVAS"].includes(
|
||||
ev.target.tagName
|
||||
ev.target.tagName,
|
||||
) ||
|
||||
ev.target.attributes["contenteditable"]
|
||||
)
|
||||
|
@ -165,7 +165,7 @@ function onContextmenu(widget: Widget, ev: MouseEvent) {
|
|||
},
|
||||
},
|
||||
],
|
||||
ev
|
||||
ev,
|
||||
);
|
||||
}
|
||||
</script>
|
||||
|
|
|
@ -161,7 +161,7 @@ const props = withDefaults(
|
|||
contextmenu: null,
|
||||
buttonsLeft: () => [],
|
||||
buttonsRight: () => [],
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
const emit = defineEmits<{
|
||||
|
@ -512,7 +512,9 @@ defineExpose({
|
|||
<style lang="scss" scoped>
|
||||
.window-enter-active,
|
||||
.window-leave-active {
|
||||
transition: opacity 0.2s, transform 0.2s !important;
|
||||
transition:
|
||||
opacity 0.2s,
|
||||
transform 0.2s !important;
|
||||
}
|
||||
.window-enter-from,
|
||||
.window-leave-to {
|
||||
|
|
|
@ -169,7 +169,7 @@ useInterval(
|
|||
{
|
||||
immediate: true,
|
||||
afterMounted: true,
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
onMounted(() => {
|
||||
|
|
|
@ -43,7 +43,7 @@ export default defineComponent({
|
|||
{
|
||||
class: "label",
|
||||
},
|
||||
[label]
|
||||
[label],
|
||||
),
|
||||
]
|
||||
: []),
|
||||
|
@ -63,9 +63,9 @@ export default defineComponent({
|
|||
"onUpdate:modelValue": (value) =>
|
||||
(this.value = value),
|
||||
},
|
||||
option.children
|
||||
)
|
||||
)
|
||||
option.children,
|
||||
),
|
||||
),
|
||||
),
|
||||
...(caption
|
||||
? [
|
||||
|
@ -74,11 +74,11 @@ export default defineComponent({
|
|||
{
|
||||
class: "caption",
|
||||
},
|
||||
[caption]
|
||||
[caption],
|
||||
),
|
||||
]
|
||||
: []),
|
||||
]
|
||||
],
|
||||
);
|
||||
},
|
||||
});
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue