diff --git a/html/src/app.js b/html/src/app.js index bcaaf144..3abee293 100644 --- a/html/src/app.js +++ b/html/src/app.js @@ -7711,7 +7711,7 @@ speechSynthesis.getVoices(); }; $app.methods.promptUserDialog = function () { - this.$prompt('Enter a User ID (UUID)', 'Direct Access', { + this.$prompt('Enter a User URL or ID (UUID)', 'Direct Access', { distinguishCancelAndClose: true, confirmButtonText: 'OK', cancelButtonText: 'Cancel', @@ -7720,7 +7720,21 @@ speechSynthesis.getVoices(); callback: (action, instance) => { if (action === 'confirm' && instance.inputValue) { - this.showUserDialog(instance.inputValue); + var testUrl = instance.inputValue.substring(0, 15); + if (testUrl === 'https://vrchat.') { + var userId = this.parseUserUrl(instance.inputValue); + if (userId) { + this.showUserDialog(userId); + } else { + this.$message({ + message: 'Invalid URL', + type: 'error' + }); + return; + } + } else { + this.showUserDialog(instance.inputValue); + } } } }); @@ -7746,6 +7760,7 @@ speechSynthesis.getVoices(); message: 'Invalid URL', type: 'error' }); + return; } } else { this.showWorldDialog(instance.inputValue); @@ -7908,11 +7923,25 @@ speechSynthesis.getVoices(); callback: (action, instance) => { if (action === 'confirm' && instance.inputValue) { - if (API.cachedAvatars.has(instance.inputValue)) { - this.showAvatarDialog(instance.inputValue); + var avatarId = instance.inputValue; + var testUrl = instance.inputValue.substring(0, 15); + if (testUrl === 'https://vrchat.') { + var urlAvatarId = this.parseAvatarUrl(instance.inputValue); + if (urlAvatarId) { + avatarId = urlAvatarId; + } else { + this.$message({ + message: 'Invalid URL', + type: 'error' + }); + return; + } + } + if (API.cachedAvatars.has(avatarId)) { + this.showAvatarDialog(avatarId); return; } - this.showFavoriteDialog('avatar', instance.inputValue); + this.showFavoriteDialog('avatar', avatarId); } } }); @@ -8001,6 +8030,7 @@ speechSynthesis.getVoices(); } D.ref = ref; $app.applyUserDialogLocation(); + $app.getAvatarName(ref.currentAvatarImageUrl); }); API.$on('WORLD', function (args) { @@ -8230,7 +8260,7 @@ speechSynthesis.getVoices(); if (args.cache) { API.getUser(args.params); } - this.getAvatarName(args); + this.getAvatarName(args.ref.currentAvatarImageUrl); var L = API.parseLocation(D.ref.location); if ((L.worldId) && (this.lastLocation.location !== L.tag)) { @@ -8590,7 +8620,7 @@ speechSynthesis.getVoices(); API.getFriendStatus({ userId: D.id }); - this.getAvatarName(args); + this.getAvatarName(args.ref.currentAvatarImageUrl); var L = API.parseLocation(D.ref.location); if ((L.worldId) && (this.lastLocation.location !== L.tag)) { @@ -11799,7 +11829,7 @@ speechSynthesis.getVoices(); API.cachedAvatarNames = new Map(); - $app.methods.getAvatarName = function (args) { + $app.methods.getAvatarName = function (imageUrl) { var D = this.userDialog; D.$avatarInfo = { ownerId: '', @@ -11808,7 +11838,6 @@ speechSynthesis.getVoices(); if (!D.visible) { return; } - var imageUrl = D.ref.currentAvatarImageUrl; var fileId = extractFileId(imageUrl); if (!fileId) { return; @@ -12441,6 +12470,28 @@ speechSynthesis.getVoices(); } }; + // Parse User URL + + $app.methods.parseUserUrl = function (user) { + var url = new URL(user); + var urlPath = url.pathname; + if ('/user/' === urlPath.substring(5, 11)) { + var userId = urlPath.substring(11); + return userId; + } + }; + + // Parse Avatar URL + + $app.methods.parseAvatarUrl = function (avatar) { + var url = new URL(avatar); + var urlPath = url.pathname; + if ('/avatar/' === urlPath.substring(5, 13)) { + var avatarId = urlPath.substr(13); + return avatarId; + } + }; + // userDialog Favorite Worlds $app.data.userFavoriteWorlds = []; diff --git a/html/src/app.scss b/html/src/app.scss index 5aa8c2dc..b4cc873b 100644 --- a/html/src/app.scss +++ b/html/src/app.scss @@ -399,7 +399,8 @@ img.friends-list-avatar { border-radius: 2px; } -.x-change-image-item > img { +.x-change-image-item > img, +.x-change-image-item > .el-popover__reference-wrapper > img { width: 240px; height: 180px; } diff --git a/html/src/index.pug b/html/src/index.pug index b5081d05..aecc7be1 100644 --- a/html/src/index.pug +++ b/html/src/index.pug @@ -1970,8 +1970,9 @@ html el-dialog.x-dialog(ref="previousImagesDialog" :visible.sync="previousImagesDialogVisible" title="Previous Images" width="800px") div div(style="display:inline-block" v-for="image in previousImagesTable" :key="image.version" v-if="image.file") - .x-change-image-item - img.image(v-lazy="image.file.url") + el-popover.x-change-image-item(placement="right" width="500px" trigger="click") + img.x-link(slot="reference" v-lazy="image.file.url") + img.x-link(v-lazy="image.file.url" style="width:500px;height:375px" @click="openExternalLink(image.file.url)") //- dialog: Gallery/VRCPlusIcons el-dialog.x-dialog(ref="galleryDialog" :visible.sync="galleryDialogVisible" title="Gallery and Icons" width="100%")