diff options
| author | syuilo <Syuilotan@yahoo.co.jp> | 2020-10-17 20:12:00 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-10-17 20:12:00 +0900 |
| commit | 7199e6f4e0b3a2c2bc198e689c3e0cd0d0f0354a (patch) | |
| tree | 2263a06acec7fa21882366bae26d1a983ce21135 /src/client/components/drive.file.vue | |
| parent | CW の input でも投稿ショートカットが動作するように (#6690) (diff) | |
| download | misskey-7199e6f4e0b3a2c2bc198e689c3e0cd0d0f0354a.tar.gz misskey-7199e6f4e0b3a2c2bc198e689c3e0cd0d0f0354a.tar.bz2 misskey-7199e6f4e0b3a2c2bc198e689c3e0cd0d0f0354a.zip | |
Migrate to Vue3 (#6587)
* Update reaction.vue
* fix bug
* wip
* wip
* wjio
* wip
* Revert "wip"
This reverts commit e427f2160adf4e8a4147006e25a89854edab0033.
* wip
* wip
* wip
* Update init.ts
* Update drive-window.vue
* wip
* wip
* Use PascalCase for components
* Use PascalCase for components
* update dep
* wip
* wip
* wip
* Update init.ts
* wip
* Update paging.ts
* Update test.vue
* watch deep
* wip
* lint
* wip
* wip
* wip
* wip
* wiop
* wip
* Update webpack.config.ts
* alllow null poll
* wip
* wip
* wip
* wiop
* UI redesign & refactor (#6714)
* wip
* wip
* wip
* wip
* wip
* Update drive.vue
* Update word-mute.vue
* wip
* wip
* wip
* clean up
* wip
* Update default.vue
* wip
* Update notes.vue
* Update mfm.ts
* Update index.home.vue
* Update post-form.vue
* Update post-form-attaches.vue
* wip
* Update post-form.vue
* Update sidebar.vue
* wip
* wip
* Update index.vue
* wip
* Update default.vue
* Update index.vue
* Update index.vue
* wip
* Update post-form-attaches.vue
* Update note.vue
* wip
* clean up
* Update notes.vue
* wip
* wip
* Update ja-JP.yml
* wip
* wip
* Update index.vue
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* Update default.vue
* wip
* Update _dark.json5
* wip
* wip
* wip
* clean up
* wip
* wip
* Update index.vue
* Update test.vue
* wip
* wip
* fix
* wip
* wip
* wip
* wip
* clena yop
* wip
* wip
* Update store.ts
* Update messaging-room.vue
* Update default.widgets.vue
* fix
* wip
* wip
* Update modal.vue
* wip
* Update os.ts
* Update os.ts
* Update deck.vue
* Update init.ts
* wip
* Update ja-JP.yml
* v-sizeは単にwindowのresizeを監視するだけで良いかもしれない
* Update modal.vue
* wip
* Update tooltip.ts
* wip
* wip
* wip
* wip
* wip
* Update image-viewer.vue
* wip
* wip
* Update style.scss
* Update style.scss
* Update visitor.vue
* wip
* Update init.ts
* Update init.ts
* wip
* wip
* Update visitor.vue
* Update visitor.vue
* Update visitor.vue
* Update visitor.vue
* wip
* wip
* Update modal.vue
* Update header.vue
* Update menu.vue
* Update about.vue
* Update about-misskey.vue
* wip
* wip
* Update visitor.vue
* Update tooltip.ts
* wip
* Update drive.vue
* wip
* Update style.scss
* Update header.vue
* wip
* wip
* Update users.user.vue
* Update announcements.vue
* wip
* wip
* wip
* Update emojis.vue
* wip
* Update emojis.vue
* Update style.scss
* Update users.vue
* wip
* Update style.scss
* wip
* Update welcome.entrance.vue
* Update radio.vue
* Update size.ts
* Update emoji-edit-dialog.vue
* wip
* Update emojis.vue
* wip
* Update emojis.vue
* Update emojis.vue
* Update emojis.vue
* wip
* wip
* wip
* wip
* Update file-dialog.vue
* wip
* wip
* Update token-generate-window.vue
* Update notification-setting-window.vue
* wip
* wip
* Update _error_.vue
* Update ja-JP.yml
* wip
* wip
* Update store.ts
* Update emojis.vue
* Update emojis.vue
* Update emojis.vue
* Update announcements.vue
* Update store.ts
* wip
* Update page-editor.vue
* wip
* wip
* Update modal.vue
* wip
* Update select-file.ts
* Update timeline.vue
* Update emojis.vue
* Update os.ts
* wip
* Update user-select.vue
* Update mfm.ts
* Update get-file-info.ts
* Update drive.vue
* Update init.ts
* Update mfm.ts
* wip
* wip
* Update window.vue
* Update note.vue
* wip
* wip
* Update user-info.vue
* wip
* wip
* wip
* wip
* wip
* Update header.vue
* Update header.vue
* wip
* Update explore.vue
* wip
* wip
* wip
* Update webpack.config.ts
* wip
* wip
* wip
* wip
* wip
* wip
* Update autocomplete.ts
* wip
* wip
* wip
* Update toast.vue
* wip
* Update post-form-dialog.vue
* wip
* wip
* wip
* wip
* wip
* Update users.vue
* wip
* Update explore.vue
* wip
* wip
* wip
* Update package.json
* wip
* Update icon-dialog.vue
* wip
* wip
* Update user-preview.ts
* wip
* wip
* wip
* wip
* wip
* Update instance.vue
* Update user-name.vue
* Update federation.vue
* Update instance.vue
* wip
* wip
* Update tag.vue
* wip
* wip
* wip
* wip
* wip
* Update instance.vue
* wip
* Update os.ts
* Update os.ts
* wip
* wip
* wip
* Update router.ts
* wip
* Update init.ts
* Update note.vue
* Update messages.vue
* wip
* wip
* wip
* wip
* wip
* google
* wip
* wip
* wip
* wip
* Update theme-editor.vue
* wip
* wip
* Update room.vue
* Update channel-editor.vue
* wip
* Update window.vue
* Update window.vue
* wip
* Update window.vue
* Update window.vue
* wip
* Update menu.vue
* wip
* wip
* wip
* wip
* Update messaging-room.vue
* wip
* Update post-form.vue
* Update default.widgets.vue
* Update window.vue
* wip
Diffstat (limited to 'src/client/components/drive.file.vue')
| -rw-r--r-- | src/client/components/drive.file.vue | 114 |
1 files changed, 63 insertions, 51 deletions
diff --git a/src/client/components/drive.file.vue b/src/client/components/drive.file.vue index b31a4e6375..261bbc83ec 100644 --- a/src/client/components/drive.file.vue +++ b/src/client/components/drive.file.vue @@ -1,7 +1,8 @@ <template> <div class="ncvczrfv" - :data-is-selected="isSelected" + :class="{ isSelected }" @click="onClick" + @contextmenu.stop="onContextmenu" draggable="true" @dragstart="onDragstart" @dragend="onDragend" @@ -20,7 +21,7 @@ <p>{{ $t('nsfw') }}</p> </div> - <x-file-thumbnail class="thumbnail" :file="file" fit="contain"/> + <MkDriveFileThumbnail class="thumbnail" :file="file" fit="contain"/> <p class="name"> <span>{{ file.name.lastIndexOf('.') != -1 ? file.name.substr(0, file.name.lastIndexOf('.')) : file.name }}</span> @@ -30,17 +31,17 @@ </template> <script lang="ts"> -import Vue from 'vue'; +import { defineComponent } from 'vue'; import { faEye, faEyeSlash } from '@fortawesome/free-regular-svg-icons'; -import copyToClipboard from '../scripts/copy-to-clipboard'; -//import updateAvatar from '../api/update-avatar'; -//import updateBanner from '../api/update-banner'; -import XFileThumbnail from './drive-file-thumbnail.vue'; import { faDownload, faLink, faICursor, faTrashAlt } from '@fortawesome/free-solid-svg-icons'; +import copyToClipboard from '@/scripts/copy-to-clipboard'; +import MkDriveFileThumbnail from './drive-file-thumbnail.vue'; +import bytes from '../filters/bytes'; +import * as os from '@/os'; -export default Vue.extend({ +export default defineComponent({ components: { - XFileThumbnail + MkDriveFileThumbnail }, props: { @@ -60,6 +61,8 @@ export default Vue.extend({ } }, + emits: ['chosen'], + data() { return { isDragging: false @@ -72,48 +75,54 @@ export default Vue.extend({ return this.$parent; }, title(): string { - return `${this.file.name}\n${this.file.type} ${Vue.filter('bytes')(this.file.size)}`; + return `${this.file.name}\n${this.file.type} ${bytes(this.file.size)}`; } }, methods: { + getMenu() { + return [{ + text: this.$t('rename'), + icon: faICursor, + action: this.rename + }, { + text: this.file.isSensitive ? this.$t('unmarkAsSensitive') : this.$t('markAsSensitive'), + icon: this.file.isSensitive ? faEye : faEyeSlash, + action: this.toggleSensitive + }, null, { + text: this.$t('copyUrl'), + icon: faLink, + action: this.copyUrl + }, { + type: 'a', + href: this.file.url, + target: '_blank', + text: this.$t('download'), + icon: faDownload, + download: this.file.name + }, null, { + text: this.$t('delete'), + icon: faTrashAlt, + danger: true, + action: this.deleteFile + }]; + }, + onClick(ev) { if (this.selectMode) { this.$emit('chosen', this.file); } else { - this.$root.menu({ - items: [{ - text: this.$t('rename'), - icon: faICursor, - action: this.rename - }, { - text: this.file.isSensitive ? this.$t('unmarkAsSensitive') : this.$t('markAsSensitive'), - icon: this.file.isSensitive ? faEye : faEyeSlash, - action: this.toggleSensitive - }, null, { - text: this.$t('copyUrl'), - icon: faLink, - action: this.copyUrl - }, { - type: 'a', - href: this.file.url, - target: '_blank', - text: this.$t('download'), - icon: faDownload, - download: this.file.name - }, null, { - text: this.$t('delete'), - icon: faTrashAlt, - action: this.deleteFile - }], - source: ev.currentTarget || ev.target, - }); + os.modalMenu(this.getMenu(), ev.currentTarget || ev.target); } }, + onContextmenu(e) { + os.contextMenu(this.getMenu(), e); + }, + onDragstart(e) { e.dataTransfer.effectAllowed = 'move'; - e.dataTransfer.setData('mk_drive_file', JSON.stringify(this.file)); + e.dataTransfer.setData(_DATA_TRANSFER_DRIVE_FILE_, JSON.stringify(this.file)); this.isDragging = true; // 親ブラウザに対して、ドラッグが開始されたフラグを立てる @@ -127,7 +136,7 @@ export default Vue.extend({ }, rename() { - this.$root.dialog({ + os.dialog({ title: this.$t('renameFile'), input: { placeholder: this.$t('inputNewFileName'), @@ -136,7 +145,7 @@ export default Vue.extend({ } }).then(({ canceled, result: name }) => { if (canceled) return; - this.$root.api('drive/files/update', { + os.api('drive/files/update', { fileId: this.file.id, name: name }); @@ -144,7 +153,7 @@ export default Vue.extend({ }, toggleSensitive() { - this.$root.api('drive/files/update', { + os.api('drive/files/update', { fileId: this.file.id, isSensitive: !this.file.isSensitive }); @@ -152,18 +161,15 @@ export default Vue.extend({ copyUrl() { copyToClipboard(this.file.url); - this.$root.dialog({ - type: 'success', - iconOnly: true, autoClose: true - }); + os.success(); }, setAsAvatar() { - updateAvatar(this.$root)(this.file); + os.updateAvatar(this.file); }, setAsBanner() { - updateBanner(this.$root)(this.file); + os.updateBanner(this.file); }, addApp() { @@ -171,17 +177,19 @@ export default Vue.extend({ }, async deleteFile() { - const { canceled } = await this.$root.dialog({ + const { canceled } = await os.dialog({ type: 'warning', text: this.$t('driveFileDeleteConfirm', { name: this.file.name }), showCancelButton: true }); if (canceled) return; - this.$root.api('drive/files/delete', { + os.api('drive/files/delete', { fileId: this.file.id }); - } + }, + + bytes } }); </script> @@ -197,6 +205,10 @@ export default Vue.extend({ cursor: pointer; } + > * { + pointer-events: none; + } + &:hover { background: rgba(#000, 0.05); @@ -233,7 +245,7 @@ export default Vue.extend({ } } - &[data-is-selected] { + &.isSelected { background: var(--accent); &:hover { |