diff --git a/html/src/app.js b/html/src/app.js
index 8e6d9174..ced32fe1 100644
--- a/html/src/app.js
+++ b/html/src/app.js
@@ -2155,7 +2155,7 @@ speechSynthesis.getVoices();
}
}
var array = Array.from(map.values());
- $app.sortUserDialogWorlds(array);
+ $app.userDialog.worlds = array;
}
});
@@ -9022,6 +9022,7 @@ speechSynthesis.getVoices();
$app.feedSessionTable = [];
$app.friendLogInitStatus = false;
await database.initUserTables(args.json.id);
+ $app.$refs.menu.activeIndex = 'feed';
// eslint-disable-next-line require-atomic-updates
$app.gameLogTable.data = await database.lookupGameLogDatabase(
$app.gameLogTable.search,
@@ -12303,6 +12304,7 @@ speechSynthesis.getVoices();
this.lastLocation$ = L;
}
var hidePrivate = false;
+ // (L.accessType === 'group' && !L.groupAccessType) || L.groupAccessType === 'member')
if (
this.discordHideInvite &&
(L.accessType === 'invite' || L.accessType === 'invite+')
@@ -15590,6 +15592,36 @@ speechSynthesis.getVoices();
// #endregion
// #region | App: User Dialog
+ $app.data.userDialogWorldSortingOptions = {
+ updated: {
+ name: $t('dialog.user.worlds.sorting.updated'),
+ value: 'updated'
+ },
+ created: {
+ name: $t('dialog.user.worlds.sorting.created'),
+ value: 'created'
+ },
+ favorites: {
+ name: $t('dialog.user.worlds.sorting.favorites'),
+ value: 'favorites'
+ },
+ popularity: {
+ name: $t('dialog.user.worlds.sorting.popularity'),
+ value: 'popularity'
+ }
+ };
+
+ $app.data.userDialogWorldOrderOptions = {
+ descending: {
+ name: $t('dialog.user.worlds.order.descending'),
+ value: 'descending'
+ },
+ ascending: {
+ name: $t('dialog.user.worlds.order.ascending'),
+ value: 'ascending'
+ }
+ };
+
$app.data.userDialog = {
visible: false,
loading: false,
@@ -15620,7 +15652,8 @@ speechSynthesis.getVoices();
isAvatarsLoading: false,
isGroupsLoading: false,
- worldSorting: 'update',
+ worldSorting: $app.data.userDialogWorldSortingOptions.updated,
+ worldOrder: $app.data.userDialogWorldOrderOptions.descending,
avatarSorting: 'update',
avatarReleaseStatus: 'all',
@@ -15665,6 +15698,24 @@ speechSynthesis.getVoices();
this.saveMemo(D.id, D.memo);
};
+ $app.methods.setUserDialogWorldSorting = async function (sortOrder) {
+ var D = this.userDialog;
+ if (D.worldSorting === sortOrder) {
+ return;
+ }
+ D.worldSorting = sortOrder;
+ await this.refreshUserDialogWorlds();
+ };
+
+ $app.methods.setUserDialogWorldOrder = async function (order) {
+ var D = this.userDialog;
+ if (D.worldOrder === order) {
+ return;
+ }
+ D.worldOrder = order;
+ await this.refreshUserDialogWorlds();
+ };
+
$app.methods.getFaviconUrl = function (resource) {
try {
var url = new URL(resource);
@@ -16553,17 +16604,7 @@ speechSynthesis.getVoices();
worlds.push(ref);
}
}
- this.sortUserDialogWorlds(worlds);
- };
-
- $app.methods.sortUserDialogWorlds = function (array) {
- var D = this.userDialog;
- if (D.worldSorting === 'update') {
- array.sort(compareByUpdatedAt);
- } else {
- array.sort(compareByName);
- }
- D.worlds = array;
+ $app.userDialog.worlds = worlds;
};
$app.methods.setUserDialogAvatars = function (userId) {
@@ -16728,8 +16769,8 @@ speechSynthesis.getVoices();
var params = {
n: 50,
offset: 0,
- sort: 'updated',
- order: 'descending',
+ sort: this.userDialog.worldSorting.value,
+ order: this.userDialog.worldOrder.value,
// user: 'friends',
userId: D.id,
releaseStatus: 'public'
@@ -16759,7 +16800,7 @@ speechSynthesis.getVoices();
done: () => {
if (D.id === params.userId) {
var array = Array.from(map.values());
- this.sortUserDialogWorlds(array);
+ $app.userDialog.worlds = array;
}
D.isWorldsLoading = false;
}
@@ -17045,11 +17086,6 @@ speechSynthesis.getVoices();
D.treeData = buildTreeData(D.ref);
};
- $app.methods.changeUserDialogWorldSorting = function () {
- var D = this.userDialog;
- this.sortUserDialogWorlds(D.worlds);
- };
-
$app.methods.changeUserDialogAvatarSorting = function () {
var D = this.userDialog;
this.sortUserDialogAvatars(D.avatars);
diff --git a/html/src/index.pug b/html/src/index.pug
index 98186067..fcb159cf 100644
--- a/html/src/index.pug
+++ b/html/src/index.pug
@@ -43,161 +43,162 @@ html
+menuitem('settings', "{{ $t('nav_tooltip.settings') }}", 'el-icon-s-tools')
//- ### Tabs ##
+ template(v-if="API.isLoggedIn")
- //- feed
- include ./mixins/tabs/feed.pug
- +feedTab()
+ //- feed
+ include ./mixins/tabs/feed.pug
+ +feedTab()
- //- gameLog
- include ./mixins/tabs/gameLog.pug
- +gameLogTab()
+ //- gameLog
+ include ./mixins/tabs/gameLog.pug
+ +gameLogTab()
- //- playerList
- include ./mixins/tabs/playerList.pug
- +playerListTab()
+ //- playerList
+ include ./mixins/tabs/playerList.pug
+ +playerListTab()
- //- search
- include ./mixins/tabs/search.pug
- +searchTab()
+ //- search
+ include ./mixins/tabs/search.pug
+ +searchTab()
- //- favorite
- include ./mixins/tabs/favorites.pug
- +favoritesTab()
+ //- favorite
+ include ./mixins/tabs/favorites.pug
+ +favoritesTab()
- //- friendLog
- include ./mixins/tabs/friendLog.pug
- +friendLogTab()
+ //- friendLog
+ include ./mixins/tabs/friendLog.pug
+ +friendLogTab()
- //- moderation
- include ./mixins/tabs/moderation.pug
- +moderationTab()
+ //- moderation
+ include ./mixins/tabs/moderation.pug
+ +moderationTab()
- //- notification
- include ./mixins/tabs/notifications.pug
- +notificationsTab()
+ //- notification
+ include ./mixins/tabs/notifications.pug
+ +notificationsTab()
- //- profile
- include ./mixins/tabs/profile.pug
- +profileTab()
+ //- profile
+ include ./mixins/tabs/profile.pug
+ +profileTab()
- //- friends list
- include ./mixins/tabs/friendsList.pug
- +friendsListTab()
+ //- friends list
+ include ./mixins/tabs/friendsList.pug
+ +friendsListTab()
- //- settings
- include ./mixins/tabs/settings.pug
- +settingsTab()
+ //- settings
+ include ./mixins/tabs/settings.pug
+ +settingsTab()
- //- friends list sidebar
- .x-aside-container(v-show="$refs.menu && $refs.menu.activeIndex !== 'friendsList'" id="aside")
- div(style="display:flex;align-items:baseline")
- el-select(v-model="quickSearch" clearable :placeholder="$t('side_panel.search_placeholder')" filterable remote :remote-method="quickSearchRemoteMethod" popper-class="x-quick-search" @change="quickSearchChange" @visible-change="quickSearchVisibleChange" style="flex:1;padding:10px")
- el-option(v-for="item in quickSearchItems" :key="item.value" :value="item.value" :label="item.label")
- .x-friend-item
- template(v-if="item.ref")
+ //- friends list sidebar
+ .x-aside-container(v-show="$refs.menu && $refs.menu.activeIndex !== 'friendsList'" id="aside")
+ div(style="display:flex;align-items:baseline")
+ el-select(v-model="quickSearch" clearable :placeholder="$t('side_panel.search_placeholder')" filterable remote :remote-method="quickSearchRemoteMethod" popper-class="x-quick-search" @change="quickSearchChange" @visible-change="quickSearchVisibleChange" style="flex:1;padding:10px")
+ el-option(v-for="item in quickSearchItems" :key="item.value" :value="item.value" :label="item.label")
+ .x-friend-item
+ template(v-if="item.ref")
+ .detail
+ span.name(v-text="item.ref.displayName" :style="{'color':item.ref.$userColour}")
+ span.extra(v-if="!item.ref.isFriend")
+ span.extra(v-else-if="item.ref.state === 'offline'") {{ $t('side_panel.search_result_active') }}
+ span.extra(v-else-if="item.ref.state === 'active'") {{ $t('side_panel.search_result_offline') }}
+ location.extra(v-else :location="item.ref.location" :traveling="item.ref.travelingToLocation" :link="false")
+ img.avatar(v-lazy="userImage(item.ref)")
+ span(v-else) {{ $t('side_panel.search_result_more') }} #[span(v-text="item.label" style="font-weight:bold")]
+ el-tooltip(placement="bottom" :content="$t('side_panel.direct_access_tooltip')" :disabled="hideTooltips")
+ el-button(type="default" @click="directAccessPaste" size="mini" icon="el-icon-discover" circle)
+ el-tooltip(placement="bottom" :content="$t('side_panel.refresh_tooltip')" :disabled="hideTooltips")
+ el-button(type="default" @click="refreshFriendsList" :loading="API.isRefreshFriendsLoading" size="mini" icon="el-icon-refresh" circle style="margin-right:10px")
+ el-tabs.zero-margin-tabs(stretch="true" style="height:calc(100% - 60px;margin-top:5px")
+ el-tab-pane
+ template(#label)
+ span {{ $t('side_panel.friends') }} ({{ onlineFriendCount }}/{{ friends.size }})
+ .x-friend-list(style="padding:10px 5px")
+ .x-friend-group.x-link(@click="isFriendsGroupMe = !isFriendsGroupMe" style="padding:0px 0px 5px")
+ i.el-icon-arrow-right(:class="{ rotate: isFriendsGroupMe }")
+ span(style="margin-left:5px") {{ $t('side_panel.me') }}
+ div(v-show="isFriendsGroupMe")
+ .x-friend-item(:key="API.currentUser.id" @click="showUserDialog(API.currentUser.id)")
+ .avatar(:class="userStatusClass(API.currentUser)")
+ img(v-lazy="userImage(API.currentUser)")
+ .detail
+ span.name(v-text="API.currentUser.displayName" :style="{'color':API.currentUser.$userColour}")
+ location.extra(v-if="isGameRunning" :location="lastLocation.location" :traveling="lastLocationDestination" :link="false")
+ location.extra(v-else-if="isRealInstance(API.currentUser.$locationTag) || isRealInstance(API.currentUser.$travelingToLocation)" :location="API.currentUser.$locationTag" :traveling="API.currentUser.$travelingToLocation" :link="false")
+ span.extra(v-else v-text="API.currentUser.statusDescription")
+ .x-friend-group.x-link(@click="isFriendsGroup0 = !isFriendsGroup0" v-show="friendsGroup0.length")
+ i.el-icon-arrow-right(:class="{ rotate: isFriendsGroup0 }")
+ span(style="margin-left:5px") {{ $t('side_panel.favorite') }} ― {{ friendsGroup0.length }}
+ div(v-show="isFriendsGroup0")
+ .x-friend-item(v-for="friend in friendsGroup0" :key="friend.id" @click="showUserDialog(friend.id)")
+ template(v-if="friend.ref")
+ .avatar(:class="userStatusClass(friend.ref, friend.pendingOffline)")
+ img(v-lazy="userImage(friend.ref)")
+ .detail
+ span.name(v-if="!hideUserMemos && friend.$nickName" :style="{'color':friend.ref.$userColour}") {{ friend.ref.displayName }} ({{ friend.$nickName }})
+ span.name(v-else v-text="friend.ref.displayName" :style="{'color':friend.ref.$userColour}")
+ span.extra(v-if="friend.pendingOffline") #[i.el-icon-warning-outline] {{ $t('side_panel.pending_offline') }}
+ location.extra(v-else :location="friend.ref.location" :traveling="friend.ref.travelingToLocation" :link="false")
+ template(v-else)
+ span(v-text="friend.name || friend.id")
+ el-button(type="text" icon="el-icon-close" size="mini" @click.stop="confirmDeleteFriend(friend.id)" style="margin-left:5px")
+ .x-friend-group.x-link(@click="isFriendsGroup1 = !isFriendsGroup1" v-show="friendsGroup1.length")
+ i.el-icon-arrow-right(:class="{ rotate: isFriendsGroup1 }")
+ span(style="margin-left:5px") {{ $t('side_panel.online') }} ― {{ friendsGroup1.length }}
+ div(v-show="isFriendsGroup1")
+ .x-friend-item(v-for="friend in friendsGroup1" :key="friend.id" @click="showUserDialog(friend.id)")
+ template(v-if="friend.ref")
+ .avatar(:class="userStatusClass(friend.ref, friend.pendingOffline)")
+ img(v-lazy="userImage(friend.ref)")
+ .detail
+ span.name(v-if="!hideUserMemos && friend.$nickName" :style="{'color':friend.ref.$userColour}") {{ friend.ref.displayName }} ({{ friend.$nickName }})
+ span.name(v-else v-text="friend.ref.displayName" :style="{'color':friend.ref.$userColour}")
+ span.extra(v-if="friend.pendingOffline") #[i.el-icon-warning-outline] {{ $t('side_panel.pending_offline') }}
+ location.extra(v-else :location="friend.ref.location" :traveling="friend.ref.travelingToLocation" :link="false")
+ template(v-else)
+ span(v-text="friend.name || friend.id")
+ el-button(type="text" icon="el-icon-close" size="mini" @click.stop="confirmDeleteFriend(friend.id)" style="margin-left:5px")
+ .x-friend-group.x-link(@click="isFriendsGroup2 = !isFriendsGroup2" v-show="friendsGroup2.length")
+ i.el-icon-arrow-right(:class="{ rotate: isFriendsGroup2 }")
+ span(style="margin-left:5px") {{ $t('side_panel.active') }} ― {{ friendsGroup2.length }}
+ div(v-show="isFriendsGroup2")
+ .x-friend-item(v-for="friend in friendsGroup2" :key="friend.id" @click="showUserDialog(friend.id)")
+ template(v-if="friend.ref")
+ .avatar
+ img(v-lazy="userImage(friend.ref)")
+ .detail
+ span.name(v-if="!hideUserMemos && friend.$nickName" :style="{'color':friend.ref.$userColour}") {{ friend.ref.displayName }} ({{ friend.$nickName }})
+ span.name(v-else v-text="friend.ref.displayName" :style="{'color':friend.ref.$userColour}")
+ span.extra(v-text="friend.ref.statusDescription" :link="false")
+ template(v-else)
+ span(v-text="friend.name || friend.id")
+ el-button(type="text" icon="el-icon-close" size="mini" @click.stop="confirmDeleteFriend(friend.id)" style="margin-left:5px")
+ .x-friend-group.x-link(@click="isFriendsGroup3 = !isFriendsGroup3" v-show="friendsGroup3.length")
+ i.el-icon-arrow-right(:class="{ rotate: isFriendsGroup3 }")
+ span(style="margin-left:5px") {{ $t('side_panel.offline') }} ― {{ friendsGroup3.length }}
+ div(v-show="isFriendsGroup3")
+ .x-friend-item(v-for="friend in friendsGroup3" :key="friend.id" @click="showUserDialog(friend.id)")
+ template(v-if="friend.ref")
+ .avatar
+ img(v-lazy="userImage(friend.ref)")
+ .detail
+ span.name(v-if="!hideUserMemos && friend.$nickName" :style="{'color':friend.ref.$userColour}") {{ friend.ref.displayName }} ({{ friend.$nickName }})
+ span.name(v-else v-text="friend.ref.displayName" :style="{'color':friend.ref.$userColour}")
+ span.extra(v-text="friend.ref.statusDescription")
+ template(v-else)
+ span(v-text="friend.name || friend.id")
+ el-button(type="text" icon="el-icon-close" size="mini" @click.stop="confirmDeleteFriend(friend.id)" style="margin-left:5px")
+ el-tab-pane
+ template(#label)
+ span {{ $t('side_panel.groups') }} ({{ groupInstances.length }})
+ .x-friend-list(style="padding:10px 5px")
+ .x-friend-item(v-for="ref in groupInstances" :key="ref.instance.id" @click="showGroupDialog(ref.instance.ownerId)")
+ .avatar
+ img(v-lazy="ref.group.iconUrl")
.detail
- span.name(v-text="item.ref.displayName" :style="{'color':item.ref.$userColour}")
- span.extra(v-if="!item.ref.isFriend")
- span.extra(v-else-if="item.ref.state === 'offline'") {{ $t('side_panel.search_result_active') }}
- span.extra(v-else-if="item.ref.state === 'active'") {{ $t('side_panel.search_result_offline') }}
- location.extra(v-else :location="item.ref.location" :traveling="item.ref.travelingToLocation" :link="false")
- img.avatar(v-lazy="userImage(item.ref)")
- span(v-else) {{ $t('side_panel.search_result_more') }} #[span(v-text="item.label" style="font-weight:bold")]
- el-tooltip(placement="bottom" :content="$t('side_panel.direct_access_tooltip')" :disabled="hideTooltips")
- el-button(type="default" @click="directAccessPaste" size="mini" icon="el-icon-discover" circle)
- el-tooltip(placement="bottom" :content="$t('side_panel.refresh_tooltip')" :disabled="hideTooltips")
- el-button(type="default" @click="refreshFriendsList" :loading="API.isRefreshFriendsLoading" size="mini" icon="el-icon-refresh" circle style="margin-right:10px")
- el-tabs.zero-margin-tabs(stretch="true" style="height:calc(100% - 60px;margin-top:5px")
- el-tab-pane
- template(#label)
- span {{ $t('side_panel.friends') }} ({{ onlineFriendCount }}/{{ friends.size }})
- .x-friend-list(style="padding:10px 5px")
- .x-friend-group.x-link(@click="isFriendsGroupMe = !isFriendsGroupMe" style="padding:0px 0px 5px")
- i.el-icon-arrow-right(:class="{ rotate: isFriendsGroupMe }")
- span(style="margin-left:5px") {{ $t('side_panel.me') }}
- div(v-show="isFriendsGroupMe")
- .x-friend-item(:key="API.currentUser.id" @click="showUserDialog(API.currentUser.id)")
- .avatar(:class="userStatusClass(API.currentUser)")
- img(v-lazy="userImage(API.currentUser)")
- .detail
- span.name(v-text="API.currentUser.displayName" :style="{'color':API.currentUser.$userColour}")
- location.extra(v-if="isGameRunning" :location="lastLocation.location" :traveling="lastLocationDestination" :link="false")
- location.extra(v-else-if="isRealInstance(API.currentUser.$locationTag) || isRealInstance(API.currentUser.$travelingToLocation)" :location="API.currentUser.$locationTag" :traveling="API.currentUser.$travelingToLocation" :link="false")
- span.extra(v-else v-text="API.currentUser.statusDescription")
- .x-friend-group.x-link(@click="isFriendsGroup0 = !isFriendsGroup0" v-show="friendsGroup0.length")
- i.el-icon-arrow-right(:class="{ rotate: isFriendsGroup0 }")
- span(style="margin-left:5px") {{ $t('side_panel.favorite') }} ― {{ friendsGroup0.length }}
- div(v-show="isFriendsGroup0")
- .x-friend-item(v-for="friend in friendsGroup0" :key="friend.id" @click="showUserDialog(friend.id)")
- template(v-if="friend.ref")
- .avatar(:class="userStatusClass(friend.ref, friend.pendingOffline)")
- img(v-lazy="userImage(friend.ref)")
- .detail
- span.name(v-if="!hideUserMemos && friend.$nickName" :style="{'color':friend.ref.$userColour}") {{ friend.ref.displayName }} ({{ friend.$nickName }})
- span.name(v-else v-text="friend.ref.displayName" :style="{'color':friend.ref.$userColour}")
- span.extra(v-if="friend.pendingOffline") #[i.el-icon-warning-outline] {{ $t('side_panel.pending_offline') }}
- location.extra(v-else :location="friend.ref.location" :traveling="friend.ref.travelingToLocation" :link="false")
- template(v-else)
- span(v-text="friend.name || friend.id")
- el-button(type="text" icon="el-icon-close" size="mini" @click.stop="confirmDeleteFriend(friend.id)" style="margin-left:5px")
- .x-friend-group.x-link(@click="isFriendsGroup1 = !isFriendsGroup1" v-show="friendsGroup1.length")
- i.el-icon-arrow-right(:class="{ rotate: isFriendsGroup1 }")
- span(style="margin-left:5px") {{ $t('side_panel.online') }} ― {{ friendsGroup1.length }}
- div(v-show="isFriendsGroup1")
- .x-friend-item(v-for="friend in friendsGroup1" :key="friend.id" @click="showUserDialog(friend.id)")
- template(v-if="friend.ref")
- .avatar(:class="userStatusClass(friend.ref, friend.pendingOffline)")
- img(v-lazy="userImage(friend.ref)")
- .detail
- span.name(v-if="!hideUserMemos && friend.$nickName" :style="{'color':friend.ref.$userColour}") {{ friend.ref.displayName }} ({{ friend.$nickName }})
- span.name(v-else v-text="friend.ref.displayName" :style="{'color':friend.ref.$userColour}")
- span.extra(v-if="friend.pendingOffline") #[i.el-icon-warning-outline] {{ $t('side_panel.pending_offline') }}
- location.extra(v-else :location="friend.ref.location" :traveling="friend.ref.travelingToLocation" :link="false")
- template(v-else)
- span(v-text="friend.name || friend.id")
- el-button(type="text" icon="el-icon-close" size="mini" @click.stop="confirmDeleteFriend(friend.id)" style="margin-left:5px")
- .x-friend-group.x-link(@click="isFriendsGroup2 = !isFriendsGroup2" v-show="friendsGroup2.length")
- i.el-icon-arrow-right(:class="{ rotate: isFriendsGroup2 }")
- span(style="margin-left:5px") {{ $t('side_panel.active') }} ― {{ friendsGroup2.length }}
- div(v-show="isFriendsGroup2")
- .x-friend-item(v-for="friend in friendsGroup2" :key="friend.id" @click="showUserDialog(friend.id)")
- template(v-if="friend.ref")
- .avatar
- img(v-lazy="userImage(friend.ref)")
- .detail
- span.name(v-if="!hideUserMemos && friend.$nickName" :style="{'color':friend.ref.$userColour}") {{ friend.ref.displayName }} ({{ friend.$nickName }})
- span.name(v-else v-text="friend.ref.displayName" :style="{'color':friend.ref.$userColour}")
- span.extra(v-text="friend.ref.statusDescription" :link="false")
- template(v-else)
- span(v-text="friend.name || friend.id")
- el-button(type="text" icon="el-icon-close" size="mini" @click.stop="confirmDeleteFriend(friend.id)" style="margin-left:5px")
- .x-friend-group.x-link(@click="isFriendsGroup3 = !isFriendsGroup3" v-show="friendsGroup3.length")
- i.el-icon-arrow-right(:class="{ rotate: isFriendsGroup3 }")
- span(style="margin-left:5px") {{ $t('side_panel.offline') }} ― {{ friendsGroup3.length }}
- div(v-show="isFriendsGroup3")
- .x-friend-item(v-for="friend in friendsGroup3" :key="friend.id" @click="showUserDialog(friend.id)")
- template(v-if="friend.ref")
- .avatar
- img(v-lazy="userImage(friend.ref)")
- .detail
- span.name(v-if="!hideUserMemos && friend.$nickName" :style="{'color':friend.ref.$userColour}") {{ friend.ref.displayName }} ({{ friend.$nickName }})
- span.name(v-else v-text="friend.ref.displayName" :style="{'color':friend.ref.$userColour}")
- span.extra(v-text="friend.ref.statusDescription")
- template(v-else)
- span(v-text="friend.name || friend.id")
- el-button(type="text" icon="el-icon-close" size="mini" @click.stop="confirmDeleteFriend(friend.id)" style="margin-left:5px")
- el-tab-pane
- template(#label)
- span {{ $t('side_panel.groups') }} ({{ groupInstances.length }})
- .x-friend-list(style="padding:10px 5px")
- .x-friend-item(v-for="ref in groupInstances" :key="ref.instance.id" @click="showGroupDialog(ref.instance.ownerId)")
- .avatar
- img(v-lazy="ref.group.iconUrl")
- .detail
- span.name
- span(v-text="ref.group.name")
- span(style="font-weight:normal;margin-left:5px") ({{ ref.instance.userCount }}/{{ ref.instance.capacity }})
- location.extra(:location="ref.instance.location" :link="false")
+ span.name
+ span(v-text="ref.group.name")
+ span(style="font-weight:normal;margin-left:5px") ({{ ref.instance.userCount }}/{{ ref.instance.capacity }})
+ location.extra(:location="ref.instance.location" :link="false")
//- ## Dialogs ## -\\
@@ -319,7 +320,7 @@ html
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" :disabled="typeof userDialog.instance.ref?.canRequestInvite !== 'undefined' && !userDialog.instance.ref.canRequestInvite")
+ 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)
instance-info(:location="userDialog.$location.tag" :instance="userDialog.instance.ref" :friendcount="userDialog.instance.friendCount" :updateelement="updateInstanceInfo")
@@ -494,9 +495,19 @@ html
el-tab-pane(:label="$t('dialog.user.worlds.header')")
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 }) }}
- el-radio-group(v-model="userDialog.worldSorting" size="mini" style="margin-left:30px" @change="changeUserDialogWorldSorting")
- el-radio(label="name") {{ $t('dialog.user.worlds.sort_by_name') }}
- el-radio(label="update") {{ $t('dialog.user.worlds.sort_by_update') }}
+ div(style="float:right")
+ 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-right: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")
.avatar
@@ -615,7 +626,7 @@ html
div(style="margin:5px 0")
location-world(:locationobject="room.$location" :currentuserid="API.currentUser.id" :worlddialogshortname="worldDialog.$location.shortName")
el-tooltip(placement="top" :content="$t('dialog.world.instances.self_invite_tooltip')" :disabled="hideTooltips")
- invite-yourself(:location="room.$location.tag" :shortname="room.$location.shortName" style="margin-left:5px" :disabled="typeof room.ref?.canRequestInvite !== 'undefined' && !room.ref.canRequestInvite")
+ invite-yourself(:location="room.$location.tag" :shortname="room.$location.shortName" style="margin-left:5px")
el-tooltip(placement="top" :content="$t('dialog.world.instances.refresh_instance_info')" :disabled="hideTooltips")
el-button(@click="refreshInstancePlayerCount(room.tag)" size="mini" icon="el-icon-refresh" style="margin-left:5px" circle)
instance-info(:location="room.tag" :instance="room.ref" :friendcount="room.friendCount" :updateelement="updateInstanceInfo")
@@ -916,7 +927,7 @@ html
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" :disabled="typeof room.ref?.canRequestInvite !== 'undefined' && !room.ref.canRequestInvite")
+ 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)
instance-info(:location="room.tag" :instance="room.ref" :friendcount="room.friendCount" :updateelement="updateInstanceInfo")
diff --git a/html/src/localization/strings/en.json b/html/src/localization/strings/en.json
index fa08c4f3..062dcf65 100644
--- a/html/src/localization/strings/en.json
+++ b/html/src/localization/strings/en.json
@@ -600,8 +600,18 @@
"worlds": {
"header": "Worlds",
"total_count": "Total {count}",
- "sort_by_name": "Sort by name",
- "sort_by_update": "Sort by update"
+ "sort_by": "Sort by:",
+ "order_by": "Order by:",
+ "sorting": {
+ "updated": "Updated",
+ "created": "Created",
+ "favorites": "Favorites",
+ "popularity": "Popularity"
+ },
+ "order": {
+ "descending": "Descending",
+ "ascending": "Ascending"
+ }
},
"favorite_worlds": {
"header": "Favorite Worlds"