mirror of
https://github.com/MrUnknownDE/VRCX.git
synced 2026-04-18 06:13:52 +02:00
Dark toggles, save feed VIP toggle and newInstanceDialog rework
This commit is contained in:
@@ -293,6 +293,16 @@ button {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.el-radio-button__inner {
|
||||
color: #fff;
|
||||
background: #565656;
|
||||
border: 1px solid #666666;
|
||||
}
|
||||
|
||||
.el-radio-button:first-child .el-radio-button__inner {
|
||||
border-left: 1px solid rgba(0, 0, 0, 0);
|
||||
}
|
||||
|
||||
.el-button {
|
||||
color: #fff;
|
||||
}
|
||||
@@ -305,6 +315,10 @@ button {
|
||||
color: #c8c8c8;
|
||||
}
|
||||
|
||||
.el-input.is-disabled .el-input__inner {
|
||||
background-color: #3b3b3b;
|
||||
}
|
||||
|
||||
.x-app {
|
||||
background-color: #101010;
|
||||
}
|
||||
|
||||
134
html/src/app.js
134
html/src/app.js
@@ -9,7 +9,6 @@ import Vue from 'vue';
|
||||
import VueLazyload from 'vue-lazyload';
|
||||
import { DataTables } from 'vue-data-tables';
|
||||
// eslint-disable-next-line no-unused-vars
|
||||
import ToggleSwitch from 'vuejs-toggle-switch';
|
||||
import VSwatches from 'vue-swatches';
|
||||
Vue.component('v-swatches', VSwatches);
|
||||
import '../node_modules/vue-swatches/dist/vue-swatches.css';
|
||||
@@ -1191,6 +1190,7 @@ speechSynthesis.getVoices();
|
||||
currentAvatarImageUrl: '',
|
||||
currentAvatarThumbnailImageUrl: '',
|
||||
currentAvatar: '',
|
||||
currentAvatarAssetUrl: '',
|
||||
homeLocation: '',
|
||||
twoFactorAuthEnabled: false,
|
||||
status: '',
|
||||
@@ -6114,9 +6114,11 @@ speechSynthesis.getVoices();
|
||||
|
||||
$app.methods.saveFeedTableFilters = function () {
|
||||
configRepository.setString('VRCX_feedTableFilters', JSON.stringify(this.feedTable.filters[0].value));
|
||||
configRepository.setBool('VRCX_feedTableVIPFilter', this.feedTable.filters[2].value);
|
||||
};
|
||||
if (configRepository.getString('VRCX_feedTableFilters')) {
|
||||
$app.data.feedTable.filters[0].value = JSON.parse(configRepository.getString('VRCX_feedTableFilters'));
|
||||
$app.data.feedTable.filters[2].value = configRepository.getBool('VRCX_feedTableVIPFilter');
|
||||
}
|
||||
|
||||
API.$on('LOGIN', async function (args) {
|
||||
@@ -7832,77 +7834,6 @@ speechSynthesis.getVoices();
|
||||
}
|
||||
$app.data.sharedFeedFilters = JSON.parse(configRepository.getString('sharedFeedFilters'));
|
||||
|
||||
var toggleSwitchLayout = {
|
||||
backgroundColor: 'white',
|
||||
selectedBackgroundColor: '#409eff',
|
||||
selectedColor: 'white',
|
||||
color: '#409eff',
|
||||
borderColor: '#409eff',
|
||||
fontWeight: 'bold',
|
||||
fontFamily: '"Noto Sans JP", "Noto Sans KR", "Meiryo UI", "Malgun Gothic", "Segoe UI", "sans-serif"'
|
||||
};
|
||||
|
||||
$app.data.toggleSwitchOptionsEveryone = {
|
||||
layout: toggleSwitchLayout,
|
||||
size: {
|
||||
height: 1.5,
|
||||
width: 15,
|
||||
padding: 0.1,
|
||||
fontSize: 0.75
|
||||
},
|
||||
items: {
|
||||
labels: [{ name: 'Off' }, { name: 'VIP' }, { name: 'Friends' }, { name: 'Everyone' }]
|
||||
}
|
||||
};
|
||||
$app.data.toggleSwitchOptionsFriends = {
|
||||
layout: toggleSwitchLayout,
|
||||
size: {
|
||||
height: 1.5,
|
||||
width: 11.25,
|
||||
padding: 0.1,
|
||||
fontSize: 0.75
|
||||
},
|
||||
items: {
|
||||
labels: [{ name: 'Off' }, { name: 'VIP' }, { name: 'Friends' }]
|
||||
}
|
||||
};
|
||||
$app.data.toggleSwitchOptionsOn = {
|
||||
layout: toggleSwitchLayout,
|
||||
size: {
|
||||
height: 1.5,
|
||||
width: 7.5,
|
||||
padding: 0.1,
|
||||
fontSize: 0.75
|
||||
},
|
||||
items: {
|
||||
labels: [{ name: 'Off' }, { name: 'On' }]
|
||||
}
|
||||
};
|
||||
$app.data.whenToPlayToggleSwitchOption = {
|
||||
layout: toggleSwitchLayout,
|
||||
size: {
|
||||
height: 1.5,
|
||||
width: 33,
|
||||
padding: 0.1,
|
||||
fontSize: 0.75
|
||||
},
|
||||
items: {
|
||||
labels: [{ name: 'Never' }, { name: 'Desktop Mode' }, { name: 'Outside VR' }, { name: 'Inside VR' }, { name: 'Game Closed' }, { name: 'Always' }]
|
||||
}
|
||||
};
|
||||
$app.data.worldCacheToggleSwitchOption = {
|
||||
layout: toggleSwitchLayout,
|
||||
size: {
|
||||
height: 1.5,
|
||||
width: 23,
|
||||
padding: 0.1,
|
||||
fontSize: 0.75
|
||||
},
|
||||
items: {
|
||||
labels: [{ name: 'Never' }, { name: 'Game Closed' }, { name: 'Game Running' }, { name: 'Always' }]
|
||||
}
|
||||
};
|
||||
|
||||
if (!configRepository.getString('VRCX_trustColor')) {
|
||||
var trustColor = {
|
||||
untrusted: '#CCCCCC',
|
||||
@@ -10130,6 +10061,8 @@ speechSynthesis.getVoices();
|
||||
loading: false,
|
||||
worldId: '',
|
||||
instanceId: '',
|
||||
instanceName: '',
|
||||
userId: '',
|
||||
accessType: '',
|
||||
region: '',
|
||||
location: '',
|
||||
@@ -10143,23 +10076,27 @@ speechSynthesis.getVoices();
|
||||
$app.methods.buildInstance = function () {
|
||||
var D = this.newInstanceDialog;
|
||||
var tags = [];
|
||||
tags.push((99999 * Math.random() + 1).toFixed(0));
|
||||
if (D.instanceName) {
|
||||
D.instanceName = D.instanceName.replace(/[^A-Za-z0-9]/g, '');
|
||||
tags.push(D.instanceName);
|
||||
} else {
|
||||
tags.push((99999 * Math.random() + 1).toFixed(0));
|
||||
}
|
||||
if ((D.userId) &&
|
||||
(D.accessType !== 'friends') && (D.accessType !== 'invite')) {
|
||||
var userId = D.userId;
|
||||
} else {
|
||||
D.userId = API.currentUser.id;
|
||||
var userId = API.currentUser.id;
|
||||
}
|
||||
if (D.accessType !== 'public') {
|
||||
if (D.accessType === 'friends+') {
|
||||
tags.push(`~hidden(${API.currentUser.id})`);
|
||||
tags.push(`~hidden(${userId})`);
|
||||
} else if (D.accessType === 'friends') {
|
||||
tags.push(`~friends(${API.currentUser.id})`);
|
||||
tags.push(`~friends(${userId})`);
|
||||
} else {
|
||||
tags.push(`~private(${API.currentUser.id})`);
|
||||
tags.push(`~private(${userId})`);
|
||||
}
|
||||
// NOTE : crypto.getRandomValues()를 쓰면 안전한 대신 무겁겠지..
|
||||
/*
|
||||
var nonce = [];
|
||||
for (var i = 0; i < 10; ++i) {
|
||||
nonce.push(Math.random().toString(16).substr(2).toUpperCase());
|
||||
}
|
||||
nonce = nonce.join('').substr(0, 64);
|
||||
*/
|
||||
if (D.accessType === 'invite+') {
|
||||
tags.push('~canRequestInvite');
|
||||
}
|
||||
@@ -10205,7 +10142,7 @@ speechSynthesis.getVoices();
|
||||
};
|
||||
|
||||
var updateLocationURL = function () {
|
||||
var D = this.newInstanceDialog;
|
||||
var D = $app.newInstanceDialog;
|
||||
if (D.instanceId) {
|
||||
D.location = `${D.worldId}:${D.instanceId}`;
|
||||
} else {
|
||||
@@ -10213,16 +10150,23 @@ speechSynthesis.getVoices();
|
||||
}
|
||||
D.url = getLaunchURL(D.worldId, D.instanceId);
|
||||
};
|
||||
var saveAccessType = function () {
|
||||
var saveNewInstanceDialog = function () {
|
||||
configRepository.setString('instanceDialogAccessType', this.newInstanceDialog.accessType);
|
||||
};
|
||||
var saveRegion = function () {
|
||||
configRepository.setString('instanceRegion', this.newInstanceDialog.region);
|
||||
configRepository.setString('instanceDialogInstanceName', this.newInstanceDialog.instanceName);
|
||||
if (this.newInstanceDialog.userId === API.currentUser.id) {
|
||||
configRepository.setString('instanceDialogUserId', '');
|
||||
} else {
|
||||
configRepository.setString('instanceDialogUserId', this.newInstanceDialog.userId);
|
||||
}
|
||||
$app.buildInstance();
|
||||
updateLocationURL();
|
||||
};
|
||||
$app.watch['newInstanceDialog.worldId'] = updateLocationURL;
|
||||
$app.watch['newInstanceDialog.instanceId'] = updateLocationURL;
|
||||
$app.watch['newInstanceDialog.accessType'] = saveAccessType;
|
||||
$app.watch['newInstanceDialog.region'] = saveRegion;
|
||||
$app.watch['newInstanceDialog.instanceName'] = saveNewInstanceDialog;
|
||||
$app.watch['newInstanceDialog.accessType'] = saveNewInstanceDialog;
|
||||
$app.watch['newInstanceDialog.region'] = saveNewInstanceDialog;
|
||||
$app.watch['newInstanceDialog.userId'] = saveNewInstanceDialog;
|
||||
|
||||
$app.methods.showNewInstanceDialog = function (tag) {
|
||||
this.$nextTick(() => adjustDialogZ(this.$refs.newInstanceDialog.$el));
|
||||
@@ -10242,6 +10186,14 @@ speechSynthesis.getVoices();
|
||||
if (configRepository.getString('instanceRegion') !== null) {
|
||||
D.region = configRepository.getString('instanceRegion');
|
||||
}
|
||||
D.instanceName = '';
|
||||
if (configRepository.getString('instanceDialogInstanceName') !== null) {
|
||||
D.instanceName = configRepository.getString('instanceDialogInstanceName');
|
||||
}
|
||||
D.userId = '';
|
||||
if (configRepository.getString('instanceDialogUserId') !== null) {
|
||||
D.userId = configRepository.getString('instanceDialogUserId');
|
||||
}
|
||||
this.buildInstance();
|
||||
D.visible = true;
|
||||
};
|
||||
|
||||
@@ -538,14 +538,13 @@ i.x-user-status.busy {
|
||||
}
|
||||
|
||||
.toggle-list {
|
||||
font-size: 12px;
|
||||
font-size: 15px;
|
||||
}
|
||||
|
||||
.toggle-list .toggle-name {
|
||||
display: inline-block;
|
||||
min-width: 140px;
|
||||
min-width: 170px;
|
||||
padding: 2px 5px 2px 0;
|
||||
vertical-align: top;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
@@ -589,3 +588,7 @@ i.x-user-status.busy {
|
||||
display: inline-block;
|
||||
color: #f56c6c;
|
||||
}
|
||||
|
||||
.el-form-item {
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
@@ -77,7 +77,7 @@ html
|
||||
div(style="margin:0 0 10px;display:flex;align-items:center")
|
||||
div(style="flex:none;margin-right:10px")
|
||||
el-tooltip(placement="bottom" content="Filter VIP only" :disabled="hideTooltips")
|
||||
el-switch(v-model="feedTable.filters[2].value" active-color="#13ce66")
|
||||
el-switch(v-model="feedTable.filters[2].value" @change="saveFeedTableFilters" active-color="#13ce66")
|
||||
el-select(v-model="feedTable.filters[0].value" @change="saveFeedTableFilters" multiple clearable collapse-tags style="flex:1" placeholder="Filter")
|
||||
el-option(v-once v-for="type in ['GPS', 'Online', 'Offline', 'Status', 'Avatar']" :key="type" :label="type" :value="type")
|
||||
el-input(v-model="feedTable.filters[1].value" placeholder="Search" style="flex:none;width:150px;margin:0 10px")
|
||||
@@ -689,6 +689,7 @@ html
|
||||
div.options-container-item
|
||||
span.name Sort GPS to top
|
||||
el-switch(v-model="orderFriendsGroupGPS")
|
||||
span.name(style="margin-left:5px") (online for only)
|
||||
div.options-container-item
|
||||
span.name VIP
|
||||
el-switch(v-model="orderFriendsGroup0" inactive-text="alphabetical" active-text="online for")
|
||||
@@ -794,7 +795,13 @@ html
|
||||
div.options-container-item
|
||||
span.name Desktop Notifications, When to display:
|
||||
br
|
||||
toggle-switch(:options="whenToPlayToggleSwitchOption" group="whenToPlayDesktopNotificationsToggleSwitchOption" v-model="desktopToast" class="toggle-switch")
|
||||
el-radio-group(v-model="desktopToast" size="mini")
|
||||
el-radio-button(label="Never")
|
||||
el-radio-button(label="Desktop Mode")
|
||||
el-radio-button(label="Outside VR")
|
||||
el-radio-button(label="Inside VR")
|
||||
el-radio-button(label="Game Closed")
|
||||
el-radio-button(label="Always")
|
||||
div.options-container-item
|
||||
el-button(size="small" icon="el-icon-chat-square" @click="showNotyFeedFiltersDialog()") Notification Filters
|
||||
br
|
||||
@@ -802,7 +809,13 @@ html
|
||||
div.options-container-item
|
||||
span.name Notification TTS, When to play:
|
||||
br
|
||||
toggle-switch(:options="whenToPlayToggleSwitchOption" group="whenToPlayNotificationTTSToggleSwitchOption" v-model="notificationTTS" class="toggle-switch")
|
||||
el-radio-group(v-model="notificationTTS" size="mini")
|
||||
el-radio-button(label="Never")
|
||||
el-radio-button(label="Desktop Mode")
|
||||
el-radio-button(label="Outside VR")
|
||||
el-radio-button(label="Inside VR")
|
||||
el-radio-button(label="Game Closed")
|
||||
el-radio-button(label="Always")
|
||||
div.options-container-item
|
||||
span.name TTS Voice
|
||||
el-dropdown(@command="(voice) => changeTTSVoice(voice)" trigger="click" size="small")
|
||||
@@ -817,13 +830,21 @@ html
|
||||
div.options-container-item
|
||||
span.name Download on invite:
|
||||
br
|
||||
toggle-switch(:options="worldCacheToggleSwitchOption" group="worldCacheInviteToggleSwitchOption" v-model="worldAutoCacheInvite" class="toggle-switch")
|
||||
el-radio-group(v-model="worldAutoCacheInvite" size="mini")
|
||||
el-radio-button(label="Never")
|
||||
el-radio-button(label="Game Closed")
|
||||
el-radio-button(label="Game Running")
|
||||
el-radio-button(label="Always")
|
||||
div.options-container-item
|
||||
el-switch(v-model="worldAutoCacheInviteFilter" inactive-text="VIP" active-text="Everyone" :disabled="worldAutoCacheInvite == 'Never'")
|
||||
div.options-container-item
|
||||
span.name Download on GPS:
|
||||
br
|
||||
toggle-switch(:options="worldCacheToggleSwitchOption" group="worldCacheGPSToggleSwitchOption" v-model="worldAutoCacheGPS" class="toggle-switch")
|
||||
el-radio-group(v-model="worldAutoCacheGPS" size="mini")
|
||||
el-radio-button(label="Never")
|
||||
el-radio-button(label="Game Closed")
|
||||
el-radio-button(label="Game Running")
|
||||
el-radio-button(label="Always")
|
||||
div.options-container-item
|
||||
el-switch(v-model="worldAutoCacheGPSFilter" inactive-text="VIP" active-text="Everyone" :disabled="worldAutoCacheGPS == 'Never'")
|
||||
div.options-container-item
|
||||
@@ -1226,7 +1247,7 @@ html
|
||||
el-dropdown-item(icon="el-icon-edit" command="Rename") Rename
|
||||
el-dropdown-item(icon="el-icon-edit" command="Change Description") Change Description
|
||||
el-dropdown-item(icon="el-icon-picture-outline" command="Change Image") Change Image
|
||||
el-dropdown-item(icon="el-icon-upload2" command="Upload Image") Upload Image
|
||||
el-dropdown-item(icon="el-icon-upload2" command="Upload Image") Upload Image (1200x900)
|
||||
input(type="file" accept="image/*" @change="onFileChangeWorldImage" id="WorldImageUploadButton" style="display:none")
|
||||
el-dropdown-item(icon="el-icon-delete" command="Delete" style="color:#F56C6C" divided) Delete
|
||||
el-tabs
|
||||
@@ -1362,7 +1383,7 @@ html
|
||||
el-dropdown-item(icon="el-icon-edit" command="Rename") Rename
|
||||
el-dropdown-item(icon="el-icon-edit" command="Change Description") Change Description
|
||||
el-dropdown-item(icon="el-icon-picture-outline" command="Change Image") Change Image
|
||||
el-dropdown-item(icon="el-icon-upload2" command="Upload Image") Upload Image
|
||||
el-dropdown-item(icon="el-icon-upload2" command="Upload Image") Upload Image (1200x900)
|
||||
input(type="file" accept="image/*" @change="onFileChangeAvatarImage" id="AvatarImageUploadButton" style="display:none")
|
||||
el-dropdown-item(v-if="avatarDialog.ref.unityPackageUrl" icon="el-icon-download" command="Download Unity Package") Download Unity Package
|
||||
el-dropdown-item(icon="el-icon-user" command="Delete" style="color:#F56C6C" divided) Delete
|
||||
@@ -1508,7 +1529,7 @@ html
|
||||
|
||||
//- dialog: new instance
|
||||
el-dialog.x-dialog(ref="newInstanceDialog" :visible.sync="newInstanceDialog.visible" title="New Instance" width="600px")
|
||||
el-form(:model="newInstanceDialog" label-width="100px")
|
||||
el-form(:model="newInstanceDialog" label-width="130px")
|
||||
el-form-item(label="Access Type")
|
||||
el-radio-group(v-model="newInstanceDialog.accessType" size="mini" @change="buildInstance")
|
||||
el-radio-button(label="public")
|
||||
@@ -1524,7 +1545,57 @@ html
|
||||
el-form-item(label="World ID")
|
||||
el-input(v-model="newInstanceDialog.worldId" size="mini" @click.native="$event.target.tagName === 'INPUT' && $event.target.select()")
|
||||
el-form-item(label="Instance ID")
|
||||
el-input(v-model="newInstanceDialog.instanceId" size="mini" @click.native="$event.target.tagName === 'INPUT' && $event.target.select()")
|
||||
el-input(v-model="newInstanceDialog.instanceName" maxlength="16" placeholder="Random" show-word-limit size="mini" @click.native="$event.target.tagName === 'INPUT' && $event.target.select()")
|
||||
el-form-item(label="Instance Creator")
|
||||
el-select(v-model="newInstanceDialog.userId" clearable placeholder="Choose User" filterable style="width:100%" :disabled="newInstanceDialog.accessType === 'friends' || newInstanceDialog.accessType === 'invite'")
|
||||
el-option-group(v-if="API.currentUser" label="ME")
|
||||
el-option.x-friend-item(:label="API.currentUser.displayName" :value="API.currentUser.id" style="height:auto")
|
||||
.avatar(:class="userStatusClass(API.currentUser)")
|
||||
img(v-if="displayProfilePicOverrideAsAvatar && API.currentUser.profilePicOverride" v-lazy="API.currentUser.profilePicOverride")
|
||||
img(v-else-if="displayVRCPlusIconsAsAvatar && API.currentUser.userIcon" v-lazy="API.currentUser.userIcon")
|
||||
img(v-else v-lazy="API.currentUser.currentAvatarThumbnailImageUrl")
|
||||
.detail
|
||||
span.name(v-text="API.currentUser.displayName")
|
||||
el-option-group(v-if="friendsGroup0.length" label="VIP")
|
||||
el-option.x-friend-item(v-for="friend in friendsGroup0" :key="friend.id" :label="friend.name" :value="friend.id" style="height:auto")
|
||||
template(v-if="friend.ref")
|
||||
.avatar(:class="userStatusClass(friend.ref)")
|
||||
img(v-if="displayProfilePicOverrideAsAvatar && friend.ref.profilePicOverride" v-lazy="friend.ref.profilePicOverride")
|
||||
img(v-else-if="displayVRCPlusIconsAsAvatar && friend.ref.userIcon" v-lazy="friend.ref.userIcon")
|
||||
img(v-else v-lazy="friend.ref.currentAvatarThumbnailImageUrl")
|
||||
.detail
|
||||
span.name(v-text="friend.ref.displayName" :class="friend.ref.$trustColor")
|
||||
span(v-else v-text="friend.id")
|
||||
el-option-group(v-if="friendsGroup1.length" label="ONLINE")
|
||||
el-option.x-friend-item(v-for="friend in friendsGroup1" :key="friend.id" :label="friend.name" :value="friend.id" style="height:auto")
|
||||
template(v-if="friend.ref")
|
||||
.avatar(:class="userStatusClass(friend.ref)")
|
||||
img(v-if="displayProfilePicOverrideAsAvatar && friend.ref.profilePicOverride" v-lazy="friend.ref.profilePicOverride")
|
||||
img(v-else-if="displayVRCPlusIconsAsAvatar && friend.ref.userIcon" v-lazy="friend.ref.userIcon")
|
||||
img(v-else v-lazy="friend.ref.currentAvatarThumbnailImageUrl")
|
||||
.detail
|
||||
span.name(v-text="friend.ref.displayName" :class="friend.ref.$trustColor")
|
||||
span(v-else v-text="friend.id")
|
||||
el-option-group(v-if="friendsGroup2.length" label="ACTIVE")
|
||||
el-option.x-friend-item(v-for="friend in friendsGroup2" :key="friend.id" :label="friend.name" :value="friend.id" style="height:auto")
|
||||
template(v-if="friend.ref")
|
||||
.avatar
|
||||
img(v-if="displayProfilePicOverrideAsAvatar && friend.ref.profilePicOverride" v-lazy="friend.ref.profilePicOverride")
|
||||
img(v-else-if="displayVRCPlusIconsAsAvatar && friend.ref.userIcon" v-lazy="friend.ref.userIcon")
|
||||
img(v-else v-lazy="friend.ref.currentAvatarThumbnailImageUrl")
|
||||
.detail
|
||||
span.name(v-text="friend.ref.displayName" :class="friend.ref.$trustColor")
|
||||
span(v-else v-text="friend.id")
|
||||
el-option-group(v-if="friendsGroup2.length" label="OFFLINE")
|
||||
el-option.x-friend-item(v-for="friend in friendsGroup3" :key="friend.id" :label="friend.name" :value="friend.id" style="height:auto")
|
||||
template(v-if="friend.ref")
|
||||
.avatar
|
||||
img(v-if="displayProfilePicOverrideAsAvatar && friend.ref.profilePicOverride" v-lazy="friend.ref.profilePicOverride")
|
||||
img(v-else-if="displayVRCPlusIconsAsAvatar && friend.ref.userIcon" v-lazy="friend.ref.userIcon")
|
||||
img(v-else v-lazy="friend.ref.currentAvatarThumbnailImageUrl")
|
||||
.detail
|
||||
span.name(v-text="friend.ref.displayName" :class="friend.ref.$trustColor")
|
||||
span(v-else v-text="friend.id")
|
||||
el-form-item(label="Location")
|
||||
el-input(v-model="newInstanceDialog.location" size="mini" readonly @click.native="$event.target.tagName === 'INPUT' && $event.target.select()")
|
||||
el-form-item(label="URL")
|
||||
@@ -1659,156 +1730,296 @@ html
|
||||
el-button(type="primary" size="small" style="margin-left:auto" @click="notificationPositionDialog.visible = false") OK
|
||||
|
||||
//- dialog: Noty feed filters
|
||||
el-dialog.x-dialog(ref="notyFeedFiltersDialog" :visible.sync="notyFeedFiltersDialog.visible" title="Notification Filters" width="450px")
|
||||
el-dialog.x-dialog(ref="notyFeedFiltersDialog" :visible.sync="notyFeedFiltersDialog.visible" title="Notification Filters" width="480px")
|
||||
div.toggle-list
|
||||
div
|
||||
span.toggle-name OnPlayerJoining
|
||||
toggle-switch(:options="toggleSwitchOptionsFriends" group="switchNotyGroupOnPlayerJoining" v-model="sharedFeedFilters.noty.OnPlayerJoining" class="toggle-switch")
|
||||
el-radio-group(v-model="sharedFeedFilters.noty.OnPlayerJoining" size="mini")
|
||||
el-radio-button(label="Off")
|
||||
el-radio-button(label="VIP")
|
||||
el-radio-button(label="Friends")
|
||||
div
|
||||
span.toggle-name OnPlayerJoined
|
||||
toggle-switch(:options="toggleSwitchOptionsEveryone" group="switchNotyGroupOnPlayerJoined" v-model="sharedFeedFilters.noty.OnPlayerJoined" class="toggle-switch")
|
||||
el-radio-group(v-model="sharedFeedFilters.noty.OnPlayerJoined" size="mini")
|
||||
el-radio-button(label="Off")
|
||||
el-radio-button(label="VIP")
|
||||
el-radio-button(label="Friends")
|
||||
el-radio-button(label="Everyone")
|
||||
div
|
||||
span.toggle-name OnPlayerLeft
|
||||
toggle-switch(:options="toggleSwitchOptionsEveryone" group="switchNotyGroupOnPlayerLeft" v-model="sharedFeedFilters.noty.OnPlayerLeft" class="toggle-switch")
|
||||
el-radio-group(v-model="sharedFeedFilters.noty.OnPlayerLeft" size="mini")
|
||||
el-radio-button(label="Off")
|
||||
el-radio-button(label="VIP")
|
||||
el-radio-button(label="Friends")
|
||||
el-radio-button(label="Everyone")
|
||||
div
|
||||
span.toggle-name Online
|
||||
toggle-switch(:options="toggleSwitchOptionsFriends" group="switchNotyGroupOnline" v-model="sharedFeedFilters.noty.Online" class="toggle-switch")
|
||||
el-radio-group(v-model="sharedFeedFilters.noty.Online" size="mini")
|
||||
el-radio-button(label="Off")
|
||||
el-radio-button(label="VIP")
|
||||
el-radio-button(label="Friends")
|
||||
div
|
||||
span.toggle-name Offline
|
||||
toggle-switch(:options="toggleSwitchOptionsFriends" group="switchNotyGroupOffline" v-model="sharedFeedFilters.noty.Offline" class="toggle-switch")
|
||||
el-radio-group(v-model="sharedFeedFilters.noty.Offline" size="mini")
|
||||
el-radio-button(label="Off")
|
||||
el-radio-button(label="VIP")
|
||||
el-radio-button(label="Friends")
|
||||
div
|
||||
span.toggle-name GPS
|
||||
toggle-switch(:options="toggleSwitchOptionsFriends" group="switchNotyGroupGPS" v-model="sharedFeedFilters.noty.GPS" class="toggle-switch")
|
||||
el-radio-group(v-model="sharedFeedFilters.noty.GPS" size="mini")
|
||||
el-radio-button(label="Off")
|
||||
el-radio-button(label="VIP")
|
||||
el-radio-button(label="Friends")
|
||||
div
|
||||
span.toggle-name Status
|
||||
toggle-switch(:options="toggleSwitchOptionsFriends" group="switchNotyGroupStatus" v-model="sharedFeedFilters.noty.Status" class="toggle-switch")
|
||||
el-radio-group(v-model="sharedFeedFilters.noty.Status" size="mini")
|
||||
el-radio-button(label="Off")
|
||||
el-radio-button(label="VIP")
|
||||
el-radio-button(label="Friends")
|
||||
div
|
||||
span.toggle-name Invite
|
||||
toggle-switch(:options="toggleSwitchOptionsFriends" group="switchNotyGroupinvite" v-model="sharedFeedFilters.noty.invite" class="toggle-switch")
|
||||
el-radio-group(v-model="sharedFeedFilters.noty.invite" size="mini")
|
||||
el-radio-button(label="Off")
|
||||
el-radio-button(label="VIP")
|
||||
el-radio-button(label="Friends")
|
||||
div
|
||||
span.toggle-name Request Invite
|
||||
toggle-switch(:options="toggleSwitchOptionsFriends" group="switchNotyGrouprequestInvite" v-model="sharedFeedFilters.noty.requestInvite" class="toggle-switch")
|
||||
el-radio-group(v-model="sharedFeedFilters.noty.requestInvite" size="mini")
|
||||
el-radio-button(label="Off")
|
||||
el-radio-button(label="VIP")
|
||||
el-radio-button(label="Friends")
|
||||
div
|
||||
span.toggle-name Invite Response
|
||||
toggle-switch(:options="toggleSwitchOptionsFriends" group="switchNotyGroupinviteResponse" v-model="sharedFeedFilters.noty.inviteResponse" class="toggle-switch")
|
||||
el-radio-group(v-model="sharedFeedFilters.noty.inviteResponse" size="mini")
|
||||
el-radio-button(label="Off")
|
||||
el-radio-button(label="VIP")
|
||||
el-radio-button(label="Friends")
|
||||
div
|
||||
span.toggle-name Request Invite Response
|
||||
toggle-switch(:options="toggleSwitchOptionsFriends" group="switchNotyGrouprequestInviteResponse" v-model="sharedFeedFilters.noty.requestInviteResponse" class="toggle-switch")
|
||||
el-radio-group(v-model="sharedFeedFilters.noty.requestInviteResponse" size="mini")
|
||||
el-radio-button(label="Off")
|
||||
el-radio-button(label="VIP")
|
||||
el-radio-button(label="Friends")
|
||||
div
|
||||
span.toggle-name Friend Request
|
||||
toggle-switch(:options="toggleSwitchOptionsOn" group="switchNotyGrouprequestfriendRequest" v-model="sharedFeedFilters.noty.friendRequest" class="toggle-switch")
|
||||
el-radio-group(v-model="sharedFeedFilters.noty.friendRequest" size="mini")
|
||||
el-radio-button(label="Off")
|
||||
el-radio-button(label="On")
|
||||
div
|
||||
span.toggle-name New Friend
|
||||
toggle-switch(:options="toggleSwitchOptionsOn" group="switchNotyGrouprequestFriend" v-model="sharedFeedFilters.noty.Friend" class="toggle-switch")
|
||||
el-radio-group(v-model="sharedFeedFilters.noty.Friend" size="mini")
|
||||
el-radio-button(label="Off")
|
||||
el-radio-button(label="On")
|
||||
div
|
||||
span.toggle-name Unfriend
|
||||
toggle-switch(:options="toggleSwitchOptionsOn" group="switchNotyGrouprequestUnfriend" v-model="sharedFeedFilters.noty.Unfriend" class="toggle-switch")
|
||||
el-radio-group(v-model="sharedFeedFilters.noty.Unfriend" size="mini")
|
||||
el-radio-button(label="Off")
|
||||
el-radio-button(label="On")
|
||||
div
|
||||
span.toggle-name Display Name
|
||||
toggle-switch(:options="toggleSwitchOptionsFriends" group="switchNotyGrouprequestDisplayName" v-model="sharedFeedFilters.noty.DisplayName" class="toggle-switch")
|
||||
el-radio-group(v-model="sharedFeedFilters.noty.DisplayName" size="mini")
|
||||
el-radio-button(label="Off")
|
||||
el-radio-button(label="VIP")
|
||||
el-radio-button(label="Friends")
|
||||
div
|
||||
span.toggle-name Trust Level
|
||||
toggle-switch(:options="toggleSwitchOptionsFriends" group="switchNotyGrouprequestTrustLevel" v-model="sharedFeedFilters.noty.TrustLevel" class="toggle-switch")
|
||||
el-radio-group(v-model="sharedFeedFilters.noty.TrustLevel" size="mini")
|
||||
el-radio-button(label="Off")
|
||||
el-radio-button(label="VIP")
|
||||
el-radio-button(label="Friends")
|
||||
div
|
||||
span.toggle-name Portal Spawn
|
||||
toggle-switch(:options="toggleSwitchOptionsEveryone" group="switchNotyGrouprequestPortalSpawn" v-model="sharedFeedFilters.noty.PortalSpawn" class="toggle-switch")
|
||||
el-radio-group(v-model="sharedFeedFilters.noty.PortalSpawn" size="mini")
|
||||
el-radio-button(label="Off")
|
||||
el-radio-button(label="VIP")
|
||||
el-radio-button(label="Friends")
|
||||
el-radio-button(label="Everyone")
|
||||
div
|
||||
span.toggle-name Events
|
||||
toggle-switch(:options="toggleSwitchOptionsOn" group="switchNotyGrouprequestEvent" v-model="sharedFeedFilters.noty.Event" class="toggle-switch")
|
||||
el-radio-group(v-model="sharedFeedFilters.noty.Event" size="mini")
|
||||
el-radio-button(label="Off")
|
||||
el-radio-button(label="On")
|
||||
div
|
||||
span.toggle-name Video Play
|
||||
toggle-switch(:options="toggleSwitchOptionsOn" group="switchNotyGrouprequestVideoPlay" v-model="sharedFeedFilters.noty.VideoPlay" class="toggle-switch")
|
||||
div
|
||||
span.toggle-name Blocked Player Joins
|
||||
toggle-switch(:options="toggleSwitchOptionsEveryone" group="switchNotyGrouprequestBlockedOnPlayerJoined" v-model="sharedFeedFilters.noty.BlockedOnPlayerJoined" class="toggle-switch")
|
||||
el-radio-group(v-model="sharedFeedFilters.noty.BlockedOnPlayerJoined" size="mini")
|
||||
el-radio-button(label="Off")
|
||||
el-radio-button(label="VIP")
|
||||
el-radio-button(label="Friends")
|
||||
el-radio-button(label="Everyone")
|
||||
div
|
||||
span.toggle-name Blocked Player Leaves
|
||||
toggle-switch(:options="toggleSwitchOptionsEveryone" group="switchNotyGrouprequestBlockedOnPlayerLeft" v-model="sharedFeedFilters.noty.BlockedOnPlayerLeft" class="toggle-switch")
|
||||
el-radio-group(v-model="sharedFeedFilters.noty.BlockedOnPlayerLeft" size="mini")
|
||||
el-radio-button(label="Off")
|
||||
el-radio-button(label="VIP")
|
||||
el-radio-button(label="Friends")
|
||||
el-radio-button(label="Everyone")
|
||||
div
|
||||
span.toggle-name Muted Player Joins
|
||||
toggle-switch(:options="toggleSwitchOptionsEveryone" group="switchNotyGrouprequestMutedOnPlayerJoined" v-model="sharedFeedFilters.noty.MutedOnPlayerJoined" class="toggle-switch")
|
||||
el-radio-group(v-model="sharedFeedFilters.noty.MutedOnPlayerJoined" size="mini")
|
||||
el-radio-button(label="Off")
|
||||
el-radio-button(label="VIP")
|
||||
el-radio-button(label="Friends")
|
||||
el-radio-button(label="Everyone")
|
||||
div
|
||||
span.toggle-name Muted Player Leaves
|
||||
toggle-switch(:options="toggleSwitchOptionsEveryone" group="switchNotyGrouprequestMutedOnPlayerLeft" v-model="sharedFeedFilters.noty.MutedOnPlayerLeft" class="toggle-switch")
|
||||
el-radio-group(v-model="sharedFeedFilters.noty.MutedOnPlayerLeft" size="mini")
|
||||
el-radio-button(label="Off")
|
||||
el-radio-button(label="VIP")
|
||||
el-radio-button(label="Friends")
|
||||
el-radio-button(label="Everyone")
|
||||
template(#footer)
|
||||
el-button(type="small" @click="cancelSharedFeedFilters") Cancel
|
||||
el-button(type="primary" size="small" style="margin-left:10px" @click="saveSharedFeedFilters") Save
|
||||
|
||||
//- dialog: wrist feed filters
|
||||
el-dialog.x-dialog(ref="wristFeedFiltersDialog" :visible.sync="wristFeedFiltersDialog.visible" title="Wrist Feed Filters" width="450px")
|
||||
el-dialog.x-dialog(ref="wristFeedFiltersDialog" :visible.sync="wristFeedFiltersDialog.visible" title="Wrist Feed Filters" width="480px")
|
||||
div.toggle-list
|
||||
div
|
||||
span.toggle-name Self Location
|
||||
toggle-switch(:options="toggleSwitchOptionsOn" group="switchWristGroupLocation" v-model="sharedFeedFilters.wrist.Location" class="toggle-switch")
|
||||
el-radio-group(v-model="sharedFeedFilters.wrist.Location" size="mini")
|
||||
el-radio-button(label="Off")
|
||||
el-radio-button(label="On")
|
||||
div
|
||||
span.toggle-name OnPlayerJoining
|
||||
toggle-switch(:options="toggleSwitchOptionsFriends" group="switchWristGroupOnPlayerJoining" v-model="sharedFeedFilters.wrist.OnPlayerJoining" class="toggle-switch")
|
||||
el-radio-group(v-model="sharedFeedFilters.wrist.OnPlayerJoining" size="mini")
|
||||
el-radio-button(label="Off")
|
||||
el-radio-button(label="VIP")
|
||||
el-radio-button(label="Friends")
|
||||
div
|
||||
span.toggle-name OnPlayerJoined
|
||||
toggle-switch(:options="toggleSwitchOptionsEveryone" group="switchWristGroupOnPlayerJoined" v-model="sharedFeedFilters.wrist.OnPlayerJoined" class="toggle-switch")
|
||||
el-radio-group(v-model="sharedFeedFilters.wrist.OnPlayerJoined" size="mini")
|
||||
el-radio-button(label="Off")
|
||||
el-radio-button(label="VIP")
|
||||
el-radio-button(label="Friends")
|
||||
el-radio-button(label="Everyone")
|
||||
div
|
||||
span.toggle-name OnPlayerLeft
|
||||
toggle-switch(:options="toggleSwitchOptionsEveryone" group="switchWristGroupOnPlayerLeft" v-model="sharedFeedFilters.wrist.OnPlayerLeft" class="toggle-switch")
|
||||
el-radio-group(v-model="sharedFeedFilters.wrist.OnPlayerLeft" size="mini")
|
||||
el-radio-button(label="Off")
|
||||
el-radio-button(label="VIP")
|
||||
el-radio-button(label="Friends")
|
||||
el-radio-button(label="Everyone")
|
||||
div
|
||||
span.toggle-name Online
|
||||
toggle-switch(:options="toggleSwitchOptionsFriends" group="switchWristGroupOnline" v-model="sharedFeedFilters.wrist.Online" class="toggle-switch")
|
||||
el-radio-group(v-model="sharedFeedFilters.wrist.Online" size="mini")
|
||||
el-radio-button(label="Off")
|
||||
el-radio-button(label="VIP")
|
||||
el-radio-button(label="Friends")
|
||||
div
|
||||
span.toggle-name Offline
|
||||
toggle-switch(:options="toggleSwitchOptionsFriends" group="switchWristGroupOffline" v-model="sharedFeedFilters.wrist.Offline" class="toggle-switch")
|
||||
el-radio-group(v-model="sharedFeedFilters.wrist.Offline" size="mini")
|
||||
el-radio-button(label="Off")
|
||||
el-radio-button(label="VIP")
|
||||
el-radio-button(label="Friends")
|
||||
div
|
||||
span.toggle-name GPS
|
||||
toggle-switch(:options="toggleSwitchOptionsFriends" group="switchWristGroupGPS" v-model="sharedFeedFilters.wrist.GPS" class="toggle-switch")
|
||||
el-radio-group(v-model="sharedFeedFilters.wrist.GPS" size="mini")
|
||||
el-radio-button(label="Off")
|
||||
el-radio-button(label="VIP")
|
||||
el-radio-button(label="Friends")
|
||||
div
|
||||
span.toggle-name Status
|
||||
toggle-switch(:options="toggleSwitchOptionsFriends" group="switchWristGroupStatus" v-model="sharedFeedFilters.wrist.Status" class="toggle-switch")
|
||||
el-radio-group(v-model="sharedFeedFilters.wrist.Status" size="mini")
|
||||
el-radio-button(label="Off")
|
||||
el-radio-button(label="VIP")
|
||||
el-radio-button(label="Friends")
|
||||
div
|
||||
span.toggle-name Invite
|
||||
toggle-switch(:options="toggleSwitchOptionsFriends" group="switchWristGroupinvite" v-model="sharedFeedFilters.wrist.invite" class="toggle-switch")
|
||||
el-radio-group(v-model="sharedFeedFilters.wrist.invite" size="mini")
|
||||
el-radio-button(label="Off")
|
||||
el-radio-button(label="VIP")
|
||||
el-radio-button(label="Friends")
|
||||
div
|
||||
span.toggle-name Request Invite
|
||||
toggle-switch(:options="toggleSwitchOptionsFriends" group="switchWristGrouprequestInvite" v-model="sharedFeedFilters.wrist.requestInvite" class="toggle-switch")
|
||||
el-radio-group(v-model="sharedFeedFilters.wrist.requestInvite" size="mini")
|
||||
el-radio-button(label="Off")
|
||||
el-radio-button(label="VIP")
|
||||
el-radio-button(label="Friends")
|
||||
div
|
||||
span.toggle-name Invite Response
|
||||
toggle-switch(:options="toggleSwitchOptionsFriends" group="switchWristGroupinviteResponse" v-model="sharedFeedFilters.wrist.inviteResponse" class="toggle-switch")
|
||||
el-radio-group(v-model="sharedFeedFilters.wrist.inviteResponse" size="mini")
|
||||
el-radio-button(label="Off")
|
||||
el-radio-button(label="VIP")
|
||||
el-radio-button(label="Friends")
|
||||
div
|
||||
span.toggle-name Request Invite Response
|
||||
toggle-switch(:options="toggleSwitchOptionsFriends" group="switchWristGrouprequestInviteResponse" v-model="sharedFeedFilters.wrist.requestInviteResponse" class="toggle-switch")
|
||||
el-radio-group(v-model="sharedFeedFilters.wrist.requestInviteResponse" size="mini")
|
||||
el-radio-button(label="Off")
|
||||
el-radio-button(label="VIP")
|
||||
el-radio-button(label="Friends")
|
||||
div
|
||||
span.toggle-name Friend Request
|
||||
toggle-switch(:options="toggleSwitchOptionsOn" group="switchWristGrouprequestfriendRequest" v-model="sharedFeedFilters.wrist.friendRequest" class="toggle-switch")
|
||||
el-radio-group(v-model="sharedFeedFilters.wrist.friendRequest" size="mini")
|
||||
el-radio-button(label="Off")
|
||||
el-radio-button(label="On")
|
||||
div
|
||||
span.toggle-name New Friend
|
||||
toggle-switch(:options="toggleSwitchOptionsOn" group="switchWristGrouprequestFriend" v-model="sharedFeedFilters.wrist.Friend" class="toggle-switch")
|
||||
el-radio-group(v-model="sharedFeedFilters.wrist.Friend" size="mini")
|
||||
el-radio-button(label="Off")
|
||||
el-radio-button(label="On")
|
||||
div
|
||||
span.toggle-name Unfriend
|
||||
toggle-switch(:options="toggleSwitchOptionsOn" group="switchWristGrouprequestUnfriend" v-model="sharedFeedFilters.wrist.Unfriend" class="toggle-switch")
|
||||
el-radio-group(v-model="sharedFeedFilters.wrist.Unfriend" size="mini")
|
||||
el-radio-button(label="Off")
|
||||
el-radio-button(label="On")
|
||||
div
|
||||
span.toggle-name Display Name
|
||||
toggle-switch(:options="toggleSwitchOptionsFriends" group="switchWristGrouprequestDisplayName" v-model="sharedFeedFilters.wrist.DisplayName" class="toggle-switch")
|
||||
el-radio-group(v-model="sharedFeedFilters.wrist.DisplayName" size="mini")
|
||||
el-radio-button(label="Off")
|
||||
el-radio-button(label="VIP")
|
||||
el-radio-button(label="Friends")
|
||||
div
|
||||
span.toggle-name Trust Level
|
||||
toggle-switch(:options="toggleSwitchOptionsFriends" group="switchWristGrouprequestTrustLevel" v-model="sharedFeedFilters.wrist.TrustLevel" class="toggle-switch")
|
||||
el-radio-group(v-model="sharedFeedFilters.wrist.TrustLevel" size="mini")
|
||||
el-radio-button(label="Off")
|
||||
el-radio-button(label="VIP")
|
||||
el-radio-button(label="Friends")
|
||||
div
|
||||
span.toggle-name Portal Spawn
|
||||
toggle-switch(:options="toggleSwitchOptionsEveryone" group="switchWristGrouprequestPortalSpawn" v-model="sharedFeedFilters.wrist.PortalSpawn" class="toggle-switch")
|
||||
el-radio-group(v-model="sharedFeedFilters.wrist.PortalSpawn" size="mini")
|
||||
el-radio-button(label="Off")
|
||||
el-radio-button(label="VIP")
|
||||
el-radio-button(label="Friends")
|
||||
el-radio-button(label="Everyone")
|
||||
div
|
||||
span.toggle-name Events
|
||||
toggle-switch(:options="toggleSwitchOptionsOn" group="switchWristGrouprequestEvent" v-model="sharedFeedFilters.wrist.Event" class="toggle-switch")
|
||||
el-radio-group(v-model="sharedFeedFilters.wrist.Event" size="mini")
|
||||
el-radio-button(label="Off")
|
||||
el-radio-button(label="On")
|
||||
div
|
||||
span.toggle-name Video Play
|
||||
toggle-switch(:options="toggleSwitchOptionsOn" group="switchWristGrouprequestVideoPlay" v-model="sharedFeedFilters.wrist.VideoPlay" class="toggle-switch")
|
||||
div
|
||||
span.toggle-name Blocked Player Joins
|
||||
toggle-switch(:options="toggleSwitchOptionsEveryone" group="switchWristGrouprequestBlockedOnPlayerJoined" v-model="sharedFeedFilters.wrist.BlockedOnPlayerJoined" class="toggle-switch")
|
||||
el-radio-group(v-model="sharedFeedFilters.wrist.BlockedOnPlayerJoined" size="mini")
|
||||
el-radio-button(label="Off")
|
||||
el-radio-button(label="VIP")
|
||||
el-radio-button(label="Friends")
|
||||
el-radio-button(label="Everyone")
|
||||
div
|
||||
span.toggle-name Blocked Player Leaves
|
||||
toggle-switch(:options="toggleSwitchOptionsEveryone" group="switchWristGrouprequestBlockedOnPlayerLeft" v-model="sharedFeedFilters.wrist.BlockedOnPlayerLeft" class="toggle-switch")
|
||||
el-radio-group(v-model="sharedFeedFilters.wrist.BlockedOnPlayerLeft" size="mini")
|
||||
el-radio-button(label="Off")
|
||||
el-radio-button(label="VIP")
|
||||
el-radio-button(label="Friends")
|
||||
el-radio-button(label="Everyone")
|
||||
div
|
||||
span.toggle-name Muted Player Joins
|
||||
toggle-switch(:options="toggleSwitchOptionsEveryone" group="switchWristGrouprequestMutedOnPlayerJoined" v-model="sharedFeedFilters.wrist.MutedOnPlayerJoined" class="toggle-switch")
|
||||
el-radio-group(v-model="sharedFeedFilters.wrist.MutedOnPlayerJoined" size="mini")
|
||||
el-radio-button(label="Off")
|
||||
el-radio-button(label="VIP")
|
||||
el-radio-button(label="Friends")
|
||||
el-radio-button(label="Everyone")
|
||||
div
|
||||
span.toggle-name Muted Player Leaves
|
||||
toggle-switch(:options="toggleSwitchOptionsEveryone" group="switchWristGrouprequestMutedOnPlayerLeft" v-model="sharedFeedFilters.wrist.MutedOnPlayerLeft" class="toggle-switch")
|
||||
el-radio-group(v-model="sharedFeedFilters.wrist.MutedOnPlayerLeft" size="mini")
|
||||
el-radio-button(label="Off")
|
||||
el-radio-button(label="VIP")
|
||||
el-radio-button(label="Friends")
|
||||
el-radio-button(label="Everyone")
|
||||
template(#footer)
|
||||
el-button(type="small" @click="cancelSharedFeedFilters") Cancel
|
||||
el-button(type="primary" size="small" @click="saveSharedFeedFilters") Save
|
||||
|
||||
Reference in New Issue
Block a user