Merge pull request 'develop' (#9032) from develop into main
Reviewed-on: https://codeberg.org/thatonecalculator/calckey/pulls/9032
This commit is contained in:
commit
f8dcd31e76
|
@ -138,9 +138,6 @@ id: 'aid'
|
||||||
# Proxy remote files (default: false)
|
# Proxy remote files (default: false)
|
||||||
#proxyRemoteFiles: true
|
#proxyRemoteFiles: true
|
||||||
|
|
||||||
# Sign to ActivityPub GET request (default: false)
|
|
||||||
#signToActivityPubGet: true
|
|
||||||
|
|
||||||
#allowedPrivateNetworks: [
|
#allowedPrivateNetworks: [
|
||||||
# '127.0.0.1/32'
|
# '127.0.0.1/32'
|
||||||
#]
|
#]
|
||||||
|
|
|
@ -24,6 +24,9 @@ packages/sw/.yarn/cache
|
||||||
cypress/screenshots
|
cypress/screenshots
|
||||||
cypress/videos
|
cypress/videos
|
||||||
|
|
||||||
|
# Coverage
|
||||||
|
coverage
|
||||||
|
|
||||||
# config
|
# config
|
||||||
/.config/*
|
/.config/*
|
||||||
!/.config/example.yml
|
!/.config/example.yml
|
||||||
|
|
|
@ -15,6 +15,9 @@ packageExtensions:
|
||||||
chartjs-adapter-date-fns@*:
|
chartjs-adapter-date-fns@*:
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
date-fns: "*"
|
date-fns: "*"
|
||||||
|
swiper@*:
|
||||||
|
peerDependencies:
|
||||||
|
vue: "*"
|
||||||
consolidate@*:
|
consolidate@*:
|
||||||
dependencies:
|
dependencies:
|
||||||
ejs: "*"
|
ejs: "*"
|
||||||
|
|
28
CALCKEY.md
28
CALCKEY.md
|
@ -3,10 +3,10 @@
|
||||||
## Planned
|
## Planned
|
||||||
|
|
||||||
- MFM button
|
- MFM button
|
||||||
- Make more of the post clickable like every other SNS
|
|
||||||
- Better Messaging UI
|
|
||||||
- Classic mode make instance icon bring up new context menu
|
- Classic mode make instance icon bring up new context menu
|
||||||
- Like/star button
|
- Like/star button
|
||||||
|
- Backfill remote users
|
||||||
|
- User "choices" (recommended users) like Mastodon and Soapbox
|
||||||
- Option to publicize instance blocks
|
- Option to publicize instance blocks
|
||||||
- Better intro/onboarding
|
- Better intro/onboarding
|
||||||
- Fully revamp non-logged-in screen
|
- Fully revamp non-logged-in screen
|
||||||
|
@ -21,8 +21,12 @@
|
||||||
|
|
||||||
## Work in progress
|
## Work in progress
|
||||||
|
|
||||||
|
- Better Messaging UI
|
||||||
|
- Videos can be played in DMs
|
||||||
|
- Make your password hasn't been pwned
|
||||||
- OCR image captioning
|
- OCR image captioning
|
||||||
- Admin custom CSS
|
- Admin custom CSS
|
||||||
|
- Add back time machine (jump to date)
|
||||||
- Improve accesibility score
|
- Improve accesibility score
|
||||||
<details><summary>Current Misskey score is 57/100</summary>
|
<details><summary>Current Misskey score is 57/100</summary>
|
||||||
|
|
||||||
|
@ -34,36 +38,51 @@
|
||||||
|
|
||||||
- Yarn 3
|
- Yarn 3
|
||||||
- Fix Dockerfile @hanna
|
- Fix Dockerfile @hanna
|
||||||
|
- Upgrade packages with security vunrabilities
|
||||||
- Saner defaults
|
- Saner defaults
|
||||||
- Recommended instances timeline
|
- Recommended instances timeline
|
||||||
|
- Improve mobile UX
|
||||||
|
- Swipe through pages on mobile
|
||||||
|
- Redesigned mobile bottom nav bar
|
||||||
|
- Post button on TL
|
||||||
- Star as default reaction
|
- Star as default reaction
|
||||||
- Rosé Pine by default (+ non-themable elements made Rosé Pine)
|
- Rosé Pine by default (+ non-themable elements made Rosé Pine)
|
||||||
- Better sidebar/navbar
|
- Better sidebar/navbar
|
||||||
|
- Add back groups
|
||||||
- MOTD (customizable by admins!)
|
- MOTD (customizable by admins!)
|
||||||
- Custom randomized splash icons
|
- Custom randomized splash icons
|
||||||
- Self hosted, newly designed error images
|
- Self hosted, newly designed error images
|
||||||
- Illustrated by [Henki](https://www.youtube.com/c/Henkiwashere)!
|
- Illustrated by [Henki](https://www.youtube.com/c/Henkiwashere)!
|
||||||
- Licensed under the CC-BY-SA 4.0.
|
- Licensed under the CC-BY-SA 4.0.
|
||||||
- [Profile background as banner](https://codeberg.org/Freeplay/Misskey-Tweaks/src/branch/main/snippets/profile-background.styl)
|
|
||||||
- Better timeline top bar
|
- Better timeline top bar
|
||||||
|
- Improved note style
|
||||||
|
- Make more of the post clickable like every other SNS
|
||||||
|
- No more details tag for reply attachments
|
||||||
|
- Better CW button
|
||||||
- Mark as read from notifications widget
|
- Mark as read from notifications widget
|
||||||
- Less cluttered notification summary
|
- Less cluttered notification summary
|
||||||
- Better welcome screen (not logged in)
|
- Better welcome screen (not logged in)
|
||||||
|
- vue-plyr as video/audio player
|
||||||
- Ability to turn off "Connection lost" message
|
- Ability to turn off "Connection lost" message
|
||||||
- Raw instance info only for moderators
|
- Raw instance info only for moderators
|
||||||
- New spinner animation
|
- New spinner animation
|
||||||
- Spinner instead of "Loading..."
|
- Spinner instead of "Loading..."
|
||||||
- SearchX instead of Google
|
- SearchX instead of Google
|
||||||
|
- Always signToActivityPubGet
|
||||||
- Spacing on group items
|
- Spacing on group items
|
||||||
- Quotes have solid border
|
- Quotes have solid border
|
||||||
- Reply limit bug fixed
|
- Reply limit bug fixed
|
||||||
- Make showing the update popup optional
|
- Make showing the update popup optional
|
||||||
|
- Improve PWA manifest
|
||||||
|
- Fix incoming chat scrolling globally
|
||||||
- Obliteration of Ai-chan
|
- Obliteration of Ai-chan
|
||||||
- [Make showing ads optional](https://github.com/misskey-dev/misskey/pull/8996)
|
- [Make showing ads optional](https://github.com/misskey-dev/misskey/pull/8996)
|
||||||
|
- [Tapping avatar in mobile opens account modal](https://github.com/misskey-dev/misskey/pull/9056)
|
||||||
- [OAuth bearer token authentication](https://github.com/misskey-dev/misskey/pull/9021)
|
- [OAuth bearer token authentication](https://github.com/misskey-dev/misskey/pull/9021)
|
||||||
- [Styled Repair Tools](https://github.com/misskey-dev/misskey/pull/8956)
|
- [Styled Repair Tools](https://github.com/misskey-dev/misskey/pull/8956)
|
||||||
- [Option to make enter send message](https://github.com/misskey-dev/misskey/pull/8954)
|
- [Option to make enter send message](https://github.com/misskey-dev/misskey/pull/8954)
|
||||||
- [Autocomplete in messaging](https://github.com/misskey-dev/misskey/pull/8955)
|
- [Autocomplete in messaging](https://github.com/misskey-dev/misskey/pull/8955)
|
||||||
|
- [Profile background as banner](https://codeberg.org/Freeplay/Misskey-Tweaks/src/branch/main/snippets/profile-background.styl)
|
||||||
- [Star is generic like/favorite](https://github.com/JakeMBauer/Misskey-Extras/blob/master/patches/star-is-like.patch)
|
- [Star is generic like/favorite](https://github.com/JakeMBauer/Misskey-Extras/blob/master/patches/star-is-like.patch)
|
||||||
- 👍 also triggers generic like/favorite
|
- 👍 also triggers generic like/favorite
|
||||||
- [Add additional background for acrylic popups if backdrop-filter is unsupported](https://github.com/misskey-dev/misskey/pull/8671)
|
- [Add additional background for acrylic popups if backdrop-filter is unsupported](https://github.com/misskey-dev/misskey/pull/8671)
|
||||||
|
@ -89,3 +108,6 @@
|
||||||
- 585e4f5c42cfafb6cdf7eb601ab435d6a4d85a96: fix textarea not updating properly
|
- 585e4f5c42cfafb6cdf7eb601ab435d6a4d85a96: fix textarea not updating properly
|
||||||
- 30d8bc9259cb6b72ed76d67b21dbb4cdceca8327: refactor: welcome.setup.vue to composition api
|
- 30d8bc9259cb6b72ed76d67b21dbb4cdceca8327: refactor: welcome.setup.vue to composition api
|
||||||
- 751921e24f37ed707fe44a40d88eebb1299efa35: make emoji picker case insensitive
|
- 751921e24f37ed707fe44a40d88eebb1299efa35: make emoji picker case insensitive
|
||||||
|
- 298febeb9c9501e3e3df16982c08657d1da474e0: enhance: add re-collapsing to quoted notes
|
||||||
|
- b0fdedb264db87575063abed45e52ad71ce4a6af: fix lints in folder.vue
|
||||||
|
- 6fed87f85d132304eb84b0a59b84dce299a1822f: fix pagination.vue lints
|
||||||
|
|
|
@ -9,10 +9,17 @@
|
||||||
You should also include the user name that made the change.
|
You should also include the user name that made the change.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
## 12.x.x (unreleased)
|
## 12.119.0 (2022/09/10)
|
||||||
|
|
||||||
### Improvements
|
### Improvements
|
||||||
- Client: Add following badge to user preview popup @nvisser
|
- Client: Add following badge to user preview popup @nvisser
|
||||||
|
- Client: mobile twitter url can be used as widget @caipira113
|
||||||
|
- Client: Improve clock widget @syuilo
|
||||||
|
|
||||||
|
### Bugfixes
|
||||||
|
- マイグレーションに失敗する問題を修正
|
||||||
|
- Server: 他人の通知を既読にできる可能性があるのを修正 @syuilo
|
||||||
|
- Client: アクセストークン管理画面、アカウント管理画面表示できないのを修正 @futchitwo
|
||||||
|
|
||||||
## 12.118.1 (2022/08/08)
|
## 12.118.1 (2022/08/08)
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
FROM node:alpine
|
FROM node:alpine
|
||||||
ENV YARN_CHECKSUM_BEHAVIOR=update
|
ENV YARN_CHECKSUM_BEHAVIOR=update
|
||||||
ARG NODE_ENV=production
|
ARG NODE_ENV=production
|
||||||
WORKDIR /misskey
|
WORKDIR /calckey
|
||||||
|
|
||||||
# Copy Files
|
# Copy Files
|
||||||
COPY . ./
|
COPY . ./
|
||||||
|
|
|
@ -17,9 +17,13 @@
|
||||||
- Calckey adds many quality of life changes and bug fixes for users and instance admins alike.
|
- Calckey adds many quality of life changes and bug fixes for users and instance admins alike.
|
||||||
- Read **[this document](./CALCKEY.md)** all for current and future differences.
|
- Read **[this document](./CALCKEY.md)** all for current and future differences.
|
||||||
- Notable differences:
|
- Notable differences:
|
||||||
- Improved UI/UX, notifications, security, and more
|
- Improved UI/UX (especially on mobile)
|
||||||
|
- Improved notifications
|
||||||
|
- Improved instance security
|
||||||
- Recommended Instances timeline
|
- Recommended Instances timeline
|
||||||
|
- New and improved Groups
|
||||||
- Many more user and admin settings
|
- Many more user and admin settings
|
||||||
|
- [So much more!](./CALCKEY.md)
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -154,9 +154,6 @@ id: "aid"
|
||||||
# Media Proxy
|
# Media Proxy
|
||||||
#mediaProxy: https://example.com/proxy
|
#mediaProxy: https://example.com/proxy
|
||||||
|
|
||||||
# Sign to ActivityPub GET request (default: false)
|
|
||||||
#signToActivityPubGet: true
|
|
||||||
|
|
||||||
#allowedPrivateNetworks: [
|
#allowedPrivateNetworks: [
|
||||||
# '127.0.0.1/32'
|
# '127.0.0.1/32'
|
||||||
#]
|
#]
|
||||||
|
|
|
@ -206,6 +206,7 @@ instanceFollowers: "Následovníci na instanci"
|
||||||
instanceUsers: "Uživatelé této instance"
|
instanceUsers: "Uživatelé této instance"
|
||||||
changePassword: "Změnit heslo"
|
changePassword: "Změnit heslo"
|
||||||
security: "Zabezpečení"
|
security: "Zabezpečení"
|
||||||
|
retypedNotMatch: "Zadané údaje se neshodují."
|
||||||
currentPassword: "Současné heslo"
|
currentPassword: "Současné heslo"
|
||||||
newPassword: "Nové heslo"
|
newPassword: "Nové heslo"
|
||||||
newPasswordRetype: "Nové heslo (znovu)"
|
newPasswordRetype: "Nové heslo (znovu)"
|
||||||
|
@ -268,6 +269,7 @@ addFile: "Přidat soubor"
|
||||||
emptyFolder: "Tato složka je prázdná"
|
emptyFolder: "Tato složka je prázdná"
|
||||||
unableToDelete: "Nelze smazat"
|
unableToDelete: "Nelze smazat"
|
||||||
inputNewFileName: "Zadejte nový název"
|
inputNewFileName: "Zadejte nový název"
|
||||||
|
inputNewFolderName: "Zadejte název nové složky"
|
||||||
copyUrl: "Kopírovat URL"
|
copyUrl: "Kopírovat URL"
|
||||||
rename: "Přejmenovat"
|
rename: "Přejmenovat"
|
||||||
avatar: "Avatar"
|
avatar: "Avatar"
|
||||||
|
@ -310,9 +312,11 @@ pinnedUsers: "Připnutí uživatelé"
|
||||||
pinnedNotes: "Připnutá poznámka"
|
pinnedNotes: "Připnutá poznámka"
|
||||||
hcaptcha: "hCaptcha"
|
hcaptcha: "hCaptcha"
|
||||||
enableHcaptcha: "Aktivovat hCaptchu"
|
enableHcaptcha: "Aktivovat hCaptchu"
|
||||||
|
hcaptchaSiteKey: "Klíč stránky"
|
||||||
hcaptchaSecretKey: "Tajný Klíč (Secret Key)"
|
hcaptchaSecretKey: "Tajný Klíč (Secret Key)"
|
||||||
recaptcha: "reCAPTCHA"
|
recaptcha: "reCAPTCHA"
|
||||||
enableRecaptcha: "Zapnout ReCAPTCHu"
|
enableRecaptcha: "Zapnout ReCAPTCHu"
|
||||||
|
recaptchaSiteKey: "Klíč stránky"
|
||||||
recaptchaSecretKey: "Tajný Klíč (Secret Key)"
|
recaptchaSecretKey: "Tajný Klíč (Secret Key)"
|
||||||
antennas: "Antény"
|
antennas: "Antény"
|
||||||
manageAntennas: "Spravovat Antény"
|
manageAntennas: "Spravovat Antény"
|
||||||
|
@ -321,6 +325,10 @@ antennaSource: "Zdroj Antény"
|
||||||
enableServiceworker: "Povolit ServiceWorker"
|
enableServiceworker: "Povolit ServiceWorker"
|
||||||
caseSensitive: "Rozlišuje malá a velká písmena"
|
caseSensitive: "Rozlišuje malá a velká písmena"
|
||||||
connectedTo: "Následující účty jsou připojeny"
|
connectedTo: "Následující účty jsou připojeny"
|
||||||
|
notesAndReplies: "Poznámky a odpovědi"
|
||||||
|
withFiles: "Včetně souborů"
|
||||||
|
popularUsers: "Populární uživatelé"
|
||||||
|
recentlyUpdatedUsers: "Nedávno aktívni uživatelé"
|
||||||
popularTags: "Populární tagy"
|
popularTags: "Populární tagy"
|
||||||
userList: "Seznamy"
|
userList: "Seznamy"
|
||||||
about: "Informace"
|
about: "Informace"
|
||||||
|
@ -365,10 +373,14 @@ next: "Další"
|
||||||
retype: "Zadejte znovu"
|
retype: "Zadejte znovu"
|
||||||
noteOf: "{user} poznámky"
|
noteOf: "{user} poznámky"
|
||||||
inviteToGroup: "Pozvat do skupiny"
|
inviteToGroup: "Pozvat do skupiny"
|
||||||
|
quoteAttached: "Citace"
|
||||||
|
quoteQuestion: "Přiložit jako citaci?"
|
||||||
|
noMessagesYet: "Zatím tu nejsou žádné zprávy"
|
||||||
newMessageExists: "Máte novou zprávu"
|
newMessageExists: "Máte novou zprávu"
|
||||||
onlyOneFileCanBeAttached: "Ke zprávě můžete přiložit jenom jeden soubor"
|
onlyOneFileCanBeAttached: "Ke zprávě můžete přiložit jenom jeden soubor"
|
||||||
signinRequired: "Přihlašte se, prosím"
|
signinRequired: "Přihlašte se, prosím"
|
||||||
invitations: "Pozvat"
|
invitations: "Pozvat"
|
||||||
|
invitationCode: "Kód pozvánky"
|
||||||
checking: "Ověřuji"
|
checking: "Ověřuji"
|
||||||
available: "K dispozici"
|
available: "K dispozici"
|
||||||
unavailable: "Není k dispozici"
|
unavailable: "Není k dispozici"
|
||||||
|
@ -382,6 +394,7 @@ passwordMatched: "Hesla se schodují"
|
||||||
passwordNotMatched: "Hesla se neschodují"
|
passwordNotMatched: "Hesla se neschodují"
|
||||||
signinWith: "Přihlásit se s {x}"
|
signinWith: "Přihlásit se s {x}"
|
||||||
signinFailed: "Nelze se přihlásit. Zkontrolujte prosím své uživatelské jméno a heslo."
|
signinFailed: "Nelze se přihlásit. Zkontrolujte prosím své uživatelské jméno a heslo."
|
||||||
|
tapSecurityKey: "Ťukněte na bezpečnostní klíč"
|
||||||
or: "Nebo"
|
or: "Nebo"
|
||||||
language: "Jazyk"
|
language: "Jazyk"
|
||||||
uiLanguage: "Jazyk uživatelského rozhraní"
|
uiLanguage: "Jazyk uživatelského rozhraní"
|
||||||
|
@ -411,9 +424,20 @@ accountSettings: "Nastavení účtu"
|
||||||
promotion: "Propagace"
|
promotion: "Propagace"
|
||||||
promote: "Propagovat"
|
promote: "Propagovat"
|
||||||
numberOfDays: "Počet dní"
|
numberOfDays: "Počet dní"
|
||||||
|
objectStorageBaseUrl: "Base URL"
|
||||||
|
objectStorageBucket: "Bucket"
|
||||||
|
objectStoragePrefix: "Předpona"
|
||||||
|
objectStorageEndpoint: "Endpoint"
|
||||||
|
objectStorageRegion: "Región"
|
||||||
|
objectStorageUseSSL: "Použít SSL"
|
||||||
deleteAll: "Smazat vše"
|
deleteAll: "Smazat vše"
|
||||||
showFixedPostForm: "Zobrazit formulář pro nové příspěvky nad časovou osou"
|
showFixedPostForm: "Zobrazit formulář pro nové příspěvky nad časovou osou"
|
||||||
|
listen: "Poslouchat"
|
||||||
|
showInPage: "Zobrazit na stránce"
|
||||||
|
popout: "Pop-out"
|
||||||
|
volume: "Hlasitost"
|
||||||
masterVolume: "Celková hlasitost"
|
masterVolume: "Celková hlasitost"
|
||||||
|
details: "Detaily"
|
||||||
chooseEmoji: "Vybrat emotikon"
|
chooseEmoji: "Vybrat emotikon"
|
||||||
unableToProcess: "Operace nebyla dokončena."
|
unableToProcess: "Operace nebyla dokončena."
|
||||||
recentUsed: "Naposledy použité"
|
recentUsed: "Naposledy použité"
|
||||||
|
@ -434,13 +458,20 @@ deleteAllFiles: "Smazat všechny soubory"
|
||||||
deleteAllFilesConfirm: "Jste si jistí že chcete smazat všechny soubory?"
|
deleteAllFilesConfirm: "Jste si jistí že chcete smazat všechny soubory?"
|
||||||
userSuspended: "Tomuto uživateli byl pozastaven účet."
|
userSuspended: "Tomuto uživateli byl pozastaven účet."
|
||||||
menu: "Menu"
|
menu: "Menu"
|
||||||
|
divider: "Dělící čára"
|
||||||
addItem: "Přidat položku"
|
addItem: "Přidat položku"
|
||||||
|
relays: "Relay"
|
||||||
|
addRelay: "Přidat Relay"
|
||||||
inboxUrl: "Inbox URL"
|
inboxUrl: "Inbox URL"
|
||||||
deletedNote: "Odstraněné příspěvky"
|
deletedNote: "Odstraněné příspěvky"
|
||||||
invisibleNote: "Skryté příspěvky"
|
invisibleNote: "Skryté příspěvky"
|
||||||
description: "Popis"
|
description: "Popis"
|
||||||
author: "Autor"
|
author: "Autor"
|
||||||
manage: "Administrace"
|
manage: "Administrace"
|
||||||
|
width: "Šířka"
|
||||||
|
height: "Výška"
|
||||||
|
large: "Velké"
|
||||||
|
medium: "Střední"
|
||||||
small: "Malé"
|
small: "Malé"
|
||||||
generateAccessToken: "Vygenerovat přístupový token"
|
generateAccessToken: "Vygenerovat přístupový token"
|
||||||
permission: "Oprávnění"
|
permission: "Oprávnění"
|
||||||
|
@ -458,11 +489,16 @@ smtpPort: "Port"
|
||||||
smtpUser: "Uživatelské jméno"
|
smtpUser: "Uživatelské jméno"
|
||||||
smtpPass: "Heslo"
|
smtpPass: "Heslo"
|
||||||
smtpSecureInfo: "Toto vypněte pokud používáte STARTTLS"
|
smtpSecureInfo: "Toto vypněte pokud používáte STARTTLS"
|
||||||
|
testEmail: "Otestovat doručení emailů"
|
||||||
makeActive: "Aktivovat"
|
makeActive: "Aktivovat"
|
||||||
display: "Zobrazit"
|
display: "Zobrazit"
|
||||||
copy: "Kopírovat"
|
copy: "Kopírovat"
|
||||||
|
metrics: "Metriky"
|
||||||
|
overview: "Shrnutí"
|
||||||
logs: "Logy"
|
logs: "Logy"
|
||||||
|
delayed: "Prodleva"
|
||||||
database: "Databáze"
|
database: "Databáze"
|
||||||
|
channel: "Kanály"
|
||||||
create: "Vytvořit"
|
create: "Vytvořit"
|
||||||
notificationSetting: "Nastavení oznámení"
|
notificationSetting: "Nastavení oznámení"
|
||||||
useGlobalSetting: "Použít globální nastavení"
|
useGlobalSetting: "Použít globální nastavení"
|
||||||
|
@ -470,79 +506,415 @@ other: "Ostatní"
|
||||||
fileIdOrUrl: "ID nebo URL souboru"
|
fileIdOrUrl: "ID nebo URL souboru"
|
||||||
behavior: "Chování"
|
behavior: "Chování"
|
||||||
sample: "Ukázka"
|
sample: "Ukázka"
|
||||||
|
send: "Odeslat"
|
||||||
|
openInNewTab: "Otevřít v nové kartě"
|
||||||
|
random: "Náhodně"
|
||||||
|
system: "Systém"
|
||||||
|
desktop: "Plocha"
|
||||||
|
clip: "Oříznout"
|
||||||
|
createNew: "Vytvořit nový"
|
||||||
|
optional: "Volitelné"
|
||||||
|
yes: "Ano"
|
||||||
|
no: "Ne"
|
||||||
|
notSet: "Není nastaveno"
|
||||||
|
emailVerified: "Váš e-mail byl ověřen"
|
||||||
|
contact: "Kontakt"
|
||||||
|
useSystemFont: "Použít výchozí font systému"
|
||||||
|
clips: "Oříznout"
|
||||||
|
experimentalFeatures: "Experimentální funkce"
|
||||||
|
developer: "Vývojář"
|
||||||
|
duplicate: "Duplikovat"
|
||||||
|
left: "Vlevo"
|
||||||
|
center: "Uprostřed"
|
||||||
|
wide: "Široké"
|
||||||
|
narrow: "Úzké"
|
||||||
clearCache: "Vyprázdnit mezipaměť"
|
clearCache: "Vyprázdnit mezipaměť"
|
||||||
|
nUsers: "{n} užívatelů"
|
||||||
|
nNotes: "{n} poznámek"
|
||||||
|
myTheme: "Moje vzhledy"
|
||||||
|
backgroundColor: "Pozadí"
|
||||||
|
accentColor: "Akcent"
|
||||||
|
textColor: "Barva textu"
|
||||||
|
saveAs: "Uložit jako…"
|
||||||
|
advanced: "Pokročilé"
|
||||||
|
value: "Hodnota"
|
||||||
|
createdAt: "Vytvořeno"
|
||||||
|
updatedAt: "Upraveno"
|
||||||
|
saveConfirm: "Uložit změny?"
|
||||||
|
deleteConfirm: "Opravdu smazat?"
|
||||||
|
invalidValue: "Neplatná hodnota."
|
||||||
|
registry: "Registr"
|
||||||
info: "Informace"
|
info: "Informace"
|
||||||
|
unknown: "Neznámý"
|
||||||
|
onlineStatus: "Online status"
|
||||||
|
hideOnlineStatus: "Skrýt Váš online status"
|
||||||
|
hideOnlineStatusDescription: "Skrytí vašeho online stavu může snížit funkcionalitu některých funkcí, například vyhledávání."
|
||||||
|
online: "Online"
|
||||||
|
active: "Aktivní"
|
||||||
|
offline: "Offline"
|
||||||
|
notRecommended: "Nedoporučuje se"
|
||||||
|
botProtection: "Bot ochrana"
|
||||||
|
instanceBlocking: "Blokované instance"
|
||||||
|
selectAccount: "Vybrat účet"
|
||||||
|
switchAccount: "Přepnout účet"
|
||||||
|
enabled: "Zapnuto"
|
||||||
|
disabled: "Vypnuto"
|
||||||
|
quickAction: "Rychlé akce"
|
||||||
user: "Uživatelé"
|
user: "Uživatelé"
|
||||||
administration: "Administrace"
|
administration: "Administrace"
|
||||||
|
accounts: "Účty"
|
||||||
|
switch: "Přepnout"
|
||||||
|
configure: "Nastavit"
|
||||||
|
gallery: "Galerie"
|
||||||
|
recentPosts: "Poslední příspěvky"
|
||||||
|
ads: "Reklamy"
|
||||||
|
memo: "Memo"
|
||||||
|
priority: "Priorita"
|
||||||
|
high: "Vysoká"
|
||||||
|
middle: "Střední"
|
||||||
|
low: "Nízká"
|
||||||
|
emailNotConfiguredWarning: "E-mailová adresa není nastavena."
|
||||||
|
ratio: "Poměr"
|
||||||
|
global: "Globální"
|
||||||
|
sent: "Odeslat"
|
||||||
|
hashtags: "Hashtagy"
|
||||||
|
troubleshooting: "Poradce při potížích"
|
||||||
|
whatIsNew: "Zobrazit změny"
|
||||||
|
translate: "Přeložit"
|
||||||
|
hide: "Skrýt"
|
||||||
|
smartphone: "Telefon"
|
||||||
|
tablet: "Tablet"
|
||||||
|
auto: "Auto"
|
||||||
|
size: "Velikost"
|
||||||
|
numberOfColumn: "Počet sloupců"
|
||||||
searchByGoogle: "Vyhledávání"
|
searchByGoogle: "Vyhledávání"
|
||||||
|
indefinitely: "Navždy"
|
||||||
|
tenMinutes: "10 minut"
|
||||||
|
oneHour: "1 hodina"
|
||||||
|
oneDay: "1 den"
|
||||||
|
oneWeek: "1 týden"
|
||||||
|
reflectMayTakeTime: "Může trvat nějakou dobu, než se projeví změny."
|
||||||
|
cropImage: "Oříznout obrázek"
|
||||||
file: "Soubor(ů)"
|
file: "Soubor(ů)"
|
||||||
|
recentNHours: "Posledních {n} hodin"
|
||||||
|
recentNDays: "Posledních {n} dnů"
|
||||||
|
recommended: "Doporučeno"
|
||||||
|
deleteAccount: "Odstranit účet"
|
||||||
|
document: "Dokumentace"
|
||||||
|
logoutConfirm: "Opravdu se chcete odhlásit?"
|
||||||
|
pleaseSelect: "Vybrat možnost"
|
||||||
|
reverse: "Otočit"
|
||||||
|
colored: "Barevné"
|
||||||
|
type: "Typ"
|
||||||
|
speed: "Rychlost"
|
||||||
|
slow: "Pomalá"
|
||||||
|
fast: "Rychlá"
|
||||||
|
account: "Účty"
|
||||||
|
_ad:
|
||||||
|
back: "Zpět"
|
||||||
|
_gallery:
|
||||||
|
my: "Moje galerie"
|
||||||
_email:
|
_email:
|
||||||
_follow:
|
_follow:
|
||||||
title: "Máte nového následovníka"
|
title: "Máte nového následovníka"
|
||||||
|
_plugin:
|
||||||
|
install: "Instalovat plugin"
|
||||||
|
manage: "Správce pluginů"
|
||||||
|
_preferencesBackups:
|
||||||
|
list: "Vytvořit backup"
|
||||||
|
loadFile: "Načíst ze souboru"
|
||||||
|
save: "Uložit změny"
|
||||||
|
_registry:
|
||||||
|
scope: "Rozsah"
|
||||||
|
key: "Klíč"
|
||||||
|
keys: "Klíče"
|
||||||
|
domain: "Doména"
|
||||||
|
createKey: "Vytvořit klíč"
|
||||||
|
_aboutMisskey:
|
||||||
|
allContributors: "Všichni přispěvatelé"
|
||||||
|
source: "Zdrojový kód"
|
||||||
_mfm:
|
_mfm:
|
||||||
mention: "Zmínění"
|
mention: "Zmínění"
|
||||||
|
hashtag: "Hashtag"
|
||||||
|
link: "Odkaz"
|
||||||
|
bold: "Tučně"
|
||||||
quote: "Citovat"
|
quote: "Citovat"
|
||||||
emoji: "Vlastní emoji"
|
emoji: "Vlastní emoji"
|
||||||
search: "Vyhledávání"
|
search: "Vyhledávání"
|
||||||
|
flip: "Otočit"
|
||||||
|
tada: "Animace (tadá)"
|
||||||
|
blur: "Rozmazání"
|
||||||
|
font: "Font"
|
||||||
|
rainbow: "Duha"
|
||||||
|
_channel:
|
||||||
|
featured: "Trendy"
|
||||||
|
_menuDisplay:
|
||||||
|
top: "Nahoru"
|
||||||
|
hide: "Skrýt"
|
||||||
_theme:
|
_theme:
|
||||||
|
install: "Nainstalovat vzhled"
|
||||||
|
manage: "Správa vzhledů"
|
||||||
|
code: "Kód vzhledu"
|
||||||
description: "Popis"
|
description: "Popis"
|
||||||
|
installedThemes: "Nainstalované vzhledy"
|
||||||
|
constant: "Konstanta"
|
||||||
|
defaultValue: "Výchozí hodnota"
|
||||||
|
color: "Barva"
|
||||||
|
key: "Klíč"
|
||||||
|
func: "Funkce "
|
||||||
keys:
|
keys:
|
||||||
|
shadow: "Stín"
|
||||||
|
header: "Nadpis"
|
||||||
|
link: "Odkaz"
|
||||||
|
hashtag: "Hashtag"
|
||||||
mention: "Zmínění"
|
mention: "Zmínění"
|
||||||
renote: "Přeposlat"
|
renote: "Přeposlat"
|
||||||
|
divider: "Dělící čára"
|
||||||
_sfx:
|
_sfx:
|
||||||
note: "Poznámky"
|
note: "Poznámky"
|
||||||
notification: "Oznámení"
|
notification: "Oznámení"
|
||||||
chat: "Zprávy"
|
chat: "Zprávy"
|
||||||
|
_ago:
|
||||||
|
future: "Budoucí"
|
||||||
|
justNow: "Teď"
|
||||||
|
_time:
|
||||||
|
second: "Sekund"
|
||||||
|
minute: "Minut"
|
||||||
|
hour: "Hodin"
|
||||||
|
_2fa:
|
||||||
|
registerDevice: "Přidat zařízení"
|
||||||
|
registerKey: "Přidat bezpečnostní klíč"
|
||||||
|
_weekday:
|
||||||
|
sunday: "Neděle"
|
||||||
|
monday: "Pondělí"
|
||||||
|
tuesday: "Úterý"
|
||||||
|
wednesday: "Středa"
|
||||||
|
thursday: "Čtvrtek"
|
||||||
|
friday: "Pátek"
|
||||||
|
saturday: "Sobota"
|
||||||
_widgets:
|
_widgets:
|
||||||
notifications: "Oznámení"
|
notifications: "Oznámení"
|
||||||
timeline: "Časová osa"
|
timeline: "Časová osa"
|
||||||
|
calendar: "Kalendář"
|
||||||
|
trends: "Trendy"
|
||||||
|
clock: "Hodiny"
|
||||||
|
rss: "RSS čtečka"
|
||||||
activity: "Aktivita"
|
activity: "Aktivita"
|
||||||
|
photos: "Fotky"
|
||||||
|
digitalClock: "Digitální hodiny"
|
||||||
federation: "Federace"
|
federation: "Federace"
|
||||||
|
slideshow: "Prezentace"
|
||||||
|
button: "Tlačítko"
|
||||||
|
onlineUsers: "Online uživatelé"
|
||||||
jobQueue: "Fronta úloh"
|
jobQueue: "Fronta úloh"
|
||||||
|
aiscript: "AiScript conzole"
|
||||||
|
aichan: "Ai"
|
||||||
_cw:
|
_cw:
|
||||||
|
hide: "Skrýt"
|
||||||
show: "Zobrazit více"
|
show: "Zobrazit více"
|
||||||
|
_poll:
|
||||||
|
noMore: "Více už přidat nemůžete"
|
||||||
|
infinite: "Nikdy"
|
||||||
|
deadlineDate: "Datum ukončení"
|
||||||
|
deadlineTime: "Hodin"
|
||||||
|
duration: "Trvání"
|
||||||
_visibility:
|
_visibility:
|
||||||
home: "Domů"
|
home: "Domů"
|
||||||
followers: "Sledující"
|
followers: "Sledující"
|
||||||
|
_postForm:
|
||||||
|
_placeholders:
|
||||||
|
f: "Čekám, až něco napíšete..."
|
||||||
_profile:
|
_profile:
|
||||||
name: "Jméno"
|
name: "Jméno"
|
||||||
username: "Uživatelské jméno"
|
username: "Uživatelské jméno"
|
||||||
|
description: "O mně"
|
||||||
|
youCanIncludeHashtags: "V popisku o Vás můžete použít i hastagy."
|
||||||
|
metadata: "Doplňující informace"
|
||||||
|
metadataContent: "Obsah"
|
||||||
_exportOrImport:
|
_exportOrImport:
|
||||||
|
allNotes: "Všechny poznámky"
|
||||||
followingList: "Sledovaní"
|
followingList: "Sledovaní"
|
||||||
muteList: "Ztlumit"
|
muteList: "Ztlumit"
|
||||||
blockingList: "Zablokovat"
|
blockingList: "Zablokovat"
|
||||||
userLists: "Seznamy"
|
userLists: "Seznamy"
|
||||||
_charts:
|
_charts:
|
||||||
federation: "Federace"
|
federation: "Federace"
|
||||||
|
apRequest: "Požadavek"
|
||||||
|
usersTotal: "Celkem uživatelů"
|
||||||
|
activeUsers: "Aktivní uživatelé"
|
||||||
|
notesTotal: "Celkový počet poznámek"
|
||||||
_timelines:
|
_timelines:
|
||||||
home: "Domů"
|
home: "Domů"
|
||||||
|
global: "Globální"
|
||||||
_pages:
|
_pages:
|
||||||
|
newPage: "Vytvořit novou stránku"
|
||||||
|
editPage: "Upravit stránku"
|
||||||
|
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"
|
||||||
|
invalidNameText: "Ujistěte se že jméno stránky je vyplněno"
|
||||||
|
contents: "Obsah"
|
||||||
|
fontSerif: "Serif"
|
||||||
|
fontSansSerif: "Sans Serif"
|
||||||
|
chooseBlock: "Přidat blok"
|
||||||
|
selectType: "Vyberte typ"
|
||||||
|
contentBlocks: "Obsah"
|
||||||
|
inputBlocks: "Vstup"
|
||||||
|
specialBlocks: "Speciální"
|
||||||
blocks:
|
blocks:
|
||||||
|
text: "Text"
|
||||||
|
textarea: "Textové pole"
|
||||||
|
section: "Sekce"
|
||||||
image: "Obrázky"
|
image: "Obrázky"
|
||||||
|
button: "Tlačítko"
|
||||||
|
if: "Pokud"
|
||||||
|
_if:
|
||||||
|
variable: "Proměnná"
|
||||||
|
_post:
|
||||||
|
text: "Obsah"
|
||||||
|
canvasId: "Canvas ID"
|
||||||
|
_textInput:
|
||||||
|
name: "Jméno proměnné"
|
||||||
|
text: "Titulek"
|
||||||
|
default: "Výchozí hodnota"
|
||||||
|
_textareaInput:
|
||||||
|
name: "Jméno proměnné"
|
||||||
|
text: "Titulek"
|
||||||
|
default: "Výchozí hodnota"
|
||||||
|
_numberInput:
|
||||||
|
name: "Jméno proměnné"
|
||||||
|
text: "Titulek"
|
||||||
|
default: "Výchozí hodnota"
|
||||||
|
canvas: "Canvas"
|
||||||
|
_canvas:
|
||||||
|
id: "Canvas ID"
|
||||||
|
width: "Šířka"
|
||||||
|
height: "Výška"
|
||||||
|
_switch:
|
||||||
|
name: "Jméno proměnné"
|
||||||
|
text: "Titulek"
|
||||||
|
default: "Výchozí hodnota"
|
||||||
|
_counter:
|
||||||
|
name: "Jméno proměnné"
|
||||||
|
text: "Titulek"
|
||||||
|
inc: "Krok"
|
||||||
|
_button:
|
||||||
|
text: "Titulek"
|
||||||
|
colored: "Barevné"
|
||||||
|
_action:
|
||||||
|
_dialog:
|
||||||
|
content: "Obsah"
|
||||||
|
_radioButton:
|
||||||
|
name: "Jméno proměnné"
|
||||||
|
default: "Výchozí hodnota"
|
||||||
script:
|
script:
|
||||||
categories:
|
categories:
|
||||||
list: "Seznamy"
|
list: "Seznamy"
|
||||||
blocks:
|
blocks:
|
||||||
|
text: "Text"
|
||||||
|
_strLen:
|
||||||
|
arg1: "Text"
|
||||||
|
_strPick:
|
||||||
|
arg1: "Text"
|
||||||
|
_strReplace:
|
||||||
|
arg1: "Text"
|
||||||
|
_strReverse:
|
||||||
|
arg1: "Text"
|
||||||
_join:
|
_join:
|
||||||
arg1: "Seznamy"
|
arg1: "Seznamy"
|
||||||
|
_subtract:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
_multiply:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
_divide:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
_mod:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
round: "Zaokrouhlení zlomku"
|
||||||
|
_round:
|
||||||
|
arg1: "Číselná hodnota"
|
||||||
|
eq: "A a B jsou stejné"
|
||||||
|
_eq:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
notEq: "A a B jsou odlišné"
|
||||||
|
_notEq:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
_and:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
_or:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
_lt:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
_gt:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
_ltEq:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
_gtEq:
|
||||||
|
arg1: "A"
|
||||||
|
arg2: "B"
|
||||||
|
if: "Větev"
|
||||||
|
_if:
|
||||||
|
arg1: "Pokud"
|
||||||
|
arg2: "Potom"
|
||||||
|
arg3: "Nebo"
|
||||||
|
random: "Náhodně"
|
||||||
|
_random:
|
||||||
|
arg1: "Pravděpodobnost"
|
||||||
|
rannum: "Náhodné číslo"
|
||||||
|
_rannum:
|
||||||
|
arg1: "Minimální hodnota"
|
||||||
|
arg2: "Maximální hodnota"
|
||||||
_randomPick:
|
_randomPick:
|
||||||
arg1: "Seznamy"
|
arg1: "Seznamy"
|
||||||
|
_dailyRandom:
|
||||||
|
arg1: "Pravděpodobnost"
|
||||||
|
_dailyRannum:
|
||||||
|
arg1: "Minimální hodnota"
|
||||||
|
arg2: "Maximální hodnota"
|
||||||
_dailyRandomPick:
|
_dailyRandomPick:
|
||||||
arg1: "Seznamy"
|
arg1: "Seznamy"
|
||||||
|
_seedRandom:
|
||||||
|
arg2: "Pravděpodobnost"
|
||||||
|
_seedRannum:
|
||||||
|
arg2: "Minimální hodnota"
|
||||||
|
arg3: "Maximální hodnota"
|
||||||
_seedRandomPick:
|
_seedRandomPick:
|
||||||
arg2: "Seznamy"
|
arg2: "Seznamy"
|
||||||
_pick:
|
_pick:
|
||||||
arg1: "Seznamy"
|
arg1: "Seznamy"
|
||||||
_listLen:
|
_listLen:
|
||||||
arg1: "Seznamy"
|
arg1: "Seznamy"
|
||||||
|
number: "Číselná hodnota"
|
||||||
|
_stringToNumber:
|
||||||
|
arg1: "Text"
|
||||||
|
_numberToString:
|
||||||
|
arg1: "Číselná hodnota"
|
||||||
|
_splitStrByLine:
|
||||||
|
arg1: "Text"
|
||||||
types:
|
types:
|
||||||
|
string: "Text"
|
||||||
|
number: "Číselná hodnota"
|
||||||
array: "Seznamy"
|
array: "Seznamy"
|
||||||
_notification:
|
_notification:
|
||||||
youWereFollowed: "Máte nového následovníka"
|
youWereFollowed: "Máte nového následovníka"
|
||||||
youWereInvitedToGroup: "Pozvat do skupiny"
|
youWereInvitedToGroup: "Pozvat do skupiny"
|
||||||
_types:
|
_types:
|
||||||
|
all: "Vše"
|
||||||
follow: "Sledovaní"
|
follow: "Sledovaní"
|
||||||
mention: "Zmínění"
|
mention: "Zmínění"
|
||||||
|
reply: "Odpovědi"
|
||||||
renote: "Přeposlat"
|
renote: "Přeposlat"
|
||||||
quote: "Citovat"
|
quote: "Citovat"
|
||||||
reaction: "Reakce"
|
reaction: "Reakce"
|
||||||
|
|
|
@ -134,7 +134,7 @@ emoji: "Emoji"
|
||||||
emojis: "Emoji"
|
emojis: "Emoji"
|
||||||
emojiName: "Emoji name"
|
emojiName: "Emoji name"
|
||||||
emojiUrl: "Emoji URL"
|
emojiUrl: "Emoji URL"
|
||||||
addEmoji: "Add an emoji"
|
addEmoji: "Add"
|
||||||
settingGuide: "Recommended settings"
|
settingGuide: "Recommended settings"
|
||||||
cacheRemoteFiles: "Cache remote files"
|
cacheRemoteFiles: "Cache remote files"
|
||||||
cacheRemoteFilesDescription: "When this setting is disabled, remote files are loaded directly from the remote instance. Disabling this will decrease storage usage, but increase traffic, as thumbnails will not be generated."
|
cacheRemoteFilesDescription: "When this setting is disabled, remote files are loaded directly from the remote instance. Disabling this will decrease storage usage, but increase traffic, as thumbnails will not be generated."
|
||||||
|
@ -783,7 +783,7 @@ emailNotConfiguredWarning: "Email address not set."
|
||||||
ratio: "Ratio"
|
ratio: "Ratio"
|
||||||
secureMode: "Secure Mode (Authorized Fetch)"
|
secureMode: "Secure Mode (Authorized Fetch)"
|
||||||
instanceSecurity: "Instance Security"
|
instanceSecurity: "Instance Security"
|
||||||
secureModeInfo: "When requesting from other instances, do not send back without proof. signToActivityPubGet must be true in the other instance's configuration file."
|
secureModeInfo: "When requesting from other instances, do not send back without proof."
|
||||||
privateMode: "Private Mode"
|
privateMode: "Private Mode"
|
||||||
privateModeInfo: "When enabled, only whitelisted instances can federate with your instances. All notes will be hidden from the public."
|
privateModeInfo: "When enabled, only whitelisted instances can federate with your instances. All notes will be hidden from the public."
|
||||||
allowedInstances: "Whitelisted Instances"
|
allowedInstances: "Whitelisted Instances"
|
||||||
|
@ -989,7 +989,7 @@ _registry:
|
||||||
domain: "Domain"
|
domain: "Domain"
|
||||||
createKey: "Create key"
|
createKey: "Create key"
|
||||||
_aboutMisskey:
|
_aboutMisskey:
|
||||||
about: "Calckey is a fork of Misskey made by ThatOneCalculator being developed since 2022."
|
about: "Calckeyは、2022年から開発されているThatOneCalculator社製のMisskeyのforkです。"
|
||||||
contributors: "Main contributors"
|
contributors: "Main contributors"
|
||||||
allContributors: "All contributors"
|
allContributors: "All contributors"
|
||||||
source: "Source code"
|
source: "Source code"
|
||||||
|
|
|
@ -379,7 +379,7 @@ exploreFediverse: "Fediverseを探索"
|
||||||
popularTags: "人気のタグ"
|
popularTags: "人気のタグ"
|
||||||
userList: "リスト"
|
userList: "リスト"
|
||||||
about: "情報"
|
about: "情報"
|
||||||
aboutMisskey: "Misskeyについて"
|
aboutMisskey: "Calckeyについて"
|
||||||
administrator: "管理者"
|
administrator: "管理者"
|
||||||
token: "トークン"
|
token: "トークン"
|
||||||
twoStepAuthentication: "二段階認証"
|
twoStepAuthentication: "二段階認証"
|
||||||
|
|
|
@ -562,6 +562,7 @@ author: "작성자"
|
||||||
leaveConfirm: "저장하지 않은 변경사항이 있습니다. 취소하시겠습니까?"
|
leaveConfirm: "저장하지 않은 변경사항이 있습니다. 취소하시겠습니까?"
|
||||||
manage: "관리"
|
manage: "관리"
|
||||||
plugins: "플러그인"
|
plugins: "플러그인"
|
||||||
|
preferencesBackups: "환경설정 백업"
|
||||||
deck: "덱"
|
deck: "덱"
|
||||||
undeck: "덱 해제"
|
undeck: "덱 해제"
|
||||||
useBlurEffectForModal: "모달에 흐림 효과 사용"
|
useBlurEffectForModal: "모달에 흐림 효과 사용"
|
||||||
|
@ -612,7 +613,7 @@ create: "생성"
|
||||||
notificationSetting: "알림 설정"
|
notificationSetting: "알림 설정"
|
||||||
notificationSettingDesc: "표시할 알림의 종류를 선택해 주세요."
|
notificationSettingDesc: "표시할 알림의 종류를 선택해 주세요."
|
||||||
useGlobalSetting: "글로벌 설정을 사용하기"
|
useGlobalSetting: "글로벌 설정을 사용하기"
|
||||||
useGlobalSettingDesc: "활성화하면 계정의 알림 설정이 적용되니다. 비활성화하면 개별적으로 설정할 수 있게 됩니다."
|
useGlobalSettingDesc: "활성화하면 계정의 알림 설정이 적용됩니다. 비활성화하면 개별적으로 설정할 수 있게 됩니다."
|
||||||
other: "기타"
|
other: "기타"
|
||||||
regenerateLoginToken: "로그인 토큰을 재생성"
|
regenerateLoginToken: "로그인 토큰을 재생성"
|
||||||
regenerateLoginTokenDescription: "로그인할 때 사용되는 내부 토큰을 재생성합니다. 일반적으로 이 작업을 실행할 필요는 없습니다. 이 기능을 사용하면 이 계정으로 로그인한 모든 기기에서 로그아웃됩니다."
|
regenerateLoginTokenDescription: "로그인할 때 사용되는 내부 토큰을 재생성합니다. 일반적으로 이 작업을 실행할 필요는 없습니다. 이 기능을 사용하면 이 계정으로 로그인한 모든 기기에서 로그아웃됩니다."
|
||||||
|
@ -941,6 +942,24 @@ _plugin:
|
||||||
install: "플러그인 설치"
|
install: "플러그인 설치"
|
||||||
installWarn: "신뢰할 수 없는 플러그인은 설치하지 않는 것이 좋습니다."
|
installWarn: "신뢰할 수 없는 플러그인은 설치하지 않는 것이 좋습니다."
|
||||||
manage: "플러그인 관리"
|
manage: "플러그인 관리"
|
||||||
|
_preferencesBackups:
|
||||||
|
list: "생성한 백업"
|
||||||
|
saveNew: "새 백업 만들기"
|
||||||
|
loadFile: "파일 가져오기"
|
||||||
|
apply: "이 기기에 적용"
|
||||||
|
save: "현재 설정으로 덮어쓰기"
|
||||||
|
inputName: "백업 이름을 입력하세요"
|
||||||
|
cannotSave: "저장하지 못했습니다"
|
||||||
|
nameAlreadyExists: "\"{name}\" 백업이 이미 존재합니다. 다른 이름을 설정하여 주십시오."
|
||||||
|
applyConfirm: "\"{name}\" 백업을 현재 기기에 적용하시겠습니까? 현재 설정은 덮어 씌워집니다."
|
||||||
|
saveConfirm: "{name} 을 덮어쓰시겠습니까?"
|
||||||
|
deleteConfirm: "{name} 을(를) 삭제하시겠습니까?"
|
||||||
|
renameConfirm: "\"{old}\" 백업을 \"{new}\"(으)로 바꾸시겠습니까?"
|
||||||
|
noBackups: "저장된 백업이 없습니다. \"새 백업 만들기\"를 눌러 현재 클라이언트 설정을 서버에 백업할 수 있습니다."
|
||||||
|
createdAt: "생성 날짜: {date} {time}"
|
||||||
|
updatedAt: "갱신 날짜: {date} {time}"
|
||||||
|
cannotLoad: "가져오기에 실패했습니다"
|
||||||
|
invalidFile: "파일 형식이 올바르지 않습니다."
|
||||||
_registry:
|
_registry:
|
||||||
scope: "범위"
|
scope: "범위"
|
||||||
key: "키"
|
key: "키"
|
||||||
|
@ -1258,6 +1277,7 @@ _widgets:
|
||||||
activity: "활동"
|
activity: "활동"
|
||||||
photos: "사진"
|
photos: "사진"
|
||||||
digitalClock: "디지털 시계"
|
digitalClock: "디지털 시계"
|
||||||
|
unixClock: "UNIX 시계"
|
||||||
federation: "연합"
|
federation: "연합"
|
||||||
instanceCloud: "인스턴스 구름"
|
instanceCloud: "인스턴스 구름"
|
||||||
postForm: "글 입력란"
|
postForm: "글 입력란"
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
---
|
---
|
||||||
_lang_: "język polski"
|
_lang_: "Polski"
|
||||||
headlineMisskey: "Sieć połączona wpisami"
|
headlineMisskey: "Sieć połączona wpisami"
|
||||||
introMisskey: "Misskey jest serwisem mikroblogowym typu open source.\nMisskey to opensource'owy serwis mikroblogowy, w którym możesz tworzyć \"notatki\", aby dzielić się tym, co się dzieje i opowiadać wszystkim o sobie.\nMożesz również użyć funkcji \"Reakcje\", aby szybko dodać własne reakcje do notatek innych użytkowników👍.\nOdkrywaj nowy świat🚀!"
|
introMisskey: "Misskey jest serwisem mikroblogowym typu open source.\nMisskey to opensource'owy serwis mikroblogowy, w którym możesz tworzyć \"notatki\", aby dzielić się tym, co się dzieje i opowiadać wszystkim o sobie.\nMożesz również użyć funkcji \"Reakcje\", aby szybko dodać własne reakcje do notatek innych użytkowników👍.\nOdkrywaj nowy świat🚀!"
|
||||||
monthAndDay: "{month}-{day}"
|
monthAndDay: "{month}-{day}"
|
||||||
|
@ -88,7 +88,7 @@ enterListName: "Nazwa listy"
|
||||||
privacy: "Prywatność"
|
privacy: "Prywatność"
|
||||||
makeFollowManuallyApprove: "Prośby o możliwość obserwacji wymagają zatwierdzenia"
|
makeFollowManuallyApprove: "Prośby o możliwość obserwacji wymagają zatwierdzenia"
|
||||||
defaultNoteVisibility: "Domyślna widoczność"
|
defaultNoteVisibility: "Domyślna widoczność"
|
||||||
follow: "Obserwowani"
|
follow: "Obserwuj"
|
||||||
followRequest: "Poproś o możliwość obserwacji"
|
followRequest: "Poproś o możliwość obserwacji"
|
||||||
followRequests: "Prośby o możliwość obserwacji"
|
followRequests: "Prośby o możliwość obserwacji"
|
||||||
unfollow: "Przestań obserwować"
|
unfollow: "Przestań obserwować"
|
||||||
|
@ -127,7 +127,7 @@ unsuspendConfirm: "Czy na pewno chcesz cofnąć zawieszenie tego konta?"
|
||||||
selectList: "Wybierz listę"
|
selectList: "Wybierz listę"
|
||||||
selectAntenna: "Wybierz Antennę"
|
selectAntenna: "Wybierz Antennę"
|
||||||
selectWidget: "Wybierz widżet"
|
selectWidget: "Wybierz widżet"
|
||||||
editWidgets: "Edytuj widżet"
|
editWidgets: "Edytuj widżety"
|
||||||
editWidgetsExit: "Gotowe"
|
editWidgetsExit: "Gotowe"
|
||||||
customEmojis: "Niestandardowe emoji"
|
customEmojis: "Niestandardowe emoji"
|
||||||
emoji: "Emoji"
|
emoji: "Emoji"
|
||||||
|
@ -142,6 +142,7 @@ flagAsBot: "To konto jest botem"
|
||||||
flagAsBotDescription: "Jeżeli ten kanał jest kontrolowany przez jakiś program, ustaw tę opcję. Jeżeli włączona, będzie działać jako flaga informująca innych programistów, aby zapobiegać nieskończonej interakcji z różnymi botami i dostosowywać wewnętrzne systemy Misskey, traktując konto jako bota."
|
flagAsBotDescription: "Jeżeli ten kanał jest kontrolowany przez jakiś program, ustaw tę opcję. Jeżeli włączona, będzie działać jako flaga informująca innych programistów, aby zapobiegać nieskończonej interakcji z różnymi botami i dostosowywać wewnętrzne systemy Misskey, traktując konto jako bota."
|
||||||
flagAsCat: "To konto jest kotem"
|
flagAsCat: "To konto jest kotem"
|
||||||
flagAsCatDescription: "Przełącz tę opcję, aby konto było oznaczone jako kot."
|
flagAsCatDescription: "Przełącz tę opcję, aby konto było oznaczone jako kot."
|
||||||
|
flagShowTimelineReplies: "Pokazuj odpowiedzi na osi czasu"
|
||||||
autoAcceptFollowed: "Automatycznie przyjmuj prośby o możliwość obserwacji od użytkowników, których obserwujesz"
|
autoAcceptFollowed: "Automatycznie przyjmuj prośby o możliwość obserwacji od użytkowników, których obserwujesz"
|
||||||
addAccount: "Dodaj konto"
|
addAccount: "Dodaj konto"
|
||||||
loginFailed: "Nie udało się zalogować"
|
loginFailed: "Nie udało się zalogować"
|
||||||
|
@ -201,6 +202,7 @@ done: "Gotowe"
|
||||||
processing: "Przetwarzanie"
|
processing: "Przetwarzanie"
|
||||||
preview: "Podgląd"
|
preview: "Podgląd"
|
||||||
default: "Domyślne"
|
default: "Domyślne"
|
||||||
|
defaultValueIs: "Domyślne: {value}"
|
||||||
noCustomEmojis: "Brak emoji"
|
noCustomEmojis: "Brak emoji"
|
||||||
noJobs: "Brak zadań"
|
noJobs: "Brak zadań"
|
||||||
federating: "Federowanie"
|
federating: "Federowanie"
|
||||||
|
@ -235,6 +237,7 @@ resetAreYouSure: "Czy na pewno chcesz zresetować?"
|
||||||
saved: "Zapisano"
|
saved: "Zapisano"
|
||||||
messaging: "Wiadomości"
|
messaging: "Wiadomości"
|
||||||
upload: "Wyślij"
|
upload: "Wyślij"
|
||||||
|
keepOriginalUploading: "Zachowaj oryginalny obraz"
|
||||||
fromDrive: "Z dysku"
|
fromDrive: "Z dysku"
|
||||||
fromUrl: "Z adresu URL"
|
fromUrl: "Z adresu URL"
|
||||||
uploadFromUrl: "Wyślij z adresu URL"
|
uploadFromUrl: "Wyślij z adresu URL"
|
||||||
|
@ -377,6 +380,7 @@ administrator: "Admin"
|
||||||
token: "Token"
|
token: "Token"
|
||||||
twoStepAuthentication: "Uwierzytelnianie dwuskładnikowe"
|
twoStepAuthentication: "Uwierzytelnianie dwuskładnikowe"
|
||||||
moderator: "Moderator"
|
moderator: "Moderator"
|
||||||
|
moderation: "Moderacja"
|
||||||
nUsersMentioned: "{n} wspomnianych użytkowników"
|
nUsersMentioned: "{n} wspomnianych użytkowników"
|
||||||
securityKey: "Klucz bezpieczeństwa"
|
securityKey: "Klucz bezpieczeństwa"
|
||||||
securityKeyName: "Nazwa klucza"
|
securityKeyName: "Nazwa klucza"
|
||||||
|
@ -444,11 +448,13 @@ uiLanguage: "Język wyświetlania UI"
|
||||||
groupInvited: "Zaproszony(-a) do grupy"
|
groupInvited: "Zaproszony(-a) do grupy"
|
||||||
aboutX: "O {x}"
|
aboutX: "O {x}"
|
||||||
useOsNativeEmojis: "Używaj natywnych Emoji systemu"
|
useOsNativeEmojis: "Używaj natywnych Emoji systemu"
|
||||||
|
disableDrawer: "Nie używaj menu w stylu szuflady"
|
||||||
youHaveNoGroups: "Nie masz żadnych grup"
|
youHaveNoGroups: "Nie masz żadnych grup"
|
||||||
joinOrCreateGroup: "Uzyskaj zaproszenie do dołączenia do grupy lub utwórz własną grupę."
|
joinOrCreateGroup: "Uzyskaj zaproszenie do dołączenia do grupy lub utwórz własną grupę."
|
||||||
noHistory: "Brak historii"
|
noHistory: "Brak historii"
|
||||||
signinHistory: "Historia logowania"
|
signinHistory: "Historia logowania"
|
||||||
disableAnimatedMfm: "Wyłącz MFM z animacją"
|
disableAnimatedMfm: "Wyłącz MFM z animacją"
|
||||||
|
doing: "Przetwarzanie..."
|
||||||
category: "Kategoria"
|
category: "Kategoria"
|
||||||
tags: "Tagi"
|
tags: "Tagi"
|
||||||
docSource: "Źródło tego dokumentu"
|
docSource: "Źródło tego dokumentu"
|
||||||
|
@ -523,6 +529,9 @@ deleteAllFilesConfirm: "Czy na pewno chcesz usunąć wszystkie pliki?"
|
||||||
removeAllFollowingDescription: "Przestań obserwować wszystkie konta z {host}. Wykonaj to, jeżeli instancja już nie istnieje."
|
removeAllFollowingDescription: "Przestań obserwować wszystkie konta z {host}. Wykonaj to, jeżeli instancja już nie istnieje."
|
||||||
userSuspended: "To konto zostało zawieszone."
|
userSuspended: "To konto zostało zawieszone."
|
||||||
userSilenced: "Ten użytkownik został wyciszony."
|
userSilenced: "Ten użytkownik został wyciszony."
|
||||||
|
yourAccountSuspendedTitle: "To konto jest zawieszone"
|
||||||
|
yourAccountSuspendedDescription: "To konto zostało zawieszone z powodu złamania regulaminu serwera lub innych podobnych. Skontaktuj się z administratorem, jeśli chciałbyś poznać bardziej szczegółowy powód. Proszę nie zakładać nowego konta."
|
||||||
|
menu: "Menu"
|
||||||
divider: "Rozdzielacz"
|
divider: "Rozdzielacz"
|
||||||
addItem: "Dodaj element"
|
addItem: "Dodaj element"
|
||||||
relays: "Przekaźniki"
|
relays: "Przekaźniki"
|
||||||
|
@ -541,7 +550,7 @@ disablePlayer: "Zamknij odtwarzacz wideo"
|
||||||
expandTweet: "Rozwiń tweet"
|
expandTweet: "Rozwiń tweet"
|
||||||
themeEditor: "Edytor motywu"
|
themeEditor: "Edytor motywu"
|
||||||
description: "Opis"
|
description: "Opis"
|
||||||
describeFile: "dodaj podpis"
|
describeFile: "Dodaj podpis"
|
||||||
enterFileDescription: "Wprowadź napis"
|
enterFileDescription: "Wprowadź napis"
|
||||||
author: "Autor"
|
author: "Autor"
|
||||||
leaveConfirm: "Są niezapisane zmiany. Czy chcesz je odrzucić?"
|
leaveConfirm: "Są niezapisane zmiany. Czy chcesz je odrzucić?"
|
||||||
|
@ -578,6 +587,7 @@ emptyToDisableSmtpAuth: "Pozostaw adres e-mail i hasło puste, aby wyłączyć w
|
||||||
smtpSecureInfo: "Wyłącz, jeżeli używasz STARTTLS"
|
smtpSecureInfo: "Wyłącz, jeżeli używasz STARTTLS"
|
||||||
testEmail: "Przetestuj dostarczanie wiadomości e-mail"
|
testEmail: "Przetestuj dostarczanie wiadomości e-mail"
|
||||||
wordMute: "Wyciszenie słowa"
|
wordMute: "Wyciszenie słowa"
|
||||||
|
instanceMute: "Wyciszone instancje"
|
||||||
userSaysSomething: "{name} powiedział(-a) coś"
|
userSaysSomething: "{name} powiedział(-a) coś"
|
||||||
makeActive: "Aktywuj"
|
makeActive: "Aktywuj"
|
||||||
display: "Wyświetlanie"
|
display: "Wyświetlanie"
|
||||||
|
@ -607,6 +617,7 @@ fillAbuseReportDescription: "Wypełnij szczegóły zgłoszenia. Jeżeli dotyczy
|
||||||
abuseReported: "Twoje zgłoszenie zostało wysłane. Dziękujemy."
|
abuseReported: "Twoje zgłoszenie zostało wysłane. Dziękujemy."
|
||||||
reporteeOrigin: "Pochodzenie zgłoszonego"
|
reporteeOrigin: "Pochodzenie zgłoszonego"
|
||||||
reporterOrigin: "Pochodzenie zgłaszającego"
|
reporterOrigin: "Pochodzenie zgłaszającego"
|
||||||
|
forwardReport: "Przekaż zgłoszenie do innej instancji"
|
||||||
send: "Wyślij"
|
send: "Wyślij"
|
||||||
abuseMarkAsResolved: "Oznacz zgłoszenie jako rozwiązane"
|
abuseMarkAsResolved: "Oznacz zgłoszenie jako rozwiązane"
|
||||||
openInNewTab: "Otwórz w nowej karcie"
|
openInNewTab: "Otwórz w nowej karcie"
|
||||||
|
@ -619,8 +630,12 @@ random: "Losowe"
|
||||||
system: "System"
|
system: "System"
|
||||||
switchUi: "Przełącz interfejs użytkownika"
|
switchUi: "Przełącz interfejs użytkownika"
|
||||||
desktop: "Pulpit"
|
desktop: "Pulpit"
|
||||||
|
clip: "Klip"
|
||||||
createNew: "Utwórz nowy"
|
createNew: "Utwórz nowy"
|
||||||
optional: "Nieobowiązkowe"
|
optional: "Nieobowiązkowe"
|
||||||
|
createNewClip: "Utwórz nowy klip"
|
||||||
|
unclip: "Odczep"
|
||||||
|
confirmToUnclipAlreadyClippedNote: "Ten wpis jest już częścią klipu \"{name}\". Czy chcesz ją usunąć z tego klipu?"
|
||||||
public: "Publiczny"
|
public: "Publiczny"
|
||||||
i18nInfo: "Misskey jest tłumaczone na wiele języków przez wolontariuszy. Możesz pomóc na {link}."
|
i18nInfo: "Misskey jest tłumaczone na wiele języków przez wolontariuszy. Możesz pomóc na {link}."
|
||||||
manageAccessTokens: "Zarządzaj tokenami dostępu"
|
manageAccessTokens: "Zarządzaj tokenami dostępu"
|
||||||
|
@ -654,6 +669,7 @@ pageLikesCount: "Liczba otrzymanych polubień stron"
|
||||||
pageLikedCount: "Liczba polubionych stron"
|
pageLikedCount: "Liczba polubionych stron"
|
||||||
contact: "Kontakt"
|
contact: "Kontakt"
|
||||||
useSystemFont: "Używaj domyślnej czcionki systemu"
|
useSystemFont: "Używaj domyślnej czcionki systemu"
|
||||||
|
clips: "Klipy"
|
||||||
experimentalFeatures: "Eksperymentalne funkcje"
|
experimentalFeatures: "Eksperymentalne funkcje"
|
||||||
developer: "Programista"
|
developer: "Programista"
|
||||||
makeExplorable: "Pokazuj konto na stronie „Eksploruj”"
|
makeExplorable: "Pokazuj konto na stronie „Eksploruj”"
|
||||||
|
@ -725,6 +741,7 @@ notRecommended: "Nie zalecane"
|
||||||
botProtection: "Zabezpieczenie przed botami"
|
botProtection: "Zabezpieczenie przed botami"
|
||||||
instanceBlocking: "Zablokowane instancje"
|
instanceBlocking: "Zablokowane instancje"
|
||||||
selectAccount: "Wybierz konto"
|
selectAccount: "Wybierz konto"
|
||||||
|
switchAccount: "Przełącz konto"
|
||||||
enabled: "Właczono"
|
enabled: "Właczono"
|
||||||
disabled: "Wyłączono"
|
disabled: "Wyłączono"
|
||||||
quickAction: "Szybkie działania"
|
quickAction: "Szybkie działania"
|
||||||
|
@ -756,22 +773,103 @@ global: "Globalna"
|
||||||
squareAvatars: "Wyświetlaj kwadratowe awatary"
|
squareAvatars: "Wyświetlaj kwadratowe awatary"
|
||||||
sent: "Wyślij"
|
sent: "Wyślij"
|
||||||
received: "Otrzymane"
|
received: "Otrzymane"
|
||||||
|
searchResult: "Wyniki wyszukiwania"
|
||||||
hashtags: "Hashtag"
|
hashtags: "Hashtag"
|
||||||
|
troubleshooting: "Rozwiązywanie problemów"
|
||||||
|
useBlurEffect: "Użyj efektów rozmycia w UI"
|
||||||
|
learnMore: "Dowiedz się więcej"
|
||||||
|
misskeyUpdated: "Misskey zostało zaktualizowane!"
|
||||||
|
whatIsNew: "Pokaż zmiany"
|
||||||
|
translate: "Przetłumacz"
|
||||||
|
translatedFrom: "Przetłumaczone z {x}"
|
||||||
|
accountDeletionInProgress: "Trwa usuwanie konta"
|
||||||
|
usernameInfo: "Nazwa, która identyfikuje Twoje konto spośród innych na tym serwerze. Możesz użyć alfabetu (a~z, A~Z), cyfr (0~9) lub podkreślników (_). Nazwy użytkownika nie mogą być później zmieniane."
|
||||||
|
aiChanMode: "Tryb Ai"
|
||||||
|
keepCw: "Zostaw ostrzeżenia o zawartości"
|
||||||
pubSub: "Konta Pub/Sub"
|
pubSub: "Konta Pub/Sub"
|
||||||
|
resolved: "Rozwiązane"
|
||||||
|
unresolved: "Nierozwiązane"
|
||||||
|
breakFollow: "Usuń obserwującego"
|
||||||
|
itsOn: "Włączone"
|
||||||
|
itsOff: "Wyłączone"
|
||||||
|
unread: "Nieodczytane"
|
||||||
|
filter: "Filtr"
|
||||||
|
controlPanel: "Panel sterowania"
|
||||||
|
manageAccounts: "Zarządzaj kontami"
|
||||||
|
makeReactionsPublic: "Ustawić historię reakcji jako publiczną"
|
||||||
|
makeReactionsPublicDescription: "To spowoduje, że lista wszystkich Twoich dotychczasowych reakcji będzie publicznie widoczna."
|
||||||
|
classic: "Klasyczny"
|
||||||
|
muteThread: "Wycisz wątek"
|
||||||
|
unmuteThread: "Wyłącz wyciszenie wątku"
|
||||||
|
ffVisibility: "Widoczność obserwowanych/obserwujących"
|
||||||
|
ffVisibilityDescription: "Pozwala skonfigurować, kto może zobaczyć, kogo obserwujesz i kto Cię obserwuje."
|
||||||
|
continueThread: "Pokaż kontynuację wątku"
|
||||||
|
deleteAccountConfirm: "Spowoduje to nieodwracalne usunięcie Twojego konta. Kontynuować?"
|
||||||
|
incorrectPassword: "Nieprawidłowe hasło."
|
||||||
|
voteConfirm: "Potwierdzić swój głos na \"{choice}\"?"
|
||||||
hide: "Ukryj"
|
hide: "Ukryj"
|
||||||
|
leaveGroup: "Opuść grupę"
|
||||||
|
leaveGroupConfirm: "Czy na pewno chcesz opuścić \"{name}\"?"
|
||||||
|
useDrawerReactionPickerForMobile: "Wyświetlaj wybornik reakcji jako szufladę na urządzeniach mobilnych"
|
||||||
|
welcomeBackWithName: "Witaj z powrotem, {name}"
|
||||||
|
clickToFinishEmailVerification: "Kliknij [{ok}], aby zakończyć weryfikację e-mail."
|
||||||
|
overridedDeviceKind: "Typ urządzenia"
|
||||||
|
smartphone: "Smartfon"
|
||||||
|
tablet: "Tablet"
|
||||||
|
auto: "Automatycznie"
|
||||||
|
size: "Rozmiar"
|
||||||
|
numberOfColumn: "Liczba kolumn"
|
||||||
searchByGoogle: "Szukaj"
|
searchByGoogle: "Szukaj"
|
||||||
indefinitely: "Nigdy"
|
indefinitely: "Nigdy"
|
||||||
file: "Pliki"
|
file: "Pliki"
|
||||||
|
logoutConfirm: "Czy na pewno chcesz się wylogować?"
|
||||||
|
lastActiveDate: "Ostatnio użyte w"
|
||||||
|
statusbar: "Pasek stanu"
|
||||||
|
pleaseSelect: "Wybierz opcję"
|
||||||
reverse: "Odwróć"
|
reverse: "Odwróć"
|
||||||
colored: "Kolorowe"
|
colored: "Kolorowe"
|
||||||
label: "Etykieta"
|
label: "Etykieta"
|
||||||
|
type: "Typ"
|
||||||
|
speed: "Prędkość"
|
||||||
|
localOnly: "Lokalne tylko"
|
||||||
|
failedToUpload: "Przesyłanie nie powiodło się"
|
||||||
|
cannotUploadBecauseInappropriate: "Nie można przesłać tego pliku, ponieważ jego części zostały wykryte jako potencjalnie nieodpowiednie."
|
||||||
|
cannotUploadBecauseNoFreeSpace: "Przesyłanie nie powiodło się z powodu braku miejsca na dysku."
|
||||||
|
beta: "Beta"
|
||||||
|
enableAutoSensitive: "Automatyczne oznaczanie NSFW"
|
||||||
|
enableAutoSensitiveDescription: "Umożliwia automatyczne wykrywanie i oznaczanie zawartości NSFW za pomocą uczenia maszynowego. Nawet jeśli ta opcja jest wyłączona, może być włączona w całej instancji."
|
||||||
|
navbar: "Pasek nawigacyjny"
|
||||||
account: "Konta"
|
account: "Konta"
|
||||||
|
move: "Przenieś"
|
||||||
|
_sensitiveMediaDetection:
|
||||||
|
description: "Zmniejsza wysiłek związany z moderacją serwera dzięki automatycznemu rozpoznawaniu zawartości NSFW za pomocą uczenia maszynowego. To nieznacznie zwiększy obciążenie serwera."
|
||||||
|
setSensitiveFlagAutomatically: "Oznacz jako NSFW"
|
||||||
|
_emailUnavailable:
|
||||||
|
used: "Ten adres e-mail jest już używany"
|
||||||
|
format: "Format tego adresu e-mail jest nieprawidłowy"
|
||||||
|
disposable: "Nie można używać jednorazowych adresów e-mail"
|
||||||
|
mx: "Ten serwer e-mail jest nieprawidłowy"
|
||||||
|
smtp: "Ten serwer e-mail nie odpowiada"
|
||||||
_ffVisibility:
|
_ffVisibility:
|
||||||
public: "Publikuj"
|
public: "Publiczne"
|
||||||
|
followers: "Widoczne tylko dla obserwujących"
|
||||||
|
private: "Prywatne"
|
||||||
|
_signup:
|
||||||
|
almostThere: "Prawie na miejscu"
|
||||||
|
emailAddressInfo: "Podaj swój adres e-mail. Nie zostanie on upubliczniony."
|
||||||
|
emailSent: "E-mail z potwierdzeniem został wysłany na Twój adres e-mail ({email}). Kliknij dołączony link, aby dokończyć tworzenie konta."
|
||||||
|
_accountDelete:
|
||||||
|
accountDelete: "Usuń konto"
|
||||||
|
mayTakeTime: "Ponieważ usuwanie konta jest procesem wymagającym dużej ilości zasobów, jego ukończenie może zająć trochę czasu, w zależności od ilości utworzonej zawartości i liczby przesłanych plików."
|
||||||
|
sendEmail: "Po zakończeniu usuwania konta na adres e-mail zarejestrowany na tym koncie zostanie wysłana wiadomość e-mail."
|
||||||
|
requestAccountDelete: "Poproś o usunięcie konta"
|
||||||
|
started: "Usuwanie się rozpoczęło."
|
||||||
|
inProgress: "Usuwanie jest obecnie w toku"
|
||||||
_ad:
|
_ad:
|
||||||
back: "Wróć"
|
back: "Wróć"
|
||||||
reduceFrequencyOfThisAd: "Pokazuj tę reklamę rzadziej"
|
reduceFrequencyOfThisAd: "Pokazuj tę reklamę rzadziej"
|
||||||
_forgotPassword:
|
_forgotPassword:
|
||||||
|
enterEmail: "Wpisz adres e-mail użyty do rejestracji. Zostanie do niego wysłany link, za pomocą którego możesz zresetować hasło."
|
||||||
ifNoEmail: "Jeżeli nie podano adresu e-mail podczas rejestracji, skontaktuj się z administratorem zamiast tego."
|
ifNoEmail: "Jeżeli nie podano adresu e-mail podczas rejestracji, skontaktuj się z administratorem zamiast tego."
|
||||||
contactAdmin: "Jeżeli Twoja instancja nie obsługuje adresów e-mail, skontaktuj się zamiast tego z administratorem, aby zresetować hasło."
|
contactAdmin: "Jeżeli Twoja instancja nie obsługuje adresów e-mail, skontaktuj się zamiast tego z administratorem, aby zresetować hasło."
|
||||||
_gallery:
|
_gallery:
|
||||||
|
@ -788,6 +886,23 @@ _plugin:
|
||||||
install: "Zainstaluj wtyczki"
|
install: "Zainstaluj wtyczki"
|
||||||
installWarn: "Nie instaluj niezaufanych wtyczek."
|
installWarn: "Nie instaluj niezaufanych wtyczek."
|
||||||
manage: "Zarządzanie wtyczkami"
|
manage: "Zarządzanie wtyczkami"
|
||||||
|
_preferencesBackups:
|
||||||
|
list: "Utworzone kopie zapasowe"
|
||||||
|
saveNew: "Zapisz nową kopię zapasową"
|
||||||
|
loadFile: "Załaduj z pliku"
|
||||||
|
apply: "Zastosuj do tego urządzenia"
|
||||||
|
save: "Zapisz zmiany"
|
||||||
|
inputName: "Proszę podać nazwę dla tej kopii zapasowej"
|
||||||
|
cannotSave: "Zapisanie nie powiodło się"
|
||||||
|
nameAlreadyExists: "Kopia zapasowa o nazwie \"{name}\" już istnieje. Proszę podać inną nazwę."
|
||||||
|
applyConfirm: "Czy na pewno chcesz zastosować kopię zapasową \"{name}\" na tym urządzeniu? Istniejące ustawienia tego urządzenia zostaną nadpisane."
|
||||||
|
saveConfirm: "Zapisać kopię zapasową jako {name}?"
|
||||||
|
deleteConfirm: "Usunąć kopię zapasową {name}?"
|
||||||
|
renameConfirm: "Zmienić nazwę kopii zapasowej z \"{old}\" na \"{new}\"?"
|
||||||
|
createdAt: "Utworzony w: {date} {time}"
|
||||||
|
updatedAt: "Zaktualizowano w: {date} {time}"
|
||||||
|
cannotLoad: "Ładowanie nie powiodło się"
|
||||||
|
invalidFile: "Nieprawidłowy format pliku"
|
||||||
_registry:
|
_registry:
|
||||||
scope: "Zakres"
|
scope: "Zakres"
|
||||||
key: "Klucz"
|
key: "Klucz"
|
||||||
|
@ -822,10 +937,13 @@ _mfm:
|
||||||
bold: "Pogrubienie"
|
bold: "Pogrubienie"
|
||||||
boldDescription: "Wyróżnia litery pogrubiając je."
|
boldDescription: "Wyróżnia litery pogrubiając je."
|
||||||
small: "Małe"
|
small: "Małe"
|
||||||
|
smallDescription: "Wyświetla treść jako małą i cienką."
|
||||||
center: "Wyśrodkowanie"
|
center: "Wyśrodkowanie"
|
||||||
centerDescription: "Wyśrodkowuje zawartość."
|
centerDescription: "Wyśrodkowuje zawartość."
|
||||||
|
inlineCode: "Kod (w wierszu)"
|
||||||
blockCode: "Kod (blok)"
|
blockCode: "Kod (blok)"
|
||||||
blockCodeDescription: "Wyświetla kod z podświetlaną składnią składający się z wielu linii."
|
blockCodeDescription: "Wyświetla kod z podświetlaną składnią składający się z wielu linii."
|
||||||
|
blockMath: "Matematyka (Blok)"
|
||||||
quote: "Cytuj"
|
quote: "Cytuj"
|
||||||
quoteDescription: "Wyświetla treść jako cytat."
|
quoteDescription: "Wyświetla treść jako cytat."
|
||||||
emoji: "Niestandardowe emoji"
|
emoji: "Niestandardowe emoji"
|
||||||
|
@ -834,6 +952,20 @@ _mfm:
|
||||||
searchDescription: "Wyświetla pole wyszukiwania z wcześniej wpisanym tekstem."
|
searchDescription: "Wyświetla pole wyszukiwania z wcześniej wpisanym tekstem."
|
||||||
flip: "Odwróć"
|
flip: "Odwróć"
|
||||||
flipDescription: "Przerzuca treść poziomo lub pionowo."
|
flipDescription: "Przerzuca treść poziomo lub pionowo."
|
||||||
|
jelly: "Animacja (Galaretka)"
|
||||||
|
jellyDescription: "Nadaje treści galaretowatą animację."
|
||||||
|
tada: "Animation (Tada)"
|
||||||
|
tadaDescription: "Nadaje treści animację podobną do \"Tada!\"."
|
||||||
|
jump: "Animacja (Skok)"
|
||||||
|
jumpDescription: "Nadaje treści animację skakania."
|
||||||
|
bounce: "Animacja (Odbijanie)"
|
||||||
|
bounceDescription: "Nadaje treści animację odbijania się."
|
||||||
|
shake: "Animacja (Wstrząsanie)"
|
||||||
|
shakeDescription: "Nadaje treści animację wstrząsania."
|
||||||
|
twitch: "Animacja (Drganie)"
|
||||||
|
twitchDescription: "Nadaje treści mocno drgającą animację."
|
||||||
|
spin: "Animacja (Obrót)"
|
||||||
|
spinDescription: "Nadaje treści animację obracania."
|
||||||
x2: "Duże"
|
x2: "Duże"
|
||||||
x2Description: "Czyni treść większą."
|
x2Description: "Czyni treść większą."
|
||||||
x3: "Bardzo duże"
|
x3: "Bardzo duże"
|
||||||
|
@ -841,9 +973,17 @@ _mfm:
|
||||||
x4: "Ogromne"
|
x4: "Ogromne"
|
||||||
x4Description: "Czyni treść jeszcze większą niż jeszcze większa."
|
x4Description: "Czyni treść jeszcze większą niż jeszcze większa."
|
||||||
blur: "Rozmycie"
|
blur: "Rozmycie"
|
||||||
|
blurDescription: "Rozmywa treść. Zostanie wyraźnie wyświetlona po najechaniu."
|
||||||
font: "Czcionka"
|
font: "Czcionka"
|
||||||
fontDescription: "Wybiera czcionkę do wyświetlania treści."
|
fontDescription: "Wybiera czcionkę do wyświetlania treści."
|
||||||
|
rainbow: "Tęcza"
|
||||||
|
rainbowDescription: "Sprawia, że zawartość pojawia się w kolorach tęczy."
|
||||||
|
sparkle: "Blask"
|
||||||
|
sparkleDescription: "Nadaje zawartości efekt lśniącego brokatu."
|
||||||
rotate: "Obróć"
|
rotate: "Obróć"
|
||||||
|
rotateDescription: "Obraca zawartość o określony kąt."
|
||||||
|
plain: "Zwyczajny"
|
||||||
|
plainDescription: "Wyłącza efekty wszystkich MFM zawartych w tym efekcie MFM."
|
||||||
_instanceTicker:
|
_instanceTicker:
|
||||||
none: "Nigdy nie pokazuj"
|
none: "Nigdy nie pokazuj"
|
||||||
remote: "Pokaż dla zdalnych użytkowników"
|
remote: "Pokaż dla zdalnych użytkowników"
|
||||||
|
@ -863,6 +1003,7 @@ _channel:
|
||||||
usersCount: "{n} uczestnicy"
|
usersCount: "{n} uczestnicy"
|
||||||
notesCount: "{n} wpisy"
|
notesCount: "{n} wpisy"
|
||||||
_menuDisplay:
|
_menuDisplay:
|
||||||
|
top: "Góra"
|
||||||
hide: "Ukryj"
|
hide: "Ukryj"
|
||||||
_wordMute:
|
_wordMute:
|
||||||
muteWords: "Słowo do wyciszenia"
|
muteWords: "Słowo do wyciszenia"
|
||||||
|
@ -870,6 +1011,9 @@ _wordMute:
|
||||||
soft: "Łagodny"
|
soft: "Łagodny"
|
||||||
hard: "Twardy"
|
hard: "Twardy"
|
||||||
mutedNotes: "Wyciszone wpisy"
|
mutedNotes: "Wyciszone wpisy"
|
||||||
|
_instanceMute:
|
||||||
|
title: "Ukrywa wpisy z wymienionych instancji."
|
||||||
|
heading: "Lista instancji do wyciszenia"
|
||||||
_theme:
|
_theme:
|
||||||
explore: "Przeglądaj motywy"
|
explore: "Przeglądaj motywy"
|
||||||
install: "Zainstaluj motyw"
|
install: "Zainstaluj motyw"
|
||||||
|
@ -950,6 +1094,7 @@ _sfx:
|
||||||
notification: "Powiadomienia"
|
notification: "Powiadomienia"
|
||||||
chat: "Wiadomości"
|
chat: "Wiadomości"
|
||||||
chatBg: "Rozmowy (tło)"
|
chatBg: "Rozmowy (tło)"
|
||||||
|
antenna: "Anteny"
|
||||||
channel: "Powiadomienia kanału"
|
channel: "Powiadomienia kanału"
|
||||||
_ago:
|
_ago:
|
||||||
future: "W przyszłości"
|
future: "W przyszłości"
|
||||||
|
@ -969,12 +1114,30 @@ _time:
|
||||||
_tutorial:
|
_tutorial:
|
||||||
title: "Jak korzystać z Misskey"
|
title: "Jak korzystać z Misskey"
|
||||||
step1_1: "Witaj!"
|
step1_1: "Witaj!"
|
||||||
|
step1_2: "Ta strona nazywa się „oś czasu”. Pokazuje chronologicznie uporządkowane wpisy osób, które „śledzisz”."
|
||||||
step1_3: "Twoja oś czasu jest jeszcze pusta, ponieważ nie opublikowałeś(-aś) jeszcze żadnych wpisów i nie obserwujesz jeszcze nikogo."
|
step1_3: "Twoja oś czasu jest jeszcze pusta, ponieważ nie opublikowałeś(-aś) jeszcze żadnych wpisów i nie obserwujesz jeszcze nikogo."
|
||||||
step2_1: "Ukończmy konfigurację profilu zanim utworzymy wpis lub zaczniemy kogoś obserwować."
|
step2_1: "Ukończmy konfigurację profilu zanim utworzymy wpis lub zaczniemy kogoś obserwować."
|
||||||
|
step2_2: "Podanie pewnych informacji o tym, kim jesteś, ułatwi innym określenie, czy chcą widzieć Twoje wpisy lub Cię obserwować."
|
||||||
step3_1: "Zakończyłeś(-aś) konfigurację profilu?"
|
step3_1: "Zakończyłeś(-aś) konfigurację profilu?"
|
||||||
|
step3_2: "Następnie spróbujmy opublikować wpis. Możesz to zrobić, naciskając przycisk z ikoną ołówka na ekranie."
|
||||||
step3_3: "Wypełnij pole i kliknij przycisk w prawym górnym rogu by wysłać post."
|
step3_3: "Wypełnij pole i kliknij przycisk w prawym górnym rogu by wysłać post."
|
||||||
|
step3_4: "Nie masz nic do powiedzenia? Spróbuj \"ustawiam swój misskey\"!"
|
||||||
|
step4_1: "Zakończyłeś publikowanie pierwszego wpisu?"
|
||||||
|
step4_2: "Hurra! Teraz Twój pierwszy wpis powinien być wyświetlany na Twojej osi czasu."
|
||||||
|
step5_1: "Teraz spróbujmy ożywić Twoją oś czasu, przez zaobserwowanie innych ludzi."
|
||||||
|
step5_2: "{featured} pokaże Ci popularne wpisy na tej instancji. {explore} pozwoli Ci znaleźć popularnych użytkowników. Spróbuj znaleźć tam osoby, które chcesz obserwować!"
|
||||||
|
step5_3: "Aby obserwować innych użytkowników, kliknij ich ikonę i naciśnij przycisk \"Obserwuj\" na ich profilu."
|
||||||
|
step5_4: "Jeśli inny użytkownik ma ikonę kłódki obok swojej nazwy, może minąć trochę czasu, zanim ten użytkownik ręcznie zatwierdzi Twoją prośbę o obserwowanie."
|
||||||
|
step6_1: "Powinieneś teraz widzieć wpisy innych użytkowników na swojej osi czasu."
|
||||||
|
step6_2: "Możesz także umieścić „reakcje” na wpisach innych osób, aby szybko na nie odpowiedzieć."
|
||||||
|
step6_3: "Aby dodać \"reakcję\", naciśnij znak \"+\" na wpisie innego użytkownika i wybierz emotikonę, którą chcesz zareagować."
|
||||||
|
step7_1: "Gratulacje! Ukończyłeś podstawowy samouczek Misskey."
|
||||||
|
step7_2: "Jeśli chcesz dowiedzieć się więcej o Misskey, wypróbuj sekcję {help}."
|
||||||
|
step7_3: "A teraz powodzenia i baw się dobrze z Misskey! 🚀"
|
||||||
_2fa:
|
_2fa:
|
||||||
|
alreadyRegistered: "Zarejestrowałeś już urządzenie do uwierzytelniania dwuskładnikowego."
|
||||||
registerDevice: "Zarejestruj nowe urządzenie"
|
registerDevice: "Zarejestruj nowe urządzenie"
|
||||||
|
registerKey: "Zarejestruj klucz bezpieczeństwa"
|
||||||
step1: "Najpierw, zainstaluj aplikację uwierzytelniającą (taką jak {a} lub {b}) na swoim urządzeniu."
|
step1: "Najpierw, zainstaluj aplikację uwierzytelniającą (taką jak {a} lub {b}) na swoim urządzeniu."
|
||||||
step2: "Następnie, zeskanuje kod QR z ekranu."
|
step2: "Następnie, zeskanuje kod QR z ekranu."
|
||||||
step3: "Wprowadź token podany w aplikacji, aby ukończyć konfigurację."
|
step3: "Wprowadź token podany w aplikacji, aby ukończyć konfigurację."
|
||||||
|
@ -990,6 +1153,7 @@ _permissions:
|
||||||
"write:favorites": "Edycja Twojej listy ulubionych."
|
"write:favorites": "Edycja Twojej listy ulubionych."
|
||||||
"read:following": "Wyświetlanie informacji o obserwowanych"
|
"read:following": "Wyświetlanie informacji o obserwowanych"
|
||||||
"write:following": "Obserwowanie lub cofanie obserwacji innych kont"
|
"write:following": "Obserwowanie lub cofanie obserwacji innych kont"
|
||||||
|
"read:messaging": "Zobacz swoje czaty"
|
||||||
"read:mutes": "Wyświetlanie listy osób, które wyciszyłeś(-aś)"
|
"read:mutes": "Wyświetlanie listy osób, które wyciszyłeś(-aś)"
|
||||||
"write:mutes": "Edycja listy osób, które wyciszyłeś(-aś)"
|
"write:mutes": "Edycja listy osób, które wyciszyłeś(-aś)"
|
||||||
"read:notifications": "Wyświetlanie powiadomień"
|
"read:notifications": "Wyświetlanie powiadomień"
|
||||||
|
@ -1003,6 +1167,10 @@ _permissions:
|
||||||
"write:page-likes": "Edycja polubień na stronach"
|
"write:page-likes": "Edycja polubień na stronach"
|
||||||
"read:user-groups": "Wyświetlanie grup użytkownika"
|
"read:user-groups": "Wyświetlanie grup użytkownika"
|
||||||
"write:user-groups": "Edycja lub usuwanie grup użytkownika"
|
"write:user-groups": "Edycja lub usuwanie grup użytkownika"
|
||||||
|
"read:channels": "Zobacz swoje kanały"
|
||||||
|
"write:channels": "Edytuj swoje kanały"
|
||||||
|
"read:gallery": "Zobacz swoją galerię"
|
||||||
|
"write:gallery": "Edytuj swoją galerię"
|
||||||
_auth:
|
_auth:
|
||||||
shareAccess: "Czy chcesz autoryzować „{name}” do dostępu do tego konta?"
|
shareAccess: "Czy chcesz autoryzować „{name}” do dostępu do tego konta?"
|
||||||
permissionAsk: "Ta aplikacja wymaga następujących uprawnień:"
|
permissionAsk: "Ta aplikacja wymaga następujących uprawnień:"
|
||||||
|
@ -1021,12 +1189,21 @@ _widgets:
|
||||||
calendar: "Kalendarz"
|
calendar: "Kalendarz"
|
||||||
trends: "Na czasie"
|
trends: "Na czasie"
|
||||||
clock: "Zegar"
|
clock: "Zegar"
|
||||||
|
rss: "Czytnik RSS"
|
||||||
activity: "Aktywność"
|
activity: "Aktywność"
|
||||||
photos: "Zdjęcia"
|
photos: "Zdjęcia"
|
||||||
|
digitalClock: "Zegar cyfrowy"
|
||||||
|
unixClock: "Zegar UNIX"
|
||||||
federation: "Federacja"
|
federation: "Federacja"
|
||||||
postForm: "Utwórz wpis"
|
instanceCloud: "Chmura instancji"
|
||||||
|
postForm: "Formularz tworzenia wpisu"
|
||||||
|
slideshow: "Pokaz slajdów"
|
||||||
button: "Przycisk"
|
button: "Przycisk"
|
||||||
|
onlineUsers: "Użytkownicy online"
|
||||||
jobQueue: "Kolejka zadań"
|
jobQueue: "Kolejka zadań"
|
||||||
|
serverMetric: "Metryka serwera"
|
||||||
|
aiscript: "Konsola AiScript"
|
||||||
|
aichan: "Ai"
|
||||||
_cw:
|
_cw:
|
||||||
hide: "Ukryj"
|
hide: "Ukryj"
|
||||||
show: "Załaduj więcej"
|
show: "Załaduj więcej"
|
||||||
|
@ -1393,9 +1570,11 @@ _notification:
|
||||||
youReceivedFollowRequest: "Otrzymałeś(-aś) prośbę o możliwość obserwacji"
|
youReceivedFollowRequest: "Otrzymałeś(-aś) prośbę o możliwość obserwacji"
|
||||||
yourFollowRequestAccepted: "Twoja prośba o możliwość obserwacji została przyjęta"
|
yourFollowRequestAccepted: "Twoja prośba o możliwość obserwacji została przyjęta"
|
||||||
youWereInvitedToGroup: "Zaproszony(-a) do grupy"
|
youWereInvitedToGroup: "Zaproszony(-a) do grupy"
|
||||||
|
pollEnded: "Wyniki ankiety stały się dostępne"
|
||||||
|
emptyPushNotificationMessage: "Powiadomienia push zostały zaktualizowane"
|
||||||
_types:
|
_types:
|
||||||
all: "Wszystkie"
|
all: "Wszystkie"
|
||||||
follow: "Obserwowani"
|
follow: "Nowi obserwujący"
|
||||||
mention: "Wspomnij"
|
mention: "Wspomnij"
|
||||||
reply: "Odpowiedzi"
|
reply: "Odpowiedzi"
|
||||||
renote: "Udostępnij"
|
renote: "Udostępnij"
|
||||||
|
@ -1407,12 +1586,14 @@ _notification:
|
||||||
groupInvited: "Zaproszono do grup"
|
groupInvited: "Zaproszono do grup"
|
||||||
app: "Powiadomienia z aplikacji"
|
app: "Powiadomienia z aplikacji"
|
||||||
_actions:
|
_actions:
|
||||||
|
followBack: "zaobserwował cię z powrotem"
|
||||||
reply: "Odpowiedz"
|
reply: "Odpowiedz"
|
||||||
renote: "Udostępnij"
|
renote: "Udostępnij"
|
||||||
_deck:
|
_deck:
|
||||||
alwaysShowMainColumn: "Zawsze pokazuj główną kolumnę"
|
alwaysShowMainColumn: "Zawsze pokazuj główną kolumnę"
|
||||||
columnAlign: "Wyrównaj kolumny"
|
columnAlign: "Wyrównaj kolumny"
|
||||||
addColumn: "Dodaj kolumnę"
|
addColumn: "Dodaj kolumnę"
|
||||||
|
configureColumn: "Ustawienia kolumny"
|
||||||
swapLeft: "Przesuń w lewo"
|
swapLeft: "Przesuń w lewo"
|
||||||
swapRight: "Przesuń w prawo"
|
swapRight: "Przesuń w prawo"
|
||||||
swapUp: "Zamień z powyższym"
|
swapUp: "Zamień z powyższym"
|
||||||
|
@ -1420,6 +1601,9 @@ _deck:
|
||||||
stackLeft: "Przypnij do lewej"
|
stackLeft: "Przypnij do lewej"
|
||||||
popRight: "Odepnij w prawo"
|
popRight: "Odepnij w prawo"
|
||||||
profile: "Profil"
|
profile: "Profil"
|
||||||
|
newProfile: "Nowy profil"
|
||||||
|
deleteProfile: "Usuń profil"
|
||||||
|
widgetsIntroduction: "Wybierz \"Edytuj widżety\" w menu kolumny i dodaj widżet."
|
||||||
_columns:
|
_columns:
|
||||||
main: "Główna"
|
main: "Główna"
|
||||||
widgets: "Widżety"
|
widgets: "Widżety"
|
||||||
|
|
|
@ -562,6 +562,7 @@ author: "Автор"
|
||||||
leaveConfirm: "Вы не сохранили изменения. Хотите выйти и потерять их?"
|
leaveConfirm: "Вы не сохранили изменения. Хотите выйти и потерять их?"
|
||||||
manage: "Управление"
|
manage: "Управление"
|
||||||
plugins: "Расширения"
|
plugins: "Расширения"
|
||||||
|
preferencesBackups: "Резервная копия"
|
||||||
deck: "Пульт"
|
deck: "Пульт"
|
||||||
undeck: "Покинуть пульт"
|
undeck: "Покинуть пульт"
|
||||||
useBlurEffectForModal: "Размывка под формой поверх всего"
|
useBlurEffectForModal: "Размывка под формой поверх всего"
|
||||||
|
|
|
@ -562,6 +562,7 @@ author: "ผู้เขียน"
|
||||||
leaveConfirm: "คุณมีการเปลี่ยนแปลงที่ไม่ได้บันทึกนะ นายต้องการทิ้งการเปลี่ยนแปลงเหล่านั้นหรอ?"
|
leaveConfirm: "คุณมีการเปลี่ยนแปลงที่ไม่ได้บันทึกนะ นายต้องการทิ้งการเปลี่ยนแปลงเหล่านั้นหรอ?"
|
||||||
manage: "การจัดการ"
|
manage: "การจัดการ"
|
||||||
plugins: "ปลั๊กอิน"
|
plugins: "ปลั๊กอิน"
|
||||||
|
preferencesBackups: "ตั้งค่าการสำรองข้อมูล"
|
||||||
deck: "เด็ค"
|
deck: "เด็ค"
|
||||||
undeck: "ออกจากเด็ค"
|
undeck: "ออกจากเด็ค"
|
||||||
useBlurEffectForModal: "ใช้เอฟเฟกต์เบลอสำหรับโมดอล"
|
useBlurEffectForModal: "ใช้เอฟเฟกต์เบลอสำหรับโมดอล"
|
||||||
|
@ -598,7 +599,7 @@ wordMute: "ปิดเสียงคำ"
|
||||||
regexpError: "ข้อผิดพลาดของนิพจน์ทั่วไป"
|
regexpError: "ข้อผิดพลาดของนิพจน์ทั่วไป"
|
||||||
regexpErrorDescription: "เกิดข้อผิดพลาดในนิพจน์ทั่วไปในบรรทัดที่ {line} ของการปิดเสียงคำ {tab} ของคุณ:"
|
regexpErrorDescription: "เกิดข้อผิดพลาดในนิพจน์ทั่วไปในบรรทัดที่ {line} ของการปิดเสียงคำ {tab} ของคุณ:"
|
||||||
instanceMute: "ปิดเสียง อินสแตนซ์"
|
instanceMute: "ปิดเสียง อินสแตนซ์"
|
||||||
userSaysSomething: "{ชื่อ} พูดอะไรบางอย่าง"
|
userSaysSomething: "{name} พูดอะไรบางอย่าง"
|
||||||
makeActive: "เปิดใช้งาน"
|
makeActive: "เปิดใช้งาน"
|
||||||
display: "แสดงผล"
|
display: "แสดงผล"
|
||||||
copy: "คัดลอก"
|
copy: "คัดลอก"
|
||||||
|
@ -913,13 +914,89 @@ _ffVisibility:
|
||||||
_signup:
|
_signup:
|
||||||
almostThere: "เกือบจะมี"
|
almostThere: "เกือบจะมี"
|
||||||
emailAddressInfo: "โปรดกรอกอีเมลของคุณ มันจะไม่เปิดเผยต่อสาธารณะ"
|
emailAddressInfo: "โปรดกรอกอีเมลของคุณ มันจะไม่เปิดเผยต่อสาธารณะ"
|
||||||
|
emailSent: "เราได้ส่งอีเมลยืนยันไปยังที่อยู่อีเมลของคุณแล้วนะ ({email}) โปรดคลิกลิงก์ที่รวมไว้เพื่อสร้างบัญชีให้เสร็จสิ้น"
|
||||||
|
_accountDelete:
|
||||||
|
accountDelete: "ลบบัญชีผู้ใช้"
|
||||||
|
mayTakeTime: "เนื่องจากการลบบัญชีนี้จะเป็นกระบวนการที่ต้องใช้ทรัพยากรมาก จึงอาจจะต้องใช้เวลาสักครู่ถึงจะเสร็จสมบูรณ์ ทั้งนี้ขึ้นอยู่กับจำนวนเนื้อหาที่คุณสร้างและจำนวนไฟล์ที่คุณอัปโหลดนะ"
|
||||||
|
sendEmail: "เมื่อการลบบัญชีนี้เสร็จสิ้น เราอาจจะส่งอีเมลไปยังที่อยู่อีเมลของคุณที่เคยลงทะเบียนไว้กับบัญชีนี้นะ"
|
||||||
|
requestAccountDelete: "ร้องขอให้ลบบัญชี"
|
||||||
|
started: "การลบได้เริ่มต้นขึ้น"
|
||||||
|
inProgress: "ปัจจุบันกำลังดำเนินการลบอยู่"
|
||||||
_ad:
|
_ad:
|
||||||
back: "ย้อนกลับ"
|
back: "ย้อนกลับ"
|
||||||
|
reduceFrequencyOfThisAd: "แสดงโฆษณานี้ให้น้อยลง"
|
||||||
|
_forgotPassword:
|
||||||
|
enterEmail: "ป้อนที่อยู่อีเมลที่คุณเคยใช้ในการลงทะเบียนไว้ ลิงก์ที่คุณสามารถรีเซ็ตรหัสผ่านได้นั้นจะถูกส่งไปนะ"
|
||||||
|
ifNoEmail: "ถ้าหากคุณไม่ได้ใช้อีเมลระหว่างการลงทะเบียน กรุณาติดต่อผู้ดูแลระบบอินสแตนซ์แทนนะ"
|
||||||
|
contactAdmin: "อินสแตนซ์นี้ไม่รองรับการใช้งานที่อยู่อีเมลนี้ กรุณาติดต่อผู้ดูแลระบบอินสแตนซ์เพื่อรีเซ็ตรหัสผ่านของคุณแทน"
|
||||||
|
_gallery:
|
||||||
|
my: "แกลลอรี่ของฉัน"
|
||||||
|
liked: "โพสต์ที่ถูกใจ"
|
||||||
|
like: "ชื่นชอบ"
|
||||||
|
unlike: "ลบไลค์"
|
||||||
_email:
|
_email:
|
||||||
_follow:
|
_follow:
|
||||||
title: "ได้ติดตามคุณ"
|
title: "ได้ติดตามคุณ"
|
||||||
|
_receiveFollowRequest:
|
||||||
|
title: "คุณได้รับคำขอติดตาม"
|
||||||
|
_plugin:
|
||||||
|
install: "ติดตั้งปลั๊กอิน"
|
||||||
|
installWarn: "กรุณาอย่าติดตั้งปลั๊กอินที่ไม่น่าเชื่อถือนะคะ"
|
||||||
|
manage: "จัดการปลั๊กอิน"
|
||||||
|
_preferencesBackups:
|
||||||
|
list: "สร้างการสำรองข้อมูล"
|
||||||
|
saveNew: "บันทึกใหม่"
|
||||||
|
loadFile: "โหลดจากไฟล์"
|
||||||
|
apply: "นำไปใช้กับอุปกรณ์นี้"
|
||||||
|
save: "บันทึก"
|
||||||
|
inputName: "กรุณาป้อนชื่อสำหรับข้อมูลสำรองนี้"
|
||||||
|
cannotSave: "การบันทึกล้มเหลว"
|
||||||
|
nameAlreadyExists: "มีข้อมูลสำรองชื่อ \"{name}\" นี้อยู่แล้ว กรุณาป้อนชื่ออื่นนะ"
|
||||||
|
applyConfirm: "คุณต้องการใช้ข้อมูลสำรอง \"{name}\" กับอุปกรณ์นี้อย่างงั้นจริงหรอ การตั้งค่าที่มีอยู่ของอุปกรณ์นี้จะถูกเขียนทับนะ"
|
||||||
|
saveConfirm: "บันทึกข้อมูลสำรองเป็น {name} มั้ย?"
|
||||||
|
deleteConfirm: "ลบข้อมูลสำรอง {name} มั้ย?"
|
||||||
|
renameConfirm: "เปลี่ยนชื่อข้อมูลสำรองนี้จาก \"{old}\" เป็น \"{new}\" หรือป่าว"
|
||||||
|
noBackups: "ไม่มีข้อมูลสำรองนะ คุณสามารถสำรองข้อมูลการตั้งค่าไคลเอนต์ของคุณบนเซิร์ฟเวอร์นี้โดยใช้ \"สร้างการสำรองข้อมูลใหม่\"ได้นะ"
|
||||||
|
createdAt: "สร้างเมื่อ: {date} {time}"
|
||||||
|
updatedAt: "อัปเดตเมื่อ: {date} {time}"
|
||||||
|
cannotLoad: "การโหลดล้มเหลว"
|
||||||
|
invalidFile: "รูปแบบไฟล์ไม่ถูกต้องนะ"
|
||||||
|
_registry:
|
||||||
|
scope: "สโคป"
|
||||||
|
key: "คีย์"
|
||||||
|
keys: "คีย์"
|
||||||
|
domain: "โดเมน"
|
||||||
|
createKey: "สร้างคีย์"
|
||||||
|
_aboutMisskey:
|
||||||
|
about: "Misskey เป็นซอฟต์แวร์โอเพ่นซอร์สที่ถูกพัฒนาโดย Syuilo ตั้งแต่ปี 2014"
|
||||||
|
contributors: "ผู้สนับสนุนหลัก"
|
||||||
|
allContributors: "ผู้มีส่วนร่วมทั้งหมด"
|
||||||
|
source: "ซอร์สโค้ด"
|
||||||
|
translation: "รับแปลภาษา Misskey"
|
||||||
|
donate: "บริจาคให้กับ Misskey"
|
||||||
|
morePatrons: "เราขอขอบคุณสำหรับความช่วยเหลือจากผู้ช่วยอื่นๆ ที่ไม่ได้ระบุไว้ที่นี่นะ ขอขอบคุณ! 🥰"
|
||||||
|
patrons: "สมาชิกพันธมิตร"
|
||||||
|
_nsfw:
|
||||||
|
respect: "ซ่อนสื่อ NSFW"
|
||||||
|
ignore: "อย่าซ่อนสื่อ NSFW"
|
||||||
|
force: "ซ่อนสื่อทั้งหมด"
|
||||||
_mfm:
|
_mfm:
|
||||||
|
cheatSheet: "โค้ด MFM Cheat Sheet"
|
||||||
|
intro: "MFM เป็นภาษามาร์กอัปพิเศษเฉพาะของ Misskey ที่สามารถใช้ได้ในหลายที่ คุณยังสามารถดูรายการไวยากรณ์ MFM ที่มีอยู่ทั้งหมดได้ที่นี่นะ"
|
||||||
|
dummy: "Misskey ขยายโลกของ Fediverse"
|
||||||
mention: "กล่าวถึง"
|
mention: "กล่าวถึง"
|
||||||
|
mentionDescription: "คุณสามารถระบุผู้ใช้โดยใช้ At-Symbol และชื่อผู้ใช้ได้นะ"
|
||||||
|
hashtag: "แฮชแท็ก"
|
||||||
|
hashtagDescription: "คุณสามารถระบุชื่อแฮชแท็กได้โดยใช้เครื่องหมายตัวเลขและข้อความได้นะ"
|
||||||
|
url: "URL"
|
||||||
|
urlDescription: "สามารถแสดง URL ได้นะ"
|
||||||
|
link: "ลิงก์"
|
||||||
|
linkDescription: "เจาะจงเฉพาะ ส่วนของข้อความที่สามารถแสดงเป็น URL ได้"
|
||||||
|
bold: "ตัวหนา"
|
||||||
|
boldDescription: "ไฮไลท์ตัวอักษรโดยทำให้หนาขึ้น"
|
||||||
|
small: "ขนาดเล็ก"
|
||||||
|
smallDescription: "แสดงผลเนื้อหาขนาดเล็กและบาง"
|
||||||
|
center: "เซ็นเตอร์"
|
||||||
centerDescription: "แสดงผลเนื้อหาเป็นศูนย์กลาง"
|
centerDescription: "แสดงผลเนื้อหาเป็นศูนย์กลาง"
|
||||||
inlineCode: "โค้ด (อินไลน์)"
|
inlineCode: "โค้ด (อินไลน์)"
|
||||||
inlineCodeDescription: "แสดงผลการเน้นไวยากรณ์แบบอินไลน์สำหรับโค้ด (โปรแกรม)"
|
inlineCodeDescription: "แสดงผลการเน้นไวยากรณ์แบบอินไลน์สำหรับโค้ด (โปรแกรม)"
|
||||||
|
@ -936,9 +1013,117 @@ _mfm:
|
||||||
search: "ค้นหา"
|
search: "ค้นหา"
|
||||||
searchDescription: "แสดงผลกล่องค้นหาพร้อมกับข้อความที่ป้อนไว้ล่วงหน้า"
|
searchDescription: "แสดงผลกล่องค้นหาพร้อมกับข้อความที่ป้อนไว้ล่วงหน้า"
|
||||||
flip: "พลิก"
|
flip: "พลิก"
|
||||||
|
flipDescription: "พลิกเนื้อหาในแนวนอนหรือแนวตั้ง"
|
||||||
|
jelly: "แอนิเมชั่น (เยลลี่)"
|
||||||
|
jellyDescription: "ให้เนื้อหาเป็นแอนิเมชั่นเหมือนเยลลี่"
|
||||||
|
tada: "แอนิเมชั่น (ธาดา)"
|
||||||
|
tadaDescription: "ให้เนื้อหาเป็นแอนิเมชั่นเหมือน \"ทาด้า!\""
|
||||||
|
jump: "อนิเมชั่น (กระโดด)"
|
||||||
|
jumpDescription: "ให้เนื้อหามีภาพเคลื่อนไหวแบบกระโดด"
|
||||||
|
bounce: "อนิเมชั่น (เด้ง)"
|
||||||
|
bounceDescription: "ให้เนื้อหามีอนิเมชั่นเด้ง"
|
||||||
|
shake: "อนิเมชั่น (เขย่า)"
|
||||||
|
shakeDescription: "ให้เนื้อหามีภาพเคลื่อนไหวสั่น"
|
||||||
|
twitch: "แอนิเมชั่น (Twitch)"
|
||||||
|
twitchDescription: "ให้เนื้อหามีแอนิเมชั่นกระตุกอย่างแรง"
|
||||||
|
spin: "แอนิเมชั่น (สปิน)"
|
||||||
|
spinDescription: "ให้เนื้อหาเป็นภาพเคลื่อนไหวแบบหมุน"
|
||||||
|
x2: "ขนาดใหญ่"
|
||||||
|
x2Description: "แสดงเนื้อหาที่ใหญ่ขึ้น"
|
||||||
|
x3: "ใหญ่มาก"
|
||||||
|
x3Description: "แสดงเนื้อหาอีเว้นท์ที่ใหญ่ขึ้น"
|
||||||
|
x4: "ใหญ่อย่างไม่น่าเชื่อ"
|
||||||
|
x4Description: "แสดงผลเนื้อหาที่ใหญ่กว่าใหญ่กว่าขนาดใหญ่"
|
||||||
|
blur: "เบลอ"
|
||||||
|
blurDescription: "เบลอเนื้อหา จะแสดงผลอย่างชัดเจนต่อเมื่อวางเมาส์เหนือ"
|
||||||
|
font: "ตัวอักษร"
|
||||||
|
fontDescription: "ตั้งค่าตัวอักษรเพื่อแสดงเนื้อหาใน"
|
||||||
|
rainbow: "สายรุ้ง"
|
||||||
|
rainbowDescription: "ทำให้เนื้อหานั้นปรากฏเป็นสีรุ้ง"
|
||||||
|
sparkle: "กลิตเตอร์"
|
||||||
|
sparkleDescription: "ให้เนื้อหานั้นมีเอฟเฟกต์แบบอนุภาคประกาย"
|
||||||
|
rotate: "หมุนหน้าจอ"
|
||||||
|
rotateDescription: "เปลี่ยนเนื้อหาตามด้วยมุมที่ระบุไว้"
|
||||||
|
plain: "เรียบง่าย"
|
||||||
|
plainDescription: "ปิดการใช้งานเอฟเฟกต์ของ MFM ทั้งหมดที่มีอยู่ในเอฟเฟกต์ MFM นี้"
|
||||||
|
_instanceTicker:
|
||||||
|
none: "ไม่ต้องแสดง"
|
||||||
|
remote: "แสดงสำหรับผู้ใช้ระยะไกล"
|
||||||
|
always: "แสดงเสมอ"
|
||||||
|
_serverDisconnectedBehavior:
|
||||||
|
reload: "โหลดใหม่โดยอัตโนมัติ"
|
||||||
|
dialog: "แสดงกล่องโต้ตอบคำเตือน"
|
||||||
|
quiet: "แสดงคำเตือนที่ไม่เป็นการรบกวน"
|
||||||
|
_channel:
|
||||||
|
create: "สร้างแชนแนลใหม่"
|
||||||
|
edit: "แก้ไขแชนแนล"
|
||||||
|
setBanner: "เซตแบนเนอร์"
|
||||||
|
removeBanner: "ลบแบนเนอร์"
|
||||||
|
featured: "เทรนด์"
|
||||||
|
owned: "เจ้าของ"
|
||||||
|
following: "ติดตามแล้ว"
|
||||||
|
usersCount: "{n} ผู้เข้าร่วม"
|
||||||
|
notesCount: "{n} โน้ต"
|
||||||
|
_menuDisplay:
|
||||||
|
sideFull: "ด้านข้าง"
|
||||||
|
sideIcon: "ด้านข้าง (ไอคอน)"
|
||||||
|
top: "ท็อป"
|
||||||
|
hide: "ซ่อน"
|
||||||
|
_wordMute:
|
||||||
|
muteWords: "ปิดเสียงคำ"
|
||||||
|
muteWordsDescription: "คั่นด้วยช่องว่างสำหรับเงื่อนไข AND หรือด้วยการขึ้นบรรทัดใหม่สำหรับเงื่อนไข OR นะ"
|
||||||
|
muteWordsDescription2: "ล้อมรอบคีย์เวิร์ดด้วยเครื่องหมายทับเพื่อใช้นิพจน์ทั่วไป"
|
||||||
|
softDescription: "ซ่อนโน้ตให้ตรงตามเงื่อนไขที่ตั้งไว้จากไทม์ไลน์"
|
||||||
|
hardDescription: "ป้องกันไม่ให้โน้ตย่อที่ตรงตามเงื่อนไขที่ตั้งไว้ไม่ให้ถูกเพิ่มลงในไทม์ไลน์ นอกจากนี้ โน้ตเหล่านี้จะไม่ถูกเพิ่มลงในไทม์ไลน์แม้ว่าจะมีการเปลี่ยนแปลงเงื่อนไขยังไงก็ตาม"
|
||||||
|
soft: "ซอฟ"
|
||||||
|
hard: "ยาก"
|
||||||
|
mutedNotes: "ปิดเสียงโน้ต"
|
||||||
|
_instanceMute:
|
||||||
|
instanceMuteDescription: "การดำเนินการนี้จะปิดเสียง\"โน้ต/รีโน้ต\"จากอินสแตนซ์ที่อยู่ในรายการ รวมถึงบันทึกของผู้ใช้ที่ตอบกลับผู้ใช้จากอินสแตนซ์ที่ปิดเสียง"
|
||||||
|
instanceMuteDescription2: "คั่นด้วยการขึ้นบรรทัดใหม่"
|
||||||
|
title: "ซ่อนโน้ตจากอินสแตนซ์ที่มีอยู่ในรายการ"
|
||||||
|
heading: "รายชื่ออินสแตนซ์ที่ถูกปิดเสียง"
|
||||||
_theme:
|
_theme:
|
||||||
|
explore: "สำรวจธีม"
|
||||||
|
install: "ติดตั้งธีม"
|
||||||
|
manage: "จัดการธีม"
|
||||||
|
code: "โค้ดธีม"
|
||||||
description: "รายละเอียด"
|
description: "รายละเอียด"
|
||||||
|
installed: "{name} ได้รับการติดตั้ง"
|
||||||
|
installedThemes: "ธีมที่ติดตั้ง"
|
||||||
|
builtinThemes: "ธีมในตัว"
|
||||||
|
alreadyInstalled: "ธีมนี้ได้รับการติดตั้งแล้ว"
|
||||||
|
invalid: "รูปแบบของธีมนี้ไม่ถูกต้องนะ"
|
||||||
|
make: "ทำธีม"
|
||||||
|
base: "ฐาน"
|
||||||
|
addConstant: "เพิ่มค่าคงที่"
|
||||||
|
constant: "ตัวแปร"
|
||||||
|
defaultValue: "ค่าเริ่มต้น"
|
||||||
|
color: "สี"
|
||||||
|
refProp: "อ้างอิงคุณสมบัติ"
|
||||||
|
refConst: "อ้างอิงค่าคงที่"
|
||||||
|
key: "คีย์"
|
||||||
|
func: "ฟังก์ชัน"
|
||||||
|
funcKind: "ประเภทฟังก์ชัน"
|
||||||
|
argument: "อากิวเม้นต์"
|
||||||
|
basedProp: "ทรัพย์สินอ้างอิง"
|
||||||
|
alpha: "ความทึบแสง"
|
||||||
|
darken: "มืดลง"
|
||||||
|
lighten: "สว่าง"
|
||||||
|
inputConstantName: "ป้อนชื่อสำหรับค่าคงที่นี้"
|
||||||
|
importInfo: "ถ้าหากต้องการป้อนโค้ดที่นี่ คุณยังสามารถนำเข้าไปยังโปรแกรมแก้ไขธีมได้"
|
||||||
|
deleteConstantConfirm: "คุณต้องการลบค่าคงที่ {const} หรือป่าว?"
|
||||||
keys:
|
keys:
|
||||||
|
accent: "เน้น"
|
||||||
|
bg: "ภาพพื้นหลัง"
|
||||||
|
fg: "ข้อความ"
|
||||||
|
focus: "โฟกัส"
|
||||||
|
indicator: "ตัวบ่งชี้"
|
||||||
|
panel: "แผงควบคุม"
|
||||||
|
shadow: "เงา"
|
||||||
|
header: "ส่วนหัว"
|
||||||
|
navBg: "พื้นหลังแถบด้านข้าง"
|
||||||
|
navFg: "ข้อความแถบด้านข้าง"
|
||||||
mention: "กล่าวถึง"
|
mention: "กล่าวถึง"
|
||||||
renote: "รีโน้ต"
|
renote: "รีโน้ต"
|
||||||
divider: "ตัวแบ่ง"
|
divider: "ตัวแบ่ง"
|
||||||
|
|
|
@ -141,7 +141,7 @@ cacheRemoteFilesDescription: "当禁用此设定时远程文件将直接从远
|
||||||
flagAsBot: "这是一个机器人账号"
|
flagAsBot: "这是一个机器人账号"
|
||||||
flagAsBotDescription: "如果此帐户由程序控制,请启用此项。启用后,此标志可以帮助其他开发人员防止机器人之间产生无限互动的行为,并让Misskey的内部系统将此帐户识别为机器人。"
|
flagAsBotDescription: "如果此帐户由程序控制,请启用此项。启用后,此标志可以帮助其他开发人员防止机器人之间产生无限互动的行为,并让Misskey的内部系统将此帐户识别为机器人。"
|
||||||
flagAsCat: "将这个账户设定为一只猫"
|
flagAsCat: "将这个账户设定为一只猫"
|
||||||
flagAsCatDescription: "如果您想表明此帐户是一只猫,请打开此标志。"
|
flagAsCatDescription: "如果您想表明此帐户是一只猫,请打开此标志。\n开启后,会在您的头像上出现猫耳朵,并将你的帖子中的「na」替换为「nya」,日文同理。"
|
||||||
flagShowTimelineReplies: "在时间线上显示帖子的回复"
|
flagShowTimelineReplies: "在时间线上显示帖子的回复"
|
||||||
flagShowTimelineRepliesDescription: "启用时,时间线除了显示用户的帖子外,还会显示其他用户对帖子的回复。"
|
flagShowTimelineRepliesDescription: "启用时,时间线除了显示用户的帖子外,还会显示其他用户对帖子的回复。"
|
||||||
autoAcceptFollowed: "自动允许关注者的关注"
|
autoAcceptFollowed: "自动允许关注者的关注"
|
||||||
|
@ -252,7 +252,7 @@ messageRead: "已读"
|
||||||
noMoreHistory: "没有更多的历史记录"
|
noMoreHistory: "没有更多的历史记录"
|
||||||
startMessaging: "添加聊天"
|
startMessaging: "添加聊天"
|
||||||
nUsersRead: "{n}人已读"
|
nUsersRead: "{n}人已读"
|
||||||
agreeTo: "{0}勾选则表示已阅读并同意"
|
agreeTo: "勾选则表示已阅读并同意{0}"
|
||||||
tos: "服务条款"
|
tos: "服务条款"
|
||||||
start: "开始"
|
start: "开始"
|
||||||
home: "首页"
|
home: "首页"
|
||||||
|
@ -668,7 +668,7 @@ yes: "是"
|
||||||
no: "否"
|
no: "否"
|
||||||
driveFilesCount: "网盘的文件数"
|
driveFilesCount: "网盘的文件数"
|
||||||
driveUsage: "网盘的空间用量"
|
driveUsage: "网盘的空间用量"
|
||||||
noCrawle: "要求搜索引擎不索引该站点"
|
noCrawle: "要求搜索引擎不索引该用户"
|
||||||
noCrawleDescription: "要求搜索引擎不要收录(索引)您的用户页面,帖子,页面等。"
|
noCrawleDescription: "要求搜索引擎不要收录(索引)您的用户页面,帖子,页面等。"
|
||||||
lockedAccountInfo: "即使通过了关注请求,只要您不将帖子可见范围设置成“关注者”,任何人都可以看到您的帖子。"
|
lockedAccountInfo: "即使通过了关注请求,只要您不将帖子可见范围设置成“关注者”,任何人都可以看到您的帖子。"
|
||||||
alwaysMarkSensitive: "默认将媒体文件标记为敏感内容"
|
alwaysMarkSensitive: "默认将媒体文件标记为敏感内容"
|
||||||
|
@ -747,7 +747,7 @@ userInfo: "用户信息"
|
||||||
unknown: "未知"
|
unknown: "未知"
|
||||||
onlineStatus: "在线状态"
|
onlineStatus: "在线状态"
|
||||||
hideOnlineStatus: "隐藏在线状态"
|
hideOnlineStatus: "隐藏在线状态"
|
||||||
hideOnlineStatusDescription: "隐藏在线状态后,可能会降低例如搜索等功能的便利性。"
|
hideOnlineStatusDescription: "隐藏在线状态后,可能会降低搜索等功能的便利性。"
|
||||||
online: "在线"
|
online: "在线"
|
||||||
active: "活动"
|
active: "活动"
|
||||||
offline: "离线"
|
offline: "离线"
|
||||||
|
|
|
@ -883,8 +883,8 @@ sensitiveMediaDetection: "敏感性媒體的檢測"
|
||||||
localOnly: "僅限本地"
|
localOnly: "僅限本地"
|
||||||
remoteOnly: "僅限遠端"
|
remoteOnly: "僅限遠端"
|
||||||
failedToUpload: "上傳失敗"
|
failedToUpload: "上傳失敗"
|
||||||
cannotUploadBecauseInappropriate: "由於判定可能包含不適當的內容,因此無法上船。"
|
cannotUploadBecauseInappropriate: "由於判定可能包含不適當的內容,因此無法上傳。"
|
||||||
cannotUploadBecauseNoFreeSpace: "由於雲端硬碟沒有可用空間,因此無法上船>"
|
cannotUploadBecauseNoFreeSpace: "由於雲端硬碟沒有可用空間,因此無法上傳。"
|
||||||
beta: "Beta"
|
beta: "Beta"
|
||||||
enableAutoSensitive: "自動NSFW判定"
|
enableAutoSensitive: "自動NSFW判定"
|
||||||
enableAutoSensitiveDescription: "如果可用,請利用機器學習在媒體上自動設置 NSFW 旗標。 即使關閉此功能,依實例而定也可能會自動設置。"
|
enableAutoSensitiveDescription: "如果可用,請利用機器學習在媒體上自動設置 NSFW 旗標。 即使關閉此功能,依實例而定也可能會自動設置。"
|
||||||
|
@ -917,7 +917,7 @@ _signup:
|
||||||
emailSent: "已將確認郵件發送至您輸入的電子郵件地址 ({email})。請開啟電子郵件中的連結以完成帳戶創建。"
|
emailSent: "已將確認郵件發送至您輸入的電子郵件地址 ({email})。請開啟電子郵件中的連結以完成帳戶創建。"
|
||||||
_accountDelete:
|
_accountDelete:
|
||||||
accountDelete: "刪除帳戶"
|
accountDelete: "刪除帳戶"
|
||||||
mayTakeTime: "刪除帳戶的處理負荷較大,如果帳戶產生的內容數量上船的檔案數量較多的話,就需要花费一段時間才能完成。"
|
mayTakeTime: "刪除帳戶的處理負荷較大,如果帳戶產生的內容數量上傳的檔案數量較多的話,就需要花费一段時間才能完成。"
|
||||||
sendEmail: "帳戶删除完成後,將向註冊地電子郵件地址發送通知。"
|
sendEmail: "帳戶删除完成後,將向註冊地電子郵件地址發送通知。"
|
||||||
requestAccountDelete: "刪除帳戶請求"
|
requestAccountDelete: "刪除帳戶請求"
|
||||||
started: "已開始刪除作業。"
|
started: "已開始刪除作業。"
|
||||||
|
|
18
package.json
18
package.json
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "misskey",
|
"name": "calckey",
|
||||||
"version": "12.118.1-calc.1",
|
"version": "12.119.0-calc",
|
||||||
"codename": "aqua",
|
"codename": "aqua",
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
|
@ -41,8 +41,8 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@bull-board/api": "^4.2.2",
|
"@bull-board/api": "^4.2.2",
|
||||||
"@bull-board/ui": "^4.2.2",
|
"@bull-board/ui": "^4.2.2",
|
||||||
"@tensorflow/tfjs": "^3.18.0",
|
"@tensorflow/tfjs": "^3.20.0",
|
||||||
"eslint": "^8.20.0",
|
"eslint": "^8.23.0",
|
||||||
"execa": "5.1.1",
|
"execa": "5.1.1",
|
||||||
"gulp": "4.0.2",
|
"gulp": "4.0.2",
|
||||||
"gulp-cssnano": "2.1.3",
|
"gulp-cssnano": "2.1.3",
|
||||||
|
@ -54,13 +54,15 @@
|
||||||
"seedrandom": "^3.0.5"
|
"seedrandom": "^3.0.5"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"@swc/core": "^1.2.248",
|
||||||
"@types/gulp": "4.0.9",
|
"@types/gulp": "4.0.9",
|
||||||
"@types/gulp-rename": "2.0.1",
|
"@types/gulp-rename": "2.0.1",
|
||||||
"@typescript-eslint/parser": "5.33.0",
|
"@typescript-eslint/parser": "5.36.2",
|
||||||
"cross-env": "7.0.3",
|
"cross-env": "7.0.3",
|
||||||
"cypress": "10.4.0",
|
"cypress": "10.7.0",
|
||||||
"start-server-and-test": "1.14.0",
|
"start-server-and-test": "1.14.0",
|
||||||
"typescript": "4.7.4",
|
"typescript": "4.8.3",
|
||||||
"vue-eslint-parser": "^9.0.2"
|
"unplugin-swc": "^1.3.2",
|
||||||
|
"vue-eslint-parser": "^9.0.3"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 41 KiB |
Binary file not shown.
After Width: | Height: | Size: 28 KiB |
|
@ -10,11 +10,15 @@
|
||||||
"build": "tsc -p tsconfig.json || echo done. && tsc-alias -p tsconfig.json",
|
"build": "tsc -p tsconfig.json || echo done. && tsc-alias -p tsconfig.json",
|
||||||
"watch": "node watch.mjs",
|
"watch": "node watch.mjs",
|
||||||
"lint": "eslint --quiet \"src/**/*.ts\"",
|
"lint": "eslint --quiet \"src/**/*.ts\"",
|
||||||
"mocha": "NODE_ENV=test TS_NODE_FILES=true TS_NODE_TRANSPILE_ONLY=true TS_NODE_PROJECT=\"./test/tsconfig.json\" mocha",
|
"mocha": "cross-env NODE_ENV=test TS_NODE_FILES=true TS_NODE_TRANSPILE_ONLY=true TS_NODE_PROJECT=\"./test/tsconfig.json\" mocha",
|
||||||
"test": "yarn mocha"
|
"test": "npm run mocha"
|
||||||
|
},
|
||||||
|
"resolutions": {
|
||||||
|
"chokidar": "^3.3.1",
|
||||||
|
"lodash": "^4.17.21"
|
||||||
},
|
},
|
||||||
"optionalDependencies": {
|
"optionalDependencies": {
|
||||||
"@tensorflow/tfjs-node": "3.19.0"
|
"@tensorflow/tfjs-node": "3.20.0"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@bull-board/koa": "4.2.2",
|
"@bull-board/koa": "4.2.2",
|
||||||
|
@ -30,10 +34,10 @@
|
||||||
"archiver": "5.3.1",
|
"archiver": "5.3.1",
|
||||||
"autobind-decorator": "2.4.0",
|
"autobind-decorator": "2.4.0",
|
||||||
"autwh": "0.1.0",
|
"autwh": "0.1.0",
|
||||||
"aws-sdk": "2.1194.0",
|
"aws-sdk": "2.1213.0",
|
||||||
"bcryptjs": "2.4.3",
|
"bcryptjs": "2.4.3",
|
||||||
"blurhash": "1.1.5",
|
"blurhash": "1.1.5",
|
||||||
"bull": "4.8.5",
|
"bull": "4.9.0",
|
||||||
"cacheable-lookup": "6.1.0",
|
"cacheable-lookup": "6.1.0",
|
||||||
"cbor": "8.1.0",
|
"cbor": "8.1.0",
|
||||||
"chalk": "5.0.1",
|
"chalk": "5.0.1",
|
||||||
|
@ -42,7 +46,7 @@
|
||||||
"cli-highlight": "2.1.11",
|
"cli-highlight": "2.1.11",
|
||||||
"color-convert": "2.0.1",
|
"color-convert": "2.0.1",
|
||||||
"content-disposition": "0.5.4",
|
"content-disposition": "0.5.4",
|
||||||
"date-fns": "2.29.1",
|
"date-fns": "2.29.2",
|
||||||
"deep-email-validator": "0.1.21",
|
"deep-email-validator": "0.1.21",
|
||||||
"escape-regexp": "0.0.1",
|
"escape-regexp": "0.0.1",
|
||||||
"feed": "4.2.2",
|
"feed": "4.2.2",
|
||||||
|
@ -58,7 +62,7 @@
|
||||||
"json5": "2.2.1",
|
"json5": "2.2.1",
|
||||||
"json5-loader": "4.0.1",
|
"json5-loader": "4.0.1",
|
||||||
"jsonld": "6.0.0",
|
"jsonld": "6.0.0",
|
||||||
"jsrsasign": "10.5.26",
|
"jsrsasign": "10.5.27",
|
||||||
"koa": "2.13.4",
|
"koa": "2.13.4",
|
||||||
"koa-bodyparser": "4.3.0",
|
"koa-bodyparser": "4.3.0",
|
||||||
"koa-favicon": "2.1.0",
|
"koa-favicon": "2.1.0",
|
||||||
|
@ -72,15 +76,15 @@
|
||||||
"mime-types": "2.1.35",
|
"mime-types": "2.1.35",
|
||||||
"misskey-js": "0.0.14",
|
"misskey-js": "0.0.14",
|
||||||
"mocha": "10.0.0",
|
"mocha": "10.0.0",
|
||||||
"multer": "1.4.4",
|
"multer": "1.4.4-lts.1",
|
||||||
"nested-property": "4.0.0",
|
"nested-property": "4.0.0",
|
||||||
"node-fetch": "3.2.10",
|
"node-fetch": "3.2.10",
|
||||||
"nodemailer": "6.7.8",
|
"nodemailer": "6.7.8",
|
||||||
"nsfwjs": "2.4.1",
|
"nsfwjs": "2.4.2",
|
||||||
"oauth": "^0.9.15",
|
"oauth": "^0.9.15",
|
||||||
"os-utils": "0.0.14",
|
"os-utils": "0.0.14",
|
||||||
"parse5": "7.0.0",
|
"parse5": "7.1.1",
|
||||||
"pg": "8.7.3",
|
"pg": "8.8.0",
|
||||||
"private-ip": "2.3.4",
|
"private-ip": "2.3.4",
|
||||||
"probe-image-size": "7.2.3",
|
"probe-image-size": "7.2.3",
|
||||||
"promise-limit": "2.7.0",
|
"promise-limit": "2.7.0",
|
||||||
|
@ -99,13 +103,13 @@
|
||||||
"s-age": "1.1.2",
|
"s-age": "1.1.2",
|
||||||
"sanitize-html": "2.7.1",
|
"sanitize-html": "2.7.1",
|
||||||
"semver": "7.3.7",
|
"semver": "7.3.7",
|
||||||
"sharp": "0.30.6",
|
"sharp": "0.30.7",
|
||||||
"speakeasy": "2.0.0",
|
"speakeasy": "2.0.0",
|
||||||
"strict-event-emitter-types": "2.0.0",
|
"strict-event-emitter-types": "2.0.0",
|
||||||
"stringz": "2.1.0",
|
"stringz": "2.1.0",
|
||||||
"summaly": "2.7.0",
|
"summaly": "2.7.0",
|
||||||
"syslog-pro": "1.0.0",
|
"syslog-pro": "1.0.0",
|
||||||
"systeminformation": "5.12.5",
|
"systeminformation": "5.12.6",
|
||||||
"tinycolor2": "1.4.2",
|
"tinycolor2": "1.4.2",
|
||||||
"tmp": "0.2.1",
|
"tmp": "0.2.1",
|
||||||
"ts-loader": "9.3.1",
|
"ts-loader": "9.3.1",
|
||||||
|
@ -113,17 +117,17 @@
|
||||||
"tsc-alias": "1.7.0",
|
"tsc-alias": "1.7.0",
|
||||||
"tsconfig-paths": "4.1.0",
|
"tsconfig-paths": "4.1.0",
|
||||||
"twemoji-parser": "14.0.0",
|
"twemoji-parser": "14.0.0",
|
||||||
"typeorm": "0.3.7",
|
"typeorm": "0.3.9",
|
||||||
"ulid": "2.3.0",
|
"ulid": "2.3.0",
|
||||||
"unzipper": "0.10.11",
|
"unzipper": "0.10.11",
|
||||||
"uuid": "8.3.2",
|
"uuid": "9.0.0",
|
||||||
"web-push": "3.5.0",
|
"web-push": "3.5.0",
|
||||||
"websocket": "1.0.34",
|
"websocket": "1.0.34",
|
||||||
"ws": "8.8.1",
|
"ws": "8.8.1",
|
||||||
"xev": "3.0.2"
|
"xev": "3.0.2"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@redocly/openapi-core": "1.0.0-beta.106",
|
"@redocly/openapi-core": "1.0.0-beta.108",
|
||||||
"@types/bcryptjs": "2.4.2",
|
"@types/bcryptjs": "2.4.2",
|
||||||
"@types/bull": "3.15.9",
|
"@types/bull": "3.15.9",
|
||||||
"@types/cbor": "6.0.0",
|
"@types/cbor": "6.0.0",
|
||||||
|
@ -145,13 +149,13 @@
|
||||||
"@types/koa__multer": "2.0.4",
|
"@types/koa__multer": "2.0.4",
|
||||||
"@types/koa__router": "8.0.11",
|
"@types/koa__router": "8.0.11",
|
||||||
"@types/mocha": "9.1.1",
|
"@types/mocha": "9.1.1",
|
||||||
"@types/node": "18.7.2",
|
"@types/node": "18.7.16",
|
||||||
"@types/node-fetch": "3.0.3",
|
"@types/node-fetch": "3.0.3",
|
||||||
"@types/nodemailer": "6.4.5",
|
"@types/nodemailer": "6.4.5",
|
||||||
"@types/oauth": "0.9.1",
|
"@types/oauth": "0.9.1",
|
||||||
"@types/pug": "2.0.6",
|
"@types/pug": "2.0.6",
|
||||||
"@types/punycode": "2.1.0",
|
"@types/punycode": "2.1.0",
|
||||||
"@types/qrcode": "1.4.2",
|
"@types/qrcode": "1.5.0",
|
||||||
"@types/random-seed": "0.3.3",
|
"@types/random-seed": "0.3.3",
|
||||||
"@types/ratelimiter": "3.4.3",
|
"@types/ratelimiter": "3.4.3",
|
||||||
"@types/redis": "4.0.11",
|
"@types/redis": "4.0.11",
|
||||||
|
@ -167,13 +171,12 @@
|
||||||
"@types/web-push": "3.3.2",
|
"@types/web-push": "3.3.2",
|
||||||
"@types/websocket": "1.0.5",
|
"@types/websocket": "1.0.5",
|
||||||
"@types/ws": "8.5.3",
|
"@types/ws": "8.5.3",
|
||||||
"@typescript-eslint/eslint-plugin": "5.33.0",
|
"@typescript-eslint/eslint-plugin": "5.36.2",
|
||||||
"@typescript-eslint/parser": "5.33.0",
|
"@typescript-eslint/parser": "5.36.2",
|
||||||
"cross-env": "7.0.3",
|
"cross-env": "7.0.3",
|
||||||
"eslint": "8.21.0",
|
"eslint": "8.23.0",
|
||||||
"eslint-plugin-import": "2.26.0",
|
"eslint-plugin-import": "2.26.0",
|
||||||
"execa": "6.1.0",
|
"execa": "6.1.0",
|
||||||
"form-data": "^4.0.0",
|
"typescript": "4.8.3"
|
||||||
"typescript": "4.7.4"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -63,8 +63,6 @@ export type Source = {
|
||||||
|
|
||||||
mediaProxy?: string;
|
mediaProxy?: string;
|
||||||
proxyRemoteFiles?: boolean;
|
proxyRemoteFiles?: boolean;
|
||||||
|
|
||||||
signToActivityPubGet?: boolean;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import { Entity, Column, PrimaryColumn, ManyToOne, JoinColumn } from 'typeorm';
|
import { Entity, Column, PrimaryColumn, ManyToOne, JoinColumn } from 'typeorm';
|
||||||
import { id } from '../id.js';
|
import { id } from '../id.js';
|
||||||
import { User } from './user.js';
|
import { User } from './user.js';
|
||||||
import { Clip } from './clip.js';
|
import type { Clip } from './clip.js';
|
||||||
|
|
||||||
@Entity()
|
@Entity()
|
||||||
export class Meta {
|
export class Meta {
|
||||||
|
@ -98,22 +98,22 @@ export class Meta {
|
||||||
public blockedHosts: string[];
|
public blockedHosts: string[];
|
||||||
|
|
||||||
@Column('boolean', {
|
@Column('boolean', {
|
||||||
default: false
|
default: false,
|
||||||
})
|
})
|
||||||
public secureMode: boolean;
|
public secureMode: boolean;
|
||||||
|
|
||||||
@Column('boolean', {
|
@Column('boolean', {
|
||||||
default: false
|
default: false,
|
||||||
})
|
})
|
||||||
public privateMode: boolean;
|
public privateMode: boolean;
|
||||||
|
|
||||||
@Column('varchar', {
|
@Column('varchar', {
|
||||||
length: 256, array: true, default: '{}'
|
length: 256, array: true, default: '{}',
|
||||||
})
|
})
|
||||||
public allowedHosts: string[];
|
public allowedHosts: string[];
|
||||||
|
|
||||||
@Column('varchar', {
|
@Column('varchar', {
|
||||||
length: 512, array: true, default: '{/featured,/channels,/explore,/pages,/about-misskey}',
|
length: 512, array: true, default: '{/featured,/channels,/explore,/pages,/about-calckey}',
|
||||||
})
|
})
|
||||||
public pinnedPages: string[];
|
public pinnedPages: string[];
|
||||||
|
|
||||||
|
|
|
@ -1,18 +1,19 @@
|
||||||
|
import { In } from 'typeorm';
|
||||||
import { publishMainStream } from '@/services/stream.js';
|
import { publishMainStream } from '@/services/stream.js';
|
||||||
import { pushNotification } from '@/services/push-notification.js';
|
import { pushNotification } from '@/services/push-notification.js';
|
||||||
import { User } from '@/models/entities/user.js';
|
import { User } from '@/models/entities/user.js';
|
||||||
import { Notification } from '@/models/entities/notification.js';
|
import { Notification } from '@/models/entities/notification.js';
|
||||||
import { Notifications, Users } from '@/models/index.js';
|
import { Notifications, Users } from '@/models/index.js';
|
||||||
import { In } from 'typeorm';
|
|
||||||
|
|
||||||
export async function readNotification(
|
export async function readNotification(
|
||||||
userId: User['id'],
|
userId: User['id'],
|
||||||
notificationIds: Notification['id'][]
|
notificationIds: Notification['id'][],
|
||||||
) {
|
) {
|
||||||
if (notificationIds.length === 0) return;
|
if (notificationIds.length === 0) return;
|
||||||
|
|
||||||
// Update documents
|
// Update documents
|
||||||
const result = await Notifications.update({
|
const result = await Notifications.update({
|
||||||
|
notifieeId: userId,
|
||||||
id: In(notificationIds),
|
id: In(notificationIds),
|
||||||
isRead: false,
|
isRead: false,
|
||||||
}, {
|
}, {
|
||||||
|
@ -27,7 +28,7 @@ export async function readNotification(
|
||||||
|
|
||||||
export async function readNotificationByQuery(
|
export async function readNotificationByQuery(
|
||||||
userId: User['id'],
|
userId: User['id'],
|
||||||
query: Record<string, any>
|
query: Record<string, any>,
|
||||||
) {
|
) {
|
||||||
const notificationIds = await Notifications.findBy({
|
const notificationIds = await Notifications.findBy({
|
||||||
...query,
|
...query,
|
||||||
|
|
|
@ -12,8 +12,6 @@ export const meta = {
|
||||||
requireCredential: false,
|
requireCredential: false,
|
||||||
requireCredentialPrivateMode: true,
|
requireCredentialPrivateMode: true,
|
||||||
|
|
||||||
description: 'Get a list of children of a notes. Children includes replies as well as quote renotes that quote the respective post. A post will not be duplicated if it is a reply and a quote of a note in this thread. For depths larger than 1 the threading has to be computed by the client.',
|
|
||||||
|
|
||||||
res: {
|
res: {
|
||||||
type: 'array',
|
type: 'array',
|
||||||
optional: false, nullable: false,
|
optional: false, nullable: false,
|
||||||
|
@ -29,20 +27,7 @@ export const paramDef = {
|
||||||
type: 'object',
|
type: 'object',
|
||||||
properties: {
|
properties: {
|
||||||
noteId: { type: 'string', format: 'misskey:id' },
|
noteId: { type: 'string', format: 'misskey:id' },
|
||||||
limit: {
|
limit: { type: 'integer', minimum: 1, maximum: 100, default: 10 },
|
||||||
description: 'The maximum number of replies/quotes to show per parent note, i.e. the maximum number of children each note may have.',
|
|
||||||
type: 'integer',
|
|
||||||
minimum: 1,
|
|
||||||
maximum: 100,
|
|
||||||
default: 10,
|
|
||||||
},
|
|
||||||
depth: {
|
|
||||||
description: 'The number of layers of replies to fetch at once. Defaults to 1 for backward compatibility.',
|
|
||||||
type: 'integer',
|
|
||||||
minimum: 1,
|
|
||||||
maximum: 100,
|
|
||||||
default: 1,
|
|
||||||
},
|
|
||||||
sinceId: { type: 'string', format: 'misskey:id' },
|
sinceId: { type: 'string', format: 'misskey:id' },
|
||||||
untilId: { type: 'string', format: 'misskey:id' },
|
untilId: { type: 'string', format: 'misskey:id' },
|
||||||
},
|
},
|
||||||
|
|
|
@ -92,6 +92,10 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
const colorSchema = localStorage.getItem('colorSchema');
|
||||||
|
if (colorSchema) {
|
||||||
|
document.documentElement.style.setProperty('color-schema', colorSchema);
|
||||||
|
}
|
||||||
//#endregion
|
//#endregion
|
||||||
|
|
||||||
const fontSize = localStorage.getItem('fontSize');
|
const fontSize = localStorage.getItem('fontSize');
|
||||||
|
|
|
@ -327,32 +327,24 @@ router.get('/notes/:note', async (ctx, next) => {
|
||||||
});
|
});
|
||||||
|
|
||||||
if (note) {
|
if (note) {
|
||||||
try {
|
const _note = await Notes.pack(note);
|
||||||
// FIXME: packing with detail may throw an error if the reply or renote is not visible (#8774)
|
const profile = await UserProfiles.findOneByOrFail({ userId: note.userId });
|
||||||
const _note = await Notes.pack(note);
|
const meta = await fetchMeta();
|
||||||
const profile = await UserProfiles.findOneByOrFail({ userId: note.userId });
|
await ctx.render('note', {
|
||||||
const meta = await fetchMeta();
|
note: _note,
|
||||||
await ctx.render('note', {
|
profile,
|
||||||
note: _note,
|
avatarUrl: await Users.getAvatarUrl(await Users.findOneByOrFail({ id: note.userId })),
|
||||||
profile,
|
// TODO: Let locale changeable by instance setting
|
||||||
avatarUrl: await Users.getAvatarUrl(await Users.findOneByOrFail({ id: note.userId })),
|
summary: getNoteSummary(_note),
|
||||||
// TODO: Let locale changeable by instance setting
|
instanceName: meta.name || 'Calckey',
|
||||||
summary: getNoteSummary(_note),
|
icon: meta.iconUrl,
|
||||||
instanceName: meta.name || 'Calckey',
|
privateMode: meta.privateMode,
|
||||||
icon: meta.iconUrl,
|
themeColor: meta.themeColor,
|
||||||
themeColor: meta.themeColor,
|
});
|
||||||
});
|
|
||||||
|
|
||||||
ctx.set('Cache-Control', 'public, max-age=15');
|
ctx.set('Cache-Control', 'public, max-age=15');
|
||||||
|
|
||||||
return;
|
return;
|
||||||
} catch (err) {
|
|
||||||
if (err.id === '9725d0ce-ba28-4dde-95a7-2cbb2c15de24') {
|
|
||||||
// note not visible to user
|
|
||||||
} else {
|
|
||||||
throw err;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
await next();
|
await next();
|
||||||
|
@ -530,19 +522,20 @@ router.get('(.*)', async ctx => {
|
||||||
if (meta.customMOTD.length > 0) {
|
if (meta.customMOTD.length > 0) {
|
||||||
motd = meta.customMOTD;
|
motd = meta.customMOTD;
|
||||||
}
|
}
|
||||||
let iconUrl = meta.iconUrl;
|
let splashIconUrl = meta.iconUrl;
|
||||||
if (meta.customSplashIcons.length > 0) {
|
if (meta.customSplashIcons.length > 0) {
|
||||||
iconUrl = meta.customSplashIcons[Math.floor(Math.random() * meta.customSplashIcons.length)];
|
splashIconUrl = meta.customSplashIcons[Math.floor(Math.random() * meta.customSplashIcons.length)];
|
||||||
}
|
}
|
||||||
await ctx.render('base', {
|
await ctx.render('base', {
|
||||||
img: meta.bannerUrl,
|
img: meta.bannerUrl,
|
||||||
title: meta.name || 'Calckey',
|
title: meta.name || 'Calckey',
|
||||||
instanceName: meta.name || 'Calckey',
|
instanceName: meta.name || 'Calckey',
|
||||||
desc: meta.description,
|
desc: meta.description,
|
||||||
icon: iconUrl,
|
icon: meta.iconUrl,
|
||||||
|
splashIcon: splashIconUrl,
|
||||||
themeColor: meta.themeColor,
|
themeColor: meta.themeColor,
|
||||||
privateMode: meta.privateMode,
|
|
||||||
randomMOTD: motd[Math.floor(Math.random() * motd.length)],
|
randomMOTD: motd[Math.floor(Math.random() * motd.length)],
|
||||||
|
privateMode: meta.privateMode,
|
||||||
});
|
});
|
||||||
ctx.set('Cache-Control', 'public, max-age=3');
|
ctx.set('Cache-Control', 'public, max-age=3');
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,10 +1,12 @@
|
||||||
{
|
{
|
||||||
"short_name": "Calckey",
|
"short_name": "Calckey",
|
||||||
"name": "Calckey",
|
"name": "Calckey",
|
||||||
|
"description": "An open source, decentralized social media platform that's free forever!",
|
||||||
"start_url": "/",
|
"start_url": "/",
|
||||||
"display": "standalone",
|
"display": "standalone",
|
||||||
"background_color": "#6e6a86",
|
"background_color": "#1f1d2e",
|
||||||
"theme_color": "#31748f",
|
"theme_color": "#31748f",
|
||||||
|
"orientation": "portrait-primary",
|
||||||
"icons": [
|
"icons": [
|
||||||
{
|
{
|
||||||
"src": "/static-assets/icons/192.png",
|
"src": "/static-assets/icons/192.png",
|
||||||
|
@ -24,5 +26,32 @@
|
||||||
"text": "text",
|
"text": "text",
|
||||||
"url": "url"
|
"url": "url"
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
"screenshots" : [
|
||||||
|
{
|
||||||
|
"src": "/static-assets/screenshots/1.webp",
|
||||||
|
"sizes": "1195x579",
|
||||||
|
"type": "image/webp",
|
||||||
|
"platform": "narrow",
|
||||||
|
"label": "Profile page"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "/static-assets/screenshots/2.webp",
|
||||||
|
"sizes": "1195x579",
|
||||||
|
"type": "image/webp",
|
||||||
|
"platform": "narrow",
|
||||||
|
"label": "Posts"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"shortcuts" : [
|
||||||
|
{
|
||||||
|
"name": "Notifications",
|
||||||
|
"short_name": "Notifs",
|
||||||
|
"url": "/my/notifications"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Chats",
|
||||||
|
"url": "/my/messaging"
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|
|
@ -58,7 +58,7 @@ html
|
||||||
|
|
||||||
block og
|
block og
|
||||||
meta(property='og:title' content= title || 'Calckey')
|
meta(property='og:title' content= title || 'Calckey')
|
||||||
meta(property='og:description' content= desc || '✨🌎✨ A interplanetary communication platform ✨🚀✨')
|
meta(property='og:description' content= desc || '✨🌎 A interplanetary communication platform 🚀✨')
|
||||||
meta(property='og:image' content= img)
|
meta(property='og:image' content= img)
|
||||||
|
|
||||||
style
|
style
|
||||||
|
@ -77,7 +77,7 @@ html
|
||||||
br
|
br
|
||||||
| Please turn on your JavaScript
|
| Please turn on your JavaScript
|
||||||
div#splash
|
div#splash
|
||||||
img#splashIcon(src= icon || '/static-assets/splash.png')
|
img#splashIcon(src= splashIcon || '/static-assets/splash.png')
|
||||||
span#splashText
|
span#splashText
|
||||||
block randomMOTD
|
block randomMOTD
|
||||||
= randomMOTD
|
= randomMOTD
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
extends ./base
|
extends ./base
|
||||||
|
|
||||||
block vars
|
block vars
|
||||||
- const title = privateMode ? '非公開インスタンス' : channel.name;
|
- const title = privateMode ? instanceName : channel.name;
|
||||||
- const url = `${config.url}/channels/${channel.id}`;
|
- const url = `${config.url}/channels/${channel.id}`;
|
||||||
|
|
||||||
block title
|
block title
|
||||||
|
|
|
@ -2,7 +2,7 @@ extends ./base
|
||||||
|
|
||||||
block vars
|
block vars
|
||||||
- const user = clip.user;
|
- const user = clip.user;
|
||||||
- const title = privateMode ? '非公開インスタンス' : clip.name;
|
- const title = privateMode ? instanceName : clip.name;
|
||||||
- const url = `${config.url}/clips/${clip.id}`;
|
- const url = `${config.url}/clips/${clip.id}`;
|
||||||
|
|
||||||
block title
|
block title
|
||||||
|
|
|
@ -2,7 +2,7 @@ extends ./base
|
||||||
|
|
||||||
block vars
|
block vars
|
||||||
- const user = post.user;
|
- const user = post.user;
|
||||||
- const title = privateMode ? '非公開インスタンス' : post.title;
|
- const title = privateMode ? instanceName : post.title;
|
||||||
- const url = `${config.url}/gallery/${post.id}`;
|
- const url = `${config.url}/gallery/${post.id}`;
|
||||||
|
|
||||||
block title
|
block title
|
||||||
|
|
|
@ -2,7 +2,7 @@ extends ./base
|
||||||
|
|
||||||
block vars
|
block vars
|
||||||
- const user = note.user;
|
- const user = note.user;
|
||||||
- const title = privateMode ? '非公開インスタンス' : (user.name ? `${user.name} (@${user.username})` : `@${user.username}`);
|
- const title = privateMode ? instanceName : (user.name ? `${user.name} (@${user.username})` : `@${user.username}`);
|
||||||
- const url = `${config.url}/notes/${note.id}`;
|
- const url = `${config.url}/notes/${note.id}`;
|
||||||
- const isRenote = note.renote && note.text == null && note.fileIds.length == 0 && note.poll == null;
|
- const isRenote = note.renote && note.text == null && note.fileIds.length == 0 && note.poll == null;
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@ extends ./base
|
||||||
|
|
||||||
block vars
|
block vars
|
||||||
- const user = page.user;
|
- const user = page.user;
|
||||||
- const title = privateMode ? '非公開インスタンス' : page.title;
|
- const title = privateMode ? instanceName : page.title;
|
||||||
- const url = `${config.url}/@${user.username}/${page.name}`;
|
- const url = `${config.url}/@${user.username}/${page.name}`;
|
||||||
|
|
||||||
block title
|
block title
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
extends ./base
|
extends ./base
|
||||||
|
|
||||||
block vars
|
block vars
|
||||||
- const title = privateMode ? '非公開インスタンス' : (user.name ? `${user.name} (@${user.username})` : `@${user.username}`);
|
- const title = privateMode ? instanceName : (user.name ? `${user.name} (@${user.username})` : `@${user.username}`);
|
||||||
- const url = `${config.url}/@${(user.host ? `${user.username}@${user.host}` : user.username)}`;
|
- const url = `${config.url}/@${(user.host ? `${user.username}@${user.host}` : user.username)}`;
|
||||||
|
|
||||||
block title
|
block title
|
||||||
|
|
|
@ -8,25 +8,25 @@
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@discordapp/twemoji": "14.0.2",
|
"@discordapp/twemoji": "14.0.2",
|
||||||
"@fortawesome/fontawesome-free": "6.1.2",
|
"@fortawesome/fontawesome-free": "6.2.0",
|
||||||
"@rollup/plugin-alias": "3.1.9",
|
"@rollup/plugin-alias": "3.1.9",
|
||||||
"@rollup/plugin-json": "4.1.0",
|
"@rollup/plugin-json": "4.1.0",
|
||||||
"@rollup/pluginutils": "^4.2.1",
|
"@rollup/pluginutils": "^4.2.1",
|
||||||
"@syuilo/aiscript": "0.11.1",
|
"@syuilo/aiscript": "0.11.1",
|
||||||
"@vitejs/plugin-vue": "3.0.3",
|
"@vitejs/plugin-vue": "3.1.0",
|
||||||
"@vue/compiler-sfc": "3.2.37",
|
"@vue/compiler-sfc": "3.2.39",
|
||||||
"autobind-decorator": "2.4.0",
|
"autobind-decorator": "2.4.0",
|
||||||
"autosize": "5.0.1",
|
"autosize": "5.0.1",
|
||||||
"blurhash": "1.1.5",
|
"blurhash": "1.1.5",
|
||||||
"broadcast-channel": "4.14.0",
|
"broadcast-channel": "4.14.0",
|
||||||
"browser-image-resizer": "git+https://github.com/misskey-dev/browser-image-resizer#v2.2.1-misskey.2",
|
"browser-image-resizer": "https://github.com/misskey-dev/browser-image-resizer",
|
||||||
"chart.js": "3.9.1",
|
"chart.js": "3.9.1",
|
||||||
"chartjs-adapter-date-fns": "2.0.0",
|
"chartjs-adapter-date-fns": "2.0.0",
|
||||||
"chartjs-plugin-gradient": "0.5.0",
|
"chartjs-plugin-gradient": "0.5.1",
|
||||||
"chartjs-plugin-zoom": "1.2.1",
|
"chartjs-plugin-zoom": "1.2.1",
|
||||||
"compare-versions": "4.1.3",
|
"compare-versions": "5.0.1",
|
||||||
"cropperjs": "2.0.0-beta",
|
"cropperjs": "2.0.0-beta.1",
|
||||||
"date-fns": "2.29.1",
|
"date-fns": "2.29.2",
|
||||||
"escape-regexp": "0.0.1",
|
"escape-regexp": "0.0.1",
|
||||||
"eventemitter3": "4.0.7",
|
"eventemitter3": "4.0.7",
|
||||||
"idb-keyval": "6.2.0",
|
"idb-keyval": "6.2.0",
|
||||||
|
@ -36,36 +36,40 @@
|
||||||
"matter-js": "0.18.0",
|
"matter-js": "0.18.0",
|
||||||
"mfm-js": "0.23.0",
|
"mfm-js": "0.23.0",
|
||||||
"misskey-js": "0.0.14",
|
"misskey-js": "0.0.14",
|
||||||
"photoswipe": "5.3.0",
|
"photoswipe": "5.3.2",
|
||||||
"prismjs": "1.28.0",
|
"prismjs": "1.29.0",
|
||||||
"punycode": "2.1.1",
|
"punycode": "2.1.1",
|
||||||
"querystring": "0.2.1",
|
"querystring": "0.2.1",
|
||||||
"rndstr": "1.0.0",
|
"rndstr": "1.0.0",
|
||||||
"s-age": "1.1.2",
|
"s-age": "1.1.2",
|
||||||
"sass": "1.54.4",
|
"sass": "1.54.9",
|
||||||
"seedrandom": "3.0.5",
|
"seedrandom": "3.0.5",
|
||||||
"strict-event-emitter-types": "2.0.0",
|
"strict-event-emitter-types": "2.0.0",
|
||||||
"stringz": "2.1.0",
|
"stringz": "2.1.0",
|
||||||
|
"swiper": "^8.3.2",
|
||||||
"syuilo-password-strength": "0.0.1",
|
"syuilo-password-strength": "0.0.1",
|
||||||
"tesseract.js": "^2.1.5",
|
"tesseract.js": "^2.1.5",
|
||||||
"textarea-caret": "3.1.0",
|
"textarea-caret": "3.1.0",
|
||||||
"three": "0.143.0",
|
"three": "0.144.0",
|
||||||
"throttle-debounce": "5.0.0",
|
"throttle-debounce": "5.0.0",
|
||||||
"tinycolor2": "1.4.2",
|
"tinycolor2": "1.4.2",
|
||||||
"tsc-alias": "1.7.0",
|
"tsc-alias": "1.7.0",
|
||||||
"tsconfig-paths": "4.1.0",
|
"tsconfig-paths": "4.1.0",
|
||||||
"twemoji-parser": "14.0.0",
|
"twemoji-parser": "14.0.0",
|
||||||
"typescript": "4.7.4",
|
"typescript": "4.8.3",
|
||||||
"uuid": "8.3.2",
|
"uuid": "9.0.0",
|
||||||
"vanilla-tilt": "1.7.2",
|
"vanilla-tilt": "1.7.2",
|
||||||
"vite": "3.0.7",
|
"vite": "^3.1.0",
|
||||||
"vue": "3.2.37",
|
"vue": "3.2.39",
|
||||||
|
"vue-isyourpasswordsafe": "^2.0.0",
|
||||||
|
"vue-plyr": "^7.0.0",
|
||||||
"vue-prism-editor": "2.0.0-alpha.2",
|
"vue-prism-editor": "2.0.0-alpha.2",
|
||||||
"vuedraggable": "4.0.1"
|
"vue3-lottie": "^2.3.0",
|
||||||
|
"vuedraggable": "4.1.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/escape-regexp": "0.0.1",
|
"@types/escape-regexp": "0.0.1",
|
||||||
"@types/glob": "7.2.0",
|
"@types/glob": "8.0.0",
|
||||||
"@types/gulp": "4.0.9",
|
"@types/gulp": "4.0.9",
|
||||||
"@types/gulp-rename": "2.0.1",
|
"@types/gulp-rename": "2.0.1",
|
||||||
"@types/katex": "0.14.0",
|
"@types/katex": "0.14.0",
|
||||||
|
@ -75,14 +79,14 @@
|
||||||
"@types/throttle-debounce": "5.0.0",
|
"@types/throttle-debounce": "5.0.0",
|
||||||
"@types/tinycolor2": "1.4.3",
|
"@types/tinycolor2": "1.4.3",
|
||||||
"@types/uuid": "8.3.4",
|
"@types/uuid": "8.3.4",
|
||||||
"@typescript-eslint/eslint-plugin": "5.33.0",
|
"@typescript-eslint/eslint-plugin": "5.36.2",
|
||||||
"@typescript-eslint/parser": "5.33.0",
|
"@typescript-eslint/parser": "5.36.2",
|
||||||
"cross-env": "7.0.3",
|
"cross-env": "7.0.3",
|
||||||
"cypress": "10.4.0",
|
"cypress": "10.7.0",
|
||||||
"eslint": "8.21.0",
|
"eslint": "8.23.0",
|
||||||
"eslint-plugin-import": "2.26.0",
|
"eslint-plugin-import": "2.26.0",
|
||||||
"eslint-plugin-vue": "9.3.0",
|
"eslint-plugin-vue": "9.4.0",
|
||||||
"rollup": "2.77.3",
|
"rollup": "2.79.0",
|
||||||
"start-server-and-test": "1.14.0"
|
"start-server-and-test": "1.14.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -146,7 +146,7 @@ export async function openAccountMenu(opts: {
|
||||||
onChoose?: (account: misskey.entities.UserDetailed) => void;
|
onChoose?: (account: misskey.entities.UserDetailed) => void;
|
||||||
}, ev: MouseEvent) {
|
}, ev: MouseEvent) {
|
||||||
function showSigninDialog() {
|
function showSigninDialog() {
|
||||||
popup(defineAsyncComponent(() => import('@/components/signin-dialog.vue')), {}, {
|
popup(defineAsyncComponent(() => import('@/components/MkSigninDialog.vue')), {}, {
|
||||||
done: res => {
|
done: res => {
|
||||||
addAccount(res.id, res.i);
|
addAccount(res.id, res.i);
|
||||||
success();
|
success();
|
||||||
|
@ -155,7 +155,7 @@ export async function openAccountMenu(opts: {
|
||||||
}
|
}
|
||||||
|
|
||||||
function createAccount() {
|
function createAccount() {
|
||||||
popup(defineAsyncComponent(() => import('@/components/signup-dialog.vue')), {}, {
|
popup(defineAsyncComponent(() => import('@/components/MkSignupDialog.vue')), {}, {
|
||||||
done: res => {
|
done: res => {
|
||||||
addAccount(res.id, res.i);
|
addAccount(res.id, res.i);
|
||||||
switchAccountWithToken(res.i);
|
switchAccountWithToken(res.i);
|
||||||
|
|
|
@ -36,9 +36,9 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import MkButton from '@/components/ui/button.vue';
|
import MkButton from '@/components/MkButton.vue';
|
||||||
import MkSwitch from '@/components/form/switch.vue';
|
import MkSwitch from '@/components/form/switch.vue';
|
||||||
import MkKeyValue from '@/components/key-value.vue';
|
import MkKeyValue from '@/components/MkKeyValue.vue';
|
||||||
import { acct, userPage } from '@/filters/user';
|
import { acct, userPage } from '@/filters/user';
|
||||||
import * as os from '@/os';
|
import * as os from '@/os';
|
||||||
import { i18n } from '@/i18n';
|
import { i18n } from '@/i18n';
|
|
@ -25,9 +25,9 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref } from 'vue';
|
import { ref } from 'vue';
|
||||||
import * as Misskey from 'misskey-js';
|
import * as Misskey from 'misskey-js';
|
||||||
import XWindow from '@/components/ui/window.vue';
|
import XWindow from '@/components/MkWindow.vue';
|
||||||
import MkTextarea from '@/components/form/textarea.vue';
|
import MkTextarea from '@/components/form/textarea.vue';
|
||||||
import MkButton from '@/components/ui/button.vue';
|
import MkButton from '@/components/MkButton.vue';
|
||||||
import * as os from '@/os';
|
import * as os from '@/os';
|
||||||
import { i18n } from '@/i18n';
|
import { i18n } from '@/i18n';
|
||||||
|
|
|
@ -26,6 +26,7 @@
|
||||||
</text>
|
</text>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
<!--
|
||||||
<line
|
<line
|
||||||
:x1="5 - (Math.sin(sAngle) * (sHandLengthRatio * handsTailLength))"
|
:x1="5 - (Math.sin(sAngle) * (sHandLengthRatio * handsTailLength))"
|
||||||
:y1="5 + (Math.cos(sAngle) * (sHandLengthRatio * handsTailLength))"
|
:y1="5 + (Math.cos(sAngle) * (sHandLengthRatio * handsTailLength))"
|
||||||
|
@ -35,6 +36,20 @@
|
||||||
:stroke-width="thickness / 2"
|
:stroke-width="thickness / 2"
|
||||||
stroke-linecap="round"
|
stroke-linecap="round"
|
||||||
/>
|
/>
|
||||||
|
-->
|
||||||
|
|
||||||
|
<line
|
||||||
|
class="s"
|
||||||
|
:class="{ animate: !disableSAnimate && sAnimation !== 'none', elastic: sAnimation === 'elastic', easeOut: sAnimation === 'easeOut' }"
|
||||||
|
:x1="5 - (0 * (sHandLengthRatio * handsTailLength))"
|
||||||
|
:y1="5 + (1 * (sHandLengthRatio * handsTailLength))"
|
||||||
|
:x2="5 + (0 * ((sHandLengthRatio * 5) - handsPadding))"
|
||||||
|
:y2="5 - (1 * ((sHandLengthRatio * 5) - handsPadding))"
|
||||||
|
:stroke="sHandColor"
|
||||||
|
:stroke-width="thickness / 2"
|
||||||
|
:style="`transform: rotateZ(${sAngle}rad)`"
|
||||||
|
stroke-linecap="round"
|
||||||
|
/>
|
||||||
|
|
||||||
<line
|
<line
|
||||||
:x1="5 - (Math.sin(mAngle) * (mHandLengthRatio * handsTailLength))"
|
:x1="5 - (Math.sin(mAngle) * (mHandLengthRatio * handsTailLength))"
|
||||||
|
@ -59,7 +74,7 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { ref, computed, onMounted, onBeforeUnmount, shallowRef } from 'vue';
|
import { ref, computed, onMounted, onBeforeUnmount, shallowRef, nextTick } from 'vue';
|
||||||
import tinycolor from 'tinycolor2';
|
import tinycolor from 'tinycolor2';
|
||||||
import { globalEvents } from '@/events.js';
|
import { globalEvents } from '@/events.js';
|
||||||
|
|
||||||
|
@ -84,6 +99,7 @@ const props = withDefaults(defineProps<{
|
||||||
twentyfour?: boolean;
|
twentyfour?: boolean;
|
||||||
graduations?: 'none' | 'dots' | 'numbers';
|
graduations?: 'none' | 'dots' | 'numbers';
|
||||||
fadeGraduations?: boolean;
|
fadeGraduations?: boolean;
|
||||||
|
sAnimation?: 'none' | 'elastic' | 'easeOut';
|
||||||
}>(), {
|
}>(), {
|
||||||
numbers: false,
|
numbers: false,
|
||||||
thickness: 0.1,
|
thickness: 0.1,
|
||||||
|
@ -91,6 +107,7 @@ const props = withDefaults(defineProps<{
|
||||||
twentyfour: false,
|
twentyfour: false,
|
||||||
graduations: 'dots',
|
graduations: 'dots',
|
||||||
fadeGraduations: true,
|
fadeGraduations: true,
|
||||||
|
sAnimation: 'elastic',
|
||||||
});
|
});
|
||||||
|
|
||||||
const graduationsMajor = computed(() => {
|
const graduationsMajor = computed(() => {
|
||||||
|
@ -125,6 +142,8 @@ let s = $ref<number>(0);
|
||||||
let hAngle = $ref<number>(0);
|
let hAngle = $ref<number>(0);
|
||||||
let mAngle = $ref<number>(0);
|
let mAngle = $ref<number>(0);
|
||||||
let sAngle = $ref<number>(0);
|
let sAngle = $ref<number>(0);
|
||||||
|
let disableSAnimate = $ref(false);
|
||||||
|
let sOneRound = false;
|
||||||
|
|
||||||
function tick() {
|
function tick() {
|
||||||
const now = new Date();
|
const now = new Date();
|
||||||
|
@ -134,7 +153,21 @@ function tick() {
|
||||||
h = now.getHours();
|
h = now.getHours();
|
||||||
hAngle = Math.PI * (h % (props.twentyfour ? 24 : 12) + (m + s / 60) / 60) / (props.twentyfour ? 12 : 6);
|
hAngle = Math.PI * (h % (props.twentyfour ? 24 : 12) + (m + s / 60) / 60) / (props.twentyfour ? 12 : 6);
|
||||||
mAngle = Math.PI * (m + s / 60) / 30;
|
mAngle = Math.PI * (m + s / 60) / 30;
|
||||||
sAngle = Math.PI * s / 30;
|
if (sOneRound) { // 秒針が一周した際のアニメーションをよしなに処理する(これが無いと秒が59->0になったときに期待したアニメーションにならない)
|
||||||
|
sAngle = Math.PI * 60 / 30;
|
||||||
|
window.setTimeout(() => {
|
||||||
|
disableSAnimate = true;
|
||||||
|
window.setTimeout(() => {
|
||||||
|
sAngle = 0;
|
||||||
|
window.setTimeout(() => {
|
||||||
|
disableSAnimate = false;
|
||||||
|
}, 100);
|
||||||
|
}, 100);
|
||||||
|
}, 700);
|
||||||
|
} else {
|
||||||
|
sAngle = Math.PI * s / 30;
|
||||||
|
}
|
||||||
|
sOneRound = s === 59;
|
||||||
}
|
}
|
||||||
|
|
||||||
tick();
|
tick();
|
||||||
|
@ -175,5 +208,18 @@ onBeforeUnmount(() => {
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.mbcofsoe {
|
.mbcofsoe {
|
||||||
display: block;
|
display: block;
|
||||||
|
|
||||||
|
> .s {
|
||||||
|
will-change: transform;
|
||||||
|
transform-origin: 50% 50%;
|
||||||
|
|
||||||
|
&.animate.elastic {
|
||||||
|
transition: transform .2s cubic-bezier(.4,2.08,.55,.44);
|
||||||
|
}
|
||||||
|
|
||||||
|
&.animate.easeOut {
|
||||||
|
transition: transform .7s cubic-bezier(0,.7,.3,1);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
|
@ -3,7 +3,7 @@
|
||||||
v-if="!link" class="bghgjjyj _button"
|
v-if="!link" class="bghgjjyj _button"
|
||||||
:class="{ inline, primary, gradate, danger, rounded, full }"
|
:class="{ inline, primary, gradate, danger, rounded, full }"
|
||||||
:type="type"
|
:type="type"
|
||||||
@click="$emit('click', $event)"
|
@click="emit('click', $event)"
|
||||||
@mousedown="onMousedown"
|
@mousedown="onMousedown"
|
||||||
>
|
>
|
||||||
<div ref="ripples" class="ripples"></div>
|
<div ref="ripples" class="ripples"></div>
|
||||||
|
@ -24,114 +24,77 @@
|
||||||
</MkA>
|
</MkA>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts" setup>
|
||||||
import { defineComponent } from 'vue';
|
import { nextTick, onMounted } from 'vue';
|
||||||
|
|
||||||
export default defineComponent({
|
const props = defineProps<{
|
||||||
props: {
|
type?: 'button' | 'submit' | 'reset';
|
||||||
type: {
|
primary?: boolean;
|
||||||
type: String,
|
gradate?: boolean;
|
||||||
required: false,
|
rounded?: boolean;
|
||||||
},
|
inline?: boolean;
|
||||||
primary: {
|
link?: boolean;
|
||||||
type: Boolean,
|
to?: string;
|
||||||
required: false,
|
autofocus?: boolean;
|
||||||
default: false,
|
wait?: boolean;
|
||||||
},
|
danger?: boolean;
|
||||||
gradate: {
|
full?: boolean;
|
||||||
type: Boolean,
|
}>();
|
||||||
required: false,
|
|
||||||
default: false,
|
|
||||||
},
|
|
||||||
rounded: {
|
|
||||||
type: Boolean,
|
|
||||||
required: false,
|
|
||||||
default: true,
|
|
||||||
},
|
|
||||||
inline: {
|
|
||||||
type: Boolean,
|
|
||||||
required: false,
|
|
||||||
default: false,
|
|
||||||
},
|
|
||||||
link: {
|
|
||||||
type: Boolean,
|
|
||||||
required: false,
|
|
||||||
default: false,
|
|
||||||
},
|
|
||||||
to: {
|
|
||||||
type: String,
|
|
||||||
required: false,
|
|
||||||
},
|
|
||||||
autofocus: {
|
|
||||||
type: Boolean,
|
|
||||||
required: false,
|
|
||||||
default: false,
|
|
||||||
},
|
|
||||||
wait: {
|
|
||||||
type: Boolean,
|
|
||||||
required: false,
|
|
||||||
default: false,
|
|
||||||
},
|
|
||||||
danger: {
|
|
||||||
type: Boolean,
|
|
||||||
required: false,
|
|
||||||
default: false,
|
|
||||||
},
|
|
||||||
full: {
|
|
||||||
type: Boolean,
|
|
||||||
required: false,
|
|
||||||
default: false,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
emits: ['click'],
|
|
||||||
mounted() {
|
|
||||||
if (this.autofocus) {
|
|
||||||
this.$nextTick(() => {
|
|
||||||
this.$el.focus();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
onMousedown(evt: MouseEvent) {
|
|
||||||
function distance(p, q) {
|
|
||||||
return Math.hypot(p.x - q.x, p.y - q.y);
|
|
||||||
}
|
|
||||||
|
|
||||||
function calcCircleScale(boxW, boxH, circleCenterX, circleCenterY) {
|
const emit = defineEmits<{
|
||||||
const origin = { x: circleCenterX, y: circleCenterY };
|
(ev: 'click', payload: MouseEvent): void;
|
||||||
const dist1 = distance({ x: 0, y: 0 }, origin);
|
}>();
|
||||||
const dist2 = distance({ x: boxW, y: 0 }, origin);
|
|
||||||
const dist3 = distance({ x: 0, y: boxH }, origin);
|
|
||||||
const dist4 = distance({ x: boxW, y: boxH }, origin);
|
|
||||||
return Math.max(dist1, dist2, dist3, dist4) * 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
const rect = evt.target.getBoundingClientRect();
|
let el = $ref<HTMLElement | null>(null);
|
||||||
|
let ripples = $ref<HTMLElement | null>(null);
|
||||||
|
|
||||||
const ripple = document.createElement('div');
|
onMounted(() => {
|
||||||
ripple.style.top = (evt.clientY - rect.top - 1).toString() + 'px';
|
if (props.autofocus) {
|
||||||
ripple.style.left = (evt.clientX - rect.left - 1).toString() + 'px';
|
nextTick(() => {
|
||||||
|
el!.focus();
|
||||||
this.$refs.ripples.appendChild(ripple);
|
});
|
||||||
|
}
|
||||||
const circleCenterX = evt.clientX - rect.left;
|
|
||||||
const circleCenterY = evt.clientY - rect.top;
|
|
||||||
|
|
||||||
const scale = calcCircleScale(evt.target.clientWidth, evt.target.clientHeight, circleCenterX, circleCenterY);
|
|
||||||
|
|
||||||
window.setTimeout(() => {
|
|
||||||
ripple.style.transform = 'scale(' + (scale / 2) + ')';
|
|
||||||
}, 1);
|
|
||||||
window.setTimeout(() => {
|
|
||||||
ripple.style.transition = 'all 1s ease';
|
|
||||||
ripple.style.opacity = '0';
|
|
||||||
}, 1000);
|
|
||||||
window.setTimeout(() => {
|
|
||||||
if (this.$refs.ripples) this.$refs.ripples.removeChild(ripple);
|
|
||||||
}, 2000);
|
|
||||||
},
|
|
||||||
},
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
function distance(p, q): number {
|
||||||
|
return Math.hypot(p.x - q.x, p.y - q.y);
|
||||||
|
}
|
||||||
|
|
||||||
|
function calcCircleScale(boxW, boxH, circleCenterX, circleCenterY): number {
|
||||||
|
const origin = { x: circleCenterX, y: circleCenterY };
|
||||||
|
const dist1 = distance({ x: 0, y: 0 }, origin);
|
||||||
|
const dist2 = distance({ x: boxW, y: 0 }, origin);
|
||||||
|
const dist3 = distance({ x: 0, y: boxH }, origin);
|
||||||
|
const dist4 = distance({ x: boxW, y: boxH }, origin);
|
||||||
|
return Math.max(dist1, dist2, dist3, dist4) * 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
function onMousedown(evt: MouseEvent): void {
|
||||||
|
const target = evt.target! as HTMLElement;
|
||||||
|
const rect = target.getBoundingClientRect();
|
||||||
|
|
||||||
|
const ripple = document.createElement('div');
|
||||||
|
ripple.style.top = (evt.clientY - rect.top - 1).toString() + 'px';
|
||||||
|
ripple.style.left = (evt.clientX - rect.left - 1).toString() + 'px';
|
||||||
|
|
||||||
|
ripples!.appendChild(ripple);
|
||||||
|
|
||||||
|
const circleCenterX = evt.clientX - rect.left;
|
||||||
|
const circleCenterY = evt.clientY - rect.top;
|
||||||
|
|
||||||
|
const scale = calcCircleScale(target.clientWidth, target.clientHeight, circleCenterX, circleCenterY);
|
||||||
|
|
||||||
|
window.setTimeout(() => {
|
||||||
|
ripple.style.transform = 'scale(' + (scale / 2) + ')';
|
||||||
|
}, 1);
|
||||||
|
window.setTimeout(() => {
|
||||||
|
ripple.style.transition = 'all 1s ease';
|
||||||
|
ripple.style.opacity = '0';
|
||||||
|
}, 1000);
|
||||||
|
window.setTimeout(() => {
|
||||||
|
if (ripples) ripples.removeChild(ripple);
|
||||||
|
}, 2000);
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
|
@ -14,7 +14,7 @@
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { } from 'vue';
|
import { } from 'vue';
|
||||||
import MkTooltip from './ui/tooltip.vue';
|
import MkTooltip from './MkTooltip.vue';
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
showing: boolean;
|
showing: boolean;
|
|
@ -11,5 +11,5 @@ defineProps<{
|
||||||
inline?: boolean;
|
inline?: boolean;
|
||||||
}>();
|
}>();
|
||||||
|
|
||||||
const XCode = defineAsyncComponent(() => import('./code-core.vue'));
|
const XCode = defineAsyncComponent(() => import('@/components/MkCode.core.vue'));
|
||||||
</script>
|
</script>
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { onMounted, onBeforeUnmount } from 'vue';
|
import { onMounted, onBeforeUnmount } from 'vue';
|
||||||
import MkMenu from './menu.vue';
|
import MkMenu from './MkMenu.vue';
|
||||||
import { MenuItem } from './types/menu.vue';
|
import { MenuItem } from './types/menu.vue';
|
||||||
import contains from '@/scripts/contains';
|
import contains from '@/scripts/contains';
|
||||||
import * as os from '@/os';
|
import * as os from '@/os';
|
|
@ -30,7 +30,7 @@ import { nextTick, onMounted } from 'vue';
|
||||||
import * as misskey from 'misskey-js';
|
import * as misskey from 'misskey-js';
|
||||||
import Cropper from 'cropperjs';
|
import Cropper from 'cropperjs';
|
||||||
import tinycolor from 'tinycolor2';
|
import tinycolor from 'tinycolor2';
|
||||||
import XModalWindow from '@/components/ui/modal-window.vue';
|
import XModalWindow from '@/components/MkModalWindow.vue';
|
||||||
import * as os from '@/os';
|
import * as os from '@/os';
|
||||||
import { $i } from '@/account';
|
import { $i } from '@/account';
|
||||||
import { defaultStore } from '@/store';
|
import { defaultStore } from '@/store';
|
|
@ -38,13 +38,19 @@ const toggle = () => {
|
||||||
.nrvgflfu {
|
.nrvgflfu {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
padding: 4px 8px;
|
padding: 4px 8px;
|
||||||
font-size: 0.7em;
|
font-size: 0.8em;
|
||||||
color: var(--cwFg);
|
color: var(--cwFg);
|
||||||
background: var(--cwBg);
|
background: var(--cwBg);
|
||||||
border-radius: 2px;
|
padding: 6px 10px;
|
||||||
|
width: 90%;
|
||||||
|
border-radius: 10px;
|
||||||
|
margin-top: 10px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
transition: background-color 0.25s ease-in-out;
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
background: var(--cwHoverBg);
|
background: var(--cwFg);
|
||||||
|
color: var(--cwBg);
|
||||||
}
|
}
|
||||||
|
|
||||||
> span {
|
> span {
|
|
@ -1,6 +1,6 @@
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { defineComponent, h, PropType, TransitionGroup } from 'vue';
|
import { defineComponent, h, PropType, TransitionGroup } from 'vue';
|
||||||
import MkAd from '@/components/global/ad.vue';
|
import MkAd from '@/components/global/MkAd.vue';
|
||||||
import { i18n } from '@/i18n';
|
import { i18n } from '@/i18n';
|
||||||
import { defaultStore } from '@/store';
|
import { defaultStore } from '@/store';
|
||||||
|
|
||||||
|
@ -13,22 +13,22 @@ export default defineComponent({
|
||||||
direction: {
|
direction: {
|
||||||
type: String,
|
type: String,
|
||||||
required: false,
|
required: false,
|
||||||
default: 'down'
|
default: 'down',
|
||||||
},
|
},
|
||||||
reversed: {
|
reversed: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
required: false,
|
required: false,
|
||||||
default: false
|
default: false,
|
||||||
},
|
},
|
||||||
noGap: {
|
noGap: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
required: false,
|
required: false,
|
||||||
default: false
|
default: false,
|
||||||
},
|
},
|
||||||
ad: {
|
ad: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
required: false,
|
required: false,
|
||||||
default: false
|
default: false,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -38,7 +38,7 @@ export default defineComponent({
|
||||||
const month = new Date(time).getMonth() + 1;
|
const month = new Date(time).getMonth() + 1;
|
||||||
return i18n.t('monthAndDay', {
|
return i18n.t('monthAndDay', {
|
||||||
month: month.toString(),
|
month: month.toString(),
|
||||||
day: date.toString()
|
day: date.toString(),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -48,7 +48,7 @@ export default defineComponent({
|
||||||
if (!slots || !slots.default) return;
|
if (!slots || !slots.default) return;
|
||||||
|
|
||||||
const el = slots.default({
|
const el = slots.default({
|
||||||
item: item
|
item: item,
|
||||||
})[0];
|
})[0];
|
||||||
if (el.key == null && item.id) el.key = item.id;
|
if (el.key == null && item.id) el.key = item.id;
|
||||||
|
|
||||||
|
@ -60,20 +60,20 @@ export default defineComponent({
|
||||||
class: 'separator',
|
class: 'separator',
|
||||||
key: item.id + ':separator',
|
key: item.id + ':separator',
|
||||||
}, h('p', {
|
}, h('p', {
|
||||||
class: 'date'
|
class: 'date',
|
||||||
}, [
|
}, [
|
||||||
h('span', [
|
h('span', [
|
||||||
h('i', {
|
h('i', {
|
||||||
class: 'fas fa-angle-up icon',
|
class: 'fas fa-angle-up icon',
|
||||||
}),
|
}),
|
||||||
getDateText(item.createdAt)
|
getDateText(item.createdAt),
|
||||||
]),
|
]),
|
||||||
h('span', [
|
h('span', [
|
||||||
getDateText(props.items[i + 1].createdAt),
|
getDateText(props.items[i + 1].createdAt),
|
||||||
h('i', {
|
h('i', {
|
||||||
class: 'fas fa-angle-down icon',
|
class: 'fas fa-angle-down icon',
|
||||||
})
|
}),
|
||||||
])
|
]),
|
||||||
]));
|
]));
|
||||||
|
|
||||||
return [el, separator];
|
return [el, separator];
|
||||||
|
@ -93,16 +93,16 @@ export default defineComponent({
|
||||||
return () => h(
|
return () => h(
|
||||||
defaultStore.state.animation ? TransitionGroup : 'div',
|
defaultStore.state.animation ? TransitionGroup : 'div',
|
||||||
defaultStore.state.animation ? {
|
defaultStore.state.animation ? {
|
||||||
class: 'sqadhkmv' + (props.noGap ? ' noGap' : ''),
|
class: 'sqadhkmv' + (props.noGap ? ' noGap' : ''),
|
||||||
name: 'list',
|
name: 'list',
|
||||||
tag: 'div',
|
tag: 'div',
|
||||||
'data-direction': props.direction,
|
'data-direction': props.direction,
|
||||||
'data-reversed': props.reversed ? 'true' : 'false',
|
'data-reversed': props.reversed ? 'true' : 'false',
|
||||||
} : {
|
} : {
|
||||||
class: 'sqadhkmv' + (props.noGap ? ' noGap' : ''),
|
class: 'sqadhkmv' + (props.noGap ? ' noGap' : ''),
|
||||||
},
|
},
|
||||||
{ default: renderChildren });
|
{ default: renderChildren });
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -40,8 +40,8 @@
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { onBeforeUnmount, onMounted, ref } from 'vue';
|
import { onBeforeUnmount, onMounted, ref } from 'vue';
|
||||||
import MkModal from '@/components/ui/modal.vue';
|
import MkModal from '@/components/MkModal.vue';
|
||||||
import MkButton from '@/components/ui/button.vue';
|
import MkButton from '@/components/MkButton.vue';
|
||||||
import MkInput from '@/components/form/input.vue';
|
import MkInput from '@/components/form/input.vue';
|
||||||
import MkSelect from '@/components/form/select.vue';
|
import MkSelect from '@/components/form/select.vue';
|
||||||
import { i18n } from '@/i18n';
|
import { i18n } from '@/i18n';
|
|
@ -1,5 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="ncvczrfv"
|
<div
|
||||||
|
class="ncvczrfv"
|
||||||
:class="{ isSelected }"
|
:class="{ isSelected }"
|
||||||
draggable="true"
|
draggable="true"
|
||||||
:title="title"
|
:title="title"
|
||||||
|
@ -34,7 +35,7 @@
|
||||||
import { computed, defineAsyncComponent, ref } from 'vue';
|
import { computed, defineAsyncComponent, ref } from 'vue';
|
||||||
import * as Misskey from 'misskey-js';
|
import * as Misskey from 'misskey-js';
|
||||||
import copyToClipboard from '@/scripts/copy-to-clipboard';
|
import copyToClipboard from '@/scripts/copy-to-clipboard';
|
||||||
import MkDriveFileThumbnail from './drive-file-thumbnail.vue';
|
import MkDriveFileThumbnail from '@/components/MkDriveFileThumbnail.vue';
|
||||||
import bytes from '@/filters/bytes';
|
import bytes from '@/filters/bytes';
|
||||||
import * as os from '@/os';
|
import * as os from '@/os';
|
||||||
import { i18n } from '@/i18n';
|
import { i18n } from '@/i18n';
|
||||||
|
@ -63,31 +64,31 @@ function getMenu() {
|
||||||
return [{
|
return [{
|
||||||
text: i18n.ts.rename,
|
text: i18n.ts.rename,
|
||||||
icon: 'fas fa-i-cursor',
|
icon: 'fas fa-i-cursor',
|
||||||
action: rename
|
action: rename,
|
||||||
}, {
|
}, {
|
||||||
text: props.file.isSensitive ? i18n.ts.unmarkAsSensitive : i18n.ts.markAsSensitive,
|
text: props.file.isSensitive ? i18n.ts.unmarkAsSensitive : i18n.ts.markAsSensitive,
|
||||||
icon: props.file.isSensitive ? 'fas fa-eye' : 'fas fa-eye-slash',
|
icon: props.file.isSensitive ? 'fas fa-eye' : 'fas fa-eye-slash',
|
||||||
action: toggleSensitive
|
action: toggleSensitive,
|
||||||
}, {
|
}, {
|
||||||
text: i18n.ts.describeFile,
|
text: i18n.ts.describeFile,
|
||||||
icon: 'fas fa-i-cursor',
|
icon: 'fas fa-i-cursor',
|
||||||
action: describe
|
action: describe,
|
||||||
}, null, {
|
}, null, {
|
||||||
text: i18n.ts.copyUrl,
|
text: i18n.ts.copyUrl,
|
||||||
icon: 'fas fa-link',
|
icon: 'fas fa-link',
|
||||||
action: copyUrl
|
action: copyUrl,
|
||||||
}, {
|
}, {
|
||||||
type: 'a',
|
type: 'a',
|
||||||
href: props.file.url,
|
href: props.file.url,
|
||||||
target: '_blank',
|
target: '_blank',
|
||||||
text: i18n.ts.download,
|
text: i18n.ts.download,
|
||||||
icon: 'fas fa-download',
|
icon: 'fas fa-download',
|
||||||
download: props.file.name
|
download: props.file.name,
|
||||||
}, null, {
|
}, null, {
|
||||||
text: i18n.ts.delete,
|
text: i18n.ts.delete,
|
||||||
icon: 'fas fa-trash-alt',
|
icon: 'fas fa-trash-alt',
|
||||||
danger: true,
|
danger: true,
|
||||||
action: deleteFile
|
action: deleteFile,
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -127,35 +128,35 @@ function rename() {
|
||||||
if (canceled) return;
|
if (canceled) return;
|
||||||
os.api('drive/files/update', {
|
os.api('drive/files/update', {
|
||||||
fileId: props.file.id,
|
fileId: props.file.id,
|
||||||
name: name
|
name: name,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function describe() {
|
function describe() {
|
||||||
os.popup(defineAsyncComponent(() => import('@/components/media-caption.vue')), {
|
os.popup(defineAsyncComponent(() => import('@/components/MkMediaCaption.vue')), {
|
||||||
title: i18n.ts.describeFile,
|
title: i18n.ts.describeFile,
|
||||||
input: {
|
input: {
|
||||||
placeholder: i18n.ts.inputNewDescription,
|
placeholder: i18n.ts.inputNewDescription,
|
||||||
default: props.file.comment != null ? props.file.comment : '',
|
default: props.file.comment != null ? props.file.comment : '',
|
||||||
},
|
},
|
||||||
image: props.file
|
image: props.file,
|
||||||
}, {
|
}, {
|
||||||
done: result => {
|
done: result => {
|
||||||
if (!result || result.canceled) return;
|
if (!result || result.canceled) return;
|
||||||
let comment = result.result;
|
let comment = result.result;
|
||||||
os.api('drive/files/update', {
|
os.api('drive/files/update', {
|
||||||
fileId: props.file.id,
|
fileId: props.file.id,
|
||||||
comment: comment.length === 0 ? null : comment
|
comment: comment.length === 0 ? null : comment,
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
}, 'closed');
|
}, 'closed');
|
||||||
}
|
}
|
||||||
|
|
||||||
function toggleSensitive() {
|
function toggleSensitive() {
|
||||||
os.api('drive/files/update', {
|
os.api('drive/files/update', {
|
||||||
fileId: props.file.id,
|
fileId: props.file.id,
|
||||||
isSensitive: !props.file.isSensitive
|
isSensitive: !props.file.isSensitive,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -176,7 +177,7 @@ async function deleteFile() {
|
||||||
|
|
||||||
if (canceled) return;
|
if (canceled) return;
|
||||||
os.api('drive/files/delete', {
|
os.api('drive/files/delete', {
|
||||||
fileId: props.file.id
|
fileId: props.file.id,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
|
@ -1,5 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="rghtznwe"
|
<div
|
||||||
|
class="rghtznwe"
|
||||||
:class="{ draghover }"
|
:class="{ draghover }"
|
||||||
draggable="true"
|
draggable="true"
|
||||||
:title="title"
|
:title="title"
|
||||||
|
@ -123,7 +124,7 @@ function onDrop(ev: DragEvent) {
|
||||||
emit('removeFile', file.id);
|
emit('removeFile', file.id);
|
||||||
os.api('drive/files/update', {
|
os.api('drive/files/update', {
|
||||||
fileId: file.id,
|
fileId: file.id,
|
||||||
folderId: props.folder.id
|
folderId: props.folder.id,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
//#endregion
|
//#endregion
|
||||||
|
@ -139,7 +140,7 @@ function onDrop(ev: DragEvent) {
|
||||||
emit('removeFolder', folder.id);
|
emit('removeFolder', folder.id);
|
||||||
os.api('drive/folders/update', {
|
os.api('drive/folders/update', {
|
||||||
folderId: folder.id,
|
folderId: folder.id,
|
||||||
parentId: props.folder.id
|
parentId: props.folder.id,
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
// noop
|
// noop
|
||||||
}).catch(err => {
|
}).catch(err => {
|
||||||
|
@ -147,13 +148,13 @@ function onDrop(ev: DragEvent) {
|
||||||
case 'detected-circular-definition':
|
case 'detected-circular-definition':
|
||||||
os.alert({
|
os.alert({
|
||||||
title: i18n.ts.unableToProcess,
|
title: i18n.ts.unableToProcess,
|
||||||
text: i18n.ts.circularReferenceFolder
|
text: i18n.ts.circularReferenceFolder,
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
os.alert({
|
os.alert({
|
||||||
type: 'error',
|
type: 'error',
|
||||||
text: i18n.ts.somethingHappened
|
text: i18n.ts.somethingHappened,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -186,19 +187,19 @@ function rename() {
|
||||||
os.inputText({
|
os.inputText({
|
||||||
title: i18n.ts.renameFolder,
|
title: i18n.ts.renameFolder,
|
||||||
placeholder: i18n.ts.inputNewFolderName,
|
placeholder: i18n.ts.inputNewFolderName,
|
||||||
default: props.folder.name
|
default: props.folder.name,
|
||||||
}).then(({ canceled, result: name }) => {
|
}).then(({ canceled, result: name }) => {
|
||||||
if (canceled) return;
|
if (canceled) return;
|
||||||
os.api('drive/folders/update', {
|
os.api('drive/folders/update', {
|
||||||
folderId: props.folder.id,
|
folderId: props.folder.id,
|
||||||
name: name
|
name: name,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function deleteFolder() {
|
function deleteFolder() {
|
||||||
os.api('drive/folders/delete', {
|
os.api('drive/folders/delete', {
|
||||||
folderId: props.folder.id
|
folderId: props.folder.id,
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
if (defaultStore.state.uploadFolder === props.folder.id) {
|
if (defaultStore.state.uploadFolder === props.folder.id) {
|
||||||
defaultStore.set('uploadFolder', null);
|
defaultStore.set('uploadFolder', null);
|
||||||
|
@ -209,13 +210,13 @@ function deleteFolder() {
|
||||||
os.alert({
|
os.alert({
|
||||||
type: 'error',
|
type: 'error',
|
||||||
title: i18n.ts.unableToDelete,
|
title: i18n.ts.unableToDelete,
|
||||||
text: i18n.ts.hasChildFilesOrFolders
|
text: i18n.ts.hasChildFilesOrFolders,
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
os.alert({
|
os.alert({
|
||||||
type: 'error',
|
type: 'error',
|
||||||
text: i18n.ts.unableToDelete
|
text: i18n.ts.unableToDelete,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -230,11 +231,11 @@ function onContextmenu(ev: MouseEvent) {
|
||||||
text: i18n.ts.openInWindow,
|
text: i18n.ts.openInWindow,
|
||||||
icon: 'fas fa-window-restore',
|
icon: 'fas fa-window-restore',
|
||||||
action: () => {
|
action: () => {
|
||||||
os.popup(defineAsyncComponent(() => import('./drive-window.vue')), {
|
os.popup(defineAsyncComponent(() => import('@/components/MkDriveWindow.vue')), {
|
||||||
initialFolder: props.folder
|
initialFolder: props.folder,
|
||||||
}, {
|
}, {
|
||||||
}, 'closed');
|
}, 'closed');
|
||||||
}
|
},
|
||||||
}, null, {
|
}, null, {
|
||||||
text: i18n.ts.rename,
|
text: i18n.ts.rename,
|
||||||
icon: 'fas fa-i-cursor',
|
icon: 'fas fa-i-cursor',
|
|
@ -90,10 +90,10 @@
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { markRaw, nextTick, onActivated, onBeforeUnmount, onMounted, ref, watch } from 'vue';
|
import { markRaw, nextTick, onActivated, onBeforeUnmount, onMounted, ref, watch } from 'vue';
|
||||||
import * as Misskey from 'misskey-js';
|
import * as Misskey from 'misskey-js';
|
||||||
import XNavFolder from './drive.nav-folder.vue';
|
import MkButton from './MkButton.vue';
|
||||||
import XFolder from './drive.folder.vue';
|
import XNavFolder from '@/components/MkDrive.navFolder.vue';
|
||||||
import XFile from './drive.file.vue';
|
import XFolder from '@/components/MkDrive.folder.vue';
|
||||||
import MkButton from './ui/button.vue';
|
import XFile from '@/components/MkDrive.file.vue';
|
||||||
import * as os from '@/os';
|
import * as os from '@/os';
|
||||||
import { stream } from '@/stream';
|
import { stream } from '@/stream';
|
||||||
import { defaultStore } from '@/store';
|
import { defaultStore } from '@/store';
|
|
@ -17,7 +17,7 @@
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { computed } from 'vue';
|
import { computed } from 'vue';
|
||||||
import * as Misskey from 'misskey-js';
|
import * as Misskey from 'misskey-js';
|
||||||
import ImgWithBlurhash from '@/components/img-with-blurhash.vue';
|
import ImgWithBlurhash from '@/components/MkImgWithBlurhash.vue';
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
file: Misskey.entities.DriveFile;
|
file: Misskey.entities.DriveFile;
|
|
@ -1,5 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<XModalWindow ref="dialog"
|
<XModalWindow
|
||||||
|
ref="dialog"
|
||||||
:width="800"
|
:width="800"
|
||||||
:height="500"
|
:height="500"
|
||||||
:with-ok-button="true"
|
:with-ok-button="true"
|
||||||
|
@ -20,8 +21,8 @@
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { ref } from 'vue';
|
import { ref } from 'vue';
|
||||||
import * as Misskey from 'misskey-js';
|
import * as Misskey from 'misskey-js';
|
||||||
import XDrive from './drive.vue';
|
import XDrive from '@/components/MkDrive.vue';
|
||||||
import XModalWindow from '@/components/ui/modal-window.vue';
|
import XModalWindow from '@/components/MkModalWindow.vue';
|
||||||
import number from '@/filters/number';
|
import number from '@/filters/number';
|
||||||
import { i18n } from '@/i18n';
|
import { i18n } from '@/i18n';
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<XWindow ref="window"
|
<XWindow
|
||||||
|
ref="window"
|
||||||
:initial-width="800"
|
:initial-width="800"
|
||||||
:initial-height="500"
|
:initial-height="500"
|
||||||
:can-resize="true"
|
:can-resize="true"
|
||||||
|
@ -15,8 +16,8 @@
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { } from 'vue';
|
import { } from 'vue';
|
||||||
import * as Misskey from 'misskey-js';
|
import * as Misskey from 'misskey-js';
|
||||||
import XDrive from './drive.vue';
|
import XDrive from '@/components/MkDrive.vue';
|
||||||
import XWindow from '@/components/ui/window.vue';
|
import XWindow from '@/components/MkWindow.vue';
|
||||||
import { i18n } from '@/i18n';
|
import { i18n } from '@/i18n';
|
||||||
|
|
||||||
defineProps<{
|
defineProps<{
|
|
@ -46,7 +46,7 @@
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section>
|
<section>
|
||||||
<header class="_acrylic"><i class="far fa-clock fa-fw"></i> {{ i18n.ts.recentUsed }}</header>
|
<header><i class="far fa-clock fa-fw"></i> {{ i18n.ts.recentUsed }}</header>
|
||||||
<div class="body">
|
<div class="body">
|
||||||
<button
|
<button
|
||||||
v-for="emoji in recentlyUsedEmojis"
|
v-for="emoji in recentlyUsedEmojis"
|
||||||
|
@ -60,11 +60,11 @@
|
||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
<div v-once class="group">
|
<div v-once class="group">
|
||||||
<header class="_acrylic">{{ i18n.ts.customEmojis }}</header>
|
<header>{{ i18n.ts.customEmojis }}</header>
|
||||||
<XSection v-for="category in customEmojiCategories" :key="'custom:' + category" :initial-shown="false" :emojis="customEmojis.filter(e => e.category === category).map(e => ':' + e.name + ':')" @chosen="chosen">{{ category || i18n.ts.other }}</XSection>
|
<XSection v-for="category in customEmojiCategories" :key="'custom:' + category" :initial-shown="false" :emojis="customEmojis.filter(e => e.category === category).map(e => ':' + e.name + ':')" @chosen="chosen">{{ category || i18n.ts.other }}</XSection>
|
||||||
</div>
|
</div>
|
||||||
<div v-once class="group">
|
<div v-once class="group">
|
||||||
<header class="_acrylic">{{ i18n.ts.emoji }}</header>
|
<header>{{ i18n.ts.emoji }}</header>
|
||||||
<XSection v-for="category in categories" :key="category" :emojis="emojilist.filter(e => e.category === category).map(e => e.char)" @chosen="chosen">{{ category }}</XSection>
|
<XSection v-for="category in categories" :key="category" :emojis="emojilist.filter(e => e.category === category).map(e => e.char)" @chosen="chosen">{{ category }}</XSection>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -80,10 +80,10 @@
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { ref, computed, watch, onMounted } from 'vue';
|
import { ref, computed, watch, onMounted } from 'vue';
|
||||||
import * as Misskey from 'misskey-js';
|
import * as Misskey from 'misskey-js';
|
||||||
import XSection from './emoji-picker.section.vue';
|
import XSection from '@/components/MkEmojiPicker.section.vue';
|
||||||
import { emojilist, UnicodeEmojiDef, unicodeEmojiCategories as categories } from '@/scripts/emojilist';
|
import { emojilist, UnicodeEmojiDef, unicodeEmojiCategories as categories } from '@/scripts/emojilist';
|
||||||
import { getStaticImageUrl } from '@/scripts/get-static-image-url';
|
import { getStaticImageUrl } from '@/scripts/get-static-image-url';
|
||||||
import Ripple from '@/components/ripple.vue';
|
import Ripple from '@/components/MkRipple.vue';
|
||||||
import * as os from '@/os';
|
import * as os from '@/os';
|
||||||
import { isTouchUsing } from '@/scripts/touch';
|
import { isTouchUsing } from '@/scripts/touch';
|
||||||
import { deviceKind } from '@/scripts/device-kind';
|
import { deviceKind } from '@/scripts/device-kind';
|
|
@ -27,8 +27,8 @@
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { ref } from 'vue';
|
import { ref } from 'vue';
|
||||||
import MkModal from '@/components/ui/modal.vue';
|
import MkModal from '@/components/MkModal.vue';
|
||||||
import MkEmojiPicker from '@/components/emoji-picker.vue';
|
import MkEmojiPicker from '@/components/MkEmojiPicker.vue';
|
||||||
import { defaultStore } from '@/store';
|
import { defaultStore } from '@/store';
|
||||||
|
|
||||||
withDefaults(defineProps<{
|
withDefaults(defineProps<{
|
|
@ -13,8 +13,8 @@
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { } from 'vue';
|
import { } from 'vue';
|
||||||
import MkWindow from '@/components/ui/window.vue';
|
import MkWindow from '@/components/MkWindow.vue';
|
||||||
import MkEmojiPicker from '@/components/emoji-picker.vue';
|
import MkEmojiPicker from '@/components/MkEmojiPicker.vue';
|
||||||
|
|
||||||
withDefaults(defineProps<{
|
withDefaults(defineProps<{
|
||||||
src?: HTMLElement;
|
src?: HTMLElement;
|
|
@ -35,8 +35,8 @@
|
||||||
import { computed } from 'vue';
|
import { computed } from 'vue';
|
||||||
import * as Acct from 'misskey-js/built/acct';
|
import * as Acct from 'misskey-js/built/acct';
|
||||||
import MkSwitch from '@/components/ui/switch.vue';
|
import MkSwitch from '@/components/ui/switch.vue';
|
||||||
import MkPagination from '@/components/ui/pagination.vue';
|
import MkPagination from '@/components/MkPagination.vue';
|
||||||
import MkDriveFileThumbnail from '@/components/drive-file-thumbnail.vue';
|
import MkDriveFileThumbnail from '@/components/MkDriveFileThumbnail.vue';
|
||||||
import bytes from '@/filters/bytes';
|
import bytes from '@/filters/bytes';
|
||||||
import * as os from '@/os';
|
import * as os from '@/os';
|
||||||
import { i18n } from '@/i18n';
|
import { i18n } from '@/i18n';
|
|
@ -33,8 +33,8 @@
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { } from 'vue';
|
import { } from 'vue';
|
||||||
import XModalWindow from '@/components/ui/modal-window.vue';
|
import XModalWindow from '@/components/MkModalWindow.vue';
|
||||||
import MkButton from '@/components/ui/button.vue';
|
import MkButton from '@/components/MkButton.vue';
|
||||||
import MkInput from '@/components/form/input.vue';
|
import MkInput from '@/components/form/input.vue';
|
||||||
import * as os from '@/os';
|
import * as os from '@/os';
|
||||||
import { instance } from '@/instance';
|
import { instance } from '@/instance';
|
|
@ -61,9 +61,9 @@ import FormTextarea from './form/textarea.vue';
|
||||||
import FormSwitch from './form/switch.vue';
|
import FormSwitch from './form/switch.vue';
|
||||||
import FormSelect from './form/select.vue';
|
import FormSelect from './form/select.vue';
|
||||||
import FormRange from './form/range.vue';
|
import FormRange from './form/range.vue';
|
||||||
import MkButton from './ui/button.vue';
|
import MkButton from './MkButton.vue';
|
||||||
import FormRadios from './form/radios.vue';
|
import FormRadios from './form/radios.vue';
|
||||||
import XModalWindow from '@/components/ui/modal-window.vue';
|
import XModalWindow from '@/components/MkModalWindow.vue';
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
components: {
|
components: {
|
|
@ -1,5 +1,5 @@
|
||||||
<template>
|
<template>
|
||||||
<XFormula :formula="formula" :block="block" />
|
<XFormula :formula="formula" :block="block"/>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
|
@ -8,17 +8,17 @@ import * as os from '@/os';
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
components: {
|
components: {
|
||||||
XFormula: defineAsyncComponent(() => import('./formula-core.vue'))
|
XFormula: defineAsyncComponent(() => import('@/components/MkFormulaCore.vue')),
|
||||||
},
|
},
|
||||||
props: {
|
props: {
|
||||||
formula: {
|
formula: {
|
||||||
type: String,
|
type: String,
|
||||||
required: true
|
required: true,
|
||||||
},
|
},
|
||||||
block: {
|
block: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
required: true
|
required: true,
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
|
@ -14,26 +14,14 @@
|
||||||
</MkA>
|
</MkA>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts" setup>
|
||||||
import { defineComponent } from 'vue';
|
import { } from 'vue';
|
||||||
import { userName } from '@/filters/user';
|
import { userName } from '@/filters/user';
|
||||||
import ImgWithBlurhash from '@/components/img-with-blurhash.vue';
|
import ImgWithBlurhash from '@/components/MkImgWithBlurhash.vue';
|
||||||
import * as os from '@/os';
|
|
||||||
|
|
||||||
export default defineComponent({
|
const props = defineProps<{
|
||||||
components: {
|
post: any;
|
||||||
ImgWithBlurhash
|
}>();
|
||||||
},
|
|
||||||
props: {
|
|
||||||
post: {
|
|
||||||
type: Object,
|
|
||||||
required: true
|
|
||||||
},
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
userName,
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
|
@ -17,7 +17,7 @@ import { } from 'vue';
|
||||||
import * as misskey from 'misskey-js';
|
import * as misskey from 'misskey-js';
|
||||||
import bytes from '@/filters/bytes';
|
import bytes from '@/filters/bytes';
|
||||||
import number from '@/filters/number';
|
import number from '@/filters/number';
|
||||||
import MkModal from '@/components/ui/modal.vue';
|
import MkModal from '@/components/MkModal.vue';
|
||||||
|
|
||||||
const props = withDefaults(defineProps<{
|
const props = withDefaults(defineProps<{
|
||||||
image: misskey.entities.DriveFile;
|
image: misskey.entities.DriveFile;
|
|
@ -6,23 +6,12 @@
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts" setup>
|
||||||
import { defineComponent } from 'vue';
|
import { } from 'vue';
|
||||||
import * as os from '@/os';
|
|
||||||
|
|
||||||
export default defineComponent({
|
const props = defineProps<{
|
||||||
props: {
|
warn?: boolean;
|
||||||
warn: {
|
}>();
|
||||||
type: Boolean,
|
|
||||||
required: false,
|
|
||||||
default: false
|
|
||||||
},
|
|
||||||
},
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
};
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
|
@ -11,7 +11,7 @@
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import * as misskey from 'misskey-js';
|
import * as misskey from 'misskey-js';
|
||||||
import MkMiniChart from '@/components/mini-chart.vue';
|
import MkMiniChart from '@/components/MkMiniChart.vue';
|
||||||
import * as os from '@/os';
|
import * as os from '@/os';
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
|
@ -68,7 +68,7 @@ import {
|
||||||
DoughnutController,
|
DoughnutController,
|
||||||
} from 'chart.js';
|
} from 'chart.js';
|
||||||
import MkSelect from '@/components/form/select.vue';
|
import MkSelect from '@/components/form/select.vue';
|
||||||
import MkChart from '@/components/chart.vue';
|
import MkChart from '@/components/MkChart.vue';
|
||||||
import { useChartTooltip } from '@/scripts/use-chart-tooltip';
|
import { useChartTooltip } from '@/scripts/use-chart-tooltip';
|
||||||
import * as os from '@/os';
|
import * as os from '@/os';
|
||||||
import { i18n } from '@/i18n';
|
import { i18n } from '@/i18n';
|
|
@ -21,7 +21,7 @@
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { } from 'vue';
|
import { } from 'vue';
|
||||||
import MkModal from '@/components/ui/modal.vue';
|
import MkModal from '@/components/MkModal.vue';
|
||||||
import { navbarItemDef } from '@/navbar';
|
import { navbarItemDef } from '@/navbar';
|
||||||
import { instanceName } from '@/config';
|
import { instanceName } from '@/config';
|
||||||
import { defaultStore } from '@/store';
|
import { defaultStore } from '@/store';
|
|
@ -26,7 +26,7 @@ const target = self ? null : '_blank';
|
||||||
const el = $ref();
|
const el = $ref();
|
||||||
|
|
||||||
useTooltip($$(el), (showing) => {
|
useTooltip($$(el), (showing) => {
|
||||||
os.popup(defineAsyncComponent(() => import('@/components/url-preview-popup.vue')), {
|
os.popup(defineAsyncComponent(() => import('@/components/MkUrlPreviewPopup.vue')), {
|
||||||
showing,
|
showing,
|
||||||
url: props.url,
|
url: props.url,
|
||||||
source: el,
|
source: el,
|
|
@ -6,13 +6,15 @@
|
||||||
<span>{{ $ts.clickToShow }}</span>
|
<span>{{ $ts.clickToShow }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div v-else-if="media.type.startsWith('audio') && media.type !== 'audio/midi'" class="audio">
|
<div v-else-if="media.type.startsWith('audio') && media.type !== 'audio/midi'" class="audio">
|
||||||
<audio ref="audioEl"
|
<VuePlyr>
|
||||||
class="audio"
|
<audio ref="audioEl"
|
||||||
:src="media.url"
|
class="audio"
|
||||||
:title="media.name"
|
:src="media.url"
|
||||||
controls
|
:title="media.name"
|
||||||
preload="metadata"
|
controls
|
||||||
@volumechange="volumechange" />
|
preload="metadata"
|
||||||
|
@volumechange="volumechange" />
|
||||||
|
</VuePlyr>
|
||||||
</div>
|
</div>
|
||||||
<a v-else class="download"
|
<a v-else class="download"
|
||||||
:href="media.url"
|
:href="media.url"
|
||||||
|
@ -28,7 +30,9 @@
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { onMounted } from 'vue';
|
import { onMounted } from 'vue';
|
||||||
import * as misskey from 'misskey-js';
|
import * as misskey from 'misskey-js';
|
||||||
|
import VuePlyr from 'vue-plyr';
|
||||||
import { ColdDeviceStorage } from '@/store';
|
import { ColdDeviceStorage } from '@/store';
|
||||||
|
import 'vue-plyr/dist/vue-plyr.css';
|
||||||
|
|
||||||
const props = withDefaults(defineProps<{
|
const props = withDefaults(defineProps<{
|
||||||
media: misskey.entities.DriveFile;
|
media: misskey.entities.DriveFile;
|
||||||
|
@ -53,6 +57,7 @@ onMounted(() => {
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
margin-top: 4px;
|
margin-top: 4px;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
--plyr-color-main: var(--accent);
|
||||||
|
|
||||||
> .download,
|
> .download,
|
||||||
> .sensitive {
|
> .sensitive {
|
|
@ -34,8 +34,8 @@
|
||||||
import { defineComponent } from 'vue';
|
import { defineComponent } from 'vue';
|
||||||
import { length } from 'stringz';
|
import { length } from 'stringz';
|
||||||
import Tesseract from 'tesseract.js';
|
import Tesseract from 'tesseract.js';
|
||||||
import MkModal from '@/components/ui/modal.vue';
|
import MkModal from '@/components/MkModal.vue';
|
||||||
import MkButton from '@/components/ui/button.vue';
|
import MkButton from '@/components/MkButton.vue';
|
||||||
import bytes from '@/filters/bytes';
|
import bytes from '@/filters/bytes';
|
||||||
import number from '@/filters/number';
|
import number from '@/filters/number';
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
import { watch } from 'vue';
|
import { watch } from 'vue';
|
||||||
import * as misskey from 'misskey-js';
|
import * as misskey from 'misskey-js';
|
||||||
import { getStaticImageUrl } from '@/scripts/get-static-image-url';
|
import { getStaticImageUrl } from '@/scripts/get-static-image-url';
|
||||||
import ImgWithBlurhash from '@/components/img-with-blurhash.vue';
|
import ImgWithBlurhash from '@/components/MkImgWithBlurhash.vue';
|
||||||
import { defaultStore } from '@/store';
|
import { defaultStore } from '@/store';
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
|
@ -18,9 +18,9 @@ import * as misskey from 'misskey-js';
|
||||||
import PhotoSwipeLightbox from 'photoswipe/lightbox';
|
import PhotoSwipeLightbox from 'photoswipe/lightbox';
|
||||||
import PhotoSwipe from 'photoswipe';
|
import PhotoSwipe from 'photoswipe';
|
||||||
import 'photoswipe/style.css';
|
import 'photoswipe/style.css';
|
||||||
import XBanner from './media-banner.vue';
|
import XBanner from '@/components/MkMediaBanner.vue';
|
||||||
import XImage from './media-image.vue';
|
import XImage from '@/components/MkMediaImage.vue';
|
||||||
import XVideo from './media-video.vue';
|
import XVideo from '@/components/MkMediaVideo.vue';
|
||||||
import * as os from '@/os';
|
import * as os from '@/os';
|
||||||
import { FILE_TYPE_BROWSERSAFE } from '@/const';
|
import { FILE_TYPE_BROWSERSAFE } from '@/const';
|
||||||
import { defaultStore } from '@/store';
|
import { defaultStore } from '@/store';
|
|
@ -6,19 +6,22 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div v-else class="kkjnbbplepmiyuadieoenjgutgcmtsvu">
|
<div v-else class="kkjnbbplepmiyuadieoenjgutgcmtsvu">
|
||||||
<video
|
<VuePlyr>
|
||||||
:poster="video.thumbnailUrl"
|
<video
|
||||||
:title="video.comment"
|
:poster="video.thumbnailUrl"
|
||||||
:alt="video.comment"
|
:title="video.comment"
|
||||||
preload="none"
|
:alt="video.comment"
|
||||||
controls
|
:download="video.url"
|
||||||
@contextmenu.stop
|
preload="none"
|
||||||
>
|
controls
|
||||||
<source
|
@contextmenu.stop
|
||||||
:src="video.url"
|
|
||||||
:type="video.type"
|
|
||||||
>
|
>
|
||||||
</video>
|
<source
|
||||||
|
:src="video.url"
|
||||||
|
:type="video.type"
|
||||||
|
>
|
||||||
|
</video>
|
||||||
|
</VuePlyr>
|
||||||
<i class="fas fa-eye-slash" @click="hide = true"></i>
|
<i class="fas fa-eye-slash" @click="hide = true"></i>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
@ -26,7 +29,9 @@
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { ref } from 'vue';
|
import { ref } from 'vue';
|
||||||
import * as misskey from 'misskey-js';
|
import * as misskey from 'misskey-js';
|
||||||
|
import VuePlyr from 'vue-plyr';
|
||||||
import { defaultStore } from '@/store';
|
import { defaultStore } from '@/store';
|
||||||
|
import 'vue-plyr/dist/vue-plyr.css';
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
video: misskey.entities.DriveFile;
|
video: misskey.entities.DriveFile;
|
||||||
|
@ -38,6 +43,7 @@ const hide = ref((defaultStore.state.nsfw === 'force') ? true : props.video.isSe
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.kkjnbbplepmiyuadieoenjgutgcmtsvu {
|
.kkjnbbplepmiyuadieoenjgutgcmtsvu {
|
||||||
position: relative;
|
position: relative;
|
||||||
|
--plyr-color-main: var(--accent);
|
||||||
|
|
||||||
> i {
|
> i {
|
||||||
display: block;
|
display: block;
|
|
@ -7,7 +7,7 @@
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { on } from 'events';
|
import { on } from 'events';
|
||||||
import { nextTick, onBeforeUnmount, onMounted, onUnmounted, ref, watch } from 'vue';
|
import { nextTick, onBeforeUnmount, onMounted, onUnmounted, ref, watch } from 'vue';
|
||||||
import MkMenu from './menu.vue';
|
import MkMenu from './MkMenu.vue';
|
||||||
import { MenuItem } from '@/types/menu';
|
import { MenuItem } from '@/types/menu';
|
||||||
import * as os from '@/os';
|
import * as os from '@/os';
|
||||||
|
|
|
@ -63,7 +63,7 @@ import { MenuItem, InnerMenuItem, MenuPending, MenuAction } from '@/types/menu';
|
||||||
import * as os from '@/os';
|
import * as os from '@/os';
|
||||||
import { i18n } from '@/i18n';
|
import { i18n } from '@/i18n';
|
||||||
|
|
||||||
const XChild = defineAsyncComponent(() => import('./menu.child.vue'));
|
const XChild = defineAsyncComponent(() => import('./MkMenu.child.vue'));
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
items: MenuItem[];
|
items: MenuItem[];
|
|
@ -22,7 +22,7 @@
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { ComputedRef, provide } from 'vue';
|
import { ComputedRef, provide } from 'vue';
|
||||||
import MkModal from '@/components/ui/modal.vue';
|
import MkModal from '@/components/MkModal.vue';
|
||||||
import { popout as _popout } from '@/scripts/popout';
|
import { popout as _popout } from '@/scripts/popout';
|
||||||
import copyToClipboard from '@/scripts/copy-to-clipboard';
|
import copyToClipboard from '@/scripts/copy-to-clipboard';
|
||||||
import { url } from '@/config';
|
import { url } from '@/config';
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue