Merge branch 'develop' into swn
This commit is contained in:
commit
2a747127de
95 changed files with 2030 additions and 665 deletions
13
CHANGELOG.md
13
CHANGELOG.md
|
@ -10,7 +10,12 @@
|
|||
|
||||
-->
|
||||
|
||||
## 12.x.x (unreleased)
|
||||
## 12.93.1 (2021/10/23)
|
||||
|
||||
### Bugfixes
|
||||
- クライアント: 通知上でローカルのリアクションが表示されないのを修正
|
||||
|
||||
## 12.93.0 (2021/10/23)
|
||||
|
||||
### Improvements
|
||||
- クライアント: コントロールパネルのパフォーマンスを改善
|
||||
|
@ -23,6 +28,7 @@
|
|||
- API: users/search および users/search-by-username-and-host を強化
|
||||
- ミュート及びブロックのインポートを行えるように
|
||||
- クライアント: /share のクエリでリプライやファイル等の情報を渡せるように
|
||||
- チャートのsyncを毎日0時に自動で行うように
|
||||
|
||||
### Bugfixes
|
||||
- クライアント: テーマの管理が行えない問題を修正
|
||||
|
@ -30,6 +36,11 @@
|
|||
- クライアント: リモートノートで意図せずローカルカスタム絵文字が使われてしまうことがあるのを修正
|
||||
- ActivityPub: not reacted な Undo.Like がinboxに滞留するのを修正
|
||||
|
||||
### Changes
|
||||
- 連合の考慮に問題があることなどが分かったため、モデレーターをブロックできない仕様を廃止しました
|
||||
- データベースにログを保存しないようになりました
|
||||
- ログを永続化したい場合はsyslogを利用してください
|
||||
|
||||
## 12.92.0 (2021/10/16)
|
||||
|
||||
### Improvements
|
||||
|
|
|
@ -63,6 +63,7 @@ files: "الملفات"
|
|||
download: "تنزيل"
|
||||
driveFileDeleteConfirm: "أمتأكد من حذف ملف {name}؟ كل الملاحظات المُرفق بها هذا الملف ستحذف."
|
||||
unfollowConfirm: "أمتأكد من إلغاء متابعة {name}؟"
|
||||
importRequested: "يستغرق الاستيراد بعض الوقت"
|
||||
lists: "القوائم"
|
||||
noLists: "ليس لديك أية قائمة"
|
||||
note: "ملاحظة"
|
||||
|
@ -76,6 +77,7 @@ error: "خطأ"
|
|||
somethingHappened: "حدث خطأ"
|
||||
retry: "حاول مجددًا"
|
||||
pageLoadError: "فشل تحميل الصفحة"
|
||||
serverIsDead: "الخادم لا يستجيب، حاول بعد قليل"
|
||||
enterListName: "اسم القائمة"
|
||||
privacy: "الخصوصية"
|
||||
makeFollowManuallyApprove: "القبول يدويا طلبات الإشتراك"
|
||||
|
@ -97,6 +99,7 @@ add: "إضافة"
|
|||
reaction: "تفاعل"
|
||||
rememberNoteVisibility: "تذكر إعدادت مدى رؤية الملاحظات"
|
||||
attachCancel: "أزل المرفق"
|
||||
markAsSensitive: "علّمه كمحتوى حساس"
|
||||
enterFileName: "ادخل اسم الملف"
|
||||
mute: "اكتم"
|
||||
unmute: "إلغاء الكتم"
|
||||
|
@ -109,15 +112,20 @@ unblockConfirm: "أمتأكد من إلغاء حجب هذا الحساب؟"
|
|||
selectList: "اختر قائمة"
|
||||
editWidgetsExit: "تم"
|
||||
customEmojis: "إيموجي مخصص"
|
||||
emoji: "الوجوه التعبيرية"
|
||||
emojis: "الوجوه التعبيرية"
|
||||
emojiName: "اسم الوجه التعبيري"
|
||||
emojiUrl: "رابط الوجه التعبيري"
|
||||
addEmoji: "إضافة إيموجي"
|
||||
settingGuide: "الإعدادات المستحسنة"
|
||||
cacheRemoteFiles: "خزن مؤقتا الملفات البعيدة"
|
||||
autoAcceptFollowed: "اقبل طلبات المتابعة تلقائيا من الحسابات المتابَعة"
|
||||
loginFailed: "فشل الولوج"
|
||||
showOnRemote: "رؤيته على مثيل الخادم البُعدي"
|
||||
general: "الرئيسية"
|
||||
wallpaper: "خلفية الشاشة"
|
||||
setWallpaper: "استخدم خلفية الشاشة"
|
||||
removeWallpaper: "إزالة خلفية الشاشة"
|
||||
wallpaper: "الخلفية"
|
||||
setWallpaper: "عيّن خلفية"
|
||||
removeWallpaper: "أزل الخلفية"
|
||||
searchWith: "البحث: {q}"
|
||||
youHaveNoLists: "لا تمتلك أية قائمة"
|
||||
followConfirm: "أتريد متابعة {name}؟"
|
||||
|
@ -182,7 +190,7 @@ removeAreYouSure: "متأكد من أنك تريد حذف {x}؟"
|
|||
deleteAreYouSure: "متأكد من أنك تريد حذف {x}؟"
|
||||
resetAreYouSure: "هل تريد إعادة التعيين؟"
|
||||
saved: "تم حفظه"
|
||||
messaging: "الدردشة"
|
||||
messaging: "المحادثة"
|
||||
upload: "تحميل"
|
||||
fromDrive: "من المخزن"
|
||||
fromUrl: "من عنوان URL"
|
||||
|
@ -194,7 +202,7 @@ explore: "استكشاف"
|
|||
games: "ألعاب Misskey"
|
||||
messageRead: "مقروءة"
|
||||
noMoreHistory: "لا يوجد المزيد من التاريخ"
|
||||
startMessaging: "ابدأ الدردشة"
|
||||
startMessaging: "ابدأ محادثة"
|
||||
nUsersRead: "تمت القراءة من {n}"
|
||||
agreeTo: "اوافق على {0}"
|
||||
tos: "شروط الخدمة"
|
||||
|
@ -266,7 +274,17 @@ disablingTimelinesInfo: "سيتمكن المسؤولون ومن تعديل دا
|
|||
registration: "إنشاء حساب"
|
||||
enableRegistration: "تفعيل إنشاء الحسابات الجديدة"
|
||||
invite: "دعوة"
|
||||
driveCapacityPerLocalAccount: "حصة التخزين لكل مستخدم محلي"
|
||||
driveCapacityPerRemoteAccount: "حصة التخزين لكل مستخدم بعيد"
|
||||
inMb: "بالميغابايت"
|
||||
iconUrl: "رابط الأيقونة"
|
||||
bannerUrl: "رابط صورة اللافتة"
|
||||
backgroundImageUrl: "رابط صورة الخلفية"
|
||||
basicInfo: "المعلومات الأساسية "
|
||||
pinnedUsers: "المستخدمون المثبتون"
|
||||
pinnedUsersDescription: "قائمة المستخدمين المثبتين في لسان \"استكشف\" ، اجعل كل اسم مستخدم في سطر لوحده."
|
||||
pinnedPages: "الصفحات المثبتة"
|
||||
pinnedPagesDescription: "أدخل مسار الصفحات التي تريد تثبيتها في أعلى هذا الموقع، اجعل كل مسار في سطر لوحده."
|
||||
pinnedNotes: "ملاحظة مدبسة"
|
||||
hcaptchaSiteKey: "مفتاح الموقع"
|
||||
hcaptchaSecretKey: "المفتاح السري"
|
||||
|
@ -279,12 +297,19 @@ manageAntennas: "إدارة الهوائيات"
|
|||
name: "الإسم"
|
||||
antennaSource: "مصدر الهوائي"
|
||||
antennaKeywords: "الكلمات المفتاحية للإستقبال"
|
||||
notifyAntenna: "نبهني بصول ملاحظات جديدة"
|
||||
withFileAntenna: "ملاحظات تحوي ملفات فقط"
|
||||
caseSensitive: "حساسية حالة الأحرف"
|
||||
withReplies: "بالردود"
|
||||
notesAndReplies: "الملاحظات والردود"
|
||||
withFiles: "بالمرفقات"
|
||||
silence: "اكتم"
|
||||
unsilence: "إلغاء الكتم"
|
||||
popularUsers: "المستخدمون الشائعون"
|
||||
recentlyUpdatedUsers: "أصحاب النشاطات الأخيرة"
|
||||
recentlyRegisteredUsers: "المستخدمون المنضمون حديثًا"
|
||||
recentlyDiscoveredUsers: "المستخدمون المكتشفون حديثًا"
|
||||
exploreUsersCount: "يوجد {count} مستخدم(ا)"
|
||||
exploreFediverse: "استكشف الفديفرس"
|
||||
popularTags: "الوسوم الرائجة"
|
||||
userList: "القوائم"
|
||||
|
@ -297,11 +322,13 @@ moderator: "مشرِف"
|
|||
nUsersMentioned: "{n} مستخدمين تمت الإشارة إليهم"
|
||||
securityKey: "مفتاح الأمان"
|
||||
securityKeyName: "اسم المفتاح"
|
||||
registerSecurityKey: "سجل مفتاح أمان"
|
||||
lastUsed: "آخر استخدام"
|
||||
unregister: "إلغاء التسجيل"
|
||||
passwordLessLogin: "لِج مِن دون كلمة سرية"
|
||||
resetPassword: "أعد تعيين كلمتك السرية"
|
||||
newPasswordIs: "كلمتك السرية الجديدة هي {password}"
|
||||
reduceUiAnimation: "قلص تأثيرات الواجهة"
|
||||
share: "شارِك"
|
||||
notFound: "غير موجود"
|
||||
cacheClear: "مسح ذاكرة التخزين المؤقت"
|
||||
|
@ -316,8 +343,8 @@ invites: "دعوة"
|
|||
groupName: "اسم الفريق"
|
||||
members: "الأعضاء"
|
||||
transfer: "نقل"
|
||||
messagingWithUser: "الدردشة مع مستخدم آخر"
|
||||
messagingWithGroup: "دردشة جماعية"
|
||||
messagingWithUser: "تحدث مع مستخدم"
|
||||
messagingWithGroup: "محادثة جماعية"
|
||||
title: "العنوان"
|
||||
text: "النص"
|
||||
enable: "تشغيل"
|
||||
|
@ -362,28 +389,43 @@ total: "المجموع"
|
|||
weekOverWeekChanges: "أسبوعيا"
|
||||
dayOverDayChanges: "يوميا"
|
||||
appearance: "المظهر"
|
||||
clientSettings: "إعدادات العميل"
|
||||
accountSettings: "إعدادات الحساب"
|
||||
promotion: "ترقية"
|
||||
promote: "روِّج"
|
||||
numberOfDays: "عدد الأيام"
|
||||
hideThisNote: "إخفاء هذه الملاحظة"
|
||||
objectStorageBaseUrl: "الرابط الأساسي"
|
||||
objectStoragePrefix: "البادئة"
|
||||
objectStorageEndpoint: "نقطة النهاية"
|
||||
objectStorageRegion: "المنطقة"
|
||||
objectStorageUseSSL: "استخدم SSL"
|
||||
objectStorageUseProxy: "اتصل عبر وكيل"
|
||||
serverLogs: "سجلات الخادم"
|
||||
deleteAll: "حذف الكل"
|
||||
showFixedPostForm: "أظهر نموذج الكتابة في أعلى الصفحة"
|
||||
newNoteRecived: "هناك ملاحظات جديدة"
|
||||
sounds: "الرنات"
|
||||
listen: "استمع"
|
||||
none: "لا شيء"
|
||||
showInPage: "اعرض في الصفحة"
|
||||
volume: "مستوى الصوت"
|
||||
details: "التفاصيل"
|
||||
chooseEmoji: "اختر إيموجي"
|
||||
unableToProcess: "يتعذر إكمال العملية"
|
||||
recentUsed: "المستخدمة مؤخرا"
|
||||
install: "التثبيت"
|
||||
uninstall: "إلغاء التثبيت"
|
||||
installedApps: "التطبيقات المُخوّلة"
|
||||
nothing: "لا يوجد شيء هنا"
|
||||
lastUsedDate: "آخر استخدام"
|
||||
state: "الحالة"
|
||||
sort: "ترتيب حسب"
|
||||
output: "الخارجة"
|
||||
updateRemoteUser: "تحديث المعلومات عن المستخدم البعيد"
|
||||
deleteAllFiles: "حذف كافة الملفات"
|
||||
deleteAllFilesConfirm: "أتريد حذف كل الملفات؟"
|
||||
removeAllFollowing: "ألغ متابعة كل المتابِعين"
|
||||
userSuspended: "تم تعليق هذا المستخدم."
|
||||
userSilenced: "تم إسكات هذا المستخدم."
|
||||
addItem: "إضافة عنصر"
|
||||
|
@ -419,7 +461,40 @@ makeActive: "تفعيل"
|
|||
display: "المظهر"
|
||||
copy: "نسخ"
|
||||
metrics: "المقاييس"
|
||||
fileIdOrUrl: "معرف الملف أو رابط"
|
||||
chatOpenBehavior: "سلوك نفاذة المحادثة عند فتحها"
|
||||
behavior: "السلوك"
|
||||
sample: "مثال"
|
||||
abuseReports: "البلاغات"
|
||||
reportAbuse: "البلاغات"
|
||||
reportAbuseOf: "أبلغ عن {name}"
|
||||
fillAbuseReportDescription: "أكتب بالتفصيل سبب الإبلاغ، إذا كنت تبلغ عن ملاحظة أرفق رابط لها."
|
||||
abuseReported: "أُرسل البلاغ، شكرًا لك"
|
||||
send: "أرسل"
|
||||
abuseMarkAsResolved: "علّم البلاغ كمحلول"
|
||||
openInNewTab: "افتح في لسان جديد"
|
||||
defaultNavigationBehaviour: "سلوك الملاحة الافتراضي"
|
||||
waitingFor: "في انتظار {x}"
|
||||
random: "عشوائي"
|
||||
system: "النظام"
|
||||
switchUi: "بدّل واجهة المستخدم"
|
||||
createNew: "أنشِئ جديد"
|
||||
optional: "اختياري"
|
||||
public: "للعامة"
|
||||
i18nInfo: "يترجم متطوعون ميسكي إلى عدة لغات، يمكنك المساعدة عبر {link}"
|
||||
manageAccessTokens: "إدارة رموز الوصول"
|
||||
accountInfo: "معلومات الحساب"
|
||||
notesCount: "عدد الملاحظات"
|
||||
repliesCount: "عدد الردود المرسلة"
|
||||
repliedCount: "عدد الردود المستلمة"
|
||||
followingCount: "عدد الحسابات المتابَعة"
|
||||
followersCount: "عدد المتابِعين"
|
||||
sentReactionsCount: "عدد الانفعالات المرسلة"
|
||||
receivedReactionsCount: "عدد الانفعالات المستلمة"
|
||||
pollVotesCount: "عدد الاستطلاعات المرسلة"
|
||||
pollVotedCount: "عدد الاستطلاعات المستلمة"
|
||||
yes: "نعم"
|
||||
no: "لا"
|
||||
currentVersion: "الإصدار الحالي"
|
||||
latestVersion: "آخر نسخة مستقرة"
|
||||
usageAmount: "الإستخدام"
|
||||
|
@ -433,6 +508,7 @@ gallery: "المعرض"
|
|||
expiration: "ينتهي استطلاع الرأي في"
|
||||
middle: "متوسط"
|
||||
global: "الشامل"
|
||||
sent: "أرسل"
|
||||
_docs:
|
||||
admin: "إدارة "
|
||||
_email:
|
||||
|
@ -459,12 +535,12 @@ _theme:
|
|||
alpha: "الشفافية"
|
||||
keys:
|
||||
mention: "أشر الى"
|
||||
messageBg: "خلفية الدردشة"
|
||||
messageBg: "خلفية المحادثة"
|
||||
_sfx:
|
||||
note: "الملاحظات"
|
||||
noteMy: "ملاحظتي"
|
||||
notification: "الإشعارات"
|
||||
chat: "الدردشة"
|
||||
chat: "المحادثة"
|
||||
_ago:
|
||||
unknown: "مجهول"
|
||||
future: "المستقبَل"
|
||||
|
|
|
@ -797,6 +797,8 @@ unread: "Ungelesen"
|
|||
filter: "Filter"
|
||||
controllPanel: "Systemsteuerung"
|
||||
manageAccounts: "Benutzerkonten verwalten"
|
||||
makeReactionsPublic: "Reaktionsverlauf veröffentlichen"
|
||||
makeReactionsPublicDescription: "Jeder wird die Liste deiner gesendeten Reaktionen einsehen können."
|
||||
_signup:
|
||||
almostThere: "Fast geschafft"
|
||||
emailAddressInfo: "Bitte gib deine Email-Adresse ein."
|
||||
|
|
|
@ -797,6 +797,8 @@ unread: "Unread"
|
|||
filter: "Filter"
|
||||
controllPanel: "Control Panel"
|
||||
manageAccounts: "Manage Accounts"
|
||||
makeReactionsPublic: "Set reaction history to public"
|
||||
makeReactionsPublicDescription: "This will make the list of all your past reactions publicly visible."
|
||||
_signup:
|
||||
almostThere: "Almost there"
|
||||
emailAddressInfo: "Please enter your email address."
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
_lang_: "Esperanto"
|
||||
headlineMisskey: "Jen la reto konektata de notoj"
|
||||
introMisskey: "Bonvenon! Misskey estas malfermitkoda malcentraliza etbloga servo.\nKreu \"noto\"n por paroli vian penson al iuj ĉirkaŭ vi. 📡\nLa funkcion \"reago\" ebligas esprimi rapide vian senton pri ies noto en Fediverso. 👍\nBonvole esploru novan mondon. 🚀"
|
||||
monthAndDay: "La {day}-a de la {month}-a monato"
|
||||
monthAndDay: "{{day}}/{{month}}"
|
||||
search: "Serĉi"
|
||||
notifications: "Sciigoj"
|
||||
username: "Uzantnomo"
|
||||
|
@ -20,10 +20,10 @@ instance: "Nodo"
|
|||
settings: "Agordoj"
|
||||
basicSettings: "Ĝeneralaj agordoj"
|
||||
otherSettings: "Aliaj agordoj"
|
||||
openInWindow: "Malfermi en nova fenestro"
|
||||
openInWindow: "Malfermi en fenestro"
|
||||
profile: "Profilo"
|
||||
timeline: "Templinio"
|
||||
noAccountDescription: "Ĉi tiu uzanto ne skribis vivpriskribon."
|
||||
noAccountDescription: "Neniu priskribo"
|
||||
login: "Ensaluti"
|
||||
loggingIn: "Ensalutado…"
|
||||
logout: "Elsaluti"
|
||||
|
@ -44,7 +44,7 @@ copyContent: "Kopii enhavon"
|
|||
copyLink: "Kopii ligilon"
|
||||
delete: "Forviŝi"
|
||||
deleteAndEdit: "Redakti foriginte"
|
||||
deleteAndEditConfirm: "Ĉu vi certas, ke vi volas forigi kaj redakti la noton? Tio forviŝos reagojn, notojn plusendintajn, kaj respondojn ĉiujn de ĝi."
|
||||
deleteAndEditConfirm: "Ĉu vi certas, ke vi volas forigi kaj redakti la noton? Tio forviŝos reagojn, plusendojn, kaj respondojn ĉiujn de ĝi."
|
||||
addToList: "Aldoni al listo"
|
||||
sendMessage: "Sendi mesaĝon"
|
||||
copyUsername: "Kopii uzantnomon"
|
||||
|
@ -89,7 +89,7 @@ renote: "Plusendi la noton"
|
|||
unrenote: "Malfari plusendadon"
|
||||
renoted: "Sukcese plusendita"
|
||||
cantRenote: "Oni ne povas plusendi la noton."
|
||||
cantReRenote: "Plusendado ne estas plusendebla."
|
||||
cantReRenote: "Plusendo de noto ne estas plusendebla."
|
||||
quote: "Citi"
|
||||
pinnedNote: "Alpinglita noto"
|
||||
pinned: "Alpingli"
|
||||
|
@ -220,7 +220,7 @@ remoteUserCaution: "Ĉi tiuj infomoj ne estas tute ekzaktaj pro transa uzanto."
|
|||
activity: "Aktiveco"
|
||||
images: "Bildoj"
|
||||
birthday: "Naskiĝdato"
|
||||
registeredDate: "Registriĝdato"
|
||||
registeredDate: "Dato de registriĝo"
|
||||
location: "Loko"
|
||||
theme: "Koloraro"
|
||||
light: "Luma"
|
||||
|
@ -262,7 +262,7 @@ thisYear: "Ĉi-jare"
|
|||
thisMonth: "Ĉi-monate"
|
||||
today: "Hodiaŭ"
|
||||
dayX: "{day}a"
|
||||
monthX: "{month}"
|
||||
monthX: "La {month}a monato"
|
||||
yearX: "La jaro {year}"
|
||||
pages: "Paĝoj"
|
||||
connectService: "Konekti"
|
||||
|
@ -317,6 +317,7 @@ nUsersMentioned: "{n} uzanto(j) menciis"
|
|||
securityKey: "Sekureca ŝlosilo"
|
||||
securityKeyName: "Nomo de la ŝlosilo"
|
||||
lastUsed: "Plej malnove uzita"
|
||||
unregister: "Malregistriĝi"
|
||||
passwordLessLogin: "Ensaluti sen pasvorto"
|
||||
resetPassword: "Restarigi pasvorton"
|
||||
newPasswordIs: "La nova pasvorto estas {password}."
|
||||
|
@ -516,7 +517,7 @@ clear: "Vakigi"
|
|||
goBack: "Reiri antaŭ"
|
||||
addDescription: "Priskribi"
|
||||
info: "Informoj"
|
||||
userInfo: "La informoj de uzanto"
|
||||
userInfo: "Informoj de uzanto"
|
||||
unknown: "Nekonata"
|
||||
online: "Surkonektita"
|
||||
offline: "Forkonektita"
|
||||
|
@ -688,13 +689,13 @@ _antennaSources:
|
|||
all: "Ĉiuj notoj"
|
||||
homeTimeline: "Notoj far uzantoj kiujn vi sekvas"
|
||||
_weekday:
|
||||
sunday: "dimanĉo"
|
||||
monday: "lundo"
|
||||
tuesday: "mardo"
|
||||
wednesday: "merkredo"
|
||||
thursday: "ĵaŭdo"
|
||||
friday: "vendredo"
|
||||
saturday: "sabato"
|
||||
sunday: "Dimanĉo"
|
||||
monday: "Lundo"
|
||||
tuesday: "Mardo"
|
||||
wednesday: "Merkredo"
|
||||
thursday: "Ĵaŭdo"
|
||||
friday: "Vendredo"
|
||||
saturday: "Sabato"
|
||||
_widgets:
|
||||
notifications: "Sciigoj"
|
||||
timeline: "Templinio"
|
||||
|
|
|
@ -365,7 +365,7 @@ withFiles: "Avec fichiers joints"
|
|||
silence: "Mettre en sourdine"
|
||||
silenceConfirm: "Êtes-vous sûr·e de vouloir mettre l’utilisateur·rice en sourdine ?"
|
||||
unsilence: "Annuler la sourdine"
|
||||
unsilenceConfirm: "Êtes-vous sûr·e de vouloir annuler la mise en sourdine de cette utilisateur·rice ?"
|
||||
unsilenceConfirm: "Êtes-vous sûr·e de vouloir annuler la mise en sourdine de cet·te utilisateur·rice ?"
|
||||
popularUsers: "Utilisateur·rice·s populaires"
|
||||
recentlyUpdatedUsers: "Utilisateur·rice·s actif·ve·s récemment"
|
||||
recentlyRegisteredUsers: "Utilisateur·rice·s récemment inscrit·e·s"
|
||||
|
@ -766,6 +766,7 @@ middle: "Moyen"
|
|||
low: "Basse"
|
||||
emailNotConfiguredWarning: "Vous n'avez pas configuré d'adresse e-mail."
|
||||
ratio: "Ratio"
|
||||
previewNoteText: "Voir l'aperçu"
|
||||
customCss: "CSS personnalisé"
|
||||
customCssWarn: "Utilisez cette fonctionnalité uniquement si vous savez exactement ce que vous faites. Une configuration inadaptée peut empêcher le client de s'exécuter normalement."
|
||||
global: "Global"
|
||||
|
@ -789,6 +790,8 @@ pubSub: "Comptes Pub/Sub"
|
|||
lastCommunication: "Dernière communication"
|
||||
resolved: "Résolu"
|
||||
unresolved: "En attente"
|
||||
itsOn: "Activé"
|
||||
itsOff: "Désactivé"
|
||||
emailRequiredForSignup: "Une adresse e-mail est nécessaire pour créer un compte"
|
||||
unread: "Non lu"
|
||||
filter: "Filtre"
|
||||
|
|
13
migration/1634902659689-delete-log.ts
Normal file
13
migration/1634902659689-delete-log.ts
Normal file
|
@ -0,0 +1,13 @@
|
|||
import {MigrationInterface, QueryRunner} from "typeorm";
|
||||
|
||||
export class deleteLog1634902659689 implements MigrationInterface {
|
||||
name = 'deleteLog1634902659689'
|
||||
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`DROP TABLE "log"`);
|
||||
}
|
||||
|
||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||
}
|
||||
|
||||
}
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"name": "misskey",
|
||||
"author": "syuilo <syuilotan@yahoo.co.jp>",
|
||||
"version": "12.92.0",
|
||||
"version": "12.93.1",
|
||||
"codename": "indigo",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
|
|
|
@ -595,17 +595,17 @@ export default defineComponent({
|
|||
case 'drive-files': return fetchDriveFilesChart();
|
||||
case 'drive-files-total': return fetchDriveFilesTotalChart();
|
||||
|
||||
case 'instances-requests': return fetchInstanceRequestsChart();
|
||||
case 'instances-users': return fetchInstanceUsersChart(false);
|
||||
case 'instances-users-total': return fetchInstanceUsersChart(true);
|
||||
case 'instances-notes': return fetchInstanceNotesChart(false);
|
||||
case 'instances-notes-total': return fetchInstanceNotesChart(true);
|
||||
case 'instances-ff': return fetchInstanceFfChart(false);
|
||||
case 'instances-ff-total': return fetchInstanceFfChart(true);
|
||||
case 'instances-drive-usage': return fetchInstanceDriveUsageChart(false);
|
||||
case 'instances-drive-usage-total': return fetchInstanceDriveUsageChart(true);
|
||||
case 'instances-drive-files': return fetchInstanceDriveFilesChart(false);
|
||||
case 'instances-drive-files-total': return fetchInstanceDriveFilesChart(true);
|
||||
case 'instance-requests': return fetchInstanceRequestsChart();
|
||||
case 'instance-users': return fetchInstanceUsersChart(false);
|
||||
case 'instance-users-total': return fetchInstanceUsersChart(true);
|
||||
case 'instance-notes': return fetchInstanceNotesChart(false);
|
||||
case 'instance-notes-total': return fetchInstanceNotesChart(true);
|
||||
case 'instance-ff': return fetchInstanceFfChart(false);
|
||||
case 'instance-ff-total': return fetchInstanceFfChart(true);
|
||||
case 'instance-drive-usage': return fetchInstanceDriveUsageChart(false);
|
||||
case 'instance-drive-usage-total': return fetchInstanceDriveUsageChart(true);
|
||||
case 'instance-drive-files': return fetchInstanceDriveFilesChart(false);
|
||||
case 'instance-drive-files-total': return fetchInstanceDriveFilesChart(true);
|
||||
}
|
||||
};
|
||||
fetching.value = true;
|
||||
|
|
|
@ -13,7 +13,8 @@
|
|||
<i v-else-if="notification.type === 'mention'" class="fas fa-at"></i>
|
||||
<i v-else-if="notification.type === 'quote'" class="fas fa-quote-left"></i>
|
||||
<i v-else-if="notification.type === 'pollVote'" class="fas fa-poll-h"></i>
|
||||
<XReactionIcon v-else-if="notification.type === 'reaction'" :reaction="notification.reaction" :custom-emojis="notification.note.emojis" :no-style="true"/>
|
||||
<!-- notification.reaction が null になることはまずないが、ここでoptional chaining使うと一部ブラウザで刺さるので念の為 -->
|
||||
<XReactionIcon v-else-if="notification.type === 'reaction'" :reaction="notification.reaction ? notification.reaction.replace(/^:(\w+):$/, ':$1@.:') : notification.reaction" :custom-emojis="notification.note.emojis" :no-style="true"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tail">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<template>
|
||||
<span class="ceaaebcd" :class="{ isPlus, isMinus, isZero }">
|
||||
<slot name="before"></slot>{{ isPlus ? '+' : isMinus ? '-' : '' }}{{ number(value) }}<slot name="after"></slot>
|
||||
<slot name="before"></slot>{{ isPlus ? '+' : '' }}{{ number(value) }}<slot name="after"></slot>
|
||||
</span>
|
||||
</template>
|
||||
|
||||
|
|
212
src/client/components/queue-chart.vue
Normal file
212
src/client/components/queue-chart.vue
Normal file
|
@ -0,0 +1,212 @@
|
|||
<template>
|
||||
<canvas ref="chartEl"></canvas>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import { defineComponent, onMounted, onUnmounted, ref } from 'vue';
|
||||
import {
|
||||
Chart,
|
||||
ArcElement,
|
||||
LineElement,
|
||||
BarElement,
|
||||
PointElement,
|
||||
BarController,
|
||||
LineController,
|
||||
CategoryScale,
|
||||
LinearScale,
|
||||
TimeScale,
|
||||
Legend,
|
||||
Title,
|
||||
Tooltip,
|
||||
SubTitle,
|
||||
Filler,
|
||||
} from 'chart.js';
|
||||
import number from '@client/filters/number';
|
||||
import * as os from '@client/os';
|
||||
import { defaultStore } from '@client/store';
|
||||
|
||||
Chart.register(
|
||||
ArcElement,
|
||||
LineElement,
|
||||
BarElement,
|
||||
PointElement,
|
||||
BarController,
|
||||
LineController,
|
||||
CategoryScale,
|
||||
LinearScale,
|
||||
TimeScale,
|
||||
Legend,
|
||||
Title,
|
||||
Tooltip,
|
||||
SubTitle,
|
||||
Filler,
|
||||
);
|
||||
|
||||
const alpha = (hex, a) => {
|
||||
const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex)!;
|
||||
const r = parseInt(result[1], 16);
|
||||
const g = parseInt(result[2], 16);
|
||||
const b = parseInt(result[3], 16);
|
||||
return `rgba(${r}, ${g}, ${b}, ${a})`;
|
||||
};
|
||||
|
||||
export default defineComponent({
|
||||
props: {
|
||||
domain: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
connection: {
|
||||
required: true,
|
||||
},
|
||||
},
|
||||
|
||||
setup(props) {
|
||||
const chartEl = ref<HTMLCanvasElement>(null);
|
||||
|
||||
const gridColor = defaultStore.state.darkMode ? 'rgba(255, 255, 255, 0.1)' : 'rgba(0, 0, 0, 0.1)';
|
||||
|
||||
// フォントカラー
|
||||
Chart.defaults.color = getComputedStyle(document.documentElement).getPropertyValue('--fg');
|
||||
|
||||
onMounted(() => {
|
||||
const chartInstance = new Chart(chartEl.value, {
|
||||
type: 'line',
|
||||
data: {
|
||||
labels: [],
|
||||
datasets: [{
|
||||
label: 'Process',
|
||||
pointRadius: 0,
|
||||
tension: 0,
|
||||
borderWidth: 2,
|
||||
borderColor: '#00E396',
|
||||
backgroundColor: alpha('#00E396', 0.1),
|
||||
data: []
|
||||
}, {
|
||||
label: 'Active',
|
||||
pointRadius: 0,
|
||||
tension: 0,
|
||||
borderWidth: 2,
|
||||
borderColor: '#00BCD4',
|
||||
backgroundColor: alpha('#00BCD4', 0.1),
|
||||
data: []
|
||||
}, {
|
||||
label: 'Waiting',
|
||||
pointRadius: 0,
|
||||
tension: 0,
|
||||
borderWidth: 2,
|
||||
borderColor: '#FFB300',
|
||||
backgroundColor: alpha('#FFB300', 0.1),
|
||||
data: []
|
||||
}, {
|
||||
label: 'Delayed',
|
||||
pointRadius: 0,
|
||||
tension: 0,
|
||||
borderWidth: 2,
|
||||
borderColor: '#E53935',
|
||||
borderDash: [5, 5],
|
||||
fill: false,
|
||||
data: []
|
||||
}],
|
||||
},
|
||||
options: {
|
||||
aspectRatio: 2.5,
|
||||
layout: {
|
||||
padding: {
|
||||
left: 16,
|
||||
right: 16,
|
||||
top: 16,
|
||||
bottom: 8,
|
||||
},
|
||||
},
|
||||
scales: {
|
||||
x: {
|
||||
grid: {
|
||||
display: false,
|
||||
color: gridColor,
|
||||
borderColor: 'rgb(0, 0, 0, 0)',
|
||||
},
|
||||
ticks: {
|
||||
display: false,
|
||||
},
|
||||
},
|
||||
y: {
|
||||
grid: {
|
||||
color: gridColor,
|
||||
borderColor: 'rgb(0, 0, 0, 0)',
|
||||
},
|
||||
},
|
||||
},
|
||||
interaction: {
|
||||
intersect: false,
|
||||
},
|
||||
plugins: {
|
||||
legend: {
|
||||
position: 'bottom',
|
||||
labels: {
|
||||
boxWidth: 16,
|
||||
},
|
||||
},
|
||||
tooltip: {
|
||||
mode: 'index',
|
||||
animation: {
|
||||
duration: 0,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const onStats = (stats) => {
|
||||
chartInstance.data.labels.push('');
|
||||
chartInstance.data.datasets[0].data.push(stats[props.domain].activeSincePrevTick);
|
||||
chartInstance.data.datasets[1].data.push(stats[props.domain].active);
|
||||
chartInstance.data.datasets[2].data.push(stats[props.domain].waiting);
|
||||
chartInstance.data.datasets[3].data.push(stats[props.domain].delayed);
|
||||
if (chartInstance.data.datasets[0].data.length > 200) {
|
||||
chartInstance.data.labels.shift();
|
||||
chartInstance.data.datasets[0].data.shift();
|
||||
chartInstance.data.datasets[1].data.shift();
|
||||
chartInstance.data.datasets[2].data.shift();
|
||||
chartInstance.data.datasets[3].data.shift();
|
||||
}
|
||||
chartInstance.update();
|
||||
};
|
||||
|
||||
const onStatsLog = (statsLog) => {
|
||||
for (const stats of [...statsLog].reverse()) {
|
||||
chartInstance.data.labels.push('');
|
||||
chartInstance.data.datasets[0].data.push(stats[props.domain].activeSincePrevTick);
|
||||
chartInstance.data.datasets[1].data.push(stats[props.domain].active);
|
||||
chartInstance.data.datasets[2].data.push(stats[props.domain].waiting);
|
||||
chartInstance.data.datasets[3].data.push(stats[props.domain].delayed);
|
||||
if (chartInstance.data.datasets[0].data.length > 200) {
|
||||
chartInstance.data.labels.shift();
|
||||
chartInstance.data.datasets[0].data.shift();
|
||||
chartInstance.data.datasets[1].data.shift();
|
||||
chartInstance.data.datasets[2].data.shift();
|
||||
chartInstance.data.datasets[3].data.shift();
|
||||
}
|
||||
}
|
||||
chartInstance.update();
|
||||
};
|
||||
|
||||
props.connection.on('stats', onStats);
|
||||
props.connection.on('statsLog', onStatsLog);
|
||||
|
||||
onUnmounted(() => {
|
||||
props.connection.off('stats', onStats);
|
||||
props.connection.off('statsLog', onStatsLog);
|
||||
});
|
||||
});
|
||||
|
||||
return {
|
||||
chartEl,
|
||||
}
|
||||
},
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
|
||||
</style>
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<div class="ukygtjoj _block" :class="{ naked, hideHeader: !showHeader, scrollable, closed: !showBody }" v-size="{ max: [380] }">
|
||||
<div class="ukygtjoj _panel" :class="{ naked, thin, hideHeader: !showHeader, scrollable, closed: !showBody }" v-size="{ max: [380] }">
|
||||
<header v-if="showHeader" ref="header">
|
||||
<div class="title"><slot name="header"></slot></div>
|
||||
<div class="sub">
|
||||
|
@ -36,6 +36,11 @@ export default defineComponent({
|
|||
required: false,
|
||||
default: true
|
||||
},
|
||||
thin: {
|
||||
type: Boolean,
|
||||
required: false,
|
||||
default: false
|
||||
},
|
||||
naked: {
|
||||
type: Boolean,
|
||||
required: false,
|
||||
|
@ -226,7 +231,7 @@ export default defineComponent({
|
|||
}
|
||||
}
|
||||
|
||||
&.max-width_380px {
|
||||
&.max-width_380px, &.thin {
|
||||
> header {
|
||||
> .title {
|
||||
padding: 8px 10px;
|
||||
|
|
|
@ -120,7 +120,7 @@ export default defineComponent({
|
|||
|
||||
> .items {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fill, minmax(110px, 1fr));
|
||||
grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
|
||||
grid-gap: 8px;
|
||||
padding: 0 16px;
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
<div class="title">{{ $ts.misskeyUpdated }}</div>
|
||||
<div class="version">✨{{ version }}🚀</div>
|
||||
<MkButton full @click="whatIsNew">{{ $ts.whatIsNew }}</MkButton>
|
||||
<MkButton primary full @click="$refs.modal.close()">{{ $ts.gotIt }}</MkButton>
|
||||
<MkButton class="gotIt" primary full @click="$refs.modal.close()">{{ $ts.gotIt }}</MkButton>
|
||||
</div>
|
||||
</MkModal>
|
||||
</template>
|
||||
|
@ -54,5 +54,9 @@ export default defineComponent({
|
|||
> .version {
|
||||
margin: 1em 0;
|
||||
}
|
||||
|
||||
> .gotIt {
|
||||
margin: 8px 0 0 0;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
|
@ -7,8 +7,8 @@
|
|||
<img :src="$instance.iconUrl || '/favicon.ico'" alt="" class="icon"/>
|
||||
</div>
|
||||
|
||||
<MkInfo v-if="noMaintainerInformation" warn class="info">{{ $ts.noMaintainerInformationWarning }} <MkA to="/instance/settings" class="_link">{{ $ts.configure }}</MkA></MkInfo>
|
||||
<MkInfo v-if="noBotProtection" warn class="info">{{ $ts.noBotProtectionWarning }} <MkA to="/instance/bot-protection" class="_link">{{ $ts.configure }}</MkA></MkInfo>
|
||||
<MkInfo v-if="noMaintainerInformation" warn class="info">{{ $ts.noMaintainerInformationWarning }} <MkA to="/admin/settings" class="_link">{{ $ts.configure }}</MkA></MkInfo>
|
||||
<MkInfo v-if="noBotProtection" warn class="info">{{ $ts.noBotProtectionWarning }} <MkA to="/admin/bot-protection" class="_link">{{ $ts.configure }}</MkA></MkInfo>
|
||||
|
||||
<MkSuperMenu :def="menuDef" :grid="page == null"></MkSuperMenu>
|
||||
</div>
|
||||
|
@ -93,47 +93,47 @@ export default defineComponent({
|
|||
items: [{
|
||||
icon: 'fas fa-tachometer-alt',
|
||||
text: i18n.locale.dashboard,
|
||||
to: '/instance/overview',
|
||||
to: '/admin/overview',
|
||||
active: page.value === 'overview',
|
||||
}, {
|
||||
icon: 'fas fa-users',
|
||||
text: i18n.locale.users,
|
||||
to: '/instance/users',
|
||||
to: '/admin/users',
|
||||
active: page.value === 'users',
|
||||
}, {
|
||||
icon: 'fas fa-laugh',
|
||||
text: i18n.locale.customEmojis,
|
||||
to: '/instance/emojis',
|
||||
to: '/admin/emojis',
|
||||
active: page.value === 'emojis',
|
||||
}, {
|
||||
icon: 'fas fa-globe',
|
||||
text: i18n.locale.federation,
|
||||
to: '/instance/federation',
|
||||
to: '/admin/federation',
|
||||
active: page.value === 'federation',
|
||||
}, {
|
||||
icon: 'fas fa-clipboard-list',
|
||||
text: i18n.locale.jobQueue,
|
||||
to: '/instance/queue',
|
||||
to: '/admin/queue',
|
||||
active: page.value === 'queue',
|
||||
}, {
|
||||
icon: 'fas fa-cloud',
|
||||
text: i18n.locale.files,
|
||||
to: '/instance/files',
|
||||
to: '/admin/files',
|
||||
active: page.value === 'files',
|
||||
}, {
|
||||
icon: 'fas fa-broadcast-tower',
|
||||
text: i18n.locale.announcements,
|
||||
to: '/instance/announcements',
|
||||
to: '/admin/announcements',
|
||||
active: page.value === 'announcements',
|
||||
}, {
|
||||
icon: 'fas fa-audio-description',
|
||||
text: i18n.locale.ads,
|
||||
to: '/instance/ads',
|
||||
to: '/admin/ads',
|
||||
active: page.value === 'ads',
|
||||
}, {
|
||||
icon: 'fas fa-exclamation-circle',
|
||||
text: i18n.locale.abuseReports,
|
||||
to: '/instance/abuses',
|
||||
to: '/admin/abuses',
|
||||
active: page.value === 'abuses',
|
||||
}],
|
||||
}, {
|
||||
|
@ -141,57 +141,57 @@ export default defineComponent({
|
|||
items: [{
|
||||
icon: 'fas fa-cog',
|
||||
text: i18n.locale.general,
|
||||
to: '/instance/settings',
|
||||
to: '/admin/settings',
|
||||
active: page.value === 'settings',
|
||||
}, {
|
||||
icon: 'fas fa-cloud',
|
||||
text: i18n.locale.files,
|
||||
to: '/instance/files-settings',
|
||||
to: '/admin/files-settings',
|
||||
active: page.value === 'files-settings',
|
||||
}, {
|
||||
icon: 'fas fa-envelope',
|
||||
text: i18n.locale.emailServer,
|
||||
to: '/instance/email-settings',
|
||||
to: '/admin/email-settings',
|
||||
active: page.value === 'email-settings',
|
||||
}, {
|
||||
icon: 'fas fa-cloud',
|
||||
text: i18n.locale.objectStorage,
|
||||
to: '/instance/object-storage',
|
||||
to: '/admin/object-storage',
|
||||
active: page.value === 'object-storage',
|
||||
}, {
|
||||
icon: 'fas fa-lock',
|
||||
text: i18n.locale.security,
|
||||
to: '/instance/security',
|
||||
to: '/admin/security',
|
||||
active: page.value === 'security',
|
||||
}, {
|
||||
icon: 'fas fa-bolt',
|
||||
text: 'ServiceWorker',
|
||||
to: '/instance/service-worker',
|
||||
to: '/admin/service-worker',
|
||||
active: page.value === 'service-worker',
|
||||
}, {
|
||||
icon: 'fas fa-globe',
|
||||
text: i18n.locale.relays,
|
||||
to: '/instance/relays',
|
||||
to: '/admin/relays',
|
||||
active: page.value === 'relays',
|
||||
}, {
|
||||
icon: 'fas fa-share-alt',
|
||||
text: i18n.locale.integration,
|
||||
to: '/instance/integrations',
|
||||
to: '/admin/integrations',
|
||||
active: page.value === 'integrations',
|
||||
}, {
|
||||
icon: 'fas fa-ban',
|
||||
text: i18n.locale.instanceBlocking,
|
||||
to: '/instance/instance-block',
|
||||
to: '/admin/instance-block',
|
||||
active: page.value === 'instance-block',
|
||||
}, {
|
||||
icon: 'fas fa-ghost',
|
||||
text: i18n.locale.proxyAccount,
|
||||
to: '/instance/proxy-account',
|
||||
to: '/admin/proxy-account',
|
||||
active: page.value === 'proxy-account',
|
||||
}, {
|
||||
icon: 'fas fa-cogs',
|
||||
text: i18n.locale.other,
|
||||
to: '/instance/other-settings',
|
||||
to: '/admin/other-settings',
|
||||
active: page.value === 'other-settings',
|
||||
}],
|
||||
}, {
|
||||
|
@ -199,13 +199,8 @@ export default defineComponent({
|
|||
items: [{
|
||||
icon: 'fas fa-database',
|
||||
text: i18n.locale.database,
|
||||
to: '/instance/database',
|
||||
to: '/admin/database',
|
||||
active: page.value === 'database',
|
||||
}, {
|
||||
icon: 'fas fa-stream',
|
||||
text: i18n.locale.logs,
|
||||
to: '/instance/logs',
|
||||
active: page.value === 'logs',
|
||||
}],
|
||||
}]);
|
||||
const component = computed(() => {
|
||||
|
@ -220,7 +215,6 @@ export default defineComponent({
|
|||
case 'announcements': return defineAsyncComponent(() => import('./announcements.vue'));
|
||||
case 'ads': return defineAsyncComponent(() => import('./ads.vue'));
|
||||
case 'database': return defineAsyncComponent(() => import('./database.vue'));
|
||||
case 'logs': return defineAsyncComponent(() => import('./logs.vue'));
|
||||
case 'abuses': return defineAsyncComponent(() => import('./abuses.vue'));
|
||||
case 'settings': return defineAsyncComponent(() => import('./settings.vue'));
|
||||
case 'files-settings': return defineAsyncComponent(() => import('./files-settings.vue'));
|
|
@ -1,15 +1,15 @@
|
|||
<template>
|
||||
<FormBase>
|
||||
<FormSuspense :p="init">
|
||||
<FormLink to="/instance/integrations/twitter">
|
||||
<FormLink to="/admin/integrations/twitter">
|
||||
<i class="fab fa-twitter"></i> Twitter
|
||||
<template #suffix>{{ enableTwitterIntegration ? $ts.enabled : $ts.disabled }}</template>
|
||||
</FormLink>
|
||||
<FormLink to="/instance/integrations/github">
|
||||
<FormLink to="/admin/integrations/github">
|
||||
<i class="fab fa-github"></i> GitHub
|
||||
<template #suffix>{{ enableGithubIntegration ? $ts.enabled : $ts.disabled }}</template>
|
||||
</FormLink>
|
||||
<FormLink to="/instance/integrations/discord">
|
||||
<FormLink to="/admin/integrations/discord">
|
||||
<i class="fab fa-discord"></i> Discord
|
||||
<template #suffix>{{ enableDiscordIntegration ? $ts.enabled : $ts.disabled }}</template>
|
||||
</FormLink>
|
|
@ -2,20 +2,20 @@
|
|||
<div>
|
||||
<MkHeader :info="header"/>
|
||||
|
||||
<div class="edbbcaef">
|
||||
<div class="numbers" v-if="stats">
|
||||
<div class="edbbcaef" v-size="{ max: [880] }">
|
||||
<div v-if="stats" class="cfcdecdf" style="margin: var(--margin)">
|
||||
<div class="number _panel">
|
||||
<div class="label">Users</div>
|
||||
<div class="value _monospace">
|
||||
{{ number(stats.originalUsersCount) }}
|
||||
<MkNumberDiff v-if="usersComparedToThePrevDay" class="diff" :value="usersComparedToThePrevDay" v-tooltip="$ts.dayOverDayChanges"><template #before>(</template><template #after>)</template></MkNumberDiff>
|
||||
<MkNumberDiff v-if="usersComparedToThePrevDay != null" class="diff" :value="usersComparedToThePrevDay" v-tooltip="$ts.dayOverDayChanges"><template #before>(</template><template #after>)</template></MkNumberDiff>
|
||||
</div>
|
||||
</div>
|
||||
<div class="number _panel">
|
||||
<div class="label">Notes</div>
|
||||
<div class="value _monospace">
|
||||
{{ number(stats.originalNotesCount) }}
|
||||
<MkNumberDiff v-if="notesComparedToThePrevDay" class="diff" :value="notesComparedToThePrevDay" v-tooltip="$ts.dayOverDayChanges"><template #before>(</template><template #after>)</template></MkNumberDiff>
|
||||
<MkNumberDiff v-if="notesComparedToThePrevDay != null" class="diff" :value="notesComparedToThePrevDay" v-tooltip="$ts.dayOverDayChanges"><template #before>(</template><template #after>)</template></MkNumberDiff>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -26,37 +26,51 @@
|
|||
<MkInstanceStats :chart-limit="500" :detailed="true"/>
|
||||
</div>
|
||||
</MkContainer>
|
||||
|
||||
|
||||
<div class="queue">
|
||||
<MkContainer :foldable="true" :thin="true" class="deliver">
|
||||
<template #header>Queue: deliver</template>
|
||||
<MkQueueChart :connection="queueStatsConnection" domain="deliver"/>
|
||||
</MkContainer>
|
||||
<MkContainer :foldable="true" :thin="true" class="inbox">
|
||||
<template #header>Queue: inbox</template>
|
||||
<MkQueueChart :connection="queueStatsConnection" domain="inbox"/>
|
||||
</MkContainer>
|
||||
</div>
|
||||
|
||||
<!--<XMetrics/>-->
|
||||
|
||||
<div class="numbers">
|
||||
<div class="number _panel">
|
||||
<div class="label">Misskey</div>
|
||||
<div class="value _monospace">{{ version }}</div>
|
||||
<MkFolder style="margin: var(--margin)">
|
||||
<template #header><i class="fas fa-info-circle"></i> {{ $ts.info }}</template>
|
||||
<div class="cfcdecdf">
|
||||
<div class="number _panel">
|
||||
<div class="label">Misskey</div>
|
||||
<div class="value _monospace">{{ version }}</div>
|
||||
</div>
|
||||
<div class="number _panel" v-if="serverInfo">
|
||||
<div class="label">Node.js</div>
|
||||
<div class="value _monospace">{{ serverInfo.node }}</div>
|
||||
</div>
|
||||
<div class="number _panel" v-if="serverInfo">
|
||||
<div class="label">PostgreSQL</div>
|
||||
<div class="value _monospace">{{ serverInfo.psql }}</div>
|
||||
</div>
|
||||
<div class="number _panel" v-if="serverInfo">
|
||||
<div class="label">Redis</div>
|
||||
<div class="value _monospace">{{ serverInfo.redis }}</div>
|
||||
</div>
|
||||
<div class="number _panel">
|
||||
<div class="label">Vue</div>
|
||||
<div class="value _monospace">{{ vueVersion }}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="number _panel" v-if="serverInfo">
|
||||
<div class="label">Node.js</div>
|
||||
<div class="value _monospace">{{ serverInfo.node }}</div>
|
||||
</div>
|
||||
<div class="number _panel" v-if="serverInfo">
|
||||
<div class="label">PostgreSQL</div>
|
||||
<div class="value _monospace">{{ serverInfo.psql }}</div>
|
||||
</div>
|
||||
<div class="number _panel" v-if="serverInfo">
|
||||
<div class="label">Redis</div>
|
||||
<div class="value _monospace">{{ serverInfo.redis }}</div>
|
||||
</div>
|
||||
<div class="number _panel">
|
||||
<div class="label">Vue</div>
|
||||
<div class="value _monospace">{{ vueVersion }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</MkFolder>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import { computed, defineComponent, version as vueVersion } from 'vue';
|
||||
import { computed, defineComponent, markRaw, version as vueVersion } from 'vue';
|
||||
import FormKeyValueView from '@client/components/debobigego/key-value-view.vue';
|
||||
import MkInstanceStats from '@client/components/instance-stats.vue';
|
||||
import MkButton from '@client/components/ui/button.vue';
|
||||
|
@ -64,6 +78,7 @@ import MkSelect from '@client/components/form/select.vue';
|
|||
import MkNumberDiff from '@client/components/number-diff.vue';
|
||||
import MkContainer from '@client/components/ui/container.vue';
|
||||
import MkFolder from '@client/components/ui/folder.vue';
|
||||
import MkQueueChart from '@client/components/queue-chart.vue';
|
||||
import { version, url } from '@client/config';
|
||||
import bytes from '@client/filters/bytes';
|
||||
import number from '@client/filters/number';
|
||||
|
@ -78,6 +93,8 @@ export default defineComponent({
|
|||
FormKeyValueView,
|
||||
MkInstanceStats,
|
||||
MkContainer,
|
||||
MkFolder,
|
||||
MkQueueChart,
|
||||
XMetrics,
|
||||
},
|
||||
|
||||
|
@ -104,6 +121,7 @@ export default defineComponent({
|
|||
notesComparedToThePrevDay: null,
|
||||
fetchJobs: () => os.api('admin/queue/deliver-delayed', {}),
|
||||
fetchModLogs: () => os.api('admin/show-moderation-logs', {}),
|
||||
queueStatsConnection: markRaw(os.stream.useChannel('queueStats')),
|
||||
}
|
||||
},
|
||||
|
||||
|
@ -129,6 +147,17 @@ export default defineComponent({
|
|||
os.api('admin/server-info', {}).then(serverInfo => {
|
||||
this.serverInfo = serverInfo;
|
||||
});
|
||||
|
||||
this.$nextTick(() => {
|
||||
this.queueStatsConnection.send('requestLog', {
|
||||
id: Math.random().toString().substr(2, 8),
|
||||
length: 200
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
beforeUnmount() {
|
||||
this.queueStatsConnection.dispose();
|
||||
},
|
||||
|
||||
methods: {
|
||||
|
@ -153,11 +182,10 @@ export default defineComponent({
|
|||
|
||||
<style lang="scss" scoped>
|
||||
.edbbcaef {
|
||||
> .numbers {
|
||||
.cfcdecdf {
|
||||
display: grid;
|
||||
grid-gap: 8px;
|
||||
grid-template-columns: repeat(auto-fill,minmax(130px,1fr));
|
||||
margin: 16px;
|
||||
grid-template-columns: repeat(auto-fill,minmax(150px,1fr));
|
||||
|
||||
> .number {
|
||||
padding: 12px 16px;
|
||||
|
@ -181,5 +209,34 @@ export default defineComponent({
|
|||
> .charts {
|
||||
margin: var(--margin);
|
||||
}
|
||||
|
||||
> .queue {
|
||||
margin: var(--margin);
|
||||
display: flex;
|
||||
|
||||
> .deliver,
|
||||
> .inbox {
|
||||
flex: 1;
|
||||
width: 50%;
|
||||
|
||||
&:not(:first-child) {
|
||||
margin-left: var(--margin);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.max-width_800px {
|
||||
> .queue {
|
||||
display: block;
|
||||
|
||||
> .deliver,
|
||||
> .inbox {
|
||||
&:not(:first-child) {
|
||||
margin-top: var(--margin);
|
||||
margin-left: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
102
src/client/pages/admin/queue.chart.vue
Normal file
102
src/client/pages/admin/queue.chart.vue
Normal file
|
@ -0,0 +1,102 @@
|
|||
<template>
|
||||
<div class="_debobigegoItem">
|
||||
<div class="_debobigegoLabel"><slot name="title"></slot></div>
|
||||
<div class="_debobigegoPanel pumxzjhg">
|
||||
<div class="_table status">
|
||||
<div class="_row">
|
||||
<div class="_cell"><div class="_label">Process</div>{{ number(activeSincePrevTick) }}</div>
|
||||
<div class="_cell"><div class="_label">Active</div>{{ number(active) }}</div>
|
||||
<div class="_cell"><div class="_label">Waiting</div>{{ number(waiting) }}</div>
|
||||
<div class="_cell"><div class="_label">Delayed</div>{{ number(delayed) }}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="">
|
||||
<MkQueueChart :domain="domain" :connection="connection"/>
|
||||
</div>
|
||||
<div class="jobs">
|
||||
<div v-if="jobs.length > 0">
|
||||
<div v-for="job in jobs" :key="job[0]">
|
||||
<span>{{ job[0] }}</span>
|
||||
<span style="margin-left: 8px; opacity: 0.7;">({{ number(job[1]) }} jobs)</span>
|
||||
</div>
|
||||
</div>
|
||||
<span v-else style="opacity: 0.5;">{{ $ts.noJobs }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import { defineComponent, markRaw, onMounted, onUnmounted, ref } from 'vue';
|
||||
import number from '@client/filters/number';
|
||||
import MkQueueChart from '@client/components/queue-chart.vue';
|
||||
import * as os from '@client/os';
|
||||
|
||||
export default defineComponent({
|
||||
components: {
|
||||
MkQueueChart
|
||||
},
|
||||
|
||||
props: {
|
||||
domain: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
connection: {
|
||||
required: true,
|
||||
},
|
||||
},
|
||||
|
||||
setup(props) {
|
||||
const activeSincePrevTick = ref(0);
|
||||
const active = ref(0);
|
||||
const waiting = ref(0);
|
||||
const delayed = ref(0);
|
||||
const jobs = ref([]);
|
||||
|
||||
onMounted(() => {
|
||||
os.api(props.domain === 'inbox' ? 'admin/queue/inbox-delayed' : props.domain === 'deliver' ? 'admin/queue/deliver-delayed' : null, {}).then(jobs => {
|
||||
jobs.value = jobs;
|
||||
});
|
||||
|
||||
const onStats = (stats) => {
|
||||
activeSincePrevTick.value = stats[props.domain].activeSincePrevTick;
|
||||
active.value = stats[props.domain].active;
|
||||
waiting.value = stats[props.domain].waiting;
|
||||
delayed.value = stats[props.domain].delayed;
|
||||
};
|
||||
|
||||
props.connection.on('stats', onStats);
|
||||
|
||||
onUnmounted(() => {
|
||||
props.connection.off('stats', onStats);
|
||||
});
|
||||
});
|
||||
|
||||
return {
|
||||
jobs,
|
||||
activeSincePrevTick,
|
||||
active,
|
||||
waiting,
|
||||
delayed,
|
||||
number,
|
||||
};
|
||||
},
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.pumxzjhg {
|
||||
> .status {
|
||||
padding: 16px;
|
||||
border-bottom: solid 0.5px var(--divider);
|
||||
}
|
||||
|
||||
> .jobs {
|
||||
padding: 16px;
|
||||
border-top: solid 0.5px var(--divider);
|
||||
max-height: 180px;
|
||||
overflow: auto;
|
||||
}
|
||||
}
|
||||
</style>
|
|
@ -1,7 +1,7 @@
|
|||
<template>
|
||||
<FormBase>
|
||||
<FormSuspense :p="init">
|
||||
<FormLink to="/instance/bot-protection">
|
||||
<FormLink to="/admin/bot-protection">
|
||||
<i class="fas fa-shield-alt"></i> {{ $ts.botProtection }}
|
||||
<template #suffix v-if="enableHcaptcha">hCaptcha</template>
|
||||
<template #suffix v-else-if="enableRecaptcha">reCAPTCHA</template>
|
|
@ -149,7 +149,7 @@ import * as os from '@client/os';
|
|||
import number from '@client/filters/number';
|
||||
import bytes from '@client/filters/bytes';
|
||||
import * as symbols from '@client/symbols';
|
||||
import MkInstanceInfo from '@client/pages/instance/instance.vue';
|
||||
import MkInstanceInfo from '@client/pages/admin/instance.vue';
|
||||
|
||||
export default defineComponent({
|
||||
components: {
|
||||
|
|
|
@ -1,97 +0,0 @@
|
|||
<template>
|
||||
<div class="_section">
|
||||
<div class="_inputs">
|
||||
<MkInput v-model="logDomain" :debounce="true">
|
||||
<template #label>{{ $ts.domain }}</template>
|
||||
</MkInput>
|
||||
<MkSelect v-model="logLevel">
|
||||
<template #label>Level</template>
|
||||
<option value="all">All</option>
|
||||
<option value="info">Info</option>
|
||||
<option value="success">Success</option>
|
||||
<option value="warning">Warning</option>
|
||||
<option value="error">Error</option>
|
||||
<option value="debug">Debug</option>
|
||||
</MkSelect>
|
||||
</div>
|
||||
|
||||
<div class="logs">
|
||||
<code v-for="log in logs" :key="log.id" :class="log.level">
|
||||
<details>
|
||||
<summary><MkTime :time="log.createdAt"/> [{{ log.domain.join('.') }}] {{ log.message }}</summary>
|
||||
<!--<vue-json-pretty v-if="log.data" :data="log.data"></vue-json-pretty>-->
|
||||
</details>
|
||||
</code>
|
||||
</div>
|
||||
|
||||
<MkButton @click="deleteAllLogs()" primary><i class="fas fa-trash-alt"></i> {{ $ts.deleteAll }}</MkButton>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import { defineComponent } from 'vue';
|
||||
import MkButton from '@client/components/ui/button.vue';
|
||||
import MkInput from '@client/components/form/input.vue';
|
||||
import MkSelect from '@client/components/form/select.vue';
|
||||
import MkTextarea from '@client/components/form/textarea.vue';
|
||||
import * as os from '@client/os';
|
||||
import * as symbols from '@client/symbols';
|
||||
|
||||
export default defineComponent({
|
||||
components: {
|
||||
MkButton,
|
||||
MkInput,
|
||||
MkSelect,
|
||||
MkTextarea,
|
||||
},
|
||||
|
||||
emits: ['info'],
|
||||
|
||||
data() {
|
||||
return {
|
||||
[symbols.PAGE_INFO]: {
|
||||
title: this.$ts.serverLogs,
|
||||
icon: 'fas fa-stream'
|
||||
},
|
||||
logs: [],
|
||||
logLevel: 'all',
|
||||
logDomain: '',
|
||||
}
|
||||
},
|
||||
|
||||
watch: {
|
||||
logLevel() {
|
||||
this.logs = [];
|
||||
this.fetchLogs();
|
||||
},
|
||||
logDomain() {
|
||||
this.logs = [];
|
||||
this.fetchLogs();
|
||||
}
|
||||
},
|
||||
|
||||
created() {
|
||||
this.fetchLogs();
|
||||
},
|
||||
|
||||
mounted() {
|
||||
this.$emit('info', this[symbols.PAGE_INFO]);
|
||||
},
|
||||
|
||||
methods: {
|
||||
fetchLogs() {
|
||||
os.api('admin/logs', {
|
||||
level: this.logLevel === 'all' ? null : this.logLevel,
|
||||
domain: this.logDomain === '' ? null : this.logDomain,
|
||||
limit: 30
|
||||
}).then(logs => {
|
||||
this.logs = logs.reverse();
|
||||
});
|
||||
},
|
||||
|
||||
deleteAllLogs() {
|
||||
os.apiWithDialog('admin/delete-logs');
|
||||
},
|
||||
}
|
||||
});
|
||||
</script>
|
|
@ -1,218 +0,0 @@
|
|||
<template>
|
||||
<div class="_debobigegoItem">
|
||||
<div class="_debobigegoLabel"><slot name="title"></slot></div>
|
||||
<div class="_debobigegoPanel pumxzjhg">
|
||||
<div class="_table status">
|
||||
<div class="_row">
|
||||
<div class="_cell"><div class="_label">Process</div>{{ number(activeSincePrevTick) }}</div>
|
||||
<div class="_cell"><div class="_label">Active</div>{{ number(active) }}</div>
|
||||
<div class="_cell"><div class="_label">Waiting</div>{{ number(waiting) }}</div>
|
||||
<div class="_cell"><div class="_label">Delayed</div>{{ number(delayed) }}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="">
|
||||
<canvas ref="chart"></canvas>
|
||||
</div>
|
||||
<div class="jobs">
|
||||
<div v-if="jobs.length > 0">
|
||||
<div v-for="job in jobs" :key="job[0]">
|
||||
<span>{{ job[0] }}</span>
|
||||
<span style="margin-left: 8px; opacity: 0.7;">({{ number(job[1]) }} jobs)</span>
|
||||
</div>
|
||||
</div>
|
||||
<span v-else style="opacity: 0.5;">{{ $ts.noJobs }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import { defineComponent, markRaw } from 'vue';
|
||||
import Chart from 'chart.js';
|
||||
import number from '@client/filters/number';
|
||||
|
||||
const alpha = (hex, a) => {
|
||||
const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex)!;
|
||||
const r = parseInt(result[1], 16);
|
||||
const g = parseInt(result[2], 16);
|
||||
const b = parseInt(result[3], 16);
|
||||
return `rgba(${r}, ${g}, ${b}, ${a})`;
|
||||
};
|
||||
import * as os from '@client/os';
|
||||
|
||||
export default defineComponent({
|
||||
props: {
|
||||
domain: {
|
||||
required: true
|
||||
},
|
||||
connection: {
|
||||
required: true
|
||||
},
|
||||
},
|
||||
|
||||
data() {
|
||||
return {
|
||||
chart: null,
|
||||
jobs: [],
|
||||
activeSincePrevTick: 0,
|
||||
active: 0,
|
||||
waiting: 0,
|
||||
delayed: 0,
|
||||
}
|
||||
},
|
||||
|
||||
mounted() {
|
||||
this.fetchJobs();
|
||||
|
||||
// TODO: var(--panel)の色が暗いか明るいかで判定する
|
||||
const gridColor = this.$store.state.darkMode ? 'rgba(255, 255, 255, 0.1)' : 'rgba(0, 0, 0, 0.1)';
|
||||
|
||||
Chart.defaults.color = getComputedStyle(document.documentElement).getPropertyValue('--fg');
|
||||
|
||||
this.chart = markRaw(new Chart(this.$refs.chart, {
|
||||
type: 'line',
|
||||
data: {
|
||||
labels: [],
|
||||
datasets: [{
|
||||
label: 'Process',
|
||||
pointRadius: 0,
|
||||
lineTension: 0,
|
||||
borderWidth: 2,
|
||||
borderColor: '#00E396',
|
||||
backgroundColor: alpha('#00E396', 0.1),
|
||||
data: []
|
||||
}, {
|
||||
label: 'Active',
|
||||
pointRadius: 0,
|
||||
lineTension: 0,
|
||||
borderWidth: 2,
|
||||
borderColor: '#00BCD4',
|
||||
backgroundColor: alpha('#00BCD4', 0.1),
|
||||
data: []
|
||||
}, {
|
||||
label: 'Waiting',
|
||||
pointRadius: 0,
|
||||
lineTension: 0,
|
||||
borderWidth: 2,
|
||||
borderColor: '#FFB300',
|
||||
backgroundColor: alpha('#FFB300', 0.1),
|
||||
data: []
|
||||
}, {
|
||||
label: 'Delayed',
|
||||
pointRadius: 0,
|
||||
lineTension: 0,
|
||||
borderWidth: 2,
|
||||
borderColor: '#E53935',
|
||||
borderDash: [5, 5],
|
||||
fill: false,
|
||||
data: []
|
||||
}]
|
||||
},
|
||||
options: {
|
||||
aspectRatio: 3,
|
||||
layout: {
|
||||
padding: {
|
||||
left: 16,
|
||||
right: 16,
|
||||
top: 16,
|
||||
bottom: 12
|
||||
}
|
||||
},
|
||||
legend: {
|
||||
position: 'bottom',
|
||||
labels: {
|
||||
boxWidth: 16,
|
||||
}
|
||||
},
|
||||
scales: {
|
||||
xAxes: [{
|
||||
gridLines: {
|
||||
display: false,
|
||||
color: gridColor,
|
||||
zeroLineColor: gridColor,
|
||||
},
|
||||
ticks: {
|
||||
display: false
|
||||
}
|
||||
}],
|
||||
yAxes: [{
|
||||
position: 'right',
|
||||
gridLines: {
|
||||
display: true,
|
||||
color: gridColor,
|
||||
zeroLineColor: gridColor,
|
||||
},
|
||||
ticks: {
|
||||
display: false,
|
||||
}
|
||||
}]
|
||||
},
|
||||
tooltips: {
|
||||
intersect: false,
|
||||
mode: 'index',
|
||||
}
|
||||
}
|
||||
}));
|
||||
|
||||
this.connection.on('stats', this.onStats);
|
||||
this.connection.on('statsLog', this.onStatsLog);
|
||||
},
|
||||
|
||||
beforeUnmount() {
|
||||
this.connection.off('stats', this.onStats);
|
||||
this.connection.off('statsLog', this.onStatsLog);
|
||||
},
|
||||
|
||||
methods: {
|
||||
onStats(stats) {
|
||||
this.activeSincePrevTick = stats[this.domain].activeSincePrevTick;
|
||||
this.active = stats[this.domain].active;
|
||||
this.waiting = stats[this.domain].waiting;
|
||||
this.delayed = stats[this.domain].delayed;
|
||||
this.chart.data.labels.push('');
|
||||
this.chart.data.datasets[0].data.push(stats[this.domain].activeSincePrevTick);
|
||||
this.chart.data.datasets[1].data.push(stats[this.domain].active);
|
||||
this.chart.data.datasets[2].data.push(stats[this.domain].waiting);
|
||||
this.chart.data.datasets[3].data.push(stats[this.domain].delayed);
|
||||
if (this.chart.data.datasets[0].data.length > 200) {
|
||||
this.chart.data.labels.shift();
|
||||
this.chart.data.datasets[0].data.shift();
|
||||
this.chart.data.datasets[1].data.shift();
|
||||
this.chart.data.datasets[2].data.shift();
|
||||
this.chart.data.datasets[3].data.shift();
|
||||
}
|
||||
this.chart.update();
|
||||
},
|
||||
|
||||
onStatsLog(statsLog) {
|
||||
for (const stats of [...statsLog].reverse()) {
|
||||
this.onStats(stats);
|
||||
}
|
||||
},
|
||||
|
||||
fetchJobs() {
|
||||
os.api(this.domain === 'inbox' ? 'admin/queue/inbox-delayed' : this.domain === 'deliver' ? 'admin/queue/deliver-delayed' : null, {}).then(jobs => {
|
||||
this.jobs = jobs;
|
||||
});
|
||||
},
|
||||
|
||||
number
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.pumxzjhg {
|
||||
> .status {
|
||||
padding: 16px;
|
||||
border-bottom: solid 0.5px var(--divider);
|
||||
}
|
||||
|
||||
> .jobs {
|
||||
padding: 16px;
|
||||
border-top: solid 0.5px var(--divider);
|
||||
max-height: 180px;
|
||||
overflow: auto;
|
||||
}
|
||||
}
|
||||
</style>
|
|
@ -70,8 +70,8 @@ const defaultRoutes = [
|
|||
{ path: '/my/antennas/:antennaId', component: page('my-antennas/edit'), props: true },
|
||||
{ path: '/my/clips', component: page('my-clips/index') },
|
||||
{ path: '/scratchpad', component: page('scratchpad') },
|
||||
{ path: '/instance/:page(.*)?', component: page('instance/index'), props: route => ({ initialPage: route.params.page || null }) },
|
||||
{ path: '/instance', component: page('instance/index') },
|
||||
{ path: '/admin/:page(.*)?', component: page('admin/index'), props: route => ({ initialPage: route.params.page || null }) },
|
||||
{ path: '/admin', component: page('admin/index') },
|
||||
{ path: '/notes/:note', name: 'note', component: page('note'), props: route => ({ noteId: route.params.note }) },
|
||||
{ path: '/tags/:tag', component: page('tag'), props: route => ({ tag: route.params.tag }) },
|
||||
{ path: '/user-info/:user', component: page('user-info'), props: route => ({ userId: route.params.user }) },
|
||||
|
|
|
@ -5,7 +5,7 @@ import { Fn, HpmlScope } from '.';
|
|||
import { Expr } from './expr';
|
||||
import * as seedrandom from 'seedrandom';
|
||||
|
||||
/*
|
||||
/* TODO: https://www.chartjs.org/docs/latest/configuration/canvas-background.html#color
|
||||
// https://stackoverflow.com/questions/38493564/chart-area-background-color-chartjs
|
||||
Chart.pluginService.register({
|
||||
beforeDraw: (chart, easing) => {
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
</component>
|
||||
</template>
|
||||
<div class="divider"></div>
|
||||
<MkA v-if="$i.isAdmin || $i.isModerator" class="item" active-class="active" to="/instance" v-click-anime>
|
||||
<MkA v-if="$i.isAdmin || $i.isModerator" class="item" active-class="active" to="/admin" v-click-anime>
|
||||
<i class="fas fa-server fa-fw"></i><span class="text">{{ $ts.instance }}</span>
|
||||
</MkA>
|
||||
<button class="item _button" @click="more" v-click-anime>
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
</component>
|
||||
</template>
|
||||
<div class="divider"></div>
|
||||
<MkA v-if="$i.isAdmin || $i.isModerator" class="item" active-class="active" to="/instance" :behavior="settingsWindowed ? 'modalWindow' : null" v-click-anime v-tooltip="$ts.instance">
|
||||
<MkA v-if="$i.isAdmin || $i.isModerator" class="item" active-class="active" to="/admin" :behavior="settingsWindowed ? 'modalWindow' : null" v-click-anime v-tooltip="$ts.instance">
|
||||
<i class="fas fa-server fa-fw"></i>
|
||||
</MkA>
|
||||
<button class="item _button" @click="more" v-click-anime>
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
</component>
|
||||
</template>
|
||||
<div class="divider"></div>
|
||||
<MkA v-if="$i.isAdmin || $i.isModerator" class="item" active-class="active" to="/instance" :behavior="settingsWindowed ? 'modalWindow' : null" v-click-anime>
|
||||
<MkA v-if="$i.isAdmin || $i.isModerator" class="item" active-class="active" to="/admin" :behavior="settingsWindowed ? 'modalWindow' : null" v-click-anime>
|
||||
<i class="fas fa-server fa-fw"></i><span class="text">{{ $ts.instance }}</span>
|
||||
</MkA>
|
||||
<button class="item _button" @click="more" v-click-anime>
|
||||
|
|
|
@ -8,7 +8,6 @@ import { entities as charts } from '@/services/chart/entities';
|
|||
import { dbLogger } from './logger';
|
||||
import * as highlight from 'cli-highlight';
|
||||
|
||||
import { Log } from '@/models/entities/log';
|
||||
import { User } from '@/models/entities/user';
|
||||
import { DriveFile } from '@/models/entities/drive-file';
|
||||
import { DriveFolder } from '@/models/entities/drive-folder';
|
||||
|
@ -144,7 +143,6 @@ export const entities = [
|
|||
PageLike,
|
||||
GalleryPost,
|
||||
GalleryLike,
|
||||
Log,
|
||||
DriveFile,
|
||||
DriveFolder,
|
||||
Poll,
|
||||
|
|
54
src/docs/ar-SA/advanced/share-page.md
Normal file
54
src/docs/ar-SA/advanced/share-page.md
Normal file
|
@ -0,0 +1,54 @@
|
|||
# シェアページ
|
||||
`/share`を開くと、共有用の投稿フォームを開くことができます。 ここではシェアページで利用できるクエリ文字列の一覧を示します。
|
||||
|
||||
## クエリ文字列一覧
|
||||
### 文字
|
||||
|
||||
<dl>
|
||||
<dt>title</dt>
|
||||
<dd>タイトルです。本文の先頭に[ … ]と挿入されます。</dd>
|
||||
<dt>text</dt>
|
||||
<dd>本文です。</dd>
|
||||
<dt>url</dt>
|
||||
<dd>URLです。末尾に挿入されます。</dd>
|
||||
</dl>
|
||||
|
||||
### リプライ情報
|
||||
以下のいずれか
|
||||
|
||||
<dl>
|
||||
<dt>replyId</dt>
|
||||
<dd>リプライ先のノートid</dd>
|
||||
<dt>replyUri</dt>
|
||||
<dd>リプライ先のUrl(リモートのノートオブジェクトを指定)</dd>
|
||||
</dl>
|
||||
|
||||
### Renote情報
|
||||
以下のいずれか
|
||||
|
||||
<dl>
|
||||
<dt>renoteId</dt>
|
||||
<dd>Renote先のノートid</dd>
|
||||
<dt>renoteUri</dt>
|
||||
<dd>Renote先のUrl(リモートのノートオブジェクトを指定)</dd>
|
||||
</dl>
|
||||
|
||||
### 公開範囲
|
||||
※specifiedに相当する値はvisibility=specifiedとvisibleAccts/visibleUserIdsで指定する
|
||||
|
||||
<dl>
|
||||
<dt>visibility</dt>
|
||||
<dd>公開範囲 ['public' | 'home' | 'followers' | 'specified']</dd>
|
||||
<dt>localOnly</dt>
|
||||
<dd>0(false) or 1(true)</dd>
|
||||
<dt>visibleUserIds</dt>
|
||||
<dd>specified時のダイレクト先のユーザーid カンマ区切りで</dd>
|
||||
<dt>visibleAccts</dt>
|
||||
<dd>specified時のダイレクト先のacct(@?username[@host]) カンマ区切りで</dd>
|
||||
</dl>
|
||||
|
||||
### الملفات
|
||||
<dl>
|
||||
<dt>fileIds</dt>
|
||||
<dd>添付したいファイルのid(カンマ区切りで)</dd>
|
||||
</dl>
|
|
@ -13,10 +13,10 @@
|
|||
## الشامل
|
||||
全てのローカルユーザーの「ホーム」指定されていない投稿と、サーバーに届いた全てのリモートユーザーの「ホーム」指定されていない投稿が流れます。GTLと略されます。
|
||||
|
||||
## 比較
|
||||
## مقارنة
|
||||
| ソース | | | الخيط الزمني | | |
|
||||
| ------------ | ---------- | ------- | ------------ | --------- | ------ |
|
||||
| المستخدمون | 公開範囲 | الرئيسي | المحلي | الاجتماعي | الشامل |
|
||||
| المستخدمون | الظهور | الرئيسي | المحلي | الاجتماعي | الشامل |
|
||||
| ローカル (フォロー) | 公開 | ✔ | ✔ | ✔ | ✔ |
|
||||
| | الرئيسي | ✔ | | ✔ | |
|
||||
| | المتابِعين | ✔ | ✔ | ✔ | ✔ |
|
||||
|
|
54
src/docs/cs-CZ/advanced/share-page.md
Normal file
54
src/docs/cs-CZ/advanced/share-page.md
Normal file
|
@ -0,0 +1,54 @@
|
|||
# シェアページ
|
||||
`/share`を開くと、共有用の投稿フォームを開くことができます。 ここではシェアページで利用できるクエリ文字列の一覧を示します。
|
||||
|
||||
## クエリ文字列一覧
|
||||
### 文字
|
||||
|
||||
<dl>
|
||||
<dt>title</dt>
|
||||
<dd>タイトルです。本文の先頭に[ … ]と挿入されます。</dd>
|
||||
<dt>text</dt>
|
||||
<dd>本文です。</dd>
|
||||
<dt>url</dt>
|
||||
<dd>URLです。末尾に挿入されます。</dd>
|
||||
</dl>
|
||||
|
||||
### リプライ情報
|
||||
以下のいずれか
|
||||
|
||||
<dl>
|
||||
<dt>replyId</dt>
|
||||
<dd>リプライ先のノートid</dd>
|
||||
<dt>replyUri</dt>
|
||||
<dd>リプライ先のUrl(リモートのノートオブジェクトを指定)</dd>
|
||||
</dl>
|
||||
|
||||
### Renote情報
|
||||
以下のいずれか
|
||||
|
||||
<dl>
|
||||
<dt>renoteId</dt>
|
||||
<dd>Renote先のノートid</dd>
|
||||
<dt>renoteUri</dt>
|
||||
<dd>Renote先のUrl(リモートのノートオブジェクトを指定)</dd>
|
||||
</dl>
|
||||
|
||||
### 公開範囲
|
||||
※specifiedに相当する値はvisibility=specifiedとvisibleAccts/visibleUserIdsで指定する
|
||||
|
||||
<dl>
|
||||
<dt>visibility</dt>
|
||||
<dd>公開範囲 ['public' | 'home' | 'followers' | 'specified']</dd>
|
||||
<dt>localOnly</dt>
|
||||
<dd>0(false) or 1(true)</dd>
|
||||
<dt>visibleUserIds</dt>
|
||||
<dd>specified時のダイレクト先のユーザーid カンマ区切りで</dd>
|
||||
<dt>visibleAccts</dt>
|
||||
<dd>specified時のダイレクト先のacct(@?username[@host]) カンマ区切りで</dd>
|
||||
</dl>
|
||||
|
||||
### Soubor(ů)
|
||||
<dl>
|
||||
<dt>fileIds</dt>
|
||||
<dd>添付したいファイルのid(カンマ区切りで)</dd>
|
||||
</dl>
|
54
src/docs/da-DK/advanced/share-page.md
Normal file
54
src/docs/da-DK/advanced/share-page.md
Normal file
|
@ -0,0 +1,54 @@
|
|||
# シェアページ
|
||||
`/share`を開くと、共有用の投稿フォームを開くことができます。 ここではシェアページで利用できるクエリ文字列の一覧を示します。
|
||||
|
||||
## クエリ文字列一覧
|
||||
### 文字
|
||||
|
||||
<dl>
|
||||
<dt>title</dt>
|
||||
<dd>タイトルです。本文の先頭に[ … ]と挿入されます。</dd>
|
||||
<dt>text</dt>
|
||||
<dd>本文です。</dd>
|
||||
<dt>url</dt>
|
||||
<dd>URLです。末尾に挿入されます。</dd>
|
||||
</dl>
|
||||
|
||||
### リプライ情報
|
||||
以下のいずれか
|
||||
|
||||
<dl>
|
||||
<dt>replyId</dt>
|
||||
<dd>リプライ先のノートid</dd>
|
||||
<dt>replyUri</dt>
|
||||
<dd>リプライ先のUrl(リモートのノートオブジェクトを指定)</dd>
|
||||
</dl>
|
||||
|
||||
### Renote情報
|
||||
以下のいずれか
|
||||
|
||||
<dl>
|
||||
<dt>renoteId</dt>
|
||||
<dd>Renote先のノートid</dd>
|
||||
<dt>renoteUri</dt>
|
||||
<dd>Renote先のUrl(リモートのノートオブジェクトを指定)</dd>
|
||||
</dl>
|
||||
|
||||
### 公開範囲
|
||||
※specifiedに相当する値はvisibility=specifiedとvisibleAccts/visibleUserIdsで指定する
|
||||
|
||||
<dl>
|
||||
<dt>visibility</dt>
|
||||
<dd>公開範囲 ['public' | 'home' | 'followers' | 'specified']</dd>
|
||||
<dt>localOnly</dt>
|
||||
<dd>0(false) or 1(true)</dd>
|
||||
<dt>visibleUserIds</dt>
|
||||
<dd>specified時のダイレクト先のユーザーid カンマ区切りで</dd>
|
||||
<dt>visibleAccts</dt>
|
||||
<dd>specified時のダイレクト先のacct(@?username[@host]) カンマ区切りで</dd>
|
||||
</dl>
|
||||
|
||||
### ファイル
|
||||
<dl>
|
||||
<dt>fileIds</dt>
|
||||
<dd>添付したいファイルのid(カンマ区切りで)</dd>
|
||||
</dl>
|
54
src/docs/de-DE/advanced/share-page.md
Normal file
54
src/docs/de-DE/advanced/share-page.md
Normal file
|
@ -0,0 +1,54 @@
|
|||
# シェアページ
|
||||
`/share`を開くと、共有用の投稿フォームを開くことができます。 ここではシェアページで利用できるクエリ文字列の一覧を示します。
|
||||
|
||||
## クエリ文字列一覧
|
||||
### Text
|
||||
|
||||
<dl>
|
||||
<dt>title</dt>
|
||||
<dd>タイトルです。本文の先頭に[ … ]と挿入されます。</dd>
|
||||
<dt>text</dt>
|
||||
<dd>本文です。</dd>
|
||||
<dt>url</dt>
|
||||
<dd>URLです。末尾に挿入されます。</dd>
|
||||
</dl>
|
||||
|
||||
### リプライ情報
|
||||
以下のいずれか
|
||||
|
||||
<dl>
|
||||
<dt>replyId</dt>
|
||||
<dd>リプライ先のノートid</dd>
|
||||
<dt>replyUri</dt>
|
||||
<dd>リプライ先のUrl(リモートのノートオブジェクトを指定)</dd>
|
||||
</dl>
|
||||
|
||||
### Renote情報
|
||||
以下のいずれか
|
||||
|
||||
<dl>
|
||||
<dt>renoteId</dt>
|
||||
<dd>Renote先のノートid</dd>
|
||||
<dt>renoteUri</dt>
|
||||
<dd>Renote先のUrl(リモートのノートオブジェクトを指定)</dd>
|
||||
</dl>
|
||||
|
||||
### Sichtbarkeit
|
||||
※specifiedに相当する値はvisibility=specifiedとvisibleAccts/visibleUserIdsで指定する
|
||||
|
||||
<dl>
|
||||
<dt>visibility</dt>
|
||||
<dd>公開範囲 ['public' | 'home' | 'followers' | 'specified']</dd>
|
||||
<dt>localOnly</dt>
|
||||
<dd>0(false) or 1(true)</dd>
|
||||
<dt>visibleUserIds</dt>
|
||||
<dd>specified時のダイレクト先のユーザーid カンマ区切りで</dd>
|
||||
<dt>visibleAccts</dt>
|
||||
<dd>specified時のダイレクト先のacct(@?username[@host]) カンマ区切りで</dd>
|
||||
</dl>
|
||||
|
||||
### Dateien
|
||||
<dl>
|
||||
<dt>fileIds</dt>
|
||||
<dd>添付したいファイルのid(カンマ区切りで)</dd>
|
||||
</dl>
|
54
src/docs/en-US/advanced/share-page.md
Normal file
54
src/docs/en-US/advanced/share-page.md
Normal file
|
@ -0,0 +1,54 @@
|
|||
# シェアページ
|
||||
`/share`を開くと、共有用の投稿フォームを開くことができます。 ここではシェアページで利用できるクエリ文字列の一覧を示します。
|
||||
|
||||
## クエリ文字列一覧
|
||||
### Text
|
||||
|
||||
<dl>
|
||||
<dt>title</dt>
|
||||
<dd>タイトルです。本文の先頭に[ … ]と挿入されます。</dd>
|
||||
<dt>text</dt>
|
||||
<dd>本文です。</dd>
|
||||
<dt>url</dt>
|
||||
<dd>URLです。末尾に挿入されます。</dd>
|
||||
</dl>
|
||||
|
||||
### リプライ情報
|
||||
以下のいずれか
|
||||
|
||||
<dl>
|
||||
<dt>replyId</dt>
|
||||
<dd>リプライ先のノートid</dd>
|
||||
<dt>replyUri</dt>
|
||||
<dd>リプライ先のUrl(リモートのノートオブジェクトを指定)</dd>
|
||||
</dl>
|
||||
|
||||
### Renote情報
|
||||
以下のいずれか
|
||||
|
||||
<dl>
|
||||
<dt>renoteId</dt>
|
||||
<dd>Renote先のノートid</dd>
|
||||
<dt>renoteUri</dt>
|
||||
<dd>Renote先のUrl(リモートのノートオブジェクトを指定)</dd>
|
||||
</dl>
|
||||
|
||||
### Visiblility
|
||||
※specifiedに相当する値はvisibility=specifiedとvisibleAccts/visibleUserIdsで指定する
|
||||
|
||||
<dl>
|
||||
<dt>visibility</dt>
|
||||
<dd>公開範囲 ['public' | 'home' | 'followers' | 'specified']</dd>
|
||||
<dt>localOnly</dt>
|
||||
<dd>0(false) or 1(true)</dd>
|
||||
<dt>visibleUserIds</dt>
|
||||
<dd>specified時のダイレクト先のユーザーid カンマ区切りで</dd>
|
||||
<dt>visibleAccts</dt>
|
||||
<dd>specified時のダイレクト先のacct(@?username[@host]) カンマ区切りで</dd>
|
||||
</dl>
|
||||
|
||||
### Files
|
||||
<dl>
|
||||
<dt>fileIds</dt>
|
||||
<dd>添付したいファイルのid(カンマ区切りで)</dd>
|
||||
</dl>
|
|
@ -77,13 +77,13 @@ Content which may include text, images, surveys and others that has been posted
|
|||
Users of Misskey.
|
||||
|
||||
## Moderator
|
||||
Users with the authority to to manage the community of a server by deactivating spam accounts, deleting inappropriate posts etc.
|
||||
Users with the authority to manage the community of a server by deactivating spam accounts, silencing users, deleting inappropriate posts, etc.
|
||||
|
||||
## Remote
|
||||
Used in context of servers separate from your own.Also used as prefix in other words like "Remote user".The opposite of "Local".
|
||||
|
||||
## Federation
|
||||
The act of sharing information created one one's server with other servers.
|
||||
The act of sharing information created on one's server with other servers.
|
||||
|
||||
## Local
|
||||
Used in context of your own server.Also used as prefix in other words like "Local users", "local timeline".The opposite of "Remote".
|
||||
|
|
54
src/docs/eo-UY/advanced/share-page.md
Normal file
54
src/docs/eo-UY/advanced/share-page.md
Normal file
|
@ -0,0 +1,54 @@
|
|||
# シェアページ
|
||||
`/share`を開くと、共有用の投稿フォームを開くことができます。 ここではシェアページで利用できるクエリ文字列の一覧を示します。
|
||||
|
||||
## クエリ文字列一覧
|
||||
### 文字
|
||||
|
||||
<dl>
|
||||
<dt>title</dt>
|
||||
<dd>タイトルです。本文の先頭に[ … ]と挿入されます。</dd>
|
||||
<dt>text</dt>
|
||||
<dd>本文です。</dd>
|
||||
<dt>url</dt>
|
||||
<dd>URLです。末尾に挿入されます。</dd>
|
||||
</dl>
|
||||
|
||||
### リプライ情報
|
||||
以下のいずれか
|
||||
|
||||
<dl>
|
||||
<dt>replyId</dt>
|
||||
<dd>リプライ先のノートid</dd>
|
||||
<dt>replyUri</dt>
|
||||
<dd>リプライ先のUrl(リモートのノートオブジェクトを指定)</dd>
|
||||
</dl>
|
||||
|
||||
### Renote情報
|
||||
以下のいずれか
|
||||
|
||||
<dl>
|
||||
<dt>renoteId</dt>
|
||||
<dd>Renote先のノートid</dd>
|
||||
<dt>renoteUri</dt>
|
||||
<dd>Renote先のUrl(リモートのノートオブジェクトを指定)</dd>
|
||||
</dl>
|
||||
|
||||
### Videbleco
|
||||
※specifiedに相当する値はvisibility=specifiedとvisibleAccts/visibleUserIdsで指定する
|
||||
|
||||
<dl>
|
||||
<dt>visibility</dt>
|
||||
<dd>公開範囲 ['public' | 'home' | 'followers' | 'specified']</dd>
|
||||
<dt>localOnly</dt>
|
||||
<dd>0(false) or 1(true)</dd>
|
||||
<dt>visibleUserIds</dt>
|
||||
<dd>specified時のダイレクト先のユーザーid カンマ区切りで</dd>
|
||||
<dt>visibleAccts</dt>
|
||||
<dd>specified時のダイレクト先のacct(@?username[@host]) カンマ区切りで</dd>
|
||||
</dl>
|
||||
|
||||
### Dosieroj
|
||||
<dl>
|
||||
<dt>fileIds</dt>
|
||||
<dd>添付したいファイルのid(カンマ区切りで)</dd>
|
||||
</dl>
|
|
@ -5,7 +5,7 @@ MFMは、Misskey Flavored Markdownの略で、Misskeyの様々な場所で使用
|
|||
- Teksto de notoj
|
||||
- CW注釈
|
||||
- La nomo de uzantoj
|
||||
- La sinprezento de profiloj
|
||||
- Sinprezento en la profilo de la uzanto
|
||||
|
||||
## Informoj por programistoj
|
||||
MFMのパーサー実装はライブラリとして公開されており、簡単にクライアントにMFMを組み込むことが可能です。
|
||||
|
|
|
@ -22,19 +22,19 @@
|
|||
## Bloki
|
||||
ユーザーをブロックすると、そのユーザーからあなたのコンテンツが見えないようになり、またあなたに対して以下のようなアクションをすることができなくなります。
|
||||
|
||||
- フォローする
|
||||
- ユーザーリストに追加する
|
||||
- 返信する、Renoteする
|
||||
- リアクションする、アンケートに投票する
|
||||
- メッセージを送信する
|
||||
- など
|
||||
- Eksekvi
|
||||
- Aldoni al listo de uzantoj
|
||||
- Respondi aŭ plusendi
|
||||
- Reagi aŭ voĉi
|
||||
- Senti mesaĝon
|
||||
- k.t.p
|
||||
|
||||
また、
|
||||
|
||||
- ブロックする際に既にそのユーザーからフォローされていた場合はフォローが解除されます。
|
||||
- ブロックする際に既にそのユーザーがあなたをユーザーリストに入れていた場合はそのリストからあなたが削除されます。
|
||||
- Se la uzanto jam sekvas vin kiam vi blokas, la uzanto ĉesos sekvi.
|
||||
- Se la uzanto jam aldonis vin al listo de uzantoj kiam vi blokas, oni forigos vin de la listo
|
||||
|
||||
ユーザーをブロックするには、対象のユーザーのユーザーページのメニューを開き、「ブロック」ボタンを押します。
|
||||
Por bloki uzanton klaku la butonon "Bloki" el la menuo de uzula paĝo de specifa uzanto.
|
||||
|
||||
<div class="warn">⚠️ ブロックを行ったこと自体は相手に通知されませんが、フォローを行ったりなどの上記のアクションが行えなくなるので間接的にブロックされていることは分かります。</div>
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@ Notoj estas centraj konceptoj en Misskey kaj enhavoj kiuj konsistas el teksto, b
|
|||
|
||||
## Plusendi noton
|
||||
既にあるノートを引用、もしくはそのノートを新しいノートとして共有する行為、またそれによって作成されたノートをRenoteと呼びます。 自分がフォローしているユーザーの、気に入ったノートを自分のフォロワーに共有したい場合や、過去の自分のノートを再度共有したい場合に使います。 同じノートに対して無制限にRenoteを行うことができますが、あまり連続して使用すると迷惑になる場合もあるので、注意しましょう。
|
||||
<div class="warn">⚠️ Se oni sendas notojn nur al sekvantoj aŭ rekte, iliaj ne estas plusendeblaj.</div>
|
||||
<div class="warn">⚠️ Se vi havigas al via noto videblecon ke nur al sekvantoj aŭ ke rekte, iliaj ne estos plusendeblaj.</div>
|
||||
|
||||
Renoteを削除するには、Renoteの時刻表示の隣にある「...」を押し、「Renote解除」を選択します。
|
||||
|
||||
|
@ -51,4 +51,4 @@ Viaj notoj estos senditaj nur al viaj sekvantoj.La noto aperos sur ĉiuj templin
|
|||
ノートをピン留めすると、ユーザーページに常にそのノートを表示しておくことができます。 ノートのメニューを開き、「ピン留め」を選択してピン留めできます。 複数のノートをピン留めできます。
|
||||
|
||||
## Observi
|
||||
Vi povas ricevi tiuj sciigoj pri reagoj, respondoj, k.t.p al noto kiuj ne apartenas al vi estas ankaŭ ricevebla. Por komenci tion elektu la "Observi" el la menuon kuntekstan de la notoj respektivaj.
|
||||
Per la funkcio Observi vi povas ricevi novajn sciigojn pri reagoj, respondoj, k.t.p al tiu noto kiu ne apartenas al vi. Por observi noton elektu la "Observi" el la menuo kunteksta de la noto respektiva.
|
||||
|
|
|
@ -12,7 +12,7 @@ MisskeyはMastodonのAPIと互換性がないため、一部を除きMastodonク
|
|||
## 他のサーバーのユーザーをフォローするときは?
|
||||
メニューから検索を選び、ユーザー名をホスト込みで入力します。例: `@syuilo@misskey.io`
|
||||
|
||||
## Renoteを削除するには?
|
||||
## "Kiel mi malfari plusendon de noto?"
|
||||
Renoteの時刻表示の隣にある「...」を押し、「Renote解除」を選択します。 Renoteについては[こちら](../features/note)をご確認ください。
|
||||
|
||||
## URLのプレビューを表示させたくない
|
||||
|
|
|
@ -30,8 +30,8 @@
|
|||
## 通知やアンテナ等の点滅が消えない
|
||||
点滅は、未読のコンテンツがあることを示しています。通常点滅が消えない場合は、コンテンツを遡ると未読なコンテンツが残っています。 すべて既読にしたと思われるのに、それでもなお点滅が続く場合(おそらく不具合と思われます)は設定から強制的にすべて既読扱いにすることができます。
|
||||
|
||||
## Renoteができない
|
||||
フォロワー限定のノートはRenoteすることはできません。
|
||||
## Oni ne povas plusendi noton
|
||||
Notoj nur al sekvantoj ne estas plusendeblaj.
|
||||
|
||||
## UI上で特定の要素が表示されない
|
||||
広告ブロッカーを使用しているとそのような不具合が発生することがあります。Misskeyではオフにしてご利用ください。
|
||||
|
|
54
src/docs/es-ES/advanced/share-page.md
Normal file
54
src/docs/es-ES/advanced/share-page.md
Normal file
|
@ -0,0 +1,54 @@
|
|||
# シェアページ
|
||||
`/share`を開くと、共有用の投稿フォームを開くことができます。 ここではシェアページで利用できるクエリ文字列の一覧を示します。
|
||||
|
||||
## クエリ文字列一覧
|
||||
### Texto
|
||||
|
||||
<dl>
|
||||
<dt>title</dt>
|
||||
<dd>タイトルです。本文の先頭に[ … ]と挿入されます。</dd>
|
||||
<dt>text</dt>
|
||||
<dd>本文です。</dd>
|
||||
<dt>url</dt>
|
||||
<dd>URLです。末尾に挿入されます。</dd>
|
||||
</dl>
|
||||
|
||||
### リプライ情報
|
||||
以下のいずれか
|
||||
|
||||
<dl>
|
||||
<dt>replyId</dt>
|
||||
<dd>リプライ先のノートid</dd>
|
||||
<dt>replyUri</dt>
|
||||
<dd>リプライ先のUrl(リモートのノートオブジェクトを指定)</dd>
|
||||
</dl>
|
||||
|
||||
### Renote情報
|
||||
以下のいずれか
|
||||
|
||||
<dl>
|
||||
<dt>renoteId</dt>
|
||||
<dd>Renote先のノートid</dd>
|
||||
<dt>renoteUri</dt>
|
||||
<dd>Renote先のUrl(リモートのノートオブジェクトを指定)</dd>
|
||||
</dl>
|
||||
|
||||
### Visibilidad
|
||||
※specifiedに相当する値はvisibility=specifiedとvisibleAccts/visibleUserIdsで指定する
|
||||
|
||||
<dl>
|
||||
<dt>visibility</dt>
|
||||
<dd>公開範囲 ['public' | 'home' | 'followers' | 'specified']</dd>
|
||||
<dt>localOnly</dt>
|
||||
<dd>0(false) or 1(true)</dd>
|
||||
<dt>visibleUserIds</dt>
|
||||
<dd>specified時のダイレクト先のユーザーid カンマ区切りで</dd>
|
||||
<dt>visibleAccts</dt>
|
||||
<dd>specified時のダイレクト先のacct(@?username[@host]) カンマ区切りで</dd>
|
||||
</dl>
|
||||
|
||||
### Archivos
|
||||
<dl>
|
||||
<dt>fileIds</dt>
|
||||
<dd>添付したいファイルのid(カンマ区切りで)</dd>
|
||||
</dl>
|
|
@ -3,5 +3,5 @@ AiScriptは、Misskeyで使用できるスクリプト言語です。
|
|||
|
||||
<div class="info">ℹ️ AiScript実装はMisskeyとは別リポジトリで、<a href="https://github.com/syuilo/aiscript" target="_blank">オープンソースで公開されています。</a></div>
|
||||
|
||||
## 使い方
|
||||
## Utilisation
|
||||
AiScriptの構文や組み込み関数などのドキュメントは、[こちら](https://github.com/syuilo/aiscript/tree/master/docs)で公開されています。
|
||||
|
|
54
src/docs/fr-FR/advanced/share-page.md
Normal file
54
src/docs/fr-FR/advanced/share-page.md
Normal file
|
@ -0,0 +1,54 @@
|
|||
# シェアページ
|
||||
`/share`を開くと、共有用の投稿フォームを開くことができます。 ここではシェアページで利用できるクエリ文字列の一覧を示します。
|
||||
|
||||
## クエリ文字列一覧
|
||||
### Texte
|
||||
|
||||
<dl>
|
||||
<dt>title</dt>
|
||||
<dd>タイトルです。本文の先頭に[ … ]と挿入されます。</dd>
|
||||
<dt>text</dt>
|
||||
<dd>本文です。</dd>
|
||||
<dt>url</dt>
|
||||
<dd>URLです。末尾に挿入されます。</dd>
|
||||
</dl>
|
||||
|
||||
### リプライ情報
|
||||
以下のいずれか
|
||||
|
||||
<dl>
|
||||
<dt>replyId</dt>
|
||||
<dd>リプライ先のノートid</dd>
|
||||
<dt>replyUri</dt>
|
||||
<dd>リプライ先のUrl(リモートのノートオブジェクトを指定)</dd>
|
||||
</dl>
|
||||
|
||||
### Renote情報
|
||||
以下のいずれか
|
||||
|
||||
<dl>
|
||||
<dt>renoteId</dt>
|
||||
<dd>Renote先のノートid</dd>
|
||||
<dt>renoteUri</dt>
|
||||
<dd>Renote先のUrl(リモートのノートオブジェクトを指定)</dd>
|
||||
</dl>
|
||||
|
||||
### Visibilité
|
||||
※specifiedに相当する値はvisibility=specifiedとvisibleAccts/visibleUserIdsで指定する
|
||||
|
||||
<dl>
|
||||
<dt>visibility</dt>
|
||||
<dd>公開範囲 ['public' | 'home' | 'followers' | 'specified']</dd>
|
||||
<dt>localOnly</dt>
|
||||
<dd>0(false) or 1(true)</dd>
|
||||
<dt>visibleUserIds</dt>
|
||||
<dd>specified時のダイレクト先のユーザーid カンマ区切りで</dd>
|
||||
<dt>visibleAccts</dt>
|
||||
<dd>specified時のダイレクト先のacct(@?username[@host]) カンマ区切りで</dd>
|
||||
</dl>
|
||||
|
||||
### Fichiers
|
||||
<dl>
|
||||
<dt>fileIds</dt>
|
||||
<dd>添付したいファイルのid(カンマ区切りで)</dd>
|
||||
</dl>
|
|
@ -8,7 +8,7 @@ Nom du protocole (procédé technique) utilisé par Misskey pour pouvoir fonctio
|
|||
Langage de programmation qui peut être utilisé sur Misskey. [Voir ici pour plus d'informations.](../advanced/aiscript)
|
||||
|
||||
## API
|
||||
(読み: えーぴーあい) Misskeyのサーバーが公開している、プログラムからMisskeyを扱うためのインターフェース。[Voir ici pour plus d'informations. ](../advanced/api)
|
||||
Interface pour permettre à un programme d'utiliser Misskey, disponible publiquement sur le serveur de Misskey. [Voir ici pour plus d'informations. ](../advanced/api)
|
||||
|
||||
## Bot
|
||||
Anglicisme désignant un compte géré par un programme informatique (vous le trouverez parfois aussi sous le terme de « robot »).
|
||||
|
@ -59,13 +59,13 @@ Désigne les émojis mis à disposition par votre instance. Par opposition, les
|
|||
todo
|
||||
|
||||
## Mettre en sourdine
|
||||
ノートをパブリックな公開範囲で投稿できなくされている状態。モデレーターの判断でユーザーごとに設定されます。[Voir ici pour plus d'informations. ](../features/silence)
|
||||
Désigne le fait de paramétrer un compte pour empêcher ses publications d'être partagées en mode « Public ». Peut être appliqué à des utilisateur·rice·s individuel·le·s à la discrétion des modérateur·rice·s. [Voir ici pour plus d'informations. ](../features/silence)
|
||||
|
||||
## File d’attente
|
||||
アクティビティ配送などを順番に行うためのシステム。
|
||||
Système permettant de distribuer les activités dans un ordre successif.
|
||||
|
||||
## Suspendre
|
||||
アカウントが使用不可に設定されている状態。
|
||||
Désigne le fait de paramétrer un compte pour le rendre inutilisable à son/sa propriétaire.
|
||||
|
||||
## Drive
|
||||
Fonctionnalité vous permettant de gérer les fichiers que vous avez téléversés sur Misskey. [Voir ici pour plus d'informations. ](../features/drive)
|
||||
|
@ -77,13 +77,13 @@ Nom des publications sur Misskey. Leur contenu peut être du texte, mais aussi d
|
|||
Désigne les utilisateur·rice·s de Misskey.
|
||||
|
||||
## Modérateur·rice·s
|
||||
スパムの凍結およびサイレンスや不適切な投稿の削除など、コミュニティ運営に関する権限を持つユーザー。
|
||||
Utilisateur·rice·s chargé·e·s de gérer la communauté d'une instance, ayant autorité pour désactiver les comptes de spam, mettre des utilisateur·rice·s en sourdine, supprimer des publications inappropriées, etc.
|
||||
|
||||
## Distant
|
||||
他サーバーのことを指します。リモートユーザーといったように接頭辞としても使われます。ローカルの逆です。
|
||||
Désigne les autres instances que celle où vous êtes inscrit·e. Peut aussi être utilisé pour qualifier d'autres mots, comme « utilisateur·rice·s distant·e·s ». C'est le contraire de « local ».
|
||||
|
||||
## Fédération
|
||||
サーバー上で作成された情報が他のサーバーに伝わること。
|
||||
Désigne le fait de partager les informations publiées sur un serveur avec les autres serveurs du réseau.
|
||||
|
||||
## Local
|
||||
自サーバーのことを指します。ローカルユーザー、ローカルタイムラインといったように接頭辞としても使われます。リモートの逆です。
|
||||
Désigne l'instance où vous êtes inscrit·e. Peut aussi être utilisé pour qualifier d'autres mots, comme « utilisateur·rice·s locaux·cales » ou « fil local ». C'est le contraire de « distant ».
|
||||
|
|
54
src/docs/ht-HT/advanced/share-page.md
Normal file
54
src/docs/ht-HT/advanced/share-page.md
Normal file
|
@ -0,0 +1,54 @@
|
|||
# シェアページ
|
||||
`/share`を開くと、共有用の投稿フォームを開くことができます。 ここではシェアページで利用できるクエリ文字列の一覧を示します。
|
||||
|
||||
## クエリ文字列一覧
|
||||
### 文字
|
||||
|
||||
<dl>
|
||||
<dt>title</dt>
|
||||
<dd>タイトルです。本文の先頭に[ … ]と挿入されます。</dd>
|
||||
<dt>text</dt>
|
||||
<dd>本文です。</dd>
|
||||
<dt>url</dt>
|
||||
<dd>URLです。末尾に挿入されます。</dd>
|
||||
</dl>
|
||||
|
||||
### リプライ情報
|
||||
以下のいずれか
|
||||
|
||||
<dl>
|
||||
<dt>replyId</dt>
|
||||
<dd>リプライ先のノートid</dd>
|
||||
<dt>replyUri</dt>
|
||||
<dd>リプライ先のUrl(リモートのノートオブジェクトを指定)</dd>
|
||||
</dl>
|
||||
|
||||
### Renote情報
|
||||
以下のいずれか
|
||||
|
||||
<dl>
|
||||
<dt>renoteId</dt>
|
||||
<dd>Renote先のノートid</dd>
|
||||
<dt>renoteUri</dt>
|
||||
<dd>Renote先のUrl(リモートのノートオブジェクトを指定)</dd>
|
||||
</dl>
|
||||
|
||||
### 公開範囲
|
||||
※specifiedに相当する値はvisibility=specifiedとvisibleAccts/visibleUserIdsで指定する
|
||||
|
||||
<dl>
|
||||
<dt>visibility</dt>
|
||||
<dd>公開範囲 ['public' | 'home' | 'followers' | 'specified']</dd>
|
||||
<dt>localOnly</dt>
|
||||
<dd>0(false) or 1(true)</dd>
|
||||
<dt>visibleUserIds</dt>
|
||||
<dd>specified時のダイレクト先のユーザーid カンマ区切りで</dd>
|
||||
<dt>visibleAccts</dt>
|
||||
<dd>specified時のダイレクト先のacct(@?username[@host]) カンマ区切りで</dd>
|
||||
</dl>
|
||||
|
||||
### ファイル
|
||||
<dl>
|
||||
<dt>fileIds</dt>
|
||||
<dd>添付したいファイルのid(カンマ区切りで)</dd>
|
||||
</dl>
|
54
src/docs/id-ID/advanced/share-page.md
Normal file
54
src/docs/id-ID/advanced/share-page.md
Normal file
|
@ -0,0 +1,54 @@
|
|||
# シェアページ
|
||||
`/share`を開くと、共有用の投稿フォームを開くことができます。 ここではシェアページで利用できるクエリ文字列の一覧を示します。
|
||||
|
||||
## クエリ文字列一覧
|
||||
### Teks
|
||||
|
||||
<dl>
|
||||
<dt>title</dt>
|
||||
<dd>タイトルです。本文の先頭に[ … ]と挿入されます。</dd>
|
||||
<dt>text</dt>
|
||||
<dd>本文です。</dd>
|
||||
<dt>url</dt>
|
||||
<dd>URLです。末尾に挿入されます。</dd>
|
||||
</dl>
|
||||
|
||||
### リプライ情報
|
||||
以下のいずれか
|
||||
|
||||
<dl>
|
||||
<dt>replyId</dt>
|
||||
<dd>リプライ先のノートid</dd>
|
||||
<dt>replyUri</dt>
|
||||
<dd>リプライ先のUrl(リモートのノートオブジェクトを指定)</dd>
|
||||
</dl>
|
||||
|
||||
### Renote情報
|
||||
以下のいずれか
|
||||
|
||||
<dl>
|
||||
<dt>renoteId</dt>
|
||||
<dd>Renote先のノートid</dd>
|
||||
<dt>renoteUri</dt>
|
||||
<dd>Renote先のUrl(リモートのノートオブジェクトを指定)</dd>
|
||||
</dl>
|
||||
|
||||
### Visibilitas
|
||||
※specifiedに相当する値はvisibility=specifiedとvisibleAccts/visibleUserIdsで指定する
|
||||
|
||||
<dl>
|
||||
<dt>visibility</dt>
|
||||
<dd>公開範囲 ['public' | 'home' | 'followers' | 'specified']</dd>
|
||||
<dt>localOnly</dt>
|
||||
<dd>0(false) or 1(true)</dd>
|
||||
<dt>visibleUserIds</dt>
|
||||
<dd>specified時のダイレクト先のユーザーid カンマ区切りで</dd>
|
||||
<dt>visibleAccts</dt>
|
||||
<dd>specified時のダイレクト先のacct(@?username[@host]) カンマ区切りで</dd>
|
||||
</dl>
|
||||
|
||||
### Berkas
|
||||
<dl>
|
||||
<dt>fileIds</dt>
|
||||
<dd>添付したいファイルのid(カンマ区切りで)</dd>
|
||||
</dl>
|
54
src/docs/it-IT/advanced/share-page.md
Normal file
54
src/docs/it-IT/advanced/share-page.md
Normal file
|
@ -0,0 +1,54 @@
|
|||
# シェアページ
|
||||
`/share`を開くと、共有用の投稿フォームを開くことができます。 ここではシェアページで利用できるクエリ文字列の一覧を示します。
|
||||
|
||||
## クエリ文字列一覧
|
||||
### Testo
|
||||
|
||||
<dl>
|
||||
<dt>title</dt>
|
||||
<dd>タイトルです。本文の先頭に[ … ]と挿入されます。</dd>
|
||||
<dt>text</dt>
|
||||
<dd>本文です。</dd>
|
||||
<dt>url</dt>
|
||||
<dd>URLです。末尾に挿入されます。</dd>
|
||||
</dl>
|
||||
|
||||
### リプライ情報
|
||||
以下のいずれか
|
||||
|
||||
<dl>
|
||||
<dt>replyId</dt>
|
||||
<dd>リプライ先のノートid</dd>
|
||||
<dt>replyUri</dt>
|
||||
<dd>リプライ先のUrl(リモートのノートオブジェクトを指定)</dd>
|
||||
</dl>
|
||||
|
||||
### Renote情報
|
||||
以下のいずれか
|
||||
|
||||
<dl>
|
||||
<dt>renoteId</dt>
|
||||
<dd>Renote先のノートid</dd>
|
||||
<dt>renoteUri</dt>
|
||||
<dd>Renote先のUrl(リモートのノートオブジェクトを指定)</dd>
|
||||
</dl>
|
||||
|
||||
### Visibilità
|
||||
※specifiedに相当する値はvisibility=specifiedとvisibleAccts/visibleUserIdsで指定する
|
||||
|
||||
<dl>
|
||||
<dt>visibility</dt>
|
||||
<dd>公開範囲 ['public' | 'home' | 'followers' | 'specified']</dd>
|
||||
<dt>localOnly</dt>
|
||||
<dd>0(false) or 1(true)</dd>
|
||||
<dt>visibleUserIds</dt>
|
||||
<dd>specified時のダイレクト先のユーザーid カンマ区切りで</dd>
|
||||
<dt>visibleAccts</dt>
|
||||
<dd>specified時のダイレクト先のacct(@?username[@host]) カンマ区切りで</dd>
|
||||
</dl>
|
||||
|
||||
### Allegati
|
||||
<dl>
|
||||
<dt>fileIds</dt>
|
||||
<dd>添付したいファイルのid(カンマ区切りで)</dd>
|
||||
</dl>
|
54
src/docs/ja-KS/advanced/share-page.md
Normal file
54
src/docs/ja-KS/advanced/share-page.md
Normal file
|
@ -0,0 +1,54 @@
|
|||
# シェアページ
|
||||
`/share`を開くと、共有用の投稿フォームを開くことができます。 ここではシェアページで利用できるクエリ文字列の一覧を示します。
|
||||
|
||||
## クエリ文字列一覧
|
||||
### 文字
|
||||
|
||||
<dl>
|
||||
<dt>title</dt>
|
||||
<dd>タイトルです。本文の先頭に[ … ]と挿入されます。</dd>
|
||||
<dt>text</dt>
|
||||
<dd>本文です。</dd>
|
||||
<dt>url</dt>
|
||||
<dd>URLです。末尾に挿入されます。</dd>
|
||||
</dl>
|
||||
|
||||
### リプライ情報
|
||||
以下のいずれか
|
||||
|
||||
<dl>
|
||||
<dt>replyId</dt>
|
||||
<dd>リプライ先のノートid</dd>
|
||||
<dt>replyUri</dt>
|
||||
<dd>リプライ先のUrl(リモートのノートオブジェクトを指定)</dd>
|
||||
</dl>
|
||||
|
||||
### Renote情報
|
||||
以下のいずれか
|
||||
|
||||
<dl>
|
||||
<dt>renoteId</dt>
|
||||
<dd>Renote先のノートid</dd>
|
||||
<dt>renoteUri</dt>
|
||||
<dd>Renote先のUrl(リモートのノートオブジェクトを指定)</dd>
|
||||
</dl>
|
||||
|
||||
### 公開範囲
|
||||
※specifiedに相当する値はvisibility=specifiedとvisibleAccts/visibleUserIdsで指定する
|
||||
|
||||
<dl>
|
||||
<dt>visibility</dt>
|
||||
<dd>公開範囲 ['public' | 'home' | 'followers' | 'specified']</dd>
|
||||
<dt>localOnly</dt>
|
||||
<dd>0(false) or 1(true)</dd>
|
||||
<dt>visibleUserIds</dt>
|
||||
<dd>specified時のダイレクト先のユーザーid カンマ区切りで</dd>
|
||||
<dt>visibleAccts</dt>
|
||||
<dd>specified時のダイレクト先のacct(@?username[@host]) カンマ区切りで</dd>
|
||||
</dl>
|
||||
|
||||
### ファイル
|
||||
<dl>
|
||||
<dt>fileIds</dt>
|
||||
<dd>添付したいファイルのid(カンマ区切りで)</dd>
|
||||
</dl>
|
54
src/docs/jbo-EN/advanced/share-page.md
Normal file
54
src/docs/jbo-EN/advanced/share-page.md
Normal file
|
@ -0,0 +1,54 @@
|
|||
# シェアページ
|
||||
`/share`を開くと、共有用の投稿フォームを開くことができます。 ここではシェアページで利用できるクエリ文字列の一覧を示します。
|
||||
|
||||
## クエリ文字列一覧
|
||||
### 文字
|
||||
|
||||
<dl>
|
||||
<dt>title</dt>
|
||||
<dd>タイトルです。本文の先頭に[ … ]と挿入されます。</dd>
|
||||
<dt>text</dt>
|
||||
<dd>本文です。</dd>
|
||||
<dt>url</dt>
|
||||
<dd>URLです。末尾に挿入されます。</dd>
|
||||
</dl>
|
||||
|
||||
### リプライ情報
|
||||
以下のいずれか
|
||||
|
||||
<dl>
|
||||
<dt>replyId</dt>
|
||||
<dd>リプライ先のノートid</dd>
|
||||
<dt>replyUri</dt>
|
||||
<dd>リプライ先のUrl(リモートのノートオブジェクトを指定)</dd>
|
||||
</dl>
|
||||
|
||||
### Renote情報
|
||||
以下のいずれか
|
||||
|
||||
<dl>
|
||||
<dt>renoteId</dt>
|
||||
<dd>Renote先のノートid</dd>
|
||||
<dt>renoteUri</dt>
|
||||
<dd>Renote先のUrl(リモートのノートオブジェクトを指定)</dd>
|
||||
</dl>
|
||||
|
||||
### 公開範囲
|
||||
※specifiedに相当する値はvisibility=specifiedとvisibleAccts/visibleUserIdsで指定する
|
||||
|
||||
<dl>
|
||||
<dt>visibility</dt>
|
||||
<dd>公開範囲 ['public' | 'home' | 'followers' | 'specified']</dd>
|
||||
<dt>localOnly</dt>
|
||||
<dd>0(false) or 1(true)</dd>
|
||||
<dt>visibleUserIds</dt>
|
||||
<dd>specified時のダイレクト先のユーザーid カンマ区切りで</dd>
|
||||
<dt>visibleAccts</dt>
|
||||
<dd>specified時のダイレクト先のacct(@?username[@host]) カンマ区切りで</dd>
|
||||
</dl>
|
||||
|
||||
### ファイル
|
||||
<dl>
|
||||
<dt>fileIds</dt>
|
||||
<dd>添付したいファイルのid(カンマ区切りで)</dd>
|
||||
</dl>
|
54
src/docs/kab-KAB/advanced/share-page.md
Normal file
54
src/docs/kab-KAB/advanced/share-page.md
Normal file
|
@ -0,0 +1,54 @@
|
|||
# シェアページ
|
||||
`/share`を開くと、共有用の投稿フォームを開くことができます。 ここではシェアページで利用できるクエリ文字列の一覧を示します。
|
||||
|
||||
## クエリ文字列一覧
|
||||
### 文字
|
||||
|
||||
<dl>
|
||||
<dt>title</dt>
|
||||
<dd>タイトルです。本文の先頭に[ … ]と挿入されます。</dd>
|
||||
<dt>text</dt>
|
||||
<dd>本文です。</dd>
|
||||
<dt>url</dt>
|
||||
<dd>URLです。末尾に挿入されます。</dd>
|
||||
</dl>
|
||||
|
||||
### リプライ情報
|
||||
以下のいずれか
|
||||
|
||||
<dl>
|
||||
<dt>replyId</dt>
|
||||
<dd>リプライ先のノートid</dd>
|
||||
<dt>replyUri</dt>
|
||||
<dd>リプライ先のUrl(リモートのノートオブジェクトを指定)</dd>
|
||||
</dl>
|
||||
|
||||
### Renote情報
|
||||
以下のいずれか
|
||||
|
||||
<dl>
|
||||
<dt>renoteId</dt>
|
||||
<dd>Renote先のノートid</dd>
|
||||
<dt>renoteUri</dt>
|
||||
<dd>Renote先のUrl(リモートのノートオブジェクトを指定)</dd>
|
||||
</dl>
|
||||
|
||||
### 公開範囲
|
||||
※specifiedに相当する値はvisibility=specifiedとvisibleAccts/visibleUserIdsで指定する
|
||||
|
||||
<dl>
|
||||
<dt>visibility</dt>
|
||||
<dd>公開範囲 ['public' | 'home' | 'followers' | 'specified']</dd>
|
||||
<dt>localOnly</dt>
|
||||
<dd>0(false) or 1(true)</dd>
|
||||
<dt>visibleUserIds</dt>
|
||||
<dd>specified時のダイレクト先のユーザーid カンマ区切りで</dd>
|
||||
<dt>visibleAccts</dt>
|
||||
<dd>specified時のダイレクト先のacct(@?username[@host]) カンマ区切りで</dd>
|
||||
</dl>
|
||||
|
||||
### Ifuyla
|
||||
<dl>
|
||||
<dt>fileIds</dt>
|
||||
<dd>添付したいファイルのid(カンマ区切りで)</dd>
|
||||
</dl>
|
54
src/docs/kn-IN/advanced/share-page.md
Normal file
54
src/docs/kn-IN/advanced/share-page.md
Normal file
|
@ -0,0 +1,54 @@
|
|||
# シェアページ
|
||||
`/share`を開くと、共有用の投稿フォームを開くことができます。 ここではシェアページで利用できるクエリ文字列の一覧を示します。
|
||||
|
||||
## クエリ文字列一覧
|
||||
### 文字
|
||||
|
||||
<dl>
|
||||
<dt>title</dt>
|
||||
<dd>タイトルです。本文の先頭に[ … ]と挿入されます。</dd>
|
||||
<dt>text</dt>
|
||||
<dd>本文です。</dd>
|
||||
<dt>url</dt>
|
||||
<dd>URLです。末尾に挿入されます。</dd>
|
||||
</dl>
|
||||
|
||||
### リプライ情報
|
||||
以下のいずれか
|
||||
|
||||
<dl>
|
||||
<dt>replyId</dt>
|
||||
<dd>リプライ先のノートid</dd>
|
||||
<dt>replyUri</dt>
|
||||
<dd>リプライ先のUrl(リモートのノートオブジェクトを指定)</dd>
|
||||
</dl>
|
||||
|
||||
### Renote情報
|
||||
以下のいずれか
|
||||
|
||||
<dl>
|
||||
<dt>renoteId</dt>
|
||||
<dd>Renote先のノートid</dd>
|
||||
<dt>renoteUri</dt>
|
||||
<dd>Renote先のUrl(リモートのノートオブジェクトを指定)</dd>
|
||||
</dl>
|
||||
|
||||
### 公開範囲
|
||||
※specifiedに相当する値はvisibility=specifiedとvisibleAccts/visibleUserIdsで指定する
|
||||
|
||||
<dl>
|
||||
<dt>visibility</dt>
|
||||
<dd>公開範囲 ['public' | 'home' | 'followers' | 'specified']</dd>
|
||||
<dt>localOnly</dt>
|
||||
<dd>0(false) or 1(true)</dd>
|
||||
<dt>visibleUserIds</dt>
|
||||
<dd>specified時のダイレクト先のユーザーid カンマ区切りで</dd>
|
||||
<dt>visibleAccts</dt>
|
||||
<dd>specified時のダイレクト先のacct(@?username[@host]) カンマ区切りで</dd>
|
||||
</dl>
|
||||
|
||||
### ಕಡತಗಳು
|
||||
<dl>
|
||||
<dt>fileIds</dt>
|
||||
<dd>添付したいファイルのid(カンマ区切りで)</dd>
|
||||
</dl>
|
54
src/docs/ko-KR/advanced/share-page.md
Normal file
54
src/docs/ko-KR/advanced/share-page.md
Normal file
|
@ -0,0 +1,54 @@
|
|||
# シェアページ
|
||||
`/share`を開くと、共有用の投稿フォームを開くことができます。 ここではシェアページで利用できるクエリ文字列の一覧を示します。
|
||||
|
||||
## クエリ文字列一覧
|
||||
### 텍스트
|
||||
|
||||
<dl>
|
||||
<dt>title</dt>
|
||||
<dd>タイトルです。本文の先頭に[ … ]と挿入されます。</dd>
|
||||
<dt>text</dt>
|
||||
<dd>本文です。</dd>
|
||||
<dt>url</dt>
|
||||
<dd>URLです。末尾に挿入されます。</dd>
|
||||
</dl>
|
||||
|
||||
### リプライ情報
|
||||
以下のいずれか
|
||||
|
||||
<dl>
|
||||
<dt>replyId</dt>
|
||||
<dd>リプライ先のノートid</dd>
|
||||
<dt>replyUri</dt>
|
||||
<dd>リプライ先のUrl(リモートのノートオブジェクトを指定)</dd>
|
||||
</dl>
|
||||
|
||||
### Renote情報
|
||||
以下のいずれか
|
||||
|
||||
<dl>
|
||||
<dt>renoteId</dt>
|
||||
<dd>Renote先のノートid</dd>
|
||||
<dt>renoteUri</dt>
|
||||
<dd>Renote先のUrl(リモートのノートオブジェクトを指定)</dd>
|
||||
</dl>
|
||||
|
||||
### 공개 범위
|
||||
※specifiedに相当する値はvisibility=specifiedとvisibleAccts/visibleUserIdsで指定する
|
||||
|
||||
<dl>
|
||||
<dt>visibility</dt>
|
||||
<dd>公開範囲 ['public' | 'home' | 'followers' | 'specified']</dd>
|
||||
<dt>localOnly</dt>
|
||||
<dd>0(false) or 1(true)</dd>
|
||||
<dt>visibleUserIds</dt>
|
||||
<dd>specified時のダイレクト先のユーザーid カンマ区切りで</dd>
|
||||
<dt>visibleAccts</dt>
|
||||
<dd>specified時のダイレクト先のacct(@?username[@host]) カンマ区切りで</dd>
|
||||
</dl>
|
||||
|
||||
### 파일
|
||||
<dl>
|
||||
<dt>fileIds</dt>
|
||||
<dd>添付したいファイルのid(カンマ区切りで)</dd>
|
||||
</dl>
|
54
src/docs/nl-NL/advanced/share-page.md
Normal file
54
src/docs/nl-NL/advanced/share-page.md
Normal file
|
@ -0,0 +1,54 @@
|
|||
# シェアページ
|
||||
`/share`を開くと、共有用の投稿フォームを開くことができます。 ここではシェアページで利用できるクエリ文字列の一覧を示します。
|
||||
|
||||
## クエリ文字列一覧
|
||||
### 文字
|
||||
|
||||
<dl>
|
||||
<dt>title</dt>
|
||||
<dd>タイトルです。本文の先頭に[ … ]と挿入されます。</dd>
|
||||
<dt>text</dt>
|
||||
<dd>本文です。</dd>
|
||||
<dt>url</dt>
|
||||
<dd>URLです。末尾に挿入されます。</dd>
|
||||
</dl>
|
||||
|
||||
### リプライ情報
|
||||
以下のいずれか
|
||||
|
||||
<dl>
|
||||
<dt>replyId</dt>
|
||||
<dd>リプライ先のノートid</dd>
|
||||
<dt>replyUri</dt>
|
||||
<dd>リプライ先のUrl(リモートのノートオブジェクトを指定)</dd>
|
||||
</dl>
|
||||
|
||||
### Renote情報
|
||||
以下のいずれか
|
||||
|
||||
<dl>
|
||||
<dt>renoteId</dt>
|
||||
<dd>Renote先のノートid</dd>
|
||||
<dt>renoteUri</dt>
|
||||
<dd>Renote先のUrl(リモートのノートオブジェクトを指定)</dd>
|
||||
</dl>
|
||||
|
||||
### 公開範囲
|
||||
※specifiedに相当する値はvisibility=specifiedとvisibleAccts/visibleUserIdsで指定する
|
||||
|
||||
<dl>
|
||||
<dt>visibility</dt>
|
||||
<dd>公開範囲 ['public' | 'home' | 'followers' | 'specified']</dd>
|
||||
<dt>localOnly</dt>
|
||||
<dd>0(false) or 1(true)</dd>
|
||||
<dt>visibleUserIds</dt>
|
||||
<dd>specified時のダイレクト先のユーザーid カンマ区切りで</dd>
|
||||
<dt>visibleAccts</dt>
|
||||
<dd>specified時のダイレクト先のacct(@?username[@host]) カンマ区切りで</dd>
|
||||
</dl>
|
||||
|
||||
### ファイル
|
||||
<dl>
|
||||
<dt>fileIds</dt>
|
||||
<dd>添付したいファイルのid(カンマ区切りで)</dd>
|
||||
</dl>
|
54
src/docs/no-NO/advanced/share-page.md
Normal file
54
src/docs/no-NO/advanced/share-page.md
Normal file
|
@ -0,0 +1,54 @@
|
|||
# シェアページ
|
||||
`/share`を開くと、共有用の投稿フォームを開くことができます。 ここではシェアページで利用できるクエリ文字列の一覧を示します。
|
||||
|
||||
## クエリ文字列一覧
|
||||
### 文字
|
||||
|
||||
<dl>
|
||||
<dt>title</dt>
|
||||
<dd>タイトルです。本文の先頭に[ … ]と挿入されます。</dd>
|
||||
<dt>text</dt>
|
||||
<dd>本文です。</dd>
|
||||
<dt>url</dt>
|
||||
<dd>URLです。末尾に挿入されます。</dd>
|
||||
</dl>
|
||||
|
||||
### リプライ情報
|
||||
以下のいずれか
|
||||
|
||||
<dl>
|
||||
<dt>replyId</dt>
|
||||
<dd>リプライ先のノートid</dd>
|
||||
<dt>replyUri</dt>
|
||||
<dd>リプライ先のUrl(リモートのノートオブジェクトを指定)</dd>
|
||||
</dl>
|
||||
|
||||
### Renote情報
|
||||
以下のいずれか
|
||||
|
||||
<dl>
|
||||
<dt>renoteId</dt>
|
||||
<dd>Renote先のノートid</dd>
|
||||
<dt>renoteUri</dt>
|
||||
<dd>Renote先のUrl(リモートのノートオブジェクトを指定)</dd>
|
||||
</dl>
|
||||
|
||||
### 公開範囲
|
||||
※specifiedに相当する値はvisibility=specifiedとvisibleAccts/visibleUserIdsで指定する
|
||||
|
||||
<dl>
|
||||
<dt>visibility</dt>
|
||||
<dd>公開範囲 ['public' | 'home' | 'followers' | 'specified']</dd>
|
||||
<dt>localOnly</dt>
|
||||
<dd>0(false) or 1(true)</dd>
|
||||
<dt>visibleUserIds</dt>
|
||||
<dd>specified時のダイレクト先のユーザーid カンマ区切りで</dd>
|
||||
<dt>visibleAccts</dt>
|
||||
<dd>specified時のダイレクト先のacct(@?username[@host]) カンマ区切りで</dd>
|
||||
</dl>
|
||||
|
||||
### ファイル
|
||||
<dl>
|
||||
<dt>fileIds</dt>
|
||||
<dd>添付したいファイルのid(カンマ区切りで)</dd>
|
||||
</dl>
|
54
src/docs/pl-PL/advanced/share-page.md
Normal file
54
src/docs/pl-PL/advanced/share-page.md
Normal file
|
@ -0,0 +1,54 @@
|
|||
# シェアページ
|
||||
`/share`を開くと、共有用の投稿フォームを開くことができます。 ここではシェアページで利用できるクエリ文字列の一覧を示します。
|
||||
|
||||
## クエリ文字列一覧
|
||||
### Tekst
|
||||
|
||||
<dl>
|
||||
<dt>title</dt>
|
||||
<dd>タイトルです。本文の先頭に[ … ]と挿入されます。</dd>
|
||||
<dt>text</dt>
|
||||
<dd>本文です。</dd>
|
||||
<dt>url</dt>
|
||||
<dd>URLです。末尾に挿入されます。</dd>
|
||||
</dl>
|
||||
|
||||
### リプライ情報
|
||||
以下のいずれか
|
||||
|
||||
<dl>
|
||||
<dt>replyId</dt>
|
||||
<dd>リプライ先のノートid</dd>
|
||||
<dt>replyUri</dt>
|
||||
<dd>リプライ先のUrl(リモートのノートオブジェクトを指定)</dd>
|
||||
</dl>
|
||||
|
||||
### Renote情報
|
||||
以下のいずれか
|
||||
|
||||
<dl>
|
||||
<dt>renoteId</dt>
|
||||
<dd>Renote先のノートid</dd>
|
||||
<dt>renoteUri</dt>
|
||||
<dd>Renote先のUrl(リモートのノートオブジェクトを指定)</dd>
|
||||
</dl>
|
||||
|
||||
### Widoczność
|
||||
※specifiedに相当する値はvisibility=specifiedとvisibleAccts/visibleUserIdsで指定する
|
||||
|
||||
<dl>
|
||||
<dt>visibility</dt>
|
||||
<dd>公開範囲 ['public' | 'home' | 'followers' | 'specified']</dd>
|
||||
<dt>localOnly</dt>
|
||||
<dd>0(false) or 1(true)</dd>
|
||||
<dt>visibleUserIds</dt>
|
||||
<dd>specified時のダイレクト先のユーザーid カンマ区切りで</dd>
|
||||
<dt>visibleAccts</dt>
|
||||
<dd>specified時のダイレクト先のacct(@?username[@host]) カンマ区切りで</dd>
|
||||
</dl>
|
||||
|
||||
### Pliki
|
||||
<dl>
|
||||
<dt>fileIds</dt>
|
||||
<dd>添付したいファイルのid(カンマ区切りで)</dd>
|
||||
</dl>
|
54
src/docs/pt-PT/advanced/share-page.md
Normal file
54
src/docs/pt-PT/advanced/share-page.md
Normal file
|
@ -0,0 +1,54 @@
|
|||
# シェアページ
|
||||
`/share`を開くと、共有用の投稿フォームを開くことができます。 ここではシェアページで利用できるクエリ文字列の一覧を示します。
|
||||
|
||||
## クエリ文字列一覧
|
||||
### 文字
|
||||
|
||||
<dl>
|
||||
<dt>title</dt>
|
||||
<dd>タイトルです。本文の先頭に[ … ]と挿入されます。</dd>
|
||||
<dt>text</dt>
|
||||
<dd>本文です。</dd>
|
||||
<dt>url</dt>
|
||||
<dd>URLです。末尾に挿入されます。</dd>
|
||||
</dl>
|
||||
|
||||
### リプライ情報
|
||||
以下のいずれか
|
||||
|
||||
<dl>
|
||||
<dt>replyId</dt>
|
||||
<dd>リプライ先のノートid</dd>
|
||||
<dt>replyUri</dt>
|
||||
<dd>リプライ先のUrl(リモートのノートオブジェクトを指定)</dd>
|
||||
</dl>
|
||||
|
||||
### Renote情報
|
||||
以下のいずれか
|
||||
|
||||
<dl>
|
||||
<dt>renoteId</dt>
|
||||
<dd>Renote先のノートid</dd>
|
||||
<dt>renoteUri</dt>
|
||||
<dd>Renote先のUrl(リモートのノートオブジェクトを指定)</dd>
|
||||
</dl>
|
||||
|
||||
### 公開範囲
|
||||
※specifiedに相当する値はvisibility=specifiedとvisibleAccts/visibleUserIdsで指定する
|
||||
|
||||
<dl>
|
||||
<dt>visibility</dt>
|
||||
<dd>公開範囲 ['public' | 'home' | 'followers' | 'specified']</dd>
|
||||
<dt>localOnly</dt>
|
||||
<dd>0(false) or 1(true)</dd>
|
||||
<dt>visibleUserIds</dt>
|
||||
<dd>specified時のダイレクト先のユーザーid カンマ区切りで</dd>
|
||||
<dt>visibleAccts</dt>
|
||||
<dd>specified時のダイレクト先のacct(@?username[@host]) カンマ区切りで</dd>
|
||||
</dl>
|
||||
|
||||
### ファイル
|
||||
<dl>
|
||||
<dt>fileIds</dt>
|
||||
<dd>添付したいファイルのid(カンマ区切りで)</dd>
|
||||
</dl>
|
54
src/docs/ru-RU/advanced/share-page.md
Normal file
54
src/docs/ru-RU/advanced/share-page.md
Normal file
|
@ -0,0 +1,54 @@
|
|||
# シェアページ
|
||||
`/share`を開くと、共有用の投稿フォームを開くことができます。 ここではシェアページで利用できるクエリ文字列の一覧を示します。
|
||||
|
||||
## クエリ文字列一覧
|
||||
### Текст
|
||||
|
||||
<dl>
|
||||
<dt>title</dt>
|
||||
<dd>タイトルです。本文の先頭に[ … ]と挿入されます。</dd>
|
||||
<dt>text</dt>
|
||||
<dd>本文です。</dd>
|
||||
<dt>url</dt>
|
||||
<dd>URLです。末尾に挿入されます。</dd>
|
||||
</dl>
|
||||
|
||||
### リプライ情報
|
||||
以下のいずれか
|
||||
|
||||
<dl>
|
||||
<dt>replyId</dt>
|
||||
<dd>リプライ先のノートid</dd>
|
||||
<dt>replyUri</dt>
|
||||
<dd>リプライ先のUrl(リモートのノートオブジェクトを指定)</dd>
|
||||
</dl>
|
||||
|
||||
### Renote情報
|
||||
以下のいずれか
|
||||
|
||||
<dl>
|
||||
<dt>renoteId</dt>
|
||||
<dd>Renote先のノートid</dd>
|
||||
<dt>renoteUri</dt>
|
||||
<dd>Renote先のUrl(リモートのノートオブジェクトを指定)</dd>
|
||||
</dl>
|
||||
|
||||
### Видимость
|
||||
※specifiedに相当する値はvisibility=specifiedとvisibleAccts/visibleUserIdsで指定する
|
||||
|
||||
<dl>
|
||||
<dt>visibility</dt>
|
||||
<dd>公開範囲 ['public' | 'home' | 'followers' | 'specified']</dd>
|
||||
<dt>localOnly</dt>
|
||||
<dd>0(false) or 1(true)</dd>
|
||||
<dt>visibleUserIds</dt>
|
||||
<dd>specified時のダイレクト先のユーザーid カンマ区切りで</dd>
|
||||
<dt>visibleAccts</dt>
|
||||
<dd>specified時のダイレクト先のacct(@?username[@host]) カンマ区切りで</dd>
|
||||
</dl>
|
||||
|
||||
### Файлы
|
||||
<dl>
|
||||
<dt>fileIds</dt>
|
||||
<dd>添付したいファイルのid(カンマ区切りで)</dd>
|
||||
</dl>
|
54
src/docs/th-TH/advanced/share-page.md
Normal file
54
src/docs/th-TH/advanced/share-page.md
Normal file
|
@ -0,0 +1,54 @@
|
|||
# シェアページ
|
||||
`/share`を開くと、共有用の投稿フォームを開くことができます。 ここではシェアページで利用できるクエリ文字列の一覧を示します。
|
||||
|
||||
## クエリ文字列一覧
|
||||
### 文字
|
||||
|
||||
<dl>
|
||||
<dt>title</dt>
|
||||
<dd>タイトルです。本文の先頭に[ … ]と挿入されます。</dd>
|
||||
<dt>text</dt>
|
||||
<dd>本文です。</dd>
|
||||
<dt>url</dt>
|
||||
<dd>URLです。末尾に挿入されます。</dd>
|
||||
</dl>
|
||||
|
||||
### リプライ情報
|
||||
以下のいずれか
|
||||
|
||||
<dl>
|
||||
<dt>replyId</dt>
|
||||
<dd>リプライ先のノートid</dd>
|
||||
<dt>replyUri</dt>
|
||||
<dd>リプライ先のUrl(リモートのノートオブジェクトを指定)</dd>
|
||||
</dl>
|
||||
|
||||
### Renote情報
|
||||
以下のいずれか
|
||||
|
||||
<dl>
|
||||
<dt>renoteId</dt>
|
||||
<dd>Renote先のノートid</dd>
|
||||
<dt>renoteUri</dt>
|
||||
<dd>Renote先のUrl(リモートのノートオブジェクトを指定)</dd>
|
||||
</dl>
|
||||
|
||||
### 公開範囲
|
||||
※specifiedに相当する値はvisibility=specifiedとvisibleAccts/visibleUserIdsで指定する
|
||||
|
||||
<dl>
|
||||
<dt>visibility</dt>
|
||||
<dd>公開範囲 ['public' | 'home' | 'followers' | 'specified']</dd>
|
||||
<dt>localOnly</dt>
|
||||
<dd>0(false) or 1(true)</dd>
|
||||
<dt>visibleUserIds</dt>
|
||||
<dd>specified時のダイレクト先のユーザーid カンマ区切りで</dd>
|
||||
<dt>visibleAccts</dt>
|
||||
<dd>specified時のダイレクト先のacct(@?username[@host]) カンマ区切りで</dd>
|
||||
</dl>
|
||||
|
||||
### ファイル
|
||||
<dl>
|
||||
<dt>fileIds</dt>
|
||||
<dd>添付したいファイルのid(カンマ区切りで)</dd>
|
||||
</dl>
|
54
src/docs/ug-CN/advanced/share-page.md
Normal file
54
src/docs/ug-CN/advanced/share-page.md
Normal file
|
@ -0,0 +1,54 @@
|
|||
# シェアページ
|
||||
`/share`を開くと、共有用の投稿フォームを開くことができます。 ここではシェアページで利用できるクエリ文字列の一覧を示します。
|
||||
|
||||
## クエリ文字列一覧
|
||||
### 文字
|
||||
|
||||
<dl>
|
||||
<dt>title</dt>
|
||||
<dd>タイトルです。本文の先頭に[ … ]と挿入されます。</dd>
|
||||
<dt>text</dt>
|
||||
<dd>本文です。</dd>
|
||||
<dt>url</dt>
|
||||
<dd>URLです。末尾に挿入されます。</dd>
|
||||
</dl>
|
||||
|
||||
### リプライ情報
|
||||
以下のいずれか
|
||||
|
||||
<dl>
|
||||
<dt>replyId</dt>
|
||||
<dd>リプライ先のノートid</dd>
|
||||
<dt>replyUri</dt>
|
||||
<dd>リプライ先のUrl(リモートのノートオブジェクトを指定)</dd>
|
||||
</dl>
|
||||
|
||||
### Renote情報
|
||||
以下のいずれか
|
||||
|
||||
<dl>
|
||||
<dt>renoteId</dt>
|
||||
<dd>Renote先のノートid</dd>
|
||||
<dt>renoteUri</dt>
|
||||
<dd>Renote先のUrl(リモートのノートオブジェクトを指定)</dd>
|
||||
</dl>
|
||||
|
||||
### 公開範囲
|
||||
※specifiedに相当する値はvisibility=specifiedとvisibleAccts/visibleUserIdsで指定する
|
||||
|
||||
<dl>
|
||||
<dt>visibility</dt>
|
||||
<dd>公開範囲 ['public' | 'home' | 'followers' | 'specified']</dd>
|
||||
<dt>localOnly</dt>
|
||||
<dd>0(false) or 1(true)</dd>
|
||||
<dt>visibleUserIds</dt>
|
||||
<dd>specified時のダイレクト先のユーザーid カンマ区切りで</dd>
|
||||
<dt>visibleAccts</dt>
|
||||
<dd>specified時のダイレクト先のacct(@?username[@host]) カンマ区切りで</dd>
|
||||
</dl>
|
||||
|
||||
### ファイル
|
||||
<dl>
|
||||
<dt>fileIds</dt>
|
||||
<dd>添付したいファイルのid(カンマ区切りで)</dd>
|
||||
</dl>
|
54
src/docs/uk-UA/advanced/share-page.md
Normal file
54
src/docs/uk-UA/advanced/share-page.md
Normal file
|
@ -0,0 +1,54 @@
|
|||
# シェアページ
|
||||
`/share`を開くと、共有用の投稿フォームを開くことができます。 ここではシェアページで利用できるクエリ文字列の一覧を示します。
|
||||
|
||||
## クエリ文字列一覧
|
||||
### Текст
|
||||
|
||||
<dl>
|
||||
<dt>title</dt>
|
||||
<dd>タイトルです。本文の先頭に[ … ]と挿入されます。</dd>
|
||||
<dt>text</dt>
|
||||
<dd>本文です。</dd>
|
||||
<dt>url</dt>
|
||||
<dd>URLです。末尾に挿入されます。</dd>
|
||||
</dl>
|
||||
|
||||
### リプライ情報
|
||||
以下のいずれか
|
||||
|
||||
<dl>
|
||||
<dt>replyId</dt>
|
||||
<dd>リプライ先のノートid</dd>
|
||||
<dt>replyUri</dt>
|
||||
<dd>リプライ先のUrl(リモートのノートオブジェクトを指定)</dd>
|
||||
</dl>
|
||||
|
||||
### Renote情報
|
||||
以下のいずれか
|
||||
|
||||
<dl>
|
||||
<dt>renoteId</dt>
|
||||
<dd>Renote先のノートid</dd>
|
||||
<dt>renoteUri</dt>
|
||||
<dd>Renote先のUrl(リモートのノートオブジェクトを指定)</dd>
|
||||
</dl>
|
||||
|
||||
### Видимість
|
||||
※specifiedに相当する値はvisibility=specifiedとvisibleAccts/visibleUserIdsで指定する
|
||||
|
||||
<dl>
|
||||
<dt>visibility</dt>
|
||||
<dd>公開範囲 ['public' | 'home' | 'followers' | 'specified']</dd>
|
||||
<dt>localOnly</dt>
|
||||
<dd>0(false) or 1(true)</dd>
|
||||
<dt>visibleUserIds</dt>
|
||||
<dd>specified時のダイレクト先のユーザーid カンマ区切りで</dd>
|
||||
<dt>visibleAccts</dt>
|
||||
<dd>specified時のダイレクト先のacct(@?username[@host]) カンマ区切りで</dd>
|
||||
</dl>
|
||||
|
||||
### Файли
|
||||
<dl>
|
||||
<dt>fileIds</dt>
|
||||
<dd>添付したいファイルのid(カンマ区切りで)</dd>
|
||||
</dl>
|
54
src/docs/zh-CN/advanced/share-page.md
Normal file
54
src/docs/zh-CN/advanced/share-page.md
Normal file
|
@ -0,0 +1,54 @@
|
|||
# 分享页面
|
||||
`/share`を開くと、共有用の投稿フォームを開くことができます。 ここではシェアページで利用できるクエリ文字列の一覧を示します。
|
||||
|
||||
## 查询文本列表
|
||||
### 文本
|
||||
|
||||
<dl>
|
||||
<dt>title</dt>
|
||||
<dd>标题。[ … ]将被插入到文本开头。</dd>
|
||||
<dt>text</dt>
|
||||
<dd>正文。</dd>
|
||||
<dt>url</dt>
|
||||
<dd>URL。它将被插入到末尾。</dd>
|
||||
</dl>
|
||||
|
||||
### リプライ情報
|
||||
以下のいずれか
|
||||
|
||||
<dl>
|
||||
<dt>replyId</dt>
|
||||
<dd>リプライ先のノートid</dd>
|
||||
<dt>replyUri</dt>
|
||||
<dd>リプライ先のUrl(リモートのノートオブジェクトを指定)</dd>
|
||||
</dl>
|
||||
|
||||
### Renote情報
|
||||
以下のいずれか
|
||||
|
||||
<dl>
|
||||
<dt>renoteId</dt>
|
||||
<dd>Renote先のノートid</dd>
|
||||
<dt>renoteUri</dt>
|
||||
<dd>Renote先のUrl(リモートのノートオブジェクトを指定)</dd>
|
||||
</dl>
|
||||
|
||||
### 可见性
|
||||
※specifiedに相当する値はvisibility=specifiedとvisibleAccts/visibleUserIdsで指定する
|
||||
|
||||
<dl>
|
||||
<dt>visibility</dt>
|
||||
<dd>公開範囲 ['public' | 'home' | 'followers' | 'specified']</dd>
|
||||
<dt>localOnly</dt>
|
||||
<dd>0(false) or 1(true)</dd>
|
||||
<dt>visibleUserIds</dt>
|
||||
<dd>specified時のダイレクト先のユーザーid カンマ区切りで</dd>
|
||||
<dt>visibleAccts</dt>
|
||||
<dd>specified時のダイレクト先のacct(@?username[@host]) カンマ区切りで</dd>
|
||||
</dl>
|
||||
|
||||
### 文件
|
||||
<dl>
|
||||
<dt>fileIds</dt>
|
||||
<dd>添付したいファイルのid(カンマ区切りで)</dd>
|
||||
</dl>
|
54
src/docs/zh-TW/advanced/share-page.md
Normal file
54
src/docs/zh-TW/advanced/share-page.md
Normal file
|
@ -0,0 +1,54 @@
|
|||
# シェアページ
|
||||
`/share`を開くと、共有用の投稿フォームを開くことができます。 ここではシェアページで利用できるクエリ文字列の一覧を示します。
|
||||
|
||||
## クエリ文字列一覧
|
||||
### 文本
|
||||
|
||||
<dl>
|
||||
<dt>title</dt>
|
||||
<dd>タイトルです。本文の先頭に[ … ]と挿入されます。</dd>
|
||||
<dt>text</dt>
|
||||
<dd>本文です。</dd>
|
||||
<dt>url</dt>
|
||||
<dd>URLです。末尾に挿入されます。</dd>
|
||||
</dl>
|
||||
|
||||
### リプライ情報
|
||||
以下のいずれか
|
||||
|
||||
<dl>
|
||||
<dt>replyId</dt>
|
||||
<dd>リプライ先のノートid</dd>
|
||||
<dt>replyUri</dt>
|
||||
<dd>リプライ先のUrl(リモートのノートオブジェクトを指定)</dd>
|
||||
</dl>
|
||||
|
||||
### Renote情報
|
||||
以下のいずれか
|
||||
|
||||
<dl>
|
||||
<dt>renoteId</dt>
|
||||
<dd>Renote先のノートid</dd>
|
||||
<dt>renoteUri</dt>
|
||||
<dd>Renote先のUrl(リモートのノートオブジェクトを指定)</dd>
|
||||
</dl>
|
||||
|
||||
### 可見性
|
||||
※specifiedに相当する値はvisibility=specifiedとvisibleAccts/visibleUserIdsで指定する
|
||||
|
||||
<dl>
|
||||
<dt>visibility</dt>
|
||||
<dd>公開範囲 ['public' | 'home' | 'followers' | 'specified']</dd>
|
||||
<dt>localOnly</dt>
|
||||
<dd>0(false) or 1(true)</dd>
|
||||
<dt>visibleUserIds</dt>
|
||||
<dd>specified時のダイレクト先のユーザーid カンマ区切りで</dd>
|
||||
<dt>visibleAccts</dt>
|
||||
<dd>specified時のダイレクト先のacct(@?username[@host]) カンマ区切りで</dd>
|
||||
</dl>
|
||||
|
||||
### 檔案
|
||||
<dl>
|
||||
<dt>fileIds</dt>
|
||||
<dd>添付したいファイルのid(カンマ区切りで)</dd>
|
||||
</dl>
|
|
@ -1,46 +0,0 @@
|
|||
import { Entity, PrimaryColumn, Index, Column } from 'typeorm';
|
||||
import { id } from '../id';
|
||||
|
||||
@Entity()
|
||||
export class Log {
|
||||
@PrimaryColumn(id())
|
||||
public id: string;
|
||||
|
||||
@Index()
|
||||
@Column('timestamp with time zone', {
|
||||
comment: 'The created date of the Log.'
|
||||
})
|
||||
public createdAt: Date;
|
||||
|
||||
@Index()
|
||||
@Column('varchar', {
|
||||
length: 64, array: true, default: '{}'
|
||||
})
|
||||
public domain: string[];
|
||||
|
||||
@Index()
|
||||
@Column('enum', {
|
||||
enum: ['error', 'warning', 'info', 'success', 'debug']
|
||||
})
|
||||
public level: string;
|
||||
|
||||
@Column('varchar', {
|
||||
length: 8
|
||||
})
|
||||
public worker: string;
|
||||
|
||||
@Column('varchar', {
|
||||
length: 128
|
||||
})
|
||||
public machine: string;
|
||||
|
||||
@Column('varchar', {
|
||||
length: 2048
|
||||
})
|
||||
public message: string;
|
||||
|
||||
@Column('jsonb', {
|
||||
default: {}
|
||||
})
|
||||
public data: Record<string, any>;
|
||||
}
|
|
@ -13,7 +13,6 @@ import { UserRepository } from './repositories/user';
|
|||
import { NoteRepository } from './repositories/note';
|
||||
import { DriveFileRepository } from './repositories/drive-file';
|
||||
import { DriveFolderRepository } from './repositories/drive-folder';
|
||||
import { Log } from './entities/log';
|
||||
import { AccessToken } from './entities/access-token';
|
||||
import { UserNotePining } from './entities/user-note-pining';
|
||||
import { SigninRepository } from './repositories/signin';
|
||||
|
@ -108,7 +107,6 @@ export const Signins = getCustomRepository(SigninRepository);
|
|||
export const MessagingMessages = getCustomRepository(MessagingMessageRepository);
|
||||
export const ReversiGames = getCustomRepository(ReversiGameRepository);
|
||||
export const ReversiMatchings = getCustomRepository(ReversiMatchingRepository);
|
||||
export const Logs = getRepository(Log);
|
||||
export const Pages = getCustomRepository(PageRepository);
|
||||
export const PageLikes = getCustomRepository(PageLikeRepository);
|
||||
export const GalleryPosts = getCustomRepository(GalleryPostRepository);
|
||||
|
|
|
@ -1,126 +0,0 @@
|
|||
import $ from 'cafy';
|
||||
import define from '../../define';
|
||||
import { Logs } from '@/models/index';
|
||||
import { Brackets } from 'typeorm';
|
||||
|
||||
export const meta = {
|
||||
tags: ['admin'],
|
||||
|
||||
requireCredential: true as const,
|
||||
requireModerator: true,
|
||||
|
||||
params: {
|
||||
limit: {
|
||||
validator: $.optional.num.range(1, 100),
|
||||
default: 30
|
||||
},
|
||||
|
||||
level: {
|
||||
validator: $.optional.nullable.str,
|
||||
default: null
|
||||
},
|
||||
|
||||
domain: {
|
||||
validator: $.optional.nullable.str,
|
||||
default: null
|
||||
}
|
||||
},
|
||||
|
||||
res: {
|
||||
type: 'array' as const,
|
||||
optional: false as const, nullable: false as const,
|
||||
items: {
|
||||
type: 'object' as const,
|
||||
optional: false as const, nullable: false as const,
|
||||
properties: {
|
||||
id: {
|
||||
type: 'string' as const,
|
||||
optional: false as const, nullable: false as const,
|
||||
format: 'id',
|
||||
example: 'xxxxxxxxxx',
|
||||
},
|
||||
createdAt: {
|
||||
type: 'string' as const,
|
||||
optional: false as const, nullable: false as const,
|
||||
format: 'date-time',
|
||||
},
|
||||
domain: {
|
||||
type: 'array' as const,
|
||||
optional: false as const, nullable: false as const,
|
||||
items: {
|
||||
type: 'string' as const,
|
||||
optional: true as const, nullable: false as const
|
||||
}
|
||||
},
|
||||
level: {
|
||||
type: 'string' as const,
|
||||
optional: false as const, nullable: false as const
|
||||
},
|
||||
worker: {
|
||||
type: 'string' as const,
|
||||
optional: false as const, nullable: false as const
|
||||
},
|
||||
machine: {
|
||||
type: 'string' as const,
|
||||
optional: false as const, nullable: false as const,
|
||||
},
|
||||
message: {
|
||||
type: 'string' as const,
|
||||
optional: false as const, nullable: false as const,
|
||||
},
|
||||
data: {
|
||||
type: 'object' as const,
|
||||
optional: false as const, nullable: false as const
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
export default define(meta, async (ps) => {
|
||||
const query = Logs.createQueryBuilder('log');
|
||||
|
||||
if (ps.level) query.andWhere('log.level = :level', { level: ps.level });
|
||||
|
||||
if (ps.domain) {
|
||||
const whiteDomains = ps.domain.split(' ').filter(x => !x.startsWith('-'));
|
||||
const blackDomains = ps.domain.split(' ').filter(x => x.startsWith('-')).map(x => x.substr(1));
|
||||
|
||||
if (whiteDomains.length > 0) {
|
||||
query.andWhere(new Brackets(qb => {
|
||||
for (const whiteDomain of whiteDomains) {
|
||||
let i = 0;
|
||||
for (const subDomain of whiteDomain.split('.')) {
|
||||
const p = `whiteSubDomain_${subDomain}_${i}`;
|
||||
// SQL is 1 based, so we need '+ 1'
|
||||
qb.orWhere(`log.domain[${i + 1}] = :${p}`, { [p]: subDomain });
|
||||
i++;
|
||||
}
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
if (blackDomains.length > 0) {
|
||||
query.andWhere(new Brackets(qb => {
|
||||
for (const blackDomain of blackDomains) {
|
||||
qb.andWhere(new Brackets(qb => {
|
||||
const subDomains = blackDomain.split('.');
|
||||
let i = 0;
|
||||
for (const subDomain of subDomains) {
|
||||
const p = `blackSubDomain_${subDomain}_${i}`;
|
||||
// 全体で否定できないのでド・モルガンの法則で
|
||||
// !(P && Q) を !P || !Q で表す
|
||||
// SQL is 1 based, so we need '+ 1'
|
||||
qb.orWhere(`log.domain[${i + 1}] != :${p}`, { [p]: subDomain });
|
||||
i++;
|
||||
}
|
||||
}));
|
||||
}
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
const logs = await query.orderBy('log.createdAt', 'DESC').take(ps.limit!).getMany();
|
||||
|
||||
return logs;
|
||||
});
|
|
@ -43,12 +43,6 @@ export const meta = {
|
|||
code: 'ALREADY_BLOCKING',
|
||||
id: '787fed64-acb9-464a-82eb-afbd745b9614'
|
||||
},
|
||||
|
||||
cannotBlockModerator: {
|
||||
message: 'Cannot block a moderator or an admin.',
|
||||
code: 'CANNOT_BLOCK_MODERATOR',
|
||||
id: '8544aaef-89fb-e470-9f6c-385d38b474f5'
|
||||
}
|
||||
},
|
||||
|
||||
res: {
|
||||
|
@ -82,12 +76,7 @@ export default define(meta, async (ps, user) => {
|
|||
throw new ApiError(meta.errors.alreadyBlocking);
|
||||
}
|
||||
|
||||
try {
|
||||
await create(blocker, blockee);
|
||||
} catch (e) {
|
||||
if (e.id === 'e42b7890-5e4d-9d9c-d54b-cf4dd30adfb5') throw new ApiError(meta.errors.cannotBlockModerator);
|
||||
throw e;
|
||||
}
|
||||
await create(blocker, blockee);
|
||||
|
||||
NoteWatchings.delete({
|
||||
userId: blocker.id,
|
||||
|
|
|
@ -12,10 +12,6 @@ import { genId } from '@/misc/gen-id';
|
|||
import { IdentifiableError } from '@/misc/identifiable-error';
|
||||
|
||||
export default async function(blocker: User, blockee: User) {
|
||||
if (blockee.isAdmin || blockee.isModerator) {
|
||||
throw new IdentifiableError('e42b7890-5e4d-9d9c-d54b-cf4dd30adfb5');
|
||||
}
|
||||
|
||||
await Promise.all([
|
||||
cancelRequest(blocker, blockee),
|
||||
cancelRequest(blockee, blocker),
|
||||
|
|
|
@ -1,11 +1,7 @@
|
|||
import * as cluster from 'cluster';
|
||||
import * as os from 'os';
|
||||
import * as chalk from 'chalk';
|
||||
import * as dateformat from 'dateformat';
|
||||
import { envOption } from '../env';
|
||||
import { getRepository } from 'typeorm';
|
||||
import { Log } from '@/models/entities/log';
|
||||
import { genId } from '@/misc/gen-id';
|
||||
import config from '@/config/index';
|
||||
|
||||
import * as SyslogPro from 'syslog-pro';
|
||||
|
@ -95,18 +91,6 @@ export default class Logger {
|
|||
null as never;
|
||||
|
||||
send.bind(this.syslogClient)(message).catch(() => {});
|
||||
} else {
|
||||
const Logs = getRepository(Log);
|
||||
Logs.insert({
|
||||
id: genId(),
|
||||
createdAt: new Date(),
|
||||
machine: os.hostname(),
|
||||
worker: worker.toString(),
|
||||
domain: [this.domain].concat(subDomains).map(d => d.name),
|
||||
level: level,
|
||||
message: message.substr(0, 1000), // 1024を超えるとログが挿入できずエラーになり無限ループする
|
||||
data: data,
|
||||
} as Log).catch(() => {});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue