Update new instance dialog

This commit is contained in:
Natsumi
2024-05-03 15:49:39 +12:00
parent b4a95bb248
commit c4780a96f7
5 changed files with 234 additions and 86 deletions
+130 -36
View File
@@ -5096,6 +5096,10 @@ speechSynthesis.getVoices();
if ($app.galleryDialogVisible) { if ($app.galleryDialogVisible) {
$app.refreshEmojiTable(); $app.refreshEmojiTable();
} }
} else if (contentType === 'avatar') {
// hmm, utilizing this might be too spamy and cause UI to move around
} else if (contentType === 'world') {
// hmm
} else { } else {
console.log('Unknown content-refresh', content); console.log('Unknown content-refresh', content);
} }
@@ -20004,14 +20008,15 @@ speechSynthesis.getVoices();
secureOrShortName: '', secureOrShortName: '',
lastSelectedGroupId: '', lastSelectedGroupId: '',
selectedGroupRoles: [], selectedGroupRoles: [],
roleIds: [] roleIds: [],
groupRef: {}
}; };
API.$on('LOGOUT', function () { API.$on('LOGOUT', function () {
$app.newInstanceDialog.visible = false; $app.newInstanceDialog.visible = false;
}); });
$app.methods.buildInstance = function () { $app.methods.buildLegacyInstance = function () {
var D = this.newInstanceDialog; var D = this.newInstanceDialog;
D.instanceCreated = false; D.instanceCreated = false;
D.shortName = ''; D.shortName = '';
@@ -20062,6 +20067,7 @@ speechSynthesis.getVoices();
D.roleIds = []; D.roleIds = [];
var ref = API.cachedGroups.get(D.groupId); var ref = API.cachedGroups.get(D.groupId);
if (typeof ref !== 'undefined') { if (typeof ref !== 'undefined') {
D.groupRef = ref;
D.selectedGroupRoles = ref.roles; D.selectedGroupRoles = ref.roles;
API.getGroupRoles({ API.getGroupRoles({
groupId: D.groupId groupId: D.groupId
@@ -20075,6 +20081,7 @@ speechSynthesis.getVoices();
if (!D.groupId) { if (!D.groupId) {
D.roleIds = []; D.roleIds = [];
D.selectedGroupRoles = []; D.selectedGroupRoles = [];
D.groupRef = {};
D.lastSelectedGroupId = ''; D.lastSelectedGroupId = '';
} }
D.instanceId = tags.join(''); D.instanceId = tags.join('');
@@ -20082,12 +20089,65 @@ speechSynthesis.getVoices();
this.saveNewInstanceDialog(); this.saveNewInstanceDialog();
}; };
$app.methods.createGroupInstance = function () { $app.methods.buildInstance = function () {
var D = this.newInstanceDialog;
D.instanceCreated = false;
D.instanceId = '';
D.shortName = '';
D.secureOrShortName = '';
if (!D.userId) {
D.userId = API.currentUser.id;
}
if (D.groupId && D.groupId !== D.lastSelectedGroupId) {
D.roleIds = [];
var ref = API.cachedGroups.get(D.groupId);
if (typeof ref !== 'undefined') {
D.groupRef = ref;
D.selectedGroupRoles = ref.roles;
API.getGroupRoles({
groupId: D.groupId
}).then((args) => {
D.lastSelectedGroupId = D.groupId;
D.selectedGroupRoles = args.json;
ref.roles = args.json;
});
}
}
if (!D.groupId) {
D.roleIds = [];
D.groupRef = {};
D.selectedGroupRoles = [];
D.lastSelectedGroupId = '';
}
this.saveNewInstanceDialog();
};
$app.methods.createNewInstance = function () {
var D = this.newInstanceDialog; var D = this.newInstanceDialog;
if (D.loading) { if (D.loading) {
return; return;
} }
D.loading = true; D.loading = true;
var type = 'public';
var canRequestInvite = false;
switch (D.accessType) {
case 'friends':
type = 'friends';
break;
case 'friends+':
type = 'hidden';
break;
case 'invite':
type = 'private';
break;
case 'invite+':
type = 'private';
canRequestInvite = true;
break;
case 'group':
type = 'group';
break;
}
var region = 'us'; var region = 'us';
if (D.region === 'US East') { if (D.region === 'US East') {
region = 'use'; region = 'use';
@@ -20096,19 +20156,22 @@ speechSynthesis.getVoices();
} else if (D.region === 'Japan') { } else if (D.region === 'Japan') {
region = 'jp'; region = 'jp';
} }
var roleIds = []; var params = {
if (D.groupAccessType === 'member') { type,
roleIds = D.roleIds; canRequestInvite,
}
API.createInstance({
type: 'group',
groupAccessType: D.groupAccessType,
worldId: D.worldId, worldId: D.worldId,
ownerId: D.groupId, ownerId: D.userId,
region, region
queueEnabled: D.queueEnabled, };
roleIds if (type === 'group') {
}) params.groupAccessType = D.groupAccessType;
params.ownerId = D.groupId;
params.queueEnabled = D.queueEnabled;
if (D.groupAccessType === 'member') {
params.roleIds = D.roleIds;
}
}
API.createInstance(params)
.then((args) => { .then((args) => {
D.location = args.json.location; D.location = args.json.location;
D.instanceId = args.json.instanceId; D.instanceId = args.json.instanceId;
@@ -20174,10 +20237,6 @@ speechSynthesis.getVoices();
'instanceRegion', 'instanceRegion',
this.newInstanceDialog.region this.newInstanceDialog.region
); );
await configRepository.setString(
'groupInstanceRegion',
this.newInstanceDialog.groupRegion
);
await configRepository.setString( await configRepository.setString(
'instanceDialogInstanceName', 'instanceDialogInstanceName',
this.newInstanceDialog.instanceName this.newInstanceDialog.instanceName
@@ -20215,6 +20274,11 @@ speechSynthesis.getVoices();
this.$nextTick(() => adjustDialogZ(this.$refs.newInstanceDialog.$el)); this.$nextTick(() => adjustDialogZ(this.$refs.newInstanceDialog.$el));
var D = this.newInstanceDialog; var D = this.newInstanceDialog;
var L = API.parseLocation(tag); var L = API.parseLocation(tag);
if (D.worldId === L.worldId) {
// reopening dialog, keep last open instance
D.visible = true;
return;
}
D.worldId = L.worldId; D.worldId = L.worldId;
D.accessType = await configRepository.getString( D.accessType = await configRepository.getString(
'instanceDialogAccessType', 'instanceDialogAccessType',
@@ -20224,10 +20288,6 @@ speechSynthesis.getVoices();
'instanceRegion', 'instanceRegion',
'US West' 'US West'
); );
D.groupRegion = await configRepository.getString(
'groupInstanceRegion',
'US West'
);
D.instanceName = await configRepository.getString( D.instanceName = await configRepository.getString(
'instanceDialogInstanceName', 'instanceDialogInstanceName',
'' ''
@@ -20248,11 +20308,17 @@ speechSynthesis.getVoices();
D.instanceCreated = false; D.instanceCreated = false;
D.lastSelectedGroupId = ''; D.lastSelectedGroupId = '';
D.selectedGroupRoles = []; D.selectedGroupRoles = [];
D.groupRef = {};
D.roleIds = []; D.roleIds = [];
D.strict = false; D.strict = false;
D.shortName = ''; D.shortName = '';
D.secureOrShortName = ''; D.secureOrShortName = '';
this.buildInstance(); API.getGroupPermissions({ userId: API.currentUser.id });
if (D.selectedTab === '0') {
this.buildInstance();
} else {
this.buildLegacyInstance();
}
this.updateNewInstanceDialog(); this.updateNewInstanceDialog();
D.visible = true; D.visible = true;
}; };
@@ -24526,6 +24592,7 @@ speechSynthesis.getVoices();
var ref = API.applyGroup(group); var ref = API.applyGroup(group);
API.currentUserGroups.set(group.id, ref); API.currentUserGroups.set(group.id, ref);
}); });
await API.getGroupPermissions({ userId: API.currentUser.id });
this.saveCurrentUserGroups(); this.saveCurrentUserGroups();
}; };
@@ -28372,7 +28439,34 @@ speechSynthesis.getVoices();
} }
}); });
//** API.getGroupPermissions = function (params) {
return this.call(`users/${params.userId}/groups/permissions`, {
method: 'GET'
}).then((json) => {
var args = {
json,
params
};
this.$emit('GROUP:PERMISSIONS', args);
return args;
});
};
API.$on('GROUP:PERMISSIONS', function (args) {
if (args.params.userId !== this.currentUser.id) {
return;
}
var json = args.json;
for (var groupId in json) {
var permissions = json[groupId];
var group = this.cachedGroups.get(groupId);
if (group) {
group.myMember.permissions = permissions;
}
}
});
// /**
// * @param {{ groupId: string }} params // * @param {{ groupId: string }} params
// * @return { Promise<{json: any, params}> } // * @return { Promise<{json: any, params}> }
// */ // */
@@ -28867,8 +28961,6 @@ speechSynthesis.getVoices();
var ref = this.applyGroupMember(json); var ref = this.applyGroupMember(json);
$app.groupBansModerationTable.data.push(ref); $app.groupBansModerationTable.data.push(ref);
} }
// $app.groupBansModerationTable.data =
// $app.groupBansModerationTable.data.concat(args.json);
}); });
$app.methods.getAllGroupLogs = async function (groupId) { $app.methods.getAllGroupLogs = async function (groupId) {
@@ -30109,6 +30201,17 @@ speechSynthesis.getVoices();
await this.getGroupDialogGroupMembers(); await this.getGroupDialogGroupMembers();
}; };
$app.methods.getCurrentUserRepresentedGroup = function () {
return API.getRepresentedGroup({
userId: API.currentUser.id
}).then((args) => {
this.userDialog.representedGroup = args.json;
return args;
});
};
// group permissions
$app.methods.hasGroupPermission = function (ref, permission) { $app.methods.hasGroupPermission = function (ref, permission) {
if ( if (
ref && ref &&
@@ -30122,15 +30225,6 @@ speechSynthesis.getVoices();
return false; return false;
}; };
$app.methods.getCurrentUserRepresentedGroup = function () {
return API.getRepresentedGroup({
userId: API.currentUser.id
}).then((args) => {
this.userDialog.representedGroup = args.json;
return args;
});
};
// group gallery // group gallery
$app.data.isGroupGalleryLoading = false; $app.data.isGroupGalleryLoading = false;
+4
View File
@@ -94,6 +94,10 @@
-webkit-line-clamp: 1; -webkit-line-clamp: 1;
} }
.notification-table .el-table .cell {
-webkit-line-clamp: 2;
}
.el-table__row:hover .el-table__cell .cell { .el-table__row:hover .el-table__cell .cell {
-webkit-line-clamp: unset; -webkit-line-clamp: unset;
} }
+97 -48
View File
@@ -1193,7 +1193,7 @@ html
span {{ groupDialog.memberFilter.name }} #[i.el-icon-arrow-down.el-icon--right] span {{ groupDialog.memberFilter.name }} #[i.el-icon-arrow-down.el-icon--right]
el-dropdown-menu(#default="dropdown") 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 groupDialogFilterOptions" v-text="item.name" @click.native="setGroupMemberFilter(item)")
el-dropdown-item(v-for="(item) in groupDialog.ref.roles" 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") 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-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") .x-friend-item(v-for="user in groupDialog.memberSearchResults" :key="user.id" @click="showUserDialog(user.userId)" class="x-friend-item-border")
@@ -1290,8 +1290,9 @@ html
el-dialog.x-dialog(:before-close="beforeDialogClose" @mousedown.native="dialogMouseDown" @mouseup.native="dialogMouseUp" ref="inviteDialog" :visible.sync="inviteDialog.visible" :title="$t('dialog.invite.header')" width="450px") el-dialog.x-dialog(:before-close="beforeDialogClose" @mousedown.native="dialogMouseDown" @mouseup.native="dialogMouseUp" ref="inviteDialog" :visible.sync="inviteDialog.visible" :title="$t('dialog.invite.header')" width="450px")
div(v-if="inviteDialog.visible" v-loading="inviteDialog.loading") div(v-if="inviteDialog.visible" v-loading="inviteDialog.loading")
location(:location="inviteDialog.worldId" :link="false") location(:location="inviteDialog.worldId" :link="false")
el-button(size="mini" v-text="$t('dialog.invite.add_friends_in_instance')" @click="addFriendsInInstanceToInvite" style="margin-top:10px") br
el-button(size="mini" v-text="$t('dialog.invite.add_favorite_friends')" @click="addFavoriteFriendsToInvite" style="margin-top:10px") el-button(size="mini" v-text="$t('dialog.invite.add_friends_in_instance')" @click="addFriendsInInstanceToInvite" :disabled="inviteDialog.friendsInInstance.length === 0" style="margin-top:10px")
el-button(size="mini" v-text="$t('dialog.invite.add_favorite_friends')" @click="addFavoriteFriendsToInvite" :disabled="friendsGroup0.length === 0" style="margin-top:10px")
el-select(v-model="inviteDialog.userIds" multiple clearable :placeholder="$t('dialog.invite.select_placeholder')" filterable :disabled="inviteDialog.loading" style="width:100%;margin-top:15px") el-select(v-model="inviteDialog.userIds" multiple clearable :placeholder="$t('dialog.invite.select_placeholder')" filterable :disabled="inviteDialog.loading" style="width:100%;margin-top:15px")
el-option-group(v-if="API.currentUser" :label="$t('side_panel.me')") el-option-group(v-if="API.currentUser" :label="$t('side_panel.me')")
el-option.x-friend-item(:label="API.currentUser.displayName" :value="API.currentUser.id" style="height:auto") el-option.x-friend-item(:label="API.currentUser.displayName" :value="API.currentUser.id" style="height:auto")
@@ -1403,21 +1404,19 @@ html
el-radio-button(label="invite") {{ $t('dialog.new_instance.access_type_invite') }} el-radio-button(label="invite") {{ $t('dialog.new_instance.access_type_invite') }}
el-form-item(:label="$t('dialog.new_instance.group_access_type')" v-if="newInstanceDialog.accessType === 'group'") el-form-item(:label="$t('dialog.new_instance.group_access_type')" v-if="newInstanceDialog.accessType === 'group'")
el-radio-group(v-model="newInstanceDialog.groupAccessType" size="mini" @change="buildInstance") el-radio-group(v-model="newInstanceDialog.groupAccessType" size="mini" @change="buildInstance")
el-radio-button(label="members") {{ $t('dialog.new_instance.group_access_type_members') }} el-radio-button(label="members" :disabled="!hasGroupPermission(newInstanceDialog.groupRef, 'group-instance-open-create')") {{ $t('dialog.new_instance.group_access_type_members') }}
el-radio-button(label="plus") {{ $t('dialog.new_instance.group_access_type_plus') }} el-radio-button(label="plus" :disabled="!hasGroupPermission(newInstanceDialog.groupRef, 'group-instance-plus-create')") {{ $t('dialog.new_instance.group_access_type_plus') }}
el-radio-button(label="public") {{ $t('dialog.new_instance.group_access_type_public') }} el-radio-button(label="public" :disabled="!hasGroupPermission(newInstanceDialog.groupRef, 'group-instance-public-create') || newInstanceDialog.groupRef.privacy === 'private'") {{ $t('dialog.new_instance.group_access_type_public') }}
//- el-form-item(label="Strict" v-if="newInstanceDialog.accessType === 'friends' || newInstanceDialog.accessType === 'invite'")
//- el-checkbox(v-model="newInstanceDialog.strict") Prevent non friends joining via URL/Instance ID
el-form-item(:label="$t('dialog.new_instance.region')") el-form-item(:label="$t('dialog.new_instance.region')")
el-radio-group(v-model="newInstanceDialog.region" size="mini" @change="buildInstance") el-radio-group(v-model="newInstanceDialog.region" size="mini" @change="buildInstance")
el-radio-button(label="US West") {{ $t('dialog.new_instance.region_usw') }} el-radio-button(label="US West") {{ $t('dialog.new_instance.region_usw') }}
el-radio-button(label="US East") {{ $t('dialog.new_instance.region_use') }} el-radio-button(label="US East") {{ $t('dialog.new_instance.region_use') }}
el-radio-button(label="Europe") {{ $t('dialog.new_instance.region_eu') }} el-radio-button(label="Europe") {{ $t('dialog.new_instance.region_eu') }}
el-radio-button(label="Japan") {{ $t('dialog.new_instance.region_jp') }} el-radio-button(label="Japan") {{ $t('dialog.new_instance.region_jp') }}
el-form-item(:label="$t('dialog.new_instance.queueEnabled')" v-if="newInstanceDialog.accessType === 'group'")
el-checkbox(v-model="newInstanceDialog.queueEnabled" @change="buildInstance")
el-form-item(:label="$t('dialog.new_instance.world_id')") el-form-item(:label="$t('dialog.new_instance.world_id')")
el-input(v-model="newInstanceDialog.worldId" size="mini" @click.native="$event.target.tagName === 'INPUT' && $event.target.select()" @change="buildInstance") el-input(v-model="newInstanceDialog.worldId" size="mini" @click.native="$event.target.tagName === 'INPUT' && $event.target.select()" @change="buildInstance")
el-form-item(:label="$t('dialog.new_instance.instance_id')")
el-input(v-model="newInstanceDialog.instanceName" :placeholder="$t('dialog.new_instance.instance_id_placeholder')" size="mini" @change="buildInstance")
el-form-item(:label="$t('dialog.new_instance.instance_creator')" v-if="newInstanceDialog.accessType !== 'public' && newInstanceDialog.accessType !== 'group'") el-form-item(:label="$t('dialog.new_instance.instance_creator')" v-if="newInstanceDialog.accessType !== 'public' && newInstanceDialog.accessType !== 'group'")
el-select(v-model="newInstanceDialog.userId" clearable :placeholder="$t('dialog.new_instance.instance_creator_placeholder')" filterable style="width:100%" @change="buildInstance") el-select(v-model="newInstanceDialog.userId" clearable :placeholder="$t('dialog.new_instance.instance_creator_placeholder')" filterable style="width:100%" @change="buildInstance")
el-option-group(v-if="API.currentUser" :label="$t('side_panel.me')") el-option-group(v-if="API.currentUser" :label="$t('side_panel.me')")
@@ -1461,41 +1460,12 @@ html
el-form-item(:label="$t('dialog.new_instance.group_id')" v-if="newInstanceDialog.accessType === 'group'") el-form-item(:label="$t('dialog.new_instance.group_id')" v-if="newInstanceDialog.accessType === 'group'")
el-select(v-model="newInstanceDialog.groupId" clearable :placeholder="$t('dialog.new_instance.group_placeholder')" filterable style="width:100%" @change="buildInstance") el-select(v-model="newInstanceDialog.groupId" clearable :placeholder="$t('dialog.new_instance.group_placeholder')" filterable style="width:100%" @change="buildInstance")
el-option-group(:label="$t('dialog.new_instance.group_placeholder')") el-option-group(:label="$t('dialog.new_instance.group_placeholder')")
el-option.x-friend-item(v-if="group" v-for="group in API.currentUserGroups.values()" :key="group.id" :label="group.name" :value="group.id" style="height:auto;width:478px") el-option.x-friend-item(v-if="group && (hasGroupPermission(group, 'group-instance-public-create') || hasGroupPermission(group, 'group-instance-plus-create') || hasGroupPermission(group, 'group-instance-open-create'))" v-for="group in API.currentUserGroups.values()" :key="group.id" :label="group.name" :value="group.id" style="height:auto;width:478px")
.avatar .avatar
img(v-lazy="group.iconUrl") img(v-lazy="group.iconUrl")
.detail .detail
span.name(v-text="group.name") span.name(v-text="group.name")
el-form-item(:label="$t('dialog.new_instance.location')") el-form-item(:label="$t('dialog.new_instance.roles')" v-if="newInstanceDialog.accessType === 'group' && newInstanceDialog.groupAccessType === 'members'")
el-input(v-model="newInstanceDialog.location" size="mini" readonly @click.native="$event.target.tagName === 'INPUT' && $event.target.select()")
el-form-item(:label="$t('dialog.new_instance.url')")
el-input(v-model="newInstanceDialog.url" size="mini" readonly)
el-tab-pane(:label="$t('dialog.new_instance.group')")
el-form(v-if="newInstanceDialog.visible" :model="newInstanceDialog" label-width="150px")
el-form-item(:label="$t('dialog.new_instance.group_access_type')")
el-radio-group(v-model="newInstanceDialog.groupAccessType" size="mini" @change="buildInstance")
el-radio-button(label="members") {{ $t('dialog.new_instance.group_access_type_members') }}
el-radio-button(label="plus") {{ $t('dialog.new_instance.group_access_type_plus') }}
el-radio-button(label="public") {{ $t('dialog.new_instance.group_access_type_public') }}
el-form-item(:label="$t('dialog.new_instance.region')")
el-radio-group(v-model="newInstanceDialog.groupRegion" size="mini" @change="buildInstance")
el-radio-button(label="US West") {{ $t('dialog.new_instance.region_usw') }}
el-radio-button(label="US East") {{ $t('dialog.new_instance.region_use') }}
el-radio-button(label="Europe") {{ $t('dialog.new_instance.region_eu') }}
el-radio-button(label="Japan") {{ $t('dialog.new_instance.region_jp') }}
el-form-item(:label="$t('dialog.new_instance.queueEnabled')")
el-checkbox(v-model="newInstanceDialog.queueEnabled" @change="buildInstance")
el-form-item(:label="$t('dialog.new_instance.world_id')")
el-input(v-model="newInstanceDialog.worldId" size="mini" @click.native="$event.target.tagName === 'INPUT' && $event.target.select()" @change="buildInstance")
el-form-item(:label="$t('dialog.new_instance.group_id')")
el-select(v-model="newInstanceDialog.groupId" clearable :placeholder="$t('dialog.new_instance.group_placeholder')" filterable style="width:100%" @change="buildInstance")
el-option-group(:label="$t('dialog.new_instance.group_placeholder')")
el-option.x-friend-item(v-if="group" v-for="group in API.currentUserGroups.values()" :key="group.id" :label="group.name" :value="group.id" style="height:auto;width:478px")
.avatar
img(v-lazy="group.iconUrl")
.detail
span.name(v-text="group.name")
el-form-item(:label="$t('dialog.new_instance.roles')" v-if="newInstanceDialog.groupAccessType === 'members'")
el-select(v-model="newInstanceDialog.roleIds" multiple clearable :placeholder="$t('dialog.new_instance.role_placeholder')" style="width:100%" @change="buildInstance") el-select(v-model="newInstanceDialog.roleIds" multiple clearable :placeholder="$t('dialog.new_instance.role_placeholder')" style="width:100%" @change="buildInstance")
el-option-group(:label="$t('dialog.new_instance.role_placeholder')") el-option-group(:label="$t('dialog.new_instance.role_placeholder')")
el-option.x-friend-item(v-for="role in newInstanceDialog.selectedGroupRoles" :key="role.id" :label="role.name" :value="role.id" style="height:auto;width:478px") el-option.x-friend-item(v-for="role in newInstanceDialog.selectedGroupRoles" :key="role.id" :label="role.name" :value="role.id" style="height:auto;width:478px")
@@ -1506,19 +1476,98 @@ html
el-input(v-model="newInstanceDialog.location" size="mini" readonly @click.native="$event.target.tagName === 'INPUT' && $event.target.select()") el-input(v-model="newInstanceDialog.location" size="mini" readonly @click.native="$event.target.tagName === 'INPUT' && $event.target.select()")
el-form-item(:label="$t('dialog.new_instance.url')") el-form-item(:label="$t('dialog.new_instance.url')")
el-input(v-model="newInstanceDialog.url" size="mini" readonly) el-input(v-model="newInstanceDialog.url" size="mini" readonly)
el-tab-pane(:label="$t('dialog.new_instance.legacy')")
el-form(v-if="newInstanceDialog.visible" :model="newInstanceDialog" label-width="150px")
el-form-item(:label="$t('dialog.new_instance.access_type')")
el-radio-group(v-model="newInstanceDialog.accessType" size="mini" @change="buildLegacyInstance")
el-radio-button(label="public") {{ $t('dialog.new_instance.access_type_public') }}
el-radio-button(label="group") {{ $t('dialog.new_instance.access_type_group') }}
el-radio-button(label="friends+") {{ $t('dialog.new_instance.access_type_friend_plus') }}
el-radio-button(label="friends") {{ $t('dialog.new_instance.access_type_friend') }}
el-radio-button(label="invite+") {{ $t('dialog.new_instance.access_type_invite_plus') }}
el-radio-button(label="invite") {{ $t('dialog.new_instance.access_type_invite') }}
el-form-item(:label="$t('dialog.new_instance.group_access_type')" v-if="newInstanceDialog.accessType === 'group'")
el-radio-group(v-model="newInstanceDialog.groupAccessType" size="mini" @change="buildLegacyInstance")
el-radio-button(label="members") {{ $t('dialog.new_instance.group_access_type_members') }}
el-radio-button(label="plus") {{ $t('dialog.new_instance.group_access_type_plus') }}
el-radio-button(label="public") {{ $t('dialog.new_instance.group_access_type_public') }}
//- el-form-item(label="Strict" v-if="newInstanceDialog.accessType === 'friends' || newInstanceDialog.accessType === 'invite'")
//- el-checkbox(v-model="newInstanceDialog.strict") Prevent non friends joining via URL/Instance ID
el-form-item(:label="$t('dialog.new_instance.region')")
el-radio-group(v-model="newInstanceDialog.region" size="mini" @change="buildLegacyInstance")
el-radio-button(label="US West") {{ $t('dialog.new_instance.region_usw') }}
el-radio-button(label="US East") {{ $t('dialog.new_instance.region_use') }}
el-radio-button(label="Europe") {{ $t('dialog.new_instance.region_eu') }}
el-radio-button(label="Japan") {{ $t('dialog.new_instance.region_jp') }}
el-form-item(:label="$t('dialog.new_instance.world_id')")
el-input(v-model="newInstanceDialog.worldId" size="mini" @click.native="$event.target.tagName === 'INPUT' && $event.target.select()" @change="buildLegacyInstance")
el-form-item(:label="$t('dialog.new_instance.instance_id')")
el-input(v-model="newInstanceDialog.instanceName" :placeholder="$t('dialog.new_instance.instance_id_placeholder')" size="mini" @change="buildLegacyInstance")
el-form-item(:label="$t('dialog.new_instance.instance_creator')" v-if="newInstanceDialog.accessType !== 'public' && newInstanceDialog.accessType !== 'group'")
el-select(v-model="newInstanceDialog.userId" clearable :placeholder="$t('dialog.new_instance.instance_creator_placeholder')" filterable style="width:100%" @change="buildLegacyInstance")
el-option-group(v-if="API.currentUser" :label="$t('side_panel.me')")
el-option.x-friend-item(:label="API.currentUser.displayName" :value="API.currentUser.id" style="height:auto")
.avatar(:class="userStatusClass(API.currentUser)")
img(v-lazy="userImage(API.currentUser)")
.detail
span.name(v-text="API.currentUser.displayName")
el-option-group(v-if="friendsGroup0.length" :label="$t('side_panel.favorite')")
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-lazy="userImage(friend.ref)")
.detail
span.name(v-text="friend.ref.displayName" :style="{'color':friend.ref.$userColour}")
span(v-else v-text="friend.id")
el-option-group(v-if="friendsGroup1.length" :label="$t('side_panel.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-lazy="userImage(friend.ref)")
.detail
span.name(v-text="friend.ref.displayName" :style="{'color':friend.ref.$userColour}")
span(v-else v-text="friend.id")
el-option-group(v-if="friendsGroup2.length" :label="$t('side_panel.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-lazy="userImage(friend.ref)")
.detail
span.name(v-text="friend.ref.displayName" :style="{'color':friend.ref.$userColour}")
span(v-else v-text="friend.id")
el-option-group(v-if="friendsGroup3.length" :label="$t('side_panel.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-lazy="userImage(friend.ref)")
.detail
span.name(v-text="friend.ref.displayName" :style="{'color':friend.ref.$userColour}")
span(v-else v-text="friend.id")
el-form-item(:label="$t('dialog.new_instance.group_id')" v-if="newInstanceDialog.accessType === 'group'")
el-select(v-model="newInstanceDialog.groupId" clearable :placeholder="$t('dialog.new_instance.group_placeholder')" filterable style="width:100%" @change="buildLegacyInstance")
el-option-group(:label="$t('dialog.new_instance.group_placeholder')")
el-option.x-friend-item(v-if="group" v-for="group in API.currentUserGroups.values()" :key="group.id" :label="group.name" :value="group.id" style="height:auto;width:478px")
.avatar
img(v-lazy="group.iconUrl")
.detail
span.name(v-text="group.name")
el-form-item(:label="$t('dialog.new_instance.location')")
el-input(v-model="newInstanceDialog.location" size="mini" readonly @click.native="$event.target.tagName === 'INPUT' && $event.target.select()")
el-form-item(:label="$t('dialog.new_instance.url')")
el-input(v-model="newInstanceDialog.url" size="mini" readonly)
template(#footer v-if="newInstanceDialog.selectedTab === '0'") template(#footer v-if="newInstanceDialog.selectedTab === '0'")
el-button(size="small" @click="copyInstanceUrl(newInstanceDialog.location)") {{ $t('dialog.new_instance.copy_url') }}
el-button(size="small" @click="selfInvite(newInstanceDialog.location)") {{ $t('dialog.new_instance.self_invite') }}
el-button(size="small" @click="showInviteDialog(newInstanceDialog.location)" :disabled="(newInstanceDialog.accessType === 'friends' || newInstanceDialog.accessType === 'invite') && newInstanceDialog.userId !== API.currentUser.id") {{ $t('dialog.new_instance.invite') }}
el-button(type="primary" size="small" @click="showLaunchDialog(newInstanceDialog.location, newInstanceDialog.shortName)") {{ $t('dialog.new_instance.launch') }}
template(#footer v-else-if="newInstanceDialog.selectedTab === '1'")
template(v-if="newInstanceDialog.instanceCreated") template(v-if="newInstanceDialog.instanceCreated")
el-button(size="small" @click="copyInstanceUrl(newInstanceDialog.location)") {{ $t('dialog.new_instance.copy_url') }} el-button(size="small" @click="copyInstanceUrl(newInstanceDialog.location)") {{ $t('dialog.new_instance.copy_url') }}
el-button(size="small" @click="selfInvite(newInstanceDialog.location)") {{ $t('dialog.new_instance.self_invite') }} el-button(size="small" @click="selfInvite(newInstanceDialog.location)") {{ $t('dialog.new_instance.self_invite') }}
el-button(size="small" @click="showInviteDialog(newInstanceDialog.location)" :disabled="(newInstanceDialog.accessType === 'friends' || newInstanceDialog.accessType === 'invite') && newInstanceDialog.userId !== API.currentUser.id") {{ $t('dialog.new_instance.invite') }} el-button(size="small" @click="showInviteDialog(newInstanceDialog.location)" :disabled="(newInstanceDialog.accessType === 'friends' || newInstanceDialog.accessType === 'invite') && newInstanceDialog.userId !== API.currentUser.id") {{ $t('dialog.new_instance.invite') }}
el-button(type="primary" size="small" @click="showLaunchDialog(newInstanceDialog.location, newInstanceDialog.shortName)") {{ $t('dialog.new_instance.launch') }} el-button(type="primary" size="small" @click="showLaunchDialog(newInstanceDialog.location, newInstanceDialog.shortName)") {{ $t('dialog.new_instance.launch') }}
template(v-else) template(v-else)
el-button(type="primary" size="small" @click="createGroupInstance()" :disabled="!newInstanceDialog.groupId") {{ $t('dialog.new_instance.create_instance') }} el-button(type="primary" size="small" @click="createNewInstance()") {{ $t('dialog.new_instance.create_instance') }}
template(#footer v-else-if="newInstanceDialog.selectedTab === '1'")
el-button(size="small" @click="copyInstanceUrl(newInstanceDialog.location)") {{ $t('dialog.new_instance.copy_url') }}
el-button(size="small" @click="selfInvite(newInstanceDialog.location)") {{ $t('dialog.new_instance.self_invite') }}
el-button(size="small" @click="showInviteDialog(newInstanceDialog.location)" :disabled="(newInstanceDialog.accessType === 'friends' || newInstanceDialog.accessType === 'invite') && newInstanceDialog.userId !== API.currentUser.id") {{ $t('dialog.new_instance.invite') }}
el-button(type="primary" size="small" @click="showLaunchDialog(newInstanceDialog.location, newInstanceDialog.shortName)") {{ $t('dialog.new_instance.launch') }}
//- dialog: launch options //- dialog: launch options
el-dialog.x-dialog(:before-close="beforeDialogClose" @mousedown.native="dialogMouseDown" @mouseup.native="dialogMouseUp" ref="launchOptionsDialog" :visible.sync="launchOptionsDialog.visible" :title="$t('dialog.launch_options.header')" width="600px") el-dialog.x-dialog(:before-close="beforeDialogClose" @mousedown.native="dialogMouseDown" @mouseup.native="dialogMouseUp" ref="launchOptionsDialog" :visible.sync="launchOptionsDialog.visible" :title="$t('dialog.launch_options.header')" width="600px")
@@ -2962,7 +3011,7 @@ html
span {{ groupDialog.memberFilter.name }} #[i.el-icon-arrow-down.el-icon--right] span {{ groupDialog.memberFilter.name }} #[i.el-icon-arrow-down.el-icon--right]
el-dropdown-menu(#default="dropdown") 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 groupDialogFilterOptions" v-text="item.name" @click.native="setGroupMemberFilter(item)")
el-dropdown-item(v-for="(item) in groupDialog.ref.roles" 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" :disabled="!hasGroupPermission(groupDialog.ref, 'group-bans-manage')" @input="groupMembersSearch" clearable size="mini" :placeholder="$t('dialog.group.members.search')" style="margin-top:10px;margin-bottom:10px") el-input(v-model="groupDialog.memberSearch" :disabled="!hasGroupPermission(groupDialog.ref, 'group-bans-manage')" @input="groupMembersSearch" clearable size="mini" :placeholder="$t('dialog.group.members.search')" style="margin-top:10px;margin-bottom:10px")
br br
el-button(size="small" @click="selectAllGroupMembers") {{ $t('dialog.group_member_moderation.select_all') }} el-button(size="small" @click="selectAllGroupMembers") {{ $t('dialog.group_member_moderation.select_all') }}
+1
View File
@@ -960,6 +960,7 @@
"queueEnabled": "Queue", "queueEnabled": "Queue",
"normal": "Normal", "normal": "Normal",
"group": "Group", "group": "Group",
"legacy": "Legacy",
"roles": "Roles" "roles": "Roles"
}, },
"launch_options": { "launch_options": {
+2 -2
View File
@@ -1,6 +1,6 @@
mixin notificationsTab() mixin notificationsTab()
.x-container(v-show="$refs.menu && $refs.menu.activeIndex === 'notification'" v-if="$refs.menu && $refs.menu.activeIndex === 'notification'" v-loading="API.isNotificationsLoading") .x-container(v-show="$refs.menu && $refs.menu.activeIndex === 'notification'" v-if="$refs.menu && $refs.menu.activeIndex === 'notification'" v-loading="API.isNotificationsLoading")
data-tables(v-bind="notificationTable") data-tables(v-bind="notificationTable" class="notification-table")
template(#tool) template(#tool)
div(style="margin:0 0 10px;display:flex;align-items:center") div(style="margin:0 0 10px;display:flex;align-items:center")
el-select(v-model="notificationTable.filters[0].value" @change="saveTableFilters" multiple clearable collapse-tags style="flex:1" :placeholder="$t('view.notification.filter_placeholder')") el-select(v-model="notificationTable.filters[0].value" @change="saveTableFilters" multiple clearable collapse-tags style="flex:1" :placeholder="$t('view.notification.filter_placeholder')")
@@ -53,7 +53,7 @@ mixin notificationsTab()
span.x-link(v-if="scope.row.type === 'invite'" @click="showWorldDialog(scope.row.details.worldId)") span.x-link(v-if="scope.row.type === 'invite'" @click="showWorldDialog(scope.row.details.worldId)")
location(v-if="scope.row.details" :location="scope.row.details.worldId" :hint="scope.row.details.worldName" :grouphint="scope.row.details.groupName" :link="false") location(v-if="scope.row.details" :location="scope.row.details.worldId" :hint="scope.row.details.worldName" :grouphint="scope.row.details.groupName" :link="false")
br br
span(v-else-if="scope.row.message && scope.row.message !== `This is a generated invite to ${scope.row.details?.worldName}`" v-text="scope.row.message") span(v-if="scope.row.message && scope.row.message !== `This is a generated invite to ${scope.row.details?.worldName}`" v-text="scope.row.message")
span(v-else-if='scope.row.details && scope.row.details.inviteMessage' v-text="scope.row.details.inviteMessage") span(v-else-if='scope.row.details && scope.row.details.inviteMessage' v-text="scope.row.details.inviteMessage")
span(v-else-if='scope.row.details && scope.row.details.requestMessage' v-text="scope.row.details.requestMessage") span(v-else-if='scope.row.details && scope.row.details.requestMessage' v-text="scope.row.details.requestMessage")
span(v-else-if='scope.row.details && scope.row.details.responseMessage' v-text="scope.row.details.responseMessage") span(v-else-if='scope.row.details && scope.row.details.responseMessage' v-text="scope.row.details.responseMessage")