diff --git a/src/app.js b/src/app.js index cf0049ce..1a1d53d0 100644 --- a/src/app.js +++ b/src/app.js @@ -3199,6 +3199,7 @@ console.log(`isLinux: ${LINUX}`); console.error(err); } this.expireFavorites(); + this.cachedFavoriteGroupsByTypeName.clear(); this.bulk({ fn: 'getFavorites', N: -1, @@ -7168,9 +7169,16 @@ console.log(`isLinux: ${LINUX}`); if (!objectId) { return; } + this.favoriteDialog.visible = true; API.deleteFavorite({ objectId - }); + }) + .then(() => { + this.favoriteDialog.visible = false; + }) + .finally(() => { + this.favoriteDialog.loading = false; + }); }; $app.methods.clearFavoriteGroup = function (ctx) { @@ -12627,11 +12635,15 @@ console.log(`isLinux: ${LINUX}`); favoriteId: D.objectId, tags: group.name }) + .then(() => { + D.visible = false; + new Noty({ + type: 'success', + text: 'Favorite added' + }).show(); + }) .finally(() => { D.loading = false; - }) - .then((args) => { - return args; }); }; @@ -19653,9 +19665,22 @@ console.log(`isLinux: ${LINUX}`); if (!date) { return '-'; } - var dt = new Date(date); + const dt = new Date(date); if (format === 'long') { - return dt.toISOString(); + const formatDate = (date) => { + const padZero = (num) => String(num).padStart(2, '0'); + + const year = date.getFullYear(); + const month = padZero(date.getMonth() + 1); + const day = padZero(date.getDate()); + const hours = padZero(date.getHours()); + const minutes = padZero(date.getMinutes()); + const seconds = padZero(date.getSeconds()); + + return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; + }; + + return formatDate(dt); } else if (format === 'short') { return dt .toLocaleDateString('en-nz', { diff --git a/src/app.scss b/src/app.scss index 7f35bd4c..1179d359 100644 --- a/src/app.scss +++ b/src/app.scss @@ -956,3 +956,12 @@ i.x-status-icon.red { padding: 2px 2px; border-radius: 4px; } + +// FIXME +// Something changed the CSS of element-ui +// The other parts are the same +// It feels like can't fundamentally modify it +// And can only fix it bit by bit by overriding +.el-switch__core:after { + top: 1.5px; +} diff --git a/src/mixins/dialogs/feedFilters.pug b/src/mixins/dialogs/feedFilters.pug index 3c891fa8..036f6599 100644 --- a/src/mixins/dialogs/feedFilters.pug +++ b/src/mixins/dialogs/feedFilters.pug @@ -1,102 +1,134 @@ -mixin feedFilters() +mixin feedFilters //- dialog: Noty feed filters - el-dialog.x-dialog(:before-close="beforeDialogClose" @mousedown.native="dialogMouseDown" @mouseup.native="dialogMouseUp" ref="notyFeedFiltersDialog" :visible.sync="notyFeedFiltersDialog.visible" :title="$t('dialog.shared_feed_filters.notification')" width="550px") - .toggle-list + el-dialog.x-dialog( + :before-close='beforeDialogClose' + @mousedown.native='dialogMouseDown' + @mouseup.native='dialogMouseUp' + ref='notyFeedFiltersDialog' + :visible.sync='notyFeedFiltersDialog.visible' + :title='$t("dialog.shared_feed_filters.notification")' + width='550px' + top='5vh') + .toggle-list(style='height: 75vh; overflow-y: auto') .toggle-item span.toggle-name OnPlayerJoining - el-radio-group(v-model="sharedFeedFilters.noty.OnPlayerJoining" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="VIP") {{ $t('dialog.shared_feed_filters.favorite') }} - el-radio-button(label="Friends") {{ $t('dialog.shared_feed_filters.friends') }} + el-radio-group( + v-model='sharedFeedFilters.noty.OnPlayerJoining' + size='mini' + @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='VIP') {{ $t('dialog.shared_feed_filters.favorite') }} + el-radio-button(label='Friends') {{ $t('dialog.shared_feed_filters.friends') }} .toggle-item span.toggle-name OnPlayerJoined - el-radio-group(v-model="sharedFeedFilters.noty.OnPlayerJoined" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="VIP") {{ $t('dialog.shared_feed_filters.favorite') }} - el-radio-button(label="Friends") {{ $t('dialog.shared_feed_filters.friends') }} - el-radio-button(label="Everyone") {{ $t('dialog.shared_feed_filters.everyone') }} + el-radio-group( + v-model='sharedFeedFilters.noty.OnPlayerJoined' + size='mini' + @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='VIP') {{ $t('dialog.shared_feed_filters.favorite') }} + el-radio-button(label='Friends') {{ $t('dialog.shared_feed_filters.friends') }} + el-radio-button(label='Everyone') {{ $t('dialog.shared_feed_filters.everyone') }} .toggle-item span.toggle-name OnPlayerLeft - el-radio-group(v-model="sharedFeedFilters.noty.OnPlayerLeft" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="VIP") {{ $t('dialog.shared_feed_filters.favorite') }} - el-radio-button(label="Friends") {{ $t('dialog.shared_feed_filters.friends') }} - el-radio-button(label="Everyone") {{ $t('dialog.shared_feed_filters.everyone') }} + el-radio-group( + v-model='sharedFeedFilters.noty.OnPlayerLeft' + size='mini' + @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='VIP') {{ $t('dialog.shared_feed_filters.favorite') }} + el-radio-button(label='Friends') {{ $t('dialog.shared_feed_filters.friends') }} + el-radio-button(label='Everyone') {{ $t('dialog.shared_feed_filters.everyone') }} .toggle-item span.toggle-name Online - el-radio-group(v-model="sharedFeedFilters.noty.Online" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="VIP") {{ $t('dialog.shared_feed_filters.favorite') }} - el-radio-button(label="Friends") {{ $t('dialog.shared_feed_filters.friends') }} + el-radio-group(v-model='sharedFeedFilters.noty.Online' size='mini' @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='VIP') {{ $t('dialog.shared_feed_filters.favorite') }} + el-radio-button(label='Friends') {{ $t('dialog.shared_feed_filters.friends') }} .toggle-item span.toggle-name Offline - el-radio-group(v-model="sharedFeedFilters.noty.Offline" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="VIP") {{ $t('dialog.shared_feed_filters.favorite') }} - el-radio-button(label="Friends") {{ $t('dialog.shared_feed_filters.friends') }} + el-radio-group(v-model='sharedFeedFilters.noty.Offline' size='mini' @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='VIP') {{ $t('dialog.shared_feed_filters.favorite') }} + el-radio-button(label='Friends') {{ $t('dialog.shared_feed_filters.friends') }} .toggle-item span.toggle-name GPS - el-radio-group(v-model="sharedFeedFilters.noty.GPS" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="VIP") {{ $t('dialog.shared_feed_filters.favorite') }} - el-radio-button(label="Friends") {{ $t('dialog.shared_feed_filters.friends') }} + el-radio-group(v-model='sharedFeedFilters.noty.GPS' size='mini' @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='VIP') {{ $t('dialog.shared_feed_filters.favorite') }} + el-radio-button(label='Friends') {{ $t('dialog.shared_feed_filters.friends') }} .toggle-item span.toggle-name Status - el-radio-group(v-model="sharedFeedFilters.noty.Status" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="VIP") {{ $t('dialog.shared_feed_filters.favorite') }} - el-radio-button(label="Friends") {{ $t('dialog.shared_feed_filters.friends') }} + el-radio-group(v-model='sharedFeedFilters.noty.Status' size='mini' @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='VIP') {{ $t('dialog.shared_feed_filters.favorite') }} + el-radio-button(label='Friends') {{ $t('dialog.shared_feed_filters.friends') }} .toggle-item span.toggle-name Invite - el-radio-group(v-model="sharedFeedFilters.noty.invite" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="VIP") {{ $t('dialog.shared_feed_filters.favorite') }} - el-radio-button(label="Friends") {{ $t('dialog.shared_feed_filters.friends') }} + el-radio-group(v-model='sharedFeedFilters.noty.invite' size='mini' @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='VIP') {{ $t('dialog.shared_feed_filters.favorite') }} + el-radio-button(label='Friends') {{ $t('dialog.shared_feed_filters.friends') }} .toggle-item span.toggle-name Request Invite - el-radio-group(v-model="sharedFeedFilters.noty.requestInvite" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="VIP") {{ $t('dialog.shared_feed_filters.favorite') }} - el-radio-button(label="Friends") {{ $t('dialog.shared_feed_filters.friends') }} + el-radio-group( + v-model='sharedFeedFilters.noty.requestInvite' + size='mini' + @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='VIP') {{ $t('dialog.shared_feed_filters.favorite') }} + el-radio-button(label='Friends') {{ $t('dialog.shared_feed_filters.friends') }} .toggle-item span.toggle-name Invite Response - el-radio-group(v-model="sharedFeedFilters.noty.inviteResponse" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="VIP") {{ $t('dialog.shared_feed_filters.favorite') }} - el-radio-button(label="Friends") {{ $t('dialog.shared_feed_filters.friends') }} + el-radio-group( + v-model='sharedFeedFilters.noty.inviteResponse' + size='mini' + @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='VIP') {{ $t('dialog.shared_feed_filters.favorite') }} + el-radio-button(label='Friends') {{ $t('dialog.shared_feed_filters.friends') }} .toggle-item span.toggle-name Request Invite Response - el-radio-group(v-model="sharedFeedFilters.noty.requestInviteResponse" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="VIP") {{ $t('dialog.shared_feed_filters.favorite') }} - el-radio-button(label="Friends") {{ $t('dialog.shared_feed_filters.friends') }} + el-radio-group( + v-model='sharedFeedFilters.noty.requestInviteResponse' + size='mini' + @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='VIP') {{ $t('dialog.shared_feed_filters.favorite') }} + el-radio-button(label='Friends') {{ $t('dialog.shared_feed_filters.friends') }} .toggle-item span.toggle-name Friend Request - el-radio-group(v-model="sharedFeedFilters.noty.friendRequest" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="On") {{ $t('dialog.shared_feed_filters.on') }} + el-radio-group( + v-model='sharedFeedFilters.noty.friendRequest' + size='mini' + @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='On') {{ $t('dialog.shared_feed_filters.on') }} .toggle-item span.toggle-name New Friend - el-radio-group(v-model="sharedFeedFilters.noty.Friend" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="On") {{ $t('dialog.shared_feed_filters.on') }} + el-radio-group(v-model='sharedFeedFilters.noty.Friend' size='mini' @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='On') {{ $t('dialog.shared_feed_filters.on') }} .toggle-item span.toggle-name Unfriend - el-radio-group(v-model="sharedFeedFilters.noty.Unfriend" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="On") {{ $t('dialog.shared_feed_filters.on') }} + el-radio-group(v-model='sharedFeedFilters.noty.Unfriend' size='mini' @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='On') {{ $t('dialog.shared_feed_filters.on') }} .toggle-item span.toggle-name Display Name Change - el-radio-group(v-model="sharedFeedFilters.noty.DisplayName" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="VIP") {{ $t('dialog.shared_feed_filters.favorite') }} - el-radio-button(label="Friends") {{ $t('dialog.shared_feed_filters.friends') }} + el-radio-group( + v-model='sharedFeedFilters.noty.DisplayName' + size='mini' + @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='VIP') {{ $t('dialog.shared_feed_filters.favorite') }} + el-radio-button(label='Friends') {{ $t('dialog.shared_feed_filters.friends') }} .toggle-item span.toggle-name Trust Level Change - el-radio-group(v-model="sharedFeedFilters.noty.TrustLevel" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="VIP") {{ $t('dialog.shared_feed_filters.favorite') }} - el-radio-button(label="Friends") {{ $t('dialog.shared_feed_filters.friends') }} + el-radio-group(v-model='sharedFeedFilters.noty.TrustLevel' size='mini' @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='VIP') {{ $t('dialog.shared_feed_filters.favorite') }} + el-radio-button(label='Friends') {{ $t('dialog.shared_feed_filters.friends') }} //- .toggle-item //- span.toggle-name Boop //- el-radio-group(v-model="sharedFeedFilters.noty.boop" size="mini" @change="saveSharedFeedFilters") @@ -104,253 +136,367 @@ mixin feedFilters() //- el-radio-button(label="On") {{ $t('dialog.shared_feed_filters.on') }} .toggle-item span.toggle-name Group Change - el-tooltip(placement="top" style="margin-left:5px" content="When you've left or been kicked from a group, group name changed, group owner changed, role added/removed") + el-tooltip( + placement='top' + style='margin-left: 5px' + content='When you\'ve left or been kicked from a group, group name changed, group owner changed, role added/removed') i.el-icon-info - el-radio-group(v-model="sharedFeedFilters.noty.groupChange" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="On") {{ $t('dialog.shared_feed_filters.on') }} + el-radio-group( + v-model='sharedFeedFilters.noty.groupChange' + size='mini' + @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='On') {{ $t('dialog.shared_feed_filters.on') }} .toggle-item span.toggle-name Group Announcement - el-radio-group(v-model="sharedFeedFilters.noty['group.announcement']" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="On") {{ $t('dialog.shared_feed_filters.on') }} + el-radio-group( + v-model='sharedFeedFilters.noty["group.announcement"]' + size='mini' + @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='On') {{ $t('dialog.shared_feed_filters.on') }} .toggle-item span.toggle-name Group Join - el-tooltip(placement="top" style="margin-left:5px" content="When your request to join a group has been approved") + el-tooltip( + placement='top' + style='margin-left: 5px' + content='When your request to join a group has been approved') i.el-icon-info - el-radio-group(v-model="sharedFeedFilters.noty['group.informative']" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="On") {{ $t('dialog.shared_feed_filters.on') }} + el-radio-group( + v-model='sharedFeedFilters.noty["group.informative"]' + size='mini' + @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='On') {{ $t('dialog.shared_feed_filters.on') }} .toggle-item span.toggle-name Group Invite - el-tooltip(placement="top" style="margin-left:5px" content="When someone invites you to join a group") + el-tooltip( + placement='top' + style='margin-left: 5px' + content='When someone invites you to join a group') i.el-icon-info - el-radio-group(v-model="sharedFeedFilters.noty['group.invite']" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="On") {{ $t('dialog.shared_feed_filters.on') }} + el-radio-group( + v-model='sharedFeedFilters.noty["group.invite"]' + size='mini' + @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='On') {{ $t('dialog.shared_feed_filters.on') }} .toggle-item span.toggle-name Group Join Request - el-tooltip(placement="top" style="margin-left:5px" content="When someone requests to join a group you're a moderator for") + el-tooltip( + placement='top' + style='margin-left: 5px' + content='When someone requests to join a group you\'re a moderator for') i.el-icon-info - el-radio-group(v-model="sharedFeedFilters.noty['group.joinRequest']" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="On") {{ $t('dialog.shared_feed_filters.on') }} + el-radio-group( + v-model='sharedFeedFilters.noty["group.joinRequest"]' + size='mini' + @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='On') {{ $t('dialog.shared_feed_filters.on') }} .toggle-item span.toggle-name Group Transfer Request - el-radio-group(v-model="sharedFeedFilters.noty['group.transfer']" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="On") {{ $t('dialog.shared_feed_filters.on') }} + el-radio-group( + v-model='sharedFeedFilters.noty["group.transfer"]' + size='mini' + @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='On') {{ $t('dialog.shared_feed_filters.on') }} .toggle-item span.toggle-name Instance Queue Ready - el-radio-group(v-model="sharedFeedFilters.noty['group.queueReady']" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="On") {{ $t('dialog.shared_feed_filters.on') }} + el-radio-group( + v-model='sharedFeedFilters.noty["group.queueReady"]' + size='mini' + @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='On') {{ $t('dialog.shared_feed_filters.on') }} .toggle-item span.toggle-name Instance Closed - el-tooltip(placement="top" style="margin-left:5px" content="When the instance you're in has been closed preventing anyone from joining") + el-tooltip( + placement='top' + style='margin-left: 5px' + content='When the instance you\'re in has been closed preventing anyone from joining') i.el-icon-info - el-radio-group(v-model="sharedFeedFilters.noty['instance.closed']" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="On") {{ $t('dialog.shared_feed_filters.on') }} + el-radio-group( + v-model='sharedFeedFilters.noty["instance.closed"]' + size='mini' + @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='On') {{ $t('dialog.shared_feed_filters.on') }} .toggle-item span.toggle-name Video Play - el-tooltip(placement="top" style="margin-left:5px" content="Requires VRCX YouTube API option enabled") + el-tooltip( + placement='top' + style='margin-left: 5px' + content='Requires VRCX YouTube API option enabled') i.el-icon-warning - el-radio-group(v-model="sharedFeedFilters.noty.VideoPlay" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="On") {{ $t('dialog.shared_feed_filters.on') }} + el-radio-group(v-model='sharedFeedFilters.noty.VideoPlay' size='mini' @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='On') {{ $t('dialog.shared_feed_filters.on') }} .toggle-item span.toggle-name Miscellaneous Events - el-tooltip(placement="top" style="margin-left:5px" content="Misc event from VRC game log: VRC crash auto rejoin, shader keyword limit, joining instance blocked by master, error loading video, audio device changed, error joining instance, kicked from instance, VRChat failing to start OSC server, etc...") + el-tooltip( + placement='top' + style='margin-left: 5px' + content='Misc event from VRC game log: VRC crash auto rejoin, shader keyword limit, joining instance blocked by master, error loading video, audio device changed, error joining instance, kicked from instance, VRChat failing to start OSC server, etc...') i.el-icon-info - el-radio-group(v-model="sharedFeedFilters.noty.Event" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="On") {{ $t('dialog.shared_feed_filters.on') }} + el-radio-group(v-model='sharedFeedFilters.noty.Event' size='mini' @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='On') {{ $t('dialog.shared_feed_filters.on') }} .toggle-item span.toggle-name External App - el-radio-group(v-model="sharedFeedFilters.noty.External" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="On") {{ $t('dialog.shared_feed_filters.on') }} + el-radio-group(v-model='sharedFeedFilters.noty.External' size='mini' @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='On') {{ $t('dialog.shared_feed_filters.on') }} .toggle-item span.toggle-name Blocked Player Joins - el-radio-group(v-model="sharedFeedFilters.noty.BlockedOnPlayerJoined" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="VIP") {{ $t('dialog.shared_feed_filters.favorite') }} - el-radio-button(label="Friends") {{ $t('dialog.shared_feed_filters.friends') }} - el-radio-button(label="Everyone") {{ $t('dialog.shared_feed_filters.everyone') }} + el-radio-group( + v-model='sharedFeedFilters.noty.BlockedOnPlayerJoined' + size='mini' + @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='VIP') {{ $t('dialog.shared_feed_filters.favorite') }} + el-radio-button(label='Friends') {{ $t('dialog.shared_feed_filters.friends') }} + el-radio-button(label='Everyone') {{ $t('dialog.shared_feed_filters.everyone') }} .toggle-item span.toggle-name Blocked Player Leaves - el-radio-group(v-model="sharedFeedFilters.noty.BlockedOnPlayerLeft" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="VIP") {{ $t('dialog.shared_feed_filters.favorite') }} - el-radio-button(label="Friends") {{ $t('dialog.shared_feed_filters.friends') }} - el-radio-button(label="Everyone") {{ $t('dialog.shared_feed_filters.everyone') }} + el-radio-group( + v-model='sharedFeedFilters.noty.BlockedOnPlayerLeft' + size='mini' + @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='VIP') {{ $t('dialog.shared_feed_filters.favorite') }} + el-radio-button(label='Friends') {{ $t('dialog.shared_feed_filters.friends') }} + el-radio-button(label='Everyone') {{ $t('dialog.shared_feed_filters.everyone') }} .toggle-item span.toggle-name Muted Player Joins - el-radio-group(v-model="sharedFeedFilters.noty.MutedOnPlayerJoined" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="VIP") {{ $t('dialog.shared_feed_filters.favorite') }} - el-radio-button(label="Friends") {{ $t('dialog.shared_feed_filters.friends') }} - el-radio-button(label="Everyone") {{ $t('dialog.shared_feed_filters.everyone') }} + el-radio-group( + v-model='sharedFeedFilters.noty.MutedOnPlayerJoined' + size='mini' + @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='VIP') {{ $t('dialog.shared_feed_filters.favorite') }} + el-radio-button(label='Friends') {{ $t('dialog.shared_feed_filters.friends') }} + el-radio-button(label='Everyone') {{ $t('dialog.shared_feed_filters.everyone') }} .toggle-item span.toggle-name Muted Player Leaves - el-radio-group(v-model="sharedFeedFilters.noty.MutedOnPlayerLeft" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="VIP") {{ $t('dialog.shared_feed_filters.favorite') }} - el-radio-button(label="Friends") {{ $t('dialog.shared_feed_filters.friends') }} - el-radio-button(label="Everyone") {{ $t('dialog.shared_feed_filters.everyone') }} + el-radio-group( + v-model='sharedFeedFilters.noty.MutedOnPlayerLeft' + size='mini' + @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='VIP') {{ $t('dialog.shared_feed_filters.favorite') }} + el-radio-button(label='Friends') {{ $t('dialog.shared_feed_filters.friends') }} + el-radio-button(label='Everyone') {{ $t('dialog.shared_feed_filters.everyone') }} .toggle-item span.toggle-name Lobby Avatar Change - el-radio-group(v-model="sharedFeedFilters.noty.AvatarChange" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="VIP") {{ $t('dialog.shared_feed_filters.favorite') }} - el-radio-button(label="Friends") {{ $t('dialog.shared_feed_filters.friends') }} - el-radio-button(label="Everyone") {{ $t('dialog.shared_feed_filters.everyone') }} - template(v-if="photonLoggingEnabled") + el-radio-group( + v-model='sharedFeedFilters.noty.AvatarChange' + size='mini' + @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='VIP') {{ $t('dialog.shared_feed_filters.favorite') }} + el-radio-button(label='Friends') {{ $t('dialog.shared_feed_filters.friends') }} + el-radio-button(label='Everyone') {{ $t('dialog.shared_feed_filters.everyone') }} + template(v-if='photonLoggingEnabled') br .toggle-item span.toggle-name Photon Event Logging .toggle-item span.toggle-name Portal Spawn - el-radio-group(v-model="sharedFeedFilters.noty.PortalSpawn" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="VIP") {{ $t('dialog.shared_feed_filters.favorite') }} - el-radio-button(label="Friends") {{ $t('dialog.shared_feed_filters.friends') }} - el-radio-button(label="Everyone") {{ $t('dialog.shared_feed_filters.everyone') }} + el-radio-group( + v-model='sharedFeedFilters.noty.PortalSpawn' + size='mini' + @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='VIP') {{ $t('dialog.shared_feed_filters.favorite') }} + el-radio-button(label='Friends') {{ $t('dialog.shared_feed_filters.friends') }} + el-radio-button(label='Everyone') {{ $t('dialog.shared_feed_filters.everyone') }} .toggle-item span.toggle-name Lobby ChatBox Message - el-radio-group(v-model="sharedFeedFilters.noty.ChatBoxMessage" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="VIP") {{ $t('dialog.shared_feed_filters.favorite') }} - el-radio-button(label="Friends") {{ $t('dialog.shared_feed_filters.friends') }} - el-radio-button(label="Everyone") {{ $t('dialog.shared_feed_filters.everyone') }} + el-radio-group( + v-model='sharedFeedFilters.noty.ChatBoxMessage' + size='mini' + @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='VIP') {{ $t('dialog.shared_feed_filters.favorite') }} + el-radio-button(label='Friends') {{ $t('dialog.shared_feed_filters.friends') }} + el-radio-button(label='Everyone') {{ $t('dialog.shared_feed_filters.everyone') }} .toggle-item span.toggle-name Blocked - el-radio-group(v-model="sharedFeedFilters.noty.Blocked" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="On") {{ $t('dialog.shared_feed_filters.on') }} + el-radio-group( + v-model='sharedFeedFilters.noty.Blocked' + size='mini' + @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='On') {{ $t('dialog.shared_feed_filters.on') }} .toggle-item span.toggle-name Unblocked - el-radio-group(v-model="sharedFeedFilters.noty.Unblocked" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="On") {{ $t('dialog.shared_feed_filters.on') }} + el-radio-group( + v-model='sharedFeedFilters.noty.Unblocked' + size='mini' + @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='On') {{ $t('dialog.shared_feed_filters.on') }} .toggle-item span.toggle-name Muted - el-radio-group(v-model="sharedFeedFilters.noty.Muted" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="On") {{ $t('dialog.shared_feed_filters.on') }} + el-radio-group(v-model='sharedFeedFilters.noty.Muted' size='mini' @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='On') {{ $t('dialog.shared_feed_filters.on') }} .toggle-item span.toggle-name Unmuted - el-radio-group(v-model="sharedFeedFilters.noty.Unmuted" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="On") {{ $t('dialog.shared_feed_filters.on') }} + el-radio-group( + v-model='sharedFeedFilters.noty.Unmuted' + size='mini' + @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='On') {{ $t('dialog.shared_feed_filters.on') }} template(#footer) - el-button(size="small" @click="resetNotyFeedFilters") {{ $t('dialog.shared_feed_filters.reset') }} - el-button(size="small" type="primary" style="margin-left:10px" @click="notyFeedFiltersDialog.visible = false") {{ $t('dialog.shared_feed_filters.close') }} + el-button(size='small' @click='resetNotyFeedFilters') {{ $t('dialog.shared_feed_filters.reset') }} + el-button( + size='small' + type='primary' + style='margin-left: 10px' + @click='notyFeedFiltersDialog.visible = false') {{ $t('dialog.shared_feed_filters.close') }} //- dialog: wrist feed filters - el-dialog.x-dialog(:before-close="beforeDialogClose" @mousedown.native="dialogMouseDown" @mouseup.native="dialogMouseUp" ref="wristFeedFiltersDialog" :visible.sync="wristFeedFiltersDialog.visible" :title="$t('dialog.shared_feed_filters.wrist')" width="550px") - .toggle-list + el-dialog.x-dialog( + :before-close='beforeDialogClose' + @mousedown.native='dialogMouseDown' + @mouseup.native='dialogMouseUp' + ref='wristFeedFiltersDialog' + :visible.sync='wristFeedFiltersDialog.visible' + :title='$t("dialog.shared_feed_filters.wrist")' + width='550px' + top='5vh') + .toggle-list(style='height: 75vh; overflow-y: auto') .toggle-item span.toggle-name Self Location - el-radio-group(v-model="sharedFeedFilters.wrist.Location" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="On") {{ $t('dialog.shared_feed_filters.on') }} + el-radio-group(v-model='sharedFeedFilters.wrist.Location' size='mini' @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='On') {{ $t('dialog.shared_feed_filters.on') }} .toggle-item span.toggle-name OnPlayerJoining - el-radio-group(v-model="sharedFeedFilters.wrist.OnPlayerJoining" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="VIP") {{ $t('dialog.shared_feed_filters.favorite') }} - el-radio-button(label="Friends") {{ $t('dialog.shared_feed_filters.friends') }} + el-radio-group( + v-model='sharedFeedFilters.wrist.OnPlayerJoining' + size='mini' + @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='VIP') {{ $t('dialog.shared_feed_filters.favorite') }} + el-radio-button(label='Friends') {{ $t('dialog.shared_feed_filters.friends') }} .toggle-item span.toggle-name OnPlayerJoined - el-radio-group(v-model="sharedFeedFilters.wrist.OnPlayerJoined" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="VIP") {{ $t('dialog.shared_feed_filters.favorite') }} - el-radio-button(label="Friends") {{ $t('dialog.shared_feed_filters.friends') }} - el-radio-button(label="Everyone") {{ $t('dialog.shared_feed_filters.everyone') }} + el-radio-group( + v-model='sharedFeedFilters.wrist.OnPlayerJoined' + size='mini' + @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='VIP') {{ $t('dialog.shared_feed_filters.favorite') }} + el-radio-button(label='Friends') {{ $t('dialog.shared_feed_filters.friends') }} + el-radio-button(label='Everyone') {{ $t('dialog.shared_feed_filters.everyone') }} .toggle-item span.toggle-name OnPlayerLeft - el-radio-group(v-model="sharedFeedFilters.wrist.OnPlayerLeft" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="VIP") {{ $t('dialog.shared_feed_filters.favorite') }} - el-radio-button(label="Friends") {{ $t('dialog.shared_feed_filters.friends') }} - el-radio-button(label="Everyone") {{ $t('dialog.shared_feed_filters.everyone') }} + el-radio-group( + v-model='sharedFeedFilters.wrist.OnPlayerLeft' + size='mini' + @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='VIP') {{ $t('dialog.shared_feed_filters.favorite') }} + el-radio-button(label='Friends') {{ $t('dialog.shared_feed_filters.friends') }} + el-radio-button(label='Everyone') {{ $t('dialog.shared_feed_filters.everyone') }} .toggle-item span.toggle-name Online - el-radio-group(v-model="sharedFeedFilters.wrist.Online" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="VIP") {{ $t('dialog.shared_feed_filters.favorite') }} - el-radio-button(label="Friends") {{ $t('dialog.shared_feed_filters.friends') }} + el-radio-group(v-model='sharedFeedFilters.wrist.Online' size='mini' @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='VIP') {{ $t('dialog.shared_feed_filters.favorite') }} + el-radio-button(label='Friends') {{ $t('dialog.shared_feed_filters.friends') }} .toggle-item span.toggle-name Offline - el-radio-group(v-model="sharedFeedFilters.wrist.Offline" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="VIP") {{ $t('dialog.shared_feed_filters.favorite') }} - el-radio-button(label="Friends") {{ $t('dialog.shared_feed_filters.friends') }} + el-radio-group(v-model='sharedFeedFilters.wrist.Offline' size='mini' @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='VIP') {{ $t('dialog.shared_feed_filters.favorite') }} + el-radio-button(label='Friends') {{ $t('dialog.shared_feed_filters.friends') }} .toggle-item span.toggle-name GPS - el-radio-group(v-model="sharedFeedFilters.wrist.GPS" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="VIP") {{ $t('dialog.shared_feed_filters.favorite') }} - el-radio-button(label="Friends") {{ $t('dialog.shared_feed_filters.friends') }} + el-radio-group(v-model='sharedFeedFilters.wrist.GPS' size='mini' @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='VIP') {{ $t('dialog.shared_feed_filters.favorite') }} + el-radio-button(label='Friends') {{ $t('dialog.shared_feed_filters.friends') }} .toggle-item span.toggle-name Status - el-radio-group(v-model="sharedFeedFilters.wrist.Status" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="VIP") {{ $t('dialog.shared_feed_filters.favorite') }} - el-radio-button(label="Friends") {{ $t('dialog.shared_feed_filters.friends') }} + el-radio-group(v-model='sharedFeedFilters.wrist.Status' size='mini' @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='VIP') {{ $t('dialog.shared_feed_filters.favorite') }} + el-radio-button(label='Friends') {{ $t('dialog.shared_feed_filters.friends') }} .toggle-item span.toggle-name Invite - el-radio-group(v-model="sharedFeedFilters.wrist.invite" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="VIP") {{ $t('dialog.shared_feed_filters.favorite') }} - el-radio-button(label="Friends") {{ $t('dialog.shared_feed_filters.friends') }} + el-radio-group(v-model='sharedFeedFilters.wrist.invite' size='mini' @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='VIP') {{ $t('dialog.shared_feed_filters.favorite') }} + el-radio-button(label='Friends') {{ $t('dialog.shared_feed_filters.friends') }} .toggle-item span.toggle-name Request Invite - el-radio-group(v-model="sharedFeedFilters.wrist.requestInvite" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="VIP") {{ $t('dialog.shared_feed_filters.favorite') }} - el-radio-button(label="Friends") {{ $t('dialog.shared_feed_filters.friends') }} + el-radio-group( + v-model='sharedFeedFilters.wrist.requestInvite' + size='mini' + @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='VIP') {{ $t('dialog.shared_feed_filters.favorite') }} + el-radio-button(label='Friends') {{ $t('dialog.shared_feed_filters.friends') }} .toggle-item span.toggle-name Invite Response - el-radio-group(v-model="sharedFeedFilters.wrist.inviteResponse" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="VIP") {{ $t('dialog.shared_feed_filters.favorite') }} - el-radio-button(label="Friends") {{ $t('dialog.shared_feed_filters.friends') }} + el-radio-group( + v-model='sharedFeedFilters.wrist.inviteResponse' + size='mini' + @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='VIP') {{ $t('dialog.shared_feed_filters.favorite') }} + el-radio-button(label='Friends') {{ $t('dialog.shared_feed_filters.friends') }} .toggle-item span.toggle-name Request Invite Response - el-radio-group(v-model="sharedFeedFilters.wrist.requestInviteResponse" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="VIP") {{ $t('dialog.shared_feed_filters.favorite') }} - el-radio-button(label="Friends") {{ $t('dialog.shared_feed_filters.friends') }} + el-radio-group( + v-model='sharedFeedFilters.wrist.requestInviteResponse' + size='mini' + @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='VIP') {{ $t('dialog.shared_feed_filters.favorite') }} + el-radio-button(label='Friends') {{ $t('dialog.shared_feed_filters.friends') }} .toggle-item span.toggle-name Friend Request - el-radio-group(v-model="sharedFeedFilters.wrist.friendRequest" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="On") {{ $t('dialog.shared_feed_filters.on') }} + el-radio-group( + v-model='sharedFeedFilters.wrist.friendRequest' + size='mini' + @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='On') {{ $t('dialog.shared_feed_filters.on') }} .toggle-item span.toggle-name New Friend - el-radio-group(v-model="sharedFeedFilters.wrist.Friend" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="On") {{ $t('dialog.shared_feed_filters.on') }} + el-radio-group(v-model='sharedFeedFilters.wrist.Friend' size='mini' @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='On') {{ $t('dialog.shared_feed_filters.on') }} .toggle-item span.toggle-name Unfriend - el-radio-group(v-model="sharedFeedFilters.wrist.Unfriend" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="On") {{ $t('dialog.shared_feed_filters.on') }} + el-radio-group(v-model='sharedFeedFilters.wrist.Unfriend' size='mini' @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='On') {{ $t('dialog.shared_feed_filters.on') }} .toggle-item span.toggle-name Display Name Change - el-radio-group(v-model="sharedFeedFilters.wrist.DisplayName" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="VIP") {{ $t('dialog.shared_feed_filters.favorite') }} - el-radio-button(label="Friends") {{ $t('dialog.shared_feed_filters.friends') }} + el-radio-group( + v-model='sharedFeedFilters.wrist.DisplayName' + size='mini' + @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='VIP') {{ $t('dialog.shared_feed_filters.favorite') }} + el-radio-button(label='Friends') {{ $t('dialog.shared_feed_filters.friends') }} .toggle-item span.toggle-name Trust Level Change - el-radio-group(v-model="sharedFeedFilters.wrist.TrustLevel" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="VIP") {{ $t('dialog.shared_feed_filters.favorite') }} - el-radio-button(label="Friends") {{ $t('dialog.shared_feed_filters.friends') }} + el-radio-group( + v-model='sharedFeedFilters.wrist.TrustLevel' + size='mini' + @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='VIP') {{ $t('dialog.shared_feed_filters.favorite') }} + el-radio-button(label='Friends') {{ $t('dialog.shared_feed_filters.friends') }} //- .toggle-item //- span.toggle-name Boop //- el-radio-group(v-model="sharedFeedFilters.wrist.boop" size="mini" @change="saveSharedFeedFilters") @@ -358,146 +504,221 @@ mixin feedFilters() //- el-radio-button(label="On") {{ $t('dialog.shared_feed_filters.on') }} .toggle-item span.toggle-name Group Change - el-tooltip(placement="top" style="margin-left:5px" content="When you've left or been kicked from a group, group name changed, group owner changed, role added/removed") + el-tooltip( + placement='top' + style='margin-left: 5px' + content='When you\'ve left or been kicked from a group, group name changed, group owner changed, role added/removed') i.el-icon-info - el-radio-group(v-model="sharedFeedFilters.wrist.groupChange" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="On") {{ $t('dialog.shared_feed_filters.on') }} + el-radio-group( + v-model='sharedFeedFilters.wrist.groupChange' + size='mini' + @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='On') {{ $t('dialog.shared_feed_filters.on') }} .toggle-item span.toggle-name Group Announcement - el-radio-group(v-model="sharedFeedFilters.wrist['group.announcement']" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="On") {{ $t('dialog.shared_feed_filters.on') }} + el-radio-group( + v-model='sharedFeedFilters.wrist["group.announcement"]' + size='mini' + @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='On') {{ $t('dialog.shared_feed_filters.on') }} .toggle-item span.toggle-name Group Join - el-tooltip(placement="top" style="margin-left:5px" content="When your request to join a group has been approved") + el-tooltip( + placement='top' + style='margin-left: 5px' + content='When your request to join a group has been approved') i.el-icon-info - el-radio-group(v-model="sharedFeedFilters.wrist['group.informative']" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="On") {{ $t('dialog.shared_feed_filters.on') }} + el-radio-group( + v-model='sharedFeedFilters.wrist["group.informative"]' + size='mini' + @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='On') {{ $t('dialog.shared_feed_filters.on') }} .toggle-item span.toggle-name Group Invite - el-tooltip(placement="top" style="margin-left:5px" content="When someone invites you to join a group") + el-tooltip( + placement='top' + style='margin-left: 5px' + content='When someone invites you to join a group') i.el-icon-info - el-radio-group(v-model="sharedFeedFilters.wrist['group.invite']" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="On") {{ $t('dialog.shared_feed_filters.on') }} + el-radio-group( + v-model='sharedFeedFilters.wrist["group.invite"]' + size='mini' + @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='On') {{ $t('dialog.shared_feed_filters.on') }} .toggle-item span.toggle-name Group Join Request - el-tooltip(placement="top" style="margin-left:5px" content="When someone requests to join a group you're a moderator for") + el-tooltip( + placement='top' + style='margin-left: 5px' + content='When someone requests to join a group you\'re a moderator for') i.el-icon-info - el-radio-group(v-model="sharedFeedFilters.wrist['group.joinRequest']" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="On") {{ $t('dialog.shared_feed_filters.on') }} + el-radio-group( + v-model='sharedFeedFilters.wrist["group.joinRequest"]' + size='mini' + @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='On') {{ $t('dialog.shared_feed_filters.on') }} .toggle-item span.toggle-name Group Transfer Request - el-radio-group(v-model="sharedFeedFilters.wrist['group.transfer']" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="On") {{ $t('dialog.shared_feed_filters.on') }} + el-radio-group( + v-model='sharedFeedFilters.wrist["group.transfer"]' + size='mini' + @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='On') {{ $t('dialog.shared_feed_filters.on') }} .toggle-item span.toggle-name Instance Queue Ready - el-radio-group(v-model="sharedFeedFilters.wrist['group.queueReady']" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="On") {{ $t('dialog.shared_feed_filters.on') }} + el-radio-group( + v-model='sharedFeedFilters.wrist["group.queueReady"]' + size='mini' + @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='On') {{ $t('dialog.shared_feed_filters.on') }} .toggle-item span.toggle-name Instance Closed - el-tooltip(placement="top" style="margin-left:5px" content="When the instance you're in has been closed preventing anyone from joining") + el-tooltip( + placement='top' + style='margin-left: 5px' + content='When the instance you\'re in has been closed preventing anyone from joining') i.el-icon-info - el-radio-group(v-model="sharedFeedFilters.wrist['instance.closed']" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="On") {{ $t('dialog.shared_feed_filters.on') }} + el-radio-group( + v-model='sharedFeedFilters.wrist["instance.closed"]' + size='mini' + @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='On') {{ $t('dialog.shared_feed_filters.on') }} .toggle-item span.toggle-name Video Play - el-tooltip(placement="top" style="margin-left:5px" content="Requires VRCX YouTube API option enabled") + el-tooltip( + placement='top' + style='margin-left: 5px' + content='Requires VRCX YouTube API option enabled') i.el-icon-warning - el-radio-group(v-model="sharedFeedFilters.wrist.VideoPlay" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="On") {{ $t('dialog.shared_feed_filters.on') }} + el-radio-group(v-model='sharedFeedFilters.wrist.VideoPlay' size='mini' @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='On') {{ $t('dialog.shared_feed_filters.on') }} .toggle-item span.toggle-name Miscellaneous Events - el-tooltip(placement="top" style="margin-left:5px" content="Misc event from VRC game log: VRC crash auto rejoin, shader keyword limit, joining instance blocked by master, error loading video, audio device changed, error joining instance, kicked from instance, VRChat failing to start OSC server, etc...") + el-tooltip( + placement='top' + style='margin-left: 5px' + content='Misc event from VRC game log: VRC crash auto rejoin, shader keyword limit, joining instance blocked by master, error loading video, audio device changed, error joining instance, kicked from instance, VRChat failing to start OSC server, etc...') i.el-icon-info - el-radio-group(v-model="sharedFeedFilters.wrist.Event" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="On") {{ $t('dialog.shared_feed_filters.on') }} + el-radio-group(v-model='sharedFeedFilters.wrist.Event' size='mini' @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='On') {{ $t('dialog.shared_feed_filters.on') }} .toggle-item span.toggle-name External App - el-radio-group(v-model="sharedFeedFilters.wrist.External" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="On") {{ $t('dialog.shared_feed_filters.on') }} + el-radio-group(v-model='sharedFeedFilters.wrist.External' size='mini' @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='On') {{ $t('dialog.shared_feed_filters.on') }} .toggle-item span.toggle-name Blocked Player Joins - el-radio-group(v-model="sharedFeedFilters.wrist.BlockedOnPlayerJoined" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="VIP") {{ $t('dialog.shared_feed_filters.favorite') }} - el-radio-button(label="Friends") {{ $t('dialog.shared_feed_filters.friends') }} - el-radio-button(label="Everyone") {{ $t('dialog.shared_feed_filters.everyone') }} + el-radio-group( + v-model='sharedFeedFilters.wrist.BlockedOnPlayerJoined' + size='mini' + @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='VIP') {{ $t('dialog.shared_feed_filters.favorite') }} + el-radio-button(label='Friends') {{ $t('dialog.shared_feed_filters.friends') }} + el-radio-button(label='Everyone') {{ $t('dialog.shared_feed_filters.everyone') }} .toggle-item span.toggle-name Blocked Player Leaves - el-radio-group(v-model="sharedFeedFilters.wrist.BlockedOnPlayerLeft" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="VIP") {{ $t('dialog.shared_feed_filters.favorite') }} - el-radio-button(label="Friends") {{ $t('dialog.shared_feed_filters.friends') }} - el-radio-button(label="Everyone") {{ $t('dialog.shared_feed_filters.everyone') }} + el-radio-group( + v-model='sharedFeedFilters.wrist.BlockedOnPlayerLeft' + size='mini' + @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='VIP') {{ $t('dialog.shared_feed_filters.favorite') }} + el-radio-button(label='Friends') {{ $t('dialog.shared_feed_filters.friends') }} + el-radio-button(label='Everyone') {{ $t('dialog.shared_feed_filters.everyone') }} .toggle-item span.toggle-name Muted Player Joins - el-radio-group(v-model="sharedFeedFilters.wrist.MutedOnPlayerJoined" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="VIP") {{ $t('dialog.shared_feed_filters.favorite') }} - el-radio-button(label="Friends") {{ $t('dialog.shared_feed_filters.friends') }} - el-radio-button(label="Everyone") {{ $t('dialog.shared_feed_filters.everyone') }} + el-radio-group( + v-model='sharedFeedFilters.wrist.MutedOnPlayerJoined' + size='mini' + @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='VIP') {{ $t('dialog.shared_feed_filters.favorite') }} + el-radio-button(label='Friends') {{ $t('dialog.shared_feed_filters.friends') }} + el-radio-button(label='Everyone') {{ $t('dialog.shared_feed_filters.everyone') }} .toggle-item span.toggle-name Muted Player Leaves - el-radio-group(v-model="sharedFeedFilters.wrist.MutedOnPlayerLeft" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="VIP") {{ $t('dialog.shared_feed_filters.favorite') }} - el-radio-button(label="Friends") {{ $t('dialog.shared_feed_filters.friends') }} - el-radio-button(label="Everyone") {{ $t('dialog.shared_feed_filters.everyone') }} + el-radio-group( + v-model='sharedFeedFilters.wrist.MutedOnPlayerLeft' + size='mini' + @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='VIP') {{ $t('dialog.shared_feed_filters.favorite') }} + el-radio-button(label='Friends') {{ $t('dialog.shared_feed_filters.friends') }} + el-radio-button(label='Everyone') {{ $t('dialog.shared_feed_filters.everyone') }} .toggle-item span.toggle-name Lobby Avatar Change - el-radio-group(v-model="sharedFeedFilters.wrist.AvatarChange" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="VIP") {{ $t('dialog.shared_feed_filters.favorite') }} - el-radio-button(label="Friends") {{ $t('dialog.shared_feed_filters.friends') }} - el-radio-button(label="Everyone") {{ $t('dialog.shared_feed_filters.everyone') }} - template(v-if="photonLoggingEnabled") + el-radio-group( + v-model='sharedFeedFilters.wrist.AvatarChange' + size='mini' + @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='VIP') {{ $t('dialog.shared_feed_filters.favorite') }} + el-radio-button(label='Friends') {{ $t('dialog.shared_feed_filters.friends') }} + el-radio-button(label='Everyone') {{ $t('dialog.shared_feed_filters.everyone') }} + template(v-if='photonLoggingEnabled') br .toggle-item span.toggle-name Photon Event Logging .toggle-item span.toggle-name Portal Spawn - el-radio-group(v-model="sharedFeedFilters.wrist.PortalSpawn" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="VIP") {{ $t('dialog.shared_feed_filters.favorite') }} - el-radio-button(label="Friends") {{ $t('dialog.shared_feed_filters.friends') }} - el-radio-button(label="Everyone") {{ $t('dialog.shared_feed_filters.everyone') }} + el-radio-group( + v-model='sharedFeedFilters.wrist.PortalSpawn' + size='mini' + @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='VIP') {{ $t('dialog.shared_feed_filters.favorite') }} + el-radio-button(label='Friends') {{ $t('dialog.shared_feed_filters.friends') }} + el-radio-button(label='Everyone') {{ $t('dialog.shared_feed_filters.everyone') }} .toggle-item span.toggle-name Lobby ChatBox Message - el-radio-group(v-model="sharedFeedFilters.wrist.ChatBoxMessage" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="VIP") {{ $t('dialog.shared_feed_filters.favorite') }} - el-radio-button(label="Friends") {{ $t('dialog.shared_feed_filters.friends') }} - el-radio-button(label="Everyone") {{ $t('dialog.shared_feed_filters.everyone') }} + el-radio-group( + v-model='sharedFeedFilters.wrist.ChatBoxMessage' + size='mini' + @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='VIP') {{ $t('dialog.shared_feed_filters.favorite') }} + el-radio-button(label='Friends') {{ $t('dialog.shared_feed_filters.friends') }} + el-radio-button(label='Everyone') {{ $t('dialog.shared_feed_filters.everyone') }} .toggle-item span.toggle-name Blocked - el-radio-group(v-model="sharedFeedFilters.wrist.Blocked" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="On") {{ $t('dialog.shared_feed_filters.on') }} + el-radio-group( + v-model='sharedFeedFilters.wrist.Blocked' + size='mini' + @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='On') {{ $t('dialog.shared_feed_filters.on') }} .toggle-item span.toggle-name Unblocked - el-radio-group(v-model="sharedFeedFilters.wrist.Unblocked" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="On") {{ $t('dialog.shared_feed_filters.on') }} + el-radio-group( + v-model='sharedFeedFilters.wrist.Unblocked' + size='mini' + @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='On') {{ $t('dialog.shared_feed_filters.on') }} .toggle-item span.toggle-name Muted - el-radio-group(v-model="sharedFeedFilters.wrist.Muted" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="On") {{ $t('dialog.shared_feed_filters.on') }} + el-radio-group(v-model='sharedFeedFilters.wrist.Muted' size='mini' @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='On') {{ $t('dialog.shared_feed_filters.on') }} .toggle-item span.toggle-name Unmuted - el-radio-group(v-model="sharedFeedFilters.wrist.Unmuted" size="mini" @change="saveSharedFeedFilters") - el-radio-button(label="Off") {{ $t('dialog.shared_feed_filters.off') }} - el-radio-button(label="On") {{ $t('dialog.shared_feed_filters.on') }} + el-radio-group( + v-model='sharedFeedFilters.wrist.Unmuted' + size='mini' + @change='saveSharedFeedFilters') + el-radio-button(label='Off') {{ $t('dialog.shared_feed_filters.off') }} + el-radio-button(label='On') {{ $t('dialog.shared_feed_filters.on') }} template(#footer) - el-button(size="small" @click="resetWristFeedFilters") {{ $t('dialog.shared_feed_filters.reset') }} - el-button(size="small" type="primary" @click="wristFeedFiltersDialog.visible = false") {{ $t('dialog.shared_feed_filters.close') }} + el-button(size='small' @click='resetWristFeedFilters') {{ $t('dialog.shared_feed_filters.reset') }} + el-button(size='small' type='primary' @click='wristFeedFiltersDialog.visible = false') {{ $t('dialog.shared_feed_filters.close') }} diff --git a/src/mixins/dialogs/groupDialog.pug b/src/mixins/dialogs/groupDialog.pug index a644c252..62c1aa3a 100644 --- a/src/mixins/dialogs/groupDialog.pug +++ b/src/mixins/dialogs/groupDialog.pug @@ -1,348 +1,744 @@ - -mixin groupDialog() - el-dialog.x-dialog.x-group-dialog(:before-close="beforeDialogClose" @mousedown.native="dialogMouseDown" @mouseup.native="dialogMouseUp" ref="groupDialog" :visible.sync="groupDialog.visible" :show-close="false" width="770px") +mixin groupDialog + el-dialog.x-dialog.x-group-dialog( + :before-close='beforeDialogClose' + @mousedown.native='dialogMouseDown' + @mouseup.native='dialogMouseUp' + ref='groupDialog' + :visible.sync='groupDialog.visible' + :show-close='false' + width='770px' + top='10vh') .group-banner-image - el-popover(placement="right" width="500px" trigger="click") - img.x-link(slot="reference" v-lazy="groupDialog.ref.bannerUrl" style="flex:none;width:100%;aspect-ratio:6/1;object-fit:cover;border-radius:4px") - img.x-link(v-lazy="groupDialog.ref.bannerUrl" style="width:854px;height:480px" @click="showFullscreenImageDialog(groupDialog.ref.bannerUrl)") - .group-body(v-loading="groupDialog.loading") - div(style="display:flex") - el-popover(placement="right" width="500px" trigger="click") - img.x-link(slot="reference" v-lazy="groupDialog.ref.iconUrl" style="flex:none;width:120px;height:120px;border-radius:12px") - img.x-link(v-lazy="groupDialog.ref.iconUrl" style="width:500px;height:500px" @click="showFullscreenImageDialog(groupDialog.ref.iconUrl)") - div(style="flex:1;display:flex;align-items:center;margin-left:15px") - .group-header(style="flex:1") - span(v-if="groupDialog.ref.ownerId === API.currentUser.id" style="margin-right:5px") 👑 - span.dialog-title(v-text="groupDialog.ref.name" style="margin-right:5px") - span.group-discriminator.x-grey(style="font-family:monospace;font-size:12px;margin-right:5px") {{ groupDialog.ref.shortCode }}.{{ groupDialog.ref.discriminator }} - el-tooltip(v-for="item in groupDialog.ref.$languages" :key="item.key" placement="top") + el-popover(placement='right' width='500px' trigger='click') + img.x-link( + slot='reference' + v-lazy='groupDialog.ref.bannerUrl' + style='flex: none; width: 100%; aspect-ratio: 6/1; object-fit: cover; border-radius: 4px') + img.x-link( + v-lazy='groupDialog.ref.bannerUrl' + style='width: 854px; height: 480px' + @click='showFullscreenImageDialog(groupDialog.ref.bannerUrl)') + .group-body(v-loading='groupDialog.loading') + div(style='display: flex') + el-popover(placement='right' width='500px' trigger='click') + img.x-link( + slot='reference' + v-lazy='groupDialog.ref.iconUrl' + style='flex: none; width: 120px; height: 120px; border-radius: 12px') + img.x-link( + v-lazy='groupDialog.ref.iconUrl' + style='width: 500px; height: 500px' + @click='showFullscreenImageDialog(groupDialog.ref.iconUrl)') + div(style='flex: 1; display: flex; align-items: center; margin-left: 15px') + .group-header(style='flex: 1') + span(v-if='groupDialog.ref.ownerId === API.currentUser.id' style='margin-right: 5px') 👑 + span.dialog-title(v-text='groupDialog.ref.name' style='margin-right: 5px') + span.group-discriminator.x-grey(style='font-family: monospace; font-size: 12px; margin-right: 5px') {{ groupDialog.ref.shortCode }}.{{ groupDialog.ref.discriminator }} + el-tooltip(v-for='item in groupDialog.ref.$languages' :key='item.key' placement='top') template(#content) span {{ item.value }} ({{ item.key }}) - span.flags(:class="languageClass(item.key)" style="display:inline-block;margin-right:5px") - div(style="margin-top:5px") - span.x-link.x-grey(v-text="groupDialog.ownerDisplayName" @click="showUserDialog(groupDialog.ref.ownerId)" style="font-family:monospace") + span.flags(:class='languageClass(item.key)' style='display: inline-block; margin-right: 5px') + div(style='margin-top: 5px') + span.x-link.x-grey( + v-text='groupDialog.ownerDisplayName' + @click='showUserDialog(groupDialog.ref.ownerId)' + style='font-family: monospace') .group-tags - el-tag(v-if="groupDialog.ref.isVerified" type="info" effect="plain" size="mini" style="margin-right:5px;margin-top:5px") {{ $t('dialog.group.tags.verified') }} + el-tag( + v-if='groupDialog.ref.isVerified' + type='info' + effect='plain' + size='mini' + style='margin-right: 5px; margin-top: 5px') {{ $t('dialog.group.tags.verified') }} - el-tag(v-if="groupDialog.ref.privacy === 'private'" type="danger" effect="plain" size="mini" style="margin-right:5px;margin-top:5px") {{ $t('dialog.group.tags.private') }} - el-tag(v-if="groupDialog.ref.privacy === 'default'" type="success" effect="plain" size="mini" style="margin-right:5px;margin-top:5px") {{ $t('dialog.group.tags.public') }} + el-tag( + v-if='groupDialog.ref.privacy === "private"' + type='danger' + effect='plain' + size='mini' + style='margin-right: 5px; margin-top: 5px') {{ $t('dialog.group.tags.private') }} + el-tag( + v-if='groupDialog.ref.privacy === "default"' + type='success' + effect='plain' + size='mini' + style='margin-right: 5px; margin-top: 5px') {{ $t('dialog.group.tags.public') }} - el-tag(v-if="groupDialog.ref.joinState === 'open'" type="success" effect="plain" size="mini" style="margin-right:5px;margin-top:5px") {{ $t('dialog.group.tags.open') }} - el-tag(v-else-if="groupDialog.ref.joinState === 'request'" type="warning" effect="plain" size="mini" style="margin-right:5px;margin-top:5px") {{ $t('dialog.group.tags.request') }} - el-tag(v-else-if="groupDialog.ref.joinState === 'invite'" type="danger" effect="plain" size="mini" style="margin-right:5px;margin-top:5px") {{ $t('dialog.group.tags.invite') }} - el-tag(v-else-if="groupDialog.ref.joinState === 'closed'" type="danger" effect="plain" size="mini" style="margin-right:5px;margin-top:5px") {{ $t('dialog.group.tags.closed') }} + el-tag( + v-if='groupDialog.ref.joinState === "open"' + type='success' + effect='plain' + size='mini' + style='margin-right: 5px; margin-top: 5px') {{ $t('dialog.group.tags.open') }} + el-tag( + v-else-if='groupDialog.ref.joinState === "request"' + type='warning' + effect='plain' + size='mini' + style='margin-right: 5px; margin-top: 5px') {{ $t('dialog.group.tags.request') }} + el-tag( + v-else-if='groupDialog.ref.joinState === "invite"' + type='danger' + effect='plain' + size='mini' + style='margin-right: 5px; margin-top: 5px') {{ $t('dialog.group.tags.invite') }} + el-tag( + v-else-if='groupDialog.ref.joinState === "closed"' + type='danger' + effect='plain' + size='mini' + style='margin-right: 5px; margin-top: 5px') {{ $t('dialog.group.tags.closed') }} - el-tag(v-if="groupDialog.inGroup" type="info" effect="plain" size="mini" style="margin-right:5px;margin-top:5px") {{ $t('dialog.group.tags.joined') }} - el-tag(v-if="groupDialog.ref.myMember && groupDialog.ref.myMember.bannedAt" type="danger" effect="plain" size="mini" style="margin-right:5px;margin-top:5px") {{ $t('dialog.group.tags.banned') }} + el-tag( + v-if='groupDialog.inGroup' + type='info' + effect='plain' + size='mini' + style='margin-right: 5px; margin-top: 5px') {{ $t('dialog.group.tags.joined') }} + el-tag( + v-if='groupDialog.ref.myMember && groupDialog.ref.myMember.bannedAt' + type='danger' + effect='plain' + size='mini' + style='margin-right: 5px; margin-top: 5px') {{ $t('dialog.group.tags.banned') }} - template(v-if="groupDialog.inGroup && groupDialog.ref.myMember") - el-tag(v-if="groupDialog.ref.myMember.visibility === 'visible'" type="info" effect="plain" size="mini" style="margin-right:5px;margin-top:5px") {{ $t('dialog.group.tags.visible') }} - el-tag(v-else-if="groupDialog.ref.myMember.visibility === 'friends'" type="info" effect="plain" size="mini" style="margin-right:5px;margin-top:5px") {{ $t('dialog.group.tags.friends') }} - el-tag(v-else-if="groupDialog.ref.myMember.visibility === 'hidden'" type="info" effect="plain" size="mini" style="margin-right:5px;margin-top:5px") {{ $t('dialog.group.tags.hidden') }} - el-tag(v-if="groupDialog.ref.myMember.isSubscribedToAnnouncements" type="info" effect="plain" size="mini" style="margin-right:5px;margin-top:5px") {{ $t('dialog.group.tags.subscribed') }} + template(v-if='groupDialog.inGroup && groupDialog.ref.myMember') + el-tag( + v-if='groupDialog.ref.myMember.visibility === "visible"' + type='info' + effect='plain' + size='mini' + style='margin-right: 5px; margin-top: 5px') {{ $t('dialog.group.tags.visible') }} + el-tag( + v-else-if='groupDialog.ref.myMember.visibility === "friends"' + type='info' + effect='plain' + size='mini' + style='margin-right: 5px; margin-top: 5px') {{ $t('dialog.group.tags.friends') }} + el-tag( + v-else-if='groupDialog.ref.myMember.visibility === "hidden"' + type='info' + effect='plain' + size='mini' + style='margin-right: 5px; margin-top: 5px') {{ $t('dialog.group.tags.hidden') }} + el-tag( + v-if='groupDialog.ref.myMember.isSubscribedToAnnouncements' + type='info' + effect='plain' + size='mini' + style='margin-right: 5px; margin-top: 5px') {{ $t('dialog.group.tags.subscribed') }} - .group-description(style="margin-top:5px") - span(v-show="groupDialog.ref.name !== groupDialog.ref.description" v-text="groupDialog.ref.description" style="font-size:12px") - div(style="flex:none;margin-left:10px") - template(v-if="groupDialog.inGroup && groupDialog.ref?.myMember") - el-tooltip(v-if="groupDialog.ref.myMember?.isRepresenting" placement="top" :content="$t('dialog.group.actions.unrepresent_tooltip')" :disabled="hideTooltips") - el-button(type="warning" icon="el-icon-star-on" circle @click="clearGroupRepresentation(groupDialog.id)" style="margin-left:5px") - el-tooltip(v-else placement="top" :content="$t('dialog.group.actions.represent_tooltip')" :disabled="hideTooltips") + .group-description(style='margin-top: 5px') + span( + v-show='groupDialog.ref.name !== groupDialog.ref.description' + v-text='groupDialog.ref.description' + style='font-size: 12px') + div(style='flex: none; margin-left: 10px') + template(v-if='groupDialog.inGroup && groupDialog.ref?.myMember') + el-tooltip( + v-if='groupDialog.ref.myMember?.isRepresenting' + placement='top' + :content='$t("dialog.group.actions.unrepresent_tooltip")' + :disabled='hideTooltips') + el-button( + type='warning' + icon='el-icon-star-on' + circle + @click='clearGroupRepresentation(groupDialog.id)' + style='margin-left: 5px') + el-tooltip( + v-else + placement='top' + :content='$t("dialog.group.actions.represent_tooltip")' + :disabled='hideTooltips') span - el-button(type="default" icon="el-icon-star-off" circle @click="setGroupRepresentation(groupDialog.id)" style="margin-left:5px" :disabled="groupDialog.ref.privacy === 'private'") - template(v-else-if="groupDialog.ref.myMember?.membershipStatus === 'requested'") - el-tooltip(placement="top" :content="$t('dialog.group.actions.cancel_join_request_tooltip')" :disabled="hideTooltips") + el-button( + type='default' + icon='el-icon-star-off' + circle + @click='setGroupRepresentation(groupDialog.id)' + style='margin-left: 5px' + :disabled='groupDialog.ref.privacy === "private"') + template(v-else-if='groupDialog.ref.myMember?.membershipStatus === "requested"') + el-tooltip( + placement='top' + :content='$t("dialog.group.actions.cancel_join_request_tooltip")' + :disabled='hideTooltips') span - el-button(type="default" icon="el-icon-close" circle @click="cancelGroupRequest(groupDialog.id)" style="margin-left:5px") - template(v-else-if="groupDialog.ref.myMember?.membershipStatus === 'invited'") - el-tooltip(placement="top" :content="$t('dialog.group.actions.pending_request_tooltip')" :disabled="hideTooltips") + el-button( + type='default' + icon='el-icon-close' + circle + @click='cancelGroupRequest(groupDialog.id)' + style='margin-left: 5px') + template(v-else-if='groupDialog.ref.myMember?.membershipStatus === "invited"') + el-tooltip( + placement='top' + :content='$t("dialog.group.actions.pending_request_tooltip")' + :disabled='hideTooltips') span - el-button(type="default" icon="el-icon-check" circle @click="joinGroup(groupDialog.id)" style="margin-left:5px") + el-button( + type='default' + icon='el-icon-check' + circle + @click='joinGroup(groupDialog.id)' + style='margin-left: 5px') template(v-else) - el-tooltip(v-if="groupDialog.ref.joinState === 'request'" placement="top" :content="$t('dialog.group.actions.request_join_tooltip')" :disabled="hideTooltips") - el-button(type="default" icon="el-icon-message" circle @click="joinGroup(groupDialog.id)" style="margin-left:5px") - el-tooltip(v-if="groupDialog.ref.joinState === 'invite'" placement="top" :content="$t('dialog.group.actions.invite_required_tooltip')" :disabled="hideTooltips") + el-tooltip( + v-if='groupDialog.ref.joinState === "request"' + placement='top' + :content='$t("dialog.group.actions.request_join_tooltip")' + :disabled='hideTooltips') + el-button( + type='default' + icon='el-icon-message' + circle + @click='joinGroup(groupDialog.id)' + style='margin-left: 5px') + el-tooltip( + v-if='groupDialog.ref.joinState === "invite"' + placement='top' + :content='$t("dialog.group.actions.invite_required_tooltip")' + :disabled='hideTooltips') span - el-button(type="default" icon="el-icon-message" disabled circle style="margin-left:5px") - el-tooltip(v-if="groupDialog.ref.joinState === 'open'" placement="top" :content="$t('dialog.group.actions.join_group_tooltip')" :disabled="hideTooltips") - el-button(type="default" icon="el-icon-check" circle @click="joinGroup(groupDialog.id)" style="margin-left:5px") - el-dropdown(trigger="click" @command="groupDialogCommand" size="small" style="margin-left:5px") - el-button(:type="groupDialog.ref.membershipStatus === 'userblocked' ? 'danger' : 'default'" icon="el-icon-more" circle) - el-dropdown-menu(#default="dropdown") - el-dropdown-item(icon="el-icon-refresh" command="Refresh") {{ $t('dialog.group.actions.refresh') }} - el-dropdown-item(icon="el-icon-share" command="Share") {{ $t('dialog.group.actions.share') }} - template(v-if="groupDialog.inGroup") - template(v-if="groupDialog.ref.myMember") - el-dropdown-item(v-if="groupDialog.ref.myMember.isSubscribedToAnnouncements" icon="el-icon-close" command="Unsubscribe To Announcements" divided) {{ $t('dialog.group.actions.unsubscribe') }} - el-dropdown-item(v-else icon="el-icon-check" command="Subscribe To Announcements" divided) {{ $t('dialog.group.actions.subscribe') }} - el-dropdown-item(v-if="hasGroupPermission(groupDialog.ref, 'group-invites-manage')" icon="el-icon-message" command="Invite To Group") {{ $t('dialog.group.actions.invite_to_group') }} - template(v-if="hasGroupPermission(groupDialog.ref, 'group-announcement-manage')") - el-dropdown-item(icon="el-icon-tickets" command="Create Post") {{ $t('dialog.group.actions.create_post') }} + el-button( + type='default' + icon='el-icon-message' + disabled + circle + style='margin-left: 5px') + el-tooltip( + v-if='groupDialog.ref.joinState === "open"' + placement='top' + :content='$t("dialog.group.actions.join_group_tooltip")' + :disabled='hideTooltips') + el-button( + type='default' + icon='el-icon-check' + circle + @click='joinGroup(groupDialog.id)' + style='margin-left: 5px') + el-dropdown(trigger='click' @command='groupDialogCommand' size='small' style='margin-left: 5px') + el-button( + :type='groupDialog.ref.membershipStatus === "userblocked" ? "danger" : "default"' + icon='el-icon-more' + circle) + el-dropdown-menu(#default='dropdown') + el-dropdown-item(icon='el-icon-refresh' command='Refresh') {{ $t('dialog.group.actions.refresh') }} + el-dropdown-item(icon='el-icon-share' command='Share') {{ $t('dialog.group.actions.share') }} + template(v-if='groupDialog.inGroup') + template(v-if='groupDialog.ref.myMember') + el-dropdown-item( + v-if='groupDialog.ref.myMember.isSubscribedToAnnouncements' + icon='el-icon-close' + command='Unsubscribe To Announcements' + divided) {{ $t('dialog.group.actions.unsubscribe') }} + el-dropdown-item( + v-else + icon='el-icon-check' + command='Subscribe To Announcements' + divided) {{ $t('dialog.group.actions.subscribe') }} + el-dropdown-item( + v-if='hasGroupPermission(groupDialog.ref, "group-invites-manage")' + icon='el-icon-message' + command='Invite To Group') {{ $t('dialog.group.actions.invite_to_group') }} + template(v-if='hasGroupPermission(groupDialog.ref, "group-announcement-manage")') + el-dropdown-item(icon='el-icon-tickets' command='Create Post') {{ $t('dialog.group.actions.create_post') }} //- template(v-if="hasGroupPermission(groupDialog.ref, 'group-members-manage')") - el-dropdown-item(icon="el-icon-s-operation" command="Moderation Tools") {{ $t('dialog.group.actions.moderation_tools') }} - template(v-if="groupDialog.ref.myMember && groupDialog.ref.privacy === 'default'") - el-dropdown-item(icon="el-icon-view" command="Visibility Everyone" divided) #[i.el-icon-check(v-if="groupDialog.ref.myMember.visibility === 'visible'")] {{ $t('dialog.group.actions.visibility_everyone') }} - el-dropdown-item(icon="el-icon-view" command="Visibility Friends") #[i.el-icon-check(v-if="groupDialog.ref.myMember.visibility === 'friends'")] {{ $t('dialog.group.actions.visibility_friends') }} - el-dropdown-item(icon="el-icon-view" command="Visibility Hidden") #[i.el-icon-check(v-if="groupDialog.ref.myMember.visibility === 'hidden'")] {{ $t('dialog.group.actions.visibility_hidden') }} - el-dropdown-item(icon="el-icon-delete" command="Leave Group" style="color:#F56C6C" divided) {{ $t('dialog.group.actions.leave') }} + el-dropdown-item(icon='el-icon-s-operation' command='Moderation Tools') {{ $t('dialog.group.actions.moderation_tools') }} + template(v-if='groupDialog.ref.myMember && groupDialog.ref.privacy === "default"') + el-dropdown-item(icon='el-icon-view' command='Visibility Everyone' divided) #[i.el-icon-check(v-if='groupDialog.ref.myMember.visibility === "visible"')] {{ $t('dialog.group.actions.visibility_everyone') }} + el-dropdown-item(icon='el-icon-view' command='Visibility Friends') #[i.el-icon-check(v-if='groupDialog.ref.myMember.visibility === "friends"')] {{ $t('dialog.group.actions.visibility_friends') }} + el-dropdown-item(icon='el-icon-view' command='Visibility Hidden') #[i.el-icon-check(v-if='groupDialog.ref.myMember.visibility === "hidden"')] {{ $t('dialog.group.actions.visibility_hidden') }} + el-dropdown-item( + icon='el-icon-delete' + command='Leave Group' + style='color: #f56c6c' + divided) {{ $t('dialog.group.actions.leave') }} template(v-else) - el-dropdown-item(v-if="groupDialog.ref.membershipStatus === 'userblocked'" icon="el-icon-circle-check" command="Unblock Group" style="color:#F56C6C" divided) {{ $t('dialog.group.actions.unblock') }} - el-dropdown-item(v-else icon="el-icon-circle-close" command="Block Group" divided) {{ $t('dialog.group.actions.block') }} - el-tabs(ref="groupDialogTabs" @tab-click="groupDialogTabClick") - el-tab-pane(:label="$t('dialog.group.info.header')") + el-dropdown-item( + v-if='groupDialog.ref.membershipStatus === "userblocked"' + icon='el-icon-circle-check' + command='Unblock Group' + style='color: #f56c6c' + divided) {{ $t('dialog.group.actions.unblock') }} + el-dropdown-item(v-else icon='el-icon-circle-close' command='Block Group' divided) {{ $t('dialog.group.actions.block') }} + el-tabs(ref='groupDialogTabs' @tab-click='groupDialogTabClick') + el-tab-pane(:label='$t("dialog.group.info.header")') .group-banner-image-info - el-popover(placement="right" width="500px" trigger="click") - img.x-link(slot="reference" v-lazy="groupDialog.ref.bannerUrl" style="flex:none;width:100%;aspect-ratio:6/1;object-fit:cover;border-radius:4px") - img.x-link(v-lazy="groupDialog.ref.bannerUrl" style="width:854px;height:480px" @click="showFullscreenImageDialog(groupDialog.ref.bannerUrl)") - .x-friend-list(style="max-height:none") - span(v-if="groupDialog.instances.length" style="font-size:12px;font-weight:bold;margin:5px") {{ $t('dialog.group.info.instances') }} - div(v-for="room in groupDialog.instances" :key="room.tag" style="width:100%") - div(style="margin:5px 0") - location(:location="room.tag") - el-tooltip(placement="top" content="Invite yourself" :disabled="hideTooltips") - invite-yourself(:location="room.tag" style="margin-left:5px") - el-tooltip(placement="top" content="Refresh player count" :disabled="hideTooltips") - el-button(@click="refreshInstancePlayerCount(room.tag)" size="mini" icon="el-icon-refresh" style="margin-left:5px" circle) - last-join(:location="room.tag" :currentlocation="lastLocation.location") - instance-info(:location="room.tag" :instance="room.ref" :friendcount="room.friendCount" :updateelement="updateInstanceInfo") - .x-friend-list(style="margin:10px 0;padding:0;max-height:unset" v-if="room.users.length") - .x-friend-item(v-for="user in room.users" :key="user.id" @click="showUserDialog(user.id)" class="x-friend-item-border") - .avatar(:class="userStatusClass(user)") - img(v-lazy="userImage(user)") + el-popover(placement='right' width='500px' trigger='click') + img.x-link( + slot='reference' + v-lazy='groupDialog.ref.bannerUrl' + style='flex: none; width: 100%; aspect-ratio: 6/1; object-fit: cover; border-radius: 4px') + img.x-link( + v-lazy='groupDialog.ref.bannerUrl' + style='width: 854px; height: 480px' + @click='showFullscreenImageDialog(groupDialog.ref.bannerUrl)') + .x-friend-list(style='max-height: none') + span(v-if='groupDialog.instances.length' style='font-size: 12px; font-weight: bold; margin: 5px') {{ $t('dialog.group.info.instances') }} + div(v-for='room in groupDialog.instances' :key='room.tag' style='width: 100%') + div(style='margin: 5px 0') + location(:location='room.tag') + el-tooltip(placement='top' content='Invite yourself' :disabled='hideTooltips') + invite-yourself(:location='room.tag' style='margin-left: 5px') + el-tooltip(placement='top' content='Refresh player count' :disabled='hideTooltips') + el-button( + @click='refreshInstancePlayerCount(room.tag)' + size='mini' + icon='el-icon-refresh' + style='margin-left: 5px' + circle) + last-join(:location='room.tag' :currentlocation='lastLocation.location') + instance-info( + :location='room.tag' + :instance='room.ref' + :friendcount='room.friendCount' + :updateelement='updateInstanceInfo') + .x-friend-list(style='margin: 10px 0; padding: 0; max-height: unset' v-if='room.users.length') + .x-friend-item.x-friend-item-border( + v-for='user in room.users' + :key='user.id' + @click='showUserDialog(user.id)') + .avatar(:class='userStatusClass(user)') + img(v-lazy='userImage(user)') .detail - span.name(v-text="user.displayName" :style="{'color':user.$userColour}") - span.extra(v-if="user.location === 'traveling'") - i.el-icon-loading(style="margin-right:5px") - timer(:epoch="user.$travelingToTime") + span.name(v-text='user.displayName' :style='{ color: user.$userColour }') + span.extra(v-if='user.location === "traveling"') + i.el-icon-loading(style='margin-right: 5px') + timer(:epoch='user.$travelingToTime') span.extra(v-else) - timer(:epoch="user.$location_at") - .x-friend-item(style="width:100%;cursor:default") + timer(:epoch='user.$location_at') + .x-friend-item(style='width: 100%; cursor: default') .detail span.name {{ $t('dialog.group.info.announcement') }} - span(style="display:block" v-text="groupDialog.announcement.title") - div(v-if="groupDialog.announcement.imageUrl" style="display:inline-block;margin-right:5px") - el-popover(placement="right" width="500px" trigger="click") - img.x-link(slot="reference" v-lazy="groupDialog.announcement.imageUrl" style="flex:none;width:60px;height:60px;border-radius:4px;object-fit:cover") - img.x-link(v-lazy="groupDialog.announcement.imageUrl" style="height:500px" @click="showFullscreenImageDialog(groupDialog.announcement.imageUrl)") - pre.extra(style="display:inline-block;vertical-align:top;font-family:inherit;font-size:12px;white-space:pre-wrap;margin:0") {{ groupDialog.announcement.text || '-' }} + span(style='display: block' v-text='groupDialog.announcement.title') + div( + v-if='groupDialog.announcement.imageUrl' + style='display: inline-block; margin-right: 5px') + el-popover(placement='right' width='500px' trigger='click') + img.x-link( + slot='reference' + v-lazy='groupDialog.announcement.imageUrl' + style='flex: none; width: 60px; height: 60px; border-radius: 4px; object-fit: cover') + img.x-link( + v-lazy='groupDialog.announcement.imageUrl' + style='height: 500px' + @click='showFullscreenImageDialog(groupDialog.announcement.imageUrl)') + pre.extra( + style='display: inline-block; vertical-align: top; font-family: inherit; font-size: 12px; white-space: pre-wrap; margin: 0') {{ groupDialog.announcement.text || '-' }} br - .extra(v-if="groupDialog.announcement.id" style="float:right;margin-left:5px") - el-tooltip(v-if="groupDialog.announcement.roleIds.length" placement="top") + .extra(v-if='groupDialog.announcement.id' style='float: right; margin-left: 5px') + el-tooltip(v-if='groupDialog.announcement.roleIds.length' placement='top') template(#content) span {{ $t('dialog.group.posts.visibility') }} br - template(v-for="roleId in groupDialog.announcement.roleIds" :key="roleId") - span(v-for="(role, rIndex) in groupDialog.ref.roles" :key="rIndex" v-if="role.id === roleId" v-text="role.name") - span(v-if="groupDialog.announcement.roleIds.indexOf(roleId) < groupDialog.announcement.roleIds.length - 1") ,  - i.el-icon-view(style="margin-right:5px") - display-name(:userid="groupDialog.announcement.authorId" style="margin-right:5px") - span(v-if="groupDialog.announcement.editorId" style="margin-right:5px") ({{ $t('dialog.group.posts.edited_by') }} #[display-name(:userid="groupDialog.announcement.editorId")]) - el-tooltip(placement="bottom") + template(v-for='roleId in groupDialog.announcement.roleIds' :key='roleId') + span( + v-for='(role, rIndex) in groupDialog.ref.roles' + :key='rIndex' + v-if='role.id === roleId' + v-text='role.name') + span( + v-if='groupDialog.announcement.roleIds.indexOf(roleId) < groupDialog.announcement.roleIds.length - 1') ,  + i.el-icon-view(style='margin-right: 5px') + display-name(:userid='groupDialog.announcement.authorId' style='margin-right: 5px') + span(v-if='groupDialog.announcement.editorId' style='margin-right: 5px') ({{ $t('dialog.group.posts.edited_by') }} #[display-name(:userid='groupDialog.announcement.editorId')]) + el-tooltip(placement='bottom') template(#content) span {{ $t('dialog.group.posts.created_at') }} {{ groupDialog.announcement.createdAt | formatDate('long') }} - template(v-if="groupDialog.announcement.updatedAt !== groupDialog.announcement.createdAt") + template( + v-if='groupDialog.announcement.updatedAt !== groupDialog.announcement.createdAt') br span {{ $t('dialog.group.posts.edited_at') }} {{ groupDialog.announcement.updatedAt | formatDate('long') }} - timer(:epoch="Date.parse(groupDialog.announcement.updatedAt)") - template(v-if="hasGroupPermission(groupDialog.ref, 'group-announcement-manage')") - el-tooltip(placement="top" :content="$t('dialog.group.posts.edit_tooltip')" :disabled="hideTooltips") - el-button(type="text" icon="el-icon-edit" size="mini" style="margin-left:5px" @click="showGroupPostEditDialog(groupDialog.id, groupDialog.announcement)") - el-tooltip(placement="top" :content="$t('dialog.group.posts.delete_tooltip')" :disabled="hideTooltips") - el-button(type="text" icon="el-icon-delete" size="mini" style="margin-left:5px" @click="confirmDeleteGroupPost(groupDialog.announcement)") - .x-friend-item(style="width:100%;cursor:default") + timer(:epoch='Date.parse(groupDialog.announcement.updatedAt)') + template(v-if='hasGroupPermission(groupDialog.ref, "group-announcement-manage")') + el-tooltip( + placement='top' + :content='$t("dialog.group.posts.edit_tooltip")' + :disabled='hideTooltips') + el-button( + type='text' + icon='el-icon-edit' + size='mini' + style='margin-left: 5px' + @click='showGroupPostEditDialog(groupDialog.id, groupDialog.announcement)') + el-tooltip( + placement='top' + :content='$t("dialog.group.posts.delete_tooltip")' + :disabled='hideTooltips') + el-button( + type='text' + icon='el-icon-delete' + size='mini' + style='margin-left: 5px' + @click='confirmDeleteGroupPost(groupDialog.announcement)') + .x-friend-item(style='width: 100%; cursor: default') .detail span.name {{ $t('dialog.group.info.rules') }} - pre.extra(style="font-family:inherit;font-size:12px;white-space:pre-wrap;margin:0 0.5em 0 0") {{ groupDialog.ref.rules || '-' }} - .x-friend-item(style="cursor:default") + pre.extra( + style='font-family: inherit; font-size: 12px; white-space: pre-wrap; margin: 0 0.5em 0 0') {{ groupDialog.ref.rules || '-' }} + .x-friend-item(style='cursor: default') .detail span.name {{ $t('dialog.group.info.members') }} .extra {{ groupDialog.ref.memberCount }} ({{ groupDialog.ref.onlineMemberCount }}) - .x-friend-item(style="cursor:default") + .x-friend-item(style='cursor: default') .detail span.name {{ $t('dialog.group.info.created_at') }} span.extra {{ groupDialog.ref.createdAt | formatDate('long') }} - .x-friend-item(style="cursor:default") + .x-friend-item(style='cursor: default') .detail span.name {{ $t('dialog.group.info.links') }} - div(v-if="groupDialog.ref.links && groupDialog.ref.links.length > 0" style="margin-top:5px") - el-tooltip(v-if="link" v-for="(link, index) in groupDialog.ref.links" :key="index") + div( + v-if='groupDialog.ref.links && groupDialog.ref.links.length > 0' + style='margin-top: 5px') + el-tooltip(v-if='link' v-for='(link, index) in groupDialog.ref.links' :key='index') template(#content) - span(v-text="link") - img(:src="getFaviconUrl(link)" style="width:16px;height:16px;vertical-align:middle;margin-right:5px;cursor:pointer" @click.stop="openExternalLink(link)") + span(v-text='link') + img( + :src='getFaviconUrl(link)' + style='width: 16px; height: 16px; vertical-align: middle; margin-right: 5px; cursor: pointer' + @click.stop='openExternalLink(link)') .extra(v-else) - - .x-friend-item(style="width:350px;cursor:default") + .x-friend-item(style='width: 350px; cursor: default') .detail span.name {{ $t('dialog.group.info.url') }} span.extra {{ groupDialog.ref.$url }} - el-tooltip(placement="top" :content="$t('dialog.group.info.url_tooltip')" :disabled="hideTooltips") - el-button(type="default" @click="copyGroupUrl(groupDialog.ref.$url)" size="mini" icon="el-icon-s-order" circle style="margin-left:5px") - .x-friend-item(style="width:350px;cursor:default") + el-tooltip( + placement='top' + :content='$t("dialog.group.info.url_tooltip")' + :disabled='hideTooltips') + el-button( + type='default' + @click='copyGroupUrl(groupDialog.ref.$url)' + size='mini' + icon='el-icon-s-order' + circle + style='margin-left: 5px') + .x-friend-item(style='width: 350px; cursor: default') .detail span.name {{ $t('dialog.group.info.id') }} span.extra {{ groupDialog.id }} - el-tooltip(placement="top" :content="$t('dialog.group.info.id_tooltip')" :disabled="hideTooltips") - el-button(type="default" @click="copyGroupId(groupDialog.id)" size="mini" icon="el-icon-s-order" circle style="margin-left:5px") - div(v-if="groupDialog.ref.membershipStatus === 'member'" style="width:100%;margin-top:10px;border-top:1px solid #e4e7ed14") - div(style="width:100%;display:flex;margin-top:10px") - .x-friend-item(style="cursor:default") + el-tooltip( + placement='top' + :content='$t("dialog.group.info.id_tooltip")' + :disabled='hideTooltips') + el-button( + type='default' + @click='copyGroupId(groupDialog.id)' + size='mini' + icon='el-icon-s-order' + circle + style='margin-left: 5px') + div( + v-if='groupDialog.ref.membershipStatus === "member"' + style='width: 100%; margin-top: 10px; border-top: 1px solid #e4e7ed14') + div(style='width: 100%; display: flex; margin-top: 10px') + .x-friend-item(style='cursor: default') .detail span.name {{ $t('dialog.group.info.joined_at') }} span.extra {{ groupDialog.ref.myMember.joinedAt | formatDate('long') }} - .x-friend-item(style="cursor:default") + .x-friend-item(style='cursor: default') .detail span.name {{ $t('dialog.group.info.roles') }} - span.extra(v-if="groupDialog.memberRoles.length === 0") - + span.extra(v-if='groupDialog.memberRoles.length === 0') - span.extra(v-else) - template(v-for="(role, rIndex) in groupDialog.memberRoles" :key="rIndex") - el-tooltip(placement="top") + template(v-for='(role, rIndex) in groupDialog.memberRoles' :key='rIndex') + el-tooltip(placement='top') template(#content) span {{ $t('dialog.group.info.role') }} {{ role.name }} br span {{ $t('dialog.group.info.role_description') }} {{ role.description }} br - span(v-if="role.updatedAt") {{ $t('dialog.group.info.role_updated_at') }} {{ role.updatedAt | formatDate('long') }} + span(v-if='role.updatedAt') {{ $t('dialog.group.info.role_updated_at') }} {{ role.updatedAt | formatDate('long') }} span(v-else) {{ $t('dialog.group.info.role_created_at') }} {{ role.createdAt | formatDate('long') }} br span {{ $t('dialog.group.info.role_permissions') }} br - template(v-for="(permission, pIndex) in role.permissions" :key="pIndex") + template( + v-for='(permission, pIndex) in role.permissions' + :key='pIndex') span {{ permission }} br span {{ role.name }}{{ rIndex < groupDialog.memberRoles.length - 1 ? ', ' : '' }} - el-tab-pane(:label="$t('dialog.group.posts.header')") - template(v-if="groupDialog.visible") - span(style="margin-right:10px") {{ $t('dialog.group.posts.posts_count') }} {{ groupDialog.posts.length }} - el-input(v-model="groupDialog.postsSearch" @input="updateGroupPostSearch" clearable size="mini" :placeholder="$t('dialog.group.posts.search_placeholder')" style="width:89%;margin-bottom:10px") + el-tab-pane(:label='$t("dialog.group.posts.header")') + template(v-if='groupDialog.visible') + span(style='margin-right: 10px') {{ $t('dialog.group.posts.posts_count') }} {{ groupDialog.posts.length }} + el-input( + v-model='groupDialog.postsSearch' + @input='updateGroupPostSearch' + clearable + size='mini' + :placeholder='$t("dialog.group.posts.search_placeholder")' + style='width: 89%; margin-bottom: 10px') .x-friend-list - .x-friend-item(v-for="post in groupDialog.postsFiltered" :key="post.id" style="width:100%;cursor:default") + .x-friend-item( + v-for='post in groupDialog.postsFiltered' + :key='post.id' + style='width: 100%; cursor: default') .detail - span(style="display:block" v-text="post.title") - div(v-if="post.imageUrl" style="display:inline-block;margin-right:5px") - el-popover(placement="right" width="500px" trigger="click") - img.x-link(slot="reference" v-lazy="post.imageUrl" style="flex:none;width:60px;height:60px;border-radius:4px;object-fit:cover") - img.x-link(v-lazy="post.imageUrl" style="height:500px" @click="showFullscreenImageDialog(post.imageUrl)") - pre.extra(style="display:inline-block;vertical-align:top;font-family:inherit;font-size:12px;white-space:pre-wrap;margin:0") {{ post.text || '-' }} + span(style='display: block' v-text='post.title') + div(v-if='post.imageUrl' style='display: inline-block; margin-right: 5px') + el-popover(placement='right' width='500px' trigger='click') + img.x-link( + slot='reference' + v-lazy='post.imageUrl' + style='flex: none; width: 60px; height: 60px; border-radius: 4px; object-fit: cover') + img.x-link( + v-lazy='post.imageUrl' + style='height: 500px' + @click='showFullscreenImageDialog(post.imageUrl)') + pre.extra( + style='display: inline-block; vertical-align: top; font-family: inherit; font-size: 12px; white-space: pre-wrap; margin: 0') {{ post.text || '-' }} br - .extra(v-if="post.authorId" style="float:right;margin-left:5px") - el-tooltip(v-if="post.roleIds.length" placement="top") + .extra(v-if='post.authorId' style='float: right; margin-left: 5px') + el-tooltip(v-if='post.roleIds.length' placement='top') template(#content) span {{ $t('dialog.group.posts.visibility') }} br - template(v-for="roleId in post.roleIds" :key="roleId") - span(v-for="(role, rIndex) in groupDialog.ref.roles" :key="rIndex" v-if="role.id === roleId" v-text="role.name") - span(v-if="post.roleIds.indexOf(roleId) < post.roleIds.length - 1") ,  - i.el-icon-view(style="margin-right:5px") - display-name(:userid="post.authorId" style="margin-right:5px") - span(v-if="post.editorId" style="margin-right:5px") ({{ $t('dialog.group.posts.edited_by') }} #[display-name(:userid="post.editorId")]) - el-tooltip(placement="bottom") + template(v-for='roleId in post.roleIds' :key='roleId') + span( + v-for='(role, rIndex) in groupDialog.ref.roles' + :key='rIndex' + v-if='role.id === roleId' + v-text='role.name') + span(v-if='post.roleIds.indexOf(roleId) < post.roleIds.length - 1') ,  + i.el-icon-view(style='margin-right: 5px') + display-name(:userid='post.authorId' style='margin-right: 5px') + span(v-if='post.editorId' style='margin-right: 5px') ({{ $t('dialog.group.posts.edited_by') }} #[display-name(:userid='post.editorId')]) + el-tooltip(placement='bottom') template(#content) span {{ $t('dialog.group.posts.created_at') }} {{ post.createdAt | formatDate('long') }} - template(v-if="post.updatedAt !== post.createdAt") + template(v-if='post.updatedAt !== post.createdAt') br span {{ $t('dialog.group.posts.edited_at') }} {{ post.updatedAt | formatDate('long') }} - timer(:epoch="Date.parse(post.updatedAt)") - template(v-if="hasGroupPermission(groupDialog.ref, 'group-announcement-manage')") - el-tooltip(placement="top" :content="$t('dialog.group.posts.edit_tooltip')" :disabled="hideTooltips") - el-button(type="text" icon="el-icon-edit" size="mini" style="margin-left:5px" @click="showGroupPostEditDialog(groupDialog.id, post)") - el-tooltip(placement="top" :content="$t('dialog.group.posts.delete_tooltip')" :disabled="hideTooltips") - el-button(type="text" icon="el-icon-delete" size="mini" style="margin-left:5px" @click="confirmDeleteGroupPost(post)") - el-tab-pane(:label="$t('dialog.group.members.header')") - template(v-if="groupDialog.visible") - span(v-if="hasGroupPermission(groupDialog.ref, 'group-members-viewall')" style="font-weight:bold;font-size:16px") {{ $t('dialog.group.members.all_members') }} - span(v-else style="font-weight:bold;font-size:16px") {{ $t('dialog.group.members.friends_only') }} - div(style="margin-top:10px") - el-button(type="default" @click="loadAllGroupMembers" size="mini" icon="el-icon-refresh" :loading="isGroupMembersLoading" circle) - el-button(type="default" @click="downloadAndSaveJson(`${groupDialog.id}_members`, groupDialog.members)" size="mini" icon="el-icon-download" circle style="margin-left:5px") - span(v-if="groupDialog.memberSearch.length" style="font-size:14px;margin-left:5px;margin-right:5px") {{ groupDialog.memberSearchResults.length }}/{{ groupDialog.ref.memberCount }} - span(v-else style="font-size:14px;margin-left:5px;margin-right:5px") {{ groupDialog.members.length }}/{{ groupDialog.ref.memberCount }} - div(v-if="hasGroupPermission(groupDialog.ref, 'group-members-manage')" style="float:right") - span(style="margin-right:5px") {{ $t('dialog.group.members.sort_by') }} - el-dropdown(@click.native.stop trigger="click" size="small" style="margin-right:5px" :disabled="isGroupMembersLoading || groupDialog.memberSearch.length") - el-button(size="mini") + timer(:epoch='Date.parse(post.updatedAt)') + template( + v-if='hasGroupPermission(groupDialog.ref, "group-announcement-manage")') + el-tooltip( + placement='top' + :content='$t("dialog.group.posts.edit_tooltip")' + :disabled='hideTooltips') + el-button( + type='text' + icon='el-icon-edit' + size='mini' + style='margin-left: 5px' + @click='showGroupPostEditDialog(groupDialog.id, post)') + el-tooltip( + placement='top' + :content='$t("dialog.group.posts.delete_tooltip")' + :disabled='hideTooltips') + el-button( + type='text' + icon='el-icon-delete' + size='mini' + style='margin-left: 5px' + @click='confirmDeleteGroupPost(post)') + el-tab-pane(:label='$t("dialog.group.members.header")') + template(v-if='groupDialog.visible') + span( + v-if='hasGroupPermission(groupDialog.ref, "group-members-viewall")' + style='font-weight: bold; font-size: 16px') {{ $t('dialog.group.members.all_members') }} + span(v-else style='font-weight: bold; font-size: 16px') {{ $t('dialog.group.members.friends_only') }} + div(style='margin-top: 10px') + el-button( + type='default' + @click='loadAllGroupMembers' + size='mini' + icon='el-icon-refresh' + :loading='isGroupMembersLoading' + circle) + el-button( + type='default' + @click='downloadAndSaveJson(`${groupDialog.id}_members`, groupDialog.members)' + size='mini' + icon='el-icon-download' + circle + style='margin-left: 5px') + span( + v-if='groupDialog.memberSearch.length' + style='font-size: 14px; margin-left: 5px; margin-right: 5px') {{ groupDialog.memberSearchResults.length }}/{{ groupDialog.ref.memberCount }} + span(v-else style='font-size: 14px; margin-left: 5px; margin-right: 5px') {{ groupDialog.members.length }}/{{ groupDialog.ref.memberCount }} + div(v-if='hasGroupPermission(groupDialog.ref, "group-members-manage")' style='float: right') + span(style='margin-right: 5px') {{ $t('dialog.group.members.sort_by') }} + el-dropdown( + @click.native.stop + trigger='click' + size='small' + style='margin-right: 5px' + :disabled='isGroupMembersLoading || groupDialog.memberSearch.length') + el-button(size='mini') span {{ groupDialog.memberSortOrder.name }} #[i.el-icon-arrow-down.el-icon--right] - el-dropdown-menu(#default="dropdown") - el-dropdown-item(v-for="(item) in groupDialogSortingOptions" v-text="item.name" @click.native="setGroupMemberSortOrder(item)") - span(style="margin-right:5px") {{ $t('dialog.group.members.filter') }} - el-dropdown(@click.native.stop trigger="click" size="small" style="margin-right:5px" :disabled="isGroupMembersLoading || groupDialog.memberSearch.length") - el-button(size="mini") + el-dropdown-menu(#default='dropdown') + el-dropdown-item( + v-for='item in groupDialogSortingOptions' + v-text='item.name' + @click.native='setGroupMemberSortOrder(item)') + span(style='margin-right: 5px') {{ $t('dialog.group.members.filter') }} + el-dropdown( + @click.native.stop + trigger='click' + size='small' + style='margin-right: 5px' + :disabled='isGroupMembersLoading || groupDialog.memberSearch.length') + el-button(size='mini') span {{ groupDialog.memberFilter.name }} #[i.el-icon-arrow-down.el-icon--right] - el-dropdown-menu(#default="dropdown") - el-dropdown-item(v-for="(item) in groupDialogFilterOptions" v-text="item.name" @click.native="setGroupMemberFilter(item)") - el-dropdown-item(v-for="(item) in groupDialog.ref.roles" v-if="!item.defaultRole" v-text="item.name" @click.native="setGroupMemberFilter(item)") - el-input(v-model="groupDialog.memberSearch" @input="groupMembersSearch" clearable size="mini" :placeholder="$t('dialog.group.members.search')" style="margin-top:10px;margin-bottom:10px") - .x-friend-list(v-if="groupDialog.memberSearch.length" v-loading="isGroupMembersLoading" style="margin-top:10px;overflow:auto;max-height:250px;min-width:130px") - .x-friend-item(v-for="user in groupDialog.memberSearchResults" :key="user.id" @click="showUserDialog(user.userId)" class="x-friend-item-border") + el-dropdown-menu(#default='dropdown') + el-dropdown-item( + v-for='item in groupDialogFilterOptions' + v-text='item.name' + @click.native='setGroupMemberFilter(item)') + el-dropdown-item( + v-for='item in groupDialog.ref.roles' + v-if='!item.defaultRole' + v-text='item.name' + @click.native='setGroupMemberFilter(item)') + el-input( + v-model='groupDialog.memberSearch' + @input='groupMembersSearch' + clearable + size='mini' + :placeholder='$t("dialog.group.members.search")' + style='margin-top: 10px; margin-bottom: 10px') + .x-friend-list( + v-if='groupDialog.memberSearch.length' + v-loading='isGroupMembersLoading' + style='margin-top: 10px; overflow: auto; max-height: 250px; min-width: 130px') + .x-friend-item.x-friend-item-border( + v-for='user in groupDialog.memberSearchResults' + :key='user.id' + @click='showUserDialog(user.userId)') .avatar - img(v-lazy="userImage(user.user)") + img(v-lazy='userImage(user.user)') .detail - span.name(v-text="user.user.displayName" :style="{'color':user.user.$userColour}") + span.name(v-text='user.user.displayName' :style='{ color: user.user.$userColour }') span.extra - template(v-if="hasGroupPermission(groupDialog.ref, 'group-members-manage')") - el-tooltip(v-if="user.isRepresenting" placement="top" :content="$t('dialog.group.members.representing')") - i.el-icon-collection-tag(style="margin-right:5px") - el-tooltip(v-if="user.visibility !== 'visible'" placement="top") + template(v-if='hasGroupPermission(groupDialog.ref, "group-members-manage")') + el-tooltip( + v-if='user.isRepresenting' + placement='top' + :content='$t("dialog.group.members.representing")') + i.el-icon-collection-tag(style='margin-right: 5px') + el-tooltip(v-if='user.visibility !== "visible"' placement='top') template(#content) span {{ $t('dialog.group.members.visibility') }} {{ user.visibility }} - i.el-icon-view(style="margin-right:5px") - el-tooltip(v-if="!user.isSubscribedToAnnouncements" placement="top" :content="$t('dialog.group.members.unsubscribed_announcements')") - i.el-icon-chat-line-square(style="margin-right:5px") - el-tooltip(v-if="user.managerNotes" placement="top") + i.el-icon-view(style='margin-right: 5px') + el-tooltip( + v-if='!user.isSubscribedToAnnouncements' + placement='top' + :content='$t("dialog.group.members.unsubscribed_announcements")') + i.el-icon-chat-line-square(style='margin-right: 5px') + el-tooltip(v-if='user.managerNotes' placement='top') template(#content) span {{ $t('dialog.group.members.manager_notes') }} br span {{ user.managerNotes }} - i.el-icon-edit-outline(style="margin-right:5px") - template(v-for="roleId in user.roleIds" :key="roleId") - span(v-for="(role, rIndex) in groupDialog.ref.roles" :key="rIndex" v-if="role.id === roleId" v-text="role.name") - span(v-if="user.roleIds.indexOf(roleId) < user.roleIds.length - 1") ,  - ul.infinite-list.x-friend-list(v-else-if="groupDialog.members.length > 0" v-infinite-scroll="loadMoreGroupMembers" style="margin-top:10px;overflow:auto;max-height:250px;min-width:130px") - li.infinite-list-item.x-friend-item(v-for="user in groupDialog.members" :key="user.id" @click="showUserDialog(user.userId)" class="x-friend-item-border") + i.el-icon-edit-outline(style='margin-right: 5px') + template(v-for='roleId in user.roleIds' :key='roleId') + span( + v-for='(role, rIndex) in groupDialog.ref.roles' + :key='rIndex' + v-if='role.id === roleId' + v-text='role.name') + span(v-if='user.roleIds.indexOf(roleId) < user.roleIds.length - 1') ,  + ul.infinite-list.x-friend-list( + v-else-if='groupDialog.members.length > 0' + v-infinite-scroll='loadMoreGroupMembers' + style='margin-top: 10px; overflow: auto; max-height: 250px; min-width: 130px') + li.infinite-list-item.x-friend-item.x-friend-item-border( + v-for='user in groupDialog.members' + :key='user.id' + @click='showUserDialog(user.userId)') .avatar - img(v-lazy="userImage(user.user)") + img(v-lazy='userImage(user.user)') .detail - span.name(v-text="user.user.displayName" :style="{'color':user.user.$userColour}") + span.name(v-text='user.user.displayName' :style='{ color: user.user.$userColour }') span.extra - template(v-if="hasGroupPermission(groupDialog.ref, 'group-members-manage')") - el-tooltip(v-if="user.isRepresenting" placement="top" :content="$t('dialog.group.members.representing')") - i.el-icon-collection-tag(style="margin-right:5px") - el-tooltip(v-if="user.visibility !== 'visible'" placement="top") + template(v-if='hasGroupPermission(groupDialog.ref, "group-members-manage")') + el-tooltip( + v-if='user.isRepresenting' + placement='top' + :content='$t("dialog.group.members.representing")') + i.el-icon-collection-tag(style='margin-right: 5px') + el-tooltip(v-if='user.visibility !== "visible"' placement='top') template(#content) span {{ $t('dialog.group.members.visibility') }} {{ user.visibility }} - i.el-icon-view(style="margin-right:5px") - el-tooltip(v-if="!user.isSubscribedToAnnouncements" placement="top" :content="$t('dialog.group.members.unsubscribed_announcements')") - i.el-icon-chat-line-square(style="margin-right:5px") - el-tooltip(v-if="user.managerNotes" placement="top") + i.el-icon-view(style='margin-right: 5px') + el-tooltip( + v-if='!user.isSubscribedToAnnouncements' + placement='top' + :content='$t("dialog.group.members.unsubscribed_announcements")') + i.el-icon-chat-line-square(style='margin-right: 5px') + el-tooltip(v-if='user.managerNotes' placement='top') template(#content) span {{ $t('dialog.group.members.manager_notes') }} br span {{ user.managerNotes }} - i.el-icon-edit-outline(style="margin-right:5px") - template(v-for="roleId in user.roleIds" :key="roleId") - span(v-for="(role, rIndex) in groupDialog.ref.roles" :key="rIndex" v-if="role.id === roleId" v-text="role.name") - span(v-if="user.roleIds.indexOf(roleId) < user.roleIds.length - 1") ,  - .x-friend-item(v-if="!isGroupMembersDone" v-loading="isGroupMembersLoading" style="width:100%;height:45px;text-align:center" @click="loadMoreGroupMembers") - .detail(v-if="!isGroupMembersLoading") + i.el-icon-edit-outline(style='margin-right: 5px') + template(v-for='roleId in user.roleIds' :key='roleId') + span( + v-for='(role, rIndex) in groupDialog.ref.roles' + :key='rIndex' + v-if='role.id === roleId' + v-text='role.name') + span(v-if='user.roleIds.indexOf(roleId) < user.roleIds.length - 1') ,  + .x-friend-item( + v-if='!isGroupMembersDone' + v-loading='isGroupMembersLoading' + style='width: 100%; height: 45px; text-align: center' + @click='loadMoreGroupMembers') + .detail(v-if='!isGroupMembersLoading') span.name {{ $t('dialog.group.members.load_more') }} - el-tab-pane(:label="$t('dialog.group.gallery.header')") - el-button(type="default" size="mini" icon="el-icon-refresh" @click="getGroupGalleries" :loading="isGroupGalleryLoading" circle) - el-tabs(type="card" v-loading="isGroupGalleryLoading" ref="groupDialogGallery" style="margin-top:10px") - template(v-for="(gallery, index) in groupDialog.ref.galleries") + el-tab-pane(:label='$t("dialog.group.gallery.header")') + el-button( + type='default' + size='mini' + icon='el-icon-refresh' + @click='getGroupGalleries' + :loading='isGroupGalleryLoading' + circle) + el-tabs( + type='card' + v-loading='isGroupGalleryLoading' + ref='groupDialogGallery' + style='margin-top: 10px') + template(v-for='(gallery, index) in groupDialog.ref.galleries') el-tab-pane - span(slot="label") - span(v-text="gallery.name" style="font-weight:bold;font-size:16px") - i.x-status-icon(style="margin-left:5px" :class="groupGalleryStatus(gallery)") - span(style="color:#909399;font-size:12px;margin-left:5px") {{ groupDialog.galleries[gallery.id] ? groupDialog.galleries[gallery.id].length : 0 }} - span(v-text="gallery.description" style="color:#c7c7c7;padding:10px") - el-carousel(:interval="0" height="600px" style="margin-top:10px") - el-carousel-item(v-for="image in groupDialog.galleries[gallery.id]" :key="image.id") - el-popover(placement="top" width="700px" trigger="click") - img.x-link(slot="reference" v-lazy="image.imageUrl" style="width:100%;height:100%;object-fit:contain") - img.x-link(v-lazy="image.imageUrl" style="height:700px" @click="showFullscreenImageDialog(image.imageUrl)") - el-tab-pane(:label="$t('dialog.group.json.header')") - el-button(type="default" @click="refreshGroupDialogTreeData()" size="mini" icon="el-icon-refresh" circle) - el-button(type="default" @click="downloadAndSaveJson(groupDialog.id, groupDialog.ref)" size="mini" icon="el-icon-download" circle style="margin-left:5px") - el-tree(:data="groupDialog.treeData" style="margin-top:5px;font-size:12px") - template(#default="scope") + span(slot='label') + span(v-text='gallery.name' style='font-weight: bold; font-size: 16px') + i.x-status-icon(style='margin-left: 5px' :class='groupGalleryStatus(gallery)') + span(style='color: #909399; font-size: 12px; margin-left: 5px') {{ groupDialog.galleries[gallery.id] ? groupDialog.galleries[gallery.id].length : 0 }} + span(v-text='gallery.description' style='color: #c7c7c7; padding: 10px') + el-carousel(:interval='0' height='600px' style='margin-top: 10px') + el-carousel-item( + v-for='image in groupDialog.galleries[gallery.id]' + :key='image.id') + el-popover(placement='top' width='700px' trigger='click') + img.x-link( + slot='reference' + v-lazy='image.imageUrl' + style='width: 100%; height: 100%; object-fit: contain') + img.x-link( + v-lazy='image.imageUrl' + style='height: 700px' + @click='showFullscreenImageDialog(image.imageUrl)') + el-tab-pane(:label='$t("dialog.group.json.header")') + el-button( + type='default' + @click='refreshGroupDialogTreeData()' + size='mini' + icon='el-icon-refresh' + circle) + el-button( + type='default' + @click='downloadAndSaveJson(groupDialog.id, groupDialog.ref)' + size='mini' + icon='el-icon-download' + circle + style='margin-left: 5px') + el-tree(:data='groupDialog.treeData' style='margin-top: 5px; font-size: 12px') + template(#default='scope') span - span(v-text="scope.data.key" style="font-weight:bold;margin-right:5px") - span(v-if="!scope.data.children" v-text="scope.data.value") + span(v-text='scope.data.key' style='font-weight: bold; margin-right: 5px') + span(v-if='!scope.data.children' v-text='scope.data.value') diff --git a/src/mixins/dialogs/previousInstances.pug b/src/mixins/dialogs/previousInstances.pug index 33baf547..b8270c63 100644 --- a/src/mixins/dialogs/previousInstances.pug +++ b/src/mixins/dialogs/previousInstances.pug @@ -1,75 +1,165 @@ -mixin previousInstances() +mixin previousInstances //- dialog Table: Previous Instances User - el-dialog.x-dialog(:before-close="beforeDialogClose" @mousedown.native="dialogMouseDown" @mouseup.native="dialogMouseUp" ref="previousInstancesUserDialog" :visible.sync="previousInstancesUserDialog.visible" :title="$t('dialog.previous_instances.header')" width="1000px") - span(v-text="previousInstancesUserDialog.userRef.displayName" style="font-size:14px") - el-input(v-model="previousInstancesUserDialogTable.filters[0].value" :placeholder="$t('dialog.previous_instances.search_placeholder')" style="display:block;width:150px;margin-top:15px") - data-tables(v-if="previousInstancesUserDialog.visible" v-bind="previousInstancesUserDialogTable" v-loading="previousInstancesUserDialog.loading" style="margin-top:10px") - el-table-column(:label="$t('table.previous_instances.date')" prop="created_at" sortable width="170") - template(#default="scope") + el-dialog.x-dialog( + :before-close='beforeDialogClose' + @mousedown.native='dialogMouseDown' + @mouseup.native='dialogMouseUp' + ref='previousInstancesUserDialog' + :visible.sync='previousInstancesUserDialog.visible' + :title='$t("dialog.previous_instances.header")' + width='1000px') + span(v-text='previousInstancesUserDialog.userRef.displayName' style='font-size: 14px') + el-input( + v-model='previousInstancesUserDialogTable.filters[0].value' + :placeholder='$t("dialog.previous_instances.search_placeholder")' + style='display: block; width: 150px; margin-top: 15px') + data-tables( + v-if='previousInstancesUserDialog.visible' + v-bind='previousInstancesUserDialogTable' + v-loading='previousInstancesUserDialog.loading' + style='margin-top: 10px') + el-table-column(:label='$t("table.previous_instances.date")' prop='created_at' sortable width='170') + template(#default='scope') span {{ scope.row.created_at | formatDate('long') }} - el-table-column(:label="$t('table.previous_instances.world')" prop="name" sortable) - template(#default="scope") - location(:location="scope.row.location" :hint="scope.row.worldName" :grouphint="scope.row.groupName") - el-table-column(:label="$t('table.previous_instances.instance_creator')" prop="location" width="170") - template(#default="scope") - display-name(:userid="scope.row.$location.userId" :location="scope.row.$location.tag" :key="previousInstancesUserDialog.forceUpdate") - el-table-column(:label="$t('table.previous_instances.time')" prop="time" width="100" sortable) - template(#default="scope") - span(v-text="scope.row.timer") - el-table-column(:label="$t('table.previous_instances.action')" width="90" align="right") - template(#default="scope") - el-button(type="text" icon="el-icon-info" size="mini" @click="showLaunchDialog(scope.row.location)") - el-button(type="text" icon="el-icon-tickets" size="mini" @click="showPreviousInstanceInfoDialog(scope.row.location)") - el-button(v-if="shiftHeld" style="color:#f56c6c" type="text" icon="el-icon-close" size="mini" @click="deleteGameLogUserInstance(scope.row)") - el-button(v-else type="text" icon="el-icon-close" size="mini" @click="deleteGameLogUserInstancePrompt(scope.row)") + el-table-column(:label='$t("table.previous_instances.world")' prop='name' sortable) + template(#default='scope') + location( + :location='scope.row.location' + :hint='scope.row.worldName' + :grouphint='scope.row.groupName') + el-table-column(:label='$t("table.previous_instances.instance_creator")' prop='location' width='170') + template(#default='scope') + display-name( + :userid='scope.row.$location.userId' + :location='scope.row.$location.tag' + :key='previousInstancesUserDialog.forceUpdate') + el-table-column(:label='$t("table.previous_instances.time")' prop='time' width='100' sortable) + template(#default='scope') + span(v-text='scope.row.timer') + el-table-column(:label='$t("table.previous_instances.action")' width='90' align='right') + template(#default='scope') + el-button( + type='text' + icon='el-icon-info' + size='mini' + @click='showLaunchDialog(scope.row.location)') + el-button( + type='text' + icon='el-icon-tickets' + size='mini' + @click='showPreviousInstanceInfoDialog(scope.row.location)') + el-button( + v-if='shiftHeld' + style='color: #f56c6c' + type='text' + icon='el-icon-close' + size='mini' + @click='deleteGameLogUserInstance(scope.row)') + el-button( + v-else + type='text' + icon='el-icon-close' + size='mini' + @click='deleteGameLogUserInstancePrompt(scope.row)') //- dialog Table: Previous Instances World - el-dialog.x-dialog(:before-close="beforeDialogClose" @mousedown.native="dialogMouseDown" @mouseup.native="dialogMouseUp" ref="previousInstancesWorldDialog" :visible.sync="previousInstancesWorldDialog.visible" :title="$t('dialog.previous_instances.header')" width="1000px") - span(v-text="previousInstancesWorldDialog.worldRef.name" style="font-size:14px") - el-input(v-model="previousInstancesWorldDialogTable.filters[0].value" :placeholder="$t('dialog.previous_instances.search_placeholder')" style="display:block;width:150px;margin-top:15px") - data-tables(v-if="previousInstancesWorldDialog.visible" v-bind="previousInstancesWorldDialogTable" v-loading="previousInstancesWorldDialog.loading" style="margin-top:10px") - el-table-column(:label="$t('table.previous_instances.date')" prop="created_at" sortable width="170") - template(#default="scope") + el-dialog.x-dialog( + :before-close='beforeDialogClose' + @mousedown.native='dialogMouseDown' + @mouseup.native='dialogMouseUp' + ref='previousInstancesWorldDialog' + :visible.sync='previousInstancesWorldDialog.visible' + :title='$t("dialog.previous_instances.header")' + width='1000px') + span(v-text='previousInstancesWorldDialog.worldRef.name' style='font-size: 14px') + el-input( + v-model='previousInstancesWorldDialogTable.filters[0].value' + :placeholder='$t("dialog.previous_instances.search_placeholder")' + style='display: block; width: 150px; margin-top: 15px') + data-tables( + v-if='previousInstancesWorldDialog.visible' + v-bind='previousInstancesWorldDialogTable' + v-loading='previousInstancesWorldDialog.loading' + style='margin-top: 10px') + el-table-column(:label='$t("table.previous_instances.date")' prop='created_at' sortable width='170') + template(#default='scope') span {{ scope.row.created_at | formatDate('long') }} - el-table-column(:label="$t('table.previous_instances.instance_name')" prop="name") - template(#default="scope") - location-world(:locationobject="scope.row.$location" :grouphint="scope.row.groupName" :currentuserid="API.currentUser.id") - el-table-column(:label="$t('table.previous_instances.instance_creator')" prop="location") - template(#default="scope") - display-name(:userid="scope.row.$location.userId" :location="scope.row.$location.tag" :key="previousInstancesWorldDialog.forceUpdate") - el-table-column(:label="$t('table.previous_instances.time')" prop="time" width="100" sortable) - template(#default="scope") - span(v-text="scope.row.timer") - el-table-column(:label="$t('table.previous_instances.action')" width="90" align="right") - template(#default="scope") - el-button(type="text" icon="el-icon-tickets" size="mini" @click="showPreviousInstanceInfoDialog(scope.row.location)") - el-button(v-if="shiftHeld" style="color:#f56c6c" type="text" icon="el-icon-close" size="mini" @click="deleteGameLogWorldInstance(scope.row)") - el-button(v-else type="text" icon="el-icon-close" size="mini" @click="deleteGameLogWorldInstancePrompt(scope.row)") + el-table-column(:label='$t("table.previous_instances.instance_name")' prop='name') + template(#default='scope') + location-world( + :locationobject='scope.row.$location' + :grouphint='scope.row.groupName' + :currentuserid='API.currentUser.id') + el-table-column(:label='$t("table.previous_instances.instance_creator")' prop='location') + template(#default='scope') + display-name( + :userid='scope.row.$location.userId' + :location='scope.row.$location.tag' + :key='previousInstancesWorldDialog.forceUpdate') + el-table-column(:label='$t("table.previous_instances.time")' prop='time' width='100' sortable) + template(#default='scope') + span(v-text='scope.row.timer') + el-table-column(:label='$t("table.previous_instances.action")' width='90' align='right') + template(#default='scope') + el-button( + type='text' + icon='el-icon-tickets' + size='mini' + @click='showPreviousInstanceInfoDialog(scope.row.location)') + el-button( + v-if='shiftHeld' + style='color: #f56c6c' + type='text' + icon='el-icon-close' + size='mini' + @click='deleteGameLogWorldInstance(scope.row)') + el-button( + v-else + type='text' + icon='el-icon-close' + size='mini' + @click='deleteGameLogWorldInstancePrompt(scope.row)') //- dialog Table: Previous Instance Info - el-dialog.x-dialog(:before-close="beforeDialogClose" @mousedown.native="dialogMouseDown" @mouseup.native="dialogMouseUp" ref="previousInstanceInfoDialog" :visible.sync="previousInstanceInfoDialog.visible" :title="$t('dialog.previous_instances.info')" width="800px") - location(:location="previousInstanceInfoDialog.$location.tag" style="font-size:14px") - el-input(v-model="previousInstanceInfoDialogTable.filters[0].value" :placeholder="$t('dialog.previous_instances.search_placeholder')" style="display:block;width:150px;margin-top:15px" clearable) - data-tables(v-if="previousInstanceInfoDialog.visible" v-bind="previousInstanceInfoDialogTable" v-loading="previousInstanceInfoDialog.loading" style="margin-top:10px") - el-table-column(:label="$t('table.previous_instances.date')" prop="created_at" sortable width="110") - template(v-once #default="scope") - el-tooltip(placement="left") + el-dialog.x-dialog( + :before-close='beforeDialogClose' + @mousedown.native='dialogMouseDown' + @mouseup.native='dialogMouseUp' + ref='previousInstanceInfoDialog' + :visible.sync='previousInstanceInfoDialog.visible' + :title='$t("dialog.previous_instances.info")' + width='800px') + div(style='display: flex; align-items: center; justify-content: space-between') + location(:location='previousInstanceInfoDialog.$location.tag' style='font-size: 14px') + el-input( + v-model='previousInstanceInfoDialogTable.filters[0].value' + :placeholder='$t("dialog.previous_instances.search_placeholder")' + style='width: 150px' + clearable) + data-tables( + v-if='previousInstanceInfoDialog.visible' + v-bind='previousInstanceInfoDialogTable' + v-loading='previousInstanceInfoDialog.loading' + style='margin-top: 10px') + el-table-column(:label='$t("table.previous_instances.date")' prop='created_at' sortable width='110') + template(v-once #default='scope') + el-tooltip(placement='left') template(#content) span {{ scope.row.created_at | formatDate('long') }} span {{ scope.row.created_at | formatDate('short') }} - el-table-column(:label="$t('table.gameLog.icon')" prop="isFriend" width="70" align="center") - template(#default="scope") - template(v-if="gameLogIsFriend(scope.row)") - el-tooltip(v-if="gameLogIsFavorite(scope.row)" placement="top" content="Favorite") + el-table-column(:label='$t("table.gameLog.icon")' prop='isFriend' width='70' align='center') + template(#default='scope') + template(v-if='gameLogIsFriend(scope.row)') + el-tooltip(v-if='gameLogIsFavorite(scope.row)' placement='top' content='Favorite') span ⭐ - el-tooltip(v-else placement="top" content="Friend") + el-tooltip(v-else placement='top' content='Friend') span 💚 - el-table-column(:label="$t('table.previous_instances.display_name')" prop="displayName" sortable) - template(#default="scope") - span.x-link(v-text="scope.row.displayName" @click="lookupUser(scope.row)") - el-table-column(:label="$t('table.previous_instances.time')" prop="time" width="100" sortable) - template(#default="scope") - span(v-text="scope.row.timer") - el-table-column(:label="$t('table.previous_instances.count')" prop="count" width="100" sortable) - template(#default="scope") - span(v-text="scope.row.count") + el-table-column(:label='$t("table.previous_instances.display_name")' prop='displayName' sortable) + template(#default='scope') + span.x-link(v-text='scope.row.displayName' @click='lookupUser(scope.row)') + el-table-column(:label='$t("table.previous_instances.time")' prop='time' width='100' sortable) + template(#default='scope') + span(v-text='scope.row.timer') + el-table-column(:label='$t("table.previous_instances.count")' prop='count' width='100' sortable) + template(#default='scope') + span(v-text='scope.row.count') diff --git a/src/mixins/dialogs/screenshotMetadata.pug b/src/mixins/dialogs/screenshotMetadata.pug index 5a2f7366..e8999693 100644 --- a/src/mixins/dialogs/screenshotMetadata.pug +++ b/src/mixins/dialogs/screenshotMetadata.pug @@ -1,54 +1,128 @@ -mixin screenshotMetadata() - el-dialog.x-dialog(:before-close="beforeDialogClose" @mousedown.native="dialogMouseDown" @mouseup.native="dialogMouseUp" ref="screenshotMetadataDialog" :visible.sync="screenshotMetadataDialog.visible" :title="$t('dialog.screenshot_metadata.header')" width="1050px") - div(v-if="screenshotMetadataDialog.visible" v-loading="screenshotMetadataDialog.loading" @dragover.prevent @dragenter.prevent @drop="handleDrop" style="-webkit-app-region: drag") - span(style="margin-left:5px;color:#909399;font-family:monospace") {{ $t('dialog.screenshot_metadata.drag') }} +mixin screenshotMetadata + el-dialog.x-dialog( + :before-close='beforeDialogClose' + @mousedown.native='dialogMouseDown' + @mouseup.native='dialogMouseUp' + ref='screenshotMetadataDialog' + :visible.sync='screenshotMetadataDialog.visible' + :title='$t("dialog.screenshot_metadata.header")' + width='1050px' + top='10vh') + div( + v-if='screenshotMetadataDialog.visible' + v-loading='screenshotMetadataDialog.loading' + @dragover.prevent + @dragenter.prevent + @drop='handleDrop' + style='-webkit-app-region: drag') + span(style='margin-left: 5px; color: #909399; font-family: monospace') {{ $t('dialog.screenshot_metadata.drag') }} br br - el-button(size="small" icon="el-icon-folder-opened" @click="getAndDisplayScreenshotFromFile()") {{ $t('dialog.screenshot_metadata.browse') }} - el-button(size="small" icon="el-icon-picture-outline" @click="getAndDisplayLastScreenshot()") {{ $t('dialog.screenshot_metadata.last_screenshot') }} - el-button(size="small" icon="el-icon-copy-document" @click="copyImageToClipboard(screenshotMetadataDialog.metadata.filePath)") {{ $t('dialog.screenshot_metadata.copy_image') }} - el-button(size="small" icon="el-icon-folder" @click="openImageFolder(screenshotMetadataDialog.metadata.filePath)") {{ $t('dialog.screenshot_metadata.open_folder') }} - el-button(v-if="API.currentUser.$isVRCPlus && screenshotMetadataDialog.metadata.filePath" size="small" icon="el-icon-upload2" @click="uploadScreenshotToGallery") {{ $t('dialog.screenshot_metadata.upload') }} + el-button(size='small' icon='el-icon-folder-opened' @click='getAndDisplayScreenshotFromFile()') {{ $t('dialog.screenshot_metadata.browse') }} + el-button(size='small' icon='el-icon-picture-outline' @click='getAndDisplayLastScreenshot()') {{ $t('dialog.screenshot_metadata.last_screenshot') }} + el-button( + size='small' + icon='el-icon-copy-document' + @click='copyImageToClipboard(screenshotMetadataDialog.metadata.filePath)') {{ $t('dialog.screenshot_metadata.copy_image') }} + el-button( + size='small' + icon='el-icon-folder' + @click='openImageFolder(screenshotMetadataDialog.metadata.filePath)') {{ $t('dialog.screenshot_metadata.open_folder') }} + el-button( + v-if='API.currentUser.$isVRCPlus && screenshotMetadataDialog.metadata.filePath' + size='small' + icon='el-icon-upload2' + @click='uploadScreenshotToGallery') {{ $t('dialog.screenshot_metadata.upload') }} br br //- Search bar input - el-input(v-model="screenshotMetadataDialog.search" size="small" placeholder="Search" clearable style="width:200px" @input="screenshotMetadataSearch") + el-input( + v-model='screenshotMetadataDialog.search' + size='small' + placeholder='Search' + clearable + style='width: 200px' + @input='screenshotMetadataSearch') //- Search index/total label - template(v-if="screenshotMetadataDialog.searchIndex != null") - span(style="white-space:pre-wrap;font-size:12px;margin-left:10px") {{ (screenshotMetadataDialog.searchIndex + 1) + "/" + screenshotMetadataDialog.searchResults.length }} + template(v-if='screenshotMetadataDialog.searchIndex != null') + span(style='white-space: pre-wrap; font-size: 12px; margin-left: 10px') {{ screenshotMetadataDialog.searchIndex + 1 + '/' + screenshotMetadataDialog.searchResults.length }} //- Search type dropdown - el-select(v-model="screenshotMetadataDialog.searchType" size="small" placeholder="Search Type" style="width:150px;margin-left:10px" @change="screenshotMetadataSearch") - el-option(v-for="type in screenshotMetadataDialog.searchTypes" :key="type" :label="type" :value="type") + el-select( + v-model='screenshotMetadataDialog.searchType' + size='small' + placeholder='Search Type' + style='width: 150px; margin-left: 10px' + @change='screenshotMetadataSearch') + el-option(v-for='type in screenshotMetadataDialog.searchTypes' :key='type' :label='type' :value='type') br br - span(v-text="screenshotMetadataDialog.metadata.fileName") + span(v-text='screenshotMetadataDialog.metadata.fileName') br - template(v-if="screenshotMetadataDialog.metadata.note") - span(v-text="screenshotMetadataDialog.metadata.note") + template(v-if='screenshotMetadataDialog.metadata.note') + span(v-text='screenshotMetadataDialog.metadata.note') br - span(v-if="screenshotMetadataDialog.metadata.dateTime" style="margin-right:5px") {{ screenshotMetadataDialog.metadata.dateTime | formatDate('long') }} - span(v-if="screenshotMetadataDialog.metadata.fileResolution" v-text="screenshotMetadataDialog.metadata.fileResolution" style="margin-right:5px") - el-tag(v-if="screenshotMetadataDialog.metadata.fileSize" type="info" effect="plain" size="mini" v-text="screenshotMetadataDialog.metadata.fileSize") + span(v-if='screenshotMetadataDialog.metadata.dateTime' style='margin-right: 5px') {{ screenshotMetadataDialog.metadata.dateTime | formatDate('long') }} + span( + v-if='screenshotMetadataDialog.metadata.fileResolution' + v-text='screenshotMetadataDialog.metadata.fileResolution' + style='margin-right: 5px') + el-tag( + v-if='screenshotMetadataDialog.metadata.fileSize' + type='info' + effect='plain' + size='mini' + v-text='screenshotMetadataDialog.metadata.fileSize') br - location(v-if="screenshotMetadataDialog.metadata.world" :location="screenshotMetadataDialog.metadata.world.instanceId" :hint="screenshotMetadataDialog.metadata.world.name") + location( + v-if='screenshotMetadataDialog.metadata.world' + :location='screenshotMetadataDialog.metadata.world.instanceId' + :hint='screenshotMetadataDialog.metadata.world.name') br - display-name(v-if="screenshotMetadataDialog.metadata.author" :userid="screenshotMetadataDialog.metadata.author.id" :hint="screenshotMetadataDialog.metadata.author.displayName" style="color:#909399;font-family:monospace") + display-name( + v-if='screenshotMetadataDialog.metadata.author' + :userid='screenshotMetadataDialog.metadata.author.id' + :hint='screenshotMetadataDialog.metadata.author.displayName' + style='color: #909399; font-family: monospace') br - el-carousel(ref="screenshotMetadataCarousel" :interval="0" initial-index="1" indicator-position="none" arrow="always" height="600px" style="margin-top:10px" @change="screenshotMetadataCarouselChange") + el-carousel( + ref='screenshotMetadataCarousel' + :interval='0' + initial-index='1' + indicator-position='none' + arrow='always' + height='600px' + style='margin-top: 10px' + @change='screenshotMetadataCarouselChange') el-carousel-item - span(placement="top" width="700px" trigger="click") - img.x-link(slot="reference" :src="screenshotMetadataDialog.metadata.previousFilePath" style="width:100%;height:100%;object-fit:contain") + span(placement='top' width='700px' trigger='click') + img.x-link( + slot='reference' + :src='screenshotMetadataDialog.metadata.previousFilePath' + style='width: 100%; height: 100%; object-fit: contain') el-carousel-item - span(placement="top" width="700px" trigger="click" @click="showFullscreenImageDialog(screenshotMetadataDialog.metadata.filePath)") - img.x-link(slot="reference" :src="screenshotMetadataDialog.metadata.filePath" style="width:100%;height:100%;object-fit:contain") + span( + placement='top' + width='700px' + trigger='click' + @click='showFullscreenImageDialog(screenshotMetadataDialog.metadata.filePath)') + img.x-link( + slot='reference' + :src='screenshotMetadataDialog.metadata.filePath' + style='width: 100%; height: 100%; object-fit: contain') el-carousel-item - span(placement="top" width="700px" trigger="click") - img.x-link(slot="reference" :src="screenshotMetadataDialog.metadata.nextFilePath" style="width:100%;height:100%;object-fit:contain") + span(placement='top' width='700px' trigger='click') + img.x-link( + slot='reference' + :src='screenshotMetadataDialog.metadata.nextFilePath' + style='width: 100%; height: 100%; object-fit: contain') br - template(v-if="screenshotMetadataDialog.metadata.error") - pre(v-text="screenshotMetadataDialog.metadata.error" style="white-space:pre-wrap;font-size:12px") + template(v-if='screenshotMetadataDialog.metadata.error') + pre(v-text='screenshotMetadataDialog.metadata.error' style='white-space: pre-wrap; font-size: 12px') br - span(v-for="user in screenshotMetadataDialog.metadata.players" style="margin-top:5px") - span.x-link(v-text="user.displayName" @click="lookupUser(user)") - span(v-if="user.pos" v-text="'('+user.pos.x+', '+user.pos.y+', '+user.pos.z+')'" style="margin-left:5px;color:#909399;font-family:monospace") + span(v-for='user in screenshotMetadataDialog.metadata.players' style='margin-top: 5px') + span.x-link(v-text='user.displayName' @click='lookupUser(user)') + span( + v-if='user.pos' + v-text='"(" + user.pos.x + ", " + user.pos.y + ", " + user.pos.z + ")"' + style='margin-left: 5px; color: #909399; font-family: monospace') br diff --git a/src/mixins/dialogs/settings.pug b/src/mixins/dialogs/settings.pug index 119a8353..33020182 100644 --- a/src/mixins/dialogs/settings.pug +++ b/src/mixins/dialogs/settings.pug @@ -1,83 +1,178 @@ -mixin settings() +mixin settings //- dialog: VRChat Config JSON - el-dialog.x-dialog(:before-close="beforeDialogClose" @mousedown.native="dialogMouseDown" @mouseup.native="dialogMouseUp" ref="VRChatConfigDialog" :visible.sync="VRChatConfigDialog.visible" :title="$t('dialog.config_json.header')" width="420px") - div(style='font-size:12px;word-break:keep-all') + el-dialog.x-dialog( + :before-close='beforeDialogClose' + @mousedown.native='dialogMouseDown' + @mouseup.native='dialogMouseUp' + ref='VRChatConfigDialog' + :visible.sync='VRChatConfigDialog.visible' + :title='$t("dialog.config_json.header")' + width='420px' + top='10vh') + div(style='font-size: 12px; word-break: keep-all') | {{ $t('dialog.config_json.description1') }} #[br] | {{ $t('dialog.config_json.description2') }} br - span(style="margin-right:5px") {{ $t('dialog.config_json.cache_size') }} - span(v-text="VRChatUsedCacheSize") + span(style='margin-right: 5px') {{ $t('dialog.config_json.cache_size') }} + span(v-text='VRChatUsedCacheSize') span / - span(v-text="VRChatTotalCacheSize") + span(v-text='VRChatTotalCacheSize') span GB - el-tooltip(placement="top" :content="$t('dialog.config_json.refresh')" :disabled="hideTooltips") - el-button(type="default" :loading="VRChatCacheSizeLoading" @click="getVRChatCacheSize" size="small" icon="el-icon-refresh" circle style="margin-left:5px") - div(style="margin-top:10px") - span(style="margin-right:5px") {{ $t('dialog.config_json.delete_all_cache') }} - el-button(size="small" style="margin-left:5px" icon="el-icon-delete" @click="showDeleteAllVRChatCacheConfirm()") {{ $t('dialog.config_json.delete_cache') }} - div(style="margin-top:10px") - span(style="margin-right:5px") {{ $t('dialog.config_json.delete_old_cache') }} - el-button(size="small" style="margin-left:5px" icon="el-icon-folder-delete" @click="sweepVRChatCache()") {{ $t('dialog.config_json.sweep_cache') }} - div(style="display:inline-block;margin-top:10px" v-for="(item, value) in VRChatConfigList" :key="value") - span(v-text="item.name" style="word-break:keep-all") - |: - el-input(v-model="VRChatConfigFile[value]" :placeholder="item.default" size="mini" :type="item.type?item.type:'text'" :min="item.min" :max="item.max" style="margin-top:5px") + el-tooltip(placement='top' :content='$t("dialog.config_json.refresh")' :disabled='hideTooltips') + el-button( + type='default' + :loading='VRChatCacheSizeLoading' + @click='getVRChatCacheSize' + size='small' + icon='el-icon-refresh' + circle + style='margin-left: 5px') + div(style='margin-top: 10px') + span(style='margin-right: 5px') {{ $t('dialog.config_json.delete_all_cache') }} + el-button( + size='small' + style='margin-left: 5px' + icon='el-icon-delete' + @click='showDeleteAllVRChatCacheConfirm()') {{ $t('dialog.config_json.delete_cache') }} + div(style='margin-top: 10px') + span(style='margin-right: 5px') {{ $t('dialog.config_json.delete_old_cache') }} + el-button(size='small' style='margin-left: 5px' icon='el-icon-folder-delete' @click='sweepVRChatCache()') {{ $t('dialog.config_json.sweep_cache') }} + div(style='display: inline-block; margin-top: 10px' v-for='(item, value) in VRChatConfigList' :key='value') + span(v-text='item.name' style='word-break: keep-all') + | : + el-input( + v-model='VRChatConfigFile[value]' + :placeholder='item.default' + size='mini' + :type='item.type ? item.type : "text"' + :min='item.min' + :max='item.max' + style='margin-top: 5px') br - div(style="display:inline-block;margin-top:10px") + div(style='display: inline-block; margin-top: 10px') span {{ $t('dialog.config_json.camera_resolution') }} br - el-dropdown(@command="(command) => setVRChatCameraResolution(command)" size="small" trigger="click" style="margin-top:5px") - el-button(size="small") - span #[span(v-text="getVRChatCameraResolution()")] #[i.el-icon-arrow-down.el-icon--right] - el-dropdown-menu(#default="dropdown") - el-dropdown-item(v-for="row in VRChatCameraResolutions" :key="row.index" v-text="row.name" :command="row") + el-dropdown( + @command='(command) => setVRChatCameraResolution(command)' + size='small' + trigger='click' + style='margin-top: 5px') + el-button(size='small') + span #[span(v-text='getVRChatCameraResolution()')] #[i.el-icon-arrow-down.el-icon--right] + el-dropdown-menu(#default='dropdown') + el-dropdown-item( + v-for='row in VRChatCameraResolutions' + :key='row.index' + v-text='row.name' + :command='row') br - div(style="display:inline-block;margin-top:10px") + div(style='display: inline-block; margin-top: 10px') span {{ $t('dialog.config_json.spout_resolution') }} br - el-dropdown(@command="(command) => setVRChatSpoutResolution(command)" size="small" trigger="click" style="margin-top:5px") - el-button(size="small") - span #[span(v-text="getVRChatSpoutResolution()")] #[i.el-icon-arrow-down.el-icon--right] - el-dropdown-menu(#default="dropdown") - el-dropdown-item(v-for="row in VRChatScreenshotResolutions" :key="row.index" v-text="row.name" :command="row") + el-dropdown( + @command='(command) => setVRChatSpoutResolution(command)' + size='small' + trigger='click' + style='margin-top: 5px') + el-button(size='small') + span #[span(v-text='getVRChatSpoutResolution()')] #[i.el-icon-arrow-down.el-icon--right] + el-dropdown-menu(#default='dropdown') + el-dropdown-item( + v-for='row in VRChatScreenshotResolutions' + :key='row.index' + v-text='row.name' + :command='row') br - div(style="display:inline-block;margin-top:10px") + div(style='display: inline-block; margin-top: 10px') span {{ $t('dialog.config_json.screenshot_resolution') }} br - el-dropdown(@command="(command) => setVRChatScreenshotResolution(command)" size="small" trigger="click" style="margin-top:5px") - el-button(size="small") - span #[span(v-text="getVRChatScreenshotResolution()")] #[i.el-icon-arrow-down.el-icon--right] - el-dropdown-menu(#default="dropdown") - el-dropdown-item(v-for="row in VRChatScreenshotResolutions" :key="row.index" v-text="row.name" :command="row") - el-checkbox(v-model="VRChatConfigFile.picture_output_split_by_date" style="margin-top:5px;display:block" :checked="true") {{ $t('dialog.config_json.picture_sort_by_date') }} - el-checkbox(v-model="VRChatConfigFile.disableRichPresence" style="margin-top:5px;display:block") {{ $t('dialog.config_json.disable_discord_presence') }} + el-dropdown( + @command='(command) => setVRChatScreenshotResolution(command)' + size='small' + trigger='click' + style='margin-top: 5px') + el-button(size='small') + span #[span(v-text='getVRChatScreenshotResolution()')] #[i.el-icon-arrow-down.el-icon--right] + el-dropdown-menu(#default='dropdown') + el-dropdown-item( + v-for='row in VRChatScreenshotResolutions' + :key='row.index' + v-text='row.name' + :command='row') + el-checkbox( + v-model='VRChatConfigFile.picture_output_split_by_date' + style='margin-top: 5px; display: block' + :checked='true') {{ $t('dialog.config_json.picture_sort_by_date') }} + el-checkbox(v-model='VRChatConfigFile.disableRichPresence' style='margin-top: 5px; display: block') {{ $t('dialog.config_json.disable_discord_presence') }} template(#footer) - div(style="display:flex;align-items:center;justify-content:space-between") + div(style='display: flex; align-items: center; justify-content: space-between') div - el-button(size="small" @click="openExternalLink('https://docs.vrchat.com/docs/configuration-file')") {{ $t('dialog.config_json.vrchat_docs') }} + el-button( + size='small' + @click='openExternalLink("https://docs.vrchat.com/docs/configuration-file")') {{ $t('dialog.config_json.vrchat_docs') }} div - el-button(size="small" @click="VRChatConfigDialog.visible = false") {{ $t('dialog.config_json.cancel') }} - el-button(size="small" type="primary" :disabled="VRChatConfigDialog.loading" @click="saveVRChatConfigFile") {{ $t('dialog.config_json.save') }} + el-button(size='small' @click='VRChatConfigDialog.visible = false') {{ $t('dialog.config_json.cancel') }} + el-button( + size='small' + type='primary' + :disabled='VRChatConfigDialog.loading' + @click='saveVRChatConfigFile') {{ $t('dialog.config_json.save') }} //- dialog: YouTube Api Dialog - el-dialog.x-dialog(:before-close="beforeDialogClose" @mousedown.native="dialogMouseDown" @mouseup.native="dialogMouseUp" ref="youTubeApiDialog" :visible.sync="youTubeApiDialog.visible" :title="$t('dialog.youtube_api.header')" width="400px") - div(style='font-size:12px;') + el-dialog.x-dialog( + :before-close='beforeDialogClose' + @mousedown.native='dialogMouseDown' + @mouseup.native='dialogMouseUp' + ref='youTubeApiDialog' + :visible.sync='youTubeApiDialog.visible' + :title='$t("dialog.youtube_api.header")' + width='400px') + div(style='font-size: 12px') | {{ $t('dialog.youtube_api.description') }} #[br] - el-input(type="textarea" v-model="youTubeApiKey" :placeholder="$t('dialog.youtube_api.placeholder')" maxlength="39" show-word-limit style="display:block;margin-top:10px") + el-input( + type='textarea' + v-model='youTubeApiKey' + :placeholder='$t("dialog.youtube_api.placeholder")' + maxlength='39' + show-word-limit + style='display: block; margin-top: 10px') template(#footer) - div(style="display:flex") - el-button(size="small" @click="openExternalLink('https://rapidapi.com/blog/how-to-get-youtube-api-key/')") {{ $t('dialog.youtube_api.guide') }} - el-button(type="primary" size="small" @click="testYouTubeApiKey" style="margin-left:auto") {{ $t('dialog.youtube_api.save') }} + div(style='display: flex') + el-button( + size='small' + @click='openExternalLink("https://rapidapi.com/blog/how-to-get-youtube-api-key/")') {{ $t('dialog.youtube_api.guide') }} + el-button(type='primary' size='small' @click='testYouTubeApiKey' style='margin-left: auto') {{ $t('dialog.youtube_api.save') }} //- dialog: Discord username list - el-dialog.x-dialog(:before-close="beforeDialogClose" @mousedown.native="dialogMouseDown" @mouseup.native="dialogMouseUp" :visible.sync="discordNamesDialogVisible" :title="$t('dialog.discord_names.header')" width="650px") - div(style='font-size:12px;') + el-dialog.x-dialog( + :before-close='beforeDialogClose' + @mousedown.native='dialogMouseDown' + @mouseup.native='dialogMouseUp' + :visible.sync='discordNamesDialogVisible' + :title='$t("dialog.discord_names.header")' + width='650px') + div(style='font-size: 12px') | {{ $t('dialog.discord_names.description') }} - el-input(type="textarea" v-if="discordNamesDialogVisible" v-model="discordNamesContent" size="mini" rows="15" resize="none" readonly style="margin-top:15px") + el-input( + type='textarea' + v-if='discordNamesDialogVisible' + v-model='discordNamesContent' + size='mini' + rows='15' + resize='none' + readonly + style='margin-top: 15px') //- dialog: Note export dialog - el-dialog.x-dialog(:before-close="beforeDialogClose" @mousedown.native="dialogMouseDown" @mouseup.native="dialogMouseUp" ref="noteExportDialog" :visible.sync="noteExportDialog.visible" :title="$t('dialog.note_export.header')" width="1000px") - div(style="font-size:12px") + el-dialog.x-dialog( + :before-close='beforeDialogClose' + @mousedown.native='dialogMouseDown' + @mouseup.native='dialogMouseUp' + ref='noteExportDialog' + :visible.sync='noteExportDialog.visible' + :title='$t("dialog.note_export.header")' + width='1000px') + div(style='font-size: 12px') | {{ $t('dialog.note_export.description1') }} #[br] | {{ $t('dialog.note_export.description2') }} #[br] | {{ $t('dialog.note_export.description3') }} #[br] @@ -86,126 +181,260 @@ mixin settings() | {{ $t('dialog.note_export.description6') }} #[br] | {{ $t('dialog.note_export.description7') }} #[br] | {{ $t('dialog.note_export.description8') }} #[br] - el-button(size="small" @click="updateNoteExportDialog" :disabled="noteExportDialog.loading" style="margin-top:10px") {{ $t('dialog.note_export.refresh') }} - el-button(size="small" @click="exportNoteExport" :disabled="noteExportDialog.loading" style="margin-top:10px") {{ $t('dialog.note_export.export') }} - el-button(v-if="noteExportDialog.loading" size="small" @click="cancelNoteExport" style="margin-top:10px") {{ $t('dialog.note_export.cancel') }} - span(v-if="noteExportDialog.loading" style="margin:10px") #[i.el-icon-loading(style="margin-right:5px")] {{ $t('dialog.note_export.progress') }} {{ noteExportDialog.progress }}/{{ noteExportDialog.progressTotal }} - template(v-if="noteExportDialog.errors") - el-button(size="small" @click="noteExportDialog.errors = ''") {{ $t('dialog.note_export.clear_errors') }} - h2(style="font-weight:bold;margin:0") {{ $t('dialog.note_export.errors') }} - pre(v-text="noteExportDialog.errors" style="white-space:pre-wrap;font-size:12px") - data-tables(v-if="noteExportDialog.visible" v-bind="noteExportTable" v-loading="noteExportDialog.loading" style="margin-top:10px") - el-table-column(:label="$t('table.import.image')" width="70" prop="currentAvatarThumbnailImageUrl") - template(#default="scope") - el-popover(placement="right" height="500px" trigger="hover") - img.friends-list-avatar(slot="reference" v-lazy="userImage(scope.row.ref)") - img.friends-list-avatar(v-lazy="userImageFull(scope.row.ref)" style="height:500px;cursor:pointer" @click="showFullscreenImageDialog(userImageFull(scope.row.ref))") - el-table-column(:label="$t('table.import.name')" width="170" prop="name") - template(#default="scope") - span.x-link(v-text="scope.row.name" @click="showUserDialog(scope.row.id)") - el-table-column(:label="$t('table.import.note')" prop="memo") - template(#default="scope") - el-input(v-model="scope.row.memo" type="textarea" maxlength="256" show-word-limit :rows="2" :autosize="{ minRows: 1, maxRows: 10 }" size="mini" resize="none") - el-table-column(:label="$t('table.import.skip_export')" width="90" align="right") - template(#default="scope") - el-button(type="text" icon="el-icon-close" size="mini" @click="removeFromNoteExportTable(scope.row)") + el-button( + size='small' + @click='updateNoteExportDialog' + :disabled='noteExportDialog.loading' + style='margin-top: 10px') {{ $t('dialog.note_export.refresh') }} + el-button(size='small' @click='exportNoteExport' :disabled='noteExportDialog.loading' style='margin-top: 10px') {{ $t('dialog.note_export.export') }} + el-button(v-if='noteExportDialog.loading' size='small' @click='cancelNoteExport' style='margin-top: 10px') {{ $t('dialog.note_export.cancel') }} + span(v-if='noteExportDialog.loading' style='margin: 10px') #[i.el-icon-loading(style='margin-right: 5px')] {{ $t('dialog.note_export.progress') }} {{ noteExportDialog.progress }}/{{ noteExportDialog.progressTotal }} + template(v-if='noteExportDialog.errors') + el-button(size='small' @click='noteExportDialog.errors = ""') {{ $t('dialog.note_export.clear_errors') }} + h2(style='font-weight: bold; margin: 0') {{ $t('dialog.note_export.errors') }} + pre(v-text='noteExportDialog.errors' style='white-space: pre-wrap; font-size: 12px') + data-tables( + v-if='noteExportDialog.visible' + v-bind='noteExportTable' + v-loading='noteExportDialog.loading' + style='margin-top: 10px') + el-table-column(:label='$t("table.import.image")' width='70' prop='currentAvatarThumbnailImageUrl') + template(#default='scope') + el-popover(placement='right' height='500px' trigger='hover') + img.friends-list-avatar(slot='reference' v-lazy='userImage(scope.row.ref)') + img.friends-list-avatar( + v-lazy='userImageFull(scope.row.ref)' + style='height: 500px; cursor: pointer' + @click='showFullscreenImageDialog(userImageFull(scope.row.ref))') + el-table-column(:label='$t("table.import.name")' width='170' prop='name') + template(#default='scope') + span.x-link(v-text='scope.row.name' @click='showUserDialog(scope.row.id)') + el-table-column(:label='$t("table.import.note")' prop='memo') + template(#default='scope') + el-input( + v-model='scope.row.memo' + type='textarea' + maxlength='256' + show-word-limit + :rows='2' + :autosize='{ minRows: 1, maxRows: 10 }' + size='mini' + resize='none') + el-table-column(:label='$t("table.import.skip_export")' width='90' align='right') + template(#default='scope') + el-button( + type='text' + icon='el-icon-close' + size='mini' + @click='removeFromNoteExportTable(scope.row)') //- dialog: chatbox blacklist - el-dialog.x-dialog(:before-close="beforeDialogClose" @mousedown.native="dialogMouseDown" @mouseup.native="dialogMouseUp" ref="chatboxBlacklistDialog" :visible.sync="chatboxBlacklistDialog.visible" :title="$t('dialog.chatbox_blacklist.header')" width="600px") - div(v-loading="chatboxBlacklistDialog.loading" v-if="chatboxBlacklistDialog.visible") + el-dialog.x-dialog( + :before-close='beforeDialogClose' + @mousedown.native='dialogMouseDown' + @mouseup.native='dialogMouseUp' + ref='chatboxBlacklistDialog' + :visible.sync='chatboxBlacklistDialog.visible' + :title='$t("dialog.chatbox_blacklist.header")' + width='600px') + div(v-loading='chatboxBlacklistDialog.loading' v-if='chatboxBlacklistDialog.visible') h2 {{ $t('dialog.chatbox_blacklist.keyword_blacklist') }} - el-input(v-for="(item, index) in chatboxBlacklist" :key="index" :value="item" v-model="chatboxBlacklist[index]" size="small" style="margin-top:5px" @change="saveChatboxBlacklist") - el-button(slot="append" icon="el-icon-delete" @click="chatboxBlacklist.splice(index, 1); saveChatboxBlacklist()") - el-button(@click="chatboxBlacklist.push('')" size="mini" style="margin-top:5px") {{ $t('dialog.chatbox_blacklist.add_item') }} + el-input( + v-for='(item, index) in chatboxBlacklist' + :key='index' + :value='item' + v-model='chatboxBlacklist[index]' + size='small' + style='margin-top: 5px' + @change='saveChatboxBlacklist') + el-button( + slot='append' + icon='el-icon-delete' + @click='chatboxBlacklist.splice(index, 1); saveChatboxBlacklist()') + el-button(@click='chatboxBlacklist.push("")' size='mini' style='margin-top: 5px') {{ $t('dialog.chatbox_blacklist.add_item') }} br h2 {{ $t('dialog.chatbox_blacklist.user_blacklist') }} - el-tag(v-for="user in chatboxUserBlacklist" type="info" disable-transitions="true" :key="user[0]" style="margin-right:5px;margin-top:5px" closable @close="deleteChatboxUserBlacklist(user[0])") - span {{user[1]}} + el-tag( + v-for='user in chatboxUserBlacklist' + type='info' + disable-transitions='true' + :key='user[0]' + style='margin-right: 5px; margin-top: 5px' + closable + @close='deleteChatboxUserBlacklist(user[0])') + span {{ user[1] }} //- dialog: Notification position - el-dialog.x-dialog(:before-close="beforeDialogClose" @mousedown.native="dialogMouseDown" @mouseup.native="dialogMouseUp" ref="notificationPositionDialog" :visible.sync="notificationPositionDialog.visible" :title="$t('dialog.notification_position.header')" width="400px") - div(style='font-size:12px;') + el-dialog.x-dialog( + :before-close='beforeDialogClose' + @mousedown.native='dialogMouseDown' + @mouseup.native='dialogMouseUp' + ref='notificationPositionDialog' + :visible.sync='notificationPositionDialog.visible' + :title='$t("dialog.notification_position.header")' + width='400px') + div(style='font-size: 12px') | {{ $t('dialog.notification_position.description') }} - svg.notification-position(version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 300 200" style="margin-top:15px;" xml:space="preserve") - path(style="fill:black;" d="M291.89,5A3.11,3.11,0,0,1,295,8.11V160.64a3.11,3.11,0,0,1-3.11,3.11H8.11A3.11,3.11,0,0,1,5,160.64V8.11A3.11,3.11,0,0,1,8.11,5H291.89m0-5H8.11A8.11,8.11,0,0,0,0,8.11V160.64a8.11,8.11,0,0,0,8.11,8.11H291.89a8.11,8.11,0,0,0,8.11-8.11V8.11A8.11,8.11,0,0,0,291.89,0Z") - rect(style="fill:#c4c4c4;" x="5" y="5" width="290" height="158.75" rx="2.5") - el-radio-group(v-model="notificationPosition" size="mini" @change="changeNotificationPosition") - el-radio(label="topLeft" v-model="notificationPosition" style="margin:0;position:absolute;left:35px;top:120px;") ‎ - el-radio(label="top" v-model="notificationPosition" style="margin:0;position:absolute;left:195px;top:120px;") ‎ - el-radio(label="topRight" v-model="notificationPosition" style="margin:0;position:absolute;right:25px;top:120px;") ‎ - el-radio(label="centerLeft" v-model="notificationPosition" style="margin:0;position:absolute;left:35px;top:200px;") ‎ - el-radio(label="center" v-model="notificationPosition" style="margin:0;position:absolute;left:195px;top:200px;") ‎ - el-radio(label="centerRight" v-model="notificationPosition" style="margin:0;position:absolute;right:25px;top:200px;") ‎ - el-radio(label="bottomLeft" v-model="notificationPosition" style="margin:0;position:absolute;left:35px;top:280px;") ‎ - el-radio(label="bottom" v-model="notificationPosition" style="margin:0;position:absolute;left:195px;top:280px;") ‎ - el-radio(label="bottomRight" v-model="notificationPosition" style="margin:0;position:absolute;right:25px;top:280px;") ‎ + svg.notification-position( + version='1.1' + xmlns='http://www.w3.org/2000/svg' + xmlns:xlink='http://www.w3.org/1999/xlink' + x='0px' + y='0px' + viewBox='0 0 300 200' + style='margin-top: 15px' + xml:space='preserve') + path( + style='fill: black' + d='M291.89,5A3.11,3.11,0,0,1,295,8.11V160.64a3.11,3.11,0,0,1-3.11,3.11H8.11A3.11,3.11,0,0,1,5,160.64V8.11A3.11,3.11,0,0,1,8.11,5H291.89m0-5H8.11A8.11,8.11,0,0,0,0,8.11V160.64a8.11,8.11,0,0,0,8.11,8.11H291.89a8.11,8.11,0,0,0,8.11-8.11V8.11A8.11,8.11,0,0,0,291.89,0Z') + rect(style='fill: #c4c4c4' x='5' y='5' width='290' height='158.75' rx='2.5') + el-radio-group(v-model='notificationPosition' size='mini' @change='changeNotificationPosition') + el-radio( + label='topLeft' + v-model='notificationPosition' + style='margin: 0; position: absolute; left: 35px; top: 120px') ‎ + el-radio( + label='top' + v-model='notificationPosition' + style='margin: 0; position: absolute; left: 195px; top: 120px') ‎ + el-radio( + label='topRight' + v-model='notificationPosition' + style='margin: 0; position: absolute; right: 25px; top: 120px') ‎ + el-radio( + label='centerLeft' + v-model='notificationPosition' + style='margin: 0; position: absolute; left: 35px; top: 200px') ‎ + el-radio( + label='center' + v-model='notificationPosition' + style='margin: 0; position: absolute; left: 195px; top: 200px') ‎ + el-radio( + label='centerRight' + v-model='notificationPosition' + style='margin: 0; position: absolute; right: 25px; top: 200px') ‎ + el-radio( + label='bottomLeft' + v-model='notificationPosition' + style='margin: 0; position: absolute; left: 35px; top: 280px') ‎ + el-radio( + label='bottom' + v-model='notificationPosition' + style='margin: 0; position: absolute; left: 195px; top: 280px') ‎ + el-radio( + label='bottomRight' + v-model='notificationPosition' + style='margin: 0; position: absolute; right: 25px; top: 280px') ‎ template(#footer) - div(style="display:flex") - el-button(type="primary" size="small" style="margin-left:auto" @click="notificationPositionDialog.visible = false") {{ $t('dialog.notification_position.ok') }} + div(style='display: flex') + el-button( + type='primary' + size='small' + style='margin-left: auto' + @click='notificationPositionDialog.visible = false') {{ $t('dialog.notification_position.ok') }} //- dialog: avatar database provider - el-dialog.x-dialog(:before-close="beforeDialogClose" @mousedown.native="dialogMouseDown" @mouseup.native="dialogMouseUp" ref="avatarProviderDialog" :visible.sync="avatarProviderDialog.visible" :title="$t('dialog.avatar_database_provider.header')" width="600px") + el-dialog.x-dialog( + :before-close='beforeDialogClose' + @mousedown.native='dialogMouseDown' + @mouseup.native='dialogMouseUp' + ref='avatarProviderDialog' + :visible.sync='avatarProviderDialog.visible' + :title='$t("dialog.avatar_database_provider.header")' + width='600px') div - el-input(v-for="(provider, index) in avatarRemoteDatabaseProviderList" :key="index" :value="provider" v-model="avatarRemoteDatabaseProviderList[index]" @change="saveAvatarProviderList" size="small" style="margin-top:5px") - el-button(slot="append" icon="el-icon-delete" @click="removeAvatarProvider(provider)") - el-button(@click="avatarRemoteDatabaseProviderList.push('')" size="mini" style="margin-top:5px") {{ $t('dialog.avatar_database_provider.add_provider') }} + el-input( + v-for='(provider, index) in avatarRemoteDatabaseProviderList' + :key='index' + :value='provider' + v-model='avatarRemoteDatabaseProviderList[index]' + @change='saveAvatarProviderList' + size='small' + style='margin-top: 5px') + el-button(slot='append' icon='el-icon-delete' @click='removeAvatarProvider(provider)') + el-button(@click='avatarRemoteDatabaseProviderList.push("")' size='mini' style='margin-top: 5px') {{ $t('dialog.avatar_database_provider.add_provider') }} //- dialog: Registry Auto Backup - el-dialog.x-dialog(:before-close="beforeDialogClose" @closed="clearVrcRegistryDialog" @mousedown.native="dialogMouseDown" @mouseup.native="dialogMouseUp" ref="registryBackupDialog" :visible.sync="registryBackupDialog.visible" :title="$t('dialog.registry_backup.header')" width="600px") - div(v-if="registryBackupDialog.visible" style="margin-top:10px") - div.options-container(style="padding:0") - div.options-container-item(style="display:flex;align-items:center;justify-content:space-between") - span.name(style="margin-right:24px") {{ $t('dialog.registry_backup.auto_backup') }} - el-switch(v-model="vrcRegistryAutoBackup" @change="saveVrcRegistryAutoBackup") - data-tables(v-bind="registryBackupTable" style="margin-top:10px") - el-table-column(:label="$t('dialog.registry_backup.name')" prop="name") - el-table-column(:label="$t('dialog.registry_backup.date')" prop="date") - template(#default="scope") + el-dialog.x-dialog( + :before-close='beforeDialogClose' + @closed='clearVrcRegistryDialog' + @mousedown.native='dialogMouseDown' + @mouseup.native='dialogMouseUp' + ref='registryBackupDialog' + :visible.sync='registryBackupDialog.visible' + :title='$t("dialog.registry_backup.header")' + width='600px') + div(v-if='registryBackupDialog.visible' style='margin-top: 10px') + div(style='display: flex; align-items: center; justify-content: space-between; font-size: 12px') + span.name(style='margin-right: 24px') {{ $t('dialog.registry_backup.auto_backup') }} + el-switch(v-model='vrcRegistryAutoBackup' @change='saveVrcRegistryAutoBackup') + data-tables(v-bind='registryBackupTable' style='margin-top: 10px') + el-table-column(:label='$t("dialog.registry_backup.name")' prop='name') + el-table-column(:label='$t("dialog.registry_backup.date")' prop='date') + template(#default='scope') span {{ scope.row.date | formatDate('long') }} - el-table-column(:label="$t('dialog.registry_backup.action')" width="90" align="right") - template(#default="scope") - el-tooltip(placement="top" :content="$t('dialog.registry_backup.restore')" :disabled="hideTooltips") - el-button(type="text" icon="el-icon-upload2" size="mini" @click="restoreVrcRegistryBackup(scope.row)") - el-tooltip(placement="top" :content="$t('dialog.registry_backup.save_to_file')" :disabled="hideTooltips") - el-button(type="text" icon="el-icon-download" size="mini" @click="saveVrcRegistryBackupToFile(scope.row)") - el-tooltip(placement="top" :content="$t('dialog.registry_backup.delete')" :disabled="hideTooltips") - el-button(type="text" icon="el-icon-delete" size="mini" @click="deleteVrcRegistryBackup(scope.row)") - div(style="display:flex;align-items:center;justify-content:space-between;margin-top:10px") - el-button(type="danger" @click="deleteVrcRegistry" size="small") {{ $t('dialog.registry_backup.reset') }} + el-table-column(:label='$t("dialog.registry_backup.action")' width='90' align='right') + template(#default='scope') + el-tooltip( + placement='top' + :content='$t("dialog.registry_backup.restore")' + :disabled='hideTooltips') + el-button( + type='text' + icon='el-icon-upload2' + size='mini' + @click='restoreVrcRegistryBackup(scope.row)') + el-tooltip( + placement='top' + :content='$t("dialog.registry_backup.save_to_file")' + :disabled='hideTooltips') + el-button( + type='text' + icon='el-icon-download' + size='mini' + @click='saveVrcRegistryBackupToFile(scope.row)') + el-tooltip( + placement='top' + :content='$t("dialog.registry_backup.delete")' + :disabled='hideTooltips') + el-button( + type='text' + icon='el-icon-delete' + size='mini' + @click='deleteVrcRegistryBackup(scope.row)') + div(style='display: flex; align-items: center; justify-content: space-between; margin-top: 10px') + el-button(type='danger' @click='deleteVrcRegistry' size='small') {{ $t('dialog.registry_backup.reset') }} div - el-button(@click="promptVrcRegistryBackupName" size="small") {{ $t('dialog.registry_backup.backup') }} - el-button(@click="restoreVrcRegistryFromFile" size="small") {{ $t('dialog.registry_backup.restore_from_file') }} - + el-button(@click='promptVrcRegistryBackupName' size='small') {{ $t('dialog.registry_backup.backup') }} + el-button(@click='restoreVrcRegistryFromFile' size='small') {{ $t('dialog.registry_backup.restore_from_file') }} //- dialog: Enable primary password el-dialog.x-dialog( - :visible.sync="enablePrimaryPasswordDialog.visible" - :before-close="enablePrimaryPasswordDialog.beforeClose" - ref="primaryPasswordDialog" - :close-on-click-modal="false" - :title="$t('dialog.primary_password.header')" - width="400px" - ) + :visible.sync='enablePrimaryPasswordDialog.visible' + :before-close='enablePrimaryPasswordDialog.beforeClose' + ref='primaryPasswordDialog' + :close-on-click-modal='false' + :title='$t("dialog.primary_password.header")' + width='400px') el-input( - v-model="enablePrimaryPasswordDialog.password" - :placeholder="$t('dialog.primary_password.password_placeholder')" - type="password" - size="mini" - maxlength="32" + v-model='enablePrimaryPasswordDialog.password' + :placeholder='$t("dialog.primary_password.password_placeholder")' + type='password' + size='mini' + maxlength='32' show-password - autofocus - ) + autofocus) el-input( - v-model="enablePrimaryPasswordDialog.rePassword" - :placeholder="$t('dialog.primary_password.re_input_placeholder')" - type="password" - style="margin-top:5px" - size="mini" - maxlength="32" - show-password - ) + v-model='enablePrimaryPasswordDialog.rePassword' + :placeholder='$t("dialog.primary_password.re_input_placeholder")' + type='password' + style='margin-top: 5px' + size='mini' + maxlength='32' + show-password) template(#footer) el-button( - type="primary" size="small" @click="setPrimaryPassword" - :disabled="enablePrimaryPasswordDialog.password.length===0||enablePrimaryPasswordDialog.password!==enablePrimaryPasswordDialog.rePassword" - ) {{ $t('dialog.primary_password.ok') }} + type='primary' + size='small' + @click='setPrimaryPassword' + :disabled='enablePrimaryPasswordDialog.password.length === 0 || enablePrimaryPasswordDialog.password !== enablePrimaryPasswordDialog.rePassword') {{ $t('dialog.primary_password.ok') }} diff --git a/src/mixins/dialogs/userDialog.pug b/src/mixins/dialogs/userDialog.pug index 007edc48..addd1761 100644 --- a/src/mixins/dialogs/userDialog.pug +++ b/src/mixins/dialogs/userDialog.pug @@ -1,373 +1,750 @@ -mixin userDialog() - el-dialog.x-dialog.x-user-dialog(:before-close="beforeDialogClose" @mousedown.native="dialogMouseDown" @mouseup.native="dialogMouseUp" ref="userDialog" :visible.sync="userDialog.visible" :show-close="false" width="770px") - div(v-loading="userDialog.loading") - div(style="display:flex") - el-popover(v-if="userDialog.ref.profilePicOverrideThumbnail || userDialog.ref.profilePicOverride" placement="right" width="500px" trigger="click") - template(slot="reference") - img.x-link(v-if="userDialog.ref.profilePicOverrideThumbnail" v-lazy="userDialog.ref.profilePicOverrideThumbnail" style="flex:none;height:120px;width:213.33px;border-radius:12px;object-fit:cover") - img.x-link(v-else v-lazy="userDialog.ref.profilePicOverride" style="flex:none;height:120px;width:213.33px;border-radius:12px;object-fit:cover") - img.x-link(v-lazy="userDialog.ref.profilePicOverride" style="height:400px" @click="showFullscreenImageDialog(userDialog.ref.profilePicOverride)") - el-popover(v-else placement="right" width="500px" trigger="click") - img.x-link(slot="reference" v-lazy="userDialog.ref.currentAvatarThumbnailImageUrl" style="flex:none;height:120px;width:160px;border-radius:12px;object-fit:cover") - img.x-link(v-lazy="userDialog.ref.currentAvatarImageUrl" style="height:500px" @click="showFullscreenImageDialog(userDialog.ref.currentAvatarImageUrl)") - div(style="flex:1;display:flex;align-items:center;margin-left:15px") - div(style="flex:1") +mixin userDialog + el-dialog.x-dialog.x-user-dialog( + :before-close='beforeDialogClose' + @mousedown.native='dialogMouseDown' + @mouseup.native='dialogMouseUp' + ref='userDialog' + :visible.sync='userDialog.visible' + :show-close='false' + width='770px' + top='10vh') + div(v-loading='userDialog.loading') + div(style='display: flex') + el-popover( + v-if='userDialog.ref.profilePicOverrideThumbnail || userDialog.ref.profilePicOverride' + placement='right' + width='500px' + trigger='click') + template(slot='reference') + img.x-link( + v-if='userDialog.ref.profilePicOverrideThumbnail' + v-lazy='userDialog.ref.profilePicOverrideThumbnail' + style='flex: none; height: 120px; width: 213.33px; border-radius: 12px; object-fit: cover') + img.x-link( + v-else + v-lazy='userDialog.ref.profilePicOverride' + style='flex: none; height: 120px; width: 213.33px; border-radius: 12px; object-fit: cover') + img.x-link( + v-lazy='userDialog.ref.profilePicOverride' + style='height: 400px' + @click='showFullscreenImageDialog(userDialog.ref.profilePicOverride)') + el-popover(v-else placement='right' width='500px' trigger='click') + img.x-link( + slot='reference' + v-lazy='userDialog.ref.currentAvatarThumbnailImageUrl' + style='flex: none; height: 120px; width: 160px; border-radius: 12px; object-fit: cover') + img.x-link( + v-lazy='userDialog.ref.currentAvatarImageUrl' + style='height: 500px' + @click='showFullscreenImageDialog(userDialog.ref.currentAvatarImageUrl)') + div(style='flex: 1; display: flex; align-items: center; margin-left: 15px') + div(style='flex: 1') div - el-tooltip(v-if="userDialog.ref.status" placement="top") + el-tooltip(v-if='userDialog.ref.status' placement='top') template(#content) - span(v-if="userDialog.ref.state === 'active'") {{ $t('dialog.user.status.active') }} - span(v-else-if="userDialog.ref.state === 'offline'") {{ $t('dialog.user.status.offline') }} - span(v-else-if="userDialog.ref.status === 'active'") {{ $t('dialog.user.status.online') }} - span(v-else-if="userDialog.ref.status === 'join me'") {{ $t('dialog.user.status.join_me') }} - span(v-else-if="userDialog.ref.status === 'ask me'") {{ $t('dialog.user.status.ask_me') }} - span(v-else-if="userDialog.ref.status === 'busy'") {{ $t('dialog.user.status.busy') }} + span(v-if='userDialog.ref.state === "active"') {{ $t('dialog.user.status.active') }} + span(v-else-if='userDialog.ref.state === "offline"') {{ $t('dialog.user.status.offline') }} + span(v-else-if='userDialog.ref.status === "active"') {{ $t('dialog.user.status.online') }} + span(v-else-if='userDialog.ref.status === "join me"') {{ $t('dialog.user.status.join_me') }} + span(v-else-if='userDialog.ref.status === "ask me"') {{ $t('dialog.user.status.ask_me') }} + span(v-else-if='userDialog.ref.status === "busy"') {{ $t('dialog.user.status.busy') }} span(v-else) {{ $t('dialog.user.status.offline') }} - i.x-user-status(:class="userStatusClass(userDialog.ref)") - template(v-if="userDialog.previousDisplayNames.length > 0") - el-tooltip(placement="bottom") + i.x-user-status(:class='userStatusClass(userDialog.ref)') + template(v-if='userDialog.previousDisplayNames.length > 0') + el-tooltip(placement='bottom') template(#content) span {{ $t('dialog.user.previous_display_names') }} - div(v-for="displayName in userDialog.previousDisplayNames" placement="top") - span(v-text="displayName") + div(v-for='displayName in userDialog.previousDisplayNames' placement='top') + span(v-text='displayName') i.el-icon-caret-bottom - el-popover(placement="top" trigger="click") - span.dialog-title(slot="reference" v-text="userDialog.ref.displayName" style="margin-left:5px;margin-right:5px;cursor:pointer") - span(style="display:block;text-align:center;font-family:monospace") {{ userDialog.ref.displayName | textToHex }} - el-tooltip(v-if="userDialog.ref.pronouns" placement="top" :content="$t('dialog.user.pronouns')" :disabled="hideTooltips") - span.x-grey(v-text="userDialog.ref.pronouns" style="margin-right:5px;font-family:monospace;font-size:12px") - el-tooltip(v-for="item in userDialog.ref.$languages" :key="item.key" placement="top") + el-popover(placement='top' trigger='click') + span.dialog-title( + slot='reference' + v-text='userDialog.ref.displayName' + style='margin-left: 5px; margin-right: 5px; cursor: pointer') + span(style='display: block; text-align: center; font-family: monospace') {{ userDialog.ref.displayName | textToHex }} + el-tooltip( + v-if='userDialog.ref.pronouns' + placement='top' + :content='$t("dialog.user.pronouns")' + :disabled='hideTooltips') + span.x-grey( + v-text='userDialog.ref.pronouns' + style='margin-right: 5px; font-family: monospace; font-size: 12px') + el-tooltip(v-for='item in userDialog.ref.$languages' :key='item.key' placement='top') template(#content) span {{ item.value }} ({{ item.key }}) - span.flags(:class="languageClass(item.key)" style="display:inline-block;margin-right:5px") - template(v-if="userDialog.ref.id === API.currentUser.id") + span.flags( + :class='languageClass(item.key)' + style='display: inline-block; margin-right: 5px') + template(v-if='userDialog.ref.id === API.currentUser.id') br - el-popover(placement="top" trigger="click") - span.x-grey(slot="reference" v-text="API.currentUser.username" style="margin-right:10px;font-family:monospace;font-size:12px;cursor:pointer") - span(style="display:block;text-align:center;font-family:monospace") {{ API.currentUser.username | textToHex }} - div(style="margin-top:5px") - el-tag.name(type="info" effect="plain" size="mini" :class="userDialog.ref.$trustClass" v-text="userDialog.ref.$trustLevel" style="margin-right:5px;margin-top:5px") - el-tag.x-tag-friend(v-if="userDialog.isFriend && userDialog.friend" type="info" effect="plain" size="mini" style="margin-right:5px;margin-top:5px") {{ $t('dialog.user.tags.friend_no', { number: userDialog.ref.$friendNumber ? userDialog.ref.$friendNumber : "?" }) }} - el-tag.x-tag-troll(v-if="userDialog.ref.$isTroll" type="info" effect="plain" size="mini" style="margin-right:5px;margin-top:5px") Nuisance - el-tag.x-tag-troll(v-if="userDialog.ref.$isProbableTroll" type="info" effect="plain" size="mini" style="margin-right:5px;margin-top:5px") Almost Nuisance - el-tag.x-tag-vip(v-if="userDialog.ref.$isModerator" type="info" effect="plain" size="mini" style="margin-right:5px;margin-top:5px") {{ $t('dialog.user.tags.vrchat_team') }} - el-tag.x-tag-platform-pc(v-if="userDialog.ref.last_platform === 'standalonewindows'" type="info" effect="plain" size="mini" style="margin-right:5px;margin-top:5px") PC - el-tag.x-tag-platform-quest(v-else-if="userDialog.ref.last_platform === 'android'" type="info" effect="plain" size="mini" style="margin-right:5px;margin-top:5px") Android - el-tag.x-tag-platform-ios(v-else-if="userDialog.ref.last_platform === 'ios'" type="info" effect="plain" size="mini" style="margin-right:5px;margin-top:5px") iOS - el-tag.x-tag-platform-other(v-else-if="userDialog.ref.last_platform" type="info" effect="plain" size="mini" style="margin-right:5px;margin-top:5px") {{ userDialog.ref.last_platform }} - el-tag.x-tag-age-verification(v-if="userDialog.ref.ageVerificationStatus && userDialog.ref.ageVerificationStatus !== 'hidden'" type="info" effect="plain" size="mini" style="margin-right:5px;margin-top:5px") {{ userDialog.ref.ageVerificationStatus }} - el-tag.name(v-if="userDialog.ref.$customTag" type="info" effect="plain" size="mini" v-text="userDialog.ref.$customTag" :style="{'color':userDialog.ref.$customTagColour, 'border-color':userDialog.ref.$customTagColour}" style="margin-right:5px;margin-top:5px") + el-popover(placement='top' trigger='click') + span.x-grey( + slot='reference' + v-text='API.currentUser.username' + style='margin-right: 10px; font-family: monospace; font-size: 12px; cursor: pointer') + span(style='display: block; text-align: center; font-family: monospace') {{ API.currentUser.username | textToHex }} + div(style='margin-top: 5px') + el-tag.name( + type='info' + effect='plain' + size='mini' + :class='userDialog.ref.$trustClass' + v-text='userDialog.ref.$trustLevel' + style='margin-right: 5px; margin-top: 5px') + el-tag.x-tag-friend( + v-if='userDialog.isFriend && userDialog.friend' + type='info' + effect='plain' + size='mini' + style='margin-right: 5px; margin-top: 5px') {{ $t('dialog.user.tags.friend_no', { number: userDialog.ref.$friendNumber ? userDialog.ref.$friendNumber : "?" }) }} + el-tag.x-tag-troll( + v-if='userDialog.ref.$isTroll' + type='info' + effect='plain' + size='mini' + style='margin-right: 5px; margin-top: 5px') Nuisance + el-tag.x-tag-troll( + v-if='userDialog.ref.$isProbableTroll' + type='info' + effect='plain' + size='mini' + style='margin-right: 5px; margin-top: 5px') Almost Nuisance + el-tag.x-tag-vip( + v-if='userDialog.ref.$isModerator' + type='info' + effect='plain' + size='mini' + style='margin-right: 5px; margin-top: 5px') {{ $t('dialog.user.tags.vrchat_team') }} + el-tag.x-tag-platform-pc( + v-if='userDialog.ref.last_platform === "standalonewindows"' + type='info' + effect='plain' + size='mini' + style='margin-right: 5px; margin-top: 5px') PC + el-tag.x-tag-platform-quest( + v-else-if='userDialog.ref.last_platform === "android"' + type='info' + effect='plain' + size='mini' + style='margin-right: 5px; margin-top: 5px') Android + el-tag.x-tag-platform-ios( + v-else-if='userDialog.ref.last_platform === "ios"' + type='info' + effect='plain' + size='mini' + style='margin-right: 5px; margin-top: 5px') iOS + el-tag.x-tag-platform-other( + v-else-if='userDialog.ref.last_platform' + type='info' + effect='plain' + size='mini' + style='margin-right: 5px; margin-top: 5px') {{ userDialog.ref.last_platform }} + el-tag.x-tag-age-verification( + v-if='userDialog.ref.ageVerificationStatus && userDialog.ref.ageVerificationStatus !== "hidden"' + type='info' + effect='plain' + size='mini' + style='margin-right: 5px; margin-top: 5px') {{ userDialog.ref.ageVerificationStatus }} + el-tag.name( + v-if='userDialog.ref.$customTag' + type='info' + effect='plain' + size='mini' + v-text='userDialog.ref.$customTag' + :style='{ color: userDialog.ref.$customTagColour, "border-color": userDialog.ref.$customTagColour }' + style='margin-right: 5px; margin-top: 5px') br - template(v-for="badge in userDialog.ref.badges") - el-tooltip(placement="top") + template(v-for='badge in userDialog.ref.badges') + el-tooltip(placement='top') template(#content) span {{ badge.badgeName }} - span(v-if="badge.hidden")  (Hidden) - el-popover(placement="right" width="300px" trigger="click") - img.x-link.x-user-badge(slot="reference" v-lazy="badge.badgeImageUrl" style="flex:none;height:32px;width:32px;border-radius:3px;object-fit:cover;margin-top:5px;margin-right:5px" :class="{'x-user-badge-hidden':badge.hidden}") - img.x-link(v-lazy="badge.badgeImageUrl" style="width:300px" @click="showFullscreenImageDialog(badge.badgeImageUrl)") + span(v-if='badge.hidden')  (Hidden) + el-popover(placement='right' width='300px' trigger='click') + img.x-link.x-user-badge( + slot='reference' + v-lazy='badge.badgeImageUrl' + style='flex: none; height: 32px; width: 32px; border-radius: 3px; object-fit: cover; margin-top: 5px; margin-right: 5px' + :class='{ "x-user-badge-hidden": badge.hidden }') + img.x-link( + v-lazy='badge.badgeImageUrl' + style='width: 300px' + @click='showFullscreenImageDialog(badge.badgeImageUrl)') br - div(style="display:block;width:300px;word-break:normal") + div(style='display: block; width: 300px; word-break: normal') span {{ badge.badgeName }} br - span.x-grey(style="font-size:12px") {{ badge.badgeDescription }} + span.x-grey(style='font-size: 12px') {{ badge.badgeDescription }} br - span.x-grey(v-if="badge.assignedAt" style="font-family:monospace;font-size:12px") {{ $t('dialog.user.badges.assigned') }}: {{ badge.assignedAt | formatDate('long') }} - template(v-if="userDialog.id === API.currentUser.id") + span.x-grey( + v-if='badge.assignedAt' + style='font-family: monospace; font-size: 12px') {{ $t('dialog.user.badges.assigned') }}: {{ badge.assignedAt | formatDate('long') }} + template(v-if='userDialog.id === API.currentUser.id') br - el-checkbox(@change="toggleBadgeVisibility(badge)" v-model="badge.hidden" style="margin-top:5px") {{ $t('dialog.user.badges.hidden') }} + el-checkbox( + @change='toggleBadgeVisibility(badge)' + v-model='badge.hidden' + style='margin-top: 5px') {{ $t('dialog.user.badges.hidden') }} br - el-checkbox(@change="toggleBadgeShowcased(badge)" v-model="badge.showcased" style="margin-top:5px") {{ $t('dialog.user.badges.showcased') }} - div(style="margin-top:5px") - span(v-text="userDialog.ref.statusDescription" style="font-size:12px") - div(v-if="userDialog.ref.userIcon" style="flex:none;margin-right:10px") - el-popover(placement="right" width="500px" trigger="click") - img.x-link(slot="reference" v-lazy="userDialog.ref.userIcon" style="flex:none;width:120px;height:120px;border-radius:12px;object-fit:cover") - img.x-link(v-lazy="userDialog.ref.userIcon" style="height:500px" @click="showFullscreenImageDialog(userDialog.ref.userIcon)") - div(style="flex:none") - template(v-if="(API.currentUser.id !== userDialog.ref.id && userDialog.isFriend) || userDialog.isFavorite") - el-tooltip(v-if="userDialog.isFavorite" placement="top" :content="$t('dialog.user.actions.unfavorite_tooltip')" :disabled="hideTooltips") - el-button(@click="userDialogCommand('Add Favorite')" type="warning" icon="el-icon-star-on" circle) - el-tooltip(v-else placement="top" :content="$t('dialog.user.actions.favorite_tooltip')" :disabled="hideTooltips") - el-button(type="default" @click="userDialogCommand('Add Favorite')" icon="el-icon-star-off" circle) - el-dropdown(trigger="click" @command="userDialogCommand" size="small") - el-button(:type="(userDialog.incomingRequest || userDialog.outgoingRequest) ? 'success' : (userDialog.isBlock || userDialog.isMute) ? 'danger' : 'default'" icon="el-icon-more" circle style="margin-left:5px") - el-dropdown-menu(#default="dropdown") - el-dropdown-item(icon="el-icon-refresh" command="Refresh") {{ $t('dialog.user.actions.refresh') }} - el-dropdown-item(icon="el-icon-share" command="Share") {{ $t('dialog.user.actions.share') }} - template(v-if="userDialog.ref.id === API.currentUser.id") - el-dropdown-item(icon="el-icon-picture-outline" command="Manage Gallery" divided) {{ $t('dialog.user.actions.manage_gallery_icon') }} - el-dropdown-item(icon="el-icon-s-custom" command="Show Avatar Author") {{ $t('dialog.user.actions.show_avatar_author') }} - el-dropdown-item(icon="el-icon-s-custom" command="Show Fallback Avatar Details") {{ $t('dialog.user.actions.show_fallback_avatar') }} - el-dropdown-item(icon="el-icon-edit" command="Edit Social Status" divided) {{ $t('dialog.user.actions.edit_status') }} - el-dropdown-item(icon="el-icon-edit" command="Edit Language") {{ $t('dialog.user.actions.edit_language') }} - el-dropdown-item(icon="el-icon-edit" command="Edit Bio") {{ $t('dialog.user.actions.edit_bio') }} - el-dropdown-item(icon="el-icon-edit" command="Edit Pronouns") {{ $t('dialog.user.actions.edit_pronouns') }} - el-dropdown-item(icon="el-icon-switch-button" command="Logout" divided) {{ $t('dialog.user.actions.logout') }} + el-checkbox( + @change='toggleBadgeShowcased(badge)' + v-model='badge.showcased' + style='margin-top: 5px') {{ $t('dialog.user.badges.showcased') }} + div(style='margin-top: 5px') + span(v-text='userDialog.ref.statusDescription' style='font-size: 12px') + div(v-if='userDialog.ref.userIcon' style='flex: none; margin-right: 10px') + el-popover(placement='right' width='500px' trigger='click') + img.x-link( + slot='reference' + v-lazy='userDialog.ref.userIcon' + style='flex: none; width: 120px; height: 120px; border-radius: 12px; object-fit: cover') + img.x-link( + v-lazy='userDialog.ref.userIcon' + style='height: 500px' + @click='showFullscreenImageDialog(userDialog.ref.userIcon)') + div(style='flex: none') + template( + v-if='(API.currentUser.id !== userDialog.ref.id && userDialog.isFriend) || userDialog.isFavorite') + el-tooltip( + v-if='userDialog.isFavorite' + placement='top' + :content='$t("dialog.user.actions.unfavorite_tooltip")' + :disabled='hideTooltips') + el-button( + @click='userDialogCommand("Add Favorite")' + type='warning' + icon='el-icon-star-on' + circle) + el-tooltip( + v-else + placement='top' + :content='$t("dialog.user.actions.favorite_tooltip")' + :disabled='hideTooltips') + el-button( + type='default' + @click='userDialogCommand("Add Favorite")' + icon='el-icon-star-off' + circle) + el-dropdown(trigger='click' @command='userDialogCommand' size='small') + el-button( + :type='userDialog.incomingRequest || userDialog.outgoingRequest ? "success" : userDialog.isBlock || userDialog.isMute ? "danger" : "default"' + icon='el-icon-more' + circle + style='margin-left: 5px') + el-dropdown-menu(#default='dropdown') + el-dropdown-item(icon='el-icon-refresh' command='Refresh') {{ $t('dialog.user.actions.refresh') }} + el-dropdown-item(icon='el-icon-share' command='Share') {{ $t('dialog.user.actions.share') }} + template(v-if='userDialog.ref.id === API.currentUser.id') + el-dropdown-item(icon='el-icon-picture-outline' command='Manage Gallery' divided) {{ $t('dialog.user.actions.manage_gallery_icon') }} + el-dropdown-item(icon='el-icon-s-custom' command='Show Avatar Author') {{ $t('dialog.user.actions.show_avatar_author') }} + el-dropdown-item(icon='el-icon-s-custom' command='Show Fallback Avatar Details') {{ $t('dialog.user.actions.show_fallback_avatar') }} + el-dropdown-item(icon='el-icon-edit' command='Edit Social Status' divided) {{ $t('dialog.user.actions.edit_status') }} + el-dropdown-item(icon='el-icon-edit' command='Edit Language') {{ $t('dialog.user.actions.edit_language') }} + el-dropdown-item(icon='el-icon-edit' command='Edit Bio') {{ $t('dialog.user.actions.edit_bio') }} + el-dropdown-item(icon='el-icon-edit' command='Edit Pronouns') {{ $t('dialog.user.actions.edit_pronouns') }} + el-dropdown-item(icon='el-icon-switch-button' command='Logout' divided) {{ $t('dialog.user.actions.logout') }} template(v-else) - template(v-if="userDialog.isFriend") - el-dropdown-item(icon="el-icon-postcard" command="Request Invite" divided) {{ $t('dialog.user.actions.request_invite') }} - el-dropdown-item(icon="el-icon-postcard" command="Request Invite Message") {{ $t('dialog.user.actions.request_invite_with_message') }} - template(v-if="lastLocation.location && isGameRunning && checkCanInvite(lastLocation.location)") - el-dropdown-item(icon="el-icon-message" command="Invite") {{ $t('dialog.user.actions.invite') }} - el-dropdown-item(icon="el-icon-message" command="Invite Message") {{ $t('dialog.user.actions.invite_with_message') }} - template(v-else-if="userDialog.incomingRequest") - el-dropdown-item(icon="el-icon-check" command="Accept Friend Request") {{ $t('dialog.user.actions.accept_friend_request') }} - el-dropdown-item(icon="el-icon-close" command="Decline Friend Request") {{ $t('dialog.user.actions.decline_friend_request') }} - el-dropdown-item(v-else-if="userDialog.outgoingRequest" icon="el-icon-close" command="Cancel Friend Request") {{ $t('dialog.user.actions.cancel_friend_request') }} - el-dropdown-item(v-else icon="el-icon-plus" command="Send Friend Request") {{ $t('dialog.user.actions.send_friend_request') }} - el-dropdown-item(icon="el-icon-message" command="Invite To Group") {{ $t('dialog.user.actions.invite_to_group') }} + template(v-if='userDialog.isFriend') + el-dropdown-item(icon='el-icon-postcard' command='Request Invite' divided) {{ $t('dialog.user.actions.request_invite') }} + el-dropdown-item(icon='el-icon-postcard' command='Request Invite Message') {{ $t('dialog.user.actions.request_invite_with_message') }} + template( + v-if='lastLocation.location && isGameRunning && checkCanInvite(lastLocation.location)') + el-dropdown-item(icon='el-icon-message' command='Invite') {{ $t('dialog.user.actions.invite') }} + el-dropdown-item(icon='el-icon-message' command='Invite Message') {{ $t('dialog.user.actions.invite_with_message') }} + template(v-else-if='userDialog.incomingRequest') + el-dropdown-item(icon='el-icon-check' command='Accept Friend Request') {{ $t('dialog.user.actions.accept_friend_request') }} + el-dropdown-item(icon='el-icon-close' command='Decline Friend Request') {{ $t('dialog.user.actions.decline_friend_request') }} + el-dropdown-item( + v-else-if='userDialog.outgoingRequest' + icon='el-icon-close' + command='Cancel Friend Request') {{ $t('dialog.user.actions.cancel_friend_request') }} + el-dropdown-item(v-else icon='el-icon-plus' command='Send Friend Request') {{ $t('dialog.user.actions.send_friend_request') }} + el-dropdown-item(icon='el-icon-message' command='Invite To Group') {{ $t('dialog.user.actions.invite_to_group') }} //- el-dropdown-item(icon="el-icon-thumb" command="Send Boop" :disabled="!API.currentUser.isBoopingEnabled") {{ $t('dialog.user.actions.send_boop') }} - el-dropdown-item(icon="el-icon-s-custom" command="Show Avatar Author" divided) {{ $t('dialog.user.actions.show_avatar_author') }} - el-dropdown-item(icon="el-icon-s-custom" command="Show Fallback Avatar Details") {{ $t('dialog.user.actions.show_fallback_avatar') }} - el-dropdown-item(icon="el-icon-tickets" command="Previous Instances") {{ $t('dialog.user.actions.show_previous_instances') }} - el-dropdown-item(v-if="userDialog.ref.currentAvatarImageUrl" icon="el-icon-picture-outline" command="Previous Images") {{ $t('dialog.user.actions.show_previous_images') }} - el-dropdown-item(v-if="userDialog.isBlock" icon="el-icon-circle-check" command="Moderation Unblock" divided style="color:#F56C6C") {{ $t('dialog.user.actions.moderation_unblock') }} - el-dropdown-item(v-else icon="el-icon-circle-close" command="Moderation Block" divided :disabled="userDialog.ref.$isModerator") {{ $t('dialog.user.actions.moderation_block') }} - el-dropdown-item(v-if="userDialog.isMute" icon="el-icon-microphone" command="Moderation Unmute" style="color:#F56C6C") {{ $t('dialog.user.actions.moderation_unmute') }} - el-dropdown-item(v-else icon="el-icon-turn-off-microphone" command="Moderation Mute" :disabled="userDialog.ref.$isModerator") {{ $t('dialog.user.actions.moderation_mute') }} - el-dropdown-item(v-if="userDialog.isMuteChat" icon="el-icon-chat-line-round" command="Moderation Enable Chatbox" style="color:#F56C6C") {{ $t('dialog.user.actions.moderation_enable_chatbox') }} - el-dropdown-item(v-else icon="el-icon-chat-dot-round" command="Moderation Disable Chatbox") {{ $t('dialog.user.actions.moderation_disable_chatbox') }} - el-dropdown-item(icon="el-icon-user-solid" command="Show Avatar") - i.el-icon-check.el-icon--left(v-if="userDialog.isShowAvatar") + el-dropdown-item(icon='el-icon-s-custom' command='Show Avatar Author' divided) {{ $t('dialog.user.actions.show_avatar_author') }} + el-dropdown-item(icon='el-icon-s-custom' command='Show Fallback Avatar Details') {{ $t('dialog.user.actions.show_fallback_avatar') }} + el-dropdown-item(icon='el-icon-tickets' command='Previous Instances') {{ $t('dialog.user.actions.show_previous_instances') }} + el-dropdown-item( + v-if='userDialog.ref.currentAvatarImageUrl' + icon='el-icon-picture-outline' + command='Previous Images') {{ $t('dialog.user.actions.show_previous_images') }} + el-dropdown-item( + v-if='userDialog.isBlock' + icon='el-icon-circle-check' + command='Moderation Unblock' + divided + style='color: #f56c6c') {{ $t('dialog.user.actions.moderation_unblock') }} + el-dropdown-item( + v-else + icon='el-icon-circle-close' + command='Moderation Block' + divided + :disabled='userDialog.ref.$isModerator') {{ $t('dialog.user.actions.moderation_block') }} + el-dropdown-item( + v-if='userDialog.isMute' + icon='el-icon-microphone' + command='Moderation Unmute' + style='color: #f56c6c') {{ $t('dialog.user.actions.moderation_unmute') }} + el-dropdown-item( + v-else + icon='el-icon-turn-off-microphone' + command='Moderation Mute' + :disabled='userDialog.ref.$isModerator') {{ $t('dialog.user.actions.moderation_mute') }} + el-dropdown-item( + v-if='userDialog.isMuteChat' + icon='el-icon-chat-line-round' + command='Moderation Enable Chatbox' + style='color: #f56c6c') {{ $t('dialog.user.actions.moderation_enable_chatbox') }} + el-dropdown-item( + v-else + icon='el-icon-chat-dot-round' + command='Moderation Disable Chatbox') {{ $t('dialog.user.actions.moderation_disable_chatbox') }} + el-dropdown-item(icon='el-icon-user-solid' command='Show Avatar') + i.el-icon-check.el-icon--left(v-if='userDialog.isShowAvatar') span {{ $t('dialog.user.actions.moderation_show_avatar') }} - el-dropdown-item(icon="el-icon-user" command="Hide Avatar") - i.el-icon-check.el-icon--left(v-if="userDialog.isHideAvatar") + el-dropdown-item(icon='el-icon-user' command='Hide Avatar') + i.el-icon-check.el-icon--left(v-if='userDialog.isHideAvatar') span {{ $t('dialog.user.actions.moderation_hide_avatar') }} - el-dropdown-item(v-if="userDialog.isInteractOff" icon="el-icon-thumb" command="Moderation Enable Avatar Interaction" style="color:#F56C6C") {{ $t('dialog.user.actions.moderation_enable_avatar_interaction') }} - el-dropdown-item(v-else icon="el-icon-circle-close" command="Moderation Disable Avatar Interaction") {{ $t('dialog.user.actions.moderation_disable_avatar_interaction') }} - el-dropdown-item(icon="el-icon-s-flag" command="Report Hacking" :disabled="userDialog.ref.$isModerator") {{ $t('dialog.user.actions.report_hacking') }} - template(v-if="userDialog.isFriend") - el-dropdown-item(icon="el-icon-delete" command="Unfriend" divided style="color:#F56C6C") {{ $t('dialog.user.actions.unfriend') }} - el-tabs(ref="userDialogTabs" @tab-click="userDialogTabClick") - el-tab-pane(:label="$t('dialog.user.info.header')") - template(v-if="isFriendOnline(userDialog.friend) || API.currentUser.id === userDialog.id") - div(v-if="userDialog.ref.location" style="display:flex;flex-direction:column;margin-bottom:10px;padding-bottom:10px;border-bottom:1px solid #e4e7ed14") - div(style="flex:none") - template(v-if="isRealInstance(userDialog.$location.tag)") - el-tooltip(placement="top" :content="$t('dialog.user.info.launch_invite_tooltip')" :disabled="hideTooltips") - launch(:location="userDialog.$location.tag") - el-tooltip(placement="top" :content="$t('dialog.user.info.self_invite_tooltip')" :disabled="hideTooltips") - invite-yourself(:location="userDialog.$location.tag" :shortname="userDialog.$location.shortName" style="margin-left:5px") - el-tooltip(placement="top" :content="$t('dialog.user.info.refresh_instance_info')" :disabled="hideTooltips") - el-button(@click="refreshInstancePlayerCount(userDialog.$location.tag)" size="mini" icon="el-icon-refresh" style="margin-left:5px" circle) - last-join(:location="userDialog.$location.tag" :currentlocation="lastLocation.location") - instance-info(:location="userDialog.$location.tag" :instance="userDialog.instance.ref" :friendcount="userDialog.instance.friendCount" :updateelement="updateInstanceInfo") - location(:location="userDialog.ref.location" :traveling="userDialog.ref.travelingToLocation" style="display:block;margin-top:5px") - .x-friend-list(style="flex:1;margin-top:10px;max-height:150px") - .x-friend-item(v-if="userDialog.$location.userId" @click="showUserDialog(userDialog.$location.userId)" class="x-friend-item-border") - template(v-if="userDialog.$location.user") - .avatar(:class="userStatusClass(userDialog.$location.user)") - img(v-lazy="userImage(userDialog.$location.user)") + el-dropdown-item( + v-if='userDialog.isInteractOff' + icon='el-icon-thumb' + command='Moderation Enable Avatar Interaction' + style='color: #f56c6c') {{ $t('dialog.user.actions.moderation_enable_avatar_interaction') }} + el-dropdown-item( + v-else + icon='el-icon-circle-close' + command='Moderation Disable Avatar Interaction') {{ $t('dialog.user.actions.moderation_disable_avatar_interaction') }} + el-dropdown-item( + icon='el-icon-s-flag' + command='Report Hacking' + :disabled='userDialog.ref.$isModerator') {{ $t('dialog.user.actions.report_hacking') }} + template(v-if='userDialog.isFriend') + el-dropdown-item( + icon='el-icon-delete' + command='Unfriend' + divided + style='color: #f56c6c') {{ $t('dialog.user.actions.unfriend') }} + el-tabs(ref='userDialogTabs' @tab-click='userDialogTabClick') + el-tab-pane(:label='$t("dialog.user.info.header")') + template(v-if='isFriendOnline(userDialog.friend) || API.currentUser.id === userDialog.id') + div( + v-if='userDialog.ref.location' + style='display: flex; flex-direction: column; margin-bottom: 10px; padding-bottom: 10px; border-bottom: 1px solid #e4e7ed14') + div(style='flex: none') + template(v-if='isRealInstance(userDialog.$location.tag)') + el-tooltip( + placement='top' + :content='$t("dialog.user.info.launch_invite_tooltip")' + :disabled='hideTooltips') + launch(:location='userDialog.$location.tag') + el-tooltip( + placement='top' + :content='$t("dialog.user.info.self_invite_tooltip")' + :disabled='hideTooltips') + invite-yourself( + :location='userDialog.$location.tag' + :shortname='userDialog.$location.shortName' + style='margin-left: 5px') + el-tooltip( + placement='top' + :content='$t("dialog.user.info.refresh_instance_info")' + :disabled='hideTooltips') + el-button( + @click='refreshInstancePlayerCount(userDialog.$location.tag)' + size='mini' + icon='el-icon-refresh' + style='margin-left: 5px' + circle) + last-join( + :location='userDialog.$location.tag' + :currentlocation='lastLocation.location') + instance-info( + :location='userDialog.$location.tag' + :instance='userDialog.instance.ref' + :friendcount='userDialog.instance.friendCount' + :updateelement='updateInstanceInfo') + location( + :location='userDialog.ref.location' + :traveling='userDialog.ref.travelingToLocation' + style='display: block; margin-top: 5px') + .x-friend-list(style='flex: 1; margin-top: 10px; max-height: 150px') + .x-friend-item.x-friend-item-border( + v-if='userDialog.$location.userId' + @click='showUserDialog(userDialog.$location.userId)') + template(v-if='userDialog.$location.user') + .avatar(:class='userStatusClass(userDialog.$location.user)') + img(v-lazy='userImage(userDialog.$location.user)') .detail - span.name(v-text="userDialog.$location.user.displayName" :style="{'color':userDialog.$location.user.$userColour}") + span.name( + v-text='userDialog.$location.user.displayName' + :style='{ color: userDialog.$location.user.$userColour }') span.extra {{ $t('dialog.user.info.instance_creator') }} - span(v-else v-text="userDialog.$location.userId") - .x-friend-item(v-for="user in userDialog.users" :key="user.id" @click="showUserDialog(user.id)" class="x-friend-item-border") - .avatar(:class="userStatusClass(user)") - img(v-lazy="userImage(user)") + span(v-else v-text='userDialog.$location.userId') + .x-friend-item.x-friend-item-border( + v-for='user in userDialog.users' + :key='user.id' + @click='showUserDialog(user.id)') + .avatar(:class='userStatusClass(user)') + img(v-lazy='userImage(user)') .detail - span.name(v-text="user.displayName" :style="{'color':user.$userColour}") - span.extra(v-if="user.location === 'traveling'") - i.el-icon-loading(style="margin-right:5px") - timer(:epoch="user.$travelingToTime") + span.name(v-text='user.displayName' :style='{ color: user.$userColour }') + span.extra(v-if='user.location === "traveling"') + i.el-icon-loading(style='margin-right: 5px') + timer(:epoch='user.$travelingToTime') span.extra(v-else) - timer(:epoch="user.$location_at") - .x-friend-list(style="max-height:none") - .x-friend-item(v-if="!hideUserNotes" style="width:100%;cursor:default") + timer(:epoch='user.$location_at') + .x-friend-list(style='max-height: none') + .x-friend-item(v-if='!hideUserNotes' style='width: 100%; cursor: default') .detail span.name {{ $t('dialog.user.info.note') }} - el-input(v-model="userDialog.note" type="textarea" maxlength="256" show-word-limit :rows="2" :autosize="{ minRows: 1, maxRows: 20 }" @change="checkNote(userDialog.ref, userDialog.note)" @input="cleanNote(userDialog.note)" :placeholder="$t('dialog.user.info.note_placeholder')" size="mini" resize="none") - div(style="float:right") - i.el-icon-loading(v-if="userDialog.noteSaving" style="margin-left:5px") - i.el-icon-more-outline(v-else-if="userDialog.note !== userDialog.ref.note" style="margin-left:5px") - el-button(v-if="userDialog.note" type="text" icon="el-icon-delete" size="mini" @click="deleteNote(userDialog.id)" style="margin-left:5px") - .x-friend-item(v-if="!hideUserMemos" style="width:100%;cursor:default") + el-input( + v-model='userDialog.note' + type='textarea' + maxlength='256' + show-word-limit + :rows='2' + :autosize='{ minRows: 1, maxRows: 20 }' + @change='checkNote(userDialog.ref, userDialog.note)' + @input='cleanNote(userDialog.note)' + :placeholder='$t("dialog.user.info.note_placeholder")' + size='mini' + resize='none') + div(style='float: right') + i.el-icon-loading(v-if='userDialog.noteSaving' style='margin-left: 5px') + i.el-icon-more-outline( + v-else-if='userDialog.note !== userDialog.ref.note' + style='margin-left: 5px') + el-button( + v-if='userDialog.note' + type='text' + icon='el-icon-delete' + size='mini' + @click='deleteNote(userDialog.id)' + style='margin-left: 5px') + .x-friend-item(v-if='!hideUserMemos' style='width: 100%; cursor: default') .detail span.name {{ $t('dialog.user.info.memo') }} - el-input.extra(v-model="userDialog.memo" @change="onUserMemoChange" type="textarea" :rows="2" :autosize="{ minRows: 1, maxRows: 20 }" :placeholder="$t('dialog.user.info.memo_placeholder')" size="mini" resize="none") - .x-friend-item(style="width:100%;cursor:default") + el-input.extra( + v-model='userDialog.memo' + @change='onUserMemoChange' + type='textarea' + :rows='2' + :autosize='{ minRows: 1, maxRows: 20 }' + :placeholder='$t("dialog.user.info.memo_placeholder")' + size='mini' + resize='none') + .x-friend-item(style='width: 100%; cursor: default') .detail - span.name(v-if="userDialog.id !== API.currentUser.id && userDialog.ref.profilePicOverride && userDialog.ref.currentAvatarImageUrl") {{ $t('dialog.user.info.avatar_info_last_seen') }} + span.name( + v-if='userDialog.id !== API.currentUser.id && userDialog.ref.profilePicOverride && userDialog.ref.currentAvatarImageUrl') {{ $t('dialog.user.info.avatar_info_last_seen') }} span.name(v-else) {{ $t('dialog.user.info.avatar_info') }} .extra - avatar-info(:imageurl="userDialog.ref.currentAvatarImageUrl" :userid="userDialog.id" :avatartags="userDialog.ref.currentAvatarTags") - .x-friend-item(style="width:100%;cursor:default") + avatar-info( + :imageurl='userDialog.ref.currentAvatarImageUrl' + :userid='userDialog.id' + :avatartags='userDialog.ref.currentAvatarTags') + .x-friend-item(style='width: 100%; cursor: default') .detail - span.name(style="margin-bottom:5px") {{ $t('dialog.user.info.represented_group') }} - .extra(v-if="userDialog.representedGroup?.isRepresenting") - div(style="display:inline-block;flex:none;margin-right:5px") - el-popover(placement="right" width="500px" trigger="click") - img.x-link(slot="reference" v-lazy="userDialog.representedGroup.iconUrl" style="flex:none;width:60px;height:60px;border-radius:4px;object-fit:cover") - img.x-link(v-lazy="userDialog.representedGroup.iconUrl" style="height:500px" @click="showFullscreenImageDialog(userDialog.representedGroup.iconUrl)") - span(style="vertical-align:top;cursor:pointer" @click="showGroupDialog(userDialog.representedGroup.groupId)") - span(v-if="userDialog.representedGroup.ownerId === userDialog.id" style="margin-right:5px") 👑 - span(v-text="userDialog.representedGroup.name" style="margin-right:5px") + span.name(style='margin-bottom: 5px') {{ $t('dialog.user.info.represented_group') }} + .extra(v-if='userDialog.representedGroup?.isRepresenting') + div(style='display: inline-block; flex: none; margin-right: 5px') + el-popover(placement='right' width='500px' trigger='click') + img.x-link( + slot='reference' + v-lazy='userDialog.representedGroup.iconUrl' + style='flex: none; width: 60px; height: 60px; border-radius: 4px; object-fit: cover') + img.x-link( + v-lazy='userDialog.representedGroup.iconUrl' + style='height: 500px' + @click='showFullscreenImageDialog(userDialog.representedGroup.iconUrl)') + span( + style='vertical-align: top; cursor: pointer' + @click='showGroupDialog(userDialog.representedGroup.groupId)') + span( + v-if='userDialog.representedGroup.ownerId === userDialog.id' + style='margin-right: 5px') 👑 + span(v-text='userDialog.representedGroup.name' style='margin-right: 5px') span ({{ userDialog.representedGroup.memberCount }}) .extra(v-else) - - .x-friend-item(style="width:100%;cursor:default") + .x-friend-item(style='width: 100%; cursor: default') .detail span.name {{ $t('dialog.user.info.bio') }} - pre.extra(style="font-family:inherit;font-size:12px;white-space:pre-wrap;margin:0 0.5em 0 0") {{ userDialog.ref.bio || '-' }} - div(v-if="userDialog.id === API.currentUser.id" style="float:right") - el-button(type="text" icon="el-icon-edit" size="mini" @click="showBioDialog" style="margin-left:5px") - div(style="margin-top:5px") - el-tooltip(v-if="link" v-for="(link, index) in userDialog.ref.bioLinks" :key="index") + pre.extra( + style='font-family: inherit; font-size: 12px; white-space: pre-wrap; margin: 0 0.5em 0 0') {{ userDialog.ref.bio || '-' }} + div(v-if='userDialog.id === API.currentUser.id' style='float: right') + el-button( + type='text' + icon='el-icon-edit' + size='mini' + @click='showBioDialog' + style='margin-left: 5px') + div(style='margin-top: 5px') + el-tooltip( + v-if='link' + v-for='(link, index) in userDialog.ref.bioLinks' + :key='index') template(#content) - span(v-text="link") - img(:src="getFaviconUrl(link)" onerror="this.onerror=null;this.class='el-icon-error'" style="width:16px;height:16px;vertical-align:middle;margin-right:5px;cursor:pointer" @click.stop="openExternalLink(link)") - template(v-if="API.currentUser.id !== userDialog.id") - .x-friend-item(style="cursor:default") + span(v-text='link') + img( + :src='getFaviconUrl(link)' + onerror='this.onerror=null;this.class=\'el-icon-error\'' + style='width: 16px; height: 16px; vertical-align: middle; margin-right: 5px; cursor: pointer' + @click.stop='openExternalLink(link)') + template(v-if='API.currentUser.id !== userDialog.id') + .x-friend-item(style='cursor: default') .detail span.name {{ $t('dialog.user.info.last_seen') }} - el-tooltip(v-if="!hideTooltips" placement="top" style="margin-left:5px" :content="$t('dialog.user.info.accuracy_notice')") + el-tooltip( + v-if='!hideTooltips' + placement='top' + style='margin-left: 5px' + :content='$t("dialog.user.info.accuracy_notice")') i.el-icon-warning span.extra {{ userDialog.lastSeen | formatDate('long') }} - .x-friend-item(@click="showPreviousInstancesUserDialog(userDialog.ref)") + .x-friend-item(@click='showPreviousInstancesUserDialog(userDialog.ref)') .detail span.name {{ $t('dialog.user.info.join_count') }} - el-tooltip(v-if="!hideTooltips" placement="top" style="margin-left:5px" :content="$t('dialog.user.info.accuracy_notice')") + el-tooltip( + v-if='!hideTooltips' + placement='top' + style='margin-left: 5px' + :content='$t("dialog.user.info.accuracy_notice")') i.el-icon-warning - span.extra(v-if="userDialog.joinCount === 0") - - span.extra(v-else v-text="userDialog.joinCount") - .x-friend-item(style="cursor:default") + span.extra(v-if='userDialog.joinCount === 0') - + span.extra(v-else v-text='userDialog.joinCount') + .x-friend-item(style='cursor: default') .detail span.name {{ $t('dialog.user.info.time_together') }} - el-tooltip(v-if="!hideTooltips" placement="top" style="margin-left:5px" :content="$t('dialog.user.info.accuracy_notice')") + el-tooltip( + v-if='!hideTooltips' + placement='top' + style='margin-left: 5px' + :content='$t("dialog.user.info.accuracy_notice")') i.el-icon-warning - span.extra(v-if="userDialog.timeSpent === 0") - + span.extra(v-if='userDialog.timeSpent === 0') - span.extra(v-else) {{ timeToText(userDialog.timeSpent) }} template(v-else) - .x-friend-item(@click="showPreviousInstancesUserDialog(userDialog.ref)") + .x-friend-item(@click='showPreviousInstancesUserDialog(userDialog.ref)') .detail span.name {{ $t('dialog.user.info.play_time') }} - el-tooltip(v-if="!hideTooltips" placement="top" style="margin-left:5px" :content="$t('dialog.user.info.accuracy_notice')") + el-tooltip( + v-if='!hideTooltips' + placement='top' + style='margin-left: 5px' + :content='$t("dialog.user.info.accuracy_notice")') i.el-icon-warning - span.extra(v-if="userDialog.timeSpent === 0") - + span.extra(v-if='userDialog.timeSpent === 0') - span.extra(v-else) {{ timeToText(userDialog.timeSpent) }} - .x-friend-item(style="cursor:default") - el-tooltip(placement="top") + .x-friend-item(style='cursor: default') + el-tooltip(placement='top') template(#content) span {{ userOnlineForTimestamp(userDialog) | formatDate('short') }} .detail - span.name(v-if="userDialog.ref.state === 'online' && userDialog.ref.$online_for") {{ $t('dialog.user.info.online_for') }} - el-tooltip(v-if="!hideTooltips" placement="top" style="margin-left:5px" :content="$t('dialog.user.info.accuracy_notice')") + span.name(v-if='userDialog.ref.state === "online" && userDialog.ref.$online_for') {{ $t('dialog.user.info.online_for') }} + el-tooltip( + v-if='!hideTooltips' + placement='top' + style='margin-left: 5px' + :content='$t("dialog.user.info.accuracy_notice")') i.el-icon-warning span.name(v-else) {{ $t('dialog.user.info.offline_for') }} - el-tooltip(v-if="!hideTooltips" placement="top" style="margin-left:5px" :content="$t('dialog.user.info.accuracy_notice')") + el-tooltip( + v-if='!hideTooltips' + placement='top' + style='margin-left: 5px' + :content='$t("dialog.user.info.accuracy_notice")') i.el-icon-warning span.extra {{ userOnlineFor(userDialog) }} - .x-friend-item(style="cursor:default") - el-tooltip(placement="top") + .x-friend-item(style='cursor: default') + el-tooltip(placement='top') template(#content) span {{ $t('dialog.user.info.last_login') }} {{ userDialog.ref.last_login | formatDate('short') }} .detail span.name {{ $t('dialog.user.info.last_activity') }} span.extra {{ userDialog.ref.last_activity | formatDate('long') }} - .x-friend-item(style="cursor:default") + .x-friend-item(style='cursor: default') .detail span.name {{ $t('dialog.user.info.date_joined') }} - span.extra(v-text="userDialog.ref.date_joined") - .x-friend-item(v-if="API.currentUser.id !== userDialog.id" style="cursor:default") - el-tooltip(placement="top") - template(#content v-if="userDialog.dateFriendedInfo.length") - template(v-for="ref in userDialog.dateFriendedInfo") + span.extra(v-text='userDialog.ref.date_joined') + .x-friend-item(v-if='API.currentUser.id !== userDialog.id' style='cursor: default') + el-tooltip(placement='top') + template(#content v-if='userDialog.dateFriendedInfo.length') + template(v-for='ref in userDialog.dateFriendedInfo') span {{ ref.type }}: {{ ref.created_at | formatDate('long') }} br template(#content v-else) span - .detail - span.name(v-if="userDialog.unFriended") {{ $t('dialog.user.info.unfriended') }} - el-tooltip(v-if="!hideTooltips" placement="top" style="margin-left:5px" :content="$t('dialog.user.info.accuracy_notice')") + span.name(v-if='userDialog.unFriended') {{ $t('dialog.user.info.unfriended') }} + el-tooltip( + v-if='!hideTooltips' + placement='top' + style='margin-left: 5px' + :content='$t("dialog.user.info.accuracy_notice")') i.el-icon-warning span.name(v-else) {{ $t('dialog.user.info.friended') }} - el-tooltip(v-if="!hideTooltips" placement="top" style="margin-left:5px" :content="$t('dialog.user.info.accuracy_notice')") + el-tooltip( + v-if='!hideTooltips' + placement='top' + style='margin-left: 5px' + :content='$t("dialog.user.info.accuracy_notice")') i.el-icon-warning span.extra {{ userDialog.dateFriended | formatDate('long') }} - template(v-if="API.currentUser.id === userDialog.id") - .x-friend-item(@click="toggleAvatarCopying") + template(v-if='API.currentUser.id === userDialog.id') + .x-friend-item(@click='toggleAvatarCopying') .detail span.name {{ $t('dialog.user.info.avatar_cloning') }} - span.extra(v-if="API.currentUser.allowAvatarCopying" style="color:#67C23A") {{ $t('dialog.user.info.avatar_cloning_allow') }} - span.extra(v-else style="color:#F56C6C") {{ $t('dialog.user.info.avatar_cloning_deny') }} + span.extra(v-if='API.currentUser.allowAvatarCopying' style='color: #67c23a') {{ $t('dialog.user.info.avatar_cloning_allow') }} + span.extra(v-else style='color: #f56c6c') {{ $t('dialog.user.info.avatar_cloning_deny') }} //- .x-friend-item(@click="toggleAllowBooping") //- .detail //- span.name {{ $t('dialog.user.info.booping') }} //- span.extra(v-if="API.currentUser.isBoopingEnabled" style="color:#67C23A") {{ $t('dialog.user.info.avatar_cloning_allow') }} //- span.extra(v-else style="color:#F56C6C") {{ $t('dialog.user.info.avatar_cloning_deny') }} template(v-else) - .x-friend-item(style="cursor:default") + .x-friend-item(style='cursor: default') .detail span.name {{ $t('dialog.user.info.avatar_cloning') }} - span.extra(v-if="userDialog.ref.allowAvatarCopying" style="color:#67C23A") {{ $t('dialog.user.info.avatar_cloning_allow') }} - span.extra(v-else style="color:#F56C6C") {{ $t('dialog.user.info.avatar_cloning_deny') }} - .x-friend-item(v-if="userDialog.ref.id === API.currentUser.id && API.currentUser.homeLocation" @click="showWorldDialog(API.currentUser.homeLocation)" style="width:100%") + span.extra(v-if='userDialog.ref.allowAvatarCopying' style='color: #67c23a') {{ $t('dialog.user.info.avatar_cloning_allow') }} + span.extra(v-else style='color: #f56c6c') {{ $t('dialog.user.info.avatar_cloning_deny') }} + .x-friend-item( + v-if='userDialog.ref.id === API.currentUser.id && API.currentUser.homeLocation' + @click='showWorldDialog(API.currentUser.homeLocation)' + style='width: 100%') .detail span.name {{ $t('dialog.user.info.home_location') }} span.extra - span(v-text="userDialog.$homeLocationName") - el-button(@click.stop="resetHome()" size="mini" icon="el-icon-delete" circle style="margin-left:5px") - .x-friend-item(style="width:100%;cursor:default") + span(v-text='userDialog.$homeLocationName') + el-button( + @click.stop='resetHome()' + size='mini' + icon='el-icon-delete' + circle + style='margin-left: 5px') + .x-friend-item(style='width: 100%; cursor: default') .detail span.name {{ $t('dialog.user.info.id') }} span.extra {{ userDialog.id }} - el-tooltip(placement="top" :content="$t('dialog.user.info.id_tooltip')" :disabled="hideTooltips") - el-dropdown(trigger="click" @click.native.stop size="mini" style="margin-left:5px") - el-button(type="default" icon="el-icon-s-order" size="mini" circle) - el-dropdown-menu(#default="dropdown") - el-dropdown-item(@click.native="copyUserId(userDialog.id)") {{ $t('dialog.user.info.copy_id') }} - el-dropdown-item(@click.native="copyUserURL(userDialog.id)") {{ $t('dialog.user.info.copy_url') }} - el-dropdown-item(@click.native="copyUserDisplayName(userDialog.ref.displayName)") {{ $t('dialog.user.info.copy_display_name') }} - el-tab-pane(:label="$t('dialog.user.groups.header')") - div(style="display:flex;align-items:center;justify-content:space-between") - div(style="display:flex;align-items:center") - el-button(type="default" :loading="userDialog.isGroupsLoading" @click="getUserGroups(userDialog.id)" size="mini" icon="el-icon-refresh" circle) - span(style="margin-left:5px") {{ $t('dialog.user.groups.total_count', { count: userGroups.groups.length }) }} - template(v-if="userDialogGroupEditMode") - span(style="margin-left:10px;color:#909399;font-size:10px") {{ $t('dialog.user.groups.hold_shift') }} - div(style="display:flex;align-items:center;") - template(v-if="!userDialogGroupEditMode") - span(style="margin-right:5px") {{ $t('dialog.user.groups.sort_by') }} - el-dropdown(@click.native.stop trigger="click" size="small" style="margin-right:5px" :disabled="userDialog.isGroupsLoading") - el-button(size="mini") + el-tooltip( + placement='top' + :content='$t("dialog.user.info.id_tooltip")' + :disabled='hideTooltips') + el-dropdown( + trigger='click' + @click.native.stop + size='mini' + style='margin-left: 5px') + el-button(type='default' icon='el-icon-s-order' size='mini' circle) + el-dropdown-menu(#default='dropdown') + el-dropdown-item(@click.native='copyUserId(userDialog.id)') {{ $t('dialog.user.info.copy_id') }} + el-dropdown-item(@click.native='copyUserURL(userDialog.id)') {{ $t('dialog.user.info.copy_url') }} + el-dropdown-item( + @click.native='copyUserDisplayName(userDialog.ref.displayName)') {{ $t('dialog.user.info.copy_display_name') }} + el-tab-pane(:label='$t("dialog.user.groups.header")') + div(style='display: flex; align-items: center; justify-content: space-between') + div(style='display: flex; align-items: center') + el-button( + type='default' + :loading='userDialog.isGroupsLoading' + @click='getUserGroups(userDialog.id)' + size='mini' + icon='el-icon-refresh' + circle) + span(style='margin-left: 5px') {{ $t('dialog.user.groups.total_count', { count: userGroups.groups.length }) }} + template(v-if='userDialogGroupEditMode') + span(style='margin-left: 10px; color: #909399; font-size: 10px') {{ $t('dialog.user.groups.hold_shift') }} + div(style='display: flex; align-items: center') + template(v-if='!userDialogGroupEditMode') + span(style='margin-right: 5px') {{ $t('dialog.user.groups.sort_by') }} + el-dropdown( + @click.native.stop + trigger='click' + size='small' + style='margin-right: 5px' + :disabled='userDialog.isGroupsLoading') + el-button(size='mini') span {{ userDialog.groupSorting.name }} #[i.el-icon-arrow-down.el-icon--right] - el-dropdown-menu(#default="dropdown") - el-dropdown-item(:disabled="item === userDialogGroupSortingOptions.inGame && userDialog.id !== API.currentUser.id" v-for="(item) in userDialogGroupSortingOptions" v-text="item.name" @click.native="setUserDialogGroupSorting(item)") - el-button(v-if="userDialogGroupEditMode" size="small" @click="exitEditModeCurrentUserGroups" icon="el-icon-edit" style="margin-right:5px;height:29px;padding:7px 15px;") {{ $t('dialog.user.groups.exit_edit_mode') }} - el-button(v-else-if="API.currentUser.id === userDialog.id" size="small" @click="editModeCurrentUserGroups" icon="el-icon-edit" style="margin-right:5px;height:29px;padding: 7px 15px;") {{ $t('dialog.user.groups.edit_mode') }} - div(v-loading="userDialog.isGroupsLoading" style="margin-top:10px") - template(v-if="userDialogGroupEditMode") - .x-friend-list(style="margin-top:10px;margin-bottom:15px;max-height:unset") - .x-friend-item(v-for="group in userDialogGroupEditGroups" :key="group.id" @click="showGroupDialog(group.id)" class="x-friend-item-border" style="width:100%") - div(@click.stop style="margin-right:3px;margin-left:5px") - el-button(@click="moveGroupUp(group.id)" size="mini" icon="el-icon-arrow-up" style="display:block;padding:7px;font-size:9px;margin-left:0") - el-button(@click="moveGroupDown(group.id)" size="mini" icon="el-icon-arrow-down" style="display:block;padding:7px;font-size:9px;margin-left:0") - div(@click.stop style="margin-right:10px") - el-button(@click="moveGroupTop(group.id)" size="mini" icon="el-icon-top" style="display:block;padding:7px;font-size:9px;margin-left:0") - el-button(@click="moveGroupBottom(group.id)" size="mini" icon="el-icon-bottom" style="display:block;padding:7px;font-size:9px;margin-left:0") + el-dropdown-menu(#default='dropdown') + el-dropdown-item( + :disabled='item === userDialogGroupSortingOptions.inGame && userDialog.id !== API.currentUser.id' + v-for='item in userDialogGroupSortingOptions' + v-text='item.name' + @click.native='setUserDialogGroupSorting(item)') + el-button( + v-if='userDialogGroupEditMode' + size='small' + @click='exitEditModeCurrentUserGroups' + icon='el-icon-edit' + style='margin-right: 5px; height: 29px; padding: 7px 15px') {{ $t('dialog.user.groups.exit_edit_mode') }} + el-button( + v-else-if='API.currentUser.id === userDialog.id' + size='small' + @click='editModeCurrentUserGroups' + icon='el-icon-edit' + style='margin-right: 5px; height: 29px; padding: 7px 15px') {{ $t('dialog.user.groups.edit_mode') }} + div(v-loading='userDialog.isGroupsLoading' style='margin-top: 10px') + template(v-if='userDialogGroupEditMode') + .x-friend-list(style='margin-top: 10px; margin-bottom: 15px; max-height: unset') + .x-friend-item.x-friend-item-border( + v-for='group in userDialogGroupEditGroups' + :key='group.id' + @click='showGroupDialog(group.id)' + style='width: 100%') + div(@click.stop style='margin-right: 3px; margin-left: 5px') + el-button( + @click='moveGroupUp(group.id)' + size='mini' + icon='el-icon-arrow-up' + style='display: block; padding: 7px; font-size: 9px; margin-left: 0') + el-button( + @click='moveGroupDown(group.id)' + size='mini' + icon='el-icon-arrow-down' + style='display: block; padding: 7px; font-size: 9px; margin-left: 0') + div(@click.stop style='margin-right: 10px') + el-button( + @click='moveGroupTop(group.id)' + size='mini' + icon='el-icon-top' + style='display: block; padding: 7px; font-size: 9px; margin-left: 0') + el-button( + @click='moveGroupBottom(group.id)' + size='mini' + icon='el-icon-bottom' + style='display: block; padding: 7px; font-size: 9px; margin-left: 0') .avatar - img(v-lazy="group.iconUrl") + img(v-lazy='group.iconUrl') .detail - span.name(v-text="group.name") + span.name(v-text='group.name') span.extra - el-tooltip(v-if="group.isRepresenting" placement="top" :content="$t('dialog.group.members.representing')") - i.el-icon-collection-tag(style="margin-right:5px") - el-tooltip(v-if="group.myMember.visibility !== 'visible'" placement="top") + el-tooltip( + v-if='group.isRepresenting' + placement='top' + :content='$t("dialog.group.members.representing")') + i.el-icon-collection-tag(style='margin-right: 5px') + el-tooltip(v-if='group.myMember.visibility !== "visible"' placement='top') template(#content) span {{ $t('dialog.group.members.visibility') }} {{ group.myMember.visibility }} - i.el-icon-view(style="margin-right:5px") + i.el-icon-view(style='margin-right: 5px') span ({{ group.memberCount }}) - el-dropdown(@click.native.stop :disabled="group.privacy !== 'default'" trigger="click" size="small" style="margin-right:5px") - el-button(size="mini") - span(v-if="group.myMember.visibility === 'visible'") {{ $t('dialog.group.tags.visible') }} - span(v-else-if="group.myMember.visibility === 'friends'") {{ $t('dialog.group.tags.friends') }} - span(v-else-if="group.myMember.visibility === 'hidden'") {{ $t('dialog.group.tags.hidden') }} + el-dropdown( + @click.native.stop + :disabled='group.privacy !== "default"' + trigger='click' + size='small' + style='margin-right: 5px') + el-button(size='mini') + span(v-if='group.myMember.visibility === "visible"') {{ $t('dialog.group.tags.visible') }} + span(v-else-if='group.myMember.visibility === "friends"') {{ $t('dialog.group.tags.friends') }} + span(v-else-if='group.myMember.visibility === "hidden"') {{ $t('dialog.group.tags.hidden') }} span(v-else) {{ group.myMember.visibility }} - i.el-icon-arrow-down.el-icon--right(style="margin-left:5px") + i.el-icon-arrow-down.el-icon--right(style='margin-left: 5px') el-dropdown-menu - el-dropdown-item(@click.native="setGroupVisibility(group.id, 'visible')") #[i.el-icon-check(v-if="group.myMember.visibility === 'visible'")] {{ $t('dialog.group.actions.visibility_everyone') }} - el-dropdown-item(@click.native="setGroupVisibility(group.id, 'friends')") #[i.el-icon-check(v-if="group.myMember.visibility === 'friends'")] {{ $t('dialog.group.actions.visibility_friends') }} - el-dropdown-item(@click.native="setGroupVisibility(group.id, 'hidden')") #[i.el-icon-check(v-if="group.myMember.visibility === 'hidden'")] {{ $t('dialog.group.actions.visibility_hidden') }} - + el-dropdown-item(@click.native='setGroupVisibility(group.id, "visible")') #[i.el-icon-check(v-if='group.myMember.visibility === "visible"')] {{ $t('dialog.group.actions.visibility_everyone') }} + el-dropdown-item(@click.native='setGroupVisibility(group.id, "friends")') #[i.el-icon-check(v-if='group.myMember.visibility === "friends"')] {{ $t('dialog.group.actions.visibility_friends') }} + el-dropdown-item(@click.native='setGroupVisibility(group.id, "hidden")') #[i.el-icon-check(v-if='group.myMember.visibility === "hidden"')] {{ $t('dialog.group.actions.visibility_hidden') }} + //- JSON is missing isSubscribedToAnnouncements, can't be implemented //- el-dropdown(@click.native.stop trigger="click" size="small" style="margin-right:5px") //- el-tooltip(placement="top" :disabled="hideTooltips") @@ -379,137 +756,248 @@ mixin userDialog() //- el-button(v-else circle @click.stop="setGroupSubscription(group.id, true)" size="mini") //- i.el-icon-chat-square(style="color:#f56c6c") - el-tooltip(placement="right" :content="$t('dialog.user.groups.leave_group_tooltip')" :disabled="hideTooltips") - el-button(v-if="shiftHeld" @click.stop="leaveGroupPrompt(group.id)" size="mini" icon="el-icon-close" circle style="color:#f56c6c;margin-left:5px") - el-button(v-else @click.stop="leaveGroupPrompt(group.id)" size="mini" icon="el-icon-delete" circle style="margin-left:5px") + el-tooltip( + placement='right' + :content='$t("dialog.user.groups.leave_group_tooltip")' + :disabled='hideTooltips') + el-button( + v-if='shiftHeld' + @click.stop='leaveGroupPrompt(group.id)' + size='mini' + icon='el-icon-close' + circle + style='color: #f56c6c; margin-left: 5px') + el-button( + v-else + @click.stop='leaveGroupPrompt(group.id)' + size='mini' + icon='el-icon-delete' + circle + style='margin-left: 5px') template(v-else) - template(v-if="userGroups.ownGroups.length > 0") - span(style="font-weight:bold;font-size:16px") {{ $t('dialog.user.groups.own_groups') }} - span(style="color:#909399;font-size:12px;margin-left:5px") {{ userGroups.ownGroups.length }}/{{ API.cachedConfig?.constants?.GROUPS?.MAX_OWNED }} - .x-friend-list(style="margin-top:10px;margin-bottom:15px;min-height:60px") - .x-friend-item(v-for="group in userGroups.ownGroups" :key="group.id" @click="showGroupDialog(group.id)" class="x-friend-item-border") + template(v-if='userGroups.ownGroups.length > 0') + span(style='font-weight: bold; font-size: 16px') {{ $t('dialog.user.groups.own_groups') }} + span(style='color: #909399; font-size: 12px; margin-left: 5px') {{ userGroups.ownGroups.length }}/{{ API.cachedConfig?.constants?.GROUPS?.MAX_OWNED }} + .x-friend-list(style='margin-top: 10px; margin-bottom: 15px; min-height: 60px') + .x-friend-item.x-friend-item-border( + v-for='group in userGroups.ownGroups' + :key='group.id' + @click='showGroupDialog(group.id)') .avatar - img(v-lazy="group.iconUrl") + img(v-lazy='group.iconUrl') .detail - span.name(v-text="group.name") + span.name(v-text='group.name') span.extra - el-tooltip(v-if="group.isRepresenting" placement="top" :content="$t('dialog.group.members.representing')") - i.el-icon-collection-tag(style="margin-right:5px") - el-tooltip(v-if="group.memberVisibility !== 'visible'" placement="top") + el-tooltip( + v-if='group.isRepresenting' + placement='top' + :content='$t("dialog.group.members.representing")') + i.el-icon-collection-tag(style='margin-right: 5px') + el-tooltip(v-if='group.memberVisibility !== "visible"' placement='top') template(#content) span {{ $t('dialog.group.members.visibility') }} {{ group.memberVisibility }} - i.el-icon-view(style="margin-right:5px") + i.el-icon-view(style='margin-right: 5px') span ({{ group.memberCount }}) - template(v-if="userGroups.mutualGroups.length > 0") - span(style="font-weight:bold;font-size:16px") {{ $t('dialog.user.groups.mutual_groups') }} - span(style="color:#909399;font-size:12px;margin-left:5px") {{ userGroups.mutualGroups.length }} - .x-friend-list(style="margin-top:10px;margin-bottom:15px;min-height:60px") - .x-friend-item(v-for="group in userGroups.mutualGroups" :key="group.id" @click="showGroupDialog(group.id)" class="x-friend-item-border") + template(v-if='userGroups.mutualGroups.length > 0') + span(style='font-weight: bold; font-size: 16px') {{ $t('dialog.user.groups.mutual_groups') }} + span(style='color: #909399; font-size: 12px; margin-left: 5px') {{ userGroups.mutualGroups.length }} + .x-friend-list(style='margin-top: 10px; margin-bottom: 15px; min-height: 60px') + .x-friend-item.x-friend-item-border( + v-for='group in userGroups.mutualGroups' + :key='group.id' + @click='showGroupDialog(group.id)') .avatar - img(v-lazy="group.iconUrl") + img(v-lazy='group.iconUrl') .detail - span.name(v-text="group.name") + span.name(v-text='group.name') span.extra - el-tooltip(v-if="group.isRepresenting" placement="top" :content="$t('dialog.group.members.representing')") - i.el-icon-collection-tag(style="margin-right:5px") - el-tooltip(v-if="group.memberVisibility !== 'visible'" placement="top") + el-tooltip( + v-if='group.isRepresenting' + placement='top' + :content='$t("dialog.group.members.representing")') + i.el-icon-collection-tag(style='margin-right: 5px') + el-tooltip(v-if='group.memberVisibility !== "visible"' placement='top') template(#content) span {{ $t('dialog.group.members.visibility') }} {{ group.memberVisibility }} - i.el-icon-view(style="margin-right:5px") + i.el-icon-view(style='margin-right: 5px') span ({{ group.memberCount }}) - template(v-if="userGroups.remainingGroups.length > 0") - span(style="font-weight:bold;font-size:16px") {{ $t('dialog.user.groups.groups') }} - span(style="color:#909399;font-size:12px;margin-left:5px") {{ userGroups.remainingGroups.length }} - template(v-if="API.currentUser.id === userDialog.id") - |/ - template(v-if="API.currentUser.$isVRCPlus") + template(v-if='userGroups.remainingGroups.length > 0') + span(style='font-weight: bold; font-size: 16px') {{ $t('dialog.user.groups.groups') }} + span(style='color: #909399; font-size: 12px; margin-left: 5px') {{ userGroups.remainingGroups.length }} + template(v-if='API.currentUser.id === userDialog.id') + | / + template(v-if='API.currentUser.$isVRCPlus') | {{ API.cachedConfig?.constants?.GROUPS?.MAX_JOINED_PLUS }} template(v-else) | {{ API.cachedConfig?.constants?.GROUPS?.MAX_JOINED }} - .x-friend-list(style="margin-top:10px;margin-bottom:15px;min-height:60px") - .x-friend-item(v-for="group in userGroups.remainingGroups" :key="group.id" @click="showGroupDialog(group.id)" class="x-friend-item-border") + .x-friend-list(style='margin-top: 10px; margin-bottom: 15px; min-height: 60px') + .x-friend-item.x-friend-item-border( + v-for='group in userGroups.remainingGroups' + :key='group.id' + @click='showGroupDialog(group.id)') .avatar - img(v-lazy="group.iconUrl") + img(v-lazy='group.iconUrl') .detail - span.name(v-text="group.name") + span.name(v-text='group.name') span.extra - el-tooltip(v-if="group.isRepresenting" placement="top" :content="$t('dialog.group.members.representing')") - i.el-icon-collection-tag(style="margin-right:5px") - el-tooltip(v-if="group.memberVisibility !== 'visible'" placement="top") + el-tooltip( + v-if='group.isRepresenting' + placement='top' + :content='$t("dialog.group.members.representing")') + i.el-icon-collection-tag(style='margin-right: 5px') + el-tooltip(v-if='group.memberVisibility !== "visible"' placement='top') template(#content) span {{ $t('dialog.group.members.visibility') }} {{ group.memberVisibility }} - i.el-icon-view(style="margin-right:5px") + i.el-icon-view(style='margin-right: 5px') span ({{ group.memberCount }}) - el-tab-pane(:label="$t('dialog.user.worlds.header')") - div(style="display:flex;align-items:center;justify-content:space-between") - div(style="display:flex;align-items:center;") - el-button(type="default" :loading="userDialog.isWorldsLoading" @click="refreshUserDialogWorlds()" size="mini" icon="el-icon-refresh" circle) - span(style="margin-left:5px") {{ $t('dialog.user.worlds.total_count', { count: userDialog.worlds.length }) }} - div(style="display:flex;align-items:center") - span(style="margin-right:5px") {{ $t('dialog.user.worlds.sort_by') }} - el-dropdown(@click.native.stop trigger="click" size="small" style="margin-right:5px" :disabled="userDialog.isWorldsLoading") - el-button(size="mini") + el-tab-pane(:label='$t("dialog.user.worlds.header")') + div(style='display: flex; align-items: center; justify-content: space-between') + div(style='display: flex; align-items: center') + el-button( + type='default' + :loading='userDialog.isWorldsLoading' + @click='refreshUserDialogWorlds()' + size='mini' + icon='el-icon-refresh' + circle) + span(style='margin-left: 5px') {{ $t('dialog.user.worlds.total_count', { count: userDialog.worlds.length }) }} + div(style='display: flex; align-items: center') + span(style='margin-right: 5px') {{ $t('dialog.user.worlds.sort_by') }} + el-dropdown( + @click.native.stop + trigger='click' + size='small' + style='margin-right: 5px' + :disabled='userDialog.isWorldsLoading') + el-button(size='mini') span {{ userDialog.worldSorting.name }} #[i.el-icon-arrow-down.el-icon--right] - el-dropdown-menu(#default="dropdown") - el-dropdown-item(v-for="(item) in userDialogWorldSortingOptions" v-text="item.name" @click.native="setUserDialogWorldSorting(item)") - span(style="margin:0 5px") {{ $t('dialog.user.worlds.order_by') }} - el-dropdown(@click.native.stop trigger="click" size="small" style="margin-right:5px" :disabled="userDialog.isWorldsLoading") - el-button(size="mini") + el-dropdown-menu(#default='dropdown') + el-dropdown-item( + v-for='item in userDialogWorldSortingOptions' + v-text='item.name' + @click.native='setUserDialogWorldSorting(item)') + span(style='margin: 0 5px') {{ $t('dialog.user.worlds.order_by') }} + el-dropdown( + @click.native.stop + trigger='click' + size='small' + style='margin-right: 5px' + :disabled='userDialog.isWorldsLoading') + el-button(size='mini') span {{ userDialog.worldOrder.name }} #[i.el-icon-arrow-down.el-icon--right] - el-dropdown-menu(#default="dropdown") - el-dropdown-item(v-for="(item) in userDialogWorldOrderOptions" v-text="item.name" @click.native="setUserDialogWorldOrder(item)") - .x-friend-list(v-loading="userDialog.isWorldsLoading" style="margin-top:10px;min-height:60px") - .x-friend-item(v-for="world in userDialog.worlds" :key="world.id" @click="showWorldDialog(world.id)" class="x-friend-item-border") + el-dropdown-menu(#default='dropdown') + el-dropdown-item( + v-for='item in userDialogWorldOrderOptions' + v-text='item.name' + @click.native='setUserDialogWorldOrder(item)') + .x-friend-list(v-loading='userDialog.isWorldsLoading' style='margin-top: 10px; min-height: 60px') + .x-friend-item.x-friend-item-border( + v-for='world in userDialog.worlds' + :key='world.id' + @click='showWorldDialog(world.id)') .avatar - img(v-lazy="world.thumbnailImageUrl") + img(v-lazy='world.thumbnailImageUrl') .detail - span.name(v-text="world.name") - span.extra(v-if="world.occupants") ({{ world.occupants }}) - el-tab-pane(:label="$t('dialog.user.favorite_worlds.header')") - el-button(type="default" :loading="userDialog.isFavoriteWorldsLoading" @click="getUserFavoriteWorlds(userDialog.id)" size="mini" icon="el-icon-refresh" circle) - el-tabs.zero-margin-tabs(type="card" ref="favoriteWorlds" v-loading="userDialog.isFavoriteWorldsLoading" style="margin-top:10px") - template(v-for="(list, index) in userFavoriteWorlds" v-if="list") + span.name(v-text='world.name') + span.extra(v-if='world.occupants') ({{ world.occupants }}) + el-tab-pane(:label='$t("dialog.user.favorite_worlds.header")') + el-button( + type='default' + :loading='userDialog.isFavoriteWorldsLoading' + @click='getUserFavoriteWorlds(userDialog.id)' + size='mini' + icon='el-icon-refresh' + circle) + el-tabs.zero-margin-tabs( + type='card' + ref='favoriteWorlds' + v-loading='userDialog.isFavoriteWorldsLoading' + style='margin-top: 10px') + template(v-for='(list, index) in userFavoriteWorlds' v-if='list') el-tab-pane - span(slot="label") - span(v-text="list[0]" style="font-weight:bold;font-size:16px") - i.x-status-icon(style="margin-left:5px" :class="userFavoriteWorldsStatus(list[1])") - span(style="color:#909399;font-size:12px;margin-left:5px") {{ list[2].length }}/{{ API.favoriteLimits.maxFavoritesPerGroup.world }} - .x-friend-list(style="margin-top:10px;margin-bottom:15px;min-height:60px") - .x-friend-item(v-for="world in list[2]" :key="world.id" @click="showWorldDialog(world.id)" class="x-friend-item-border") + span(slot='label') + span(v-text='list[0]' style='font-weight: bold; font-size: 16px') + i.x-status-icon(style='margin-left: 5px' :class='userFavoriteWorldsStatus(list[1])') + span(style='color: #909399; font-size: 12px; margin-left: 5px') {{ list[2].length }}/{{ API.favoriteLimits.maxFavoritesPerGroup.world }} + .x-friend-list(style='margin-top: 10px; margin-bottom: 15px; min-height: 60px') + .x-friend-item.x-friend-item-border( + v-for='world in list[2]' + :key='world.id' + @click='showWorldDialog(world.id)') .avatar - img(v-lazy="world.thumbnailImageUrl") + img(v-lazy='world.thumbnailImageUrl') .detail - span.name(v-text="world.name") - span.extra(v-if="world.occupants") ({{ world.occupants }}) - el-tab-pane(:label="$t('dialog.user.avatars.header')") - div(style="display:flex;align-items:center;justify-content:space-between") - div(style="display:flex;align-items:center") - el-button(v-if="userDialog.ref.id === API.currentUser.id" type="default" :loading="userDialog.isAvatarsLoading" @click="refreshUserDialogAvatars()" size="mini" icon="el-icon-refresh" circle) - el-button(v-else type="default" :loading="userDialog.isAvatarsLoading" @click="setUserDialogAvatarsRemote(userDialog.id)" size="mini" icon="el-icon-refresh" circle) - span(style="margin-left:5px") {{ $t('dialog.user.avatars.total_count', { count: userDialogAvatars.length }) }} + span.name(v-text='world.name') + span.extra(v-if='world.occupants') ({{ world.occupants }}) + el-tab-pane(:label='$t("dialog.user.avatars.header")') + div(style='display: flex; align-items: center; justify-content: space-between') + div(style='display: flex; align-items: center') + el-button( + v-if='userDialog.ref.id === API.currentUser.id' + type='default' + :loading='userDialog.isAvatarsLoading' + @click='refreshUserDialogAvatars()' + size='mini' + icon='el-icon-refresh' + circle) + el-button( + v-else + type='default' + :loading='userDialog.isAvatarsLoading' + @click='setUserDialogAvatarsRemote(userDialog.id)' + size='mini' + icon='el-icon-refresh' + circle) + span(style='margin-left: 5px') {{ $t('dialog.user.avatars.total_count', { count: userDialogAvatars.length }) }} div - el-radio-group(v-if="userDialog.ref.id === API.currentUser.id" v-model="userDialog.avatarSorting" size="mini" @change="changeUserDialogAvatarSorting") - el-radio(label="name") {{ $t('dialog.user.avatars.sort_by_name') }} - el-radio(label="update") {{ $t('dialog.user.avatars.sort_by_update') }} - el-divider(direction="vertical") - el-radio-group(v-if="userDialog.ref.id === API.currentUser.id" v-model="userDialog.avatarReleaseStatus" size="mini") - el-radio(label="all") {{ $t('dialog.user.avatars.all') }} - el-radio(label="public") {{ $t('dialog.user.avatars.public') }} - el-radio(label="private") {{ $t('dialog.user.avatars.private') }} - .x-friend-list(style="margin-top:10px;min-height:60px") - .x-friend-item(v-for="avatar in userDialogAvatars" @click="showAvatarDialog(avatar.id)" class="x-friend-item-border") + el-radio-group( + v-if='userDialog.ref.id === API.currentUser.id' + v-model='userDialog.avatarSorting' + size='mini' + @change='changeUserDialogAvatarSorting') + el-radio(label='name') {{ $t('dialog.user.avatars.sort_by_name') }} + el-radio(label='update') {{ $t('dialog.user.avatars.sort_by_update') }} + el-divider(direction='vertical') + el-radio-group( + v-if='userDialog.ref.id === API.currentUser.id' + v-model='userDialog.avatarReleaseStatus' + size='mini') + el-radio(label='all') {{ $t('dialog.user.avatars.all') }} + el-radio(label='public') {{ $t('dialog.user.avatars.public') }} + el-radio(label='private') {{ $t('dialog.user.avatars.private') }} + .x-friend-list(style='margin-top: 10px; min-height: 60px') + .x-friend-item.x-friend-item-border( + v-for='avatar in userDialogAvatars' + @click='showAvatarDialog(avatar.id)') .avatar - img(v-if="avatar.thumbnailImageUrl" v-lazy="avatar.thumbnailImageUrl") + img(v-if='avatar.thumbnailImageUrl' v-lazy='avatar.thumbnailImageUrl') .detail - span.name(v-text="avatar.name") - span.extra(v-text="avatar.releaseStatus" v-if="avatar.releaseStatus === 'public'" style="color: #67c23a;") - span.extra(v-text="avatar.releaseStatus" v-else-if="avatar.releaseStatus === 'private'" style="color: #f56c6c;") - span.extra(v-text="avatar.releaseStatus" v-else) - el-tab-pane(:label="$t('dialog.user.json.header')") - el-button(type="default" @click="refreshUserDialogTreeData()" size="mini" icon="el-icon-refresh" circle) - el-button(type="default" @click="downloadAndSaveJson(userDialog.id, userDialog.ref)" size="mini" icon="el-icon-download" circle style="margin-left:5px") - el-tree(:data="userDialog.treeData" style="margin-top:5px;font-size:12px") - template(#default="scope") + span.name(v-text='avatar.name') + span.extra( + v-text='avatar.releaseStatus' + v-if='avatar.releaseStatus === "public"' + style='color: #67c23a') + span.extra( + v-text='avatar.releaseStatus' + v-else-if='avatar.releaseStatus === "private"' + style='color: #f56c6c') + span.extra(v-text='avatar.releaseStatus' v-else) + el-tab-pane(:label='$t("dialog.user.json.header")') + el-button( + type='default' + @click='refreshUserDialogTreeData()' + size='mini' + icon='el-icon-refresh' + circle) + el-button( + type='default' + @click='downloadAndSaveJson(userDialog.id, userDialog.ref)' + size='mini' + icon='el-icon-download' + circle + style='margin-left: 5px') + el-tree(:data='userDialog.treeData' style='margin-top: 5px; font-size: 12px') + template(#default='scope') span - span(v-text="scope.data.key" style="font-weight:bold;margin-right:5px") - span(v-if="!scope.data.children" v-text="scope.data.value") + span(v-text='scope.data.key' style='font-weight: bold; margin-right: 5px') + span(v-if='!scope.data.children' v-text='scope.data.value') diff --git a/src/mixins/tabs/friendLog.pug b/src/mixins/tabs/friendLog.pug index 9be0a9e7..a1aea938 100644 --- a/src/mixins/tabs/friendLog.pug +++ b/src/mixins/tabs/friendLog.pug @@ -1,24 +1,54 @@ -mixin friendLogTab() - .x-container(v-if="$refs.menu && $refs.menu.activeIndex === 'friendLog'") - data-tables(v-bind="friendLogTable" ref="friendLogTableRef") +mixin friendLogTab + .x-container(v-if='$refs.menu && $refs.menu.activeIndex === "friendLog"') + data-tables(v-bind='friendLogTable' ref='friendLogTableRef') template(#tool) - div(style="margin:0 0 10px;display:flex;align-items:center") - el-select(v-model="friendLogTable.filters[0].value" @change="saveTableFilters" multiple clearable style="flex:1" :placeholder="$t('view.friend_log.filter_placeholder')") - el-option(v-for="type in ['Friend', 'Unfriend', 'FriendRequest', 'CancelFriendRequest', 'DisplayName', 'TrustLevel']" :key="type" :label="$t('view.friend_log.filters.' + type)" :value="type") - el-input(v-model="friendLogTable.filters[1].value" :placeholder="$t('view.friend_log.search_placeholder')" style="flex:none;width:150px;margin-left:10px") - el-table-column(:label="$t('table.friendLog.date')" prop="created_at" sortable="custom" width="200") - template(#default="scope") - span {{ scope.row.created_at | formatDate('long') }} - el-table-column(:label="$t('table.friendLog.type')" prop="type" width="150") - template(#default="scope") - span(v-text="$t('view.friend_log.filters.' + scope.row.type)") - el-table-column(:label="$t('table.friendLog.user')" prop="displayName") - template(#default="scope") - span(v-if="scope.row.type === 'DisplayName'") {{ scope.row.previousDisplayName }} #[i.el-icon-right]  - span.x-link(v-text="scope.row.displayName || scope.row.userId" @click="showUserDialog(scope.row.userId)" style="padding-right:10px") - template(v-if="scope.row.type === 'TrustLevel'") - span ({{ scope.row.previousTrustLevel }} #[i.el-icon-right] {{ scope.row.trustLevel }}) - el-table-column(:label="$t('table.friendLog.action')" width="80" align="right") - template(#default="scope") - el-button(v-if="shiftHeld" style="color:#f56c6c" type="text" icon="el-icon-close" size="mini" @click="deleteFriendLog(scope.row)") - el-button(v-else type="text" icon="el-icon-delete" size="mini" @click="deleteFriendLogPrompt(scope.row)") + div(style='margin: 0 0 10px; display: flex; align-items: center') + el-select( + v-model='friendLogTable.filters[0].value' + @change='saveTableFilters' + multiple + clearable + style='flex: 1' + :placeholder='$t("view.friend_log.filter_placeholder")') + el-option( + v-for='type in ["Friend", "Unfriend", "FriendRequest", "CancelFriendRequest", "DisplayName", "TrustLevel"]' + :key='type' + :label='$t("view.friend_log.filters." + type)' + :value='type') + el-input( + v-model='friendLogTable.filters[1].value' + :placeholder='$t("view.friend_log.search_placeholder")' + style='flex: none; width: 150px; margin-left: 10px') + el-table-column(:label='$t("table.friendLog.date")' prop='created_at' sortable='custom' width='200') + template(#default='scope') + el-tooltip(placement='right') + template(#content) + span {{ scope.row.created_at | formatDate('long') }} + span {{ scope.row.created_at | formatDate('short') }} + el-table-column(:label='$t("table.friendLog.type")' prop='type' width='150') + template(#default='scope') + span(v-text='$t("view.friend_log.filters." + scope.row.type)') + el-table-column(:label='$t("table.friendLog.user")' prop='displayName') + template(#default='scope') + span(v-if='scope.row.type === "DisplayName"') {{ scope.row.previousDisplayName }} #[i.el-icon-right]  + span.x-link( + v-text='scope.row.displayName || scope.row.userId' + @click='showUserDialog(scope.row.userId)' + style='padding-right: 10px') + template(v-if='scope.row.type === "TrustLevel"') + span ({{ scope.row.previousTrustLevel }} #[i.el-icon-right] {{ scope.row.trustLevel }}) + el-table-column(:label='$t("table.friendLog.action")' width='80' align='right') + template(#default='scope') + el-button( + v-if='shiftHeld' + style='color: #f56c6c' + type='text' + icon='el-icon-close' + size='mini' + @click='deleteFriendLog(scope.row)') + el-button( + v-else + type='text' + icon='el-icon-delete' + size='mini' + @click='deleteFriendLogPrompt(scope.row)') diff --git a/src/mixins/tabs/profile.pug b/src/mixins/tabs/profile.pug index 7e541299..ef733352 100644 --- a/src/mixins/tabs/profile.pug +++ b/src/mixins/tabs/profile.pug @@ -24,10 +24,11 @@ mixin profileTab() div(style="margin-top:10px") el-button(size="small" type="danger" plain icon="el-icon-switch-button" @click="logout()" style="margin-left:0;margin-right:5px;margin-top:10px;") {{ $t('view.profile.profile.logout') }} el-button(size="small" icon="el-icon-picture-outline" @click="showGalleryDialog()" style="margin-left:0;margin-right:5px;margin-top:10px") {{ $t('view.profile.profile.manage_gallery_icon') }} + el-button(size="small" icon="el-icon-chat-dot-round" @click="showDiscordNamesDialog()" style="margin-left:0;margin-right:5px;margin-top:10px") {{ $t('view.profile.profile.discord_names') }} el-button(size="small" icon="el-icon-printer" @click="showExportFriendsListDialog()" style="margin-left:0;margin-right:5px;margin-top:10px") {{ $t('view.profile.profile.export_friend_list') }} el-button(size="small" icon="el-icon-user" @click="showExportAvatarsListDialog()" style="margin-left:0;margin-right:5px;margin-top:10px") {{ $t('view.profile.profile.export_own_avatars') }} - el-button(size="small" icon="el-icon-chat-dot-round" @click="showDiscordNamesDialog()" style="margin-left:0;margin-right:5px;margin-top:10px") {{ $t('view.profile.profile.discord_names') }} el-button(size="small" icon="el-icon-document-copy" @click="showNoteExportDialog()" style="margin-left:0;margin-right:5px;margin-top:10px") {{ $t('view.profile.profile.export_notes') }} + div.options-container span.header {{ $t('view.profile.game_info.header') }} .x-friend-list(style="margin-top:10px") diff --git a/src/theme.dark.scss b/src/theme.dark.scss index 63917bfd..926d5ef1 100644 --- a/src/theme.dark.scss +++ b/src/theme.dark.scss @@ -413,3 +413,7 @@ button { .x-grey { color: #b3b3b3; } + +.el-color-picker__panel { + background-color: #222; +} diff --git a/src/theme.darkvanilla.scss b/src/theme.darkvanilla.scss index 06aeeb35..79b836d4 100644 --- a/src/theme.darkvanilla.scss +++ b/src/theme.darkvanilla.scss @@ -53,8 +53,9 @@ body, font-stretch: 100%; src: url(https://fonts.gstatic.com/s/encodesans/v19/LDIhapOFNxEwR-Bd1O9uYNmnUQomAgE25imKSbHLRsA6WQw.woff2) format('woff2'); - unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, - U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; + unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, + U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, + U+A720-A7FF; } /* latin */ @@ -65,9 +66,9 @@ body, font-stretch: 100%; src: url(https://fonts.gstatic.com/s/encodesans/v19/LDIhapOFNxEwR-Bd1O9uYNmnUQomAgE25imKSbHLSMA6.woff2) format('woff2'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, - U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, - U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, + U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, + U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; } body, @@ -692,3 +693,6 @@ i[class='el-icon-star-off']:not(.el-menu-item div.el-tooltip i) { border: transparent; background-color: var(--dv_bg-bot); } +.el-color-picker__panel { + background-color: var(--dv_bg-top); +} diff --git a/src/theme.material3.scss b/src/theme.material3.scss index f3230d8e..3af080b1 100644 --- a/src/theme.material3.scss +++ b/src/theme.material3.scss @@ -1468,6 +1468,9 @@ img.x-link.el-popover__reference { [style='flex: 1 1 0%; display: flex; align-items: center; margin-left: 15px;'] > :last-child { width: 40px; + display: flex; + flex-direction: column; + align-items: center; } [style='flex: 0 0 auto; margin-left: 10px;'] > .el-dropdown { margin: 0 !important;