From 014440850014ee86d766bb07467c2970b17a1fc6 Mon Sep 17 00:00:00 2001 From: syuilo Date: Wed, 25 Nov 2020 21:31:34 +0900 Subject: [PATCH] nanka iroiro (#6853) * wip * Update maps.ts * wip * wip * wip * wip * Update base.vue * wip * wip * wip * wip * Update link.vue * wip * wip * wip * wip * wip * wip * wip * wip * wip * Update privacy.vue * wip * wip * wip * wip * Update range.vue * wip * wip * wip * wip * Update profile.vue * wip * Update a.vue * Update index.vue * wip * Update sidebar.vue * wip * wip * Update account-info.vue * Update a.vue * wip * wip * Update sounds.vue * wip * wip * wip * wip * wip * wip * wip * wip * Update account-info.vue * Update account-info.vue * wip * wip * wip * Update d-persimmon.json5 * wip --- locales/ja-JP.yml | 51 +- .../1605585339718-instance-pinned-pages.ts | 2 +- migration/1605965516823-instance-images.ts | 16 + migration/1606191203881-no-crawle.ts | 16 + src/client/assets/sounds/syuilo/kick.mp3 | Bin 0 -> 15672 bytes src/client/assets/sounds/syuilo/snare.mp3 | Bin 0 -> 26121 bytes src/client/cold-storage.ts | 34 + src/client/components/form-dialog.vue | 63 +- src/client/components/form/base.vue | 56 ++ src/client/components/form/button.vue | 81 +++ src/client/components/form/form.scss | 34 + src/client/components/form/group.vue | 42 ++ src/client/components/form/input.vue | 306 +++++++++ src/client/components/form/key-value-view.vue | 30 + src/client/components/form/link.vue | 90 +++ src/client/components/form/pagination.vue | 42 ++ src/client/components/form/radios.vue | 106 ++++ src/client/components/form/range.vue | 122 ++++ src/client/components/form/select.vue | 147 +++++ src/client/components/form/switch.vue | 132 ++++ src/client/components/form/textarea.vue | 136 ++++ src/client/components/form/tuple.vue | 36 ++ src/client/components/media-image.vue | 2 +- src/client/components/media-video.vue | 2 +- .../components/taskmanager.api-window.vue | 5 +- src/client/components/taskmanager.vue | 3 +- src/client/components/timeline.vue | 3 +- src/client/components/ui/range.vue | 4 +- src/client/components/ui/switch.vue | 6 +- src/client/components/ui/textarea.vue | 3 +- src/client/init.ts | 11 +- src/client/os.ts | 10 +- src/client/pages/announcements.vue | 2 +- src/client/pages/instance/settings.vue | 8 + src/client/pages/messaging/messaging-room.vue | 3 +- src/client/pages/reversi/game.board.vue | 13 +- .../settings/{security.2fa.vue => 2fa.vue} | 13 + src/client/pages/settings/account-info.vue | 185 ++++++ src/client/pages/settings/api.vue | 27 +- src/client/pages/{ => settings}/apps.vue | 60 +- src/client/pages/settings/deck.vue | 90 +++ src/client/pages/settings/email-address.vue | 71 +++ src/client/pages/settings/email.vue | 52 ++ src/client/pages/settings/general.vue | 211 +++---- src/client/pages/settings/index.vue | 149 ++--- src/client/pages/settings/notifications.vue | 30 +- src/client/pages/settings/other.vue | 53 +- src/client/pages/settings/privacy.vue | 56 +- src/client/pages/settings/profile.vue | 240 +++++--- src/client/pages/settings/reaction.vue | 69 +-- src/client/pages/settings/security.vue | 85 ++- src/client/pages/settings/sidebar.vue | 56 +- src/client/pages/settings/sounds.vue | 208 +++---- src/client/pages/settings/theme.install.vue | 106 ++++ src/client/pages/settings/theme.manage.vue | 103 ++++ src/client/pages/settings/theme.vue | 581 ++++++++---------- src/client/pages/settings/word-mute.vue | 48 +- src/client/pages/user/follow-list.vue | 2 +- src/client/pages/user/index.activity.vue | 18 +- src/client/pages/user/index.photos.vue | 42 +- src/client/pages/user/index.vue | 570 ++++++++--------- src/client/pages/welcome.entrance.vue | 28 - src/client/router.ts | 3 +- src/client/scripts/sound.ts | 24 + src/client/scripts/theme.ts | 13 +- src/client/store.ts | 10 +- src/client/style.scss | 6 +- src/client/themes/_dark.json5 | 1 + src/client/themes/_light.json5 | 1 + src/client/themes/d-battery-saver.json5 | 18 - src/client/themes/d-black.json5 | 24 +- src/client/themes/d-blue.json5 | 29 - .../themes/{d-red.json5 => d-dark.json5} | 14 +- src/client/themes/d-green.json5 | 29 - src/client/themes/d-persimmon.json5 | 12 +- src/client/themes/l-apricot.json5 | 2 +- src/client/themes/l-blue.json5 | 21 - src/client/themes/l-green.json5 | 21 - .../themes/{l-white.json5 => l-light.json5} | 2 +- src/client/themes/l-red.json5 | 21 - src/client/ui/_common_/common.vue | 5 +- src/client/ui/visitor.vue | 202 +----- src/client/ui/visitor/a.vue | 357 +++++++++++ src/client/ui/visitor/b.vue | 372 +++++++++++ src/client/widgets/digital-clock.vue | 3 +- src/games/reversi/maps.ts | 16 + src/models/entities/meta.ts | 14 +- src/models/entities/note-reaction.ts | 2 + src/models/entities/user-profile.ts | 6 + src/models/repositories/drive-file.ts | 8 +- src/models/repositories/user.ts | 1 + src/server/api/endpoints/admin/update-meta.ts | 16 + src/server/api/endpoints/drive.ts | 2 +- src/server/api/endpoints/i/update.ts | 8 + src/server/api/endpoints/meta.ts | 2 + src/server/api/endpoints/users/stats.ts | 144 +++++ src/server/index.ts | 10 +- src/server/web/index.ts | 6 + src/server/web/views/clip.pug | 3 + src/server/web/views/note.pug | 6 +- src/server/web/views/page.pug | 3 + src/server/web/views/user.pug | 6 +- src/services/chart/charts/classes/drive.ts | 4 +- src/services/chart/charts/classes/instance.ts | 2 +- .../chart/charts/classes/per-user-drive.ts | 2 +- src/services/drive/add-file.ts | 2 +- 106 files changed, 4489 insertions(+), 1734 deletions(-) create mode 100644 migration/1605965516823-instance-images.ts create mode 100644 migration/1606191203881-no-crawle.ts create mode 100644 src/client/assets/sounds/syuilo/kick.mp3 create mode 100644 src/client/assets/sounds/syuilo/snare.mp3 create mode 100644 src/client/cold-storage.ts create mode 100644 src/client/components/form/base.vue create mode 100644 src/client/components/form/button.vue create mode 100644 src/client/components/form/form.scss create mode 100644 src/client/components/form/group.vue create mode 100644 src/client/components/form/input.vue create mode 100644 src/client/components/form/key-value-view.vue create mode 100644 src/client/components/form/link.vue create mode 100644 src/client/components/form/pagination.vue create mode 100644 src/client/components/form/radios.vue create mode 100644 src/client/components/form/range.vue create mode 100644 src/client/components/form/select.vue create mode 100644 src/client/components/form/switch.vue create mode 100644 src/client/components/form/textarea.vue create mode 100644 src/client/components/form/tuple.vue rename src/client/pages/settings/{security.2fa.vue => 2fa.vue} (96%) create mode 100644 src/client/pages/settings/account-info.vue rename src/client/pages/{ => settings}/apps.vue (63%) create mode 100644 src/client/pages/settings/deck.vue create mode 100644 src/client/pages/settings/email-address.vue create mode 100644 src/client/pages/settings/email.vue create mode 100644 src/client/pages/settings/theme.install.vue create mode 100644 src/client/pages/settings/theme.manage.vue create mode 100644 src/client/scripts/sound.ts delete mode 100644 src/client/themes/d-battery-saver.json5 delete mode 100644 src/client/themes/d-blue.json5 rename src/client/themes/{d-red.json5 => d-dark.json5} (65%) delete mode 100644 src/client/themes/d-green.json5 delete mode 100644 src/client/themes/l-blue.json5 delete mode 100644 src/client/themes/l-green.json5 rename src/client/themes/{l-white.json5 => l-light.json5} (95%) delete mode 100644 src/client/themes/l-red.json5 create mode 100644 src/client/ui/visitor/a.vue create mode 100644 src/client/ui/visitor/b.vue create mode 100644 src/server/api/endpoints/users/stats.ts diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index 8a4d346bc2..e99d9b5350 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -127,6 +127,7 @@ cacheRemoteFilesDescription: "この設定を無効にすると、リモート flagAsBot: "Botとして設定" flagAsBotDescription: "このアカウントがプログラムによって運用される場合は、このフラグをオンにします。オンにすると、反応の連鎖を防ぐためのフラグとして他の開発者に役立ったり、Misskeyのシステム上での扱いがBotに合ったものになります。" flagAsCat: "Catとして設定" +flagAsCatDescription: "このアカウントが猫であることを示す場合は、このフラグをオンにします。" autoAcceptFollowed: "フォロー中ユーザーからのフォロリクを自動承認" addAcount: "アカウント追加" loginFailed: "ログインに失敗しました" @@ -440,6 +441,7 @@ useOsNativeEmojis: "OSネイティブの絵文字を使用" youHaveNoGroups: "グループがありません" joinOrCreateGroup: "既存のグループに招待してもらうか、新しくグループを作成してください。" noHistory: "履歴はありません" +signinHistory: "ログイン履歴" disableAnimatedMfm: "動きのあるMFMを無効にする" doing: "やっています" category: "カテゴリ" @@ -492,6 +494,7 @@ none: "なし" showInPage: "ページで表示" popout: "ポップアウト" volume: "音量" +masterVolume: "マスター音量" details: "詳細" chooseEmoji: "絵文字を選択" unableToProcess: "操作を完了できません" @@ -564,7 +567,8 @@ useStarForReactionFallback: "リアクション絵文字が不明な場合、代 emailConfig: "メールサーバー設定" enableEmail: "メール配信機能を有効化する" emailConfigInfo: "メールアドレスの確認やパスワードリセットの際に使います" -email: "メールアドレス" +email: "メール" +emailAddress: "メールアドレス" smtpConfig: "SMTP サーバーの設定" smtpHost: "ホスト" smtpPort: "ポート" @@ -596,6 +600,7 @@ regenerateLoginTokenDescription: "ログインに使用される内部トーク setMultipleBySeparatingWithSpace: "スペースで区切って複数設定できます。" fileIdOrUrl: "ファイルIDまたはURL" chatOpenBehavior: "チャットを開くときの動作" +behavior: "動作" sample: "サンプル" abuseReports: "通報" reportAbuse: "通報" @@ -619,6 +624,42 @@ createNew: "新規作成" optional: "任意" createNewClip: "新しいクリップを作成" public: "パブリック" +i18nInfo: "Misskeyは有志によって様々な言語に翻訳されています。{link}で翻訳に協力できます。" +manageAccessTokens: "アクセストークンの管理" +accountInfo: "アカウント情報" +notesCount: "ノートの数" +repliesCount: "返信した数" +renotesCount: "Renoteした数" +repliedCount: "返信された数" +renotedCount: "Renoteされた数" +followingCount: "フォロー数" +followersCount: "フォロワー数" +sentReactionsCount: "リアクションした数" +receivedReactionsCount: "リアクションされた数" +pollVotesCount: "アンケートに投票した数" +pollVotedCount: "アンケートに投票された数" +yes: "はい" +no: "いいえ" +driveFilesCount: "ドライブのファイル数" +driveUsage: "ドライブ使用量" +noCrawle: "クローラーによるインデックスを拒否" +noCrawleDescription: "検索エンジンにあなたのユーザーページ、ノート、Pagesなどのコンテンツを登録(インデックス)しないよう要請します。" +lockedAccountInfo: "フォローを承認制にしても、ノートの公開範囲を「フォロワー」にしない限り、誰でもあなたのノートを見ることができます。" +alwaysMarkSensitive: "デフォルトでメディアを閲覧注意にする" +loadRawImages: "添付画像のサムネイルをオリジナル画質にする" +disableShowingAnimatedImages: "アニメーション画像を再生しない" +verificationEmailSent: "確認のメールを送信しました。メールに記載されたリンクにアクセスして、設定を完了してください。" +notSet: "未設定" +emailVerified: "メールアドレスが確認されました" +noteFavoritesCount: "お気に入りノートの数" +pageLikesCount: "Pageにいいねした数" +pageLikedCount: "Pageにいいねされた数" +reversiCount: "リバーシの対局数" + +_nsfw: + respect: "閲覧注意のメディアは隠す" + ignore: "閲覧注意のメディアを隠さない" + force: "常にメディアを隠す" _mfm: cheatSheet: "MFMチートシート" @@ -745,6 +786,8 @@ _theme: manage: "テーマの管理" code: "テーマコード" installed: "{name}をインストールしました" + installedThemes: "インストールされたテーマ" + builtinThemes: "標準のテーマ" alreadyInstalled: "そのテーマは既にインストールされています" invalid: "テーマの形式が間違っています" make: "テーマを作る" @@ -820,6 +863,8 @@ _sfx: chatBg: "チャット(バックグラウンド)" antenna: "アンテナ受信" channel: "チャンネル通知" + reversiPutBlack: "リバーシ: 黒が打ったとき" + reversiPutWhite: "リバーシ: 白が打ったとき" _ago: unknown: "謎" @@ -999,7 +1044,9 @@ _profile: username: "ユーザー名" description: "自己紹介" youCanIncludeHashtags: "ハッシュタグを含めることができます。" - metadata: "補足情報" + metadata: "追加情報" + metadataEdit: "追加情報を編集" + metadataDescription: "プロフィールに表として4つまでの追加情報を表示することができます。" metadataLabel: "ラベル" metadataContent: "内容" diff --git a/migration/1605585339718-instance-pinned-pages.ts b/migration/1605585339718-instance-pinned-pages.ts index 2f0ebab235..f593461306 100644 --- a/migration/1605585339718-instance-pinned-pages.ts +++ b/migration/1605585339718-instance-pinned-pages.ts @@ -4,7 +4,7 @@ export class instancePinnedPages1605585339718 implements MigrationInterface { name = 'instancePinnedPages1605585339718' public async up(queryRunner: QueryRunner): Promise { - await queryRunner.query(`ALTER TABLE "meta" ADD "pinnedPages" character varying(512) array NOT NULL DEFAULT '{"/announcements", "/featured", "/channels", "/pages", "/explore", "/games/reversi", "/about-misskey"}'::varchar[]`); + await queryRunner.query(`ALTER TABLE "meta" ADD "pinnedPages" character varying(512) array NOT NULL DEFAULT '{"/featured", "/channels", "/explore", "/pages", "/about-misskey"}'::varchar[]`); } public async down(queryRunner: QueryRunner): Promise { diff --git a/migration/1605965516823-instance-images.ts b/migration/1605965516823-instance-images.ts new file mode 100644 index 0000000000..bf8d408563 --- /dev/null +++ b/migration/1605965516823-instance-images.ts @@ -0,0 +1,16 @@ +import {MigrationInterface, QueryRunner} from "typeorm"; + +export class instanceImages1605965516823 implements MigrationInterface { + name = 'instanceImages1605965516823' + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "meta" ADD "backgroundImageUrl" character varying(512)`); + await queryRunner.query(`ALTER TABLE "meta" ADD "logoImageUrl" character varying(512)`); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "logoImageUrl"`); + await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "backgroundImageUrl"`); + } + +} diff --git a/migration/1606191203881-no-crawle.ts b/migration/1606191203881-no-crawle.ts new file mode 100644 index 0000000000..accc8f8fe2 --- /dev/null +++ b/migration/1606191203881-no-crawle.ts @@ -0,0 +1,16 @@ +import {MigrationInterface, QueryRunner} from "typeorm"; + +export class noCrawle1606191203881 implements MigrationInterface { + name = 'noCrawle1606191203881' + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "user_profile" ADD "noCrawle" boolean NOT NULL DEFAULT false`); + await queryRunner.query(`COMMENT ON COLUMN "user_profile"."noCrawle" IS 'Whether reject index by crawler.'`); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`COMMENT ON COLUMN "user_profile"."noCrawle" IS 'Whether reject index by crawler.'`); + await queryRunner.query(`ALTER TABLE "user_profile" DROP COLUMN "noCrawle"`); + } + +} diff --git a/src/client/assets/sounds/syuilo/kick.mp3 b/src/client/assets/sounds/syuilo/kick.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..4e0e72091c6b5092c1ee9f3f352dcd276a343a47 GIT binary patch literal 15672 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 literal 0 HcmV?d00001 diff --git a/src/client/assets/sounds/syuilo/snare.mp3 b/src/client/assets/sounds/syuilo/snare.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..9244189c2d5e5c0cf1064196e92b0843d5dacad1 GIT binary patch literal 26121 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: T): typeof defaultDeviceSettings[T] { + // TODO: indexedDBにする + // ただしその際はnullチェックではなくキー存在チェックにしないとダメ + // (indexedDBはnullを保存できるため、ユーザーが意図してnullを格納した可能性がある) + const value = localStorage.getItem(PREFIX + key); + if (value == null) { + return defaultDeviceSettings[key]; + } else { + return JSON.parse(value); + } + }, + + set(key: keyof typeof defaultDeviceSettings, value: any): any { + localStorage.setItem(PREFIX + key, JSON.stringify(value)); + }, +}; diff --git a/src/client/components/form-dialog.vue b/src/client/components/form-dialog.vue index 0dc02258af..add6b230d3 100644 --- a/src/client/components/form-dialog.vue +++ b/src/client/components/form-dialog.vue @@ -1,6 +1,6 @@ -
-
@@ -67,7 +67,6 @@ export default defineComponent({ font-size: 0.9em; tab-size: 2; white-space: pre; - font-family: Fira code, Fira Mono, Consolas, Menlo, Courier, monospace; } } diff --git a/src/client/components/taskmanager.vue b/src/client/components/taskmanager.vue index 92c56442c3..1ed8c8bd5e 100644 --- a/src/client/components/taskmanager.vue +++ b/src/client/components/taskmanager.vue @@ -3,7 +3,7 @@ -
+
@@ -150,7 +150,6 @@ export default defineComponent({ display: flex; flex-direction: column; height: 100%; - font-family: Fira code, Fira Mono, Consolas, Menlo, Courier, monospace; > .content { flex: 1; diff --git a/src/client/components/timeline.vue b/src/client/components/timeline.vue index 930f47b1a5..df9424d8ed 100644 --- a/src/client/components/timeline.vue +++ b/src/client/components/timeline.vue @@ -6,6 +6,7 @@ import { defineComponent } from 'vue'; import XNotes from './notes.vue'; import * as os from '@/os'; +import * as sound from '@/scripts/sound'; export default defineComponent({ components: { @@ -65,7 +66,7 @@ export default defineComponent({ this.$emit('note'); if (this.sound) { - os.sound(note.userId === this.$store.state.i.id ? 'noteMy' : 'note'); + sound.play(note.userId === this.$store.state.i.id ? 'noteMy' : 'note'); } }; diff --git a/src/client/components/ui/range.vue b/src/client/components/ui/range.vue index c6e585cf50..4cfe66a8fc 100644 --- a/src/client/components/ui/range.vue +++ b/src/client/components/ui/range.vue @@ -1,7 +1,7 @@