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 zcmezW`#}l=0pOXJme0Vzz|X+Iz{kK~Yr!A{0V)t+1_7QB5Dfvj5YPYtlb~P;1Z;zV zlMrwl0^UNve+Xb;V6gOY^mR4Xv$QN?JPUK7$$u5r_r45_4j^~zj#EAilNhB(Ltr!n zs1pK^GJ#XBI%usr15?9UDcOZH81#e$qh{`DV3J>;z1!ddg8&12iz2t%t)@+t0$i+2 zjSdP=cYpfb$8<=?ZKuwRY%Yebjuji_y9L|zdJjan9Es>Z8veITN9jnCpy#%2%TiAp zGHl@veC+b+>2zK8Yt{nkyhWPAiLdwZhaKi{IPAA$GlP?3xd6vRPO+{R><(7^D|dfq z&~kb@U6398HRdwxC_rL$E3wXNw^RL6DZ(oJ`PgO}W^lW<-6KD$mcLak;J7 zVbLK)N52y{IaoH-xQ2Ur8Lbq%I>mZofXK6CH!fYr=(!KF*j9;r?D+bi&{1f|f|G|1 zo@R3soYEdRaY6VogS+>SXvMoJJqj1(@!K_BMN!aUp|GXzEaSl5ZcdGM#YvkEH1pT3jzmwn$}cB2pAYL zWZYt9+@|v~`!b_L)TU!``r3>>!V(c1ECesyWRPH8amz$(fs4=v?L)VgBr>SDE;%$y zn<;O{>RC?xr{wPG&CLEWUwg`eDGz#9Ityp%e67`0=`WxD`^$0J*6<~Pt=f5u9hNm~ zCQS)iu2#EdliQQni4)iyv(`HuP}07rzn1Ul@^E9fsqW!ZRatpf@7&k_b?2JgOEJ@K zgX*WRdQFd~{CXR+@o>fC_5a_-gT$WtMjc{g5MU96W zoYJz;YyTfDMh3>Vw3}0YTfW;ExG?Qw-;#~Z4;osO4R%OpX$lE2#>TF=Y*_iC;a>UC zjb?5t*OugP?le!iHg93lrthA&BT`lgbaZG>k_`WPcSoMd#?T!KCa$jke?LmmY_$4W za8bWpfoUnPmFV*g44Q$LUC+H|=GtJIKCxv}g-UZ!)Av;$3Y-t`F`xW(?}{f4j_I$y z>2@? zfa5!iPZ=EQShDDa$8i}6ty%3ZIzk6EBsmqCR_6$7_!;G}Ir>c4psBFoX`>)d!9&Gk z?79t+CabfVTrGTfR^3n(Jn$lMLcv0gMpoCy8U~&X3f;4`m`*reJQ%>SZE-!SZ9}O(P0g1r_0H2u4IT@=uWSjcDLg0zE?}TJr(}2Ff=gm zJ$M+hOlU>cwfEmY|A{?swDFtKX5UqRc3+ul@OpK|xA%*eTTVDy(VtYlHha#R#rH-1 zk`{h?o%Hn6gtxz*$?OixJM?JM9$ja4XMLF!T5G$%T2J5hJXh9Z$LD!LUkXm0`m^ip`w@S$eY;cSWCqb){@woB-6 zwwA6AUUc~A#T}8howr}}Hz=MyVl1kVaEC8zod@57GYVWj7gA0NoOxn#;9wt*!bxYg z>1{2X&OK`s4!F9XQk@XQ?$oBB<#6`%yKR?Vwz$L!1)mnVTC~mT_0(&=rX6qBiYZHH zt$Y2QNz?nld($?x8}dJXTQ%NwZLNOFcYtFJWB&dtAH$>-t79#+#Mw1VLl}cMsmYe! z+HvH{F{vraQ?|N#XG{Z-)oyNowmkRu)%{N|!z)%W ze0ixD!#qPk^wpoUr?uB89lKt*^pL-5fo8g8I9J~7)%7<+R;K7g?YnUF;)|SBBAP3V ztX@0~)zzQ+U3K@?=bXF~%G_$UtYS0_I3pY~Q~XMx^HY8G@3CR-ssbNPuP@)eZu|1z zY13w|Ui$g$ou8YV&u~bTIyv;@gtmXy)wd^hgR-MM1{;dt&^j=Npa8$3k>$(SO*sxUBb4tpYdFpG|>h!;7WJ+DLv~sa(!K{4+Qm+|`?pm<+g@P5}tD(yv99)~_W(fr=nkoIER z(&;m^zMh1IB%ZM`9lpe<2Ox^nkRZz#VKa%)Rq20j7qa+^D0z6n;w?R z>vM6&E{V<0QrAn`o@}_gaS@N-6^pa7ioRzqMZ8x%^Y6uZIUiLI0jDIEwg?85c>)G^ znzr%WNIIy=(IsuN)1zSGQkA$FLGFT#d^$`*XAiObT_7WRW79Tq&Xs22D=(x8Y!{oE zIO~>_&5;A;r+4)RTsma(U<1RY$kn-`H;euj%}L{HZ_rd$Q0Y0!E7Y;a(P4$rf3It4 zwyya-O+DLZ&C=FUuw2lvwvb~HkEV~4)K&RVjq;Ei+s+3~w|>nLE?SZ-!IXF+Kh)~G zf)M-Ghl*-RjEi00CA9wY-*ngfg*>_y5W*F!P?H>B^g`lnCMDZL)k8eX5yxiVo}Xlv~1 z?R?3-r!3xBx1KCrHD#+}z}uH4#zC{^hefaYvMyi!|Gx{Yo=pY}246Y-O+G6rJW>_o zu6%2j?=pMkf(e^WZFDe>n#EP}@HKC`%T}}VrY2sCeD+Q?j!t5@%)QgdEqS8sf9vJF)H*xHx1b_5CS=rC|v%p;}B&%-zIz#3lHxgAZhjK>!@W%Nk( z9o^#nWLxY6&P-P(UC!cJpBl7}gmEb~B`r|hmY({b$zooX)XC{L4jsAK$f$ElQsqX7 z8mLgPV9KmWJ>mTKgwo10H@@X6&r7(+Evo-A_tZnjhgUBxFF4Yg)F7GceRU?2MplYk z^hJ)A^K)*j{@~I3>t-CcuVai`S>l9A8H{z3Lf_K$wBDtAr|{@DIH*3%FcUXUNWHfD zq||4x;)`3eO(s29=ev?U|?favE>$a}A_qo_^;`Gmq+%nCEgJWln;l@rf3*oQIzdWvZQCvUkgtp5~>V$sIRcv}{_O z)u2Pg|v=%(6v0QWXPDuRJacnZ`Nk*>62#vomKWXS*~p z8Kq^M_3U5H_kH#A^PhX`%Yig9l48g9-B` z1$Gt(t{Dsr{1QS8jSn^~a^h(eSopbNi--`r0+Wf0LS10u8yP&0NY%15W`1On~=beJLqH?}TY;9RS*K9@cUE|-eZ~wol zD?97+xAgk)n7>#5%m4qnt4{t;wblHWUk~36jxjGb4*zrU{ghu*W7B!$Qui*G`LsAV zDD!RmNhv+MHGIER)@pj0s^2$ujWE*TGql-fU}I+BBhaRjdq;y&=a@u;i)r!G)ejFw zYRd8+3^{i>a#_&K>QdJ*Ws&I*g))8IzUt0-^SLxR=v8)T;qmZP2f>z}R8hu`f>+j@ z?5#atQ$<}3=d9^Fm7ZCrQg%~RGUCkE(xggTkDl4~S(~2yzyH53>a0^_U$Nz47nky2 z8KveHK8@~6HL)8)d18gSUw+B*4AI)W+%m+fd(Oh>>uZGs&nj{~n>1s>oRErNr3?(- zdAtAiG93w<4jvpHa2Ld*ZD^8fe$_rDhHx_+jkNYck8b@J5EOUWmSXGv~h z>0)MJT)IJ5Dv;%1SAz{hv&w-FQZ9`d2P9a%ZzOOqEJ)xiPJCsfdw6Hf(vx*LH`hvm z3Wb!0D<_+dzkVrdv{#@)slsR9WGzPN^&7lTA8?${Sn_z`{@%RT`|p0%k6u~7{Fm0Z z{V%8cyPkU&sP3frj%U60X35Z*3t1+ciyYNBQ@%;`&bz{lS(}(bH?Ix<_T+g~Y46N7 z_O$PXN6Rz6W$Y7qT|Kw;vhXT3mxF~d+c@=ArY|U%p*$^seX_9Ol^OOeFC8pzCMe52 zuykf?-XUjM^W#iO=A{k46q_ED^tdr3%z9_`kAXSYGVhn0gH_Fs<)+GPss^1-n+)bN z#v6Dz>@d({m}(&A5M#jDAg;uqp~0}SL5jh^fl;N{v4!95souUXg;)6<4(HypxA~!v zG&6qT-G__&=g*hEcxsVA_QBP4D{hNU%z2{Qcjoy`-Sjmt)_gHr{_ns4|NsB<|NpLk z`#mY#c<)jpiFG;e-6~@*azssN?0d6KQ8HsqJBtk4!-f=}c}v(h7?c|l-Z3+V$M&(r7#$Ew;zuJJ7z!iC+v;svc73nbYD_9=B}gmJV9E)D6Os>ldi|GPhWgi@3`wyaeu=D1 zK?!+{G6_x$n-Yu~91_$R+!FX26kM1X7BF&fR!@s6QaR8U#V^>|pfIh@Bjt=etNW*i zC-{xEm>FU-%qun|l&wvYY`wgt;AC!MOG)1GKHoc^d+XM`pY3XWQ{ja3&X`%7<<_k? zQv15|y6&6fUW?Ve|Ly<(|Npn`akoNW{n>2u*40=j*jT3L)RWyaJ$gdKlG~h(uS)iv zb2LaiI%@)x0R!6+!LpLHmS>y?Jrc|q6BbA@GrVHgl8{?#X7RM&v~TycuXkVX`m;X! z=epnPYQLLh=FOb>e&+16#@})`8{SUauTwfbl;_MV^U!6z_pjf*v^Pvn%wJsOx`J5u z3s%-=hZam+{6(m6)uCY3i%)rk5>{;Z_{mend&4W?iCR@fp zs@}N#>z&HWOO6G+S$1Y!U+v$$ybb}E-p!hRBusFQc~6l{62Gv)vfKxr%zf)8uGF6s zmUm0F*lrnDZwJS;c2%P}VLy2Db{tTQN=j@^?KkFTnZw0!U}_`F(}hNY^Jahwg|m!P zOB#=5zY#8$-q1d+a>hQ6OZpMQw`0QO2A;1hY-?CW8FfBba6A)f zeivP|UEsu;Wk!9v+-DU$T-l-)SFp4gbxOQG!@xW#a{s^i;>sr^<~tNgL@E?Zs2nhz zA-q6Zg0n$*2Fn9Z2^I#1PKI-$3@%a(2de}8W^tRI>#~2pS~>8Vk`%jV~Rr zdr%?U)#;|PwUhlb>!P3~y1mWYcsyU{A4~P@yIT6V{bqka<`l)Vr7pI8=Ql5w6b>jW z-MT(=(k%U5i_5=V29=+?Yj@84t$6+RRP7mkX;m}MJ@pDaTeQdB$TZ}@h3m;HR2^<4 zIcXh9I@vZQLAJ3>gQ?&EO9}(4;@wu09deF&XX~FojQ@G3{`=X_GqPoq_is(RnD*rF zuT0~cn=NNgzZLX##*MxoUvjM8q^HX`2BujWyz(=PyS`9lepErcH&5E}7NHliFeuotNWa*Tb8+O-g1<^^Y{m$E-#nxBf_qacdO^j$#>b>cJcGZ#i^$b9bdij zjrh#v-x+^&U%1uyQpPf;@qgnR1F^fG!>*OHY_KwAh*;bDFv892wac;t=d(TMEL;7+ zO?A!IyDGl|3>x*mbh|xxG@(~~QmnDlVYa!GmRsM-6f)9H|FSu?>1F0dj$93=ge5L} z7@S_m`8hM3ROY_L#PRULvlK@LACBZ#Z*B=GY*?l~7m?pXDFO`QTc-Q}=@qE0&svmW z*SaZDg5g6#Y(p3uvx5TrXGRAGW`;iu!VDLflo>o24>O!$+RR|UxR}9)DbRsMDE3&o z?#)`0>o51TKhcd{VQ9KsqjS4wOwzPa&0TkA_vpUK2;THOOzZy<^$qL(*cWmITWnZu34<_tP*_{JX&|-ziIr%O)wgMij>?yR7t>CNJh7H|wM46o$$f zzRitI0>U$R8yXuLn5ONFJ8;?L(wz6-=bn!&+ivi-{(bqMy?2YP?g!tGi?jYe{onTb z`|}phmN?kg@qV_Ja8|yj&T)N#6D zsnn%v))ValMR!x5bo6TOUJwv=!s5u3E=DJwxDZgGaJ%tZc+=6>kIVywH{|_hd-%4iO;MvR&A!*D|!+n^+gYAO``!NOw_9YB_91gioUGPs`%yc=2-c z;%h6f|NsB}f7ox+x-Y&fHyef4dYNo5|&8AMnb80C%~_+_}_?wy+| z)0&OfrF1JDpK�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 Znu?s+@#M*lv!T=mBOu{ZJIIEUc>qBTV2l6& 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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 literal 0 HcmV?d00001 diff --git a/src/client/cold-storage.ts b/src/client/cold-storage.ts new file mode 100644 index 0000000000..1bee2313fa --- /dev/null +++ b/src/client/cold-storage.ts @@ -0,0 +1,34 @@ +// 常にメモリにロードしておく必要がないような設定情報を保管するストレージ + +const PREFIX = 'miux:'; + +export const defaultDeviceSettings = { + sound_masterVolume: 0.3, + sound_note: { type: 'syuilo/down', volume: 1 }, + sound_noteMy: { type: 'syuilo/up', volume: 1 }, + sound_notification: { type: 'syuilo/pope2', volume: 1 }, + sound_chat: { type: 'syuilo/pope1', volume: 1 }, + sound_chatBg: { type: 'syuilo/waon', volume: 1 }, + sound_antenna: { type: 'syuilo/triple', volume: 1 }, + sound_channel: { type: 'syuilo/square-pico', volume: 1 }, + sound_reversiPutBlack: { type: 'syuilo/kick', volume: 0.3 }, + sound_reversiPutWhite: { type: 'syuilo/snare', volume: 0.3 }, +}; + +export const device = { + get(key: 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 @@