diff --git a/CHANGELOG.md b/CHANGELOG.md index 873716a3d5e0..9c494fc53dd6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,12 +2,42 @@ ## 12.x.x (unreleased) ### Improvements -- ページロードエラーページにリロードボタンを追加 ### Bugfixes --> +## 12.93.1 (2021/10/23) + +### Bugfixes +- クライアント: 通知上でローカルのリアクションが表示されないのを修正 + +## 12.93.0 (2021/10/23) + +### Improvements +- クライアント: コントロールパネルのパフォーマンスを改善 +- クライアント: 自分のリアクション一覧を見れるように + - 設定により、リアクション一覧を全員に公開することも可能 +- クライアント: ユーザー検索の精度を強化 +- クライアント: 新しいライトテーマを追加 +- クライアント: 新しいダークテーマを追加 +- API: ユーザーのリアクション一覧を取得する users/reactions を追加 +- API: users/search および users/search-by-username-and-host を強化 +- ミュート及びブロックのインポートを行えるように +- クライアント: /share のクエリでリプライやファイル等の情報を渡せるように +- チャートのsyncを毎日0時に自動で行うように + +### Bugfixes +- クライアント: テーマの管理が行えない問題を修正 +- API: アプリケーション通知が取得できない問題を修正 +- クライアント: リモートノートで意図せずローカルカスタム絵文字が使われてしまうことがあるのを修正 +- ActivityPub: not reacted な Undo.Like がinboxに滞留するのを修正 + +### Changes +- 連合の考慮に問題があることなどが分かったため、モデレーターをブロックできない仕様を廃止しました +- データベースにログを保存しないようになりました + - ログを永続化したい場合はsyslogを利用してください + ## 12.92.0 (2021/10/16) ### Improvements diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f5e0eece1f4a..76267ab30e6a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -9,9 +9,9 @@ It will also allow the reader to use the translation tool of their preference if ## Issues Before creating an issue, please check the following: - To avoid duplication, please search for similar issues before creating a new issue. -- Do not use Issues as a question. - - Issues should only be used to feature requests, suggestions, and report problems. - - Please ask questions in the [Misskey Forum](https://forum.misskey.io/) or [Discord](https://discord.gg/Wp8gVStHW3). +- Do not use Issues to ask questions or troubleshooting. + - Issues should only be used to feature requests, suggestions, and bug tracking. + - Please ask questions or troubleshooting in the [Misskey Forum](https://forum.misskey.io/) or [Discord](https://discord.gg/Wp8gVStHW3). ## Before implementation When you want to add a feature or fix a bug, **first have the design and policy reviewed in an Issue** (if it is not there, please make one). Without this step, there is a high possibility that the PR will not be merged even if it is implemented. @@ -171,6 +171,9 @@ const users = userIds.length > 0 ? await Users.find({ SQLでは配列のインデックスは**1始まり**。 `[a, b, c]`の `a`にアクセスしたいなら`[0]`ではなく`[1]`と書く +### null IN +nullが含まれる可能性のあるカラムにINするときは、そのままだとおかしくなるのでORなどでnullのハンドリングをしよう。 + ### `undefined`にご用心 MongoDBの時とは違い、findOneでレコードを取得する時に対象レコードが存在しない場合 **`undefined`** が返ってくるので注意。 MongoDBは`null`で返してきてたので、その感覚で`if (x === null)`とか書くとバグる。代わりに`if (x == null)`と書いてください diff --git a/README.md b/README.md index 0aae1b332963..ce0aa0941750 100644 --- a/README.md +++ b/README.md @@ -65,7 +65,7 @@ Organize and store your files! Want to post a picture you have already uploaded? :package: Create your own instance ---------------------------------------------------------------- -Please see the [Setup and Installation Guide](./docs/setup.en.md). +Please see the [Setup and Installation Guide](https://misskey-hub.net/docs/install/install.html). :wrench: Contribution ---------------------------------------------------------------- diff --git a/docs/README.md b/docs/README.md deleted file mode 100644 index 87b100772f70..000000000000 --- a/docs/README.md +++ /dev/null @@ -1,33 +0,0 @@ -# Docs -These docs are for contributors of Misskey or admins of instance of Misskey. -Docs for users are located in `src/docs`. - -これらのドキュメントはMisskeyの開発者またはMisskeyインスタンス運営者向けです。 -利用者向けのドキュメントは`src/docs`にあります。 - -这些文档是为 Misskey 的贡献者,或是 Misskey 实例的管理者准备的。 -为用户准备的文档放置在 `src/docs` 文件夹中。 - -## 日本語版 - -- [Misskey構築の手引き](./setup.ja.md) -- [運営ガイド](./manage.ja.md) -- [Dockerを使ったMisskey構築方法](./docker.ja.md) - -## English Version - -- [Misskey Setup and Installation Guide](./setup.en.md) -- [Management guide](./manage.en.md) -- [Docker Guide](./docker.en.md) - -## Française Version - -- [Guide d'installation et de configuration de Misskey](./setup.fr.md) -- [Guide d'administration](./manage.fr.md) -- [Guide Docker](./docker.fr.md) - -## 简体中文版 - -- [Misskey 设置和安装指南](./setup.zh.md) -- [运营指南](./manage.zh.md) -- [Docker 部署指南](./docker.zh.md) diff --git a/docs/docker.en.md b/docs/docker.en.md deleted file mode 100644 index adeafe3d31bc..000000000000 --- a/docs/docker.en.md +++ /dev/null @@ -1,97 +0,0 @@ -Docker Guide -================================================================ - -This guide describes how to install and setup Misskey with Docker. - -- [Japanese version also available - 日本語版もあります](./docker.ja.md) -- [Simplified Chinese version also available - 简体中文版同样可用](./docker.zh.md) - ----------------------------------------------------------------- - -*1.* Download Misskey ----------------------------------------------------------------- -1. Clone Misskey repository's master branch. - - `git clone -b master git://github.com/misskey-dev/misskey.git` - -2. Move to misskey directory. - - `cd misskey` - -3. Checkout to the [latest release](https://github.com/misskey-dev/misskey/releases/latest) tag. - - `git checkout master` - -*2.* Configure Misskey ----------------------------------------------------------------- - -Create configuration files with following: - -```bash -cd .config -cp example.yml default.yml -cp docker_example.env docker.env -``` - -### `default.yml` - -Edit this file the same as non-Docker environment. -However hostname of Postgresql, Redis and Elasticsearch are not `localhost`, they are set in `docker-compose.yml`. -The following is default hostname: - -| Service | Hostname | -|---------------|----------| -| Postgresql | `db` | -| Redis | `redis` | -| Elasticsearch | `es` | - -### `docker.env` - -Configure Postgresql in this file. -The minimum required settings are: - -| name | Description | -|---------------------|---------------| -| `POSTGRES_PASSWORD` | Password | -| `POSTGRES_USER` | Username | -| `POSTGRES_DB` | Database name | - -*3.* Configure Docker ----------------------------------------------------------------- -Edit `docker-compose.yml`. - -*4.* Build Misskey ----------------------------------------------------------------- -Build misskey with the following: - -`docker-compose build` - -*5.* Init DB ----------------------------------------------------------------- -``` shell -docker-compose run --rm web yarn run init -``` - -*6.* That is it. ----------------------------------------------------------------- -Well done! Now you have an environment to run Misskey. - -### Launch normally -Just `docker-compose up -d`. GLHF! - -### How to update your Misskey server to the latest version -1. `git stash` -2. `git checkout master` -3. `git pull` -4. `git submodule update --init` -5. `git stash pop` -6. `docker-compose build` -7. Check [ChangeLog](../CHANGELOG.md) for migration information -8. `docker-compose stop && docker-compose up -d` - -### How to execute [cli commands](manage.en.md): -`docker-compose run --rm web node built/tools/mark-admin @example` - ----------------------------------------------------------------- - -If you have any questions or trouble, feel free to contact us! diff --git a/docs/docker.fr.md b/docs/docker.fr.md deleted file mode 100644 index 840e5b5a2851..000000000000 --- a/docs/docker.fr.md +++ /dev/null @@ -1,91 +0,0 @@ -Guide Docker -================================================================ - -Ce guide explique comment installer et configurer Misskey avec Docker. - -- [Version japonaise également disponible - Japanese version also available - 日本語版もあります](./docker.ja.md) -- [Version anglaise également disponible - English version also available - 英語版もあります](./docker.en.md) -- [Version Chinois simplifié également disponible - Simplified Chinese version also available - 简体中文版同样可用](./docker.zh.md) - ----------------------------------------------------------------- - -*1.* Télécharger Misskey ----------------------------------------------------------------- -1. Clone le dépôt de Misskey sur la branche master. - - `git clone -b master git://github.com/misskey-dev/misskey.git` - -2. Naviguez dans le dossier du dépôt. - - `cd misskey` - -3. Checkout sur le tag de la [dernière version](https://github.com/misskey-dev/misskey/releases/latest). - - `git checkout master` - -*2.* Configuration de Misskey ----------------------------------------------------------------- -1. `cp .config/example.yml .config/default.yml` Copiez le fichier `.config/example.yml` et renommez-le `default.yml`. -2. `cp .config/mongo_initdb_example.js .config/mongo_initdb.js` Copie le fichier `.config/mongo_initdb_example.js` et le renomme en `mongo_initdb.js`. -3. Editez `default.yml` et `mongo_initdb.js`. - -*3.* Configurer Docker ----------------------------------------------------------------- -Editez `docker-compose.yml`. - -*4.* Contruire Misskey ----------------------------------------------------------------- -Contruire l'image Docker avec: - -`docker-compose build` - -*5.* C'est tout ! ----------------------------------------------------------------- -Parfait, Vous avez un environnement prêt pour démarrer Misskey. - -### Lancer normalement -Utilisez la commande `docker-compose up -d`. GLHF! - -### How to update your Misskey server to the latest version -1. `git stash` -2. `git checkout master` -3. `git pull` -4. `git submodule update --init` -5. `git stash pop` -6. `docker-compose build` -7. Consultez le [ChangeLog](../CHANGELOG.md) pour avoir les éventuelles informations de migration -8. `docker-compose stop && docker-compose up -d` - -### Comment exécuter des [commandes](manage.fr.md) -`docker-compose run --rm web node built/tools/mark-admin @example` - -### Configuration d'ElasticSearch (pour la fonction de recherche) -*1.* Préparation de l'environnement ----------------------------------------------------------------- -1. Permet de créer le dossier d'accueil de la base ElasticSearch aves les bons droits - - `mkdir elasticsearch && chown 1000:1000 elasticsearch` - -2. Augmente la valeur max du paramètre map_count du système (valeur minimum pour pouvoir lancer ES) - - `sysctl -w vm.max_map_count=262144` - -*2.* Après lancement du docker-compose, initialisation de la base ElasticSearch ----------------------------------------------------------------- -1. Connexion dans le conteneur web - - `docker-compose -it web /bin/sh` - -2. Ajout du paquet curl - - `apk add curl` - -3. Création de la base ES - - `curl -X PUT "es:9200/misskey" -H 'Content-Type: application/json' -d'{ "settings" : { "index" : { } }}'` - -4. `exit` - ----------------------------------------------------------------- - -Si vous avez des questions ou des problèmes, n'hésitez pas à nous contacter ! diff --git a/docs/docker.ja.md b/docs/docker.ja.md deleted file mode 100644 index c660a9041bce..000000000000 --- a/docs/docker.ja.md +++ /dev/null @@ -1,98 +0,0 @@ -Dockerを使ったMisskey構築方法 -================================================================ - -このガイドはDockerを使ったMisskeyセットアップ方法について解説します。 - -- [英語版もあります - English version also available](./docker.en.md) -- [简体中文版同样可用 - Simplified Chinese version also available](./docker.zh.md) - ----------------------------------------------------------------- - -*1.* Misskeyのダウンロード ----------------------------------------------------------------- -1. masterブランチからMisskeyレポジトリをクローン - - `git clone -b master git://github.com/misskey-dev/misskey.git` - -2. misskeyディレクトリに移動 - - `cd misskey` - -3. [最新のリリース](https://github.com/misskey-dev/misskey/releases/latest)を確認 - - `git checkout master` - -*2.* 設定ファイルの作成と編集 ----------------------------------------------------------------- - -下記コマンドで設定ファイルを作成してください。 - -```bash -cd .config -cp example.yml default.yml -cp docker_example.env docker.env -``` - -### `default.yml`の編集 - -非Docker環境と同じ様に編集してください。 -ただし、Postgresql、RedisとElasticsearchのホストは`localhost`ではなく、`docker-compose.yml`で設定されたサービス名になっています。 -標準設定では次の通りです。 - -| サービス | ホスト名 | -|---------------|---------| -| Postgresql |`db` | -| Redis |`redis` | -| Elasticsearch |`es` | - -### `docker.env`の編集 - -このファイルはPostgresqlの設定を記述します。 -最低限記述する必要がある設定は次の通りです。 - -| 設定 | 内容 | -|---------------------|--------------| -| `POSTGRES_PASSWORD` | パスワード | -| `POSTGRES_USER` | ユーザー名 | -| `POSTGRES_DB` | データベース名 | - -*3.* Dockerの設定 ----------------------------------------------------------------- -`docker-compose.yml`を編集してください。 - -*4.* Misskeyのビルド ----------------------------------------------------------------- -次のコマンドでMisskeyをビルドしてください: - -`docker-compose build` - -*5.* データベースを初期化 ----------------------------------------------------------------- -``` shell -docker-compose run --rm web yarn run init -``` - -*6.* 以上です! ----------------------------------------------------------------- -お疲れ様でした。これでMisskeyを動かす準備は整いました。 - -### 通常起動 -`docker-compose up -d`するだけです。GLHF! - -### Misskeyを最新バージョンにアップデートする方法: -1. `git stash` -2. `git checkout master` -3. `git pull` -4. `git submodule update --init` -5. `git stash pop` -6. `docker-compose build` -7. [ChangeLog](../CHANGELOG.md)でマイグレーション情報を確認する -8. `docker-compose stop && docker-compose up -d` - -### cliコマンドを実行する方法: - -`docker-compose run --rm web node built/tools/mark-admin @example` - ----------------------------------------------------------------- - -なにかお困りのことがありましたらお気軽にご連絡ください。 diff --git a/docs/docker.zh.md b/docs/docker.zh.md deleted file mode 100644 index 5a494ea11e02..000000000000 --- a/docs/docker.zh.md +++ /dev/null @@ -1,97 +0,0 @@ -Docker 部署指南 -================================================================ - -这份指南描述了如何使用Docker安装并设置 Misskey 。 - -- [日本語版もあります - Japanese version also available](./docker.ja.md) -- [英語版もあります - English version also available](./docker.en.md) - ----------------------------------------------------------------- - -*1.* 下载 Misskey ----------------------------------------------------------------- -1. 克隆 Misskey 项目的 master 分支。 - - `git clone -b master git://github.com/misskey-dev/misskey.git` - -2. 进入 misskey 文件夹。 - - `cd misskey` - -3. 检查 [最新发布版](https://github.com/misskey-dev/misskey/releases/latest) 标签。 - - `git checkout master` - -*2.* 配置 Misskey ----------------------------------------------------------------- - -可以按照如下方式创建配置文件: - -``` bash -cd .config -cp example.yml default.yml -cp docker_example.env docker.env -``` - -### `default.yml` - -这个文件的编辑工作基本与非 Docker 环境的版本相同。 -但请注意, Postgresql、 Redis 和 Elasticsearch 的 **主机名(hostname)** 配置不应该是 `localhost` ,它们被设置在 `docker-compose.yml` 文件中。 -以下是默认的主机名: - -| 服务 | 主机名 | -|---------------|----------| -| Postgresql | `db` | -| Redis | `redis` | -| Elasticsearch | `es` | - -### `docker.env` - -在这个文件中配置 Postgresql 。 -至少需要如下这些配置: - -| 名称 | 描述 | -|---------------------|---------------| -| `POSTGRES_PASSWORD` | 数据库密码 | -| `POSTGRES_USER` | 数据库用户名 | -| `POSTGRES_DB` | 数据库名 | - -*3.* 配置 Docker ----------------------------------------------------------------- -编辑 `docker-compose.yml` 文件。 - -*4.* 构建 Misskey ----------------------------------------------------------------- -使用如下的方式构建Misskey: - -`docker-compose build` - -*5.* 初始化数据库 ----------------------------------------------------------------- -``` bash -docker-compose run --rm web yarn run init -``` - -*6.* 完成了! ----------------------------------------------------------------- -干得不错!现在您拥有了一个可以运行Misskey的环境啦。 - -### 正常启动 -只需要 `docker-compose up -d` 即可。玩得愉快! - -### 如何将您的 Misskey 服务器升级至最新版本 -1. `git stash` -2. `git checkout master` -3. `git pull` -4. `git submodule update --init` -5. `git stash pop` -6. `docker-compose build` -7. 检查 [更新日志](../CHANGELOG.md) 以获取升级迁移信息。 -8. `docker-compose stop && docker-compose up -d` - -### 如何执行 [控制台指令](manage.zh.md): -`docker-compose run --rm web node built/tools/mark-admin @example` - ----------------------------------------------------------------- - -如果您有任何疑问或是困惑,欢迎与我们联系! diff --git a/docs/examples/misskey.nginx b/docs/examples/misskey.nginx deleted file mode 100644 index b558fb023a36..000000000000 --- a/docs/examples/misskey.nginx +++ /dev/null @@ -1,71 +0,0 @@ -# Sample nginx configuration for Misskey -# -# 1. Replace example.tld to your domain -# 2. Copy to /etc/nginx/sites-available/ and then symlink from /etc/nginx/sites-enabled/ -# or copy to /etc/nginx/conf.d/ - -# For WebSocket -map $http_upgrade $connection_upgrade { - default upgrade; - '' close; -} - -proxy_cache_path /tmp/nginx_cache levels=1:2 keys_zone=cache1:16m max_size=1g inactive=720m use_temp_path=off; - -server { - listen 80; - listen [::]:80; - server_name example.tld; - - # For SSL domain validation - root /var/www/html; - location /.well-known/acme-challenge/ { allow all; } - location /.well-known/pki-validation/ { allow all; } - location / { return 301 https://$server_name$request_uri; } -} - -server { - listen 443 ssl http2; - listen [::]:443 ssl http2; - server_name example.tld; - ssl_session_cache shared:ssl_session_cache:10m; - - # To use Let's Encrypt certificate - ssl_certificate /etc/letsencrypt/live/example.tld/fullchain.pem; - ssl_certificate_key /etc/letsencrypt/live/example.tld/privkey.pem; - - # To use Debian/Ubuntu's self-signed certificate (For testing or before issuing a certificate) - #ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem; - #ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key; - - # SSL protocol settings - ssl_protocols TLSv1.2; - ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:AES128-SHA; - ssl_prefer_server_ciphers on; - - # Change to your upload limit - client_max_body_size 80m; - - # Proxy to Node - location / { - proxy_pass http://127.0.0.1:3000; - proxy_set_header Host $host; - proxy_http_version 1.1; - proxy_redirect off; - - # If it's behind another reverse proxy or CDN, remove the following. - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto https; - - # For WebSocket - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection $connection_upgrade; - - # Cache settings - proxy_cache cache1; - proxy_cache_lock on; - proxy_cache_use_stale updating; - add_header X-Cache $upstream_cache_status; - } -} diff --git a/docs/manage.en.md b/docs/manage.en.md deleted file mode 100644 index d310e9531f00..000000000000 --- a/docs/manage.en.md +++ /dev/null @@ -1,14 +0,0 @@ -# Management guide - -## Check the status of the job queue -coming soon - -## Mark as 'admin' user -``` shell -node built/tools/mark-admin (Username) -``` - -e.g. -``` shell -node built/tools/mark-admin @syuilo -``` diff --git a/docs/manage.fr.md b/docs/manage.fr.md deleted file mode 100644 index 0b2b7ffc16fe..000000000000 --- a/docs/manage.fr.md +++ /dev/null @@ -1,14 +0,0 @@ -# Guide d'administration - -## Vérifier le status de la file d'attente des taches -coming soon - -## Marquer un utilisateur en tant que 'admin' -``` shell -node built/tools/mark-admin (nom d'utilisateur) -``` - -Exemple : -``` shell -node built/tools/mark-admin @syuilo -``` diff --git a/docs/manage.ja.md b/docs/manage.ja.md deleted file mode 100644 index 55596add107c..000000000000 --- a/docs/manage.ja.md +++ /dev/null @@ -1,14 +0,0 @@ -# 運営ガイド - -## ジョブキューの状態を調べる -coming soon - -## 管理者ユーザーを設定する -``` shell -node built/tools/mark-admin (ユーザー名) -``` - -例: -``` shell -node built/tools/mark-admin @syuilo -``` diff --git a/docs/manage.zh.md b/docs/manage.zh.md deleted file mode 100644 index 520d15020386..000000000000 --- a/docs/manage.zh.md +++ /dev/null @@ -1,14 +0,0 @@ -# 运营指南 - -## 检查任务队列的状态 -即将到来…… - -## 设置用户为管理员 -``` shell -node built/tools/mark-admin (用户名) -``` - -样例 -``` shell -node built/tools/mark-admin @syuilo -``` diff --git a/docs/push-docker-hub.ja.md b/docs/push-docker-hub.ja.md deleted file mode 100644 index 923e4c16e059..000000000000 --- a/docs/push-docker-hub.ja.md +++ /dev/null @@ -1,28 +0,0 @@ -GitHub Actionsを使用してDocker Hubへpushする方法 -================================================================ - -[/.github/workflows/docker.yml](/.github/workflows/docker.yml) に -GitHub ActionによりDocker Hubへpushするワークフローが記述されています。 - -オリジナルリポジトリでは、リリースされたタイミングで `latest`, `<リリース名>` それぞれのタグでDocker Hubにpushされます。 -※ Docker Hub に`<ブランチ名>`のようなタグがあるかもしれませんが、こちらは自動push対象ではありません。 - -Fork先でこのワークフローを実行すると失敗します。 - -以下では、Fork先で自分のDocker Hubリポジトリにpushするようにする方法を記述します。 - -## 自分のDocker Hubリポジトリにpushするように設定する方法 - -1. Docker Hubでリポジトリを作成します。 -2. ワークフローファイルの [images](https://github.com/misskey-dev/misskey/blob/53f3b779bf16abcda4f6e026c51384f3b8fbcc62/.github/workflows/docker.yml#L20) を作成したリポジトリに置き換えます。 -3. GitHubにて [暗号化されたシークレット](https://docs.github.com/ja/actions/reference/encrypted-secrets#creating-encrypted-secrets-for-a-repository) を作成します。 - 作成が必要なのは `DOCKER_USERNAME` と `DOCKER_PASSWORD` で、それぞれDocker Hubのユーザーとパスワードになります。 - -## pushする方法 - -上記設定によりリリース時に自動的にDocker Hubにpushされるようになります。 -具体的には、GitHubのリリース機能でリリースしたタイミングで `latest`, `<リリース名>` それぞれのタグでDocker Hubにpushされます。 - -また、GitHub上から手動でpushすることも出来ます。 -それを行うには、Actions => Publish Docker image => Run workflow からbranchを選択してワークフローを実行します。 -ただし、この場合作成されるタグは`<ブランチ名>`になります。 diff --git a/docs/setup.en.md b/docs/setup.en.md deleted file mode 100644 index dfe50a6600a5..000000000000 --- a/docs/setup.en.md +++ /dev/null @@ -1,147 +0,0 @@ -Misskey Setup and Installation Guide -================================================================ - -We thank you for your interest in setting up your Misskey server! -This guide describes how to install and setup Misskey. - -- [Japanese version also available - 日本語版もあります](./setup.ja.md) -- [Simplified Chinese version also available - 简体中文版同样可用](./setup.zh.md) - ----------------------------------------------------------------- - -*1.* Create Misskey user ----------------------------------------------------------------- -Running misskey as root is not a good idea so we create a user for that. -In debian for exemple : - -``` -adduser --disabled-password --disabled-login misskey -``` - -*2.* Install dependencies ----------------------------------------------------------------- -Please install and setup these softwares: - -#### Dependencies :package: -* **[Node.js](https://nodejs.org/en/)** (12.x, 14.x) -* **[PostgreSQL](https://www.postgresql.org/)** (12.x / 13.x is preferred) -* **[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/) - -*3.* Install Misskey ----------------------------------------------------------------- -1. Connect to misskey user. - - `su - misskey` - -2. Clone the misskey repo from master branch. - - `git clone -b master git://github.com/misskey-dev/misskey.git` - -3. Navigate to misskey directory - - `cd misskey` - -4. Checkout to the [latest release](https://github.com/misskey-dev/misskey/releases/latest) - - `git checkout master` - -5. Install misskey dependencies. - - `yarn` - -*4.* Configure Misskey ----------------------------------------------------------------- -1. Copy the `.config/example.yml` and rename it to `default.yml`. - - `cp .config/example.yml .config/default.yml` - -2. Edit `default.yml` - -*5.* Build Misskey ----------------------------------------------------------------- - -Build misskey with the following: - -`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. `npx node-gyp configure` -2. `npx node-gyp build` -3. `NODE_ENV=production yarn build` - -*6.* Init DB ----------------------------------------------------------------- -``` shell -yarn run init -``` - -*7.* That is it. ----------------------------------------------------------------- -Well done! Now, you have an environment that run to Misskey. - -### Launch normally -Just `NODE_ENV=production npm start`. GLHF! - -### Launch with systemd - -1. Create a systemd service here - - `/etc/systemd/system/misskey.service` - -2. Edit it, and paste this and save: - - ``` - [Unit] - Description=Misskey daemon - - [Service] - Type=simple - User=misskey - ExecStart=/usr/bin/npm start - WorkingDirectory=/home/misskey/misskey - Environment="NODE_ENV=production" - TimeoutSec=60 - StandardOutput=syslog - StandardError=syslog - SyslogIdentifier=misskey - Restart=always - - [Install] - WantedBy=multi-user.target - ``` - -3. Reload systemd and enable the misskey service. - - `systemctl daemon-reload ; systemctl enable misskey` - -4. Start the misskey service. - - `systemctl start misskey` - -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. `git submodule update --init` -4. `yarn install` -5. `NODE_ENV=production yarn build` -6. `yarn migrate` -7. Restart your Misskey process to apply changes -8. Enjoy - -If you encounter any problems with updating, please try the following: -1. `yarn clean` or `yarn cleanall` -2. Retry update (Don't forget `yarn install` - ----------------------------------------------------------------- - -If you have any questions or troubles, feel free to contact us! diff --git a/docs/setup.fr.md b/docs/setup.fr.md deleted file mode 100644 index f38c7a8eab90..000000000000 --- a/docs/setup.fr.md +++ /dev/null @@ -1,136 +0,0 @@ -Guide d'installation et de configuration de Misskey -================================================================ - -Nous vous remerçions de l'intrêt que vous manifestez pour l'installation de votre propre instance Misskey ! -Ce guide décrit les étapes à suivre afin d'installer et de configurer une instance Misskey. - -- [La version en japonnais est également disponible sur - 日本語版もあります](./setup.ja.md) -- [Version anglaise également disponible - English version also available - 英語版もあります](./setup.en.md) -- [Version Chinois simplifié également disponible - Simplified Chinese version also available - 简体中文版同样可用](./setup.zh.md) - ----------------------------------------------------------------- - -*1.* Création de l'utilisateur Misskey ----------------------------------------------------------------- -Executer misskey en tant que super-utilisateur étant une mauvaise idée, nous allons créer un utilisateur dédié. -Sous Debian, par exemple : - -``` -adduser --disabled-password --disabled-login misskey -``` - -*2.* Installation des dépendances ----------------------------------------------------------------- -Installez les paquets suivants : - -#### Dépendences :package: -* **[Node.js](https://nodejs.org/en/)** (12.x, 14.x) -* **[PostgreSQL](https://www.postgresql.org/)** (>= 10) -* **[Redis](https://redis.io/)** - -##### Optionnels -* [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 ----------------------------------------------------------------- -1. Basculez vers l'utilisateur misskey. - - `su - misskey` - -2. Clonez la branche master du dépôt misskey. - - `git clone -b master git://github.com/misskey-dev/misskey.git` - -3. Accédez au dossier misskey. - - `cd misskey` - -4. Checkout sur le tag de la [version la plus récente](https://github.com/misskey-dev/misskey/releases/latest) - - `git checkout master` - -5. Installez les dépendances de misskey. - - `yarn install` - -*4.* Création du fichier de configuration ----------------------------------------------------------------- -1. Copiez le fichier `.config/example.yml` et renommez-le`default.yml`. - - `cp .config/example.yml .config/default.yml` - -2. Editez le fichier `default.yml` - -*5.* Construction de Misskey ----------------------------------------------------------------- - -Construisez Misskey comme ceci : - -`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. `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 yarn start`. Bonne chance et amusez-vous bien ! - -### Démarrage avec systemd - -1. Créez un service systemd sur - - `/etc/systemd/system/misskey.service` - -2. Editez-le puis copiez et coller ceci dans le fichier : - - ``` - [Unit] - Description=Misskey daemon - - [Service] - Type=simple - User=misskey - ExecStart=/usr/bin/npm start - WorkingDirectory=/home/misskey/misskey - Environment="NODE_ENV=production" - TimeoutSec=60 - StandardOutput=syslog - StandardError=syslog - SyslogIdentifier=misskey - Restart=always - - [Install] - WantedBy=multi-user.target - ``` - -3. Redémarre systemd et active le service misskey. - - `systemctl daemon-reload ; systemctl enable misskey` - -4. Démarre le service misskey. - - `systemctl start misskey` - -Vous pouvez vérifier si le service a démarré en utilisant la commande `systemctl status misskey`. - -### Méthode de mise à jour vers la plus récente version de Misskey -1. `git checkout master` -2. `git pull` -3. `git submodule update --init` -4. `yarn install` -5. `NODE_ENV=production yarn build` -6. `yarn migrate` - ----------------------------------------------------------------- - -Si vous rencontrez des difficultés ou avez d'autres questions, n'hésitez pas à nous contacter ! diff --git a/docs/setup.ja.md b/docs/setup.ja.md deleted file mode 100644 index 5681ee8c511e..000000000000 --- a/docs/setup.ja.md +++ /dev/null @@ -1,145 +0,0 @@ -Misskey構築の手引き -================================================================ - -Misskeyサーバーの構築にご関心をお寄せいただきありがとうございます! -このガイドではMisskeyのインストール・セットアップ方法について解説します。 - -- [英語版もあります - English version also available](./setup.en.md) -- [简体中文版同样可用 - Simplified Chinese version also available](./setup.zh.md) - ----------------------------------------------------------------- - -*1.* Misskeyユーザーの作成 ----------------------------------------------------------------- -Misskeyはrootユーザーで実行しない方がよいため、代わりにユーザーを作成します。 -Debianの例: - -``` -adduser --disabled-password --disabled-login misskey -``` - -*2.* 依存関係をインストールする ----------------------------------------------------------------- -これらのソフトウェアをインストール・設定してください: - -#### 依存関係 :package: -* **[Node.js](https://nodejs.org/en/)** (12.x, 14.x) -* **[PostgreSQL](https://www.postgresql.org/)** (10以上) -* **[Redis](https://redis.io/)** - -##### オプション -* [Yarn](https://yarnpkg.com/) - * セキュリティの観点から推奨されます。 yarn をインストールしない方針の場合は、文章中の `yarn` を適宜 `npx yarn` と読み替えてください。 -* [Elasticsearch](https://www.elastic.co/) - * 検索機能を有効にするためにはインストールが必要です。 -* [FFmpeg](https://www.ffmpeg.org/) - -*3.* Misskeyのインストール ----------------------------------------------------------------- -1. misskeyユーザーを使用 - - `su - misskey` - -2. masterブランチからMisskeyレポジトリをクローン - - `git clone -b master git://github.com/misskey-dev/misskey.git` - -3. misskeyディレクトリに移動 - - `cd misskey` - -4. [最新のリリース](https://github.com/misskey-dev/misskey/releases/latest)を確認 - - `git checkout master` - -5. Misskeyの依存パッケージをインストール - - `yarn install` - -*4.* 設定ファイルを作成する ----------------------------------------------------------------- -1. `.config/example.yml`をコピーし名前を`default.yml`にする。 - - `cp .config/example.yml .config/default.yml` - -2. `default.yml` を編集する。 - -*5.* Misskeyのビルド ----------------------------------------------------------------- - -次のコマンドでMisskeyをビルドしてください: - -`NODE_ENV=production yarn build` - -Debianをお使いであれば、`build-essential`パッケージをインストールする必要があります。 - -何らかのモジュールでエラーが発生する場合はnode-gypを使ってください: -1. `npx node-gyp configure` -2. `npx node-gyp build` -3. `NODE_ENV=production yarn build` - -*6.* データベースを初期化 ----------------------------------------------------------------- -``` shell -yarn run init -``` - -*7.* 以上です! ----------------------------------------------------------------- -お疲れ様でした。これでMisskeyを動かす準備は整いました。 - -### 通常起動 -`NODE_ENV=production yarn start`するだけです。GLHF! - -### systemdを用いた起動 -1. systemdサービスのファイルを作成 - - `/etc/systemd/system/misskey.service` - -2. エディタで開き、以下のコードを貼り付けて保存: - - ``` - [Unit] - Description=Misskey daemon - - [Service] - Type=simple - User=misskey - ExecStart=/usr/bin/npm start - WorkingDirectory=/home/misskey/misskey - Environment="NODE_ENV=production" - TimeoutSec=60 - StandardOutput=syslog - StandardError=syslog - SyslogIdentifier=misskey - Restart=always - - [Install] - WantedBy=multi-user.target - ``` - - CentOSで1024以下のポートを使用してMisskeyを使用する場合は`ExecStart=/usr/bin/sudo /usr/bin/npm start`に変更する必要があります。 - -3. systemdを再読み込みしmisskeyサービスを有効化 - - `systemctl daemon-reload; systemctl enable misskey` - -4. misskeyサービスの起動 - - `systemctl start misskey` - -`systemctl status misskey`と入力すると、サービスの状態を調べることができます。 - -### Misskeyを最新バージョンにアップデートする方法: -1. `git checkout master` -2. `git pull` -3. `git submodule update --init` -4. `yarn install` -5. `NODE_ENV=production yarn build` -6. `yarn migrate` - -なにか問題が発生した場合は、`yarn clean`または`yarn cleanall`すると直る場合があります。 - ----------------------------------------------------------------- - -なにかお困りのことがありましたらお気軽にご連絡ください。 diff --git a/docs/setup.zh.md b/docs/setup.zh.md deleted file mode 100644 index 26a72f0d05a1..000000000000 --- a/docs/setup.zh.md +++ /dev/null @@ -1,147 +0,0 @@ -Misskey 设置和安装指南 -================================================================ - -非常感谢您对构建 Misskey 服务器的关注! -这份指南描述了 Misskey 的安装与设置流程。 - -- [日本語版もあります - Japanese version also available](./setup.ja.md) -- [英語版もあります - English version also available](./setup.en.md) - ----------------------------------------------------------------- - -*1.* 创建 Misskey 用户 ----------------------------------------------------------------- -直接使用 root 用户来运行 misskey 也许并不是一个好主意,因此我们有必要创建一个专用的用户。 -以 Debian 为例: - -``` bash -adduser --disabled-password --disabled-login misskey -``` - -*2.* 安装依赖 ----------------------------------------------------------------- -请安装并设置如下这些软件: - -#### Dependencies :package: -* **[Node.js](https://nodejs.org/en/)** (12.x, 14.x) -* **[PostgreSQL](https://www.postgresql.org/)** (>= 10) -* **[Redis](https://redis.io/)** - -##### Optional -* [Yarn](https://yarnpkg.com/) *可选,但出于安全因素考虑还是推荐安装。如果您没有安装, 您需要使用 `npx yarn` 来代替 `yarn`.* -* [Elasticsearch](https://www.elastic.co/) - 为了启用搜索功能,这个搜索引擎是有必要的。 -* [FFmpeg](https://www.ffmpeg.org/) - -*3.* 安装 Misskey ----------------------------------------------------------------- -1. 连接至 misskey 用户. - - `su - misskey` - -2. 克隆 Misskey 项目的 master 分支。 - - `git clone -b master git://github.com/misskey-dev/misskey.git` - -3. 进入 misskey 文件夹。 - - `cd misskey` - -4. 检查 [最新发布版](https://github.com/misskey-dev/misskey/releases/latest) 标签。 - - `git checkout master` - -5. 安装 Misskey 的依赖。 - - `yarn` - -*4.* 配置 Misskey ----------------------------------------------------------------- -1. 复制 `.config/example.yml` 并重命名为 `default.yml`。 - - `cp .config/example.yml .config/default.yml` - -2. 编辑 `default.yml` - -*5.* 构建 Misskey ----------------------------------------------------------------- - -使用如下的指令构建 Misskey : - -`NODE_ENV=production yarn build` - -如果您使用的是 Debian , 您需要安装 `build-essential`, `python` 环境包。 - -如果您仍然遇到有关某些模块的错误,您可以使用 node-gyp: - -1. `npx node-gyp configure` -2. `npx node-gyp build` -3. `NODE_ENV=production yarn build` - -*6.* 初始化数据库 ----------------------------------------------------------------- -``` bash -yarn run init -``` - -*7.* 完成了! ----------------------------------------------------------------- -干得不错!现在您拥有了一个可以运行Misskey的环境啦。 - -### 正常启动 -只需要 `NODE_ENV=production npm start` 即可。玩得愉快! - -### 使用 systemd 来启动 - -1. 在此处创建一个 systemd 服务: - - `/etc/systemd/system/misskey.service` - -2. 编辑它,粘贴如下内容并保存: - - ``` - [Unit] - Description=Misskey daemon - - [Service] - Type=simple - User=misskey - ExecStart=/usr/bin/npm start - WorkingDirectory=/home/misskey/misskey - Environment="NODE_ENV=production" - TimeoutSec=60 - StandardOutput=syslog - StandardError=syslog - SyslogIdentifier=misskey - Restart=always - - [Install] - WantedBy=multi-user.target - ``` - -3. 重启 systemd 并设置 misskey 服务自动启动: - - `systemctl daemon-reload ; systemctl enable misskey` - -4. 启动 misskey 服务: - - `systemctl start misskey` - -您可以使用 `systemctl status misskey` 来检查服务是否正在运行。 - -### 如何将您的 Misskey 服务器升级至最新版本 -1. `git checkout master` -2. `git pull` -3. `git submodule update --init` -4. `yarn install` -5. `NODE_ENV=production yarn build` -6. `yarn migrate` -7. 重启您的 Misskey 进程来应用改变。 -8. 尽情享受吧! - -如果您在更新时遇到任何问题,请尝试以下操作: -1. `yarn clean` 或是 `yarn cleanall` -2. 重试升级 (请不要忘记 `yarn install` ) - ----------------------------------------------------------------- - -如果您有任何疑问或是困惑,欢迎与我们联系! diff --git a/locales/ar-SA.yml b/locales/ar-SA.yml index 3685eda5f893..4c4be9445ef3 100644 --- a/locales/ar-SA.yml +++ b/locales/ar-SA.yml @@ -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: "المستقبَل" diff --git a/locales/de-DE.yml b/locales/de-DE.yml index cebb95109c77..c5bbbddc07fd 100644 --- a/locales/de-DE.yml +++ b/locales/de-DE.yml @@ -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." diff --git a/locales/en-US.yml b/locales/en-US.yml index aeb0aa1eac61..f60365b012d8 100644 --- a/locales/en-US.yml +++ b/locales/en-US.yml @@ -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." diff --git a/locales/eo-UY.yml b/locales/eo-UY.yml index a76d5b5fd9e4..fdd676f4b80a 100644 --- a/locales/eo-UY.yml +++ b/locales/eo-UY.yml @@ -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" diff --git a/locales/fr-FR.yml b/locales/fr-FR.yml index 99d2b7bc071b..57300fbcde00 100644 --- a/locales/fr-FR.yml +++ b/locales/fr-FR.yml @@ -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" diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index 358da897d08d..5402a05e4feb 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -797,6 +797,8 @@ unread: "未読" filter: "フィルタ" controllPanel: "コントロールパネル" manageAccounts: "アカウントを管理" +makeReactionsPublic: "リアクション一覧を公開する" +makeReactionsPublicDescription: "あなたがしたリアクション一覧を誰でも見れるようにします。" _signup: almostThere: "ほとんど完了です" diff --git a/migration/1634486652000-user-public-reactions.ts b/migration/1634486652000-user-public-reactions.ts new file mode 100644 index 000000000000..da57a1326983 --- /dev/null +++ b/migration/1634486652000-user-public-reactions.ts @@ -0,0 +1,14 @@ +import {MigrationInterface, QueryRunner} from "typeorm"; + +export class userPublicReactions1634486652000 implements MigrationInterface { + name = 'userPublicReactions1634486652000' + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "user_profile" ADD "publicReactions" boolean NOT NULL DEFAULT false`); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "user_profile" DROP COLUMN "publicReactions"`); + } + +} diff --git a/migration/1634902659689-delete-log.ts b/migration/1634902659689-delete-log.ts new file mode 100644 index 000000000000..5264d585c749 --- /dev/null +++ b/migration/1634902659689-delete-log.ts @@ -0,0 +1,13 @@ +import {MigrationInterface, QueryRunner} from "typeorm"; + +export class deleteLog1634902659689 implements MigrationInterface { + name = 'deleteLog1634902659689' + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`DROP TABLE "log"`); + } + + public async down(queryRunner: QueryRunner): Promise { + } + +} diff --git a/package.json b/package.json index c1fcff712618..ea89c595b503 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "misskey", "author": "syuilo ", - "version": "12.92.0", + "version": "12.93.1", "codename": "indigo", "repository": { "type": "git", @@ -60,6 +60,9 @@ "@types/jsonld": "1.5.6", "@types/katex": "0.11.1", "@types/koa": "2.13.4", + "@types/koa__cors": "3.0.3", + "@types/koa__multer": "2.0.3", + "@types/koa__router": "8.0.8", "@types/koa-bodyparser": "4.3.3", "@types/koa-cors": "0.0.2", "@types/koa-favicon": "2.0.21", @@ -67,9 +70,6 @@ "@types/koa-mount": "4.0.1", "@types/koa-send": "4.1.3", "@types/koa-views": "7.0.0", - "@types/koa__cors": "3.0.3", - "@types/koa__multer": "2.0.3", - "@types/koa__router": "8.0.8", "@types/markdown-it": "12.2.3", "@types/matter-js": "0.17.5", "@types/mocha": "8.2.3", @@ -119,7 +119,9 @@ "cafy": "15.2.1", "cbor": "8.0.2", "chalk": "4.1.2", - "chart.js": "2.9.4", + "chart.js": "3.5.1", + "chartjs-adapter-date-fns": "2.0.0", + "chartjs-plugin-zoom": "1.1.1", "cli-highlight": "2.1.11", "compare-versions": "3.6.0", "concurrently": "6.3.0", @@ -127,6 +129,7 @@ "crc-32": "1.2.0", "css-loader": "6.4.0", "cssnano": "5.0.8", + "date-fns": "2.25.0", "dateformat": "4.5.1", "escape-regexp": "0.0.1", "eslint": "8.0.1", @@ -208,6 +211,7 @@ "seedrandom": "3.0.5", "sharp": "0.29.1", "speakeasy": "2.0.0", + "strict-event-emitter-types": "2.0.0", "stringz": "2.1.0", "style-loader": "3.3.0", "summaly": "2.4.1", diff --git a/src/client/components/chart.vue b/src/client/components/chart.vue new file mode 100644 index 000000000000..8eb9f93f33e9 --- /dev/null +++ b/src/client/components/chart.vue @@ -0,0 +1,628 @@ + + + diff --git a/src/client/components/form/input.vue b/src/client/components/form/input.vue index d7b6f77519db..591eda9ed557 100644 --- a/src/client/components/form/input.vue +++ b/src/client/components/form/input.vue @@ -33,7 +33,7 @@ diff --git a/src/client/components/mfm.ts b/src/client/components/mfm.ts index 2bdd7d46ee5e..f3411cadc3f7 100644 --- a/src/client/components/mfm.ts +++ b/src/client/components/mfm.ts @@ -185,7 +185,7 @@ export default defineComponent({ } } if (style == null) { - return h('span', {}, ['[', token.props.name, ' ', ...genEl(token.children), ']']); + return h('span', {}, ['$[', token.props.name, ' ', ...genEl(token.children), ']']); } else { return h('span', { style: 'display: inline-block;' + style, diff --git a/src/client/components/notification.vue b/src/client/components/notification.vue index bce6333d98bd..8c2787cf31cb 100644 --- a/src/client/components/notification.vue +++ b/src/client/components/notification.vue @@ -13,7 +13,8 @@ - + +
diff --git a/src/client/components/number-diff.vue b/src/client/components/number-diff.vue new file mode 100644 index 000000000000..690f89dd5993 --- /dev/null +++ b/src/client/components/number-diff.vue @@ -0,0 +1,47 @@ + + + + + diff --git a/src/client/components/post-form.vue b/src/client/components/post-form.vue index a1d89d2a2ed4..816a69e731ed 100644 --- a/src/client/components/post-form.vue +++ b/src/client/components/post-form.vue @@ -117,11 +117,28 @@ export default defineComponent({ type: String, required: false }, + initialVisibility: { + type: String, + required: false + }, + initialFiles: { + type: Array, + required: false + }, + initialLocalOnly: { + type: Boolean, + required: false + }, + visibleUsers: { + type: Array, + required: false, + default: () => [] + }, initialNote: { type: Object, required: false }, - instant: { + share: { type: Boolean, required: false, default: false @@ -150,8 +167,7 @@ export default defineComponent({ showPreview: false, cw: null, localOnly: this.$store.state.rememberNoteVisibility ? this.$store.state.localOnly : this.$store.state.defaultNoteLocalOnly, - visibility: this.$store.state.rememberNoteVisibility ? this.$store.state.visibility : this.$store.state.defaultNoteVisibility, - visibleUsers: [], + visibility: (this.$store.state.rememberNoteVisibility ? this.$store.state.visibility : this.$store.state.defaultNoteVisibility) as typeof noteVisibilities[number], autocomplete: null, draghover: false, quoteId: null, @@ -246,6 +262,18 @@ export default defineComponent({ this.text = this.initialText; } + if (this.initialVisibility) { + this.visibility = this.initialVisibility; + } + + if (this.initialFiles) { + this.files = this.initialFiles; + } + + if (typeof this.initialLocalOnly === 'boolean') { + this.localOnly = this.initialLocalOnly; + } + if (this.mention) { this.text = this.mention.host ? `@${this.mention.username}@${toASCII(this.mention.host)}` : `@${this.mention.username}`; this.text += ' '; @@ -321,7 +349,7 @@ export default defineComponent({ this.$nextTick(() => { // 書きかけの投稿を復元 - if (!this.instant && !this.mention && !this.specified) { + if (!this.share && !this.mention && !this.specified) { const draft = JSON.parse(localStorage.getItem('drafts') || '{}')[this.draftKey]; if (draft) { this.text = draft.data.text; @@ -582,8 +610,6 @@ export default defineComponent({ }, saveDraft() { - if (this.instant) return; - const data = JSON.parse(localStorage.getItem('drafts') || '{}'); data[this.draftKey] = { diff --git a/src/client/components/queue-chart.vue b/src/client/components/queue-chart.vue new file mode 100644 index 000000000000..59c9723f89b7 --- /dev/null +++ b/src/client/components/queue-chart.vue @@ -0,0 +1,212 @@ + + + + + diff --git a/src/client/components/tab.vue b/src/client/components/tab.vue index ce86af8f9532..c629727358c8 100644 --- a/src/client/components/tab.vue +++ b/src/client/components/tab.vue @@ -36,7 +36,7 @@ export default defineComponent({ > button { flex: 1; padding: 10px 8px; - border-radius: 6px; + border-radius: var(--radius); &:disabled { opacity: 1 !important; diff --git a/src/client/components/ui/container.vue b/src/client/components/ui/container.vue index 194009909627..14673dfcd71f 100644 --- a/src/client/components/ui/container.vue +++ b/src/client/components/ui/container.vue @@ -1,5 +1,5 @@ @@ -54,5 +54,9 @@ export default defineComponent({ > .version { margin: 1em 0; } + + > .gotIt { + margin: 8px 0 0 0; + } } diff --git a/src/client/os.ts b/src/client/os.ts index 7ae774dd9231..743d2d131fd7 100644 --- a/src/client/os.ts +++ b/src/client/os.ts @@ -372,12 +372,17 @@ export async function openEmojiPicker(src?: HTMLElement, opts, initialTextarea: }); } -export function popupMenu(items: any[] | Ref, src?: HTMLElement, options?: { align?: string; viaKeyboard?: boolean }) { +export function popupMenu(items: any[] | Ref, src?: HTMLElement, options?: { + align?: string; + width?: number; + viaKeyboard?: boolean; +}) { return new Promise((resolve, reject) => { let dispose; popup(import('@client/components/ui/popup-menu.vue'), { items, src, + width: options?.width, align: options?.align, viaKeyboard: options?.viaKeyboard }, { diff --git a/src/client/pages/instance/abuses.vue b/src/client/pages/admin/abuses.vue similarity index 100% rename from src/client/pages/instance/abuses.vue rename to src/client/pages/admin/abuses.vue diff --git a/src/client/pages/instance/ads.vue b/src/client/pages/admin/ads.vue similarity index 100% rename from src/client/pages/instance/ads.vue rename to src/client/pages/admin/ads.vue diff --git a/src/client/pages/instance/announcements.vue b/src/client/pages/admin/announcements.vue similarity index 100% rename from src/client/pages/instance/announcements.vue rename to src/client/pages/admin/announcements.vue diff --git a/src/client/pages/instance/bot-protection.vue b/src/client/pages/admin/bot-protection.vue similarity index 100% rename from src/client/pages/instance/bot-protection.vue rename to src/client/pages/admin/bot-protection.vue diff --git a/src/client/pages/instance/database.vue b/src/client/pages/admin/database.vue similarity index 100% rename from src/client/pages/instance/database.vue rename to src/client/pages/admin/database.vue diff --git a/src/client/pages/instance/email-settings.vue b/src/client/pages/admin/email-settings.vue similarity index 100% rename from src/client/pages/instance/email-settings.vue rename to src/client/pages/admin/email-settings.vue diff --git a/src/client/pages/instance/emoji-edit-dialog.vue b/src/client/pages/admin/emoji-edit-dialog.vue similarity index 100% rename from src/client/pages/instance/emoji-edit-dialog.vue rename to src/client/pages/admin/emoji-edit-dialog.vue diff --git a/src/client/pages/instance/emojis.vue b/src/client/pages/admin/emojis.vue similarity index 100% rename from src/client/pages/instance/emojis.vue rename to src/client/pages/admin/emojis.vue diff --git a/src/client/pages/instance/file-dialog.vue b/src/client/pages/admin/file-dialog.vue similarity index 100% rename from src/client/pages/instance/file-dialog.vue rename to src/client/pages/admin/file-dialog.vue diff --git a/src/client/pages/instance/files-settings.vue b/src/client/pages/admin/files-settings.vue similarity index 100% rename from src/client/pages/instance/files-settings.vue rename to src/client/pages/admin/files-settings.vue diff --git a/src/client/pages/instance/files.vue b/src/client/pages/admin/files.vue similarity index 100% rename from src/client/pages/instance/files.vue rename to src/client/pages/admin/files.vue diff --git a/src/client/pages/instance/index.vue b/src/client/pages/admin/index.vue similarity index 89% rename from src/client/pages/instance/index.vue rename to src/client/pages/admin/index.vue index 7b07bf2dde5c..416e68206c47 100644 --- a/src/client/pages/instance/index.vue +++ b/src/client/pages/admin/index.vue @@ -7,8 +7,8 @@
- {{ $ts.noMaintainerInformationWarning }} {{ $ts.configure }} - {{ $ts.noBotProtectionWarning }} {{ $ts.configure }} + {{ $ts.noMaintainerInformationWarning }} {{ $ts.configure }} + {{ $ts.noBotProtectionWarning }} {{ $ts.configure }} @@ -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')); diff --git a/src/client/pages/instance/instance-block.vue b/src/client/pages/admin/instance-block.vue similarity index 100% rename from src/client/pages/instance/instance-block.vue rename to src/client/pages/admin/instance-block.vue diff --git a/src/client/pages/instance/instance.vue b/src/client/pages/admin/instance.vue similarity index 54% rename from src/client/pages/instance/instance.vue rename to src/client/pages/admin/instance.vue index 6117f090de85..5572fbbf75eb 100644 --- a/src/client/pages/instance/instance.vue +++ b/src/client/pages/admin/instance.vue @@ -78,17 +78,17 @@ {{ $ts.charts }}
- - - - - - - - - - - + + + + + + + + + + + @@ -97,7 +97,7 @@
- +
@@ -124,28 +124,17 @@ + + diff --git a/src/client/pages/instance/proxy-account.vue b/src/client/pages/admin/proxy-account.vue similarity index 100% rename from src/client/pages/instance/proxy-account.vue rename to src/client/pages/admin/proxy-account.vue diff --git a/src/client/pages/admin/queue.chart.vue b/src/client/pages/admin/queue.chart.vue new file mode 100644 index 000000000000..084181a60696 --- /dev/null +++ b/src/client/pages/admin/queue.chart.vue @@ -0,0 +1,102 @@ + + + + + diff --git a/src/client/pages/instance/queue.vue b/src/client/pages/admin/queue.vue similarity index 100% rename from src/client/pages/instance/queue.vue rename to src/client/pages/admin/queue.vue diff --git a/src/client/pages/instance/relays.vue b/src/client/pages/admin/relays.vue similarity index 100% rename from src/client/pages/instance/relays.vue rename to src/client/pages/admin/relays.vue diff --git a/src/client/pages/instance/security.vue b/src/client/pages/admin/security.vue similarity index 98% rename from src/client/pages/instance/security.vue rename to src/client/pages/admin/security.vue index a854b6dbd0a9..4365b6800c5b 100644 --- a/src/client/pages/instance/security.vue +++ b/src/client/pages/admin/security.vue @@ -1,7 +1,7 @@ @@ -58,11 +60,11 @@ export default defineComponent({ methods: { doExport(target) { os.api( - target == 'notes' ? 'i/export-notes' : - target == 'following' ? 'i/export-following' : - target == 'blocking' ? 'i/export-blocking' : - target == 'user-lists' ? 'i/export-user-lists' : - target == 'mute' ? 'i/export-mute' : + target === 'notes' ? 'i/export-notes' : + target === 'following' ? 'i/export-following' : + target === 'blocking' ? 'i/export-blocking' : + target === 'user-lists' ? 'i/export-user-lists' : + target === 'muting' ? 'i/export-mute' : null, {}) .then(() => { os.dialog({ @@ -81,8 +83,10 @@ export default defineComponent({ const file = await selectFile(e.currentTarget || e.target); os.api( - target == 'following' ? 'i/import-following' : - target == 'user-lists' ? 'i/import-user-lists' : + target === 'following' ? 'i/import-following' : + target === 'user-lists' ? 'i/import-user-lists' : + target === 'muting' ? 'i/import-muting' : + target === 'blocking' ? 'i/import-blocking' : null, { fileId: file.id }).then(() => { diff --git a/src/client/pages/settings/privacy.vue b/src/client/pages/settings/privacy.vue index 775615857869..2a60ae1f4658 100644 --- a/src/client/pages/settings/privacy.vue +++ b/src/client/pages/settings/privacy.vue @@ -5,6 +5,10 @@ {{ $ts.autoAcceptFollowed }} + + {{ $ts.makeReactionsPublic }} + + {{ $ts.hideOnlineStatus }} @@ -64,6 +68,7 @@ export default defineComponent({ noCrawle: false, isExplorable: false, hideOnlineStatus: false, + publicReactions: false, } }, @@ -80,6 +85,7 @@ export default defineComponent({ this.noCrawle = this.$i.noCrawle; this.isExplorable = this.$i.isExplorable; this.hideOnlineStatus = this.$i.hideOnlineStatus; + this.publicReactions = this.$i.publicReactions; }, mounted() { @@ -94,6 +100,7 @@ export default defineComponent({ noCrawle: !!this.noCrawle, isExplorable: !!this.isExplorable, hideOnlineStatus: !!this.hideOnlineStatus, + publicReactions: !!this.publicReactions, }); } } diff --git a/src/client/pages/settings/theme.manage.vue b/src/client/pages/settings/theme.manage.vue index da21a47a50aa..1a11a664f013 100644 --- a/src/client/pages/settings/theme.manage.vue +++ b/src/client/pages/settings/theme.manage.vue @@ -10,13 +10,13 @@ + @@ -222,6 +223,7 @@ export default defineComponent({ MkTab, MkInfo, XFollowList: defineAsyncComponent(() => import('./follow-list.vue')), + XReactions: defineAsyncComponent(() => import('./reactions.vue')), XClips: defineAsyncComponent(() => import('./clips.vue')), XPages: defineAsyncComponent(() => import('./pages.vue')), XGallery: defineAsyncComponent(() => import('./gallery.vue')), @@ -267,7 +269,12 @@ export default defineComponent({ title: this.$ts.overview, icon: 'fas fa-home', onClick: () => { this.$router.push('/@' + getAcct(this.user)); }, - }, { + }, ...(this.$i && (this.$i.id === this.user.id)) || this.user.publicReactions ? [{ + active: this.page === 'reactions', + title: this.$ts.reaction, + icon: 'fas fa-laugh', + onClick: () => { this.$router.push('/@' + getAcct(this.user) + '/reactions'); }, + }] : [], { active: this.page === 'clips', title: this.$ts.clips, icon: 'fas fa-paperclip', diff --git a/src/client/pages/user/reactions.vue b/src/client/pages/user/reactions.vue new file mode 100644 index 000000000000..5ac7e0102706 --- /dev/null +++ b/src/client/pages/user/reactions.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/src/client/router.ts b/src/client/router.ts index 56dc94866940..f588bb04fc1b 100644 --- a/src/client/router.ts +++ b/src/client/router.ts @@ -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 }) }, diff --git a/src/client/scripts/hpml/lib.ts b/src/client/scripts/hpml/lib.ts index 150a04732f6d..2a1ac73a405a 100644 --- a/src/client/scripts/hpml/lib.ts +++ b/src/client/scripts/hpml/lib.ts @@ -1,11 +1,11 @@ import * as tinycolor from 'tinycolor2'; -import Chart from 'chart.js'; import { Hpml } from './evaluator'; import { values, utils } from '@syuilo/aiscript'; 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) => { @@ -18,6 +18,7 @@ Chart.pluginService.register({ } } }); +*/ export function initAiLib(hpml: Hpml) { return { @@ -49,11 +50,12 @@ export function initAiLib(hpml: Hpml) { ])); }), 'MkPages:chart': values.FN_NATIVE(([id, opts]) => { + /* TODO utils.assertString(id); utils.assertObject(opts); const canvas = hpml.canvases[id.value]; const color = getComputedStyle(document.documentElement).getPropertyValue('--accent'); - Chart.defaults.global.defaultFontColor = '#555'; + Chart.defaults.color = '#555'; const chart = new Chart(canvas, { type: opts.value.get('type').value, data: { @@ -122,6 +124,7 @@ export function initAiLib(hpml: Hpml) { }) } }); + */ }) }; } diff --git a/src/client/scripts/theme.ts b/src/client/scripts/theme.ts index e79d54fa6dcb..8b6382129357 100644 --- a/src/client/scripts/theme.ts +++ b/src/client/scripts/theme.ts @@ -20,12 +20,14 @@ export const builtinThemes = [ require('@client/themes/l-apricot.json5'), require('@client/themes/l-rainy.json5'), require('@client/themes/l-vivid.json5'), + require('@client/themes/l-sushi.json5'), require('@client/themes/d-dark.json5'), require('@client/themes/d-persimmon.json5'), require('@client/themes/d-astro.json5'), require('@client/themes/d-future.json5'), require('@client/themes/d-botanical.json5'), + require('@client/themes/d-pumpkin.json5'), require('@client/themes/d-black.json5'), ] as Theme[]; diff --git a/src/client/themes/d-astro.json5 b/src/client/themes/d-astro.json5 index 04bb65ee2ca6..63dae2540c98 100644 --- a/src/client/themes/d-astro.json5 +++ b/src/client/themes/d-astro.json5 @@ -1,7 +1,7 @@ { id: '080a01c5-377d-4fbb-88cc-6bb5d04977ea', base: 'dark', - name: 'Mi Astro', + name: 'Mi Astro Dark', author: 'syuilo', props: { bg: '#232125', diff --git a/src/client/themes/d-future.json5 b/src/client/themes/d-future.json5 index 18826091211a..b6fa1ab0c18d 100644 --- a/src/client/themes/d-future.json5 +++ b/src/client/themes/d-future.json5 @@ -1,7 +1,7 @@ { id: '32a637ef-b47a-4775-bb7b-bacbb823f865', - name: 'Mi Future', + name: 'Mi Future Dark', author: 'syuilo', base: 'dark', diff --git a/src/client/themes/d-persimmon.json5 b/src/client/themes/d-persimmon.json5 index 11e9994f5e11..e36265ff10ce 100644 --- a/src/client/themes/d-persimmon.json5 +++ b/src/client/themes/d-persimmon.json5 @@ -1,7 +1,7 @@ { id: 'c503d768-7c70-4db2-a4e6-08264304bc8d', - name: 'Mi Persimmon', + name: 'Mi Persimmon Dark', author: 'syuilo', base: 'dark', diff --git a/src/client/themes/d-pumpkin.json5 b/src/client/themes/d-pumpkin.json5 new file mode 100644 index 000000000000..064ca4577b65 --- /dev/null +++ b/src/client/themes/d-pumpkin.json5 @@ -0,0 +1,88 @@ +{ + id: '0b64fef3-02c7-20b5-dd87-b3f77e2b4301', + + name: 'Mi Pumpkin Dark', + author: 'syuilo', + + base: 'dark', + + props: { + X2: ':darken<2<@panel', + X3: 'rgba(255, 255, 255, 0.05)', + X4: 'rgba(255, 255, 255, 0.1)', + X5: 'rgba(255, 255, 255, 0.05)', + X6: 'rgba(255, 255, 255, 0.15)', + X7: 'rgba(255, 255, 255, 0.05)', + X8: ':lighten<5<@accent', + X9: ':darken<5<@accent', + bg: 'rgb(37, 32, 47)', + fg: '#e0d5c0', + X10: ':alpha<0.4<@accent', + X11: 'rgba(0, 0, 0, 0.3)', + X12: 'rgba(255, 255, 255, 0.1)', + X13: 'rgba(255, 255, 255, 0.15)', + X14: ':alpha<0.5<@navBg', + X15: ':alpha<0<@panel', + X16: ':alpha<0.7<@panel', + X17: ':alpha<0.8<@bg', + cwBg: '#687390', + cwFg: '#393f4f', + link: 'rgb(172, 193, 68)', + warn: '#ecb637', + badge: '#31b1ce', + error: '#ec4137', + focus: ':alpha<0.3<@accent', + navBg: '@panel', + navFg: '@fg', + panel: ':lighten<3<@bg', + popup: ':lighten<3<@panel', + accent: 'rgb(242, 133, 36)', + header: ':alpha<0.7<@panel', + infoBg: '#253142', + infoFg: '#fff', + renote: 'rgb(110, 179, 72)', + shadow: 'rgba(0, 0, 0, 0.3)', + divider: 'rgba(255, 255, 255, 0.1)', + hashtag: 'rgb(188, 90, 255)', + mention: 'rgb(72, 179, 139)', + modalBg: 'rgba(0, 0, 0, 0.5)', + success: '#86b300', + buttonBg: 'rgba(255, 255, 255, 0.05)', + switchBg: 'rgba(255, 255, 255, 0.15)', + acrylicBg: ':alpha<0.5<@bg', + cwHoverBg: '#707b97', + indicator: '@accent', + mentionMe: '@accent', + messageBg: '@bg', + navActive: '@accent', + accentedBg: ':alpha<0.15<@accent', + fgOnAccent: '#000', + infoWarnBg: '#42321c', + infoWarnFg: '#ffbd3e', + navHoverFg: ':lighten<17<@fg', + dateLabelFg: '@fg', + inputBorder: 'rgba(255, 255, 255, 0.1)', + panelBorder: '" solid 1px var(--divider)', + accentDarken: ':darken<10<@accent', + acrylicPanel: ':alpha<0.5<@panel', + navIndicator: '@indicator', + accentLighten: ':lighten<10<@accent', + buttonHoverBg: 'rgba(255, 255, 255, 0.1)', + driveFolderBg: ':alpha<0.3<@accent', + fgHighlighted: ':lighten<3<@fg', + fgTransparent: ':alpha<0.5<@fg', + panelHeaderBg: ':lighten<3<@panel', + panelHeaderFg: '@fg', + buttonGradateA: '@accent', + buttonGradateB: ':hue<20<@accent', + htmlThemeColor: '@bg', + panelHighlight: ':lighten<3<@panel', + listItemHoverBg: 'rgba(255, 255, 255, 0.03)', + scrollbarHandle: 'rgba(255, 255, 255, 0.2)', + inputBorderHover: 'rgba(255, 255, 255, 0.2)', + wallpaperOverlay: 'rgba(0, 0, 0, 0.5)', + fgTransparentWeak: ':alpha<0.75<@fg', + panelHeaderDivider: 'rgba(0, 0, 0, 0)', + scrollbarHandleHover: 'rgba(255, 255, 255, 0.4)', + }, +} diff --git a/src/client/themes/l-apricot.json5 b/src/client/themes/l-apricot.json5 index 74cb24d407f8..1ed552557585 100644 --- a/src/client/themes/l-apricot.json5 +++ b/src/client/themes/l-apricot.json5 @@ -1,7 +1,7 @@ { id: '0ff48d43-aab3-46e7-ab12-8492110d2e2b', - name: 'Mi Apricot', + name: 'Mi Apricot Light', author: 'syuilo', base: 'light', diff --git a/src/client/themes/l-rainy.json5 b/src/client/themes/l-rainy.json5 index 1edde1cabfa6..283dd74c6cfe 100644 --- a/src/client/themes/l-rainy.json5 +++ b/src/client/themes/l-rainy.json5 @@ -1,7 +1,7 @@ { id: 'a58a0abb-ff8c-476a-8dec-0ad7837e7e96', - name: 'Mi Rainy', + name: 'Mi Rainy Light', author: 'syuilo', base: 'light', diff --git a/src/client/themes/l-sushi.json5 b/src/client/themes/l-sushi.json5 new file mode 100644 index 000000000000..5846927d6535 --- /dev/null +++ b/src/client/themes/l-sushi.json5 @@ -0,0 +1,18 @@ +{ + id: '213273e5-7d20-d5f0-6e36-1b6a4f67115c', + + name: 'Mi Sushi Light', + author: 'syuilo', + + base: 'light', + + props: { + accent: '#e36749', + bg: '#f0eee9', + fg: '#5f5f5f', + renote: '@accent', + link: '@accent', + mention: '@accent', + hashtag: '#229e82', + }, +} diff --git a/src/client/themes/l-vivid.json5 b/src/client/themes/l-vivid.json5 index 96f0939248c0..6bc91641f6e6 100644 --- a/src/client/themes/l-vivid.json5 +++ b/src/client/themes/l-vivid.json5 @@ -1,7 +1,7 @@ { id: '6128c2a9-5c54-43fe-a47d-17942356470b', - name: 'Mi Vivid', + name: 'Mi Vivid Light', author: 'syuilo', base: 'light', diff --git a/src/client/ui/_common_/sidebar.vue b/src/client/ui/_common_/sidebar.vue index d00327b0966f..ec2a17ab861a 100644 --- a/src/client/ui/_common_/sidebar.vue +++ b/src/client/ui/_common_/sidebar.vue @@ -25,7 +25,7 @@
- + {{ $ts.instance }}