diff --git a/html/.eslintrc.js b/html/.eslintrc.js index 0bde334c..3e15ac72 100644 --- a/html/.eslintrc.js +++ b/html/.eslintrc.js @@ -18,7 +18,8 @@ module.exports = { Discord: 'readonly', AppApi: 'readonly', SharedVariable: 'readonly', - WebApi: 'readonly' + WebApi: 'readonly', + AssetBundleCacher: 'readonly' }, extends: 'eslint:all', rules: { diff --git a/html/src/app.js b/html/src/app.js index 550d51f7..ca517148 100644 --- a/html/src/app.js +++ b/html/src/app.js @@ -845,6 +845,51 @@ speechSynthesis.getVoices(); } }); + Vue.component('avatar-info', { + template: '
{{ avatarName }}{{ avatarType }}
', + props: { + imageurl: String, + userid: String + }, + data() { + return { + avatarName: this.avatarName, + avatarType: this.avatarType, + color: this.color + }; + }, + methods: { + async parse() { + this.avatarName = ''; + this.avatarType = ''; + this.color = ''; + var avatarInfo = await $app.getAvatarName(this.imageurl); + this.avatarName = avatarInfo.avatarName; + if ((typeof this.userid === 'undefined') || (!avatarInfo.ownerId)) { + this.color = 'avatar-info-unknown'; + this.avatarType = '(unknown)'; + } else if (avatarInfo.ownerId === this.userid) { + this.color = 'avatar-info-own'; + this.avatarType = '(own)'; + } else { + this.color = 'avatar-info-public'; + this.avatarType = '(public)'; + } + }, + confirm() { + $app.showAvatarAuthorDialog(this.userid, this.imageurl); + } + }, + watch: { + imageurl() { + this.parse(); + } + }, + mounted() { + this.parse(); + } + }); + // API: User // changeUserName: PUT users/${userId} {displayName: string, currentPassword: string} @@ -8229,7 +8274,6 @@ speechSynthesis.getVoices(); } D.ref = ref; $app.applyUserDialogLocation(); - $app.getAvatarName(ref.currentAvatarImageUrl); }); API.$on('WORLD', function (args) { @@ -8459,7 +8503,6 @@ speechSynthesis.getVoices(); if (args.cache) { API.getUser(args.params); } - this.getAvatarName(args.ref.currentAvatarImageUrl); var L = API.parseLocation(D.ref.location); if ((L.worldId) && (this.lastLocation.location !== L.tag)) { @@ -8822,7 +8865,6 @@ speechSynthesis.getVoices(); API.getFriendStatus({ userId: D.id }); - this.getAvatarName(args.ref.currentAvatarImageUrl); var L = API.parseLocation(D.ref.location); if ((L.worldId) && (this.lastLocation.location !== L.tag)) { @@ -8882,7 +8924,7 @@ speechSynthesis.getVoices(); }); } else if (command === 'Show Avatar Author') { var { currentAvatarImageUrl } = D.ref; - this.showAvatarAuthorDialog(D.id, currentAvatarImageUrl) + this.showAvatarAuthorDialog(D.id, currentAvatarImageUrl); } else if (command === 'Show Fallback Avatar Details') { var { fallbackAvatar } = D.ref; if (fallbackAvatar) { @@ -12046,30 +12088,19 @@ speechSynthesis.getVoices(); API.cachedAvatarNames = new Map(); - $app.methods.getAvatarName = function (imageUrl) { - var D = this.userDialog; - D.$avatarInfo = { - ownerId: '', - avatarName: '-' - }; - if (!D.visible) { - return; - } + $app.methods.getAvatarName = async function (imageUrl) { var fileId = extractFileId(imageUrl); if (!fileId) { - return; + return { + ownerId: '', + avatarName: '-' + }; } if (API.cachedAvatarNames.has(fileId)) { - D.$avatarInfo = API.cachedAvatarNames.get(fileId); - return; + return API.cachedAvatarNames.get(fileId); } - var params = { - fileId - }; - API.getAvatarImages(params).then((args) => { - var avatarInfo = this.storeAvatarImage(args); - this.userDialog.$avatarInfo = avatarInfo; - }); + var args = await API.getAvatarImages({fileId}); + return this.storeAvatarImage(args); }; $app.data.discordNamesDialogVisible = false; diff --git a/html/src/app.scss b/html/src/app.scss index 7a7b34a6..2869c435 100644 --- a/html/src/app.scss +++ b/html/src/app.scss @@ -574,3 +574,18 @@ i.x-user-status.busy { background-color: #e6a23c !important; border-color: #e6a23c !important; } + +.avatar-info-own { + display: inline-block; + color: #e6a23c; +} + +.avatar-info-public { + display: inline-block; + color: #67c23a; +} + +.avatar-info-unknown { + display: inline-block; + color: #f56c6c; +} diff --git a/html/src/index.pug b/html/src/index.pug index 041ec9dd..73d20c5f 100644 --- a/html/src/index.pug +++ b/html/src/index.pug @@ -168,6 +168,8 @@ html span(v-else) Offline i.x-user-status(:class="userStatusClass(scope.row.status[0])") span(v-text="scope.row.status[0].statusDescription") + template(v-else-if="scope.row.type === 'Avatar'") + avatar-info(:imageurl="scope.row.avatar[0].currentAvatarImageUrl" :userid="scope.row.userId") //- gameLog .x-container(v-show="$refs.menu && $refs.menu.activeIndex === 'gameLog'") @@ -1101,10 +1103,7 @@ html el-popover(v-if="displayProfilePicOverrideAsAvatar && userDialog.ref.profilePicOverride" placement="right" width="500px" trigger="click" style="display:inline-block;margin-right:5px") img.x-link(slot="reference" v-lazy="userDialog.ref.currentAvatarThumbnailImageUrl" style="flex:none;width:80px;height:60px;border-radius:4px;object-fit:cover") img.x-link(v-lazy="userDialog.ref.currentAvatarImageUrl" style="width:500px;height:375px;object-fit:cover" @click="openExternalLink(userDialog.ref.currentAvatarImageUrl)") - div(@click="userDialogCommand('Show Avatar Author')" style="cursor:pointer;width:fit-content;display:inline-block;vertical-align:top") - span(v-text="userDialog.$avatarInfo.avatarName" style="display:inline-block;margin-right:5px") - span(v-if="userDialog.$avatarInfo.ownerId === userDialog.id" style="display:inline-block;color:#E6A23C" ) (own) - span(v-else-if="userDialog.$avatarInfo.avatarName && userDialog.$avatarInfo.ownerId" style="display:inline-block;color:#67C23A") ‎(public) + avatar-info(:imageurl="userDialog.ref.currentAvatarImageUrl" :userid="userDialog.id") .x-friend-item(style="width:100%;cursor:default") .detail span.name Bio