Compare commits
29 Commits
2025.1.0-b
...
2025.2.0-b
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2f4e2a7cca | ||
|
|
23fc79bf06 | ||
|
|
fbc6d0de54 | ||
|
|
904da7bad6 | ||
|
|
82d4109339 | ||
|
|
0c634c9675 | ||
|
|
5840c7a945 | ||
|
|
cb48853334 | ||
|
|
495d72ed2a | ||
|
|
19857632d0 | ||
|
|
9c70a4e631 | ||
|
|
a1be39d94f | ||
|
|
9230ee52a0 | ||
|
|
06f113b226 | ||
|
|
d4226c6adf | ||
|
|
850d1d0005 | ||
|
|
28490f3a58 | ||
|
|
ae65aecc0c | ||
|
|
89b461a5da | ||
|
|
40bfb1be09 | ||
|
|
ba9f295ef2 | ||
|
|
77e421029c | ||
|
|
f8f17a44d4 | ||
|
|
87b9016dbe | ||
|
|
2c3a41e4a0 | ||
|
|
6250af2a2c | ||
|
|
8232ea6956 | ||
|
|
4f31dcfed3 | ||
|
|
605756d425 |
4
.github/workflows/api-misskey-js.yml
vendored
4
.github/workflows/api-misskey-js.yml
vendored
@@ -9,6 +9,10 @@ on:
|
||||
paths:
|
||||
- packages/misskey-js/**
|
||||
- .github/workflows/api-misskey-js.yml
|
||||
|
||||
env:
|
||||
COREPACK_DEFAULT_TO_LATEST: 0
|
||||
|
||||
jobs:
|
||||
report:
|
||||
|
||||
|
||||
4
.github/workflows/get-api-diff.yml
vendored
4
.github/workflows/get-api-diff.yml
vendored
@@ -9,6 +9,10 @@ on:
|
||||
paths:
|
||||
- packages/backend/**
|
||||
- .github/workflows/get-api-diff.yml
|
||||
|
||||
env:
|
||||
COREPACK_DEFAULT_TO_LATEST: 0
|
||||
|
||||
jobs:
|
||||
get-from-misskey:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
4
.github/workflows/lint.yml
vendored
4
.github/workflows/lint.yml
vendored
@@ -28,6 +28,10 @@ on:
|
||||
- packages/misskey-reversi/**
|
||||
- packages/shared/eslint.config.js
|
||||
- .github/workflows/lint.yml
|
||||
|
||||
env:
|
||||
COREPACK_DEFAULT_TO_LATEST: 0
|
||||
|
||||
jobs:
|
||||
pnpm_install:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
4
.github/workflows/locale.yml
vendored
4
.github/workflows/locale.yml
vendored
@@ -9,6 +9,10 @@ on:
|
||||
paths:
|
||||
- locales/**
|
||||
- .github/workflows/locale.yml
|
||||
|
||||
env:
|
||||
COREPACK_DEFAULT_TO_LATEST: 0
|
||||
|
||||
jobs:
|
||||
locale_verify:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
3
.github/workflows/on-release-created.yml
vendored
3
.github/workflows/on-release-created.yml
vendored
@@ -6,6 +6,9 @@ on:
|
||||
|
||||
workflow_dispatch:
|
||||
|
||||
env:
|
||||
COREPACK_DEFAULT_TO_LATEST: 0
|
||||
|
||||
jobs:
|
||||
publish-misskey-js:
|
||||
name: Publish misskey-js
|
||||
|
||||
3
.github/workflows/storybook.yml
vendored
3
.github/workflows/storybook.yml
vendored
@@ -13,6 +13,9 @@ on:
|
||||
# This is a waste of chromatic build quota, so we don't run storybook CI on pull requests targets master.
|
||||
- master
|
||||
|
||||
env:
|
||||
COREPACK_DEFAULT_TO_LATEST: 0
|
||||
|
||||
jobs:
|
||||
build:
|
||||
# chromatic is not likely to be available for fork repositories, so we disable for fork repositories.
|
||||
|
||||
4
.github/workflows/test-backend.yml
vendored
4
.github/workflows/test-backend.yml
vendored
@@ -18,6 +18,10 @@ on:
|
||||
- packages/misskey-js/**
|
||||
- .github/workflows/test-backend.yml
|
||||
- .github/misskey/test.yml
|
||||
|
||||
env:
|
||||
COREPACK_DEFAULT_TO_LATEST: 0
|
||||
|
||||
jobs:
|
||||
unit:
|
||||
name: Unit tests (backend)
|
||||
|
||||
3
.github/workflows/test-federation.yml
vendored
3
.github/workflows/test-federation.yml
vendored
@@ -15,6 +15,9 @@ on:
|
||||
- packages/misskey-js/**
|
||||
- .github/workflows/test-federation.yml
|
||||
|
||||
env:
|
||||
COREPACK_DEFAULT_TO_LATEST: 0
|
||||
|
||||
jobs:
|
||||
test:
|
||||
name: Federation test
|
||||
|
||||
4
.github/workflows/test-frontend.yml
vendored
4
.github/workflows/test-frontend.yml
vendored
@@ -22,6 +22,10 @@ on:
|
||||
- packages/backend/**
|
||||
- .github/workflows/test-frontend.yml
|
||||
- .github/misskey/test.yml
|
||||
|
||||
env:
|
||||
COREPACK_DEFAULT_TO_LATEST: 0
|
||||
|
||||
jobs:
|
||||
vitest:
|
||||
name: Unit tests (frontend)
|
||||
|
||||
4
.github/workflows/test-misskey-js.yml
vendored
4
.github/workflows/test-misskey-js.yml
vendored
@@ -14,6 +14,10 @@ on:
|
||||
paths:
|
||||
- packages/misskey-js/**
|
||||
- .github/workflows/test-misskey-js.yml
|
||||
|
||||
env:
|
||||
COREPACK_DEFAULT_TO_LATEST: 0
|
||||
|
||||
jobs:
|
||||
test:
|
||||
name: Unit tests (misskey.js)
|
||||
|
||||
1
.github/workflows/test-production.yml
vendored
1
.github/workflows/test-production.yml
vendored
@@ -9,6 +9,7 @@ on:
|
||||
|
||||
env:
|
||||
NODE_ENV: production
|
||||
COREPACK_DEFAULT_TO_LATEST: 0
|
||||
|
||||
jobs:
|
||||
production:
|
||||
|
||||
4
.github/workflows/validate-api-json.yml
vendored
4
.github/workflows/validate-api-json.yml
vendored
@@ -12,6 +12,10 @@ on:
|
||||
paths:
|
||||
- packages/backend/**
|
||||
- .github/workflows/validate-api-json.yml
|
||||
|
||||
env:
|
||||
COREPACK_DEFAULT_TO_LATEST: 0
|
||||
|
||||
jobs:
|
||||
validate-api-json:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
21
CHANGELOG.md
21
CHANGELOG.md
@@ -1,3 +1,22 @@
|
||||
## 2025.2.0
|
||||
|
||||
### General
|
||||
- Fix: Docker のビルドに失敗する問題を修正
|
||||
(Cherry-picked from https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/883)
|
||||
|
||||
### Client
|
||||
- Fix: パスキーでパスワードレスログインが出来ない問題を修正
|
||||
- Fix: 一部環境でセンシティブなファイルを含むノートの非表示が効かない問題
|
||||
- Fix: データセーバー有効時にもユーザーページの「ファイル」タブで画像が読み込まれてしまう問題を修正
|
||||
- Fix: MFMの `sparkle` エフェクトが正しく表示されない問題を修正
|
||||
- Fix: ページのURLにスラッシュが含まれている場合にページが正しく表示されない問題を修正
|
||||
- ローカライゼーションの更新
|
||||
- Playが実装されたため、ページ機能の「ソースを見る」は削除されました
|
||||
|
||||
### Server
|
||||
- Enhance: ページのURLに使用可能な文字を限定するように
|
||||
- Fix: 個別お知らせページのmetaタグ出力の条件が間違っていたのを修正
|
||||
|
||||
## 2025.1.0
|
||||
|
||||
### Note
|
||||
@@ -49,6 +68,8 @@
|
||||
- Fix: 非ログイン時のサーバー概要画面のメニューボタンが押せないことがあるのを修正
|
||||
(Cherry-picked from https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/656)
|
||||
- Fix: URLにはじめから`#pswp`が含まれている場合に画像ビューワーがブラウザの戻るボタンで閉じられない問題を修正
|
||||
- Fix: ロール作成画面で設定できるアイコンデコレーションの最大取付個数を16に制限
|
||||
- Fix: Firefox Nightlyなどでアイコンが読み込めない問題を修正
|
||||
|
||||
### Server
|
||||
- Enhance: pg_bigmが利用できるよう、ノートの検索をILIKE演算子でなくLIKE演算子でLOWER()をかけたテキストに対して行うように
|
||||
|
||||
@@ -6,6 +6,8 @@ ARG NODE_VERSION=22.11.0-bookworm
|
||||
|
||||
FROM --platform=$BUILDPLATFORM node:${NODE_VERSION} AS native-builder
|
||||
|
||||
ENV COREPACK_DEFAULT_TO_LATEST=0
|
||||
|
||||
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
|
||||
--mount=type=cache,target=/var/lib/apt,sharing=locked \
|
||||
rm -f /etc/apt/apt.conf.d/docker-clean \
|
||||
@@ -44,6 +46,8 @@ RUN rm -rf .git/
|
||||
|
||||
FROM --platform=$TARGETPLATFORM node:${NODE_VERSION} AS target-builder
|
||||
|
||||
ENV COREPACK_DEFAULT_TO_LATEST=0
|
||||
|
||||
RUN apt-get update \
|
||||
&& apt-get install -yqq --no-install-recommends \
|
||||
build-essential
|
||||
@@ -68,6 +72,7 @@ FROM --platform=$TARGETPLATFORM node:${NODE_VERSION}-slim AS runner
|
||||
|
||||
ARG UID="991"
|
||||
ARG GID="991"
|
||||
ENV COREPACK_DEFAULT_TO_LATEST=0
|
||||
|
||||
RUN apt-get update \
|
||||
&& apt-get install -y --no-install-recommends \
|
||||
|
||||
@@ -7,6 +7,11 @@ bug report to the GitHub repository.
|
||||
|
||||
Thanks for helping make Misskey safe for everyone.
|
||||
|
||||
> [!note]
|
||||
> CNA [requires](https://www.cve.org/ResourcesSupport/AllResources/CNARules#section_5-2_Description) that CVEs include a description in English for inclusion in the CVE Catalog.
|
||||
>
|
||||
> When creating a security advisory, all content must be written in English (it is acceptable to include a non-English description along with the English one).
|
||||
|
||||
## When create a patch
|
||||
|
||||
If you can also create a patch to fix the vulnerability, please create a PR on the private fork.
|
||||
|
||||
@@ -1460,9 +1460,6 @@ _pages:
|
||||
newPage: "أنشئ صفحة جديدة"
|
||||
editPage: "عدّل الصفحة"
|
||||
readPage: "نُشّط عرض المصدر"
|
||||
created: "نجح إنشاء الصفحة"
|
||||
updated: "نجح تعديل الصفحة"
|
||||
deleted: "نجح حذف الصفحة"
|
||||
pageSetting: "إعدادات الصفحة"
|
||||
nameAlreadyExists: "رابط الصفحة موجود مسبقًا"
|
||||
invalidNameTitle: "رابط الصفحة ليس صالحًا"
|
||||
@@ -1584,9 +1581,6 @@ _reversi:
|
||||
_offlineScreen:
|
||||
title: "غير متصل - يتعذر الاتصال بالخادم"
|
||||
header: "يتعذر الاتصال بالخادم"
|
||||
_customEmojisManager:
|
||||
_gridCommon:
|
||||
alertEmojisRegisterFailedTitle: "خطأ"
|
||||
_remoteLookupErrors:
|
||||
_noSuchObject:
|
||||
title: "غير موجود"
|
||||
|
||||
@@ -1237,9 +1237,6 @@ _pages:
|
||||
newPage: "নতুন পৃষ্ঠা বানান"
|
||||
editPage: "পৃষ্ঠাটি সম্পাদনা করুন"
|
||||
readPage: "উৎস দেখছেন"
|
||||
created: "পৃষ্ঠা তৈরি করা হয়েছে"
|
||||
updated: "পৃষ্ঠা সম্পাদনা করা হয়েছে"
|
||||
deleted: "পৃষ্ঠা মুছে ফেলা হয়েছে"
|
||||
pageSetting: "পৃষ্ঠার সেটিংস"
|
||||
nameAlreadyExists: "পৃষ্ঠার URLটি ইতিমধ্যেই ব্যাবহার করা হয়েছে"
|
||||
invalidNameTitle: "পৃষ্ঠার URL অবৈধ"
|
||||
@@ -1348,9 +1345,6 @@ _moderationLogTypes:
|
||||
resetPassword: "পাসওয়ার্ড রিসেট করুন"
|
||||
_reversi:
|
||||
total: "মোট"
|
||||
_customEmojisManager:
|
||||
_gridCommon:
|
||||
alertEmojisRegisterFailedTitle: "সমস্যা"
|
||||
_remoteLookupErrors:
|
||||
_noSuchObject:
|
||||
title: "পাওয়া যায়নি"
|
||||
|
||||
@@ -2365,9 +2365,6 @@ _pages:
|
||||
newPage: "pa"
|
||||
editPage: "Editar la pàgina"
|
||||
readPage: "Veure el codi font d'aquesta pàgina"
|
||||
created: "La pàgina ha sigut creada correctament"
|
||||
updated: "La pàgina s'ha editat correctament"
|
||||
deleted: "La pàgina s'ha esborrat sense problemes"
|
||||
pageSetting: "Configuració de la pàgina"
|
||||
nameAlreadyExists: "L'adreça URL de la pàgina ja existeix"
|
||||
invalidNameTitle: "L'adreça URL de la pàgina no és vàlida"
|
||||
@@ -2745,16 +2742,17 @@ _customEmojisManager:
|
||||
deleteSelectionRanges: "Esborrar files de la selecció "
|
||||
searchSettings: "Configuració del cercador"
|
||||
searchSettingCaption: "Defineix criteris de cerca detallats."
|
||||
searchLimit: "Nombre de pantalles"
|
||||
sortOrder: "Ordenar"
|
||||
registrationLogs: "Registres d'inscripcions "
|
||||
registrationLogsCaption: "Quan s'actualitzin o s'esborrin emojis es mostrarà un registre. Desapareixeran quan s'actualitzin, s'esborrin, visitis una nova pàgina o la recarreguis."
|
||||
alertEmojisRegisterFailedTitle: "Error"
|
||||
alertEmojisRegisterFailedDescription: "No s'ha pogut actualitzar o esborrar l'emoji. Si us plau, dona una ullada al registre per més detalls."
|
||||
_logs:
|
||||
showSuccessLogSwitch: "Mostrar el registre d'èxit "
|
||||
failureLogNothing: "No hi ha registres de fallades."
|
||||
logNothing: "No hi ha registres."
|
||||
_remote:
|
||||
selectionRowDetail: "Detall de la línia seleccionada"
|
||||
importSelectionRows: "Importar les files seleccionades"
|
||||
importSelectionRangesRows: "Importar les files de la selecció "
|
||||
importEmojisButton: "Importar els Emojis marcats"
|
||||
@@ -2769,10 +2767,12 @@ _customEmojisManager:
|
||||
markAsDeleteTargetRanges: "Selecció de files per la seva eliminació "
|
||||
alertUpdateEmojisNothingDescription: "No hi ha Emojis actualitzats."
|
||||
alertDeleteEmojisNothingDescription: "No hi ha Emoji per esborrar."
|
||||
confirmUpdateEmojisTitle: "Confirmar"
|
||||
confirmMovePage: "Vols canviar de pàgina?"
|
||||
confirmChangeView: "Vols canviar la pantalla?"
|
||||
confirmUpdateEmojisDescription: "Actualitzar {count} Emojis. Vols executar-ho?"
|
||||
confirmDeleteEmojisTitle: "Confirmar"
|
||||
confirmDeleteEmojisDescription: "Esborrar {count} Emojis marcats. Vols continuar?"
|
||||
confirmResetDescription: "Es restabliran tots els canvis fets fins ara."
|
||||
confirmMovePageDesciption: "S'han fet canvis als Emojis d'aquesta pàgina. Si continues navegant sense guardar els canvis, es perdran tots els canvis fets en aquesta pàgina."
|
||||
dialogSelectRoleTitle: "Buscar Emojis per rol"
|
||||
_register:
|
||||
uploadSettingTitle: "Actualitza la configuració "
|
||||
@@ -2783,11 +2783,8 @@ _customEmojisManager:
|
||||
emojiInputAreaList1: "Arrossega i deixar anar fitxers o directoris dintre del quadrat."
|
||||
emojiInputAreaList2: "Clica l'enllaç per seleccionar un fitxer des del teu ordinador."
|
||||
emojiInputAreaList3: "Clica aquest enllaç per seleccionar del Disc"
|
||||
confirmRegisterEmojisTitle: "Confirmar"
|
||||
confirmRegisterEmojisDescription: "Registrar els Emojis de la llista com a nous Emojis personalitzats. Vols continuar? (Per evitar una sobrecàrrega només {count} Emojis es poden registrar d'una sola vegada)"
|
||||
confirmClearEmojisTitle: "Confirmar"
|
||||
confirmClearEmojisDescription: "Descartar els canvis i esborrar els Emojis de la llista. Vols continuar?"
|
||||
confirmUploadEmojisTitle: "Confirmar"
|
||||
confirmUploadEmojisDescription: "Pujar els {count} fitxers que has arrossegat al disc. Vols continuar?"
|
||||
_embedCodeGen:
|
||||
title: "Personalitza el codi per incrustar"
|
||||
|
||||
@@ -1883,9 +1883,6 @@ _pages:
|
||||
newPage: "Vytvořit novou stránku"
|
||||
editPage: "Upravit stránku"
|
||||
readPage: "Prohlížení zdroje této stránky"
|
||||
created: "Stránka byla úspěšně vytvořena"
|
||||
updated: "Stránka byla úspěšně aktualizována"
|
||||
deleted: "Stránka byla úspěšně smazána"
|
||||
pageSetting: "Nastavení stránky"
|
||||
nameAlreadyExists: "Zadaná adresa URL stránky již existuje"
|
||||
invalidNameTitle: "Zadaná adresa URL stránky je neplatná"
|
||||
@@ -2024,9 +2021,6 @@ _moderationLogTypes:
|
||||
createInvitation: "Vygenerovat pozvánku"
|
||||
_reversi:
|
||||
total: "Celkem"
|
||||
_customEmojisManager:
|
||||
_gridCommon:
|
||||
alertEmojisRegisterFailedTitle: "Chyba"
|
||||
_remoteLookupErrors:
|
||||
_noSuchObject:
|
||||
title: "Nenalezeno"
|
||||
|
||||
@@ -5,6 +5,7 @@ introMisskey: "Willkommen! Misskey ist eine dezentralisierte Open-Source Microbl
|
||||
poweredByMisskeyDescription: "{name} ist einer der durch die Open-Source-Plattform <b>Misskey</b> betriebenen Dienste."
|
||||
monthAndDay: "{day}.{month}."
|
||||
search: "Suchen"
|
||||
reset: "Zurücksetzen"
|
||||
notifications: "Benachrichtigungen"
|
||||
username: "Benutzername"
|
||||
password: "Passwort"
|
||||
@@ -48,6 +49,7 @@ pin: "An dein Profil anheften"
|
||||
unpin: "Von deinem Profil lösen"
|
||||
copyContent: "Inhalt kopieren"
|
||||
copyLink: "Link kopieren"
|
||||
copyRemoteLink: "Renote-Link kopieren"
|
||||
copyLinkRenote: "Renote-Link kopieren"
|
||||
delete: "Löschen"
|
||||
deleteAndEdit: "Löschen und Bearbeiten"
|
||||
@@ -517,6 +519,7 @@ emojiStyle: "Emoji-Stil"
|
||||
native: "Nativ"
|
||||
menuStyle: "Menü Stil"
|
||||
style: "Stil"
|
||||
drawer: "App-Übersicht"
|
||||
popup: "Pop-up"
|
||||
showNoteActionsOnlyHover: "Notizmenü nur bei Mouseover anzeigen"
|
||||
showReactionsCount: "Zeige die Anzahl der Reaktionen auf Notizen an"
|
||||
@@ -691,6 +694,7 @@ regexpError: "Fehler in einem regulären Ausdruck"
|
||||
regexpErrorDescription: "Im regulären Ausdruck deiner in Zeile {line} von {tab}en Wortstummschaltungen ist ein Fehler aufgetreten:"
|
||||
instanceMute: "Instanzstummschaltungen"
|
||||
userSaysSomething: "{name} hat etwas gesagt"
|
||||
userSaysSomethingAbout: "{name} sagt etwas über '{word}'"
|
||||
makeActive: "Aktivieren"
|
||||
display: "Anzeigeart"
|
||||
copy: "Kopieren"
|
||||
@@ -859,6 +863,7 @@ administration: "Verwaltung"
|
||||
accounts: "Benutzerkonten"
|
||||
switch: "Wechseln"
|
||||
noMaintainerInformationWarning: "Betreiberinformationen sind nicht konfiguriert."
|
||||
noInquiryUrlWarning: "Keine gültige URL."
|
||||
noBotProtectionWarning: "Schutz vor Bots ist nicht konfiguriert."
|
||||
configure: "Konfigurieren"
|
||||
postToGallery: "Neuen Galeriebeitrag erstellen"
|
||||
@@ -1091,6 +1096,7 @@ retryAllQueuesConfirmTitle: "Wirklich erneut versuchen?"
|
||||
retryAllQueuesConfirmText: "Dies wird zu einer temporären Erhöhung der Serverlast führen."
|
||||
enableChartsForRemoteUser: "Diagramme für Nutzer fremder Instanzen erstellen"
|
||||
enableChartsForFederatedInstances: "Diagramme für fremde Instanzen erstellen"
|
||||
enableStatsForFederatedInstances: "Abruf von Informationen über förderierte Server"
|
||||
showClipButtonInNoteFooter: "\"Clip\" zum Notizmenu hinzufügen"
|
||||
reactionsDisplaySize: "Reaktionsanzeigegröße"
|
||||
limitWidthOfReaction: "Begrenze die Breite der Reaktion und zeige sie verkleinert an"
|
||||
@@ -1139,6 +1145,8 @@ preventAiLearningDescription: "Fordert Crawler auf, gepostetes Text- oder Bildma
|
||||
options: "Optionen"
|
||||
specifyUser: "Spezifischer Benutzer"
|
||||
lookupConfirm: "Zustimmen?"
|
||||
openTagPageConfirm: "Hashtag Seite wirklich öffnen?"
|
||||
specifyHost: "Host"
|
||||
failedToPreviewUrl: "Vorschau nicht anzeigbar"
|
||||
update: "Aktualisieren"
|
||||
rolesThatCanBeUsedThisEmojiAsReaction: "Rollen, die dieses Emoji als Reaktion verwenden können"
|
||||
@@ -1197,6 +1205,7 @@ showRenotes: "Renotes anzeigen"
|
||||
edited: "Bearbeitet"
|
||||
notificationRecieveConfig: "Benachrichtigungseinstellungen"
|
||||
mutualFollow: "Gegenseitig gefolgt"
|
||||
followingOrFollower: "Follow oder Follower"
|
||||
fileAttachedOnly: "Nur Notizen mit Dateien"
|
||||
showRepliesToOthersInTimeline: "Antworten in Chronik anzeigen"
|
||||
hideRepliesToOthersInTimeline: "Antworten nicht in Chronik anzeigen"
|
||||
@@ -2268,9 +2277,6 @@ _pages:
|
||||
newPage: "Seite erstellen"
|
||||
editPage: "Seite bearbeiten"
|
||||
readPage: "Quelltextansicht"
|
||||
created: "Seite erfolgreich erstellt"
|
||||
updated: "Seite erfolgreich aktualisiert"
|
||||
deleted: "Seite erfolgreich gelöscht"
|
||||
pageSetting: "Seiteneinstellungen"
|
||||
nameAlreadyExists: "Die angegebene Seiten-URL existiert bereits"
|
||||
invalidNameTitle: "Die angegebene Seiten-URL ist ungültig"
|
||||
@@ -2541,9 +2547,6 @@ _contextMenu:
|
||||
_gridComponent:
|
||||
_error:
|
||||
requiredValue: "Dieser Wert ist ein Pflichtfeld"
|
||||
_customEmojisManager:
|
||||
_gridCommon:
|
||||
alertEmojisRegisterFailedTitle: "Fehler"
|
||||
_embedCodeGen:
|
||||
title: "Einbettungscode anpassen"
|
||||
header: "Kopfzeile anzeigen"
|
||||
|
||||
@@ -397,6 +397,3 @@ _moderationLogTypes:
|
||||
suspend: "Αποβολή"
|
||||
_reversi:
|
||||
total: "Σύνολο"
|
||||
_customEmojisManager:
|
||||
_gridCommon:
|
||||
alertEmojisRegisterFailedTitle: "Σφάλμα"
|
||||
|
||||
@@ -2365,9 +2365,6 @@ _pages:
|
||||
newPage: "Create a new Page"
|
||||
editPage: "Edit this Page"
|
||||
readPage: "Viewing this Page's source"
|
||||
created: "Page successfully created"
|
||||
updated: "Page successfully edited"
|
||||
deleted: "Page successfully deleted"
|
||||
pageSetting: "Page settings"
|
||||
nameAlreadyExists: "The specified Page URL already exists"
|
||||
invalidNameTitle: "The specified Page URL is invalid"
|
||||
@@ -2745,16 +2742,17 @@ _customEmojisManager:
|
||||
deleteSelectionRanges: "Delete rows in the selection"
|
||||
searchSettings: "Search settings"
|
||||
searchSettingCaption: "Set detailed search criteria."
|
||||
searchLimit: ""
|
||||
sortOrder: "Sort order"
|
||||
registrationLogs: "Registration log"
|
||||
registrationLogsCaption: "Logs will be displayed when updating or deleting Emojis. They will disappear after updating or deleting them, moving to a new page, or reloading."
|
||||
alertEmojisRegisterFailedTitle: "Error"
|
||||
alertEmojisRegisterFailedDescription: "Failed to update or delete Emojis. Please check the registration log for details."
|
||||
_logs:
|
||||
showSuccessLogSwitch: "Show success log"
|
||||
failureLogNothing: "There is no failure log."
|
||||
logNothing: "There is no log."
|
||||
_remote:
|
||||
selectionRowDetail: "Selected row's detail"
|
||||
importSelectionRows: "Import selected rows"
|
||||
importSelectionRangesRows: "Import rows in the selection"
|
||||
importEmojisButton: "Import checked Emojis"
|
||||
@@ -2769,10 +2767,12 @@ _customEmojisManager:
|
||||
markAsDeleteTargetRanges: "Mark rows in the selection as a target to delete"
|
||||
alertUpdateEmojisNothingDescription: "There are no updated Emojis."
|
||||
alertDeleteEmojisNothingDescription: "There are no Emojis to be deleted."
|
||||
confirmUpdateEmojisTitle: "Confirm"
|
||||
confirmMovePage: ""
|
||||
confirmChangeView: ""
|
||||
confirmUpdateEmojisDescription: "Update {count} Emoji(s). Are you sure to continue?"
|
||||
confirmDeleteEmojisTitle: "Confirm"
|
||||
confirmDeleteEmojisDescription: "Delete checked {count} Emoji(s). Are you sure to continue?"
|
||||
confirmResetDescription: ""
|
||||
confirmMovePageDesciption: "Changes have been made to the Emojis on this page.\nIf you leave the page without saving, all changes made on this page will be discarded."
|
||||
dialogSelectRoleTitle: "Search by roll set in Emojis"
|
||||
_register:
|
||||
uploadSettingTitle: "Upload settings"
|
||||
@@ -2783,11 +2783,8 @@ _customEmojisManager:
|
||||
emojiInputAreaList1: "Drag and drop image files or a directory into this frame"
|
||||
emojiInputAreaList2: "Click this link to select from your computer"
|
||||
emojiInputAreaList3: "Click this link to select from the drive"
|
||||
confirmRegisterEmojisTitle: "Confirm"
|
||||
confirmRegisterEmojisDescription: "Register the Emojis from the list as new custom Emojis. Are you sure to continue? (To avoid overload, only {count} Emoji(s) can be registered in a single operation)"
|
||||
confirmClearEmojisTitle: "Confirm"
|
||||
confirmClearEmojisDescription: "Discard the edits and clear the Emojis from the list. Are you sure to continue?"
|
||||
confirmUploadEmojisTitle: "Confirm"
|
||||
confirmUploadEmojisDescription: "Upload the dragged and dropped {count} file(s) to the drive. Are you sure to continue?"
|
||||
_embedCodeGen:
|
||||
title: "Customize embed code"
|
||||
|
||||
@@ -5,6 +5,7 @@ introMisskey: "¡Bienvenido/a! Misskey es un servicio de microblogging descentra
|
||||
poweredByMisskeyDescription: "{name} es uno de los servicios (también llamado instancia) que usa la plataforma de código abierto <b>Misskey</b>"
|
||||
monthAndDay: "{day}/{month}"
|
||||
search: "Buscar"
|
||||
reset: "Reiniciar"
|
||||
notifications: "Notificaciones"
|
||||
username: "Nombre de usuario"
|
||||
password: "Contraseña"
|
||||
@@ -518,6 +519,7 @@ emojiStyle: "Estilo de emoji"
|
||||
native: "Nativo"
|
||||
menuStyle: "Diseño del menú"
|
||||
style: "Diseño"
|
||||
drawer: "Cajón de Aplicaciones"
|
||||
popup: "Ventana emergente"
|
||||
showNoteActionsOnlyHover: "Mostrar acciones de la nota sólo al pasar el cursor"
|
||||
showReactionsCount: "Mostrar el número de reacciones en las notas"
|
||||
@@ -683,7 +685,10 @@ smtpSecure: "Usar SSL/TLS implícito en la conexión SMTP"
|
||||
smtpSecureInfo: "Apagar cuando se use STARTTLS"
|
||||
testEmail: "Prueba de envío"
|
||||
wordMute: "Silenciar palabras"
|
||||
wordMuteDescription: "Minimiza las notas que contienen la palabra o frase especificada. Las notas minimizadas pueden visualizarse haciendo clic sobre ellas."
|
||||
hardWordMute: "Filtro de palabra fuerte"
|
||||
showMutedWord: "Mostrar palabras silenciadas."
|
||||
hardWordMuteDescription: "Oculta las notas que contienen la palabra o frase especificada. A diferencia de Silenciar palabra, la nota quedará completamente oculta a la vista."
|
||||
regexpError: "Error de la expresión regular"
|
||||
regexpErrorDescription: "Ocurrió un error en la expresión regular en la linea {line} de las palabras muteadas {tab}"
|
||||
instanceMute: "Instancias silenciadas"
|
||||
@@ -1134,6 +1139,7 @@ preventAiLearningDescription: "Pedirle a las arañas (crawlers) no usar los text
|
||||
options: "Opción"
|
||||
specifyUser: "Especificar usuario"
|
||||
lookupConfirm: "¿Quiere informarse?"
|
||||
specifyHost: "Especificar Host"
|
||||
failedToPreviewUrl: "No se pudo generar la vista previa"
|
||||
update: "Actualizar"
|
||||
rolesThatCanBeUsedThisEmojiAsReaction: "Roles que pueden usar este emoji como reacción"
|
||||
@@ -2288,9 +2294,6 @@ _pages:
|
||||
newPage: "Crear página"
|
||||
editPage: "Editar página"
|
||||
readPage: "Viendo la fuente"
|
||||
created: "La página fue creada"
|
||||
updated: "La página fue actualizada"
|
||||
deleted: "La página borrada"
|
||||
pageSetting: "Configurar página"
|
||||
nameAlreadyExists: "La URL de la página especificada ya existe"
|
||||
invalidNameTitle: "URL inválida"
|
||||
@@ -2557,9 +2560,6 @@ _mediaControls:
|
||||
pip: "Picture in Picture"
|
||||
playbackRate: "Velocidad de reproducción"
|
||||
loop: "Reproducción en bucle"
|
||||
_customEmojisManager:
|
||||
_gridCommon:
|
||||
alertEmojisRegisterFailedTitle: "Error"
|
||||
_remoteLookupErrors:
|
||||
_noSuchObject:
|
||||
title: "No se encuentra"
|
||||
|
||||
@@ -2118,9 +2118,6 @@ _pages:
|
||||
newPage: "Créer une page"
|
||||
editPage: "Modifier une page"
|
||||
readPage: "Affichage de la source en cours"
|
||||
created: "La page a été créée !"
|
||||
updated: "La page a été mise à jour !"
|
||||
deleted: "La page a été supprimée"
|
||||
pageSetting: "Paramètres de la Page"
|
||||
nameAlreadyExists: "L'URL de page spécifiée existe déjà"
|
||||
invalidNameTitle: "L'URL de page spécifiée n’est pas valide"
|
||||
@@ -2361,9 +2358,6 @@ _reversi:
|
||||
lookingForPlayer: "Recherche d'adversaire"
|
||||
_mediaControls:
|
||||
playbackRate: "Vitesse de lecture"
|
||||
_customEmojisManager:
|
||||
_gridCommon:
|
||||
alertEmojisRegisterFailedTitle: "Erreur"
|
||||
_embedCodeGen:
|
||||
title: "Personnaliser le code d'intégration"
|
||||
generateCode: "Générer le code d'intégration"
|
||||
|
||||
@@ -2285,9 +2285,6 @@ _pages:
|
||||
newPage: "Buat halaman baru"
|
||||
editPage: "Sunting halaman"
|
||||
readPage: "Lihat sumber kode aktif"
|
||||
created: "Halaman berhasil dibuat"
|
||||
updated: "Halaman berhasil diperbaharui!"
|
||||
deleted: "Halaman telah dihapus"
|
||||
pageSetting: "Pengaturan Halaman"
|
||||
nameAlreadyExists: "URL Halaman yang ditentukan sudah ada"
|
||||
invalidNameTitle: "URL Halaman yang ditentukan tidak valid"
|
||||
@@ -2610,9 +2607,6 @@ _mediaControls:
|
||||
pip: "Gambar dalam Gambar"
|
||||
playbackRate: "Kecepatan Pemutaran"
|
||||
loop: "Ulangi Pemutaran"
|
||||
_customEmojisManager:
|
||||
_gridCommon:
|
||||
alertEmojisRegisterFailedTitle: "Galat"
|
||||
_remoteLookupErrors:
|
||||
_noSuchObject:
|
||||
title: "Tidak dapat ditemukan"
|
||||
|
||||
14
locales/index.d.ts
vendored
14
locales/index.d.ts
vendored
@@ -4195,7 +4195,7 @@ export interface Locale extends ILocale {
|
||||
*/
|
||||
"invalidParamError": string;
|
||||
/**
|
||||
* リクエストパラメータに問題があります。通常これはバグですが、入力した文字数が多すぎる等の可能性もあります。
|
||||
* リクエストパラメータに問題があります。通常これはバグですが、入力した文字数が多すぎる・許可されていない文字を入力している等の可能性もあります。
|
||||
*/
|
||||
"invalidParamErrorDescription": string;
|
||||
/**
|
||||
@@ -9180,18 +9180,6 @@ export interface Locale extends ILocale {
|
||||
* ソースを表示中
|
||||
*/
|
||||
"readPage": string;
|
||||
/**
|
||||
* ページを作成しました
|
||||
*/
|
||||
"created": string;
|
||||
/**
|
||||
* ページを更新しました
|
||||
*/
|
||||
"updated": string;
|
||||
/**
|
||||
* ページを削除しました
|
||||
*/
|
||||
"deleted": string;
|
||||
/**
|
||||
* ページ設定
|
||||
*/
|
||||
|
||||
@@ -107,7 +107,7 @@ makeFollowManuallyApprove: "Approva i follower manualmente"
|
||||
defaultNoteVisibility: "Privacy predefinita delle note"
|
||||
follow: "Segui"
|
||||
followRequest: "Richiesta di follow"
|
||||
followRequests: "Richieste di follow"
|
||||
followRequests: "Relazioni"
|
||||
unfollow: "Togli Following"
|
||||
followRequestPending: "Richiesta in approvazione"
|
||||
enterEmoji: "Inserisci emoji"
|
||||
@@ -537,7 +537,7 @@ regenerate: "Generare di nuovo"
|
||||
fontSize: "Dimensione carattere"
|
||||
mediaListWithOneImageAppearance: "Altezza dell'elenco media con una sola immagine "
|
||||
limitTo: "Limita a {x}"
|
||||
noFollowRequests: "Non hai alcuna richiesta di follow"
|
||||
noFollowRequests: "Non ci sono richieste di relazione"
|
||||
openImageInNewTab: "Apri le immagini in un nuovo tab"
|
||||
dashboard: "Pannello di controllo"
|
||||
local: "Locale"
|
||||
@@ -1933,7 +1933,7 @@ _serverDisconnectedBehavior:
|
||||
quiet: "Visualizza avviso in modo discreto"
|
||||
_channel:
|
||||
create: "Nuovo canale"
|
||||
edit: "Gerisci canale"
|
||||
edit: "Modifica il canale"
|
||||
setBanner: "Scegli intestazione"
|
||||
removeBanner: "Rimuovi intestazione"
|
||||
featured: "Popolari nel canale"
|
||||
@@ -1961,7 +1961,7 @@ _instanceMute:
|
||||
_theme:
|
||||
explore: "Esplora temi"
|
||||
install: "Installa un tema"
|
||||
manage: "Gestione temi"
|
||||
manage: "Gestione dei temi"
|
||||
code: "Codice tema"
|
||||
description: "Descrizione"
|
||||
installed: "{name} è installato"
|
||||
@@ -2108,12 +2108,12 @@ _permissions:
|
||||
"read:messaging": "Visualizzare la chat"
|
||||
"write:messaging": "Gestire la chat"
|
||||
"read:mutes": "Vedi i profili silenziati"
|
||||
"write:mutes": "Gestisci i profili silenziati"
|
||||
"write:mutes": "Gestione dei profili silenziati"
|
||||
"write:notes": "Creare / Eliminare note"
|
||||
"read:notifications": "Visualizzare notifiche"
|
||||
"write:notifications": "Gestire notifiche"
|
||||
"write:notifications": "Gestione delle notifiche"
|
||||
"read:reactions": "Vedi reazioni"
|
||||
"write:reactions": "Gerisci reazioni"
|
||||
"write:reactions": "Gestione delle reazioni"
|
||||
"write:votes": "Votare"
|
||||
"read:pages": "Visualizzare pagine"
|
||||
"write:pages": "Gestire pagine"
|
||||
@@ -2122,7 +2122,7 @@ _permissions:
|
||||
"read:user-groups": "Vedere i gruppi di utenti"
|
||||
"write:user-groups": "Gestire i gruppi di utenti"
|
||||
"read:channels": "Visualizza canali"
|
||||
"write:channels": "Gerisci canali"
|
||||
"write:channels": "Gestione dei canali"
|
||||
"read:gallery": "Visualizza la galleria."
|
||||
"write:gallery": "Gestione della galleria"
|
||||
"read:gallery-likes": "Visualizza i contenuti della galleria."
|
||||
@@ -2365,9 +2365,6 @@ _pages:
|
||||
newPage: "Crea pagina"
|
||||
editPage: "Modifica pagina"
|
||||
readPage: "Visualizzando fonte "
|
||||
created: "Pagina creata!"
|
||||
updated: "Pagina aggiornata con successo!"
|
||||
deleted: "Pagina eliminata"
|
||||
pageSetting: "Impostazioni pagina"
|
||||
nameAlreadyExists: "Esiste già una pagina con lo stesso URL."
|
||||
invalidNameTitle: "L'URL di pagina definito non è valido"
|
||||
@@ -2745,16 +2742,17 @@ _customEmojisManager:
|
||||
deleteSelectionRanges: "Elimina le righe nell'intervallo selezionato"
|
||||
searchSettings: "Impostazioni di ricerca"
|
||||
searchSettingCaption: "Imposta condizioni di ricerca dettagliate."
|
||||
searchLimit: "Risultati visualizzati"
|
||||
sortOrder: "Ordine"
|
||||
registrationLogs: "Storico della registrazione"
|
||||
registrationLogsCaption: "Lo storico verrà visualizzato in base alla attività sulle emoji. Scompare quando si esegue un'operazione di aggiornamento/eliminazione o si modifica/ricarica la pagina."
|
||||
alertEmojisRegisterFailedTitle: "Errore"
|
||||
alertEmojisRegisterFailedDescription: "Attenzione, è impossibile modificare la emoji. Si prega di controllare lo storico per ulteriori dettagli."
|
||||
_logs:
|
||||
showSuccessLogSwitch: "Mostra le azioni a buon fine"
|
||||
failureLogNothing: "Non ci sono errori nello storico delle emoji"
|
||||
logNothing: "Lo storico è vuoto."
|
||||
_remote:
|
||||
selectionRowDetail: "Dettagli della riga selezionata"
|
||||
importSelectionRows: "Importa le righe selezionate"
|
||||
importSelectionRangesRows: "Importa le righe nell'intervallo selezionato"
|
||||
importEmojisButton: "Importa le emoji selezionate"
|
||||
@@ -2769,10 +2767,12 @@ _customEmojisManager:
|
||||
markAsDeleteTargetRanges: "Selezionare le righe nell'intervallo come eliminabili"
|
||||
alertUpdateEmojisNothingDescription: "Non ci sono emoji aggiornate."
|
||||
alertDeleteEmojisNothingDescription: "Non ci sono emoji da eliminare."
|
||||
confirmUpdateEmojisTitle: "Conferma"
|
||||
confirmMovePage: "Vuoi davvero spostare la pagina?"
|
||||
confirmChangeView: "Vuoi davvero cambiare la vista?"
|
||||
confirmUpdateEmojisDescription: "Aggiornamento di {count} emoji. Vuoi davvero continuare?"
|
||||
confirmDeleteEmojisTitle: "Conferma"
|
||||
confirmDeleteEmojisDescription: "Eliminazione delle {count} emoji selezionate. Vuoi davvero continuare?"
|
||||
confirmResetDescription: "Verranno ripristinate tutte le modifiche apportate finora."
|
||||
confirmMovePageDesciption: "Sono state modificate le emoji in questa pagina.\nUscendo senza salvare, tutte le modifiche verranno ignorate."
|
||||
dialogSelectRoleTitle: "Cerca emoji per ruolo"
|
||||
_register:
|
||||
uploadSettingTitle: "Caricamento impostazioni"
|
||||
@@ -2783,11 +2783,8 @@ _customEmojisManager:
|
||||
emojiInputAreaList1: "Trascina una immagine o una cartella in quest'area"
|
||||
emojiInputAreaList2: "Clicca per scegliere file dal tuo dispositivo"
|
||||
emojiInputAreaList3: "Clicca per selezionare dal Drive"
|
||||
confirmRegisterEmojisTitle: "Conferma"
|
||||
confirmRegisterEmojisDescription: "Registrazione delle emoji elencate come nuove emoji personalizzate. Vuoi davvero procedere? (Per evitare sovraccarichi, puoi registrare al massimo {count} emoji per volta)"
|
||||
confirmClearEmojisTitle: "Conferma"
|
||||
confirmClearEmojisDescription: "Annullare le modifiche e cancella le emoji nell'elenco. Confermi?"
|
||||
confirmUploadEmojisTitle: "Conferma"
|
||||
confirmUploadEmojisDescription: "Caricamento sul Drive di {count} file locali. Vuoi davvero procedere?"
|
||||
_embedCodeGen:
|
||||
title: "Personalizza il codice di incorporamento"
|
||||
|
||||
@@ -1044,7 +1044,7 @@ youCannotCreateAnymore: "これ以上作成することはできません。"
|
||||
cannotPerformTemporary: "一時的に利用できません"
|
||||
cannotPerformTemporaryDescription: "操作回数が制限を超過するため一時的に利用できません。しばらく時間を置いてから再度お試しください。"
|
||||
invalidParamError: "パラメータエラー"
|
||||
invalidParamErrorDescription: "リクエストパラメータに問題があります。通常これはバグですが、入力した文字数が多すぎる等の可能性もあります。"
|
||||
invalidParamErrorDescription: "リクエストパラメータに問題があります。通常これはバグですが、入力した文字数が多すぎる・許可されていない文字を入力している等の可能性もあります。"
|
||||
permissionDeniedError: "操作が拒否されました"
|
||||
permissionDeniedErrorDescription: "このアカウントにはこの操作を行うための権限がありません。"
|
||||
preset: "プリセット"
|
||||
@@ -2422,9 +2422,6 @@ _pages:
|
||||
newPage: "ページの作成"
|
||||
editPage: "ページの編集"
|
||||
readPage: "ソースを表示中"
|
||||
created: "ページを作成しました"
|
||||
updated: "ページを更新しました"
|
||||
deleted: "ページを削除しました"
|
||||
pageSetting: "ページ設定"
|
||||
nameAlreadyExists: "指定されたページURLは既に存在しています"
|
||||
invalidNameTitle: "不正なページURLです"
|
||||
|
||||
@@ -2357,9 +2357,6 @@ _pages:
|
||||
newPage: "ページを作る"
|
||||
editPage: "ページの編集"
|
||||
readPage: "ソースを表示中"
|
||||
created: "ページを作成したで"
|
||||
updated: "ページを更新したで"
|
||||
deleted: "ページを削除したで"
|
||||
pageSetting: "ページ設定"
|
||||
nameAlreadyExists: "指定されたページURLはもうあるみたいや"
|
||||
invalidNameTitle: "正しくないページURLみたいやで"
|
||||
@@ -2721,9 +2718,6 @@ _contextMenu:
|
||||
app: "アプリ"
|
||||
appWithShift: "Shiftキーでアプリ"
|
||||
native: "ブラウザのUI"
|
||||
_customEmojisManager:
|
||||
_gridCommon:
|
||||
alertEmojisRegisterFailedTitle: "おかしなったで"
|
||||
_embedCodeGen:
|
||||
title: "埋め込みコードをカスタム"
|
||||
header: "ヘッダー出す"
|
||||
|
||||
@@ -840,9 +840,6 @@ _reversi:
|
||||
black: "꺼멍"
|
||||
white: "허영"
|
||||
total: "합게"
|
||||
_customEmojisManager:
|
||||
_gridCommon:
|
||||
alertEmojisRegisterFailedTitle: "우짭니꺼"
|
||||
_remoteLookupErrors:
|
||||
_noSuchObject:
|
||||
title: "몬 찾앗십니다"
|
||||
|
||||
@@ -5,6 +5,7 @@ introMisskey: "환영합니다! Misskey는 오픈 소스 분산형 마이크로
|
||||
poweredByMisskeyDescription: "{name} 서버는 오픈소스 플랫폼 <b>Misskey</b>의 서버 가운데 하나입니다."
|
||||
monthAndDay: "{month}월 {day}일"
|
||||
search: "검색"
|
||||
reset: "초기화"
|
||||
notifications: "알림"
|
||||
username: "유저명"
|
||||
password: "비밀번호"
|
||||
@@ -48,6 +49,7 @@ pin: "프로필에 고정"
|
||||
unpin: "프로필에서 고정 해제"
|
||||
copyContent: "내용 복사"
|
||||
copyLink: "링크 복사"
|
||||
copyRemoteLink: "리모트 서버의 링크로 복사하기"
|
||||
copyLinkRenote: "리노트 링크 복사"
|
||||
delete: "삭제"
|
||||
deleteAndEdit: "삭제 후 편집"
|
||||
@@ -686,11 +688,13 @@ testEmail: "이메일 전송 테스트"
|
||||
wordMute: "단어 뮤트"
|
||||
wordMuteDescription: "정해진 단어가 포함된 노트를 최소화 한 상태로 표시합니다. 최소화 된 노트는 클릭해서 표시할 수 있습니다."
|
||||
hardWordMute: "하드 단어 뮤트"
|
||||
showMutedWord: "뮤트한 단어를 표시하기"
|
||||
hardWordMuteDescription: "정한 단어가 들어간 노트를 숨깁니다. 단어 뮤트와 차이점은 노트가 아예 보이지 않습니다."
|
||||
regexpError: "정규 표현식 오류"
|
||||
regexpErrorDescription: "{tab}단어 뮤트 {line}행의 정규 표현식에 오류가 발생했습니다:"
|
||||
instanceMute: "서버 뮤트"
|
||||
userSaysSomething: "{name}님이 무언가를 말했습니다"
|
||||
userSaysSomethingAbout: "{name}님이 \"{word}\"를 언급했습니다."
|
||||
makeActive: "활성화"
|
||||
display: "보기"
|
||||
copy: "복사"
|
||||
@@ -1279,7 +1283,7 @@ confirmWhenRevealingSensitiveMedia: "민감한 미디어를 열 때 두 번 확
|
||||
sensitiveMediaRevealConfirm: "민감한 미디어입니다. 표시할까요?"
|
||||
createdLists: "만든 리스트"
|
||||
createdAntennas: "만든 안테나"
|
||||
fromX: "{x}부터"
|
||||
fromX: "{x}에서"
|
||||
genEmbedCode: "임베디드 코드 만들기"
|
||||
noteOfThisUser: "이 유저의 노트 목록"
|
||||
clipNoteLimitExceeded: "더 이상 이 클립에 노트를 추가 할 수 없습니다."
|
||||
@@ -1303,6 +1307,8 @@ lockdown: "잠금"
|
||||
pleaseSelectAccount: "계정을 선택해주세요."
|
||||
availableRoles: "사용 가능한 역할"
|
||||
acknowledgeNotesAndEnable: "활성화 하기 전에 주의 사항을 확인했습니다."
|
||||
federationSpecified: "이 서버는 화이트 리스트 제도로 운영 중 입니다. 정해진 리모트 서버가 아닌 경우 연합되지 않습니다."
|
||||
federationDisabled: "이 서버는 연합을 하지 않고 있습니다. 리모트 서버 유저와 통신을 할 수 없습니다."
|
||||
_accountSettings:
|
||||
requireSigninToViewContents: "콘텐츠 열람을 위해 로그인을 필수로 설정하기"
|
||||
requireSigninToViewContentsDescription1: "자신이 작성한 모든 노트 등의 콘텐츠를 보기 위해 로그인을 필수로 설정합니다. 크롤러가 정보 수집하는 것을 방지하는 효과를 기대할 수 있습니다."
|
||||
@@ -2359,9 +2365,6 @@ _pages:
|
||||
newPage: "페이지 만들기"
|
||||
editPage: "페이지 수정"
|
||||
readPage: "소스 표시 중"
|
||||
created: "페이지를 만들었습니다"
|
||||
updated: "페이지를 수정했습니다"
|
||||
deleted: "페이지가 삭제되었습니다"
|
||||
pageSetting: "페이지 설정"
|
||||
nameAlreadyExists: "지정한 페이지 URL이 이미 존재합니다"
|
||||
invalidNameTitle: "유효하지 않은 페이지 URL입니다"
|
||||
@@ -2723,9 +2726,66 @@ _contextMenu:
|
||||
app: "애플리케이션"
|
||||
appWithShift: "Shift 키로 애플리케이션"
|
||||
native: "브라우저의 UI"
|
||||
_gridComponent:
|
||||
_error:
|
||||
requiredValue: "이 값은 필수 항목입니다."
|
||||
columnTypeNotSupport: "정규표현 규칙이 type:text인 칼럼만 지원합니다."
|
||||
patternNotMatch: "이 값은 {pattern} 패턴과 일치하지 않습니다."
|
||||
notUnique: "이 값은 다른 값과 중복되지 않아야 합니다."
|
||||
_roleSelectDialog:
|
||||
notSelected: "선택하지 않았습니다."
|
||||
_customEmojisManager:
|
||||
_gridCommon:
|
||||
alertEmojisRegisterFailedTitle: "오류"
|
||||
copySelectionRows: "선택한 행을 복사하기"
|
||||
copySelectionRanges: "선택범위를 복사하기"
|
||||
deleteSelectionRows: "선택한 행을 삭제"
|
||||
deleteSelectionRanges: "선택한 행을 삭제"
|
||||
searchSettings: "검색 설정"
|
||||
searchSettingCaption: "고급 검색을 설정합니다."
|
||||
searchLimit: "표시 건수"
|
||||
sortOrder: "정렬 순서"
|
||||
registrationLogs: "등록 로그"
|
||||
registrationLogsCaption: "이모지를 갱신하거나 삭제할 때 로그가 표시됩니다. 갱신 또는 삭제하거나, 페이지 이동, 새로 고침하면 삭제됩니다."
|
||||
alertEmojisRegisterFailedDescription: "이모지를 갱신 또는 삭제하지 못했습니다. 자세한 내용은 등록 로그를 확인해주세요."
|
||||
_logs:
|
||||
showSuccessLogSwitch: "성공 로그를 표시"
|
||||
failureLogNothing: "실패 로그가 없습니다."
|
||||
logNothing: "로그가 없습니다."
|
||||
_remote:
|
||||
selectionRowDetail: "선택 행 (상세)"
|
||||
importSelectionRows: "선택 행을 가져오기"
|
||||
importSelectionRangesRows: "선택한 범위 안의 행을 가져오기"
|
||||
importEmojisButton: "선택한 이모지를 가져오기"
|
||||
confirmImportEmojisTitle: "이모지 가져오기"
|
||||
confirmImportEmojisDescription: "리모트 서버에서 받아온 이모지 {count}개를 이 서버로 가져옵니다. 이모지의 저작권, 라이선스를 확실히 확인하셨다면 실행해주세요."
|
||||
_local:
|
||||
tabTitleList: "등록한 이모지 리스트"
|
||||
tabTitleRegister: "이모지 등록"
|
||||
_list:
|
||||
emojisNothing: "등록한 이모지가 없습니다."
|
||||
markAsDeleteTargetRows: "선택한 행을 삭제할 대상으로 하기"
|
||||
markAsDeleteTargetRanges: "선택한 범위의 행을 삭제 대상으로 하기"
|
||||
alertUpdateEmojisNothingDescription: "변경할 이모지가 없습니다."
|
||||
alertDeleteEmojisNothingDescription: "삭제 대상의 이모지는 없습니다."
|
||||
confirmMovePage: "페이지를 이동할까요?"
|
||||
confirmChangeView: "표시를 바꿀까요?"
|
||||
confirmUpdateEmojisDescription: "{count}개의 이모지를 갱신합니다. 실행할까요?"
|
||||
confirmDeleteEmojisDescription: "선택한 이모지 {count}개를 삭제합니다. 실행할까요?"
|
||||
confirmResetDescription: "지금까지 했던 변경 내용이 모두 초기화됩니다."
|
||||
confirmMovePageDesciption: "이 페이지의 이모지에 변경이 있습니다.\n저장하지 않은 상태로 페이지를 이동하면, 이 페이지에서 바꾼 변경 내용이 모두 지워집니다."
|
||||
dialogSelectRoleTitle: "이모지에 설정된 역할을 검색"
|
||||
_register:
|
||||
uploadSettingTitle: "업로드 설정"
|
||||
uploadSettingDescription: "여기서 이모지를 업로드 할 때의 동작을 설정할 수 있습니다."
|
||||
directoryToCategoryLabel: "디렉토리 이름을 \"category\"로 입력하기"
|
||||
directoryToCategoryCaption: "디렉토리를 드래그 앤 드롭한 경우, 디렉토리 이름을 \"category\"로 입력합니다."
|
||||
emojiInputAreaCaption: "이모지를 등록할 방법을 선택해주세요."
|
||||
emojiInputAreaList1: "이 틀 안에 이미지 파일 또는 디렉토리를 끌어서 가져오기"
|
||||
emojiInputAreaList2: "이 링크를 클릭해서 PC에서 선택하기"
|
||||
emojiInputAreaList3: "이 링크를 클릭해서 드라이브에서 선택하기"
|
||||
confirmRegisterEmojisDescription: "리스트에 표시되어진 이모지를 새로운 커스텀 이모지로 등록합니다. 실행할까요? (부하를 피하기 위해, 한 번에 등록할 수 있는 이모지는 {count}건까지 입니다.)"
|
||||
confirmClearEmojisDescription: "편집 내용을 지우고, 목록에 표시되어진 이모지를 지웁니다. 실행할까요?"
|
||||
confirmUploadEmojisDescription: "드래그 앤 드롭한 {count}개의 파일을 드라이브에 업로드 합니다. 실행할까요?"
|
||||
_embedCodeGen:
|
||||
title: "임베디드 코드를 커스터마이즈"
|
||||
header: "해더를 표시"
|
||||
@@ -2759,5 +2819,24 @@ _remoteLookupErrors:
|
||||
_requestFailed:
|
||||
title: "요청을 실패했습니다."
|
||||
description: "해당 서버와 통신을 실패했습니다. 상대방 서버에 접속 불가능한 상태일 수도 있습니다. 또는 잘못된 URI 또는 없는 URI를 입력했는지 확인해보세요."
|
||||
_responseInvalid:
|
||||
title: "유효하지 않은 반응입니다."
|
||||
description: "이 서버와 통신할 수 있지만, 데이터가 올바르지 않습니다."
|
||||
_responseInvalidIdHostNotMatch:
|
||||
description: "입력된 URI과 실제 URI가 다릅니다. 제 3자 서버를 통한 리모트 컨텐츠를 조회하는 경우, 원래 서버 측에서 받아올 수 있는 URI를 사용하여 조회하시길 바랍니다."
|
||||
_noSuchObject:
|
||||
title: "찾을 수 없습니다"
|
||||
description: "요구된 리소스를 찾을 수 없습니다. URI를 다시 한 번 확인해보세요."
|
||||
_captcha:
|
||||
verify: "CAPTCHA를 먼저 해결하세요."
|
||||
testSiteKeyMessage: "사이트 키와 비밀 키에 테스트용 값을 입력하여 미리보기를 확인할 수 있습니다.\n자세한 내용은 아래 페이지를 확인해보세요."
|
||||
_error:
|
||||
_requestFailed:
|
||||
title: "CAPTCHA 요구에 실패했습니다."
|
||||
text: "잠시 후에 다시 실행하거나, 설정을 다시 한 번 확인해보세요."
|
||||
_verificationFailed:
|
||||
title: "CAPTCHA 검증을 실패했습니다."
|
||||
text: "설정이 올바른지 다시 한 번 확인해보세요."
|
||||
_unknown:
|
||||
title: "CAPTCHA 에러"
|
||||
text: "알 수 없는 에러가 발생했습니다."
|
||||
|
||||
@@ -474,9 +474,6 @@ _abuseReport:
|
||||
mail: "ອີເມວ"
|
||||
_moderationLogTypes:
|
||||
suspend: "ລະງັບ"
|
||||
_customEmojisManager:
|
||||
_gridCommon:
|
||||
alertEmojisRegisterFailedTitle: "ຂໍ້ຜິດພາດ"
|
||||
_remoteLookupErrors:
|
||||
_noSuchObject:
|
||||
title: "ບໍ່ພົບ"
|
||||
|
||||
@@ -537,9 +537,6 @@ _moderationLogTypes:
|
||||
resetPassword: "Wachtwoord terugzetten"
|
||||
_reversi:
|
||||
total: "Totaal"
|
||||
_customEmojisManager:
|
||||
_gridCommon:
|
||||
alertEmojisRegisterFailedTitle: "Fout"
|
||||
_remoteLookupErrors:
|
||||
_noSuchObject:
|
||||
title: "Niet gevonden"
|
||||
|
||||
@@ -727,9 +727,6 @@ _abuseReport:
|
||||
mail: "E-post"
|
||||
_moderationLogTypes:
|
||||
suspend: "Suspender"
|
||||
_customEmojisManager:
|
||||
_gridCommon:
|
||||
alertEmojisRegisterFailedTitle: "Feil"
|
||||
_remoteLookupErrors:
|
||||
_noSuchObject:
|
||||
title: "Ikke funnet"
|
||||
|
||||
@@ -1459,9 +1459,6 @@ _pages:
|
||||
newPage: "Utwórz stronę"
|
||||
editPage: "Edytuj tę stronę"
|
||||
readPage: "Aktywowano widok źródła"
|
||||
created: "Pomyślnie utworzono stronę!"
|
||||
updated: "Pomyślnie zaktualizowano stronę!"
|
||||
deleted: "Strona została usunięta"
|
||||
pageSetting: "Ustawienia strony"
|
||||
nameAlreadyExists: "Określony adres URL strony już istnieje"
|
||||
invalidNameTitle: "Podany adres URL strony jest nieprawidłowy"
|
||||
@@ -1583,9 +1580,6 @@ _moderationLogTypes:
|
||||
resetPassword: "Zresetuj hasło"
|
||||
_reversi:
|
||||
total: "Łącznie"
|
||||
_customEmojisManager:
|
||||
_gridCommon:
|
||||
alertEmojisRegisterFailedTitle: "Błąd"
|
||||
_remoteLookupErrors:
|
||||
_noSuchObject:
|
||||
title: "Nie znaleziono"
|
||||
|
||||
@@ -2357,9 +2357,6 @@ _pages:
|
||||
newPage: "Criar uma Página"
|
||||
editPage: "Editar essa Página"
|
||||
readPage: "Ver a fonte dessa Página"
|
||||
created: "Página criada com sucesso"
|
||||
updated: "Página atualizada com sucesso"
|
||||
deleted: "Página excluída com sucesso"
|
||||
pageSetting: "Configurações da página"
|
||||
nameAlreadyExists: "O URL de Página especificado já existe"
|
||||
invalidNameTitle: "O URL de Página especificado é inválido"
|
||||
@@ -2721,9 +2718,6 @@ _contextMenu:
|
||||
app: "Aplicativo"
|
||||
appWithShift: "Aplicativo com a tecla shift"
|
||||
native: "Nativo"
|
||||
_customEmojisManager:
|
||||
_gridCommon:
|
||||
alertEmojisRegisterFailedTitle: "Erro"
|
||||
_embedCodeGen:
|
||||
title: "Personalizar código do embed"
|
||||
header: "Exibir cabeçalho"
|
||||
|
||||
@@ -733,9 +733,6 @@ _moderationLogTypes:
|
||||
resetPassword: "Resetează parola"
|
||||
_reversi:
|
||||
total: "Total"
|
||||
_customEmojisManager:
|
||||
_gridCommon:
|
||||
alertEmojisRegisterFailedTitle: "Eroare"
|
||||
_remoteLookupErrors:
|
||||
_noSuchObject:
|
||||
title: "Nu a fost găsit"
|
||||
|
||||
@@ -1976,9 +1976,6 @@ _pages:
|
||||
newPage: "Создать страницу"
|
||||
editPage: "Править страницу"
|
||||
readPage: "Читать страницу"
|
||||
created: "Страница успешно создана."
|
||||
updated: "Страница успешно обновлена."
|
||||
deleted: "Страница успешно удалена."
|
||||
pageSetting: "Настройки страницы"
|
||||
nameAlreadyExists: "Указанный адрес страницы уже существует."
|
||||
invalidNameTitle: "Указанный адрес страницы недопустим."
|
||||
@@ -2147,9 +2144,6 @@ _hemisphere:
|
||||
caption: "Используется для некоторых настроек клиента для определения сезона."
|
||||
_reversi:
|
||||
total: "Всего"
|
||||
_customEmojisManager:
|
||||
_gridCommon:
|
||||
alertEmojisRegisterFailedTitle: "Ошибка"
|
||||
_remoteLookupErrors:
|
||||
_noSuchObject:
|
||||
title: "Не найдено"
|
||||
|
||||
@@ -1332,9 +1332,6 @@ _pages:
|
||||
newPage: "Vytvoriť novú stránku"
|
||||
editPage: "Upraviť túto stránku"
|
||||
readPage: "Zobrazenie zdroja aktívne"
|
||||
created: "Stránka úspešne vytvorená"
|
||||
updated: "Stránka úspešne upravená"
|
||||
deleted: "Stránka úspešne odstránená"
|
||||
pageSetting: "Nastavenia stránky"
|
||||
nameAlreadyExists: "Zadaná URL stránku už existuje"
|
||||
invalidNameTitle: "Zadaná URL stránku je nesprávna"
|
||||
@@ -1449,9 +1446,6 @@ _moderationLogTypes:
|
||||
resetPassword: "Resetovať heslo"
|
||||
_reversi:
|
||||
total: "Celkom"
|
||||
_customEmojisManager:
|
||||
_gridCommon:
|
||||
alertEmojisRegisterFailedTitle: "Chyba"
|
||||
_remoteLookupErrors:
|
||||
_noSuchObject:
|
||||
title: "Nenájdené"
|
||||
|
||||
@@ -705,8 +705,5 @@ _reversi:
|
||||
rules: "Regler"
|
||||
black: "Svart"
|
||||
white: "Vit"
|
||||
_customEmojisManager:
|
||||
_gridCommon:
|
||||
alertEmojisRegisterFailedTitle: "Fel!"
|
||||
_selfXssPrevention:
|
||||
warning: "VARNING"
|
||||
|
||||
@@ -2331,9 +2331,6 @@ _pages:
|
||||
newPage: "สร้างหน้าเพจใหม่"
|
||||
editPage: "แก้ไขหน้าเพจ"
|
||||
readPage: "กำลังดูแหล่งที่มาของเพจนี้"
|
||||
created: "สร้างหน้าเพจสำเร็จเรียบร้อยแล้ว"
|
||||
updated: "แก้ไขหน้าเพจสำเร็จเรียบร้อยแล้ว"
|
||||
deleted: "ลบหน้าเพจสำเร็จเรียบร้อยแล้ว"
|
||||
pageSetting: "การตั้งค่าหน้าเพจ"
|
||||
nameAlreadyExists: "URL ของหน้าที่ระบุนั้นมีอยู่แล้ว"
|
||||
invalidNameTitle: "URL ของหน้าที่ระบุนั้นไม่ถูกต้อง"
|
||||
@@ -2695,9 +2692,6 @@ _contextMenu:
|
||||
app: "แอปพลิเคชัน"
|
||||
appWithShift: "แอปฟลิเคชันด้วยปุ่มยกแคร่ (Shift)"
|
||||
native: "UI ของเบราว์เซอร์"
|
||||
_customEmojisManager:
|
||||
_gridCommon:
|
||||
alertEmojisRegisterFailedTitle: "ผิดพลาด!"
|
||||
_embedCodeGen:
|
||||
title: "ปรับแต่งโค้ดฝัง"
|
||||
header: "แสดงส่วนหัว"
|
||||
|
||||
@@ -460,6 +460,3 @@ _deck:
|
||||
_moderationLogTypes:
|
||||
suspend: "askıya al"
|
||||
resetPassword: "Şifre sıfırlama"
|
||||
_customEmojisManager:
|
||||
_gridCommon:
|
||||
alertEmojisRegisterFailedTitle: "hata"
|
||||
|
||||
@@ -1513,9 +1513,6 @@ _pages:
|
||||
newPage: "Створити сторінку"
|
||||
editPage: "Редагувати сторінку"
|
||||
readPage: "Перегляд вихідного коду"
|
||||
created: "Сторінка успішно створена."
|
||||
updated: "Сторінка успішно оновлена."
|
||||
deleted: "Сторінку видалено"
|
||||
pageSetting: "Налаштування сторінки"
|
||||
nameAlreadyExists: "Вказана адреса сторінки вже існує."
|
||||
invalidNameTitle: "Вказана адреса сторінки неприпустима."
|
||||
@@ -1624,9 +1621,6 @@ _moderationLogTypes:
|
||||
resetPassword: "Скинути пароль"
|
||||
_reversi:
|
||||
total: "Всього"
|
||||
_customEmojisManager:
|
||||
_gridCommon:
|
||||
alertEmojisRegisterFailedTitle: "Помилка"
|
||||
_remoteLookupErrors:
|
||||
_noSuchObject:
|
||||
title: "Не знайдено"
|
||||
|
||||
@@ -1004,9 +1004,6 @@ _play:
|
||||
_pages:
|
||||
newPage: "Yangi Sahifa yaratish"
|
||||
editPage: "Ushbu Sahifani tahrirlash"
|
||||
created: "Sahifa muvaffaqiyatli yaratildi"
|
||||
updated: "Sahifa muvaffaqiyatli tahrirlandi"
|
||||
deleted: "Sahifa muvaffaqiyatli o'chirildi"
|
||||
pageSetting: "Sahifa sozlamalari"
|
||||
nameAlreadyExists: "Ko'rsatilgan Sahifa URL'i allaqachon mavjud"
|
||||
invalidNameTitle: "Ko'rsatilgan Sahifa URL'i yaroqsiz"
|
||||
@@ -1094,9 +1091,6 @@ _moderationLogTypes:
|
||||
resetPassword: "Parolni tiklash"
|
||||
_reversi:
|
||||
total: "Jami"
|
||||
_customEmojisManager:
|
||||
_gridCommon:
|
||||
alertEmojisRegisterFailedTitle: "Xato"
|
||||
_remoteLookupErrors:
|
||||
_noSuchObject:
|
||||
title: "Topilmadi"
|
||||
|
||||
@@ -1802,9 +1802,6 @@ _pages:
|
||||
newPage: "Tạo Trang mới"
|
||||
editPage: "Sửa Trang này"
|
||||
readPage: "Xem mã nguồn Trang này"
|
||||
created: "Trang đã được tạo thành công"
|
||||
updated: "Trang đã được cập nhật thành công"
|
||||
deleted: "Trang đã được xóa thành công"
|
||||
pageSetting: "Cài đặt trang"
|
||||
nameAlreadyExists: "URL Trang đã tồn tại"
|
||||
invalidNameTitle: "URL Trang không hợp lệ"
|
||||
@@ -1930,9 +1927,6 @@ _moderationLogTypes:
|
||||
createInvitation: "Tạo lời mời"
|
||||
_reversi:
|
||||
total: "Tổng cộng"
|
||||
_customEmojisManager:
|
||||
_gridCommon:
|
||||
alertEmojisRegisterFailedTitle: "Lỗi"
|
||||
_remoteLookupErrors:
|
||||
_noSuchObject:
|
||||
title: "Không tìm thấy"
|
||||
|
||||
@@ -49,7 +49,7 @@ pin: "置顶"
|
||||
unpin: "取消置顶"
|
||||
copyContent: "复制内容"
|
||||
copyLink: "复制链接"
|
||||
copyRemoteLink: "复制远程连接"
|
||||
copyRemoteLink: "复制远程链接"
|
||||
copyLinkRenote: "复制转帖链接"
|
||||
delete: "删除"
|
||||
deleteAndEdit: "删除并编辑"
|
||||
@@ -2365,9 +2365,6 @@ _pages:
|
||||
newPage: "创建页面"
|
||||
editPage: "编辑页面"
|
||||
readPage: "查看页面"
|
||||
created: "页面已创建"
|
||||
updated: "页面已更新"
|
||||
deleted: "该页面已被删除"
|
||||
pageSetting: "页面设置"
|
||||
nameAlreadyExists: "该页面 URL 已存在"
|
||||
invalidNameTitle: "无效的页面 URL"
|
||||
@@ -2745,16 +2742,17 @@ _customEmojisManager:
|
||||
deleteSelectionRanges: "删除所选范围的行"
|
||||
searchSettings: "搜索设置"
|
||||
searchSettingCaption: "设置详细的搜索条件。"
|
||||
searchLimit: "显示项目数"
|
||||
sortOrder: "排序方式"
|
||||
registrationLogs: "注册日志"
|
||||
registrationLogsCaption: "将显示更新和删除表情符号的日志。执行更新或删除操作,又或者更改或重新加载页面时会消失。"
|
||||
alertEmojisRegisterFailedTitle: "错误"
|
||||
alertEmojisRegisterFailedDescription: "更新或删除表情符号失败。详情请确认注册日志。"
|
||||
_logs:
|
||||
showSuccessLogSwitch: "显示成功日志"
|
||||
failureLogNothing: "没有失败日志。"
|
||||
logNothing: "没有日志"
|
||||
_remote:
|
||||
selectionRowDetail: "所选行的详细信息"
|
||||
importSelectionRows: "导入所选行"
|
||||
importSelectionRangesRows: "导入所选范围的行"
|
||||
importEmojisButton: "导入已选择的表情符号"
|
||||
@@ -2769,10 +2767,12 @@ _customEmojisManager:
|
||||
markAsDeleteTargetRanges: "将所选范围的行标记为删除对象"
|
||||
alertUpdateEmojisNothingDescription: "没有已更改的表情符号。"
|
||||
alertDeleteEmojisNothingDescription: "没有被标记为删除对象的表情符号。"
|
||||
confirmUpdateEmojisTitle: "确定"
|
||||
confirmMovePage: "要离开此页吗?"
|
||||
confirmChangeView: "要更改显示吗?"
|
||||
confirmUpdateEmojisDescription: "要更新 {count} 个表情符号吗?"
|
||||
confirmDeleteEmojisTitle: "确定"
|
||||
confirmDeleteEmojisDescription: "要删除已选择的 {count} 个表情符号吗?"
|
||||
confirmResetDescription: "至今为止所做的所有修改都将被重置。"
|
||||
confirmMovePageDesciption: "此页面上的表情符号已更改。\n若不保存就离开此页,此页面上所有的更改都将丢失。"
|
||||
dialogSelectRoleTitle: "按角色搜索表情符号"
|
||||
_register:
|
||||
uploadSettingTitle: "上传设置"
|
||||
@@ -2783,11 +2783,8 @@ _customEmojisManager:
|
||||
emojiInputAreaList1: "在此区域内拖放图像文件或者目录"
|
||||
emojiInputAreaList2: "单击此链接以从电脑中选择"
|
||||
emojiInputAreaList3: "单击此链接以从网盘中选择"
|
||||
confirmRegisterEmojisTitle: "确定"
|
||||
confirmRegisterEmojisDescription: "要将列表内显示的表情符号替换为新的自定义表情符号吗?(为降低服务器负载,一次操作最多只能注册 {count} 个表情符号)"
|
||||
confirmClearEmojisTitle: "确定"
|
||||
confirmClearEmojisDescription: "要放弃编辑并将列表内表示的表情符号清空吗?"
|
||||
confirmUploadEmojisTitle: "确定"
|
||||
confirmUploadEmojisDescription: "要将拖放的 {count} 个文件上传到网盘上吗?"
|
||||
_embedCodeGen:
|
||||
title: "自定义嵌入代码"
|
||||
|
||||
@@ -2365,9 +2365,6 @@ _pages:
|
||||
newPage: "建立頁面"
|
||||
editPage: "編輯頁面"
|
||||
readPage: "正在檢視原始碼"
|
||||
created: "頁面已建立"
|
||||
updated: "頁面已更新"
|
||||
deleted: "頁面已被刪除"
|
||||
pageSetting: "頁面設定"
|
||||
nameAlreadyExists: "該頁面 URL 已存在"
|
||||
invalidNameTitle: "無效的頁面 URL"
|
||||
@@ -2745,16 +2742,17 @@ _customEmojisManager:
|
||||
deleteSelectionRanges: "刪除選取範圍的行"
|
||||
searchSettings: "搜尋設定"
|
||||
searchSettingCaption: "詳細設定搜尋條件。"
|
||||
searchLimit: "顯示的數量"
|
||||
sortOrder: "排序"
|
||||
registrationLogs: "登錄日誌"
|
||||
registrationLogsCaption: "會顯示更新或刪除表情符號時的日誌。進行更新或刪除操作,或切換頁面、重新載入後,日誌將會消失。"
|
||||
alertEmojisRegisterFailedTitle: "錯誤"
|
||||
alertEmojisRegisterFailedDescription: "更新或刪除表情符號失敗。詳情請查看登錄日誌。"
|
||||
_logs:
|
||||
showSuccessLogSwitch: "顯示成功日誌"
|
||||
failureLogNothing: "沒有失敗的日誌。"
|
||||
logNothing: "沒有日誌。"
|
||||
_remote:
|
||||
selectionRowDetail: "選取行的詳細資訊"
|
||||
importSelectionRows: "匯入選取的行"
|
||||
importSelectionRangesRows: "匯入選取範圍的行"
|
||||
importEmojisButton: "匯入勾選的表情符號"
|
||||
@@ -2769,10 +2767,12 @@ _customEmojisManager:
|
||||
markAsDeleteTargetRanges: "將選取範圍的行設為刪除對象\n"
|
||||
alertUpdateEmojisNothingDescription: "沒有選取需要變更的表情符號。"
|
||||
alertDeleteEmojisNothingDescription: "沒有選取需要刪除的表情符號。"
|
||||
confirmUpdateEmojisTitle: "確定"
|
||||
confirmMovePage: "要移動到其他頁面嗎?"
|
||||
confirmChangeView: "要更改顯示方式嗎?"
|
||||
confirmUpdateEmojisDescription: "將更新{count}個表情符號。是否執行此操作?"
|
||||
confirmDeleteEmojisTitle: "確定"
|
||||
confirmDeleteEmojisDescription: "將刪除勾選的{count}個表情符號。是否執行此操作?"
|
||||
confirmResetDescription: "目前所做的所有變更都會重設。"
|
||||
confirmMovePageDesciption: "此頁面的表情符號已被更改。 \n若未儲存就直接離開此頁面,則在此頁面進行的所有更改將會被捨棄。"
|
||||
dialogSelectRoleTitle: "根據表情符號設定的角色進行搜尋"
|
||||
_register:
|
||||
uploadSettingTitle: "上傳設定"
|
||||
@@ -2783,11 +2783,8 @@ _customEmojisManager:
|
||||
emojiInputAreaList1: "將圖片檔案或目錄拖放到此框中"
|
||||
emojiInputAreaList2: "點擊此連結從電腦中選擇"
|
||||
emojiInputAreaList3: "點擊此連結從雲端硬碟中選擇"
|
||||
confirmRegisterEmojisTitle: "確定"
|
||||
confirmRegisterEmojisDescription: "將列表中顯示的表情符號登錄為新的自定表情符號。是否確定?(為避免過高負荷,每次操作最多可登錄{count}個表情符號)"
|
||||
confirmClearEmojisTitle: "確定"
|
||||
confirmClearEmojisDescription: "放棄編輯內容並清除列表中顯示的表情符號。是否確定?"
|
||||
confirmUploadEmojisTitle: "確定"
|
||||
confirmUploadEmojisDescription: "將拖放的{count}個檔案上傳到雲端硬碟。是否執行此操作?"
|
||||
_embedCodeGen:
|
||||
title: "自訂嵌入程式碼"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "misskey",
|
||||
"version": "2025.1.0-beta.3",
|
||||
"version": "2025.2.0-beta.1",
|
||||
"codename": "nasubi",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
|
||||
@@ -92,7 +92,7 @@ export async function masterMain() {
|
||||
}
|
||||
|
||||
bootLogger.info(
|
||||
`mode: [disableClustering: ${envOption.disableClustering}, onlyServer: ${envOption.onlyServer}, onlyQueue: ${envOption.onlyQueue}]`
|
||||
`mode: [disableClustering: ${envOption.disableClustering}, onlyServer: ${envOption.onlyServer}, onlyQueue: ${envOption.onlyQueue}]`,
|
||||
);
|
||||
|
||||
if (!envOption.disableClustering) {
|
||||
@@ -107,7 +107,6 @@ export async function masterMain() {
|
||||
await jobQueue();
|
||||
} else {
|
||||
await server();
|
||||
await jobQueue();
|
||||
}
|
||||
|
||||
await spawnWorkers(config.clusterLimit);
|
||||
|
||||
@@ -118,3 +118,5 @@ export class MiPage {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export const pageNameSchema = { type: 'string', pattern: /^[^\s:\/?#\[\]@!$&'()*+,;=\\%\x00-\x20]{1,256}$/.source } as const;
|
||||
|
||||
@@ -7,7 +7,7 @@ import ms from 'ms';
|
||||
import { Inject, Injectable } from '@nestjs/common';
|
||||
import type { DriveFilesRepository, PagesRepository } from '@/models/_.js';
|
||||
import { IdService } from '@/core/IdService.js';
|
||||
import { MiPage } from '@/models/Page.js';
|
||||
import { MiPage, pageNameSchema } from '@/models/Page.js';
|
||||
import { Endpoint } from '@/server/api/endpoint-base.js';
|
||||
import { PageEntityService } from '@/core/entities/PageEntityService.js';
|
||||
import { DI } from '@/di-symbols.js';
|
||||
@@ -51,7 +51,7 @@ export const paramDef = {
|
||||
type: 'object',
|
||||
properties: {
|
||||
title: { type: 'string' },
|
||||
name: { type: 'string', minLength: 1 },
|
||||
name: { ...pageNameSchema, minLength: 1 },
|
||||
summary: { type: 'string', nullable: true },
|
||||
content: { type: 'array', items: {
|
||||
type: 'object', additionalProperties: true,
|
||||
|
||||
@@ -10,6 +10,7 @@ import type { PagesRepository, DriveFilesRepository } from '@/models/_.js';
|
||||
import { Endpoint } from '@/server/api/endpoint-base.js';
|
||||
import { DI } from '@/di-symbols.js';
|
||||
import { ApiError } from '../../error.js';
|
||||
import { pageNameSchema } from '@/models/Page.js';
|
||||
|
||||
export const meta = {
|
||||
tags: ['pages'],
|
||||
@@ -31,13 +32,11 @@ export const meta = {
|
||||
code: 'NO_SUCH_PAGE',
|
||||
id: '21149b9e-3616-4778-9592-c4ce89f5a864',
|
||||
},
|
||||
|
||||
accessDenied: {
|
||||
message: 'Access denied.',
|
||||
code: 'ACCESS_DENIED',
|
||||
id: '3c15cd52-3b4b-4274-967d-6456fc4f792b',
|
||||
},
|
||||
|
||||
noSuchFile: {
|
||||
message: 'No such file.',
|
||||
code: 'NO_SUCH_FILE',
|
||||
@@ -56,7 +55,7 @@ export const paramDef = {
|
||||
properties: {
|
||||
pageId: { type: 'string', format: 'misskey:id' },
|
||||
title: { type: 'string' },
|
||||
name: { type: 'string', minLength: 1 },
|
||||
name: { ...pageNameSchema, minLength: 1 },
|
||||
summary: { type: 'string', nullable: true },
|
||||
content: { type: 'array', items: {
|
||||
type: 'object', additionalProperties: true,
|
||||
|
||||
@@ -817,6 +817,7 @@ export class ClientServerService {
|
||||
fastify.get<{ Params: { announcementId: string; } }>('/announcements/:announcementId', async (request, reply) => {
|
||||
const announcement = await this.announcementsRepository.findOneBy({
|
||||
id: request.params.announcementId,
|
||||
userId: IsNull(),
|
||||
});
|
||||
|
||||
if (announcement) {
|
||||
|
||||
@@ -17,6 +17,7 @@ services:
|
||||
- ./.config/docker.env
|
||||
environment:
|
||||
- NODE_ENV=production
|
||||
- COREPACK_DEFAULT_TO_LATEST=0
|
||||
volumes:
|
||||
- type: bind
|
||||
source: ../../../built
|
||||
|
||||
@@ -25,6 +25,7 @@ services:
|
||||
environment:
|
||||
- NODE_ENV=development
|
||||
- NODE_EXTRA_CA_CERTS=/usr/local/share/ca-certificates/rootCA.crt
|
||||
- COREPACK_DEFAULT_TO_LATEST=0
|
||||
volumes:
|
||||
- type: bind
|
||||
source: ../package.json
|
||||
@@ -85,6 +86,8 @@ services:
|
||||
depends_on:
|
||||
redis.test:
|
||||
condition: service_healthy
|
||||
environment:
|
||||
- COREPACK_DEFAULT_TO_LATEST=0
|
||||
volumes:
|
||||
- type: bind
|
||||
source: ../package.json
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
"@rollup/plugin-json": "6.1.0",
|
||||
"@rollup/plugin-replace": "5.0.7",
|
||||
"@rollup/pluginutils": "5.1.3",
|
||||
"@tabler/icons-webfont": "3.3.0",
|
||||
"@tabler/icons-webfont": "https://github.com/misskey-dev/tabler-icons/archive/refs/tags/3.29.0-mi.1913+5921534bc.tar.gz",
|
||||
"@twemoji/parser": "15.1.1",
|
||||
"@vitejs/plugin-vue": "5.2.0",
|
||||
"@vue/compiler-sfc": "3.5.12",
|
||||
|
||||
@@ -23,10 +23,14 @@ const options = {
|
||||
sourcemap: 'linked',
|
||||
};
|
||||
|
||||
// js-built配下をすべて削除する
|
||||
fs.rmSync('./js-built', { recursive: true, force: true });
|
||||
const args = process.argv.slice(2).map(arg => arg.toLowerCase());
|
||||
|
||||
if (process.argv.map(arg => arg.toLowerCase()).includes('--watch')) {
|
||||
// js-built配下をすべて削除する
|
||||
if (!args.includes('--no-clean')) {
|
||||
fs.rmSync('./js-built', { recursive: true, force: true });
|
||||
}
|
||||
|
||||
if (args.includes('--watch')) {
|
||||
await watchSrc();
|
||||
} else {
|
||||
await buildSrc();
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
"@rollup/plugin-replace": "5.0.7",
|
||||
"@rollup/pluginutils": "5.1.3",
|
||||
"@syuilo/aiscript": "0.19.0",
|
||||
"@tabler/icons-webfont": "3.3.0",
|
||||
"@tabler/icons-webfont": "https://github.com/misskey-dev/tabler-icons/archive/refs/tags/3.29.0-mi.1913+5921534bc.tar.gz",
|
||||
"@twemoji/parser": "15.1.1",
|
||||
"@vitejs/plugin-vue": "5.2.0",
|
||||
"@vue/compiler-sfc": "3.5.12",
|
||||
|
||||
@@ -41,6 +41,12 @@ export async function signout() {
|
||||
if (!$i) return;
|
||||
|
||||
waiting();
|
||||
document.cookie.split(';').forEach((cookie) => {
|
||||
const cookieName = cookie.split('=')[0].trim();
|
||||
if (cookieName === 'token') {
|
||||
document.cookie = `${cookieName}=; max-age=0; path=/`;
|
||||
}
|
||||
});
|
||||
miLocalStorage.removeItem('account');
|
||||
await removeAccount($i.id);
|
||||
const accounts = await getAccounts();
|
||||
@@ -101,6 +107,9 @@ export async function removeAccount(idOrToken: Account['id']) {
|
||||
}
|
||||
|
||||
function fetchAccount(token: string, id?: string, forceShowDialog?: boolean): Promise<Account> {
|
||||
document.cookie = "token=; path=/; max-age=0";
|
||||
document.cookie = `token=${token}; path=/queue; max-age=86400; SameSite=Strict; Secure`; // bull dashboardの認証とかで使う
|
||||
|
||||
return new Promise((done, fail) => {
|
||||
window.fetch(`${apiUrl}/i`, {
|
||||
method: 'POST',
|
||||
@@ -213,7 +222,6 @@ export async function login(token: Account['token'], redirect?: string) {
|
||||
throw reason;
|
||||
});
|
||||
miLocalStorage.setItem('account', JSON.stringify(me));
|
||||
document.cookie = `token=${token}; path=/; max-age=31536000`; // bull dashboardの認証とかで使う
|
||||
await addAccount(me.id, token);
|
||||
|
||||
if (redirect) {
|
||||
|
||||
@@ -57,7 +57,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
<script lang="ts" setup>
|
||||
import * as Misskey from 'misskey-js';
|
||||
import { defineProps, shallowRef } from 'vue';
|
||||
import { shallowRef } from 'vue';
|
||||
import MkLink from '@/components/MkLink.vue';
|
||||
import { i18n } from '@/i18n.js';
|
||||
import MkModalWindow from '@/components/MkModalWindow.vue';
|
||||
|
||||
@@ -18,7 +18,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
:alt="file.name"
|
||||
:title="file.name"
|
||||
:cover="fit !== 'contain'"
|
||||
:forceBlurHash="forceBlurhash"
|
||||
:forceBlurhash="forceBlurhash"
|
||||
/>
|
||||
<i v-else-if="is === 'image'" class="ti ti-photo" :class="$style.icon"></i>
|
||||
<i v-else-if="is === 'video'" class="ti ti-video" :class="$style.icon"></i>
|
||||
|
||||
@@ -304,16 +304,16 @@ function checkMute(noteToCheck: Misskey.entities.Note, mutedWords: Array<string
|
||||
function checkMute(noteToCheck: Misskey.entities.Note, mutedWords: Array<string | string[]> | undefined | null, checkOnly: false): Array<string | string[]> | false | 'sensitiveMute';
|
||||
*/
|
||||
function checkMute(noteToCheck: Misskey.entities.Note, mutedWords: Array<string | string[]> | undefined | null, checkOnly = false): Array<string | string[]> | false | 'sensitiveMute' {
|
||||
if (mutedWords == null) return false;
|
||||
if (mutedWords != null) {
|
||||
const result = checkWordMute(noteToCheck, $i, mutedWords);
|
||||
if (Array.isArray(result)) return result;
|
||||
|
||||
const result = checkWordMute(noteToCheck, $i, mutedWords);
|
||||
if (Array.isArray(result)) return result;
|
||||
const replyResult = noteToCheck.reply && checkWordMute(noteToCheck.reply, $i, mutedWords);
|
||||
if (Array.isArray(replyResult)) return replyResult;
|
||||
|
||||
const replyResult = noteToCheck.reply && checkWordMute(noteToCheck.reply, $i, mutedWords);
|
||||
if (Array.isArray(replyResult)) return replyResult;
|
||||
|
||||
const renoteResult = noteToCheck.renote && checkWordMute(noteToCheck.renote, $i, mutedWords);
|
||||
if (Array.isArray(renoteResult)) return renoteResult;
|
||||
const renoteResult = noteToCheck.renote && checkWordMute(noteToCheck.renote, $i, mutedWords);
|
||||
if (Array.isArray(renoteResult)) return renoteResult;
|
||||
}
|
||||
|
||||
if (checkOnly) return false;
|
||||
|
||||
|
||||
@@ -6,7 +6,12 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
<template>
|
||||
<template v-for="file in note.files">
|
||||
<div
|
||||
v-if="(defaultStore.state.nsfw === 'force' || file.isSensitive) && defaultStore.state.nsfw !== 'ignore' && !showingFiles.has(file.id)"
|
||||
v-if="(((
|
||||
(defaultStore.state.nsfw === 'force' || file.isSensitive) &&
|
||||
defaultStore.state.nsfw !== 'ignore'
|
||||
) || (defaultStore.state.dataSaver.media && file.type.startsWith('image/'))) &&
|
||||
!showingFiles.has(file.id)
|
||||
)"
|
||||
:class="[$style.filePreview, { [$style.square]: square }]"
|
||||
@click="showingFiles.add(file.id)"
|
||||
>
|
||||
@@ -20,7 +25,8 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
/>
|
||||
<div :class="$style.sensitive">
|
||||
<div>
|
||||
<div><i class="ti ti-eye-exclamation"></i> {{ i18n.ts.sensitive }}</div>
|
||||
<div v-if="file.isSensitive"><i class="ti ti-eye-exclamation"></i> {{ i18n.ts.sensitive }}{{ defaultStore.state.dataSaver.media && file.size ? ` (${bytes(file.size)})` : '' }}</div>
|
||||
<div v-else><i class="ti ti-photo"></i> {{ defaultStore.state.dataSaver.media && file.size ? bytes(file.size) : i18n.ts.image }}</div>
|
||||
<div>{{ i18n.ts.clickToShow }}</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -43,6 +49,7 @@ import { notePage } from '@/filters/note.js';
|
||||
import { i18n } from '@/i18n.js';
|
||||
import * as Misskey from 'misskey-js';
|
||||
import { defaultStore } from '@/store.js';
|
||||
import bytes from '@/filters/bytes.js';
|
||||
|
||||
import MkDriveFileThumbnail from '@/components/MkDriveFileThumbnail.vue';
|
||||
|
||||
@@ -91,6 +98,9 @@ const showingFiles = ref<Set<string>>(new Set());
|
||||
display: grid;
|
||||
place-items: center;
|
||||
font-size: 0.8em;
|
||||
text-align: center;
|
||||
padding: 8px;
|
||||
box-sizing: border-box;
|
||||
color: #fff;
|
||||
background: rgba(0, 0, 0, 0.5);
|
||||
backdrop-filter: blur(5px);
|
||||
|
||||
@@ -43,7 +43,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { computed, defineProps, ref, toRefs } from 'vue';
|
||||
import { computed, ref, toRefs } from 'vue';
|
||||
import * as Misskey from 'misskey-js';
|
||||
import { i18n } from '@/i18n.js';
|
||||
import MkButton from '@/components/MkButton.vue';
|
||||
|
||||
@@ -140,6 +140,7 @@ function onPasskeyDone(credential: AuthenticationPublicKeyCredential): void {
|
||||
return;
|
||||
}
|
||||
emit('login', res.signinResponse);
|
||||
onLoginSucceeded(res.signinResponse);
|
||||
}).catch(onSigninApiError);
|
||||
} else if (userInfo.value != null) {
|
||||
tryLogin({
|
||||
|
||||
@@ -39,32 +39,18 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
-->
|
||||
<!-- MFMで上位レイヤーに表示されるため、リンクをクリックできるようにstyleにpointer-events: none;を付与。 -->
|
||||
<svg v-for="particle in particles" :key="particle.id" :width="width" :height="height" :viewBox="`0 0 ${width} ${height}`" xmlns="http://www.w3.org/2000/svg" style="position: absolute; top: -32px; left: -32px; pointer-events: none;">
|
||||
<!-- SVGのanimateTransformを使用するとChromeで描画できなくなるためCSSアニメーションを使用している (Issue 14155) -->
|
||||
<path
|
||||
style="transform-origin: center; transform-box: fill-box;"
|
||||
:transform="`translate(${particle.x} ${particle.y})`"
|
||||
:style="{
|
||||
'--translateX': particle.x + 'px',
|
||||
'--translateY': particle.y + 'px',
|
||||
'--duration': particle.dur + 'ms',
|
||||
'--size': particle.size,
|
||||
}"
|
||||
:class="$style.particle"
|
||||
:fill="particle.color"
|
||||
d="M29.427,2.011C29.721,0.83 30.782,0 32,0C33.218,0 34.279,0.83 34.573,2.011L39.455,21.646C39.629,22.347 39.991,22.987 40.502,23.498C41.013,24.009 41.653,24.371 42.354,24.545L61.989,29.427C63.17,29.721 64,30.782 64,32C64,33.218 63.17,34.279 61.989,34.573L42.354,39.455C41.653,39.629 41.013,39.991 40.502,40.502C39.991,41.013 39.629,41.653 39.455,42.354L34.573,61.989C34.279,63.17 33.218,64 32,64C30.782,64 29.721,63.17 29.427,61.989L24.545,42.354C24.371,41.653 24.009,41.013 23.498,40.502C22.987,39.991 22.347,39.629 21.646,39.455L2.011,34.573C0.83,34.279 0,33.218 0,32C0,30.782 0.83,29.721 2.011,29.427L21.646,24.545C22.347,24.371 22.987,24.009 23.498,23.498C24.009,22.987 24.371,22.347 24.545,21.646L29.427,2.011Z"
|
||||
>
|
||||
<animateTransform
|
||||
attributeName="transform"
|
||||
attributeType="XML"
|
||||
type="rotate"
|
||||
from="0 0 0"
|
||||
to="360 0 0"
|
||||
:dur="`${particle.dur}ms`"
|
||||
repeatCount="1"
|
||||
additive="sum"
|
||||
/>
|
||||
<animateTransform
|
||||
attributeName="transform"
|
||||
attributeType="XML"
|
||||
type="scale"
|
||||
:values="`0; ${particle.size}; 0`"
|
||||
:dur="`${particle.dur}ms`"
|
||||
repeatCount="1"
|
||||
additive="sum"
|
||||
/>
|
||||
</path>
|
||||
></path>
|
||||
</svg>
|
||||
</span>
|
||||
</template>
|
||||
@@ -130,4 +116,25 @@ onUnmounted(() => {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.particle {
|
||||
transform-origin: center;
|
||||
transform-box: fill-box;
|
||||
translate: var(--translateX) var(--translateY);
|
||||
animation: particleAnimation var(--duration) linear infinite;
|
||||
}
|
||||
|
||||
@keyframes particleAnimation {
|
||||
0% {
|
||||
rotate: 0deg;
|
||||
scale: 0;
|
||||
}
|
||||
50% {
|
||||
scale: var(--size);
|
||||
}
|
||||
100% {
|
||||
rotate: 360deg;
|
||||
scale: 0;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -582,7 +582,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
<MkSwitch v-model="role.policies.avatarDecorationLimit.useDefault" :readonly="readonly">
|
||||
<template #label>{{ i18n.ts._role.useBaseValue }}</template>
|
||||
</MkSwitch>
|
||||
<MkInput v-model="role.policies.avatarDecorationLimit.value" type="number" :min="0">
|
||||
<MkInput v-model="role.policies.avatarDecorationLimit.value" type="number" :min="0" :max="16" @update:modelValue="updateAvatarDecorationLimit">
|
||||
<template #label>{{ i18n.ts._role._options.avatarDecorationLimit }}</template>
|
||||
</MkInput>
|
||||
<MkRange v-model="role.policies.avatarDecorationLimit.priority" :min="0" :max="2" :step="1" easing :textConverter="(v) => v === 0 ? i18n.ts._role._priority.low : v === 1 ? i18n.ts._role._priority.middle : v === 2 ? i18n.ts._role._priority.high : ''">
|
||||
@@ -698,6 +698,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
<script lang="ts" setup>
|
||||
import { watch, ref, computed } from 'vue';
|
||||
import { throttle } from 'throttle-debounce';
|
||||
import { ROLE_POLICIES } from '@@/js/const.js';
|
||||
import RolesEditorFormula from './RolesEditorFormula.vue';
|
||||
import MkInput from '@/components/MkInput.vue';
|
||||
import MkColorInput from '@/components/MkColorInput.vue';
|
||||
@@ -708,7 +709,6 @@ import MkSwitch from '@/components/MkSwitch.vue';
|
||||
import MkRange from '@/components/MkRange.vue';
|
||||
import FormSlot from '@/components/form/slot.vue';
|
||||
import { i18n } from '@/i18n.js';
|
||||
import { ROLE_POLICIES } from '@@/js/const.js';
|
||||
import { instance } from '@/instance.js';
|
||||
import { deepClone } from '@/scripts/clone.js';
|
||||
|
||||
@@ -734,6 +734,12 @@ for (const ROLE_POLICY of ROLE_POLICIES) {
|
||||
}
|
||||
}
|
||||
|
||||
function updateAvatarDecorationLimit(value: string | number) {
|
||||
const numValue = Number(value);
|
||||
const limited = Math.min(16, Math.max(0, numValue));
|
||||
role.value.policies.avatarDecorationLimit.value = limited;
|
||||
}
|
||||
|
||||
const rolePermission = computed({
|
||||
get: () => role.value.isAdministrator ? 'administrator' : role.value.isModerator ? 'moderator' : 'normal',
|
||||
set: (val) => {
|
||||
|
||||
@@ -213,7 +213,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||
<MkFolder v-if="matchQuery([i18n.ts._role._options.avatarDecorationLimit, 'avatarDecorationLimit'])">
|
||||
<template #label>{{ i18n.ts._role._options.avatarDecorationLimit }}</template>
|
||||
<template #suffix>{{ policies.avatarDecorationLimit }}</template>
|
||||
<MkInput v-model="policies.avatarDecorationLimit" type="number" :min="0">
|
||||
<MkInput v-model="avatarDecorationLimit" type="number" :min="0" :max="16" @update:modelValue="updateAvatarDecorationLimit">
|
||||
</MkInput>
|
||||
</MkFolder>
|
||||
|
||||
@@ -307,6 +307,17 @@ for (const ROLE_POLICY of ROLE_POLICIES) {
|
||||
policies[ROLE_POLICY] = instance.policies[ROLE_POLICY];
|
||||
}
|
||||
|
||||
const avatarDecorationLimit = computed({
|
||||
get: () => Math.min(16, Math.max(0, policies.avatarDecorationLimit)),
|
||||
set: (value) => {
|
||||
policies.avatarDecorationLimit = Math.min(Number(value), 16);
|
||||
},
|
||||
});
|
||||
|
||||
function updateAvatarDecorationLimit(value: string | number) {
|
||||
avatarDecorationLimit.value = Number(value);
|
||||
}
|
||||
|
||||
function matchQuery(keywords: string[]): boolean {
|
||||
if (baseRoleQ.value.trim().length === 0) return true;
|
||||
return keywords.some(keyword => keyword.toLowerCase().includes(baseRoleQ.value.toLowerCase()));
|
||||
|
||||
@@ -96,7 +96,7 @@ const summary = ref<string | null>(null);
|
||||
const name = ref(Date.now().toString());
|
||||
const eyeCatchingImage = ref<Misskey.entities.DriveFile | null>(null);
|
||||
const eyeCatchingImageId = ref<string | null>(null);
|
||||
const font = ref('sans-serif');
|
||||
const font = ref<'sans-serif' | 'serif'>('sans-serif');
|
||||
const content = ref<Misskey.entities.Page['content']>([]);
|
||||
const alignCenter = ref(false);
|
||||
const hideTitleWhenPinned = ref(false);
|
||||
@@ -113,7 +113,7 @@ watch(eyeCatchingImageId, async () => {
|
||||
}
|
||||
});
|
||||
|
||||
function getSaveOptions() {
|
||||
function getSaveOptions(): Misskey.entities.PagesCreateRequest {
|
||||
return {
|
||||
title: title.value.trim(),
|
||||
name: name.value.trim(),
|
||||
@@ -128,80 +128,69 @@ function getSaveOptions() {
|
||||
};
|
||||
}
|
||||
|
||||
function save() {
|
||||
async function save() {
|
||||
const options = getSaveOptions();
|
||||
|
||||
const onError = err => {
|
||||
if (err.id === '3d81ceae-475f-4600-b2a8-2bc116157532') {
|
||||
if (err.info.param === 'name') {
|
||||
os.alert({
|
||||
type: 'error',
|
||||
title: i18n.ts._pages.invalidNameTitle,
|
||||
text: i18n.ts._pages.invalidNameText,
|
||||
});
|
||||
}
|
||||
} else if (err.code === 'NAME_ALREADY_EXISTS') {
|
||||
os.alert({
|
||||
type: 'error',
|
||||
text: i18n.ts._pages.nameAlreadyExists,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
if (pageId.value) {
|
||||
options.pageId = pageId.value;
|
||||
misskeyApi('pages/update', options)
|
||||
.then(page => {
|
||||
currentName.value = name.value.trim();
|
||||
os.alert({
|
||||
type: 'success',
|
||||
text: i18n.ts._pages.updated,
|
||||
});
|
||||
}).catch(onError);
|
||||
const updateOptions: Misskey.entities.PagesUpdateRequest = {
|
||||
pageId: pageId.value,
|
||||
...options,
|
||||
};
|
||||
|
||||
await os.apiWithDialog('pages/update', updateOptions, undefined, {
|
||||
'2298a392-d4a1-44c5-9ebb-ac1aeaa5a9ab': {
|
||||
title: i18n.ts.somethingHappened,
|
||||
text: i18n.ts._pages.nameAlreadyExists,
|
||||
},
|
||||
});
|
||||
|
||||
currentName.value = name.value.trim();
|
||||
} else {
|
||||
misskeyApi('pages/create', options)
|
||||
.then(created => {
|
||||
pageId.value = created.id;
|
||||
currentName.value = name.value.trim();
|
||||
os.alert({
|
||||
type: 'success',
|
||||
text: i18n.ts._pages.created,
|
||||
});
|
||||
mainRouter.push(`/pages/edit/${pageId.value}`);
|
||||
}).catch(onError);
|
||||
const created = await os.apiWithDialog('pages/create', options, undefined, {
|
||||
'4650348e-301c-499a-83c9-6aa988c66bc1': {
|
||||
title: i18n.ts.somethingHappened,
|
||||
text: i18n.ts._pages.nameAlreadyExists,
|
||||
},
|
||||
});
|
||||
|
||||
pageId.value = created.id;
|
||||
currentName.value = name.value.trim();
|
||||
mainRouter.replace(`/pages/edit/${pageId.value}`);
|
||||
}
|
||||
}
|
||||
|
||||
function del() {
|
||||
os.confirm({
|
||||
async function del() {
|
||||
if (!pageId.value) return;
|
||||
|
||||
const { canceled } = await os.confirm({
|
||||
type: 'warning',
|
||||
text: i18n.tsx.removeAreYouSure({ x: title.value.trim() }),
|
||||
}).then(({ canceled }) => {
|
||||
if (canceled) return;
|
||||
misskeyApi('pages/delete', {
|
||||
pageId: pageId.value,
|
||||
}).then(() => {
|
||||
os.alert({
|
||||
type: 'success',
|
||||
text: i18n.ts._pages.deleted,
|
||||
});
|
||||
mainRouter.push('/pages');
|
||||
});
|
||||
});
|
||||
|
||||
if (canceled) return;
|
||||
|
||||
await os.apiWithDialog('pages/delete', {
|
||||
pageId: pageId.value,
|
||||
});
|
||||
|
||||
mainRouter.replace('/pages');
|
||||
}
|
||||
|
||||
function duplicate() {
|
||||
async function duplicate() {
|
||||
title.value = title.value + ' - copy';
|
||||
name.value = name.value + '-copy';
|
||||
misskeyApi('pages/create', getSaveOptions()).then(created => {
|
||||
pageId.value = created.id;
|
||||
currentName.value = name.value.trim();
|
||||
os.alert({
|
||||
type: 'success',
|
||||
text: i18n.ts._pages.created,
|
||||
});
|
||||
mainRouter.push(`/pages/edit/${pageId.value}`);
|
||||
|
||||
const created = await os.apiWithDialog('pages/create', getSaveOptions(), undefined, {
|
||||
'4650348e-301c-499a-83c9-6aa988c66bc1': {
|
||||
title: i18n.ts.somethingHappened,
|
||||
text: i18n.ts._pages.nameAlreadyExists,
|
||||
},
|
||||
});
|
||||
|
||||
pageId.value = created.id;
|
||||
currentName.value = name.value.trim();
|
||||
|
||||
mainRouter.push(`/pages/edit/${pageId.value}`);
|
||||
}
|
||||
|
||||
async function add() {
|
||||
@@ -216,7 +205,7 @@ async function add() {
|
||||
content.value.push({ id, type });
|
||||
}
|
||||
|
||||
function setEyeCatchingImage(img) {
|
||||
function setEyeCatchingImage(img: Event) {
|
||||
selectFile(img.currentTarget ?? img.target, null).then(file => {
|
||||
eyeCatchingImageId.value = file.id;
|
||||
});
|
||||
|
||||
@@ -266,7 +266,7 @@ function showMenu(ev: MouseEvent) {
|
||||
if ($i && $i.id === page.value.userId) {
|
||||
menuItems.push({
|
||||
icon: 'ti ti-pencil',
|
||||
text: i18n.ts.editThisPage,
|
||||
text: i18n.ts.edit,
|
||||
action: () => router.push(`/pages/edit/${page.value.id}`),
|
||||
});
|
||||
|
||||
@@ -285,10 +285,6 @@ function showMenu(ev: MouseEvent) {
|
||||
}
|
||||
} else if ($i && $i.id !== page.value.userId) {
|
||||
menuItems.push({
|
||||
icon: 'ti ti-code',
|
||||
text: i18n.ts._pages.viewSource,
|
||||
action: () => router.push(`/@${props.username}/pages/${props.pageName}/view-source`),
|
||||
}, {
|
||||
icon: 'ti ti-exclamation-circle',
|
||||
text: i18n.ts.reportAbuse,
|
||||
action: reportAbuse,
|
||||
|
||||
@@ -17,10 +17,7 @@ export const page = (loader: AsyncComponentLoader) => defineAsyncComponent({
|
||||
});
|
||||
|
||||
const routes: RouteDef[] = [{
|
||||
path: '/@:initUser/pages/:initPageName/view-source',
|
||||
component: page(() => import('@/pages/page-editor/page-editor.vue')),
|
||||
}, {
|
||||
path: '/@:username/pages/:pageName',
|
||||
path: '/@:username/pages/:pageName(*)',
|
||||
component: page(() => import('@/pages/page.vue')),
|
||||
}, {
|
||||
path: '/@:acct/following',
|
||||
|
||||
@@ -23,10 +23,14 @@ const options = {
|
||||
sourcemap: 'linked',
|
||||
};
|
||||
|
||||
// built配下をすべて削除する
|
||||
fs.rmSync('./built', { recursive: true, force: true });
|
||||
const args = process.argv.slice(2).map(arg => arg.toLowerCase());
|
||||
|
||||
if (process.argv.map(arg => arg.toLowerCase()).includes('--watch')) {
|
||||
// built配下をすべて削除する
|
||||
if (!args.includes('--no-clean')) {
|
||||
fs.rmSync('./built', { recursive: true, force: true });
|
||||
}
|
||||
|
||||
if (args.includes('--watch')) {
|
||||
await watchSrc();
|
||||
} else {
|
||||
await buildSrc();
|
||||
|
||||
@@ -62,6 +62,8 @@
|
||||
*/
|
||||
"bundledPackages": [],
|
||||
|
||||
"newlineKind": "lf",
|
||||
|
||||
/**
|
||||
* Determines how the TypeScript compiler engine will be invoked by API Extractor.
|
||||
*/
|
||||
|
||||
@@ -24,9 +24,14 @@ const options = {
|
||||
};
|
||||
|
||||
// built配下をすべて削除する
|
||||
fs.rmSync('./built', { recursive: true, force: true });
|
||||
const args = process.argv.slice(2).map(arg => arg.toLowerCase());
|
||||
|
||||
if (process.argv.map(arg => arg.toLowerCase()).includes('--watch')) {
|
||||
// built配下をすべて削除する
|
||||
if (!args.includes('--no-clean')) {
|
||||
fs.rmSync('./built', { recursive: true, force: true });
|
||||
}
|
||||
|
||||
if (args.includes('--watch')) {
|
||||
await watchSrc();
|
||||
} else {
|
||||
await buildSrc();
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"type": "module",
|
||||
"name": "misskey-js",
|
||||
"version": "2025.1.0-beta.3",
|
||||
"version": "2025.2.0-beta.1",
|
||||
"description": "Misskey SDK for JavaScript",
|
||||
"license": "MIT",
|
||||
"main": "./built/index.js",
|
||||
|
||||
@@ -23,10 +23,14 @@ const options = {
|
||||
sourcemap: 'linked',
|
||||
};
|
||||
|
||||
// built配下をすべて削除する
|
||||
fs.rmSync('./built', { recursive: true, force: true });
|
||||
const args = process.argv.slice(2).map(arg => arg.toLowerCase());
|
||||
|
||||
if (process.argv.map(arg => arg.toLowerCase()).includes('--watch')) {
|
||||
// built配下をすべて削除する
|
||||
if (!args.includes('--no-clean')) {
|
||||
fs.rmSync('./built', { recursive: true, force: true });
|
||||
}
|
||||
|
||||
if (args.includes('--watch')) {
|
||||
await watchSrc();
|
||||
} else {
|
||||
await buildSrc();
|
||||
|
||||
66
pnpm-lock.yaml
generated
66
pnpm-lock.yaml
generated
@@ -142,7 +142,7 @@ importers:
|
||||
version: 10.4.7(@nestjs/common@10.4.7(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1)
|
||||
'@nestjs/testing':
|
||||
specifier: 10.4.7
|
||||
version: 10.4.7(@nestjs/common@10.4.7(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7(@nestjs/common@10.4.7(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7))
|
||||
version: 10.4.7(@nestjs/common@10.4.7(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)(@nestjs/platform-express@10.4.7)
|
||||
'@peertube/http-signature':
|
||||
specifier: 1.7.0
|
||||
version: 1.7.0
|
||||
@@ -710,8 +710,8 @@ importers:
|
||||
specifier: 0.19.0
|
||||
version: 0.19.0
|
||||
'@tabler/icons-webfont':
|
||||
specifier: 3.3.0
|
||||
version: 3.3.0
|
||||
specifier: https://github.com/misskey-dev/tabler-icons/archive/refs/tags/3.29.0-mi.1913+5921534bc.tar.gz
|
||||
version: https://github.com/misskey-dev/tabler-icons/archive/refs/tags/3.29.0-mi.1913+5921534bc.tar.gz
|
||||
'@twemoji/parser':
|
||||
specifier: 15.1.1
|
||||
version: 15.1.1
|
||||
@@ -1056,8 +1056,8 @@ importers:
|
||||
specifier: 5.1.3
|
||||
version: 5.1.3(rollup@4.26.0)
|
||||
'@tabler/icons-webfont':
|
||||
specifier: 3.3.0
|
||||
version: 3.3.0
|
||||
specifier: https://github.com/misskey-dev/tabler-icons/archive/refs/tags/3.29.0-mi.1913+5921534bc.tar.gz
|
||||
version: https://github.com/misskey-dev/tabler-icons/archive/refs/tags/3.29.0-mi.1913+5921534bc.tar.gz
|
||||
'@twemoji/parser':
|
||||
specifier: 15.1.1
|
||||
version: 15.1.1
|
||||
@@ -1157,7 +1157,7 @@ importers:
|
||||
version: 7.17.0(eslint@9.14.0)(typescript@5.6.3)
|
||||
'@vitest/coverage-v8':
|
||||
specifier: 1.6.0
|
||||
version: 1.6.0(vitest@1.6.0(@types/node@22.9.0)(happy-dom@10.0.3)(jsdom@24.1.1)(sass@1.79.4)(terser@5.36.0))
|
||||
version: 1.6.0(vitest@1.6.0(@types/node@22.9.0)(happy-dom@10.0.3)(jsdom@24.1.1(bufferutil@4.0.8)(utf-8-validate@6.0.4))(sass@1.79.4)(terser@5.36.0))
|
||||
'@vue/runtime-core':
|
||||
specifier: 3.5.12
|
||||
version: 3.5.12
|
||||
@@ -4176,11 +4176,12 @@ packages:
|
||||
resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==}
|
||||
engines: {node: '>=14.16'}
|
||||
|
||||
'@tabler/icons-webfont@3.3.0':
|
||||
resolution: {integrity: sha512-vMsxtwTXdC4QH4uDajZjBYThILEI0dP+Mn1s4XZkVtnJ793IF31i3596nYetWhAJnrED0UJ0HQWSbmqVxVQbxA==}
|
||||
'@tabler/icons-webfont@https://github.com/misskey-dev/tabler-icons/archive/refs/tags/3.29.0-mi.1913+5921534bc.tar.gz':
|
||||
resolution: {tarball: https://github.com/misskey-dev/tabler-icons/archive/refs/tags/3.29.0-mi.1913+5921534bc.tar.gz}
|
||||
version: 3.29.0-mi.1913
|
||||
|
||||
'@tabler/icons@3.3.0':
|
||||
resolution: {integrity: sha512-PLVe9d7b59sKytbx00KgeGhQG3N176Ezv8YMmsnSz4s0ifDzMWlp/h2wEfQZ0ZNe8e377GY2OW6kovUe3Rnd0g==}
|
||||
'@tabler/icons@3.29.0':
|
||||
resolution: {integrity: sha512-VWNINymdmhay3MDvWVREmRwuWLSrX3YiInKvs5L4AHRF4bAfJabLlEReE0BW/XFsBt22ff8/C8Eam/LXlF97mA==}
|
||||
|
||||
'@tensorflow/tfjs-backend-cpu@4.4.0':
|
||||
resolution: {integrity: sha512-d4eln500/qNym78z9IrUUzF0ITBoJGLrxV8xd92kLVoXhg35Mm+zqUXShjFcrH8joOHOFuST0qZ0TbDDqcPzPA==}
|
||||
@@ -13074,7 +13075,7 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@nestjs/testing@10.4.7(@nestjs/common@10.4.7(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7(@nestjs/common@10.4.7(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7))':
|
||||
'@nestjs/testing@10.4.7(@nestjs/common@10.4.7(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)(@nestjs/platform-express@10.4.7)':
|
||||
dependencies:
|
||||
'@nestjs/common': 10.4.7(reflect-metadata@0.2.2)(rxjs@7.8.1)
|
||||
'@nestjs/core': 10.4.7(@nestjs/common@10.4.7(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1)
|
||||
@@ -14567,11 +14568,11 @@ snapshots:
|
||||
dependencies:
|
||||
defer-to-connect: 2.0.1
|
||||
|
||||
'@tabler/icons-webfont@3.3.0':
|
||||
'@tabler/icons-webfont@https://github.com/misskey-dev/tabler-icons/archive/refs/tags/3.29.0-mi.1913+5921534bc.tar.gz':
|
||||
dependencies:
|
||||
'@tabler/icons': 3.3.0
|
||||
'@tabler/icons': 3.29.0
|
||||
|
||||
'@tabler/icons@3.3.0': {}
|
||||
'@tabler/icons@3.29.0': {}
|
||||
|
||||
'@tensorflow/tfjs-backend-cpu@4.4.0(@tensorflow/tfjs-core@4.4.0(encoding@0.1.13))':
|
||||
dependencies:
|
||||
@@ -15264,7 +15265,7 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@vitest/coverage-v8@1.6.0(vitest@1.6.0(@types/node@22.9.0)(happy-dom@10.0.3)(jsdom@24.1.1)(sass@1.79.4)(terser@5.36.0))':
|
||||
'@vitest/coverage-v8@1.6.0(vitest@1.6.0(@types/node@22.9.0)(happy-dom@10.0.3)(jsdom@24.1.1(bufferutil@4.0.8)(utf-8-validate@6.0.4))(sass@1.79.4)(terser@5.36.0))':
|
||||
dependencies:
|
||||
'@ampproject/remapping': 2.2.1
|
||||
'@bcoe/v8-coverage': 0.2.3
|
||||
@@ -15279,7 +15280,7 @@ snapshots:
|
||||
std-env: 3.7.0
|
||||
strip-literal: 2.1.0
|
||||
test-exclude: 6.0.0
|
||||
vitest: 1.6.0(@types/node@22.9.0)(happy-dom@10.0.3)(jsdom@24.1.1)(sass@1.79.4)(terser@5.36.0)
|
||||
vitest: 1.6.0(@types/node@22.9.0)(happy-dom@10.0.3)(jsdom@24.1.1(bufferutil@4.0.8)(utf-8-validate@6.0.4))(sass@1.79.4)(terser@5.36.0)
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
@@ -19046,35 +19047,6 @@ snapshots:
|
||||
|
||||
jsdoc-type-pratt-parser@4.1.0: {}
|
||||
|
||||
jsdom@24.1.1:
|
||||
dependencies:
|
||||
cssstyle: 4.0.1
|
||||
data-urls: 5.0.0
|
||||
decimal.js: 10.4.3
|
||||
form-data: 4.0.1
|
||||
html-encoding-sniffer: 4.0.0
|
||||
http-proxy-agent: 7.0.2
|
||||
https-proxy-agent: 7.0.5
|
||||
is-potential-custom-element-name: 1.0.1
|
||||
nwsapi: 2.2.12
|
||||
parse5: 7.2.1
|
||||
rrweb-cssom: 0.7.1
|
||||
saxes: 6.0.0
|
||||
symbol-tree: 3.2.4
|
||||
tough-cookie: 4.1.4
|
||||
w3c-xmlserializer: 5.0.0
|
||||
webidl-conversions: 7.0.0
|
||||
whatwg-encoding: 3.1.1
|
||||
whatwg-mimetype: 4.0.0
|
||||
whatwg-url: 14.0.0
|
||||
ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@6.0.4)
|
||||
xml-name-validator: 5.0.0
|
||||
transitivePeerDependencies:
|
||||
- bufferutil
|
||||
- supports-color
|
||||
- utf-8-validate
|
||||
optional: true
|
||||
|
||||
jsdom@24.1.1(bufferutil@4.0.7)(utf-8-validate@6.0.3):
|
||||
dependencies:
|
||||
cssstyle: 4.0.1
|
||||
@@ -22532,7 +22504,7 @@ snapshots:
|
||||
- supports-color
|
||||
- terser
|
||||
|
||||
vitest@1.6.0(@types/node@22.9.0)(happy-dom@10.0.3)(jsdom@24.1.1)(sass@1.79.4)(terser@5.36.0):
|
||||
vitest@1.6.0(@types/node@22.9.0)(happy-dom@10.0.3)(jsdom@24.1.1(bufferutil@4.0.8)(utf-8-validate@6.0.4))(sass@1.79.4)(terser@5.36.0):
|
||||
dependencies:
|
||||
'@vitest/expect': 1.6.0
|
||||
'@vitest/runner': 1.6.0
|
||||
@@ -22557,7 +22529,7 @@ snapshots:
|
||||
optionalDependencies:
|
||||
'@types/node': 22.9.0
|
||||
happy-dom: 10.0.3
|
||||
jsdom: 24.1.1
|
||||
jsdom: 24.1.1(bufferutil@4.0.8)(utf-8-validate@6.0.4)
|
||||
transitivePeerDependencies:
|
||||
- less
|
||||
- lightningcss
|
||||
|
||||
@@ -27,20 +27,7 @@ await Promise.all([
|
||||
stdout: process.stdout,
|
||||
stderr: process.stderr,
|
||||
}),
|
||||
execa('pnpm', ['--filter', 'misskey-js', 'build'], {
|
||||
cwd: _dirname + '/../',
|
||||
stdout: process.stdout,
|
||||
stderr: process.stderr,
|
||||
}),
|
||||
]);
|
||||
|
||||
await Promise.all([
|
||||
execa('pnpm', ['--filter', 'misskey-reversi', 'build'], {
|
||||
cwd: _dirname + '/../',
|
||||
stdout: process.stdout,
|
||||
stderr: process.stderr,
|
||||
}),
|
||||
execa('pnpm', ['--filter', 'misskey-bubble-game', 'build'], {
|
||||
execa('pnpm', ['--filter', 'backend...', 'build'], {
|
||||
cwd: _dirname + '/../',
|
||||
stdout: process.stdout,
|
||||
stderr: process.stderr,
|
||||
@@ -65,7 +52,7 @@ execa('pnpm', ['--filter', 'backend', 'dev'], {
|
||||
stderr: process.stderr,
|
||||
});
|
||||
|
||||
execa('pnpm', ['--filter', 'frontend-shared', 'watch'], {
|
||||
execa('pnpm', ['--filter', 'frontend-shared', 'watch', '--no-clean'], {
|
||||
cwd: _dirname + '/../',
|
||||
stdout: process.stdout,
|
||||
stderr: process.stderr,
|
||||
@@ -89,19 +76,19 @@ execa('pnpm', ['--filter', 'sw', 'watch'], {
|
||||
stderr: process.stderr,
|
||||
});
|
||||
|
||||
execa('pnpm', ['--filter', 'misskey-js', 'watch'], {
|
||||
execa('pnpm', ['--filter', 'misskey-js', 'watch', '--no-clean'], {
|
||||
cwd: _dirname + '/../',
|
||||
stdout: process.stdout,
|
||||
stderr: process.stderr,
|
||||
});
|
||||
|
||||
execa('pnpm', ['--filter', 'misskey-reversi', 'watch'], {
|
||||
execa('pnpm', ['--filter', 'misskey-reversi', 'watch', '--no-clean'], {
|
||||
cwd: _dirname + '/../',
|
||||
stdout: process.stdout,
|
||||
stderr: process.stderr,
|
||||
});
|
||||
|
||||
execa('pnpm', ['--filter', 'misskey-bubble-game', 'watch'], {
|
||||
execa('pnpm', ['--filter', 'misskey-bubble-game', 'watch', '--no-clean'], {
|
||||
cwd: _dirname + '/../',
|
||||
stdout: process.stdout,
|
||||
stderr: process.stderr,
|
||||
|
||||
Reference in New Issue
Block a user