1
0
mirror of https://github.com/misskey-dev/misskey.git synced 2026-07-11 05:04:53 +02:00

Compare commits

..

52 Commits

Author SHA1 Message Date
syuilo
f8abc8193b 2.18.0 2018-05-27 00:29:31 +09:00
syuilo
e7d1b6ec00 Fix bug 2018-05-27 00:27:46 +09:00
syuilo
83c819a130 #1539 2018-05-27 00:18:44 +09:00
syuilo
d29459fa37 Fix bug 2018-05-26 23:53:22 +09:00
syuilo
100557e975 Fix bug 2018-05-26 23:37:40 +09:00
syuilo
102aaeb390 Darken 2018-05-26 23:34:20 +09:00
syuilo
67b3461c24 Better mention handling 2018-05-26 23:20:52 +09:00
syuilo
5e4a0fd4ec Merge pull request #1652 from l2dy/readme
Update README.md
2018-05-26 22:40:27 +09:00
Zero King
f840d491e5 Update README.md 2018-05-26 11:43:09 +00:00
syuilo
8f175186bc Fix bug 2018-05-26 16:08:57 +09:00
syuilo
ddb413ca52 🎨 2018-05-26 16:05:02 +09:00
syuilo
5415b67baa Fix bug 2018-05-26 16:04:47 +09:00
syuilo
19f6af475a Merge branch 'master' of https://github.com/syuilo/misskey 2018-05-26 13:31:52 +09:00
syuilo
65a3bac543 ✌️ 2018-05-26 13:25:10 +09:00
syuilo
f91a53d893 Update dependencies 🚀 2018-05-26 13:23:58 +09:00
syuilo
f848e3f226 Merge pull request #1650 from syuilo/l10n_master
New Crowdin translations
2018-05-26 12:35:21 +09:00
syuilo
bc94878225 Merge branch 'master' into l10n_master 2018-05-26 12:35:14 +09:00
syuilo
bcf52bb2c3 New translations ja.yml (Portuguese) 2018-05-26 12:33:44 +09:00
syuilo
2c25188f70 New translations ja.yml (Korean) 2018-05-26 12:33:42 +09:00
syuilo
567aeacff5 New translations ja.yml (Polish) 2018-05-26 12:33:40 +09:00
syuilo
4b9168e596 New translations ja.yml (Chinese Simplified) 2018-05-26 12:33:38 +09:00
syuilo
8b79b28916 New translations ja.yml (Italian) 2018-05-26 12:33:36 +09:00
syuilo
45706cc0ef New translations ja.yml (Russian) 2018-05-26 12:33:34 +09:00
syuilo
c1e3f4e68e New translations ja.yml (English) 2018-05-26 12:33:32 +09:00
syuilo
6cbbc97893 New translations ja.yml (Spanish) 2018-05-26 12:33:30 +09:00
syuilo
fa09523821 New translations ja.yml (German) 2018-05-26 12:33:29 +09:00
syuilo
7cb527d9ba New translations ja.yml (French) 2018-05-26 12:33:27 +09:00
syuilo
5320f29fb0 Merge pull request #1649 from l2dy/i18n
i18n
2018-05-26 12:21:52 +09:00
Zero King
7527af4656 i18n 2018-05-26 03:19:49 +00:00
syuilo
6adb92b074 Merge pull request #1648 from syuilo/l10n_master
New Crowdin translations
2018-05-26 11:12:50 +09:00
syuilo
6dc3844682 New translations ja.yml (Polish) 2018-05-26 11:11:18 +09:00
syuilo
bfb16c27ee New translations ja.yml (English) 2018-05-26 11:00:59 +09:00
syuilo
ed1cc0b81c 🎨 2018-05-26 10:59:18 +09:00
syuilo
c66c1c9d2a New translations ja.yml (Portuguese) 2018-05-26 10:51:44 +09:00
syuilo
1748fcf909 New translations ja.yml (Korean) 2018-05-26 10:51:42 +09:00
syuilo
bdac8d58ae New translations ja.yml (Polish) 2018-05-26 10:51:40 +09:00
syuilo
4e21801163 New translations ja.yml (Chinese Simplified) 2018-05-26 10:51:38 +09:00
syuilo
4929687956 New translations ja.yml (Italian) 2018-05-26 10:51:36 +09:00
syuilo
4ba7ad8a4b New translations ja.yml (Russian) 2018-05-26 10:51:34 +09:00
syuilo
800fdaeaef New translations ja.yml (English) 2018-05-26 10:51:32 +09:00
syuilo
08a89a924d New translations ja.yml (Spanish) 2018-05-26 10:51:29 +09:00
syuilo
5b057d2275 New translations ja.yml (German) 2018-05-26 10:51:27 +09:00
syuilo
bdc9bd1345 New translations ja.yml (French) 2018-05-26 10:51:25 +09:00
syuilo
d8dc677906 Fix 2018-05-26 10:51:00 +09:00
syuilo
9c312b0e26 Fix 2018-05-26 10:44:34 +09:00
syuilo
8d28f68e0b Fix 2018-05-26 10:41:50 +09:00
syuilo
317c9308cc Update add-file.ts 2018-05-26 09:57:31 +09:00
syuilo
01cd3de5b3 Merge pull request #1647 from syuilo/l10n_master
New Crowdin translations
2018-05-26 09:54:23 +09:00
syuilo
bc2774093a New translations ja.yml (Polish) 2018-05-25 23:31:57 +09:00
syuilo
afb999187f Merge pull request #1646 from syuilo/l10n_master
New Crowdin translations
2018-05-25 23:28:23 +09:00
syuilo
54d0598d92 New translations ja.yml (Polish) 2018-05-25 23:24:15 +09:00
syuilo
163e60e32e Publish mention event 2018-05-25 22:25:38 +09:00
48 changed files with 406 additions and 279 deletions

View File

@@ -25,7 +25,7 @@ ultimately sophisticated new type of mini-blog based SNS.
* Real time contents
* ActivityPub compatible
and more! You can touch with your own eyes at [misskey.xyz](https://misskey.xyz).
and more! You can see it with your own eyes at [misskey.xyz](https://misskey.xyz).
:package: Create your instance
----------------------------------------------------------------

View File

@@ -151,6 +151,15 @@ common/views/components/twitter-setting.vue:
disconnect: "Trennen"
common/views/components/uploader.vue:
waiting: "Warten"
common/views/components/visibility-chooser.vue:
public: "公開"
home: "ホーム"
home-desc: "ホームタイムラインにのみ公開"
followers: "フォロワー"
followers-desc: "自分のフォロワーにのみ公開"
specified: "ダイレクト"
specified-desc: "指定したユーザーにのみ公開"
private: "非公開"
common/views/widgets/broadcast.vue:
fetching: "Laden"
no-broadcasts: "Keine Broadcasts"
@@ -165,15 +174,6 @@ common/views/widgets/photo-stream.vue:
common/views/widgets/server.vue:
title: "Serverinformationen"
toggle: "Sicht umschalten"
common/views/widgets/visibility-chooser.vue:
public: "公開"
home: "ホーム"
home-desc: "ホームタイムラインにのみ公開"
followers: "フォロワー"
followers-desc: "自分のフォロワーにのみ公開"
specified: "ダイレクト"
specified-desc: "指定したユーザーにのみ公開"
private: "非公開"
desktop/views/components/activity.chart.vue:
total: "Schwarz ... komplett"
notes: "Blau ... Hinweise"
@@ -358,6 +358,8 @@ desktop/views/components/renote-form.vue:
failure: "Weitersagen fehlgeschlagen"
desktop/views/components/renote-form-window.vue:
title: "この投稿をRenoteしますか"
desktop/views/components/settings-window.vue:
settings: "設定"
desktop/views/components/settings.vue:
profile: "プロフィール"
notification: "通知"

View File

@@ -151,6 +151,15 @@ common/views/components/twitter-setting.vue:
disconnect: "Disconnect"
common/views/components/uploader.vue:
waiting: "Waiting"
common/views/components/visibility-chooser.vue:
public: "Public"
home: "Home"
home-desc: "Post to the home timeline only"
followers: "Followers"
followers-desc: "Post to followers only"
specified: "Direct"
specified-desc: "Post to specified users only"
private: "Private"
common/views/widgets/broadcast.vue:
fetching: "Fetching"
no-broadcasts: "No broadcasts"
@@ -165,15 +174,6 @@ common/views/widgets/photo-stream.vue:
common/views/widgets/server.vue:
title: "Server info"
toggle: "Toggle views"
common/views/widgets/visibility-chooser.vue:
public: "Public"
home: "Home"
home-desc: "Post to the home timeline only"
followers: "Followers"
followers-desc: "Post to followers only"
specified: "Direct"
specified-desc: "Post to specified users only"
private: "Private"
desktop/views/components/activity.chart.vue:
total: "Black ... Total"
notes: "Blue ... Notes"
@@ -358,6 +358,8 @@ desktop/views/components/renote-form.vue:
failure: "Failed to Renote"
desktop/views/components/renote-form-window.vue:
title: "Are you sure you want to renote this note?"
desktop/views/components/settings-window.vue:
settings: "Settings"
desktop/views/components/settings.vue:
profile: "Profile"
notification: "Notification"

View File

@@ -151,6 +151,15 @@ common/views/components/twitter-setting.vue:
disconnect: "切断する"
common/views/components/uploader.vue:
waiting: "待機中"
common/views/components/visibility-chooser.vue:
public: "公開"
home: "ホーム"
home-desc: "ホームタイムラインにのみ公開"
followers: "フォロワー"
followers-desc: "自分のフォロワーにのみ公開"
specified: "ダイレクト"
specified-desc: "指定したユーザーにのみ公開"
private: "非公開"
common/views/widgets/broadcast.vue:
fetching: "確認中"
no-broadcasts: "お知らせはありません"
@@ -165,15 +174,6 @@ common/views/widgets/photo-stream.vue:
common/views/widgets/server.vue:
title: "サーバー情報"
toggle: "表示を切り替え"
common/views/widgets/visibility-chooser.vue:
public: "公開"
home: "ホーム"
home-desc: "ホームタイムラインにのみ公開"
followers: "フォロワー"
followers-desc: "自分のフォロワーにのみ公開"
specified: "ダイレクト"
specified-desc: "指定したユーザーにのみ公開"
private: "非公開"
desktop/views/components/activity.chart.vue:
total: "Black ... Total"
notes: "Blue ... Notes"
@@ -358,6 +358,8 @@ desktop/views/components/renote-form.vue:
failure: "Renoteに失敗しました"
desktop/views/components/renote-form-window.vue:
title: "この投稿をRenoteしますか"
desktop/views/components/settings-window.vue:
settings: "設定"
desktop/views/components/settings.vue:
profile: "プロフィール"
notification: "通知"

View File

@@ -151,6 +151,15 @@ common/views/components/twitter-setting.vue:
disconnect: "Deconnecter"
common/views/components/uploader.vue:
waiting: "En attente"
common/views/components/visibility-chooser.vue:
public: "公開"
home: "ホーム"
home-desc: "ホームタイムラインにのみ公開"
followers: "フォロワー"
followers-desc: "自分のフォロワーにのみ公開"
specified: "ダイレクト"
specified-desc: "指定したユーザーにのみ公開"
private: "非公開"
common/views/widgets/broadcast.vue:
fetching: "Récuperation"
no-broadcasts: "No broadcasts"
@@ -165,15 +174,6 @@ common/views/widgets/photo-stream.vue:
common/views/widgets/server.vue:
title: "Info sur le serveur"
toggle: "Afficher les vues"
common/views/widgets/visibility-chooser.vue:
public: "公開"
home: "ホーム"
home-desc: "ホームタイムラインにのみ公開"
followers: "フォロワー"
followers-desc: "自分のフォロワーにのみ公開"
specified: "ダイレクト"
specified-desc: "指定したユーザーにのみ公開"
private: "非公開"
desktop/views/components/activity.chart.vue:
total: "Black ... Total"
notes: "Blue ... Notes"
@@ -358,6 +358,8 @@ desktop/views/components/renote-form.vue:
failure: "La renote a échoué"
desktop/views/components/renote-form-window.vue:
title: "Êtes vous sûr de vouloir renote cette note?"
desktop/views/components/settings-window.vue:
settings: "設定"
desktop/views/components/settings.vue:
profile: "Profil"
notification: "Notification"

View File

@@ -151,6 +151,15 @@ common/views/components/twitter-setting.vue:
disconnect: "切断する"
common/views/components/uploader.vue:
waiting: "待機中"
common/views/components/visibility-chooser.vue:
public: "公開"
home: "ホーム"
home-desc: "ホームタイムラインにのみ公開"
followers: "フォロワー"
followers-desc: "自分のフォロワーにのみ公開"
specified: "ダイレクト"
specified-desc: "指定したユーザーにのみ公開"
private: "非公開"
common/views/widgets/broadcast.vue:
fetching: "確認中"
no-broadcasts: "お知らせはありません"
@@ -165,15 +174,6 @@ common/views/widgets/photo-stream.vue:
common/views/widgets/server.vue:
title: "サーバー情報"
toggle: "表示を切り替え"
common/views/widgets/visibility-chooser.vue:
public: "公開"
home: "ホーム"
home-desc: "ホームタイムラインにのみ公開"
followers: "フォロワー"
followers-desc: "自分のフォロワーにのみ公開"
specified: "ダイレクト"
specified-desc: "指定したユーザーにのみ公開"
private: "非公開"
desktop/views/components/activity.chart.vue:
total: "Black ... Total"
notes: "Blue ... Notes"
@@ -358,6 +358,8 @@ desktop/views/components/renote-form.vue:
failure: "Renoteに失敗しました"
desktop/views/components/renote-form-window.vue:
title: "この投稿をRenoteしますか"
desktop/views/components/settings-window.vue:
settings: "設定"
desktop/views/components/settings.vue:
profile: "プロフィール"
notification: "通知"

View File

@@ -173,6 +173,16 @@ common/views/components/twitter-setting.vue:
common/views/components/uploader.vue:
waiting: "待機中"
common/views/components/visibility-chooser.vue:
public: "公開"
home: "ホーム"
home-desc: "ホームタイムラインにのみ公開"
followers: "フォロワー"
followers-desc: "自分のフォロワーにのみ公開"
specified: "ダイレクト"
specified-desc: "指定したユーザーにのみ公開"
private: "非公開"
common/views/widgets/broadcast.vue:
fetching: "確認中"
no-broadcasts: "お知らせはありません"
@@ -191,16 +201,6 @@ common/views/widgets/server.vue:
title: "サーバー情報"
toggle: "表示を切り替え"
common/views/widgets/visibility-chooser.vue:
public: "公開"
home: "ホーム"
home-desc: "ホームタイムラインにのみ公開"
followers: "フォロワー"
followers-desc: "自分のフォロワーにのみ公開"
specified: "ダイレクト"
specified-desc: "指定したユーザーにのみ公開"
private: "非公開"
desktop/views/components/activity.chart.vue:
total: "Black ... Total"
notes: "Blue ... Notes"
@@ -417,6 +417,9 @@ desktop/views/components/renote-form.vue:
desktop/views/components/renote-form-window.vue:
title: "この投稿をRenoteしますか"
desktop/views/components/settings-window.vue:
settings: "設定"
desktop/views/components/settings.vue:
profile: "プロフィール"
notification: "通知"

View File

@@ -151,6 +151,15 @@ common/views/components/twitter-setting.vue:
disconnect: "切断する"
common/views/components/uploader.vue:
waiting: "待機中"
common/views/components/visibility-chooser.vue:
public: "公開"
home: "ホーム"
home-desc: "ホームタイムラインにのみ公開"
followers: "フォロワー"
followers-desc: "自分のフォロワーにのみ公開"
specified: "ダイレクト"
specified-desc: "指定したユーザーにのみ公開"
private: "非公開"
common/views/widgets/broadcast.vue:
fetching: "確認中"
no-broadcasts: "お知らせはありません"
@@ -165,15 +174,6 @@ common/views/widgets/photo-stream.vue:
common/views/widgets/server.vue:
title: "サーバー情報"
toggle: "表示を切り替え"
common/views/widgets/visibility-chooser.vue:
public: "公開"
home: "ホーム"
home-desc: "ホームタイムラインにのみ公開"
followers: "フォロワー"
followers-desc: "自分のフォロワーにのみ公開"
specified: "ダイレクト"
specified-desc: "指定したユーザーにのみ公開"
private: "非公開"
desktop/views/components/activity.chart.vue:
total: "Black ... Total"
notes: "Blue ... Notes"
@@ -358,6 +358,8 @@ desktop/views/components/renote-form.vue:
failure: "Renoteに失敗しました"
desktop/views/components/renote-form-window.vue:
title: "この投稿をRenoteしますか"
desktop/views/components/settings-window.vue:
settings: "設定"
desktop/views/components/settings.vue:
profile: "プロフィール"
notification: "通知"

View File

@@ -92,7 +92,7 @@ common/views/components/nav.vue:
common/views/components/note-menu.vue:
favorite: "Dodaj do ulubionych"
pin: "Przypnij do profilu"
remote: "投稿元で見る"
remote: "Pokaż oryginał"
common/views/components/poll.vue:
vote-to: "Zagłosuj na '{}'"
vote-count: "{} głosów"
@@ -151,6 +151,15 @@ common/views/components/twitter-setting.vue:
disconnect: "Rozłącz"
common/views/components/uploader.vue:
waiting: "Oczekiwanie"
common/views/components/visibility-chooser.vue:
public: "Publiczny"
home: "Lokalny"
home-desc: "Widoczny tylko na tej instancji"
followers: "Dla śledzących"
followers-desc: "Widoczny tylko dla osób, które Cię śledzą"
specified: "Bezpośredni"
specified-desc: "Tylko dla określonych użytkowników"
private: "Prywatny"
common/views/widgets/broadcast.vue:
fetching: "Sprawdzanie"
no-broadcasts: "Brak transmisji"
@@ -165,15 +174,6 @@ common/views/widgets/photo-stream.vue:
common/views/widgets/server.vue:
title: "Informacje o serwerze"
toggle: "Przełącz widok"
common/views/widgets/visibility-chooser.vue:
public: "Publiczny"
home: "Lokalny"
home-desc: "Widoczny tylko na tej instancji"
followers: "Dla śledzących"
followers-desc: "Widoczny tylko dla osób, które Cię śledzą"
specified: "Bezpośredni"
specified-desc: "Tylko dla określonych użytkowników"
private: "Prywatny"
desktop/views/components/activity.chart.vue:
total: "Czarny … Łącznie"
notes: "Niebieski … Wpisy"
@@ -235,7 +235,7 @@ desktop/views/components/drive.nav-folder.vue:
desktop/views/components/drive.vue:
search: "Szukaj"
load-more: "Załaduj więcej"
empty-draghover: "ドロップですか?いいですよ、ボクはカワイイですからね"
empty-draghover: "Przeciągnij tutaj!"
empty-drive: "Twój dysk jest pusty"
empty-drive-description: "Możesz wysłać plik klikając prawym przyciskiem myszy i wybierając \"Wyślij plik\" lub przeciągnąć plik i upuścić w tym oknie."
empty-folder: "Ten katalog jest posty"
@@ -304,16 +304,16 @@ desktop/views/components/messaging-window.vue:
desktop/views/components/note-detail.vue:
more: "Załaduj więcej konwersacji"
private: "(ten wpis jest prywatny)"
reposted-by: "{}がRenote"
reposted-by: "Udostępniono przez {}"
location: "Informacje o lokalizacji"
renote: "Przeredaguj"
renote: "Udostępnienie"
add-reaction: "Dodaj reakcję"
desktop/views/components/note-detail.sub.vue:
private: "(ten wpis jest prywatny)"
desktop/views/components/notes.note.vue:
reposted-by: "Udostępniono przez {}"
reply: "Odpowiedz"
renote: "Przeredaguj"
renote: "Udostępnij"
add-reaction: "Dodaj reakcję"
detail: "Pokaż szczegóły"
desktop/views/components/notes.vue:
@@ -328,13 +328,13 @@ desktop/views/components/post-form.vue:
quote-placeholder: "Zacytuj ten wpis…"
note: "Wyślij"
reply: "Odpowiedz"
renote: "Przeredaguj"
renote: "Udostępnienie"
posted: "Opublikowano!"
replied: "Odpowiedziano!"
reposted: "Udostępniono!"
note-failed: "Nie udało się wysłać"
reply-failed: "Nie udało się odpowiedzieć"
renote-failed: "Nie udało się przeredagować"
renote-failed: "Nie udało się udostępnić"
posting: "Wysyłanie"
attach-media-from-local: "Załącz zawartość multimedialną z komputera"
attach-media-from-drive: "Załącz zawartość multimedialną z dysku"
@@ -352,12 +352,14 @@ desktop/views/components/progress-dialog.vue:
desktop/views/components/renote-form.vue:
quote: "Cytuj…"
cancel: "Anuluj"
renote: "Przeredaguj"
renote: "Udostępnij"
reposting: "Udostępnianie…"
success: "Udostępniono!"
failure: "Nie udało się przeredagować"
failure: "Nie udało się udostępnić"
desktop/views/components/renote-form-window.vue:
title: "Czy na pewno chcesz przeredagować ten wpis?"
title: "Czy na pewno chcesz udostępnić ten wpis?"
desktop/views/components/settings-window.vue:
settings: "設定"
desktop/views/components/settings.vue:
profile: "Profil"
notification: "Powiadomienia"
@@ -385,8 +387,8 @@ desktop/views/components/settings.vue:
gradient-window-header: "Używaj gradientów na pasku tytułu okna"
post-form-on-timeline: "Wyświetlaj formularz tworzenia wpisu w górnej części osi czasu"
show-reply-target: "Pokazuj cel odpowiedzi"
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
show-renoted-my-notes: "Renoteされた自分の投稿をタイムラインに表示する"
show-my-renotes: "Pokazuj moje udostępnienia na osi czasu"
show-renoted-my-notes: "Pokazuj udostępnienia moich wpisów na osi czasu"
show-maps: "Automatycznie pokazuj mapę"
show-maps-desc: "Mapa będzie automatycznie rozwijana dla wpisów zawierających informacje o lokalizacji."
sound: "Dźwięk"
@@ -404,11 +406,11 @@ desktop/views/components/settings.vue:
language-desc: "Aby zmiany zostały uwzględnione, odśwież stronę."
cache: "Pamięć podręczna"
clean-cache: "Wyczyść"
cache-warn: "クリーンアップを行うと、ブラウザに記憶されたアカウント情報のキャッシュ、書きかけの投稿・返信・メッセージ、およびその他のデータ(設定情報含む)が削除されます。クリーンアップを行った後はページを再度読み込みする必要があります。"
cache-warn: "Pamięć podręczna informacji o koncie/wpisów/odpowiedzi/wiadomości/ustawień przechowywanych w przeglądarce zostanie usunięta. Będziesz musiał odświeżyć stronę po wyczyszczeniu."
cache-cleared: "Wyczyszczono pamięć podręczną"
cache-cleared-desc: "Proszę odświeżyć stronę."
auto-watch: "投稿の自動ウォッチ"
auto-watch-desc: "リアクションしたり返信したりした投稿に関する通知を自動的に受け取るようにします。"
auto-watch-desc: "Otrzymuj natychmiastowo informacje o wpisach/odpowiedziach/reakcjach."
about: "O Misskey"
operator: "Administrator instancji"
update: "Aktualizacja Misskey"
@@ -475,12 +477,12 @@ desktop/views/components/settings.profile.vue:
description: "Opis"
birthday: "Data urodzenia"
save: "Aktualizuj profil"
is-bot: "このアカウントはBotです"
is-cat: "このアカウントはCatです"
is-bot: "To konto jest prowadzone przez bota"
is-cat: "To konto jest prowadzone przez kota"
desktop/views/components/sub-note-content.vue:
hidden: "(この投稿は非公開です)"
media: "つのメディア"
poll: "投票"
hidden: "(ten wpis jest prywatny)"
media: "zawartość multimedialna"
poll: "Ankiety"
desktop/views/components/taskmanager.vue:
title: "Menedżer zadań"
desktop/views/components/timeline.vue:
@@ -519,16 +521,16 @@ desktop/views/components/users-list.vue:
load-more: "Więcej"
fetching: "Ładowanie…"
desktop/views/components/users-list-item.vue:
followed: "フォローされています"
followed: "Obserwuje Cię"
desktop/views/components/window.vue:
popout: "ポップアウト"
close: "閉じる"
close: "Zamknij"
desktop/views/pages/welcome.vue:
signin: "ログイン"
signup: "新規登録"
signin-button: "やってる"
signup-button: "やる"
timeline: "タイムライン"
signin: "Zaloguj się"
signup: "Zarejestruj się"
signin-button: "Zaloguj się"
signup-button: "Zarejestruj się"
timeline: "Oś czasu"
desktop/views/pages/drive.vue:
title: "Dysk Misskey"
desktop/views/pages/favorites.vue:
@@ -635,7 +637,7 @@ mobile/views/components/notifications.vue:
mobile/views/components/post-form.vue:
submit: "Wyślij"
reply: "Odpowiedz"
renote: "Przeredaguj"
renote: "Udostępnij"
renote-placeholder: "Zacytuj wpis… (nieobowiązkowe)"
reply-placeholder: "Odpowiedź na ten wpis…"
note-placeholder: "Co się dzieje?"
@@ -668,9 +670,9 @@ mobile/views/pages/followers.vue:
mobile/views/pages/following.vue:
following-of: "Śledzeni przez {}"
mobile/views/pages/home.vue:
home: "ホーム"
local: "ローカル"
global: "グローバル"
home: "Strona główna"
local: "Lokalne"
global: "Globalne"
mobile/views/pages/messaging.vue:
messaging: "Wiadomości"
mobile/views/pages/messaging-room.vue:
@@ -691,7 +693,7 @@ mobile/views/pages/settings/settings.profile.vue:
birthday: "Data urodzenia"
avatar: "Awatar"
banner: "Baner"
is-cat: "このアカウントはCatです"
is-cat: "To konto jest prowadzone przez kota"
save: "Aktualizuj profil"
saved: "Pomyślnie zaktualizowano profil"
uploading: "Wysyłanie"
@@ -714,16 +716,16 @@ mobile/views/pages/settings.vue:
circle-icons: "Używaj okrągłych ikon"
timeline: "Oś czasu"
show-reply-target: "Pokazuj cel odpowiedzi"
show-my-renotes: "自分の行ったRenoteを表示する"
show-renoted-my-notes: "Renoteされた自分の投稿を表示する"
show-my-renotes: "Pokazuj moje udostępnienia"
show-renoted-my-notes: "Pokazuj udostępnienia moich wpisów"
post-style: "Styl wpisów"
post-style-standard: "Standardowy"
post-style-smart: "スマート"
behavior: "Zachowanie"
fetch-on-scroll: "Automatycznie ładuj po przeciągnięciu w dół"
disable-via-mobile: "Nie oznaczaj wpisów jako „wysłane z telefonu”"
load-raw-images: "添付された画像を高画質で表示する"
load-remote-media: "リモートサーバーのメディアを表示する"
load-raw-images: "Wyświetlaj załączone zdjęcia w wysokiej jakości"
load-remote-media: "Wyświetlaj zawartość multimedialną ze zdalnych serwerów"
twitter: "Połączenie z Twitterem"
twitter-connect: "Połącz z Twitterem"
twitter-reconnect: "Połącz ponownie"

View File

@@ -151,6 +151,15 @@ common/views/components/twitter-setting.vue:
disconnect: "切断する"
common/views/components/uploader.vue:
waiting: "待機中"
common/views/components/visibility-chooser.vue:
public: "公開"
home: "ホーム"
home-desc: "ホームタイムラインにのみ公開"
followers: "フォロワー"
followers-desc: "自分のフォロワーにのみ公開"
specified: "ダイレクト"
specified-desc: "指定したユーザーにのみ公開"
private: "非公開"
common/views/widgets/broadcast.vue:
fetching: "確認中"
no-broadcasts: "お知らせはありません"
@@ -165,15 +174,6 @@ common/views/widgets/photo-stream.vue:
common/views/widgets/server.vue:
title: "サーバー情報"
toggle: "表示を切り替え"
common/views/widgets/visibility-chooser.vue:
public: "公開"
home: "ホーム"
home-desc: "ホームタイムラインにのみ公開"
followers: "フォロワー"
followers-desc: "自分のフォロワーにのみ公開"
specified: "ダイレクト"
specified-desc: "指定したユーザーにのみ公開"
private: "非公開"
desktop/views/components/activity.chart.vue:
total: "Black ... Total"
notes: "Blue ... Notes"
@@ -358,6 +358,8 @@ desktop/views/components/renote-form.vue:
failure: "Renoteに失敗しました"
desktop/views/components/renote-form-window.vue:
title: "この投稿をRenoteしますか"
desktop/views/components/settings-window.vue:
settings: "設定"
desktop/views/components/settings.vue:
profile: "プロフィール"
notification: "通知"

View File

@@ -151,6 +151,15 @@ common/views/components/twitter-setting.vue:
disconnect: "切断する"
common/views/components/uploader.vue:
waiting: "待機中"
common/views/components/visibility-chooser.vue:
public: "公開"
home: "ホーム"
home-desc: "ホームタイムラインにのみ公開"
followers: "フォロワー"
followers-desc: "自分のフォロワーにのみ公開"
specified: "ダイレクト"
specified-desc: "指定したユーザーにのみ公開"
private: "非公開"
common/views/widgets/broadcast.vue:
fetching: "確認中"
no-broadcasts: "お知らせはありません"
@@ -165,15 +174,6 @@ common/views/widgets/photo-stream.vue:
common/views/widgets/server.vue:
title: "サーバー情報"
toggle: "表示を切り替え"
common/views/widgets/visibility-chooser.vue:
public: "公開"
home: "ホーム"
home-desc: "ホームタイムラインにのみ公開"
followers: "フォロワー"
followers-desc: "自分のフォロワーにのみ公開"
specified: "ダイレクト"
specified-desc: "指定したユーザーにのみ公開"
private: "非公開"
desktop/views/components/activity.chart.vue:
total: "Black ... Total"
notes: "Blue ... Notes"
@@ -358,6 +358,8 @@ desktop/views/components/renote-form.vue:
failure: "Renoteに失敗しました"
desktop/views/components/renote-form-window.vue:
title: "この投稿をRenoteしますか"
desktop/views/components/settings-window.vue:
settings: "設定"
desktop/views/components/settings.vue:
profile: "プロフィール"
notification: "通知"

View File

@@ -151,6 +151,15 @@ common/views/components/twitter-setting.vue:
disconnect: "切断する"
common/views/components/uploader.vue:
waiting: "待機中"
common/views/components/visibility-chooser.vue:
public: "公開"
home: "ホーム"
home-desc: "ホームタイムラインにのみ公開"
followers: "フォロワー"
followers-desc: "自分のフォロワーにのみ公開"
specified: "ダイレクト"
specified-desc: "指定したユーザーにのみ公開"
private: "非公開"
common/views/widgets/broadcast.vue:
fetching: "確認中"
no-broadcasts: "お知らせはありません"
@@ -165,15 +174,6 @@ common/views/widgets/photo-stream.vue:
common/views/widgets/server.vue:
title: "サーバー情報"
toggle: "表示を切り替え"
common/views/widgets/visibility-chooser.vue:
public: "公開"
home: "ホーム"
home-desc: "ホームタイムラインにのみ公開"
followers: "フォロワー"
followers-desc: "自分のフォロワーにのみ公開"
specified: "ダイレクト"
specified-desc: "指定したユーザーにのみ公開"
private: "非公開"
desktop/views/components/activity.chart.vue:
total: "Black ... Total"
notes: "Blue ... Notes"
@@ -358,6 +358,8 @@ desktop/views/components/renote-form.vue:
failure: "Renoteに失敗しました"
desktop/views/components/renote-form-window.vue:
title: "この投稿をRenoteしますか"
desktop/views/components/settings-window.vue:
settings: "設定"
desktop/views/components/settings.vue:
profile: "プロフィール"
notification: "通知"

View File

@@ -1,8 +1,8 @@
{
"name": "misskey",
"author": "syuilo <i@syuilo.com>",
"version": "2.17.0",
"clientVersion": "1.0.5731",
"version": "2.18.0",
"clientVersion": "1.0.5784",
"codename": "nighthike",
"main": "./built/index.js",
"private": true,
@@ -114,7 +114,7 @@
"gulp-cssnano": "2.1.3",
"gulp-htmlmin": "4.0.0",
"gulp-imagemin": "4.1.0",
"gulp-mocha": "5.0.0",
"gulp-mocha": "6.0.0",
"gulp-pug": "4.0.1",
"gulp-rename": "1.2.3",
"gulp-replace": "1.0.0",
@@ -124,17 +124,17 @@
"gulp-typescript": "4.0.2",
"gulp-uglify": "3.0.0",
"gulp-util": "3.0.8",
"hard-source-webpack-plugin": "0.6.9",
"hard-source-webpack-plugin": "0.6.10",
"highlight.js": "9.12.0",
"html-minifier": "3.5.15",
"html-minifier": "3.5.16",
"http-signature": "1.2.0",
"inquirer": "5.2.0",
"is-root": "2.0.0",
"is-url": "1.2.4",
"js-yaml": "3.11.0",
"jsdom": "11.10.0",
"jsdom": "11.11.0",
"koa": "2.5.1",
"koa-bodyparser": "4.2.0",
"koa-bodyparser": "4.2.1",
"koa-compress": "3.0.0",
"koa-favicon": "2.0.1",
"koa-json-body": "5.3.0",
@@ -163,18 +163,18 @@
"object-assign-deep": "0.4.0",
"on-build-webpack": "0.1.0",
"os-utils": "0.0.14",
"parse5": "4.0.0",
"parse5": "5.0.0",
"progress-bar-webpack-plugin": "1.11.0",
"prominence": "0.2.0",
"promise-sequential": "1.1.1",
"pug": "2.0.3",
"punycode": "2.1.0",
"punycode": "2.1.1",
"qrcode": "1.2.0",
"ratelimiter": "3.0.3",
"recaptcha-promise": "0.1.3",
"reconnecting-websocket": "3.2.2",
"redis": "2.8.0",
"request": "2.86.0",
"request": "2.87.0",
"request-promise-native": "1.0.5",
"rimraf": "2.6.2",
"rndstr": "1.0.0",
@@ -193,7 +193,7 @@
"textarea-caret": "3.1.0",
"tmp": "0.0.33",
"ts-loader": "4.3.0",
"ts-node": "6.0.3",
"ts-node": "6.0.4",
"tslint": "5.10.0",
"typescript": "2.8.3",
"typescript-eslint-parser": "15.0.0",
@@ -205,7 +205,7 @@
"vue-cropperjs": "2.2.0",
"vue-js-modal": "1.3.13",
"vue-json-tree-view": "2.1.4",
"vue-loader": "15.1.0",
"vue-loader": "15.2.1",
"vue-material": "^1.0.0-beta-10.2",
"vue-router": "3.0.1",
"vue-template-compiler": "2.5.16",
@@ -214,10 +214,10 @@
"vuex-persistedstate": "^2.5.4",
"web-push": "3.3.1",
"webfinger.js": "2.6.6",
"webpack": "4.8.3",
"webpack-cli": "2.1.3",
"webpack": "4.9.1",
"webpack-cli": "2.1.4",
"websocket": "1.0.26",
"ws": "5.1.1",
"ws": "5.2.0",
"xev": "2.0.0"
}
}

View File

@@ -263,7 +263,7 @@ root(isDark)
padding 16px 8px 8px 8px
text-align center
font-size 0.8em
color rgba(#000, 0.4)
color rgba(isDark ? #fff : #000, 0.4)
[data-fa]
margin-right 4px

View File

@@ -138,6 +138,7 @@ root(isDark)
background isDark ? #282C37 : #fff
border solid 1px rgba(#000, 0.075)
border-radius 6px
overflow hidden
&[data-melt]
background transparent !important
@@ -151,9 +152,12 @@ root(isDark)
line-height 42px
font-size 0.9em
font-weight bold
color #888
color isDark ? #c5ced6 : #888
box-shadow 0 1px rgba(#000, 0.07)
if isDark
background #313543
> [data-fa]
margin-right 4px
@@ -165,13 +169,13 @@ root(isDark)
width 42px
font-size 0.9em
line-height 42px
color #ccc
color isDark ? #9baec8 : #ccc
&:hover
color #aaa
color isDark ? #b2c1d5 : #aaa
&:active
color #999
color isDark ? #b2c1d5 : #999
&:first-of-type
left 0
@@ -194,49 +198,49 @@ root(isDark)
font-size 14px
&.weekday
color #19a2a9
color isDark ? #43d5dc : #19a2a9
&[data-is-donichi]
color #ef95a0
color isDark ? #ff6679 : #ef95a0
&[data-today]
box-shadow 0 0 0 1px #19a2a9 inset
box-shadow 0 0 0 1px isDark ? #43d5dc : #19a2a9 inset
border-radius 6px
&[data-is-donichi]
box-shadow 0 0 0 1px #ef95a0 inset
box-shadow 0 0 0 1px isDark ? #ff6679 : #ef95a0 inset
&.day
cursor pointer
color #777
color isDark ? #c5ced6 : #777
> div
border-radius 6px
&:hover > div
background rgba(#000, 0.025)
background rgba(#000, isDark ? 0.1 : 0.025)
&:active > div
background rgba(#000, 0.05)
background rgba(#000, isDark ? 0.2 : 0.05)
&[data-is-donichi]
color #ef95a0
color isDark ? #ff6679 : #ef95a0
&[data-is-out-of-range]
cursor default
color rgba(#777, 0.5)
color rgba(isDark ? #c5ced6 : #777, 0.5)
&[data-is-donichi]
color rgba(#ef95a0, 0.5)
color rgba(isDark ? #ff6679 : #ef95a0, 0.5)
&[data-selected]
font-weight bold
> div
background rgba(#000, 0.025)
background rgba(#000, isDark ? 0.1 : 0.025)
&:active > div
background rgba(#000, 0.05)
background rgba(#000, isDark ? 0.2 : 0.05)
&[data-today]
> div

View File

@@ -49,6 +49,7 @@ import Vue from 'vue';
import * as XDraggable from 'vuedraggable';
import getKao from '../../../common/scripts/get-kao';
import MkVisibilityChooser from '../../../common/views/components/visibility-chooser.vue';
import parse from '../../../../../text/parse';
export default Vue.extend({
components: {
@@ -110,6 +111,17 @@ export default Vue.extend({
this.text = `@${this.reply.user.username}@${this.reply.user.host} `;
}
if (this.reply && this.reply.text != null) {
const ast = parse(this.reply.text);
ast.filter(t => t.type == 'mention').forEach(x => {
const mention = x.host ? `@${x.username}@${x.host}` : `@${x.username}`;
if (this.text.indexOf(`${mention} `) == -1) {
this.text += `${mention} `;
}
});
}
this.$nextTick(() => {
// 書きかけの投稿を復元
const draft = JSON.parse(localStorage.getItem('drafts') || '{}')[this.draftId];

View File

@@ -1,6 +1,6 @@
<template>
<mk-window ref="window" is-modal width="700px" height="550px" @closed="$destroy">
<span slot="header" :class="$style.header">%fa:cog%設定</span>
<span slot="header" :class="$style.header">%fa:cog%%i18n:@settings%</span>
<mk-settings @done="close"/>
</mk-window>
</template>

View File

@@ -34,7 +34,6 @@ export default Vue.extend({
existMore: false,
connection: null,
connectionId: null,
unreadCount: 0,
date: null
};
},
@@ -76,7 +75,6 @@ export default Vue.extend({
}
document.addEventListener('keydown', this.onKeydown);
document.addEventListener('visibilitychange', this.onVisibilitychange, false);
this.fetch();
},
@@ -90,7 +88,6 @@ export default Vue.extend({
this.stream.dispose(this.connectionId);
document.removeEventListener('keydown', this.onKeydown);
document.removeEventListener('visibilitychange', this.onVisibilitychange);
},
methods: {
@@ -120,12 +117,14 @@ export default Vue.extend({
this.moreFetching = true;
(this as any).api(this.endpoint, {
const promise = (this as any).api(this.endpoint, {
limit: fetchLimit + 1,
untilId: (this.$refs.timeline as any).tail().id,
includeMyRenotes: (this as any).clientSettings.showMyRenotes,
includeRenotedMyNotes: (this as any).clientSettings.showRenotedMyNotes
}).then(notes => {
});
promise.then(notes => {
if (notes.length == fetchLimit + 1) {
notes.pop();
} else {
@@ -134,14 +133,11 @@ export default Vue.extend({
notes.forEach(n => (this.$refs.timeline as any).append(n));
this.moreFetching = false;
});
return promise;
},
onNote(note) {
if (document.hidden && note.userId !== (this as any).os.i.id) {
this.unreadCount++;
document.title = `(${this.unreadCount}) ${getNoteSummary(note)}`;
}
// Prepend a note
(this.$refs.timeline as any).prepend(note);
},
@@ -159,13 +155,6 @@ export default Vue.extend({
this.fetch();
},
onVisibilitychange() {
if (!document.hidden) {
this.unreadCount = 0;
document.title = 'Misskey';
}
},
onKeydown(e) {
if (e.target.tagName != 'INPUT' && e.target.tagName != 'TEXTAREA') {
if (e.which == 84) { // t

View File

@@ -31,8 +31,29 @@ export default Vue.extend({
};
},
watch: {
src() {
this.$store.commit('device/setTl', {
src: this.src,
arg: this.list
});
},
list() {
this.$store.commit('device/setTl', {
src: this.src,
arg: this.list
});
}
},
created() {
if ((this as any).os.i.followingCount == 0) {
if (this.$store.state.device.tl) {
this.src = this.$store.state.device.tl.src;
if (this.src == 'list') {
this.list = this.$store.state.device.tl.arg;
}
} else if ((this as any).os.i.followingCount == 0) {
this.src = 'local';
}
},

View File

@@ -62,13 +62,15 @@ export default Vue.extend({
more() {
this.moreFetching = true;
(this as any).api('notes/user-list-timeline', {
const promise = (this as any).api('notes/user-list-timeline', {
listId: this.list.id,
limit: fetchLimit + 1,
untilId: (this.$refs.timeline as any).tail().id,
includeMyRenotes: (this as any).clientSettings.showMyRenotes,
includeRenotedMyNotes: (this as any).clientSettings.showRenotedMyNotes
}).then(notes => {
});
promise.then(notes => {
if (notes.length == fetchLimit + 1) {
notes.pop();
} else {
@@ -77,6 +79,8 @@ export default Vue.extend({
notes.forEach(n => (this.$refs.timeline as any).append(n));
this.moreFetching = false;
});
return promise;
},
onNote(note) {
// Prepend a note

View File

@@ -7,7 +7,6 @@
<script lang="ts">
import Vue from 'vue';
import Progress from '../../../common/scripts/loading';
import getNoteSummary from '../../../../../renderers/get-note-summary';
export default Vue.extend({
props: {
@@ -16,46 +15,14 @@ export default Vue.extend({
default: 'timeline'
}
},
data() {
return {
connection: null,
connectionId: null,
unreadCount: 0
};
},
mounted() {
document.title = 'Misskey';
this.connection = (this as any).os.stream.getConnection();
this.connectionId = (this as any).os.stream.use();
this.connection.on('note', this.onStreamNote);
document.addEventListener('visibilitychange', this.onVisibilitychange, false);
Progress.start();
},
beforeDestroy() {
this.connection.off('note', this.onStreamNote);
(this as any).os.stream.dispose(this.connectionId);
document.removeEventListener('visibilitychange', this.onVisibilitychange);
},
methods: {
loaded() {
Progress.done();
},
onStreamNote(note) {
if (document.hidden && note.userId != (this as any).os.i.id) {
this.unreadCount++;
document.title = `(${this.unreadCount}) ${getNoteSummary(note)}`;
}
},
onVisibilitychange() {
if (!document.hidden) {
this.unreadCount = 0;
document.title = 'Misskey';
}
}
}
});

View File

@@ -21,6 +21,7 @@ const fetchLimit = 10;
export default Vue.extend({
props: ['user'],
data() {
return {
fetching: true,
@@ -31,19 +32,23 @@ export default Vue.extend({
date: null
};
},
watch: {
mode() {
this.fetch();
}
},
mounted() {
document.addEventListener('keydown', this.onDocumentKeydown);
this.fetch(() => this.$emit('loaded'));
},
beforeDestroy() {
document.removeEventListener('keydown', this.onDocumentKeydown);
},
methods: {
onDocumentKeydown(e) {
if (e.target.tagName !== 'INPUT' && e.target.tagName !== 'TEXTAREA') {
@@ -52,6 +57,7 @@ export default Vue.extend({
}
}
},
fetch(cb?) {
this.fetching = true;
(this.$refs.timeline as any).init(() => new Promise((res, rej) => {
@@ -72,15 +78,19 @@ export default Vue.extend({
}, rej);
}));
},
more() {
this.moreFetching = true;
(this as any).api('users/notes', {
const promise = (this as any).api('users/notes', {
userId: this.user.id,
limit: fetchLimit + 1,
includeReplies: this.mode == 'with-replies',
withMedia: this.mode == 'with-media',
untilId: (this.$refs.timeline as any).tail().id
}).then(notes => {
});
promise.then(notes => {
if (notes.length == fetchLimit + 1) {
notes.pop();
} else {
@@ -89,7 +99,10 @@ export default Vue.extend({
notes.forEach(n => (this.$refs.timeline as any).append(n));
this.moreFetching = false;
});
return promise;
},
warp(date) {
this.date = date;
this.fetch();

View File

@@ -1,9 +1,13 @@
<template>
<div class="mk-note-preview">
<mk-avatar class="avatar" :user="note.user"/>
<div class="mk-note-preview" :class="{ smart: $store.state.device.postStyle == 'smart' }">
<mk-avatar class="avatar" :user="note.user" v-if="$store.state.device.postStyle != 'smart'"/>
<div class="main">
<header>
<mk-avatar class="avatar" :user="note.user" v-if="$store.state.device.postStyle == 'smart'"/>
<router-link class="name" :to="note.user | userPage">{{ note.user | userName }}</router-link>
<span class="is-admin" v-if="note.user.isAdmin">admin</span>
<span class="is-bot" v-if="note.user.isBot">bot</span>
<span class="is-cat" v-if="note.user.isCat">cat</span>
<span class="username"><mk-acct :user="note.user"/></span>
<router-link class="time" :to="note | notePage">
<mk-time :time="note.createdAt"/>
@@ -35,6 +39,13 @@ root(isDark)
display block
clear both
&.smart
> .main
width 100%
> header
align-items center
> .avatar
display block
float left
@@ -50,9 +61,16 @@ root(isDark)
> header
display flex
align-items baseline
margin-bottom 4px
margin-bottom 2px
white-space nowrap
> .avatar
flex-shrink 0
margin-right 8px
width 18px
height 18px
border-radius 100%
> .name
display block
margin 0 .5em 0 0
@@ -65,8 +83,19 @@ root(isDark)
text-decoration none
text-overflow ellipsis
&:hover
text-decoration underline
> .is-admin
> .is-bot
> .is-cat
margin 0 0.5em 0 0
padding 1px 6px
font-size 10px
color isDark ? #758188 : #aaa
border solid 1px isDark ? #57616f : #ddd
border-radius 3px
&.is-admin
border-color isDark ? #d42c41 : #f56a7b
color isDark ? #d42c41 : #f56a7b
> .username
margin 0 .5em 0 0

View File

@@ -386,9 +386,6 @@ root(isDark)
text-decoration none
text-overflow ellipsis
&:hover
text-decoration underline
> .is-admin
> .is-bot
> .is-cat

View File

@@ -49,6 +49,7 @@ import Vue from 'vue';
import * as XDraggable from 'vuedraggable';
import MkVisibilityChooser from '../../../common/views/components/visibility-chooser.vue';
import getKao from '../../../common/scripts/get-kao';
import parse from '../../../../../text/parse';
export default Vue.extend({
components: {
@@ -78,6 +79,17 @@ export default Vue.extend({
this.text = `@${this.reply.user.username}@${this.reply.user.host} `;
}
if (this.reply && this.reply.text != null) {
const ast = parse(this.reply.text);
ast.filter(t => t.type == 'mention').forEach(x => {
const mention = x.host ? `@${x.username}@${x.host}` : `@${x.username}`;
if (this.text.indexOf(`${mention} `) == -1) {
this.text += `${mention} `;
}
});
}
this.$nextTick(() => {
this.focus();
});

View File

@@ -1,9 +1,7 @@
<template>
<div class="mk-user-card">
<header :style="user.bannerUrl ? `background-image: url(${user.bannerUrl}?thumbnail&size=1024)` : ''">
<a :href="user | userPage">
<img :src="`${user.avatarUrl}?thumbnail&size=200`" alt="avatar"/>
</a>
<mk-avatar class="avatar" :user="user"/>
</header>
<a class="name" :href="user | userPage" target="_blank">{{ user | userName }}</a>
<p class="username"><mk-acct :user="user"/></p>
@@ -35,15 +33,14 @@ export default Vue.extend({
background-position center
border-radius 8px 8px 0 0
> a
> img
position absolute
top 20px
left calc(50% - 40px)
width 80px
height 80px
border solid 2px #fff
border-radius 8px
> .avatar
position absolute
top 20px
left calc(50% - 40px)
width 80px
height 80px
border solid 2px #fff
border-radius 8px
> .name
display block

View File

@@ -12,6 +12,7 @@ const fetchLimit = 10;
export default Vue.extend({
props: ['list'],
data() {
return {
fetching: true,
@@ -20,15 +21,25 @@ export default Vue.extend({
connection: null
};
},
computed: {
canFetchMore(): boolean {
return !this.moreFetching && !this.fetching && this.existMore;
}
},
watch: {
$route: 'init'
},
mounted() {
this.init();
},
beforeDestroy() {
this.connection.close();
},
methods: {
init() {
if (this.connection) this.connection.close();
@@ -39,6 +50,7 @@ export default Vue.extend({
this.fetch();
},
fetch() {
this.fetching = true;
@@ -59,16 +71,21 @@ export default Vue.extend({
}, rej);
}));
},
more() {
if (!this.canFetchMore) return;
this.moreFetching = true;
(this as any).api('notes/user-list-timeline', {
const promise = (this as any).api('notes/user-list-timeline', {
listId: this.list.id,
limit: fetchLimit + 1,
untilId: (this.$refs.timeline as any).tail().id,
includeMyRenotes: (this as any).clientSettings.showMyRenotes,
includeRenotedMyNotes: (this as any).clientSettings.showRenotedMyNotes
}).then(notes => {
});
promise.then(notes => {
if (notes.length == fetchLimit + 1) {
notes.pop();
} else {
@@ -77,14 +94,19 @@ export default Vue.extend({
notes.forEach(n => (this.$refs.timeline as any).append(n));
this.moreFetching = false;
});
return promise;
},
onNote(note) {
// Prepend a note
(this.$refs.timeline as any).prepend(note);
},
onUserAdded() {
this.fetch();
},
onUserRemoved() {
this.fetch();
}

View File

@@ -59,12 +59,15 @@ export default Vue.extend({
if (!this.canFetchMore) return;
this.moreFetching = true;
(this as any).api('users/notes', {
const promise = (this as any).api('users/notes', {
userId: this.user.id,
withMedia: this.withMedia,
limit: fetchLimit + 1,
untilId: (this.$refs.timeline as any).tail().id
}).then(notes => {
});
promise.then(notes => {
if (notes.length == fetchLimit + 1) {
notes.pop();
} else {
@@ -73,6 +76,8 @@ export default Vue.extend({
notes.forEach(n => (this.$refs.timeline as any).append(n));
this.moreFetching = false;
});
return promise;
}
}
});

View File

@@ -111,12 +111,14 @@ export default Vue.extend({
this.moreFetching = true;
(this as any).api(this.endpoint, {
const promise = (this as any).api(this.endpoint, {
limit: fetchLimit + 1,
untilId: (this.$refs.timeline as any).tail().id,
includeMyRenotes: (this as any).clientSettings.showMyRenotes,
includeRenotedMyNotes: (this as any).clientSettings.showRenotedMyNotes
}).then(notes => {
});
promise.then(notes => {
if (notes.length == fetchLimit + 1) {
notes.pop();
} else {
@@ -125,6 +127,8 @@ export default Vue.extend({
notes.forEach(n => (this.$refs.timeline as any).append(n));
this.moreFetching = false;
});
return promise;
},
onNote(note) {

View File

@@ -5,7 +5,7 @@
<span v-if="src == 'home'">%fa:home%%i18n:@home%</span>
<span v-if="src == 'local'">%fa:R comments%%i18n:@local%</span>
<span v-if="src == 'global'">%fa:globe%%i18n:@global%</span>
<span v-if="src.startsWith('list')">%fa:list%{{ list.title }}</span>
<span v-if="src == 'list'">%fa:list%{{ list.title }}</span>
</span>
<span style="margin-left:8px">
<template v-if="!showNav">%fa:angle-down%</template>
@@ -26,17 +26,17 @@
<span :data-active="src == 'local'" @click="src = 'local'">%fa:R comments% %i18n:@local%</span>
<span :data-active="src == 'global'" @click="src = 'global'">%fa:globe% %i18n:@global%</span>
<template v-if="lists">
<span v-for="l in lists" :data-active="src == 'list:' + l.id" @click="src = 'list:' + l.id; list = l" :key="l.id">%fa:list% {{ l.title }}</span>
<span v-for="l in lists" :data-active="src == 'list' && list == l" @click="src = 'list'; list = l" :key="l.id">%fa:list% {{ l.title }}</span>
</template>
</div>
</div>
</div>
<div class="tl">
<x-tl v-if="src == 'home'" ref="tl" key="home" src="home" @loaded="onLoaded"/>
<x-tl v-if="src == 'home'" ref="tl" key="home" src="home"/>
<x-tl v-if="src == 'local'" ref="tl" key="local" src="local"/>
<x-tl v-if="src == 'global'" ref="tl" key="global" src="global"/>
<mk-user-list-timeline v-if="src.startsWith('list:')" ref="tl" :key="list.id" :list="list"/>
<mk-user-list-timeline v-if="src == 'list'" ref="tl" :key="list.id" :list="list"/>
</div>
</main>
</mk-ui>
@@ -64,6 +64,20 @@ export default Vue.extend({
watch: {
src() {
this.showNav = false;
this.$store.commit('device/setTl', {
src: this.src,
arg: this.list
});
},
list() {
this.showNav = false;
this.$store.commit('device/setTl', {
src: this.src,
arg: this.list
});
},
showNav(v) {
@@ -76,7 +90,12 @@ export default Vue.extend({
},
created() {
if ((this as any).os.i.followingCount == 0) {
if (this.$store.state.device.tl) {
this.src = this.$store.state.device.tl.src;
if (this.src == 'list') {
this.list = this.$store.state.device.tl.arg;
}
} else if ((this as any).os.i.followingCount == 0) {
this.src = 'local';
}
},
@@ -85,6 +104,10 @@ export default Vue.extend({
document.title = 'Misskey';
Progress.start();
(this.$refs.tl as any).$once('loaded', () => {
Progress.done();
});
},
methods: {
@@ -92,10 +115,6 @@ export default Vue.extend({
(this as any).apis.post();
},
onLoaded() {
Progress.done();
},
warp() {
}

View File

@@ -24,7 +24,7 @@ export default Vue.extend({
const ok = window.confirm('%i18n:@read-all%');
if (!ok) return;
(this as any).api('notifications/markAsRead_all');
(this as any).api('notifications/mark_as_read_all');
},
onFetched() {
Progress.done();

View File

@@ -68,6 +68,13 @@ export default (os: MiOS) => new Vuex.Store({
mutations: {
set(state, x: { key: string; value: any }) {
state[x.key] = x.value;
},
setTl(state, x) {
state.tl = {
src: x.src,
arg: x.arg
};
}
}
},

View File

@@ -1,5 +1,5 @@
import * as mongo from 'mongodb';
import deepcopy = require('deepcopy');
import * as deepcopy from 'deepcopy';
import AccessToken from './access-token';
import db from '../db/mongodb';
import config from '../config';

View File

@@ -1,5 +1,5 @@
import * as mongo from 'mongodb';
import deepcopy = require('deepcopy');
import * as deepcopy from 'deepcopy';
import db from '../db/mongodb';
import { pack as packApp } from './app';

View File

@@ -1,5 +1,5 @@
import * as mongo from 'mongodb';
import deepcopy = require('deepcopy');
import * as deepcopy from 'deepcopy';
import { pack as packFolder } from './drive-folder';
import config from '../config';
import monkDb, { nativeDbConn } from '../db/mongodb';

View File

@@ -1,5 +1,5 @@
import * as mongo from 'mongodb';
import deepcopy = require('deepcopy');
import * as deepcopy from 'deepcopy';
import db from '../db/mongodb';
import DriveFile from './drive-file';

View File

@@ -1,5 +1,5 @@
import * as mongo from 'mongodb';
import deepcopy = require('deepcopy');
import * as deepcopy from 'deepcopy';
import db from '../db/mongodb';
import { pack as packNote } from './note';

View File

@@ -1,5 +1,5 @@
import * as mongo from 'mongodb';
import deepcopy = require('deepcopy');
import * as deepcopy from 'deepcopy';
import { pack as packUser } from './user';
import { pack as packFile } from './drive-file';
import db from '../db/mongodb';

View File

@@ -1,6 +1,6 @@
import * as mongo from 'mongodb';
import $ from 'cafy';
import deepcopy = require('deepcopy');
import * as deepcopy from 'deepcopy';
import db from '../db/mongodb';
import Reaction from './note-reaction';
import { pack as packUser } from './user';

View File

@@ -1,5 +1,5 @@
import * as mongo from 'mongodb';
import deepcopy = require('deepcopy');
import * as deepcopy from 'deepcopy';
import rap from '@prezzemolo/rap';
import db from '../db/mongodb';
import { IUser, pack as packUser } from './user';

View File

@@ -1,5 +1,5 @@
import * as mongo from 'mongodb';
import deepcopy = require('deepcopy');
import * as deepcopy from 'deepcopy';
import db from '../db/mongodb';
import { IUser, pack as packUser } from './user';
import { pack as packNote } from './note';

View File

@@ -1,5 +1,5 @@
import * as mongo from 'mongodb';
import deepcopy = require('deepcopy');
import * as deepcopy from 'deepcopy';
import db from '../db/mongodb';
import { IUser, pack as packUser } from './user';

View File

@@ -1,5 +1,5 @@
import * as mongo from 'mongodb';
import deepcopy = require('deepcopy');
import * as deepcopy from 'deepcopy';
import db from '../db/mongodb';
import { IUser, pack as packUser } from './user';

View File

@@ -1,5 +1,5 @@
import * as mongo from 'mongodb';
import deepcopy = require('deepcopy');
import * as deepcopy from 'deepcopy';
import db from '../db/mongodb';
const Signin = db.get<ISignin>('signin');

View File

@@ -1,5 +1,5 @@
import * as mongo from 'mongodb';
import deepcopy = require('deepcopy');
import * as deepcopy from 'deepcopy';
import db from '../db/mongodb';
const UserList = db.get<IUserList>('userList');

View File

@@ -1,5 +1,5 @@
import * as mongo from 'mongodb';
import deepcopy = require('deepcopy');
import * as deepcopy from 'deepcopy';
import sequential = require('promise-sequential');
import rap from '@prezzemolo/rap';
import db from '../db/mongodb';
@@ -169,9 +169,9 @@ export async function deleteUser(user: string | mongo.ObjectID | IUser) {
).map(x => deleteAccessToken(x)));
// このユーザーのNoteをすべて削除
//await sequential((
// await Note.find({ userId: u._id })
//).map(x => () => deleteNote(x)));
await sequential((
await Note.find({ userId: u._id })
).map(x => () => deleteNote(x)));
// このユーザーのNoteReactionをすべて削除
await Promise.all((

View File

@@ -13,7 +13,7 @@ import DriveFile, { IMetadata, getDriveFileBucket, IDriveFile, DriveFileChunk }
import DriveFolder from '../../models/drive-folder';
import { pack } from '../../models/drive-file';
import event, { publishDriveStream } from '../../publishers/stream';
import { isLocalUser, IRemoteUser } from '../../models/user';
import { isLocalUser, IUser, IRemoteUser } from '../../models/user';
import DriveFileThumbnail, { getDriveFileThumbnailBucket, DriveFileThumbnailChunk } from '../../models/drive-file-thumbnail';
import genThumbnail from '../../drive/gen-thumbnail';
@@ -98,7 +98,7 @@ async function deleteOldFile(user: IRemoteUser) {
* @return Created drive file
*/
export default async function(
user: any,
user: IUser,
path: string,
name: string = null,
comment: string = null,

View File

@@ -283,6 +283,8 @@ export default async (user: IUser, data: {
mentionedUsers = mentionedUsers.filter(x => x != null);
mentionedUsers.filter(u => isLocalUser(u)).forEach(async u => {
event(u, 'mention', noteObj);
// 既に言及されたユーザーに対する返信や引用renoteの場合も無視
if (data.reply && data.reply.userId.equals(u._id)) return;
if (data.renote && data.renote.userId.equals(u._id)) return;