summaryrefslogtreecommitdiff
path: root/packages/frontend/src/pages/settings/profile.vue
diff options
context:
space:
mode:
authorsyuilo <4439005+syuilo@users.noreply.github.com>2025-05-21 07:31:24 +0900
committerGitHub <noreply@github.com>2025-05-21 07:31:24 +0900
commit9480120eba1db238072b0bdfc9e6d01b2494cb3b (patch)
tree3a4d7963e7dd9e540713d6f2b26fc98e2c586223 /packages/frontend/src/pages/settings/profile.vue
parentenhance(frontend): URLプレビューをユーザーサイドで無効化で... (diff)
downloadmisskey-9480120eba1db238072b0bdfc9e6d01b2494cb3b.tar.gz
misskey-9480120eba1db238072b0bdfc9e6d01b2494cb3b.tar.bz2
misskey-9480120eba1db238072b0bdfc9e6d01b2494cb3b.zip
Feat: ドライブ周りのUIの強化 (#16011)
* wip * wip * Update MkDrive.vue * wip * Update MkDrive.vue * Update MkDrive.vue * wip * Update MkDrive.vue * Update MkDrive.vue * wip * Update MkDrive.vue * wip * wip * wip * wip * Update MkDrive.vue * wip * wip * wip * wip * wip * wip * wip * feat(frontend): upload dialog (#16032) * wip * wip * Update MkUploadDialog.vue * wip * wip * wip * wip * wip * Update MkUploadDialog.vue * wip * wip * Update MkDrive.vue * wip * wip * Update MkPostForm.vue * wip * Update room.form.vue * Update os.ts * wiop * wip * wip * wip * wip * wip * wip * wip * Update select-file.ts * wip * wip * Update MkDrive.vue * Update drag-and-drop.ts * wip * wip * wop * wip * wip * Update MkDrive.vue * Update CHANGELOG.md * wipo * Update MkDrive.folder.vue * wip * Update MkUploaderDialog.vue * wip * wip * Update MkUploaderDialog.vue * wip * Update MkDrive.vue * Update MkDrive.vue * wip * wip
Diffstat (limited to 'packages/frontend/src/pages/settings/profile.vue')
-rw-r--r--packages/frontend/src/pages/settings/profile.vue116
1 files changed, 81 insertions, 35 deletions
diff --git a/packages/frontend/src/pages/settings/profile.vue b/packages/frontend/src/pages/settings/profile.vue
index 30b7cf9a86..cd1565f39e 100644
--- a/packages/frontend/src/pages/settings/profile.vue
+++ b/packages/frontend/src/pages/settings/profile.vue
@@ -161,7 +161,7 @@ import MkSelect from '@/components/MkSelect.vue';
import FormSplit from '@/components/form/split.vue';
import MkFolder from '@/components/MkFolder.vue';
import FormSlot from '@/components/form/slot.vue';
-import { selectFile } from '@/utility/select-file.js';
+import { chooseDriveFile } from '@/utility/drive.js';
import * as os from '@/os.js';
import { i18n } from '@/i18n.js';
import { ensureSignin } from '@/i.js';
@@ -257,54 +257,100 @@ function save() {
}
function changeAvatar(ev) {
- selectFile(ev.currentTarget ?? ev.target, i18n.ts.avatar).then(async (file) => {
- let originalOrCropped = file;
-
- const { canceled } = await os.confirm({
- type: 'question',
- text: i18n.ts.cropImageAsk,
- okText: i18n.ts.cropYes,
- cancelText: i18n.ts.cropNo,
- });
-
- if (!canceled) {
- originalOrCropped = await os.cropImage(file, {
- aspectRatio: 1,
- });
- }
-
+ async function done(driveFile) {
const i = await os.apiWithDialog('i/update', {
- avatarId: originalOrCropped.id,
+ avatarId: driveFile.id,
});
$i.avatarId = i.avatarId;
$i.avatarUrl = i.avatarUrl;
claimAchievement('profileFilled');
- });
-}
+ }
-function changeBanner(ev) {
- selectFile(ev.currentTarget ?? ev.target, i18n.ts.banner).then(async (file) => {
- let originalOrCropped = file;
+ os.popupMenu([{
+ text: i18n.ts.avatar,
+ type: 'label',
+ }, {
+ text: i18n.ts.upload,
+ icon: 'ti ti-upload',
+ action: async () => {
+ const files = await os.chooseFileFromPc({ multiple: false });
+ const file = files[0];
- const { canceled } = await os.confirm({
- type: 'question',
- text: i18n.ts.cropImageAsk,
- okText: i18n.ts.cropYes,
- cancelText: i18n.ts.cropNo,
- });
+ let originalOrCropped = file;
- if (!canceled) {
- originalOrCropped = await os.cropImage(file, {
- aspectRatio: 2,
+ const { canceled } = await os.confirm({
+ type: 'question',
+ text: i18n.ts.cropImageAsk,
+ okText: i18n.ts.cropYes,
+ cancelText: i18n.ts.cropNo,
+ });
+
+ if (!canceled) {
+ originalOrCropped = await os.cropImageFile(file, {
+ aspectRatio: 1,
+ });
+ }
+
+ const driveFile = (await os.launchUploader([originalOrCropped], { multiple: false }))[0];
+ done(driveFile);
+ },
+ }, {
+ text: i18n.ts.fromDrive,
+ icon: 'ti ti-cloud',
+ action: () => {
+ chooseDriveFile({ multiple: false }).then(files => {
+ done(files[0]);
});
- }
+ },
+ }], ev.currentTarget ?? ev.target);
+}
+function changeBanner(ev) {
+ async function done(driveFile) {
const i = await os.apiWithDialog('i/update', {
- bannerId: originalOrCropped.id,
+ bannerId: driveFile.id,
});
$i.bannerId = i.bannerId;
$i.bannerUrl = i.bannerUrl;
- });
+ }
+
+ os.popupMenu([{
+ text: i18n.ts.banner,
+ type: 'label',
+ }, {
+ text: i18n.ts.upload,
+ icon: 'ti ti-upload',
+ action: async () => {
+ const files = await os.chooseFileFromPc({ multiple: false });
+ const file = files[0];
+
+ let originalOrCropped = file;
+
+ const { canceled } = await os.confirm({
+ type: 'question',
+ text: i18n.ts.cropImageAsk,
+ okText: i18n.ts.cropYes,
+ cancelText: i18n.ts.cropNo,
+ });
+
+ if (!canceled) {
+ originalOrCropped = await os.cropImageFile(file, {
+ aspectRatio: 2,
+ });
+ }
+
+ const driveFile = (await os.launchUploader([originalOrCropped], { multiple: false }))[0];
+ done(driveFile);
+ },
+ }, {
+ text: i18n.ts.fromDrive,
+ icon: 'ti ti-cloud',
+ action: () => {
+ chooseDriveFile({ multiple: false }).then(files => {
+ done(files[0]);
+ });
+ },
+ }], ev.currentTarget ?? ev.target);
}
const headerActions = computed(() => []);