From f6154dc0af1a0d65819e87240f4385f9573095cb Mon Sep 17 00:00:00 2001 From: syuilo Date: Thu, 30 Jan 2020 04:37:25 +0900 Subject: v12 (#5712) Co-authored-by: MeiMei <30769358+mei23@users.noreply.github.com> Co-authored-by: Satsuki Yanagi <17376330+u1-liquid@users.noreply.github.com> --- src/client/app.vue | 1105 ++++++++++++++++++++ src/client/app/admin/assets/header-icon.svg | 150 --- src/client/app/admin/script.ts | 30 - src/client/app/admin/style.styl | 6 - src/client/app/admin/views/abuse.vue | 83 -- src/client/app/admin/views/announcements.vue | 91 -- src/client/app/admin/views/dashboard.ap-log.vue | 109 -- src/client/app/admin/views/dashboard.charts.vue | 527 ---------- .../app/admin/views/dashboard.cpu-memory.vue | 185 ---- .../app/admin/views/dashboard.queue-charts.vue | 196 ---- src/client/app/admin/views/dashboard.vue | 286 ----- src/client/app/admin/views/db.vue | 61 -- src/client/app/admin/views/drive.vue | 292 ------ src/client/app/admin/views/emoji.vue | 185 ---- src/client/app/admin/views/federation.vue | 553 ---------- src/client/app/admin/views/index.vue | 297 ------ src/client/app/admin/views/instance.vue | 523 --------- src/client/app/admin/views/logs.vue | 119 --- src/client/app/admin/views/moderators.vue | 127 --- src/client/app/admin/views/queue.chart.vue | 181 ---- src/client/app/admin/views/queue.vue | 159 --- src/client/app/admin/views/users.user.vue | 95 -- src/client/app/admin/views/users.vue | 366 ------- src/client/app/animation.styl | 47 - src/client/app/app.styl | 84 -- src/client/app/app.vue | 32 - src/client/app/auth/assets/icon.svg | 1 - src/client/app/auth/script.ts | 30 - src/client/app/auth/style.styl | 15 - src/client/app/auth/views/form.vue | 141 --- src/client/app/auth/views/index.vue | 153 --- src/client/app/boot.js | 171 --- src/client/app/common/define-widget.ts | 70 -- src/client/app/common/hotkey.ts | 106 -- src/client/app/common/keycode.ts | 33 - src/client/app/common/scripts/2fa.ts | 5 - src/client/app/common/scripts/check-for-update.ts | 36 - src/client/app/common/scripts/collect-page-vars.ts | 48 - .../app/common/scripts/compose-notification.ts | 74 -- src/client/app/common/scripts/contains.ts | 8 - src/client/app/common/scripts/copy-to-clipboard.ts | 33 - src/client/app/common/scripts/format-uptime.ts | 25 - src/client/app/common/scripts/gen-search-query.ts | 31 - src/client/app/common/scripts/get-face.ts | 11 - src/client/app/common/scripts/get-md5.ts | 10 - .../app/common/scripts/get-static-image-url.ts | 11 - src/client/app/common/scripts/loading.ts | 21 - src/client/app/common/scripts/note-mixin.ts | 239 ----- src/client/app/common/scripts/note-subscriber.ts | 149 --- src/client/app/common/scripts/paging.ts | 189 ---- src/client/app/common/scripts/please-login.ts | 10 - src/client/app/common/scripts/post-form.ts | 537 ---------- src/client/app/common/scripts/room/furniture.ts | 21 - .../app/common/scripts/room/furnitures.json5 | 397 ------- src/client/app/common/scripts/room/room.ts | 776 -------------- src/client/app/common/scripts/search.ts | 64 -- src/client/app/common/scripts/should-mute-note.ts | 19 - src/client/app/common/scripts/stream.ts | 301 ------ src/client/app/common/size.ts | 18 - src/client/app/common/views/components/acct.vue | 31 - .../app/common/views/components/activity.vue | 114 -- .../app/common/views/components/analog-clock.vue | 140 --- .../app/common/views/components/autocomplete.vue | 458 -------- src/client/app/common/views/components/avatar.vue | 116 -- src/client/app/common/views/components/avatars.vue | 27 - .../app/common/views/components/code-core.vue | 36 - src/client/app/common/views/components/code.vue | 28 - .../components/connect-failed.troubleshooter.vue | 148 --- .../app/common/views/components/connect-failed.vue | 105 -- .../app/common/views/components/cw-button.vue | 70 -- src/client/app/common/views/components/dialog.vue | 263 ----- .../views/components/drive-file-thumbnail.vue | 184 ---- src/client/app/common/views/components/dummy.vue | 11 - .../app/common/views/components/ellipsis.vue | 26 - .../app/common/views/components/emoji-picker.vue | 243 ----- src/client/app/common/views/components/emoji.vue | 119 --- src/client/app/common/views/components/error.vue | 28 - .../app/common/views/components/file-type-icon.vue | 17 - .../app/common/views/components/follow-button.vue | 209 ---- src/client/app/common/views/components/forkit.vue | 48 - .../app/common/views/components/formula-core.vue | 33 - src/client/app/common/views/components/formula.vue | 24 - src/client/app/common/views/components/frac.vue | 49 - .../components/games/reversi/reversi.game.vue | 473 --------- .../components/games/reversi/reversi.gameroom.vue | 56 - .../components/games/reversi/reversi.index.vue | 245 ----- .../components/games/reversi/reversi.room.vue | 355 ------- .../views/components/games/reversi/reversi.vue | 175 ---- src/client/app/common/views/components/google.vue | 66 -- .../app/common/views/components/image-viewer.vue | 41 - src/client/app/common/views/components/index.ts | 103 -- .../app/common/views/components/instance.vue | 53 - .../views/components/integrations.integration.vue | 48 - .../app/common/views/components/integrations.vue | 26 - .../app/common/views/components/media-banner.vue | 98 -- .../app/common/views/components/media-image.vue | 113 -- .../app/common/views/components/media-list.vue | 113 -- src/client/app/common/views/components/mention.vue | 87 -- src/client/app/common/views/components/menu.vue | 196 ---- .../views/components/messaging-room.form.vue | 335 ------ .../views/components/messaging-room.message.vue | 279 ----- .../app/common/views/components/messaging-room.vue | 436 -------- .../app/common/views/components/messaging.vue | 500 --------- src/client/app/common/views/components/mfm.ts | 321 ------ .../views/components/misskey-flavored-markdown.vue | 43 - src/client/app/common/views/components/nav.vue | 47 - .../app/common/views/components/note-header.vue | 118 --- .../app/common/views/components/note-menu.vue | 237 ----- .../app/common/views/components/note-skeleton.vue | 52 - .../app/common/views/components/page-preview.vue | 138 --- .../common/views/components/page/page.block.vue | 41 - .../common/views/components/page/page.button.vue | 55 - .../common/views/components/page/page.counter.vue | 47 - .../app/common/views/components/page/page.if.vue | 30 - .../common/views/components/page/page.image.vue | 36 - .../views/components/page/page.number-input.vue | 41 - .../app/common/views/components/page/page.post.vue | 68 -- .../views/components/page/page.radio-button.vue | 37 - .../common/views/components/page/page.section.vue | 55 - .../common/views/components/page/page.switch.vue | 43 - .../views/components/page/page.text-input.vue | 41 - .../app/common/views/components/page/page.text.vue | 62 -- .../views/components/page/page.textarea-input.vue | 36 - .../common/views/components/page/page.textarea.vue | 33 - .../app/common/views/components/page/page.vue | 222 ---- .../app/common/views/components/particle.vue | 53 - .../app/common/views/components/poll-editor.vue | 235 ----- src/client/app/common/views/components/poll.vue | 148 --- .../common/views/components/post-form-attaches.vue | 139 --- .../app/common/views/components/reaction-icon.vue | 53 - .../common/views/components/reaction-picker.vue | 323 ------ .../views/components/reactions-viewer.details.vue | 122 --- .../views/components/reactions-viewer.reaction.vue | 208 ---- .../common/views/components/reactions-viewer.vue | 47 - src/client/app/common/views/components/renote.vue | 104 -- .../app/common/views/components/settings/2fa.vue | 259 ----- .../app/common/views/components/settings/api.vue | 102 -- .../common/views/components/settings/app-type.vue | 53 - .../app/common/views/components/settings/apps.vue | 39 - .../app/common/views/components/settings/drive.vue | 209 ---- .../views/components/settings/integration.vue | 118 --- .../common/views/components/settings/language.vue | 54 - .../components/settings/mute-and-block.user.vue | 39 - .../views/components/settings/mute-and-block.vue | 181 ---- .../views/components/settings/notification.vue | 44 - .../common/views/components/settings/password.vue | 63 -- .../common/views/components/settings/profile.vue | 442 -------- .../common/views/components/settings/settings.vue | 671 ------------ .../common/views/components/settings/signins.vue | 98 -- .../app/common/views/components/settings/tags.vue | 67 -- .../app/common/views/components/settings/theme.vue | 558 ---------- src/client/app/common/views/components/signin.vue | 248 ----- src/client/app/common/views/components/signup.vue | 185 ---- .../common/views/components/stream-indicator.vue | 88 -- .../app/common/views/components/tag-cloud.vue | 86 -- src/client/app/common/views/components/time.vue | 74 -- .../app/common/views/components/trends.chart.vue | 89 -- src/client/app/common/views/components/trends.vue | 100 -- .../app/common/views/components/ui/button.vue | 224 ---- src/client/app/common/views/components/ui/card.vue | 69 -- src/client/app/common/views/components/ui/form.vue | 30 - .../app/common/views/components/ui/form/button.vue | 81 -- .../app/common/views/components/ui/form/radio.vue | 118 --- .../common/views/components/ui/horizon-group.vue | 76 -- src/client/app/common/views/components/ui/hr.vue | 15 - src/client/app/common/views/components/ui/info.vue | 43 - .../app/common/views/components/ui/input.vue | 503 --------- .../app/common/views/components/ui/margin.vue | 16 - .../app/common/views/components/ui/modal.vue | 80 -- .../app/common/views/components/ui/pagination.vue | 36 - .../app/common/views/components/ui/radio.vue | 110 -- .../app/common/views/components/ui/select.vue | 238 ----- .../app/common/views/components/ui/switch.vue | 135 --- .../app/common/views/components/ui/textarea.vue | 194 ---- .../app/common/views/components/uploader.vue | 231 ---- .../app/common/views/components/url-preview.vue | 343 ------ src/client/app/common/views/components/url.vue | 86 -- .../app/common/views/components/user-list.vue | 165 --- .../app/common/views/components/user-menu.vue | 228 ---- .../app/common/views/components/user-name.vue | 20 - .../common/views/components/visibility-chooser.vue | 233 ----- .../common/views/components/welcome-timeline.vue | 156 --- .../app/common/views/deck/deck.column-core.vue | 49 - .../app/common/views/deck/deck.column-template.vue | 45 - src/client/app/common/views/deck/deck.column.vue | 444 -------- .../app/common/views/deck/deck.direct-column.vue | 79 -- .../app/common/views/deck/deck.hashtag-column.vue | 122 --- .../app/common/views/deck/deck.hashtag-tl.vue | 73 -- src/client/app/common/views/deck/deck.list-tl.vue | 83 -- .../app/common/views/deck/deck.mentions-column.vue | 76 -- .../app/common/views/deck/deck.note-column.vue | 73 -- src/client/app/common/views/deck/deck.notes.vue | 168 --- .../app/common/views/deck/deck.notification.vue | 186 ---- .../views/deck/deck.notifications-column.vue | 75 -- .../app/common/views/deck/deck.notifications.vue | 177 ---- .../app/common/views/deck/deck.page-column.vue | 69 -- .../app/common/views/deck/deck.search-column.vue | 47 - .../app/common/views/deck/deck.tl-column.vue | 101 -- src/client/app/common/views/deck/deck.tl.vue | 135 --- .../common/views/deck/deck.user-column.home.vue | 229 ---- .../app/common/views/deck/deck.user-column.vue | 266 ----- src/client/app/common/views/deck/deck.vue | 394 ------- .../app/common/views/deck/deck.widgets-column.vue | 173 --- .../app/common/views/directives/autocomplete.ts | 248 ----- src/client/app/common/views/directives/index.ts | 7 - src/client/app/common/views/directives/particle.ts | 26 - src/client/app/common/views/filters/bytes.ts | 11 - src/client/app/common/views/filters/index.ts | 11 - src/client/app/common/views/filters/note.ts | 5 - src/client/app/common/views/filters/number.ts | 3 - src/client/app/common/views/filters/user.ts | 16 - src/client/app/common/views/pages/explore.vue | 198 ---- src/client/app/common/views/pages/favorites.vue | 48 - src/client/app/common/views/pages/featured.vue | 48 - .../app/common/views/pages/follow-requests.vue | 75 -- src/client/app/common/views/pages/follow.vue | 242 ----- src/client/app/common/views/pages/followers.vue | 25 - src/client/app/common/views/pages/following.vue | 25 - src/client/app/common/views/pages/not-found.vue | 65 -- .../page-editor/els/page-editor.el.button.vue | 80 -- .../page-editor/els/page-editor.el.counter.vue | 42 - .../pages/page-editor/els/page-editor.el.if.vue | 90 -- .../pages/page-editor/els/page-editor.el.image.vue | 78 -- .../els/page-editor.el.number-input.vue | 42 - .../pages/page-editor/els/page-editor.el.post.vue | 40 - .../els/page-editor.el.radio-button.vue | 53 - .../page-editor/els/page-editor.el.section.vue | 103 -- .../page-editor/els/page-editor.el.switch.vue | 48 - .../page-editor/els/page-editor.el.text-input.vue | 42 - .../pages/page-editor/els/page-editor.el.text.vue | 58 - .../els/page-editor.el.textarea-input.vue | 42 - .../page-editor/els/page-editor.el.textarea.vue | 58 - .../views/pages/page-editor/page-editor.blocks.vue | 66 -- .../pages/page-editor/page-editor.container.vue | 146 --- .../pages/page-editor/page-editor.script-block.vue | 271 ----- .../common/views/pages/page-editor/page-editor.vue | 508 --------- src/client/app/common/views/pages/page.vue | 63 -- src/client/app/common/views/pages/pages.vue | 80 -- src/client/app/common/views/pages/room/preview.vue | 106 -- src/client/app/common/views/pages/room/room.vue | 310 ------ src/client/app/common/views/pages/share.vue | 79 -- .../app/common/views/pages/user-group-editor.vue | 256 ----- src/client/app/common/views/pages/user-groups.vue | 132 --- .../app/common/views/pages/user-list-editor.vue | 182 ---- src/client/app/common/views/pages/user-lists.vue | 70 -- .../app/common/views/widgets/analog-clock.vue | 33 - src/client/app/common/views/widgets/broadcast.vue | 205 ---- src/client/app/common/views/widgets/calendar.vue | 202 ---- src/client/app/common/views/widgets/hashtags.vue | 31 - src/client/app/common/views/widgets/index.ts | 34 - src/client/app/common/views/widgets/instance.vue | 14 - src/client/app/common/views/widgets/memo.vue | 108 -- src/client/app/common/views/widgets/nav.vue | 32 - .../app/common/views/widgets/photo-stream.vue | 125 --- src/client/app/common/views/widgets/post-form.vue | 294 ------ .../app/common/views/widgets/posts-monitor.vue | 203 ---- src/client/app/common/views/widgets/queue.vue | 173 --- src/client/app/common/views/widgets/rss.vue | 116 -- .../app/common/views/widgets/server.cpu-memory.vue | 156 --- src/client/app/common/views/widgets/server.cpu.vue | 68 -- .../app/common/views/widgets/server.disk.vue | 76 -- .../app/common/views/widgets/server.info.vue | 28 - .../app/common/views/widgets/server.memory.vue | 76 -- src/client/app/common/views/widgets/server.pie.vue | 61 -- .../app/common/views/widgets/server.uptimes.vue | 47 - src/client/app/common/views/widgets/server.vue | 96 -- src/client/app/common/views/widgets/slideshow.vue | 165 --- src/client/app/common/views/widgets/tips.vue | 109 -- src/client/app/common/views/widgets/version.vue | 30 - src/client/app/config.ts | 20 - src/client/app/desktop/api/update-avatar.ts | 118 --- src/client/app/desktop/api/update-banner.ts | 118 --- src/client/app/desktop/assets/grid.svg | 150 --- src/client/app/desktop/assets/header-icon.svg | 150 --- src/client/app/desktop/assets/index.jpg | Bin 409376 -> 0 bytes src/client/app/desktop/assets/remove.png | Bin 424 -> 0 bytes src/client/app/desktop/script.ts | 267 ----- src/client/app/desktop/style.styl | 40 - .../desktop/views/components/activity.calendar.vue | 80 -- .../desktop/views/components/activity.chart.vue | 108 -- .../app/desktop/views/components/activity.vue | 86 -- .../app/desktop/views/components/calendar.vue | 252 ----- .../components/choose-file-from-drive-window.vue | 136 --- .../components/choose-folder-from-drive-window.vue | 56 - .../desktop/views/components/context-menu.menu.vue | 121 --- .../app/desktop/views/components/context-menu.vue | 90 -- .../app/desktop/views/components/crop-window.vue | 189 ---- .../app/desktop/views/components/detail-notes.vue | 56 - .../app/desktop/views/components/drive-window.vue | 61 -- .../app/desktop/views/components/drive.file.vue | 339 ------ .../app/desktop/views/components/drive.folder.vue | 313 ------ .../desktop/views/components/drive.nav-folder.vue | 118 --- src/client/app/desktop/views/components/drive.vue | 760 -------------- .../views/components/emoji-picker-dialog.vue | 84 -- .../app/desktop/views/components/game-window.vue | 38 - src/client/app/desktop/views/components/index.ts | 35 - .../views/components/media-video-dialog.vue | 47 - .../app/desktop/views/components/media-video.vue | 102 -- .../views/components/messaging-room-window.vue | 37 - .../desktop/views/components/messaging-window.vue | 42 - .../app/desktop/views/components/note-detail.vue | 356 ------- .../app/desktop/views/components/note-preview.vue | 88 -- .../app/desktop/views/components/note.sub.vue | 106 -- src/client/app/desktop/views/components/note.vue | 323 ------ src/client/app/desktop/views/components/notes.vue | 182 ---- .../app/desktop/views/components/notifications.vue | 379 ------- .../desktop/views/components/post-form-window.vue | 140 --- .../app/desktop/views/components/post-form.vue | 331 ------ .../desktop/views/components/progress-dialog.vue | 98 -- .../views/components/renote-form-window.vue | 66 -- .../app/desktop/views/components/renote-form.vue | 111 -- .../desktop/views/components/settings-window.vue | 38 - .../app/desktop/views/components/settings.vue | 86 -- .../desktop/views/components/sub-note-content.vue | 48 - .../app/desktop/views/components/ui-container.vue | 138 --- .../desktop/views/components/ui-notification.vue | 62 -- .../desktop/views/components/ui.header.account.vue | 343 ------ .../desktop/views/components/ui.header.clock.vue | 109 -- .../views/components/ui.header.messaging.vue | 69 -- .../app/desktop/views/components/ui.header.nav.vue | 141 --- .../views/components/ui.header.notifications.vue | 136 --- .../desktop/views/components/ui.header.post.vue | 54 - .../desktop/views/components/ui.header.search.vue | 82 -- .../app/desktop/views/components/ui.header.vue | 161 --- .../app/desktop/views/components/ui.sidebar.vue | 363 ------- src/client/app/desktop/views/components/ui.vue | 108 -- .../views/components/user-list-timeline.vue | 71 -- .../app/desktop/views/components/user-preview.vue | 164 --- src/client/app/desktop/views/components/window.vue | 620 ----------- src/client/app/desktop/views/directives/index.ts | 6 - .../app/desktop/views/directives/user-preview.ts | 72 -- src/client/app/desktop/views/home/home.vue | 406 ------- src/client/app/desktop/views/home/note.vue | 59 -- src/client/app/desktop/views/home/search.vue | 76 -- src/client/app/desktop/views/home/tag.vue | 65 -- .../app/desktop/views/home/timeline.core.vue | 144 --- src/client/app/desktop/views/home/timeline.vue | 278 ----- src/client/app/desktop/views/home/user/index.vue | 90 -- .../app/desktop/views/home/user/user.header.vue | 292 ------ .../app/desktop/views/home/user/user.home.vue | 54 - .../app/desktop/views/home/user/user.photos.vue | 98 -- .../app/desktop/views/home/user/user.timeline.vue | 113 -- src/client/app/desktop/views/pages/drive.vue | 57 - .../app/desktop/views/pages/games/reversi.vue | 30 - .../app/desktop/views/pages/messaging-room.vue | 82 -- src/client/app/desktop/views/pages/selectdrive.vue | 182 ---- src/client/app/desktop/views/pages/settings.vue | 27 - src/client/app/desktop/views/pages/welcome.vue | 509 --------- src/client/app/desktop/views/widgets/activity.vue | 33 - src/client/app/desktop/views/widgets/customize.vue | 21 - src/client/app/desktop/views/widgets/index.ts | 21 - src/client/app/desktop/views/widgets/messaging.vue | 60 -- .../app/desktop/views/widgets/notifications.vue | 55 - src/client/app/desktop/views/widgets/polls.vue | 110 -- src/client/app/desktop/views/widgets/profile.vue | 132 --- .../app/desktop/views/widgets/timemachine.vue | 29 - src/client/app/desktop/views/widgets/trends.vue | 103 -- src/client/app/desktop/views/widgets/users.vue | 145 --- src/client/app/dev/script.ts | 46 - src/client/app/dev/style.styl | 10 - src/client/app/dev/views/app.vue | 41 - src/client/app/dev/views/apps.vue | 39 - src/client/app/dev/views/index.vue | 13 - src/client/app/dev/views/new-app.vue | 62 -- src/client/app/dev/views/ui.vue | 20 - src/client/app/i18n.ts | 14 - src/client/app/init.css | 57 - src/client/app/init.ts | 512 --------- src/client/app/mios.ts | 522 --------- src/client/app/mobile/script.ts | 184 ---- src/client/app/mobile/style.styl | 23 - .../app/mobile/views/components/detail-notes.vue | 52 - .../mobile/views/components/drive-file-chooser.vue | 106 -- .../views/components/drive-folder-chooser.vue | 83 -- .../mobile/views/components/drive.file-detail.vue | 253 ----- .../app/mobile/views/components/drive.file.vue | 155 --- .../app/mobile/views/components/drive.folder.vue | 56 - src/client/app/mobile/views/components/drive.vue | 618 ----------- src/client/app/mobile/views/components/index.ts | 31 - .../app/mobile/views/components/media-video.vue | 74 -- .../app/mobile/views/components/note-card.vue | 93 -- .../app/mobile/views/components/note-detail.vue | 351 ------- .../app/mobile/views/components/note-preview.vue | 114 -- .../app/mobile/views/components/note.sub.vue | 124 --- src/client/app/mobile/views/components/note.vue | 302 ------ src/client/app/mobile/views/components/notes.vue | 167 --- .../views/components/notification-preview.vue | 137 --- .../app/mobile/views/components/notification.vue | 199 ---- .../app/mobile/views/components/notifications.vue | 167 --- src/client/app/mobile/views/components/notify.vue | 73 -- .../mobile/views/components/post-form-dialog.vue | 120 --- .../app/mobile/views/components/post-form.vue | 244 ----- .../mobile/views/components/sub-note-content.vue | 47 - .../app/mobile/views/components/ui-container.vue | 127 --- .../app/mobile/views/components/ui.header.vue | 142 --- src/client/app/mobile/views/components/ui.nav.vue | 346 ------ src/client/app/mobile/views/components/ui.vue | 136 --- .../mobile/views/components/user-list-timeline.vue | 76 -- .../app/mobile/views/components/user-timeline.vue | 43 - src/client/app/mobile/views/directives/index.ts | 6 - .../app/mobile/views/directives/user-preview.ts | 2 - src/client/app/mobile/views/pages/drive.vue | 147 --- .../app/mobile/views/pages/games/reversi.vue | 31 - .../app/mobile/views/pages/home.timeline.vue | 143 --- src/client/app/mobile/views/pages/home.vue | 249 ----- src/client/app/mobile/views/pages/index.vue | 16 - .../app/mobile/views/pages/messaging-room.vue | 71 -- src/client/app/mobile/views/pages/messaging.vue | 30 - src/client/app/mobile/views/pages/note.vue | 67 -- .../app/mobile/views/pages/notifications.vue | 71 -- src/client/app/mobile/views/pages/search.vue | 47 - src/client/app/mobile/views/pages/selectdrive.vue | 101 -- src/client/app/mobile/views/pages/settings.vue | 86 -- src/client/app/mobile/views/pages/signup.vue | 29 - src/client/app/mobile/views/pages/tag.vue | 40 - src/client/app/mobile/views/pages/ui.vue | 38 - .../app/mobile/views/pages/user/home.notes.vue | 59 -- .../app/mobile/views/pages/user/home.photos.vue | 99 -- src/client/app/mobile/views/pages/user/home.vue | 70 -- src/client/app/mobile/views/pages/user/index.vue | 349 ------- src/client/app/mobile/views/pages/welcome.vue | 310 ------ src/client/app/mobile/views/pages/widgets.vue | 192 ---- src/client/app/mobile/views/widgets/activity.vue | 38 - src/client/app/mobile/views/widgets/index.ts | 7 - src/client/app/mobile/views/widgets/profile.vue | 65 -- src/client/app/reset.styl | 37 - src/client/app/safe.js | 13 - src/client/app/store.ts | 463 -------- src/client/app/sw.js | 73 -- src/client/app/theme.ts | 127 --- src/client/app/tsconfig.json | 30 - src/client/app/v.d.ts | 4 - src/client/assets/error.jpg | Bin 54110 -> 0 bytes src/client/assets/fedi.jpg | Bin 77752 -> 0 bytes src/client/assets/flush.html | 16 - src/client/assets/manifest.json | 27 +- src/client/assets/message.mp3 | Bin 4584 -> 0 bytes src/client/assets/misskey-php-like-logo.png | Bin 42657 -> 0 bytes src/client/assets/pointer.png | Bin 280369 -> 0 bytes src/client/assets/post.mp3 | Bin 2506 -> 0 bytes src/client/assets/redoc.html | 24 - src/client/assets/reversi-put-me.mp3 | Bin 15672 -> 0 bytes src/client/assets/reversi-put-you.mp3 | Bin 26121 -> 0 bytes src/client/assets/room/furnitures/bed/bed.blend | Bin 573584 -> 0 bytes src/client/assets/room/furnitures/bed/bed.glb | Bin 8944 -> 0 bytes src/client/assets/room/furnitures/bin/bin.blend | Bin 695512 -> 0 bytes src/client/assets/room/furnitures/bin/bin.glb | Bin 22140 -> 0 bytes src/client/assets/room/furnitures/book/book.blend | Bin 511864 -> 0 bytes src/client/assets/room/furnitures/book/book.glb | Bin 4304 -> 0 bytes .../assets/room/furnitures/book2/barcode.png | Bin 3505 -> 0 bytes .../assets/room/furnitures/book2/book2.blend | Bin 521456 -> 0 bytes src/client/assets/room/furnitures/book2/book2.glb | Bin 82920 -> 0 bytes .../assets/room/furnitures/book2/texture.afdesign | Bin 875434 -> 0 bytes .../assets/room/furnitures/book2/texture.png | Bin 61019 -> 0 bytes src/client/assets/room/furnitures/book2/uv.png | Bin 8611 -> 0 bytes .../furnitures/cardboard-box/cardboard-box.blend | Bin 515036 -> 0 bytes .../furnitures/cardboard-box/cardboard-box.glb | Bin 4568 -> 0 bytes .../furnitures/cardboard-box2/cardboard-box2.blend | Bin 545788 -> 0 bytes .../furnitures/cardboard-box2/cardboard-box2.glb | Bin 24084 -> 0 bytes .../room/furnitures/cardboard-box2/texture.png | Bin 16879 -> 0 bytes .../assets/room/furnitures/cardboard-box2/uv.png | Bin 4630 -> 0 bytes .../furnitures/cardboard-box3/cardboard-box3.blend | Bin 547868 -> 0 bytes .../furnitures/cardboard-box3/cardboard-box3.glb | Bin 23668 -> 0 bytes .../room/furnitures/cardboard-box3/texture.png | Bin 16204 -> 0 bytes .../room/furnitures/cardboard-box3/texture.xcf | Bin 242066 -> 0 bytes .../assets/room/furnitures/cardboard-box3/uv.png | Bin 3598 -> 0 bytes .../furnitures/carpet-stripe/carpet-stripe.blend | Bin 481784 -> 0 bytes .../furnitures/carpet-stripe/carpet-stripe.glb | Bin 4956 -> 0 bytes .../assets/room/furnitures/chair/chair.blend | Bin 500696 -> 0 bytes src/client/assets/room/furnitures/chair/chair.glb | Bin 4252 -> 0 bytes .../assets/room/furnitures/chair2/chair2.blend | Bin 523036 -> 0 bytes .../assets/room/furnitures/chair2/chair2.glb | Bin 6140 -> 0 bytes .../room/furnitures/color-box/color-box.blend | Bin 631168 -> 0 bytes .../assets/room/furnitures/color-box/color-box.glb | Bin 7492 -> 0 bytes .../room/furnitures/corkboard/corkboard.blend | Bin 565404 -> 0 bytes .../assets/room/furnitures/corkboard/corkboard.glb | Bin 7180 -> 0 bytes src/client/assets/room/furnitures/cube/cube.blend | Bin 646184 -> 0 bytes src/client/assets/room/furnitures/cube/cube.glb | Bin 188392 -> 0 bytes .../room/furnitures/cup-noodle/cup-noodle.blend | Bin 855164 -> 0 bytes .../room/furnitures/cup-noodle/cup-noodle.glb | Bin 318332 -> 0 bytes .../assets/room/furnitures/cup-noodle/noodle.png | Bin 297154 -> 0 bytes src/client/assets/room/furnitures/desk/desk.blend | Bin 541980 -> 0 bytes src/client/assets/room/furnitures/desk/desk.glb | Bin 10184 -> 0 bytes .../furnitures/energy-drink/energy-drink.blend | Bin 724764 -> 0 bytes .../room/furnitures/energy-drink/energy-drink.glb | Bin 145836 -> 0 bytes .../room/furnitures/energy-drink/texture.afdesign | Bin 824566 -> 0 bytes .../room/furnitures/energy-drink/texture.png | Bin 127510 -> 0 bytes .../assets/room/furnitures/energy-drink/uv.png | Bin 22142 -> 0 bytes src/client/assets/room/furnitures/eraser/cover.png | Bin 8336 -> 0 bytes src/client/assets/room/furnitures/eraser/cover.psd | Bin 219123 -> 0 bytes .../assets/room/furnitures/eraser/eraser-uv.png | Bin 11164 -> 0 bytes .../assets/room/furnitures/eraser/eraser.blend | Bin 527996 -> 0 bytes .../assets/room/furnitures/eraser/eraser.glb | Bin 15748 -> 0 bytes .../furnitures/facial-tissue/facial-tissue-uv.png | Bin 4470 -> 0 bytes .../furnitures/facial-tissue/facial-tissue.blend | Bin 533220 -> 0 bytes .../furnitures/facial-tissue/facial-tissue.glb | Bin 8332 -> 0 bytes .../furnitures/facial-tissue/facial-tissue.png | Bin 688 -> 0 bytes .../furnitures/facial-tissue/facial-tissue.psd | Bin 111968 -> 0 bytes src/client/assets/room/furnitures/fan/fan.blend | Bin 772732 -> 0 bytes src/client/assets/room/furnitures/fan/fan.glb | Bin 51612 -> 0 bytes .../furnitures/holo-display/holo-display.blend | Bin 788456 -> 0 bytes .../room/furnitures/holo-display/holo-display.glb | Bin 148928 -> 0 bytes .../assets/room/furnitures/holo-display/ray-uv.png | Bin 20901 -> 0 bytes .../assets/room/furnitures/holo-display/ray.png | Bin 104293 -> 0 bytes .../assets/room/furnitures/keyboard/keyboard.blend | Bin 1005588 -> 0 bytes .../assets/room/furnitures/keyboard/keyboard.glb | Bin 132360 -> 0 bytes .../room/furnitures/low-table/low-table.blend | Bin 497336 -> 0 bytes .../assets/room/furnitures/low-table/low-table.glb | Bin 2364 -> 0 bytes src/client/assets/room/furnitures/mat/mat.blend | Bin 489304 -> 0 bytes src/client/assets/room/furnitures/mat/mat.glb | Bin 1700 -> 0 bytes src/client/assets/room/furnitures/milk/milk-uv.png | Bin 16577 -> 0 bytes src/client/assets/room/furnitures/milk/milk.blend | Bin 539836 -> 0 bytes src/client/assets/room/furnitures/milk/milk.glb | Bin 8456 -> 0 bytes src/client/assets/room/furnitures/milk/milk.png | Bin 658 -> 0 bytes src/client/assets/room/furnitures/milk/milk.psd | Bin 125415 -> 0 bytes .../assets/room/furnitures/monitor/monitor.blend | Bin 586820 -> 0 bytes .../assets/room/furnitures/monitor/monitor.glb | Bin 35300 -> 0 bytes .../assets/room/furnitures/monitor/monitor.psd | Bin 3692204 -> 0 bytes .../assets/room/furnitures/monitor/screen-uv.png | Bin 1495 -> 0 bytes .../assets/room/furnitures/monitor/screen.jpg | Bin 24842 -> 0 bytes src/client/assets/room/furnitures/moon/moon.blend | Bin 725536 -> 0 bytes src/client/assets/room/furnitures/moon/moon.glb | Bin 122112 -> 0 bytes src/client/assets/room/furnitures/moon/moon.jpg | Bin 87151 -> 0 bytes .../assets/room/furnitures/mousepad/mousepad.blend | Bin 495008 -> 0 bytes .../assets/room/furnitures/mousepad/mousepad.glb | Bin 4360 -> 0 bytes .../assets/room/furnitures/pc/motherboard-uv.png | Bin 2920 -> 0 bytes .../assets/room/furnitures/pc/motherboard-uv.psd | Bin 7131432 -> 0 bytes .../assets/room/furnitures/pc/motherboard.jpg | Bin 64600 -> 0 bytes src/client/assets/room/furnitures/pc/pc.blend | Bin 818152 -> 0 bytes src/client/assets/room/furnitures/pc/pc.glb | Bin 103620 -> 0 bytes .../assets/room/furnitures/pencil/pencil.blend | Bin 683032 -> 0 bytes .../assets/room/furnitures/pencil/pencil.glb | Bin 7788 -> 0 bytes .../assets/room/furnitures/photoframe/photo-uv.png | Bin 2639 -> 0 bytes .../assets/room/furnitures/photoframe/photo.jpg | Bin 30500 -> 0 bytes .../room/furnitures/photoframe/photoframe.blend | Bin 551416 -> 0 bytes .../room/furnitures/photoframe/photoframe.glb | Bin 37612 -> 0 bytes .../assets/room/furnitures/piano/piano.blend | Bin 713228 -> 0 bytes src/client/assets/room/furnitures/piano/piano.glb | Bin 73320 -> 0 bytes .../assets/room/furnitures/pinguin/pinguin.blend | Bin 778976 -> 0 bytes .../assets/room/furnitures/pinguin/pinguin.glb | Bin 60172 -> 0 bytes .../assets/room/furnitures/plant/plant-soil-uv.png | Bin 4509 -> 0 bytes .../assets/room/furnitures/plant/plant-soil.png | Bin 10852 -> 0 bytes .../assets/room/furnitures/plant/plant-soil.psd | Bin 390188 -> 0 bytes .../assets/room/furnitures/plant/plant.blend | Bin 604488 -> 0 bytes src/client/assets/room/furnitures/plant/plant.glb | Bin 27664 -> 0 bytes .../assets/room/furnitures/plant2/plant2.blend | Bin 1060816 -> 0 bytes .../assets/room/furnitures/plant2/plant2.glb | Bin 133212 -> 0 bytes src/client/assets/room/furnitures/plant2/soil.png | Bin 10852 -> 0 bytes .../assets/room/furnitures/poster-h/poster-h.blend | Bin 667604 -> 0 bytes .../assets/room/furnitures/poster-h/poster-h.glb | Bin 1280 -> 0 bytes src/client/assets/room/furnitures/poster-h/uv.png | Bin 3786 -> 0 bytes .../assets/room/furnitures/poster-v/poster-v.blend | Bin 650740 -> 0 bytes .../assets/room/furnitures/poster-v/poster-v.glb | Bin 1280 -> 0 bytes src/client/assets/room/furnitures/poster-v/uv.png | Bin 3795 -> 0 bytes .../assets/room/furnitures/pudding/pudding.blend | Bin 694784 -> 0 bytes .../assets/room/furnitures/pudding/pudding.glb | Bin 10612 -> 0 bytes .../room/furnitures/rubik-cube/rubik-cube.blend | Bin 745960 -> 0 bytes .../room/furnitures/rubik-cube/rubik-cube.glb | Bin 67688 -> 0 bytes .../assets/room/furnitures/server/rack-uv.png | Bin 6705 -> 0 bytes src/client/assets/room/furnitures/server/rack.png | Bin 7046 -> 0 bytes .../assets/room/furnitures/server/server.blend | Bin 684372 -> 0 bytes .../assets/room/furnitures/server/server.glb | Bin 149480 -> 0 bytes .../assets/room/furnitures/server/server.png | Bin 116866 -> 0 bytes src/client/assets/room/furnitures/server/uv.png | Bin 4012 -> 0 bytes src/client/assets/room/furnitures/sofa/sofa.blend | Bin 711488 -> 0 bytes src/client/assets/room/furnitures/sofa/sofa.glb | Bin 37656 -> 0 bytes .../assets/room/furnitures/spiral/spiral.blend | Bin 1241416 -> 0 bytes .../assets/room/furnitures/spiral/spiral.glb | Bin 251788 -> 0 bytes src/client/assets/room/furnitures/tv/screen-uv.png | Bin 3792 -> 0 bytes src/client/assets/room/furnitures/tv/tv.blend | Bin 587640 -> 0 bytes src/client/assets/room/furnitures/tv/tv.glb | Bin 8580 -> 0 bytes .../room/furnitures/wall-clock/wall-clock.blend | Bin 574128 -> 0 bytes .../room/furnitures/wall-clock/wall-clock.glb | Bin 47848 -> 0 bytes src/client/assets/room/rooms/default/default.blend | Bin 618364 -> 0 bytes src/client/assets/room/rooms/default/default.glb | Bin 12280 -> 0 bytes .../assets/room/rooms/washitsu/husuma-uv.png | Bin 4037 -> 0 bytes src/client/assets/room/rooms/washitsu/husuma.png | Bin 2539 -> 0 bytes .../room/rooms/washitsu/tatami-single1600.png | Bin 1173343 -> 0 bytes .../assets/room/rooms/washitsu/tatami-uv.png | Bin 4075 -> 0 bytes .../assets/room/rooms/washitsu/tatami.afdesign | Bin 2501804 -> 0 bytes src/client/assets/room/rooms/washitsu/tatami.png | Bin 313722 -> 0 bytes .../assets/room/rooms/washitsu/washitsu.blend | Bin 664000 -> 0 bytes src/client/assets/room/rooms/washitsu/washitsu.glb | Bin 415180 -> 0 bytes src/client/assets/thumbnail-not-available.png | Bin 5705 -> 0 bytes src/client/assets/title.svg | 140 --- src/client/assets/unread.svg | 7 - src/client/assets/version.html | 18 - src/client/assets/welcome-bg.dark.svg | 1 - src/client/assets/welcome-bg.light.svg | 1 - src/client/components/acct.vue | 29 + src/client/components/autocomplete.vue | 443 ++++++++ src/client/components/avatar.vue | 116 ++ src/client/components/avatars.vue | 27 + src/client/components/code-core.vue | 34 + src/client/components/code.vue | 26 + src/client/components/cw-button.vue | 73 ++ src/client/components/date-separated-list.vue | 94 ++ src/client/components/dialog.vue | 320 ++++++ src/client/components/drive-file-thumbnail.vue | 188 ++++ src/client/components/drive-window.vue | 53 + src/client/components/drive.file.vue | 368 +++++++ src/client/components/drive.folder.vue | 281 +++++ src/client/components/drive.nav-folder.vue | 139 +++ src/client/components/drive.vue | 664 ++++++++++++ src/client/components/ellipsis.vue | 34 + src/client/components/emoji-picker.vue | 268 +++++ src/client/components/emoji.vue | 132 +++ src/client/components/error.vue | 42 + src/client/components/file-type-icon.vue | 29 + src/client/components/follow-button.vue | 162 +++ src/client/components/formula-core.vue | 33 + src/client/components/formula.vue | 22 + src/client/components/google.vue | 71 ++ src/client/components/index.ts | 25 + src/client/components/loading.vue | 30 + src/client/components/media-banner.vue | 109 ++ src/client/components/media-image.vue | 113 ++ src/client/components/media-list.vue | 130 +++ src/client/components/media-video.vue | 79 ++ src/client/components/mention.vue | 82 ++ src/client/components/menu.vue | 165 +++ src/client/components/mfm.ts | 299 ++++++ .../components/misskey-flavored-markdown.vue | 35 + src/client/components/modal.vue | 84 ++ src/client/components/note-header.vue | 99 ++ src/client/components/note-menu.vue | 199 ++++ src/client/components/note-preview.vue | 121 +++ src/client/components/note.sub.vue | 108 ++ src/client/components/note.vue | 729 +++++++++++++ src/client/components/notes.vue | 144 +++ src/client/components/notification.vue | 219 ++++ src/client/components/notifications.vue | 136 +++ src/client/components/page-preview.vue | 163 +++ src/client/components/page/page.block.vue | 40 + src/client/components/page/page.button.vue | 59 ++ src/client/components/page/page.counter.vue | 49 + src/client/components/page/page.if.vue | 29 + src/client/components/page/page.image.vue | 36 + src/client/components/page/page.number-input.vue | 44 + src/client/components/page/page.post.vue | 75 ++ src/client/components/page/page.radio-button.vue | 36 + src/client/components/page/page.section.vue | 58 + src/client/components/page/page.switch.vue | 46 + src/client/components/page/page.text-input.vue | 44 + src/client/components/page/page.text.vue | 65 ++ src/client/components/page/page.textarea-input.vue | 35 + src/client/components/page/page.textarea.vue | 35 + src/client/components/page/page.vue | 230 ++++ src/client/components/poll-editor.vue | 218 ++++ src/client/components/poll.vue | 174 +++ src/client/components/popup.vue | 147 +++ src/client/components/post-form-attaches.vue | 158 +++ src/client/components/post-form-dialog.vue | 157 +++ src/client/components/post-form.vue | 747 +++++++++++++ src/client/components/reaction-icon.vue | 32 + src/client/components/reaction-picker.vue | 229 ++++ src/client/components/reactions-viewer.details.vue | 117 +++ .../components/reactions-viewer.reaction.vue | 167 +++ src/client/components/reactions-viewer.vue | 48 + src/client/components/renote-picker.vue | 94 ++ src/client/components/sequential-entrance.vue | 63 ++ src/client/components/signin-dialog.vue | 37 + src/client/components/signin.vue | 219 ++++ src/client/components/signup-dialog.vue | 22 + src/client/components/signup.vue | 191 ++++ src/client/components/sub-note-content.vue | 65 ++ src/client/components/time.vue | 74 ++ src/client/components/timeline.vue | 118 +++ src/client/components/toast.vue | 76 ++ src/client/components/ui/button.vue | 204 ++++ src/client/components/ui/container.vue | 104 ++ src/client/components/ui/hr.vue | 15 + src/client/components/ui/info.vue | 55 + src/client/components/ui/input.vue | 443 ++++++++ src/client/components/ui/pagination.vue | 59 ++ src/client/components/ui/radio.vue | 119 +++ src/client/components/ui/select.vue | 220 ++++ src/client/components/ui/switch.vue | 150 +++ src/client/components/ui/textarea.vue | 218 ++++ src/client/components/uploader.vue | 242 +++++ src/client/components/url-preview.vue | 331 ++++++ src/client/components/url.vue | 95 ++ src/client/components/user-list.vue | 148 +++ src/client/components/user-menu.vue | 188 ++++ src/client/components/user-moderate-dialog.vue | 108 ++ src/client/components/user-name.vue | 20 + src/client/components/user-preview.vue | 181 ++++ src/client/components/user-select.vue | 152 +++ src/client/components/users-dialog.vue | 161 +++ src/client/components/visibility-chooser.vue | 127 +++ src/client/components/window.vue | 155 +++ src/client/config.ts | 18 + src/client/directives/autocomplete.ts | 248 +++++ src/client/directives/index.ts | 10 + src/client/directives/size.ts | 63 ++ src/client/directives/user-preview.ts | 61 ++ src/client/filters/bytes.ts | 11 + src/client/filters/index.ts | 4 + src/client/filters/note.ts | 5 + src/client/filters/number.ts | 3 + src/client/filters/user.ts | 16 + src/client/i18n.ts | 12 + src/client/init.ts | 199 ++++ src/client/mios.ts | 415 ++++++++ src/client/pages/about.vue | 106 ++ src/client/pages/announcements.vue | 73 ++ src/client/pages/auth.form.vue | 63 ++ src/client/pages/auth.vue | 93 ++ src/client/pages/drive.vue | 87 ++ src/client/pages/explore.vue | 212 ++++ src/client/pages/favorites.vue | 48 + src/client/pages/featured.vue | 47 + src/client/pages/follow-requests.vue | 142 +++ src/client/pages/follow.vue | 98 ++ src/client/pages/index.home.vue | 190 ++++ src/client/pages/index.vue | 15 + src/client/pages/index.welcome.entrance.vue | 103 ++ src/client/pages/index.welcome.setup.vue | 102 ++ src/client/pages/index.welcome.vue | 34 + src/client/pages/instance/announcements.vue | 129 +++ src/client/pages/instance/emojis.vue | 253 +++++ src/client/pages/instance/federation.instance.vue | 576 ++++++++++ src/client/pages/instance/federation.vue | 165 +++ src/client/pages/instance/files.vue | 54 + src/client/pages/instance/index.vue | 393 +++++++ src/client/pages/instance/monitor.vue | 381 +++++++ src/client/pages/instance/queue.queue.vue | 204 ++++ src/client/pages/instance/queue.vue | 79 ++ src/client/pages/instance/stats.vue | 491 +++++++++ src/client/pages/instance/users.vue | 203 ++++ src/client/pages/mentions.vue | 46 + src/client/pages/messages.vue | 49 + src/client/pages/messaging-room.form.vue | 357 +++++++ src/client/pages/messaging-room.message.vue | 336 ++++++ src/client/pages/messaging-room.vue | 395 +++++++ src/client/pages/messaging.vue | 328 ++++++ src/client/pages/my-antennas/index.antenna.vue | 174 +++ src/client/pages/my-antennas/index.vue | 80 ++ src/client/pages/my-lists/index.vue | 75 ++ src/client/pages/my-lists/list.vue | 163 +++ src/client/pages/note.vue | 55 + .../page-editor/els/page-editor.el.button.vue | 83 ++ .../page-editor/els/page-editor.el.counter.vue | 43 + .../pages/page-editor/els/page-editor.el.if.vue | 91 ++ .../pages/page-editor/els/page-editor.el.image.vue | 78 ++ .../els/page-editor.el.number-input.vue | 43 + .../pages/page-editor/els/page-editor.el.post.vue | 41 + .../els/page-editor.el.radio-button.vue | 50 + .../page-editor/els/page-editor.el.section.vue | 104 ++ .../page-editor/els/page-editor.el.switch.vue | 50 + .../page-editor/els/page-editor.el.text-input.vue | 43 + .../pages/page-editor/els/page-editor.el.text.vue | 60 ++ .../els/page-editor.el.textarea-input.vue | 44 + .../page-editor/els/page-editor.el.textarea.vue | 60 ++ .../pages/page-editor/page-editor.blocks.vue | 66 ++ .../pages/page-editor/page-editor.container.vue | 152 +++ .../pages/page-editor/page-editor.script-block.vue | 278 +++++ src/client/pages/page-editor/page-editor.vue | 516 +++++++++ src/client/pages/page.vue | 69 ++ src/client/pages/pages.vue | 78 ++ src/client/pages/search.vue | 55 + src/client/pages/settings/2fa.vue | 264 +++++ src/client/pages/settings/drive.vue | 212 ++++ src/client/pages/settings/general.vue | 108 ++ src/client/pages/settings/import-export.vue | 121 +++ src/client/pages/settings/index.vue | 94 ++ src/client/pages/settings/integration.vue | 122 +++ src/client/pages/settings/mute-block.vue | 76 ++ src/client/pages/settings/privacy.vue | 69 ++ src/client/pages/settings/profile.vue | 246 +++++ src/client/pages/settings/reaction.vue | 62 ++ src/client/pages/settings/security.vue | 87 ++ src/client/pages/settings/theme.vue | 76 ++ src/client/pages/tag.vue | 49 + src/client/pages/user/follow-list.vue | 140 +++ src/client/pages/user/index.activity.vue | 114 ++ src/client/pages/user/index.photos.vue | 98 ++ src/client/pages/user/index.timeline.vue | 79 ++ src/client/pages/user/index.vue | 476 +++++++++ src/client/router.ts | 53 + src/client/scripts/2fa.ts | 5 + src/client/scripts/aiscript/evaluator.ts | 267 +++++ src/client/scripts/aiscript/index.ts | 140 +++ src/client/scripts/aiscript/type-checker.ts | 186 ++++ src/client/scripts/collect-page-vars.ts | 48 + src/client/scripts/compose-notification.ts | 59 ++ src/client/scripts/contains.ts | 9 + src/client/scripts/copy-to-clipboard.ts | 33 + src/client/scripts/gen-search-query.ts | 31 + src/client/scripts/get-instance-name.ts | 8 + src/client/scripts/get-md5.ts | 10 + src/client/scripts/get-static-image-url.ts | 11 + src/client/scripts/hotkey.ts | 106 ++ src/client/scripts/keycode.ts | 33 + src/client/scripts/loading.ts | 21 + src/client/scripts/paging.ts | 134 +++ src/client/scripts/please-login.ts | 10 + src/client/scripts/search.ts | 64 ++ src/client/scripts/select-drive-file.ts | 12 + src/client/scripts/stream.ts | 301 ++++++ src/client/store.ts | 193 ++++ src/client/style.scss | 341 ++++++ src/client/style.styl | 43 - src/client/sw.js | 70 ++ src/client/theme.ts | 100 ++ src/client/themes/cafe.json5 | 19 +- src/client/themes/dark.json5 | 276 +---- src/client/themes/elegant.json5 | 18 + src/client/themes/future.json5 | 39 - src/client/themes/garden.json5 | 17 + src/client/themes/gray.json5 | 21 - src/client/themes/gruvbox-dark.json5 | 29 - src/client/themes/halloween.json5 | 14 +- src/client/themes/japanese-sushi-set.json5 | 20 - src/client/themes/lavender.json5 | 19 +- src/client/themes/light.json5 | 276 +---- src/client/themes/mauve.json5 | 20 +- src/client/themes/monokai.json5 | 29 - src/client/themes/rainy.json5 | 16 +- src/client/themes/tweet-deck.json5 | 44 - src/client/themes/urban.json5 | 18 + src/client/themes/vivid.json5 | 23 - src/client/tsconfig.json | 30 + src/client/v.d.ts | 4 + src/client/widgets/calendar.vue | 206 ++++ src/client/widgets/define.ts | 58 + src/client/widgets/index.ts | 8 + src/client/widgets/memo.vue | 120 +++ src/client/widgets/notifications.vue | 46 + src/client/widgets/rss.vue | 101 ++ src/client/widgets/timeline.vue | 113 ++ src/client/widgets/trends.chart.vue | 89 ++ src/client/widgets/trends.vue | 124 +++ 833 files changed, 30645 insertions(+), 57448 deletions(-) create mode 100644 src/client/app.vue delete mode 100644 src/client/app/admin/assets/header-icon.svg delete mode 100644 src/client/app/admin/script.ts delete mode 100644 src/client/app/admin/style.styl delete mode 100644 src/client/app/admin/views/abuse.vue delete mode 100644 src/client/app/admin/views/announcements.vue delete mode 100644 src/client/app/admin/views/dashboard.ap-log.vue delete mode 100644 src/client/app/admin/views/dashboard.charts.vue delete mode 100644 src/client/app/admin/views/dashboard.cpu-memory.vue delete mode 100644 src/client/app/admin/views/dashboard.queue-charts.vue delete mode 100644 src/client/app/admin/views/dashboard.vue delete mode 100644 src/client/app/admin/views/db.vue delete mode 100644 src/client/app/admin/views/drive.vue delete mode 100644 src/client/app/admin/views/emoji.vue delete mode 100644 src/client/app/admin/views/federation.vue delete mode 100644 src/client/app/admin/views/index.vue delete mode 100644 src/client/app/admin/views/instance.vue delete mode 100644 src/client/app/admin/views/logs.vue delete mode 100644 src/client/app/admin/views/moderators.vue delete mode 100644 src/client/app/admin/views/queue.chart.vue delete mode 100644 src/client/app/admin/views/queue.vue delete mode 100644 src/client/app/admin/views/users.user.vue delete mode 100644 src/client/app/admin/views/users.vue delete mode 100644 src/client/app/animation.styl delete mode 100644 src/client/app/app.styl delete mode 100644 src/client/app/app.vue delete mode 100644 src/client/app/auth/assets/icon.svg delete mode 100644 src/client/app/auth/script.ts delete mode 100644 src/client/app/auth/style.styl delete mode 100644 src/client/app/auth/views/form.vue delete mode 100644 src/client/app/auth/views/index.vue delete mode 100644 src/client/app/boot.js delete mode 100644 src/client/app/common/define-widget.ts delete mode 100644 src/client/app/common/hotkey.ts delete mode 100644 src/client/app/common/keycode.ts delete mode 100644 src/client/app/common/scripts/2fa.ts delete mode 100644 src/client/app/common/scripts/check-for-update.ts delete mode 100644 src/client/app/common/scripts/collect-page-vars.ts delete mode 100644 src/client/app/common/scripts/compose-notification.ts delete mode 100644 src/client/app/common/scripts/contains.ts delete mode 100644 src/client/app/common/scripts/copy-to-clipboard.ts delete mode 100644 src/client/app/common/scripts/format-uptime.ts delete mode 100644 src/client/app/common/scripts/gen-search-query.ts delete mode 100644 src/client/app/common/scripts/get-face.ts delete mode 100644 src/client/app/common/scripts/get-md5.ts delete mode 100644 src/client/app/common/scripts/get-static-image-url.ts delete mode 100644 src/client/app/common/scripts/loading.ts delete mode 100644 src/client/app/common/scripts/note-mixin.ts delete mode 100644 src/client/app/common/scripts/note-subscriber.ts delete mode 100644 src/client/app/common/scripts/paging.ts delete mode 100644 src/client/app/common/scripts/please-login.ts delete mode 100644 src/client/app/common/scripts/post-form.ts delete mode 100644 src/client/app/common/scripts/room/furniture.ts delete mode 100644 src/client/app/common/scripts/room/furnitures.json5 delete mode 100644 src/client/app/common/scripts/room/room.ts delete mode 100644 src/client/app/common/scripts/search.ts delete mode 100644 src/client/app/common/scripts/should-mute-note.ts delete mode 100644 src/client/app/common/scripts/stream.ts delete mode 100644 src/client/app/common/size.ts delete mode 100644 src/client/app/common/views/components/acct.vue delete mode 100644 src/client/app/common/views/components/activity.vue delete mode 100644 src/client/app/common/views/components/analog-clock.vue delete mode 100644 src/client/app/common/views/components/autocomplete.vue delete mode 100644 src/client/app/common/views/components/avatar.vue delete mode 100644 src/client/app/common/views/components/avatars.vue delete mode 100644 src/client/app/common/views/components/code-core.vue delete mode 100644 src/client/app/common/views/components/code.vue delete mode 100644 src/client/app/common/views/components/connect-failed.troubleshooter.vue delete mode 100644 src/client/app/common/views/components/connect-failed.vue delete mode 100644 src/client/app/common/views/components/cw-button.vue delete mode 100644 src/client/app/common/views/components/dialog.vue delete mode 100644 src/client/app/common/views/components/drive-file-thumbnail.vue delete mode 100644 src/client/app/common/views/components/dummy.vue delete mode 100644 src/client/app/common/views/components/ellipsis.vue delete mode 100644 src/client/app/common/views/components/emoji-picker.vue delete mode 100644 src/client/app/common/views/components/emoji.vue delete mode 100644 src/client/app/common/views/components/error.vue delete mode 100644 src/client/app/common/views/components/file-type-icon.vue delete mode 100644 src/client/app/common/views/components/follow-button.vue delete mode 100644 src/client/app/common/views/components/forkit.vue delete mode 100644 src/client/app/common/views/components/formula-core.vue delete mode 100644 src/client/app/common/views/components/formula.vue delete mode 100644 src/client/app/common/views/components/frac.vue delete mode 100644 src/client/app/common/views/components/games/reversi/reversi.game.vue delete mode 100644 src/client/app/common/views/components/games/reversi/reversi.gameroom.vue delete mode 100644 src/client/app/common/views/components/games/reversi/reversi.index.vue delete mode 100644 src/client/app/common/views/components/games/reversi/reversi.room.vue delete mode 100644 src/client/app/common/views/components/games/reversi/reversi.vue delete mode 100644 src/client/app/common/views/components/google.vue delete mode 100644 src/client/app/common/views/components/image-viewer.vue delete mode 100644 src/client/app/common/views/components/index.ts delete mode 100644 src/client/app/common/views/components/instance.vue delete mode 100644 src/client/app/common/views/components/integrations.integration.vue delete mode 100644 src/client/app/common/views/components/integrations.vue delete mode 100644 src/client/app/common/views/components/media-banner.vue delete mode 100644 src/client/app/common/views/components/media-image.vue delete mode 100644 src/client/app/common/views/components/media-list.vue delete mode 100644 src/client/app/common/views/components/mention.vue delete mode 100644 src/client/app/common/views/components/menu.vue delete mode 100644 src/client/app/common/views/components/messaging-room.form.vue delete mode 100644 src/client/app/common/views/components/messaging-room.message.vue delete mode 100644 src/client/app/common/views/components/messaging-room.vue delete mode 100644 src/client/app/common/views/components/messaging.vue delete mode 100644 src/client/app/common/views/components/mfm.ts delete mode 100644 src/client/app/common/views/components/misskey-flavored-markdown.vue delete mode 100644 src/client/app/common/views/components/nav.vue delete mode 100644 src/client/app/common/views/components/note-header.vue delete mode 100644 src/client/app/common/views/components/note-menu.vue delete mode 100644 src/client/app/common/views/components/note-skeleton.vue delete mode 100644 src/client/app/common/views/components/page-preview.vue delete mode 100644 src/client/app/common/views/components/page/page.block.vue delete mode 100644 src/client/app/common/views/components/page/page.button.vue delete mode 100644 src/client/app/common/views/components/page/page.counter.vue delete mode 100644 src/client/app/common/views/components/page/page.if.vue delete mode 100644 src/client/app/common/views/components/page/page.image.vue delete mode 100644 src/client/app/common/views/components/page/page.number-input.vue delete mode 100644 src/client/app/common/views/components/page/page.post.vue delete mode 100644 src/client/app/common/views/components/page/page.radio-button.vue delete mode 100644 src/client/app/common/views/components/page/page.section.vue delete mode 100644 src/client/app/common/views/components/page/page.switch.vue delete mode 100644 src/client/app/common/views/components/page/page.text-input.vue delete mode 100644 src/client/app/common/views/components/page/page.text.vue delete mode 100644 src/client/app/common/views/components/page/page.textarea-input.vue delete mode 100644 src/client/app/common/views/components/page/page.textarea.vue delete mode 100644 src/client/app/common/views/components/page/page.vue delete mode 100644 src/client/app/common/views/components/particle.vue delete mode 100644 src/client/app/common/views/components/poll-editor.vue delete mode 100644 src/client/app/common/views/components/poll.vue delete mode 100644 src/client/app/common/views/components/post-form-attaches.vue delete mode 100644 src/client/app/common/views/components/reaction-icon.vue delete mode 100644 src/client/app/common/views/components/reaction-picker.vue delete mode 100644 src/client/app/common/views/components/reactions-viewer.details.vue delete mode 100644 src/client/app/common/views/components/reactions-viewer.reaction.vue delete mode 100644 src/client/app/common/views/components/reactions-viewer.vue delete mode 100644 src/client/app/common/views/components/renote.vue delete mode 100644 src/client/app/common/views/components/settings/2fa.vue delete mode 100644 src/client/app/common/views/components/settings/api.vue delete mode 100644 src/client/app/common/views/components/settings/app-type.vue delete mode 100644 src/client/app/common/views/components/settings/apps.vue delete mode 100644 src/client/app/common/views/components/settings/drive.vue delete mode 100644 src/client/app/common/views/components/settings/integration.vue delete mode 100644 src/client/app/common/views/components/settings/language.vue delete mode 100644 src/client/app/common/views/components/settings/mute-and-block.user.vue delete mode 100644 src/client/app/common/views/components/settings/mute-and-block.vue delete mode 100644 src/client/app/common/views/components/settings/notification.vue delete mode 100644 src/client/app/common/views/components/settings/password.vue delete mode 100644 src/client/app/common/views/components/settings/profile.vue delete mode 100644 src/client/app/common/views/components/settings/settings.vue delete mode 100644 src/client/app/common/views/components/settings/signins.vue delete mode 100644 src/client/app/common/views/components/settings/tags.vue delete mode 100644 src/client/app/common/views/components/settings/theme.vue delete mode 100644 src/client/app/common/views/components/signin.vue delete mode 100644 src/client/app/common/views/components/signup.vue delete mode 100644 src/client/app/common/views/components/stream-indicator.vue delete mode 100644 src/client/app/common/views/components/tag-cloud.vue delete mode 100644 src/client/app/common/views/components/time.vue delete mode 100644 src/client/app/common/views/components/trends.chart.vue delete mode 100644 src/client/app/common/views/components/trends.vue delete mode 100644 src/client/app/common/views/components/ui/button.vue delete mode 100644 src/client/app/common/views/components/ui/card.vue delete mode 100644 src/client/app/common/views/components/ui/form.vue delete mode 100644 src/client/app/common/views/components/ui/form/button.vue delete mode 100644 src/client/app/common/views/components/ui/form/radio.vue delete mode 100644 src/client/app/common/views/components/ui/horizon-group.vue delete mode 100644 src/client/app/common/views/components/ui/hr.vue delete mode 100644 src/client/app/common/views/components/ui/info.vue delete mode 100644 src/client/app/common/views/components/ui/input.vue delete mode 100644 src/client/app/common/views/components/ui/margin.vue delete mode 100644 src/client/app/common/views/components/ui/modal.vue delete mode 100644 src/client/app/common/views/components/ui/pagination.vue delete mode 100644 src/client/app/common/views/components/ui/radio.vue delete mode 100644 src/client/app/common/views/components/ui/select.vue delete mode 100644 src/client/app/common/views/components/ui/switch.vue delete mode 100644 src/client/app/common/views/components/ui/textarea.vue delete mode 100644 src/client/app/common/views/components/uploader.vue delete mode 100644 src/client/app/common/views/components/url-preview.vue delete mode 100644 src/client/app/common/views/components/url.vue delete mode 100644 src/client/app/common/views/components/user-list.vue delete mode 100644 src/client/app/common/views/components/user-menu.vue delete mode 100644 src/client/app/common/views/components/user-name.vue delete mode 100644 src/client/app/common/views/components/visibility-chooser.vue delete mode 100644 src/client/app/common/views/components/welcome-timeline.vue delete mode 100644 src/client/app/common/views/deck/deck.column-core.vue delete mode 100644 src/client/app/common/views/deck/deck.column-template.vue delete mode 100644 src/client/app/common/views/deck/deck.column.vue delete mode 100644 src/client/app/common/views/deck/deck.direct-column.vue delete mode 100644 src/client/app/common/views/deck/deck.hashtag-column.vue delete mode 100644 src/client/app/common/views/deck/deck.hashtag-tl.vue delete mode 100644 src/client/app/common/views/deck/deck.list-tl.vue delete mode 100644 src/client/app/common/views/deck/deck.mentions-column.vue delete mode 100644 src/client/app/common/views/deck/deck.note-column.vue delete mode 100644 src/client/app/common/views/deck/deck.notes.vue delete mode 100644 src/client/app/common/views/deck/deck.notification.vue delete mode 100644 src/client/app/common/views/deck/deck.notifications-column.vue delete mode 100644 src/client/app/common/views/deck/deck.notifications.vue delete mode 100644 src/client/app/common/views/deck/deck.page-column.vue delete mode 100644 src/client/app/common/views/deck/deck.search-column.vue delete mode 100644 src/client/app/common/views/deck/deck.tl-column.vue delete mode 100644 src/client/app/common/views/deck/deck.tl.vue delete mode 100644 src/client/app/common/views/deck/deck.user-column.home.vue delete mode 100644 src/client/app/common/views/deck/deck.user-column.vue delete mode 100644 src/client/app/common/views/deck/deck.vue delete mode 100644 src/client/app/common/views/deck/deck.widgets-column.vue delete mode 100644 src/client/app/common/views/directives/autocomplete.ts delete mode 100644 src/client/app/common/views/directives/index.ts delete mode 100644 src/client/app/common/views/directives/particle.ts delete mode 100644 src/client/app/common/views/filters/bytes.ts delete mode 100644 src/client/app/common/views/filters/index.ts delete mode 100644 src/client/app/common/views/filters/note.ts delete mode 100644 src/client/app/common/views/filters/number.ts delete mode 100644 src/client/app/common/views/filters/user.ts delete mode 100644 src/client/app/common/views/pages/explore.vue delete mode 100644 src/client/app/common/views/pages/favorites.vue delete mode 100644 src/client/app/common/views/pages/featured.vue delete mode 100644 src/client/app/common/views/pages/follow-requests.vue delete mode 100644 src/client/app/common/views/pages/follow.vue delete mode 100644 src/client/app/common/views/pages/followers.vue delete mode 100644 src/client/app/common/views/pages/following.vue delete mode 100644 src/client/app/common/views/pages/not-found.vue delete mode 100644 src/client/app/common/views/pages/page-editor/els/page-editor.el.button.vue delete mode 100644 src/client/app/common/views/pages/page-editor/els/page-editor.el.counter.vue delete mode 100644 src/client/app/common/views/pages/page-editor/els/page-editor.el.if.vue delete mode 100644 src/client/app/common/views/pages/page-editor/els/page-editor.el.image.vue delete mode 100644 src/client/app/common/views/pages/page-editor/els/page-editor.el.number-input.vue delete mode 100644 src/client/app/common/views/pages/page-editor/els/page-editor.el.post.vue delete mode 100644 src/client/app/common/views/pages/page-editor/els/page-editor.el.radio-button.vue delete mode 100644 src/client/app/common/views/pages/page-editor/els/page-editor.el.section.vue delete mode 100644 src/client/app/common/views/pages/page-editor/els/page-editor.el.switch.vue delete mode 100644 src/client/app/common/views/pages/page-editor/els/page-editor.el.text-input.vue delete mode 100644 src/client/app/common/views/pages/page-editor/els/page-editor.el.text.vue delete mode 100644 src/client/app/common/views/pages/page-editor/els/page-editor.el.textarea-input.vue delete mode 100644 src/client/app/common/views/pages/page-editor/els/page-editor.el.textarea.vue delete mode 100644 src/client/app/common/views/pages/page-editor/page-editor.blocks.vue delete mode 100644 src/client/app/common/views/pages/page-editor/page-editor.container.vue delete mode 100644 src/client/app/common/views/pages/page-editor/page-editor.script-block.vue delete mode 100644 src/client/app/common/views/pages/page-editor/page-editor.vue delete mode 100644 src/client/app/common/views/pages/page.vue delete mode 100644 src/client/app/common/views/pages/pages.vue delete mode 100644 src/client/app/common/views/pages/room/preview.vue delete mode 100644 src/client/app/common/views/pages/room/room.vue delete mode 100644 src/client/app/common/views/pages/share.vue delete mode 100644 src/client/app/common/views/pages/user-group-editor.vue delete mode 100644 src/client/app/common/views/pages/user-groups.vue delete mode 100644 src/client/app/common/views/pages/user-list-editor.vue delete mode 100644 src/client/app/common/views/pages/user-lists.vue delete mode 100644 src/client/app/common/views/widgets/analog-clock.vue delete mode 100644 src/client/app/common/views/widgets/broadcast.vue delete mode 100644 src/client/app/common/views/widgets/calendar.vue delete mode 100644 src/client/app/common/views/widgets/hashtags.vue delete mode 100644 src/client/app/common/views/widgets/index.ts delete mode 100644 src/client/app/common/views/widgets/instance.vue delete mode 100644 src/client/app/common/views/widgets/memo.vue delete mode 100644 src/client/app/common/views/widgets/nav.vue delete mode 100644 src/client/app/common/views/widgets/photo-stream.vue delete mode 100644 src/client/app/common/views/widgets/post-form.vue delete mode 100644 src/client/app/common/views/widgets/posts-monitor.vue delete mode 100644 src/client/app/common/views/widgets/queue.vue delete mode 100644 src/client/app/common/views/widgets/rss.vue delete mode 100644 src/client/app/common/views/widgets/server.cpu-memory.vue delete mode 100644 src/client/app/common/views/widgets/server.cpu.vue delete mode 100644 src/client/app/common/views/widgets/server.disk.vue delete mode 100644 src/client/app/common/views/widgets/server.info.vue delete mode 100644 src/client/app/common/views/widgets/server.memory.vue delete mode 100644 src/client/app/common/views/widgets/server.pie.vue delete mode 100644 src/client/app/common/views/widgets/server.uptimes.vue delete mode 100644 src/client/app/common/views/widgets/server.vue delete mode 100644 src/client/app/common/views/widgets/slideshow.vue delete mode 100644 src/client/app/common/views/widgets/tips.vue delete mode 100644 src/client/app/common/views/widgets/version.vue delete mode 100644 src/client/app/config.ts delete mode 100644 src/client/app/desktop/api/update-avatar.ts delete mode 100644 src/client/app/desktop/api/update-banner.ts delete mode 100644 src/client/app/desktop/assets/grid.svg delete mode 100644 src/client/app/desktop/assets/header-icon.svg delete mode 100644 src/client/app/desktop/assets/index.jpg delete mode 100644 src/client/app/desktop/assets/remove.png delete mode 100644 src/client/app/desktop/script.ts delete mode 100644 src/client/app/desktop/style.styl delete mode 100644 src/client/app/desktop/views/components/activity.calendar.vue delete mode 100644 src/client/app/desktop/views/components/activity.chart.vue delete mode 100644 src/client/app/desktop/views/components/activity.vue delete mode 100644 src/client/app/desktop/views/components/calendar.vue delete mode 100644 src/client/app/desktop/views/components/choose-file-from-drive-window.vue delete mode 100644 src/client/app/desktop/views/components/choose-folder-from-drive-window.vue delete mode 100644 src/client/app/desktop/views/components/context-menu.menu.vue delete mode 100644 src/client/app/desktop/views/components/context-menu.vue delete mode 100644 src/client/app/desktop/views/components/crop-window.vue delete mode 100644 src/client/app/desktop/views/components/detail-notes.vue delete mode 100644 src/client/app/desktop/views/components/drive-window.vue delete mode 100644 src/client/app/desktop/views/components/drive.file.vue delete mode 100644 src/client/app/desktop/views/components/drive.folder.vue delete mode 100644 src/client/app/desktop/views/components/drive.nav-folder.vue delete mode 100644 src/client/app/desktop/views/components/drive.vue delete mode 100644 src/client/app/desktop/views/components/emoji-picker-dialog.vue delete mode 100644 src/client/app/desktop/views/components/game-window.vue delete mode 100644 src/client/app/desktop/views/components/index.ts delete mode 100644 src/client/app/desktop/views/components/media-video-dialog.vue delete mode 100644 src/client/app/desktop/views/components/media-video.vue delete mode 100644 src/client/app/desktop/views/components/messaging-room-window.vue delete mode 100644 src/client/app/desktop/views/components/messaging-window.vue delete mode 100644 src/client/app/desktop/views/components/note-detail.vue delete mode 100644 src/client/app/desktop/views/components/note-preview.vue delete mode 100644 src/client/app/desktop/views/components/note.sub.vue delete mode 100644 src/client/app/desktop/views/components/note.vue delete mode 100644 src/client/app/desktop/views/components/notes.vue delete mode 100644 src/client/app/desktop/views/components/notifications.vue delete mode 100644 src/client/app/desktop/views/components/post-form-window.vue delete mode 100644 src/client/app/desktop/views/components/post-form.vue delete mode 100644 src/client/app/desktop/views/components/progress-dialog.vue delete mode 100644 src/client/app/desktop/views/components/renote-form-window.vue delete mode 100644 src/client/app/desktop/views/components/renote-form.vue delete mode 100644 src/client/app/desktop/views/components/settings-window.vue delete mode 100644 src/client/app/desktop/views/components/settings.vue delete mode 100644 src/client/app/desktop/views/components/sub-note-content.vue delete mode 100644 src/client/app/desktop/views/components/ui-container.vue delete mode 100644 src/client/app/desktop/views/components/ui-notification.vue delete mode 100644 src/client/app/desktop/views/components/ui.header.account.vue delete mode 100644 src/client/app/desktop/views/components/ui.header.clock.vue delete mode 100644 src/client/app/desktop/views/components/ui.header.messaging.vue delete mode 100644 src/client/app/desktop/views/components/ui.header.nav.vue delete mode 100644 src/client/app/desktop/views/components/ui.header.notifications.vue delete mode 100644 src/client/app/desktop/views/components/ui.header.post.vue delete mode 100644 src/client/app/desktop/views/components/ui.header.search.vue delete mode 100644 src/client/app/desktop/views/components/ui.header.vue delete mode 100644 src/client/app/desktop/views/components/ui.sidebar.vue delete mode 100644 src/client/app/desktop/views/components/ui.vue delete mode 100644 src/client/app/desktop/views/components/user-list-timeline.vue delete mode 100644 src/client/app/desktop/views/components/user-preview.vue delete mode 100644 src/client/app/desktop/views/components/window.vue delete mode 100644 src/client/app/desktop/views/directives/index.ts delete mode 100644 src/client/app/desktop/views/directives/user-preview.ts delete mode 100644 src/client/app/desktop/views/home/home.vue delete mode 100644 src/client/app/desktop/views/home/note.vue delete mode 100644 src/client/app/desktop/views/home/search.vue delete mode 100644 src/client/app/desktop/views/home/tag.vue delete mode 100644 src/client/app/desktop/views/home/timeline.core.vue delete mode 100644 src/client/app/desktop/views/home/timeline.vue delete mode 100644 src/client/app/desktop/views/home/user/index.vue delete mode 100644 src/client/app/desktop/views/home/user/user.header.vue delete mode 100644 src/client/app/desktop/views/home/user/user.home.vue delete mode 100644 src/client/app/desktop/views/home/user/user.photos.vue delete mode 100644 src/client/app/desktop/views/home/user/user.timeline.vue delete mode 100644 src/client/app/desktop/views/pages/drive.vue delete mode 100644 src/client/app/desktop/views/pages/games/reversi.vue delete mode 100644 src/client/app/desktop/views/pages/messaging-room.vue delete mode 100644 src/client/app/desktop/views/pages/selectdrive.vue delete mode 100644 src/client/app/desktop/views/pages/settings.vue delete mode 100644 src/client/app/desktop/views/pages/welcome.vue delete mode 100644 src/client/app/desktop/views/widgets/activity.vue delete mode 100644 src/client/app/desktop/views/widgets/customize.vue delete mode 100644 src/client/app/desktop/views/widgets/index.ts delete mode 100644 src/client/app/desktop/views/widgets/messaging.vue delete mode 100644 src/client/app/desktop/views/widgets/notifications.vue delete mode 100644 src/client/app/desktop/views/widgets/polls.vue delete mode 100644 src/client/app/desktop/views/widgets/profile.vue delete mode 100644 src/client/app/desktop/views/widgets/timemachine.vue delete mode 100644 src/client/app/desktop/views/widgets/trends.vue delete mode 100644 src/client/app/desktop/views/widgets/users.vue delete mode 100644 src/client/app/dev/script.ts delete mode 100644 src/client/app/dev/style.styl delete mode 100644 src/client/app/dev/views/app.vue delete mode 100644 src/client/app/dev/views/apps.vue delete mode 100644 src/client/app/dev/views/index.vue delete mode 100644 src/client/app/dev/views/new-app.vue delete mode 100644 src/client/app/dev/views/ui.vue delete mode 100644 src/client/app/i18n.ts delete mode 100644 src/client/app/init.css delete mode 100644 src/client/app/init.ts delete mode 100644 src/client/app/mios.ts delete mode 100644 src/client/app/mobile/script.ts delete mode 100644 src/client/app/mobile/style.styl delete mode 100644 src/client/app/mobile/views/components/detail-notes.vue delete mode 100644 src/client/app/mobile/views/components/drive-file-chooser.vue delete mode 100644 src/client/app/mobile/views/components/drive-folder-chooser.vue delete mode 100644 src/client/app/mobile/views/components/drive.file-detail.vue delete mode 100644 src/client/app/mobile/views/components/drive.file.vue delete mode 100644 src/client/app/mobile/views/components/drive.folder.vue delete mode 100644 src/client/app/mobile/views/components/drive.vue delete mode 100644 src/client/app/mobile/views/components/index.ts delete mode 100644 src/client/app/mobile/views/components/media-video.vue delete mode 100644 src/client/app/mobile/views/components/note-card.vue delete mode 100644 src/client/app/mobile/views/components/note-detail.vue delete mode 100644 src/client/app/mobile/views/components/note-preview.vue delete mode 100644 src/client/app/mobile/views/components/note.sub.vue delete mode 100644 src/client/app/mobile/views/components/note.vue delete mode 100644 src/client/app/mobile/views/components/notes.vue delete mode 100644 src/client/app/mobile/views/components/notification-preview.vue delete mode 100644 src/client/app/mobile/views/components/notification.vue delete mode 100644 src/client/app/mobile/views/components/notifications.vue delete mode 100644 src/client/app/mobile/views/components/notify.vue delete mode 100644 src/client/app/mobile/views/components/post-form-dialog.vue delete mode 100644 src/client/app/mobile/views/components/post-form.vue delete mode 100644 src/client/app/mobile/views/components/sub-note-content.vue delete mode 100644 src/client/app/mobile/views/components/ui-container.vue delete mode 100644 src/client/app/mobile/views/components/ui.header.vue delete mode 100644 src/client/app/mobile/views/components/ui.nav.vue delete mode 100644 src/client/app/mobile/views/components/ui.vue delete mode 100644 src/client/app/mobile/views/components/user-list-timeline.vue delete mode 100644 src/client/app/mobile/views/components/user-timeline.vue delete mode 100644 src/client/app/mobile/views/directives/index.ts delete mode 100644 src/client/app/mobile/views/directives/user-preview.ts delete mode 100644 src/client/app/mobile/views/pages/drive.vue delete mode 100644 src/client/app/mobile/views/pages/games/reversi.vue delete mode 100644 src/client/app/mobile/views/pages/home.timeline.vue delete mode 100644 src/client/app/mobile/views/pages/home.vue delete mode 100644 src/client/app/mobile/views/pages/index.vue delete mode 100644 src/client/app/mobile/views/pages/messaging-room.vue delete mode 100644 src/client/app/mobile/views/pages/messaging.vue delete mode 100644 src/client/app/mobile/views/pages/note.vue delete mode 100644 src/client/app/mobile/views/pages/notifications.vue delete mode 100644 src/client/app/mobile/views/pages/search.vue delete mode 100644 src/client/app/mobile/views/pages/selectdrive.vue delete mode 100644 src/client/app/mobile/views/pages/settings.vue delete mode 100644 src/client/app/mobile/views/pages/signup.vue delete mode 100644 src/client/app/mobile/views/pages/tag.vue delete mode 100644 src/client/app/mobile/views/pages/ui.vue delete mode 100644 src/client/app/mobile/views/pages/user/home.notes.vue delete mode 100644 src/client/app/mobile/views/pages/user/home.photos.vue delete mode 100644 src/client/app/mobile/views/pages/user/home.vue delete mode 100644 src/client/app/mobile/views/pages/user/index.vue delete mode 100644 src/client/app/mobile/views/pages/welcome.vue delete mode 100644 src/client/app/mobile/views/pages/widgets.vue delete mode 100644 src/client/app/mobile/views/widgets/activity.vue delete mode 100644 src/client/app/mobile/views/widgets/index.ts delete mode 100644 src/client/app/mobile/views/widgets/profile.vue delete mode 100644 src/client/app/reset.styl delete mode 100644 src/client/app/safe.js delete mode 100644 src/client/app/store.ts delete mode 100644 src/client/app/sw.js delete mode 100644 src/client/app/theme.ts delete mode 100644 src/client/app/tsconfig.json delete mode 100644 src/client/app/v.d.ts delete mode 100644 src/client/assets/error.jpg delete mode 100644 src/client/assets/fedi.jpg delete mode 100644 src/client/assets/flush.html delete mode 100644 src/client/assets/message.mp3 delete mode 100644 src/client/assets/misskey-php-like-logo.png delete mode 100644 src/client/assets/pointer.png delete mode 100644 src/client/assets/post.mp3 delete mode 100644 src/client/assets/redoc.html delete mode 100644 src/client/assets/reversi-put-me.mp3 delete mode 100644 src/client/assets/reversi-put-you.mp3 delete mode 100644 src/client/assets/room/furnitures/bed/bed.blend delete mode 100644 src/client/assets/room/furnitures/bed/bed.glb delete mode 100644 src/client/assets/room/furnitures/bin/bin.blend delete mode 100644 src/client/assets/room/furnitures/bin/bin.glb delete mode 100644 src/client/assets/room/furnitures/book/book.blend delete mode 100644 src/client/assets/room/furnitures/book/book.glb delete mode 100644 src/client/assets/room/furnitures/book2/barcode.png delete mode 100644 src/client/assets/room/furnitures/book2/book2.blend delete mode 100644 src/client/assets/room/furnitures/book2/book2.glb delete mode 100644 src/client/assets/room/furnitures/book2/texture.afdesign delete mode 100644 src/client/assets/room/furnitures/book2/texture.png delete mode 100644 src/client/assets/room/furnitures/book2/uv.png delete mode 100644 src/client/assets/room/furnitures/cardboard-box/cardboard-box.blend delete mode 100644 src/client/assets/room/furnitures/cardboard-box/cardboard-box.glb delete mode 100644 src/client/assets/room/furnitures/cardboard-box2/cardboard-box2.blend delete mode 100644 src/client/assets/room/furnitures/cardboard-box2/cardboard-box2.glb delete mode 100644 src/client/assets/room/furnitures/cardboard-box2/texture.png delete mode 100644 src/client/assets/room/furnitures/cardboard-box2/uv.png delete mode 100644 src/client/assets/room/furnitures/cardboard-box3/cardboard-box3.blend delete mode 100644 src/client/assets/room/furnitures/cardboard-box3/cardboard-box3.glb delete mode 100644 src/client/assets/room/furnitures/cardboard-box3/texture.png delete mode 100644 src/client/assets/room/furnitures/cardboard-box3/texture.xcf delete mode 100644 src/client/assets/room/furnitures/cardboard-box3/uv.png delete mode 100644 src/client/assets/room/furnitures/carpet-stripe/carpet-stripe.blend delete mode 100644 src/client/assets/room/furnitures/carpet-stripe/carpet-stripe.glb delete mode 100644 src/client/assets/room/furnitures/chair/chair.blend delete mode 100644 src/client/assets/room/furnitures/chair/chair.glb delete mode 100644 src/client/assets/room/furnitures/chair2/chair2.blend delete mode 100644 src/client/assets/room/furnitures/chair2/chair2.glb delete mode 100644 src/client/assets/room/furnitures/color-box/color-box.blend delete mode 100644 src/client/assets/room/furnitures/color-box/color-box.glb delete mode 100644 src/client/assets/room/furnitures/corkboard/corkboard.blend delete mode 100644 src/client/assets/room/furnitures/corkboard/corkboard.glb delete mode 100644 src/client/assets/room/furnitures/cube/cube.blend delete mode 100644 src/client/assets/room/furnitures/cube/cube.glb delete mode 100644 src/client/assets/room/furnitures/cup-noodle/cup-noodle.blend delete mode 100644 src/client/assets/room/furnitures/cup-noodle/cup-noodle.glb delete mode 100644 src/client/assets/room/furnitures/cup-noodle/noodle.png delete mode 100644 src/client/assets/room/furnitures/desk/desk.blend delete mode 100644 src/client/assets/room/furnitures/desk/desk.glb delete mode 100644 src/client/assets/room/furnitures/energy-drink/energy-drink.blend delete mode 100644 src/client/assets/room/furnitures/energy-drink/energy-drink.glb delete mode 100644 src/client/assets/room/furnitures/energy-drink/texture.afdesign delete mode 100644 src/client/assets/room/furnitures/energy-drink/texture.png delete mode 100644 src/client/assets/room/furnitures/energy-drink/uv.png delete mode 100644 src/client/assets/room/furnitures/eraser/cover.png delete mode 100644 src/client/assets/room/furnitures/eraser/cover.psd delete mode 100644 src/client/assets/room/furnitures/eraser/eraser-uv.png delete mode 100644 src/client/assets/room/furnitures/eraser/eraser.blend delete mode 100644 src/client/assets/room/furnitures/eraser/eraser.glb delete mode 100644 src/client/assets/room/furnitures/facial-tissue/facial-tissue-uv.png delete mode 100644 src/client/assets/room/furnitures/facial-tissue/facial-tissue.blend delete mode 100644 src/client/assets/room/furnitures/facial-tissue/facial-tissue.glb delete mode 100644 src/client/assets/room/furnitures/facial-tissue/facial-tissue.png delete mode 100644 src/client/assets/room/furnitures/facial-tissue/facial-tissue.psd delete mode 100644 src/client/assets/room/furnitures/fan/fan.blend delete mode 100644 src/client/assets/room/furnitures/fan/fan.glb delete mode 100644 src/client/assets/room/furnitures/holo-display/holo-display.blend delete mode 100644 src/client/assets/room/furnitures/holo-display/holo-display.glb delete mode 100644 src/client/assets/room/furnitures/holo-display/ray-uv.png delete mode 100644 src/client/assets/room/furnitures/holo-display/ray.png delete mode 100644 src/client/assets/room/furnitures/keyboard/keyboard.blend delete mode 100644 src/client/assets/room/furnitures/keyboard/keyboard.glb delete mode 100644 src/client/assets/room/furnitures/low-table/low-table.blend delete mode 100644 src/client/assets/room/furnitures/low-table/low-table.glb delete mode 100644 src/client/assets/room/furnitures/mat/mat.blend delete mode 100644 src/client/assets/room/furnitures/mat/mat.glb delete mode 100644 src/client/assets/room/furnitures/milk/milk-uv.png delete mode 100644 src/client/assets/room/furnitures/milk/milk.blend delete mode 100644 src/client/assets/room/furnitures/milk/milk.glb delete mode 100644 src/client/assets/room/furnitures/milk/milk.png delete mode 100644 src/client/assets/room/furnitures/milk/milk.psd delete mode 100644 src/client/assets/room/furnitures/monitor/monitor.blend delete mode 100644 src/client/assets/room/furnitures/monitor/monitor.glb delete mode 100644 src/client/assets/room/furnitures/monitor/monitor.psd delete mode 100644 src/client/assets/room/furnitures/monitor/screen-uv.png delete mode 100644 src/client/assets/room/furnitures/monitor/screen.jpg delete mode 100644 src/client/assets/room/furnitures/moon/moon.blend delete mode 100644 src/client/assets/room/furnitures/moon/moon.glb delete mode 100644 src/client/assets/room/furnitures/moon/moon.jpg delete mode 100644 src/client/assets/room/furnitures/mousepad/mousepad.blend delete mode 100644 src/client/assets/room/furnitures/mousepad/mousepad.glb delete mode 100644 src/client/assets/room/furnitures/pc/motherboard-uv.png delete mode 100644 src/client/assets/room/furnitures/pc/motherboard-uv.psd delete mode 100644 src/client/assets/room/furnitures/pc/motherboard.jpg delete mode 100644 src/client/assets/room/furnitures/pc/pc.blend delete mode 100644 src/client/assets/room/furnitures/pc/pc.glb delete mode 100644 src/client/assets/room/furnitures/pencil/pencil.blend delete mode 100644 src/client/assets/room/furnitures/pencil/pencil.glb delete mode 100644 src/client/assets/room/furnitures/photoframe/photo-uv.png delete mode 100644 src/client/assets/room/furnitures/photoframe/photo.jpg delete mode 100644 src/client/assets/room/furnitures/photoframe/photoframe.blend delete mode 100644 src/client/assets/room/furnitures/photoframe/photoframe.glb delete mode 100644 src/client/assets/room/furnitures/piano/piano.blend delete mode 100644 src/client/assets/room/furnitures/piano/piano.glb delete mode 100644 src/client/assets/room/furnitures/pinguin/pinguin.blend delete mode 100644 src/client/assets/room/furnitures/pinguin/pinguin.glb delete mode 100644 src/client/assets/room/furnitures/plant/plant-soil-uv.png delete mode 100644 src/client/assets/room/furnitures/plant/plant-soil.png delete mode 100644 src/client/assets/room/furnitures/plant/plant-soil.psd delete mode 100644 src/client/assets/room/furnitures/plant/plant.blend delete mode 100644 src/client/assets/room/furnitures/plant/plant.glb delete mode 100644 src/client/assets/room/furnitures/plant2/plant2.blend delete mode 100644 src/client/assets/room/furnitures/plant2/plant2.glb delete mode 100644 src/client/assets/room/furnitures/plant2/soil.png delete mode 100644 src/client/assets/room/furnitures/poster-h/poster-h.blend delete mode 100644 src/client/assets/room/furnitures/poster-h/poster-h.glb delete mode 100644 src/client/assets/room/furnitures/poster-h/uv.png delete mode 100644 src/client/assets/room/furnitures/poster-v/poster-v.blend delete mode 100644 src/client/assets/room/furnitures/poster-v/poster-v.glb delete mode 100644 src/client/assets/room/furnitures/poster-v/uv.png delete mode 100644 src/client/assets/room/furnitures/pudding/pudding.blend delete mode 100644 src/client/assets/room/furnitures/pudding/pudding.glb delete mode 100644 src/client/assets/room/furnitures/rubik-cube/rubik-cube.blend delete mode 100644 src/client/assets/room/furnitures/rubik-cube/rubik-cube.glb delete mode 100644 src/client/assets/room/furnitures/server/rack-uv.png delete mode 100644 src/client/assets/room/furnitures/server/rack.png delete mode 100644 src/client/assets/room/furnitures/server/server.blend delete mode 100644 src/client/assets/room/furnitures/server/server.glb delete mode 100644 src/client/assets/room/furnitures/server/server.png delete mode 100644 src/client/assets/room/furnitures/server/uv.png delete mode 100644 src/client/assets/room/furnitures/sofa/sofa.blend delete mode 100644 src/client/assets/room/furnitures/sofa/sofa.glb delete mode 100644 src/client/assets/room/furnitures/spiral/spiral.blend delete mode 100644 src/client/assets/room/furnitures/spiral/spiral.glb delete mode 100644 src/client/assets/room/furnitures/tv/screen-uv.png delete mode 100644 src/client/assets/room/furnitures/tv/tv.blend delete mode 100644 src/client/assets/room/furnitures/tv/tv.glb delete mode 100644 src/client/assets/room/furnitures/wall-clock/wall-clock.blend delete mode 100644 src/client/assets/room/furnitures/wall-clock/wall-clock.glb delete mode 100644 src/client/assets/room/rooms/default/default.blend delete mode 100644 src/client/assets/room/rooms/default/default.glb delete mode 100644 src/client/assets/room/rooms/washitsu/husuma-uv.png delete mode 100644 src/client/assets/room/rooms/washitsu/husuma.png delete mode 100644 src/client/assets/room/rooms/washitsu/tatami-single1600.png delete mode 100644 src/client/assets/room/rooms/washitsu/tatami-uv.png delete mode 100644 src/client/assets/room/rooms/washitsu/tatami.afdesign delete mode 100644 src/client/assets/room/rooms/washitsu/tatami.png delete mode 100644 src/client/assets/room/rooms/washitsu/washitsu.blend delete mode 100644 src/client/assets/room/rooms/washitsu/washitsu.glb delete mode 100644 src/client/assets/thumbnail-not-available.png delete mode 100644 src/client/assets/title.svg delete mode 100644 src/client/assets/unread.svg delete mode 100644 src/client/assets/version.html delete mode 100644 src/client/assets/welcome-bg.dark.svg delete mode 100644 src/client/assets/welcome-bg.light.svg create mode 100644 src/client/components/acct.vue create mode 100644 src/client/components/autocomplete.vue create mode 100644 src/client/components/avatar.vue create mode 100644 src/client/components/avatars.vue create mode 100644 src/client/components/code-core.vue create mode 100644 src/client/components/code.vue create mode 100644 src/client/components/cw-button.vue create mode 100644 src/client/components/date-separated-list.vue create mode 100644 src/client/components/dialog.vue create mode 100644 src/client/components/drive-file-thumbnail.vue create mode 100644 src/client/components/drive-window.vue create mode 100644 src/client/components/drive.file.vue create mode 100644 src/client/components/drive.folder.vue create mode 100644 src/client/components/drive.nav-folder.vue create mode 100644 src/client/components/drive.vue create mode 100644 src/client/components/ellipsis.vue create mode 100644 src/client/components/emoji-picker.vue create mode 100644 src/client/components/emoji.vue create mode 100644 src/client/components/error.vue create mode 100644 src/client/components/file-type-icon.vue create mode 100644 src/client/components/follow-button.vue create mode 100644 src/client/components/formula-core.vue create mode 100644 src/client/components/formula.vue create mode 100644 src/client/components/google.vue create mode 100644 src/client/components/index.ts create mode 100644 src/client/components/loading.vue create mode 100644 src/client/components/media-banner.vue create mode 100644 src/client/components/media-image.vue create mode 100644 src/client/components/media-list.vue create mode 100644 src/client/components/media-video.vue create mode 100644 src/client/components/mention.vue create mode 100644 src/client/components/menu.vue create mode 100644 src/client/components/mfm.ts create mode 100644 src/client/components/misskey-flavored-markdown.vue create mode 100644 src/client/components/modal.vue create mode 100644 src/client/components/note-header.vue create mode 100644 src/client/components/note-menu.vue create mode 100644 src/client/components/note-preview.vue create mode 100644 src/client/components/note.sub.vue create mode 100644 src/client/components/note.vue create mode 100644 src/client/components/notes.vue create mode 100644 src/client/components/notification.vue create mode 100644 src/client/components/notifications.vue create mode 100644 src/client/components/page-preview.vue create mode 100644 src/client/components/page/page.block.vue create mode 100644 src/client/components/page/page.button.vue create mode 100644 src/client/components/page/page.counter.vue create mode 100644 src/client/components/page/page.if.vue create mode 100644 src/client/components/page/page.image.vue create mode 100644 src/client/components/page/page.number-input.vue create mode 100644 src/client/components/page/page.post.vue create mode 100644 src/client/components/page/page.radio-button.vue create mode 100644 src/client/components/page/page.section.vue create mode 100644 src/client/components/page/page.switch.vue create mode 100644 src/client/components/page/page.text-input.vue create mode 100644 src/client/components/page/page.text.vue create mode 100644 src/client/components/page/page.textarea-input.vue create mode 100644 src/client/components/page/page.textarea.vue create mode 100644 src/client/components/page/page.vue create mode 100644 src/client/components/poll-editor.vue create mode 100644 src/client/components/poll.vue create mode 100644 src/client/components/popup.vue create mode 100644 src/client/components/post-form-attaches.vue create mode 100644 src/client/components/post-form-dialog.vue create mode 100644 src/client/components/post-form.vue create mode 100644 src/client/components/reaction-icon.vue create mode 100644 src/client/components/reaction-picker.vue create mode 100644 src/client/components/reactions-viewer.details.vue create mode 100644 src/client/components/reactions-viewer.reaction.vue create mode 100644 src/client/components/reactions-viewer.vue create mode 100644 src/client/components/renote-picker.vue create mode 100644 src/client/components/sequential-entrance.vue create mode 100644 src/client/components/signin-dialog.vue create mode 100644 src/client/components/signin.vue create mode 100644 src/client/components/signup-dialog.vue create mode 100644 src/client/components/signup.vue create mode 100644 src/client/components/sub-note-content.vue create mode 100644 src/client/components/time.vue create mode 100644 src/client/components/timeline.vue create mode 100644 src/client/components/toast.vue create mode 100644 src/client/components/ui/button.vue create mode 100644 src/client/components/ui/container.vue create mode 100644 src/client/components/ui/hr.vue create mode 100644 src/client/components/ui/info.vue create mode 100644 src/client/components/ui/input.vue create mode 100644 src/client/components/ui/pagination.vue create mode 100644 src/client/components/ui/radio.vue create mode 100644 src/client/components/ui/select.vue create mode 100644 src/client/components/ui/switch.vue create mode 100644 src/client/components/ui/textarea.vue create mode 100644 src/client/components/uploader.vue create mode 100644 src/client/components/url-preview.vue create mode 100644 src/client/components/url.vue create mode 100644 src/client/components/user-list.vue create mode 100644 src/client/components/user-menu.vue create mode 100644 src/client/components/user-moderate-dialog.vue create mode 100644 src/client/components/user-name.vue create mode 100644 src/client/components/user-preview.vue create mode 100644 src/client/components/user-select.vue create mode 100644 src/client/components/users-dialog.vue create mode 100644 src/client/components/visibility-chooser.vue create mode 100644 src/client/components/window.vue create mode 100644 src/client/config.ts create mode 100644 src/client/directives/autocomplete.ts create mode 100644 src/client/directives/index.ts create mode 100644 src/client/directives/size.ts create mode 100644 src/client/directives/user-preview.ts create mode 100644 src/client/filters/bytes.ts create mode 100644 src/client/filters/index.ts create mode 100644 src/client/filters/note.ts create mode 100644 src/client/filters/number.ts create mode 100644 src/client/filters/user.ts create mode 100644 src/client/i18n.ts create mode 100644 src/client/init.ts create mode 100644 src/client/mios.ts create mode 100644 src/client/pages/about.vue create mode 100644 src/client/pages/announcements.vue create mode 100644 src/client/pages/auth.form.vue create mode 100644 src/client/pages/auth.vue create mode 100644 src/client/pages/drive.vue create mode 100644 src/client/pages/explore.vue create mode 100644 src/client/pages/favorites.vue create mode 100644 src/client/pages/featured.vue create mode 100644 src/client/pages/follow-requests.vue create mode 100644 src/client/pages/follow.vue create mode 100644 src/client/pages/index.home.vue create mode 100644 src/client/pages/index.vue create mode 100644 src/client/pages/index.welcome.entrance.vue create mode 100644 src/client/pages/index.welcome.setup.vue create mode 100644 src/client/pages/index.welcome.vue create mode 100644 src/client/pages/instance/announcements.vue create mode 100644 src/client/pages/instance/emojis.vue create mode 100644 src/client/pages/instance/federation.instance.vue create mode 100644 src/client/pages/instance/federation.vue create mode 100644 src/client/pages/instance/files.vue create mode 100644 src/client/pages/instance/index.vue create mode 100644 src/client/pages/instance/monitor.vue create mode 100644 src/client/pages/instance/queue.queue.vue create mode 100644 src/client/pages/instance/queue.vue create mode 100644 src/client/pages/instance/stats.vue create mode 100644 src/client/pages/instance/users.vue create mode 100644 src/client/pages/mentions.vue create mode 100644 src/client/pages/messages.vue create mode 100644 src/client/pages/messaging-room.form.vue create mode 100644 src/client/pages/messaging-room.message.vue create mode 100644 src/client/pages/messaging-room.vue create mode 100644 src/client/pages/messaging.vue create mode 100644 src/client/pages/my-antennas/index.antenna.vue create mode 100644 src/client/pages/my-antennas/index.vue create mode 100644 src/client/pages/my-lists/index.vue create mode 100644 src/client/pages/my-lists/list.vue create mode 100644 src/client/pages/note.vue create mode 100644 src/client/pages/page-editor/els/page-editor.el.button.vue create mode 100644 src/client/pages/page-editor/els/page-editor.el.counter.vue create mode 100644 src/client/pages/page-editor/els/page-editor.el.if.vue create mode 100644 src/client/pages/page-editor/els/page-editor.el.image.vue create mode 100644 src/client/pages/page-editor/els/page-editor.el.number-input.vue create mode 100644 src/client/pages/page-editor/els/page-editor.el.post.vue create mode 100644 src/client/pages/page-editor/els/page-editor.el.radio-button.vue create mode 100644 src/client/pages/page-editor/els/page-editor.el.section.vue create mode 100644 src/client/pages/page-editor/els/page-editor.el.switch.vue create mode 100644 src/client/pages/page-editor/els/page-editor.el.text-input.vue create mode 100644 src/client/pages/page-editor/els/page-editor.el.text.vue create mode 100644 src/client/pages/page-editor/els/page-editor.el.textarea-input.vue create mode 100644 src/client/pages/page-editor/els/page-editor.el.textarea.vue create mode 100644 src/client/pages/page-editor/page-editor.blocks.vue create mode 100644 src/client/pages/page-editor/page-editor.container.vue create mode 100644 src/client/pages/page-editor/page-editor.script-block.vue create mode 100644 src/client/pages/page-editor/page-editor.vue create mode 100644 src/client/pages/page.vue create mode 100644 src/client/pages/pages.vue create mode 100644 src/client/pages/search.vue create mode 100644 src/client/pages/settings/2fa.vue create mode 100644 src/client/pages/settings/drive.vue create mode 100644 src/client/pages/settings/general.vue create mode 100644 src/client/pages/settings/import-export.vue create mode 100644 src/client/pages/settings/index.vue create mode 100644 src/client/pages/settings/integration.vue create mode 100644 src/client/pages/settings/mute-block.vue create mode 100644 src/client/pages/settings/privacy.vue create mode 100644 src/client/pages/settings/profile.vue create mode 100644 src/client/pages/settings/reaction.vue create mode 100644 src/client/pages/settings/security.vue create mode 100644 src/client/pages/settings/theme.vue create mode 100644 src/client/pages/tag.vue create mode 100644 src/client/pages/user/follow-list.vue create mode 100644 src/client/pages/user/index.activity.vue create mode 100644 src/client/pages/user/index.photos.vue create mode 100644 src/client/pages/user/index.timeline.vue create mode 100644 src/client/pages/user/index.vue create mode 100644 src/client/router.ts create mode 100644 src/client/scripts/2fa.ts create mode 100644 src/client/scripts/aiscript/evaluator.ts create mode 100644 src/client/scripts/aiscript/index.ts create mode 100644 src/client/scripts/aiscript/type-checker.ts create mode 100644 src/client/scripts/collect-page-vars.ts create mode 100644 src/client/scripts/compose-notification.ts create mode 100644 src/client/scripts/contains.ts create mode 100644 src/client/scripts/copy-to-clipboard.ts create mode 100644 src/client/scripts/gen-search-query.ts create mode 100644 src/client/scripts/get-instance-name.ts create mode 100644 src/client/scripts/get-md5.ts create mode 100644 src/client/scripts/get-static-image-url.ts create mode 100644 src/client/scripts/hotkey.ts create mode 100644 src/client/scripts/keycode.ts create mode 100644 src/client/scripts/loading.ts create mode 100644 src/client/scripts/paging.ts create mode 100644 src/client/scripts/please-login.ts create mode 100644 src/client/scripts/search.ts create mode 100644 src/client/scripts/select-drive-file.ts create mode 100644 src/client/scripts/stream.ts create mode 100644 src/client/store.ts create mode 100644 src/client/style.scss delete mode 100644 src/client/style.styl create mode 100644 src/client/sw.js create mode 100644 src/client/theme.ts create mode 100644 src/client/themes/elegant.json5 delete mode 100644 src/client/themes/future.json5 create mode 100644 src/client/themes/garden.json5 delete mode 100644 src/client/themes/gray.json5 delete mode 100644 src/client/themes/gruvbox-dark.json5 delete mode 100644 src/client/themes/japanese-sushi-set.json5 delete mode 100644 src/client/themes/monokai.json5 delete mode 100644 src/client/themes/tweet-deck.json5 create mode 100644 src/client/themes/urban.json5 delete mode 100644 src/client/themes/vivid.json5 create mode 100644 src/client/tsconfig.json create mode 100644 src/client/v.d.ts create mode 100644 src/client/widgets/calendar.vue create mode 100644 src/client/widgets/define.ts create mode 100644 src/client/widgets/index.ts create mode 100644 src/client/widgets/memo.vue create mode 100644 src/client/widgets/notifications.vue create mode 100644 src/client/widgets/rss.vue create mode 100644 src/client/widgets/timeline.vue create mode 100644 src/client/widgets/trends.chart.vue create mode 100644 src/client/widgets/trends.vue (limited to 'src/client') diff --git a/src/client/app.vue b/src/client/app.vue new file mode 100644 index 0000000000..3e65880b0a --- /dev/null +++ b/src/client/app.vue @@ -0,0 +1,1105 @@ + + + + + diff --git a/src/client/app/admin/assets/header-icon.svg b/src/client/app/admin/assets/header-icon.svg deleted file mode 100644 index d677d2d163..0000000000 --- a/src/client/app/admin/assets/header-icon.svg +++ /dev/null @@ -1,150 +0,0 @@ - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - diff --git a/src/client/app/admin/script.ts b/src/client/app/admin/script.ts deleted file mode 100644 index 3f2d6466ac..0000000000 --- a/src/client/app/admin/script.ts +++ /dev/null @@ -1,30 +0,0 @@ -/** - * Admin - */ - -import VueRouter from 'vue-router'; - -// Style -import './style.styl'; - -import init from '../init'; -import Index from './views/index.vue'; -import NotFound from '../common/views/pages/not-found.vue'; - -init(launch => { - document.title = 'Admin'; - - // Init router - const router = new VueRouter({ - mode: 'history', - base: '/admin/', - routes: [ - { path: '/:page', component: Index }, - { path: '/', redirect: '/dashboard' }, - { path: '*', component: NotFound } - ] - }); - - // Launch the app - launch(router); -}); diff --git a/src/client/app/admin/style.styl b/src/client/app/admin/style.styl deleted file mode 100644 index ae1a28226a..0000000000 --- a/src/client/app/admin/style.styl +++ /dev/null @@ -1,6 +0,0 @@ -@import "../app" -@import "../reset" - -html - height 100% - background var(--bg) diff --git a/src/client/app/admin/views/abuse.vue b/src/client/app/admin/views/abuse.vue deleted file mode 100644 index afa285debc..0000000000 --- a/src/client/app/admin/views/abuse.vue +++ /dev/null @@ -1,83 +0,0 @@ - - - - - diff --git a/src/client/app/admin/views/announcements.vue b/src/client/app/admin/views/announcements.vue deleted file mode 100644 index f6c0540b37..0000000000 --- a/src/client/app/admin/views/announcements.vue +++ /dev/null @@ -1,91 +0,0 @@ - - - diff --git a/src/client/app/admin/views/dashboard.ap-log.vue b/src/client/app/admin/views/dashboard.ap-log.vue deleted file mode 100644 index ee48ef15ea..0000000000 --- a/src/client/app/admin/views/dashboard.ap-log.vue +++ /dev/null @@ -1,109 +0,0 @@ - - - - - diff --git a/src/client/app/admin/views/dashboard.charts.vue b/src/client/app/admin/views/dashboard.charts.vue deleted file mode 100644 index b2ac19efff..0000000000 --- a/src/client/app/admin/views/dashboard.charts.vue +++ /dev/null @@ -1,527 +0,0 @@ - - - - - diff --git a/src/client/app/admin/views/dashboard.cpu-memory.vue b/src/client/app/admin/views/dashboard.cpu-memory.vue deleted file mode 100644 index a3951e7618..0000000000 --- a/src/client/app/admin/views/dashboard.cpu-memory.vue +++ /dev/null @@ -1,185 +0,0 @@ - - - - - diff --git a/src/client/app/admin/views/dashboard.queue-charts.vue b/src/client/app/admin/views/dashboard.queue-charts.vue deleted file mode 100644 index d2d7811bff..0000000000 --- a/src/client/app/admin/views/dashboard.queue-charts.vue +++ /dev/null @@ -1,196 +0,0 @@ - - - - - diff --git a/src/client/app/admin/views/dashboard.vue b/src/client/app/admin/views/dashboard.vue deleted file mode 100644 index 5ccfaa06ca..0000000000 --- a/src/client/app/admin/views/dashboard.vue +++ /dev/null @@ -1,286 +0,0 @@ - - - - - diff --git a/src/client/app/admin/views/db.vue b/src/client/app/admin/views/db.vue deleted file mode 100644 index 9f87a749b6..0000000000 --- a/src/client/app/admin/views/db.vue +++ /dev/null @@ -1,61 +0,0 @@ - - - diff --git a/src/client/app/admin/views/drive.vue b/src/client/app/admin/views/drive.vue deleted file mode 100644 index 1152db2b91..0000000000 --- a/src/client/app/admin/views/drive.vue +++ /dev/null @@ -1,292 +0,0 @@ - - - - - diff --git a/src/client/app/admin/views/emoji.vue b/src/client/app/admin/views/emoji.vue deleted file mode 100644 index 2925fcab57..0000000000 --- a/src/client/app/admin/views/emoji.vue +++ /dev/null @@ -1,185 +0,0 @@ - - - - - diff --git a/src/client/app/admin/views/federation.vue b/src/client/app/admin/views/federation.vue deleted file mode 100644 index b419cca1d7..0000000000 --- a/src/client/app/admin/views/federation.vue +++ /dev/null @@ -1,553 +0,0 @@ - - - - - diff --git a/src/client/app/admin/views/index.vue b/src/client/app/admin/views/index.vue deleted file mode 100644 index 1b81185749..0000000000 --- a/src/client/app/admin/views/index.vue +++ /dev/null @@ -1,297 +0,0 @@ - - - - - diff --git a/src/client/app/admin/views/instance.vue b/src/client/app/admin/views/instance.vue deleted file mode 100644 index ebc554f955..0000000000 --- a/src/client/app/admin/views/instance.vue +++ /dev/null @@ -1,523 +0,0 @@ - - - diff --git a/src/client/app/admin/views/logs.vue b/src/client/app/admin/views/logs.vue deleted file mode 100644 index cb54318187..0000000000 --- a/src/client/app/admin/views/logs.vue +++ /dev/null @@ -1,119 +0,0 @@ - - - - - diff --git a/src/client/app/admin/views/moderators.vue b/src/client/app/admin/views/moderators.vue deleted file mode 100644 index 8ceab02d97..0000000000 --- a/src/client/app/admin/views/moderators.vue +++ /dev/null @@ -1,127 +0,0 @@ - - - diff --git a/src/client/app/admin/views/queue.chart.vue b/src/client/app/admin/views/queue.chart.vue deleted file mode 100644 index ff29aa8392..0000000000 --- a/src/client/app/admin/views/queue.chart.vue +++ /dev/null @@ -1,181 +0,0 @@ - - - - - diff --git a/src/client/app/admin/views/queue.vue b/src/client/app/admin/views/queue.vue deleted file mode 100644 index 9aa740c68c..0000000000 --- a/src/client/app/admin/views/queue.vue +++ /dev/null @@ -1,159 +0,0 @@ - - - - - diff --git a/src/client/app/admin/views/users.user.vue b/src/client/app/admin/views/users.user.vue deleted file mode 100644 index 9c3db2d6c2..0000000000 --- a/src/client/app/admin/views/users.user.vue +++ /dev/null @@ -1,95 +0,0 @@ - - - - - diff --git a/src/client/app/admin/views/users.vue b/src/client/app/admin/views/users.vue deleted file mode 100644 index 920bfc381e..0000000000 --- a/src/client/app/admin/views/users.vue +++ /dev/null @@ -1,366 +0,0 @@ - - - - - diff --git a/src/client/app/animation.styl b/src/client/app/animation.styl deleted file mode 100644 index 6c4d5b8b6f..0000000000 --- a/src/client/app/animation.styl +++ /dev/null @@ -1,47 +0,0 @@ -.zoom-in-top-enter-active, -.zoom-in-top-leave-active { - opacity: 1; - transform: scaleY(1); - transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1); - transform-origin: center top; -} -.zoom-in-top-enter, -.zoom-in-top-leave-active { - opacity: 0; - transform: scaleY(0); -} - -.entranceFromTop { - animation-duration: 0.5s; - animation-name: entranceFromTop; -} - -@keyframes entranceFromTop { - from { - opacity: 0; - transform: translateY(-64px); - } - to { - opacity: 1; - transform: translateY(0); - } -} - -@keyframes spin { - 0% { transform: rotate(0deg); } - 100% { transform: rotate(360deg); } -} - -@keyframes jump { - 0% { transform: translateY(0); } - 25% { transform: translateY(-16px); } - 50% { transform: translateY(0); } - 75% { transform: translateY(-8px); } - 100% { transform: translateY(0); } -} - -@keyframes blink { - 0% { opacity: 1; } - 30% { opacity: 1; } - 90% { opacity: 0; } -} diff --git a/src/client/app/app.styl b/src/client/app/app.styl deleted file mode 100644 index 6389aa0a87..0000000000 --- a/src/client/app/app.styl +++ /dev/null @@ -1,84 +0,0 @@ -@import "../style" -@import "../animation" - -html - &.progress - &, * - cursor progress !important - -html - // iOSのため - overflow auto - -body - overflow-wrap break-word - -#nprogress - pointer-events none - - position absolute - z-index 65536 - - .bar - background var(--primary) - - position fixed - z-index 65537 - top 0 - left 0 - - width 100% - height 2px - - /* Fancy blur effect */ - .peg - display block - position absolute - right 0 - width 100px - height 100% - box-shadow 0 0 10px var(--primary), 0 0 5px var(--primary) - opacity 1 - - transform rotate(3deg) translate(0px, -4px) - -#wait - display block - position fixed - z-index 65537 - top 15px - right 15px - - &:before - content "" - display block - width 18px - height 18px - box-sizing border-box - - border solid 2px transparent - border-top-color var(--primary) - border-left-color var(--primary) - border-radius 50% - - animation progress-spinner 400ms linear infinite - - @keyframes progress-spinner - 0% - transform rotate(0deg) - 100% - transform rotate(360deg) - -code - font-family Consolas, 'Courier New', Courier, Monaco, monospace - -pre - display block - - > code - display block - overflow auto - tab-size 2 - -[data-icon] - display inline-block diff --git a/src/client/app/app.vue b/src/client/app/app.vue deleted file mode 100644 index e639c9f9ac..0000000000 --- a/src/client/app/app.vue +++ /dev/null @@ -1,32 +0,0 @@ - - - diff --git a/src/client/app/auth/assets/icon.svg b/src/client/app/auth/assets/icon.svg deleted file mode 100644 index 36f5d3e404..0000000000 --- a/src/client/app/auth/assets/icon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/client/app/auth/script.ts b/src/client/app/auth/script.ts deleted file mode 100644 index 91bb24b108..0000000000 --- a/src/client/app/auth/script.ts +++ /dev/null @@ -1,30 +0,0 @@ -/** - * Authorize Form - */ - -import VueRouter from 'vue-router'; - -// Style -import './style.styl'; - -import init from '../init'; -import Index from './views/index.vue'; -import NotFound from '../common/views/pages/not-found.vue'; - -/** - * init - */ -init(launch => { - // Init router - const router = new VueRouter({ - mode: 'history', - base: '/auth/', - routes: [ - { path: '/:token', component: Index }, - { path: '*', component: NotFound } - ] - }); - - // Launch the app - launch(router); -}); diff --git a/src/client/app/auth/style.styl b/src/client/app/auth/style.styl deleted file mode 100644 index bd25e1b572..0000000000 --- a/src/client/app/auth/style.styl +++ /dev/null @@ -1,15 +0,0 @@ -@import "../app" -@import "../reset" - -html - background #eee - - @media (max-width 600px) - background #fff - -body - margin 0 - padding 32px 0 - - @media (max-width 600px) - padding 0 diff --git a/src/client/app/auth/views/form.vue b/src/client/app/auth/views/form.vue deleted file mode 100644 index 064dbf3887..0000000000 --- a/src/client/app/auth/views/form.vue +++ /dev/null @@ -1,141 +0,0 @@ - - - - - diff --git a/src/client/app/auth/views/index.vue b/src/client/app/auth/views/index.vue deleted file mode 100644 index ad9b1e4e35..0000000000 --- a/src/client/app/auth/views/index.vue +++ /dev/null @@ -1,153 +0,0 @@ - - - - - diff --git a/src/client/app/boot.js b/src/client/app/boot.js deleted file mode 100644 index 64d4629883..0000000000 --- a/src/client/app/boot.js +++ /dev/null @@ -1,171 +0,0 @@ -/** - * MISSKEY BOOT LOADER - * (ENTRY POINT) - */ - -'use strict'; - -(async function() { - // キャッシュ削除要求があれば従う - if (localStorage.getItem('shouldFlush') == 'true') { - refresh(); - return; - } - - const langs = LANGS; - - //#region Apply theme - const theme = localStorage.getItem('theme'); - if (theme) { - for (const [k, v] of Object.entries(JSON.parse(theme))) { - document.documentElement.style.setProperty(`--${k}`, v.toString()); - } - } - //#endregion - - //#region Load settings - let settings = null; - const vuex = localStorage.getItem('vuex'); - if (vuex) { - settings = JSON.parse(vuex); - } - //#endregion - - // Get the current url information - const url = new URL(location.href); - - //#region Detect app name - let app = null; - - if (`${url.pathname}/`.startsWith('/docs/')) app = 'docs'; - if (`${url.pathname}/`.startsWith('/dev/')) app = 'dev'; - if (`${url.pathname}/`.startsWith('/auth/')) app = 'auth'; - if (`${url.pathname}/`.startsWith('/admin/')) app = 'admin'; - //#endregion - - // Script version - const ver = localStorage.getItem('v') || VERSION; - - //#region Detect the user language - let lang = null; - - if (langs.includes(navigator.language)) { - lang = navigator.language; - } else { - lang = langs.find(x => x.split('-')[0] == navigator.language); - - if (lang == null) { - // Fallback - lang = 'en-US'; - } - } - - if (settings && settings.device.lang && - langs.includes(settings.device.lang)) - { - lang = settings.device.lang; - } - - localStorage.setItem('lang', lang); - //#endregion - - //#region Fetch locale data - const cachedLocale = localStorage.getItem('locale'); - const localeKey = localStorage.getItem('localeKey'); - let localeData = null; - - if (cachedLocale == null || localeKey != `${ver}.${lang}`) { - const locale = await fetch(`/assets/locales/${lang}.json?ver=${ver}`) - .then(response => response.json()); - localeData = locale; - - localStorage.setItem('locale', JSON.stringify(locale)); - localStorage.setItem('localeKey', `${ver}.${lang}`); - } else { - localeData = JSON.parse(cachedLocale); - } - //#endregion - - // Detect the user agent - const ua = navigator.userAgent.toLowerCase(); - let isMobile = /mobile|iphone|ipad|android/.test(ua) || window.innerWidth < 576; - if (settings && settings.device.appTypeForce) { - if (settings.device.appTypeForce === 'mobile') { - isMobile = true; - } else if (settings.device.appTypeForce === 'desktop') { - isMobile = false; - } - } - - // Get the element - const head = document.getElementsByTagName('head')[0]; - - // If mobile, insert the viewport meta tag - if (isMobile) { - const viewport = document.getElementsByName("viewport").item(0); - viewport.content = `${viewport.content},minimum-scale=1,maximum-scale=1,user-scalable=no`; - head.appendChild(viewport); - } - - // Switch desktop or mobile version - if (app == null) { - app = isMobile ? 'mobile' : 'desktop'; - } - - // Load an app script - // Note: 'async' make it possible to load the script asyncly. - // 'defer' make it possible to run the script when the dom loaded. - const script = document.createElement('script'); - script.src = `/assets/${app}.${ver}.js`; - script.async = true; - script.defer = true; - head.appendChild(script); - - // 3秒経ってもスクリプトがロードされない場合はバージョンが古くて - // 404になっているせいかもしれないので、バージョンを確認して古ければ更新する - // - // 読み込まれたスクリプトからこのタイマーを解除できるように、 - // グローバルにタイマーIDを代入しておく - window.mkBootTimer = window.setTimeout(async () => { - // Fetch meta - const res = await fetch('/api/meta', { - method: 'POST', - cache: 'no-cache' - }); - - // Parse - const meta = await res.json(); - - // Compare versions - if (meta.version != ver) { - localStorage.setItem('v', meta.version); - - alert( - localeData.common._settings["update-available"] + - '\n' + - localeData.common._settings["update-available-desc"] - ); - refresh(); - } - }, 3000); - - function refresh() { - localStorage.setItem('shouldFlush', 'false'); - - localStorage.removeItem('locale'); - - // Clear cache (service worker) - try { - navigator.serviceWorker.controller.postMessage('clear'); - - navigator.serviceWorker.getRegistrations().then(registrations => { - for (const registration of registrations) registration.unregister(); - }); - } catch (e) { - console.error(e); - } - - // Force reload - location.reload(true); - } -})(); diff --git a/src/client/app/common/define-widget.ts b/src/client/app/common/define-widget.ts deleted file mode 100644 index ba4deafe3a..0000000000 --- a/src/client/app/common/define-widget.ts +++ /dev/null @@ -1,70 +0,0 @@ -import Vue from 'vue'; - -export default function (data: { - name: string; - props?: () => T; -}) { - return Vue.extend({ - props: { - widget: { - type: Object - }, - column: { - type: Object, - default: null - }, - platform: { - type: String, - required: true - }, - isCustomizeMode: { - type: Boolean, - default: false - } - }, - - computed: { - id(): string { - return this.widget.id; - }, - - props(): T { - return this.widget.data; - } - }, - - data() { - return { - bakedOldProps: null - }; - }, - - created() { - this.mergeProps(); - - this.$watch('props', () => { - this.mergeProps(); - }); - }, - - methods: { - mergeProps() { - if (data.props) { - const defaultProps = data.props(); - for (const prop of Object.keys(defaultProps)) { - if (this.props.hasOwnProperty(prop)) continue; - Vue.set(this.props, prop, defaultProps[prop]); - } - } - }, - - save() { - if (this.platform == 'deck') { - this.$store.commit('updateDeckColumn', this.column); - } else { - this.$store.commit('updateWidget', this.widget); - } - } - } - }); -} diff --git a/src/client/app/common/hotkey.ts b/src/client/app/common/hotkey.ts deleted file mode 100644 index a53d3f479e..0000000000 --- a/src/client/app/common/hotkey.ts +++ /dev/null @@ -1,106 +0,0 @@ -import keyCode from './keycode'; -import { concat } from '../../../prelude/array'; - -type pattern = { - which: string[]; - ctrl?: boolean; - shift?: boolean; - alt?: boolean; -}; - -type action = { - patterns: pattern[]; - - callback: Function; -}; - -const getKeyMap = keymap => Object.entries(keymap).map(([patterns, callback]): action => { - const result = { - patterns: [], - callback: callback - } as action; - - result.patterns = patterns.split('|').map(part => { - const pattern = { - which: [], - ctrl: false, - alt: false, - shift: false - } as pattern; - - const keys = part.trim().split('+').map(x => x.trim().toLowerCase()); - for (const key of keys) { - switch (key) { - case 'ctrl': pattern.ctrl = true; break; - case 'alt': pattern.alt = true; break; - case 'shift': pattern.shift = true; break; - default: pattern.which = keyCode(key).map(k => k.toLowerCase()); - } - } - - return pattern; - }); - - return result; -}); - -const ignoreElemens = ['input', 'textarea']; - -function match(e: KeyboardEvent, patterns: action['patterns']): boolean { - const key = e.code.toLowerCase(); - return patterns.some(pattern => pattern.which.includes(key) && - pattern.ctrl == e.ctrlKey && - pattern.shift == e.shiftKey && - pattern.alt == e.altKey && - !e.metaKey - ); -} - -export default { - install(Vue) { - Vue.directive('hotkey', { - bind(el, binding) { - el._hotkey_global = binding.modifiers.global === true; - - const actions = getKeyMap(binding.value); - - // flatten - const reservedKeys = concat(actions.map(a => a.patterns)); - - el._misskey_reservedKeys = reservedKeys; - - el._keyHandler = (e: KeyboardEvent) => { - const targetReservedKeys = document.activeElement ? ((document.activeElement as any)._misskey_reservedKeys || []) : []; - if (document.activeElement && ignoreElemens.some(el => document.activeElement.matches(el))) return; - - for (const action of actions) { - const matched = match(e, action.patterns); - - if (matched) { - if (el._hotkey_global && match(e, targetReservedKeys)) return; - - e.preventDefault(); - e.stopPropagation(); - action.callback(e); - break; - } - } - }; - - if (el._hotkey_global) { - document.addEventListener('keydown', el._keyHandler); - } else { - el.addEventListener('keydown', el._keyHandler); - } - }, - - unbind(el) { - if (el._hotkey_global) { - document.removeEventListener('keydown', el._keyHandler); - } else { - el.removeEventListener('keydown', el._keyHandler); - } - } - }); - } -}; diff --git a/src/client/app/common/keycode.ts b/src/client/app/common/keycode.ts deleted file mode 100644 index 5786c1dc0a..0000000000 --- a/src/client/app/common/keycode.ts +++ /dev/null @@ -1,33 +0,0 @@ -export default (input: string): string[] => { - if (Object.keys(aliases).some(a => a.toLowerCase() == input.toLowerCase())) { - const codes = aliases[input]; - return Array.isArray(codes) ? codes : [codes]; - } else { - return [input]; - } -}; - -export const aliases = { - 'esc': 'Escape', - 'enter': ['Enter', 'NumpadEnter'], - 'up': 'ArrowUp', - 'down': 'ArrowDown', - 'left': 'ArrowLeft', - 'right': 'ArrowRight', - 'plus': ['NumpadAdd', 'Semicolon'], -}; - -/*! -* Programatically add the following -*/ - -// lower case chars -for (let i = 97; i < 123; i++) { - const char = String.fromCharCode(i); - aliases[char] = `Key${char.toUpperCase()}`; -} - -// numbers -for (let i = 0; i < 10; i++) { - aliases[i] = [`Numpad${i}`, `Digit${i}`]; -} diff --git a/src/client/app/common/scripts/2fa.ts b/src/client/app/common/scripts/2fa.ts deleted file mode 100644 index f638cce156..0000000000 --- a/src/client/app/common/scripts/2fa.ts +++ /dev/null @@ -1,5 +0,0 @@ -export function hexifyAB(buffer) { - return Array.from(new Uint8Array(buffer)) - .map(item => item.toString(16).padStart(2, 0)) - .join(''); -} diff --git a/src/client/app/common/scripts/check-for-update.ts b/src/client/app/common/scripts/check-for-update.ts deleted file mode 100644 index d487915766..0000000000 --- a/src/client/app/common/scripts/check-for-update.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { version as current } from '../../config'; - -export default async function($root: any, force = false, silent = false) { - const meta = await $root.getMeta(force); - const newer = meta.version; - - if (newer != current) { - localStorage.setItem('should-refresh', 'true'); - localStorage.setItem('v', newer); - - // Clear cache (service worker) - try { - if (navigator.serviceWorker.controller) { - navigator.serviceWorker.controller.postMessage('clear'); - } - - const registrations = await navigator.serviceWorker.getRegistrations(); - for (const registration of registrations) { - registration.unregister(); - } - } catch (e) { - console.error(e); - } - - /*if (!silent) { - $root.dialog({ - title: $root.$t('@.update-available-title'), - text: $root.$t('@.update-available', { newer, current }) - }); - }*/ - - return newer; - } else { - return null; - } -} diff --git a/src/client/app/common/scripts/collect-page-vars.ts b/src/client/app/common/scripts/collect-page-vars.ts deleted file mode 100644 index a4096fb2c2..0000000000 --- a/src/client/app/common/scripts/collect-page-vars.ts +++ /dev/null @@ -1,48 +0,0 @@ -export function collectPageVars(content) { - const pageVars = []; - const collect = (xs: any[]) => { - for (const x of xs) { - if (x.type === 'textInput') { - pageVars.push({ - name: x.name, - type: 'string', - value: x.default || '' - }); - } else if (x.type === 'textareaInput') { - pageVars.push({ - name: x.name, - type: 'string', - value: x.default || '' - }); - } else if (x.type === 'numberInput') { - pageVars.push({ - name: x.name, - type: 'number', - value: x.default || 0 - }); - } else if (x.type === 'switch') { - pageVars.push({ - name: x.name, - type: 'boolean', - value: x.default || false - }); - } else if (x.type === 'counter') { - pageVars.push({ - name: x.name, - type: 'number', - value: 0 - }); - } else if (x.type === 'radioButton') { - pageVars.push({ - name: x.name, - type: 'string', - value: x.default || '' - }); - } else if (x.children) { - collect(x.children); - } - } - }; - collect(content); - return pageVars; -} diff --git a/src/client/app/common/scripts/compose-notification.ts b/src/client/app/common/scripts/compose-notification.ts deleted file mode 100644 index ec854f2f4d..0000000000 --- a/src/client/app/common/scripts/compose-notification.ts +++ /dev/null @@ -1,74 +0,0 @@ -import getNoteSummary from '../../../../misc/get-note-summary'; -import getReactionEmoji from '../../../../misc/get-reaction-emoji'; -import getUserName from '../../../../misc/get-user-name'; - -type Notification = { - title: string; - body: string; - icon: string; - onclick?: any; -}; - -// TODO: i18n - -export default function(type, data): Notification { - switch (type) { - case 'driveFileCreated': - return { - title: 'File uploaded', - body: data.name, - icon: data.url - }; - - case 'unreadMessagingMessage': - return { - title: `New message from ${getUserName(data.user)}`, - body: data.text, // TODO: getMessagingMessageSummary(data), - icon: data.user.avatarUrl - }; - - case 'reversiInvited': - return { - title: 'Play reversi with me', - body: `You got reversi invitation from ${getUserName(data.parent)}`, - icon: data.parent.avatarUrl - }; - - case 'notification': - switch (data.type) { - case 'mention': - return { - title: `${getUserName(data.user)}:`, - body: getNoteSummary(data), - icon: data.user.avatarUrl - }; - - case 'reply': - return { - title: `You got reply from ${getUserName(data.user)}:`, - body: getNoteSummary(data), - icon: data.user.avatarUrl - }; - - case 'quote': - return { - title: `${getUserName(data.user)}:`, - body: getNoteSummary(data), - icon: data.user.avatarUrl - }; - - case 'reaction': - return { - title: `${getUserName(data.user)}: ${getReactionEmoji(data.reaction)}:`, - body: getNoteSummary(data.note), - icon: data.user.avatarUrl - }; - - default: - return null; - } - - default: - return null; - } -} diff --git a/src/client/app/common/scripts/contains.ts b/src/client/app/common/scripts/contains.ts deleted file mode 100644 index a5071b3f25..0000000000 --- a/src/client/app/common/scripts/contains.ts +++ /dev/null @@ -1,8 +0,0 @@ -export default (parent, child) => { - let node = child.parentNode; - while (node) { - if (node == parent) return true; - node = node.parentNode; - } - return false; -}; diff --git a/src/client/app/common/scripts/copy-to-clipboard.ts b/src/client/app/common/scripts/copy-to-clipboard.ts deleted file mode 100644 index ab13cab970..0000000000 --- a/src/client/app/common/scripts/copy-to-clipboard.ts +++ /dev/null @@ -1,33 +0,0 @@ -/** - * Clipboardに値をコピー(TODO: 文字列以外も対応) - */ -export default val => { - // 空div 生成 - const tmp = document.createElement('div'); - // 選択用のタグ生成 - const pre = document.createElement('pre'); - - // 親要素のCSSで user-select: none だとコピーできないので書き換える - pre.style.webkitUserSelect = 'auto'; - pre.style.userSelect = 'auto'; - - tmp.appendChild(pre).textContent = val; - - // 要素を画面外へ - const s = tmp.style; - s.position = 'fixed'; - s.right = '200%'; - - // body に追加 - document.body.appendChild(tmp); - // 要素を選択 - document.getSelection().selectAllChildren(tmp); - - // クリップボードにコピー - const result = document.execCommand('copy'); - - // 要素削除 - document.body.removeChild(tmp); - - return result; -}; diff --git a/src/client/app/common/scripts/format-uptime.ts b/src/client/app/common/scripts/format-uptime.ts deleted file mode 100644 index 6550e4cc39..0000000000 --- a/src/client/app/common/scripts/format-uptime.ts +++ /dev/null @@ -1,25 +0,0 @@ - -/** - * Format like the uptime command - */ -export default function(sec) { - if (!sec) return sec; - - const day = Math.floor(sec / 86400); - const tod = sec % 86400; - - // Days part in string: 2 days, 1 day, null - const d = day >= 2 ? `${day} days` : day >= 1 ? `${day} day` : null; - - // Time part in string: 1 sec, 1 min, 1:01 - const t - = tod < 60 ? `${Math.floor(tod)} sec` - : tod < 3600 ? `${Math.floor(tod / 60)} min` - : `${Math.floor(tod / 60 / 60)}:${Math.floor((tod / 60) % 60).toString().padStart(2, '0')}`; - - let str = ''; - if (d) str += `${d}, `; - str += t; - - return str; -} diff --git a/src/client/app/common/scripts/gen-search-query.ts b/src/client/app/common/scripts/gen-search-query.ts deleted file mode 100644 index fc26cb7f78..0000000000 --- a/src/client/app/common/scripts/gen-search-query.ts +++ /dev/null @@ -1,31 +0,0 @@ -import parseAcct from '../../../../misc/acct/parse'; -import { host as localHost } from '../../config'; - -export async function genSearchQuery(v: any, q: string) { - let host: string; - let userId: string; - if (q.split(' ').some(x => x.startsWith('@'))) { - for (const at of q.split(' ').filter(x => x.startsWith('@')).map(x => x.substr(1))) { - if (at.includes('.')) { - if (at === localHost || at === '.') { - host = null; - } else { - host = at; - } - } else { - const user = await v.$root.api('users/show', parseAcct(at)).catch(x => null); - if (user) { - userId = user.id; - } else { - // todo: show error - } - } - } - - } - return { - query: q.split(' ').filter(x => !x.startsWith('/') && !x.startsWith('@')).join(' '), - host: host, - userId: userId - }; -} diff --git a/src/client/app/common/scripts/get-face.ts b/src/client/app/common/scripts/get-face.ts deleted file mode 100644 index 19f2bdb064..0000000000 --- a/src/client/app/common/scripts/get-face.ts +++ /dev/null @@ -1,11 +0,0 @@ -const faces = [ - '(=^・・^=)', - 'v(\'ω\')v', - '🐡( \'-\' 🐡 )フグパンチ!!!!', - '✌️(´・_・`)✌️', - '(。>﹏<。)', - '(Δ・x・Δ)', - '(コ`・ヘ・´ケ)' -]; - -export default () => faces[Math.floor(Math.random() * faces.length)]; diff --git a/src/client/app/common/scripts/get-md5.ts b/src/client/app/common/scripts/get-md5.ts deleted file mode 100644 index b002d762b1..0000000000 --- a/src/client/app/common/scripts/get-md5.ts +++ /dev/null @@ -1,10 +0,0 @@ -// スクリプトサイズがデカい -//import * as crypto from 'crypto'; - -export default (data: ArrayBuffer) => { - //const buf = new Buffer(data); - //const hash = crypto.createHash('md5'); - //hash.update(buf); - //return hash.digest('hex'); - return ''; -}; diff --git a/src/client/app/common/scripts/get-static-image-url.ts b/src/client/app/common/scripts/get-static-image-url.ts deleted file mode 100644 index 7460ca38f2..0000000000 --- a/src/client/app/common/scripts/get-static-image-url.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { url as instanceUrl } from '../../config'; -import * as url from '../../../../prelude/url'; - -export function getStaticImageUrl(baseUrl: string): string { - const u = new URL(baseUrl); - const dummy = `${u.host}${u.pathname}`; // 拡張子がないとキャッシュしてくれないCDNがあるので - return `${instanceUrl}/proxy/${dummy}?${url.query({ - url: u.href, - static: '1' - })}`; -} diff --git a/src/client/app/common/scripts/loading.ts b/src/client/app/common/scripts/loading.ts deleted file mode 100644 index 70a3a4c85e..0000000000 --- a/src/client/app/common/scripts/loading.ts +++ /dev/null @@ -1,21 +0,0 @@ -import * as NProgress from 'nprogress'; -NProgress.configure({ - trickleSpeed: 500, - showSpinner: false -}); - -const root = document.getElementsByTagName('html')[0]; - -export default { - start: () => { - root.classList.add('progress'); - NProgress.start(); - }, - done: () => { - root.classList.remove('progress'); - NProgress.done(); - }, - set: val => { - NProgress.set(val); - } -}; diff --git a/src/client/app/common/scripts/note-mixin.ts b/src/client/app/common/scripts/note-mixin.ts deleted file mode 100644 index 84e134cc32..0000000000 --- a/src/client/app/common/scripts/note-mixin.ts +++ /dev/null @@ -1,239 +0,0 @@ -import { parse } from '../../../../mfm/parse'; -import { sum, unique } from '../../../../prelude/array'; -import shouldMuteNote from './should-mute-note'; -import MkNoteMenu from '../views/components/note-menu.vue'; -import MkReactionPicker from '../views/components/reaction-picker.vue'; -import pleaseLogin from './please-login'; -import i18n from '../../i18n'; - -function focus(el, fn) { - const target = fn(el); - if (target) { - if (target.hasAttribute('tabindex')) { - target.focus(); - } else { - focus(target, fn); - } - } -} - -type Opts = { - mobile?: boolean; -}; - -export default (opts: Opts = {}) => ({ - i18n: i18n(), - - data() { - return { - showContent: false, - hideThisNote: false, - openingMenu: false - }; - }, - - computed: { - keymap(): any { - return { - 'r': () => this.reply(true), - 'e|a|plus': () => this.react(true), - 'q': () => this.renote(true), - 'f|b': this.favorite, - 'delete|ctrl+d': this.del, - 'ctrl+q': this.renoteDirectly, - 'up|k|shift+tab': this.focusBefore, - 'down|j|tab': this.focusAfter, - //'esc': this.blur, - 'm|o': () => this.menu(true), - 's': this.toggleShowContent, - '1': () => this.reactDirectly('like'), - '2': () => this.reactDirectly('love'), - '3': () => this.reactDirectly('laugh'), - '4': () => this.reactDirectly('hmm'), - '5': () => this.reactDirectly('surprise'), - '6': () => this.reactDirectly('congrats'), - '7': () => this.reactDirectly('angry'), - '8': () => this.reactDirectly('confused'), - '9': () => this.reactDirectly('rip'), - '0': () => this.reactDirectly('pudding'), - }; - }, - - isRenote(): boolean { - return (this.note.renote && - this.note.text == null && - this.note.fileIds.length == 0 && - this.note.poll == null); - }, - - appearNote(): any { - return this.isRenote ? this.note.renote : this.note; - }, - - isMyNote(): boolean { - return this.$store.getters.isSignedIn && (this.$store.state.i.id === this.appearNote.userId); - }, - - reactionsCount(): number { - return this.appearNote.reactions - ? sum(Object.values(this.appearNote.reactions)) - : 0; - }, - - title(): string { - return ''; - }, - - urls(): string[] { - if (this.appearNote.text) { - const ast = parse(this.appearNote.text); - // TODO: 再帰的にURL要素がないか調べる - const urls = unique(ast - .filter(t => ((t.node.type == 'url' || t.node.type == 'link') && t.node.props.url && !t.node.props.silent)) - .map(t => t.node.props.url)); - - // unique without hash - // [ http://a/#1, http://a/#2, http://b/#3 ] => [ http://a/#1, http://b/#3 ] - const removeHash = x => x.replace(/#[^#]*$/, ''); - - return urls.reduce((array, url) => { - const removed = removeHash(url); - if (!array.map(x => removeHash(x)).includes(removed)) array.push(url); - return array; - }, []); - } else { - return null; - } - } - }, - - created() { - this.hideThisNote = shouldMuteNote(this.$store.state.i, this.$store.state.settings, this.appearNote); - }, - - methods: { - reply(viaKeyboard = false) { - pleaseLogin(this.$root); - this.$root.$post({ - reply: this.appearNote, - animation: !viaKeyboard, - cb: () => { - this.focus(); - } - }); - }, - - renote(viaKeyboard = false) { - pleaseLogin(this.$root); - this.$root.$post({ - renote: this.appearNote, - animation: !viaKeyboard, - cb: () => { - this.focus(); - } - }); - }, - - renoteDirectly() { - (this as any).api('notes/create', { - renoteId: this.appearNote.id - }); - }, - - react(viaKeyboard = false) { - pleaseLogin(this.$root); - this.blur(); - const w = this.$root.new(MkReactionPicker, { - source: this.$refs.reactButton, - showFocus: viaKeyboard, - animation: !viaKeyboard - }); - w.$once('chosen', reaction => { - this.$root.api('notes/reactions/create', { - noteId: this.appearNote.id, - reaction: reaction - }).then(() => { - w.close(); - }); - }); - w.$once('closed', this.focus); - }, - - reactDirectly(reaction) { - this.$root.api('notes/reactions/create', { - noteId: this.appearNote.id, - reaction: reaction - }); - }, - - undoReact(note) { - const oldReaction = note.myReaction; - if (!oldReaction) return; - this.$root.api('notes/reactions/delete', { - noteId: note.id - }); - }, - - favorite() { - pleaseLogin(this.$root); - this.$root.api('notes/favorites/create', { - noteId: this.appearNote.id - }).then(() => { - this.$root.dialog({ - type: 'success', - splash: true - }); - }); - }, - - del() { - this.$root.dialog({ - type: 'warning', - text: this.$t('@.delete-confirm'), - showCancelButton: true - }).then(({ canceled }) => { - if (canceled) return; - - this.$root.api('notes/delete', { - noteId: this.appearNote.id - }); - }); - }, - - menu(viaKeyboard = false) { - if (this.openingMenu) return; - this.openingMenu = true; - const w = this.$root.new(MkNoteMenu, { - source: this.$refs.menuButton, - note: this.appearNote, - animation: !viaKeyboard - }).$once('closed', () => { - this.openingMenu = false; - this.focus(); - }); - this.$once('hook:beforeDestroy', () => { - w.destroyDom(); - }); - }, - - toggleShowContent() { - this.showContent = !this.showContent; - }, - - focus() { - this.$el.focus(); - }, - - blur() { - this.$el.blur(); - }, - - focusBefore() { - focus(this.$el, e => e.previousElementSibling); - }, - - focusAfter() { - focus(this.$el, e => e.nextElementSibling); - } - } -}); diff --git a/src/client/app/common/scripts/note-subscriber.ts b/src/client/app/common/scripts/note-subscriber.ts deleted file mode 100644 index 5b31a9f9d0..0000000000 --- a/src/client/app/common/scripts/note-subscriber.ts +++ /dev/null @@ -1,149 +0,0 @@ -import Vue from 'vue'; - -export default prop => ({ - data() { - return { - connection: null - }; - }, - - computed: { - $_ns_note_(): any { - return this[prop]; - }, - - $_ns_isRenote(): boolean { - return (this.$_ns_note_.renote != null && - this.$_ns_note_.text == null && - this.$_ns_note_.fileIds.length == 0 && - this.$_ns_note_.poll == null); - }, - - $_ns_target(): any { - return this.$_ns_isRenote ? this.$_ns_note_.renote : this.$_ns_note_; - }, - }, - - created() { - if (this.$store.getters.isSignedIn) { - this.connection = this.$root.stream; - } - }, - - mounted() { - this.capture(true); - - if (this.$store.getters.isSignedIn) { - this.connection.on('_connected_', this.onStreamConnected); - } - }, - - beforeDestroy() { - this.decapture(true); - - if (this.$store.getters.isSignedIn) { - this.connection.off('_connected_', this.onStreamConnected); - } - }, - - methods: { - capture(withHandler = false) { - if (this.$store.getters.isSignedIn) { - const data = { - id: this.$_ns_target.id - } as any; - - if ( - (this.$_ns_target.visibleUserIds || []).includes(this.$store.state.i.id) || - (this.$_ns_target.mentions || []).includes(this.$store.state.i.id) - ) { - data.read = true; - } - - this.connection.send('sn', data); - if (withHandler) this.connection.on('noteUpdated', this.onStreamNoteUpdated); - } - }, - - decapture(withHandler = false) { - if (this.$store.getters.isSignedIn) { - this.connection.send('un', { - id: this.$_ns_target.id - }); - if (withHandler) this.connection.off('noteUpdated', this.onStreamNoteUpdated); - } - }, - - onStreamConnected() { - this.capture(); - }, - - onStreamNoteUpdated(data) { - const { type, id, body } = data; - - if (id !== this.$_ns_target.id) return; - - switch (type) { - case 'reacted': { - const reaction = body.reaction; - - if (this.$_ns_target.reactions == null) { - Vue.set(this.$_ns_target, 'reactions', {}); - } - - if (this.$_ns_target.reactions[reaction] == null) { - Vue.set(this.$_ns_target.reactions, reaction, 0); - } - - // Increment the count - this.$_ns_target.reactions[reaction]++; - - if (body.userId == this.$store.state.i.id) { - Vue.set(this.$_ns_target, 'myReaction', reaction); - } - break; - } - - case 'unreacted': { - const reaction = body.reaction; - - if (this.$_ns_target.reactions == null) { - return; - } - - if (this.$_ns_target.reactions[reaction] == null) { - return; - } - - // Decrement the count - if (this.$_ns_target.reactions[reaction] > 0) this.$_ns_target.reactions[reaction]--; - - if (body.userId == this.$store.state.i.id) { - Vue.set(this.$_ns_target, 'myReaction', null); - } - break; - } - - case 'pollVoted': { - const choice = body.choice; - this.$_ns_target.poll.choices[choice].votes++; - if (body.userId == this.$store.state.i.id) { - Vue.set(this.$_ns_target.poll.choices[choice], 'isVoted', true); - } - break; - } - - case 'deleted': { - Vue.set(this.$_ns_target, 'deletedAt', body.deletedAt); - Vue.set(this.$_ns_target, 'renote', null); - this.$_ns_target.text = null; - this.$_ns_target.fileIds = []; - this.$_ns_target.poll = null; - this.$_ns_target.geo = null; - this.$_ns_target.cw = null; - break; - } - } - }, - } -}); diff --git a/src/client/app/common/scripts/paging.ts b/src/client/app/common/scripts/paging.ts deleted file mode 100644 index b4f2ec1ae1..0000000000 --- a/src/client/app/common/scripts/paging.ts +++ /dev/null @@ -1,189 +0,0 @@ -import Vue from 'vue'; - -export default (opts) => ({ - data() { - return { - items: [], - queue: [], - offset: 0, - fetching: true, - moreFetching: false, - inited: false, - more: false - }; - }, - - computed: { - empty(): boolean { - return this.items.length == 0 && !this.fetching && this.inited; - }, - - error(): boolean { - return !this.fetching && !this.inited; - } - }, - - watch: { - queue(x) { - if (opts.onQueueChanged) opts.onQueueChanged(this, x); - }, - - pagination() { - this.init(); - } - }, - - created() { - opts.displayLimit = opts.displayLimit || 30; - this.init(); - }, - - mounted() { - if (opts.captureWindowScroll) { - this.isScrollTop = () => { - return window.scrollY <= 8; - }; - - window.addEventListener('scroll', this.onScroll, { passive: true }); - } else if (opts.isContainer) { - this.isScrollTop = () => { - return this.$el.scrollTop <= 8; - }; - - this.$el.addEventListener('scroll', this.onScroll, { passive: true }); - } - }, - - beforeDestroy() { - if (opts.captureWindowScroll) { - window.removeEventListener('scroll', this.onScroll); - } else if (opts.isContainer) { - this.$el.removeEventListener('scroll', this.onScroll); - } - }, - - methods: { - updateItem(i, item) { - Vue.set((this as any).items, i, item); - }, - - reload() { - this.queue = []; - this.items = []; - this.init(); - }, - - async init() { - this.fetching = true; - if (opts.beforeInit) opts.beforeInit(this); - let params = typeof this.pagination.params === 'function' ? this.pagination.params(true) : this.pagination.params; - if (params && params.then) params = await params; - await this.$root.api(this.pagination.endpoint, { - limit: (this.pagination.limit || 10) + 1, - ...params - }).then(x => { - if (x.length == (this.pagination.limit || 10) + 1) { - x.pop(); - this.items = x; - this.more = true; - } else { - this.items = x; - this.more = false; - } - this.offset = x.length; - this.inited = true; - this.fetching = false; - if (opts.onInited) opts.onInited(this); - }, e => { - this.fetching = false; - if (opts.onInited) opts.onInited(this); - }); - }, - - async fetchMore() { - if (!this.more || this.moreFetching || this.items.length === 0) return; - this.moreFetching = true; - let params = typeof this.pagination.params === 'function' ? this.pagination.params(false) : this.pagination.params; - if (params && params.then) params = await params; - await this.$root.api(this.pagination.endpoint, { - limit: (this.pagination.limit || 10) + 1, - ...(this.pagination.endpoint === 'notes/search' ? { - offset: this.offset, - } : { - untilId: this.items[this.items.length - 1].id, - }), - ...params - }).then(x => { - if (x.length == (this.pagination.limit || 10) + 1) { - x.pop(); - this.items = this.items.concat(x); - this.more = true; - } else { - this.items = this.items.concat(x); - this.more = false; - } - this.offset += x.length; - this.moreFetching = false; - }, e => { - this.moreFetching = false; - }); - }, - - prepend(item, silent = false) { - if (opts.onPrepend) { - const cancel = opts.onPrepend(this, item, silent); - if (cancel) return; - } - - if (this.isScrollTop == null || this.isScrollTop()) { - // Prepend the item - this.items.unshift(item); - - // オーバーフローしたら古い投稿は捨てる - if (this.items.length >= opts.displayLimit) { - this.items = this.items.slice(0, opts.displayLimit); - this.more = true; - } - } else { - this.queue.push(item); - } - }, - - append(item) { - this.items.push(item); - }, - - releaseQueue() { - for (const n of this.queue) { - this.prepend(n, true); - } - this.queue = []; - }, - - onScroll() { - if (this.isScrollTop()) { - this.onTop(); - } - - if (this.$store.state.settings.fetchOnScroll) { - // 親要素が display none だったら弾く - // https://github.com/syuilo/misskey/issues/1569 - // http://d.hatena.ne.jp/favril/20091105/1257403319 - if (this.$el.offsetHeight == 0) return; - - const bottomPosition = opts.isContainer ? this.$el.scrollHeight : document.body.offsetHeight; - - const currentBottomPosition = opts.isContainer ? this.$el.scrollTop + this.$el.clientHeight : window.scrollY + window.innerHeight; - if (currentBottomPosition > (bottomPosition - 8)) this.onBottom(); - } - }, - - onTop() { - this.releaseQueue(); - }, - - onBottom() { - this.fetchMore(); - } - } -}); diff --git a/src/client/app/common/scripts/please-login.ts b/src/client/app/common/scripts/please-login.ts deleted file mode 100644 index 7125541bb1..0000000000 --- a/src/client/app/common/scripts/please-login.ts +++ /dev/null @@ -1,10 +0,0 @@ -export default ($root: any) => { - if ($root.$store.getters.isSignedIn) return; - - $root.dialog({ - title: $root.$t('@.signin-required'), - text: null - }); - - throw new Error('signin required'); -}; diff --git a/src/client/app/common/scripts/post-form.ts b/src/client/app/common/scripts/post-form.ts deleted file mode 100644 index 496782fd30..0000000000 --- a/src/client/app/common/scripts/post-form.ts +++ /dev/null @@ -1,537 +0,0 @@ -import insertTextAtCursor from 'insert-text-at-cursor'; -import { length } from 'stringz'; -import { toASCII } from 'punycode'; -import MkVisibilityChooser from '../views/components/visibility-chooser.vue'; -import getFace from './get-face'; -import { parse } from '../../../../mfm/parse'; -import { host, url } from '../../config'; -import i18n from '../../i18n'; -import { erase, unique } from '../../../../prelude/array'; -import extractMentions from '../../../../misc/extract-mentions'; -import { formatTimeString } from '../../../../misc/format-time-string'; - -export default (opts) => ({ - i18n: i18n(), - - components: { - XPostFormAttaches: () => import('../views/components/post-form-attaches.vue').then(m => m.default), - XPollEditor: () => import('../views/components/poll-editor.vue').then(m => m.default) - }, - - props: { - reply: { - type: Object, - required: false - }, - renote: { - type: Object, - required: false - }, - mention: { - type: Object, - required: false - }, - initialText: { - type: String, - required: false - }, - initialNote: { - type: Object, - required: false - }, - instant: { - type: Boolean, - required: false, - default: false - } - }, - - data() { - return { - posting: false, - text: '', - files: [], - uploadings: [], - poll: false, - pollChoices: [], - pollMultiple: false, - pollExpiration: [], - useCw: false, - cw: null, - geo: null, - visibility: 'public', - visibleUsers: [], - localOnly: false, - autocomplete: null, - draghover: false, - quoteId: null, - recentHashtags: JSON.parse(localStorage.getItem('hashtags') || '[]'), - maxNoteTextLength: 1000 - }; - }, - - computed: { - draftId(): string { - return this.renote - ? `renote:${this.renote.id}` - : this.reply - ? `reply:${this.reply.id}` - : 'note'; - }, - - placeholder(): string { - const xs = [ - this.$t('@.note-placeholders.a'), - this.$t('@.note-placeholders.b'), - this.$t('@.note-placeholders.c'), - this.$t('@.note-placeholders.d'), - this.$t('@.note-placeholders.e'), - this.$t('@.note-placeholders.f') - ]; - const x = xs[Math.floor(Math.random() * xs.length)]; - - return this.renote - ? opts.mobile ? this.$t('@.post-form.option-quote-placeholder') : this.$t('@.post-form.quote-placeholder') - : this.reply - ? this.$t('@.post-form.reply-placeholder') - : x; - }, - - submitText(): string { - return this.renote - ? this.$t('@.post-form.renote') - : this.reply - ? this.$t('@.post-form.reply') - : this.$t('@.post-form.submit'); - }, - - canPost(): boolean { - return !this.posting && - (1 <= this.text.length || 1 <= this.files.length || this.poll || this.renote) && - (length(this.text.trim()) <= this.maxNoteTextLength) && - (!this.poll || this.pollChoices.length >= 2); - } - }, - - created() { - this.$root.getMeta().then(meta => { - this.maxNoteTextLength = meta.maxNoteTextLength; - }); - }, - - mounted() { - if (this.initialText) { - this.text = this.initialText; - } - - if (this.mention) { - this.text = this.mention.host ? `@${this.mention.username}@${toASCII(this.mention.host)}` : `@${this.mention.username}`; - this.text += ' '; - } - - if (this.reply && this.reply.user.host != null) { - this.text = `@${this.reply.user.username}@${toASCII(this.reply.user.host)} `; - } - - if (this.reply && this.reply.text != null) { - const ast = parse(this.reply.text); - - for (const x of extractMentions(ast)) { - const mention = x.host ? `@${x.username}@${toASCII(x.host)}` : `@${x.username}`; - - // 自分は除外 - if (this.$store.state.i.username == x.username && x.host == null) continue; - if (this.$store.state.i.username == x.username && x.host == host) continue; - - // 重複は除外 - if (this.text.indexOf(`${mention} `) != -1) continue; - - this.text += `${mention} `; - } - } - - // デフォルト公開範囲 - this.applyVisibility(this.$store.state.settings.rememberNoteVisibility ? (this.$store.state.device.visibility || this.$store.state.settings.defaultNoteVisibility) : this.$store.state.settings.defaultNoteVisibility); - - if (this.reply && this.reply.localOnly) { - this.localOnly = true; - } - - // 公開以外へのリプライ時は元の公開範囲を引き継ぐ - if (this.reply && ['home', 'followers', 'specified'].includes(this.reply.visibility)) { - this.visibility = this.reply.visibility; - if (this.reply.visibility === 'specified') { - this.$root.api('users/show', { - userIds: this.reply.visibleUserIds.filter(uid => uid !== this.$store.state.i.id && uid !== this.reply.userId) - }).then(users => { - this.visibleUsers.push(...users); - }); - - if (this.reply.userId !== this.$store.state.i.id) { - this.$root.api('users/show', { userId: this.reply.userId }).then(user => { - this.visibleUsers.push(user); - }); - } - } - } - - // keep cw when reply - if (this.$store.state.settings.keepCw && this.reply && this.reply.cw) { - this.useCw = true; - this.cw = this.reply.cw; - } - - this.focus(); - - this.$nextTick(() => { - this.focus(); - }); - - this.$nextTick(() => { - // 書きかけの投稿を復元 - if (!this.instant && !this.mention) { - const draft = JSON.parse(localStorage.getItem('drafts') || '{}')[this.draftId]; - if (draft) { - this.text = draft.data.text; - this.files = (draft.data.files || []).filter(e => e); - if (draft.data.poll) { - this.poll = true; - this.$nextTick(() => { - (this.$refs.poll as any).set(draft.data.poll); - }); - } - this.$emit('change-attached-files', this.files); - } - } - - // 削除して編集 - if (this.initialNote) { - const init = this.initialNote; - this.text = init.text ? init.text : ''; - this.files = init.files; - this.cw = init.cw; - this.useCw = init.cw != null; - if (init.poll) { - this.poll = true; - this.$nextTick(() => { - (this.$refs.poll as any).set({ - choices: init.poll.choices.map(c => c.text), - multiple: init.poll.multiple - }); - }); - } - // hack 位置情報投稿が動くようになったら適用する - this.geo = null; - this.visibility = init.visibility; - this.localOnly = init.localOnly; - this.quoteId = init.renote ? init.renote.id : null; - } - - this.$nextTick(() => this.watch()); - }); - }, - - methods: { - watch() { - this.$watch('text', () => this.saveDraft()); - this.$watch('poll', () => this.saveDraft()); - this.$watch('files', () => this.saveDraft()); - }, - - trimmedLength(text: string) { - return length(text.trim()); - }, - - addTag(tag: string) { - insertTextAtCursor(this.$refs.text, ` #${tag} `); - }, - - focus() { - (this.$refs.text as any).focus(); - }, - - chooseFile() { - (this.$refs.file as any).click(); - }, - - chooseFileFromDrive() { - this.$chooseDriveFile({ - multiple: true - }).then(files => { - for (const x of files) this.attachMedia(x); - }); - }, - - attachMedia(driveFile) { - this.files.push(driveFile); - this.$emit('change-attached-files', this.files); - }, - - detachMedia(id) { - this.files = this.files.filter(x => x.id != id); - this.$emit('change-attached-files', this.files); - }, - - onChangeFile() { - for (const x of Array.from((this.$refs.file as any).files)) this.upload(x); - }, - - upload(file: File, name?: string) { - (this.$refs.uploader as any).upload(file, this.$store.state.settings.uploadFolder, name); - }, - - onChangeUploadings(uploads) { - this.$emit('change-uploadings', uploads); - }, - - onPollUpdate() { - const got = this.$refs.poll.get(); - this.pollChoices = got.choices; - this.pollMultiple = got.multiple; - this.pollExpiration = [got.expiration, got.expiresAt || got.expiredAfter]; - this.saveDraft(); - }, - - setGeo() { - if (navigator.geolocation == null) { - this.$root.dialog({ - type: 'warning', - text: this.$t('@.post-form.geolocation-alert') - }); - return; - } - - navigator.geolocation.getCurrentPosition(pos => { - this.geo = pos.coords; - this.$emit('geo-attached', this.geo); - }, err => { - this.$root.dialog({ - type: 'error', - title: this.$t('@.post-form.error'), - text: err.message - }); - }, { - enableHighAccuracy: true - }); - }, - - removeGeo() { - this.geo = null; - this.$emit('geo-dettached'); - }, - - setVisibility() { - const w = this.$root.new(MkVisibilityChooser, { - source: this.$refs.visibilityButton, - currentVisibility: this.localOnly ? `local-${this.visibility}` : this.visibility - }); - w.$once('chosen', v => { - this.applyVisibility(v); - }); - this.$once('hook:beforeDestroy', () => { - w.close(); - }); - }, - - applyVisibility(v: string) { - const m = v.match(/^local-(.+)/); - if (m) { - this.localOnly = true; - this.visibility = m[1]; - } else { - this.localOnly = false; - this.visibility = v; - } - }, - - addVisibleUser() { - this.$root.dialog({ - title: this.$t('@.post-form.enter-username'), - user: true - }).then(({ canceled, result: user }) => { - if (canceled) return; - this.visibleUsers.push(user); - }); - }, - - removeVisibleUser(user) { - this.visibleUsers = erase(user, this.visibleUsers); - }, - - clear() { - this.text = ''; - this.files = []; - this.poll = false; - this.quoteId = null; - this.$emit('change-attached-files', this.files); - }, - - onKeydown(e) { - if ((e.which == 10 || e.which == 13) && (e.ctrlKey || e.metaKey) && this.canPost) this.post(); - }, - - async onPaste(e: ClipboardEvent) { - for (const { item, i } of Array.from(e.clipboardData.items).map((item, i) => ({item, i}))) { - if (item.kind == 'file') { - const file = item.getAsFile(); - const lio = file.name.lastIndexOf('.'); - const ext = lio >= 0 ? file.name.slice(lio) : ''; - const formatted = `${formatTimeString(new Date(file.lastModified), this.$store.state.settings.pastedFileName).replace(/{{number}}/g, `${i + 1}`)}${ext}`; - const name = this.$store.state.settings.pasteDialog - ? await this.$root.dialog({ - title: this.$t('@.post-form.enter-file-name'), - input: { - default: formatted - }, - allowEmpty: false - }).then(({ canceled, result }) => canceled ? false : result) - : formatted; - if (name) this.upload(file, name); - } - } - - const paste = e.clipboardData.getData('text'); - - if (!this.renote && !this.quoteId && paste.startsWith(url + '/notes/')) { - e.preventDefault(); - - this.$root.dialog({ - type: 'info', - text: this.$t('@.post-form.quote-question'), - showCancelButton: true - }).then(({ canceled }) => { - if (canceled) { - insertTextAtCursor(this.$refs.text, paste); - return; - } - - this.quoteId = paste.substr(url.length).match(/^\/notes\/(.+?)\/?$/)[1]; - }); - } - }, - - onDragover(e) { - const isFile = e.dataTransfer.items[0].kind == 'file'; - const isDriveFile = e.dataTransfer.types[0] == 'mk_drive_file'; - if (isFile || isDriveFile) { - e.preventDefault(); - this.draghover = true; - e.dataTransfer.dropEffect = e.dataTransfer.effectAllowed == 'all' ? 'copy' : 'move'; - } - }, - - onDragenter(e) { - this.draghover = true; - }, - - onDragleave(e) { - this.draghover = false; - }, - - onDrop(e): void { - this.draghover = false; - - // ファイルだったら - if (e.dataTransfer.files.length > 0) { - e.preventDefault(); - for (const x of Array.from(e.dataTransfer.files)) this.upload(x); - return; - } - - //#region ドライブのファイル - const driveFile = e.dataTransfer.getData('mk_drive_file'); - if (driveFile != null && driveFile != '') { - const file = JSON.parse(driveFile); - this.files.push(file); - this.$emit('change-attached-files', this.files); - e.preventDefault(); - } - //#endregion - }, - - async emoji() { - const Picker = await import('../../desktop/views/components/emoji-picker-dialog.vue').then(m => m.default); - const button = this.$refs.emoji; - const rect = button.getBoundingClientRect(); - const vm = this.$root.new(Picker, { - x: button.offsetWidth + rect.left + window.pageXOffset, - y: rect.top + window.pageYOffset - }); - vm.$once('chosen', emoji => { - insertTextAtCursor(this.$refs.text, emoji); - }); - this.$once('hook:beforeDestroy', () => { - vm.close(); - }); - }, - - saveDraft() { - if (this.instant) return; - - const data = JSON.parse(localStorage.getItem('drafts') || '{}'); - - data[this.draftId] = { - updatedAt: new Date(), - data: { - text: this.text, - files: this.files, - poll: this.poll && this.$refs.poll ? (this.$refs.poll as any).get() : undefined - } - }; - - localStorage.setItem('drafts', JSON.stringify(data)); - }, - - deleteDraft() { - const data = JSON.parse(localStorage.getItem('drafts') || '{}'); - - delete data[this.draftId]; - - localStorage.setItem('drafts', JSON.stringify(data)); - }, - - kao() { - this.text += getFace(); - }, - - post() { - this.posting = true; - const viaMobile = opts.mobile && !this.$store.state.settings.disableViaMobile; - this.$root.api('notes/create', { - text: this.text == '' ? undefined : this.text, - fileIds: this.files.length > 0 ? this.files.map(f => f.id) : undefined, - replyId: this.reply ? this.reply.id : undefined, - renoteId: this.renote ? this.renote.id : this.quoteId ? this.quoteId : undefined, - poll: this.poll ? (this.$refs.poll as any).get() : undefined, - cw: this.useCw ? this.cw || '' : undefined, - visibility: this.visibility, - visibleUserIds: this.visibility == 'specified' ? this.visibleUsers.map(u => u.id) : undefined, - localOnly: this.localOnly, - geo: this.geo ? { - coordinates: [this.geo.longitude, this.geo.latitude], - altitude: this.geo.altitude, - accuracy: this.geo.accuracy, - altitudeAccuracy: this.geo.altitudeAccuracy, - heading: isNaN(this.geo.heading) ? null : this.geo.heading, - speed: this.geo.speed, - } : null, - viaMobile: viaMobile - }).then(data => { - this.clear(); - this.deleteDraft(); - this.$emit('posted'); - if (opts.onSuccess) opts.onSuccess(this); - }).catch(err => { - if (opts.onSuccess) opts.onFailure(this); - }).then(() => { - this.posting = false; - }); - - if (this.text && this.text != '') { - const hashtags = parse(this.text).filter(x => x.node.type === 'hashtag').map(x => x.node.props.hashtag); - const history = JSON.parse(localStorage.getItem('hashtags') || '[]') as string[]; - localStorage.setItem('hashtags', JSON.stringify(unique(hashtags.concat(history)))); - } - }, - } -}); diff --git a/src/client/app/common/scripts/room/furniture.ts b/src/client/app/common/scripts/room/furniture.ts deleted file mode 100644 index 7734e32668..0000000000 --- a/src/client/app/common/scripts/room/furniture.ts +++ /dev/null @@ -1,21 +0,0 @@ -export type RoomInfo = { - roomType: string; - carpetColor: string; - furnitures: Furniture[]; -}; - -export type Furniture = { - id: string; // 同じ家具が複数ある場合にそれぞれを識別するためのIDであり、家具IDではない - type: string; // こっちが家具ID(chairとか) - position: { - x: number; - y: number; - z: number; - }; - rotation: { - x: number; - y: number; - z: number; - }; - props?: Record; -}; diff --git a/src/client/app/common/scripts/room/furnitures.json5 b/src/client/app/common/scripts/room/furnitures.json5 deleted file mode 100644 index 7c1a90a3f9..0000000000 --- a/src/client/app/common/scripts/room/furnitures.json5 +++ /dev/null @@ -1,397 +0,0 @@ -// 家具メタデータ - -// 家具にはユーザーが設定できるプロパティを設定可能です: -// -// props: { -// : -// } -// -// proptype一覧: -// * image ... 画像選択ダイアログを出し、その画像のURLが格納されます -// * color ... 色選択コントロールを出し、選択された色が格納されます - -// 家具にカスタムテクスチャを適用できるようにするには、textureプロパティに以下の追加の情報を含めます: -// 便宜上そのUVのどの部分にカスタムテクスチャを貼り合わせるかのエリアをテクスチャエリアと呼びます。 -// UVは1024*1024だと仮定します。 -// -// : { -// prop: <プロパティ名>, -// uv: { -// x: <テクスチャエリアX座標>, -// y: <テクスチャエリアY座標>, -// width: <テクスチャエリアの幅>, -// height: <テクスチャエリアの高さ>, -// }, -// } -// -// には、カスタムテクスチャを適用したいメッシュ名を指定します -// <プロパティ名>には、カスタムテクスチャとして使用する画像を格納するプロパティ(前述)名を指定します - -// 家具にカスタムカラーを適用できるようにするには、colorプロパティに以下の追加の情報を含めます: -// -// : <プロパティ名> -// -// には、カスタムカラーを適用したいマテリアル名を指定します -// <プロパティ名>には、カスタムカラーとして使用する色を格納するプロパティ(前述)名を指定します - -[ - { - id: "milk", - place: "floor" - }, - { - id: "bed", - place: "floor" - }, - { - id: "low-table", - place: "floor", - props: { - color: 'color' - }, - color: { - Table: 'color' - } - }, - { - id: "desk", - place: "floor", - props: { - color: 'color' - }, - color: { - Board: 'color' - } - }, - { - id: "chair", - place: "floor", - props: { - color: 'color' - }, - color: { - Chair: 'color' - } - }, - { - id: "chair2", - place: "floor", - props: { - color1: 'color', - color2: 'color' - }, - color: { - Cushion: 'color1', - Leg: 'color2' - } - }, - { - id: "fan", - place: "wall" - }, - { - id: "pc", - place: "floor" - }, - { - id: "plant", - place: "floor" - }, - { - id: "plant2", - place: "floor" - }, - { - id: "eraser", - place: "floor" - }, - { - id: "pencil", - place: "floor" - }, - { - id: "pudding", - place: "floor" - }, - { - id: "cardboard-box", - place: "floor" - }, - { - id: "cardboard-box2", - place: "floor" - }, - { - id: "cardboard-box3", - place: "floor" - }, - { - id: "book", - place: "floor", - props: { - color: 'color' - }, - color: { - Cover: 'color' - } - }, - { - id: "book2", - place: "floor" - }, - { - id: "piano", - place: "floor" - }, - { - id: "facial-tissue", - place: "floor" - }, - { - id: "server", - place: "floor" - }, - { - id: "moon", - place: "floor" - }, - { - id: "corkboard", - place: "wall" - }, - { - id: "mousepad", - place: "floor", - props: { - color: 'color' - }, - color: { - Pad: 'color' - } - }, - { - id: "monitor", - place: "floor", - props: { - screen: 'image' - }, - texture: { - Screen: { - prop: 'screen', - uv: { - x: 0, - y: 434, - width: 1024, - height: 588, - }, - }, - }, - }, - { - id: "tv", - place: "floor", - props: { - screen: 'image' - }, - texture: { - Screen: { - prop: 'screen', - uv: { - x: 0, - y: 434, - width: 1024, - height: 588, - }, - }, - }, - }, - { - id: "keyboard", - place: "floor" - }, - { - id: "carpet-stripe", - place: "floor", - props: { - color1: 'color', - color2: 'color' - }, - color: { - CarpetAreaA: 'color1', - CarpetAreaB: 'color2' - }, - }, - { - id: "mat", - place: "floor", - props: { - color: 'color' - }, - color: { - Mat: 'color' - } - }, - { - id: "color-box", - place: "floor", - props: { - color: 'color' - }, - color: { - main: 'color' - } - }, - { - id: "wall-clock", - place: "wall" - }, - { - id: "cube", - place: "floor", - props: { - color: 'color' - }, - color: { - Cube: 'color' - } - }, - { - id: "photoframe", - place: "wall", - props: { - photo: 'image', - color: 'color' - }, - texture: { - Photo: { - prop: 'photo', - uv: { - x: 0, - y: 342, - width: 1024, - height: 683, - }, - }, - }, - color: { - Frame: 'color' - } - }, - { - id: "pinguin", - place: "floor", - props: { - body: 'color', - belly: 'color' - }, - color: { - Body: 'body', - Belly: 'belly', - } - }, - { - id: "rubik-cube", - place: "floor", - }, - { - id: "poster-h", - place: "wall", - props: { - picture: 'image' - }, - texture: { - Poster: { - prop: 'picture', - uv: { - x: 0, - y: 277, - width: 1024, - height: 745, - }, - }, - }, - }, - { - id: "poster-v", - place: "wall", - props: { - picture: 'image' - }, - texture: { - Poster: { - prop: 'picture', - uv: { - x: 0, - y: 0, - width: 745, - height: 1024, - }, - }, - }, - }, - { - id: "sofa", - place: "floor", - props: { - color: 'color' - }, - color: { - Sofa: 'color' - } - }, - { - id: "spiral", - place: "floor", - props: { - color: 'color' - }, - color: { - Step: 'color' - } - }, - { - id: "bin", - place: "floor", - props: { - color: 'color' - }, - color: { - Bin: 'color' - } - }, - { - id: "cup-noodle", - place: "floor" - }, - { - id: "holo-display", - place: "floor", - props: { - image: 'image' - }, - texture: { - Image_Front: { - prop: 'image', - uv: { - x: 0, - y: 0, - width: 1024, - height: 1024, - }, - }, - Image_Back: { - prop: 'image', - uv: { - x: 0, - y: 0, - width: 1024, - height: 1024, - }, - }, - }, - }, - { - id: 'energy-drink', - place: "floor", - } -] diff --git a/src/client/app/common/scripts/room/room.ts b/src/client/app/common/scripts/room/room.ts deleted file mode 100644 index c2a989c784..0000000000 --- a/src/client/app/common/scripts/room/room.ts +++ /dev/null @@ -1,776 +0,0 @@ -import autobind from 'autobind-decorator'; -import { v4 as uuid } from 'uuid'; -import * as THREE from 'three'; -import { GLTFLoader, GLTF } from 'three/examples/jsm/loaders/GLTFLoader'; -import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js'; -import { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer.js'; -import { RenderPass } from 'three/examples/jsm/postprocessing/RenderPass.js'; -import { ShaderPass } from 'three/examples/jsm/postprocessing/ShaderPass.js'; -import { BloomPass } from 'three/examples/jsm/postprocessing/BloomPass.js'; -import { FXAAShader } from 'three/examples/jsm/shaders/FXAAShader.js'; -import { TransformControls } from 'three/examples/jsm/controls/TransformControls.js'; -import { Furniture, RoomInfo } from './furniture'; -import { query as urlQuery } from '../../../../../prelude/url'; -const furnitureDefs = require('./furnitures.json5'); - -THREE.ImageUtils.crossOrigin = ''; - -type Options = { - graphicsQuality: Room['graphicsQuality']; - onChangeSelect: Room['onChangeSelect']; - useOrthographicCamera: boolean; -}; - -/** - * MisskeyRoom Core Engine - */ -export class Room { - private clock: THREE.Clock; - private scene: THREE.Scene; - private renderer: THREE.WebGLRenderer; - private camera: THREE.PerspectiveCamera | THREE.OrthographicCamera; - private controls: OrbitControls; - private composer: EffectComposer; - private mixers: THREE.AnimationMixer[] = []; - private furnitureControl: TransformControls; - private roomInfo: RoomInfo; - private graphicsQuality: 'cheep' | 'low' | 'medium' | 'high' | 'ultra'; - private roomObj: THREE.Object3D; - private objects: THREE.Object3D[] = []; - private selectedObject: THREE.Object3D = null; - private onChangeSelect: Function; - private isTransformMode = false; - private renderFrameRequestId: number; - - private get canvas(): HTMLCanvasElement { - return this.renderer.domElement; - } - - private get furnitures(): Furniture[] { - return this.roomInfo.furnitures; - } - - private set furnitures(furnitures: Furniture[]) { - this.roomInfo.furnitures = furnitures; - } - - private get enableShadow() { - return this.graphicsQuality != 'cheep'; - } - - private get usePostFXs() { - return this.graphicsQuality !== 'cheep' && this.graphicsQuality !== 'low'; - } - - private get shadowQuality() { - return ( - this.graphicsQuality === 'ultra' ? 16384 : - this.graphicsQuality === 'high' ? 8192 : - this.graphicsQuality === 'medium' ? 4096 : - this.graphicsQuality === 'low' ? 1024 : - 0); // cheep - } - - constructor(user, isMyRoom, roomInfo: RoomInfo, container, options: Options) { - this.roomInfo = roomInfo; - this.graphicsQuality = options.graphicsQuality; - this.onChangeSelect = options.onChangeSelect; - - this.clock = new THREE.Clock(true); - - //#region Init a scene - this.scene = new THREE.Scene(); - - const width = window.innerWidth; - const height = window.innerHeight; - - //#region Init a renderer - this.renderer = new THREE.WebGLRenderer({ - antialias: false, - stencil: false, - alpha: false, - powerPreference: - this.graphicsQuality === 'ultra' ? 'high-performance' : - this.graphicsQuality === 'high' ? 'high-performance' : - this.graphicsQuality === 'medium' ? 'default' : - this.graphicsQuality === 'low' ? 'low-power' : - 'low-power' // cheep - }); - - this.renderer.setPixelRatio(window.devicePixelRatio); - this.renderer.setSize(width, height); - this.renderer.autoClear = false; - this.renderer.setClearColor(new THREE.Color(0x051f2d)); - this.renderer.shadowMap.enabled = this.enableShadow; - this.renderer.shadowMap.type = - this.graphicsQuality === 'ultra' ? THREE.PCFSoftShadowMap : - this.graphicsQuality === 'high' ? THREE.PCFSoftShadowMap : - this.graphicsQuality === 'medium' ? THREE.PCFShadowMap : - this.graphicsQuality === 'low' ? THREE.BasicShadowMap : - THREE.BasicShadowMap; // cheep - - container.appendChild(this.canvas); - //#endregion - - //#region Init a camera - this.camera = options.useOrthographicCamera - ? new THREE.OrthographicCamera( - width / - 2, width / 2, height / 2, height / - 2, -10, 10) - : new THREE.PerspectiveCamera(45, width / height); - - if (options.useOrthographicCamera) { - this.camera.position.x = 2; - this.camera.position.y = 2; - this.camera.position.z = 2; - this.camera.zoom = 100; - this.camera.updateProjectionMatrix(); - } else { - this.camera.position.x = 5; - this.camera.position.y = 2; - this.camera.position.z = 5; - } - - this.scene.add(this.camera); - //#endregion - - //#region AmbientLight - const ambientLight = new THREE.AmbientLight(0xffffff, 1); - this.scene.add(ambientLight); - //#endregion - - if (this.graphicsQuality !== 'cheep') { - //#region Room light - const roomLight = new THREE.SpotLight(0xffffff, 0.1); - - roomLight.position.set(0, 8, 0); - roomLight.castShadow = this.enableShadow; - roomLight.shadow.bias = -0.0001; - roomLight.shadow.mapSize.width = this.shadowQuality; - roomLight.shadow.mapSize.height = this.shadowQuality; - roomLight.shadow.camera.near = 0.1; - roomLight.shadow.camera.far = 9; - roomLight.shadow.camera.fov = 45; - - this.scene.add(roomLight); - //#endregion - } - - //#region Out light - const outLight1 = new THREE.SpotLight(0xffffff, 0.4); - outLight1.position.set(9, 3, -2); - outLight1.castShadow = this.enableShadow; - outLight1.shadow.bias = -0.001; // アクネ、アーチファクト対策 その代わりピーターパンが発生する可能性がある - outLight1.shadow.mapSize.width = this.shadowQuality; - outLight1.shadow.mapSize.height = this.shadowQuality; - outLight1.shadow.camera.near = 6; - outLight1.shadow.camera.far = 15; - outLight1.shadow.camera.fov = 45; - this.scene.add(outLight1); - - const outLight2 = new THREE.SpotLight(0xffffff, 0.2); - outLight2.position.set(-2, 3, 9); - outLight2.castShadow = false; - outLight2.shadow.bias = -0.001; // アクネ、アーチファクト対策 その代わりピーターパンが発生する可能性がある - outLight2.shadow.camera.near = 6; - outLight2.shadow.camera.far = 15; - outLight2.shadow.camera.fov = 45; - this.scene.add(outLight2); - //#endregion - - //#region Init a controller - this.controls = new OrbitControls(this.camera, this.canvas); - - this.controls.target.set(0, 1, 0); - this.controls.enableZoom = true; - this.controls.enablePan = isMyRoom; - this.controls.minPolarAngle = 0; - this.controls.maxPolarAngle = Math.PI / 2; - this.controls.minAzimuthAngle = 0; - this.controls.maxAzimuthAngle = Math.PI / 2; - this.controls.enableDamping = true; - this.controls.dampingFactor = 0.2; - this.controls.mouseButtons.LEFT = 1; - this.controls.mouseButtons.MIDDLE = 2; - this.controls.mouseButtons.RIGHT = 0; - //#endregion - - //#region POST FXs - if (!this.usePostFXs) { - this.composer = null; - } else { - const renderTarget = new THREE.WebGLRenderTarget(width, height, { - minFilter: THREE.LinearFilter, - magFilter: THREE.LinearFilter, - format: THREE.RGBFormat, - stencilBuffer: false, - }); - - const fxaa = new ShaderPass(FXAAShader); - fxaa.uniforms['resolution'].value = new THREE.Vector2(1 / width, 1 / height); - fxaa.renderToScreen = true; - - this.composer = new EffectComposer(this.renderer, renderTarget); - this.composer.addPass(new RenderPass(this.scene, this.camera)); - if (this.graphicsQuality === 'ultra') { - this.composer.addPass(new BloomPass(0.25, 30, 128.0, 512)); - } - this.composer.addPass(fxaa); - } - //#endregion - //#endregion - - //#region Label - //#region Avatar - const avatarUrl = `/proxy/?${urlQuery({ url: user.avatarUrl })}`; - - const textureLoader = new THREE.TextureLoader(); - textureLoader.crossOrigin = 'anonymous'; - - const iconTexture = textureLoader.load(avatarUrl); - iconTexture.wrapS = THREE.RepeatWrapping; - iconTexture.wrapT = THREE.RepeatWrapping; - iconTexture.anisotropy = 16; - - const avatarMaterial = new THREE.MeshBasicMaterial({ - map: iconTexture, - side: THREE.DoubleSide, - alphaTest: 0.5 - }); - - const iconGeometry = new THREE.PlaneGeometry(1, 1); - - const avatarObject = new THREE.Mesh(iconGeometry, avatarMaterial); - avatarObject.position.set(-3, 2.5, 2); - avatarObject.rotation.y = Math.PI / 2; - avatarObject.castShadow = false; - - this.scene.add(avatarObject); - //#endregion - - //#region Username - const name = user.username; - - new THREE.FontLoader().load('/assets/fonts/helvetiker_regular.typeface.json', font => { - const nameGeometry = new THREE.TextGeometry(name, { - size: 0.5, - height: 0, - curveSegments: 8, - font: font, - bevelThickness: 0, - bevelSize: 0, - bevelEnabled: false - }); - - const nameMaterial = new THREE.MeshLambertMaterial({ - color: 0xffffff - }); - - const nameObject = new THREE.Mesh(nameGeometry, nameMaterial); - nameObject.position.set(-3, 2.25, 1.25); - nameObject.rotation.y = Math.PI / 2; - nameObject.castShadow = false; - - this.scene.add(nameObject); - }); - //#endregion - //#endregion - - //#region Interaction - if (isMyRoom) { - this.furnitureControl = new TransformControls(this.camera, this.canvas); - this.scene.add(this.furnitureControl); - - // Hover highlight - this.canvas.onmousemove = this.onmousemove; - - // Click - this.canvas.onmousedown = this.onmousedown; - } - //#endregion - - //#region Init room - this.loadRoom(); - //#endregion - - //#region Load furnitures - for (const furniture of this.furnitures) { - this.loadFurniture(furniture).then(obj => { - this.scene.add(obj.scene); - this.objects.push(obj.scene); - }); - } - //#endregion - - // Start render - if (this.usePostFXs) { - this.renderWithPostFXs(); - } else { - this.renderWithoutPostFXs(); - } - } - - @autobind - private renderWithoutPostFXs() { - this.renderFrameRequestId = - window.requestAnimationFrame(this.renderWithoutPostFXs); - - // Update animations - const clock = this.clock.getDelta(); - for (const mixer of this.mixers) { - mixer.update(clock); - } - - this.controls.update(); - this.renderer.render(this.scene, this.camera); - } - - @autobind - private renderWithPostFXs() { - this.renderFrameRequestId = - window.requestAnimationFrame(this.renderWithPostFXs); - - // Update animations - const clock = this.clock.getDelta(); - for (const mixer of this.mixers) { - mixer.update(clock); - } - - this.controls.update(); - this.renderer.clear(); - this.composer.render(); - } - - @autobind - private loadRoom() { - const type = this.roomInfo.roomType; - new GLTFLoader().load(`/assets/room/rooms/${type}/${type}.glb`, gltf => { - gltf.scene.traverse(child => { - if (!(child instanceof THREE.Mesh)) return; - - child.receiveShadow = this.enableShadow; - - child.material = new THREE.MeshLambertMaterial({ - color: (child.material as THREE.MeshStandardMaterial).color, - map: (child.material as THREE.MeshStandardMaterial).map, - name: (child.material as THREE.MeshStandardMaterial).name, - }); - - // 異方性フィルタリング - if ((child.material as THREE.MeshLambertMaterial).map && this.graphicsQuality !== 'cheep') { - (child.material as THREE.MeshLambertMaterial).map.minFilter = THREE.LinearMipMapLinearFilter; - (child.material as THREE.MeshLambertMaterial).map.magFilter = THREE.LinearMipMapLinearFilter; - (child.material as THREE.MeshLambertMaterial).map.anisotropy = 8; - } - }); - - gltf.scene.position.set(0, 0, 0); - - this.scene.add(gltf.scene); - this.roomObj = gltf.scene; - if (this.roomInfo.roomType === 'default') { - this.applyCarpetColor(); - } - }); - } - - @autobind - private loadFurniture(furniture: Furniture) { - const def = furnitureDefs.find(d => d.id === furniture.type); - return new Promise((res, rej) => { - const loader = new GLTFLoader(); - loader.load(`/assets/room/furnitures/${furniture.type}/${furniture.type}.glb`, gltf => { - const model = gltf.scene; - - // Load animation - if (gltf.animations.length > 0) { - const mixer = new THREE.AnimationMixer(model); - this.mixers.push(mixer); - for (const clip of gltf.animations) { - mixer.clipAction(clip).play(); - } - } - - model.name = furniture.id; - model.position.x = furniture.position.x; - model.position.y = furniture.position.y; - model.position.z = furniture.position.z; - model.rotation.x = furniture.rotation.x; - model.rotation.y = furniture.rotation.y; - model.rotation.z = furniture.rotation.z; - - model.traverse(child => { - if (!(child instanceof THREE.Mesh)) return; - child.castShadow = this.enableShadow; - child.receiveShadow = this.enableShadow; - (child.material as THREE.MeshStandardMaterial).metalness = 0; - - // 異方性フィルタリング - if ((child.material as THREE.MeshStandardMaterial).map && this.graphicsQuality !== 'cheep') { - (child.material as THREE.MeshStandardMaterial).map.minFilter = THREE.LinearMipMapLinearFilter; - (child.material as THREE.MeshStandardMaterial).map.magFilter = THREE.LinearMipMapLinearFilter; - (child.material as THREE.MeshStandardMaterial).map.anisotropy = 8; - } - }); - - if (def.color) { // カスタムカラー - this.applyCustomColor(model); - } - - if (def.texture) { // カスタムテクスチャ - this.applyCustomTexture(model); - } - - res(gltf); - }, null, rej); - }); - } - - @autobind - private applyCarpetColor() { - this.roomObj.traverse(child => { - if (!(child instanceof THREE.Mesh)) return; - if (child.material && - (child.material as THREE.MeshStandardMaterial).name && - (child.material as THREE.MeshStandardMaterial).name === 'Carpet' - ) { - const colorHex = parseInt(this.roomInfo.carpetColor.substr(1), 16); - (child.material as THREE.MeshStandardMaterial).color.setHex(colorHex); - } - }); - } - - @autobind - private applyCustomColor(model: THREE.Object3D) { - const furniture = this.furnitures.find(furniture => furniture.id === model.name); - const def = furnitureDefs.find(d => d.id === furniture.type); - if (def.color == null) return; - model.traverse(child => { - if (!(child instanceof THREE.Mesh)) return; - for (const t of Object.keys(def.color)) { - if (!child.material || - !(child.material as THREE.MeshStandardMaterial).name || - (child.material as THREE.MeshStandardMaterial).name !== t - ) continue; - - const prop = def.color[t]; - const val = furniture.props ? furniture.props[prop] : undefined; - - if (val == null) continue; - - const colorHex = parseInt(val.substr(1), 16); - (child.material as THREE.MeshStandardMaterial).color.setHex(colorHex); - } - }); - } - - @autobind - private applyCustomTexture(model: THREE.Object3D) { - const furniture = this.furnitures.find(furniture => furniture.id === model.name); - const def = furnitureDefs.find(d => d.id === furniture.type); - if (def.texture == null) return; - - model.traverse(child => { - if (!(child instanceof THREE.Mesh)) return; - for (const t of Object.keys(def.texture)) { - if (child.name !== t) continue; - - const prop = def.texture[t].prop; - const val = furniture.props ? furniture.props[prop] : undefined; - - if (val == null) continue; - - const canvas = document.createElement('canvas'); - canvas.height = 1024; - canvas.width = 1024; - - child.material = new THREE.MeshLambertMaterial({ - emissive: 0x111111, - side: THREE.DoubleSide, - alphaTest: 0.5, - }); - - const img = new Image(); - img.crossOrigin = 'anonymous'; - img.onload = () => { - const uvInfo = def.texture[t].uv; - - const ctx = canvas.getContext('2d'); - ctx.drawImage(img, - 0, 0, img.width, img.height, - uvInfo.x, uvInfo.y, uvInfo.width, uvInfo.height); - - const texture = new THREE.Texture(canvas); - texture.wrapS = THREE.RepeatWrapping; - texture.wrapT = THREE.RepeatWrapping; - texture.anisotropy = 16; - texture.flipY = false; - - (child.material as THREE.MeshLambertMaterial).map = texture; - (child.material as THREE.MeshLambertMaterial).needsUpdate = true; - (child.material as THREE.MeshLambertMaterial).map.needsUpdate = true; - }; - img.src = val; - } - }); - } - - @autobind - private onmousemove(ev: MouseEvent) { - if (this.isTransformMode) return; - - const rect = (ev.target as HTMLElement).getBoundingClientRect(); - const x = (((ev.clientX * window.devicePixelRatio) - rect.left) / this.canvas.width) * 2 - 1; - const y = -(((ev.clientY * window.devicePixelRatio) - rect.top) / this.canvas.height) * 2 + 1; - const pos = new THREE.Vector2(x, y); - - this.camera.updateMatrixWorld(); - - const raycaster = new THREE.Raycaster(); - raycaster.setFromCamera(pos, this.camera); - - const intersects = raycaster.intersectObjects(this.objects, true); - - for (const object of this.objects) { - if (this.isSelectedObject(object)) continue; - object.traverse(child => { - if (child instanceof THREE.Mesh) { - (child.material as THREE.MeshStandardMaterial).emissive.setHex(0x000000); - } - }); - } - - if (intersects.length > 0) { - const intersected = this.getRoot(intersects[0].object); - if (this.isSelectedObject(intersected)) return; - intersected.traverse(child => { - if (child instanceof THREE.Mesh) { - (child.material as THREE.MeshStandardMaterial).emissive.setHex(0x191919); - } - }); - } - } - - @autobind - private onmousedown(ev: MouseEvent) { - if (this.isTransformMode) return; - if (ev.target !== this.canvas || ev.button !== 0) return; - - const rect = (ev.target as HTMLElement).getBoundingClientRect(); - const x = (((ev.clientX * window.devicePixelRatio) - rect.left) / this.canvas.width) * 2 - 1; - const y = -(((ev.clientY * window.devicePixelRatio) - rect.top) / this.canvas.height) * 2 + 1; - const pos = new THREE.Vector2(x, y); - - this.camera.updateMatrixWorld(); - - const raycaster = new THREE.Raycaster(); - raycaster.setFromCamera(pos, this.camera); - - const intersects = raycaster.intersectObjects(this.objects, true); - - for (const object of this.objects) { - object.traverse(child => { - if (child instanceof THREE.Mesh) { - (child.material as THREE.MeshStandardMaterial).emissive.setHex(0x000000); - } - }); - } - - if (intersects.length > 0) { - const selectedObj = this.getRoot(intersects[0].object); - this.selectFurniture(selectedObj); - } else { - this.selectedObject = null; - this.onChangeSelect(null); - } - } - - @autobind - private getRoot(obj: THREE.Object3D): THREE.Object3D { - let found = false; - let x = obj.parent; - while (!found) { - if (x.parent.parent == null) { - found = true; - } else { - x = x.parent; - } - } - return x; - } - - @autobind - private isSelectedObject(obj: THREE.Object3D): boolean { - if (this.selectedObject == null) { - return false; - } else { - return obj.name === this.selectedObject.name; - } - } - - @autobind - private selectFurniture(obj: THREE.Object3D) { - this.selectedObject = obj; - this.onChangeSelect(obj); - obj.traverse(child => { - if (child instanceof THREE.Mesh) { - (child.material as THREE.MeshStandardMaterial).emissive.setHex(0xff0000); - } - }); - } - - /** - * 家具の移動/回転モードにします - * @param type 移動か回転か - */ - @autobind - public enterTransformMode(type: 'translate' | 'rotate') { - this.isTransformMode = true; - this.furnitureControl.setMode(type); - this.furnitureControl.attach(this.selectedObject); - } - - /** - * 家具の移動/回転モードを終了します - */ - @autobind - public exitTransformMode() { - this.isTransformMode = false; - this.furnitureControl.detach(); - } - - /** - * 家具プロパティを更新します - * @param key プロパティ名 - * @param value 値 - */ - @autobind - public updateProp(key: string, value: any) { - const furniture = this.furnitures.find(furniture => furniture.id === this.selectedObject.name); - if (furniture.props == null) furniture.props = {}; - furniture.props[key] = value; - this.applyCustomColor(this.selectedObject); - this.applyCustomTexture(this.selectedObject); - } - - /** - * 部屋に家具を追加します - * @param type 家具の種類 - */ - @autobind - public addFurniture(type: string) { - const furniture = { - id: uuid(), - type: type, - position: { - x: 0, - y: 0, - z: 0, - }, - rotation: { - x: 0, - y: 0, - z: 0, - }, - }; - - this.furnitures.push(furniture); - - this.loadFurniture(furniture).then(obj => { - this.scene.add(obj.scene); - this.objects.push(obj.scene); - }); - } - - /** - * 現在選択されている家具を部屋から削除します - */ - @autobind - public removeFurniture() { - this.exitTransformMode(); - const obj = this.selectedObject; - this.scene.remove(obj); - this.objects = this.objects.filter(object => object.name !== obj.name); - this.furnitures = this.furnitures.filter(furniture => furniture.id !== obj.name); - this.selectedObject = null; - this.onChangeSelect(null); - } - - /** - * 全ての家具を部屋から削除します - */ - @autobind - public removeAllFurnitures() { - this.exitTransformMode(); - for (const obj of this.objects) { - this.scene.remove(obj); - } - this.objects = []; - this.furnitures = []; - this.selectedObject = null; - this.onChangeSelect(null); - } - - /** - * 部屋の床の色を変更します - * @param color 色 - */ - @autobind - public updateCarpetColor(color: string) { - this.roomInfo.carpetColor = color; - this.applyCarpetColor(); - } - - /** - * 部屋の種類を変更します - * @param type 種類 - */ - @autobind - public changeRoomType(type: string) { - this.roomInfo.roomType = type; - this.scene.remove(this.roomObj); - this.loadRoom(); - } - - /** - * 部屋データを取得します - */ - @autobind - public getRoomInfo() { - for (const obj of this.objects) { - const furniture = this.furnitures.find(f => f.id === obj.name); - furniture.position.x = obj.position.x; - furniture.position.y = obj.position.y; - furniture.position.z = obj.position.z; - furniture.rotation.x = obj.rotation.x; - furniture.rotation.y = obj.rotation.y; - furniture.rotation.z = obj.rotation.z; - } - - return this.roomInfo; - } - - /** - * 選択されている家具を取得します - */ - @autobind - public getSelectedObject() { - return this.selectedObject; - } - - @autobind - public findFurnitureById(id: string) { - return this.furnitures.find(furniture => furniture.id === id); - } - - /** - * レンダリングを終了します - */ - @autobind - public destroy() { - // Stop render loop - window.cancelAnimationFrame(this.renderFrameRequestId); - - this.controls.dispose(); - this.scene.dispose(); - } -} diff --git a/src/client/app/common/scripts/search.ts b/src/client/app/common/scripts/search.ts deleted file mode 100644 index 2897ed6318..0000000000 --- a/src/client/app/common/scripts/search.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { faHistory } from '@fortawesome/free-solid-svg-icons'; - -export async function search(v: any, q: string) { - q = q.trim(); - - if (q.startsWith('@') && !q.includes(' ')) { - v.$router.push(`/${q}`); - return; - } - - if (q.startsWith('#')) { - v.$router.push(`/tags/${encodeURIComponent(q.substr(1))}`); - return; - } - - // like 2018/03/12 - if (/^[0-9]{4}\/[0-9]{2}\/[0-9]{2}/.test(q.replace(/-/g, '/'))) { - const date = new Date(q.replace(/-/g, '/')); - - // 日付しか指定されてない場合、例えば 2018/03/12 ならユーザーは - // 2018/03/12 のコンテンツを「含む」結果になることを期待するはずなので - // 23時間59分進める(そのままだと 2018/03/12 00:00:00 「まで」の - // 結果になってしまい、2018/03/12 のコンテンツは含まれない) - if (q.replace(/-/g, '/').match(/^[0-9]{4}\/[0-9]{2}\/[0-9]{2}$/)) { - date.setHours(23, 59, 59, 999); - } - - v.$root.$emit('warp', date); - v.$root.dialog({ - icon: faHistory, - splash: true, - }); - return; - } - - if (q.startsWith('https://')) { - const dialog = v.$root.dialog({ - type: 'waiting', - text: v.$t('@.fetching-as-ap-object'), - showOkButton: false, - showCancelButton: false, - cancelableByBgClick: false - }); - - try { - const res = await v.$root.api('ap/show', { - uri: q - }); - dialog.close(); - if (res.type == 'User') { - v.$router.push(`/@${res.object.username}@${res.object.host}`); - } else if (res.type == 'Note') { - v.$router.push(`/notes/${res.object.id}`); - } - } catch (e) { - dialog.close(); - // TODO: Show error - } - - return; - } - - v.$router.push(`/search?q=${encodeURIComponent(q)}`); -} diff --git a/src/client/app/common/scripts/should-mute-note.ts b/src/client/app/common/scripts/should-mute-note.ts deleted file mode 100644 index 8fd7888628..0000000000 --- a/src/client/app/common/scripts/should-mute-note.ts +++ /dev/null @@ -1,19 +0,0 @@ -export default function(me, settings, note) { - const isMyNote = me && (note.userId == me.id); - const isPureRenote = note.renoteId != null && note.text == null && note.fileIds.length == 0 && note.poll == null; - - const includesMutedWords = (text: string) => - text - ? settings.mutedWords.some(q => q.length > 0 && !q.some(word => - word.startsWith('/') && word.endsWith('/') ? !(new RegExp(word.substr(1, word.length - 2)).test(text)) : !text.includes(word))) - : false; - - return ( - (!isMyNote && note.reply && includesMutedWords(note.reply.text)) || - (!isMyNote && note.renote && includesMutedWords(note.renote.text)) || - (!settings.showMyRenotes && isMyNote && isPureRenote) || - (!settings.showRenotedMyNotes && isPureRenote && note.renote.userId == me.id) || - (!settings.showLocalRenotes && isPureRenote && note.renote.user.host == null) || - (!isMyNote && includesMutedWords(note.text)) - ); -} diff --git a/src/client/app/common/scripts/stream.ts b/src/client/app/common/scripts/stream.ts deleted file mode 100644 index a1b4223b55..0000000000 --- a/src/client/app/common/scripts/stream.ts +++ /dev/null @@ -1,301 +0,0 @@ -import autobind from 'autobind-decorator'; -import { EventEmitter } from 'eventemitter3'; -import ReconnectingWebsocket from 'reconnecting-websocket'; -import { wsUrl } from '../../config'; -import MiOS from '../../mios'; - -/** - * Misskey stream connection - */ -export default class Stream extends EventEmitter { - private stream: ReconnectingWebsocket; - public state: string; - private sharedConnectionPools: Pool[] = []; - private sharedConnections: SharedConnection[] = []; - private nonSharedConnections: NonSharedConnection[] = []; - - constructor(os: MiOS) { - super(); - - this.state = 'initializing'; - - const user = os.store.state.i; - - this.stream = new ReconnectingWebsocket(wsUrl + (user ? `?i=${user.token}` : ''), '', { minReconnectionDelay: 1 }); // https://github.com/pladaria/reconnecting-websocket/issues/91 - this.stream.addEventListener('open', this.onOpen); - this.stream.addEventListener('close', this.onClose); - this.stream.addEventListener('message', this.onMessage); - } - - @autobind - public useSharedConnection(channel: string): SharedConnection { - let pool = this.sharedConnectionPools.find(p => p.channel === channel); - - if (pool == null) { - pool = new Pool(this, channel); - this.sharedConnectionPools.push(pool); - } - - const connection = new SharedConnection(this, channel, pool); - this.sharedConnections.push(connection); - return connection; - } - - @autobind - public removeSharedConnection(connection: SharedConnection) { - this.sharedConnections = this.sharedConnections.filter(c => c !== connection); - } - - @autobind - public removeSharedConnectionPool(pool: Pool) { - this.sharedConnectionPools = this.sharedConnectionPools.filter(p => p !== pool); - } - - @autobind - public connectToChannel(channel: string, params?: any): NonSharedConnection { - const connection = new NonSharedConnection(this, channel, params); - this.nonSharedConnections.push(connection); - return connection; - } - - @autobind - public disconnectToChannel(connection: NonSharedConnection) { - this.nonSharedConnections = this.nonSharedConnections.filter(c => c !== connection); - } - - /** - * Callback of when open connection - */ - @autobind - private onOpen() { - const isReconnect = this.state == 'reconnecting'; - - this.state = 'connected'; - this.emit('_connected_'); - - // チャンネル再接続 - if (isReconnect) { - for (const p of this.sharedConnectionPools) - p.connect(); - for (const c of this.nonSharedConnections) - c.connect(); - } - } - - /** - * Callback of when close connection - */ - @autobind - private onClose() { - if (this.state == 'connected') { - this.state = 'reconnecting'; - this.emit('_disconnected_'); - } - } - - /** - * Callback of when received a message from connection - */ - @autobind - private onMessage(message) { - const { type, body } = JSON.parse(message.data); - - if (type == 'channel') { - const id = body.id; - - let connections: Connection[]; - - connections = this.sharedConnections.filter(c => c.id === id); - - if (connections.length === 0) { - connections = [this.nonSharedConnections.find(c => c.id === id)]; - } - - for (const c of connections.filter(c => c != null)) { - c.emit(body.type, body.body); - } - } else { - this.emit(type, body); - } - } - - /** - * Send a message to connection - */ - @autobind - public send(typeOrPayload, payload?) { - const data = payload === undefined ? typeOrPayload : { - type: typeOrPayload, - body: payload - }; - - this.stream.send(JSON.stringify(data)); - } - - /** - * Close this connection - */ - @autobind - public close() { - this.stream.removeEventListener('open', this.onOpen); - this.stream.removeEventListener('message', this.onMessage); - } -} - -class Pool { - public channel: string; - public id: string; - protected stream: Stream; - public users = 0; - private disposeTimerId: any; - private isConnected = false; - - constructor(stream: Stream, channel: string) { - this.channel = channel; - this.stream = stream; - - this.id = Math.random().toString().substr(2, 8); - - this.stream.on('_disconnected_', this.onStreamDisconnected); - } - - @autobind - private onStreamDisconnected() { - this.isConnected = false; - } - - @autobind - public inc() { - if (this.users === 0 && !this.isConnected) { - this.connect(); - } - - this.users++; - - // タイマー解除 - if (this.disposeTimerId) { - clearTimeout(this.disposeTimerId); - this.disposeTimerId = null; - } - } - - @autobind - public dec() { - this.users--; - - // そのコネクションの利用者が誰もいなくなったら - if (this.users === 0) { - // また直ぐに再利用される可能性があるので、一定時間待ち、 - // 新たな利用者が現れなければコネクションを切断する - this.disposeTimerId = setTimeout(() => { - this.disconnect(); - }, 3000); - } - } - - @autobind - public connect() { - if (this.isConnected) return; - this.isConnected = true; - this.stream.send('connect', { - channel: this.channel, - id: this.id - }); - } - - @autobind - private disconnect() { - this.stream.off('_disconnected_', this.onStreamDisconnected); - this.stream.send('disconnect', { id: this.id }); - this.stream.removeSharedConnectionPool(this); - } -} - -abstract class Connection extends EventEmitter { - public channel: string; - protected stream: Stream; - public abstract id: string; - - constructor(stream: Stream, channel: string) { - super(); - - this.stream = stream; - this.channel = channel; - } - - @autobind - public send(id: string, typeOrPayload, payload?) { - const type = payload === undefined ? typeOrPayload.type : typeOrPayload; - const body = payload === undefined ? typeOrPayload.body : payload; - - this.stream.send('ch', { - id: id, - type: type, - body: body - }); - } - - public abstract dispose(): void; -} - -class SharedConnection extends Connection { - private pool: Pool; - - public get id(): string { - return this.pool.id; - } - - constructor(stream: Stream, channel: string, pool: Pool) { - super(stream, channel); - - this.pool = pool; - this.pool.inc(); - } - - @autobind - public send(typeOrPayload, payload?) { - super.send(this.pool.id, typeOrPayload, payload); - } - - @autobind - public dispose() { - this.pool.dec(); - this.removeAllListeners(); - this.stream.removeSharedConnection(this); - } -} - -class NonSharedConnection extends Connection { - public id: string; - protected params: any; - - constructor(stream: Stream, channel: string, params?: any) { - super(stream, channel); - - this.params = params; - this.id = Math.random().toString().substr(2, 8); - - this.connect(); - } - - @autobind - public connect() { - this.stream.send('connect', { - channel: this.channel, - id: this.id, - params: this.params - }); - } - - @autobind - public send(typeOrPayload, payload?) { - super.send(this.id, typeOrPayload, payload); - } - - @autobind - public dispose() { - this.removeAllListeners(); - this.stream.send('disconnect', { id: this.id }); - this.stream.disconnectToChannel(this); - } -} diff --git a/src/client/app/common/size.ts b/src/client/app/common/size.ts deleted file mode 100644 index 6abb305747..0000000000 --- a/src/client/app/common/size.ts +++ /dev/null @@ -1,18 +0,0 @@ -export default { - install(Vue) { - Vue.directive('size', { - inserted(el, binding) { - const query = binding.value; - const width = el.clientWidth; - for (const q of query) { - if (q.lt && (width <= q.lt)) { - el.classList.add(q.class); - } - if (q.gt && (width >= q.gt)) { - el.classList.add(q.class); - } - } - } - }); - } -}; diff --git a/src/client/app/common/views/components/acct.vue b/src/client/app/common/views/components/acct.vue deleted file mode 100644 index e802000833..0000000000 --- a/src/client/app/common/views/components/acct.vue +++ /dev/null @@ -1,31 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/activity.vue b/src/client/app/common/views/components/activity.vue deleted file mode 100644 index a958616943..0000000000 --- a/src/client/app/common/views/components/activity.vue +++ /dev/null @@ -1,114 +0,0 @@ - - - diff --git a/src/client/app/common/views/components/analog-clock.vue b/src/client/app/common/views/components/analog-clock.vue deleted file mode 100644 index 5eb7ffd153..0000000000 --- a/src/client/app/common/views/components/analog-clock.vue +++ /dev/null @@ -1,140 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/autocomplete.vue b/src/client/app/common/views/components/autocomplete.vue deleted file mode 100644 index bbfb7896ae..0000000000 --- a/src/client/app/common/views/components/autocomplete.vue +++ /dev/null @@ -1,458 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/avatar.vue b/src/client/app/common/views/components/avatar.vue deleted file mode 100644 index cd02c6957d..0000000000 --- a/src/client/app/common/views/components/avatar.vue +++ /dev/null @@ -1,116 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/avatars.vue b/src/client/app/common/views/components/avatars.vue deleted file mode 100644 index 0dc1ece3bf..0000000000 --- a/src/client/app/common/views/components/avatars.vue +++ /dev/null @@ -1,27 +0,0 @@ - - - diff --git a/src/client/app/common/views/components/code-core.vue b/src/client/app/common/views/components/code-core.vue deleted file mode 100644 index 219ed1d80a..0000000000 --- a/src/client/app/common/views/components/code-core.vue +++ /dev/null @@ -1,36 +0,0 @@ - - - diff --git a/src/client/app/common/views/components/code.vue b/src/client/app/common/views/components/code.vue deleted file mode 100644 index d52c9f7bc2..0000000000 --- a/src/client/app/common/views/components/code.vue +++ /dev/null @@ -1,28 +0,0 @@ - - - diff --git a/src/client/app/common/views/components/connect-failed.troubleshooter.vue b/src/client/app/common/views/components/connect-failed.troubleshooter.vue deleted file mode 100644 index 19b8c3e974..0000000000 --- a/src/client/app/common/views/components/connect-failed.troubleshooter.vue +++ /dev/null @@ -1,148 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/connect-failed.vue b/src/client/app/common/views/components/connect-failed.vue deleted file mode 100644 index a364304a63..0000000000 --- a/src/client/app/common/views/components/connect-failed.vue +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - diff --git a/src/client/app/common/views/components/cw-button.vue b/src/client/app/common/views/components/cw-button.vue deleted file mode 100644 index 098aa021d1..0000000000 --- a/src/client/app/common/views/components/cw-button.vue +++ /dev/null @@ -1,70 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/dialog.vue b/src/client/app/common/views/components/dialog.vue deleted file mode 100644 index 2744903007..0000000000 --- a/src/client/app/common/views/components/dialog.vue +++ /dev/null @@ -1,263 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/drive-file-thumbnail.vue b/src/client/app/common/views/components/drive-file-thumbnail.vue deleted file mode 100644 index f44223ad6f..0000000000 --- a/src/client/app/common/views/components/drive-file-thumbnail.vue +++ /dev/null @@ -1,184 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/dummy.vue b/src/client/app/common/views/components/dummy.vue deleted file mode 100644 index 5634efc509..0000000000 --- a/src/client/app/common/views/components/dummy.vue +++ /dev/null @@ -1,11 +0,0 @@ - - - diff --git a/src/client/app/common/views/components/ellipsis.vue b/src/client/app/common/views/components/ellipsis.vue deleted file mode 100644 index 07349902de..0000000000 --- a/src/client/app/common/views/components/ellipsis.vue +++ /dev/null @@ -1,26 +0,0 @@ - - - diff --git a/src/client/app/common/views/components/emoji-picker.vue b/src/client/app/common/views/components/emoji-picker.vue deleted file mode 100644 index abae69e28a..0000000000 --- a/src/client/app/common/views/components/emoji-picker.vue +++ /dev/null @@ -1,243 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/emoji.vue b/src/client/app/common/views/components/emoji.vue deleted file mode 100644 index 26992c5f7e..0000000000 --- a/src/client/app/common/views/components/emoji.vue +++ /dev/null @@ -1,119 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/error.vue b/src/client/app/common/views/components/error.vue deleted file mode 100644 index 0462a6efda..0000000000 --- a/src/client/app/common/views/components/error.vue +++ /dev/null @@ -1,28 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/file-type-icon.vue b/src/client/app/common/views/components/file-type-icon.vue deleted file mode 100644 index 3a9fe768d1..0000000000 --- a/src/client/app/common/views/components/file-type-icon.vue +++ /dev/null @@ -1,17 +0,0 @@ - - - diff --git a/src/client/app/common/views/components/follow-button.vue b/src/client/app/common/views/components/follow-button.vue deleted file mode 100644 index 074a0c05b6..0000000000 --- a/src/client/app/common/views/components/follow-button.vue +++ /dev/null @@ -1,209 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/forkit.vue b/src/client/app/common/views/components/forkit.vue deleted file mode 100644 index 328e3ca7b0..0000000000 --- a/src/client/app/common/views/components/forkit.vue +++ /dev/null @@ -1,48 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/formula-core.vue b/src/client/app/common/views/components/formula-core.vue deleted file mode 100644 index 69697d6df0..0000000000 --- a/src/client/app/common/views/components/formula-core.vue +++ /dev/null @@ -1,33 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/formula.vue b/src/client/app/common/views/components/formula.vue deleted file mode 100644 index 73572b72c6..0000000000 --- a/src/client/app/common/views/components/formula.vue +++ /dev/null @@ -1,24 +0,0 @@ - - - diff --git a/src/client/app/common/views/components/frac.vue b/src/client/app/common/views/components/frac.vue deleted file mode 100644 index 1840bd28fe..0000000000 --- a/src/client/app/common/views/components/frac.vue +++ /dev/null @@ -1,49 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/games/reversi/reversi.game.vue b/src/client/app/common/views/components/games/reversi/reversi.game.vue deleted file mode 100644 index a7c918aa71..0000000000 --- a/src/client/app/common/views/components/games/reversi/reversi.game.vue +++ /dev/null @@ -1,473 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/games/reversi/reversi.gameroom.vue b/src/client/app/common/views/components/games/reversi/reversi.gameroom.vue deleted file mode 100644 index 4099389502..0000000000 --- a/src/client/app/common/views/components/games/reversi/reversi.gameroom.vue +++ /dev/null @@ -1,56 +0,0 @@ - - - diff --git a/src/client/app/common/views/components/games/reversi/reversi.index.vue b/src/client/app/common/views/components/games/reversi/reversi.index.vue deleted file mode 100644 index 94e1d9a7e3..0000000000 --- a/src/client/app/common/views/components/games/reversi/reversi.index.vue +++ /dev/null @@ -1,245 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/games/reversi/reversi.room.vue b/src/client/app/common/views/components/games/reversi/reversi.room.vue deleted file mode 100644 index c1657f49e5..0000000000 --- a/src/client/app/common/views/components/games/reversi/reversi.room.vue +++ /dev/null @@ -1,355 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/games/reversi/reversi.vue b/src/client/app/common/views/components/games/reversi/reversi.vue deleted file mode 100644 index d33471a049..0000000000 --- a/src/client/app/common/views/components/games/reversi/reversi.vue +++ /dev/null @@ -1,175 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/google.vue b/src/client/app/common/views/components/google.vue deleted file mode 100644 index 1e88147399..0000000000 --- a/src/client/app/common/views/components/google.vue +++ /dev/null @@ -1,66 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/image-viewer.vue b/src/client/app/common/views/components/image-viewer.vue deleted file mode 100644 index 63b5e28d00..0000000000 --- a/src/client/app/common/views/components/image-viewer.vue +++ /dev/null @@ -1,41 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/index.ts b/src/client/app/common/views/components/index.ts deleted file mode 100644 index 88cd4931d4..0000000000 --- a/src/client/app/common/views/components/index.ts +++ /dev/null @@ -1,103 +0,0 @@ -import Vue from 'vue'; - -import dummy from './dummy.vue'; -import userName from './user-name.vue'; -import followButton from './follow-button.vue'; -import error from './error.vue'; -import noteSkeleton from './note-skeleton.vue'; -import instance from './instance.vue'; -import cwButton from './cw-button.vue'; -import tagCloud from './tag-cloud.vue'; -import trends from './trends.vue'; -import analogClock from './analog-clock.vue'; -import menu from './menu.vue'; -import noteHeader from './note-header.vue'; -import renote from './renote.vue'; -import signin from './signin.vue'; -import signup from './signup.vue'; -import forkit from './forkit.vue'; -import acct from './acct.vue'; -import avatar from './avatar.vue'; -import nav from './nav.vue'; -import misskeyFlavoredMarkdown from './misskey-flavored-markdown.vue'; -import poll from './poll.vue'; -import reactionIcon from './reaction-icon.vue'; -import reactionsViewer from './reactions-viewer.vue'; -import time from './time.vue'; -import mediaList from './media-list.vue'; -import uploader from './uploader.vue'; -import streamIndicator from './stream-indicator.vue'; -import ellipsis from './ellipsis.vue'; -import urlPreview from './url-preview.vue'; -import fileTypeIcon from './file-type-icon.vue'; -import emoji from './emoji.vue'; -import welcomeTimeline from './welcome-timeline.vue'; -import userList from './user-list.vue'; -import frac from './frac.vue'; -import uiInput from './ui/input.vue'; -import uiButton from './ui/button.vue'; -import uiHorizonGroup from './ui/horizon-group.vue'; -import uiCard from './ui/card.vue'; -import uiForm from './ui/form.vue'; -import uiTextarea from './ui/textarea.vue'; -import uiSwitch from './ui/switch.vue'; -import uiRadio from './ui/radio.vue'; -import uiSelect from './ui/select.vue'; -import uiInfo from './ui/info.vue'; -import uiMargin from './ui/margin.vue'; -import uiHr from './ui/hr.vue'; -import uiPagination from './ui/pagination.vue'; -import uiModal from './ui/modal.vue'; -import formButton from './ui/form/button.vue'; -import formRadio from './ui/form/radio.vue'; - -Vue.component('mfm', misskeyFlavoredMarkdown); -Vue.component('mk-dummy', dummy); -Vue.component('mk-user-name', userName); -Vue.component('mk-follow-button', followButton); -Vue.component('mk-error', error); -Vue.component('mk-note-skeleton', noteSkeleton); -Vue.component('mk-instance', instance); -Vue.component('mk-cw-button', cwButton); -Vue.component('mk-tag-cloud', tagCloud); -Vue.component('mk-trends', trends); -Vue.component('mk-analog-clock', analogClock); -Vue.component('mk-menu', menu); -Vue.component('mk-note-header', noteHeader); -Vue.component('mk-renote', renote); -Vue.component('mk-signin', signin); -Vue.component('mk-signup', signup); -Vue.component('mk-forkit', forkit); -Vue.component('mk-acct', acct); -Vue.component('mk-avatar', avatar); -Vue.component('mk-nav', nav); -Vue.component('mk-poll', poll); -Vue.component('mk-reaction-icon', reactionIcon); -Vue.component('mk-reactions-viewer', reactionsViewer); -Vue.component('mk-time', time); -Vue.component('mk-media-list', mediaList); -Vue.component('mk-uploader', uploader); -Vue.component('mk-stream-indicator', streamIndicator); -Vue.component('mk-ellipsis', ellipsis); -Vue.component('mk-url-preview', urlPreview); -Vue.component('mk-file-type-icon', fileTypeIcon); -Vue.component('mk-emoji', emoji); -Vue.component('mk-welcome-timeline', welcomeTimeline); -Vue.component('mk-user-list', userList); -Vue.component('mk-frac', frac); -Vue.component('ui-input', uiInput); -Vue.component('ui-button', uiButton); -Vue.component('ui-horizon-group', uiHorizonGroup); -Vue.component('ui-card', uiCard); -Vue.component('ui-form', uiForm); -Vue.component('ui-textarea', uiTextarea); -Vue.component('ui-switch', uiSwitch); -Vue.component('ui-radio', uiRadio); -Vue.component('ui-select', uiSelect); -Vue.component('ui-info', uiInfo); -Vue.component('ui-margin', uiMargin); -Vue.component('ui-hr', uiHr); -Vue.component('ui-pagination', uiPagination); -Vue.component('ui-modal', uiModal); -Vue.component('form-button', formButton); -Vue.component('form-radio', formRadio); diff --git a/src/client/app/common/views/components/instance.vue b/src/client/app/common/views/components/instance.vue deleted file mode 100644 index 497e4976f5..0000000000 --- a/src/client/app/common/views/components/instance.vue +++ /dev/null @@ -1,53 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/integrations.integration.vue b/src/client/app/common/views/components/integrations.integration.vue deleted file mode 100644 index 51995843b1..0000000000 --- a/src/client/app/common/views/components/integrations.integration.vue +++ /dev/null @@ -1,48 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/integrations.vue b/src/client/app/common/views/components/integrations.vue deleted file mode 100644 index 7a341a14fd..0000000000 --- a/src/client/app/common/views/components/integrations.vue +++ /dev/null @@ -1,26 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/media-banner.vue b/src/client/app/common/views/components/media-banner.vue deleted file mode 100644 index 4e459ad666..0000000000 --- a/src/client/app/common/views/components/media-banner.vue +++ /dev/null @@ -1,98 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/media-image.vue b/src/client/app/common/views/components/media-image.vue deleted file mode 100644 index b8b164aed0..0000000000 --- a/src/client/app/common/views/components/media-image.vue +++ /dev/null @@ -1,113 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/media-list.vue b/src/client/app/common/views/components/media-list.vue deleted file mode 100644 index bfbc9366d3..0000000000 --- a/src/client/app/common/views/components/media-list.vue +++ /dev/null @@ -1,113 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/mention.vue b/src/client/app/common/views/components/mention.vue deleted file mode 100644 index 4e9f9e90d6..0000000000 --- a/src/client/app/common/views/components/mention.vue +++ /dev/null @@ -1,87 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/menu.vue b/src/client/app/common/views/components/menu.vue deleted file mode 100644 index 68fa0f5e62..0000000000 --- a/src/client/app/common/views/components/menu.vue +++ /dev/null @@ -1,196 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/messaging-room.form.vue b/src/client/app/common/views/components/messaging-room.form.vue deleted file mode 100644 index bd63bab2c1..0000000000 --- a/src/client/app/common/views/components/messaging-room.form.vue +++ /dev/null @@ -1,335 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/messaging-room.message.vue b/src/client/app/common/views/components/messaging-room.message.vue deleted file mode 100644 index 1ab6359415..0000000000 --- a/src/client/app/common/views/components/messaging-room.message.vue +++ /dev/null @@ -1,279 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/messaging-room.vue b/src/client/app/common/views/components/messaging-room.vue deleted file mode 100644 index d5fa4143a0..0000000000 --- a/src/client/app/common/views/components/messaging-room.vue +++ /dev/null @@ -1,436 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/messaging.vue b/src/client/app/common/views/components/messaging.vue deleted file mode 100644 index 52f55e4333..0000000000 --- a/src/client/app/common/views/components/messaging.vue +++ /dev/null @@ -1,500 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/mfm.ts b/src/client/app/common/views/components/mfm.ts deleted file mode 100644 index 561c3d8e30..0000000000 --- a/src/client/app/common/views/components/mfm.ts +++ /dev/null @@ -1,321 +0,0 @@ -import Vue, { VNode } from 'vue'; -import { length } from 'stringz'; -import { MfmForest } from '../../../../../mfm/types'; -import { parse, parsePlain } from '../../../../../mfm/parse'; -import MkUrl from './url.vue'; -import MkMention from './mention.vue'; -import { concat, sum } from '../../../../../prelude/array'; -import MkFormula from './formula.vue'; -import MkCode from './code.vue'; -import MkGoogle from './google.vue'; -import { host } from '../../../config'; -import { preorderF, countNodesF } from '../../../../../prelude/tree'; - -function sumTextsLength(ts: MfmForest): number { - const textNodes = preorderF(ts).filter(n => n.type === 'text'); - return sum(textNodes.map(x => length(x.props.text))); -} - -export default Vue.component('misskey-flavored-markdown', { - props: { - text: { - type: String, - required: true - }, - plain: { - type: Boolean, - default: false - }, - nowrap: { - type: Boolean, - default: false - }, - author: { - type: Object, - default: null - }, - i: { - type: Object, - default: null - }, - customEmojis: { - required: false, - }, - isNote: { - type: Boolean, - default: true - }, - }, - - render(createElement) { - if (this.text == null || this.text == '') return; - - const ast = (this.plain ? parsePlain : parse)(this.text); - - let bigCount = 0; - let motionCount = 0; - - const genEl = (ast: MfmForest) => concat(ast.map((token): VNode[] => { - switch (token.node.type) { - case 'text': { - const text = token.node.props.text.replace(/(\r\n|\n|\r)/g, '\n'); - - if (!this.plain) { - const x = text.split('\n') - .map(t => t == '' ? [createElement('br')] : [createElement('span', t), createElement('br')]); - x[x.length - 1].pop(); - return x; - } else { - return [createElement('span', text.replace(/\n/g, ' '))]; - } - } - - case 'bold': { - return [createElement('b', genEl(token.children))]; - } - - case 'strike': { - return [createElement('del', genEl(token.children))]; - } - - case 'italic': { - return (createElement as any)('i', { - attrs: { - style: 'font-style: oblique;' - }, - }, genEl(token.children)); - } - - case 'big': { - bigCount++; - const isLong = sumTextsLength(token.children) > 15 || countNodesF(token.children) > 5; - const isMany = bigCount > 3; - return (createElement as any)('strong', { - attrs: { - style: `display: inline-block; font-size: ${ isMany ? '100%' : '150%' };` - }, - directives: [this.$store.state.settings.disableAnimatedMfm || isLong || isMany ? {} : { - name: 'animate-css', - value: { classes: 'tada', iteration: 'infinite' } - }] - }, genEl(token.children)); - } - - case 'small': { - return [createElement('small', { - attrs: { - style: 'opacity: 0.7;' - }, - }, genEl(token.children))]; - } - - case 'center': { - return [createElement('div', { - attrs: { - style: 'text-align:center;' - } - }, genEl(token.children))]; - } - - case 'motion': { - motionCount++; - const isLong = sumTextsLength(token.children) > 15 || countNodesF(token.children) > 5; - const isMany = motionCount > 5; - return (createElement as any)('span', { - attrs: { - style: 'display: inline-block;' - }, - directives: [this.$store.state.settings.disableAnimatedMfm || isLong || isMany ? {} : { - name: 'animate-css', - value: { classes: 'rubberBand', iteration: 'infinite' } - }] - }, genEl(token.children)); - } - - case 'spin': { - motionCount++; - const isLong = sumTextsLength(token.children) > 10 || countNodesF(token.children) > 5; - const isMany = motionCount > 5; - const direction = - token.node.props.attr == 'left' ? 'reverse' : - token.node.props.attr == 'alternate' ? 'alternate' : - 'normal'; - const style = (this.$store.state.settings.disableAnimatedMfm || isLong || isMany) - ? '' - : `animation: spin 1.5s linear infinite; animation-direction: ${direction};`; - return (createElement as any)('span', { - attrs: { - style: 'display: inline-block;' + style - }, - }, genEl(token.children)); - } - - case 'jump': { - motionCount++; - const isLong = sumTextsLength(token.children) > 30 || countNodesF(token.children) > 5; - const isMany = motionCount > 5; - return (createElement as any)('span', { - attrs: { - style: (this.$store.state.settings.disableAnimatedMfm || isLong || isMany) ? 'display: inline-block;' : 'display: inline-block; animation: jump 0.75s linear infinite;' - }, - }, genEl(token.children)); - } - - case 'flip': { - return (createElement as any)('span', { - attrs: { - style: 'display: inline-block; transform: scaleX(-1);' - }, - }, genEl(token.children)); - } - - case 'url': { - return [createElement(MkUrl, { - key: Math.random(), - props: { - url: token.node.props.url, - rel: 'nofollow noopener', - }, - attrs: { - style: 'color:var(--mfmUrl);' - } - })]; - } - - case 'link': { - return [createElement('a', { - attrs: { - class: 'link', - href: token.node.props.url, - rel: 'nofollow noopener', - target: '_blank', - title: token.node.props.url, - style: 'color:var(--mfmLink);' - } - }, genEl(token.children))]; - } - - case 'mention': { - return [createElement(MkMention, { - key: Math.random(), - props: { - host: (token.node.props.host == null && this.author && this.author.host != null ? this.author.host : token.node.props.host) || host, - username: token.node.props.username - } - })]; - } - - case 'hashtag': { - return [createElement('router-link', { - key: Math.random(), - attrs: { - to: this.isNote ? `/tags/${encodeURIComponent(token.node.props.hashtag)}` : `/explore/tags/${encodeURIComponent(token.node.props.hashtag)}`, - style: 'color:var(--mfmHashtag);' - } - }, `#${token.node.props.hashtag}`)]; - } - - case 'blockCode': { - return [createElement(MkCode, { - key: Math.random(), - props: { - code: token.node.props.code, - lang: token.node.props.lang, - } - })]; - } - - case 'inlineCode': { - return [createElement(MkCode, { - key: Math.random(), - props: { - code: token.node.props.code, - lang: token.node.props.lang, - inline: true - } - })]; - } - - case 'quote': { - if (this.shouldBreak) { - return [createElement('div', { - attrs: { - class: 'quote' - } - }, genEl(token.children))]; - } else { - return [createElement('span', { - attrs: { - class: 'quote' - } - }, genEl(token.children))]; - } - } - - case 'title': { - return [createElement('div', { - attrs: { - class: 'title' - } - }, genEl(token.children))]; - } - - case 'emoji': { - const customEmojis = (this.$root.getMetaSync() || { emojis: [] }).emojis || []; - return [createElement('mk-emoji', { - key: Math.random(), - attrs: { - emoji: token.node.props.emoji, - name: token.node.props.name - }, - props: { - customEmojis: this.customEmojis || customEmojis, - normal: this.plain - } - })]; - } - - case 'mathInline': { - //const MkFormula = () => import('./formula.vue').then(m => m.default); - return [createElement(MkFormula, { - key: Math.random(), - props: { - formula: token.node.props.formula, - block: false - } - })]; - } - - case 'mathBlock': { - //const MkFormula = () => import('./formula.vue').then(m => m.default); - return [createElement(MkFormula, { - key: Math.random(), - props: { - formula: token.node.props.formula, - block: true - } - })]; - } - - case 'search': { - //const MkGoogle = () => import('./google.vue').then(m => m.default); - return [createElement(MkGoogle, { - key: Math.random(), - props: { - q: token.node.props.query - } - })]; - } - - default: { - console.log('unknown ast type:', token.node.type); - - return []; - } - } - })); - - // Parse ast to DOM - return createElement('span', genEl(ast)); - } -}); diff --git a/src/client/app/common/views/components/misskey-flavored-markdown.vue b/src/client/app/common/views/components/misskey-flavored-markdown.vue deleted file mode 100644 index 40c444242c..0000000000 --- a/src/client/app/common/views/components/misskey-flavored-markdown.vue +++ /dev/null @@ -1,43 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/nav.vue b/src/client/app/common/views/components/nav.vue deleted file mode 100644 index 41b65604de..0000000000 --- a/src/client/app/common/views/components/nav.vue +++ /dev/null @@ -1,47 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/note-header.vue b/src/client/app/common/views/components/note-header.vue deleted file mode 100644 index a72863e1dd..0000000000 --- a/src/client/app/common/views/components/note-header.vue +++ /dev/null @@ -1,118 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/note-menu.vue b/src/client/app/common/views/components/note-menu.vue deleted file mode 100644 index 1dcf58dd36..0000000000 --- a/src/client/app/common/views/components/note-menu.vue +++ /dev/null @@ -1,237 +0,0 @@ - - - diff --git a/src/client/app/common/views/components/note-skeleton.vue b/src/client/app/common/views/components/note-skeleton.vue deleted file mode 100644 index a2e09e3222..0000000000 --- a/src/client/app/common/views/components/note-skeleton.vue +++ /dev/null @@ -1,52 +0,0 @@ - - - diff --git a/src/client/app/common/views/components/page-preview.vue b/src/client/app/common/views/components/page-preview.vue deleted file mode 100644 index e3e73bd08f..0000000000 --- a/src/client/app/common/views/components/page-preview.vue +++ /dev/null @@ -1,138 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/page/page.block.vue b/src/client/app/common/views/components/page/page.block.vue deleted file mode 100644 index 56d1822013..0000000000 --- a/src/client/app/common/views/components/page/page.block.vue +++ /dev/null @@ -1,41 +0,0 @@ - - - diff --git a/src/client/app/common/views/components/page/page.button.vue b/src/client/app/common/views/components/page/page.button.vue deleted file mode 100644 index 87112aca0d..0000000000 --- a/src/client/app/common/views/components/page/page.button.vue +++ /dev/null @@ -1,55 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/page/page.counter.vue b/src/client/app/common/views/components/page/page.counter.vue deleted file mode 100644 index 8d55319fe9..0000000000 --- a/src/client/app/common/views/components/page/page.counter.vue +++ /dev/null @@ -1,47 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/page/page.if.vue b/src/client/app/common/views/components/page/page.if.vue deleted file mode 100644 index 417ef0c553..0000000000 --- a/src/client/app/common/views/components/page/page.if.vue +++ /dev/null @@ -1,30 +0,0 @@ - - - diff --git a/src/client/app/common/views/components/page/page.image.vue b/src/client/app/common/views/components/page/page.image.vue deleted file mode 100644 index 1285445eb0..0000000000 --- a/src/client/app/common/views/components/page/page.image.vue +++ /dev/null @@ -1,36 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/page/page.number-input.vue b/src/client/app/common/views/components/page/page.number-input.vue deleted file mode 100644 index 31da37330a..0000000000 --- a/src/client/app/common/views/components/page/page.number-input.vue +++ /dev/null @@ -1,41 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/page/page.post.vue b/src/client/app/common/views/components/page/page.post.vue deleted file mode 100644 index cb695e21e9..0000000000 --- a/src/client/app/common/views/components/page/page.post.vue +++ /dev/null @@ -1,68 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/page/page.radio-button.vue b/src/client/app/common/views/components/page/page.radio-button.vue deleted file mode 100644 index 27c11bebad..0000000000 --- a/src/client/app/common/views/components/page/page.radio-button.vue +++ /dev/null @@ -1,37 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/page/page.section.vue b/src/client/app/common/views/components/page/page.section.vue deleted file mode 100644 index 03c009d9c3..0000000000 --- a/src/client/app/common/views/components/page/page.section.vue +++ /dev/null @@ -1,55 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/page/page.switch.vue b/src/client/app/common/views/components/page/page.switch.vue deleted file mode 100644 index 53695f1b36..0000000000 --- a/src/client/app/common/views/components/page/page.switch.vue +++ /dev/null @@ -1,43 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/page/page.text-input.vue b/src/client/app/common/views/components/page/page.text-input.vue deleted file mode 100644 index cf917dd5a8..0000000000 --- a/src/client/app/common/views/components/page/page.text-input.vue +++ /dev/null @@ -1,41 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/page/page.text.vue b/src/client/app/common/views/components/page/page.text.vue deleted file mode 100644 index 326fd39050..0000000000 --- a/src/client/app/common/views/components/page/page.text.vue +++ /dev/null @@ -1,62 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/page/page.textarea-input.vue b/src/client/app/common/views/components/page/page.textarea-input.vue deleted file mode 100644 index eece59fefb..0000000000 --- a/src/client/app/common/views/components/page/page.textarea-input.vue +++ /dev/null @@ -1,36 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/page/page.textarea.vue b/src/client/app/common/views/components/page/page.textarea.vue deleted file mode 100644 index 03c8542cb0..0000000000 --- a/src/client/app/common/views/components/page/page.textarea.vue +++ /dev/null @@ -1,33 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/page/page.vue b/src/client/app/common/views/components/page/page.vue deleted file mode 100644 index 1bfb93780f..0000000000 --- a/src/client/app/common/views/components/page/page.vue +++ /dev/null @@ -1,222 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/particle.vue b/src/client/app/common/views/components/particle.vue deleted file mode 100644 index 33c118f000..0000000000 --- a/src/client/app/common/views/components/particle.vue +++ /dev/null @@ -1,53 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/poll-editor.vue b/src/client/app/common/views/components/poll-editor.vue deleted file mode 100644 index 51c73003d1..0000000000 --- a/src/client/app/common/views/components/poll-editor.vue +++ /dev/null @@ -1,235 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/poll.vue b/src/client/app/common/views/components/poll.vue deleted file mode 100644 index bd5eeaf832..0000000000 --- a/src/client/app/common/views/components/poll.vue +++ /dev/null @@ -1,148 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/post-form-attaches.vue b/src/client/app/common/views/components/post-form-attaches.vue deleted file mode 100644 index e051b6a808..0000000000 --- a/src/client/app/common/views/components/post-form-attaches.vue +++ /dev/null @@ -1,139 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/reaction-icon.vue b/src/client/app/common/views/components/reaction-icon.vue deleted file mode 100644 index afe51d7833..0000000000 --- a/src/client/app/common/views/components/reaction-icon.vue +++ /dev/null @@ -1,53 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/reaction-picker.vue b/src/client/app/common/views/components/reaction-picker.vue deleted file mode 100644 index f363fe9779..0000000000 --- a/src/client/app/common/views/components/reaction-picker.vue +++ /dev/null @@ -1,323 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/reactions-viewer.details.vue b/src/client/app/common/views/components/reactions-viewer.details.vue deleted file mode 100644 index 778b936896..0000000000 --- a/src/client/app/common/views/components/reactions-viewer.details.vue +++ /dev/null @@ -1,122 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/reactions-viewer.reaction.vue b/src/client/app/common/views/components/reactions-viewer.reaction.vue deleted file mode 100644 index dade012c29..0000000000 --- a/src/client/app/common/views/components/reactions-viewer.reaction.vue +++ /dev/null @@ -1,208 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/reactions-viewer.vue b/src/client/app/common/views/components/reactions-viewer.vue deleted file mode 100644 index 9701d2481a..0000000000 --- a/src/client/app/common/views/components/reactions-viewer.vue +++ /dev/null @@ -1,47 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/renote.vue b/src/client/app/common/views/components/renote.vue deleted file mode 100644 index 58a0a26593..0000000000 --- a/src/client/app/common/views/components/renote.vue +++ /dev/null @@ -1,104 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/settings/2fa.vue b/src/client/app/common/views/components/settings/2fa.vue deleted file mode 100644 index 813a91b5c0..0000000000 --- a/src/client/app/common/views/components/settings/2fa.vue +++ /dev/null @@ -1,259 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/settings/api.vue b/src/client/app/common/views/components/settings/api.vue deleted file mode 100644 index 184fa069fb..0000000000 --- a/src/client/app/common/views/components/settings/api.vue +++ /dev/null @@ -1,102 +0,0 @@ - - - diff --git a/src/client/app/common/views/components/settings/app-type.vue b/src/client/app/common/views/components/settings/app-type.vue deleted file mode 100644 index d163f1e746..0000000000 --- a/src/client/app/common/views/components/settings/app-type.vue +++ /dev/null @@ -1,53 +0,0 @@ - - - diff --git a/src/client/app/common/views/components/settings/apps.vue b/src/client/app/common/views/components/settings/apps.vue deleted file mode 100644 index c5beaa1fe2..0000000000 --- a/src/client/app/common/views/components/settings/apps.vue +++ /dev/null @@ -1,39 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/settings/drive.vue b/src/client/app/common/views/components/settings/drive.vue deleted file mode 100644 index da028e85ef..0000000000 --- a/src/client/app/common/views/components/settings/drive.vue +++ /dev/null @@ -1,209 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/settings/integration.vue b/src/client/app/common/views/components/settings/integration.vue deleted file mode 100644 index 71ad8b4509..0000000000 --- a/src/client/app/common/views/components/settings/integration.vue +++ /dev/null @@ -1,118 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/settings/language.vue b/src/client/app/common/views/components/settings/language.vue deleted file mode 100644 index f81775f09b..0000000000 --- a/src/client/app/common/views/components/settings/language.vue +++ /dev/null @@ -1,54 +0,0 @@ - - - diff --git a/src/client/app/common/views/components/settings/mute-and-block.user.vue b/src/client/app/common/views/components/settings/mute-and-block.user.vue deleted file mode 100644 index 29ef1f7a67..0000000000 --- a/src/client/app/common/views/components/settings/mute-and-block.user.vue +++ /dev/null @@ -1,39 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/settings/mute-and-block.vue b/src/client/app/common/views/components/settings/mute-and-block.vue deleted file mode 100644 index 8ff5804168..0000000000 --- a/src/client/app/common/views/components/settings/mute-and-block.vue +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - diff --git a/src/client/app/common/views/components/settings/notification.vue b/src/client/app/common/views/components/settings/notification.vue deleted file mode 100644 index 2554fe6331..0000000000 --- a/src/client/app/common/views/components/settings/notification.vue +++ /dev/null @@ -1,44 +0,0 @@ - - - diff --git a/src/client/app/common/views/components/settings/password.vue b/src/client/app/common/views/components/settings/password.vue deleted file mode 100644 index c867561518..0000000000 --- a/src/client/app/common/views/components/settings/password.vue +++ /dev/null @@ -1,63 +0,0 @@ - - - diff --git a/src/client/app/common/views/components/settings/profile.vue b/src/client/app/common/views/components/settings/profile.vue deleted file mode 100644 index 0c291f9029..0000000000 --- a/src/client/app/common/views/components/settings/profile.vue +++ /dev/null @@ -1,442 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/settings/settings.vue b/src/client/app/common/views/components/settings/settings.vue deleted file mode 100644 index 3a0ba561af..0000000000 --- a/src/client/app/common/views/components/settings/settings.vue +++ /dev/null @@ -1,671 +0,0 @@ - - - diff --git a/src/client/app/common/views/components/settings/signins.vue b/src/client/app/common/views/components/settings/signins.vue deleted file mode 100644 index 048fa2fc5b..0000000000 --- a/src/client/app/common/views/components/settings/signins.vue +++ /dev/null @@ -1,98 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/settings/tags.vue b/src/client/app/common/views/components/settings/tags.vue deleted file mode 100644 index 2e17f35e3e..0000000000 --- a/src/client/app/common/views/components/settings/tags.vue +++ /dev/null @@ -1,67 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/settings/theme.vue b/src/client/app/common/views/components/settings/theme.vue deleted file mode 100644 index d916a57508..0000000000 --- a/src/client/app/common/views/components/settings/theme.vue +++ /dev/null @@ -1,558 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/signin.vue b/src/client/app/common/views/components/signin.vue deleted file mode 100644 index bb4a6605bd..0000000000 --- a/src/client/app/common/views/components/signin.vue +++ /dev/null @@ -1,248 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/signup.vue b/src/client/app/common/views/components/signup.vue deleted file mode 100644 index 893f6575fb..0000000000 --- a/src/client/app/common/views/components/signup.vue +++ /dev/null @@ -1,185 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/stream-indicator.vue b/src/client/app/common/views/components/stream-indicator.vue deleted file mode 100644 index 8ab1cfcfeb..0000000000 --- a/src/client/app/common/views/components/stream-indicator.vue +++ /dev/null @@ -1,88 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/tag-cloud.vue b/src/client/app/common/views/components/tag-cloud.vue deleted file mode 100644 index 3fa5e3b9d4..0000000000 --- a/src/client/app/common/views/components/tag-cloud.vue +++ /dev/null @@ -1,86 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/time.vue b/src/client/app/common/views/components/time.vue deleted file mode 100644 index 8cfcc4cb4f..0000000000 --- a/src/client/app/common/views/components/time.vue +++ /dev/null @@ -1,74 +0,0 @@ - - - diff --git a/src/client/app/common/views/components/trends.chart.vue b/src/client/app/common/views/components/trends.chart.vue deleted file mode 100644 index 5c4f74b6b4..0000000000 --- a/src/client/app/common/views/components/trends.chart.vue +++ /dev/null @@ -1,89 +0,0 @@ - - - diff --git a/src/client/app/common/views/components/trends.vue b/src/client/app/common/views/components/trends.vue deleted file mode 100644 index 536d55247c..0000000000 --- a/src/client/app/common/views/components/trends.vue +++ /dev/null @@ -1,100 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/ui/button.vue b/src/client/app/common/views/components/ui/button.vue deleted file mode 100644 index 59a5c858a7..0000000000 --- a/src/client/app/common/views/components/ui/button.vue +++ /dev/null @@ -1,224 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/ui/card.vue b/src/client/app/common/views/components/ui/card.vue deleted file mode 100644 index a83013f5d0..0000000000 --- a/src/client/app/common/views/components/ui/card.vue +++ /dev/null @@ -1,69 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/ui/form.vue b/src/client/app/common/views/components/ui/form.vue deleted file mode 100644 index 5c5bbd7256..0000000000 --- a/src/client/app/common/views/components/ui/form.vue +++ /dev/null @@ -1,30 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/ui/form/button.vue b/src/client/app/common/views/components/ui/form/button.vue deleted file mode 100644 index 3fd7b47629..0000000000 --- a/src/client/app/common/views/components/ui/form/button.vue +++ /dev/null @@ -1,81 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/ui/form/radio.vue b/src/client/app/common/views/components/ui/form/radio.vue deleted file mode 100644 index 396b2997e5..0000000000 --- a/src/client/app/common/views/components/ui/form/radio.vue +++ /dev/null @@ -1,118 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/ui/horizon-group.vue b/src/client/app/common/views/components/ui/horizon-group.vue deleted file mode 100644 index 33d0300101..0000000000 --- a/src/client/app/common/views/components/ui/horizon-group.vue +++ /dev/null @@ -1,76 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/ui/hr.vue b/src/client/app/common/views/components/ui/hr.vue deleted file mode 100644 index 38572cfcc3..0000000000 --- a/src/client/app/common/views/components/ui/hr.vue +++ /dev/null @@ -1,15 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/ui/info.vue b/src/client/app/common/views/components/ui/info.vue deleted file mode 100644 index 30fd8cb344..0000000000 --- a/src/client/app/common/views/components/ui/info.vue +++ /dev/null @@ -1,43 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/ui/input.vue b/src/client/app/common/views/components/ui/input.vue deleted file mode 100644 index 1b339a9ae0..0000000000 --- a/src/client/app/common/views/components/ui/input.vue +++ /dev/null @@ -1,503 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/ui/margin.vue b/src/client/app/common/views/components/ui/margin.vue deleted file mode 100644 index 508116f070..0000000000 --- a/src/client/app/common/views/components/ui/margin.vue +++ /dev/null @@ -1,16 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/ui/modal.vue b/src/client/app/common/views/components/ui/modal.vue deleted file mode 100644 index 413dc39fa5..0000000000 --- a/src/client/app/common/views/components/ui/modal.vue +++ /dev/null @@ -1,80 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/ui/pagination.vue b/src/client/app/common/views/components/ui/pagination.vue deleted file mode 100644 index 67aa89d369..0000000000 --- a/src/client/app/common/views/components/ui/pagination.vue +++ /dev/null @@ -1,36 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/ui/radio.vue b/src/client/app/common/views/components/ui/radio.vue deleted file mode 100644 index 468318b58e..0000000000 --- a/src/client/app/common/views/components/ui/radio.vue +++ /dev/null @@ -1,110 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/ui/select.vue b/src/client/app/common/views/components/ui/select.vue deleted file mode 100644 index 1057d60d07..0000000000 --- a/src/client/app/common/views/components/ui/select.vue +++ /dev/null @@ -1,238 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/ui/switch.vue b/src/client/app/common/views/components/ui/switch.vue deleted file mode 100644 index 8e3997ae78..0000000000 --- a/src/client/app/common/views/components/ui/switch.vue +++ /dev/null @@ -1,135 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/ui/textarea.vue b/src/client/app/common/views/components/ui/textarea.vue deleted file mode 100644 index d265c7ac6d..0000000000 --- a/src/client/app/common/views/components/ui/textarea.vue +++ /dev/null @@ -1,194 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/uploader.vue b/src/client/app/common/views/components/uploader.vue deleted file mode 100644 index 9f02da6c1e..0000000000 --- a/src/client/app/common/views/components/uploader.vue +++ /dev/null @@ -1,231 +0,0 @@ - - - - - diff --git a/src/client/app/common/views/components/url-preview.vue b/src/client/app/common/views/components/url-preview.vue deleted file mode 100644 index 80aae5999d..0000000000 --- a/src/client/app/common/views/components/url-preview.vue +++ /dev/null @@ -1,343 +0,0 @@ -