diff --git a/.gitattributes b/.gitattributes index 58a7812fdf..952d6cd0e9 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,5 +1,3 @@ *.svg -diff -text *.psd -diff -text *.ai -diff -text -yarn.lock -diff -text -package-lock.json -diff -text diff --git a/.gitignore b/.gitignore index 5d06997f1f..9ccb36a9ee 100644 --- a/.gitignore +++ b/.gitignore @@ -7,9 +7,6 @@ # Node.js /node_modules -# yarn -yarn.lock - # config /.config/* !/.config/example.yml diff --git a/CHANGELOG.md b/CHANGELOG.md index f44471968b..55148d82cb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,38 @@ ChangeLog ========= +11.26.0 (2019/07/19) +-------------------- +### ✨Improvements +* モデレーターログを記録して確認できるように +* プロフィールに追加情報を設定できるように +* Mastodonのリンクの所有者認証に対応 +* AP: Delete Person アクティビティを配信するように +* AP: Delete アクティビティの後にフォロー解除するように +* AP: アカウント削除でもDelete activityを配信するように +* Pages: ラジオボタンを追加 +* AdminページのUsers Viewでユーザーのレコードをクリックすることですぐユーザーを照会できるように +* AdminページのUsers Viewでユーザー一覧からユーザー名とホスト情報で検索できるように +* 特定ホストへのメンションの特別処理をクライアントに追加 +* 設定画面でデスクトップ・モバイルモード変更時はすぐにrefreshするか伺うように +* ペーストされたファイル名のテンプレート変更時すぐどのようになるか見れるように +* (コ`・ヘ・´ケ)を追加 + +### 🐛Fixes +* ログインのログが正しく保存されない問題を修正 +* 同じユーザー名のユーザーが作成できてしまうことがある問題を修正 +* 報告されたレポート内容が表示されない問題を修正 +* リモートのプロフィールの追加情報が表示されない問題を修正 +* 「見つける」のタグが大文字小文字区別されている問題を修正 +* 管理画面のインスタンス一覧でソートが正しく機能していない問題を修正 +* プロフィール設定でバナーに動画を設定すると以降編集ができない問題を修正 +* ウェブ検索エンジンの設定でグリッチが発生する問題を修正 +* MFMの引用がインライン表示になっている問題を修正 +* アンケートの期限入力部分のタイトル表示がおかしい問題を修正 +* 画面上の項目がすべていなくなると実際はロードされてないだけのファイルやフォルダーがあるにも関わらず「もっと読み込む」ボタンがなくなり「このフォルダーは空です」っていうplaceholderが表示されてしまう問題を修正 +* proxy-media後のContent-Typeが違う問題を修正 +* ビルド時にエラーが出るのを修正 + 11.25.1 (2019/07/09) -------------------- ### 🐛Fixes @@ -637,9 +669,9 @@ mongodb: db: misskey ``` 3. migration ブランチに切り替え -4. `npm i` -5. `npm run build` -6. `npm run migrate` +4. `yarn install` +5. `yarn build` +6. `yarn migrate` 7. master ブランチに戻す 8. enjoy diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 1d88812f76..548c76910b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -7,18 +7,18 @@ Feature suggestions and bug reports are filed in https://github.com/syuilo/missk * Please search existing issues to avoid duplication. If your issue is already filed, please add your reaction or comment to the existing one. * If you have multiple independent issues, please submit them separately. - ## Localization (l10n) Misskey uses [Crowdin](https://crowdin.com/project/misskey) for localization management. You can improve our translations with your Crowdin account. -Changes you make in Crowdin will be merged into develop branch. +Changes you make in Crowdin will be merged into the develop branch by @syuilo. -If you can't find the language you want to contribute with, please open an issue. +If you cannot find the language you want to contribute with, please open an issue. ![Crowdin](https://d322cqt584bo4o.cloudfront.net/misskey/localized.svg) ## Internationalization (i18n) -Misskey uses [vue-i18n](https://github.com/kazupon/vue-i18n). +Misskey uses the Vue.js plugin [Vue I18n](https://github.com/kazupon/vue-i18n). +Documentation of Vue I18n is available at http://kazupon.github.io/vue-i18n/introduction.html . ## Documentation * Documents for contributors are located in [`/docs`](/docs). @@ -29,9 +29,15 @@ Misskey uses [vue-i18n](https://github.com/kazupon/vue-i18n). * Test codes are located in [`/test`](/test). ## Continuous integration -Misskey uses CircleCI for automated test. +Misskey uses CircleCI for executing automated tests. Configuration files are located in [`/.circleci`](/.circleci). +## FAQ + +### How to resolve conflictions occurred at yarn.lock? + +Just execute `yarn` to fix it. + ## Glossary ### AP Stands for _**A**ctivity**P**ub_. @@ -51,11 +57,15 @@ Convert な(na) to にゃ(nya) #### Denyaize Revert Nyaize -## Code style -### セミコロンを省略しない -ASI Hazardを避けるためでもある +## TypeScript Coding Style +### Do not omit semicolons +This is to avoid Automatic Semicolon Insertion (ASI) hazard. -### 中括弧を省略しない +Ref: +* https://www.ecma-international.org/ecma-262/#sec-automatic-semicolon-insertion +* https://github.com/tc39/ecma262/pull/1062 + +### Do not omit curly brackets Bad: ``` ts if (foo) @@ -73,16 +83,20 @@ if (foo) { } ``` -ただし**`if`が一行**の時だけは省略しても良い +As a special case, you can omit the curly brackets if + +* the body of the `if`-statement have only one statement and, +* the `if`-statement does not have `else`-clause. + Good: ``` ts if (foo) bar; ``` -### 特別な理由がない限り`===`を使う +### Do not use `==` when it can simply be replaced with `===`. 🥰 -### null系を除いて、bool以外の値をifに渡さない +### Use only boolean (or null related) values in the condition of an `if`-statement. Bad: ``` ts if (foo.length) @@ -93,12 +107,12 @@ Good: if (foo.length > 0) ``` -### `export default`を使わない -インテリセンスと相性が悪かったりするため +### Do not use `export default` +This is because the current language support does not work well with `export default`. -参考: -* https://gfx.hatenablog.com/entry/2017/11/24/135343 +Ref: * https://basarat.gitbooks.io/typescript/docs/tips/defaultIsBad.html +* https://gfx.hatenablog.com/entry/2017/11/24/135343 Bad: ``` ts diff --git a/Dockerfile b/Dockerfile index ab8be6c682..21a058c582 100644 --- a/Dockerfile +++ b/Dockerfile @@ -23,9 +23,9 @@ RUN apk add --no-cache \ zlib-dev COPY package.json ./ -RUN npm i +RUN yarn install COPY . ./ -RUN npm run build +RUN yarn build FROM base AS runner diff --git a/README.md b/README.md index 2941074c2e..dee7593be0 100644 --- a/README.md +++ b/README.md @@ -104,38 +104,38 @@ Please see the [Contribution Guide](./CONTRIBUTING.md). + - + -
Hiroshi SekiNemo weepjp kiritan Denshi mkatze ne_moni Melilotosapon
Hiroshi SekiNemo weepjp kiritan Denshi mkatze ne_moni Melilotosapon
+ - + - @@ -175,7 +175,7 @@ Please see the [Contribution Guide](./CONTRIBUTING.md).
osapon 見当かなみ YuzuRyo61 mydarkstarPeter G. nemu sikyosyounin YUKIMOCHI Sampot sheeta.s
osapon 見当かなみ YuzuRyo61 mydarkstarPeter G. nemu sikyosyounin YUKIMOCHITakashi Shibuya
-**Last updated:** Mon, 01 Jul 2019 21:44:06 UTC +**Last updated:** Fri, 19 Jul 2019 15:41:09 UTC :four_leaf_clover: Copyright diff --git a/assets/ss/user.jpg b/assets/ss/user.jpg index 13efc35516..3ec595c199 100644 Binary files a/assets/ss/user.jpg and b/assets/ss/user.jpg differ diff --git a/docs/docker.en.md b/docs/docker.en.md index 701514e45f..a1ddecf62b 100644 --- a/docs/docker.en.md +++ b/docs/docker.en.md @@ -68,7 +68,7 @@ Build misskey with the following: *5.* Init DB ---------------------------------------------------------------- ``` shell -docker-compose run --rm web npm run init +docker-compose run --rm web yarn run init ``` *6.* That is it. diff --git a/docs/docker.ja.md b/docs/docker.ja.md index 4aa84675e0..cc26caadf4 100644 --- a/docs/docker.ja.md +++ b/docs/docker.ja.md @@ -68,7 +68,7 @@ cp docker_example.env docker.env *5.* データベースを初期化 ---------------------------------------------------------------- ``` shell -docker-compose run --rm web npm run init +docker-compose run --rm web yarn run init ``` *6.* 以上です! diff --git a/docs/setup.en.md b/docs/setup.en.md index 9bfa70f51c..6dfbdbfeac 100644 --- a/docs/setup.en.md +++ b/docs/setup.en.md @@ -27,6 +27,7 @@ Please install and setup these softwares: * **[Redis](https://redis.io/)** ##### Optional +* [Yarn](https://yarnpkg.com/) *Optional but recommended for security reason. If you won't install it, use `npx yarn` instead of `yarn`.* * [Elasticsearch](https://www.elastic.co/) - required to enable the search feature * [FFmpeg](https://www.ffmpeg.org/) @@ -50,7 +51,7 @@ Please install and setup these softwares: 5. Install misskey dependencies. - `npm install` + `yarn` *4.* Configure Misskey ---------------------------------------------------------------- @@ -65,21 +66,20 @@ Please install and setup these softwares: Build misskey with the following: -`NODE_ENV=production npm run build` +`NODE_ENV=production yarn build` If you're on Debian, you will need to install the `build-essential`, `python` package. If you're still encountering errors about some modules, use node-gyp: -1. `npm install -g node-gyp` -2. `node-gyp configure` -3. `node-gyp build` -4. `NODE_ENV=production npm run build` +1. `npx node-gyp configure` +2. `npx node-gyp build` +3. `NODE_ENV=production yarn build` *6.* Init DB ---------------------------------------------------------------- ``` shell -npm run init +yarn run init ``` *7.* That is it. @@ -130,15 +130,15 @@ You can check if the service is running with `systemctl status misskey`. ### How to update your Misskey server to the latest version 1. `git checkout master` 2. `git pull` -3. `npm install` -4. `NODE_ENV=production npm run build` -5. `npm run migrate` +3. `yarn install` +4. `NODE_ENV=production yarn build` +5. `yarn migrate` 6. Restart your Misskey process to apply changes 7. Enjoy If you encounter any problems with updating, please try the following: -1. `npm run clean` or `npm run cleanall` -2. Retry update (Don't forget `npm i`) +1. `yarn clean` or `yarn cleanall` +2. Retry update (Don't forget `yarn install` ---------------------------------------------------------------- diff --git a/docs/setup.fr.md b/docs/setup.fr.md index 09ab305b43..4ee0442c95 100644 --- a/docs/setup.fr.md +++ b/docs/setup.fr.md @@ -27,7 +27,8 @@ Installez les paquets suivants : * **[Redis](https://redis.io/)** ##### Optionnels -* [Elasticsearch](https://www.elastic.co/) - requis pour pouvoir activer la fonctionnalité de recherche +* [Yarn](https://yarnpkg.com/) - *recommander pour des raisons de sécurité. Si vous ne l'installez pas, utilisez `npx yarn` au lieu de` yarn`.* +* [Elasticsearch](https://www.elastic.co/) - *requis pour pouvoir activer la fonctionnalité de recherche.* * [FFmpeg](https://www.ffmpeg.org/) *3.* Installation de Misskey @@ -50,7 +51,7 @@ Installez les paquets suivants : 5. Installez les dépendances de misskey. - `npm install` + `yarn install` *4.* Création du fichier de configuration ---------------------------------------------------------------- @@ -65,23 +66,22 @@ Installez les paquets suivants : Construisez Misskey comme ceci : -`NODE_ENV=production npm run build` +`NODE_ENV=production yarn build` Si vous êtes sous Debian, vous serez amené à installer les paquets `build-essential` et `python`. Si vous rencontrez des erreurs concernant certains modules, utilisez node-gyp: -1. `npm install -g node-gyp` -2. `node-gyp configure` -3. `node-gyp build` -4. `NODE_ENV=production npm run build` +1. `npx node-gyp configure` +2. `npx node-gyp build` +3. `NODE_ENV=production yarn build` *6.* C'est tout. ---------------------------------------------------------------- Excellent ! Maintenant, vous avez un environnement prêt pour lancer Misskey ### Lancement conventionnel -Lancez tout simplement `NODE_ENV=production npm start`. Bonne chance et amusez-vous bien ! +Lancez tout simplement `NODE_ENV=production yarn start`. Bonne chance et amusez-vous bien ! ### Démarrage avec systemd @@ -124,9 +124,9 @@ Vous pouvez vérifier si le service a démarré en utilisant la commande `system ### Méthode de mise à jour vers la plus récente version de Misskey 1. `git checkout master` 2. `git pull` -3. `npm install` -4. `NODE_ENV=production npm run build` -5. `npm run migrate` +3. `yarn install` +4. `NODE_ENV=production yarn build` +5. `yarn migrate` ---------------------------------------------------------------- diff --git a/docs/setup.ja.md b/docs/setup.ja.md index e8a11de69b..444827e1f1 100644 --- a/docs/setup.ja.md +++ b/docs/setup.ja.md @@ -27,6 +27,8 @@ adduser --disabled-password --disabled-login misskey * **[Redis](https://redis.io/)** ##### オプション +* [Yarn](https://yarnpkg.com/) + * セキュリティの観点から推奨されます。 yarn をインストールしない方針の場合は、文章中の `yarn` を適宜 `npx yarn` と読み替えてください。 * [Elasticsearch](https://www.elastic.co/) * 検索機能を有効にするためにはインストールが必要です。 * [FFmpeg](https://www.ffmpeg.org/) @@ -51,7 +53,7 @@ adduser --disabled-password --disabled-login misskey 5. Misskeyの依存パッケージをインストール - `npm install` + `yarn install` *4.* 設定ファイルを作成する ---------------------------------------------------------------- @@ -66,20 +68,19 @@ adduser --disabled-password --disabled-login misskey 次のコマンドでMisskeyをビルドしてください: -`NODE_ENV=production npm run build` +`NODE_ENV=production yarn build` Debianをお使いであれば、`build-essential`パッケージをインストールする必要があります。 何らかのモジュールでエラーが発生する場合はnode-gypを使ってください: -1. `npm install -g node-gyp` -2. `node-gyp configure` -3. `node-gyp build` -4. `NODE_ENV=production npm run build` +1. `npx node-gyp configure` +2. `npx node-gyp build` +3. `NODE_ENV=production yarn build` *6.* データベースを初期化 ---------------------------------------------------------------- ``` shell -npm run init +yarn run init ``` *7.* 以上です! @@ -87,7 +88,7 @@ npm run init お疲れ様でした。これでMisskeyを動かす準備は整いました。 ### 通常起動 -`NODE_ENV=production npm start`するだけです。GLHF! +`NODE_ENV=production yarn start`するだけです。GLHF! ### systemdを用いた起動 1. systemdサービスのファイルを作成 @@ -120,7 +121,7 @@ npm run init 3. systemdを再読み込みしmisskeyサービスを有効化 - `systemctl daemon-reload ; systemctl enable misskey` + `systemctl daemon-reload; systemctl enable misskey` 4. misskeyサービスの起動 @@ -131,11 +132,11 @@ npm run init ### Misskeyを最新バージョンにアップデートする方法: 1. `git checkout master` 2. `git pull` -3. `npm install` -4. `NODE_ENV=production npm run build` -5. `npm run migrate` +3. `yarn install` +4. `NODE_ENV=production yarn build` +5. `yarn migrate` -なにか問題が発生した場合は、`npm run clean`または`npm run cleanall`すると直る場合があります。 +なにか問題が発生した場合は、`yarn clean`または`yarn cleanall`すると直る場合があります。 ---------------------------------------------------------------- diff --git a/locales/cs-CZ.yml b/locales/cs-CZ.yml index 7e8df85af2..cee9998e2a 100644 --- a/locales/cs-CZ.yml +++ b/locales/cs-CZ.yml @@ -454,9 +454,12 @@ common/views/components/messaging.vue: no-history: "Žádná historie" user: "Uživatel" group: "Skupina" + start-with-user: "Zahájit konverzaci s uživatelem" + start-with-group: "Zahájit skupinovou konverzaci" common/views/components/messaging-room.vue: new-message: "Máte novou zprávu" common/views/components/messaging-room.form.vue: + input-message-here: "Sem zadejte zprávu" send: "Odeslat" attach-from-local: "Přiložit soubory z Vašeho zařízení" common/views/components/messaging-room.message.vue: @@ -644,6 +647,7 @@ common/views/components/profile-editor.vue: saved: "Profil byl úspěšně aktualizován" uploading: "Nahrávám" upload-failed: "Nahrávání selhalo" + unable-to-process: "Operace nemohla být dokončena." email: "Nastavení e-mailů" email-address: "Emailová adresa" email-verified: "Váš e-mail byl ověřen" @@ -660,6 +664,7 @@ common/views/components/profile-editor.vue: danger-zone: "Nebezpečná zóna" delete-account: "Smazat účet" account-deleted: "Váš účet byl smazán. Může chvilku trvat než zmizí všechna data." + metadata-content: "Obsah" common/views/components/user-list-editor.vue: users: "Uživatel" rename: "Přejmenovat seznam" @@ -733,6 +738,7 @@ desktop: avatar: "Avatar" uploading-avatar: "Nahrál nový avatar" avatar-updated: "Vaše avatar byl aktualizován" + unable-to-process: "Operace nemohla být dokončena." invalid-filetype: "Tento formát souboru není podporován" desktop/views/components/activity.chart.vue: total: "Černá ... Celkem" @@ -1041,6 +1047,8 @@ admin/views/users.vue: reset-password-confirm: "Opravdu chcete resetovat Vaše heslo?" password-updated: "Heslo je nyní \"{password}\"" update-remote-user: "Aktualizovat informace o vzdáleném účtu" + username: "Přezdívka" + host: "Hostitel" users: title: "Uživatel" state: diff --git a/locales/da-DK.yml b/locales/da-DK.yml index f565a50c38..e399f8037c 100644 --- a/locales/da-DK.yml +++ b/locales/da-DK.yml @@ -686,6 +686,7 @@ common/views/components/profile-editor.vue: saved: "Profil er opdateret med succes" uploading: "Overfører" upload-failed: "Fejl ved overførsel" + unable-to-process: "Handlingen kunne ikke gennemføres." email: "Email indstillinger" email-address: "Email adresse" email-verified: "Din email er blevet bekræftet" @@ -705,6 +706,7 @@ common/views/components/profile-editor.vue: danger-zone: "Risici" delete-account: "Slet kontoen" account-deleted: "Kontoen er slettet. Det kan vare lidt, inden alle data forsvinder." + metadata-content: "Indhold" common/views/components/user-list-editor.vue: users: "Bruger" rename: "Omdøb listen" @@ -811,6 +813,7 @@ desktop: uploading-avatar: "Overfør en ny avatar" avatar-updated: "Avatar er overført med succes" choose-avatar: "Vælg et billede til din avatar" + unable-to-process: "Handlingen kunne ikke gennemføres." invalid-filetype: "Denne filtype kan ikke benyttes her" desktop/views/components/activity.chart.vue: total: "Sort ... Total" @@ -1278,6 +1281,8 @@ admin/views/users.vue: remote-user-updated: "Informationen om den eksterne bruger er nu blevet opdateret." delete-all-files: "Slet alle filer" delete-all-files-confirm: "Er du sikker på, at alle filerne skal slettes?" + username: "Brugernavn" + host: "Vært" users: title: "Bruger" sort: diff --git a/locales/de-DE.yml b/locales/de-DE.yml index e8bd11c5e0..f53643ec0d 100644 --- a/locales/de-DE.yml +++ b/locales/de-DE.yml @@ -567,6 +567,7 @@ common/views/components/profile-editor.vue: avatar: "Avatar" banner: "Banner" save: "Speichern" + unable-to-process: "Der Vorgang konnte nicht abgeschlossen werden" export: "Exportieren" import: "Importieren" export-targets: @@ -600,6 +601,7 @@ common/views/widgets/memo.vue: save: "Speichern" desktop: banner: "Banner" + unable-to-process: "Der Vorgang konnte nicht abgeschlossen werden" desktop/views/components/activity.chart.vue: total: "Schwarz ... komplett" notes: "Blau ... Hinweise" @@ -784,6 +786,7 @@ admin/views/drive.vue: local: "Lokal" delete: "Löschen" admin/views/users.vue: + username: "Benutzername" users: origin: local: "Lokal" diff --git a/locales/en-US.yml b/locales/en-US.yml index 0dc3e62289..d3c7ca211d 100644 --- a/locales/en-US.yml +++ b/locales/en-US.yml @@ -712,7 +712,7 @@ common/views/components/profile-editor.vue: you-can-include-hashtags: "You can also include hashtags in your profile description." language: "Language" birthday: "Birthday" - avatar: "Icon" + avatar: "Avatar" banner: "Banner" is-cat: "This account is a Cat" is-bot: "This account is a Bot" @@ -725,6 +725,9 @@ common/views/components/profile-editor.vue: saved: "Profile updated successfully" uploading: "Uploading" upload-failed: "Failed to upload" + unable-to-process: "The operation could not be completed." + avatar-not-an-image: "The file specified as an avatar is not an image" + banner-not-an-image: "The file specified as a banner is not an image" email: "Email settings" email-address: "Email Address" email-verified: "Your email has been verified." @@ -744,6 +747,9 @@ common/views/components/profile-editor.vue: danger-zone: "Cautious options" delete-account: "Remove the account" account-deleted: "The account has been deleted. It may take some time until all of the data disappears." + profile-metadata: "Profile metadata" + metadata-label: "Label" + metadata-content: "Content" common/views/components/user-list-editor.vue: users: "User" rename: "Rename list" @@ -853,6 +859,7 @@ desktop: uploading-avatar: "Uploading a new avatar" avatar-updated: "Successfully updated the avatar" choose-avatar: "Select an image for the avatar" + unable-to-process: "The operation could not be completed." invalid-filetype: "This filetype is not acceptable here" desktop/views/components/activity.chart.vue: total: "Black ... Total" @@ -1365,6 +1372,8 @@ admin/views/users.vue: remote-user-updated: "The information regarding the remote user has been updated." delete-all-files: "Delete all files" delete-all-files-confirm: "Are you sure that you want to delete all files?" + username: "Username" + host: "Host" users: title: "Users" sort: diff --git a/locales/es-ES.yml b/locales/es-ES.yml index 0636eef620..cc8cf46618 100644 --- a/locales/es-ES.yml +++ b/locales/es-ES.yml @@ -569,6 +569,7 @@ common/views/components/profile-editor.vue: saved: "Perfil actualizado con exito" uploading: "Subiendo" upload-failed: "Error al subir" + unable-to-process: "La operación no se puede llevar a cabo" email: "Preferencias de correo" email-address: "Correo electrónico" email-verified: "Tu cuenta de correo ha sido verificada." @@ -671,6 +672,7 @@ desktop: uploading-avatar: "Cargando un nuevo avatar" avatar-updated: "Avatar actualizado" choose-avatar: "Escoge una imagen de avatar" + unable-to-process: "La operación no se puede llevar a cabo" invalid-filetype: "Este tipo de archivo no es compatible aquí" desktop/views/components/activity.chart.vue: total: "Negro ... Total" @@ -964,6 +966,8 @@ admin/views/drive.vue: mark-as-sensitive: "Marcar como 'sensible'" unmark-as-sensitive: "Desmarcar como 'sensible'" admin/views/users.vue: + username: "Usuario" + host: "Host" users: state: all: "Todo" diff --git a/locales/fr-FR.yml b/locales/fr-FR.yml index 208618c134..3b2d9d50be 100644 --- a/locales/fr-FR.yml +++ b/locales/fr-FR.yml @@ -583,6 +583,11 @@ common/views/components/emoji-picker.vue: symbols: "Symboles" flags: "Drapeaux" common/views/components/settings/app-type.vue: + title: "Mode" + choices: + auto: "Choisir la disposition automatiquement" + desktop: "Toujours utiliser la disposition de bureau" + mobile: "Toujours utiliser la disposition mobile" info: "Le rechargement de la page est requis afin d'appliquer les modifications." common/views/components/signin.vue: username: "Nom d'utilisateur·rice" @@ -700,6 +705,7 @@ common/views/components/profile-editor.vue: saved: "Profil mis à jour avec succès" uploading: "En cours d’envoi …" upload-failed: "Échec de l'envoi" + unable-to-process: "L'opération n'a pas pu être complétée" email: "Paramètres de messagerie" email-address: "Adresse de courrier électronique" email-verified: "L’adresse du courrier électronique a été vérifiée." @@ -719,6 +725,7 @@ common/views/components/profile-editor.vue: danger-zone: "Zone de danger" delete-account: "Supprimer le compte" account-deleted: "Le compte a été supprimé. Cela peut prendre un certain temps avant que toutes les données disparaissent." + metadata-content: "Contenu" common/views/components/user-list-editor.vue: users: "Utilisateur·rice" rename: "Renommer la liste" @@ -827,6 +834,7 @@ desktop: uploading-avatar: "Téléversement du nouvel avatar" avatar-updated: "Mise à jour de l’avatar avec succès" choose-avatar: "Choisir un avatar" + unable-to-process: "L'opération n'a pas pu être complétée" invalid-filetype: "Ce format de fichier n’est pas pris en charge" desktop/views/components/activity.chart.vue: total: "Noirs ... Total" @@ -887,6 +895,7 @@ desktop/views/components/drive.folder.vue: rename-folder: "Renommer le dossier" input-new-folder-name: "Entrer un nouveau nom" else-folders: "Avancé" + set-as-upload-folder: "Spécifier en tant que dossier de téléversement par défaut" desktop/views/components/drive.vue: search: "Rechercher" empty-draghover: "Drop Welcome!" @@ -996,6 +1005,7 @@ desktop/views/components/settings.2fa.vue: last-used: "Dernière utilisation :" activate-key: "Cliquez pour activer la clé de sécurité" security-key-name: "Nom de la clé" + something-went-wrong: "Oula ! Il y a eu un problème lors de l’enregistrement de la clé." key-unregistered: "La clé a été supprimée" use-password-less-login: "Utiliser une connexion sans mot de passe" common/views/components/media-image.vue: @@ -1023,6 +1033,7 @@ common/views/components/drive-settings.vue: in-use: "utilisé" stats: "Statistiques" default-upload-folder-name: "Dossier·s" + change-default-upload-folder: "Changer de dossier" common/views/components/mute-and-block.vue: mute-and-block: "Silencés / Bloqués" mute: "Mettre en sourdine" @@ -1313,6 +1324,8 @@ admin/views/users.vue: remote-user-updated: "Les informations de l’utilisateur·rice distant·e ont étés mis à jour" delete-all-files: "Supprimer tous les fichiers" delete-all-files-confirm: "Êtes vous surs de vouloir supprimer tous les fichiers ?" + username: "Nom d'utilisateur·rice" + host: "Hôte" users: title: "Utilisateur·rice·s" sort: @@ -1682,6 +1695,7 @@ deck/deck.user-column.vue: activity: "Activité" timeline: "Fil d’actualité" pinned-notes: "Notes épinglées" + pinned-page: "Page épinglée" docs: edit-this-page-on-github: "Vous avez trouvé une erreur ou vous voulez contribuer à la documentation ?" edit-this-page-on-github-link: "Éditez cette page sur GitHub !" @@ -1797,6 +1811,7 @@ pages: message: "Message à afficher lorsque appuyé" variable: "Variable à envoyer" no-variable: "Aucune" + radioButton: "Choix" _radioButton: name: "Nom de la variable" title: "Titre" diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index 3e315153cb..b6bbb7e963 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -782,6 +782,9 @@ common/views/components/profile-editor.vue: saved: "プロフィールを保存しました" uploading: "アップロード中" upload-failed: "アップロードに失敗しました" + unable-to-process: "操作を完了できません" + avatar-not-an-image: "アイコンとして指定したファイルは画像ではありません" + banner-not-an-image: "バナーとして指定したファイルは画像ではありません" email: "メール設定" email-address: "メールアドレス" email-verified: "メールアドレスが確認されました" @@ -801,6 +804,9 @@ common/views/components/profile-editor.vue: danger-zone: "危険な設定" delete-account: "アカウントを削除" account-deleted: "アカウントが削除されました。データが消えるまで時間がかかる場合があります。" + profile-metadata: "プロフィール補足情報" + metadata-label: "ラベル" + metadata-content: "内容" common/views/components/user-list-editor.vue: users: "ユーザー" @@ -927,6 +933,7 @@ desktop: uploading-avatar: "新しいアバターをアップロードしています" avatar-updated: "アバターを更新しました" choose-avatar: "アバターにする画像を選択" + unable-to-process: "操作を完了できません" invalid-filetype: "この形式のファイルはサポートされていません" desktop/views/components/activity.chart.vue: @@ -1498,6 +1505,8 @@ admin/views/users.vue: remote-user-updated: "リモートユーザー情報を更新しました" delete-all-files: "すべてのファイルを削除" delete-all-files-confirm: "すべてのファイルを削除しますか?" + username: "ユーザー名" + host: "ホスト" users: title: "ユーザー" sort: diff --git a/locales/ja-KS.yml b/locales/ja-KS.yml index 3d49ec955f..02d1ce6141 100644 --- a/locales/ja-KS.yml +++ b/locales/ja-KS.yml @@ -472,6 +472,7 @@ common/views/components/profile-editor.vue: saved: "プロフィールを保存したで" uploading: "アップロードしとります" upload-failed: "これアップロードでけへんわ" + unable-to-process: "あかん、無理やわ" email: "メール設定" email-address: "メールアドレス" email-verified: "このメールアドレスOKや!" @@ -565,6 +566,7 @@ desktop: uploading-avatar: "新しいアバターをアップロードしとるで" avatar-updated: "アバターを更新したで" choose-avatar: "アバターにする画像選んでや" + unable-to-process: "あかん、無理やわ" invalid-filetype: "この形式のファイル無理やねん" desktop/views/components/activity.chart.vue: total: "黒いの ... 全部" @@ -944,6 +946,8 @@ admin/views/users.vue: reset-password: "パスワードをリセット" password-updated: "パスワードは現在「{password} 」やで" suspend: "凍結" + username: "ユーザー名" + host: "ホスト" users: title: "ユーザー" state: diff --git a/locales/ko-KR.yml b/locales/ko-KR.yml index 20d34bae9c..1784202de9 100644 --- a/locales/ko-KR.yml +++ b/locales/ko-KR.yml @@ -725,6 +725,9 @@ common/views/components/profile-editor.vue: saved: "프로필을 저장하였습니다" uploading: "업로드 중" upload-failed: "업로드에 실패하였습니다" + unable-to-process: "작업을 완료할 수 없습니다" + avatar-not-an-image: "아바타로 지정한 파일이 이미지 형식이 아닙니다" + banner-not-an-image: "배너로 지정한 파일이 이미지 형식이 아닙니다" email: "메일 설정" email-address: "메일 주소" email-verified: "매일 주소가 확인되었습니다" @@ -744,6 +747,9 @@ common/views/components/profile-editor.vue: danger-zone: "위험한 설정" delete-account: "계정 삭제" account-deleted: "계정이 삭제되었습니다. 데이터가 사라질 때까지 시간이 걸릴 수 있습니다." + profile-metadata: "프로필 추가 정보" + metadata-label: "라벨" + metadata-content: "내용" common/views/components/user-list-editor.vue: users: "사용자" rename: "리스트 이름 바꾸기" @@ -853,6 +859,7 @@ desktop: uploading-avatar: "새로운 아바타를 업로드하고 있습니다" avatar-updated: "아바타가 변경되었습니다" choose-avatar: "아바타 이미지를 선택" + unable-to-process: "작업을 완료할 수 없습니다" invalid-filetype: "이 형식의 파일은 지원되지 않습니다" desktop/views/components/activity.chart.vue: total: "검은색 ... 전체" @@ -894,7 +901,7 @@ desktop/views/components/drive.file.vue: copy-url: "URL 복사" download: "다운로드" else-files: "기타" - set-as-avatar: "아이콘으로 설정" + set-as-avatar: "아바타로 설정" set-as-banner: "배너로 설정" open-in-app: "앱에서 열기" add-app: "앱 추가" @@ -1365,6 +1372,8 @@ admin/views/users.vue: remote-user-updated: "원격 사용자 정보를 갱신하였습니다" delete-all-files: "모든 파일 삭제" delete-all-files-confirm: "모든 파일을 삭제하시겠습니까?" + username: "사용자명" + host: "관리자" users: title: "사용자" sort: diff --git a/locales/nl-NL.yml b/locales/nl-NL.yml index eb2e5ded1c..e586f0ae92 100644 --- a/locales/nl-NL.yml +++ b/locales/nl-NL.yml @@ -199,6 +199,7 @@ common/views/components/profile-editor.vue: name: "Naam" avatar: "Gebruikersafbeelding" banner: "Omslagfoto" + unable-to-process: "De operatie kan niet worden voltooid." export-targets: following-list: "Volgend" user-lists: "Lijsten" @@ -226,6 +227,7 @@ common/views/pages/follow.vue: follow: "Volgend" desktop: banner: "Omslagfoto" + unable-to-process: "De operatie kan niet worden voltooid." desktop/views/components/activity.chart.vue: total: "Zwart ... totaal" notes: "Blauw ... notities" @@ -425,6 +427,7 @@ admin/views/drive.vue: local: "Lokaal" delete: "Verwijderen" admin/views/users.vue: + username: "Gebruikersnaam" users: title: "Gebruiker" state: diff --git a/locales/no-NO.yml b/locales/no-NO.yml index 15f9732d21..f39f4adacc 100644 --- a/locales/no-NO.yml +++ b/locales/no-NO.yml @@ -346,6 +346,7 @@ admin/views/drive.vue: local: "Lokalt" delete: "Slett" admin/views/users.vue: + username: "Brukernavn" users: title: "Bruker" state: diff --git a/locales/pl-PL.yml b/locales/pl-PL.yml index 8c9d35f057..6b181ef6ef 100644 --- a/locales/pl-PL.yml +++ b/locales/pl-PL.yml @@ -518,6 +518,7 @@ common/views/components/profile-editor.vue: saved: "Pomyślnie zaktualizowano profil" uploading: "Wysyłanie" upload-failed: "Wysyłanie nie powiodło się" + unable-to-process: "Nie udało się ukończyć działania." email: "Ustawienia e-mail" email-address: "Adres e-mail" email-verified: "Twój adres e-mail został zweryfikowany." @@ -612,6 +613,7 @@ desktop: uploading-avatar: "Wysyłanie awatara" avatar-updated: "Wysłano awatar" choose-avatar: "Wybierz awatar" + unable-to-process: "Nie udało się ukończyć działania." desktop/views/components/activity.chart.vue: total: "Czarny … Łącznie" notes: "Niebieski … Wpisy" @@ -910,6 +912,7 @@ admin/views/drive.vue: unmark-as-sensitive: "Cofnij oznaczenie jako zawartość wrażliwą" admin/views/users.vue: user-not-found: "Nie znaleziono użytkownika" + username: "Nazwa użytkownika" users: title: "Użytkownicy" sort: diff --git a/locales/zh-CN.yml b/locales/zh-CN.yml index df4fef8c62..ab0c94a83d 100644 --- a/locales/zh-CN.yml +++ b/locales/zh-CN.yml @@ -725,6 +725,7 @@ common/views/components/profile-editor.vue: saved: "您的个人资料已保存" uploading: "正在上传" upload-failed: "上传失败" + unable-to-process: "无法完成操作" email: "邮件设置" email-address: "电子邮件地址" email-verified: "电子邮件地址已验证" @@ -744,6 +745,7 @@ common/views/components/profile-editor.vue: danger-zone: "危险选项" delete-account: "删除帐户" account-deleted: "帐户已被删除。 数据会在一段时间之后清除。" + metadata-content: "内容" common/views/components/user-list-editor.vue: users: "用户" rename: "重命名列表" @@ -853,6 +855,7 @@ desktop: uploading-avatar: "上传一个新的头像" avatar-updated: "成功上传头像" choose-avatar: "选择作为头像的图片" + unable-to-process: "无法完成操作" invalid-filetype: "不接受此文件类型" desktop/views/components/activity.chart.vue: total: "黑 ... 总计" @@ -1365,6 +1368,8 @@ admin/views/users.vue: remote-user-updated: "远程用户信息已更新" delete-all-files: "删除所有文件" delete-all-files-confirm: "删除所有文件吗?" + username: "用户名" + host: "主机名" users: title: "用户" sort: @@ -1399,6 +1404,7 @@ admin/views/moderators.vue: title: "登录" moderator: "版主" type: "操作" + at: "日期和时间" info: "信息" admin/views/emoji.vue: add-emoji: diff --git a/package.json b/package.json index 0241101d06..44f5e68d73 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "misskey", "author": "syuilo ", - "version": "11.25.1", + "version": "11.26.0", "codename": "daybreak", "repository": { "type": "git", @@ -37,7 +37,6 @@ "@fortawesome/free-solid-svg-icons": "5.9.0", "@fortawesome/vue-fontawesome": "0.1.6", "@koa/cors": "3.0.0", - "@typescript-eslint/parser": "1.11.0", "@types/bcryptjs": "2.4.2", "@types/bull": "3.5.15", "@types/cbor": "2.0.0", @@ -82,7 +81,7 @@ "@types/ratelimiter": "2.1.28", "@types/redis": "2.8.13", "@types/rename": "1.0.1", - "@types/request": "2.48.1", + "@types/request": "2.48.2", "@types/request-promise-native": "1.0.16", "@types/request-stats": "3.0.0", "@types/rimraf": "2.0.2", @@ -99,6 +98,7 @@ "@types/webpack-stream": "3.2.10", "@types/websocket": "0.0.40", "@types/ws": "6.0.1", + "@typescript-eslint/parser": "1.11.0", "animejs": "3.0.1", "apexcharts": "3.8.2", "autobind-decorator": "2.4.0", diff --git a/src/client/app/admin/views/users.user.vue b/src/client/app/admin/views/users.user.vue index 929fc8f4b3..9c3db2d6c2 100644 --- a/src/client/app/admin/views/users.user.vue +++ b/src/client/app/admin/views/users.user.vue @@ -5,7 +5,7 @@ -
+
@{{ user | acct }} @@ -32,7 +32,7 @@ import { faSnowflake } from '@fortawesome/free-regular-svg-icons'; export default Vue.extend({ i18n: i18n('admin/views/users.vue'), - props: ['user'], + props: ['user', 'click'], data() { return { faSnowflake, faMicrophoneSlash @@ -44,7 +44,7 @@ export default Vue.extend({ diff --git a/src/client/app/admin/views/users.vue b/src/client/app/admin/views/users.vue index fd9f0dd8b2..92b23749ff 100644 --- a/src/client/app/admin/views/users.vue +++ b/src/client/app/admin/views/users.vue @@ -8,7 +8,7 @@ {{ $t('lookup') }} -
+
{{ $t('update-remote-user') }} @@ -54,8 +54,16 @@ + + + {{ $t('username') }} + + + {{ $t('host') }} + + - + {{ $t('@.load-more') }} @@ -85,6 +93,8 @@ export default Vue.extend({ sort: '+createdAt', state: 'all', origin: 'local', + searchUsername: '', + searchHost: '', limit: 10, offset: 0, users: [], @@ -107,6 +117,7 @@ export default Vue.extend({ }, origin() { + if (this.origin === 'local') this.searchHost = ''; this.users = []; this.offset = 0; this.fetchUsers(); @@ -157,6 +168,15 @@ export default Vue.extend({ this.target = ''; }, + async showUserOnClick(userId: string) { + this.$root.api('admin/show-user', { userId: userId }).then(info => { + this.user = info; + this.$nextTick(() => { + this.$refs.user.scrollIntoView(); + }); + }); + }, + /** 処理対象ユーザーの情報を更新する */ async refreshUser() { this.$root.api('admin/show-user', { userId: this.user.id }).then(info => { @@ -308,13 +328,16 @@ export default Vue.extend({ return !confirm.canceled; }, - fetchUsers() { + fetchUsers(truncate?: boolean) { + if (truncate) this.offset = 0; this.$root.api('admin/show-users', { state: this.state, origin: this.origin, sort: this.sort, offset: this.offset, - limit: this.limit + 1 + limit: this.limit + 1, + username: this.searchUsername, + hostname: this.searchHost }).then(users => { if (users.length == this.limit + 1) { users.pop(); @@ -322,7 +345,7 @@ export default Vue.extend({ } else { this.existMore = false; } - this.users = this.users.concat(users); + this.users = truncate ? users : this.users.concat(users); this.offset += this.limit; }); } diff --git a/src/client/app/common/scripts/get-face.ts b/src/client/app/common/scripts/get-face.ts index b523948bd3..19f2bdb064 100644 --- a/src/client/app/common/scripts/get-face.ts +++ b/src/client/app/common/scripts/get-face.ts @@ -4,7 +4,8 @@ const faces = [ '🐡( \'-\' 🐡 )フグパンチ!!!!', '✌️(´・_・`)✌️', '(。>﹏<。)', - '(Δ・x・Δ)' + '(Δ・x・Δ)', + '(コ`・ヘ・´ケ)' ]; export default () => faces[Math.floor(Math.random() * faces.length)]; diff --git a/src/client/app/common/views/components/mention.vue b/src/client/app/common/views/components/mention.vue index f212fd3ca5..4e9f9e90d6 100644 --- a/src/client/app/common/views/components/mention.vue +++ b/src/client/app/common/views/components/mention.vue @@ -1,11 +1,17 @@